mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 12:01:47 +00:00
Fix Leaf Storm Eggball
- Map object num was incorrectly copypasted onto the Dead Line Ring Vaccuum as well - Was getting destroyed instantly because its first spawnpoint is a deathpit. Now it only kills itself when it lands on a deathpit, not if it started on one - Use destscale instead of scaling every frame - Reduce duplicate P_IsObjectOnGround calls - Now has its own state
This commit is contained in:
parent
b2bbde290b
commit
dbcb39d7ed
4 changed files with 28 additions and 18 deletions
|
|
@ -4687,6 +4687,8 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_RIDEROID",
|
"S_RIDEROID",
|
||||||
"S_RIDEROID_ICON",
|
"S_RIDEROID_ICON",
|
||||||
|
|
||||||
|
"S_EGGBALL",
|
||||||
|
|
||||||
"S_DLZHOVER",
|
"S_DLZHOVER",
|
||||||
"S_DLZROCKET_L",
|
"S_DLZROCKET_L",
|
||||||
"S_DLZROCKET_R",
|
"S_DLZROCKET_R",
|
||||||
|
|
|
||||||
|
|
@ -5459,6 +5459,9 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_RDRD, 0, -1, {NULL}, 0, 0, S_RIDEROID}, // S_RIDEROID
|
{SPR_RDRD, 0, -1, {NULL}, 0, 0, S_RIDEROID}, // S_RIDEROID
|
||||||
{SPR_RDRC, FF_ANIMATE|FF_FULLBRIGHT|FF_TRANS30, -1, {NULL}, 3, 2, S_RIDEROID_ICON}, // S_RIDEROID_ICON
|
{SPR_RDRC, FF_ANIMATE|FF_FULLBRIGHT|FF_TRANS30, -1, {NULL}, 3, 2, S_RIDEROID_ICON}, // S_RIDEROID_ICON
|
||||||
|
|
||||||
|
// Leaf Storm
|
||||||
|
{SPR_LSZB, 0, -1, {NULL}, 0, 0, S_EGGBALL}, // S_EGGBALL
|
||||||
|
|
||||||
// Dead Line
|
// Dead Line
|
||||||
{SPR_DLZH, 0, -1, {NULL}, 0, 0, S_DLZHOVER}, // S_DLZHOVER
|
{SPR_DLZH, 0, -1, {NULL}, 0, 0, S_DLZHOVER}, // S_DLZHOVER
|
||||||
|
|
||||||
|
|
@ -30603,8 +30606,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
},
|
},
|
||||||
|
|
||||||
{ // MT_LSZ_EGGBALL
|
{ // MT_LSZ_EGGBALL
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_INVISIBLE, // spawnstate
|
S_EGGBALL, // spawnstate
|
||||||
1000, // spawnhealth
|
1000, // spawnhealth
|
||||||
S_NULL, // seestate
|
S_NULL, // seestate
|
||||||
sfx_None, // seesound
|
sfx_None, // seesound
|
||||||
|
|
@ -30765,7 +30768,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
},
|
},
|
||||||
|
|
||||||
{ // MT_DLZ_RINGVACCUM,
|
{ // MT_DLZ_RINGVACCUM,
|
||||||
3443, // doomednum
|
3433, // doomednum
|
||||||
S_INVISIBLE, // spawnstate
|
S_INVISIBLE, // spawnstate
|
||||||
1000, // spawnhealth
|
1000, // spawnhealth
|
||||||
S_NULL, // seestate
|
S_NULL, // seestate
|
||||||
|
|
|
||||||
|
|
@ -5884,6 +5884,9 @@ typedef enum state
|
||||||
S_RIDEROID,
|
S_RIDEROID,
|
||||||
S_RIDEROID_ICON,
|
S_RIDEROID_ICON,
|
||||||
|
|
||||||
|
// leaf storm
|
||||||
|
S_EGGBALL,
|
||||||
|
|
||||||
// dead line zone
|
// dead line zone
|
||||||
S_DLZHOVER,
|
S_DLZHOVER,
|
||||||
S_DLZROCKET_L,
|
S_DLZROCKET_L,
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,14 @@
|
||||||
// spawns balls every BALLMINSPAWNTIME to BALLMAXSPAWNTIME seconds.
|
// spawns balls every BALLMINSPAWNTIME to BALLMAXSPAWNTIME seconds.
|
||||||
void Obj_EggBallSpawnerThink(mobj_t *mo)
|
void Obj_EggBallSpawnerThink(mobj_t *mo)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!mo->extravalue1)
|
if (!mo->extravalue1)
|
||||||
{
|
{
|
||||||
mobj_t *ball = P_SpawnMobj(mo->x, mo->y, mo->z, MT_LSZ_EGGBALL);
|
mobj_t *ball = P_SpawnMobj(mo->x, mo->y, mo->z, MT_LSZ_EGGBALL);
|
||||||
ball->angle = mo->angle;
|
if (P_MobjWasRemoved(ball) == false)
|
||||||
P_SetScale(ball, 6*mapobjectscale);
|
{
|
||||||
|
ball->angle = mo->angle;
|
||||||
|
P_SetScale(ball, (ball->destscale = 6*mapobjectscale));
|
||||||
|
}
|
||||||
|
|
||||||
mo->extravalue1 = P_RandomRange(PR_TRACKHAZARD, TICRATE*BALLMINSPAWNTIME, TICRATE*BALLMAXSPAWNTIME);
|
mo->extravalue1 = P_RandomRange(PR_TRACKHAZARD, TICRATE*BALLMINSPAWNTIME, TICRATE*BALLMAXSPAWNTIME);
|
||||||
}
|
}
|
||||||
|
|
@ -50,13 +52,17 @@ void Obj_EggBallSpawnerThink(mobj_t *mo)
|
||||||
|
|
||||||
void Obj_EggBallThink(mobj_t *mo)
|
void Obj_EggBallThink(mobj_t *mo)
|
||||||
{
|
{
|
||||||
|
const boolean onground = P_IsObjectOnGround(mo);
|
||||||
|
|
||||||
P_SetScale(mo, 6*mapobjectscale);
|
if (mo->eflags & MFE_JUSTHITFLOOR)
|
||||||
|
|
||||||
if (mo->eflags & MFE_JUSTHITFLOOR
|
|
||||||
&& mo->threshold)
|
|
||||||
{
|
{
|
||||||
if (mo->threshold < -10*mapobjectscale)
|
if (mo->extravalue1 && P_CheckDeathPitCollide(mo))
|
||||||
|
{
|
||||||
|
P_RemoveMobj(mo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mo->threshold && mo->threshold < -10*mapobjectscale)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
|
||||||
|
|
@ -80,17 +86,16 @@ void Obj_EggBallThink(mobj_t *mo)
|
||||||
|
|
||||||
if (!mo->extravalue1)
|
if (!mo->extravalue1)
|
||||||
{
|
{
|
||||||
if (P_IsObjectOnGround(mo))
|
if (onground)
|
||||||
{
|
{
|
||||||
mo->extravalue1 = 1;
|
mo->extravalue1 = 1;
|
||||||
mo->cusval = 24*mapobjectscale;
|
mo->cusval = 24*mapobjectscale;
|
||||||
mo->movedir = mo->z;
|
mo->movedir = mo->z;
|
||||||
mo->sprite = SPR_LSZB;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (P_IsObjectOnGround(mo) && mo->extravalue2 &1)
|
if (onground && (mo->extravalue2 & 1))
|
||||||
{
|
{
|
||||||
fixed_t dx = mo->x + P_RandomRange(PR_DECORATION, -96, 96)*mapobjectscale - mo->momx*2;
|
fixed_t dx = mo->x + P_RandomRange(PR_DECORATION, -96, 96)*mapobjectscale - mo->momx*2;
|
||||||
fixed_t dy = mo->y + P_RandomRange(PR_DECORATION, -96, 96)*mapobjectscale - mo->momy*2;
|
fixed_t dy = mo->y + P_RandomRange(PR_DECORATION, -96, 96)*mapobjectscale - mo->momy*2;
|
||||||
|
|
@ -107,7 +112,7 @@ void Obj_EggBallThink(mobj_t *mo)
|
||||||
mo->frame = mo->extravalue2 % (24 * 2) / 2; // 24 is for frame Y.
|
mo->frame = mo->extravalue2 % (24 * 2) / 2; // 24 is for frame Y.
|
||||||
|
|
||||||
// build up speed
|
// build up speed
|
||||||
if (P_IsObjectOnGround(mo))
|
if (onground)
|
||||||
{
|
{
|
||||||
if (mo->eflags & MFE_VERTICALFLIP)
|
if (mo->eflags & MFE_VERTICALFLIP)
|
||||||
{
|
{
|
||||||
|
|
@ -128,7 +133,4 @@ void Obj_EggBallThink(mobj_t *mo)
|
||||||
mo->movedir = mo->z;
|
mo->movedir = mo->z;
|
||||||
}
|
}
|
||||||
mo->threshold = mo->momz;
|
mo->threshold = mo->momz;
|
||||||
|
|
||||||
if (P_CheckDeathPitCollide(mo))
|
|
||||||
P_RemoveMobj(mo);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue