editor-readme
Super Swadge Land is a conventional 2D platformer action game. The base game mechanics are inspired by a certain funny mustachioed plumber wahoo game. However, while overcoming obstacle course-like levels is the primary goal, high score chasing is a highly encouraged (but not required) side goal. The combo multiplier advances with most actions: defeating enemies, collecting coins, beaking brick blocks, collecting powerups, etc; thus adding hidden depth to each level!
- Aseprite v1.3 beta https://www.aseprite.org
- Pixel art editor, paid software ($20)
- Purchase will give you access to stable and beta versions
- Choose the beta version, as that is currently the only one that supports tilemaps
- Level template file
- Aseprite script for exporting levels
- https://github.com/AEFeinstein/Super-2023-Swadge-FW/blob/platformer/tools/platformer/editor/export-tilemap-binary.lua
- Place in Aseprite Scripts folder
- Use "File -> Scripts -> Open Scripts Folder" to access the folder.
- Open the template file in Aesprite
- If you don't see the Layers pane, add a new layer and then delete it to make it appear.
- Select the Tilemap layer (may be named "Tilemap 1")
- On the top left of the window, underneath the lock icon, make sure the brick icon button is pressed. (You should see the tileset instead of the color palette)
- Click on a tile to select it, then draw in the canvas as you would in any pixel art editor!
- You can place objects just like any other tile. See the tiles with ID of 128 and greater.
- When you're done, use File -> Scripts -> export-tilemap-binary to export your level. Using the dialog box, select the filename/location to which it will be saved. Filenames must be limited to 12 characters including .bin extension!!
- Place the exported file in assets/platformer/levels.
- If you're overwriting an existing level file, delete the old version from the spiffs_image directory before building!
- Update the leveldef_t struct in mode_platformer.c to add your level to the game!
- Levels must be between 19x14 and 255x255 tiles in size. (Use Sprite -> Canvas Size to select a size)
- Every level must have exactly one START tile. This determines where the player starts.
- Every level must have at least one goal tile (dark green blocks with white lines and a letters from A to D, including a star).
- Tiles that look like boxes or circles with hex numbers are unimplemented. Don't use them.
- The player spawn tile (ID=128) actually will spawn another player object, and weird stuff will happen. Don't use it! If you are trying to set a start location for the player, use the START tile (ID=1).
- This game implements conventional platformer mechanics: Holding the B button to run, momentum, jump heights that depend on the player's horizontal velocity at the time of jump and can be cancelled by releasnig the A button, time limits, etc. If you design your levels similar to a certain funny mustachioed plumber wahoo game, you will be on the right track.
- Try to include opportunities for the player to maintain a combo multiplier from the beginning of the level all the way to the end. Coins, enemies, brick blocks, and powerups will all count towards keeping combos alive.
- Use invisible blocks to prevent the player from leaving the left or right side of a level.
- Make the end of the level fun. Challenge the player to jump as far as possible across a field of goal tiles of increasing point value. Or mix things up by putting the star-rank goal tile in the middle! Or put enemies in the goal zone to make things really interesting! The possibilities are endless...
All empty spaces are represented with tile 0.
Tile Id | Tile Name | Appearance in editor |
---|---|---|
0 | TILE_EMPTY | (no image) |
These tiles represent specific locations within the level to which the player can be teleported, usually by touching a Warp object.
In the editor they can either represent a warp entrance or warp destination, depending on what kind of tile it is placed above:
- When placed directly above a Container Block or Brick Block:
- The Container Block or Brick Block will release a Warp Vortex that will send the player to the warp destination when touched.
- Otherwise:
- Defines the corresponding warp destination. All level files will include 16 warp locations. If a warp destination is not defined, it will be set to 0,0.
Warp 0, a.k.a. the "START" tile, represents the starting location for the player in the level.
When placed directly above a Container Block or Brick Block, that block will release the item denoted by the tile.
The basic building blocks of any level. Objects cannot pass or fall through them.
Tile Id | Tile Name | Appearance |
---|---|---|
32 | TILE_GRASS | |
33 | TILE_GROUND | |
35 | TILE_BLOCK | |
36 | TILE_METAL_BLOCK | |
37 | TILE_METAL_PIPE_H | |
38 | TILE_METAL_PIPE_V | |
41 | TILE_GIRDER |
Has all the functionality of the Container Block, but any entity (player AND enemies) will bounce off of it!
Holding the jump button while bouncing from the top side will cause the player to jump higher.
Tile Id | Tile Name | Appearance | Notes |
---|---|---|---|
39 | TILE_BOUNCE_BLOCK |
When the player lands on these the level is complete and the appropriate bonus is given.
Tile Id | Tile Name | Appearance |
---|---|---|
59 | TILE_GOAL_100PTS | |
60 | TILE_GOAL_500PTS | |
61 | TILE_GOAL_1000PTS | |
62 | TILE_GOAL_2000PTS | |
63 | TILE_GOAL_5000PTS |
The standard Container Block. Can be activated from any direction. If a Container Block Content Tile is placed above, the block will yield that item when hit.
When a player hits the Container Block, it will bounce in the direction it was hit. Any enemies touching the bouncing block will be defeated!
Tile Id | Tile Name | Appearance |
---|---|---|
64 | TILE_CONTAINER_1 |
Animation frames for the Container Block. Don't use these.
Tile Id | Tile Name | Appearance |
---|---|---|
65 | TILE_CONTAINER_2 | |
66 | TILE_CONTAINER_3 |
Has all the same functionality as the Container Block, but can break depending on how the player collides with it:
- Jumping into the Brick Block from below
- Running into the Brick Block from the side at full speed
However, if the player lands on top of the Brick Block, it will not break and thus is still safe to use as a platform.
Tile Id | Tile Name | Appearance |
---|---|---|
34 | TILE_BRICK_BLOCK |
A coin. If the player touches it, it will be collected.
Tile Id | Tile Name | Appearance |
---|---|---|
67 | TILE_COIN_1 |
Animation frames for the Coin. Don't use these.
Tile Id | Tile Name | Appearance |
---|---|---|
68 | TILE_COIN_2 | |
69 | TILE_COIN_3 |
Objects will pass through these tiles and not interact with them.
Precede your Goal Block areas with these, so that the player knows to prerpare a jump to land on the highest value block possible.
Tile Id | Tile Name | Appearance |
---|---|---|
80 | TILE_BG_GOAL_ZONE |
Use these to direct the player when a level layout is potentially confusing.
Tile Id | Tile Name | Appearance |
---|---|---|
81 | TILE_BG_ARROW_L | |
82 | TILE_BG_ARROW_R | |
83 | TILE_BG_ARROW_U | |
84 | TILE_BG_ARROW_D | |
85 | TILE_BG_ARROW_LU | |
86 | TILE_BG_ARROW_RU | |
87 | TILE_BG_ARROW_LD | |
88 | TILE_BG_ARROW_RD |
Unimplemented.
Tile Id | Tile Name | Appearance |
---|---|---|
70 | TILE_LADDER |
When these tiles scroll into view, the corresponding entity will spawn at that location. NOTE: if 16 entities are active, including the player, further entities will not be spawned until at least 1 becomes inactive.
Use these entities to prevent the screen from scrolling past a certain point in the level. This is useful to keep bonus areas hidden until the player warps into it.
The spawn tile must be scrolled onto the screen for it to take effect. It will immediately despawn in 1 frame after it changes tilemap scrolling parameters.
In the editor, the arrow will point to the line past which the screen will not be allowed to scroll.
Tile Id | Entity Name | Appearance in editor |
---|---|---|
130 | ENTITY_SCROLL_LOCK_LEFT | |
131 | ENTITY_SCROLL_LOCK_RIGHT | |
132 | ENTITY_SCROLL_LOCK_UP | |
133 | ENTITY_SCROLL_LOCK_DOWN |
This entity unlocks scrolling in all directions after at least 1 scroll lock entity has set scrolling limits.
Tile Id | Entity Name | Appearance in editor |
---|---|---|
134 | ENTITY_SCROLL_UNLOCK |
The player can defeat any enemy by jumping on top of it ("stomping").
A basic enemy that walks forward, falls off ledges, and turns around at walls.
A rabbit enemy that is a bit more difficult to stomp as it constantly jumps.
An aggressive enemy that flies through the air, dropping rapidly to the ground in attempt to attack an approaching player below. Note: If the player is above the wasp, it will not attack.
Changes the background color to its specified color when its spawn tile is scrolled onto the screen. Use it to apply a sky color background and to change it to a color that gives the impression of being underground or indoors.
Note: the color shown in the editor does not match the exact color shown in-game. See the hex values below.
Places a checkpoint flag into the level. Must be placed directly underneath TILE_WARPx tile to function! The player will respawn at that warp if the flag is activated.
Tile Id | Entity Name | Appearance in editor |
---|---|---|
158 | ENTITY_CHECKPOINT |