diff --git a/src/dehacked.c b/src/dehacked.c index 1afa5f0cf..8fb0e8df7 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -4783,7 +4783,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_SPIKEBALL8", // Elemental Shield's Spawn - "S_SPINFIRE0", "S_SPINFIRE1", "S_SPINFIRE2", "S_SPINFIRE3", @@ -4791,15 +4790,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_SPINFIRE5", "S_SPINFIRE6", - // Elemental Shield's FLYING Spawn - "S_AIRSPINFIRE_FLY1", - "S_AIRSPINFIRE_FLY2", - "S_AIRSPINFIRE_FLY3", - "S_AIRSPINFIRE_FLY4", - "S_AIRSPINFIRE_FLY5", - "S_AIRSPINFIRE_FLY6", - "S_AIRSPINFIRE_DIE", - // Spikes "S_SPIKE1", "S_SPIKE2", diff --git a/src/doomdef.h b/src/doomdef.h index 70ec8c0d1..77c0a9800 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -158,7 +158,7 @@ extern FILE *logstream; // Does this version require an added patch file? // Comment or uncomment this as necessary. -//#define USE_PATCH_DTA +#define USE_PATCH_DTA // Modification options // If you want to take advantage of the Master Server's ability to force clients to update diff --git a/src/info.c b/src/info.c index f946e72e8..484ab321d 100644 --- a/src/info.c +++ b/src/info.c @@ -1124,7 +1124,6 @@ state_t states[NUMSTATES] = {SPR_SPIK, 7, 1, {A_RotateSpikeBall}, 0, 0, S_SPIKEBALL1}, // S_SPIKEBALL8 // Elemental Shield's Spawn - {SPR_SFLM, FF_FULLBRIGHT|5, 2, {A_SetFuse}, 6*TICRATE, 0, S_SPINFIRE1}, // S_SPINFIRE0 {SPR_SFLM, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_SPINFIRE2}, // S_SPINFIRE1 {SPR_SFLM, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_SPINFIRE3}, // S_SPINFIRE2 {SPR_SFLM, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_SPINFIRE4}, // S_SPINFIRE3 @@ -1132,15 +1131,6 @@ state_t states[NUMSTATES] = {SPR_SFLM, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_SPINFIRE6}, // S_SPINFIRE5 {SPR_SFLM, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_SPINFIRE1}, // S_SPINFIRE6 - // Elemental Shield's FLYING Spawn - {SPR_SFLM, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_AIRSPINFIRE_FLY2}, //S_AIRSPINFIRE_FLY1, - {SPR_SFLM, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_AIRSPINFIRE_FLY3}, //S_AIRSPINFIRE_FLY2, - {SPR_SFLM, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_AIRSPINFIRE_FLY4}, //S_AIRSPINFIRE_FLY3, - {SPR_SFLM, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_AIRSPINFIRE_FLY5}, //S_AIRSPINFIRE_FLY4, - {SPR_SFLM, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_AIRSPINFIRE_FLY6}, //S_AIRSPINFIRE_FLY5, - {SPR_SFLM, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_AIRSPINFIRE_FLY1}, //S_AIRSPINFIRE_FLY6, - {SPR_SFLM, FF_FULLBRIGHT, 0, {A_SpawnObjectRelative}, 0, MT_SPINFIRE, S_NULL}, //S_AIRSPINFIRE_DIE, - // Floor Spike {SPR_USPK, 0,-1, {A_SpikeRetract}, 1, 0, S_SPIKE2}, // S_SPIKE1 -- Fully extended {SPR_USPK, 5, 2, {A_Pain}, 0, 0, S_SPIKE3}, // S_SPIKE2 @@ -5404,7 +5394,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_SPINFIRE -1, // doomednum - S_SPINFIRE0, // spawnstate + S_SPINFIRE1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -5429,33 +5419,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_AIRSPINFIRE - -1, // doomednum - S_AIRSPINFIRE_FLY1, // 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_AIRSPINFIRE_DIE, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 10*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_FIRE, // flags - S_NULL // raisestate - }, - { // MT_SPIKE 523, // doomednum S_SPIKE1, // spawnstate diff --git a/src/info.h b/src/info.h index 8a56ef77e..2460f6fbc 100644 --- a/src/info.h +++ b/src/info.h @@ -1634,7 +1634,6 @@ typedef enum state S_SPIKEBALL8, // Elemental Shield's Spawn - S_SPINFIRE0, S_SPINFIRE1, S_SPINFIRE2, S_SPINFIRE3, @@ -1642,15 +1641,6 @@ typedef enum state S_SPINFIRE5, S_SPINFIRE6, - // Elemental Shield's FLYING Spawn - S_AIRSPINFIRE_FLY1, - S_AIRSPINFIRE_FLY2, - S_AIRSPINFIRE_FLY3, - S_AIRSPINFIRE_FLY4, - S_AIRSPINFIRE_FLY5, - S_AIRSPINFIRE_FLY6, - S_AIRSPINFIRE_DIE, - // Spikes S_SPIKE1, S_SPIKE2, @@ -3143,7 +3133,6 @@ typedef enum mobj_type MT_SPIKEBALL, // Spike Ball MT_SPECIALSPIKEBALL, MT_SPINFIRE, - MT_AIRSPINFIRE, // Elemental flame flying through the air MT_SPIKE, MT_STARPOST, MT_BIGMINE, diff --git a/src/p_mobj.c b/src/p_mobj.c index 138455604..5ce06f90b 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2377,6 +2377,19 @@ static boolean P_ZMovement(mobj_t *mo) mo->flags |= MF_NOGRAVITY; } break; + case MT_SPINFIRE: + if (P_CheckDeathPitCollide(mo)) + { + P_RemoveMobj(mo); + return false; + } + if (mo->z <= mo->floorz && mo->momz) + { + mo->flags |= MF_NOGRAVITY; + mo->momx = mo->momy = mo->momz = 0; + mo->z = mo->floorz; + } + break; case MT_GOOP: if (P_CheckDeathPitCollide(mo)) { @@ -7338,10 +7351,13 @@ void P_MobjThinker(mobj_t *mobj) #endif break; case MT_SPINFIRE: - if (mobj->eflags & MFE_VERTICALFLIP) - mobj->z = mobj->ceilingz - mobj->height; - else - mobj->z = mobj->floorz; + if (mobj->flags & MF_NOGRAVITY) + { + if (mobj->eflags & MFE_VERTICALFLIP) + mobj->z = mobj->ceilingz - mobj->height; + else + mobj->z = mobj->floorz; + } // THERE IS NO BREAK HERE ON PURPOSE default: // check mobj against possible water content, before movement code diff --git a/src/p_user.c b/src/p_user.c index 2d957aec3..99eef15ae 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -6224,9 +6224,11 @@ void P_ElementalFire(player_t *player, boolean cropcircle) #define numangles 8 for (i = 0; i < numangles; i++) { - flame = P_SpawnMobj(player->mo->x, player->mo->y, ground, MT_AIRSPINFIRE); + flame = P_SpawnMobj(player->mo->x, player->mo->y, ground, MT_SPINFIRE); + flame->flags &= ~MF_NOGRAVITY; P_SetTarget(&flame->target, player->mo); flame->angle = travelangle + i*(ANGLE_MAX/numangles); + flame->fuse = TICRATE*7; // takes about an extra second to hit the ground flame->destscale = player->mo->scale; P_SetScale(flame, player->mo->scale); flame->eflags = (flame->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP); @@ -6255,7 +6257,7 @@ void P_ElementalFire(player_t *player, boolean cropcircle) flame = P_SpawnMobj(newx, newy, ground, MT_SPINFIRE); P_SetTarget(&flame->target, player->mo); flame->angle = travelangle; - // flame->fuse = TICRATE*6; // now done in spawnstate + flame->fuse = TICRATE*6; flame->destscale = player->mo->scale; P_SetScale(flame, player->mo->scale); flame->eflags = (flame->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP);