//=========================================================================== // // Mancubus // //=========================================================================== class Fatso : Actor { Default { Health 600; Radius 48; Height 64; Mass 1000; Speed 8; PainChance 80; Monster; +FLOORCLIP +BOSSDEATH SeeSound "fatso/sight"; PainSound "fatso/pain"; DeathSound "fatso/death"; ActiveSound "fatso/active"; Obituary "$OB_FATSO"; } States { Spawn: FATT AB 15 A_Look; Loop; See: FATT AABBCCDDEEFF 4 A_Chase; Loop; Missile: FATT G 20 A_FatRaise; FATT H 10 BRIGHT A_FatAttack1; FATT IG 5 A_FaceTarget; FATT H 10 BRIGHT A_FatAttack2; FATT IG 5 A_FaceTarget; FATT H 10 BRIGHT A_FatAttack3; FATT IG 5 A_FaceTarget; Goto See; Pain: FATT J 3; FATT J 3 A_Pain; Goto See; Death: FATT K 6; FATT L 6 A_Scream; FATT M 6 A_NoBlocking; FATT NOPQRS 6; FATT T -1 A_BossDeath; Stop; Raise: FATT R 5; FATT QPONMLK 5; Goto See; } } //=========================================================================== // // Mancubus fireball // //=========================================================================== class FatShot : Actor { Default { Radius 6; Height 8; Speed 20; Damage 8; Projectile; +RANDOMIZE RenderStyle "Add"; Alpha 1; SeeSound "fatso/attack"; DeathSound "fatso/shotx"; } States { Spawn: MANF AB 4 BRIGHT; Loop; Death: MISL B 8 BRIGHT; MISL C 6 BRIGHT; MISL D 4 BRIGHT; Stop; } } //=========================================================================== // // Code (must be attached to Actor) // //=========================================================================== extend class Actor { const FATSPREAD = 90./8; void A_FatRaise() { A_FaceTarget(); A_PlaySound("fatso/raiseguns", CHAN_WEAPON); } void A_FatAttack1(class spawntype = "FatShot") { if (target) { A_FaceTarget (); // Change direction to ... Angle += FATSPREAD; SpawnMissile (target, spawntype); Actor missile = SpawnMissile (target, spawntype); if (missile) { missile.Angle += FATSPREAD; missile.VelFromAngle(); } } } void A_FatAttack2(class spawntype = "FatShot") { if (target) { A_FaceTarget (); // Now here choose opposite deviation. Angle -= FATSPREAD; SpawnMissile (target, spawntype); Actor missile = SpawnMissile (target, spawntype); if (missile) { missile.Angle -= FATSPREAD; missile.VelFromAngle(); } } } void A_FatAttack3(class spawntype = "FatShot") { if (target) { A_FaceTarget (); Actor missile = SpawnMissile (target, spawntype); if (missile) { missile.Angle -= FATSPREAD/2; missile.VelFromAngle(); } missile = SpawnMissile (target, spawntype); if (missile) { missile.Angle += FATSPREAD/2; missile.VelFromAngle(); } } } }