* Hive Elementals and Bumblebores, plus associated useful action functions.

* Made Facestabbers take two hits and have associated pain/death animations. No other changes, just wanted to make sure THIS was done.
* Move Bubblebuzz-related stuff to go alongside the secret badniks and etc.
* MF2_INVERTAIMABLE. Inverts whether P_LookForEnemies can get at; replaces a hardcoded thingy.
This commit is contained in:
toasterbabe 2018-05-04 21:30:15 +01:00
parent 8f71e93cee
commit d0575f7fb0
10 changed files with 640 additions and 337 deletions

View File

@ -1618,206 +1618,209 @@ typedef struct
*/
static actionpointer_t actionpointers[] =
{
{{A_Explode}, "A_EXPLODE"},
{{A_Pain}, "A_PAIN"},
{{A_Fall}, "A_FALL"},
{{A_MonitorPop}, "A_MONITORPOP"},
{{A_GoldMonitorPop}, "A_GOLDMONITORPOP"},
{{A_GoldMonitorRestore}, "A_GOLDMONITORRESTORE"},
{{A_GoldMonitorSparkle}, "A_GOLDMONITORSPARKLE"},
{{A_Look}, "A_LOOK"},
{{A_Chase}, "A_CHASE"},
{{A_FaceStabChase}, "A_FACESTABCHASE"},
{{A_FaceTarget}, "A_FACETARGET"},
{{A_FaceTracer}, "A_FACETRACER"},
{{A_Scream}, "A_SCREAM"},
{{A_BossDeath}, "A_BOSSDEATH"},
{{A_CustomPower}, "A_CUSTOMPOWER"},
{{A_GiveWeapon}, "A_GIVEWEAPON"},
{{A_RingBox}, "A_RINGBOX"},
{{A_Invincibility}, "A_INVINCIBILITY"},
{{A_SuperSneakers}, "A_SUPERSNEAKERS"},
{{A_BunnyHop}, "A_BUNNYHOP"},
{{A_BubbleSpawn}, "A_BUBBLESPAWN"},
{{A_FanBubbleSpawn}, "A_FANBUBBLESPAWN"},
{{A_BubbleRise}, "A_BUBBLERISE"},
{{A_BubbleCheck}, "A_BUBBLECHECK"},
{{A_AwardScore}, "A_AWARDSCORE"},
{{A_ExtraLife}, "A_EXTRALIFE"},
{{A_GiveShield}, "A_GIVESHIELD"},
{{A_GravityBox}, "A_GRAVITYBOX"},
{{A_ScoreRise}, "A_SCORERISE"},
{{A_ParticleSpawn}, "A_PARTICLESPAWN"},
{{A_AttractChase}, "A_ATTRACTCHASE"},
{{A_DropMine}, "A_DROPMINE"},
{{A_FishJump}, "A_FISHJUMP"},
{{A_ThrownRing}, "A_THROWNRING"},
{{A_SetSolidSteam}, "A_SETSOLIDSTEAM"},
{{A_UnsetSolidSteam}, "A_UNSETSOLIDSTEAM"},
{{A_SignPlayer}, "A_SIGNPLAYER"},
{{A_OverlayThink}, "A_OVERLAYTHINK"},
{{A_JetChase}, "A_JETCHASE"},
{{A_JetbThink}, "A_JETBTHINK"},
{{A_JetgThink}, "A_JETGTHINK"},
{{A_JetgShoot}, "A_JETGSHOOT"},
{{A_ShootBullet}, "A_SHOOTBULLET"},
{{A_MinusDigging}, "A_MINUSDIGGING"},
{{A_MinusPopup}, "A_MINUSPOPUP"},
{{A_MinusCheck}, "A_MINUSCHECK"},
{{A_ChickenCheck}, "A_CHICKENCHECK"},
{{A_MouseThink}, "A_MOUSETHINK"},
{{A_DetonChase}, "A_DETONCHASE"},
{{A_CapeChase}, "A_CAPECHASE"},
{{A_RotateSpikeBall}, "A_ROTATESPIKEBALL"},
{{A_SlingAppear}, "A_SLINGAPPEAR"},
{{A_UnidusBall}, "A_UNIDUSBALL"},
{{A_RockSpawn}, "A_ROCKSPAWN"},
{{A_SetFuse}, "A_SETFUSE"},
{{A_CrawlaCommanderThink}, "A_CRAWLACOMMANDERTHINK"},
{{A_SmokeTrailer}, "A_SMOKETRAILER"},
{{A_RingExplode}, "A_RINGEXPLODE"},
{{A_OldRingExplode}, "A_OLDRINGEXPLODE"},
{{A_MixUp}, "A_MIXUP"},
{{A_RecyclePowers}, "A_RECYCLEPOWERS"},
{{A_Boss1Chase}, "A_BOSS1CHASE"},
{{A_FocusTarget}, "A_FOCUSTARGET"},
{{A_Boss2Chase}, "A_BOSS2CHASE"},
{{A_Boss2Pogo}, "A_BOSS2POGO"},
{{A_BossZoom}, "A_BOSSZOOM"},
{{A_BossScream}, "A_BOSSSCREAM"},
{{A_Boss2TakeDamage}, "A_BOSS2TAKEDAMAGE"},
{{A_Boss7Chase}, "A_BOSS7CHASE"},
{{A_GoopSplat}, "A_GOOPSPLAT"},
{{A_Boss2PogoSFX}, "A_BOSS2POGOSFX"},
{{A_Boss2PogoTarget}, "A_BOSS2POGOTARGET"},
{{A_BossJetFume}, "A_BOSSJETFUME"},
{{A_EggmanBox}, "A_EGGMANBOX"},
{{A_TurretFire}, "A_TURRETFIRE"},
{{A_SuperTurretFire}, "A_SUPERTURRETFIRE"},
{{A_TurretStop}, "A_TURRETSTOP"},
{{A_JetJawRoam}, "A_JETJAWROAM"},
{{A_JetJawChomp}, "A_JETJAWCHOMP"},
{{A_PointyThink}, "A_POINTYTHINK"},
{{A_CheckBuddy}, "A_CHECKBUDDY"},
{{A_HoodThink}, "A_HOODTHINK"},
{{A_ArrowCheck}, "A_ARROWCHECK"},
{{A_SnailerThink}, "A_SNAILERTHINK"},
{{A_SharpChase}, "A_SHARPCHASE"},
{{A_SharpSpin}, "A_SHARPSPIN"},
{{A_VultureVtol}, "A_VULTUREVTOL"},
{{A_VultureCheck}, "A_VULTURECHECK"},
{{A_SkimChase}, "A_SKIMCHASE"},
{{A_1upThinker}, "A_1UPTHINKER"},
{{A_SkullAttack}, "A_SKULLATTACK"},
{{A_LobShot}, "A_LOBSHOT"},
{{A_FireShot}, "A_FIRESHOT"},
{{A_SuperFireShot}, "A_SUPERFIRESHOT"},
{{A_BossFireShot}, "A_BOSSFIRESHOT"},
{{A_Boss7FireMissiles}, "A_BOSS7FIREMISSILES"},
{{A_Boss1Laser}, "A_BOSS1LASER"},
{{A_Boss4Reverse}, "A_BOSS4REVERSE"},
{{A_Boss4SpeedUp}, "A_BOSS4SPEEDUP"},
{{A_Boss4Raise}, "A_BOSS4RAISE"},
{{A_SparkFollow}, "A_SPARKFOLLOW"},
{{A_BuzzFly}, "A_BUZZFLY"},
{{A_GuardChase}, "A_GUARDCHASE"},
{{A_EggShield}, "A_EGGSHIELD"},
{{A_SetReactionTime}, "A_SETREACTIONTIME"},
{{A_Boss1Spikeballs}, "A_BOSS1SPIKEBALLS"},
{{A_Boss3TakeDamage}, "A_BOSS3TAKEDAMAGE"},
{{A_Boss3Path}, "A_BOSS3PATH"},
{{A_LinedefExecute}, "A_LINEDEFEXECUTE"},
{{A_PlaySeeSound}, "A_PLAYSEESOUND"},
{{A_PlayAttackSound}, "A_PLAYATTACKSOUND"},
{{A_PlayActiveSound}, "A_PLAYACTIVESOUND"},
{{A_SpawnObjectAbsolute}, "A_SPAWNOBJECTABSOLUTE"},
{{A_SpawnObjectRelative}, "A_SPAWNOBJECTRELATIVE"},
{{A_ChangeAngleRelative}, "A_CHANGEANGLERELATIVE"},
{{A_ChangeAngleAbsolute}, "A_CHANGEANGLEABSOLUTE"},
{{A_PlaySound}, "A_PLAYSOUND"},
{{A_FindTarget}, "A_FINDTARGET"},
{{A_FindTracer}, "A_FINDTRACER"},
{{A_SetTics}, "A_SETTICS"},
{{A_SetRandomTics}, "A_SETRANDOMTICS"},
{{A_ChangeColorRelative}, "A_CHANGECOLORRELATIVE"},
{{A_ChangeColorAbsolute}, "A_CHANGECOLORABSOLUTE"},
{{A_MoveRelative}, "A_MOVERELATIVE"},
{{A_MoveAbsolute}, "A_MOVEABSOLUTE"},
{{A_Thrust}, "A_THRUST"},
{{A_ZThrust}, "A_ZTHRUST"},
{{A_SetTargetsTarget}, "A_SETTARGETSTARGET"},
{{A_SetObjectFlags}, "A_SETOBJECTFLAGS"},
{{A_SetObjectFlags2}, "A_SETOBJECTFLAGS2"},
{{A_RandomState}, "A_RANDOMSTATE"},
{{A_RandomStateRange}, "A_RANDOMSTATERANGE"},
{{A_DualAction}, "A_DUALACTION"},
{{A_RemoteAction}, "A_REMOTEACTION"},
{{A_ToggleFlameJet}, "A_TOGGLEFLAMEJET"},
{{A_OrbitNights}, "A_ORBITNIGHTS"},
{{A_GhostMe}, "A_GHOSTME"},
{{A_SetObjectState}, "A_SETOBJECTSTATE"},
{{A_SetObjectTypeState}, "A_SETOBJECTTYPESTATE"},
{{A_KnockBack}, "A_KNOCKBACK"},
{{A_PushAway}, "A_PUSHAWAY"},
{{A_RingDrain}, "A_RINGDRAIN"},
{{A_SplitShot}, "A_SPLITSHOT"},
{{A_MissileSplit}, "A_MISSILESPLIT"},
{{A_MultiShot}, "A_MULTISHOT"},
{{A_InstaLoop}, "A_INSTALOOP"},
{{A_Custom3DRotate}, "A_CUSTOM3DROTATE"},
{{A_SearchForPlayers}, "A_SEARCHFORPLAYERS"},
{{A_CheckRandom}, "A_CHECKRANDOM"},
{{A_CheckTargetRings}, "A_CHECKTARGETRINGS"},
{{A_CheckRings}, "A_CHECKRINGS"},
{{A_CheckTotalRings}, "A_CHECKTOTALRINGS"},
{{A_CheckHealth}, "A_CHECKHEALTH"},
{{A_CheckRange}, "A_CHECKRANGE"},
{{A_CheckHeight}, "A_CHECKHEIGHT"},
{{A_CheckTrueRange}, "A_CHECKTRUERANGE"},
{{A_CheckThingCount}, "A_CHECKTHINGCOUNT"},
{{A_CheckAmbush}, "A_CHECKAMBUSH"},
{{A_CheckCustomValue}, "A_CHECKCUSTOMVALUE"},
{{A_CheckCusValMemo}, "A_CHECKCUSVALMEMO"},
{{A_SetCustomValue}, "A_SETCUSTOMVALUE"},
{{A_UseCusValMemo}, "A_USECUSVALMEMO"},
{{A_RelayCustomValue}, "A_RELAYCUSTOMVALUE"},
{{A_CusValAction}, "A_CUSVALACTION"},
{{A_ForceStop}, "A_FORCESTOP"},
{{A_ForceWin}, "A_FORCEWIN"},
{{A_SpikeRetract}, "A_SPIKERETRACT"},
{{A_InfoState}, "A_INFOSTATE"},
{{A_Repeat}, "A_REPEAT"},
{{A_SetScale}, "A_SETSCALE"},
{{A_RemoteDamage}, "A_REMOTEDAMAGE"},
{{A_HomingChase}, "A_HOMINGCHASE"},
{{A_TrapShot}, "A_TRAPSHOT"},
{{A_VileTarget}, "A_VILETARGET"},
{{A_VileAttack}, "A_VILEATTACK"},
{{A_VileFire}, "A_VILEFIRE"},
{{A_BrakChase}, "A_BRAKCHASE"},
{{A_BrakFireShot}, "A_BRAKFIRESHOT"},
{{A_BrakLobShot}, "A_BRAKLOBSHOT"},
{{A_NapalmScatter}, "A_NAPALMSCATTER"},
{{A_SpawnFreshCopy}, "A_SPAWNFRESHCOPY"},
{{A_FlickySpawn}, "A_FLICKYSPAWN"},
{{A_FlickyAim}, "A_FLICKYAIM"},
{{A_FlickyFly}, "A_FLICKYFLY"},
{{A_FlickySoar}, "A_FLICKYSOAR"},
{{A_FlickyCoast}, "A_FLICKYCOAST"},
{{A_FlickyHop}, "A_FLICKYHOP"},
{{A_FlickyFlounder}, "A_FLICKYFLOUNDER"},
{{A_FlickyCheck}, "A_FLICKYCHECK"},
{{A_FlickyHeightCheck}, "A_FLICKYHEIGHTCHECK"},
{{A_FlickyFlutter}, "A_FLICKYFLUTTER"},
{{A_FlameParticle}, "A_FLAMEPARTICLE"},
{{A_FadeOverlay}, "A_FADEOVERLAY"},
{{A_Boss5Jump}, "A_BOSS5JUMP"},
{{A_LightBeamReset}, "A_LIGHTBEAMRESET"},
{{A_MineExplode}, "A_MINEEXPLODE"},
{{A_MineRange}, "A_MINERANGE"},
{{A_ConnectToGround}, "A_CONNECTTOGROUND"},
{{A_SpawnParticleRelative},"A_SPAWNPARTICLERELATIVE"},
{{A_MultiShotDist}, "A_MULTISHOTDIST"},
{{A_Explode}, "A_EXPLODE"},
{{A_Pain}, "A_PAIN"},
{{A_Fall}, "A_FALL"},
{{A_MonitorPop}, "A_MONITORPOP"},
{{A_GoldMonitorPop}, "A_GOLDMONITORPOP"},
{{A_GoldMonitorRestore}, "A_GOLDMONITORRESTORE"},
{{A_GoldMonitorSparkle}, "A_GOLDMONITORSPARKLE"},
{{A_Look}, "A_LOOK"},
{{A_Chase}, "A_CHASE"},
{{A_FaceStabChase}, "A_FACESTABCHASE"},
{{A_FaceTarget}, "A_FACETARGET"},
{{A_FaceTracer}, "A_FACETRACER"},
{{A_Scream}, "A_SCREAM"},
{{A_BossDeath}, "A_BOSSDEATH"},
{{A_CustomPower}, "A_CUSTOMPOWER"},
{{A_GiveWeapon}, "A_GIVEWEAPON"},
{{A_RingBox}, "A_RINGBOX"},
{{A_Invincibility}, "A_INVINCIBILITY"},
{{A_SuperSneakers}, "A_SUPERSNEAKERS"},
{{A_BunnyHop}, "A_BUNNYHOP"},
{{A_BubbleSpawn}, "A_BUBBLESPAWN"},
{{A_FanBubbleSpawn}, "A_FANBUBBLESPAWN"},
{{A_BubbleRise}, "A_BUBBLERISE"},
{{A_BubbleCheck}, "A_BUBBLECHECK"},
{{A_AwardScore}, "A_AWARDSCORE"},
{{A_ExtraLife}, "A_EXTRALIFE"},
{{A_GiveShield}, "A_GIVESHIELD"},
{{A_GravityBox}, "A_GRAVITYBOX"},
{{A_ScoreRise}, "A_SCORERISE"},
{{A_ParticleSpawn}, "A_PARTICLESPAWN"},
{{A_AttractChase}, "A_ATTRACTCHASE"},
{{A_DropMine}, "A_DROPMINE"},
{{A_FishJump}, "A_FISHJUMP"},
{{A_ThrownRing}, "A_THROWNRING"},
{{A_SetSolidSteam}, "A_SETSOLIDSTEAM"},
{{A_UnsetSolidSteam}, "A_UNSETSOLIDSTEAM"},
{{A_SignPlayer}, "A_SIGNPLAYER"},
{{A_OverlayThink}, "A_OVERLAYTHINK"},
{{A_JetChase}, "A_JETCHASE"},
{{A_JetbThink}, "A_JETBTHINK"},
{{A_JetgThink}, "A_JETGTHINK"},
{{A_JetgShoot}, "A_JETGSHOOT"},
{{A_ShootBullet}, "A_SHOOTBULLET"},
{{A_MinusDigging}, "A_MINUSDIGGING"},
{{A_MinusPopup}, "A_MINUSPOPUP"},
{{A_MinusCheck}, "A_MINUSCHECK"},
{{A_ChickenCheck}, "A_CHICKENCHECK"},
{{A_MouseThink}, "A_MOUSETHINK"},
{{A_DetonChase}, "A_DETONCHASE"},
{{A_CapeChase}, "A_CAPECHASE"},
{{A_RotateSpikeBall}, "A_ROTATESPIKEBALL"},
{{A_SlingAppear}, "A_SLINGAPPEAR"},
{{A_UnidusBall}, "A_UNIDUSBALL"},
{{A_RockSpawn}, "A_ROCKSPAWN"},
{{A_SetFuse}, "A_SETFUSE"},
{{A_CrawlaCommanderThink}, "A_CRAWLACOMMANDERTHINK"},
{{A_SmokeTrailer}, "A_SMOKETRAILER"},
{{A_RingExplode}, "A_RINGEXPLODE"},
{{A_OldRingExplode}, "A_OLDRINGEXPLODE"},
{{A_MixUp}, "A_MIXUP"},
{{A_RecyclePowers}, "A_RECYCLEPOWERS"},
{{A_Boss1Chase}, "A_BOSS1CHASE"},
{{A_FocusTarget}, "A_FOCUSTARGET"},
{{A_Boss2Chase}, "A_BOSS2CHASE"},
{{A_Boss2Pogo}, "A_BOSS2POGO"},
{{A_BossZoom}, "A_BOSSZOOM"},
{{A_BossScream}, "A_BOSSSCREAM"},
{{A_Boss2TakeDamage}, "A_BOSS2TAKEDAMAGE"},
{{A_Boss7Chase}, "A_BOSS7CHASE"},
{{A_GoopSplat}, "A_GOOPSPLAT"},
{{A_Boss2PogoSFX}, "A_BOSS2POGOSFX"},
{{A_Boss2PogoTarget}, "A_BOSS2POGOTARGET"},
{{A_BossJetFume}, "A_BOSSJETFUME"},
{{A_EggmanBox}, "A_EGGMANBOX"},
{{A_TurretFire}, "A_TURRETFIRE"},
{{A_SuperTurretFire}, "A_SUPERTURRETFIRE"},
{{A_TurretStop}, "A_TURRETSTOP"},
{{A_JetJawRoam}, "A_JETJAWROAM"},
{{A_JetJawChomp}, "A_JETJAWCHOMP"},
{{A_PointyThink}, "A_POINTYTHINK"},
{{A_CheckBuddy}, "A_CHECKBUDDY"},
{{A_HoodThink}, "A_HOODTHINK"},
{{A_ArrowCheck}, "A_ARROWCHECK"},
{{A_SnailerThink}, "A_SNAILERTHINK"},
{{A_SharpChase}, "A_SHARPCHASE"},
{{A_SharpSpin}, "A_SHARPSPIN"},
{{A_VultureVtol}, "A_VULTUREVTOL"},
{{A_VultureCheck}, "A_VULTURECHECK"},
{{A_SkimChase}, "A_SKIMCHASE"},
{{A_1upThinker}, "A_1UPTHINKER"},
{{A_SkullAttack}, "A_SKULLATTACK"},
{{A_LobShot}, "A_LOBSHOT"},
{{A_FireShot}, "A_FIRESHOT"},
{{A_SuperFireShot}, "A_SUPERFIRESHOT"},
{{A_BossFireShot}, "A_BOSSFIRESHOT"},
{{A_Boss7FireMissiles}, "A_BOSS7FIREMISSILES"},
{{A_Boss1Laser}, "A_BOSS1LASER"},
{{A_Boss4Reverse}, "A_BOSS4REVERSE"},
{{A_Boss4SpeedUp}, "A_BOSS4SPEEDUP"},
{{A_Boss4Raise}, "A_BOSS4RAISE"},
{{A_SparkFollow}, "A_SPARKFOLLOW"},
{{A_BuzzFly}, "A_BUZZFLY"},
{{A_GuardChase}, "A_GUARDCHASE"},
{{A_EggShield}, "A_EGGSHIELD"},
{{A_SetReactionTime}, "A_SETREACTIONTIME"},
{{A_Boss1Spikeballs}, "A_BOSS1SPIKEBALLS"},
{{A_Boss3TakeDamage}, "A_BOSS3TAKEDAMAGE"},
{{A_Boss3Path}, "A_BOSS3PATH"},
{{A_LinedefExecute}, "A_LINEDEFEXECUTE"},
{{A_PlaySeeSound}, "A_PLAYSEESOUND"},
{{A_PlayAttackSound}, "A_PLAYATTACKSOUND"},
{{A_PlayActiveSound}, "A_PLAYACTIVESOUND"},
{{A_SpawnObjectAbsolute}, "A_SPAWNOBJECTABSOLUTE"},
{{A_SpawnObjectRelative}, "A_SPAWNOBJECTRELATIVE"},
{{A_ChangeAngleRelative}, "A_CHANGEANGLERELATIVE"},
{{A_ChangeAngleAbsolute}, "A_CHANGEANGLEABSOLUTE"},
{{A_PlaySound}, "A_PLAYSOUND"},
{{A_FindTarget}, "A_FINDTARGET"},
{{A_FindTracer}, "A_FINDTRACER"},
{{A_SetTics}, "A_SETTICS"},
{{A_SetRandomTics}, "A_SETRANDOMTICS"},
{{A_ChangeColorRelative}, "A_CHANGECOLORRELATIVE"},
{{A_ChangeColorAbsolute}, "A_CHANGECOLORABSOLUTE"},
{{A_MoveRelative}, "A_MOVERELATIVE"},
{{A_MoveAbsolute}, "A_MOVEABSOLUTE"},
{{A_Thrust}, "A_THRUST"},
{{A_ZThrust}, "A_ZTHRUST"},
{{A_SetTargetsTarget}, "A_SETTARGETSTARGET"},
{{A_SetObjectFlags}, "A_SETOBJECTFLAGS"},
{{A_SetObjectFlags2}, "A_SETOBJECTFLAGS2"},
{{A_RandomState}, "A_RANDOMSTATE"},
{{A_RandomStateRange}, "A_RANDOMSTATERANGE"},
{{A_DualAction}, "A_DUALACTION"},
{{A_RemoteAction}, "A_REMOTEACTION"},
{{A_ToggleFlameJet}, "A_TOGGLEFLAMEJET"},
{{A_OrbitNights}, "A_ORBITNIGHTS"},
{{A_GhostMe}, "A_GHOSTME"},
{{A_SetObjectState}, "A_SETOBJECTSTATE"},
{{A_SetObjectTypeState}, "A_SETOBJECTTYPESTATE"},
{{A_KnockBack}, "A_KNOCKBACK"},
{{A_PushAway}, "A_PUSHAWAY"},
{{A_RingDrain}, "A_RINGDRAIN"},
{{A_SplitShot}, "A_SPLITSHOT"},
{{A_MissileSplit}, "A_MISSILESPLIT"},
{{A_MultiShot}, "A_MULTISHOT"},
{{A_InstaLoop}, "A_INSTALOOP"},
{{A_Custom3DRotate}, "A_CUSTOM3DROTATE"},
{{A_SearchForPlayers}, "A_SEARCHFORPLAYERS"},
{{A_CheckRandom}, "A_CHECKRANDOM"},
{{A_CheckTargetRings}, "A_CHECKTARGETRINGS"},
{{A_CheckRings}, "A_CHECKRINGS"},
{{A_CheckTotalRings}, "A_CHECKTOTALRINGS"},
{{A_CheckHealth}, "A_CHECKHEALTH"},
{{A_CheckRange}, "A_CHECKRANGE"},
{{A_CheckHeight}, "A_CHECKHEIGHT"},
{{A_CheckTrueRange}, "A_CHECKTRUERANGE"},
{{A_CheckThingCount}, "A_CHECKTHINGCOUNT"},
{{A_CheckAmbush}, "A_CHECKAMBUSH"},
{{A_CheckCustomValue}, "A_CHECKCUSTOMVALUE"},
{{A_CheckCusValMemo}, "A_CHECKCUSVALMEMO"},
{{A_SetCustomValue}, "A_SETCUSTOMVALUE"},
{{A_UseCusValMemo}, "A_USECUSVALMEMO"},
{{A_RelayCustomValue}, "A_RELAYCUSTOMVALUE"},
{{A_CusValAction}, "A_CUSVALACTION"},
{{A_ForceStop}, "A_FORCESTOP"},
{{A_ForceWin}, "A_FORCEWIN"},
{{A_SpikeRetract}, "A_SPIKERETRACT"},
{{A_InfoState}, "A_INFOSTATE"},
{{A_Repeat}, "A_REPEAT"},
{{A_SetScale}, "A_SETSCALE"},
{{A_RemoteDamage}, "A_REMOTEDAMAGE"},
{{A_HomingChase}, "A_HOMINGCHASE"},
{{A_TrapShot}, "A_TRAPSHOT"},
{{A_VileTarget}, "A_VILETARGET"},
{{A_VileAttack}, "A_VILEATTACK"},
{{A_VileFire}, "A_VILEFIRE"},
{{A_BrakChase}, "A_BRAKCHASE"},
{{A_BrakFireShot}, "A_BRAKFIRESHOT"},
{{A_BrakLobShot}, "A_BRAKLOBSHOT"},
{{A_NapalmScatter}, "A_NAPALMSCATTER"},
{{A_SpawnFreshCopy}, "A_SPAWNFRESHCOPY"},
{{A_FlickySpawn}, "A_FLICKYSPAWN"},
{{A_FlickyAim}, "A_FLICKYAIM"},
{{A_FlickyFly}, "A_FLICKYFLY"},
{{A_FlickySoar}, "A_FLICKYSOAR"},
{{A_FlickyCoast}, "A_FLICKYCOAST"},
{{A_FlickyHop}, "A_FLICKYHOP"},
{{A_FlickyFlounder}, "A_FLICKYFLOUNDER"},
{{A_FlickyCheck}, "A_FLICKYCHECK"},
{{A_FlickyHeightCheck}, "A_FLICKYHEIGHTCHECK"},
{{A_FlickyFlutter}, "A_FLICKYFLUTTER"},
{{A_FlameParticle}, "A_FLAMEPARTICLE"},
{{A_FadeOverlay}, "A_FADEOVERLAY"},
{{A_Boss5Jump}, "A_BOSS5JUMP"},
{{A_LightBeamReset}, "A_LIGHTBEAMRESET"},
{{A_MineExplode}, "A_MINEEXPLODE"},
{{A_MineRange}, "A_MINERANGE"},
{{A_ConnectToGround}, "A_CONNECTTOGROUND"},
{{A_SpawnParticleRelative}, "A_SPAWNPARTICLERELATIVE"},
{{A_MultiShotDist}, "A_MULTISHOTDIST"},
{{A_WhoCaresIfYourSonIsABee},"A_WHOCARESIFYOURSONISABEE"},
{{A_ParentTriesToSleep}, "A_PARENTTRIESTOSLEEP"},
{{A_CryingToMomma}, "A_CRYINGTOMOMMA"},
{{NULL}, "NONE"},
@ -3585,10 +3588,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_RBUZZFLY1",
"S_RBUZZFLY2",
// AquaBuzz
"S_BBUZZFLY1",
"S_BBUZZFLY2",
// Jetty-Syn Bomber
"S_JETBLOOK1",
"S_JETBLOOK2",
@ -3740,6 +3739,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_FACESTABBER_CHARGE2",
"S_FACESTABBER_CHARGE3",
"S_FACESTABBER_CHARGE4",
"S_FACESTABBER_PAIN",
"S_FACESTABBER_DIE1",
"S_FACESTABBER_DIE2",
"S_FACESTABBER_DIE3",
// Egg Guard
"S_EGGGUARD_STND",
@ -5967,6 +5970,32 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_NIGHTOPIANHELPER9",
// Secret badniks and hazards, shhhh
"S_HIVEELEMENTAL_LOOK",
"S_HIVEELEMENTAL_PREPARE1",
"S_HIVEELEMENTAL_PREPARE2",
"S_HIVEELEMENTAL_SHOOT1",
"S_HIVEELEMENTAL_SHOOT2",
"S_HIVEELEMENTAL_DORMANT",
"S_HIVEELEMENTAL_PAIN",
"S_HIVEELEMENTAL_DIE1",
"S_HIVEELEMENTAL_DIE2",
"S_HIVEELEMENTAL_DIE3",
"S_BUMBLEBORE_SPAWN",
"S_BUMBLEBORE_LOOK1",
"S_BUMBLEBORE_LOOK2",
"S_BUMBLEBORE_FLY1",
"S_BUMBLEBORE_FLY2",
"S_BUMBLEBORE_RAISE",
"S_BUMBLEBORE_FALL1",
"S_BUMBLEBORE_FALL2",
"S_BUMBLEBORE_STUCK1",
"S_BUMBLEBORE_STUCK2",
"S_BUMBLEBORE_DIE",
"S_BBUZZFLY1",
"S_BBUZZFLY2",
"S_SMASHSPIKE_FLOAT",
"S_SMASHSPIKE_EASE1",
"S_SMASHSPIKE_EASE2",
@ -5976,11 +6005,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_SMASHSPIKE_RISE1",
"S_SMASHSPIKE_RISE2",
"S_HHZDUST1",
"S_HHZDUST2",
"S_HHZDUST3",
"S_HHZDUST4",
"S_CACO_LOOK",
"S_CACO_WAKE1",
"S_CACO_WAKE2",
@ -6084,6 +6108,11 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_WPLD5",
"S_WPLD6",
"S_DUST1",
"S_DUST2",
"S_DUST3",
"S_DUST4",
"S_ROCKSPAWN",
"S_ROCKCRUMBLEA",
@ -6125,7 +6154,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_GFZFISH", // Greenflower Fish
"MT_GOLDBUZZ",
"MT_REDBUZZ",
"MT_AQUABUZZ",
"MT_JETTBOMBER", // Jetty-Syn Bomber
"MT_JETTGUNNER", // Jetty-Syn Gunner
"MT_CRAWLACOMMANDER", // Crawla Commander
@ -6658,8 +6686,12 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_NIGHTOPIANHELPER", // the actual helper object that orbits you
// Secret badniks and hazards, shhhh
"MT_HIVEELEMENTAL",
"MT_BUMBLEBORE",
"MT_BUBBLEBUZZ",
"MT_SMASHINGSPIKEBALL",
"MT_HHZDUST",
"MT_CACOLANTERN",
"MT_CACOSHARD",
"MT_CACOFIRE",
@ -6688,6 +6720,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_SPARK", //spark
"MT_EXPLODE", // Robot Explosion
"MT_UWEXPLODE", // Underwater Explosion
"MT_DUST",
"MT_ROCKSPAWNER",
"MT_FALLINGROCK",
"MT_ROCKCRUMBLE1",
@ -6759,8 +6792,8 @@ static const char *const MOBJFLAG2_LIST[] = {
"SCATTER", // Thrown ring has scatter properties
"BEYONDTHEGRAVE", // Source of this missile has died and has since respawned.
"SLIDEPUSH", // MF_PUSHABLE that pushes continuously.
"CLASSICPUSH", // Drops straight down when object has negative Z.
"STANDONME", // While not pushable, stand on me anyway.
"CLASSICPUSH", // Drops straight down when object has negative momz.
"INVERTAIMABLE", // Flips whether it's targetable by A_LookForEnemies (enemies no, decoys yes)
"INFLOAT", // Floating to a height for a move, don't auto float to target's height.
"DEBRIS", // Splash ring from explosion ring
"NIGHTSPULL", // Attracted from a paraloop

View File

@ -174,7 +174,6 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[NOLIGHT], // SPR_MNUS
&lspr[NOLIGHT], // SPR_SSHL
&lspr[NOLIGHT], // SPR_UNID
&lspr[NOLIGHT], // SPR_BBUZ
// Generic Boos Items
&lspr[JETLIGHT_L], // SPR_JETF // Boss jet fumes
@ -489,14 +488,17 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[NOLIGHT], // SPR_CAPS
// Secret badniks and hazards, shhhh
&lspr[NOLIGHT], // SPR_FMCE",
&lspr[NOLIGHT], // SPR_HMCE",
&lspr[NOLIGHT], // SPR_CACO",
&lspr[BLUEBALL_L], // SPR_BAL2",
&lspr[NOLIGHT], // SPR_SBOB",
&lspr[BLUEBALL_L], // SPR_SBFL",
&lspr[BLUEBALL_L], // SPR_SBSK",
&lspr[NOLIGHT], // SPR_BATT",
&lspr[NOLIGHT], // SPR_HIVE
&lspr[NOLIGHT], // SPR_BUMB,
&lspr[NOLIGHT], // SPR_BBUZ
&lspr[NOLIGHT], // SPR_FMCE,
&lspr[NOLIGHT], // SPR_HMCE,
&lspr[NOLIGHT], // SPR_CACO,
&lspr[BLUEBALL_L], // SPR_BAL2,
&lspr[NOLIGHT], // SPR_SBOB,
&lspr[BLUEBALL_L], // SPR_SBFL,
&lspr[BLUEBALL_L], // SPR_SBSK,
&lspr[NOLIGHT], // SPR_BATT,
// Debris
&lspr[RINGSPARK_L], // SPR_SPRK

View File

@ -62,7 +62,6 @@ char sprnames[NUMSPRITES + 1][5] =
"MNUS", // Minus
"SSHL", // Spring Shell
"UNID", // Unidus
"BBUZ", // AquaBuzz, for Azure Temple
// Generic Boss Items
"JETF", // Boss jet fumes
@ -383,6 +382,9 @@ char sprnames[NUMSPRITES + 1][5] =
"CAPS", // Capsule thingy for NiGHTS
// Secret badniks and hazards, shhhh
"HIVE",
"BUMB",
"BBUZ",
"FMCE",
"HMCE",
"CACO",
@ -807,10 +809,6 @@ state_t states[NUMSTATES] =
{SPR_RBUZ, 0, 2, {A_BuzzFly}, sfx_buzz4, 0, S_RBUZZFLY2}, // S_RBUZZFLY1
{SPR_RBUZ, 1, 2, {A_BuzzFly}, 0, 0, S_RBUZZFLY1}, // S_RBUZZFLY2
// AquaBuzz
{SPR_BBUZ, 0, 2, {NULL}, 0, 0, S_BBUZZFLY2}, // S_BBUZZFLY1
{SPR_BBUZ, 1, 2, {NULL}, 0, 0, S_BBUZZFLY1}, // S_BBUZZFLY2
// Jetty-Syn Bomber
{SPR_JETB, 0, 4, {A_Look}, 0, 0, S_JETBLOOK2}, // S_JETBLOOK1
{SPR_JETB, 1, 4, {A_Look}, 0, 0, S_JETBLOOK1}, // S_JETBLOOK2
@ -963,6 +961,10 @@ state_t states[NUMSTATES] =
{SPR_CBFS, 6, 0, {A_PlayAttackSound}, 0, 0, S_FACESTABBER_CHARGE3}, // S_FACESTABBER_CHARGE2
{SPR_CBFS, 6, 0, {A_FaceTarget}, 0, 0, S_FACESTABBER_CHARGE4}, // S_FACESTABBER_CHARGE3
{SPR_CBFS, 7, 35, {A_Thrust}, 20, 1, S_FACESTABBER_STND1}, // S_FACESTABBER_CHARGE4
{SPR_CBFS, 0, 35, {A_Pain}, 0, 0, S_FACESTABBER_STND1}, // S_FACESTABBER_PAIN
{SPR_CBFS, 0, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_FACESTABBER_DIE2}, // S_FACESTABBER_DIE1
{SPR_NULL, 0, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_FACESTABBER_DIE3}, // S_FACESTABBER_DIE2
{SPR_NULL, 0, 0, {A_Repeat}, 7, S_FACESTABBER_DIE1, S_XPLD_FLICKY}, // S_FACESTABBER_DIE3
// Egg Guard
{SPR_SPSH, 0, 1, {A_Look}, 0, 0, S_EGGGUARD_STND}, // S_EGGGUARD_STND
@ -3257,22 +3259,43 @@ state_t states[NUMSTATES] =
{SPR_FL01, 3, 1, {A_OrbitNights}, ANG2*2, 180 | 0x10000, S_NIGHTOPIANHELPER1}, // S_NIGHTOPIANHELPER9
// Secret badniks and hazards, shhhh
{SPR_HIVE, 0, 5, {A_Look}, 1, 1, S_HIVEELEMENTAL_LOOK}, // S_HIVEELEMENTAL_LOOK
{SPR_HIVE, 0, 14, {A_PlaySound}, sfx_s3k76, 1, S_HIVEELEMENTAL_PREPARE2}, // S_HIVEELEMENTAL_PREPARE1
{SPR_HIVE, 0, 6, {A_PlaySound}, sfx_s3k8c, 1, S_HIVEELEMENTAL_SHOOT1}, // S_HIVEELEMENTAL_PREPARE2
{SPR_HIVE, 1, 4, {A_WhoCaresIfYourSonIsABee}, (MT_BUMBLEBORE<<16)|4, (1<<16)|32, S_HIVEELEMENTAL_SHOOT2}, // S_HIVEELEMENTAL_SHOOT1
{SPR_HIVE, 2, 2, {NULL}, 0, 0, S_HIVEELEMENTAL_DORMANT}, // S_HIVEELEMENTAL_SHOOT2
{SPR_HIVE, 0, 5, {A_ParentTriesToSleep}, S_HIVEELEMENTAL_PREPARE1, 0, S_HIVEELEMENTAL_DORMANT}, // S_HIVEELEMENTAL_DORMANT
{SPR_HIVE, 3, 35, {A_Pain}, 0, 0, S_HIVEELEMENTAL_LOOK}, // S_HIVEELEMENTAL_PAIN
{SPR_HIVE, 3, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_HIVEELEMENTAL_DIE2}, // S_HIVEELEMENTAL_DIE1
{SPR_NULL, 0, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_HIVEELEMENTAL_DIE3}, // S_HIVEELEMENTAL_DIE2
{SPR_NULL, 0, 0, {A_Repeat}, 7, S_HIVEELEMENTAL_DIE1, S_XPLD_FLICKY}, // S_HIVEELEMENTAL_DIE3
{SPR_BUMB, 1, 10, {NULL}, 0, 0, S_BUMBLEBORE_LOOK1}, // S_BUMBLEBORE_SPAWN
{SPR_BUMB, 0, 4, {A_Look}, 1, 1, S_BUMBLEBORE_LOOK2}, // S_BUMBLEBORE_LOOK1
{SPR_BUMB, 1, 4, {A_Look}, 1, 1, S_BUMBLEBORE_LOOK1}, // S_BUMBLEBORE_LOOK2
{SPR_BUMB, 0, 4, {A_JetbThink}, 0, 0, S_BUMBLEBORE_FLY2}, // S_BUMBLEBORE_FLY1
{SPR_BUMB, 1, 4, {A_JetbThink}, 0, 0, S_BUMBLEBORE_FLY1}, // S_BUMBLEBORE_FLY2
{SPR_BUMB, 2|FF_FULLBRIGHT, 12, {A_ZThrust}, 4, (1<<16)|1, S_BUMBLEBORE_FALL1}, // S_BUMBLEBORE_RAISE
{SPR_BUMB, 2|FF_FULLBRIGHT, 0, {A_ZThrust}, -8, (1<<16)|1, S_BUMBLEBORE_FALL2}, // S_BUMBLEBORE_FALL1
{SPR_BUMB, 2|FF_FULLBRIGHT, 300, {NULL}, 0, 0, S_BUMBLEBORE_DIE}, // S_BUMBLEBORE_FALL2
{SPR_BUMB, 4, 3, {A_MultiShotDist}, (MT_DUST<<16)|6, -40, S_BUMBLEBORE_STUCK2}, // S_BUMBLEBORE_STUCK1
{SPR_BUMB, 5, 120, {NULL}, 0, 0, S_BUMBLEBORE_DIE}, // S_BUMBLEBORE_STUCK2
{SPR_BUMB, 5, 0, {A_CryingToMomma}, 0, 0, S_XPLD1}, // S_BUMBLEBORE_DIE
{SPR_BBUZ, 0, 2, {NULL}, 0, 0, S_BBUZZFLY2}, // S_BBUZZFLY1
{SPR_BBUZ, 1, 2, {NULL}, 0, 0, S_BBUZZFLY1}, // S_BBUZZFLY2
{SPR_FMCE, 0, 20, {NULL}, 0, 0, S_SMASHSPIKE_EASE1}, // S_SMASHSPIKE_FLOAT
{SPR_FMCE, 0, 4, {A_ZThrust}, 4, (1<<16)|1, S_SMASHSPIKE_EASE2}, // S_SMASHSPIKE_EASE1
{SPR_FMCE, 0, 4, {A_ZThrust}, 0, (1<<16)|1, S_SMASHSPIKE_FALL}, // S_SMASHSPIKE_EASE1
{SPR_FMCE, 0, 2, {A_ZThrust}, -6, (1<<16)|1, S_SMASHSPIKE_FALL}, // S_SMASHSPIKE_FALL
{SPR_FMCE, 1, 2, {A_MultiShotDist}, (MT_HHZDUST<<16)|10, -48, S_SMASHSPIKE_STOMP2}, // S_SMASHSPIKE_STOMP1
{SPR_FMCE, 1, 2, {A_MultiShotDist}, (MT_DUST<<16)|10, -48, S_SMASHSPIKE_STOMP2}, // S_SMASHSPIKE_STOMP1
{SPR_FMCE, 2, 14, {NULL}, 0, 0, S_SMASHSPIKE_RISE1}, // S_SMASHSPIKE_STOMP2
{SPR_FMCE, 1, 2, {NULL}, 0, 0, S_SMASHSPIKE_RISE2}, // S_SMASHSPIKE_RISE1
{SPR_FMCE, 0, 2, {A_ZThrust}, 6, (1<<16)|1, S_SMASHSPIKE_RISE2}, // S_SMASHSPIKE_RISE2
{SPR_DUST, FF_TRANS40, 4, {NULL}, 0, 0, S_HHZDUST2}, // S_HHZDUST1
{SPR_DUST, 1|FF_TRANS50, 5, {NULL}, 0, 0, S_HHZDUST3}, // S_HHZDUST2
{SPR_DUST, 2|FF_TRANS60, 3, {NULL}, 0, 0, S_HHZDUST4}, // S_HHZDUST3
{SPR_DUST, 3|FF_TRANS70, 2, {NULL}, 0, 0, S_NULL}, // S_HHZDUST4
{SPR_CACO, 0, 5, {A_Look}, (1100<<16)|1, 0, S_CACO_LOOK}, // S_CACO_LOOK
{SPR_CACO, 1, 0, {A_MultiShotDist}, (MT_HHZDUST<<16)|7, -48, S_CACO_WAKE2}, // S_CACO_WAKE1
{SPR_CACO, 1, 0, {A_MultiShotDist}, (MT_DUST<<16)|7, -48, S_CACO_WAKE2}, // S_CACO_WAKE1
{SPR_CACO, 1, 10, {A_ZThrust}, 4, (1<<16)|1, S_CACO_WAKE3}, // S_CACO_WAKE2
{SPR_CACO, 2, 8, {A_ZThrust}, 2, (1<<16)|1, S_CACO_WAKE4}, // S_CACO_WAKE3
{SPR_CACO, 2, 4, {A_ZThrust}, 0, (1<<16)|1, S_CACO_ROAR}, // S_CACO_WAKE4
@ -3319,7 +3342,7 @@ state_t states[NUMSTATES] =
{SPR_SBFL, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_SPINBOBERT_FIRE_TRAIL3
{SPR_HBAT, 0, 5, {A_Look}, (900<<16)|1, 0, S_HANGSTER_LOOK}, // S_HANGSTER_LOOK
{SPR_HBAT, 1, 0, {A_MultiShotDist}, (MT_HHZDUST<<16)|10, -34, S_HANGSTER_SWOOP2}, // S_HANGSTER_SWOOP1
{SPR_HBAT, 1, 0, {A_MultiShotDist}, (MT_DUST<<16)|10, -34, S_HANGSTER_SWOOP2}, // S_HANGSTER_SWOOP1
{SPR_HBAT, 1, 2, {A_ZThrust}, -8, (1<<16)|1, S_HANGSTER_SWOOP2}, // S_HANGSTER_SWOOP2
{SPR_HBAT, 1, 6, {A_ZThrust}, -5, (1<<16), S_HANGSTER_ARC2}, // S_HANGSTER_ARC1
{SPR_HBAT, 1, 5, {A_ZThrust}, -2, (1<<16), S_HANGSTER_ARC3}, // S_HANGSTER_ARC2
@ -3376,6 +3399,11 @@ state_t states[NUMSTATES] =
{SPR_BOM4, 4, 3, {NULL}, 0, 0, S_WPLD6}, // S_WPLD5
{SPR_BOM4, 5, 3, {NULL}, 0, 0, S_NULL}, // S_WPLD6
{SPR_DUST, FF_TRANS40, 4, {NULL}, 0, 0, S_DUST2}, // S_DUST1
{SPR_DUST, 1|FF_TRANS50, 5, {NULL}, 0, 0, S_DUST3}, // S_DUST2
{SPR_DUST, 2|FF_TRANS60, 3, {NULL}, 0, 0, S_DUST4}, // S_DUST3
{SPR_DUST, 3|FF_TRANS70, 2, {NULL}, 0, 0, S_NULL}, // S_DUST4
{SPR_NULL, 0, 1, {A_RockSpawn}, 0, 0, S_ROCKSPAWN}, // S_ROCKSPAWN
{SPR_ROIA, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEA}, // S_ROCKCRUMBLEA
@ -3672,33 +3700,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_AQUABUZZ
124, // doomednum
S_BBUZZFLY1, // spawnstate
1, // spawnhealth
S_BBUZZFLY1, // seestate
sfx_None, // seesound
2, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
TICRATE, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_XPLD_FLICKY, // deathstate
S_NULL, // xdeathstate
sfx_pop, // deathsound
6*FRACUNIT, // speed
20*FRACUNIT, // radius
24*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_gbeep, // activesound
MF_SLIDEME|MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY, // flags
S_NULL // raisestate
},
{ // MT_JETTBOMBER
105, // doomednum
S_JETBLOOK1, // spawnstate
@ -4080,19 +4081,19 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
{ // MT_FACESTABBER
118, // doomednum
S_FACESTABBER_STND1, // spawnstate
1, // spawnhealth
2, // spawnhealth
S_FACESTABBER_STND1, // seestate
sfx_None, // seesound
35, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
S_FACESTABBER_PAIN, // painstate
0, // painchance
sfx_None, // painsound
sfx_dmpain, // painsound
S_FACESTABBER_CHARGE1, // meleestate
S_NULL, // missilestate
S_XPLD_FLICKY, // deathstate
S_FACESTABBER_DIE1, // deathstate
S_NULL, // xdeathstate
sfx_pop, // deathsound
sfx_cybdth, // deathsound
3, // speed
32*FRACUNIT, // radius
64*FRACUNIT, // height
@ -15642,6 +15643,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_HIVEELEMENTAL
3190, // doomednum
S_HIVEELEMENTAL_LOOK, // spawnstate
2, // spawnhealth
S_HIVEELEMENTAL_PREPARE1, // seestate
sfx_s3k74, // seesound
0, // reactiontime
sfx_s3k91, // attacksound
S_HIVEELEMENTAL_PAIN, // painstate
0, // painchance
sfx_dmpain, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_HIVEELEMENTAL_DIE1, // deathstate
S_NULL, // xdeathstate
sfx_cybdth, // deathsound
6*FRACUNIT, // speed
30*FRACUNIT, // radius
80*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_s3k72, // activesound
MF_SPECIAL|MF_SHOOTABLE|MF_ENEMY, // flags
S_NULL // raisestate
},
{ // MT_BUMBLEBORE
3191, // doomednum
S_BUMBLEBORE_SPAWN, // spawnstate
0, // spawnhealth -- this is how you do drones...
S_BUMBLEBORE_FLY1, // seestate
sfx_s3k8e, // seesound
2, // reactiontime
sfx_s3k9e, // attacksound
S_BUMBLEBORE_STUCK1, // painstate
0, // painchance
sfx_None, // painsound
S_BUMBLEBORE_RAISE, // meleestate
S_NULL, // missilestate
S_BUMBLEBORE_DIE, // deathstate
S_NULL, // xdeathstate
sfx_pop, // deathsound
4*FRACUNIT, // speed
16*FRACUNIT, // radius
32*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_SPECIAL|MF_SHOOTABLE|MF_ENEMY|MF_NOGRAVITY|MF_SLIDEME, // flags
S_NULL // raisestate
},
{ // MT_BUBBLEBUZZ
124, // doomednum
S_BBUZZFLY1, // spawnstate
1, // spawnhealth
S_BBUZZFLY1, // seestate
sfx_None, // seesound
2, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
TICRATE, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_XPLD_FLICKY, // deathstate
S_NULL, // xdeathstate
sfx_pop, // deathsound
6*FRACUNIT, // speed
20*FRACUNIT, // radius
24*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_gbeep, // activesound
MF_SLIDEME|MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY, // flags
S_NULL // raisestate
},
{ // MT_SMASHINGSPIKEBALL
3001, // doomednum
S_SMASHSPIKE_FLOAT, // spawnstate
@ -15669,33 +15751,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_HHZDUST
-1, // doomednum
S_HHZDUST1, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
3*FRACUNIT, // speed
FRACUNIT, // radius
FRACUNIT, // height
0, // display offset
4, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP, // flags
S_NULL // raisestate
},
{ // MT_CACOLANTERN
3102, // doomednum
S_CACO_LOOK, // spawnstate
@ -16293,6 +16348,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_DUST
-1, // doomednum
S_DUST1, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
3*FRACUNIT, // speed
FRACUNIT, // radius
FRACUNIT, // height
0, // display offset
4, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIP, // flags
S_NULL // raisestate
},
{ // MT_ROCKSPAWNER
1202, // doomednum
S_ROCKSPAWN, // spawnstate

View File

@ -224,6 +224,9 @@ void A_MineRange();
void A_ConnectToGround();
void A_SpawnParticleRelative();
void A_MultiShotDist();
void A_WhoCaresIfYourSonIsABee();
void A_ParentTriesToSleep();
void A_CryingToMomma();
// ratio of states to sprites to mobj types is roughly 6 : 1 : 1
#define NUMMOBJFREESLOTS 256
@ -266,7 +269,6 @@ typedef enum sprite
SPR_MNUS, // Minus
SPR_SSHL, // Spring Shell
SPR_UNID, // Unidus
SPR_BBUZ, // AquaBuzz, for Azure Temple
// Generic Boss Items
SPR_JETF, // Boss jet fumes
@ -587,6 +589,9 @@ typedef enum sprite
SPR_CAPS, // Capsule thingy for NiGHTS
// Secret badniks and hazards, shhhh
SPR_HIVE,
SPR_BUMB,
SPR_BBUZ,
SPR_FMCE,
SPR_HMCE,
SPR_CACO,
@ -920,10 +925,6 @@ typedef enum state
S_RBUZZFLY1,
S_RBUZZFLY2,
// AquaBuzz
S_BBUZZFLY1,
S_BBUZZFLY2,
// Jetty-Syn Bomber
S_JETBLOOK1,
S_JETBLOOK2,
@ -1075,6 +1076,10 @@ typedef enum state
S_FACESTABBER_CHARGE2,
S_FACESTABBER_CHARGE3,
S_FACESTABBER_CHARGE4,
S_FACESTABBER_PAIN,
S_FACESTABBER_DIE1,
S_FACESTABBER_DIE2,
S_FACESTABBER_DIE3,
// Egg Guard
S_EGGGUARD_STND,
@ -3304,6 +3309,32 @@ typedef enum state
S_NIGHTOPIANHELPER9,
// Secret badniks and hazards, shhhh
S_HIVEELEMENTAL_LOOK,
S_HIVEELEMENTAL_PREPARE1,
S_HIVEELEMENTAL_PREPARE2,
S_HIVEELEMENTAL_SHOOT1,
S_HIVEELEMENTAL_SHOOT2,
S_HIVEELEMENTAL_DORMANT,
S_HIVEELEMENTAL_PAIN,
S_HIVEELEMENTAL_DIE1,
S_HIVEELEMENTAL_DIE2,
S_HIVEELEMENTAL_DIE3,
S_BUMBLEBORE_SPAWN,
S_BUMBLEBORE_LOOK1,
S_BUMBLEBORE_LOOK2,
S_BUMBLEBORE_FLY1,
S_BUMBLEBORE_FLY2,
S_BUMBLEBORE_RAISE,
S_BUMBLEBORE_FALL1,
S_BUMBLEBORE_FALL2,
S_BUMBLEBORE_STUCK1,
S_BUMBLEBORE_STUCK2,
S_BUMBLEBORE_DIE,
S_BBUZZFLY1,
S_BBUZZFLY2,
S_SMASHSPIKE_FLOAT,
S_SMASHSPIKE_EASE1,
S_SMASHSPIKE_EASE2,
@ -3313,11 +3344,6 @@ typedef enum state
S_SMASHSPIKE_RISE1,
S_SMASHSPIKE_RISE2,
S_HHZDUST1,
S_HHZDUST2,
S_HHZDUST3,
S_HHZDUST4,
S_CACO_LOOK,
S_CACO_WAKE1,
S_CACO_WAKE2,
@ -3421,6 +3447,11 @@ typedef enum state
S_WPLD5,
S_WPLD6,
S_DUST1,
S_DUST2,
S_DUST3,
S_DUST4,
S_ROCKSPAWN,
S_ROCKCRUMBLEA,
@ -3482,7 +3513,6 @@ typedef enum mobj_type
MT_GFZFISH, // Greenflower Fish
MT_GOLDBUZZ,
MT_REDBUZZ,
MT_AQUABUZZ, // AquaBuzz for ATZ
MT_JETTBOMBER, // Jetty-Syn Bomber
MT_JETTGUNNER, // Jetty-Syn Gunner
MT_CRAWLACOMMANDER, // Crawla Commander
@ -4015,17 +4045,18 @@ typedef enum mobj_type
MT_NIGHTOPIANHELPER, // the actual helper object that orbits you
// Secret badniks and hazards, shhhh
MT_SMASHINGSPIKEBALL,
MT_HHZDUST,
MT_HIVEELEMENTAL,
MT_BUMBLEBORE,
MT_BUBBLEBUZZ,
MT_SMASHINGSPIKEBALL,
MT_CACOLANTERN,
MT_CACOSHARD,
MT_CACOFIRE,
MT_SPINBOBERT,
MT_SPINBOBERT_FIRE1,
MT_SPINBOBERT_FIRE2,
MT_HANGSTER,
// Utility Objects
@ -4048,6 +4079,7 @@ typedef enum mobj_type
MT_SPARK, //spark
MT_EXPLODE, // Robot Explosion
MT_UWEXPLODE, // Underwater Explosion
MT_DUST,
MT_ROCKSPAWNER,
MT_FALLINGROCK,
MT_ROCKCRUMBLE1,

View File

@ -252,6 +252,9 @@ void A_MineRange(mobj_t *actor);
void A_ConnectToGround(mobj_t *actor);
void A_SpawnParticleRelative(mobj_t *actor);
void A_MultiShotDist(mobj_t *actor);
void A_WhoCaresIfYourSonIsABee(mobj_t *actor);
void A_ParentTriesToSleep(mobj_t *actor);
void A_CryingToMomma(mobj_t *actor);
//
// ENEMY THINKING
@ -4153,7 +4156,8 @@ void A_JetbThink(mobj_t *actor)
{
A_JetChase(actor);
// check for melee attack
if ((actor->z > (actor->floorz + FixedMul((32<<FRACBITS), actor->scale)))
if (actor->info->raisestate
&& (actor->z > (actor->floorz + FixedMul((32<<FRACBITS), actor->scale)))
&& P_JetbCheckMeleeRange(actor) && !actor->reactiontime
&& (actor->target->z >= actor->floorz))
{
@ -10851,7 +10855,7 @@ void A_SpawnParticleRelative(mobj_t *actor)
x = (INT16)(locvar1>>16);
y = (INT16)(locvar1&65535);
z = (INT16)(locvar2>>16);
state = (mobjtype_t)(locvar2&65535);
state = (statenum_t)(locvar2&65535);
// Spawn objects correctly in reverse gravity.
// NOTE: Doing actor->z + actor->height is the bottom of the object while the object has reverse gravity. - Flame
@ -10872,10 +10876,8 @@ void A_SpawnParticleRelative(mobj_t *actor)
//
// Description: Spawns multiple shots based on player proximity
//
// var1:
// same as A_MultiShot
// var2:
// same as A_MultiShot
// var1 = same as A_MultiShot
// var2 = same as A_MultiShot
//
void A_MultiShotDist(mobj_t *actor)
{
@ -10902,3 +10904,109 @@ void A_MultiShotDist(mobj_t *actor)
var2 = locvar2;
A_MultiShot(actor);
}
// Function: A_WhoCaresIfYourSonIsABee
//
// Description: Makes a child object, storing the number of created children in the parent's extravalue1.
//
// var1 = mobjtype of child
// var2 >> 16 = mobjtype of child
// var2 & 65535 = vertical momentum
// var2:
// var2 >> 16 = forward offset
// var2 & 65535 = vertical offset
//
void A_WhoCaresIfYourSonIsABee(mobj_t *actor)
{
INT32 locvar1 = var1;
INT32 locvar2 = var2;
fixed_t foffsetx;
fixed_t foffsety;
mobj_t *son;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_WhoCaresIfYourSonIsABee", actor))
return;
#endif
A_FaceTarget(actor);
if (actor->extravalue1)
actor->extravalue1--;
if (actor->info->attacksound)
S_StartSound(actor, actor->info->attacksound);
foffsetx = P_ReturnThrustX(actor, actor->angle, FixedMul((locvar2 >> 16)*FRACUNIT, actor->scale));
foffsety = P_ReturnThrustY(actor, actor->angle, FixedMul((locvar2 >> 16)*FRACUNIT, actor->scale));
if (!(son = P_SpawnMobjFromMobj(actor, foffsetx, foffsety, (locvar2&65535)*FRACUNIT, (mobjtype_t)(locvar1 >> 16))))
return;
P_SetObjectMomZ(son, (locvar1 & 65535)<<FRACBITS, true);
P_SetTarget(&son->tracer, actor);
P_SetTarget(&son->target, actor->target);
}
// Function: A_ParentTriesToSleep
//
// Description: If extravalue1 is less than or equal to var1, go to var2.
//
// var1 = state to go to when extravalue1
// var2 = unused
//
void A_ParentTriesToSleep(mobj_t *actor)
{
INT32 locvar1 = var1;
//INT32 locvar2 = var2;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_ParentTriesToSleep", actor))
return;
#endif
if (actor->extravalue1)
{
if (actor->info->seesound)
S_StartSound(actor, actor->info->seesound);
actor->reactiontime = 0;
P_SetMobjState(actor, locvar1);
}
else if (!actor->reactiontime)
{
actor->reactiontime = 1;
if (actor->info->activesound) // more like INactivesound doy hoy hoy
S_StartSound(actor, actor->info->activesound);
}
}
// Function: A_CryingToMomma
//
// Description: If you're a child, let your parent know something's happened to you through extravalue1. Also, prepare to die.
//
// var1 = unused
// var2 = unused
//
void A_CryingToMomma(mobj_t *actor)
{
//INT32 locvar1 = var1;
//INT32 locvar2 = var2;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_CryingToMomma", actor))
return;
#endif
if (actor->tracer)
actor->tracer->extravalue1++;
actor->momx = actor->momy = actor->momz = 0;
P_UnsetThingPosition(actor);
if (sector_list)
{
P_DelSeclist(sector_list);
sector_list = NULL;
}
actor->flags = MF_NOBLOCKMAP|MF_NOCLIPTHING;
P_SetThingPosition(actor);
}

View File

@ -2334,7 +2334,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
target->fuse = target->info->damage;
break;
case MT_AQUABUZZ:
case MT_BUBBLEBUZZ:
if (inflictor && inflictor->player // did a player kill you? Spawn relative to the player so they're bound to get it
&& P_AproxDistance(inflictor->x - target->x, inflictor->y - target->y) <= inflictor->radius + target->radius + FixedMul(8*FRACUNIT, inflictor->scale) // close enough?
&& inflictor->z <= target->z + target->height + FixedMul(8*FRACUNIT, inflictor->scale)
@ -3278,20 +3278,14 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
if (player)
P_ResetPlayer(target->player);
else if ((target->type == MT_EGGMOBILE2) // egg slimer
&& (target->health < target->info->damage)) // in pinch phase
P_SetMobjState(target, target->info->meleestate); // go to pinch pain state
else
switch (target->type)
{
case MT_EGGMOBILE2: // egg slimer
if (target->health < target->info->damage) // in pinch phase
{
P_SetMobjState(target, target->info->meleestate); // go to pinch pain state
break;
}
/* FALLTHRU */
default:
P_SetMobjState(target, target->info->painstate);
break;
}
P_SetMobjState(target, target->info->painstate);
if (target->type == MT_HIVEELEMENTAL)
target->extravalue1 += 3;
target->reactiontime = 0; // we're awake now...

View File

@ -7364,7 +7364,7 @@ void P_MobjThinker(mobj_t *mobj)
}
}
break;
case MT_AQUABUZZ:
case MT_BUBBLEBUZZ:
mobj->eflags |= MFE_UNDERWATER; //P_MobjCheckWater(mobj); // solely for MFE_UNDERWATER for A_FlickySpawn
{
if (mobj->tracer && mobj->tracer->player && mobj->tracer->health > 0
@ -7389,6 +7389,49 @@ void P_MobjThinker(mobj_t *mobj)
}
}
break;
case MT_BUMBLEBORE:
{
statenum_t st = mobj->state-states;
if (st == S_BUMBLEBORE_FLY1 || st == S_BUMBLEBORE_FLY2)
{
if (!mobj->target)
P_SetMobjState(mobj, mobj->info->spawnstate);
else if (P_MobjFlip(mobj)*((mobj->z + (mobj->height>>1)) - (mobj->target->z + (mobj->target->height>>1))) > 0
&& R_PointToDist2(mobj->x, mobj->y, mobj->target->x, mobj->target->y) <= 32*FRACUNIT)
{
mobj->momx >>= 1;
mobj->momy >>= 1;
if (++mobj->movefactor == 4)
{
S_StartSound(mobj, mobj->info->seesound);
mobj->momx = mobj->momy = mobj->momz = 0;
mobj->flags = (mobj->flags|MF_PAIN) & ~MF_NOGRAVITY;
P_SetMobjState(mobj, mobj->info->meleestate);
}
}
else
mobj->movefactor = 0;
}
else if (st == S_BUMBLEBORE_RAISE || st == S_BUMBLEBORE_FALL2) // no _FALL1 because it's an 0-tic
{
if (P_IsObjectOnGround(mobj))
{
S_StopSound(mobj);
S_StartSound(mobj, mobj->info->attacksound);
mobj->flags = (mobj->flags|MF_NOGRAVITY) & ~MF_PAIN;
mobj->momx = mobj->momy = mobj->momz = 0;
P_SetMobjState(mobj, mobj->info->painstate);
}
else
{
mobj->angle += ANGLE_22h;
mobj->frame = mobj->state->frame + ((mobj->tics & 2)>>1);
}
}
else if (st == S_BUMBLEBORE_STUCK2 && mobj->tics < TICRATE)
mobj->frame = mobj->state->frame + ((mobj->tics & 2)>>1);
}
break;
case MT_BIGMINE:
mobj->extravalue1 += 3;
mobj->extravalue1 %= 360;
@ -8450,6 +8493,10 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
P_SetTarget(&spawn->target, mobj);
}
break;
case MT_FAKEMOBILE:
case MT_EGGSHIELD:
mobj->flags2 |= MF2_INVERTAIMABLE;
break;
case MT_DETON:
mobj->movedir = 0;
break;
@ -8508,6 +8555,9 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
case MT_FLICKY_08:
mobj->color = (P_RandomChance(FRACUNIT/2) ? SKINCOLOR_RED : SKINCOLOR_AQUA);
break;
case MT_HIVEELEMENTAL:
mobj->extravalue1 = 5;
break;
case MT_SMASHINGSPIKEBALL:
mobj->movecount = mobj->z;
break;
@ -10232,6 +10282,10 @@ ML_EFFECT4 : Don't clip inside the ground
if (mthing->angle > 0)
mobj->health = mthing->angle;
break;
case MT_HIVEELEMENTAL:
if (mthing->extrainfo)
mobj->extravalue1 = mthing->extrainfo;
break;
case MT_TRAPGOYLE:
case MT_TRAPGOYLEUP:
case MT_TRAPGOYLEDOWN:

View File

@ -175,8 +175,8 @@ typedef enum
MF2_SCATTER = 1<<8, // Thrown ring has scatter properties
MF2_BEYONDTHEGRAVE = 1<<9, // Source of this missile has died and has since respawned.
MF2_SLIDEPUSH = 1<<10, // MF_PUSHABLE that pushes continuously.
MF2_CLASSICPUSH = 1<<11, // Drops straight down when object has negative Z.
MF2_STANDONME = 1<<12, // While not pushable, stand on me anyway.
MF2_CLASSICPUSH = 1<<11, // Drops straight down when object has negative momz.
MF2_INVERTAIMABLE = 1<<12, // Flips whether it's targetable by A_LookForEnemies (enemies no, decoys yes)
MF2_INFLOAT = 1<<13, // Floating to a height for a move, don't auto float to target's height.
MF2_DEBRIS = 1<<14, // Splash ring from explosion ring
MF2_NIGHTSPULL = 1<<15, // Attracted from a paraloop

View File

@ -8174,9 +8174,7 @@ mobj_t *P_LookForEnemies(player_t *player, boolean nonenemies, boolean bullet)
continue; // not a mobj thinker
mo = (mobj_t *)think;
if (!(mo->flags & targetmask
|| mo->type == MT_FAKEMOBILE // hehehehe
|| mo->type == MT_EGGSHIELD))
if (!(mo->flags & targetmask) == !(mo->flags2 & MF2_INVERTAIMABLE)) // allows if it has the flags desired XOR it has the invert aimable flag
continue; // not a valid target
if (mo->health <= 0) // dead

View File

@ -371,9 +371,9 @@ sfxinfo_t S_sfx[NUMSFX] =
{"s3k89", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Advanced technology"},
{"s3k8a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Boing"},
{"s3k8b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Powerful hit"},
{"s3k8c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""},
{"s3k8c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Humming power"},
{"s3k8d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""},
{"s3k8e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""},
{"s3k8e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Accelerating"},
{"s3k8f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Opening"},
{"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Impact"},
{"s3k91", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Closed"},