#include "z_kaleido_scope.h" #include #include "textures/item_name_static/item_name_static.h" #include "textures/icon_item_static/icon_item_static.h" #include "textures/icon_item_24_static/icon_item_24_static.h" #include "textures/icon_item_nes_static/icon_item_nes_static.h" #include "textures/icon_item_ger_static/icon_item_ger_static.h" #include "textures/icon_item_fra_static/icon_item_fra_static.h" #include "textures/icon_item_gameover_static/icon_item_gameover_static.h" #include "textures/icon_item_gameover_static/icon_item_gameover_static.h" #include "textures/map_name_static/map_name_static.h" #include "textures/map_48x85_static/map_48x85_static.h" #include "vt.h" #include "soh/frame_interpolation.h" static void* sEquipmentFRATexs[] = { gPauseEquipment00FRATex, gPauseEquipment01Tex, gPauseEquipment02Tex, gPauseEquipment03Tex, gPauseEquipment04Tex, gPauseEquipment10FRATex, gPauseEquipment11Tex, gPauseEquipment12Tex, gPauseEquipment13Tex, gPauseEquipment14Tex, gPauseEquipment20FRATex, gPauseEquipment21Tex, gPauseEquipment22Tex, gPauseEquipment23Tex, gPauseEquipment24Tex, }; static void* sSelectItemFRATexs[] = { gPauseSelectItem00FRATex, gPauseSelectItem01Tex, gPauseSelectItem02Tex, gPauseSelectItem03Tex, gPauseSelectItem04Tex, gPauseSelectItem10FRATex, gPauseSelectItem11Tex, gPauseSelectItem12Tex, gPauseSelectItem13Tex, gPauseSelectItem14Tex, gPauseSelectItem20FRATex, gPauseSelectItem21Tex, gPauseSelectItem22Tex, gPauseSelectItem23Tex, gPauseSelectItem24Tex, }; static void* sMapFRATexs[] = { gPauseMap00Tex, gPauseMap01Tex, gPauseMap02Tex, gPauseMap03Tex, gPauseMap04Tex, gPauseMap10FRATex, gPauseMap11Tex, gPauseMap12Tex, gPauseMap13Tex, gPauseMap14Tex, gPauseMap20Tex, gPauseMap21Tex, gPauseMap22Tex, gPauseMap23Tex, gPauseMap24Tex, }; static void* sQuestStatusFRATexs[] = { gPauseQuestStatus00Tex, gPauseQuestStatus01Tex, gPauseQuestStatus02Tex, gPauseQuestStatus03Tex, gPauseQuestStatus04Tex, gPauseQuestStatus10FRATex, gPauseQuestStatus11Tex, gPauseQuestStatus12Tex, gPauseQuestStatus13Tex, gPauseQuestStatus14Tex, gPauseQuestStatus20Tex, gPauseQuestStatus21Tex, gPauseQuestStatus22Tex, gPauseQuestStatus23Tex, gPauseQuestStatus24Tex, }; static void* sSaveFRATexs[] = { gPauseSave00FRATex, gPauseSave01Tex, gPauseSave02Tex, gPauseSave03Tex, gPauseSave04Tex, gPauseSave10FRATex, gPauseSave11Tex, gPauseSave12Tex, gPauseSave13Tex, gPauseSave14Tex, gPauseSave20FRATex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex, }; static void* sEquipmentGERTexs[] = { gPauseEquipment00GERTex, gPauseEquipment01Tex, gPauseEquipment02Tex, gPauseEquipment03Tex, gPauseEquipment04Tex, gPauseEquipment10GERTex, gPauseEquipment11Tex, gPauseEquipment12Tex, gPauseEquipment13Tex, gPauseEquipment14Tex, gPauseEquipment20GERTex, gPauseEquipment21Tex, gPauseEquipment22Tex, gPauseEquipment23Tex, gPauseEquipment24Tex, }; static void* sSelectItemGERTexs[] = { gPauseSelectItem00GERTex, gPauseSelectItem01Tex, gPauseSelectItem02Tex, gPauseSelectItem03Tex, gPauseSelectItem04Tex, gPauseSelectItem10GERTex, gPauseSelectItem11Tex, gPauseSelectItem12Tex, gPauseSelectItem13Tex, gPauseSelectItem14Tex, gPauseSelectItem20GERTex, gPauseSelectItem21Tex, gPauseSelectItem22Tex, gPauseSelectItem23Tex, gPauseSelectItem24Tex, }; static void* sMapGERTexs[] = { gPauseMap00Tex, gPauseMap01Tex, gPauseMap02Tex, gPauseMap03Tex, gPauseMap04Tex, gPauseMap10GERTex, gPauseMap11Tex, gPauseMap12Tex, gPauseMap13Tex, gPauseMap14Tex, gPauseMap20Tex, gPauseMap21Tex, gPauseMap22Tex, gPauseMap23Tex, gPauseMap24Tex, }; static void* sQuestStatusGERTexs[] = { gPauseQuestStatus00Tex, gPauseQuestStatus01Tex, gPauseQuestStatus02Tex, gPauseQuestStatus03Tex, gPauseQuestStatus04Tex, gPauseQuestStatus10GERTex, gPauseQuestStatus11Tex, gPauseQuestStatus12Tex, gPauseQuestStatus13Tex, gPauseQuestStatus14Tex, gPauseQuestStatus20Tex, gPauseQuestStatus21Tex, gPauseQuestStatus22Tex, gPauseQuestStatus23Tex, gPauseQuestStatus24Tex, }; static void* sSaveGERTexs[] = { gPauseSave00Tex, gPauseSave01Tex, gPauseSave02Tex, gPauseSave03Tex, gPauseSave04Tex, gPauseSave10GERTex, gPauseSave11Tex, gPauseSave12Tex, gPauseSave13Tex, gPauseSave14Tex, gPauseSave20GERTex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex, }; static void* sEquipmentENGTexs[] = { gPauseEquipment00Tex, gPauseEquipment01Tex, gPauseEquipment02Tex, gPauseEquipment03Tex, gPauseEquipment04Tex, gPauseEquipment10ENGTex, gPauseEquipment11Tex, gPauseEquipment12Tex, gPauseEquipment13Tex, gPauseEquipment14Tex, gPauseEquipment20Tex, gPauseEquipment21Tex, gPauseEquipment22Tex, gPauseEquipment23Tex, gPauseEquipment24Tex, }; static void* sSelectItemENGTexs[] = { gPauseSelectItem00ENGTex, gPauseSelectItem01Tex, gPauseSelectItem02Tex, gPauseSelectItem03Tex, gPauseSelectItem04Tex, gPauseSelectItem10ENGTex, gPauseSelectItem11Tex, gPauseSelectItem12Tex, gPauseSelectItem13Tex, gPauseSelectItem14Tex, gPauseSelectItem20ENGTex, gPauseSelectItem21Tex, gPauseSelectItem22Tex, gPauseSelectItem23Tex, gPauseSelectItem24Tex, }; static void* sMapENGTexs[] = { gPauseMap00Tex, gPauseMap01Tex, gPauseMap02Tex, gPauseMap03Tex, gPauseMap04Tex, gPauseMap10ENGTex, gPauseMap11Tex, gPauseMap12Tex, gPauseMap13Tex, gPauseMap14Tex, gPauseMap20Tex, gPauseMap21Tex, gPauseMap22Tex, gPauseMap23Tex, gPauseMap24Tex, }; static void* sQuestStatusENGTexs[] = { gPauseQuestStatus00ENGTex, gPauseQuestStatus01Tex, gPauseQuestStatus02Tex, gPauseQuestStatus03Tex, gPauseQuestStatus04Tex, gPauseQuestStatus10ENGTex, gPauseQuestStatus11Tex, gPauseQuestStatus12Tex, gPauseQuestStatus13Tex, gPauseQuestStatus14Tex, gPauseQuestStatus20ENGTex, gPauseQuestStatus21Tex, gPauseQuestStatus22Tex, gPauseQuestStatus23Tex, gPauseQuestStatus24Tex, }; static void* sSaveENGTexs[] = { gPauseSave00Tex, gPauseSave01Tex, gPauseSave02Tex, gPauseSave03Tex, gPauseSave04Tex, gPauseSave10ENGTex, gPauseSave11Tex, gPauseSave12Tex, gPauseSave13Tex, gPauseSave14Tex, gPauseSave20Tex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex, }; static void* sGameOverTexs[] = { gPauseSave00Tex, gPauseSave01Tex, gPauseSave02Tex, gPauseSave03Tex, gPauseSave04Tex, gPauseGameOver10Tex, gPauseSave11Tex, gPauseSave12Tex, gPauseSave13Tex, gPauseSave14Tex, gPauseSave20Tex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex, }; static void* sDungeonMapTexs[] = { gDekuTreePauseScreenMapFloor3LeftTex, gDekuTreePauseScreenMapFloor3RightTex, gDekuTreePauseScreenMapFloor2LeftTex, gDekuTreePauseScreenMapFloor2RightTex, gDekuTreePauseScreenMapFloor1LeftTex, gDekuTreePauseScreenMapFloor1RightTex, gDekuTreePauseScreenMapBasement1LeftTex, gDekuTreePauseScreenMapBasement1RightTex, gDekuTreePauseScreenMapBasement2LeftTex, gDekuTreePauseScreenMapBasement2RightTex, gDodongosCavernPauseScreenMapFloor2LeftTex, gDodongosCavernPauseScreenMapFloor2RightTex, gDodongosCavernPauseScreenMapFloor1LeftTex, gDodongosCavernPauseScreenMapFloor1RightTex, gJabuPauseScreenMapFloor1LeftTex, gJabuPauseScreenMapFloor1RightTex, gJabuPauseScreenMapBasement1LeftTex, gJabuPauseScreenMapBasement1RightTex, gForestTemplePauseScreenMapFloor2LeftTex, gForestTemplePauseScreenMapFloor2RightTex, gForestTemplePauseScreenMapFloor1LeftTex, gForestTemplePauseScreenMapFloor1RightTex, gForestTemplePauseScreenMapBasement1LeftTex, gForestTemplePauseScreenMapBasement1RightTex, gForestTemplePauseScreenMapBasement2LeftTex, gForestTemplePauseScreenMapBasement2RightTex, gFireTemplePauseScreenMapFloor5LeftTex, gFireTemplePauseScreenMapFloor5RightTex, gFireTemplePauseScreenMapFloor4LeftTex, gFireTemplePauseScreenMapFloor4RightTex, gFireTemplePauseScreenMapFloor3LeftTex, gFireTemplePauseScreenMapFloor3RightTex, gFireTemplePauseScreenMapFloor2LeftTex, gFireTemplePauseScreenMapFloor2RightTex, gFireTemplePauseScreenMapFloor1LeftTex, gFireTemplePauseScreenMapFloor1RightTex, gWaterTemplePauseScreenMapFloor3LeftTex, gWaterTemplePauseScreenMapFloor3RightTex, gWaterTemplePauseScreenMapFloor2LeftTex, gWaterTemplePauseScreenMapFloor2RightTex, gWaterTemplePauseScreenMapFloor1LeftTex, gWaterTemplePauseScreenMapFloor1RightTex, gWaterTemplePauseScreenMapBasement1LeftTex, gWaterTemplePauseScreenMapBasement1RightTex, gSpiritTemplePauseScreenMapFloor4LeftTex, gSpiritTemplePauseScreenMapFloor4RightTex, gSpiritTemplePauseScreenMapFloor3LeftTex, gSpiritTemplePauseScreenMapFloor3RightTex, gSpiritTemplePauseScreenMapFloor2LeftTex, gSpiritTemplePauseScreenMapFloor2RightTex, gSpiritTemplePauseScreenMapFloor1LeftTex, gSpiritTemplePauseScreenMapFloor1RightTex, gShadowTemplePauseScreenMapBasement1LeftTex, gShadowTemplePauseScreenMapBasement1RightTex, gShadowTemplePauseScreenMapBasement2LeftTex, gShadowTemplePauseScreenMapBasement2RightTex, gShadowTemplePauseScreenMapBasement3LeftTex, gShadowTemplePauseScreenMapBasement3RightTex, gShadowTemplePauseScreenMapBasement4LeftTex, gShadowTemplePauseScreenMapBasement4RightTex, gBottomOfTheWellPauseScreenMapBasement1LeftTex, gBottomOfTheWellPauseScreenMapBasement1RightTex, gBottomOfTheWellPauseScreenMapBasement2LeftTex, gBottomOfTheWellPauseScreenMapBasement2RightTex, gBottomOfTheWellPauseScreenMapBasement3LeftTex, gBottomOfTheWellPauseScreenMapBasement3RightTex, gIceCavernPauseScreenMapFloor1LeftTex, gIceCavernPauseScreenMapFloor1RightTex, }; static void* sEquipmentTexs[] = { sEquipmentENGTexs, sEquipmentGERTexs, sEquipmentFRATexs, }; static void* sSelectItemTexs[] = { sSelectItemENGTexs, sSelectItemGERTexs, sSelectItemFRATexs, }; static void* sMapTexs[] = { sMapENGTexs, sMapGERTexs, sMapFRATexs, }; static void* sQuestStatusTexs[] = { sQuestStatusENGTexs, sQuestStatusGERTexs, sQuestStatusFRATexs, }; static void* sSaveTexs[] = { sSaveENGTexs, sSaveGERTexs, sSaveFRATexs, }; static void* iconNameTextures[] = { gDekuStickItemNameENGTex, gDekuNutItemNameENGTex, gBombItemNameENGTex, gFairyBowItemNameENGTex, gFireArrowItemNameENGTex, gDinsFireItemNameENGTex, gFairySlingshotItemNameENGTex, gFairyOcarinaItemNameENGTex, gOcarinaOfTimeItemNameENGTex, gBombchuItemNameENGTex, gHookshotItemNameENGTex, gLongshotItemNameENGTex, gIceArrowItemNameENGTex, gFaroresWindItemNameENGTex, gBoomerangItemNameENGTex, gLensItemNameENGTex, gMagicBeansItemNameENGTex, gMegatonHammerItemNameENGTex, gLightArrowItemNameENGTex, gNayrusLoveItemNameENGTex, gEmptyBottleItemNameENGTex, gRedPotionItemNameENGTex, gGreenPotionItemNameENGTex, gBluePotionItemNameENGTex, gBottledFairyItemNameENGTex, gFishItemNameENGTex, gFullMilkItemNameENGTex, gRutosLetterItemNameENGTex, gBlueFireItemNameENGTex, gBugItemNameENGTex, gBigPoeItemNameENGTex, gHalfMilkItemNameENGTex, gPoeItemNameENGTex, gWeirdEggItemNameENGTex, gCuccoItemNameENGTex, gZeldasLetterItemNameENGTex, gKeatonMaskItemNameENGTex, gSkullMaskItemNameENGTex, gSpookyMaskItemNameENGTex, gBunnyHoodItemNameENGTex, gGoronMaskItemNameENGTex, gZoraMaskItemNameENGTex, gGerudoMaskItemNameENGTex, gMaskofTruthItemNameENGTex, gSOLDOUTItemNameENGTex, gPocketEggItemNameENGTex, gPocketCuccoItemNameENGTex, gCojiroItemNameENGTex, gOddMushroomItemNameENGTex, gOddPotionItemNameENGTex, gPoachersSawItemNameENGTex, gBrokenGoronsSwordItemNameENGTex, gPrescriptionItemNameENGTex, gEyeBallFrogItemNameENGTex, gEyeDropsItemNameENGTex, gClaimCheckItemNameENGTex, gUnusedWindMedallionItemName1JPNTex, gUnusedFireMedallionItemName1JPNTex, gUnusedIceMedallionItemName1JPNTex, gKokiriSwordItemNameENGTex, gMasterSwordItemNameENGTex, gGiantsKnifeItemNameENGTex, gDekuShieldItemNameENGTex, gHylianShieldItemNameENGTex, gMirrorShieldItemNameENGTex, gKokiriTunicItemNameENGTex, gGoronTunicItemNameENGTex, gZoraTunicItemNameENGTex, gKokiriBootsItemNameENGTex, gIronBootsItemNameENGTex, gHoverBootsItemNameENGTex, gBulletBag30ItemNameENGTex, gBulletBag40ItemNameENGTex, gBulletBag50ItemNameENGTex, gQuiver30ItemNameENGTex, gQuiver40ItemNameENGTex, gQuiver50ItemNameENGTex, gBombBag20ItemNameENGTex, gBombBag30ItemNameENGTex, gBombBag40ItemNameENGTex, gGoronsBraceletItemNameENGTex, gSilverGauntletsItemNameENGTex, gGoldenGauntletsItemNameENGTex, gSilverScaleItemNameENGTex, gGoldenScaleItemNameENGTex, gBrokenGiantsKnifeItemNameENGTex, gUnusedBossKeyItemName1JPNTex, gUnusedBossKeyItemName2JPNTex, gUnusedBossKeyItemName3JPNTex, gUnusedBossKeyItemName4JPNTex, gMinuetOfForestItemNameENGTex, gBoleroOfFireItemNameENGTex, gSerenadeOfWaterItemNameENGTex, gRequiemOfSpiritItemNameENGTex, gNocturneOfShadowItemNameENGTex, gPreludeOfLightItemNameENGTex, gZeldasLullabyItemNameENGTex, gEponasSongItemNameENGTex, gSariasSongItemNameENGTex, gSunsSongItemNameENGTex, gSongOfTimeItemNameENGTex, gSongOfStormsItemNameENGTex, gForestMedallionItemNameENGTex, gFireMedallionItemNameENGTex, gWaterMedallionItemNameENGTex, gSpiritMedallionItemNameENGTex, gShadowMedallionItemNameENGTex, gLightMedallionItemNameENGTex, gKokiriEmeraldItemNameENGTex, gGoronsRubyItemNameENGTex, gZorasSapphireItemNameENGTex, gStoneofAgonyItemNameENGTex, gGerudosCardItemNameENGTex, gGoldSkulltulaItemNameENGTex, gPieceOfHeartItemNameENGTex, gUnusedPieceOfHeartItemName1JPNTex, gUnusedBigKeyItemNameENGTex, gCompassItemNameENGTex, gDungeonMapItemNameENGTex, gUnusedBossKeyItemName5JPNTex, gUnusedBossKeyItemName6JPNTex, gUnusedBossKeyItemName7JPNTex, gBiggoronsSwordItemNameENGTex, gDekuStickItemNameGERTex, gDekuNutItemNameGERTex, gBombItemNameItemNameGERTex, gFairyBowItemNameGERTex, gFireArrowItemNameUnk2GERTex, gDinsFireItemNameGERTex, gFairySlingshotItemNameGERTex, gFairyOcarinaItemNameGERTex, gOcarinaOfTimeItemNameGERTex, gBombchuItemNameGERTex, gHookshotItemNameGERTex, gLongshotItemNameGERTex, gIceArrowItemNameGERTex, gFaroresWindItemNameGERTex, gBoomerangItemNameGERTex, gLensItemNameGERTex, gMagicBeansItemNameGERTex, gMegatonHammerItemNameGERTex, gLightArrowItemNameGERTex, gNayrusLoveItemNameGERTex, gEmptyBottleItemNameGERTex, gRedPotionItemNameGERTex, gGreenPotionItemNameGERTex, gBluePotionItemNameGERTex, gBottledFairyItemNameGERTex, gFishItemNameGERTex, gFullMilkItemNameGERTex, gRutosLetterItemNameGERTex, gBlueFireItemNameGERTex, gBugItemNameGERTex, gBigPoeItemNameGERTex, gHalfMilkItemNameGERTex, gPoeItemNameGERTex, gWeirdEggItemNameGERTex, gCuccoItemNameGERTex, gZeldasLetterItemNameGERTex, gKeatonMaskItemNameGERTex, gSkullMaskItemNameGERTex, gSpookyMaskItemNameGERTex, gBunnyHoodItemNameGERTex, gGoronMaskItemNameGERTex, gZoraMaskItemNameGERTex, gGerudoMaskItemNameGERTex, gMaskofTruthItemNameGERTex, gSOLDOUTItemNameGERTex, gPocketEggItemNameGERTex, gPocketCuccoItemNameGERTex, gCojiroItemNameGERTex, gOddMushroomItemNameGERTex, gOddPotionItemNameGERTex, gPoachersSawItemNameGERTex, gBrokenGoronsSwordItemNameGERTex, gPrescriptionItemNameGERTex, gEyeBallFrogItemNameGERTex, gEyeDropsItemNameGERTex, gClaimCheckItemNameGERTex, gUnusedWindMedallionItemName2JPNTex, gUnusedFireMedallionItemName2JPNTex, gUnusedIceMedallionItemName2JPNTex, gKokiriSwordItemNameGERTex, gMasterSwordItemNameGERTex, gGiantsKnifeItemNameGERTex, gDekuShieldItemNameGERTex, gHylianShieldItemNameGERTex, gMirrorShieldItemNameGERTex, gKokiriTunicItemNameGERTex, gGoronTunicItemNameGERTex, gZoraTunicItemNameGERTex, gKokiriBootsItemNameGERTex, gIronBootsItemNameGERTex, gHoverBootsItemNameGERTex, gBulletBag30ItemNameGERTex, gBulletBag40ItemNameGERTex, gBulletBag50ItemNameGERTex, gQuiver30ItemNameGERTex, gQuiver40ItemNameGERTex, gQuiver50ItemNameGERTex, gBombBag20ItemNameGERTex, gBombBag30ItemNameGERTex, gBombBag40ItemNameGERTex, gGoronsBraceletItemNameGERTex, gSilverGauntletsItemNameGERTex, gGoldenGauntletsItemNameGERTex, gSilverScaleItemNameGERTex, gGoldenScaleItemNameGERTex, gBrokenGiantsKnifeItemNameGERTex, gUnusedBossKeyItemName8JPNTex, gUnusedBossKeyItemName9JPNTex, gUnusedBossKeyItemName10JPNTex, gUnusedBossKeyItemName11JPNTex, gMinuetOfForestItemNameGERTex, gBoleroOfFireItemNameGERTex, gSerenadeOfWaterItemNameGERTex, gRequiemOfSpiritItemNameGERTex, gNocturneOfShadowItemNameGERTex, gPreludeOfLightItemNameGERTex, gZeldasLullabyItemNameGERTex, gEponasSongItemNameGERTex, gSariasSongItemNameGERTex, gSunsSongItemNameGERTex, gSongOfTimeItemNameGERTex, gSongOfStormsItemNameGERTex, gForestMedallionItemNameGERTex, gFireMedallionItemNameGERTex, gWaterMedallionItemNameGERTex, gSpiritMedallionItemNameGERTex, gShadowMedallionItemNameGERTex, gLightMedallionItemNameGERTex, gKokiriEmeraldItemNameGERTex, gGoronsRubyItemNameGERTex, gZorasSapphireItemNameGERTex, gStoneofAgonyItemNameGERTex, gGerudosCardItemNameGERTex, gGoldSkulltulaItemNameGERTex, gHeartContainerItemNameGERTex, gUnusedPieceOfHeartItemName2JPNTex, gBigKeyItemNameGERTex, gCompassItemNameGERTex, gDungeonMapItemNameGERTex, gUnusedBossKeyItemName12JPNTex, gUnusedBossKeyItemName13JPNTex, gUnusedBossKeyItemName14JPNTex, gBiggoronsSwordItemNameGERTex, gDekuStickItemNameFRATex, gDekuNutItemNameFRATex, gBombItemNameFRATex, gFairyBowItemNameFRATex, gFireArrowItemNameFRATex, gDinsFireItemNameFRATex, gFairySlingshotItemNameFRATex, gFairyOcarinaItemNameFRATex, gOcarinaOfTimeItemNameFRATex, gBombchuItemNameFRATex, gHookshotItemNameFRATex, gLongshotItemNameFRATex, gIceArrowItemNameFRATex, gFaroresWindItemNameFRATex, gBoomerangItemNameFRATex, gLensItemNameFRATex, gMagicBeansItemNameFRATex, gMegatonHammerItemNameFRATex, gLightArrowItemNameFRATex, gNayrusLoveItemNameFRATex, gEmptyBottleItemNameFRATex, gRedPotionItemNameFRATex, gGreenPotionItemNameFRATex, gBluePotionItemNameFRATex, gBottledFairyItemNameFRATex, gFishItemNameFRATex, gFullMilkItemNameFRATex, gRutosLetterItemNameFRATex, gBlueFireItemNameFRATex, gBugItemNameFRATex, gBigPoeItemNameFRATex, gHalfMilkItemNameFRATex, gPoeItemNameFRATex, gWeirdEggItemNameFRATex, gCuccoItemNameFRATex, gZeldasLetterItemNameFRATex, gKeatonMaskItemNameFRATex, gSkullMaskItemNameFRATex, gSpookyMaskItemNameFRATex, gBunnyHoodItemNameFRATex, gGoronMaskItemNameFRATex, gZoraMaskItemNameFRATex, gGerudoMaskItemNameFRATex, gMaskofTruthItemNameFRATex, gSOLDOUTItemNameFRATex, gPocketEggItemNameFRATex, gPocketCuccoItemNameFRATex, gCojiroItemNameFRATex, gOddMushroomItemNameFRATex, gOddPotionItemNameFRATex, gPoachersSawItemNameFRATex, gBrokenGoronsSwordItemNameFRATex, gPrescriptionItemNameFRATex, gEyeBallFrogItemNameFRATex, gEyeDropsItemNameFRATex, gClaimCheckItemNameFRATex, gUnusedWindMedallionItemName3JPNTex, gUnusedFireMedallionItemName3JPNTex, gUnusedIceMedallionItemName3JPNTex, gKokiriSwordItemNameFRATex, gMasterSwordItemNameFRATex, gGiantsKnifeItemNameFRATex, gDekuShieldItemNameFRATex, gHylianShieldItemNameFRATex, gMirrorShieldItemNameFRATex, gKokiriTunicItemNameFRATex, gGoronTunicItemNameFRATex, gZoraTunicItemNameFRATex, gKokiriBootsItemNameFRATex, gIronBootsItemNameFRATex, gHoverBootsItemNameFRATex, gBulletBag30ItemNameFRATex, gBulletBag40ItemNameFRATex, gBulletBag50ItemNameFRATex, gQuiver30ItemNameFRATex, gQuiver40ItemNameFRATex, gQuiver50ItemNameFRATex, gBombBag20ItemNameFRATex, gBombBag30ItemNameFRATex, gBombBag40ItemNameFRATex, gGoronsBraceletItemNameFRATex, gSilverGauntletsItemNameFRATex, gGoldenGauntletsItemNameFRATex, gSilverScaleItemNameFRATex, gGoldenScaleItemNameFRATex, gBrokenGiantsKnifeItemNameFRATex, gUnusedBossKeyItemName15JPNTex, gUnusedBossKeyItemName16JPNTex, gUnusedBossKeyItemName17JPNTex, gUnusedBossKeyItemName18JPNTex, gMinuetOfForestItemNameFRATex, gBoleroOfFireItemNameFRATex, gSerenadeOfWaterItemNameFRATex, gRequiemOfSpiritItemNameFRATex, gNocturneOfShadowItemNameFRATex, gPreludeOfLightItemNameFRATex, gZeldasLullabyItemNameFRATex, gEponasSongItemNameFRATex, gSariasSongItemNameFRATex, gSunsSongItemNameFRATex, gSongOfTimeItemNameFRATex, gSongOfStormsItemNameFRATex, gForestMedallionItemNameFRATex, gFireMedallionItemNameFRATex, gWaterMedallionItemNameFRATex, gSpiritMedallionItemNameFRATex, gShadowMedallionItemNameFRATex, gLightMedallionItemNameFRATex, gKokiriEmeraldItemNameFRATex, gGoronsRubyItemNameFRATex, gZorasSapphireItemNameFRATex, gStoneofAgonyItemNameFRATex, gGerudosCardItemNameFRATex, gGoldSkulltulaItemNameFRATex, gHeartContainerItemNameFRATex, gUnusedPieceOfHeartItemName3JPNTex, gBossKeyItemNameFRATex, gCompassItemNameFRATex, gDungeonMapItemNameFRATex, gUnusedBossKeyItemName19JPNTex, gUnusedBossKeyItemName20JPNTex, gUnusedBossKeyItemName21JPNTex, gBiggoronsSwordItemNameFRATex, gBiggoronsSwordItemNameFRATex, }; static void* mapNameTextures[] = { gHauntedWastelandPointNameENGTex, gGerudosFortressPointNameENGTex, gGerudoValleyPointNameENGTex, gHyliaLakesidePointNameENGTex, gLonLonRanchPointNameENGTex, gMarketPointNameENGTex, gHyruleFieldPointNameENGTex, gDeathMountainPointNameENGTex, gKakarikoVillagePointNameENGTex, gLostWoodsPointNameENGTex, gKokiriForestPointNameENGTex, gZorasDomainPointNameENGTex, gHauntedWastelandPointNameGERTex, gGerudosFortressPointNameGERTex, gGerudoValleyPointNameGERTex, gHyliaLakesidePointNameGERTex, gLonLonRanchPointNameGERTex, gMarketPointNameGERTex, gHyruleFieldPointNameGERTex, gDeathMountainPointNameGERTex, gKakarikoVillagePointNameGERTex, gLostWoodsPointNameGERTex, gKokiriForestPointNameGERTex, gZorasDomainPointNameGERTex, gHauntedWastelandPointNameFRATex, gGerudosFortressPointNameFRATex, gGerudoValleyPointNameFRATex, gHyliaLakesidePointNameFRATex, gLonLonRanchPointNameFRATex, gMarketPointNameFRATex, gHyruleFieldPointNameFRATex, gDeathMountainPointNameFRATex, gKakarikoVillagePointNameFRATex, gLostWoodsPointNameFRATex, gKokiriForestPointNameFRATex, gZorasDomainPointNameFRATex, gHyruleFieldPositionNameENGTex, gKakarikoVillagePositionNameENGTex, gGraveyardPositionNameENGTex, gZorasRiverPositionNameENGTex, gKokiriForestPositionNameENGTex, gSacredForestMeadowPositionNameENGTex, gLakeHyliaPositionNameENGTex, gZorasDomainPositionNameENGTex, gZorasFountainPositionNameENGTex, gGerudoValleyPositionNameENGTex, gLostWoodsPositionNameENGTex, gDesertColossusPositionNameENGTex, gGerudosFortressPositionNameENGTex, gHauntedWastelandPositionNameENGTex, gMarketPositionNameENGTex, gHyruleCastlePositionNameENGTex, gDeathMountainTrailPositionNameENGTex, gDeathMountainCraterPositionNameENGTex, gGoronCityPositionNameENGTex, gLonLonRanchPositionNameENGTex, gQuestionMarkPositionNameENGTex, gGanonsCastlePositionNameENGTex, gHyruleFieldPositionNameGERTex, gKakarikoVillagePositionNameGERTex, gGraveyardPositionNameGERTex, gZorasRiverPositionNameGERTex, gKokiriForestPositionNameGERTex, gSacredForestMeadowPositionNameGERTex, gLakeHyliaPositionNameGERTex, gZorasDomainPositionNameGERTex, gZorasFountainPositionNameGERTex, gGerudoValleyPositionNameGERTex, gLostWoodsPositionNameGERTex, gDesertColossusPositionNameGERTex, gGerudosFortressPositionNameGERTex, gHauntedWastelandPositionNameGERTex, gMarketPositionNameGERTex, gHyruleCastlePositionNameGERTex, gDeathMountainTrailPositionNameGERTex, gDeathMountainCraterPositionNameGERTex, gGoronCityPositionNameGERTex, gLonLonRanchPositionNameGERTex, gQuestionMarkPositionNameGERTex, gGanonsCastlePositionNameGERTex, gHyruleFieldPositionNameFRATex, gKakarikoVillagePositionNameFRATex, gGraveyardPositionNameFRATex, gZorasRiverPositionNameFRATex, gKokiriForestPositionNameFRATex, gSacredForestMeadowPositionNameFRATex, gLakeHyliaPositionNameFRATex, gZorasDomainPositionNameFRATex, gZorasFountainPositionNameFRATex, gGerudoValleyPositionNameFRATex, gLostWoodsPositionNameFRATex, gDesertColossusPositionNameFRATex, gGerudosFortressPositionNameFRATex, gHauntedWastelandPositionNameFRATex, gMarketPositionNameFRATex, gHyruleCastlePositionNameFRATex, gDeathMountainTrailPositionNameFRATex, gDeathMountainCraterPositionNameFRATex, gGoronCityPositionNameFRATex, gLonLonRanchPositionNameFRATex, gQuestionMarkPositionNameFRATex, gGanonsCastlePositionNameFRATex, }; s16 D_8082AAEC[] = { 32, 112, 32, 48, 32, 32, 32, 48, 32, 64, 32, 48, 48, 48, 48, 64, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 80, 64, }; s16 D_8082AB2C[] = { 24, 72, 13, 22, 19, 20, 19, 27, 14, 26, 22, 21, 49, 32, 45, 60, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 32, 8, }; static u8 D_8082AB6C[][ARRAY_COUNT(gSaveContext.buttonStatus)] = { { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED }, { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED }, { BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED }, }; static s16 D_8082AB8C = 0; static s16 D_8082AB90 = 0; static s16 D_8082AB94 = 0; static s16 D_8082AB98 = 255; static s16 D_8082AB9C = 255; static s16 D_8082ABA0 = 0; static s16 D_8082ABA4 = 0; static s16 sInDungeonScene = false; static f32 D_8082ABAC[] = { -4.0f, 4.0f, 4.0f, 4.0f, 4.0f, -4.0f, -4.0f, -4.0f, }; static f32 D_8082ABCC[] = { -4.0f, -4.0f, -4.0f, 4.0f, 4.0f, 4.0f, 4.0f, -4.0f, }; static u16 D_8082ABEC[] = { PAUSE_MAP, PAUSE_EQUIP, PAUSE_QUEST, PAUSE_ITEM, PAUSE_EQUIP, PAUSE_MAP, PAUSE_ITEM, PAUSE_QUEST, }; u8 gSlotAgeReqs[] = { 1, 9, 9, 0, 0, 9, 1, 9, 9, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 0, 1, }; u8 gEquipAgeReqs[][4] = { { 0, 1, 0, 0 }, { 9, 1, 9, 0 }, { 0, 9, 0, 0 }, { 9, 9, 0, 0 }, }; u8 gItemAgeReqs[] = { 1, 9, 9, 0, 0, 9, 1, 9, 9, 9, 0, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 9, 0, 9, 0, 0, 9, 0, 0, 1, 1, 1, 0, 0, 0, 9, 9, 9, 1, 0, 0, 9, 9, 0, }; u8 gAreaGsFlags[] = { 0x0F, 0x1F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x07, 0x07, 0x03, 0x0F, 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, }; static void* sCursorTexs[] = { gPauseMenuCursorTopLeftTex, gPauseMenuCursorTopRightTex, gPauseMenuCursorBottomLeftTex, gPauseMenuCursorBottomRightTex, }; static s16 sCursorColors[][3] = { { 255, 255, 255 }, { 255, 255, 0 }, { 0, 255, 50 }, }; const Color_RGB8 Cursor_ABTN_ori = {0, 255, 50}; const Color_RGB8 Cursor_ABTNN64_ori = {0, 50, 255}; const Color_RGB8 Cursor_CBTN_ori = {255, 255, 0}; const Color_RGB8 Cursor_StartBTN_ori = {255, 255, 255}; Color_RGB8 Cursor_ABTN; Color_RGB8 Cursor_CBTN; static void* sSavePromptTexs[] = { gPauseSavePromptENGTex, gPauseSavePromptGERTex, gPauseSavePromptFRATex, }; static void* sSaveConfirmationTexs[] = { gPauseSaveConfirmationENGTex, gPauseSaveConfirmationGERTex, gPauseSaveConfirmationFRATex, }; static void* sContinuePromptTexs[] = { gContinuePlayingENGTex, gContinuePlayingGERTex, gContinuePlayingFRATex, }; static void* sPromptChoiceTexs[][2] = { { gPauseYesENGTex, gPauseNoENGTex }, { gPauseYesGERTex, gPauseNoGERTex }, { gPauseYesFRATex, gPauseNoFRATex }, }; static u8 sButtonStatusSave[ARRAY_COUNT(gSaveContext.buttonStatus)]; static PreRender sPlayerPreRender; static void* sPreRenderCvg; extern int fbTest; void KaleidoScope_ProcessPlayerPreRender(void) { PreRender_Calc(&sPlayerPreRender); PreRender_Destroy(&sPlayerPreRender); } Gfx* KaleidoScope_QuadTextureIA4(Gfx* gfx, void* texture, s16 width, s16 height, u16 point) { gDPLoadTextureBlock_4b(gfx++, texture, G_IM_FMT_IA, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(gfx++, point, point + 2, point + 3, point + 1, 0); return gfx; } Gfx* KaleidoScope_QuadTextureIA8(Gfx* gfx, void* texture, s16 width, s16 height, u16 point) { gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(gfx++, point, point + 2, point + 3, point + 1, 0); return gfx; } void KaleidoScope_OverridePalIndexCI4(u8* texture, ptrdiff_t size, s32 targetIndex, s32 newIndex) { s32 i; targetIndex &= 0xF; newIndex &= 0xF; if ((size == 0) || (targetIndex == newIndex) || (texture == NULL)) { return; } for (i = 0; i < size; i++) { s32 index1; s32 index2; index1 = index2 = texture[i]; index1 = (index1 >> 4) & 0xF; index2 = index2 & 0xF; if (index1 == targetIndex) { index1 = newIndex; } if (index2 == targetIndex) { index2 = newIndex; } texture[i] = (index1 << 4) | index2; } } void KaleidoScope_MoveCursorToSpecialPos(GlobalContext* globalCtx, u16 specialPos) { PauseContext* pauseCtx = &globalCtx->pauseCtx; pauseCtx->cursorSpecialPos = specialPos; pauseCtx->pageSwitchTimer = 0; Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); } void KaleidoScope_DrawQuadTextureRGBA32(GraphicsContext* gfxCtx, void* texture, u16 width, u16 height, u16 point) { OPEN_DISPS(gfxCtx); gDPLoadTextureBlock(POLY_KAL_DISP++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(POLY_KAL_DISP++, point, point + 2, point + 3, point + 1, 0); CLOSE_DISPS(gfxCtx); } void KaleidoScope_SetDefaultCursor(GlobalContext* globalCtx) { PauseContext* pauseCtx = &globalCtx->pauseCtx; s16 s; s16 i; gSelectingMask = false; switch (pauseCtx->pageIndex) { case PAUSE_ITEM: s = pauseCtx->cursorSlot[PAUSE_ITEM]; if (gSaveContext.inventory.items[s] == ITEM_NONE) { i = s + 1; while (true) { if (gSaveContext.inventory.items[i] != ITEM_NONE) { break; } i++; if (i >= 24) { i = 0; } if (i == s) { pauseCtx->cursorItem[PAUSE_ITEM] = pauseCtx->namedItem = PAUSE_ITEM_NONE; return; } } pauseCtx->cursorItem[PAUSE_ITEM] = gSaveContext.inventory.items[i]; pauseCtx->cursorSlot[PAUSE_ITEM] = i; } break; case PAUSE_MAP: case PAUSE_QUEST: case PAUSE_EQUIP: break; } } void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 pt) { pauseCtx->unk_1E4 = 1; pauseCtx->unk_1EA = 0; gSelectingMask = false; if (!pt) { pauseCtx->mode = pauseCtx->pageIndex * 2 + 1; Audio_PlaySoundGeneral(NA_SE_SY_WIN_SCROLL_LEFT, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; } else { pauseCtx->mode = pauseCtx->pageIndex * 2; Audio_PlaySoundGeneral(NA_SE_SY_WIN_SCROLL_RIGHT, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT; } for (int buttonIndex = 1; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) { gSaveContext.buttonStatus[buttonIndex] = D_8082AB6C[pauseCtx->pageIndex + pt][buttonIndex]; } if ((CVar_GetS32("gAssignableTunicsAndBoots", 0) != 0) && (D_8082ABEC[pauseCtx->mode] == PAUSE_EQUIP)) { gSaveContext.buttonStatus[1] = BTN_ENABLED; gSaveContext.buttonStatus[2] = BTN_ENABLED; gSaveContext.buttonStatus[3] = BTN_ENABLED; // A-Button is already enabled gSaveContext.buttonStatus[5] = BTN_ENABLED; gSaveContext.buttonStatus[6] = BTN_ENABLED; gSaveContext.buttonStatus[7] = BTN_ENABLED; gSaveContext.buttonStatus[8] = BTN_ENABLED; } osSyncPrintf("kscope->kscp_pos+pt = %d\n", pauseCtx->pageIndex + pt); gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(50); } void KaleidoScope_HandlePageToggles(PauseContext* pauseCtx, Input* input) { s16 Debug_BTN = BTN_L; s16 PageLeft_BTN = BTN_Z; if (CVar_GetS32("gNGCKaleidoSwitcher", 0) != 0) { Debug_BTN = BTN_Z; PageLeft_BTN = BTN_L; } if (CVar_GetS32("gDebugEnabled", 0) && (pauseCtx->debugState == 0) && CHECK_BTN_ALL(input->press.button, Debug_BTN)) { pauseCtx->debugState = 1; return; } if (CHECK_BTN_ALL(input->press.button, BTN_R)) { KaleidoScope_SwitchPage(pauseCtx, 2); return; } if (CHECK_BTN_ALL(input->press.button, PageLeft_BTN)) { KaleidoScope_SwitchPage(pauseCtx, 0); return; } bool dpad = CVar_GetS32("gDpadPause", 0); if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { if ((pauseCtx->stickRelX < -30) || (dpad && CHECK_BTN_ALL(input->cur.button, BTN_DLEFT))) { pauseCtx->pageSwitchTimer++; if ((pauseCtx->pageSwitchTimer >= 10) || (pauseCtx->pageSwitchTimer == 0)) { KaleidoScope_SwitchPage(pauseCtx, 0); } } else { pauseCtx->pageSwitchTimer = -1; } } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) { if ((pauseCtx->stickRelX > 30) || (dpad && CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT))) { pauseCtx->pageSwitchTimer++; if ((pauseCtx->pageSwitchTimer >= 10) || (pauseCtx->pageSwitchTimer == 0)) { KaleidoScope_SwitchPage(pauseCtx, 2); } } else { pauseCtx->pageSwitchTimer = -1; } } } void KaleidoScope_DrawCursor(GlobalContext* globalCtx, u16 pageIndex) { PauseContext* pauseCtx = &globalCtx->pauseCtx; u16 temp; OPEN_DISPS(globalCtx->state.gfxCtx); temp = pauseCtx->unk_1E4; if (CVar_GetS32("gHudColors", 1) == 0) { //Will be converted to ColorRGB later. sCursorColors[1][0] = Cursor_CBTN_ori.r; sCursorColors[1][1] = Cursor_CBTN_ori.g; sCursorColors[1][2] = Cursor_CBTN_ori.b; sCursorColors[2][0] = Cursor_ABTNN64_ori.r; sCursorColors[2][1] = Cursor_ABTNN64_ori.g; sCursorColors[2][2] = Cursor_ABTNN64_ori.b; } else if (CVar_GetS32("gHudColors", 1) == 1) { sCursorColors[1][0] = Cursor_CBTN_ori.r; sCursorColors[1][1] = Cursor_CBTN_ori.g; sCursorColors[1][2] = Cursor_CBTN_ori.b; sCursorColors[2][0] = Cursor_ABTN_ori.r; sCursorColors[2][1] = Cursor_ABTN_ori.g; sCursorColors[2][2] = Cursor_ABTN_ori.b; } else if (CVar_GetS32("gHudColors", 1) == 2) { sCursorColors[1][0] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).r; sCursorColors[1][1] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).g; sCursorColors[1][2] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).b; sCursorColors[2][0] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).r; sCursorColors[2][1] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).g; sCursorColors[2][2] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).b; } if ((((pauseCtx->unk_1E4 == 0) || (temp == 8)) && (pauseCtx->state == 6)) || ((pauseCtx->pageIndex == PAUSE_QUEST) && ((temp < 3) || (temp == 5) || (temp == 8)))) { if (pauseCtx->pageIndex == pageIndex) { s16 i; s16 j; gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, sCursorColors[pauseCtx->cursorColorSet >> 2][0], sCursorColors[pauseCtx->cursorColorSet >> 2][1], sCursorColors[pauseCtx->cursorColorSet >> 2][2], 255); gDPSetEnvColor(POLY_KAL_DISP++, D_8082AB8C, D_8082AB90, D_8082AB94, 255); gSPVertex(POLY_KAL_DISP++, pauseCtx->cursorVtx, 16, 0); for (i = j = 0; i < 4; i++, j += 4) { gDPLoadTextureBlock_4b(POLY_KAL_DISP++, sCursorTexs[i], G_IM_FMT_IA, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); } } gDPPipeSync(POLY_KAL_DISP++); gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 255); } CLOSE_DISPS(globalCtx->state.gfxCtx); } Gfx* KaleidoScope_DrawPageSections(Gfx* gfx, Vtx* vertices, void** textures) { s32 i; s32 j; gSPVertex(gfx++, vertices, 32, 0); i = 0; j = 0; while (j < 32) { gDPPipeSync(gfx++); gDPLoadTextureBlock(gfx++, textures[i], G_IM_FMT_IA, G_IM_SIZ_8b, 80, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(gfx++, j, j + 2, j + 3, j + 1, 0); j += 4; i++; } gSPVertex(gfx++, vertices + 32, 28, 0); j = 0; while (j < 28) { gDPPipeSync(gfx++); gDPLoadTextureBlock(gfx++, textures[i], G_IM_FMT_IA, G_IM_SIZ_8b, 80, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(gfx++, j, j + 2, j + 3, j + 1, 0); j += 4; i++; } return gfx; } void KaleidoScope_DrawPages(GlobalContext* globalCtx, GraphicsContext* gfxCtx) { static s16 D_8082ACF4[][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 255, 255, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 255, 255, 0 }, { 0, 255, 50 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 255, 50 }, }; const Color_RGB8 A_BTN_ori = {100, 255, 100}; if (CVar_GetS32("gHudColors", 1) == 0) { D_8082ACF4[4][0] = Cursor_CBTN_ori.r; D_8082ACF4[4][1] = Cursor_CBTN_ori.g; D_8082ACF4[4][2] = Cursor_CBTN_ori.b; D_8082ACF4[7][0] = Cursor_CBTN_ori.r; D_8082ACF4[7][1] = Cursor_CBTN_ori.g; D_8082ACF4[7][2] = Cursor_CBTN_ori.b; D_8082ACF4[8][0] = Cursor_ABTNN64_ori.r; D_8082ACF4[8][1] = Cursor_ABTNN64_ori.g; D_8082ACF4[8][2] = Cursor_ABTNN64_ori.b; D_8082ACF4[11][0] = Cursor_ABTNN64_ori.r; D_8082ACF4[11][1] = Cursor_ABTNN64_ori.g; D_8082ACF4[11][2] = Cursor_ABTNN64_ori.b; } else if (CVar_GetS32("gHudColors", 1) == 1) { D_8082ACF4[4][0] = Cursor_CBTN_ori.r; D_8082ACF4[4][1] = Cursor_CBTN_ori.g; D_8082ACF4[4][2] = Cursor_CBTN_ori.b; D_8082ACF4[7][0] = Cursor_CBTN_ori.r; D_8082ACF4[7][1] = Cursor_CBTN_ori.g; D_8082ACF4[7][2] = Cursor_CBTN_ori.b; D_8082ACF4[8][0] = Cursor_ABTN_ori.r; D_8082ACF4[8][1] = Cursor_ABTN_ori.g; D_8082ACF4[8][2] = Cursor_ABTN_ori.b; D_8082ACF4[11][0] = Cursor_ABTN_ori.r; D_8082ACF4[11][1] = Cursor_ABTN_ori.g; D_8082ACF4[11][2] = Cursor_ABTN_ori.b; } else if (CVar_GetS32("gHudColors", 1) == 2) { D_8082ACF4[4][0] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).r; D_8082ACF4[4][1] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).g; D_8082ACF4[4][2] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).b; D_8082ACF4[7][0] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).r; D_8082ACF4[7][1] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).g; D_8082ACF4[7][2] = CVar_GetRGB("gCCCBtnPrim", Cursor_CBTN_ori).b; D_8082ACF4[8][0] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).r; D_8082ACF4[8][1] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).g; D_8082ACF4[8][2] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).b; D_8082ACF4[11][0] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).r; D_8082ACF4[11][1] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).g; D_8082ACF4[11][2] = CVar_GetRGB("gCCABtnPrim", Cursor_ABTN_ori).b; } static s16 D_8082AD3C = 20; static s16 D_8082AD40 = 0; static s16 D_8082AD44 = 0; static s16 D_8082AD48 = 0; static s16 D_8082AD4C = 0; static s16 D_8082AD50 = 0; PauseContext* pauseCtx = &globalCtx->pauseCtx; Input* input = &globalCtx->state.input[0]; s16 stepR; s16 stepG; s16 stepB; FrameInterpolation_RecordOpenChild(NULL, pauseCtx->state + pauseCtx->pageIndex * 100); OPEN_DISPS(gfxCtx); if ((pauseCtx->state < 8) || (pauseCtx->state > 0x11)) { if (pauseCtx->state != 7) { stepR = ABS(D_8082AB8C - D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][0]) / D_8082AD3C; stepG = ABS(D_8082AB90 - D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][1]) / D_8082AD3C; stepB = ABS(D_8082AB94 - D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][2]) / D_8082AD3C; if (D_8082AB8C >= D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][0]) { D_8082AB8C -= stepR; } else { D_8082AB8C += stepR; } if (D_8082AB90 >= D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][1]) { D_8082AB90 -= stepG; } else { D_8082AB90 += stepG; } if (D_8082AB94 >= D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][2]) { D_8082AB94 -= stepB; } else { D_8082AB94 += stepB; } D_8082AD3C--; if (D_8082AD3C == 0) { D_8082AB8C = D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][0]; D_8082AB90 = D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][1]; D_8082AB94 = D_8082ACF4[pauseCtx->cursorColorSet + D_8082AD40][2]; D_8082AD3C = ZREG(28 + D_8082AD40); D_8082AD40++; if (D_8082AD40 >= 4) { D_8082AD40 = 0; } } if (CVar_GetS32("gDpadHoldChange", 1) && CVar_GetS32("gDpadPause", 0)) { if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) { if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) { D_8082AD44 = XREG(8); D_8082AD4C = -1; } else if (--D_8082AD44 < 0) { D_8082AD44 = XREG(6); input->press.button |= BTN_DLEFT; } } else if (CHECK_BTN_ALL(input->rel.button, BTN_DLEFT)) { D_8082AD4C = 0; } else if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) { if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) { D_8082AD44 = XREG(8); D_8082AD4C = 1; } else if (--D_8082AD44 < 0) { D_8082AD44 = XREG(6); input->press.button |= BTN_DRIGHT; } } else if (CHECK_BTN_ALL(input->rel.button, BTN_DRIGHT)) { D_8082AD4C = 0; } if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) { if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) { D_8082AD48 = XREG(8); D_8082AD50 = -1; } else if (--D_8082AD48 < 0) { D_8082AD48 = XREG(6); input->press.button |= BTN_DDOWN; } } else if (CHECK_BTN_ALL(input->rel.button, BTN_DDOWN)) { D_8082AD50 = 0; } else if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) { if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) { D_8082AD48 = XREG(8); D_8082AD50 = 1; } else if (--D_8082AD48 < 0) { D_8082AD48 = XREG(6); input->press.button |= BTN_DUP; } } else if (CHECK_BTN_ALL(input->rel.button, BTN_DUP)) { D_8082AD50 = 0; } } if (pauseCtx->stickRelX < -30) { if (D_8082AD4C == -1) { if (--D_8082AD44 < 0) { D_8082AD44 = XREG(6); } else { pauseCtx->stickRelX = 0; } } else { D_8082AD44 = XREG(8); D_8082AD4C = -1; } } else if (pauseCtx->stickRelX > 30) { if (D_8082AD4C == 1) { if (--D_8082AD44 < 0) { D_8082AD44 = XREG(6); } else { pauseCtx->stickRelX = 0; } } else { D_8082AD44 = XREG(8); D_8082AD4C = 1; } } else { D_8082AD4C = 0; } if (pauseCtx->stickRelY < -30) { if (D_8082AD50 == -1) { if (--D_8082AD48 < 0) { D_8082AD48 = XREG(6); } else { pauseCtx->stickRelY = 0; } } else { D_8082AD48 = XREG(8); D_8082AD50 = -1; } } else if (pauseCtx->stickRelY > 30) { if (D_8082AD50 == 1) { if (--D_8082AD48 < 0) { D_8082AD48 = XREG(6); } else { pauseCtx->stickRelY = 0; } } else { D_8082AD48 = XREG(8); D_8082AD50 = 1; } } else { D_8082AD50 = 0; } } if (pauseCtx->pageIndex) { // pageIndex != PAUSE_ITEM gDPPipeSync(OVERLAY_DISP++); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, -(f32)WREG(3) / 100.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(-pauseCtx->unk_1F4 / 100.0f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->itemPageVtx, sSelectItemTexs[gSaveContext.language]); KaleidoScope_DrawItemSelect(globalCtx); } if (pauseCtx->pageIndex != PAUSE_EQUIP) { gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); Matrix_Translate(-(f32)WREG(3) / 100.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(pauseCtx->unk_1F8 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(1.57f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->equipPageVtx, sEquipmentTexs[gSaveContext.language]); KaleidoScope_DrawEquipment(globalCtx); } if (pauseCtx->pageIndex != PAUSE_QUEST) { gDPPipeSync(POLY_KAL_DISP++); gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_BILERP); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, (f32)WREG(3) / 100.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(pauseCtx->unk_200 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(3.14f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->questPageVtx, sQuestStatusTexs[gSaveContext.language]); KaleidoScope_DrawQuestStatus(globalCtx, gfxCtx); } if (pauseCtx->pageIndex != PAUSE_MAP) { gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); Matrix_Translate((f32)WREG(3) / 100.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(-pauseCtx->unk_1FC / 100.0f, MTXMODE_APPLY); Matrix_RotateY(-1.57f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(globalCtx, gfxCtx); func_800949A8(gfxCtx); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) { PauseMapMark_Draw(globalCtx); } } else { KaleidoScope_DrawWorldMap(globalCtx, gfxCtx); } } gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); switch (pauseCtx->pageIndex) { case PAUSE_ITEM: Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, -(f32)WREG(3) / 100.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(-pauseCtx->unk_1F4 / 100.0f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->itemPageVtx, sSelectItemTexs[gSaveContext.language]); KaleidoScope_DrawItemSelect(globalCtx); break; case PAUSE_MAP: Matrix_Translate((f32)WREG(3) / 100.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(-pauseCtx->unk_1FC / 100.0f, MTXMODE_APPLY); Matrix_RotateY(-1.57f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(globalCtx, gfxCtx); func_800949A8(gfxCtx); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (pauseCtx->cursorSpecialPos == 0) { KaleidoScope_DrawCursor(globalCtx, PAUSE_MAP); } if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) { PauseMapMark_Draw(globalCtx); } } else { KaleidoScope_DrawWorldMap(globalCtx, gfxCtx); } break; case PAUSE_QUEST: gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_BILERP); Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, (f32)WREG(3) / 100.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(pauseCtx->unk_200 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(3.14f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->questPageVtx, sQuestStatusTexs[gSaveContext.language]); KaleidoScope_DrawQuestStatus(globalCtx, gfxCtx); if (pauseCtx->cursorSpecialPos == 0) { KaleidoScope_DrawCursor(globalCtx, PAUSE_QUEST); } break; case PAUSE_EQUIP: Matrix_Translate(-(f32)WREG(3) / 100.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(pauseCtx->unk_1F8 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(1.57f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->equipPageVtx, sEquipmentTexs[gSaveContext.language]); KaleidoScope_DrawEquipment(globalCtx); if (pauseCtx->cursorSpecialPos == 0) { KaleidoScope_DrawCursor(globalCtx, PAUSE_EQUIP); } break; } } func_800949A8(gfxCtx); if ((pauseCtx->state == 7) || ((pauseCtx->state >= 8) && (pauseCtx->state < 0x12))) { KaleidoScope_UpdatePrompt(globalCtx); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); if (!pauseCtx->pageIndex) { // pageIndex == PAUSE_ITEM pauseCtx->unk_1F4 = pauseCtx->unk_204 + 314.0f; Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, -pauseCtx->unk_1F0 / 10.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(-pauseCtx->unk_204 / 100.0f, MTXMODE_APPLY); } else if (pauseCtx->pageIndex == PAUSE_MAP) { pauseCtx->unk_1FC = pauseCtx->unk_204 + 314.0f; Matrix_Translate(pauseCtx->unk_1F0 / 10.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(-pauseCtx->unk_204 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(-1.57f, MTXMODE_APPLY); } else if (pauseCtx->pageIndex == PAUSE_QUEST) { pauseCtx->unk_200 = pauseCtx->unk_204 + 314.0f; Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, pauseCtx->unk_1F0 / 10.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(pauseCtx->unk_204 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(3.14f, MTXMODE_APPLY); } else { pauseCtx->unk_1F8 = pauseCtx->unk_204 + 314.0f; Matrix_Translate(-pauseCtx->unk_1F0 / 10.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(pauseCtx->unk_204 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(1.57f, MTXMODE_APPLY); } gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if ((pauseCtx->state >= 8) && (pauseCtx->state <= 0x11)) { POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->saveVtx, sGameOverTexs); } else { POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]); } gSPVertex(POLY_KAL_DISP++, &pauseCtx->saveVtx[60], 32, 0); if (((pauseCtx->state == 7) && (pauseCtx->unk_1EC < 4)) || (pauseCtx->state == 0xE)) { POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sSavePromptTexs[gSaveContext.language], 152, 16, 0); gDPSetCombineLERP(POLY_KAL_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); if (CVar_GetS32("gHudColors", 1) == 0) {//Save prompt cursor colour gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 100, 255, VREG(61)); } else if (CVar_GetS32("gHudColors", 1) == 1) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 255, 100, VREG(61)); } else if (CVar_GetS32("gHudColors", 1) == 2) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetRGB("gCCABtnPrim", A_BTN_ori).r, CVar_GetRGB("gCCABtnPrim", A_BTN_ori).g, CVar_GetRGB("gCCABtnPrim", A_BTN_ori).b, VREG(61)); //Save prompt cursor colour } if (pauseCtx->promptChoice == 0) { gSPDisplayList(POLY_KAL_DISP++, gPromptCursorLeftDL); } else { gSPDisplayList(POLY_KAL_DISP++, gPromptCursorRightDL); } gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); } else if ((pauseCtx->state != 7) || (pauseCtx->unk_1EC < 4)) { if ((pauseCtx->state != 0xF) && ((pauseCtx->state == 0x10) || (pauseCtx->state == 0x11))) { POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sContinuePromptTexs[gSaveContext.language], 152, 16, 0); gDPSetCombineLERP(POLY_KAL_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 255, 100, VREG(61)); if (pauseCtx->promptChoice == 0) { gSPDisplayList(POLY_KAL_DISP++, gPromptCursorLeftDL); } else { gSPDisplayList(POLY_KAL_DISP++, gPromptCursorRightDL); } gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); } } gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); if ((pauseCtx->state != 0x10) && (pauseCtx->state != 0x11)) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 0, pauseCtx->alpha); gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); } } CLOSE_DISPS(gfxCtx); FrameInterpolation_RecordCloseChild(); } void KaleidoScope_DrawInfoPanel(GlobalContext* globalCtx) { static s16 gABtnTexColour[][4] = { //A button colors { 0, 255, 100, 255 },//Gamecube { 0, 100, 255, 255 },//Original N64 }; Color_RGB8 A_button_ori = {gABtnTexColour[0][0],gABtnTexColour[0][1],gABtnTexColour[0][2]}; Color_RGB8 A_button = CVar_GetRGB("gCCABtnPrim", A_button_ori); Color_RGB8 C_button_ori = {R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2)}; Color_RGB8 C_button_uni = CVar_GetRGB("gCCCBtnPrim", C_button_ori); Color_RGB8 C_button_U = CVar_GetRGB("gCCCUBtnPrim", C_button_ori); Color_RGB8 C_button_D = CVar_GetRGB("gCCCDBtnPrim", C_button_ori); Color_RGB8 C_button_L = CVar_GetRGB("gCCCLBtnPrim", C_button_ori); Color_RGB8 C_button_R = CVar_GetRGB("gCCCRBtnPrim", C_button_ori); static const void* sToEquipTextures[3] = { gPauseToEquipENGTex, gPauseToEquipGERTex, gPauseToEquipFRATex, }; static const void* sToDecideTextures[3] = { gPauseToDecideENGTex, gPauseToDecideGERTex, gPauseToDecideFRATex, }; static const void* sPlayMelodyTextures[3] = { gPauseToPlayMelodyENGTex, gPauseToPlayMelodyGERTex, gPauseToPlayMelodyFRATex, }; static const void* D_8082AD78[][3] = { { gPauseToEquipmentENGTex, gPauseToEquipmentGERTex, gPauseToEquipmentFRATex }, { gPauseToSelectItemENGTex, gPauseToSelectItemGERTex, gPauseToSelectItemFRATex }, { gPauseToMapENGTex, gPauseToMapGERTex, gPauseToMapFRATex }, { gPauseToQuestStatusENGTex, gPauseToQuestStatusGERTex, gPauseToQuestStatusFRATex }, }; static void* D_8082ADA8[][3] = { { gPauseToMapENGTex, gPauseToMapGERTex, gPauseToMapFRATex }, { gPauseToQuestStatusENGTex, gPauseToQuestStatusGERTex, gPauseToQuestStatusFRATex }, { gPauseToEquipmentENGTex, gPauseToEquipmentGERTex, gPauseToEquipmentFRATex }, { gPauseToSelectItemENGTex, gPauseToSelectItemGERTex, gPauseToSelectItemFRATex }, }; static u16 D_8082ADD8[3] = { 56, 88, 80 }; static u16 D_8082ADE0[3] = { 64, 88, 72 }; static u16 D_8082ADE8[3] = { 80, 104, 112 }; static s16 D_8082ADF0[][4] = { { 180, 210, 255, 220 }, { 100, 100, 150, 220 }, }; static s16 D_8082AE00 = 20; static s16 D_8082AE04 = 0; static s16 D_8082AE08[] = { 10, 16, 16, 17, 12, 13, 18, 17, 17, 19, 13, 21, 20, 21, 14, 15, 15, 15, 11, 14, }; static s16 D_8082AE30[] = { 21, 20, 19, 18, 11, 14, 10, 15, 16, 13, 12, 17, }; static s16 D_808321A0; static s16 D_808321A2; static s16 D_808321A4; static s16 D_808321A6; PauseContext* pauseCtx = &globalCtx->pauseCtx; s16 stepR; s16 stepG; s16 stepB; s16 stepA; s16 temp; s16 i; s16 j; OPEN_DISPS(globalCtx->state.gfxCtx); stepR = ABS(D_808321A0 - D_8082ADF0[D_8082AE04][0]) / D_8082AE00; stepG = ABS(D_808321A2 - D_8082ADF0[D_8082AE04][1]) / D_8082AE00; stepB = ABS(D_808321A4 - D_8082ADF0[D_8082AE04][2]) / D_8082AE00; stepA = ABS(D_808321A6 - D_8082ADF0[D_8082AE04][3]) / D_8082AE00; if (D_808321A0 >= D_8082ADF0[D_8082AE04][0]) { D_808321A0 -= stepR; } else { D_808321A0 += stepR; } if (D_808321A2 >= D_8082ADF0[D_8082AE04][1]) { D_808321A2 -= stepG; } else { D_808321A2 += stepG; } if (D_808321A4 >= D_8082ADF0[D_8082AE04][2]) { D_808321A4 -= stepB; } else { D_808321A4 += stepB; } if (D_808321A6 >= D_8082ADF0[D_8082AE04][3]) { D_808321A6 -= stepA; } else { D_808321A6 += stepA; } D_8082AE00--; if (D_8082AE00 == 0) { D_808321A0 = D_8082ADF0[D_8082AE04][0]; D_808321A2 = D_8082ADF0[D_8082AE04][1]; D_808321A4 = D_8082ADF0[D_8082AE04][2]; D_808321A6 = D_8082ADF0[D_8082AE04][3]; D_8082AE00 = ZREG(28); D_8082AE04 ^= 1; } temp = pauseCtx->infoPanelOffsetY - 76; for (j = 0, i = 0; i < 7; i++, j += 4) { pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72; pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0; pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = temp; pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = temp - 24; pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] = pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0; pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag = pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0; pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] = pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0; pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 0x900; pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 0x300; pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] = pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] = pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] = pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] = pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] = pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200; pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] = pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha; } pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72; pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72; if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->unk_1E4 == 0)) { pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = WREG(16); pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24; pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = WREG(18); pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = pauseCtx->infoPanelVtx[8].v.ob[1] - 32; } else { pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = WREG(16) + 3; pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18; pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = WREG(18) - 3; pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = pauseCtx->infoPanelVtx[8].v.ob[1] - 26; } if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->unk_1E4 == 0)) { pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = WREG(17); pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = pauseCtx->infoPanelVtx[12].v.ob[0] + 24; pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = WREG(18); pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = pauseCtx->infoPanelVtx[12].v.ob[1] - 32; } else { pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = WREG(17) + 3; pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = pauseCtx->infoPanelVtx[12].v.ob[0] + 18; pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = WREG(18) - 3; pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = pauseCtx->infoPanelVtx[12].v.ob[1] - 26; } pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] = pauseCtx->infoPanelVtx[15].v.tc[0] = 0x300; pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] = pauseCtx->infoPanelVtx[15].v.tc[1] = 0x400; gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 90, 100, 130, 255); gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); gSPDisplayList(POLY_KAL_DISP++, gItemNamePanelDL); if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->unk_1E4 == 0)) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); } else { if (CVar_GetS32("gUniformLR", 0) != 0) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 180, 210, 255, 255); } } gSPDisplayList(POLY_KAL_DISP++, gLButtonIconDL); if (CVar_GetS32("gUniformLR", 0) == 0) { //Restore the misplace gDPSetPrimColor gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 180, 210, 255, 255); } if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->unk_1E4 == 0)) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); } else { if (CVar_GetS32("gUniformLR", 0) != 0) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 180, 210, 255, 255); } } gSPDisplayList(POLY_KAL_DISP++, gRButtonIconDL); if (pauseCtx->cursorSpecialPos != 0) { j = (pauseCtx->cursorSpecialPos * 4) - 32; pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0]; pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1]; KaleidoScope_UpdateCursorSize(pauseCtx); KaleidoScope_DrawCursor(globalCtx, pauseCtx->pageIndex); } temp = pauseCtx->infoPanelOffsetY - 80; pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = temp; pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16; pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 0x200; gDPPipeSync(POLY_KAL_DISP++); gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetEnvColor(POLY_KAL_DISP++, 20, 30, 40, 0); if ((pauseCtx->state == 6) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) && (pauseCtx->nameDisplayTimer < WREG(89)) && (!pauseCtx->unk_1E4 || (pauseCtx->unk_1E4 == 2) || ((pauseCtx->unk_1E4 >= 4) && (pauseCtx->unk_1E4 <= 7)) || (pauseCtx->unk_1E4 == 8)) && (pauseCtx->cursorSpecialPos == 0)) { if (!pauseCtx->unk_1E4 || (pauseCtx->unk_1E4 == 2) || ((pauseCtx->unk_1E4 >= 4) && (pauseCtx->unk_1E4 <= 7)) || (pauseCtx->unk_1E4 == 8)) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 128; pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x1000; gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0); if (pauseCtx->nameColorSet == 1) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 70, 70, 70, 255); } else { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); } POLY_KAL_DISP = KaleidoScope_QuadTextureIA4(POLY_KAL_DISP, pauseCtx->nameSegment, 128, 16, 0); } if (pauseCtx->pageIndex == PAUSE_MAP && CVar_GetS32("gSkulltulaDebugEnabled", 0) != 0) { if (YREG(7) != 0) { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("キンスタ数(%d) Get_KIN_STA=%x (%x) (%x)\n", YREG(6), GET_GS_FLAGS(YREG(6)), gAreaGsFlags[YREG(6)], gSaveContext.gsFlags[YREG(6) >> 2]); osSyncPrintf(VT_RST); YREG(7) = 0; SET_GS_FLAGS(D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]], gAreaGsFlags[D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]]); } } if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) { if (GET_GS_FLAGS(D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]) == gAreaGsFlags[D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]]) { pauseCtx->infoPanelVtx[24].v.ob[0] = pauseCtx->infoPanelVtx[26].v.ob[0] = -74; pauseCtx->infoPanelVtx[25].v.ob[0] = pauseCtx->infoPanelVtx[27].v.ob[0] = pauseCtx->infoPanelVtx[24].v.ob[0] + 19; pauseCtx->infoPanelVtx[24].v.ob[1] = pauseCtx->infoPanelVtx[25].v.ob[1] = pauseCtx->infoPanelVtx[24].v.ob[1] - 2; pauseCtx->infoPanelVtx[26].v.ob[1] = pauseCtx->infoPanelVtx[27].v.ob[1] = pauseCtx->infoPanelVtx[24].v.ob[1] - 19; pauseCtx->infoPanelVtx[25].v.tc[0] = pauseCtx->infoPanelVtx[27].v.tc[0] = 0x300; gDPPipeSync(POLY_KAL_DISP++); gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[24], 4, 0); gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); KaleidoScope_DrawQuadTextureRGBA32(globalCtx->state.gfxCtx, gGoldSkulltulaIconTex, 24, 24, 0); } } } else if ((pauseCtx->unk_1E4 < 3) || (pauseCtx->unk_1E4 == 7) || (pauseCtx->unk_1E4 == 8)) { pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = temp; pauseCtx->infoPanelVtx[22].v.ob[1] = pauseCtx->infoPanelVtx[23].v.ob[1] = pauseCtx->infoPanelVtx[20].v.ob[1] - 16; pauseCtx->infoPanelVtx[22].v.tc[1] = pauseCtx->infoPanelVtx[23].v.tc[1] = 0x200; gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0); if (pauseCtx->state == 7) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(61 + gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 24; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language); pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADE0[gSaveContext.language]; pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x300; pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADE0[gSaveContext.language] << 5; if (CVar_GetS32("gHudColors", 1) == 0) {//A icon to decide in save prompt gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[1][0], gABtnTexColour[1][1], gABtnTexColour[1][2], gABtnTexColour[1][3]); } else if (CVar_GetS32("gHudColors", 1) == 1) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[0][0], gABtnTexColour[0][1], gABtnTexColour[0][2], gABtnTexColour[0][3]); } else if (CVar_GetS32("gHudColors", 1) == 2) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, A_button.r, A_button.g, A_button.b, gABtnTexColour[0][3]); } //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL);//This is changed to load the texture only so we can prim color it. gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sToDecideTextures[gSaveContext.language], D_8082ADE0[gSaveContext.language], 16, 4); } else if (pauseCtx->cursorSpecialPos != 0) { if ((pauseCtx->state == 6) && (pauseCtx->unk_1E4 == 0)) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 128; pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x1000; gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 200, 0, 255); if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { POLY_KAL_DISP = KaleidoScope_QuadTextureIA8( POLY_KAL_DISP, D_8082AD78[pauseCtx->pageIndex][gSaveContext.language], 128, 16, 0); } else { POLY_KAL_DISP = KaleidoScope_QuadTextureIA8( POLY_KAL_DISP, D_8082ADA8[pauseCtx->pageIndex][gSaveContext.language], 128, 16, 0); } } } else { if (!pauseCtx->pageIndex && (!CVar_GetS32("gPauseAnyCursor", 0) || (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE))) { // pageIndex == PAUSE_ITEM pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(49 + gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 48; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(58 + gSaveContext.language); pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADD8[gSaveContext.language]; pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x600; pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADD8[gSaveContext.language] << 5; s16 PosX; //General Pos of C button icon if (gSaveContext.language == 0) { //eng PosX = 112; } else if (gSaveContext.language == 1) { //ger PosX = 175; } else {//baguettes PosX = 98; } s16 PosY = 200; //General Pos of C button icon s16 icon_w = 46; // Original texture size s16 icon_h = 16; s32 icon_x_offset; s16 icon_w_crop = 17.0f; //Left int height = icon_h * 1.0f; //Adjust Height with scale int width = icon_w * 1.0f; //Adjust Width with scale int width_crop = icon_w_crop * 1.0f; //Adjust Width with scale int height_factor = (1 << 10) * icon_h / height; int width_factor = (1 << 10) * icon_w / width; if (CVar_GetS32("gHudColors", 1) == 2 && CVar_GetS32("gCCparated", 0)) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, C_button_uni.r, C_button_uni.g, C_button_uni.b, 255); for (s16 i=0; i < 3; i++) { if (i == 0) { icon_x_offset = width_crop*3-3; gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, C_button_R.r, C_button_R.g, C_button_R.b, 255); } else if (i == 1) { icon_x_offset = width_crop*2-3; gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, C_button_D.r, C_button_D.g, C_button_D.b, 255); } else if (i == 2) { icon_x_offset = width_crop; gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, C_button_L.r, C_button_L.g, C_button_L.b, 255); } gDPLoadTextureBlock(POLY_KAL_DISP++, gCBtnSymbolsTex, G_IM_FMT_IA, G_IM_SIZ_8b, icon_w, icon_h, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); //gSPScisTextureRectangle(POLY_KAL_DISP++,PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_RENDERTILE, 0, 0, width_factor, height_factor); gSPWideTextureRectangle(POLY_KAL_DISP++, PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_WRAP, 0, 0, width_factor, height_factor); } } else { if (CVar_GetS32("gHudColors", 1) == 0) {//To equip text C button icon gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, C_button_ori.r, C_button_ori.g, C_button_ori.b, 255); } else if (CVar_GetS32("gHudColors", 1) == 1) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, C_button_ori.r, C_button_ori.g, C_button_ori.b, 255); } else if (CVar_GetS32("gHudColors", 1) == 2 && !CVar_GetS32("gCCparated", 0)) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, C_button_uni.r, C_button_uni.g, C_button_uni.b, 255); } gDPLoadTextureBlock(POLY_KAL_DISP++, gCBtnSymbolsTex, G_IM_FMT_IA, G_IM_SIZ_8b, icon_w, icon_h, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(POLY_KAL_DISP++, PosX << 2, PosY << 2, (PosX + width) << 2, (PosY + height) << 2, G_TX_RENDERTILE, 0, 0, width_factor, height_factor); } gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sToEquipTextures[gSaveContext.language], D_8082ADD8[gSaveContext.language], 16, 4); } else if ((pauseCtx->pageIndex == PAUSE_MAP) && sInDungeonScene) { } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= 6) && (pauseCtx->cursorSlot[PAUSE_QUEST] <= 0x11)) { if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(55 + gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 24; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language); if (gSaveContext.language == LANGUAGE_GER) { pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] - 99; } pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADE8[gSaveContext.language]; pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x300; pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADE8[gSaveContext.language] << 5; if (CVar_GetS32("gHudColors", 1) == 0) {//To play melody A button gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[1][0], gABtnTexColour[1][1], gABtnTexColour[1][2], gABtnTexColour[1][3]); } else if (CVar_GetS32("gHudColors", 1) == 1) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[0][0], gABtnTexColour[0][1], gABtnTexColour[0][2], gABtnTexColour[0][3]); } else if (CVar_GetS32("gHudColors", 1) == 2) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, A_button.r, A_button.g, A_button.b, gABtnTexColour[0][3]); } //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPlayMelodyTextures[gSaveContext.language], D_8082ADE8[gSaveContext.language], 16, 4); } } else if (pauseCtx->pageIndex == PAUSE_EQUIP) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(64 + gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 24; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language); pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADD8[gSaveContext.language]; pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x300; pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADD8[gSaveContext.language] << 5; if (!(CHECK_OWNED_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP] - 1)) && (pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) { return; } //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); if (CVar_GetS32("gHudColors", 1) == 0) {//To equip A button gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[1][0], gABtnTexColour[1][1], gABtnTexColour[1][2], gABtnTexColour[1][3]); } else if (CVar_GetS32("gHudColors", 1) == 1) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[0][0], gABtnTexColour[0][1], gABtnTexColour[0][2], gABtnTexColour[0][3]); } else if (CVar_GetS32("gHudColors", 1) == 2) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, A_button.r, A_button.g, A_button.b, gABtnTexColour[0][3]); } gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sToEquipTextures[gSaveContext.language], D_8082ADD8[gSaveContext.language], 16, 4); } } } CLOSE_DISPS(globalCtx->state.gfxCtx); } void KaleidoScope_UpdateNamePanel(GlobalContext* globalCtx) { PauseContext* pauseCtx = &globalCtx->pauseCtx; u16 sp2A; if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) || ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) { pauseCtx->namedItem = pauseCtx->cursorItem[pauseCtx->pageIndex]; sp2A = pauseCtx->namedItem; osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1); if (CVar_GetS32("gPauseAnyCursor", 0) && ((pauseCtx->pageIndex == PAUSE_EQUIP && pauseCtx->cursorX[PAUSE_EQUIP] != 0 && !CHECK_OWNED_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP] - 1)) || (pauseCtx->pageIndex == PAUSE_ITEM && gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] == ITEM_NONE))) { pauseCtx->namedItem = PAUSE_ITEM_NONE; } if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) { if (gSaveContext.language) { sp2A += 12; } if (gSaveContext.language == LANGUAGE_FRA) { sp2A += 12; } const char* textureName = mapNameTextures[sp2A]; memcpy(pauseCtx->nameSegment, ResourceMgr_LoadTexByName(textureName), ResourceMgr_LoadTexSizeByName(textureName)); } else { osSyncPrintf("zoom_name=%d\n", pauseCtx->namedItem); if (gSaveContext.language) { sp2A += 123; } if (gSaveContext.language == LANGUAGE_FRA) { sp2A += 123; } osSyncPrintf("J_N=%d point=%d\n", gSaveContext.language, sp2A); const char* textureName = iconNameTextures[sp2A]; memcpy(pauseCtx->nameSegment, ResourceMgr_LoadTexByName(textureName), ResourceMgr_LoadTexSizeByName(textureName)); } pauseCtx->nameDisplayTimer = 0; } } else if (pauseCtx->nameColorSet == 0) { if (((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= 6) && (pauseCtx->cursorSlot[PAUSE_QUEST] <= 0x11) && (pauseCtx->unk_1E4 == 8)) || (pauseCtx->pageIndex == PAUSE_ITEM) || ((pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0))) { if (pauseCtx->namedItem != ITEM_SOLD_OUT) { pauseCtx->nameDisplayTimer++; if (pauseCtx->nameDisplayTimer > WREG(88)) { pauseCtx->nameDisplayTimer = 0; } } } else { pauseCtx->nameDisplayTimer = 0; } } else { pauseCtx->nameDisplayTimer = 0; } } void func_808237B4(GlobalContext* globalCtx, Input* input) { PauseContext* pauseCtx = &globalCtx->pauseCtx; s32 cond = false; s32 mode; if (ZREG(13) && !CHECK_BTN_ALL(input->press.button, BTN_L)) { cond = true; } if (!cond) { mode = pauseCtx->mode; pauseCtx->eye.x += D_8082ABAC[mode]; pauseCtx->eye.z += D_8082ABCC[mode]; if (pauseCtx->unk_1EA < 32) { WREG(16) -= WREG(25) / WREG(6); WREG(17) -= WREG(26) / WREG(6); } else { WREG(16) += WREG(25) / WREG(6); WREG(17) += WREG(26) / WREG(6); } pauseCtx->unk_1EA += 4; if (pauseCtx->unk_1EA == 64) { pauseCtx->unk_1EA = 0; pauseCtx->pageIndex = D_8082ABEC[pauseCtx->mode]; pauseCtx->unk_1E4 = 0; } } } void KaleidoScope_SetView(PauseContext* pauseCtx, f32 x, f32 y, f32 z) { Vec3f eye; Vec3f lookAt; Vec3f up; eye.x = x; eye.y = y; eye.z = z; lookAt.x = lookAt.y = lookAt.z = 0.0f; up.x = up.z = 0.0f; up.y = 1.0f; func_800AA358(&pauseCtx->view, &eye, &lookAt, &up); func_800AAA50(&pauseCtx->view, 127); } static u8 D_8082AE48[][4] = { { 10, 70, 70, 10 }, { 10, 90, 90, 10 }, { 80, 140, 140, 80 }, { 80, 120, 120, 80 }, { 80, 140, 140, 80 }, { 50, 110, 110, 50 }, }; static u8 D_8082AE60[][4] = { { 50, 100, 100, 50 }, { 50, 100, 100, 50 }, { 40, 60, 60, 40 }, { 80, 120, 120, 80 }, { 40, 60, 60, 40 }, { 50, 110, 110, 50 }, }; static u8 D_8082AE78[][4] = { { 80, 130, 130, 80 }, { 40, 60, 60, 40 }, { 30, 60, 60, 30 }, { 50, 70, 70, 50 }, { 30, 60, 60, 30 }, { 50, 110, 110, 50 }, }; static s16 D_8082AE90[] = { 0x0000, 0x0000, }; static s16 D_8082AE94[] = { 0x0000, 0x0000, }; static s16 D_8082AE98[] = { 0xFFDC, 0x000C, 0xFFEE, 0x0046, 0x0046, 0x0046, 0xFFA8, 0xFFA8, 0xFFA8, 0xFFA8, 0xFFA8, 0xFFA8, 0xFFA8, 0xFFA8, 0xFF96, 0xFFC2, 0xFFD8, 0x0000, }; static s16 D_8082AEBC[] = { 0x0000, 0x0000, }; static s16 D_8082AEC0[] = { 0x002F, 0xFFCF, 0xFFEF, 0xFFF1, 0xFFF7, 0x0018, 0x002B, 0x000E, 0x0009, 0x0026, 0x0052, 0x0047, 0xFFB4, 0xFFA9, 0xFF94, 0xFFCA, 0xFFA3, 0xFFBD, 0xFFC8, 0xFFDF, 0xFFF6, 0x0001, 0x000E, 0x0018, 0x0023, 0x003A, 0x004A, 0x0059, 0x0000, 0xFFC6, 0x0013, 0x001C, }; static s16 D_8082AF00[] = { 0xFFB4, 0xFFC6, 0x000A, 0xFFC6, 0x000A, 0x0000, }; static s16 D_8082AF0C[] = { 0x0000, 0x0000, }; static s16 D_8082AF10[] = { 0x0000, 0x0000, }; static s16 D_8082AF14[] = { 0x0030, 0x0030, 0x0060, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0010, 0x0010, 0x0018, 0x0000, }; static s16 D_8082AF38[] = { 0x0000, 0x0000, }; static s16 D_8082AF3C[] = { 0x0098, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000, }; static s16 D_8082AF48[] = { 0x0000, 0x0000, }; static s16 D_8082AF4C[] = { 0x0000, 0x0000, }; static s16 D_8082AF50[] = { 0x001C, 0x001C, 0x002E, 0x001C, 0xFFFE, 0xFFE0, 0x0032, 0x0024, 0x0016, 0x0008, 0xFFFA, 0xFFEC, 0xFFDE, 0xFFD0, 0x0012, 0x0012, 0x0032, 0x0000, }; static s16 D_8082AF74[] = { 0x0000, 0x0000, }; static s16 D_8082AF78[] = { 0x000F, 0x0028, 0x000B, 0x002D, 0x0034, 0x0025, 0x0024, 0x0039, 0x0036, 0x0021, 0x001F, 0x002D, 0x0020, 0x002A, 0x0031, 0xFFF6, 0x001F, 0x001B, 0x000F, 0xFFCF, 0x0008, 0x0026, 0x0007, 0x002F, 0x001E, 0x0001, 0xFFF7, 0x0019, 0x0000, 0x0001, 0xFFE0, 0xFFE6, }; static s16 D_8082AFB8[] = { 0x0024, 0x000A, 0x000A, 0xFFFA, 0xFFFA, 0x0000, }; static s16 D_8082AFC4[] = { 0x0000, 0x0000, }; static s16 D_8082AFC8[] = { 0x0000, 0x0000, }; static s16 D_8082AFCC[] = { 0x0055, 0x0055, 0x0010, 0x0018, 0x0018, 0x0018, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0018, 0x0000, }; static s16 D_8082AFF0[] = { 0x0000, 0x0000, }; static s16 D_8082AFF4[] = { 0x0010, 0x0030, 0x0030, 0x0010, 0x0010, 0x0000, }; static s16* D_8082B000[] = { D_8082AE90, D_8082AE94, D_8082AE98, D_8082AEBC, D_8082AEC0, D_8082AF00, }; static s16* D_8082B018[] = { D_8082AF0C, D_8082AF10, D_8082AF14, D_8082AF38, D_8082AAEC, D_8082AF3C, }; static s16* D_8082B030[] = { D_8082AF48, D_8082AF4C, D_8082AF50, D_8082AF74, D_8082AF78, D_8082AFB8, }; static s16* D_8082B048[] = { D_8082AFC4, D_8082AFC8, D_8082AFCC, D_8082AFF0, D_8082AB2C, D_8082AFF4, }; static s16 D_8082B060[] = { 0xFFC6, 0x000B, 0x001E, 0x001E, 0x000F, 0x0026, 0xFFC2, 0x003C, 0x003D, 0xFFB2, 0xFED4, 0xFFAA, 0xFFBF, 0xFED4, 0xFED4, 0xFFEB, 0x000E, 0x000D, 0x0014, 0xFFDE, 0xFED4, 0x0000, }; static s16 D_8082B08C[] = { 0x0059, 0x0014, 0x000E, 0x0023, 0x0020, 0x0011, 0x0032, 0x0010, 0x0015, 0x0014, 0xFFFF, 0x0020, 0x0010, 0xFFFF, 0xFFFF, 0x0013, 0x0013, 0x0015, 0x0010, 0x0014, 0xFFFF, 0x0000, }; static s16 D_8082B0B8[] = { 0x0001, 0x000F, 0x0014, 0x0009, 0xFFE2, 0xFFEF, 0xFFDE, 0x000F, 0x001E, 0x0001, 0xFED4, 0x002A, 0x0007, 0xFED4, 0xFED4, 0x0018, 0x0024, 0x0035, 0x0025, 0xFFF3, 0xFED4, 0x0000, }; static s16 D_8082B0E4[] = { 0x0024, 0x000F, 0x0010, 0x0017, 0x0017, 0x0010, 0x0018, 0x000D, 0x0011, 0x0012, 0x0001, 0x0019, 0x000D, 0x0001, 0x0001, 0x000D, 0x0015, 0x000F, 0x000D, 0x000C, 0x0001, 0x0000, }; s16 func_80823A0C(GlobalContext* globalCtx, Vtx* vtx, s16 arg2, s16 arg3) { static s16 D_8082B110 = 0; static s16 D_8082B114 = 1; static s16 D_8082B118 = 0; PauseContext* pauseCtx = &globalCtx->pauseCtx; s16* ptr1; s16* ptr2; s16* ptr3; s16* ptr4; s16 phi_s2; s16 phi_t0; s16 phi_a1; s16 phi_a2; s16 phi_t3; s16 phi_t1; phi_t0 = -200; for (phi_t1 = 0, phi_t3 = 0; phi_t3 < 3; phi_t3++) { phi_t0 += 80; for (phi_a1 = 80, phi_a2 = 0; phi_a2 < 5; phi_a2++, phi_t1 += 4, phi_a1 -= 32) { vtx[phi_t1 + 0].v.ob[0] = vtx[phi_t1 + 2].v.ob[0] = phi_t0; vtx[phi_t1 + 1].v.ob[0] = vtx[phi_t1 + 3].v.ob[0] = vtx[phi_t1 + 0].v.ob[0] + 80; vtx[phi_t1 + 0].v.ob[1] = vtx[phi_t1 + 1].v.ob[1] = phi_a1 + pauseCtx->offsetY; vtx[phi_t1 + 2].v.ob[1] = vtx[phi_t1 + 3].v.ob[1] = vtx[phi_t1 + 0].v.ob[1] - 32; vtx[phi_t1 + 0].v.ob[2] = vtx[phi_t1 + 1].v.ob[2] = vtx[phi_t1 + 2].v.ob[2] = vtx[phi_t1 + 3].v.ob[2] = 0; vtx[phi_t1 + 0].v.flag = 0; vtx[phi_t1 + 1].v.flag = 0; vtx[phi_t1 + 2].v.flag = 0; vtx[phi_t1 + 3].v.flag = 0; vtx[phi_t1 + 0].v.tc[0] = vtx[phi_t1 + 0].v.tc[1] = vtx[phi_t1 + 1].v.tc[1] = vtx[phi_t1 + 2].v.tc[0] = 0; vtx[phi_t1 + 1].v.tc[0] = vtx[phi_t1 + 3].v.tc[0] = 0xA00; vtx[phi_t1 + 2].v.tc[1] = vtx[phi_t1 + 3].v.tc[1] = 0x400; vtx[phi_t1 + 0].v.cn[0] = vtx[phi_t1 + 2].v.cn[0] = D_8082AE48[arg2][phi_t3 + 0]; vtx[phi_t1 + 0].v.cn[1] = vtx[phi_t1 + 2].v.cn[1] = D_8082AE60[arg2][phi_t3 + 0]; vtx[phi_t1 + 0].v.cn[2] = vtx[phi_t1 + 2].v.cn[2] = D_8082AE78[arg2][phi_t3 + 0]; vtx[phi_t1 + 1].v.cn[0] = vtx[phi_t1 + 3].v.cn[0] = D_8082AE48[arg2][phi_t3 + 1]; vtx[phi_t1 + 1].v.cn[1] = vtx[phi_t1 + 3].v.cn[1] = D_8082AE60[arg2][phi_t3 + 1]; vtx[phi_t1 + 1].v.cn[2] = vtx[phi_t1 + 3].v.cn[2] = D_8082AE78[arg2][phi_t3 + 1]; vtx[phi_t1 + 0].v.cn[3] = vtx[phi_t1 + 2].v.cn[3] = vtx[phi_t1 + 1].v.cn[3] = vtx[phi_t1 + 3].v.cn[3] = pauseCtx->alpha; } } phi_s2 = phi_t1; if (arg3 != 0) { ptr1 = D_8082B000[arg2]; ptr2 = D_8082B018[arg2]; ptr3 = D_8082B030[arg2]; ptr4 = D_8082B048[arg2]; for (phi_t3 = 0; phi_t3 < arg3; phi_t3++, phi_t1 += 4) { vtx[phi_t1 + 2].v.ob[0] = vtx[phi_t1 + 0].v.ob[0] = ptr1[phi_t3]; vtx[phi_t1 + 1].v.ob[0] = vtx[phi_t1 + 3].v.ob[0] = vtx[phi_t1 + 0].v.ob[0] + ptr2[phi_t3]; if (!((pauseCtx->state >= 8) && (pauseCtx->state <= 0x11))) { vtx[phi_t1 + 0].v.ob[1] = vtx[phi_t1 + 1].v.ob[1] = ptr3[phi_t3] + pauseCtx->offsetY; } else { vtx[phi_t1 + 0].v.ob[1] = vtx[phi_t1 + 1].v.ob[1] = YREG(60 + phi_t3) + pauseCtx->offsetY; } vtx[phi_t1 + 2].v.ob[1] = vtx[phi_t1 + 3].v.ob[1] = vtx[phi_t1 + 0].v.ob[1] - ptr4[phi_t3]; vtx[phi_t1 + 0].v.ob[2] = vtx[phi_t1 + 1].v.ob[2] = vtx[phi_t1 + 2].v.ob[2] = vtx[phi_t1 + 3].v.ob[2] = 0; vtx[phi_t1 + 0].v.flag = vtx[phi_t1 + 1].v.flag = vtx[phi_t1 + 2].v.flag = vtx[phi_t1 + 3].v.flag = 0; vtx[phi_t1 + 0].v.tc[0] = vtx[phi_t1 + 0].v.tc[1] = vtx[phi_t1 + 1].v.tc[1] = vtx[phi_t1 + 2].v.tc[0] = 0; vtx[phi_t1 + 1].v.tc[0] = vtx[phi_t1 + 3].v.tc[0] = ptr2[phi_t3] << 5; vtx[phi_t1 + 2].v.tc[1] = vtx[phi_t1 + 3].v.tc[1] = ptr4[phi_t3] << 5; vtx[phi_t1 + 0].v.cn[0] = vtx[phi_t1 + 2].v.cn[0] = vtx[phi_t1 + 0].v.cn[1] = vtx[phi_t1 + 2].v.cn[1] = vtx[phi_t1 + 0].v.cn[2] = vtx[phi_t1 + 2].v.cn[2] = vtx[phi_t1 + 1].v.cn[0] = vtx[phi_t1 + 3].v.cn[0] = vtx[phi_t1 + 1].v.cn[1] = vtx[phi_t1 + 3].v.cn[1] = vtx[phi_t1 + 1].v.cn[2] = vtx[phi_t1 + 3].v.cn[2] = 255; vtx[phi_t1 + 0].v.cn[3] = vtx[phi_t1 + 2].v.cn[3] = vtx[phi_t1 + 1].v.cn[3] = vtx[phi_t1 + 3].v.cn[3] = pauseCtx->alpha; } if (arg2 == 4) { phi_t1 -= 12; phi_t3 = gSaveContext.worldMapArea; vtx[phi_t1 + 0].v.ob[0] = vtx[phi_t1 + 2].v.ob[0] = D_8082B060[phi_t3]; if (phi_t3) {} vtx[phi_t1 + 1].v.ob[0] = vtx[phi_t1 + 3].v.ob[0] = vtx[phi_t1 + 0].v.ob[0] + D_8082B08C[phi_t3]; vtx[phi_t1 + 0].v.ob[1] = vtx[phi_t1 + 1].v.ob[1] = D_8082B0B8[phi_t3] + pauseCtx->offsetY; vtx[phi_t1 + 2].v.ob[1] = vtx[phi_t1 + 3].v.ob[1] = vtx[phi_t1 + 0].v.ob[1] - D_8082B0E4[phi_t3]; phi_t1 += 12; if (pauseCtx->tradeQuestLocation != 0xFF) { if (D_8082B114 == 0) { D_8082B118++; switch (D_8082B118) { case 1: D_8082B110 = 3; D_8082B114 = 8; break; case 2: D_8082B110 = 0; D_8082B114 = 6; D_8082B118 = 0; break; } } else { D_8082B114--; } phi_t3 = phi_s2 + (pauseCtx->tradeQuestLocation * 4) + 64; phi_a2 = phi_s2 + 116; vtx[phi_a2 + 0].v.ob[0] = vtx[phi_a2 + 2].v.ob[0] = vtx[phi_t3 + 0].v.ob[0]; vtx[phi_a2 + 1].v.ob[0] = vtx[phi_a2 + 3].v.ob[0] = vtx[phi_a2 + 0].v.ob[0] + 8; vtx[phi_a2 + 0].v.ob[1] = vtx[phi_a2 + 1].v.ob[1] = vtx[phi_t3 + 0].v.ob[1] - D_8082B110 + 10; vtx[phi_a2 + 0].v.ob[2] = vtx[phi_a2 + 1].v.ob[2] = vtx[phi_a2 + 2].v.ob[2] = vtx[phi_a2 + 3].v.ob[2] = 0; vtx[phi_a2 + 2].v.ob[1] = vtx[phi_a2 + 3].v.ob[1] = vtx[phi_a2 + 0].v.ob[1] - 8; vtx[phi_a2 + 0].v.flag = vtx[phi_a2 + 1].v.flag = vtx[phi_a2 + 2].v.flag = vtx[phi_a2 + 3].v.flag = 0; vtx[phi_t1].v.tc[0] = vtx[phi_t1].v.tc[1] = vtx[phi_a2 + 1].v.tc[1] = vtx[phi_a2 + 2].v.tc[0] = 0; vtx[phi_a2 + 1].v.tc[0] = vtx[phi_a2 + 3].v.tc[0] = 0x100; vtx[phi_a2 + 2].v.tc[1] = vtx[phi_a2 + 3].v.tc[1] = 0x100; vtx[phi_a2 + 0].v.cn[0] = vtx[phi_a2 + 2].v.cn[0] = vtx[phi_a2 + 0].v.cn[1] = vtx[phi_a2 + 2].v.cn[1] = vtx[phi_a2 + 0].v.cn[2] = vtx[phi_a2 + 2].v.cn[2] = vtx[phi_a2 + 1].v.cn[0] = vtx[phi_a2 + 3].v.cn[0] = vtx[phi_a2 + 1].v.cn[1] = vtx[phi_a2 + 3].v.cn[1] = vtx[phi_a2 + 1].v.cn[2] = vtx[phi_a2 + 3].v.cn[2] = 255; vtx[phi_a2 + 0].v.cn[3] = vtx[phi_a2 + 2].v.cn[3] = vtx[phi_a2 + 1].v.cn[3] = vtx[phi_a2 + 3].v.cn[3] = pauseCtx->alpha; } } } return phi_t1; } static s16 D_8082B11C[] = { 0, 4, 8, 12, 24, 32, 56 }; static s16 D_8082B12C[] = { -114, 12, 44, 76 }; static u8 D_8082B134[] = { 1, 5, 9, 13 }; static s16 D_8082B138[] = { 74, 74, 46, 18, 18, 46, -108, -90, -72, -54, -36, -18, -108, -90, -72, -54, -36, -18, 20, 46, 72, -110, -86, -110, -54, -98, -86, -74, -62, -50, -38, -26, -14, -98, -86, -74, -62, -50, -38, -26, -14, -88, -81, -72, -90, -83, -74, }; static s16 D_8082B198[] = { 38, 6, -12, 6, 38, 56, -20, -20, -20, -20, -20, -20, 2, 2, 2, 2, 2, 2, -46, -46, -46, 58, 58, 34, 58, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 34, 34, 34, 36, 36, 36, }; static s16 D_8082B1F8[] = { 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 48, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, }; void KaleidoScope_InitVertices(GlobalContext* globalCtx, GraphicsContext* gfxCtx) { PauseContext* pauseCtx = &globalCtx->pauseCtx; s16 phi_t1; s16 phi_t2; s16 phi_t2_2; s16 phi_t3; s16 phi_t4; s16 phi_t5; pauseCtx->offsetY = 0; if ((pauseCtx->state == 4) || (pauseCtx->state >= 0x12) || ((pauseCtx->state == 7) && ((pauseCtx->unk_1EC == 2) || (pauseCtx->unk_1EC == 5))) || ((pauseCtx->state >= 8) && (pauseCtx->state <= 0xD))) { pauseCtx->offsetY = 80; } pauseCtx->itemPageVtx = Graph_Alloc(gfxCtx, 60 * sizeof(Vtx)); func_80823A0C(globalCtx, pauseCtx->itemPageVtx, 0, 0); pauseCtx->equipPageVtx = Graph_Alloc(gfxCtx, 60 * sizeof(Vtx)); func_80823A0C(globalCtx, pauseCtx->equipPageVtx, 1, 0); if (!sInDungeonScene) { pauseCtx->mapPageVtx = Graph_Alloc(gfxCtx, 248 * sizeof(Vtx)); phi_t3 = func_80823A0C(globalCtx, pauseCtx->mapPageVtx, 4, 32); for (phi_t2 = 0, phi_t5 = 58; phi_t2 < 15; phi_t2++, phi_t3 += 4, phi_t5 -= 9) { pauseCtx->mapPageVtx[phi_t3 + 2].v.ob[0] = -108; pauseCtx->mapPageVtx[phi_t3 + 0].v.ob[0] = pauseCtx->mapPageVtx[phi_t3 + 2].v.ob[0]; pauseCtx->mapPageVtx[phi_t3 + 1].v.ob[0] = pauseCtx->mapPageVtx[phi_t3 + 3].v.ob[0] = pauseCtx->mapPageVtx[phi_t3 + 0].v.ob[0] + 216; pauseCtx->mapPageVtx[phi_t3 + 0].v.ob[1] = pauseCtx->mapPageVtx[phi_t3 + 1].v.ob[1] = phi_t5 + pauseCtx->offsetY; pauseCtx->mapPageVtx[phi_t3 + 2].v.ob[1] = pauseCtx->mapPageVtx[phi_t3 + 3].v.ob[1] = pauseCtx->mapPageVtx[phi_t3 + 0].v.ob[1] - 9; pauseCtx->mapPageVtx[phi_t3 + 0].v.ob[2] = pauseCtx->mapPageVtx[phi_t3 + 1].v.ob[2] = pauseCtx->mapPageVtx[phi_t3 + 2].v.ob[2] = pauseCtx->mapPageVtx[phi_t3 + 3].v.ob[2] = 0; pauseCtx->mapPageVtx[phi_t3 + 0].v.flag = pauseCtx->mapPageVtx[phi_t3 + 1].v.flag = pauseCtx->mapPageVtx[phi_t3 + 2].v.flag = pauseCtx->mapPageVtx[phi_t3 + 3].v.flag = 0; pauseCtx->mapPageVtx[phi_t3 + 0].v.tc[0] = pauseCtx->mapPageVtx[phi_t3 + 0].v.tc[1] = pauseCtx->mapPageVtx[phi_t3 + 1].v.tc[1] = pauseCtx->mapPageVtx[phi_t3 + 2].v.tc[0] = 0; pauseCtx->mapPageVtx[phi_t3 + 1].v.tc[0] = pauseCtx->mapPageVtx[phi_t3 + 3].v.tc[0] = 0x1B00; pauseCtx->mapPageVtx[phi_t3 + 2].v.tc[1] = pauseCtx->mapPageVtx[phi_t3 + 3].v.tc[1] = 0x120; pauseCtx->mapPageVtx[phi_t3 + 0].v.cn[0] = pauseCtx->mapPageVtx[phi_t3 + 2].v.cn[0] = pauseCtx->mapPageVtx[phi_t3 + 0].v.cn[1] = pauseCtx->mapPageVtx[phi_t3 + 2].v.cn[1] = pauseCtx->mapPageVtx[phi_t3 + 0].v.cn[2] = pauseCtx->mapPageVtx[phi_t3 + 2].v.cn[2] = pauseCtx->mapPageVtx[phi_t3 + 1].v.cn[0] = pauseCtx->mapPageVtx[phi_t3 + 3].v.cn[0] = pauseCtx->mapPageVtx[phi_t3 + 1].v.cn[1] = pauseCtx->mapPageVtx[phi_t3 + 3].v.cn[1] = pauseCtx->mapPageVtx[phi_t3 + 1].v.cn[2] = pauseCtx->mapPageVtx[phi_t3 + 3].v.cn[2] = pauseCtx->mapPageVtx[phi_t3 + 0].v.cn[3] = pauseCtx->mapPageVtx[phi_t3 + 2].v.cn[3] = pauseCtx->mapPageVtx[phi_t3 + 1].v.cn[3] = pauseCtx->mapPageVtx[phi_t3 + 3].v.cn[3] = pauseCtx->alpha; } pauseCtx->mapPageVtx[phi_t3 - 2].v.ob[1] = pauseCtx->mapPageVtx[phi_t3 - 1].v.ob[1] = pauseCtx->mapPageVtx[phi_t3 - 4].v.ob[1] - 2; pauseCtx->mapPageVtx[phi_t3 - 2].v.tc[1] = pauseCtx->mapPageVtx[phi_t3 - 1].v.tc[1] = 0x40; } else { pauseCtx->mapPageVtx = Graph_Alloc(gfxCtx, 128 * sizeof(Vtx)); func_80823A0C(globalCtx, pauseCtx->mapPageVtx, 2, 17); } pauseCtx->questPageVtx = Graph_Alloc(gfxCtx, 60 * sizeof(Vtx)); func_80823A0C(globalCtx, pauseCtx->questPageVtx, 3, 0); pauseCtx->cursorVtx = Graph_Alloc(gfxCtx, 20 * sizeof(Vtx)); for (phi_t2 = 0; phi_t2 < 20; phi_t2++) { pauseCtx->cursorVtx[phi_t2].v.ob[0] = pauseCtx->cursorVtx[phi_t2].v.ob[1] = pauseCtx->cursorVtx[phi_t2].v.ob[2] = 0; pauseCtx->cursorVtx[phi_t2].v.flag = 0; pauseCtx->cursorVtx[phi_t2].v.tc[0] = pauseCtx->cursorVtx[phi_t2].v.tc[1] = 0; pauseCtx->cursorVtx[phi_t2].v.cn[0] = pauseCtx->cursorVtx[phi_t2].v.cn[1] = pauseCtx->cursorVtx[phi_t2].v.cn[2] = pauseCtx->cursorVtx[phi_t2].v.cn[3] = 255; } pauseCtx->cursorVtx[1].v.tc[0] = pauseCtx->cursorVtx[2].v.tc[1] = pauseCtx->cursorVtx[3].v.tc[0] = pauseCtx->cursorVtx[3].v.tc[1] = pauseCtx->cursorVtx[5].v.tc[0] = pauseCtx->cursorVtx[6].v.tc[1] = pauseCtx->cursorVtx[7].v.tc[0] = pauseCtx->cursorVtx[7].v.tc[1] = pauseCtx->cursorVtx[9].v.tc[0] = pauseCtx->cursorVtx[10].v.tc[1] = pauseCtx->cursorVtx[11].v.tc[0] = pauseCtx->cursorVtx[11].v.tc[1] = pauseCtx->cursorVtx[13].v.tc[0] = pauseCtx->cursorVtx[14].v.tc[1] = pauseCtx->cursorVtx[15].v.tc[0] = pauseCtx->cursorVtx[15].v.tc[1] = 0x200; pauseCtx->cursorVtx[17].v.tc[0] = pauseCtx->cursorVtx[18].v.tc[1] = pauseCtx->cursorVtx[19].v.tc[0] = pauseCtx->cursorVtx[19].v.tc[1] = 0x400; // 24 items, 7 "item selected" backgrounds, 14 ammo digits (2 each for 7 items) -- then 4 vertices for each pauseCtx->itemVtx = Graph_Alloc(gfxCtx, (24 + 7 + 14) * 4 * sizeof(Vtx)); for (phi_t4 = 0, phi_t2 = 0, phi_t5 = 58; phi_t4 < 4; phi_t4++, phi_t5 -= 32) { for (phi_t1 = -96, phi_t3 = 0; phi_t3 < 6; phi_t3++, phi_t2 += 4, phi_t1 += 32) { pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] = phi_t1 + 2; pauseCtx->itemVtx[phi_t2 + 1].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] + 0x1C; pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 1].v.ob[1] = phi_t5 + pauseCtx->offsetY - 2; pauseCtx->itemVtx[phi_t2 + 2].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] - 0x1C; pauseCtx->itemVtx[phi_t2 + 0].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 1].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[2] = 0; pauseCtx->itemVtx[phi_t2 + 0].v.flag = pauseCtx->itemVtx[phi_t2 + 1].v.flag = pauseCtx->itemVtx[phi_t2 + 2].v.flag = pauseCtx->itemVtx[phi_t2 + 3].v.flag = 0; pauseCtx->itemVtx[phi_t2 + 0].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 0].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 1].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 2].v.tc[0] = 0; pauseCtx->itemVtx[phi_t2 + 1].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 2].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 3].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 3].v.tc[1] = 0x400; pauseCtx->itemVtx[phi_t2 + 0].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 0].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 0].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[2] = 255; pauseCtx->itemVtx[phi_t2 + 0].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[3] = 255; } } for (phi_t3 = 1; phi_t3 < ARRAY_COUNT(gSaveContext.equips.buttonItems); phi_t3++, phi_t2 += 4) { if (gSaveContext.equips.cButtonSlots[phi_t3 - 1] != ITEM_NONE && ((phi_t3 < 4) || CVar_GetS32("gDpadEquips", 0))) { phi_t4 = gSaveContext.equips.cButtonSlots[phi_t3 - 1] * 4; pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] = pauseCtx->itemVtx[phi_t4].v.ob[0] - 2; pauseCtx->itemVtx[phi_t2 + 1].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] + 32; pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 1].v.ob[1] = pauseCtx->itemVtx[phi_t4].v.ob[1] + 2; pauseCtx->itemVtx[phi_t2 + 2].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] - 32; pauseCtx->itemVtx[phi_t2 + 0].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 1].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[2] = 0; pauseCtx->itemVtx[phi_t2 + 0].v.flag = pauseCtx->itemVtx[phi_t2 + 1].v.flag = pauseCtx->itemVtx[phi_t2 + 2].v.flag = pauseCtx->itemVtx[phi_t2 + 3].v.flag = 0; pauseCtx->itemVtx[phi_t2 + 0].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 0].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 1].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 2].v.tc[0] = 0; pauseCtx->itemVtx[phi_t2 + 1].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 2].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 3].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 3].v.tc[1] = 0x400; pauseCtx->itemVtx[phi_t2 + 0].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 0].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 0].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[2] = 255; pauseCtx->itemVtx[phi_t2 + 0].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[3] = pauseCtx->alpha; } else { pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] = -300; pauseCtx->itemVtx[phi_t2 + 1].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] + 32; pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 1].v.ob[1] = 300; pauseCtx->itemVtx[phi_t2 + 2].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] - 32; } } for (phi_t3 = 0; phi_t3 < 7; phi_t3++) { phi_t4 = D_8082B11C[phi_t3]; pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] = pauseCtx->itemVtx[phi_t4].v.ob[0]; pauseCtx->itemVtx[phi_t2 + 1].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] + 8; pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 1].v.ob[1] = pauseCtx->itemVtx[phi_t4].v.ob[1] - 22; pauseCtx->itemVtx[phi_t2 + 2].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[1] - 8; pauseCtx->itemVtx[phi_t2 + 4].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 6].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] + 6; pauseCtx->itemVtx[phi_t2 + 5].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 7].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 4].v.ob[0] + 8; pauseCtx->itemVtx[phi_t2 + 4].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 5].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 0].v.ob[1]; pauseCtx->itemVtx[phi_t2 + 6].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 7].v.ob[1] = pauseCtx->itemVtx[phi_t2 + 4].v.ob[1] - 8; for (phi_t4 = 0; phi_t4 < 2; phi_t4++, phi_t2 += 4) { pauseCtx->itemVtx[phi_t2 + 0].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 1].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[2] = pauseCtx->itemVtx[phi_t2 + 3].v.ob[2] = 0; pauseCtx->itemVtx[phi_t2 + 0].v.flag = pauseCtx->itemVtx[phi_t2 + 1].v.flag = pauseCtx->itemVtx[phi_t2 + 2].v.flag = pauseCtx->itemVtx[phi_t2 + 3].v.flag = 0; pauseCtx->itemVtx[phi_t2 + 0].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 0].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 1].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 2].v.tc[0] = 0; pauseCtx->itemVtx[phi_t2 + 1].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 2].v.tc[1] = pauseCtx->itemVtx[phi_t2 + 3].v.tc[0] = pauseCtx->itemVtx[phi_t2 + 3].v.tc[1] = 0x100; pauseCtx->itemVtx[phi_t2 + 0].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[0] = pauseCtx->itemVtx[phi_t2 + 0].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[1] = pauseCtx->itemVtx[phi_t2 + 0].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[2] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[2] = 255; pauseCtx->itemVtx[phi_t2 + 0].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 1].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 2].v.cn[3] = pauseCtx->itemVtx[phi_t2 + 3].v.cn[3] = pauseCtx->alpha; } } pauseCtx->equipVtx = Graph_Alloc(gfxCtx, 112 * sizeof(Vtx)); for (phi_t4 = 0, phi_t2 = 0, phi_t5 = 58; phi_t2 < 4; phi_t2++, phi_t5 -= 32) { for (phi_t3 = 0; phi_t3 < 4; phi_t3++, phi_t4 += 4) { pauseCtx->equipVtx[phi_t4 + 0].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 2].v.ob[0] = D_8082B12C[phi_t3] + 2; pauseCtx->equipVtx[phi_t4 + 1].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 0].v.ob[0] + 28; pauseCtx->equipVtx[phi_t4 + 0].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 1].v.ob[1] = phi_t5 + pauseCtx->offsetY - 2; pauseCtx->equipVtx[phi_t4 + 2].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 0].v.ob[1] - 28; pauseCtx->equipVtx[phi_t4 + 0].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 1].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 2].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[2] = 0; pauseCtx->equipVtx[phi_t4 + 0].v.flag = pauseCtx->equipVtx[phi_t4 + 1].v.flag = pauseCtx->equipVtx[phi_t4 + 2].v.flag = pauseCtx->equipVtx[phi_t4 + 3].v.flag = 0; pauseCtx->equipVtx[phi_t4 + 0].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 0].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 1].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 2].v.tc[0] = 0; pauseCtx->equipVtx[phi_t4 + 1].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 2].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 3].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 3].v.tc[1] = 0x400; pauseCtx->equipVtx[phi_t4 + 0].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 0].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 0].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[2] = 255; pauseCtx->equipVtx[phi_t4 + 0].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[3] = pauseCtx->alpha; } } for (phi_t3 = 0; phi_t3 < 4; phi_t3++, phi_t4 += 4) { if (CUR_EQUIP_VALUE(phi_t3) != 0) { phi_t2 = (CUR_EQUIP_VALUE(phi_t3) + D_8082B134[phi_t3] - 1) * 4; pauseCtx->equipVtx[phi_t4 + 0].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 2].v.ob[0] = pauseCtx->equipVtx[phi_t2].v.ob[0] - 2; pauseCtx->equipVtx[phi_t4 + 1].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 0].v.ob[0] + 32; pauseCtx->equipVtx[phi_t4 + 0].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 1].v.ob[1] = pauseCtx->equipVtx[phi_t2].v.ob[1] + 2; pauseCtx->equipVtx[phi_t4 + 2].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 0].v.ob[1] - 32; pauseCtx->equipVtx[phi_t4 + 0].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 1].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 2].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[2] = 0; pauseCtx->equipVtx[phi_t4 + 0].v.flag = pauseCtx->equipVtx[phi_t4 + 1].v.flag = pauseCtx->equipVtx[phi_t4 + 2].v.flag = pauseCtx->equipVtx[phi_t4 + 3].v.flag = 0; pauseCtx->equipVtx[phi_t4 + 0].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 0].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 1].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 2].v.tc[0] = 0; pauseCtx->equipVtx[phi_t4 + 1].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 2].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 3].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 3].v.tc[1] = 0x400; pauseCtx->equipVtx[phi_t4 + 0].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 0].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 0].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[2] = 255; pauseCtx->equipVtx[phi_t4 + 0].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[3] = pauseCtx->alpha; } } phi_t1 = 112; phi_t5 = 50; while (true) { pauseCtx->equipVtx[phi_t4 + 0].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 2].v.ob[0] = -64; pauseCtx->equipVtx[phi_t4 + 1].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[0] = pauseCtx->equipVtx[phi_t4 + 0].v.ob[0] + 64; pauseCtx->equipVtx[phi_t4 + 0].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 1].v.ob[1] = phi_t5 + pauseCtx->offsetY; pauseCtx->equipVtx[phi_t4 + 2].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 0].v.ob[1] - 32; pauseCtx->equipVtx[phi_t4 + 0].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 1].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 2].v.ob[2] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[2] = 0; pauseCtx->equipVtx[phi_t4 + 0].v.flag = pauseCtx->equipVtx[phi_t4 + 1].v.flag = pauseCtx->equipVtx[phi_t4 + 2].v.flag = pauseCtx->equipVtx[phi_t4 + 3].v.flag = 0; pauseCtx->equipVtx[phi_t4 + 0].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 0].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 1].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 2].v.tc[0] = 0; pauseCtx->equipVtx[phi_t4 + 1].v.tc[0] = pauseCtx->equipVtx[phi_t4 + 3].v.tc[0] = 0x800; pauseCtx->equipVtx[phi_t4 + 2].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 3].v.tc[1] = 0x400; pauseCtx->equipVtx[phi_t4 + 0].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[0] = pauseCtx->equipVtx[phi_t4 + 0].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[1] = pauseCtx->equipVtx[phi_t4 + 0].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[2] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[2] = 255; pauseCtx->equipVtx[phi_t4 + 0].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 1].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 2].v.cn[3] = pauseCtx->equipVtx[phi_t4 + 3].v.cn[3] = pauseCtx->alpha; phi_t1 -= 32; phi_t5 -= 32; if (phi_t1 < 0) { pauseCtx->equipVtx[phi_t4 + 2].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 3].v.ob[1] = pauseCtx->equipVtx[phi_t4 + 0].v.ob[1] - 0x10; pauseCtx->equipVtx[phi_t4 + 2].v.tc[1] = pauseCtx->equipVtx[phi_t4 + 3].v.tc[1] = 0x200; break; } phi_t4 += 4; } pauseCtx->questVtx = Graph_Alloc(gfxCtx, 188 * sizeof(Vtx)); for (phi_t4 = 0, phi_t3 = 0; phi_t3 < 47; phi_t3++, phi_t4 += 4) { phi_t2_2 = D_8082B1F8[phi_t3]; if ((phi_t3 < 6) || (phi_t3 >= 41)) { pauseCtx->questVtx[phi_t4 + 0].v.ob[0] = pauseCtx->questVtx[phi_t4 + 2].v.ob[0] = D_8082B138[phi_t3]; pauseCtx->questVtx[phi_t4 + 1].v.ob[0] = pauseCtx->questVtx[phi_t4 + 3].v.ob[0] = pauseCtx->questVtx[phi_t4 + 0].v.ob[0] + D_8082B1F8[phi_t3]; pauseCtx->questVtx[phi_t4 + 0].v.ob[1] = pauseCtx->questVtx[phi_t4 + 1].v.ob[1] = D_8082B198[phi_t3] + pauseCtx->offsetY; pauseCtx->questVtx[phi_t4 + 2].v.ob[1] = pauseCtx->questVtx[phi_t4 + 3].v.ob[1] = pauseCtx->questVtx[phi_t4 + 0].v.ob[1] - D_8082B1F8[phi_t3]; if (phi_t3 >= 41) { pauseCtx->questVtx[phi_t4 + 1].v.ob[0] = pauseCtx->questVtx[phi_t4 + 3].v.ob[0] = pauseCtx->questVtx[phi_t4 + 0].v.ob[0] + 8; pauseCtx->questVtx[phi_t4 + 0].v.ob[1] = pauseCtx->questVtx[phi_t4 + 1].v.ob[1] = D_8082B198[phi_t3] + pauseCtx->offsetY - 6; pauseCtx->questVtx[phi_t4 + 2].v.ob[1] = pauseCtx->questVtx[phi_t4 + 3].v.ob[1] = pauseCtx->questVtx[phi_t4 + 0].v.ob[1] - 16; phi_t2_2 = 8; } } else { if ((phi_t3 >= 6) && (phi_t3 <= 17)) { phi_t2_2 = 16; } pauseCtx->questVtx[phi_t4 + 0].v.ob[0] = pauseCtx->questVtx[phi_t4 + 2].v.ob[0] = D_8082B138[phi_t3] + 2; pauseCtx->questVtx[phi_t4 + 1].v.ob[0] = pauseCtx->questVtx[phi_t4 + 3].v.ob[0] = pauseCtx->questVtx[phi_t4 + 0].v.ob[0] + phi_t2_2 - 4; pauseCtx->questVtx[phi_t4 + 0].v.ob[1] = pauseCtx->questVtx[phi_t4 + 1].v.ob[1] = D_8082B198[phi_t3] + pauseCtx->offsetY - 2; pauseCtx->questVtx[phi_t4 + 2].v.ob[1] = pauseCtx->questVtx[phi_t4 + 3].v.ob[1] = pauseCtx->questVtx[phi_t4 + 0].v.ob[1] - D_8082B1F8[phi_t3] + 4; } pauseCtx->questVtx[phi_t4 + 0].v.ob[2] = pauseCtx->questVtx[phi_t4 + 1].v.ob[2] = pauseCtx->questVtx[phi_t4 + 2].v.ob[2] = pauseCtx->questVtx[phi_t4 + 3].v.ob[2] = 0; pauseCtx->questVtx[phi_t4 + 0].v.flag = pauseCtx->questVtx[phi_t4 + 1].v.flag = pauseCtx->questVtx[phi_t4 + 2].v.flag = pauseCtx->questVtx[phi_t4 + 3].v.flag = 0; pauseCtx->questVtx[phi_t4 + 0].v.tc[0] = pauseCtx->questVtx[phi_t4 + 0].v.tc[1] = pauseCtx->questVtx[phi_t4 + 1].v.tc[1] = pauseCtx->questVtx[phi_t4 + 2].v.tc[0] = 0; pauseCtx->questVtx[phi_t4 + 1].v.tc[0] = pauseCtx->questVtx[phi_t4 + 3].v.tc[0] = phi_t2_2 << 5; pauseCtx->questVtx[phi_t4 + 2].v.tc[1] = pauseCtx->questVtx[phi_t4 + 3].v.tc[1] = D_8082B1F8[phi_t3] << 5; pauseCtx->questVtx[phi_t4 + 0].v.cn[0] = pauseCtx->questVtx[phi_t4 + 1].v.cn[0] = pauseCtx->questVtx[phi_t4 + 2].v.cn[0] = pauseCtx->questVtx[phi_t4 + 3].v.cn[0] = pauseCtx->questVtx[phi_t4 + 0].v.cn[1] = pauseCtx->questVtx[phi_t4 + 1].v.cn[1] = pauseCtx->questVtx[phi_t4 + 2].v.cn[1] = pauseCtx->questVtx[phi_t4 + 3].v.cn[1] = pauseCtx->questVtx[phi_t4 + 0].v.cn[2] = pauseCtx->questVtx[phi_t4 + 1].v.cn[2] = pauseCtx->questVtx[phi_t4 + 2].v.cn[2] = pauseCtx->questVtx[phi_t4 + 3].v.cn[2] = 255; pauseCtx->questVtx[phi_t4 + 0].v.cn[3] = pauseCtx->questVtx[phi_t4 + 1].v.cn[3] = pauseCtx->questVtx[phi_t4 + 2].v.cn[3] = pauseCtx->questVtx[phi_t4 + 3].v.cn[3] = pauseCtx->alpha; } pauseCtx->infoPanelVtx = Graph_Alloc(gfxCtx, 28 * sizeof(Vtx)); pauseCtx->saveVtx = Graph_Alloc(gfxCtx, 80 * sizeof(Vtx)); func_80823A0C(globalCtx, pauseCtx->saveVtx, 5, 5); } void KaleidoScope_DrawGameOver(GlobalContext* globalCtx) { GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; OPEN_DISPS(gfxCtx); func_800944C4(gfxCtx); gDPSetCycleType(POLY_KAL_DISP++, G_CYC_2CYCLE); gDPSetRenderMode(POLY_KAL_DISP++, G_RM_PASS, G_RM_XLU_SURF2); gDPSetCombineLERP(POLY_KAL_DISP++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); gDPSetPrimColor(POLY_KAL_DISP++, 0, 80, D_8082AB8C, D_8082AB90, D_8082AB94, D_8082AB98); gDPSetEnvColor(POLY_KAL_DISP++, D_8082AB9C, D_8082ABA0, D_8082ABA4, 255); VREG(89) -= 2; gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverP1Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverMaskTex, 256, 1, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, 5, G_TX_NOLOD, G_TX_NOLOD); gDPSetTileSize(POLY_KAL_DISP++, 1, 0, VREG(89) & 0x7F, 252, (VREG(89) & 0x7F) + 0x7C); gSPTextureRectangle(POLY_KAL_DISP++, VREG(87) << 2, VREG(88) << 2, (VREG(87) + 64) << 2, (VREG(88) + 32) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverP2Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle(POLY_KAL_DISP++, (VREG(87) + 64) << 2, VREG(88) << 2, (VREG(87) + 128) << 2, (VREG(88) + 32) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverP3Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle(POLY_KAL_DISP++, (VREG(87) + 128) << 2, VREG(88) << 2, (VREG(87) + 192) << 2, (VREG(88) + 32) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); CLOSE_DISPS(gfxCtx); } void KaleidoScope_Draw(GlobalContext* globalCtx) { Input* input = &globalCtx->state.input[0]; PauseContext* pauseCtx = &globalCtx->pauseCtx; InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; OPEN_DISPS(globalCtx->state.gfxCtx); pauseCtx->stickRelX = input->rel.stick_x; pauseCtx->stickRelY = input->rel.stick_y; //gSPSegment(POLY_KAL_DISP++, 0x02, interfaceCtx->parameterSegment); gSPSegment(POLY_KAL_DISP++, 0x07, pauseCtx->playerSegment); //gSPSegment(POLY_KAL_DISP++, 0x08, pauseCtx->iconItemSegment); //gSPSegment(POLY_KAL_DISP++, 0x09, pauseCtx->iconItem24Segment); gSPSegment(POLY_KAL_DISP++, 0x0A, pauseCtx->nameSegment); //gSPSegment(POLY_KAL_DISP++, 0x0C, pauseCtx->iconItemAltSegment); //gSPSegment(POLY_KAL_DISP++, 0x0D, pauseCtx->iconItemLangSegment); if (pauseCtx->debugState == 0) { KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); func_800949A8_KAL(globalCtx->state.gfxCtx); KaleidoScope_InitVertices(globalCtx, globalCtx->state.gfxCtx); KaleidoScope_DrawPages(globalCtx, globalCtx->state.gfxCtx); func_800949A8_KAL(globalCtx->state.gfxCtx); gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f); if (!((pauseCtx->state >= 8) && (pauseCtx->state <= 0x11))) { KaleidoScope_DrawInfoPanel(globalCtx); } } if ((pauseCtx->state >= 0xB) && (pauseCtx->state <= 0x11)) { KaleidoScope_DrawGameOver(globalCtx); } if ((pauseCtx->debugState == 1) || (pauseCtx->debugState == 2)) { KaleidoScope_DrawDebugEditor(globalCtx); } func_800AAA50(&globalCtx->view, 15); CLOSE_DISPS(globalCtx->state.gfxCtx); } uint32_t _bswap32(uint32_t a) { a = ((a & 0x000000FF) << 24) | ((a & 0x0000FF00) << 8) | ((a & 0x00FF0000) >> 8) | ((a & 0xFF000000) >> 24); return a; } void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount) { u32 rgb; u16 gray; u16 i; texture = ResourceMgr_LoadTexByName(texture); for (i = 0; i < pixelCount; i++) { uint32_t px = texture[i]; if ((px & 0xFFFFFF00) != 0) { u8 a = (px & 0xFF000000) >> 24; u8 b = (px & 0x00FF0000) >> 16; u8 g = (px & 0x0000FF00) >> 8; u8 r = (px & 0x000000FF) >> 0; gray = (r + g + b) / 7; r = gray; g = gray; b = gray; texture[i] = (a << 24) + (b << 16) + (g << 8) + (r << 0); } } } void func_808265BC(GlobalContext* globalCtx) { PauseContext* pauseCtx = &globalCtx->pauseCtx; pauseCtx->eye.x += D_8082ABAC[pauseCtx->mode] * ZREG(46); pauseCtx->eye.z += D_8082ABCC[pauseCtx->mode] * ZREG(46); pauseCtx->unk_1EA += 4 * ZREG(46); if (pauseCtx->unk_1EA == (64 * ZREG(47))) { func_80084BF4(globalCtx, 1); for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) { gSaveContext.buttonStatus[buttonIndex] = D_8082AB6C[pauseCtx->pageIndex][buttonIndex]; } pauseCtx->pageIndex = D_8082ABEC[pauseCtx->mode]; if ((CVar_GetS32("gAssignableTunicsAndBoots", 0) != 0) && (pauseCtx->pageIndex == PAUSE_EQUIP)) { gSaveContext.buttonStatus[1] = BTN_ENABLED; gSaveContext.buttonStatus[2] = BTN_ENABLED; gSaveContext.buttonStatus[3] = BTN_ENABLED; // A-Button is already enabled gSaveContext.buttonStatus[5] = BTN_ENABLED; gSaveContext.buttonStatus[6] = BTN_ENABLED; gSaveContext.buttonStatus[7] = BTN_ENABLED; gSaveContext.buttonStatus[8] = BTN_ENABLED; } pauseCtx->unk_1E4 = 0; pauseCtx->state++; pauseCtx->alpha = 255; Interface_LoadActionLabelB(globalCtx, DO_ACTION_SAVE); } else if (pauseCtx->unk_1EA == 64) { pauseCtx->pageIndex = D_8082ABEC[pauseCtx->mode]; pauseCtx->mode = (u16)(pauseCtx->pageIndex * 2) + 1; } } void KaleidoScope_UpdateCursorSize(PauseContext* pauseCtx) { s32 temp1; s32 temp2; s32 temp3; s32 temp4; if (pauseCtx->cursorSpecialPos == 0) { temp1 = -1; temp2 = 1; temp3 = 14; temp4 = 14; if (pauseCtx->pageIndex == PAUSE_MAP) { if (!sInDungeonScene) { temp1 = -6; temp2 = 6; temp3 = 4; temp4 = 4; } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] >= 3) { temp1 = -6; temp2 = 5; temp4 = 7; temp3 = 19; } else { temp1 = -3; temp2 = 3; temp3 = 13; temp4 = 13; } } else if (pauseCtx->pageIndex == PAUSE_QUEST) { temp1 = -4; temp2 = 4; temp3 = 12; temp4 = 12; if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == 0x18) { temp1 = -2; temp2 = 2; temp3 = 32; temp4 = 32; } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == 0x17) { temp1 = -4; temp2 = 4; temp4 = 13; temp3 = 34; } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] < 6) { temp1 = -1; temp2 = 1; temp3 = 10; temp4 = 10; } else if ((pauseCtx->cursorSlot[pauseCtx->pageIndex] >= 6) && (pauseCtx->cursorSlot[pauseCtx->pageIndex] < 0x12)) { temp1 = -5; temp2 = 3; temp3 = 8; temp4 = 8; } } } else { temp1 = -4; temp2 = 4; temp3 = 16; temp4 = 16; } pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->cursorVtx[2].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + temp1; pauseCtx->cursorVtx[1].v.ob[0] = pauseCtx->cursorVtx[3].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + 16; pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->cursorVtx[1].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] + temp2; pauseCtx->cursorVtx[2].v.ob[1] = pauseCtx->cursorVtx[3].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - 16; pauseCtx->cursorVtx[4].v.ob[0] = pauseCtx->cursorVtx[6].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + temp3; pauseCtx->cursorVtx[5].v.ob[0] = pauseCtx->cursorVtx[7].v.ob[0] = pauseCtx->cursorVtx[4].v.ob[0] + 16; pauseCtx->cursorVtx[4].v.ob[1] = pauseCtx->cursorVtx[5].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1]; pauseCtx->cursorVtx[6].v.ob[1] = pauseCtx->cursorVtx[7].v.ob[1] = pauseCtx->cursorVtx[4].v.ob[1] - 16; pauseCtx->cursorVtx[8].v.ob[0] = pauseCtx->cursorVtx[10].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0]; pauseCtx->cursorVtx[9].v.ob[0] = pauseCtx->cursorVtx[11].v.ob[0] = pauseCtx->cursorVtx[8].v.ob[0] + 16; pauseCtx->cursorVtx[8].v.ob[1] = pauseCtx->cursorVtx[9].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - temp4; pauseCtx->cursorVtx[10].v.ob[1] = pauseCtx->cursorVtx[11].v.ob[1] = pauseCtx->cursorVtx[8].v.ob[1] - 16; pauseCtx->cursorVtx[12].v.ob[0] = pauseCtx->cursorVtx[14].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + temp3; pauseCtx->cursorVtx[13].v.ob[0] = pauseCtx->cursorVtx[15].v.ob[0] = pauseCtx->cursorVtx[12].v.ob[0] + 16; pauseCtx->cursorVtx[12].v.ob[1] = pauseCtx->cursorVtx[13].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - temp4; pauseCtx->cursorVtx[14].v.ob[1] = pauseCtx->cursorVtx[15].v.ob[1] = pauseCtx->cursorVtx[12].v.ob[1] - 16; } void KaleidoScope_LoadDungeonMap(GlobalContext* globalCtx) { InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; char* firstTextureName = sDungeonMapTexs[R_MAP_TEX_INDEX]; char* secondTextureName = sDungeonMapTexs[R_MAP_TEX_INDEX + 1]; memcpy(interfaceCtx->mapSegment, ResourceMgr_LoadTexByName(firstTextureName), ResourceMgr_LoadTexSizeByName(firstTextureName)); memcpy(interfaceCtx->mapSegment + 0x800, ResourceMgr_LoadTexByName(secondTextureName), ResourceMgr_LoadTexSizeByName(secondTextureName)); } void KaleidoScope_UpdateDungeonMap(GlobalContext* globalCtx) { PauseContext* pauseCtx = &globalCtx->pauseCtx; InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; osSyncPrintf("MAP DMA = %d\n", globalCtx->interfaceCtx.mapPaletteIndex); KaleidoScope_LoadDungeonMap(globalCtx); Map_SetFloorPalettesData(globalCtx, pauseCtx->dungeonMapSlot - 3); if ((globalCtx->sceneNum >= SCENE_YDAN) && (globalCtx->sceneNum <= SCENE_TAKARAYA)) { if ((VREG(30) + 3) == pauseCtx->cursorPoint[PAUSE_MAP]) { KaleidoScope_OverridePalIndexCI4(interfaceCtx->mapSegment, 2040, interfaceCtx->mapPaletteIndex, 14); } } if ((globalCtx->sceneNum >= SCENE_YDAN) && (globalCtx->sceneNum <= SCENE_TAKARAYA)) { if ((VREG(30) + 3) == pauseCtx->cursorPoint[PAUSE_MAP]) { KaleidoScope_OverridePalIndexCI4(interfaceCtx->mapSegment + 0x800, 2040, interfaceCtx->mapPaletteIndex, 14); } } } void KaleidoScope_Update(GlobalContext* globalCtx) { static s16 D_8082B258 = 0; static s16 D_8082B25C = 10; static s16 D_8082B260 = 0; PauseContext* pauseCtx = &globalCtx->pauseCtx; InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; GameOverContext* gameOverCtx = &globalCtx->gameOverCtx; Player* player = GET_PLAYER(globalCtx); Input* input = &globalCtx->state.input[0]; size_t size = 0; size_t size0 = 0; size_t size1 = 0; size_t size2 = 0; u16 i = 0; s16 stepR; s16 stepG; s16 stepB; s16 stepA; s32 pad; if ((R_PAUSE_MENU_MODE >= 3) && (((pauseCtx->state >= 4) && (pauseCtx->state <= 7)) || ((pauseCtx->state >= 0xA) && (pauseCtx->state <= 0x12)))) { if ((!pauseCtx->unk_1E4 || (pauseCtx->unk_1E4 == 8)) && (pauseCtx->state == 6)) { pauseCtx->stickRelX = input->rel.stick_x; pauseCtx->stickRelY = input->rel.stick_y; KaleidoScope_UpdateCursorSize(&globalCtx->pauseCtx); KaleidoScope_HandlePageToggles(pauseCtx, input); } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && ((pauseCtx->unk_1E4 < 3) || (pauseCtx->unk_1E4 == 5))) { KaleidoScope_UpdateCursorSize(&globalCtx->pauseCtx); } if (pauseCtx->state == 6) { KaleidoScope_UpdateNamePanel(globalCtx); } } switch (pauseCtx->state) { case 3: for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) { sButtonStatusSave[buttonIndex] = gSaveContext.buttonStatus[buttonIndex]; } pauseCtx->cursorX[PAUSE_MAP] = 0; pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->dungeonMapSlot = VREG(30) + 3; WREG(16) = -175; WREG(17) = 155; pauseCtx->unk_204 = -314.0f; pauseCtx->playerSegment = (void*)(((uintptr_t)globalCtx->objectCtx.spaceStart + 0x30) & ~0x3F); size1 = func_80091738(globalCtx, pauseCtx->playerSegment, &pauseCtx->playerSkelAnime); osSyncPrintf("プレイヤー size1=%x\n", size1); pauseCtx->iconItemSegment = (void*)(((uintptr_t)pauseCtx->playerSegment + size1 + 0xF) & ~0xF); size0 = (uintptr_t)_icon_item_staticSegmentRomEnd - (uintptr_t)_icon_item_staticSegmentRomStart; osSyncPrintf("icon_item size0=%x\n", size0); DmaMgr_SendRequest1(pauseCtx->iconItemSegment, (uintptr_t)_icon_item_staticSegmentRomStart, size0, __FILE__, __LINE__); gSegments[8] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); pauseCtx->iconItem24Segment = (void*)(((uintptr_t)pauseCtx->iconItemSegment + size0 + 0xF) & ~0xF); #if 1 //size = (uintptr_t)_icon_item_24_staticSegmentRomEnd - (uintptr_t)_icon_item_24_staticSegmentRomStart; //osSyncPrintf("icon_item24 size=%x\n", size); //DmaMgr_SendRequest1(pauseCtx->iconItem24Segment, (uintptr_t)_icon_item_24_staticSegmentRomStart, size, //__FILE__, __LINE__); //pauseCtx->iconItemAltSegment = (void*)(((uintptr_t)pauseCtx->iconItem24Segment + size + 0xF) & ~0xF); #endif switch (globalCtx->sceneNum) { case SCENE_YDAN: case SCENE_DDAN: case SCENE_BDAN: case SCENE_BMORI1: case SCENE_HIDAN: case SCENE_MIZUSIN: case SCENE_JYASINZOU: case SCENE_HAKADAN: case SCENE_HAKADANCH: case SCENE_ICE_DOUKUTO: case SCENE_YDAN_BOSS: case SCENE_DDAN_BOSS: case SCENE_BDAN_BOSS: case SCENE_MORIBOSSROOM: case SCENE_FIRE_BS: case SCENE_MIZUSIN_BS: case SCENE_JYASINBOSS: case SCENE_HAKADAN_BS: #if 1 sInDungeonScene = true; //size2 = (uintptr_t)_icon_item_dungeon_staticSegmentRomEnd - (uintptr_t)_icon_item_dungeon_staticSegmentRomStart; //osSyncPrintf("icon_item_dungeon dungeon-size2=%x\n", size2); //DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, (uintptr_t)_icon_item_dungeon_staticSegmentRomStart, //size2, __FILE__, __LINE__); #endif interfaceCtx->mapPalette[28] = 6; interfaceCtx->mapPalette[29] = 99; KaleidoScope_UpdateDungeonMap(globalCtx); break; default: #if 1 sInDungeonScene = false; //size2 = (uintptr_t)_icon_item_field_staticSegmentRomEnd - (uintptr_t)_icon_item_field_staticSegmentRomStart; //osSyncPrintf("icon_item_field field-size2=%x\n", size2); //DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, (uintptr_t)_icon_item_field_staticSegmentRomStart, //size2, __FILE__, __LINE__); #endif break; } // OTRTODO: LANGUAGE SUPPORT #if 1 //pauseCtx->iconItemLangSegment = (void*)(((uintptr_t)pauseCtx->iconItemAltSegment + size2 + 0xF) & ~0xF); if (gSaveContext.language == LANGUAGE_ENG) { //size = (uintptr_t)_icon_item_nes_staticSegmentRomEnd - (uintptr_t)_icon_item_nes_staticSegmentRomStart; //osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); //DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, _icon_item_nes_staticSegmentRomStart, size, //__FILE__, __LINE__); } else if (gSaveContext.language == LANGUAGE_GER) { //size = (uintptr_t)_icon_item_ger_staticSegmentRomEnd - (uintptr_t)_icon_item_ger_staticSegmentRomStart; //osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); //DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_ger_staticSegmentRomStart, size, //__FILE__, __LINE__); } else { //size = (uintptr_t)_icon_item_fra_staticSegmentRomEnd - (uintptr_t)_icon_item_fra_staticSegmentRomStart; //osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); //DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_fra_staticSegmentRomStart, size, //__FILE__, __LINE__); } #endif //pauseCtx->nameSegment = (void*)(((uintptr_t)pauseCtx->iconItemLangSegment + size + 0xF) & ~0xF); pauseCtx->nameSegment = malloc(0x400 + 0xA00); // OTRTODO: GET RID OF THIS osSyncPrintf("サイズ=%x\n", size2 + size1 + size0 + size); osSyncPrintf("item_name I_N_PT=%x\n", 0x800); Interface_SetDoAction(globalCtx, DO_ACTION_DECIDE); osSyncPrintf("サイズ=%x\n", size2 + size1 + size0 + size + 0x800); if (((void)0, gSaveContext.worldMapArea) < 22) { if (gSaveContext.language == LANGUAGE_ENG) { const char* textureName = mapNameTextures[36 + gSaveContext.worldMapArea]; memcpy(pauseCtx->nameSegment + 0x400, ResourceMgr_LoadTexByName(textureName), ResourceMgr_LoadTexSizeByName(textureName)); } else if (gSaveContext.language == LANGUAGE_GER) { const char* textureName = mapNameTextures[58 + gSaveContext.worldMapArea]; memcpy(pauseCtx->nameSegment + 0x400, ResourceMgr_LoadTexByName(textureName), ResourceMgr_LoadTexSizeByName(textureName)); } else { const char* textureName = mapNameTextures[80 + gSaveContext.worldMapArea]; memcpy(pauseCtx->nameSegment + 0x400, ResourceMgr_LoadTexByName(textureName), ResourceMgr_LoadTexSizeByName(textureName)); } } // OTRTODO - player on pause #if 1 sPreRenderCvg = (void*)(((uintptr_t)pauseCtx->nameSegment + 0x400 + 0xA00 + 0xF) & ~0xF); PreRender_Init(&sPlayerPreRender); PreRender_SetValuesSave(&sPlayerPreRender, 64, 112, pauseCtx->playerSegment, NULL, sPreRenderCvg); KaleidoScope_DrawPlayerWork(globalCtx); //KaleidoScope_SetupPlayerPreRender(globalCtx); #endif for (i = 0; i < ARRAY_COUNT(pauseCtx->worldMapPoints); i++) { pauseCtx->worldMapPoints[i] = 0; } if (CHECK_QUEST_ITEM(QUEST_GERUDO_CARD)) { pauseCtx->worldMapPoints[0] = 2; } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) { pauseCtx->worldMapPoints[0] = 1; } if (INV_CONTENT(ITEM_LONGSHOT) == ITEM_LONGSHOT) { pauseCtx->worldMapPoints[1] = 2; } if (CHECK_QUEST_ITEM(QUEST_GERUDO_CARD)) { pauseCtx->worldMapPoints[1] = 1; } if (gSaveContext.eventChkInf[11] & 4) { pauseCtx->worldMapPoints[2] = 1; } if (INV_CONTENT(ITEM_LONGSHOT) == ITEM_LONGSHOT) { pauseCtx->worldMapPoints[2] = 2; } if (CHECK_QUEST_ITEM(QUEST_GERUDO_CARD)) { pauseCtx->worldMapPoints[2] = 1; } if (CUR_UPG_VALUE(UPG_SCALE)) { pauseCtx->worldMapPoints[3] = 1; } if (CHECK_OWNED_EQUIP(EQUIP_BOOTS, 1)) { pauseCtx->worldMapPoints[3] = 2; } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER)) { pauseCtx->worldMapPoints[3] = 1; } if (gSaveContext.eventChkInf[0] & 0x200) { pauseCtx->worldMapPoints[4] = 1; } if (INV_CONTENT(ITEM_OCARINA_FAIRY) != ITEM_NONE) { pauseCtx->worldMapPoints[4] = 2; } if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { pauseCtx->worldMapPoints[4] = 1; } if (gSaveContext.eventChkInf[6] & 0x400) { pauseCtx->worldMapPoints[4] = 2; } if (gSaveContext.eventChkInf[1] & 0x100) { pauseCtx->worldMapPoints[4] = 1; } if (gSaveContext.eventChkInf[0] & 0x200) { pauseCtx->worldMapPoints[5] = 2; } if (gSaveContext.eventChkInf[4] & 1) { pauseCtx->worldMapPoints[5] = 1; } if (INV_CONTENT(ITEM_OCARINA_TIME) == ITEM_OCARINA_TIME) { pauseCtx->worldMapPoints[5] = 2; } if (gSaveContext.eventChkInf[4] & 0x20) { pauseCtx->worldMapPoints[5] = 1; } if (INV_CONTENT(ITEM_ARROW_LIGHT) == ITEM_ARROW_LIGHT) { pauseCtx->worldMapPoints[5] = 2; } if (gSaveContext.eventChkInf[0] & 0x200) { pauseCtx->worldMapPoints[6] = 1; } if (gSaveContext.eventChkInf[4] & 1) { pauseCtx->worldMapPoints[7] = 2; } if (gSaveContext.eventChkInf[2] & 0x20) { pauseCtx->worldMapPoints[7] = 1; } if (INV_CONTENT(ITEM_HOOKSHOT) == ITEM_HOOKSHOT) { pauseCtx->worldMapPoints[7] = 2; } if (gSaveContext.eventChkInf[4] & 0x200) { pauseCtx->worldMapPoints[7] = 1; } if (gBitFlags[1] & gSaveContext.worldMapAreaData) { pauseCtx->worldMapPoints[8] = 1; } if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) { pauseCtx->worldMapPoints[8] = 2; } if (CHECK_QUEST_ITEM(QUEST_SONG_SUN)) { pauseCtx->worldMapPoints[8] = 1; } if (gSaveContext.eventChkInf[4] & 0x20) { pauseCtx->worldMapPoints[8] = 2; } if (INV_CONTENT(ITEM_HOOKSHOT) == ITEM_HOOKSHOT) { pauseCtx->worldMapPoints[8] = 1; } if (CHECK_QUEST_ITEM(QUEST_SONG_STORMS)) { pauseCtx->worldMapPoints[8] = 2; } if (gSaveContext.eventChkInf[6] & 0x80) { pauseCtx->worldMapPoints[8] = 1; } if (gSaveContext.eventChkInf[10] & 0x400) { pauseCtx->worldMapPoints[8] = 2; } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW)) { pauseCtx->worldMapPoints[8] = 1; } if (gBitFlags[10] & gSaveContext.worldMapAreaData) { pauseCtx->worldMapPoints[9] = 1; } if (gSaveContext.eventChkInf[0] & 0x8000) { pauseCtx->worldMapPoints[9] = 2; } if (CHECK_QUEST_ITEM(QUEST_SONG_SARIA)) { pauseCtx->worldMapPoints[9] = 1; } if (INV_CONTENT(ITEM_HOOKSHOT) == ITEM_HOOKSHOT) { pauseCtx->worldMapPoints[9] = 2; } if (gSaveContext.eventChkInf[4] & 0x100) { pauseCtx->worldMapPoints[9] = 1; } pauseCtx->worldMapPoints[10] = 2; if (gSaveContext.eventChkInf[0] & 0x200) { pauseCtx->worldMapPoints[10] = 1; } if (gSaveContext.eventChkInf[6] & 0x4000) { pauseCtx->worldMapPoints[10] = 2; } if (gSaveContext.eventChkInf[0] & 0x8000) { pauseCtx->worldMapPoints[10] = 1; } if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) { pauseCtx->worldMapPoints[11] = 1; } if (gSaveContext.eventChkInf[2] & 0x20) { pauseCtx->worldMapPoints[11] = 2; } if (gSaveContext.eventChkInf[3] & 0x80) { pauseCtx->worldMapPoints[11] = 1; } if (INV_CONTENT(ITEM_HOOKSHOT) == ITEM_HOOKSHOT) { pauseCtx->worldMapPoints[11] = 2; } if (CHECK_OWNED_EQUIP(EQUIP_BOOTS, 1)) { pauseCtx->worldMapPoints[11] = 1; } pauseCtx->tradeQuestLocation = 0xFF; i = INV_CONTENT(ITEM_TRADE_ADULT); if (LINK_AGE_IN_YEARS == YEARS_ADULT) { if ((i <= ITEM_POCKET_CUCCO) || (i == ITEM_ODD_MUSHROOM)) { pauseCtx->tradeQuestLocation = 8; } if ((i == ITEM_COJIRO) || (i == ITEM_ODD_POTION)) { pauseCtx->tradeQuestLocation = 9; } if (i == ITEM_SAW) { pauseCtx->tradeQuestLocation = 2; } if ((i == ITEM_SWORD_BROKEN) || (i == ITEM_EYEDROPS)) { pauseCtx->tradeQuestLocation = 7; } if (i == ITEM_PRESCRIPTION) { pauseCtx->tradeQuestLocation = 11; } if (i == ITEM_FROG) { pauseCtx->tradeQuestLocation = 3; } if ((i == ITEM_CLAIM_CHECK) && (gSaveContext.bgsFlag == 0)) { pauseCtx->tradeQuestLocation = 7; } } pauseCtx->state = 4; break; case 4: if (pauseCtx->unk_1F4 == 160.0f) { KaleidoScope_SetDefaultCursor(globalCtx); //OTRTODO - Player on pause //KaleidoScope_ProcessPlayerPreRender(); } pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 -= 160.0f / WREG(6); pauseCtx->infoPanelOffsetY += 40 / WREG(6); interfaceCtx->startAlpha += 255 / WREG(6); WREG(16) += WREG(25) / WREG(6); WREG(17) += WREG(26) / WREG(6); XREG(5) += 150 / WREG(6); pauseCtx->alpha += (u16)(255 / (WREG(6) + WREG(4))); if (pauseCtx->unk_1F4 == 0) { interfaceCtx->startAlpha = 255; WREG(2) = 0; pauseCtx->state = 5; } func_808265BC(globalCtx); break; case 5: pauseCtx->alpha += (u16)(255 / (WREG(6) + WREG(4))); func_808265BC(globalCtx); if (pauseCtx->state == 6) { KaleidoScope_UpdateNamePanel(globalCtx); } break; case 6: switch (pauseCtx->unk_1E4) { case 0: if (CHECK_BTN_ALL(input->press.button, BTN_START)) { CVar_SetS32("gPauseBufferBlockInputFrame", 9); if (CVar_GetS32("gCheatEasyPauseBufferEnabled", 0)) { CVar_SetS32("gCheatEasyPauseBufferFrameAdvance", 13); } Interface_SetDoAction(globalCtx, DO_ACTION_NONE); pauseCtx->state = 0x12; WREG(2) = -6240; func_800F64E0(0); } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { pauseCtx->mode = 0; pauseCtx->promptChoice = 0; Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_DISABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED; gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_DISABLED; gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(50); pauseCtx->unk_1EC = 0; pauseCtx->state = 7; } break; case 1: func_808237B4(globalCtx, globalCtx->state.input); break; case 2: pauseCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff(); if (pauseCtx->ocarinaStaff->state == 0) { pauseCtx->unk_1E4 = 4; Audio_OcaSetInstrument(0); } break; case 3: KaleidoScope_UpdateItemEquip(globalCtx); break; case 4: break; case 5: pauseCtx->ocarinaStaff = Audio_OcaGetPlayingStaff(); if (CHECK_BTN_ALL(input->press.button, BTN_START)) { Audio_OcaSetInstrument(0); Interface_SetDoAction(globalCtx, DO_ACTION_NONE); pauseCtx->state = 0x12; WREG(2) = -6240; func_800F64E0(0); pauseCtx->unk_1E4 = 0; break; } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { Audio_OcaSetInstrument(0); pauseCtx->unk_1E4 = 0; pauseCtx->mode = 0; pauseCtx->promptChoice = 0; Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_DISABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED; gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_DISABLED; gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(50); pauseCtx->unk_1EC = 0; pauseCtx->state = 7; } else if (pauseCtx->ocarinaStaff->state == pauseCtx->ocarinaSongIdx) { Audio_PlaySoundGeneral(NA_SE_SY_TRE_BOX_APPEAR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); D_8082B258 = 0; D_8082B25C = 30; pauseCtx->unk_1E4 = 6; } else if (pauseCtx->ocarinaStaff->state == 0xFF) { Audio_PlaySoundGeneral(NA_SE_SY_OCARINA_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); D_8082B258 = 4; D_8082B25C = 20; pauseCtx->unk_1E4 = 6; } break; case 6: D_8082B25C--; if (D_8082B25C == 0) { pauseCtx->unk_1E4 = D_8082B258; if (pauseCtx->unk_1E4 == 0) { Audio_OcaSetInstrument(0); } } break; case 7: break; case 8: if (CHECK_BTN_ALL(input->press.button, BTN_START)) { Audio_OcaSetInstrument(0); Interface_SetDoAction(globalCtx, DO_ACTION_NONE); pauseCtx->state = 0x12; WREG(2) = -6240; func_800F64E0(0); pauseCtx->unk_1E4 = 0; } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { Audio_OcaSetInstrument(0); pauseCtx->unk_1E4 = 0; pauseCtx->mode = 0; pauseCtx->promptChoice = 0; Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_DISABLED; gSaveContext.buttonStatus[4] = BTN_ENABLED; gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_DISABLED; gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(50); pauseCtx->unk_1EC = 0; pauseCtx->state = 7; } break; case 9: break; default: pauseCtx->unk_1E4 = 0; break; } break; case 7: switch (pauseCtx->unk_1EC) { case 0: pauseCtx->unk_204 -= 314.0f / WREG(6); WREG(16) -= WREG(25) / WREG(6); WREG(17) -= WREG(26) / WREG(6); if (pauseCtx->unk_204 <= -628.0f) { pauseCtx->unk_204 = -628.0f; pauseCtx->unk_1EC = 1; } break; case 1: if (CHECK_BTN_ALL(input->press.button, BTN_A)) { if (pauseCtx->promptChoice != 0) { Interface_SetDoAction(globalCtx, DO_ACTION_NONE); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_ENABLED; gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_ENABLED; gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(50); pauseCtx->unk_1EC = 2; WREG(2) = -6240; YREG(8) = pauseCtx->unk_204; func_800F64E0(0); } else { Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); Gameplay_PerformSave(globalCtx); pauseCtx->unk_1EC = 4; D_8082B25C = 3; } } else if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) { Interface_SetDoAction(globalCtx, DO_ACTION_NONE); pauseCtx->unk_1EC = 2; WREG(2) = -6240; YREG(8) = pauseCtx->unk_204; func_800F64E0(0); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_ENABLED; gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_ENABLED; gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(50); } break; case 4: if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START) || (--D_8082B25C == 0)) { Interface_SetDoAction(globalCtx, DO_ACTION_NONE); gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = BTN_ENABLED; gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_ENABLED; gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(50); pauseCtx->unk_1EC = 5; WREG(2) = -6240; YREG(8) = pauseCtx->unk_204; func_800F64E0(0); } break; case 3: case 6: pauseCtx->unk_204 += 314.0f / WREG(6); WREG(16) += WREG(25) / WREG(6); WREG(17) += WREG(26) / WREG(6); if (pauseCtx->unk_204 >= -314.0f) { pauseCtx->state = 6; pauseCtx->unk_1EC = 0; pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 0.0f; pauseCtx->unk_204 = -314.0f; } break; case 2: case 5: if (pauseCtx->unk_204 != (YREG(8) + 160.0f)) { pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 += 160.0f / WREG(6); pauseCtx->unk_204 += 160.0f / WREG(6); pauseCtx->infoPanelOffsetY -= 40 / WREG(6); WREG(16) -= WREG(25) / WREG(6); WREG(17) -= WREG(26) / WREG(6); XREG(5) -= 150 / WREG(6); pauseCtx->alpha -= (u16)(255 / WREG(6)); if (pauseCtx->unk_204 == (YREG(8) + 160.0f)) { pauseCtx->alpha = 0; } } else { pauseCtx->debugState = 0; pauseCtx->state = 0x13; pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = 160.0f; pauseCtx->namedItem = PAUSE_ITEM_NONE; pauseCtx->unk_1E4 = 0; pauseCtx->unk_204 = -434.0f; } break; } break; case 0xA: pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->dungeonMapSlot = VREG(30) + 3; WREG(16) = -175; WREG(17) = 155; pauseCtx->unk_204 = -434.0f; Interface_ChangeAlpha(1); #if 1 pauseCtx->iconItemSegment = (void*)(((uintptr_t)globalCtx->objectCtx.spaceStart + 0x30) & ~0x3F); size0 = (uintptr_t)_icon_item_staticSegmentRomEnd - (uintptr_t)_icon_item_staticSegmentRomStart; osSyncPrintf("icon_item size0=%x\n", size0); DmaMgr_SendRequest1(pauseCtx->iconItemSegment, (uintptr_t)_icon_item_staticSegmentRomStart, size0, __FILE__, __LINE__); pauseCtx->iconItem24Segment = (void*)(((uintptr_t)pauseCtx->iconItemSegment + size0 + 0xF) & ~0xF); //size = (uintptr_t)_icon_item_24_staticSegmentRomEnd - (uintptr_t)_icon_item_24_staticSegmentRomStart; osSyncPrintf("icon_item24 size=%x\n", size); //DmaMgr_SendRequest1(pauseCtx->iconItem24Segment, (uintptr_t)_icon_item_24_staticSegmentRomStart, size, //__FILE__, __LINE__); pauseCtx->iconItemAltSegment = (void*)(((uintptr_t)pauseCtx->iconItem24Segment + size + 0xF) & ~0xF); //size2 = (uintptr_t)_icon_item_gameover_staticSegmentRomEnd - (uintptr_t)_icon_item_gameover_staticSegmentRomStart; //osSyncPrintf("icon_item_dungeon gameover-size2=%x\n", size2); //DmaMgr_SendRequest1(pauseCtx->iconItemAltSegment, (uintptr_t)_icon_item_gameover_staticSegmentRomStart, size2, //__FILE__, __LINE__); pauseCtx->iconItemLangSegment = (void*)(((uintptr_t)pauseCtx->iconItemAltSegment + size2 + 0xF) & ~0xF); /* if (gSaveContext.language == LANGUAGE_ENG) { size = (uintptr_t)_icon_item_nes_staticSegmentRomEnd - (uintptr_t)_icon_item_nes_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_nes_staticSegmentRomStart, size, __FILE__, __LINE__); } else if (gSaveContext.language == LANGUAGE_GER) { size = (uintptr_t)_icon_item_ger_staticSegmentRomEnd - (uintptr_t)_icon_item_ger_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_ger_staticSegmentRomStart, size, __FILE__, __LINE__); } else { size = (uintptr_t)_icon_item_fra_staticSegmentRomEnd - (uintptr_t)_icon_item_fra_staticSegmentRomStart; osSyncPrintf("icon_item_dungeon dungeon-size=%x\n", size); DmaMgr_SendRequest1(pauseCtx->iconItemLangSegment, (uintptr_t)_icon_item_fra_staticSegmentRomStart, size, __FILE__, __LINE__); } */ #endif D_8082AB8C = 255; D_8082AB90 = 130; D_8082AB94 = 0; D_8082AB98 = 0; D_8082AB9C = 30; D_8082ABA0 = 0; D_8082ABA4 = 0; D_8082B260 = 30; VREG(88) = 98; pauseCtx->promptChoice = 0; pauseCtx->state++; break; case 0xB: stepR = ABS(D_8082AB8C - 30) / D_8082B260; stepG = ABS(D_8082AB90) / D_8082B260; stepB = ABS(D_8082AB94) / D_8082B260; stepA = ABS(D_8082AB98 - 255) / D_8082B260; if (D_8082AB8C >= 30) { D_8082AB8C -= stepR; } else { D_8082AB8C += stepR; } if (D_8082AB90 >= 0) { D_8082AB90 -= stepG; } else { D_8082AB90 += stepG; } if (D_8082AB94 >= 0) { D_8082AB94 -= stepB; } else { D_8082AB94 += stepB; } if (D_8082AB98 >= 255) { D_8082AB98 -= stepA; } else { D_8082AB98 += stepA; } stepR = ABS(D_8082AB9C - 255) / D_8082B260; stepG = ABS(D_8082ABA0 - 130) / D_8082B260; stepB = ABS(D_8082ABA4) / D_8082B260; if (D_8082AB9C >= 255) { D_8082AB9C -= stepR; } else { D_8082AB9C += stepR; } if (D_8082ABA0 >= 130) { D_8082ABA0 -= stepG; } else { D_8082ABA0 += stepG; } if (D_8082ABA4 >= 0) { D_8082ABA4 -= stepB; } else { D_8082ABA4 += stepB; } D_8082B260--; if (D_8082B260 == 0) { D_8082AB8C = 30; D_8082AB90 = 0; D_8082AB94 = 0; D_8082AB98 = 255; D_8082AB9C = 255; D_8082ABA0 = 130; D_8082ABA4 = 0; pauseCtx->state++; D_8082B260 = 40; } break; case 0xC: D_8082B260--; if (D_8082B260 == 0) { pauseCtx->state = 0xD; } break; case 0xD: pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 = pauseCtx->unk_204 -= 160.0f / WREG(6); pauseCtx->infoPanelOffsetY += 40 / WREG(6); interfaceCtx->startAlpha += 255 / WREG(6); VREG(88) -= 3; WREG(16) += WREG(25) / WREG(6); WREG(17) += WREG(26) / WREG(6); XREG(5) += 150 / WREG(6); pauseCtx->alpha += (u16)(255 / (WREG(6) + WREG(4))); if (pauseCtx->unk_204 < -628.0f) { pauseCtx->unk_204 = -628.0f; interfaceCtx->startAlpha = 255; VREG(88) = 66; WREG(2) = 0; pauseCtx->alpha = 255; pauseCtx->state = 0xE; gSaveContext.deaths++; if (gSaveContext.deaths > 999) { gSaveContext.deaths = 999; } } osSyncPrintf("kscope->angle_s = %f\n", pauseCtx->unk_204); break; case 0xE: if (CHECK_BTN_ALL(input->press.button, BTN_A)) { if (pauseCtx->promptChoice != 0) { pauseCtx->promptChoice = 0; Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); pauseCtx->state = 0x10; gameOverCtx->state++; } else { Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); pauseCtx->promptChoice = 0; Gameplay_SaveSceneFlags(globalCtx); gSaveContext.savedSceneNum = globalCtx->sceneNum; Save_SaveFile(); pauseCtx->state = 0xF; D_8082B25C = 3; } } break; case 0xF: D_8082B25C--; if (D_8082B25C == 0) { pauseCtx->state = 0x10; gameOverCtx->state++; } else if ((D_8082B25C <= 80) && (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START))) { pauseCtx->state = 0x10; gameOverCtx->state++; func_800F64E0(0); } break; case 0x10: if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START)) { if (pauseCtx->promptChoice == 0) { Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); Gameplay_SaveSceneFlags(globalCtx); switch (gSaveContext.entranceIndex) { case 0x0000: case 0x0004: case 0x0028: case 0x0169: case 0x0165: case 0x0010: case 0x0082: case 0x0037: case 0x041B: case 0x0008: case 0x0088: case 0x0486: case 0x0098: case 0x0467: case 0x0179: break; case 0x040F: gSaveContext.entranceIndex = 0x0000; break; case 0x040B: gSaveContext.entranceIndex = 0x0004; break; case 0x0301: gSaveContext.entranceIndex = 0x0028; break; case 0x000C: gSaveContext.entranceIndex = 0x0169; break; case 0x0305: gSaveContext.entranceIndex = 0x0165; break; case 0x0417: gSaveContext.entranceIndex = 0x0010; break; case 0x008D: gSaveContext.entranceIndex = 0x0082; break; case 0x0413: gSaveContext.entranceIndex = 0x0037; break; case 0x041F: gSaveContext.entranceIndex = 0x041B; break; } } else { Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); } pauseCtx->state = 0x11; } break; case 0x11: if (interfaceCtx->unk_244 != 255) { interfaceCtx->unk_244 += 10; if (interfaceCtx->unk_244 >= 255) { interfaceCtx->unk_244 = 255; pauseCtx->state = 0; R_UPDATE_RATE = 3; R_PAUSE_MENU_MODE = 0; func_800981B8(&globalCtx->objectCtx); func_800418D0(&globalCtx->colCtx, globalCtx); if (pauseCtx->promptChoice == 0) { Gameplay_TriggerRespawn(globalCtx); gSaveContext.respawnFlag = -2; gSaveContext.nextTransition = 2; gSaveContext.health = 0x30; Audio_QueueSeqCmd(0xF << 28 | SEQ_PLAYER_BGM_MAIN << 24 | 0xA); gSaveContext.healthAccumulator = 0; gSaveContext.unk_13F0 = 0; gSaveContext.unk_13F2 = 0; osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("MAGIC_NOW=%d ", gSaveContext.magic); osSyncPrintf("Z_MAGIC_NOW_NOW=%d → ", gSaveContext.unk_13F6); gSaveContext.unk_13F4 = 0; gSaveContext.unk_13F6 = gSaveContext.magic; gSaveContext.magicLevel = gSaveContext.magic = 0; osSyncPrintf("MAGIC_NOW=%d ", gSaveContext.magic); osSyncPrintf("Z_MAGIC_NOW_NOW=%d\n", gSaveContext.unk_13F6); osSyncPrintf(VT_RST); } else { globalCtx->state.running = 0; SET_NEXT_GAMESTATE(&globalCtx->state, Opening_Init, OpeningContext); } } } break; case 0x12: if (pauseCtx->unk_1F4 != 160.0f) { pauseCtx->unk_1F4 = pauseCtx->unk_1F8 = pauseCtx->unk_1FC = pauseCtx->unk_200 += 160.0f / WREG(6); pauseCtx->infoPanelOffsetY -= 40 / WREG(6); interfaceCtx->startAlpha -= 255 / WREG(6); WREG(16) -= WREG(25) / WREG(6); WREG(17) -= WREG(26) / WREG(6); XREG(5) -= 150 / WREG(6); pauseCtx->alpha -= (u16)(255 / WREG(6)); if (pauseCtx->unk_1F4 == 160.0f) { pauseCtx->alpha = 0; } } else { pauseCtx->debugState = 0; pauseCtx->state = 0x13; pauseCtx->unk_200 = 160.0f; pauseCtx->unk_1FC = 160.0f; pauseCtx->unk_1F8 = 160.0f; pauseCtx->unk_1F4 = 160.0f; pauseCtx->namedItem = PAUSE_ITEM_NONE; globalCtx->interfaceCtx.startAlpha = 0; } break; case 0x13: pauseCtx->state = 0; R_UPDATE_RATE = 3; R_PAUSE_MENU_MODE = 0; CVar_SetS32("gPauseTriforce", 0); func_800981B8(&globalCtx->objectCtx); func_800418D0(&globalCtx->colCtx, globalCtx); switch (globalCtx->sceneNum) { case SCENE_YDAN: case SCENE_DDAN: case SCENE_BDAN: case SCENE_BMORI1: case SCENE_HIDAN: case SCENE_MIZUSIN: case SCENE_JYASINZOU: case SCENE_HAKADAN: case SCENE_HAKADANCH: case SCENE_ICE_DOUKUTO: case SCENE_YDAN_BOSS: case SCENE_DDAN_BOSS: case SCENE_BDAN_BOSS: case SCENE_MORIBOSSROOM: case SCENE_FIRE_BS: case SCENE_MIZUSIN_BS: case SCENE_JYASINBOSS: case SCENE_HAKADAN_BS: Map_InitData(globalCtx, globalCtx->interfaceCtx.mapRoomNum); break; } for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) { gSaveContext.buttonStatus[buttonIndex] = sButtonStatusSave[buttonIndex]; } interfaceCtx->unk_1FA = interfaceCtx->unk_1FC = 0; osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("i=%d LAST_TIME_TYPE=%d\n", i, gSaveContext.unk_13EE); gSaveContext.unk_13EA = 0; Interface_ChangeAlpha(gSaveContext.unk_13EE); player->targetActor = NULL; Player_SetEquipmentData(globalCtx, player); osSyncPrintf(VT_RST); break; } }