Separate P_SpawnHoopsAndRings into different functions:

-Hoops are spawned in P_SpawnHoop
-Item patterns are spawned in P_SpawnItemPattern
-Ring-like items are spawned normally via P_SpawnMapThing
-Bonus time items are spawned via P_SpawnBonusTimeItem, which is a wrapper for P_SpawnMapThing
This commit is contained in:
MascaraSnake 2019-12-24 10:50:49 +01:00
parent ffd6cf4aca
commit dd01fce1a8
5 changed files with 102 additions and 133 deletions

View File

@ -1186,7 +1186,7 @@ void OP_NightsObjectplace(player_t *player)
mt->options = (mt->options & ~(UINT16)cv_opflags.value) | (UINT16)cv_ophoopflags.value; mt->options = (mt->options & ~(UINT16)cv_opflags.value) | (UINT16)cv_ophoopflags.value;
mt->angle = (INT16)(mt->angle+(INT16)((FixedInt(FixedDiv(temp*FRACUNIT, 360*(FRACUNIT/256))))<<8)); mt->angle = (INT16)(mt->angle+(INT16)((FixedInt(FixedDiv(temp*FRACUNIT, 360*(FRACUNIT/256))))<<8));
P_SpawnHoopsAndRings(mt, false); P_SpawnHoop(mt);
} }
// This places a bumper! // This places a bumper!
@ -1249,7 +1249,7 @@ void OP_NightsObjectplace(player_t *player)
return; return;
mt = OP_CreateNewMapThing(player, (UINT16)mobjinfo[MT_BLUESPHERE].doomednum, false); mt = OP_CreateNewMapThing(player, (UINT16)mobjinfo[MT_BLUESPHERE].doomednum, false);
P_SpawnHoopsAndRings(mt, false); P_SpawnMapThing(mt);
} }
// This places a ring! // This places a ring!
@ -1260,7 +1260,7 @@ void OP_NightsObjectplace(player_t *player)
return; return;
mt = OP_CreateNewMapThing(player, (UINT16)mobjinfo[MT_RING].doomednum, false); mt = OP_CreateNewMapThing(player, (UINT16)mobjinfo[MT_RING].doomednum, false);
P_SpawnHoopsAndRings(mt, false); P_SpawnMapThing(mt);
} }
// This places a custom object as defined in the console cv_mapthingnum. // This places a custom object as defined in the console cv_mapthingnum.
@ -1292,15 +1292,10 @@ void OP_NightsObjectplace(player_t *player)
mt = OP_CreateNewMapThing(player, (UINT16)cv_mapthingnum.value, false); mt = OP_CreateNewMapThing(player, (UINT16)cv_mapthingnum.value, false);
mt->angle = angle; mt->angle = angle;
if (mt->type == 300 // Ring if (mt->type >= 600 && mt->type <= 609) // Placement patterns
|| mt->type == 308 || mt->type == 309 // Team Rings P_SpawnItemPattern(mt, false);
|| mt->type == 1706 // Sphere else if (mt->type == 1705 || mt->type == 1713) // NiGHTS Hoops
|| (mt->type >= 600 && mt->type <= 609) // Placement patterns P_SpawnHoop(mt);
|| mt->type == 1705 || mt->type == 1713 // NiGHTS Hoops
|| mt->type == 1800) // Mario Coin
{
P_SpawnHoopsAndRings(mt, false);
}
else else
P_SpawnMapThing(mt); P_SpawnMapThing(mt);
} }
@ -1437,15 +1432,10 @@ void OP_ObjectplaceMovement(player_t *player)
return; return;
mt = OP_CreateNewMapThing(player, (UINT16)spawnthing, ceiling); mt = OP_CreateNewMapThing(player, (UINT16)spawnthing, ceiling);
if (mt->type == 300 // Ring if (mt->type >= 600 && mt->type <= 609) // Placement patterns
|| mt->type == 308 || mt->type == 309 // Team Rings P_SpawnItemPattern(mt, false);
|| mt->type == 1706 // Nights Wing else if (mt->type == 1705 || mt->type == 1713) // NiGHTS Hoops
|| (mt->type >= 600 && mt->type <= 609) // Placement patterns P_SpawnHoop(mt);
|| mt->type == 1705 || mt->type == 1713 // NiGHTS Hoops
|| mt->type == 1800) // Mario Coin
{
P_SpawnHoopsAndRings(mt, false);
}
else else
P_SpawnMapThing(mt); P_SpawnMapThing(mt);

