Addendum
This document supplements the original manual and provides additional information on the latest features of FPS Creator.
FPI Actions
Below is a full list of the additional actions and conditions that extend the original version of the FPI script system. Many thanks go to the endeavours of the FPSC community who took the original FPSC source code and added their own cool features over the years:
Actions
globalvar
localvar
setvar
incvar
decvar
selectshadervariable
setshadervariable
incshadervariable
decshadervariable
freeze
animationnormal
animationreverse
plrfreeze
plrdisable
talk
shapedecal
newjumpheight
musicoverride
weblink
setifused
setusekey
resetplrweapons
backdropvideo
bloodspurt
nobulletcol
isaltammo
bloodsplash
camshake
camfov
camfovinc
hideplrweapon
showplrweapon
plrpointatobject
fpgcrawtextr
fpgcrawtextg
fpgcrawtextb
fpgcrawtextx
fpgcrawtexty
fpgcrawtextsize
fpgcrawtextfont
fpgcrawtextoff
fpgcrawtext
etimerstart
addaiteam
allyfollow
aisettarget
aimoverandom
killally
killenemy
allowmove
setaiactive
alwaysactive
addzombie
aiaction
aifollowplr
aimovetosound
aimoveawayfromsound
aiaddpoint
aigotopoint
aicallteam
airespondtocall
aimovetocover
aimovetotarget
aistop
aiusemelee
aisetmeleedamage
airotatetotarget
airotatetosound
aiplrcallteam
aisetspeed
airespondtoplrcall
aiattackawareness
aicleartarget
aiusefullaim
aiseteyelevel
aiaddally
aiaddenemy
aiaddneutral
aiautofactionoff
Conditions
Plrblocking : true if player is performing a block action
inview : true if entity is within the current view of the camera
pickobject : true if entity is immediately in front of camera (centre screen)
velocitygreater : true if physics based entity velocity greater than value
etimergreater : true if entity timer greater than value
keypressed : true if value representing key is pressed
hasweapon : true if entity has a weapon
strafingleft : true if DarkAI entity is strafing left
strafingright : true if DarkAI entity is strafing right
movingforwards : true if DarkAI entity is moving forwards
movingbackwards : true if DarkAI entity is moving backwards
idle : true if DarkAI entity is in an idle state
aicanshoot : true if DarkAI entity can shoot its target
ducking : true if DarkAI entity is ducking
aiheardsound : true if DarkAI entity has heard a sound
aiaction : true if DarkAI entity is performing the action specified by value
isdarkai : true if entity is a DarkAI entity
aiteam : true if DarkAI entity belongs to team specified by value
aiatpoint : true if DarkAI entity is at a specific point
aicalled : true if DarkAI entity has been called
aitargetdistwithin : true if DarkAI entity target is within the range specified by value
aitargetdistfurther : true if DarkAI entity target is further than the range specified by value
aiatcover : true if DarkAI entity is in cover
aicalledbyplr : true if DarkAI entity has been called by the player
aihastarget : true if DarkAI entity has a target lock
runningforwards : true if DarkAI entity is running forwards

Particle Decal System
Built on the foundation of the existing decal system, a new type of decal allows the spawning of particles and those particle properties can be changed to suit your game. Below is a step by step guide to creating your own particle effects:
1.	Start the software with a blank level and create a simple floor
2.	Go to Add New Entity and select GENERIC  / DECALS / DUSTPUFF
3.	Add this decal to the scene, then right click it to enter the properties dialog
4.	Change the main AI script from DECAL.FPI to DECALPARTICLE.FPI
5.	Leave CUSTOM SETTINGS to YES
6.	Change the values in the Decal Particles group then run test game to see results
Decal Particle Properties
offsety : Vertical adjustment of the start position
scale : A value from 0 to 100, denoting size of particle
randomstartx : Random start area
randomstarty : Random start area
randomstartz : Random start area
linearmotionx : Constant motion direction
linearmotiony : Constant motion direction
linearmotionz : Constant motion direction
randommotionx : Random motion direction
randommotiony : Random motion direction
randommotionz : Random motion direction
mirrormode : Set to one to reverse the particle
camerazshift : Shift particle towards camera
scaleonlyx : Percentage X over Y scale
lifeincrement : Control lifespan of particle
alphaintensity : Control alpha percentage of particle

