[This document is the original DromEd tutorial with additions and annotations to aid new users and to wholly take account of the changes to DromEd since Thief 2.
These additions and annotations are NOT written by Looking Glass Studios. They have been added by an independent DromEd fan. Looking Glass Studios should not be held responsible for any errors in these additions or annotations.
All additions and annotations can be identified by being enclosed in square brackets AND italicized.
Throughout, D1 refers to Thief 1 compatible DromEd. D2 refers to Thief 2 compatible DromEd (as found on the Thief 2 CDs).
Any copyright on this document claimed by Looking Glass Studios remains with them while the author of the additions and annotations claims no copyright on the additions and annotations.]
Basic DromEd Tutorial
Welcome to DromEd, Looking Glass Studios’ Thief: The Dark Project level editor, and the tool you need to create your own Thief missions. This tutorial is designed to walk you through the basic functions of DromEd, by teaching you to create rooms, place objects, activate enemies, equip Garrett with some weapons, and specify objectives and difficulty levels. It’s important that you follow this tutorial from beginning to end; by skipping sections, you may very well miss out on some critical information.
Also keep in mind that DromEd has been released to the public “as is,” meaning the program is unsupported by Looking Glass. We hope we’ve given you enough information to get started…but you’ll have to take it from there. In other words, do not call Looking Glass or EIDOS asking for help with DromEd! We wish you success in designing Thief levels.
[D1 and D2 note: If you are experiencing problems (and you will) head over to http://www.thief-darkproject.com/teg for more advanced tutorials.
An excellent discussion forum with many experienced Thief level editors, eager to help, exists at http://www.ttlg.com/forums if you head into the Thief Editors’ Guild.]
I. What’s On The Screen
When you load up DromEd, you’ll be presented with the main program interface, separated into four distinct sections:
1.) A menu bar at the top of the screen, as seen in any Windows-based program.
2.) Four separate view windows, which allow you to examine your levels from four different perspectives. These windows, starting in the upper left-hand corner and moving clockwise, are “3D View,” “Top,” “Right,” and “Front.” You can use the bracket keys to cycle through the different windows, with the white outline indicating which is currently the “active” window. For the purposes of this tutorial, don’t worry about the active window or its uses.
3.) Several buttons, located in the bottom left-hand section of the screen, used for a variety of functions.
4.) A command line, located in the bottom right-hand section of the screen (in the small box outlined in light blue), used to enter specific DromEd commands.
[Important Note: In order to properly use DromEd, your desktop must be set larger than DromEd’s default resolution of 640x480. If your desktop is set to 640x480, and you run DromEd, important parts of the interface screen - like the menu bar at the top - will be cut off.]
[D1 and D2 NOTE: You can customize the DromEd window size upto 1024x768.
Add this line to you user.cfg file:
If your screen is 1024x768 then use x=800, y=600
If your screen is 1280x960 then use x=1024 y=768]
During the course of this tutorial, we’ll explore each of these interface elements in-depth.
II. Brushes and Portalizing
If you have no experience building levels for 3D games, the first thing you need to do is familiarize yourself with the term “brush.” In DromEd, anything that gets created is called a brush. Rooms are referred to as “room brushes,” lights are called “light brushes,” etc. The most common brush is the “operation brush,” used to create terrain (hollowed-out “rooms” and solid objects). DromEd allows the user to create spaces using six different shapes of operation brush: cube, cylinder, pyramid, corner-apex pyramid, wedge, and dodecahedron. You can think of the default Thief level as being completely solid and stretching infinitely in all directions. In other words, before you add any brushes, the world is just an infinitely huge block of solid. You carve away from that block to create rooms, stairs, structures, and other unique architectural features. So, to create a square room, you would use a cube-shaped operation brush, filled with air, to carve away a square in the center of the existing solid block. If all of this is a bit confusing, don’t worry: everything will become clear once we start building some rooms.
As you can see by looking at the different view windows, there’s already a beginning operation brush in place (a cube) and you’re standing right in the middle of it, as indicated by the violet-colored icon. Now look down at the bottom of the screen, to the small, funky-looking texture affectionately referred to as “Jorge.” That’s the default texture for the selected brush, but we’ll discuss textures later in the tutorial. For now, look at the buttons underneath Jorge, specifically, the one that reads “Op<Fill Air >.”
Click on the arrows to see the different types of brushes you can create. After you’ve seen all the choices, go back to “Fill Air,” because we want to create an air brush, which is essentially a hollowed-out room. Remember, the existing universe is already a giant, solid block, so we need to fill a brush with air to create a room; creating a brush and then filling it in with solid will have no effect, for obvious reasons.
Now that you’ve set the brush selection to “Fill Air,” it’s time to “portalize” the level so the change actually takes place in the game world. For the purposes of designing levels with DromEd, portalizing is the process by which your brushes, which are created on the 2D grid, are transformed into 3D space. So, go to the menu bar on the top of the screen, click “Tools,” then click “Portalize.” Be patient as DromEd processes the brushes. Small levels with just a few brushes usually portalize in just a couple of seconds, but when your levels get larger and more complex, portalization can take a couple of minutes or more. Look at the center of the white bar on the very bottom of the DromEd screen; when it reads “done,” the level has been portalized. Whenever you alter the terrain in the level, using one of the 2D views, you will need to portalize to see new changes in the 3D View window and in the game itself.
III. Viewing Brushes / Moving around in the View Windows
Okay, you’ve portalized the level. It may seem like nothing actually happened, but don’t panic: that’s just because the 3D View window defaults to a wireframe representation of the 3D world, and it’s tough to notice any changes. Move the mouse cursor to the 3D View window and press and hold the right mouse button. Doing so allows you to select from a list of options for the view you currently have the mouse cursor over. We’ll discuss these options in more depth a bit later. For now, highlight the choice that reads “solid + selection,” then release the right mouse button. This will change the 3D View representation from wireframe to solid, with a white outline indicating the currently selected brush (in this case, the only brush).
Now, you may still be wondering why the 3D View hasn’t changed much; right now it should look like we’ve just gone from a wireframe display to a completely black display with a few white lines. Actually, you’re standing in the exact center of the operation brush you just created, but the “room” is shrouded in darkness so it’s impossible to see anything. When you create Thief rooms using DromEd, everything is pitch black - you need to actually place light sources (either light brushes, or light-emitting objects, like torches or electric lamps). But, for the sake of simple level designing, we can take a shortcut and use the “light_bright” command, which completely illuminates the level and eliminates all darkness and shadow. [Important Note: While the term “room” can be used to refer to operation brushes you create, it’s important to know that DromEd does not yet consider them rooms. So, even if you create a detailed banquet hall, DromEd won’t see the space as a room, but a large air brush. Don’t worry about that for now, though - we’ll get to this issue later on in the tutorial.]
[D2 NOTE: Turning light_bright on works asa described. However, in DromEd2, with light_bright off, brushes near to the camera will be light brighted anyway. This effect cannot be disabled.]
To enter the command, either left click on the command line or press semicolon (note: you’ll need to hit Shift and the “;” key). Type “light_bright” (as with all commands, do not use quotation marks) and hit the “Enter” key. Now that you’ve entered in the “light_bright” command, you’ll notice (hey, you may even be panicking) that the 3D View window still hasn’t changed. That’s because there needs to be some “movement” in the 3D world before “light_bright” activates. In the 3D View window: the “A” and “D” keys are used to rotate left and right; the “W” and “S” keys are used to move forward and backward; the “Z” and “C” keys are used to slide left and right; and the “Q” and “E” keys are used to move up and down. Hit one of those keys, and the 3D View window will change - you should now be hovering in the center of a small, very ugly room. Use the “R” and “V” keys to look up and down, and the “F” key to recenter your view. Remember how you chose the “solid + selection” representation for the 3D View window, by pressing and holding the right mouse button? Move the mouse cursor over one of the 2D view windows (top, right, or front), and do the same thing. Choose “teleport camera” to instantly jump to that point in the 2D display. The selection defaults to “teleport camera,” so you should get into the habit of moving the mouse cursor to different spots in the 2D windows, and right clicking to instantly jump to those positions. [Important Note: Don’t try this when the mouse cursor is positioned over the 3D View window. The 3D View menu defaults to “solo view,” and accidentally choosing this option will find DromEd’s grid sections replaced by a giant 3D view. If this happens, just right click on the 3D View window to revert DromEd back to normal mode, and bring back the four small windows.] Try teleporting outside the operation brush. In the 3DView window, you’ll be able to see the operation brush from a distance, just sort of sitting there in space. It’s important to realize, though, that during the course of creating your level, you never want to allow the player or any AIs to enter any “solid” part of the terrain. The player and AIs can travel through water and air, but putting them in solid is a sure way to “break” your level.
[D1 and D2 NOTE: Actually, “X” is the key to move the camera backwards.]
Now it’s time to enter into the 3D world in “game mode” and see the room as Garrett would. Go back inside the room and hit “Alt+G” to enter into the game. You are now, for all intents and purposes, in Thief. You can hit the “Escape” key to access different options, like changing video cards or reconfiguring keyboard keys. [Note: Make sure you’re actually inside the confines of your operation brush before you enter into game mode, or you’ll run into problems.] You may notice that some things appear to be missing - Garrett doesn’t have a health meter, there are no items in your inventory, and there are no sound effects. That’s because DromEd doesn’t yet recognize your brush as an actual room, and you haven’t yet placed a Garrett character model (referred to as a “Starting Point”) in the game world. But don’t worry about those things just yet; we’ll come back to them later.
[D1 and D2 NOTE: Don’t try to save or load a game when in game mode. It won’t work and will crash DromEd and possibly your computer.]
When you’re ready to go back to the editor hit “Alt+E.” It’s now time to modify the room even further, to make it more recognizable.
IV: Using Textures
So, we’ve created a simple room…but it doesn’t exactly look like a room. That’s because the whole thing is using Jorge, the default texture. In order to create Thief-style rooms, complete with carpeting, cobblestones, and wooden planks, we need to load in texture families. Go to the command line, type in “add_family core_1” and hit “Enter” to load in the “core” set of Thief 2 textures. Now, let’s add another texture family, but this time use a shortcut. Go to the command line again and type “a” - then hit the “Tab” key to cycle alphabetically through all recognizable commands. Use this method to select (or simply type in) the command “add_family core_2” to load in another core set of textures.
To see the textures that you’ve loaded in, bring up the texture palette by pressing “Alt+T.” For now, we’ll make the whole room one texture. Click on one of the brick textures so that its name is highlighted in violet. At the end of the texture palette, you’ll notice a few buttons; click the one that reads “Put on Brush.” You’ll see that texture instantly applied to the entire room. Occasionally, during the course of level design, you’ll need to portalize the level before you see new textures applied in the 3D View window. When this is the case, DromEd will display a message to that effect on the bottom of your window. In fact, you should get used to checking the message bar on the bottom of the screen for important information. If something goes wrong during the course of your level design, an error message can often be found in that space.
[D2 NOTE: You’ll probably find your texture palette is all messed up and that brushes have funny looking textures. If you do find this, then you need to add this line to your user.cfg file:
At this point it’s quite possible that something has gone wrong, and clicking the “Put on Brush” button actually applied the selected texture to just one side of the room. If that happens, it’s because at some point you clicked on a face of the wall, thereby selecting that as the “active” face. Using the “Put on Brush” command doesn’t necessarily put a texture on the entire brush - it puts it on the selected face. It just so happens that when you first start DromEd, none of the faces is selected; instead, the program starts with the brush in “default” mode. Basically, imagine the default texture as the original color of an entire room. By adding different textures to different faces of the room (walls and ceiling), you’re not replacing the default texture, but “painting” over it. So, if you were to create an operation brush with a default brick texture, and then chose other textures for the walls, floor, and ceiling, the default texture would still be the brick you originally chose - it would just be hidden under the other textures.
It’s easy to tell which face you have selected. If you still have the texture palette up, remove it by hitting “Alt+T” again. Now, in the 3D View window, click one of the faces of the operation brush. It will highlight in orange, indicating that it is now the selected face. You can also cycle through the different faces by repeatedly hitting the comma (“,”) key on the keyboard. If you cycle through completely, so that none of the faces is highlighted in orange and the brush is outlined in solid white, then you once again have the brush’s default selected. To quickly see which face of the brush is selected, and which texture has been selected for that brush, look down to the bottom center of the screen, to the buttons that read “Face” and “Texture.” You can also use these buttons to directly apply textures to any face of the brush, including the default. To reset the default texture of the room, cycle through the available textures using the arrows to the left and right of the “Texture” button. When you’ve found one you like, hit the “Reset” button, found above the “Face” and “Texture” brushes. This will reset the default texture to the one you selected, essentially allowing you to start from scratch.
Now, hit “Alt+T” to bring the texture palette back up. Click a texture so that its name is highlighted in violet, and then click a face to see the selected texture applied to that face. Use this method to apply textures to the walls and floor. Then, hit the “R” key to look up at the operation brush’s “ceiling.” Click the “Sky” button (also found at the end of the texture palette) so that its name is highlighted in violet, and then click the ceiling to place the star texture. Hit “Alt+T” again to remove the texture palette, and then press “Alt+G” to enter to game and take a look around. It should look as if you’re standing is a tall-walled, open-air courtyard, with the starry night sky above. It’s important to understand that, for level design purposes, the sky is just an illusion. It’s actually just a ceiling with a modified texture, and not an actual, limitless sky. So, while it looks as if you could fly up to the heavens, you’d really smash your head against a relatively low ceiling (in this case, the room is still set to the default height - 16 feet). When you’re done admiring your craftsmanship, hit “Alt+E” to enter back into DromEd.
V. Resizing Brushes
Up until now, we’ve simply played around with the existing, default operation brush. Let’s modify the brush to make it a bit bigger. Look at the lower left-hand corner of the screen and find the three buttons that read “D,” “W,” and “H.” These stand for depth, width, and height respectively, and are measured in an approximation of feet. You’ll notice, then, that the default brush is a perfect cube, measuring 16x16x16 feet. Let’s leave the height at 16 feet, but modify the depth and width. Here we have a few options. The easiest way to change the size of a brush is to press and hold the control key, position the mouse cursor over one of the 2D windows, press and hold the left mouse button, and move the mouse to resize the brush. Move the mouse cursor over the “Top” view window and practice resizing the room. Note how resizing the brush in this manner only affects the two “visible” dimensions - width and depth. To use this method to resize the third dimension (in this case, height), press and hold the right mouse button and move the mouse left and right. Experiment with this method in all of the 2D view windows.
[D1 and D2 NOTE: You will only be able to size brushes in multiples of 8 feet because that is the grid size that DromEd defaults to. These multiples can be increased or decreased by changing the grid size value towards the top left of the DromEd buttons.
Note that each increment/decrement of the grid size parameter doubles/halves the multiple.]
There are other methods of resizing brushes as well, particularly if you want to get more precise in your measurements. Try left clicking on the arrows to the left and right of the measurements to resize the brush in very small increments. It’s also important to know that the “D,” W,” and “H” indicators (as well as “X,” “Y,” “Z,” “H,” “P,” “B,” and others) are buttons. Move the mouse cursor over the “D” indicator and click and hold the left mouse button; notice how the letter turns purple. With the left mouse button held down, move the mouse left and right to alter the brush’s depth. You can use this method to alter any of the brush’s dimensions. There is also another method for resizing a brush, especially for entering in precise measurements, and that is simply to type in the height of any given dimension. Let’s use this method to make the room 24x32x16. Click the number next to the “D” button so that it highlights in purple. Then, simply type in the desired height in feet - in this case 24 - and press “Enter”; the depth of the brush is now 24 feet. Use this method to change the width to 32 feet as well. Now, portalize the level so that these changes take effect in the 3D world.
VI. Creating New Brushes
Now that we have an operation brush in place, let’s create another operation brush from scratch and attach it to the existing one. In the lower left-hand corner of the screen, under the heading “Create,” are several buttons, with the “Brush” button already highlighted. These buttons allow you to create new elements, like brushes, lights, and objects; the option to create a brush is the default. To create a new brush, choose the type of brush you want to create (in this case we want the default, an “air” brush). Left click on one of the 2D view windows and keep the button held down. Now, move the mouse to create a brush; when the brush is big enough, release the left mouse button to place the brush. Brushes can be repositioned in much the same way they can be resized. In the lower left-hand corner of the screen are indicators for a brush’s “X,” “Y,” and “Z” coordinates; you can use these brushes to modify the brush’s position. Or, press and hold the “Shift” key; move the mouse cursor to one of the 2D view windows; click and hold the left mouse button; and move the mouse to reposition the brush. Resize the brush so that its measurements are depth=8, width=8, and height=16. Then, use the “top” view window to reposition the brush so that its southern wall connects to the existing brush’s northern wall. After you’ve done that, move the mouse cursor over the “Right” or “Front” view window and reposition the new brush so that its bottom side aligns with the existing brush’s bottom side; this will essentially line up the new brush so that it’s on the same level as the existing brush (i.e. they share the same “floor”). It should now look as if you have an open-air courtyard whose northern wall connects to a corridor. To the north of the corridor, create a room whose southern wall connects to the northern wall of the corridor. When the brushes are lined up properly, portalize the level to see the changes reflected in the 3D View window. Feel free to play with the textures, and hit “Alt+G” to jump into the game and walk around the rooms as Garrett would. If everything went smoothly, you will have created an open-air courtyard, connected to a corridor, connected to a room.
Now, use this method to create a circular column somewhere in the northern room. To change the shape of the brush from a cube to a cylinder, go up to the menu bar and click “Shapes” then “Cylinder.” You can modify the number of sides in the cylinder (or in a pyramid, if you were to create one) by clicking “Shapes,” then “Sides in Base,” and entering in the number of sides you want (the default is 6). Let’s choose a cylinder with 10 sides.
[D1 and D2 NOTE: The maximum number of sides in the base of a cylinder is 11. Entering larger values will just give a cylinder with 11 sides in base.]
Now that we’ve selected a cylinder, we need to tell DromEd to create a solid brush, as opposed to the air brush we just made. Look at the bottom center of the screen, to the button called “Op.” Use the arrows to the left and right of the button to cycle through the different brush types, and stop when the selection reads “fill solid.” [Note: “Fill Solid” is actually the first choice in the list] When this is done, create the solid brush somewhere in the northern room, using the same method you used to create the air brush. Resize the brush so that it stretches from floor to ceiling, and actually connects to the floor and ceiling. Portalize the level to see these changes reflected in the 3D View window, and enter into the game to see the column more closely.
VII. Placing Objects/Lightsourcing
You’ll recall that “light_bright” is still enabled, so the spaces you’ve created are completely illuminated in the 3D View window and in the game itself. Let’s change that by placing a torch in the game world.
Objects in DromEd reside in an “object hierarchy,” which can be accessed via the menu bar at the top of the screen. Click “Editors” then “Object Hierarchy” to bring up the object hierarchy. All of the game’s objects reside somewhere in this hierarchy, but for now we’re only concerned with placing a torch. Objects are located in one of five categories - “Sound,” “SFX,” “fnord,” “physical,” and MotArchetypes. Click the plus sign (“+”) next to “Physical” to expand that tree, then expand “Lights.” You’ll notice that “Torches” can also be expanded; doing so will bring up an item called “ConTorch.” Sometimes, the name next to a “+” sign is simply a heading, and you need to expand that tree to see the objects you can place. In other cases, the headings are objects in themselves, as is the case with the “Torch.” Click “Torch” so that it’s highlighted in blue, and then click the “Create” button on the right-hand side of the object hierarchy window. You’ve basically just told DromEd to get a torch object ready for creation.
[D2 NOTE: You need to expand Physical>Lights>Extinguishable>Torches>torch.]
To place the torch in the game world, position the mouse cursor over one of the 2D windows, and click and drag to create a box, just as if you were creating a new brush. When you release the mouse button, the object will be created in the center of the box. Create a total of six torches - three in the southernmost room, near the west, south, and east walls, and two in the northernmost room, near the west and east walls. Now, examine the torches in the 3D View window - you’ll notice that their brackets are all facing a particular direction, south. That’s because all objects, when placed in the game world, “face” southward…but we can attach the torches properly to any wall by rotating them. [Important Note: look down to the lower left-hand corner of the of the DromEd screen and find the column of buttons under the “Create” heading. In order to create an object, you first need to click the “Object” button so that it’s highlighted in violet. It just so happens that when you select an object for creation out of the hierarchy, the “Object” button is automatically selected.]
Up until now we’ve changed a brush’s “X,” “Y,” and “Z” planes and modified its depth, width, and height. It’s also possible to modify a brush’s heading, pitch, and bank to rotate it into a desired position. Look at the lower left-hand corner of the screen, to the buttons marked “H,” “P,” and “B.” Use these buttons as you did the previous ones, and practice rotating one of the torches. Or, press and hold the “Alt” key, press and hold the left mouse button, and then move the mouse to rotate the torch. Rotate the torch so that its heading is 270 (but its pitch and bank are both 0), and affix it to the western wall. Use this method to rotate the remaining torches and place them on the other walls. [Important Note: Some objects are actually complex composites of several smaller objects. The torch is a perfect example: it’s actually made up of the torch, the flame, and the smoke. When you move the torch, it’s important that you do indeed move the torch…and not the other elements. When you move the torch, it may seem as if the flame and smoke are left behind. Don’t worry - they’ll naturally follow the object. So, when you enter into the game by pressing “Alt+G,” you’ll notice that the torch looks just as it should. When you return to DromEd and look at the 2D view windows, you’ll see that everything is back to where it should be.]
[Note: When you move light sources around, you’ll often need to use the “Light” function to update the lighting. To do so, go to the menu bar and click on “Tools,” and then click “Light.” This will update the level’s light sourcing.]
[D1 and D2 NOTE: Portalizing or Optimzing your level will automatically update the lighting.]
Now that we’ve placed torches on the walls, let’s place a table on the floor, in the middle of the southern room. Tables, like all objects, reside in the object hierarchy; but instead of fishing through the hierarchy tree, let’s take a shortcut. If you know the name of the object, you can use the “find_object” command to instantly jump to its position in the hierarchy. Click on the command prompt, and enter in the command “find_obj table.” (without the period, of course) When you hit “Enter,” you’ll go directly to the standard table in the object hierarchy. You can either keep this one, or choose one of the available variations, like “Cabinet Table.” Create the table just as you did the torches, and place it in the game world. Chances are, the table will be hovering a few feet off the ground. Instead of manually moving the table, you can have it automatically “grounded” by clicking the “Floor Me” button, located at the bottom center of the screen. [Note: “Floor Me” only works if the object you wish to have grounded is hovering in the air over the floor you want to have it grounded to. If, for example, you place a street lamp in the world, its base is sticking through the floor, and you want to have it aligned perfectly with the floor, you’ll need to first raise the street lamp into the air and then hit the “Floor Me” button. Using the “Floor Me” button when an object is already sticking through a floor will have no (or worse, an undesirable) effect.]
Now, using the method you just employed for creating and placing the table, we’ll create and place a guard in the northern room. [Important Note: If you try to create the default choice - “guard” - it actually places a white wedge in the game world. That’s because “Guard” is a merely a heading in the object hieracrchy, and not an actual object. DromEd interprets “unknown” objects using white wedges. In this case, you need to click the “+” sign next to the heading “Guard” to expand that part of the tree, and choose a specific kind of guard.] Find and create a “sword guard” (under guards\swordsmen\grunts). Place the sword guard in the northern room. If you accidentally created a wedge, you can delete it by selecting it as the active object and hitting the “Delete” key. Note that you can use this method to delete any kind of brush, even entire “rooms.”
[D2 NOTE: You need to expand Physical>Creature>Animal>Human>Guard>Swordsman>Grunts>SwordGuard.]
Now that you’re an expert with the object hierarchy, do this: place a table somewhere in the center of the northern room; place the object “BaffordScepter” (the scepter from Thief’s Lord Bafford mission) in the room; and then rotate and move the scepter so that it’s lying, horizontally, on the table. Now you’ve actually got something to steal.
Here’s a really helpful tip for creating multiple objects: instead of creating another table from the hierarchy, we can simply copy the existing table. To copy a brush (including operation brushes, objects and lights), simply highlight the brush in question and hit the “Insert” key. This will create a copy in the same exact position as the original brush, with the copy now highlighted as the active brush. So, while it may look as if nothing happened, you’ve actually made a copy of the existing brush…it’s just that the copy is in the same exact place as the original. If you go to move the original brush, you’ll actually move the copy. So, use this method to copy the existing table and place the new table in the northern room.
You’ll notice that the game world is still fully illuminated, because we’ve still got the “light-bright” command enabled. Now that we’ve placed some torches, we can disable this feature by typing in “light_bright” again and moving around in the 3D View window. Hit “Alt+G” to enter into the game to see the lighting effects more closely.
VIII. Bringing the Level to Life
The first thing we need to do is load in a script. A script is a basic set of commands, used by DromEd to activate different in-game elements, like specific AI behaviors (such as the factory workers in Cragscleft Prison.) Click on the command line and type “script_load convict” to load in the ConVict (Conditions for Victory) script. This is the script DromEd needs to activate victory conditions (mission objectives), doors, and weapons. If you forget to load the script, these and some other in-game elements will fail to function, so it’s good to get into the habit of loading in the script whenever you start a new map. The script will get saved with the level and you won’t ever have to load it for this particular level again. Scripts are powerful tools, but since they are part of the game’s source code, script editing isn’t available to the public. However, “ConVict” should be perfectly adequate for your level building needs.
[D2 NOTE: As well as convict you also need the script file gen. Thus you must type in both:
By now you’ll have noticed that entering into game mode doesn’t quite have the desired effect: Garrett doesn’t have a health meter; there are no sound effects; and the guard you placed is just sort of standing there, with his arms out. That’s because DromEd recognizes the brushes you’ve created and the guard object you’ve placed…but doesn’t yet recognize you as a player, or the brushes as rooms, and the guard’s AI is unable to function because the level hasn’t been processed for AI’s yet.
The first thing we need to do is place the Starting Point, and tell Dromed to start the player model there. To place a Starting Point, go to the object hierarchy and expand the branches under the “fnord” tree until you come to “marker.” (Don’t expand past “marker.”) Place the marker object in the southernmost room, in the northwest corner, and make a note of its number, which will be located in parentheses, after the name “A Marker” (found at the bottom center of the screen). When the marker is in place, look at the bottom center of the screen and find the “Properties” button; click it. This will bring up a separate “Properties” dialog box, with the marker’s name - “A Marker” - already highlighted. Click the box’s edit button and change the name to “StartingPoint.” When the name has been changed, click the window’s “Done” button to return to the main DromEd screen. Now, click the “Links” button at the bottom center of the DromEd screen, located directly below the “Properties” button. This will bring up the “Links” dialog box. Click the “Add” button, which in turn will bring up a small dialog box. This dialog box will have the following fields: “Flavor,” “From,” and “To.” Click the arrow next to the “Flavor” field and select “PlayerFactory” from the drop-down menu. [Note: Use the “PlayerFactory” without the tilde (~).] In the “From” field, enter the number of the Starting Point you created. In the “To” field, type in the name “Garrett.” Click the “OK” button when you’re done, and then click the “Links” box’s “OK” button to return to the main DromEd screen. Press “Alt+G” to enter into the game. Notice that you now enter into the game world in the precise spot you placed the Starting Point, and Garrett now has a health meter, as indicated by the small shield icons in the lower left-hand corner of the screen. Go back to DromEd, and we’ll turn the operation brushes into actual rooms, complete with sound effects.
[Note: If you get killed by the guard (or if you accomplish all your objectives, but we’ll get into that later in the tutorial), you’ll need to exit the program and restart DromEd. To avoid this, place the line “no_endgame” (without quotation marks) in your user.cfg file. This will allow you to stay in game mode if you get killed or complete your objectives.]
To turn a brush into a room, at least as far as DromEd is concerned, you need to encapsulate that brush in a separate room brush. Look down at the bottom center of the DromEd screen, to the column of “Create” buttons. Click the last button - “Room” - so that it’s highlighted in violet. With the button active, go to one of the 2D view windows and create a violet room brush around the brushes you’ve already created. Make sure you expand the brush in the other views so that it completely surrounds the existing brush (if it doesn’t already do so). While it’s okay to use this method for now, there’s a more precise method of creating room brushes. Click on a brush in one of the 2D view windows so that it’s active. Then, press and hold the “Shift” key and hit the “Insert” key; this will create a room brush around the selected brush. What you’re probably asking yourself right now is this: Why would I want to encapsulate all my individual brushes in separate room brushes, when I could just create one giant room brush around all the brushes I’ve created? Well, room brushes serve to separate the spaces realistically, particularly where Thief’s sound effects are concerned. If you created a giant area, say one equivalent to the “Bonehoard,” and surrounded it in one big room brush, all of the sounds in that room brush would appear to be in one big room. By encapsulating each brush in a room brush, you’re helping to channel the game’s sound effects in a much more natural way; sounds will appear to come from around corners; a guard at the other end of the map won’t hear your footsteps; and so forth.
When you’ve created a room brush around the existing brushes, you need to build a room database so DromEd can examine the room/s and calculate sound propagation, etc. Go to the menu bar at the top of the screen and click “Tools,” then click “Build Room Database.” When this is done, hit “Alt+G” to enter into the game and walk around; notice that you can now hear sound effects, like the crackle of the torches and your own footsteps…but the guard is still standing motionless. Enter back into DromEd and we’ll remedy that.
[D1 and D2 NOTE: Don’t confuse “Room Brushes” with the physical rooms in your level.]
[D1 and D2 NOTE: Use “Build Room Database” every time you add/remove/resize/reposition a room brush. This will keep the sound working as it should and help to avoid DromEd crashes.]
To activate AIs (guards, servants, monsters, etc.) you need to build a pathfinding database, which basically allows the AIs to find their way around the rooms you’ve created. Note that you must create room brushes and build the room database before you can build a pathfinding database. So, go back to the menu bar at the top of the screen; click “Tools,” and then click “Compute Pathfinding Database.” When that’s done, enter into the game to see the Hammerite guard come to life. If you placed the Starting Point in the northwest corner of the southern room, and the guard in the northern room, you’ll be out of his field of view and therefore out of harm’s way. You way want to jump out, taunt him, and then run feebly around in circles before he bashes your brains in with that humongous warhammer. Yeah, you’re right - that’s not much fun. Let’s give Garrett some weapons to even the odds. Go back to DromEd, and we’ll equip the player model with a default inventory.
[Important Note: As you build more in-depth levels, there may be times when AIs cease to function as you’d expect: they continuously walk into walls, can’t climb stairs, and refuse to enter certain rooms. If that happens, it’s probably because you haven’t updated the pathfinding database. Whenever you add new terrain to your level, the AIs don’t know it’s there unless you tell them…and you tell them by clicking “Compute Pathfinding Database” under the “Tools” section of the menu bar. Get into the habit of updating the pathfinding database whenever you build new terrain.]
IX. Acoustic Settings
DromEd supports environmental acoustic settings using EAX, or “Environmental Audio Extensions.” This step is optional, but it will greatly enhance the game’s audio effects. EAX effects are supported in DromEd’s “game mode,” and in Thief version 1.33 or higher. Keep in mind, however, that you need and EAX-compatible sound card to benefit from these settings.
DromEd allows you to set individual acoustic characteristics for every room brush. Simply select a room brush in the editor, choose a pre-set room type from the table below, and use the hot-key indicated on the table to set the room’s EAX type. That’s all there is to it.
The following table lists the various EAX settings; while some of the names may seem a bit arcane, you should get a general idea of what kinds of sounds each setting will produce. The “Small Dead” setting, for example, would be suitable for any small room with very little reverb, such as a walk-in closet. Pick the room type that sounds closest to the thing you want, and feel free to experiment.
Ctrl-F1 Small Dead
Ctrl-F2 Small Normal
Ctrl-F3 Small Live
Ctrl-F4 Large Dead
Ctrl-F5 Large Normal
Ctrl-F6 Large Live
Ctrl-F7 Dead Hallway
Ctrl-F8 Normal Hallway
Ctrl-F9 Live Hallway
X. Creating a Default Inventory
Creating a Starting Point basically creates an in-game representation of Garrett without any inventory. To start a mission with a default selection of items (weapons and powerups), you need to create those items and then “link” them to the Starting Point. Search through the object hierarchy or use the “find_obj” command to create and place in the game world a blackjack, sword, and broadhead arrow. [Note: The broadhead arrow is called simply “broadhead.”] After the objects are created, make a note of each one’s object number.
We’ll start by linking the blackjack to the Starting Point. Select the Starting Point, and click the “Links” button, just as you did before. In the “Flavor” field, select “Contains.” In the “From” field, type in the number of the Starting Point (or just “StartingPoint”). In the “To” field, type in the number of the blackjack. Click “OK” and then click “OK” on the “Links” window to return to the main DromEd screen. You have just linked the blackjack to the player model, meaning you will start the game with that weapon. Don’t worry about the blackjack appearing in the world as an actual object during the course of the game: when you create a “contains link,” the player contains that object in his/her inventory, and it no longer exists in the game world. Now that you’ve linked to the blackjack, use the same procedure to link to the sword (make sure you use the correct object number for each object you link to).
Linking the broadhead arrow to the player is a bit more complex, because we want to give Garrett multiple arrows, and not just the one we placed in the game world. Before we link the broadhead arrow to the Starting Point, we need to modify the broadhead object so that it gives the player multiple arrows. Click on the broadhead arrow, and then click the “Properties” button to bring up the “Properties” window. Then, click the “Add” button to bring up a list of possible properties. Choose “Engine Features” then “Stack Count,” and type in the number of arrows you want to start out with. Let’s choose thirty (30) arrows. When you’ve finished changing the number of arrows, link the broadhead arrow object to the Starting Point just as you did with the sword and blackjack. Note that you don’t actually have to equip Garret with a bow; once you acquire arrows, the bow is automatically available.
Anyone’s who’s played Thief knows that one of the game’s coolest elements is the ability to extinguish torches using water arrows, to create your own beautiful, concealing darkness. Using the methods already described, give Garrett two water arrows. It’s important to note that, for the purposes of creating levels with DromEd, water arrows (and the same is true for moss arrows, fire arrows, and gas arrows.) are actually referred to as crystals, and are found in the hierarchy under Physical\Tulz\Crystal.
Now that you’ve got an inventory, go back into the game world and show that Hammerite who’s boss!
[Note: If you use your two water arrows to extinguish the two torches in the guard’s room, that room will be plunged into complete darkness, as those two torches are the only sources of light!]
XI. Creating AI Patrol Routes
The AIs in Thief: The Dark Project, as evidenced by the guard we placed in this tutorial level, are very intelligent: although they remain stationary when nothing’s going on, they can hear your footsteps, hunt you down, and even run away when threatened. These are all behaviors that are inherent to the AIs, and you as the level designer don’t need to worry about controlling them. And, while complex scripts are not available, you can modify AI behavior by assigning patrol routes. Basically, a patrol route allows an AI, let’s say a guard, to walk a predefined circuit, by travelling from one marker (similar to a waypoint in a flight sim) to another, to another, and so on.
To define a patrol route, you need place a circuit of markers to indicate that route. In the object hierarchy, go to fnord\Marker\TrolPt. Place four TrolPt markers (not LookBackPt markers) in a square pattern around the room; these are the markers the guard will follow on his route. Now, it’s important to know that an AI will start a patrol by heading to the TrolPt marker that is closest to him in 3D space. How do we make sure the AI starts the patrol at a particular marker? Simple: we create the first marker (or move it, if it was created somewhere else) directly inside of the selected AI. When placing markers, it’s important that they always exist inside in the game world (meaning, inside an air brush), close to the floor (up to around 4 feet) where the AI will walk.
Now that the markers have been created, we need to link them together. Click on all the markers and make a note of their object numbers. Then, click on the first one - it should be inside the guard - and bring up its “Links” box (we’re basically going to do something very similar to linking the default weapons to the Starting Point). Click the “Add” button to bring up the smaller dialog box. In the “Flavor” field, use the drop-down menu to select “AIPatrol.” [Note: Do not use “~AIPatrol.” Names with the tilde (~) in front of them are “return” links, and we’ll discuss them in just a bit.] In the “From” field, put the number of the currently selected marker. In the “To” field, put the number of the next marker you want the guard to travel to. We placed the markers in a square pattern around the room, so we want the guard to follow a square patrol route. So, in the “To” field, put the number of the next marker in the square patrol route. Use this method to link all the markers together. Remember that we want the guard to walk in a continuous loop, so, when you get to the last marker, link from it back to the first marker. That way, when the guard gets to the last marker, he’ll head back to the first marker and start his patrol all over again.
There’s one more thing we need to before the guard will follow the markers, however. When you first place an AI, it will remain stationary because that’s its default position. Although you’ve placed the TrolPt markers, you haven’t told the AI to follow them. To change this, select the guard, and then bring up his “Properties” box. Click the “Add” button, and then select “AI,” “Ability Settings,” and “Patrol: Does patrol.” This will bring up a small dialog box containing a small, white, unchecked selection box. Click on the selection box to place a check mark there, and then click the “OK” button to close out the dialog box. Then, click the “Done” button on the “Properties” box to return to the main DromEd screen. By checking the box, you have enabled that AI’s ability to go on patrol.
You can also enable an AI’s “random patrol,” command, so that instead of following the TrolPt markers in order, the AI chooses a path at random. To do this for the guard, follow the same steps you used for enabling “Patrol: Does patrol,” but select “Patrol: Random sequence.” This will enable the guard’s ability to patrol at random. [Note: “Patrol: Random sequence” is found on the list directly underneath “Patrol: Does patrol.”] It’s important to note that if you do decide to activate the “Patrol: Random sequence” ability, you still need to activate the “Patrol: Does patrol” ability so the guard knows he’s supposed to patrol in the first place.
[D1 and D2 NOTE: “Patrol: Random Sequence” can produce unexpected results. If you use it, make sure you test it thoroughly.]
[D1 and D2 NOTE: To watch your AI’s move about without the hassle of them attacking you, type “aiawareofplayer” into the command line. Type it again to turn the AI’s awareness of Garrett back on.]
You may notice that when you open up a marker’s “Links” box and go to link from that marker to the next, there’s already another link there. It looks similar to the one you’re about to create, but there’s a tilde (~) at the beginning of the “Flavor” name, and the “From” and “To” links are different. The links with the tilde are called “return” links. Basically, you as the level designer create a link from one marker to the next marker. But DromEd recognizes that one marker also links to a previous marker. While you may create three markers, numbered 23, 24, and 25, and link from one to the next, DromEd goes one step further by linking them backward as well. So, let’s say you create a link from marker 23 to 24. Then, you create a link from marker 24 to 25. You have specified that marker 24 links to 25…but DromEd has already linked marker 24 back to 23.
Return links are very similar to normal links except for the following: their flavor names begin with a tilde; they point in the opposite direction; and they have the opposite meaning. Say, for example, you have a chest, and a "contains" link from the chest to a potion. What the link means is that, "The chest contains the potion.” The potion can't be seen in the game, but when someone opens the chest the potion goes into his or her inventory. At the same time the "contains" link is created from the chest to the potion, a "~contains" link is created automatically from the potion to the chest. This link means, "The potion is contained by the chest." The important thing for you to remember about return links is that although you will see them frequently, their placement is a normal occurrence that gets managed automatically by DromEd. You don't have to worry about them at all.
Now that you fully understand the concepts of linking, enter into game mode and watch as the guard patrols around the room. See if you can sneak up behind him and knock him out with the blackjack before stealing the scepter. [Important Note: If you enabled the “Patrol: Random sequence” ability, you may notice that at some point the guard walks into the column, and just continues walking into it, instead of trying to go around. That’s because you need to update the pathfinding database, as mentioned earlier in the tutorial.]
XII. Creating Mission Objectives
If you’ve followed this tutorial all the way through, from beginning to end, you should now have the knowledge to make fairly detailed Thief maps. You can create terrain, place objects, give yourself weapons, and even define patrol routes for your AIs. Now we come to the most advanced (read: confusing) part of this tutorial: creating mission objectives. If you enter into the current level, you can kill the guard and steal the scepter…but then you’re just sort of stuck there, hanging around with nothing to do. In other words, you have to “pretend” that stealing the scepter is your goal, because DromEd doesn’t yet recognize that (or anything else) as an actual objective.
In order to assign objectives, you must specify a mission’s quest data. Go to the top of the screen, to the menu bar, and click “Editors.” Then, click “Mission Quest Data.” Don’t worry - nothing is supposed to happen. That’s because you haven’t yet specified any quest data. When you have specified this information, clicking “Mission Quest Data” will bring up a small “Quest Data” dialog box, containing all the objective and difficulty information for that mission. So, we need to enter in this information. Understanding these concepts, at least for the purposes of level creation, is a bit tricky…but this tutorial should at least teach you the basic principles needed for the creation of real missions, with real objectives.
In order to implement objectives, you must first understand how DromEd views those objectives. So, this section of the tutorial will first explain the concepts behind objectives and difficulty levels, and then teach you to actually implement them in your missions.
First and foremost, every objective you include must be given a number, and the first objective must be given the number 0. So, if you have three objectives, they would be numbered 0, 1, and 2. Again, they must be numbered in this way.
Next, each objective has a “state,” which indicates whether or not it has been completed or not. DromEd recognizes four states for objectives: “incomplete,” “complete,” “inactive,” and “failed.” If you’ve played Thief, you will have seen, on the “Objectives” screen, visible representations of each of these states: “incomplete” is marked by an empty box, meaning that objective has not yet been fulfilled; “complete” is marked by a green check mark, meaning that objective has been satisfied (like when you steal an objective item); “inactive” is marked by a red circle with a line through it, meaning that objective is no longer active or applicable; and “failed” is marked by a red “x” (though at that point, because of the failure of an objective, the mission will usually end before you can even notice this mark on the “Objectives” screen).
DromEd uses the following numbering convention for objective states:
When making Thief levels with DromEd, each objective must be marked with a 0 (zero) for “incomplete,” meaning that at the beginning of a mission, each objective has yet to be accomplished by the player. These objectives will be marked either “complete” or “failed” according to the actions of the player.
The next thing a budding level designer needs to know is that in Thief, objectives can be either visible or invisible. Visible objectives are those the player can see on the “Objectives” screen right at the start of the game; so, when starting a Thief mission with visible objectives, the player knows exactly what he or she is supposed to do. A good example of a visible objective can be seen in Thief 2's “Running Interference” mission, where the player has to help Basso and Jeniver elope: “Get Basso and Jeniver out of the mansion together with you.” An invisible objective, on the other hand, is one the player is not aware of at the start of a mission. A good example of an invisible objective can be seen in Thief 2's “Eavesdropping” mission, where the player, after listening to Karras and Sheriff Truart, has to then make a copy of the Bank Safety Deposit Box Key. The objective to copy the key is an invisible objective, because it doesn’t show up on the player’s “Objectives” list at the beginning of the mission; instead, that objective is added after the player listens to the conversation
For the purposes of designing Thief missions with DromEd, it is imperative that you realize something about mission objectives before you actually begin the creation process: the “ConVict” script only supports visible objectives! So, you could not create a mission with the complexity of “Eavesdropping,” because all of the objectives must be visible to the player at the start of that mission. So, you could easily create a mission that required the player to enter a certain building, steal a certain object, and then retreat to a certain location…but the player would have to be aware of all of these objectives at the beginning of the mission. You could not, however, create a mission that required the player to steal a certain object…and then gave that player a new objective after the object was actually stolen.
[D1 and D2 NOTE: Actually you can make invisible objectives and enable New Objectives during your mission. It’s just rather tricky to do. Several (advanced) tutorials are available to explain how to do this.]
DromEd uses the following numbering convention for objective visibility/invisibility:
So, as stated, each objective must be numbered 1, for “visible.” [Important Note: By now, you may be wondering exactly where these numbers come into play. Don’t worry - that will be explained shortly.]
You now know that, for the purposes of level design with DromEd, each objective has a “state” (incomplete, complete, inactive and failed) and a visibility (visible, invisible). Well, there are obviously different kinds of objectives as well. The public release of DromEd supports four different kinds of objectives, with the following numbering scheme:
1=Steal an object
2=Kill a creature
3=Get a certain amount of loot
4=Go to a location
[Note: Objectives are covered in more detail in the “ConVict” document. There are some variations of the objectives you see here. For example, you could easily have an objective that prevents you from killing a certain creature or creature type. Also, in order to learn how to create loot objectives (ie., steal 500 gold pieces on “Normal” level), you must refer to the ConVict document!]]
[D2 NOTE: convict.doc is out of date for D2. Although all the information in it is valid for Thief 2, several new undocumented features have been added to the possible victory conditions.]
You could include just one or all four of these objective types in your mission. So, the player could be required to steal an object…or the player could be required to steal an object, kill a creature, get a certain amount of loot, and go to a certain location.
You can even use multiple objectives of the same type, if you wish. For example, the player could be required to steal two different objects, kill three different monsters, and then go to a certain location.
So, how do you enter all this data into DromEd? The first thing you should do is write down on a piece of paper all the objectives you want, starting with the number 0. Using the sample level we’ve made, let’s have two objectives: stealing the scepter and killing the guard. This would read as:
0=Steal the scepter
1=Kill the guard
Now, before we can tell DromEd what the actual objectives are, we have to indicate that each one will be “incomplete,” and “visible,” as already stated in the tutorial; each of these commands must be entered in separately. The command used for entering in objective data is “quest_create_mis” -- without the quotation marks, of course. Get used to this command, because we’ll be using it quite often.
The command for entering in the “state” of an objective is “goal_state_x, 0” - where “x” is a variable representing the number of that particular goal, and “0” is the number corresponding to the state we want - incomplete. So, the entire command you would need to enter (in the command line) is exactly as follows:
quest_create_mis goal_state_0, 0
[Important Note: The first number is always the number of the objective you’re referring to, and the second number is always the number that corresponds to a specific DromEd command. Always use the above format: number, comma, space, number.]
After this line is entered in, go back up to the menu; go to “Editors,” and “Mission Quest Data.” You’ll notice that the small “Quest Data” dialog box now comes up, and lists the info you’ve entered. Click the “Cancel” button to close the window.
[Note: You can use the “Quest Data” window to directly edit variables you’ve entered in. Just highlight the command, click “OK,” and you can change the command’s “Name” and “Value.”]
Confused? Let’s dissect that line to see what you’re telling DromEd to do. “Quest_create_mis” is the standard command for entering in objective data. Then, you use a space and type in the rest of the command. “Goal_state_0, 0” means that objective 0 (steal the scepter) is going to be marked with a 0, meaning it is incomplete. What all this means is that when you start the mission, the objective “Steal the scepter” will have an unchecked box next to it on the “Objectives” screen, because that objective has yet to be fulfilled.
Of course (now things get even trickier) the objective “Steal the Scepter” won’t appear on the “Objectives” screen at all unless you mark that objective as visible, meaning the player can see it right at the beginning of the mission. To mark our first objective as visible, use the following command exactly as you see here:
quest_create_mis goal_visible_0, 1
Hopefully, by now you are gaining an understanding of how objective data is entered into the command line. With the above line, we told DromEd that objective 0 (steal the scepter) would be marked with a 1, meaning it is visible at the start of a mission.
[Important Note: So, in case you haven’t already figured it out, you must enter in the “goal_state” and “goal_visible” commands for every objective you have, and each one must be made “incomplete” and “visible.”]
Now that we’ve set the state and visibility of the first goal (steal the scepter), follow the examples above and set the state and visibility of the second goal (kill the guard).
[Important Note: If you screw something up and need to delete a comand you’ve entered in, use the command “quest_delete” and then the command you entered. So, if you wanted to delete the line “quest_create_mis goal_state_0, 0” you would type in:
You would not use the comma and second number because you’re not trying to set anything for goal 0 - you’re simply trying to delete goal 0. So, you need only indicate the number of the objective (goal), which in this case is 0, for our first objective, “Steal the scepter.”]
Okay, we’ve told DromEd that we’ve got two objectives, and that each one will be visible and marked as incomplete at the beginning of the mission…but we haven’t yet told DromEd what those objectives are. For each objective, we must enter in two commands: one to indicate what the objective is, and one to indicate what the subject of that objective is. So, for the first objective - “Steal the scepter” - we need to tell DromEd two things: 1.) The player needs to steal an object; 2.) The object the player needs to steal is the jeweled scepter. To do this, we use the commands “goal_type” and “goal_target.”
quest_create_mis goal_type_0, 1
The above line tells DromEd that objective 0 will require the player to steal an item.
Now, find the scepter object you placed on the table, click it, and make a note of its number. Then, type in:
quest_create_mis goal_target_0, x (where “x” is the number of the scepter)
The above line tells DromEd that the subject of objective 0 (which we just defined as “steal an object”) is the scepter.
Using the examples above, let’s enter in the data for the second objective - “Kill the guard.” First, we would use the following command:
quest_create_mis goal_type_1, 2
The above line tells DromEd that objective 1 will require the player to kill a creature.
Then, we would use:
quest_create_mis goal_target_1, x (where “x” is the number of the guard)
The above line tells DromEd that the subject of objective 1 (which we just defined as “kill a creature”) is the guard.
Before you can get the objectives enabled, there’s one more thing you must do, and that is to assign the “VictoryCheck” script to your Starting Point. Click on the Starting Point to select it, and then click the “Properties” button to bring up the “Properties” window. The, click “Add,” and choose “S,” and then “Scripts.” This will bring up a small “Scripts” box with a few different fields. In the “Script 0” field, type in “VictoryCheck” (one word - without the quotation marks) and then click the “OK” button. Click the appropriate buttons to close out the windows and return to DromEd.
Now that you’ve actually got real objectives, enter into game mode by hitting “Alt+G.” Once there, hit the “O” key to bring up the “Objectives” screen. You should see two small, empty boxes to the left of the screen, with no text next to them. Those objectives are, in order from top to bottom: Steal the scepter; and kill the guard. The reason there are no text descriptions of the objectives is because this information hasn’t been entered in yet. Don’t worry - we’ll come to that a bit later. For now, it’s enough to know that we have two objectives: the first requires you to steal the scepter; the second requires you to kill the guard. Hit the “Done” button on the “Objectives” screen to return to game mode. Then, kill the guard - either nail him with an arrow from a distance, or get behind him and backstab with the sword. [Note: If you knock the guard out with the blackjack, he’ll be merely unconscious, and not dead. To finish him off, you’ll have to hack away at his unconscious body with your sword.] When the guard is dead, return to the “Objectives” screen and note that there is now a green check mark in the second box. That’s because you’ve completed the second objective - “Kill the Guard.” Exit the “Objectives” screen and steal the scepter - the mission will end, meaning you also completed the first objective - “Steal the scepter.”
XIII. Creating Difficulty Levels
If you’ve made it this far, you’re to be commended! Learning how to implement real objectives into your missions is the test of a true Thief level designer. And, if you can do that, you can take the objective formula even further and incorporate difficulty levels into your missions.
The first thing you need to realize when creating different difficulty levels is that you first need to create all the objectives, as discussed in the previous section of this tutorial. So, even if you have objectives that only show up on certain difficulty levels, those objectives need to be created before you do anything else. Since we already have two objectives in place, let’s use those to illustrate the differences in difficulty levels. Right now, our objectives are: “Steal the scepter” and “Kill the guard.” Whenever we enter the game, we must accomplish these objectives. But let’s modify things a bit, so that the “Kill the guard” objective is only required when we play the game on “Expert” difficulty level.
DromEd recognizes three different difficulty levels, with the following numbering scheme:
To tell DromEd which objectives will be available on which difficulty level, there are two different commands we can use: “goal_min_diff” and “goal_max_diff.” “Goal_min_diff” is the minimum difficulty that objective would be available. “Goal_max_diff” is the maximum difficulty that objective would be available. So, let’s say the “Normal” and “Hard” difficulty levels required you to steal 300 gold worth of loot, and the “Expert” difficulty level required you to steal 500 gold worth of loot. The goal “Steal 300 gold worth of loot” would use the “goal_max_diff” command, set to the number 1, for Hard difficulty. So, basically, this would tell Dromed that the goal “Steal 300 gold worth of loot” would apply to all difficulty levels, up to the maximum difficulty level of “Hard.” We don’t want to apply this objective beyond the “Hard” difficulty level because we want the “Expert” level to require stealing 500 gold worth of loot. To specify that objective, we would use the “goal_min_diff” command and set the number to 2, for “Expert” difficulty. This would tell DromEd that the goal “Steal 500 gold worth of loot” would only apply to difficulty level of “Expert” and above. Of course, there is no difficulty level higher than “Expert,” but that’s okay. That just means the program will apply that difficulty level to just “Expert,” which is exactly what we want.
Let’s get back to our tutorial level. Remember, we want the objective “Steal the scepter” to apply on all difficulty levels, and the objective “Kill the guard” to apply only on the “Expert” difficulty level. So, for the “Steal the scepter” objective, we wouldn’t need to specify any conditions. For the “Kill the guard” objective, however, we would need to enter in the following command line:
quest_create_mis goal_min_diff_1, 2
The above line basically tells DromEd that objective 1 (“Kill the guard”) will be applied to the minimum difficulty level of 2, which is “Expert.”
[Note: Remember, “Kill the Guard” is objective 1, because objective 0 is “Steal the scepter.”]
Now it’s time to test out the difficulty levels. Normally (and this is something that will be covered in the next section), a person playing your mission would select a difficulty level through the pre-mission screen, just as they would when playing any Thief level. But during the course of level design, you need to be able to check your work in DromEd. You do this by using the difficulty level selection command. To play the mission on a particular difficulty, type in:
quest_create_mis difficulty, x (where “x” is the difficulty level you want to play at)
So, to play the tutorial mission on the “Normal” difficulty level, type in:
quest_create_mis difficulty, 0
Now, enter into game mode and hit the “O” button to bring up the “Objectives” screen. You should notice that there is now only one small box…meaning there is only one objective. That’s because we’re playing on the “Normal” difficulty level, and we set the “Kill the guard” objective as an “Expert” difficulty level. So, on “Normal” difficulty, this objective wouldn’t even be available. If we had wanted to play the mission on the “Expert” difficulty level, thereby enabling that second objective, we would have used the command:
quest_create_mis difficulty, 2
You should only use the “set difficulty” command to test out a particular difficulty level through DromEd. If you set a particular difficulty level, and then save the file, the mission will be “stuck” on that level, even if the player chooses another difficulty level on the pre-game screen. So, if we set the tutorial mission to “Expert” difficulty and then saved the mission, anyone who played the mission would be forced to do so at the “Expert” level. If you do save the mission while it’s set to a particular difficulty level, you must delete the difficulty command and resave in order for the mission to operate correctly. So, you would use this command:
XIV. Other Helpful Commands and Tips
If you’ve followed this tutorial from beginning to end, you should now have the ability to build basic Thief 2 maps. By experimenting with DromEd, you can discover the program’s full capabilities. But here are a few helpful commands and tips to get you started.
· To learn more, remember that you can load up Thief levels with DromEd and poke around to see how some complicated things were created. You can probably learn a lot, but remember a few things:
· You might not have the right tools available to do the all of the things that were done in the game. Try not to beat your head against the wall.
· It’s not necessarily true that everything in all Thief levels was done perfectly and optimally. Some examples may be better than others.
· When you design Thief missions, it often helps to disable the game’s gravity so you can “fly” around the game world and examine your work more closely. Hit “Shift+Q” to disable gravity, and “P” to turn gravity back on.
[D2 NOTE: Shift+Q = fly up. Shift+E = fly down. In game mode, press shift+; to bring up the command line and type “unfly” to turn fly mode off.]
· Similarly, you can toggle the ability of AIs to see you with the command “aiawareofplayer,” (again, no quotation marks or comma) and toggle player collision detection with the command “physics.” With regard to toggling “physics” on and off, remember that even though you can now fly through solid space, doing so can lead to weird errors (although it is unlikely to fatally corrupt your work, format your hard drive, or anything permanent like that).
· Use the “show_stats” command to enable in-game statistics, like frame rate and polygon count. When creating Thief levels, you want to keep the polygon count low - shoot for 250 or below - to maximize game speed.
[D1 and D2 NOTE: Try to keep the probability of any action away from areas with high polygon counts.]
[D1 NOTE: If you exceed approx 1000 polygons in view, Thief will produce weird graphical effects. If you massively exceed 1000 polygons in view Thief will crash.]
[D2 NOTE: This polygon count still applies. However, as the average speed of cpus/gfx boards has increase and as Looking Glass have improved the engine, you can push this limit a bit more. Thief 2 can handle polygon counts in excess of 1000 but for the average user the game will become unplayable.]
· To start DromEd with different default settings, you can place the following lines in your user.cfg directory: :
· “edit_screen_size 800,600” - This will start DromEd in 800x600 mode.
· “editorcam_from_game - When you place the Starting Point, you will start the mission at this point every time you enter into the game. With the “editorcam_from_game” command, you can enter into the game at the same point you were at in DromEd.
[D1 and D2 NOTE: Actually the command that does what is described is “persistant_player_pos”.]
· “no_endgame” - This allows you to continue playing if you’re killed in the game world or complete all your objectives.
· When you first start DromEd, the program defaults to a grid size of 16. 16 is fine for creating large brushes like rooms, but in order to make smaller brushes, you’ll need a smaller grid. Find the grid field in the lower left-hand corner of the DromEd screen - try using a size 11 grid for smaller brushes, like creating small columns and solid details.
· On the menu bar, choose “Tools” and then “Optimize” to optimize the level. This essentially “tightens” things up, by reducing your polygon count and making things run more smoothly. Keep in mind, however, that “Optimizing” takes longer than “Portalizing.”
[D1 and D2 NOTE: Optimizing can massively reduce polygon counts. Always use it before assessing high polygon areas.]
· While you, as Garrett, can “mantle” up ledges and walls, AIs have much more restricted movement; they cannot climb up terrain obstacles that are much higher than a foot or two. This is most important to remember when building stairs. To make sure AIs can climb stairs, the stairs should be 1ft. deep by ¾ foot high.
· Get into the habit of saving your work regularly. On the menu bar, choose “Save Mission” to save your level in progress. DromEd may crash on you, and it may not always be your fault. Saving helps to avoid frustration.
[D1 and D2 NOTE: Use more than one save file for your mission and rotate through them. It’s not unheard of (though rare) for DromEd to trash a saved mission file.]
· If, during the course of level creation, something seems wrong, try:
· Building the Pathfinding Database
· DromEd does some automatic color-coding to help you tell which brushes are closest to the camera. If you don’t like it (because you can’t see the lines very well), try pressing “Ctrl+7” to disable it.
· Normally your camera and the 2-D grids are synchronized such that the camera is always in the center of the grid. The menus you get when you right click on one of the 2-D view screens include the option “asynch all,” which desynchronizes this. To resynch, select “synch all” from the same menu.
· The command “cam_to_brush” will teleport your camera to the currently selected brush. This works well in conjunction with “find_obj x” where “x” is the object’s name or number.
· The full list of texture families is: dungeon, city, church, cave, catacomb, concastle, bafford, sewer, rescore, temple, mine, ruined, metals, core, ancient, maw, ramirez, lostcty, newcity, keeper, mech, newkeep, basement
[D2 NOTE: The list for D2 is:ancient, artdeco, artdmisc, artdout, buttons, catacomb, cave, ceilpain, church, city, civicb2, civicbui, core_1, core_2, core_3, keeper, lostcty, maw, mbfloor, mech, mine, newcity, newkeep, newmech, newmetal, numbers, outtakes, ramirez, rescor_1, rescor_2, ruined, sky, skyhw, stainglass, tower2, vicm01, vicm012, vicm04, vicm07, vicm09, vicwood, vmaw, vmaw2, vmawtb, vmawwin, vrescor1, vwater, water, waterhw, wdfloor.]
· Lighting - There are three lighting modes: Quick, Raycast, and Objcast. You can choose between them by selecting “Tools” on the menu bar. Quick lighting is the default. Raycast lighting is more realistic but takes longer. With Objcast lighting, some stationary objects will cast shadows. Note that DromEd also supports ambient lighting. Initially, the ambient light is set to 0, so unlit areas are completely dark. To set it to a higher value (say, 20), use the command “ambient 20.”
[D2 NOTE: With coloured lighting in Thief 2, you need to specify red green and blue values for your ambient value. So use ambient 20 20 20.
The consensus is that 20 is the best value for the ambient light, given the wide variety of gfx boards/configurations that may run your mission.]
· Properties and Links - As you can see by looking at the “Properties” dialog box and “Links” dialog box, there are lots of links and properties in DromEd. These are one way in which a designer can get interesting and complicated things to happen in missions. However, some properties and links may seem to have redundant effects, or no effects at all. Furthermore, some of them are intended for use by the designer while others are intended to be managed automatically during the game (and thus could be very problematic if set by the designer). We can’t cover these in any detail here, but as always you are encouraged to check out Thief missions for examples. Below are brief descriptions of some useful properties.
· Game::Damage Model::Hit Points - Determines how much damage an AI (and some objects) can take before dying.
· Engine Features::Locked - When placed on a door or chest and set to “true,” this makes the object locked.
· Engine Features::Key Src - When placed on a key, this specifies which lock (or locks) the key opens.
· Engine Features::Key Dst - When placed on a locked object, this specifies which keys fit the lock.
· Dark Gamesys::Pick Cfg - This is how you specify that (and how) a locked door can be lockpicked open.
· AI::AI Ability Settings::Combat:Non-hostile - Controls whether the AI is hostile to the player.
· AI::AI Ability Setting::Flee: Conditions for Flee - Controls when the AI will flee and when he will fight.
· AI::AI Core::Alertness Cap - Can be used to make an AI frozen at a particular alertness level or range thereof.
· AI::Utility::Flee Point - When placed on a marker object, it specifies that location as a good one for AIs to flee to. The value ranks the location from 0 to 100.
· Difficulty::Destroy - Putting this on an object and selecting 0, 1, and/or 2 will cause the object to disappear for all selected difficulty levels. Note: This only happens when you enter the mission normally through the pre-mission screens. Optionally, you can run the command “process_difficulty”, but only do this when you are in the game, not the editor!
· Timing terrain creation - During Portalization, operation brushes are processed in a specific sequential order. Press Tab to cycle between all of the brushes in your level, and look at the lower-left corner of the editor to a field called “Time.” Time starts at 0 and goes to the last brush in your level. Note that “fill” operations (such as “fill water”) replace all other terrain within their brush dimensions. Therefore, if you make a neat statue out of “fill solid” brushes stacked like building blocks, then place a “fill air” brush such that it covers the whole statue, the statue will disappear when you portalize. This is because the “fill air” operation is processed later in time than the many “fill solid” operations that make up the statue. To fix it, you could move the “fill air” brush to earlier in time, before any of the “fill solid” brushes take place. You can do so by clicking in the time value box and typing in the new number, or pressing the “<” and “>” buttons next to it. If you are having trouble making the shapes of terrain that you want, pay attention to what sequential order the operation brushes are processed in. Lastly, note that the conversion brushes (such as “water->solid”) do not necessarily effect all terrain within their brush dimensions.
· Always using a grid of size 11 or larger will help to prevent a large variety of potential problems caused by irregular sizes, shapes, and rotations of terrain. The grid is “on” when the “Use” button (found below the grid number) is purple (not gray). If you ever get weird error messages and/or crashes from the renderer (which you may recognize because they mention things like “polyhedrons,” “portals,” “planes,” etc.), try reducing the complexity of your mission’s terrain by using operation brushes that are more regularly shaped. Go through and grid-snap all of your brushes by moving them slightly when the grid is on. Furthermore, remember that very high poly counts can lead to problems, so don’t let your lines-of-sight get too long or too detailed. In addition to causing renderer problems, complex terrain can potentially get the player stuck and confuse the AI.
[D1 and D2 NOTE: No matter how tempting, NEVER turn off grid snapping. This can introduce problems into your level that won’t become apparent until DromEd starts crashing days later. Turning off grid snapping is the single biggest cause of DromEd crahses.]
· Filtering - To the lower right of the “Create” button is a “Filter” button. Sometimes DromEd’s 2D windows get crowded and you want to look at only objects, or only terrain, etc. When you press “Filter” you are presented with a number of buttons you can use to toggle on and off various types of brushes (“Terr”, “Light”, etc.). Remember to toggle them all back on before portalizing, lighting, etc.
· Area brushes - Area brushes are another way to do filtering, this time by proximity rather than type. Area brushes are cubic brushes that you can create by selecting them on the “Create” menu, then dragging in a 2D window. When an area brush is the current brush, you can use it to filter. Press “Me Only” to show only those brushes that are inside the area brush. Press “Not Me Only” to disable that filtering. You can also name area brushes, select them by name (with the “Search” button), and activate some area brushes and not others. Among other things, area brushes are useful for speeding up portalization when you are focusing your work on a small area, such as a single room. Again, make sure you shut off all filtering before trying to portalize, light, etc., the whole level.
· Multibrushes - Multibrushes are a good tool for cutting-and-pasting brush groups. So, for example, if you make a row of pillars on one side of a room and you want to have the same exact row of pillars on the opposite side of the room, you could multibrush them, press Insert to make a copy of the multibrush, then move the new multibrush to the other side of the room. To add brushes to a multibrush, hold down “Shift” while selecting a brush. Remove brushes from a multibrush in the same way. You will note that when you are in multibrush mode, the word “multibrush” appears where the textures normally appear, at the bottom of the DromEd screen. To get out of multibrush mode, select a brush that is not in the multibrush while “Shift” is not pressed. The “Multibrush” menu gives you other multibrush functionality, such as saving and loading multibrushes, which is especially useful for porting multibrushes between two different missions. Lastly, multibrushes were primarily designed with terrain brushes (i.e. operation brushes) in mind, but also work to a degree with other brush types.
[D1 and D2 NOTE: Multibrushed brushes won’t snap to grid. You must manually ensure that their position parameters are multiples of at least 0.25]
· Room Brushing - Room brushes are your way, as the designer, to specify the “general shape and form” of your 3D terrain for DromEd. A hallway may have a carpet running down the middle, skylights above, columns along the sides, and some decorative trim along the top that sticks out a little. All of these things may change the 3D shape in small ways, but with regard to sound propagation, you want to specify the “general shape and form” as an elongated cubic shape with the same location and dimensions of the hallway. The easiest way to so is as follows. When you made the hallway, you probably started with a long “fill air” brush and then added other brushes for the details. Select that first “fill air” brush, then hold down “Shift” and press “Insert.” DromEd will make a room brush that is just like the original brush, but slightly bigger. Another useful tool is the “show sel” button, which will draw lines to show you how the currently selected room brush is connected (for the purposes of sound propagation) to adjacent rooms. Be warned that good room brushing can take a lot of time and effort, but can make the sound in your levels much better. Here is the list of room brushing rules.
· All air and water space in your levels must be contained within at least one room brush. This is particularly important for the planes of the floor, from which all footstep sounds originate.
· Room brushes are allowed to contain solid space (this is only for convenience of placing room brushes; remember that no sounds can actually originate inside solid space).
· When two room brushes overlap, sound will propagate between them. Use the “show sel” button to confirm that two room brushes intersect.
· Room brushes that are rotated or that intersect with other room brushes in strange ways may not propagate sound correctly. Use the “show sel” button to see if an intersection problem has occurred. You will know there’s a problem if the room brushes intersect in 3D space but do not have a line between them when you press “show_sel.” If so, try changing the shapes, positions, and rotations of your room brushes. Use more room brushes if necessary.
· The center of a room brush must never be contained within another room brush.
· Don’t forget to “Build Room Database” to process your room brushes.
· If you include “check_rooms” in your user.cfg, some useful diagnostics may happen when you build the room database. The first thing it will do is highlight in yellow all room brushes whose center is inside another room brush. You should fix all of these room brushes. If no such room brushes occur, the command will highlight in yellow all room brushes that intersect with other room brushes inside solid space. These are not technical problems, but you might want to check to make sure you really meant for those room brushes to intersect.
[D1 and D2 NOTE: “check_rooms” will sometimes highlight in yellow room brushes which have no obvious problems. Usually, you can just ignore this, but be sure to double check the brushes first!]
· Water brushes - To create water, try using the “fill water” and “flood” brushes. Two things you need to know: 1.) Water brushes are like air brushes, except that they fill the entire brush with water. This water will erase any solid you may have already created there. 2.) Flood brushes fill an existing air brush with water, but do not delete any solids that are already there. To get the water to look like water, you will need to make sure it is flow brushed (see below).
[D1 and D2 NOTE: Flood is a bit buggy. If you have no choice but to use it, be prepared for a but of experimenting. Try and get away with fill_water or if you can.]
· Flow brushes - Flow brushes are how you make water in a Thief level move, look, and behave like water. They are fairly complicated, so they will only be touched on here. A flow brush applies to the water space that the center of the flow brush is in and sometimes water space adjacent to that as well. The boundaries of the flow brush should contain the surface of the water. Each flow brush is belongs to a “group.” To edit the properties for a group of flow brushes, click on the flow brush to select it, and then look down to the bottom center of the screen. Click the “Edit Group” button to bring up the properties box for that group. Different flow brush “groups” have different flowing properties, such as “x change/ sec” which specifies how fast the water flows along the X axis. In order to use water textures, the “texture name” field for a flow brush group should be one of the following: “bl” or “gr” (“bl” if you want blue water, “gr” if you want green water). The easiest way to get basic water flow is the shotgun method - lots of large flow brushes. Make sure you press “update in world” and/or reportalize.
[D1 and D2 NOTE: If you get a jorge texture on your water there are 2 likely causes:
You have exceeded the maximum texture palette size of 255. Solution: Remove some unused textures.
There is a non-water brush inside your flow brush. Solution use multiple flow brushes that go round the the offending brush.]
· Don’t cross the beams. If you get hurt, remember that we warned you. We wish you luck, but remember: DromEd is unsupported. You asked for it.