From 15fc4a0a7c29416a708dec139e01ef80bfdc1258 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 25 Oct 2022 19:28:38 +1000 Subject: [PATCH] Fix a BG preload bug and make other related improvements --- src/game/bg.c | 14 ++++- src/game/lv.c | 2 +- src/game/vtxstore.c | 7 --- src/lib/main.c | 135 +++++++++++--------------------------------- 4 files changed, 46 insertions(+), 112 deletions(-) diff --git a/src/game/bg.c b/src/game/bg.c index 2715d9cae..3031974a3 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -3453,7 +3453,7 @@ void bgTick(void) func0f15c920(); - if (g_Vars.currentplayerindex == 0 && !g_BgPreload) { + if (!g_BgPreload && g_Vars.currentplayerindex == 0) { bgTickRooms(); } @@ -5536,6 +5536,10 @@ void bgGarbageCollectRooms(s32 bytesneeded, bool desparate) s32 count = 0; s32 i; + if (g_BgPreload) { + return; + } + while (bytesfree < bytesneeded) { oldestroom = 0; oldesttimer = 0; @@ -5862,7 +5866,11 @@ void bgFindRoomVtxBatches(s32 roomnum) batchindex += xlucount; - batches = memaAlloc((batchindex * sizeof(struct vtxbatch) + 0xf) & ~0xf); + if (g_BgPreload) { + batches = mempAlloc((batchindex * sizeof(struct vtxbatch) + 0xf) & ~0xf, MEMPOOL_STAGE); + } else { + batches = memaAlloc((batchindex * sizeof(struct vtxbatch) + 0xf) & ~0xf); + } if (batches != NULL) { gdl = roomGetNextGdlInLayer(roomnum, NULL, VTXBATCHTYPE_OPA); @@ -9012,7 +9020,7 @@ void bgPreload(void) if (g_BgPreload) { s32 i; - for (i = 0; i < g_Vars.roomcount; i++) { + for (i = 1; i < g_Vars.roomcount; i++) { bgLoadRoom(i); } } diff --git a/src/game/lv.c b/src/game/lv.c index 8f52a8ca6..b64819dfb 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -324,7 +324,6 @@ void lvReset(s32 stagenum) bgReset(g_Vars.stagenum); bgBuildTables(g_Vars.stagenum); skyReset(g_Vars.stagenum); - bgPreload(); if (g_Vars.normmplayerisrunning) { musicSetStageAndStartMusic(stagenum); @@ -441,6 +440,7 @@ void lvReset(s32 stagenum) portalsReset(); lightsReset(); setCurrentPlayerNum(0); + bgPreload(); } if (g_Vars.lvmpbotlevel) { diff --git a/src/game/vtxstore.c b/src/game/vtxstore.c index 86c5e7a90..b84dd5621 100644 --- a/src/game/vtxstore.c +++ b/src/game/vtxstore.c @@ -147,13 +147,6 @@ void *vtxstoreAllocate(s32 count, s32 index, struct modelnode *node, s32 level) size = ALIGN16(count * 0xc); g_VtxstoreTypes[index].unk24[i].unk00 = memaAlloc(size); -#if VERSION < VERSION_NTSC_1_0 - if (!g_VtxstoreTypes[index].unk24[i].unk00) { - bgGarbageCollectRooms(size, false); - g_VtxstoreTypes[index].unk24[i].unk00 = memaAlloc(size); - } -#endif - if (g_VtxstoreTypes[index].unk24[i].unk00) { g_VtxstoreTypes[index].unk24[i].count = count; g_VtxstoreTypes[index].unk24[i].unk0e = 1; diff --git a/src/lib/main.c b/src/lib/main.c index 5f08abad1..7d8d4ddb5 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -83,41 +83,40 @@ bool g_MainIsEndscreen = false; s32 g_DoBootPakMenu = 0; struct stageallocation g_StageAllocations8Mb[] = { -#if VERSION >= VERSION_NTSC_1_0 - { STAGE_CITRAINING, "-ml0 -me0 -mgfx120 -mvtx98 -ma200" }, - { STAGE_DEFECTION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_INVESTIGATION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_EXTRACTION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_CHICAGO, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_G5BUILDING, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_VILLA, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, + { STAGE_CITRAINING, "-ml0 -me0 -mgfx120 -mvtx98 -ma100" }, + { STAGE_DEFECTION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_INVESTIGATION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_EXTRACTION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_CHICAGO, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_G5BUILDING, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_VILLA, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, { STAGE_INFILTRATION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma500" }, { STAGE_RESCUE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma500" }, { STAGE_ESCAPE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma500" }, - { STAGE_AIRBASE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_AIRFORCEONE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_CRASHSITE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_PELAGIC, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_DEEPSEA, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_DEFENSE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_ATTACKSHIP, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_SKEDARRUINS, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma200" }, - { STAGE_MP_SKEDAR, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_RAVINE, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_PIPES, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_G5BUILDING, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_SEWERS, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_WAREHOUSE, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_BASE, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_COMPLEX, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_TEMPLE, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_FELICITY, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_AREA52, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_GRID, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_CARPARK, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_RUINS, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_FORTRESS, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, - { STAGE_MP_VILLA, "-ml0 -me0 -mgfx200 -mvtx200 -ma200" }, + { STAGE_AIRBASE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_AIRFORCEONE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_CRASHSITE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_PELAGIC, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_DEEPSEA, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_DEFENSE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_ATTACKSHIP, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_SKEDARRUINS, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma100" }, + { STAGE_MP_SKEDAR, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_RAVINE, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_PIPES, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_G5BUILDING, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_SEWERS, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_WAREHOUSE, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_BASE, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_COMPLEX, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_TEMPLE, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_FELICITY, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_AREA52, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_GRID, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_CARPARK, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_RUINS, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_FORTRESS, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, + { STAGE_MP_VILLA, "-ml0 -me0 -mgfx200 -mvtx200 -ma100" }, { STAGE_TEST_RUN, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, { STAGE_TEST_MP2, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, { STAGE_TEST_MP6, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, @@ -131,88 +130,22 @@ struct stageallocation g_StageAllocations8Mb[] = { { STAGE_TEST_MP20, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, { STAGE_TEST_ASH, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, { STAGE_28, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, - { STAGE_MBR, "-ml0 -me0 -mgfx120 -mvtx100 -ma200" }, + { STAGE_MBR, "-ml0 -me0 -mgfx120 -mvtx100 -ma100" }, { STAGE_TEST_SILO, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, { STAGE_24, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, { STAGE_MAIANSOS, "-ml0 -me0 -mgfx120 -mvtx100 -ma500" }, { STAGE_RETAKING, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, { STAGE_TEST_DEST, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, { STAGE_2B, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, - { STAGE_WAR, "-ml0 -me0 -mgfx120 -mvtx98 -ma200" }, + { STAGE_WAR, "-ml0 -me0 -mgfx120 -mvtx98 -ma100" }, { STAGE_TEST_UFF, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, { STAGE_TEST_OLD, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, - { STAGE_DUEL, "-ml0 -me0 -mgfx120 -mvtx100 -ma200" }, + { STAGE_DUEL, "-ml0 -me0 -mgfx120 -mvtx100 -ma100" }, { STAGE_TEST_LAM, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, { STAGE_TEST_ARCH, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, { STAGE_TEST_LEN, "-ml0 -me0 -mgfx120 -mvtx98 -ma300" }, { STAGE_TITLE, "-ml0 -me0 -mgfx80 -mvtx20 -ma001" }, { 0, "-ml0 -me0 -mgfx120 -mvtx98 -ma300" }, -#else - // ntsc-beta - { STAGE_CITRAINING, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_DEFECTION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma700" }, - { STAGE_INVESTIGATION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma700" }, - { STAGE_EXTRACTION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma700" }, - { STAGE_CHICAGO, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma500" }, - { STAGE_G5BUILDING, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma500" }, - { STAGE_VILLA, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma600" }, - { STAGE_INFILTRATION, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_RESCUE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_ESCAPE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_AIRBASE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_AIRFORCEONE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_CRASHSITE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_PELAGIC, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_DEEPSEA, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_DEFENSE, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_ATTACKSHIP, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_SKEDARRUINS, "-ml0 -me0 -mgfx110 -mgfxtra80 -mvtx100 -ma400" }, - { STAGE_MP_SKEDAR, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_RAVINE, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_PIPES, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_G5BUILDING, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_SEWERS, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_WAREHOUSE, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_BASE, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_COMPLEX, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_TEMPLE, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_FELICITY, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_AREA52, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_GRID, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_CARPARK, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_RUINS, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_FORTRESS, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_MP_VILLA, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_RUN, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP2, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP6, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP7, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP8, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP14, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP16, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP17, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP18, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP19, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_MP20, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_ASH, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_28, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_MBR, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_TEST_SILO, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_24, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_MAIANSOS, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_RETAKING, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_TEST_DEST, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_2B, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_WAR, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_TEST_UFF, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_TEST_OLD, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_DUEL, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_TEST_LAM, "-ml0 -me0 -mgfx120 -mvtx100 -ma400" }, - { STAGE_TEST_ARCH, "-ml0 -me0 -mgfx200 -mvtx200 -ma400" }, - { STAGE_TEST_LEN, "-ml0 -me0 -mgfx120 -mvtx100 -ma300" }, - { STAGE_TITLE, "-ml0 -me0 -mgfx80 -mvtx20 -ma001" }, - { 0, "-ml0 -me0 -mgfx120 -mvtx100 -ma300" }, -#endif }; Gfx var8005dcc8[] = {