2022-03-21 21:51:23 -04:00
/*
* File : z_select . c
* Overlay : ovl_select
* Description : Debug Scene Select Menu
*/
2023-01-17 00:17:49 -05:00
# include <libultraship/libultra.h>
2022-03-21 21:51:23 -04:00
# include "global.h"
# include "vt.h"
# include "alloca.h"
2022-11-14 06:13:21 -05:00
# include "soh/Enhancements/randomizer/randomizer_entrance.h"
2022-03-21 21:51:23 -04:00
void Select_LoadTitle ( SelectContext * this ) {
this - > state . running = false ;
SET_NEXT_GAMESTATE ( & this - > state , Title_Init , TitleContext ) ;
}
void Select_LoadGame ( SelectContext * this , s32 entranceIndex ) {
osSyncPrintf ( VT_FGCOL ( BLUE ) ) ;
osSyncPrintf ( " \n \n \n F I L E _ N O = %x\n \n \n " , gSaveContext . fileNum ) ;
osSyncPrintf ( VT_RST ) ;
if ( gSaveContext . fileNum = = 0xFF ) {
Sram_InitDebugSave ( ) ;
2022-11-29 18:28:57 -05:00
gSaveContext . magicFillTarget = gSaveContext . magic ;
2022-03-21 21:51:23 -04:00
gSaveContext . magic = 0 ;
2022-11-29 18:28:57 -05:00
gSaveContext . magicCapacity = 0 ;
2022-03-21 21:51:23 -04:00
gSaveContext . magicLevel = gSaveContext . magic ;
}
2022-06-22 22:24:20 -04:00
for ( int buttonIndex = 0 ; buttonIndex < ARRAY_COUNT ( gSaveContext . buttonStatus ) ; buttonIndex + + ) {
gSaveContext . buttonStatus [ buttonIndex ] = BTN_ENABLED ;
}
2022-03-21 21:51:23 -04:00
gSaveContext . unk_13E7 = gSaveContext . unk_13E8 = gSaveContext . unk_13EA = gSaveContext . unk_13EC = 0 ;
Audio_QueueSeqCmd ( SEQ_PLAYER_BGM_MAIN < < 24 | NA_BGM_STOP ) ;
gSaveContext . entranceIndex = entranceIndex ;
2022-11-14 06:13:21 -05:00
// Check the entrance to see if the exit should be overriden to a grotto return point for entrance rando
if ( gSaveContext . n64ddFlag & & Randomizer_GetSettingValue ( RSK_SHUFFLE_ENTRANCES ) ) {
// Ignore return value as we want to load into the entrance specified by the debug menu
Grotto_OverrideSpecialEntrance ( Entrance_GetOverride ( entranceIndex ) ) ;
}
2023-01-17 00:17:49 -05:00
if ( CVarGetInteger ( " gBetterDebugWarpScreen " , 0 ) ) {
CVarSetInteger ( " gBetterDebugWarpScreenCurrentScene " , this - > currentScene ) ;
CVarSetInteger ( " gBetterDebugWarpScreenTopDisplayedScene " , this - > topDisplayedScene ) ;
CVarSetInteger ( " gBetterDebugWarpScreenPageDownIndex " , this - > pageDownIndex ) ;
CVarSave ( ) ;
2022-10-06 08:39:12 -04:00
}
gSaveContext . respawnFlag = 0 ;
gSaveContext . respawn [ RESPAWN_MODE_DOWN ] . entranceIndex = - 1 ;
gSaveContext . seqId = ( u8 ) NA_BGM_DISABLED ;
gSaveContext . natureAmbienceId = 0xFF ;
gSaveContext . showTitleCard = true ;
gWeatherMode = 0 ;
this - > state . running = false ;
2022-11-06 03:24:34 -05:00
SET_NEXT_GAMESTATE ( & this - > state , Play_Init , PlayState ) ;
2022-10-06 08:39:12 -04:00
}
void Select_Grotto_LoadGame ( SelectContext * this , s32 grottoIndex ) {
osSyncPrintf ( VT_FGCOL ( BLUE ) ) ;
osSyncPrintf ( " \n \n \n F I L E _ N O = %x\n \n \n " , gSaveContext . fileNum ) ;
osSyncPrintf ( VT_RST ) ;
if ( gSaveContext . fileNum = = 0xFF ) {
Sram_InitDebugSave ( ) ;
2022-11-29 18:28:57 -05:00
gSaveContext . magicFillTarget = gSaveContext . magic ;
2022-10-06 08:39:12 -04:00
gSaveContext . magic = 0 ;
2022-11-29 18:28:57 -05:00
gSaveContext . magicCapacity = 0 ;
2022-10-06 08:39:12 -04:00
gSaveContext . magicLevel = gSaveContext . magic ;
}
for ( int buttonIndex = 0 ; buttonIndex < ARRAY_COUNT ( gSaveContext . buttonStatus ) ; buttonIndex + + ) {
gSaveContext . buttonStatus [ buttonIndex ] = BTN_ENABLED ;
}
gSaveContext . unk_13E7 = gSaveContext . unk_13E8 = gSaveContext . unk_13EA = gSaveContext . unk_13EC = 0 ;
Audio_QueueSeqCmd ( SEQ_PLAYER_BGM_MAIN < < 24 | NA_BGM_STOP ) ;
2022-10-20 09:33:45 -04:00
// Entrance index and grotto content data to load the correct grotto and actors
2022-10-06 08:39:12 -04:00
gSaveContext . entranceIndex = this - > betterGrottos [ grottoIndex ] . entranceIndex ;
2022-10-20 09:33:45 -04:00
gSaveContext . respawn [ RESPAWN_MODE_RETURN ] . data = this - > betterGrottos [ grottoIndex ] . data ;
// Infomation to return to the correct grotto exit
2022-10-06 08:39:12 -04:00
gSaveContext . respawn [ RESPAWN_MODE_RETURN ] . entranceIndex = this - > betterGrottos [ grottoIndex ] . returnEntranceIndex ;
gSaveContext . respawn [ RESPAWN_MODE_RETURN ] . roomIndex = this - > betterGrottos [ grottoIndex ] . roomIndex ;
gSaveContext . respawn [ RESPAWN_MODE_RETURN ] . playerParams = 0x4ff ;
gSaveContext . respawn [ RESPAWN_MODE_RETURN ] . pos = this - > betterGrottos [ grottoIndex ] . pos ;
2022-11-14 06:13:21 -05:00
// Check the entrance to see if the exit should be overriden to a grotto return point for entrance rando
if ( gSaveContext . n64ddFlag & & Randomizer_GetSettingValue ( RSK_SHUFFLE_ENTRANCES ) ) {
// Use grotto content and parent scene num to identify the right grotto
s16 grottoEntrance = Grotto_GetRenamedGrottoIndexFromOriginal ( this - > betterGrottos [ grottoIndex ] . data , this - > betterGrottos [ grottoIndex ] . exitScene ) ;
// Ignore return value as we want to load into the entrance specified by the debug menu
Grotto_OverrideSpecialEntrance ( Entrance_GetOverride ( grottoEntrance ) ) ;
}
2023-01-17 00:17:49 -05:00
if ( CVarGetInteger ( " gBetterDebugWarpScreen " , 0 ) ) {
CVarSetInteger ( " gBetterDebugWarpScreenCurrentScene " , this - > currentScene ) ;
CVarSetInteger ( " gBetterDebugWarpScreenTopDisplayedScene " , this - > topDisplayedScene ) ;
CVarSetInteger ( " gBetterDebugWarpScreenPageDownIndex " , this - > pageDownIndex ) ;
CVarSave ( ) ;
2022-10-06 08:39:12 -04:00
}
2022-03-21 21:51:23 -04:00
gSaveContext . respawnFlag = 0 ;
gSaveContext . respawn [ RESPAWN_MODE_DOWN ] . entranceIndex = - 1 ;
gSaveContext . seqId = ( u8 ) NA_BGM_DISABLED ;
gSaveContext . natureAmbienceId = 0xFF ;
gSaveContext . showTitleCard = true ;
gWeatherMode = 0 ;
this - > state . running = false ;
2022-11-06 03:24:34 -05:00
SET_NEXT_GAMESTATE ( & this - > state , Play_Init , PlayState ) ;
2022-03-21 21:51:23 -04:00
}
static SceneSelectEntry sScenes [ ] = {
2023-01-23 15:36:28 -05:00
{ " 1:SPOT00 " , " 1:Hyrule Field " , " 1:Hylianische Steppe " , " 1:Plaine d'Hyrule " , Select_LoadGame , 0x00CD } ,
{ " 2:SPOT01 " , " 2:Kakariko Village " , " 2:Kakariko " , " 2:Village Cocorico " , Select_LoadGame , 0x00DB } ,
{ " 3:SPOT02 " , " 3:Graveyard " , " 3:Friedhof " , " 3:Cimetiere " , Select_LoadGame , 0x00E4 } ,
{ " 4:SPOT03 " , " 4:Zora's River " , " 4:Zora-Fluss " , " 4:Riviere Zora " , Select_LoadGame , 0x00EA } ,
{ " 5:SPOT04 " , " 5:Kokiri Forest " , " 5:Kokiri-Wald " , " 5:Foret Kokiri " , Select_LoadGame , 0x00EE } ,
{ " 6:SPOT05 " , " 6:Sacred Forest Meadow " , " 6:Heilige Lichtung " , " 6:Bosquet Sacre " , Select_LoadGame , 0x00FC } ,
{ " 7:SPOT06 " , " 7:Lake Hylia " , " 7:Hylia-See " , " 7:Lac Hylia " , Select_LoadGame , 0x0102 } ,
{ " 8:SPOT07 " , " 8:Zora's Domain " , " 8:Zoras Reich " , " 8:Domaine Zora " , Select_LoadGame , 0x0108 } ,
{ " 9:SPOT08 " , " 9:Zora's Fountain " , " 9:Zoras Quelle " , " 9:Fontaine Zora " , Select_LoadGame , 0x010E } ,
{ " 10:SPOT09 " , " 10:Gerudo Valley " , " 10:Gerudotal " , " 10:Vallee Gerudo " , Select_LoadGame , 0x0117 } ,
{ " 11:SPOT10 " , " 11:Lost Woods " , " 11:Verlorene Waelder " , " 11:Bois Perdus " , Select_LoadGame , 0x011E } ,
{ " 12:SPOT11 " , " 12:Desert Colossus " , " 12:Wuestenkoloss " , " 12:Colosse du Desert " , Select_LoadGame , 0x0123 } ,
{ " 13:SPOT12 " , " 13:Gerudo's Fortress " , " 13:Gerudo-Festung " , " 13:Forteresse Gerudo " , Select_LoadGame , 0x0129 } ,
{ " 14:SPOT13 " , " 14:Haunted Wasteland " , " 14:Gespensterwueste " , " 14:Desert Hante " , Select_LoadGame , 0x0130 } ,
{ " 15:SPOT15 " , " 15:Hyrule Castle " , " 15:Schloss Hyrule " , " 15:Chateau d'Hyrule " , Select_LoadGame , 0x0138 } ,
{ " 16:SPOT16 " , " 16:Death Mountain Trail " , " 16:Pfad zum Todesberg " , " 16:Chemin du Peril " , Select_LoadGame , 0x013D } ,
{ " 17:SPOT17 " , " 17:Death Mountain Crater " , " 17:Todeskrater " , " 17:Cratere du Peril " , Select_LoadGame , 0x0147 } ,
{ " 18:SPOT18 " , " 18:Goron City " , " 18:Goronia " , " 18:Village Goron " , Select_LoadGame , 0x014D } ,
{ " 19:SPOT20 " , " 19:Lon Lon Ranch " , " 19:Lon Lon-Farm " , " 19:Ranch Lon Lon " , Select_LoadGame , 0x0157 } ,
{ " 20: " GFXP_HIRAGANA " トキノマ " , " 20:Temple Of Time " , " 20:Zitadelle der Zeit " , " 20:Temple du Temps " , Select_LoadGame , 0x0053 } ,
{ " 21: " GFXP_HIRAGANA " ケンジャノマ " , " 21:Chamber of Sages " , " 21:Halle der Weisen " , " 21:Sanctuaire des Sages " , Select_LoadGame , 0x006B } ,
{ " 22: " GFXP_HIRAGANA " シャテキジョウ " , " 22:Shooting Gallery " , " 22:Schiessbude " , " 22:Jeu d'adresse " , Select_LoadGame , 0x003B } ,
{ " 23: " GFXP_KATAKANA " ハイラル " GFXP_HIRAGANA " ニワ " GFXP_KATAKANA " ゲーム " , " 23:Castle Courtyard Game " , " 23:Burghof - Wachen " , " 23:Cour du Chateau (Infilration) " , Select_LoadGame , 0x007A } ,
{ " 24: " GFXP_HIRAGANA " ハカシタトビコミアナ " , " 24:Grave 1 " , " 24:Grab 1 " , " 24:Tombe 1 " , Select_LoadGame , 0x031C } ,
{ " 25: " GFXP_HIRAGANA " ハカシタトビコミアナ 2 " , " 25:Grave 2 " , " 25:Grab 2 " , " 25:Tombe 2 " , Select_LoadGame , 0x004B } ,
{ " 26: " GFXP_HIRAGANA " オウケ ノ ハカアナ " , " 26:Royal Family's Tomb " , " 26:Koenigsgrab " , " 26:Tombe Royale " , Select_LoadGame , 0x002D } ,
2023-01-26 20:09:21 -05:00
{ " 27: " GFXP_HIRAGANA " ダイヨウセイノイズミ " , " 27:Great Fairy's Fountain (Upgrades) " , " 27:Feen-Quelle (Upgrades) " , " 27:Fontaine Royale des Fees (Amel.) " , Select_LoadGame , 0x0315 } ,
2023-01-23 15:36:28 -05:00
{ " 28: " GFXP_HIRAGANA " トビコミ ヨウセイ アナ " , " 28:Fairy's Fountain (Grotto) " , " 28:Feen-Brunnen (Grotte) " , " 28:Fontaines des Fees (Grotte) " , Select_LoadGame , 0x036D } ,
{ " 29: " GFXP_HIRAGANA " マホウセキ ヨウセイノイズミ " , " 29:Great Fairy's Fountain (Magic) " , " 29:Feen-Quelle (Magie) " , " 29:Fontaine Royale des Fees (Magie) " , Select_LoadGame , 0x0371 } ,
{ " 30: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " サイシュウセン " , " 30:Ganon's Tower - Collapsing " , " 30:Ganons Turm - Einsturz " , " 30:Tour de Ganon - Effondrement " , Select_LoadGame , 0x043F } ,
{ " 31: " GFXP_KATAKANA " ハイラル " GFXP_HIRAGANA " ナカニワ " , " 31:Castle Courtyard " , " 31:Burghof - Zelda " , " 31:Cour du Chateau " , Select_LoadGame , 0x0400 } ,
{ " 32: " GFXP_HIRAGANA " ツリボリ " , " 32:Fishing Pond " , " 32:Fischweiher " , " 32:Etang " , Select_LoadGame , 0x045F } ,
{ " 33: " GFXP_KATAKANA " ボムチュウボーリング " , " 33:Bombchu Bowling Alley " , " 33:Minenbowlingbahn " , " 33:Bowling Teigneux " , Select_LoadGame , 0x0507 } ,
{ " 34: " GFXP_KATAKANA " ロンロン " GFXP_HIRAGANA " ボクジョウ ソウコ 1 " , " 34:Lon Lon Ranch House " , " 34:Lon Lon-Farm Haus " , " 34:Maison du Ranch Lon Lon " , Select_LoadGame , 0x004F } ,
{ " 35: " GFXP_KATAKANA " ロンロン " GFXP_HIRAGANA " ボクジョウ ソウコ 2 " , " 35:Lon Lon Ranch Silo " , " 35:Lon Lon-Farm Silo " , " 35:Silo du Ranch Lon Lon " , Select_LoadGame , 0x05D0 } ,
{ " 36: " GFXP_HIRAGANA " ミハリ ゴヤ " , " 36:Guard House " , " 36:Wachposten " , " 36:Maison de Garde " , Select_LoadGame , 0x007E } ,
{ " 37: " GFXP_HIRAGANA " マホウ ノ クスリヤ " , " 37:Potion Shop " , " 37:Magie-Laden " , " 37:Apothicaire " , Select_LoadGame , 0x0072 } ,
{ " 38: " GFXP_HIRAGANA " タカラバコヤ " , " 38:Treasure Chest Game " , " 38:Trhenlotterie " , " 38:Chasse aux Tresors " , Select_LoadGame , 0x0063 } ,
{ " 39: " GFXP_HIRAGANA " キン " GFXP_KATAKANA " スタルチュラ ハウス " , " 39:House Of Skulltula " , " 39:Skulltulas Haus " , " 39:Maison des Skulltulas " , Select_LoadGame , 0x0550 } ,
{ " 40: " GFXP_HIRAGANA " ジョウカマチ イリグチ " , " 40:Entrance to Market " , " 40:Eingang zum Marktplatz " , " 40:Entree de la Place du Marche " , Select_LoadGame , 0x0033 } ,
{ " 41: " GFXP_HIRAGANA " ジョウカマチ " , " 41:Market " , " 41:Marktplatz " , " 41:Place du Marche " , Select_LoadGame , 0x00B1 } ,
{ " 42: " GFXP_HIRAGANA " ウラロジ " , " 42:Back Alley " , " 42:Seitenstrasse " , " 42:Ruelle " , Select_LoadGame , 0x00AD } ,
{ " 43: " GFXP_HIRAGANA " トキノシンデン マエ " , " 43:Temple of Time Exterior " , " 43:Vor der Zitadelle der Zeit " , " 43:Exterieur du Temple du Temps " , Select_LoadGame , 0x0171 } ,
{ " 44: " GFXP_HIRAGANA " リンクノイエ " , " 44:Link's House " , " 44:Links Haus " , " 44:Cabane de Link " , Select_LoadGame , 0x00BB } ,
{ " 45: " GFXP_KATAKANA " カカリコ " GFXP_HIRAGANA " ムラノナガヤ " , " 45:Kakariko House 1 " , " 45:Kakariko Haus 1 " , " 45:Maison du Village Cocorico 1 " , Select_LoadGame , 0x02FD } ,
{ " 46: " GFXP_HIRAGANA " ウラロジノ イエ " , " 46:Back Alley House 1 " , " 46:Seitenstrasse Haus 1 " , " 46:Maison de la Ruelle 1 " , Select_LoadGame , 0x043B } ,
{ " 47: " GFXP_HIRAGANA " コキリノムラ モノシリキョウダイノイエ " , " 47:House of the Know-it-All Brothers " , " 47:Haus der Allwissenden Brueder " , " 47:Cabane des Freres Je-Sais-Tout " , Select_LoadGame , 0x00C9 } ,
{ " 48: " GFXP_HIRAGANA " コキリノムラ フタゴノイエ " , " 48:House of Twins " , " 48:Haus der Zwillinge " , " 48:Cabane des Jumeaux " , Select_LoadGame , 0x009C } ,
{ " 49: " GFXP_HIRAGANA " コキリノムラ " GFXP_KATAKANA " ミド " GFXP_HIRAGANA " ノイエ " , " 49:Mido's House " , " 49:Midos Haus " , " 49:Cabane du Grand Mido " , Select_LoadGame , 0x0433 } ,
{ " 50: " GFXP_HIRAGANA " コキリノムラ " GFXP_KATAKANA " サリア " GFXP_HIRAGANA " ノイエ " , " 50:Saria's House " , " 50:Salias Haus " , " 50:Cabane de Saria " , Select_LoadGame , 0x0437 } ,
{ " 51: " GFXP_HIRAGANA " ウマゴヤ " , " 51:Stable " , " 51:Stall " , " 51:Etable " , Select_LoadGame , 0x02F9 } ,
{ " 52: " GFXP_HIRAGANA " ハカモリノイエ " , " 52:Grave Keeper's Hut " , " 52:Huette des Totengraebers " , " 52:Cabane du Fossoyeur " , Select_LoadGame , 0x030D } ,
{ " 53: " GFXP_HIRAGANA " ウラロジ イヌオバサンノイエ " , " 53:Dog Lady's House " , " 53:Haus der Hunde-Dame " , " 53:Maison de la Dame du Chien " , Select_LoadGame , 0x0398 } ,
{ " 54: " GFXP_HIRAGANA " カカリコムラ " GFXP_KATAKANA " インパ " GFXP_HIRAGANA " ノイエ " , " 54:Impa's House " , " 54:Impas Haus " , " 54:Maison d'Impa " , Select_LoadGame , 0x039C } ,
{ " 55: " GFXP_KATAKANA " ハイリア " GFXP_HIRAGANA " ケンキュウジョ " , " 55:Lakeside Laboratory " , " 55:Hylia-See Laboratorium " , " 55:Laboratoire du Lac " , Select_LoadGame , 0x0043 } ,
{ " 56: " GFXP_KATAKANA " テント " , " 56:Running Man's Tent " , " 56:Zelt des Rennlaeufers " , " 56:Tente du Marathonien " , Select_LoadGame , 0x03A0 } ,
{ " 57: " GFXP_HIRAGANA " タテノミセ " , " 57:Bazaar " , " 57:Basar " , " 57:Bazar " , Select_LoadGame , 0x00B7 } ,
{ " 58: " GFXP_HIRAGANA " コキリゾクノミセ " , " 58:Kokiri Shop " , " 58:Kokiri-Laden " , " 58:Boutique Kokiri " , Select_LoadGame , 0x00C1 } ,
{ " 59: " GFXP_KATAKANA " ゴロン " GFXP_HIRAGANA " ノミセ " , " 59:Goron Shop " , " 59:Goronen-Laden " , " 59:Boutique Goron " , Select_LoadGame , 0x037C } ,
{ " 60: " GFXP_KATAKANA " ゾーラ " GFXP_HIRAGANA " ノミセ " , " 60:Zora Shop " , " 60:Zora-Laden " , " 60:Boutique Zora " , Select_LoadGame , 0x0380 } ,
{ " 61: " GFXP_KATAKANA " カカリコ " GFXP_HIRAGANA " ムラ クスリヤ " , " 61:Closed Shop " , " 61:Geschlossener Laden " , " 61:Boutique Fermee " , Select_LoadGame , 0x0384 } ,
{ " 62: " GFXP_HIRAGANA " ジョウカマチ クスリヤ " , " 62:Potion Shop " , " 62:Magie-Laden " , " 62:Apothicaire (Boutique) " , Select_LoadGame , 0x0388 } ,
{ " 63: " GFXP_HIRAGANA " ウラロジ ヨルノミセ " , " 63:Bombchu Shop " , " 63:Krabbelminen-Laden " , " 63:Boutique de Missiles Teigneux " , Select_LoadGame , 0x0390 } ,
{ " 64: " GFXP_HIRAGANA " オメンヤ " , " 64:Happy Mask Shop " , " 64:Maskenhaendler " , " 64:Foire aux Masques " , Select_LoadGame , 0x0530 } ,
{ " 65: " GFXP_KATAKANA " ゲルド " GFXP_HIRAGANA " ノシュウレンジョウ " , " 65:Gerudo Training Ground " , " 65:Gerudo-Arena " , " 65:Gymnase Gerudo " , Select_LoadGame , 0x0008 } ,
{ " 66: " GFXP_HIRAGANA " ヨウセイノキノ " GFXP_KATAKANA " ダンジョン " , " 66:Inside the Deku Tree " , " 66:Im Deku-Baum " , " 66:Arbre Mojo " , Select_LoadGame , 0x0000 } ,
2023-01-24 15:39:37 -05:00
{ " 67: " GFXP_HIRAGANA " ヨウセイノキノ " GFXP_KATAKANA " ダンジョン ボス " , " 67:Gohma's Lair " , " 67:Gohmas Verlies " , " 67:Repaire de Gohma " , Select_LoadGame , 0x040F } ,
2023-02-14 08:56:25 -05:00
{ " 68: " GFXP_KATAKANA " ドドンゴ ダンジョン " , " 68:Dodongo's Cavern " , " 68:Dodongos Hoehle " , " 68:Caverne Dodongo " , Select_LoadGame , 0x0004 } ,
2023-01-24 15:39:37 -05:00
{ " 69: " GFXP_KATAKANA " ドドンゴ ダンジョン ボス " , " 69:King Dodongo's Lair " , " 69:King Dodongos Verlies " , " 69:Repaire du Roi Dodongo " , Select_LoadGame , 0x040B } ,
2023-01-23 15:36:28 -05:00
{ " 70: " GFXP_HIRAGANA " キョダイギョ " GFXP_KATAKANA " ダンジョン " , " 70:Inside Jabu-Jabu's Belly " , " 70:Jabu-Jabus Bauch " , " 70:Ventre de Jabu-Jabu " , Select_LoadGame , 0x0028 } ,
2023-01-24 15:39:37 -05:00
{ " 71: " GFXP_HIRAGANA " キョダイギョ " GFXP_KATAKANA " ダンジョン ボス " , " 71:Barinade's Lair " , " 71:Barinades Verlies " , " 71:Repaire de Barinade " , Select_LoadGame , 0x0301 } ,
2023-01-23 15:36:28 -05:00
{ " 72: " GFXP_HIRAGANA " モリノシンデン " , " 72:Forest Temple " , " 72:Waldtempel " , " 72:Temple de la Foret " , Select_LoadGame , 0x0169 } ,
2023-01-24 15:39:37 -05:00
{ " 73: " GFXP_HIRAGANA " モリノシンデン " GFXP_KATAKANA " ボス " , " 73:Phantom Ganon's Lair " , " 73:Phantom-Ganons Verlies " , " 73:Repaire de Ganon Spectral " , Select_LoadGame , 0x000C } ,
2023-01-23 15:36:28 -05:00
{ " 74: " GFXP_HIRAGANA " イドシタ " GFXP_KATAKANA " ダンジョン " , " 74:Bottom of the Well " , " 74:Grund des Brunnens " , " 74:Puits " , Select_LoadGame , 0x0098 } ,
{ " 75: " GFXP_HIRAGANA " ハカシタ " GFXP_KATAKANA " ダンジョン " , " 75:Shadow Temple " , " 75:Schattentempel " , " 75:Temple de l'Ombre " , Select_LoadGame , 0x0037 } ,
2023-01-24 15:39:37 -05:00
{ " 76: " GFXP_HIRAGANA " ハカシタ " GFXP_KATAKANA " ダンジョン ボス " , " 76:Bongo Bongo's Lair " , " 76:Bongo Bongos Verlies " , " 76:Repaire de Bongo Bongo " , Select_LoadGame , 0x0413 } ,
2023-01-23 15:36:28 -05:00
{ " 77: " GFXP_HIRAGANA " ヒノシンデン " , " 77:Fire Temple " , " 77:Feuertempel " , " 77:Temple du Feu " , Select_LoadGame , 0x0165 } ,
2023-02-14 08:56:25 -05:00
{ " 78: " GFXP_HIRAGANA " ヒノシンデン " GFXP_KATAKANA " ボス " , " 78:Volvagia's Lair " , " 78:Volvagias Verlies " , " 78:Repaire de Volcania " , Select_LoadGame , 0x0305 } ,
2023-01-23 15:36:28 -05:00
{ " 79: " GFXP_HIRAGANA " ミズノシンデン " , " 79:Water Temple " , " 79:Wassertempel " , " 79:Temple de l'Eau " , Select_LoadGame , 0x0010 } ,
2023-01-24 15:39:37 -05:00
{ " 80: " GFXP_HIRAGANA " ミズノシンデン " GFXP_KATAKANA " ボス " , " 80:Morpha's Lair " , " 80:Morphas Verlies " , " 80:Repaire de Morpha " , Select_LoadGame , 0x0417 } ,
2023-01-23 15:36:28 -05:00
{ " 81: " GFXP_HIRAGANA " ジャシンゾウ " GFXP_KATAKANA " ダンジョン " , " 81:Spirit Temple " , " 81:Geistertempel " , " 81:Temple de l'Esprit " , Select_LoadGame , 0x0082 } ,
2023-01-24 15:39:37 -05:00
{ " 82: " GFXP_HIRAGANA " ジャシンゾウ " GFXP_KATAKANA " ダンジョン アイアンナック " , " 82:Iron Knuckle's Lair " , " 82:Eisenprinz' Verlies " , " 82:Repaire du Hache Viande " , Select_LoadGame , 0x008D } ,
{ " 83: " GFXP_HIRAGANA " ジャシンゾウ " GFXP_KATAKANA " ダンジョン ボス " , " 83:Twinrova's Lair " , " 83:Killa Ohmaz' Verlies " , " 83:Repaire du Duo Malefique " , Select_LoadGame , 0x05EC } ,
{ " 84: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " ノトウ " , " 84:Stairs to Ganondorf's Lair " , " 84:Treppen zu Ganondorfs Verlies " , " 84:Repaire de Ganondorf (Escaliers) " , Select_LoadGame , 0x041B } ,
{ " 85: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " ノトウ " GFXP_KATAKANA " ボス " , " 85:Ganondorf's Lair " , " 85:Ganondorfs Verlies " , " 85:Repaire de Ganondorf " , Select_LoadGame , 0x041F } ,
2023-01-23 15:36:28 -05:00
{ " 86: " GFXP_HIRAGANA " コオリノドウクツ " , " 86:Ice Cavern " , " 86:Eishoehle " , " 86:Caverne Polaire " , Select_LoadGame , 0x0088 } ,
2023-01-26 20:09:21 -05:00
{ " 87: " GFXP_HIRAGANA " ハカシタ " GFXP_KATAKANA " リレー " , " 87:Dampe Grave Relay Game " , " 87:Boris' Grab Staffellauf " , " 87:Tombe d'Igor " , Select_LoadGame , 0x044F } ,
2023-01-23 15:36:28 -05:00
{ " 88: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " チカ " GFXP_KATAKANA " ダンジョン " , " 88:Inside Ganon's Castle " , " 88:In Ganons Schloss " , " 88:Tour de Ganon " , Select_LoadGame , 0x0467 } ,
2023-01-24 15:39:37 -05:00
{ " 89: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " サイシュウセン " GFXP_KATAKANA " デモ & バトル " , " 89:Ganon's Lair " , " 89:Ganons Verlies " , " 89:Repaire de Ganon " , Select_LoadGame , 0x0517 } ,
2023-01-23 15:36:28 -05:00
{ " 90: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " ノトウ ソノゴ 1 " , " 90:Escaping Ganon's Castle 1 " , " 90:Flucht aus Ganons Schloss 1 " , " 90:Fuite du Chateau de Ganon 1 " , Select_LoadGame , 0x0179 } ,
{ " 91: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " ノトウ ソノゴ 2 " , " 91:Escaping Ganon's Castle 2 " , " 91:Flucht aus Ganons Schloss 2 " , " 91:Fuite du Chateau de Ganon 2 " , Select_LoadGame , 0x01B5 } ,
{ " 92: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " ノトウ ソノゴ 3 " , " 92:Escaping Ganon's Castle 3 " , " 92:Flucht aus Ganons Schloss 3 " , " 92:Fuite du Chateau de Ganon 3 " , Select_LoadGame , 0x03DC } ,
{ " 93: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " ノトウ ソノゴ 4 " , " 93:Escaping Ganon's Castle 4 " , " 93:Flucht aus Ganons Schloss 4 " , " 93:Fuite du Chateau de Ganon 4 " , Select_LoadGame , 0x03E4 } ,
{ " 94: " GFXP_KATAKANA " ガノン " GFXP_HIRAGANA " チカ ソノゴ " , " 94:Escaping Ganon's Castle 5 " , " 94:Flucht aus Ganons Schloss 5 " , " 94:Fuite du Chateau de Ganon 5 " , Select_LoadGame , 0x056C } ,
{ " 95: " GFXP_KATAKANA " ゲルド " GFXP_HIRAGANA " ツウロ 1-2 " , " 95:Thieves' Hideout 1-2 " , " 95:Diebesversteck 1-2 " , " 95:Repaire des Voleurs 1-2 " , Select_LoadGame , 0x0486 } ,
{ " 96: " GFXP_KATAKANA " ゲルド " GFXP_HIRAGANA " ツウロ 3-4 9-10 " , " 96:Thieves' Hideout 3-4 9-10 " , " 96:Diebesversteck 3-4 9-10 " , " 96:Repaire des Voleurs 3-4 9-10 " , Select_LoadGame , 0x048E } ,
{ " 97: " GFXP_KATAKANA " ゲルド " GFXP_HIRAGANA " ツウロ 5-6 " , " 97:Thieves' Hideout 5-6 " , " 97:Diebesversteck 5-6 " , " 97:Repaire des Voleurs 5-6 " , Select_LoadGame , 0x0496 } ,
{ " 98: " GFXP_KATAKANA " ゲルド " GFXP_HIRAGANA " ツウロ 7-8 " , " 98:Thieves' Hideout 7-8 " , " 98:Diebesversteck 7-8 " , " 98:Repaire des Voleurs 7-8 " , Select_LoadGame , 0x049E } ,
{ " 99: " GFXP_KATAKANA " ゲルド " GFXP_HIRAGANA " ツウロ 11-12 " , " 99:Thieves' Hideout 11-12 " , " 99:Diebesversteck 11-12 " , " 99:Repaire des Voleurs 11-12 " , Select_LoadGame , 0x04AE } ,
{ " 100: " GFXP_KATAKANA " ゲルド " GFXP_HIRAGANA " ツウロ 13 " , " 100:Thieves' Hideout 13 " , " 100:Diebesversteck 13 " , " 100:Repaire des Voleurs 13 " , Select_LoadGame , 0x0570 } ,
{ " 101: " GFXP_HIRAGANA " カクシトビコミアナ 0 " , " 101:Grotto 0 " , " 101:Grotte 0 " , " 101:Grotte 0 " , Select_LoadGame , 0x003F } ,
{ " 102: " GFXP_HIRAGANA " カクシトビコミアナ 1 " , " 102:Grotto 1 " , " 102:Grotte 1 " , " 102:Grotte 1 " , Select_LoadGame , 0x0598 } ,
{ " 103: " GFXP_HIRAGANA " カクシトビコミアナ 2 " , " 103:Grotto 2 " , " 103:Grotte 2 " , " 103:Grotte 2 " , Select_LoadGame , 0x059C } ,
{ " 104: " GFXP_HIRAGANA " カクシトビコミアナ 3 " , " 104:Grotto 3 " , " 104:Grotte 3 " , " 104:Grotte 3 " , Select_LoadGame , 0x05A0 } ,
{ " 105: " GFXP_HIRAGANA " カクシトビコミアナ 4 " , " 105:Grotto 4 " , " 105:Grotte 4 " , " 105:Grotte 4 " , Select_LoadGame , 0x05A4 } ,
{ " 106: " GFXP_HIRAGANA " カクシトビコミアナ 5 " , " 106:Grotto 5 " , " 106:Grotte 5 " , " 106:Grotte 5 " , Select_LoadGame , 0x05A8 } ,
{ " 107: " GFXP_HIRAGANA " カクシトビコミアナ 6 " , " 107:Grotto 6 " , " 107:Grotte 6 " , " 107:Grotte 6 " , Select_LoadGame , 0x05AC } ,
{ " 108: " GFXP_HIRAGANA " カクシトビコミアナ 7 " , " 108:Grotto 7 " , " 108:Grotte 7 " , " 108:Grotte 7 " , Select_LoadGame , 0x05B0 } ,
{ " 109: " GFXP_HIRAGANA " カクシトビコミアナ 8 " , " 109:Grotto 8 " , " 109:Grotte 8 " , " 109:Grotte 8 " , Select_LoadGame , 0x05B4 } ,
{ " 110: " GFXP_HIRAGANA " カクシトビコミアナ 9 " , " 110:Grotto 9 " , " 110:Grotte 9 " , " 110:Grotte 9 " , Select_LoadGame , 0x05B8 } ,
{ " 111: " GFXP_HIRAGANA " カクシトビコミアナ 10 " , " 111:Grotto 10 " , " 111:Grotte 10 " , " 111:Grotte 10 " , Select_LoadGame , 0x05BC } ,
{ " 112: " GFXP_HIRAGANA " カクシトビコミアナ 11 " , " 112:Grotto 11 " , " 112:Grotte 11 " , " 112:Grotte 11 " , Select_LoadGame , 0x05C0 } ,
{ " 113: " GFXP_HIRAGANA " カクシトビコミアナ 12 " , " 113:Grotto 12 " , " 113:Grotte 12 " , " 113:Grotte 12 " , Select_LoadGame , 0x05C4 } ,
{ " 114: " GFXP_HIRAGANA " カクシトビコミアナ 13 " , " 114:Grotto 13 " , " 114:Grotte 13 " , " 114:Grotte 13 " , Select_LoadGame , 0x05FC } ,
2023-01-26 20:09:21 -05:00
{ " 115: " GFXP_KATAKANA " ハイラル デモ " , " 115:Goddess Cutscene Environment " , " 115:Goettinnen Cutscene Umgebung " , " 115:Carte de la scene des Deesses " , Select_LoadGame , 0x00A0 } ,
2023-01-23 15:36:28 -05:00
{ " 116: " GFXP_HIRAGANA " ベッシツ (タカラバコ " GFXP_KATAKANA " ワープ) " , " 116:Test Room " , " 116:Test Raum " , " 116:Salle de Test " , Select_LoadGame , 0x0520 } ,
{ " 117: " GFXP_HIRAGANA " ササ " GFXP_KATAKANA " テスト " , " 117:SRD Map " , " 117:SRD Karte " , " 117:Carte SRD " , Select_LoadGame , 0x0018 } ,
{ " 118: " GFXP_KATAKANA " テストマップ " , " 118:Test Map " , " 118:Test Karte " , " 118:Carte de Test " , Select_LoadGame , 0x0094 } ,
2023-01-26 20:09:21 -05:00
{ " 119: " GFXP_KATAKANA " テストルーム " , " 119:Treasure Chest Warp " , " 119:Schatzkisten Teleport " , " 119:Coffres debug " , Select_LoadGame , 0x0024 } ,
{ " 120: " GFXP_HIRAGANA " チュウ " GFXP_KATAKANA " スタロフォス " GFXP_HIRAGANA " ベヤ " , " 120:Stalfos Miniboss Room " , " 120:Stalfos-Ritter Miniboss Raum " , " 120:Salle de Miniboss Stalfos " , Select_LoadGame , 0x001C } ,
{ " 121: " GFXP_KATAKANA " ボススタロフォス " GFXP_HIRAGANA " ベヤ " , " 121:Stalfos Boss Room " , " 121:Stalfos-Ritter Boss Raum " , " 121:Salle de Boss Stalfos " , Select_LoadGame , 0x0020 } ,
{ " 122:Sutaru " , " 122:Dark Link Room " , " 122:Schwarzer Link Raum " , " 122:Salle de Dark Link " , Select_LoadGame , 0x0047 } ,
{ " 123:jikkenjyou " , " 123:Shooting Gallery Duplicate " , " 123:Schiessbude (Duplikat) " , " 123:Jeu d'adresse (Duplicata) " , Select_LoadGame , 0x02EA } ,
2023-01-23 15:36:28 -05:00
{ " 124:depth " GFXP_KATAKANA " テスト " , " 124:depth test " , " 124:Tiefen Test " , " 124:Test de Profondeur " , Select_LoadGame , 0x00B6 } ,
2023-01-26 20:09:21 -05:00
{ " 125: " GFXP_KATAKANA " ハイラル " GFXP_HIRAGANA " ニワ " GFXP_KATAKANA " ゲーム2 " , " 125:Hyrule Garden Game (Broken) " , " 125:Burghof - Wachen-Minispiel (Kaputt) " , " 125:Cour du Chateau (Non fonctionnel) " , Select_LoadGame , 0x0076 } ,
2023-01-23 15:36:28 -05:00
{ " title " , " title " , " Titelbildschirm " , " Ecran-titre " , Select_LoadTitle , 0x0000 } ,
2022-03-21 21:51:23 -04:00
} ;
2023-01-23 15:36:28 -05:00
2022-10-06 08:39:12 -04:00
static BetterSceneSelectEntry sBetterScenes [ ] = {
2023-01-23 15:36:28 -05:00
{ " 1:Hyrule Field " , " 1:Hylianische Steppe " , " 1:Plaine d'Hyrule " , Select_LoadGame , 8 , {
{ " Near Drawbridge " , " Nahe der Zugbruecke " , " Pres du Pont-levis " , 0x00CD } ,
{ " From Drawbridge " , " Von der Zugbruecke " , " Depuis le Pont-levis " , 0x01FD } ,
{ " From Kakariko Village " , " Von Kakariko " , " Depuis le Village Cocorico " , 0x017D } ,
{ " From Zora River " , " Vom Zora-Fluss " , " Depuis la Riviere Zora " , 0x0181 } ,
{ " From Lost Woods " , " Von den verlorenen Waeldern " , " Depuis les Bois Perdus " , 0x0185 } ,
{ " From Lake Hylia " , " Vom Hylia-See " , " Depuis le Lac Hylia " , 0x0189 } ,
{ " From Gerudo Valley " , " Vom Gerudotal " , " Depuis la Vallee Gerudo " , 0x018D } ,
{ " From Lon Lon Ranch " , " Von der Lon Lon-Farm " , " Depuis le Ranch Lon Lon " , 0x01F9 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 2:Kokiri Forest " , " 2:Kokiri-Wald " , " 2:Foret Kokiri " , Select_LoadGame , 9 , {
{ " From Links House " , " Von Links Haus " , " Depuis la Cabane de Link " , 0x0211 } ,
{ " From Bridge " , " Von der Bruecke " , " Depuis le Pont " , 0x020D } ,
{ " From Lost Woods " , " Von den verlorenen Waeldern " , " Depuis les Bois Perdus " , 0x0286 } ,
{ " From Deku Tree " , " Vom Deku-Baum " , " Depuis l'Arbre Mojo " , 0x0209 } ,
{ " From Kokiri Shop " , " Vom Kokiri-Laden " , " Depuis la Boutique Kokiri " , 0x0266 } ,
{ " From Know-It-All Brothers House " , " Vom Haus der Allwissenden Brueder " , " Depuis la Cabane des Freres Je-Sais-Tout " , 0x026A } ,
{ " From Twins House " , " Vom Haus der Zwillinge " , " Depuis la Cabane des Jumeaux " , 0x033C } ,
{ " From Midos House " , " Von Midos Haus " , " Depuis la Cabane du Grand Mido " , 0x0443 } ,
{ " From Sarias House " , " Von Salias Haus " , " Depuis la Cabane de Saria " , 0x0447 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 3:Kokiri Buildings " , " 3:Kokiri Gebaeude " , " 3:Cabanes des Kokiris " , Select_LoadGame , 6 , {
{ " Links Bed " , " Links Bett " , " Lit de Link " , 0x00BB } ,
{ " Kokiri Shop " , " Kokiri-Laden " , " Boutique Kokiri " , 0x00C1 } ,
{ " Twins House " , " Haus der Zwillinge " , " Cabane des Jumeaux " , 0x009C } ,
{ " Know-It-All Brothers House " , " Haus der Allwissenden Brueder " , " Cabane des Freres Je-Sais-Tout " , 0x00C9 } ,
{ " Midos House " , " Midos Haus " , " Cabane du Grand Mido " , 0x0433 } ,
{ " Sarias House " , " Salias Haus " , " Cabane de Sara " , 0x0437 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 4:Lost Woods " , " 4:Verlorene Waelder " , " 4:Bois Perdus " , Select_LoadGame , 5 , {
{ " From Kokiri Forest " , " Vom Kokiri-Wald " , " Depuis la Foret Kokiri " , 0x011E } ,
{ " From Sacred Meadow " , " Von der Waldlichtung " , " Depuis le Bosquet Sacre " , 0x01A9 } ,
{ " From Goron City " , " Vom Goronia " , " Depuis le Village Goron " , 0x04D6 } ,
{ " From Zora River " , " Vom Zora-Fluss " , " Depuis la Riviere Zora " , 0x04DA } ,
{ " Bridge " , " Bruecke " , " Pont " , 0x05E0 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 5:Sacred Forest Meadow " , " 5:Waldlichtung " , " 5:Bosquet Sacre " , Select_LoadGame , 3 , {
{ " From Lost Woods " , " Von den Verlorenen Waeldern " , " Depuis les Bois Perdus " , 0x00FC } ,
{ " From Forest Temple " , " Vom Waldtempel " , " Depuis le Temple de la Foret " , 0x0215 } ,
{ " Minuet of Forest Warp " , " Menuett des Waldes Teleport " , " Teleporteur du Menuet des Bois " , 0x0600 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 6:Castle Town Entrance " , " 6:Eingang zum Marktplatz " , " 6:Entree du Bourg d'Hyrule " , Select_LoadGame , 3 , {
{ " From Hyrule Field " , " Von der Hylianischen Steppe " , " Depuis la Plaine d'Hyrule " , 0x0276 } ,
{ " From Market " , " Vom Marktplatz " , " Depuis la Place du Marche " , 0x0033 } ,
{ " From Pot House " , " Vom Wachposten " , " Depuis la Maison des Jarres " , 0x026E } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 7:Market " , " 7:Marktplatz " , " 7:Place du Marche " , Select_LoadGame , 11 , {
{ " From Castle Town Entrance " , " Vom Eingang zum Marktplatz " , " Depuis l'Entree du Bourg d'Hyrule " , 0x00B1 } ,
{ " From Shooting Gallery " , " Von der Schiessbude " , " Depuis le Jeu d'adresse " , 0x01CD } ,
{ " From Happy Mask Shop " , " Vom Maskenhaendler " , " Depuis la Foire aux Masques " , 0x01D1 } ,
{ " From Treasure Box Minigame " , " Von der Truhenlotterie " , " Depuis le Bowling Teigneux " , 0x01D5 } ,
{ " From Castle " , " Vom Schloss " , " Depuis le Chateau d'Hyrule " , 0x025A } ,
{ " From Temple of Time " , " Von der Zitadelle der Zeit " , " Depuis le Temple du Temps " , 0x025E } ,
{ " From Back Alley (Right) " , " Von der Seitenstrasse (Rechts) " , " Depuis la Ruelle (Droite) " , 0x0262 } ,
{ " From Back Alley (Left) " , " Von der Seitenstrasse (Links) " , " Depuis la Ruelle (Gauche) " , 0x029E } ,
{ " From Potion Shop " , " Vom Magie-Laden " , " Depuis l'Apothicaire " , 0x02A2 } ,
{ " From Bazaar Shop " , " Vom Basar " , " Depuis le Bazar " , 0x03B8 } ,
{ " From Bomchu Bowling Minigame " , " Von der Minenbowlingbahn " , " Depuis le Bowling Teigneux " , 0x03BC } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 8:Castle Town Alley " , " 8:Seitenstrasse " , " 8:Ruelle du Bourg d'Hyrule " , Select_LoadGame , 5 , {
{ " From Market (Right) " , " Vom Marktplatz (Rechts) " , " Depuis la Place du Marche (Droite) " , 0x00AD } ,
{ " From Market (Left) " , " Vom Marktplatz (Links) " , " Depuis la Place du Marche (Gauche) " , 0x029A } ,
{ " From Alley House " , " Vom Seitenstrassenhaus " , " Depuis la Maison de la Ruelle " , 0x0067 } ,
{ " From Dog House " , " Vom Haus der Hunde-Dame " , " Depuis la Maison du Chien " , 0x038C } ,
{ " From Bombchu Shop " , " Vom Krabbelminen-Laden " , " Depuis le Magasin de Missiles " , 0x03C0 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 9:Castle Town Buildings " , " 9:Marktplatz Gebaeude " , " 9:Batiments du Bourg d'Hyrule " , Select_LoadGame , 10 , {
{ " Pot House " , " Wachposten " , " Maison des Jarres " , 0x007E } ,
{ " Shooting Gallery Minigame " , " Schiessbude " , " Jeu d'adresse " , 0x016D } ,
{ " Treasure Box Minigame " , " Truhenlotterie " , " Chasse aux Tresors " , 0x0063 } ,
{ " Potion Shop " , " Magie-Laden " , " Apothicaire " , 0x0388 } ,
{ " Bombchu Bowling Minigame " , " Minenbowlingbahn " , " Bowling Teigneux " , 0x0507 } ,
{ " Bazaar Shop " , " Basar " , " Bazar " , 0x052C } ,
{ " Happy Mask Shop " , " Maskenhaendler " , " Foire aux Masques " , 0x0530 } ,
{ " Bombchu Shop " , " Krabbelminen-Laden " , " Boutique de Missiles " , 0x0528 } ,
{ " Dog House " , " Haus der Hunde-Dame " , " Maison du Chien " , 0x0398 } ,
{ " Alley House " , " Seitenstrassenhaus " , " Maison de la Ruelle " , 0x043B } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 10:Temple of Time " , " 10:Zitadelle der Zeit " , " 10:Temple du Temps " , Select_LoadGame , 5 , {
{ " From Outside " , " Von draussen " , " Depuis l'Entree " , 0x053 } ,
{ " From Master Sword Pedestal " , " Vom Master-Schwert Podest " , " Depuis le Piedestal de l'Epee de Legende " , 0x02CA } ,
{ " Prelude of Light Warp " , " Kantate des Lichts Teleport " , " Teleporteur du Prelude de la Lumiere " , 0x05F4 } ,
{ " Outside Temple of Time - From Market " , " Vor der Zitadelle der Zeit - Vom Marktplatz " , " Exterieur du Temple - Depuis la Place du Marche " , 0x0171 } ,
{ " Outside Temple of Time - From Temple of Time " , " Vor der Zitadelle der Zeit - Von der Zitadelle der Zeit " , " Exterieur du Temple - Depuis le Temple " , 0x0472 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 11:Hyrule Castle " , " 11:Schloss Hyrule " , " 11:Chateau d'Hyrule " , Select_LoadGame , 5 , {
{ " From Market " , " Vom Marktplatz " , " Depuis la Place du Marche " , 0x0138 } ,
{ " From Castle Courtyard " , " Vom Burghof " , " Depuis la Cour du Chateau " , 0x023D } ,
{ " From Great Fairy " , " Von der Feen-Quelle " , " Depuis la Grande Fee " , 0x0340 } ,
{ " From Courtyard Guard Capture " , " Von Wachen-Festnahme " , " Depuis la capture d'un Garde de la Cour " , 0x04FA } ,
{ " Great Fairy " , " Feen-Quelle " , " Grande Fee " , 0x04C2 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 12:Hyrule Castle Courtyard " , " 12:Burghof " , " 12:Cour du Chateau " , Select_LoadGame , 3 , {
{ " From Crawlspace " , " Vom Kriechtunnel " , " Depuis l'Entree " , 0x007A } ,
{ " From Zelda " , " Von Zelda " , " Depuis Zelda " , 0x0296 } ,
{ " Zeldas Courtyard " , " Zeldas Burghof " , " Depuis la Cour de Zelda " , 0x0400 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 13:Lon Lon Ranch " , " 13:Lon Lon-Farm " , " 13:Ranch Lon Lon " , Select_LoadGame , 4 , {
{ " From Hyrule Field " , " Von der Hylianischen Steppe " , " Depuis la Plaine d'Hyrule " , 0x0157 } ,
{ " From Ranch House " , " Vom Farmhaus " , " Depuis la Maison du Ranch " , 0x0378 } ,
{ " From Stables " , " Vom Stall " , " Depuis l'Etable " , 0x042F } ,
{ " Epona Song Cutscene " , " Eponas Song Cutscene " , " Cinematique du Chant d'Epona " , 0x02AE } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 14:Lon Lon Ranch Buildings " , " 14:Lon Lon-Farm Gebaeude " , " 14:Batiments du Ranch Lon Lon " , Select_LoadGame , 3 , {
{ " Ranch House " , " Farmhaus " , " Maison du Ranch " , 0x004F } ,
{ " Stables " , " Stall " , " Etable du Ranch " , 0x02F9 } ,
{ " Back Tower " , " Silo " , " Silo du Ranch " , 0x05D0 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 15:Kakariko Village " , " 15:Kakariko " , " 15:Village Cocorico " , Select_LoadGame , 15 , {
{ " From Hyrule Field " , " Von der Hylianischen Steppe " , " Depuis la Plaine d'Hyrule " , 0x00DB } ,
{ " From Death Mountain " , " Vom Todesberg " , " Depuis le Mont du Peril " , 0x0191 } ,
{ " From Graveyard " , " Vom Friedhof " , " Depuis le Cimetiere " , 0x0195 } ,
{ " From Bazaar " , " Vom Basar " , " Depuis le Bazar " , 0x0201 } ,
{ " From Bottom of Well " , " Vom Grund des Brunnens " , " Depuis le Puits " , 0x02A6 } ,
{ " From Boss House " , " Vom Haus des Bosses " , " Depuis la Maison du Boss " , 0x0349 } ,
{ " From Potion Shop " , " Vom Magie-Laden " , " Depuis l'Apothicaire " , 0x044B } ,
{ " From Potion Shop (Back Entrance) " , " Vom Magie-Laden (Hintereingang) " , " Depuis l'Apothicaire (Entree Arriere) " , 0x04FF } ,
{ " From Grannys Potion Shop " , " Von Omas Magie-Laden " , " Depuis l'Apothicaire (Vieille Femme) " , 0x034D } ,
{ " From Impas House " , " Von Impas Haus " , " Depuis la Maison d'Impa " , 0x0345 } ,
{ " From Impas House (Cow) " , " Von Impas Haus (Kuh) " , " Depuis la Maison d'Impa (Vache) " , 0x05DC } ,
{ " From Windmill " , " Von der Windmuehle " , " Depuis le Moulin " , 0x0351 } ,
{ " From Shooting Gallery " , " Von der Schiessbude " , " Depuis le Jeu d'adresse " , 0x0463 } ,
{ " From Skulltula House " , " Vom Skulltula Haus " , " Depuis la Maison des Skulltulas " , 0x04EE } ,
{ " Owl Drop Spot from Death Mountain " , " Eulen-Absetzpunkt vom Todesberg " , " Point de chute du Hibou depuis le Mont du Peril " , 0x0554 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 16:Kakariko Buildings " , " 16:Kakariko Gebaeude " , " 16:Batiments du Village Cocorico " , Select_LoadGame , 9 , {
{ " Shooting Gallery Minigame " , " Schiessbude " , " Jeu d'adresse " , 0x003B } ,
{ " Grannys Potion Shop " , " Omas Magie-Laden " , " Apothicaire (Vieille Femme) " , 0x0072 } ,
{ " Bazaar Shop " , " Basar " , " Bazar " , 0x00B7 } ,
{ " Potion Shop " , " Magie-Laden " , " Apothicaire " , 0x0384 } ,
{ " Impas House " , " Impas Haus " , " Maison d'Impa " , 0x039C } ,
{ " Impas House (Near Cow) " , " Impas Haus (Kuh) " , " Maison d'Impa (Vache) " , 0x05C8 } ,
{ " Boss House " , " Haus des Bosses " , " Maison du Boss " , 0x02FD } ,
{ " Windmill " , " Windmuehle " , " Moulin " , 0x0453 } ,
{ " Skulltula House " , " Skulltula Haus " , " Maison des SKulltulas " , 0x0550 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 17:Graveyard " , " 17:Friedhof " , " 17:Cimetiere " , Select_LoadGame , 9 , {
{ " From Kakariko " , " Von Kakariko " , " Depuis l'Apothicaire " , 0x00E4 } ,
{ " From Shadow Temple " , " Vom Schattentempel " , " Depuis le Temple de l'Ombre " , 0x0205 } ,
{ " From Gravekeepers Hut " , " Von der Huette des Totengraebers " , " Depuis la Cabane du Fossoyeur " , 0x0355 } ,
{ " From Dampes Grave " , " Von Boris' Grab " , " Depuis la Tombe d'Igor " , 0x0359 } ,
{ " From Shield Grave " , " Vom Schild-Grab " , " Depuis la Tombe au Bouclier " , 0x035D } ,
{ " From Redead Grave " , " Vom Zombie-Grab " , " Depuis la Tombe au Effrois " , 0x0361 } ,
{ " From Royal Familys Tomb " , " Vom Koenigsgrab " , " Depuis la Tombe Royale " , 0x050B } ,
{ " Inside Dampe's Hut " , " Huette des Totengraebers " , " A l'interieur de la Cabane du Fossoyeur " , 0x030D } ,
{ " Nocturne of Shadow Warp " , " Nocturne des Schattens Teleport " , " Teleporteur du Nocturne de l'Ombre " , 0x0568 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 18:Graves " , " 18:Graeber " , " 18:Tombes " , Select_LoadGame , 5 , {
{ " Dampes Grave Minigame " , " Boris' Grab-Minispiel " , " Tour du Cimetiere d'Igor " , 0x044F } ,
{ " Royal Familys Tomb " , " Koenigsgrab " , " Tombe Royale " , 0x002D } ,
{ " Royal Familys Tomb, Suns Song Cutscene " , " Koenigsgrab, Hymne der Sonne Cutscene " , " Tombe Royale, Cinematique du Chant du Soleil " , 0x0574 } ,
{ " Treasure Chest Grave " , " Schatzkisten Grab " , " Tombe au Coffre " , 0x004B } ,
{ " ReDead Grave " , " Zombie Grab " , " Tombe au Effrois " , 0x031C } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 19:Death Mountain Trail " , " 19:Gebirgspfad " , " 19:Mont du Peril " , Select_LoadGame , 6 , {
{ " From Kakariko Village " , " Von Kakariko " , " Depuis le Village Cocorico " , 0x013D } ,
{ " From Goron City " , " Von Goronia " , " Depuis le Village Goron " , 0x01B9 } ,
{ " From Death Mountain Crater " , " Vom Todeskrater " , " Depuis le Cratere du Peril " , 0x01BD } ,
{ " From Dodongos Cavern " , " Von Dodongos Hoehle " , " Depuis la Caverne Dodongo " , 0x0242 } ,
{ " From Great Fairy " , " Von der Feen-Quelle " , " Depuis la Grande Fee " , 0x045B } ,
{ " Great Fairy " , " Feen-Quelle " , " Grande Fee " , 0x0315 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 20:Goron City " , " 20:Goronia " , " 20:Village Goron " , Select_LoadGame , 5 , {
{ " From Death Mountain Trail " , " Vom Gebirgspfad " , " Depuis le Mont du Peril " , 0x014D } ,
{ " From Death Mountain Crater " , " Vom Todeskrater " , " Depuis le Cratere du Peril " , 0x01C1 } ,
{ " From Goron City Shop " , " Vom Goronen-Laden " , " Depuis la Boutique Goron " , 0x03FC } ,
{ " From Lost Woods " , " Von den Verlorenen Waeldern " , " Depuis les Bois Perdus " , 0x04E2 } ,
{ " Goron City Shop " , " Goronen-Laden " , " Boutique Goron " , 0x037C } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 21:Death Mountain Crater " , " 21:Todeskrater " , " 21:Cratere du Peril " , Select_LoadGame , 6 , {
{ " From Death Mountain Trail " , " Vom Gebirgspfad " , " Depuis le Mont du Peril " , 0x0147 } ,
{ " From Goron City " , " Von Goronia " , " Depuis le Village Goron " , 0x0246 } ,
{ " From Fire Temple " , " Vom Feuertempel " , " Depuis le Temple du Feu " , 0x024A } ,
{ " From Fairy Fountain " , " Von der Feen-Quelle " , " Depuis la Fontaine des Fees " , 0x0482 } ,
{ " Great Fairy " , " Feen-Quelle " , " Depuis la Grande Fee " , 0x04BE } ,
{ " Bolero of Fire Warp " , " Bolero des Feuers Teleport " , " Teleporteur du Bolero du Feu " , 0x04F6 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 22:Zora River " , " 22:Zora-Fluss " , " 22:Riviere Zora " , Select_LoadGame , 3 , {
{ " From Hyrule Field " , " Von der Hylianischen Steppe " , " Depuis la Plaine d'Hyrule " , 0x00EA } ,
{ " From Zoras Domain " , " Von Zoras Reich " , " Depuis le Domaine Zora " , 0x019D } ,
{ " From Lost Woods " , " Von den Verlorenen Waeldern " , " Depuis les Bois Perdus " , 0x01DD } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 23:Zoras Domain " , " 23:Zoras Reich " , " 23:Domaine Zora " , Select_LoadGame , 5 , {
{ " From Zora River " , " Vom Zora-Fluss " , " Depuis la Riviere Zora " , 0x0108 } ,
{ " From Zoras Fountain " , " Von Zoras Quelle " , " Depuis la Fontaine Zora " , 0x01A1 } ,
{ " From Lake Hylia " , " Vom Hylia-See " , " Depuis le Lac Hylia " , 0x0328 } ,
{ " From Zora Shop " , " Vom Zora-Laden " , " Depuis la Boutique Zora " , 0x03C4 } ,
{ " Zora Shop " , " Zora-Laden " , " Boutique Zora " , 0x0380 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 24:Zoras Fountain " , " 24:Zoras Quelle " , " 24:Fontaine Zora " , Select_LoadGame , 5 , {
{ " From Zoras Domain " , " Von Zoras Reich " , " Depuis le Domaine Zora " , 0x0225 } ,
{ " From Jabu Jabu " , " Von Jabu-Jabu " , " Depuis Jabu-Jabu " , 0x0221 } ,
{ " From Ice Cavern " , " Von der Eishoehle " , " Depuis la Caverne Polaire " , 0x03D4 } ,
{ " From Fairy Fountain " , " Von der Feen-Quelle " , " Depuis la Fontaine des Fees " , 0x0394 } ,
{ " Great Fairy " , " Feen-Quelle " , " Grande Fee " , 0x0371 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 25:Lake Hylia " , " 25:Hylia-See " , " 25:Lac Hylia " , Select_LoadGame , 7 , {
{ " From Hyrule Field " , " Von der Hylianischen Steppe " , " Depuis la Plaine d'Hyrule " , 0x0102 } ,
{ " From Gerudo Valley " , " Vom Gerudotal " , " Depuis la Vallee Gerudo " , 0x0219 } ,
{ " From Water Temple " , " Vom Wassertempel " , " Depuis le Temple de l'Eau " , 0x021D } ,
{ " From Fishing Pond " , " Vom Fischweiher " , " Depuis l'Etang " , 0x0309 } ,
{ " From Laboratory " , " Vom Laboratorium " , " Depuis le Laboratoire du Lac " , 0x03CC } ,
{ " From Zoras Domain " , " Von Zoras Reich " , " Depuis le Domaine Zora " , 0x0560 } ,
{ " Serenade Of Water Warp " , " Serenade des Wassers Teleport " , " Teleporteur de la Serenade de l'Eau " , 0x0604 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 26:Lake Hylia Buildings " , " 26:Hylia-See Gebaeude " , " 26:Batiments du Lac Hylia " , Select_LoadGame , 2 , {
{ " Laboratory " , " Laboratorium " , " Laboratoire du Lac " , 0x0043 } ,
{ " Fishing Pond Minigame " , " Fischweiher " , " Etang " , 0x045F } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 27:Gerudo Valley " , " 27:Gerudotal " , " 27:Vallee Gerudo " , Select_LoadGame , 5 , {
{ " From Hyrule Field " , " Von der Hylianischen Steppe " , " Depuis la Plaine d'Hyrule " , 0x0117 } ,
{ " From Gerudo Fortress " , " Von der Gerudo-Festung " , " Depuis la Forteresse Gerudo " , 0x022D } ,
{ " From Carpenter's Tent " , " Vom Zelt der Zimmerleute " , " Depuis la Tente du Charpentier " , 0x03D0 } ,
{ " Carpenter's Tent/ Running Man Minigame " , " Zelt der Zimmerleute/ Rennlaeufer Minispiel " , " Tente du Charpentier/ Marathonien " , 0x03A0 } ,
{ " Thrown out of Fortress " , " Aus der Festung geworfen " , " Expulsé de la Forteresse " , 0x01A5 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 28:Gerudo Fortress " , " 28:Gerudo-Festung " , " 28:Forteresse Gerudo " , Select_LoadGame , 18 , {
{ " From Gerudo Valley " , " Vom Gerudotal " , " Depuis la Vallee Gerudo " , 0x0129 } ,
{ " From Gerudo Training Grounds " , " Von der Gerudo-Arena " , " Depuis le Gymnase Gerudo " , 0x03A8 } ,
{ " From Haunted Wasteland " , " Von der Gespensterwueste " , " Depuis le Desert Hante " , 0x03AC } ,
{ " Horseback Riding Minigame " , " Bogen zu Pferde Minispiel " , " Archerie Montee " , 0x03B0 } ,
{ " Gerudo Fortress Jail " , " Gerudo-Festung Gefaengnis " , " Prison de la Forteresse Gerudo " , 0x03B4 } ,
{ " From Thieves Hideout (1) " , " Vom Diebesversteck (1) " , " Depuis le Repaire des Voleurs (1) " , 0x0231 } ,
{ " From Thieves Hideout (2) " , " Vom Diebesversteck (2) " , " Depuis le Repaire des Voleurs (2) " , 0x0235 } ,
{ " From Thieves Hideout (3) " , " Vom Diebesversteck (3) " , " Depuis le Repaire des Voleurs (3) " , 0x0239 } ,
{ " From Thieves Hideout (4) " , " Vom Diebesversteck (4) " , " Depuis le Repaire des Voleurs (4) " , 0x02AA } ,
{ " From Thieves Hideout (5) " , " Vom Diebesversteck (5) " , " Depuis le Repaire des Voleurs (5) " , 0x02BA } ,
{ " From Thieves Hideout (6) " , " Vom Diebesversteck (6) " , " Depuis le Repaire des Voleurs (6) " , 0x02BE } ,
{ " From Thieves Hideout (7) " , " Vom Diebesversteck (7) " , " Depuis le Repaire des Voleurs (7) " , 0x02C2 } ,
{ " From Thieves Hideout (8) " , " Vom Diebesversteck (8) " , " Depuis le Repaire des Voleurs (8) " , 0x02C6 } ,
{ " From Thieves Hideout (9) " , " Vom Diebesversteck (9) " , " Depuis le Repaire des Voleurs (9) " , 0x02D2 } ,
{ " From Thieves Hideout (10) " , " Vom Diebesversteck (10) " , " Depuis le Repaire des Voleurs (10) " , 0x02D6 } ,
{ " From Thieves Hideout (11) " , " Vom Diebesversteck (11) " , " Depuis le Repaire des Voleurs (11) " , 0x02DA } ,
{ " From Thieves Hideout (12) " , " Vom Diebesversteck (12) " , " Depuis le Repaire des Voleurs (12) " , 0x02DE } ,
{ " From Thieves Hideout (13) " , " Vom Diebesversteck (13) " , " Depuis le Repaire des Voleurs (13) " , 0x03A4 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 29:Thieves Hideout " , " 29:Diebesversteck " , " 29:Repaire des Voleurs " , Select_LoadGame , 13 , {
{ " From Gerudo Fortress (1) " , " Von der Gerudo-Festung (1) " , " Depuis la Forteresse Gerudo (1) " , 0x0486 } ,
{ " From Gerudo Fortress (2) " , " Von der Gerudo-Festung (2) " , " Depuis la Forteresse Gerudo (2) " , 0x048A } ,
{ " From Gerudo Fortress (3) " , " Von der Gerudo-Festung (3) " , " Depuis la Forteresse Gerudo (3) " , 0x048E } ,
{ " From Gerudo Fortress (4) " , " Von der Gerudo-Festung (4) " , " Depuis la Forteresse Gerudo (4) " , 0x0492 } ,
{ " From Gerudo Fortress (5) " , " Von der Gerudo-Festung (5) " , " Depuis la Forteresse Gerudo (5) " , 0x0496 } ,
{ " From Gerudo Fortress (6) " , " Von der Gerudo-Festung (6) " , " Depuis la Forteresse Gerudo (6) " , 0x049A } ,
{ " From Gerudo Fortress (7) " , " Von der Gerudo-Festung (7) " , " Depuis la Forteresse Gerudo (7) " , 0x049E } ,
{ " From Gerudo Fortress (8) " , " Von der Gerudo-Festung (8) " , " Depuis la Forteresse Gerudo (8) " , 0x04A2 } ,
{ " From Gerudo Fortress (9) " , " Von der Gerudo-Festung (9) " , " Depuis la Forteresse Gerudo (9) " , 0x04A6 } ,
{ " From Gerudo Fortress (10) " , " Von der Gerudo-Festung (10) " , " Depuis la Forteresse Gerudo (10) " , 0x04AA } ,
{ " From Gerudo Fortress (11) " , " Von der Gerudo-Festung (11) " , " Depuis la Forteresse Gerudo (11) " , 0x04AE } ,
{ " From Gerudo Fortress (12) " , " Von der Gerudo-Festung (12) " , " Depuis la Forteresse Gerudo (12) " , 0x04B2 } ,
{ " From Gerudo Fortress (13) " , " Von der Gerudo-Festung (13) " , " Depuis la Forteresse Gerudo (13) " , 0x0570 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 30:Haunted Wasteland " , " 30:Geisterwueste " , " 30:Desert Hante " , Select_LoadGame , 2 , {
{ " From Gerudo Fortress " , " Von der Gerudo-Festung " , " Depuis la Forteresse Gerudo " , 0x0130 } ,
{ " From Desert Colossus " , " Vom Wuestenkoloss " , " Depuis le Colosse du Desert " , 0x0365 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 31:Desert Colossus " , " 31:Wuestenkoloss " , " 31:Colosse du Desert " , Select_LoadGame , 7 , {
{ " From Haunted Wasteland " , " Von der Geisterwueste " , " Depuis le Desert Hante " , 0x0123 } ,
{ " From Spirit Temple " , " Vom Geistertempel " , " Depuis le Temple de l'Esprit " , 0x01E1 } ,
{ " From Spirit Temple (Left Hand) " , " Vom Geistertempel (Linke Hand) " , " Depuis le Temple de l'Esprit (Main Gauche) " , 0x01E5 } ,
{ " From Spirit Temple (Right Hand) " , " Vom Geistertempel (Rechte Hand) " , " Depuis le Temple de l'Esprit (Main Droite) " , 0x01E9 } ,
{ " From Fairy Fountain " , " Von der Feen-Quelle " , " Depuis la Fontaine des Fees " , 0x057C } ,
{ " Great Fairy " , " Feen-Quelle " , " Grande Fee " , 0x0588 } ,
{ " Requiem of Spirit Warp " , " Requiem der Geister Teleport " , " Teleporteur du Requiem de l'Esprit " , 0x01F1 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 32:Deku Tree " , " 32:Deku-Baum " , " 32:Arbre Mojo " , Select_LoadGame , 3 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0001 } ,
{ " From Gohma's Lair " , " Vom Gohma Kampf " , " Depuis le Repaire de Gohma " , 0x0252 } ,
{ " Gohma's Lair " , " Gohma Kampf " , " Repaire de Gohma " , 0x040F } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 33:Dodongos Cavern " , " 33:Dodongos Hoehle " , " 33:Caverne Dodongo " , Select_LoadGame , 3 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0004 } ,
{ " From King Dodongo " , " Von King Dodongo " , " Depuis le Repaire du Roi Dodongo " , 0x00C5 } ,
{ " King Dodongo's Lair " , " King Dodongo Kampf " , " Repaire du Roi Dodongo " , 0x040B } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 34:Jabu Jabu " , " 34:Jabu-Jabu " , " 34:Jabu-Jabu " , Select_LoadGame , 2 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0028 } ,
{ " Barinade's Lair " , " Barinade Kampf " , " Repaire de Barinade " , 0x0301 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 35:Forest Temple " , " 35:Waldtempel " , " 35:Temple de la Foret " , Select_LoadGame , 4 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0169 } ,
{ " Crushing Room " , " Der Fallende Decke Raum " , " Salle de Broyage " , 0x0584 } ,
{ " Before Phantom Ganon " , " Vor Phantom-Ganon " , " Avant Ganon Spectral " , 0x024E } ,
{ " Phantom Ganon's Lair " , " Phantom-Ganon Kampf " , " Repaire de Ganon Spectral " , 0x000C } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 36:Fire Temple " , " 36:Feuertempel " , " 36:Temple du Feu " , Select_LoadGame , 3 , {
{ " Entrance " , " Eingang " , " Entrance " , 0x0165 } ,
{ " Before Volvagia " , " Vor Volvagia " , " Avant Volvagia " , 0x0175 } ,
2023-02-14 08:56:25 -05:00
{ " Volvagia's Lair " , " Volvagia Kampf " , " Repaire de Volcania " , 0x0305 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 37:Water Temple " , " 37:Wassertempel " , " 37:Temple de l'Eau " , Select_LoadGame , 2 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0010 } ,
{ " Morpha's Lair " , " Morpha Kampf " , " Repaire de Morpha " , 0x0417 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 38:Shadow Temple " , " 38:Schattentempel " , " 38:Temple de l'Ombre " , Select_LoadGame , 3 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0037 } ,
{ " Outside Bongo Bongo " , " Vor Bongo Bongo " , " Avant Bongo Bongo " , 0x02B2 } ,
{ " Bongo Bongo's Lair " , " Bongo Bongo Kampf " , " Repaire de Bongo Bongo " , 0x0413 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 39:Spirit Temple " , " 39:Geistertempel " , " 39:Temple de l'Esprit " , Select_LoadGame , 6 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0082 } ,
{ " From Left Hand " , " Von der linken Hand " , " Depuis la Main Gauche " , 0x03F0 } ,
{ " From Right Hand " , " Von der rechten Hand " , " Depuis la Main Droite " , 0x03F4 } ,
{ " Before Twinrova " , " Vor den Killa Ohmaz " , " Avant le Duo Malefique " , 0x02F5 } ,
{ " Nabooru Fight " , " Naboru Kampf " , " Combat contre Nabooru " , 0x008D } ,
{ " Twinrova's Lair " , " Killa Ohmaz Kampf " , " Repaire du Duo Malefique " , 0x05EC } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 40:Ganons Castle " , " 40:Ganons Schloss " , " 40:Chateau de Ganon " , Select_LoadGame , 9 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0467 } ,
{ " From Tower " , " Vom Tower " , " Depuis la Tour " , 0x0534 } ,
2023-01-24 15:39:37 -05:00
{ " Stairs to Lair - From Castle " , " Stufen zum Verlies - Vom Schloss " , " Escaliers vers Repaire - Depuis le Chateau " , 0x041B } ,
{ " Stairs to Lair - From Ganondorf's Lair " , " Stufen zum Verlies - Von Ganondorfs Verlies " , " Escaliers vers Repaire - Depuis le Repaire de Ganondorf " , 0x0427 } ,
{ " Ganondorf's Lair " , " Ganondorfs Verlies " , " Repaire de Ganondorf " , 0x041F } ,
2023-01-23 15:36:28 -05:00
{ " Ganondorf Defeated " , " Ganondorf Besiegt " , " Ganondorf Vaincu " , 0x01C9 } ,
{ " Ganondorf Defeated (2) " , " Ganondorf Besiegt (2) " , " Ganondorf Vaincu (2) " , 0x04BA } ,
{ " Ganon's Lair " , " Ganon Kampf " , " Repaire de Ganon " , 0x0517 } ,
{ " Ganon Death Cutscene " , " Ganon Todes Cutscene " , " Cinematique de la Mort de Ganon " , 0x043F } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 41:Bottom of the Well " , " 41:Grund des Brunnens " , " 41:Puits " , Select_LoadGame , 1 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0098 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 42:Ice Cavern " , " 42:Eishoehle " , " 42:Caverne Polaire " , Select_LoadGame , 1 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0088 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 43:Gerudo Training Grounds " , " 43:Gerudo-Arena " , " 43:Gymnase Gerudo " , Select_LoadGame , 1 , {
{ " Entrance " , " Eingang " , " Entree " , 0x0008 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 44:Warps " , " 44:Teleportpunkte " , " 44:Teleporteurs " , Select_LoadGame , 6 , {
{ " Prelude of Light Warp " , " Kantate des Lichts Teleport " , " Teleporteur du Prelude de la Lumiere " , 0x05F4 } ,
{ " Minuet of Forest Warp " , " Menuett des Waldes Teleport " , " Teleporteur du Menuet des Bois " , 0x0600 } ,
{ " Bolero of Fire Warp " , " Bolero des Feuers Teleport " , " Teleporteur du Bolero du Feu " , 0x04F6 } ,
{ " Serenade Of Water Warp " , " Serenade des Wassers Teleport " , " Teleporteur de la Serenade de l'Eau " , 0x0604 } ,
{ " Nocturne of Shadow Warp " , " Nocturne des Schattens Teleport " , " Teleporteur du Nocturne de l'Ombre " , 0x0568 } ,
{ " Requiem of Spirit Warp " , " Requiem der Geister Teleport " , " Teleporteur du Requiem de l'Esprit " , 0x01F1 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 45:Shops " , " 45:Laeden " , " 45:Boutiques " , Select_LoadGame , 9 , {
{ " Kokiri Shop " , " Kokiri-Laden " , " Boutique Kokiri " , 0x00C1 } ,
{ " Potion Shop (Market) " , " Magie-Laden (Marktplatz) " , " Apothicaire (Place du Marche) " , 0x0388 } ,
{ " Bazaar Shop (Market) " , " Basar (Marktplatz) " , " Bazar (Place du Marche) " , 0x052C } ,
{ " Happy Mask Shop " , " Maskenhaendler " , " Foire aux Masques " , 0x0530 } ,
{ " Bombchu Shop " , " Krabbelminen-Laden " , " Boutique de Missiles " , 0x0528 } ,
{ " Bazaar Shop (Kakariko) " , " Basar (Kakariko) " , " Bazar (Village Cocorico) " , 0x00B7 } ,
{ " Potion Shop (Kakariko) " , " Magie-Laden (Kakariko) " , " Apothicaire (Village Cocorico) " , 0x0384 } ,
{ " Goron City Shop " , " Goronen-Laden " , " Boutique Goron " , 0x037C } ,
{ " Zora Shop " , " Zora-Laden " , " Boutique Zora " , 0x0380 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 46:Great Fairies " , " 46:Feen-Quellen " , " 46:Grandes Fees " , Select_LoadGame , 6 , {
{ " Hyrule Castle (Child) " , " Schloss Hyrule (Kind) " , " Chateau d'Hyrule (Enfant) " , 0x0578 } ,
{ " Hyrule Castle (Adult) " , " Schloss Hyrule (Erwachsener) " , " Chateau d'Hyrule (Adult) " , 0x04C2 } ,
{ " Death Mountain Trail " , " Gebirgspfad " , " Mont du Peril " , 0x0315 } ,
{ " Death Mountain Crater " , " Todeskrater " , " Cratere du Peril " , 0x04BE } ,
{ " Zoras Fountain " , " Zoras Quelle " , " Fontaine Zora " , 0x0371 } ,
{ " Desert Colossus " , " Wuestenkoloss " , " Colosse du Desert " , 0x0588 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 47:Chest Grottos " , " 47:Truhen Grotten " , " 47:Grottes a Coffres " , Select_Grotto_LoadGame , 11 , {
{ " Kokiri Forest (Song of Storms) " , " Kokiri-Wald (Hymne des Sturms) " , " Foret Kokiri (Chant des Tempetes) " , 0x00 } ,
{ " Lost Woods " , " Verlorene Waelder " , " Bois Perdus " , 0x01 } ,
{ " Sacred Forest Meadow " , " Waldlichtung " , " Bosquet Sacre " , 0x02 } ,
{ " Hyrule Field (Near Market) " , " Hylianische Steppe (Nahe Marktplatz) " , " Plaine d'Hyrule (Pres de la Place du Marche) " , 0x03 } ,
{ " Hyrule Field (Open Near Lake) " , " Hylianische Steppe (Offen, beim Hylia-See) " , " Plaine d'Hyrule (Deja ouverte pres du Lac) " , 0x04 } ,
{ " Hyrule Field (SE Boulder) " , " Hylianische Steppe (Felsen, S-O) " , " Plaine d'Hyrule (Rocher a Gantelets) " , 0x05 } ,
{ " Kakariko (Open) " , " Kakariko (Offen) " , " Village Cocorico (Deja Ouverte) " , 0x06 } ,
{ " Kakariko (Redead) " , " Kakariko (Zombies) " , " Village Cocorico (Effrois) " , 0x07 } ,
{ " Death Mountain Trail (Song of Storms) " , " Gebirgspfad (Hymne des Sturms) " , " Mont du Peril (Chant des Tempetes) " , 0x08 } ,
{ " Death Mountain Crater " , " Todeskrater " , " Cratere du Peril " , 0x09 } ,
{ " Zora River (Open) " , " Zora-Fluss (Offen) " , " Riviere Zora (Deja Ouverte) " , 0x0A } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 48:Scrub Grottos " , " 48:Laubkerl Grotten " , " 48:Grottes des Pestes Marchandes " , Select_Grotto_LoadGame , 10 , {
{ " Hyrule Field (Near Lake) " , " Hylianische Steppe (beim Hylia-See) " , " Plaine d'Hyrule (Pres du Lac) " , 0x0B } ,
{ " Death Mountain Crater " , " Todeskrater " , " Cratere du Peril " , 0x0C } ,
{ " Goron City " , " Goronia " , " Village Goron " , 0x0D } ,
{ " Lon Lon Ranch " , " Lon Lon-Farm " , " Ranch Lon Lon " , 0x0E } ,
{ " Lake Hylia " , " Hylia-See " , " Lac Hylia " , 0x0F } ,
{ " Lost Woods " , " Verlorene Waelder " , " Bois Perdus " , 0x10 } ,
{ " Zora River (Song of Storms) " , " Zora-Fluss (Hymne des Sturms) " , " Rivere Zora (Chant des Tempetes) " , 0x11 } ,
{ " Sacred Forest Meadow (Song of Storms) " , " Waldlichtung (Hymne des Sturms) " , " Bosquet Scare (Chant des Tempetes) " , 0x12 } ,
{ " Gerudo Valley (Song of Storms) " , " Gerudotal (Hymne des Sturms) " , " Vallee Gerudo (Chant des Tempetes) " , 0x13 } ,
{ " Desert Colossus " , " Wuestenkoloss " , " Colosse du Desert " , 0x14 } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 49:Other Grottos " , " 49:Andere Grotten " , " 49:Autres Grottes " , Select_Grotto_LoadGame , 7 , {
{ " Scrub Theatre " , " Waldbuehne " , " Theatre Mojo " , 0x15 } ,
{ " Spider Grotto (Hyrule Field) " , " Spinnen-Grotte (Hylianische Steppe) " , " Spider Araignee (Plaine d'Hyrule) " , 0x16 } ,
{ " Spider Grotto (Hyrule Castle) " , " Spinnen-Grotte (Schloss Hyrule) " , " Grotte Araignee (Chateau d'Hyrule) " , 0x17 } ,
{ " Cow Grotto (Hyrule Field) " , " Kuh-Grotte (Hylianische Steppe) " , " Grotte a Vache (Plaine d'Hyrule) " , 0x18 } ,
{ " Cow Grotto (Death Mountain Trail) " , " Kuh-Grotte (Gebirgspfad) " , " Grotte a Vache (Chemin du Peril) " , 0x19 } ,
{ " Flooded Grotto (Gerudo Valley) " , " Geflutete Grotte (Gerudotal) " , " Grotte Inondée (Vallee Gerudo) " , 0x1A } ,
{ " Flooded Grotto (Hyrule Field) " , " Geflutete Grotte (Hylianische Steppe) " , " Grotte Inondée (Plaine d'Hyrule) " , 0x1B } ,
2022-10-06 08:39:12 -04:00
} } ,
2023-01-23 15:36:28 -05:00
{ " 50:Debug (Use with caution) " , " 50:Debug (Mit Vorsicht benutzen) " , " 50:Debug (A utiliser avec prudence) " , Select_LoadGame , 10 , {
{ " Test Room " , " Test Raum " , " Salle de Test " , 0x0520 } ,
{ " SRD Map " , " SRD Karte " , " Carte SRD " , 0x0018 } ,
{ " Test Map " , " Test Karte " , " Carte de Test " , 0x0094 } ,
{ " Treasure Chest Warp " , " Schatzkisten Teleport " , " Salle de Test - Objets " , 0x0024 } ,
{ " Stalfos Miniboss Room " , " Stalfos-Ritter Miniboss Raum " , " Salle du Minoboss Stalfos " , 0x001C } ,
{ " Stalfos Boss Room " , " Stalfos-Ritter Boss Raum " , " Salle de Boss Stalfos " , 0x001C } ,
{ " Dark Link Room " , " Schwarzer Link Raum " , " Salle de Dark Link " , 0x0047 } ,
{ " Shooting Gallery Duplicate " , " Schiessbude (Duplikat) " , " Jeu d'Adresse (Duplicata) " , 0x02EA } ,
{ " Depth Test " , " Tiefen Test " , " Test de Profondeur " , 0x00B6 } ,
{ " Hyrule Garden Game (Broken) " , " Burghof - Wachen-Minispiel (Kaputt) " , " Cour du chateau (Non Fonctionnel) " , 0x0076 } ,
2022-10-06 08:39:12 -04:00
} } ,
} ;
static BetterSceneSelectGrottoData sBetterGrottos [ ] = {
2022-11-14 06:13:21 -05:00
{ 0x003F , 0x00EE , 0 , 0x2C , 0x55 , { - 504.0 , 380.0 , - 1224.0 } } , // Kokiri Forest -> KF Storms Grotto
{ 0x003F , 0x04D6 , 2 , 0x14 , 0x5B , { 922.0 , 0.0 , - 933.0 } } , // Lost Woods -> LW Near Shortcuts Grotto
{ 0x05B4 , 0x00FC , 0 , 0xED , 0x56 , { - 201.0 , 0.0 , 1906.0 } } , // SFM Entryway -> SFM Wolfos Grotto
{ 0x003F , 0x00CD , 0 , 0x00 , 0x51 , { - 1428.0 , 0.0 , 790.0 } } , // Hyrule Field -> HF Near Market Grotto
{ 0x003F , 0x0189 , 0 , 0x03 , 0x51 , { - 4026.0 , - 700.0 , 13858.0 } } , // Hyrule Field -> HF Open Grotto
{ 0x003F , 0x0189 , 0 , 0x22 , 0x51 , { - 259.0 , - 500.0 , 12356.0 } } , // Hyrule Field -> HF Southeast Grotto
{ 0x003F , 0x034D , 0 , 0x28 , 0x52 , { 861.0 , 80.0 , - 253.0 } } , // Kak Backyard -> Kak Open Grotto
{ 0x05A0 , 0x034D , 0 , 0xE7 , 0x52 , { - 400.0 , 0.0 , 408.0 } } , // Kakariko Village -> Kak Redead Grotto
{ 0x003F , 0x01B9 , 0 , 0x57 , 0x60 , { - 389.0 , 1386.0 , - 1202.0 } } , // Death Mountain -> DMT Storms Grotto
{ 0x003F , 0x0147 , 1 , 0x7A , 0x61 , { 50.0 , 1233.0 , 1776.0 } } , // DMC Upper Nearby -> DMC Upper Grotto
{ 0x003F , 0x019D , 0 , 0x29 , 0x54 , { 369.0 , 570.0 , 128.0 } } , // Zora River -> ZR Open Grotto
{ 0x059C , 0x0189 , 0 , 0xE6 , 0x51 , { - 5002.0 , - 700.0 , 13823.0 } } , // Hyrule Field -> HF Inside Fence Grotto
{ 0x05A4 , 0x0246 , 1 , 0xF9 , 0x61 , { - 1703.0 , 722.0 , - 481.0 } } , // DMC Lower Nearby -> DMC Hammer Grotto
{ 0x05A4 , 0x014D , 3 , 0xFB , 0x62 , { 1091.0 , 580.0 , - 1192.0 } } , // GC Grotto Platform -> GC Grotto
{ 0x05A4 , 0x05D4 , 0 , 0xFC , 0x63 , { 1798.0 , 0.0 , 1498.0 } } , // Lon Lon Ranch -> LLR Grotto
{ 0x05A4 , 0x021D , 0 , 0xEF , 0x57 , { - 3044.0 , - 1033.0 , 6070.0 } } , // Lake Hylia -> LH Grotto
{ 0x05B0 , 0x01A9 , 8 , 0xF5 , 0x5B , { 677.0 , 0.0 , - 2515.0 } } , // LW Beyond Mido -> LW Scrubs Grotto
{ 0x05BC , 0x00EA , 0 , 0xEB , 0x54 , { - 1632.0 , 100.0 , - 123.0 } } , // Zora River -> ZR Storms Grotto
{ 0x05BC , 0x0215 , 0 , 0xEE , 0x56 , { 317.0 , 480.0 , - 2303.0 } } , // Sacred Forest Meadow -> SFM Storms Grotto
{ 0x05BC , 0x03D0 , 0 , 0xF0 , 0x5A , { - 1321.0 , 15.0 , - 968.0 } } , // GV Fortress Side -> GV Storms Grotto
{ 0x05BC , 0x01F1 , 0 , 0xFD , 0x5C , { 71.0 , - 32.0 , - 1303.0 } } , // Desert Colossus -> Colossus Grotto
{ 0x05C4 , 0x04D6 , 6 , 0xF3 , 0x5B , { 75.0 , - 20.0 , - 1596.0 } } , // LW Beyond Mido -> Deku Theater
{ 0x0598 , 0x017D , 0 , 0xE5 , 0x51 , { 2059.0 , 20.0 , - 174.0 } } , // Hyrule Field -> HF Near Kak Grotto
{ 0x05B8 , 0x023D , 0 , 0xF6 , 0x5F , { 986.0 , 1571.0 , 837.0 } } , // Hyrule Castle Grounds -> HC Storms Grotto
{ 0x05A8 , 0x018D , 0 , 0xE4 , 0x51 , { - 7873.0 , - 300.0 , 6916.0 } } , // Hyrule Field -> HF Cow Grotto
{ 0x05FC , 0x01B9 , 0 , 0xF8 , 0x60 , { - 678.0 , 1946.0 , - 284.0 } } , // Death Mountain Summit -> DMT Cow Grotto
{ 0x05AC , 0x0117 , 0 , 0xF2 , 0x5A , { 271.0 , - 555.0 , 1465.0 } } , // GV Grotto Ledge -> GV Octorok Grotto
{ 0x05C0 , 0x00CD , 0 , 0xE1 , 0x51 , { - 4945.0 , - 300.0 , 2841.0 } } , // Hyrule Field -> HF Tektite Grotto
2022-10-06 08:39:12 -04:00
} ;
2022-03-21 21:51:23 -04:00
void Select_UpdateMenu ( SelectContext * this ) {
Input * input = & this - > state . input [ 0 ] ;
s32 pad ;
SceneSelectEntry * selectedScene ;
if ( this - > verticalInputAccumulator = = 0 ) {
if ( CHECK_BTN_ALL ( input - > press . button , BTN_A ) | | CHECK_BTN_ALL ( input - > press . button , BTN_START ) ) {
selectedScene = & this - > scenes [ this - > currentScene ] ;
if ( selectedScene - > loadFunc ! = NULL ) {
selectedScene - > loadFunc ( this , selectedScene - > entranceIndex ) ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_B ) ) {
if ( LINK_AGE_IN_YEARS = = YEARS_ADULT ) {
gSaveContext . linkAge = 1 ;
} else {
gSaveContext . linkAge = 0 ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_Z ) ) {
if ( gSaveContext . cutsceneIndex = = 0x8000 ) {
gSaveContext . cutsceneIndex = 0 ;
} else if ( gSaveContext . cutsceneIndex = = 0 ) {
gSaveContext . cutsceneIndex = 0xFFF0 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF0 ) {
gSaveContext . cutsceneIndex = 0xFFF1 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF1 ) {
gSaveContext . cutsceneIndex = 0xFFF2 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF2 ) {
gSaveContext . cutsceneIndex = 0xFFF3 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF3 ) {
gSaveContext . cutsceneIndex = 0xFFF4 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF4 ) {
gSaveContext . cutsceneIndex = 0xFFF5 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF5 ) {
gSaveContext . cutsceneIndex = 0xFFF6 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF6 ) {
gSaveContext . cutsceneIndex = 0xFFF7 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF7 ) {
gSaveContext . cutsceneIndex = 0xFFF8 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF8 ) {
gSaveContext . cutsceneIndex = 0xFFF9 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF9 ) {
gSaveContext . cutsceneIndex = 0xFFFA ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFFA ) {
gSaveContext . cutsceneIndex = 0x8000 ;
}
} else if ( CHECK_BTN_ALL ( input - > press . button , BTN_R ) ) {
if ( gSaveContext . cutsceneIndex = = 0x8000 ) {
gSaveContext . cutsceneIndex = 0xFFFA ;
} else if ( gSaveContext . cutsceneIndex = = 0 ) {
gSaveContext . cutsceneIndex = 0x8000 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF0 ) {
gSaveContext . cutsceneIndex = 0 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF1 ) {
gSaveContext . cutsceneIndex = 0xFFF0 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF2 ) {
gSaveContext . cutsceneIndex = 0xFFF1 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF3 ) {
gSaveContext . cutsceneIndex = 0xFFF2 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF4 ) {
gSaveContext . cutsceneIndex = 0xFFF3 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF5 ) {
gSaveContext . cutsceneIndex = 0xFFF4 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF6 ) {
gSaveContext . cutsceneIndex = 0xFFF5 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF7 ) {
gSaveContext . cutsceneIndex = 0xFFF6 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF8 ) {
gSaveContext . cutsceneIndex = 0xFFF7 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFF9 ) {
gSaveContext . cutsceneIndex = 0xFFF8 ;
} else if ( gSaveContext . cutsceneIndex = = 0xFFFA ) {
gSaveContext . cutsceneIndex = 0xFFF9 ;
}
}
gSaveContext . nightFlag = 0 ;
if ( gSaveContext . cutsceneIndex = = 0 ) {
gSaveContext . nightFlag = 1 ;
}
// user can change "opt", but it doesn't do anything
if ( CHECK_BTN_ALL ( input - > press . button , BTN_CUP ) ) {
this - > opt - - ;
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_CDOWN ) ) {
this - > opt + + ;
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_DUP ) ) {
if ( this - > lockUp = = true ) {
this - > timerUp = 0 ;
}
if ( this - > timerUp = = 0 ) {
this - > timerUp = 20 ;
this - > lockUp = true ;
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = R_UPDATE_RATE ;
}
}
if ( CHECK_BTN_ALL ( input - > cur . button , BTN_DUP ) & & this - > timerUp = = 0 ) {
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = R_UPDATE_RATE * 3 ;
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_DDOWN ) ) {
if ( this - > lockDown = = true ) {
this - > timerDown = 0 ;
}
if ( this - > timerDown = = 0 ) {
this - > timerDown = 20 ;
this - > lockDown = true ;
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = - R_UPDATE_RATE ;
}
}
if ( CHECK_BTN_ALL ( input - > cur . button , BTN_DDOWN ) & & ( this - > timerDown = = 0 ) ) {
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = - R_UPDATE_RATE * 3 ;
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_DLEFT ) | | CHECK_BTN_ALL ( input - > cur . button , BTN_DLEFT ) ) {
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = R_UPDATE_RATE ;
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_DRIGHT ) | | CHECK_BTN_ALL ( input - > cur . button , BTN_DRIGHT ) ) {
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = - R_UPDATE_RATE ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_L ) ) {
this - > pageDownIndex + + ;
this - > pageDownIndex =
( this - > pageDownIndex + ARRAY_COUNT ( this - > pageDownStops ) ) % ARRAY_COUNT ( this - > pageDownStops ) ;
this - > currentScene = this - > topDisplayedScene = this - > pageDownStops [ this - > pageDownIndex ] ;
}
this - > verticalInputAccumulator + = this - > verticalInput ;
if ( this - > verticalInputAccumulator < - 7 ) {
this - > verticalInput = 0 ;
this - > verticalInputAccumulator = 0 ;
this - > currentScene + + ;
this - > currentScene = ( this - > currentScene + this - > count ) % this - > count ;
if ( this - > currentScene = = ( ( this - > topDisplayedScene + this - > count + 19 ) % this - > count ) ) {
this - > topDisplayedScene + + ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
}
}
if ( this - > verticalInputAccumulator > 7 ) {
this - > verticalInput = 0 ;
this - > verticalInputAccumulator = 0 ;
if ( this - > currentScene = = this - > topDisplayedScene ) {
this - > topDisplayedScene - = 2 ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
}
this - > currentScene - - ;
this - > currentScene = ( this - > currentScene + this - > count ) % this - > count ;
if ( this - > currentScene = = ( ( this - > topDisplayedScene + this - > count ) % this - > count ) ) {
this - > topDisplayedScene - - ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
}
}
this - > currentScene = ( this - > currentScene + this - > count ) % this - > count ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
dREG ( 80 ) = this - > currentScene ;
dREG ( 81 ) = this - > topDisplayedScene ;
dREG ( 82 ) = this - > pageDownIndex ;
if ( this - > timerUp ! = 0 ) {
this - > timerUp - - ;
}
if ( this - > timerUp = = 0 ) {
this - > lockUp = false ;
}
if ( this - > timerDown ! = 0 ) {
this - > timerDown - - ;
}
if ( this - > timerDown = = 0 ) {
this - > lockDown = false ;
}
}
2022-10-06 08:39:12 -04:00
void Better_Select_UpdateMenu ( SelectContext * this ) {
Input * input = & this - > state . input [ 0 ] ;
s32 pad ;
BetterSceneSelectEntry * selectedScene ;
if ( this - > verticalInputAccumulator = = 0 ) {
if ( CHECK_BTN_ALL ( input - > press . button , BTN_A ) | | CHECK_BTN_ALL ( input - > press . button , BTN_START ) ) {
selectedScene = & this - > betterScenes [ this - > currentScene ] ;
if ( selectedScene - > loadFunc ! = NULL ) {
selectedScene - > loadFunc ( this , selectedScene - > entrancePairs [ this - > pageDownIndex ] . entranceIndex ) ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_B ) ) {
if ( LINK_AGE_IN_YEARS = = YEARS_ADULT ) {
gSaveContext . linkAge = 1 ;
Audio_PlaySoundGeneral ( NA_SE_VO_LI_SWORD_N_KID , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
} else {
gSaveContext . linkAge = 0 ;
Audio_PlaySoundGeneral ( NA_SE_VO_LI_SWORD_N , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_Z ) | | CHECK_BTN_ALL ( input - > press . button , BTN_R ) ) {
if ( gSaveContext . dayTime > 0xC000 | | gSaveContext . dayTime < 0x4555 ) {
gSaveContext . nightFlag = 0 ;
gSaveContext . dayTime = 0x8000 ;
Audio_PlaySoundGeneral ( NA_SE_EV_CHICKEN_CRY_M , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
} else {
gSaveContext . nightFlag = 1 ;
gSaveContext . dayTime = 0x0000 ;
Audio_PlaySoundGeneral ( NA_SE_EV_DOG_CRY_EVENING , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_CLEFT ) | | CHECK_BTN_ALL ( input - > press . button , BTN_DLEFT ) ) {
this - > pageDownIndex - - ;
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_SWING , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
if ( this - > pageDownIndex < 0 ) {
this - > pageDownIndex = this - > betterScenes [ this - > currentScene ] . count - 1 ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_CRIGHT ) | | CHECK_BTN_ALL ( input - > press . button , BTN_DRIGHT ) ) {
this - > pageDownIndex + + ;
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_SWING , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
if ( this - > pageDownIndex > this - > betterScenes [ this - > currentScene ] . count - 1 ) {
this - > pageDownIndex = 0 ;
}
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_DUP ) | | CHECK_BTN_ALL ( input - > press . button , BTN_CUP ) ) {
if ( this - > lockUp = = true ) {
this - > timerUp = 0 ;
}
if ( this - > timerUp = = 0 ) {
this - > timerUp = 20 ;
this - > lockUp = true ;
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = R_UPDATE_RATE ;
}
}
if ( ( CHECK_BTN_ALL ( input - > cur . button , BTN_DUP ) | | CHECK_BTN_ALL ( input - > cur . button , BTN_CUP ) ) & & this - > timerUp = = 0 ) {
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = R_UPDATE_RATE * 3 ;
}
if ( CHECK_BTN_ALL ( input - > press . button , BTN_DDOWN ) | | CHECK_BTN_ALL ( input - > press . button , BTN_CDOWN ) ) {
if ( this - > lockDown = = true ) {
this - > timerDown = 0 ;
}
if ( this - > timerDown = = 0 ) {
this - > timerDown = 20 ;
this - > lockDown = true ;
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = - R_UPDATE_RATE ;
}
}
if ( ( CHECK_BTN_ALL ( input - > cur . button , BTN_DDOWN ) | | CHECK_BTN_ALL ( input - > cur . button , BTN_CDOWN ) ) & & ( this - > timerDown = = 0 ) ) {
Audio_PlaySoundGeneral ( NA_SE_IT_SWORD_IMPACT , & D_801333D4 , 4 , & D_801333E0 , & D_801333E0 , & D_801333E8 ) ;
this - > verticalInput = - R_UPDATE_RATE * 3 ;
}
}
this - > verticalInputAccumulator + = this - > verticalInput ;
if ( this - > verticalInputAccumulator < - 7 ) {
this - > verticalInput = 0 ;
this - > verticalInputAccumulator = 0 ;
this - > currentScene + + ;
this - > currentScene = ( this - > currentScene + this - > count ) % this - > count ;
this - > pageDownIndex = 0 ;
if ( this - > currentScene = = ( ( this - > topDisplayedScene + this - > count + 19 ) % this - > count ) ) {
this - > topDisplayedScene + + ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
}
}
if ( this - > verticalInputAccumulator > 7 ) {
this - > verticalInput = 0 ;
this - > verticalInputAccumulator = 0 ;
if ( this - > currentScene = = this - > topDisplayedScene ) {
this - > topDisplayedScene - = 2 ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
}
this - > currentScene - - ;
this - > currentScene = ( this - > currentScene + this - > count ) % this - > count ;
this - > pageDownIndex = 0 ;
if ( this - > currentScene = = ( ( this - > topDisplayedScene + this - > count ) % this - > count ) ) {
this - > topDisplayedScene - - ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
}
}
this - > currentScene = ( this - > currentScene + this - > count ) % this - > count ;
this - > topDisplayedScene = ( this - > topDisplayedScene + this - > count ) % this - > count ;
dREG ( 80 ) = this - > currentScene ;
dREG ( 81 ) = this - > topDisplayedScene ;
dREG ( 82 ) = this - > pageDownIndex ;
if ( this - > timerUp ! = 0 ) {
this - > timerUp - - ;
}
if ( this - > timerUp = = 0 ) {
this - > lockUp = false ;
}
if ( this - > timerDown ! = 0 ) {
this - > timerDown - - ;
}
if ( this - > timerDown = = 0 ) {
this - > lockDown = false ;
}
}
2022-03-21 21:51:23 -04:00
void Select_PrintMenu ( SelectContext * this , GfxPrint * printer ) {
s32 scene ;
s32 i ;
char * name ;
GfxPrint_SetColor ( printer , 255 , 155 , 150 , 255 ) ;
GfxPrint_SetPos ( printer , 12 , 2 ) ;
GfxPrint_Printf ( printer , " ZELDA MAP SELECT " ) ;
GfxPrint_SetColor ( printer , 255 , 255 , 255 , 255 ) ;
for ( i = 0 ; i < 20 ; i + + ) {
GfxPrint_SetPos ( printer , 9 , i + 4 ) ;
scene = ( this - > topDisplayedScene + i + this - > count ) % this - > count ;
if ( scene = = this - > currentScene ) {
GfxPrint_SetColor ( printer , 255 , 20 , 20 , 255 ) ;
} else {
GfxPrint_SetColor ( printer , 200 , 200 , 55 , 255 ) ;
}
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
name = this - > scenes [ scene ] . englishName ;
break ;
case LANGUAGE_GER :
name = this - > scenes [ scene ] . germanName ;
break ;
case LANGUAGE_FRA :
name = this - > scenes [ scene ] . frenchName ;
break ;
}
} else {
name = this - > scenes [ scene ] . japaneseName ;
}
//name = this->scenes[scene].name;
2022-03-21 21:51:23 -04:00
if ( name = = NULL ) {
name = " **Null** " ;
}
GfxPrint_Printf ( printer , " %s " , name ) ;
} ;
GfxPrint_SetColor ( printer , 155 , 55 , 150 , 255 ) ;
2023-01-23 15:36:28 -05:00
// Small position hack of the OPT=X text since german Link's Age overlap if translated
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) & & gSaveContext . language = = LANGUAGE_GER ) {
GfxPrint_SetPos ( printer , 26 , 26 ) ;
} else {
GfxPrint_SetPos ( printer , 20 , 26 ) ;
}
2022-03-21 21:51:23 -04:00
GfxPrint_Printf ( printer , " OPT=%d " , this - > opt ) ;
}
2022-10-06 08:39:12 -04:00
void Better_Select_PrintMenu ( SelectContext * this , GfxPrint * printer ) {
s32 scene ;
s32 i ;
char * name ;
GfxPrint_SetColor ( printer , 255 , 255 , 255 , 255 ) ;
GfxPrint_SetPos ( printer , 12 , 2 ) ;
GfxPrint_Printf ( printer , " Scene Selection " ) ;
GfxPrint_SetColor ( printer , 255 , 255 , 255 , 255 ) ;
for ( i = 0 ; i < 20 ; i + + ) {
GfxPrint_SetPos ( printer , 3 , i + 4 ) ;
scene = ( this - > topDisplayedScene + i + this - > count ) % this - > count ;
if ( scene = = this - > currentScene ) {
GfxPrint_SetColor ( printer , 255 , 100 , 100 , 255 ) ;
} else {
GfxPrint_SetColor ( printer , 175 , 175 , 175 , 255 ) ;
}
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
name = this - > betterScenes [ scene ] . englishName ;
break ;
case LANGUAGE_GER :
name = this - > betterScenes [ scene ] . germanName ;
break ;
case LANGUAGE_FRA :
name = this - > betterScenes [ scene ] . frenchName ;
break ;
}
} else {
name = this - > betterScenes [ scene ] . englishName ;
}
2022-10-06 08:39:12 -04:00
if ( name = = NULL ) {
name = " **Null** " ;
}
GfxPrint_Printf ( printer , " %s " , name ) ;
} ;
GfxPrint_SetColor ( printer , 205 , 100 , 200 , 255 ) ;
GfxPrint_SetPos ( printer , 3 , 26 ) ;
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
GfxPrint_Printf ( printer , " %s " , this - > betterScenes [ this - > currentScene ] . entrancePairs [ this - > pageDownIndex ] . englishName ) ;
break ;
case LANGUAGE_GER :
GfxPrint_Printf ( printer , " %s " , this - > betterScenes [ this - > currentScene ] . entrancePairs [ this - > pageDownIndex ] . germanName ) ;
break ;
case LANGUAGE_FRA :
GfxPrint_Printf ( printer , " %s " , this - > betterScenes [ this - > currentScene ] . entrancePairs [ this - > pageDownIndex ] . frenchName ) ;
break ;
}
} else {
GfxPrint_Printf ( printer , " %s " , this - > betterScenes [ this - > currentScene ] . entrancePairs [ this - > pageDownIndex ] . englishName ) ;
}
2022-10-06 08:39:12 -04:00
}
2023-01-23 15:36:28 -05:00
static SceneSelectLoadingMessages sLoadingMessages [ ] = {
{ GFXP_HIRAGANA " シバラクオマチクダサイ " , " Please wait a minute " , " Bitte warte eine Minute " , " Veuillez patienter une minute " } ,
{ GFXP_HIRAGANA " チョット マッテネ " , " Hold on a sec " , " Warte mal 'ne Sekunde " " Une seconde, ça arrive " } ,
{ GFXP_KATAKANA " ウェイト ア モーメント " , " Wait a moment " , " Warte einen Moment " , " Patientez un instant " } ,
{ GFXP_KATAKANA " ロード " GFXP_HIRAGANA " チュウ " , " Loading " , " Ladevorgang " , " Chargement " } ,
{ GFXP_HIRAGANA " ナウ ワーキング " , " Now working " , " Verarbeite " , " Au travail " } ,
{ GFXP_HIRAGANA " イマ ツクッテマス " , " Now creating " , " Erstelle... " , " En cours de creation... " } ,
{ GFXP_HIRAGANA " コショウジャナイヨ " , " It's not broken " , " Es ist nicht kaputt " , " C'est pas casse! " } ,
{ GFXP_KATAKANA " コーヒー ブレイク " , " Coffee Break " , " Kaffee-Pause " , " Pause Cafe " } ,
{ GFXP_KATAKANA " Bメンヲセットシテクダサイ " , " Please set B side " , " Please set B side " , " Please set B side " } ,
{ GFXP_HIRAGANA " ジット " GFXP_KATAKANA " ガマン " GFXP_HIRAGANA " ノ " GFXP_KATAKANA " コ " GFXP_HIRAGANA " デアッタ " , " Be patient, now " , " Übe dich in Geduld " , " Veuillez patientez " } ,
{ GFXP_HIRAGANA " イマシバラクオマチクダサイ " , " Please wait just a minute " , " Bitte warte noch eine Minute " , " Patientez un peu " } ,
{ GFXP_HIRAGANA " アワテナイアワテナイ。ヒトヤスミヒトヤスミ。 " , " Don't panic, don't panic. Take a break, take a break. " , " Keine Panik! Nimm dir eine Auszeit " , " Pas de panique. Prenez une pause. " } ,
{ " Enough! My ship sails in the morning! " , " Enough! My ship sails in the morning! " , " Enough! My ship sails in the morning! " , " Enough! My ship sails in the morning! " } ,
2022-03-21 21:51:23 -04:00
} ;
void Select_PrintLoadingMessage ( SelectContext * this , GfxPrint * printer ) {
s32 randomMsg ;
GfxPrint_SetPos ( printer , 10 , 15 ) ;
GfxPrint_SetColor ( printer , 255 , 255 , 255 , 255 ) ;
randomMsg = Rand_ZeroOne ( ) * ARRAY_COUNT ( sLoadingMessages ) ;
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
GfxPrint_Printf ( printer , " %s " , sLoadingMessages [ randomMsg ] . englishMessage ) ;
break ;
case LANGUAGE_GER :
GfxPrint_Printf ( printer , " %s " , sLoadingMessages [ randomMsg ] . germanMessage ) ;
break ;
case LANGUAGE_FRA :
GfxPrint_Printf ( printer , " %s " , sLoadingMessages [ randomMsg ] . frenchMessage ) ;
break ;
}
} else {
GfxPrint_Printf ( printer , " %s " , sLoadingMessages [ randomMsg ] . japaneseMessage ) ;
}
2022-03-21 21:51:23 -04:00
}
2023-01-23 15:36:28 -05:00
static SceneSelectAgeLabels sAgeLabels [ ] = {
{ GFXP_HIRAGANA " 17(ワカモノ) " , " 17(Adult) " , " 17(Erwachsener) " , " 17(Adulte) " } , // "17(young)
{ GFXP_HIRAGANA " 5(ワカスギ) " , " 5(Child) " , " 5(Kind) " , " 5(Enfant) " } , // "5(very young)
2022-03-21 21:51:23 -04:00
} ;
2023-01-23 15:36:28 -05:00
static BetterSceneSelectAgeLabels sBetterAgeLabels [ ] = {
{ " Adult " , " Erwachsener " , " Adulte " } ,
{ " Child " , " Kind " , " Enfant " } ,
2022-10-06 08:39:12 -04:00
} ;
2022-03-21 21:51:23 -04:00
void Select_PrintAgeSetting ( SelectContext * this , GfxPrint * printer , s32 age ) {
GfxPrint_SetPos ( printer , 4 , 26 ) ;
GfxPrint_SetColor ( printer , 255 , 255 , 55 , 255 ) ;
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
GfxPrint_Printf ( printer , " Age:%s " , sAgeLabels [ age ] . englishAge ) ;
break ;
case LANGUAGE_GER :
GfxPrint_Printf ( printer , " Alter:%s " , sAgeLabels [ age ] . germanAge ) ;
break ;
case LANGUAGE_FRA :
GfxPrint_Printf ( printer , " Age:%s " , sAgeLabels [ age ] . frenchAge ) ;
break ;
}
} else {
GfxPrint_Printf ( printer , " Age:%s " , sAgeLabels [ age ] . japaneseAge ) ;
}
2022-03-21 21:51:23 -04:00
}
2022-10-06 08:39:12 -04:00
void Better_Select_PrintAgeSetting ( SelectContext * this , GfxPrint * printer , s32 age ) {
GfxPrint_SetPos ( printer , 25 , 25 ) ;
GfxPrint_SetColor ( printer , 100 , 100 , 100 , 255 ) ;
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
case LANGUAGE_FRA :
default :
GfxPrint_Printf ( printer , " (B)Age: " ) ;
break ;
case LANGUAGE_GER :
GfxPrint_Printf ( printer , " (B)Alter: " ) ;
break ;
}
} else {
GfxPrint_Printf ( printer , " (B)Age: " ) ;
}
2022-10-06 08:39:12 -04:00
GfxPrint_SetColor ( printer , 55 , 200 , 50 , 255 ) ;
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
GfxPrint_Printf ( printer , " %s " , sBetterAgeLabels [ age ] . englishAge ) ;
break ;
case LANGUAGE_GER :
GfxPrint_Printf ( printer , " %s " , sBetterAgeLabels [ age ] . germanAge ) ;
break ;
case LANGUAGE_FRA :
GfxPrint_Printf ( printer , " %s " , sBetterAgeLabels [ age ] . frenchAge ) ;
break ;
}
} else {
GfxPrint_Printf ( printer , " %s " , sBetterAgeLabels [ age ] . englishAge ) ;
}
2022-10-06 08:39:12 -04:00
}
2022-03-21 21:51:23 -04:00
void Select_PrintCutsceneSetting ( SelectContext * this , GfxPrint * printer , u16 csIndex ) {
2023-01-23 15:36:28 -05:00
char * cutsceneLabels [ 13 ] [ 4 ] = {
2023-02-12 17:58:57 -05:00
{ GFXP_HIRAGANA " ヨル " GFXP_KATAKANA " ゴロン " , " Day " , " Tag " , " Jour " } ,
{ GFXP_HIRAGANA " オヒル " GFXP_KATAKANA " ジャラ " , " Night " , " Nacht " , " Nuit " } ,
2023-01-23 15:36:28 -05:00
{ " デモ00 " , " Demo00 " , " Demo00 " , " Demo00 " } ,
{ " デモ01 " , " Demo01 " , " Demo01 " , " Demo01 " } ,
{ " デモ02 " , " Demo02 " , " Demo02 " , " Demo02 " } ,
{ " デモ03 " , " Demo03 " , " Demo03 " , " Demo03 " } ,
{ " デモ04 " , " Demo04 " , " Demo04 " , " Demo04 " } ,
{ " デモ05 " , " Demo05 " , " Demo05 " , " Demo05 " } ,
{ " デモ06 " , " Demo06 " , " Demo06 " , " Demo06 " } ,
{ " デモ07 " , " Demo07 " , " Demo07 " , " Demo07 " } ,
{ " デモ08 " , " Demo08 " , " Demo08 " , " Demo08 " } ,
{ " デモ09 " , " Demo09 " , " Demo09 " , " Demo09 " } ,
{ " デモ0A " , " Demo0A " , " Demo0A " , " Demo0A " } ,
} ;
2022-03-21 21:51:23 -04:00
char * label ;
2023-01-23 15:36:28 -05:00
int lang = CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ? gSaveContext . language + 1 : 0 ;
2022-03-21 21:51:23 -04:00
GfxPrint_SetPos ( printer , 4 , 25 ) ;
GfxPrint_SetColor ( printer , 255 , 255 , 55 , 255 ) ;
switch ( csIndex ) {
case 0 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 1 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
gSaveContext . dayTime = 0 ;
break ;
case 0x8000 :
// clang-format off
2023-01-23 15:36:28 -05:00
gSaveContext . dayTime = 0x8000 ; label = cutsceneLabels [ 0 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
// clang-format on
break ;
case 0xFFF0 :
// clang-format off
2023-01-23 15:36:28 -05:00
gSaveContext . dayTime = 0x8000 ; label = cutsceneLabels [ 2 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
// clang-format on
break ;
case 0xFFF1 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 3 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF2 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 4 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF3 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 5 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF4 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 6 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF5 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 7 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF6 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 8 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF7 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 9 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF8 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 10 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFF9 :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 11 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
case 0xFFFA :
2023-01-23 15:36:28 -05:00
label = cutsceneLabels [ 12 ] [ lang ] ;
2022-03-21 21:51:23 -04:00
break ;
} ;
gSaveContext . skyboxTime = gSaveContext . dayTime ;
GfxPrint_Printf ( printer , " Stage: " GFXP_KATAKANA " %s " , label ) ;
}
2022-10-06 08:39:12 -04:00
void Better_Select_PrintTimeSetting ( SelectContext * this , GfxPrint * printer ) {
char * label ;
GfxPrint_SetPos ( printer , 22 , 24 ) ;
GfxPrint_SetColor ( printer , 100 , 100 , 100 , 255 ) ;
if ( gSaveContext . dayTime > 0xC000 | | gSaveContext . dayTime < 0x4555 ) {
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
label = " Night " ;
break ;
case LANGUAGE_GER :
label = " Nacht " ;
break ;
case LANGUAGE_FRA :
label = " Nuit " ;
break ;
}
} else {
label = " Night " ;
}
2022-10-06 08:39:12 -04:00
} else {
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
label = " Day " ;
break ;
case LANGUAGE_GER :
label = " Tag " ;
break ;
case LANGUAGE_FRA :
label = " Jour " ;
break ;
}
} else {
label = " Day " ;
}
2022-10-06 08:39:12 -04:00
}
2023-01-23 15:36:28 -05:00
if ( CVarGetInteger ( " gDebugWarpScreenTranslation " , 0 ) ) {
switch ( gSaveContext . language ) {
case LANGUAGE_ENG :
default :
GfxPrint_Printf ( printer , " (Z/R)Time: " ) ;
break ;
case LANGUAGE_GER :
GfxPrint_Printf ( printer , " (Z/R)Zeit: " ) ;
break ;
case LANGUAGE_FRA :
GfxPrint_Printf ( printer , " (Z/R)Temps: " ) ;
break ;
}
} else {
GfxPrint_Printf ( printer , " (Z/R)Time: " ) ;
}
2022-10-06 08:39:12 -04:00
GfxPrint_SetColor ( printer , 200 , 200 , 55 , 255 ) ;
GfxPrint_Printf ( printer , " %s " , label ) ;
}
2022-03-21 21:51:23 -04:00
void Select_DrawMenu ( SelectContext * this ) {
GraphicsContext * gfxCtx = this - > state . gfxCtx ;
GfxPrint * printer ;
2022-07-05 19:29:34 -04:00
OPEN_DISPS ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
gSPSegment ( POLY_OPA_DISP + + , 0x00 , NULL ) ;
2022-11-29 18:29:36 -05:00
Gfx_SetupFrame ( gfxCtx , 0 , 0 , 0 ) ;
2022-03-21 21:51:23 -04:00
SET_FULLSCREEN_VIEWPORT ( & this - > view ) ;
func_800AAA50 ( & this - > view , 0xF ) ;
2022-11-29 18:29:36 -05:00
Gfx_SetupDL_28Opa ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
printer = alloca ( sizeof ( GfxPrint ) ) ;
GfxPrint_Init ( printer ) ;
GfxPrint_Open ( printer , POLY_OPA_DISP ) ;
2023-01-17 00:17:49 -05:00
if ( CVarGetInteger ( " gBetterDebugWarpScreen " , 0 ) ) {
2022-10-06 08:39:12 -04:00
Better_Select_PrintMenu ( this , printer ) ;
Better_Select_PrintAgeSetting ( this , printer , ( ( void ) 0 , gSaveContext . linkAge ) ) ;
Better_Select_PrintTimeSetting ( this , printer ) ;
} else {
Select_PrintMenu ( this , printer ) ;
Select_PrintAgeSetting ( this , printer , ( ( void ) 0 , gSaveContext . linkAge ) ) ;
Select_PrintCutsceneSetting ( this , printer , ( ( void ) 0 , gSaveContext . cutsceneIndex ) ) ;
}
2022-03-21 21:51:23 -04:00
POLY_OPA_DISP = GfxPrint_Close ( printer ) ;
GfxPrint_Destroy ( printer ) ;
2022-07-05 19:29:34 -04:00
CLOSE_DISPS ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
}
void Select_DrawLoadingScreen ( SelectContext * this ) {
GraphicsContext * gfxCtx = this - > state . gfxCtx ;
GfxPrint * printer ;
2022-07-05 19:29:34 -04:00
OPEN_DISPS ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
gSPSegment ( POLY_OPA_DISP + + , 0x00 , NULL ) ;
2022-11-29 18:29:36 -05:00
Gfx_SetupFrame ( gfxCtx , 0 , 0 , 0 ) ;
2022-03-21 21:51:23 -04:00
SET_FULLSCREEN_VIEWPORT ( & this - > view ) ;
func_800AAA50 ( & this - > view , 0xF ) ;
2022-11-29 18:29:36 -05:00
Gfx_SetupDL_28Opa ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
printer = alloca ( sizeof ( GfxPrint ) ) ;
GfxPrint_Init ( printer ) ;
GfxPrint_Open ( printer , POLY_OPA_DISP ) ;
Select_PrintLoadingMessage ( this , printer ) ;
POLY_OPA_DISP = GfxPrint_Close ( printer ) ;
GfxPrint_Destroy ( printer ) ;
2022-07-05 19:29:34 -04:00
CLOSE_DISPS ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
}
void Select_Draw ( SelectContext * this ) {
GraphicsContext * gfxCtx = this - > state . gfxCtx ;
2022-07-05 19:29:34 -04:00
OPEN_DISPS ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
gSPSegment ( POLY_OPA_DISP + + , 0x00 , NULL ) ;
2022-11-29 18:29:36 -05:00
Gfx_SetupFrame ( gfxCtx , 0 , 0 , 0 ) ;
2022-03-21 21:51:23 -04:00
SET_FULLSCREEN_VIEWPORT ( & this - > view ) ;
func_800AAA50 ( & this - > view , 0xF ) ;
if ( ! this - > state . running ) {
Select_DrawLoadingScreen ( this ) ;
} else {
Select_DrawMenu ( this ) ;
}
2022-07-05 19:29:34 -04:00
CLOSE_DISPS ( gfxCtx ) ;
2022-03-21 21:51:23 -04:00
}
void Select_Main ( GameState * thisx ) {
SelectContext * this = ( SelectContext * ) thisx ;
2023-01-17 00:17:49 -05:00
if ( CVarGetInteger ( " gBetterDebugWarpScreen " , 0 ) ) {
2022-10-06 08:39:12 -04:00
Better_Select_UpdateMenu ( this ) ;
} else {
Select_UpdateMenu ( this ) ;
}
2022-03-21 21:51:23 -04:00
Select_Draw ( this ) ;
}
void Select_Destroy ( GameState * thisx ) {
2023-01-17 15:18:13 -05:00
osSyncPrintf ( " %c " , BEL ) ;
2022-03-21 21:51:23 -04:00
// "view_cleanup will hang, so it won't be called"
osSyncPrintf ( " *** view_cleanupはハングアップするので、呼ばない *** \n " ) ;
}
void Select_Init ( GameState * thisx ) {
SelectContext * this = ( SelectContext * ) thisx ;
size_t size ;
s32 pad ;
this - > state . main = Select_Main ;
this - > state . destroy = Select_Destroy ;
this - > scenes = sScenes ;
2022-10-06 08:39:12 -04:00
this - > betterScenes = sBetterScenes ;
this - > betterGrottos = sBetterGrottos ;
2022-03-21 21:51:23 -04:00
this - > topDisplayedScene = 0 ;
this - > currentScene = 0 ;
this - > pageDownStops [ 0 ] = 0 ; // Hyrule Field
this - > pageDownStops [ 1 ] = 19 ; // Temple Of Time
this - > pageDownStops [ 2 ] = 37 ; // Treasure Chest Game
this - > pageDownStops [ 3 ] = 51 ; // Gravekeeper's Hut
this - > pageDownStops [ 4 ] = 59 ; // Zora Shop
this - > pageDownStops [ 5 ] = 73 ; // Bottom of the Well
this - > pageDownStops [ 6 ] = 91 ; // Escaping Ganon's Tower 3
this - > pageDownIndex = 0 ;
this - > opt = 0 ;
2023-01-17 00:17:49 -05:00
this - > count = CVarGetInteger ( " gBetterDebugWarpScreen " , 0 ) ? ARRAY_COUNT ( sBetterScenes ) : ARRAY_COUNT ( sScenes ) ;
2022-03-21 21:51:23 -04:00
View_Init ( & this - > view , this - > state . gfxCtx ) ;
this - > view . flags = ( 0x08 | 0x02 ) ;
this - > verticalInputAccumulator = 0 ;
this - > verticalInput = 0 ;
this - > timerUp = 0 ;
this - > timerDown = 0 ;
this - > lockUp = 0 ;
this - > lockDown = 0 ;
this - > unk_234 = 0 ;
size = ( uintptr_t ) _z_select_staticSegmentRomEnd - ( uintptr_t ) _z_select_staticSegmentRomStart ;
if ( ( dREG ( 80 ) > = 0 ) & & ( dREG ( 80 ) < this - > count ) ) {
this - > currentScene = dREG ( 80 ) ;
this - > topDisplayedScene = dREG ( 81 ) ;
this - > pageDownIndex = dREG ( 82 ) ;
}
2023-01-17 00:17:49 -05:00
if ( CVarGetInteger ( " gBetterDebugWarpScreen " , 0 ) ) {
this - > currentScene = CVarGetInteger ( " gBetterDebugWarpScreenCurrentScene " , 0 ) ;
this - > topDisplayedScene = CVarGetInteger ( " gBetterDebugWarpScreenTopDisplayedScene " , 0 ) ;
this - > pageDownIndex = CVarGetInteger ( " gBetterDebugWarpScreenPageDownIndex " , 0 ) ;
2022-10-06 08:39:12 -04:00
}
2022-03-21 21:51:23 -04:00
R_UPDATE_RATE = 1 ;
2022-05-11 13:18:24 -04:00
# if !defined(_MSC_VER) && !defined(__GNUC__)
2022-07-05 19:29:34 -04:00
this - > staticSegment = GAMESTATE_ALLOC_MC ( & this - > state , size ) ;
DmaMgr_SendRequest1 ( this - > staticSegment , _z_select_staticSegmentRomStart , size , __FILE__ , __LINE__ ) ;
2022-05-11 13:18:24 -04:00
# endif
2022-03-21 21:51:23 -04:00
gSaveContext . cutsceneIndex = 0x8000 ;
gSaveContext . linkAge = 1 ;
2022-10-06 08:39:12 -04:00
gSaveContext . nightFlag = 0 ;
gSaveContext . dayTime = 0x8000 ;
2022-03-21 21:51:23 -04:00
}