Spike14’s

Complete DROMED

Tutorial

 

Table of Contents

Click on a heading to go there

 

Starting Up

What’s All This?

Manipulation

General Know-How

Really Getting Started

Expanding

Flow Brushes

Garrett’s Inventory and Weapons

Inventory

We Continue

Resizing Objects

Sound

Saving

Doors

Switches and Buttons

Containers

Lights

AIs

Fnords

Useful Scripts

Useful Links

Readable Items

Advanced Book Techniques

Frobbing

MetaProperties

Making Objects Loot

Conversations

Ambient Sound

Garrett’s Comments

SoundTraps

Responses

The Infamous AIWatchObj Link

Making a Bow Object

Making a Quiver

Stairs

Elevators

Teleport Traps

Emit Traps

Sources and Receptrons

LockBoxes

Keys

LockPicks

Difficulty Levels

Brush Timing

Creating Outdoors Areas

Roombrushes

The GameSys and You

Schemas

Objectives

Objectives: QVars

Objectives: Invisible/Visible

Objectives: Text Descriptions

Roombrushes as Objectives

Making a Store

DarkLoader

Garrett’s Comments List

Troubleshooting

Afterword

Legal Stuff

 

Starting Up

 

Before you can do any DROMEDing of any kind, you must, obviously, download and install DROMED.

 

Please note that this tutorial deals with DROMED 1.32, not DedX or DROMED 2, although most of the methods mentioned here could most likely be carried over into the aforementioned programs.

 

Note: My tutorial aspires to cover EVERY aspect of DROMED 1.32.  Even though most of the methods mentioned here could be crossed-over, this tutorial certainly doesn’t cover all the features that are available to Thief 2.

 

You can download DROMED from http://www.thief-thecircle.com.

 

Now, open the ZIP archive which contains DROMED, and unzip all the files to your “Thief” directory.  You will be asked about overwriting, when the first on pops up, hit “Yes to all”, once this is done, go into your “Thief” directory, find “DROMED.exe”, right-click on it, and hit “Create Shortcut”.  Now cut this shortcut, and place it wherever you want, start menu, desktop…

 

