Uurnog Uurnlimited

Uurnog Uurnlimited

Not enough ratings
How to make levels and navigate Developer mode
By ncrecc
You, too, can create your own levels with Developer mode! Keep in mind that suggestions are much welcome.
Getting comfortable
First, when you're at the file select screen, hold down Shift and press D. "Developer mode: True" will appear at the bottom-right of the window, like in the branding image. Then load any file or start a new file. The loading time might be slightly longer than normal. Now unless you've tampered with the game folder already, the first thing you'll see is this:

Where are you? Well, just looking at the text in the bottom-right (where all important text appears) tells you that you're in the Save Room. It doesn't look like it, but you really are. You're just out of bounds.

One of the most important controls in the editor is panning the camera. Just hold right click and move your mouse to "drag" the camera view around. Pan the view up and to the left, and you'll see the actual save room.

But now it's filled with objects that you don't have any of your save files, and the ones you do have in your save files aren't there! What's happening? First of all, don't worry. Unless you enable Save Mode (hold Left Shift in the builder), nothing you do here will change your savedata, and nothing in your savedata will be seen here. Second of all, only the objects with orange dots actually appear in the save room; objects with red and white dots only appear when you play the map in Developer mode with Save Mode set to Disabled.

Know that if you have a mouse wheel or certain kinds of trackpads that can simulate the mouse wheel *cough*anyofthemexceptmine*cough* you can zoom in/out by scrolling up and down.

