Spike14’s
Complete DROMED
Tutorial
Click
on a heading to go there
Garrett’s
Inventory and Weapons
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!
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!
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.
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.
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?
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!).
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?
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”.
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!
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!
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.
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…
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 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”.
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”.
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”.
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, 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!
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?
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
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!
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?
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”.
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”.
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.
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 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”.
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!
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!
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.
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!
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!
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.
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!
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 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!
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, 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 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.
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!
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
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!
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.
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!
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!
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!
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!
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?
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!
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.
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.
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!
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.