diff options
| author | petrie911 <69443847+petrie911@users.noreply.github.com> | 2024-04-03 09:30:50 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-03 11:30:50 -0300 |
| commit | ac41c180a9e68d31d18cfc57b46032f4ccaa052a (patch) | |
| tree | af76e3fc54538127cc81f19bdb14045b9e85fc5f /src/engine/fox_game.c | |
| parent | 5f2b690a2b1ef89a33b5dc16440b0f87d9bc3779 (diff) | |
Reorganizaton of main (#199)
* reorganize main
* more names
* libc
Diffstat (limited to 'src/engine/fox_game.c')
| -rw-r--r-- | src/engine/fox_game.c | 564 |
1 files changed, 564 insertions, 0 deletions
diff --git a/src/engine/fox_game.c b/src/engine/fox_game.c new file mode 100644 index 00000000..de2f1120 --- /dev/null +++ b/src/engine/fox_game.c @@ -0,0 +1,564 @@ +#include "prevent_bss_reordering.h" +#include "global.h" +#include "sf64dma.h" +#include "assets/ast_logo.h" + +f32 D_game_80161A10; +f32 D_game_80161A14; +s32 gPlayerInactive[4]; +s32 D_game_80161A28; +u8 D_game_80161A2C; +u16 D_game_80161A2E; +u16 gNextLevel; +u16 gNextGameState; +u16 D_game_80161A34; +u16 gBgColor; +u8 gBlurAlpha; +u8 D_game_80161A39; +f32 D_game_80161A3C; +f32 D_game_80161A40; +f32 D_game_80161A44; + +s32 D_game_800D2860[4] = { true, true, true, true }; +s32 D_game_800D2870 = 0; +static s32 D_game_800D2874[] = { 0, 160, 0, 160 }; +static s32 D_game_800D2884[] = { 159, 319, 159, 319 }; +static s32 D_game_800D2894[] = { 0, 0, 120, 120 }; +static s32 D_game_800D28A4[] = { 119, 119, 239, 239 }; +static s32 sOverlaySetups[] = { + /* LEVEL_CORNERIA */ OVL_SETUP_CORNERIA, + /* LEVEL_METEO */ OVL_SETUP_METEO, + /* LEVEL_SECTOR_X */ OVL_SETUP_SECTOR_X, + /* LEVEL_AREA_6 */ OVL_SETUP_AREA_6, + /* LEVEL_UNK_4 */ OVL_SETUP_UNK_4, + /* LEVEL_SECTOR_Y */ OVL_SETUP_SECTOR_Y, + /* LEVEL_VENOM_1 */ OVL_SETUP_VENOM_1, + /* LEVEL_SOLAR */ OVL_SETUP_SOLAR, + /* LEVEL_ZONESS */ OVL_SETUP_ZONESS, + /* LEVEL_VENOM_ANDROSS */ OVL_SETUP_VENOM_ANDROSS, + /* LEVEL_TRAINING */ OVL_SETUP_TRAINING, + /* LEVEL_MACBETH */ OVL_SETUP_MACBETH, + /* LEVEL_TITANIA */ OVL_SETUP_TITANIA, + /* LEVEL_AQUAS */ OVL_SETUP_AQUAS, + /* LEVEL_FORTUNA */ OVL_SETUP_FORTUNA, + /* LEVEL_UNK_15 */ OVL_SETUP_TITLE, + /* LEVEL_KATINA */ OVL_SETUP_KATINA, + /* LEVEL_BOLSE */ OVL_SETUP_BOLSE, + /* LEVEL_SECTOR_Z */ OVL_SETUP_SECTOR_Z, + /* LEVEL_VENOM_2 */ OVL_SETUP_VENOM_2, + /* LEVEL_VERSUS */ OVL_SETUP_VERSUS, +}; + +void Game_Initialize(void) { + Memory_FreeAll(); + Rand_Init(); + Rand_SetSeed(1, 29000, 9876); + gGameState = GSTATE_BOOT; + D_Timer_8017783C = 0; + gBgColor = 0; + gBlurAlpha = 0xFF; + D_game_80161A3C = 45.0f; + D_game_80161A40 = 10.0f; + D_game_80161A44 = 12800.0f; + D_game_80161A10 = D_game_80161A14 = 0.0f; + gOverlaySetup = OVL_SETUP_LOGO; + gOverlayStage = 0; + Overlay_InitDma(); + D_game_80161A39 = true; +} + +void Game_SetGameState(void) { + D_game_80161A14 = D_game_80161A10; + + if (gNextGameState == GSTATE_NONE) { + return; + } + + switch (gNextGameState) { + case GSTATE_PLAY: + gCurrentLevel = gNextLevel; + func_play_800A5844(); + D_ctx_80177854 = 0; + D_ctx_8017827C = D_game_80161A2E; + D_game_80161A2E = 0; + if ((D_ctx_8017827C != 0) && (gCurrentLevel != LEVEL_VENOM_ANDROSS)) { + D_ctx_8017782C = 0; + } + break; + case GSTATE_MAP: + D_ctx_80177B40 = 0; + break; + case GSTATE_GAME_OVER: + D_ctx_80177868 = 0; + break; + } + Memory_FreeAll(); + func_play_800A6148(); + gGameState = gNextGameState; + D_Timer_8017783C = 3; + D_360_8015F924 = 0; + gNextGameState = GSTATE_NONE; + gOverlayStage = 0; + gFillScreenColor = gBgColor = 0; + D_ctx_80177D20 = 0.0f; + if ((gCurrentLevel == LEVEL_VENOM_2) && (D_ctx_8017827C == 2)) { + gFillScreenColor = gBgColor = 0xFFFF; // 248, 248, 248 + D_ctx_80178348 = D_ctx_80178350 = D_ctx_80178354 = 255; + } else { + D_ctx_80178348 = D_ctx_80178350 = D_ctx_80178354 = 0; + Audio_FadeOutAll(1); + } + D_ctx_80178340 = 255; + D_ctx_80178380[0] = 0; + gRadioState = 0; + D_ctx_80178428 = 0.0f; + gBlurAlpha = 255; + gDrawMode = DRAWMODE_0; + Audio_ClearVoice(); + Audio_SetBaseSfxReverb(0); +} + +bool func_game_800A1B6C(void) { + static u8 sHoldTimer = 0; + static u8 sOverlaySelect = 99; + static u8 sCurrentOverlay = 99; + static u8 sCurrentStage = 99; + + if (gOverlaySetup != sCurrentOverlay) { + sHoldTimer = 2; + sCurrentOverlay = gOverlaySetup; + } + if (sHoldTimer == 0) { + sOverlaySelect = sCurrentOverlay; + sCurrentStage = gOverlayStage; + } + Overlay_Load(sOverlaySelect, sCurrentStage); + + if (sHoldTimer) { + sHoldTimer--; + return true; + } + return false; +} + +void func_game_800A1C14(Gfx** arg0) { + gSPDisplayList((*arg0)++, gRcpInitDL); + gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 8, 8, SCREEN_WIDTH - 8, SCREEN_HEIGHT - 8); + gDPSetDepthImage((*arg0)++, &gZBuffer); + gDPSetColorImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, &gZBuffer); + gDPSetFillColor((*arg0)++, FILL_COLOR(GPACK_ZDZ(G_MAXFBZ, 0))); + gDPFillRectangle((*arg0)++, 8, 8, SCREEN_WIDTH - 8 - 1, SCREEN_HEIGHT - 8 - 1); + gDPSetColorImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gFrameBuffer); + + if (gBlurAlpha < 0xFF) { + gDPPipeSync((*arg0)++); + gDPSetCycleType((*arg0)++, G_CYC_1CYCLE); + gDPSetCombineMode((*arg0)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode((*arg0)++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetPrimColor((*arg0)++, 0x00, 0x00, RGBA16_RED(gBgColor) * 8, RGBA16_GRN(gBgColor) * 8, + RGBA16_BLU(gBgColor) * 8, gBlurAlpha); + } else { + gDPSetFillColor((*arg0)++, FILL_COLOR(gBgColor | 1)); + } + gDPFillRectangle((*arg0)++, 8, 8, SCREEN_WIDTH - 8 - 1, SCREEN_HEIGHT - 8); + gDPPipeSync((*arg0)++); + gDPSetColorDither((*arg0)++, G_CD_MAGICSQ); +} + +void func_game_800A1E68(Gfx** arg0) { + gSPDisplayList((*arg0)++, gRcpInitDL); + gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT * 3); + gDPSetFillColor((*arg0)++, FILL_COLOR(0x0001)); + gDPSetColorImage((*arg0)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gFrameBuffers[0].data); + gDPFillRectangle((*arg0)++, 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT * 3 - 1); + gDPPipeSync((*arg0)++); + gDPSetColorDither((*arg0)++, G_CD_MAGICSQ); +} + +void func_game_800A1F44(void) { + gViewport->vp.vscale[0] = gViewport->vp.vtrans[0] = SCREEN_WIDTH * 2; + gViewport->vp.vscale[1] = gViewport->vp.vtrans[1] = SCREEN_HEIGHT * 2; + gViewport->vp.vscale[2] = gViewport->vp.vtrans[2] = G_MAXZ / 2; + gViewport->vp.vscale[3] = gViewport->vp.vtrans[3] = 0; +} + +void func_game_800A1FB0(Gfx** arg0, u8 arg1, u8 arg2) { + if ((arg1 != 1) && (arg1 == 4)) { + switch (arg2) { + case 0: + gViewport->vp.vscale[0] = SCREEN_WIDTH * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[1] = SCREEN_HEIGHT * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[2] = G_MAXZ / 2; + gViewport->vp.vscale[3] = 0; + gViewport->vp.vtrans[0] = SCREEN_WIDTH * (2.0f - D_game_80161A14) * 2; + gViewport->vp.vtrans[1] = SCREEN_HEIGHT * (2.0f - D_game_80161A14) * 2; + gViewport->vp.vtrans[2] = G_MAXZ / 2; + gViewport->vp.vtrans[3] = 0; + gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 8, 8, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2); + break; + case 1: + gViewport->vp.vscale[0] = SCREEN_WIDTH * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[1] = SCREEN_HEIGHT * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[2] = G_MAXZ / 2; + gViewport->vp.vscale[3] = 0; + gViewport->vp.vtrans[0] = SCREEN_WIDTH * D_game_80161A14 * 2; + gViewport->vp.vtrans[1] = SCREEN_HEIGHT * (2.0f - D_game_80161A14) * 2; + gViewport->vp.vtrans[2] = G_MAXZ / 2; + gViewport->vp.vtrans[3] = 0; + gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, SCREEN_WIDTH / 2, 8, SCREEN_WIDTH - 8, SCREEN_HEIGHT / 2); + break; + case 2: + gViewport->vp.vscale[0] = SCREEN_WIDTH * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[1] = SCREEN_HEIGHT * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[2] = G_MAXZ / 2; + gViewport->vp.vscale[3] = 0; + gViewport->vp.vtrans[0] = SCREEN_WIDTH * (2.0f - D_game_80161A14) * 2; + gViewport->vp.vtrans[1] = SCREEN_HEIGHT * D_game_80161A14 * 2; + gViewport->vp.vtrans[2] = G_MAXZ / 2; + gViewport->vp.vtrans[3] = 0; + gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 8, SCREEN_HEIGHT / 2, SCREEN_WIDTH / 2, SCREEN_HEIGHT - 8); + break; + case 3: + gViewport->vp.vscale[0] = SCREEN_WIDTH * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[1] = SCREEN_HEIGHT * (D_game_80161A14 - 1.0f) * 2; + gViewport->vp.vscale[2] = G_MAXZ / 2; + gViewport->vp.vscale[3] = 0; + gViewport->vp.vtrans[0] = SCREEN_WIDTH * D_game_80161A14 * 2; + gViewport->vp.vtrans[1] = SCREEN_HEIGHT * D_game_80161A14 * 2; + gViewport->vp.vtrans[2] = G_MAXZ / 2; + gViewport->vp.vtrans[3] = 0; + gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, SCREEN_WIDTH - 8, + SCREEN_HEIGHT - 8); + break; + default: + func_game_800A1F44(); + break; + } + } else { + func_game_800A1F44(); + if (1) {} + } + gSPViewport((*arg0)++, gViewport++); +} + +void func_game_800A24DC(s32 arg0) { + switch (gDrawMode) { + case DRAWMODE_0: + break; + case DRAWMODE_1: + func_bg_8003DAF0(); + OvlMenu_CallFunction(104, NULL); + break; + case DRAWMODE_2: + func_bg_8003DAF0(); + OvlMenu_CallFunction(108, NULL); + break; + case DRAW_MAP: + func_bg_8003DAF0(); + OvlMenu_CallFunction(106, NULL); + break; + case DRAWMODE_4: + gPlayerNum = arg0; + func_display_80057D00(); + break; + case DRAWMODE_5: + func_bg_8003DAF0(); + OvlMenu_CallFunction(110, NULL); + break; + case DRAWMODE_6: + func_versus_800C2190(); + break; + case DRAWMODE_7: + gPlayerNum = arg0; + func_800A3CA0(); + break; + case DRAWMODE_8: + func_bg_8003DAF0(); + gPlayerNum = arg0; + Ending_8018AAC4(); + break; + } +} + +void func_game_800A25DC(void) { + switch (gGameState) { + case GSTATE_INIT: + gOverlaySetup = OVL_SETUP_TITLE; + gOverlayStage = 0; + break; + case GSTATE_TITLE: + gOverlaySetup = OVL_SETUP_TITLE; + gOverlayStage = 0; + break; + case GSTATE_MENU: + gOverlaySetup = OVL_SETUP_MENU; + gOverlayStage = 0; + break; + case GSTATE_MAP: + gOverlaySetup = OVL_SETUP_MAP; + gOverlayStage = 0; + return; + case GSTATE_VS_INIT: + gOverlaySetup = OVL_SETUP_VERSUS; + break; + case GSTATE_PLAY: + gOverlaySetup = sOverlaySetups[gCurrentLevel]; + break; + case GSTATE_GAME_OVER: + gOverlaySetup = OVL_SETUP_GAME_OVER; + gOverlayStage = 0; + break; + case GSTATE_CREDITS: + gOverlaySetup = OVL_SETUP_CREDITS; + break; + } +} + +void Game_Update(void) { + s32 i; + u8 spBB; + u8 var_v0_3; + + Game_SetGameState(); + if (D_game_80161A39) { + func_game_800A1E68(&gUnkDisp1); + D_game_80161A39 = false; + return; + } + func_game_800A1C14(&gUnkDisp1); + func_game_800A25DC(); + if (func_game_800A1B6C() != true) { + Lib_Perspective(&gUnkDisp1); + func_game_800A1FB0(&gUnkDisp1, gCamCount, 0); + if (D_Timer_8017783C != 0) { + D_Timer_8017783C--; + } + switch (gGameState) { + case GSTATE_BOOT: + D_Timer_8017783C = 2; + gGameState++; + break; + case GSTATE_BOOT_WAIT: + if (D_Timer_8017783C == 0) { + gGameState++; + } + break; + case GSTATE_SHOW_LOGO: + RCP_SetupDL(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 0], 128, 16, 100.0f, 86.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 1], 128, 16, 100.0f, 102.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 2], 128, 16, 100.0f, 118.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 3], 128, 16, 100.0f, 134.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 4], 128, 10, 100.0f, 150.0f, 1.0f, 1.0f); + gGameState++; + break; + case GSTATE_CHECK_SAVE: + if (Save_Read() != 0) { + gSaveFile = *((SaveFile*) &gDefaultSave); + Save_Write(); + } + gGameState++; + Timer_CreateTask(MSEC_TO_CYCLES(1000), Timer_Increment, (s32*) &gGameState, 1); + /* fallthrough */ + case GSTATE_LOGO_WAIT: + RCP_SetupDL(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 0], 128, 16, 100.0f, 86.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 1], 128, 16, 100.0f, 102.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 2], 128, 16, 100.0f, 118.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 3], 128, 16, 100.0f, 134.0f, 1.0f, 1.0f); + TextureRect_8bIA(&gMasterDisp, &gNintendoLogo[128 * 16 * 4], 128, 10, 100.0f, 150.0f, 1.0f, 1.0f); + break; + case GSTATE_START: + gGameState = GSTATE_INIT; + gOverlaySetup = OVL_SETUP_TITLE; + gOverlayStage = 0; + break; + case GSTATE_INIT: + gGameState = GSTATE_TITLE; + D_ctx_80177AE0 = 1; + D_ctx_80177824 = 1; + Memory_FreeAll(); + func_play_800A6148(); + gCamCount = 1; + gLifeCount[0] = 2; + D_ctx_80177D20 = 0.0f; + D_hud_8016170C = gCsFrameCount = D_ctx_80177830 = D_ctx_80177838 = D_ctx_80177840 = D_versus_80178754 = + gVersusMode = D_ctx_80177AE0 = D_ctx_80178410 = D_ctx_80177B40 = D_ctx_80177854 = + gOptionMenuStatus = gDrawMode = gShowBossHealth = D_game_80161A2C = gBgColor = D_ctx_80178340 = + 0; + gNextGameState = D_ctx_80177C94 = D_ctx_80177CAC = D_ctx_80177CB4 = D_ctx_80177CBC = D_ctx_80177CC4 = + D_ctx_80177C9C = D_ctx_80177CA4 = D_play_80161A5C = D_game_80161A34 = 0; + for (i = 0; i < 4; i++) { + gBoostButton[i] = L_CBUTTONS; + gBrakeButton[i] = D_CBUTTONS; + gShootButton[i] = A_BUTTON; + gBombButton[i] = B_BUTTON; + + D_ctx_80177958[i] = 1.0f; + + D_ctx_80177858[i] = 3; + D_ctx_80177870[i] = 0; + D_game_800D2860[i] = true; + D_ctx_80178380[i] = 0; + } + gVersusStage = 0; + D_ctx_801778A4 = 3; + gBlurAlpha = 255; + for (i = 0; i < 30; i++) { + D_play_800D3180[i] = 0; + } + gExpertMode = false; + gSoundMode = gSaveFile.save.data.soundMode; + switch (gSoundMode) { + case OPTIONSOUND_STEREO: + var_v0_3 = SOUNDMODE_STEREO; + break; + case OPTIONSOUND_MONO: + var_v0_3 = SOUNDMODE_MONO; + break; + case OPTIONSOUND_HEADSET: + var_v0_3 = SOUNDMODE_HEADSET; + break; + default: + gSoundMode = OPTIONSOUND_STEREO; + var_v0_3 = SOUNDMODE_STEREO; + break; + } + SEQCMD_SET_SOUND_MODE(var_v0_3); + gVolumeSettings[0] = gSaveFile.save.data.musicVolume; + gVolumeSettings[1] = gSaveFile.save.data.voiceVolume; + gVolumeSettings[2] = gSaveFile.save.data.sfxVolume; + if (gVolumeSettings[0] > 99) { + gVolumeSettings[0] = 99; + } + if (gVolumeSettings[1] > 99) { + gVolumeSettings[1] = 99; + } + if (gVolumeSettings[2] > 99) { + gVolumeSettings[2] = 99; + } + func_8001D8A8(0, gVolumeSettings[0]); + func_8001D8A8(1, gVolumeSettings[1]); + func_8001D8A8(2, gVolumeSettings[2]); + break; + case GSTATE_TITLE: + OvlMenu_CallFunction(103, NULL); + break; + case GSTATE_MENU: + OvlMenu_CallFunction(107, NULL); + break; + case GSTATE_MAP: + Map_8019E8D0(); + break; + case GSTATE_VS_INIT: + func_versus_800C20B0(); + break; + case GSTATE_PLAY: + func_play_800B86CC(); + break; + case GSTATE_GAME_OVER: + OvlMenu_CallFunction(109, NULL); + break; + case GSTATE_CREDITS: + gDrawMode = DRAWMODE_8; + Ending_8018A96C(); + break; + default: + break; + } + func_game_800A24DC(0); + if (gCamCount == 2) { + func_game_800A1FB0(&gMasterDisp, gCamCount, 1); + func_game_800A24DC(1); + gDPPipeSync(gMasterDisp++); + gDPSetScissor(gMasterDisp++, G_SC_NON_INTERLACE, 8, 8, SCREEN_WIDTH - 8, SCREEN_HEIGHT - 8); + } else if ((gCamCount == 4) && (gDrawMode != DRAWMODE_0)) { + func_game_800A1FB0(&gMasterDisp, gCamCount, 3); + func_game_800A24DC(3); + func_game_800A1FB0(&gMasterDisp, gCamCount, 2); + func_game_800A24DC(2); + func_game_800A1FB0(&gMasterDisp, gCamCount, 1); + func_game_800A24DC(1); + gDPPipeSync(gMasterDisp++); + gDPSetScissor(gMasterDisp++, G_SC_NON_INTERLACE, 8, 8, SCREEN_WIDTH - 8, SCREEN_HEIGHT - 8); + gDPSetColorDither(gMasterDisp++, G_CD_NOISE); + gDPSetAlphaDither(gMasterDisp++, G_AD_NOISE); + gDPSetCycleType(gMasterDisp++, G_CYC_1CYCLE); + gDPSetCombineMode(gMasterDisp++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode(gMasterDisp++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetPrimColor(gMasterDisp++, 0x00, 0x0, 0, 0, 0, 0); + gDPFillRectangle(gMasterDisp++, SCREEN_WIDTH / 2 - 3, 8, SCREEN_WIDTH / 2 + 2, SCREEN_HEIGHT - 8); + gDPFillRectangle(gMasterDisp++, 8, SCREEN_HEIGHT / 2 - 3, SCREEN_WIDTH - 8, SCREEN_HEIGHT / 2 + 2); + + if (gLevelType == LEVELTYPE_PLANET) { + gDPSetPrimColor(gMasterDisp++, 0x00, 0x0, 0, 0, 0, 255); + } else { + gDPSetPrimColor(gMasterDisp++, 0x00, 0x0, 100, 100, 255, 255); + } + gDPFillRectangle(gMasterDisp++, SCREEN_WIDTH / 2 - 2, 8, SCREEN_WIDTH / 2 + 1, SCREEN_HEIGHT - 8); + gDPFillRectangle(gMasterDisp++, 8, SCREEN_HEIGHT / 2 - 2, SCREEN_WIDTH - 8, SCREEN_HEIGHT / 2 + 1); + + func_hud_8008CB8C(); + } + spBB = 0; + if (gCamCount == 1) { + Graphics_FillRectangle(&gMasterDisp, 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, D_ctx_80178390[0], + D_ctx_801783A0[0], D_ctx_801783B0[0], D_ctx_80178380[0]); + if ((gDrawMode == DRAWMODE_4) || (gDrawMode == DRAWMODE_8)) { + func_radio_800BB5D0(); + if (D_game_80161A2C != 0) { + func_hud_8008FA84(); + func_hud_8008CA44(); + } + func_hud_8008DE68(); + } + } else { + for (i = 0; i < gCamCount; i++) { + if (gPlayer[i].timer_224 != 0) { + + Graphics_FillRectangle(&gMasterDisp, D_game_800D2874[i], D_game_800D2894[i], D_game_800D2884[i], + D_game_800D28A4[i], D_ctx_80178348, D_ctx_80178350, D_ctx_80178354, + D_ctx_80178340); + spBB = 1; + } else { + Graphics_FillRectangle(&gMasterDisp, D_game_800D2874[i], D_game_800D2894[i], D_game_800D2884[i], + D_game_800D28A4[i], D_ctx_80178390[i], D_ctx_801783A0[i], D_ctx_801783B0[i], + D_ctx_80178380[i]); + } + } + } + func_bg_80040CDC(); + func_hud_8008865C(); + func_360_8002E548(); + if ((gGameState == GSTATE_PLAY) && gVersusMode) { + func_versus_800C1ED4(); + } + func_fade_80084688(0, D_ctx_80177C50); + if (spBB == 0) { + Graphics_FillRectangle(&gMasterDisp, 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, D_ctx_80178348, + D_ctx_80178350, D_ctx_80178354, D_ctx_80178340); + } + func_80016A50(); + } +} + +Actor* func_game_800A3608(ObjectId objId) { + Actor* actor = gActors; + s32 i; + + for (i = 0; i < ARRAY_COUNT(gActors); i++, actor++) { + if (actor->obj.status == OBJ_FREE) { + Actor_Initialize(actor); + actor->obj.status = OBJ_INIT; + actor->obj.id = objId; + Object_SetInfo(&actor->info, actor->obj.id); + break; + } + } + if (i == ARRAY_COUNT(gActors)) { + actor = NULL; + } + return actor; +} |