Bloom and Depth of Field
A new post processing system has been integrated to allow the final game screen to be processed through a final screen shader to create various visual effects. The default effect is Bloom which will saturate the screen with a soft glow around those areas of the screen which are bright. A second effect called Depth of Field is also available which blurs distant parts of the scene to bring objects in the foreground to greater focus. You can also switch off the post processing effect entirely to save performance for older systems. You can change this mode by opening the SETUP.INI file located alongside the main FPSCreator.exe and changing the field called POSTPROCESSING.
The SETUP.INI File
There are many aspects of the editor and game that can be tweaked outside of the design of the level and the FPI scripts. The SETUP.INI file contains numerous flags which you can change to alter the behaviour of the software. A full description of the flags can be found in the associated file SETUPDESCRIPTION.TXT.
Virtual Memory Cap
A new memory readout and cap has been added to the test and build process to give you a greater understanding about how much system memory your level is consuming. A larger level requires more memory to store all the textures, level data and sounds and at some point this inevitably runs out. In order to gracefully report when this memory is exceeded, a cap has been introduced which warns you when your level consumes more than 1.8GB of virtual address space.  As the engine is based on 32-bit code, any level cannot consume more than this amount irrespective of the actual amount of memory available to the system. To ensure you never reach the cap, a new resource panel  is been provided in the test game which you can call up by pressing the TAB key. The bottom bar shows the amount of virtual address space being used at that moment, so when the bar nears full start thinking about creating a second level to progress your game.
Getting Characters To Think
Characters have new powers of intellect thanks to the introduction of DarkAI into FPSC, and with a few tweaks to their properties can become allies, enemies, neutral or grouped into factions. They also have enhanced path finding skills and an increased sense of survival and combat. Below is a step by step procedure to activating a character to use the new DarkAI system:
1.	Start the software with a blank level with a simple floor
2.	Click Add New Entity and select SCIFI / CHARACTERS / AI (Shotgun)
3.	Add this character to your level twice, some distance from each other
4.	Right click the first character and change the appear AI script from appear1.fpi to Dark AI/ appear-ally-team1.fpi and change the main AI script from People/Pace10.fpi to Dark AI/ main-weapon.fpi 
5.	Also delete the shoot AI script entry as this is not used by the above scripts
6.	Finally click Apply Changes to finish configuring this new AI Ally character
7.	Repeat steps 4-6 with the second character, but instead of choosing appear-ally-team1.fpi you chose appear-enemy-team1.fpi
8.	You can now run the test game, run up to the Ally, press G to recruit and attack the enemy
Getting Characters To Climb Stairs
Now your character is running around happily, you will soon realise they are not following you up and down stairs as the original characters once did. This default behaviour was intended, allowing you control over whether characters could follow you into new sections of your level. Granting the ability of characters to move up and down stairs is relatively simple by following the steps below:
1.	Follow the steps outlined in ‘Getting Characters To Think’ to create a simple A vs E level
2.	Click Add New Segment and select SCIFI / PLATFORMS / STAIRCASE METAL
3.	Add a staircase in the centre of the level floor you created earlier
4.	Move up one layer by pressing the PLUS [+] key and then select the GROUND segment
5.	Paint a second floor that meets the top of the staircase with enough room to run around
6.	Now click the ‘Create New Waypoint’ icon (third from the right in the toolbar)
7.	This will create a waypoint node. Click and hold the node and drag it to the centre of the segment that meets the top of the staircase (do not place it right on the edge at the top of the stairs as you want the node to represent the floor segment, not the staircase)
8.	Hold down SHIFT key and then left click on the node you just dragged
9.	It will create a second node linked to the first. As before, click and hold this second node and then (without releasing the left mouse button), press the MINUS [-] key.
10.	Whilst still dragging the second node, position it in the centre of the segment that represents the bottom of the stairs (not on the stairs, or below the stairs, but the floor segment that the player would stand on once they have fully descended the stairs)
11.	Now click the test game, recruit the ally (by pressing G) and run up the stairs. Your ally should follow you, and if the enemy catches sight of you, so should he!
Getting Characters To Go Through Certain Doors
Now your new DarkAI character is following you almost everywhere, you may have noticed that they stop at certain door segments and proceed no further.  This is the intended behaviour, and is the result of the way the stock doors have been designed. By default most stock doors will allow the character to pass though, but some doors will prevent entrance.  If you are a designer of your own door segments, you must bear in mind that only doors that use a CSG punch mesh that starts with the four letters “door” will instruct the DarkAI obstacle system to recognise the segment as a door and allow characters to pass though. In the segment FPS file, here is an example of a correctly named CSG punch mesh which allows DarkAI to recognise this door:
partmode2       = 1
meshname2       = meshbank\scifi\scenery\doors\door_b\door_b_punch.x
Getting Characters To Talk
1. Locate this folder - files/audiobank/darkvoices. This has a converter app in it called ConvertAllWAVFiles.exe
2. Now place all of your wav files you wish to convert to lipsync files inside this folder
3. Execute the convert app
4. All of the wave files will now have an associated lipsync file for it
5. Place the wav files along with the lipsync files wherever you want to access them
6. Now open up your talking characters fpe file. You will see the following
;ai
aiinit	   = appear1.fpi
aimain	   = behaviours\greet player.fpi
aidestroy     = destroy\fadecorpse.fpi
soundset      = male
soundset1     = audiobank\darkvoices\canihelpu.wav
7. Point soundset1 to the talking wav file you wish to use
8. Use the fpi file that is in scriptbank/behaviours folder. This is just a generic (template) fpi for talking characters. You will probably want to edit it for your own use of the character
9. If you are having problems generating a LIPSYNC file, try downloading the SAPI SDK from Microsoft at: http://download.microsoft.com/download/B/4/3/B4314928-7B71-4336-9DE7-6FA4CF00B7B3/SpeechSDK51.exe
10. Be aware that only characters from the default stock character which are entitled (Talker) can use the lipsync data to animate the mouth, older stock characters cannot as they would require extra bone data in the head of the character model.  Assume that all FPSC characters cannot use the lipsync data unless they have been expressly designed with the additional mouth bone system in mind.  For reference, all characters in model packs 44 and 45 allow full lipsync control.
Getting A Crate To Spawn On A Trigger
1. Create a floor, a light source, a trigger zone and crateA from the scifi entity category
2. Change the trigger zone main script to PLRINZONEACTIVATEUSED.FPI and add crateA to the IFUSED field
3. Edit the RESPAWN details of the crateA entity to the following; 
No, 99, 99, Yes, No, 50, 0, 1, 0, 0, 0, 90, 0, 0
4. Remember to APPLY CHANGES after editing the entity properties and run test game
5. As soon as the player steps into the trigger zone, the crate should slowly spawn 99 crates
Crash when use POSTPROCESSING=2 with some HUD models
From V117, a new post processing mode (2) allows depth of field effects in the final game render, but has the side effect of being incompatible with some graphics systems when using certain HUD models. If this crash occurs for you, simply change the postprocessing=1.
Automated feature -Some characters, most notable Bond1's excellent models often include hard modelled melee weapons. The code automatically detects if you want the model to use another weapon and hides the melee weapon. Models must however use the 
default FPSC limb naming convention: MELEE-WEAPON-LEFT or MELEE-WEAPON-RIGHT.
Video Splash
Added Splash.avi video option.
Additional FPI actions and conditions
playfullvideo=x – X=1, plays the full version of the next video called by video=x, preventing the player interrupting the playback.
plrwobble=x – sets the amount of 'wobble' affecting the player as they move around.
plrdeath=x –where X equal the direction of fall for the player
X=1 Fall left
X=2 Fall right
X=3 Fall forward
X=4 Fall backwards
X=5 Fall randomly
plrdeathspeed=x where x is the speed of the players fall.
plrdeathbounce=x where x is the amount of 'shake' when the player hits the floor.
plraction=X – Forces a one off player action
X=1 Fires current weapon
X=2 Zooms current weapon
X=3 Reloads current weapon
X=4 Crouches player
X=5 Jumps player
X=6 Peeks player left
X=7 Peeks player right
X=8 Forces “use” key
X=9 Forces left mouse click
X=10 Forces right mouse click
X=11 Forces current weapon jam
plrforcemove=X – if positive, turns on auto move forward for player, a negative value forces an auto move backwards as if the appropriate movement key had been pressed. A setting of 0 (the default) disables auto move
Emitforce=x emits X amount of force from the current entity as a pulse. In a range of 0.0+ (default 1.0)
Forcedamageon=x 1=allows force damage (the default) any other number prevents damage
mousesclick=x (condition) – Returns the current mousestate.
X=1 returns true if left button is depressed
X=2 returns true if right button is depressed
X=3 returns true if both left and right buttons are depressed
crosshair=x, where 1 displays a crosshair if available and x=0 disables them. The default is on
weapontoslot=x where X is the next weapon slot to be used, X=0, use next free slot.
Armon = x 1=Turn on body armour, 0=No body armour, damage
is deducted from armour before health.
SetArmx=x, X cord of the armour display
SetArmy=x, Y cord of the armour display
SetArm=x, Sets body armour value to X
ArmInc=X, add X to your current body armour
ArmDec=X, subtract X from your current armour.
Airon=X - X=0 is off, X=1 acts like an aqualung. X=2 acts like lungs, restoring air to the amount set by SetAirMax when you surface.
Addair=X - Add x to air
Setair=X - Sets air to X
Setairx=X - Sets air display X cord to X
Setairy=X – Sets air display Y cord to X
Setairmax=X – sets the maximum air allowed.
Setair=X - Sets air to X
Setairtime=X – Where X is the number of milliseconds underwater before air is reduced
Setdrowntime=X - Where X is the number of milliseconds underwater before drowning damage occurs.
Instantdrown=x – If X=1 (default) running out of air results ininstant death, otherwise x=0 reduces heath.
AirGreater=x (condition) - returns true if air is greater than X.
AirLesser=x (condition) - returns true if air is less than X.
AirEqual=x (condition) - returns true if air equals X.
Samefloorasplr(condition)  - returns true if the entity is on the same floor as the player.
Entityfloorequal=x - returns true if the entity is on floor X
plrfloorequal=x - returns true if the player is on floor X
plrsetimmune=x, when set the anything other than 0, player is immune from all damage!
plrisimmune (condition)– returns true if the player is immune from damage.
Arrowkeys=X - toggles use of the arrow keys for movement
Peekkey= X - toggles use of the the peek keys
Crouchkey= X - toggles use of the crouch key
Jumpkey= X - toggles use of the jump key
Walkkey=X - toggles use of the walk key for movement
Runkey=x - toggles use of the walk key for movement
Setforcedamage – Sets the amount of damage the next force burst will cause.
Compasson = Turns on the compass
Compassoff= Turns off the compass
CompassX = Compass x coordinate on screen
CompassY = Compass y coordinate on screen
Compassspin = Sets the compass to spin rather than the needle
Needlespin = Sets the needle to spin rather than the compass.
radaron=x, where 1 turns on the dark radar feature, using blip1.png,blip2.png, etc, stored in databank to represent teams (1-10)  non Dark AI's blips show as enemy (blip2)
radarx=x the radar x cord of the radar centre
radary=x the radar y cord of the radar centre
rotateblip=x, 1= enables radar blip to show entity facing
radarrange=x the range that entities show on the radar in segments
plrspeedmod=x where x adjusts the player speed by X%
AddRawText = String, Adds the string to the current RawText text.
Setisobjective, the object is set as the objective. A pointer, using the same format as the radar and the compass will point in the direction of the objective. Entities and Characters can all be
set as objectives. This is NOT the same as the isobjective in an objects settings.
setobjectivex=x. Where x= the x coordinate of the centre of the objective pointer
setobjectivey=x. Where x= the y coordinate of the centre of the objective pointer
setobjectivemode=x where x=0 hide objective set objective, x=1 always show, x=2 show on same floor only.
setvarrnd=x or setvarrnd=var x. sets system variable or named var to a random value between 0 and x
Randomize - resets the rnd seed to the timer
Emptyreloadonly (gunspec) - Won't allow reload until weapon is empty. E.g. M1 Garand, flintlock, etc.
setmaxweapons=x - sets the maximum number of weapons allowed in the players inventory. Exceeding X prevents pick up.
plrweaponsgreater=x (condition) - returns true if weapons in inventory is greater than X
plrweaponslesser=x (condition) -  returns true if weapons in inventory is less than X
plrweaponsequal=x (condition) - returns true if weapons in inventory is equal to X
$ARM = system variable armour
$AIR = system variable air
$FPS = system variable FPS
$WAT = system variable water height
$MAX = system variable maximum weapons slots
entitydamagemult=x multiplies the entities damage by x%
weaponinslot=x (condition) - returns true if slot X contains a weapon
playerstrength=x - multiplies the players strength by X%
currentweapon=x (condition) - returns true if the currently held weapon is in slot X
cullmode=X - 0=Legacy culling, 1=Legacy+dynamic entity cull based on entity size- default, x=1 and system calculated cull range
cullrange=X - when cullmode=1 sets the range the entity will be culled at, overriding system defaults
hide - hides the current entity
show - shows the current entity
cullmod=x - where x is the multiplier for the new culling - x=default 400, while entity size dependant 100=approximately 1 segment.
$DIS - returns the current entities distance from the player.
Increased maximum radar blips to 20 to bring in line with maximum AI teams.
Changes to cull system to improve performance and added entity fade for smoother appearence.
plrisrunning=x (condition) - X=1 returns true if the player is running, x=0 returns true if player not running.
plriszoomed=x (condition) - X=1 returns true if player weapon currently zoomed, X=0, returns true if weapon not zoomed
plrisusingreload=X (condition) -  returns true if reload pressed
plriscrouching=x (condition) - X=1. returns true if player crouched, x=0 returns true if player not crouching
plrisonground=x (condition) - X=1 and player is on ground returns true, X=0 and player is not on ground returns true.
plrisjumping=x (condition) x=1 returns true if player is jumping, x=0 returns true if player is not jumping.
swaptoalt - swaps to alt fire on the current weapon
firemode=x (condition) - returns true if current firemode=x, 0=normal, 1=alt fire mode
plrrotatex=x - rotate camera angle x to X
plrrotatey=x - rotate camera angle y to X
entrotatex=x - rotate entity angle x to x
entrotatey=x - rotate entity angle y to x
entrotatez=x - rotate entity angle z to x
moveplrx=x - adds a one off X to players X velocity
moveplry=x - adds a one off X to players Y velocity
moveplrz=x - adds a one off X to players Z velocity
$DIF - returns the current entities real world distance in feet from the player.
$DIM - returns the current entities real world distance in metres from the player.
onradar=x (condition) returns true if character on radar and x=1, else returns true if x=0 and character not on the radar.
scale=x or scale=x y - scales characters to scale X or scale X+ a value between 0-Y
plrlastfired=x (condition) returns true if weapon path X is the last player weapon fired or x=the slot the weapon is carried in.
radargreater=x y (condition) returns true is an entites range on the radar is greater (in segment size) than x and Y=1, else returns true if range less than x and Y=0
radarequal=x y (condition) returns true is an entites range on the radar is equal (in segment size) to x and Y=1, else returns true if range does not equal x and Y=0
holster=x where x=1, player can swap/holster weapons as normal, x=0, player cannot holster or swap weapons.
globalnoair=x where X=1 set a global zero air, and x=0 sets air on. uses standard air settings otherwise.
setnoairdamage=x where x is the about of health lost when player has no air left.
gravitygun=x (gunspec) - turns weapon into gravity gun, allow plr to pick up an object with right click within range X, right click again, drops, left click throws
magnet=x (gunspec) - turns gravity gun into magnet, left click hurls held object towards player
gravitystrength=x (gunspec) - sets the psyhics weight the gravity gun will handle
magnetstrength=x (gunspec)  - sets the psyhics weight the magnet will handle
entityishigher=x (condition) - returns true if the entity is X units higher than the player
entityislower=x (condition) - returns true if the entity is X units lower than the player
entityfloorhigher=x (condition) - returns true if the entity is X floors higher than the player
entityfloorlower=x (condition) - returns true if the entity is X floors lower than the player
plrpickon=x, x=1 then allow player pick up with right click
plrpickrange=x, sets the range at which the player can pick up an entity with right click
emitflash - Emits a flash from an entity
setflashred=x - sets the next flashes red element
setflashgreen=x - sets the next flashes green element
setflashblue=x - sets the next flashes blue element
setflashrange=x - sets the flash range of the next flash emitted, default=600
flashing=x (condition) returns true if a spotflash is in process and x=1 or returns true if no spotflash is in process and x=0
logicburst - give entity temporary logic burst, effectively setting to always active for a few moments.
spawnsleft=x y (condition) returns true if spawnsleft=x and y=1 or returns true if spawnsleft<>x and y=0
spawnsgreater=x y (condition) returns true if spawns are greater than x and y=1 or returns true if spawns are less than x and y=0
damageby=X (condition) where X is either a weapon path (e.g. ww2/colt45)
 or the string "collision", "melee", "indirect", "flak" or "falling".
 or X= the slot number the weapon is carried in.