There!  Now, there are a couple of essentials you should download, these can be found at DROMED Central (http://www.thief-thecircle.com/dromed/) under “Tools” or “Essentials”.

 

These essentials are:

 

KoMaG’s custom menus for DROMED 1, Thief Objective Wizard, Thief Book Wizard, Thief Text File Wizard, and Thief Mission Zipper.  Download them all, and install them as per their readmes.

 

There, now, start-up DROMED, and get ready to create some levels!

 

What’s all this?

 

Okay, do NOT PANIC!  DROMED is an extremely simple editor, but looks daunting.  Mainly because of the blacks and purples, rather than the blues and grays we’re used to!

 

Okay, you’ll see that we have a box down in the lower-right-hand corner.  That’s the “command box”.  You type commands there, we’ll use only a few commands, but they’re crucial!

 

You’ll also see, in the middle of the screen, four boxes, labeled “right”, “3D”, “Top”, and “Front”.  Okay, the top view is the one you’ll be using most, it’s known as the “Plan view” by most DROMEDers.  You’ll see in the three 2D boxes (Front, Top, and Right), that there’s a box which occupies 4x4x4 grid squares.  Okay.  This is a good time to tell you exactly what this box is…it’s a “brush”.

 

A brush is anything in the DROMED (or Thief) world which is created and manipulated!  There are many different types of brushes, the basic ones are:

 

TERRAIN:

 

-Fill Air: Fills encompassed space with air.

-Fill Solid: Fills encompassed space with solid.

-Fill Water: Fills encompassed space with water.

-Flood: Turns all air in encompassed space into water.

-Solid-Water: Turns all solid in encompassed space into water.

-Air-Solid: Turns all air in encompassed space into solid.

-Solid-air: Turns all solid in encompassed space into air.

-Evaporate: Turns all water in encompassed space into air.

 

OBJECT:

 

-Physical: Normal objects.

-Lights: Objects that give off light.

-Fnords: Invisible objects that create effects.

-SFX: Visible particle effects.

-Sound: Sounds (not usually created, but they are referred to via links quite often).

 

ROOM:

 

-Default: Ordinary roombrush (allows for sound propagation).

-Other: Roombrushes you create to create effects, such as ControlDevice links, or automaps.

 

AREA:

 

Area: Allows for manipulation of individual areas within area brushes.  Extremely useful for complex levels.  Surround an area and hit “Me Only” to see only the brushes contained within that area brush!

 

FLOW:

 

Flow: Allows for the precise manipulation of water (eg: Water that flows, water that is lava, green or blue).  See “Flow Brushes” for more info.

 

These brushes can be created by clicking on the buttons in the lower-center of the screen, labeled according to the type.  In order to create the different types of TERRAIN brushes, when you click on “Brush” (Terrain), use the arrows to the left and right of “OP” to change the brushes operation…this can be done by selecting an already created brush, or by setting this before creation!

 

The type of OBJECT to be created by an OBJECT brush can be changed by hitting EDITORS-OBJECT HIERARCHY, then selecting a type of object (archetype) and hitting “Create”, now drag to create this type of object!

 

MANIPULATION

 

Okay, we now understand WHAT we see, but, once we’ve created it, how do we move it?  Okay, here goes.

 

You can move brushes many ways.  The most precise being X,Y,Z,W,D,H,H,P,B.

 

These are the values you see on the lower-left of your screen…we’ll work right to left, top to bottom explaining these values!

 

X – The brush’s current X-axis co-ordinates (should NEVER BE ZERO!  THIS IS CRUCIAL!)

Y – The brush’s current Y-axis co-ordinates (should NEVER BE ZERO!  THIS IS CRUCIAL!)

Z – The brush’s current Z-axis co-ordinates (should NEVER BE ZERO!  THIS IS CRUCIAL!)

H – The brush’s current heading in degrees

P – The brush’s current pitch in degrees

B – The brush’s current bank in degrees

W – The brush’s current width in approximate feet (should NEVER EXCEED 250!)

D – The brush’s current depth in approximate feet (should NEVER EXCEED 250!)

H – The brush’s current height in approximate feet (should NEVER EXCEED 250!)

 

There!  Now, you’ll notice that above all this, there is an indicator that reads: Grid Size: 16.  Okay, this is your grid size, which denotes snap size.  Try not to work below 11, and don’t work above 16, after that it gets too big!

 

Okay, here are your Number-Grid-Snap sizes.  Number is the number size of the grid…16 for example, grid is the size of the visible grids, and snap is the smallest dimension you can have with that snap size, 11-16 are provided:

 

Number               Grid                      Snap

 

16                       4                           8

15                       2                           4

14                       1                           2

13                       0.5                        1

12                       0.25                      0.5

11                       0.125                    0.25

 

As you can see, you’ll rarely need lower than 11.  And remember that object-type brushes DO NOT SNAP!

And never turn snap off, if you do, you’ll get tons of errors because the lines aren’t snapped!

 

Okay, now you’ve made so many cubes that you’re bored of cubes, and you want to make different shapes!

 

So, let’s create more shapes!  Go to Shapes, and click on a shape, now you can create that shape!

 

Here are the shapes supported by the DARK ENGINE:

 

Cube

Cylinder

Wedge

Decahedron (10 sided geometric shape)

Pyramid

 

Okay, so you’ve tried creating a cylinder, but ended up with a prism rotated 45 degrees.  That’s just not right!  So, with “cylinder” shape selected, hit Shapes-Sides in Shape, and type “10”, now drag to create!  There, a 10-sided cylinder.

 

Tip: Don’t have more than 10-sides in your cylinders…if you have more than that, the DARK ENGINE spends too much time processing the sides, and you get slowdowns.  Think about the people with slow PCs.

 

Okay, so, you now want to move your brushes, or manually resize them (imagine THAT!).  Here are the DROMED hotkeys:

 

Shift – Hold and drag to move a brush

Ctrl – Hold and drag to resize a brush

Alt – Hold and move to rotate a brush

 

W – Move your camera (the little purple thing) forward

X – Move your camera backwards

A – Rotate your camera left (the purple line indicates where you’re facing)

D – Rotate your camera right

R – Look up

V – Look down

F – Center view

1 – Bank left

3 – Bank right

2 – Center banking

Q – Strafe left

R – Strafe Right

Z – Strafe Up

C – Strafe Down

Comma – Select next brush face

Period – Select previous brush face

Right Click – Bring up the menu (when over one of the views), allows you to teleport camera, hide the grid, etc.

Enter/Return – Implement a typed command

- - Zoom all views (except 3D) out.

+ - Zoom all views (except 3D) in.  (Do not use SHIFT to activate this command)

Delete – Deletes the selected brush.

 

There, those are the hotkeys you’ll be using.

 

GENERAL KNOW-HOW

 

Okay.  First, let’s tackle the little problem of realizing the textures!

 

If you look to the center-bottom of your DROMED window, you’ll see a picture of this funky texture called: “Jorge”.  Now, if you hit Alt+T, you’ll bring up the “Texture Palette”, which is where all the loaded textures are kept.

 

When the palette appears, there will be one texture: “Jorge”, and four buttons: “Sky”, “Put on Brush”, “Remove from Level”, and “Done”.  Let’s see what each of these five buttons does.

 

Jorge – This is a texture, click this and click “Put on Brush” to put the texture on the selected brush face.

Sky – This is the sky texture.

Put on Brush – This button puts the selected texture on the selected brush face.

Remove from Level – Remove the selected texture from your level.

Done – Closes the palette.

 

Okay, now we need more textures!  Click in the command window and type: “add_family core” (no quotes), then hit ENTER.  Now at the bottom of your screen it should say: “Family Loaded”.  Now hit Alt-T and you’ll see that tons more textures are available!

 

Now, it’s good to know the command to load a texture family, which is “add_family XXX”, but it’s easier to use KoMaG’s custom menus to our advantage.  Click “Textures 1” and hit “Rescore”.  This will load the texture family “Rescore” into the palette.  Now, if you don’t like a texture family, and want to get rid of it, type “remove_family XXX” into the command window and hit ENTER.

 

Now, let’s say you’ve loaded two or three families, but you’ve only used a couple textures from each.  Now, you’re palette is nearly full, and you need more textures!  Oh no!  What’ll you DO!

 

Merely type the following in the command window and hit ENTER: “compress_family all”.  There, now if you open your palette, only the textures used in the level will be there!  Feel free to load another family!

 

Now, there’s something VERY IMPORTANT that we must do before we go any further.  Our level won’t work properly if we don’t load the scripts!  So, type (in the command window): “script_load convict” and hit ENTER.  At the bottom of your screen you should see: “Module Loaded”.  We’ve now loaded all the scripts Thief uses into your level.  There, now we’re free to go on!

 

Note: GayleSaver’s Custom Scripts are not covered by this tutorial.

 

Really Getting Started

 

Okay, now we’ve learned hotkeys, learned about textures and objects, brushes also, we’ve also covered creating an manipulating, but how do we actually make a level?  Okay, let’s go!

 

First, there’s a command you should know about.  Until you add light sources, you’ll want to completely illuminate your terrain brushes so you can look at them until you get around to light sourcing, so, type this into the command window and hit ENTER: “light_bright”.

 

Okay, now we want to get a look around us.  Right-click on the 3D window and hold the right mouse button down, now drag the mouse pointer down to: “Solid World”, and release.

 

Don’t scream and yell if noting happens.  Tap “W” once so you move (and activate light_bright), now, nothing will happen (in the 3D box, at least).

 

Now go up to Tools-Portalize.  Portalizing calculates all the brushes. While objects and changes to objects appear in the world instantly, in order for changes to brushes to appear (texturing excluded), you must portalize.  That’s what we’re doing!

 

Remember that the more brushes you have, the longer portalizing takes!  Since we only have the default brush, a 16x16x16 Jorge brush, this shouldn’t take very long.

 

Once portalizing is done, you’re 3D view should light up, and show a 16x16x16 expanse of air textured with Jorge.  You can move around if you like, but it’s not like there’s much to see!

 

Now, why don’t we do something cool to show off our texturing prowess?  Okay, look down to the “Face” indicator, it should say “Default”, which means all the faces that HAVEN’T been set to a different texture.  (You can set a face, say “Top” back to default by selecting it and typing “-1” in the texture box (remember that you don’t include the quotes).)  Okay, since we have the core texture family loaded, we should have some options to choose from.

 

Hit Alt-T and select a texture that looks outdoorsy.  Hit “Put on Brush” and “Done”.  There!  You’re room has magically been transformed!

 

Now, I said earlier that this is going to be outdoorsy.  So, it needs a sky!  Hit comma until the “Face” indicator reads “Top”.  Then hit Alt-T, select “Sky”, hit “Put on Brush”, and hit “Done” or Alt-T to close the palette!

 

There!  A perfectly good outdoor area…but, it’s a bit small!

 

Now, before we go any further, we need to get this default brush AWAY from the incriminating 0,0,0 world co-ordinates (I’m sure I mentioned this earlier).  I good value is 500,500,500, so, implement this!

 

Now, zoom out until you can see your brush, then teleport into it on all 3 2D views.  Now let’s make this brush bigger!  A courtyard should be HUGE!  Make the brush 32x32x32.  There, now portalize!

 

Okay.  Now, you’re wondering, “How does Garrett know to start out in this brush?”

 

The answer, sorry to say, is HE DOESN’T.  If you don’t have a “StartingPoint”, Garrett will automatically start out at the co-ordinates 0,0,0, and won’t be physical!  He’ll be able to walk through objects, go unnoticed by the AI, it’ll be a catastrophe!  So, let’s rectify this little problem of ours!

 

Go into the “Object Hierarchy”, and hit the plus arrows beside the following things (all in levels beneath the last): Fnord.  Now select “Marker” (the words, not the plus sign), and hit “Create”.

 

There, object brush type is now Marker!

 

Drag to create the marker, then use SHIFT to position the newly created Marker in the center of your room.  Now, if you look down, you’ll see that the window in the center-bottom reads: “A Marker (1)”, or any other suitably low number, like “2”.  This number is the OBJECT NUMBER!  Object numbers are important for linking, and for you.  It’s recommended you don’t have more than 1800 objects.  That may sound like a lot, but it really isn’t.

 

Now, we don’t want our StartingPoint to be called “A Marker”.  No, that’s stupid!  So, hit the “Properties” button below the object’s name and number.  This should bring up a daunting dialog!

 

We’ll learn more about properties later.  For now, click on the top property, which is the object’s name and number, then hit “Edit”.  Type “StartingPoint” in the pop=up dialog, then hit Enter, and dismiss the properties box.

 

Now our StartingPoint is called just that!

 

Now, hit the “Links” button.  This should bring up an empty box.  That’s because our marker isn’t linked to anything!  But, we must link it to Garrett himself!

 

Hit “Add”.  Then fill out the ensuing box like this:

 

Flavour:               PlayerFactory

From:                  StartingPoint

To:                      Garrett

 

Now hit “OK”.

 

Let’s figure this out, okay?  The Flavour of a link is the type.  There are HUNDREDS of links!  Links make objects react to one another.  For example, a link makes the button’s at Ramirez’s trigger the alarm!  From is the object or archetype the link originates from, and To is the object or archetype the link goes to!

 

Now, let’s dismiss the links window for now.  We no longer require its services!

 

One last thing, click on the StartingPoint, and hit “Properties”.  Now Add-S-Scripts, in the first box type “VictoryCheck”, then hit enter, and hit “OK” to dismiss the properties box.

 

Okay.  Now, we’re going to let you go in-game.  Which means you’ll pop into game mode.  Please note that in order to get back into the editor you’ll have to hit Alt-E.  Also note that you’ll have NO WEAPONS OR INVENTORY ITEMS.  There will be NO SOUND!

 

Okay, go in-game, hit Alt-G!

 

There, wasn’t that enjoyable?  I’ll bet you wish there was a bit more to explore, don’t you?

 

Expanding

 

Okay, now why don’t we create some more rooms?  You know how!  Adjust the grid size accordingly, and make sure that you leave some space between rooms.  If you don’t, there will be no walls, and that will look VERY funky.

 

Okay, now you have several rooms!  Congratulations!  But…if you pop in-game, you can’t actually get into them…very weird!

 

Okay, let’s make doors.  First, we need some doorways.  So, set the grid size to “15” and create a brush that is 4x4x8.  This assumes, of course, that your walls are four feet thick.  If they’re bigger or smaller, adjust the brushes depth or width accordingly!

 

Now, position this brush level with the floor, and between two rooms.  Now texture it, and portalize!  There, a beautiful doorway…without a door?

 

Let’s create a door!  Go into Object Hierarchy-Physical-TerrainLike-Doors-SpinnyDoor-4x8 door-MetalDoor21, hit “Create” and then “OK”.

 

Now create this door, fiddle with its heading until it faces properly, and position it inside the doorway, so that the door’s left and right align with the brush’s left and right, and so that the door’s top and bottom align with the same faces in the brush.  And remember, if your door opens the wrong way, you can always turn it’s heading +180.

 

Okay, pop in-game.  The door works, no?  If the door disappears into the wall, just use SHIFT and move it a little away from the wall it disappeared into.  If you zoom in you can work with more precision…

 

There, you have a door!  Why don’t you try out different types of doors?  Do ahead, I can wait!

 

Okay, so you’re finished playing, and you want to know more?  Good thing I know more than just about doors and brushes!

 

Now, why don’t we lock a door?  Hmm?  We’ll give Garrett the key later, but now we want to make the door locked AND unlockable…yes, that’s right, you can make a door that can’t be unlocked…but don’t be cruel by hiding treasure behind those doors, use those to add realism while not taking up your time…most useful in city maps!

 

Okay, open up the doors properties, and Add-Engine Features-Locked.  Check the box and hit ENTER.

 

Now your door is locked, and unlockable…that was simple, wasn’t it?

 

Okay, let’s add the property to assign a key to a door!  Add-Engine Features-KeyDst, leave MasterBit alone…no one really quite knows what that does, and make RegionMask “1”, and make LockID a number of your choosing.

 

Remember that RegionMask should always be “1”, and that MasterBit should be left alone, unless you feel like having DROMED crash (it does this quite frequently, so save often!).

 

Flow Brushes

 

Normally, if you create a water brush, all you’ll see is Jorge.  That’s not very fun, is it?

 

So, let’s learn about FLOW BRUSHES!

 

First, create a little pool of water.

 

Good, now encompass the water with a flow brush.

 

An important note: Flow brushes and solid brushes may not share the same center point!

 

Okay, there are two bonuses to flow brushes: 1. You can make the water blue, green, or water!

 

Now, hit “Edit Group”.  In “Texture Name” type “bl”.  There, blue water!

 

Now, let’s say we want some current!  We use the boxes that read:

 

X change/sec

Y change/sec

Z change/sec

 

This is the current, in feet per second!  Z is up and down, down is a negative number, for X is north and south, north is a negative number (North is “up” on-screen), and Y is east and west, west is negative.

 

Garrett’s Inventory and Weapons

 

Okay.  Let’s create some weapons to give Garrett.  Find them in the hierarchy and create them around your marker.

 

Done?  Now, link them all to the StartingPoint with a “Contains” flavour link.

 

Now, if you gave Garrett arrows or inventory items, you should realize that there’s a better way to give Garrett 45 broadheads than by creating 45 separate objects and linking them all to the StartingPoint!

 

Quite simply, pull up the Properties window, and Add-Engine Features-Stack Count.  In the pop-up, type the number you want that object to be worth, and hit ENTER.  Then “OK” the properties window!  Remember, this can be done with ANYTHING.  Carrots, treasure, arrows, flash bombs…anything.

 

Note: On crystal arrows.  If you want Garrett to have a moss arrow to start off with, give him an EarthArrow object.  If you want him to pick up an moss arrow, create an EarthCrystal, found under Physical-Tulz-Crystals.  Simply put, Garrett should receive arrows to start off, should pick up crystals.  Doing it the other way around, or just giving crystals or arrows, causes…you guessed it!  Thief crashes.  So predictable!

 

That wasn’t so hard, was it?

 

Inventory

 

So, you don’t want keys to appear in your inventory as just: “Key”.  Well, here’s the solution.  But first, ask yourself:

 

Do you plan to include multi-language support?

 

If you answered:

 

Yes

 

Then go open strings.crf in your “Thief” directory, and extract objnames.str to “Thief\Strings\English\”

 

Now open up objnames.str in notepad, and, at the bottom of the list, type:

 

Name_XXX:”YYY”

 

Make XXX one word that describes your object, and that is not included anywhere else in as a title in objnames.str.  So, MyBasementKey would work.  YYY is what you want that object to be named.

 

Now, go back into your level, and open up the properties for the object you want to name.  Add-Inventory-Inventory Name, and type Name_XXX in the field that appears.

 

If you answered:

 

No

 

Then open up the object’s properties, and Add-Inventory-Inventory Name and type: Name:”XXX” where XXX is the name you want the object to be.

 

Now, say you’ve created a scroll (See “Readable Items”), and you want the player to be able to buy it…for 1000 loot.  If you don’t slap a price on it, it will appear as FREE!  No, Thieves don’t get free info.  So, Add-Inventory-Purchase Price, and type in the amount!

 

You’ve got this scroll, with a name and a price…but it’s got no description?  So, open up strings.crf and extract objdescs.str to “Thief\Strings\English\”

 

Now insert your description at the bottom, and Add-Inventory-Long Description.

 

For more info on creating stores, see “Creating a Store”.

 

We continue

 

Okay, now let’s create that key I promised you.  Create a Physical-Key-Key1.  Remember that of the keys, only the numbered keys are really keys.  The KeeperKey is that weird-looking key that unlocks the Lost City.

 

Now, create the key and link it to Garrett.

 

Now we have to assign it to the door we locked.  Open it’s properties and Add-Engine Features-KeySrc.  Fill out this dialog EXACTLY as you filled out the door’s KeyDst.

 

There!  Go in-game, and unlock the door!

 

Resizing objects

 

You may or may not have already tried resizing an object…and failed.  If you resize a Physical-Furniture-Tables-Table to, say 60x20x3, you can walk straight through most of the table!  Aah!

 

Don’t panic…like most things, there’s a quick solution!

 

Open up the table’s properties, and adjust Physical-Dimensions, and adjust these values to the appropriate setting!

 

Please note that DROMED treats all objects as squares…which is why they appear this way on-screen!

 

Sound

 

By now, you’re probably REALLY angry at me, because your level is MUTE.  That can be rectified!  Select each of the brushes in your level in turn and press Shift+Insert.  I little purple box should spring up to encompass each of them. Now, once you’re done, click on one of the them, and press “Compile”.  Now go to each roombrush in turn and (if you wish) assign it an EAX value.  The following are the EAX values assignable.  Remember that in order to assign an EAX value, press Ctrl+the function button numbered to the EAX setting.  For example, Small Dead is EAX setting “1”.  To assign it to a roombrush (once you’ve “compiled”), hit Ctrl+F1.

 

Here’s the chart:

 

1                         Small Dead

2                         Small Normal

3                         Small Live

4                         Large Dead

5                         Large Normal

6                         Large Live

7                         Dead Hallway

8                         Normal Hallway

9                         Live Hallway

10                       Tunnels

11                       Caverns

12                       Sewers

 

There!  Now you have an EAXed, roombrushed level!  Now, before we go in-game, we must process the room database and the AI Room Database!  Hit Tools-Build Room Database, and Tools-Build AI Room Database, then go in-game.

 

Isn’t the sound wonderful?  Enjoy it, and use it!

 

And remember, each time you change a setting on a roombrush, build the AI Room Database the Room Database.

 

Saving

 

Save often!  Create a directory inside your “Thief” directory named after your mission.  Every time you save, save under a different number.  Say your mission is called “BaffTaff” (which my mission is), save like this “BaffTaff_1.mis”, “BaffTaff_2.mis”, on and on…

 

Doors

 

How, you wonder, does something become a door?  Well, first it needs a script, then it needs a property.

 

Let’s explain it!

 

Create a BaffBanner.  It’s in the decorative archetype.  Now, let’s turn this simple BaffBanner into an opening-closing rotating door.

 

Open the properties, Add-S-Scripts.  Type “StdDoor” in the first box, then hit ENTER.

 

There, that’s your script.  If you want the door to be locked, and have lock sounds, add another script in the line below.  “LockSounds”, there, that wasn’t so hard!

 

Now, the property!  Add-Door-Rotating.

 

This box may look daunting, but we don’t want much out of it!  Door speed interests us, open angle and closed angle interest us, Clockwise?, and Axis interests us.

 

The clockwise? check box is fairly straightforward!  If you want the door to open clockwise, check it, if you want it to open counterclockwise, uncheck!

 

Now, axis.  The default is Z-axis, change it if it suits you!

 

The open angle is relative to the angle the door is at.  So if the door’s heading is 70, the open angle will be 70+it’s value.  If the door opens counterclockwise, the open angle should be 90, if it opens clockwise, the open angle should be 270.  Closed angle is usually 0.

 

Now, implement all this, and hit ENTER.

 

Now, there’s one more property we need.  We need to tell DROMED that we want the StdDoor script to activate when the banner’s frobbed.  So, Add-Engine Features-FrobInfo.  It’s all set to [None].  Change WorldAction to “Script” by checking “Script” in the drop-down menu.

 

There, go in-game and try it out…it works, doesn’t it?

 

Now, create a bed.  Now, make sure you don’t use the “Bed” archetype, because those crash DROMED.  Use “BedParts”, those work!

 

Now, add the “StdDoor” script, “LockSounds” if needed, and add the FrobInfo.  Now, here’s the uniqueness of a translating door!

 

Add-Door-Translating.  This dialog is similar, but not the same.  The axis’ work the same, but there’s no “Clockwise?”.  The closed value is usually 0, and the open value is how far along the chosen axis you want the object to slide before stopping.  If you want the object to move the opposite direction, use a negative value.

 

There, check it out!  Wonderful stuff, huh?

 

Switches and Buttons

 

Switches and Buttons are special objects that are used in many instances to create effects.  They emit ControlDevice signals.  Buttons emit one-type of ControlDevice signal, which is useful for activating one-way effects, such as alarms, or DestroyTraps.

 

Switches, however, use on/off ControlDevices, which is useful for things that must be turned on AND off.  Such as doors or lights.

 

ControlDevices are a complex subject, but I will try and make you well informed as I can.

 

The following are the scripts I know of the produce ControlDevice signals:

 

StdLever                                          On/Off (default on switches)

StdButton                                        Single Fire (default on buttons)

TrigSlain                                          Triggers a single fire when something is slain

TrigUnlock                                       Triggers on/off based on a lock’s state.

TrigDoorOpen     Triggers on/off when a door opens/closes.

TrigRoomPlayer  Triggers when a player enters a room.

 

You can also use alert responses and conversations to trigger ControlDevices, but that’s discussed later!  And remember, on/off ControlDevices can, in theory, operate single fire objects.  For example, a switch can trigger a DestroyTrap on it’s first frobbing, but after that will be useless.

 

Tip: If you find that you must frob a switch twice to get something to work, try linking the switch to an inverter, and an inverter to the target object(s).  An inverter reverses the sense of links passing through it.

 

Remember, if you’re using a switch to open/close a door, make the door’s WorldAction FrobInfo: “Script,Ignore”, so you can’t bypass the switch by frobbing the door directly…especially portcullises, a frobbable portcullis is cheesy, period!

 

Also remember that a switch’s state can be changed by ControlDevice linking to it.  For example, if you want to switches to stay in the same state as the other, always, link them back and forth to each other, then link one (only one) to the target object.  Chain as many switches as you like!

 

You can “reverse” a switch so that it sends an “Off” ControlDevice initially, and, so that it appears “down” rather than “up” by opening it’s properties, selecting: “JointsState”, hitting “Edit”, and changing AnimS from “[None]” to “On”.

 

Containers

 

Okay, now you can make switches, you can make doors and lock them, make Garrett, make sound.  But you can’t make those nifty footlockers!

 

Find them in Physical-Containers-FootLocker.  Create one, and create an object to go in it.

 

Now, link the FootLocker to the contained object with a “Contains” flavour link.  There!  It works!

 

You can turn anything into a container by adding the script “Container”, and changing the FrobInfo WorldAction to “Script”.

 

Lights

 

A light is anything that gives off light in Thief.  Please keep in mind that TDP and TG DO NOT support dynamic lighting, or moving light sources, as this is better known.  TMA, however, does support dynamic lighting.

 

There are many different types of lights.  There are torches, electric lights, and lightmushes.  Torches are the most common, followed by electric lights.  Torches are interesting in that they can be doused and re-lit, electric lights are interesting because they have the ability to be switched on/off, and the fact that they give off MUCH more light than a torch.

 

Please do remember to place light sources, because light_bright only illuminates brushes, and also makes for a very unconvincing game play, remember that Thief is about stealthiness, and shadows, so be sure there’s always away to sneak around!

 

There are two general types of lights, physical light sources, and hacklights.  Hacklights are invisible light sources, useful for illuminating tight spaces.  Hacklights can be found in the fnord category of the object hierarchy, while physical lights are under physical.

 

There are two different TYPES of lights.  Spotlights, and normal lights.  Spotlights give off a focused beam of light, and are useful for creating a lit room, with shadowed walls!  Normal lights give off light in all directions, and are useful for general rooms.

 

Okay, now, how to make a light switch able!  Create your electric light, and open it’s properties (please note that ANY light can be switched, however, switched torches are cheesy).  Now, look for an AnimLight property.  If it’s there, you’re safe, if it’s NOT, add it.

 

This is a good time to discuss the AnimLight menu.  Here you can adjust the light’s mode.  If you want your light to be off initially, set the mode to “Minimum Brightness”, and leave minimum brightness at “0”.  Now set a nice maximum brightness, and set the light’s radius.  There, you’re done!

 

Now Add-S-Scripts, and type “AnimLight” in the first available spot.  Now, if your light is on initially, you’ll also need an inverter.  Link the inverter to the light, and link a switch to the inverter.  There, you’re done!

 

Keep in mind the way to reverse the starting state of switches.  But remember, it looks better if the switch starts “up” and the lights are “on”.  We seem to associate switches that are “up” with “on” lights!

 

So, on the same token, if you have a light that’s off initially, reverse the switch and add an inverter…that way real life and Thief seem even more seamless!

 

Hit Tools-Light, and enjoy!

 

Tip: If you find that you can’t get an area shadowed by fiddling with the position of physical lights, don’t worry about it, simple create a SpotLightPoint HackLight, point it at the area you want shadowed, and set it’s “Light” property to a negative value!

 

To create Lost City lights, lights that turn on when you (or another creature) enters a room, and so that they turn off when the room once again because unoccupied, create your light, and take all the steps necessary to turn it into a switchable light.

 

Now, read “Roombrushes”.

 

Now, create a concrete roombrush, and add the scripts “TrigRoomPlayer” and “TrigRoomCreature”.  Now ControlDevice link that room to the light.

 

Remember that for each set of individually switching lights you MUST create a new concrete roombrush archetype!  However, if you want two roombrushes to control the same light, create two of the same archetype…the scripts and links will automatically be inherited!

 

To create a light that switches itself, make it switchable, and then Add-Engine Features-FrobInfo and set WorldAction to: “Script”.

 

AIs

 

Okay, here we are, AIs, the most difficult DROMED concept to master.  There are two processes that pertain to AIs, and these are:

 

Build Pathfinding Database                           Tells the AIs where to go and how to get there

Build AI Room Database                             Allows the AIs to “hear”.

 

Okay.  Keep in mind that AIs are objects just like everything else, only, they’re special, they move, and think!

 

This is a good time to mention an extremely useful command: “aiawareofplayer”.  Enter this in the command window and hit ENTER, and the AI will become completely oblivious to your presence.  They will, however, notice if you hit something (like a torch) with your sword or blackjack, and they’ll become alert when you shoot them!

 

Now, AI are just like other objects, you can place them and leave them…they appear without portalizing.

 

Now, don’t get scared when you create your first AI because it’s as wide as it is tall, if not wider. This is because an AI’s default posture is with it’s arms out.  This changes when you go in-game, however.

 

Okay.  You’ll notice that if you create a servant, and scare him, he won’t run away, he’ll search for you (and never find you).  That’s too cheesy for me to handle!

 

Create markers at suitable flee points in your levels, and name them “FleePointX”, where X is the number of the flee point.  Now Add-AI-Utility-Flee Point, and set a desirability level.  0 is totally undesirable, and 100 is ultimately desirable.  If you set multiple flee points of the same value, fleeing AI will either run to the closest one, or run back and forth between them.  (You can observe this sort of behaviour by scaring the talking servants in the bedroom in Bafford’s, after which you’ll find them dashing frantically around in the halls.)

 

Remember to build the pathfinding database after you create flee points, though.

 

Okay, you have AIs that flee, and that stand around waiting for you.  But what if you want patrolling AIs?  Read on!

 

Okay, so, you want patrols?  So, create an AI, now, open the hierarchy, and create: Fnord-Marker-TrolPt.

 

Create them where you want the AI to patrol.  Now, take in mind that an AI will patrol at the closest patrol point, so, to make sure he doesn’t go gallivanting off into some Godforsaken corner of the map, create the first TrolPt inside him!

 

Now, link forwards all the TrolPts with AIPatrol flavour links.  Remember to link the first back to the last, or the last back to the second to last…on and on.  This is a common mistake!

 

Now, we have to tell Mr. AI that he’s supposed to patrol.  So, pull up his properties, and Add-AI-AI Ability Settings-Patrol: Does Patrol.  Check the box, and hit “OK”.

 

Now, compute the pathfinding database, and go in-game…there, your AI patrols!

 

Okay, let’s tackle sleeping AI.  Now, you must understand that Thief comes with a MetaProperty called “M-SleepingServant”, which was used to make a servant sleep.  Never guards.  But since the advent of FMs in 1999, we’ve seen everyone and everything sleeping!

 

So, ignore the servant part.  Now, there’s one defect in this sleeping metaprop, and that’s that the sleeper doesn’t wake up.  The OMs used AIWatchObj links to wake the AIs up…which was a bit cheesier than the method I have in-mind!  So, we’re going to modify your Dark Gamesys.  Sound daunting?  Don’t worry, it isn’t.

 

Now, let’s dive into what, exactly your Dark Gamesys is.  It is dark.gam, the file that defines everything about how the game runs.  So, when you change your object hierarchy, you must save the changes to the gamesys, otherwise they’ll be lost!

 

So, first we have to change this M-SleepingServant metaprop, then we must save the gamesys.

 

Okay, open the object hierarchy, look up at the top, it says that you’re currently viewing archetypes.  Change that to MetaProperties.  Now browse until you find M-SleepingServant.  Select that and hit “Edit”.

 

Now, I must tell you what a MetaProperty is.  A MetaProperty is a collection of properties, which create a desired effect.  M-FrobInert, for example, causes an object to become unfrobbable, or incapable of producing effects.

 

The benefit to MetaProperties is the fact that they can be added or removed by a Response or Conversation, both covered later.

 

Now, Add-AI-Responses-Alert Response.

 

Set the alert level to 3, and the priority to “Very High”.

 

Now change the first action to Add/Remove MetaProperty, and then type the following in Arg 1, 2, and 3.

 

Arg1:                                                           Remove

Arg2:                                                           M-SleepingServant

Arg3:                                                          

 

Okay, this means that when the AI becomes alerted, he/she will remove the M-SleepingServant MetaProperty from himself/herself.  If I wanted to remove the MetaProperty from another object, I would have typed that object’s unique name (must not be a number) in Arg3, but since I was targeting the AI itself, there was no need!

 

Now, get out of the Obj Hierarchy, then go File>Save Gamesys, and save over “Thief\dark.gam”.

 

Okay, now the question is, how do I put a purse or key on an AI’s belt?  That’s simple!  First you create the purse/key, and modify the properties as necessary.  Then link the guard to the object via contains link.

 

But don’t close the links window yet!  Once you’ve hit “OK” to create the link, it appears in the link list.  Now, look under the “Data” column.  Right now this says “Generic Contents”.  Now, this is great if you want an AI to have a key so he can go through a locked door, but, not be steal able by the player, but, if you want it on his belt, that’s a no-no.  So, click on the link’s ID number, then hit the “Data” button.

 

This drop-down menu contains three choices: Hand, Belt, and Generic Contents.  “Hand” doesn’t appear to work, and right now we’re worried about the belt, so hit “Belt”, then “OK”.  There, it works!  Go in-game and check it out!

 

Okay, here’s THE BEST AI trick in the world…drunkenness!

 

Create the guard to be drunk, now, we have to edit his properties (you could make this a MetaProperty if you were going to use it enough).  First Add-MetaProperties…find M-AlertCapZero and click on it.

 

Now Add-Speech-Voice, change the default value to “drunk1”, and hit ENTER.

 

Now Add-AI-Responses-Threat Response, change the threat to “Raised Weapon”, and change the actions to:

 

Action00:                                                     Add/Remove MetaProperty

Arg1:                                                           Remove

Arg2:                                                           M-AlertCapZero

Arg3:                                                          

 

Action01:                                                     Play Sound/Motion

Arg1:                                                           tolevelthree

Arg2:

Arg3:

 

Okay, here’s what the above does.  When the guard sees a raised weapon, including the bow, he removes the M-AlertCapZero MetaProperty, and plays a sound that indicates he’s become alert.  The Add-Speech-Voice made it so that his voice was drunken, you know, with all the hiccups and that!

 

Okay, now Add-AI Core-Awareness Capacitor, and change the value of all three fields to ten.  I think this makes him harder to alert…but I’m not sure, I just tore these properties configurations straight from the well house guard in Bafford’s.

 

Now Add-Motions-ActorTagList, type: “WithSword0, Drunk0”, this changes the guard’s motion configurations so that he sways drunkenly, with his hands and sword flying about.  The “WithSword0” part just makes it so that his motions are consistent with that of someone carrying a lethal piece of heavy metal around in their hand.

 

Now Add-AI Core-AI, make that “Default”.  This just sets it up so he behaves in the default fashion.

 

This is all well, but it’s kind of cheesy.  We’ve got a drunk guard standing in the middle of no where.  Why don’t you put some bottles and goblets around his feet, hmm?  And how about a goblet in his hand…no, seriously!

 

First, create the goblet.  Now remember it’s number and open up the drunk guard’s links window.  Add a new link:

 

Flavour                                                        CreatureAttachement

From:                                                           Drunk Guard

To:                                                               Goblet

 

Now, once you’ve pressed “OK” to create the link, change it’s data to “Left Fingers”, that’s where the goblet will attach to the guard.  Now dismiss these windows, and pop in-game.  There!  A drunk guard swaying about madly, holding a goblet, who ignores you until either you alert some sober guards, or until you threaten him with a raised weapons!

 

Okay.  So now you can make drunk guards, make patrolling guards, and put things in a guard’s inventory.  But what if you want to make an archer fire, fire arrows?  Or, what if you want an AI on Garrett’s team?  What if you want a super-talkative guard?  Don’t worry, I’m not going to leave you to figure those things out on your own!

 

Okay, first, let’s tackle super-talkative guards.  This is an easy one!  Pull up the guard’s property and Add-AI-Attributes-Verbosity.  Set the value to whatever it pleases you, and hit “OK”.  Please note that AI-Attributes are a good way to make your guard behave a certain way.  For example, a guard who’s sloth is high will be lethargic, a guard with a high efficiency won’t miss any spots when he’s searching for you, and so on and so forth!

 

Now, an AI on Garrett’s team is also easy.  You Add-AI-AI Core-Team, change that to whatever you want, here’s the low-down on the teams:

 

Good                                                           On Garrett’s team, against all BadX

Neutral                                                        Neutral, isn’t hostile to anyone

Bad 1                                                          Bad, against Good and all other BadXs

Bad 2                                                          Bad, against Good and all other BadXs

Bad 3                                                          Bad, against Good and all other BadXs

Bad 4                                                          Bad, against Good and all other BadXs

Bad 5                                                          Bad, against Good and all other BadXs

Bad 6                                                          Bad, against Good and all other BadXs

 

There!  You can also make being non-hostile by Add-AI-Ability Settings-Combat: Non-Hostile.  There are many different settings, all of which are quite literal.

 

Now, to tackle archers.  Please note that this is the same for ALL OTHER RANGED AIs, for example you can change a high priests spell to an arrow if you want.

 

Create an archer, found under Physical-Creature-Animal-Humans-Guards-Bowman-, any old archer will do.

 

Now, open up his links.  You’ll see that by default he has the following links:

 

Flavour:                                                       Contains

From:                                                           The Archer

To:                                                               A Broadhead

Data:                                                            Generic Contents

 

Flavour:                                                       Culpable For

From:                                                           The Archer

To:                                                               A Broadhead

 

Flavour:                                                       AIProjectile

From:                                                           The Archer

To:                                                               A Broadhead

Data:                                                            High Arcing

 

We’re going to dissect these links.  The first one tells DROMED that the archer contains a broadhead.  The second tells DROMED that he CAN carry broadheads.  The third tells DROMED that when he fires, he fires a broadhead.

 

So, create a firearrow (not firecrystal!).  Then delete all the archer’s links, and re-do them, all to the fire arrow.  Change the data of the AIProjectile link for a flat trajectory, as this is how fire arrows fly!

 

Note: All CulpableFor links are done automatically by DROMED.

 

And last, how to make an AI start out dead!

 

Add-MetaProperties.  Now find and add “M-PosedCorpse”.

 

Or, make a zombie who’s dead, but activates when you walk over him: “M-ZombiePossum”, and “M-FrobInert”.

 

And there, you’re done!

 

Ever wondered why Thief didn’t ship with a Hammer Archer?

 

You’re wrong!  Thief DID ship with a Hammer Archer!  And here’s how you can activate him!

 

Create a bowman.

 

Now, open the bowman’s properties and Add>Shape>Model Name

 

Type “HamBow”

 

Press enter.

 

Now Add>Speech>Voice

 

Type: “hammrs”.

 

Press enter.

 

That’s all fine and dandy.  Now, let’s do some more AIProjectile work.

 

We’re going to make a farting burrick!  Oh, yeah!

 

First, we’ll have to edit the archetypes a little.  So, “Edit” Physical>Creature>Animal>Burrick>DefectiveBurrick.

 

You’ll see that the “DefectiveBurrick” has an “AIProjectile” link to a “fart”.

 

Click on that link and hit “Edit”.  A link window will come up.  Select the only link and hit “Data”.  Now adjust the launch point to: “Butt”.

 

Then save your gamesys (See “The gamesys and you”), and try him out!

 

Fnords

 

Fnords, they’re invisible, they aren’t physical, all they are, are tiny red boxes on your screen…WHAT DO THEY DO?

 

It’s pretty simple!  Below is listed the effects of the Fnords I know:

 

Marker                                                        A generic Fnord, used for gotos, conversations, and StartingPoints

Inverter                                                        Inverts the sense of a ControlDevice on/off link

RequireAllTrap                                            Requires all off the links to it to be in the same state before it sends a message of that state

RequireAnyTrap                                          Sends an “on” signal if any of the ControlDevices to it are “on”, and vice versa

RelayTrap                                                    Relays a ControlDevice

DestroyTrap                                                Destroys whatever it’s linked to via ControlDevice when it receives a ControlDevice

ReleaseTrap                                                 Releases whatever it “Contains” when it received a ControlDevice.

TrolPt                                                          A patrol point

TerrPt                                                          See “Elevators”

LookBackPt                                                The patrolling individual looks back here, operates like a TrolPt.

QVarTrap                                                    Changes mission objectives, see “Objectives”

VOTrap                                                       See “Garrett’s Comments”

EmitTrap                                                      Emits projectiles, Bonehoard and The Sword style!

EmitStreamTrap                                           Emits multiple projectiles.  See “EmitTraps”

BoundsTrigger                                             “On” while occupied (by player or creature) “Off” while unoccupied

SoundTrap                                                   See “SoundTraps”

 

There you have it!

 

Useful Scripts

 

Okay, here’s a list of useful scripts.  Some of them require special properties, most of which can be gleaned by taking a peek at the object drawn from.

 

StdDoor                                                      Makes the object a door, needs a “Door” property

StdElevator                                                  Makes the object an elevator, requires “Moving Terrain” property

StdLever                                                      Object transmits on/off ControlDevices, needs FrobInfo and “JointsState”

StdKey                                                        Makes a key a key, see the section: “Keys” for more info

LootSounds                                                 When picked up, the object produces loot sounds

LockSounds                                                The object produces lock sounds if locked

StdButton                                                    The object transmits single-state ControlDevices, needs FrobInfo

TrapDestroy                                                Turns the object into a DestroyTrap

TrapInverter                                                 Turns the object into an Inverter

TrapRequireAll                                            Turns the object into a RequireAllTrap

TrapRequireAny                                          Turns the object into a RequireAnyTrap

TrapQVar                                                    Turns the object into a QvarTrap

TrapRelease                                                 Turns the object into a ReleaseTrap

TrapTeleporter                                             Turns the object into a TeleportTrap

TrigUnlock                                                   Sends an “On” when unlocked, an “Off” when locked

TrigSlain                                                      Sends a single-state when the object is slain

TrigDoorOpen                                             Triggers “On” when open, “Off” when closed

TrigRoomPlayer                                           Place on concrete room, “On” when occupied by player, “Off” when not

TrigRoomCreature                                       Place on contrete room, “On” when occupied, “Off” when not

TrigAIAlert                                                  Triggers when an AI becomes alert

TrigWorldFocus                                           Triggers when an object becomes focused upon

TrapRelay                                                    Turns the object into a RelayTrap

TrapTweqEmit                                             Turns the object into an EmitTrap

EatFood                                                      Makes the object Eatable

StdScroll                                                      Makes the object a scroll, see “Readable Items”

StdBook                                                      Makes the object a book, see “Readable Items”

SecureDoor                                                 Guards become alert if they see the door not in it’s original state

CollisionStick                                               The object sticks to wooden surfaces

AnimLight                                                    See “Lights”

OnOffSounds                                               The object produces sounds when turned on/off

TrapConverse                                              Turns the object into a conversation, see “Conversations”

VictoryCheck                                              Must be placed on StartingPoint or the level cannot be completed

Extinguishable                                              The object’s light can be extinguished and re-lit, see “Sources and Receptrons”

LockPick                                                     This is the lockpick script, see “Lock Picks”

WelcomeRoom                                            See “Objectives”

Container                                                     Turns and object into a container.  See “Containers”

LoadoutCache                                             See “Making a Store”

 

There, there’s a lot, isn’t there?

 

Useful Links

 

Goodness…there’s links, Fnords, scripts!

 

ControlDevice                                              Creates effects…this one’s too broad!  See individual sections

Contains                                                      Causes one object to contain another

CulpableFor                                                 Makes an AI capable of containing something (automatic)

AIProjectile                                                 Causes an AI’s projectile to be whatever it’s linked to, must be in AI inventory

AIPatrol                                                       Link from TrolPt to TrolPt to form a patrol route

AIWatchObj                                                Eek!  See the section on this one!

Lock                                                            Link from something to a lockbox to lock the something

AIConversationActor                                   Link from conversation to actor, see “Conversations”

SoundDescription                                         Link from a VOTrap to a sound archetype, then the VO will play that sound

Weapon                                                       Makes the linked to object the AI’s weapon

Corpse                                                        Makes the linked to object the object’s weapon

FrobProxy                                                   A weird link…see the section on Frobbing

TerrPath                                                      See “Elevators”

TerrPathInit                                                  See “Elevators”

CreatureAttachement                                   Useful for attaching one creature to another creature/object

ParticleAttachement                                     Attaches objects and particle effects

 

Note: The links with tildes “~” infront of them do not concern the average DROMEDer, they are backwards links, and DROMED creates and manages them automatically.  For example, when you create the following link from your StartingPoint:

 

Flavour:                                                       Contains

From:                                                           StartingPoint

To:                                                               A Sword

 

DROMED automatically creates this one:

 

Flavour:                                                       ~Contains

From:                                                           A Sword

To:                                                               StartingPoint

 

Readable Items

 

Making an item readable is fairly easy.  There are three things that are of concern:

 

The script:                                                    StdBook or StdScroll

FrobInfo

Art

Text

 

Before you begin creating books, open up your “Thief” directory, and create a new folder, called “books”, under that folder, create “English”.  Now we’re ready to begin!

 

Let’s now explain how books work.  DROMED, when a book text is requested of it, searches the *.crfs and the “Books” folder for books of an identical name.  So, don’t go naming a book in your mission the same as a book from an OM.

 

Now, take note that all book files must be *.str, you can create them using NotePad.

 

So, pull up notepad.

 

Now, here’s the format for books, the pages start at “0” and work their way up, have as many pages as you want (although, remember, people aren’t going to read boring stuff forever, eventually they’ll dismiss it!):

 

page_0:”This is the first page…”

page_1:”This is the second page…”

page_2:”On, and on…”

 

Now, save this under “Books\English\Test.str”, inside your “Thief” directory, and restart DROMED (if it’s open), or start DROMED (if it’s closed), this is because if you create a book, then try and access it without restarting DROMED, DROMED won’t find the book, and will crash (of course)!

 

Now, he’s how things work.  You can have “Scrolls”, which are picked up and read from your inventory, or “Books” which are read in the world, and are stationary.  A “Scroll” can be a book object, and vice versa.  It’s just what you want to happen!  For example, a GoldPlaque is considered a “Book”, because it’s read in the world.  Here are the steps to create a “Scroll”:

 

Create an object (readable or not)

Remove the script: “StdBook” (if it’s there already)

Add the script: “StdScroll” (if it’s not in-place already)

Add FrobInfo: WorldAction: Move InvAction: Script

Add Book-Text, and make it “Test” (remember not to include complete directory or *.str)

Add Book-Art, and make it: “parch”, or “pbook”, you can make many more, just take a look in the books’ *.crf

 

Note: If you don’t want art, and want the text to be drawn onscreen, exclude the Book=Art property, but remember, only the first page will be drawn if you do it in this fashion!

 

Steps to create a “Book”:

 

Create an object (readable or not)

Remove the script: “StdScroll” (if it’s there already)

Add the script: “StdBook” (if it’s not in-place already)

Add FrobInfo: WorldAction: Script

Add Book-Text, and make it “Text”

Add Book-Art, and make it: “parch”, or “pbook”, or anything else fancy you’ve scrounged up!

 

There!  Objects you can read!

 

Advanced Book Techniques

 

Let’s say you want an object, that, when you pick up, displays the following text atop your screen: “This will be important later…much later.”

 

First, obviously, create the *.str file…you know how!  Make sure it’s only one page, though!

 

Now, create the object…say, the Horn of Quintus…yeah!

 

Now, go into it’s properties and change it’s FrobInfo.  Leave the defaults, but add the “Script” property to the WorldAction.

 

Add the following script: “StdButton”.

 

Now, create a plaque hidden someplace the player can’t get at it, and make sure that, when read, it displays the text previously specified atop your screen.

 

Now, select the Horn of Quintus, and add this link:

 

Flavour                                                        ControlDevice

From:                                                           Horn of Quintus

To:                                                               Plaque

 

Now, jump in-game and try it out…cool eh?

 

Frobbing

 

Okay, all through this tut I’ve been talking about “frobbing”.  You might have gone to the dictionary and been dismayed not to find it there.  But, yes, “frobbing” is a word, and is to some, an art!

 

Frobbing is the art of activating an object.  But technically, activating implies a world action.  Basically, in order to “activate” you have to be near something!

 

That’s not the case with frobbing.  That’s the beauty of it!  Frobbing is completely internal!  There’s no default action when an AI “frobs”, you have to manually prescribe it, meaning you can do all sorts of nifty stuff with frobbing, when the button being activated is hidden, perhaps in a BLUEROOM!

 

There’s one link that concerns frobbing…FrobProxy, FrobProxy links make it so, if you from the “From” object, the “To” object is frobbed.

 

Frobbing will be discussed more in-depth in the following sections: “Conversations”, “The Infamous AIWatchObj Link”, and “Responses”.

 

MetaProperties

 

You may be wondering about these “MetaProperties”.  Well, MetaProperties are collections of properties.  They are advantageous because they save time, in that you can add several properties at once, and their useful because most of them shipped with Thief, and can be used to produce effects that were used in the OMs.

 

Another good thing about MetaProperties, they can be added by AIWatchObj (see “The Infamous AIWatchObj Link) links, Responses (See “Responses”), and by Conversations (See “Conversations”).  Using the “Add/Remove MetaProperty” action.  But we won’t get into that now.  That’s covered by the section: “Conversations”.

 

Now, you want to create a new MetaProperty!  So, open the object hierarchy, and then, in the drop-down box at the top select “MetaProperties”.  Here are all the metaproperties currently in your gamesys (See “The Gamesys and You”).

 

Now browse through the archetypes until you find an archetype suitable to add your MetaProperty to!  Now click on the archetype, and hit “Add”.  Now type the name of your MetaProperty.  Then press “Enter”.  Now your new MetaProperty will appear.  Click on it, and press “Edit”, to add the appropriate properties to your MetaProperties.

 

Remember, if you modify and/or create new MetaProperties, you must save your gamesys!  See “The Gamesys and You”).

 

