From 325079a39a66c055936f7df6dfc0f0ad5e7ca28c Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 11 Jan 2024 01:21:43 +0000 Subject: [PATCH] Delete everything major flagged up by listunusedsprites Notable deletions: - Metal Sonic Race - Includes all the specialised recording/playback apparatus which made g_demo.c harder to read - A bunch of hyperspecialised code inside several A_ actions - EXCEPTION: intentfully left in the spriteless SMK stuff for Sal's add-on down the line. --- src/console.c | 2 +- src/d_clisrv.c | 6 - src/d_main.cpp | 7 +- src/d_netcmd.c | 4 - src/deh_tables.c | 2431 +---- src/doomstat.h | 1 - src/g_demo.c | 508 +- src/g_demo.h | 13 - src/g_game.c | 7 +- src/info.c | 12398 +--------------------- src/info.h | 2786 +---- src/m_cheat.c | 1 - src/menus/play-local-race-time-attack.c | 2 - src/menus/transient/level-select.c | 2 - src/p_enemy.c | 1229 +-- src/p_floor.c | 17 - src/p_inter.c | 162 - src/p_local.h | 2 - src/p_map.c | 69 +- src/p_mobj.c | 555 +- src/p_saveg.c | 11 - src/p_setup.cpp | 5 - src/p_spec.c | 13 +- src/p_tick.c | 5 - src/p_user.c | 86 - src/sdl/i_system.cpp | 4 - src/sdl12/i_system.c | 4 - 27 files changed, 118 insertions(+), 20212 deletions(-) diff --git a/src/console.c b/src/console.c index 4d45dc07c..59ba7308b 100644 --- a/src/console.c +++ b/src/console.c @@ -931,7 +931,7 @@ boolean CON_Responder(event_t *ev) if (ev->type != ev_console) { #ifndef DEVELOP // I have driven this course 45 times and I just want to give myself rocketsneakers - if (modeattacking || metalrecording || marathonmode) + if (modeattacking || marathonmode) return false; #endif diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 1d1b2b0ba..445f27189 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2631,10 +2631,6 @@ void CL_RemovePlayer(INT32 playernum, kickreason_t reason) void CL_Reset(void) { - if (metalrecording) - G_StopMetalRecording(false); - if (metalplayback) - G_StopMetalDemo(); if (demo.recording) G_CheckDemoStatus(); @@ -3912,8 +3908,6 @@ boolean SV_SpawnServer(void) boolean result = false; if (demo.playback) G_StopDemo(); // reset engine parameter - if (metalplayback) - G_StopMetalDemo(); if (!serverrunning) { diff --git a/src/d_main.cpp b/src/d_main.cpp index c16fa8887..82f84ca6a 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -1850,12 +1850,7 @@ void D_SRB2Main(void) // check for a driver that wants intermission stats // start the apropriate game based on parms - if (M_CheckParm("-metal")) - { - G_RecordMetal(); - autostart = true; - } - else if (M_CheckParm("-record") && M_IsNextParm()) + if (M_CheckParm("-record") && M_IsNextParm()) { G_RecordDemo(M_GetNextParm()); autostart = true; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index d42167b04..c6647dc36 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -2020,8 +2020,6 @@ static void Command_Playdemo_f(void) // disconnect from server here? if (demo.playback) G_StopDemo(); - if (metalplayback) - G_StopMetalDemo(); // open the demo file strcpy(name, COM_Argv(1)); @@ -2059,8 +2057,6 @@ static void Command_Timedemo_f(void) // disconnect from server here? if (demo.playback) G_StopDemo(); - if (metalplayback) - G_StopMetalDemo(); // open the demo file strcpy (timedemo_name, COM_Argv(1)); diff --git a/src/deh_tables.c b/src/deh_tables.c index f1273c78b..0fe12dc7d 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -95,7 +95,6 @@ actionpointer_t actionpointers[] = {{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"}, @@ -128,7 +127,6 @@ actionpointer_t actionpointers[] = {{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"}, @@ -137,7 +135,6 @@ actionpointer_t actionpointers[] = {{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_Boss3ShockThink}, "A_BOSS3SHOCKTHINK"}, @@ -245,7 +242,6 @@ actionpointer_t actionpointers[] = {{A_ParentTriesToSleep}, "A_PARENTTRIESTOSLEEP"}, {{A_CryingToMomma}, "A_CRYINGTOMOMMA"}, {{A_CheckFlags2}, "A_CHECKFLAGS2"}, - {{A_Boss5FindWaypoint}, "A_BOSS5FINDWAYPOINT"}, {{A_DoNPCSkid}, "A_DONPCSKID"}, {{A_DoNPCPain}, "A_DONPCPAIN"}, {{A_PrepareRepeat}, "A_PREPAREREPEAT"}, @@ -255,13 +251,10 @@ actionpointer_t actionpointers[] = {{A_Boss5CheckFalling}, "A_BOSS5CHECKFALLING"}, {{A_Boss5PinchShot}, "A_BOSS5PINCHSHOT"}, {{A_Boss5MakeItRain}, "A_BOSS5MAKEITRAIN"}, - {{A_Boss5MakeJunk}, "A_BOSS5MAKEJUNK"}, {{A_LookForBetter}, "A_LOOKFORBETTER"}, {{A_Boss5BombExplode}, "A_BOSS5BOMBEXPLODE"}, {{A_TNTExplode}, "A_TNTEXPLODE"}, {{A_DebrisRandom}, "A_DEBRISRANDOM"}, - {{A_TrainCameo}, "A_TRAINCAMEO"}, - {{A_TrainCameo2}, "A_TRAINCAMEO2"}, {{A_CanarivoreGas}, "A_CANARIVOREGAS"}, {{A_KillSegments}, "A_KILLSEGMENTS"}, {{A_SnapperSpawn}, "A_SNAPPERSPAWN"}, @@ -273,11 +266,9 @@ actionpointer_t actionpointers[] = {{A_LavafallLava}, "A_LAVAFALLLAVA"}, {{A_FallingLavaCheck}, "A_FALLINGLAVACHECK"}, {{A_FireShrink}, "A_FIRESHRINK"}, - {{A_SpawnPterabytes}, "A_SPAWNPTERABYTES"}, {{A_PterabyteHover}, "A_PTERABYTEHOVER"}, {{A_RolloutSpawn}, "A_ROLLOUTSPAWN"}, {{A_RolloutRock}, "A_ROLLOUTROCK"}, - {{A_DragonbomberSpawn}, "A_DRAGONBOMBERSPAWN"}, {{A_DragonWing}, "A_DRAGONWING"}, {{A_DragonSegment}, "A_DRAGONSEGMENT"}, {{A_ChangeHeight}, "A_CHANGEHEIGHT"}, @@ -294,10 +285,7 @@ actionpointer_t actionpointers[] = {{A_FZBoomFlash}, "A_FZBOOMFLASH"}, {{A_FZBoomSmoke}, "A_FZBOOMSMOKE"}, {{A_RandomShadowFrame}, "A_RANDOMSHADOWFRAME"}, - {{A_RoamingShadowThinker}, "A_ROAMINGSHADOWTHINKER"}, {{A_MayonakaArrow}, "A_MAYONAKAARROW"}, - {{A_MementosTPParticles}, "A_MEMENTOSTPPARTICLES"}, - {{A_ReaperThinker}, "A_REAPERTHINKER"}, {{A_FlameShieldPaper}, "A_FLAMESHIELDPAPER"}, {{A_InvincSparkleRotate}, "A_INVINCSPARKLEROTATE"}, {{A_SpawnItemDebrisCloud}, "A_SPAWNITEMDEBRISCLOUD"}, @@ -379,381 +367,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_KART_TIRE1", "S_KART_TIRE2", - // Blue Crawla - "S_POSS_STND", - "S_POSS_RUN1", - "S_POSS_RUN2", - "S_POSS_RUN3", - "S_POSS_RUN4", - "S_POSS_RUN5", - "S_POSS_RUN6", - - // Red Crawla - "S_SPOS_STND", - "S_SPOS_RUN1", - "S_SPOS_RUN2", - "S_SPOS_RUN3", - "S_SPOS_RUN4", - "S_SPOS_RUN5", - "S_SPOS_RUN6", - - // Greenflower Fish - "S_FISH1", - "S_FISH2", - "S_FISH3", - "S_FISH4", - - // Buzz (Gold) - "S_BUZZLOOK1", - "S_BUZZLOOK2", - "S_BUZZFLY1", - "S_BUZZFLY2", - - // Buzz (Red) - "S_RBUZZLOOK1", - "S_RBUZZLOOK2", - "S_RBUZZFLY1", - "S_RBUZZFLY2", - - // Jetty-Syn Bomber - "S_JETBLOOK1", - "S_JETBLOOK2", - "S_JETBZOOM1", - "S_JETBZOOM2", - - // Jetty-Syn Gunner - "S_JETGLOOK1", - "S_JETGLOOK2", - "S_JETGZOOM1", - "S_JETGZOOM2", - "S_JETGSHOOT1", - "S_JETGSHOOT2", - - // Crawla Commander - "S_CCOMMAND1", - "S_CCOMMAND2", - "S_CCOMMAND3", - "S_CCOMMAND4", - - // Deton - "S_DETON1", - "S_DETON2", - "S_DETON3", - "S_DETON4", - "S_DETON5", - "S_DETON6", - "S_DETON7", - "S_DETON8", - "S_DETON9", - "S_DETON10", - "S_DETON11", - "S_DETON12", - "S_DETON13", - "S_DETON14", - "S_DETON15", - - // Skim Mine Dropper - "S_SKIM1", - "S_SKIM2", - "S_SKIM3", - "S_SKIM4", - - // THZ Turret - "S_TURRET", - "S_TURRETFIRE", - "S_TURRETSHOCK1", - "S_TURRETSHOCK2", - "S_TURRETSHOCK3", - "S_TURRETSHOCK4", - "S_TURRETSHOCK5", - "S_TURRETSHOCK6", - "S_TURRETSHOCK7", - "S_TURRETSHOCK8", - "S_TURRETSHOCK9", - - // Popup Turret - "S_TURRETLOOK", - "S_TURRETSEE", - "S_TURRETPOPUP1", - "S_TURRETPOPUP2", - "S_TURRETPOPUP3", - "S_TURRETPOPUP4", - "S_TURRETPOPUP5", - "S_TURRETPOPUP6", - "S_TURRETPOPUP7", - "S_TURRETPOPUP8", - "S_TURRETSHOOT", - "S_TURRETPOPDOWN1", - "S_TURRETPOPDOWN2", - "S_TURRETPOPDOWN3", - "S_TURRETPOPDOWN4", - "S_TURRETPOPDOWN5", - "S_TURRETPOPDOWN6", - "S_TURRETPOPDOWN7", - "S_TURRETPOPDOWN8", - - // Spincushion - "S_SPINCUSHION_LOOK", - "S_SPINCUSHION_CHASE1", - "S_SPINCUSHION_CHASE2", - "S_SPINCUSHION_CHASE3", - "S_SPINCUSHION_CHASE4", - "S_SPINCUSHION_AIM1", - "S_SPINCUSHION_AIM2", - "S_SPINCUSHION_AIM3", - "S_SPINCUSHION_AIM4", - "S_SPINCUSHION_AIM5", - "S_SPINCUSHION_SPIN1", - "S_SPINCUSHION_SPIN2", - "S_SPINCUSHION_SPIN3", - "S_SPINCUSHION_SPIN4", - "S_SPINCUSHION_STOP1", - "S_SPINCUSHION_STOP2", - "S_SPINCUSHION_STOP3", - "S_SPINCUSHION_STOP4", - - // Crushstacean - "S_CRUSHSTACEAN_ROAM1", - "S_CRUSHSTACEAN_ROAM2", - "S_CRUSHSTACEAN_ROAM3", - "S_CRUSHSTACEAN_ROAM4", - "S_CRUSHSTACEAN_ROAMPAUSE", - "S_CRUSHSTACEAN_PUNCH1", - "S_CRUSHSTACEAN_PUNCH2", - "S_CRUSHCLAW_AIM", - "S_CRUSHCLAW_OUT", - "S_CRUSHCLAW_STAY", - "S_CRUSHCLAW_IN", - "S_CRUSHCLAW_WAIT", - "S_CRUSHCHAIN", - - // Banpyura - "S_BANPYURA_ROAM1", - "S_BANPYURA_ROAM2", - "S_BANPYURA_ROAM3", - "S_BANPYURA_ROAM4", - "S_BANPYURA_ROAMPAUSE", - "S_CDIAG1", - "S_CDIAG2", - "S_CDIAG3", - "S_CDIAG4", - "S_CDIAG5", - "S_CDIAG6", - "S_CDIAG7", - "S_CDIAG8", - - // Jet Jaw - "S_JETJAW_ROAM1", - "S_JETJAW_ROAM2", - "S_JETJAW_ROAM3", - "S_JETJAW_ROAM4", - "S_JETJAW_ROAM5", - "S_JETJAW_ROAM6", - "S_JETJAW_ROAM7", - "S_JETJAW_ROAM8", - "S_JETJAW_CHOMP1", - "S_JETJAW_CHOMP2", - "S_JETJAW_CHOMP3", - "S_JETJAW_CHOMP4", - "S_JETJAW_CHOMP5", - "S_JETJAW_CHOMP6", - "S_JETJAW_CHOMP7", - "S_JETJAW_CHOMP8", - "S_JETJAW_CHOMP9", - "S_JETJAW_CHOMP10", - "S_JETJAW_CHOMP11", - "S_JETJAW_CHOMP12", - "S_JETJAW_CHOMP13", - "S_JETJAW_CHOMP14", - "S_JETJAW_CHOMP15", - "S_JETJAW_CHOMP16", - "S_JETJAW_SOUND", - - // Snailer - "S_SNAILER1", - "S_SNAILER_FLICKY", - - // Vulture - "S_VULTURE_STND", - "S_VULTURE_DRIFT", - "S_VULTURE_ZOOM1", - "S_VULTURE_ZOOM2", - "S_VULTURE_STUNNED", - - // Pointy - "S_POINTY1", - "S_POINTYBALL1", - - // Robo-Hood - "S_ROBOHOOD_LOOK", - "S_ROBOHOOD_STAND", - "S_ROBOHOOD_FIRE1", - "S_ROBOHOOD_FIRE2", - "S_ROBOHOOD_JUMP1", - "S_ROBOHOOD_JUMP2", - "S_ROBOHOOD_JUMP3", - - // Castlebot Facestabber - "S_FACESTABBER_STND1", - "S_FACESTABBER_STND2", - "S_FACESTABBER_STND3", - "S_FACESTABBER_STND4", - "S_FACESTABBER_STND5", - "S_FACESTABBER_STND6", - "S_FACESTABBER_CHARGE1", - "S_FACESTABBER_CHARGE2", - "S_FACESTABBER_CHARGE3", - "S_FACESTABBER_CHARGE4", - "S_FACESTABBER_PAIN", - "S_FACESTABBER_DIE1", - "S_FACESTABBER_DIE2", - "S_FACESTABBER_DIE3", - "S_FACESTABBERSPEAR", - - // Egg Guard - "S_EGGGUARD_STND", - "S_EGGGUARD_WALK1", - "S_EGGGUARD_WALK2", - "S_EGGGUARD_WALK3", - "S_EGGGUARD_WALK4", - "S_EGGGUARD_MAD1", - "S_EGGGUARD_MAD2", - "S_EGGGUARD_MAD3", - "S_EGGGUARD_RUN1", - "S_EGGGUARD_RUN2", - "S_EGGGUARD_RUN3", - "S_EGGGUARD_RUN4", - - // Egg Shield for Egg Guard - "S_EGGSHIELD", - "S_EGGSHIELDBREAK", - - // Green Snapper - "S_SNAPPER_SPAWN", - "S_SNAPPER_SPAWN2", - "S_GSNAPPER_STND", - "S_GSNAPPER1", - "S_GSNAPPER2", - "S_GSNAPPER3", - "S_GSNAPPER4", - "S_SNAPPER_XPLD", - "S_SNAPPER_LEG", - "S_SNAPPER_LEGRAISE", - "S_SNAPPER_HEAD", - - // Minus - "S_MINUS_INIT", - "S_MINUS_STND", - "S_MINUS_DIGGING1", - "S_MINUS_DIGGING2", - "S_MINUS_DIGGING3", - "S_MINUS_DIGGING4", - "S_MINUS_BURST0", - "S_MINUS_BURST1", - "S_MINUS_BURST2", - "S_MINUS_BURST3", - "S_MINUS_BURST4", - "S_MINUS_BURST5", - "S_MINUS_POPUP", - "S_MINUS_AERIAL1", - "S_MINUS_AERIAL2", - "S_MINUS_AERIAL3", - "S_MINUS_AERIAL4", - - // Minus dirt - "S_MINUSDIRT1", - "S_MINUSDIRT2", - "S_MINUSDIRT3", - "S_MINUSDIRT4", - "S_MINUSDIRT5", - "S_MINUSDIRT6", - "S_MINUSDIRT7", - - // Spring Shell - "S_SSHELL_STND", - "S_SSHELL_RUN1", - "S_SSHELL_RUN2", - "S_SSHELL_RUN3", - "S_SSHELL_RUN4", - "S_SSHELL_SPRING1", - "S_SSHELL_SPRING2", - "S_SSHELL_SPRING3", - "S_SSHELL_SPRING4", - - // Spring Shell (yellow) - "S_YSHELL_STND", - "S_YSHELL_RUN1", - "S_YSHELL_RUN2", - "S_YSHELL_RUN3", - "S_YSHELL_RUN4", - "S_YSHELL_SPRING1", - "S_YSHELL_SPRING2", - "S_YSHELL_SPRING3", - "S_YSHELL_SPRING4", - - // Unidus - "S_UNIDUS_STND", - "S_UNIDUS_RUN", - "S_UNIDUS_BALL", - - // Canarivore - "S_CANARIVORE_LOOK", - "S_CANARIVORE_AWAKEN1", - "S_CANARIVORE_AWAKEN2", - "S_CANARIVORE_AWAKEN3", - "S_CANARIVORE_GAS1", - "S_CANARIVORE_GAS2", - "S_CANARIVORE_GAS3", - "S_CANARIVORE_GAS4", - "S_CANARIVORE_GAS5", - "S_CANARIVORE_GASREPEAT", - "S_CANARIVORE_CLOSE1", - "S_CANARIVORE_CLOSE2", - "S_CANARIVOREGAS_1", - "S_CANARIVOREGAS_2", - "S_CANARIVOREGAS_3", - "S_CANARIVOREGAS_4", - "S_CANARIVOREGAS_5", - "S_CANARIVOREGAS_6", - "S_CANARIVOREGAS_7", - "S_CANARIVOREGAS_8", - - // Pyre Fly - "S_PYREFLY_FLY", - "S_PYREFLY_BURN", - "S_PYREFIRE1", - "S_PYREFIRE2", - - // Pterabyte - "S_PTERABYTESPAWNER", - "S_PTERABYTEWAYPOINT", - "S_PTERABYTE_FLY1", - "S_PTERABYTE_FLY2", - "S_PTERABYTE_FLY3", - "S_PTERABYTE_FLY4", - "S_PTERABYTE_SWOOPDOWN", - "S_PTERABYTE_SWOOPUP", - - // Dragonbomber - "S_DRAGONBOMBER", - "S_DRAGONWING1", - "S_DRAGONWING2", - "S_DRAGONWING3", - "S_DRAGONWING4", - "S_DRAGONTAIL_LOADED", - "S_DRAGONTAIL_EMPTY", - "S_DRAGONTAIL_EMPTYLOOP", - "S_DRAGONTAIL_RELOAD", - "S_DRAGONMINE", - "S_DRAGONMINE_LAND1", - "S_DRAGONMINE_LAND2", - "S_DRAGONMINE_SLOWFLASH1", - "S_DRAGONMINE_SLOWFLASH2", - "S_DRAGONMINE_SLOWLOOP", - "S_DRAGONMINE_FASTFLASH1", - "S_DRAGONMINE_FASTFLASH2", - "S_DRAGONMINE_FASTLOOP", - // Boss Explosion "S_BOSSEXPLODE", @@ -765,324 +378,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SONIC3KBOSSEXPLOSION5", "S_SONIC3KBOSSEXPLOSION6", - "S_JETFUME1", - - // Boss 1 - "S_EGGMOBILE_STND", - "S_EGGMOBILE_ROFL", - "S_EGGMOBILE_LATK1", - "S_EGGMOBILE_LATK2", - "S_EGGMOBILE_LATK3", - "S_EGGMOBILE_LATK4", - "S_EGGMOBILE_LATK5", - "S_EGGMOBILE_LATK6", - "S_EGGMOBILE_LATK7", - "S_EGGMOBILE_LATK8", - "S_EGGMOBILE_LATK9", - "S_EGGMOBILE_RATK1", - "S_EGGMOBILE_RATK2", - "S_EGGMOBILE_RATK3", - "S_EGGMOBILE_RATK4", - "S_EGGMOBILE_RATK5", - "S_EGGMOBILE_RATK6", - "S_EGGMOBILE_RATK7", - "S_EGGMOBILE_RATK8", - "S_EGGMOBILE_RATK9", - "S_EGGMOBILE_PANIC1", - "S_EGGMOBILE_PANIC2", - "S_EGGMOBILE_PANIC3", - "S_EGGMOBILE_PANIC4", - "S_EGGMOBILE_PANIC5", - "S_EGGMOBILE_PANIC6", - "S_EGGMOBILE_PANIC7", - "S_EGGMOBILE_PANIC8", - "S_EGGMOBILE_PANIC9", - "S_EGGMOBILE_PANIC10", - "S_EGGMOBILE_PANIC11", - "S_EGGMOBILE_PANIC12", - "S_EGGMOBILE_PANIC13", - "S_EGGMOBILE_PANIC14", - "S_EGGMOBILE_PANIC15", - "S_EGGMOBILE_PAIN", - "S_EGGMOBILE_PAIN2", - "S_EGGMOBILE_DIE1", - "S_EGGMOBILE_DIE2", - "S_EGGMOBILE_DIE3", - "S_EGGMOBILE_DIE4", - "S_EGGMOBILE_FLEE1", - "S_EGGMOBILE_FLEE2", - "S_EGGMOBILE_BALL", - "S_EGGMOBILE_TARGET", - - "S_BOSSEGLZ1", - "S_BOSSEGLZ2", - - // Boss 2 - "S_EGGMOBILE2_STND", - "S_EGGMOBILE2_POGO1", - "S_EGGMOBILE2_POGO2", - "S_EGGMOBILE2_POGO3", - "S_EGGMOBILE2_POGO4", - "S_EGGMOBILE2_POGO5", - "S_EGGMOBILE2_POGO6", - "S_EGGMOBILE2_POGO7", - "S_EGGMOBILE2_PAIN", - "S_EGGMOBILE2_PAIN2", - "S_EGGMOBILE2_DIE1", - "S_EGGMOBILE2_DIE2", - "S_EGGMOBILE2_DIE3", - "S_EGGMOBILE2_DIE4", - "S_EGGMOBILE2_FLEE1", - "S_EGGMOBILE2_FLEE2", - - "S_BOSSTANK1", - "S_BOSSTANK2", - "S_BOSSSPIGOT", - - // Boss 2 Goop - "S_GOOP1", - "S_GOOP2", - "S_GOOP3", - "S_GOOPTRAIL", - - // Boss 3 - "S_EGGMOBILE3_STND", - "S_EGGMOBILE3_SHOCK", - "S_EGGMOBILE3_ATK1", - "S_EGGMOBILE3_ATK2", - "S_EGGMOBILE3_ATK3A", - "S_EGGMOBILE3_ATK3B", - "S_EGGMOBILE3_ATK3C", - "S_EGGMOBILE3_ATK3D", - "S_EGGMOBILE3_ATK4", - "S_EGGMOBILE3_ATK5", - "S_EGGMOBILE3_ROFL", - "S_EGGMOBILE3_PAIN", - "S_EGGMOBILE3_PAIN2", - "S_EGGMOBILE3_DIE1", - "S_EGGMOBILE3_DIE2", - "S_EGGMOBILE3_DIE3", - "S_EGGMOBILE3_DIE4", - "S_EGGMOBILE3_FLEE1", - "S_EGGMOBILE3_FLEE2", - - // Boss 3 Pinch - "S_FAKEMOBILE_INIT", - "S_FAKEMOBILE", - "S_FAKEMOBILE_ATK1", - "S_FAKEMOBILE_ATK2", - "S_FAKEMOBILE_ATK3A", - "S_FAKEMOBILE_ATK3B", - "S_FAKEMOBILE_ATK3C", - "S_FAKEMOBILE_ATK3D", - "S_FAKEMOBILE_DIE1", - "S_FAKEMOBILE_DIE2", - - "S_BOSSSEBH1", - "S_BOSSSEBH2", - - // Boss 3 Shockwave - "S_SHOCKWAVE1", - "S_SHOCKWAVE2", - - // Boss 4 - "S_EGGMOBILE4_STND", - "S_EGGMOBILE4_LATK1", - "S_EGGMOBILE4_LATK2", - "S_EGGMOBILE4_LATK3", - "S_EGGMOBILE4_LATK4", - "S_EGGMOBILE4_LATK5", - "S_EGGMOBILE4_LATK6", - "S_EGGMOBILE4_RATK1", - "S_EGGMOBILE4_RATK2", - "S_EGGMOBILE4_RATK3", - "S_EGGMOBILE4_RATK4", - "S_EGGMOBILE4_RATK5", - "S_EGGMOBILE4_RATK6", - "S_EGGMOBILE4_RAISE1", - "S_EGGMOBILE4_RAISE2", - "S_EGGMOBILE4_PAIN1", - "S_EGGMOBILE4_PAIN2", - "S_EGGMOBILE4_DIE1", - "S_EGGMOBILE4_DIE2", - "S_EGGMOBILE4_DIE3", - "S_EGGMOBILE4_DIE4", - "S_EGGMOBILE4_FLEE1", - "S_EGGMOBILE4_FLEE2", - "S_EGGMOBILE4_MACE", - "S_EGGMOBILE4_MACE_DIE1", - "S_EGGMOBILE4_MACE_DIE2", - "S_EGGMOBILE4_MACE_DIE3", - - // Boss 4 jet flame - "S_JETFLAME", - - // Boss 4 Spectator Eggrobo - "S_EGGROBO1_STND", - "S_EGGROBO1_BSLAP1", - "S_EGGROBO1_BSLAP2", - "S_EGGROBO1_PISSED", - - // Boss 4 Spectator Eggrobo jet flame - "S_EGGROBOJET", - - // Boss 5 - "S_FANG_SETUP", - "S_FANG_INTRO0", - "S_FANG_INTRO1", - "S_FANG_INTRO2", - "S_FANG_INTRO3", - "S_FANG_INTRO4", - "S_FANG_INTRO5", - "S_FANG_INTRO6", - "S_FANG_INTRO7", - "S_FANG_INTRO8", - "S_FANG_INTRO9", - "S_FANG_INTRO10", - "S_FANG_INTRO11", - "S_FANG_INTRO12", - "S_FANG_CLONE1", - "S_FANG_CLONE2", - "S_FANG_CLONE3", - "S_FANG_CLONE4", - "S_FANG_IDLE0", - "S_FANG_IDLE1", - "S_FANG_IDLE2", - "S_FANG_IDLE3", - "S_FANG_IDLE4", - "S_FANG_IDLE5", - "S_FANG_IDLE6", - "S_FANG_IDLE7", - "S_FANG_IDLE8", - "S_FANG_PAIN1", - "S_FANG_PAIN2", - "S_FANG_PATHINGSTART1", - "S_FANG_PATHINGSTART2", - "S_FANG_PATHING", - "S_FANG_BOUNCE1", - "S_FANG_BOUNCE2", - "S_FANG_BOUNCE3", - "S_FANG_BOUNCE4", - "S_FANG_FALL1", - "S_FANG_FALL2", - "S_FANG_CHECKPATH1", - "S_FANG_CHECKPATH2", - "S_FANG_PATHINGCONT1", - "S_FANG_PATHINGCONT2", - "S_FANG_PATHINGCONT3", - "S_FANG_SKID1", - "S_FANG_SKID2", - "S_FANG_SKID3", - "S_FANG_CHOOSEATTACK", - "S_FANG_FIRESTART1", - "S_FANG_FIRESTART2", - "S_FANG_FIRE1", - "S_FANG_FIRE2", - "S_FANG_FIRE3", - "S_FANG_FIRE4", - "S_FANG_FIREREPEAT", - "S_FANG_LOBSHOT0", - "S_FANG_LOBSHOT1", - "S_FANG_LOBSHOT2", - "S_FANG_WAIT1", - "S_FANG_WAIT2", - "S_FANG_WALLHIT", - "S_FANG_PINCHPATHINGSTART1", - "S_FANG_PINCHPATHINGSTART2", - "S_FANG_PINCHPATHING", - "S_FANG_PINCHBOUNCE0", - "S_FANG_PINCHBOUNCE1", - "S_FANG_PINCHBOUNCE2", - "S_FANG_PINCHBOUNCE3", - "S_FANG_PINCHBOUNCE4", - "S_FANG_PINCHFALL0", - "S_FANG_PINCHFALL1", - "S_FANG_PINCHFALL2", - "S_FANG_PINCHSKID1", - "S_FANG_PINCHSKID2", - "S_FANG_PINCHLOBSHOT0", - "S_FANG_PINCHLOBSHOT1", - "S_FANG_PINCHLOBSHOT2", - "S_FANG_PINCHLOBSHOT3", - "S_FANG_PINCHLOBSHOT4", - "S_FANG_DIE1", - "S_FANG_DIE2", - "S_FANG_DIE3", - "S_FANG_DIE4", - "S_FANG_DIE5", - "S_FANG_DIE6", - "S_FANG_DIE7", - "S_FANG_DIE8", - "S_FANG_FLEEPATHING1", - "S_FANG_FLEEPATHING2", - "S_FANG_FLEEBOUNCE1", - "S_FANG_FLEEBOUNCE2", - "S_FANG_KO", - - "S_BROKENROBOTRANDOM", - "S_BROKENROBOTA", - "S_BROKENROBOTB", - "S_BROKENROBOTC", - "S_BROKENROBOTD", - "S_BROKENROBOTE", - "S_BROKENROBOTF", - - "S_ALART1", - "S_ALART2", - - "S_VWREF", - "S_VWREB", - - "S_PROJECTORLIGHT1", - "S_PROJECTORLIGHT2", - "S_PROJECTORLIGHT3", - "S_PROJECTORLIGHT4", - "S_PROJECTORLIGHT5", - - "S_FBOMB1", - "S_FBOMB2", - "S_FBOMB_EXPL1", - "S_FBOMB_EXPL2", - "S_FBOMB_EXPL3", - "S_FBOMB_EXPL4", - "S_FBOMB_EXPL5", - "S_FBOMB_EXPL6", - "S_TNTDUST_1", - "S_TNTDUST_2", - "S_TNTDUST_3", - "S_TNTDUST_4", - "S_TNTDUST_5", - "S_TNTDUST_6", - "S_TNTDUST_7", - "S_TNTDUST_8", - "S_FSGNA", - "S_FSGNB", - "S_FSGNC", - "S_FSGND", - - // Metal Sonic (Race) - "S_METALSONIC_RACE", - // Metal Sonic (Battle) - "S_METALSONIC_FLOAT", - "S_METALSONIC_VECTOR", - "S_METALSONIC_STUN", - "S_METALSONIC_RAISE", - "S_METALSONIC_GATHER", - "S_METALSONIC_DASH", - "S_METALSONIC_BOUNCE", - "S_METALSONIC_BADBOUNCE", - "S_METALSONIC_SHOOT", - "S_METALSONIC_PAIN", - "S_METALSONIC_DEATH1", - "S_METALSONIC_DEATH2", - "S_METALSONIC_DEATH3", - "S_METALSONIC_DEATH4", - "S_METALSONIC_FLEE1", - "S_METALSONIC_FLEE2", - - "S_MSSHIELD_F1", - "S_MSSHIELD_F2", - // Ring "S_RING", "S_FASTRING1", @@ -1136,34 +431,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_BLUESPHERE_BOUNCE27", "S_BLUESPHERE_BOUNCE28", - // Bomb Sphere - "S_BOMBSPHERE1", - "S_BOMBSPHERE2", - "S_BOMBSPHERE3", - "S_BOMBSPHERE4", - - // NiGHTS Chip - "S_NIGHTSCHIP", - "S_NIGHTSCHIPBONUS", - - // NiGHTS Star - "S_NIGHTSSTAR", - "S_NIGHTSSTARXMAS", - - // Gravity Wells for special stages - "S_GRAVWELLGREEN", - "S_GRAVWELLRED", - - // Individual Team Rings - "S_TEAMRING", - - // Special Stage Token - "S_TOKEN", - - // CTF Flags - "S_REDFLAG", - "S_BLUEFLAG", - // Emblem "S_EMBLEM1", "S_EMBLEM2", @@ -1268,13 +535,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SPINFIRE5", "S_SPINFIRE6", - "S_TEAM_SPINFIRE1", - "S_TEAM_SPINFIRE2", - "S_TEAM_SPINFIRE3", - "S_TEAM_SPINFIRE4", - "S_TEAM_SPINFIRE5", - "S_TEAM_SPINFIRE6", - // Spikes "S_SPIKE1", "S_SPIKE2", @@ -1296,197 +556,14 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_WALLSPIKED1", "S_WALLSPIKED2", - // Big floating mine - "S_BIGMINE_IDLE", - "S_BIGMINE_ALERT1", - "S_BIGMINE_ALERT2", - "S_BIGMINE_ALERT3", - "S_BIGMINE_SET1", - "S_BIGMINE_SET2", - "S_BIGMINE_SET3", - "S_BIGMINE_BLAST1", - "S_BIGMINE_BLAST2", - "S_BIGMINE_BLAST3", - "S_BIGMINE_BLAST4", - "S_BIGMINE_BLAST5", - // Cannon Launcher "S_CANNONLAUNCHER1", "S_CANNONLAUNCHER2", "S_CANNONLAUNCHER3", - // Monitor Miscellany - "S_BOXSPARKLE1", - "S_BOXSPARKLE2", - "S_BOXSPARKLE3", - "S_BOXSPARKLE4", - - "S_BOX_FLICKER", - "S_BOX_POP1", - "S_BOX_POP2", - - "S_GOLDBOX_FLICKER", - "S_GOLDBOX_OFF1", - "S_GOLDBOX_OFF2", - "S_GOLDBOX_OFF3", - "S_GOLDBOX_OFF4", - "S_GOLDBOX_OFF5", - "S_GOLDBOX_OFF6", - "S_GOLDBOX_OFF7", - - // Monitor States (one per box) - "S_MYSTERY_BOX", - "S_RING_BOX", - "S_PITY_BOX", - "S_ATTRACT_BOX", - "S_FORCE_BOX", - "S_ARMAGEDDON_BOX", - "S_WHIRLWIND_BOX", - "S_ELEMENTAL_BOX", - "S_SNEAKERS_BOX", - "S_INVULN_BOX", - "S_1UP_BOX", - "S_EGGMAN_BOX", - "S_MIXUP_BOX", - "S_GRAVITY_BOX", - "S_RECYCLER_BOX", - "S_SCORE1K_BOX", - "S_SCORE10K_BOX", - "S_FLAMEAURA_BOX", - "S_BUBBLEWRAP_BOX", - "S_THUNDERCOIN_BOX", - - // Gold Repeat Monitor States (one per box) - "S_PITY_GOLDBOX", - "S_ATTRACT_GOLDBOX", - "S_FORCE_GOLDBOX", - "S_ARMAGEDDON_GOLDBOX", - "S_WHIRLWIND_GOLDBOX", - "S_ELEMENTAL_GOLDBOX", - "S_SNEAKERS_GOLDBOX", - "S_INVULN_GOLDBOX", - "S_EGGMAN_GOLDBOX", - "S_GRAVITY_GOLDBOX", - "S_FLAMEAURA_GOLDBOX", - "S_BUBBLEWRAP_GOLDBOX", - "S_THUNDERCOIN_GOLDBOX", - - // Team Ring Boxes (these are special) - "S_RING_REDBOX1", - "S_RING_REDBOX2", - "S_REDBOX_POP1", - "S_REDBOX_POP2", - - "S_RING_BLUEBOX1", - "S_RING_BLUEBOX2", - "S_BLUEBOX_POP1", - "S_BLUEBOX_POP2", - - // Box Icons -- 2 states each, animation and action - "S_RING_ICON1", - "S_RING_ICON2", - - "S_PITY_ICON1", - "S_PITY_ICON2", - - "S_ATTRACT_ICON1", - "S_ATTRACT_ICON2", - - "S_FORCE_ICON1", - "S_FORCE_ICON2", - - "S_ARMAGEDDON_ICON1", - "S_ARMAGEDDON_ICON2", - - "S_WHIRLWIND_ICON1", - "S_WHIRLWIND_ICON2", - - "S_ELEMENTAL_ICON1", - "S_ELEMENTAL_ICON2", - - "S_SNEAKERS_ICON1", - "S_SNEAKERS_ICON2", - - "S_INVULN_ICON1", - "S_INVULN_ICON2", - - "S_1UP_ICON1", - "S_1UP_ICON2", - - "S_EGGMAN_ICON1", - "S_EGGMAN_ICON2", - - "S_MIXUP_ICON1", - "S_MIXUP_ICON2", - - "S_GRAVITY_ICON1", - "S_GRAVITY_ICON2", - - "S_RECYCLER_ICON1", - "S_RECYCLER_ICON2", - - "S_SCORE1K_ICON1", - "S_SCORE1K_ICON2", - - "S_SCORE10K_ICON1", - "S_SCORE10K_ICON2", - - "S_FLAMEAURA_ICON1", - "S_FLAMEAURA_ICON2", - - "S_BUBBLEWRAP_ICON1", - "S_BUBBLEWRAP_ICON2", - - "S_THUNDERCOIN_ICON1", - "S_THUNDERCOIN_ICON2", - - // --- - - "S_ROCKET", - - "S_LASER", - "S_LASER2", - "S_LASERFLASH", - - "S_LASERFLAME1", - "S_LASERFLAME2", - "S_LASERFLAME3", - "S_LASERFLAME4", - "S_LASERFLAME5", - - "S_TORPEDO", - - "S_ENERGYBALL1", - "S_ENERGYBALL2", - - // Skim Mine, also used by Jetty-Syn bomber - "S_MINE1", - "S_MINE_BOOM1", - "S_MINE_BOOM2", - "S_MINE_BOOM3", - "S_MINE_BOOM4", - - // Jetty-Syn Bullet - "S_JETBULLET1", - "S_JETBULLET2", - - "S_TURRETLASER", - "S_TURRETLASEREXPLODE1", - "S_TURRETLASEREXPLODE2", - // Cannonball "S_CANNONBALL1", - // Arrow - "S_ARROW", - "S_ARROWBONK", - - // Glaregoyle Demon fire - "S_DEMONFIRE", - - // The letter - "S_LETTER", - // GFZ flowers "S_GFZFLOWERA", "S_GFZFLOWERB", @@ -1613,20 +690,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SMALLGRABCHAIN", "S_BIGGRABCHAIN", - // Yellow spring on a ball - "S_YELLOWSPRINGBALL", - "S_YELLOWSPRINGBALL2", - "S_YELLOWSPRINGBALL3", - "S_YELLOWSPRINGBALL4", - "S_YELLOWSPRINGBALL5", - - // Red spring on a ball - "S_REDSPRINGBALL", - "S_REDSPRINGBALL2", - "S_REDSPRINGBALL3", - "S_REDSPRINGBALL4", - "S_REDSPRINGBALL5", - // Small Firebar "S_SMALLFIREBAR1", "S_SMALLFIREBAR2", @@ -1678,10 +741,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_WAVINGFLAGSEG1", "S_WAVINGFLAGSEG2", "S_CRAWLASTATUE", - "S_FACESTABBERSTATUE", - "S_SUSPICIOUSFACESTABBERSTATUE_WAIT", - "S_SUSPICIOUSFACESTABBERSTATUE_BURST1", - "S_SUSPICIOUSFACESTABBERSTATUE_BURST2", "S_BRAMBLES", // Big Tumbleweed @@ -1740,6 +799,14 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_TNTBARREL_EXPL6", "S_TNTBARREL_EXPL7", "S_TNTBARREL_FLYING", + "S_TNTDUST_1", + "S_TNTDUST_2", + "S_TNTDUST_3", + "S_TNTDUST_4", + "S_TNTDUST_5", + "S_TNTDUST_6", + "S_TNTDUST_7", + "S_TNTDUST_8", // TNT proximity shell "S_PROXIMITY_TNT", @@ -1778,34 +845,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_ARIDDUST2", "S_ARIDDUST3", - // Minecart - "S_MINECART_IDLE", - "S_MINECART_DTH1", - "S_MINECARTEND", - "S_MINECARTSEG_FRONT", - "S_MINECARTSEG_BACK", - "S_MINECARTSEG_LEFT", - "S_MINECARTSEG_RIGHT", - "S_MINECARTSIDEMARK1", - "S_MINECARTSIDEMARK2", - "S_MINECARTSPARK", - - // Saloon door - "S_SALOONDOOR", - "S_SALOONDOORCENTER", - - // Train cameo - "S_TRAINCAMEOSPAWNER_1", - "S_TRAINCAMEOSPAWNER_2", - "S_TRAINCAMEOSPAWNER_3", - "S_TRAINCAMEOSPAWNER_4", - "S_TRAINCAMEOSPAWNER_5", - "S_TRAINPUFFMAKER", - - // Train - "S_TRAINDUST", - "S_TRAINSTEAM", - // Flame jet "S_FLAMEJETSTND", "S_FLAMEJETSTART", @@ -1840,10 +879,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_LAVAFALL_LAVA3", "S_LAVAFALLROCK", - // Rollout Rock - "S_ROLLOUTSPAWN", - "S_ROLLOUTROCK", - // RVZ scenery "S_BIGFERNLEAF", "S_BIGFERN1", @@ -1853,49 +888,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_WALLVINE_LONG", "S_WALLVINE_SHORT", - // Glaregoyles - "S_GLAREGOYLE", - "S_GLAREGOYLE_CHARGE", - "S_GLAREGOYLE_BLINK", - "S_GLAREGOYLE_HOLD", - "S_GLAREGOYLE_FIRE", - "S_GLAREGOYLE_LOOP", - "S_GLAREGOYLE_COOLDOWN", - "S_GLAREGOYLEUP", - "S_GLAREGOYLEUP_CHARGE", - "S_GLAREGOYLEUP_BLINK", - "S_GLAREGOYLEUP_HOLD", - "S_GLAREGOYLEUP_FIRE", - "S_GLAREGOYLEUP_LOOP", - "S_GLAREGOYLEUP_COOLDOWN", - "S_GLAREGOYLEDOWN", - "S_GLAREGOYLEDOWN_CHARGE", - "S_GLAREGOYLEDOWN_BLINK", - "S_GLAREGOYLEDOWN_HOLD", - "S_GLAREGOYLEDOWN_FIRE", - "S_GLAREGOYLEDOWN_LOOP", - "S_GLAREGOYLEDOWN_COOLDOWN", - "S_GLAREGOYLELONG", - "S_GLAREGOYLELONG_CHARGE", - "S_GLAREGOYLELONG_BLINK", - "S_GLAREGOYLELONG_HOLD", - "S_GLAREGOYLELONG_FIRE", - "S_GLAREGOYLELONG_LOOP", - "S_GLAREGOYLELONG_COOLDOWN", - - // ATZ's Red Crystal/Target - "S_TARGET_IDLE", - "S_TARGET_HIT1", - "S_TARGET_HIT2", - "S_TARGET_RESPAWN", - "S_TARGET_ALLDONE", - - // ATZ's green flame - "S_GREENFLAME", - - // ATZ Blue Gargoyle - "S_BLUEGARGOYLE", - // Stalagmites "S_STG0", "S_STG1", @@ -1924,16 +916,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi // FHZ "S_FHZICE1", "S_FHZICE2", - "S_ROSY_IDLE1", - "S_ROSY_IDLE2", - "S_ROSY_IDLE3", - "S_ROSY_IDLE4", - "S_ROSY_JUMP", - "S_ROSY_WALK", - "S_ROSY_HUG", - "S_ROSY_PAIN", - "S_ROSY_STND", - "S_ROSY_UNHAPPY", // Halloween Scenery // Pumpkins @@ -2038,258 +1020,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_DBALL6", "S_EGGSTATUE2", - // Shield Orb - "S_ARMA1", - "S_ARMA2", - "S_ARMA3", - "S_ARMA4", - "S_ARMA5", - "S_ARMA6", - "S_ARMA7", - "S_ARMA8", - "S_ARMA9", - "S_ARMA10", - "S_ARMA11", - "S_ARMA12", - "S_ARMA13", - "S_ARMA14", - "S_ARMA15", - "S_ARMA16", - - "S_ARMF1", - "S_ARMF2", - "S_ARMF3", - "S_ARMF4", - "S_ARMF5", - "S_ARMF6", - "S_ARMF7", - "S_ARMF8", - "S_ARMF9", - "S_ARMF10", - "S_ARMF11", - "S_ARMF12", - "S_ARMF13", - "S_ARMF14", - "S_ARMF15", - "S_ARMF16", - "S_ARMF17", - "S_ARMF18", - "S_ARMF19", - "S_ARMF20", - "S_ARMF21", - "S_ARMF22", - "S_ARMF23", - "S_ARMF24", - "S_ARMF25", - "S_ARMF26", - "S_ARMF27", - "S_ARMF28", - "S_ARMF29", - "S_ARMF30", - "S_ARMF31", - "S_ARMF32", - - "S_ARMB1", - "S_ARMB2", - "S_ARMB3", - "S_ARMB4", - "S_ARMB5", - "S_ARMB6", - "S_ARMB7", - "S_ARMB8", - "S_ARMB9", - "S_ARMB10", - "S_ARMB11", - "S_ARMB12", - "S_ARMB13", - "S_ARMB14", - "S_ARMB15", - "S_ARMB16", - "S_ARMB17", - "S_ARMB18", - "S_ARMB19", - "S_ARMB20", - "S_ARMB21", - "S_ARMB22", - "S_ARMB23", - "S_ARMB24", - "S_ARMB25", - "S_ARMB26", - "S_ARMB27", - "S_ARMB28", - "S_ARMB29", - "S_ARMB30", - "S_ARMB31", - "S_ARMB32", - - "S_WIND1", - "S_WIND2", - "S_WIND3", - "S_WIND4", - "S_WIND5", - "S_WIND6", - "S_WIND7", - "S_WIND8", - - "S_MAGN1", - "S_MAGN2", - "S_MAGN3", - "S_MAGN4", - "S_MAGN5", - "S_MAGN6", - "S_MAGN7", - "S_MAGN8", - "S_MAGN9", - "S_MAGN10", - "S_MAGN11", - "S_MAGN12", - "S_MAGN13", - - "S_FORC1", - "S_FORC2", - "S_FORC3", - "S_FORC4", - "S_FORC5", - "S_FORC6", - "S_FORC7", - "S_FORC8", - "S_FORC9", - "S_FORC10", - - "S_FORC11", - "S_FORC12", - "S_FORC13", - "S_FORC14", - "S_FORC15", - "S_FORC16", - "S_FORC17", - "S_FORC18", - "S_FORC19", - "S_FORC20", - - "S_FORC21", - - "S_ELEM1", - "S_ELEM2", - "S_ELEM3", - "S_ELEM4", - "S_ELEM5", - "S_ELEM6", - "S_ELEM7", - "S_ELEM8", - "S_ELEM9", - "S_ELEM10", - "S_ELEM11", - "S_ELEM12", - - "S_ELEM13", - "S_ELEM14", - - "S_ELEMF1", - "S_ELEMF2", - "S_ELEMF3", - "S_ELEMF4", - "S_ELEMF5", - "S_ELEMF6", - "S_ELEMF7", - "S_ELEMF8", - "S_ELEMF9", - "S_ELEMF10", - - "S_PITY1", - "S_PITY2", - "S_PITY3", - "S_PITY4", - "S_PITY5", - "S_PITY6", - "S_PITY7", - "S_PITY8", - "S_PITY9", - "S_PITY10", - "S_PITY11", - "S_PITY12", - - "S_FIRS1", - "S_FIRS2", - "S_FIRS3", - "S_FIRS4", - "S_FIRS5", - "S_FIRS6", - "S_FIRS7", - "S_FIRS8", - "S_FIRS9", - - "S_FIRS10", - "S_FIRS11", - - "S_FIRSB1", - "S_FIRSB2", - "S_FIRSB3", - "S_FIRSB4", - "S_FIRSB5", - "S_FIRSB6", - "S_FIRSB7", - "S_FIRSB8", - "S_FIRSB9", - - "S_FIRSB10", - - "S_BUBS1", - "S_BUBS2", - "S_BUBS3", - "S_BUBS4", - "S_BUBS5", - "S_BUBS6", - "S_BUBS7", - "S_BUBS8", - "S_BUBS9", - - "S_BUBS10", - "S_BUBS11", - - "S_BUBSB1", - "S_BUBSB2", - "S_BUBSB3", - "S_BUBSB4", - - "S_BUBSB5", - "S_BUBSB6", - - "S_ZAPS1", - "S_ZAPS2", - "S_ZAPS3", - "S_ZAPS4", - "S_ZAPS5", - "S_ZAPS6", - "S_ZAPS7", - "S_ZAPS8", - "S_ZAPS9", - "S_ZAPS10", - "S_ZAPS11", - "S_ZAPS12", - "S_ZAPS13", // blank frame - "S_ZAPS14", - "S_ZAPS15", - "S_ZAPS16", - - "S_ZAPSB1", // blank frame - "S_ZAPSB2", - "S_ZAPSB3", - "S_ZAPSB4", - "S_ZAPSB5", - "S_ZAPSB6", - "S_ZAPSB7", - "S_ZAPSB8", - "S_ZAPSB9", - "S_ZAPSB10", - "S_ZAPSB11", // blank frame - - //Thunder spark - "S_THUNDERCOIN_SPARK", - - // Invincibility Sparkles - "S_IVSP", - // Super Sonic Spark "S_SSPK1", "S_SSPK2", @@ -2474,13 +1204,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SECRETFLICKY_02_STAND", "S_SECRETFLICKY_02_CENTER", - // Fan - "S_FAN", - "S_FAN2", - "S_FAN3", - "S_FAN4", - "S_FAN5", - // Steam Riser "S_STEAM1", "S_STEAM2", @@ -2491,10 +1214,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_STEAM7", "S_STEAM8", - // Bumpers - "S_BUMPER", - "S_BUMPERHIT", - // Balloons "S_BALLOON", "S_BALLOONPOP1", @@ -2583,17 +1302,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_GHORIZ3", "S_GHORIZ4", - // Booster - "S_BOOSTERSOUND", - "S_YELLOWBOOSTERROLLER", - "S_YELLOWBOOSTERSEG_LEFT", - "S_YELLOWBOOSTERSEG_RIGHT", - "S_YELLOWBOOSTERSEG_FACE", - "S_REDBOOSTERROLLER", - "S_REDBOOSTERSEG_LEFT", - "S_REDBOOSTERSEG_RIGHT", - "S_REDBOOSTERSEG_FACE", - // Rain "S_RAIN1", "S_RAINRETURN", @@ -2659,39 +1367,10 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SPINDUST_FIRE3", "S_SPINDUST_FIRE4", - "S_FOG1", - "S_FOG2", - "S_FOG3", - "S_FOG4", - "S_FOG5", - "S_FOG6", - "S_FOG7", - "S_FOG8", - "S_FOG9", - "S_FOG10", - "S_FOG11", - "S_FOG12", - "S_FOG13", - "S_FOG14", - "S_SEED", "S_PARTICLE", - // Score Logos - "S_SCRA", // 100 - "S_SCRB", // 200 - "S_SCRC", // 500 - "S_SCRD", // 1000 - "S_SCRE", // 10000 - "S_SCRF", // 400 (mario) - "S_SCRG", // 800 (mario) - "S_SCRH", // 2000 (mario) - "S_SCRI", // 4000 (mario) - "S_SCRJ", // 8000 (mario) - "S_SCRK", // 1UP (mario) - "S_SCRL", // 10 - // Drowning Timer Numbers "S_ZERO1", "S_ONE1", @@ -2707,395 +1386,18 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_FOUR2", "S_FIVE2", - "S_FLIGHTINDICATOR", - - "S_LOCKON1", - "S_LOCKON2", - "S_LOCKON3", - "S_LOCKON4", - "S_LOCKONINF1", - "S_LOCKONINF2", - "S_LOCKONINF3", - "S_LOCKONINF4", - - // Tag Sign - "S_TTAG", - - // Got Flag Sign - "S_GOTFLAG", - - // Finish flag - "S_FINISHFLAG", - "S_CORK", "S_LHRT", - // Red Ring - "S_RRNG1", - "S_RRNG2", - "S_RRNG3", - "S_RRNG4", - "S_RRNG5", - "S_RRNG6", - "S_RRNG7", - - // Weapon Ring Ammo - "S_BOUNCERINGAMMO", - "S_RAILRINGAMMO", - "S_INFINITYRINGAMMO", - "S_AUTOMATICRINGAMMO", - "S_EXPLOSIONRINGAMMO", - "S_SCATTERRINGAMMO", - "S_GRENADERINGAMMO", - - // Weapon pickup - "S_BOUNCEPICKUP", - "S_BOUNCEPICKUPFADE1", - "S_BOUNCEPICKUPFADE2", - "S_BOUNCEPICKUPFADE3", - "S_BOUNCEPICKUPFADE4", - "S_BOUNCEPICKUPFADE5", - "S_BOUNCEPICKUPFADE6", - "S_BOUNCEPICKUPFADE7", - "S_BOUNCEPICKUPFADE8", - - "S_RAILPICKUP", - "S_RAILPICKUPFADE1", - "S_RAILPICKUPFADE2", - "S_RAILPICKUPFADE3", - "S_RAILPICKUPFADE4", - "S_RAILPICKUPFADE5", - "S_RAILPICKUPFADE6", - "S_RAILPICKUPFADE7", - "S_RAILPICKUPFADE8", - - "S_AUTOPICKUP", - "S_AUTOPICKUPFADE1", - "S_AUTOPICKUPFADE2", - "S_AUTOPICKUPFADE3", - "S_AUTOPICKUPFADE4", - "S_AUTOPICKUPFADE5", - "S_AUTOPICKUPFADE6", - "S_AUTOPICKUPFADE7", - "S_AUTOPICKUPFADE8", - - "S_EXPLODEPICKUP", - "S_EXPLODEPICKUPFADE1", - "S_EXPLODEPICKUPFADE2", - "S_EXPLODEPICKUPFADE3", - "S_EXPLODEPICKUPFADE4", - "S_EXPLODEPICKUPFADE5", - "S_EXPLODEPICKUPFADE6", - "S_EXPLODEPICKUPFADE7", - "S_EXPLODEPICKUPFADE8", - - "S_SCATTERPICKUP", - "S_SCATTERPICKUPFADE1", - "S_SCATTERPICKUPFADE2", - "S_SCATTERPICKUPFADE3", - "S_SCATTERPICKUPFADE4", - "S_SCATTERPICKUPFADE5", - "S_SCATTERPICKUPFADE6", - "S_SCATTERPICKUPFADE7", - "S_SCATTERPICKUPFADE8", - - "S_GRENADEPICKUP", - "S_GRENADEPICKUPFADE1", - "S_GRENADEPICKUPFADE2", - "S_GRENADEPICKUPFADE3", - "S_GRENADEPICKUPFADE4", - "S_GRENADEPICKUPFADE5", - "S_GRENADEPICKUPFADE6", - "S_GRENADEPICKUPFADE7", - "S_GRENADEPICKUPFADE8", - - // Thrown Weapon Rings - "S_THROWNBOUNCE1", - "S_THROWNBOUNCE2", - "S_THROWNBOUNCE3", - "S_THROWNBOUNCE4", - "S_THROWNBOUNCE5", - "S_THROWNBOUNCE6", - "S_THROWNBOUNCE7", - "S_THROWNINFINITY1", - "S_THROWNINFINITY2", - "S_THROWNINFINITY3", - "S_THROWNINFINITY4", - "S_THROWNINFINITY5", - "S_THROWNINFINITY6", - "S_THROWNINFINITY7", - "S_THROWNAUTOMATIC1", - "S_THROWNAUTOMATIC2", - "S_THROWNAUTOMATIC3", - "S_THROWNAUTOMATIC4", - "S_THROWNAUTOMATIC5", - "S_THROWNAUTOMATIC6", - "S_THROWNAUTOMATIC7", - "S_THROWNEXPLOSION1", - "S_THROWNEXPLOSION2", - "S_THROWNEXPLOSION3", - "S_THROWNEXPLOSION4", - "S_THROWNEXPLOSION5", - "S_THROWNEXPLOSION6", - "S_THROWNEXPLOSION7", - "S_THROWNGRENADE1", - "S_THROWNGRENADE2", - "S_THROWNGRENADE3", - "S_THROWNGRENADE4", - "S_THROWNGRENADE5", - "S_THROWNGRENADE6", - "S_THROWNGRENADE7", - "S_THROWNGRENADE8", - "S_THROWNGRENADE9", - "S_THROWNGRENADE10", - "S_THROWNGRENADE11", - "S_THROWNGRENADE12", - "S_THROWNGRENADE13", - "S_THROWNGRENADE14", - "S_THROWNGRENADE15", - "S_THROWNGRENADE16", - "S_THROWNGRENADE17", - "S_THROWNGRENADE18", - "S_THROWNSCATTER", - "S_RINGEXPLODE", - "S_COIN1", - "S_COIN2", - "S_COIN3", - "S_COINSPARKLE1", - "S_COINSPARKLE2", - "S_COINSPARKLE3", - "S_COINSPARKLE4", - "S_GOOMBA1", - "S_GOOMBA1B", - "S_GOOMBA2", - "S_GOOMBA3", - "S_GOOMBA4", - "S_GOOMBA5", - "S_GOOMBA6", - "S_GOOMBA7", - "S_GOOMBA8", - "S_GOOMBA9", - "S_GOOMBA_DEAD", - "S_BLUEGOOMBA1", - "S_BLUEGOOMBA1B", - "S_BLUEGOOMBA2", - "S_BLUEGOOMBA3", - "S_BLUEGOOMBA4", - "S_BLUEGOOMBA5", - "S_BLUEGOOMBA6", - "S_BLUEGOOMBA7", - "S_BLUEGOOMBA8", - "S_BLUEGOOMBA9", - "S_BLUEGOOMBA_DEAD", - - // Mario-specific stuff - "S_FIREFLOWER1", - "S_FIREFLOWER2", - "S_FIREFLOWER3", - "S_FIREFLOWER4", - "S_FIREBALL", - "S_FIREBALLTRAIL1", - "S_FIREBALLTRAIL2", - "S_SHELL", - "S_PUMA_START1", - "S_PUMA_START2", - "S_PUMA_UP1", - "S_PUMA_UP2", - "S_PUMA_UP3", - "S_PUMA_DOWN1", - "S_PUMA_DOWN2", - "S_PUMA_DOWN3", - "S_PUMATRAIL1", - "S_PUMATRAIL2", - "S_PUMATRAIL3", - "S_PUMATRAIL4", - "S_HAMMER", - "S_KOOPA1", - "S_KOOPA2", - "S_KOOPAFLAME1", - "S_KOOPAFLAME2", - "S_KOOPAFLAME3", - "S_AXE1", - "S_AXE2", - "S_AXE3", - "S_MARIOBUSH1", - "S_MARIOBUSH2", - "S_TOAD", - - // Nights-specific stuff - "S_NIGHTSDRONE_MAN1", - "S_NIGHTSDRONE_MAN2", - "S_NIGHTSDRONE_SPARKLING1", - "S_NIGHTSDRONE_SPARKLING2", - "S_NIGHTSDRONE_SPARKLING3", - "S_NIGHTSDRONE_SPARKLING4", - "S_NIGHTSDRONE_SPARKLING5", - "S_NIGHTSDRONE_SPARKLING6", - "S_NIGHTSDRONE_SPARKLING7", - "S_NIGHTSDRONE_SPARKLING8", - "S_NIGHTSDRONE_SPARKLING9", - "S_NIGHTSDRONE_SPARKLING10", - "S_NIGHTSDRONE_SPARKLING11", - "S_NIGHTSDRONE_SPARKLING12", - "S_NIGHTSDRONE_SPARKLING13", - "S_NIGHTSDRONE_SPARKLING14", - "S_NIGHTSDRONE_SPARKLING15", - "S_NIGHTSDRONE_SPARKLING16", - "S_NIGHTSDRONE_GOAL1", - "S_NIGHTSDRONE_GOAL2", - "S_NIGHTSDRONE_GOAL3", - "S_NIGHTSDRONE_GOAL4", - - "S_NIGHTSPARKLE1", - "S_NIGHTSPARKLE2", - "S_NIGHTSPARKLE3", - "S_NIGHTSPARKLE4", - "S_NIGHTSPARKLESUPER1", - "S_NIGHTSPARKLESUPER2", - "S_NIGHTSPARKLESUPER3", - "S_NIGHTSPARKLESUPER4", - "S_NIGHTSLOOPHELPER", - - // NiGHTS bumper - "S_NIGHTSBUMPER1", - "S_NIGHTSBUMPER2", - "S_NIGHTSBUMPER3", - "S_NIGHTSBUMPER4", - "S_NIGHTSBUMPER5", - "S_NIGHTSBUMPER6", - "S_NIGHTSBUMPER7", - "S_NIGHTSBUMPER8", - "S_NIGHTSBUMPER9", - "S_NIGHTSBUMPER10", - "S_NIGHTSBUMPER11", - "S_NIGHTSBUMPER12", - "S_HOOP", "S_HOOP_XMASA", "S_HOOP_XMASB", - "S_NIGHTSCORE10", - "S_NIGHTSCORE20", - "S_NIGHTSCORE30", - "S_NIGHTSCORE40", - "S_NIGHTSCORE50", - "S_NIGHTSCORE60", - "S_NIGHTSCORE70", - "S_NIGHTSCORE80", - "S_NIGHTSCORE90", - "S_NIGHTSCORE100", - "S_NIGHTSCORE10_2", - "S_NIGHTSCORE20_2", - "S_NIGHTSCORE30_2", - "S_NIGHTSCORE40_2", - "S_NIGHTSCORE50_2", - "S_NIGHTSCORE60_2", - "S_NIGHTSCORE70_2", - "S_NIGHTSCORE80_2", - "S_NIGHTSCORE90_2", - "S_NIGHTSCORE100_2", - - // NiGHTS Paraloop Powerups - "S_NIGHTSSUPERLOOP", - "S_NIGHTSDRILLREFILL", - "S_NIGHTSHELPER", - "S_NIGHTSEXTRATIME", - "S_NIGHTSLINKFREEZE", "S_EGGCAPSULE", - // Orbiting Chaos Emeralds - "S_ORBITEM1", - "S_ORBITEM2", - "S_ORBITEM3", - "S_ORBITEM4", - "S_ORBITEM5", - "S_ORBITEM6", - "S_ORBITEM7", - "S_ORBITEM8", - "S_ORBIDYA1", - "S_ORBIDYA2", - "S_ORBIDYA3", - "S_ORBIDYA4", - "S_ORBIDYA5", - - // "Flicky" helper - "S_NIGHTOPIANHELPER1", - "S_NIGHTOPIANHELPER2", - "S_NIGHTOPIANHELPER3", - "S_NIGHTOPIANHELPER4", - "S_NIGHTOPIANHELPER5", - "S_NIGHTOPIANHELPER6", - "S_NIGHTOPIANHELPER7", - "S_NIGHTOPIANHELPER8", - "S_NIGHTOPIANHELPER9", - - // Nightopian - "S_PIAN0", - "S_PIAN1", - "S_PIAN2", - "S_PIAN3", - "S_PIAN4", - "S_PIAN5", - "S_PIAN6", - "S_PIANSING", - - // Shleep - "S_SHLEEP1", - "S_SHLEEP2", - "S_SHLEEP3", - "S_SHLEEP4", - "S_SHLEEPBOUNCE1", - "S_SHLEEPBOUNCE2", - "S_SHLEEPBOUNCE3", - // Secret badniks and hazards, shhhh - "S_PENGUINATOR_LOOK", - "S_PENGUINATOR_WADDLE1", - "S_PENGUINATOR_WADDLE2", - "S_PENGUINATOR_WADDLE3", - "S_PENGUINATOR_WADDLE4", - "S_PENGUINATOR_SLIDE1", - "S_PENGUINATOR_SLIDE2", - "S_PENGUINATOR_SLIDE3", - "S_PENGUINATOR_SLIDE4", - "S_PENGUINATOR_SLIDE5", - - "S_POPHAT_LOOK", - "S_POPHAT_SHOOT1", - "S_POPHAT_SHOOT2", - "S_POPHAT_SHOOT3", - "S_POPHAT_SHOOT4", - "S_POPSHOT", - "S_POPSHOT_TRAIL", - - "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_BUGGLEIDLE", - "S_BUGGLEFLY", - "S_SMASHSPIKE_FLOAT", "S_SMASHSPIKE_EASE1", "S_SMASHSPIKE_EASE2", @@ -3105,70 +1407,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SMASHSPIKE_RISE1", "S_SMASHSPIKE_RISE2", - "S_CACO_LOOK", - "S_CACO_WAKE1", - "S_CACO_WAKE2", - "S_CACO_WAKE3", - "S_CACO_WAKE4", - "S_CACO_ROAR", - "S_CACO_CHASE", - "S_CACO_CHASE_REPEAT", - "S_CACO_RANDOM", - "S_CACO_PREPARE_SOUND", - "S_CACO_PREPARE1", - "S_CACO_PREPARE2", - "S_CACO_PREPARE3", - "S_CACO_SHOOT_SOUND", - "S_CACO_SHOOT1", - "S_CACO_SHOOT2", - "S_CACO_CLOSE", - "S_CACO_DIE_FLAGS", - "S_CACO_DIE_GIB1", - "S_CACO_DIE_GIB2", - "S_CACO_DIE_SCREAM", - "S_CACO_DIE_SHATTER", - "S_CACO_DIE_FALL", - "S_CACOSHARD_RANDOMIZE", - "S_CACOSHARD1_1", - "S_CACOSHARD1_2", - "S_CACOSHARD2_1", - "S_CACOSHARD2_2", - "S_CACOFIRE1", - "S_CACOFIRE2", - "S_CACOFIRE3", - "S_CACOFIRE_EXPLODE1", - "S_CACOFIRE_EXPLODE2", - "S_CACOFIRE_EXPLODE3", - "S_CACOFIRE_EXPLODE4", - - "S_SPINBOBERT_MOVE_FLIPUP", - "S_SPINBOBERT_MOVE_UP", - "S_SPINBOBERT_MOVE_FLIPDOWN", - "S_SPINBOBERT_MOVE_DOWN", - "S_SPINBOBERT_FIRE_MOVE", - "S_SPINBOBERT_FIRE_GHOST", - "S_SPINBOBERT_FIRE_TRAIL1", - "S_SPINBOBERT_FIRE_TRAIL2", - "S_SPINBOBERT_FIRE_TRAIL3", - - "S_HANGSTER_LOOK", - "S_HANGSTER_SWOOP1", - "S_HANGSTER_SWOOP2", - "S_HANGSTER_ARC1", - "S_HANGSTER_ARC2", - "S_HANGSTER_ARC3", - "S_HANGSTER_FLY1", - "S_HANGSTER_FLY2", - "S_HANGSTER_FLY3", - "S_HANGSTER_FLY4", - "S_HANGSTER_FLYREPEAT", - "S_HANGSTER_ARCUP1", - "S_HANGSTER_ARCUP2", - "S_HANGSTER_ARCUP3", - "S_HANGSTER_RETURN1", - "S_HANGSTER_RETURN2", - "S_HANGSTER_RETURN3", - "S_CRUMBLE1", "S_CRUMBLE2", @@ -3223,9 +1461,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_GFZDEBRIS", "S_BRICKDEBRIS", "S_WOODDEBRIS", - "S_REDBRICKDEBRIS", - "S_BLUEBRICKDEBRIS", - "S_YELLOWBRICKDEBRIS", //{ Random Item Box "S_RANDOMITEM1", @@ -3269,13 +1504,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SPHEREBOX11", "S_SPHEREBOX12", - // Random Item Pop - "S_RANDOMITEMPOP1", - "S_RANDOMITEMPOP2", - "S_RANDOMITEMPOP3", - "S_RANDOMITEMPOP4", - //} - "S_ITEM_DEBRIS", "S_ITEM_DEBRIS_CLOUD_SPAWNER1", "S_ITEM_DEBRIS_CLOUD_SPAWNER2", @@ -3931,30 +2159,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_FLAYM2", "S_FLAYM3", "S_FLAYM4", - "S_DEVIL", - "S_ANGEL", - "S_PALMTREE", - "S_FLAG", - "S_HEDGEHOG", // (Rimshot) - "S_BUSH1", - "S_TWEE", - "S_HYDRANT", - - // New Misc Decorations - "S_BIGPUMA1", - "S_BIGPUMA2", - "S_BIGPUMA3", - "S_BIGPUMA4", - "S_BIGPUMA5", - "S_BIGPUMA6", - "S_APPLE1", - "S_APPLE2", - "S_APPLE3", - "S_APPLE4", - "S_APPLE5", - "S_APPLE6", - "S_APPLE7", - "S_APPLE8", // Chaotix Big Ring "S_BIGRING01", @@ -3975,48 +2179,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SNES_DONUTBUSH2", "S_SNES_DONUTBUSH3", - // GBA Objects - "S_GBA_BOO1", - "S_GBA_BOO2", - "S_GBA_BOO3", - "S_GBA_BOO4", - - // Sapphire Coast Mobs - "S_BUZZBOMBER_LOOK1", - "S_BUZZBOMBER_LOOK2", - "S_BUZZBOMBER_FLY1", - "S_BUZZBOMBER_FLY2", - "S_BUZZBOMBER_FLY3", - "S_BUZZBOMBER_FLY4", - - "S_CHOMPER_SPAWN", - "S_CHOMPER_HOP1", - "S_CHOMPER_HOP2", - "S_CHOMPER_TURNAROUND", - - "S_PALMTREE2", - "S_PURPLEFLOWER1", - "S_PURPLEFLOWER2", - "S_YELLOWFLOWER1", - "S_YELLOWFLOWER2", - "S_PLANT2", - "S_PLANT3", - "S_PLANT4", - - // Crystal Abyss Mobs - "S_SKULL", - "S_PHANTREE", - "S_FLYINGGARG1", - "S_FLYINGGARG2", - "S_FLYINGGARG3", - "S_FLYINGGARG4", - "S_FLYINGGARG5", - "S_FLYINGGARG6", - "S_FLYINGGARG7", - "S_FLYINGGARG8", - "S_LAMPPOST", - "S_MOSSYTREE", - // Ark Arrows "S_ARKARROW_0", "S_ARKARROW_1", @@ -4283,9 +2445,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SNEAKERPANEL_SMALL", "S_SNEAKERPANEL_TINY", - // Various plants - "S_SONICBUSH", - // Marble Zone "S_MARBLEFLAMEPARTICLE", "S_MARBLETORCH", @@ -4300,67 +2459,8 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_RUSTYLAMP_ORANGE", "S_RUSTYCHAIN", - // Smokin' & Vapin' (Don't try this at home, kids!) - "S_PETSMOKE0", - "S_PETSMOKE1", - "S_PETSMOKE2", - "S_PETSMOKE3", - "S_PETSMOKE4", - "S_PETSMOKE5", - "S_VVVAPING0", - "S_VVVAPING1", - "S_VVVAPING2", - "S_VVVAPING3", - "S_VVVAPING4", - "S_VVVAPING5", - "S_VVVAPE", - - // Hill Top Zone - "S_HTZTREE", - "S_HTZBUSH", - // Ports of gardens - "S_SGVINE1", - "S_SGVINE2", - "S_SGVINE3", "S_PGTREE", - "S_PGFLOWER1", - "S_PGFLOWER2", - "S_PGFLOWER3", - "S_PGBUSH", - "S_DHPILLAR", - - // Midnight Channel stuff: - "S_SPOTLIGHT", // Spotlight decoration - "S_RANDOMSHADOW", // Random Shadow. They're static and don't do nothing. - "S_GARU1", - "S_GARU2", - "S_GARU3", - "S_TGARU", - "S_TGARU1", - "S_TGARU2", - "S_TGARU3", // Wind attack used by Roaming Shadows on Players. - "S_ROAMINGSHADOW", // Roaming Shadow (the one that uses above's wind attack or smth) - "S_MAYONAKAARROW", // Arrow sign - - // Mementos stuff: - "S_REAPER_INVIS", // Reaper waiting for spawning - "S_REAPER", // Reaper main frame where its thinker is handled - "S_MEMENTOSTP", // Mementos teleporter state. (Used for spawning particles) - - // JackInTheBox - "S_JITB1", - "S_JITB2", - "S_JITB3", - "S_JITB4", - "S_JITB5", - "S_JITB6", - - // Color Drive - "S_CDMOONSP", - "S_CDBUSHSP", - "S_CDTREEASP", - "S_CDTREEBSP", // Daytona Speedway "S_PINETREE", @@ -4437,87 +2537,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SMK_ICEBLOCK_DEBRIS", "S_SMK_ICEBLOCK_DEBRIS2", - // Ezo's maps - "S_BLUEFIRE1", - "S_BLUEFIRE2", - "S_BLUEFIRE3", - "S_BLUEFIRE4", - "S_GREENFIRE1", - "S_GREENFIRE2", - "S_GREENFIRE3", - "S_GREENFIRE4", - "S_REGALCHEST", - "S_CHIMERASTATUE", - "S_DRAGONSTATUE", - "S_LIZARDMANSTATUE", - "S_PEGASUSSTATUE", - "S_ZELDAFIRE1", - "S_ZELDAFIRE2", - "S_ZELDAFIRE3", - "S_ZELDAFIRE4", - "S_GANBARETHING", - "S_GANBAREDUCK", - "S_GANBARETREE", - "S_MONOIDLE", - "S_MONOCHASE1", - "S_MONOCHASE2", - "S_MONOCHASE3", - "S_MONOCHASE4", - "S_MONOPAIN", - "S_REDZELDAFIRE1", - "S_REDZELDAFIRE2", - "S_REDZELDAFIRE3", - "S_REDZELDAFIRE4", - "S_BOWLINGPIN", - "S_BOWLINGHIT1", - "S_BOWLINGHIT2", - "S_BOWLINGHIT3", - "S_BOWLINGHIT4", - "S_ARIDTOAD", - "S_TOADHIT1", - "S_TOADHIT2", - "S_TOADHIT3", - "S_TOADHIT4", - "S_EBARRELIDLE", - "S_EBARREL1", - "S_EBARREL2", - "S_EBARREL3", - "S_EBARREL4", - "S_EBARREL5", - "S_EBARREL6", - "S_EBARREL7", - "S_EBARREL8", - "S_EBARREL9", - "S_EBARREL10", - "S_EBARREL11", - "S_EBARREL12", - "S_EBARREL13", - "S_EBARREL14", - "S_EBARREL15", - "S_EBARREL16", - "S_EBARREL17", - "S_EBARREL18", - "S_EBARREL19", - "S_MERRYHORSE", - "S_BLUEFRUIT", - "S_ORANGEFRUIT", - "S_REDFRUIT", - "S_PINKFRUIT", - "S_ADVENTURESPIKEA1", - "S_ADVENTURESPIKEA2", - "S_ADVENTURESPIKEB1", - "S_ADVENTURESPIKEB2", - "S_ADVENTURESPIKEC1", - "S_ADVENTURESPIKEC2", - "S_BOOSTPROMPT1", - "S_BOOSTPROMPT2", - "S_BOOSTOFF1", - "S_BOOSTOFF2", - "S_BOOSTON1", - "S_BOOSTON2", - "S_LIZARDMAN", - "S_LIONMAN", - "S_SUNBEAMPALM_STEM", "S_SUNBEAMPALM_LEAF", @@ -4947,107 +2966,12 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_KART_LEFTOVER", "MT_KART_TIRE", - // Enemies - "MT_BLUECRAWLA", // Crawla (Blue) - "MT_REDCRAWLA", // Crawla (Red) - "MT_GFZFISH", // SDURF - "MT_GOLDBUZZ", // Buzz (Gold) - "MT_REDBUZZ", // Buzz (Red) - "MT_JETTBOMBER", // Jetty-Syn Bomber - "MT_JETTGUNNER", // Jetty-Syn Gunner - "MT_CRAWLACOMMANDER", // Crawla Commander - "MT_DETON", // Deton - "MT_SKIM", // Skim mine dropper - "MT_TURRET", // Industrial Turret - "MT_POPUPTURRET", // Pop-Up Turret - "MT_SPINCUSHION", // Spincushion - "MT_CRUSHSTACEAN", // Crushstacean - "MT_CRUSHCLAW", // Big meaty claw - "MT_CRUSHCHAIN", // Chain - "MT_BANPYURA", // Banpyura - "MT_BANPSPRING", // Banpyura spring - "MT_JETJAW", // Jet Jaw - "MT_SNAILER", // Snailer - "MT_VULTURE", // BASH - "MT_POINTY", // Pointy - "MT_POINTYBALL", // Pointy Ball - "MT_ROBOHOOD", // Robo-Hood - "MT_FACESTABBER", // Castlebot Facestabber - "MT_FACESTABBERSPEAR", // Castlebot Facestabber spear aura - "MT_EGGGUARD", // Egg Guard - "MT_EGGSHIELD", // Egg Guard's shield - "MT_GSNAPPER", // Green Snapper - "MT_SNAPPER_LEG", // Green Snapper leg - "MT_SNAPPER_HEAD", // Green Snapper head - "MT_MINUS", // Minus - "MT_MINUSDIRT", // Minus dirt - "MT_SPRINGSHELL", // Spring Shell - "MT_YELLOWSHELL", // Spring Shell (yellow) - "MT_UNIDUS", // Unidus - "MT_UNIBALL", // Unidus Ball - "MT_CANARIVORE", // Canarivore - "MT_CANARIVORE_GAS", // Canarivore gas - "MT_PYREFLY", // Pyre Fly - "MT_PYREFLY_FIRE", // Pyre Fly fire - "MT_PTERABYTESPAWNER", // Pterabyte spawner - "MT_PTERABYTEWAYPOINT", // Pterabyte waypoint - "MT_PTERABYTE", // Pterabyte - "MT_DRAGONBOMBER", // Dragonbomber - "MT_DRAGONWING", // Dragonbomber wing - "MT_DRAGONTAIL", // Dragonbomber tail segment - "MT_DRAGONMINE", // Dragonbomber mine - // Generic Boss Items "MT_BOSSEXPLODE", "MT_SONIC3KBOSSEXPLODE", "MT_BOSSFLYPOINT", "MT_EGGTRAP", "MT_BOSS3WAYPOINT", - "MT_BOSS9GATHERPOINT", - "MT_BOSSJUNK", - - // Boss 1 - "MT_EGGMOBILE", - "MT_JETFUME1", - "MT_EGGMOBILE_BALL", - "MT_EGGMOBILE_TARGET", - "MT_EGGMOBILE_FIRE", - - // Boss 2 - "MT_EGGMOBILE2", - "MT_EGGMOBILE2_POGO", - "MT_GOOP", - "MT_GOOPTRAIL", - - // Boss 3 - "MT_EGGMOBILE3", - "MT_FAKEMOBILE", - "MT_SHOCKWAVE", - - // Boss 4 - "MT_EGGMOBILE4", - "MT_EGGMOBILE4_MACE", - "MT_JETFLAME", - "MT_EGGROBO1", - "MT_EGGROBO1JET", - - // Boss 5 - "MT_FANG", - "MT_BROKENROBOT", - "MT_VWREF", - "MT_VWREB", - "MT_PROJECTORLIGHT", - "MT_FBOMB", - "MT_TNTDUST", // also used by barrel - "MT_FSGNA", - "MT_FSGNB", - "MT_FANGWAYPOINT", - - // Metal Sonic (Boss 9) - "MT_METALSONIC_RACE", - "MT_METALSONIC_BATTLE", - "MT_MSSHIELD_FRONT", - "MT_MSGATHER", // Collectible Items "MT_RING", @@ -5055,12 +2979,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_DEBTSPIKE", // Ring debt funny spike "MT_BLUESPHERE", // Blue sphere for special stages "MT_FLINGBLUESPHERE", // Lost blue sphere - "MT_BOMBSPHERE", - "MT_REDTEAMRING", //Rings collectable by red team. - "MT_BLUETEAMRING", //Rings collectable by blue team. - "MT_TOKEN", // Special Stage token for special stage - "MT_REDFLAG", // Red CTF Flag - "MT_BLUEFLAG", // Blue CTF Flag "MT_EMBLEM", "MT_SPRAYCAN", "MT_ANCIENTSHRINE", @@ -5070,9 +2988,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_PRISONEGGDROP", // Springs and others - "MT_FAN", "MT_STEAM", - "MT_BUMPER", "MT_BALLOON", "MT_YELLOWSPRING", @@ -5089,11 +3005,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_BLUEHORIZ", // Blue Horizontal Spring "MT_GREYHORIZ", // Grey Horizontal Spring - "MT_BOOSTERSEG", - "MT_BOOSTERROLLER", - "MT_YELLOWBOOSTER", - "MT_REDBOOSTER", - // Interactive Objects "MT_BUBBLES", // Bubble source "MT_SIGN", // Level end sign @@ -5104,91 +3015,10 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_WALLSPIKE", "MT_WALLSPIKEBASE", "MT_CHEATCHECK", - "MT_BIGMINE", "MT_BLASTEXECUTOR", "MT_CANNONLAUNCHER", - - // Monitor miscellany - "MT_BOXSPARKLE", - - // Monitor boxes -- regular - "MT_RING_BOX", - "MT_PITY_BOX", - "MT_ATTRACT_BOX", - "MT_FORCE_BOX", - "MT_ARMAGEDDON_BOX", - "MT_WHIRLWIND_BOX", - "MT_ELEMENTAL_BOX", - "MT_SNEAKERS_BOX", - "MT_INVULN_BOX", - "MT_1UP_BOX", - "MT_EGGMAN_BOX", - "MT_MIXUP_BOX", - "MT_MYSTERY_BOX", - "MT_GRAVITY_BOX", - "MT_RECYCLER_BOX", - "MT_SCORE1K_BOX", - "MT_SCORE10K_BOX", - "MT_FLAMEAURA_BOX", - "MT_BUBBLEWRAP_BOX", - "MT_THUNDERCOIN_BOX", - - // Monitor boxes -- repeating (big) boxes - "MT_PITY_GOLDBOX", - "MT_ATTRACT_GOLDBOX", - "MT_FORCE_GOLDBOX", - "MT_ARMAGEDDON_GOLDBOX", - "MT_WHIRLWIND_GOLDBOX", - "MT_ELEMENTAL_GOLDBOX", - "MT_SNEAKERS_GOLDBOX", - "MT_INVULN_GOLDBOX", - "MT_EGGMAN_GOLDBOX", - "MT_GRAVITY_GOLDBOX", - "MT_FLAMEAURA_GOLDBOX", - "MT_BUBBLEWRAP_GOLDBOX", - "MT_THUNDERCOIN_GOLDBOX", - - // Monitor boxes -- special - "MT_RING_REDBOX", - "MT_RING_BLUEBOX", - - // Monitor icons - "MT_RING_ICON", - "MT_PITY_ICON", - "MT_ATTRACT_ICON", - "MT_FORCE_ICON", - "MT_ARMAGEDDON_ICON", - "MT_WHIRLWIND_ICON", - "MT_ELEMENTAL_ICON", - "MT_SNEAKERS_ICON", - "MT_INVULN_ICON", - "MT_1UP_ICON", - "MT_EGGMAN_ICON", - "MT_MIXUP_ICON", - "MT_GRAVITY_ICON", - "MT_RECYCLER_ICON", - "MT_SCORE1K_ICON", - "MT_SCORE10K_ICON", - "MT_FLAMEAURA_ICON", - "MT_BUBBLEWRAP_ICON", - "MT_THUNDERCOIN_ICON", - - // Projectiles - "MT_ROCKET", - "MT_LASER", - "MT_TORPEDO", - "MT_TORPEDO2", // silent - "MT_ENERGYBALL", - "MT_MINE", // Skim/Jetty-Syn mine - "MT_JETTBULLET", // Jetty-Syn Bullet - "MT_TURRETLASER", "MT_CANNONBALL", // Cannonball "MT_CANNONBALLDECOR", // Decorative/still cannonball - "MT_ARROW", // Arrow - "MT_DEMONFIRE", // Glaregoyle fire - - // The letter - "MT_LETTER", // Greenflower Scenery "MT_GFZFLOWER1", @@ -5246,7 +3076,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_EGGSTATUE", // Eggman Statue "MT_MACEPOINT", // Mace rotation point "MT_CHAINMACEPOINT", // Combination of chains and maces point - "MT_SPRINGBALLPOINT", // Spring ball point "MT_CHAINPOINT", // Mace chain "MT_HIDDEN_SLING", // Spin mace chain (activatable) "MT_FIREBARPOINT", // Firebar @@ -5257,8 +3086,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_BIGMACE", // Big Mace "MT_SMALLGRABCHAIN", // Small Grab Chain "MT_BIGGRABCHAIN", // Big Grab Chain - "MT_YELLOWSPRINGBALL", // Yellow spring on a ball - "MT_REDSPRINGBALL", // Red spring on a ball "MT_SMALLFIREBAR", // Small Firebar "MT_BIGFIREBAR", // Big Firebar "MT_CEZFLOWER", // Flower @@ -5278,8 +3105,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_WAVINGFLAGSEG1", // Waving flag segment (red) "MT_WAVINGFLAGSEG2", // Waving flag segment (blue) "MT_CRAWLASTATUE", // Crawla statue - "MT_FACESTABBERSTATUE", // Facestabber statue - "MT_SUSPICIOUSFACESTABBERSTATUE", // :eggthinking: "MT_BRAMBLES", // Brambles // Arid Canyon Scenery @@ -5303,24 +3128,11 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_ARIDSIGN_SHARPTURN", // Sharp Turn Sign "MT_OILLAMP", "MT_TNTBARREL", + "MT_TNTDUST", "MT_PROXIMITYTNT", "MT_DUSTDEVIL", "MT_DUSTLAYER", "MT_ARIDDUST", - "MT_MINECART", - "MT_MINECARTSEG", - "MT_MINECARTSPAWNER", - "MT_MINECARTEND", - "MT_MINECARTENDSOLID", - "MT_MINECARTSIDEMARK", - "MT_MINECARTSPARK", - "MT_SALOONDOOR", - "MT_SALOONDOORCENTER", - "MT_TRAINCAMEOSPAWNER", - "MT_TRAINSEG", - "MT_TRAINDUSTSPAWNER", - "MT_TRAINSTEAMSPAWNER", - "MT_MINECARTSWITCHPOINT", // Red Volcano Scenery "MT_FLAMEJET", @@ -5336,9 +3148,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_LAVAFALL_LAVA", "MT_LAVAFALLROCK", - "MT_ROLLOUTSPAWN", - "MT_ROLLOUTROCK", - "MT_BIGFERNLEAF", "MT_BIGFERN", "MT_JUNGLEPALM", @@ -5350,15 +3159,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t // Egg Rock Scenery - // Azure Temple Scenery - "MT_GLAREGOYLE", - "MT_GLAREGOYLEUP", - "MT_GLAREGOYLEDOWN", - "MT_GLAREGOYLELONG", - "MT_TARGET", // AKA Red Crystal - "MT_GREENFLAME", - "MT_BLUEGARGOYLE", - // Stalagmites "MT_STALAGMITE0", "MT_STALAGMITE1", @@ -5387,8 +3187,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t // FHZ "MT_FHZICE1", "MT_FHZICE2", - "MT_ROSY", - "MT_CDLHRT", // Halloween Scenery // Pumpkins @@ -5460,18 +3258,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_DBALL", "MT_EGGSTATUE2", - // Powerup Indicators - "MT_ELEMENTAL_ORB", // Elemental shield mobj - "MT_ATTRACT_ORB", // Attract shield mobj - "MT_FORCE_ORB", // Force shield mobj - "MT_ARMAGEDDON_ORB", // Armageddon shield mobj - "MT_WHIRLWIND_ORB", // Whirlwind shield mobj - "MT_PITY_ORB", // Pity shield mobj - "MT_FLAMEAURA_ORB", // Flame shield mobj - "MT_BUBBLEWRAP_ORB", // Bubble shield mobj - "MT_THUNDERCOIN_ORB", // Thunder shield mobj - "MT_THUNDERCOIN_SPARK", // Thunder spark - "MT_IVSP", // Invincibility sparkles "MT_SUPERSPARK", // Super Sonic Spark // Flickies @@ -5525,19 +3311,11 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_EXTRALARGEBUBBLE", // extra large bubble "MT_WATERZAP", "MT_SPINDUST", // Spindash dust - "MT_TFOG", "MT_PARTICLE", "MT_PARTICLEGEN", // For fans, etc. // Game Indicators - "MT_SCORE", // score logo "MT_DROWNNUMBERS", // Drowning Timer - "MT_GOTEMERALD", // Chaos Emerald (intangible) - "MT_LOCKON", // Target - "MT_LOCKONINF", // In-level Target - "MT_TAG", // Tag Sign - "MT_GOTFLAG", // Got Flag sign - "MT_FINISHFLAG", // Finish flag // Ambient Sounds "MT_AMBIENT", @@ -5545,98 +3323,16 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_CORK", "MT_LHRT", - // Ring Weapons - "MT_REDRING", - "MT_BOUNCERING", - "MT_RAILRING", - "MT_INFINITYRING", - "MT_AUTOMATICRING", - "MT_EXPLOSIONRING", - "MT_SCATTERRING", - "MT_GRENADERING", - - "MT_BOUNCEPICKUP", - "MT_RAILPICKUP", - "MT_AUTOPICKUP", - "MT_EXPLODEPICKUP", - "MT_SCATTERPICKUP", - "MT_GRENADEPICKUP", - - "MT_THROWNBOUNCE", - "MT_THROWNINFINITY", - "MT_THROWNAUTOMATIC", - "MT_THROWNSCATTER", - "MT_THROWNEXPLOSION", - "MT_THROWNGRENADE", - - // Mario-specific stuff - "MT_COIN", - "MT_FLINGCOIN", - "MT_GOOMBA", - "MT_BLUEGOOMBA", - "MT_FIREFLOWER", - "MT_FIREBALL", - "MT_FIREBALLTRAIL", - "MT_SHELL", - "MT_PUMA", - "MT_PUMATRAIL", - "MT_HAMMER", - "MT_KOOPA", - "MT_KOOPAFLAME", - "MT_AXE", - "MT_MARIOBUSH1", - "MT_MARIOBUSH2", - "MT_TOAD", - // NiGHTS Stuff "MT_AXIS", "MT_AXISTRANSFER", "MT_AXISTRANSFERLINE", - "MT_NIGHTSDRONE", - "MT_NIGHTSDRONE_MAN", - "MT_NIGHTSDRONE_SPARKLING", - "MT_NIGHTSDRONE_GOAL", - "MT_NIGHTSPARKLE", - "MT_NIGHTSLOOPHELPER", - "MT_NIGHTSBUMPER", // NiGHTS Bumper "MT_HOOP", "MT_HOOPCOLLIDE", // Collision detection for NiGHTS hoops "MT_HOOPCENTER", // Center of a hoop - "MT_NIGHTSCORE", - "MT_NIGHTSCHIP", // NiGHTS Chip - "MT_FLINGNIGHTSCHIP", // Lost NiGHTS Chip - "MT_NIGHTSSTAR", // NiGHTS Star - "MT_FLINGNIGHTSSTAR", // Lost NiGHTS Star - "MT_NIGHTSSUPERLOOP", - "MT_NIGHTSDRILLREFILL", - "MT_NIGHTSHELPER", - "MT_NIGHTSEXTRATIME", - "MT_NIGHTSLINKFREEZE", "MT_EGGCAPSULE", - "MT_IDEYAANCHOR", - "MT_NIGHTOPIANHELPER", // the actual helper object that orbits you - "MT_PIAN", // decorative singing friend - "MT_SHLEEP", // almost-decorative sleeping enemy - - // Secret badniks and hazards, shhhh - "MT_PENGUINATOR", - "MT_POPHAT", - "MT_POPSHOT", - "MT_POPSHOT_TRAIL", - - "MT_HIVEELEMENTAL", - "MT_BUMBLEBORE", - - "MT_BUGGLE", "MT_SMASHINGSPIKEBALL", - "MT_CACOLANTERN", - "MT_CACOSHARD", - "MT_CACOFIRE", - "MT_SPINBOBERT", - "MT_SPINBOBERT_FIRE1", - "MT_SPINBOBERT_FIRE2", - "MT_HANGSTER", // Utility Objects "MT_TELEPORTMAN", @@ -5683,14 +3379,10 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_GFZDEBRIS", "MT_BRICKDEBRIS", "MT_WOODDEBRIS", - "MT_REDBRICKDEBRIS", - "MT_BLUEBRICKDEBRIS", - "MT_YELLOWBRICKDEBRIS", // SRB2kart "MT_RANDOMITEM", "MT_SPHEREBOX", - "MT_RANDOMITEMPOP", "MT_FLOATINGITEM", "MT_ITEMCAPSULE", "MT_ITEMCAPSULE_PART", @@ -5698,7 +3390,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_MONITOR_PART", "MT_MONITOR_SHARD", "MT_MAGICIANBOX", - "MT_WAVEDASH", "MT_INSTAWHIP", @@ -5837,17 +3528,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_RANDOMAUDIENCE", "MT_FLAYM", - "MT_DEVIL", - "MT_ANGEL", - "MT_PALMTREE", - "MT_FLAG", - "MT_HEDGEHOG", - "MT_BUSH1", - "MT_TWEE", - "MT_HYDRANT", - - "MT_BIGPUMA", - "MT_APPLE", "MT_BIGRING", @@ -5855,25 +3535,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_SNES_DONUTBUSH2", "MT_SNES_DONUTBUSH3", - "MT_GBA_BOO", - - "MT_BUZZBOMBER", - "MT_CHOMPER", - "MT_PALMTREE2", - "MT_PURPLEFLOWER1", - "MT_PURPLEFLOWER2", - "MT_YELLOWFLOWER1", - "MT_YELLOWFLOWER2", - "MT_PLANT2", - "MT_PLANT3", - "MT_PLANT4", - - "MT_SKULL", - "MT_PHANTREE", - "MT_FLYINGGARG", - "MT_LAMPPOST", - "MT_MOSSYTREE", - "MT_ARKARROW", // Ark Arrows "MT_BUMP", @@ -5908,9 +3569,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_SNEAKERPANEL", "MT_SNEAKERPANELSPAWNER", - // Various plants - "MT_SONICBUSH", - // Marble Zone "MT_MARBLEFLAMEPARTICLE", "MT_MARBLETORCH", @@ -5924,45 +3582,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_RUSTYLAMP_ORANGE", "MT_RUSTYCHAIN", - // Smokin' & Vapin' (Don't try this at home, kids!) - "MT_PETSMOKER", - "MT_PETSMOKE", - "MT_VVVAPE", - - // Hill Top Zone - "MT_HTZTREE", - "MT_HTZBUSH", - - // Ports of gardens - "MT_SGVINE1", - "MT_SGVINE2", - "MT_SGVINE3", "MT_PGTREE", - "MT_PGFLOWER1", - "MT_PGFLOWER2", - "MT_PGFLOWER3", - "MT_PGBUSH", - "MT_DHPILLAR", - - // Midnight Channel stuff: - "MT_SPOTLIGHT", // Spotlight Object - "MT_RANDOMSHADOW", // Random static Shadows. - "MT_ROAMINGSHADOW", // Roaming Shadows. - "MT_MAYONAKAARROW", // Arrow static signs for Mayonaka - - // Mementos stuff - "MT_REAPERWAYPOINT", - "MT_REAPER", - "MT_MEMENTOSTP", - "MT_MEMENTOSPARTICLE", - - "MT_JACKINTHEBOX", - - // Color Drive: - "MT_CDMOON", - "MT_CDBUSH", - "MT_CDTREEA", - "MT_CDTREEB", // Daytona Speedway "MT_DAYTONAPINETREE", @@ -6015,39 +3635,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_SMK_ICEBLOCK_SIDE", "MT_SMK_ICEBLOCK_DEBRIS", - // Ezo's maps - "MT_BLUEFIRE", - "MT_GREENFIRE", - "MT_REGALCHEST", - "MT_CHIMERASTATUE", - "MT_DRAGONSTATUE", - "MT_LIZARDMANSTATUE", - "MT_PEGASUSSTATUE", - "MT_ZELDAFIRE", - "MT_GANBARETHING", - "MT_GANBAREDUCK", - "MT_GANBARETREE", - "MT_MONOKUMA", - "MT_REDZELDAFIRE", - "MT_BOWLINGPIN", - "MT_MERRYAMBIENCE", - "MT_TWINKLECARTAMBIENCE", - "MT_EXPLODINGBARREL", - "MT_MERRYHORSE", - "MT_BLUEFRUIT", - "MT_ORANGEFRUIT", - "MT_REDFRUIT", - "MT_PINKFRUIT", - "MT_ADVENTURESPIKEA", - "MT_ADVENTURESPIKEB", - "MT_ADVENTURESPIKEC", - "MT_BOOSTPROMPT", - "MT_BOOSTOFF", - "MT_BOOSTON", - "MT_ARIDTOAD", - "MT_LIZARDMAN", - "MT_LIONMAN", - "MT_SUNBEAMPALM_STEM", "MT_SUNBEAMPALM_LEAF", diff --git a/src/doomstat.h b/src/doomstat.h index 5247ea082..60cf9756f 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -193,7 +193,6 @@ extern UINT16 musicwads; extern boolean savemoddata; // This mod saves time/emblem data. extern boolean usedCheats; extern boolean imcontinuing; // Temporary flag while continuing -extern boolean metalrecording; #define ATTACKING_NONE 0 #define ATTACKING_TIME 1 diff --git a/src/g_demo.c b/src/g_demo.c index 187fea6dc..0d3ddf5e4 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -68,12 +68,6 @@ boolean demosynced = true; // console warning message struct demovars_s demo; -boolean metalrecording; // recording as metal sonic -mobj_t *metalplayback; -static UINT8 *metalbuffer = NULL; -static UINT8 *metal_p; -static UINT16 metalversion; - // extra data stuff (events registered this frame while recording) static struct { UINT8 flags; // EZT flags @@ -152,9 +146,6 @@ UINT8 demo_extradata[MAXPLAYERS]; UINT8 demo_writerng; // 0=no, 1=yes, 2=yes but on a timeout static ticcmd_t oldcmd[MAXPLAYERS]; -#define METALDEATH 0x44 -#define METALSNICE 0x69 - #define DW_END 0xFF // End of extradata block #define DW_RNG 0xFE // Check RNG seed! @@ -163,7 +154,7 @@ static ticcmd_t oldcmd[MAXPLAYERS]; // Below consts are only used for demo extrainfo sections #define DW_STANDING 0x00 -// For Metal Sonic and time attack ghosts +// For time attack ghosts #define GZT_XYZ 0x01 #define GZT_MOMXY 0x02 #define GZT_MOMZ 0x04 @@ -190,22 +181,7 @@ static ticcmd_t oldcmd[MAXPLAYERS]; #define FZT_SCALE 0x10 // different scale to object // spare FZT slots 0x20 to 0x80 -static mobj_t oldmetal, oldghost[MAXPLAYERS]; - -void G_SaveMetal(UINT8 **buffer) -{ - I_Assert(buffer != NULL && *buffer != NULL); - - WRITEUINT32(*buffer, metal_p - metalbuffer); -} - -void G_LoadMetal(UINT8 **buffer) -{ - I_Assert(buffer != NULL && *buffer != NULL); - - G_DoPlayMetal(); - metal_p = metalbuffer + READUINT32(*buffer); -} +static mobj_t oldghost[MAXPLAYERS]; void G_ReadDemoExtraData(void) { @@ -690,7 +666,7 @@ void G_WriteDemoTiccmd(ticcmd_t *cmd, INT32 playernum) void G_GhostAddFlip(INT32 playernum) { - if (!metalrecording && (!demo.recording || !(demoflags & DF_GHOST))) + if ((!demo.recording || !(demoflags & DF_GHOST))) return; ghostext[playernum].flags |= EZT_FLIP; } @@ -710,7 +686,7 @@ void G_GhostAddColor(INT32 playernum, ghostcolor_t color) void G_GhostAddScale(INT32 playernum, fixed_t scale) { - if (!metalrecording && (!demo.recording || !(demoflags & DF_GHOST))) + if ((!demo.recording || !(demoflags & DF_GHOST))) return; if (ghostext[playernum].lastscale == scale) { @@ -1752,336 +1728,6 @@ void G_ConfirmRewind(tic_t rewindtime) P_ResetCamera(&players[displayplayers[i]], &camera[i]); } -void G_ReadMetalTic(mobj_t *metal) -{ - UINT8 ziptic; - UINT8 xziptic = 0; - - if (!metal_p) - return; - - if (!metal->health) - { - G_StopMetalDemo(); - return; - } - - switch (*metal_p) - { - case METALSNICE: - break; - case METALDEATH: - if (metal->tracer) - P_RemoveMobj(metal->tracer); - P_KillMobj(metal, NULL, NULL, DMG_NORMAL); - /* FALLTHRU */ - case DEMOMARKER: - default: - // end of demo data stream - G_StopMetalDemo(); - return; - } - metal_p++; - - ziptic = READUINT8(metal_p); - - // Read changes from the tic - if (ziptic & GZT_XYZ) - { - // make sure the values are read in the right order - oldmetal.x = READFIXED(metal_p); - oldmetal.y = READFIXED(metal_p); - oldmetal.z = READFIXED(metal_p); - P_MoveOrigin(metal, oldmetal.x, oldmetal.y, oldmetal.z); - oldmetal.x = metal->x; - oldmetal.y = metal->y; - oldmetal.z = metal->z; - } - else - { - if (ziptic & GZT_MOMXY) - { - oldmetal.momx = (metalversion < 0x000e) ? READINT16(metal_p)<<8 : READFIXED(metal_p); - oldmetal.momy = (metalversion < 0x000e) ? READINT16(metal_p)<<8 : READFIXED(metal_p); - } - if (ziptic & GZT_MOMZ) - oldmetal.momz = (metalversion < 0x000e) ? READINT16(metal_p)<<8 : READFIXED(metal_p); - oldmetal.x += oldmetal.momx; - oldmetal.y += oldmetal.momy; - oldmetal.z += oldmetal.momz; - } - if (ziptic & GZT_ANGLE) - metal->angle = READUINT8(metal_p)<<24; - if (ziptic & GZT_FRAME) - oldmetal.frame = READUINT32(metal_p); - if (ziptic & GZT_SPR2) - oldmetal.sprite2 = READUINT8(metal_p); - - // Set movement, position, and angle - // oldmetal contains where you're supposed to be. - metal->momx = oldmetal.momx; - metal->momy = oldmetal.momy; - metal->momz = oldmetal.momz; - P_UnsetThingPosition(metal); - metal->x = oldmetal.x; - metal->y = oldmetal.y; - metal->z = oldmetal.z; - P_SetThingPosition(metal); - metal->frame = oldmetal.frame; - metal->sprite2 = oldmetal.sprite2; - - if (ziptic & GZT_EXTRA) - { // But wait, there's more! - xziptic = READUINT8(metal_p); - if (xziptic & EZT_FLIP) - { - metal->eflags ^= MFE_VERTICALFLIP; - metal->flags2 ^= MF2_OBJECTFLIP; - } - if (xziptic & EZT_SCALE) - { - metal->destscale = READFIXED(metal_p); - if (metal->destscale != metal->scale) - P_SetScale(metal, metal->destscale); - } - if (xziptic & EZT_SPRITE) - metal->sprite = READUINT16(metal_p); - } - -#define follow metal->tracer - if (ziptic & GZT_FOLLOW) - { // Even more... - UINT8 followtic = READUINT8(metal_p); - fixed_t temp; - if (followtic & FZT_SPAWNED) - { - if (follow) - P_RemoveMobj(follow); - P_SetTarget(&follow, P_SpawnMobjFromMobj(metal, 0, 0, 0, MT_GHOST)); - P_SetTarget(&follow->tracer, metal); - follow->tics = -1; - temp = READINT16(metal_p)<height = FixedMul(follow->scale, temp); - - if (followtic & FZT_LINKDRAW) - follow->flags2 |= MF2_LINKDRAW; - - if (followtic & FZT_COLORIZED) - follow->colorized = true; - - if (followtic & FZT_SKIN) - follow->skin = &skins[READUINT8(metal_p)]; - } - if (follow) - { - if (followtic & FZT_SCALE) - follow->destscale = READFIXED(metal_p); - else - follow->destscale = metal->destscale; - if (follow->destscale != follow->scale) - P_SetScale(follow, follow->destscale); - - P_UnsetThingPosition(follow); - temp = (metalversion < 0x000e) ? READINT16(metal_p)<<8 : READFIXED(metal_p); - follow->x = metal->x + temp; - temp = (metalversion < 0x000e) ? READINT16(metal_p)<<8 : READFIXED(metal_p); - follow->y = metal->y + temp; - temp = (metalversion < 0x000e) ? READINT16(metal_p)<<8 : READFIXED(metal_p); - follow->z = metal->z + temp; - P_SetThingPosition(follow); - if (followtic & FZT_SKIN) - follow->sprite2 = READUINT8(metal_p); - else - follow->sprite2 = 0; - follow->sprite = READUINT16(metal_p); - follow->frame = READUINT32(metal_p); // NOT & FF_FRAMEMASK here, so 32 bits - follow->angle = metal->angle; - follow->color = READUINT16(metal_p); - - if (!(followtic & FZT_SPAWNED)) - { - if (xziptic & EZT_FLIP) - { - follow->flags2 ^= MF2_OBJECTFLIP; - follow->eflags ^= MFE_VERTICALFLIP; - } - } - } - } - else if (follow) - { - P_RemoveMobj(follow); - P_SetTarget(&follow, NULL); - } -#undef follow -} - -void G_WriteMetalTic(mobj_t *metal) -{ - UINT8 ziptic = 0; - UINT8 *ziptic_p; - - if (!demobuf.p) // demobuf.p will be NULL until the race start linedef executor is activated! - return; - - WRITEUINT8(demobuf.p, METALSNICE); - ziptic_p = demobuf.p++; // the ziptic, written at the end of this function - - #define MAXMOM (0xFFFF<<8) - - // GZT_XYZ is only useful if you've moved 256 FRACUNITS or more in a single tic. - if (abs(metal->x-oldmetal.x) > MAXMOM - || abs(metal->y-oldmetal.y) > MAXMOM - || abs(metal->z-oldmetal.z) > MAXMOM) - { - oldmetal.x = metal->x; - oldmetal.y = metal->y; - oldmetal.z = metal->z; - ziptic |= GZT_XYZ; - WRITEFIXED(demobuf.p,oldmetal.x); - WRITEFIXED(demobuf.p,oldmetal.y); - WRITEFIXED(demobuf.p,oldmetal.z); - } - else - { - // For moving normally: - // Store movement as a fixed value - fixed_t momx = metal->x-oldmetal.x; - fixed_t momy = metal->y-oldmetal.y; - if (momx != oldmetal.momx - || momy != oldmetal.momy) - { - oldmetal.momx = momx; - oldmetal.momy = momy; - ziptic |= GZT_MOMXY; - WRITEFIXED(demobuf.p,momx); - WRITEFIXED(demobuf.p,momy); - } - momx = metal->z-oldmetal.z; - if (momx != oldmetal.momz) - { - oldmetal.momz = momx; - ziptic |= GZT_MOMZ; - WRITEFIXED(demobuf.p,momx); - } - - // This SHOULD set oldmetal.x/y/z to match metal->x/y/z - oldmetal.x += oldmetal.momx; - oldmetal.y += oldmetal.momy; - oldmetal.z += oldmetal.momz; - } - - #undef MAXMOM - - // Only store the 8 most relevant bits of angle - // because exact values aren't too easy to discern to begin with when only 8 angles have different sprites - // and it does not affect movement at all anyway. - if (metal->player && metal->player->drawangle>>24 != oldmetal.angle) - { - oldmetal.angle = metal->player->drawangle>>24; - ziptic |= GZT_ANGLE; - WRITEUINT8(demobuf.p,oldmetal.angle); - } - - // Store the sprite frame. - if ((metal->frame & FF_FRAMEMASK) != oldmetal.frame) - { - oldmetal.frame = metal->frame; // NOT & FF_FRAMEMASK here, so 32 bits - ziptic |= GZT_FRAME; - WRITEUINT32(demobuf.p,oldmetal.frame); - } - - if (metal->sprite == SPR_PLAY - && metal->sprite2 != oldmetal.sprite2) - { - oldmetal.sprite2 = metal->sprite2; - ziptic |= GZT_SPR2; - WRITEUINT8(demobuf.p,oldmetal.sprite2); - } - - // Check for sprite set changes - if (metal->sprite != oldmetal.sprite) - { - oldmetal.sprite = metal->sprite; - ghostext[0].flags |= EZT_SPRITE; - } - - if (ghostext[0].flags & ~(EZT_COLOR|EZT_HIT)) // these two aren't handled by metal ever - { - ziptic |= GZT_EXTRA; - - if (ghostext[0].scale == ghostext[0].lastscale) - ghostext[0].flags &= ~EZT_SCALE; - - WRITEUINT8(demobuf.p,ghostext[0].flags); - if (ghostext[0].flags & EZT_SCALE) - { - WRITEFIXED(demobuf.p,ghostext[0].scale); - ghostext[0].lastscale = ghostext[0].scale; - } - if (ghostext[0].flags & EZT_SPRITE) - WRITEUINT16(demobuf.p,oldmetal.sprite); - ghostext[0].flags = 0; - } - - if (metal->player && metal->player->followmobj && !(metal->player->followmobj->sprite == SPR_NULL || (metal->player->followmobj->renderflags & RF_DONTDRAW) == RF_DONTDRAW)) - { - fixed_t temp; - UINT8 *followtic_p = demobuf.p++; - UINT8 followtic = 0; - - ziptic |= GZT_FOLLOW; - - if (metal->player->followmobj->skin) - followtic |= FZT_SKIN; - - if (!(oldmetal.flags2 & MF2_AMBUSH)) - { - followtic |= FZT_SPAWNED; - WRITEINT16(demobuf.p,metal->player->followmobj->info->height>>FRACBITS); - if (metal->player->followmobj->flags2 & MF2_LINKDRAW) - followtic |= FZT_LINKDRAW; - if (metal->player->followmobj->colorized) - followtic |= FZT_COLORIZED; - if (followtic & FZT_SKIN) - WRITEUINT8(demobuf.p,(UINT8)(((skin_t *)(metal->player->followmobj->skin))-skins)); - oldmetal.flags2 |= MF2_AMBUSH; - } - - if (metal->player->followmobj->scale != metal->scale) - { - followtic |= FZT_SCALE; - WRITEFIXED(demobuf.p,metal->player->followmobj->scale); - } - - temp = metal->player->followmobj->x-metal->x; - WRITEFIXED(demobuf.p,temp); - temp = metal->player->followmobj->y-metal->y; - WRITEFIXED(demobuf.p,temp); - temp = metal->player->followmobj->z-metal->z; - WRITEFIXED(demobuf.p,temp); - if (followtic & FZT_SKIN) - WRITEUINT8(demobuf.p,metal->player->followmobj->sprite2); - WRITEUINT16(demobuf.p,metal->player->followmobj->sprite); - WRITEUINT32(demobuf.p,metal->player->followmobj->frame); // NOT & FF_FRAMEMASK here, so 32 bits - WRITEUINT16(demobuf.p,metal->player->followmobj->color); - - *followtic_p = followtic; - } - else - oldmetal.flags2 &= ~MF2_AMBUSH; - - *ziptic_p = ziptic; - - // attention here for the ticcmd size! - // latest demos with mouse aiming byte in ticcmd - if (demobuf.p >= demobuf.end - 32) - { - G_StopMetalRecording(false); // no more space - return; - } -} - // // G_RecordDemo // @@ -2109,22 +1755,6 @@ void G_RecordDemo(const char *name) demo.recording = true; } -void G_RecordMetal(void) -{ - INT32 maxsize; - maxsize = 1024*1024; - if (M_CheckParm("-maxdemo") && M_IsNextParm()) - maxsize = atoi(M_GetNextParm()) * 1024; - - // FIXME: this file doesn't manage its memory and actually free this when it's done using it - Z_Free(demobuf.buffer); - P_SaveBufferAlloc(&demobuf, maxsize); - Z_SetUser(demobuf.buffer, (void**)&demobuf.buffer); - demobuf.p = NULL; - - metalrecording = true; -} - static void G_SaveDemoExtraFiles(UINT8 **pp) { char *filename; @@ -2658,39 +2288,6 @@ void G_BeginRecording(void) } } -void G_BeginMetal(void) -{ - mobj_t *mo = players[consoleplayer].mo; - -#if 0 - if (demobuf.p) - return; -#endif - - demobuf.p = demobuf.buffer; - - // Write header. - M_Memcpy(demobuf.p, DEMOHEADER, 12); demobuf.p += 12; - WRITEUINT8(demobuf.p,VERSION); - WRITEUINT8(demobuf.p,SUBVERSION); - WRITEUINT16(demobuf.p,DEMOVERSION); - - // demo checksum - demobuf.p += 16; - - M_Memcpy(demobuf.p, "METL", 4); demobuf.p += 4; - - memset(&ghostext,0,sizeof(ghostext)); - ghostext[0].lastscale = ghostext[0].scale = FRACUNIT; - - // Set up our memory. - memset(&oldmetal,0,sizeof(oldmetal)); - oldmetal.x = mo->x; - oldmetal.y = mo->y; - oldmetal.z = mo->z; - oldmetal.angle = mo->angle>>24; -} - void G_WriteStanding(UINT8 ranking, char *name, INT32 skinnum, UINT16 color, UINT32 val) { char temp[16]; @@ -4025,72 +3622,6 @@ void G_TimeDemo(const char *name) G_DeferedPlayDemo(name); } -void G_DoPlayMetal(void) -{ - lumpnum_t l; - mobj_t *mo = NULL; - thinker_t *th; - - // it's an internal demo - // TODO: Use map header to determine lump name - if ((l = W_CheckNumForName(va("%sMS",G_BuildMapName(gamemap)))) == LUMPERROR) - { - CONS_Alert(CONS_WARNING, M_GetText("No bot recording for this map.\n")); - return; - } - else - metalbuffer = metal_p = W_CacheLumpNum(l, PU_STATIC); - - // find metal sonic - for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) - { - if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) - continue; - - mo = (mobj_t *)th; - if (mo->type != MT_METALSONIC_RACE) - continue; - - break; - } - if (th == &thlist[THINK_MOBJ]) - { - CONS_Alert(CONS_ERROR, M_GetText("Failed to find bot entity.\n")); - Z_Free(metalbuffer); - return; - } - - // read demo header - metal_p += 12; // DEMOHEADER - metal_p++; // VERSION - metal_p++; // SUBVERSION - metalversion = READUINT16(metal_p); - switch(metalversion) - { - case DEMOVERSION: // latest always supported - break; - // too old, cannot support. - default: - CONS_Alert(CONS_WARNING, M_GetText("Failed to load bot recording for this map, format version incompatible.\n")); - Z_Free(metalbuffer); - return; - } - metal_p += 16; // demo checksum - if (memcmp(metal_p, "METL", 4)) - { - CONS_Alert(CONS_WARNING, M_GetText("Failed to load bot recording for this map, wasn't recorded in Metal format.\n")); - Z_Free(metalbuffer); - return; - } metal_p += 4; // "METL" - - // read initial tic - memset(&oldmetal,0,sizeof(oldmetal)); - oldmetal.x = mo->x; - oldmetal.y = mo->y; - oldmetal.z = mo->z; - metalplayback = mo; -} - void G_DoneLevelLoad(void) { CONS_Printf(M_GetText("Loaded level in %f sec\n"), (double)(I_GetTime() - demostarttime) / TICRATE); @@ -4108,6 +3639,7 @@ void G_DoneLevelLoad(void) =================== */ +#if 0 // since it's not actually used anymore, just a reference... // Writes the demo's checksum, or just random garbage if you can't do that for some reason. static void WriteDemoChecksum(void) { @@ -4120,33 +3652,7 @@ static void WriteDemoChecksum(void) md5_buffer((char *)p+16, demobuf.p - (p+16), p); // make a checksum of everything after the checksum in the file. #endif } - -// Stops metal sonic's demo. Separate from other functions because metal + replays can coexist -void G_StopMetalDemo(void) -{ - // Metal Sonic finishing doesn't end the game, dammit. - Z_Free(metalbuffer); - metalbuffer = NULL; - metalplayback = NULL; - metal_p = NULL; -} - -// Stops metal sonic recording. -ATTRNORETURN void FUNCNORETURN G_StopMetalRecording(boolean kill) -{ - boolean saved = false; - if (demobuf.p) - { - WRITEUINT8(demobuf.p, (kill) ? METALDEATH : DEMOMARKER); // add the demo end (or metal death) marker - WriteDemoChecksum(); - saved = FIL_WriteFile(va("%sMS.LMP", G_BuildMapName(gamemap)), demobuf.buffer, demobuf.p - demobuf.buffer); // finally output the file. - } - Z_Free(demobuf.buffer); - metalrecording = false; - if (saved) - I_Error("Saved to %sMS.LMP", G_BuildMapName(gamemap)); - I_Error("Failed to save demo!"); -} +#endif // Stops timing a demo. static void G_StopTimingDemo(void) @@ -4246,8 +3752,6 @@ boolean G_CheckDemoStatus(void) { G_FreeGhosts(); - // DO NOT end metal sonic demos here - if (demo.timing) { G_StopTimingDemo(); diff --git a/src/g_demo.h b/src/g_demo.h index dcfd920fc..5dcf82b5f 100644 --- a/src/g_demo.h +++ b/src/g_demo.h @@ -97,13 +97,9 @@ struct menudemo_t { }; -extern mobj_t *metalplayback; - // Only called by startup code. void G_RecordDemo(const char *name); -void G_RecordMetal(void); void G_BeginRecording(void); -void G_BeginMetal(void); // Only called by shutdown code. void G_WriteStanding(UINT8 ranking, char *name, INT32 skinnum, UINT16 color, UINT32 val); @@ -156,11 +152,6 @@ void G_StoreRewindInfo(void); void G_PreviewRewind(tic_t previewtime); void G_ConfirmRewind(tic_t rewindtime); -void G_ReadMetalTic(mobj_t *metal); -void G_WriteMetalTic(mobj_t *metal); -void G_SaveMetal(UINT8 **buffer); -void G_LoadMetal(UINT8 **buffer); - // Your naming conventions are stupid and useless. // There is no conflict here. struct demoghost { @@ -193,10 +184,6 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer); void G_FreeGhosts(void); void G_DoneLevelLoad(void); -void G_DoPlayMetal(void); -void G_StopMetalDemo(void); -ATTRNORETURN void FUNCNORETURN G_StopMetalRecording(boolean kill); - void G_StopDemo(void); boolean G_CheckDemoStatus(void); diff --git a/src/g_game.c b/src/g_game.c index ef9b54f3c..f2eb4341f 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -3302,7 +3302,7 @@ void G_AddTOL(UINT32 newtol, const char *tolname) // boolean G_GametypeUsesLives(void) { - if (modeattacking || metalrecording) // NOT in Record Attack + if (modeattacking) // NOT in Record Attack return false; if ((grandprixinfo.gp == true) // In Grand Prix @@ -4311,11 +4311,6 @@ static void G_DoCompleted(void) gameaction = ga_nothing; - if (metalplayback) - G_StopMetalDemo(); - if (metalrecording) - G_StopMetalRecording(false); - if (automapactive) AM_Stop(); diff --git a/src/info.c b/src/info.c index b23860213..9688d1404 100644 --- a/src/info.c +++ b/src/info.c @@ -39,110 +39,15 @@ char sprnames[NUMSPRITES + 1][5] = // Enemies "POSS", // Crawla (Blue) - "SPOS", // Crawla (Red) - "FISH", // SDURF - "BUZZ", // Buzz (Gold) - "RBUZ", // Buzz (Red) - "JETB", // Jetty-Syn Bomber - "JETG", // Jetty-Syn Gunner - "CCOM", // Crawla Commander - "DETN", // Deton - "SKIM", // Skim mine dropper - "TRET", // Industrial Turret - "TURR", // Pop-Up Turret - "SHRP", // Sharp - //"CRAB", // Crushstacean - "CR2B", // Banpyura - "CSPR", // Banpyura spring - "JJAW", // Jet Jaw - "SNLR", // Snailer - "VLTR", // BASH - "PNTY", // Pointy - "ARCH", // Robo-Hood - "CBFS", // Castlebot Facestabber - "STAB", // Castlebot Facestabber spear aura - "SPSH", // Egg Guard - "ESHI", // Egg Guard's shield - "GSNP", // Green Snapper - "GSNL", // Green Snapper leg - "GSNH", // Green Snapper head - "MNUS", // Minus - "MNUD", // Minus dirt - "SSHL", // Spring Shell - "UNID", // Unidus - "CANA", // Canarivore - "CANG", // Canarivore gas - "PYRE", // Pyre Fly - "PTER", // Pterabyte - "DRAB", // Dragonbomber - // Generic Boss Items - "JETF", // Boss jet fumes - - // Boss 1 (Greenflower) - "EGGM", // Boss 1 - "EGLZ", // Boss 1 Junk - - // Boss 2 (Techno Hill) - "EGGN", // Boss 2 - "TANK", // Boss 2 Junk - "GOOP", // Boss 2 Goop - - // Boss 3 (Deep Sea) - "EGGO", // Boss 3 - "SEBH", // Boss 3 Junk - "FAKE", // Boss 3 Fakemobile - "SHCK", // Boss 3 Shockwave - - // Boss 4 (Castle Eggman) - "EGGP", - "EFIR", // Boss 4 jet flame - "EGR1", // Boss 4 Spectator Eggrobo - - // Boss 5 (Arid Canyon) - "FANG", // replaces EGGQ - "BRKN", - "WHAT", - "VWRE", - "PROJ", // projector light - "FBOM", - "FSGN", "BARX", // bomb explosion (also used by barrel) "BARD", // bomb dust (also used by barrel) - // Boss 6 (Red Volcano) - "EGGR", - - // Boss 7 (Dark City) - "BGOO", // Goop - "BMSL", - - // Boss 8 (Egg Rock) - "EGGT", - - // Cy-Brak-Demon; uses "BRAK as well", but has some extras - "RCKT", // Rockets! - "ELEC", // Electricity! - "TARG", // Targeting reticules! - "NPLM", // Big napalm bombs! - "MNPL", // Mini napalm bombs! - - // Metal Sonic - "METL", - "MSCF", - "MSCB", - // Collectible Items "RING", "DEBT", - "TRNG", // Team Rings - "TOKE", // Special Stage Token - "RFLG", // Red CTF Flag - "BFLG", // Blue CTF Flag "BSPH", // Sphere - "NCHP", // NiGHTS chip - "NSTR", // NiGHTS star - "EMBM", // Emblem + "EMBM", "SPCN", // Spray Can "MMSH", // Ancient Shrine "MORB", // One Morbillion @@ -158,58 +63,14 @@ char sprnames[NUMSPRITES + 1][5] = "SIGN", // Level end sign "SPIK", // Spike Ball "SFLM", // Spin fire - "TFLM", // Spin fire (team) "USPK", // Floor spike "WSPK", // Wall spike "WSPB", // Wall spike base - "BMNE", // Big floating mine - "PUMI", // Rollout Rock - - // Monitor Boxes - "MSTV", // MiSc TV sprites - "XLTV", // eXtra Large TV sprites - - "TRRI", // Red team: 10 RIngs - "TBRI", // Blue team: 10 RIngs - - "TVRI", // 10 RIng - "TVPI", // PIty shield - "TVAT", // ATtraction shield - "TVFO", // FOrce shield - "TVAR", // ARmageddon shield - "TVWW", // WhirlWind shield - "TVEL", // ELemental shield - "TVSS", // Super Sneakers - "TVIV", // InVincibility - "TV1U", // 1Up - "TV1P", // 1uP (textless) - "TVEG", // EGgman - "TVMX", // MiXup - "TVMY", // MYstery - "TVGV", // GraVity boots - "TVRC", // ReCycler - "TV1K", // 1",000 points (1 K) - "TVTK", // 10",000 points (Ten K) - "TVFL", // FLame shield - "TVBB", // BuBble shield - "TVZP", // Thunder shield (ZaP) // Projectiles - "MISL", - "LASR", // GFZ3 laser - "LASF", // GFZ3 laser flames - "TORP", // Torpedo - "ENRG", // Energy ball - "MINE", // Skim mine - "JBUL", // Jetty-Syn Bullet - "TRLS", "CBLL", // Cannonball - "AROW", // Arrow "CFIR", // Colored fire of various sorts - // The letter - "LETR", - // Greenflower Scenery "FWR1", "FWR2", // GFZ Sunflower @@ -253,8 +114,7 @@ char sprnames[NUMSPRITES + 1][5] = "BMCH", // Big Mace Chain "SMCE", // Small Mace "BMCE", // Big Mace - "YSPB", // Yellow spring on a ball - "RSPB", // Red spring on a ball + "SFBR", // Small Firebar "BFBR", // Big Firebar "BANR", // Banner/pole @@ -265,7 +125,6 @@ char sprnames[NUMSPRITES + 1][5] = "CTRC", // Fire torch "CFLG", // Waving flag/segment "CSTA", // Crawla statue - "CBBS", // Facestabber statue "CABR", // Brambles // Arid Canyon Scenery @@ -281,12 +140,6 @@ char sprnames[NUMSPRITES + 1][5] = "REMT", // TNT proximity shell "TAZD", // Dust devil "ADST", // Arid dust - "MCRT", // Minecart - "MCSP", // Minecart spark - "SALD", // Saloon door - "TRAE", // Train cameo locomotive - "TRAI", // Train cameo wagon - "STEA", // Train steam // Red Volcano Scenery "FLME", // Flame jet @@ -308,7 +161,6 @@ char sprnames[NUMSPRITES + 1][5] = "XMS5", // Hanging Star "XMS6", // Mistletoe "FHZI", // FHZ Ice - "ROSY", // Halloween Scenery "PUMK", // Pumpkins @@ -318,14 +170,13 @@ char sprnames[NUMSPRITES + 1][5] = // Azure Temple Scenery "BGAR", // ATZ Gargoyles - "RCRY", // ATZ Red Crystal (Target) "CFLM", // Green torch flame // Botanic Serenity Scenery "BSZ1", // Tall flowers "BSZ2", // Medium flowers "BSZ3", // Small flowers - //"BSZ4", -- Tulips + "BSZ4", // Tulips "BST1", // Red tulip "BST2", // Purple tulip "BST3", // Blue tulip @@ -342,22 +193,8 @@ char sprnames[NUMSPRITES + 1][5] = "DBAL", // Disco // Powerup Indicators - "ARMA", // Armageddon Shield Orb - "ARMF", // Armageddon Shield Ring", Front - "ARMB", // Armageddon Shield Ring", Back - "WIND", // Whirlwind Shield Orb - "MAGN", // Attract Shield Orb - "ELEM", // Elemental Shield Orb - "FORC", // Force Shield Orb - "PITY", // Pity Shield Orb - "FIRS", // Flame Shield Orb - //"BUBS", // Bubble Shield Orb - "ZAPS", // Thunder Shield Orb - "IVSP", // invincibility sparkles "SSPK", // Super Sonic Spark - "GOAL", // Special Stage goal (here because lol NiGHTS) - // Flickies "FBUB", // Flicky-sized bubble "FL01", // Bluebird @@ -380,9 +217,7 @@ char sprnames[NUMSPRITES + 1][5] = "FS02", // Bat // Springs - "FANS", // Fan "STEM", // Steam riser - "BMPR", // Bumpers "BLON", // Balloons "SPVY", // Yellow Vertical Spring "SPVR", // Red Vertical Spring @@ -397,8 +232,6 @@ char sprnames[NUMSPRITES + 1][5] = "SPHB", // Blue Horizontal Spring "SPHG", // Grey Horizontal Spring "POGS", // Pogo Spring - "BSTY", // Yellow Booster - "BSTR", // Red Booster // Environmental Effects "RAIN", // Rain @@ -412,85 +245,22 @@ char sprnames[NUMSPRITES + 1][5] = "WZAP", "DUST", // Spindash dust "FPRT", // Spindash dust (flame) - "TFOG", // Teleport Fog "SEED", // Sonic CD flower seed "PRTL", // Particle (for fans", etc.) // Game Indicators - "SCOR", // Score logo "DRWN", // Drowning Timer - "FLII", // AI flight indicator - "LCKN", // Target - "TTAG", // Tag Sign - "GFLG", // Got Flag sign - "FNSF", // Finish flag "CORK", "LHRT", - // Ring Weapons - "RRNG", // Red Ring - "RNGB", // Bounce Ring - "RNGR", // Rail Ring - "RNGI", // Infinity Ring - "RNGA", // Automatic Ring - "RNGE", // Explosion Ring - "RNGS", // Scatter Ring - "RNGG", // Grenade Ring - - "PIKB", // Bounce Ring Pickup - "PIKR", // Rail Ring Pickup - "PIKA", // Automatic Ring Pickup - "PIKE", // Explosion Ring Pickup - "PIKS", // Scatter Ring Pickup - "PIKG", // Grenade Ring Pickup - - "TAUT", // Thrown Automatic Ring - "TGRE", // Thrown Grenade Ring - "TSCR", // Thrown Scatter Ring - - // Mario-specific stuff - "COIN", - "CPRK", - "GOOM", - "BGOM", - "FFWR", - "FBLL", - "SHLL", - "PUMA", - "HAMM", - "KOOP", - "BFLM", - "MAXE", - "MUS1", - "MUS2", - "TOAD", - // NiGHTS Stuff - "NDRN", // NiGHTS drone - "NSPK", // NiGHTS sparkle - "NBMP", // NiGHTS Bumper - "HOOP", // NiGHTS hoop sprite - "NSCR", // NiGHTS score sprite - "NPRU", // Nights Powerups + "HOOP", "CAPS", // Capsule thingy for NiGHTS - "IDYA", // Ideya - "NTPN", // Nightopian - "SHLP", // Shleep // Secret badniks and hazards", shhhh - "PENG", - "POPH", - "HIVE", - "BUMB", - "BBUZ", "FMCE", "HMCE", - "CACO", - "BAL2", - "SBOB", - "SBFL", - "SBSK", "HBAT", // Debris @@ -499,7 +269,6 @@ char sprnames[NUMSPRITES + 1][5] = "BOM2", // Boss Explosion 1 "BOM3", // Boss Explosion 2 "BOM4", // Underwater Explosion - "BMNB", // Mine Explosion "LSSJ", // My ki is overflowing!! // Crumbly rocks @@ -524,19 +293,11 @@ char sprnames[NUMSPRITES + 1][5] = "GFZD", // GFZ debris "BRIC", // Bricks "WDDB", // Wood Debris - "BRIR", // CEZ3 colored bricks - "BRIB", - "BRIY", - - // Gravity Well Objects - "GWLG", - "GWLR", //SRB2kart Sprites (sort later) "RNDM", // Random Item Box "SBOX", // Sphere Box (for Battle) "RBOX", // Ring Box - "RPOP", // Random Item Box Pop "ITRI", // Item Box Debris "ITPA", // Paper item backdrop "SGNS", // Signpost sparkle @@ -653,16 +414,9 @@ char sprnames[NUMSPRITES + 1][5] = "DEZL", // DEZ Laser respawn // Additional Kart Objects - "POKE", // Pokey "AUDI", // Audience members - "DECO", // Old 1.0 Kart Decoratives + New misc ones - "SNES", // Sprites for SNES remake maps - "GBAS", // Sprites for GBA remake maps - "SPRS", // Sapphire Coast Spring Shell "BUZB", // Sapphire Coast Buzz Mk3 - "CHOM", // Sapphire Coast Chomper - "SACO", // Sapphire Coast Fauna - "CRAB", // Crystal Abyss mobs + "SNES", "BRNG", // Chaotix Big Ring // Ark Arrows @@ -754,48 +508,13 @@ char sprnames[NUMSPRITES + 1][5] = "BSTS", "BSTT", - // Various plants - "SBUS", - "MARB", // Marble Zone sprites "FUFO", // CD Special Stage UFO (don't ask me why it begins with an F) "RUST", // Rusty Rig sprites - "VAPE", // Volcanic Valley - - // Hill Top Zone - "HTZA", - "HTZB", - // Ports of gardens - "SGVA", - "SGVB", - "SGVC", "PGTR", - "PGF1", - "PGF2", - "PGF3", - "PGBH", - "DPLR", - - // Midnight Channel stuff: - "SPTL", // Spotlight - "ENM1", // Shadows (Roaming and static) - "GARU", // Wind attack roaming shadows use. - "MARR", // Mayonaka Arrow - - //Mementos stuff: - "REAP", - - "JITB", // Jack In The Box - - // Color Drive stuff: - "CDMO", - "CDBU", - - // Daytona Speedway - "DPIN", // Egg Zeppelin "PPLR", @@ -839,37 +558,6 @@ char sprnames[NUMSPRITES + 1][5] = "SNOB", "ICEB", - // Ezo's maps - many single-use sprites! - "ECND", - "DOCH", - "DUCK", - "GTRE", - "CHES", - "CHIM", - "DRGN", - "LZMN", - "PGSS", - "ZTCH", - "MKMA", - "MKMP", - "RTCH", - "BOWL", - "BOWH", - "BRRL", - "BRRR", - "HRSE", - "TOAH", - "BFRT", - "OFRT", - "RFRT", - "PFRT", - "ASPK", - "HBST", - "HBSO", - "HBSF", - "WBLZ", - "WBLN", - "TUST", "TULE", @@ -1157,383 +845,6 @@ state_t states[NUMSTATES] = {SPR_TIRE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE1 {SPR_TIRE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_KART_TIRE2 - // Blue Crawla - {SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND}, // S_POSS_STND - {SPR_POSS, 0, 3, {A_Chase}, 0, 0, S_POSS_RUN2}, // S_POSS_RUN1 - {SPR_POSS, 1, 3, {A_Chase}, 0, 0, S_POSS_RUN3}, // S_POSS_RUN2 - {SPR_POSS, 2, 3, {A_Chase}, 0, 0, S_POSS_RUN4}, // S_POSS_RUN3 - {SPR_POSS, 3, 3, {A_Chase}, 0, 0, S_POSS_RUN5}, // S_POSS_RUN4 - {SPR_POSS, 4, 3, {A_Chase}, 0, 0, S_POSS_RUN6}, // S_POSS_RUN5 - {SPR_POSS, 5, 3, {A_Chase}, 0, 0, S_POSS_RUN1}, // S_POSS_RUN6 - - // Red Crawla - {SPR_SPOS, 0, 5, {A_Look}, 0, 0, S_SPOS_STND}, // S_SPOS_STND - {SPR_SPOS, 0, 1, {A_Chase}, 0, 0, S_SPOS_RUN2}, // S_SPOS_RUN1 - {SPR_SPOS, 1, 1, {A_Chase}, 0, 0, S_SPOS_RUN3}, // S_SPOS_RUN2 - {SPR_SPOS, 2, 1, {A_Chase}, 0, 0, S_SPOS_RUN4}, // S_SPOS_RUN3 - {SPR_SPOS, 3, 1, {A_Chase}, 0, 0, S_SPOS_RUN5}, // S_SPOS_RUN4 - {SPR_SPOS, 4, 1, {A_Chase}, 0, 0, S_SPOS_RUN6}, // S_SPOS_RUN5 - {SPR_SPOS, 5, 1, {A_Chase}, 0, 0, S_SPOS_RUN1}, // S_SPOS_RUN6 - - // Greenflower Fish - {SPR_FISH, 1, 1, {NULL}, 0, 0, S_FISH2}, // S_FISH1 - {SPR_FISH, 1, 1, {A_FishJump}, 0, 0, S_FISH1}, // S_FISH2 - {SPR_FISH, 0, 1, {NULL}, 0, 0, S_FISH4}, // S_FISH3 - {SPR_FISH, 0, 1, {A_FishJump}, 0, 0, S_FISH3}, // S_FISH4 - - // Gold Buzz - {SPR_BUZZ, 0, 2, {A_Look}, 0, 0, S_BUZZLOOK2}, // S_BUZZLOOK1 - {SPR_BUZZ, 1, 2, {A_Look}, 0, 0, S_BUZZLOOK1}, // S_BUZZLOOK2 - {SPR_BUZZ, 0, 2, {A_BuzzFly}, sfx_buzz4, 0, S_BUZZFLY2}, // S_BUZZFLY1 - {SPR_BUZZ, 1, 2, {A_BuzzFly}, 0, 0, S_BUZZFLY1}, // S_BUZZFLY2 - - // Red Buzz - {SPR_RBUZ, 0, 2, {A_Look}, 0, 0, S_RBUZZLOOK2}, // S_RBUZZLOOK1 - {SPR_RBUZ, 1, 2, {A_Look}, 0, 0, S_RBUZZLOOK1}, // S_RBUZZLOOK2 - {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 - - // 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 - {SPR_JETB, 0, 1, {A_JetbThink}, 0, 0, S_JETBZOOM2}, // S_JETBZOOM1 - {SPR_JETB, 1, 1, {A_JetbThink}, 0, 0, S_JETBZOOM1}, // S_JETBZOOM2 - - // Jetty-Syn Gunner - {SPR_JETG, 0, 4, {A_Look}, 0, 0, S_JETGLOOK2}, // S_JETGLOOK1 - {SPR_JETG, 1, 4, {A_Look}, 0, 0, S_JETGLOOK1}, // S_JETGLOOK2 - {SPR_JETG, 0, 1, {A_JetgThink}, 0, 0, S_JETGZOOM2}, // S_JETGZOOM1 - {SPR_JETG, 1, 1, {A_JetgThink}, 0, 0, S_JETGZOOM1}, // S_JETGZOOM2 - {SPR_JETG, 2, 1, {A_JetgShoot}, 0, 0, S_JETGSHOOT2}, // S_JETGSHOOT1 - {SPR_JETG, 3, 1, {NULL}, 0, 0, S_JETGZOOM1}, // S_JETGSHOOT2 - - // Crawla Commander - {SPR_CCOM, 0, 1, {A_CrawlaCommanderThink}, 0, 15*FRACUNIT, S_CCOMMAND2}, // S_CCOMMAND1 - {SPR_CCOM, 1, 1, {A_CrawlaCommanderThink}, 0, 15*FRACUNIT, S_CCOMMAND1}, // S_CCOMMAND2 - {SPR_CCOM, 2, 1, {A_CrawlaCommanderThink}, 0, 15*FRACUNIT, S_CCOMMAND4}, // S_CCOMMAND3 - {SPR_CCOM, 3, 1, {A_CrawlaCommanderThink}, 0, 15*FRACUNIT, S_CCOMMAND3}, // S_CCOMMAND4 - - // Deton - {SPR_DETN, 0, 35, {A_Look}, 0, 0, S_DETON1}, // S_DETON1 - {SPR_DETN, 0, 1, {A_DetonChase}, 0, 0, S_DETON3}, // S_DETON2 - {SPR_DETN, 1, 1, {A_DetonChase}, 0, 0, S_DETON4}, // S_DETON3 - {SPR_DETN, 2, 1, {A_DetonChase}, 0, 0, S_DETON5}, // S_DETON4 - {SPR_DETN, 3, 1, {A_DetonChase}, 0, 0, S_DETON6}, // S_DETON5 - {SPR_DETN, 4, 1, {A_DetonChase}, 0, 0, S_DETON7}, // S_DETON6 - {SPR_DETN, 5, 1, {A_DetonChase}, 0, 0, S_DETON8}, // S_DETON7 - {SPR_DETN, 6, 1, {A_DetonChase}, 0, 0, S_DETON9}, // S_DETON8 - {SPR_DETN, 7, 1, {A_DetonChase}, 0, 0, S_DETON10}, // S_DETON9 - {SPR_DETN, 6, 1, {A_DetonChase}, 0, 0, S_DETON11}, // S_DETON10 - {SPR_DETN, 5, 1, {A_DetonChase}, 0, 0, S_DETON12}, // S_DETON11 - {SPR_DETN, 4, 1, {A_DetonChase}, 0, 0, S_DETON13}, // S_DETON12 - {SPR_DETN, 3, 1, {A_DetonChase}, 0, 0, S_DETON14}, // S_DETON13 - {SPR_DETN, 2, 1, {A_DetonChase}, 0, 0, S_DETON15}, // S_DETON14 - {SPR_DETN, 1, 1, {A_DetonChase}, 0, 0, S_DETON2}, // S_DETON15 - - // Skim Mine Dropper - {SPR_SKIM, 0, 1, {A_SkimChase}, 0, 0, S_SKIM2}, // S_SKIM1 - {SPR_SKIM, 0, 1, {A_SkimChase}, 0, 0, S_SKIM1}, // S_SKIM2 - {SPR_SKIM, 0, 14, {NULL}, 0, 0, S_SKIM4}, // S_SKIM3 - {SPR_SKIM, 0, 14, {A_DropMine}, 0, 0, S_SKIM1}, // S_SKIM4 - - // THZ Turret - {SPR_TRET, FF_FULLBRIGHT, 105, {A_TurretStop}, 0, 0, S_TURRETFIRE}, // S_TURRET - {SPR_TRET, FF_FULLBRIGHT, 105, {A_TurretFire}, 0, 0, S_TURRET}, // S_TURRETFIRE - {SPR_TRET, FF_FULLBRIGHT|1, 7, {A_Pain}, 0, 0, S_TURRETSHOCK2}, // S_TURRETSHOCK1 - {SPR_TRET, FF_FULLBRIGHT|2, 7, {NULL}, 0, 0, S_TURRETSHOCK3}, // S_TURRETSHOCK2 - {SPR_TRET, FF_FULLBRIGHT|3, 7, {NULL}, 0, 0, S_TURRETSHOCK4}, // S_TURRETSHOCK3 - {SPR_TRET, FF_FULLBRIGHT|4, 7, {NULL}, 0, 0, S_TURRETSHOCK5}, // S_TURRETSHOCK4 - {SPR_TRET, FF_FULLBRIGHT|1, 7, {NULL}, 0, 0, S_TURRETSHOCK6}, // S_TURRETSHOCK5 - {SPR_TRET, FF_FULLBRIGHT|2, 7, {A_Pain}, 0, 0, S_TURRETSHOCK7}, // S_TURRETSHOCK6 - {SPR_TRET, FF_FULLBRIGHT|3, 7, {NULL}, 0, 0, S_TURRETSHOCK8}, // S_TURRETSHOCK7 - {SPR_TRET, FF_FULLBRIGHT|4, 7, {NULL}, 0, 0, S_TURRETSHOCK9}, // S_TURRETSHOCK8 - {SPR_TRET, FF_FULLBRIGHT|4, 7, {A_LinedefExecuteFromArg}, 0, 0, S_XPLD1}, // S_TURRETSHOCK9 - - {SPR_TURR, 0, 1, {A_Look}, 1, 0, S_TURRETPOPDOWN8}, // S_TURRETLOOK - {SPR_TURR, 0, 0, {A_FaceTarget}, 0, 0, S_TURRETPOPUP1}, // S_TURRETSEE - {SPR_TURR, 1, 2, {A_Pain}, 0, 0, S_TURRETPOPUP2}, // S_TURRETPOPUP1 - {SPR_TURR, 2, 2, {NULL}, 0, 0, S_TURRETPOPUP3}, // S_TURRETPOPUP2 - {SPR_TURR, 3, 2, {NULL}, 0, 0, S_TURRETPOPUP4}, // S_TURRETPOPUP3 - {SPR_TURR, 4, 2, {NULL}, 0, 0, S_TURRETPOPUP5}, // S_TURRETPOPUP4 - {SPR_TURR, 5, 2, {NULL}, 0, 0, S_TURRETPOPUP6}, // S_TURRETPOPUP5 - {SPR_TURR, 6, 2, {NULL}, 0, 0, S_TURRETPOPUP7}, // S_TURRETPOPUP6 - {SPR_TURR, 7, 2, {NULL}, 0, 0, S_TURRETPOPUP8}, // S_TURRETPOPUP7 - {SPR_TURR, 8, 14,{NULL}, 0, 0, S_TURRETSHOOT}, // S_TURRETPOPUP8 - {SPR_TURR, 8, 14,{A_JetgShoot}, 0, 0, S_TURRETPOPDOWN1}, // S_TURRETSHOOT - {SPR_TURR, 7, 2, {A_Pain}, 0, 0, S_TURRETPOPDOWN2}, // S_TURRETPOPDOWN1 - {SPR_TURR, 6, 2, {NULL}, 0, 0, S_TURRETPOPDOWN3}, // S_TURRETPOPDOWN2 - {SPR_TURR, 5, 2, {NULL}, 0, 0, S_TURRETPOPDOWN4}, // S_TURRETPOPDOWN3 - {SPR_TURR, 4, 2, {NULL}, 0, 0, S_TURRETPOPDOWN5}, // S_TURRETPOPDOWN4 - {SPR_TURR, 3, 2, {NULL}, 0, 0, S_TURRETPOPDOWN6}, // S_TURRETPOPDOWN5 - {SPR_TURR, 2, 2, {NULL}, 0, 0, S_TURRETPOPDOWN7}, // S_TURRETPOPDOWN6 - {SPR_TURR, 1, 2, {NULL}, 0, 0, S_TURRETPOPDOWN8}, // S_TURRETPOPDOWN7 - {SPR_TURR, 0, 69,{A_SetTics}, 0, 1, S_TURRETLOOK}, // S_TURRETPOPDOWN8 - - // Spincushion - {SPR_SHRP, 0, 2, {A_Look}, 0, 0, S_SPINCUSHION_LOOK}, // S_SPINCUSHION_LOOK - {SPR_SHRP, 1, 2, {A_SharpChase}, 0, 0, S_SPINCUSHION_CHASE2}, // S_SPINCUSHION_CHASE1 - {SPR_SHRP, 2, 2, {A_SharpChase}, 0, 0, S_SPINCUSHION_CHASE3}, // S_SPINCUSHION_CHASE2 - {SPR_SHRP, 3, 2, {A_SharpChase}, 0, 0, S_SPINCUSHION_CHASE4}, // S_SPINCUSHION_CHASE3 - {SPR_SHRP, 0, 2, {A_SharpChase}, 0, 0, S_SPINCUSHION_CHASE1}, // S_SPINCUSHION_CHASE4 - {SPR_SHRP, 0, 2, {NULL}, 0, 0, S_SPINCUSHION_AIM2}, // S_SPINCUSHION_AIM1 - {SPR_SHRP, 4, 2, {NULL}, 0, 0, S_SPINCUSHION_AIM3}, // S_SPINCUSHION_AIM2 - {SPR_SHRP, 5, 2, {A_SetObjectFlags}, MF_PAIN, 2, S_SPINCUSHION_AIM4}, // S_SPINCUSHION_AIM3 - {SPR_SHRP, 6, 16, {A_MultiShotDist}, (MT_DUST<<16)|6, -32, S_SPINCUSHION_AIM5}, // S_SPINCUSHION_AIM4 - {SPR_SHRP, 6, 0, {A_PlaySound}, sfx_shrpgo, 1, S_SPINCUSHION_SPIN1}, // S_SPINCUSHION_AIM5 - {SPR_SHRP, 6, 1, {A_SharpSpin}, 0, 0, S_SPINCUSHION_SPIN2}, // S_SPINCUSHION_SPIN1 - {SPR_SHRP, 8, 1, {A_SharpSpin}, 0, 0, S_SPINCUSHION_SPIN3}, // S_SPINCUSHION_SPIN2 - {SPR_SHRP, 7, 1, {A_SharpSpin}, 0, 0, S_SPINCUSHION_SPIN4}, // S_SPINCUSHION_SPIN3 - {SPR_SHRP, 8, 1, {A_SharpSpin}, MT_SPINDUST, 0, S_SPINCUSHION_SPIN1}, // S_SPINCUSHION_SPIN4 - {SPR_SHRP, 6, 1, {A_PlaySound}, sfx_s3k69, 1, S_SPINCUSHION_STOP2}, // S_SPINCUSHION_STOP1 - {SPR_SHRP, 6, 4, {A_SharpDecel}, 0, 0, S_SPINCUSHION_STOP2}, // S_SPINCUSHION_STOP2 - {SPR_SHRP, 5, 4, {A_FaceTarget}, 0, 0, S_SPINCUSHION_STOP4}, // S_SPINCUSHION_STOP3 - {SPR_SHRP, 4, 4, {A_SetObjectFlags}, MF_PAIN, 1, S_SPINCUSHION_LOOK}, // S_SPINCUSHION_STOP4 - - // Crushstacean - {SPR_CRAB, 0, 3, {A_CrushstaceanWalk}, 0, S_CRUSHSTACEAN_ROAMPAUSE, S_CRUSHSTACEAN_ROAM2}, // S_CRUSHSTACEAN_ROAM1 - {SPR_CRAB, 1, 3, {A_CrushstaceanWalk}, 0, S_CRUSHSTACEAN_ROAMPAUSE, S_CRUSHSTACEAN_ROAM3}, // S_CRUSHSTACEAN_ROAM2 - {SPR_CRAB, 0, 3, {A_CrushstaceanWalk}, 0, S_CRUSHSTACEAN_ROAMPAUSE, S_CRUSHSTACEAN_ROAM4}, // S_CRUSHSTACEAN_ROAM3 - {SPR_CRAB, 2, 3, {A_CrushstaceanWalk}, 0, S_CRUSHSTACEAN_ROAMPAUSE, S_CRUSHSTACEAN_ROAM1}, // S_CRUSHSTACEAN_ROAM4 - {SPR_CRAB, 0, 40, {NULL}, 0, 0, S_CRUSHSTACEAN_ROAM1}, // S_CRUSHSTACEAN_ROAMPAUSE - {SPR_CRAB, 0, 10, {NULL}, 0, 0, S_CRUSHSTACEAN_PUNCH2}, // S_CRUSHSTACEAN_PUNCH1 - {SPR_CRAB, 0, -1, {A_CrushstaceanPunch}, 0, 0, S_CRUSHSTACEAN_ROAMPAUSE}, // S_CRUSHSTACEAN_PUNCH2 - {SPR_CRAB, 3, 1, {A_CrushclawAim}, 40, 20, S_CRUSHCLAW_AIM}, // S_CRUSHCLAW_AIM - {SPR_CRAB, 3, 1, {A_CrushclawLaunch}, 0, S_CRUSHCLAW_STAY, S_CRUSHCLAW_OUT}, // S_CRUSHCLAW_OUT - {SPR_CRAB, 3, 10, {NULL}, 0, 0, S_CRUSHCLAW_IN}, // S_CRUSHCLAW_STAY - {SPR_CRAB, 3, 1, {A_CrushclawLaunch}, 1, S_CRUSHCLAW_WAIT, S_CRUSHCLAW_IN}, // S_CRUSHCLAW_IN - {SPR_CRAB, 3, 37, {NULL}, 0, 0, S_CRUSHCLAW_AIM}, // S_CRUSHCLAW_WAIT - {SPR_CRAB, 4, -1, {NULL}, 0, 0, S_NULL}, // S_CRUSHCHAIN - - // Banpyura - {SPR_CR2B, 0, 3, {A_CrushstaceanWalk}, 0, S_BANPYURA_ROAMPAUSE, S_BANPYURA_ROAM2}, // S_BANPYURA_ROAM1 - {SPR_CR2B, 1, 3, {A_CrushstaceanWalk}, 0, S_BANPYURA_ROAMPAUSE, S_BANPYURA_ROAM3}, // S_BANPYURA_ROAM2 - {SPR_CR2B, 0, 3, {A_CrushstaceanWalk}, 0, S_BANPYURA_ROAMPAUSE, S_BANPYURA_ROAM4}, // S_BANPYURA_ROAM3 - {SPR_CR2B, 2, 3, {A_CrushstaceanWalk}, 0, S_BANPYURA_ROAMPAUSE, S_BANPYURA_ROAM1}, // S_BANPYURA_ROAM4 - {SPR_CR2B, 0, 40, {NULL}, 0, 0, S_BANPYURA_ROAM1}, // S_BANPYURA_ROAMPAUSE - - {SPR_CSPR, 0, 1, {A_CrushclawAim}, 50, 20, S_CDIAG1}, // S_CDIAG1 - {SPR_CSPR, 1, 1, {A_Pain}, 0, 0, S_CDIAG3}, // S_CDIAG2 - {SPR_CSPR, 2, 1, {A_CrushclawAim}, 50, 20, S_CDIAG4}, // S_CDIAG3 - {SPR_CSPR, 3, 1, {A_CrushclawAim}, 50, 20, S_CDIAG5}, // S_CDIAG4 - {SPR_CSPR, 4, 1, {A_CrushclawAim}, 50, 20, S_CDIAG6}, // S_CDIAG5 - {SPR_CSPR, 3, 1, {A_CrushclawAim}, 50, 20, S_CDIAG7}, // S_CDIAG6 - {SPR_CSPR, 2, 1, {A_CrushclawAim}, 50, 20, S_CDIAG8}, // S_CDIAG7 - {SPR_CSPR, 1, 1, {A_CrushclawAim}, 50, 20, S_CDIAG1}, // S_CDIAG8 - - // Jet Jaw - {SPR_JJAW, 0, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM2}, // S_JETJAW_ROAM1 - {SPR_JJAW, 0, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM3}, // S_JETJAW_ROAM2 - {SPR_JJAW, 0, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM4}, // S_JETJAW_ROAM3 - {SPR_JJAW, 0, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM5}, // S_JETJAW_ROAM4 - {SPR_JJAW, 1, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM6}, // S_JETJAW_ROAM5 - {SPR_JJAW, 1, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM7}, // S_JETJAW_ROAM6 - {SPR_JJAW, 1, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM8}, // S_JETJAW_ROAM7 - {SPR_JJAW, 1, 1, {A_JetJawRoam}, 0, 0, S_JETJAW_ROAM1}, // S_JETJAW_ROAM8 - {SPR_JJAW, 0, 1, {A_DualAction}, S_JETJAW_CHOMP16, S_JETJAW_SOUND, S_JETJAW_CHOMP2}, // S_JETJAW_CHOMP1 - {SPR_JJAW, 0, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP3}, // S_JETJAW_CHOMP2 - {SPR_JJAW, 0, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP4}, // S_JETJAW_CHOMP3 - {SPR_JJAW, 0, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP5}, // S_JETJAW_CHOMP4 - {SPR_JJAW, 1, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP6}, // S_JETJAW_CHOMP5 - {SPR_JJAW, 1, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP7}, // S_JETJAW_CHOMP6 - {SPR_JJAW, 1, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP8}, // S_JETJAW_CHOMP7 - {SPR_JJAW, 1, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP9}, // S_JETJAW_CHOMP8 - {SPR_JJAW, 2, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP10}, // S_JETJAW_CHOMP9 - {SPR_JJAW, 2, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP11}, // S_JETJAW_CHOMP10 - {SPR_JJAW, 2, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP12}, // S_JETJAW_CHOMP11 - {SPR_JJAW, 2, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP13}, // S_JETJAW_CHOMP12 - {SPR_JJAW, 3, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP14}, // S_JETJAW_CHOMP13 - {SPR_JJAW, 3, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP15}, // S_JETJAW_CHOMP14 - {SPR_JJAW, 3, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP16}, // S_JETJAW_CHOMP15 - {SPR_JJAW, 3, 1, {A_JetJawChomp}, 0, 0, S_JETJAW_CHOMP1}, // S_JETJAW_CHOMP16 - {SPR_JJAW, 0, 1, {A_PlayAttackSound}, 0, 0, S_JETJAW_SOUND}, // S_JETJAW_SOUND - - // Snailer - {SPR_SNLR, 0, 1, {A_SnailerThink}, 0, 0, S_SNAILER1}, // S_SNAILER1 - {SPR_BOM1, 0, 0, {A_FlickySpawn}, 1<<17, 0, S_XPLD1}, // S_SNAILER_FLICKY - - // Vulture - {SPR_VLTR, 4, 35, {A_Look}, 1, 0, S_VULTURE_STND}, // S_VULTURE_STND - {SPR_VLTR, 4, 3, {A_VultureHover}, 0, 0, S_VULTURE_DRIFT}, // S_VULTURE_DRIFT - {SPR_VLTR, 0, 6, {A_VultureBlast}, 0, 0, S_VULTURE_ZOOM2}, // S_VULTURE_ZOOM1 - {SPR_VLTR, 0, 3, {A_VultureFly}, 0, 0, S_VULTURE_ZOOM2}, // S_VULTURE_ZOOM2 - {SPR_VLTR, 0, 3*TICRATE, {NULL}, 0, 0, S_VULTURE_DRIFT}, // S_VULTURE_STUNNED - - // Pointy - {SPR_PNTY, 0, 1, {A_PointyThink}, 0, 0, S_POINTY1}, // S_POINTY1 - - // Pointy Ball - {SPR_PNTY, 1, 1, {A_CheckBuddy}, 0, 0, S_POINTYBALL1}, // S_POINTYBALL1 - - // Robo-Hood - {SPR_ARCH, 0, 4, {A_Look}, 2048<>= FRACBITS; - if (actor->type == MT_EGGMOBILE) - dist >>= 1; - if (dist > 200) dist = 200; - if (actor->type == MT_EGGMOBILE && dist > 160) - dist = 160; - if (P_RandomByte(PR_UNDEFINED) < dist) return false; return true; } -/** Checks for water in a sector. - * Used by Skim movements. - * - * \param x X coordinate on the map. - * \param y Y coordinate on the map. - * \return True if there's water at this location, false if not. - * \sa ::MT_SKIM - */ -static boolean P_WaterInSector(mobj_t *mobj, fixed_t x, fixed_t y) -{ - sector_t *sector; - - sector = R_PointInSubsector(x, y)->sector; - - if (sector->ffloors) - { - ffloor_t *rover; - - for (rover = sector->ffloors; rover; rover = rover->next) - { - if (!(rover->fofflags & FOF_EXISTS) || !(rover->fofflags & FOF_SWIMMABLE)) - continue; - - if (*rover->topheight >= mobj->floorz && *rover->topheight <= mobj->z) - return true; // we found water!! - } - } - - return false; -} - static const fixed_t xspeed[NUMDIRS] = {FRACUNIT, 46341>>(16-FRACBITS), 0, -(46341>>(16-FRACBITS)), -FRACUNIT, -(46341>>(16-FRACBITS)), 0, 46341>>(16-FRACBITS)}; static const fixed_t yspeed[NUMDIRS] = {0, 46341>>(16-FRACBITS), FRACUNIT, 46341>>(16-FRACBITS), 0, -(46341>>(16-FRACBITS)), -FRACUNIT, -(46341>>(16-FRACBITS))}; @@ -539,9 +490,6 @@ boolean P_Move(mobj_t *actor, fixed_t speed) tryx = actor->x + FixedMul(speed*xspeed[movedir], actor->scale); tryy = actor->y + FixedMul(speed*yspeed[movedir], actor->scale); - if (actor->type == MT_SKIM && !P_WaterInSector(actor, tryx, tryy)) // bail out if sector lacks water - return false; - if (!P_TryMove(actor, tryx, tryy, false, NULL)) { if (actor->flags & MF_FLOAT && tm.floatok) @@ -552,9 +500,6 @@ boolean P_Move(mobj_t *actor, fixed_t speed) else actor->z -= FixedMul(FLOATSPEED, actor->scale); - if (actor->type == MT_JETJAW && actor->z + actor->height > actor->watertop) - actor->z = actor->watertop - actor->height; - actor->flags2 |= MF2_INFLOAT; return true; } @@ -1016,25 +961,6 @@ static void P_SharpDust(mobj_t *actor, mobjtype_t type, angle_t ang) P_SetObjectMomZ(dust, P_RandomRange(PR_UNDEFINED, 1, 4)<angle, actor->radius), - -P_ReturnThrustY(actor, actor->angle, actor->radius), - actor->height/3, - MT_PARTICLE); - flume->destscale = actor->scale*3; - P_SetScale(flume, flume->destscale); - P_SetTarget(&flume->target, actor); - flume->sprite = SPR_JETF; - flume->frame = FF_FULLBRIGHT; - flume->tics = 2; -} - // Function: A_FaceStabRev // // Description: Facestabber rev action @@ -1073,7 +999,6 @@ void A_FaceStabRev(mobj_t *actor) else { P_TryMove(actor, actor->x - P_ReturnThrustX(actor, actor->angle, 2<y - P_ReturnThrustY(actor, actor->angle, 2<extravalue2 > 26) actor->extravalue2 = 26; - if (P_TryMove(actor, + P_TryMove(actor, actor->x + P_ReturnThrustX(actor, dirang, actor->extravalue2<y + P_ReturnThrustY(actor, dirang, actor->extravalue2<extravalue1); - fixed_t basesize = FRACUNIT/MAXVAL; - mobj_t *hwork = actor; - INT32 dist = 113; - fixed_t xo = P_ReturnThrustX(actor, actor->angle, dist*basesize); - fixed_t yo = P_ReturnThrustY(actor, actor->angle, dist*basesize); - - while (step > 0) - { - if (!hwork->hnext) - P_SetTarget(&hwork->hnext, P_SpawnMobjFromMobj(actor, 0, 0, 0, MT_FACESTABBERSPEAR)); - hwork = hwork->hnext; - hwork->angle = actor->angle + ANGLE_90; - hwork->destscale = FixedSqrt(step*basesize); - P_SetScale(hwork, hwork->destscale); - hwork->fuse = 2; - P_MoveOrigin(hwork, actor->x + xo*(15-step), actor->y + yo*(15-step), actor->z + (actor->height - hwork->height)/2 + (P_MobjFlip(actor)*(8<extravalue1 >= MAXVAL) - actor->extravalue1 -= NUMGRADS; - - if ((step % 5) == 0) - P_SharpDust(actor, MT_SPINDUST, actor->angle); - - P_FaceStabFlume(actor); - return; -#undef MAXVAL -#undef NUMGRADS -#undef NUMSTEPS - } + false, NULL); } } @@ -1672,10 +1560,10 @@ void A_SnailerThink(mobj_t *actor) dy = actor->y + P_ReturnThrustY(actor, actor->angle, dist); } - P_SpawnPointMissile(actor, dx, dy, actor->target->z, MT_ROCKET, actor->x, actor->y, z); + P_SpawnPointMissile(actor, dx, dy, actor->target->z, MT_CORK, actor->x, actor->y, z); } else - P_SpawnXYZMissile(actor, actor->target, MT_ROCKET, actor->x, actor->y, z); + P_SpawnXYZMissile(actor, actor->target, MT_CORK, actor->x, actor->y, z); } if ((!(actor->eflags & MFE_VERTICALFLIP) && actor->target->z > actor->z) @@ -2773,195 +2661,6 @@ void A_Boss7FireMissiles(mobj_t *actor) actor->z + actor->height/2); } -// Function: A_Boss1Laser -// -// Description: Shoot an object at your target ala Bosses: -// -// var1 = object # to shoot -// var2: -// 0 - Boss 1 Left side -// 1 - Boss 1 Right side -// 2 - Triple laser -// 3 - Boss 1 Middle -// >=3 - Generic middle -// -void A_Boss1Laser(mobj_t *actor) -{ - fixed_t x, y, z, floorz, speed; - INT32 locvar1 = var1; - INT32 locvar2 = (var2 & 65535); - INT32 upperend = (var2>>16); - INT32 i; - angle_t angle; - mobj_t *point; - tic_t dur; - static const UINT8 LASERCOLORS[] = - { - SKINCOLOR_SUPERRED3, - SKINCOLOR_SUPERRED4, - SKINCOLOR_SUPERRED5, - SKINCOLOR_KETCHUP, - SKINCOLOR_RED, - SKINCOLOR_RED, - SKINCOLOR_KETCHUP, - SKINCOLOR_SUPERRED5, - SKINCOLOR_SUPERRED4, - SKINCOLOR_SUPERRED3, - }; - - if (LUA_CallAction(A_BOSS1LASER, actor)) - return; - - if (!actor->target) - return; - - if (actor->state->tics > 1) - dur = actor->tics; - else - { - if ((upperend & 1) && (actor->extravalue2 > 1)) - actor->extravalue2--; - - dur = actor->extravalue2; - } - - switch (locvar2) - { - case 0: - x = actor->x + P_ReturnThrustX(actor, actor->angle+ANGLE_90, FixedMul(44*FRACUNIT, actor->scale)); - y = actor->y + P_ReturnThrustY(actor, actor->angle+ANGLE_90, FixedMul(44*FRACUNIT, actor->scale)); - if (actor->eflags & MFE_VERTICALFLIP) - z = actor->z + actor->height - FixedMul(56*FRACUNIT, actor->scale) - mobjinfo[locvar1].height; - else - z = actor->z + FixedMul(56*FRACUNIT, actor->scale); - break; - case 1: - x = actor->x + P_ReturnThrustX(actor, actor->angle-ANGLE_90, FixedMul(44*FRACUNIT, actor->scale)); - y = actor->y + P_ReturnThrustY(actor, actor->angle-ANGLE_90, FixedMul(44*FRACUNIT, actor->scale)); - if (actor->eflags & MFE_VERTICALFLIP) - z = actor->z + actor->height - FixedMul(56*FRACUNIT, actor->scale) - mobjinfo[locvar1].height; - else - z = actor->z + FixedMul(56*FRACUNIT, actor->scale); - break; - case 2: - var1 = locvar1; var2 = 3; // Fire middle laser - A_Boss1Laser(actor); - var1 = locvar1; var2 = 0; // Fire left laser - A_Boss1Laser(actor); - var1 = locvar1; var2 = 1; // Fire right laser - A_Boss1Laser(actor); - return; - break; - case 3: - x = actor->x + P_ReturnThrustX(actor, actor->angle, FixedMul(42*FRACUNIT, actor->scale)); - y = actor->y + P_ReturnThrustY(actor, actor->angle, FixedMul(42*FRACUNIT, actor->scale)); - z = actor->z + actor->height/2; - break; - default: - x = actor->x; - y = actor->y; - z = actor->z + actor->height/2; - break; - } - - if (!(actor->flags2 & MF2_FIRING) && dur > 1) - { - actor->angle = R_PointToAngle2(x, y, actor->target->x, actor->target->y); - if (mobjinfo[locvar1].seesound) - S_StartSound(actor, mobjinfo[locvar1].seesound); - - point = P_SpawnMobj(x + P_ReturnThrustX(actor, actor->angle, actor->radius), y + P_ReturnThrustY(actor, actor->angle, actor->radius), actor->z - actor->height / 2, MT_EGGMOBILE_TARGET); - point->angle = actor->angle; - point->fuse = dur+1; - P_SetTarget(&point->target, actor->target); - P_SetTarget(&actor->target, point); - } - - angle = R_PointToAngle2(z + (mobjinfo[locvar1].height>>1), 0, actor->target->z, R_PointToDist2(x, y, actor->target->x, actor->target->y)); - - point = P_SpawnMobj(x, y, z, locvar1); - P_SetTarget(&point->target, actor); - point->angle = actor->angle; - speed = point->radius; - point->momz = FixedMul(FINECOSINE(angle>>ANGLETOFINESHIFT), speed); - point->momx = FixedMul(FINESINE(angle>>ANGLETOFINESHIFT), FixedMul(FINECOSINE(point->angle>>ANGLETOFINESHIFT), speed)); - point->momy = FixedMul(FINESINE(angle>>ANGLETOFINESHIFT), FixedMul(FINESINE(point->angle>>ANGLETOFINESHIFT), speed)); - - for (i = 0; i < 256; i++) - { - mobj_t *mo = P_SpawnMobj(point->x, point->y, point->z, point->type); - mo->angle = point->angle; - mo->color = LASERCOLORS[((UINT8)(i + 3*dur) >> 2) % sizeof(LASERCOLORS)]; // codeing - P_UnsetThingPosition(mo); - mo->flags = MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY; - P_SetThingPosition(mo); - - if (dur & 1 && mo->info->missilestate) - { - P_SetMobjState(mo, mo->info->missilestate); - if (mo->info->meleestate) - { - mobj_t *mo2 = P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_PARTICLE); - mo2->flags2 |= MF2_LINKDRAW; - P_SetTarget(&mo2->tracer, actor); - P_SetMobjState(mo2, mo->info->meleestate); - } - } - - if (dur == 1) - P_SpawnGhostMobj(mo); - - x = point->x, y = point->y, z = point->z; - if (P_RailThinker(point)) - break; - } - - x += point->momx; - y += point->momy; - floorz = P_FloorzAtPos(x, y, z, mobjinfo[MT_EGGMOBILE_FIRE].height); - if (z - floorz < mobjinfo[MT_EGGMOBILE_FIRE].height>>1 && dur & 1) - { - point = P_SpawnMobj(x, y, floorz, MT_EGGMOBILE_FIRE); - point->angle = actor->angle; - point->destscale = actor->scale; - P_SetScale(point, point->destscale); - P_SetTarget(&point->target, actor); - P_MobjCheckWater(point); - if (point->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER)) - { - for (i = 0; i < 2; i++) - { - UINT8 size = 3; - mobj_t *steam = P_SpawnMobj(x, y, point->watertop - size*mobjinfo[MT_DUST].height, MT_DUST); - P_SetScale(steam, size*actor->scale); - P_SetObjectMomZ(steam, FRACUNIT + 2*P_RandomFixed(PR_UNDEFINED), true); - P_InstaThrust(steam, FixedAngle(P_RandomKey(PR_UNDEFINED, 360)*FRACUNIT), 2*P_RandomFixed(PR_UNDEFINED)); - if (point->info->painsound) - S_StartSound(steam, point->info->painsound); - } - } - else - { - fixed_t distx = P_ReturnThrustX(point, point->angle, point->radius); - fixed_t disty = P_ReturnThrustY(point, point->angle, point->radius); - if (P_TryMove(point, point->x + distx, point->y + disty, false, NULL) // prevents the sprite from clipping into the wall or dangling off ledges - && P_TryMove(point, point->x - 2*distx, point->y - 2*disty, false, NULL) - && P_TryMove(point, point->x + distx, point->y + disty, false, NULL)) - { - if (point->info->seesound) - S_StartSound(point, point->info->seesound); - } - else - P_RemoveMobj(point); - } - } - - if (dur > 1) - actor->flags2 |= MF2_FIRING; - else - actor->flags2 &= ~MF2_FIRING; -} - // Function: A_FocusTarget // // Description: Home in on your target. @@ -3316,9 +3015,7 @@ void A_Scream(mobj_t *actor) if (LUA_CallAction(A_SCREAM, actor)) return; - if (actor->tracer && (actor->tracer->type == MT_SHELL || actor->tracer->type == MT_FIREBALL)) - S_StartScreamSound(actor, sfx_mario2); - else if (actor->info->deathsound) + if (actor->info->deathsound) S_StartScreamSound(actor, actor->info->deathsound); } @@ -4460,13 +4157,7 @@ static BlockItReturn_t PIT_MinusCarry(mobj_t *thing) void A_MinusDigging(mobj_t *actor) { INT32 locvar1 = var1; - INT32 rad = 32; - angle_t fa = (actor->angle >> ANGLETOFINESHIFT) & FINEMASK; - fixed_t dis = actor->info->speed*4; - fixed_t x = FINECOSINE(fa)*dis + actor->x + FRACUNIT*P_RandomRange(PR_UNDEFINED, -rad, rad); - fixed_t y = FINESINE(fa)*dis + actor->y + FRACUNIT*P_RandomRange(PR_UNDEFINED, -rad, rad); fixed_t mz = (actor->eflags & MFE_VERTICALFLIP) ? actor->ceilingz : actor->floorz; - mobj_t *par; if (LUA_CallAction(A_MINUSDIGGING, actor)) return; @@ -4477,24 +4168,12 @@ void A_MinusDigging(mobj_t *actor) return; } - par = P_SpawnMobj(actor->x, actor->y, mz, MT_MINUSDIRT); - if (actor->eflags & MFE_VERTICALFLIP) - par->eflags |= MFE_VERTICALFLIP; - P_TryMove(par, x, y, false, NULL); - // If close enough, prepare to attack if (P_AproxDistance(actor->x - actor->target->x, actor->y - actor->target->y) < actor->radius*2) { P_SetMobjState(actor, actor->info->meleestate); P_TryMove(actor, actor->target->x, actor->target->y, false, NULL); S_StartSound(actor, actor->info->attacksound); - - // Spawn growing dirt pile. - par = P_SpawnMobj(actor->x, actor->y, mz, MT_MINUSDIRT); - P_SetMobjState(par, actor->info->raisestate); - P_SetScale(par, actor->scale*2); - if (actor->eflags & MFE_VERTICALFLIP) - par->eflags |= MFE_VERTICALFLIP; return; } @@ -5354,7 +5033,7 @@ void A_RingExplode(mobj_t *actor) return; for (d = 0; d < 16; d++) - P_SpawnParaloop(actor->x, actor->y, actor->z + actor->height, FixedMul(actor->info->painchance, actor->scale), 16, MT_NIGHTSPARKLE, S_NULL, d*(ANGLE_22h), true); + P_SpawnParaloop(actor->x, actor->y, actor->z + actor->height, FixedMul(actor->info->painchance, actor->scale), 16, MT_SIGNSPARKLE, S_NULL, d*(ANGLE_22h), true); S_StartSound(actor, sfx_prloop); @@ -6217,7 +5896,7 @@ void A_TurretFire(mobj_t *actor) dist = FixedMul(2048*FRACUNIT, actor->scale); if (!locvar1) - locvar1 = MT_TURRETLASER; + locvar1 = MT_CORK; while (P_SupermanLook4Players(actor) && count < MAXPLAYERS) { @@ -6255,7 +5934,7 @@ void A_SuperTurretFire(mobj_t *actor) dist = FixedMul(2048*FRACUNIT, actor->scale); if (!locvar1) - locvar1 = MT_TURRETLASER; + locvar1 = MT_CORK; while (P_SupermanLook4Players(actor) && count < MAXPLAYERS) { @@ -6640,32 +6319,6 @@ void A_SetReactionTime(mobj_t *actor) actor->reactiontime = actor->info->reactiontime; } -// Function: A_Boss1Spikeballs -// -// Description: Boss 1 spikeball spawning loop. -// -// var1 = ball number -// var2 = total balls -// -void A_Boss1Spikeballs(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - mobj_t *ball; - - if (LUA_CallAction(A_BOSS1SPIKEBALLS, actor)) - return; - - ball = P_SpawnMobj(actor->x, actor->y, actor->z, MT_EGGMOBILE_BALL); - P_SetTarget(&ball->target, actor); - ball->movedir = FixedAngle(FixedMul(FixedDiv(locvar1<threshold = ball->radius + actor->radius + ball->info->painchance; - - S_StartSound(ball, ball->info->seesound); - var1 = ball->state->var1, var2 = ball->state->var2; - ball->state->action.acp1(ball); -} - // Function: A_Boss3TakeDamage // // Description: Called when Boss 3 takes damage. @@ -7709,145 +7362,6 @@ void A_SetObjectFlags2(mobj_t *actor) actor->flags2 = locvar1; } -// Function: A_BossJetFume -// -// Description: Spawns jet fumes/other attachment miscellany for the boss. To only be used when he is spawned. -// -// var1: -// 0 - Triple jet fume pattern -// 1 - Unused (formerly Boss 3's propeller) -// 2 - Metal Sonic jet fume -// 3 - Boss 4 jet flame -// var2 = unused -// -void A_BossJetFume(mobj_t *actor) -{ - mobj_t *filler; - INT32 locvar1 = var1; - - if (LUA_CallAction(A_BOSSJETFUME, actor)) - return; - - if (locvar1 == 0) // Boss1 jet fumes - { - fixed_t jetx, jety, jetz; - - jetx = actor->x + P_ReturnThrustX(actor, actor->angle, -FixedMul(64*FRACUNIT, actor->scale)); - jety = actor->y + P_ReturnThrustY(actor, actor->angle, -FixedMul(64*FRACUNIT, actor->scale)); - if (actor->eflags & MFE_VERTICALFLIP) - jetz = actor->z + actor->height - FixedMul(38*FRACUNIT + mobjinfo[MT_JETFUME1].height, actor->scale); - else - jetz = actor->z + FixedMul(38*FRACUNIT, actor->scale); - - filler = P_SpawnMobj(jetx, jety, jetz, MT_JETFUME1); - P_SetTarget(&filler->target, actor); - filler->destscale = actor->scale; - P_SetScale(filler, filler->destscale); - if (actor->eflags & MFE_VERTICALFLIP) - filler->flags2 |= MF2_OBJECTFLIP; - filler->fuse = 56; - - if (actor->eflags & MFE_VERTICALFLIP) - jetz = actor->z + actor->height - FixedMul(12*FRACUNIT + mobjinfo[MT_JETFUME1].height, actor->scale); - else - jetz = actor->z + FixedMul(12*FRACUNIT, actor->scale); - - filler = P_SpawnMobj(jetx + P_ReturnThrustX(actor, actor->angle-ANGLE_90, FixedMul(24*FRACUNIT, actor->scale)), - jety + P_ReturnThrustY(actor, actor->angle-ANGLE_90, FixedMul(24*FRACUNIT, actor->scale)), - jetz, MT_JETFUME1); - P_SetTarget(&filler->target, actor); - filler->destscale = actor->scale; - P_SetScale(filler, filler->destscale); - if (actor->eflags & MFE_VERTICALFLIP) - filler->flags2 |= MF2_OBJECTFLIP; - filler->fuse = 57; - - filler = P_SpawnMobj(jetx + P_ReturnThrustX(actor, actor->angle+ANGLE_90, FixedMul(24*FRACUNIT, actor->scale)), - jety + P_ReturnThrustY(actor, actor->angle+ANGLE_90, FixedMul(24*FRACUNIT, actor->scale)), - jetz, MT_JETFUME1); - P_SetTarget(&filler->target, actor); - filler->destscale = actor->scale; - P_SetScale(filler, filler->destscale); - if (actor->eflags & MFE_VERTICALFLIP) - filler->flags2 |= MF2_OBJECTFLIP; - filler->fuse = 58; - - P_SetTarget(&actor->tracer, filler); - } - /*else if (locvar1 == 1) // Boss 3 propeller - { - fixed_t jetx, jety, jetz; - - jetx = actor->x + P_ReturnThrustX(actor, actor->angle, -60*actor->scale); - jety = actor->y + P_ReturnThrustY(actor, actor->angle, -60*actor->scale); - if (actor->eflags & MFE_VERTICALFLIP) - jetz = actor->z + actor->height - FixedMul(17*FRACUNIT + mobjinfo[MT_PROPELLER].height, actor->scale); - else - jetz = actor->z + FixedMul(17*FRACUNIT, actor->scale); - - filler = P_SpawnMobj(jetx, jety, jetz, MT_PROPELLER); - P_SetTarget(&filler->target, actor); - filler->destscale = actor->scale; - P_SetScale(filler, filler->destscale); - if (actor->eflags & MFE_VERTICALFLIP) - filler->flags2 |= MF2_OBJECTFLIP; - filler->angle = actor->angle - ANGLE_180; - - P_SetTarget(&actor->tracer, filler); - }*/ - else if (locvar1 == 2) // Metal Sonic jet fumes - { - filler = P_SpawnMobj(actor->x, actor->y, actor->z, MT_JETFUME1); - P_SetTarget(&filler->target, actor); - filler->fuse = 59; - P_SetTarget(&actor->tracer, filler); - P_SetScale(filler, (filler->destscale = actor->scale/3)); - if (actor->eflags & MFE_VERTICALFLIP) - filler->flags2 |= MF2_OBJECTFLIP; - filler->color = SKINCOLOR_CYAN; - filler->colorized = true; - } - else if (locvar1 == 3) // Boss 4 jet flame - { - fixed_t jetz; - if (actor->eflags & MFE_VERTICALFLIP) - jetz = actor->z + actor->height + FixedMul(50*FRACUNIT - mobjinfo[MT_JETFLAME].height, actor->scale); - else - jetz = actor->z - 50*actor->scale; - filler = P_SpawnMobj(actor->x, actor->y, jetz, MT_JETFLAME); - P_SetTarget(&filler->target, actor); - // Boss 4 already uses its tracer for other things - filler->destscale = actor->scale; - P_SetScale(filler, filler->destscale); - if (actor->eflags & MFE_VERTICALFLIP) - filler->flags2 |= MF2_OBJECTFLIP; - } - else if (locvar1 == 4) // Boss 4 Spectator Eggrobo jet flame - { - fixed_t jetx, jety, jetz, movefactor = 12; - - jetz = actor->z; - if (actor->eflags & MFE_VERTICALFLIP) - jetz += (actor->height - FixedMul(mobjinfo[MT_EGGROBO1JET].height, actor->scale)); - - while (true) - { - jetx = actor->x + P_ReturnThrustX(actor, actor->angle+ANGLE_90, movefactor*actor->scale) - P_ReturnThrustX(actor, actor->angle, 19*actor->scale); - jety = actor->y + P_ReturnThrustY(actor, actor->angle+ANGLE_90, movefactor*actor->scale) - P_ReturnThrustY(actor, actor->angle, 19*actor->scale); - filler = P_SpawnMobj(jetx, jety, jetz, MT_EGGROBO1JET); - filler->movefactor = movefactor; - P_SetTarget(&filler->target, actor); - filler->destscale = actor->scale; - P_SetScale(filler, filler->destscale); - if (actor->eflags & MFE_VERTICALFLIP) - filler->flags2 |= MF2_OBJECTFLIP; - if (movefactor <= 0) - break; - movefactor = -movefactor; - } - } -} - // Function: A_RandomState // // Description: Chooses one of the two state numbers supplied randomly. @@ -11292,196 +10806,6 @@ void A_CheckFlags2(mobj_t *actor) P_SetMobjState(actor, (statenum_t)locvar2); } -// Function: A_Boss5FindWaypoint -// -// Description: Finds the next waypoint in sequence and sets it as its tracer. -// -// var1 = if 1, always go to ambush-marked waypoint. if 2, go to MT_BOSSFLYPOINT. -// var2 = unused -// -void A_Boss5FindWaypoint(mobj_t *actor) -{ - INT32 locvar1 = var1; - boolean avoidcenter; - INT32 i; - INT32 bossid = actor->thing_args[0]; - - if (LUA_CallAction(A_BOSS5FINDWAYPOINT, actor)) - return; - - avoidcenter = !actor->tracer || (actor->health == actor->info->damage+1); - - if (locvar1 == 2) // look for the boss flypoint - { - P_SetTarget(&actor->tracer, P_FindBossFlyPoint(actor, bossid)); - - if (!actor->tracer) - return; // no boss flypoints found - } - else if (locvar1 == 1) // always go to ambush-marked waypoint - { - boolean found = false; - - if (avoidcenter) - goto nowaypoints; // if we can't go the center, why on earth are we doing this? - - TAG_ITER_THINGS(bossid, i) - { - if (!mapthings[i].mobj) - continue; - if (mapthings[i].mobj->type != MT_FANGWAYPOINT) - continue; - if (!(mapthings[i].thing_args[0])) - continue; - - P_SetTarget(&actor->tracer, mapthings[i].mobj); - found = true; - break; - } - - if (!found) - goto nowaypoints; - } - else // locvar1 == 0 - { - fixed_t hackoffset = P_MobjFlip(actor)*56*FRACUNIT; - INT32 numfangwaypoints = 0; - mobj_t **fangwaypoints; - INT32 key; - - actor->z += hackoffset; - - // first, count how many waypoints we have - TAG_ITER_THINGS(bossid, i) - { - if (!mapthings[i].mobj) - continue; - if (mapthings[i].mobj->type != MT_FANGWAYPOINT) - continue; - if (actor->tracer == mapthings[i].mobj) // this was your tracer last time - continue; - if (mapthings[i].thing_args[0]) - { - if (avoidcenter) - continue; - } - else if (mapthings[i].mobj->reactiontime > 0) - continue; - if (!P_CheckSight(actor, mapthings[i].mobj)) - continue; - numfangwaypoints++; - } - - // players also count as waypoints apparently - if (actor->extravalue2 > 1) - { - for (i = 0; i < MAXPLAYERS; i++) - { - if (!playeringame[i]) - continue; - if (!players[i].mo) - continue; - if (players[i].spectator) - continue; - if (players[i].mo->health <= 0) - continue; - if (players[i].flashing) - continue; - if (actor->tracer == players[i].mo) // this was your tracer last time - continue; - if (!P_CheckSight(actor, players[i].mo)) - continue; - numfangwaypoints++; - } - } - - if (!numfangwaypoints) - { - // restore z position - actor->z -= hackoffset; - goto nowaypoints; // no waypoints :( - } - - // allocate the table and reset count to zero - fangwaypoints = Z_Calloc(sizeof(*tubewaypoints)*numfangwaypoints, PU_STATIC, NULL); - numfangwaypoints = 0; - - // now find them again and add them to the table! - TAG_ITER_THINGS(bossid, i) - { - if (!mapthings[i].mobj) - continue; - if (mapthings[i].mobj->type != MT_FANGWAYPOINT) - continue; - if (actor->tracer == mapthings[i].mobj) // this was your tracer last time - continue; - if (mapthings[i].thing_args[0]) - { - if (avoidcenter) - continue; - } - else if (mapthings[i].mobj->reactiontime > 0) - { - mapthings[i].mobj->reactiontime--; - continue; - } - if (!P_CheckSight(actor, mapthings[i].mobj)) - continue; - fangwaypoints[numfangwaypoints++] = mapthings[i].mobj; - } - - if (actor->extravalue2 > 1) - { - for (i = 0; i < MAXPLAYERS; i++) - { - if (!playeringame[i]) - continue; - if (!players[i].mo) - continue; - if (players[i].spectator) - continue; - if (players[i].mo->health <= 0) - continue; - if (players[i].flashing) - continue; - if (actor->tracer == players[i].mo) // this was your tracer last time - continue; - if (!P_CheckSight(actor, players[i].mo)) - continue; - fangwaypoints[numfangwaypoints++] = players[i].mo; - } - } - - // restore z position - actor->z -= hackoffset; - - if (!numfangwaypoints) - { - Z_Free(fangwaypoints); // free table - goto nowaypoints; // ??? - } - - key = P_RandomKey(PR_UNDEFINED, numfangwaypoints); - - P_SetTarget(&actor->tracer, fangwaypoints[key]); - if (actor->tracer->type == MT_FANGWAYPOINT) - actor->tracer->reactiontime = numfangwaypoints/4; // Monster Iestyn: is this how it should be? I count center waypoints as waypoints unlike the original Lua script - Z_Free(fangwaypoints); // free table - } - - // now face the tracer you just set! - A_FaceTracer(actor); - return; - -nowaypoints: - // no waypoints at all, guess the mobj has to disappear - if (actor->health) - P_KillMobj(actor, NULL, NULL, DMG_NORMAL); - else - P_RemoveMobj(actor); - return; -} - // Function: A_DoNPCSkid // // Description: Something that looks like a player is skidding. @@ -11787,99 +11111,6 @@ void A_Boss5MakeItRain(mobj_t *actor) actor->extravalue2 = 0; } -// Function: A_Boss5MakeJunk -// -// Description: Make a mess. -// -// var1 = state # to set on MT_BROKENROBOT (if 0 do nothing, if -1 go to if colorized) -// var2 = mode (-1 = spin, 0 = make 1, & 1 make 8, & 2 alart mode) -// -void A_Boss5MakeJunk(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - mobj_t *broked = NULL; - angle_t ang; - INT32 i = ((locvar2 & 1) ? 8 : 1); - - if (LUA_CallAction(A_BOSS5MAKEJUNK, actor)) - return; - - if (locvar1 < 0 && (actor->flags2 & MF2_SLIDEPUSH)) // this entire action is a hack, don't judge me - { - INT32 curextravalue2 = actor->extravalue2; - P_SpawnMobjFromMobj(actor, 0, 0, 0, MT_PROJECTORLIGHT); - actor->z += P_MobjFlip(actor)*actor->height; - actor->flags |= MF_NOGRAVITY; - S_StartSound(actor, sfx_vwre); - actor->extravalue2 = 49; - P_SetMobjState(actor, -locvar1); - actor->extravalue2 = curextravalue2; - actor->angle -= FixedAngle((49*45)<extravalue2)/50; - if (trans > 9) - trans = 9; - if (trans < 0) - trans = 0; - if (!(actor->extravalue2 & 1)) - { - if (actor->extravalue2 > 10) - { - mobj_t *front = P_SpawnMobjFromMobj(actor, 0, 0, 0, MT_VWREF); - broked = P_SpawnMobjFromMobj(front, 0, 0, 0, MT_VWREB); - front->z = broked->z = front->z - broked->height; - P_SetObjectMomZ(front, (4<momz = front->momz; - broked->fuse = front->fuse = (actor->height+(2*front->height))/front->momz; - } - if (!(actor->colorized = !actor->colorized)) - actor->frame |= FF_FULLBRIGHT; - } - actor->angle += ANGLE_45; - actor->frame = (actor->frame & ~FF_TRANSMASK)|(trans<fuse = TICRATE; - else - broked->fuse = (((locvar2 & 1) ? 4 : 2)*TICRATE)/3; - broked->angle = ang; - P_InstaThrust(broked, ang, ((locvar2 & 2) ? 8 : 5)*actor->scale); - P_SetObjectMomZ(broked, (((locvar2) ? 4 : 0) + P_RandomRange(PR_UNDEFINED, 2, 5))< 0) - P_SetMobjState(broked, locvar1); - if (!P_MobjWasRemoved(broked)) - P_MoveOrigin(broked, broked->x + broked->momx, broked->y + broked->momy, broked->z); - ang += ANGLE_45; - } - - if (locvar2 & 2) - { - broked = P_SpawnMobjFromMobj(actor, 0, 0, 64<fuse = states[S_FANG_INTRO12].tics+10; - P_SetMobjState(broked, S_ALART1); - } - else if (locvar2 & 1) - { - broked->z += broked->momz; - S_StartSound(actor, sfx_s3kccs); - actor->flags &= ~MF_NOCLIPTHING; - } - else - S_StartSound(actor, sfx_s3kd3s); -} - // Function: A_LookForBetter // // Description: A_Look, except it finds a better target in multiplayer, and doesn't lose the target in singleplayer. @@ -12116,90 +11347,6 @@ void A_DebrisRandom(mobj_t *actor) P_Thrust(actor, actor->angle, FRACUNIT * 2); } -static mobj_t *P_TrainSeg(mobj_t *src, fixed_t x, fixed_t y, fixed_t z, angle_t ang, spritenum_t spr, UINT32 frame) -{ - mobj_t *s = P_SpawnMobj(x, y, z, MT_TRAINSEG); - s->fuse = 16*TICRATE; - s->sprite = spr; - s->frame = frame|FF_PAPERSPRITE; - s->angle = ang; - P_Thrust(s, src->angle, 7*FRACUNIT); - return s; -} - -// Function: A_TrainCameo -// -// Description: Sets up train cameo locomotive. -// -// var1 = Train width. -// var2 = Train length. -// -void A_TrainCameo(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - fixed_t x = actor->x; - fixed_t y = actor->y; - fixed_t z = actor->z; - angle_t ang = actor->angle; - mobj_t *m; - spritenum_t spr = SPR_TRAE; - fixed_t span = locvar1*FRACUNIT; - fixed_t len = locvar2*FRACUNIT; - - if (LUA_CallAction(A_TRAINCAMEO, actor)) - return; - - //Spawn sides. - P_TrainSeg(actor, x, y + span, z, ang, spr, 0); - P_TrainSeg(actor, x, y - span, z, ang, spr, 0); - - //Center. - P_TrainSeg(actor, x, y, z, ang, spr, 1); - - //Front and back. - P_TrainSeg(actor, x + len, y, z, ang + ANGLE_90, spr, 2); - P_TrainSeg(actor, x - len, y, z, ang + ANGLE_90, spr, 2); - - //Smoke spawner. - m = P_TrainSeg(actor, x - (20 * FRACUNIT), y, z + (30 * FRACUNIT), ang + ANGLE_90, spr, 0); - P_SetMobjState(m, S_TRAINPUFFMAKER); -} - -// Function: A_TrainCameo2 -// -// Description: Sets up train cameo wagon. -// -// var1 = Train width. -// var2 = Train length. -// -void A_TrainCameo2(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - fixed_t x = actor->x; - fixed_t y = actor->y; - fixed_t z = actor->z; - angle_t ang = actor->angle; - spritenum_t spr = SPR_TRAI; - fixed_t span = locvar1*FRACUNIT; - fixed_t len = locvar2*FRACUNIT; - - if (LUA_CallAction(A_TRAINCAMEO2, actor)) - return; - - //Spawn sides. - P_TrainSeg(actor, x, y + span, z, ang, spr, 0); - P_TrainSeg(actor, x, y - span, z, ang, spr, 0); - - //Center. - P_TrainSeg(actor, x, y, z, ang, spr, 1); - - //Front and back. - P_TrainSeg(actor, x + len, y, z, ang + ANGLE_90, spr, 2); - P_TrainSeg(actor, x - len, y, z, ang + ANGLE_90, spr, 2); -} - // Function: A_CanarivoreGas // // Description: Releases gas clouds. Used by the Canarivore. @@ -12667,46 +11814,6 @@ void A_FireShrink(mobj_t *actor) actor->scalespeed = mapobjectscale/locvar2; } -// Function: A_SpawnPterabytes -// -// Description: Spawn Pterabytes around the actor in a circle. -// -// var1 = unused -// var2 = unused -// -void A_SpawnPterabytes(mobj_t *actor) -{ - mobj_t *waypoint, *ptera; - fixed_t c, s; - fixed_t rad = 280*FRACUNIT; - angle_t ang = 0; - angle_t interval, fa; - UINT8 amount = 1; - UINT8 i; - - if (LUA_CallAction(A_SPAWNPTERABYTES, actor)) - return; - - amount = min(1, actor->thing_args[0]); - - interval = FixedAngle(FRACUNIT*360/amount); - - for (i = 0; i < amount; i++) - { - fa = (ang >> ANGLETOFINESHIFT) & FINEMASK; - c = FINECOSINE(fa); - s = FINESINE(fa); - waypoint = P_SpawnMobjFromMobj(actor, FixedMul(c, rad), FixedMul(s, rad), 0, MT_PTERABYTEWAYPOINT); - waypoint->angle = ang + ANGLE_90; - P_SetTarget(&waypoint->tracer, actor); - ptera = P_SpawnMobjFromMobj(waypoint, 0, 0, 0, MT_PTERABYTE); - ptera->angle = waypoint->angle; - P_SetTarget(&ptera->tracer, waypoint); - ptera->extravalue1 = 0; - ang += interval; - } -} - // Function: A_PterabyteHover // // Description: Hover in a circular fashion, bobbing up and down slightly. @@ -12847,41 +11954,6 @@ void A_RolloutRock(mobj_t *actor) } -// Function: A_DragonbomberSpawn -// -// Description: Spawns the body parts for Dragonbomber -// -// var1 = Tail segments to spawn -// var2 = unused -// -void A_DragonbomberSpawn(mobj_t *actor) -{ - UINT8 i; - mobj_t *mo = actor; - - if (LUA_CallAction(A_DRAGONBOMBERSPAWN, actor)) - return; - - for (i = 0; i < var1; i++) // spawn tail segments - { - mobj_t *segment; - fixed_t x, y; - x = P_ReturnThrustX(mo, mo->angle, -mo->radius << 1); - y = P_ReturnThrustY(mo, mo->angle, -mo->radius << 1); - segment = P_SpawnMobjFromMobj(mo, x, y, 0, MT_DRAGONTAIL); - P_SetTarget(&segment->target, mo); - P_SetTarget(&mo->tracer, segment); - segment->angle = mo->angle; - mo = segment; - } - for (i = 0; i < 2; i++) // spawn wings - { - mo = P_SpawnMobjFromMobj(actor, 0, 0, 0, MT_DRAGONWING); - P_SetTarget(&mo->target, actor); - mo->movedir = ANGLE_90 + i * ANGLE_180; - } -} - // Function: A_DragonWing // // Description: Moves actor such that it is placed away from its target at a distance equal to the target's radius in the direction of its target's angle. @@ -13205,13 +12277,10 @@ void A_RandomShadowFrame(mobj_t *actor) if (!actor->extravalue1) // Hack that spawns thoks that look like random shadows. Otherwise the state would overwrite our frame and that's a pain. { - fake = P_SpawnMobj(actor->x, actor->y, actor->z, MT_THOK); - fake->sprite = SPR_ENM1; - fake->frame = P_RandomRange(PR_DECORATION, 0, 6); + fake = P_SpawnGhostMobj(actor); P_SetScale(fake, FRACUNIT*3/2); fake->scale = FRACUNIT*3/2; fake->destscale = FRACUNIT*3/2; - fake->angle = actor->angle; fake->tics = -1; actor->renderflags |= RF_DONTDRAW; actor->extravalue1 = 1; @@ -13241,62 +12310,6 @@ void A_RandomShadowFrame(mobj_t *actor) return; } -// A_RoamingShadowThinker -// Thinker for Midnight Channel's Roaming Shadows: -void A_RoamingShadowThinker(mobj_t *actor) -{ - mobj_t *wind; - - if (LUA_CallAction(A_ROAMINGSHADOWTHINKER, (actor))) - return; - - // extravalue1 replaces "movetimer" - // extravalue2 replaces "stoptimer" - - P_SetScale(actor, FRACUNIT*3/2); - if (!actor->extravalue2) - { - P_InstaThrust(actor, actor->angle, 8<extravalue1 = ((actor->extravalue1) ? (actor->extravalue1-1) : (TICRATE*5+1)); // deplete timer if set, set to 5 ticrate otherwise. - if (actor->extravalue1 == 1) // if timer reaches 1, do a u-turn. - { - actor->extravalue1 = 0; - actor->extravalue2 = 60; - } - // Search for and attack Players venturing too close in front of us. - - if (P_LookForPlayers(actor, false, false, 256<target && !actor->target->player->flashing - && !actor->target->player->invincibilitytimer - && !actor->target->player->growshrinktimer - && !actor->target->player->spinouttimer) - { - // send them flying and spawn the WIND! - P_InstaThrust(actor->target, 0, 0); - P_DamageMobj(actor->target, actor, actor, 1, DMG_NORMAL); - P_SetObjectMomZ(actor->target, 16<target, sfx_wind1); - - // Spawn the WIND: - wind = P_SpawnMobj(actor->target->x, actor->target->y, actor->target->z, MT_THOK); // Opaque layer: - P_SetMobjState(wind, S_GARU1); - P_SetScale(wind, FRACUNIT*3/2); - wind = P_SpawnMobj(actor->target->x, actor->target->y, actor->target->z, MT_THOK); // Translucent layer: - P_SetMobjState(wind, S_TGARU0); - P_SetScale(wind, FRACUNIT*3/2); - wind->destscale = 30<angle += ANG1*3; - actor->extravalue2--; - } - return; -} - // A_MayonakaArrow // Used for the arrow sprite animations in Mayonaka. It's only extra visual bullshit to make em more random. @@ -13336,230 +12349,6 @@ void A_MayonakaArrow(mobj_t *actor) return; } -// A_MementosTPParticles -// Mementos teleporters particles effects. Short and simple. - -void A_MementosTPParticles(mobj_t *actor) -{ - mobj_t *particle; - mobj_t *mo2; - int i = 0; - thinker_t *th; - - if (LUA_CallAction(A_MEMENTOSTPPARTICLES, (actor))) - return; - - for (; i<4; i++) - { - particle = P_SpawnMobj(actor->x + (P_RandomRange(PR_DECORATION, -256, 256)<y + (P_RandomRange(PR_DECORATION, -256, 256)<z + (P_RandomRange(PR_DECORATION, 48, 256)<frame = 0; - particle->color = ((i%2) ? (SKINCOLOR_RED) : (SKINCOLOR_BLACK)); - particle->destscale = 1; - //P_HomingAttack(particle, actor); // Really now, Lat... - } - - // Although this is mostly used to spawn particles, we will also save the OTHER teleport inside actor->target. That way teleporting doesn't require a thinker iteration. - // Doesn't seem like much given the small amount of mobjs this map has but heh. - if (!actor->target) - { - for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) - { - if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) - continue; - - mo2 = (mobj_t *)th; - if (mo2->type == MT_MEMENTOSTP && mo2 != actor) - { - P_SetTarget(&actor->target, mo2); // The main target we're pursing. - break; - } - } - } -} - -// A_ReaperThinker -// Mementos's Reaper's thinker. A huge pain in the Derek Bum to translate from Lua to this shite if you ask me. - -void A_ReaperThinker(mobj_t *actor) -{ - mobj_t *particle; // particles to spawn - int i = 0; // for loops - angle_t an = ANGLE_22h; // Reminder that angle constants suck. - - //Waypoint stuff: - mobj_t *mo2; - thinker_t *th; - - //Player targetting stuff: - UINT32 maxscore = 0; // we target the player with the highest score so yeah there you go. - player_t *player; // used as a shortcut in a loop. - mobj_t *targetplayermo = NULL; // the player mo we can eventually target, or whatever. - - if (LUA_CallAction(A_REAPERTHINKER, (actor))) - return; - - // We don't have custom variables or whatever so we'll do with whatever the fuck we have left. - - if (actor->health == 1000) // if health is 1000, set it to a small scale and have it start growing with destscale. Then set the health to uh, not 1000. - { - actor->scale = 1; - actor->destscale = 2<scalespeed = FRACUNIT/24; // Should take a bit less than 2 seconds to fully grow. - S_StartSound(NULL, sfx_chain); - actor->health--; // now we have 999 health, so that above won't happen again. Awesome. - } - - if (actor->scale < 2<x + (P_RandomRange(PR_DECORATION, -60, 60)<y + (P_RandomRange(PR_DECORATION, -60, 60)<z, MT_THOK); - particle->momz = 20<color = ((i%2 !=0) ? (SKINCOLOR_RED) : (SKINCOLOR_BLACK)); - particle->frame = 0; - P_SetScale(particle, FRACUNIT/2); - } - - // Spawn particles in some edgy circle or w/e. - - if (leveltime%5 != 0) // spawn the thing under that every tic. - return; - - i=0; - for (; i<15; i++) // spawn in a circle formation or w/e. - { - particle = P_SpawnMobj(actor->x, actor->y, actor->z, MT_THOK); - particle->momz = 20<color = ((i%2 !=0) ? (SKINCOLOR_RED) : (SKINCOLOR_BLACK)); - particle->frame = 0; - P_SetScale(particle, FRACUNIT/2); - P_InstaThrust(particle, an*i, 30<flags = MF_NOGRAVITY|MF_PAIN|MF_SPECIAL|MF_NOCLIP|MF_NOCLIPHEIGHT; // set our flags to be a damaging thing. - // Handle animation: - if (!(leveltime%5)) - actor->extravalue2 = (actor->extravalue2 < 9) ? (actor->extravalue2+1) : (0); // Ghetto animation, but hey it works for what it's worth - - // Chain sfx - if (!S_SoundPlaying(actor, sfx_chain)) - S_StartSound(actor, sfx_chain); - - actor->frame = actor->extravalue2; // yes i'm that bad at maths don't @ me. - - if (!actor->target) - { - if (actor->hnext) - { - P_SetTarget(&actor->target, actor->hnext); // Default back to last waypoint. - return; - } - - // We have no target and oughta find one, so let's scan through thinkers for a waypoint of angle 0, or something. - for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) - { - if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) - continue; - - mo2 = (mobj_t *)th; - - if (mo2->type != MT_REAPERWAYPOINT) - continue; - if (mo2->spawnpoint->angle != 0) - continue; - - P_SetTarget(&actor->target, mo2); // The main target we're pursing. - P_SetTarget(&actor->hnext, mo2); // The last waypoint we hit. We will default back to that if a player goes out of our range! - actor->extravalue1 = 0; // This will store the angle of the last waypoint we touched. This will essentially be useful later on. - if (!actor->tracer) // If we already have a tracer (Waypoint #0), don't do anything. - { - P_SetTarget(&actor->tracer, mo2); // Because our target might be a player OR a waypoint, we need some sort of fallback option. This will always be waypoint 0. - break; - } - } - } - else // Awesome, we now have a target. - { - // Follow target: - P_InstaThrust(actor, R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y), 20<angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y); - - // The player we should target if it's near us: - for (i=0; imo && K_Bumpers(player) && player->score >= maxscore) - { - targetplayermo = player->mo; - maxscore = player->score; - } - } - - // Try to target that player: - if (targetplayermo) - { - if (P_LookForPlayers(actor, false, false, 1024<target == targetplayermo && actor->target && !actor->target->player->flashing - && !actor->target->player->invincibilitytimer - && !actor->target->player->growshrinktimer - && !actor->target->player->spinouttimer)) - P_SetTarget(&actor->target, actor->hnext); - // if the above isn't correct, then we should go back to targetting waypoints or something. - } - } - - // Waypoint behavior. - if (actor->target->type == MT_REAPERWAYPOINT) - { - if (R_PointToDist2(actor->x, actor->y, actor->target->x, actor->target->y) < 22<target, NULL); // remove target so we can default back to first waypoint if things go ham. - - // If we reach close to a waypoint, then we should go to the NEXT one. - for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) - { - if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) - continue; - - mo2 = (mobj_t *)th; - - if (mo2->type != MT_REAPERWAYPOINT) - continue; - if (mo2->spawnpoint->angle != actor->extravalue1+1) - continue; - - P_SetTarget(&actor->target, mo2); // The main target we're pursing. - P_SetTarget(&actor->hnext, mo2); // The last waypoint we hit. We will default back to that if a player goes out of our range! - actor->extravalue1++; // This will store the angle of the last waypoint we touched. This will essentially be useful later on. - break; - } - } - - - if (!actor->target) // If we have no target, revert back to waypoint 0. - { - actor->extravalue1 = 0; - P_SetTarget(&actor->target, actor->tracer); - } - } - else // if our target ISN'T a waypoint, then it can only be a player. - { - if (!P_CheckSight(actor, actor->target) || R_PointToDist2(actor->x, actor->y, actor->target->x, actor->target->y) > 1024<target, actor->hnext); - } - } -} - void A_FlameShieldPaper(mobj_t *actor) { INT32 framea = 0; diff --git a/src/p_floor.c b/src/p_floor.c index 1a7f2285a..960e84d83 100644 --- a/src/p_floor.c +++ b/src/p_floor.c @@ -980,16 +980,6 @@ static mobj_t *SearchMarioNode(msecnode_t *node) case MT_THOK: case MT_GHOST: case MT_OVERLAY: - case MT_ELEMENTAL_ORB: - case MT_ATTRACT_ORB: - case MT_FORCE_ORB: - case MT_ARMAGEDDON_ORB: - case MT_WHIRLWIND_ORB: - case MT_PITY_ORB: - case MT_FLAMEAURA_ORB: - case MT_BUBBLEWRAP_ORB: - case MT_THUNDERCOIN_ORB: - case MT_IVSP: case MT_SUPERSPARK: case MT_RAIN: case MT_SNOWFLAKE: @@ -999,18 +989,11 @@ static mobj_t *SearchMarioNode(msecnode_t *node) case MT_SMOKE: case MT_SMALLBUBBLE: case MT_MEDIUMBUBBLE: - case MT_TFOG: case MT_SEED: case MT_PARTICLE: - case MT_SCORE: case MT_DROWNNUMBERS: - case MT_GOTEMERALD: - case MT_LOCKON: - case MT_TAG: - case MT_GOTFLAG: case MT_HOOP: case MT_HOOPCOLLIDE: - case MT_NIGHTSCORE: continue; default: break; diff --git a/src/p_inter.c b/src/p_inter.c index dc955cfc7..35dff52b9 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -385,16 +385,6 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) // We now identify by object type, not sprite! Tails 04-11-2001 switch (special->type) { - case MT_MEMENTOSTP: // Mementos teleport - // Teleport player to the other teleporter (special->target). We'll assume there's always only ever 2. - if (!special->target) - return; // foolproof crash prevention check!!!!! - - P_SetOrigin(player->mo, special->target->x, special->target->y, special->target->z + (48<mo->angle = special->target->angle; - P_SetObjectMomZ(player->mo, 12<mo, player->mo->angle, 20<threshold >= FIRSTPOWERUP) { @@ -903,11 +893,6 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) Obj_BungeeSpecial(special, player); return; - // CTF Flags - case MT_REDFLAG: - case MT_BLUEFLAG: - return; - case MT_CHEATCHECK: P_TouchCheatcheck(special, player, special->thing_args[1]); return; @@ -1615,8 +1600,6 @@ boolean P_CheckRacers(void) */ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damagetype) { - mobj_t *mo; - if (target->flags & (MF_ENEMY|MF_BOSS)) target->momx = target->momy = target->momz = 0; @@ -1705,9 +1688,6 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget // Let EVERYONE know what happened to a player! 01-29-2002 Tails if (target->player && !target->player->spectator) { - if (metalrecording) // Ack! Metal Sonic shouldn't die! Cut the tape, end recording! - G_StopMetalRecording(true); - target->renderflags &= ~RF_DONTDRAW; } @@ -1787,150 +1767,16 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget // Other death animation effects switch(target->type) { - case MT_BOUNCEPICKUP: - case MT_RAILPICKUP: - case MT_AUTOPICKUP: - case MT_EXPLODEPICKUP: - case MT_SCATTERPICKUP: - case MT_GRENADEPICKUP: - P_SetObjectMomZ(target, FRACUNIT, false); - target->fuse = target->info->damage; - break; - - case MT_BUGGLE: - 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) - && inflictor->z + inflictor->height >= target->z - FixedMul(8*FRACUNIT, inflictor->scale)) - mo = P_SpawnMobj(inflictor->x + inflictor->momx, inflictor->y + inflictor->momy, inflictor->z + (inflictor->height / 2) + inflictor->momz, MT_EXTRALARGEBUBBLE); - else - mo = P_SpawnMobj(target->x, target->y, target->z, MT_EXTRALARGEBUBBLE); - mo->destscale = target->scale; - P_SetScale(mo, mo->destscale); - P_SetMobjState(mo, mo->info->raisestate); - break; - - case MT_YELLOWSHELL: - P_SpawnMobjFromMobj(target, 0, 0, 0, MT_YELLOWSPRING); - break; - - case MT_CRAWLACOMMANDER: - target->momx = target->momy = target->momz = 0; - break; - - case MT_CRUSHSTACEAN: - if (target->tracer) - { - mobj_t *chain = target->tracer->target, *chainnext; - while (chain) - { - chainnext = chain->target; - P_RemoveMobj(chain); - chain = chainnext; - } - S_StopSound(target->tracer); - P_KillMobj(target->tracer, inflictor, source, damagetype); - } - break; - - case MT_BANPYURA: - if (target->tracer) - { - S_StopSound(target->tracer); - P_KillMobj(target->tracer, inflictor, source, damagetype); - } - break; - - case MT_EGGSHIELD: - P_SetObjectMomZ(target, 4*target->scale, false); - P_InstaThrust(target, target->angle, 3*target->scale); - target->flags = (target->flags|MF_NOCLIPHEIGHT) & ~MF_NOGRAVITY; - break; - - case MT_DRAGONBOMBER: - { - mobj_t *segment = target; - while (segment->tracer != NULL) - { - P_KillMobj(segment->tracer, NULL, NULL, DMG_NORMAL); - segment = segment->tracer; - } - break; - } - - case MT_EGGMOBILE3: - { - mobj_t *mo2; - thinker_t *th; - UINT32 i = 0; // to check how many clones we've removed - - // scan the thinkers to make sure all the old pinch dummies are gone on death - for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) - { - if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) - continue; - - mo = (mobj_t *)th; - if (mo->type != (mobjtype_t)target->info->mass) - continue; - if (mo->tracer != target) - continue; - - P_KillMobj(mo, inflictor, source, damagetype); - mo->destscale = mo->scale/8; - mo->scalespeed = (mo->scale - mo->destscale)/(2*TICRATE); - mo->momz = mo->info->speed; - mo->angle = FixedAngle((P_RandomKey(PR_UNDEFINED, 36)*10)<angle = mo->angle; - P_SetMobjState(mo2, S_BOSSSEBH2); - - if (++i == 2) // we've already removed 2 of these, let's stop now - break; - else - S_StartSound(mo, mo->info->deathsound); // done once to prevent sound stacking - } - } - break; - - case MT_BIGMINE: - if (inflictor) - { - fixed_t dx = target->x - inflictor->x, dy = target->y - inflictor->y, dz = target->z - inflictor->z; - fixed_t dm = FixedHypot(dz, FixedHypot(dy, dx)); - target->momx = FixedDiv(FixedDiv(dx, dm), dm)*512; - target->momy = FixedDiv(FixedDiv(dy, dm), dm)*512; - target->momz = FixedDiv(FixedDiv(dz, dm), dm)*512; - } - if (source) - P_SetTarget(&target->tracer, source); - break; - case MT_BLASTEXECUTOR: if (target->spawnpoint) P_LinedefExecute(target->spawnpoint->angle, (source ? source : inflictor), target->subsector->sector); break; - case MT_SPINBOBERT: - if (target->hnext) - P_KillMobj(target->hnext, inflictor, source, damagetype); - if (target->hprev) - P_KillMobj(target->hprev, inflictor, source, damagetype); - break; - case MT_EGGTRAP: // Time for birdies! Yaaaaaaaay! target->fuse = TICRATE; break; - case MT_MINECART: - A_Scream(target); - target->momx = target->momy = target->momz = 0; - if (target->target && target->target->health) - P_KillMobj(target->target, target, source, DMG_NORMAL); - break; - case MT_PLAYER: if (damagetype != DMG_SPECTATOR) { @@ -2018,13 +1864,6 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget target->tics = 175; return; - case MT_METALSONIC_RACE: - target->fuse = TICRATE*3; - target->momx = target->momy = target->momz = 0; - P_SetObjectMomZ(target, 14*FRACUNIT, false); - target->flags = (target->flags & ~MF_NOGRAVITY)|(MF_NOCLIP|MF_NOCLIPTHING); - break; - // SRB2Kart: case MT_SMK_ICEBLOCK: { @@ -2871,7 +2710,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da } // Everything above here can't be forced. - if (!metalrecording) { UINT8 shouldForce = LUA_HookShouldDamage(target, inflictor, source, damage, damagetype); if (P_MobjWasRemoved(target)) diff --git a/src/p_local.h b/src/p_local.h index 15383f6c6..52699064b 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -184,8 +184,6 @@ INT32 P_GivePlayerRings(player_t *player, INT32 num_rings); INT32 P_GivePlayerSpheres(player_t *player, INT32 num_spheres); void P_GivePlayerLives(player_t *player, INT32 numlives); UINT8 P_GetNextEmerald(void); -void P_GiveEmerald(boolean spawnObj); -void P_GiveFinishFlags(player_t *player); boolean P_AutoPause(void); void P_ElementalFire(player_t *player, boolean cropcircle); diff --git a/src/p_map.c b/src/p_map.c index ca91cfbe2..aeb8a8054 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -486,18 +486,6 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object) switch (spring->type) { - case MT_FAN: // fan - if (zdist > (spring->health << FRACBITS)) // max z distance determined by health (set by map thing args[0]) - break; - if (flipval*object->momz >= FixedMul(speed, spring->scale)) // if object's already moving faster than your best, don't bother - break; - - object->momz += flipval*FixedMul(speed/4, spring->scale); - - // limit the speed if too high - if (flipval*object->momz > FixedMul(speed, spring->scale)) - object->momz = flipval*FixedMul(speed, spring->scale); - break; case MT_STEAM: // Steam if (zdist > FixedMul(16*FRACUNIT, spring->scale)) break; @@ -1207,25 +1195,6 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) return BMIT_CONTINUE; } - if ((thing->type == MT_SPRINGSHELL || thing->type == MT_YELLOWSHELL) && thing->health > 0 - && (tm.thing->player || (tm.thing->flags & MF_PUSHABLE)) && tm.thing->health > 0) - { - // Multiplying by -1 inherently flips "less than" and "greater than" - fixed_t tmz = ((thing->eflags & MFE_VERTICALFLIP) ? -(tm.thing->z + tm.thing->height) : tm.thing->z); - fixed_t tmznext = ((thing->eflags & MFE_VERTICALFLIP) ? -tm.thing->momz : tm.thing->momz) + tmz; - fixed_t thzh = ((thing->eflags & MFE_VERTICALFLIP) ? -thing->z : thing->z + thing->height); - //fixed_t sprarea = FixedMul(8*FRACUNIT, thing->scale) * P_MobjFlip(thing); - - //if ((tmznext <= thzh && tmz > thzh) || (tmznext > thzh - sprarea && tmznext < thzh)) - if (tmznext <= thzh) - { - P_DoSpring(thing, tm.thing); - // return BMIT_CONTINUE; - } - //else if (tmz > thzh - sprarea && tmz < thzh) // Don't damage people springing up / down - return BMIT_CONTINUE; - } - // missiles can hit other things if ((tm.thing->flags & MF_MISSILE) && !damage) // if something was already damaged, don't run this { @@ -1402,13 +1371,13 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) if (thing->flags & MF_PUSHABLE) { - if (tm.thing->type == MT_FAN || tm.thing->type == MT_STEAM) + if (tm.thing->type == MT_STEAM) P_DoFanAndGasJet(tm.thing, thing); } if (tm.thing->flags & MF_PUSHABLE) { - if (thing->type == MT_FAN || thing->type == MT_STEAM) + if (thing->type == MT_STEAM) { P_DoFanAndGasJet(thing, tm.thing); return BMIT_CONTINUE; @@ -1433,7 +1402,7 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) if (thing->player) { - if (tm.thing->type == MT_FAN || tm.thing->type == MT_STEAM) + if (tm.thing->type == MT_STEAM) P_DoFanAndGasJet(tm.thing, thing); } @@ -1442,7 +1411,7 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) if (!tm.thing->health) return BMIT_CONTINUE; - if (thing->type == MT_FAN || thing->type == MT_STEAM) + if (thing->type == MT_STEAM) P_DoFanAndGasJet(thing, tm.thing); else if (thing->flags & MF_SPRING) { @@ -2235,8 +2204,6 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y, TryMoveResult_t *re if (P_CheckSolidFFloorSurface(thing, rover)) ; - else if (thing->type == MT_SKIM && (rover->fofflags & FOF_SWIMMABLE)) - ; else if (!((rover->fofflags & FOF_BLOCKPLAYER && thing->player) || (rover->fofflags & FOF_BLOCKOTHERS && !thing->player) || rover->fofflags & FOF_QUICKSAND)) @@ -2273,8 +2240,7 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y, TryMoveResult_t *re } if (bottomheight < tm.ceilingz && abs(delta1) >= abs(delta2) - && !(rover->fofflags & FOF_PLATFORM) - && !(thing->type == MT_SKIM && (rover->fofflags & FOF_SWIMMABLE))) + && !(rover->fofflags & FOF_PLATFORM)) { tm.ceilingz = tm.drpoffceilz = bottomheight; tm.ceilingrover = rover; @@ -3039,7 +3005,7 @@ increment_move } } - if (!allowdropoff && !(thing->flags & MF_FLOAT) && thing->type != MT_SKIM && !tm.floorthing) + if (!allowdropoff && !(thing->flags & MF_FLOAT) && !tm.floorthing) { if (thing->eflags & MFE_VERTICALFLIP) { @@ -4202,27 +4168,8 @@ void P_BounceMove(mobj_t *mo, TryMoveResult_t *result) if (bestslideline == NULL) return; - if (mo->type == MT_SHELL) - { - tmxmove = mmomx; - tmymove = mmomy; - } - else if (mo->type == MT_THROWNBOUNCE) - { - tmxmove = FixedMul(mmomx, (FRACUNIT - (FRACUNIT>>6) - (FRACUNIT>>5))); - tmymove = FixedMul(mmomy, (FRACUNIT - (FRACUNIT>>6) - (FRACUNIT>>5))); - } - else if (mo->type == MT_THROWNGRENADE) - { - // Quickly decay speed as it bounces - tmxmove = FixedDiv(mmomx, 2*FRACUNIT); - tmymove = FixedDiv(mmomy, 2*FRACUNIT); - } - else - { - tmxmove = FixedMul(mmomx, (FRACUNIT - (FRACUNIT>>2) - (FRACUNIT>>3))); - tmymove = FixedMul(mmomy, (FRACUNIT - (FRACUNIT>>2) - (FRACUNIT>>3))); - } + tmxmove = FixedMul(mmomx, (FRACUNIT - (FRACUNIT>>2) - (FRACUNIT>>3))); + tmymove = FixedMul(mmomy, (FRACUNIT - (FRACUNIT>>2) - (FRACUNIT>>3))); P_HitBounceLine(bestslideline); // clip the moves diff --git a/src/p_mobj.c b/src/p_mobj.c index 689970281..0ac8a2c52 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1201,24 +1201,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) switch (mo->type) { case MT_FLINGRING: - case MT_FLINGCOIN: case MT_FLINGBLUESPHERE: - case MT_FLINGNIGHTSCHIP: - case MT_BOUNCERING: - case MT_RAILRING: - case MT_INFINITYRING: - case MT_AUTOMATICRING: - case MT_EXPLOSIONRING: - case MT_SCATTERRING: - case MT_GRENADERING: - case MT_BOUNCEPICKUP: - case MT_RAILPICKUP: - case MT_AUTOPICKUP: - case MT_EXPLODEPICKUP: - case MT_SCATTERPICKUP: - case MT_GRENADEPICKUP: - case MT_REDFLAG: - case MT_BLUEFLAG: if (mo->target) { // Flung items copy the gravity of their tosser. @@ -1314,12 +1297,6 @@ void P_CheckGravity(mobj_t *mo, boolean affect) if (affect) mo->momz += gravityadd; - - if (mo->type == MT_SKIM && mo->z + mo->momz <= mo->watertop && mo->z >= mo->watertop) - { - mo->momz = 0; - mo->flags |= MF_NOGRAVITY; - } } // @@ -1601,8 +1578,7 @@ void P_XYMovement(mobj_t *mo) mo->momx = mo->momy = mo->momz = 0; // set in 'search new direction' state? - if (mo->type != MT_EGGMOBILE) - P_SetMobjState(mo, mo->info->spawnstate); + P_SetMobjState(mo, mo->info->spawnstate); return; } @@ -1936,7 +1912,7 @@ void P_XYMovement(mobj_t *mo) if (mo->flags & MF_NOCLIPHEIGHT) return; // no frictions for objects that can pass through floors - if (mo->flags & MF_MISSILE || mo->flags2 & MF2_SKULLFLY || mo->type == MT_SHELL || mo->type == MT_VULTURE || mo->type == MT_PENGUINATOR) + if (mo->flags & MF_MISSILE || mo->flags2 & MF2_SKULLFLY) return; // no friction for missiles ever if ((mo->type == MT_BIGTUMBLEWEED || mo->type == MT_LITTLETUMBLEWEED) @@ -2246,15 +2222,6 @@ boolean P_ZMovement(mobj_t *mo) switch (mo->type) { - case MT_SKIM: - // skims don't bounce - if (mo->z > mo->watertop && mo->z - mo->momz <= mo->watertop) - { - mo->z = mo->watertop; - mo->momz = 0; - mo->flags |= MF_NOGRAVITY; - } - break; case MT_SPINFIRE: if (P_CheckDeathPitCollide(mo)) { @@ -2262,43 +2229,9 @@ boolean P_ZMovement(mobj_t *mo) return false; } break; - case MT_GOOP: - if (P_CheckDeathPitCollide(mo)) - { - P_RemoveMobj(mo); - return false; - } - if (mo->z <= mo->floorz && mo->momz) - { - P_SetMobjState(mo, mo->info->meleestate); - mo->momx = mo->momy = mo->momz = 0; - mo->z = mo->floorz; - if (mo->info->painsound) - S_StartSound(mo, mo->info->painsound); - } - break; case MT_FALLINGROCK: case MT_BIGTUMBLEWEED: case MT_LITTLETUMBLEWEED: - case MT_SHELL: - // Remove stuff from death pits. - if (P_CheckDeathPitCollide(mo)) - { - P_RemoveMobj(mo); - return false; - } - break; - - case MT_REDFLAG: - case MT_BLUEFLAG: - // Remove from death pits. DON'T FUCKING DESPAWN IT DAMMIT - if (P_CheckDeathPitCollide(mo)) - { - mo->fuse = 1; - return false; - } - break; - case MT_EMERALD: if (!(mo->flags & MF_NOCLIPHEIGHT) && P_CheckDeathPitCollide(mo)) { @@ -2325,28 +2258,6 @@ boolean P_ZMovement(mobj_t *mo) if (!(mo->momx || mo->momy || mo->momz)) return true; break; - case MT_BOUNCERING: - case MT_INFINITYRING: - case MT_AUTOMATICRING: - case MT_RAILRING: - case MT_EXPLOSIONRING: - case MT_SCATTERRING: - case MT_GRENADERING: - case MT_BOUNCEPICKUP: - case MT_RAILPICKUP: - case MT_AUTOPICKUP: - case MT_EXPLODEPICKUP: - case MT_SCATTERPICKUP: - case MT_GRENADEPICKUP: - // Remove flinged stuff from death pits. - if (P_CheckDeathPitCollide(mo) && (mo->flags2 & MF2_DONTRESPAWN)) - { - P_RemoveMobj(mo); - return false; - } - if (!(mo->momx || mo->momy || mo->momz)) - return true; - break; case MT_FLAMEJET: case MT_VERTICALFLAMEJET: if (mo->flags & MF_SLIDEME) @@ -2392,7 +2303,7 @@ boolean P_ZMovement(mobj_t *mo) mo->momx = mo->momy = 0; if (mo->flags & MF_FLOAT && mo->target && mo->health - && !(mo->type == MT_EGGMOBILE) && mo->target->health > 0) + && mo->target->health > 0) { // float down towards target if too close if (!(mo->flags2 & MF2_SKULLFLY) && !(mo->flags2 & MF2_INFLOAT)) @@ -2405,9 +2316,6 @@ boolean P_ZMovement(mobj_t *mo) mo->z -= FixedMul(FLOATSPEED, mo->scale); else if (delta > 0 && dist < (delta*3)) mo->z += FixedMul(FLOATSPEED, mo->scale); - - if (mo->type == MT_JETJAW && mo->z + mo->height > mo->watertop) - mo->z = mo->watertop - mo->height; } } @@ -2449,9 +2357,7 @@ boolean P_ZMovement(mobj_t *mo) } // hit the floor - if (mo->type == MT_FIREBALL) // special case for the fireball - mom.z = P_MobjFlip(mo)*FixedMul(5*FRACUNIT, mo->scale); - else if (mo->type == MT_SPINFIRE) // elemental shield fire is another exception here + if (mo->type == MT_SPINFIRE) // elemental shield fire is another exception here ; else if (mo->type == MT_ITEM_DEBRIS) { @@ -2740,12 +2646,6 @@ boolean P_ZMovement(mobj_t *mo) { if (mo->flags2 & MF2_SKULLFLY) // the skull slammed into something mo->momz = -mo->momz; - else - // Flags bounce - if (mo->type == MT_REDFLAG || mo->type == MT_BLUEFLAG) - { - mo->momz = -FixedMul(mo->momz, FixedDiv(17*FRACUNIT,20*FRACUNIT)); - } else mo->momz = 0; } @@ -5821,12 +5721,8 @@ static void P_MobjSceneryThink(mobj_t *mobj) return; } break; - case MT_BOSSJUNK: - mobj->renderflags ^= RF_DONTDRAW; - break; case MT_MACEPOINT: case MT_CHAINMACEPOINT: - case MT_SPRINGBALLPOINT: case MT_CHAINPOINT: case MT_FIREBARPOINT: case MT_CUSTOMMACEPOINT: @@ -5859,29 +5755,6 @@ static void P_MobjSceneryThink(mobj_t *mobj) else mobj->fuse--; return; - case MT_NIGHTSPARKLE: - if (mobj->tics != -1) - { - mobj->tics--; - - // you can cycle through multiple states in a tic - if (!mobj->tics) - if (!P_SetMobjState(mobj, mobj->state->nextstate)) - return; // freed itself - } - - P_UnsetThingPosition(mobj); - mobj->x += mobj->momx; - mobj->y += mobj->momy; - mobj->z += mobj->momz; - P_SetThingPosition(mobj); - return; - case MT_NIGHTSLOOPHELPER: - if (--mobj->tics <= 0) - P_RemoveMobj(mobj); - - // Don't touch my fuse! - return; case MT_OVERLAY: if (!mobj->target) { @@ -5951,45 +5824,6 @@ static void P_MobjSceneryThink(mobj_t *mobj) P_RemoveMobj(mobj); return; } - break; - case MT_LOCKON: - if (!mobj->target) - { - P_RemoveMobj(mobj); - return; - } - - mobj->renderflags &= ~RF_DONTDRAW; - - mobj->x = mobj->target->x; - mobj->y = mobj->target->y; - - mobj->eflags |= (mobj->target->eflags & MFE_VERTICALFLIP); - - mobj->destscale = mobj->target->destscale; - P_SetScale(mobj, mobj->target->scale); - - if (!(mobj->eflags & MFE_VERTICALFLIP)) - mobj->z = mobj->target->z + mobj->target->height + FixedMul((16 + abs((signed)(leveltime % TICRATE) - TICRATE/2))*FRACUNIT, mobj->target->scale); - else - mobj->z = mobj->target->z - FixedMul((16 + abs((signed)(leveltime % TICRATE) - TICRATE/2))*FRACUNIT, mobj->target->scale) - mobj->height; - - mobj->old_z = mobj->z; - - break; - case MT_LOCKONINF: - if (!(mobj->flags2 & MF2_STRONGBOX)) - { - mobj->threshold = mobj->z; - mobj->flags2 |= MF2_STRONGBOX; - } - if (!(mobj->eflags & MFE_VERTICALFLIP)) - mobj->z = mobj->threshold + FixedMul((16 + abs((signed)(leveltime % TICRATE) - TICRATE/2))*FRACUNIT, mobj->scale); - else - mobj->z = mobj->threshold - FixedMul((16 + abs((signed)(leveltime % TICRATE) - TICRATE/2))*FRACUNIT, mobj->scale); - - mobj->old_z = mobj->z; - break; case MT_FLAMEJET: P_FlameJetSceneryThink(mobj); @@ -6047,7 +5881,6 @@ static void P_MobjSceneryThink(mobj_t *mobj) case MT_ROCKCRUMBLE16: case MT_WOODDEBRIS: case MT_BRICKDEBRIS: - case MT_BROKENROBOT: if (mobj->z <= P_FloorzAtPos(mobj->x, mobj->y, mobj->z, mobj->height) && mobj->state != &states[mobj->info->deathstate]) { @@ -6059,10 +5892,6 @@ static void P_MobjSceneryThink(mobj_t *mobj) if (!P_ParticleGenSceneryThink(mobj)) return; break; - case MT_FSGNA: - if (mobj->movedir) - mobj->angle += mobj->movedir; - break; case MT_ORBINAUT_SHIELD: // Kart orbit/trail items case MT_JAWZ_SHIELD: case MT_BANANA_SHIELD: @@ -6584,14 +6413,6 @@ static void P_MobjSceneryThink(mobj_t *mobj) return; } break; - case MT_PETSMOKER: - if (!(leveltime % 10)) - { - mobj_t *smok = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_PETSMOKE); - if (mobj->thing_args[0]) - P_SetMobjStateNF(smok, smok->info->painstate); // same function, diff sprite - } - break; case MT_ITEMCAPSULE_PART: P_ItemCapsulePartThinker(mobj); @@ -6908,17 +6729,6 @@ static void P_MobjSceneryThink(mobj_t *mobj) Obj_EMZRainGenerator(mobj); return; } - case MT_VWREF: - case MT_VWREB: - { - INT32 strength; - ++mobj->movedir; - mobj->frame &= ~FF_TRANSMASK; - strength = min(mobj->fuse, (INT32)mobj->movedir)*3; - if (strength < 10) - mobj->frame |= ((10 - strength) << (FF_TRANSSHIFT)); - } - /* FALLTHRU */ default: if (mobj->fuse) { // Scenery object fuse! Very basic! @@ -7014,21 +6824,6 @@ static boolean P_MobjDeadThink(mobj_t *mobj) P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true); } break; - case MT_METALSONIC_RACE: - { - if (!(mobj->fuse % 8)) - { - fixed_t r = mobj->radius >> FRACBITS; - mobj_t *explosion = P_SpawnMobj( - mobj->x + (P_RandomRange(PR_UNDEFINED, r, -r) << FRACBITS), - mobj->y + (P_RandomRange(PR_UNDEFINED, r, -r) << FRACBITS), - mobj->z + (P_RandomKey(PR_UNDEFINED, mobj->height >> FRACBITS) << FRACBITS), - MT_SONIC3KBOSSEXPLODE); - S_StartSound(explosion, sfx_s3kb4); - } - P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true); - } - break; case MT_BANANA: { angle_t spin = FixedMul(FixedDiv(abs(mobj->momz), 8 * mobj->scale), ANGLE_67h); @@ -10343,16 +10138,7 @@ static void P_FiringThink(mobj_t *mobj) if (mobj->health <= 0) return; - if (mobj->state->action.acp1 == (actionf_p1)A_Boss1Laser) - { - if (mobj->state->tics > 1) - { - var1 = mobj->state->var1; - var2 = mobj->state->var2 & 65535; - mobj->state->action.acp1(mobj); - } - } - else if (leveltime & 1) // Fire mode + if (leveltime & 1) // Fire mode { mobj_t *missile; @@ -10387,9 +10173,6 @@ static boolean P_CanFlickerFuse(mobj_t *mobj) { switch (mobj->type) { - case MT_SNAPPER_HEAD: - case MT_SNAPPER_LEG: - case MT_MINECARTSEG: case MT_MONITOR_PART: case MT_BATTLEUFO: case MT_BATTLEUFO_LEG: @@ -10853,9 +10636,7 @@ void P_MobjThinker(mobj_t *mobj) // Sliding physics for slidey mobjs! if (mobj->type == MT_FLINGRING - || mobj->type == MT_FLINGCOIN || mobj->type == MT_FLINGBLUESPHERE - || mobj->type == MT_FLINGNIGHTSCHIP || mobj->type == MT_EMERALD || mobj->type == MT_BIGTUMBLEWEED || mobj->type == MT_LITTLETUMBLEWEED @@ -10883,8 +10664,7 @@ void P_MobjThinker(mobj_t *mobj) { if (( (mobj->flags & (MF_ENEMY|MF_BOSS) - && mobj->flags & MF_SHOOTABLE) - || mobj->type == MT_EGGSHIELD) + && mobj->flags & MF_SHOOTABLE)) && !(mobj->flags & MF_NOCLIPHEIGHT) && mobj->health > 0) { @@ -10901,35 +10681,6 @@ void P_MobjThinker(mobj_t *mobj) P_CyclePlayerMobjState(mobj); else P_CycleMobjState(mobj); - - if (P_MobjWasRemoved(mobj)) - return; - - switch (mobj->type) - { - case MT_BOUNCEPICKUP: - case MT_RAILPICKUP: - case MT_AUTOPICKUP: - case MT_EXPLODEPICKUP: - case MT_SCATTERPICKUP: - case MT_GRENADEPICKUP: - if (mobj->health == 0) // Fading tile - { - INT32 value = mobj->info->damage/10; - value = mobj->fuse/value; - value = 10-value; - value--; - - if (value <= 0) - value = 1; - - mobj->frame &= ~FF_TRANSMASK; - mobj->frame |= value << FF_TRANSSHIFT; - } - break; - default: - break; - } } // Quick, optimized function for the Rail Rings @@ -11146,8 +10897,6 @@ static void P_DefaultMobjShadowScale(mobj_t *thing) break; case MT_SMALLMACE: case MT_BIGMACE: - case MT_PUMA: - case MT_BIGPUMA: case MT_FALLINGROCK: case MT_SMK_MOLE: case MT_SMK_THWOMP: @@ -11219,9 +10968,6 @@ static void P_DefaultMobjShadowScale(mobj_t *thing) case MT_AIRIVOBALL: thing->shadowscale = FRACUNIT/2; break; - case MT_BUMPER: - thing->shadowscale = 7*FRACUNIT/4; - break; default: if (thing->flags & (MF_ENEMY|MF_BOSS)) thing->shadowscale = FRACUNIT; @@ -11334,9 +11080,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) { mobj->z = mobj->floorz; - if (mobj->type == MT_UNIDUS) - mobj->z += FixedMul(mobj->info->mass, mobj->scale); - // defaults onground if (mobj->z == mobj->floorz) mobj->eflags |= MFE_ONGROUND; @@ -11345,9 +11088,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) { mobj->z = mobj->ceilingz - mobj->height; - if (mobj->type == MT_UNIDUS) - mobj->z -= FixedMul(mobj->info->mass, mobj->scale); - // defaults onground if (mobj->z + mobj->height == mobj->ceilingz) mobj->eflags |= MFE_ONGROUND; @@ -11378,82 +11118,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) else switch (mobj->type) { - case MT_LOCKONINF: - P_SetScale(mobj, (mobj->destscale = 3*mobj->scale)); - break; - case MT_FAKEMOBILE: - case MT_EGGSHIELD: - mobj->flags2 |= MF2_INVERTAIMABLE; - break; - case MT_DETON: - mobj->movedir = 0; - break; - case MT_EGGGUARD: - { - mobj_t *spawn = P_SpawnMobj(x, y, z, MT_EGGSHIELD); - spawn->destscale = mobj->scale; - P_SetScale(spawn, mobj->scale); - P_SetTarget(&mobj->tracer, spawn); - P_SetTarget(&spawn->target, mobj); - } - break; - case MT_UNIDUS: - { - INT32 i; - mobj_t *ball; - // Spawn "damage" number of "painchance" spikeball mobjs - // threshold is the distance they should keep from the MT_UNIDUS (touching radius + ball painchance) - for (i = 0; i < mobj->info->damage; i++) - { - ball = P_SpawnMobj(x, y, z, mobj->info->painchance); - ball->destscale = mobj->scale; - P_SetScale(ball, mobj->scale); - P_SetTarget(&ball->target, mobj); - ball->movedir = FixedAngle(FixedMul(FixedDiv(i<info->damage<threshold = ball->radius + mobj->radius + FixedMul(ball->info->painchance, ball->scale); - - var1 = ball->state->var1, var2 = ball->state->var2; - ball->state->action.acp1(ball); - } - } - break; - case MT_POINTY: - { - INT32 q; - mobj_t *ball, *lastball = mobj; - - for (q = 0; q < mobj->info->painchance; q++) - { - ball = P_SpawnMobj(x, y, z, mobj->info->mass); - ball->destscale = mobj->scale; - P_SetScale(ball, mobj->scale); - P_SetTarget(&lastball->tracer, ball); - P_SetTarget(&ball->target, mobj); - lastball = ball; - } - } - break; - case MT_CRUSHSTACEAN: - { - mobj_t *bigmeatyclaw = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_CRUSHCLAW); - bigmeatyclaw->angle = mobj->angle + ((mobj->flags2 & MF2_AMBUSH) ? ANGLE_90 : ANGLE_270); - P_SetTarget(&mobj->tracer, bigmeatyclaw); - P_SetTarget(&bigmeatyclaw->tracer, mobj); - mobj->reactiontime >>= 1; - } - break; - case MT_BANPYURA: - { - mobj_t *bigmeatyclaw = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_BANPSPRING); - bigmeatyclaw->angle = mobj->angle + ((mobj->flags2 & MF2_AMBUSH) ? ANGLE_90 : ANGLE_270); - P_SetTarget(&mobj->tracer, bigmeatyclaw); - P_SetTarget(&bigmeatyclaw->tracer, mobj); - mobj->reactiontime >>= 1; - } - break; - case MT_BIGMINE: - mobj->extravalue1 = FixedHypot(mobj->x, mobj->y)>>FRACBITS; - break; case MT_WAVINGFLAG1: case MT_WAVINGFLAG2: { @@ -11468,17 +11132,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) } } break; - case MT_EGGMOBILE2: - // Special condition for the 2nd boss. - mobj->watertop = mobj->info->speed; - break; - case MT_EGGMOBILE3: - mobj->movefactor = -512*FRACUNIT; - mobj->flags2 |= MF2_CLASSICPUSH; - break; - case MT_EGGMOBILE4: - mobj->flags2 |= MF2_INVERTAIMABLE; - break; case MT_FLICKY_08: mobj->color = (P_RandomChance(PR_UNDEFINED, FRACUNIT/2) ? SKINCOLOR_RED : SKINCOLOR_AQUAMARINE); break; @@ -11504,73 +11157,27 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_KART_LEFTOVER: mobj->color = SKINCOLOR_RED; break; - case MT_EGGROBO1: - mobj->movecount = P_RandomKey(PR_DECORATION, 13); - mobj->color = FIRSTRAINBOWCOLOR + P_RandomKey(PR_DECORATION, FIRSTSUPERCOLOR - FIRSTRAINBOWCOLOR); - break; - case MT_HIVEELEMENTAL: - mobj->extravalue1 = 5; - break; case MT_SMASHINGSPIKEBALL: mobj->movecount = mobj->z; break; - case MT_SPINBOBERT: - { - mobj_t *fire; - fire = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_SPINBOBERT_FIRE1); - P_SetTarget(&fire->target, mobj); - P_SetTarget(&mobj->hnext, fire); - fire = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_SPINBOBERT_FIRE2); - P_SetTarget(&fire->target, mobj); - P_SetTarget(&mobj->hprev, fire); - } - break; - case MT_REDRING: // Make MT_REDRING red by default - mobj->color = skincolor_redring; - break; case MT_SMALLBUBBLE: // Bubbles eventually dissipate, in case they get caught somewhere. case MT_MEDIUMBUBBLE: case MT_EXTRALARGEBUBBLE: mobj->fuse += 30 * TICRATE; break; - case MT_NIGHTSDRONE: - nummaprings = -1; // no perfect bonus, rings are free - break; case MT_EGGCAPSULE: mobj->reactiontime = 0; mobj->extravalue1 = mobj->cvmem =\ mobj->cusval = mobj->movecount =\ mobj->lastlook = mobj->extravalue2 = -1; break; - case MT_REDTEAMRING: - mobj->color = skincolor_redteam; - break; - case MT_BLUETEAMRING: - mobj->color = skincolor_blueteam; - break; case MT_RING: if (nummaprings >= 0) nummaprings++; break; - case MT_METALSONIC_RACE: - mobj->skin = &skins[5]; - /* FALLTHRU */ - case MT_METALSONIC_BATTLE: - mobj->color = skins[5].prefcolor; - sc = 5; - break; - case MT_FANG: - sc = 4; - break; - case MT_ROSY: - sc = 3; - break; case MT_CORK: mobj->flags2 |= MF2_SUPERFIRE; break; - case MT_FBOMB: - mobj->flags2 |= MF2_EXPLOSION; - break; case MT_OILLAMP: { mobj_t* overlay = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); @@ -11582,22 +11189,12 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) mobj->momx = 1; //stack hack mobj->flags2 |= MF2_INVERTAIMABLE; break; - case MT_MINECARTEND: - P_SetTarget(&mobj->tracer, P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_MINECARTENDSOLID)); - mobj->tracer->angle = mobj->angle + ANGLE_90; - break; case MT_TORCHFLOWER: { mobj_t *fire = P_SpawnMobjFromMobj(mobj, 0, 0, 46*FRACUNIT, MT_FLAME); P_SetTarget(&mobj->target, fire); break; } - case MT_PYREFLY: - mobj->extravalue1 = (FixedHypot(mobj->x, mobj->y)/FRACUNIT) % 360; - mobj->extravalue2 = 0; - mobj->fuse = 100; - break; - // SRB2Kart case MT_ITEMCAPSULE: { // set default item & count @@ -13119,8 +12716,7 @@ static boolean P_SpawnNonMobjMapThing(mapthing_t *mthing) if (mthing->type <= MAXPLAYERS) // Player starts { // save spots for respawning in network games - if (!metalrecording) - playerstarts[mthing->type - 1] = mthing; + playerstarts[mthing->type - 1] = mthing; return true; } else if (mthing->type == 33) // Match starts @@ -13153,12 +12749,6 @@ static boolean P_SpawnNonMobjMapThing(mapthing_t *mthing) } return true; } - else if (metalrecording && mthing->type == mobjinfo[MT_METALSONIC_RACE].doomednum) - { - // If recording, you ARE Metal Sonic. Do not spawn it, do not save normal spawnpoints. - playerstarts[0] = mthing; - return true; - } else if (mthing->type == 750 // Slope vertex point (formerly chaos spawn) || (mthing->type == FLOOR_SLOPE_THING || mthing->type == CEILING_SLOPE_THING) // Slope anchors || (mthing->type >= 600 && mthing->type <= 611) // Special placement patterns @@ -13207,12 +12797,6 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i) return false; } - if (metalrecording) // Metal Sonic can't use these things. - { - if (mobjinfo[i].flags & (MF_ENEMY|MF_BOSS)) - return false; - } - return true; } @@ -13396,12 +12980,6 @@ static boolean P_SetupMace(mapthing_t *mthing, mobj_t *mobj) // Mobjtype selection switch (mobj->type) { - case MT_SPRINGBALLPOINT: - macetype = ((mthing->thing_args[8] & TMM_DOUBLESIZE) - ? MT_REDSPRINGBALL - : MT_YELLOWSPRINGBALL); - chainlink = MT_SMALLMACECHAIN; - break; case MT_FIREBARPOINT: macetype = ((mthing->thing_args[8] & TMM_DOUBLESIZE) ? MT_BIGFIREBAR @@ -13684,47 +13262,6 @@ static boolean P_SetupParticleGen(mapthing_t *mthing, mobj_t *mobj) return true; } -static boolean P_SetupBooster(mapthing_t* mthing, mobj_t* mobj, boolean strong) -{ - angle_t angle = FixedAngle(mthing->angle << FRACBITS); - fixed_t x1 = FINECOSINE((angle >> ANGLETOFINESHIFT) & FINEMASK); - fixed_t y1 = FINESINE((angle >> ANGLETOFINESHIFT) & FINEMASK); - fixed_t x2 = FINECOSINE(((angle + ANGLE_90) >> ANGLETOFINESHIFT) & FINEMASK); - fixed_t y2 = FINESINE(((angle + ANGLE_90) >> ANGLETOFINESHIFT) & FINEMASK); - statenum_t facestate = strong ? S_REDBOOSTERSEG_FACE : S_YELLOWBOOSTERSEG_FACE; - statenum_t leftstate = strong ? S_REDBOOSTERSEG_LEFT : S_YELLOWBOOSTERSEG_LEFT; - statenum_t rightstate = strong ? S_REDBOOSTERSEG_RIGHT : S_YELLOWBOOSTERSEG_RIGHT; - statenum_t rollerstate = strong ? S_REDBOOSTERROLLER : S_YELLOWBOOSTERROLLER; - - mobj_t *seg = P_SpawnMobjFromMobj(mobj, 26*x1, 26*y1, 0, MT_BOOSTERSEG); - seg->angle = angle - ANGLE_90; - P_SetMobjState(seg, facestate); - seg = P_SpawnMobjFromMobj(mobj, -26*x1, -26*y1, 0, MT_BOOSTERSEG); - seg->angle = angle + ANGLE_90; - P_SetMobjState(seg, facestate); - seg = P_SpawnMobjFromMobj(mobj, 21*x2, 21*y2, 0, MT_BOOSTERSEG); - seg->angle = angle; - P_SetMobjState(seg, leftstate); - seg = P_SpawnMobjFromMobj(mobj, -21*x2, -21*y2, 0, MT_BOOSTERSEG); - seg->angle = angle; - P_SetMobjState(seg, rightstate); - - seg = P_SpawnMobjFromMobj(mobj, 13*(x1 + x2), 13*(y1 + y2), 0, MT_BOOSTERROLLER); - seg->angle = angle; - P_SetMobjState(seg, rollerstate); - seg = P_SpawnMobjFromMobj(mobj, 13*(x1 - x2), 13*(y1 - y2), 0, MT_BOOSTERROLLER); - seg->angle = angle; - P_SetMobjState(seg, rollerstate); - seg = P_SpawnMobjFromMobj(mobj, -13*(x1 + x2), -13*(y1 + y2), 0, MT_BOOSTERROLLER); - seg->angle = angle; - P_SetMobjState(seg, rollerstate); - seg = P_SpawnMobjFromMobj(mobj, -13*(x1 - x2), -13*(y1 - y2), 0, MT_BOOSTERROLLER); - seg->angle = angle; - P_SetMobjState(seg, rollerstate); - - return true; -} - static void P_SnapToFinishLine(mobj_t *mobj) { line_t *finishline = P_FindNearestLine(mobj->x, mobj->y, @@ -13856,25 +13393,6 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj) mobj->colorized = true; } break; - case MT_FAN: - if (mthing->thing_args[1] & TMF_INVISIBLE) - { - P_UnsetThingPosition(mobj); - if (sector_list) - { - P_DelSeclist(sector_list); - sector_list = NULL; - } - mobj->flags |= MF_NOSECTOR; // this flag basically turns it invisible - P_SetThingPosition(mobj); - } - if (mthing->thing_args[1] & TMF_NODISTANCECHECK) - mobj->flags2 |= MF2_AMBUSH; - if (mthing->thing_args[0]) - mobj->health = mthing->thing_args[0]; - else - mobj->health = FixedMul(mobj->subsector->sector->ceilingheight - mobj->subsector->sector->floorheight, 3*(FRACUNIT/4)) >> FRACBITS; - break; case MT_BALLOON: if (mthing->thing_stringargs[0]) mobj->color = get_number(mthing->thing_stringargs[0]); @@ -13931,7 +13449,6 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj) break; case MT_MACEPOINT: case MT_CHAINMACEPOINT: - case MT_SPRINGBALLPOINT: case MT_CHAINPOINT: case MT_FIREBARPOINT: case MT_CUSTOMMACEPOINT: @@ -14012,11 +13529,6 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj) } break; } - case MT_REDBOOSTER: - case MT_YELLOWBOOSTER: - if (!P_SetupBooster(mthing, mobj, mobj->type == MT_REDBOOSTER)) - return false; - break; case MT_AXIS: // Inverted if args[3] is set if (mthing->thing_args[3]) @@ -14049,7 +13561,7 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj) if (mthing->thing_args[2] & TMSF_RETRACTED) P_SetMobjState(mobj, mobj->info->meleestate); // Use per-thing collision for spikes unless the intangible flag is checked. - if (!(mthing->thing_args[2] & TMSF_INTANGIBLE) && !metalrecording) + if (!(mthing->thing_args[2] & TMSF_INTANGIBLE)) { P_UnsetThingPosition(mobj); mobj->flags &= ~(MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT); @@ -14067,7 +13579,7 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj) if (mthing->thing_args[2] & TMSF_RETRACTED) P_SetMobjState(mobj, mobj->info->meleestate); // Use per-thing collision for spikes unless the intangible flag is checked. - if (!(mthing->thing_args[2] & TMSF_INTANGIBLE) && !metalrecording) + if (!(mthing->thing_args[2] & TMSF_INTANGIBLE)) { const fixed_t kSpriteRadius = 16 * mobj->scale; fixed_t x = FixedMul(mobj->radius - kSpriteRadius, FCOS(mobj->angle)); @@ -14820,9 +14332,6 @@ mobj_t *P_SpawnMapThing(mapthing_t *mthing) void P_SpawnHoop(mapthing_t *mthing) { - if (metalrecording) - return; - mobj_t *mobj = NULL; mobj_t *nextmobj = NULL; mobj_t *hoopcenter; @@ -15220,7 +14729,7 @@ mobj_t *P_SpawnXYZMissile(mobj_t *source, mobj_t *dest, mobjtype_t type, if (speed == 0) { CONS_Debug(DBG_GAMELOGIC, "P_SpawnXYZMissile - projectile has 0 speed! (mobj type %d)\n", type); - speed = mobjinfo[MT_ROCKET].speed; + speed = FixedMul(20*FRACUNIT, th->scale); } if (th->info->seesound) @@ -15281,8 +14790,8 @@ mobj_t *P_SpawnAlteredDirectionMissile(mobj_t *source, mobjtype_t type, fixed_t if (speed == 0) // Backwards compatibility with 1.09.2 { - CONS_Printf("P_SpawnAlteredDirectionMissile - projectile has 0 speed! (mobj type %d)\nPlease update this SOC.", type); - speed = mobjinfo[MT_ROCKET].speed; + CONS_Debug(DBG_GAMELOGIC, "P_SpawnAlteredDirectionMissile - projectile has 0 speed! (mobj type %d)\nPlease update this SOC.", type); + speed = FixedMul(20*FRACUNIT, th->scale); } if (th->info->seesound) @@ -15346,8 +14855,8 @@ mobj_t *P_SpawnPointMissile(mobj_t *source, fixed_t xa, fixed_t ya, fixed_t za, if (speed == 0) // Backwards compatibility with 1.09.2 { - CONS_Printf("P_SpawnPointMissile - projectile has 0 speed! (mobj type %d)\nPlease update this SOC.", type); - speed = mobjinfo[MT_ROCKET].speed; + CONS_Debug(DBG_GAMELOGIC, "P_SpawnPointMissile - projectile has 0 speed! (mobj type %d)\nPlease update this SOC.", type); + speed = FixedMul(20*FRACUNIT, th->scale); } if (th->info->seesound) @@ -15386,20 +14895,12 @@ mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type) angle_t an; INT32 dist; fixed_t z; - const fixed_t gsf = (fixed_t)6; fixed_t speed; I_Assert(source != NULL); I_Assert(dest != NULL); - if (source->type == MT_JETTGUNNER) - { - if (source->eflags & MFE_VERTICALFLIP) - z = source->z + source->height - FixedMul(4*FRACUNIT, source->scale); - else - z = source->z + FixedMul(4*FRACUNIT, source->scale); - } - else - z = source->z + source->height/2; + + z = source->z + source->height/2; if (source->eflags & MFE_VERTICALFLIP) z -= FixedMul(mobjinfo[type].height, source->scale); @@ -15412,15 +14913,12 @@ mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type) th->destscale = source->scale; P_SetScale(th, source->scale); - if (source->type == MT_METALSONIC_BATTLE && source->health < 4) - speed = FixedMul(FixedMul(th->info->speed, 3*FRACUNIT/2), th->scale); - else - speed = FixedMul(th->info->speed, th->scale); + speed = FixedMul(th->info->speed, th->scale); if (speed == 0) { CONS_Debug(DBG_GAMELOGIC, "P_SpawnMissile - projectile has 0 speed! (mobj type %d)\n", type); - speed = FixedMul(mobjinfo[MT_TURRETLASER].speed, th->scale); + speed = FixedMul(20*FRACUNIT, th->scale); } if (th->info->seesound) @@ -15428,32 +14926,21 @@ mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type) P_SetTarget(&th->target, source); // where it came from - if (type == MT_TURRETLASER || type == MT_ENERGYBALL) // More accurate! - an = R_PointToAngle2(source->x, source->y, - dest->x + (dest->momx*gsf), - dest->y + (dest->momy*gsf)); - else - an = R_PointToAngle2(source->x, source->y, dest->x, dest->y); + an = R_PointToAngle2(source->x, source->y, dest->x, dest->y); th->angle = an; an >>= ANGLETOFINESHIFT; th->momx = FixedMul(speed, FINECOSINE(an)); th->momy = FixedMul(speed, FINESINE(an)); - if (type == MT_TURRETLASER || type == MT_ENERGYBALL) // More accurate! - dist = P_AproxDistance(dest->x+(dest->momx*gsf) - source->x, dest->y+(dest->momy*gsf) - source->y); - else - dist = P_AproxDistance(dest->x - source->x, dest->y - source->y); + dist = P_AproxDistance(dest->x - source->x, dest->y - source->y); dist = dist / speed; if (dist < 1) dist = 1; - if (type == MT_TURRETLASER || type == MT_ENERGYBALL) // More accurate! - th->momz = (dest->z + (dest->momz*gsf) - z) / dist; - else - th->momz = (dest->z - z) / dist; + th->momz = (dest->z - z) / dist; if (th->flags & MF_MISSILE) dist = P_CheckMissileSpawn(th); diff --git a/src/p_saveg.c b/src/p_saveg.c index 88bb493d7..011ce8975 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -5925,14 +5925,6 @@ static inline void P_NetArchiveSpecials(savebuffer_t *save) // Current global weather type WRITEUINT8(save->p, globalweather); - if (metalplayback) // Is metal sonic running? - { - WRITEUINT8(save->p, 0x01); - G_SaveMetal(&save->p); - } - else - WRITEUINT8(save->p, 0x00); - TracyCZoneEnd(__zone); } @@ -5973,9 +5965,6 @@ static void P_NetUnArchiveSpecials(savebuffer_t *save) P_SwitchWeather(globalweather); } - if (READUINT8(save->p) == 0x01) // metal sonic - G_LoadMetal(&save->p); - TracyCZoneEnd(__zone); } diff --git a/src/p_setup.cpp b/src/p_setup.cpp index a1af94db5..bdc948736 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -8237,9 +8237,6 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) // Initialize sector node list. P_Initsecnode(); - if (metalplayback) - G_StopMetalDemo(); - // Clear CECHO messages HU_ClearCEcho(); HU_ClearTitlecardCEcho(); @@ -8736,8 +8733,6 @@ void P_PostLoadLevel(void) P_InitPlayers(); - if (metalrecording) - G_BeginMetal(); if (demo.recording) // Okay, level loaded, character spawned and skinned, G_BeginRecording(); // I AM NOW READY TO RECORD. demo.deferstart = true; diff --git a/src/p_spec.c b/src/p_spec.c index 55394e72a..475fb9bed 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -3419,11 +3419,6 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha } break; - case 440: // Play race countdown and start Metal Sonic - if (!metalrecording && !metalplayback) - G_DoPlayMetal(); - break; - case 441: // Trigger unlockable { INT32 trigid = args[0]; @@ -5288,10 +5283,10 @@ static void P_EvaluateSpecialFlags(player_t *player, sector_t *sector, sector_t P_ProcessExitSector(player, sectag); if (sector->specialflags & SSF_FAN) { - player->mo->momz += mobjinfo[MT_FAN].mass/4; + player->mo->momz += (5*FRACUNIT)/4; - if (player->mo->momz > mobjinfo[MT_FAN].mass) - player->mo->momz = mobjinfo[MT_FAN].mass; + if (player->mo->momz > (5*FRACUNIT)) + player->mo->momz = (5*FRACUNIT); P_ResetPlayer(player); /* @@ -6645,8 +6640,6 @@ void T_LaserFlash(laserthink_t *flash) if (thing->flags & MF_SHOOTABLE) P_DamageMobj(thing, NULL, NULL, 1, DMG_NORMAL); - else if (thing->type == MT_EGGSHIELD) - P_KillMobj(thing, NULL, NULL, DMG_NORMAL); } break; diff --git a/src/p_tick.c b/src/p_tick.c index d8e26624f..b44aeee76 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -1157,11 +1157,6 @@ void P_Ticker(boolean run) quake = quake->next; } - if (metalplayback) - G_ReadMetalTic(metalplayback); - if (metalrecording) - G_WriteMetalTic(players[consoleplayer].mo); - if (demo.recording) { G_WriteAllGhostTics(); diff --git a/src/p_user.c b/src/p_user.c index 9fb1d06b4..483e82ba8 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -316,89 +316,6 @@ UINT8 P_GetNextEmerald(void) return cup->emeraldnum; } -// -// P_GiveEmerald -// -// Award an emerald upon completion -// of a special stage. -// -void P_GiveEmerald(boolean spawnObj) -{ - UINT8 em = P_GetNextEmerald(); - - S_StartSound(NULL, sfx_cgot); // Got the emerald! - stagefailed = false; - - if (spawnObj) - { - // The Chaos Emerald begins to orbit us! - // Only visibly give it to ONE person! - UINT8 i, pnum = ((playeringame[consoleplayer]) && (!players[consoleplayer].spectator) && (players[consoleplayer].mo)) ? consoleplayer : 255; - for (i = 0; i < MAXPLAYERS; i++) - { - mobj_t *emmo; - if (!playeringame[i]) - continue; - if (players[i].spectator) - continue; - if (!players[i].mo) - continue; - - emmo = P_SpawnMobjFromMobj(players[i].mo, 0, 0, players[i].mo->height, MT_GOTEMERALD); - if (!emmo) - continue; - P_SetTarget(&emmo->target, players[i].mo); - P_SetMobjState(emmo, mobjinfo[MT_GOTEMERALD].meleestate + em); - - // Make sure we're not being carried before our tracer is changed - players[i].carry = CR_NONE; - - P_SetTarget(&players[i].mo->tracer, emmo); - - if (pnum == 255) - { - pnum = i; - continue; - } - - if (i == pnum) - continue; - - emmo->flags2 |= RF_DONTDRAW; - } - } -} - -// -// P_GiveFinishFlags -// -// Give the player visual indicators -// that they've finished the map. -// -void P_GiveFinishFlags(player_t *player) -{ - angle_t angle = FixedAngle(player->mo->angle << FRACBITS); - UINT8 i; - - if (!player->mo) - return; - - if (!(netgame||multiplayer)) - return; - - for (i = 0; i < 3; i++) - { - angle_t fa = (angle >> ANGLETOFINESHIFT) & FINEMASK; - fixed_t xoffs = FINECOSINE(fa); - fixed_t yoffs = FINESINE(fa); - mobj_t* flag = P_SpawnMobjFromMobj(player->mo, xoffs, yoffs, 0, MT_FINISHFLAG); - flag->angle = angle; - angle += FixedAngle(120*FRACUNIT); - - P_SetTarget(&flag->target, player->mo); - } -} - // // P_FindLowestLap // @@ -1607,9 +1524,6 @@ static void P_CheckBustableBlocks(player_t *player) player->mo->momy >>= 1; } - //if (metalrecording) - // G_RecordBustup(rover); - EV_CrumbleChain(NULL, rover); // node->m_sector // Run a linedef executor?? diff --git a/src/sdl/i_system.cpp b/src/sdl/i_system.cpp index 0fba83218..2ba17183b 100644 --- a/src/sdl/i_system.cpp +++ b/src/sdl/i_system.cpp @@ -1653,8 +1653,6 @@ void I_Quit(void) if (demo.recording) G_CheckDemoStatus(); - if (metalrecording) - G_StopMetalRecording(false); #ifdef DEVELOP // Join up with thread if waiting @@ -1787,8 +1785,6 @@ void I_Error(const char *error, ...) #ifndef TESTERS if (demo.recording) G_CheckDemoStatus(); - if (metalrecording) - G_StopMetalRecording(false); #endif D_QuitNetGame(); diff --git a/src/sdl12/i_system.c b/src/sdl12/i_system.c index cdcbdd1d7..79f47c3d1 100644 --- a/src/sdl12/i_system.c +++ b/src/sdl12/i_system.c @@ -2992,8 +2992,6 @@ void I_Quit(void) if (demorecording) G_CheckDemoStatus(); - if (metalrecording) - G_StopMetalRecording(); D_QuitNetGame(); I_ShutdownMusic(); @@ -3149,8 +3147,6 @@ void I_Error(const char *error, ...) // Shutdown. Here might be other errors. if (demorecording) G_CheckDemoStatus(); - if (metalrecording) - G_StopMetalRecording(); D_QuitNetGame(); I_ShutdownMusic();