View File

@ -11711,15 +11711,6 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i)
{ {
switch (i) switch (i)
{ {
case MT_RING:
case MT_COIN:
case MT_REDTEAMRING:
case MT_BLUETEAMRING:
case MT_BLUESPHERE:
case MT_BOMBSPHERE:
case MT_NIGHTSSTAR:
case MT_NIGHTSCHIP:
return false; // These are handled in P_SpawnHoopsAndRings().
case MT_EMERALD1: case MT_EMERALD1:
case MT_EMERALD2: case MT_EMERALD2:
case MT_EMERALD3: case MT_EMERALD3:
@ -11786,8 +11777,12 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i)
} }
if (metalrecording) // Metal Sonic can't use these things. if (metalrecording) // Metal Sonic can't use these things.
if (mobjinfo[i].flags & (MF_ENEMY|MF_BOSS) || i == MT_TOKEN || i == MT_STARPOST) {
if ((mobjinfo[i].flags & (MF_ENEMY|MF_BOSS)) || i == MT_TOKEN || i == MT_STARPOST
|| i == MT_RING || i == MT_BLUETEAMRING || i == MT_REDTEAMRING || i == MT_COIN
|| i == MT_BLUESPHERE || i == MT_BOMBSPHERE || i == MT_NIGHTSCHIP || i == MT_NIGHTSSTAR)
return false; return false;
}
if (!G_PlatformGametype()) if (!G_PlatformGametype())
{ {
@ -11825,7 +11820,9 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i)
if (ultimatemode) if (ultimatemode)
{ {
if (i == MT_PITY_BOX || i == MT_ELEMENTAL_BOX || i == MT_ATTRACT_BOX if (i == MT_RING || i == MT_REDTEAMRING || i == MT_BLUETEAMRING
|| i == MT_COIN || i == MT_NIGHTSSTAR || i == MT_NIGHTSCHIP
|| i == MT_PITY_BOX || i == MT_ELEMENTAL_BOX || i == MT_ATTRACT_BOX
|| i == MT_FORCE_BOX || i == MT_ARMAGEDDON_BOX || i == MT_WHIRLWIND_BOX || i == MT_FORCE_BOX || i == MT_ARMAGEDDON_BOX || i == MT_WHIRLWIND_BOX
|| i == MT_FLAMEAURA_BOX || i == MT_BUBBLEWRAP_BOX || i == MT_THUNDERCOIN_BOX || i == MT_FLAMEAURA_BOX || i == MT_BUBBLEWRAP_BOX || i == MT_THUNDERCOIN_BOX
|| i == MT_RING_BOX || i == MT_STARPOST) || i == MT_RING_BOX || i == MT_STARPOST)
@ -11838,6 +11835,8 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i)
return true; return true;
} }
#define nightsreplace ((maptol & TOL_NIGHTS) && !G_IsSpecialStage(gamemap))
static mobjtype_t P_GetMobjtypeSubstitute(mapthing_t *mthing, mobjtype_t i) static mobjtype_t P_GetMobjtypeSubstitute(mapthing_t *mthing, mobjtype_t i)
{ {
// Altering monitor spawns via cvars // Altering monitor spawns via cvars
@ -11881,8 +11880,23 @@ static mobjtype_t P_GetMobjtypeSubstitute(mapthing_t *mthing, mobjtype_t i)
} }
} }
if (gametype != GT_CTF && (i == MT_RING_BLUEBOX || i == MT_RING_REDBOX)) if (nightsreplace)
return MT_RING_BOX; {
if (i == MT_RING || i == MT_REDTEAMRING || i == MT_BLUETEAMRING || i == MT_COIN)
return MT_NIGHTSSTAR;
if (i == MT_BLUESPHERE)
return MT_NIGHTSCHIP;
}
if (gametype != GT_CTF)
{
if (i == MT_BLUETEAMRING || i == MT_REDTEAMRING)
return MT_RING;
if (i == MT_RING_BLUEBOX || i == MT_RING_REDBOX)
return MT_RING_BOX;
}
if (modeattacking && i == MT_1UP_BOX) // 1UPs -->> Score TVs if (modeattacking && i == MT_1UP_BOX) // 1UPs -->> Score TVs
{ {
@ -12920,6 +12934,10 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
if (G_IsSpecialStage(gamemap)) if (G_IsSpecialStage(gamemap))
P_SetMobjState(mobj, (mobj->type == MT_PUSH) ? S_GRAVWELLGREEN : S_GRAVWELLRED); P_SetMobjState(mobj, (mobj->type == MT_PUSH) ? S_GRAVWELLGREEN : S_GRAVWELLRED);
break; break;
case MT_NIGHTSSTAR:
if (maptol & TOL_XMAS)
P_SetMobjState(mobj, mobj->info->seestate);
break;
default: default:
break; break;
} }
@ -12991,21 +13009,21 @@ static void P_SetObjectSpecial(mobj_t *mobj)
// The fields of the mapthing should // The fields of the mapthing should
// already be in host byte order. // already be in host byte order.
// //
void P_SpawnMapThing(mapthing_t *mthing) mobj_t *P_SpawnMapThing(mapthing_t *mthing)
{ {
mobjtype_t i; mobjtype_t i;
mobj_t *mobj; mobj_t *mobj = NULL;
fixed_t x, y, z; fixed_t x, y, z;
boolean doangle = true; boolean doangle = true;
if (!mthing->type) if (!mthing->type)
return; // Ignore type-0 things as NOPs return mobj; // Ignore type-0 things as NOPs
if (mthing->type == 3328) // 3D Mode start Thing if (mthing->type == 3328) // 3D Mode start Thing
return; return mobj;
if (!objectplacing && P_SpawnNonMobjMapThing(mthing)) if (!objectplacing && P_SpawnNonMobjMapThing(mthing))
return; return mobj;
i = P_GetMobjtype(mthing->type); i = P_GetMobjtype(mthing->type);
if (i == MT_UNKNOWN) if (i == MT_UNKNOWN)
@ -13015,11 +13033,11 @@ void P_SpawnMapThing(mapthing_t *mthing)
if (!objectplacing) if (!objectplacing)
{ {
if (!P_AllowMobjSpawn(mthing, i)) if (!P_AllowMobjSpawn(mthing, i))
return; return mobj;
i = P_GetMobjtypeSubstitute(mthing, i); i = P_GetMobjtypeSubstitute(mthing, i);
if (i == MT_NULL) // Don't spawn mobj if (i == MT_NULL) // Don't spawn mobj
return; return mobj;
} }
// spawn it // spawn it
@ -13031,7 +13049,7 @@ void P_SpawnMapThing(mapthing_t *mthing)
mobj->spawnpoint = mthing; mobj->spawnpoint = mthing;
if (!P_SetupSpawnedMapThing(mthing, mobj, &doangle)) if (!P_SetupSpawnedMapThing(mthing, mobj, &doangle))
return; return mobj;
if (doangle) if (doangle)
mobj->angle = FixedAngle(mthing->angle<<FRACBITS); mobj->angle = FixedAngle(mthing->angle<<FRACBITS);
@ -13040,7 +13058,7 @@ void P_SpawnMapThing(mapthing_t *mthing)
// ignore MTF_ flags and return early // ignore MTF_ flags and return early
if (i == MT_NIGHTSBUMPER) if (i == MT_NIGHTSBUMPER)
return; return mobj;
if ((mthing->options & MTF_AMBUSH) if ((mthing->options & MTF_AMBUSH)
&& (mthing->options & MTF_OBJECTSPECIAL) && (mthing->options & MTF_OBJECTSPECIAL)
@ -13075,9 +13093,11 @@ void P_SpawnMapThing(mapthing_t *mthing)
// Final set of not being able to draw nightsitems. // Final set of not being able to draw nightsitems.
if (mobj->flags & MF_NIGHTSITEM) if (mobj->flags & MF_NIGHTSITEM)
mobj->flags2 |= MF2_DONTDRAW; mobj->flags2 |= MF2_DONTDRAW;
return mobj;
} }
static void P_SpawnHoop(mapthing_t* mthing, fixed_t x, fixed_t y, fixed_t z, INT32 hoopsize, fixed_t sizefactor) static void P_SpawnHoopInternal(mapthing_t *mthing, INT32 hoopsize, fixed_t sizefactor)
{ {
mobj_t *mobj = NULL; mobj_t *mobj = NULL;
mobj_t *nextmobj = NULL; mobj_t *nextmobj = NULL;
@ -13087,8 +13107,9 @@ static void P_SpawnHoop(mapthing_t* mthing, fixed_t x, fixed_t y, fixed_t z, INT
INT32 i; INT32 i;
angle_t fa; angle_t fa;
TVector v, *res; TVector v, *res;
fixed_t x = mthing->x << FRACBITS;
z = P_GetMobjSpawnHeight(MT_HOOP, x, y, z, false); fixed_t y = mthing->y << FRACBITS;
fixed_t z = P_GetMobjSpawnHeight(MT_HOOP, x, y, mthing->z << FRACBITS, false);
hoopcenter = P_SpawnMobj(x, y, z, MT_HOOPCENTER); hoopcenter = P_SpawnMobj(x, y, z, MT_HOOPCENTER);
hoopcenter->spawnpoint = mthing; hoopcenter->spawnpoint = mthing;
@ -13182,56 +13203,27 @@ static void P_SpawnHoop(mapthing_t* mthing, fixed_t x, fixed_t y, fixed_t z, INT
} while (hoopsize >= 8); } while (hoopsize >= 8);
} }
#define nightsreplace ((maptol & TOL_NIGHTS) && !G_IsSpecialStage(gamemap)) void P_SpawnHoop(mapthing_t *mthing)
static void P_SpawnRingItem(mapthing_t *mthing, fixed_t x, fixed_t y, boolean bonustime)
{ {
mobjtype_t ringthing = MT_RING; if (metalrecording)
mobj_t *mobj = NULL; return;
fixed_t z;
// Which ringthing to use if (mthing->type == 1705) // Generic hoop
if (mthing->type == mobjinfo[MT_BLUESPHERE].doomednum) P_SpawnHoopInternal(mthing, 24, 4*FRACUNIT);
ringthing = (nightsreplace) ? MT_NIGHTSCHIP : MT_BLUESPHERE; else // Customizable hoop
else if (mthing->type == mobjinfo[MT_BOMBSPHERE].doomednum) // For each flag add 16 fracunits to the size
ringthing = MT_BOMBSPHERE; // Default (0 flags) is 32 fracunits
else P_SpawnHoopInternal(mthing, 8 + (4*(mthing->options & 0xF)), 4*FRACUNIT);
{
if (ultimatemode)
return; // No rings in Ultimate!
if (nightsreplace)
ringthing = MT_NIGHTSSTAR;
else if (mthing->type == mobjinfo[MT_COIN].doomednum)
ringthing = MT_COIN;
else if (mthing->type == mobjinfo[MT_REDTEAMRING].doomednum) // No team rings in non-CTF
ringthing = (gametype == GT_CTF) ? MT_REDTEAMRING : MT_RING;
else if (mthing->type == mobjinfo[MT_BLUETEAMRING].doomednum) // Ditto
ringthing = (gametype == GT_CTF) ? MT_BLUETEAMRING : MT_RING;
}
z = P_GetMapThingSpawnHeight(ringthing, mthing, x, y);
mobj = P_SpawnMobj(x, y, z, ringthing);
mobj->spawnpoint = mthing;
if (mthing->options & MTF_OBJECTFLIP)
{
mobj->eflags |= MFE_VERTICALFLIP;
mobj->flags2 |= MF2_OBJECTFLIP;
}
mobj->angle = FixedAngle(mthing->angle << FRACBITS);
mthing->mobj = mobj;
if (mthing->options & MTF_AMBUSH)
mobj->flags2 |= MF2_AMBUSH;
if (bonustime && (ringthing == MT_BLUESPHERE || ringthing == MT_NIGHTSCHIP))
P_SetMobjState(mobj, mobj->info->raisestate);
else if ((maptol & TOL_XMAS) && (ringthing == MT_NIGHTSSTAR))
P_SetMobjState(mobj, mobj->info->seestate);
} }
static void P_SpawnItemRow(mapthing_t* mthing, fixed_t x, fixed_t y, fixed_t z, INT32 numitems, fixed_t horizontalspacing, fixed_t verticalspacing, INT16 fixedangle) void P_SpawnBonusTimeItem(mapthing_t *mthing)
{
mobj_t *mobj = P_SpawnMapThing(mthing);
if (mobj && (mobj->type == MT_BLUESPHERE || mobj->type == MT_NIGHTSCHIP))
P_SetMobjState(mobj, mobj->info->raisestate);
}
static void P_SpawnItemRow(mapthing_t *mthing, fixed_t x, fixed_t y, fixed_t z, INT32 numitems, fixed_t horizontalspacing, fixed_t verticalspacing, INT16 fixedangle)
{ {
mobjtype_t ringthing = MT_RING; mobjtype_t ringthing = MT_RING;
mobj_t *mobj = NULL; mobj_t *mobj = NULL;
@ -13270,7 +13262,7 @@ static void P_SpawnItemRow(mapthing_t* mthing, fixed_t x, fixed_t y, fixed_t z,
} }
} }
static void P_SpawnItemCircle(mapthing_t* mthing, fixed_t x, fixed_t y, fixed_t z, INT32 numitems, fixed_t size, boolean bonustime) static void P_SpawnItemCircle(mapthing_t *mthing, fixed_t x, fixed_t y, fixed_t z, INT32 numitems, fixed_t size, boolean bonustime)
{ {
mobjtype_t ringthing = MT_RING; mobjtype_t ringthing = MT_RING;
mobj_t *mobj = NULL; mobj_t *mobj = NULL;
@ -13352,12 +13344,15 @@ static void P_SpawnItemCircle(mapthing_t* mthing, fixed_t x, fixed_t y, fixed_t
} }
} }
void P_SpawnHoopsAndRings(mapthing_t *mthing, boolean bonustime) void P_SpawnItemPattern(mapthing_t *mthing, boolean bonustime)
{ {
fixed_t x = mthing->x << FRACBITS; fixed_t x = mthing->x << FRACBITS;
fixed_t y = mthing->y << FRACBITS; fixed_t y = mthing->y << FRACBITS;
fixed_t z = mthing->z << FRACBITS; fixed_t z = mthing->z << FRACBITS;
if (metalrecording)
return;
switch (mthing->type) switch (mthing->type)
{ {
// Special placement patterns // Special placement patterns
@ -13385,17 +13380,8 @@ void P_SpawnHoopsAndRings(mapthing_t *mthing, boolean bonustime)
P_SpawnItemCircle(mthing, x, y, z, numitems, size, bonustime); P_SpawnItemCircle(mthing, x, y, z, numitems, size, bonustime);
return; return;
} }
// Hoops default:
case 1705: // Generic NiGHTS hoop
P_SpawnHoop(mthing, x, y, z, 24, 4*FRACUNIT);
return; return;
case 1713: // Customizable NiGHTS hoop
// For each flag add 16 fracunits to the size
// Default (0 flags) is 32 fracunits
P_SpawnHoop(mthing, x, y, z, 8 + (4*(mthing->options & 0xF)), 4*FRACUNIT);
return;
default: // All manners of rings and coins
P_SpawnRingItem(mthing, x, y, bonustime);
} }
} }