And here’s a list of useful MetaProperties:

 

M-AlertCapZero                                         The AI isn’t alerted unless nearby AIs are alerted.

M-GoodGuy                                                Makes the AI good.

M-BaseRamirez                                           Makes the selected AI Ramirez.

M-ServantWithTray                                     Makes a servant, into a servant with a tray.

M-PosedCorpse                                          Make an AI dead.

M-ZombiePossum                                       Makes a lying down Zombie that will activate when you walk over it.

M-CannonFodder                                        One shot kills.

M-CuttyCritter                                             Make an AI into cutty.

M-FrobInert                                                Sets FrobInfo to: “[None],[None],[None]”.

M-FrontGateGuard                                      The AI is non-hostile until alerted or threatened.

IsLoot                                                          See “Making Objects Loot”.

 

Tip: When making cities where the populace and guard’s shouldn’t be hostile unless attacked or alerted, or unless the player enters a door he shouldn’t, add the script “SecureDoor” on all restricted doors, then give all the AIs “M-FrontGateGuard”.

 

Making Objects Loot

 

First, select the object you want to be loot, and add the MetaProperty “IsLoot”.

 

Now Add>Dark Gamesys>Loot, and fill in the appropriate values.

 

Conversations

 

Okay, here we go, THE SINGLE MOST COMPLEX SUBJECT IN DROMED!  Yikes, you might be saying, I’d better turn this off…but don’t, and don’t skip it either.  Conversations can be used for more than talking, that’s what makes them so good!  You can add/remove MetaProperties, add/remove links, FROB, play motions and sounds, make AI go-to and wait!

 

