Dungeon Design Contest (using GMare)When does it start? - April 22nd
How and till when can I enter? - Post here before April 29th to enter
Till when will it run? - The contest will run till the 31st of May or until all the results have been send in
On April 22nd each participant will be presented with a GMare file preloaded with the relevant objects and tileset. No additional resources may be used. All particants attempt to build a dungeon before the end of the event, which will then get graded by the general public. The winning design will be converted into a stand alone game, so we actually see it in action. You'll also receive a little trophy by your name as prove.
Below will be a detailed description on how to build a dungeon, how to add object and so on. Please browse through the text when it is finished. Preferably before starting on your dungeon design. Check the final chapter for details on how to submit your endresult.
Registered contestants:-
Homegrownpwn- infinitenintendo
-
Jetstorm4- Knighty
- shongshui
HELP INDEX:
How to build a dungeon?Step 1. Downloading GMare & resourcesGMare can be found here:
http://gmare.codeplex.com/Resources can be found here:
http://www.mediafire.com/?dagrrcudf6amsa6Step 2. Defining roomsWhen building your dungeon you will need to determine how large each individual room will be and where it is placed. To help you can do the following. First create a new layer, called Room Borders, at the default depth of -1000000000. Set your GMare grid to 320x320 and color the borders of the rooms you wish to use. Keep in mind that your dungeon may
use no more than 16 blocks of 320x320 pixels. Here's an example:

The example shows that I want to build 3 rooms in my dungeon, using four blocks of 320x320 pixels.
Just a friendly warning: do not make rooms consisting of more then 6 blocks. It may murder the framerate if you are going place lots of objects in them later.
The following is an example that is wrong:
Rooms must always have a rectangular shape. The example above has a room that is a different shape and thus will not be usable.
After you have placed down the blocks to build your dungeon it is time to document the basic variables needed. Give each room a indexnumber starting from zero and create a separate textfile to document the following per room:
room index / x / y / width / height For the example I would have to document the following.

// Room information
Index / x / y / width / height
0 / 0 / 0 / 320 / 320
1 / 320 / 0 / 320 / 320
2 / 0 / 320 / 640 / 320
Step 3. Tiling your roomsWhen tiling rooms you have to keep an eye out for using the proper depths.
The two depthranges are:
- The upper floor (= all depths between 500 and 600)
- The lower floor (= all depths between 1600 and 1700)
Basically all basic floortiles may be placed within the lower depths. The exception to this is when Link (or any part/extention of Link) can pass under that piece of tiling. In that case the tiling has to be placed within the higher depths. I will demonstrate with the example below.
Upper Layer

