From ef0da6ce9cca3ad1b4682c7e1f120a81245a5e31 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Mon, 16 Nov 2020 02:38:13 -0500 Subject: [PATCH] Finished bumper destruction --- src/dehacked.c | 16 ++++++++++++ src/info.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/info.h | 18 +++++++++++++ src/p_mobj.c | 57 +++++++++++++++++++++++++++++++++++++++- 4 files changed, 160 insertions(+), 1 deletion(-) diff --git a/src/dehacked.c b/src/dehacked.c index 23359b705..b04ccd92f 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8748,6 +8748,20 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_BATTLEBUMPER_EXSHELLC1", "S_BATTLEBUMPER_EXSHELLC2", + "S_BATTLEBUMPER_EXDEBRIS1", + "S_BATTLEBUMPER_EXDEBRIS2", + + "S_BATTLEBUMPER_EXBLAST1", + "S_BATTLEBUMPER_EXBLAST2", + "S_BATTLEBUMPER_EXBLAST3", + "S_BATTLEBUMPER_EXBLAST4", + "S_BATTLEBUMPER_EXBLAST5", + "S_BATTLEBUMPER_EXBLAST6", + "S_BATTLEBUMPER_EXBLAST7", + "S_BATTLEBUMPER_EXBLAST8", + "S_BATTLEBUMPER_EXBLAST9", + "S_BATTLEBUMPER_EXBLAST10", + // DEZ respawn laser "S_DEZLASER", "S_DEZLASER_TRAIL1", @@ -10228,6 +10242,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_SINKTRAIL", "MT_BATTLEBUMPER", // Battle Mode bumper + "MT_BATTLEBUMPER_DEBRIS", + "MT_BATTLEBUMPER_BLAST", "MT_DEZLASER", diff --git a/src/info.c b/src/info.c index e9376c607..ae7e58b8e 100644 --- a/src/info.c +++ b/src/info.c @@ -560,6 +560,8 @@ char sprnames[NUMSPRITES + 1][5] = "KBLN", // Battle Mode Bumper "BEXC", // Battle Bumper Explosion: Crystal "BEXS", // Battle Bumper Explosion: Shell + "BDEB", // Battle Bumper Explosion: Debris + "BEXB", // Battle Bumper Explosion: Blast "DEZL", // DEZ Laser respawn @@ -4431,6 +4433,20 @@ state_t states[NUMSTATES] = {SPR_BEXS, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_BATTLEBUMPER_EXSHELLC2}, // S_BATTLEBUMPER_EXSHELLC1 {SPR_BEXS, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_BATTLEBUMPER_EXSHELLC1}, // S_BATTLEBUMPER_EXSHELLC2 + {SPR_BDEB, FF_FULLBRIGHT|FF_ANIMATE, 84, {NULL}, 13, 6, S_BATTLEBUMPER_EXDEBRIS2}, // S_BATTLEBUMPER_EXDEBRIS1 + {SPR_BDEB, FF_FULLBRIGHT|13, 20, {NULL}, 0, 0, S_NULL}, // S_BATTLEBUMPER_EXDEBRIS2 + + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST2}, // S_BATTLEBUMPER_EXBLAST1 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS10, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST3}, // S_BATTLEBUMPER_EXBLAST2 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS20, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST4}, // S_BATTLEBUMPER_EXBLAST3 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS30, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST5}, // S_BATTLEBUMPER_EXBLAST4 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS40, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST6}, // S_BATTLEBUMPER_EXBLAST5 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS50, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST7}, // S_BATTLEBUMPER_EXBLAST6 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS60, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST8}, // S_BATTLEBUMPER_EXBLAST7 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS70, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST9}, // S_BATTLEBUMPER_EXBLAST8 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS80, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST10}, // S_BATTLEBUMPER_EXBLAST9 + {SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS90, 2, {NULL}, 0, 0, S_NULL}, // S_BATTLEBUMPER_EXBLAST10 + {SPR_DEZL, FF_FULLBRIGHT|FF_PAPERSPRITE, 8, {NULL}, 0, 0, S_NULL}, // S_DEZLASER {SPR_DEZL, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_DEZLASER_TRAIL2}, // S_DEZLASER_TRAIL1 {SPR_DEZL, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_DEZLASER_TRAIL3}, // S_DEZLASER_TRAIL2 @@ -24127,6 +24143,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_BATTLEBUMPER_DEBRIS + -1, // doomednum + S_BATTLEBUMPER_EXDEBRIS1,// spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 8*FRACUNIT, // radius + 16*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_SCENERY|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + + { // MT_BATTLEBUMPER_BLAST + -1, // doomednum + S_BATTLEBUMPER_EXBLAST1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 8*FRACUNIT, // radius + 16*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_SCENERY|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + { // MT_DEZLASER -1, // doomednum S_DEZLASER, // spawnstate diff --git a/src/info.h b/src/info.h index d5946e8e6..d51267587 100644 --- a/src/info.h +++ b/src/info.h @@ -831,6 +831,8 @@ typedef enum sprite SPR_KBLN, // Battle Mode Bumper SPR_BEXC, // Battle Bumper Explosion: Crystal SPR_BEXS, // Battle Bumper Explosion: Shell + SPR_BDEB, // Battle Bumper Explosion: Debris + SPR_BEXB, // Battle Bumper Explosion: Blast SPR_DEZL, // DEZ Laser respawn @@ -4596,6 +4598,20 @@ typedef enum state S_BATTLEBUMPER_EXSHELLC1, S_BATTLEBUMPER_EXSHELLC2, + S_BATTLEBUMPER_EXDEBRIS1, + S_BATTLEBUMPER_EXDEBRIS2, + + S_BATTLEBUMPER_EXBLAST1, + S_BATTLEBUMPER_EXBLAST2, + S_BATTLEBUMPER_EXBLAST3, + S_BATTLEBUMPER_EXBLAST4, + S_BATTLEBUMPER_EXBLAST5, + S_BATTLEBUMPER_EXBLAST6, + S_BATTLEBUMPER_EXBLAST7, + S_BATTLEBUMPER_EXBLAST8, + S_BATTLEBUMPER_EXBLAST9, + S_BATTLEBUMPER_EXBLAST10, + // DEZ Laser respawn S_DEZLASER, S_DEZLASER_TRAIL1, @@ -6116,6 +6132,8 @@ typedef enum mobj_type MT_SINKTRAIL, MT_BATTLEBUMPER, // Battle Mode bumpers + MT_BATTLEBUMPER_DEBRIS, + MT_BATTLEBUMPER_BLAST, MT_DEZLASER, diff --git a/src/p_mobj.c b/src/p_mobj.c index dd69a9036..b74380517 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5330,7 +5330,54 @@ static void P_MobjSceneryThink(mobj_t *mobj) } else { - // TODO: confetti goes here + const INT16 spacing = 64; + UINT8 i; + + for (i = 0; i < 10; i++) + { + mobj_t *debris = P_SpawnMobjFromMobj( + mobj, + P_RandomRange(-spacing, spacing) * FRACUNIT, + P_RandomRange(-spacing, spacing) * FRACUNIT, + P_RandomRange(-spacing, spacing) * FRACUNIT, + MT_BATTLEBUMPER_DEBRIS + ); + + P_SetScale(debris, (debris->destscale *= 2)); + debris->color = mobj->color; + + debris->momz = -debris->scale * P_MobjFlip(debris); + } + + for (i = 0; i < 2; i++) + { + mobj_t *blast = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_BATTLEBUMPER_BLAST); + + blast->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy) + ANGLE_45; + blast->destscale *= 4; + + if (i & 1) + { + blast->angle += ANGLE_90; + } + } + + for (i = 0; i < 10; i++) + { + mobj_t *puff = P_SpawnMobjFromMobj( + mobj, + P_RandomRange(-spacing, spacing) * FRACUNIT, + P_RandomRange(-spacing, spacing) * FRACUNIT, + P_RandomRange(-spacing, spacing) * FRACUNIT, + MT_SPINDASHDUST + ); + + P_SetScale(puff, (puff->destscale *= 5)); + puff->momz = puff->scale * P_MobjFlip(puff); + + P_Thrust(puff, R_PointToAngle2(mobj->x, mobj->y, puff->x, puff->y), puff->scale); + } + P_RemoveMobj(mobj); return; } @@ -5425,6 +5472,14 @@ static void P_MobjSceneryThink(mobj_t *mobj) } break; + + case MT_BATTLEBUMPER_DEBRIS: + if (mobj->state == states + S_BATTLEBUMPER_EXDEBRIS2) + { + mobj->drawflags ^= MFD_DONTDRAW; + } + break; + case MT_PLAYERARROW: if (mobj->target && mobj->target->health && mobj->target->player && !mobj->target->player->spectator