/***************************************************************************** * DECOHack Patch File * Main ****************************************************************************/ #include #include //Legacy of Rust Sate and Thing Protection set state free safety on state protect 1100 to 1566 each thing from 151 to 209 {} /***************************************************************************** * Summoner ****************************************************************************/ /* - summoner-v1-Original aJynks version ------------------------------------------------------------------------- auto thing summoner_Monster { health 1000 speed 0 radius 20 height 16 damage 0 reactiontime 8 painchance 0 mass 100 clear flags +NOBLOCKMAP +NOGRAVITY states { spawn: TNT1 A 1 goto spawn_start spawn_start: TNT1 A 0 A_PlaySound(TELEPT, 0) TFOG ABABCD 6 bright //EFGHIJ 6 bright // 256 / total options - options already used) // So jump 3rd option of 11 options : 256/11-2 = 256/9 = round(28.4) = 28 TNT1 A 0 { A_RadiusDamage(2000, 4) // "telefrag" anything in spawn position A_RandomJump(spawn_ShotgunGuy, 23) A_RandomJump(spawn_ChaingunGuy, 26) A_RandomJump(spawn_DoomImp, 28) A_RandomJump(spawn_Demon, 32) A_RandomJump(spawn_Cacodemon, 37) A_RandomJump(spawn_HellKnight, 43) A_RandomJump(spawn_LostSoul, 51) A_RandomJump(spawn_Revenant, 64) A_RandomJump(spawn_Mancubus, 85) A_RandomJump(spawn_Arachnotron, 128) } // 9.09% each option (I think) goto spawn_ZombieMan spawn_ZombieMan: TNT1 A 1 A_SpawnObject(ZombieMan, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_ShotgunGuy: TNT1 A 1 A_SpawnObject(ShotgunGuy, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_ChaingunGuy: TNT1 A 1 A_SpawnObject(ChaingunGuy, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_DoomImp: TNT1 A 1 A_SpawnObject(DoomImp, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Demon: TNT1 A 1 A_SpawnObject(Demon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Cacodemon: TNT1 A 1 A_SpawnObject(Cacodemon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_HellKnight: TNT1 A 1 A_SpawnObject(HellKnight, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_LostSoul: TNT1 A 1 A_SpawnObject(LostSoul, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Revenant: TNT1 A 1 A_SpawnObject(Revenant, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Mancubus: TNT1 A 1 A_SpawnObject(Fatso, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Arachnotron: TNT1 A 1 A_SpawnObject(Arachnotron, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop } } /* spawn_ZombieMan: TNT1 A 1 A_SpawnObject(ZombieMan, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_ShotgunGuy: TNT1 A 1 A_SpawnObject(ShotgunGuy, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_ChaingunGuy: TNT1 A 1 A_SpawnObject(ChaingunGuy, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Imp: TNT1 A 1 A_SpawnObject(Imp, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Demon: TNT1 A 1 A_SpawnObject(Demon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Spectre: TNT1 A 1 A_SpawnObject(Spectre, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Cacodemon: TNT1 A 1 A_SpawnObject(Cacodemon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_BaronOfHell: TNT1 A 1 A_SpawnObject(BaronOfHell, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_HellKnight: TNT1 A 1 A_SpawnObject(HellKnight, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_LostSoul: TNT1 A 1 A_SpawnObject(LostSoul, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_PainElemental: TNT1 A 1 A_SpawnObject(PainElemental, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Revenant: TNT1 A 1 A_SpawnObject(Revenant, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Mancubus: TNT1 A 1 A_SpawnObject(Mancubus, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Arachnotron: TNT1 A 1 A_SpawnObject(Arachnotron, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Archvile: TNT1 A 1 A_SpawnObject(Archvile, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_SpiderMastermind: TNT1 A 1 A_SpawnObject(SpiderMastermind, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_Cyberdemon: TNT1 A 1 A_SpawnObject(Cyberdemon, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_SSWolfenstein: TNT1 A 1 A_SpawnObject(SSWolfenstein, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop spawn_ExplosiveBarrel: TNT1 A 1 A_SpawnObject(ExplosiveBarrel, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) TFOG EFGHIJ 6 bright stop */ auto thing summoner_boxSpawner { health 1000 speed 10 radius 6 height 32 damage 3 reactiontime 8 painchance 0 mass 100 clear flags +NOBLOCKMAP +MISSILE +DROPOFF +NOGRAVITY +NOCLIP states { spawn: TNT1 A 1 goto spawn_cube spawn_cube: TNT1 A 0 A_PlaySound(BOSPIT, 0) SUZ8 A 4 SUZ8 BCDA 4 SUZ8 B 4 TNT1 A 0 A_SpawnObject(summoner_Monster, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) //TFOG ABABCDEFGHIJ 6 bright stop } } auto thing summoner_boxPlayer <- thing ArchvileFire "summoner_boxPlayer" { deathsound "" clear flags +MISSILE +NOGRAVITY states { spawn: TNT1 A 1 goto spawn_box spawn_box: TNT1 A 1 {A_Fire A_SpawnObject(summoner_boxSpawner, 0.0, -200.0, 0.0, 0.0, 0.0, 0.0, 0.0)} stop } } /* flame_burn: FIRE A 1 bright A_StartFire FIRE BAB 2 bright A_Fire FIRE C 2 bright A_FireCrackle FIRE BCBCDCDCDEDED 2 bright A_Fire FIRE E 2 bright A_FireCrackle FIRE FEFEFGHGHGH 2 bright A_Fire stop */ auto thing summoner_ball { health 1000 speed 25 radius 6 height 8 damage 5 reactiontime 8 painchance 0 mass 100 seesound "firsht" deathsound "firxpl" clear flags +NOBLOCKMAP +MISSILE +DROPOFF +NOGRAVITY states { spawn: SRGX AB 4 bright loop death: SRGX CDE 6 bright stop } } auto thing summonerTrailFire { health 1000 speed 0 radius 20 height 16 damage 0 reactiontime 8 painchance 0 mass 100 clear flags +NOBLOCKMAP +NOGRAVITY states{ spawn: SF0Z CBCDCDEDEFEFGHGH 2 bright Stop } } auto thing summonerTrail { health 1000 speed 0 radius 20 height 16 damage 0 reactiontime 8 painchance 0 mass 100 clear flags +NOBLOCKMAP +NOGRAVITY states{ spawn: SF0Z ABAB 2 bright TNT1 A 0 bright A_SpawnObject(summonerTrailFire, 0, 0, 0, 0, 0, 0, 0) Stop } } auto thing Summoner_painSound { clear flags states { spawn: TNT1 AA 1 A_PlaySound(FLAME, 0) TNT1 A 59 } } auto thing Summoner "Summoner" { //$Category c_Monsters //$Colour 13 EdNum 6000 Health 1000 Speed 15 PainChance 28 Radius 20 Height 16 Mass 100 Reactiontime 8 seesound "sumsit" activesound "sumact" painsound "sumpai" deathsound "sumdth" clear flags +SOLID +SHOOTABLE +COUNTKILL states { spawn: SUMM A 10 A_Look loop see: SUMM A 2 { A_Chase A_SpawnObject(summonerTrail, 0, 0, 0, 0, 0, 0, 0)} SUMM A 2 { A_Chase A_SpawnObject(summonerTrail, 0, 0, 0, 0, 0, 0, 0)} SUMM A 1 { A_Chase A_SpawnObject(summonerTrail, 0, 0, 0, 0, 0, 0, 0)} loop missile: TNT1 A 1 A_FaceTarget TNT1 A 0 { A_FaceTarget A_RandomJump(missile_Summon, 170) //A_RandomJump(missile_Shoot, 64) } //goto see goto missile_Shoot missile_Summon: TNT1 A 0 A_FaceTarget SUMM B 12 bright A_FaceTarget TNT1 A 1 bright {A_FaceTarget A_SpawnObject(summoner_boxPlayer, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)} SUMM E 40 bright A_FaceTarget goto see missile_Shoot: SUMM B 12 bright A_FaceTarget TNT1 A 0 A_MonsterProjectile(summoner_ball, 0, 0, 0, 0) SUMM CCCDD 2 bright A_FaceTarget SUMM D 8 bright A_FaceTarget goto see pain: SUMM F 3 A_SpawnObject(Summoner_painSound, 0, 0, 0, 0, 0, 0, 0) SUMM F 3 A_Pain SUMM F 35 goto see death: TNT1 A 0 {A_SpawnObject(Summoner_painSound, 0, 0, 0, 0, 0, 0, 0) A_SpawnObject(summonerTrail, 0, 0, 0, 0, 0, 0, 0) } SUMM F 33 A_Scream TNT1 A 0 A_RandomJump(death_spawn, 18) SUMM GHIJKL 7 SUMM M 40 SUMM M -1 stop death_spawn: SUMM GGHH 2 PAIN KJIH 8 TNT1 A 0 A_SpawnObject(PainElemental, 0, 0, 0, 0, 0, 0, 0) stop } } /* - summoner-v2-numsOic ------------------------------------------------------------------------- /***************************************************************************** * DECOHack Patch File * Main ****************************************************************************/ #include #include // Removes number conversion warnings when compiling set suppress warning "conversion" on // Legacy of Rust Sate and Thing Protection set state free safety on state protect 1100 to 1566 each thing from 151 to 209 {} // Template with default stats template thing DefaultThing { Health 1000 Speed 0 Radius 20 Height 16 Damage 0 ReactionTime 8 PainChance 0 Mass 100 } // Template with trail fire flags template thing DefaultTrail { clear flags +NOBLOCKMAP +NOGRAVITY +TRANSLUCENT } /***************************************************************************** * Summoner ****************************************************************************/ // Pre-assign things auto thing Summoner : thing DefaultThing "Summoner" {} auto thing summoner_ball : thing DefaultThing "summoner_ball" { +MISSILE } auto thing summoner_painSound : thing DefaultThing "summoner_PainSound" {} // Use ArchvileFire as base for spawner to get "player cords" to allow spawning in front of player. auto thing summoner_boxPlayer <- thing ArchvileFire "summoner_boxPlayer" {} auto thing summoner_boxWalker : thing DefaultThing "summoner_boxWalker" {} auto thing summoner_boxSpawner : thing DefaultThing "summoner_boxSpawner" {} auto thing summoner_Monster : thing DefaultThing "summoner_Monster" {} auto thing summonerTrailFast : thing DefaultTrail "summonerTrailFast" {} auto thing summonerTrailSlow : thing DefaultTrail "summonerTrailSlow" {} auto thing summonerTrailSmall : thing DefaultTrail "summonerTrailSmall" {} // Damage and radius values for spawner #define TelefragDamage 4000 #define Monster_radius 20 #define LostSoul_radius 16 #define Demon_radius 30 #define Cacodemon_radius 31 #define HellKnight_radius 24 #define Mancubus_radius 48 #define Arachnotron_radius 64 // #define Barrel_radius 10 // #define Spider_radius 128 // #define Cyberdemon_radius 40 // Counter-telefrag overlapping things #define Summoner_radiusDamage 2000 #define Summoner_radius 20 // Missile angles for fireball volley #define VolleyAngle1 0 #define VolleyAngle2 15 #define VolleyAngle3 -15 #define VolleyAngle4 30 #define VolleyAngle5 -30 // Actual Monster itself (based on Archvile) thing Summoner { //$Category c_Monsters //$Colour 13 EdNum 6000 Radius Summoner_radius Speed 15 PainChance 28 Height 56 seesound "sumsit" activesound "sumact" painsound "sumpai" deathsound "sumdth" clear flags +SOLID +SHOOTABLE +COUNTKILL +NORADIUSDMG // Can't be fake-telefragged +DMGIGNORED // Enemies ignore its attacks +SHORTMRANGE // More aggressive? states { spawn: SUMM A 10 A_Look loop see: TNT1 A 0 A_JumpIfTargetCloser(SeeFast, 256) Goto SeeNormal SeeNormal: TNT1 A 0 { // Counter-telefrag overlapping things A_RadiusDamage(Summoner_radiusDamage, Summoner_radius) A_SpawnObject(summonerTrailFast) } SUMM AA 2 A_Chase Goto See SeeFast: TNT1 A 0 { // Counter-telefrag overlapping things A_RadiusDamage(Summoner_radiusDamage, Summoner_radius) A_SpawnObject(summonerTrailFast) } SUMM AA 1 A_Chase Goto See Melee: // Activates attack on melee contact missile: TNT1 A 0 { A_FaceTarget A_JumpIfTargetCloser(missile_Shoot, 256) // Fire missile if close A_RandomJump(missile_Summon, 225) } // 88% chance goto missile_Shoot missile_Summon: SUMM B 8 Bright A_FaceTarget SUMM C 4 Bright TNT1 A 0 { A_JumpIfTargetCloser(missile_Shoot_Middle, 256) // Fire missile if close A_JumpIfTargetInSight(missile_Summon_Finish) } Goto See missile_Summon_Finish: SUMM E 30 bright { A_FaceTarget A_SpawnObject(summoner_boxPlayer, 0, 100) } SUMM E 20 bright goto see missile_Shoot: SUMM BBBB 2 bright A_FaceTarget SUMM CC 2 Bright A_FaceTarget missile_Shoot_Middle: TNT1 A 0 { A_JumpIfTargetCloser(Missile_Shoot_Volley, 256) // Fire volley if close A_MonsterProjectile(summoner_ball) } missile_Shoot_End: SUMM DD 2 Bright A_FaceTarget SUMM D 14 Bright A_FaceTarget goto see Missile_Shoot_Volley: // Fires 3 balls in 5 random directions TNT1 A 0 { A_FaceTarget A_RandomJump(Volley_Stage1_Ball1, 51) // 256/5 A_RandomJump(Volley_Stage1_Ball2, 64) // 256/4 A_RandomJump(Volley_Stage1_Ball3, 85) // 256/3 A_RandomJump(Volley_Stage1_Ball4, 128) } // 256/2 Goto Volley_Stage1_Ball5 Volley_Stage1_Ball1: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle1) Goto Volley_Stage1_End Volley_Stage1_Ball2: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle2) Goto Volley_Stage1_End Volley_Stage1_Ball3: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle3) Goto Volley_Stage1_End Volley_Stage1_Ball4: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle4) Goto Volley_Stage1_End Volley_Stage1_Ball5: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle5) Goto Volley_Stage1_End Volley_Stage1_End: TNT1 A 0 { A_FaceTarget A_RandomJump(Volley_Stage2_Ball1, 51) // 256/5 A_RandomJump(Volley_Stage2_Ball2, 64) // 256/4 A_RandomJump(Volley_Stage2_Ball3, 85) // 256/3 A_RandomJump(Volley_Stage2_Ball4, 128) } // 256/2 Goto Volley_Stage2_Ball5 Volley_Stage2_Ball1: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle1) Goto Volley_Stage2_End Volley_Stage2_Ball2: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle2) Goto Volley_Stage2_End Volley_Stage2_Ball3: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle3) Goto Volley_Stage2_End Volley_Stage2_Ball4: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle4) Goto Volley_Stage2_End Volley_Stage2_Ball5: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle5) Goto Volley_Stage2_End Volley_Stage2_End: TNT1 A 0 { A_FaceTarget A_RandomJump(Volley_Stage3_Ball1, 51) // 256/5 A_RandomJump(Volley_Stage3_Ball2, 64) // 256/4 A_RandomJump(Volley_Stage3_Ball3, 85) // 256/3 A_RandomJump(Volley_Stage3_Ball4, 128) } // 256/2 Goto Volley_Stage3_Ball5 Volley_Stage3_Ball1: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle1) Goto missile_Shoot_End Volley_Stage3_Ball2: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle2) Goto missile_Shoot_End Volley_Stage3_Ball3: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle3) Goto missile_Shoot_End Volley_Stage3_Ball4: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle4) Goto missile_Shoot_End Volley_Stage3_Ball5: SUMM D 4 Bright A_MonsterProjectile(summoner_ball, VolleyAngle5) Goto missile_Shoot_End pain: SUMM F 3 { A_SpawnObject(summoner_painSound) A_SpawnObject(summonerTrailSmall) } SUMM F 3 A_Pain SUMM F 15 goto see death: TNT1 A 0 { A_SpawnObject(summoner_painSound) A_Scream } SUMM FFFF 7 A_SpawnObject(summonerTrailSmall) SUMM F 5 A_SpawnObject(summonerTrailSmall) SUMM G 7 { A_RandomJump(death_spawn, 18) // 7% chance A_Fall } SUMM HIJKL 7 SUMM M 40 SUMM M -1 stop death_spawn: SUMM GH 4 PAIN KJIH 8 TNT1 A 0 A_SpawnObject(PainElemental) stop } } // Alt Attack.. ball missile (based on impBall) thing summoner_ball { speed 25 radius 6 height 8 damage 5 seesound "firsht" deathsound "firxpl" clear flags +NOBLOCKMAP +MISSILE +DROPOFF +NOGRAVITY +TRANSLUCENT states { spawn: SRGX AB 4 bright loop death: SRGX CDE 6 bright stop } } // seperate sound player so sound is not cut off thing summoner_painSound { clear flags states { spawn: TNT1 A 1 TNT1 A 59 A_PlaySound(FLAME, 0) Stop } } // Use ArchvileFire as base for spawner box to get "player cords" to allow spawning in front of target. thing summoner_boxPlayer { clear flags +NOGRAVITY +MISSILE states { spawn: TNT1 A 1 Goto spawn_walker spawn_walker: TNT1 A 0 { A_Fire A_SpawnObject(summoner_boxWalker, 0, -56) } // Spawn 56 units from target Stop } } // Separate thing since changing a thing's MISSILE status causes bugs thing summoner_boxWalker { Radius Arachnotron_radius // Widest spawnable monster radius Speed -40 // Negative speed so spawner walks away from target +DROPOFF +NOGRAVITY +FLOAT +NOBLOCKMAP States { Spawn: TNT1 A 1 Goto SpawnLoop SpawnLoop: TNT1 A 1 { A_Look A_Turn(180) } Loop See: SeeSequence: // Walks away from target until 200 units away TNT1 A 0 { A_AddFlags(SOLID) // Intended to reduce stuck spawns A_RemoveFlags(NOBLOCKMAP) A_Chase A_JumpIfTargetCloser(SeeSequence2, 200) } Goto spawn_box SeeSequence2: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence3, 200) } Goto spawn_box SeeSequence3: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence4, 200) } Goto spawn_box SeeSequence4: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence5, 200) } Goto spawn_box SeeSequence5: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence6, 200) } Goto spawn_box SeeSequence6: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence7, 200) } Goto spawn_box SeeSequence7: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence8, 200) } Goto spawn_box SeeSequence8: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence9, 200) } Goto spawn_box SeeSequence9: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence10, 200) } Goto spawn_box SeeSequence10: TNT1 A 0 A_Chase Goto spawn_box // Avoid infinite loop spawn_box: TNT1 A 35 { A_RemoveFlags(SOLID) A_AddFlags(NOBLOCKMAP) A_SpawnObject(summonerTrailSlow) A_SpawnObject(summoner_boxSpawner) A_PlaySound(FLAME) } Stop } } // Spawner Box thing summoner_boxSpawner { radius 6 height 32 damage 3 clear flags // +MISSILE +NOGRAVITY +DROPOFF +NOBLOCKMAP +NOCLIP states { spawn: SUZ8 A 1 SUZ8 A 1 A_PlaySound(BOSPIT) SUZ8 BCDABCDABCD 2 // Spawn Monsters from List spawn_start: // 256 / total options - options already used) // So jump 3rd option of 11 options : 256/11-2 = 256/9 = round(28.4) = 28 // Alternatively, 256 / total options counting from the bottom TNT1 A 0 { // A_RandomJump(spawn_ExplosiveBarrel, 14) // 256/18 // A_RandomJump(spawn_SSWolfenstein, 15) // 256/17 // A_RandomJump(spawn_Cyberdemon, 16) // 256/16 // A_RandomJump(spawn_SpiderMastermind, 17) // 256/15 // A_RandomJump(spawn_Archvile, 18) // 256/14 // A_RandomJump(spawn_PainElemental, 20) // 256/13 // A_RandomJump(spawn_BaronofHell, 21) // 256/12 A_RandomJump(spawn_Zombieman, 23) // 256/11 A_RandomJump(spawn_ShotgunGuy, 26) // 256/10 A_RandomJump(spawn_ChaingunGuy, 28) // 256/9 A_RandomJump(spawn_DoomImp, 32) // 256/8 A_RandomJump(spawn_Demon, 37) // 256/7 A_RandomJump(spawn_Cacodemon, 43) // 256/6 A_RandomJump(spawn_HellKnight, 51) // 256/5 A_RandomJump(spawn_LostSoul, 64) // 256/4 A_RandomJump(spawn_Revenant, 85) // 256/3 A_RandomJump(spawn_Mancubus, 128) // 256/2 } // 9.09% each option (I think) goto spawn_Arachnotron spawn_ZombieMan: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(ZombieMan) } Goto spawn_End spawn_ShotgunGuy: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(ShotgunGuy) } Goto spawn_End spawn_ChaingunGuy: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(ChaingunGuy) } Goto spawn_End spawn_DoomImp: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(DoomImp) } Goto spawn_End spawn_Demon: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Demon_radius) // "telefrag" anything in spawn position A_SpawnObject(Demon) } Goto spawn_End spawn_Cacodemon: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Cacodemon_radius) // "telefrag" anything in spawn position A_SpawnObject(Cacodemon) } Goto spawn_End spawn_HellKnight: TNT1 A 0 { A_RadiusDamage(TelefragDamage, HellKnight_radius) // "telefrag" anything in spawn position A_SpawnObject(HellKnight) } Goto spawn_End spawn_LostSoul: TNT1 A 0 { A_RadiusDamage(TelefragDamage, LostSoul_radius) // "telefrag" anything in spawn position A_SpawnObject(LostSoul) } Goto spawn_End spawn_Revenant: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(Revenant) } Goto spawn_End spawn_Mancubus: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Mancubus_radius) // "telefrag" anything in spawn position A_SpawnObject(Fatso) } Goto spawn_End spawn_Arachnotron: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Arachnotron_radius) // "telefrag" anything in spawn position A_SpawnObject(Arachnotron) } Goto spawn_End /* spawn_BaronOfHell: TNT1 A 0 { A_RadiusDamage(TelefragDamage, HellKnight_radius) A_SpawnObject(BaronOfHell) } Goto spawn_End spawn_PainElemental: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Cacodemon_radius) A_SpawnObject(PainElemental) } Goto spawn_End spawn_Archvile: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) A_SpawnObject(Archvile) } Goto spawn_End spawn_SpiderMastermind: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Spider_radius) A_SpawnObject(SpiderMastermind) } Goto spawn_End spawn_Cyberdemon: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Cyberdemon_radius) A_SpawnObject(Cyberdemon) } Goto spawn_End spawn_SSWolfenstein: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) A_SpawnObject(SSWolfenstein) } Goto spawn_End spawn_ExplosiveBarrel: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Barrel_radius) A_SpawnObject(ExplosiveBarrel) } Goto spawn_End */ spawn_End: TNT1 A 0 { A_PlaySound(TELEPT, 0) A_AddFlags(TRANSLUCENT) } SFOG ABABCDEFG 5 Bright Stop } } // Trail fire thing summonerTrailFast { states { spawn: SF0Z ABC 2 Bright SpawnLast: SF0Z DEFGH 2 Bright Stop } } thing summonerTrailSlow { States { Spawn: SF0Z ABABCBCDCDEDEFEFGHGH 2 Bright Stop } } thing summonerTrailSmall { state Spawn thing summonerTrailFast SpawnLast } /* - aJynks Rebuild of numsOic to personal prefrences -------------------------------------------------------------------------*/ /***************************************************************************** * DECOHack Patch File * Main ****************************************************************************/ #include #include // Removes number conversion warnings when compiling set suppress warning "conversion" on // Legacy of Rust Sate and Thing Protection set state free safety on state protect 1100 to 1566 each thing from 151 to 209 {} // Template with default stats template thing DefaultThing { Health 1000 Speed 0 Radius 20 Height 16 Damage 0 ReactionTime 8 PainChance 0 Mass 100 } // Template with trail fire flags template thing DefaultTrail { clear flags +NOBLOCKMAP +NOGRAVITY +TRANSLUCENT } /***************************************************************************** * Summoner ****************************************************************************/ // Pre-assign things auto thing Summoner : thing DefaultThing "Summoner" {} auto thing summoner_ball : thing DefaultThing "summoner_ball" { +MISSILE } auto thing summoner_painSound : thing DefaultThing "summoner_PainSound" {} // Use ArchvileFire as base for spawner to get "player cords" to allow spawning in front of player. auto thing summoner_boxPlayer <- thing ArchvileFire "summoner_boxPlayer" {} auto thing summoner_boxWalker : thing DefaultThing "summoner_boxWalker" {} auto thing summoner_boxSpawner : thing DefaultThing "summoner_boxSpawner" {} auto thing summoner_Monster : thing DefaultThing "summoner_Monster" {} auto thing summonerTrailFast : thing DefaultTrail "summonerTrailFast" {} auto thing summonerTrailSlow : thing DefaultTrail "summonerTrailSlow" {} auto thing summonerTrailSmall : thing DefaultTrail "summonerTrailSmall" {} // Damage and radius values for spawner #define TelefragDamage 4000 #define Monster_radius 4 #define LostSoul_radius 16 #define Demon_radius 30 #define Cacodemon_radius 31 #define HellKnight_radius 24 #define Mancubus_radius 48 #define Arachnotron_radius 64 // #define Barrel_radius 10 // #define Spider_radius 128 // #define Cyberdemon_radius 40 // Counter-telefrag overlapping things #define Summoner_radiusDamage 2000 #define Summoner_radius 40 // Actual Monster itself (based on Archvile) thing Summoner { //$Category c_Monsters //$Colour 13 EdNum 6000 health 900 speed 18 radius Summoner_radius height 56 damage 0 reactiontime 8 painchance 30 mass 500 seesound "sumsit" activesound "sumact" painsound "sumpai" deathsound "sumdth" clear flags +SOLID +SHOOTABLE +COUNTKILL //+NORADIUSDMG // Can't be fake-telefragged +DMGIGNORED // Enemies ignore its attacks +SHORTMRANGE // Short missile attack range states { spawn: SUMM A 10 A_Look loop see: TNT1 A 0 A_JumpIfTargetCloser(SeeFast, 160) Goto SeeNormal SeeNormal: TNT1 A 0 { // Counter-telefrag overlapping things //A_RadiusDamage(Summoner_radiusDamage, Summoner_radius) A_SpawnObject(summonerTrailFast) } SUMM AA 2 A_Chase Goto See SeeFast: TNT1 A 0 { // Counter-telefrag overlapping things //A_RadiusDamage(Summoner_radiusDamage, Summoner_radius) A_SpawnObject(summonerTrailFast) } SUMM AA 1 A_Chase Goto See Melee: // Activates attack on melee contact missile: TNT1 A 0 { A_FaceTarget A_JumpIfTargetCloser(missile_Shoot, 180) // Fire missile if close A_RandomJump(missile_Summon, 225) } // 88% chance goto missile_Shoot missile_Summon: SUMM B 8 Bright A_FaceTarget SUMM C 4 Bright TNT1 A 0 { A_JumpIfTargetCloser(missile_Shoot_Middle, 160) // Fire missile if close A_JumpIfTargetInSight(missile_Summon_Finish) } Goto See missile_Summon_Finish: SUMM E 30 bright { A_FaceTarget A_SpawnObject(summoner_boxPlayer, 0, 100) } SUMM E 20 bright goto see missile_Shoot: SUMM BBBB 2 bright A_FaceTarget SUMM CC 2 Bright A_FaceTarget missile_Shoot_Middle: TNT1 A 0 A_MonsterProjectile(summoner_ball) missile_Shoot_End: SUMM DD 2 Bright A_FaceTarget SUMM D 14 Bright A_FaceTarget goto see pain: SUMM F 3 { A_SpawnObject(summoner_painSound) A_SpawnObject(summonerTrailSmall) } SUMM F 3 A_Pain SUMM F 3 A_SpawnObject(summonerTrailFast) SUMM F 15 goto see death: TNT1 A 0 { A_SpawnObject(summoner_painSound) A_Scream } SUMM FFFF 7 A_SpawnObject(summonerTrailSmall) SUMM F 5 A_SpawnObject(summonerTrailSmall) SUMM G 7 { A_RandomJump(death_spawn, 26) // 10% chance A_Fall } SUMM HIJKL 7 SUMM M 40 SUMM M -1 stop death_spawn: SUMM GH 4 PAIN KJIH 8 TNT1 A 0 A_SpawnObject(PainElemental) stop } } // Alt Attack.. ball missile (based on impBall) thing summoner_ball { speed 25 radius 6 height 8 damage 5 seesound "firsht" deathsound "firxpl" clear flags +NOBLOCKMAP +MISSILE +DROPOFF +NOGRAVITY +TRANSLUCENT states { spawn: SRGX AB 4 bright loop death: SRGX CDE 6 bright stop } } // seperate sound player so sound is not cut off thing summoner_painSound { clear flags states { spawn: TNT1 A 1 TNT1 A 59 A_PlaySound(SUMFIR, 1) Stop } } // Use ArchvileFire as base for spawner box to get "player cords" to allow spawning in front of target. thing summoner_boxPlayer { clear flags +NOGRAVITY +MISSILE states { spawn: TNT1 A 1 Goto spawn_walker spawn_walker: TNT1 A 0 { A_Fire A_SpawnObject(summoner_boxWalker, 0, -56) } // Spawn 56 units from target Stop } } // Separate thing since changing a thing's MISSILE status causes bugs thing summoner_boxWalker { Radius Arachnotron_radius // Widest spawnable monster radius Speed -40 // Negative speed so spawner walks away from target +DROPOFF +NOGRAVITY +FLOAT +NOBLOCKMAP States { Spawn: TNT1 A 1 Goto SpawnLoop SpawnLoop: TNT1 A 1 { A_Look A_Turn(180) } Loop See: SeeSequence: // Walks away from target until 200 units away TNT1 A 0 { A_AddFlags(SOLID) // Intended to reduce stuck spawns A_RemoveFlags(NOBLOCKMAP) A_Chase A_JumpIfTargetCloser(SeeSequence2, 200) } Goto spawn_box SeeSequence2: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence3, 200) } Goto spawn_box SeeSequence3: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence4, 200) } Goto spawn_box SeeSequence4: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence5, 200) } Goto spawn_box SeeSequence5: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence6, 200) } Goto spawn_box SeeSequence6: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence7, 200) } Goto spawn_box SeeSequence7: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence8, 200) } Goto spawn_box SeeSequence8: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence9, 200) } Goto spawn_box SeeSequence9: TNT1 A 0 { A_Chase A_JumpIfTargetCloser(SeeSequence10, 200) } Goto spawn_box SeeSequence10: TNT1 A 0 A_Chase Goto spawn_box // Avoid infinite loop spawn_box: TNT1 A 35 { A_RemoveFlags(SOLID) A_AddFlags(NOBLOCKMAP) A_SpawnObject(summonerTrailSlow) A_SpawnObject(summoner_boxSpawner) }//A_PlaySound(FLAME) } Stop } } // Spawner Box thing summoner_boxSpawner { radius 6 height 32 damage 3 clear flags // +MISSILE +NOGRAVITY +DROPOFF +NOBLOCKMAP +NOCLIP states { spawn: SUZ8 A 1 SUZ8 A 1 A_PlaySound(BOSPIT) SUZ8 BCDABCDABCD 2 // Spawn Monsters from List /* chance = round(256 / remaining_spawns) Example for 11 monsters total: 256/11 = 23 256/10 = 26 256/9 = 28 256/8 = 32 256/7 = 37 256/6 = 43 256/5 = 51 256/4 = 64 256/3 = 85 256/2 = 128 last one = fallthrough Other Spawn Exmaples A_RandomJump(spawn_ExplosiveBarrel, ??) A_RandomJump(spawn_SSWolfenstein, ??) A_RandomJump(spawn_Cyberdemon, ??) A_RandomJump(spawn_SpiderMastermind, ??) A_RandomJump(spawn_Archvile, ??) A_RandomJump(spawn_PainElemental, ??) A_RandomJump(spawn_BaronofHell, ??) */ spawn_start: TNT1 A 0 { A_RandomJump(spawn_Zombieman,23) // 8.984% A_RandomJump(spawn_ShotgunGuy,26) // 9.264% A_RandomJump(spawn_ChaingunGuy,28) // 9.138% A_RandomJump(spawn_DoomImp,32) // 9.077% A_RandomJump(spawn_Demon,37) // 9.079% A_RandomJump(spawn_Cacodemon,43) // 9.110% A_RandomJump(spawn_HellKnight,51) // 9.094% A_RandomJump(spawn_LostSoul,64) // 9.063% A_RandomJump(spawn_Revenant,85) // 9.063% A_RandomJump(spawn_Mancubus,128) // 9.064% } goto spawn_Arachnotron // 9.064% spawn_ZombieMan: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(ZombieMan) } Goto spawn_End spawn_ShotgunGuy: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(ShotgunGuy) } Goto spawn_End spawn_ChaingunGuy: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(ChaingunGuy) } Goto spawn_End spawn_DoomImp: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(DoomImp) } Goto spawn_End spawn_Demon: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Demon_radius) // "telefrag" anything in spawn position A_SpawnObject(Demon) } Goto spawn_End spawn_Cacodemon: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Cacodemon_radius) // "telefrag" anything in spawn position A_SpawnObject(Cacodemon) } Goto spawn_End spawn_HellKnight: TNT1 A 0 { A_RadiusDamage(TelefragDamage, HellKnight_radius) // "telefrag" anything in spawn position A_SpawnObject(HellKnight) } Goto spawn_End spawn_LostSoul: TNT1 A 0 { A_RadiusDamage(TelefragDamage, LostSoul_radius) // "telefrag" anything in spawn position A_SpawnObject(LostSoul) } Goto spawn_End spawn_Revenant: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Monster_radius) // "telefrag" anything in spawn position A_SpawnObject(Revenant) } Goto spawn_End spawn_Mancubus: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Mancubus_radius) // "telefrag" anything in spawn position A_SpawnObject(Fatso) } Goto spawn_End spawn_Arachnotron: TNT1 A 0 { A_RadiusDamage(TelefragDamage, Arachnotron_radius) // "telefrag" anything in spawn position A_SpawnObject(Arachnotron) } Goto spawn_End spawn_End: TNT1 A 0 { A_PlaySound(TELEPT, 0) A_AddFlags(TRANSLUCENT) } TFOG ABABCDEFG 5 Bright Stop } } // Trail fire thing summonerTrailFast { states { spawn: SF0Z ABC 2 Bright SpawnLast: SF0Z DEFGH 2 Bright Stop } } thing summonerTrailSlow { States { Spawn: SUZ8 BCDA 2 bright //SF0Z ABABCBCDCDEDEFEFGHGH 2 Bright SFGR ABABCBCDCDEDEFEFGHGH 2 Bright Stop } } thing summonerTrailSmall { state Spawn thing summonerTrailFast SpawnLast }