Lower Layer
Step 4. Connecting your roomsYou'll want to connect your rooms with doorways, but it is important to understand that you can not just randomly place these anywhere. I'll try to explain and add some examples.
The reason lies in the in-game cameracontrol. When you are walking around in a room nothing outside of that room will be displayed on screen. This means that the camera does not always center on the main character. When you touch a doorway the screen will move in the direction of that doorway towards a new room. Upon arrival the game considers the new room as the current room and it checks if the camera can be centered yet again. If it then can than a nasty screenjump will occur. That's bad room design!
Let's say you want to add a doorway through a vertical wall:
- Place the doorways on both sides of the wall where you'd like to put them.
- Look at the center of your doorways and imagine an line going up 120 pixels and down 120 pixels (also see the example).
- If your line hits any room borders (which are the bright red area's in the example) and the same thing does not happen in both rooms equally then the doorway is not placed correctly. All other situations are fine.
Example 1 (Bad)
In this example I'm trying to place a doorway through a vertical wall. In the second image you can that I have marked the area 120 pixels up and down of the doorways. On the left side of the wall I hit the left room's border. This does not happen on the right side of the wall so my doorway is not placed correctly.
Example 2 (Good)
Here I am once again trying to place a doorway through a vertical wall. The second image highlights an area 120 pixels up and down from the center of the doorway. On both sides of the wall the upper border of the rooms is hit within those 120 pixels. This is fine! It happens, but it happens on both sides so there is no problem. If it would not have hit any borders then it would have been fine also.
Positioning a doorway through a vertical wall is basically the exact same thing. Only instead of looking 120 pixels up and down, you'll need to look 160 pixels left and right.
< I'm skipping the rest of this step to keep things simple. You will not have to worry about changing tiledepths between doors. Nor will you have to place the needed objects >
Step 5. Placing doorsThere are currently 3 doorobjects:
- obj_Locked_Door_Small_Key
- obj_Locked_Door_Large_Key
- obj_Conditional_Door
Place these at the center of the doorway where you want them (see example below).
I will need a list of the following information per locked door:
x / y / doorindex / small key or large key / opened or lockedI will also need a list of the following information per conditional door:
x / y / doorindex / opened or closedDoorindex = The indexnumber by which one or multiple doors may be referenced. The count starts at 0 and there is separate count for locked and conditional doors. Doors that share the same state (=opened or closed) and are dependant of each other (=open together or close together) should be given the same index number. Each other door should get it's own index number.
Here is an example placement and documentation.

// Locked doors
// x / y / doorindex / small key or large key / opened or locked
104 / 264 / 0 / large / locked
104 / 360 / 0 / large / locked
472 / 384 / 1 / small / locked
472 / 240 / 1 / small / locked
// Conditional doors
// x / y / doorindex / opened or closed.
272 / 96 / 0 / closed
352 / 96 / 0 / closed
Step 6. Placing chestsTo add a chest to your game, wether it is a large or small chest, first tile the bottom half of the chest into your room like you would the floor. Then place the object obj_Chest on top of it as show in the example below. Finally document the following information per chest:
x / y / index / large or small chest / contentPossible chest content:
- Nothing
- Rupee (green/blue/red)
- Key (small* / master)
- Book of Mudora
- Bottle containing a fairy
- Compass
- Dungeonmap
- Pegasus boots
- Glove (silver / gold)
- Sword (default / master sword)
- Shield (default / upgraded shield)
- Tunic (upgraded tunic)
* more details can be found in step 11
Example placement and documentation:

// Chests
// x / y / index / large or small chest / content
408 / 200 / 0 / small chest / master key
104 / 464 / 1 / large chest / pegasus boots
Step 7. Placing containersTo add a container to your game simply place the object obj_Container_Creation. Then add the creation coding as seen below. Containers basicly only need three input variables:
-
depth_scale: meaning is the container positioned on the upper or lower floor.
-
type: what kind of container you want it to be. The possible options are listed inside the creation coding example.
-
item_index: what items should be created when the container gets destroyed.
Creation code:
depth_scale = <fill in c_Upper or c_Lower>;
type = <fill in one of the numbers below>;
// 0 = vase normal
// 1 = bush lightworld
// 2 = skull
// 3 = small rock light
// 4 = small rock heavy
// 5 = gray square block
// 6 = large rock heavy
// 7 = large rock darkworld
// 8 = large rock light
// 9 = crate
// 10 = bush darkworld
// 11 = vase middle
// 12 = vase large
// 13 = barrel
item_index = <fill in one of the numbers below>;
// -1 = random
// 0 = none
// 1 = small magic bottle
// 2 = large magic bottle
// 3 = small heart
// 4 = single bomb
// 5 = five arrows,
// 6 = green rupee (1)
// 7 = blue rupee (5)
// 8 = red rupee (20)
// 9 = small key*
* Check out step 11 for more information on adding keys
Overview of the available containers:

Overview of the different weights:
Light (no gloves needed)
0 = vase normal
1 = bush lightworld
2 = skull
10 = bush darkworld
11 = vase middle
Heavy (silver gloves needed)
3 = small rock light
8 = large rock light
9 = crate
12 = vase large
13 = barrel
Very heavy (golden gloves needed)
4 = small rock heavy
5 = gray square block
6 = large rock heavy
7 = large rock darkworld
Step 8. Placing ledges and lightsLedgesLink can jump from ledges in a straight line. You will do not have to place objects needed for this, but as the designer you should make sure Link does not get stuck while landing. I will attempt to further explain this with two images.
Image 1:

The locations along the ledge that are marked
red indicate bad locations to jump down. Moving in a straight line down from there will result in the character getting suck in the walls. The
brown area is equally unsuited because moving down in a straight line will get the player stuck inside the chest or the stairs. Had the chest been positioned 8 pixels lower then the location would still be unsuited, since Link always links a tiny distance away from the wall. Had the chest been positioned 16 pixels lower and the stairs 8 pixels further to the right then it's all good. The
green area is what remains and those are the positions where Link can jump down safely without any further adjustments.
Image 2:

Taking the comments from the first image into consideration your room might end up looking something like this (if you want Link to be able to jump done anywhere possible).
Lights (also named "torches")
1. Small torches
These are the lights you could light with the lantern in Alttp. In my game however you currently can't do anything special with it (yet) so adding one would just be for decoration purposes. Simply place the obj_Small_Torch somewhere in your dungeon and you're done.
2. Large torches
These are the larger lights (32x32 pixels), you sometimes see in dungeons, which are also just meant as decoration. Place the obj_Large_Torch somewhere in your dungeon and you are done.
3. Wall lighting
These are the lights you sometimes see attached to walls inside dungeons. Adding them is a small hazzle. First place a obj_Wall_Light on the wall like as seen in the example above. The add the following creation code:
sprite_index = sprite_Wall_Light_A;
image_speed = 1/6;
Required_Facing = <fill in c_Left, c_Up, c_Right or c_Down>;
For required facing enter the character's facing when he's looking at the light on wall. If you are placing the light on the left side wall of your room then enter c_Left. Use c_Up for the upper wall, c_Down for the lower wall and c_Right for the right wall.
Step 9. Placing switches and movablesSwitches have different means to activate and they are usefull for triggering events, which I'll explain in step 12.
Pressure platesThere are three types of pressure plates:
0. The switch is activate (once) when you stand on it
1. The switch is activate as long as you stand on it
2. The switch alters between an active and inactive state each time you stand on it
To add a pressure plate place an obj_Pressure_Plate somewhere in your dungeon. Next document its location, index number, type and sprite.
// Pressure Plates
// index / x / y / type / sprite
0 / 150 / 320 / 0 / 1
1 / 20 / 764 / 1 / 1
2 / 66 / 320 / 2 / 2
There are two sprites to pick from (as seen in the image below). The first sprite is used for a default pressure plate you see under pots and elsewhere. The second is usefull as a more hidden pressure with a simular floorpatern.
Crash switchesA crash switch is an invisible switch that activates when the player crashes up against it using the running boots. To add one of these position an obj_Crash_Switch inside something solid (like a wall, large light or even a master chest) in a way that the player can walk up against it, but not over it.
Next give it the following creation code:
index = <fill in the crash switch's index number>;
depth_scale = <fill in either c_Upper or c_Lower>;
And then document all of your crash switches:
// Crash switches
// index / x / y
0 / 148 / 320
1 / 204 / 764
Movable objectsWhen defining a movable object you are given the option to disable each individual movement direction. You can forget about this if you want by allowing all movement. If want however it is possible to get creative.
Example 1: Using events (=step 12) you can use this to create a "pull switch". Let's say the movement object is placed at y = 90 and may only move downwards. When it is moved down to y = 98 you can use that as a trigger for an event like opening a door and/or lock any further movement with that movable object by disallowing all directions.
Example 2: Let's say you want a moveable object / statue in your room with a limited action radius. The object allows movement in all directions, but if x < 90 then you disable further movement in the left direction. Doing this for all directions allows you to define a nice (rectangular) area for the movable object to stay containt in. Like for instance, the statue may not move off the carpet on the floor.
To add a movable object place down a obj_Movable_Object somewhere in your dungeon. Next document its location, index number, sprite and which directions the object is allowed to move in.
// Movable objects
// index / x / y / sprite / allow left / allow up / allow right / allow down
0 / 150 / 320 / 1 / true / true / true / true
There are two sprites to pick from (as seen in the image below).
Step 10. Placing enemiesTo create an enemy you will have to place the following object in your dungeon: obj_Enemy_Creation. Next, right click on the created instance and fill in the creation code to specify the enemy parameters. I'll go over the needed creation code per type of enemy in a minute. The symbols <> indicate what values you may (or have to) change. First though there some variables to explain.
depth_scale - This variable tells wether the enemy is positioned on the upper or lower floor. Fill in either c_Upper or c_Lower for the respective floors.
facing - This variables tells which side the enemy should be facing at the time of his creation. Fill in either c_Left, c_Up, c_Right or c_Down.
Enemy creationcodesPlant// parameters
name = "Plant";
depth_scale = <fill in c_Upper or c_Lower>;
enemy_type = 0;
item_index = -1;
active_outside_room = 0;
Stalfos (blue / red / yellow*)// parameters
name = "Skeleton Normal";
depth_scale = <fill in c_Upper or c_Lower>;
enemy_type = <fill in 0 for a blue and 1 for a stronger red stalfos>;
item_index = -1;
facing = <fill in c_Left, c_Up, c_Right or c_Down>
active_outside_room = 0;
*Check out step 12 for information on how to add a the yellow stalfos (= the one falling from the ceiling)Cyclops Guard (green / blue)// parameters
name = "Cyclops Guard";
depth_scale = <fill in c_Upper or c_Lower>;
enemy_type = <fill in 0 for a green and 2 for a stronger blue cyclops>;
item_index = -1;
facing = <fill in c_Left, c_Up, c_Right or c_Down>
active_outside_room = 0;
Anti-Faerie// parameters
name = "Anti-Faerie";
depth_scale = <fill in c_Upper or c_Lower>;
enemy_type = 0;
item_index = -1;
direction = <fill in any number from 0-360 to set the starting direction for this enemy>;
active_outside_room = 0;
Pol's Voice// parameters
name = "Pols Voice";
depth_scale = <fill in c_Upper or c_Lower>;
enemy_type = 0;
item_index = -1;
active_outside_room = 0;
Buzz Blob// parameters
name = "Buzz Blob";
depth_scale = <fill in c_Upper or c_Lower>;
enemy_type = 0;
item_index = -1;
active_outside_room = 0;
Step 11. Understanding keysAdding small keys to your dungeon can be done in 5 ways, which I'll explain below.
Default - placing it on the floorPlace the obj_Common_Item somewhere on the map. Then document the location of the object plus the key index you want to give it.
Inside a containerPlace a container on the map like you normally would. Then document the location of the container and the key index you want to give it.
Inside a chestAdd a chest and document it like you normally would (as seen in step 6). Next document the location of the chest (again) in the small key overview. This time in combination with the key index.
Held by an enemyPlace an enemy on the map like you normally would (as seen in step 10), giving it it's usual creation coding. Then document the location of that enemy in combination with the key index.
Falling from aboveYou may make use of keys that fall from the ceiling if the right conditions are met (see step 12). For example when all the enemies in the room have been killed. Do you not have to place an object in your room for this one. Simply document where you want the key to
land and what it key index should be.
Each key needs it's own index (so they are one time occuring objects) and you'll need to document where it is located. This is important that there is one seperate listing for the small keys eventhough a key's location may also have already been documented elsewhere. Fragmented / scattered documentation is bad!
Example. If I place a key for each of the 5 possible I would have to document something like this:
// Small Keys
// index / x / y / description
0 / 552 / 168 / default
1 / 180 / 180 / inside container
2 / 208 / 766 / inside chest
3 / 344 / 208 / held by enemy
4 / 500 / 504 / falling from above
Step 12. Understanding eventsEvents have to be coded in scripts, so the contestants will not have to actually do this. You can however (to keep it simple) add a default trigger + event to your dungeon by documenting a line like so:
For room <index>: if <condition(s)> then <event(s)>
Should your dungeon be the winner then I'll code the events for you using the given instructions. The conditions and events available are listed below. If however you feel a vital event or condition is missing then you should contact me. The conditions are stated as A = B, but you may also use A < B or A != B and so on. If-then-else is also possible.
Available conditions*:-Entering room
-Chest [index] = opened
-Pressure Plate [index] = active
-Crash switch [index] = active
-Count enemies of type [name or all] = number
-Position [x or y] of Moveable object [index] = value
-Movable object [index] in contact with Pressure Plate [index] = true
-Permanent_condition <index> = value
Events:-Conditional door <index> opens / closes
-Enemy <description> appears at position <x,y>*
-Enemy Yellow Stalfos falls down to position <x,y>*
-Pressure_Plate <index> state = active / inactive
-Crash switch <index> state = active / inactive
-Movable Object <index> allow movement in direction <direction> allow/disallow
-Drop small key <index> down at position <x,y>
-Permanent_condition <index> = value
*For enemies appearing/falling down make sure to also add the creation coding af that enemy to indicate it's type and so on.Permanent conditionsYou've probably noticed that I also listed something called permanent_condition both as an condition and event in the list below. That's a variable name that is stored for your dungeon. This will help you with your events if you want to make an event a one time occurance. Or if you want an event in one room have impact on another room.
To use permanent conditions first define them by documenting them:
permanent conditions
index / starting value
0 / false
1 / 0
2 / -7
ExamplesI'll give some examples of what events can do for your dungeon:
Example 1: When I enter room 3 I immediately want the doors to close and have 3 skeletons and 1 plant appear every time. When all enemies are dead the doors open.
For room 3:
if enter room then
appear blue stalfos at (100,50) , (90,90) and (100,70) and appear plant at (80,80)
if count enemies of type all = 0 then
conditional door 0 opens and conditional door 4 opens
Example 2: I want the same as example 1 but it should only happen when I first enter the room. Remember: I have already documented that permanent_condition[0] = false.
For room 3:
if enter room and permanent_condition 0 = false then
appear blue stalfos at (100,50) , (90,90) and (100,70) and appear plant at (80,80) and permanent_condition 0 = true.
if count enemies of type all = 0 and permanent_condition 0 = false then
conditional door 0 opens and conditional door 4 opens
Example 3: Let's say I have a room with a pressure plate and a movable object. The pressure plate is only active if you stand on it, but you need to stand on it to open a door. The player has to move the movable object on top of the plate to open the door.
For room 2:
if movable object 0 in contact with pressure plate 0 = true then
conditional door 1 opens
else
conditional door 1 closes
Example 4: Let's say I have a door in room 0 that only opens if I use three switches in three of the other rooms
For room 0:
if permant_condition 1 = true and permanent_condition 2 = true and permant_condition 3 = true then
conditional door 3 opens
For room 1:
if Crash switch 0 = active then
permanent_condition 2 = true
For room 4:
if Pressure_Plate 0 = active then
permanent_condition 3 = true
For room 5:
if Pressure Plate 2 = active then
permanent_condition 0 = true
Step 13. Global dungeon designThis step describes the two minor details to finish a dungeon: the start and end
The start of your gamePlease fill in the following form to indicate where the character starts and what stats he should have.
Starting conditions
Starting location: (x,y)
Health: (number of hearts)
Sword: (none / lv1)
Shield: (none / lv1)
Pegasus Boots: (none / collected)
Gloves (none / lv1 / lv2)
Bottle 1: (none / empty / life medicine / magic medicine / cure all / caught fairy)
Bottle 2: (none / empty / life medicine / magic medicine / cure all / caught fairy)
Bottle 3: (none / empty / life medicine / magic medicine / cure all / caught fairy)
Bottle 4: (none / empty / life medicine / magic medicine / cure all / caught fairy)
The endgoal of your gameTo set the endgoal of your dungeon place the object called obj_Credits in your dungeon. This object is invisible for the player and if they touch it the credits will roll and the game ends. It is possible to make this object visible and use a different sprite, but that is up for you to decide should you win. I'm open for suggestions on that matter.
Step 14. Sending in your submission< explanation is being worked on >