Give Battle mode item spawners their own RNG class

PR_ITEM_ROULETTE is explicitly meant only for K_FillItemRouletteData, and nothing else is ever meant to use it.

May possibly be the cause of the dedicated overtime desync, but I am not convinced it is.
This commit is contained in:
Sally Coolatta 2024-08-18 18:48:05 -04:00
parent 1e502da748
commit 9c2144c340
4 changed files with 19 additions and 17 deletions

View file

@ -267,7 +267,7 @@ mobj_t *K_SpawnChaosEmerald(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT
mobj_t *overlay;
P_Thrust(emerald,
FixedAngle(P_RandomFixed(PR_ITEM_ROULETTE) * 180) + angle,
FixedAngle(P_RandomFixed(PR_ITEM_SPAWNER) * 180) + angle,
36 * mapobjectscale);
emerald->momz = flip * 36 * mapobjectscale;
@ -317,8 +317,8 @@ mobj_t *K_SpawnSphereBox(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 f
drop->angle = angle;
P_Thrust(drop,
FixedAngle(P_RandomFixed(PR_ITEM_ROULETTE) * 180) + angle,
P_RandomRange(PR_ITEM_ROULETTE, 4, 12) * mapobjectscale);
FixedAngle(P_RandomFixed(PR_ITEM_SPAWNER) * 180) + angle,
P_RandomRange(PR_ITEM_SPAWNER, 4, 12) * mapobjectscale);
drop->momz = flip * 12 * mapobjectscale;
if (drop->eflags & MFE_UNDERWATER)
@ -480,7 +480,7 @@ void K_RunPaperItemSpawners(void)
{
K_SpawnChaosEmerald(
battleovertime.x, battleovertime.y, battleovertime.z + (128 * mapobjectscale * flip),
FixedAngle(P_RandomRange(PR_ITEM_ROULETTE, 0, 359) * FRACUNIT), flip,
FixedAngle(P_RandomRange(PR_ITEM_SPAWNER, 0, 359) * FRACUNIT), flip,
firstUnspawnedEmerald
);
}
@ -488,7 +488,7 @@ void K_RunPaperItemSpawners(void)
{
K_FlingPaperItem(
battleovertime.x, battleovertime.y, battleovertime.z + (128 * mapobjectscale * flip),
FixedAngle(P_RandomRange(PR_ITEM_ROULETTE, 0, 359) * FRACUNIT), flip,
FixedAngle(P_RandomRange(PR_ITEM_SPAWNER, 0, 359) * FRACUNIT), flip,
0, 0
);
@ -496,7 +496,7 @@ void K_RunPaperItemSpawners(void)
{
K_SpawnSphereBox(
battleovertime.x, battleovertime.y, battleovertime.z + (128 * mapobjectscale * flip),
FixedAngle(P_RandomRange(PR_ITEM_ROULETTE, 0, 359) * FRACUNIT), flip,
FixedAngle(P_RandomRange(PR_ITEM_SPAWNER, 0, 359) * FRACUNIT), flip,
10
);
}
@ -570,7 +570,7 @@ void K_RunPaperItemSpawners(void)
// Large = 16 + 1 = 17 / 2 = 8
if (spotAvailable > 0 && monitorsSpawned < (mapheaderinfo[gamemap - 1]->playerLimit + 1) / 2)
{
const UINT8 r = spotMap[P_RandomKey(PR_ITEM_ROULETTE, spotAvailable)];
const UINT8 r = spotMap[P_RandomKey(PR_ITEM_SPAWNER, spotAvailable)];
Obj_ItemSpotAssignMonitor(spotList[r], Obj_SpawnMonitor(
spotList[r], 3, firstUnspawnedEmerald));
@ -603,7 +603,7 @@ void K_RunPaperItemSpawners(void)
}
else
{
key = P_RandomKey(PR_ITEM_ROULETTE, spotCount);
key = P_RandomKey(PR_ITEM_SPAWNER, spotCount);
}
r = spotMap[key];
@ -614,7 +614,7 @@ void K_RunPaperItemSpawners(void)
drop = K_SpawnSphereBox(
spotList[r]->x, spotList[r]->y, spotList[r]->z + (128 * mapobjectscale * flip),
FixedAngle(P_RandomRange(PR_ITEM_ROULETTE, 0, 359) * FRACUNIT), flip,
FixedAngle(P_RandomRange(PR_ITEM_SPAWNER, 0, 359) * FRACUNIT), flip,
10
);

View file

@ -7430,7 +7430,7 @@ SINT8 K_GetTotallyRandomResult(UINT8 useodds)
if (totalspawnchance > 0)
{
totalspawnchance = P_RandomKey(PR_ITEM_ROULETTE, totalspawnchance);
totalspawnchance = P_RandomKey(PR_ITEM_SPAWNER, totalspawnchance);
for (i = 0; i < NUMKARTRESULTS && spawnchance[i] <= totalspawnchance; i++);
}
else
@ -7520,7 +7520,7 @@ mobj_t *K_FlingPaperItem(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 f
mobj_t *drop = K_CreatePaperItem(x, y, z, angle, flip, type, amount);
P_Thrust(drop,
FixedAngle(P_RandomFixed(PR_ITEM_ROULETTE) * 180) + angle,
FixedAngle(P_RandomFixed(PR_ITEM_SPAWNER) * 180) + angle,
16*mapobjectscale);
drop->momz = flip * 3 * mapobjectscale;

View file

@ -63,7 +63,7 @@ typedef enum
PR_MUSICSELECT, // Randomized music selection
PR_ITEM_ROULETTE, // Item results
PR_ITEM_ROULETTE, // Item results. Overwritten constantly by K_FillItemRouletteData, not meant for typical use.
PR_ITEM_RINGS, // Flung ring/bumper/player (on death)
PR_ITEM_SHRINK, // Shrink gun offsets
PR_ITEM_BUBBLE, // Item bubbles
@ -87,6 +87,8 @@ typedef enum
PR_FROSTTHROWERS,
PR_ITEM_SPAWNER, // Battle mode item spawners
PRNUMSYNCED,
PR_INTERPHUDRANDOM = PRNUMSYNCED, // Interpolation-accomodating HUD randomisation

View file

@ -10985,15 +10985,15 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
{
// set default item & count
#if 0 // set to 1 to test capsules with random items, e.g. with objectplace
if (P_RandomChance(PR_ITEM_ROULETTE, FRACUNIT/3))
if (P_RandomChance(PR_ITEM_SPAWNER, FRACUNIT/3))
mobj->threshold = KITEM_SUPERRING;
else if (P_RandomChance(PR_ITEM_ROULETTE, FRACUNIT/3))
else if (P_RandomChance(PR_ITEM_SPAWNER, FRACUNIT/3))
mobj->threshold = KITEM_SPB;
else if (P_RandomChance(PR_ITEM_ROULETTE, FRACUNIT/3))
else if (P_RandomChance(PR_ITEM_SPAWNER, FRACUNIT/3))
mobj->threshold = KITEM_ORBINAUT;
else
mobj->threshold = P_RandomRange(PR_ITEM_ROULETTE, 1, NUMKARTITEMS - 1);
mobj->movecount = P_RandomChance(PR_ITEM_ROULETTE, FRACUNIT/3) ? 1 : P_RandomKey(PR_ITEM_ROULETTE, 32) + 1;
mobj->threshold = P_RandomRange(PR_ITEM_SPAWNER, 1, NUMKARTITEMS - 1);
mobj->movecount = P_RandomChance(PR_ITEM_SPAWNER, FRACUNIT/3) ? 1 : P_RandomKey(PR_ITEM_SPAWNER, 32) + 1;
#else
mobj->threshold = KITEM_SUPERRING; // default item is super ring
mobj->movecount = 1;