Avoid iterating stage table where possible

This commit is contained in:
Ryan Dwyer 2023-05-04 19:37:20 +10:00
parent c3c2617e7b
commit 681fc1111e
11 changed files with 42 additions and 53 deletions

View File

@ -662,7 +662,6 @@ Gfx *bg0f1598b4(Gfx *gdl, Gfx *gdl2, struct gfxvtx *vertices, s16 arg3[3])
s32 i;
s32 stack;
struct xraydata xraydata;
struct stagetableentry *stage = stageGetCurrent();
s16 sp120[16][3];
u32 colours[16];
bool inrange[16];
@ -677,7 +676,7 @@ Gfx *bg0f1598b4(Gfx *gdl, Gfx *gdl2, struct gfxvtx *vertices, s16 arg3[3])
}
xraydata.unk014 = 0.250f;
xraydata.unk020 = stage->unk2c;
xraydata.unk020 = g_CurrentStage->unk2c;
xraydata.unk024 = xraydata.unk020 * xraydata.unk020;
xraydata.unk000 = arg3[0];
xraydata.unk004 = arg3[1];
@ -4996,7 +4995,6 @@ void bgTickPortalsXray(void)
s16 xmax;
s16 ymin;
s16 xmin;
struct stagetableentry *stage;
s32 i;
struct var800a4640 *thing;
@ -5029,10 +5027,8 @@ void bgTickPortalsXray(void)
player->eraserpos.f[1] = eraserpos.f[1];
player->eraserpos.f[2] = eraserpos.f[2];
stage = stageGetCurrent();
player->eraserpropdist = stage->eraserpropdist;
player->eraserbgdist = (f32) stage->eraserpropdist + stage->unk30;
player->eraserpropdist = g_CurrentStage->eraserpropdist;
player->eraserbgdist = (f32) g_CurrentStage->eraserpropdist + g_CurrentStage->unk30;
vismax.f[0] = eraserpos.f[0] + player->eraserbgdist;
vismax.f[1] = eraserpos.f[1] + player->eraserbgdist;

View File

