1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-10 02:54:24 +00:00
oot/src/overlays/gamestates/ovl_select/z_select.c
cadmic 8153c952f6
[ntsc-1.2] Organize n64dd declarations and convert to 1.0 addresses (#2127)
* Reorganize n64dd declarations

* Fix bss

* Really fix bss
2024-09-05 03:56:24 +09:00

783 lines
38 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* File: z_select.c
* Overlay: ovl_select
* Description: Debug Scene Select Menu
*/
#include "ultra64.h"
#include "global.h"
#include "terminal.h"
#include "alloca.h"
#include "z64.h"
#if PLATFORM_N64
#include "n64dd.h"
#endif
void MapSelect_LoadTitle(MapSelectState* this) {
this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, ConsoleLogo_Init, ConsoleLogoState);
}
void MapSelect_LoadGame(MapSelectState* this, s32 entranceIndex) {
PRINTF(VT_FGCOL(BLUE));
PRINTF("\n\n\n_%x\n\n\n", gSaveContext.fileNum);
PRINTF(VT_RST);
if (gSaveContext.fileNum == 0xFF) {
Sram_InitDebugSave();
// Set the fill target to be the saved magic amount
gSaveContext.magicFillTarget = gSaveContext.save.info.playerData.magic;
// Set `magicLevel` and `magic` to 0 so `magicCapacity` then `magic` grows from nothing
// to respectively the full capacity and `magicFillTarget`
gSaveContext.magicCapacity = 0;
gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.magic = 0;
}
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.forceRisingButtonAlphas = gSaveContext.nextHudVisibilityMode = gSaveContext.hudVisibilityMode =
gSaveContext.hudVisibilityModeTimer = 0; // false, HUD_VISIBILITY_NO_CHANGE
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
gSaveContext.save.entranceIndex = entranceIndex;
gSaveContext.respawnFlag = 0;
gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = ENTR_LOAD_OPENING;
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.natureAmbienceId = 0xFF;
gSaveContext.showTitleCard = true;
gWeatherMode = WEATHER_MODE_CLEAR;
this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
}
#if PLATFORM_N64
void func_80800AD0_unknown(MapSelectState* this, s32 arg1) {
if (D_80121212 != 0) {
n64dd_SetDiskVersion(1);
}
}
void func_80800B08_unknown(MapSelectState* this, s32 arg1) {
if (D_80121212 != 0) {
n64dd_SetDiskVersion(0);
}
}
#endif
// "Translation" (Actual name)
static SceneSelectEntry sScenes[] = {
{ " 1:SPOT00", MapSelect_LoadGame, ENTR_HYRULE_FIELD_0 },
{ " 2:SPOT01", MapSelect_LoadGame, ENTR_KAKARIKO_VILLAGE_0 },
{ " 3:SPOT02", MapSelect_LoadGame, ENTR_GRAVEYARD_0 },
{ " 4:SPOT03", MapSelect_LoadGame, ENTR_ZORAS_RIVER_0 },
{ " 5:SPOT04", MapSelect_LoadGame, ENTR_KOKIRI_FOREST_0 },
{ " 6:SPOT05", MapSelect_LoadGame, ENTR_SACRED_FOREST_MEADOW_0 },
{ " 7:SPOT06", MapSelect_LoadGame, ENTR_LAKE_HYLIA_0 },
{ " 8:SPOT07", MapSelect_LoadGame, ENTR_ZORAS_DOMAIN_0 },
{ " 9:SPOT08", MapSelect_LoadGame, ENTR_ZORAS_FOUNTAIN_0 },
{ "10:SPOT09", MapSelect_LoadGame, ENTR_GERUDO_VALLEY_0 },
{ "11:SPOT10", MapSelect_LoadGame, ENTR_LOST_WOODS_0 },
{ "12:SPOT11", MapSelect_LoadGame, ENTR_DESERT_COLOSSUS_0 },
{ "13:SPOT12", MapSelect_LoadGame, ENTR_GERUDOS_FORTRESS_0 },
{ "14:SPOT13", MapSelect_LoadGame, ENTR_HAUNTED_WASTELAND_0 },
{ "15:SPOT15", MapSelect_LoadGame, ENTR_HYRULE_CASTLE_0 },
{ "16:SPOT16", MapSelect_LoadGame, ENTR_DEATH_MOUNTAIN_TRAIL_0 },
{ "17:SPOT17", MapSelect_LoadGame, ENTR_DEATH_MOUNTAIN_CRATER_0 },
{ "18:SPOT18", MapSelect_LoadGame, ENTR_GORON_CITY_0 },
{ "19:SPOT20", MapSelect_LoadGame, ENTR_LON_LON_RANCH_0 },
// "20: Chamber of Time"
{ "20:" GFXP_HIRAGANA "トキノマ", MapSelect_LoadGame, ENTR_TEMPLE_OF_TIME_0 },
// "21: Chamber of the Sages"
{ "21:" GFXP_HIRAGANA "ケンジャノマ", MapSelect_LoadGame, ENTR_CHAMBER_OF_THE_SAGES_0 },
// "22: Target Range"
{ "22:" GFXP_HIRAGANA "シャテキジョウ", MapSelect_LoadGame, ENTR_SHOOTING_GALLERY_0 },
// "23: Hyrule Garden Game"
{ "23:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム", MapSelect_LoadGame,
ENTR_CASTLE_COURTYARD_GUARDS_DAY_0 },
// "24: Grave Dive Hole"
{ "24:" GFXP_HIRAGANA "ハカシタトビコミアナ", MapSelect_LoadGame, ENTR_REDEAD_GRAVE_0 },
// "25: Grave Dive Hole 2"
{ "25:" GFXP_HIRAGANA "ハカシタトビコミアナ 2", MapSelect_LoadGame, ENTR_GRAVE_WITH_FAIRYS_FOUNTAIN_0 },
// "26: Royal Family's Grave"
{ "26:" GFXP_HIRAGANA "オウケ ノ ハカアナ", MapSelect_LoadGame, ENTR_ROYAL_FAMILYS_TOMB_0 },
// "27: Great Fairy's Fountain"
{ "27:" GFXP_HIRAGANA "ダイヨウセイノイズミ", MapSelect_LoadGame, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_0 },
// "28: Fairy Dive Hole"
{ "28:" GFXP_HIRAGANA "トビコミ ヨウセイ アナ", MapSelect_LoadGame, ENTR_FAIRYS_FOUNTAIN_0 },
// "29: Magic Stone Fairy's Fountain"
{ "29:" GFXP_HIRAGANA "マホウセキ ヨウセイノイズミ", MapSelect_LoadGame, ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0 },
// "30: Final Battle With Ganon"
{ "30:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン", MapSelect_LoadGame, ENTR_GANONS_TOWER_COLLAPSE_EXTERIOR_0 },
// "31: Hyrule Inner Garden"
{ "31:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ナカニワ", MapSelect_LoadGame, ENTR_CASTLE_COURTYARD_ZELDA_0 },
// "32: Fishing"
{ "32:" GFXP_HIRAGANA "ツリボリ", MapSelect_LoadGame, ENTR_FISHING_POND_0 },
// "33: Bombchu Bowling"
{ "33:" GFXP_KATAKANA "ボムチュウボーリング", MapSelect_LoadGame, ENTR_BOMBCHU_BOWLING_ALLEY_0 },
// "34: Lon Lon Ranch - Storehouse 1" (Talon's House)
{ "34:" GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 1", MapSelect_LoadGame, ENTR_LON_LON_BUILDINGS_0 },
// "35: Lon Lon Ranch - Storehouse 2" (Ranch Silo)
{ "35:" GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 2", MapSelect_LoadGame, ENTR_LON_LON_BUILDINGS_1 },
// "36: Lookout Hut"
{ "36:" GFXP_HIRAGANA "ミハリ ゴヤ", MapSelect_LoadGame, ENTR_MARKET_GUARD_HOUSE_0 },
// "37: Magic Potion Shop"
{ "37:" GFXP_HIRAGANA "マホウ ノ クスリヤ", MapSelect_LoadGame, ENTR_POTION_SHOP_GRANNY_0 },
// "38: Treasure Chest Shop"
{ "38:" GFXP_HIRAGANA "タカラバコヤ", MapSelect_LoadGame, ENTR_TREASURE_BOX_SHOP_0 },
// "39: Gold Skulltula House"
{ "39:" GFXP_HIRAGANA "キン " GFXP_KATAKANA "スタルチュラ ハウス", MapSelect_LoadGame, ENTR_HOUSE_OF_SKULLTULA_0 },
// "40: Castle Town - Entrance" (Market Entrance)
{ "40:" GFXP_HIRAGANA "ジョウカマチ イリグチ", MapSelect_LoadGame, ENTR_MARKET_ENTRANCE_DAY_0 },
// "41: Castle Town" (Market)
{ "41:" GFXP_HIRAGANA "ジョウカマチ", MapSelect_LoadGame, ENTR_MARKET_DAY_0 },
// "42: Back Alley" (Back Alley)
{ "42:" GFXP_HIRAGANA "ウラロジ", MapSelect_LoadGame, ENTR_BACK_ALLEY_DAY_0 },
// "43: In Front of the Temple of Time" (Temple of Time Exterior)
{ "43:" GFXP_HIRAGANA "トキノシンデン マエ", MapSelect_LoadGame, ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_0 },
// "44: Link's House"
{ "44:" GFXP_HIRAGANA "リンクノイエ", MapSelect_LoadGame, ENTR_LINKS_HOUSE_0 },
// "45: Kakariko Village Row House"
{ "45:" GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラノナガヤ", MapSelect_LoadGame, ENTR_KAKARIKO_CENTER_GUEST_HOUSE_0 },
// "46: Back Alley House"
{ "46:" GFXP_HIRAGANA "ウラロジノ イエ", MapSelect_LoadGame, ENTR_BACK_ALLEY_HOUSE_0 },
// "47: Kokiri Village - Know-It-All Brothers' House"
{ "47:" GFXP_HIRAGANA "コキリノムラ モノシリキョウダイノイエ", MapSelect_LoadGame, ENTR_KNOW_IT_ALL_BROS_HOUSE_0 },
// "48: Kokiri Village - Twins' House"
{ "48:" GFXP_HIRAGANA "コキリノムラ フタゴノイエ", MapSelect_LoadGame, ENTR_TWINS_HOUSE_0 },
// "49: Kokiri Village - Mido's House"
{ "49:" GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "ミド" GFXP_HIRAGANA "ノイエ", MapSelect_LoadGame, ENTR_MIDOS_HOUSE_0 },
// "50: Kokiri Village - Saria's House"
{ "50:" GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "サリア" GFXP_HIRAGANA "ノイエ", MapSelect_LoadGame, ENTR_SARIAS_HOUSE_0 },
// "51: Stable"
{ "51:" GFXP_HIRAGANA "ウマゴヤ", MapSelect_LoadGame, ENTR_STABLE_0 },
// "52: Grave Keeper's House"
{ "52:" GFXP_HIRAGANA "ハカモリノイエ", MapSelect_LoadGame, ENTR_GRAVEKEEPERS_HUT_0 },
// "53: Back Alley - Dog Lady's House"
{ "53:" GFXP_HIRAGANA "ウラロジ イヌオバサンノイエ", MapSelect_LoadGame, ENTR_DOG_LADY_HOUSE_0 },
// "54: Kakariko Village - Impa's House"
{ "54:" GFXP_HIRAGANA "カカリコムラ " GFXP_KATAKANA "インパ" GFXP_HIRAGANA "ノイエ", MapSelect_LoadGame, ENTR_IMPAS_HOUSE_0 },
// "55: Hylia Laboratory"
{ "55:" GFXP_KATAKANA "ハイリア" GFXP_HIRAGANA " ケンキュウジョ", MapSelect_LoadGame, ENTR_LAKESIDE_LABORATORY_0 },
// "56: Tent"
{ "56:" GFXP_KATAKANA "テント", MapSelect_LoadGame, ENTR_CARPENTERS_TENT_0 },
// "57: Shield Shop"
{ "57:" GFXP_HIRAGANA "タテノミセ", MapSelect_LoadGame, ENTR_BAZAAR_0 },
// "58: Kokiri Shop"
{ "58:" GFXP_HIRAGANA "コキリゾクノミセ", MapSelect_LoadGame, ENTR_KOKIRI_SHOP_0 },
// "59: Goron Shop"
{ "59:" GFXP_KATAKANA "ゴロン" GFXP_HIRAGANA "ノミセ", MapSelect_LoadGame, ENTR_GORON_SHOP_0 },
// "60: Zora Shop"
{ "60:" GFXP_KATAKANA "ゾーラ" GFXP_HIRAGANA "ノミセ", MapSelect_LoadGame, ENTR_ZORA_SHOP_0 },
// "61: Kakariko Village - Potion Shop"
{ "61:" GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラ クスリヤ", MapSelect_LoadGame, ENTR_POTION_SHOP_KAKARIKO_0 },
// "62: Castle Town - Potion Shop"
{ "62:" GFXP_HIRAGANA "ジョウカマチ クスリヤ", MapSelect_LoadGame, ENTR_POTION_SHOP_MARKET_0 },
// "63: Back Alley - Night Shop"
{ "63:" GFXP_HIRAGANA "ウラロジ ヨルノミセ", MapSelect_LoadGame, ENTR_BOMBCHU_SHOP_0 },
// "64: Mask Shop"
{ "64:" GFXP_HIRAGANA "オメンヤ", MapSelect_LoadGame, ENTR_HAPPY_MASK_SHOP_0 },
// "65: Gerudo Training Area"
{ "65:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ノシュウレンジョウ", MapSelect_LoadGame, ENTR_GERUDO_TRAINING_GROUND_0 },
// "66: Fairy Tree Dungeon"
{ "66:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_DEKU_TREE_0 },
// "67: Fairy Tree Dungeon - Boss"
{ "67:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_DEKU_TREE_BOSS_0 },
// "68: Dondogo Dungeon"
{ "68:" GFXP_KATAKANA "ドドンゴ ダンジョン", MapSelect_LoadGame, ENTR_DODONGOS_CAVERN_0 },
// "69: Dondogo Dungeon - Boss"
{ "69:" GFXP_KATAKANA "ドドンゴ ダンジョン ボス", MapSelect_LoadGame, ENTR_DODONGOS_CAVERN_BOSS_0 },
// "70: Giant Fish Dungeon"
{ "70:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_JABU_JABU_0 },
// "71: Giant Fish Dungeon - Boss"
{ "71:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_JABU_JABU_BOSS_0 },
// "72: Forest Temple"
{ "72:" GFXP_HIRAGANA "モリノシンデン", MapSelect_LoadGame, ENTR_FOREST_TEMPLE_0 },
// "73: Forest Temple - Boss"
{ "73:" GFXP_HIRAGANA "モリノシンデン " GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_FOREST_TEMPLE_BOSS_0 },
// "74: Dungeon Below the Well"
{ "74:" GFXP_HIRAGANA "イドシタ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_BOTTOM_OF_THE_WELL_0 },
// "75: Dungeon Beneath the Graves"
{ "75:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_SHADOW_TEMPLE_0 },
// "76: Dungeon Beneath the Graves - Boss"
{ "76:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_SHADOW_TEMPLE_BOSS_0 },
// "77: Fire Temple"
{ "77:" GFXP_HIRAGANA "ヒノシンデン", MapSelect_LoadGame, ENTR_FIRE_TEMPLE_0 },
// "78: Fire Temple - Boss"
{ "78:" GFXP_HIRAGANA "ヒノシンデン " GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_FIRE_TEMPLE_BOSS_0 },
// "79: Water Temple"
{ "79:" GFXP_HIRAGANA "ミズノシンデン", MapSelect_LoadGame, ENTR_WATER_TEMPLE_0 },
// "80: Water Temple - Boss"
{ "80:" GFXP_HIRAGANA "ミズノシンデン " GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_WATER_TEMPLE_BOSS_0 },
// "81: Evil Goddess Statue Dungeon"
{ "81:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_0 },
// "82: Evil Goddess Statue Dungeon - Iron Knuckle" (Iron Knuckle's Lair)
{ "82:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン アイアンナック", MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_BOSS_0 },
// "83: Evil Goddess Statue Dungeon - Boss" (Twinrova's Lair)
{ "83:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン ボス", MapSelect_LoadGame, ENTR_SPIRIT_TEMPLE_BOSS_2 },
// "84: Ganon's Tower"
{ "84:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ", MapSelect_LoadGame, ENTR_GANONS_TOWER_0 },
// "85: Ganon's Tower - Boss"
{ "85:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ" GFXP_KATAKANA "ボス", MapSelect_LoadGame, ENTR_GANONDORF_BOSS_0 },
// "86: Ice Cavern"
{ "86:" GFXP_HIRAGANA "コオリノドウクツ", MapSelect_LoadGame, ENTR_ICE_CAVERN_0 },
// "87: Relay Beneath the Graves" (Dampé's Grave)
{ "87:" GFXP_HIRAGANA "ハカシタ" GFXP_KATAKANA "リレー", MapSelect_LoadGame, ENTR_WINDMILL_AND_DAMPES_GRAVE_0 },
// "88: Ganon's Basement Dungeon"
{ "88:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ " GFXP_KATAKANA "ダンジョン", MapSelect_LoadGame,
ENTR_INSIDE_GANONS_CASTLE_0 },
// "89: Final Battle With Ganon - Cutscene & Battle"
{ "89:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン " GFXP_KATAKANA "デモ & バトル", MapSelect_LoadGame,
ENTR_GANON_BOSS_0 },
// "90: Ganon's Tower Aftermath 1" (Escaping Ganon's Tower 1)
{ "90:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 1", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_0 },
// "91: Ganon's Tower Aftermath 2" (Escaping Ganon's Tower 2)
{ "91:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 2", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_2 },
// "92: Ganon's Tower Aftermath 3" (Escaping Ganon's Tower 3)
{ "92:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 3", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_4 },
// "93: Ganon's Tower Aftermath 4" (Escaping Ganon's Tower 4)
{ "93:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 4", MapSelect_LoadGame,
ENTR_GANONS_TOWER_COLLAPSE_INTERIOR_6 },
// "94: Ganon's Basement Aftermath"
{ "94:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ ソノゴ", MapSelect_LoadGame, ENTR_INSIDE_GANONS_CASTLE_COLLAPSE_0 },
// "95: Gerudo Passage 1-2" (Thieves' Hideout 1)
{ "95:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 1-2", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_0 },
// "96: Gerudo Passage 3-4 9-10" (Thieves' Hideout 2)
{ "96:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 3-4 9-10", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_2 },
// "97: Gerudo Passage 5-6" (Thieves' Hideout 3)
{ "97:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 5-6", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_4 },
// "98: Gerudo Passage 7-8" (Thieves' Hideout 4)
{ "98:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 7-8", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_6 },
// "99: Gerudo Passage 11-12" (Thieves' Hideout 5)
{ "99:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 11-12", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_10 },
// "100: Gerudo Passage 13" (Thieves' Hideout 6)
{ "100:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 13", MapSelect_LoadGame, ENTR_THIEVES_HIDEOUT_12 },
// "101: Hidden Dive Hole 0" (Grotto 0 - Gossip Stone & Chest)
{ "101:" GFXP_HIRAGANA "カクシトビコミアナ 0", MapSelect_LoadGame, ENTR_GROTTOS_0 },
// "102: Hidden Dive Hole 1" (Grotto 1 - Skulltula & Gold Skulltula)
{ "102:" GFXP_HIRAGANA "カクシトビコミアナ 1", MapSelect_LoadGame, ENTR_GROTTOS_1 },
// "103: Hidden Dive Hole 2" (Grotto 2 - Business Scrub & Heart Piece)
{ "103:" GFXP_HIRAGANA "カクシトビコミアナ 2", MapSelect_LoadGame, ENTR_GROTTOS_2 },
// "104: Hidden Dive Hole 3" (Grotto 3 - Redeads)
{ "104:" GFXP_HIRAGANA "カクシトビコミアナ 3", MapSelect_LoadGame, ENTR_GROTTOS_3 },
// "105: Hidden Dive Hole 4" (Grotto 4 - 3 Business Scrubs)
{ "105:" GFXP_HIRAGANA "カクシトビコミアナ 4", MapSelect_LoadGame, ENTR_GROTTOS_4 },
// "106: Hidden Dive Hole 5" (Grotto 5 - Gossip Stone, Skulltula, Cow)
{ "106:" GFXP_HIRAGANA "カクシトビコミアナ 5", MapSelect_LoadGame, ENTR_GROTTOS_5 },
// "107: Hidden Dive Hole 6" (Grotto 6 - Octorok)
{ "107:" GFXP_HIRAGANA "カクシトビコミアナ 6", MapSelect_LoadGame, ENTR_GROTTOS_6 },
// "108: Hidden Dive Hole 7" (Grotto 7 - Business Scrub & Deku Nut Upgrade)
{ "108:" GFXP_HIRAGANA "カクシトビコミアナ 7", MapSelect_LoadGame, ENTR_GROTTOS_7 },
// "109: Hidden Dive Hole 8" (Grotto 8 - 2 Wolfos)
{ "109:" GFXP_HIRAGANA "カクシトビコミアナ 8", MapSelect_LoadGame, ENTR_GROTTOS_8 },
// "110: Hidden Dive Hole 9" (Grotto 9 - Bombable Walls)
{ "110:" GFXP_HIRAGANA "カクシトビコミアナ 9", MapSelect_LoadGame, ENTR_GROTTOS_9 },
// "111: Hidden Dive Hole 10" (Grotto 10 - 2 Business Scrubs)
{ "111:" GFXP_HIRAGANA "カクシトビコミアナ 10", MapSelect_LoadGame, ENTR_GROTTOS_10 },
// "112: Hidden Dive Hole 11" (Grotto 11 - Tektite & Heart Piece)
{ "112:" GFXP_HIRAGANA "カクシトビコミアナ 11", MapSelect_LoadGame, ENTR_GROTTOS_11 },
// "113: Hidden Dive Hole 12" (Grotto 12 - Deku Stage)
{ "113:" GFXP_HIRAGANA "カクシトビコミアナ 12", MapSelect_LoadGame, ENTR_GROTTOS_12 },
// "114: Hidden Dive Hole 13" (Grotto 13 - Rupees & Cow)
{ "114:" GFXP_HIRAGANA "カクシトビコミアナ 13", MapSelect_LoadGame, ENTR_GROTTOS_13 },
// "115: Hyrule Cutscenes"
{ "115:" GFXP_KATAKANA "ハイラル デモ", MapSelect_LoadGame, ENTR_CUTSCENE_MAP_0 },
#if OOT_DEBUG
// "116: Special Room (Treasure Chest Warp)" (Ganondorf Test Room)
{ "116:" GFXP_HIRAGANA "ベッシツ (タカラバコ" GFXP_KATAKANA "ワープ)", MapSelect_LoadGame, ENTR_BESITU_0 },
// "117: Sasaki Test" (Sasa Test)
{ "117:" GFXP_HIRAGANA "ササ" GFXP_KATAKANA "テスト", MapSelect_LoadGame, ENTR_SASATEST_0 },
// "118: Test Map" (Jungle Gym)
{ "118:" GFXP_KATAKANA "テストマップ", MapSelect_LoadGame, ENTR_TEST01_0 },
// "119: Test Room" (Treasure Chest Room)
{ "119:" GFXP_KATAKANA "テストルーム", MapSelect_LoadGame, ENTR_TESTROOM_0 },
// "120: Stalfos Miniboss Room" (Stalfos Miniboss Room)
{ "120:" GFXP_HIRAGANA "チュウ" GFXP_KATAKANA "スタロフォス" GFXP_HIRAGANA "ベヤ", MapSelect_LoadGame, ENTR_SYOTES_0 },
// "121: Boss Stalfos Room" (Stalfos Boss Room)
{ "121:" GFXP_KATAKANA "ボススタロフォス" GFXP_HIRAGANA "ベヤ", MapSelect_LoadGame, ENTR_SYOTES2_0 },
// "122: Stal" (Sutaru)
{ "122:Sutaru", MapSelect_LoadGame, ENTR_SUTARU_0 },
// "123: Test Area"
{ "123:jikkenjyou", MapSelect_LoadGame, ENTR_TEST_SHOOTING_GALLERY_0 },
// "124: Depth Test" (Depth Test)
{ "124:depth" GFXP_KATAKANA "テスト", MapSelect_LoadGame, ENTR_DEPTH_TEST_0 },
// "125: Hyrule Garden Game 2" (Early Hyrule Garden Game)
{ "125:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム2", MapSelect_LoadGame, ENTR_HAIRAL_NIWA2_0 },
#endif
// "title" (Title Screen)
{ "title", (void*)MapSelect_LoadTitle, 0 },
#if PLATFORM_N64
{ "64DD TEST n64dd_SetDiskVersion(1)", (void*)func_80800AD0_unknown, 0 },
{ "64DD TEST2 n64dd_SetDiskVersion(0)", (void*)func_80800B08_unknown, 0 },
#endif
};
void MapSelect_UpdateMenu(MapSelectState* 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.save.linkAge = LINK_AGE_CHILD;
} else {
gSaveContext.save.linkAge = LINK_AGE_ADULT;
}
}
if (CHECK_BTN_ALL(input->press.button, BTN_Z)) {
if (gSaveContext.save.cutsceneIndex == 0x8000) {
gSaveContext.save.cutsceneIndex = 0;
} else if (gSaveContext.save.cutsceneIndex == 0) {
gSaveContext.save.cutsceneIndex = 0xFFF0;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF0) {
gSaveContext.save.cutsceneIndex = 0xFFF1;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF1) {
gSaveContext.save.cutsceneIndex = 0xFFF2;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF2) {
gSaveContext.save.cutsceneIndex = 0xFFF3;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF3) {
gSaveContext.save.cutsceneIndex = 0xFFF4;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF4) {
gSaveContext.save.cutsceneIndex = 0xFFF5;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF5) {
gSaveContext.save.cutsceneIndex = 0xFFF6;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF6) {
gSaveContext.save.cutsceneIndex = 0xFFF7;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF7) {
gSaveContext.save.cutsceneIndex = 0xFFF8;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF8) {
gSaveContext.save.cutsceneIndex = 0xFFF9;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF9) {
gSaveContext.save.cutsceneIndex = 0xFFFA;
} else if (gSaveContext.save.cutsceneIndex == 0xFFFA) {
gSaveContext.save.cutsceneIndex = 0x8000;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_R)) {
if (gSaveContext.save.cutsceneIndex == 0x8000) {
gSaveContext.save.cutsceneIndex = 0xFFFA;
} else if (gSaveContext.save.cutsceneIndex == 0) {
gSaveContext.save.cutsceneIndex = 0x8000;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF0) {
gSaveContext.save.cutsceneIndex = 0;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF1) {
gSaveContext.save.cutsceneIndex = 0xFFF0;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF2) {
gSaveContext.save.cutsceneIndex = 0xFFF1;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF3) {
gSaveContext.save.cutsceneIndex = 0xFFF2;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF4) {
gSaveContext.save.cutsceneIndex = 0xFFF3;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF5) {
gSaveContext.save.cutsceneIndex = 0xFFF4;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF6) {
gSaveContext.save.cutsceneIndex = 0xFFF5;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF7) {
gSaveContext.save.cutsceneIndex = 0xFFF6;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF8) {
gSaveContext.save.cutsceneIndex = 0xFFF7;
} else if (gSaveContext.save.cutsceneIndex == 0xFFF9) {
gSaveContext.save.cutsceneIndex = 0xFFF8;
} else if (gSaveContext.save.cutsceneIndex == 0xFFFA) {
gSaveContext.save.cutsceneIndex = 0xFFF9;
}
}
gSaveContext.save.nightFlag = 0;
if (gSaveContext.save.cutsceneIndex == 0) {
gSaveContext.save.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_PlaySfxGeneral(NA_SE_IT_SWORD_IMPACT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
this->verticalInput = R_UPDATE_RATE;
}
}
if (CHECK_BTN_ALL(input->cur.button, BTN_DUP) && this->timerUp == 0) {
Audio_PlaySfxGeneral(NA_SE_IT_SWORD_IMPACT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
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_PlaySfxGeneral(NA_SE_IT_SWORD_IMPACT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
this->verticalInput = -R_UPDATE_RATE;
}
}
if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN) && (this->timerDown == 0)) {
Audio_PlaySfxGeneral(NA_SE_IT_SWORD_IMPACT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
this->verticalInput = -R_UPDATE_RATE * 3;
}
if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT) || CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) {
Audio_PlaySfxGeneral(NA_SE_IT_SWORD_IMPACT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
this->verticalInput = R_UPDATE_RATE;
}
if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT) || CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) {
Audio_PlaySfxGeneral(NA_SE_IT_SWORD_IMPACT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
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;
}
}
void MapSelect_PrintMenu(MapSelectState* 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);
}
name = this->scenes[scene].name;
if (name == NULL) {
name = "**Null**";
}
GfxPrint_Printf(printer, "%s", name);
};
GfxPrint_SetColor(printer, 155, 55, 150, 255);
GfxPrint_SetPos(printer, 20, 26);
GfxPrint_Printf(printer, "OPT=%d", this->opt);
}
static const char* sLoadingMessages[] = {
// "Please wait a minute"
GFXP_HIRAGANA "シバラクオマチクダサイ",
// "Hold on a sec"
GFXP_HIRAGANA "チョット マッテネ",
// "Wait a moment"
GFXP_KATAKANA "ウェイト ア モーメント",
// "Loading"
GFXP_KATAKANA "ロード" GFXP_HIRAGANA "チュウ",
// "Now working"
GFXP_HIRAGANA "ナウ ワーキング",
// "Now creating"
GFXP_HIRAGANA "イマ ツクッテマス",
// "It's not broken"
GFXP_HIRAGANA "コショウジャナイヨ",
// "Coffee Break"
GFXP_KATAKANA "コーヒー ブレイク",
// "Please set B side"
GFXP_KATAKANA "Bメンヲセットシテクダサイ",
// "Be patient, now"
GFXP_HIRAGANA "ジット" GFXP_KATAKANA "ガマン" GFXP_HIRAGANA "" GFXP_KATAKANA "" GFXP_HIRAGANA "デアッタ",
// "Please wait just a minute"
GFXP_HIRAGANA "イマシバラクオマチクダサイ",
// "Don't worry, don't worry. Take a break, take a break."
GFXP_HIRAGANA "アワテナイアワテナイ。ヒトヤスミヒトヤスミ。",
};
void MapSelect_PrintLoadingMessage(MapSelectState* this, GfxPrint* printer) {
s32 randomMsg;
GfxPrint_SetPos(printer, 10, 15);
GfxPrint_SetColor(printer, 255, 255, 255, 255);
randomMsg = Rand_ZeroOne() * ARRAY_COUNT(sLoadingMessages);
GfxPrint_Printf(printer, "%s", sLoadingMessages[randomMsg]);
}
static const char* sAgeLabels[] = {
GFXP_HIRAGANA "17(ワカモノ)", // "17(young)"
GFXP_HIRAGANA "5(ワカスギ)", // "5(very young)"
};
void MapSelect_PrintAgeSetting(MapSelectState* this, GfxPrint* printer, s32 age) {
GfxPrint_SetPos(printer, 4, 26);
GfxPrint_SetColor(printer, 255, 255, 55, 255);
GfxPrint_Printf(printer, "Age:%s", sAgeLabels[age]);
}
void MapSelect_PrintCutsceneSetting(MapSelectState* this, GfxPrint* printer, u16 csIndex) {
char* label;
GfxPrint_SetPos(printer, 4, 25);
GfxPrint_SetColor(printer, 255, 255, 55, 255);
switch (csIndex) {
case 0:
label = GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン";
gSaveContext.save.dayTime = CLOCK_TIME(0, 0);
break;
case 0x8000:
// clang-format off
gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ";
// clang-format on
break;
case 0xFFF0:
// clang-format off
gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = "デモ00";
// clang-format on
break;
case 0xFFF1:
label = "デモ01";
break;
case 0xFFF2:
label = "デモ02";
break;
case 0xFFF3:
label = "デモ03";
break;
case 0xFFF4:
label = "デモ04";
break;
case 0xFFF5:
label = "デモ05";
break;
case 0xFFF6:
label = "デモ06";
break;
case 0xFFF7:
label = "デモ07";
break;
case 0xFFF8:
label = "デモ08";
break;
case 0xFFF9:
label = "デモ09";
break;
case 0xFFFA:
label = "デモ0A";
break;
};
gSaveContext.skyboxTime = gSaveContext.save.dayTime;
GfxPrint_Printf(printer, "Stage:" GFXP_KATAKANA "%s", label);
}
void MapSelect_DrawMenu(MapSelectState* this) {
GraphicsContext* gfxCtx = this->state.gfxCtx;
GfxPrint* printer;
OPEN_DISPS(gfxCtx, "../z_select.c", 930);
gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
Gfx_SetupFrame(gfxCtx, 0, 0, 0);
SET_FULLSCREEN_VIEWPORT(&this->view);
View_Apply(&this->view, VIEW_ALL);
Gfx_SetupDL_28Opa(gfxCtx);
printer = alloca(sizeof(GfxPrint));
GfxPrint_Init(printer);
GfxPrint_Open(printer, POLY_OPA_DISP);
MapSelect_PrintMenu(this, printer);
MapSelect_PrintAgeSetting(this, printer, ((void)0, gSaveContext.save.linkAge));
MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutsceneIndex));
POLY_OPA_DISP = GfxPrint_Close(printer);
GfxPrint_Destroy(printer);
CLOSE_DISPS(gfxCtx, "../z_select.c", 966);
}
void MapSelect_DrawLoadingScreen(MapSelectState* this) {
GraphicsContext* gfxCtx = this->state.gfxCtx;
GfxPrint* printer;
OPEN_DISPS(gfxCtx, "../z_select.c", 977);
gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
Gfx_SetupFrame(gfxCtx, 0, 0, 0);
SET_FULLSCREEN_VIEWPORT(&this->view);
View_Apply(&this->view, VIEW_ALL);
Gfx_SetupDL_28Opa(gfxCtx);
printer = alloca(sizeof(GfxPrint));
GfxPrint_Init(printer);
GfxPrint_Open(printer, POLY_OPA_DISP);
MapSelect_PrintLoadingMessage(this, printer);
POLY_OPA_DISP = GfxPrint_Close(printer);
GfxPrint_Destroy(printer);
CLOSE_DISPS(gfxCtx, "../z_select.c", 1006);
}
void MapSelect_Draw(MapSelectState* this) {
GraphicsContext* gfxCtx = this->state.gfxCtx;
OPEN_DISPS(gfxCtx, "../z_select.c", 1013);
gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
Gfx_SetupFrame(gfxCtx, 0, 0, 0);
SET_FULLSCREEN_VIEWPORT(&this->view);
View_Apply(&this->view, VIEW_ALL);
if (!this->state.running) {
MapSelect_DrawLoadingScreen(this);
} else {
MapSelect_DrawMenu(this);
}
CLOSE_DISPS(gfxCtx, "../z_select.c", 1037);
}
void MapSelect_Main(GameState* thisx) {
MapSelectState* this = (MapSelectState*)thisx;
MapSelect_UpdateMenu(this);
MapSelect_Draw(this);
}
void MapSelect_Destroy(GameState* thisx) {
PRINTF("%c", BEL);
// "view_cleanup will hang, so it won't be called"
PRINTF("*** view_cleanupはハングアップするので、呼ばない ***\n");
}
void MapSelect_Init(GameState* thisx) {
MapSelectState* this = (MapSelectState*)thisx;
this->state.main = MapSelect_Main;
this->state.destroy = MapSelect_Destroy;
this->scenes = sScenes;
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;
this->count = ARRAY_COUNT(sScenes);
View_Init(&this->view, this->state.gfxCtx);
this->view.flags = (VIEW_PROJECTION_ORTHO | VIEW_VIEWPORT);
this->verticalInputAccumulator = 0;
this->verticalInput = 0;
this->timerUp = 0;
this->timerDown = 0;
this->lockUp = 0;
this->lockDown = 0;
this->unk_234 = 0;
if ((dREG(80) >= 0) && (dREG(80) < this->count)) {
this->currentScene = dREG(80);
this->topDisplayedScene = dREG(81);
this->pageDownIndex = dREG(82);
}
R_UPDATE_RATE = 1;
{
u32 size = (uintptr_t)_z_select_staticSegmentRomEnd - (uintptr_t)_z_select_staticSegmentRomStart;
this->staticSegment = GAME_STATE_ALLOC(&this->state, size, "../z_select.c", 1114);
DMA_REQUEST_SYNC(this->staticSegment, (uintptr_t)_z_select_staticSegmentRomStart, size, "../z_select.c", 1115);
}
gSaveContext.save.cutsceneIndex = 0x8000;
gSaveContext.save.linkAge = LINK_AGE_CHILD;
}