View File

@ -456,8 +456,10 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing);
void P_MovePlayerToStarpost(INT32 playernum); void P_MovePlayerToStarpost(INT32 playernum);
void P_AfterPlayerSpawn(INT32 playernum); void P_AfterPlayerSpawn(INT32 playernum);
void P_SpawnMapThing(mapthing_t *mthing); mobj_t *P_SpawnMapThing(mapthing_t *mthing);
void P_SpawnHoopsAndRings(mapthing_t *mthing, boolean bonustime); void P_SpawnHoop(mapthing_t *mthing);
void P_SpawnBonusTimeItem(mapthing_t *mthing);
void P_SpawnItemPattern(mapthing_t *mthing, boolean bonustime);
void P_SpawnHoopOfSomething(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle); void P_SpawnHoopOfSomething(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle);
void P_SpawnPrecipitation(void); void P_SpawnPrecipitation(void);
void P_SpawnParaloop(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, statenum_t nstate, angle_t rotangle, boolean spawncenter); void P_SpawnParaloop(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, statenum_t nstate, angle_t rotangle, boolean spawncenter);

View File

@ -2545,7 +2545,7 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
if (mapthings[spawnpointnum].type == 1705 || mapthings[spawnpointnum].type == 1713) // NiGHTS Hoop special case if (mapthings[spawnpointnum].type == 1705 || mapthings[spawnpointnum].type == 1713) // NiGHTS Hoop special case
{ {
P_SpawnHoopsAndRings(&mapthings[spawnpointnum], false); P_SpawnHoop(&mapthings[spawnpointnum]);
return NULL; return NULL;
} }

