Sleeping servants

AUTHOR: Thiefs_Pawn

Credit goes to all members who contributed to it (and especially to Despot for writing the first version of this tutorial).

This is an alternate method of implementing sleeping servants in Thief. It is not used in any of the original levels, so

may have bugs other than the ones noted at the end of this tutorial.

If you are starting a new level and do not have your own custom gamesys or you have not modified the gamesys of your

current level you can simply use the one in this zip. Extract the file sleep.gam and rename it if you want. Place this

file in the same directory as your level, then go into Dromed, open your level and type 'set_gamesys sleep.gam' (without

the quotes). If you make further changes to the gamesys remeber to save it (NOTE: Dromed doesn't automatically change the

file extension to *.gam in the save dialogue box)

If you use this gamesys, or modify your existing one, remember you must distribute it with your mission.

Gamesys contents:

M-Blind Sleeper Metaproperties>AI_Behaviours>Custom behaviours

M-Awake Metaproperties>AI_Behaviours>custom behaviours

NewBunk Object>Physical>Furniture>Bedparts>Bunk

NewFancyBed Object>Physical>Furniture>Bedparts>FancyBed

NewConBed Object>Physical>Furniture>Bedparts>ConBed

If you want to add this behaviour to an existing gamesys follow the steps below.

* Open the object hierachy and in the top drop-down box choose MetaProperties

* Click on 'AI_Behaviours (-1631)' and then on the button marked New, type 'Custom Behaviours' in the box that appears and

click OK.

* Click on 'Custom Behaviours (-x)' (where x is a number assigned by Dromed) and then on the button marked New, type

'M-Blind Sleeper' in the box that appears and click OK.

* Double click 'M-Blind Sleeper (-y)' (where y is another number) This should bring up a window with a box on the left

containing 'M-Blind Sleeper (-y)' and 'Custom Behaviours (-x)' and buttons on the right marked; Add, Delete, Edit, Expand,

Refresh, Hide (may be greyed out) and Done.

* Click on 'M-Blind Sleeper (-y)' then click Add>AI>Responses>Sense Combat Response.

Configure it like this;

Response: Step 1 : Add/Remove Meta-property

Argument 1 : Remove

Argument 2 : M-Blind Sleeper

Response: Step 2 :Add/Remove Meta-property

Argument 1 : Add

Argument 2 : M-Awake

* Click on 'M-Blind Sleeper (-y)' then click Add>AI>Responses>Alert Response. In the drop-down box next to Alert Level

choose '(2) Moderate' and in the drop-down box next to Priority choose 'Very High'. Fill in response steps 1 and 2 exactly

as before then click OK.

*Click on 'M-Blind Sleeper (-y)' then click Add>AI>Ability Settings>Inform: Response Options. Fill in Response Steps 1 and

2 as before, leave the other boxes blank and click OK.

*Click on 'M-Blind Sleeper (-y)' then click Add>AI>Ability Settings>Idling: Should Fidget. Leave the check box blank and

click OK.

*Click on 'M-Blind Sleeper (-y)' then click Add>AI>Attributes>Hearing. Select 'Below Average' or 'Well Below Average' and

click OK.

*Click on 'M-Blind Sleeper (-y)' then click Add>AI>Attributes>Vision. Select 'Null' and click OK.

*Click on 'M-Blind Sleeper (-y)' then click Add>AI>AI Core>Broadcast customization. Configure it like this;

Custom 1: Broadcast : Alert zero broadcast

Type : Custom concept

Custom concept : Sleeping

*Click on 'M-Blind Sleeper (-y)' then click Add>AI>AI Core>Standing Motion Tags. Leave the box blank and click OK.

*Click on 'M-Blind Sleeper (-y)' then click Add>Creature>Current Pose.

Configure it like this;

Type : Tags

Motion : crumple, die

Frac : 1.00

Model Scale : 1.00

Ballistic : Unchecked

*Click done

* Click on 'Custom Behaviours (-x)' and then on the button marked New, type 'M-Awake' in the box that appears and click OK.

* Double click 'M-Awake (-z)' (where z is another number)

*Click on 'M-Awake (-z)' then click Add>AI>Ability Settings>Idle: Returns to origin. Leave the check box blank and click


*Click on 'M-Awake (-z)' then click Add>AI>Ability Settings>Idling: Should fidget. Tick the check box and click OK.

*Click Done and then Close and don't forget to save the gamesys.

To put a human to sleep (this hasn't been tested on animals ;) open their properties and click Add>MetaProperty>Custom

Behaviours>M-Blind Sleeper

Note: If you have an AI sleeping on a bed and it gets stuck in the bed when woken you need to add the property

AI>Utility>Path Avoid>none then rebuild the pathfinding database. The three modified beds included in the gamesys have

this property added. The NewConBed and the NewFancyBed also have their physics dimensions changed so that the player can

jump up on them.

Note: M-Awake performs two functions both of which are optional. It stops the sleeper returning to the middle of their bed

when they loose Garrett, and it causes them to fidget once woken. If you don't want or need these functions M-Awake can be

removed (along with any mentions of it in M-Blind Sleeper).

Known problems: Breaking an object near the sleeping AI wakes them up blind. Also changing the HP of the creature can make

it wake up blind after being hit with an arrow. This problem can be solved using Stims & Receptrons, however (see below).

Optional: To get the servant to lie face up, change the property Creature>Current Pose.

Motion: crumple, zombie

This makes it lie face up, however, the sleeper's orientation will change somewhat, so you may need to change their


Optional: To wake up a sleeper by damaging them (assuming you don't kill them outright) follow these additional steps for

each sleeper.

*Create a marker outside your level.

*Use an AIWatchObj link to link the sleeper to the marker.

*Edit the data of the link as follows

Watch kind : Self entry

Trigger: Radius: 5

Height : 5

Required awareness : (0) None

Line requirement : None

Minimum alertness : (0) None

Maximum alertness : (3) High

Exit: link kill option : After completion

kill like links : unchecked

no test once triggered : unchecked

reuse delay : 0

reset delay : 0

Response steps 1 and 2 as above

*Open the sleeper's properties and Add>Act/React>receptrons

*Click add then fill in the boxes as follows

Object : object number of the sleeper

Stimulus : Pokestim

Min intensity : 0

Max intensity : No max

Effect : teleport object

Target object : object number of the marker

Agent object : Me

Click OK

*Repeat the step above except substitute Weaponstim for Pokestim

Download the cutsom GameSys