diff --git a/src/game/bg.c b/src/game/bg.c index 2b809f629..3b87e615f 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -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; diff --git a/src/game/bondeyespy.c b/src/game/bondeyespy.c index f3697fcdc..a95e77507 100644 --- a/src/game/bondeyespy.c +++ b/src/game/bondeyespy.c @@ -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; diff --git a/src/game/bondgunreset.c b/src/game/bondgunreset.c index ee80415d4..431844fae 100644 --- a/src/game/bondgunreset.c +++ b/src/game/bondgunreset.c @@ -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); diff --git a/src/game/chraction.c b/src/game/chraction.c index 2c158f47d..28a327884 100644 --- a/src/game/chraction.c +++ b/src/game/chraction.c @@ -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); diff --git a/src/game/chraicommands.c b/src/game/chraicommands.c index aa8ed463c..8ef15c4f1 100644 --- a/src/game/chraicommands.c +++ b/src/game/chraicommands.c @@ -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) { diff --git a/src/game/game_13c510.c b/src/game/game_13c510.c index d221c82af..a2fa68fcf 100644 --- a/src/game/game_13c510.c +++ b/src/game/game_13c510.c @@ -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]); diff --git a/src/game/lv.c b/src/game/lv.c index 478b309ca..f13976cb1 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -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; diff --git a/src/game/player.c b/src/game/player.c index ac138436d..5e04d1c08 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -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); diff --git a/src/game/playerreset.c b/src/game/playerreset.c index f0826e713..c4b0c2678 100644 --- a/src/game/playerreset.c +++ b/src/game/playerreset.c @@ -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; diff --git a/src/game/propobj.c b/src/game/propobj.c index 5a3617b19..de5c7cd0c 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -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) { diff --git a/src/include/bss.h b/src/include/bss.h index bd0be4251..3fa4dd900 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -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