β‘ WAC actions
Every action Joint Ops' WAC compiler knows: the things a script can do once its triggers are true. Generated from the game's own command table, with what each one does, whether players see it, and how sure we are.
Server only, or sent to every player?
The map's script runs on the server. Most actions change the game world on the server (kill a group, move an AI, open doors), and the normal game updates then reach players by themselves. A few actions only change what each player's own PC draws or plays (text, sounds, hiding objects, colours): the game marks those to be sent to every player. An action that changes only the screen but is not sent does nothing visible in multiplayer: that is exactly why the colour commands did nothing before the FMJ DLL (see WAC colour commands).
How to read a command card
- Use it like: one example line.
- Takes: what goes between the brackets, in order.
- Sent to players: whether the server passes the action on to every player.
- Tested in a match (13 Oct): what happened when we fired it on a real host with a player joined (see the live test).
- How sure are we: "Traced in the game's code" or "not tried in a match yet". If you test one, tell us in TAC Mappers HQ.
114 actions: reset · Gkill · Gremove · Gsetaccuracy · GtoWP · kill · remove · teleport · GroupMin · GroupMax · GroupAtt · GroupSpawn · GroupHP · opendoors · closedoors · text · wave · hideSSN · unhideSSN · disableSSN · enableSSN · holdSSN · unholdSSN · setaccuracy · SSNtoWP · killSSN · removeSSN · teleSSN · SSNwave · SSNradio · SS2SSN · SSNanim · SSNMin · SSNMax · SSNAtt · SSNSpawn · SSNHP · SSNADDHP · ssn2ssn · ssnrelease · ssnface · ssnturn · ssnguard · ssnname · ssnpspd · ssncspd · ssnuse · set · add · sub · inc · dec · store · load · TOD · targetfx · ammo2tgt · fx2tgt · ammoarea · sound2tgt · flash · farflash · quake · win · lose · music · skyspeed · skyheight · fogtype · fogdist · movefog · rain · snow · overcast · Help · text# · consol · consol# · sound · forceanim · tele · fall · fov · ammorain · fxrain · lightning · face · anim · sunfade · gain · squadclear · blockfire · colorfade · sun · sky · ground · floor · ceiling · cloud · fogcolor · fog · skyfogcolor · skyfog · crash · ptext · pwave · pconsol · AddExp · dropflare · ammo2ssn · fx2ssn · ppunt · pkillpunt · psetvar
All actions, A to Z
add
Adds a value to a variable.
| Tested in a match (13 Oct) | works (host + players) - G160 5 -> 8. Reliable. |
|---|---|
| Use it like | add(V10, 5) |
| Takes | variable a variable: V0-V255, G0-G255, a VAR name, or a named value such as RND, value a number or a variable |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Whole numbers; wraps around at about 2 billion. High confidence. |
AddExp
Adds experience points to a player's raw stats.
| Tested in a match (13 Oct) | inconclusive - Ran; experience is not in the pools and the score screen was not shown. Not proven by this test. |
|---|---|
| Use it like | AddExp(player, 50) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number points |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Needs a nonzero amount; negatives are accepted. Part of a positive award is also shared down a chain of linked occupants (half, then a quarter). It does not use score.ini. Medium confidence on what players see. |
ammo2ssn
Makes an object fire one round of an ammo type from its model's fire points.
| Tested in a match (13 Oct) | inconclusive - ammo2ssn(60 mm mortar,49,50) at s36: tower 49 got flag 0x4000 on the host only; no muzzle flash, round or impact in the joiner shots of the tower (s42-s52). Unproven. |
|---|---|
| Use it like | ammo2ssn(ARTYRND, 3382, 1484) |
| Takes | ammo an ammo name from ammo.def, e.g. ARTYRND (the game also tries ammo_ + the name), ssn the shooter's SSN, ssn the target's SSN (does not aim the shot) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | The third SSN is stored as the target but does NOT aim the shot: it flies where the model's fire point points. The shooter must have health above 0 and a model; shots alternate between its first two fire points. High confidence. |
ammo2tgt
Fires one round of an ammo type from a teleport target marker, in the direction the marker faces.
| Tested in a match (13 Oct) | inconclusive - ammo2tgt(60 mm mortar,21) at s180, 13 m from the host: no launch or impact seen (s185-s193), host health unchanged (16836), no pool change. No slowdown this time. Unproven; the 60 mm round did not cause the round-1 slowdown. |
|---|---|
| Use it like | ammo2tgt(ARTYRND, 2) |
| Takes | ammo an ammo name from ammo.def, e.g. ARTYRND (the game also tries ammo_ + the name), target a teleport target marker number (the target markers placed in MED, 1-99) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Aim it with the marker's heading/pitch in MED. Nobody owns the shot. High confidence. |
ammoarea
Drops one round of an ammo type at a random spot inside an area.
| Tested in a match (13 Oct) | works (host; players see the result) - Blackhawk 44 on the helipads in area 18 went 8000 -> 7795 health on host AND joiner. Right after this step the host slowed badly (see findings); the cause is not proven. Works; check it is not what slowed the server. |
|---|---|
| Use it like | ammoarea(ARTYRND, 12) |
| Takes | ammo an ammo name from ammo.def, e.g. ARTYRND (the game also tries ammo_ + the name), area an area: the zone ID you gave the area in MED/Nile |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | It starts about 200-250 units above the ground (units read as metres; not checked in game). Works on an inactive area too. High confidence on the code. |
ammorain
Drops one round of an ammo type at a random spot near your own player.
| Tested in a match (13 Oct) | inconclusive - R2: ran at s140 while the host was dead (death screen); the driver did not capture the step. Nothing to see. Still unproven. Retest with the host alive and looking at the ground. |
|---|---|
| Use it like | ammorain(ARTYRND) |
| Takes | ammo an ammo name from ammo.def, e.g. ARTYRND (the game also tries ammo_ + the name) |
| Sent to players | No - server only |
| Multiplayer | Single player, or the host's own player on a listen server. Other players are not affected, and a dedicated server has no host player. |
| How sure are we | Traced in the game's code |
| Notes | With no player (dedicated server) retail may read a null pointer (OpenNova guards it): avoid on dedicated servers. Not tested. |
anim
Sets your own player's body animation state.
| Tested in a match (13 Oct) | inconclusive - anim(idle_prone) at s68, on foot on the tower: host camera height and framing identical before and after (s65-s84). Round 1 also saw no camera change. Two rounds without a visible change; probably overridden by the live player stance. Not rated broken without a third-person view. |
|---|---|
| Use it like | anim(idle) |
| Takes | anim an animation name (the game looks up anim_ + the name) |
| Sent to players | No - server only |
| Multiplayer | Single player, or the host's own player on a listen server. Other players are not affected, and a dedicated server has no host player. |
| How sure are we | Traced in the game's code |
| Notes | Debug/old command. High confidence. |
blockfire
Stops (1) or allows (0) your own player firing weapons of armory category N.
| Tested in a match (13 Oct) | inconclusive - Ran for all 10 categories; no fire input was sent, so the block could not be seen. G160 stayed 0. Needs the driver input extension. |
|---|---|
| Use it like | blockfire(3, 1) |
| Takes | number a weapon category 0-9, number 1 = block, 0 = allow |
| Sent to players | No - server only |
| Multiplayer | Single player, or the host's own player on a listen server. Other players are not affected, and a dedicated server has no host player. |
| How sure are we | Traced in the game's code |
| Notes | Blocks new trigger pulls only. Lasts until changed or the next map. High confidence. |
ceiling
Sets the 'ceiling' colour block, the other indoor auto-exposure colour.
| Tested in a match (13 Oct) | works (host only - players do not see it) - ceiling(255,255,0) added a strong yellow cast (walls salmon, rifle yellow) on the host; joiner unchanged; it stayed to the end. Strong indoor effect, host only, and it stays. |
|---|---|
| Use it like | ceiling 40 20 20 |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only (it is not overwritten by time of day, but only the host's PC sees it). With the FMJ onHook DLL on the server and every client it is sent to all players. |
| How sure are we | Traced in the game's code |
| Notes | Used by retail TAC map Misty Beach. Medium confidence on the visible effect. |
closedoors
Closes every door of the buildings in a door group.
| Tested in a match (13 Oct) | inconclusive - closedoors(16) at s132: no crash, no change. 03TR has no door groups. |
|---|---|
| Use it like | closedoors(7) |
| Takes | number a door group number (the group number set on the building) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Buildings only. High confidence. |
cloud
Sets the colour of the flat cloud layer.
| Tested in a match (13 Oct) | inconclusive - cloud(255,0,0) at s68 and colorfade(4)+cloud(0,0,255) at s76: no red or blue anywhere in the host or joiner sky (shots s71-s89). Confounded: skyheight had just removed the host cloud layer from view. Retest cloud on an unmodified sky. |
|---|---|
| Use it like | cloud(200, 200, 220) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only (it is not overwritten by time of day, but only the host's PC sees it). With the FMJ onHook DLL on the server and every client it is sent to all players. |
| How sure are we | Traced in the game's code |
| Notes | Medium-high confidence. |
colorfade
Sets the fade time in seconds for the colour commands that follow it.
| Tested in a match (13 Oct) | inconclusive - The helper cloud() colour never became visible (see cloud), so the fade could not be seen. Same confound as cloud. |
|---|---|
| Use it like | colorfade(5) |
| Takes | number a number (or a variable) |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only (it is not overwritten by time of day, but only the host's PC sees it). With the FMJ onHook DLL on the server and every client it is sent to all players. |
| How sure are we | Traced in the game's code |
| Notes | Put it BEFORE the colour commands. Proven in game with the FMJ DLL (2026-10-05). High confidence. |
consol
Shows a line in every player's system message area (where triggered text appears).
| Tested in a match (13 Oct) | works (host + players) - "FMJTEST consol" top-left on host and joiner. Reliable. |
|---|---|
| Use it like | consol("TYPHOON RISING - TAKE CARE!") |
| Takes | text text in double quotes (up to 63 characters) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
consol#
Shows text followed by a number in every player's system message area.
| Tested in a match (13 Oct) | works (host + players) - "FMJTEST consol# humans 2" on host and joiner. Reliable. |
|---|---|
| Use it like | consol#("Round:", V1) |
| Takes | text text in double quotes (up to 63 characters), number a number (or a variable) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
crash
An old alias of skyfogcolor with a fourth number that is ignored.
| Tested in a match (13 Oct) | no visible effect (as documented) - No visible change; no crash. Use skyfogcolor (with the FMJ DLL) instead. |
|---|---|
| Use it like | crash(110, 12, 12, 0) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255, green ignored |
| Sent to players | No - server only |
| Multiplayer | Retail: host only and overwritten by time of day. The FMJ DLL does not change crash, so use skyfogcolor instead. |
| How sure are we | Traced in the game's code |
| Notes | The fourth value is ignored. High confidence. |
dec
Takes 1 from a variable.
| Tested in a match (13 Oct) | works (host + players) - G163 0 -> -1 (no clamp). Reliable. |
|---|---|
| Use it like | dec(V3) |
| Takes | variable a variable: V0-V255, G0-G255, a VAR name, or a named value such as RND |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Can go below 0. High confidence. |
disableSSN
Disables a vehicle so it cannot be driven.
| Tested in a match (13 Oct) | works (host + players) - B5: AI-driven red SUV 34 went from speed 20377 to 0 and stopped in place, with flags +0x10000000, on host and joiner (s68); it stayed stopped until enableSSN at s92. B1: the flag also appeared on helo 44 on both. Stops a moving AI vehicle for everyone. Helo 44 never tried to take off in B1 or the undisabled B4 control (event 44 never fired), so the aircraft case is still unshown. |
|---|---|
| Use it like | disablessn(4137) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Vehicles and aircraft check the flag before reading the driver. High confidence. |
dropflare
Makes a vehicle or aircraft drop flares.
| Tested in a match (13 Oct) | inconclusive - dropflare(44) at s44 (players aboard, B2) and dropflare(1714) at s140 (empty Little Bird, B5): no flares in any host or joiner shot 4-15 s later and no new objects in pools 0/1. Not seen twice; it may need an airborne or manned aircraft, or the flares fell between shots 3-4 s apart. |
|---|---|
| Use it like | dropflare(4137) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Uses the vehicle's own flare points. Whether players see the flares in MP is not verified. High confidence on the code. |
enableSSN
Lets a vehicle disabled with disableSSN be driven again.
| Tested in a match (13 Oct) | works (host + players) - enableSSN(34) at s92: the flag cleared and SUV 34 drove again (speed 18940, then 20291) on host and joiner. Pairs with disableSSN. |
|---|---|
| Use it like | enablessn(4137) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
face
Sets your own player's facial expression for a while.
| Tested in a match (13 Oct) | no visible effect (as documented) - Nothing; no crash on host or joiner. No-op in JO. |
|---|---|
| Use it like | face(HAPPY) |
| Takes | face a face: NORMAL, HAPPY, SAD, SMIRK, ANGRY, SURPRISE, DISGUST, FEAR or AGGRESSIVE |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Does nothing useful in multiplayer or single player (see notes). |
| How sure are we | Traced in the game's code |
| Notes | Sent to every player (each sets his own face), but there is no visible effect in Joint Operations (no face files, renderer ignores it). High confidence. |
fall
Debug: lifts your own player up slightly.
| Tested in a match (13 Oct) | works (host; players see the result) - Host player lifted from z 3.4 m to z 471.9 m (the joiner saw 460.8 m) with the airborne flag 0x2000: about 470 m, not "slightly". The host shot shows open sky. Deadly: a ~470 m drop. Host player only. |
|---|---|
| Use it like | fall |
| Takes | none |
| Sent to players | No - server only |
| Multiplayer | Single player, or the host's own player on a listen server. Other players are not affected, and a dedicated server has no host player. |
| How sure are we | Traced in the game's code |
| Notes | With no player (dedicated server) retail reads a null pointer: possible crash (not tested). Amount of lift not verified. |
farflash
A distant lightning flash with thunder from behind.
| Tested in a match (13 Oct) | inconclusive - G105 = 6 proves farflash ran on passes s93-s98. No flash in host s95 / joiner s96 or any other shot. Needs burst screenshots. |
|---|---|
| Use it like | farflash() |
| Takes | none |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
flash
A lightning flash overhead with close thunder.
| Tested in a match (13 Oct) | inconclusive - G104 = 6 proves flash ran on 7 passes (s84-s90). No shot shows a flash: lower-scene brightness identical (95,92,78 host / 77,81,71 joiner) in every shot s84-s107, including host s89 and joiner s90. Shots are 3-4 s apart and a flash lasts ~0.26 s; needs burst screenshots. |
|---|---|
| Use it like | flash |
| Takes | none |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | WolfRAT's server.wac uses it. High confidence. |
floor
Sets the 'floor' colour block, one of two colours the indoor auto-exposure samples.
| Tested in a match (13 Oct) | works (host only - players do not see it) - floor(255,0,255) turned the whole hangar interior, the rifle and the HUD panel MAGENTA on the host at once; joiner unchanged. It stayed for the rest of the batch. Strong indoor effect, host only in retail, and it stays: set it back to the map value. |
|---|---|
| Use it like | floor(40, 20, 20) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only (it is not overwritten by time of day, but only the host's PC sees it). With the FMJ onHook DLL on the server and every client it is sent to all players. |
| How sure are we | Traced in the game's code |
| Notes | Its visible effect is mostly on indoor brightness; not checked in game. Medium confidence. |
fog
Same as fogcolor.
| Tested in a match (13 Oct) | no visible effect (as documented) - No visible change. Alias of fogcolor; needs the FMJ DLL. |
|---|---|
| Use it like | fog(110, 12, 12) |
| Takes | red red, 0-127, green green, 0-127, blue blue, 0-127 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only, and also overwritten every tick by the map's time-of-day colours, so nobody sees it. Needs the FMJ onHook DLL (super DLL TEST9 or newer) on the server AND every client: then it is sent to all players and held over the day/night cycle (proven in game 2026-10-05). |
| How sure are we | Traced in the game's code |
| Notes | Half scale 0-127. High confidence. |
fogcolor
Sets the ground fog colour.
| Tested in a match (13 Oct) | no visible effect (as documented) - No visible change on host or joiner (fog at 1024 m, view indoors). Retail: repainted by TOD; needs the FMJ DLL. |
|---|---|
| Use it like | fogcolor(110, 12, 12) |
| Takes | red red, 0-127, green green, 0-127, blue blue, 0-127 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only, and also overwritten every tick by the map's time-of-day colours, so nobody sees it. Needs the FMJ onHook DLL (super DLL TEST9 or newer) on the server AND every client: then it is sent to all players and held over the day/night cycle (proven in game 2026-10-05). |
| How sure are we | Traced in the game's code |
| Notes | Half scale: use 0-127 per channel (the game doubles it; 128 and above saturate). Same as fog. High confidence. |
fogdist
Sets the fog (view) distance in metres.
| Tested in a match (13 Oct) | works (host; players see the result) - fogdist(60): host AND joiner screens went to thick grey fog inside the hangar at once. Reliable in MP (weather update). |
|---|---|
| Use it like | fogdist 200 |
| Takes | distance a distance in metres (decimals allowed; add F for feet, e.g. 30F) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: the command runs on the host only, but the result reaches every player through the game's regular weather update. |
| How sure are we | Traced in the game's code |
| Notes | Kept between 2 m and the game's fog limit (1024 m on a server). High confidence. |
fogtype
Sets the fog type: 0 = thick exponential fog, 1 = even fog starting at the camera, 2 and 3 = even fog that starts further out (half and quarter of the way, scaled by fog density).
| Tested in a match (13 Oct) | inconclusive - fogdist(80)+fogtype(0) at s148, fogtype(3) at s156, fogtype(1) at s164: host frames identical within 1-2 levels across all three (joiner too). The host view (inside helo 44) has no objects between ~5 m and 80 m, so the fog types had nothing to show on. Retest looking at objects 20-80 m away. |
|---|---|
| Use it like | fogtype(3) |
| Takes | number fog type 0-3 |
| Sent to players | No - server only |
| Multiplayer | Host only: not sent to players and not part of the weather update, so players on other PCs do not see it. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | High confidence on the code; not checked in game. |
forceanim
Debug: forces every AI soldier into one animation; forceanim(0) turns it off.
| Tested in a match (13 Oct) | inconclusive - The host shows "force anim_idle_prone" top left from s60; the joiner does not. No AI soldier was in view, so the forced animation itself was not seen. Debug line on the host only. Effect on AI unproven. |
|---|---|
| Use it like | forceanim(0) |
| Takes | anim an animation name (the game looks up anim_ + the name) |
| Sent to players | No - server only |
| Multiplayer | Runs on the host, which runs all AI, so it affects AI for everyone. Debug only. |
| How sure are we | Traced in the game's code |
| Notes | Also prints a 'force ...' line. High confidence. |
fov
Sets your own camera's field of view in degrees; it eases there.
| Tested in a match (13 Oct) | broken - R2: fov(20) and fov(120) seated in 44 (B2, s68/s76) and fov(120) on foot (B3, s84): host framing (weapon, struts) identical in every shot before and after. Round 1 fov(40) on foot: same. No effect in retail in 4 tries (20, 40, 120; seated and on foot). Do not use. |
|---|---|
| Use it like | fov(40) |
| Takes | number degrees |
| Sent to players | No - server only |
| Multiplayer | Single player, or the host's own player on a listen server. Other players are not affected, and a dedicated server has no host player. |
| How sure are we | Traced in the game's code |
| Notes | Nile's 'AI View' template fov(SSN,NUMBER) has the wrong arguments: fov takes one number and is not per-AI. High confidence. |
fx2ssn
Starts a particle effect on an object.
| Tested in a match (13 Oct) | works (host + players) - fx2ssn(Effect_smkSigB) on tower 49 and helo 46 at s36: a smoke column on tower 49 in every joiner shot from s41, and on 46 in the host view from s44, lasting 60+ s. Sent; each player sees the smoke in his own view. |
|---|---|
| Use it like | fx2ssn(Effect_UpsTireSmk, 3345) |
| Takes | fx a particle effect name, e.g. Effect_smkSigB, ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Uses the object's position and facing; a new effect on the same object replaces the old one. High confidence. |
fx2tgt
Starts a particle effect at a teleport target marker.
| Tested in a match (13 Oct) | inconclusive - fx2tgt(Effect_vehicleFireLarge,22) at s164, target ~7 m from the host: no fire or smoke in host shots s166-s182 (host looking up east through a camo net); joiner 2.5 km away. Host camera faced away. Unproven. |
|---|---|
| Use it like | fx2tgt(Effect_smkSigB, 3) |
| Takes | fx a particle effect name, e.g. Effect_smkSigB, target a teleport target marker number (the target markers placed in MED, 1-99) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Uses the marker's facing. Starting a new one does not stop the old one. High confidence. |
fxrain
Starts a particle effect at a random spot about 8 m above your own player.
| Tested in a match (13 Oct) | inconclusive - fxrain at s76: no smoke in host shots s79-s90 (host looking up at the tower roof) or in joiner shots of the tower. Unproven; the host camera faced a roof. |
|---|---|
| Use it like | fxrain(Effect_smkSigB) |
| Takes | fx a particle effect name, e.g. Effect_smkSigB |
| Sent to players | No - server only |
| Multiplayer | Single player, or the host's own player on a listen server. Other players are not affected, and a dedicated server has no host player. |
| How sure are we | Traced in the game's code |
| Notes | Same dedicated-server caution as ammorain. High confidence on the code. |
gain
Sets the overall scene brightness tint (the exposure colour).
| Tested in a match (13 Oct) | works (host only - players do not see it) - set(autogain,0)+gain(255,40,40) at s116: whole host scene red in shots s116, s120, s123; joiner normal in s117, s121, s124. set(autogain,1) at s124 removed the red by s126. Host only. Needs set(autogain,0) first; set(autogain,1) undoes it. |
|---|---|
| Use it like | gain(64, 64, 64) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | No - server only |
| Multiplayer | Host only: not sent to players and not part of the weather update, so players on other PCs do not see it. |
| How sure are we | Traced in the game's code |
| Notes | The automatic exposure re-targets it every frame while the named value autogain is not 0, so it likely needs set(autogain, 0) first (traced, not tested). The FMJ DLL leaves gain host-only. Medium confidence. |
Gkill
Kills every member of a script group.
| Tested in a match (13 Oct) | works (host; players see the result) - All 8 blue AI (1829-1834, 1748, 1750) health 100 -> 0 + dead flag on host and joiner at once; players 10000/10001 untouched (150 health). Reliable. On 03TR, killing blue group 6 (the downed crew) loses the mission (see B2). |
|---|---|
| Use it like | Gkill(G_redai) |
| Takes | group a script group written G_name: G_humans, G_blueplayers, G_redplayers, G_ai, G_blueai, G_redai, G_emptygroup |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Script groups are the built-in lists (G_humans, G_blueplayers, G_redplayers, G_ai, G_blueai, G_redai), not MED group numbers (use kill for those). G_humans kills every player. Same as killSSN on each: nobody gets kill credit. High confidence. |
Gremove
Removes every member of a script group from the game; players are told.
| Tested in a match (13 Oct) | works (host; players see the result) - Gremove(G_redai) at s92: all 64 red (team 2) soldiers vanished from pool 0 on host and joiner, and red SUVs 34/35/36/38/40 went to health 0 / team 0. Blue units, pilots and players were untouched. No "players are told" line was seen. The removal reaches players. G_redai also hit red vehicles. |
|---|---|
| Use it like | Gremove(G_blueai) |
| Takes | group a script group written G_name: G_humans, G_blueplayers, G_redplayers, G_ai, G_blueai, G_redai, G_emptygroup |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Removing a player's body also removes his placed claymores, satchels and mines. High confidence. |
ground
Sets the bounce light colour from below.
| Tested in a match (13 Oct) | no visible effect (as documented) - No colour change on host or joiner. Retail: no visible effect; needs the FMJ DLL. |
|---|---|
| Use it like | ground(30, 10, 10) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only, and also overwritten every tick by the map's time-of-day colours, so nobody sees it. Needs the FMJ onHook DLL (super DLL TEST9 or newer) on the server AND every client: then it is sent to all players and held over the day/night cycle (proven in game 2026-10-05). |
| How sure are we | Traced in the game's code |
| Notes | Full scale 0-255. High confidence. |
GroupAtt
Sets the attack distance of a MED group's AI soldiers.
| Tested in a match (13 Oct) | inconclusive - Group 7 never fired or moved (positions identical s121-s194). No baseline. |
|---|---|
| Use it like | GroupAtt(3, 150) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, distance a distance in metres (decimals allowed; add F for feet, e.g. 30F) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Soldiers only. High confidence. |
GroupHP
Sets the health of every object in a MED group.
| Tested in a match (13 Oct) | works (host only - players do not see it) - Birds 14, 15, 16 health 30 -> 33 on the host (above their 30 maximum); joiner stayed 30. Host-side number like SSNHP; GroupHP can set health above the maximum. |
|---|---|
| Use it like | GroupHP(3, 200) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, number health points |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Raw health number. Does not revive the dead; only soldiers die from health set to 0 (vehicles and buildings just hold the number). High confidence. |
GroupMax
Sets the maximum engagement (sight) distance of a MED group's AI soldiers.
| Tested in a match (13 Oct) | inconclusive - teleport(7,23) moved group 7 to target 23 (~13 m from the host) at s116 on both machines. After GroupMax(7,200) at s124 the host took no damage at all to the end (16836 from s110 to s194) and no group-7 soldier ever had the firing flag. Either GroupMax did not undo the SSNMax(1) blinding or group 7 does not engage after a teleport. Gsetaccuracy/GroupAtt/GroupMin therefore had no baseline. |
|---|---|
| Use it like | GroupMax(3, 400) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, distance a distance in metres (decimals allowed; add F for feet, e.g. 30F) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Soldiers only. High confidence. |
GroupMin
Sets the minimum engagement distance of a MED group's AI soldiers.
| Tested in a match (13 Oct) | inconclusive - Group 7 never fired, so a minimum distance could not stop anything. No baseline. |
|---|---|
| Use it like | GroupMin(3, 20) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, distance a distance in metres (decimals allowed; add F for feet, e.g. 30F) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Soldiers only. High confidence. |
GroupSpawn
Sets how many times each AI soldier in a MED group comes back after dying.
| Tested in a match (13 Oct) | works (host; players see the result) - GroupSpawn(25,100)+kill(25) at s108: 1848 dead (health 0) on host and joiner, back alive at his start point (-346.5,1306.9) by s140. Control 2066, killed at s116, never came back (body removed, absent by s151). Works; the respawn reaches players. |
|---|---|
| Use it like | GroupSpawn(3, 100) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, number respawn count (100+ = unlimited) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | 1-99 count down with each respawn; 100 or more never runs out; 0 = no respawn. It does not revive anyone now. High confidence. |
Gsetaccuracy
Sets the aim accuracy of every AI soldier in a MED group.
| Tested in a match (13 Oct) | inconclusive - Group 7 never fired (see GroupMax), so aim could not change anything. No baseline. |
|---|---|
| Use it like | Gsetaccuracy(3, 80, 60) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, number accuracy percent, number accuracy percent |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Each value is a percentage (100 = no aim error). The game stores 100 minus each value (never below 0) into two aim-error settings, in reversed order; which setting is which is not verified. Soldiers only. Medium confidence on the meaning of each value. |
GtoWP
Sends every AI unit in a MED group along a waypoint path, starting from the nearest point of the path.
| Tested in a match (13 Oct) | works (host; players see the result) - All six group 7 soldiers, standing still before, started walking north at once (5-9 m in 1.2 s, ~40 m by the next step) on host and joiner. Reliable. |
|---|---|
| Use it like | GtoWP(4, 2) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, wplist a waypoint path number |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | AI passengers are taken out of their vehicles first. High confidence. |
Help
Debug: writes help.wac and events.xml (lists of every command) into the game folder.
| Tested in a match (13 Oct) | works (host only - players do not see it) - help.wac (5,580 bytes) and events.xml (15,868 bytes) written to C:\GAMES\JO_RM_HOST at 09:00:22 (step 7); the host screen showed "help.wac file saved / Current events.xml file saved". Nothing was written in the joiner folder. Debug only; never ship it. |
|---|---|
| Use it like | Help |
| Takes | none |
| Sent to players | No - server only |
| Multiplayer | Host only (it writes files on the host's PC). Do not ship it in a map. |
| How sure are we | Traced in the game's code |
| Notes | The files are written to the game's working folder. High confidence. |
hideSSN
Hides an object. Retail and TAC maps use it to make objects disappear and hideSSN/unhideSSN to swap them.
| Tested in a match (13 Oct) | works (host + players) - 1844 flags bit 0 set on host and joiner 1.2 s after the command. Reliable in MP (sent to players). |
|---|---|
| Use it like | hidessn(3188) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Hidden objects are also ignored by area checks, AI targeting and zone capture. High confidence. |
holdSSN
Makes an AI soldier stand still (stop moving).
| Tested in a match (13 Oct) | works (host + players) - Patroller 1973 walked 13-15 m per 8 s step before; after holdssn it moved 0 m over steps 8 and 9, on host and joiner. Reliable in MP. |
|---|---|
| Use it like | holdssn(1415) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
inc
Adds 1 to a variable.
| Tested in a match (13 Oct) | works (host + players) - G160 -2 -> -1. Reliable. |
|---|---|
| Use it like | inc(V3) |
| Takes | variable a variable: V0-V255, G0-G255, a VAR name, or a named value such as RND |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | High confidence. |
kill
Kills every object in a MED group (soldiers, vehicles, buildings), including ones already dead.
| Tested in a match (13 Oct) | works (host; players see the result) - Birds 6, 7, 8: health 30 -> 0 + dead flag on host and joiner; they came back alive ~30 s later (wildlife respawn). Reliable. Wildlife comes back after ~30 s. |
|---|---|
| Use it like | kill(6) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Group 0 does nothing. High confidence. |
killSSN
Kills an object (health to 0 and its death event). Nobody gets kill credit.
| Tested in a match (13 Oct) | works (host; players see the result) - 1704 health 100 -> 0 and dead flag (bit 1) on host and joiner 1.2 s after the step; the body was removed from both pools ~30 s later. Reliable. The body is cleaned up after ~30 s, so later ssndead/ssnexists tests on it read false. |
|---|---|
| Use it like | killssn(4125) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Does not add to bluekills/greenkills. High confidence. |
lightning
Sets the colour of lightning flashes.
| Tested in a match (13 Oct) | inconclusive - lightning(255,0,0) + flash at s100, helper flashes s101-s106 (G106 = 6). No red (or any) flash in host s100/s103/s106 or joiner s101/s104/s107. (The red cast at s116-s123 is gain, not lightning.) Needs burst screenshots. |
|---|---|
| Use it like | lightning(255, 0, 0) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only (it is not overwritten by time of day, but only the host's PC sees it). With the FMJ onHook DLL on the server and every client it is sent to all players. |
| How sure are we | Traced in the game's code |
| Notes | There is no 'off': note the map's colour and set it back. With the FMJ DLL any value above 255 returns to the map's colour. High confidence. |
load
Makes a value the current result. A bare number on its own does the same.
| Tested in a match (13 Oct) | works (host + players) - load(42) then store(G162): G162 0 -> 42. Works. |
|---|---|
| Use it like | load(5) |
| Takes | value a number or a variable |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Mostly internal: extra arguments after a command quietly become loads. Medium confidence. |
lose
Shows the 'team killed' line and ends the round as a loss (Red wins).
| Tested in a match (13 Oct) | works (host; players see the result) - lose(1) at s100: shots up to s99 normal; at s103 host and joiner show the round-end panel "Draw - No winner!" (0:0), then the scoreboard. The host shows "You have killed a teammate" (probably the STRMISC killed line). Ends the round for everyone; shown as a draw, not a Red win. |
|---|---|
| Use it like | lose(1) |
| Takes | team a team number (1 = Blue, 2 = Red, 0 = neutral/green) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Only 0 or 1 is accepted (anything else does nothing), and Red (2) always wins whichever you pass. The line comes from the Misc text keys STRMISC_KILLEDGREEN/STRMISC_KILLEDBLUE. High confidence. |
movefog
Moves the fog distance to N metres over S seconds.
| Tested in a match (13 Oct) | works (host; players see the result) - movefog(1024, 6): host and joiner both clear again at the next shot. Reliable in MP. |
|---|---|
| Use it like | movefog(200, 5) |
| Takes | distance a distance in metres (decimals allowed; add F for feet, e.g. 30F), seconds seconds |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: the command runs on the host only, but the result reaches every player through the game's regular weather update. |
| How sure are we | Traced in the game's code |
| Notes | 0 seconds counts as one tick (instant). High confidence. |
music
Meant to start a music entry. Does nothing in Joint Operations: the music stream it uses is never opened.
| Tested in a match (13 Oct) | no visible effect (as documented) - Nothing; no crash. No-op in JO. |
|---|---|
| Use it like | music(3) |
| Takes | number a number (or a variable) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Does nothing useful in multiplayer or single player (see notes). |
| How sure are we | Traced in the game's code |
| Notes | No-op (it just reports success). High confidence. |
opendoors
Opens every door of the buildings in a door group.
| Tested in a match (13 Oct) | inconclusive - opendoors(16) at s124: no crash, no pool change; G206 dooropen(16) stayed 0. 03TR has no door groups: negative only. |
|---|---|
| Use it like | opendoors(7) |
| Takes | number a door group number (the group number set on the building) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Buildings only (the BMS action also opens items). High confidence. |
overcast
Fades the cloud cover (overcast) to N percent over S seconds.
| Tested in a match (13 Oct) | works (host; players see the result) - overcast(100,4) at s124: the sky closes to flat dark grey on host (s126, s130) and joiner (s127, s131) and stays. Reaches players through the weather update. |
|---|---|
| Use it like | overcast(100, 40) |
| Takes | number percent 0-100, seconds seconds |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: the command runs on the host only, but the result reaches every player through the game's regular weather update. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Give both numbers: a missing value takes the next word of the script. High confidence on the code. |
pconsol
Shows a line in the system message area of the player PLOOP has picked only.
| Tested in a match (13 Oct) | works (host + players) - "FMJTEST pconsol host only" in the host system line (s48-s59); never on the joiner. Per-player system line works. |
|---|---|
| Use it like | PLOOP if onptick(25) then pconsol("Good luck") endif END |
| Takes | text text in double quotes (up to 63 characters) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: sent only to the player picked by PLOOP (or GLOOP); outside a loop it runs on the host. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
pkillpunt
Kicks the player PLOOP has picked (as a 'kill punt'); it does not damage him.
| Tested in a match (13 Oct) | works (host; players see the result) - pkillpunt for slot 89 at s116: the joiner was at the main menu by s125; the host shows "WacJoin is leaving the game" and 1 player; the host was unaffected. Kicks the picked player. |
|---|---|
| Use it like | PLOOP if pisvar(10) then pkillpunt endif END |
| Takes | none |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Filed under triggers (kind byte 0x01); acts when tested. Different kick reason code from ppunt. Use it inside PLOOP (it works on the player PLOOP has picked). High confidence. |
ppunt
Kicks the player PLOOP has picked off the server.
| Tested in a match (13 Oct) | works (host; players see the result) - ppunt inside PLOOP gated on eq(player,89) at s148: the joiner was at the main menu by ~s151; the host shows "WacJoin is leaving the game" and "Number of players: 1"; the joiner left the host pool. Text# showed both 88 and 89. Kicks exactly the picked player; the host stays. |
|---|---|
| Use it like | PLOOP if pisvar(9) then ppunt endif END |
| Takes | none |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | The game files it under triggers (kind byte 0x01); it acts when it is tested and reports true for a real player. Use with care. Use it inside PLOOP (it works on the player PLOOP has picked). High confidence. |
psetvar
Sets flag N (0-16) on the player PLOOP has picked.
| Tested in a match (13 Oct) | works (host + players) - pisvar(3) (G152) went 0 -> 1 on the step-19 poll; pisvar(4) never fired. Reliable. |
|---|---|
| Use it like | PLOOP if pisvar(13) and not pisvar(14) then ptext("No such command") psetvar(14) endif END |
| Takes | number a flag number 0-16 |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Only sets a flag; a script cannot clear it. Flags clear when a player joins (new slot), not on death or team change. Numbers outside 0-16: do not use. High confidence. |
ptext
Shows a line of text in the chat area of the player PLOOP has picked only.
| Tested in a match (13 Oct) | works (host + players) - "FMJTEST ptext joiner only" appeared in the joiner chat area only (s42-s56); the host never showed it. Text# lines for 88 and 89 on both. Per-player text works with an eq(player, slot) gate. |
|---|---|
| Use it like | PLOOP if onptick(23) then ptext("Chat commands: !ping") endif END |
| Takes | text text in double quotes (up to 63 characters) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: sent only to the player picked by PLOOP (or GLOOP); outside a loop it runs on the host. |
| How sure are we | Traced in the game's code |
| Notes | Outside PLOOP it shows on the host. Up to 63 characters. High confidence. |
pwave
Plays a voice .wav for the player PLOOP has picked only.
| Tested in a match (13 Oct) | inconclusive - Ran for the host (s76) and the joiner (s84) through the slot gate; waveready was already stuck at 2, so neither the host positive nor the joiner negative could be read. Audio not captured. |
|---|---|
| Use it like | PLOOP if onptick(5) then pwave("welcome.wav") endif END |
| Takes | filename a .wav file name, e.g. "alarm9.wav" |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: sent only to the player picked by PLOOP (or GLOOP); outside a loop it runs on the host. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
quake
Shakes every player's view.
| Tested in a match (13 Oct) | works (host + players) - quake(40) at s108: the host shot at ~s110 and the joiner shot at ~s111 are displaced as a whole frame against the shot 4 s earlier (edges doubled everywhere; joiner lower-frame difference 2.7 vs a normal 0.1-0.8), while both cameras are otherwise still. Shakes host and joiner. Only one shot per machine fell inside the ~4 s shake. |
|---|---|
| Use it like | quake 10 |
| Takes | number length (about 0.1 s per unit) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Length is 6 game ticks per unit: quake(10) lasts about 1 second. Nile calls the number seconds; it is closer to tenths of a second. High confidence. |
rain
Fades rain to N percent over S seconds.
| Tested in a match (13 Oct) | works (host; players see the result) - rain(100,4) at s132: rain streaks on host and joiner at s134-s136 (brightened crops); gone when snow replaced it at s140. Reaches players. Faint in dark overcast light. |
|---|---|
| Use it like | rain(100, 40) |
| Takes | number percent 0-100, seconds seconds |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: the command runs on the host only, but the result reaches every player through the game's regular weather update. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Rain and snow share one level: rain switches it to rain, snow to snow. Over 100 counts as 100. High confidence on the code. |
remove
Removes every object in a MED group from the game; players are told.
| Tested in a match (13 Oct) | works (host; players see the result) - Birds 9-13 vanished from pool 0 on host and joiner; groupalive(14) went false within the next 5 s and stayed false. Reliable. |
|---|---|
| Use it like | remove(6) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Group 0 does nothing. Same as the BMS 'vaporize group' action. High confidence. |
removeSSN
Removes an object from the game; players are told.
| Tested in a match (13 Oct) | works (host; players see the result) - 1703 vanished from pool 0 on host and joiner at once; SSNexists (G102) went to 2 on the same poll. Reliable in MP. |
|---|---|
| Use it like | removessn(3405) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Removing a player's body also removes his placed claymores, satchels and mines. High confidence. |
reset
Re-arms a named IF: clears its 'has fired' state and timers, and those of the IFs nested inside it, so never/elapse/chain work again.
| Tested in a match (13 Oct) | works (host + players) - A: reset(rsta) inside an IF placed after IF [rsta] never: G221 1 -> 2. B: same with elapse(1000): G222 1 -> 2. C: top-level reset(rstc) after IF [rstc] never: G223 counted every pass, 133 by the end. D (round-1 layout, reset before its IF in the file): G224 stayed 1. Works, but only when the reset line comes AFTER its named IF in the script; a forward reference silently resets the first IF instead (the round-1 failure). |
|---|---|
| Use it like | if ssndead(3404) and never then reset(alarm) endif |
| Takes | ifname the name of a named IF (written IF [name] ...) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Name the IF with IF [name] .... A misspelled name is not reported and resets the FIRST IF in the script instead. High confidence. |
set
Sets a variable to a value.
| Tested in a match (13 Oct) | works (host + players) - G160 0 -> 5. Reliable. |
|---|---|
| Use it like | set(V105, 1) |
| Takes | variable a variable: V0-V255, G0-G255, a VAR name, or a named value such as RND, value a number or a variable |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | set(tod, 09:00) does not work: tod is a command, not a variable (use tod(9:00)). High confidence. |
setaccuracy
Sets one AI unit's aim accuracy.
| Tested in a match (13 Oct) | inconclusive - After setaccuracy(1845,0,0) at s76 the damage rate from 1845 (the only shooter) fell from ~85 hp/s (s68-s77) to ~25 hp/s (s77-s83). Strong hint that it works, but one 6-s window of random hits is not proof. |
|---|---|
| Use it like | setaccuracy(500, 90, 70) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number accuracy percent, number accuracy percent |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Same rules as Gsetaccuracy (percentages; the two values land in reversed order). Medium confidence on the meaning of each value. |
sky
Sets the light colour from above.
| Tested in a match (13 Oct) | no visible effect (as documented) - No colour change on host or joiner. Retail: no visible effect; needs the FMJ DLL. |
|---|---|
| Use it like | sky(40, 220, 60) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only, and also overwritten every tick by the map's time-of-day colours, so nobody sees it. Needs the FMJ onHook DLL (super DLL TEST9 or newer) on the server AND every client: then it is sent to all players and held over the day/night cycle (proven in game 2026-10-05). |
| How sure are we | Traced in the game's code |
| Notes | Full scale 0-255. High confidence. |
skyfog
Same as skyfogcolor.
| Tested in a match (13 Oct) | no visible effect (as documented) - No visible change. Needs the FMJ DLL. |
|---|---|
| Use it like | skyfog(110, 12, 12) |
| Takes | red red, 0-127, green green, 0-127, blue blue, 0-127 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only, and also overwritten every tick by the map's time-of-day colours, so nobody sees it. Needs the FMJ onHook DLL (super DLL TEST9 or newer) on the server AND every client: then it is sent to all players and held over the day/night cycle (proven in game 2026-10-05). |
| How sure are we | Traced in the game's code |
| Notes | Half scale 0-127. High confidence. |
skyfogcolor
Sets the horizon fog band colour.
| Tested in a match (13 Oct) | no visible effect (as documented) - No visible change. Needs the FMJ DLL. |
|---|---|
| Use it like | skyfogcolor(110, 12, 12) |
| Takes | red red, 0-127, green green, 0-127, blue blue, 0-127 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only, and also overwritten every tick by the map's time-of-day colours, so nobody sees it. Needs the FMJ onHook DLL (super DLL TEST9 or newer) on the server AND every client: then it is sent to all players and held over the day/night cycle (proven in game 2026-10-05). |
| How sure are we | Traced in the game's code |
| Notes | Half scale 0-127, like fogcolor. Same as skyfog. High confidence. |
skyheight
Sets the sky/cloud height.
| Tested in a match (13 Oct) | works (host only - players do not see it) - skyheight(65536000) at s52: the host cloud texture disappeared between s51 and s54 (smooth pink gradient, no cloud detail) and stayed so; the joiner kept normal moving cloud texture throughout. skyheight(1) at s60 gave no further visible change on the host. Host only. A huge value pushes the cloud layer out of sight. skyspeed ran 8 s earlier, so the attribution rests on the s51 -> s54 timing. |
|---|---|
| Use it like | skyheight(500) |
| Takes | number a height number (scale not verified) |
| Sent to players | No - server only |
| Multiplayer | Host only: not sent to players and not part of the weather update, so players on other PCs do not see it. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | The raw number is stored as-is; its scale is not verified. Low-medium confidence on what you see. |
skyspeed
Sets how fast the clouds scroll.
| Tested in a match (13 Oct) | works (host; players see the result) - Cloud pattern identical on host and joiner from s29 to s44 (before the command); after skyspeed(200) at s44 the clouds are in a different place in every shot on BOTH machines (joiner s49, s51, s55, s59, s62). Reaches players through the weather update. At 200 the movement is obvious within 5 s. |
|---|---|
| Use it like | skyspeed(4) |
| Takes | number a speed number (scale not verified) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: the command runs on the host only, but the result reaches every player through the game's regular weather update. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Scale not verified. Medium confidence. |
snow
Fades snow to N percent over S seconds.
| Tested in a match (13 Oct) | works (host; players see the result) - rain(0,0)+snow(100,4) at s140: snowflakes (not streaks) on host and joiner at s140-s146; gone after snow(0,0) at s148. Reaches players. |
|---|---|
| Use it like | snow(100, 10) |
| Takes | number percent 0-100, seconds seconds |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: the command runs on the host only, but the result reaches every player through the game's regular weather update. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Shares the rain level (see rain). High confidence on the code. |
sound
Plays a sound set at a distance and bearing from each listener.
| Tested in a match (13 Oct) | broken - Right after sound(SS_PSP_LOST,50,0) the joiner dropped out: all 150 objects vanished from its pools, its screenshot failed, and the host screenshot took 77 s. The host carried on. The sound-set name is a guess. Likely crashes or drops players (host-address bug D-WAC-5). Do not use in MP. |
|---|---|
| Use it like | sound(SS_THUNDER, 100, 0) |
| Takes | soundset a sound set name (SS_ in front is optional), distance distance from the listener in metres, heading bearing (scale not verified) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Filed under debug commands by the game but still sent to all players. Same multiplayer caution as SS2SSN. Bearing scale not verified. |
sound2tgt
Plays a sound set at a teleport target marker.
| Tested in a match (13 Oct) | inconclusive - sound2tgt(SS_EXPLO_BASE,20) at s36: the joiner stayed connected with normal pools and shots. A valid sound-set name is MP-safe here; audio not captured. |
|---|---|
| Use it like | sound2tgt(SS_THUNDER, 3) |
| Takes | soundset a sound set name (SS_ in front is optional), target a teleport target marker number (the target markers placed in MED, 1-99) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Same multiplayer caution as SS2SSN (the sound is sent as a host memory address). Not verified in game. |
squadclear
Clears the selected squad event values (SquadSSN, SquadWho).
| Tested in a match (13 Oct) | no visible effect (as documented) - Nothing; no crash. No-op in JO. |
|---|---|
| Use it like | squadclear |
| Takes | none |
| Sent to players | No - server only |
| Multiplayer | Does nothing useful in multiplayer or single player (see notes). |
| How sure are we | Traced in the game's code |
| Notes | Harmless; squad events never happen in Joint Operations. High confidence. |
SS2SSN
Plays a sound set at an object's position.
| Tested in a match (13 Oct) | inconclusive - SS2SSN(SS_EXPLO_BASE,44) at s44: the joiner stayed connected, normal pools and shots. A valid sound-set name is MP-safe here; audio not captured. |
|---|---|
| Use it like | SS2SSN(SS_THUNDER, 3403) |
| Takes | soundset a sound set name (SS_ in front is optional), ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | In multiplayer the host sends the sound as an address in its own memory; whether each player hears the right sound depends on matching sound data, and the RE notes say a wrong value can crash a client. Not verified in game; test before relying on it in MP. |
ssn2ssn
Orders a unit to board an object: it goes there and takes a free seat.
| Tested in a match (13 Oct) | works (host; players see the result) - ssn2ssn(1748,46) at s44: 1748 walked ~57 m (s55 at -519,-1069; s66 at -505,-1082) and boarded Blackhawk 46 (parent 2, flag 0x40) by s77, on host and joiner; G208 ssnride(46) 1 -> 2. The unit walks; nothing teleports. |
|---|---|
| Use it like | ssn2ssn(4138, 4139) |
| Takes | ssn the unit's SSN, ssn the vehicle or seat's SSN |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | The unit walks there; nothing is teleported. TAC maps also use ssn2ssn(player, chair) followed by ssnuse(player) inside PLOOP to seat a player at once. High confidence. |
SSNADDHP
Adds health to an object (or takes it away if negative), never above its maximum or below 0.
| Tested in a match (13 Oct) | works (host only - players do not see it) - 1702 health 100 -> 40 on host; joiner still 100. SSNwounded (G101) went to 2 on the same poll. Same as SSNHP: the number is host-side, the gameplay effect is real. |
|---|---|
| Use it like | ssnaddhp(4137, 500) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number health points to add |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
SSNanim
Sets an AI soldier's body animation state.
| Tested in a match (13 Oct) | inconclusive - SSNanim(1846,idle_prone) at s156: 1846 not in the host view (camo net overhead); no anim field in the pools. Unproven. |
|---|---|
| Use it like | ssnanim(1415, idle) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), anim an animation name (the game looks up anim_ + the name) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | An unknown animation name is a compile error. Medium confidence that players see it (the state is replicated in OpenNova's port; retail wire not checked here). |
SSNAtt
Sets one AI soldier's attack distance.
| Tested in a match (13 Oct) | inconclusive - SSNAtt(1847,1) at s100: 1847 moved ~5 m towards the host and had flag 0x4000 at s110; only -88 hp. SSNAtt(1847,300) at s108 was not captured and the damage stayed flat after it. Meaning still unclear. |
|---|---|
| Use it like | SSNAtt(500, 150) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), distance a distance in metres (decimals allowed; add F for feet, e.g. 30F) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
ssncspd
Sets an AI vehicle's combat speed in km/h.
| Tested in a match (13 Oct) | inconclusive - The host was teleported onto moving red SUV 36 at s132 and was dead within ~1-3 s (health 20000 -> 0, "WacHost is dead" on both); SUV 36 kept ~20000 speed. No combat, so no combat speed. Still untested in practice. tele onto a fast vehicle killed a 20000-hp player. |
|---|---|
| Use it like | ssnCspd(1323, 40) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number speed in km/h |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Only vehicles with a vehicle AI. High confidence. |
ssnface
Sets an object's facial expression for a while.
| Tested in a match (13 Oct) | no visible effect (as documented) - No change, no crash. Documented no-op in JO; do not use. |
|---|---|
| Use it like | ssnface(1415, ANGRY) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), face a face: NORMAL, HAPPY, SAD, SMIRK, ANGRY, SURPRISE, DISGUST, FEAR or AGGRESSIVE |
| Sent to players | No - server only |
| Multiplayer | Does nothing useful in multiplayer or single player (see notes). |
| How sure are we | Traced in the game's code |
| Notes | No visible effect in Joint Operations: JO ships no face (.grm) files and its renderer never uses the result. High confidence. |
ssnguard
Turns an AI unit's guard flag on (1) or off (0).
| Tested in a match (13 Oct) | works (host + players) - 21 gained flags bit 0x40 on host and joiner at once; no behaviour change could be seen. The same 0x40 bit is set on soldiers who mount gun seats, so its meaning is not certain. A flag is set and replicated; what guard changes in behaviour is still unknown. |
|---|---|
| Use it like | ssnguard(1415, 1) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number 1 = on, 0 = off |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Same flag as the BMS GUARD AI setting; what it changes in behaviour is not described here. Medium confidence. |
SSNHP
Sets an object's health.
| Tested in a match (13 Oct) | works (host only - players do not see it) - 1701 health 100 -> 37 on the host; the joiner copy stayed 100. The same command on SUV 38 (8000 -> 1500) did reach the joiner. Soldier health is host-side only (players never see AI health); vehicle health replicates. The host decides damage and death, so it still works in MP. |
|---|---|
| Use it like | SSNHP(4137, 8000) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number health points |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Does not revive a dead object. TAC's Kutu Tower Assault uses it to repair helipads. High confidence. |
SSNMax
Sets one AI soldier's maximum engagement (sight) distance.
| Tested in a match (13 Oct) | works (host; players see the result) - The host at the north base lost ~145 hp/s to the reds (20000 -> 19198 by s50). After GLOOP SSNMax(item,1) at s52 his health was flat at 18378 from s55 to s66. Giving 1845 300 m back at s68 restarted the damage (~85 hp/s, s68-s77). Stops an engagement already in progress within ~3 s. Strong evidence. |
|---|---|
| Use it like | SSNMax(500, 400) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), distance a distance in metres (decimals allowed; add F for feet, e.g. 30F) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
SSNMin
Sets one AI soldier's minimum engagement distance.
| Tested in a match (13 Oct) | inconclusive - SSNMin(1844,200) at s84 (host 19 m away): 1844 had the firing flag 0x4000 at s88 and damage continued (~30 hp/s). After SSNMin(1844,0) at s92 he ran to 2 m from the host and the damage stopped. Opposite of the expectation; maybe a keep-distance setting, or the damage came from 1845 who was blinded only at s84. Unresolved. |
|---|---|
| Use it like | SSNMin(500, 20) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), distance a distance in metres (decimals allowed; add F for feet, e.g. 30F) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Works even on an object without an AI (does nothing then). High confidence. |
ssnname
Gives an object a display name taken from the mission's text table.
| Tested in a match (13 Oct) | inconclusive - ssnname with real keys STRWPNAME027/029/030 on 44, 1748, 1750 at s52: no name text in any shot (s55-s70). Name tags may need someone aiming at the unit; still unproven. |
|---|---|
| Use it like | ssnname(1268, alpha_1) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), texttoken a mission text KEY from the mission's text table (TT_ in front is optional) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | The second value is a text KEY looked up in <mission>.bin (else medmssn.bin), then gametext. A key that is not found names nothing, and a quoted "name" also names nothing. Whether players other than the host see the name is not verified. High confidence on the lookup. |
ssnpspd
Sets an AI vehicle's patrol speed in km/h.
| Tested in a match (13 Oct) | works (host; players see the result) - ssnpspd(35,5) at s76: SUV 35 slowed from ~20000 to ~1450 speed units and stayed there to the end, on host and joiner. 5 km/h shows as ~1450 in the speed field. |
|---|---|
| Use it like | ssnPspd(1323, 35) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number speed in km/h |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Only vehicles with a vehicle AI (not foot soldiers). It takes effect on the AI's next update. High confidence. |
SSNradio
Plays a .wav as a radio message from a unit: heard by the listener, with that unit as the speaker.
| Tested in a match (13 Oct) | inconclusive - waveready already stuck at 2; nothing measurable. Audio not captured. |
|---|---|
| Use it like | ssnradio(1415, "ampr120.wav") |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), filename a .wav file name, e.g. "alarm9.wav" |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Uses the mission voice channel. High confidence. |
ssnrelease
Takes a unit out of the vehicle or seat it is in and clears its boarding order.
| Tested in a match (13 Oct) | works (host; players see the result) - Pilot 1748 left 44 (parent 2 -> 0, off the helo) at s36; 1750 left 44 (s52) and later Little Bird 1714 (s100); the host left gun 49 (s100) and truck 29 (s124). Each time parent_slot -> 0 on host and joiner and the me* triggers went back to 1. Text# "release player 88/89" proves the gate. Works on AI and on players. Releasing from Little Bird left 1750 standing on it (SSNride stays true). |
|---|---|
| Use it like | ssnrelease(player) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
SSNSpawn
Sets how many times one AI soldier comes back after dying.
| Tested in a match (13 Oct) | works (host; players see the result) - Helper killssn(19): health 0 + dead flag on both; 19 came back 24-32 s later (health 100, flags 0, at its start (-363.4,305.4)) on host and joiner. Reliable; respawn takes about 25-30 s. |
|---|---|
| Use it like | SSNSpawn(500, 3) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), number respawn count (100+ = unlimited) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | 1-99 count down; 100 or more never runs out; it does not revive now. High confidence. |
SSNtoWP
Sends one AI unit along a waypoint path, starting from the nearest point.
| Tested in a match (13 Oct) | works (host; players see the result) - Static soldier 1847 started walking at once (7 m in 1.2 s), reached path 22 near (-405,1378) by step 10 and stopped at (-377,1174) by step 15; joiner within ~2 m of the host. Reliable in MP. |
|---|---|
| Use it like | SSNtoWP(1323, 4) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), wplist a waypoint path number |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Unlike GtoWP it does not take the unit out of a vehicle first. High confidence. |
ssnturn
Turns an AI soldier to face a compass heading.
| Tested in a match (13 Oct) | works (host; players see the result) - ssnturn(1846,90) at s60: 1846 yaw_bam 445293496 (~37 deg) -> 4 on the host and -3 on the joiner (0 = east = compass 90). Players see the turn. |
|---|---|
| Use it like | ssnturn(1415, 90) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), heading a compass heading in degrees |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | On a player it writes a different setting (a jump timer) instead, so do not use it on players. High confidence. |
ssnuse
Puts a unit straight into the vehicle or seat it was ordered to board with ssn2ssn (no walking).
| Tested in a match (13 Oct) | works (host; players see the result) - 1750 put straight into Little Bird 1714 (32 m away) at s60: pos jumped, parent 2, flag 0x40 on host and joiner by s66. The host was seated on gun 49 (s92) and in the driver seat of truck 29 (s108; driving keyboard tip shown). In B3 the step-1 PLOOP seat failed for the host (he stood next to 44, parent 0) while the joiner was seated; it worked in the other 7 batches. |
|---|---|
| Use it like | ssnuse(4138) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Does nothing without an earlier ssn2ssn; no search for a nearby vehicle. A unit already mounted is left alone. High confidence. |
SSNwave
Plays a voice .wav from an object, heard by players within the distance.
| Tested in a match (13 Oct) | inconclusive - waveready already stuck at 2 from the wave step; nothing measurable. Audio not captured. |
|---|---|
| Use it like | ssnwave(3403, "alarm9.wav", 50) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), filename a .wav file name, e.g. "alarm9.wav", distance how far it can be heard, in metres |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Uses the mission voice channel (a new wave cuts off the one playing). The sound follows the object. High confidence. |
store
Copies the current result (the value of the last command or test) into a variable.
| Tested in a match (13 Oct) | works (host + players) - eq(3,3) then store(G161): G161 0 -> 1. Works. |
|---|---|
| Use it like | store(V20) |
| Takes | variable a variable: V0-V255, G0-G255, a VAR name, or a named value such as RND |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Advanced; most scripts use set instead. Medium confidence. |
sub
Subtracts a value from a variable.
| Tested in a match (13 Oct) | works (host + players) - G160 8 -> -2 (goes below 0). Reliable; no clamp at 0. |
|---|---|
| Use it like | sub(V10, 5) |
| Takes | variable a variable: V0-V255, G0-G255, a VAR name, or a named value such as RND, value a number or a variable |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Can go below 0. High confidence. |
sun
Sets the sun (or moon) light colour.
| Tested in a match (13 Oct) | no visible effect (as documented) - No colour change on host or joiner. Retail: repainted by time of day; needs the FMJ DLL. The view was mostly indoors. |
|---|---|
| Use it like | sun(255, 80, 40) |
| Takes | red red, 0-255, green green, 0-255, blue blue, 0-255 |
| Sent to players | Not in the normal game. Yes with the FMJ onHook DLL (server and players) |
| Multiplayer | Retail: host only, and also overwritten every tick by the map's time-of-day colours, so nobody sees it. Needs the FMJ onHook DLL (super DLL TEST9 or newer) on the server AND every client: then it is sent to all players and held over the day/night cycle (proven in game 2026-10-05). |
| How sure are we | Traced in the game's code |
| Notes | Full scale 0-255. With the FMJ DLL a value above 255 returns to the map's colour. High confidence. |
sunfade
Meant to dim the sun over time. Does nothing in retail: the sun-dim channel's limit is never set above 0.
| Tested in a match (13 Oct) | no visible effect (as documented) - Nothing; no crash. No-op in JO. |
|---|---|
| Use it like | sunfade(50, 10) |
| Takes | number percent, seconds seconds |
| Sent to players | No - server only |
| Multiplayer | Does nothing useful in multiplayer or single player (see notes). |
| How sure are we | Traced in the game's code |
| Notes | No-op. High confidence. |
targetfx
Starts the particle effect set on a teleport target marker, at that marker.
| Tested in a match (13 Oct) | inconclusive - targetfx(23) at s172: no explosion in host shots s173-s182; nothing changed in the pools. Unproven. |
|---|---|
| Use it like | targetfx(3) |
| Takes | target a teleport target marker number (the target markers placed in MED, 1-99) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | The effect name comes from the marker itself (like BMS action 27). High confidence. |
tele
Debug/cheat: moves your own player to an object and sets your health to 20000.
| Tested in a match (13 Oct) | works (host; players see the result) - Host player moved to (-573.5,-1026.3, 8.5) at tower 49 on host and joiner; host health 150 -> 18811 (20000 minus ~1,190 damage from the fall speed he kept). Host player only. Speed is kept, so it can hurt: with normal health he would have died. |
|---|---|
| Use it like | tele(1415) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | No - server only |
| Multiplayer | Single player, or the host's own player on a listen server. Other players are not affected, and a dedicated server has no host player. |
| How sure are we | Traced in the game's code |
| Notes | Speed and pose are not reset. High confidence. |
teleport
Teleports every member of a MED group to a teleport target marker.
| Tested in a match (13 Oct) | works (host; players see the result) - 1848 jumped from (-346.7,1306.6) to (-398.9,1482.5) = teleport target 21, on host and joiner; SSNarea(1848,5) went false on the same poll. Reliable; use this instead of teleSSN. |
|---|---|
| Use it like | teleport(5, 2) |
| Takes | number a MED/Nile group number (the group set on placed units), not a G_ script group, target a teleport target marker number (the target markers placed in MED, 1-99) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | Same as the BMS group-teleport action. High confidence. |
teleSSN
Meant to teleport an object to a teleport target marker, but in retail it does NOT move the object.
| Tested in a match (13 Oct) | broken - 1705 stayed exactly at (-849.7,820.2) on host and joiner. Broken in retail, as the wiki says. Use teleport(group, target) (proven in B2 S4). |
|---|---|
| Use it like | teleSSN(1415, 2) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player), target a teleport target marker number (the target markers placed in MED, 1-99) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Does nothing useful in multiplayer or single player (see notes). |
| How sure are we | Traced in the game's code |
| Notes | BROKEN in retail (checked in the game code): it moves the target marker onto itself and leaves the object where it is. Use teleport(group, target) or the BMS single-teleport action instead. High confidence. |
text
Shows a line of text in every player's chat area.
| Tested in a match (13 Oct) | works (host + players) - "FMJTEST text" in the chat area on host and joiner; gone after 16-24 s. Reliable. |
|---|---|
| Use it like | text("Map made by onedead") |
| Takes | text text in double quotes (up to 63 characters) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Stays about 15 seconds. Up to 63 characters in the script. A bare "string" without the word text is a compile error and nothing shows (AD-Catacombs has this mistake). High confidence. |
text#
Shows text followed by a number (e.g. a variable) to every player.
| Tested in a match (13 Oct) | works (host + players) - Two lines on both screens: "FMJTEST text# player 89" and "FMJTEST text# player 88". `player` is the pool slot (88 host, 89 joiner), NOT the SSN 10000/10001. Works; and it shows that `player` holds the slot number, not the SSN. |
|---|---|
| Use it like | text#("Blue kills:", bluekills) |
| Takes | text text in double quotes (up to 63 characters), number a number (or a variable) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | Printed as the text, a space, then the number. High confidence. |
TOD
Sets the time of day.
| Tested in a match (13 Oct) | works (host; players see the result) - TOD(12:00) at s84: dusk turned to bright noon with a blue sky on host (s88, s93) and joiner (s89, s94). Reaches players through the weather update. |
|---|---|
| Use it like | tod 19:45 |
| Takes | hour a time of day: hours (8) or hours:minutes (19:45) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: the command runs on the host only, but the result reaches every player through the game's regular weather update. |
| How sure are we | Traced in the game's code |
| Notes | tod(8) is 08:00. The day wraps round: tod(-1:00) is 23:00. High confidence. |
unhideSSN
Shows an object hidden with hideSSN.
| Tested in a match (13 Oct) | works (host + players) - 1844 flags bit 0 cleared on host and joiner. Reliable in MP. |
|---|---|
| Use it like | unhidessn(3188) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
unholdSSN
Lets an AI soldier held with holdSSN move again.
| Tested in a match (13 Oct) | works (host + players) - 1973 moved again: 1.6 m in the first 1.2 s, then 11-15 m per step (steps 11-21) on host and joiner. Reliable in MP. |
|---|---|
| Use it like | unholdssn(1415) |
| Takes | ssn an object's SSN (the number MED/Nile gives a placed object; players are 10000 + slot; inside PLOOP write player) |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code |
| Notes | High confidence. |
wave
Plays a voice .wav for every player (not positional).
| Tested in a match (13 Oct) | inconclusive - waveready (G220) was 1 at s50 and 2 by s60, so the host voice channel went busy after wave("command1.wav") at s52; it then stayed 2 for the remaining ~110 s. Host playback likely; players not measurable (no audio capture). Because waveready never returned to 1, SSNwave/SSNradio/pwave could not be told apart. |
|---|---|
| Use it like | wave("command1.wav") |
| Takes | filename a .wav file name, e.g. "alarm9.wav" |
| Sent to players | Yes - every player runs it too |
| Multiplayer | Works in multiplayer: the host runs it and also sends it to every player. |
| How sure are we | Traced in the game's code, not tried in a match yet |
| Notes | Uses the mission voice channel: a new wave cuts off the one playing. Takes one value only; a distance after it (wave(x.wav, 600) in TD-ShippingPort) is quietly ignored. Medium-high confidence. |
win
Ends the round with that team winning.
| Tested in a match (13 Oct) | works (host; players see the result) - win(1) at s172: by s172-s174 host and joiner show the round-end panel, then the scoreboard. The panel reads "Draw - No winner!" (Joint Ops 0, Rebel 0), not a Blue win. No chat line. Ends the round for everyone, but this co-op mission showed it as a draw. |
|---|---|
| Use it like | win(1) |
| Takes | team a team number (1 = Blue, 2 = Red, 0 = neutral/green) |
| Sent to players | No - server only |
| Multiplayer | Works in multiplayer: runs on the host; players see the result through the game's normal updates. |
| How sure are we | Traced in the game's code |
| Notes | 1 = Blue, 2 = Red, 0 = green. Only the first round end counts. No chat line is shown. High confidence. |