Braid is a puzzle-platformer, drawn in a painterly style, where you can manipulate the flow of time in strange and unusual ways. From a house in the city, journey to a series of worlds and solve puzzles to rescue an abducted princess. In each world, you have a different power to affect the way time behaves, and it is time's strangeness that creates the puzzles.
A tutorial for starting Mods in the Braid engine made my Jonathan Blow himself.
Posted by Henley on Apr 15th, 2009
I know that people are starting level creation threads in some places like the Steam forums, but I thought I would post some initial editor information in a very public place like this… people can ask questions here and I will answer them.
To get started, download this file:
And unpack it into your Braid folder. So in the same folder where braid.exe lives, you should now have a folder called “universes”. Inside that there should be one subfolder, “sample”.
Now you can run Braid with the following command-line option:
When the game starts up, everything should look normal, because this sample universe doesn’t replace the starting world, and anything you don’t replace will get pulled from the regular game assets. You’ll start at the beginning of the game, though, because universes have their own save files.
If you walk into the world 2 story screen, instead of what you would normally, you ought to see a very minimal place with one monster in it. This is because world0-2.entities has been overridden by the version in this sample universe. You may also notice that when Tim jumps, he can leap forward very quickly. This is because his jump speed has been changed in the file Mod.variables.
There are only two doors in this new world0-2.entities, because the doors in these story-worlds just off the main hub are generated in order to match the levels present in the game, and the file level_config now says that there are only 2 levels in world 2.
If you collect world 2 puzzle pieces, you’ll notice that they actually look like the world 4 puzzle… this is because I overloaded puzzle2.pi_set with the world 4 version. You could put any image in the puzzles, but you need Photoshop and an extra tool to generate the puzzle pieces; I will talk later about how to do this.
The people inside the new 0-2.entities are from rpgobj.pi_set (also drawn by David Hellman). You can see everything in rpgobj if you go into the editor (by pressing F11), go to a New Universe, press Add Piece Config, and type “rpgobj” into the box. From there you can copy and paste these objects into a level.
Now, if you try to change any levels and save out the results, you’ll notice that next time you play the game, the changes don’t take effect. This is because Braid is not actually reading from the loose files during gameplay. As an efficiency measure, for normal play, Braid files are bundled up into non-compressed .zip files (the same way package.zip and package0.zip are, if you look in your standard Braid file tree). To package up your levels for end-users, you similarly put them into an uncompressed zip file. This is what universes/sample/package.zip is. (For normal play, the “data” directory in universes doesn’t need to be there; I just included both the packed and unpacked versions for this example).
In order to play what you save out, you need to be able to run Braid with the
option on the command-line. However, in order to do this, you need to have all the loose files available — not just the ones for your modifications, but all the standard Braid files as well. So to do this, go into the Braid data folder (not the one for your universe, but the standard one that is in the same folder as braid.exe). Copy package.zip and package0.zip one level up (into the same folder where braid.exe is). Then unzip both of these files into that directory. It should add a whole bunch of new, loose files into your Braid data directory that already existed.
Once you do this, you ought to be able to run with -no_package and make your own modifications, then package them up and other people can run them with -universe.
Let me know how it goes!