mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-02 14:12:47 +00:00
MT_RANDOMITEM: Fixes relevant to Blend Eye development
- Custom Mace system
- Change the OTHER MF2_ that MT_RANDOMITEM uses to also not conflict with the sound-creating property
- Support being counted for the P_RespawnBattleBoxes system
- If there's only one Random Item on the course, have an extra delay before its respawn is forced
- More prevention of S_RINGBOX1 set in GTR_SPHERES
- Fix potential state issue for Ring Box conversion
This commit is contained in:
parent
5f10f4de0f
commit
4e2cc4bc34
3 changed files with 33 additions and 19 deletions
|
|
@ -127,7 +127,7 @@ void Obj_RandomItemVisuals(mobj_t *mobj)
|
||||||
|
|
||||||
// Don't transform stuff that isn't a Ring Box, idiot
|
// Don't transform stuff that isn't a Ring Box, idiot
|
||||||
statenum_t boxstate = mobj->state - states;
|
statenum_t boxstate = mobj->state - states;
|
||||||
if (boxstate >= S_RANDOMITEM1 && boxstate <= S_RANDOMITEM12)
|
if (boxstate < S_RINGBOX1 || boxstate > S_RINGBOX12)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mobj->extravalue1 == RINGBOX_TIME || specialstageinfo.valid)
|
if (mobj->extravalue1 == RINGBOX_TIME || specialstageinfo.valid)
|
||||||
|
|
@ -141,7 +141,7 @@ void Obj_RandomItemVisuals(mobj_t *mobj)
|
||||||
|
|
||||||
boolean Obj_RandomItemSpawnIn(mobj_t *mobj)
|
boolean Obj_RandomItemSpawnIn(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
if ((leveltime == starttime) && !(gametyperules & GTR_CIRCUIT) && (mobj->flags2 & MF2_BOSSNOTRAP)) // here on map start?
|
if ((leveltime == starttime) && !(gametyperules & GTR_CIRCUIT) && (mobj->flags2 & MF2_BOSSFLEE)) // here on map start?
|
||||||
{
|
{
|
||||||
if (gametyperules & GTR_PAPERITEMS)
|
if (gametyperules & GTR_PAPERITEMS)
|
||||||
{
|
{
|
||||||
|
|
@ -192,6 +192,18 @@ void Obj_RandomItemSpawn(mobj_t *mobj)
|
||||||
P_SetMobjState(mobj, S_RANDOMITEM1);
|
P_SetMobjState(mobj, S_RANDOMITEM1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (leveltime == 0)
|
||||||
|
{
|
||||||
|
mobj->flags2 |= MF2_BOSSFLEE; // mark as here on map start
|
||||||
|
if ((gametyperules & GTR_CIRCUIT) != GTR_CIRCUIT) // delayed
|
||||||
|
{
|
||||||
|
P_UnsetThingPosition(mobj);
|
||||||
|
mobj->flags |= (MF_NOCLIPTHING|MF_NOBLOCKMAP);
|
||||||
|
mobj->renderflags |= RF_DONTDRAW;
|
||||||
|
P_SetThingPosition(mobj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mobj->destscale = Obj_RandomItemScale(mobj->destscale);
|
mobj->destscale = Obj_RandomItemScale(mobj->destscale);
|
||||||
P_SetScale(mobj, mobj->destscale);
|
P_SetScale(mobj, mobj->destscale);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -253,8 +253,13 @@ static void P_ItemPop(mobj_t *actor)
|
||||||
|
|
||||||
Obj_SpawnItemDebrisEffects(actor, actor->target);
|
Obj_SpawnItemDebrisEffects(actor, actor->target);
|
||||||
|
|
||||||
if (!specialstageinfo.valid) // In Special, you'll respawn as a Ring Box (random-item.c), don't confuse the player.
|
if (!specialstageinfo.valid
|
||||||
|
&& (gametyperules & GTR_SPHERES) != GTR_SPHERES)
|
||||||
|
{
|
||||||
|
// Doesn't apply to Special
|
||||||
P_SetMobjState(actor, S_RINGBOX1);
|
P_SetMobjState(actor, S_RINGBOX1);
|
||||||
|
}
|
||||||
|
|
||||||
actor->extravalue1 = 0;
|
actor->extravalue1 = 0;
|
||||||
|
|
||||||
// de-solidify
|
// de-solidify
|
||||||
|
|
@ -281,7 +286,7 @@ static void P_ItemPop(mobj_t *actor)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Here at mapload in battle?
|
// Here at mapload in battle?
|
||||||
if (!(gametyperules & GTR_CIRCUIT) && (actor->flags2 & MF2_BOSSNOTRAP))
|
if (!(gametyperules & GTR_CIRCUIT) && (actor->flags2 & MF2_BOSSFLEE))
|
||||||
{
|
{
|
||||||
numgotboxes++;
|
numgotboxes++;
|
||||||
|
|
||||||
|
|
|
||||||
27
src/p_mobj.c
27
src/p_mobj.c
|
|
@ -12147,6 +12147,8 @@ void P_RespawnBattleBoxes(void)
|
||||||
if (gametyperules & GTR_CIRCUIT)
|
if (gametyperules & GTR_CIRCUIT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
tic_t setduration = (nummapboxes > 1) ? TICRATE : (2*TICRATE);
|
||||||
|
|
||||||
for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next)
|
for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next)
|
||||||
{
|
{
|
||||||
mobj_t *box;
|
mobj_t *box;
|
||||||
|
|
@ -12157,13 +12159,20 @@ void P_RespawnBattleBoxes(void)
|
||||||
box = (mobj_t *)th;
|
box = (mobj_t *)th;
|
||||||
|
|
||||||
if (box->type != MT_RANDOMITEM
|
if (box->type != MT_RANDOMITEM
|
||||||
|| (box->flags2 & MF2_DONTRESPAWN)
|
|| ((box->flags2 & (MF2_DONTRESPAWN|MF2_BOSSFLEE)) != MF2_BOSSFLEE)
|
||||||
|| !(box->flags & MF_NOCLIPTHING)
|
|| !(box->flags & MF_NOCLIPTHING)
|
||||||
|| box->fuse)
|
|| box->fuse)
|
||||||
continue; // only popped items
|
continue; // only popped items
|
||||||
|
|
||||||
box->fuse = TICRATE; // flicker back in
|
box->fuse = setduration; // flicker back in
|
||||||
P_SetMobjState(box, box->info->raisestate);
|
P_SetMobjState(
|
||||||
|
box,
|
||||||
|
(((gametyperules & GTR_SPHERES) == GTR_SPHERES)
|
||||||
|
? box->info->raisestate
|
||||||
|
: box->info->spawnstate
|
||||||
|
)
|
||||||
|
);
|
||||||
|
box->renderflags |= RF_DONTDRAW; // guarantee start invisible
|
||||||
|
|
||||||
if (numgotboxes > 0)
|
if (numgotboxes > 0)
|
||||||
numgotboxes--; // you've restored a box, remove it from the count
|
numgotboxes--; // you've restored a box, remove it from the count
|
||||||
|
|
@ -13766,18 +13775,6 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj)
|
||||||
}
|
}
|
||||||
case MT_RANDOMITEM:
|
case MT_RANDOMITEM:
|
||||||
{
|
{
|
||||||
const boolean delayed = !(gametyperules & GTR_CIRCUIT);
|
|
||||||
if (leveltime == 0)
|
|
||||||
{
|
|
||||||
mobj->flags2 |= MF2_BOSSNOTRAP; // mark as here on map start
|
|
||||||
if (delayed)
|
|
||||||
{
|
|
||||||
P_UnsetThingPosition(mobj);
|
|
||||||
mobj->flags |= (MF_NOCLIPTHING|MF_NOBLOCKMAP);
|
|
||||||
mobj->renderflags |= RF_DONTDRAW;
|
|
||||||
P_SetThingPosition(mobj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mthing->thing_args[0] == 1)
|
if (mthing->thing_args[0] == 1)
|
||||||
mobj->flags2 |= MF2_BOSSDEAD;
|
mobj->flags2 |= MF2_BOSSDEAD;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue