Giter Club home page Giter Club logo

pkc-mms-rando's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

samfin choatix

pkc-mms-rando's Issues

Warp randomiser generates inaccessible hills and overworld softlocks

Background

Inaccessible hills occur when any terrain intended to be accessed cannot be accessed as it is blocked by ledges. For example, if Elm's Lab was only accessible from the Route 4 entrance to Mt. Moon and vice versa, it would be inaccessible.

Overworld softlocks occur when a player makes a 1-way movement, such as hopping a ledge, dropping down a pit or surfing down a waterfall, and not being able to escape without the use of an escape rope, teleport, dig, blacking out or other unconventional techniques.

Causes

These are caused by 1-way overworld movement, much like many vanilla softlocks. Map culprits include ledges, pits and waterfalls, and even things like escape ropes, teleport, dig and blocking out can get players softlocked too. The randomiser does not account for these.

Solutions

  • Simulate Player movement between warps
  • Record which warps are accessible from each other
  • While randomising warps, leave at least one warp above each ledge as a destination for something below the ledge, and leave at least one warp below each ledge as a source for something above the ledge

Unable to compile project

Sorry if this sounds a bit dumb of me, but I'm still new to the language (only really worked with it in the context of UPR-ZX before), however upon trying to compile I get one of two errors:

Either it fails because it can't find the com.gmeister.temp.maps:maps:jar:0.0.1-SNAPSHOT artifact, or can't find the com.gmeister.temp.maps package, I did get the Maven script working and am using the correct JDK version for sure.

The project also seems to reference files that aren't in the repo, specifically the map tile randomization part. (though I only really want to get warp, music pointer, sfx pointer and script randomization to work, to see how it all plays like and if these options are enjoyable in their current form).

I'm not sure what I'm doing wrong, maybe there's a hardcoded filepath I didn't notice, though the notes aren't exactly clear.

Warp randomiser generates fragmented overworlds

Background

A fragmented overworld is one in which areas intended to be accessible become inaccessible as they can only be accessed from other inaccessible maps. For example, if the player's room led to Elm's lab and vice versa, these maps would be unable to access any others, and no other maps would be able to access them (as long as no other warps lead to those maps).

Causes

All existing warp randomisers make no attempt to stop this, and may straight up link two dead end rooms together such as in the case above.

However, a fragmented overworld is also guaranteed to generate if too many warps are randomised to lead to other warps which can be accessed in other ways. For instance, if it is known that the player can walk between two warps during the randomisation process, having these warps access each other decreases the number of warps available to lead to dead end warps, such as houses. Towards the end of randomisation, these houses have to lead to each other instead of the main overworld as there are no warps left within it to link to.

This is a problem in all existing warp randomiser code, including the main one, shuffleWarpGroups

Gonna leave this link here as a test too:

public void shuffleWarpGroups(ArrayList<ArrayList<Warp>> warpGroups, boolean allowSelfWarps, boolean twoWay)

Solutions

During randomisation:

  • track overworld fragments, and the number of accessible warps within them (bear in mind a single house with it's entrance carpet can be considered a fragment)
  • prevent direct creation of isolated fragments
  • prioritise warping between fragments instead of within fragments

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.