The text at the top-left lists basic things you can create, as well as some of the most commonly used function key commands. The next section should clear up what everything on the interface does, and some things that aren't on the interface as well.
Editor controls and hotkeys
  • 1: Place a new object. Note that you have to hold 1 and click to actually place it, as with tilemaps and zones. By default, you'll place down a blue cube with eyes, but you can press E while it's selected to change its values or choose another object. A basic non-physical object with no options can have four values set; Spawn Chance, Preview, Spawn Cutscene, and Only During Cutscene.

    • Spawn Chance: The chance that this object will actually be spawned in, from 0% to 100%. 1 is "always spawns," 0 is "never spawns," 0.5 is "spawns half the time," 0.25 is "spawns one-quarter of the time," etc.
    • Preview: When this checkbox is ticked, the object will be represented under a red and white dot, and it will only appear when the player is in Developer mode.
    • Spawn Cutscene: As you'll notice in the default map, some objects will only appear after an ending is achieved. If you put the name of a cutscene in this text box, the object will be represented under a green dot, and its Spawn Chance may only apply after the player has watched said cutscene.
    • Only During Cutscene: If the above text box is filled with a valid cutscene, tick this checkbox to ensure that this object is removed after said cutscene is watched. For example, in the default map, one of the endings features some villagers who hop around inside a building to celebrate its opening. They only appear in that cutscene, after which you don't find them in the building any more.

    Keep in mind that if an object calls for "direction" as one of its values, you can input either 1 or -1.

  • 2: Place a new tilemap. This handles flowers, grass, clouds, the ground, etc. By default, you'll place down blue dirt, but yet again you can press E to change it. All color values are malformed hex codes that also include transparency - RRGGBBAA, where AA represents how transparent the tiles are (00 is invisible, FF is fully visible). If you don't know how to use hex codes, go search it up.

    Keep in mind that any transparency number aside from 00 and FF only works properly with some tilesets. For example, bricks and pipes can take transparency, but squary walls can't.

    To draw more tiles, first determine which of 25 layers your tilemap should be on (Foreground, Terrain, Near Background, Far Background, and Sky, then -2 to 2), resize the drawing area to fit your needs, then press D. To place a tile in this drawing mode, you must hold X and click. Deleting tiles should be equally obvious. You can also glaze it over with an accent (which varies in effect depending on which tileset you're using) by pressing F and drawing.

    Values that don't accept color should be self-explanatory. Just remember that Torque means rotation speed. I have no idea how clouds and moving cliffs are supposed to work, unfortunately.
  • 3: Create a new zone. This means another area the player can move around in and access by going through doors. You can press a button - guess which one? - to edit the information of the zone, and another one - not telling, look at the top-left of the screen - to actually go into it.

    Information about the zone you can edit includes the background color; its internal name; the Ondskan pattern (music track) it uses; its music tags, which modify the music track it uses; the pattern/tags it uses in cutscenes; and how much the screen shakes (from 0 to 1).

  • F1: Play the level! By default, you start at the "player" object from the zone you're in, but you can change this along with many other things by holding Left Shift while you're in the builder.
  • F2: Go back to the builder, the main focus of this guide.
  • F3: Access Ondskan, a music tool that mainly makes sense to Nifflas. Ondskan is a whole other type of tool, and will be explained by some other guide eventually.
  • F4: Change the display to reflect how someone with Deuteranope would see it. You will likely never need to use this, but Nifflas used it to make sure everything in the game was color-blind friendly without him needing to add a color-blind option.
  • F5: And this is how someone with Protanope would see the screen right now.
Some of the function hotkeys are not listed in the editor, but can still come in handy.
  • F6: Change the background to a vibrant red for as long as the button is held down. This is good for seeing where transparent objects are, or where the background is compared to the clouds.
  • F7: Take a vertical, extremely high-resolution screenshot (moreso than the game window itself!) and open up the directory it was saved to, which also contains the game settings and the savedata. This only shows a small horizontal space and has a ridiculous filesize, so you really shouldn't use it just to show off your level. The screenshot ignores bloom and antialiasing.
  • F8: Toggle the HUD, or the information at the top-right of the screen while in Play mode.
  • F9: Quick-swap the language. Localized texts, object prompts, and menu text will be changed, but not editor text or log text.
  • F10: Throw a bunch of data into your face. Every zone is listed with some sort of number next to it. This is probably rather significant, but I don't think it refers to the savedata since it can be accessed even if you start up Developer mode on a blank save file.
  • F11: Toggle the text at the bottom-right. Some of it, like "switching to play mode," is hidden, while some of it, like "quick swapping language to..." still shows up.
  • F12: Intentionally does nothing. Steam's default screenshot hotkey is F12.

  • Ctrl+S: Save the level. You shouldn't do this in the default level, or everything you've just added will actually be saved to it! If you ever accidentally overwrite the default level's data in a significant way, just access the game properties and verify the game files, and it will be restored.

  • Left Shift: Hold down Left Shift for a settings menu:
    • Save Mode: Determines how Play mode should interact with the save file. With Disabled, the save file is preserved, and not written to or read from. With New, Play mode records what's happening in the game to the save file you started Developer mode with, and marks down what it's recording. With Load, Play mode reads data from the save file you started Developer mode with, or the file you created with New. New or Load are required for any featured marked with Savegame.
    • Start From: Determines where you should start when you press F1. With Current, you start in the zone you're at, at the position of the player object. With Prologue, you start in the very first zone you're taken to once you start a new file. With Start, you start in the zone you return to when you die (but not the Prologue). Savegame will either spawn you in the Prologue or the Start zone, depending on how far you got in the save file.
    • Inventory: If it's Off, you have no inventory. If it's On, you have an inventory. Choosing Savegame will read from the save file to determine whether or not you have an inventory.
    • Character: You can actually use more characters than these by directly editing the savedata, but that's for another guide.
    • Music Mode: Managed will properly control the music, change it as you do certain things that would affect the music (e.g. enter another zone, do something that would spark a Modulator in Ondskan). Unmanaged will just leave the music off, or with whatever music you were previously playing in Ondskan.
    • Use Cutscene Tags in Builder: If you have music from Ondskan running in the builder, this determines whether said music is using the cutscene music tags or the regular music tags of the zone you're in.
    • Free Camera: Lets you pan the camera around while you're in Play mode, ignoring the camera boundaries. You can also zoom in/out.
    • Foreground, Terrain, etc.: Toggle the visibility of tilemaps on certain layers. But only in the builder.
    • Blend Mode, etc.: Mess with the bloom, if you have it on.
Now how do I actually make a map?
In the Steam library window, right click on Uurnog Uurnlimited. Click Properties. Then click the "Local Files" tab. You should now be here.

Click Browse Local Files, and you'll be taken to Uurnog Uurnlimited's game data folder. Enter Uurnog_Data then StreamingAssets, and that is where you'll find two files: Custom.uurnog and Uurnog.uurnog.

Both files are valid levels, but the game will only run the one named Uurnog.uurnog. So let's change that! Move Uurnog.uurnog out of the StreamingAssets folder to basically any other folder, then rename the file to something like Default.uurnog. Then, in StreamingAssets, rename Custom.uurnog to Uurnog.uurnog. You just loaded a map!

Now boot up the game, turn on developer mode, then create a new save file. You cannot load a previous save file, because it will refer to zones and doors that do not exist.

You'll be greeted with this map. Feel free to appreciate it for a while... or don't. Then create a new zone, go to it, and delete the 3 pre-existing zones.

It's your map to edit now.

Make sure you save often, put your new .uurnog map somewhere safe, and rename it something like "Mymap.uurnog" so you can tell what map it is. But make sure it's always called "Uurnog.uurnog" when it's in StreamingAssets, or the game will fail to load it!
Chameleons are objects that are invisible in-game, but still control important aspects of the zone, such as the camera range and the music.

Chameleons\Border has several variations, all of which do very different things:
  • 0, 1, 2, and 3 are camera control. They block the camera from going the way their arrows are facing. The one that points downwards also doubles as a bottomless pit.
  • 4, 5, 6, and 7 control moving background elements. If a cloud tries to move too far off of the one that points to the right, it will wrap around and appear at the one that points to the left, and vice versa. Same with up and down.
  • 8 and 9 are used in combination with Ondskan. In a Relay Modulator, they return values for the X/Y Separator object. If you're to the left of the first X separator (a vertical orange bar), the modulator returns 0. If you're between the first and second X separator, the modulator returns 1. If you're squeezed between the second and third, the modulator returns 2, etc. Same with the Y separator (a horizontal orange bar) but with above/below.
  • 10 is a bottomless pit border that doesn't affect camera control. When you're playing with the Camera Extenders (mentioned soon), you don't want the bottomless pit to be directly below the bottom camera border.
  • 11 and 12 are not used anywhere in the default map, but they're red like the bottomless pit border, stand vertically, and have arrows. They don't appear to do anything, not even kill objects far away from it. They might not function properly.

Chameleons\Camera Extender lets you peek past the normal camera boundary, from its open green "handle" to the T shape at the end. Its effect is less noticeable the further away you are from it.

Chameleons\Message lets you put messages into the map, like in the tutorial. X Distance and Y Distance refer to how many blocks horizontally and vertically the message "trigger" spans, while X Offset and Y Offset refer to where the trigger appears relative to the message object (a negative number for the offset means left/down, a positive number means right/up). Message is exactly that: the message you want to display. There are certain tags you can use, but those will be discussed later.

Chameleons\Credits Player simply plays the game credits! Initial Delay is how long in seconds the player will wait before displaying the credits, and Play Time is how many seconds the credits will play for, which can slow it down or speed it up. Reset on Enable can be set to 0 (false) or 1 (true), and it just means that the credits will play again once they end and you exit/reenter the room.

Note that the play time for the credits in the default map is 88 for the normal endings, and 98 in the CREDITS building.

Chameleons\Falloff Device is used in combination with Ondskan. It gives a value from 1 to 0 based on your proximity to it... or something. It can be used through a Relay Modulator.

Chameleons\Cutscene Controller marks which screens are used for cutscenes, how long they play, what order they play, etc. Cutscenes will be explained later on as well.
Cutscenes, or endings
Sometimes it's good to think ahead. How do you set up the ending? And the cutscene contained in it?

First off, the only object you can use to make the player complete the level is the Win Teleporter. It's that purple-ish object you see in the save room of the default map. It also needs to be bundled with a Win Computer, which says what objects need to be put in the teleporter in able for you to go through it and win.

You don't need the Win Computer to be anywhere near the Win Teleporter, it's just more convenient and stylistic that way.

You can have the Win Teleporter just take the player when they stand on it without having to put in any objects; or you can do a default-style teleporter that requires you to collect objects first, by editing the Win Computer and adding objects to it.

It's also possible to add "rewards" for putting in objects, by editing the Win Teleporter and adding objects to it. A reward will automatically appear in the warp stack once the appropriate amount of objects is unlocked.

Once the Win Computer is configured, you must set up the Win Teleporter's cutscene. It may consist of multiple scenes, or just one. Edit the Win Teleporter, then type what you'd like your cutscene to be named (it doesn't have to be anything comprehensible) in the Cutscene field. Not Spawn Cutscene, mind you.

After that, we let these guys become useful for once:

"Cutscene Index" controls at which part of the cutscene the camera will be focused on this Cutscene Controller. Cutscene index 0 will be the first scene, cutscene index 1 will be the second scene, cutscene index 3 is the third, etc.

"X Speed" and "Y Speed" are how fast the camera is moving in those given directions. When Y Speed is positive, it's moving upward, and when it's negative, it's moving downward. Positive X Speed moves to the right, while negative X Speed moves to the left.

"Time" is how long, in seconds, the camera will stay at this position/setup before cutting to the Cutscene Controller with the next cutscene index... or smoothly scrolling to it, if it's in the same zone.

Finally, "Cutscene" is just the cutscene name that you entered in the Win Teleporter. You can use multiple cutscene names to have multiple endings, but the Cutscene Controller must always have the same cutscene name as one of the Win Teleporters.

For starters, try to create a Win Teleporter that requires one box to be put into it, and make it lead to a cutscene that says "YOU WIN!" and then "GREAT JOB!" without any scrolling - while keeping in mind that Message chameleons always have their text shown in cutscenes, since there's normally no player to witness them. You'll need to create two other zones.
Proper messages and books
You should know from the Chameleons section that Message chameleons allow you to... well, put custom messages in them. But you might not know that you can also put custom messages in books.

It's really quite simple! Create a spawner, navigate out of the Friendly Creatures section, click on the gem, then select the book item. After which, you can select your book cover, select an icon to be emblazoned on the second page, then input your desired message into the "Content" text box. Then you can read it in Play mode by picking it up and pressing X!

...but wait. How do you get line breaks? Or a different color of text? Or text on the second page?

Right now our brilliant book is looking like an incomprehensible heap of text. Line breaks can fix this! Use {br} to create a single line break, or use {br} {br} to create a line break and one empty line. The following book uses {br} {br} where you see empty lines:

We'll have to hold off on fulfilling the bottom text's dream (ha ha bottom text.) as we colorize the text at the top. At the moment, there are only two colors which can be used in books: default text without any tags, and {color:0}text{end color}. The following book has the top line embedded in color and end color tags, {color:0}like this.{end color}

And now we'll move the last bit of text to its rightful spot, by using a tag that only works once per book and not at all in messages: {page}. This indicates all text after it is to be put on the second page. The following book has {page} right before the text on the second page (where else?):

...hey, how come that text that used to span two lines spans THREE lines now that it's on the second page? Simple: the text had to be resized to fit the page before, but now that it has more space it's at its default size. This means you can stuff a lot of information into one book, but try not to overdo it:

Messages are much like books, but they don't accept {br}. However, they do allow you to select from three colors instead of two! Unlike books, {color:0}text{end color} gives yellow text, and {color:1}text{end color} gives orange text.

In messages and books, you can also use the html tags <i> and <b>! But messages with <color> won't be saved properly for some reason, so you're stuck with the default colors.
Buttons and lasers and IDs, oh my!
Buttons, as I'm sure you know, can turn lasers on and off. Red buttons return an off signal unless they're being held down, and blue buttons toggle their on/off state once you press them. Simple enough.

Buttons have two important values: Button Type, which controls whether the button is the red kind or the blue kind; and ID, which controls what lasers they activate/deactivate.

Lasers have four: Damage Type, which controls what actually happens when something hits the laser; Button Threshold, which controls how many buttons of the laser's ID need to be held down for it to switch state; Activate at Threshold, which controls the laser's on/off state by default; and Linked Button ID, which controls what buttons they react to. When you're actually making puzzles with lasers, keep in mind that they only extend to 16 blocks maximum.

You can make some basic logic gates using lasers and 2 button inputs:

AND GATE: Laser has Button Threshold of 2, Activate on Threshold set to 1 (true).
OR GATE: Laser has Button Threshold of 1, Activate on Threshold set to 1 (true).
NAND GATE: Laser has Button Threshold of 2, Activate on Threshold set to 0 (false).
NOR GATE: Laser has Button Threshold of 1, Activate on Threshold set to 0 (false).

A laser with a Button Threshold of 0 requires 0 buttons of its ID to be held down in order for it to switch state, thus meaning it does not react to buttons at all, and starts out in the opposite state you define it as.

Just to set things straight: if a laser has a Button Threshold of 2, Activate on Threshold set to 1, and a Linked Button ID of "corn", that means it starts off and only turns on while at least two buttons with the ID of "corn" are returning an on signal. If a laser is the same as above, but with Activate on Threshold set to 0, that means the laser will be start out active and will only be shut off while two or more "corn" buttons are on. Capiche?

Directly editing the .uurnog file
You may never need to do this in your entire life. Every .uurnog file is secretly a .zip file. Rename your level from *.uurnog to *.zip and you'll get some tilemap files, all of the music patterns contained in Layout.xml, and everything else in the level contained in Level.xml.

The tilemap files themselves are inaccessible, they simply describe where all the individual triangles should be placed in the level. If you want to check out the positions of the tilemaps and where their tiles are placed, that's all available in Level.xml.

I recommend you open the .xml files with some text editor more advanced than Notepad. Try Notepad++ or Sublime Text. You'll need to extract the contents of the .zip in that case. When you send it back to a .zip, make sure you don't have the folder itself in there, only the tilemap and xml files. And rename your *.zip back to *.uurnog once you want to play it again!
< >
darkly77 Apr 15, 2023 @ 9:32am 
Thank you for this guide! I used it to make a very small QoL mod:
ncrecc  [author] Dec 16, 2022 @ 5:13pm 
"malformed hex codes" smh...