View File

@ -765,7 +765,7 @@ static void P_LoadRawNodes(UINT8 *data)
// //
// P_ReloadRings // P_ReloadRings
// Used by NiGHTS, clears all ring/wing/etc items and respawns them // Used by NiGHTS, clears all ring/sphere/hoop/etc items and respawns them
// //
void P_ReloadRings(void) void P_ReloadRings(void)
{ {
@ -812,18 +812,21 @@ void P_ReloadRings(void)
{ {
// Notice an omission? We handle hoops differently. // Notice an omission? We handle hoops differently.
if (mt->type == mobjinfo[MT_RING].doomednum || mt->type == mobjinfo[MT_COIN].doomednum if (mt->type == mobjinfo[MT_RING].doomednum || mt->type == mobjinfo[MT_COIN].doomednum
|| mt->type == mobjinfo[MT_REDTEAMRING].doomednum || mt->type == mobjinfo[MT_BLUETEAMRING].doomednum || mt->type == mobjinfo[MT_REDTEAMRING].doomednum || mt->type == mobjinfo[MT_BLUETEAMRING].doomednum
|| mt->type == mobjinfo[MT_BLUESPHERE].doomednum || mt->type == mobjinfo[MT_BOMBSPHERE].doomednum || mt->type == mobjinfo[MT_BLUESPHERE].doomednum || mt->type == mobjinfo[MT_BOMBSPHERE].doomednum)
|| (mt->type >= 600 && mt->type <= 609)) // circles and diagonals
{ {
mt->mobj = NULL; mt->mobj = NULL;
P_SpawnBonusTimeItem(mt);
P_SpawnHoopsAndRings(mt, true); }
else if (mt->type >= 600 && mt->type <= 609) // Item patterns
{
mt->mobj = NULL;
P_SpawnItemPattern(mt, true);
} }
} }
for (i = 0; i < numHoops; i++) for (i = 0; i < numHoops; i++)
{ {
P_SpawnHoopsAndRings(hoopsToRespawn[i], false); P_SpawnHoop(hoopsToRespawn[i]);
} }
} }
@ -1017,30 +1020,18 @@ static void P_LoadThings(boolean loademblems)
continue; continue;
mt->mobj = NULL; mt->mobj = NULL;
P_SpawnMapThing(mt);
if (mt->type >= 600 && mt->type <= 609) // item patterns
P_SpawnItemPattern(mt, false);
else if (mt->type == 1705 || mt->type == 1713) // hoops
P_SpawnHoop(mt);
else // Everything else
P_SpawnMapThing(mt);
} }
// random emeralds for hunt // random emeralds for hunt
if (numhuntemeralds) if (numhuntemeralds)
P_SpawnEmeraldHunt(); P_SpawnEmeraldHunt();
if (metalrecording) // Metal Sonic gets no rings to distract him.
return;
// Run through the list of mapthings again to spawn hoops and rings
mt = mapthings;
for (i = 0; i < nummapthings; i++, mt++)
{
if (mt->type == mobjinfo[MT_RING].doomednum || mt->type == mobjinfo[MT_COIN].doomednum
|| mt->type == mobjinfo[MT_REDTEAMRING].doomednum || mt->type == mobjinfo[MT_BLUETEAMRING].doomednum
|| mt->type == mobjinfo[MT_BLUESPHERE].doomednum || mt->type == mobjinfo[MT_BOMBSPHERE].doomednum
|| (mt->type >= 600 && mt->type <= 609) // circles and diagonals
|| mt->type == 1705 || mt->type == 1713) // hoops
{
mt->mobj = NULL;
P_SpawnHoopsAndRings(mt, false);
}
}
} }
// Experimental groovy write function! // Experimental groovy write function!