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.
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.
I. What’s On The Screen
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
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
[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.]
the course of this tutorial, we’ll explore each of these interface elements
II. Brushes and Portalizing
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
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 >.”
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.
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.
Brushes / Moving around in the View Windows
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).
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.]
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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
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.
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
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.
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.
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
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.]
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)
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 guardsswordsmengrunts). 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.”
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
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.
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
the Level to Life
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
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
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.
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
[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.]
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.
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.
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.]
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.
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.
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
X. Creating a
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.
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).
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
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
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!]
AI Patrol Routes
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.
define a patrol route, you need place a circuit of markers to indicate that
route. In the object hierarchy, go to
fnordMarkerTrolPt. 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.
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.
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.
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.
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.
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.
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.]
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
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.
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.
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.
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).
uses the following numbering convention for objective states:
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.
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
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
uses the following numbering convention for objective visibility/invisibility:
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.]
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
a certain amount of loot
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!]]
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.
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
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:
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.
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:
[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,
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.”]
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.
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:
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”
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
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.”]
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.”
above line tells DromEd that objective 0 will require the player to steal an
find the scepter object you placed on the table, click it, and make a note of
its number. Then, type in:
goal_target_0, x (where “x” is the number of the scepter)
above line tells DromEd that the subject of objective 0 (which we just defined
as “steal an object”) is the scepter.
the examples above, let’s enter in the data for the second objective - “Kill
the guard.” First, we would use the
above line tells DromEd that objective 1 will require the player to kill a
we would use:
goal_target_1, x (where “x” is the number of the guard)
above line tells DromEd that the subject of objective 1 (which we just defined
as “kill a creature”) is the guard.
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.
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.”
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
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.
recognizes three different difficulty levels, with the following numbering
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
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:
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.”]
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:
difficulty, x (where “x” is the difficulty level you want to play at)
to play the tutorial mission on the “Normal” difficulty level, type in:
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
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
Helpful Commands and Tips
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.
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
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.
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.
“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.”
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.
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
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,
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.”
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
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
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
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.
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.
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.
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).
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.
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.