/* * File: fox_option.c * System: Option * Description: Starfox Option Menu Handler */ #include "mods.h" #include "prevent_bss_reordering.h" #include "global.h" #include "fox_option.h" #include "assets/ast_text.h" #include "assets/ast_font_3d.h" #include "assets/ast_option.h" #include "assets/ast_vs_menu.h" #include "assets/ast_map.h" #include "port/interpolation/FrameInterpolation.h" extern s32 gRankingTeamAlive[][3]; extern Gfx gMapVenomCloudDL[]; extern Gfx gMapKatinaDL[]; extern Gfx gMapMacbethDL[]; extern Gfx gMapZonessDL[]; extern Gfx gMapCorneriaDL[]; extern Gfx gMapTitaniaDL[]; extern Gfx gMapAquasDL[]; extern Gfx gMapFortunaDL[]; extern Gfx gMapKatinaDL[]; extern Gfx gMapVenomDL[]; extern f32 D_menu_801CD818[9]; s32 D_menu_801B9090; s32 sRankInPos; s32 D_menu_801B9098; s32 D_menu_801B90A0[3]; s32 D_menu_801B90B0[3]; f32 D_menu_801B90C0[3]; f32 D_menu_801B90D0[3]; f32 D_menu_801B90E0[3]; f32 D_menu_801B90F0[3]; f32 D_menu_801B9100[3]; f32 D_menu_801B9110[3]; f32 sNameEntryLightXrot; f32 sNameEntryLightYrot; OptionId sMenuEntryState; s32 D_menu_801B9128; s32 sMainMenuState; s32 D_menu_801B9130; s32 D_menu_801B9134; s32 D_menu_801B9138; s32 D_menu_801B913C; s32 D_menu_801B9140[3]; s32 D_menu_801B914C; u8 D_menu_801B9150[3][2]; s32 D_menu_801B9158; StickInput D_menu_801B9160[3]; s32 D_menu_801B9178; // timer of some kind s32 D_menu_801B917C; // timer of some kind StickInput D_menu_801B9180; StickInput D_menu_801B9188; StickInput D_menu_801B9190; StickInput D_menu_801B9198; s32 D_menu_801B91A0; s32 sMainMenuCursor; // Position of the cursor in the main menu. s32 sVsMenuCursor; // Position of the cursor in the versus menu. s32 sExpertSoundCursor; // Whether the Expert Sound options are selected in the menu. s32 sExpertModeCursor; // Whether the Expert Main Game mode is selected in the menu. s32 D_menu_801B91B4; // Set to 0 and never used. s32 D_menu_801B91B8; bool sDrawCursor; s32 D_menu_801B91C0; s32 D_menu_801B91C4; bool sExpertModesEnabled; s32 D_menu_801B91CC; s32 D_menu_801B91D0; f32 D_menu_801B91D4; f32 D_menu_801B91D8; f32 D_menu_801B91DC; f32 D_menu_801B91E0; f32 D_menu_801B91E4; f32 D_menu_801B91E8; f32 sOkConfirmTimer; // Time before going to the next screen after confirming "OK?" in the versus menu. bool sVsSubMenuFirstState; // Whether the first sub menu option has yet to be selected f32 D_menu_801B91F4; f32 D_menu_801B91F8; f32 sRightArwingCursorYrot; f32 sLeftArwingCursorYrot; f32 sLightningXpos; f32 sLightningYpos; f32 sLightningXScale; f32 sLightningYScale; s32 D_menu_801B9214; f32 D_menu_801B9218; f32 D_menu_801B921C; f32 D_menu_801B9220; f32 sArwingLightXrot; f32 sArwingLightYrot; s32 sArwingLightColR; s32 sArwingLightColG; s32 sArwingLightColB; s32 sArwingLightAmbR; s32 sArwingLightAmbG; s32 sArwingLightAmbB; bool sMainMenuFromCancel; bool sVsSubMenuFromCancel; u8 D_menu_801B924C; StickInput D_menu_801B9250; StickInput D_menu_801B9258; StickInput D_menu_801B9260; StickInput D_menu_801B9268; f32 D_menu_801B9270[5]; s32 D_menu_801B9284; s32 D_menu_801B9288; StickInput D_menu_801B9290; f32 D_menu_801B9298[32]; s32 sSpectrumAnalyzerMode; s32 D_menu_801B931C; bool sMusicPlaying; // Music is playing status in the expert sound options extern s32 BSS_PAD_0; s32 D_menu_801B9330[2]; s32 D_menu_801B933C; s32 D_menu_801B9340; s32 D_menu_801B9348[4]; f32 D_menu_801B9358[4]; f32 D_menu_801B9368; s32 sPointConfirmTimer; f32 D_menu_801B9370; s32 sStageSelectConfirmTimer; f32 D_menu_801B9378; s32 sTimeTrialConfirmTimer; StickInput D_menu_801B9380[4]; StickInput D_menu_801B93A0[4]; u8 D_menu_801B93C4; extern s32 BSS_PAD_1; s32 sVsMenuSelection; s32 D_menu_801B93D4; s32 D_menu_801B93D8; s32 D_menu_801B93DC; bool sRanking2ndPage; s32 D_menu_801B93E4; s32 D_menu_801B93E8; s32 D_menu_801B93EC; f32 D_menu_801B93F0; f32 D_menu_801B93F4; f32 D_menu_801B93F8; StickInput D_menu_801B9400; StickInput D_menu_801B9408; #include "prevent_bss_reordering2.h" struct BssPad0 { int x; }; struct BssPad1 { int x; }; // struct BssPad2 {int x;}; // struct BssPad3 {int x;}; // struct BssPad4 {int x;}; extern s32 BSS_PAD_2; f32 sOptionCardPosY[] = { 60.0f, 36.0f, 12.0f, -12.0f, -36.0f, -60.0f }; f32 sOptionCardTextPosX[] = { 124.0f, 118.0f, 145.0f, 125.0f, 133.0f, 118.0f }; f32 sOptionCardTextPosY[] = { 54.0f, 78.0f, 103.0f, 126.0f, 151.0f, 175.0f }; f32 sOptionCardCurTextPosX[] = { 124.0f, 118.0f, 145.0f, 125.0f, 133.0f, 118.0f }; f32 sOptionCardCurTextPosY[] = { 54.0f, 78.0f, 103.0f, 126.0f, 151.0f, 175.0f }; f32 D_menu_801AE5E8[] = { 124.0f, 125.0f }; f32 D_menu_801AE5F0[] = { 54.0f, 55.0f }; f32 D_menu_801AE5F8[] = { 133.0f, 125.0f }; f32 D_menu_801AE600[] = { 151.0f, 151.0f }; f32 D_menu_801AE608[] = { 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f }; f32 D_menu_801AE620[] = { 1.9f, 2.4f, 0.9f, 1.9f, 1.8f, 2.4f }; OptionEntry sOptionCardList[] = { { { 0, 0, aMainGameCardTex, 0, 72, 12, 126.0f, 46.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, 30.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, 27.0f, 80.0f }, 1, 1, }, { { 0, 0, aTrainingCardTex, 0, 80, 12, 126.0f, 184.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, 18.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, 16.0f, 80.0f }, 1, 1, }, { { 0, 0, aVsCardTex, 0, 32, 10, 126.0f, 184.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, 6.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, 6.0f, 80.0f }, 1, 1, }, { { 0, 0, aRankingCardTex, 0, 64, 12, 110.0f, 91.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, -6.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, -5.0f, 80.0f }, 1, 1, }, { { 0, 0, aSoundCardTex, 0, 64, 10, 110.0f, 116.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, -18.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, -16.0f, 80.0f }, 1, 1, }, { { 0, 0, aDataCardTex, 0, 80, 10, 126.0f, 184.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, -30.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, -27.0f, 80.0f }, 1, 1, }, }; OptionEntry sOptionVSCardList[] = { { { 0, 0, aVsPointMatchCardTex, 0, 96, 13, 110.0f, 91.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, 11.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, 11.0f, 80.0f }, 1, 1, }, { { 0, 0, aVsBattleRoyalCardTex, 0, 96, 10, 110.0f, 116.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, 0.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, 0.0f, 80.0f }, 1, 1, }, { { 0, 0, aVsTimeTrialCardTex, 0, 96, 10, 110.0f, 138.0f, 1.0f, 1.0f, 20, 0, 75, 255 }, { 0.0f, -11.0f, -130.0f, 0.2f, 0.11f }, { -40.0f, -11.0f, 80.0f }, 1, 1, }, }; u8 sSoundMode[] = { SOUNDMODE_STEREO, SOUNDMODE_MONO, SOUNDMODE_HEADSET }; u8 D_menu_801AE99C[] = { 0, 1, 2 }; f32 D_menu_801AE9A0[4] = { 62.0f, 222.0f, 75.0f, 235.0f }; f32 D_menu_801AE9B0[4] = { 43.0f, 43.0f, 46.0f, 46.0f }; OptionCardTexture D_menu_801AE9C0[4] = { { 2, 0, aSpeakerTex, aSpeakerTLUT, 32, 32, 56.0f, 175.0f, 1.0f, 1.0f, 255, 255, 255, 255 }, { 2, 0, aSpeakerTex, aSpeakerTLUT, 32, 32, 216.0f, 175.0f, 1.0f, 1.0f, 255, 255, 255, 255 }, { 1, 0, aSpeakerCenterTex, aSpeakerCenterTLUT, 16, 16, 69.0f, 178.0f, 1.0f, 1.0f, 255, 255, 255, 255 }, { 1, 0, aSpeakerCenterTex, aSpeakerCenterTLUT, 16, 16, 229.0f, 178.0f, 1.0f, 1.0f, 255, 255, 255, 255 }, }; OptionCardTexture D_menu_801AEAA0[3] = { { 3, 0, aSliderFrameTex, 0, 104, 10, 151.0f, 135.0f, 1.05f, 1.0f, 255, 255, 255, 255 }, { 3, 0, aSliderFrameTex, 0, 104, 10, 151.0f, 161.0f, 1.05f, 1.0f, 255, 255, 255, 255 }, { 3, 0, aSliderFrameTex, 0, 104, 10, 151.0f, 188.0f, 1.05f, 1.0f, 255, 255, 255, 255 }, }; OptionCardTexture D_menu_801AEB48[3] = { { 3, 0, aSliderTex, 0, 16, 16, 245.0f, 132.0f, 1.0f, 1.0f, 255, 255, 255, 255 }, { 3, 0, aSliderTex, 0, 16, 16, 245.0f, 158.0f, 1.0f, 1.0f, 255, 255, 255, 255 }, { 3, 0, aSliderTex, 0, 16, 16, 245.0f, 185.0f, 1.0f, 1.0f, 255, 255, 255, 255 }, }; Vtx D_menu_801AEBF0[] = { { 1, 1, 0, 0, 0, 0, 255, 255, 255, 255 }, { -1, 1, 0, 0, 0, 0, 255, 255, 255, 255 }, { -1, 0, 0, 0, 0, 0, 255, 255, 255, 255 }, { 1, 0, 0, 0, 0, 0, 255, 255, 255, 255 }, }; Gfx D_menu_801AEC30[] = { gsSPVertex(D_menu_801AEBF0, 4, 0), gsSP1Quadrangle(1, 2, 3, 0, 0), gsSPEndDisplayList(), }; Vtx D_menu_801AEC48[] = { { 1, 0, 0, 0, 0, 0, 255, 255, 255, 255 }, { -1, 0, 0, 0, 0, 0, 255, 255, 255, 255 }, { -1, -1, 0, 0, 0, 0, 255, 255, 255, 255 }, { 1, -1, 0, 0, 0, 0, 255, 255, 255, 255 }, }; Gfx D_menu_801AEC88[] = { gsSPVertex(D_menu_801AEC48, 4, 0), gsSP1Quadrangle(1, 2, 3, 0, 0), gsSPEndDisplayList(), }; Vtx D_menu_801AECA0[] = { { 1, 1, 0, 0, 0, 0, 255, 255, 255, 255 }, { -1, 1, 0, 0, 0, 0, 255, 255, 255, 255 }, { -1, -1, 0, 0, 0, 0, 255, 255, 255, 255 }, { 1, -1, 0, 0, 0, 0, 255, 255, 255, 255 }, }; Gfx D_menu_801AECE0[] = { gsSPVertex(D_menu_801AECA0, 4, 0), gsSP1Quadrangle(1, 2, 3, 0, 0), gsSPEndDisplayList(), }; u8* D_menu_801AECF8[10] = { aLargeText_0, aLargeText_1, aLargeText_2, aLargeText_3, aLargeText_4, aLargeText_5, aLargeText_6, aLargeText_7, aLargeText_8, aLargeText_9, }; f32 D_menu_801AED20[2] = { 255.0f, 255.0f }; // TF is this? seems unused s32 D_menu_801AED28[] = { /* EE73E8 801AED28 00000038 */ 56, /* EE73EC 801AED2C 00000043 */ 67, /* EE73F0 801AED30 0000004E */ 78, /* EE73F4 801AED34 00000059 */ 89, /* EE73F8 801AED38 0000005B */ 91, }; s32 D_menu_801AED3C[4] = { 0, 0, 0, 0 }; RouteColoredLine sRouteColoredLine[24] = { { 9, 0, 0 }, { 0, 12, 0 }, { 12, 4, 0 }, { 4, 10, 0 }, { 10, 2, 0 }, { 6, 4, 0 }, { 7, 2, 0 }, { 3, 2, 0 }, { 2, 14, 0 }, { 5, 6, 1 }, { 6, 13, 1 }, { 13, 7, 1 }, { 4, 7, 1 }, { 12, 13, 1 }, { 8, 7, 1 }, { 9, 5, 2 }, { 5, 11, 2 }, { 11, 8, 2 }, { 8, 3, 2 }, { 3, 1, 2 }, { 7, 1, 2 }, { 1, 14, 2 }, { 0, 6, 3 }, { 4, 3, 4 }, }; Gfx* D_menu_801AEE6C[16] = { aMapMeteorDL, aMapArea6DL, aMapBolseDL, aMapSectorZDL, aMapSectorXDL, aMapSectorYDL, gMapKatinaDL, gMapMacbethDL, gMapZonessDL, gMapCorneriaDL, gMapTitaniaDL, gMapAquasDL, gMapFortunaDL, aMapSolarDL, gMapVenomDL, gMapVenomDL, }; char* D_menu_801AEEAC[] = { "ME", "A6", "BO", "SZ", "SX", "SY", "KA", "MA", "ZO", "CO", "TI", "AQ", "FO", "SO", "VE", "VE", }; s32 PAD_menu_801AEEEC = 0; Vtx D_menu_801AEEF0[] = { { -11, -11, 0, 0, 0, 255, 0, 0, 0, 0 }, { 11, -11, 0, 0, 255, 255, 0, 0, 0, 0 }, { 11, 11, 0, 0, 255, 0, 0, 0, 0, 0 }, { -11, 11, 0, 0, 0, 0, 0, 0, 0, 0 }, }; Gfx D_menu_801AEF30[] = { gsSPVertex(D_menu_801AEEF0, 4, 0), gsSP1Triangle(0, 1, 2, 0), gsSP1Triangle(0, 2, 3, 0), gsSPEndDisplayList(), }; s32 PAD_menu_801AEF50[] = { 0, 0, 0 }; char sCharMap[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789."; f32 D_menu_801AEF84[] = { 24.0f, 0.0f, -24.0f }; f32 D_menu_801AEF90[] = { 111.0f, 112.0f, 121.0f }; f32 D_menu_801AEF9C[] = { 89.0f, 115.0f, 139.0f }; void Option_Setup(void) { bool enableExpertModes; bool playedExpertMode; s32 i; #if MODS_LEVEL_SELECT == 1 for (i = 0; i < ARRAY_COUNT(gSaveFile.save.data.planet); i++) { gSaveFile.save.data.planet[i].expertClear = 1; gSaveFile.save.data.planet[i].normalClear = 1; gSaveFile.save.data.planet[i].normalMedal = 1; gSaveFile.save.data.planet[i].expertMedal = 1; gSaveFile.save.data.planet[i].played = 1; } Save_Write(); #endif gVIsPerFrame = 2; sOptionCardList[OPTION_MAP].tex.texture = aMainGameCardTex; sOptionCardList[OPTION_MAP].tex.width = 72; sOptionCardList[OPTION_MAP].tex.height = 12; sOptionCardList[OPTION_SOUND].tex.texture = aSoundCardTex; sOptionCardList[OPTION_SOUND].tex.width = 64; sOptionCardList[OPTION_SOUND].tex.height = 10; for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { sOptionCardCurTextPosX[i] = sOptionCardTextPosX[i]; sOptionCardCurTextPosY[i] = sOptionCardTextPosY[i]; } enableExpertModes = true; for (i = 0; i < ARRAY_COUNT(gSaveFile.save.data.planet); i++) { if (i == SAVE_SLOT_VENOM_1) { continue; } if (!(gSaveFile.save.data.planet[i].normalMedal & 1)) { if (CVarGetInteger("gLevelSelector", 0) || CVarGetInteger("gSfxJukebox", 0)) { enableExpertModes = true; } else { enableExpertModes = false; } break; } } sExpertModesEnabled = enableExpertModes; gFillScreenRed = 0; gFillScreenGreen = 0; gFillScreenBlue = 0; gFillScreenAlpha = 0; gBlurAlpha = 255; gBgColor = 0; sMainMenuCursor = OPTION_MAP; if ((gLastGameState == GSTATE_PLAY) && (gCurrentLevel == LEVEL_TRAINING)) { gLastGameState = GSTATE_NONE; sMainMenuCursor = OPTION_TRAINING; } sVsMenuCursor = 0; sExpertSoundCursor = 0; sExpertModeCursor = 0; playedExpertMode = gExpertMode; gExpertMode = false; gGameFrameCount = 0; sWipeHeight = 0; D_menu_801B9178 = 0; D_menu_801B917C = 0; sMenuEntryState = OPTION_MAIN_MENU; if ((gLastGameState == GSTATE_GAME_OVER) || (gLastGameState == GSTATE_ENDING)) { if (gLastGameState == GSTATE_ENDING) { gMissionPlanet[gMissionNumber] = PLANET_VENOM; if (gLeveLClearStatus[LEVEL_VENOM_ANDROSS] == 1) { gSaveFile.save.data.planet[SAVE_SLOT_VENOM_1].played = 1; if (playedExpertMode) { gSaveFile.save.data.planet[SAVE_SLOT_VENOM_1].expertClear = 1; } else { gSaveFile.save.data.planet[SAVE_SLOT_VENOM_1].normalClear = 1; } Save_Write(); } else if (gLeveLClearStatus[LEVEL_VENOM_ANDROSS] == 2) { gMissionMedal[gMissionNumber] = 1; gSaveFile.save.data.planet[SAVE_SLOT_VENOM_2].played = 1; if (playedExpertMode) { gSaveFile.save.data.planet[SAVE_SLOT_VENOM_2].expertClear = 1; gSaveFile.save.data.planet[SAVE_SLOT_VENOM_2].expertMedal = 1; } else { gSaveFile.save.data.planet[SAVE_SLOT_VENOM_2].normalClear = 1; gSaveFile.save.data.planet[SAVE_SLOT_VENOM_2].normalMedal = 1; } Save_Write(); } } Title_GetRankTotalHits(); sRankInPos = Option_RankInPos_Check(); if (sRankInPos != -1) { sMenuEntryState = OPTION_NAME_ENTRY; } else { sMenuEntryState = OPTION_SCORE; } } else if (D_game_800D2870) { sMainMenuCursor = OPTION_VERSUS; sVsMenuCursor = gVsMatchType; for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { if (i == OPTION_VERSUS) { continue; } sOptionCardList[i].frame.xScale = 0.01f; sOptionCardList[i].frame.yScale = 0.21f; sOptionCardList[i].frame.y = sOptionCardPosY[i]; sOptionCardList[i].frame.x = 0.0f; sOptionCardList[i].frame.z = 0.0f; sOptionCardList[i].drawFrame = false; sOptionCardList[i].tex.xScale = 0.01f; sOptionCardList[i].tex.yScale = 1.0f; sOptionCardList[i].tex.xPos = 158.0f; sOptionCardList[i].tex.yPos = sOptionCardCurTextPosY[i]; sOptionCardList[i].drawTex = false; } sOptionCardList[OPTION_VERSUS].frame.x = 0.0f; sOptionCardList[OPTION_VERSUS].frame.z = 0.0f; sOptionCardList[OPTION_VERSUS].frame.y = 90.0f; sOptionCardList[OPTION_VERSUS].frame.xScale = 0.4f; sOptionCardList[OPTION_VERSUS].frame.yScale = 0.21f; sOptionCardList[OPTION_VERSUS].drawFrame = true; sOptionCardList[OPTION_VERSUS].tex.xScale = 1.0f; sOptionCardList[OPTION_VERSUS].tex.yScale = 1.0f; sOptionCardList[OPTION_VERSUS].tex.xPos = 145.0f; sOptionCardList[OPTION_VERSUS].tex.yPos = 25.0f; sOptionCardList[OPTION_VERSUS].drawTex = true; sMenuEntryState = OPTION_VERSUS; } else { sMenuEntryState = OPTION_MAIN_MENU; } sMainMenuState = 0; D_menu_801B9134 = 0; D_menu_801B913C = 0; gOptionMenuStatus = OPTION_UPDATE; Memory_FreeAll(); gStarfieldX = SCREEN_WIDTH; gStarfieldY = SCREEN_HEIGHT; Play_GenerateStarfield(); gCsCamEyeX = 0.0f; gCsCamEyeY = 0.0f; gCsCamEyeZ = 10.0f; gCsCamAtX = 0.0f; gCsCamAtY = 0.0f; gCsCamAtZ = 0.0f; sArwingLightXrot = -80.0f; sArwingLightYrot = 0.0f; sArwingLightColR = 225; sArwingLightColG = 225; sArwingLightColB = 225; sArwingLightAmbR = 30; sArwingLightAmbG = 30; sArwingLightAmbB = 30; D_menu_801B91F8 = 0.1f; D_menu_801B91F4 = -130.0f; sRightArwingCursorYrot = 0.0f; sLeftArwingCursorYrot = 0.0f; sOkConfirmTimer = 0; sMainMenuFromCancel = false; sVsSubMenuFromCancel = false; AUDIO_PLAY_BGM(NA_BGM_SELECT); } void Option_Main(void) { #if 0 // Docs debug { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); Graphics_DisplaySmallNumber(80, 220, sVsSubMenuFromCancel); } #endif if (D_menu_801B9178 > 0) { D_menu_801B9178--; } if (D_menu_801B917C > 0) { D_menu_801B917C--; } switch (gOptionMenuStatus) { case OPTION_WAIT: if (gNextGameStateTimer == 0) { gOptionMenuStatus = OPTION_SETUP; AUDIO_SET_SPEC(SFXCHAN_0, AUDIOSPEC_23); } break; case OPTION_SETUP: gDrawMode = DRAW_NONE; Option_Setup(); break; case OPTION_UPDATE: gDrawMode = DRAW_OPTION; Option_Entry_Update(); break; } gGameFrameCount++; } void Option_Entry_Update(void) { switch (sMenuEntryState) { case OPTION_MAIN_MENU: Option_MainMenu_Update(); break; case OPTION_MAP: Option_Map_Update(); break; case OPTION_TRAINING: Option_Training_Update(); break; case OPTION_VERSUS: Option_Versus_Update(); break; case OPTION_RANKING: Option_Ranking_Update(); break; case OPTION_SOUND: Option_Sound_Update(); break; case OPTION_DATA: Option_Data_Update(); break; case OPTION_EXPERT_SOUND: Option_ExpertSound_Update(); break; case OPTION_VERSUS_STAGE: Option_VersusStage_Update(); break; case OPTION_POINT_MATCH: case OPTION_BR_MATCH: case OPTION_TT_MATCH: Option_VersusMenu_Update(); break; case OPTION_NAME_ENTRY: Option_NameEntry_Update(); break; case OPTION_SCORE: Option_Score_Update(); break; case OPTION_INVOICE: Option_Invoice_Update(); break; } if (sDrawCursor) { sRightArwingCursorYrot += 3.8f; sLeftArwingCursorYrot += 4.2f; } } void Option_Entry_Draw(void) { switch (sMenuEntryState) { case OPTION_MAIN_MENU: Option_MainMenu_Draw(); break; case OPTION_VERSUS: Option_Versus_Draw(); break; case OPTION_RANKING: Option_Ranking_Draw(); break; case OPTION_SOUND: Option_Sound_Draw(); break; case OPTION_EXPERT_SOUND: Option_ExpertSound_Draw(); break; case OPTION_DATA: Option_Data_Draw(); break; case OPTION_VERSUS_STAGE: Option_VersusStage_Draw(); break; case OPTION_POINT_MATCH: case OPTION_BR_MATCH: case OPTION_TT_MATCH: Option_VersusMenu_Draw(); break; case OPTION_NAME_ENTRY: Option_NameEntry_Draw(); break; case OPTION_SCORE: Option_Score_Draw(); break; case OPTION_INVOICE: Option_InvoiceDraw(); break; } if (sLevelStartState) { Option_Menu_Push(); Wipe_Draw(WIPE_VERTICAL, sWipeHeight); Matrix_Pop(&gGfxMatrix); } } void Option_Entry_Setup(void) { gBlurAlpha = 255; sMainMenuState = 0; switch (sMenuEntryState) { case OPTION_MAP: gDrawMode = DRAW_NONE; break; case OPTION_POINT_MATCH: case OPTION_BR_MATCH: case OPTION_TT_MATCH: Option_VersusMenu_Setup(); break; case OPTION_VERSUS_STAGE: Option_VersusStage_Setup(); break; case OPTION_RANKING: Option_Ranking_Setup(); break; case OPTION_SOUND: Option_Sound_Setup(); break; case OPTION_EXPERT_SOUND: Option_ExpertSound_Setup(); break; case OPTION_DATA: Option_Data_Setup(); break; } } // Initialize the Planet textures before any drawing occurs void Option_PlanetTextures_Setup(void) { s32 i; D_menu_801B93E8 = 0; D_menu_801B93EC = 0; for (i = 0; i < (96 * 96); i++) { // Planet Textures gMapCorneriaTex[i] = 106; gMapFortunaTex[i] = 84; gMapAquasTex[i] = 75; gMapVenomTex[i] = 81; gMapTitaniaTex[i] = 55; gMapKatinaTex[i] = 82; gMapMacbethTex[i] = 68; gMapZonessTex[i] = 52; gMapVenomCloudTex[i] = 0; } for (i = 0; i < ARRAY_COUNT(gBSSMapPlanetTextures); i++) { D_menu_801CD818[i] = 0.0f; Map_Texture_Sphere(gBSSMapPlanetTextures[i], SEGMENTED_TO_VIRTUAL(gAssetMapPlanetTextures[i]), &D_menu_801CD818[i]); } } void Option_ScrollPlanetTexture(void) { if (D_menu_801B93E8 == 5) { Map_Texture_Sphere(gBSSMapPlanetTextures[8], SEGMENTED_TO_VIRTUAL(gAssetMapPlanetTextures[8]), &D_menu_801CD818[8]); D_menu_801B93E8 = 0; } else { D_menu_801B93E8++; } Map_Texture_Sphere(gBSSMapPlanetTextures[D_menu_801B93EC * 2], SEGMENTED_TO_VIRTUAL(gAssetMapPlanetTextures[D_menu_801B93EC * 2]), &D_menu_801CD818[D_menu_801B93EC * 2]); Map_Texture_Sphere(gBSSMapPlanetTextures[(D_menu_801B93EC * 2) + 1], SEGMENTED_TO_VIRTUAL(gAssetMapPlanetTextures[(D_menu_801B93EC * 2) + 1]), &D_menu_801CD818[(D_menu_801B93EC * 2) + 1]); D_menu_801B93EC++; if (D_menu_801B93EC >= 4) { D_menu_801B93EC = 0; } } void Option_Map_Update(void) { if (gFillScreenAlpha == 255) { gStarCount = 0; sMenuEntryState = 100; gGameState = GSTATE_MAP; gNextGameStateTimer = 2; gMapState = 0; gDrawMode = DRAW_NONE; gControllerLock = 3; } else { gFillScreenAlpha += 32; if (gFillScreenAlpha > 255) { gFillScreenAlpha = 255; } } } void Option_Training_Update(void) { if (gFillScreenAlpha == 255) { gCurrentLevel = LEVEL_TRAINING; gGameState = GSTATE_PLAY; gNextGameStateTimer = 2; gPlayState = PLAY_STANDBY; gDrawMode = DRAW_NONE; Play_Setup(); gSavedObjectLoadIndex = 0; gSavedPathProgress = 0.0f; D_ctx_8017782C = true; gControllerLock = 3; AUDIO_SET_SPEC(SFXCHAN_0, AUDIOSPEC_28); } else { gFillScreenAlpha += 32; if (gFillScreenAlpha > 255) { gFillScreenAlpha = 255; } } } void Option_MainMenu_Setup(void) { s32 i; D_game_800D2870 = false; gBlurAlpha = 255; gControllerLock = 0; gStarCount = 800; sVsSubMenuFromCancel = false; if (!sMainMenuFromCancel) { sDrawCursor = true; for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { sOptionCardList[i].tex.xPos = sOptionCardCurTextPosX[i]; sOptionCardList[i].tex.yPos = sOptionCardCurTextPosY[i]; sOptionCardList[i].tex.xScale = 1.0f; sOptionCardList[i].tex.yScale = 1.0f; sOptionCardList[i].drawTex = true; sOptionCardList[i].frame.xScale = 0.4f; sOptionCardList[i].frame.yScale = 0.21f; sOptionCardList[i].frame.y = sOptionCardPosY[i]; sOptionCardList[i].frame.z = 0.0f; sOptionCardList[i].drawFrame = true; } } else { sDrawCursor = false; for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { sOptionCardList[i].tex.yScale = 1.0f; sOptionCardList[i].frame.yScale = 0.21f; sOptionCardList[i].frame.z = 0.0f; sOptionCardList[i].drawFrame = true; sOptionCardList[i].drawTex = true; } } sLightningXpos = -45.0f; D_menu_801B9214 = 0; D_menu_801B9180.unk_0 = 0; D_menu_801B9180.unk_4 = 0; D_menu_801B9190.unk_0 = 0; D_menu_801B9190.unk_4 = 0; D_menu_801B9198.unk_0 = 0; D_menu_801B9198.unk_4 = 0; } void Option_MainMenu_Update(void) { s32 i; f32 var_fs0; f32 var_fs1; switch (sMainMenuState) { case 0: Option_MainMenu_Setup(); if (!sMainMenuFromCancel) { sMainMenuState++; } else { sOptionCardCurTextPosX[0] = D_menu_801AE5E8[sExpertModeCursor]; sOptionCardCurTextPosY[0] = D_menu_801AE5F0[sExpertModeCursor]; sOptionCardCurTextPosX[4] = D_menu_801AE5F8[sExpertSoundCursor]; sOptionCardCurTextPosY[4] = D_menu_801AE600[sExpertSoundCursor]; sMainMenuState = 1000; } break; case 1000: for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { if (sOptionCardList[i].frame.xScale < 0.4f) { sOptionCardList[i].frame.xScale += 0.04f; if (sOptionCardList[i].frame.xScale > 0.4f) { sOptionCardList[i].frame.xScale = 0.4f; } } if (sOptionCardList[i].tex.xScale < 1.0f) { sOptionCardList[i].tex.xScale += 0.1f; if (sOptionCardList[i].tex.xScale > 1.0f) { sOptionCardList[i].tex.xScale = 1.0f; } } Math_SmoothStepToF(&sOptionCardList[i].tex.yPos, sOptionCardCurTextPosY[i], 0.15f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionCardList[i].frame.y, sOptionCardPosY[i], 0.15f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionCardList[i].tex.xPos, sOptionCardCurTextPosX[i], 0.2f, D_menu_801AE620[i], 0.1f); } gBlurAlpha += 4; if (sOptionCardList[sMainMenuCursor].frame.y == sOptionCardPosY[sMainMenuCursor]) { for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { sOptionCardList[i].tex.xScale = 1.0f; sOptionCardList[i].tex.xPos = sOptionCardCurTextPosX[i]; sOptionCardList[i].tex.yPos = sOptionCardCurTextPosY[i]; } sDrawCursor = true; gBlurAlpha = 255; sMainMenuState = 1; } break; case 1: // clang-format off if (Option_Input_MoveCursor_Y(&sMainMenuCursor, ARRAY_COUNT(sOptionCardList) - 1, 1, 0, 20, 5, 4, gMainController, &D_menu_801B9180)) { \ AUDIO_PLAY_SFX(NA_SE_ARWING_CURSOR, gDefaultSfxSource, 4); } // clang-format on if ((sMainMenuCursor == OPTION_MAP) && sExpertModesEnabled && Option_Input_MoveCursor_Y(&sExpertModeCursor, 1, 0, 0, 20, 5, 4, gMainController, &D_menu_801B9190)) { AUDIO_PLAY_SFX(NA_SE_ARWING_CURSOR, gDefaultSfxSource, 4); if (sExpertModeCursor) { sOptionCardList[OPTION_MAP].tex.texture = aExpertCardTex; sOptionCardList[OPTION_MAP].tex.width = 80; sOptionCardList[OPTION_MAP].tex.height = 12; sOptionCardList[OPTION_MAP].tex.xPos = 125.0f; sOptionCardList[OPTION_MAP].tex.yPos = 55.0f; } else { sOptionCardList[OPTION_MAP].tex.texture = aMainGameCardTex; sOptionCardList[OPTION_MAP].tex.width = 72; sOptionCardList[OPTION_MAP].tex.height = 12; sOptionCardList[OPTION_MAP].tex.xPos = 124.0f; sOptionCardList[OPTION_MAP].tex.yPos = 54.0f; } gExpertMode = sExpertModeCursor; } if ((sMainMenuCursor == OPTION_SOUND) && sExpertModesEnabled && Option_Input_MoveCursor_Y(&sExpertSoundCursor, 1, 0, 0, 20, 5, 4, gMainController, &D_menu_801B9198)) { AUDIO_PLAY_SFX(NA_SE_ARWING_CURSOR, gDefaultSfxSource, 4); if (sExpertSoundCursor) { sOptionCardList[OPTION_SOUND].tex.texture = aExpertCardTex; sOptionCardList[OPTION_SOUND].tex.width = 80; sOptionCardList[OPTION_SOUND].tex.height = 12; sOptionCardList[OPTION_SOUND].tex.xPos = 125.0f; sOptionCardList[OPTION_SOUND].tex.yPos = 151.0f; } else { sOptionCardList[OPTION_SOUND].tex.texture = aSoundCardTex; sOptionCardList[OPTION_SOUND].tex.width = 64; sOptionCardList[OPTION_SOUND].tex.height = 10; sOptionCardList[OPTION_SOUND].tex.xPos = 133.0f; sOptionCardList[OPTION_SOUND].tex.yPos = 151.0f; } } if (gControllerPress[gMainController].button & (A_BUTTON | START_BUTTON)) { AUDIO_PLAY_SFX(NA_SE_ARWING_DECIDE, gDefaultSfxSource, 4); sLightningYpos = sOptionCardPosY[sMainMenuCursor]; sDrawCursor = false; sMainMenuState = 11; } if (gControllerPress[gMainController].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); sWipeHeight = 0; sLevelStartState = 1; sMainMenuState = 100; } break; case 11: gBlurAlpha = 16; D_menu_801B9178 = 3; sOptionCardList[sMainMenuCursor].frame.xScale -= 0.01f; sOptionCardList[sMainMenuCursor].frame.yScale -= 0.01f; sOptionCardList[sMainMenuCursor].tex.xScale -= 0.1f; sOptionCardList[sMainMenuCursor].tex.yScale -= 0.1f; sOptionCardList[sMainMenuCursor].tex.xPos += 4.0f; D_menu_801B917C = 3; sMainMenuState++; break; case 12: if (D_menu_801B9178 == 1) { sOptionCardList[sMainMenuCursor].frame.xScale += 0.01f; sOptionCardList[sMainMenuCursor].frame.yScale += 0.01f; sOptionCardList[sMainMenuCursor].tex.xScale += 0.1f; sOptionCardList[sMainMenuCursor].tex.yScale += 0.1f; sOptionCardList[sMainMenuCursor].tex.xPos -= 4.0f; D_menu_801B9214 = 1; } for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { if (i == sMainMenuCursor) { continue; } if (sOptionCardList[i].frame.xScale > 0.01f) { sOptionCardList[i].frame.xScale -= 0.05f; sOptionCardList[i].tex.xScale -= 0.19f; Math_SmoothStepToF(&sOptionCardList[i].tex.xPos, 158.0f, 0.2f, D_menu_801AE608[i], 0.1f); } else { sOptionCardList[i].drawFrame = false; sOptionCardList[i].drawTex = false; } } if (D_menu_801B917C == 0) { var_fs0 = 25.0f; var_fs1 = 90.0f; if ((sMainMenuCursor == OPTION_MAP) || (sMainMenuCursor == OPTION_TRAINING)) { var_fs0 = 0.0f; var_fs1 = 120.0f; } Math_SmoothStepToF(&sOptionCardList[sMainMenuCursor].tex.yPos, var_fs0, 0.25f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionCardList[sMainMenuCursor].frame.y, var_fs1, 0.25f, 100.0f, 0.1f); gBlurAlpha += 4; if ((sOptionCardList[sMainMenuCursor].tex.yPos == var_fs0) && (sOptionCardList[sMainMenuCursor].frame.y == var_fs1)) { gBlurAlpha += 255; sMenuEntryState = sMainMenuCursor; if ((sMainMenuCursor == OPTION_SOUND) && sExpertSoundCursor) { sMenuEntryState = OPTION_EXPERT_SOUND; } Option_Entry_Setup(); } } break; case 100: if (sWipeHeight < 120) { sWipeHeight += 18; } else { gStarCount = 0; gGameState = GSTATE_TITLE; gNextGameStateTimer = 2; gTitleState = 0; gGoToTitle = true; gDrawMode = DRAW_NONE; sLevelStartState = 0; sWipeHeight = 0; gControllerLock = 3; } break; } } void Option_MainMenu_Draw(void) { s32 i; Option_Menu_Push(); for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { if (sOptionCardList[i].drawFrame) { Option_DrawMenuCard(sOptionCardList[i].frame); } } Option_DrawMenuArwing(sOptionCardList[sMainMenuCursor].pos); Matrix_Pop(&gGfxMatrix); for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { if (!(sOptionCardList[i].drawTex) || (sOptionCardList[i].tex.xScale) <= 0.0f) { continue; } if ((i == 0) && sExpertModesEnabled && ((sMainMenuState == 0) || (sMainMenuState == 1))) { Option_VsSelectionArrows_Draw(106.0f, 56.0f, 98.0f, 20, 0, 75); } if ((i == 4) && sExpertModesEnabled && ((sMainMenuState == 0) || (sMainMenuState == 1))) { Option_VsSelectionArrows_Draw(106.0f, 152.0f, 98.0f, 20, 0, 75); } Option_DrawCardLabel(sOptionCardList[i].tex); } Option_CardLightning_Update(); } void Option_Versus_Setup(void) { s32 i; gBlurAlpha = 255; gControllerLock = 0; gStarCount = 800; if (!sVsSubMenuFromCancel) { sDrawCursor = true; for (i = 0; i < ARRAY_COUNT(sOptionVSCardList); i++) { sOptionVSCardList[i].tex.xPos = D_menu_801AEF90[i]; sOptionVSCardList[i].tex.yPos = D_menu_801AEF9C[i]; sOptionVSCardList[i].tex.xScale = 1.0f; sOptionVSCardList[i].tex.yScale = 1.0f; sOptionVSCardList[i].drawTex = true; sOptionVSCardList[i].frame.xScale = 0.4f; sOptionVSCardList[i].frame.yScale = 0.21f; sOptionVSCardList[i].frame.y = D_menu_801AEF84[i]; sOptionVSCardList[i].frame.z = 0.0f; sOptionVSCardList[i].drawFrame = true; } } else { sDrawCursor = false; for (i = 0; i < ARRAY_COUNT(sOptionVSCardList); i++) { sOptionVSCardList[i].tex.yScale = 1.0f; sOptionVSCardList[i].frame.yScale = 0.21f; sOptionVSCardList[i].frame.z = 0.0f; sOptionVSCardList[i].drawTex = true; sOptionVSCardList[i].drawFrame = true; } } sLightningXpos = -45.0f; D_menu_801B9214 = 0; D_menu_801B9188.unk_0 = 0; D_menu_801B9188.unk_4 = 0; } void Option_Versus_Update(void) { f32 var_fs0; s32 i; switch (sMainMenuState) { case 0: Option_Versus_Setup(); if (!sVsSubMenuFromCancel) { sMainMenuState++; } else { sMainMenuState = 1000; } break; case 1000: for (i = 0; i < ARRAY_COUNT(sOptionVSCardList); i++) { if (sOptionVSCardList[i].frame.xScale < 0.4f) { sOptionVSCardList[i].frame.xScale += 0.04f; if (sOptionVSCardList[i].frame.xScale > 0.4f) { sOptionVSCardList[i].frame.xScale = 0.4f; } } if (sOptionVSCardList[i].tex.xScale < 1.0f) { sOptionVSCardList[i].tex.xScale += 0.15f; if (sOptionVSCardList[i].tex.xScale > 1.0f) { sOptionVSCardList[i].tex.xScale = 1.0f; } } Math_SmoothStepToF(&sOptionVSCardList[i].frame.y, D_menu_801AEF84[i], 0.15f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionVSCardList[i].tex.xPos, D_menu_801AEF90[i], 0.2f, 3.1f, 0.1f); Math_SmoothStepToF(&sOptionVSCardList[i].tex.yPos, D_menu_801AEF9C[i], 0.15f, 100.0f, 0.1f); } Math_SmoothStepToF(&sOptionCardList[sMainMenuCursor].tex.yPos, 25.0f, 0.25f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionCardList[sMainMenuCursor].frame.y, 90.0f, 0.25f, 100.0f, 0.1f); gBlurAlpha += 4; if (sOptionVSCardList[sVsMenuCursor].frame.y == D_menu_801AEF84[sVsMenuCursor]) { for (i = 0; i < ARRAY_COUNT(sOptionVSCardList); i++) { sOptionVSCardList[i].tex.xScale = 1.0f; sOptionVSCardList[i].tex.yPos = D_menu_801AEF9C[i]; sOptionVSCardList[i].tex.xPos = D_menu_801AEF90[i]; } sOptionCardList[sMainMenuCursor].tex.yPos = 25.0f; sOptionCardList[sMainMenuCursor].frame.y = 90.0f; sDrawCursor = true; gBlurAlpha = 255; sMainMenuState = 1; } break; case 1: // clang-format off if (Option_Input_MoveCursor_Y(&sVsMenuCursor, 2, 1, 0, 20, 5, 4, gMainController, &D_menu_801B9188)) {\ AUDIO_PLAY_SFX(NA_SE_ARWING_CURSOR, gDefaultSfxSource, 4);\ } // clang-format on if (gControllerPress[gMainController].button & (A_BUTTON | START_BUTTON)) { AUDIO_PLAY_SFX(NA_SE_ARWING_DECIDE, gDefaultSfxSource, 4); sLightningYpos = D_menu_801AEF84[sVsMenuCursor]; sDrawCursor = false; sMainMenuState = 11; } if (gControllerPress[gMainController].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); sMainMenuState = 0; sMenuEntryState = OPTION_MAIN_MENU; gDrawMode = DRAW_NONE; sMainMenuFromCancel = true; } break; case 11: gBlurAlpha = 16; D_menu_801B9178 = 5; sOptionVSCardList[sVsMenuCursor].frame.xScale -= 0.01f; sOptionVSCardList[sVsMenuCursor].frame.yScale -= 0.01f; sOptionVSCardList[sVsMenuCursor].tex.xScale -= 0.1f; sOptionVSCardList[sVsMenuCursor].tex.yScale -= 0.1f; sOptionVSCardList[sVsMenuCursor].tex.xPos += 4.0f; D_menu_801B917C = 5; sMainMenuState++; break; case 12: if (D_menu_801B9178 == 1) { sOptionVSCardList[sVsMenuCursor].frame.xScale += 0.01f; sOptionVSCardList[sVsMenuCursor].frame.yScale += 0.01f; sOptionVSCardList[sVsMenuCursor].tex.xScale += 0.1f; sOptionVSCardList[sVsMenuCursor].tex.yScale += 0.1f; sOptionVSCardList[sVsMenuCursor].tex.xPos -= 4.0f; D_menu_801B9214 = 1; } for (i = 0; i < ARRAY_COUNT(sOptionVSCardList); i++) { if (i == sVsMenuCursor) { continue; } if (sOptionVSCardList[i].frame.xScale > 0.01f) { sOptionVSCardList[i].frame.xScale -= 0.05f; sOptionVSCardList[i].tex.xScale -= 0.19f; Math_SmoothStepToF(&sOptionVSCardList[i].tex.xPos, 158.0f, 0.2f, D_menu_801AE608[i + 1], 0.1f); } else { sOptionVSCardList[i].drawFrame = false; sOptionVSCardList[i].drawTex = false; } } if (D_menu_801B917C == 0) { if (sVsMenuCursor == 0) { var_fs0 = 129.0f; } else { var_fs0 = 131.0f; } Math_SmoothStepToF(&sOptionVSCardList[sVsMenuCursor].tex.yPos, var_fs0, 0.25f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionVSCardList[sVsMenuCursor].frame.y, -15.5f, 0.25f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionCardList[sMainMenuCursor].tex.yPos, -10.0f, 0.35f, 100.0f, 0.1f); Math_SmoothStepToF(&sOptionCardList[sMainMenuCursor].frame.y, 150.0f, 0.35f, 100.0f, 0.1f); gBlurAlpha += 4; if ((var_fs0 == sOptionVSCardList[sVsMenuCursor].tex.yPos) && (sOptionVSCardList[sVsMenuCursor].frame.y == -15.5f)) { gBlurAlpha += 255; sMenuEntryState = (sVsMenuCursor + 1) * 10; gVsMatchType = sVsMenuCursor; D_menu_801B91C4 = 1; Option_Entry_Setup(); } } break; } } void Option_Versus_Draw(void) { s32 i; Option_DrawMenuLabel(); Option_Menu_Push(); for (i = 0; i < ARRAY_COUNT(sOptionVSCardList); i++) { if (sOptionVSCardList[i].drawFrame) { Option_DrawMenuCard(sOptionVSCardList[i].frame); } } Option_DrawMenuArwing(sOptionVSCardList[sVsMenuCursor].pos); Matrix_Pop(&gGfxMatrix); for (i = 0; i < ARRAY_COUNT(sOptionVSCardList); i++) { if ((sOptionVSCardList[i].drawTex) && !(sOptionVSCardList[i].tex.xScale <= 0.0f)) { Option_DrawCardLabel(sOptionVSCardList[i].tex); } } Option_CardLightning_Update(); } void Option_Sound_Setup(void) { s32 i; gStarCount = 800; D_menu_801B91B4 = 0; D_menu_801B91B8 = 0; sDrawCursor = true; D_menu_801B91A0 = 0; gOptionSoundMode = gSaveFile.save.data.soundMode; SEQCMD_SET_SOUND_MODE(sSoundMode[gOptionSoundMode]); gVolumeSettings[AUDIO_TYPE_MUSIC] = gSaveFile.save.data.musicVolume; gVolumeSettings[AUDIO_TYPE_VOICE] = gSaveFile.save.data.voiceVolume; gVolumeSettings[AUDIO_TYPE_SFX] = gSaveFile.save.data.sfxVolume; if (gVolumeSettings[AUDIO_TYPE_MUSIC] > 99) { gVolumeSettings[AUDIO_TYPE_MUSIC] = 99; } if (gVolumeSettings[AUDIO_TYPE_VOICE] > 99) { gVolumeSettings[AUDIO_TYPE_VOICE] = 99; } if (gVolumeSettings[AUDIO_TYPE_SFX] > 99) { gVolumeSettings[AUDIO_TYPE_SFX] = 99; } Audio_SetVolume(AUDIO_TYPE_MUSIC, gVolumeSettings[AUDIO_TYPE_MUSIC]); Audio_SetVolume(AUDIO_TYPE_VOICE, gVolumeSettings[AUDIO_TYPE_VOICE]); Audio_SetVolume(AUDIO_TYPE_SFX, gVolumeSettings[AUDIO_TYPE_SFX]); D_menu_801AEB48[0].xPos = gVolumeSettings[AUDIO_TYPE_MUSIC] + 146.0f; D_menu_801AEB48[1].xPos = gVolumeSettings[AUDIO_TYPE_VOICE] + 146.0f; D_menu_801AEB48[2].xPos = gVolumeSettings[AUDIO_TYPE_SFX] + 146.0f; D_menu_801B9288 = 0; D_menu_801B9284 = 0; D_menu_801B914C = 0; D_menu_801B9158 = 0; D_menu_801B9178 = 0; D_menu_801B917C = 0; // clang-format off for (i = 0; i < ARRAY_COUNT(D_menu_801B9270); i++) { D_menu_801B9270[i] = 255.0f; } // clang-format on D_menu_801B91E4 = 255.0f; D_menu_801B9218 = 56.0f; D_menu_801B921C = -43.0f; D_menu_801B9220 = 0.0f; D_menu_801B9250.unk_0 = 0; D_menu_801B9250.unk_4 = 0; D_menu_801B9258.unk_0 = 0; D_menu_801B9258.unk_4 = 0; D_menu_801B9260.unk_0 = 0; D_menu_801B9260.unk_4 = 0; D_menu_801B9268.unk_0 = 0; D_menu_801B9268.unk_4 = 0; } void Option_Sound_Update(void) { s32 sp34 = D_menu_801B9288; if (Option_Input_MoveCursor_Y(&D_menu_801B9288, 3, 1, 0, 20, 5, 4, gMainController, &D_menu_801B9250)) { D_menu_801B9270[sp34] = 255.0f; AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); } if (D_menu_801B9288 == 0) { Option_Sound_SetSoundMode(); } else { Option_Sound_SetVolumeLevels(); } // Test sound if (gControllerPress[gMainController].button & R_TRIG) { D_menu_801B9284 ^= 1; Audio_PlaySoundTest(D_menu_801B9284); } if (gControllerPress[gMainController].button & A_BUTTON) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); D_menu_801B9288 = (D_menu_801B9288 + 1) % 4U; } if (gControllerPress[gMainController].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); if (D_menu_801B9284 == 1) { D_menu_801B9284 = 0; Audio_PlaySoundTest(D_menu_801B9284); } Save_Write(); gDrawMode = DRAW_NONE; sMenuEntryState = OPTION_MAIN_MENU; sMainMenuState = 0; sMainMenuFromCancel = true; } } void Option_Sound_SetSoundMode(void) { s32 sp3C = gOptionSoundMode; s32 pad; if (Option_Input_MoveCursor_Y(&sp3C, 2, 0, 0, 20, 5, 4, gMainController, &D_menu_801B9260)) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); gOptionSoundMode = sp3C; if (gOptionSoundMode >= OPTIONSOUND_MAX) { gOptionSoundMode = OPTIONSOUND_STEREO; } gSaveFile.save.data.soundMode = gOptionSoundMode; SEQCMD_SET_SOUND_MODE(sSoundMode[gOptionSoundMode]); } } void Option_Sound_SetVolumeLevels(void) { s32 var_v1; D_menu_801B924C = D_menu_801AE99C[D_menu_801B9288 - 1]; if (Option_Input_Sound_X(&(D_menu_801AEB48[D_menu_801B9288 - 1].xPos), 146.0f, 245.0f, &D_menu_801B9268)) { var_v1 = D_menu_801AEB48[D_menu_801B9288 - 1].xPos - 146.0f; gVolumeSettings[D_menu_801B9288 - 1] = var_v1; if (var_v1 > 99) { var_v1 = 99; } switch (D_menu_801B9288 - 1) { case 0: gSaveFile.save.data.musicVolume = var_v1; CVarSetFloat("gMainMusicVolume", var_v1 / 100.0f); break; case 1: gSaveFile.save.data.voiceVolume = var_v1; CVarSetFloat("gVoiceVolume", var_v1 / 100.0f); break; case 2: gSaveFile.save.data.sfxVolume = var_v1; CVarSetFloat("gSFXMusicVolume", var_v1 / 100.0f); break; } Audio_SetVolume(D_menu_801B924C, var_v1); } } void Option_Sound_Draw(void) { s32 i; s32 colorGB; static f32 D_menu_801AEFA8[11] = { 48.0f, 103.0f, 77.0f, 55.0f, 71.0f, 87.0f, 143.0f, 244.0f, 169.0f, 170.0f, 157.0f }; static f32 D_menu_801AEFD4[11] = { 79.0f, 52.0f, 99.0f, 131.0f, 157.0f, 186.0f, 102.0f, 102.0f, 98.0f, 99.0f, 98.0f }; static f32 D_menu_801AF000 = 27.5f; Option_DrawMenuLabel(); Option_Sound_Speaker_Draw(); RCP_SetupDL(&gMasterDisp, SETUPDL_76); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_RGBA16(&gMasterDisp, aMapWhiteSquareTex, 8, 8, D_menu_801AEFA8[0], D_menu_801AEFD4[0], D_menu_801AF000, 0.2f); RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8005CD0, 112, 13, D_menu_801AEFA8[1], D_menu_801AEFD4[1], 1.0f, 1.0f); for (i = 0; i < 4; i++) { if (D_menu_801B9288 == i) { Option_Color_FlashRed(&D_menu_801B9270[i]); } else { D_menu_801B9270[i] = 255.0f; } } colorGB = D_menu_801B9270[0]; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8006280, 48, 13, D_menu_801AEFA8[2], D_menu_801AEFD4[2], 1.0f, 1.0f); colorGB = D_menu_801B9270[1]; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_80064F0, 88, 14, D_menu_801AEFA8[3], D_menu_801AEFD4[3], 1.0f, 1.0f); colorGB = D_menu_801B9270[2]; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_80069C0, 56, 15, D_menu_801AEFA8[4], D_menu_801AEFD4[4], 1.0f, 1.0f); colorGB = D_menu_801B9270[3]; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8006D10, 24, 13, D_menu_801AEFA8[5], D_menu_801AEFD4[5], 1.0f, 1.0f); if (D_menu_801B9288 == 0) { gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_IA8_MirX(&gMasterDisp, aArrowTex, 8, 8, D_menu_801AEFA8[6], D_menu_801AEFD4[6], 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, aArrowTex, 8, 8, D_menu_801AEFA8[7], D_menu_801AEFD4[7], 1.0f, 1.0f); } gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); switch (gOptionSoundMode) { case OPTIONSOUND_STEREO: Lib_TextureRect_IA8(&gMasterDisp, D_OPT_800CD90, 56, 13, D_menu_801AEFA8[8], D_menu_801AEFD4[8], 1.0f, 1.0f); break; case OPTIONSOUND_MONO: Lib_TextureRect_IA8(&gMasterDisp, D_OPT_80076E0, 56, 14, D_menu_801AEFA8[9], D_menu_801AEFD4[9], 1.0f, 1.0f); break; case OPTIONSOUND_HEADSET: Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8007210, 88, 14, D_menu_801AEFA8[10], D_menu_801AEFD4[10], 1.0f, 1.0f); break; } Lib_TextureRect_IA8(&gMasterDisp, aBtoCancelTex, 96, 10, 166.0f, 213.0f, 1.0f, 1.0f); for (i = 0; i < ARRAY_COUNT(D_menu_801AEAA0); i++) { Option_DrawCardLabel(D_menu_801AEAA0[i]); Option_DrawCardLabel(D_menu_801AEB48[i]); } } void Option_Sound_Speaker_Draw(void) { s32 i; if (D_menu_801B9284 == 1) { switch (D_menu_801B914C) { case 0: D_menu_801B914C++; break; case 1: if (D_menu_801B9178 != 0) { break; // looks fake, but isn't } for (i = 2; i < ARRAY_COUNT(D_menu_801AE9C0); i++) { D_menu_801AE9C0[i].xScale += 0.02f; D_menu_801AE9C0[i].yScale += 0.02f; D_menu_801AE9C0[i].xPos -= 0.1f; } D_menu_801B9178 = 2; D_menu_801B914C++; break; case 2: if (D_menu_801B9178 == 0) { for (i = 2; i < ARRAY_COUNT(D_menu_801AE9C0); i++) { D_menu_801AE9C0[i].xScale -= 0.02f; D_menu_801AE9C0[i].yScale -= 0.02f; D_menu_801AE9C0[i].xPos += 0.1f; } D_menu_801B914C++; } break; case 3: D_menu_801B9178 = RAND_INT(15.0f); D_menu_801B914C = 1; break; } switch (D_menu_801B9158) { case 0: if (D_menu_801B917C == 0) { for (i = 0; i < ARRAY_COUNT(D_menu_801AE9C0); i++) { D_menu_801AE9C0[i].xScale += 0.08f; D_menu_801AE9C0[i].yScale += 0.08f; D_menu_801AE9C0[i].xPos -= 0.4f; D_menu_801AE9C0[i].yPos -= 0.4f; } D_menu_801B917C = 2; D_menu_801B9158++; } break; case 1: if (D_menu_801B917C == 0) { for (i = 0; i < ARRAY_COUNT(D_menu_801AE9C0); i++) { D_menu_801AE9C0[i].xScale -= 0.08f; D_menu_801AE9C0[i].yScale -= 0.08f; D_menu_801AE9C0[i].xPos += 0.4f; D_menu_801AE9C0[i].yPos += 0.4f; } D_menu_801B917C = 2; D_menu_801B9158++; } break; case 2: if (D_menu_801B917C == 0) { D_menu_801B917C = RAND_INT(30.0f); D_menu_801B9158 = 0; } break; } } else { for (i = 0; i < ARRAY_COUNT(D_menu_801AE9C0); i++) { D_menu_801AE9C0[i].xScale = 1.0f; D_menu_801AE9C0[i].yScale = 1.0f; D_menu_801AE9C0[i].xPos = D_menu_801AE9A0[i]; D_menu_801AE9C0[i].yPos = D_menu_801AE9B0[i]; } } for (i = 0; i < 2; i++) { Option_DrawCardLabel(D_menu_801AE9C0[i]); } for (i = 2; i < ARRAY_COUNT(D_menu_801AE9C0); i++) { if (D_menu_801B914C != 3) { Option_DrawCardLabel(D_menu_801AE9C0[i]); } } } void Option_ExpertSound_Setup(void) { s32 i; gStarCount = 800; D_menu_801B931C = 0; D_menu_801B9290.unk_0 = 0; D_menu_801B9290.unk_4 = 0; sSpectrumAnalyzerMode = 0; sMusicPlaying = false; // clang-format off for (i = 0; i < ARRAY_COUNT(D_menu_801B9298); i++) { D_menu_801B9298[i] = 0.0f; } // clang-format on } #include "../../mods/sfxjukebox2.c" // Expert Sound Options void Option_ExpertSound_Update(void) { s32 pad; f32 sp28 = D_menu_801B931C; if (CVarGetInteger("gSfxJukebox", 0) == 1) { if (gControllerPress[gMainController].button & L_TRIG) { showJukebox ^= 1; } if (showJukebox) { Jukebox_Update(); return; } } if (Option_Input_Sound_X(&sp28, 0.0f, 49.0f, &D_menu_801B9290) != 0) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); D_menu_801B931C = sp28; } if (gControllerPress[gMainController].button & A_BUTTON) { Audio_PlaySoundTestTrack(D_menu_801B931C); sMusicPlaying = true; } if (gControllerPress[gMainController].button & B_BUTTON) { if (!sMusicPlaying) { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); AUDIO_PLAY_BGM(NA_BGM_SELECT); gDrawMode = DRAW_NONE; sMenuEntryState = OPTION_MAIN_MENU; sMainMenuState = 0; sMainMenuFromCancel = true; } else { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM, 1); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 1); sMusicPlaying = false; } } // Spectrum Analyzer mode selector if (gControllerPress[gMainController].button & R_CBUTTONS) { sSpectrumAnalyzerMode++; if (sSpectrumAnalyzerMode > 2) { sSpectrumAnalyzerMode = 0; } } } void Option_ExpertSound_Draw(void) { u8* temp_v0_4; f32 var_fs0; f32 var_fv1; s32 i; f32 r; f32 g; f32 b; static f32 D_menu_801AF004 = -125.0f; static f32 D_menu_801AF008 = 0.0f; static f32 D_menu_801AF00C = 2.0f; static f32 D_menu_801AF010 = 8.0f; static f32 D_menu_801AF014[4] = { 30.0f, 30.0f, 28.0f, 288.0f }; static f32 D_menu_801AF024[4] = { 125.0f, 197.0f, 125.0f, 125.0f }; static f32 D_menu_801AF034[4] = { 32.3f, 32.3f, 0.2f, 0.2f }; static f32 D_menu_801AF044[4] = { 0.2f, 0.2f, 9.2f, 9.2f }; static f32 D_menu_801AF054 = 255.0f; static f32 D_menu_801AF058 = 100.0f; static f32 D_menu_801AF05C = 255.0f; static f32 D_menu_801AF060 = 100.0f; static f32 D_menu_801AF064 = 255.0f; static f32 D_menu_801AF068 = 100.0f; static Gfx* D_menu_801AF06C[] = { D_menu_801AEC30, D_menu_801AEC88, D_menu_801AECE0, }; static f32 D_menu_801AF078[] = { -73.0f, -13.0f, -43.0f }; Option_DrawMenuLabel(); #if MODS_SFX_JUKEBOX == 1 if (!showJukebox) { #endif RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_80079F0, 128, 14, 49.0f, 81.0f, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, D_menu_801AECF8[D_menu_801B931C / 10], 16, 15, 230.0f, 82.0f, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, D_menu_801AECF8[D_menu_801B931C % 10], 16, 15, 244.0f, 82.0f, 1.0f, 1.0f); #if MODS_SFX_JUKEBOX == 1 } #endif Option_AcceptCancel_Draw(); RCP_SetupDL(&gMasterDisp, SETUPDL_76); gDPSetPrimColor(gMasterDisp++, 0, 0, 50, 50, 200, 255); for (i = 0; i < 4; i++) { Lib_TextureRect_RGBA16(&gMasterDisp, aMapWhiteSquareTex, 8, 8, D_menu_801AF014[i], D_menu_801AF024[i], D_menu_801AF034[i], D_menu_801AF044[i]); } if (sMusicPlaying) { temp_v0_4 = Audio_UpdateFrequencyAnalysis(); var_fv1 = 60.0f; if (sSpectrumAnalyzerMode == 2) { var_fv1 = 30.0f; } for (i = 0; i < ARRAY_COUNT(D_menu_801B9298); i++) { if ((sSpectrumAnalyzerMode == 0) || (sSpectrumAnalyzerMode == 2)) { D_menu_801B9298[i] = (var_fv1 / 255.0f) * temp_v0_4[i]; } else { D_menu_801B9298[i] = var_fv1 - ((var_fv1 / 255.0f) * temp_v0_4[i]); } } } else { for (i = 0; i < ARRAY_COUNT(D_menu_801B9298); i++) { Math_SmoothStepToF(&D_menu_801B9298[i], 0.0f, 0.2f, 100.0f, 0.1f); } } Lib_InitOrtho(&gMasterDisp); RCP_SetupDL(&gMasterDisp, SETUPDL_5); Matrix_Push(&gGfxMatrix); Matrix_LookAt(gGfxMatrix, 0.0f, 0.0f, 100.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); for (var_fs0 = D_menu_801AF004, i = 0; i < ARRAY_COUNT(D_menu_801B9298); i++, var_fs0 += D_menu_801AF010) { r = D_menu_801AF054 + ((D_menu_801AF060 - D_menu_801AF054) / 31.0f) * i; g = D_menu_801AF058 + ((D_menu_801AF064 - D_menu_801AF058) / 31.0f) * i; b = D_menu_801AF05C + ((D_menu_801AF068 - D_menu_801AF05C) / 31.0f) * i; gDPSetPrimColor(gMasterDisp++, 0, 0, (s32) r, (s32) g, (s32) b, 255); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, var_fs0, D_menu_801AF078[sSpectrumAnalyzerMode], D_menu_801AF008, MTXF_APPLY); Matrix_Scale(gGfxMatrix, D_menu_801AF00C, D_menu_801B9298[i], 1.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AF06C[sSpectrumAnalyzerMode]); Matrix_Pop(&gGfxMatrix); } Matrix_Pop(&gGfxMatrix); Lib_InitPerspective(&gMasterDisp); } void Option_Data_Setup(void) { gStarCount = 800; D_menu_801B91E4 = 255.0f; D_menu_801B9330[0] = 0; D_menu_801B9330[1] = 0; D_menu_801B91C0 = 0; D_menu_801B91CC = 0; } void Option_Data_Update(void) { f32 temp_fv0; s32 i; switch (sMainMenuState) { case 0: Option_Data_Select(); break; case 2: if (D_menu_801B9330[D_menu_801B91C0] != 0) { break; // looks fake, but isn't } D_menu_801B91CC = 0; D_menu_801B91C0 = 0; sMainMenuState = 0; break; case 3: if (D_menu_801B9330[D_menu_801B91C0] == 0) { gDrawMode = DRAW_NONE; sMenuEntryState = OPTION_MAIN_MENU; sMainMenuState = 0; sMainMenuFromCancel = true; } break; case 4: if (D_menu_801B9330[D_menu_801B91C0] == 0) { switch (D_menu_801B91CC) { case 0: D_menu_801B91CC = 1; D_menu_801B91C0 = 0; sMainMenuState = 0; break; case 1: D_menu_801B91CC = 2; AUDIO_PLAY_SFX(NA_SE_BACKUP_CLEAR, gDefaultSfxSource, 4); D_ctx_801779A8[gMainController] = 50.0f; D_ctx_80177990[gMainController] = 0; break; case 2: D_ctx_80177990[gMainController] += (s32) D_ctx_801779A8[gMainController]; temp_fv0 = Math_SmoothStepToF(&D_ctx_801779A8[gMainController], 100.0f, 0.05f, 100.0f, 0.1f); if (D_ctx_80177990[gMainController] >= 100) { D_ctx_80177990[gMainController] -= 100; gControllerRumbleFlags[gMainController] = 1; } if (temp_fv0 == 0.0f) { D_menu_801B91CC = 3; gSaveFile = *(SaveFile*) &gDefaultSave; Save_Write(); sExpertSoundCursor = 0; sExpertModeCursor = 0; sExpertModesEnabled = false; gExpertMode = false; sOptionCardList[OPTION_MAP].tex.texture = aMainGameCardTex; sOptionCardList[OPTION_MAP].tex.width = 72; sOptionCardList[OPTION_MAP].tex.height = 12; sOptionCardList[OPTION_SOUND].tex.texture = aSoundCardTex; sOptionCardList[OPTION_SOUND].tex.width = 64; sOptionCardList[OPTION_SOUND].tex.height = 10; for (i = 0; i < ARRAY_COUNT(sOptionCardList); i++) { sOptionCardCurTextPosX[i] = sOptionCardTextPosX[i]; sOptionCardCurTextPosY[i] = sOptionCardTextPosY[i]; } Title_GetRankTotalHits(); } break; case 3: sMainMenuState = 0; break; } } break; } } void Option_Data_Select(void) { if ((D_menu_801B91CC == 0) || (D_menu_801B91CC == 1)) { if (Option_Input_DataSelect_X(&D_menu_801B91C0) != 0) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); } if (1) {} } if (gControllerPress[gMainController].button & A_BUTTON) { if (D_menu_801B91CC == 3) { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); sMainMenuState = 3; } else { D_menu_801B9330[D_menu_801B91C0] = 10; if (D_menu_801B91C0 == 0) { if (D_menu_801B91CC == 1) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); sMainMenuState = 2; } else { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); sMainMenuState = 3; } } else { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); sMainMenuState = 4; } } } else if (gControllerPress[gMainController].button & B_BUTTON) { if (D_menu_801B91CC == 1) { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); sMainMenuState = 2; } else { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); sMainMenuState = 3; } } } void Option_Data_Draw(void) { s32 i; s32 sp7C[2]; s32 mask[2]; static f32 D_menu_801AF084[2] = { 172.0f, 76.0f }; static f32 D_menu_801AF08C[2] = { 228.0f, 121.0f }; static f32 D_menu_801AF094[6] = { 72.0f, 88.0f, 185.0f, 80.0f, 84.0f, 88.0f }; static f32 D_menu_801AF0AC[6] = { 53.0f, 137.0f, 137.0f, 90.0f, 80.0f, 97.0f }; Option_DrawMenuLabel(); RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); for (i = 0; i < 2; i++) { Lib_TextureRect_IA8(&gMasterDisp, D_OPT_80084B0 + (176 * 4 * i), 176, 4, D_menu_801AF094[0], D_menu_801AF0AC[0] + (4.0f * i), 1.0f, 1.0f); } Lib_TextureRect_IA8(&gMasterDisp, D_OPT_80084B0 + 176 * 4 * 2, 176, 5, D_menu_801AF094[0], D_menu_801AF0AC[0] + 8.0f, 1.0f, 1.0f); if (D_menu_801B91CC < 2) { Lib_TextureRect_IA8_MirX(&gMasterDisp, aArrowTex, 8, 8, D_menu_801AF084[D_menu_801B91C0], 140.0f, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, aArrowTex, 8, 8, D_menu_801AF08C[D_menu_801B91C0], 140.0f, 1.0f, 1.0f); Option_Color_FlashRed(&D_menu_801AED20[D_menu_801B91C0]); D_menu_801AED20[!D_menu_801B91C0] = 255.0f; mask[0] = mask[1] = 0xFFFFFFFF; for (i = 0; i < ARRAY_COUNT(D_menu_801B9330); i++) { if (D_menu_801B9330[i] != 0) { mask[i] = 1; sp7C[i] = 255; D_menu_801B9330[i]--; } } if ((gGameFrameCount & mask[1]) != 0) { sp7C[1] = D_menu_801AED20[1]; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, sp7C[1], sp7C[1], 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8009980, 32, 12, D_menu_801AF094[1], D_menu_801AF0AC[1], 1.0f, 1.0f); } if ((gGameFrameCount & mask[0]) != 0) { sp7C[0] = D_menu_801AED20[0]; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, sp7C[0], sp7C[0], 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8009B00, 40, 12, D_menu_801AF094[2], D_menu_801AF0AC[2], 1.0f, 1.0f); } } switch (D_menu_801B91CC) { case 0: gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); { for (i = 0; i < 9; i++) { Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8008DA0 + (160 * 2 * i), 160, 2, D_menu_801AF094[3], D_menu_801AF0AC[3] + (2.0f * i), 1.0f, 1.0f); } Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8008DA0 + 160 * 2 * 9, 160, 1, D_menu_801AF094[3], D_menu_801AF0AC[3] + 18.0f, 1.0f, 1.0f); } break; case 1: case 2: gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); { for (i = 0; i < 20; i++) { Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8009CE0 + (160 * 2 * i), 160, 2, D_menu_801AF094[4], D_menu_801AF0AC[4] + (2.0f * i), 1.0f, 1.0f); } Lib_TextureRect_IA8(&gMasterDisp, D_OPT_8009CE0 + 160 * 2 * 20, 160, 1, D_menu_801AF094[4], D_menu_801AF0AC[4] + 40.0f, 1.0f, 1.0f); } break; case 3: gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 32, 32, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_800B680, 144, 28, D_menu_801AF094[5], D_menu_801AF0AC[5], 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_800B680 + 4032, 144, 13, D_menu_801AF094[5], D_menu_801AF0AC[5] + 28.0f, 1.0f, 1.0f); break; } Option_AcceptCancel_Draw(); } char* sTeamLetter[3] = { "P", "S", "F" }; s32 sTeamAlivePrimR[3] = { 255, 0, 30 }; s32 sTeamAlivePrimG[3] = { 30, 179, 30 }; s32 sTeamAlivePrimB[3] = { 0, 67, 255 }; void Option_Ranking_Setup(void) { Title_GetRankTotalHits(); gStarCount = 800; D_menu_801B91D0 = 1; D_menu_801B93E4 = 0; D_menu_801B91D4 = 114.0f; D_menu_801B91DC = 114.0f; D_menu_801B91D8 = -6.0f; D_menu_801B91E0 = -6.0f; sRanking2ndPage = false; sTitleRankMaxRecords = 10; D_menu_801B9400.unk_0 = 0; D_menu_801B9400.unk_4 = 0; D_menu_801B9408.unk_0 = 0; D_menu_801B9408.unk_4 = 0; Option_PlanetTextures_Setup(); } void Option_Ranking_Update(void) { Option_Ranking_Select(); if (gControllerPress[gMainController].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); gDrawMode = DRAW_NONE; sMenuEntryState = OPTION_MAIN_MENU; sMainMenuState = 0; sMainMenuFromCancel = true; } } void Option_Ranking_Draw(void) { Option_RankingMenu_Draw(); Option_DrawMenuLabel(); } void Option_Ranking_Select(void) { // Press A to go to the 2nd page if (gControllerPress[gMainController].button & A_BUTTON) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); sRanking2ndPage ^= 1; } if (sRanking2ndPage) { Option_Ranking2_Cursor(); return; } Option_Ranking_Cursor(); } void Option_Ranking_Cursor(void) { if (Option_Input_MoveCursor_Y(&D_menu_801B93E4, 9, 1, 0, 20, 5, 4, gMainController, &D_menu_801B9400)) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); D_menu_801B91D4 = 114.0f - D_menu_801B93E4 * 130.0f; D_menu_801B91DC = 114.0f - D_menu_801B93E4 * 130.0f; D_menu_801B91D8 = -6.0f + D_menu_801B93E4 * 130.0f; D_menu_801B91E0 = -6.0f + D_menu_801B93E4 * 130.0f; } } void Option_Ranking2_Cursor(void) { s32 pad; f32 sp30; f32 temp_fv0_2; s32 temp; s32 temp2; if (D_menu_801B91D0 != 0) { if (Option_Input_MoveCursor_Y(&D_menu_801B93E4, 9, 1, 1, 20, 2, 9, gMainController, &D_menu_801B9408) != 0.00f) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); D_menu_801B91DC = 114.0f - D_menu_801B93E4 * 130.0f; D_menu_801B91E0 = -6.0f + D_menu_801B93E4 * 130.0f; D_menu_801B91D0 = 0; } } else { sp30 = Math_SmoothStepToF(&D_menu_801B91D8, D_menu_801B91E0, 0.5f, 100.0f, 1.0f); temp_fv0_2 = Math_SmoothStepToF(&D_menu_801B91D4, D_menu_801B91DC, 0.5f, 100.0f, 1.0f); if ((sp30 == 0.0f) && (temp_fv0_2 == 0.0f)) { D_menu_801B91D0 = 1; } } temp = D_menu_801B91D4; temp2 = D_menu_801B91D8; D_menu_801B91D4 = temp; D_menu_801B91D8 = temp2; if (D_menu_801B91D4 >= 114.0f) { D_menu_801B91D4 = 114.0f; } if (D_menu_801B91D4 <= -1056.0f) { D_menu_801B91D4 = -1056.0f; } if (D_menu_801B91D8 <= -6.0f) { D_menu_801B91D8 = -6.0f; } if (D_menu_801B91D8 >= 1164.0f) { D_menu_801B91D8 = 1164.0f; } } void Option_RankingMenu_Draw(void) { s32 colorGB; if (sRanking2ndPage) { Option_RankingMenu2_Draw(); } else { Title_RankingData_Draw(); RCP_SetupDL(&gMasterDisp, SETUPDL_83); Option_Color_FlashRed(&D_menu_801B93F0); colorGB = D_menu_801B93F0; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7004010, 8, 8, 70.0f, (D_menu_801B93E4 * 17.0f) + 55.0f, 1.0f, 1.0f); } RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); Graphics_DisplaySmallText(242, 215, 1.0f, 1.0f, "PUSH A"); } // 2nd page and more detailed version of the Ranking void Option_RankingMenu2_Draw(void) { f32 var_fs0; f32 var_fs1; s32 colorGB; s32 i; static f32 D_menu_801AF0F4 = 130.0f; static f32 D_menu_801AF0F8[] = { 48.0f, 175.0f }; var_fs0 = D_menu_801B91D4; var_fs1 = D_menu_801B91D8; for (i = 0; i < RANKING_MAX; i++) { if ((var_fs0 > 69.0f) && (var_fs0 < 230.0f)) { Option_OrdinalNumbers_Draw(i, 41, var_fs0); Option_RankingName_Draw(i, 75, var_fs0 - 25.0f); Option_RankingTotalHits_Draw(i, 130, (var_fs0 - 26.0f)); Map_RemainingLives_Draw(210, (var_fs0 - 24.0f), gSaveFile.save.data.rankingLives[i]); Option_RankingTeamAlive_Draw(i, 258, var_fs0 - 25.0f); } Option_RankingRoute_Draw(i, var_fs0, var_fs1); var_fs0 += D_menu_801AF0F4; var_fs1 -= D_menu_801AF0F4; } Option_Menu_Push(); Option_80197914(); Matrix_Pop(&gGfxMatrix); RCP_SetupDL(&gMasterDisp, SETUPDL_76); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_IA8(&gMasterDisp, D_OPT_800D170, 8, 16, 0.0f, D_menu_801AF0F8[0], 40.0f, 1.5f); Lib_TextureRect_IA8_MirY(&gMasterDisp, D_OPT_800D170, 8, 16, 0.0f, D_menu_801AF0F8[1], 40.0f, 1.5f); Background_DrawPartialStarfield(0, 70); Background_DrawPartialStarfield(170, 239); RCP_SetupDL(&gMasterDisp, SETUPDL_83); if (D_menu_801B91D4 >= 114.0f) { gDPSetPrimColor(gMasterDisp++, 0, 0, 32, 32, 32, 255); } else { Option_Color_FlashRed(&D_menu_801B93F4); colorGB = D_menu_801B93F4; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); } Lib_TextureRect_IA8(&gMasterDisp, D_OPT_800D070, 16, 16, 150.0f, 44.0f, 1.0f, 1.0f); if (D_menu_801B91D4 <= -1055.0f) { gDPSetPrimColor(gMasterDisp++, 0, 0, 32, 32, 32, 255); } else { Option_Color_FlashRed(&D_menu_801B93F8); colorGB = D_menu_801B93F8; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); } Lib_TextureRect_IA8_MirY(&gMasterDisp, D_OPT_800D070, 16, 16, 150.0f, 200.0f, 1.0f, 1.0f); } Vec3f D_menu_801AF100[2] = { { 0.0f, 167.0f, 0.0f }, { 0.0f, -167.0f, 0.0f } }; Vec3f D_menu_801AF118[2] = { { 25.0f, 3.6f, 0.0f }, { 25.0f, 3.6f, 0.0f } }; void Option_80197914(void) { Vec3f* vec1; Vec3f* vec2; s32 i; RCP_SetupDL(&gMasterDisp, SETUPDL_0); for (i = 0, vec1 = D_menu_801AF100, vec2 = D_menu_801AF118; i < 2; i++, vec1++, vec2++) { Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, vec1->x, vec1->y, -500.0f, MTXF_APPLY); Matrix_Scale(gGfxMatrix, vec2->x, vec2->y, 1.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEF30); Matrix_Pop(&gGfxMatrix); } } void Option_OrdinalNumbers_Draw(s32 ordinalType, s32 xPos, s32 yPos) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); if (ordinalType != 9) { Lib_TextureRect_IA8(&gMasterDisp, D_menu_801AECF8[ordinalType + 1], 16, 15, xPos, yPos - 25.0f, 1.0f, 1.0f); } else { Lib_TextureRect_IA8(&gMasterDisp, aLargeText_1, 16, 15, xPos - 14.0f, yPos - 25.0f, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, aLargeText_0, 16, 15, xPos, yPos - 25.0f, 1.0f, 1.0f); } RCP_SetupDL(&gMasterDisp, SETUPDL_85); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); switch (ordinalType) { case 0: // st Lib_TextureRect_CI4(&gMasterDisp, aStTex, aStTLUT, 16, 9, xPos + 17.0f, yPos - 19.0f, 1.0f, 1.0f); break; case 1: // nd Lib_TextureRect_CI4(&gMasterDisp, aNdTex, aNdTLUT, 16, 10, xPos + 17.0f, yPos - 19.0f, 1.0f, 1.0f); break; case 2: // rd Lib_TextureRect_CI4(&gMasterDisp, aRdTex, aRdTLUT, 16, 11, xPos + 17.0f, yPos - 20.0f, 1.0f, 1.0f); break; default: // th Lib_TextureRect_CI4(&gMasterDisp, aThTex, aThTLUT, 16, 9, xPos + 17.0f, yPos - 19.0f, 1.0f, 1.0f); break; } } void Option_RankingName_Draw(s32 rankIdx, s32 xPos, s32 yPos) { char rankName[4]; RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); rankName[0] = gSaveFile.save.data.rankNameEntry[rankIdx][0] & 0xFF; rankName[1] = gSaveFile.save.data.rankNameEntry[rankIdx][1] & 0xFF; rankName[2] = gSaveFile.save.data.rankNameEntry[rankIdx][2] & 0xFF; rankName[3] = '\0'; Graphics_DisplayLargeText(xPos, yPos, 1.0f, 1.0f, rankName); } void Option_RankingTotalHits_Draw(s32 rankIdx, s32 xPos, s32 yPos) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 60, 60, 255, 170); Lib_TextureRect_IA8(&gMasterDisp, aMapOptionBgTex, 24, 17, xPos, yPos, 3.17f, 1.05f); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); Graphics_DisplaySmallText(xPos, yPos, 1.0f, 1.0f, "TOTAL HITS"); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Graphics_DisplaySmallNumber((xPos + 40.0f) - ((HUD_CountDigits(gTotalHitsRanking[rankIdx]) * 8) - 8), (yPos + 9.0f), gTotalHitsRanking[rankIdx]); } void Option_RankingTeamAlive_Draw(s32 rankIdx, s32 xPos, s32 yPos) { f32 xOffset; s32 i; RCP_SetupDL(&gMasterDisp, SETUPDL_83); for (xOffset = 0.0f, i = 0; i < ARRAY_COUNT(sTeamAlivePrimR); i++, xOffset += 12.0f) { gDPSetPrimColor(gMasterDisp++, 0, 0, sTeamAlivePrimR[i], sTeamAlivePrimG[i], sTeamAlivePrimB[i], 255); Graphics_DisplaySmallText(xOffset + xPos, yPos, 1.0f, 1.0f, sTeamLetter[i]); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Graphics_DisplaySmallNumber(xPos + xOffset - ((HUD_CountDigits(gRankingTeamAlive[rankIdx][i]) - 1) * 8), yPos + 9.0f, gRankingTeamAlive[rankIdx][i]); } } void Option_RankingRoute_Draw(s32 rankIdx, f32 arg1, f32 arg2) { f32 temp = 16.0f; s32 routeMax = gSaveFile.save.data.rankingRoute[rankIdx]; f32 var_fs2; s32 i; for (var_fs2 = 0.0f, i = 0; i < ROUTE_MAX; i++, var_fs2 += 24.0f + temp) { Option_RankingRouteFrame_Draw(rankIdx, i, 28.0f + var_fs2, arg1, routeMax); if (i < routeMax) { Option_RankingPlanetName_Draw(rankIdx, i, 28.0f + var_fs2, arg1); Option_RankingHitCount_Draw(rankIdx, i, 28.0f + var_fs2, arg1); Option_RankingTeamPresence_Draw(rankIdx, i, 28.0f + var_fs2, arg1); } } if ((arg2 < 75.0f) && (arg2 > -80.0f)) { Option_RankingPlanetRoute_Draw(rankIdx, arg2, routeMax); } } void Option_RankingRouteFrame_Draw(s32 rankIdx, s32 routeIdx, f32 xPos, f32 yPos, s32 arg4) { s32 r; s32 g; s32 b; s32 routeLineColor; PlanetId start; PlanetId end; if ((yPos > 30.0f) && (yPos < 200.0f)) { RCP_SetupDL(&gMasterDisp, SETUPDL_76); if (routeIdx < 6) { r = g = b = 255; if (routeIdx < (arg4 - 1)) { start = gSaveFile.save.data.stats[rankIdx][routeIdx].planetId & 0xF; end = gSaveFile.save.data.stats[rankIdx][routeIdx + 1].planetId & 0xF; routeLineColor = Option_GetRouteLineColor(start, end); r = g = b = 255; // white by default switch (routeLineColor) { case 0: r = 16; g = 64; break; case 1: case 3: g = 175; b = 0; break; case 2: case 4: b = 0; g = 0; break; } } gDPSetPrimColor(gMasterDisp++, 0, 0, r, g, b, 255); Lib_TextureRect_RGBA16(&gMasterDisp, aMapWhiteSquareTex, 8, 8, xPos + 24.0f, yPos + 11.0f, 2.0f, 0.2f); } gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_RGBA16(&gMasterDisp, aMapPathBoxTex, 24, 24, xPos, yPos, 1.0f, 1.0f); } } void Option_RankingHitCount_Draw(s32 rankIdx, s32 routeIdx, f32 xPos, f32 yPos) { s32 hitCount; if ((yPos > 22.0f) && (yPos < 162.0f)) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); hitCount = (gSaveFile.save.data.stats[rankIdx][routeIdx].unk_C & 1) << 8; hitCount |= gSaveFile.save.data.stats[rankIdx][routeIdx].hitCount; Graphics_DisplaySmallNumber(xPos + 15.0f - (HUD_CountDigits(hitCount) - 1) * 8, yPos + 24.0f + 1.0f, hitCount); } } void Option_RankingTeamPresence_Draw(s32 rankIdx, s32 routeIdx, f32 xPos, f32 yPos) { f32 xOffset; s32 teamAlive[3]; s32 i; if ((yPos > 12.0f) && (yPos < 154.0f)) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); teamAlive[0] = gSaveFile.save.data.stats[rankIdx][routeIdx].peppyAlive & 1; teamAlive[1] = gSaveFile.save.data.stats[rankIdx][routeIdx].slippyAlive & 1; teamAlive[2] = gSaveFile.save.data.stats[rankIdx][routeIdx].falcoAlive & 1; for (xOffset = 0.0f, i = 0; i < ARRAY_COUNT(teamAlive); i++, xOffset += 9.0f) { if (teamAlive[i] == 0) { continue; } gDPSetPrimColor(gMasterDisp++, 0, 0, sTeamAlivePrimR[i], sTeamAlivePrimG[i], sTeamAlivePrimB[i], 255); Graphics_DisplaySmallText(xPos + xOffset - 1.0f, yPos + 24.0f + 8.0f + 1.0f, 1.0f, 1.0f, sTeamLetter[i]); } } } void Option_RankingPlanetName_Draw(s32 rankIdx, s32 routeIdx, f32 xPos, f32 yPos) { PlanetId planetIdx; char* planetName; f32 textWidth; if ((yPos > 58.0f) && (yPos < 197.0f)) { planetIdx = gSaveFile.save.data.stats[rankIdx][routeIdx].planetId & 0xF; planetName = D_menu_801AEEAC[planetIdx]; RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); textWidth = Graphics_GetSmallTextWidth(planetName) / 2.0f; Graphics_DisplaySmallText(xPos + 12.0f - textWidth, yPos - 8.0f, 1.0f, 1.0f, planetName); } } void Option_RankingPlanetRoute_Draw(s32 rankIdx, f32 y, s32 routeMax) { static f32 zAngle = 0.0f; static f32 xStart = -121.0f; static f32 xAdvance = 40.1f; s32 i; PlanetId planet; bool gotMedal; bool drawPlanetMedal; f32 x; s32 pad[2]; Matrix_Push(&gGfxMatrix); Matrix_LookAt(gGfxMatrix, 0.0f, 0.0f, 100.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); Lib_InitOrtho(&gMasterDisp); gotMedal = gSaveFile.save.data.rankingMedal[rankIdx]; for (x = xStart, i = 0; i < routeMax; i++, x += xAdvance) { planet = gSaveFile.save.data.stats[rankIdx][i].planetId & 0xF; switch (planet) { case SAVE_SLOT_SOLAR: RCP_SetupDL(&gMasterDisp, SETUPDL_67); gDPSetPrimColor(gMasterDisp++, 0, 0, 240, 0, 0, 255); gDPSetEnvColor(gMasterDisp++, 31, 0, 0, 0); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x, y, 0.0f, MTXF_APPLY); Matrix_RotateZ(gGfxMatrix, M_DTOR * zAngle, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.3f, 0.3f, 0.3f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 128); gDPSetEnvColor(gMasterDisp++, 31, 0, 0, 0); Matrix_Scale(gGfxMatrix, 0.8f, 0.8f, 0.8f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); Matrix_Pop(&gGfxMatrix); break; case PLANET_METEO: RCP_SetupDL(&gMasterDisp, SETUPDL_62); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x - 1.0f, y + 4.0f, 0.0f, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.3f, 0.3f, 0.3f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); Matrix_Translate(gGfxMatrix, 18.0f, -20.0f, 0.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); Matrix_Pop(&gGfxMatrix); break; case PLANET_SECTOR_X: case PLANET_SECTOR_Y: case PLANET_SECTOR_Z: RCP_SetupDL(&gMasterDisp, SETUPDL_62); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 144); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x, y, 0.0f, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.3f, 0.3f, 0.3f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); Matrix_Pop(&gGfxMatrix); break; case PLANET_BOLSE: RCP_SetupDL(&gMasterDisp, SETUPDL_23); Lights_SetOneLight(&gMasterDisp, 0, 0, 100, 100, 100, 70, 100, 100, 100); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x, y, 0.0f, MTXF_APPLY); Matrix_RotateX(gGfxMatrix, M_DTOR * 20.0f, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.01f, 0.01f, 0.01f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); Matrix_Pop(&gGfxMatrix); break; case PLANET_AREA_6: RCP_SetupDL(&gMasterDisp, SETUPDL_23); Lights_SetOneLight(&gMasterDisp, 0, 0, 100, 100, 100, 70, 100, 100, 100); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x, y, 0.0f, MTXF_APPLY); Matrix_RotateX(gGfxMatrix, M_DTOR * 20.0f, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.01f, 0.01f, 0.01f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); Matrix_Pop(&gGfxMatrix); break; default: RCP_SetupDL(&gMasterDisp, SETUPDL_62); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x, y, 0.0f, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.3f, 0.3f, 0.3f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEE6C[planet]); if ((planet != SAVE_SLOT_VENOM_1) && (planet != SAVE_SLOT_VENOM_2) && (planet != PLANET_AQUAS)) { if (planet == PLANET_MACBETH) { gDPSetPrimColor(gMasterDisp++, 0, 0, 64, 64, 64, 255); } else { gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); } Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, gMapVenomCloudDL); } Matrix_Scale(gGfxMatrix, 1.6f, 1.6f, 1.6f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_MAP_605C230); Matrix_Pop(&gGfxMatrix); break; } drawPlanetMedal = (gotMedal >> i) & 1; if (drawPlanetMedal) { Option_RankingRouteMedal_Draw(x, y, 0.0f); } } Matrix_Pop(&gGfxMatrix); Option_ScrollPlanetTexture(); zAngle += 0.1f; Lib_InitPerspective(&gMasterDisp); } f32 D_menu_801AF13C = 0.7f; f32 D_menu_801AF140 = 11.0f; f32 D_menu_801AF144 = 2.7f; void Option_RankingRouteMedal_Draw(f32 xPos, f32 yPos, f32 zPos) { RCP_SetupDL(&gMasterDisp, SETUPDL_53); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, xPos - D_menu_801AF140, yPos + D_menu_801AF144, zPos, MTXF_APPLY); Matrix_Scale(gGfxMatrix, D_menu_801AF13C, D_menu_801AF13C, D_menu_801AF13C, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, aMapMedalDL); Matrix_Pop(&gGfxMatrix); } s32 Option_GetRouteLineColor(PlanetId start, PlanetId end) { s32 i; for (i = 0; i < ARRAY_COUNT(sRouteColoredLine); i++) { if ((sRouteColoredLine[i].start == start) && (sRouteColoredLine[i].end == end)) { break; } } return sRouteColoredLine[i].color; } void Option_VersusMenu_Setup(void) { s32 i; if (D_menu_801B91C4) { AUDIO_PLAY_BGM(NA_BGM_VS_SELECT); } sVsMenuSelection = sMenuEntryState; if (D_game_800D2870) { sOptionCardList[OPTION_TRAINING].tex.yPos = 129.0f; sOptionCardList[OPTION_TRAINING].frame.y = -7.5f; } gVsPointsToWin = 3; D_menu_801B9340 = 2; gVsMenuSelection = 0; gStarCount = 0; D_menu_801B93C4 = 0; for (i = 0; i < ARRAY_COUNT(gControllerPlugged); i++) { gPlayerInactive[i] = false; if (gControllerPlugged[i] == 0) { gPlayerInactive[i] = true; D_menu_801B93C4 |= 1 << i; } D_menu_801B9358[i] = 255.0f; D_menu_801B93A0[i].unk_0 = 0; D_menu_801B93A0[i].unk_4 = 0; } D_menu_801B91E8 = 255.0f; } void Option_VersusMenu_Update(void) { switch (sMainMenuState) { case 0: Option_VersusMenu_Cursor(); break; case 1: if (sOkConfirmTimer == 0.0f) { sMenuEntryState = OPTION_VERSUS_STAGE; Option_Entry_Setup(); } break; } } void Option_VersusMenu_Cursor(void) { s32 i; for (i = 0; i < ARRAY_COUNT(gControllerPress); i++) { if (!(D_menu_801B93C4 & (1 << i))) { Option_Color_FlashRed(&D_menu_801B9358[i]); if (Option_Input_MoveCursor_Y(&D_menu_801AED3C[i], 2, 0, 0, 20, 2, 4, i, &D_menu_801B93A0[i])) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); } } if (gControllerPress[i].button & A_BUTTON) { if (D_menu_801B93C4 == 15) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); sOkConfirmTimer = 10; sMainMenuState++; break; } else { if (!(D_menu_801B93C4 & (1 << i))) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); gHandicap[i] = D_menu_801AED3C[i]; D_menu_801B9358[i] = 255.0f; D_menu_801B9348[i] = 10; D_menu_801B93C4 = D_menu_801B93C4 | (1 << i); } } } if (gControllerPress[i].button & B_BUTTON) { if (D_menu_801B93C4 & (1 << i)) { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); D_menu_801B93C4 &= (1 << i) ^ 15; } else { AUDIO_PLAY_BGM(NA_BGM_SELECT); AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4); Option_VsBackToSubMenu(2); sVsSubMenuFromCancel = true; break; } } } } void Option_VersusMenu_Draw(void) { s32 i; Option_VsMenuCard_Draw(); Option_VS_N64Console_Draw(); for (i = 0; i < ARRAY_COUNT(gControllerPlugged); i++) { if (gControllerPlugged[i] == 1) { Option_VS_HandicapSet_Draw(i); } } if (D_menu_801B93C4 == 15) { Option_VsOKConfirm_Draw(); } } f32 sVsHandicapFrameXpos[4] = { 30.0f, 214.0f, 30.0f, 215.0f }; f32 sVsHandicapFrameYpos[4] = { 18.0f, 18.0f, 151.0f, 151.0f }; s32 sCharNameWidth[4] = { 56, 48, 56, 48 }; s32 sCharNameHeight[4] = { 8, 10, 10, 8 }; f32 sCharNameXoffsetPos[4] = { 12.0f, 16.0f, 12.0f, 18.0f }; f32 sCharNameYoffsetPos = -1.0f; f32 D_menu_801AF19C[4] = { 46.0f, 41.0f, 41.0f, 41.0f }; f32 D_menu_801AF1AC = 24.0f; f32 D_menu_801AF1B0 = 1.4f; f32 sPlayerFaceXoffsetPos = 5.0f; f32 sPlayerFaceYoffsetPos = 11.0f; f32 D_menu_801AF1BC = 8.0f; f32 D_menu_801AF1C0 = 45.0f; f32 D_menu_801AF1C4 = 20.0f; f32 D_menu_801AF1C8 = 55.0f; f32 D_menu_801AF1CC = 37.0f; f32 D_menu_801AF1D0 = 11.0f; f32 D_menu_801AF1D4 = 7.0f; f32 D_menu_801AF1D8 = 59.0f; f32 D_menu_801AF1DC = 58.0f; void Option_VS_HandicapSet_Draw(s32 PlayerIdx) { s32 mask; s32 width; s32 colorGB; s32 i; static u8* sVsHandicapLvlTex[3] = { aVsHandicapLvl1Tex, aVsHandicapLvl2Tex, aVsHandicapLvl3Tex, }; static u8* sVsCharNameTex[4] = { aVsFoxNameTex, aVsPeppyNameTex, aVsSlippyNameTex, aVsFalcoNameTex, }; static u16* sVsCharNameTLUT[4] = { aVsFoxNameTLUT, aVsPeppyNameTLUT, aVsSlippyNameTLUT, aVsFalcoNameTLUT, }; static u16* sVsPlayerFaceTex[4] = { aVsFoxFaceTex, aVsPeppyFaceTex, aVsSlippyFaceTex, aVsFalcoFaceTex, }; static u8* sVsPlayerNumTex[4] = { aVsPlayerNum1Tex, aVsPlayerNum2Tex, aVsPlayerNum3Tex, aVsPlayerNum4Tex, }; static s32 sCharNameR[4] = { 177, 255, 0, 30 }; static s32 sCharNameG[4] = { 242, 30, 255, 30 }; static s32 sCharNameB[4] = { 12, 0, 67, 255 }; RCP_SetupDL(&gMasterDisp, SETUPDL_85); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_CI4(&gMasterDisp, aVsHandicapFrameTex, aVsHandicapFrameTLUT, 80, 71, sVsHandicapFrameXpos[PlayerIdx], sVsHandicapFrameYpos[PlayerIdx], 1.0f, 1.0f); Lib_TextureRect_CI8(&gMasterDisp, sVsCharNameTex[PlayerIdx], sVsCharNameTLUT[PlayerIdx], sCharNameWidth[PlayerIdx], sCharNameHeight[PlayerIdx], sVsHandicapFrameXpos[PlayerIdx] + sCharNameXoffsetPos[PlayerIdx], sVsHandicapFrameYpos[PlayerIdx] + sCharNameYoffsetPos, 1.0f, 1.0f); RCP_SetupDL(&gMasterDisp, SETUPDL_83); mask = 0xFFFFFFFF; if (D_menu_801B9348[PlayerIdx] != 0) { mask = 0x00000001; D_menu_801B9348[PlayerIdx]--; } if ((gGameFrameCount & mask) != 0) { colorGB = D_menu_801B9358[PlayerIdx]; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7001030, 64, 9, sVsHandicapFrameXpos[PlayerIdx] + D_menu_801AF1BC, sVsHandicapFrameYpos[PlayerIdx] + D_menu_801AF1C0, 1.0f, 1.0f); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, sVsHandicapLvlTex[D_menu_801AED3C[PlayerIdx]], 40, 12, sVsHandicapFrameXpos[PlayerIdx] + D_menu_801AF1C4, sVsHandicapFrameYpos[PlayerIdx] + D_menu_801AF1C8, 1.0f, 1.0f); } gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_IA8_MirX(&gMasterDisp, aArrowTex, 8, 8, sVsHandicapFrameXpos[PlayerIdx] + D_menu_801AF1D4, sVsHandicapFrameYpos[PlayerIdx] + D_menu_801AF1DC, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, aArrowTex, 8, 8, sVsHandicapFrameXpos[PlayerIdx] + D_menu_801AF1D8, sVsHandicapFrameYpos[PlayerIdx] + D_menu_801AF1DC, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, aVsTextContTex, 40, 7, sVsHandicapFrameXpos[PlayerIdx] + D_menu_801AF1CC, sVsHandicapFrameYpos[PlayerIdx] + D_menu_801AF1D0, 1.0f, 1.0f); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_RGBA16(&gMasterDisp, sVsPlayerFaceTex[PlayerIdx], 44, 44, sVsHandicapFrameXpos[PlayerIdx] + sPlayerFaceXoffsetPos, sVsHandicapFrameYpos[PlayerIdx] + sPlayerFaceYoffsetPos, 0.7f, 0.7f); width = 24; if (PlayerIdx == 0) { width = 16; } gDPSetPrimColor(gMasterDisp++, 0, 0, sCharNameR[PlayerIdx], sCharNameG[PlayerIdx], sCharNameB[PlayerIdx], 255); Lib_TextureRect_IA8(&gMasterDisp, sVsPlayerNumTex[PlayerIdx], width, 13, sVsHandicapFrameXpos[PlayerIdx] + D_menu_801AF19C[PlayerIdx], sVsHandicapFrameYpos[PlayerIdx] + D_menu_801AF1AC, D_menu_801AF1B0, D_menu_801AF1B0); } void Option_VS_N64Console_Draw(void) { s32 i; RCP_SetupDL_76(); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_RGBA16(&gMasterDisp, aVsN64ConsoleTex, 144, 42, 87.0f, 84, 1.0f, 1.0f); } void Option_VersusStage_Setup(void) { s32 i; gStarCount = 0; D_menu_801B933C = 0; D_menu_801B91E8 = 255.0f; D_menu_801B93D4 = gVsPointsToWin - 1; D_menu_801B93D8 = gVsMenuSelection; D_menu_801B93DC = D_menu_801B9340; gVsTimeTrialLimit = D_menu_801B93DC; // clang-format off for (i = 0; i < ARRAY_COUNT(D_menu_801B9358); i++) { \ D_menu_801B9358[i] = 0; } // clang-format on sPointConfirmTimer = 0; sStageSelectConfirmTimer = 0; sTimeTrialConfirmTimer = 0; sOkConfirmTimer = 0; sVsSubMenuFirstState = false; D_menu_801B9368 = 255.0f; D_menu_801B9370 = 255.0f; D_menu_801B9378 = 255.0f; Option_8019A080(); } void Option_8019A080(void) { s32 i; for (i = 0; i < ARRAY_COUNT(D_menu_801B9380); i++) { D_menu_801B9380[i].unk_0 = 0; D_menu_801B9380[i].unk_4 = 0; } } void Option_VersusStage_Update(void) { switch (sVsMenuSelection) { case OPTION_POINT_MATCH: Option_Vs_PointMatch_Update(); break; case OPTION_BR_MATCH: Option_Vs_BattleRoyal_Update(); break; case OPTION_TT_MATCH: Option_Vs_TimeTrial_Update(); break; } } void Option_Vs_PointMatch_Update(void) { switch (sMainMenuState) { case 0: Option_Vs_Point_Selection(); break; case 1: Option_VsStageSelection(); break; case 2: Option_VsConfirmSelection(); break; case 3: Option_Vs_StartMatch(); break; } } void Option_Vs_BattleRoyal_Update(void) { switch (sMainMenuState) { case 0: Option_VsStageSelection(); break; case 1: Option_VsConfirmSelection(); break; case 2: Option_Vs_StartMatch(); break; } } void Option_Vs_TimeTrial_Update(void) { switch (sMainMenuState) { case 0: Option_VsTimeSelection(); break; case 1: Option_VsStageSelection(); break; case 2: Option_VsConfirmSelection(); break; case 3: Option_Vs_StartMatch(); break; } } void Option_Vs_StartMatch(void) { if (sOkConfirmTimer == 0.0f) { gGameState = GSTATE_VS_INIT; gNextGameStateTimer = 2; gOptionMenuStatus = OPTION_WAIT; gDrawMode = DRAW_NONE; } } void Option_Vs_Point_Selection(void) { s32 i; if (sPointConfirmTimer != 0) { return; } if (sVsSubMenuFirstState) { sMainMenuState++; sVsSubMenuFirstState = false; return; } for (i = 0; i < ARRAY_COUNT(gControllerPlugged); i++) { if (gControllerPlugged[i] == 0) { continue; } if (Option_Input_MoveCursor_Y(&D_menu_801B93D4, 4, 0, 0, 20, 2, 4, i, &D_menu_801B9380[i])) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); gVsPointsToWin = D_menu_801B93D4 + 1; } if (gControllerPress[i].button & A_BUTTON) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); Option_8019A080(); sPointConfirmTimer = 10; break; } if (gControllerPress[i].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); sMenuEntryState = sVsMenuSelection; D_menu_801B91C4 = 0; Option_Entry_Setup(); break; } } } void Option_VsTimeSelection(void) { s32 i; if (sTimeTrialConfirmTimer != 0) { return; } if (sVsSubMenuFirstState) { sMainMenuState++; sVsSubMenuFirstState = false; return; } for (i = 0; i < ARRAY_COUNT(gControllerPlugged); i++) { if (!gControllerPlugged[i]) { continue; } if (Option_Input_MoveCursor_Y(&D_menu_801B93DC, 4, 0, 0, 20, 2, 4, i, &D_menu_801B9380[i])) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); D_menu_801B9340 = D_menu_801B93DC; gVsTimeTrialLimit = D_menu_801B93DC; } if (gControllerPress[i].button & A_BUTTON) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); Option_8019A080(); sTimeTrialConfirmTimer = 10; break; } if (gControllerPress[i].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); sMenuEntryState = sVsMenuSelection; D_menu_801B91C4 = 0; Option_Entry_Setup(); break; } } } void Option_VsStageSelection(void) { s32 i; if (sStageSelectConfirmTimer != 0) { return; } if (sVsSubMenuFirstState) { D_menu_801B933C = 1; sVsSubMenuFirstState = false; sMainMenuState++; return; } for (i = 0; i < ARRAY_COUNT(gControllerPlugged); i++) { if (gControllerPlugged[i] == 0) { continue; } if (Option_Input_MoveCursor_Y(&D_menu_801B93D8, 1, 0, 1, 20, 2, 4, i, &D_menu_801B9380[i])) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); gVsMenuSelection = D_menu_801B93D8; } if (gControllerPress[i].button & A_BUTTON) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); if (gVsMenuSelection == 0) { gVersusStage = VS_STAGE_CORNERIA; if (sVsMenuSelection == OPTION_TT_MATCH) { gVersusStage = VS_STAGE_KATINA; } } else { gVersusStage = VS_STAGE_SECTOR_Z; } sStageSelectConfirmTimer = 10; Option_8019A080(); break; } if (gControllerPress[i].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); if (sVsMenuSelection == OPTION_BR_MATCH) { sMenuEntryState = sVsMenuSelection; D_menu_801B91C4 = 0; Option_Entry_Setup(); } else { Option_8019A080(); sVsSubMenuFirstState = false; sMainMenuState--; } break; } } } void Option_VsConfirmSelection(void) { s32 i; if (sOkConfirmTimer != 0) { return; } if (sVsSubMenuFirstState) { sVsSubMenuFirstState = false; sMainMenuState++; return; } for (i = 0; i < ARRAY_COUNT(gControllerPlugged); i++) { if (gControllerPlugged[i] == 0) { continue; } if (gControllerPress[i].button & A_BUTTON) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); sOkConfirmTimer = 10; break; } if (gControllerPress[i].button & B_BUTTON) { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); Option_8019A080(); D_menu_801B933C = 0; sVsSubMenuFirstState = false; sMainMenuState--; break; } } } void Option_VersusStage_Draw(void) { switch (sVsMenuSelection) { case OPTION_BR_MATCH: break; case OPTION_POINT_MATCH: Option_VsPointMatch_Draw(); break; case OPTION_TT_MATCH: Option_VsTimeTrial_Draw(); break; } Option_VsStageSelect_Draw(); if (D_menu_801B933C != 0) { Option_VsOKConfirm_Draw(); } } void Option_VsPointMatch_Draw(void) { s32 pad[5]; s32 colorGB; s32 sp44 = gVsPointsToWin; s32 mask; RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 60, 60, 255, 190); Lib_TextureRect_IA8(&gMasterDisp, aMapOptionBgTex, 24, 17, 94.0f, 43.0f, 5.0f, 1.1f); if (sMainMenuState == 0) { Option_VsSelectionArrows_Draw(97.0f, 50.0f, 107.0f, 255, 255, 255); Option_Color_FlashRed(&D_menu_801B9368); } else { D_menu_801B9368 = 255.0f; } colorGB = D_menu_801B9368; mask = 0xFFFFFFFF; if (sPointConfirmTimer != 0) { colorGB = 255; mask = 0x00000001; sPointConfirmTimer--; if (sPointConfirmTimer == 0) { sVsSubMenuFirstState = true; } } if ((gGameFrameCount & mask) != 0) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_menu_801AECF8[sp44], 16, 15, 109.0f, 45.0f, 1.0f, 1.0f); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7001DF0, 80, 10, 122.0f, 49.0f, 1.0f, 1.0f); } } void Option_VsTimeTrial_Draw(void) { static f32 D_menu_801AF25C[6] = { 156.0f, 112.0f, 112.0f, 112.0f, 112.0f, 112.0f }; static f32 D_menu_801AF274[6] = { 46.0f, 43.0f, 43.0f, 43.0f, 43.0f, 43.0f }; static f32 D_menu_801B9324; static f32 D_menu_801B9328; static f32 D_menu_801B9338; s32 pad[2]; s32 colorGB; s32 mask; static u8* sTimeTrialMinuteTextures[] = { D_VS_MENU_70024D0, D_VS_MENU_7002730, D_VS_MENU_7002990, D_VS_MENU_7002BF0, D_VS_MENU_7002E50 }; RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 60, 60, 255, 190); Lib_TextureRect_IA8(&gMasterDisp, aMapOptionBgTex, 24, 17, 93.0f, 42.0f, 5.1f, 1.1f); if (sMainMenuState == 0) { D_menu_801B9324 = 97.0f; D_menu_801B9328 = 49.0f; D_menu_801B9338 = 107.0f; Option_VsSelectionArrows_Draw(D_menu_801B9324, D_menu_801B9328, D_menu_801B9338, 255, 255, 255); Option_Color_FlashRed(&D_menu_801B9378); } else { D_menu_801B9378 = 255.0f; } colorGB = D_menu_801B9378; mask = 0xFFFFFFFF; if (sTimeTrialConfirmTimer != 0) { colorGB = 255; mask = 0x00000001; sTimeTrialConfirmTimer--; if (sTimeTrialConfirmTimer == 0) { sVsSubMenuFirstState = true; } } if ((gGameFrameCount & mask) != 0) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, sTimeTrialMinuteTextures[D_menu_801B9340], 40, 15, D_menu_801AF25C[D_menu_801B9340 + 1], D_menu_801AF274[D_menu_801B9340 + 1], 1.0f, 1.0f); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7002110, 80, 12, D_menu_801AF25C[0], D_menu_801AF274[0], 1.0f, 1.0f); } } void Option_VsStageSelect_Draw(void) { static f32 D_menu_801B93C0; static f32 D_menu_801B93C8; static f32 D_menu_801B93CC; static f32 D_menu_801AF2A0 = 101.0f; static f32 D_menu_801AF2A4 = 86.0f; s32 mask; s32 colorGB; if (((sMainMenuState == 0) && (sVsMenuSelection == OPTION_BR_MATCH)) || ((sMainMenuState == 1) && (sVsMenuSelection != OPTION_BR_MATCH))) { D_menu_801B93C0 = 94.0f; D_menu_801B93C8 = 88.0f; D_menu_801B93CC = 114.0f; RCP_SetupDL(&gMasterDisp, SETUPDL_83); Option_VsSelectionArrows_Draw(D_menu_801B93C0, D_menu_801B93C8, D_menu_801B93CC, 255, 255, 255); Option_Color_FlashRed(&D_menu_801B9370); } else { D_menu_801B9370 = 255.0f; } colorGB = D_menu_801B9370; mask = 0xFFFFFFFF; if (sStageSelectConfirmTimer != 0) { mask = 0x00000001; colorGB = 255; sStageSelectConfirmTimer--; if (sStageSelectConfirmTimer == 0) { sVsSubMenuFirstState = true; } } if ((gGameFrameCount & mask) != 0) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7001270, 112, 12, D_menu_801AF2A0, D_menu_801AF2A4, 1.0f, 1.0f); } if (sVsMenuSelection == OPTION_TT_MATCH) { Option_VsTimeTrialStageSelect_Draw(); } else { Option_VsStageSelect2_Draw(); } } void Option_VsTimeTrialStageSelect_Draw(void) { static f32 D_menu_801AF2A8 = 69.0f; static f32 D_menu_801AF2AC = 110.0f; static f32 D_menu_801AF2B0 = 123.0f; static f32 D_menu_801AF2B4[] = { 72.0f, 189.0f }; f32 xPos; s32 i; s32 width; s32 alpha[2]; static u8* sVsTextLevelTex[] = { aVsTextKatinaTex, aVsTextSectorZTex }; static u8* sVsLevelTex[] = { aVsKatinaTex, aVsSectorZTex }; static u16* sVsLevelTLUT[] = { aVsKatinaTLUT, aVsSectorZTLUT }; for (xPos = D_menu_801AF2A8, i = 0; i < ARRAY_COUNT(sVsTextLevelTex); i++, xPos += D_menu_801AF2B0) { if (i == gVsMenuSelection) { alpha[i] = 255; } else { alpha[i] = 32; } RCP_SetupDL(&gMasterDisp, SETUPDL_85); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, alpha[i]); Lib_TextureRect_CI8(&gMasterDisp, sVsLevelTex[i], sVsLevelTLUT[i], 48, 38, xPos, D_menu_801AF2AC, 1.0f, 1.0f); width = 48; if (i == 1) { width = 56; } RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, alpha[i]); Lib_TextureRect_IA8(&gMasterDisp, sVsTextLevelTex[i], width, 10, D_menu_801AF2B4[i], D_menu_801AF2AC + 40.0f, 1.0f, 1.0f); } } void Option_VsStageSelect2_Draw(void) { static f32 D_menu_801AF2D4 = 69.0f; static f32 D_menu_801AF2D8 = 110.0f; static f32 D_menu_801AF2DC = 123.0f; static f32 D_menu_801AF2E0[] = { 66.0f, 189.0f }; f32 xPos; s32 i; s32 alpha[3]; static u8* sVsTextLevelTex[] = { aVsTextCorneriaTex, aVsTextSectorZTex, }; static u8* sVsLevelTex[] = { aVsCorneriaTex, aVsSectorZTex, }; static u16* sVsLevelTLUT[] = { aVsCorneriaTLUT, aVsSectorZTLUT, }; for (xPos = D_menu_801AF2D4, i = 0; i < ARRAY_COUNT(sVsTextLevelTex); i++, xPos += D_menu_801AF2DC) { if (i == gVsMenuSelection) { alpha[i] = 255; } else { alpha[i] = 32; } RCP_SetupDL(&gMasterDisp, SETUPDL_85); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, alpha[i]); Lib_TextureRect_CI8(&gMasterDisp, sVsLevelTex[i], sVsLevelTLUT[i], 48, 38, xPos, D_menu_801AF2D8, 1.0f, 1.0f); RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, alpha[i]); Lib_TextureRect_IA8(&gMasterDisp, sVsTextLevelTex[i], 56, 10, D_menu_801AF2E0[i], D_menu_801AF2D8 + 40.0f, 1.0f, 1.0f); } } void Option_VsOKConfirm_Draw(void) { s32 pad[2]; s32 colorGB; s32 bitmask; Option_Color_FlashRed(&D_menu_801B91E8); colorGB = D_menu_801B91E8; bitmask = 0xFFFFFFFF; if (sOkConfirmTimer != 0) { colorGB = 255; bitmask = 0x00000001; sOkConfirmTimer--; if (sOkConfirmTimer == 0) { sVsSubMenuFirstState = true; } } if (gGameFrameCount & bitmask) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7003650, 40, 12, 143.0f, 210.0f, 1.0f, 1.0f); } } void Option_VsSelectionArrows_Draw(f32 xPos, f32 yPos, f32 offset, s32 r, s32 g, s32 b) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, r, g, b, 255); Lib_TextureRect_IA8_MirX(&gMasterDisp, D_VS_MENU_7004010, 8, 8, xPos, yPos, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7004010, 8, 8, xPos + offset, yPos, 1.0f, 1.0f); } void Option_AcceptCancel_Draw(void) { RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_IA8(&gMasterDisp, aAtoConfirmTex, 96, 10, 62.0f, 213.0f, 1.0f, 1.0f); Lib_TextureRect_IA8(&gMasterDisp, aBtoCancelTex, 96, 10, 166.0f, 213.0f, 1.0f, 1.0f); } void Option_VsBackToSubMenu(OptionId menuEntryState) { sMenuEntryState = menuEntryState; gDrawMode = DRAW_NONE; sMainMenuState = 0; D_menu_801B91B4 = 0; } // Menu card drawned below the N64 console void Option_VsMenuCard_Draw(void) { Option_Menu_Push(); Option_DrawMenuCard(sOptionVSCardList[sVsMenuCursor].frame); Matrix_Pop(&gGfxMatrix); Option_DrawCardLabel(sOptionVSCardList[sVsMenuCursor].tex); } void Option_DrawMenuLabel(void) { Option_Menu_Push(); Option_DrawMenuCard(sOptionCardList[sMainMenuCursor].frame); Matrix_Pop(&gGfxMatrix); Option_DrawCardLabel(sOptionCardList[sMainMenuCursor].tex); } void Option_DrawMenuCard(OptionCardFrame arg0) { RCP_SetupDL(&gMasterDisp, SETUPDL_17); Lib_InitOrtho(&gMasterDisp); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, arg0.x, arg0.y, arg0.z, MTXF_APPLY); Matrix_Scale(gGfxMatrix, arg0.xScale, arg0.yScale, 1.0f, MTXF_APPLY); Matrix_RotateX(gGfxMatrix, M_DTOR * 90.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_OPT_8015550); Matrix_Pop(&gGfxMatrix); Lib_InitPerspective(&gMasterDisp); } void Option_DrawMenuArwing(ArwingCursorPos arwing) { if (sDrawCursor) { Option_DrawArwing(arwing.x, arwing.y, D_menu_801B91F4, sLeftArwingCursorYrot, 90.0f, D_menu_801B91F8, 0); Option_DrawArwing(arwing.x + arwing.range, arwing.y, D_menu_801B91F4, sRightArwingCursorYrot, -90.0f, D_menu_801B91F8, 1); } } void Option_DrawArwing(f32 x, f32 y, f32 z, f32 yRot, f32 zRot, f32 scale, s32 index) { f32 dirX; f32 dirY; f32 dirZ; static int arwingCursorPrevPos = 0; bool interpolationEnabled; if (arwingCursorPrevPos != sMainMenuCursor) { // @port Skip interpolation FrameInterpolation_ShouldInterpolateFrame(false); interpolationEnabled = false; } else { // @port renable interpolation FrameInterpolation_ShouldInterpolateFrame(true); interpolationEnabled = true; // @port: Tag the transform. FrameInterpolation_RecordOpenChild("Option_DrawArwing", index); } Option_SetMenuLightPos(sArwingLightXrot, sArwingLightYrot, 100.0f, &dirX, &dirY, &dirZ); Lights_SetOneLight(&gMasterDisp, dirX, dirY, dirZ, sArwingLightColR, sArwingLightColG, sArwingLightColB, sArwingLightAmbR, sArwingLightAmbG, sArwingLightAmbB); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x, y, z, MTXF_APPLY); Matrix_Scale(gGfxMatrix, scale, scale, scale, MTXF_APPLY); Matrix_RotateZ(gGfxMatrix, M_DTOR * zRot, MTXF_APPLY); Matrix_RotateY(gGfxMatrix, M_DTOR * yRot, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); RCP_SetupDL_55(); gSPDisplayList(gMasterDisp++, aMapArwingDL); Matrix_Pop(&gGfxMatrix); if (interpolationEnabled) { // @port Pop the transform id. FrameInterpolation_RecordCloseChild(); } else { // @port renable interpolation FrameInterpolation_ShouldInterpolateFrame(true); } arwingCursorPrevPos = sMainMenuCursor; } void Option_Menu_Push(void) { Matrix_Push(&gGfxMatrix); Matrix_LookAt(gGfxMatrix, gCsCamEyeX, gCsCamEyeY, gCsCamEyeZ, gCsCamAtX, gCsCamAtY, gCsCamAtZ, 0.0f, 1.0f, 0.0f, MTXF_APPLY); } void Option_SetMenuLightPos(f32 xRot, f32 yRot, f32 zSrc, f32* dirX, f32* dirY, f32* dirZ) { Vec3f dest; Vec3f src; src.x = 0.0f; src.y = 0.0f; src.z = zSrc; Matrix_RotateY(gCalcMatrix, M_DTOR * yRot, MTXF_NEW); Matrix_RotateX(gCalcMatrix, M_DTOR * xRot, MTXF_APPLY); Matrix_MultVec3f(gCalcMatrix, &src, &dest); *dirX = dest.x; *dirY = dest.y; *dirZ = dest.z; } void Option_CardLightning_Update(void) { s32 i; f32 savedLightningXpos; if (D_menu_801B9214 != 0) { savedLightningXpos = sLightningXpos; Option_Menu_Push(); for (i = 0; i < 3; i++) { sLightningXScale = RAND_FLOAT(0.5f); sLightningYScale = 0.5f; Option_CardLightning_Draw(); sLightningXpos += 6.0f; } Matrix_Pop(&gGfxMatrix); sLightningXpos = savedLightningXpos; if (sLightningXpos < 23.0f) { sLightningXpos += 18.0f; } else { sLightningXpos = 23.0f; D_menu_801B9214 = 0; } } } void Option_CardLightning_Draw(void) { RCP_SetupDL(&gMasterDisp, SETUPDL_36); Lib_InitOrtho(&gMasterDisp); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, sLightningXpos, sLightningYpos, 0.0f, MTXF_APPLY); Matrix_Scale(gGfxMatrix, sLightningXScale, sLightningYScale, 1.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, aLightningDL); Matrix_Pop(&gGfxMatrix); Lib_InitPerspective(&gMasterDisp); } //! TODO: Enum for Texture types void Option_DrawCardLabel(OptionCardTexture tex) { if (!(tex.xScale <= 0.0f) && !(tex.yScale <= 0.0f)) { switch (tex.type) { case 1: RCP_SetupDL(&gMasterDisp, SETUPDL_78); gDPSetPrimColor(gMasterDisp++, 0, 0, tex.red, tex.green, tex.blue, tex.alpha); Lib_TextureRect_CI4(&gMasterDisp, tex.texture, tex.palette, tex.width, tex.height, tex.xPos, tex.yPos, tex.xScale, tex.yScale); break; case 2: RCP_SetupDL(&gMasterDisp, SETUPDL_78); gDPSetPrimColor(gMasterDisp++, 0, 0, tex.red, tex.green, tex.blue, tex.alpha); Lib_TextureRect_CI8(&gMasterDisp, tex.texture, tex.palette, tex.width, tex.height, tex.xPos, tex.yPos, tex.xScale, tex.yScale); break; case 0: RCP_SetupDL(&gMasterDisp, SETUPDL_76); gDPSetPrimColor(gMasterDisp++, 0, 0, tex.red, tex.green, tex.blue, tex.alpha); Lib_TextureRect_IA8(&gMasterDisp, tex.texture, tex.width, tex.height, tex.xPos, tex.yPos, tex.xScale, tex.yScale); break; case 3: RCP_SetupDL(&gMasterDisp, SETUPDL_76); gDPSetPrimColor(gMasterDisp++, 0, 0, tex.red, tex.green, tex.blue, tex.alpha); Lib_TextureRect_RGBA16(&gMasterDisp, tex.texture, tex.width, tex.height, tex.xPos, tex.yPos, tex.xScale, tex.yScale); break; } } } // Input for vertical movement of the cursor bool Option_Input_MoveCursor_Y(s32* arg0, s32 arg1, bool arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, StickInput* stick) { s32 axis; s32 x; s32 y; s32 temp; bool ret = false; if (arg1 == 0) { return ret; } temp = *arg0; x = gControllerPress[arg7].stick_x; y = -gControllerPress[arg7].stick_y; if (arg2 == true) { axis = y; if ((x > 40) || (x < -40)) { return ret; } } else { axis = x; if ((y > 40) || (y < -40)) { return ret; } } if ((axis < arg4) && (axis > -arg4)) { axis = 0; } if (!(stick->unk_4)) { if (axis != 0) { if (axis > 0) { (*arg0)++; if (*arg0 > arg1) { if (arg3 == 0) { *arg0 = 0; } else { *arg0 = arg1; } } } if (axis < 0) { (*arg0)--; if (*arg0 < 0) { if (arg3 == 0) { *arg0 = arg1; } else { *arg0 = 0; } } } stick->unk_4 = arg5 + stick->unk_0; if (stick->unk_0 > 0) { stick->unk_0 -= arg6; } } else { stick->unk_4 = 0; stick->unk_0 = arg6; } } if (((gControllerPress[0].button & D_JPAD) || (gControllerPress[0].button & U_JPAD)) && (arg2 == true)) { if (gControllerPress[0].button & D_JPAD) { (*arg0)++; if (*arg0 > arg1) { if (arg3 == 0) { *arg0 = 0; } else { *arg0 = arg1; } } } if (gControllerPress[0].button & U_JPAD) { (*arg0)--; if (*arg0 < 0) { if (arg3 == 0) { *arg0 = arg1; } else { *arg0 = 0; } } } stick->unk_4 = arg5 + stick->unk_0; if (stick->unk_0 > 0) { stick->unk_0 -= arg6; } } else if (((gControllerPress[0].button & L_JPAD) || (gControllerPress[0].button & R_JPAD)) && (arg2 == false)) { if (gControllerPress[0].button & R_JPAD) { (*arg0)++; if (*arg0 > arg1) { if (arg3 == 0) { *arg0 = 0; } else { *arg0 = arg1; } } } if (gControllerPress[0].button & L_JPAD) { (*arg0)--; if (*arg0 < 0) { if (arg3 == 0) { *arg0 = arg1; } else { *arg0 = 0; } } } stick->unk_4 = arg5 + stick->unk_0; if (stick->unk_0 > 0) { stick->unk_0 -= arg6; } } if (stick->unk_4 > 0) { stick->unk_4--; } if (temp != *arg0) { ret = true; } return ret; } // Input for horizontal selection in DataSelect s32 Option_Input_DataSelect_X(s32* arg0) { s32 ret = 0; s32 temp = *arg0; s32 x = +gControllerPress[gMainController].stick_x; s32 y = -gControllerPress[gMainController].stick_y; if ((y > 40) || (y < -40)) { return ret; } if ((x < 30) && (x > -30)) { x = 0; } if (D_menu_801B91A0 == 0) { // @port: D_PAD control if (gControllerPress[0].button & R_JPAD) { *arg0 = 0; ret = 1; D_menu_801B91A0 = 6; } else if (gControllerPress[0].button & L_JPAD) { *arg0 = 1; ret = -1; D_menu_801B91A0 = 6; } if (x != 0) { if (x > 0) { *arg0 = 0; ret = 1; } if (x < 0) { *arg0 = 1; ret = -1; } D_menu_801B91A0 = 6; } } if (D_menu_801B91A0 > 0) { D_menu_801B91A0--; } if (temp == *arg0) { ret = 0; } return ret; } // Input for horizontal selection in Sound menus bool Option_Input_Sound_X(f32* arg0, f32 arg1, f32 arg2, StickInput* arg3) { f32 var_fv1; f32 temp2; bool var_a2 = false; f32 temp = *arg0; s32 stickX = +gControllerPress[gMainController].stick_x; s32 stickY = -gControllerPress[gMainController].stick_y; static int holdTimer = 0; if (gControllerHold[gMainController].button & (L_JPAD | R_JPAD)) { holdTimer++; } else { holdTimer = 0; } if ((stickY > 10) || (stickY < -10)) { return 0; } if ((stickX < 10) && (stickX > -10)) { stickX = 0; } else if (stickX < 0) { stickX += 10; } else { stickX -= 10; } if (arg3->unk_4 == 0) { if (stickX != 0) { var_fv1 = stickX / 20.0f; arg3->unk_4 = arg3->unk_0; if (arg3->unk_0 != 0) { arg3->unk_0 -= 7; } if (arg3->unk_4 != 0) { if (stickX > 0) { var_fv1 = 1.0f; } else { var_fv1 = -1.0f; } } *arg0 += var_fv1; if (arg2 < *arg0) { *arg0 = arg2; } if (*arg0 < arg1) { *arg0 = arg1; } } else { arg3->unk_4 = 0; arg3->unk_0 = 7; } } if (gControllerPress[gMainController].button & R_JPAD) { stickX += 10; } else if (gControllerPress[gMainController].button & L_JPAD) { stickX -= 10; } if (holdTimer > 15) { if (gControllerHold[gMainController].button & L_JPAD) { var_fv1 = -1.0f; } else if (gControllerHold[gMainController].button & R_JPAD) { var_fv1 = 1.0f; } *arg0 += var_fv1; if (arg2 < *arg0) { *arg0 = arg2; } if (*arg0 < arg1) { *arg0 = arg1; } } if (gControllerPress[gMainController].button & L_JPAD) { var_fv1 = -1.0f; *arg0 += var_fv1; if (arg2 < *arg0) { *arg0 = arg2; } if (*arg0 < arg1) { *arg0 = arg1; } } else if (gControllerPress[gMainController].button & R_JPAD) { var_fv1 = 1.0f; *arg0 += var_fv1; if (arg2 < *arg0) { *arg0 = arg2; } if (*arg0 < arg1) { *arg0 = arg1; } } if (arg3->unk_4 > 0) { arg3->unk_4--; } temp2 = *arg0; if ((s32) temp2 != (s32) temp) { AUDIO_PLAY_SFX(NA_SE_COUNT_UP, gDefaultSfxSource, 4); var_a2 = true; } return var_a2; } void Option_Color_FlashRed(f32* color) { if ((s32) Math_SmoothStepToF(color, D_menu_801B91E4, 0.5f, 100.0f, 1.0f) == 0.0f) { if (*color == 32.0f) { D_menu_801B91E4 = 255.0f; } else { D_menu_801B91E4 = 32.0f; } } } s32 Option_RankInPos_Check(void) { s32 i; s32 j; s32 k; s32 m; s32 rankInPos; s32 missionTeamStatus = 0; s32 rankingTeamAlive = 0; s32 rankingLives[10]; for (i = 0; i < gMissionNumber + 1; i++) { missionTeamStatus += ((gMissionTeamStatus[i] & TEAMSTATUS_PEPPY) >> 16) & 1; missionTeamStatus += ((gMissionTeamStatus[i] & TEAMSTATUS_SLIPPY) >> 8) & 1; missionTeamStatus += (gMissionTeamStatus[i] & TEAMSTATUS_FALCO) & 1; } for (i = 0; i < RANKING_MAX; i++) { rankingLives[i] = gSaveFile.save.data.rankingLives[i]; } rankInPos = -1; // Didn't get into the ranking // Ranking for (i = 0; i < RANKING_MAX; i++) { if (gTotalHitsRanking[i] <= gTotalHits) { if (gTotalHitsRanking[i] == gTotalHits) { for (j = i; j < RANKING_MAX; j++) { if (gTotalHitsRanking[j] != gTotalHits) { rankInPos = j; break; } // Lives count if (rankingLives[j] <= gLifeCount[gPlayerNum]) { if (rankingLives[j] == gLifeCount[gPlayerNum]) { for (k = j; k < RANKING_MAX; k++) { if ((rankingLives[k] != gLifeCount[gPlayerNum]) || (gTotalHitsRanking[k] != gTotalHits)) { rankInPos = k; break; } // Team count for (rankingTeamAlive = 0, m = 0; m < 3; m++) { rankingTeamAlive += gRankingTeamAlive[k][m]; } if (missionTeamStatus > rankingTeamAlive) { rankInPos = k; break; } } } else { rankInPos = j; } break; } } } else { rankInPos = i; } break; } } return rankInPos; } void Option_NameEntry_Update(void) { switch (sMainMenuState) { case 0: Option_NameEntry_Setup(); sMainMenuState++; break; case 1: Option_NameEntry_Select(); break; case 2: Option_Ranking_SaveData(); Title_GetRankTotalHits(); D_menu_801B917C = 15; sMainMenuState++; break; case 3: if (D_menu_801B917C == 0) { gBlurAlpha = 255; gDrawMode = DRAW_NONE; sMainMenuState = 0; sMenuEntryState = OPTION_SCORE; } break; } } void Option_NameEntry_Setup(void) { s32 temp; s32 i; AUDIO_PLAY_BGM(NA_BGM_SELECT); gBlurAlpha = 208; gStarCount = 800; D_menu_801B9130 = 1; D_menu_801B9128 = 0; sNameEntryLightXrot = 0.0f; sNameEntryLightYrot = 70.0f; temp = gSaveFile.save.data.unk_EA & 0xFF; if (temp < 10) { D_menu_801B9098 = 3; D_menu_801B9138 = 1; D_menu_801B9150[0][0] = gSaveFile.save.data.rankNameEntry[temp][0] & 0xFF; D_menu_801B9150[1][0] = gSaveFile.save.data.rankNameEntry[temp][1] & 0xFF; D_menu_801B9150[2][0] = gSaveFile.save.data.rankNameEntry[temp][2] & 0xFF; for (i = 0; i < 3; i++) { D_menu_801B90A0[i] = Option_GetCharIndex(D_menu_801B9150[i][0]); D_menu_801B90B0[i] = 1; D_menu_801B9150[i][1] = 0; } } else { D_menu_801B9098 = 0; D_menu_801B9138 = 0; for (i = 0; i < 3; i++) { D_menu_801B90B0[i] = 0; D_menu_801B90A0[i] = 0; D_menu_801B9150[i][0] = 65; D_menu_801B9150[i][1] = 0; } } Option_PlanetTextures_Setup(); } void Option_NameEntry_Select(void) { switch (D_menu_801B9128) { case 0: if ((D_menu_801B9138 == 0) && (Option_Input_MoveCursor_Y(&D_menu_801B90A0[D_menu_801B9098], 36, 0, 0, 50, 5, 10, gMainController, &D_menu_801B9160[D_menu_801B9098]))) { AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4); D_menu_801B9150[D_menu_801B9098][0] = sCharMap[D_menu_801B90A0[D_menu_801B9098]]; D_menu_801B90D0[D_menu_801B9098] = 0.0f; D_menu_801B9100[D_menu_801B9098] = 0.0f; } if (gControllerPress[gMainController].button & A_BUTTON) { D_menu_801B90D0[D_menu_801B9098] = 0.0f; if (D_menu_801B9138 != 0) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); D_menu_801B9140[0] = 10; D_menu_801B9140[1] = 10; D_menu_801B9140[2] = 10; D_menu_801B9138 = -1; D_menu_801B9128 = 2; break; } if (D_menu_801B9098 < 3) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); D_menu_801B90D0[D_menu_801B9098] = 0.0f; D_menu_801B9140[D_menu_801B9098] = 15; D_menu_801B9128 = 1; break; } } if ((gControllerPress[gMainController].button & B_BUTTON) && (D_menu_801B9098 != 0)) { AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4); if (D_menu_801B9138 != 0) { D_menu_801B9138 = 0; } D_menu_801B9098--; D_menu_801B9140[D_menu_801B9098] = 15; D_menu_801B9128 = 10; } break; case 10: D_menu_801B9140[D_menu_801B9098]--; if (D_menu_801B9140[D_menu_801B9098] == 0) { D_menu_801B9128 = 0; } break; case 1: D_menu_801B9140[D_menu_801B9098]--; if (D_menu_801B9140[D_menu_801B9098] == 0) { if ((D_menu_801B9098 + 1) > 2) { D_menu_801B9138 = 1; } D_menu_801B9098++; D_menu_801B9128 = 0; } break; case 2: D_menu_801B9140[0]--; D_menu_801B9140[1]--; D_menu_801B9140[2]--; if (D_menu_801B9140[0] != 0) { break; // looks fake } D_menu_801B917C = 20; D_menu_801B9128 = 3; break; case 3: if (D_menu_801B917C == 0) { sMainMenuState = 2; } break; } } void Option_NameEntry_Draw(void) { static f32 D_menu_801AF300[] = { -120.0f, 0.0f, 120.0f }; f32 dirX; f32 dirY; f32 dirZ; s32 bitmask[3]; s32 i; static f32 D_menu_801AF30C[6] = { 51.0f, 138.0f, 118.0f, 166.0f, 138.0f, 267.0f }; static f32 D_menu_801AF324[6] = { 29.0f, 49.0f, 145.0f, 155.0f, 87.0f, 127.0f }; RCP_SetupDL(&gMasterDisp, SETUPDL_76); if (gLastGameState == GSTATE_ENDING) { gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Graphics_DisplayLargeText(D_menu_801AF30C[0], D_menu_801AF324[0], 1.0f, 1.0f, "CONGRATULATIONS"); } if (D_menu_801B9178 != 0) { return; } gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); Graphics_DisplaySmallText(D_menu_801AF30C[1], D_menu_801AF324[1], 1.0f, 1.0f, "RANK"); Graphics_DisplaySmallText(D_menu_801AF30C[2], D_menu_801AF324[2], 1.0f, 1.0f, "TOTAL HITS"); PRINTF("p:%d x:%f y:%f\n"); if (D_menu_801B9138 == 1) { if ((gGameFrameCount & 0x10) != 0) { gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); Lib_TextureRect_IA8(&gMasterDisp, aTextEnd, 32, 8, D_menu_801AF30C[5], D_menu_801AF324[5], 1.0f, 1.0f); } } Option_OrdinalNumbers_Draw(sRankInPos, D_menu_801AF30C[4], D_menu_801AF324[4]); RCP_SetupDL(&gMasterDisp, SETUPDL_76); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Graphics_DisplayLargeNumber(D_menu_801AF30C[3] - ((HUD_CountDigits(gTotalHits) - 1) * 13), D_menu_801AF324[3], gTotalHits); Map_801A9FD4(true); Option_ScrollPlanetTexture(); for (i = 0; i < 3; i++) { if (i == D_menu_801B9098) { D_menu_801B9100[i] += 1.0f; } else { D_menu_801B9100[i] = 0.0f; } bitmask[i] = 0xFFFFFFFF; if (D_menu_801B9140[i] != 0) { bitmask[i] = 0x00000001; D_menu_801B9100[i] = 0.0f; } } Option_SetMenuLightPos(sNameEntryLightXrot, sNameEntryLightYrot, 127.0f, &dirX, &dirY, &dirZ); Lights_SetOneLight(&gMasterDisp, dirX, dirY, dirZ, 255, 255, 255, 65, 70, 48); Matrix_Push(&gGfxMatrix); Matrix_LookAt(gGfxMatrix, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -100.0f, 0.0f, 1.0f, 0.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); for (i = 0; i < 3; i++) { if (gGameFrameCount & bitmask[i]) { Option_3DFont_Draw(D_menu_801B9150[i][0], D_menu_801AF300[i], 18.0f, -455.0f, 1.0f, D_menu_801B90C0[i] + D_menu_801B90F0[i], D_menu_801B90D0[i] + D_menu_801B9100[i], D_menu_801B90E0[i] + D_menu_801B9110[i]); } } Matrix_Pop(&gGfxMatrix); } void Option_Ranking_SaveData(void) { s32 i; s32 j; s32 missionHitCount; s32 originalRankIdx; PlanetId planetId; s32 currentRankIdx; u8 rankNameEntry[11][3]; u8 rankingRoute[11]; u8 rankingLives[11]; u8 rankingMedal[11]; PlanetStats planetStats[11][7]; rankNameEntry[10][0] = D_menu_801B9150[0][0]; rankNameEntry[10][1] = D_menu_801B9150[1][0]; rankNameEntry[10][2] = D_menu_801B9150[2][0]; rankingRoute[10] = gMissionNumber + 1; rankingLives[10] = gLifeCount[0]; rankingMedal[10] = 0; for (i = 0; i < ROUTE_MAX; i++) { rankingMedal[10] |= (gMissionMedal[i] << i); } for (j = 0; j < ROUTE_MAX; j++) { planetStats[10][j].unk_C = 0; missionHitCount = gMissionHitCount[j]; if (missionHitCount > 255) { missionHitCount -= 256; planetStats[10][j].unk_C = 1; } planetStats[10][j].hitCount = missionHitCount; planetId = gMissionPlanet[j]; if (gMissionPlanet[j] == PLANET_VENOM) { planetId = SAVE_SLOT_VENOM_1; } if (gMissionPlanet[j] == PLANET_SOLAR) { planetId = SAVE_SLOT_SOLAR; } planetStats[10][j].planetId = planetId; planetStats[10][j].peppyAlive = ((gMissionTeamStatus[j] & TEAMSTATUS_PEPPY) >> 16) & 1; planetStats[10][j].slippyAlive = ((gMissionTeamStatus[j] & TEAMSTATUS_SLIPPY) >> 8) & 1; planetStats[10][j].falcoAlive = (gMissionTeamStatus[j] & TEAMSTATUS_FALCO) & 1; } for (i = 0; i < RANKING_MAX; i++) { rankNameEntry[i][0] = gSaveFile.save.data.rankNameEntry[i][0]; rankNameEntry[i][1] = gSaveFile.save.data.rankNameEntry[i][1]; rankNameEntry[i][2] = gSaveFile.save.data.rankNameEntry[i][2]; rankingRoute[i] = gSaveFile.save.data.rankingRoute[i]; rankingLives[i] = gSaveFile.save.data.rankingLives[i]; rankingMedal[i] = gSaveFile.save.data.rankingMedal[i]; for (j = 0; j < ROUTE_MAX; j++) { planetStats[i][j].hitCount = gSaveFile.save.data.stats[i][j].hitCount; planetStats[i][j].planetId = gSaveFile.save.data.stats[i][j].planetId; planetStats[i][j].unk_C = gSaveFile.save.data.stats[i][j].unk_C; planetStats[i][j].peppyAlive = gSaveFile.save.data.stats[i][j].peppyAlive; planetStats[i][j].falcoAlive = gSaveFile.save.data.stats[i][j].falcoAlive; planetStats[i][j].slippyAlive = gSaveFile.save.data.stats[i][j].slippyAlive; } } for (currentRankIdx = 0, i = 0; i < RANKING_MAX; i++) { if (i == sRankInPos) { originalRankIdx = currentRankIdx; currentRankIdx = 10; } gSaveFile.save.data.rankNameEntry[i][0] = rankNameEntry[currentRankIdx][0]; gSaveFile.save.data.rankNameEntry[i][1] = rankNameEntry[currentRankIdx][1]; gSaveFile.save.data.rankNameEntry[i][2] = rankNameEntry[currentRankIdx][2]; gSaveFile.save.data.rankingRoute[i] = rankingRoute[currentRankIdx]; gSaveFile.save.data.rankingLives[i] = rankingLives[currentRankIdx]; gSaveFile.save.data.rankingMedal[i] = rankingMedal[currentRankIdx]; for (j = 0; j < ROUTE_MAX; j++) { gSaveFile.save.data.stats[i][j].hitCount = planetStats[currentRankIdx][j].hitCount; gSaveFile.save.data.stats[i][j].planetId = planetStats[currentRankIdx][j].planetId; gSaveFile.save.data.stats[i][j].unk_C = planetStats[currentRankIdx][j].unk_C; gSaveFile.save.data.stats[i][j].peppyAlive = planetStats[currentRankIdx][j].peppyAlive; gSaveFile.save.data.stats[i][j].falcoAlive = planetStats[currentRankIdx][j].falcoAlive; gSaveFile.save.data.stats[i][j].slippyAlive = planetStats[currentRankIdx][j].slippyAlive; } if (i == sRankInPos) { currentRankIdx = originalRankIdx; } else { currentRankIdx++; } } gSaveFile.save.data.unk_EA = sRankInPos; Save_Write(); } void Option_3DFont_Draw(s32 character, f32 x, f32 y, f32 z, f32 scale, f32 xAngle, f32 yAngle, f32 zAngle) { static Gfx* s3DFont[37] = { aFont3D_A, aFont3D_B, aFont3D_C, aFont3D_D, aFont3D_E, aFont3D_F, aFont3D_G, aFont3D_H, aFont3D_I, aFont3D_J, aFont3D_K, aFont3D_L, aFont3D_M, aFont3D_N, aFont3D_O, aFont3D_P, aFont3D_Q, aFont3D_R, aFont3D_S, aFont3D_T, aFont3D_U, aFont3D_V, aFont3D_W, aFont3D_X, aFont3D_Y, aFont3D_Z, aFont3D_0, aFont3D_1, aFont3D_2, aFont3D_3, aFont3D_4, aFont3D_5, aFont3D_6, aFont3D_7, aFont3D_8, aFont3D_9, aFont3D_DOT, }; s32 i; s32 charIndex = -1; for (i = 0; sCharMap[i] != NULL; i++) { if (character == sCharMap[i]) { charIndex = i; break; } } if (charIndex == -1) { return; } RCP_SetupDL(&gMasterDisp, SETUPDL_23); gSPTexture(gMasterDisp++, 2500, 200, 0, G_TX_RENDERTILE, G_ON); gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, x, y, z, MTXF_APPLY); Matrix_RotateZ(gGfxMatrix, M_DTOR * zAngle, MTXF_APPLY); Matrix_RotateX(gGfxMatrix, M_DTOR * xAngle, MTXF_APPLY); Matrix_RotateY(gGfxMatrix, M_DTOR * yAngle, MTXF_APPLY); Matrix_Scale(gGfxMatrix, scale, scale, scale, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, s3DFont[charIndex]); Matrix_Pop(&gGfxMatrix); } s32 Option_GetCharIndex(s32 character) { s32 charIdx = 0; // 'for()' causes instruction reorder while (sCharMap[charIdx] != 0) { if (sCharMap[charIdx] == character) { break; } charIdx++; } if (sCharMap[charIdx] == 0) { charIdx = 0; } return charIdx; } void Option_Score_Update(void) { switch (sMainMenuState) { case 0: Option_Ranking_Setup(); D_menu_801B93E4 = sRankInPos; if ((sRankInPos < 0) || (sRankInPos >= 10)) { D_menu_801B93E4 = 0; } D_menu_801B91D4 = 114.0f - D_menu_801B93E4 * 130.0f; D_menu_801B91D8 = -6.0f + D_menu_801B93E4 * 130.0f; sOptionCardList[3].tex.xPos = sOptionCardCurTextPosX[3]; sOptionCardList[3].tex.yPos = 23.0f; sOptionCardList[3].tex.xScale = 1.0f; sOptionCardList[3].tex.yScale = 1.0f; sOptionCardList[3].drawTex = true; sOptionCardList[3].frame.y = 90.0f; sOptionCardList[3].frame.xScale = 0.4f; sOptionCardList[3].frame.yScale = 0.21f; sOptionCardList[3].drawFrame = true; sMainMenuState++; break; case 1: Option_Score_Update2(); break; } } void Option_Score_Update2(void) { Option_Ranking2_Cursor(); if (gControllerPress[gMainController].button & (START_BUTTON | A_BUTTON | B_BUTTON | D_CBUTTONS | L_CBUTTONS | U_CBUTTONS)) { AUDIO_PLAY_SFX(NA_SE_DECIDE, gDefaultSfxSource, 4); gDrawMode = DRAW_NONE; sMainMenuState = 0; if (gLastGameState == GSTATE_GAME_OVER) { gStarCount = 0; gGameState = GSTATE_INIT; gLifeCount[0] = 2; gTotalHits = 0; } else if (gLastGameState == GSTATE_ENDING) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM, 1); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 1); sMenuEntryState = OPTION_INVOICE; } } } void Option_Score_Draw(void) { Option_RankingMenu2_Draw(); Option_Menu_Push(); Option_DrawMenuCard(sOptionCardList[3].frame); Matrix_Pop(&gGfxMatrix); Option_DrawCardLabel(sOptionCardList[3].tex); } void Option_Invoice_Update(void) { switch (sMainMenuState) { case 0: gStarCount = 0; gBgColor = 0; gFillScreenRed = 0; gFillScreenGreen = 0; gFillScreenBlue = 0; gFillScreenAlpha = 0; D_menu_801B9090 = 0; D_menu_801B9178 = 30; sMainMenuState++; break; case 1: if (D_menu_801B9178 == 0) { if (((gTotalHits * 64) >= 50000) && ((gTotalHits * 64) < 70000)) { AUDIO_PLAY_SFX(NA_SE_VO_PEPPER_CONSENT, gDefaultSfxSource, 4); } if ((gTotalHits * 64) >= 70000) { AUDIO_PLAY_SFX(NA_SE_VO_PEPPER_SURPRISE, gDefaultSfxSource, 4); } D_menu_801B9178 = 20; sMainMenuState++; } break; case 2: if ((D_menu_801B9178 == 0) && (gControllerPress[gMainController].button & (START_BUTTON | A_BUTTON | B_BUTTON | D_CBUTTONS | L_CBUTTONS | U_CBUTTONS))) { AUDIO_PLAY_SFX(NA_SE_STARFOX_SEAL, gDefaultSfxSource, 4); D_menu_801B9090 = 1; D_menu_801B9178 = 60; sMainMenuState++; } break; case 3: if (D_menu_801B9178 == 0) { gStarCount = 0; gGameState = GSTATE_INIT; gDrawMode = DRAW_NONE; *gLifeCount = 2; gTotalHits = 0; } break; } } void Option_InvoiceDraw(void) { s32 i; s32 temp_a0; static f32 D_menu_801AF3D0[8] = { 96.0f, 31.0f, 32.0f, 80.0f, 86.0f, 213.0f, 275.0f, 276.0f }; static f32 D_menu_801AF3F0[8] = { 24.0f, 57.0f, 92.0f, 162.0f, 163.0f, 171.0f, 103.0f, 131.0f }; static s32 D_menu_801AF410 = 0; Graphics_FillRectangle(&gMasterDisp, 25, 18, SCREEN_WIDTH - 25, SCREEN_HEIGHT - 18, 255, 255, 255, 255); RCP_SetupDL(&gMasterDisp, SETUPDL_78); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); Lib_TextureRect_CI4(&gMasterDisp, D_OPT_8000000, D_OPT_8000680, 128, 16, D_menu_801AF3D0[0], D_menu_801AF3F0[0], 1.0f, 1.0f); Lib_TextureRect_CI4(&gMasterDisp, D_OPT_8000000 + 128 * 16 / 2, D_OPT_8000680, 128, 10, D_menu_801AF3D0[0], D_menu_801AF3F0[0] + 16.0f, 1.0f, 1.0f); for (i = 0; i < 2; i++) { Lib_TextureRect_CI4(&gMasterDisp, D_OPT_80006A0 + (256 * 16 * i) / 2, D_OPT_80017A0, 256, 16, D_menu_801AF3D0[1], D_menu_801AF3F0[1] + (16 * i), 1.0f, 1.0f); } Lib_TextureRect_CI4(&gMasterDisp, D_OPT_80006A0 + 256 * 32 / 2, D_OPT_80017A0, 256, 2, D_menu_801AF3D0[1], D_menu_801AF3F0[1] + 32.0f, 1.0f, 1.0f); for (i = 0; i < 4; i++) { Lib_TextureRect_CI4(&gMasterDisp, D_OPT_80017C0 + (256 * 16 * i) / 2, D_OPT_80038C0, 256, 16, D_menu_801AF3D0[2], D_menu_801AF3F0[2] + (16 * i), 1.0f, 1.0f); } Lib_TextureRect_CI4(&gMasterDisp, D_OPT_80017C0 + 256 * 16 * 4 / 2, D_OPT_80038C0, 256, 2, D_menu_801AF3D0[2], D_menu_801AF3F0[2] + 64.0f, 1.0f, 1.0f); RCP_SetupDL(&gMasterDisp, SETUPDL_76); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); for (i = 0; i < 30; i++) { Lib_TextureRect_RGBA16(&gMasterDisp, D_OPT_800E170 + (188 * 2 * i), 188, 2, D_menu_801AF3D0[3], D_menu_801AF3F0[3] + (2.0f * i), 1.0f, 1.0f); } gDPSetPrimColor(gMasterDisp++, 0, 0, 0, 0, 0, 255); Graphics_DisplayLargeNumber(D_menu_801AF3D0[6] - ((HUD_CountDigits(gTotalHits) - 1) * 13), D_menu_801AF3F0[6], gTotalHits); temp_a0 = gTotalHits * 64; Graphics_DisplayLargeNumber(D_menu_801AF3D0[7] - ((HUD_CountDigits(temp_a0) - 1) * 13), D_menu_801AF3F0[7], temp_a0); if (D_menu_801B9090) { gDPSetPrimColor(gMasterDisp++, 0, 0, 120, 0, 0, 192); for (i = 0; i < 3; i++) { Lib_TextureRect_IA8(&gMasterDisp, D_OPT_800D1F0 + (80 * 16 * i), 80, 16, D_menu_801AF3D0[5], D_menu_801AF3F0[5] + (16.0f * i), 1.0f, 1.0f); } } /** * Debug: The following code was probably left out by mistake, * It lets you move the graphics on the bill at the end with the 4th controller, * programmers probably used it to know which position values to hardcode in place. */ if (gControllerPress[3].button & R_TRIG) { D_menu_801AF410++; if (D_menu_801AF410 > 7) { D_menu_801AF410 = 0; } } if (gControllerPress[3].button & L_TRIG) { D_menu_801AF410--; if (D_menu_801AF410 < 0) { D_menu_801AF410 = 7; } } if (gControllerHold[3].button & U_JPAD) { D_menu_801AF3F0[D_menu_801AF410] -= 1.0f; } if (gControllerHold[3].button & D_JPAD) { D_menu_801AF3F0[D_menu_801AF410] += 1.0f; } if (gControllerHold[3].button & L_JPAD) { D_menu_801AF3D0[D_menu_801AF410] -= 1.0f; } if (gControllerHold[3].button & R_JPAD) { D_menu_801AF3D0[D_menu_801AF410] += 1.0f; } }