;wac file - nestable IF/THEN/ELSE/ENDIF boolean logic
;
;WAC post directory w:\vp\program\wac - commands listed in GAME.WAC
;WAC debug screen under shift-F12, numlock arrows to select and scroll
;
;GLOBAL WAC is GAME.WAC (executed first)
;
;MISSION WAC is misname.WAC (executed second)
;
;Left to Right order of operations
;
;---WAC LANGUAGE COMMANDS
;nestable flow control
;       IF THEN ELSE ENDIF
;boolean logic
;       AND OR XOR
;function modifier
;       NOT
;comments
;       ; /
;
;Syntax - parens optional, line returns and tabbing optional
;
;       if trigger1(params) and trigger2(params) then
;               event1(params)
;               event2(params)
;       endif
;
;Example
;
;   I want to open doors in group 12 the first time I enter area 1501
;
;       if location(1501) and never() then
;               opendoors(12)
;       endif
;

;---VARIABLES & IMMEDIATES (a variable can always be used as an immediate)
;"STRING"       immediate string value
;#              immediate decimal number
;anim_move      immediate equate from ADM file
;ammo_name      immediate ammo name (ex. ammo2tgt ammo_rocket 1)
;fx_fxname      immediate effect name (ex. fxrain fx_effect_lightning)
;effect_name    immediate effect name (ex. fxrain effect_lightning)
;SS_SoundSet    immediate soundset name
;sSoundSet      immediate soundset name (alternate syntax)
;face_name      immediate face name (ex. ssnface 45 face_happy)
;                       face_normal
;                       face_happy
;                       face_sad
;                       face_smirk
;                       face_angry
;                       face_surprise
;                       face_disgust
;                       face_fear
;                       face_aggressive
;
;V#             V0 to v511 game variables, cleared at start of mission
;G#             G0 to vG11 global variables, not cleared during link
;M#             Music Script Variable
;result         current return/accumulator value (mostly for debug)
;ticks          number of seconds into game
;GameOver       true is game is over
;Win            true if blue team won
;Lose           true if red team won
;wind           used by SWING, FLICKER, and particle wind2
;health         player's health/hp value
;mana           player's mana
;neartype       the type of the nearest enemy (from items.def dialog)
;neardist       the distance to the nearest organic
;nearmove       the anim move of the nearest organic (setable)
;nearid         the unique dcb/id of the nearest organic
;neartid        the id of the organic's target or 0 if no target
;nearblind
;nearflying
;nearguard
;nearSSN
;nearWP
;nearGroup
;nearHP

;deadDist       the nearest corpse info
;DdeadType
;ddeadSSN
;DdeadMove
;DdeadGroup

;bbadDist        the nearest badguy info (team 2)
;bbadType
;bbadSSN
;bbadMove
;bbadGroup