If you ever hope to do ANYTHING cool with DROMED, you’d better get to know conversations, intimately!

 

First, what is a conversation?  A conversation is a marker (usually), with the script “TrapConverse”, it also has two other properties, but we’ll discuss those later!

 

You can have up to SIX actors in your conversation.  Remember, EVERY CONVERSATION MUST HAVE AN ACTOR, even if it doesn’t really use that actor…and EVERY ACTION MUST HAVE AN ACTOR, even if that actor isn’t involved in the least!  It’s another one of those crazy DROMED things.

 

So, make your marker, and add the script: “TrapConverse”.

 

Now link the marker to your actors:

 

Flavour:                                                       AIConversationActor

From:                                                           Conversation

To:                                                               Actor

Data:                                                            Actor# (CRUCIAL, must be defined)

 

There!  But we’re not doing much yet!  Firstly, the conversation doesn’t know what to do with itself, and it doesn’t know when to start!  Wow, so much left to explain (and read).

 

Now, let’s add the necessary properties.  First Add-AI-Conversations-SaveConversation.

 

Check the box and hit “OK”.  Now Add-AI-Conversations-Converation.

 

A HUGE box will pop-up.  Be sure your screen resolution is at least 1024x768 before attempting.  Just dismiss all the boxes with “OK” in succession, don’t even worry about the contents!

 

Now, the conversation has the properties (even if the values of the main conversation haven’t been filled out).  Now, we need to manipulate the actors.  If this is going to be a “conversation” per say, you’ll need to assign the actors the correct voices.

 

Let’s make the conversation between two servants…here are the lines:

 

MaleServant:                                                “Do you ever feel like there’s someone…watching you?”

 

FemaleServant:                                            “The sir you mean?”

 

MaleServant:                                                “No, I mean more like spirits…or someone hiding, watching you!”

 

FemaleServant:                                            “I think it’s just the house, the shadows, they…get to you.”

 

That conversation is sv_c09, there are four lines, LineNo 1, LineNo2, LineNo3, and LineNo4.

 

Now, there’s something you must understand about conversations.  Each conversation and/or sound in the game is specified by a set of data files called “Schemas”.  They assign sounds to voices, and assign sound files to lines, and assign lines to sound files.

 

But, before you can edit the schemas to make your own conversations, you need the actual set of schema files!  There are two, schemas.zip, and schemas_update.zip.  Both are available HERE.

 

We’ll get into schema editing/creating later, for now, let’s worry about re-creating an existing conversation…here’s what you’ll need:

 

A MaleServant

A FelmaleServant

A RelayTrap

A DestroyTrap

2 Markers outfitted to be conversations

A Button

 

So, you’ve created all these…what do you do?  Well, for convenience’s sake, name one conversation “ServConv”, and the other “AbortServConv”.

 

Now, you remember those huge window that popped up when you went: Add-AI-Converstions-Conversation.

 

That was the conversation box!  The first box was filled with options, as detailed below:

 

00

01

02

03

04

05

06

07

08

09

10

Abort Conditions

Abort Steps

 

Let’s dissect this.  You remember earlier, when we created an “Alert Response”.  Well, alert responses operate on the same principle as conversations.  Only a conversation is much, much bigger.

 

The numbers are each a “Step”.  There are eleven steps.  Each step has a certain number of actions…six or seven.  So, what’s the difference between a “Step” and an “Action”.

 

Here’s the difference…all the actions within a step occur SIMULATANEOUSLY!  So, if you want someone to talk, and make a motion at the same time, put both those in the same step.  If you want someone to talk, then someone else to talk AFTER, put one line in one step, the second in the second.

 

Basically, the next step begins when all the actions in the previous step are COMPLETE.  All the actions commence at the same time!

 

Okay, feel free to pull up “ServConv”, and “Edit” the conversation.  Choose “00”, and hit okay.  Remember that in DROMED, most lists start at zero, rather than one!

 

Now, the HUGE box pops-up.  If you’re using 1024x768, the bottom and top of the box are barely visible!  Now, you’ll notice that each “Action” is made up of an “Action”, a number, like “00”, three “Arg”s, and an actor.  These “Arg”s are the arguments you give each “Action”, so it knows what each action is supposed to do.  For example, click on the drop-down box next to “Action 00”, and note all the available actions.  Most of those actions do NOTHING without arguments.  For example, the “Goto Object” action needs an argument to tell it what object to go to.  The “Add/Remove MetaProperty” action needs two or three arguments!  The “Play Sound/Motion” action can have one, two, or three arguments.  The useful actions are listed below:

 

Add/Remove MetaProperty

 

Arg1:                                                           Add or Remove?

Arg2:                                                           MetaProperty name?

Arg3:                                                           Leave blank for self, otherwise, specify?

 

Goto Object

 

Arg1:                                                           What object?

Arg2:                                                           Blank for normal speed, for fast type “Very Fast”

Arg3:

 

Face:

 

Arg1:

Arg2:                                                           What object?

Arg3:

 

Play Sound/Motion

 

Arg1:                                                           Sound?  Or Conversation?  If any

Arg2:                                                           If conversation, what line?

Arg3:                                                           Motion?  If any

 

Add Link

 

Arg1:                                                           Flavour

Arg2:                                                           To

Arg3:                                                           From

 

Remove Link

 

Arg1:                                                           Flavour

Arg2:                                                           To

Arg3:                                                           From

 

Wait

 

Arg1:                                                           How long?  In milliseconds (1000 equals one second)

Arg2:

Arg3:

 

There, now, to teach you all you need to know to get these arguments working.  Here are some good tips:

 

Garrett isn’t an object.  If you want an AI to face “Garrett”, type “Player” in the place of an object.

 

Remember that you can’t use object numbers in conversations, each object used must have a unique name!

 

And now, for the motions!  Remember that the motion database for Thief has not been cracked!  Therefore our choice of motions are limited to those used in conversations in the OMs (the missions that shipped with Thief)(don’t worry about the cryptic names):

 

Conversation 0, Quux 0                                                                            Cross arms behind back

Conversation 0, Baz 0                                                                               Jump and shake arms as if agitated

Conversation 0, Baz 0, Quux 0                                                                  Raise arms as if to say “I don’t know”

Conversation 0, Bar 0                                                                               Lean backwards as if surprised

Conversation 0, Bar 0, Quux 0                                                                  Cross arms in front

Conversation 0, Bar 0, Baz 0                                                                    Move arms as if conductor conducting music

Conversation 0, Foo 0                                                                              Raise left hand and nod as if in greeting

Conversation 0, Foo 0, Baz 0                                                                    Nod head as if in agreement

Conversation 0, Foo 0, Bar 0                                                                    Take a step forward with one foot, then back

Conversation 0, Foo 0, Bar 0, Baz 0                                                         Look right

Conversation 0, Quux 0, Foo 0                                                                 Cross arms

Conversation 0, Quux 0, Bar 0                                                                  Keep arms crossed

WorldFrob 0, AtWaist 0, BellPull 0                                                           The “Frob” action

WorldFrob 0, WithTray 0, AtWaist 0, BellPull 0                                       Servant with tray puts tray down

 

Now we’re REALLY going to set the conversation up, link from “ServConv” to each of your two servants with an “AIConversationActor” link, make sure the MaleServant is actor “1” and that the FemaleServant is actor “2”.

 

Next we need to worry about their voices, in order for this conversation to actually play, we need the MaleServant’s voice to be “normal1”, and the FemaleServants to be “normal2”, so, open their properties and Add-Speech-Voice, and set them to the appropriate values.

 

Last thing with the servants, make sure that they each have their own unique name!

 

Now we’re going to setup the conversations start.  The button will start the conversation, but we don’t want the conversation repeating EVERY TIME you press the button, so, create the following links:

 

Flavour:                                                      ControlDevice

From:                                                         Button

To:                                                             RelayTrap

 

Flavour:                                                      ControlDevice

From:                                                         RelayTrap

To:                                                             ServConv

 

Flavour:                                                      ControlDevice

From:                                                         RelayTrap

To:                                                             DestroyTrap

 

Flavour:                                                      ControlDevice

From:                                                         DestroyTrap

To:                                                             RelayTrap

 

Dissecting time.  What this does, is, when the button’s pressed, it sends a ControlDevice signal to the RelayTrap.  The RelayTrap relays that signal to the conversation (which starts it), and to the DestroyTrap.

 

Remember what I said about the DestroyTrap fnord, when triggered, it destroys whatever it’s ControlDevice linked to, so when it receives the signal from the RelayTrap, it destroys the RelayTrap, making it impossible for the conversation to start over once it’s started once!  This is the same system that was used in ASSASSINS! to make sure the alarm could only be triggered once.  Only then, since there were so many buttons, they all would have been linked to a RequireAnyTrap, which would have been linked to the RelayTrap…same principle, though!

 

Now we have a conversation that has actors, and that knows when to start…but it has no actions!  Eek!  Let’s fix that!

 

Input the following variables into the steps and actions specified

 

STEP 00:

 

Actor:                                                         1

Action 00:                                                  Play Sound/Motion

Arg1:                                                          sv_c09

Arg2:                                                          LineNo 1

Arg3:

 

Actor:                                                         1

Action 01                                                   Play Sound/Motion

Arg1:

Arg2:

Arg3:                                                          Choose one!

 

STEP 01:

 

Actor:                                                         2

Action 00:                                                  Play Sound/Motion

Arg1:                                                          sv_c09

Arg2:                                                          LineNo 2

Arg3:

 

Actor:                                                         2

Action 01:                                                  Play Sound/Motion

Arg1:

Arg2:

Arg3:                                                          Choose one!

 

Step 02:

 

Actor:                                                         1

Action 00:                                                  Play Sound/Motion

Arg1:                                                          sv_c09

Arg2:                                                          LineNo 3

Arg3:

 

Actor:                                                         1

Action 01:                                                  Play Sound/Motion

Arg1:

Arg2:

Arg3:                                                          Choose one!

 

Step 03

 

Actor:                                                         2

Action 00:                                                  Play Sound/Motion

Arg1:                                                          sv_c09

Arg2:                                                          LineNo 4

Arg3:

 

Actor:                                                         2

Action 01:                                                  Play Sound/Motion

Arg1:

Arg2:

Arg3:                                                          Choose one!

 

Okay, go in-game and try it out.  You’ll see that it works, but since the AI are aware, they run off to a flee point, but their lines still go on?  That’s so cheesy!  Let’s fix it!

 

Now, open up the conversation, and in the “Steps” dialog, choose “Abort Conditions”.  Set the abort level to “3”, and the priority to “Absolute”.

 

This means that when either of the servants reaches alert level 3, he’ll abort the conversation without delay!

 

Okay, so, what if you use a gas arrow…they won’t be alerted if they don’t see you…oh no!  They’re lying on the floor, still talking?  That’s BAD!

 

Hence the “AbortServConv” conversation.  We’re going to add some receptrons!  For more info on both receptrons and their opposite, sources, see the section: “Sources and Receptrons”.

 

Before we do anything, create a button that the player can’t get to (blueroom) and link it to “AbortServConv”.  Then do the AIConversationActor links.  Now, slap a motion in there for both servants…don’t worry, if they’re knocked out, they won’t perform the motion!  Now, make sure the button has a unique name…how about “ServAbortButton”.

 

Now, go into the first servant’s properties and Add-Act/React-Receptrons, a dialog that looks like a link box should come up.  Hit “Add”.

 

This box is indeed VERY confusing.  But don’t worry, I’ll walk you through what we must do!

 

First, set the stimulus to “KnockOut”.  Then check the “No Max Intensity” box, and leave the “Min Intensity” at 0.  Now, set the action to “Frob Object” (yes, AI can frob while their knocked out), and set the object to be frobbed to “ServAbortButton”.  Now click okay, and dismiss both boxes.  Don’t worry if the receptrons box pops back up, it’s a bug, just dismiss it again!

 

Do the same thing for the other servant.

 

The principle here is that when an AI is in the midst of a conversation, that conversation can be overridden by the AI being told to participate in ANOTHER conversation…meaning that we can terminate this conversation by starting ANOTHER conversation that does absolutely NOTHING!

 

