mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-08 17:22:18 +00:00
Merge branch 'shieldrespawn' into 'next'
Respawn Certain Monitors in Co-op See merge request STJr/SRB2!2152
This commit is contained in:
commit
3087107175
2 changed files with 21 additions and 5 deletions
|
@ -2530,8 +2530,14 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
{
|
{
|
||||||
P_SetTarget(&target->target, source);
|
P_SetTarget(&target->target, source);
|
||||||
source->player->numboxes++;
|
source->player->numboxes++;
|
||||||
if (cv_itemrespawn.value && gametype != GT_COOP && (modifiedgame || netgame || multiplayer))
|
// Set respawn
|
||||||
target->fuse = cv_itemrespawntime.value*TICRATE + 2; // Random box generation
|
if (!(target->flags2 & MF2_DONTRESPAWN))
|
||||||
|
{
|
||||||
|
if (!(netgame || multiplayer))
|
||||||
|
target->fuse = atoi(cv_itemrespawntime.defaultvalue)*TICRATE + 2;
|
||||||
|
else if (cv_itemrespawn.value)
|
||||||
|
target->fuse = cv_itemrespawntime.value*TICRATE + 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Award Score Tails
|
// Award Score Tails
|
||||||
|
|
16
src/p_mobj.c
16
src/p_mobj.c
|
@ -10063,9 +10063,10 @@ static void P_MonitorFuseThink(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
mobj_t *newmobj;
|
mobj_t *newmobj;
|
||||||
|
|
||||||
// Special case for ALL monitors.
|
// Special case for ALL monitors outside of co-op.
|
||||||
// If a box's speed is nonzero, it's allowed to respawn as a WRM/SRM.
|
// If a box's speed is nonzero, it's allowed to respawn as a WRM/SRM.
|
||||||
if (mobj->info->speed != 0 && (mobj->flags2 & (MF2_AMBUSH|MF2_STRONGBOX)))
|
if (!G_CoopGametype() && mobj->info->speed != 0
|
||||||
|
&& (mobj->flags2 & (MF2_AMBUSH|MF2_STRONGBOX)))
|
||||||
{
|
{
|
||||||
mobjtype_t spawnchance[64];
|
mobjtype_t spawnchance[64];
|
||||||
INT32 numchoices = 0, i = 0;
|
INT32 numchoices = 0, i = 0;
|
||||||
|
@ -10856,10 +10857,19 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type, ...)
|
||||||
// Set shadowscale here, before spawn hook so that Lua can change it
|
// Set shadowscale here, before spawn hook so that Lua can change it
|
||||||
mobj->shadowscale = P_DefaultMobjShadowScale(mobj);
|
mobj->shadowscale = P_DefaultMobjShadowScale(mobj);
|
||||||
|
|
||||||
|
// A monitor can't respawn if we're not in multiplayer,
|
||||||
|
// or if we're in co-op and it's score or a 1up
|
||||||
|
if (mobj->flags & MF_MONITOR && (!(netgame || multiplayer)
|
||||||
|
|| (G_CoopGametype()
|
||||||
|
&& (mobj->type == MT_1UP_BOX
|
||||||
|
|| mobj->type == MT_SCORE1K_BOX
|
||||||
|
|| mobj->type == MT_SCORE10K_BOX)
|
||||||
|
)))
|
||||||
|
mobj->flags2 |= MF2_DONTRESPAWN;
|
||||||
|
|
||||||
if (!(mobj->flags & MF_NOTHINK))
|
if (!(mobj->flags & MF_NOTHINK))
|
||||||
P_AddThinker(THINK_MOBJ, &mobj->thinker);
|
P_AddThinker(THINK_MOBJ, &mobj->thinker);
|
||||||
|
|
||||||
|
|
||||||
if (type == MT_PLAYER)
|
if (type == MT_PLAYER)
|
||||||
{
|
{
|
||||||
// when spawning MT_PLAYER, set mobj->player before calling MobjSpawn hook to prevent P_RemoveMobj from succeeding on player mobj.
|
// when spawning MT_PLAYER, set mobj->player before calling MobjSpawn hook to prevent P_RemoveMobj from succeeding on player mobj.
|
||||||
|
|
Loading…
Reference in a new issue