From ac9b96e98b29fc9003eec5ef471a399903d18d14 Mon Sep 17 00:00:00 2001 From: Lach Date: Sun, 27 Aug 2023 14:01:23 +1000 Subject: [PATCH 1/2] Add spawn rate arg to Sneaker Panel Spawners; allow sneaker panels to scale themselves redundantly --- src/deh_tables.c | 1 - src/info.c | 5 ++--- src/info.h | 1 - src/k_objects.h | 3 +++ src/objects/sneaker-panel.c | 32 ++++++++++++++++++++++---------- src/p_mobj.c | 13 +++++++++++++ 6 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/deh_tables.c b/src/deh_tables.c index e51e2e878..8dd77706d 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -4252,7 +4252,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_SNEAKERPANEL", "S_SNEAKERPANEL_SMALL", "S_SNEAKERPANEL_TINY", - "S_SNEAKERPANELSPAWNER", // Various plants "S_SONICBUSH", diff --git a/src/info.c b/src/info.c index a1fca74c2..7e504fd81 100644 --- a/src/info.c +++ b/src/info.c @@ -4959,7 +4959,6 @@ state_t states[NUMSTATES] = {SPR_BSTP, FF_ANIMATE|FF_GLOBALANIM|FF_FLOORSPRITE|FF_FULLBRIGHT, -1, {NULL}, 5, 2, S_SNEAKERPANEL}, // S_SNEAKERPANEL {SPR_BSTS, FF_ANIMATE|FF_GLOBALANIM|FF_FLOORSPRITE|FF_FULLBRIGHT, -1, {NULL}, 5, 2, S_SNEAKERPANEL_SMALL}, // S_SNEAKERPANEL_SMALL {SPR_BSTT, FF_ANIMATE|FF_GLOBALANIM|FF_FLOORSPRITE|FF_FULLBRIGHT, -1, {NULL}, 5, 2, S_SNEAKERPANEL_TINY}, // S_SNEAKERPANEL_TINY - {SPR_NULL, 0, 65, {A_SpawnSneakerPanel}, 0, 0, S_SNEAKERPANELSPAWNER}, // S_SNEAKERPANELSPAWNER // Various plants {SPR_SBUS, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SONICBUSH @@ -26747,11 +26746,11 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_SNEAKERPANELSPAWNER 511, // doomednum - S_SNEAKERPANELSPAWNER, // spawnstate + S_INVISIBLE, // spawnstate 0, // spawnhealth S_NULL, // seestate sfx_None, // seesound - 0, // reactiontime + 65, // reactiontime sfx_None, // attacksound S_NULL, // painstate 0, // painchance diff --git a/src/info.h b/src/info.h index dec72563c..dfff7d216 100644 --- a/src/info.h +++ b/src/info.h @@ -5406,7 +5406,6 @@ typedef enum state S_SNEAKERPANEL, S_SNEAKERPANEL_SMALL, S_SNEAKERPANEL_TINY, - S_SNEAKERPANELSPAWNER, // Various plants S_SONICBUSH, diff --git a/src/k_objects.h b/src/k_objects.h index 79afc08cb..85595b4cc 100644 --- a/src/k_objects.h +++ b/src/k_objects.h @@ -203,6 +203,9 @@ void Obj_SneakerPanelSpriteScale(mobj_t *mobj); void Obj_SneakerPanelSpawn(mobj_t *mobj); void Obj_SneakerPanelSetup(mobj_t *mobj, mapthing_t *mthing); void Obj_SneakerPanelCollide(mobj_t *pad, mobj_t *mo); +void Obj_SneakerPanelSpawnerSpawn(mobj_t *mobj); +void Obj_SneakerPanelSpawnerSetup(mobj_t *mobj, mapthing_t *mthing); +void Obj_SneakerPanelSpawnerFuse(mobj_t *mobj); /* Emerald */ void Obj_SpawnEmeraldSparks(mobj_t *source); diff --git a/src/objects/sneaker-panel.c b/src/objects/sneaker-panel.c index ac8c7708b..4bb1c02ac 100644 --- a/src/objects/sneaker-panel.c +++ b/src/objects/sneaker-panel.c @@ -11,11 +11,6 @@ void Obj_SneakerPanelSpriteScale(mobj_t *mobj) statenum_t newState; fixed_t spriteScale; - if (mobj->scale == mobj->movefactor) - return; - - mobj->movefactor = mobj->scale; - if (mobj->scale > FRACUNIT >> 1) { newState = S_SNEAKERPANEL; @@ -32,11 +27,8 @@ void Obj_SneakerPanelSpriteScale(mobj_t *mobj) spriteScale = FRACUNIT << 2; } - if (((statenum_t)(mobj->state - states)) != newState) - { - P_SetMobjState(mobj, newState); - mobj->spritexscale = mobj->spriteyscale = spriteScale; - } + P_SetMobjState(mobj, newState); + mobj->spritexscale = mobj->spriteyscale = spriteScale; } void Obj_SneakerPanelSpawn(mobj_t *mobj) @@ -121,3 +113,23 @@ void Obj_SneakerPanelCollide(mobj_t *panel, mobj_t *mo) K_DoSneaker(player, 0); } + +void Obj_SneakerPanelSpawnerSpawn(mobj_t *mobj) +{ + mobj->fuse = mobj->reactiontime; +} + +void Obj_SneakerPanelSpawnerSetup(mobj_t *mobj, mapthing_t *mthing) +{ + if (mthing->thing_args[0] != 0) + { + mobj->fuse = mobj->reactiontime = mthing->thing_args[0]; + } +} + +void Obj_SneakerPanelSpawnerFuse(mobj_t *mobj) +{ + var1 = var2 = 0; + A_SpawnSneakerPanel(mobj); + mobj->fuse = mobj->reactiontime; +} diff --git a/src/p_mobj.c b/src/p_mobj.c index 1e6a797d1..c728c2729 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9835,6 +9835,11 @@ static boolean P_FuseThink(mobj_t *mobj) P_RemoveMobj(mobj); return false; } + case MT_SNEAKERPANELSPAWNER: + { + Obj_SneakerPanelSpawnerFuse(mobj); + break; + } case MT_PLAYER: break; // don't remove default: @@ -10982,6 +10987,9 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_SNEAKERPANEL: Obj_SneakerPanelSpawn(mobj); break; + case MT_SNEAKERPANELSPAWNER: + Obj_SneakerPanelSpawnerSpawn(mobj); + break; default: break; } @@ -13626,6 +13634,11 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj) Obj_SneakerPanelSetup(mobj, mthing); break; } + case MT_SNEAKERPANELSPAWNER: + { + Obj_SneakerPanelSpawnerSetup(mobj, mthing); + break; + } default: break; } From 3ca23fbecf11f6f228e41172e99dd5aa699323ec Mon Sep 17 00:00:00 2001 From: Lach Date: Sun, 27 Aug 2023 14:59:42 +1000 Subject: [PATCH 2/2] Remove scenery flag from Sneaker Panel Spawners (to tick their fuse) --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 7e504fd81..21c1d0869 100644 --- a/src/info.c +++ b/src/info.c @@ -26767,7 +26767,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 0, // mass 0, // damage sfx_None, // activesound - MF_NOGRAVITY|MF_NOBLOCKMAP|MF_SCENERY|MF_NOCLIPTHING, // flags + MF_NOGRAVITY|MF_NOBLOCKMAP|MF_NOCLIPTHING, // flags S_NULL // raisestate },