include BloodTC/blcons/enemy_param.con gamevar ENEMYID 0 2 gamevar enemyturn 0 2 gamevar turntarget 0 2 gamevar enemyattack 0 2 gamevar targetdist 0 2 gamevar notmovingtime 0 2 gamevar eturning 0 2 // Monsters codes state enemymovingcode getactor[THISACTOR].htextra htextra ifvarg htextra 0 { getactor[THISACTOR].htowner spriteid ifvarg spriteid 0 { getactor[spriteid].owner ENEMYID } } ifvarg ENEMYID 0 ifvarvarn ENEMYID THISACTOR { getactorvar[THISACTOR].height height getactor[THISACTOR].z z subvarvar z height setactor[THISACTOR].z z canseespr THISACTOR ENEMYID see addvarvar z height setactor[THISACTOR].z z getactor[ENEMYID].x mx getactor[ENEMYID].y my getactor[THISACTOR].x x getactor[THISACTOR].y y subvarvar mx x subvarvar my y getangle mang mx my setvarvar saveang mang getactor[THISACTOR].ang ang getincangle mang mang ang mulvarvar mx mx mulvarvar my my addvarvar mx my sqrt mx targetdist //дистанция до ENEMYID getactor[THISACTOR].sectnum sectnum2 getactor[THISACTOR].ang ang 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 hitspritesaved coorx1 coory1 RETURN CLIPMASK0 subvarvar x coorx1 subvarvar y coory1 mulvarvar x x mulvarvar y y addvarvar x y sqrt x DIST //дистанция до препятствия ifvare turntarget 0 { ifvare see 1 { getactor[ENEMYID].x save_enemx getactor[ENEMYID].y save_enemy ifvarg mang -512 ifvarl mang 512 { setactor[THISACTOR].ang saveang } else setactor[THISACTOR].ang esaveang } else ifvare see 0 { getactor[THISACTOR].x x getactor[THISACTOR].y y subvarvar x save_enemx subvarvar y save_enemy getangle mang x y addvarvar mang 1024 setactor[THISACTOR].ang mang } } ifvare enemyattack 0 { ifvare enemyturn 0 { ifvarvarn hitspritesaved ENEMYID { ifvarg hitspritesaved 0 ifvarl DIST 1536 { ifvare eturning 0 { ifrnd 128 setvar enemyturn 3 else setvar enemyturn 4 } } else ifvarl DIST 1536 { setvar turntarget 1 ifrnd 128 setvar enemyturn 1 else setvar enemyturn 2 } } else { ifvarl targetdist 1024 { setactor[THISACTOR].ang saveang setvar enemyattack 1 } } ifvare eturning 1 { addvar COUNTER 1 ifvarg COUNTER 18 setvar eturning 0 } } 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 turntarget 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 turntarget 0 setvar enemyturn 0 } } } ifvare enemyturn 3 { getactor[THISACTOR].ang ang addvarvar ang 512 setactor[THISACTOR].ang ang setvarvar esaveang ang setvar enemyturn 0 setvar eturning 1 } ifvare enemyturn 4 { getactor[THISACTOR].ang ang subvarvar ang 512 setactor[THISACTOR].ang ang setvarvar esaveang ang setvar enemyturn 0 setvar eturning 1 } } } ends state facingstate getactor[THISACTOR].x mx getactor[THISACTOR].y my getactor[PLAYERID].x x getactor[PLAYERID].y y getplayer[THISACTOR].kickback_pic perplayer ifvare perplayer 0 { ifvarg akimboshotgunalt 0 { setvarvar perplayer akimboshotgunalt } ifvarg tommysweep 0 { setvarvar perplayer tommysweep } ifvarg akimbotommysweep 0 { setvarvar perplayer akimbotommysweep } ifvarg voodooalt 0 { setvarvar perplayer voodooalt } ifvarg tntalt 0 { setvarvar perplayer tntalt } ifvarg sprayalt 0 { setvarvar perplayer sprayalt } ifvarg akimboteslaalt 0 { setvarvar perplayer akimboteslaalt } ifvarg teslaalt 0 { setvarvar perplayer teslaalt } ifvarg voodoocount1 0 { setvarvar perplayer voodoocount1 } ifvarg voodoocount2 0 { setvarvar perplayer voodoocount2 } ifvarg voodoocount3 0 { setvarvar perplayer voodoocount3 } ifvarg voodoocount4 0 { setvarvar perplayer voodoocount4 } ifvarg voodoocount5 0 { setvarvar perplayer voodoocount5 } } subvarvar mx x subvarvar my y getangle mang mx my getactor[THISACTOR].ang ang getincangle mang mang ang ifvarg mang -384 ifvarl mang 384 { ifpdistl 8192 ifvarg perplayer 0 { setvar set 1 } else ifpdistl 1536 setvar set 1 else { setvar set 0 } } else setvar set 1 ends state ifnotmovingstate ifnotmoving { getactor[THISACTOR].ang ang randvar mang 1024 addvarvar ang mang setactor[THISACTOR].ang ang } ends gamevar damagex 0 2 gamevar damagey 0 2 gamevar damagez 0 2 state zvelstate shiftvarr damagex 9 shiftvarr damagey 9 setvar damagez -150 mulvarvar damagez k_damage ends state enemyeffects ifvare VISION 1 { setactor[THISACTOR].shade -127 } // Thanks to KLIMaka for this code getactor[THISACTOR].htextra htextra getactor[THISACTOR].htang htang getactor[THISACTOR].extra extra cos damagex htang sin damagey htang ifvarn htextra -1 { setvarvar k_damage htextra addvar peractor2 3 } // 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 damagex k_damage // roll force = damage - deacceleration mulvarvar damagey k_damage ifwasweapon RADIUSEXPLOSION { state zvelstate } else ifwasweapon PR_NAPALM { state zvelstate } else ifwasweapon ALTNAPALM { state zvelstate } else ifwasweapon ALTTESLA { state zvelstate } else { shiftvarr damagex 12 shiftvarr damagey 12 setvar damagez 0 } movesprite THISACTOR damagex damagey damagez CLIPMASK0 RETURN ends include BloodTC/blcons/enemies/zombie.con //include BloodTC/blcons/enemies/cultist.con include BloodTC/blcons/enemies/fatrat.con include BloodTC/blcons/enemies/evilhand.con include BloodTC/blcons/enemies/boneell.con include BloodTC/blcons/enemies/gargoyle.con include BloodTC/blcons/enemies/burningguy.con