@ -553,8 +553,7 @@ bool eyespyTryLaunch(void)
bool insafe;
char text[48];
insafe = stageGetIndex(g_Vars.stagenum) == STAGEINDEX_G5BUILDING
&& g_Vars.currentplayer->prop->rooms[0] == 0x53;
insafe = g_Vars.stagenum == STAGE_G5BUILDING && g_Vars.currentplayer->prop->rooms[0] == 0x53;
playerpos = g_Vars.currentplayer->prop->pos;
@ -566,8 +565,7 @@ bool eyespyTryLaunch(void)
g_Vars.currentplayer->eyespy->up.z = 0;
g_Vars.currentplayer->eyespy->startuptimer60 = 0;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_G5BUILDING
|| stageGetIndex(g_Vars.stagenum) == STAGEINDEX_CITRAINING) {
if (g_Vars.stagenum == STAGE_G5BUILDING || g_Vars.stagenum == STAGE_CITRAINING) {
g_EyespyMinHeight = 30;
} else {
g_EyespyMinHeight = 80;

View File

@ -238,12 +238,11 @@ void bgunReset(void)
g_Vars.currentplayer->gunzoomfovs[1] = 60;
g_Vars.currentplayer->gunzoomfovs[2] = 30;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
g_Weapons[WEAPON_EYESPY]->name = L_GUN_061; // "DrugSpy"
g_Weapons[WEAPON_EYESPY]->shortname = L_GUN_061; // "DrugSpy"
g_Weapons[WEAPON_EYESPY]->flags &= ~(WEAPONFLAG_DETERMINER_S_AN | WEAPONFLAG_DETERMINER_F_AN);
} else if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_CHICAGO
|| (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR)) {
} else if (g_Vars.stagenum == STAGE_CHICAGO || g_Vars.stagenum == STAGE_MBR) {
g_Weapons[WEAPON_EYESPY]->name = L_GUN_062; // "BombSpy"
g_Weapons[WEAPON_EYESPY]->shortname = L_GUN_062; // "BombSpy"
g_Weapons[WEAPON_EYESPY]->flags &= ~(WEAPONFLAG_DETERMINER_S_AN | WEAPONFLAG_DETERMINER_F_AN);

View File

@ -2782,18 +2782,12 @@ void chrBeginDeath(struct chrdata *chr, struct coord *dir, f32 relangle, s32 hit
// For Investigation and G5 Building, set a stage flag to show that
// the eyespy is destroyed. The scripting in those stages checks for
// this flag and fails the objective if set.
switch (stageGetIndex(g_Vars.stagenum)) {
case STAGEINDEX_INVESTIGATION:
switch (g_Vars.stagenum) {
case STAGE_INVESTIGATION:
objectivenum = 0;
break;
case STAGEINDEX_G5BUILDING:
if (lvGetDifficulty() == DIFF_A) {
objectivenum = 2;
} else if (lvGetDifficulty() == DIFF_SA) {
objectivenum = 2;
} else {
objectivenum = 2;
}
case STAGE_G5BUILDING:
objectivenum = 2;
break;
}
@ -5625,7 +5619,7 @@ void chrGoPosChooseAnimation(struct chrdata *chr)
|| chr->hitpart == HITPART_RBICEP) {
anim = ANIM_01F8;
flip = true;
} else if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_CHICAGO) {
} else if (g_Vars.stagenum == STAGE_CHICAGO) {
anim = ANIM_005F;
} else if (male) {
if (random() % 2) {
@ -6910,7 +6904,7 @@ bool chrConsiderGrenadeThrow(struct chrdata *chr, u32 attackflags, u32 entityid)
flags = OBJFLAG_WEAPON_LEFTHANDED;
}
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR) {
if (g_Vars.stagenum == STAGE_MBR) {
prop = chrGiveWeapon(chr, MODEL_CHRGRENADE, WEAPON_NBOMB, flags);
} else {
prop = chrGiveWeapon(chr, MODEL_CHRGRENADE, WEAPON_GRENADE, flags);

View File

@ -821,7 +821,7 @@ bool aiDetectEnemyOnSameFloor(void)
distance = chrGetDistanceToChr(g_Vars.chrdata, chr->chrnum);
if (distance < closestdist) {
if (distance < scandist || stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MAIANSOS) {
if (distance < scandist || g_Vars.stagenum == STAGE_MAIANSOS) {
if (distance < closestdist) {
closestdist = distance;
newtarget = chr->chrnum;
@ -1551,7 +1551,7 @@ bool aiIfEyespyNearG5Pad(s32 padnum)
{
s32 i;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_G5BUILDING) {
if (g_Vars.stagenum == STAGE_G5BUILDING) {
for (i = 0; i < PLAYERCOUNT(); i++) {
if (g_Vars.players[i]->eyespy && g_Vars.players[i]->eyespy->prop
&& chrGetSquaredDistanceToPad(g_Vars.players[i]->eyespy->prop->chr, padnum) < 22500.0f) {

View File

@ -353,9 +353,7 @@ u8 func0f13d3c4(u8 arg0, u8 arg1)
Gfx *artifactsConfigureForGlares(Gfx *gdl)
{
struct stagetableentry *stage = stageGetCurrent();
texSelect(&gdl, &g_TexLightGlareConfigs[stage->light_type], 4, 0, 2, 1, NULL);
texSelect(&gdl, &g_TexLightGlareConfigs[g_CurrentStage->light_type], 4, 0, 2, 1, NULL);
gDPSetCycleType(gdl++, G_CYC_1CYCLE);
gDPSetRenderMode(gdl++, G_RM_CLD_SURF, G_RM_CLD_SURF2);
@ -536,8 +534,8 @@ Gfx *artifactsRenderGlaresForRoom(Gfx *gdl, s32 roomnum)
brightness = 750.0f;
}
f24 = stageGetCurrent()->light_width * brightness * 0.01f;
f26 = stageGetCurrent()->light_height * brightness * 0.01f;
f24 = g_CurrentStage->light_width * brightness * 0.01f;
f26 = g_CurrentStage->light_height * brightness * 0.01f;
f24 *= viGetViewWidth() * (1.0f / 240.0f) / camGetPerspAspect();
f26 *= viGetViewHeight() * (1.0f / 240.0f);
@ -549,7 +547,7 @@ Gfx *artifactsRenderGlaresForRoom(Gfx *gdl, s32 roomnum)
colour[1] = g;
colour[2] = b;
alpha *= stageGetCurrent()->light_alpha / 255.0f;
alpha *= g_CurrentStage->light_alpha / 255.0f;
alpha *= (s3[1] / 255.0f);
alpha *= (s3[0] / 8.0f);
@ -574,7 +572,7 @@ Gfx *artifactsRenderGlaresForRoom(Gfx *gdl, s32 roomnum)
colour[0] = 0xff;
colour[1] = 0xff;
colour[2] = 0xff;
colour[3] = stageGetCurrent()->light_alpha;
colour[3] = g_CurrentStage->light_alpha;
colour[3] = s3[0] * colour[3] / 8;
gDPSetEnvColor(gdl++, colour[0], colour[1], colour[2], colour[3]);

View File

@ -63,6 +63,7 @@
#include "game/smoke.h"
#include "game/sparks.h"
#include "game/splat.h"
#include "game/stagetable.h"
#include "game/stars.h"
#include "game/stubs/game_013540.h"
#include "game/stubs/game_015260.h"
@ -101,6 +102,7 @@
struct sndstate *g_MiscSfxAudioHandles[3];
u32 var800aa5bc;
s32 g_MiscSfxActiveTypes[3];
struct stagetableentry *g_CurrentStage;
u32 var80084010 = 0;
bool var80084014 = false;
@ -232,6 +234,8 @@ void lvReset(s32 stagenum)
g_Vars.paksconnected = 0;
g_Vars.stagenum = stagenum;
g_CurrentStage = stageGetCurrent();
cheatsReset();
g_Vars.lvframenum = 0;

View File

@ -642,9 +642,9 @@ void playerLoadDefaults(void)
g_Vars.currentplayer->bondactivateorreload = false;
g_Vars.currentplayer->isdead = false;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_DUEL) {
if (g_Vars.stagenum == STAGE_DUEL) {
g_Vars.currentplayer->bondhealth = 0.01f;
} else if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MAIANSOS) {
} else if (g_Vars.stagenum == STAGE_MAIANSOS) {
g_Vars.currentplayer->bondhealth = 0.5f;
} else {
g_Vars.currentplayer->bondhealth = 1;
@ -1956,8 +1956,7 @@ void playerUpdateZoom(void)
scale = 0.1;
}
stage = stageGetCurrent();
currentPlayerSetScaleBg2Gfx((1 - (1 - stage->unk34) * (1 - scale) * (10.f / 9.0f)) * scale);
currentPlayerSetScaleBg2Gfx((1 - (1 - g_CurrentStage->unk34) * (1 - scale) * (10.f / 9.0f)) * scale);
}
void playerStopAudioForPause(void)
@ -3367,14 +3366,14 @@ void playerTick(bool arg0)
| 1 << CHEAT_HOTSHOT
| 1 << CHEAT_HITANDRUN
| 1 << CHEAT_ALIEN)) == 0) {
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
prop = chrSpawnAtCoord(BODY_DARK_COMBAT, HEAD_VD,
&g_Vars.currentplayer->prop->pos,
g_Vars.currentplayer->prop->rooms,
BADDEG2RAD(g_Vars.currentplayer->vv_theta / 2),
ailistFindById(GAILIST_INIT_DEFAULT_BUDDY),
SPAWNFLAG_00000010);
} else if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR) {
} else if (g_Vars.stagenum == STAGE_MBR) {
prop = chrSpawnAtCoord(BODY_MRBLONDE, HEAD_MRBLONDE,
&g_Vars.currentplayer->prop->pos,
g_Vars.currentplayer->prop->rooms,
@ -3402,7 +3401,7 @@ void playerTick(bool arg0)
chr->accuracyrating = 100;
chr->speedrating = 100;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
chrAddHealth(chr, 40);
} else {
chrAddHealth(chr, 20);
@ -3420,7 +3419,7 @@ void playerTick(bool arg0)
}
if (cheatIsActive(CHEAT_PUGILIST)) {
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR) {
if (g_Vars.stagenum == STAGE_MBR) {
prop = chrSpawnAtCoord(BODY_MRBLONDE, HEAD_MRBLONDE,
&g_Vars.currentplayer->prop->pos,
g_Vars.currentplayer->prop->rooms,
@ -3448,7 +3447,7 @@ void playerTick(bool arg0)
chr->accuracyrating = 100;
chr->speedrating = 100;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
chrAddHealth(chr, 40);
} else {
chrAddHealth(chr, 20);
@ -3464,7 +3463,7 @@ void playerTick(bool arg0)
}
if (cheatIsActive(CHEAT_HITANDRUN)) {
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR) {
if (g_Vars.stagenum == STAGE_MBR) {
prop = chrSpawnAtCoord(BODY_MRBLONDE, HEAD_MRBLONDE,
&g_Vars.currentplayer->prop->pos,
g_Vars.currentplayer->prop->rooms,
@ -3492,7 +3491,7 @@ void playerTick(bool arg0)
chr->accuracyrating = 50;
chr->speedrating = 100;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
chrAddHealth(chr, 20);
} else {
chrAddHealth(chr, 10);
@ -3510,7 +3509,7 @@ void playerTick(bool arg0)
}
if (cheatIsActive(CHEAT_HOTSHOT)) {
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR) {
if (g_Vars.stagenum == STAGE_MBR) {
prop = chrSpawnAtCoord(BODY_MRBLONDE, HEAD_MRBLONDE,
&g_Vars.currentplayer->prop->pos,
g_Vars.currentplayer->prop->rooms,
@ -3538,7 +3537,7 @@ void playerTick(bool arg0)
chr->accuracyrating = 50;
chr->speedrating = 100;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
chrAddHealth(chr, 40);
} else {
chrAddHealth(chr, 20);
@ -3557,7 +3556,7 @@ void playerTick(bool arg0)
}
if (cheatIsActive(CHEAT_ALIEN)) {
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR) {
if (g_Vars.stagenum == STAGE_MBR) {
prop = chrSpawnAtCoord(BODY_MRBLONDE, HEAD_MRBLONDE,
&g_Vars.currentplayer->prop->pos,
g_Vars.currentplayer->prop->rooms,
@ -3585,7 +3584,7 @@ void playerTick(bool arg0)
chr->accuracyrating = 100;
chr->speedrating = 100;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
chrAddHealth(chr, 40);
} else {
chrAddHealth(chr, 20);

View File

@ -86,11 +86,11 @@ void playerInitEyespy(void)
playerchr = g_Vars.currentplayer->prop->chr;
propchr->team = playerchr->team;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
if (g_Vars.stagenum == STAGE_AIRBASE) {
g_Vars.currentplayer->eyespy->mode = EYESPYMODE_DRUGSPY;
g_Weapons[WEAPON_EYESPY]->name = L_GUN_061; // "DrugSpy"
g_Weapons[WEAPON_EYESPY]->shortname = L_GUN_061; // "DrugSpy"
} else if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR || stageGetIndex(g_Vars.stagenum) == STAGEINDEX_CHICAGO) {
} else if (g_Vars.stagenum == STAGE_MBR || g_Vars.stagenum == STAGE_CHICAGO) {
g_Vars.currentplayer->eyespy->mode = EYESPYMODE_BOMBSPY;
} else {
g_Vars.currentplayer->eyespy->mode = EYESPYMODE_CAMSPY;

View File

@ -9493,7 +9493,7 @@ void chopperTickFall(struct prop *chopperprop)
goalroty = chopper->roty + *x + *z;
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_EXTRACTION) {
if (g_Vars.stagenum == STAGE_EXTRACTION) {
// The Extraction chopper falls without any collision checks and is
// reaped once it reaches the lower barrier
if (chopperprop->pos.y < -30000) {

View File

@ -296,5 +296,6 @@ extern u8 g_HudmsgsActive;
extern struct roommtx *g_RoomMtxes;
extern s32 g_NextRoomMtx;
extern s32 g_BgAlwaysRoom;
extern struct stagetableentry *g_CurrentStage;
#endif