Skip to content

Level Creation & Level Layout Tools

Chopp edited this page Jul 14, 2026 · 2 revisions

Where to begin?

Within Rooms > Stages > 00 - Test Stage, exists rm_template. This is the bare minimum required for a blank level. For making new levels, It is recommended you keep rm_template clean so it can be continued to be duplicated for any new levels you want to make.

With your new room created, the layers should look like this:

Utilities (Instance Layer)
Collision (Folder)
> CollisionTriggers (Instance Layer)
> CollisionB (Tilemap Layer)
> CollisionA (Tilemap Layer)
> CollisionMain (Tilemap Layer)
> CollisionSemi (Tilemap Layer)
Objects (Instance Layer)
BackgroundObject (Instance Layer)
Background (Background Layer)

Image of the layer layout described above

You can add more layers after this, but deleting these preexisting layers can cause the level to crash (especially the collision layers.)

Level Properties

To edit level specific values, you're going to head to your room's creation code. This can be found by clicking the "Creation Code" button when you have a room's properties open. If you duplicated rm_template, the creation code should look like this:

//NOTE: Duplicate this room to make levels!
with(obj_level)
{
	//Set stage music and loop points
	stage_music = MUSIC.TECHDEMO_TOWER
	
	//Set level name
	stage_name = "Template Level";
	
	//Set stage act
	act = 0;
	
	//Is next level doing act transition in case if you do a multi-zone level.
	act_transition = false;
	
	//Animal array
	animal = [A_FLICKY, A_CUCKY, A_RICKY];
	
	//Next level
	next_level = room;
}

stage_music

Determines what the music is for the stage. It's recommended that this is set as something from the MUSIC enum. To add new music, go to game_init_music_list, and insert a new line inside the function game_init_music_list() that runs the function music_add().

What is music_add()?

music_add(music_id, sound_id, loop_start = 0.00, loop_end = 0.00, loop = true)

  • music_id: ID reference for the music you are going to add. Recommended that this is a value from the MUSIC enum.
  • sound_id: The GameMaker audio asset assigned to this music ID.
  • loop_start (optional): When the audio loops, it restarts back at this position in the track. Default is 0.00. (measured in seconds)
  • loop_end (optional): When the audio passes this point, the track loops. If the value is 0, it waits until the end of the track file. Default is 0.00. (measured in seconds)
  • loop (optional): Determines if the track actually loops or not. Default is true.

In Practice

music_add(MUSIC.MARRY_ME, bgm_marry_me)

In game, this would play the audio asset bgm_marry_me to completion before it loops. If you added this correctly inside game_init_music_list(), you should be able to hear this in the Stage Select sound test. The numerical index of your song would be where you put the songs name in the MUSIC enum.

Then, stage_music = MUSIC.MARRY_ME in your level's creation code will play this song for the stage background music.

stage_name

The string that the level title card uses. By default, this should not include the word "Zone".

act

A number that determines the "act" portion of the title card. By default, 0 will display no act number, anything higher would display "Act", then the number inserted.

act_transition

Determines if the level that the game goes to next will have fade out or be a seamless transition. If set to true, there is a bit more work that needs to be done for it to work.

Setup for a act transition

NOTES:

  • The level with act_transition set requires that it ends with obj_signpost, using any other method to end the stage without editing the act clear logic may cause issues or crash the game.
  • You can only have one obj_act_trans_marker in a room. Multiple of these objects are not supported and can cause unintended results.
  • For the parallax to look consistent, both rooms MUST include the same background object, otherwise the effect will not work.

The current stage (the room where act_transition is true) and the stage its going to (the room in next_level) needs to have obj_act_trans_marker in the Utility layer. This object position determines the "anchor point" of transition between both stages.

When the game does an act transition (which occurs only once after an act clear), The player, any hidden monitors, and the signpost have their offsets from obj_act_trans_marker stored. These offsets are applied the objects again relative to the new room's obj_act_trans_marker, along with offsetting the parallax background to look like the previous room, so that it looks like the room never changed.

animal

This 1-dimensional array determines what Animal Buddies are used when destroying a badnik (referenced directly by obj_flicky.) Values inside this array are recommended to be the animal macros (macros with the prefix A_.)

next_level

This stores the reference of what room the game goes to when you beat a stage (referenced directly by obj_act_clear.) Must be a reference to a GameMaker room asset or room index.

Collision Triggers

Path Swap

TODO

Force Roll

TODO

Angle Flip

TODO

Ramp

TODO

Force Angle

TODO

"Tilemap" Objects

Collapsing Platforms

TODO

Breakable Blocks

TODO

Boundaries

TODO