plrdamagemult=x where x is a multiplier for the current damage caused by the player.
plrnotzoomed (condition) - returns true if player is not zoomed
plrnotrunning (condition) - returns true if player is not running
plrnotjumping (condition) - returns true if player is not jumping
plrnotcrouched (condition) - returns true if player is not crouched
plrnotusingreload (condition) - returns true if player is not pressing reload
notonradar (condition) - returns true if entity is not on the radar
setlistkey=x y - X from list below, Y=new scan code
X= 1 = plrkeyW
x= 2 = plrkeyS
x= 3 = plrkeyA
x= 4 = plrkeyD
x= 5 = plrkeySpace
x= 6 = plrkeyC
x= 7 = plrkeyReturn
X= 8 = plrkeyR
X= 9 = plrkeyQ
x= 10= plrkeyE
X= 11= plrkeyShift
addrawvar=X where X=var name or number. Adds the named variable to the current rawtext string.
Added blood of floor for character V character
sin=x y - set variable X to sin of Y
cos=x y - set variable X to cos of Y
damagetimegreater=x - returns true of last entity damage time greater than X
scalehudx=X Y - rescales hud named X's X scale to Y
scalehudy=X Y - rescales hud named X's Y scale to Y
changehudalpha=X Y - changes hud X to alpha Y
jamchance=X.0 (gunspec) = percentage chance of a gun jammed due to overheat (Reloading clears jam)
overheatafter=x (gunspec) = the number of shots fired before the chance of jamming becomes active.
cooldown=x (gunspec) = time in millisecs between shots to completely prevent jamming
currentweaponjammed (condition) = returns true if the current weapon is jammed.
nosubmergedfire=x (gunspec) - prevents the weapon firing while underwater.
waterflow=x - sets the force of water flow effecting the player and entities if in water
watercurrent=x - sets the direction in angles of the water flow.
removeplrweapon=x where x is either the slot number or the weapon path e.g. scifi\autoslug - removes the weapon from the player, freeing the slot.
giveplrweapon=x where x is the path of the weapon e.g. scifi\autoslug. The weapon must exist somewhere in the level or will fail silently.
entitysetimmune=x - where x=1 set the entity to be immune from damage, x=0 set to receive damage
isentityimmune (condition) - returns true if current entity is immune
isentitynotimmune (condition)- returns true if current entity is not immune
resetglobalsonreload=x - x=0, carries default global variables over to the next level. X=1 resets default global variables on loading.
entitycam - moves camera to entity position, using entities rotation.
playercam - restores camera to player
lastcam - swaps to previous camera.
playgunanimation=x y - where x is the animation start frame and y is the animation end frame.
camrotationon=x if x=0 the camera uses the entities rotation, x=1 use user set rotation
setcamoffsetx=x - X offset for entity camera
setcamoffsety=x  - Y offset for entity camera
setcamoffsetz=x  - Z offset of entity camera
setcamrotx=x - X entity camera rotation if cam rotation on
setcamroty=x - Y entity camera rotation if cam rotation on
setcamrotz=x - Z entity camera rotation if cam rotation on
scalelimb=x y - scales limb X to scale y
hidelimb=x - hides limb X
showlimb=x - shows limb x
Added new gun animation options to fit with default weapons
fix jam (gunspec animation)=X Y where x is the start animation and Y is the end animation
hand push
hand dead
jammed
change firemode
hand button
hand take
presetgunanimation=x, plays a present gun animation, if it exists. where x= one of the following: (no action is taken if animation doesn't exist)
fixjam
handpush
handdead
jammed
swaptoalt
handbutton
handtake
select
idle
move
run
startreload
endreload
cock
lockemplacement - locks the player to a 45 degree fire arc
freeemplacement - frees the player from the fire arc.
cullevenifimmobile=x where x=1 system will include immobile object in cull system, normally exluded to account for windows and doors.
cull fix
tweaks and fixes for scaling
plrweaponidle (condition) - returns true if the player weapon is idle.
plrweaponnotidle (condition) - returns true if the player weapon is not idle.
Speed tweak
plraccuracymult=x. Modifiers the player accuracy by x%
entityaccuracymult=x Modifiers the entity accuracy by x%
debugcursor=x y
debugvar=var name
debugtext=text
wireframe=x 1=wireframe mode, 0=solid.
plrcamoffseton=x - 1 allows player camera offsetting.
plrcamoffsetx=x - x player camera offset
plrcamoffsety=x - y player camera offset
plrcamoffsetz=x - z player camera offset
further tweaks to culling.
fix to segment debug sphere issue.
Entity damage multiplier tweaks.
Mutate=x y - mutates the character/object limbs between scale X and Y
Improvements to player carry and gravity gun, objects now dropped if attempts made to life throw ceiling/objects.
setobjectiverange=x - sets the range an objective marker is dropped from the radar
objectiverangelesser=x (condition) - returns true if the entity is an objective and it's range is less than x
objectiverangegreater=x (condition) - returns true if the entity is an objective and it's range is greater than x

V1.20
Fixes to targeting.
Tweaks to performance and stability
Attempts to reduce memory usage.
Fixes to gravity platform
Fixes to floor finding for all characters regardless of scale
Fixes to usefullaim to resolve occasional crash on multi-spawned characters.
Reinstated MOVEBACK
Adjustments to $EPX etc
Adjustments to water velocity
Fixed flak not changing
Added SHOWFLAKEXPLOSION=1/0
Fixes to prevent player being pushed from universe. WIP
makevideotexture=path x (x animation id between 1-10)
usevideotexture=x (x animation id between 1-10)
deletevideotexture=x (x animation id between 1-10)
pausevideotexture=x (x animation id between 1-10)
resumevideotexture=x (x animation id between 1-10)
setvideotexturespeed=x y (x animation id between 1-10, y=1-100)
setvideotexturevolume=x y (x animation id between 1-10, y=1-100 - in most case all sound will stop below 85)
stopvideotexturex (x animation id between 1-10)
Fixes to prevent rawtext and hudtext conflicts.
Fix to weapon jam regarding shared ammo.
Tweaks to culling.
Tweaks to logic priority.
Performance tweaks.
Fix to SETVARRND=x y
Added WATEREQUAL,WATERGREATER,WATERLESSER and WATERON conditions.
Additional colour parameters now passed to shaders
Fixes to $CA, $RCA and $CLA to allow editing of ammo values using variable shortcuts. Additional fix to account for alt fire modes.
Fixes to flak which caused flak to freeze in mid air if generated too close to an obstacle
Fixes to allow jamming to affect full auto fire weapons
Gunspec addition – JAMTIMER=x where x equals the miliisecs before jamming can occur, this allows the user to set a greater chance of jamming for faster firing weapons.
Various tweaks
Added WATERON,WATERGREATER,WATERLESSER conditions
added JAMTIMER gunspec
By popular demand, added "basic" flashlight, and actions FLASHLIGHT=X
(0-1),FLASHLIGHTRED=X (0-255), FLASHLIGHTGREEN=X (0-255), FLASHLIGHTBLUE=X
(0-255), FLASHLIGHTRANGE=X (0+).
Fix to character scaling which caused some characters to appear slightly too small due to new character scale system.
Fix to new internal variables.
Fix to RAYCAST action.
Tweaks to flak
Added FPE command "CUSTOMBIPED" to exclude custom models from certain features to resolve issues to resolve issues experienced by a small number of users. Generally not required for majority of custom models
Fixes to SWAPPLRWEAPON=x
Added SHOTBYAMMO=weapon name.
Tweaks to character avoidance system.
Tweaks to physics to fix to collisons issues.
Flak fixes
Added PLRFIRED=x, PLRFIREDLESSER=x and PLRFIREDGREATER=x
Added STATEGREATER=X and STATELESSER=x
Fixes to reduce editor crashes on lower end machines.
Further tweaks to collision system
Fixes to burst fire and jamming
Added LMBGREATER,LMBLESSER,RMBGREATER,RMBLESSER
Added gunspecs (animation). PULL UP=X Y, PULL DOWN=X Y,PULL LEFT=X Y,PULL RIGHT=X Y
Added 	PULLUP,PULLDOWN,PULLEFT and PULLRIGHT to action PRESETGUNANIMATION=x
V120.16
Tied flak maths to timer system so faster frame rates no longer affect
tragectories or gravity
Adjusted WW2 and SCIFI grenades so they no longer use Recoil, looks much much
better
Fixed SNIPE10.FPI so characters can reload properly and not have rapid fire
issues
Increased 'force damage' (exploding barrels, grenades) by 20% to match the
original V1 damage levels
Moved SHROUDSIZE to field in SETUP.INI with default of 10. Low End users can
set this back to 5 if have issues
New optimisation converted WAV files to OGG but did not load them during
standalone games, now fixed
Ensured gravity incrementor tied to timer system so characters can once again
climb stairs
Re-activated sound of water splashing when entity drops into it (controlled
with AIACTCREATESPLASHSOUND)
Fixed issue of hearing player wading when water level just under dry floor
Fixed serial code system which will resort to FREE mode if userdetails uses
EMPTY field data
Applied SNIPE10.FPI fix to SNIPE.FPI for legacy levels (WW2)
Applied timer system to lift movement and entity mover system
Fixed lift system so player is once again moved when associated with entity
Fixed issue of MOVEFORE and RUNFORE commands not working on all characters

V120.17
Fix for cartoon characters not finding floor.
Ported Terry's fix for save game crash.
Ported Terry's fix for clone sound crash.

V120.18
Applied Terry's fix for possible duplicate image error on save game.

V120.19
Lee editor fixes
Fix to potential targetting crash
Adjustments to player wobble to attempt to calm "bobble head"
performance tweak
screen grab fix to prevent physics issues when F12 held
added delaydestroy=x to allow for characters to be destroyed in x millisecs

V120.20
Tweaks
Added path paramiter to weaponinslot=path x as well as weaponinslot=x

V120.21
Applied S4Real timer fixes (nice one) and his typo correction.
Tweaked timer handling to address sound issues.
Adjusted plraction=4 (crouch) to allow player to stay crouched.
Altered plraction=x to accept 0 to cancel current action
Fix no player walking or jumping sounds
V120.22
Fixed Terror strike error - DBP can't clone OGG.
Fixed build game hud spacing.
V120.23
Fixed pooled and shared ammo being deleted on load game.
Fixed videobank transfer to built game issue
Reinstated 'bobble head' fix - shouldn't have removed it in the first place!
Fixed flicker decals caused by performance improvements.