And remember that conversations are good for more than just talking!  And remember NOT TO HAVE ABORT CONDITIONS OR ABORTING IN ANY WAY on effect conversations…that is, one’s that DON’T make the AI talk.  If these conversations abort halfway through, weird things could happen!

 

Ambient Sound

 

Ambient sound is exceptional!  It adds depth!

 

To insert an ambient sound, create a marker, and Add-A-AmbientHacked.

 

The following options are in this dialog.  Here’s what they do:

 

Radius                                                                                    The radius of the sound (feet).

 

Override Volume                                                                    Volume, -1 is loudest, lower than that is softer.

 

Schema Name                                                                        The name of the sound.  See Sounds-Schemas in the obj hierarchy.

 

Aux Schemas 1 & 2                                                                More schemas to play.

 

Flags, see below:

 

Environmental Sound                                                               Turns the sound into an environmental sound.

 

DestroyObj                                                                             Destroys the object upon completion of the ambient sound.

 

RemoveProp                                                                           Removes A-AmbientHacked at the completion of the ambient sound.

 

TurnedOff                                                                               Mutes the sound

 

DoAutoOff                                                                             Adds “TurnedOff” at the completion of the sound.

 

NoSharpCurve                                                                       The sound fades gradually as you approach and walk away from it.

 

You can fiddle with sounds by opening their properties in Sounds-Schemas.

 

To see how you can create schemas of your own, see “Schemas”.

 

Garrett’s Comments

 

Okay, you want Garrett to talk.  Now, Garrett can’t be an actor, per say, because he’s not really an object.  Sure, you can have AIs face him (Face object “Player”), but he can’t be an actor!  Or what happens if you just want him to say something cool, like…”Inside at last.”

 

Is that so much to ask?

 

No.  I’ll explain.

 

First, create a VOTrap…anywhere.  VOTraps aren’t like normal sounds.  They don’t fade as you get farther away.  They’re omnipresent, because their not really sounds…the AI can’t “hear” them, like they can hear your footsteps!

 

To learn more about creating custom comments, see “Schemas”.

 

Now.  Since Garrett can’t actually speak in a conversation…what do we do?  Well, you read “Schemas” and create the lines you want as if they’re comments!  Now, in a blueroom create as many VOTraps as you’ll need (one for every line), a button for each, linked to them all, and an AI to talk to.

 

Now give the AI his lines, and have him frob a button when Garrett’s supposed to talk.  Now, the problem is, that the AI won’t wait for Garrett to finish talking!  So, you’ll have to listen to each of Garrett’s comments, and see how long they are, then, after the AI frobs the button, have him “Wait” for the correct amount of time before moving on.

 

Okay, so you’ve created this setup.  But nothing happens, the AI talks, sure, but that’s old hat.  We want GARRETT to talk.

 

So, we must find the name of the comment we want Garrett to say.  Say, “garm1101”.  That’s valid!

 

Now, in order to have a VOTrap play a sound, you must link a VOTrap to the object archetype of the sound.  So, open up the VOTrap’s properties, and Add a “SoundDescription” link from it, to the archetype.

 

Now test it out!  There, Garrett speaks!

 

SoundTraps

 

It is recommended you read “Garrett’s Comments” before reading this.

 

So, you love VOTraps.  But you don’t like the fact they only play once.  Well, that’s the nature of VOs.  Wouldn’t it be comical if Garrett said: “Inside at last!” every time you walked into the storage room at Baffords?  But still, VOs have many different uses!  Or perhaps Garrett SHOULD say the same comment over and over!

 

SoundTraps are your saviour!  They work the same way as VOs, except they don’t delete themselves!

 

Responses

 

A response is an AI’s way of dealing with something they see.  For example, if you want an AI to push a button when it becomes alert, you’d setup the Alert Response like a conversation telling the AI to push the button.

 

There are four different responses:

 

Alert Response                                           What an AI does when the player alerts it.

 

Threat Response                                         How the AI responds to a certain threat.

 

Body Response                                          What the AI does when it sees a knockedout or dead AI.

 

Sense Combat Response                            What the AI does when it senses combat nearby.

 

The Infamous AIWatchObj Link

 

AIWatchObj is one of the most useful links ever.  It tells an AI to watch a radius and height around a certain something for a certain intrusion, self- or player-.  The rest of it’s properties are pretty much self-explanatory, and it’s actions run much like a conversation’s!

 

Making a Bow Object

 

So, you’re just clipping along through your FM.  But, you’ve created an armory, and you want a few bows lying around along with your swords.

 

You’ve searched the obj hierarchy, but haven’t found one.

 

So, let’s create one!

 

Create a Physical>Debris>Rubble>broke_sword

 

Now, open up it’s properties, and Add>Shape>Model Name.

 

Type: “bow”.

 

Hit enter.

 

And you’re done!

 

Making a Quiver

 

So, you want a quiver?

 

Okay, let’s do that!  Create Physical>Container>Footlocker.

 

Now open the footlocker’s properties and Add>Shape>Model Name, change it to: “quiver2”.

 

Now add a “Contains” link FROM the quiver TO some arrows!

 

DONE!

 

Try using “CreatureAttachement” (See “Useful Links”) link to attack the new quiver to an archer’s back!

 

Stairs

 

Stairs are a must have in Thief, but they’re exceptionally hard to make.  You must turn the grid size down to at most 13, then make each individual stair from a solid brush.

 

That’s just for a square staircase!  Circular staircases actually require some mathematical skill!

 

Don’t worry, I’ll show you the formulae:

 

The basic principles are:

 

A circle is 360 degress around

 

The stairs are 1 foot high and 1 foot deep (as big as they can go for AI)

 

The circumference of a circle is (Rx2)xpi

 

Okay, make your air brush that you want your stairs inside…then make a solid core (if you want, not mandatory).

 

Now, here’s the formulae:

 

Variables:

 

SH = Stair Height

SD = Stair Depth

R = Radius

C = Circumference

SW = Stair Width

D = Diameter

P = Pi, or 3.14, which is the ratio of a circle’s diameter to its circumference

SC = Numbers of stairs in a circle (unknown at first)

SA = Degrees each stair should be rotated from the last (unknown at first)

IC = Stairs in circle

RH = Height of one full rotation of stairs

 

Formulae:

 

D/2 = R

 

(R*2)*P = C

 

360/C = SA

 

360/SA =  IC

 

IC = RH

 

So, what do we do with all this?  First, we create a block of solid who’s width is equal to the circle’s radius, or diameter divided by two.  Then we rotate it the number of degrees specified by SA, then we line it up with the center, and rotate it another SA degrees, and so one until we reach the desired height.  The number of feet the stairs will rise in one full rotation is equal to RH.  Here’s the formula if you’re stairs AREN’T 1 foot high and 1 foot deep:

 

D/2 = R

 

(R*2)*P = C

 

C*SD = X

 

360/X = SA

 

360*SA = IC

 

IC*SH = RH

 

Same instructions as above.

 

Elevators

 

Okay, before you read this section, please read “Conversations” and “The Infamous AIWatchObj Link”.

 

First, create an elevator-type setting.

 

Now, create a “TerrPt” at the EXACT location you want your elevator to start out.  And one and the EXACT location you want it to end up at.

 

Now link the two “TerrPt”s back and forth with “TerrPath” links.

 

Now create two buttons at the bottom, two at the top.  One we’ll call the elevator, the other will send it to the other floor.

 

