Iso Realms Project Proposal - Spindizzy Random Map Generator
This page details a prospective side-project to the Iso Realms Engine and Spindizzy Dimensions for the random generation of new Spindizzy maps within user-specified parameters. This idea was suggested to me by a friend, so I've decided to investigate the concept and consider what features and functionality would be required if this project were to be carried out. Note that this project is a proposal only and is not currently in development.
The primary deliverable is an Isorealms engine plugin will be created that can randomly generate worlds based on the rules, style and gameplay of Spindizzy. It will be implemented as an alternative to the "Isorealms User Editor". The plugin will offer a number of parameters that can be specified by the user, including map size (number of zones), ratio of puzzles to platforming, difficulty, enemy encounters, etc. The plugin will then generate a Spindizzy map based on the specified parameters and save the map to an XML file that the user can play or edit in the regular Iso Realms Development Environment.
The algorithm needs to be capable of loading and utilising a known set of elements. Loading can probably be performed from the initial section of the included Spindizzy Hangworld XML project file. Utilising this information is probably the biggest technical hurdle to overcome, given that Isorealms is designed specifically to separate engine functionality from engine content. This will require some research.
The algorithm will place blocks to form random paths of platforms that form a maze (using a generic maze generation algorithm), using both flat blocks and ramped surfaces, as well as decorative structures such as walls, bridges, tunnels, etc. around these paths.
Jewels will be placed randomly, with weighting towards being placed at the "dead-ends" of the maze structure. This ensures that the player is required to reach these locations to complete the game.
Jumps and Trampolines
Areas requiring the player to perform jump will be generated by mimicking the movement of GERALD from an existing block structure in order to determine his destination within a zone after a jump. Trampolines may be placed to extend this to multiple sequential jumps. The decision to place a trampoline or normal platform will be random, but will be weighted further towards trampolines at harder difficulty. Once constructed, the algorithm will be required to designate the area of the launch and jump pathways as reserved space to avoid obstruction.
Single directional paths
Single directional paths can be be formed in a number of ways: Physical drops from a higher platform to a lower platform, one-way jumps using ramps, puzzles that require switches that are only accessible from one side, etc. Single directional paths will be used sparingly. The algorithm will be required to connect the end of a single directional path back to a previously established path.
In order to establish some variation in the environments, the algorithm may generate "islands" spanning many zones. An island is an open area that has freely accessible entries to short path ways consisting of various structures situated on the island. In each island screen, a floor will initially be placed to span the entire zone. The algorithm must be prevented from constructing structures that obscure access to areas of the island.
The algorithm will need to ensure appropriate contrast between the colours of each palette. The user can select how many colour palettes will be generated.
Zone Colour Schemes
Zone Colour Schemes will be randomly selected. The user can select a value from a "chaos" scale to determine how palettes will be applied to zones. At full chaos, each new zone takes a completely random colour. At less chaos, a new zone will be more likely to be coloured the same as one that preceded it. This may be desirable to give a greater sense of location in the world. Additionally, the algorithm may weight certain colour sets to be used more often than others, especially at lower chaos values.
Enemy encounters should be rare - one or two per zone at the very highest difficulty setting. The algorithm should take care to generate larger structures that allow the player to pass without an enemy collision.
A zone is randomly determined to be a water zone or not. A water zone simply has water placed at the bottom before blocks are added. The determination of water placement will work using a "chaos" scale, similarly to that described for zone colour schemes.
In order to randomly generate puzzles, it will be necessary to generate the puzzle "cause" and the puzzle "effect" as a pair. The puzzle "cause" will be the switch that causes the puzzle to become solved. The puzzle "effect" may be a lift that activates or blocks that can be activated to appear or disappear. The puzzle "cause" and puzzle "effect" need not be placed in the same zone. The difficulty setting will determine the maximum distance between placement of the puzzle "cause" and puzzle "effect". In addition, some puzzles may be generated to require two "causes" (i.e. a secondary switch), and puzzles may be structurally "chained" in a sequence.
A parameter will be specified to determine zone how likely pathways are to be formed away from and towards the initial starting point. A lower "map spread" value will result in Zones that are clustered together more tightly, whilst a higher value will result in a larger map with sparser zone placement.