//------------------------------ZOMBIE CODE defineprojectile ZOMBIEAXE PROJ_WORKSLIKE 4097 defineprojectile ZOMBIEAXE PROJ_SPAWNS SHOTSPARK1 defineprojectile ZOMBIEAXE PROJ_EXTRA 11 //ZOMBIEHIT defineprojectile ZOMBIEAXE PROJ_XREPEAT 3 defineprojectile ZOMBIEAXE PROJ_YREPEAT 3 defineprojectile ZOMBIEAXE PROJ_DECAL -1 defineprojectile ZOMBIEAXE PROJ_RANGE 2048 action AZOMBIEWALK1 0 4 5 1 10 action AZOMBIEWALK2 20 4 5 -1 10 action AZOMBIESTAYPUT 0 1 5 1 1 action AZOMBIESHOOT 54 7 5 1 12 action AZOMBIEGOTHIT 30 1 5 1 10 action AZOMBIEJIB 46 6 1 1 20 action AZOMBIEGUTS 158 6 1 1 20 action AZOMBIEFALLING 35 4 1 1 12 action AZOMBIEGETUP 40 2 1 1 12 action AZOMBIEVOODOO1 2484 7 1 1 12 action AZOMBIEVOODOO2 2492 1 1 1 1 action AZOMBIETESLA 2493 1 5 1 1 action AZOMBIEDEAD 53 1 1 1 1 action AZOMBIEDEAD2 39 1 1 1 1 action AZOMBIEGUTS2 165 1 1 1 1 move ZOMBIEWALK 80 80 move ZOMBIEFALL 0 512 move ZOMBIESTOP ai AIZOMBIEWALK AZOMBIEWALK1 ZOMBIEWALK getv ai AIZOMBIESTAYPUT AZOMBIESTAYPUT ZOMBIEFALL ai AIZOMBIEVOODOO1 AZOMBIEVOODOO1 ZOMBIESTOP faceplayer ai AIZOMBIEVOODOO2 AZOMBIEVOODOO2 ZOMBIESTOP faceplayer ai AIZOMBIETESLA AZOMBIETESLA ZOMBIESTOP faceplayer ai AIZOMBIESHOOT AZOMBIESHOOT ZOMBIESTOP ai AIZOMBIERANDOM AZOMBIEWALK1 ZOMBIEWALK randomangle ai AIZOMBIEGOTHIT AZOMBIEGOTHIT ZOMBIESTOP faceplayer ai AIZOMBIEDYING AZOMBIEJIB ZOMBIESTOP faceplayer ai AIZOMBIEFALLING AZOMBIEFALLING ZOMBIESTOP faceplayer ai AIZOMBIEGETUP AZOMBIEGETUP ZOMBIESTOP faceplayer ai AIZOMBIEGUTS AZOMBIEGUTS ZOMBIEFALL faceplayer ai AIZOMBIEDEAD AZOMBIEDEAD ZOMBIESTOP faceplayer ai AIZOMBIEDEAD2 AZOMBIEDEAD2 ZOMBIESTOP faceplayer ai AIZOMBIEGUTS2 AZOMBIEGUTS2 ZOMBIEFALL faceplayer eventloadactor ZOMBIE getactor[THISACTOR].hitag HITAGSET setactorvar[THISACTOR].w_enemyhitag HITAGSET setactor[THISACTOR].hitag 0 setactor[THISACTOR].xrepeat 24 setactor[THISACTOR].yrepeat 24 setactor[THISACTOR].extra ZOMBIESTRENGTH enda state checkzombiehitstate getactor[THISACTOR].extra extra setvar shoot_var 0 setvar enemyattack 0 setvar peractor3 0 ifvarg extra 0 { ifwasweapon PR_NAPALM { setactor[THISACTOR].extra -1 addkills 1 ai AIZOMBIEGUTS } else ifwasweapon RADIUSEXPLOSION { setactor[THISACTOR].extra -1 addkills 1 ai AIZOMBIEGUTS } else { state bloodspraystate soundonce AZOMPAIN ifvarg htextra 12 ai AIZOMBIEFALLING else ai AIZOMBIEGOTHIT } } else { ifwasweapon PR_NAPALM { setactor[THISACTOR].extra -1 addkills 1 ai AIZOMBIEGUTS } else ifwasweapon RADIUSEXPLOSION { setactor[THISACTOR].extra -1 addkills 1 ai AIZOMBIEGUTS } else { setactorvar[THISACTOR].w_enemyhitag 0 addkills 1 state bloodsprayshit ifrnd 85 soundonce AZOMDIE1 else ifrnd 85 soundonce AZOMDIE2 else soundonce AZOMDIE3 ifrnd 190 ai AIZOMBIEFALLING else { state bloodspraystate ai AIZOMBIEDYING setprojectile[ZOMBIEHEAD].vel 60 ezshoot 256 ZOMBIEHEAD getactor[RETURN].z z addvar z -3800 setactor[RETURN].z z } } } ends useractor enemy ZOMBIE ZOMBIESTRENGTH fall getplayer[THISACTOR].i PLAYERID getactor[THISACTOR].extra extra getactor[THISACTOR].htextra htextra setactorvar[THISACTOR].width 128 setactorvar[THISACTOR].height 8192 randvar enemyroam 512 state enemyeffects ifai NO { strength ZOMBIESTRENGTH sizeat 24 24 cstat 257 ai AIZOMBIESTAYPUT } ifhitweapon ifvarg extra 0 { state checkzombiehitstate } getactorvar[PLAYERID].invisible invisible ifp pdead setvar invisible 1 ifvarn invisible 1 { ifai AIZOMBIESTAYPUT ifp palive ifcansee { state facingstate ifvare set 1 { setvarvar ENEMYID PLAYERID soundonce AZOMROAM ai AIZOMBIEWALK } } ifai AIZOMBIEWALK { ifaction AZOMBIEWALK1 ifactioncount 3 action AZOMBIEWALK2 ifaction AZOMBIEWALK2 ifactioncount 4 action AZOMBIEWALK1 state enemymovingcode ifvare enemyattack 1 ifvare shoot_var 0 { ai AIZOMBIESHOOT setvar shoot_var 1 } getactor[ENEMYID].extra extra ifcansee ifvarg extra 0 { ifvare enemyroam 1 soundonce AZOMROAM else ifvare enemyroam 2 soundonce AZOMSPOT else ifvare enemyroam 3 soundonce AZOMMOAN } } ifai AIZOMBIESHOOT { addvar peractor3 1 ifvarg peractor3 27 { setvar peractor3 0 } getactorvar[ENEMYID].reflective reflective getactor[ENEMYID].extra paextra ifvarg paextra 0 { ifvare peractor3 18 { state enemymovingcode ifvare reflective 1 { ifvarl targetdist 1536 { soundonce AZOMSWIP setvar peractor3 0 state bloodspraystate subvarvar extra ZOMBIEHIT setactor[THISACTOR].extra extra ifvarg extra 0 { soundonce AZOMPAIN ai AIZOMBIEFALLING } else { cstat 0 setactor[THISACTOR].extra -1 addkills 1 state bloodsprayshit ifrnd 85 soundonce AZOMDIE1 else ifrnd 85 soundonce AZOMDIE2 else soundonce AZOMDIE3 ai AIZOMBIEFALLING } } else zshoot 8192 ZOMBIEAXE } else { soundonce AZOMSWIP ifvarg targetdist 1536 zshoot 8192 ZOMBIEAXE else shoot ZOMBIEAXE } } else ifvare peractor3 27 { setvar shoot_var 0 setvar enemyattack 0 setvar peractor3 0 ai AIZOMBIEWALK } } else { ifvare peractor3 18 { soundonce AZOMSWIP } ifvare peractor3 27 { setvar shoot_var 0 setvar enemyattack 0 setvar peractor3 0 ai AIZOMBIEWALK } } } } else { ifai AIZOMBIESHOOT { addvar peractor3 1 ifvarg peractor3 27 { setvar peractor3 0 ai AIZOMBIEWALK } } ifai AIZOMBIEWALK { ifaction AZOMBIEWALK1 ifactioncount 3 action AZOMBIEWALK2 ifaction AZOMBIEWALK2 ifactioncount 4 action AZOMBIEWALK1 getactor[THISACTOR].sectnum sectnum2 getactor[THISACTOR].ang ang getactor[THISACTOR].x x getactor[THISACTOR].y y getactor[THISACTOR].z z divvar height 2 subvarvar z height cos mycos ang sin mysin ang hitscan x y z sectnum2 mycos mysin 0 RETURN RETURN RETURN coorx1 coory1 RETURN CLIPMASK0 subvarvar x coorx1 subvarvar y coory1 mulvarvar x x mulvarvar y y addvarvar x y sqrt x DIST //дистанция до препятствия ifvare enemyturn 0 { ifvarl DIST 1536 { ifrnd 128 setvar enemyturn 1 else setvar enemyturn 2 } } ifvare enemyturn 1 { getactor[THISACTOR].ang ang addvarvar ang 32 setactor[THISACTOR].ang ang ifvarg DIST 1535 { addvar COUNTER 1 ifvarg COUNTER 4 { setvarvar esaveang ang setvar COUNTER 0 setvar enemyturn 0 } } } ifvare enemyturn 2 { getactor[THISACTOR].ang ang subvarvar ang 32 setactor[THISACTOR].ang ang ifvarg DIST 1535 { addvar COUNTER 1 ifvarg COUNTER 4 { setvarvar esaveang ang setvar COUNTER 0 setvar enemyturn 0 } } } ifcount 390 { ai AIZOMBIESTAYPUT resetcount break } } } ifai AIZOMBIEGOTHIT { ifcount 5 ai AIZOMBIEWALK } ifai AIZOMBIEGETUP { cstat 257 setvar shoot_var 0 setvar enemyattack 0 ifactioncount 2 ai AIZOMBIEWALK } ifai AIZOMBIEDYING { cstat 0 ifactioncount 6 ai AIZOMBIEDEAD } ifai AIZOMBIEFALLING { cstat 0 ifactioncount 4 ai AIZOMBIEDEAD2 } ifai AIZOMBIEDEAD2 { cstat 0 ifvarg extra 0 { ifcount 45 ai AIZOMBIEGETUP } } ifai AIZOMBIEGUTS { cstat 128 iffloordistl 10 move ZOMBIESTOP ifactioncount 6 ai AIZOMBIEGUTS2 } ifai AIZOMBIEGUTS2 { cstat 0 iffloordistl 10 move ZOMBIESTOP } getactorvar[THISACTOR].voodoohitenemy voodoohitenemy ifvare voodoohitenemy 1 { addkills 1 setactor[THISACTOR].extra 0 cstat 0 ai AIZOMBIEVOODOO1 ifrnd 85 soundonce AZOMDIE1 else ifrnd 85 soundonce AZOMDIE2 else soundonce AZOMDIE3 setactorvar[THISACTOR].voodoohitenemy 0 } ifai AIZOMBIEVOODOO1 ifactioncount 7 ai AIZOMBIEVOODOO2 getactorvar[THISACTOR].teslahitenable teslahitenable ifvare teslahitenable 1 { getactor[THISACTOR].extra extra ifvarg extra 0 { cstat 257 ai AIZOMBIETESLA } else { addkills 1 ifrnd 85 soundonce AZOMDIE1 else ifrnd 85 soundonce AZOMDIE2 else soundonce AZOMDIE3 ai AIZOMBIEFALLING } setactorvar[THISACTOR].teslahitenable 0 } ifai AIZOMBIETESLA { randvar enemyshade 64 setactor[THISACTOR].shade enemyshade ifcount 10 { ai AIZOMBIEWALK } } getactorvar[THISACTOR].flamedamage flamedamage ifvarg flamedamage 0 { addvar COUNTER 1 state newfirestate } ifinwater { setvar COUNTER 0 } ifvarvare COUNTER flamedamage { setactorvar[THISACTOR].flamedamage 0 setvar COUNTER 0 } getactorvar[THISACTOR].burningguyactive tmp ifvare tmp 1 { espawn BURNINGGUY setactor[RETURN].xrepeat 22 setactor[RETURN].yrepeat 22 setactorvar[RETURN].bguy_id 1 setactor[THISACTOR].extra 0 addkills 1 setactorvar[THISACTOR].burningguyactive 0 killit } enda //------------------------------ZOMBIERISE CODE action AZR1 1 0 1 1 0 action AZR2 -8 10 1 1 14 action AZRDYING -1849 4 1 1 15 action AZRDEAD -1845 0 1 1 0 move AZRSTOP 0 ai AIZR1 AZR1 AZRSTOP faceplayer ai AIZR2 AZR2 AZRSTOP faceplayer ai AIZRDYING AZRDYING AZRSTOP faceplayer ai AIZRDEAD AZRDEAD AZRSTOP eventloadactor ZOMBIERISE setactor[THISACTOR].xrepeat 24 setactor[THISACTOR].yrepeat 24 setactor[THISACTOR].extra ZOMBIESTRENGTH enda useractor notenemy ZOMBIERISE 0 AZR1 fall getplayer[THISACTOR].i PLAYERID ifai NO { addvar TOTALKILLS 1 cstat 384 sizeat 24 24 ai AIZR1 } getactorvar[PLAYERID].invisible invisible ifai AIZR1 ifcansee ifvare invisible 0 ifpdistl 4096 { sizeat 24 24 cstat 128 ai AIZR2 } getactorvar[THISACTOR].flamedamage flamedamage ifvarg flamedamage 0 ifvare peractor 0 { sizeat 24 24 cstat 0 ai AIZRDYING ifrnd 85 soundonce AZOMDIE1 else ifrnd 85 soundonce AZOMDIE2 else ifrnd 85 soundonce AZOMDIE3 state bloodspraystate addkills 1 setvar peractor 1 } ifai AIZRDYING ifactioncount 4 { ai AIZRDEAD } ifai AIZR2 ifactioncount 8 { espawn ZOMBIE killit } getactor[THISACTOR].htextra htextra getactor[THISACTOR].htang htang cos x htang sin y htang ifvarn htextra -1 { setvarvar k_damage htextra addvar peractor2 4 } // damage iffloordistl 10 // deaccelerate on ground subvarvar k_damage peractor2 ifvarl k_damage 0 { setvar k_damage 0 setactor[THISACTOR].htextra -1 setvar peractor2 0 } // clamping multiplier mulvarvar x k_damage // roll force = damage - deacceleration mulvarvar y k_damage shiftvarr x 10 shiftvarr y 10 setvar z 0 movesprite THISACTOR x y z CLIPMASK0 RETURN enda action ZBURNEDACT1 0 4 1 1 15 action ZBURNEDACT2 4 1 1 1 1 useractor notenemy ZBURNED sizeat 24 24 fall ifaction 0 { cstat 128 action ZBURNEDACT1 } ifaction ZBURNEDACT1 { ifactioncount 4 { cstat 0 action ZBURNEDACT2 } } enda