Link them with ControlDevices to the appropriate TerrPts (the ones you want the elevator to end up at when the button is frobbed.

 

Now create the elevator, and link it to the TerrPt you want it to start out at with a “TerrPathInit” link.

 

There!  You’re done!

 

TeleportTraps

 

Like frobbing, teleporting is an art.  Use TeleportTraps if you want your level to be dynamic, rather than static.

 

Let’s say you want a mission where you have to kill someone, and get out.  So, create a room with the special somebody, connected to the starting room via a hall.  Now, we’re not going to have real objectives…we’ll just pretend!

 

Now, create a blueroom…that’s a room off in space with no lightsources where the player could never go.  It’s for storing things used behind the scenes, like plaques or buttons used exclusively by the AI.  Or, we can hide our teleporting AIs there!  Let’s do that!  Make two RamirezGuards, and put them in the blueroom.

 

Now, create Ramirez.  How?  First create a merchant, then Add-MetaProperty, and add the MetaProperty “BaseRamirez”.  There.  Good!

 

Next we add a script to Ramirez: “TrigSlain”.

 

Now, add two TeleportTraps, one where you want each guard to be.  Create the following links:

 

Flavour:                                                      ControlDevice

From:                                                         Ramirez

To:                                                             TeleportTrap1

 

Flavour:                                                      ControlDevice

From:                                                         Ramirez

To:                                                             TeleportTrap2

 

Flavour:                                                      ControlDevice

From:                                                         TeleportTrap1

To:                                                             RamGuard1

 

Flavour:                                                      ControlDevice

From:                                                         TeleportTrap2

To:                                                             RamGuard2

 

There, now set up your StartingPoint and give yourself a sword…now go in-game, and go slaughter Ramirez in a duel!  Mace against sword!  Of course, you, being the super-Thief you are, did kill Ramirez…without loosing a health point.

 

Now go back to the room you started off in…surprise surprise!  There’s two RamGuards waiting for you!

 

Wonderful, huh?

 

To see bluerooms and TeleportTraps in real-life action, check out ASSASSINS!  Make sure you get the unstripped version from www.thief-thecircle.com/teg-old/tools though.

 

Emit Traps

 

Emit Traps are ultra-cool.  They make the player think in an all-new Thiefy way!

 

You can set up emit traps to shoot the following (these are the names of the objects in the emit trap dialog as well):

 

broadhead

magicmissile

rock

apple

sword

webshot

Tiltawirl

 

Keep in mind that an emit trap is invisible, but it’s always good to put it in a hole in the wall!

 

Okay, now, create an emittrap (if you want your emit trap to fire only once), or emitstreamtrap (if you want your emit trap to shoot multiple times), and place it in the world.

 

Now open it’s properties, and edit “Tweq-Emit”.

 

There are a few options in here:

 

Halt                                                            Ignore

AnimC                                                       Sim for emittrap, Sim,NoLimit for emitstreamtrap

MiscC                                                        Ignore

CurveC                                                      Ignore

Rate                                                           1 for emittrap, 1000 for emitstreamtrap

Max Frames                                               1 for emittrap, 0 for emitstreamtrap

Emit What                                                  What is going to be emitted.

Velocity X                                                  How fast the projectile moves along the X axis, see below

Velocity Y                                                  How fast the projectile moves along the Y axis, see below

Velocity Z                                                  How fast the projectile moves along the Z axis, see below

 

Okay, now to explain the “Velocities”.

 

X                                                               North and South.  Negative is north (south is “down”)

Y                                                               East and West.  Negative is west

Z                                                                Up and Down.  Negative is down

 

Now all we need to do is link something to the emit trap via ControlDevice.  Make it anything, a pressure plate, a concrete room (See “Roombrushes”) with “TrigRoomPlayer”, a BoundsTrigger…anything!

 

Sources and Receptrons

 

Have you ever wondered how a zombie knows to die when it gets hit with a holy water arrow?

 

Have you ever wondered how a BaffGuard knows how much damage to take when you deliver a blow with an overhead swing?

 

Ever wondered how AIs, and you, can react differently to different damage?

 

Ever wondered how healing potions heal Garrett?

 

Then wonder no longer, because in each of these examples, there’s source…say, the sword in example 2, and a receptron, the guard.

 

Now, there are myriad stims (stimuli, or things which provoke receptrons), and here they are (yes, another list):

 

Weaponstim                                               Any weapon has this
Pokestim                                                    Broadhead Arrows have this
BugPoke                                                    Insects have this
Slashstim                                                    Specific to a sword
Bashstim                                                     Blunt weapons such as a blackjack
Water                                                         Water arrows have these, as does any “water” in Thief
Fire                                                            Fires, and fire arrows
Touch                                                         I believe this has to do with contact with terrain brushes
Holy                                                           Holy Water Arrows have this
Knockout                                                   A blackjack has this
Restore                                                      Healing potions have this, as does healing fruit
KOGas                                                      Gas arrows
MagicZapStim                                            Wizard and trap zaps
LightBright                                                  Flashbombs
Toxic                                                          Poisonous gas
Stench                                                        From a burrick's maw
Earthstim                                                    Moss arrow

 

So, how do we make things give these off/react to them?  Well, we already saw an example in the “Conversations” section, when we made a servant frob a button after receiving a “KnockOut” stim.

 

If you though receptrons were cool, wait until you hear about sources!

 

Although sources and receptrons are pretty complicated, you can figure most of them out for yourself.  All we have to do is explain the basics!

 

First, receptrons.  When you try and add a receptron, it asks what to do.  You can do many different things.  These are all self-explanatory.  And most of them you learned about in conversations.  So you’re fine!

 

Now, there’s this “Min-“ and “Max Intensity”.

 

So, let’s say your creating a stim for swords.  SlashStim.  But you want this guard to be armoured, so he ONLY responds to heavy swings, which have an intensity of “6”.  So, set the “Min Intensity” to “6” and the check the “No Max Intensity” box.  Then change the action to “Damage Object” target object “Me”.

 

Receptrons are extremely simple!  But sources are a different matter!  Sources are how receptrons are activated.  The sword has three different sources.  One for the normal swing, one for the medium swing, and one for the heavy swing.  The intensities of these sources are 2, 4, and 6 respectively.

 

You already know about stims, so I won’t explain those.

 

Now, when you try and create a new source, you’ll be asked for the object number.  This is obviously the object you’re working with.  If you’re creating a new archetype, type the negative value of that archetype.

 

There are four kinds of propagators.  Contact, script, flow, and radius.

 

Radius means the stim is omnipresent within a certain radius of the target object.  Script means the stim is triggered by a script, like the “Restore” stim of the healing potion, or healing fruit.  Flow means a flow brush, and contact means when two objects touch, whether by a weapon, or by frobbing, or by just touching!

 

Editing shape edit’s the stim’s propagator.  For contact, for example, you can alter the velocity coeffecient (the veloticy required for this stim to take place) or the type of contact.  Contact is just that, normal contact, whilst frob in world means when you frob in world, frob in inv means when your frob in the inventory, and the others are when the object in question transitions between world and inv, like when you pick something up.  Or drop it.

 

Now, for radius, you have two options, edit life cycle and edit shape.  Editing the life cycle controls the number of max firings, and whether or not the intensity multiplies as the firings go on.

 

In this box you also have flags.  “No Max Firings” and “Destroy Object on Completion” are the options.

 

Number of max firings is how many firings are maximum.  Interval controls how often the stim firings, and intensity slope is how much the stim’s intensity multiplies by as it goes on.

 

Destroy Object on Completion does just that, when the object reaches it’s max firings, it is destroyed.

 

You can edit the shape.  In editing shape you have the option of specifying a radius, adding flags, or specifying a dispersion.

 

Under flags, only “Line of sight (raycast)” is available.  This means that the stim’s radius is blocked by anything that can’t be seen through.

 

Under dispersion there are two options: “Linear Dispersion” and “Inverse Quadratic”.  Linear dispersion means the stim is strongest at the center, and gets weaker out towards the edge, and inverse Quadratic means the same thing, the stim is strongest at the outside, weaker at the center.

 

“Script” and “Flow” are the same as “Radius”, except they lack an “Edit Shape” option, because of their nature!

 

Okay, you’ve tried fiddling with the script “Extinguishable”, haven’t you?

 

Well, Extinguishable is activated by S&R, sorry to say!

 

So, let’s make a really cheesy extinguishable electric light…hmm?

 

Create an electric light, and remove the “Light” property and add the “AnimLight” property.  Fill everything in appropriately, but don’t add the “AnimLight” script, instead, add the “Extinguishable” script.

 

Okay, now Add>Act/React>Receptrons.

 

Add a WaterStim receptron.  Make it’s minimum “0” and set it’s maximum to “No Max”.

 

Now, set the action to “Send to Scripts”.

 

Now, create a second receptron.  This time FireStim.  Make it the same.

 

Now dismiss all the boxes, and recalculate lighting.  Tools>Light.

 

Give yourself a few fire arrows (the ones under the projectile archetype, don’t forget!) and water arrows (still projectile).  Now, go in-game and have fun extinguishing electric light with water arrows, and re-lighting the electric light with fire arrows!

 

He-he.  Let’s have some undead fun, eh?

 

Okay, create ten or twenty zombies in a huge room.

 

Don’t panic, you’re about to transform yourself into an ultra-holy warrior!

 

Create a sword, and give it to yourself with the “Contains” link.  If you’ve already given yourself a sword, don’t worry about it.

 

Now, as you know, zombies, by nature, are unaffected by ANYTHING except FireStims and HolyStims.  They can also drown.  But that doesn’t involve S&R!

 

So, let’s play upon the zombies’ weakness for Holyness!

 

So, let’s give you a holy sword!

 

Just for fun, open up the sword’s properties, and Add>Inventory>Object Name.  Type in: Name:“Blessed Sword of the Hammerites”

 

Now that we’ve had our fun, let’s set up some sources so we can have even MORE fun!

 

Add>Act/React>Sources

 

Set up a HolyStim, intensity 2, propagator Contact, under Edit Shape, set to: “Weapon Low”.

 

Next, a HolyStim of 4, same thing only “Weapon Med”.

 

Next, 6, “Weapon High”.

 

And last, 0.5, “Weapon Block”.

 

There!

 

Go in-game, and carve up some zombies!

 

LockBoxes

 

LockBoxes, in my books, are the greatest!  They don’t look cheesy, and you can create completely awesome effects!  There’s one thing they’re missing though (and you might want to change this in the hierarchy, then save your gamesys), and that’s the “LockSounds” script.  When you frob them without a key, they’re completely silent!

 

Anyway, there are two things you must understand about LockBoxes.  Firstly, they lock/unlock JUST like a door, secondly, there are two different ways of implementing a LockBox.

 

The most loved way is to add “TrigUnlock” to the LockBox, and then ControlDevice it to whatever you want opened.  That way, when the lockbox is unlocked, the door is open, and vice versa!

 

Secondly, you can lock things with the “Lock” link, link a door or switch, or just about anything frobbable FROM itself TO the lockbox.  The flavour, naturally, is “Lock”.

 

Now, I know I’ve dealt with this before, but if you have a door that’s opened with a lockbox (not locked with, opened with), or opened with a switch, please make the item unfrobbable.

 

Now, if you were to make all the FrobInfo “[None]” that would do you absolutely no good, because, upon receiving a ControlDevice signal, the door wouldn’t know what to do with itself…so, set the world action to:

 

Script,Ignore

 

Do this by clicking on both “Script” and “Ignore” in the WorldAction drop-down menu.

 

Now that that’s done, why don’t we deal with AI?  Hmm?

 

Now, if you’ve read the AIWatchObj link section, you should know how to do this, so, if you haven’t read it, read it now…oh, no, don’t worry, I can wait!

 

Back?  Good.  Now, implement the same system as used, with the markers and links, only this time we have one of two options.  Option 1 if you used “TrigUnlock” to open the door, Option 2 if you used Switch locked via LockBox to open the door.

 

Option 1:

 

This gets a bit tricky.

 

Create a lockbox (with “TrigUnlock” and a ControlDevice to the door), and a door.  Make the door’s FrobInfo WorldAction: Script,Ignore.  Now create a servant in a blueroom, make sure he has the key to the lockbox.  Put a conversation there also (if you already haven’t, read the section on conversations), and make the servant the only actor.

 

Now link the lockbox to the conversation.

 

Now make the conversation’s actions as follows:

 

Step 00:

 

Actor:                                                         1

Action 00:                                                  Wait

Arg1:                                                          5000

Arg2:

Arg3:

 

Step 01:

 

Actor:                                                         1

Action 00:                                                  Frob Object

Arg1:                                                          (The lockbox’s unique name)

Arg2:

Arg3:

 

Since the servant is in a blueroom, and since this is an effect conversation, we don’t need abort conditions!

 

Now create concrete roombrush (See section “RoomBrushes”) extending outwards about 4 feet from the door on both sides.  Add the script: “TrigRoomCreature” to the roombrush.

 

Now create a RequireAllTrap and an Inverter.

 

Link the lockbox to the Inverter (ControlDevice), and the Inverter to the RequireAllTrap (ControlDevice), and link the RequireAllTrap back to the lockbox.

 

There, you’re done!

 

That wasn’t QUITE so tricky…hmm?

 

Go in-game, and admire your handy-work!

 

Want to know what happens?

 

Okay, if the player opens the door, the servant closes it five seconds later.  If a guard comes along, the lockbox isn’t frobbed unless the door’s closed.  In which case it opens, and he has five seconds to pass through!

 

Option 2:

 

This is the same as Option 1, except!

 

The RequireAllTrap is linked to the switch, rather than the lockbox.

 

The servants Step 01 goes as follows:

 

Actor:                                                         1

Action 00:                                                  Frob Object

Arg1:                                                          Lockbox

Arg2:

Arg3:

 

Actor:                                                         1

Action 01:                                                  Frob Object

Arg1:                                                          Switch

Arg2:

Arg3:

 

Actor:                                                         1

Action 02:                                                  Frob Object

Arg1:                                                          Lockbox

Arg2:

Arg3:

 

There, lockboxes are COVERED!

 

Keys

 

Keys are pretty straightforward.  To make any object into a key, you need three things:

 

A script

FrobInfo

KeySrc

 

You already know how to set KeySrc up, to that’s fine.  Now we need to add the script.  It’s “StdKey”.  That simple.  Now, the FrobInfo…here’s how you should set it up:

 

WorldAction                                              Move

InvAction                                                   [None]

ToolAction                                                 Script,Deselect

 

There, now when you frob the key in the world, it moves to your inventory.  When you use it in your inventory, it does nothing, unless your going to use it as a tool, then it executes a script, and deselects itself.

 

Lock Picks

 

One of the greatest thieving tools ever are the lockpicks.  They make you a nearly unstoppable force, unlocking the locked, and taking the secured!

 

Unless, you don’t know how to set them up!

 

First, we’re going to tell you how to make something into a lockpick, then we’ll tell you how to make a lock pickable.  So, in order to make something into a lockpick, here’s what you need:

 

A script

FrobInfo

PickSrc

 

Okay, the PickSrc is the PickBits of the lockpick…confused?  Well, PickBits is how Thief tells one lockpick from another, and is how you assign a lock to a lockpick.  Here’s how pickbits work:

 

1                                                                Square Lock Pick

10                                                              Triangle Lock Pick

11                                                              Both Picks

 

Now, that’s fine and dandy, but say you make a NEW lockpick…say a hook-toothed LockPick.  And you want it’s pickbits to be different from Triangle and Square.

 

The problem with pickbits is that they are BITS.

 

Here’s an example:

 

What?                                                        PickBits

 

Door                                                          11

Pick                                                           10

                                                                  1 – A match!

 

Door                                                          11

Pick                                                           01 – A match!

 

So, add your new pick, and make its pickbits 100.

 

Door                                                          111

Pick                                                           100 – A match!

 

Door                                                          001

Pick                                                           100 – No match!

 

See, the ones have to line up!  So, now we have these three picks:

 

1                                                                Square

10                                                              Triangle

100                                                            Hooked

11                                                              Square and Triangle

111                                                            All

110                                                            Triangle and hooked

101                                                            Square and hooked

 

Get the hang of it?  Good!

 

Now, create a door, and lock it.  Add-Engine Features-Locked.

 

In order to make the door pickable, we must add PickCfg, and fill it out properly!  So, Add-Dark gamesys-PickCfg.

 

Don’t let this window confused you!  You’ll see that there are three sets of identical fields.  Each set represents a stage.  Each stage can be set up differently.  Now, let’s take the first one for example.  The top box is “PickBits”.  We already know about those!  Fill in “10”, for the triangle lockpick.

 

Now, look down to “Pins”.  This is the number of pins in each stage.  For each pin within a stage, you’ll hear a click.  Set this to “5”.  Now, TimePct.  This is the time it takes to pick each pin.  Set this to “1”.

 

Keep in mind that if you leave everything blank, the game will ignore that stage!  So, right now, if you were to give Garrett the lockpicks and go in-game (don’t), you’d be able to pick this in a couple seconds with the triangle lockpick.

 

Now, you’ll see that there is a “Flags” box.  There are two options:

 

Reset on fail                                                Doesn’t seem to work…maybe it’s a bug?

Randomize time                                          Randomizes the time it takes to pick each pin

 

Add the flags you want, then hit “OK”.  Now, to give Garrett the lockpicks.

 

Lockpicks are found under Physical-Tulz-LockPicks.  But there are THREE options…LockPickSG (Square) LockPickLG (Triangle), and LockPickBoth.  Only use LockPickBoth if you’re building a store…which we’re not, so give Garrett LockPickLG and LockPickSG.

 

NOW go in-game, and enjoy!

 

Difficulty Levels

 

In order to make an object only appear at a certain difficulty level, you must Add-Difficulty-Destroy, and type in the difficulty levels you want it to be destroyed on.  0 is normal, 1 is hard, and 2 is expert.

 

Here’s the syntax:

 

If you want an objective to disappear at normal, but appear at all others:

 

Add-Difficulty-Destroy: 0

 

If you want the object to disappear at hard and expert:

 

Add-Difficulty-Destroy: 1,2

 

If you want the object to disappear at normal and expert:

 

Add-Difficulty-Destroy: 0,2

 

Brush Timing

 

When you portalized, brushes are processed sequentially, in the order specified by the number in the lower right-hand corner.  For example, if a solid brush is encased by an air brush, and the air brush’s timing is later, or higher, the solid brush will be air.  If the solid brush is later, and solid will be solid!

 

You can change the timing by typing and pressing ENTER, or by using the left and right buttons!

 

Creating Outdoors Areas

 

Before reading this tutorial, please read “Brush Timing”.

 

You’ve created a nice manor, or cave network…or, anything indoors, and you want to create an outdoors area.  Okay.  Now, find the first brush you created, change it’s brush timing to “3”, and change the timing of the second brush to “4”.

 

Now create a solid brush around the part your indoors that will be visible outside.  Make sure you account for walls.

 

Before you portalize to check out this magnificent thing, set it’s timing to “2”.

 

Now create an airbrush encompassing this solid brush, let it’s timing be “1”.

 

Okay, portalize!

 

Now, since the exterior of your building/structure/formation won’t be lit, activate light_bright, and then go have a look!

 

Remember not to be afraid of decahedrons; they’re most useful for forming odd-shaped things, like caves, mountains, hills.  And if two of them intersect…that’s where it gets REALLY interesting!  If you’ve ever looked at the caves in the OMs, and wondered how they were done, decahedrons are the answer!

 

Okay, that looks good!  Now, how to roombrush!

 

You’re going to have to use multiple roombrushes for this.  If your structure is square, it’s easy.  If it’s ten-sided cylindrical, it’s hard.  If it’s a mountain…talk about hard.

 

You can’t allow this roombrush to intersect/encompass the interior roombrushes, otherwise sound will propagate between them…so, if you have an exterior doorway, make SURE they intersect/touch.  Otherwise that’s a no-no!

 

But also, don’t allow these roombrushes NOT to touch/go into the walls, otherwise, if the player’s sneaking along the exterior wall, his sound will drop out, and he’ll get angry, and send you hate mail!

 

Now, set all these roombrushes to “Large Live” EAX.  (If you’re doing EAX).  Why?  Because echoing exteriors sound fake, unless it’s a canyon or something that WOULD echo.

 

Create a cityscape the same way.  If you want sloped streets, you can do it one of two ways: 1. Slope the brush, 2. Add wedges to the floor to slope it.  The first way is preferable, because you don’t have to include extra brushes.

 

Remember that cities take a long time because of the variety and painstaking detail required.

 

If you want a good, believable cityscape, you could always download the unstripped version of ASSASSINS! (Grab that here: http://www.thief-thecircle.com/teg-old/tools) and base it on that.

 

If you have problems, see the “Troubleshooting” section.

 

Roombrushes

 

In order to create some effects, you must create a “Concrete Roombrush”.  These include “TrigRoomPlayer” and “WelcomeRoom”, as well a “TrigRoomCreature”.

 

It is imperative that you understand that each room archetype acts as one object.  This can be used to your advantage.  Say you want to use a roombrush as an objective (See “Roombrushes as Objectives”), you must create a concrete roombrush type and add the script: “WelcomeRoom”.  Now say the area you want the player to get to has multiple entrances, and in turn multiple roombrushes.  Then, instead of complicating things by using QVars (See “Objectives: QVars”), you could use the same archetype!

 

Please note that using concrete roombrushes does NOT require you to re-save the gamesys.

 

To create a concrete roombrush, click the roombrush you want to make concrete, and hit “Create”, in this pop-up click “Add” and type the name of your room…make it descriptive!  Now hit ENTER.  You’ll be asked if you want a concrete brush, say yes, then select your new roombrush, and click “Create”.  This will make your “Default Room” your new concrete brush!

 

Now, press “Edit” to add scripts, or “Links” to add links!

 

The GameSys and You

 

If you’ve ever poked around in your “Thief” directory, you’ll notice that there’s a file called “dark.gam”.  This is the single most important file in the entire game.  It specifies all objects, metaproperties, stims, sounds, and textures.

 

So, at some point, if you want to alter these things, you’ll have to tamper with the gamesys.

 

DROMED and dark.gam operate as one unit.  Therefore, you can edit the gamesys without knowing it!  Say you edit the “Sword” archetype.  You’ve just modified the gamesys, and unless you File-Save GameSys, and save over dark.gam, you’re changes will disappear once you restart DROMED.

 

Now, let’s say you’re paranoid, or are creating multiple gamesyses.  You can maintain several gamesyses, but it get’s confusing.  What I do is constantly tinker with dark.gam until it’s PERFECT!  But, if you want gamesyses altered for each mission, go ahead!

 

Let’s say you are creating a mission called “BaffTaff”.  And you save your gamesys as “BaffTaff.gam”.  The next time you start up DROMED you are startled to find all your gamesys changes GONE!  Don’t fret!  Type the following in the command line:

 

set_gamesys BaffTaff.gam

 

Hit ENTER, then restart DROMED.  BOOM!  All’s fixed!

 

Remember than when setting a gamesys, the gamesys MUST be in the main Thief directory, otherwise you’ll have to type the whole path, like this:

 

set_gamesys C:\My Documents\My Thief Folder\BaffTaff.gam

 

And that’s plain boring…PLUS, if you do this, things will get complicated once you try to make your level DarkLoader-compatible!

 

Schemas

 

Before we begin editing/making our own schemas.  Let’s download the schema files for TDP/TG.

 

Click here to begin the download!

 

Once you’re done, extract those files to “Thief\schema\”

 

The only files which worry us are the *.sch files.  Those are the schema files.

 

Before we begin fooling around with the schema files, you must understand exactly what a schema file is.  It’s not a sound file, it is a file that contains all the data Thief needs to find your files, and understand what to do with them.

 

First we’ll deal with ambient sounds.  Open up “Ambient_m01.sch”.  Take a look around.  You should understand what everything means, take the first entry for example:

 

//Start Mission

schema m01start

archetype AMB_M01

volume –500

keehit_s

 

Okay, let’s break this down.  Below is a list of what everything there means:

 

//Start Mission                                            A comment.  Anything preceeded by “//” is a comment.

 

schema m01start                                         The name of the schema: m01start

 

archetype AMB_M01                                The archetype.  Make sure the archetype is previously created.

 

volume –500                                              Volume.  –1 is loudest, below that is softer.

 

keehit_s                                                      Name of file in snd.crf, without extension.

 

Note, for convenience, you can decompress snd.srf into a “Thief\snd\” folder.  Keep in mind that you must place all your schemas under the proper voice and language.  Example: “Garrett\English\”.

 

Note you may also insert the following flags after the archetype statement:

 

mono_loop X Y                                         The sounds will loop, separated by a break between X and Y.

 

poly_loop 2 X Y                                        Multiple sounds will be played at once, looping with a break between X and Y.

 

no_repeat                                                   Means no two identical sounds will play twice in a row.

 

For poly_loop, the “2” must always be present, and multiple sounds should be specified in the file names area.  Example, you have BaffWind1, BaffWind2, and BaffWind3, and you want them all to play at the same time!

 

schema BaffWind

archetype AMB_BaffTaff

poly_loop 2 2000 3000

volume –1

BaffWind1 BaffWind2 BaffWind3

 

Let’s say we want these BaffWind sounds to loop infinitely, playing separately, and no two identical ones ever playing in a row:

 

schema BaffWind2

archetype AMB_BaffTaff

mono_loop 0 0

no_repeat

volume –1

BaffWind1 BaffWind2 BaffWind3

 

Okay.  Now that we’ve tired of creating ambient sounds, let’s create AI sounds!

 

Here’s an example AI sound entry:

 

//Unaware (Alert Level 0)

schema sv1a0hu

archetype AI_NONE

no_repeat

mono_loop 3000 15000

volume -500

sv1a0hu1 sv1a0hu2 sv1a0hu3

sv1a0hu4 sv1a0hu5

schema_voice normal1 2 atlevelzero

 

The only thing different about this schema is the last line:

 

schema_voice normal1 2 atlevelzero

 

This line means that this is the voice “normal1”’s comments “atlevelzero”, which means he’s totally unalerted.  The number “2” is a priority, 1 being absolute, and numbers greater being less likely.

 

Now, let’s look at the way the files are named.  If this file naming system was good enough for LGS, it’s good enough for us FM makers:

 

sv1a0hu1

 

Means: SerVant #1 at Alert 0 HUm #1

 

Just a quick note, sv1 is a male voice, sv2 is a female voice.

 

In DROMED these are: “normal1” and “normal2”, respectively.

 

Keep in mind, if you create a new AI voice, you must enter the following line in “Speech.spc”:

 

voice x

 

Where “x” is the name of your new voice.

 

Now, last but certainly not least, custom conversations:

 

//CONV 1  "Peaceful, i'nt it?"                           

schema sv1c0101

archetype SV_CONV

sv1c0101

schema_voice normal1 1 sv_c01 (LineNo 1 1)

 

schema sv2c0102

archetype SV_CONV

sv2c0102

schema_voice normal2 1 sv_c01 (LineNo 2 2)

 

schema sv1c0103

archetype SV_CONV

sv1c0103

schema_voice normal1 1 sv_c01 (LineNo 3 3)

 

schema sv2c0104

archetype SV_CONV

sv2c0104

schema_voice normal2 2 sv_c01 (LineNo 4 4)

 

Okay, let’s break this down:

 

schema sv1c0101                                       Name of schema.

 

archetype SV_CONV                                Archetype…make sure this is created before processing!

 

sv1c0101                                                   Name of *.wav, minus extension.

 

schema_voice normal1                                Voice required to play.

 

1                                                                Priority.

 

sv_c01                                                       Conversation concept name.

 

(LineNo 1 1)                                              Line number.

 

Remember that each time you change the schemas you must reprocess the schemas, with the following command in DROMED:

 

reload_schemas

 

Once you’ve done this, resave your gamesys (See “The Gamesys and You”).

 

If you’re creating a new conversation concept, example of a built-in concept is: sv_c09, the lines of which are stated in the “Conversations” section of this tutorial, you must define the concept for DROMED.  Open up “speech.spc” and add the following below the rest of the concept definitions:

 

concept XXX

 

where “XXX” is your custom concept.

 

Save speech.spc.

 

Remember to reload schemas and save your gamesys after this change.

 

Also keep in mind that DROMED doesn’t need your custom schemas after it’s loaded them, and saved them in the gamesys.  Therefore, just include your custom gamesys in your DarkLoader (See “DarkLoader”) archive, not the custom schema files!

 

Another note.  You don’t have to compress your custom sounds into snd.crf, you can just place them in a “snd” directory in your “Thief” directory.  Keep in mind that custom sounds should be placed in an “English” folder, and try not to create any subfolders aside from “English”, as otherwise it can get confusing.  But if you are creating lots of sounds (like whole new voices) sort by voice, then by language.  Example, you’re creating a new voice: “Farkus”:

 

snd/Farkus/English/fa0mu1.wav                  Farkus at alert level 0, mutter number 1

 

One last all important word.  Save your Thief sound files as “IMA ADPMC” format audio, at a quality of: “8.000kHz, 4 bit, Mono”.

 

Remember that “format” and “extension” are different.  The extension should still be *.wav, but the format should be the aforementioned.

 

If you’re using Windows Sound Recorder, you can alter the quality from the save dialog, by pressing “Change” beside “Format”.  Note that when using Windows Sound Recorder, you will be unable to apply any effects to the sound, after saving them in this format and quality.

 

Remember that you will probably have to increase the volume of your sound in Sound Recorder by 100%, otherwise it will be inaudible, to do this hit Effects>Increase Volume (25%) four times!

 

Objectives

 

Before we go on, I’d like to congratulate you on making it this far.  Very few DROMEDers ever grasp what comes before this!  Okay.  Now we’ll learn about objectives!

 

First, I’ll tell you that doing objectives directly through DROMED is an ABSOLUTE CHORE!  So don’t do it…it’s boring, not to mention a waste of time, considering there’s Thief Objective Wizard!

 

Okay, so, if you haven’t already downloaded it, zoom over to http://www.thief-thecircle.com/dromed/ and find and download Thief Objective Wizard (or TOW).  Install it as per the readme, then run it.

 

Okay.  This program pretty much explains itself.  If you’ve decided on objectives, just enter in the first objective’s data, hit “Add” then enter the next objective’s data.  A few things to point out.

 

Objective numbering starts at zero

If you want to use objective type: “Goto a location, see “Roombrushes As Objectives””.

Ignore the “Special Flags” under loot goals

Ignore everything marked “T2 Only”, you don’t use DROMED 2 or DedX…I said this at the beginning!

 

Okay, and here’s the explanation of the TOW functions:

 

Reverse                                                      This reverses the sense of a goal.  Turns don’t kill into kill.

Final                                                           This goal is the last one…don’t use this on more than one goal.

Irreversible                                                 This goal can’t be reversed.

Invisible/Visible                                           Goal’s visibility.  See “Objectives: Invisible/Visible”.

Difficulty Levels                                          Check the difficulty levels you want this goal to appear on.

Incomplete                                                 Goal requirements have not yet been met (Nothing).

Complete                                                   Goal requirements have been met (Green check).

Inactive                                                      Goal is no longer applicable (circle with a slash).

Failed                                                         The goal is failed.  If one objective is failed, you fail the mission (X).

Steal an object                                            Input object number to be stolen.

Kill a creature                                             Self-explanatory, input creatures’ object number.

Get a certain amount of loot                        Get a certain amount of loot, either gold, gems, goods, or total.

Goal Number                                             Goal number, from 0-30

No Type                                                    Goal has no type.  See “Objectives: QVars”

Add                                                           Adds the goal

Reset                                                          Resets all goals

Raw Objective List                                     These are the raw commands

 

Once you’ve finished inputting all your goals, hit File-Save, and save it as XXX.cmd.

 

Now go back into DROMED, and type the following: run XXX (XXX is path of *.cmd file).

 

There, objectives!

 

Objectives: QVars

 

Now, the ConVict (Conditions for Victory) script is quite limited, really.  It doesn’t actually support the switching of objectives from visible to invisible.

 

But, there is a workaround!  The Fnord QVarTrap!  A QVrTrap, upon receiving a ControlDevice, can change a goal state!

 

Say you want an objective:

 

Kill joe, bob, and billy

 

Now, with ConVict’s basic objectives, here’s what you’d HAVE TO HAVE:

 

Kill Joe

Kill Bob

Kill Billy

 

That’s really quite stupid!  So, create a QVar, add “TrigSlain” to Joe, Bob, and Billy, then link them to an appropriately setup QVar, in the meantime, set the TOW objective type to “No Type”.

 

First, let’s show you the QVar commands:

 

goal_visible_X                                            Changes goal visibility, 0 is invisible, 1 is visible.

goal_state_X                                              Changes goal state, 0 is incomplete, 1 is complete, 2 is inactive, 3 is failed.

goal_final_X                                               Makes a goal final/not final, 0 is not final, 1 is final.

goal_reverse_X                                          Sets a goal’s “Reverse” property, 0 is normal, 1 is reversed.

goal_mindiff_X                                           Sets a goal’s minimum difficulty, 0 is normal, 1 is hard, 2 is expert.

goal_maxdiff_X                                          Sets a goal’s maximum difficutlty, 0 is normal, 1 is hard, 2 is expert.

goal_irreversible_X                                     Makes a goal irreversible, 0 is reversible, 1 is irreversible.

goal_type_X                                               0 is steal object, 1 is kill creature, 2 is loot, 3 is goto room.

goal_target_X                                             See below.

goal_loot_X                                               Total loot.

goal_gems_X                                             Total gems.

goal_gold_X                                               Total gold.

goal_goods_X                                            Total goods.

 

Okay.  First I’ll explain the property you must add to make a QVar run properly, then I’ll show you the syntax, THEN I’ll give you the info for all the commands marked “See below”.

 

A QVar needs a property: Add-Trap-QVar.  That wasn’t so hard, no you’re faced with a pop-up.  Syntax time!

 

Now, first things first.  The “X” in the commands above is the goal’s number.  The value you want to set whatever you specified to goes BEFORE.  Take a look:

 

=Y:goal_visible_X

 

Now, let’s say you wanted to make goal #15 visible.

 

=1:goal_visible_15

 

So, what you want to change the variable to goes before the colon.  And after the colon you input the variable, and the goal number.  Don’t get confused or do it backwards or weird errors to occur!  And  be sure to include the “=” it’s crucial!

 

The goal_target_X variable is very tricky.  This variable applies to three of the five types of goals.  Get to a certain room, kill a creature, and steal an object.  Remember the reverse variable, though.  For example, the servant archetype number is “-52” (all archetype numbers are negative.   Just like “Garrett” is “-2099”).  So, if you set: goal_type_X,1, goal_target_X,-52.  That would be “Kill a servant”.  If you set the following:

 

goal_type_X,1

goal_target_X,-52

goal_reverse_X,1

 

This would be a: “Don’t kill any servants” objective.

 

Remember, you can use archetypes no matter how broad!  If you want to have a “Don’t kill anything” objective, here’s what you’d set:

 

goal_type_X,1

goal_target_X,-8

goal_reverse_X,1

 

That would work, because “-8” is the number of the “Creature” archetype…and all AI are contained within this archetype!

 

If you look at the hierarchy, it’s set up VERY well for these kinds of goals.  Say you want a “Don’t steal anything” goal.  Why you’d want one is beyond me…but anyway.

 

goal_type_X,0

goal_target_X,-224

goal_reverse_X,1

 

There, done!

 

Objectives: Invisible/Visible

 

Normal objectives are great, but certainly you could create a better storyline with invisible objectives!

 

Yes…definitely!

 

So, how can you make the flip?  Use QVars!

 

=Y:goal_visible_X

 

What’s a good way to trigger this?  How about a roombrush with “TrigRoomPlayer”?  A scroll/book with StdButton?  A guard with “TrigSlain”, or with a “Frob Object” receptron?  I conversation that has an actor frob a button linked to a QVar?

 

Objectives: Text Description

 

Creating objectives is all fine and dandy.  But all you have are these blank boxes…what’s the scoop?

 

You need a goals.str file.  You can create this file with notepad, so, open it up.

 

There are two different things that must be inputted for each goal, fiction text, and text.  Fiction text is displayed at the initial load-out, and text is displayed on the in-game screen.  So, say we have these two goals:

 

Steal the scepter

 

Don’t kill any servants.

 

Now, here’s the fiction text:

 

You’re short on cash, and stealing the scepter should be a good way to make a quick buck.

 

Servants are harmless…don’t harm them!

 

So, here’s what we type in our text file:

 

fiction_0:”You’re short on cash, and stealing the scepter should be a good way to make a quick buck.”

text_0:”Steal the scepter.”

fiction_1:”Servants are harmless…don’t harm them!”

text_1:”Don’t kill any servants.”

 

See?  fiction_X:”Y”

 

X is the goal number, and Y is the fiction text.

 

Or:

 

text_X:”Z”

 

X is the goal number, and Z is the text!

 

So, you’ve saved this file as “goals.str”.  Now, what do we do with it?

 

Make sure the following directory structure is in place in your Thief directory:

 

Thief\Books\English

 

Thief\intrface\English

 

Thief\intrface\missX\English\

 

Thief\Strings\

 

X is the number of your mission…make sure that this number is greater than fourteen!  Twenty is good.

 

We’ll use all these directories LATER when we make the mission DarkLoader-compatible, but for now, move “goals.str” into “Thief\intrface\English”.

 

Remember that all your books go into “Thief\Books\English”.

 

Now, restart DROMED, then play your mission, hit “O” to access the objectives screen, and there are your objectives!

 

Roombrushes as Objectives

 

Before reading this, please ensure that you’ve read the “Roombrushes” section.

 

In order to use a roombrush in the “Goto” objective, you must create a new concrete roombrush, and add the script: “WelcomeRoom” on it.  Then type it’s number into the “Goto Location” field in Thief Objective Wizard.

 

Making a Store

 

You’ve created your mission.  It has extra-cool effects, it has extra-comlicated objectives, it has conversations, MetaProperties, doors, lockboxes, complicated scripts, act/react!  But it’s missing a store!

 

Fret no longer!

 

It is recommended that before you read on, you read the section “Inventory”.

 

Okay, first make sure that everything you’re trying to sell has a long description, an object name, and a purchase price.

 

Now, create two markers near your StartingPoint.  Name them “Store” and “LoadoutCache”.

 

Open the properties of “Store”.  Add-Inventory-Store, check!

 

Now open “LoadoutCache”’s properties, and Add-S-Scripts: “LoadoutCache”.

 

Now, link everything that’s “Starting Gear” to the StartingPoint (Contains flavour).  Link everything that’s up for sale to “Store” (Contains), and link things that you want to be inserted AFTER the store (Compass, maybe sword) to the LoadoutCache (Contains).

 

If this is the first mission in a series, you might want to link some loot to the StartingPoint so that the player can spend it!

 

Make sure that you remove the following flag for your mission from “missflag.str”: “no_loadout”.

 

There, a store!

 

Note: The store will NOT appear when you play from DROMED.  Note that loot left over after purchasing will be deleted automatically.  If you have multiple missions in a series, note that loot will be carried over automatically from one mission to the other.

 

DarkLoader

 

There are several things that DarkLoader needs to run your mission:

 

missflag.str

titles.str

goals.str

page001.pcx

readme.txt

missX.mis

newgame.str

 

Let’s explain each of these:

 

missflag.str                                                  Let’s DROMED know to skip the OMs

titles.str                                                       Specifies a title for your mission

goals.str                                                      Specifies objectives text for your mission

page001.pcx                                              Page one of the map, you can have multiple pages.

readme.txt                                                  Your readme

missX.mis                                                   The mission file

newgame.str                                               Specifies the names of the buttons at the “New Game” menu

objnames.str                                               Specifies object names (See “Inventory”)

objdescs.str                                                Specifies object descriptions (See “Inventory”)

 

And let you know where they go:

 

missflag.str                                                  strings\English\

titles.str                                                       strings\English\

objnames.str                                               strings\English\

objdescs.str                                                strings\English\

page001.pcx                                              intrface\missX\English\

goals.str                                                      intrface\missX\English\

newgame.str                                               intrface\English\

Books/Scrolls/Plaques                                books\English\

Custom Schemas                                        schemas\VOICE\English

Custom Sounds                                          snd\VOICE\English

 

Now, rather than create all those *.strs by HAND, why don’t you just up and download the Thief Book Wizard (TBW) and Thief Text File Wizard (TFW or TTFW).  And use THEM to create these files!  They work MUCH better.

 

As for the map, I can’t help you with that.  It’s up to YOU how much (or how little) detail to include.

 

Now, for multi-mission archives!

 

These are quite daunting.  Inside “intrface\” create a missX for each mission (20, 21, 22), now alter your original missflag.str so that it does NOT include “end” for your original mission, and so that you add lines for your other missions:

 

miss_15: “no_briefing,no_loadout”

miss_16: “no_briefing,no_loadout”

miss_17: “no_briefing,no_loadout,end”

 

Things to know about missflag.  If you want missions NOT to play, add the following line:

 

miss_1: “skip”

 

If you want a mission to play with a briefing, with a loadout, and not being the end of the campaign, write this:

 

miss_2: “”

 

This is an example for a three-mission archive.

 

Remember that if you don’t include the “no_briefing” line, you must make a movie briefing for your mission, these should be stored in “movies\English\”.

 

Also note that they must be named: “BX.avi”.  X is the number of your mission.  If you want an end-of-game cutscene to play after your last mission, make the missflag like this:

 

miss_17: “cutscene,end”

 

Cutscenes must be named: “CX.avi”.  Where X is the mission they come after.

 

If you’re still confused, take a look at the Thief missflag, found in ”strings.crf”.

 

Remember to compress your missions at “Normal” compression setting in winzip, and to include a “readme.txt”.

 

If you’ve made changes to your gamesys, include it also!

 

Garrett’s Comments List

 

GAR001          This door is bolted, and there is no way to open it
GAR002          Locked!  I'd better get the key to open it
GAR003          It’s locked, I can try picking the lock or finding the right key
GAR004          Ah, got it!
GAR005          A container like this might have something good inside it
GAR006          That's too high
GAR007          Crystals are good for powering up arrows
GAR008          This will be useful
GAR009          Rope arrows will only stick in wooden surfaces
GAR010          Always good to grab loot
GAR011          Now this is worth the price of admission
GAR012          Now the bow will shoot fire arrows
GAR013          Now the bow will shoot water arrows
GAR014          Now the bow will shoot moss arrows
GAR015          Now the bow will shoot gas arrows
GAR016          I'd rather not walk out there into the light
GAR017          If I stick close to the walls I have a chance of not being seen
GAR018          I better wait till his back is turned
GAR019          Too many for me to take all at once
GAR020          I'd be better off looking for another way around
GAR021          I shouldn't leave the body lying around
GAR022          Perfect. Only one, and he's looking the other way
GAR023          Just keep looking the other way...
GAR024          I think I lost him
GAR025          I hate blind corners - you never know what you're going to run into
GAR026          It almost always pays to listen at a door before opening it
GAR027          If I can hit him with the blackjack without being spotted, he'll drop without a sound
GAR028          That was bloody. I should move the body, but if someone walks by here they might figure out something’s up
GAR029          Ooh... This is not good!
GAR030          I can pick that guy off with an arrow, but if I miss, I'll give myself away
GAR031          Lots of pyrotechnics but not very stealthy I've got to be careful with those
GAR032          Water arrows are most useful for putting out torches
GAR033          Moss arrows are meant to be fired at noisy surfaces so that I can walk on them without making a racket
GAR034          Not much point in firing those into the floor
GAR035          I should remember that splashing around can make a lot of noise
GAR036          I can't stay underwater too long or I'll drown!
GAR037          I've only got a few seconds of air left!
GAR038          I'll never make any headway against this current!
GAR039          Barrels like these, can provide good cover in a pinch
GAR040          Crates like these are useful for concealment
GAR041          Every key opens something, somewhere
GAR042          Aah, not so secret anymore, is it?
GAR043          Aagh, I'm making too much noise walking on this tile
GAR044          Walking over metal is noisy, I have to be careful
GAR045          I have a bad feeling about this
GAR046          Hmm... This looks interesting
GAR047          I wonder what happened here
GAR048          Looks like this hasn't worked in years
GAR049          I wonder how I can get up there
GAR050          Hmm... There must be a way down there
GAR100          No luck here
GAR101           I'm not opening this
GAR102          Can't get through here
GAR103          Can't go this way
GAR104          Not this way
GAR105          Ahh, no point in going here
GAR106          I need'nt bother here
GAR107          Nothing useful this way
GAR108          Nothing back here I care about
GAR110          Doesn't seem to do anything
GAR111          Doesn't do much
GAR120          Hmm.. this can't be opened now
GAR121          Looks like I can't open it
GARC0101        Alright old man, lets get you out here and me my money
GARC0103        Good thing you're dying Cutty, or I'd have to kill you for stiffing me, again.
GARHMMM      Hmm...
GARM0101        The keepers were training me to be one of them, but I found other uses for those skills
GARM0201        Hmm... A few too many to try to get by here
GARM0202        Only one guard, still it would be nice to get the drop on him
GARM0203        Inside, at last
GARM0204        Hah! Could you possibly be any more helpful?
GARM0205        Better not leave too many bodies lying around
GARM0206        I wonder if reads them or if it's just for show
GARM0207        Since I'm in here, I might as well pick up something for myself
GARM0208        Hah! Its a throne room, how pretentious can you get?
GARM0209        Here we go...
GARM0301         I should be near the prison entrance by now
GARM0302        He can't see me while I stick to the shadows, but I'll have to cross into the light to get to the stairs.
GARM0303        Agh, clanky metal grating, I better tread softly
GARM0304        Blocked from the other side
GARM0305        Hmm, better not let anyone bang that gong, or I'll have more company than I can handle
GARM0306        Heh! Just what the world needs - more hammers
GARM0307        More than one guy, that'll make things trickier
GARM0308        Looks like I'm on the right track
GARM0309        I hate blind corners, you never know what you are going to run into
GARM0310        I have a bad feeling about this
GARM0311        Better stick to the shadows here, if they see me I'm in trouble
GARM0312        Right, cell block 4, Cutty you better appreciate this
GARM0313        This seems too easy
GARM0314        How many guards do they have in here anyway?
GARM0315        But which one is Cutty, and how am I going to get the door open?
GARM0316        Just keep looking the other way
GARM0317        I bet the door controls are in there
GARM0318        Well this was a lost cause, time to get out before I end up in the cell next door
GARM0319        Heh, this must be how they spend all those tithes
GARM0320        I wonder if I have time for to stop for a snack
GARM0321        No point going that way, it'll be crawling with hammers
GARM0322        They take all this stuff way too seriously
GARM0323        If I keep going up, I'm going to run out of building
GARM0324        No good going this way, nowhere to hide
GARM0325        Cutty won't be needing this anymore
GARM0326        Aah, this is what I'm looking for
GARM0327        At least I can swim better than anyone carrying a sledgehammer
GARM0328        So long hammers
GARM0329        Interesting ride, I wonder if any of the hammers take it
GARM0330        Well there's Basso. If he weren't unconscious it would be simpler, but now I have to carry him out
GARM0401        Not my most elegant entrance, but it worked
GARM0402        Felix, you don't look so good
GARM0403        Damn, there has to be another way in
GARM0404        What's that sound?
GARM0405        Whoa! You know you can't take it with you, but I can
GARM0406        The horn of Quintus, I presume?
GARM0407        So this is the fabled horn of Quintus. Hope no one minds if I just take it with me.
GARM0408        So much for Felix, then
GARM0409        Its a long way down
GARM0410        Heh, how rude
GARM0411        Heh, tombs with piped-in music. How classy
GARM0412        Nice view, I wonder if the dead appreciate it
GARM0413        Good thing I'm not afraid of heights
GARM0414        Sounds like I'm getting close
GARM0415        Heh, these guys don't look too mean
GARM0501        So these are Ramirez's boys, I think it's time I dealt with Mr. Ramirez once and for all
GARM0502        It may be time for me to move along now, don't want to wear out my welcome
GARM0503        Maybe I should head back to my own neighborhood, those fellows don't seem too friendly
GARM0504        What sort of a lunatic keeps these things as pets
GARM0505        Damn, I guess I lost their trail
GARM0506        That shot was meant for me
GARM0507        These creeps are going to lead me right back to whoever sent them to kill me, but only if I can tail them without them noticing me
GARM0601        A glass gem, this sword was just a waste of time!
GARM0602        Damn, it’s a fake!
GARM0603        Information on Constantine, almost as good as gold
GARM0604        Time to take my new sword and get out of this crazy place
GARM0605        Magical traps, I guess he's serious about his privacy
GARM0701        Looks like this place was built by my old pals the keepers. I wonder what they're hiding in here
GARM0901        What have we here?
GARM0902        I'm not swimming across there
GARM0903        Creepy
GARM0904        Anybody home?
GARM0905        I wonder if the keepers have seen this
GARM0906        One down, one to go
GARM0907        How can the keepers keep this place a secret?
GARM0908        Looks like this must have been some sort of library
GARM0909        According to the map, this was probably a market place
GARM0910        Time to raid some tombs
GARM0911        I'm not too crazy about the neighbourhood
GARM0912        For me to make use of my map, I'm going to have to find some sort of landmark to go by
GARM0913        So this is the lost city... heh heh, its not lost no more
GARM1001        Damn, I took too much time
GARM1002        I am a wall builder... This is no place to be reading poetry
GARM1003        I am a wall builder, let my walls endure from season to season, year to year, and age to age. Let my walls stand while families toil, armies march and empires fall.  I am a wall builder and my walls will stand always as a shield against evil.  This I pray that will the master builder grant.
GARM1101        I don't like the looks of this
GARM1102        Uh oh
GARM1103        Hmm...
GARM1104        What do we have here?
GARM1105        These stairs have seen better days
GARM1106        Looks like this doesn't work anymore
GARM1107        If I don't get this thing to work, I'm not going to get very far
GARM1108        What was that?!
GARM1109        Now how am I going to get out of here
GARM1110        Oh master builder, we ask thee to bless our brother who hath died in thy service. Forgive him the transgressions of his living days and look with favor on his works in thy name. Pum and plain, fire and forge, purify his spirit and draw from him all which does not meet thy plan. Take him to serve with thee in thy home where he may rest in peace eternal.
GARM1202        Well! This is interesting, but it doesn't say anything about the eye
GARM1203        Wow! Not even the hammers can make heads or tails of this, but it doesn't look good
GARM1301        What happened here, and where are all the hammerites?
GARM1302        Damn, looks like Constantine got here before me
GARM1303        This looks like it'd make a good escape route for me and the high priest
GARM1401        Well this is my way out, better not mess with it
GARM1402        That can't go anywhere pleasant
GARM1403        All you other demon things, you can just stay home now
GARM1404        Let's not try that again
GARM1405        You’ve gotta be kidding me
GARM1406        Heh... Now that's big!
GARM1407        Ahh... Interesting
GARM1408        I've had enough of this
GARM1409        Let's just disable that portal and give the hammers a fighting chance
 
Troubleshooting
 
Problem: I’ve created an object, but for some odd reason, it’s invisible in-game!
Solution: Open it’s properties and Add>Renderer>Has Refs?  Check the box and hit OK.
 
Problem: My conversation isn’t working!
Solution: Make sure the conversation has the script: “TrapConverse”, that it has the property “SaveConversation” and that that’s set to TRUE, and make sure that there’s something controlling the conversation, and make sure that the conversation has AIConversationActor flavour links forwards from the conversation to the actors, with the proper data number.  With this in mind check in your “Conversation” property to see if the “Actor” drop-downs are set right.  Also check to make sure that the actor you’re trying to make talk has the right voice property (Add>Speech>Voice), and make sure that if the motions aren’t working, the motions are entered in correctly, with a space between the word and the “0”, and with a space after the comma:
 
Conversation 0, Foo 0
 
Problem: My DROMED window is 640x480 even though my screen resolution is 1600x1200!
Solution: Open up the file “User.cfg” under “Thief” in notepad, and add the following line: “edit_screen_size 1024,768”.  Make sure the resolution is always one step lower than your screen size, otherwise DROMED will run off the edges, for example, if you’re screen resolution is 1024x768 (which it should never be for DROMED, the bare minimum is 1024x768, otherwise conversation dialogs run off the screen) add this line: “edit_screen size 800,600”.
 
Problem: My screen resolution is 1024x768, but I can’t see the bottom of the AIWatchObj dialog!
Solution: Unless you have a HUGE monitor (21” or higher) I wouldn’t recommend going to 1600x1200, so just make sure you don’t have any dialogs selected (no drop-downs highlighted in blue) and hit ENTER to dismiss the dialog…same with Responses or Conversations.
 
Problem: Okay, my DROMED keeps crashing, telling me that I have too many polygons!
Solution: Open up “dark.cfg” in notepad, and add this line: “max_polygons 99999”.  (Make sure you include the new “dark.cfg” in your DarkLoader archive, though.)
 
Problem: I have more that 1800 object Ids!
Solution: Open up “dark.cfg” in notepad, find the max_obj line, and increase the count to 9999.  (Remember to include the new “dark.cfg” in your DarkLoader archive!)(Remember to make the min_obj count –3 times the max_obj count as well).
 
Problem: I have too many archetypes.
Solution: Open up “dark.cfg” in notepad, and find the min_obj line (right above max_obj) and DECREASE the number to a value equivalent of –3 times your max_obj count.  So if your max_obj count is 6000, make min_obj -18000.  (Remember to include the new “dark.cfg” in your DarkLoader archive!)
 
Problem: Everything’s messed!
Solution: Back up all your custom files (gamesys, levels, dark.cfg, user.cfg, custom sounds and schemas, saves) and then uninstall Thief and DROMED.  Then re-install.
 
Problem: I played an FM with DarkLoader, and now everything is totally messed-up in DROMED!
Solution: Go into DarkLoader, select the top mission option (is the default campaign) and click “Install Only”.  Once it’s finished, close DarkLoader and open DROMED.  Do this each time you play an FM.  Remember that save-games for each FM are saved when you un-install them!
 
Problem: I’ve created a custom door…but it’s got this black box, so I can’t see the door!
Solution: Go into the door’s properties, edit the Door property and uncheck: “Blocks Vision?”.
 
Problem: Things aren’t working the way they’re supposed to be…my doors aren’t frobbable…etc..
Solution: Make sure you’ve loaded ConVict (script_load convict).
 
Problem: I type “load_script convict” into the command window, and DROMED tells me that there’s no such command!
Solution: The command is actually “script_load convict”.
 
Problem: I have two separate installations of Thief, one has DROMED and the other doesn’t.  I’ve installed DarkLoader on my non-DROMED copy, and the FMs don’t work, everything is non-frobbable, the weapons don’t appear, etc..
Solution: Copy the file “convict.osm” from your DROMED copy of Theif’s main folder, to your DarkLoader copy’s folder.  Like DROMED, FMs can’t run without the convict scripts.
 
Problem: I have a large outdoor area, and my solids are starting to disappear when viewed from far away!
Solution: Either decrease the size of the outdoor area, or use other buildings so the player can’t see far-off solids…sorry, that’s the only way, the Dark Engine wasn’t designed for spacious outdoors, it was designed for claustrophobic indoors!
 
Problem: Everything is blurring.
Solution: You either have too big an open space, so decrease the size, or your have too many solid brushes contained within an air brush…cut back.
 
Problem: My water is Jorge…
Solution: Is your water flowbrushed?  If not, flowbrush it, if so, does that incriminating flowbrush share the same center as a solid brush?
 
Afterword
 
Well, congratulations!  You are now an officially qualified DROMEDer!  Go out, and create your own FMs, use my knowledge well!  And don’t forget to check out Lord Bafford the Tafford, and my other FMs!
 
Also, don’t be afraid to use the “DROMED” button in DarkLoader to check out other people’s FMs to see how they did things!
 
Don’t be afraid to download unstripped versions of the OMs and look around at them!
 
Don’t be afraid to create FMs and release them to the FM community!
 
And remember, no matter how outdated, there will ALWAYS be loyalists to TDP.  Not all of us run off and abandon Thief’s origins to play T2, a story of insane cultists, which doesn’t even begin to compare with TDP’s story!
 
And remember, if you have TDP and yearn for TG, download the patch from http://www.thief-thecircle/teg-old/tools/, unstripped versions of the OMs (the missions that ship with Thief) can be found here, so that they can be examined and/or have an FM based on them.  For example, ASSASSINS is a particularly popular mission for an FM to be based on because of the popular cityscape.  Examples are “Lorgan’s Web” and “The Gem”. 
 
Also, if you have ANY questions, e-mail Spike14, author, at spike14dromed@yahoo.com
 
Or, check out my website, home of BaffTaff, at http://www.geocities.com/spike14dromed/ 
 
AND!  Remember to experiment with DROMED, write your own tutorials, AND, experiment with insane ideas, remember, this is DROMED, the editor that wasn’t supposed to be released to the public, we had to petition for it, and remember that DROMED is UNSUPPORTED!  Neither Eidos Interactive, Looking Glass Studios, nor Activision Publishing provides technical support of any kind for DROMED.
 
If you need help, go to DROMED Central, or Through the Looking Glass forums!
 
I look forward to seeing your FMs, and seeing your tutorials and ideas at TTLG, and DROMED Central!
 
And remember, TTLG is always looking for new members to it’s VERY friendly community!  Sign-up, post, help other newbies (and oldies) out.  You’ll be surprised what you can be dreamt up in a single discussion thread!  Sometimes it’s slow, but it’s worth it!
 
Note: If you have NO IDEA where to look for FMs check out The Keep of Metal and Gold!  Thanks KoMaG!  Or http://www.thiefmissions.com/missions for epithumia’s Cheap Missions Download Site.  If you cross-reference between these two sites, you can grab EVERY FM TO DATE!  Have fun playing other people’s FMs, and opening them up in DROMED to see how they were done!
 
DROMED is obsessive…you know what you’re getting into.
 
Oh, yes, remember not to cross the streams…and also remember that DROMED IS UNSUPPORTED!  I can’t re-iterate this point enough…you asked for it.
 
Legal Stuff
 
This tutorial is copyright Spike14.
 
Distribution and or publication of this tutorial without the express permission of the aforementioned copyright holder is expressly forbidden!
 
If a person should violate this agreement, he/she shall find themselves the focal point of legal action.
 
Jason Tibbits AKA epithumia has express permission to host my tutorial at the following URL:
 
http://www.thiefmissions.com/tutorials/Spike14CompleteTutorial.html
 
MadBull#34 has express permission to host this tutorial here:
 
www.thiefworld.de.vu
 
He also has permission to translate this tutorial into German.
 
Balan Sergey has permission to host here:
 
http://thief-darkfate.narod.ru
 
He also has permission to translate this tutorial into Russian.
 
Spike14 can be contacted here: spike14dromed@yahoo.com
 
Or here: http://www.geocities.com/spike14dromed/ 
 
Also keep in mind that neither Activision Publishing, Spike14, Eidos Interactive, nor the deceased Looking Glass Studios, nor TTLG nor any of it’s descendant sites/employees/members/volunteers takes any responsibilities for the consequences of DROMED, FM, ConVict, or Fan-Made Tools usage on your computer, you, your family, you friends, your school/business/organization, or your property.
 
DROMED is obsessive…you’ve been warned.  You know what you’re getting into.