;---TRIGGERS (# param can be number or variable)
;never()        true if current IF has never fired, for one time only events
;elapse(#)      true if past # seconds since current IF activated
;
;-IF Link (these commands fire once only for every fire of linked IF)
;previous       true if previous (same nesting level) IF fired
;chain(#)       true if previous (same nesting level) IF fired # seconds ago
;link(#1,#2)    true if IF #1 away from current IF fired #2 seconds ago
;
;-Game Time (seconds of WAC script running)
;past(#)        true if past # seconds into game, keeps firing after #
;before(#)      true if before # seconds into game.  keeps firing before #
;ontick(#)      true if ontick #, only fires once
;
;random(#)      randomly true 1 in # times, sets RND for additional tests
;location(#)    true if you are at that music location
;area(#)        true if within MED area without checking vertical
;area3D(#)      true if within MED 3D area
;outside()      true if you are not in a blink box
;waveready()    true if no talking going on
;groupdead(#)   true if entire group is dead
;groupalive(#)  true if anyone in group is alive
;ssnwounded(#)  true if ssn is wounded
;ssndead(#)     true if ssn is dead
;ssnalive(#)    true if ssn is alive
;ssnride(#)     true if any organic is standing on SSN
;ssnridessn     true if organic SSN is standing on SSN (order not important)
;meride(#)      true if player is standing on SSN
;ssngun(#)      true if SSN is using an emplaced weapon
;ssnloc(#,#)    true if vehicle or person is in music location
;ssnarea(#,#)   true if vehicle or person is in 2D med area #
;ssnarea3D(#,#) true if vehicle or person is in 3D med area #
;dooropen(#)    true if group # has door open
;event(#)       true if med event has triggered
;squadevent(#)  true if squad event is in que, sets squadSSN to talker
;playerfired(#) true if player has pressed fire and has slot # selected
;                    1=knife, 2=small arm, 3=main weapon, ect..
;
;---VARIABLE COMPARE
;eq(#,#)        true if #==#
;ne(#,#)        true if #!=#
;lt(#,#)        true if #<#
;gt(#,#)        true if #>#
;le(#,#)        true if #<=#
;ge(#,#)        true if #>=#
;true(#)        true if #!=0
;false(#)       true if #==0
;
;---VARIABLE MODIFY
;set(var,#)             set var to #
;add(var,#)             add # to var
;sub(var,#)             subtract # from var, clamp at 0
;inc(var)               add 1 to var
;dec(var)               subtract 1 from var, clamp at 0

;---EVENTS (# param can be number or variable)
;squadclear             clears squadevent selected by squadevent(#)
;forceanim(anim)        forces all organics into anim slot (debug only)
;report("text")         pop-up debug report window
;report#("text",#)      pop-up debug report window with number
;text("text")           output text to chat - right side
;text#("text",#)        output text to chat w/# - right side
;consol("text")         output text to consol - left side
;consol#("text",#)      output text to consol w/# - left side
;
;flash                  produce a flash of lightning & thunder
;farflash               produce a far away flash of lightning & thunder
;quake(#)               earthquake for # 10th of a seconds
;
;colorfade(#)           seconds for color to transition (zero is normal)
;sun(#,#,#)             sets sun rgb    ENV override
;sky(#,#,#)             sets sky rgb
;ground(#,#,#)          sets ground rgb
;ceiling(#,#,#)         sets ceiling rgb
;floor(#,#,#)           sets floor rgb (inside ground)
;lightning(#,#,#)       sets the color of the lightning
;cloud(#,#,#)           sets the cloud color
;gain(#,#,#)            sets the brightness of the whole scene
;
;fogcolor(#,#,#)        set fogcolor to R,G,B, changes at color fade rate
;fog(#,#,#)             same as fogcolor
;skyfogcolor(#,#,#)     set skyfogcolor to R,G,B
;skyfog(#,#,#)          same as skyfogcolor
;fogtype(#)             set fog type 0=fog, 1=haze, 2=haze wall, 3=fog wall
;fogdist(#)             sets fogdist to # meters
;movefog(#,#)           move fogdist to # meters over # seconds
;skyspeed(#)            sets the sky movement speed
;skyheight(#)           sets the height of the sky
;
;sound(sSSNAME, dist, head)  plays soundset at distance(meters) and heading(bangle)
;
;nearwave("wave.wav", dist) plays wave file from the mouth of the nearest enemy with max dist to be heard
;nearanim(anim_move)    sets the nearest enemy to ADM move slot
;
;SSNwave(ssn, "wave.wav", dist) plays wave file from the mouth of the ssn with max dist to be heard
;wave("wave.wav", dist) plays wave file from mouth of player
;SSNanim(ssn, anim_move)    sets the ssn to ADM move slot
;SSNradio(ssn, "wave.wav")  sets the ssn to talk on radio
;
;SSNmax(ssn, maxengage) set max engage distance
;SSNmin(ssn, minengage) set min engage distance
;SSNatt(ssn, maxattack) set max attack distance
;SSNSpawn(ssn, spawn count) set the spawn count, 0=don't respawn
;GroupMax(group, maxengage) set max engage distance
;GroupMin(group, minengage) set min engage distance
;GroupAtt(group, maxattack) set max attack distance
;GroupSpawn(group, spawn count) set the spawn count, 0=don't respawn
;remove(grp)            remove group # without a trace
;kill(grp)              kill group #
;removeSSN(ssn)         remove SSN # without a trace
;killSSN(ssn)           kill SSN #
;teleport(grp,tgt)      teleport group # to target #
;telessn(ssn, tgt)      teleport SSN # to target #
;targetfx(tgt)          create med particle fx at target #
;sound2tgt(ss,tgt)      create ssoundset at target # (ex. sound2tgt sSoundSet 1)
;ss2ssn(ss,ssn)         create ssoundset at center of ssn
;ammo2tgt(ammo,tgt)     create ammo # at target # (ex. ammo2tgt ammo_rocket 1)
;fx2tgt(fx,tgt)         create fx # at target # (ex. fx2tgt effect_lightning 1)
;opendoors(group)       open doors in group #
;closedoors(group)      close doors in group #
;SSNtoWP(ssn, wp)       redirect SSN to WP list
;GtoWP(group, wp)       redirect Group to WP list
;ammorain(ammo)         rain down ammo # somewhere near player
;ammoarea(ammo, area)   rain down ammo # somewhere inside area #
;fxrain(fx)             rain down effect # somewhere near player
;ssncspd(ssn,speed)     set ssn to combat speed of #
;ssnpspd(ssn,speed)     set ssn to patrol speed of #
;ssnuse(ssn)            snap ssn to emplaced weapon if within 3 meters
;ssnrelease(ssn)        remove ssn from emplaced weapon
;ssn2ssn(ssn, ssn)      have ssn goto ssn and try to snap to emplaced
;ssnface(ssn, face)     set face expression of ssn
;ssnguard(ssn, #)       set ssn to guard 1=ON, 0=Off
;ssnturn(ssn, heading)  turn ssn to heading 0-360
;ssnhp(ssn, hp)         set ssn's hitpoints to hp
;blockfire(wpnkey, #)   blockfiring of weapons under key, 0=fire, 1=block
;
;example select 1 of 3 randomly
;       dornd
;               text "1"
;       next
;               text "2"
;       next
;               text "3"
;       enddo
;
;example select 1 or 3 sequentialy
;       doseq
;               text "1"
;       next
;               text "2"
;       next
;               text "3"
;       enddo

;*********************************************************

if event(68) then
        ssnhp(59, 475)
    
endif
