From 47c67472ff3ce02ae646c342ec36f5e834ace232 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Thu, 10 Nov 2016 21:09:05 +0000 Subject: [PATCH] Added bubble form of spin dust --- src/dehacked.c | 4 ++++ src/info.c | 5 ++++- src/info.h | 4 ++++ src/p_mobj.c | 7 +++++++ src/p_user.c | 15 +++++---------- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 3ef8b0d29..487ef8cd9 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -5571,6 +5571,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_SPINDUST2", "S_SPINDUST3", "S_SPINDUST4", + "S_SPINDUST_BUBBLE1", + "S_SPINDUST_BUBBLE2", + "S_SPINDUST_BUBBLE3", + "S_SPINDUST_BUBBLE4", "S_FOG1", "S_FOG2", diff --git a/src/info.c b/src/info.c index 459238917..d9bf9b463 100644 --- a/src/info.c +++ b/src/info.c @@ -2281,11 +2281,14 @@ state_t states[NUMSTATES] = {SPR_WZAP, FF_TRANS10|FF_ANIMATE|FF_RANDOMANIM, 4, {NULL}, 3, 2, S_NULL}, // S_WATERZAP // Spindash dust - // TODO: other spin dust types {SPR_DUST, 0, 7, {NULL}, 0, 0, S_SPINDUST2}, // S_SPINDUST1 {SPR_DUST, 1, 6, {NULL}, 0, 0, S_SPINDUST3}, // S_SPINDUST2 {SPR_DUST, FF_TRANS30|2, 4, {NULL}, 0, 0, S_SPINDUST4}, // S_SPINDUST3 {SPR_DUST, FF_TRANS60|3, 3, {NULL}, 0, 0, S_NULL}, // S_SPINDUST4 + {SPR_BUBL, 0, 7, {NULL}, 0, 0, S_SPINDUST_BUBBLE2}, // S_SPINDUST_BUBBLE1 + {SPR_BUBL, 0, 6, {NULL}, 0, 0, S_SPINDUST_BUBBLE3}, // S_SPINDUST_BUBBLE2 + {SPR_BUBL, FF_TRANS30|0, 4, {NULL}, 0, 0, S_SPINDUST_BUBBLE4}, // S_SPINDUST_BUBBLE3 + {SPR_BUBL, FF_TRANS60|0, 3, {NULL}, 0, 0, S_NULL}, // S_SPINDUST_BUBBLE4 {SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50, 2, {NULL}, 0, 0, S_FOG2}, // S_FOG1 {SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|1, 2, {NULL}, 0, 0, S_FOG3}, // S_FOG2 diff --git a/src/info.h b/src/info.h index fc5012d29..4545bbbd6 100644 --- a/src/info.h +++ b/src/info.h @@ -2463,6 +2463,10 @@ typedef enum state S_SPINDUST2, S_SPINDUST3, S_SPINDUST4, + S_SPINDUST_BUBBLE1, + S_SPINDUST_BUBBLE2, + S_SPINDUST_BUBBLE3, + S_SPINDUST_BUBBLE4, S_FOG1, S_FOG2, diff --git a/src/p_mobj.c b/src/p_mobj.c index abe7849f2..827d24f3c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7541,6 +7541,13 @@ void P_MobjThinker(mobj_t *mobj) mobj->momx = FixedMul(mobj->momx, (3*FRACUNIT)/4); // originally 50000 mobj->momy = FixedMul(mobj->momy, (3*FRACUNIT)/4); // same //mobj->momz = mobj->momz+P_MobjFlip(mobj)/3; // no meaningful change in value to be frank + if (mobj->state >= &states[S_SPINDUST_BUBBLE1] && mobj->state <= &states[S_SPINDUST_BUBBLE4]) // bubble dust! + { + P_MobjCheckWater(mobj); + if (mobj->watertop != mobj->subsector->sector->floorheight - 1000*FRACUNIT + && mobj->z+mobj->height >= mobj->watertop - 5*FRACUNIT) + mobj->flags2 |= MF2_DONTDRAW; + } break; case MT_SPINFIRE: if (mobj->eflags & MFE_VERTICALFLIP) diff --git a/src/p_user.c b/src/p_user.c index 02ab2044c..7fe015a39 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3671,19 +3671,14 @@ static void P_DoSpinDashDust(player_t *player) { UINT32 i; mobj_t *particle; - UINT32 prandom[3]; + INT32 prandom[3]; for (i = 0; i <= (leveltime%7)/2; i++) { // 1, 2, 3 or 4 particles particle = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_SPINDUST); - if (player->powers[pw_shield] == SH_ELEMENTAL && !(player->mo->eflags & (MFE_TOUCHWATER|MFE_UNDERWATER))) { - //P_SetMobjState(particle, S_FIREDUST1); - //particle->bubble = false; - } else if (player->mo->eflags & (MFE_TOUCHWATER|MFE_UNDERWATER)) { - //P_SetMobjState(particle, S_BUBBLEDUST1); - //particle->bubble = true; - } else { - //P_SetMobjState(particle, S_SPINDUST1); - //particle->bubble = false; + /*if (player->powers[pw_shield] == SH_ELEMENTAL && !(player->mo->eflags & (MFE_TOUCHWATER|MFE_UNDERWATER))) { + P_SetMobjState(particle, S_SPINDUST_FIRE; + } else */if (player->mo->eflags & (MFE_TOUCHWATER|MFE_UNDERWATER)) { + P_SetMobjState(particle, S_SPINDUST_BUBBLE1); } P_SetTarget(&particle->target, player->mo); particle->destscale = (2*player->mo->scale)/3;