mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-21 15:32:34 +00:00
Fix respawning item boxes with P_RespawnBattlesBoxes
This commit is contained in:
parent
81eb513ef1
commit
e7b0e223e1
4 changed files with 35 additions and 36 deletions
|
|
@ -22550,7 +22550,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
MT_RANDOMITEMPOP, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SLIDEME|MF_SPECIAL|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
S_RANDOMITEM1 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SPHEREBOX
|
||||
|
|
|
|||
|
|
@ -13199,7 +13199,13 @@ void A_ItemPop(mobj_t *actor)
|
|||
|
||||
// Here at mapload in battle?
|
||||
if ((gametyperules & GTR_BUMPERS) && (actor->flags2 & MF2_BOSSNOTRAP))
|
||||
{
|
||||
numgotboxes++;
|
||||
|
||||
// do not flicker back in just yet, handled by
|
||||
// P_RespawnBattleBoxes eventually
|
||||
P_SetMobjState(actor, S_INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
void A_JawzChase(mobj_t *actor)
|
||||
|
|
|
|||
|
|
@ -1037,27 +1037,34 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
{
|
||||
if (target->flags & MF_MONITOR || target->type == MT_RANDOMITEM)
|
||||
{
|
||||
UINT8 i;
|
||||
|
||||
P_SetTarget(&target->target, source);
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
if (gametyperules & GTR_BUMPERS)
|
||||
{
|
||||
if (&players[i] == source->player)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (playeringame[i] && !players[i].spectator && players[i].lives != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
target->fuse = 2;
|
||||
}
|
||||
|
||||
if (i < MAXPLAYERS)
|
||||
else
|
||||
{
|
||||
// Respawn items in multiplayer, don't respawn them when alone
|
||||
target->fuse = 2*TICRATE + 2;
|
||||
UINT8 i;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (&players[i] == source->player)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (playeringame[i] && !players[i].spectator && players[i].lives != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < MAXPLAYERS)
|
||||
{
|
||||
// Respawn items in multiplayer, don't respawn them when alone
|
||||
target->fuse = 2*TICRATE + 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
24
src/p_mobj.c
24
src/p_mobj.c
|
|
@ -9229,7 +9229,7 @@ static boolean P_FuseThink(mobj_t *mobj)
|
|||
{
|
||||
;
|
||||
}
|
||||
else if ((gametyperules & GTR_BUMPERS) && (mobj->threshold != 70))
|
||||
else if ((gametyperules & GTR_BUMPERS) && (mobj->state == &states[S_INVISIBLE]))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
|
@ -11072,7 +11072,6 @@ void P_RespawnBattleBoxes(void)
|
|||
for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next)
|
||||
{
|
||||
mobj_t *box;
|
||||
mobj_t *newmobj;
|
||||
|
||||
if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed)
|
||||
continue;
|
||||
|
|
@ -11081,25 +11080,12 @@ void P_RespawnBattleBoxes(void)
|
|||
|
||||
if (box->type != MT_RANDOMITEM
|
||||
|| (box->flags2 & MF2_DONTRESPAWN)
|
||||
|| box->threshold != 68
|
||||
|| box->fuse
|
||||
|| ((tic_t)box->cvmem+1 >= leveltime))
|
||||
|| box->health > 0
|
||||
|| box->fuse)
|
||||
continue; // only popped items
|
||||
|
||||
// Respawn from mapthing if you have one!
|
||||
if (box->spawnpoint)
|
||||
{
|
||||
P_SpawnMapThing(box->spawnpoint);
|
||||
newmobj = box->spawnpoint->mobj; // this is set to the new mobj in P_SpawnMapThing
|
||||
}
|
||||
else
|
||||
{
|
||||
newmobj = P_SpawnMobj(box->x, box->y, box->z, box->type);
|
||||
}
|
||||
|
||||
// Transfer flags2 (strongbox, objectflip, bossnotrap)
|
||||
newmobj->flags2 = box->flags2;
|
||||
P_RemoveMobj(box); // make sure they disappear
|
||||
box->fuse = TICRATE; // flicker back in (A_ItemPop preps this effect)
|
||||
P_SetMobjState(box, box->info->raisestate);
|
||||
|
||||
if (numgotboxes > 0)
|
||||
numgotboxes--; // you've restored a box, remove it from the count
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue