Content Creation Primer

Have something to share? Post on Phr00t’s Software’s wall! I’ll get it up on the Community Content page!

Almost all content in 4089 is easily available for modification. You’ll notice there is a directory structure where 4089 gets installed:

  • Robots/: These are the enemies. All .txt files in this directory will be scanned & used to populate rooms.
  • Rooms/: These are the rooms (.txt files) that get pieced together during world generation
  • Rooms/Includes/: These are parts of rooms that can be included, duplicated, stretched and rotated. These are not automatically scanned.
  • Sounds/: Sound effects for enemies, items etc.
  • Textures/: Textures for just about everything, most notably rooms, items & enemies.
  • Models/: Models (in OBJ format) for rooms, items & enemies
  • Music/: Music for use in game, will be automatically scanned and played (must be named menuX.ogg, normalX.ogg & actionX.ogg to be used properly, where X is an increasing number)
  • Items/: Weapons & other items that players & enemies can both use. Automatically scanned for placement inside rooms for player use.

-> All of the properties of the things above are stored in text files. Try opening up some existing files to see the current format & structure. I recommend Notepad++ to make sure files are read & saved correctly. The quickest way to create new content is to copy something that already exists & modify the copy. Feel free to modify things that already exist, but it may be a smart idea to back up things first! Anything starting with a # symbol is a “comment” and ignored.

-> To edit rooms, run 4089 in “Windowed” mode. You’ll want to have a text editor and file browser open alongside 4089. You can enter in a new filename when clicking “Room Viewer” and a sample room will be created. The “Room Viewer” will update automatically whenever you save any changes to the Textures, Rooms or Models directory.create2

Sample Room File

When making a room, don’t worry about the room’s orientation. 4089 automatically rotates and flips rooms as needed — you only need to design a room for one arbitrary orientation. Rooms are sized -16 to 16 in the X & Z (side to side) directions, and 0 to 16 in the Y (up) direction.

Position and scales are provided as X, Y, Z in decimal numbers. However, connections need to be integers (no decimals allowed). Rotations are the number of 90 degree rotations made (e.g. 2 would be a 180 degree rotation on a certain axis).

“Include” lines allow you to include sections from the Includes/ folder multiple times in a room, scaled/rotated & randomly placed as desired. Format follows:

include=file,pos_x,pos_y,pos_z,rotation_x,rotation_y,rotation_z,<size_x,size_y,size_z>,<chance_of_placement_0.0_to_1.0>

The pulsating green you see is the “navigation mesh” enemies will use to find paths through your room. Stuff will be spawned on top of this green path, too.

-> If you are creating items & enemies, you can easily test them by moving other items & enemies from their respective folders to another temporary location. This will make just your creations be seen in the game. “startitem.txt” is always given to the player at start, which is generally the grappling hook combo-tool. You can also try replacing this item with one you are working on. Scale defaults to 1, 1, 1 (no modification from the original OBJ model) and positioned at the center of the object (0, 0, 0).

Sample Robot Text File

-> To make things easier to share, you should ZIP up your creations and include all of the media required in their respective folders (e.g. “Textures/newguy.png”, “Models/newguy.obj”, “Robots/newguy.txt”). Users can then simply unzip your stuff into a folder inside the 4089 directory and be good to go by entering that directory in the main menu.