From 291973fffeb9c5c41e9269d5731c296edd2f1771 Mon Sep 17 00:00:00 2001 From: inspectredc <78732756+inspectredc@users.noreply.github.com> Date: Tue, 28 May 2024 19:14:39 +0100 Subject: [PATCH 01/21] Use HOOK_ID typedef (#581) --- mm/2s2h/Enhancements/Camera/DebugCam.cpp | 4 ++-- mm/2s2h/Enhancements/Camera/FreeLook.cpp | 4 ++-- mm/2s2h/Enhancements/Cheats/MoonJump.cpp | 2 +- mm/2s2h/Enhancements/Saving/SavingEnhancements.cpp | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mm/2s2h/Enhancements/Camera/DebugCam.cpp b/mm/2s2h/Enhancements/Camera/DebugCam.cpp index 0014a3f5d..c166576ce 100644 --- a/mm/2s2h/Enhancements/Camera/DebugCam.cpp +++ b/mm/2s2h/Enhancements/Camera/DebugCam.cpp @@ -214,8 +214,8 @@ void Camera_DebugCam(Camera* camera) { *eye = *eyeNext; } -static uint32_t freeCamVBHookId = 0; -static uint32_t freeCamDisableInputsId = 0; +static HOOK_ID freeCamVBHookId = 0; +static HOOK_ID freeCamDisableInputsId = 0; void RegisterDebugCam() { sDebugCamRefreshParams = true; diff --git a/mm/2s2h/Enhancements/Camera/FreeLook.cpp b/mm/2s2h/Enhancements/Camera/FreeLook.cpp index 63a94f0d0..b7e26e51c 100644 --- a/mm/2s2h/Enhancements/Camera/FreeLook.cpp +++ b/mm/2s2h/Enhancements/Camera/FreeLook.cpp @@ -144,8 +144,8 @@ bool Camera_CanFreeLook(Camera* camera) { return sCanFreeLook; } -static uint32_t freeLookCameraSettingChangeHookId = 0; -static uint32_t freeLookCameraVBHookId = 0; +static HOOK_ID freeLookCameraSettingChangeHookId = 0; +static HOOK_ID freeLookCameraVBHookId = 0; void RegisterCameraFreeLook() { if (freeLookCameraVBHookId) { diff --git a/mm/2s2h/Enhancements/Cheats/MoonJump.cpp b/mm/2s2h/Enhancements/Cheats/MoonJump.cpp index f1cb173f8..5dc2a3033 100644 --- a/mm/2s2h/Enhancements/Cheats/MoonJump.cpp +++ b/mm/2s2h/Enhancements/Cheats/MoonJump.cpp @@ -3,7 +3,7 @@ #include "Enhancements/GameInteractor/GameInteractor.h" #include "variables.h" -static uint32_t moonJumpOnLGameStateUpdateHookId = 0; +static HOOK_ID moonJumpOnLGameStateUpdateHookId = 0; void RegisterMoonJumpOnL() { if (moonJumpOnLGameStateUpdateHookId) { GameInteractor::Instance->UnregisterGameHook( diff --git a/mm/2s2h/Enhancements/Saving/SavingEnhancements.cpp b/mm/2s2h/Enhancements/Saving/SavingEnhancements.cpp index ed8171cc9..860ee49c3 100644 --- a/mm/2s2h/Enhancements/Saving/SavingEnhancements.cpp +++ b/mm/2s2h/Enhancements/Saving/SavingEnhancements.cpp @@ -12,8 +12,8 @@ static uint32_t iconTimer = 0; static uint64_t currentTimestamp = 0; static uint64_t lastSaveTimestamp = GetUnixTimestamp(); -static uint32_t autosaveGameStateUpdateHookId = 0; -static uint32_t autosaveGameStateDrawFinishHookId = 0; +static HOOK_ID autosaveGameStateUpdateHookId = 0; +static HOOK_ID autosaveGameStateDrawFinishHookId = 0; // Used for saving through Autosaves and Pause Menu saves. extern "C" int32_t GetSaveEntrance(PlayState* play) { From e484e0ba825e67402e4ca0e2b49eaaa2c2fbecdc Mon Sep 17 00:00:00 2001 From: Qlonever <42286723+Qlonever@users.noreply.github.com> Date: Thu, 30 May 2024 22:36:14 -0400 Subject: [PATCH 02/21] fix control code logic (#586) --- mm/2s2h/BenGui/BenMenuBar.cpp | 4 ++++ mm/src/code/z_message_nes.c | 30 ++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 5cea0a443..1807a9a56 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -496,6 +496,10 @@ void DrawEnhancementsMenu() { { .tooltip = "Fixes a crash that can occur when performing a HESS or Weirdshot.", .defaultValue = true }); + UIWidgets::CVarCheckbox("Fix Text Control Characters", "gEnhancements.Fixes.ControlCharacters", + { .tooltip = "Fixes certain control characters not functioning properly " + "depending on their position within the text." }); + ImGui::EndMenu(); } diff --git a/mm/src/code/z_message_nes.c b/mm/src/code/z_message_nes.c index 7e6b43852..266549e83 100644 --- a/mm/src/code/z_message_nes.c +++ b/mm/src/code/z_message_nes.c @@ -431,7 +431,10 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; } - if ((i + 1) == msgCtx->textDrawPos) { + if ((i + 1) == msgCtx->textDrawPos || + // 2S2H [Enhancement] To match how PAL and GC fixed character parsing, any code that checks for + // (i + 1) == msgCtx->textDrawPos should also check for (i + 2) == msgCtx->textDrawPos + ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) { msgCtx->textDrawPos++; } break; @@ -495,7 +498,8 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { msgCtx->textColorB = D_801D080C[(s16)((u8)character - 1)].b; } - if ((i + 1) == msgCtx->textDrawPos) { + if ((i + 1) == msgCtx->textDrawPos || + ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) { msgCtx->textDrawPos++; } break; @@ -554,7 +558,8 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { return; case 0x17: // MESSAGE_QUICKTEXT_ENABLE - if ((i + 1) == msgCtx->textDrawPos) { + if ((i + 1) == msgCtx->textDrawPos || + ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) { if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) || ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26))) { j = i; @@ -621,19 +626,24 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { return; case 0x1E: // MESSAGE_SFX - if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + if (((i + 1) == msgCtx->textDrawPos || + ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) && + (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8; stateTimerHi += (uint8_t)msgCtx->decodedBuffer.schar[i + 2]; Audio_PlaySfx(stateTimerHi); } - if ((i + 1) == msgCtx->textDrawPos) { + if ((i + 1) == msgCtx->textDrawPos || + ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) { msgCtx->textDrawPos += 2; } i += 2; break; case 0x1F: - if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + if (((i + 1) == msgCtx->textDrawPos || + ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) && + (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { msgCtx->msgMode = MSGMODE_9; stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8; stateTimerHi += msgCtx->decodedBuffer.schar[i + 2]; @@ -654,7 +664,9 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { case 0x5: case 0x6: msgCtx->textDelay = (u8)character - 0x0; - if ((i + 1) == msgCtx->textDrawPos) { + if ((i + 1) == msgCtx->textDrawPos || + ((i + 2) == msgCtx->textDrawPos && + CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0))) { msgCtx->textDrawPos++; } break; @@ -851,7 +863,9 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { default: break; } - if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) { + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && + ((i + 1) == msgCtx->textDrawPos || + ((i + 2) == msgCtx->textDrawPos && CVarGetInteger("gEnhancements.Fixes.ControlCharacters", 0)))) { Audio_PlaySfx(NA_SE_NONE); } From 53e76c5aeb7f4574ba9f9101f83ba1415d1dc0fc Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Sun, 2 Jun 2024 20:10:08 -0500 Subject: [PATCH 03/21] Add time-moves-when-you-move mode (#536) --- mm/2s2h/BenGui/BenMenuBar.cpp | 4 +++ mm/2s2h/Enhancements/Enhancements.cpp | 1 + mm/2s2h/Enhancements/Enhancements.h | 1 + .../Modes/TimeMovesWhenYouMove.cpp | 31 +++++++++++++++++++ .../Enhancements/Modes/TimeMovesWhenYouMove.h | 6 ++++ 5 files changed, 43 insertions(+) create mode 100644 mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.cpp create mode 100644 mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.h diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index ae63ead7b..056fbd055 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -10,6 +10,7 @@ #include "2s2h/Enhancements/Enhancements.h" #include "2s2h/Enhancements/Graphics/MotionBlur.h" #include "2s2h/Enhancements/Graphics/PlayAsKafei.h" +#include "2s2h/Enhancements/Modes/TimeMovesWhenYouMove.h" #include "2s2h/DeveloperTools/DeveloperTools.h" #include "2s2h/DeveloperTools/WarpPoint.h" #include "HudEditor.h" @@ -539,6 +540,9 @@ void DrawEnhancementsMenu() { if (UIWidgets::BeginMenu("Modes")) { UIWidgets::CVarCheckbox("Play As Kafei", "gModes.PlayAsKafei", { .tooltip = "Requires scene reload to take effect." }); + if (UIWidgets::CVarCheckbox("Time Moves When You Move", "gModes.TimeMovesWhenYouMove")) { + RegisterTimeMovesWhenYouMove(); + } ImGui::EndMenu(); } if (UIWidgets::BeginMenu("Player Movement")) { diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index c71ab37af..c7623e6a6 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -42,6 +42,7 @@ void InitEnhancements() { // Modes RegisterPlayAsKafei(); + RegisterTimeMovesWhenYouMove(); // Player Movement RegisterClimbSpeed(); diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 3a6a303b6..673aa3fd1 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -23,6 +23,7 @@ #include "PlayerMovement/ClimbSpeed.h" #include "Songs/EnableSunsSong.h" #include "Saving/SavingEnhancements.h" +#include "Modes/TimeMovesWhenYouMove.h" enum AlwaysWinDoggyRaceOptions { ALWAYS_WIN_DOGGY_RACE_OFF, diff --git a/mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.cpp b/mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.cpp new file mode 100644 index 000000000..8c56f8b8c --- /dev/null +++ b/mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.cpp @@ -0,0 +1,31 @@ +#include "TimeMovesWhenYouMove.h" +#include "libultraship/libultraship.h" +#include "2s2h/Enhancements/GameInteractor/GameInteractor.h" + +extern "C" { +#include "macros.h" +#include "z64.h" +extern PlayState* gPlayState; +extern SaveContext gSaveContext; +} + +static HOOK_ID onActorUpdateHookId = 0; + +void RegisterTimeMovesWhenYouMove() { + GameInteractor::Instance->UnregisterGameHookForID(onActorUpdateHookId); + onActorUpdateHookId = 0; + gSaveContext.save.timeSpeedOffset = 0; + + if (CVarGetInteger("gModes.TimeMovesWhenYouMove", 0)) { + onActorUpdateHookId = GameInteractor::Instance->RegisterGameHookForID( + ACTOR_PLAYER, [](Actor* actor) { + Player* player = GET_PLAYER(gPlayState); + + gSaveContext.save.timeSpeedOffset = -R_TIME_SPEED; + if (player->linearVelocity != 0) { + gSaveContext.save.timeSpeedOffset = + CLAMP(player->linearVelocity / 2 - R_TIME_SPEED, -R_TIME_SPEED, 10); + } + }); + } +} diff --git a/mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.h b/mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.h new file mode 100644 index 000000000..15532cd21 --- /dev/null +++ b/mm/2s2h/Enhancements/Modes/TimeMovesWhenYouMove.h @@ -0,0 +1,6 @@ +#ifndef MODES_TIME_MOVES_WHEN_YOU_MOVE_H +#define MODES_TIME_MOVES_WHEN_YOU_MOVE_H + +void RegisterTimeMovesWhenYouMove(); + +#endif // MODES_TIME_MOVES_WHEN_YOU_MOVE_H From 888b8fe24acf2595e3c9e0f1735bfcada19ddf0a Mon Sep 17 00:00:00 2001 From: Caladius Date: Sun, 2 Jun 2024 21:18:16 -0400 Subject: [PATCH 04/21] Skip Magic Arrow Equip Animation (#546) * Recreate Magic Equip Animation Skip PR for new Fork. * After Running Clang Powershell Script * Delete clang-format.exe * Apply suggestions from code review --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 6 ++++++ mm/2s2h/Enhancements/Enhancements.cpp | 3 +++ mm/2s2h/Enhancements/Enhancements.h | 1 + .../Equipment/SkipMagicArrowEquip.cpp | 21 +++++++++++++++++++ .../Equipment/SkipMagicArrowEquip.h | 6 ++++++ .../GameInteractor/GameInteractor.cpp | 4 ++++ .../GameInteractor/GameInteractor.h | 3 +++ .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 3 +++ 8 files changed, 47 insertions(+) create mode 100644 mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.cpp create mode 100644 mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.h diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 056fbd055..af1bcc826 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -490,6 +490,12 @@ void DrawEnhancementsMenu() { ImGui::EndMenu(); } + if (UIWidgets::BeginMenu("Equipment")) { + UIWidgets::CVarCheckbox("Fast Magic Arrow Equip Animation", "gEnhancements.Equipment.MagicArrowEquipSpeed", + { .tooltip = "Removes the animation for equipping Magic Arrows." }); + ImGui::EndMenu(); + } + if (UIWidgets::BeginMenu("Fixes")) { UIWidgets::CVarCheckbox("Fix Ammo Count Color", "gFixes.FixAmmoCountEnvColor", { .tooltip = "Fixes a missing gDPSetEnvColor, which causes the ammo count to be " diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index c7623e6a6..6896637ce 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -20,6 +20,9 @@ void InitEnhancements() { RegisterSavingEnhancements(); RegisterAutosave(); + // Equipment + RegisterSkipMagicArrowEquip(); + // Masks RegisterFastTransformation(); RegisterFierceDeityAnywhere(); diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 673aa3fd1..b4be56a95 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -10,6 +10,7 @@ #include "Cheats/UnbreakableRazorSword.h" #include "Cheats/UnrestrictedItems.h" #include "Cycle/EndOfCycle.h" +#include "Equipment/SkipMagicArrowEquip.h" #include "Masks/FierceDeityAnywhere.h" #include "Masks/NoBlastMaskCooldown.h" #include "Masks/FastTransformation.h" diff --git a/mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.cpp b/mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.cpp new file mode 100644 index 000000000..299748061 --- /dev/null +++ b/mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.cpp @@ -0,0 +1,21 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" +#include "z64.h" +#include "src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" + +extern "C" { +extern s16 sEquipState; +extern s16 sEquipAnimTimer; +} + +void RegisterSkipMagicArrowEquip() { + GameInteractor::Instance->RegisterGameHook([](PauseContext* pauseCtx) { + if (CVarGetInteger("gEnhancements.Equipment.MagicArrowEquipSpeed", 0)) { + if (sEquipState == EQUIP_STATE_MAGIC_ARROW_GROW_ORB) { + sEquipState = EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT; + sEquipAnimTimer = 2; + pauseCtx->equipAnimAlpha = 255; + } + } + }); +} diff --git a/mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.h b/mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.h new file mode 100644 index 000000000..2c96b97b9 --- /dev/null +++ b/mm/2s2h/Enhancements/Equipment/SkipMagicArrowEquip.h @@ -0,0 +1,6 @@ +#ifndef EQUIPMENT_SKIP_MAGIC_ARROW_EQUIP_H +#define EQUIPMENT_SKIP_MAGIC_ARROW_EQUIP_H + +void RegisterSkipMagicArrowEquip(); + +#endif // EQUIPMENT_SKIP_MAGIC_ARROW_EQUIP_H diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp index 20ddcf6ba..ae7eda45d 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp @@ -19,6 +19,10 @@ void GameInteractor_ExecuteOnGameStateUpdate() { GameInteractor::Instance->ExecuteHooks(); } +void GameInteractor_ExecuteOnKaleidoUpdate(PauseContext* pauseCtx) { + GameInteractor::Instance->ExecuteHooks(pauseCtx); +} + void GameInteractor_ExecuteOnSaveInit(s16 fileNum) { GameInteractor::Instance->ExecuteHooks(fileNum); } diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h index c6a44249d..873f5bf61 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h @@ -7,6 +7,7 @@ extern "C" { #endif #include "z64actor.h" #include "z64camera.h" +#include "z64.h" #ifdef __cplusplus } #endif @@ -254,6 +255,7 @@ class GameInteractor { DEFINE_HOOK(OnGameStateMainFinish, ()); DEFINE_HOOK(OnGameStateDrawFinish, ()); DEFINE_HOOK(OnGameStateUpdate, ()); + DEFINE_HOOK(OnKaleidoUpdate, (PauseContext * pauseCtx)); DEFINE_HOOK(OnSaveInit, (s16 fileNum)); DEFINE_HOOK(BeforeEndOfCycleSave, ()); DEFINE_HOOK(AfterEndOfCycleSave, ()); @@ -296,6 +298,7 @@ extern "C" { void GameInteractor_ExecuteOnGameStateMainFinish(); void GameInteractor_ExecuteOnGameStateDrawFinish(); void GameInteractor_ExecuteOnGameStateUpdate(); +void GameInteractor_ExecuteOnKaleidoUpdate(PauseContext* pauseCtx); void GameInteractor_ExecuteOnSaveInit(s16 fileNum); void GameInteractor_ExecuteBeforeEndOfCycleSave(); void GameInteractor_ExecuteAfterEndOfCycleSave(); diff --git a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 071f4d208..0ba1082f2 100644 --- a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -22,6 +22,8 @@ #include "2s2h_assets.h" +#include "2s2h/Enhancements/GameInteractor/GameInteractor.h" + // Page Textures (Background of Page): // Broken up into multiple textures. // Numbered by column/row. @@ -4231,4 +4233,5 @@ void KaleidoScope_Update(PlayState* play) { if ((pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY_INIT) || (pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY)) { KaleidoScope_UpdateInventoryEditor(play); } + GameInteractor_ExecuteOnKaleidoUpdate(pauseCtx); } From 26321c9a173de63fbc1cd9d17bc9e10f4f0f00fa Mon Sep 17 00:00:00 2001 From: Caladius Date: Sun, 2 Jun 2024 22:18:17 -0400 Subject: [PATCH 05/21] Adds Dungeon Items to the Save Editor (#585) * Adds Dungeon Items to the Save Editor * clang'd up * Update mm/include/z64save.h Co-authored-by: Garrett Cox * Move a few static arrays --------- Co-authored-by: Garrett Cox --- mm/2s2h/DeveloperTools/SaveEditor.cpp | 125 ++++++++++++++++++++++++++ mm/include/z64save.h | 2 + 2 files changed, 127 insertions(+) diff --git a/mm/2s2h/DeveloperTools/SaveEditor.cpp b/mm/2s2h/DeveloperTools/SaveEditor.cpp index 007f29d0e..7645708bc 100644 --- a/mm/2s2h/DeveloperTools/SaveEditor.cpp +++ b/mm/2s2h/DeveloperTools/SaveEditor.cpp @@ -2,6 +2,9 @@ #include "2s2h/BenGui/UIWidgets.hpp" #include "2s2h/Enhancements/GameInteractor/GameInteractor.h" +#include "interface/icon_item_dungeon_static/icon_item_dungeon_static.h" +#include "archives/icon_item_24_static/icon_item_24_static_yar.h" + extern "C" { #include #include @@ -280,6 +283,15 @@ void DrawGeneralTab() { gSaveContext.save.saveInfo.playerData.isMagicAcquired = false; gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = false; } + ImGui::SameLine(); + bool spinAttack = CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK); + if (UIWidgets::Checkbox("Spin Lv2", &spinAttack, { .color = UIWidgets::Colors::DarkGreen })) { + if (spinAttack) { + SET_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK); + } else { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK); + } + } UIWidgets::PushStyleSlider(UIWidgets::Colors::DarkGreen); if (ImGui::SliderScalar("##magicLevelSlider", ImGuiDataType_S8, &gSaveContext.save.saveInfo.playerData.magicLevel, &S8_ZERO, &MAGIC_LEVEL_MAX, @@ -947,6 +959,101 @@ void DrawQuestStatusTab() { ImGui::PopStyleColor(1); } +void SetDungeonItems(uint32_t dungeonItem, uint32_t dungeonId) { + if (CHECK_DUNGEON_ITEM(dungeonItem, dungeonId)) { + REMOVE_DUNGEON_ITEM(dungeonItem, dungeonId); + } else { + SET_DUNGEON_ITEM(dungeonItem, dungeonId); + } +} + +const char* dungeonNames[4] = { "Woodfall Temple", "Snowhead Temple", "Great Bay Temple", "Stone Tower Temple" }; +uint32_t smallKeyCounts[4] = { 1, 3, 1, 4 }; +const char* fairyIcons[] = { gDungeonStrayFairyWoodfallIconTex, gDungeonStrayFairySnowheadIconTex, + gDungeonStrayFairyGreatBayIconTex, gDungeonStrayFairyStoneTowerIconTex }; +void DrawDungeonItemTab() { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.0f, 1.0f, 1.0f, 0.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 3.0f); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(8.0f, 8.0f)); + ImGui::BeginChild("dungeonTab", ImVec2(0, 0), true); + + for (int i = DUNGEON_INDEX_WOODFALL_TEMPLE; i <= DUNGEON_INDEX_STONE_TOWER_TEMPLE; i++) { + std::string stray_id = "Stray" + std::to_string(i); + std::string map_id = "Map" + std::to_string(i); + std::string comp_id = "Compass" + std::to_string(i); + std::string sKey_id = "Small Key" + std::to_string(i); + std::string bKey_id = "Boss Key" + std::to_string(i); + int dungeonId = i; + ImGui::BeginChild(std::to_string(i).c_str(), + ImVec2(INV_GRID_WIDTH * 6 + INV_GRID_PADDING * 2, INV_GRID_HEIGHT * 1.5 + INV_GRID_PADDING), + ImGuiChildFlags_Border); + ImGui::Text(dungeonNames[i]); + if (ImGui::ImageButton( + stray_id.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(fairyIcons[dungeonId]), + ImVec2(INV_GRID_ICON_SIZE, INV_GRID_ICON_SIZE), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), + ImVec4(1, 1, 1, gSaveContext.save.saveInfo.inventory.strayFairies[dungeonId] ? 1.0f : 0.4f))) { + ImGui::OpenPopup("strayFairies"); + } + ImGui::SameLine(); + if (ImGui::ImageButton( + map_id.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(gQuestIconDungeonMapTex), + ImVec2(INV_GRID_ICON_SIZE, INV_GRID_ICON_SIZE), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), + ImVec4(1, 1, 1, CHECK_DUNGEON_ITEM(DUNGEON_MAP, i) ? 1.0f : 0.4f))) { + SetDungeonItems(DUNGEON_MAP, i); + } + ImGui::SameLine(); + if (ImGui::ImageButton( + comp_id.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(gQuestIconCompassTex), + ImVec2(INV_GRID_ICON_SIZE, INV_GRID_ICON_SIZE), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), + ImVec4(1, 1, 1, CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, i) ? 1.0f : 0.4f))) { + SetDungeonItems(DUNGEON_COMPASS, i); + } + ImGui::SameLine(); + if (ImGui::ImageButton( + sKey_id.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(gQuestIconSmallKeyTex), + ImVec2(INV_GRID_ICON_SIZE, INV_GRID_ICON_SIZE), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), + ImVec4(1, 1, 1, DUNGEON_KEY_COUNT(i) + 1 ? 1.0f : 0.4f))) { + ImGui::OpenPopup("smallKeys"); + } + ImGui::SameLine(); + if (ImGui::ImageButton( + bKey_id.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(gQuestIconBossKeyTex), + ImVec2(INV_GRID_ICON_SIZE, INV_GRID_ICON_SIZE), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), + ImVec4(1, 1, 1, CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, i) ? 1.0f : 0.4f))) { + SetDungeonItems(DUNGEON_BOSS_KEY, i); + } + if (ImGui::BeginPopup("strayFairies")) { + s32 minStray = 0; + s32 maxStray = 15; + int currentStrays = gSaveContext.save.saveInfo.inventory.strayFairies[dungeonId]; + if (ImGui::SliderScalar("##strayCount", ImGuiDataType_S32, ¤tStrays, &minStray, &maxStray, + "Strays: %d")) { + gSaveContext.save.saveInfo.inventory.strayFairies[dungeonId] = currentStrays; + } + ImGui::EndPopup(); + } + if (ImGui::BeginPopup("smallKeys")) { + s32 minKey = -1; + s32 maxKey = smallKeyCounts[dungeonId]; + int currentKeys = gSaveContext.save.saveInfo.inventory.dungeonKeys[dungeonId]; + if (ImGui::SliderScalar("##sKeyCount", ImGuiDataType_S32, ¤tKeys, &minKey, &maxKey, + "Small Keys: %d")) { + gSaveContext.save.saveInfo.inventory.dungeonKeys[dungeonId] = currentKeys; + } + ImGui::EndPopup(); + } + ImGui::EndChild(); + } + ImGui::EndChild(); + ImGui::PopStyleVar(2); + ImGui::PopStyleColor(1); +} + void GetPlayerForm(uint32_t form) { switch (form) { case PLAYER_FORM_FIERCE_DEITY: @@ -1694,6 +1801,11 @@ void SaveEditorWindow::DrawElement() { ImGui::EndTabItem(); } + if (ImGui::BeginTabItem("Dungeon Items")) { + DrawDungeonItemTab(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Reg Editor")) { DrawRegEditorTab(); ImGui::EndTabItem(); @@ -1720,6 +1832,15 @@ void SaveEditorWindow::DrawElement() { ImGui::End(); } +const char* textureLoad[8] = { gDungeonStrayFairyWoodfallIconTex, + gDungeonStrayFairySnowheadIconTex, + gDungeonStrayFairyGreatBayIconTex, + gDungeonStrayFairyStoneTowerIconTex, + gQuestIconDungeonMapTex, + gQuestIconCompassTex, + gQuestIconSmallKeyTex, + gQuestIconBossKeyTex }; + void SaveEditorWindow::InitElement() { initSafeItemsForInventorySlot(); @@ -1727,4 +1848,8 @@ void SaveEditorWindow::InitElement() { const char* path = static_cast(entry); Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(path, path, ImVec4(1, 1, 1, 1)); } + for (int i = 0; i <= 7; i++) { + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(textureLoad[i], textureLoad[i], + ImVec4(1, 1, 1, 1)); + } } diff --git a/mm/include/z64save.h b/mm/include/z64save.h index 5dc8c5f8f..73cc19e1f 100644 --- a/mm/include/z64save.h +++ b/mm/include/z64save.h @@ -526,6 +526,8 @@ typedef enum { #define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item]) #define CHECK_DUNGEON_ITEM_ALT(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) #define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item]) +// 2S2H [Enhancements] We added this for save editor +#define REMOVE_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] &= ~(u8)gBitFlags[item]) #define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonKeys[(void)0, dungeonIndex]) #define GET_DUNGEON_FLOOR_VISITED(sceneId, floor) (gSaveContext.save.saveInfo.permanentSceneFlags[(sceneId)].unk_14 & gBitFlags[floor]) #define SET_DUNGEON_FLOOR_VISITED(sceneId, floor) (gSaveContext.save.saveInfo.permanentSceneFlags[(sceneId)].unk_14 |= gBitFlags[floor]) From 139a240ed3424509eddbbef52f79292d4692a08c Mon Sep 17 00:00:00 2001 From: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> Date: Sun, 2 Jun 2024 22:32:19 -0400 Subject: [PATCH 06/21] [Graphics] Disable Black Bar Letterboxes (#590) * Black Bars be gone * Move it to draw/apply functions Updates in real time now * Added return instead * added space * Update mm/2s2h/Enhancements/Enhancements.cpp * Update mm/2s2h/Enhancements/Enhancements.cpp --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 5 +++++ mm/2s2h/Enhancements/Enhancements.cpp | 3 +++ mm/2s2h/Enhancements/Enhancements.h | 1 + mm/2s2h/Enhancements/GameInteractor/GameInteractor.h | 1 + mm/2s2h/Enhancements/Graphics/DisableBlackBars.cpp | 11 +++++++++++ mm/2s2h/Enhancements/Graphics/DisableBlackBars.h | 6 ++++++ mm/src/code/z_shrink_window.c | 5 +++++ mm/src/code/z_view.c | 5 +++++ 8 files changed, 37 insertions(+) create mode 100644 mm/2s2h/Enhancements/Graphics/DisableBlackBars.cpp create mode 100644 mm/2s2h/Enhancements/Graphics/DisableBlackBars.h diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index af1bcc826..f1f09cb4b 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -523,6 +523,11 @@ void DrawEnhancementsMenu() { "model and texture on the boot logo start screen" }); UIWidgets::CVarCheckbox("Bow Reticle", "gEnhancements.Graphics.BowReticle", { .tooltip = "Gives the bow a reticle when you draw an arrow" }); + UIWidgets::CVarCheckbox( + "Disable Black Bar Letterboxes", "gEnhancements.Graphics.DisableBlackBars", + { .tooltip = "Disables Black Bar Letterboxes during cutscenes and Z-targeting\nNote: there may be " + "minor visual glitches that were covered up by the black bars\nPlease disable this " + "setting before reporting a bug" }); ImGui::EndMenu(); } diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index 6896637ce..fe213e977 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -23,6 +23,9 @@ void InitEnhancements() { // Equipment RegisterSkipMagicArrowEquip(); + // Graphics + RegisterDisableBlackBars(); + // Masks RegisterFastTransformation(); RegisterFierceDeityAnywhere(); diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index b4be56a95..3461bda91 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -24,6 +24,7 @@ #include "PlayerMovement/ClimbSpeed.h" #include "Songs/EnableSunsSong.h" #include "Saving/SavingEnhancements.h" +#include "Graphics/DisableBlackBars.h" #include "Modes/TimeMovesWhenYouMove.h" enum AlwaysWinDoggyRaceOptions { diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h index 873f5bf61..fe10c1f29 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h @@ -52,6 +52,7 @@ typedef enum { GI_VB_TATL_INTERUPT_MSG6, GI_VB_ITEM_BE_RESTRICTED, GI_VB_FLIP_HOP_VARIABLE, + GI_VB_DISABLE_LETTERBOX, GI_VB_CLOCK_TOWER_OPENING_CONSIDER_THIS_FIRST_CYCLE, } GIVanillaBehavior; diff --git a/mm/2s2h/Enhancements/Graphics/DisableBlackBars.cpp b/mm/2s2h/Enhancements/Graphics/DisableBlackBars.cpp new file mode 100644 index 000000000..21466d732 --- /dev/null +++ b/mm/2s2h/Enhancements/Graphics/DisableBlackBars.cpp @@ -0,0 +1,11 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" +#include "DisableBlackBars.h" + +void RegisterDisableBlackBars() { + REGISTER_VB_SHOULD(GI_VB_DISABLE_LETTERBOX, { + if (CVarGetInteger("gEnhancements.Graphics.DisableBlackBars", 0)) { + *should = true; + } + }); +} diff --git a/mm/2s2h/Enhancements/Graphics/DisableBlackBars.h b/mm/2s2h/Enhancements/Graphics/DisableBlackBars.h new file mode 100644 index 000000000..fc5be3b3c --- /dev/null +++ b/mm/2s2h/Enhancements/Graphics/DisableBlackBars.h @@ -0,0 +1,6 @@ +#ifndef GRAPHICS_DISABLE_BLACK_BARS_H +#define GRAPHICS_DISABLE_BLACK_BARS_H + +void RegisterDisableBlackBars(); + +#endif // GRAPHICS_DISABLE_BLACK_BARS_H diff --git a/mm/src/code/z_shrink_window.c b/mm/src/code/z_shrink_window.c index a1e651d01..bca613366 100644 --- a/mm/src/code/z_shrink_window.c +++ b/mm/src/code/z_shrink_window.c @@ -7,6 +7,7 @@ #include "global.h" #include "z64shrink_window.h" #include +#include "Enhancements/GameInteractor/GameInteractor.h" #include "BenPort.h" @@ -79,6 +80,10 @@ void ShrinkWindow_Draw(GraphicsContext* gfxCtx) { s8 letterboxSize = sShrinkWindowPtr->letterboxSize; s8 pillarboxSize = sShrinkWindowPtr->pillarboxSize; + if (GameInteractor_Should(GI_VB_DISABLE_LETTERBOX, false, NULL)) { + return; + } + if (letterboxSize > 0) { OPEN_DISPS(gfxCtx); diff --git a/mm/src/code/z_view.c b/mm/src/code/z_view.c index 352e3c975..1e01a9cbc 100644 --- a/mm/src/code/z_view.c +++ b/mm/src/code/z_view.c @@ -2,6 +2,7 @@ #include "z64shrink_window.h" #include "z64view.h" #include "2s2h/Enhancements/FrameInterpolation/FrameInterpolation.h" +#include "Enhancements/GameInteractor/GameInteractor.h" s32 View_ApplyPerspective(View* view); s32 View_ApplyOrtho(View* view); @@ -159,6 +160,10 @@ void View_ApplyLetterbox(View* view) { s32 lrx; s32 lry; + if (GameInteractor_Should(GI_VB_DISABLE_LETTERBOX, false, NULL)) { + return; + } + OPEN_DISPS(view->gfxCtx); letterboxY = ShrinkWindow_Letterbox_GetSize(); From 03a597d44c5483eb3a6e033128935f08845cd188 Mon Sep 17 00:00:00 2001 From: Caladius Date: Sun, 2 Jun 2024 22:52:30 -0400 Subject: [PATCH 07/21] [Enhancement] Banker - Adds Min Max Functionality (#591) * Adds min and max functionality by pressing the R and Z buttons while the Deposit Rupees dialogue box is opened. * Place functionality behind a cvar. * clangified * I slished when i shoulda slashed! * removal of src/ * Typo in tooltip * Updated to dynamic hook registration and fix sfx spam. * clang * Remove double assignment. * Update to HOOK_ID and adds Withdrawal functionaility. * Updated currentTextId's to actual format. * Clangs * Move to dialogue menu --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 7 +- mm/2s2h/Enhancements/Dialogue/Dialogue.h | 6 ++ .../Dialogue/FastBankSelection.cpp | 86 +++++++++++++++++++ mm/2s2h/Enhancements/Enhancements.cpp | 3 + mm/2s2h/Enhancements/Enhancements.h | 1 + 5 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 mm/2s2h/Enhancements/Dialogue/Dialogue.h create mode 100644 mm/2s2h/Enhancements/Dialogue/FastBankSelection.cpp diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index f1f09cb4b..266bf22ed 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -332,7 +332,6 @@ extern std::shared_ptr mHudEditorWindow; void DrawEnhancementsMenu() { if (UIWidgets::BeginMenu("Enhancements")) { - if (UIWidgets::BeginMenu("Camera")) { ImGui::SeparatorText("Fixes"); UIWidgets::CVarCheckbox( @@ -475,7 +474,11 @@ void DrawEnhancementsMenu() { ImGui::EndMenu(); } - if (UIWidgets::BeginMenu("Dialogues")) { + if (UIWidgets::BeginMenu("Dialogue")) { + UIWidgets::CVarCheckbox( + "Fast Bank Selection", "gEnhancements.Dialogue.FastBankSelection", + { .tooltip = "Pressing the Z or R buttons while the Deposit/Withdrawl Rupees dialogue is open will set " + "the Rupees to Links current Rupees or 0 respectively." }); UIWidgets::CVarCheckbox( "Fast Text", "gEnhancements.Dialogue.FastText", { .tooltip = "Speeds up text rendering, and enables holding of B progress to next message" }); diff --git a/mm/2s2h/Enhancements/Dialogue/Dialogue.h b/mm/2s2h/Enhancements/Dialogue/Dialogue.h new file mode 100644 index 000000000..980e7d523 --- /dev/null +++ b/mm/2s2h/Enhancements/Dialogue/Dialogue.h @@ -0,0 +1,6 @@ +#ifndef DIALOGUES_H +#define DIALOGUES_H + +void RegisterFastBankSelection(); + +#endif // DIALOGUES_H \ No newline at end of file diff --git a/mm/2s2h/Enhancements/Dialogue/FastBankSelection.cpp b/mm/2s2h/Enhancements/Dialogue/FastBankSelection.cpp new file mode 100644 index 000000000..1035fb398 --- /dev/null +++ b/mm/2s2h/Enhancements/Dialogue/FastBankSelection.cpp @@ -0,0 +1,86 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" +#include "z64.h" +#include "global.h" + +#include "overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h" + +static const char zeroRupees[3] = { '0', '0', '0' }; + +void FastBankSelection_UpdateMessage(const char rupeeValue[3]) { + for (int i = 0; i <= 2; i++) { + gPlayState->msgCtx.decodedBuffer.schar[gPlayState->msgCtx.unk120C0 + i] = rupeeValue[i]; + Font_LoadCharNES(gPlayState, gPlayState->msgCtx.decodedBuffer.schar[gPlayState->msgCtx.unk120C0 + i], + gPlayState->msgCtx.unk120C4 + (i << 7)); + } + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); +} + +void RegisterFastBankSelection() { + GameInteractor::Instance->RegisterGameHookForID( + ACTOR_EN_GINKO_MAN, [](Actor* outerActor) { + static HOOK_ID enGinkoUpdateHook = 0; + static HOOK_ID enGinkoKillHook = 0; + GameInteractor::Instance->UnregisterGameHookForPtr(enGinkoUpdateHook); + GameInteractor::Instance->UnregisterGameHook(enGinkoKillHook); + enGinkoUpdateHook = 0; + enGinkoKillHook = 0; + + enGinkoUpdateHook = GameInteractor::Instance->RegisterGameHookForPtr( + (uintptr_t)outerActor, [](Actor* actor) { + EnGinkoMan* enGinko = (EnGinkoMan*)actor; + if (CVarGetInteger("gEnhancements.Dialogue.FastBankSelection", 0)) { + if (gPlayState->msgCtx.currentTextId == 0x450) { + if (CHECK_BTN_ALL(gPlayState->state.input[0].cur.button, BTN_Z) && + gPlayState->msgCtx.bankRupeesSelected != gSaveContext.save.saveInfo.playerData.rupees) { + char firstChar = (gSaveContext.save.saveInfo.playerData.rupees / 100) + '0'; + char secondChar = ((gSaveContext.save.saveInfo.playerData.rupees / 10) % 10) + '0'; + char thirdChar = (gSaveContext.save.saveInfo.playerData.rupees % 10) + '0'; + const char rupeeChar[3] = { firstChar, secondChar, thirdChar }; + + FastBankSelection_UpdateMessage(rupeeChar); + } + } else if (gPlayState->msgCtx.currentTextId == 0x46E) { + uint32_t walletSize = CUR_UPG_VALUE(UPG_WALLET); + uint32_t currentRupees = gSaveContext.save.saveInfo.playerData.rupees; + uint32_t maxWallet; + if (CHECK_BTN_ALL(gPlayState->state.input[0].cur.button, BTN_Z)) { + switch (ITEM_WALLET_DEFAULT + walletSize) { + case ITEM_WALLET_ADULT: + maxWallet = (200 - currentRupees); + break; + case ITEM_WALLET_GIANT: + maxWallet = (500 - currentRupees); + break; + default: + maxWallet = (99 - currentRupees); + break; + } + if (maxWallet != 0 && gPlayState->msgCtx.bankRupeesSelected != maxWallet) { + char firstChar = (maxWallet / 100) + '0'; + char secondChar = ((maxWallet / 10) % 10) + '0'; + char thirdChar = (maxWallet % 10) + '0'; + const char rupeeChar[3] = { firstChar, secondChar, thirdChar }; + + FastBankSelection_UpdateMessage(rupeeChar); + } + } + } + if (gPlayState->msgCtx.currentTextId == 0x450 || gPlayState->msgCtx.currentTextId == 0x46E) { + if (CHECK_BTN_ALL(gPlayState->state.input[0].cur.button, BTN_R) && + gPlayState->msgCtx.bankRupeesSelected != 0) { + + FastBankSelection_UpdateMessage(zeroRupees); + } + } + } + }); + enGinkoKillHook = + GameInteractor::Instance->RegisterGameHook([](s8 sceneId, s8 spawnNum) { + GameInteractor::Instance->UnregisterGameHook(enGinkoUpdateHook); + GameInteractor::Instance->UnregisterGameHook(enGinkoKillHook); + enGinkoUpdateHook = 0; + enGinkoKillHook = 0; + }); + }); +} \ No newline at end of file diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index fe213e977..87a119155 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -20,6 +20,9 @@ void InitEnhancements() { RegisterSavingEnhancements(); RegisterAutosave(); + // Dialogue + RegisterFastBankSelection(); + // Equipment RegisterSkipMagicArrowEquip(); diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 3461bda91..9b78c6aca 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -6,6 +6,7 @@ #include "Camera/FreeLook.h" #include "Cheats/MoonJump.h" #include "Cheats/Infinite.h" +#include "Dialogue/Dialogue.h" #include "Graphics/TextBasedClock.h" #include "Cheats/UnbreakableRazorSword.h" #include "Cheats/UnrestrictedItems.h" From 5de6a9ac8f9d9b339ac51e7cfdd5789298f5aced Mon Sep 17 00:00:00 2001 From: Malkierian Date: Sun, 2 Jun 2024 19:54:36 -0700 Subject: [PATCH 08/21] Add 2ship-specific BUILDING.md and supportedHashes.json. (#551) * Add 2ship-specific BUILDING.md and supportedHashes.json. * Somehow missed N64 hash. Shipwright -> 2ship2harkinian Ship.sln -> 2s2h.sln * Mac dependencies Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com> --------- Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com> --- docs/BUILDING.md | 229 ++++++++++++++++++++++++++++++++++++++ docs/supportedHashes.json | 10 ++ 2 files changed, 239 insertions(+) create mode 100644 docs/BUILDING.md create mode 100644 docs/supportedHashes.json diff --git a/docs/BUILDING.md b/docs/BUILDING.md new file mode 100644 index 000000000..24cd73f45 --- /dev/null +++ b/docs/BUILDING.md @@ -0,0 +1,229 @@ +# Building 2 Ship 2 Harkinian + +## Windows + +Requires: + * At least 8GB of RAM (machines with 4GB have seen complier failures) + * Visual Studio 2022 Community Edition with the C++ feature set + * One of the Windows SDKs that comes with Visual Studio, for example the current Windows 10 version 10.0.19041.0 + * The `MSVC v142 - VS 2019 C++ build tools` component of Visual Studio + * Python 3 (can be installed manually or as part of Visual Studio) + * Git (can be installed manually or as part of Visual Studio) + * Cmake (can be installed via chocolatey or manually) + +During installation, check the "Desktop development with C++" feature set: + +![image](https://user-images.githubusercontent.com/30329717/183511274-d11aceea-7900-46ec-acb6-3f2cc110021a.png) +Doing so should also check one of the Windows SDKs by default. Then, in the installation details in the right-hand column, make sure you also check the v142 toolset. + +You can also find the v142 toolset by searching through the individual components tab: + +![image](https://user-images.githubusercontent.com/30329717/183521169-ead6a73b-a1bf-4e99-aab8-441746d8f08e.png) +While you're there, you can also install Python 3 and Git if needed. + +1. Clone the 2 Ship 2 Harkinian repository + +_Note: Be sure to either clone with the ``--recursive`` flag or do ``git submodule init`` after cloning to pull in the libultraship submodule!_ + +2. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice + +_Note: Instructions assume using powershell_ +```powershell +# Navigate to the 2ship2harkinian repo within powershell. ie: cd "C:\yourpath\2ship2harkinian" +cd 2ship2harkinian + +# Setup cmake project +& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v142 -A x64 # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging) +# or for VS2019 +& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 16 2019" -T v142 -A x64 +# Extract assets & generate OTR (run this anytime you need to regenerate OTR) +& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target ExtractAssets # --config Release (if you're packaging) +# Compile project +& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 # --config Release (if you're packaging) + +# Now you can run the executable in .\build\x64 + +# If you need to clean the project you can run +& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target clean + +# If you need to regenerate the asset headers to check them into source +& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target ExtractAssetHeaders + +# If you need a newer 2ship.o2r only +& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target Generate2ShipOtr +``` + +### Developing 2S2H +With the cmake build system you have two options for working on the project: + +#### Visual Studio +To develop using Visual Studio you only need to use cmake to generate the solution file: +```powershell +# Generates 2s2h.sln at `build/x64` for Visual Studio 2022 +& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v142 -A x64 +# or for Visual Studio 2019 +& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 16 2019" -T v142 -A x64 +``` + +#### Visual Studio Code or another editor +To develop using Visual Studio Code or another editor you only need to open the repository in it. +To build you'll need to follow the instructions from the building section. + +_Note: If you're using Visual Studio Code, the [cpack plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._ + +_Experimental: You can also use another build system entirely rather than MSVC like [Ninja](https://ninja-build.org/) for possibly better performance._ + + +### Generating the distributable +After compiling the project you can generate the distributable by running: +```powershell +# Go to build folder +cd "build/x64" +# Generate +& 'C:\Program Files\CMake\bin\cpack.exe' -G ZIP +``` + +## Linux +### Install dependencies +#### Debian/Ubuntu +```sh +# using gcc +apt-get install gcc g++ git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev + +# or using clang +apt-get install clang git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev +``` +#### Arch +```sh +# using gcc +pacman -S gcc git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost + +# or using clang +pacman -S clang git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost +``` +#### Fedora +```sh +# using gcc +dnf install gcc gcc-c++ git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel boost-devel + +# or using clang +dnf install clang git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel boost-devel +``` +#### openSUSE +```sh +# using gcc +zypper in gcc gcc-c++ git cmake ninja SDL2-devel libpng16-devel libzip-devel libzip-tools nlohmann_json-devel tinyxml2-devel spdlog-devel + +# or using clang +zypper in clang libstdc++-devel git cmake ninja SDL2-devel libpng16-devel libzip-devel libzip-tools nlohmann_json-devel tinyxml2-devel spdlog-devel +``` + +### Build + +_Note: If you're using Visual Studio Code, the [CMake Tools plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._ + +```bash +# Clone the repo and enter the directory +git clone https://github.com/HarbourMasters/2ship2harkinian.git +cd 2ship2harkinian + +# Clone the submodules +git submodule update --init + +# Generate Ninja project +cmake -H. -Bbuild-cmake -GNinja # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging) -DPython3_EXECUTABLE=$(which python3) (if you are using non-standard Python installations such as PyEnv) + +# Generate 2ship.o2r +cmake --build build-cmake --target Generate2ShipOtr + +# Compile the project +cmake --build build-cmake # --config Release (if you're packaging) + +# Now you can run the executable in ./build-cmake/mm/2s2h.elf +# To develop the project open the repository in VSCode (or your preferred editor) +``` + +### Generate a distributable +After compiling the project you can generate a distributable by running of the following: +```bash +# Go to build folder +cd build-cmake +# Generate +cpack -G DEB +cpack -G ZIP +cpack -G External (creates appimage) +``` + +### Additional CMake Targets +#### Clean +```bash +# If you need to clean the project you can run +cmake --build build-cmake --target clean +``` + +#### Regenerate Asset Headers +```bash +# If you need to regenerate the asset headers to check them into source +cp OTRExporter +cmake --build build-cmake --target ExtractAssetHeaders +``` + +## macOS +Requires Xcode (or xcode-tools) && `sdl2, libpng, glew, ninja, cmake, nlohmann-json, libzip` (can be installed via homebrew, macports, etc) + +**Important: For maximum performance make sure you have ninja build tools installed!** + +_Note: If you're using Visual Studio Code, the [cpack plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._ + +```bash +# Clone the repo +git clone https://github.com/HarbourMasters/2ship2harkinian.git +cd 2ship2harkinian +# Clone the submodule libultraship +git submodule update --init +# Copy the baserom to the OTRExporter folder +cp OTRExporter +# Generate Ninja project +cmake -H. -Bbuild-cmake -GNinja # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging) +# Extract assets & generate OTR (run this anytime you need to regenerate OTR) +cmake --build build-cmake --target ExtractAssets +# Compile the project +cmake --build build-cmake # --config Release (if you're packaging) + +# Now you can run the executable file: +./build-cmake/mm/2s2h-macos +# To develop the project open the repository in VSCode (or your preferred editor) + +# If you need to clean the project you can run +cmake --build build-cmake --target clean + +# If you need to regenerate the asset headers to check them into source +cmake --build build-cmake --target ExtractAssetHeaders + +# If you need a newer 2ship.o2r only +cmake --build build-cmake --target Generate2ShipOtr +``` + +### Generating a distributable +After compiling the project you can generate a distributable by running of the following: +```bash +# Go to build folder +cd build-cmake +# Generate +cpack +``` + +# Compatible Roms +See [`supportedHashes.json`](supportedHashes.json) + +## Getting CI to work on your fork + +The CI works via [Github Actions](https://github.com/features/actions) where we mostly make use of machines hosted by Github; except for the very first step of the CI process called "Extract assets". This steps extracts assets from the game file and generates an "assets" folder in `mm/`. + +To get this step working on your fork, you'll need to add a machine to your own repository as a self-hosted runner via "Settings > Actions > Runners" in your repository settings. Make sure to add the 'asset-builder' tag to your newly added runner to assign it to run this step. To setup your runner as a service read the docs [here](https://docs.github.com/en/actions/hosting-your-own-runners/configuring-the-self-hosted-runner-application-as-a-service?platform=linux). + +### Runner on Windows +You'll have to enable the ability to run unsigned scripts through PowerShell. To do this, open Powershell as administrator and run `set-executionpolicy remotesigned`. Most dependencies get installed as part of the CI process. You will also need to separately install 7z and add it to the PATH so `7z` can be run as a command. [Chocolatey](https://chocolatey.org/) or other package managers can be used to install it easily. + +### Runner on UNIX systems +If you're on macOS or Linux take a look at `macports-deps.txt` or `apt-deps.txt` to see the dependencies expected to be on your machine. diff --git a/docs/supportedHashes.json b/docs/supportedHashes.json new file mode 100644 index 000000000..f85ec84c3 --- /dev/null +++ b/docs/supportedHashes.json @@ -0,0 +1,10 @@ +[ + { + "name": "N64 US", + "sha1": "d6133ace5afaa0882cf214cf88daba39e266c078" + }, + { + "name": "GC US", + "sha1": "9743aa026e9269b339eb0e3044cd5830a440c1fd" + } +] \ No newline at end of file From 2d8bc175fef010cff5faba1c21e2dffa3643e624 Mon Sep 17 00:00:00 2001 From: Caladius Date: Sun, 2 Jun 2024 23:27:33 -0400 Subject: [PATCH 09/21] [Enhancement] Blast Mask with Powder Keg (#642) * Blast Mask adds Powder Keg explosive property. * Alphabetical Menu Listing + clang * Apply suggestions from code review --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 1 + mm/2s2h/Enhancements/Enhancements.cpp | 1 + mm/2s2h/Enhancements/Enhancements.h | 1 + mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp | 31 +++++++++++++++++++++ mm/2s2h/Enhancements/Masks/BlastMaskKeg.h | 6 ++++ 5 files changed, 40 insertions(+) create mode 100644 mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp create mode 100644 mm/2s2h/Enhancements/Masks/BlastMaskKeg.h diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 266bf22ed..35d3f5778 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -536,6 +536,7 @@ void DrawEnhancementsMenu() { } if (UIWidgets::BeginMenu("Masks")) { + UIWidgets::CVarCheckbox("Blast Mask has Powder Keg Force", "gEnhancements.Masks.BlastMaskKeg"); UIWidgets::CVarCheckbox("Fast Transformation", "gEnhancements.Masks.FastTransformation"); UIWidgets::CVarCheckbox("Fierce Deity's Mask Anywhere", "gEnhancements.Masks.FierceDeitysAnywhere", { .tooltip = "Allow using Fierce Deity's mask outside of boss rooms." }); diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index 87a119155..0b2d2f794 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -32,6 +32,7 @@ void InitEnhancements() { // Masks RegisterFastTransformation(); RegisterFierceDeityAnywhere(); + RegisterBlastMaskKeg(); RegisterNoBlastMaskCooldown(); // Minigames diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 9b78c6aca..5ad8cfb4a 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -12,6 +12,7 @@ #include "Cheats/UnrestrictedItems.h" #include "Cycle/EndOfCycle.h" #include "Equipment/SkipMagicArrowEquip.h" +#include "Masks/BlastMaskKeg.h" #include "Masks/FierceDeityAnywhere.h" #include "Masks/NoBlastMaskCooldown.h" #include "Masks/FastTransformation.h" diff --git a/mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp new file mode 100644 index 000000000..b883822ec --- /dev/null +++ b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp @@ -0,0 +1,31 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" +#include "global.h" + +static uint32_t bombType; + +extern "C" { +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" +EquipSlot func_8082FDC4(void); +} + +void RegisterBlastMaskKeg() { + GameInteractor::Instance->RegisterGameHookForID( + ACTOR_EN_BOM, [](Actor* actor, bool* should) { + Player* player = GET_PLAYER(gPlayState); + if (CVarGetInteger("gEnhancements.Masks.BlastMaskKeg", 0)) { + ItemId item; + EquipSlot i = func_8082FDC4(); + + i = ((i >= EQUIP_SLOT_A) && (player->transformation == PLAYER_FORM_FIERCE_DEITY) && + (player->heldItemAction != PLAYER_IA_SWORD_TWO_HANDED)) + ? EQUIP_SLOT_B + : i; + + item = Player_GetItemOnButton(gPlayState, player, i); + if (item == ITEM_F0) { + actor->shape.rot.x = BOMB_EXPLOSIVE_TYPE_POWDER_KEG; + } + } + }); +} diff --git a/mm/2s2h/Enhancements/Masks/BlastMaskKeg.h b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.h new file mode 100644 index 000000000..a32a4726b --- /dev/null +++ b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.h @@ -0,0 +1,6 @@ +#ifndef EQUIPMENT_BLAST_MASK_KEG_H +#define EQUIPMENT_BLAST_MASK_KEG_H + +void RegisterBlastMaskKeg(); + +#endif // EQUIPMENT_BLAST_MASK_KEG_H From f8f00e6d9baf08dda5ac2e0ab5ae8ff33fc3e97f Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Sun, 2 Jun 2024 23:15:33 -0500 Subject: [PATCH 10/21] Add draw distance enhancements for actors and scene geometry (#539) --- mm/2s2h/BenGui/BenMenuBar.cpp | 31 +++++++++++++++++ mm/include/PR/gbi.h | 1 + mm/src/code/z_actor.c | 63 ++++++++++++++++++++++++++++++++--- mm/src/code/z_play.c | 10 ++++++ 4 files changed, 101 insertions(+), 4 deletions(-) diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 35d3f5778..264f04744 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -532,6 +532,37 @@ void DrawEnhancementsMenu() { "minor visual glitches that were covered up by the black bars\nPlease disable this " "setting before reporting a bug" }); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(255, 255, 0, 255)); + ImGui::SeparatorText("Unstable"); + ImGui::PopStyleColor(); + UIWidgets::CVarCheckbox( + "Disable Scene Geometry Distance Check", "gEnhancements.Graphics.DisableSceneGeometryDistanceCheck", + { .tooltip = + "Disables the distance check for scene geometry, allowing it to be drawn no matter how far " + "away it is from the player. This may have unintended side effects." }); + // BENTODO: Not implemented yet + // UIWidgets::CVarCheckbox("Widescreen Actor Culling", + // "gEnhancements.Graphics.ActorCullingAccountsForWidescreen", + // { .tooltip = "Adjusts the culling planes to account for widescreen resolutions. " + // "This may have unintended side effects." }); + if (UIWidgets::CVarSliderInt( + "Increase Actor Draw Distance: %dx", "gEnhancements.Graphics.IncreaseActorDrawDistance", 1, 5, 1, + { .tooltip = + "Increase the range in which Actors are drawn. This may have unintended side effects." })) { + CVarSetInteger("gEnhancements.Graphics.IncreaseActorUpdateDistance", + MIN(CVarGetInteger("gEnhancements.Graphics.IncreaseActorDrawDistance", 1), + CVarGetInteger("gEnhancements.Graphics.IncreaseActorUpdateDistance", 1))); + } + if (UIWidgets::CVarSliderInt( + "Increase Actor Update Distance: %dx", "gEnhancements.Graphics.IncreaseActorUpdateDistance", 1, 5, + 1, + { .tooltip = + "Increase the range in which Actors are updated. This may have unintended side effects." })) { + CVarSetInteger("gEnhancements.Graphics.IncreaseActorDrawDistance", + MAX(CVarGetInteger("gEnhancements.Graphics.IncreaseActorDrawDistance", 1), + CVarGetInteger("gEnhancements.Graphics.IncreaseActorUpdateDistance", 1))); + } + ImGui::EndMenu(); } diff --git a/mm/include/PR/gbi.h b/mm/include/PR/gbi.h index 262ac95e8..7820e6197 100644 --- a/mm/include/PR/gbi.h +++ b/mm/include/PR/gbi.h @@ -391,6 +391,7 @@ * G_EXTRAGEOMETRY flags: set extra custom geometry modes */ #define G_EX_INVERT_CULLING 0x00000001 +#define G_EX_ALWAYS_EXECUTE_BRANCH 0x00000002 /* Need these defined for Sprite Microcode */ #ifdef _LANGUAGE_ASSEMBLY diff --git a/mm/src/code/z_actor.c b/mm/src/code/z_actor.c index 532bb599f..2a967694b 100644 --- a/mm/src/code/z_actor.c +++ b/mm/src/code/z_actor.c @@ -3070,6 +3070,45 @@ s32 func_800BA2FC(PlayState* play, Actor* actor, Vec3f* projectedPos, f32 projec return false; } +// #region 2S2H [Enhancements] Allows us to increase the draw and update distance independently, mostly a modified +// version of the function above +void Ship_CalcShouldDrawAndUpdate(PlayState* play, Actor* actor, Vec3f* projectedPos, f32 projectedW, bool* shouldDraw, + bool* shouldUpdate) { + s32 updateMulti = CVarGetInteger("gEnhancements.Graphics.IncreaseActorUpdateDistance", 1); + s32 drawMulti = CVarGetInteger("gEnhancements.Graphics.IncreaseActorDrawDistance", 1); + bool updateCheck = + (-(actor->uncullZoneScale * updateMulti) < projectedPos->z) && + (projectedPos->z < ((actor->uncullZoneForward * updateMulti) + (actor->uncullZoneScale * updateMulti))); + bool drawCheck = + (-(actor->uncullZoneScale * drawMulti) < projectedPos->z) && + (projectedPos->z < ((actor->uncullZoneForward * drawMulti) + (actor->uncullZoneScale * drawMulti))); + + if (updateCheck || drawCheck) { + f32 phi_f12; + f32 phi_f2 = CLAMP_MIN(projectedW, 1.0f); + f32 phi_f14; + f32 phi_f16; + + if (play->view.fovy != 60.0f) { + phi_f12 = actor->uncullZoneScale * play->projectionMtxFDiagonal.x * 0.76980036f; // sqrt(16/27) + + phi_f14 = play->projectionMtxFDiagonal.y * 0.57735026f; // 1 / sqrt(3) + phi_f16 = actor->uncullZoneScale * phi_f14; + phi_f14 *= actor->uncullZoneDownward; + } else { + phi_f16 = phi_f12 = actor->uncullZoneScale; + phi_f14 = actor->uncullZoneDownward; + } + + if (((fabsf(projectedPos->x) - phi_f12) < phi_f2) && ((-phi_f2 < (projectedPos->y + phi_f14))) && + ((projectedPos->y - phi_f16) < phi_f2)) { + *shouldDraw = drawCheck; + *shouldUpdate = updateCheck; + } + } +} +// #endregion + void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) { s32 pad[2]; Gfx* ref2; @@ -3105,14 +3144,30 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) { Actor_UpdateFlaggedAudio(actor); } - if (func_800BA2D8(play, actor)) { - actor->flags |= ACTOR_FLAG_40; + // #region 2S2H + bool shipShouldDraw = false; + bool shipShouldUpdate = false; + if (CVarGetInteger("gEnhancements.Graphics.IncreaseActorDrawDistance", 1) > 1 || + CVarGetInteger("gEnhancements.Graphics.IncreaseActorUpdateDistance", 1) > 1) { + Ship_CalcShouldDrawAndUpdate(play, actor, &actor->projectedPos, actor->projectedW, &shipShouldDraw, + &shipShouldUpdate); + + if (shipShouldUpdate) { + actor->flags |= ACTOR_FLAG_40; + } else { + actor->flags &= ~ACTOR_FLAG_40; + } } else { - actor->flags &= ~ACTOR_FLAG_40; + if (func_800BA2D8(play, actor)) { + actor->flags |= ACTOR_FLAG_40; + } else { + actor->flags &= ~ACTOR_FLAG_40; + } } actor->isDrawn = false; - if ((actor->init == NULL) && (actor->draw != NULL) && (actor->flags & actorFlags)) { + if ((actor->init == NULL) && (actor->draw != NULL) && ((actor->flags & actorFlags) || shipShouldDraw)) { + // #endregion if ((actor->flags & ACTOR_FLAG_REACT_TO_LENS) && ((play->roomCtx.curRoom.lensMode == LENS_MODE_HIDE_ACTORS) || (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) || diff --git a/mm/src/code/z_play.c b/mm/src/code/z_play.c index a939ed217..a4fd7e5b5 100644 --- a/mm/src/code/z_play.c +++ b/mm/src/code/z_play.c @@ -1373,11 +1373,21 @@ void Play_DrawMain(PlayState* this) { if (1) { u32 roomDrawFlags = ((1) ? 1 : 0) | (((void)0, 1) ? 2 : 0); // FAKE: + if (CVarGetInteger("gEnhancements.Graphics.DisableSceneGeometryDistanceCheck", 0)) { + gSPSetExtraGeometryMode(POLY_OPA_DISP++, G_EX_ALWAYS_EXECUTE_BRANCH); + gSPSetExtraGeometryMode(POLY_XLU_DISP++, G_EX_ALWAYS_EXECUTE_BRANCH); + } + Scene_Draw(this); if (this->roomCtx.unk78) { Room_Draw(this, &this->roomCtx.curRoom, roomDrawFlags & 3); Room_Draw(this, &this->roomCtx.prevRoom, roomDrawFlags & 3); } + + if (CVarGetInteger("gEnhancements.Graphics.DisableSceneGeometryDistanceCheck", 0)) { + gSPClearExtraGeometryMode(POLY_OPA_DISP++, G_EX_ALWAYS_EXECUTE_BRANCH); + gSPClearExtraGeometryMode(POLY_XLU_DISP++, G_EX_ALWAYS_EXECUTE_BRANCH); + } } if (this->skyboxCtx.skyboxShouldDraw) { From d2a11f147681ad7ceba8553cf59963ba65f9cd24 Mon Sep 17 00:00:00 2001 From: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:38:29 -0400 Subject: [PATCH 11/21] [Enhancement] Instant Putaway (#547) * Instant Putaway Enhancement Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> * Tweak some things and merge with Player Movement --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 7 ++++--- mm/2s2h/Enhancements/Enhancements.cpp | 7 ++++--- mm/2s2h/Enhancements/Enhancements.h | 2 +- mm/2s2h/Enhancements/GameInteractor/GameInteractor.h | 1 + .../{PlayerMovement => Player}/ClimbSpeed.cpp | 4 ++-- mm/2s2h/Enhancements/Player/InstantPutaway.cpp | 10 ++++++++++ mm/2s2h/Enhancements/Player/Player.h | 7 +++++++ mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.h | 6 ------ mm/src/overlays/actors/ovl_player_actor/z_player.c | 4 +++- 9 files changed, 32 insertions(+), 16 deletions(-) rename mm/2s2h/Enhancements/{PlayerMovement => Player}/ClimbSpeed.cpp (58%) create mode 100644 mm/2s2h/Enhancements/Player/InstantPutaway.cpp create mode 100644 mm/2s2h/Enhancements/Player/Player.h delete mode 100644 mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.h diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 264f04744..849364462 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -591,10 +591,11 @@ void DrawEnhancementsMenu() { } ImGui::EndMenu(); } - if (UIWidgets::BeginMenu("Player Movement")) { - UIWidgets::CVarSliderInt("Climb speed", "gEnhancements.PlayerMovement.ClimbSpeed", 1, 5, 1, + if (UIWidgets::BeginMenu("Player")) { + UIWidgets::CVarSliderInt("Climb speed", "gEnhancements.Player.ClimbSpeed", 1, 5, 1, { .tooltip = "Increases the speed at which Link climbs vines and ladders." }); - + UIWidgets::CVarCheckbox("Instant Putaway", "gEnhancements.Player.InstantPutaway", + { .tooltip = "Allows Link to instantly puts away held item without waiting." }); ImGui::EndMenu(); } diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index 0b2d2f794..c15ba3a85 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -38,6 +38,10 @@ void InitEnhancements() { // Minigames RegisterAlwaysWinDoggyRace(); + // Player + RegisterClimbSpeed(); + RegisterInstantPutaway(); + // Songs RegisterEnableSunsSong(); @@ -53,7 +57,4 @@ void InitEnhancements() { // Modes RegisterPlayAsKafei(); RegisterTimeMovesWhenYouMove(); - - // Player Movement - RegisterClimbSpeed(); } diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 5ad8cfb4a..f3d7c5d8d 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -23,7 +23,7 @@ #include "Restorations/SideRoll.h" #include "Restorations/TatlISG.h" #include "Graphics/PlayAsKafei.h" -#include "PlayerMovement/ClimbSpeed.h" +#include "Player/Player.h" #include "Songs/EnableSunsSong.h" #include "Saving/SavingEnhancements.h" #include "Graphics/DisableBlackBars.h" diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h index fe10c1f29..8da2e5ea6 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h @@ -42,6 +42,7 @@ typedef enum { GI_VB_PATCH_SIDEROLL, GI_VB_TATL_CONVERSATION_AVAILABLE, GI_VB_PREVENT_MASK_TRANSFORMATION_CS, + GI_VB_RESET_PUTAWAY_TIMER, GI_VB_SET_CLIMB_SPEED, GI_VB_PREVENT_CLOCK_DISPLAY, GI_VB_SONG_AVAILABLE_TO_PLAY, diff --git a/mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.cpp b/mm/2s2h/Enhancements/Player/ClimbSpeed.cpp similarity index 58% rename from mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.cpp rename to mm/2s2h/Enhancements/Player/ClimbSpeed.cpp index 60296c423..1a6c624d1 100644 --- a/mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.cpp +++ b/mm/2s2h/Enhancements/Player/ClimbSpeed.cpp @@ -3,9 +3,9 @@ void RegisterClimbSpeed() { REGISTER_VB_SHOULD(GI_VB_SET_CLIMB_SPEED, { - if (CVarGetInteger("gEnhancements.PlayerMovement.ClimbSpeed", 1) > 1) { + if (CVarGetInteger("gEnhancements.Player.ClimbSpeed", 1) > 1) { f32* speed = static_cast(opt); - *speed *= CVarGetInteger("gEnhancements.PlayerMovement.ClimbSpeed", 1); + *speed *= CVarGetInteger("gEnhancements.Player.ClimbSpeed", 1); } }); } diff --git a/mm/2s2h/Enhancements/Player/InstantPutaway.cpp b/mm/2s2h/Enhancements/Player/InstantPutaway.cpp new file mode 100644 index 000000000..24530aca7 --- /dev/null +++ b/mm/2s2h/Enhancements/Player/InstantPutaway.cpp @@ -0,0 +1,10 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" + +void RegisterInstantPutaway() { + REGISTER_VB_SHOULD(GI_VB_RESET_PUTAWAY_TIMER, { + if (CVarGetInteger("gEnhancements.Player.InstantPutaway", 0)) { + *should = false; + } + }); +} diff --git a/mm/2s2h/Enhancements/Player/Player.h b/mm/2s2h/Enhancements/Player/Player.h new file mode 100644 index 000000000..c2a23827f --- /dev/null +++ b/mm/2s2h/Enhancements/Player/Player.h @@ -0,0 +1,7 @@ +#ifndef PLAYER_H +#define PLAYER_H + +void RegisterClimbSpeed(); +void RegisterInstantPutaway(); + +#endif // PLAYER_H diff --git a/mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.h b/mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.h deleted file mode 100644 index b0596a4f9..000000000 --- a/mm/2s2h/Enhancements/PlayerMovement/ClimbSpeed.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef PLAYER_MOVEMENT_CLIMB_SPEED_H -#define PLAYER_MOVEMENT_CLIMB_SPEED_H - -void RegisterClimbSpeed(); - -#endif // PLAYER_MOVEMENT_CLIMB_SPEED_H diff --git a/mm/src/overlays/actors/ovl_player_actor/z_player.c b/mm/src/overlays/actors/ovl_player_actor/z_player.c index 7dfdc0419..f3a173303 100644 --- a/mm/src/overlays/actors/ovl_player_actor/z_player.c +++ b/mm/src/overlays/actors/ovl_player_actor/z_player.c @@ -11247,7 +11247,9 @@ void Player_SetDoAction(PlayState* play, Player* this) { } if (doActionA != DO_ACTION_PUTAWAY) { - this->putAwayCountdown = 20; + if (GameInteractor_Should(GI_VB_RESET_PUTAWAY_TIMER, true, NULL)) { + this->putAwayCountdown = 20; + } } else if (this->putAwayCountdown != 0) { doActionA = DO_ACTION_NONE; this->putAwayCountdown--; From 5e17828cc47aed2488257d00696beea99ed511aa Mon Sep 17 00:00:00 2001 From: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> Date: Tue, 4 Jun 2024 01:02:48 -0400 Subject: [PATCH 12/21] [Cheat] Longer Deku Flower Gliding (#548) * Add Longer Flower Glide enhancement Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> * Tweak to just modify an array * Update mm/2s2h/Enhancements/Cheats/LongerFlowerGlide.cpp --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 8 +++++++- mm/2s2h/Enhancements/Cheats/Cheats.h | 6 ++++++ .../Enhancements/Cheats/LongerFlowerGlide.cpp | 16 ++++++++++++++++ mm/2s2h/Enhancements/Enhancements.cpp | 1 + mm/2s2h/Enhancements/Enhancements.h | 1 + 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 mm/2s2h/Enhancements/Cheats/Cheats.h create mode 100644 mm/2s2h/Enhancements/Cheats/LongerFlowerGlide.cpp diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 849364462..f2f460a6e 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -13,6 +13,7 @@ #include "2s2h/Enhancements/Modes/TimeMovesWhenYouMove.h" #include "2s2h/DeveloperTools/DeveloperTools.h" #include "2s2h/DeveloperTools/WarpPoint.h" +#include "2s2h/Enhancements/Cheats/Cheats.h" #include "HudEditor.h" extern "C" { @@ -644,13 +645,18 @@ void DrawCheatsMenu() { UIWidgets::CVarCheckbox("Infinite Magic", "gCheats.InfiniteMagic"); UIWidgets::CVarCheckbox("Infinite Rupees", "gCheats.InfiniteRupees"); UIWidgets::CVarCheckbox("Infinite Consumables", "gCheats.InfiniteConsumables"); + if (UIWidgets::CVarCheckbox( + "Longer Deku Flower Glide", "gCheats.LongerFlowerGlide", + { .tooltip = "Allows Deku Link to glide longer, no longer dropping after a certain distance" })) { + RegisterLongerFlowerGlide(); + } + UIWidgets::CVarCheckbox("No Clip", "gCheats.NoClip"); UIWidgets::CVarCheckbox("Unbreakable Razor Sword", "gCheats.UnbreakableRazorSword"); UIWidgets::CVarCheckbox("Unrestricted Items", "gCheats.UnrestrictedItems"); if (UIWidgets::CVarCheckbox("Moon Jump on L", "gCheats.MoonJumpOnL", { .tooltip = "Holding L makes you float into the air" })) { RegisterMoonJumpOnL(); } - UIWidgets::CVarCheckbox("No Clip", "gCheats.NoClip"); ImGui::EndMenu(); } diff --git a/mm/2s2h/Enhancements/Cheats/Cheats.h b/mm/2s2h/Enhancements/Cheats/Cheats.h new file mode 100644 index 000000000..497f5e2c5 --- /dev/null +++ b/mm/2s2h/Enhancements/Cheats/Cheats.h @@ -0,0 +1,6 @@ +#ifndef CHEATS_H +#define CHEATS_H + +void RegisterLongerFlowerGlide(); + +#endif // CHEATS_H diff --git a/mm/2s2h/Enhancements/Cheats/LongerFlowerGlide.cpp b/mm/2s2h/Enhancements/Cheats/LongerFlowerGlide.cpp new file mode 100644 index 000000000..4012e9a5a --- /dev/null +++ b/mm/2s2h/Enhancements/Cheats/LongerFlowerGlide.cpp @@ -0,0 +1,16 @@ +#include + +extern "C" { +#include "z64.h"; +extern f32 D_8085D958[2]; +} + +void RegisterLongerFlowerGlide() { + if (CVarGetInteger("gCheats.LongerFlowerGlide", 0)) { + D_8085D958[0] = 99999.9f; + D_8085D958[1] = 99999.9f; + } else { + D_8085D958[0] = 600.0f; + D_8085D958[1] = 960.0f; + } +} diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index c15ba3a85..6f2f1627e 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -8,6 +8,7 @@ void InitEnhancements() { // Cheats RegisterInfiniteCheats(); + RegisterLongerFlowerGlide(); RegisterMoonJumpOnL(); RegisterUnbreakableRazorSword(); RegisterUnrestrictedItems(); diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index f3d7c5d8d..57c54f414 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -8,6 +8,7 @@ #include "Cheats/Infinite.h" #include "Dialogue/Dialogue.h" #include "Graphics/TextBasedClock.h" +#include "Cheats/Cheats.h" #include "Cheats/UnbreakableRazorSword.h" #include "Cheats/UnrestrictedItems.h" #include "Cycle/EndOfCycle.h" From 51a6d9d92673f2ce2197550e8991c4d83210ac9a Mon Sep 17 00:00:00 2001 From: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> Date: Tue, 4 Jun 2024 02:58:32 -0400 Subject: [PATCH 13/21] [Enhancement] Fast Deku Flower Launch (#549) * Add fast deku flower launch enhancement Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com> * Migrate to a hook --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 7 +++ mm/2s2h/Enhancements/Enhancements.cpp | 1 + .../Enhancements/Player/FastFlowerLaunch.cpp | 47 +++++++++++++++++++ mm/2s2h/Enhancements/Player/Player.h | 1 + 4 files changed, 56 insertions(+) create mode 100644 mm/2s2h/Enhancements/Player/FastFlowerLaunch.cpp diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index f2f460a6e..5e3ace0ce 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -14,6 +14,7 @@ #include "2s2h/DeveloperTools/DeveloperTools.h" #include "2s2h/DeveloperTools/WarpPoint.h" #include "2s2h/Enhancements/Cheats/Cheats.h" +#include "2s2h/Enhancements/Player/Player.h" #include "HudEditor.h" extern "C" { @@ -595,6 +596,12 @@ void DrawEnhancementsMenu() { if (UIWidgets::BeginMenu("Player")) { UIWidgets::CVarSliderInt("Climb speed", "gEnhancements.Player.ClimbSpeed", 1, 5, 1, { .tooltip = "Increases the speed at which Link climbs vines and ladders." }); + if (UIWidgets::CVarCheckbox("Fast Deku Flower Launch", "gEnhancements.Player.FastFlowerLaunch", + { .tooltip = + "Speeds up the time it takes to be able to get maximum height from " + "launching out of a deku flower" })) { + RegisterFastFlowerLaunch(); + } UIWidgets::CVarCheckbox("Instant Putaway", "gEnhancements.Player.InstantPutaway", { .tooltip = "Allows Link to instantly puts away held item without waiting." }); ImGui::EndMenu(); diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index 6f2f1627e..663f257c4 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -41,6 +41,7 @@ void InitEnhancements() { // Player RegisterClimbSpeed(); + RegisterFastFlowerLaunch(); RegisterInstantPutaway(); // Songs diff --git a/mm/2s2h/Enhancements/Player/FastFlowerLaunch.cpp b/mm/2s2h/Enhancements/Player/FastFlowerLaunch.cpp new file mode 100644 index 000000000..50c2fe185 --- /dev/null +++ b/mm/2s2h/Enhancements/Player/FastFlowerLaunch.cpp @@ -0,0 +1,47 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" +#include "spdlog/spdlog.h" + +extern "C" { +#include "macros.h" +#include "z64.h" +extern PlayState* gPlayState; +extern Input* sPlayerControlInput; +void Player_Action_93(Player* player, PlayState* play); +} + +void RegisterFastFlowerLaunch() { + static HOOK_ID playerUpdateHook = 0; + GameInteractor::Instance->UnregisterGameHookForID(playerUpdateHook); + playerUpdateHook = 0; + + if (!CVarGetInteger("gEnhancements.Player.FastFlowerLaunch", 0)) { + return; + } + + playerUpdateHook = + GameInteractor::Instance->RegisterGameHookForID(ACTOR_PLAYER, [](Actor* actor) { + Player* player = GET_PLAYER(gPlayState); + if (player->actionFunc != Player_Action_93) { + return; + } + + DynaPolyActor* dyna; + Input* input = &gPlayState->state.input[0]; + + if (player->av1.actionVar1 != 0 && !(player->av1.actionVar1 == 1 && player->unk_B48 > -170.0f) && + player->av2.actionVar2 != 10 && !CHECK_BTN_ALL(input->cur.button, BTN_A)) { + player->unk_ABC = -3900.0f; + player->unk_B48 = -170.0f; + player->av1.actionVar1 = 2; + player->av2.actionVar2 = 10; + player->actor.scale.y = 0.01f; + dyna = DynaPoly_GetActor(&gPlayState->colCtx, player->actor.floorBgId); + + if (dyna != NULL) { + player->actor.world.pos.x = dyna->actor.world.pos.x; + player->actor.world.pos.z = dyna->actor.world.pos.z; + } + } + }); +} diff --git a/mm/2s2h/Enhancements/Player/Player.h b/mm/2s2h/Enhancements/Player/Player.h index c2a23827f..0bcc94156 100644 --- a/mm/2s2h/Enhancements/Player/Player.h +++ b/mm/2s2h/Enhancements/Player/Player.h @@ -2,6 +2,7 @@ #define PLAYER_H void RegisterClimbSpeed(); +void RegisterFastFlowerLaunch(); void RegisterInstantPutaway(); #endif // PLAYER_H From 8b2b12dbe8a308550cde067b4821025ff4128767 Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 18 Jun 2024 20:00:16 -0400 Subject: [PATCH 14/21] Bump latest lus and bring over Array resource (#689) * bump latest lus and bring over array resource * use upstream otrexporter --- OTRExporter | 2 +- libultraship | 2 +- mm/2s2h/BenGui/BenMenuBar.cpp | 28 +++---- mm/2s2h/BenPort.cpp | 29 +++----- mm/2s2h/resource/importer/ArrayFactory.cpp | 64 ++++++++++++++++ mm/2s2h/resource/importer/ArrayFactory.h | 11 +++ mm/2s2h/resource/type/2shResourceType.h | 1 + mm/2s2h/resource/type/Array.cpp | 46 ++++++++++++ mm/2s2h/resource/type/Array.h | 85 ++++++++++++++++++++++ mm/src/code/stubs.c | 2 - 10 files changed, 236 insertions(+), 34 deletions(-) create mode 100644 mm/2s2h/resource/importer/ArrayFactory.cpp create mode 100644 mm/2s2h/resource/importer/ArrayFactory.h create mode 100644 mm/2s2h/resource/type/Array.cpp create mode 100644 mm/2s2h/resource/type/Array.h diff --git a/OTRExporter b/OTRExporter index 287c79891..375489d5f 160000 --- a/OTRExporter +++ b/OTRExporter @@ -1 +1 @@ -Subproject commit 287c79891882df5a0797cd9d39c0dcb97af9f007 +Subproject commit 375489d5f1f5fa4b9144ac9669c411e3b149f32a diff --git a/libultraship b/libultraship index 070eb35dd..fccf181b4 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 070eb35dde54f8dcbffad8fb3d97367bb792b6b1 +Subproject commit fccf181b449f82f3e6ae5cdc666319847f78e0a1 diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 89bb3e009..764d2ea65 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -41,10 +41,9 @@ static const std::unordered_map audioBackendsMa }; static std::unordered_map windowBackendsMap = { - { Ship::WindowBackend::DX11, "DirectX" }, - { Ship::WindowBackend::SDL_OPENGL, "OpenGL" }, - { Ship::WindowBackend::SDL_METAL, "Metal" }, - { Ship::WindowBackend::GX2, "GX2" } + { Ship::WindowBackend::FAST3D_DXGI_DX11, "DirectX" }, + { Ship::WindowBackend::FAST3D_SDL_OPENGL, "OpenGL" }, + { Ship::WindowBackend::FAST3D_SDL_METAL, "Metal" }, }; static const std::unordered_map clockTypeOptions = { @@ -196,19 +195,21 @@ void DrawSettingsMenu() { { // FPS Slider constexpr unsigned int minFps = 20; static unsigned int maxFps; - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == + Ship::WindowBackend::FAST3D_DXGI_DX11) { maxFps = 360; } else { maxFps = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate(); } unsigned int currentFps = std::max(std::min(OTRGlobals::Instance->GetInterpolationFPS(), maxFps), minFps); - bool matchingRefreshRate = - CVarGetInteger("gMatchRefreshRate", 0) && - Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() != Ship::WindowBackend::DX11; + bool matchingRefreshRate = CVarGetInteger("gMatchRefreshRate", 0) && + Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() != + Ship::WindowBackend::FAST3D_DXGI_DX11; UIWidgets::CVarSliderInt((currentFps == 20) ? "FPS: Original (20)" : "FPS: %d", "gInterpolationFPS", minFps, maxFps, 20, { .disabled = matchingRefreshRate }); - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == + Ship::WindowBackend::FAST3D_DXGI_DX11) { UIWidgets::Tooltip( "Uses Matrix Interpolation to create extra frames, resulting in smoother graphics. This is " "purely visual and does not impact game logic, execution of glitches etc.\n\n A higher target " @@ -220,7 +221,8 @@ void DrawSettingsMenu() { } } // END FPS Slider - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == + Ship::WindowBackend::FAST3D_DXGI_DX11) { // UIWidgets::Spacer(0); if (ImGui::Button("Match Refresh Rate")) { int hz = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate(); @@ -234,7 +236,8 @@ void DrawSettingsMenu() { } UIWidgets::Tooltip("Matches interpolation value to the current game's window refresh rate"); - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == + Ship::WindowBackend::FAST3D_DXGI_DX11) { UIWidgets::CVarSliderInt(CVarGetInteger("gExtraLatencyThreshold", 80) == 0 ? "Jitter fix: Off" : "Jitter fix: >= %d FPS", "gExtraLatencyThreshold", 0, 360, 80); @@ -250,8 +253,7 @@ void DrawSettingsMenu() { Ship::WindowBackend runningWindowBackend = Ship::Context::GetInstance()->GetWindow()->GetWindowBackend(); Ship::WindowBackend configWindowBackend; int32_t configWindowBackendId = Ship::Context::GetInstance()->GetConfig()->GetInt("Window.Backend.Id", -1); - if (configWindowBackendId != -1 && - configWindowBackendId < static_cast(Ship::WindowBackend::BACKEND_COUNT)) { + if (Ship::Context::GetInstance()->GetWindow()->IsAvailableWindowBackend(configWindowBackendId)) { configWindowBackend = static_cast(configWindowBackendId); } else { configWindowBackend = runningWindowBackend; diff --git a/mm/2s2h/BenPort.cpp b/mm/2s2h/BenPort.cpp index 15dc9ef65..5009eb2ce 100644 --- a/mm/2s2h/BenPort.cpp +++ b/mm/2s2h/BenPort.cpp @@ -20,7 +20,6 @@ #else #include #endif -#include #include #include "variables.h" #include "z64.h" @@ -57,7 +56,6 @@ CrowdControl* CrowdControl::Instance; #include "2s2h/SaveManager/SaveManager.h" // Resource Types/Factories -#include "resource/type/Array.h" #include "resource/type/Blob.h" #include "resource/type/DisplayList.h" #include "resource/type/Matrix.h" @@ -65,6 +63,7 @@ CrowdControl* CrowdControl::Instance; #include "resource/type/Vertex.h" #include "2s2h/resource/type/2shResourceType.h" #include "2s2h/resource/type/Animation.h" +#include "2s2h/resource/type/Array.h" #include "2s2h/resource/type/AudioSample.h" #include "2s2h/resource/type/AudioSequence.h" #include "2s2h/resource/type/AudioSoundFont.h" @@ -75,13 +74,13 @@ CrowdControl* CrowdControl::Instance; #include "2s2h/resource/type/Scene.h" #include "2s2h/resource/type/Skeleton.h" #include "2s2h/resource/type/SkeletonLimb.h" -#include "resource/factory/ArrayFactory.h" #include "resource/factory/BlobFactory.h" #include "resource/factory/DisplayListFactory.h" #include "resource/factory/MatrixFactory.h" #include "resource/factory/TextureFactory.h" #include "resource/factory/VertexFactory.h" #include "2s2h/resource/importer/AnimationFactory.h" +#include "2s2h/resource/importer/ArrayFactory.h" #include "2s2h/resource/importer/AudioSampleFactory.h" #include "2s2h/resource/importer/AudioSequenceFactory.h" #include "2s2h/resource/importer/AudioSoundFontFactory.h" @@ -179,10 +178,10 @@ OTRGlobals::OTRGlobals() { "DisplayList", static_cast(LUS::ResourceType::DisplayList), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Matrix", static_cast(LUS::ResourceType::Matrix), 0); - loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, - "Array", static_cast(LUS::ResourceType::Array), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Blob", static_cast(LUS::ResourceType::Blob), 0); + loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, + "Array", static_cast(SOH::ResourceType::SOH_Array), 0); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, "Animation", static_cast(SOH::ResourceType::SOH_Animation), 0); loader->RegisterResourceFactory(std::make_shared(), @@ -292,7 +291,7 @@ bool OTRGlobals::HasOriginal() { } uint32_t OTRGlobals::GetInterpolationFPS() { - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::DX11) { + if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) { return CVarGetInteger("gInterpolationFPS", 20); } @@ -309,9 +308,6 @@ struct ExtensionEntry { std::string ext; }; -extern uintptr_t clearMtx; -extern "C" Mtx gMtxClear; -extern "C" MtxF gMtxFClear; extern "C" void OTRMessage_Init(); extern "C" void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples); extern "C" void AudioPlayer_Play(const uint8_t* buf, uint32_t len); @@ -478,7 +474,6 @@ extern "C" void InitOTR() { GfxPatcher_ApplyNecessaryAuthenticPatches(); DebugConsole_Init(); - clearMtx = (uintptr_t)&gMtxClear; OTRMessage_Init(); OTRAudio_Init(); // OTRExtScanner(); @@ -949,8 +944,8 @@ extern "C" char* ResourceMgr_LoadTexOrDListByName(const char* filePath) { if (res->GetInitData()->Type == static_cast(LUS::ResourceType::DisplayList)) return (char*)&((std::static_pointer_cast(res))->Instructions[0]); - else if (res->GetInitData()->Type == static_cast(LUS::ResourceType::Array)) - return (char*)(std::static_pointer_cast(res))->Vertices.data(); + else if (res->GetInitData()->Type == static_cast(SOH::ResourceType::SOH_Array)) + return (char*)(std::static_pointer_cast(res))->Vertices.data(); else { return (char*)ResourceGetDataByName(filePath); } @@ -1063,30 +1058,30 @@ extern "C" void ResourceMgr_UnpatchGfxByName(const char* path, const char* patch } extern "C" char* ResourceMgr_LoadVtxArrayByName(const char* path) { - auto res = std::static_pointer_cast(GetResourceByName(path)); + auto res = std::static_pointer_cast(GetResourceByName(path)); return (char*)res->Vertices.data(); } extern "C" size_t ResourceMgr_GetVtxArraySizeByName(const char* path) { - auto res = std::static_pointer_cast(GetResourceByName(path)); + auto res = std::static_pointer_cast(GetResourceByName(path)); return res->Vertices.size(); } extern "C" char* ResourceMgr_LoadArrayByName(const char* path) { - auto res = std::static_pointer_cast(GetResourceByName(path)); + auto res = std::static_pointer_cast(GetResourceByName(path)); return (char*)res->Scalars.data(); } extern "C" size_t ResourceMgr_GetArraySizeByName(const char* path) { - auto res = std::static_pointer_cast(GetResourceByName(path)); + auto res = std::static_pointer_cast(GetResourceByName(path)); return res->Scalars.size(); } extern "C" char* ResourceMgr_LoadArrayByNameAsVec3s(const char* path) { - auto res = std::static_pointer_cast(GetResourceByName(path)); + auto res = std::static_pointer_cast(GetResourceByName(path)); // if (res->CachedGameAsset != nullptr) // return (char*)res->CachedGameAsset; diff --git a/mm/2s2h/resource/importer/ArrayFactory.cpp b/mm/2s2h/resource/importer/ArrayFactory.cpp new file mode 100644 index 000000000..9772da149 --- /dev/null +++ b/mm/2s2h/resource/importer/ArrayFactory.cpp @@ -0,0 +1,64 @@ +#include "2s2h/resource/importer/ArrayFactory.h" +#include "2s2h/resource/type/Array.h" +#include "spdlog/spdlog.h" +#include "graphic/Fast3D/lus_gbi.h" + +namespace SOH { +std::shared_ptr ResourceFactoryBinaryArrayV0::ReadResource(std::shared_ptr file) { + if (!FileHasValidFormatAndReader(file)) { + return nullptr; + } + + auto array = std::make_shared(file->InitData); + auto reader = std::get>(file->Reader); + + array->ArrayType = (ArrayResourceType)reader->ReadUInt32(); + array->ArrayCount = reader->ReadUInt32(); + + for (uint32_t i = 0; i < array->ArrayCount; i++) { + if (array->ArrayType == ArrayResourceType::Vertex) { + // OTRTODO: Implement Vertex arrays as just a vertex resource. + F3DVtx data; + data.v.ob[0] = reader->ReadInt16(); + data.v.ob[1] = reader->ReadInt16(); + data.v.ob[2] = reader->ReadInt16(); + data.v.flag = reader->ReadUInt16(); + data.v.tc[0] = reader->ReadInt16(); + data.v.tc[1] = reader->ReadInt16(); + data.v.cn[0] = reader->ReadUByte(); + data.v.cn[1] = reader->ReadUByte(); + data.v.cn[2] = reader->ReadUByte(); + data.v.cn[3] = reader->ReadUByte(); + array->Vertices.push_back(data); + } else { + array->ArrayScalarType = (ScalarType)reader->ReadUInt32(); + + int iter = 1; + + if (array->ArrayType == ArrayResourceType::Vector) { + iter = reader->ReadUInt32(); + } + + for (int k = 0; k < iter; k++) { + ScalarData data; + + switch (array->ArrayScalarType) { + case ScalarType::ZSCALAR_S16: + data.s16 = reader->ReadInt16(); + break; + case ScalarType::ZSCALAR_U16: + data.u16 = reader->ReadUInt16(); + break; + default: + // OTRTODO: IMPLEMENT OTHER TYPES! + break; + } + + array->Scalars.push_back(data); + } + } + } + + return array; +} +} // namespace SOH \ No newline at end of file diff --git a/mm/2s2h/resource/importer/ArrayFactory.h b/mm/2s2h/resource/importer/ArrayFactory.h new file mode 100644 index 000000000..fcd307a4e --- /dev/null +++ b/mm/2s2h/resource/importer/ArrayFactory.h @@ -0,0 +1,11 @@ +#pragma once + +#include "Resource.h" +#include "ResourceFactoryBinary.h" + +namespace SOH { +class ResourceFactoryBinaryArrayV0 : public Ship::ResourceFactoryBinary { + public: + std::shared_ptr ReadResource(std::shared_ptr file) override; +}; +} // namespace SOH \ No newline at end of file diff --git a/mm/2s2h/resource/type/2shResourceType.h b/mm/2s2h/resource/type/2shResourceType.h index 4524ba88c..418e9b82f 100644 --- a/mm/2s2h/resource/type/2shResourceType.h +++ b/mm/2s2h/resource/type/2shResourceType.h @@ -2,6 +2,7 @@ namespace SOH { enum class ResourceType { + SOH_Array = 0x4F415252, // OARR SOH_Animation = 0x4F414E4D, // OANM SOH_PlayerAnimation = 0x4F50414D, // OPAM SOH_Room = 0x4F524F4D, // OROM diff --git a/mm/2s2h/resource/type/Array.cpp b/mm/2s2h/resource/type/Array.cpp new file mode 100644 index 000000000..7a9e40dc1 --- /dev/null +++ b/mm/2s2h/resource/type/Array.cpp @@ -0,0 +1,46 @@ +#include "Array.h" +#include "graphic/Fast3D/lus_gbi.h" + +namespace SOH { +Array::Array() : Resource(std::shared_ptr()) { +} + +void* Array::GetPointer() { + void* dataPointer = nullptr; + switch (ArrayType) { + case ArrayResourceType::Vertex: + dataPointer = Vertices.data(); + break; + case ArrayResourceType::Scalar: + default: + dataPointer = Scalars.data(); + break; + } + + return dataPointer; +} + +size_t Array::GetPointerSize() { + size_t typeSize = 0; + switch (ArrayType) { + case ArrayResourceType::Vertex: + typeSize = sizeof(F3DVtx); + break; + case ArrayResourceType::Scalar: + default: + switch (ArrayScalarType) { + case ScalarType::ZSCALAR_S16: + typeSize = sizeof(int16_t); + break; + case ScalarType::ZSCALAR_U16: + typeSize = sizeof(uint16_t); + break; + default: + // OTRTODO: IMPLEMENT OTHER TYPES! + break; + } + break; + } + return ArrayCount * typeSize; +} +} // namespace SOH \ No newline at end of file diff --git a/mm/2s2h/resource/type/Array.h b/mm/2s2h/resource/type/Array.h new file mode 100644 index 000000000..656b11194 --- /dev/null +++ b/mm/2s2h/resource/type/Array.h @@ -0,0 +1,85 @@ +#pragma once + +#include "Resource.h" + +union F3DVtx; +namespace SOH { +typedef union ScalarData { + uint8_t u8; + int8_t s8; + uint16_t u16; + int16_t s16; + uint32_t u32; + int32_t s32; + uint64_t u64; + int64_t s64; + float f32; + double f64; +} ScalarData; + +enum class ScalarType { + ZSCALAR_NONE, + ZSCALAR_S8, + ZSCALAR_U8, + ZSCALAR_X8, + ZSCALAR_S16, + ZSCALAR_U16, + ZSCALAR_X16, + ZSCALAR_S32, + ZSCALAR_U32, + ZSCALAR_X32, + ZSCALAR_S64, + ZSCALAR_U64, + ZSCALAR_X64, + ZSCALAR_F32, + ZSCALAR_F64 +}; + +// OTRTODO: Replace this with something that can be shared between the exporter and importer... +enum class ArrayResourceType { + Error, + Animation, + Array, + AltHeader, + Background, + Blob, + CollisionHeader, + Cutscene, + DisplayList, + Limb, + LimbTable, + Mtx, + Path, + PlayerAnimationData, + Room, + RoomCommand, + Scalar, + Scene, + Skeleton, + String, + Symbol, + Texture, + TextureAnimation, + TextureAnimationParams, + Vector, + Vertex, + Audio +}; + +class Array : public Ship::Resource { + public: + using Resource::Resource; + + Array(); + + void* GetPointer() override; + size_t GetPointerSize() override; + + ArrayResourceType ArrayType; + ScalarType ArrayScalarType; + size_t ArrayCount; + // OTRTODO: Should be a vector of resource pointers... + std::vector Scalars; + std::vector Vertices; +}; +} // namespace SOH \ No newline at end of file diff --git a/mm/src/code/stubs.c b/mm/src/code/stubs.c index 35de8a506..dea4cedb9 100644 --- a/mm/src/code/stubs.c +++ b/mm/src/code/stubs.c @@ -92,8 +92,6 @@ u64 rspbootTextEnd[1]; u64 njpgdspMainTextStart[1]; u64 njpgdspMainDataStart[1]; -Mtx gMtxClear; - u8 gPictoPhotoI8[PICTO_PHOTO_SIZE]; u8 D_80784600[0x56200]; From e87d7c6954f2e14f9ab48d4d398ad5317c34d130 Mon Sep 17 00:00:00 2001 From: inspectredc <78732756+inspectredc@users.noreply.github.com> Date: Wed, 19 Jun 2024 01:01:17 +0100 Subject: [PATCH 15/21] Delete z_message_tables.inc (#685) --- mm/src/code/z_message_tables.inc | 1561 ------------------------------ 1 file changed, 1561 deletions(-) delete mode 100644 mm/src/code/z_message_tables.inc diff --git a/mm/src/code/z_message_tables.inc b/mm/src/code/z_message_tables.inc deleted file mode 100644 index a7b41c8a9..000000000 --- a/mm/src/code/z_message_tables.inc +++ /dev/null @@ -1,1561 +0,0 @@ -#include "include/message_data_static.h" -#include "PR/mbi.h" - -MessageTableEntry D_801C6B98[4590] = { - { 0, 0, (void*)0x08000000 }, { 2, 0, (void*)0x0800000C }, { 4, 0, (void*)0x08000064 }, - { 5, 0, (void*)0x080000B8 }, { 6, 0, (void*)0x08000110 }, { 7, 0, (void*)0x08000168 }, - { 8, 0, (void*)0x080001C4 }, { 9, 0, (void*)0x08000248 }, { 0xA, 0, (void*)0x080002A8 }, - { 0xB, 0, (void*)0x08000310 }, { 0xC, 0, (void*)0x0800031C }, { 0xD, 0, (void*)0x080003E8 }, - { 0xE, 0, (void*)0x08000474 }, { 0xF, 0, (void*)0x080004BC }, { 0x10, 0, (void*)0x08000504 }, - { 0x11, 0, (void*)0x08000510 }, { 0x12, 0, (void*)0x08000554 }, { 0x13, 0, (void*)0x08000560 }, - { 0x14, 0, (void*)0x0800056C }, { 0x15, 0, (void*)0x08000604 }, { 0x16, 0, (void*)0x080006A0 }, - { 0x17, 0, (void*)0x0800073C }, { 0x18, 0, (void*)0x080007D8 }, { 0x19, 0, (void*)0x08000874 }, - { 0x1A, 0, (void*)0x08000940 }, { 0x1B, 0, (void*)0x080009E8 }, { 0x1C, 0, (void*)0x08000A84 }, - { 0x1D, 0, (void*)0x08000AD4 }, { 0x1E, 0, (void*)0x08000B28 }, { 0x1F, 0, (void*)0x08000B58 }, - { 0x20, 0, (void*)0x08000B88 }, { 0x21, 0, (void*)0x08000BB8 }, { 0x22, 0, (void*)0x08000BE8 }, - { 0x23, 0, (void*)0x08000C78 }, { 0x24, 0, (void*)0x08000CD0 }, { 0x25, 0, (void*)0x08000D30 }, - { 0x26, 0, (void*)0x08000DA4 }, { 0x27, 0, (void*)0x08000E38 }, { 0x28, 0, (void*)0x08000EB4 }, - { 0x29, 0, (void*)0x08000F88 }, { 0x2A, 0, (void*)0x08001060 }, { 0x2B, 0, (void*)0x0800113C }, - { 0x2C, 0, (void*)0x08001148 }, { 0x2D, 0, (void*)0x08001154 }, { 0x2E, 0, (void*)0x08001160 }, - { 0x2F, 0, (void*)0x08001210 }, { 0x30, 0, (void*)0x0800121C }, { 0x31, 0, (void*)0x08001228 }, - { 0x32, 0, (void*)0x08001234 }, { 0x33, 0, (void*)0x080012D4 }, { 0x34, 0, (void*)0x0800139C }, - { 0x35, 0, (void*)0x08001428 }, { 0x36, 0, (void*)0x080014B0 }, { 0x37, 0, (void*)0x08001554 }, - { 0x38, 0, (void*)0x08001560 }, { 0x39, 0, (void*)0x08001624 }, { 0x3A, 0, (void*)0x080016B8 }, - { 0x3B, 0, (void*)0x08001768 }, { 0x3C, 0, (void*)0x08001814 }, { 0x3D, 0, (void*)0x08001884 }, - { 0x3E, 0, (void*)0x080018E0 }, { 0x3F, 0, (void*)0x080019DC }, { 0x40, 0, (void*)0x08001A48 }, - { 0x41, 0, (void*)0x08001A54 }, { 0x42, 0, (void*)0x08001B0C }, { 0x43, 0, (void*)0x08001BF4 }, - { 0x4C, 0, (void*)0x08001CBC }, { 0x4D, 0, (void*)0x08001DBC }, { 0x4E, 0, (void*)0x08001DC8 }, - { 0x50, 0, (void*)0x08001DD4 }, { 0x51, 0, (void*)0x08001EA4 }, { 0x52, 0, (void*)0x08001EB0 }, - { 0x53, 0, (void*)0x08001EFC }, { 0x54, 0, (void*)0x08001F08 }, { 0x55, 0, (void*)0x08001F14 }, - { 0x56, 0, (void*)0x08001FB8 }, { 0x57, 0, (void*)0x08002058 }, { 0x58, 0, (void*)0x080020F8 }, - { 0x59, 0, (void*)0x080021A0 }, { 0x5A, 0, (void*)0x08002290 }, { 0x5B, 0, (void*)0x080022E4 }, - { 0x5C, 0, (void*)0x08002388 }, { 0x5D, 0, (void*)0x08002434 }, { 0x5E, 0, (void*)0x080024E8 }, - { 0x5F, 0, (void*)0x08002590 }, { 0x60, 0, (void*)0x0800261C }, { 0x61, 0, (void*)0x080026F0 }, - { 0x62, 0, (void*)0x080026FC }, { 0x63, 0, (void*)0x08002760 }, { 0x64, 0, (void*)0x080027CC }, - { 0x65, 0, (void*)0x080027D8 }, { 0x66, 0, (void*)0x0800282C }, { 0x67, 0, (void*)0x08002884 }, - { 0x68, 0, (void*)0x080028EC }, { 0x69, 0, (void*)0x08002950 }, { 0x6A, 0, (void*)0x080029CC }, - { 0x6B, 0, (void*)0x08002A24 }, { 0x6E, 0, (void*)0x08002A7C }, { 0x6F, 0, (void*)0x08002A88 }, - { 0x70, 0, (void*)0x08002B54 }, { 0x71, 0, (void*)0x08002B60 }, { 0x72, 0, (void*)0x08002B6C }, - { 0x73, 0, (void*)0x08002B78 }, { 0x74, 0, (void*)0x08002B84 }, { 0x75, 0, (void*)0x08002B90 }, - { 0x76, 0, (void*)0x08002B9C }, { 0x77, 0, (void*)0x08002BA8 }, { 0x78, 0, (void*)0x08002BB4 }, - { 0x79, 0, (void*)0x08002C98 }, { 0x7A, 0, (void*)0x08002D54 }, { 0x7B, 0, (void*)0x08002E14 }, - { 0x7C, 0, (void*)0x08002E90 }, { 0x7D, 0, (void*)0x08002F20 }, { 0x7E, 0, (void*)0x08002F9C }, - { 0x7F, 0, (void*)0x0800302C }, { 0x80, 0, (void*)0x0800309C }, { 0x81, 0, (void*)0x08003144 }, - { 0x82, 0, (void*)0x080031B0 }, { 0x83, 0, (void*)0x08003224 }, { 0x84, 0, (void*)0x08003298 }, - { 0x85, 0, (void*)0x08003324 }, { 0x86, 0, (void*)0x08003370 }, { 0x87, 0, (void*)0x08003444 }, - { 0x88, 0, (void*)0x080034F8 }, { 0x89, 0, (void*)0x08003560 }, { 0x8A, 0, (void*)0x080035F4 }, - { 0x8B, 0, (void*)0x080036B8 }, { 0x8C, 0, (void*)0x08003710 }, { 0x8D, 0, (void*)0x080037A0 }, - { 0x8E, 0, (void*)0x08003828 }, { 0x8F, 0, (void*)0x080038E0 }, { 0x91, 0, (void*)0x0800396C }, - { 0x92, 0, (void*)0x08003A44 }, { 0x93, 0, (void*)0x08003B08 }, { 0x94, 0, (void*)0x08003B60 }, - { 0x95, 0, (void*)0x08003B6C }, { 0x96, 0, (void*)0x08003BC0 }, { 0x97, 0, (void*)0x08003C1C }, - { 0x98, 0, (void*)0x08003C60 }, { 0x99, 0, (void*)0x08003CA8 }, { 0x9A, 0, (void*)0x08003CF4 }, - { 0x9B, 0, (void*)0x08003D40 }, { 0x9C, 0, (void*)0x08003DE0 }, { 0x9D, 0, (void*)0x08003E78 }, - { 0x9E, 0, (void*)0x08003F10 }, { 0x9F, 0, (void*)0x08003FA8 }, { 0xA0, 0, (void*)0x08003FB4 }, - { 0xA1, 0, (void*)0x0800401C }, { 0xA2, 0, (void*)0x08004088 }, { 0xA3, 0, (void*)0x08004094 }, - { 0xA4, 0, (void*)0x080040A0 }, { 0xA9, 0, (void*)0x080040AC }, { 0xAA, 0, (void*)0x08004130 }, - { 0xAB, 0, (void*)0x08004198 }, { 0xAC, 0, (void*)0x08004240 }, { 0xAD, 0, (void*)0x0800424C }, - { 0xAE, 0, (void*)0x08004258 }, { 0xAF, 0, (void*)0x08004264 }, { 0xB0, 0, (void*)0x08004270 }, - { 0xB1, 0, (void*)0x0800427C }, { 0xB2, 0, (void*)0x08004288 }, { 0xB4, 0, (void*)0x08004294 }, - { 0xB5, 0, (void*)0x08004354 }, { 0xB6, 0, (void*)0x08004418 }, { 0xB7, 0, (void*)0x080044E0 }, - { 0xB8, 0, (void*)0x080045A8 }, { 0xB9, 0, (void*)0x08004670 }, { 0xBA, 0, (void*)0x08004738 }, - { 0xBB, 0, (void*)0x08004744 }, { 0xBC, 0, (void*)0x08004750 }, { 0xBD, 0, (void*)0x0800475C }, - { 0xBE, 0, (void*)0x08004768 }, { 0xBF, 0, (void*)0x08004774 }, { 0xC0, 0, (void*)0x08004780 }, - { 0xC4, 0, (void*)0x0800478C }, { 0xC5, 0, (void*)0x080047D0 }, { 0xC6, 0, (void*)0x08004850 }, - { 0xC7, 0, (void*)0x080048D0 }, { 0xC8, 0, (void*)0x08004954 }, { 0xC9, 0, (void*)0x08004A5C }, - { 0xCA, 0, (void*)0x08004AFC }, { 0xCB, 0, (void*)0x08004C14 }, { 0xCC, 0, (void*)0x08004C78 }, - { 0xCD, 0, (void*)0x08004CDC }, { 0xF2, 0, (void*)0x08004D8C }, { 0xF3, 0, (void*)0x08004DC8 }, - { 0xF4, 0, (void*)0x08004E3C }, { 0xF5, 0, (void*)0x08004E8C }, { 0xF6, 0, (void*)0x08004EDC }, - { 0xF7, 0, (void*)0x08004F30 }, { 0xF8, 0, (void*)0x08004F70 }, { 0xF9, 0, (void*)0x08004F9C }, - { 0xFA, 0, (void*)0x08005034 }, { 0xFB, 0, (void*)0x08005088 }, { 0xFC, 0, (void*)0x080050FC }, - { 0xFD, 0, (void*)0x0800515C }, { 0xFE, 0, (void*)0x08005184 }, { 0xFF, 0, (void*)0x080051B8 }, - { 0x100, 0, (void*)0x08005214 }, { 0x101, 0, (void*)0x08005230 }, { 0x102, 0, (void*)0x0800524C }, - { 0x103, 0, (void*)0x08005268 }, { 0x104, 0, (void*)0x08005284 }, { 0x105, 0, (void*)0x080052A0 }, - { 0x106, 0, (void*)0x080052B8 }, { 0x107, 0, (void*)0x080052D4 }, { 0x108, 0, (void*)0x080052F8 }, - { 0x109, 0, (void*)0x0800531C }, { 0x10A, 0, (void*)0x0800533C }, { 0x10B, 0, (void*)0x08005358 }, - { 0x10C, 0, (void*)0x0800537C }, { 0x10D, 0, (void*)0x08005390 }, { 0x10E, 0, (void*)0x080053A8 }, - { 0x10F, 0, (void*)0x080053C4 }, { 0x110, 0, (void*)0x080053DC }, { 0x111, 0, (void*)0x080053FC }, - { 0x112, 0, (void*)0x08005414 }, { 0x113, 0, (void*)0x0800542C }, { 0x114, 0, (void*)0x08005450 }, - { 0x115, 0, (void*)0x08005470 }, { 0x116, 0, (void*)0x0800548C }, { 0x117, 0, (void*)0x080054A8 }, - { 0x118, 0, (void*)0x080054BC }, { 0x119, 0, (void*)0x080054D4 }, { 0x11A, 0, (void*)0x080054F4 }, - { 0x11B, 0, (void*)0x08005518 }, { 0x11C, 0, (void*)0x0800553C }, { 0x11D, 0, (void*)0x0800555C }, - { 0x11E, 0, (void*)0x08005578 }, { 0x11F, 0, (void*)0x08005598 }, { 0x120, 0, (void*)0x080055B4 }, - { 0x121, 0, (void*)0x080055CC }, { 0x122, 0, (void*)0x080055E8 }, { 0x123, 0, (void*)0x08005604 }, - { 0x124, 0, (void*)0x08005620 }, { 0x125, 0, (void*)0x08005638 }, { 0x126, 0, (void*)0x0800564C }, - { 0x127, 0, (void*)0x08005668 }, { 0x129, 0, (void*)0x08005684 }, { 0x12A, 0, (void*)0x0800569C }, - { 0x12B, 0, (void*)0x080056B8 }, { 0x12C, 0, (void*)0x080056D4 }, { 0x12D, 0, (void*)0x080056F0 }, - { 0x12E, 0, (void*)0x0800570C }, { 0x12F, 0, (void*)0x08005724 }, { 0x130, 0, (void*)0x0800573C }, - { 0x131, 0, (void*)0x08005758 }, { 0x132, 0, (void*)0x08005770 }, { 0x134, 0, (void*)0x08005788 }, - { 0x135, 0, (void*)0x080057A4 }, { 0x136, 0, (void*)0x080057C0 }, { 0x137, 0, (void*)0x080057D8 }, - { 0x138, 0, (void*)0x080057F4 }, { 0x139, 0, (void*)0x08005814 }, { 0x13A, 0, (void*)0x0800582C }, - { 0x13B, 0, (void*)0x0800584C }, { 0x13D, 0, (void*)0x08005868 }, { 0x13E, 0, (void*)0x08005884 }, - { 0x13F, 0, (void*)0x080058A0 }, { 0x140, 0, (void*)0x080058C4 }, { 0x141, 0, (void*)0x080058DC }, - { 0x142, 0, (void*)0x080058F4 }, { 0x143, 0, (void*)0x08005918 }, { 0x144, 0, (void*)0x08005934 }, - { 0x145, 0, (void*)0x08005954 }, { 0x146, 0, (void*)0x08005970 }, { 0x147, 0, (void*)0x08005988 }, - { 0x148, 0, (void*)0x080059A4 }, { 0x149, 0, (void*)0x080059C0 }, { 0x200, 0, (void*)0x080059D8 }, - { 0x201, 0, (void*)0x08005A54 }, { 0x202, 0, (void*)0x08005B48 }, { 0x203, 0, (void*)0x08005B74 }, - { 0x204, 0, (void*)0x08005BE4 }, { 0x205, 0, (void*)0x08005C38 }, { 0x206, 0, (void*)0x08005C94 }, - { 0x207, 0, (void*)0x08005D04 }, { 0x208, 0, (void*)0x08005D2C }, { 0x209, 0, (void*)0x08005D64 }, - { 0x20A, 0, (void*)0x08005DB4 }, { 0x20B, 0, (void*)0x08005E08 }, { 0x20C, 0, (void*)0x08005E14 }, - { 0x20D, 0, (void*)0x08005E60 }, { 0x20E, 0, (void*)0x08005ECC }, { 0x20F, 0, (void*)0x08005ED8 }, - { 0x210, 0, (void*)0x08005F74 }, { 0x211, 0, (void*)0x08005FAC }, { 0x212, 0, (void*)0x08005FD4 }, - { 0x213, 0, (void*)0x0800602C }, { 0x214, 0, (void*)0x08006050 }, { 0x215, 0, (void*)0x08006124 }, - { 0x216, 0, (void*)0x08006358 }, { 0x217, 0, (void*)0x080065B8 }, { 0x218, 0, (void*)0x08006620 }, - { 0x219, 0, (void*)0x0800668C }, { 0x21A, 0, (void*)0x08006720 }, { 0x21B, 0, (void*)0x0800674C }, - { 0x21D, 0, (void*)0x08006774 }, { 0x21E, 0, (void*)0x080067CC }, { 0x21F, 0, (void*)0x08006874 }, - { 0x220, 0, (void*)0x080068E0 }, { 0x221, 0, (void*)0x08006978 }, { 0x222, 0, (void*)0x08006A04 }, - { 0x223, 0, (void*)0x08006A48 }, { 0x224, 0, (void*)0x08006AE8 }, { 0x225, 0, (void*)0x08006B54 }, - { 0x226, 0, (void*)0x08006BB0 }, { 0x227, 0, (void*)0x08006BE8 }, { 0x228, 0, (void*)0x08006D58 }, - { 0x229, 0, (void*)0x08006E18 }, { 0x22A, 0, (void*)0x08006EA0 }, { 0x22B, 0, (void*)0x08006F00 }, - { 0x22C, 0, (void*)0x08006F44 }, { 0x22D, 0, (void*)0x08006F60 }, { 0x22E, 0, (void*)0x08006FB0 }, - { 0x22F, 0, (void*)0x08006FC8 }, { 0x230, 0, (void*)0x08007010 }, { 0x231, 0, (void*)0x080070C0 }, - { 0x232, 0, (void*)0x08007110 }, { 0x233, 0, (void*)0x08007158 }, { 0x234, 0, (void*)0x080071A4 }, - { 0x235, 0, (void*)0x08007208 }, { 0x236, 0, (void*)0x0800725C }, { 0x237, 0, (void*)0x080072AC }, - { 0x238, 0, (void*)0x0800730C }, { 0x239, 0, (void*)0x0800734C }, { 0x23A, 0, (void*)0x08007400 }, - { 0x23B, 0, (void*)0x08007468 }, { 0x23C, 0, (void*)0x08007500 }, { 0x23D, 0, (void*)0x08007538 }, - { 0x23E, 0, (void*)0x080075E4 }, { 0x23F, 0, (void*)0x080075F0 }, { 0x240, 0, (void*)0x0800765C }, - { 0x241, 0, (void*)0x080076D0 }, { 0x242, 0, (void*)0x08007744 }, { 0x243, 0, (void*)0x080077B0 }, - { 0x244, 0, (void*)0x08007830 }, { 0x245, 0, (void*)0x08007888 }, { 0x246, 0, (void*)0x080078B4 }, - { 0x247, 0, (void*)0x08007904 }, { 0x248, 0, (void*)0x08007950 }, { 0x249, 0, (void*)0x080079A0 }, - { 0x24A, 0, (void*)0x080079F0 }, { 0x24B, 0, (void*)0x08007A30 }, { 0x24C, 0, (void*)0x08007A78 }, - { 0x24D, 0, (void*)0x08007AD8 }, { 0x24E, 0, (void*)0x08007B54 }, { 0x24F, 0, (void*)0x08007BE8 }, - { 0x250, 0, (void*)0x08007C88 }, { 0x251, 0, (void*)0x08007CEC }, { 0x252, 0, (void*)0x08007D18 }, - { 0x253, 0, (void*)0x08007D68 }, { 0x254, 0, (void*)0x08007DAC }, { 0x255, 0, (void*)0x08007E04 }, - { 0x256, 0, (void*)0x08007E4C }, { 0x257, 0, (void*)0x08007EA4 }, { 0x258, 0, (void*)0x08007F00 }, - { 0x25A, 0, (void*)0x08007F58 }, { 0x25B, 0, (void*)0x08007FA0 }, { 0x25C, 0, (void*)0x08007FDC }, - { 0x25D, 0, (void*)0x08007FF8 }, { 0x25E, 0, (void*)0x08008024 }, { 0x25F, 0, (void*)0x080080E4 }, - { 0x260, 0, (void*)0x0800818C }, { 0x261, 0, (void*)0x080081F8 }, { 0x262, 0, (void*)0x08008288 }, - { 0x263, 0, (void*)0x08008304 }, { 0x264, 0, (void*)0x08008344 }, { 0x265, 0, (void*)0x08008420 }, - { 0x302, 0, (void*)0x08008498 }, { 0x303, 0, (void*)0x080085DC }, { 0x304, 0, (void*)0x08008660 }, - { 0x305, 0, (void*)0x080086B4 }, { 0x306, 0, (void*)0x08008720 }, { 0x307, 0, (void*)0x0800872C }, - { 0x308, 0, (void*)0x0800875C }, { 0x309, 0, (void*)0x08008788 }, { 0x30A, 0, (void*)0x080087BC }, - { 0x30B, 0, (void*)0x080087E8 }, { 0x30C, 0, (void*)0x08008824 }, { 0x30D, 0, (void*)0x08008894 }, - { 0x30E, 0, (void*)0x080088E4 }, { 0x30F, 0, (void*)0x08008914 }, { 0x310, 0, (void*)0x08008970 }, - { 0x311, 0, (void*)0x080089BC }, { 0x312, 0, (void*)0x080089F0 }, { 0x313, 0, (void*)0x08008A64 }, - { 0x314, 0, (void*)0x08008AA4 }, { 0x315, 0, (void*)0x08008B0C }, { 0x316, 0, (void*)0x08008B64 }, - { 0x317, 0, (void*)0x08008BA4 }, { 0x318, 0, (void*)0x08008BF0 }, { 0x319, 0, (void*)0x08008C48 }, - { 0x31A, 0, (void*)0x08008C84 }, { 0x31B, 0, (void*)0x08008CD0 }, { 0x31C, 0, (void*)0x08008D10 }, - { 0x31D, 0, (void*)0x08008D5C }, { 0x31E, 0, (void*)0x08008DCC }, { 0x31F, 0, (void*)0x08008E2C }, - { 0x320, 0, (void*)0x08008EBC }, { 0x321, 0, (void*)0x08008F30 }, { 0x322, 0, (void*)0x08008F60 }, - { 0x323, 0, (void*)0x08008F9C }, { 0x324, 0, (void*)0x08008FFC }, { 0x325, 0, (void*)0x08009044 }, - { 0x326, 0, (void*)0x080090A8 }, { 0x327, 0, (void*)0x080090F8 }, { 0x328, 0, (void*)0x08009140 }, - { 0x329, 0, (void*)0x08009188 }, { 0x32A, 0, (void*)0x080091F0 }, { 0x32B, 0, (void*)0x08009240 }, - { 0x32C, 0, (void*)0x0800928C }, { 0x32D, 0, (void*)0x080092F0 }, { 0x32E, 0, (void*)0x08009318 }, - { 0x32F, 0, (void*)0x08009358 }, { 0x330, 0, (void*)0x0800939C }, { 0x331, 0, (void*)0x080093E4 }, - { 0x332, 0, (void*)0x08009440 }, { 0x333, 0, (void*)0x0800949C }, { 0x334, 0, (void*)0x08009518 }, - { 0x335, 0, (void*)0x0800955C }, { 0x336, 0, (void*)0x08009598 }, { 0x337, 0, (void*)0x08009658 }, - { 0x338, 0, (void*)0x08009680 }, { 0x339, 0, (void*)0x080096A8 }, { 0x33A, 0, (void*)0x080096C8 }, - { 0x33B, 0, (void*)0x080096EC }, { 0x33C, 0, (void*)0x0800973C }, { 0x33D, 0, (void*)0x08009778 }, - { 0x33E, 0, (void*)0x080097BC }, { 0x33F, 0, (void*)0x08009930 }, { 0x340, 0, (void*)0x08009C50 }, - { 0x341, 0, (void*)0x08009CC4 }, { 0x342, 0, (void*)0x08009D30 }, { 0x343, 0, (void*)0x08009D58 }, - { 0x3E8, 0, (void*)0x08009D7C }, { 0x3E9, 0, (void*)0x08009DCC }, { 0x3EA, 0, (void*)0x08009DE8 }, - { 0x3EB, 0, (void*)0x08009E2C }, { 0x3EC, 0, (void*)0x08009E54 }, { 0x3ED, 0, (void*)0x08009EB8 }, - { 0x3EE, 0, (void*)0x08009EFC }, { 0x3EF, 0, (void*)0x08009F6C }, { 0x3F0, 0, (void*)0x08009FA0 }, - { 0x3F1, 0, (void*)0x08009FF0 }, { 0x3F2, 0, (void*)0x0800A030 }, { 0x3F3, 0, (void*)0x0800A090 }, - { 0x3F4, 0, (void*)0x0800A0D0 }, { 0x3F5, 0, (void*)0x0800A0F8 }, { 0x3F6, 0, (void*)0x0800A158 }, - { 0x3F7, 0, (void*)0x0800A190 }, { 0x3F8, 0, (void*)0x0800A1BC }, { 0x3F9, 0, (void*)0x0800A214 }, - { 0x3FA, 0, (void*)0x0800A25C }, { 0x3FB, 0, (void*)0x0800A29C }, { 0x3FC, 0, (void*)0x0800A2D8 }, - { 0x3FD, 0, (void*)0x0800A31C }, { 0x3FE, 0, (void*)0x0800A40C }, { 0x3FF, 0, (void*)0x0800A478 }, - { 0x400, 0, (void*)0x0800A4EC }, { 0x401, 0, (void*)0x0800A528 }, { 0x402, 0, (void*)0x0800A560 }, - { 0x403, 0, (void*)0x0800A5D4 }, { 0x404, 0, (void*)0x0800A608 }, { 0x405, 0, (void*)0x0800A63C }, - { 0x406, 0, (void*)0x0800A680 }, { 0x407, 0, (void*)0x0800A6B8 }, { 0x408, 0, (void*)0x0800A70C }, - { 0x44C, 0, (void*)0x0800A75C }, { 0x44D, 0, (void*)0x0800A850 }, { 0x44E, 0, (void*)0x0800A8B8 }, - { 0x44F, 0, (void*)0x0800A904 }, { 0x450, 0, (void*)0x0800A924 }, { 0x451, 0, (void*)0x0800A974 }, - { 0x452, 0, (void*)0x0800A9E8 }, { 0x453, 0, (void*)0x0800AA24 }, { 0x454, 0, (void*)0x0800AA7C }, - { 0x455, 0, (void*)0x0800AAB4 }, { 0x456, 0, (void*)0x0800AB10 }, { 0x457, 0, (void*)0x0800AB44 }, - { 0x458, 0, (void*)0x0800AB78 }, { 0x459, 0, (void*)0x0800AC0C }, { 0x45A, 0, (void*)0x0800AC84 }, - { 0x45B, 0, (void*)0x0800ACD0 }, { 0x45C, 0, (void*)0x0800AD4C }, { 0x45D, 0, (void*)0x0800ADC8 }, - { 0x45E, 0, (void*)0x0800AE68 }, { 0x45F, 0, (void*)0x0800AEBC }, { 0x460, 0, (void*)0x0800AF54 }, - { 0x461, 0, (void*)0x0800AF98 }, { 0x462, 0, (void*)0x0800AFC8 }, { 0x463, 0, (void*)0x0800AFE8 }, - { 0x464, 0, (void*)0x0800B044 }, { 0x465, 0, (void*)0x0800B094 }, { 0x466, 0, (void*)0x0800B0CC }, - { 0x467, 0, (void*)0x0800B0FC }, { 0x468, 0, (void*)0x0800B178 }, { 0x469, 0, (void*)0x0800B1B8 }, - { 0x46A, 0, (void*)0x0800B1F0 }, { 0x46B, 0, (void*)0x0800B244 }, { 0x46C, 0, (void*)0x0800B258 }, - { 0x46D, 0, (void*)0x0800B2B4 }, { 0x46E, 0, (void*)0x0800B324 }, { 0x46F, 0, (void*)0x0800B374 }, - { 0x470, 0, (void*)0x0800B3A8 }, { 0x471, 0, (void*)0x0800B3F4 }, { 0x472, 0, (void*)0x0800B428 }, - { 0x473, 0, (void*)0x0800B484 }, { 0x474, 0, (void*)0x0800B4A4 }, { 0x475, 0, (void*)0x0800B514 }, - { 0x476, 0, (void*)0x0800B570 }, { 0x477, 0, (void*)0x0800B5FC }, { 0x478, 0, (void*)0x0800B65C }, - { 0x479, 0, (void*)0x0800B6CC }, { 0x47A, 0, (void*)0x0800B6FC }, { 0x47B, 0, (void*)0x0800B760 }, - { 0x47C, 0, (void*)0x0800B78C }, { 0x47D, 0, (void*)0x0800B7DC }, { 0x47E, 0, (void*)0x0800B82C }, - { 0x4B0, 0, (void*)0x0800B854 }, { 0x4B1, 0, (void*)0x0800B8B0 }, { 0x4B2, 0, (void*)0x0800B8F8 }, - { 0x4B3, 0, (void*)0x0800B93C }, { 0x4B4, 0, (void*)0x0800B994 }, { 0x4B5, 0, (void*)0x0800B9D0 }, - { 0x4B6, 0, (void*)0x0800BA04 }, { 0x4B7, 0, (void*)0x0800BA94 }, { 0x4B8, 0, (void*)0x0800BAC4 }, - { 0x4B9, 0, (void*)0x0800BB4C }, { 0x4BA, 0, (void*)0x0800BB7C }, { 0x4BB, 0, (void*)0x0800BBFC }, - { 0x4BC, 0, (void*)0x0800BC28 }, { 0x4BD, 0, (void*)0x0800BCA4 }, { 0x4BE, 0, (void*)0x0800BCD0 }, - { 0x4BF, 0, (void*)0x0800BD58 }, { 0x4C0, 0, (void*)0x0800BD84 }, { 0x4C1, 0, (void*)0x0800BE18 }, - { 0x4C2, 0, (void*)0x0800BE54 }, { 0x4C3, 0, (void*)0x0800BED0 }, { 0x4C4, 0, (void*)0x0800BEEC }, - { 0x4C5, 0, (void*)0x0800BF5C }, { 0x4C6, 0, (void*)0x0800BF78 }, { 0x4C7, 0, (void*)0x0800BFF4 }, - { 0x4C8, 0, (void*)0x0800C018 }, { 0x4C9, 0, (void*)0x0800C0A4 }, { 0x4CA, 0, (void*)0x0800C0D8 }, - { 0x4CB, 0, (void*)0x0800C140 }, { 0x4CC, 0, (void*)0x0800C158 }, { 0x4CD, 0, (void*)0x0800C1E0 }, - { 0x4CE, 0, (void*)0x0800C220 }, { 0x4CF, 0, (void*)0x0800C29C }, { 0x4D0, 0, (void*)0x0800C2D0 }, - { 0x4D1, 0, (void*)0x0800C34C }, { 0x4D2, 0, (void*)0x0800C378 }, { 0x4D3, 0, (void*)0x0800C400 }, - { 0x4D4, 0, (void*)0x0800C448 }, { 0x4D5, 0, (void*)0x0800C4BC }, { 0x4D6, 0, (void*)0x0800C4E0 }, - { 0x4D7, 0, (void*)0x0800C560 }, { 0x4D8, 0, (void*)0x0800C598 }, { 0x4D9, 0, (void*)0x0800C604 }, - { 0x4DA, 0, (void*)0x0800C63C }, { 0x4DB, 0, (void*)0x0800C6B4 }, { 0x4DC, 0, (void*)0x0800C714 }, - { 0x4DD, 0, (void*)0x0800C784 }, { 0x4DE, 0, (void*)0x0800C7B4 }, { 0x4DF, 0, (void*)0x0800C81C }, - { 0x4E0, 0, (void*)0x0800C840 }, { 0x4E1, 0, (void*)0x0800C8AC }, { 0x4E2, 0, (void*)0x0800C8CC }, - { 0x4E3, 0, (void*)0x0800C95C }, { 0x4E4, 0, (void*)0x0800C990 }, { 0x4E5, 0, (void*)0x0800CA04 }, - { 0x4E6, 0, (void*)0x0800CA20 }, { 0x4E7, 0, (void*)0x0800CA9C }, { 0x4E8, 0, (void*)0x0800CAC0 }, - { 0x4E9, 0, (void*)0x0800CB48 }, { 0x4EA, 0, (void*)0x0800CB64 }, { 0x4EB, 0, (void*)0x0800CBE8 }, - { 0x4EC, 0, (void*)0x0800CC04 }, { 0x4ED, 0, (void*)0x0800CC64 }, { 0x4EE, 0, (void*)0x0800CC88 }, - { 0x4EF, 0, (void*)0x0800CCE8 }, { 0x4F0, 0, (void*)0x0800CD0C }, { 0x4F1, 0, (void*)0x0800CD7C }, - { 0x514, 0, (void*)0x0800CDA4 }, { 0x515, 0, (void*)0x0800CED0 }, { 0x516, 0, (void*)0x0800CFE8 }, - { 0x517, 0, (void*)0x0800D094 }, { 0x518, 0, (void*)0x0800D128 }, { 0x519, 0, (void*)0x0800D1C8 }, - { 0x51A, 0, (void*)0x0800D254 }, { 0x51B, 0, (void*)0x0800D2A8 }, { 0x51C, 0, (void*)0x0800D318 }, - { 0x51D, 0, (void*)0x0800D360 }, { 0x51E, 0, (void*)0x0800D3D0 }, { 0x51F, 0, (void*)0x0800D418 }, - { 0x520, 0, (void*)0x0800D488 }, { 0x521, 0, (void*)0x0800D534 }, { 0x522, 0, (void*)0x0800D5BC }, - { 0x523, 0, (void*)0x0800D65C }, { 0x524, 0, (void*)0x0800D6E4 }, { 0x525, 0, (void*)0x0800D728 }, - { 0x526, 0, (void*)0x0800D794 }, { 0x527, 0, (void*)0x0800D7D0 }, { 0x528, 0, (void*)0x0800D834 }, - { 0x529, 0, (void*)0x0800D878 }, { 0x52A, 0, (void*)0x0800D8E4 }, { 0x52B, 0, (void*)0x0800D98C }, - { 0x52C, 0, (void*)0x0800DA2C }, { 0x52D, 0, (void*)0x0800DAC8 }, { 0x52E, 0, (void*)0x0800DB6C }, - { 0x52F, 0, (void*)0x0800DBD4 }, { 0x530, 0, (void*)0x0800DC5C }, { 0x531, 0, (void*)0x0800DCC4 }, - { 0x532, 0, (void*)0x0800DD54 }, { 0x533, 0, (void*)0x0800DDA4 }, { 0x534, 0, (void*)0x0800DE1C }, - { 0x535, 0, (void*)0x0800DEC8 }, { 0x536, 0, (void*)0x0800DF50 }, { 0x537, 0, (void*)0x0800DFF0 }, - { 0x538, 0, (void*)0x0800E078 }, { 0x539, 0, (void*)0x0800E0BC }, { 0x53A, 0, (void*)0x0800E128 }, - { 0x53B, 0, (void*)0x0800E16C }, { 0x53C, 0, (void*)0x0800E1D8 }, { 0x53D, 0, (void*)0x0800E21C }, - { 0x53E, 0, (void*)0x0800E288 }, { 0x53F, 0, (void*)0x0800E334 }, { 0x540, 0, (void*)0x0800E414 }, - { 0x541, 0, (void*)0x0800E474 }, { 0x542, 0, (void*)0x0800E50C }, { 0x543, 0, (void*)0x0800E57C }, - { 0x544, 0, (void*)0x0800E614 }, { 0x545, 0, (void*)0x0800E678 }, { 0x546, 0, (void*)0x0800E728 }, - { 0x547, 0, (void*)0x0800E794 }, { 0x548, 0, (void*)0x0800E7F4 }, { 0x549, 0, (void*)0x0800E86C }, - { 0x54A, 0, (void*)0x0800E8D8 }, { 0x54B, 0, (void*)0x0800E934 }, { 0x54C, 0, (void*)0x0800E9B4 }, - { 0x54D, 0, (void*)0x0800EA28 }, { 0x54E, 0, (void*)0x0800EB08 }, { 0x54F, 0, (void*)0x0800EB60 }, - { 0x550, 0, (void*)0x0800EBC8 }, { 0x551, 0, (void*)0x0800EC2C }, { 0x552, 0, (void*)0x0800ECAC }, - { 0x553, 0, (void*)0x0800ED1C }, { 0x554, 0, (void*)0x0800ED9C }, { 0x555, 0, (void*)0x0800EE00 }, - { 0x556, 0, (void*)0x0800EEEC }, { 0x557, 0, (void*)0x0800EF4C }, { 0x558, 0, (void*)0x0800EFBC }, - { 0x559, 0, (void*)0x0800F03C }, { 0x55A, 0, (void*)0x0800F0B4 }, { 0x55B, 0, (void*)0x0800F110 }, - { 0x55C, 0, (void*)0x0800F188 }, { 0x55D, 0, (void*)0x0800F258 }, { 0x55E, 0, (void*)0x0800F300 }, - { 0x55F, 0, (void*)0x0800F398 }, { 0x560, 0, (void*)0x0800F44C }, { 0x561, 0, (void*)0x0800F570 }, - { 0x562, 0, (void*)0x0800F688 }, { 0x563, 0, (void*)0x0800F7A8 }, { 0x564, 0, (void*)0x0800F8B8 }, - { 0x565, 0, (void*)0x0800F9D8 }, { 0x566, 0, (void*)0x0800FAEC }, { 0x567, 0, (void*)0x0800FB84 }, - { 0x568, 0, (void*)0x0800FC34 }, { 0x569, 0, (void*)0x0800FCC8 }, { 0x56A, 0, (void*)0x0800FD78 }, - { 0x56B, 0, (void*)0x0800FE0C }, { 0x56C, 0, (void*)0x0800FEBC }, { 0x56D, 0, (void*)0x08010008 }, - { 0x56E, 0, (void*)0x08010168 }, { 0x56F, 0, (void*)0x080102C4 }, { 0x570, 0, (void*)0x0801042C }, - { 0x571, 0, (void*)0x08010584 }, { 0x572, 0, (void*)0x080106EC }, { 0x573, 0, (void*)0x08010844 }, - { 0x578, 0, (void*)0x080109A4 }, { 0x579, 0, (void*)0x08010A70 }, { 0x57A, 0, (void*)0x08010B28 }, - { 0x57B, 0, (void*)0x08010C7C }, { 0x57C, 0, (void*)0x08010D98 }, { 0x57D, 0, (void*)0x08010EC4 }, - { 0x57E, 0, (void*)0x08010FF4 }, { 0x57F, 0, (void*)0x080110E4 }, { 0x580, 0, (void*)0x080111D0 }, - { 0x582, 0, (void*)0x08011260 }, { 0x583, 0, (void*)0x08011304 }, { 0x584, 0, (void*)0x08011374 }, - { 0x585, 0, (void*)0x08011408 }, { 0x586, 0, (void*)0x080114BC }, { 0x587, 0, (void*)0x08011528 }, - { 0x588, 0, (void*)0x080115C0 }, { 0x589, 0, (void*)0x08011674 }, { 0x58A, 0, (void*)0x080116E4 }, - { 0x58B, 0, (void*)0x08011760 }, { 0x58C, 0, (void*)0x08011820 }, { 0x58D, 0, (void*)0x08011884 }, - { 0x58E, 0, (void*)0x0801192C }, { 0x58F, 0, (void*)0x08011A20 }, { 0x590, 0, (void*)0x08011B08 }, - { 0x591, 0, (void*)0x08011B68 }, { 0x592, 0, (void*)0x08011BA4 }, { 0x593, 0, (void*)0x08011BE4 }, - { 0x594, 0, (void*)0x08011C20 }, { 0x595, 0, (void*)0x08011D00 }, { 0x59C, 0, (void*)0x08011DC8 }, - { 0x59D, 0, (void*)0x08011E78 }, { 0x59E, 0, (void*)0x08011EB4 }, { 0x59F, 0, (void*)0x08011EFC }, - { 0x5A0, 0, (void*)0x08011FB4 }, { 0x5A1, 0, (void*)0x08012068 }, { 0x5A2, 0, (void*)0x080120A4 }, - { 0x5A3, 0, (void*)0x080120E4 }, { 0x5A4, 0, (void*)0x08012198 }, { 0x5A5, 0, (void*)0x08012248 }, - { 0x5A6, 0, (void*)0x08012284 }, { 0x5A7, 0, (void*)0x080122C4 }, { 0x5A8, 0, (void*)0x08012380 }, - { 0x5A9, 0, (void*)0x0801243C }, { 0x5AA, 0, (void*)0x08012478 }, { 0x5DC, 0, (void*)0x080124B8 }, - { 0x5DD, 0, (void*)0x08012548 }, { 0x5DE, 0, (void*)0x080125BC }, { 0x5DF, 0, (void*)0x08012678 }, - { 0x5E0, 0, (void*)0x08012730 }, { 0x5E1, 0, (void*)0x0801276C }, { 0x5E2, 0, (void*)0x08012784 }, - { 0x5E3, 0, (void*)0x080127C4 }, { 0x5E4, 0, (void*)0x080128A8 }, { 0x5E5, 0, (void*)0x080128E0 }, - { 0x5E6, 0, (void*)0x0801294C }, { 0x5E7, 0, (void*)0x08012970 }, { 0x5E8, 0, (void*)0x080129A4 }, - { 0x5E9, 0, (void*)0x08012A5C }, { 0x5EA, 0, (void*)0x08012ACC }, { 0x5EB, 0, (void*)0x08012B4C }, - { 0x5EC, 0, (void*)0x08012BF0 }, { 0x5ED, 0, (void*)0x08012CE0 }, { 0x5EE, 0, (void*)0x08012D84 }, - { 0x5EF, 0, (void*)0x08012DE4 }, { 0x5F0, 0, (void*)0x08012E1C }, { 0x5F1, 0, (void*)0x08012E7C }, - { 0x5F2, 0, (void*)0x08012EF0 }, { 0x5F3, 0, (void*)0x08012FAC }, { 0x5F4, 0, (void*)0x08013060 }, - { 0x5F5, 0, (void*)0x080130F4 }, { 0x5F6, 0, (void*)0x0801315C }, { 0x5F7, 0, (void*)0x08013210 }, - { 0x5F8, 0, (void*)0x08013258 }, { 0x60E, 0, (void*)0x080132B0 }, { 0x60F, 0, (void*)0x08013368 }, - { 0x610, 0, (void*)0x08013470 }, { 0x611, 0, (void*)0x08013530 }, { 0x612, 0, (void*)0x080135F8 }, - { 0x613, 0, (void*)0x08013680 }, { 0x614, 0, (void*)0x080137D0 }, { 0x615, 0, (void*)0x0801386C }, - { 0x616, 0, (void*)0x08013944 }, { 0x617, 0, (void*)0x080139B8 }, { 0x618, 0, (void*)0x08013A44 }, - { 0x619, 0, (void*)0x08013AA8 }, { 0x61A, 0, (void*)0x08013BFC }, { 0x61B, 0, (void*)0x08013C5C }, - { 0x61C, 0, (void*)0x08013CB0 }, { 0x61D, 0, (void*)0x08013D00 }, { 0x61E, 0, (void*)0x08013D60 }, - { 0x61F, 0, (void*)0x08013DAC }, { 0x620, 0, (void*)0x08013DEC }, { 0x621, 0, (void*)0x08013E4C }, - { 0x622, 0, (void*)0x08013E80 }, { 0x623, 0, (void*)0x08013ED8 }, { 0x624, 0, (void*)0x08013F24 }, - { 0x625, 0, (void*)0x08013FEC }, { 0x626, 0, (void*)0x08014010 }, { 0x627, 0, (void*)0x08014064 }, - { 0x628, 0, (void*)0x080140C4 }, { 0x629, 0, (void*)0x08014170 }, { 0x62A, 0, (void*)0x08014208 }, - { 0x62B, 0, (void*)0x080142D0 }, { 0x62C, 0, (void*)0x08014398 }, { 0x640, 0, (void*)0x0801454C }, - { 0x641, 0, (void*)0x0801458C }, { 0x642, 0, (void*)0x080145B4 }, { 0x644, 0, (void*)0x080145F0 }, - { 0x645, 0, (void*)0x08014608 }, { 0x646, 0, (void*)0x08014648 }, { 0x647, 0, (void*)0x080146B0 }, - { 0x648, 0, (void*)0x080146D4 }, { 0x649, 0, (void*)0x08014760 }, { 0x64A, 0, (void*)0x08014798 }, - { 0x64B, 0, (void*)0x08014850 }, { 0x64C, 0, (void*)0x08014898 }, { 0x64D, 0, (void*)0x080148B4 }, - { 0x64E, 0, (void*)0x08014924 }, { 0x64F, 0, (void*)0x08014988 }, { 0x650, 0, (void*)0x080149F0 }, - { 0x651, 0, (void*)0x08014A50 }, { 0x652, 0, (void*)0x08014A8C }, { 0x653, 0, (void*)0x08014AF4 }, - { 0x654, 0, (void*)0x08014B34 }, { 0x655, 0, (void*)0x08014B9C }, { 0x656, 0, (void*)0x08014BD8 }, - { 0x657, 0, (void*)0x08014C38 }, { 0x658, 0, (void*)0x08014C78 }, { 0x659, 0, (void*)0x08014CBC }, - { 0x65A, 0, (void*)0x08014D10 }, { 0x65B, 0, (void*)0x08014D94 }, { 0x65C, 0, (void*)0x08014E68 }, - { 0x65D, 0, (void*)0x08014F18 }, { 0x65E, 0, (void*)0x08014F5C }, { 0x65F, 0, (void*)0x08014F88 }, - { 0x660, 0, (void*)0x08014FD0 }, { 0x661, 0, (void*)0x08015024 }, { 0x662, 0, (void*)0x080150F0 }, - { 0x663, 0, (void*)0x08015188 }, { 0x664, 0, (void*)0x080151AC }, { 0x665, 0, (void*)0x080151E4 }, - { 0x666, 0, (void*)0x08015248 }, { 0x667, 0, (void*)0x0801529C }, { 0x668, 0, (void*)0x080152CC }, - { 0x669, 0, (void*)0x0801532C }, { 0x66A, 0, (void*)0x08015390 }, { 0x66B, 0, (void*)0x080153E4 }, - { 0x66C, 0, (void*)0x08015450 }, { 0x66D, 0, (void*)0x080154BC }, { 0x66E, 0, (void*)0x08015550 }, - { 0x66F, 0, (void*)0x080155C0 }, { 0x670, 0, (void*)0x08015600 }, { 0x671, 0, (void*)0x08015634 }, - { 0x672, 0, (void*)0x0801568C }, { 0x673, 0, (void*)0x080156C8 }, { 0x674, 0, (void*)0x0801574C }, - { 0x675, 0, (void*)0x08015784 }, { 0x676, 0, (void*)0x080157F8 }, { 0x677, 0, (void*)0x0801588C }, - { 0x678, 0, (void*)0x080158E4 }, { 0x679, 0, (void*)0x08015940 }, { 0x67A, 0, (void*)0x08015994 }, - { 0x67B, 0, (void*)0x080159E8 }, { 0x67C, 0, (void*)0x08015A48 }, { 0x67D, 0, (void*)0x08015B58 }, - { 0x67E, 0, (void*)0x08015C04 }, { 0x67F, 0, (void*)0x08015C50 }, { 0x680, 0, (void*)0x08015D64 }, - { 0x681, 0, (void*)0x08015E40 }, { 0x682, 0, (void*)0x08015ED0 }, { 0x683, 0, (void*)0x08015F00 }, - { 0x684, 0, (void*)0x08015F90 }, { 0x685, 0, (void*)0x08015FCC }, { 0x686, 0, (void*)0x08016020 }, - { 0x687, 0, (void*)0x08016078 }, { 0x688, 0, (void*)0x080160AC }, { 0x689, 0, (void*)0x08016104 }, - { 0x68A, 0, (void*)0x08016130 }, { 0x6A4, 0, (void*)0x08016184 }, { 0x6A5, 0, (void*)0x080161B8 }, - { 0x6A6, 0, (void*)0x0801620C }, { 0x6A7, 0, (void*)0x08016248 }, { 0x6A8, 0, (void*)0x080162A0 }, - { 0x6A9, 0, (void*)0x080162C8 }, { 0x6AA, 0, (void*)0x0801634C }, { 0x6AB, 0, (void*)0x08016398 }, - { 0x6AC, 0, (void*)0x080163FC }, { 0x6AD, 0, (void*)0x08016478 }, { 0x6AE, 0, (void*)0x080164B4 }, - { 0x6AF, 0, (void*)0x08016508 }, { 0x6B0, 0, (void*)0x08016548 }, { 0x6B1, 0, (void*)0x080165C0 }, - { 0x6B2, 0, (void*)0x08016600 }, { 0x6B3, 0, (void*)0x08016674 }, { 0x6B4, 0, (void*)0x080166B4 }, - { 0x6B5, 0, (void*)0x0801671C }, { 0x6B6, 0, (void*)0x08016758 }, { 0x6B7, 0, (void*)0x080167C0 }, - { 0x6B8, 0, (void*)0x080167F8 }, { 0x6B9, 0, (void*)0x08016858 }, { 0x6BA, 0, (void*)0x08016894 }, - { 0x6BB, 0, (void*)0x08016900 }, { 0x6BC, 0, (void*)0x0801693C }, { 0x6BD, 0, (void*)0x0801698C }, - { 0x6BE, 0, (void*)0x080169CC }, { 0x6BF, 0, (void*)0x08016A04 }, { 0x6C0, 0, (void*)0x08016A28 }, - { 0x6C1, 0, (void*)0x08016A7C }, { 0x6C2, 0, (void*)0x08016A98 }, { 0x6C3, 0, (void*)0x08016AC8 }, - { 0x6C4, 0, (void*)0x08016AE4 }, { 0x6C5, 0, (void*)0x08016B2C }, { 0x6C6, 0, (void*)0x08016B84 }, - { 0x6C7, 0, (void*)0x08016BC8 }, { 0x6C8, 0, (void*)0x08016BE0 }, { 0x6C9, 0, (void*)0x08016C34 }, - { 0x6CA, 0, (void*)0x08016C94 }, { 0x6CB, 0, (void*)0x08016CD0 }, { 0x6CC, 0, (void*)0x08016D24 }, - { 0x6CD, 0, (void*)0x08016D64 }, { 0x6CE, 0, (void*)0x08016DC8 }, { 0x6CF, 0, (void*)0x08016E08 }, - { 0x6D0, 0, (void*)0x08016E6C }, { 0x6D1, 0, (void*)0x08016EAC }, { 0x6D2, 0, (void*)0x08016F14 }, - { 0x6D3, 0, (void*)0x08016F50 }, { 0x6D4, 0, (void*)0x08016FD0 }, { 0x6D5, 0, (void*)0x08017008 }, - { 0x6D6, 0, (void*)0x08017084 }, { 0x6D7, 0, (void*)0x080170C0 }, { 0x6D8, 0, (void*)0x08017110 }, - { 0x6D9, 0, (void*)0x0801714C }, { 0x6DA, 0, (void*)0x080171A4 }, { 0x6DB, 0, (void*)0x080171E0 }, - { 0x6DC, 0, (void*)0x08017218 }, { 0x6DD, 0, (void*)0x08017264 }, { 0x6DE, 0, (void*)0x080172E0 }, - { 0x708, 0, (void*)0x08017330 }, { 0x709, 0, (void*)0x080173C4 }, { 0x70A, 0, (void*)0x0801741C }, - { 0x70B, 0, (void*)0x080174B4 }, { 0x70C, 0, (void*)0x0801753C }, { 0x70D, 0, (void*)0x08017564 }, - { 0x70E, 0, (void*)0x0801758C }, { 0x70F, 0, (void*)0x080175FC }, { 0x710, 0, (void*)0x08017650 }, - { 0x711, 0, (void*)0x08017748 }, { 0x712, 0, (void*)0x0801775C }, { 0x713, 0, (void*)0x080177B0 }, - { 0x714, 0, (void*)0x080177D8 }, { 0x715, 0, (void*)0x0801781C }, { 0x716, 0, (void*)0x0801787C }, - { 0x717, 0, (void*)0x08017A6C }, { 0x718, 0, (void*)0x08017AB8 }, { 0x719, 0, (void*)0x08017AE8 }, - { 0x71A, 0, (void*)0x08017B48 }, { 0x71B, 0, (void*)0x08017BA0 }, { 0x721, 0, (void*)0x08017C00 }, - { 0x722, 0, (void*)0x08017C44 }, { 0x723, 0, (void*)0x08017C84 }, { 0x724, 0, (void*)0x08017CC4 }, - { 0x725, 0, (void*)0x08017D04 }, { 0x726, 0, (void*)0x08017D90 }, { 0x727, 0, (void*)0x08017DE4 }, - { 0x728, 0, (void*)0x08017DF0 }, { 0x729, 0, (void*)0x08017E50 }, { 0x72A, 0, (void*)0x08017E9C }, - { 0x72B, 0, (void*)0x08017F08 }, { 0x72C, 0, (void*)0x08017F5C }, { 0x72D, 0, (void*)0x08017F8C }, - { 0x72E, 0, (void*)0x08017FC8 }, { 0x72F, 0, (void*)0x0801800C }, { 0x730, 0, (void*)0x08018064 }, - { 0x731, 0, (void*)0x080180A0 }, { 0x732, 0, (void*)0x080180E8 }, { 0x733, 0, (void*)0x08018104 }, - { 0x734, 0, (void*)0x08018188 }, { 0x735, 0, (void*)0x08018240 }, { 0x736, 0, (void*)0x080182A8 }, - { 0x737, 0, (void*)0x080182E4 }, { 0x738, 0, (void*)0x080184D0 }, { 0x73A, 0, (void*)0x08018510 }, - { 0x73B, 0, (void*)0x08018594 }, { 0x73C, 0, (void*)0x08018618 }, { 0x73D, 0, (void*)0x080186B0 }, - { 0x73E, 0, (void*)0x0801876C }, { 0x73F, 0, (void*)0x08018818 }, { 0x740, 0, (void*)0x080188CC }, - { 0x741, 0, (void*)0x08018908 }, { 0x742, 0, (void*)0x08018938 }, { 0x743, 0, (void*)0x080189A0 }, - { 0x744, 0, (void*)0x08018A00 }, { 0x745, 0, (void*)0x08018A90 }, { 0x746, 0, (void*)0x08018B4C }, - { 0x747, 0, (void*)0x08018C18 }, { 0x748, 0, (void*)0x08018C8C }, { 0x749, 0, (void*)0x08018CE0 }, - { 0x74A, 0, (void*)0x08018D78 }, { 0x74B, 0, (void*)0x08018DD0 }, { 0x74C, 0, (void*)0x08018E38 }, - { 0x74D, 0, (void*)0x08018E78 }, { 0x74E, 0, (void*)0x08018EC0 }, { 0x74F, 0, (void*)0x08018F38 }, - { 0x750, 0, (void*)0x08018FF4 }, { 0x751, 0, (void*)0x08019014 }, { 0x752, 0, (void*)0x0801910C }, - { 0x753, 0, (void*)0x08019160 }, { 0x754, 0, (void*)0x080191A4 }, { 0x755, 0, (void*)0x080191FC }, - { 0x756, 0, (void*)0x08019254 }, { 0x757, 0, (void*)0x0801927C }, { 0x758, 0, (void*)0x080192E8 }, - { 0x759, 0, (void*)0x08019354 }, { 0x75A, 0, (void*)0x0801939C }, { 0x76C, 0, (void*)0x0801941C }, - { 0x76D, 0, (void*)0x08019468 }, { 0x76E, 0, (void*)0x080194BC }, { 0x76F, 0, (void*)0x080194F8 }, - { 0x770, 0, (void*)0x08019530 }, { 0x771, 0, (void*)0x0801956C }, { 0x772, 0, (void*)0x080195A4 }, - { 0x773, 0, (void*)0x080195DC }, { 0x774, 0, (void*)0x08019620 }, { 0x775, 0, (void*)0x08019654 }, - { 0x776, 0, (void*)0x08019688 }, { 0x777, 0, (void*)0x080196A4 }, { 0x778, 0, (void*)0x080196F0 }, - { 0x779, 0, (void*)0x080197A4 }, { 0x77A, 0, (void*)0x080197C0 }, { 0x77B, 0, (void*)0x080197E4 }, - { 0x77C, 0, (void*)0x0801982C }, { 0x77D, 0, (void*)0x08019854 }, { 0x7D0, 0, (void*)0x08019878 }, - { 0x7D1, 0, (void*)0x080198BC }, { 0x7D2, 0, (void*)0x080199A8 }, { 0x7D3, 0, (void*)0x080199BC }, - { 0x7D4, 0, (void*)0x080199E4 }, { 0x7D5, 0, (void*)0x08019AD8 }, { 0x7D6, 0, (void*)0x08019B10 }, - { 0x7D7, 0, (void*)0x08019B28 }, { 0x7D8, 0, (void*)0x08019BA4 }, { 0x7D9, 0, (void*)0x08019BC8 }, - { 0x7DC, 0, (void*)0x08019C20 }, { 0x7DD, 0, (void*)0x08019C40 }, { 0x7DE, 0, (void*)0x08019C60 }, - { 0x800, 0, (void*)0x08019C80 }, { 0x801, 0, (void*)0x08019D44 }, { 0x802, 0, (void*)0x08019DD0 }, - { 0x803, 0, (void*)0x08019E24 }, { 0x804, 0, (void*)0x08019E44 }, { 0x806, 0, (void*)0x08019F84 }, - { 0x807, 0, (void*)0x0801A0F0 }, { 0x80B, 0, (void*)0x0801A0FC }, { 0x80C, 0, (void*)0x0801A144 }, - { 0x80D, 0, (void*)0x0801A1AC }, { 0x80E, 0, (void*)0x0801A218 }, { 0x80F, 0, (void*)0x0801A288 }, - { 0x810, 0, (void*)0x0801A320 }, { 0x811, 0, (void*)0x0801A348 }, { 0x820, 0, (void*)0x0801A378 }, - { 0x821, 0, (void*)0x0801A3B4 }, { 0x822, 0, (void*)0x0801A408 }, { 0x823, 0, (void*)0x0801A484 }, - { 0x824, 0, (void*)0x0801A4D4 }, { 0x825, 0, (void*)0x0801A538 }, { 0x826, 0, (void*)0x0801A5A8 }, - { 0x827, 0, (void*)0x0801A614 }, { 0x828, 0, (void*)0x0801A654 }, { 0x829, 0, (void*)0x0801A680 }, - { 0x82A, 0, (void*)0x0801A6EC }, { 0x82B, 0, (void*)0x0801A740 }, { 0x82C, 0, (void*)0x0801A79C }, - { 0x82D, 0, (void*)0x0801A808 }, { 0x82E, 0, (void*)0x0801A868 }, { 0x82F, 0, (void*)0x0801A894 }, - { 0x830, 0, (void*)0x0801A918 }, { 0x831, 0, (void*)0x0801A968 }, { 0x832, 0, (void*)0x0801A9DC }, - { 0x833, 0, (void*)0x0801AA5C }, { 0x834, 0, (void*)0x0801AA80 }, { 0x835, 0, (void*)0x0801AAD0 }, - { 0x836, 0, (void*)0x0801AB60 }, { 0x838, 0, (void*)0x0801AC28 }, { 0x839, 0, (void*)0x0801AC7C }, - { 0x83A, 0, (void*)0x0801AD18 }, { 0x83B, 0, (void*)0x0801AD48 }, { 0x83C, 0, (void*)0x0801ADC4 }, - { 0x83D, 0, (void*)0x0801AE2C }, { 0x83E, 0, (void*)0x0801AE84 }, { 0x83F, 0, (void*)0x0801AEC4 }, - { 0x840, 0, (void*)0x0801AF0C }, { 0x841, 0, (void*)0x0801AF48 }, { 0x842, 0, (void*)0x0801AFA4 }, - { 0x843, 0, (void*)0x0801AFE4 }, { 0x844, 0, (void*)0x0801B054 }, { 0x845, 0, (void*)0x0801B090 }, - { 0x846, 0, (void*)0x0801B0CC }, { 0x847, 0, (void*)0x0801B114 }, { 0x848, 0, (void*)0x0801B168 }, - { 0x849, 0, (void*)0x0801B190 }, { 0x84A, 0, (void*)0x0801B210 }, { 0x84B, 0, (void*)0x0801B278 }, - { 0x84C, 0, (void*)0x0801B2BC }, { 0x84D, 0, (void*)0x0801B310 }, { 0x84E, 0, (void*)0x0801B380 }, - { 0x84F, 0, (void*)0x0801B3A4 }, { 0x850, 0, (void*)0x0801B3CC }, { 0x851, 0, (void*)0x0801B47C }, - { 0x852, 0, (void*)0x0801B488 }, { 0x853, 0, (void*)0x0801B4B4 }, { 0x854, 0, (void*)0x0801B5C4 }, - { 0x855, 0, (void*)0x0801B608 }, { 0x856, 0, (void*)0x0801B678 }, { 0x857, 0, (void*)0x0801B6D8 }, - { 0x858, 0, (void*)0x0801B718 }, { 0x859, 0, (void*)0x0801B78C }, { 0x85A, 0, (void*)0x0801B810 }, - { 0x85B, 0, (void*)0x0801B85C }, { 0x85C, 0, (void*)0x0801B8C4 }, { 0x85D, 0, (void*)0x0801B8F4 }, - { 0x85E, 0, (void*)0x0801B900 }, { 0x85F, 0, (void*)0x0801B92C }, { 0x860, 0, (void*)0x0801B968 }, - { 0x861, 0, (void*)0x0801B994 }, { 0x862, 0, (void*)0x0801B9E0 }, { 0x863, 0, (void*)0x0801BA6C }, - { 0x864, 0, (void*)0x0801BACC }, { 0x865, 0, (void*)0x0801BB18 }, { 0x866, 0, (void*)0x0801BB8C }, - { 0x867, 0, (void*)0x0801BBA4 }, { 0x868, 0, (void*)0x0801BC0C }, { 0x869, 0, (void*)0x0801BC88 }, - { 0x86A, 0, (void*)0x0801BCC0 }, { 0x86B, 0, (void*)0x0801BD30 }, { 0x86C, 0, (void*)0x0801BD90 }, - { 0x86D, 0, (void*)0x0801BDD4 }, { 0x86E, 0, (void*)0x0801BE60 }, { 0x86F, 0, (void*)0x0801BF1C }, - { 0x870, 0, (void*)0x0801BF40 }, { 0x871, 0, (void*)0x0801BF90 }, { 0x872, 0, (void*)0x0801BFB0 }, - { 0x873, 0, (void*)0x0801C004 }, { 0x874, 0, (void*)0x0801C038 }, { 0x875, 0, (void*)0x0801C0A0 }, - { 0x876, 0, (void*)0x0801C0F8 }, { 0x877, 0, (void*)0x0801C170 }, { 0x878, 0, (void*)0x0801C1E0 }, - { 0x879, 0, (void*)0x0801C23C }, { 0x87A, 0, (void*)0x0801C2A0 }, { 0x87B, 0, (void*)0x0801C2D4 }, - { 0x87C, 0, (void*)0x0801C314 }, { 0x87D, 0, (void*)0x0801C384 }, { 0x87E, 0, (void*)0x0801C3DC }, - { 0x87F, 0, (void*)0x0801C43C }, { 0x880, 0, (void*)0x0801C494 }, { 0x881, 0, (void*)0x0801C504 }, - { 0x882, 0, (void*)0x0801C580 }, { 0x883, 0, (void*)0x0801C5E8 }, { 0x884, 0, (void*)0x0801C694 }, - { 0x885, 0, (void*)0x0801C6DC }, { 0x886, 0, (void*)0x0801C73C }, { 0x887, 0, (void*)0x0801C798 }, - { 0x888, 0, (void*)0x0801C7EC }, { 0x889, 0, (void*)0x0801C824 }, { 0x88A, 0, (void*)0x0801C86C }, - { 0x88B, 0, (void*)0x0801C890 }, { 0x88C, 0, (void*)0x0801C8C4 }, { 0x88D, 0, (void*)0x0801C914 }, - { 0x88E, 0, (void*)0x0801C98C }, { 0x88F, 0, (void*)0x0801CA00 }, { 0x890, 0, (void*)0x0801CA40 }, - { 0x898, 0, (void*)0x0801CADC }, { 0x899, 0, (void*)0x0801CB1C }, { 0x89A, 0, (void*)0x0801CB60 }, - { 0x89B, 0, (void*)0x0801CC18 }, { 0x89C, 0, (void*)0x0801CC74 }, { 0x89D, 0, (void*)0x0801CCCC }, - { 0x89E, 0, (void*)0x0801CD40 }, { 0x89F, 0, (void*)0x0801CDA0 }, { 0x8A0, 0, (void*)0x0801CDE8 }, - { 0x8A1, 0, (void*)0x0801CE44 }, { 0x8A2, 0, (void*)0x0801CEB0 }, { 0x8A3, 0, (void*)0x0801CF0C }, - { 0x8A4, 0, (void*)0x0801CF38 }, { 0x8A5, 0, (void*)0x0801CFD0 }, { 0x8CA, 0, (void*)0x0801D010 }, - { 0x8CB, 0, (void*)0x0801D0E0 }, { 0x8CC, 0, (void*)0x0801D108 }, { 0x8CD, 0, (void*)0x0801D138 }, - { 0x8CE, 0, (void*)0x0801D170 }, { 0x8CF, 0, (void*)0x0801D1C0 }, { 0x8D0, 0, (void*)0x0801D200 }, - { 0x8D1, 0, (void*)0x0801D238 }, { 0x8D2, 0, (void*)0x0801D268 }, { 0x8D3, 0, (void*)0x0801D340 }, - { 0x8D4, 0, (void*)0x0801D3D4 }, { 0x8D5, 0, (void*)0x0801D444 }, { 0x8D6, 0, (void*)0x0801D488 }, - { 0x8D7, 0, (void*)0x0801D4D8 }, { 0x8D8, 0, (void*)0x0801D508 }, { 0x8D9, 0, (void*)0x0801D574 }, - { 0x8DA, 0, (void*)0x0801D5A0 }, { 0x8DB, 0, (void*)0x0801D5D0 }, { 0x8DC, 0, (void*)0x0801D600 }, - { 0x8DD, 0, (void*)0x0801D644 }, { 0x8DE, 0, (void*)0x0801D7C8 }, { 0x8DF, 0, (void*)0x0801D7FC }, - { 0x8E0, 0, (void*)0x0801D844 }, { 0x8E1, 0, (void*)0x0801D898 }, { 0x8E2, 0, (void*)0x0801D938 }, - { 0x8E3, 0, (void*)0x0801D9E0 }, { 0x8E4, 0, (void*)0x0801DA40 }, { 0x8E5, 0, (void*)0x0801DA9C }, - { 0x8E6, 0, (void*)0x0801DB20 }, { 0x8E7, 0, (void*)0x0801DB88 }, { 0x8E8, 0, (void*)0x0801DBB0 }, - { 0x8E9, 0, (void*)0x0801DBE4 }, { 0x8EA, 0, (void*)0x0801DC6C }, { 0x8EB, 0, (void*)0x0801DC84 }, - { 0x8EC, 0, (void*)0x0801DD18 }, { 0x910, 0, (void*)0x0801DD64 }, { 0x911, 0, (void*)0x0801DDC0 }, - { 0x912, 0, (void*)0x0801DE3C }, { 0x913, 0, (void*)0x0801DEAC }, { 0x914, 0, (void*)0x0801DF18 }, - { 0x915, 0, (void*)0x0801DF88 }, { 0x916, 0, (void*)0x0801DFF0 }, { 0x917, 0, (void*)0x0801E038 }, - { 0x918, 0, (void*)0x0801E164 }, { 0x919, 0, (void*)0x0801E1BC }, { 0x91A, 0, (void*)0x0801E204 }, - { 0x91B, 0, (void*)0x0801E330 }, { 0x91C, 0, (void*)0x0801E370 }, { 0x91E, 0, (void*)0x0801E3CC }, - { 0x92E, 0, (void*)0x0801E464 }, { 0x92F, 0, (void*)0x0801E4C0 }, { 0x930, 0, (void*)0x0801E534 }, - { 0x931, 0, (void*)0x0801E5AC }, { 0x932, 0, (void*)0x0801E5B8 }, { 0x933, 0, (void*)0x0801E608 }, - { 0x934, 0, (void*)0x0801E650 }, { 0x935, 0, (void*)0x0801E698 }, { 0x936, 0, (void*)0x0801E6D0 }, - { 0x937, 0, (void*)0x0801E738 }, { 0x938, 0, (void*)0x0801E768 }, { 0x960, 0, (void*)0x0801E774 }, - { 0x961, 0, (void*)0x0801E798 }, { 0x962, 0, (void*)0x0801E810 }, { 0x963, 0, (void*)0x0801E8AC }, - { 0x964, 0, (void*)0x0801E97C }, { 0x965, 0, (void*)0x0801E9C8 }, { 0x966, 0, (void*)0x0801EA1C }, - { 0x967, 0, (void*)0x0801EABC }, { 0x968, 0, (void*)0x0801EB08 }, { 0x969, 0, (void*)0x0801EBC8 }, - { 0x96A, 0, (void*)0x0801EC58 }, { 0x96B, 0, (void*)0x0801EC8C }, { 0x96C, 0, (void*)0x0801ECD4 }, - { 0x96D, 0, (void*)0x0801ED40 }, { 0x96E, 0, (void*)0x0801ED88 }, { 0x96F, 0, (void*)0x0801EE4C }, - { 0x970, 0, (void*)0x0801EF08 }, { 0x971, 0, (void*)0x0801EF98 }, { 0x972, 0, (void*)0x0801EFF4 }, - { 0x9C4, 0, (void*)0x0801F000 }, { 0x9C5, 0, (void*)0x0801F08C }, { 0x9C6, 0, (void*)0x0801F0B0 }, - { 0x9C7, 0, (void*)0x0801F104 }, { 0x9C8, 0, (void*)0x0801F110 }, { 0x9C9, 0, (void*)0x0801F160 }, - { 0x9CA, 0, (void*)0x0801F1D4 }, { 0x9CB, 0, (void*)0x0801F25C }, { 0x9CC, 0, (void*)0x0801F2A0 }, - { 0x9CD, 0, (void*)0x0801F2E8 }, { 0x9CE, 0, (void*)0x0801F338 }, { 0x9CF, 0, (void*)0x0801F37C }, - { 0x9D0, 0, (void*)0x0801F3CC }, { 0x9D1, 0, (void*)0x0801F424 }, { 0x9D2, 0, (void*)0x0801F450 }, - { 0x9D3, 0, (void*)0x0801F510 }, { 0x9D4, 0, (void*)0x0801F558 }, { 0x9D5, 0, (void*)0x0801F580 }, - { 0x9D6, 0, (void*)0x0801F5D0 }, { 0x9D7, 0, (void*)0x0801F61C }, { 0x9D8, 0, (void*)0x0801F65C }, - { 0x9D9, 0, (void*)0x0801F69C }, { 0x9DA, 0, (void*)0x0801F6EC }, { 0x9DB, 0, (void*)0x0801F764 }, - { 0x9DC, 0, (void*)0x0801F7B0 }, { 0x9DD, 0, (void*)0x0801F808 }, { 0x9DE, 0, (void*)0x0801F8AC }, - { 0x9DF, 0, (void*)0x0801F91C }, { 0x9E0, 0, (void*)0x0801F990 }, { 0x9E1, 0, (void*)0x0801F9CC }, - { 0x9E2, 0, (void*)0x0801FA2C }, { 0x9E3, 0, (void*)0x0801FA74 }, { 0x9E4, 0, (void*)0x0801FB24 }, - { 0x9E5, 0, (void*)0x0801FB90 }, { 0x9E6, 0, (void*)0x0801FBBC }, { 0x9E7, 0, (void*)0x0801FBE4 }, - { 0x9E8, 0, (void*)0x0801FC4C }, { 0x9E9, 0, (void*)0x0801FCA0 }, { 0x9EA, 0, (void*)0x0801FD80 }, - { 0x9EB, 0, (void*)0x0801FDE8 }, { 0x9EC, 0, (void*)0x0801FE70 }, { 0x9ED, 0, (void*)0x0801FEAC }, - { 0x9EE, 0, (void*)0x0801FF40 }, { 0x9EF, 0, (void*)0x0801FF8C }, { 0xA28, 0, (void*)0x0801FFC4 }, - { 0xA29, 0, (void*)0x0801FFF4 }, { 0xA2A, 0, (void*)0x08020014 }, { 0xA2B, 0, (void*)0x08020048 }, - { 0xA2C, 0, (void*)0x0802012C }, { 0xA2D, 0, (void*)0x08020190 }, { 0xA2E, 0, (void*)0x080201EC }, - { 0xA2F, 0, (void*)0x08020278 }, { 0xA30, 0, (void*)0x080202E4 }, { 0xA31, 0, (void*)0x0802031C }, - { 0xA32, 0, (void*)0x08020360 }, { 0xA33, 0, (void*)0x080203A4 }, { 0xA34, 0, (void*)0x080203C8 }, - { 0xA35, 0, (void*)0x08020424 }, { 0xA36, 0, (void*)0x0802047C }, { 0xA37, 0, (void*)0x080204F0 }, - { 0xA38, 0, (void*)0x08020534 }, { 0xA39, 0, (void*)0x08020570 }, { 0xA3A, 0, (void*)0x080205E4 }, - { 0xBB8, 0, (void*)0x08020668 }, { 0xBB9, 0, (void*)0x080206A4 }, { 0xBBA, 0, (void*)0x080206EC }, - { 0xBBB, 0, (void*)0x08020710 }, { 0xBBC, 0, (void*)0x08020764 }, { 0xBBD, 0, (void*)0x080207A4 }, - { 0xBBE, 0, (void*)0x080207E8 }, { 0xBBF, 0, (void*)0x08020814 }, { 0xBC0, 0, (void*)0x08020858 }, - { 0xBC1, 0, (void*)0x080208B0 }, { 0xBC2, 0, (void*)0x08020910 }, { 0xBC3, 0, (void*)0x08020960 }, - { 0xBC4, 0, (void*)0x080209C4 }, { 0xBC5, 0, (void*)0x080209F0 }, { 0xBC6, 0, (void*)0x08020A50 }, - { 0xBC7, 0, (void*)0x08020A8C }, { 0xBC8, 0, (void*)0x08020B00 }, { 0xBC9, 0, (void*)0x08020B3C }, - { 0xBCA, 0, (void*)0x08020BB8 }, { 0xBCB, 0, (void*)0x08020BF4 }, { 0xBCC, 0, (void*)0x08020C4C }, - { 0xBCD, 0, (void*)0x08020C88 }, { 0xBCE, 0, (void*)0x08020CF0 }, { 0xBCF, 0, (void*)0x08020D2C }, - { 0xBD0, 0, (void*)0x08020D80 }, { 0xBD1, 0, (void*)0x08020DC0 }, { 0xBD2, 0, (void*)0x08020DFC }, - { 0xBD3, 0, (void*)0x08020E58 }, { 0xBD4, 0, (void*)0x08020E88 }, { 0xBD5, 0, (void*)0x08020EE0 }, - { 0xBD6, 0, (void*)0x08020F18 }, { 0xBD7, 0, (void*)0x08020F44 }, { 0xBEA, 0, (void*)0x08020F60 }, - { 0xBEB, 0, (void*)0x08021158 }, { 0xBEC, 0, (void*)0x080211C0 }, { 0xBED, 0, (void*)0x080211EC }, - { 0xBEE, 0, (void*)0x08021350 }, { 0xBEF, 0, (void*)0x08021380 }, { 0xBF0, 0, (void*)0x080213F8 }, - { 0xBF1, 0, (void*)0x08021480 }, { 0xBF2, 0, (void*)0x08021558 }, { 0xBF3, 0, (void*)0x08021588 }, - { 0xBF4, 0, (void*)0x080215E0 }, { 0xBF5, 0, (void*)0x080216A0 }, { 0xBF6, 0, (void*)0x080217CC }, - { 0xBF7, 0, (void*)0x08021858 }, { 0xBF8, 0, (void*)0x080218CC }, { 0xBF9, 0, (void*)0x08021974 }, - { 0xBFA, 0, (void*)0x080219F8 }, { 0xBFB, 0, (void*)0x08021A68 }, { 0xBFC, 0, (void*)0x08021AF8 }, - { 0xBFD, 0, (void*)0x08021B9C }, { 0xBFE, 0, (void*)0x08021BE0 }, { 0xBFF, 0, (void*)0x08021C54 }, - { 0xC00, 0, (void*)0x08021C80 }, { 0xC01, 0, (void*)0x08021CC8 }, { 0xC02, 0, (void*)0x08021F20 }, - { 0xC03, 0, (void*)0x08021F50 }, { 0xC04, 0, (void*)0x08022024 }, { 0xC1D, 0, (void*)0x08022090 }, - { 0xC1E, 0, (void*)0x080220B8 }, { 0xC1F, 0, (void*)0x080220D0 }, { 0xC20, 0, (void*)0x08022104 }, - { 0xC21, 0, (void*)0x08022198 }, { 0xC22, 0, (void*)0x080221B8 }, { 0xC23, 0, (void*)0x080221DC }, - { 0xC24, 0, (void*)0x08022248 }, { 0xC25, 0, (void*)0x08022288 }, { 0xC26, 0, (void*)0x08022308 }, - { 0xC27, 0, (void*)0x0802233C }, { 0xC28, 0, (void*)0x0802239C }, { 0xC29, 0, (void*)0x080223E4 }, - { 0xC2A, 0, (void*)0x08022408 }, { 0xC2B, 0, (void*)0x08022470 }, { 0xC2C, 0, (void*)0x080224C4 }, - { 0xC2D, 0, (void*)0x0802255C }, { 0xC2E, 0, (void*)0x08022584 }, { 0xC2F, 0, (void*)0x080225AC }, - { 0xC30, 0, (void*)0x08022640 }, { 0xC31, 0, (void*)0x08022670 }, { 0xC32, 0, (void*)0x0802268C }, - { 0xC33, 0, (void*)0x080226A0 }, { 0xC34, 0, (void*)0x080226E0 }, { 0xC35, 0, (void*)0x08022738 }, - { 0xC36, 0, (void*)0x08022760 }, { 0xC37, 0, (void*)0x08022780 }, { 0xC38, 0, (void*)0x080227B8 }, - { 0xC39, 0, (void*)0x080227F0 }, { 0xC3A, 0, (void*)0x080228DC }, { 0xC3B, 0, (void*)0x08022954 }, - { 0xC3C, 0, (void*)0x08022AD4 }, { 0xC3D, 0, (void*)0x08022B48 }, { 0xC3E, 0, (void*)0x08022C14 }, - { 0xC3F, 0, (void*)0x08022C48 }, { 0xC40, 0, (void*)0x08022C78 }, { 0xC41, 0, (void*)0x08022CB0 }, - { 0xC42, 0, (void*)0x08022CFC }, { 0xC43, 0, (void*)0x08022D64 }, { 0xC44, 0, (void*)0x08022D84 }, - { 0xC45, 0, (void*)0x08022DEC }, { 0xC46, 0, (void*)0x08022EBC }, { 0xC47, 0, (void*)0x08022F9C }, - { 0xC48, 0, (void*)0x08023004 }, { 0xC49, 0, (void*)0x08023024 }, { 0xC4A, 0, (void*)0x080230B0 }, - { 0xC4B, 0, (void*)0x080230E0 }, { 0xC4C, 0, (void*)0x080231E4 }, { 0xC4D, 0, (void*)0x0802329C }, - { 0xC4E, 0, (void*)0x080232FC }, { 0xC4F, 0, (void*)0x08023360 }, { 0xC50, 0, (void*)0x080233BC }, - { 0xC51, 0, (void*)0x080233F4 }, { 0xC52, 0, (void*)0x0802352C }, { 0xC53, 0, (void*)0x08023550 }, - { 0xC54, 0, (void*)0x08023640 }, { 0xC55, 0, (void*)0x08023668 }, { 0xC56, 0, (void*)0x080236A4 }, - { 0xC57, 0, (void*)0x080236F4 }, { 0xC58, 0, (void*)0x08023788 }, { 0xC80, 0, (void*)0x080237C4 }, - { 0xC81, 0, (void*)0x08023824 }, { 0xC82, 0, (void*)0x080238F0 }, { 0xC83, 0, (void*)0x08023920 }, - { 0xC84, 0, (void*)0x080239E4 }, { 0xC85, 0, (void*)0x08023B24 }, { 0xC86, 0, (void*)0x08023B58 }, - { 0xC87, 0, (void*)0x08023C3C }, { 0xC88, 0, (void*)0x08023CF0 }, { 0xC89, 0, (void*)0x08023D44 }, - { 0xC8A, 0, (void*)0x08023D80 }, { 0xC8B, 0, (void*)0x08023DB0 }, { 0xC8C, 0, (void*)0x08023E0C }, - { 0xC8D, 0, (void*)0x08023E60 }, { 0xC8E, 0, (void*)0x08023E90 }, { 0xC8F, 0, (void*)0x08023F40 }, - { 0xC90, 0, (void*)0x08023FA0 }, { 0xC91, 0, (void*)0x0802400C }, { 0xC92, 0, (void*)0x08024058 }, - { 0xC93, 0, (void*)0x080240D0 }, { 0xC94, 0, (void*)0x0802410C }, { 0xCE4, 0, (void*)0x08024164 }, - { 0xCE5, 0, (void*)0x080241D4 }, { 0xCE6, 0, (void*)0x08024254 }, { 0xCE7, 0, (void*)0x08024304 }, - { 0xCE8, 0, (void*)0x08024330 }, { 0xCE9, 0, (void*)0x08024360 }, { 0xCEA, 0, (void*)0x0802444C }, - { 0xCEB, 0, (void*)0x08024470 }, { 0xCEC, 0, (void*)0x080244E8 }, { 0xCED, 0, (void*)0x08024548 }, - { 0xCEE, 0, (void*)0x08024634 }, { 0xCEF, 0, (void*)0x08024718 }, { 0xCF0, 0, (void*)0x0802476C }, - { 0xCF1, 0, (void*)0x080247F8 }, { 0xCF2, 0, (void*)0x0802483C }, { 0xCF3, 0, (void*)0x08024880 }, - { 0xCF4, 0, (void*)0x08024918 }, { 0xCF5, 0, (void*)0x08024994 }, { 0xCF6, 0, (void*)0x08024B58 }, - { 0xCF7, 0, (void*)0x08024BD8 }, { 0xCF8, 0, (void*)0x08024C84 }, { 0xCF9, 0, (void*)0x08024D10 }, - { 0xCFA, 0, (void*)0x08024D44 }, { 0xCFB, 0, (void*)0x08024D8C }, { 0xCFC, 0, (void*)0x08024DB8 }, - { 0xCFD, 0, (void*)0x08024DFC }, { 0xCFE, 0, (void*)0x08024E6C }, { 0xCFF, 0, (void*)0x08024EA4 }, - { 0xD00, 0, (void*)0x08024ED4 }, { 0xD01, 0, (void*)0x08024F4C }, { 0xD02, 0, (void*)0x08024F8C }, - { 0xD03, 0, (void*)0x08024FDC }, { 0xD04, 0, (void*)0x08025040 }, { 0xD05, 0, (void*)0x080250D8 }, - { 0xD06, 0, (void*)0x08025100 }, { 0xD07, 0, (void*)0x08025134 }, { 0xD08, 0, (void*)0x0802516C }, - { 0xD09, 0, (void*)0x080251B4 }, { 0xD0A, 0, (void*)0x080251E0 }, { 0xD0B, 0, (void*)0x08025260 }, - { 0xD0C, 0, (void*)0x080252AC }, { 0xD0D, 0, (void*)0x080252E4 }, { 0xD0E, 0, (void*)0x08025330 }, - { 0xD0F, 0, (void*)0x08025358 }, { 0xD10, 0, (void*)0x08025394 }, { 0xD11, 0, (void*)0x080253C8 }, - { 0xD12, 0, (void*)0x08025434 }, { 0xD13, 0, (void*)0x0802547C }, { 0xD14, 0, (void*)0x080254C0 }, - { 0xD15, 0, (void*)0x0802550C }, { 0xD16, 0, (void*)0x08025550 }, { 0xD17, 0, (void*)0x080255A4 }, - { 0xD18, 0, (void*)0x080255DC }, { 0xD19, 0, (void*)0x080255FC }, { 0xD1A, 0, (void*)0x0802563C }, - { 0xD1B, 0, (void*)0x080256C8 }, { 0xD1C, 0, (void*)0x08025708 }, { 0xD1D, 0, (void*)0x0802575C }, - { 0xD1E, 0, (void*)0x080257B8 }, { 0xD1F, 0, (void*)0x08025814 }, { 0xD20, 0, (void*)0x08025874 }, - { 0xD21, 0, (void*)0x080258EC }, { 0xD48, 0, (void*)0x08025960 }, { 0xD49, 0, (void*)0x0802597C }, - { 0xD4A, 0, (void*)0x080259B8 }, { 0xD4B, 0, (void*)0x080259F8 }, { 0xD4C, 0, (void*)0x08025A9C }, - { 0xD4D, 0, (void*)0x08025AF4 }, { 0xD4E, 0, (void*)0x08025B4C }, { 0xD4F, 0, (void*)0x08025B80 }, - { 0xD5E, 0, (void*)0x08025BBC }, { 0xD5F, 0, (void*)0x08025BD8 }, { 0xD60, 0, (void*)0x08025BFC }, - { 0xD61, 0, (void*)0x08025C3C }, { 0xD62, 0, (void*)0x08025C7C }, { 0xD63, 0, (void*)0x08025CE0 }, - { 0xD64, 0, (void*)0x08025D64 }, { 0xD65, 0, (void*)0x08025D90 }, { 0xD66, 0, (void*)0x08025DC0 }, - { 0xD67, 0, (void*)0x08025E34 }, { 0xD68, 0, (void*)0x08025E74 }, { 0xD69, 0, (void*)0x08025EB0 }, - { 0xD6A, 0, (void*)0x08025EE4 }, { 0xD6B, 0, (void*)0x08025F14 }, { 0xD6C, 0, (void*)0x08025F4C }, - { 0xD6D, 0, (void*)0x08025F9C }, { 0xD6E, 0, (void*)0x08025FEC }, { 0xD6F, 0, (void*)0x08026024 }, - { 0xD70, 0, (void*)0x08026064 }, { 0xD71, 0, (void*)0x080260D4 }, { 0xD72, 0, (void*)0x0802613C }, - { 0xD73, 0, (void*)0x08026190 }, { 0xD74, 0, (void*)0x080261E4 }, { 0xD75, 0, (void*)0x0802621C }, - { 0xD76, 0, (void*)0x0802626C }, { 0xD77, 0, (void*)0x08026354 }, { 0xD78, 0, (void*)0x0802637C }, - { 0xD79, 0, (void*)0x080263C8 }, { 0xD7A, 0, (void*)0x08026444 }, { 0xD7B, 0, (void*)0x08026490 }, - { 0xD7C, 0, (void*)0x080264EC }, { 0xD7D, 0, (void*)0x08026548 }, { 0xD7E, 0, (void*)0x08026598 }, - { 0xD7F, 0, (void*)0x080265C4 }, { 0xD80, 0, (void*)0x080265F8 }, { 0xD81, 0, (void*)0x08026628 }, - { 0xD82, 0, (void*)0x08026658 }, { 0xD83, 0, (void*)0x08026688 }, { 0xD84, 0, (void*)0x080266D0 }, - { 0xD85, 0, (void*)0x08026728 }, { 0xD86, 0, (void*)0x08026770 }, { 0xD87, 0, (void*)0x080267B4 }, - { 0xD88, 0, (void*)0x08026850 }, { 0xD89, 0, (void*)0x080268B0 }, { 0xD8A, 0, (void*)0x08026998 }, - { 0xD8B, 0, (void*)0x08026A5C }, { 0xDAC, 0, (void*)0x08026AA0 }, { 0xDAD, 0, (void*)0x08026AC8 }, - { 0xDAE, 0, (void*)0x08026B04 }, { 0xDAF, 0, (void*)0x08026B9C }, { 0xDB0, 0, (void*)0x08026BDC }, - { 0xDB1, 0, (void*)0x08026C6C }, { 0xDB2, 0, (void*)0x08026CD8 }, { 0xDB3, 0, (void*)0x08026D4C }, - { 0xDB4, 0, (void*)0x08026DB4 }, { 0xDB5, 0, (void*)0x08026E34 }, { 0xDB6, 0, (void*)0x08026EA4 }, - { 0xDB7, 0, (void*)0x08026EBC }, { 0xDB8, 0, (void*)0x08026EE8 }, { 0xDB9, 0, (void*)0x08026F28 }, - { 0xDBA, 0, (void*)0x08026F70 }, { 0xDBB, 0, (void*)0x08026FA0 }, { 0xDBC, 0, (void*)0x0802701C }, - { 0xDBD, 0, (void*)0x08027070 }, { 0xDBE, 0, (void*)0x08027088 }, { 0xDBF, 0, (void*)0x080270BC }, - { 0xDC0, 0, (void*)0x080270E0 }, { 0xDC1, 0, (void*)0x0802713C }, { 0xDC2, 0, (void*)0x08027194 }, - { 0xDC3, 0, (void*)0x08027220 }, { 0xDC4, 0, (void*)0x0802727C }, { 0xDC5, 0, (void*)0x08027300 }, - { 0xDC6, 0, (void*)0x08027334 }, { 0xDC7, 0, (void*)0x08027370 }, { 0xDC8, 0, (void*)0x08027394 }, - { 0xDC9, 0, (void*)0x080273A8 }, { 0xDCA, 0, (void*)0x080273D0 }, { 0xDCB, 0, (void*)0x08027414 }, - { 0xDCC, 0, (void*)0x0802744C }, { 0xDCD, 0, (void*)0x080274BC }, { 0xDCE, 0, (void*)0x08027500 }, - { 0xDCF, 0, (void*)0x080275D4 }, { 0xDD0, 0, (void*)0x0802762C }, { 0xDD1, 0, (void*)0x08027668 }, - { 0xDD2, 0, (void*)0x08027684 }, { 0xDD3, 0, (void*)0x080276D8 }, { 0xDD4, 0, (void*)0x08027710 }, - { 0xDD5, 0, (void*)0x0802773C }, { 0xDD6, 0, (void*)0x08027760 }, { 0xDD7, 0, (void*)0x08027798 }, - { 0xDD8, 0, (void*)0x080277C0 }, { 0xDD9, 0, (void*)0x08027824 }, { 0xDDA, 0, (void*)0x080278AC }, - { 0xDDB, 0, (void*)0x08027934 }, { 0xDDC, 0, (void*)0x08027984 }, { 0xDDD, 0, (void*)0x080279E8 }, - { 0xDDE, 0, (void*)0x08027A70 }, { 0xDDF, 0, (void*)0x08027AE8 }, { 0xDE0, 0, (void*)0x08027B28 }, - { 0xDE1, 0, (void*)0x08027B84 }, { 0xDE2, 0, (void*)0x08027BF4 }, { 0xDE3, 0, (void*)0x08027C40 }, - { 0xDE4, 0, (void*)0x08027C84 }, { 0xDE5, 0, (void*)0x08027CC8 }, { 0xDE6, 0, (void*)0x08027D3C }, - { 0xDE7, 0, (void*)0x08027D8C }, { 0xDE8, 0, (void*)0x08027DBC }, { 0xDE9, 0, (void*)0x08027DEC }, - { 0xDEA, 0, (void*)0x08027E78 }, { 0xDEB, 0, (void*)0x08027EBC }, { 0xDEC, 0, (void*)0x08027EE4 }, - { 0xDED, 0, (void*)0x08027F4C }, { 0xDEE, 0, (void*)0x08027F9C }, { 0xDEF, 0, (void*)0x0802800C }, - { 0xDF0, 0, (void*)0x08028058 }, { 0xDF1, 0, (void*)0x080280A4 }, { 0xDF2, 0, (void*)0x080280DC }, - { 0xDF3, 0, (void*)0x08028134 }, { 0xDF4, 0, (void*)0x080281B0 }, { 0xDF5, 0, (void*)0x080281E8 }, - { 0xDF6, 0, (void*)0x08028234 }, { 0xDF7, 0, (void*)0x08028264 }, { 0xDF8, 0, (void*)0x080282C0 }, - { 0xDF9, 0, (void*)0x080282F8 }, { 0xDFA, 0, (void*)0x08028378 }, { 0xDFB, 0, (void*)0x080283C4 }, - { 0xDFC, 0, (void*)0x080283FC }, { 0xDFD, 0, (void*)0x08028444 }, { 0xDFE, 0, (void*)0x08028478 }, - { 0xDFF, 0, (void*)0x080284BC }, { 0xE02, 0, (void*)0x080284F4 }, { 0xE03, 0, (void*)0x08028540 }, - { 0xE04, 0, (void*)0x08028588 }, { 0xE05, 0, (void*)0x080285C8 }, { 0xE06, 0, (void*)0x08028604 }, - { 0xE07, 0, (void*)0x08028620 }, { 0xE10, 0, (void*)0x08028670 }, { 0xE11, 0, (void*)0x080286AC }, - { 0xE12, 0, (void*)0x08028744 }, { 0xE13, 0, (void*)0x080287C4 }, { 0xE14, 0, (void*)0x0802885C }, - { 0xE15, 0, (void*)0x08028940 }, { 0xE16, 0, (void*)0x080289D4 }, { 0xE17, 0, (void*)0x08028A20 }, - { 0xE18, 0, (void*)0x08028A58 }, { 0xE19, 0, (void*)0x08028AA8 }, { 0xE1A, 0, (void*)0x08028B5C }, - { 0xE1B, 0, (void*)0x08028B8C }, { 0xE1C, 0, (void*)0x08028BF0 }, { 0xE1D, 0, (void*)0x08028C38 }, - { 0xE1E, 0, (void*)0x08028C98 }, { 0xE1F, 0, (void*)0x08028CBC }, { 0xE20, 0, (void*)0x08028D10 }, - { 0xE21, 0, (void*)0x08028D28 }, { 0xE22, 0, (void*)0x08028D68 }, { 0xE23, 0, (void*)0x08028DC8 }, - { 0xE24, 0, (void*)0x08028E24 }, { 0xE25, 0, (void*)0x08028E44 }, { 0xE26, 0, (void*)0x08028E88 }, - { 0xE27, 0, (void*)0x08028ED0 }, { 0xE28, 0, (void*)0x08028EEC }, { 0xE29, 0, (void*)0x08028F40 }, - { 0xE2A, 0, (void*)0x08028F9C }, { 0xE2B, 0, (void*)0x08029010 }, { 0xE2C, 0, (void*)0x08029078 }, - { 0xE2D, 0, (void*)0x08029104 }, { 0xE2E, 0, (void*)0x08029174 }, { 0xE2F, 0, (void*)0x080291D4 }, - { 0xE30, 0, (void*)0x08029238 }, { 0xE31, 0, (void*)0x080292B8 }, { 0xE32, 0, (void*)0x0802933C }, - { 0xE42, 0, (void*)0x0802939C }, { 0xE43, 0, (void*)0x080293FC }, { 0xE44, 0, (void*)0x08029428 }, - { 0xE45, 0, (void*)0x080294A8 }, { 0xE46, 0, (void*)0x08029500 }, { 0xE47, 0, (void*)0x080295A0 }, - { 0xE48, 0, (void*)0x080295C4 }, { 0xE49, 0, (void*)0x08029634 }, { 0xE4A, 0, (void*)0x0802969C }, - { 0xE4B, 0, (void*)0x08029704 }, { 0xE4C, 0, (void*)0x08029774 }, { 0xE4D, 0, (void*)0x080297D4 }, - { 0xE4E, 0, (void*)0x08029860 }, { 0xE4F, 0, (void*)0x080298C8 }, { 0xE50, 0, (void*)0x08029948 }, - { 0xE51, 0, (void*)0x080299D0 }, { 0xE52, 0, (void*)0x08029A30 }, { 0xE74, 0, (void*)0x08029AC0 }, - { 0xE75, 0, (void*)0x08029B20 }, { 0xE76, 0, (void*)0x08029B74 }, { 0xE77, 0, (void*)0x08029BD4 }, - { 0xE78, 0, (void*)0x08029C48 }, { 0xE79, 0, (void*)0x08029C9C }, { 0xE7A, 0, (void*)0x08029CB0 }, - { 0xE7B, 0, (void*)0x08029CCC }, { 0xE7C, 0, (void*)0x08029D58 }, { 0xE7D, 0, (void*)0x08029DAC }, - { 0xE7E, 0, (void*)0x08029DC0 }, { 0xE7F, 0, (void*)0x08029E10 }, { 0xE80, 0, (void*)0x08029E74 }, - { 0xE81, 0, (void*)0x08029ED4 }, { 0xE82, 0, (void*)0x08029F2C }, { 0xE83, 0, (void*)0x08029F54 }, - { 0xE84, 0, (void*)0x08029FCC }, { 0xE85, 0, (void*)0x0802A03C }, { 0xE86, 0, (void*)0x0802A090 }, - { 0xE87, 0, (void*)0x0802A0D8 }, { 0xE88, 0, (void*)0x0802A128 }, { 0xE89, 0, (void*)0x0802A1BC }, - { 0xE8A, 0, (void*)0x0802A1F4 }, { 0xE8B, 0, (void*)0x0802A260 }, { 0xE8C, 0, (void*)0x0802A2A4 }, - { 0xE8D, 0, (void*)0x0802A2F4 }, { 0xE8E, 0, (void*)0x0802A334 }, { 0xE8F, 0, (void*)0x0802A37C }, - { 0xE90, 0, (void*)0x0802A3DC }, { 0xE91, 0, (void*)0x0802A448 }, { 0xE92, 0, (void*)0x0802A47C }, - { 0xE93, 0, (void*)0x0802A4A8 }, { 0xE94, 0, (void*)0x0802A550 }, { 0xE95, 0, (void*)0x0802A5B0 }, - { 0xE97, 0, (void*)0x0802A608 }, { 0xE98, 0, (void*)0x0802A69C }, { 0xE99, 0, (void*)0x0802A6F0 }, - { 0xFA0, 0, (void*)0x0802A760 }, { 0xFA1, 0, (void*)0x0802A79C }, { 0xFA2, 0, (void*)0x0802A7F4 }, - { 0xFA3, 0, (void*)0x0802A84C }, { 0xFA4, 0, (void*)0x0802A8F4 }, { 0xFA5, 0, (void*)0x0802AA24 }, - { 0xFA6, 0, (void*)0x0802AAA0 }, { 0xFA7, 0, (void*)0x0802AB04 }, { 0xFA8, 0, (void*)0x0802ABA0 }, - { 0xFA9, 0, (void*)0x0802AC08 }, { 0xFAA, 0, (void*)0x0802ACA4 }, { 0xFAB, 0, (void*)0x0802AD1C }, - { 0xFAC, 0, (void*)0x0802AD8C }, { 0xFAD, 0, (void*)0x0802ADF4 }, { 0xFAE, 0, (void*)0x0802AE90 }, - { 0xFAF, 0, (void*)0x0802AF00 }, { 0xFB0, 0, (void*)0x0802AF70 }, { 0xFB1, 0, (void*)0x0802B018 }, - { 0xFB2, 0, (void*)0x0802B0B8 }, { 0xFB3, 0, (void*)0x0802B110 }, { 0xFB4, 0, (void*)0x0802B190 }, - { 0xFB5, 0, (void*)0x0802B24C }, { 0xFB6, 0, (void*)0x0802B288 }, { 0xFB7, 0, (void*)0x0802B2E4 }, - { 0xFB8, 0, (void*)0x0802B314 }, { 0xFB9, 0, (void*)0x0802B39C }, { 0xFBA, 0, (void*)0x0802B40C }, - { 0xFBB, 0, (void*)0x0802B488 }, { 0xFBC, 0, (void*)0x0802B4EC }, { 0xFBD, 0, (void*)0x0802B598 }, - { 0xFBE, 0, (void*)0x0802B650 }, { 0xFBF, 0, (void*)0x0802B6F8 }, { 0x1004, 0, (void*)0x0802B750 }, - { 0x1005, 0, (void*)0x0802B778 }, { 0x1006, 0, (void*)0x0802B7A0 }, { 0x1007, 0, (void*)0x0802B7C8 }, - { 0x1008, 0, (void*)0x0802B7EC }, { 0x1009, 0, (void*)0x0802B84C }, { 0x100A, 0, (void*)0x0802B890 }, - { 0x100B, 0, (void*)0x0802B8D8 }, { 0x100C, 0, (void*)0x0802B908 }, { 0x100D, 0, (void*)0x0802B97C }, - { 0x100E, 0, (void*)0x0802BA00 }, { 0x100F, 0, (void*)0x0802BA54 }, { 0x1010, 0, (void*)0x0802BAC0 }, - { 0x1011, 0, (void*)0x0802BB28 }, { 0x1012, 0, (void*)0x0802BB94 }, { 0x1013, 0, (void*)0x0802BC18 }, - { 0x1014, 0, (void*)0x0802BC44 }, { 0x1015, 0, (void*)0x0802BC88 }, { 0x1016, 0, (void*)0x0802BCE0 }, - { 0x1017, 0, (void*)0x0802BD24 }, { 0x1018, 0, (void*)0x0802BD8C }, { 0x1019, 0, (void*)0x0802BE18 }, - { 0x101A, 0, (void*)0x0802BE80 }, { 0x101B, 0, (void*)0x0802BF84 }, { 0x101C, 0, (void*)0x0802C048 }, - { 0x101D, 0, (void*)0x0802C064 }, { 0x101E, 0, (void*)0x0802C15C }, { 0x101F, 0, (void*)0x0802C284 }, - { 0x1020, 0, (void*)0x0802C3BC }, { 0x1021, 0, (void*)0x0802C3D4 }, { 0x1022, 0, (void*)0x0802C438 }, - { 0x1023, 0, (void*)0x0802C470 }, { 0x1024, 0, (void*)0x0802C494 }, { 0x1025, 0, (void*)0x0802C4C4 }, - { 0x1026, 0, (void*)0x0802C4F8 }, { 0x1027, 0, (void*)0x0802C564 }, { 0x1028, 0, (void*)0x0802C5F8 }, - { 0x1029, 0, (void*)0x0802C67C }, { 0x102A, 0, (void*)0x0802C6DC }, { 0x102B, 0, (void*)0x0802C73C }, - { 0x102C, 0, (void*)0x0802C798 }, { 0x102D, 0, (void*)0x0802C824 }, { 0x102E, 0, (void*)0x0802C87C }, - { 0x102F, 0, (void*)0x0802C8B8 }, { 0x1030, 0, (void*)0x0802C928 }, { 0x1031, 0, (void*)0x0802CA60 }, - { 0x1032, 0, (void*)0x0802CAB4 }, { 0x1033, 0, (void*)0x0802CB00 }, { 0x1034, 0, (void*)0x0802CB3C }, - { 0x1035, 0, (void*)0x0802CB94 }, { 0x1036, 0, (void*)0x0802CBF0 }, { 0x1037, 0, (void*)0x0802CC28 }, - { 0x1038, 0, (void*)0x0802CC80 }, { 0x1039, 0, (void*)0x0802CCE0 }, { 0x103A, 0, (void*)0x0802CD30 }, - { 0x103B, 0, (void*)0x0802CD64 }, { 0x103C, 0, (void*)0x0802CDDC }, { 0x1068, 0, (void*)0x0802CE10 }, - { 0x1069, 0, (void*)0x0802CE64 }, { 0x106A, 0, (void*)0x0802CF30 }, { 0x106B, 0, (void*)0x0802CF90 }, - { 0x106C, 0, (void*)0x0802CFD4 }, { 0x106D, 0, (void*)0x0802D07C }, { 0x106E, 0, (void*)0x0802D0C0 }, - { 0x106F, 0, (void*)0x0802D110 }, { 0x1070, 0, (void*)0x0802D178 }, { 0x1071, 0, (void*)0x0802D1C4 }, - { 0x1072, 0, (void*)0x0802D234 }, { 0x1073, 0, (void*)0x0802D27C }, { 0x1074, 0, (void*)0x0802D2BC }, - { 0x1075, 0, (void*)0x0802D314 }, { 0x1076, 0, (void*)0x0802D354 }, { 0x1077, 0, (void*)0x0802D3AC }, - { 0x1078, 0, (void*)0x0802D3F0 }, { 0x1079, 0, (void*)0x0802D434 }, { 0x107A, 0, (void*)0x0802D4AC }, - { 0x107B, 0, (void*)0x0802D4EC }, { 0x107C, 0, (void*)0x0802D554 }, { 0x107D, 0, (void*)0x0802D5A8 }, - { 0x107E, 0, (void*)0x0802D5FC }, { 0x107F, 0, (void*)0x0802D69C }, { 0x1080, 0, (void*)0x0802D6E8 }, - { 0x1081, 0, (void*)0x0802D744 }, { 0x1082, 0, (void*)0x0802D7A4 }, { 0x1083, 0, (void*)0x0802D7EC }, - { 0x1084, 0, (void*)0x0802D82C }, { 0x1085, 0, (void*)0x0802D8B0 }, { 0x1086, 0, (void*)0x0802D8F0 }, - { 0x1087, 0, (void*)0x0802D954 }, { 0x1088, 0, (void*)0x0802D9DC }, { 0x1089, 0, (void*)0x0802DA24 }, - { 0x108A, 0, (void*)0x0802DA8C }, { 0x108B, 0, (void*)0x0802DACC }, { 0x108C, 0, (void*)0x0802DB30 }, - { 0x108D, 0, (void*)0x0802DBA0 }, { 0x108E, 0, (void*)0x0802DBF4 }, { 0x108F, 0, (void*)0x0802DC28 }, - { 0x1090, 0, (void*)0x0802DC94 }, { 0x1091, 0, (void*)0x0802DCFC }, { 0x1092, 0, (void*)0x0802DDC0 }, - { 0x1093, 0, (void*)0x0802DE18 }, { 0x1094, 0, (void*)0x0802DEA0 }, { 0x1095, 0, (void*)0x0802DF10 }, - { 0x1096, 0, (void*)0x0802DF78 }, { 0x1097, 0, (void*)0x0802DFE0 }, { 0x1098, 0, (void*)0x0802E024 }, - { 0x1099, 0, (void*)0x0802E088 }, { 0x109A, 0, (void*)0x0802E170 }, { 0x109B, 0, (void*)0x0802E1F8 }, - { 0x109C, 0, (void*)0x0802E240 }, { 0x109D, 0, (void*)0x0802E290 }, { 0x109E, 0, (void*)0x0802E2D8 }, - { 0x109F, 0, (void*)0x0802E308 }, { 0x10A0, 0, (void*)0x0802E364 }, { 0x10A1, 0, (void*)0x0802E3B8 }, - { 0x10A2, 0, (void*)0x0802E3DC }, { 0x10A3, 0, (void*)0x0802E480 }, { 0x10A4, 0, (void*)0x0802E4D4 }, - { 0x10A5, 0, (void*)0x0802E53C }, { 0x10A6, 0, (void*)0x0802E624 }, { 0x10A7, 0, (void*)0x0802E68C }, - { 0x10A8, 0, (void*)0x0802E738 }, { 0x10A9, 0, (void*)0x0802E78C }, { 0x10CE, 0, (void*)0x0802E830 }, - { 0x10CF, 0, (void*)0x0802E878 }, { 0x10D0, 0, (void*)0x0802E8CC }, { 0x10D1, 0, (void*)0x0802E90C }, - { 0x10D2, 0, (void*)0x0802E970 }, { 0x10D3, 0, (void*)0x0802E9A4 }, { 0x10D4, 0, (void*)0x0802E9D0 }, - { 0x10D6, 0, (void*)0x0802EA7C }, { 0x10D7, 0, (void*)0x0802EB50 }, { 0x10D8, 0, (void*)0x0802EB6C }, - { 0x10D9, 0, (void*)0x0802EBA0 }, { 0x10DA, 0, (void*)0x0802EBC8 }, { 0x10DB, 0, (void*)0x0802EC10 }, - { 0x10DC, 0, (void*)0x0802EC40 }, { 0x10DD, 0, (void*)0x0802EC6C }, { 0x10DE, 0, (void*)0x0802ECA8 }, - { 0x10DF, 0, (void*)0x0802ECD8 }, { 0x10E0, 0, (void*)0x0802ED14 }, { 0x10E1, 0, (void*)0x0802ED40 }, - { 0x10E2, 0, (void*)0x0802ED68 }, { 0x10E3, 0, (void*)0x0802EDA0 }, { 0x10E4, 0, (void*)0x0802EE18 }, - { 0x10E5, 0, (void*)0x0802EE44 }, { 0x10E6, 0, (void*)0x0802EEB0 }, { 0x10E7, 0, (void*)0x0802EEE8 }, - { 0x10E8, 0, (void*)0x0802EF24 }, { 0x10E9, 0, (void*)0x0802EF84 }, { 0x10EA, 0, (void*)0x0802EFCC }, - { 0x10EB, 0, (void*)0x0802EFF8 }, { 0x10EC, 0, (void*)0x0802F030 }, { 0x10ED, 0, (void*)0x0802F078 }, - { 0x10EE, 0, (void*)0x0802F0B4 }, { 0x10EF, 0, (void*)0x0802F0E0 }, { 0x10F0, 0, (void*)0x0802F110 }, - { 0x10F1, 0, (void*)0x0802F14C }, { 0x10F2, 0, (void*)0x0802F184 }, { 0x10F3, 0, (void*)0x0802F1A8 }, - { 0x10F4, 0, (void*)0x0802F1D4 }, { 0x10F5, 0, (void*)0x0802F204 }, { 0x10F6, 0, (void*)0x0802F258 }, - { 0x10F7, 0, (void*)0x0802F28C }, { 0x10F8, 0, (void*)0x0802F2D4 }, { 0x10F9, 0, (void*)0x0802F30C }, - { 0x10FA, 0, (void*)0x0802F334 }, { 0x10FB, 0, (void*)0x0802F3A8 }, { 0x10FC, 0, (void*)0x0802F3D8 }, - { 0x10FD, 0, (void*)0x0802F408 }, { 0x10FE, 0, (void*)0x0802F44C }, { 0x10FF, 0, (void*)0x0802F484 }, - { 0x1100, 0, (void*)0x0802F4CC }, { 0x1101, 0, (void*)0x0802F500 }, { 0x1102, 0, (void*)0x0802F590 }, - { 0x1103, 0, (void*)0x0802F5CC }, { 0x1104, 0, (void*)0x0802F604 }, { 0x1105, 0, (void*)0x0802F660 }, - { 0x1106, 0, (void*)0x0802F694 }, { 0x1107, 0, (void*)0x0802F6B8 }, { 0x1108, 0, (void*)0x0802F730 }, - { 0x1109, 0, (void*)0x0802F7B4 }, { 0x1130, 0, (void*)0x0802F7D8 }, { 0x1131, 0, (void*)0x0802F7F4 }, - { 0x1132, 0, (void*)0x0802F82C }, { 0x1133, 0, (void*)0x0802F8C0 }, { 0x1134, 0, (void*)0x0802F8E8 }, - { 0x1135, 0, (void*)0x0802F8F4 }, { 0x1136, 0, (void*)0x0802F900 }, { 0x1137, 0, (void*)0x0802F960 }, - { 0x1138, 0, (void*)0x0802F9D0 }, { 0x1139, 0, (void*)0x0802FA70 }, { 0x113A, 0, (void*)0x0802FB2C }, - { 0x113B, 0, (void*)0x0802FB64 }, { 0x113C, 0, (void*)0x0802FBF4 }, { 0x113D, 0, (void*)0x0802FC4C }, - { 0x113E, 0, (void*)0x0802FCA0 }, { 0x113F, 0, (void*)0x0802FD10 }, { 0x1140, 0, (void*)0x0802FDA8 }, - { 0x1141, 0, (void*)0x0802FE38 }, { 0x1142, 0, (void*)0x0802FE7C }, { 0x1143, 0, (void*)0x0802FEBC }, - { 0x1144, 0, (void*)0x0802FEF8 }, { 0x1145, 0, (void*)0x0802FF58 }, { 0x1146, 0, (void*)0x0802FFB4 }, - { 0x1147, 0, (void*)0x08030004 }, { 0x1148, 0, (void*)0x08030018 }, { 0x1149, 0, (void*)0x080300B8 }, - { 0x114A, 0, (void*)0x08030114 }, { 0x114B, 0, (void*)0x08030170 }, { 0x114C, 0, (void*)0x080301CC }, - { 0x114D, 0, (void*)0x08030228 }, { 0x114E, 0, (void*)0x08030284 }, { 0x114F, 0, (void*)0x080302E0 }, - { 0x1150, 0, (void*)0x08030318 }, { 0x1151, 0, (void*)0x080303C8 }, { 0x1152, 0, (void*)0x080303DC }, - { 0x1194, 0, (void*)0x08030438 }, { 0x1195, 0, (void*)0x08030458 }, { 0x1196, 0, (void*)0x080304AC }, - { 0x1197, 0, (void*)0x080304E0 }, { 0x1198, 0, (void*)0x08030578 }, { 0x1199, 0, (void*)0x080305E4 }, - { 0x119A, 0, (void*)0x080305FC }, { 0x119B, 0, (void*)0x08030638 }, { 0x119C, 0, (void*)0x080306D0 }, - { 0x119D, 0, (void*)0x08030748 }, { 0x119E, 0, (void*)0x08030770 }, { 0x119F, 0, (void*)0x08030784 }, - { 0x11A0, 0, (void*)0x080307EC }, { 0x11A1, 0, (void*)0x08030828 }, { 0x11A2, 0, (void*)0x080308E0 }, - { 0x11A3, 0, (void*)0x08030918 }, { 0x11A4, 0, (void*)0x08030934 }, { 0x11A5, 0, (void*)0x08030948 }, - { 0x11A6, 0, (void*)0x080309BC }, { 0x11A7, 0, (void*)0x080309E8 }, { 0x11A8, 0, (void*)0x08030A38 }, - { 0x11A9, 0, (void*)0x08030A60 }, { 0x11AA, 0, (void*)0x08030AA0 }, { 0x11AB, 0, (void*)0x08030ADC }, - { 0x11AC, 0, (void*)0x08030B10 }, { 0x11AD, 0, (void*)0x08030B40 }, { 0x11AE, 0, (void*)0x08030B80 }, - { 0x11AF, 0, (void*)0x08030BB4 }, { 0x11F8, 0, (void*)0x08030BFC }, { 0x11F9, 0, (void*)0x08030C64 }, - { 0x11FA, 0, (void*)0x08030CA0 }, { 0x11FB, 0, (void*)0x08030D28 }, { 0x11FC, 0, (void*)0x08030D58 }, - { 0x11FD, 0, (void*)0x08030E14 }, { 0x11FE, 0, (void*)0x08030E94 }, { 0x11FF, 0, (void*)0x08030F2C }, - { 0x1200, 0, (void*)0x08030F6C }, { 0x1201, 0, (void*)0x08031004 }, { 0x1202, 0, (void*)0x08031038 }, - { 0x1203, 0, (void*)0x080310A4 }, { 0x1204, 0, (void*)0x08031110 }, { 0x1205, 0, (void*)0x08031154 }, - { 0x1206, 0, (void*)0x080311EC }, { 0x1207, 0, (void*)0x08031230 }, { 0x1208, 0, (void*)0x08031290 }, - { 0x1209, 0, (void*)0x080312C4 }, { 0x120A, 0, (void*)0x08031304 }, { 0x120B, 0, (void*)0x08031320 }, - { 0x120C, 0, (void*)0x08031348 }, { 0x120D, 0, (void*)0x08031390 }, { 0x120E, 0, (void*)0x080313DC }, - { 0x120F, 0, (void*)0x08031470 }, { 0x1210, 0, (void*)0x08031498 }, { 0x1211, 0, (void*)0x08031520 }, - { 0x1212, 0, (void*)0x08031580 }, { 0x1213, 0, (void*)0x080315A8 }, { 0x1214, 0, (void*)0x08031644 }, - { 0x1215, 0, (void*)0x080316AC }, { 0x1216, 0, (void*)0x08031708 }, { 0x1217, 0, (void*)0x0803176C }, - { 0x1218, 0, (void*)0x080317BC }, { 0x1219, 0, (void*)0x080317E8 }, { 0x121A, 0, (void*)0x08031834 }, - { 0x121B, 0, (void*)0x080318B8 }, { 0x121C, 0, (void*)0x08031900 }, { 0x121D, 0, (void*)0x08031930 }, - { 0x121E, 0, (void*)0x08031984 }, { 0x121F, 0, (void*)0x080319C8 }, { 0x1220, 0, (void*)0x08031A08 }, - { 0x1221, 0, (void*)0x08031A7C }, { 0x1222, 0, (void*)0x08031AFC }, { 0x1223, 0, (void*)0x08031B68 }, - { 0x1224, 0, (void*)0x08031BC0 }, { 0x1225, 0, (void*)0x08031C10 }, { 0x1226, 0, (void*)0x08031CD4 }, - { 0x1227, 0, (void*)0x08031D38 }, { 0x1228, 0, (void*)0x08031DC0 }, { 0x1229, 0, (void*)0x08031E00 }, - { 0x122A, 0, (void*)0x08031E54 }, { 0x122B, 0, (void*)0x08031E80 }, { 0x122C, 0, (void*)0x08031EF8 }, - { 0x122D, 0, (void*)0x08031F1C }, { 0x122E, 0, (void*)0x08031FA4 }, { 0x122F, 0, (void*)0x0803202C }, - { 0x1230, 0, (void*)0x08032050 }, { 0x1231, 0, (void*)0x0803210C }, { 0x1232, 0, (void*)0x08032148 }, - { 0x1233, 0, (void*)0x080321B4 }, { 0x1234, 0, (void*)0x08032200 }, { 0x1235, 0, (void*)0x08032250 }, - { 0x1236, 0, (void*)0x080322C4 }, { 0x1237, 0, (void*)0x08032330 }, { 0x1238, 0, (void*)0x08032364 }, - { 0x1239, 0, (void*)0x08032414 }, { 0x123A, 0, (void*)0x08032464 }, { 0x123B, 0, (void*)0x08032504 }, - { 0x123C, 0, (void*)0x08032550 }, { 0x123D, 0, (void*)0x080325A4 }, { 0x123E, 0, (void*)0x08032638 }, - { 0x123F, 0, (void*)0x08032698 }, { 0x1240, 0, (void*)0x080326FC }, { 0x1241, 0, (void*)0x080327D4 }, - { 0x1242, 0, (void*)0x0803284C }, { 0x1243, 0, (void*)0x08032904 }, { 0x1244, 0, (void*)0x08032964 }, - { 0x1245, 0, (void*)0x080329B8 }, { 0x1246, 0, (void*)0x080329E4 }, { 0x1247, 0, (void*)0x08032A54 }, - { 0x1248, 0, (void*)0x08032AC0 }, { 0x1249, 0, (void*)0x08032B08 }, { 0x124A, 0, (void*)0x08032B68 }, - { 0x124B, 0, (void*)0x08032BC4 }, { 0x124C, 0, (void*)0x08032BE0 }, { 0x124D, 0, (void*)0x08032C24 }, - { 0x124E, 0, (void*)0x08032C68 }, { 0x124F, 0, (void*)0x08032CD8 }, { 0x1250, 0, (void*)0x08032D1C }, - { 0x1251, 0, (void*)0x08032D6C }, { 0x1252, 0, (void*)0x08032DE4 }, { 0x1253, 0, (void*)0x08032E0C }, - { 0x1254, 0, (void*)0x08032E60 }, { 0x1255, 0, (void*)0x08032EC4 }, { 0x1256, 0, (void*)0x08032F38 }, - { 0x1257, 0, (void*)0x08032F7C }, { 0x1258, 0, (void*)0x08032FF4 }, { 0x1259, 0, (void*)0x08033030 }, - { 0x125A, 0, (void*)0x080330BC }, { 0x125B, 0, (void*)0x080330F8 }, { 0x125C, 0, (void*)0x0803319C }, - { 0x125D, 0, (void*)0x08033224 }, { 0x125E, 0, (void*)0x080332D0 }, { 0x125F, 0, (void*)0x08033358 }, - { 0x1260, 0, (void*)0x080333CC }, { 0x1261, 0, (void*)0x08033410 }, { 0x1262, 0, (void*)0x08033450 }, - { 0x1263, 0, (void*)0x080334BC }, { 0x1264, 0, (void*)0x080334F4 }, { 0x1265, 0, (void*)0x0803353C }, - { 0x1266, 0, (void*)0x08033588 }, { 0x1267, 0, (void*)0x080335F4 }, { 0x1268, 0, (void*)0x08033678 }, - { 0x1269, 0, (void*)0x0803370C }, { 0x126A, 0, (void*)0x08033778 }, { 0x126B, 0, (void*)0x080337CC }, - { 0x126C, 0, (void*)0x08033830 }, { 0x126D, 0, (void*)0x080338B0 }, { 0x126E, 0, (void*)0x08033934 }, - { 0x126F, 0, (void*)0x0803397C }, { 0x1270, 0, (void*)0x080339F0 }, { 0x1271, 0, (void*)0x08033A14 }, - { 0x1272, 0, (void*)0x08033A44 }, { 0x1273, 0, (void*)0x08033A88 }, { 0x1274, 0, (void*)0x08033AE0 }, - { 0x1275, 0, (void*)0x08033B74 }, { 0x1276, 0, (void*)0x08033BC0 }, { 0x1277, 0, (void*)0x08033C24 }, - { 0x1278, 0, (void*)0x08033CA0 }, { 0x1279, 0, (void*)0x08033D10 }, { 0x127A, 0, (void*)0x08033D80 }, - { 0x127B, 0, (void*)0x08033DB4 }, { 0x127C, 0, (void*)0x08033E18 }, { 0x127D, 0, (void*)0x08033E68 }, - { 0x127E, 0, (void*)0x08033EB4 }, { 0x127F, 0, (void*)0x08033F04 }, { 0x1280, 0, (void*)0x08033F58 }, - { 0x1281, 0, (void*)0x08033FB8 }, { 0x1282, 0, (void*)0x08034014 }, { 0x1283, 0, (void*)0x08034044 }, - { 0x1284, 0, (void*)0x0803409C }, { 0x1285, 0, (void*)0x080340EC }, { 0x1286, 0, (void*)0x08034140 }, - { 0x1287, 0, (void*)0x080341A0 }, { 0x1288, 0, (void*)0x08034204 }, { 0x1289, 0, (void*)0x08034248 }, - { 0x128A, 0, (void*)0x080342A8 }, { 0x128B, 0, (void*)0x080342E0 }, { 0x128C, 0, (void*)0x08034314 }, - { 0x128D, 0, (void*)0x08034340 }, { 0x128E, 0, (void*)0x08034368 }, { 0x128F, 0, (void*)0x080343C8 }, - { 0x1290, 0, (void*)0x0803445C }, { 0x1291, 0, (void*)0x080344E8 }, { 0x1292, 0, (void*)0x08034528 }, - { 0x1293, 0, (void*)0x08034538 }, { 0x1294, 0, (void*)0x08034578 }, { 0x1295, 0, (void*)0x080345C4 }, - { 0x1296, 0, (void*)0x08034618 }, { 0x1297, 0, (void*)0x08034680 }, { 0x1298, 0, (void*)0x080346AC }, - { 0x1299, 0, (void*)0x08034728 }, { 0x129A, 0, (void*)0x0803479C }, { 0x129B, 0, (void*)0x08034808 }, - { 0x129C, 0, (void*)0x08034854 }, { 0x129D, 0, (void*)0x08034888 }, { 0x129E, 0, (void*)0x080348B4 }, - { 0x129F, 0, (void*)0x080348FC }, { 0x12A0, 0, (void*)0x08034938 }, { 0x12A1, 0, (void*)0x08034984 }, - { 0x12A2, 0, (void*)0x080349C4 }, { 0x12A3, 0, (void*)0x08034A24 }, { 0x12A4, 0, (void*)0x08034A80 }, - { 0x12A5, 0, (void*)0x08034AF0 }, { 0x12A6, 0, (void*)0x08034B40 }, { 0x12A7, 0, (void*)0x08034B74 }, - { 0x12A8, 0, (void*)0x08034BCC }, { 0x12A9, 0, (void*)0x08034C2C }, { 0x12AA, 0, (void*)0x08034CA0 }, - { 0x12AB, 0, (void*)0x08034CDC }, { 0x12AC, 0, (void*)0x08034D50 }, { 0x12AD, 0, (void*)0x08034D9C }, - { 0x12AE, 0, (void*)0x08034E10 }, { 0x12AF, 0, (void*)0x08034E40 }, { 0x12B0, 0, (void*)0x08034E70 }, - { 0x12B1, 0, (void*)0x08034EDC }, { 0x12B2, 0, (void*)0x08034F28 }, { 0x12B3, 0, (void*)0x08034F74 }, - { 0x12B4, 0, (void*)0x08034FA0 }, { 0x12B5, 0, (void*)0x08034FF4 }, { 0x12B6, 0, (void*)0x08035018 }, - { 0x12B7, 0, (void*)0x0803504C }, { 0x12B8, 0, (void*)0x08035078 }, { 0x12B9, 0, (void*)0x080350C0 }, - { 0x12BA, 0, (void*)0x080350F0 }, { 0x12BB, 0, (void*)0x08035134 }, { 0x12BC, 0, (void*)0x0803516C }, - { 0x12BD, 0, (void*)0x080351D0 }, { 0x12BE, 0, (void*)0x0803521C }, { 0x12BF, 0, (void*)0x08035288 }, - { 0x12C0, 0, (void*)0x08035308 }, { 0x12C1, 0, (void*)0x0803534C }, { 0x12C2, 0, (void*)0x0803539C }, - { 0x12C3, 0, (void*)0x080353CC }, { 0x12C4, 0, (void*)0x08035410 }, { 0x12C5, 0, (void*)0x08035470 }, - { 0x12C6, 0, (void*)0x080354B8 }, { 0x12C7, 0, (void*)0x08035520 }, { 0x12C8, 0, (void*)0x08035560 }, - { 0x12C9, 0, (void*)0x08035604 }, { 0x12CA, 0, (void*)0x0803566C }, { 0x12CB, 0, (void*)0x080356A4 }, - { 0x12CC, 0, (void*)0x080356E4 }, { 0x12CD, 0, (void*)0x0803577C }, { 0x12CE, 0, (void*)0x080357EC }, - { 0x12CF, 0, (void*)0x0803581C }, { 0x12D0, 0, (void*)0x08035848 }, { 0x12D1, 0, (void*)0x08035888 }, - { 0x12D2, 0, (void*)0x080358D0 }, { 0x12D3, 0, (void*)0x080358E8 }, { 0x12D4, 0, (void*)0x0803590C }, - { 0x12D5, 0, (void*)0x0803592C }, { 0x12D6, 0, (void*)0x0803596C }, { 0x12D7, 0, (void*)0x080359C4 }, - { 0x12D8, 0, (void*)0x08035A10 }, { 0x12D9, 0, (void*)0x08035A80 }, { 0x12DA, 0, (void*)0x08035ADC }, - { 0x12DB, 0, (void*)0x08035B48 }, { 0x12DC, 0, (void*)0x08035BB8 }, { 0x12DD, 0, (void*)0x08035BF8 }, - { 0x12DE, 0, (void*)0x08035C74 }, { 0x12DF, 0, (void*)0x08035CB0 }, { 0x12E0, 0, (void*)0x08035D10 }, - { 0x12E3, 0, (void*)0x08035D4C }, { 0x12E4, 0, (void*)0x08035D70 }, { 0x12E5, 0, (void*)0x08035DAC }, - { 0x12E6, 0, (void*)0x08035DD8 }, { 0x12E7, 0, (void*)0x08035DF4 }, { 0x12E8, 0, (void*)0x08035E0C }, - { 0x12E9, 0, (void*)0x08035E58 }, { 0x12EA, 0, (void*)0x08035ED4 }, { 0x12EB, 0, (void*)0x08035F44 }, - { 0x12EC, 0, (void*)0x08036074 }, { 0x12ED, 0, (void*)0x080360BC }, { 0x12EE, 0, (void*)0x08036104 }, - { 0x12EF, 0, (void*)0x0803613C }, { 0x12F0, 0, (void*)0x080361A0 }, { 0x12F1, 0, (void*)0x080361F0 }, - { 0x12F2, 0, (void*)0x08036248 }, { 0x12F3, 0, (void*)0x08036260 }, { 0x12F4, 0, (void*)0x080362A0 }, - { 0x12F5, 0, (void*)0x08036300 }, { 0x12F6, 0, (void*)0x08036324 }, { 0x12F7, 0, (void*)0x080363A0 }, - { 0x12F8, 0, (void*)0x0803640C }, { 0x12F9, 0, (void*)0x08036474 }, { 0x12FA, 0, (void*)0x080364CC }, - { 0x12FB, 0, (void*)0x08036508 }, { 0x12FC, 0, (void*)0x0803655C }, { 0x12FD, 0, (void*)0x08036578 }, - { 0x12FE, 0, (void*)0x080365D4 }, { 0x12FF, 0, (void*)0x080365F8 }, { 0x1300, 0, (void*)0x08036654 }, - { 0x1301, 0, (void*)0x080366A4 }, { 0x1302, 0, (void*)0x080366F0 }, { 0x1303, 0, (void*)0x08036738 }, - { 0x1304, 0, (void*)0x08036770 }, { 0x1305, 0, (void*)0x080367AC }, { 0x1306, 0, (void*)0x080367F0 }, - { 0x1307, 0, (void*)0x08036830 }, { 0x1308, 0, (void*)0x08036850 }, { 0x1309, 0, (void*)0x0803688C }, - { 0x130A, 0, (void*)0x080368F0 }, { 0x130B, 0, (void*)0x08036924 }, { 0x130C, 0, (void*)0x0803695C }, - { 0x130D, 0, (void*)0x080369A8 }, { 0x130E, 0, (void*)0x080369FC }, { 0x130F, 0, (void*)0x08036A40 }, - { 0x1310, 0, (void*)0x08036A74 }, { 0x1311, 0, (void*)0x08036AB8 }, { 0x1312, 0, (void*)0x08036B14 }, - { 0x1313, 0, (void*)0x08036B4C }, { 0x1314, 0, (void*)0x08036BAC }, { 0x1315, 0, (void*)0x08036C0C }, - { 0x1316, 0, (void*)0x08036C64 }, { 0x1317, 0, (void*)0x08036CBC }, { 0x1318, 0, (void*)0x08036D1C }, - { 0x1319, 0, (void*)0x08036D80 }, { 0x131A, 0, (void*)0x08036DC4 }, { 0x131B, 0, (void*)0x08036E0C }, - { 0x131C, 0, (void*)0x08036E8C }, { 0x131D, 0, (void*)0x08036F14 }, { 0x1388, 0, (void*)0x08036F8C }, - { 0x1389, 0, (void*)0x08036FB4 }, { 0x138A, 0, (void*)0x08036FF8 }, { 0x138B, 0, (void*)0x08037034 }, - { 0x138C, 0, (void*)0x08037060 }, { 0x138D, 0, (void*)0x0803709C }, { 0x138E, 0, (void*)0x0803711C }, - { 0x138F, 0, (void*)0x08037140 }, { 0x1390, 0, (void*)0x08037178 }, { 0x1391, 0, (void*)0x080371AC }, - { 0x1392, 0, (void*)0x08037204 }, { 0x1393, 0, (void*)0x08037234 }, { 0x1394, 0, (void*)0x08037288 }, - { 0x1395, 0, (void*)0x080372BC }, { 0x1396, 0, (void*)0x080372F0 }, { 0x1397, 0, (void*)0x08037310 }, - { 0x1398, 0, (void*)0x08037338 }, { 0x1399, 0, (void*)0x080373C4 }, { 0x139A, 0, (void*)0x08037438 }, - { 0x139B, 0, (void*)0x080374A0 }, { 0x139C, 0, (void*)0x0803751C }, { 0x139D, 0, (void*)0x0803758C }, - { 0x139E, 0, (void*)0x08037620 }, { 0x139F, 0, (void*)0x08037704 }, { 0x13A0, 0, (void*)0x08037764 }, - { 0x13A1, 0, (void*)0x080377F4 }, { 0x13A2, 0, (void*)0x08037838 }, { 0x13A3, 0, (void*)0x08037894 }, - { 0x13A4, 0, (void*)0x08037918 }, { 0x13A5, 0, (void*)0x08037974 }, { 0x13A6, 0, (void*)0x080379CC }, - { 0x13A7, 0, (void*)0x08037A68 }, { 0x13A8, 0, (void*)0x08037ACC }, { 0x13AE, 0, (void*)0x08037B5C }, - { 0x13AF, 0, (void*)0x08037BF8 }, { 0x13B0, 0, (void*)0x08037CE0 }, { 0x13B1, 0, (void*)0x08037D2C }, - { 0x13B2, 0, (void*)0x08037D54 }, { 0x13B3, 0, (void*)0x08037D74 }, { 0x13EC, 0, (void*)0x08037DB8 }, - { 0x13ED, 0, (void*)0x08037DCC }, { 0x13EE, 0, (void*)0x08037E30 }, { 0x13EF, 0, (void*)0x08037EB4 }, - { 0x13F0, 0, (void*)0x08037EF4 }, { 0x13F1, 0, (void*)0x08037F34 }, { 0x13F2, 0, (void*)0x08037F74 }, - { 0x13F3, 0, (void*)0x08037F8C }, { 0x13F4, 0, (void*)0x08037FA4 }, { 0x13F5, 0, (void*)0x08037FC8 }, - { 0x13F6, 0, (void*)0x08037FF8 }, { 0x13F7, 0, (void*)0x0803800C }, { 0x13F8, 0, (void*)0x0803803C }, - { 0x13F9, 0, (void*)0x08038084 }, { 0x13FA, 0, (void*)0x080380C8 }, { 0x13FB, 0, (void*)0x08038108 }, - { 0x13FC, 0, (void*)0x080381A4 }, { 0x13FD, 0, (void*)0x080381FC }, { 0x13FE, 0, (void*)0x08038254 }, - { 0x13FF, 0, (void*)0x080382D8 }, { 0x1400, 0, (void*)0x080383A8 }, { 0x1401, 0, (void*)0x08038504 }, - { 0x1402, 0, (void*)0x080385A8 }, { 0x1403, 0, (void*)0x08038630 }, { 0x1404, 0, (void*)0x0803868C }, - { 0x1405, 0, (void*)0x080386C4 }, { 0x1406, 0, (void*)0x08038728 }, { 0x1407, 0, (void*)0x08038824 }, - { 0x1408, 0, (void*)0x08038844 }, { 0x1409, 0, (void*)0x080388F4 }, { 0x140A, 0, (void*)0x08038984 }, - { 0x140B, 0, (void*)0x080389D0 }, { 0x140C, 0, (void*)0x08038A3C }, { 0x140D, 0, (void*)0x08038A88 }, - { 0x140E, 0, (void*)0x08038AE8 }, { 0x140F, 0, (void*)0x08038B20 }, { 0x1410, 0, (void*)0x08038B60 }, - { 0x1411, 0, (void*)0x08038BBC }, { 0x1412, 0, (void*)0x08038BF4 }, { 0x1413, 0, (void*)0x08038C34 }, - { 0x1414, 0, (void*)0x08038CC0 }, { 0x1450, 0, (void*)0x08038D04 }, { 0x1451, 0, (void*)0x08038EC4 }, - { 0x1452, 0, (void*)0x08038EF8 }, { 0x1453, 0, (void*)0x08038F10 }, { 0x1454, 0, (void*)0x08038F50 }, - { 0x1455, 0, (void*)0x08038F9C }, { 0x1456, 0, (void*)0x08038FE4 }, { 0x1457, 0, (void*)0x08039064 }, - { 0x1458, 0, (void*)0x080390A8 }, { 0x1459, 0, (void*)0x080390D4 }, { 0x145A, 0, (void*)0x08039128 }, - { 0x145B, 0, (void*)0x08039198 }, { 0x145C, 0, (void*)0x080391C4 }, { 0x145D, 0, (void*)0x080391D8 }, - { 0x145E, 0, (void*)0x08039204 }, { 0x145F, 0, (void*)0x080392B0 }, { 0x1460, 0, (void*)0x08039360 }, - { 0x1461, 0, (void*)0x080393A8 }, { 0x1462, 0, (void*)0x080393BC }, { 0x1463, 0, (void*)0x080393EC }, - { 0x1464, 0, (void*)0x0803940C }, { 0x1465, 0, (void*)0x0803942C }, { 0x1466, 0, (void*)0x08039454 }, - { 0x1467, 0, (void*)0x0803948C }, { 0x1468, 0, (void*)0x080394E8 }, { 0x1469, 0, (void*)0x08039548 }, - { 0x146A, 0, (void*)0x080395A8 }, { 0x146B, 0, (void*)0x08039638 }, { 0x146C, 0, (void*)0x08039700 }, - { 0x146D, 0, (void*)0x08039738 }, { 0x146E, 0, (void*)0x08039758 }, { 0x146F, 0, (void*)0x080397D8 }, - { 0x1470, 0, (void*)0x08039858 }, { 0x1471, 0, (void*)0x08039880 }, { 0x1472, 0, (void*)0x080398B8 }, - { 0x1473, 0, (void*)0x08039924 }, { 0x1474, 0, (void*)0x08039950 }, { 0x1475, 0, (void*)0x08039A64 }, - { 0x1476, 0, (void*)0x08039AE8 }, { 0x1477, 0, (void*)0x08039B4C }, { 0x1478, 0, (void*)0x08039B70 }, - { 0x1479, 0, (void*)0x08039B98 }, { 0x147A, 0, (void*)0x08039BCC }, { 0x147B, 0, (void*)0x08039C00 }, - { 0x147C, 0, (void*)0x08039D6C }, { 0x147D, 0, (void*)0x08039E18 }, { 0x14B4, 0, (void*)0x08039E78 }, - { 0x14B5, 0, (void*)0x08039EA8 }, { 0x14B6, 0, (void*)0x08039EF8 }, { 0x14B7, 0, (void*)0x08039F64 }, - { 0x14B8, 0, (void*)0x08039F90 }, { 0x14B9, 0, (void*)0x08039FE4 }, { 0x14BA, 0, (void*)0x0803A044 }, - { 0x14BB, 0, (void*)0x0803A090 }, { 0x14BC, 0, (void*)0x0803A110 }, { 0x14BD, 0, (void*)0x0803A138 }, - { 0x14BE, 0, (void*)0x0803A1B8 }, { 0x14BF, 0, (void*)0x0803A208 }, { 0x14C0, 0, (void*)0x0803A25C }, - { 0x14C1, 0, (void*)0x0803A29C }, { 0x14C2, 0, (void*)0x0803A2E8 }, { 0x14C3, 0, (void*)0x0803A384 }, - { 0x14C4, 0, (void*)0x0803A3FC }, { 0x14C5, 0, (void*)0x0803A458 }, { 0x14C6, 0, (void*)0x0803A514 }, - { 0x14C7, 0, (void*)0x0803A540 }, { 0x14C8, 0, (void*)0x0803A570 }, { 0x14C9, 0, (void*)0x0803A5E4 }, - { 0x14CA, 0, (void*)0x0803A614 }, { 0x14CB, 0, (void*)0x0803A684 }, { 0x14CC, 0, (void*)0x0803A700 }, - { 0x14CD, 0, (void*)0x0803A79C }, { 0x14CE, 0, (void*)0x0803A7B8 }, { 0x14CF, 0, (void*)0x0803A880 }, - { 0x14D0, 0, (void*)0x0803A8AC }, { 0x14D1, 0, (void*)0x0803A96C }, { 0x14D2, 0, (void*)0x0803AA08 }, - { 0x14D3, 0, (void*)0x0803AA80 }, { 0x14D4, 0, (void*)0x0803AB40 }, { 0x14D5, 0, (void*)0x0803AB80 }, - { 0x14D6, 0, (void*)0x0803ABC0 }, { 0x14D7, 0, (void*)0x0803AC30 }, { 0x14D8, 0, (void*)0x0803AC78 }, - { 0x14D9, 0, (void*)0x0803ACEC }, { 0x14DA, 0, (void*)0x0803AD64 }, { 0x14DB, 0, (void*)0x0803AD8C }, - { 0x14DC, 0, (void*)0x0803ADB8 }, { 0x14DD, 0, (void*)0x0803ADEC }, { 0x14DE, 0, (void*)0x0803AE40 }, - { 0x14DF, 0, (void*)0x0803AEAC }, { 0x14E0, 0, (void*)0x0803AEFC }, { 0x14E1, 0, (void*)0x0803AF58 }, - { 0x14E2, 0, (void*)0x0803AFDC }, { 0x14E3, 0, (void*)0x0803B018 }, { 0x14E4, 0, (void*)0x0803B044 }, - { 0x14E5, 0, (void*)0x0803B07C }, { 0x14E6, 0, (void*)0x0803B100 }, { 0x14E7, 0, (void*)0x0803B13C }, - { 0x14E8, 0, (void*)0x0803B19C }, { 0x14E9, 0, (void*)0x0803B220 }, { 0x14EA, 0, (void*)0x0803B2A0 }, - { 0x14EB, 0, (void*)0x0803B358 }, { 0x14EC, 0, (void*)0x0803B398 }, { 0x14ED, 0, (void*)0x0803B40C }, - { 0x14EE, 0, (void*)0x0803B518 }, { 0x14EF, 0, (void*)0x0803B5F8 }, { 0x14F0, 0, (void*)0x0803B63C }, - { 0x14F1, 0, (void*)0x0803B6A8 }, { 0x14F2, 0, (void*)0x0803B734 }, { 0x14F3, 0, (void*)0x0803B7B8 }, - { 0x14F4, 0, (void*)0x0803B834 }, { 0x14F5, 0, (void*)0x0803B910 }, { 0x14F6, 0, (void*)0x0803B984 }, - { 0x14F7, 0, (void*)0x0803B9F0 }, { 0x14F8, 0, (void*)0x0803BA80 }, { 0x14F9, 0, (void*)0x0803BAB8 }, - { 0x14FA, 0, (void*)0x0803BAF8 }, { 0x14FB, 0, (void*)0x0803BB60 }, { 0x14FC, 0, (void*)0x0803BB8C }, - { 0x1518, 0, (void*)0x0803BBFC }, { 0x1519, 0, (void*)0x0803BC5C }, { 0x151A, 0, (void*)0x0803BCB0 }, - { 0x151B, 0, (void*)0x0803BCC8 }, { 0x151C, 0, (void*)0x0803BCF8 }, { 0x151D, 0, (void*)0x0803BD44 }, - { 0x151E, 0, (void*)0x0803BDB8 }, { 0x151F, 0, (void*)0x0803BDFC }, { 0x1520, 0, (void*)0x0803BE9C }, - { 0x1521, 0, (void*)0x0803BF18 }, { 0x1522, 0, (void*)0x0803BF64 }, { 0x1523, 0, (void*)0x0803BF8C }, - { 0x1524, 0, (void*)0x0803BFA4 }, { 0x1525, 0, (void*)0x0803BFD8 }, { 0x1526, 0, (void*)0x0803BFF8 }, - { 0x1527, 0, (void*)0x0803C014 }, { 0x1528, 0, (void*)0x0803C068 }, { 0x1529, 0, (void*)0x0803C0EC }, - { 0x152A, 0, (void*)0x0803C174 }, { 0x152B, 0, (void*)0x0803C1CC }, { 0x152C, 0, (void*)0x0803C22C }, - { 0x152D, 0, (void*)0x0803C290 }, { 0x152E, 0, (void*)0x0803C314 }, { 0x152F, 0, (void*)0x0803C398 }, - { 0x1530, 0, (void*)0x0803C3F0 }, { 0x1531, 0, (void*)0x0803C454 }, { 0x1532, 0, (void*)0x0803C4DC }, - { 0x1533, 0, (void*)0x0803C518 }, { 0x1534, 0, (void*)0x0803C564 }, { 0x1535, 0, (void*)0x0803C5A4 }, - { 0x1536, 0, (void*)0x0803C5E4 }, { 0x1537, 0, (void*)0x0803C644 }, { 0x1538, 0, (void*)0x0803C6C8 }, - { 0x1539, 0, (void*)0x0803C744 }, { 0x153A, 0, (void*)0x0803C7E0 }, { 0x153B, 0, (void*)0x0803C80C }, - { 0x153C, 0, (void*)0x0803C84C }, { 0x153D, 0, (void*)0x0803C884 }, { 0x153E, 0, (void*)0x0803C89C }, - { 0x153F, 0, (void*)0x0803C8DC }, { 0x1540, 0, (void*)0x0803C908 }, { 0x1541, 0, (void*)0x0803C944 }, - { 0x1542, 0, (void*)0x0803C9A0 }, { 0x157C, 0, (void*)0x0803C9BC }, { 0x157D, 0, (void*)0x0803C9D4 }, - { 0x157E, 0, (void*)0x0803CA30 }, { 0x157F, 0, (void*)0x0803CA70 }, { 0x1580, 0, (void*)0x0803CAA0 }, - { 0x1581, 0, (void*)0x0803CAEC }, { 0x1582, 0, (void*)0x0803CB04 }, { 0x1583, 0, (void*)0x0803CB18 }, - { 0x1584, 0, (void*)0x0803CB30 }, { 0x1585, 0, (void*)0x0803CB64 }, { 0x1586, 0, (void*)0x0803CBD8 }, - { 0x1587, 0, (void*)0x0803CBF4 }, { 0x1588, 0, (void*)0x0803CC34 }, { 0x1589, 0, (void*)0x0803CC78 }, - { 0x158A, 0, (void*)0x0803CD14 }, { 0x158B, 0, (void*)0x0803CDA0 }, { 0x158C, 0, (void*)0x0803CDE0 }, - { 0x158D, 0, (void*)0x0803CE3C }, { 0x158E, 0, (void*)0x0803CEA8 }, { 0x158F, 0, (void*)0x0803CEE8 }, - { 0x1590, 0, (void*)0x0803CF30 }, { 0x1591, 0, (void*)0x0803CFA4 }, { 0x1592, 0, (void*)0x0803D050 }, - { 0x1593, 0, (void*)0x0803D0C8 }, { 0x1594, 0, (void*)0x0803D118 }, { 0x1595, 0, (void*)0x0803D168 }, - { 0x1596, 0, (void*)0x0803D1A8 }, { 0x1597, 0, (void*)0x0803D1F0 }, { 0x1598, 0, (void*)0x0803D228 }, - { 0x1599, 0, (void*)0x0803D290 }, { 0x159A, 0, (void*)0x0803D2FC }, { 0x159B, 0, (void*)0x0803D368 }, - { 0x159C, 0, (void*)0x0803D448 }, { 0x159D, 0, (void*)0x0803D4C0 }, { 0x159E, 0, (void*)0x0803D500 }, - { 0x159F, 0, (void*)0x0803D558 }, { 0x15A0, 0, (void*)0x0803D5B4 }, { 0x15A1, 0, (void*)0x0803D628 }, - { 0x15A2, 0, (void*)0x0803D730 }, { 0x15A3, 0, (void*)0x0803D798 }, { 0x15A4, 0, (void*)0x0803D818 }, - { 0x15A5, 0, (void*)0x0803D868 }, { 0x15A6, 0, (void*)0x0803D8C4 }, { 0x15A7, 0, (void*)0x0803D9AC }, - { 0x15A8, 0, (void*)0x0803D9FC }, { 0x15E0, 0, (void*)0x0803DA3C }, { 0x15E1, 0, (void*)0x0803DA80 }, - { 0x15E2, 0, (void*)0x0803DB14 }, { 0x15E3, 0, (void*)0x0803DB9C }, { 0x15E4, 0, (void*)0x0803DC1C }, - { 0x15E5, 0, (void*)0x0803DC70 }, { 0x15E6, 0, (void*)0x0803DCA8 }, { 0x15E7, 0, (void*)0x0803DCF8 }, - { 0x15E8, 0, (void*)0x0803DD5C }, { 0x15E9, 0, (void*)0x0803DE00 }, { 0x15EA, 0, (void*)0x0803DE5C }, - { 0x15EB, 0, (void*)0x0803DE84 }, { 0x15EC, 0, (void*)0x0803DED0 }, { 0x15ED, 0, (void*)0x0803DF34 }, - { 0x15EE, 0, (void*)0x0803DF64 }, { 0x15EF, 0, (void*)0x0803DF9C }, { 0x15F0, 0, (void*)0x0803DFBC }, - { 0x15F1, 0, (void*)0x0803E018 }, { 0x15F2, 0, (void*)0x0803E0B8 }, { 0x15F3, 0, (void*)0x0803E124 }, - { 0x15F4, 0, (void*)0x0803E178 }, { 0x15F5, 0, (void*)0x0803E1E0 }, { 0x15F6, 0, (void*)0x0803E298 }, - { 0x15F7, 0, (void*)0x0803E310 }, { 0x15F8, 0, (void*)0x0803E36C }, { 0x15F9, 0, (void*)0x0803E3D0 }, - { 0x15FA, 0, (void*)0x0803E420 }, { 0x15FB, 0, (void*)0x0803E454 }, { 0x15FC, 0, (void*)0x0803E488 }, - { 0x15FD, 0, (void*)0x0803E4E8 }, { 0x15FE, 0, (void*)0x0803E59C }, { 0x15FF, 0, (void*)0x0803E620 }, - { 0x1600, 0, (void*)0x0803E66C }, { 0x1601, 0, (void*)0x0803E70C }, { 0x1602, 0, (void*)0x0803E74C }, - { 0x1603, 0, (void*)0x0803E7A4 }, { 0x1604, 0, (void*)0x0803E7DC }, { 0x1605, 0, (void*)0x0803E804 }, - { 0x1606, 0, (void*)0x0803E864 }, { 0x1607, 0, (void*)0x0803E8E8 }, { 0x1608, 0, (void*)0x0803E930 }, - { 0x1609, 0, (void*)0x0803E9E4 }, { 0x160A, 0, (void*)0x0803EA4C }, { 0x160B, 0, (void*)0x0803EAB0 }, - { 0x160C, 0, (void*)0x0803EB18 }, { 0x160D, 0, (void*)0x0803EB58 }, { 0x160E, 0, (void*)0x0803EBA8 }, - { 0x160F, 0, (void*)0x0803EBFC }, { 0x1610, 0, (void*)0x0803EC9C }, { 0x1611, 0, (void*)0x0803ED14 }, - { 0x1612, 0, (void*)0x0803EE08 }, { 0x1613, 0, (void*)0x0803EE48 }, { 0x1614, 0, (void*)0x0803EEB0 }, - { 0x1615, 0, (void*)0x0803EEF0 }, { 0x1616, 0, (void*)0x0803EFAC }, { 0x1617, 0, (void*)0x0803F004 }, - { 0x1618, 0, (void*)0x0803F04C }, { 0x1619, 0, (void*)0x0803F078 }, { 0x161A, 0, (void*)0x0803F0E0 }, - { 0x161B, 0, (void*)0x0803F110 }, { 0x161C, 0, (void*)0x0803F15C }, { 0x161D, 0, (void*)0x0803F1EC }, - { 0x161E, 0, (void*)0x0803F264 }, { 0x161F, 0, (void*)0x0803F2CC }, { 0x1620, 0, (void*)0x0803F344 }, - { 0x1621, 0, (void*)0x0803F3A8 }, { 0x1622, 0, (void*)0x0803F3F4 }, { 0x1623, 0, (void*)0x0803F46C }, - { 0x1624, 0, (void*)0x0803F4AC }, { 0x1625, 0, (void*)0x0803F500 }, { 0x1626, 0, (void*)0x0803F608 }, - { 0x1627, 0, (void*)0x0803F66C }, { 0x1628, 0, (void*)0x0803F6E8 }, { 0x1629, 0, (void*)0x0803F718 }, - { 0x162A, 0, (void*)0x0803F760 }, { 0x162B, 0, (void*)0x0803F7C0 }, { 0x162C, 0, (void*)0x0803F87C }, - { 0x162D, 0, (void*)0x0803F8A8 }, { 0x162E, 0, (void*)0x0803F8EC }, { 0x162F, 0, (void*)0x0803F94C }, - { 0x1630, 0, (void*)0x0803F978 }, { 0x1631, 0, (void*)0x0803F9DC }, { 0x1632, 0, (void*)0x0803FA3C }, - { 0x1633, 0, (void*)0x0803FA78 }, { 0x1634, 0, (void*)0x0803FAC4 }, { 0x1635, 0, (void*)0x0803FB0C }, - { 0x1636, 0, (void*)0x0803FB5C }, { 0x1637, 0, (void*)0x0803FBCC }, { 0x1638, 0, (void*)0x0803FC50 }, - { 0x1644, 0, (void*)0x0803FC6C }, { 0x1645, 0, (void*)0x0803FD0C }, { 0x1646, 0, (void*)0x0803FD5C }, - { 0x1647, 0, (void*)0x0803FDC0 }, { 0x1648, 0, (void*)0x0803FE08 }, { 0x1649, 0, (void*)0x0803FE54 }, - { 0x164A, 0, (void*)0x0803FEB4 }, { 0x164B, 0, (void*)0x0803FF88 }, { 0x164C, 0, (void*)0x0803FFF4 }, - { 0x164D, 0, (void*)0x08040064 }, { 0x164E, 0, (void*)0x080400BC }, { 0x164F, 0, (void*)0x0804010C }, - { 0x1650, 0, (void*)0x08040174 }, { 0x1651, 0, (void*)0x0804019C }, { 0x1652, 0, (void*)0x08040208 }, - { 0x1653, 0, (void*)0x08040250 }, { 0x1654, 0, (void*)0x080402B0 }, { 0x1655, 0, (void*)0x080402CC }, - { 0x1656, 0, (void*)0x0804032C }, { 0x1657, 0, (void*)0x0804035C }, { 0x1658, 0, (void*)0x080403C0 }, - { 0x1659, 0, (void*)0x08040494 }, { 0x165A, 0, (void*)0x08040530 }, { 0x165B, 0, (void*)0x0804054C }, - { 0x165C, 0, (void*)0x080405AC }, { 0x165D, 0, (void*)0x080405E0 }, { 0x165E, 0, (void*)0x08040624 }, - { 0x165F, 0, (void*)0x0804070C }, { 0x1660, 0, (void*)0x08040798 }, { 0x1661, 0, (void*)0x080407C0 }, - { 0x1700, 0, (void*)0x08040848 }, { 0x1701, 0, (void*)0x080408E4 }, { 0x1702, 0, (void*)0x0804092C }, - { 0x1703, 0, (void*)0x08040988 }, { 0x1704, 0, (void*)0x080409D4 }, { 0x1705, 0, (void*)0x08040A28 }, - { 0x1706, 0, (void*)0x08040ABC }, { 0x1707, 0, (void*)0x08040B0C }, { 0x1708, 0, (void*)0x08040B50 }, - { 0x1709, 0, (void*)0x08040BA4 }, { 0x170A, 0, (void*)0x08040C18 }, { 0x170B, 0, (void*)0x08040C60 }, - { 0x170C, 0, (void*)0x08040C6C }, { 0x170D, 0, (void*)0x08040CC8 }, { 0x170E, 0, (void*)0x08040D38 }, - { 0x170F, 0, (void*)0x08040DBC }, { 0x1710, 0, (void*)0x08040E0C }, { 0x1711, 0, (void*)0x08040E84 }, - { 0x1712, 0, (void*)0x08040E90 }, { 0x1713, 0, (void*)0x08040EE8 }, { 0x1714, 0, (void*)0x08040F30 }, - { 0x1715, 0, (void*)0x08040F78 }, { 0x1716, 0, (void*)0x08040FD0 }, { 0x1717, 0, (void*)0x08041050 }, - { 0x1718, 0, (void*)0x08041084 }, { 0x1719, 0, (void*)0x080410E8 }, { 0x171A, 0, (void*)0x08041128 }, - { 0x171B, 0, (void*)0x08041170 }, { 0x171C, 0, (void*)0x080411BC }, { 0x171D, 0, (void*)0x080411C8 }, - { 0x171E, 0, (void*)0x0804122C }, { 0x171F, 0, (void*)0x0804125C }, { 0x1720, 0, (void*)0x080412A8 }, - { 0x1721, 0, (void*)0x080412E8 }, { 0x1722, 0, (void*)0x0804132C }, { 0x1723, 0, (void*)0x08041378 }, - { 0x1724, 0, (void*)0x080413C0 }, { 0x1725, 0, (void*)0x08041414 }, { 0x1726, 0, (void*)0x08041470 }, - { 0x1727, 0, (void*)0x0804147C }, { 0x1728, 0, (void*)0x08041488 }, { 0x1729, 0, (void*)0x080414D0 }, - { 0x172A, 0, (void*)0x08041530 }, { 0x172B, 0, (void*)0x08041588 }, { 0x172C, 0, (void*)0x080415E4 }, - { 0x172D, 0, (void*)0x08041640 }, { 0x172E, 0, (void*)0x08041698 }, { 0x172F, 0, (void*)0x080416FC }, - { 0x1730, 0, (void*)0x08041740 }, { 0x1731, 0, (void*)0x08041794 }, { 0x1732, 0, (void*)0x080417A0 }, - { 0x1733, 0, (void*)0x080417F4 }, { 0x1734, 0, (void*)0x08041848 }, { 0x1735, 0, (void*)0x0804189C }, - { 0x1736, 0, (void*)0x08041900 }, { 0x1737, 0, (void*)0x08041958 }, { 0x1738, 0, (void*)0x080419A8 }, - { 0x1739, 0, (void*)0x080419F4 }, { 0x173A, 0, (void*)0x08041A54 }, { 0x173B, 0, (void*)0x08041AA0 }, - { 0x173C, 0, (void*)0x08041AF8 }, { 0x173D, 0, (void*)0x08041B54 }, { 0x173E, 0, (void*)0x08041BA4 }, - { 0x173F, 0, (void*)0x08041BF4 }, { 0x1740, 0, (void*)0x08041C48 }, { 0x1741, 0, (void*)0x08041CAC }, - { 0x1742, 0, (void*)0x08041D08 }, { 0x1743, 0, (void*)0x08041D68 }, { 0x1744, 0, (void*)0x08041DB4 }, - { 0x1745, 0, (void*)0x08041DF8 }, { 0x1746, 0, (void*)0x08041E54 }, { 0x1747, 0, (void*)0x08041EB0 }, - { 0x1748, 0, (void*)0x08041F2C }, { 0x1749, 0, (void*)0x08041F78 }, { 0x1784, 0, (void*)0x08041FD0 }, - { 0x1785, 0, (void*)0x0804202C }, { 0x1786, 0, (void*)0x08042088 }, { 0x1787, 0, (void*)0x080420E4 }, - { 0x1788, 0, (void*)0x080420F0 }, { 0x1789, 0, (void*)0x0804214C }, { 0x178A, 0, (void*)0x080421B0 }, - { 0x178B, 0, (void*)0x080421F4 }, { 0x178C, 0, (void*)0x0804223C }, { 0x178D, 0, (void*)0x08042288 }, - { 0x178E, 0, (void*)0x080422CC }, { 0x178F, 0, (void*)0x08042314 }, { 0x1798, 0, (void*)0x08042360 }, - { 0x1799, 0, (void*)0x080423AC }, { 0x179A, 0, (void*)0x080423F4 }, { 0x179B, 0, (void*)0x08042440 }, - { 0x17AA, 0, (void*)0x08042490 }, { 0x17AC, 0, (void*)0x08042514 }, { 0x17AD, 0, (void*)0x08042568 }, - { 0x17AE, 0, (void*)0x080425C0 }, { 0x17AF, 0, (void*)0x0804262C }, { 0x1800, 0, (void*)0x080426AC }, - { 0x1801, 0, (void*)0x080426CC }, { 0x1802, 0, (void*)0x0804272C }, { 0x1803, 0, (void*)0x08042754 }, - { 0x1804, 0, (void*)0x08042784 }, { 0x1805, 0, (void*)0x080427E0 }, { 0x1806, 0, (void*)0x08042834 }, - { 0x1807, 0, (void*)0x08042870 }, { 0x1808, 0, (void*)0x080428D0 }, { 0x1809, 0, (void*)0x08042910 }, - { 0x180A, 0, (void*)0x0804293C }, { 0x180B, 0, (void*)0x08042968 }, { 0x180C, 0, (void*)0x08042990 }, - { 0x180D, 0, (void*)0x080429AC }, { 0x180E, 0, (void*)0x08042A04 }, { 0x180F, 0, (void*)0x08042A50 }, - { 0x1810, 0, (void*)0x08042A80 }, { 0x1811, 0, (void*)0x08042AB4 }, { 0x1812, 0, (void*)0x08042AF8 }, - { 0x1813, 0, (void*)0x08042B38 }, { 0x1814, 0, (void*)0x08042B6C }, { 0x1815, 0, (void*)0x08042BAC }, - { 0x1816, 0, (void*)0x08042C04 }, { 0x1817, 0, (void*)0x08042C4C }, { 0x1818, 0, (void*)0x08042C8C }, - { 0x1819, 0, (void*)0x08042CB8 }, { 0x181A, 0, (void*)0x08042CEC }, { 0x181B, 0, (void*)0x08042D28 }, - { 0x181C, 0, (void*)0x08042D34 }, { 0x181D, 0, (void*)0x08042D94 }, { 0x181E, 0, (void*)0x08042DD8 }, - { 0x181F, 0, (void*)0x08042DF0 }, { 0x1820, 0, (void*)0x08042E40 }, { 0x1821, 0, (void*)0x08042E7C }, - { 0x1822, 0, (void*)0x08042EB0 }, { 0x1823, 0, (void*)0x08042EE8 }, { 0x1824, 0, (void*)0x08042F20 }, - { 0x1883, 0, (void*)0x08042F2C }, { 0x1884, 0, (void*)0x08042F60 }, { 0x1885, 0, (void*)0x08042F9C }, - { 0x1886, 0, (void*)0x08043008 }, { 0x1887, 0, (void*)0x08043054 }, { 0x1888, 0, (void*)0x08043094 }, - { 0x1889, 0, (void*)0x080430E4 }, { 0x188A, 0, (void*)0x08043134 }, { 0x188B, 0, (void*)0x08043150 }, - { 0x188C, 0, (void*)0x0804318C }, { 0x188D, 0, (void*)0x080431E8 }, { 0x188E, 0, (void*)0x08043224 }, - { 0x188F, 0, (void*)0x0804326C }, { 0x1890, 0, (void*)0x08043298 }, { 0x1891, 0, (void*)0x080432D8 }, - { 0x1892, 0, (void*)0x0804332C }, { 0x1893, 0, (void*)0x08043378 }, { 0x1901, 0, (void*)0x080433B4 }, - { 0x1902, 0, (void*)0x0804341C }, { 0x1903, 0, (void*)0x08043484 }, { 0x1904, 0, (void*)0x08043508 }, - { 0x1905, 0, (void*)0x08043580 }, { 0x1906, 0, (void*)0x08043610 }, { 0x1907, 0, (void*)0x0804367C }, - { 0x1908, 0, (void*)0x08043710 }, { 0x1909, 0, (void*)0x08043784 }, { 0x190A, 0, (void*)0x0804380C }, - { 0x190B, 0, (void*)0x08043880 }, { 0x190C, 0, (void*)0x080438E8 }, { 0x190D, 0, (void*)0x08043948 }, - { 0x190E, 0, (void*)0x080439C4 }, { 0x190F, 0, (void*)0x08043A20 }, { 0x1910, 0, (void*)0x08043AA0 }, - { 0x1911, 0, (void*)0x08043B24 }, { 0x1912, 0, (void*)0x08043BA8 }, { 0x1913, 0, (void*)0x08043C30 }, - { 0x1914, 0, (void*)0x08043C9C }, { 0x1915, 0, (void*)0x08043CEC }, { 0x1916, 0, (void*)0x08043D50 }, - { 0x1917, 0, (void*)0x08043DD8 }, { 0x1918, 0, (void*)0x08043E40 }, { 0x1919, 0, (void*)0x08043EB0 }, - { 0x191A, 0, (void*)0x08043F24 }, { 0x191B, 0, (void*)0x08043FB0 }, { 0x191C, 0, (void*)0x0804401C }, - { 0x191D, 0, (void*)0x08044098 }, { 0x191E, 0, (void*)0x0804411C }, { 0x191F, 0, (void*)0x08044184 }, - { 0x1921, 0, (void*)0x080441E8 }, { 0x1922, 0, (void*)0x08044258 }, { 0x1923, 0, (void*)0x080442D4 }, - { 0x1924, 0, (void*)0x08044348 }, { 0x1925, 0, (void*)0x080443D0 }, { 0x1926, 0, (void*)0x08044458 }, - { 0x1927, 0, (void*)0x080444DC }, { 0x1928, 0, (void*)0x08044574 }, { 0x1929, 0, (void*)0x080445CC }, - { 0x192A, 0, (void*)0x08044630 }, { 0x192C, 0, (void*)0x080446AC }, { 0x192D, 0, (void*)0x0804471C }, - { 0x192E, 0, (void*)0x08044780 }, { 0x1930, 0, (void*)0x08044808 }, { 0x1931, 0, (void*)0x08044898 }, - { 0x1932, 0, (void*)0x08044910 }, { 0x1933, 0, (void*)0x0804498C }, { 0x1934, 0, (void*)0x08044A04 }, - { 0x1935, 0, (void*)0x08044A94 }, { 0x1937, 0, (void*)0x08044B10 }, { 0x1939, 0, (void*)0x08044B9C }, - { 0x193A, 0, (void*)0x08044C0C }, { 0x193B, 0, (void*)0x08044C18 }, { 0x193C, 0, (void*)0x08044C8C }, - { 0x1942, 0, (void*)0x08044D04 }, { 0x1944, 0, (void*)0x08044D6C }, { 0x1945, 0, (void*)0x08044DCC }, - { 0x1946, 0, (void*)0x08044E48 }, { 0x1947, 0, (void*)0x08044EAC }, { 0x1948, 0, (void*)0x08044F20 }, - { 0x1949, 0, (void*)0x08044F88 }, { 0x194A, 0, (void*)0x08045004 }, { 0x194B, 0, (void*)0x08045084 }, - { 0x194C, 0, (void*)0x080450F4 }, { 0x194D, 0, (void*)0x08045174 }, { 0x1950, 0, (void*)0x080451C8 }, - { 0x1951, 0, (void*)0x08045238 }, { 0x1952, 0, (void*)0x080452A0 }, { 0x1953, 0, (void*)0x08045310 }, - { 0x1954, 0, (void*)0x08045378 }, { 0x1955, 0, (void*)0x080453E8 }, { 0x1956, 0, (void*)0x08045458 }, - { 0x1957, 0, (void*)0x080454CC }, { 0x1958, 0, (void*)0x08045540 }, { 0x1959, 0, (void*)0x080455C4 }, - { 0x195A, 0, (void*)0x0804564C }, { 0x195B, 0, (void*)0x080456AC }, { 0x195C, 0, (void*)0x08045704 }, - { 0x195D, 0, (void*)0x0804576C }, { 0x195E, 0, (void*)0x080457E8 }, { 0x195F, 0, (void*)0x08045838 }, - { 0x1960, 0, (void*)0x0804589C }, { 0x1961, 0, (void*)0x08045918 }, { 0x1962, 0, (void*)0x08045988 }, - { 0x1963, 0, (void*)0x080459E4 }, { 0x1964, 0, (void*)0x08045A24 }, { 0x1B58, 0, (void*)0x08045ACC }, - { 0x1B59, 0, (void*)0x08045ADC }, { 0x1B5A, 0, (void*)0x08045B00 }, { 0x1B5B, 0, (void*)0x08045B20 }, - { 0x1B5C, 0, (void*)0x08045B2C }, { 0x1B5D, 0, (void*)0x08045B58 }, { 0x1B5E, 0, (void*)0x08045B7C }, - { 0x1B5F, 0, (void*)0x08045BAC }, { 0x1B60, 0, (void*)0x08045BD8 }, { 0x1B61, 0, (void*)0x08045BFC }, - { 0x1B62, 0, (void*)0x08045C18 }, { 0x1B63, 0, (void*)0x08045C3C }, { 0x1B64, 0, (void*)0x08045C60 }, - { 0x1B65, 0, (void*)0x08045C90 }, { 0x1B66, 0, (void*)0x08045CC0 }, { 0x1B67, 0, (void*)0x08045CEC }, - { 0x1B6A, 0, (void*)0x08045CF8 }, { 0x1B6B, 0, (void*)0x08045D28 }, { 0x1B72, 0, (void*)0x08045D58 }, - { 0x1B73, 0, (void*)0x08045D8C }, { 0x1B74, 0, (void*)0x08045DB8 }, { 0x1B75, 0, (void*)0x08045DEC }, - { 0x1B76, 0, (void*)0x08045E1C }, { 0x1B77, 0, (void*)0x08045E48 }, { 0x1B78, 0, (void*)0x08045E54 }, - { 0x1B79, 0, (void*)0x08045E80 }, { 0x1B7A, 0, (void*)0x08045EB0 }, { 0x1B7B, 0, (void*)0x08045ED8 }, - { 0x1B7C, 0, (void*)0x08045F08 }, { 0x1B7D, 0, (void*)0x08045F34 }, { 0x1B7E, 0, (void*)0x08045F40 }, - { 0x1B7F, 0, (void*)0x08045F74 }, { 0x1B80, 0, (void*)0x08045FA8 }, { 0x1B81, 0, (void*)0x08045FD4 }, - { 0x1B89, 0, (void*)0x08045FE0 }, { 0x1B8A, 0, (void*)0x08045FF0 }, { 0x1B8B, 0, (void*)0x08046038 }, - { 0x1B8C, 0, (void*)0x08046060 }, { 0x1B8D, 0, (void*)0x08046098 }, { 0x1B8E, 0, (void*)0x080460D4 }, - { 0x1B8F, 0, (void*)0x08046110 }, { 0x1B90, 0, (void*)0x08046150 }, { 0x1B91, 0, (void*)0x0804618C }, - { 0x1B92, 0, (void*)0x080461CC }, { 0x1B93, 0, (void*)0x08046208 }, { 0x1B94, 0, (void*)0x0804622C }, - { 0x1B95, 0, (void*)0x0804626C }, { 0x1B96, 0, (void*)0x080462A8 }, { 0x1B98, 0, (void*)0x080462B4 }, - { 0x1B9E, 0, (void*)0x08046300 }, { 0x1B9F, 0, (void*)0x08046374 }, { 0x1BA0, 0, (void*)0x080463FC }, - { 0x1BA1, 0, (void*)0x08046480 }, { 0x1BA2, 0, (void*)0x08046594 }, { 0x1BA4, 0, (void*)0x080465C4 }, - { 0x1BA5, 0, (void*)0x08046654 }, { 0x1BA6, 0, (void*)0x08046684 }, { 0x1BA7, 0, (void*)0x080466D4 }, - { 0x1BA8, 0, (void*)0x08046760 }, { 0x1BAC, 0, (void*)0x080467E8 }, { 0x1BB2, 0, (void*)0x08046848 }, - { 0x1BB3, 0, (void*)0x08046888 }, { 0x1BB4, 0, (void*)0x080468C4 }, { 0x1BB5, 0, (void*)0x08046904 }, - { 0x1BB6, 0, (void*)0x08046944 }, { 0x1C00, 0, (void*)0x08046984 }, { 0x1C01, 0, (void*)0x08046A4C }, - { 0x1C02, 0, (void*)0x08046AB8 }, { 0x1C03, 0, (void*)0x08046BA8 }, { 0x1C04, 0, (void*)0x08046C10 }, - { 0x1C05, 0, (void*)0x08046D68 }, { 0x1C06, 0, (void*)0x08046E44 }, { 0x1C07, 0, (void*)0x08046EAC }, - { 0x1C08, 0, (void*)0x08046F0C }, { 0x1C09, 0, (void*)0x08046F5C }, { 0x1C0A, 0, (void*)0x08046F94 }, - { 0x1C0B, 0, (void*)0x08047014 }, { 0x1C0C, 0, (void*)0x080470D4 }, { 0x1C0D, 0, (void*)0x08047118 }, - { 0x1C0E, 0, (void*)0x08047130 }, { 0x1C0F, 0, (void*)0x08047148 }, { 0x1C10, 0, (void*)0x08047164 }, - { 0x1C11, 0, (void*)0x0804717C }, { 0x1C12, 0, (void*)0x0804719C }, { 0x1C13, 0, (void*)0x080471BC }, - { 0x1C14, 0, (void*)0x080471D4 }, { 0x1C15, 0, (void*)0x080471F0 }, { 0x1C16, 0, (void*)0x08047214 }, - { 0x1C17, 0, (void*)0x0804730C }, { 0x1C18, 0, (void*)0x0804734C }, { 0x1D00, 0, (void*)0x080473A4 }, - { 0x1D01, 0, (void*)0x08047414 }, { 0x1D02, 0, (void*)0x08047524 }, { 0x1D03, 0, (void*)0x0804758C }, - { 0x1D04, 0, (void*)0x08047644 }, { 0x1D05, 0, (void*)0x08047678 }, { 0x1D06, 0, (void*)0x080476D0 }, - { 0x1D07, 0, (void*)0x080476F8 }, { 0x1D08, 0, (void*)0x08047728 }, { 0x1D09, 0, (void*)0x08047788 }, - { 0x1D0A, 0, (void*)0x080477C0 }, { 0x1D0B, 0, (void*)0x080477F4 }, { 0x1D0C, 0, (void*)0x08047808 }, - { 0x1D0D, 0, (void*)0x08047820 }, { 0x1D11, 0, (void*)0x08047844 }, { 0x1D12, 0, (void*)0x08047890 }, - { 0x1D13, 0, (void*)0x080478D8 }, { 0x1D14, 0, (void*)0x08047920 }, { 0x1D15, 0, (void*)0x0804796C }, - { 0x1D16, 0, (void*)0x080479B4 }, { 0x1D17, 0, (void*)0x080479FC }, { 0x1F40, 0, (void*)0x08047A20 }, - { 0x1F41, 0, (void*)0x08047ABC }, { 0x1F42, 0, (void*)0x08047B20 }, { 0x1F43, 0, (void*)0x08047B94 }, - { 0x1F44, 0, (void*)0x08047BD8 }, { 0x1F45, 0, (void*)0x08047C40 }, { 0x1F46, 0, (void*)0x08047CB4 }, - { 0x1F47, 0, (void*)0x08047D1C }, { 0x1F48, 0, (void*)0x08047D88 }, { 0x1F49, 0, (void*)0x08047DA8 }, - { 0x1F4A, 0, (void*)0x08047E48 }, { 0x1F4B, 0, (void*)0x08047F30 }, { 0x1F4C, 0, (void*)0x08047F88 }, - { 0x1F4D, 0, (void*)0x08048014 }, { 0x1F4E, 0, (void*)0x080480E0 }, { 0x1F4F, 0, (void*)0x0804819C }, - { 0x1F50, 0, (void*)0x08048280 }, { 0x1F51, 0, (void*)0x080482E4 }, { 0x1F52, 0, (void*)0x0804833C }, - { 0x1F53, 0, (void*)0x080483B8 }, { 0x1F54, 0, (void*)0x08048430 }, { 0x1F55, 0, (void*)0x080484AC }, - { 0x1F56, 0, (void*)0x080484F8 }, { 0x1F5F, 0, (void*)0x0804857C }, { 0x1F60, 0, (void*)0x0804859C }, - { 0x1F61, 0, (void*)0x080485D4 }, { 0x1F62, 0, (void*)0x08048604 }, { 0x1F63, 0, (void*)0x0804862C }, - { 0x1F64, 0, (void*)0x0804866C }, { 0x1F65, 0, (void*)0x080486A4 }, { 0x1F66, 0, (void*)0x080486E0 }, - { 0x1F67, 0, (void*)0x08048708 }, { 0x1F68, 0, (void*)0x08048774 }, { 0x1F69, 0, (void*)0x080487A4 }, - { 0x1F6A, 0, (void*)0x080487E0 }, { 0x1F6B, 0, (void*)0x08048810 }, { 0x1F6C, 0, (void*)0x08048864 }, - { 0x1F6D, 0, (void*)0x08048898 }, { 0x1F6E, 0, (void*)0x08048960 }, { 0x1F6F, 0, (void*)0x08048990 }, - { 0x1F70, 0, (void*)0x080489E8 }, { 0x1F71, 0, (void*)0x08048A44 }, { 0x1F72, 0, (void*)0x08048AB8 }, - { 0x1F73, 0, (void*)0x08048AE8 }, { 0x1F74, 0, (void*)0x08048B94 }, { 0x1F75, 0, (void*)0x08048BB0 }, - { 0x1FA4, 0, (void*)0x08048BD8 }, { 0x1FA5, 0, (void*)0x08048C14 }, { 0x1FA6, 0, (void*)0x08048CF8 }, - { 0x1FA7, 0, (void*)0x08048D40 }, { 0x1FA8, 0, (void*)0x08048D88 }, { 0x1FA9, 0, (void*)0x08048DF4 }, - { 0x1FAA, 0, (void*)0x08048E68 }, { 0x1FAB, 0, (void*)0x08048EE0 }, { 0x1FAC, 0, (void*)0x08048FB4 }, - { 0x1FAD, 0, (void*)0x08049034 }, { 0x1FAE, 0, (void*)0x08049068 }, { 0x1FAF, 0, (void*)0x080491B0 }, - { 0x1FB0, 0, (void*)0x0804927C }, { 0x1FB1, 0, (void*)0x080492C8 }, { 0x1FB2, 0, (void*)0x08049318 }, - { 0x1FB3, 0, (void*)0x08049384 }, { 0x1FB4, 0, (void*)0x08049424 }, { 0x1FB5, 0, (void*)0x0804951C }, - { 0x1FB6, 0, (void*)0x08049558 }, { 0x1FB7, 0, (void*)0x08049598 }, { 0x1FB8, 0, (void*)0x080495B8 }, - { 0x1FB9, 0, (void*)0x080495D0 }, { 0x1FBA, 0, (void*)0x080495E8 }, { 0x1FBB, 0, (void*)0x08049614 }, - { 0x1FBC, 0, (void*)0x0804963C }, { 0x1FBD, 0, (void*)0x08049688 }, { 0x1FBE, 0, (void*)0x080496DC }, - { 0x1FBF, 0, (void*)0x08049758 }, { 0x1FC0, 0, (void*)0x080497BC }, { 0x1FC1, 0, (void*)0x080497E4 }, - { 0x1FC2, 0, (void*)0x0804982C }, { 0x1FC3, 0, (void*)0x080498A0 }, { 0x1FC4, 0, (void*)0x08049920 }, - { 0x1FC5, 0, (void*)0x08049940 }, { 0x1FC6, 0, (void*)0x08049A0C }, { 0x1FC7, 0, (void*)0x08049A38 }, - { 0x1FC8, 0, (void*)0x08049AA0 }, { 0x1FC9, 0, (void*)0x08049AB8 }, { 0x1FCA, 0, (void*)0x08049AF0 }, - { 0x1FCB, 0, (void*)0x08049B74 }, { 0x1FCC, 0, (void*)0x08049BD0 }, { 0x1FCD, 0, (void*)0x08049C34 }, - { 0x1FCE, 0, (void*)0x08049D14 }, { 0x1FCF, 0, (void*)0x08049D70 }, { 0x1FD0, 0, (void*)0x08049DAC }, - { 0x1FD1, 0, (void*)0x08049E08 }, { 0x1FD2, 0, (void*)0x08049E24 }, { 0x1FD3, 0, (void*)0x08049E44 }, - { 0x1FD4, 0, (void*)0x08049E88 }, { 0x1FD5, 0, (void*)0x08049EB8 }, { 0x1FD6, 0, (void*)0x08049F00 }, - { 0x1FD7, 0, (void*)0x08049F3C }, { 0x1FD8, 0, (void*)0x08049F90 }, { 0x1FD9, 0, (void*)0x08049FC4 }, - { 0x1FDA, 0, (void*)0x0804A018 }, { 0x1FDB, 0, (void*)0x0804A050 }, { 0x1FDC, 0, (void*)0x0804A0BC }, - { 0x1FDD, 0, (void*)0x0804A0F0 }, { 0x1FDE, 0, (void*)0x0804A11C }, { 0x1FDF, 0, (void*)0x0804A14C }, - { 0x1FE0, 0, (void*)0x0804A1A0 }, { 0x1FE1, 0, (void*)0x0804A1D4 }, { 0x1FE2, 0, (void*)0x0804A210 }, - { 0x1FE3, 0, (void*)0x0804A244 }, { 0x1FE4, 0, (void*)0x0804A290 }, { 0x1FE5, 0, (void*)0x0804A2C8 }, - { 0x1FE6, 0, (void*)0x0804A334 }, { 0x1FE7, 0, (void*)0x0804A36C }, { 0x1FE8, 0, (void*)0x0804A3EC }, - { 0x1FE9, 0, (void*)0x0804A420 }, { 0x1FEA, 0, (void*)0x0804A484 }, { 0x1FEB, 0, (void*)0x0804A4B8 }, - { 0x1FEC, 0, (void*)0x0804A51C }, { 0x1FED, 0, (void*)0x0804A554 }, { 0x1FEE, 0, (void*)0x0804A59C }, - { 0x1FEF, 0, (void*)0x0804A5D0 }, { 0x1FF0, 0, (void*)0x0804A620 }, { 0x1FF1, 0, (void*)0x0804A658 }, - { 0x1FF2, 0, (void*)0x0804A6C0 }, { 0x1FF3, 0, (void*)0x0804A6F4 }, { 0x1FF4, 0, (void*)0x0804A74C }, - { 0x1FF5, 0, (void*)0x0804A788 }, { 0x1FF6, 0, (void*)0x0804A800 }, { 0x1FF7, 0, (void*)0x0804A834 }, - { 0x1FF8, 0, (void*)0x0804A888 }, { 0x1FF9, 0, (void*)0x0804A8B8 }, { 0x1FFA, 0, (void*)0x0804A908 }, - { 0x1FFB, 0, (void*)0x0804A940 }, { 0x1FFC, 0, (void*)0x0804A970 }, { 0x1FFD, 0, (void*)0x0804A9A4 }, - { 0x1FFE, 0, (void*)0x0804AA00 }, { 0x1FFF, 0, (void*)0x0804AA60 }, { 0x2000, 0, (void*)0x0804AAA0 }, - { 0x2001, 0, (void*)0x0804AACC }, { 0x2002, 0, (void*)0x0804AB00 }, { 0x2003, 0, (void*)0x0804AB60 }, - { 0x2004, 0, (void*)0x0804ABA0 }, { 0x2005, 0, (void*)0x0804ACE0 }, { 0x2006, 0, (void*)0x0804ADB4 }, - { 0x2007, 0, (void*)0x0804AE8C }, { 0x2008, 0, (void*)0x0804AEE0 }, { 0x2009, 0, (void*)0x0804AEF8 }, - { 0x200A, 0, (void*)0x0804AF10 }, { 0x200B, 0, (void*)0x0804AFAC }, { 0x200C, 0, (void*)0x0804B024 }, - { 0x200D, 0, (void*)0x0804B058 }, { 0x200E, 0, (void*)0x0804B0D0 }, { 0x200F, 0, (void*)0x0804B144 }, - { 0x2010, 0, (void*)0x0804B168 }, { 0x2011, 0, (void*)0x0804B1B4 }, { 0x2012, 0, (void*)0x0804B1F8 }, - { 0x2013, 0, (void*)0x0804B260 }, { 0x2014, 0, (void*)0x0804B298 }, { 0x2015, 0, (void*)0x0804B300 }, - { 0x2016, 0, (void*)0x0804B338 }, { 0x2017, 0, (void*)0x0804B350 }, { 0x201D, 0, (void*)0x0804B3B0 }, - { 0x201E, 0, (void*)0x0804B3F8 }, { 0x201F, 0, (void*)0x0804B508 }, { 0x2020, 0, (void*)0x0804B58C }, - { 0x2021, 0, (void*)0x0804B5F8 }, { 0x2022, 0, (void*)0x0804B68C }, { 0x2023, 0, (void*)0x0804B6E4 }, - { 0x2024, 0, (void*)0x0804B6F0 }, { 0x2026, 0, (void*)0x0804B6FC }, { 0x2027, 0, (void*)0x0804B71C }, - { 0x2028, 0, (void*)0x0804B744 }, { 0x2029, 0, (void*)0x0804B758 }, { 0x202A, 0, (void*)0x0804B770 }, - { 0x202B, 0, (void*)0x0804B7C4 }, { 0x202C, 0, (void*)0x0804B81C }, { 0x202D, 0, (void*)0x0804B860 }, - { 0x202E, 0, (void*)0x0804B8A8 }, { 0x202F, 0, (void*)0x0804B908 }, { 0x2030, 0, (void*)0x0804B93C }, - { 0x2031, 0, (void*)0x0804B9B8 }, { 0x2032, 0, (void*)0x0804BA20 }, { 0x2033, 0, (void*)0x0804BA9C }, - { 0x2034, 0, (void*)0x0804BAEC }, { 0x2035, 0, (void*)0x0804BB34 }, { 0x2036, 0, (void*)0x0804BB7C }, - { 0x2037, 0, (void*)0x0804BBAC }, { 0x2038, 0, (void*)0x0804BBDC }, { 0x2039, 0, (void*)0x0804BC20 }, - { 0x203A, 0, (void*)0x0804BC98 }, { 0x203B, 0, (void*)0x0804BCF0 }, { 0x203C, 0, (void*)0x0804BD40 }, - { 0x203D, 0, (void*)0x0804BD5C }, { 0x203E, 0, (void*)0x0804BDAC }, { 0x203F, 0, (void*)0x0804BE24 }, - { 0x2040, 0, (void*)0x0804BE4C }, { 0x2041, 0, (void*)0x0804BEB8 }, { 0x2042, 0, (void*)0x0804BEEC }, - { 0x2043, 0, (void*)0x0804BF08 }, { 0x2044, 0, (void*)0x0804BF38 }, { 0x2045, 0, (void*)0x0804BF74 }, - { 0x2046, 0, (void*)0x0804BFB4 }, { 0x2047, 0, (void*)0x0804C028 }, { 0x2048, 0, (void*)0x0804C08C }, - { 0x2049, 0, (void*)0x0804C0BC }, { 0x204A, 0, (void*)0x0804C0D8 }, { 0x204B, 0, (void*)0x0804C114 }, - { 0x204C, 0, (void*)0x0804C144 }, { 0x204D, 0, (void*)0x0804C180 }, { 0x204E, 0, (void*)0x0804C204 }, - { 0x206C, 0, (void*)0x0804C264 }, { 0x206D, 0, (void*)0x0804C2A8 }, { 0x206E, 0, (void*)0x0804C2F8 }, - { 0x206F, 0, (void*)0x0804C338 }, { 0x2070, 0, (void*)0x0804C384 }, { 0x2076, 0, (void*)0x0804C390 }, - { 0x2077, 0, (void*)0x0804C3C0 }, { 0x2078, 0, (void*)0x0804C404 }, { 0x2079, 0, (void*)0x0804C480 }, - { 0x2080, 0, (void*)0x0804C4C4 }, { 0x2081, 0, (void*)0x0804C5B4 }, { 0x2082, 0, (void*)0x0804C5FC }, - { 0x2083, 0, (void*)0x0804C630 }, { 0x208A, 0, (void*)0x0804C674 }, { 0x208B, 0, (void*)0x0804C6BC }, - { 0x208C, 0, (void*)0x0804C708 }, { 0x208D, 0, (void*)0x0804C7B4 }, { 0x208E, 0, (void*)0x0804C7FC }, - { 0x2093, 0, (void*)0x0804C8A4 }, { 0x2094, 0, (void*)0x0804C8C0 }, { 0x2095, 0, (void*)0x0804C8E8 }, - { 0x20B0, 0, (void*)0x0804C920 }, { 0x20B1, 0, (void*)0x0804C984 }, { 0x20B2, 0, (void*)0x0804CA38 }, - { 0x20B3, 0, (void*)0x0804CB34 }, { 0x20B4, 0, (void*)0x0804CC18 }, { 0x20B5, 0, (void*)0x0804CD10 }, - { 0x20B6, 0, (void*)0x0804CDD4 }, { 0x20B7, 0, (void*)0x0804CE8C }, { 0x20B8, 0, (void*)0x0804CF48 }, - { 0x20B9, 0, (void*)0x0804CFA4 }, { 0x20BA, 0, (void*)0x0804D018 }, { 0x20BB, 0, (void*)0x0804D084 }, - { 0x20BC, 0, (void*)0x0804D0EC }, { 0x20BD, 0, (void*)0x0804D158 }, { 0x20BE, 0, (void*)0x0804D1C0 }, - { 0x20BF, 0, (void*)0x0804D230 }, { 0x20C0, 0, (void*)0x0804D294 }, { 0x20C1, 0, (void*)0x0804D300 }, - { 0x20C2, 0, (void*)0x0804D380 }, { 0x20C3, 0, (void*)0x0804D3F8 }, { 0x20C4, 0, (void*)0x0804D460 }, - { 0x20C5, 0, (void*)0x0804D4AC }, { 0x20C6, 0, (void*)0x0804D52C }, { 0x20C7, 0, (void*)0x0804D590 }, - { 0x20D0, 0, (void*)0x0804D5FC }, { 0x20D1, 0, (void*)0x0804D654 }, { 0x20D2, 0, (void*)0x0804D6C8 }, - { 0x20D4, 0, (void*)0x0804D6EC }, { 0x20D5, 0, (void*)0x0804D75C }, { 0x20D6, 0, (void*)0x0804D7B4 }, - { 0x20D7, 0, (void*)0x0804D834 }, { 0x20D8, 0, (void*)0x0804D8B0 }, { 0x20D9, 0, (void*)0x0804D93C }, - { 0x20DA, 0, (void*)0x0804D99C }, { 0x20DB, 0, (void*)0x0804D9FC }, { 0x20DC, 0, (void*)0x0804DA74 }, - { 0x20DD, 0, (void*)0x0804DB20 }, { 0x20DE, 0, (void*)0x0804DBB0 }, { 0x20DF, 0, (void*)0x0804DC18 }, - { 0x20E0, 0, (void*)0x0804DC90 }, { 0x20E1, 0, (void*)0x0804DCFC }, { 0x20E2, 0, (void*)0x0804DD84 }, - { 0x20E3, 0, (void*)0x0804DE0C }, { 0x20E4, 0, (void*)0x0804DEA0 }, { 0x20E5, 0, (void*)0x0804DF10 }, - { 0x20E6, 0, (void*)0x0804DF78 }, { 0x20E7, 0, (void*)0x0804DFEC }, { 0x20F3, 0, (void*)0x0804E05C }, - { 0x20F7, 0, (void*)0x0804E0C0 }, { 0x20F8, 0, (void*)0x0804E134 }, { 0x20F9, 0, (void*)0x0804E1AC }, - { 0x2103, 0, (void*)0x0804E220 }, { 0x2104, 0, (void*)0x0804E288 }, { 0x2105, 0, (void*)0x0804E2CC }, - { 0x2106, 0, (void*)0x0804E320 }, { 0x2107, 0, (void*)0x0804E364 }, { 0x2108, 0, (void*)0x0804E3BC }, - { 0x2109, 0, (void*)0x0804E408 }, { 0x210A, 0, (void*)0x0804E458 }, { 0x210B, 0, (void*)0x0804E4B0 }, - { 0x210C, 0, (void*)0x0804E4EC }, { 0x210D, 0, (void*)0x0804E52C }, { 0x210E, 0, (void*)0x0804E578 }, - { 0x210F, 0, (void*)0x0804E5D0 }, { 0x2110, 0, (void*)0x0804E618 }, { 0x2111, 0, (void*)0x0804E660 }, - { 0x2112, 0, (void*)0x0804E6BC }, { 0x2113, 0, (void*)0x0804E70C }, { 0x2114, 0, (void*)0x0804E75C }, - { 0x2115, 0, (void*)0x0804E7A8 }, { 0x2116, 0, (void*)0x0804E7F0 }, { 0x2134, 0, (void*)0x0804E83C }, - { 0x2135, 0, (void*)0x0804E880 }, { 0x2136, 0, (void*)0x0804E8CC }, { 0x2137, 0, (void*)0x0804E91C }, - { 0x2138, 0, (void*)0x0804E96C }, { 0x2139, 0, (void*)0x0804E9B4 }, { 0x213A, 0, (void*)0x0804E9FC }, - { 0x213B, 0, (void*)0x0804EA38 }, { 0x213C, 0, (void*)0x0804EA88 }, { 0x213D, 0, (void*)0x0804EAD0 }, - { 0x213E, 0, (void*)0x0804EB28 }, { 0x213F, 0, (void*)0x0804EB80 }, { 0x2140, 0, (void*)0x0804EBD0 }, - { 0x2141, 0, (void*)0x0804EC1C }, { 0x2142, 0, (void*)0x0804EC60 }, { 0x2143, 0, (void*)0x0804ECAC }, - { 0x2144, 0, (void*)0x0804ECF0 }, { 0x2145, 0, (void*)0x0804ED40 }, { 0x2146, 0, (void*)0x0804ED88 }, - { 0x2147, 0, (void*)0x0804EDDC }, { 0x2152, 0, (void*)0x0804EE34 }, { 0x2153, 0, (void*)0x0804EE78 }, - { 0x2154, 0, (void*)0x0804EECC }, { 0x2156, 0, (void*)0x0804EF1C }, { 0x2157, 0, (void*)0x0804EF64 }, - { 0x2158, 0, (void*)0x0804EFC4 }, { 0x2159, 0, (void*)0x0804F014 }, { 0x215A, 0, (void*)0x0804F05C }, - { 0x215B, 0, (void*)0x0804F0C0 }, { 0x215D, 0, (void*)0x0804F124 }, { 0x215E, 0, (void*)0x0804F178 }, - { 0x215F, 0, (void*)0x0804F184 }, { 0x2160, 0, (void*)0x0804F1D8 }, { 0x2161, 0, (void*)0x0804F234 }, - { 0x2162, 0, (void*)0x0804F298 }, { 0x2163, 0, (void*)0x0804F2A4 }, { 0x2164, 0, (void*)0x0804F2F8 }, - { 0x2165, 0, (void*)0x0804F358 }, { 0x2166, 0, (void*)0x0804F3B0 }, { 0x2167, 0, (void*)0x0804F400 }, - { 0x2168, 0, (void*)0x0804F458 }, { 0x2169, 0, (void*)0x0804F4B0 }, { 0x216A, 0, (void*)0x0804F504 }, - { 0x216B, 0, (void*)0x0804F554 }, { 0x216C, 0, (void*)0x0804F5A0 }, { 0x216D, 0, (void*)0x0804F5F8 }, - { 0x216E, 0, (void*)0x0804F658 }, { 0x216F, 0, (void*)0x0804F6B8 }, { 0x2170, 0, (void*)0x0804F710 }, - { 0x2171, 0, (void*)0x0804F764 }, { 0x2172, 0, (void*)0x0804F7BC }, { 0x2173, 0, (void*)0x0804F814 }, - { 0x2174, 0, (void*)0x0804F870 }, { 0x2198, 0, (void*)0x0804F8CC }, { 0x2199, 0, (void*)0x0804F920 }, - { 0x219A, 0, (void*)0x0804F978 }, { 0x219B, 0, (void*)0x0804F9D0 }, { 0x219C, 0, (void*)0x0804FA2C }, - { 0x219D, 0, (void*)0x0804FA80 }, { 0x219E, 0, (void*)0x0804FAD0 }, { 0x219F, 0, (void*)0x0804FB28 }, - { 0x21A0, 0, (void*)0x0804FB80 }, { 0x21A1, 0, (void*)0x0804FBD8 }, { 0x21A2, 0, (void*)0x0804FC30 }, - { 0x21A3, 0, (void*)0x0804FC88 }, { 0x21A4, 0, (void*)0x0804FCD8 }, { 0x21A5, 0, (void*)0x0804FD30 }, - { 0x21A6, 0, (void*)0x0804FD84 }, { 0x21A7, 0, (void*)0x0804FDDC }, { 0x21A8, 0, (void*)0x0804FE34 }, - { 0x21A9, 0, (void*)0x0804FE88 }, { 0x21AA, 0, (void*)0x0804FED8 }, { 0x21AB, 0, (void*)0x0804FF30 }, - { 0x21AC, 0, (void*)0x0804FF84 }, { 0x21AD, 0, (void*)0x0804FFDC }, { 0x21AE, 0, (void*)0x08050038 }, - { 0x21AF, 0, (void*)0x08050094 }, { 0x21B0, 0, (void*)0x080500EC }, { 0x21B1, 0, (void*)0x08050140 }, - { 0x21B2, 0, (void*)0x08050198 }, { 0x21B3, 0, (void*)0x080501F4 }, { 0x21B4, 0, (void*)0x0805024C }, - { 0x21B5, 0, (void*)0x080502A4 }, { 0x21B6, 0, (void*)0x080502F8 }, { 0x21B7, 0, (void*)0x08050350 }, - { 0x21B8, 0, (void*)0x080503A8 }, { 0x21B9, 0, (void*)0x08050400 }, { 0x21BA, 0, (void*)0x0805045C }, - { 0x21CA, 0, (void*)0x080504AC }, { 0x21CB, 0, (void*)0x080504EC }, { 0x21CC, 0, (void*)0x08050528 }, - { 0x21CD, 0, (void*)0x08050580 }, { 0x21CE, 0, (void*)0x080505C8 }, { 0x21CF, 0, (void*)0x08050604 }, - { 0x21D0, 0, (void*)0x08050648 }, { 0x21D1, 0, (void*)0x08050680 }, { 0x21D2, 0, (void*)0x080506CC }, - { 0x21D3, 0, (void*)0x08050700 }, { 0x21D4, 0, (void*)0x0805075C }, { 0x21D5, 0, (void*)0x080507A8 }, - { 0x21D6, 0, (void*)0x080507F0 }, { 0x21D7, 0, (void*)0x08050840 }, { 0x21D8, 0, (void*)0x08050884 }, - { 0x21D9, 0, (void*)0x080508CC }, { 0x21DA, 0, (void*)0x08050910 }, { 0x21DB, 0, (void*)0x0805094C }, - { 0x21DC, 0, (void*)0x08050998 }, { 0x21DD, 0, (void*)0x080509D0 }, { 0x21FC, 0, (void*)0x08050A20 }, - { 0x21FD, 0, (void*)0x08050A50 }, { 0x21FE, 0, (void*)0x08050A74 }, { 0x21FF, 0, (void*)0x08050ABC }, - { 0x2200, 0, (void*)0x08050ADC }, { 0x2201, 0, (void*)0x08050AF0 }, { 0x2202, 0, (void*)0x08050B0C }, - { 0x2203, 0, (void*)0x08050B44 }, { 0x2204, 0, (void*)0x08050B74 }, { 0x2205, 0, (void*)0x08050B98 }, - { 0x2206, 0, (void*)0x08050BCC }, { 0x2207, 0, (void*)0x08050BF8 }, { 0x2208, 0, (void*)0x08050C48 }, - { 0x2209, 0, (void*)0x08050CB0 }, { 0x220A, 0, (void*)0x08050CC4 }, { 0x220B, 0, (void*)0x08050CE0 }, - { 0x220C, 0, (void*)0x08050D10 }, { 0x220D, 0, (void*)0x08050D44 }, { 0x220E, 0, (void*)0x08050D98 }, - { 0x220F, 0, (void*)0x08050DE0 }, { 0x2210, 0, (void*)0x08050E24 }, { 0x2211, 0, (void*)0x08050E44 }, - { 0x2212, 0, (void*)0x08050E78 }, { 0x2213, 0, (void*)0x08050E8C }, { 0x2214, 0, (void*)0x08050ECC }, - { 0x2215, 0, (void*)0x08050F14 }, { 0x2216, 0, (void*)0x08050F44 }, { 0x2217, 0, (void*)0x08050F6C }, - { 0x2218, 0, (void*)0x08050FB4 }, { 0x2219, 0, (void*)0x08050FDC }, { 0x221A, 0, (void*)0x0805100C }, - { 0x221B, 0, (void*)0x08051034 }, { 0x221C, 0, (void*)0x08051054 }, { 0x221D, 0, (void*)0x08051080 }, - { 0x221E, 0, (void*)0x080510A0 }, { 0x221F, 0, (void*)0x080510DC }, { 0x2220, 0, (void*)0x08051104 }, - { 0x2221, 0, (void*)0x08051138 }, { 0x2222, 0, (void*)0x0805114C }, { 0x2223, 0, (void*)0x0805117C }, - { 0x2224, 0, (void*)0x080511A8 }, { 0x2225, 0, (void*)0x080511E4 }, { 0x2226, 0, (void*)0x0805122C }, - { 0x2227, 0, (void*)0x08051258 }, { 0x2228, 0, (void*)0x080512AC }, { 0x2229, 0, (void*)0x080512D8 }, - { 0x222A, 0, (void*)0x08051338 }, { 0x222B, 0, (void*)0x08051374 }, { 0x2328, 0, (void*)0x080513C4 }, - { 0x2329, 0, (void*)0x08051410 }, { 0x232A, 0, (void*)0x08051454 }, { 0x232B, 0, (void*)0x080514B4 }, - { 0x232C, 0, (void*)0x08051514 }, { 0x232D, 0, (void*)0x08051564 }, { 0x232E, 0, (void*)0x080515A8 }, - { 0x232F, 0, (void*)0x080515E4 }, { 0x2330, 0, (void*)0x08051630 }, { 0x2331, 0, (void*)0x08051680 }, - { 0x2332, 0, (void*)0x08051700 }, { 0x2333, 0, (void*)0x08051750 }, { 0x2334, 0, (void*)0x080517AC }, - { 0x2335, 0, (void*)0x08051814 }, { 0x2336, 0, (void*)0x08051868 }, { 0x2337, 0, (void*)0x080518C8 }, - { 0x2338, 0, (void*)0x08051914 }, { 0x2339, 0, (void*)0x08051948 }, { 0x233A, 0, (void*)0x080519A4 }, - { 0x233B, 0, (void*)0x080519D8 }, { 0x233C, 0, (void*)0x08051A10 }, { 0x233D, 0, (void*)0x08051A70 }, - { 0x233E, 0, (void*)0x08051AA4 }, { 0x233F, 0, (void*)0x08051ADC }, { 0x2340, 0, (void*)0x08051B10 }, - { 0x2341, 0, (void*)0x08051B54 }, { 0x2342, 0, (void*)0x08051BC8 }, { 0x2343, 0, (void*)0x08051C38 }, - { 0x2344, 0, (void*)0x08051C70 }, { 0x2345, 0, (void*)0x08051CC0 }, { 0x2346, 0, (void*)0x08051CFC }, - { 0x2347, 0, (void*)0x08051D24 }, { 0x2348, 0, (void*)0x08051DA4 }, { 0x2349, 0, (void*)0x08051DE4 }, - { 0x234A, 0, (void*)0x08051E44 }, { 0x234B, 0, (void*)0x08051E84 }, { 0x234C, 0, (void*)0x08051EA4 }, - { 0x234D, 0, (void*)0x08051EC4 }, { 0x234E, 0, (void*)0x08051F04 }, { 0x234F, 0, (void*)0x08051F30 }, - { 0x2350, 0, (void*)0x08051F48 }, { 0x2351, 0, (void*)0x08051F7C }, { 0x2352, 0, (void*)0x08051FA8 }, - { 0x2353, 0, (void*)0x08051FC0 }, { 0x2354, 0, (void*)0x08051FE4 }, { 0x2355, 0, (void*)0x08052004 }, - { 0x2356, 0, (void*)0x08052020 }, { 0x2357, 0, (void*)0x08052048 }, { 0x2358, 0, (void*)0x080520AC }, - { 0x2359, 0, (void*)0x080520DC }, { 0x235A, 0, (void*)0x08052104 }, { 0x235B, 0, (void*)0x08052138 }, - { 0x235C, 0, (void*)0x0805215C }, { 0x235D, 0, (void*)0x08052188 }, { 0x235E, 0, (void*)0x080522B4 }, - { 0x235F, 0, (void*)0x080522DC }, { 0x2360, 0, (void*)0x08052334 }, { 0x2361, 0, (void*)0x080523A8 }, - { 0x2362, 0, (void*)0x08052400 }, { 0x2363, 0, (void*)0x08052450 }, { 0x2364, 0, (void*)0x0805250C }, - { 0x2365, 0, (void*)0x08052644 }, { 0x2366, 0, (void*)0x080526C0 }, { 0x2367, 0, (void*)0x08052718 }, - { 0x2368, 0, (void*)0x080527E4 }, { 0x2369, 0, (void*)0x080528E0 }, { 0x236A, 0, (void*)0x08052930 }, - { 0x236B, 0, (void*)0x08052A04 }, { 0x236C, 0, (void*)0x08052A40 }, { 0x236D, 0, (void*)0x08052A8C }, - { 0x236E, 0, (void*)0x08052ABC }, { 0x236F, 0, (void*)0x08052AD8 }, { 0x2370, 0, (void*)0x08052B34 }, - { 0x2371, 0, (void*)0x08052B64 }, { 0x2372, 0, (void*)0x08052BE0 }, { 0x2373, 0, (void*)0x08052BF8 }, - { 0x2374, 0, (void*)0x08052C3C }, { 0x2375, 0, (void*)0x08052C80 }, { 0x2376, 0, (void*)0x08052CE4 }, - { 0x2377, 0, (void*)0x08052D08 }, { 0x2378, 0, (void*)0x08052D54 }, { 0x2710, 0, (void*)0x08052D8C }, - { 0x2711, 0, (void*)0x08052E54 }, { 0x2712, 0, (void*)0x08052EA4 }, { 0x2713, 0, (void*)0x08053008 }, - { 0x2714, 0, (void*)0x0805305C }, { 0x2715, 0, (void*)0x080531A0 }, { 0x2716, 0, (void*)0x08053220 }, - { 0x2717, 0, (void*)0x08053284 }, { 0x2718, 0, (void*)0x080532BC }, { 0x2719, 0, (void*)0x08053300 }, - { 0x271A, 0, (void*)0x0805332C }, { 0x271B, 0, (void*)0x08053424 }, { 0x271C, 0, (void*)0x080534AC }, - { 0x271D, 0, (void*)0x08053524 }, { 0x271E, 0, (void*)0x0805358C }, { 0x271F, 0, (void*)0x08053608 }, - { 0x2720, 0, (void*)0x0805367C }, { 0x2721, 0, (void*)0x08053718 }, { 0x2722, 0, (void*)0x0805374C }, - { 0x2723, 0, (void*)0x080537A8 }, { 0x2724, 0, (void*)0x080537F4 }, { 0x2725, 0, (void*)0x08053850 }, - { 0x2726, 0, (void*)0x080538A8 }, { 0x2727, 0, (void*)0x08053914 }, { 0x2728, 0, (void*)0x08053974 }, - { 0x2729, 0, (void*)0x08053A34 }, { 0x272A, 0, (void*)0x08053A4C }, { 0x272B, 0, (void*)0x08053A90 }, - { 0x272C, 0, (void*)0x08053AB0 }, { 0x272D, 0, (void*)0x08053AF4 }, { 0x272E, 0, (void*)0x08053B3C }, - { 0x272F, 0, (void*)0x08053B9C }, { 0x2730, 0, (void*)0x08053BCC }, { 0x2731, 0, (void*)0x08053C04 }, - { 0x2732, 0, (void*)0x08053C70 }, { 0x2733, 0, (void*)0x08053CD8 }, { 0x2734, 0, (void*)0x08053D4C }, - { 0x2735, 0, (void*)0x08053DD4 }, { 0x2736, 0, (void*)0x08053E48 }, { 0x2737, 0, (void*)0x08053EA8 }, - { 0x2738, 0, (void*)0x08053F9C }, { 0x2739, 0, (void*)0x08054038 }, { 0x273A, 0, (void*)0x080540A0 }, - { 0x273B, 0, (void*)0x0805411C }, { 0x273C, 0, (void*)0x08054188 }, { 0x273D, 0, (void*)0x080541D0 }, - { 0x273E, 0, (void*)0x08054278 }, { 0x273F, 0, (void*)0x080542A0 }, { 0x2740, 0, (void*)0x0805432C }, - { 0x2741, 0, (void*)0x080543CC }, { 0x2742, 0, (void*)0x08054478 }, { 0x2743, 0, (void*)0x080544F8 }, - { 0x2744, 0, (void*)0x08054580 }, { 0x2745, 0, (void*)0x08054630 }, { 0x2746, 0, (void*)0x08054674 }, - { 0x2747, 0, (void*)0x080546C4 }, { 0x2748, 0, (void*)0x08054784 }, { 0x2749, 0, (void*)0x080547EC }, - { 0x274A, 0, (void*)0x0805483C }, { 0x274B, 0, (void*)0x0805489C }, { 0x274C, 0, (void*)0x08054924 }, - { 0x274D, 0, (void*)0x0805494C }, { 0x274E, 0, (void*)0x080549E0 }, { 0x274F, 0, (void*)0x08054A90 }, - { 0x2774, 0, (void*)0x08054B24 }, { 0x2775, 0, (void*)0x08054B7C }, { 0x2776, 0, (void*)0x08054C30 }, - { 0x2777, 0, (void*)0x08054C3C }, { 0x2778, 0, (void*)0x08054CD0 }, { 0x2779, 0, (void*)0x08054CDC }, - { 0x277A, 0, (void*)0x08054D00 }, { 0x277B, 0, (void*)0x08054DA4 }, { 0x277C, 0, (void*)0x08054EC8 }, - { 0x277D, 0, (void*)0x08054F54 }, { 0x277E, 0, (void*)0x08054FA0 }, { 0x277F, 0, (void*)0x08055004 }, - { 0x2780, 0, (void*)0x0805503C }, { 0x2781, 0, (void*)0x080550B0 }, { 0x2782, 0, (void*)0x08055110 }, - { 0x2783, 0, (void*)0x08055138 }, { 0x2784, 0, (void*)0x08055160 }, { 0x2785, 0, (void*)0x08055194 }, - { 0x2786, 0, (void*)0x080551E0 }, { 0x2787, 0, (void*)0x08055224 }, { 0x2788, 0, (void*)0x08055264 }, - { 0x2789, 0, (void*)0x080552A8 }, { 0x278A, 0, (void*)0x080552E8 }, { 0x278B, 0, (void*)0x08055310 }, - { 0x278C, 0, (void*)0x0805535C }, { 0x278D, 0, (void*)0x080553E0 }, { 0x278E, 0, (void*)0x08055424 }, - { 0x278F, 0, (void*)0x08055448 }, { 0x2790, 0, (void*)0x08055470 }, { 0x2791, 0, (void*)0x080554F0 }, - { 0x2792, 0, (void*)0x08055510 }, { 0x2793, 0, (void*)0x08055534 }, { 0x2794, 0, (void*)0x080555BC }, - { 0x2795, 0, (void*)0x080555FC }, { 0x2796, 0, (void*)0x0805565C }, { 0x2797, 0, (void*)0x08055688 }, - { 0x2798, 0, (void*)0x080556CC }, { 0x2799, 0, (void*)0x08055700 }, { 0x279A, 0, (void*)0x0805573C }, - { 0x279B, 0, (void*)0x0805576C }, { 0x279C, 0, (void*)0x080557B0 }, { 0x279D, 0, (void*)0x08055804 }, - { 0x279E, 0, (void*)0x08055858 }, { 0x279F, 0, (void*)0x080558DC }, { 0x27A0, 0, (void*)0x0805591C }, - { 0x27A1, 0, (void*)0x08055984 }, { 0x27A2, 0, (void*)0x080559C0 }, { 0x27A3, 0, (void*)0x08055A10 }, - { 0x27A4, 0, (void*)0x08055A38 }, { 0x27A5, 0, (void*)0x08055AB0 }, { 0x27A6, 0, (void*)0x08055AE8 }, - { 0x27A7, 0, (void*)0x08055B1C }, { 0x27A8, 0, (void*)0x08055B60 }, { 0x27A9, 0, (void*)0x08055BA8 }, - { 0x27AA, 0, (void*)0x08055BC0 }, { 0x27AB, 0, (void*)0x08055C10 }, { 0x27AC, 0, (void*)0x08055C34 }, - { 0x27AD, 0, (void*)0x08055CAC }, { 0x27AE, 0, (void*)0x08055CC4 }, { 0x27D8, 0, (void*)0x08055D0C }, - { 0x27D9, 0, (void*)0x08055D50 }, { 0x27DA, 0, (void*)0x08055D94 }, { 0x27DB, 0, (void*)0x08055DCC }, - { 0x27DC, 0, (void*)0x08055E10 }, { 0x27DD, 0, (void*)0x08055E50 }, { 0x27DE, 0, (void*)0x08055ED0 }, - { 0x27DF, 0, (void*)0x08055F14 }, { 0x27E0, 0, (void*)0x08055F70 }, { 0x27E1, 0, (void*)0x08056000 }, - { 0x27E2, 0, (void*)0x0805609C }, { 0x27E3, 0, (void*)0x080560DC }, { 0x27E4, 0, (void*)0x080560F8 }, - { 0x27E5, 0, (void*)0x08056128 }, { 0x27E6, 0, (void*)0x08056170 }, { 0x27E7, 0, (void*)0x08056220 }, - { 0x27E8, 0, (void*)0x0805627C }, { 0x27E9, 0, (void*)0x080562D8 }, { 0x27EA, 0, (void*)0x08056334 }, - { 0x27EB, 0, (void*)0x0805635C }, { 0x27EC, 0, (void*)0x080563B0 }, { 0x27ED, 0, (void*)0x080563D8 }, - { 0x27EE, 0, (void*)0x0805643C }, { 0x27EF, 0, (void*)0x08056468 }, { 0x27F0, 0, (void*)0x08056488 }, - { 0x27F1, 0, (void*)0x080564AC }, { 0x27F2, 0, (void*)0x080564F4 }, { 0x27F3, 0, (void*)0x0805653C }, - { 0x27F4, 0, (void*)0x08056570 }, { 0x27F5, 0, (void*)0x0805662C }, { 0x27F6, 0, (void*)0x0805668C }, - { 0x27F7, 0, (void*)0x080566B0 }, { 0x27F8, 0, (void*)0x080566E4 }, { 0x27F9, 0, (void*)0x08056708 }, - { 0x27FA, 0, (void*)0x08056734 }, { 0x283C, 0, (void*)0x0805678C }, { 0x283D, 0, (void*)0x080567C4 }, - { 0x2841, 0, (void*)0x080567FC }, { 0x2842, 0, (void*)0x08056840 }, { 0x2843, 0, (void*)0x08056878 }, - { 0x2844, 0, (void*)0x080568E0 }, { 0x2845, 0, (void*)0x0805696C }, { 0x2846, 0, (void*)0x080569BC }, - { 0x2847, 0, (void*)0x08056A18 }, { 0x2848, 0, (void*)0x08056A54 }, { 0x2849, 0, (void*)0x08056AB0 }, - { 0x284A, 0, (void*)0x08056AF4 }, { 0x284B, 0, (void*)0x08056B38 }, { 0x284C, 0, (void*)0x08056B88 }, - { 0x284D, 0, (void*)0x08056BCC }, { 0x284E, 0, (void*)0x08056C2C }, { 0x284F, 0, (void*)0x08056C7C }, - { 0x2850, 0, (void*)0x08056CA8 }, { 0x2851, 0, (void*)0x08056CF8 }, { 0x2852, 0, (void*)0x08056D24 }, - { 0x2853, 0, (void*)0x08056D68 }, { 0x2854, 0, (void*)0x08056DC0 }, { 0x2855, 0, (void*)0x08056E04 }, - { 0x2856, 0, (void*)0x08056E50 }, { 0x2857, 0, (void*)0x08056E98 }, { 0x2858, 0, (void*)0x08056EFC }, - { 0x2859, 0, (void*)0x08056F44 }, { 0x285A, 0, (void*)0x08056FA8 }, { 0x285B, 0, (void*)0x08056FE8 }, - { 0x285C, 0, (void*)0x08057014 }, { 0x285D, 0, (void*)0x0805705C }, { 0x285E, 0, (void*)0x08057088 }, - { 0x285F, 0, (void*)0x080570C8 }, { 0x2860, 0, (void*)0x080570FC }, { 0x2861, 0, (void*)0x08057114 }, - { 0x2862, 0, (void*)0x08057174 }, { 0x2863, 0, (void*)0x080571C0 }, { 0x2864, 0, (void*)0x0805722C }, - { 0x2865, 0, (void*)0x08057278 }, { 0x2866, 0, (void*)0x080572E4 }, { 0x2867, 0, (void*)0x08057328 }, - { 0x2868, 0, (void*)0x08057358 }, { 0x2869, 0, (void*)0x080573A4 }, { 0x286A, 0, (void*)0x08057410 }, - { 0x286B, 0, (void*)0x08057454 }, { 0x286C, 0, (void*)0x08057484 }, { 0x286D, 0, (void*)0x080574D0 }, - { 0x286E, 0, (void*)0x080574F8 }, { 0x286F, 0, (void*)0x0805753C }, { 0x2870, 0, (void*)0x080575A8 }, - { 0x2871, 0, (void*)0x080575E4 }, { 0x2872, 0, (void*)0x08057628 }, { 0x2873, 0, (void*)0x0805765C }, - { 0x2874, 0, (void*)0x080576B4 }, { 0x2875, 0, (void*)0x080576D0 }, { 0x2876, 0, (void*)0x08057728 }, - { 0x2877, 0, (void*)0x0805777C }, { 0x2878, 0, (void*)0x080577D4 }, { 0x2879, 0, (void*)0x08057828 }, - { 0x287A, 0, (void*)0x08057890 }, { 0x287B, 0, (void*)0x08057900 }, { 0x287C, 0, (void*)0x08057968 }, - { 0x287D, 0, (void*)0x080579B8 }, { 0x287E, 0, (void*)0x080579E8 }, { 0x287F, 0, (void*)0x08057A5C }, - { 0x2880, 0, (void*)0x08057AA8 }, { 0x2881, 0, (void*)0x08057B24 }, { 0x2882, 0, (void*)0x08057B5C }, - { 0x2883, 0, (void*)0x08057B94 }, { 0x2884, 0, (void*)0x08057BC8 }, { 0x2885, 0, (void*)0x08057BE0 }, - { 0x2886, 0, (void*)0x08057BF8 }, { 0x2887, 0, (void*)0x08057C24 }, { 0x2888, 0, (void*)0x08057C5C }, - { 0x2889, 0, (void*)0x08057C88 }, { 0x288A, 0, (void*)0x08057CB4 }, { 0x288B, 0, (void*)0x08057CD4 }, - { 0x28A0, 0, (void*)0x08057CF0 }, { 0x28A1, 0, (void*)0x08057D20 }, { 0x28A2, 0, (void*)0x08057D5C }, - { 0x28A3, 0, (void*)0x08057D94 }, { 0x28A4, 0, (void*)0x08057E80 }, { 0x28A5, 0, (void*)0x08057F64 }, - { 0x28A6, 0, (void*)0x08057FA8 }, { 0x28A7, 0, (void*)0x08058080 }, { 0x28A8, 0, (void*)0x080580B4 }, - { 0x28A9, 0, (void*)0x080580F4 }, { 0x28AA, 0, (void*)0x08058130 }, { 0x28AB, 0, (void*)0x08058160 }, - { 0x28AC, 0, (void*)0x080581EC }, { 0x28AD, 0, (void*)0x080582C0 }, { 0x28AF, 0, (void*)0x080582DC }, - { 0x28B0, 0, (void*)0x080582F8 }, { 0x28B1, 0, (void*)0x08058340 }, { 0x28B2, 0, (void*)0x080583A8 }, - { 0x28B3, 0, (void*)0x08058400 }, { 0x28B4, 0, (void*)0x08058488 }, { 0x28B5, 0, (void*)0x080584E8 }, - { 0x28B6, 0, (void*)0x08058524 }, { 0x28B7, 0, (void*)0x08058594 }, { 0x28B8, 0, (void*)0x080585F4 }, - { 0x28B9, 0, (void*)0x08058618 }, { 0x28BA, 0, (void*)0x0805864C }, { 0x28BB, 0, (void*)0x08058688 }, - { 0x28BC, 0, (void*)0x080586B8 }, { 0x28BD, 0, (void*)0x080586F8 }, { 0x28BE, 0, (void*)0x0805871C }, - { 0x28BF, 0, (void*)0x08058760 }, { 0x28C0, 0, (void*)0x0805878C }, { 0x28C1, 0, (void*)0x080587B4 }, - { 0x28C2, 0, (void*)0x0805881C }, { 0x28C3, 0, (void*)0x08058880 }, { 0x28C4, 0, (void*)0x080589EC }, - { 0x28C5, 0, (void*)0x08058A60 }, { 0x28C6, 0, (void*)0x08058A78 }, { 0x28C7, 0, (void*)0x08058AC0 }, - { 0x28C8, 0, (void*)0x08058AF4 }, { 0x28C9, 0, (void*)0x08058B54 }, { 0x28CA, 0, (void*)0x08058B9C }, - { 0x28CB, 0, (void*)0x08058BD4 }, { 0x28CC, 0, (void*)0x08058C24 }, { 0x28CD, 0, (void*)0x08058C58 }, - { 0x28CE, 0, (void*)0x08058C6C }, { 0x28CF, 0, (void*)0x08058C88 }, { 0x28D0, 0, (void*)0x08058CCC }, - { 0x28D1, 0, (void*)0x08058D1C }, { 0x28D2, 0, (void*)0x08058D4C }, { 0x28D3, 0, (void*)0x08058DA0 }, - { 0x28D4, 0, (void*)0x08058DF0 }, { 0x28D5, 0, (void*)0x08058E4C }, { 0x28D6, 0, (void*)0x08058EE8 }, - { 0x28D7, 0, (void*)0x08058F10 }, { 0x28D8, 0, (void*)0x08058F60 }, { 0x28D9, 0, (void*)0x0805901C }, - { 0x28DA, 0, (void*)0x08059030 }, { 0x28DB, 0, (void*)0x08059154 }, { 0x28DC, 0, (void*)0x08059184 }, - { 0x28DE, 0, (void*)0x080591A8 }, { 0x28DF, 0, (void*)0x080591E4 }, { 0x28E0, 0, (void*)0x08059220 }, - { 0x28E1, 0, (void*)0x08059260 }, { 0x28E2, 0, (void*)0x080592C8 }, { 0x28E3, 0, (void*)0x0805931C }, - { 0x28E4, 0, (void*)0x08059378 }, { 0x28E5, 0, (void*)0x080593A4 }, { 0x28E6, 0, (void*)0x080593B8 }, - { 0x28E7, 0, (void*)0x080593FC }, { 0x28E8, 0, (void*)0x08059420 }, { 0x28E9, 0, (void*)0x0805945C }, - { 0x28EA, 0, (void*)0x08059480 }, { 0x28EB, 0, (void*)0x080594D4 }, { 0x28EC, 0, (void*)0x08059564 }, - { 0x28ED, 0, (void*)0x080595B8 }, { 0x28EE, 0, (void*)0x080595F8 }, { 0x28EF, 0, (void*)0x08059640 }, - { 0x28F0, 0, (void*)0x080596F8 }, { 0x28F1, 0, (void*)0x08059754 }, { 0x28F2, 0, (void*)0x080597D4 }, - { 0x28F3, 0, (void*)0x08059814 }, { 0x28F4, 0, (void*)0x080599B0 }, { 0x28F5, 0, (void*)0x080599F8 }, - { 0x28F6, 0, (void*)0x08059AC0 }, { 0x28F7, 0, (void*)0x08059AEC }, { 0x28F8, 0, (void*)0x08059B70 }, - { 0x28F9, 0, (void*)0x08059BDC }, { 0x28FA, 0, (void*)0x08059C00 }, { 0x28FB, 0, (void*)0x08059C60 }, - { 0x28FC, 0, (void*)0x08059CBC }, { 0x28FD, 0, (void*)0x08059DA0 }, { 0x28FE, 0, (void*)0x08059DB0 }, - { 0x28FF, 0, (void*)0x08059E2C }, { 0x2900, 0, (void*)0x08059EC8 }, { 0x2901, 0, (void*)0x08059EF4 }, - { 0x2902, 0, (void*)0x08059F70 }, { 0x2903, 0, (void*)0x08059FD0 }, { 0x2904, 0, (void*)0x0805A04C }, - { 0x2905, 0, (void*)0x0805A24C }, { 0x2906, 0, (void*)0x0805A4F8 }, { 0x2907, 0, (void*)0x0805A584 }, - { 0x2908, 0, (void*)0x0805A5C0 }, { 0x2909, 0, (void*)0x0805A60C }, { 0x290A, 0, (void*)0x0805A640 }, - { 0x290B, 0, (void*)0x0805A6C8 }, { 0x290C, 0, (void*)0x0805A9C0 }, { 0x290D, 0, (void*)0x0805AD84 }, - { 0x290E, 0, (void*)0x0805ADF8 }, { 0x290F, 0, (void*)0x0805AE40 }, { 0x2910, 0, (void*)0x0805AE74 }, - { 0x2911, 0, (void*)0x0805AF50 }, { 0x2912, 0, (void*)0x0805AFCC }, { 0x2913, 0, (void*)0x0805B044 }, - { 0x2914, 0, (void*)0x0805B104 }, { 0x2915, 0, (void*)0x0805B1F8 }, { 0x2916, 0, (void*)0x0805B224 }, - { 0x2917, 0, (void*)0x0805B244 }, { 0x2918, 0, (void*)0x0805B2A0 }, { 0x2919, 0, (void*)0x0805B2D0 }, - { 0x291A, 0, (void*)0x0805B314 }, { 0x291B, 0, (void*)0x0805B354 }, { 0x291C, 0, (void*)0x0805B3B0 }, - { 0x291D, 0, (void*)0x0805B400 }, { 0x291E, 0, (void*)0x0805B454 }, { 0x291F, 0, (void*)0x0805B494 }, - { 0x2920, 0, (void*)0x0805B4EC }, { 0x2921, 0, (void*)0x0805B538 }, { 0x2922, 0, (void*)0x0805B58C }, - { 0x2923, 0, (void*)0x0805B600 }, { 0x2924, 0, (void*)0x0805B65C }, { 0x2925, 0, (void*)0x0805B738 }, - { 0x2926, 0, (void*)0x0805B770 }, { 0x2927, 0, (void*)0x0805B794 }, { 0x2928, 0, (void*)0x0805B7C8 }, - { 0x2929, 0, (void*)0x0805B7EC }, { 0x292A, 0, (void*)0x0805B814 }, { 0x292B, 0, (void*)0x0805B8C0 }, - { 0x292C, 0, (void*)0x0805B994 }, { 0x292D, 0, (void*)0x0805BA44 }, { 0x292E, 0, (void*)0x0805BB14 }, - { 0x292F, 0, (void*)0x0805BB74 }, { 0x2930, 0, (void*)0x0805BBEC }, { 0x2931, 0, (void*)0x0805BC40 }, - { 0x2932, 0, (void*)0x0805BCBC }, { 0x2933, 0, (void*)0x0805BD3C }, { 0x2934, 0, (void*)0x0805BDA4 }, - { 0x2935, 0, (void*)0x0805BDE0 }, { 0x2936, 0, (void*)0x0805BE20 }, { 0x2937, 0, (void*)0x0805BE90 }, - { 0x2938, 0, (void*)0x0805BEE8 }, { 0x2939, 0, (void*)0x0805BF5C }, { 0x293A, 0, (void*)0x0805BF80 }, - { 0x293B, 0, (void*)0x0805BFE4 }, { 0x293C, 0, (void*)0x0805C00C }, { 0x293D, 0, (void*)0x0805C094 }, - { 0x293E, 0, (void*)0x0805C0EC }, { 0x293F, 0, (void*)0x0805C168 }, { 0x2940, 0, (void*)0x0805C1EC }, - { 0x2941, 0, (void*)0x0805C258 }, { 0x2942, 0, (void*)0x0805C2DC }, { 0x2943, 0, (void*)0x0805C350 }, - { 0x2944, 0, (void*)0x0805C3B8 }, { 0x2945, 0, (void*)0x0805C3F8 }, { 0x2946, 0, (void*)0x0805C44C }, - { 0x2947, 0, (void*)0x0805C470 }, { 0x2948, 0, (void*)0x0805C4F0 }, { 0x2949, 0, (void*)0x0805C518 }, - { 0x294A, 0, (void*)0x0805C534 }, { 0x294B, 0, (void*)0x0805C54C }, { 0x294C, 0, (void*)0x0805C570 }, - { 0x294D, 0, (void*)0x0805C5A8 }, { 0x294E, 0, (void*)0x0805C680 }, { 0x294F, 0, (void*)0x0805C740 }, - { 0x2950, 0, (void*)0x0805C794 }, { 0x2951, 0, (void*)0x0805C7F4 }, { 0x2952, 0, (void*)0x0805C854 }, - { 0x2953, 0, (void*)0x0805C914 }, { 0x2954, 0, (void*)0x0805C940 }, { 0x2955, 0, (void*)0x0805C980 }, - { 0x2956, 0, (void*)0x0805C9DC }, { 0x2957, 0, (void*)0x0805CA08 }, { 0x2958, 0, (void*)0x0805CA2C }, - { 0x2959, 0, (void*)0x0805CA48 }, { 0x295A, 0, (void*)0x0805CA6C }, { 0x295B, 0, (void*)0x0805CAB4 }, - { 0x295C, 0, (void*)0x0805CB08 }, { 0x295D, 0, (void*)0x0805CB24 }, { 0x295E, 0, (void*)0x0805CB44 }, - { 0x295F, 0, (void*)0x0805CB60 }, { 0x2960, 0, (void*)0x0805CC3C }, { 0x2961, 0, (void*)0x0805CD14 }, - { 0x2962, 0, (void*)0x0805CD3C }, { 0x2968, 0, (void*)0x0805CE60 }, { 0x2969, 0, (void*)0x0805CE78 }, - { 0x296A, 0, (void*)0x0805CEF4 }, { 0x296B, 0, (void*)0x0805CF24 }, { 0x296C, 0, (void*)0x0805CF64 }, - { 0x296D, 0, (void*)0x0805CF9C }, { 0x296E, 0, (void*)0x0805CFB4 }, { 0x296F, 0, (void*)0x0805D018 }, - { 0x2970, 0, (void*)0x0805D08C }, { 0x2971, 0, (void*)0x0805D17C }, { 0x2972, 0, (void*)0x0805D1C4 }, - { 0x2973, 0, (void*)0x0805D234 }, { 0x2974, 0, (void*)0x0805D258 }, { 0x2975, 0, (void*)0x0805D2E4 }, - { 0x2976, 0, (void*)0x0805D314 }, { 0x2977, 0, (void*)0x0805D358 }, { 0x2978, 0, (void*)0x0805D3DC }, - { 0x2979, 0, (void*)0x0805D414 }, { 0x297A, 0, (void*)0x0805D458 }, { 0x29CC, 0, (void*)0x0805D4A8 }, - { 0x29CD, 0, (void*)0x0805D4C0 }, { 0x29CE, 0, (void*)0x0805D514 }, { 0x29CF, 0, (void*)0x0805D550 }, - { 0x29D0, 0, (void*)0x0805D580 }, { 0x29D1, 0, (void*)0x0805D5AC }, { 0x29D2, 0, (void*)0x0805D5D4 }, - { 0x29D3, 0, (void*)0x0805D620 }, { 0x29D4, 0, (void*)0x0805D724 }, { 0x29D5, 0, (void*)0x0805D824 }, - { 0x29D6, 0, (void*)0x0805D864 }, { 0x29D7, 0, (void*)0x0805D8A8 }, { 0x29D8, 0, (void*)0x0805D9A8 }, - { 0x29D9, 0, (void*)0x0805DAA4 }, { 0x29DA, 0, (void*)0x0805DAFC }, { 0x29DB, 0, (void*)0x0805DB3C }, - { 0x29DC, 0, (void*)0x0805DBA0 }, { 0x29DD, 0, (void*)0x0805DBDC }, { 0x29DE, 0, (void*)0x0805DC00 }, - { 0x29DF, 0, (void*)0x0805DC68 }, { 0x29E0, 0, (void*)0x0805DC94 }, { 0x29E1, 0, (void*)0x0805DCC0 }, - { 0x29E2, 0, (void*)0x0805DCE8 }, { 0x29E3, 0, (void*)0x0805DE80 }, { 0x29E4, 0, (void*)0x0805DEC0 }, - { 0x29E5, 0, (void*)0x0805DFAC }, { 0x29E6, 0, (void*)0x0805DFC8 }, { 0x29E7, 0, (void*)0x0805E00C }, - { 0x29E8, 0, (void*)0x0805E098 }, { 0x29E9, 0, (void*)0x0805E0DC }, { 0x29EA, 0, (void*)0x0805E1D0 }, - { 0x29EB, 0, (void*)0x0805E204 }, { 0x29EC, 0, (void*)0x0805E234 }, { 0x29ED, 0, (void*)0x0805E258 }, - { 0x29EE, 0, (void*)0x0805E2A4 }, { 0x29EF, 0, (void*)0x0805E2D4 }, { 0x29F0, 0, (void*)0x0805E314 }, - { 0x29F1, 0, (void*)0x0805E344 }, { 0x29F2, 0, (void*)0x0805E390 }, { 0x29F3, 0, (void*)0x0805E3EC }, - { 0x29F4, 0, (void*)0x0805E428 }, { 0x29F5, 0, (void*)0x0805E49C }, { 0x29F8, 0, (void*)0x0805E4D8 }, - { 0x29F9, 0, (void*)0x0805E530 }, { 0x29FA, 0, (void*)0x0805E56C }, { 0x29FB, 0, (void*)0x0805E5B8 }, - { 0x29FC, 0, (void*)0x0805E608 }, { 0x29FD, 0, (void*)0x0805E654 }, { 0x29FE, 0, (void*)0x0805E6C8 }, - { 0x29FF, 0, (void*)0x0805E700 }, { 0x2A00, 0, (void*)0x0805E7B4 }, { 0x2A01, 0, (void*)0x0805E7D0 }, - { 0x2A02, 0, (void*)0x0805E81C }, { 0x2A30, 0, (void*)0x0805E878 }, { 0x2A31, 0, (void*)0x0805E898 }, - { 0x2A32, 0, (void*)0x0805E8DC }, { 0x2A33, 0, (void*)0x0805E94C }, { 0x2A34, 0, (void*)0x0805EA04 }, - { 0x2A35, 0, (void*)0x0805EA90 }, { 0x2A36, 0, (void*)0x0805EB14 }, { 0x2A37, 0, (void*)0x0805EB4C }, - { 0x2A38, 0, (void*)0x0805EBD0 }, { 0x2A39, 0, (void*)0x0805EC28 }, { 0x2A3A, 0, (void*)0x0805EC40 }, - { 0x2A94, 0, (void*)0x0805EC78 }, { 0x2A95, 0, (void*)0x0805ECA4 }, { 0x2A96, 0, (void*)0x0805ECD0 }, - { 0x2A97, 0, (void*)0x0805EDEC }, { 0x2A98, 0, (void*)0x0805EF18 }, { 0x2A99, 0, (void*)0x0805EF50 }, - { 0x2A9A, 0, (void*)0x0805EFE0 }, { 0x2A9B, 0, (void*)0x0805F120 }, { 0x2A9C, 0, (void*)0x0805F254 }, - { 0x2A9D, 0, (void*)0x0805F30C }, { 0x2A9E, 0, (void*)0x0805F3CC }, { 0x2A9F, 0, (void*)0x0805F4B4 }, - { 0x2AA0, 0, (void*)0x0805F5D0 }, { 0x2AA1, 0, (void*)0x0805F604 }, { 0x2AA2, 0, (void*)0x0805F63C }, - { 0x2AA3, 0, (void*)0x0805F68C }, { 0x2AA4, 0, (void*)0x0805F6BC }, { 0x2AA5, 0, (void*)0x0805F71C }, - { 0x2AA6, 0, (void*)0x0805F760 }, { 0x2AA7, 0, (void*)0x0805F7E4 }, { 0x2AA8, 0, (void*)0x0805F81C }, - { 0x2AA9, 0, (void*)0x0805F834 }, { 0x2AAA, 0, (void*)0x0805F870 }, { 0x2AAB, 0, (void*)0x0805F888 }, - { 0x2AAC, 0, (void*)0x0805F8B0 }, { 0x2AAD, 0, (void*)0x0805F8D4 }, { 0x2AAE, 0, (void*)0x0805F944 }, - { 0x2AAF, 0, (void*)0x0805F988 }, { 0x2AB0, 0, (void*)0x0805F9B0 }, { 0x2AB1, 0, (void*)0x0805FA58 }, - { 0x2AB2, 0, (void*)0x0805FA6C }, { 0x2AB3, 0, (void*)0x0805FA80 }, { 0x2AB4, 0, (void*)0x0805FB0C }, - { 0x2AB5, 0, (void*)0x0805FB20 }, { 0x2AB6, 0, (void*)0x0805FB64 }, { 0x2AB7, 0, (void*)0x0805FB80 }, - { 0x2AB8, 0, (void*)0x0805FB9C }, { 0x2AB9, 0, (void*)0x0805FBF4 }, { 0x2ABA, 0, (void*)0x0805FC24 }, - { 0x2ABB, 0, (void*)0x0805FC88 }, { 0x2ABC, 0, (void*)0x0805FCB0 }, { 0x2ABD, 0, (void*)0x0805FCD8 }, - { 0x2ABE, 0, (void*)0x0805FDD8 }, { 0x2ABF, 0, (void*)0x0805FDFC }, { 0x2AC0, 0, (void*)0x0805FF50 }, - { 0x2AC1, 0, (void*)0x0805FF7C }, { 0x2AC2, 0, (void*)0x080600D0 }, { 0x2AC3, 0, (void*)0x080600EC }, - { 0x2AC4, 0, (void*)0x080601F8 }, { 0x2AC5, 0, (void*)0x0806022C }, { 0x2AC6, 0, (void*)0x08060250 }, - { 0x2AC7, 0, (void*)0x08060260 }, { 0x2AC8, 0, (void*)0x08060270 }, { 0x2AC9, 0, (void*)0x08060280 }, - { 0x2ACA, 0, (void*)0x080602E0 }, { 0x2ACB, 0, (void*)0x0806030C }, { 0x2ACC, 0, (void*)0x08060340 }, - { 0x2ACD, 0, (void*)0x080603A4 }, { 0x2ACE, 0, (void*)0x080603C0 }, { 0x2ACF, 0, (void*)0x0806047C }, - { 0x2AD0, 0, (void*)0x08060494 }, { 0x2AD1, 0, (void*)0x0806053C }, { 0x2AD2, 0, (void*)0x080605B0 }, - { 0x2AD3, 0, (void*)0x080605FC }, { 0x2AD4, 0, (void*)0x0806067C }, { 0x2AD5, 0, (void*)0x080606A0 }, - { 0x2AD6, 0, (void*)0x080606BC }, { 0x2AD7, 0, (void*)0x080606EC }, { 0x2AD8, 0, (void*)0x08060724 }, - { 0x2AD9, 0, (void*)0x08060748 }, { 0x2ADA, 0, (void*)0x08060794 }, { 0x2ADB, 0, (void*)0x08060814 }, - { 0x2ADC, 0, (void*)0x08060874 }, { 0x2ADD, 0, (void*)0x080608B4 }, { 0x2ADE, 0, (void*)0x080608D0 }, - { 0x2ADF, 0, (void*)0x08060960 }, { 0x2AE0, 0, (void*)0x08060A00 }, { 0x2AE1, 0, (void*)0x08060AA8 }, - { 0x2AE2, 0, (void*)0x08060AD4 }, { 0x2AE3, 0, (void*)0x08060B10 }, { 0x2AE4, 0, (void*)0x08060B74 }, - { 0x2AE5, 0, (void*)0x08060BD0 }, { 0x2AE6, 0, (void*)0x08060C6C }, { 0x2AEA, 0, (void*)0x08060CDC }, - { 0x2AEB, 0, (void*)0x08060D1C }, { 0x2AEC, 0, (void*)0x08060D70 }, { 0x2AED, 0, (void*)0x08060D98 }, - { 0x2AEE, 0, (void*)0x08060DB8 }, { 0x2AF8, 0, (void*)0x08060DC8 }, { 0x2AF9, 0, (void*)0x08060DE4 }, - { 0x2AFA, 0, (void*)0x08060EC8 }, { 0x2AFB, 0, (void*)0x08060FC0 }, { 0x2AFC, 0, (void*)0x080610CC }, - { 0x2AFD, 0, (void*)0x080611BC }, { 0x2AFE, 0, (void*)0x080611F4 }, { 0x2AFF, 0, (void*)0x080612EC }, - { 0x2B00, 0, (void*)0x080613FC }, { 0x2B01, 0, (void*)0x08061448 }, { 0x2B02, 0, (void*)0x08061470 }, - { 0x2B03, 0, (void*)0x080614D0 }, { 0x2B04, 0, (void*)0x08061504 }, { 0x2B05, 0, (void*)0x08061578 }, - { 0x2B06, 0, (void*)0x080615DC }, { 0x2B07, 0, (void*)0x08061658 }, { 0x2B08, 0, (void*)0x0806167C }, - { 0x2B09, 0, (void*)0x080616C0 }, { 0x2B0A, 0, (void*)0x08061714 }, { 0x2B0B, 0, (void*)0x08061750 }, - { 0x2B0C, 0, (void*)0x080617A8 }, { 0x2B0D, 0, (void*)0x080617D8 }, { 0x2B0E, 0, (void*)0x08061810 }, - { 0x2B0F, 0, (void*)0x08061890 }, { 0x2B10, 0, (void*)0x080619A0 }, { 0x2B11, 0, (void*)0x08061AD8 }, - { 0x2B12, 0, (void*)0x08061B44 }, { 0x2B13, 0, (void*)0x08061BA0 }, { 0x2B14, 0, (void*)0x08061C0C }, - { 0x2B15, 0, (void*)0x08061C44 }, { 0x2B16, 0, (void*)0x08061CE0 }, { 0x2B17, 0, (void*)0x08061D4C }, - { 0x2B18, 0, (void*)0x08061D70 }, { 0x2B19, 0, (void*)0x08061DD4 }, { 0x2B1A, 0, (void*)0x08061EB4 }, - { 0x2B1B, 0, (void*)0x08061F10 }, { 0x2B1C, 0, (void*)0x08061F88 }, { 0x2B1D, 0, (void*)0x08061FC4 }, - { 0x2B1E, 0, (void*)0x08061FEC }, { 0x2B1F, 0, (void*)0x08062024 }, { 0x2B20, 0, (void*)0x0806209C }, - { 0x2B21, 0, (void*)0x0806212C }, { 0x2B22, 0, (void*)0x08062164 }, { 0x2B23, 0, (void*)0x080621A8 }, - { 0x2B24, 0, (void*)0x0806229C }, { 0x2B25, 0, (void*)0x080622D8 }, { 0x2B26, 0, (void*)0x080622F8 }, - { 0x2B27, 0, (void*)0x08062350 }, { 0x2B28, 0, (void*)0x080623A0 }, { 0x2B29, 0, (void*)0x080623D0 }, - { 0x2B2A, 0, (void*)0x08062428 }, { 0x2B2B, 0, (void*)0x08062478 }, { 0x2B2C, 0, (void*)0x080624AC }, - { 0x2B2D, 0, (void*)0x08062500 }, { 0x2B2E, 0, (void*)0x08062550 }, { 0x2B2F, 0, (void*)0x08062580 }, - { 0x2B30, 0, (void*)0x080625D4 }, { 0x2B31, 0, (void*)0x08062624 }, { 0x2B32, 0, (void*)0x08062650 }, - { 0x2B33, 0, (void*)0x08062670 }, { 0x2B34, 0, (void*)0x080626B0 }, { 0x2B35, 0, (void*)0x080626DC }, - { 0x2B36, 0, (void*)0x080626FC }, { 0x2B37, 0, (void*)0x0806273C }, { 0x2B38, 0, (void*)0x080627D8 }, - { 0x2B39, 0, (void*)0x08062890 }, { 0x2B3A, 0, (void*)0x08062910 }, { 0x2B3B, 0, (void*)0x08062968 }, - { 0x2B3C, 0, (void*)0x080629A4 }, { 0x2B3D, 0, (void*)0x080629E0 }, { 0x2B3E, 0, (void*)0x08062A90 }, - { 0x2B3F, 0, (void*)0x08062AD8 }, { 0x2B40, 0, (void*)0x08062B34 }, { 0x2B5C, 0, (void*)0x08062B84 }, - { 0x2B5D, 0, (void*)0x08062C3C }, { 0x2B5E, 0, (void*)0x08062C68 }, { 0x2B5F, 0, (void*)0x08062C94 }, - { 0x2B60, 0, (void*)0x08062CE8 }, { 0x2B61, 0, (void*)0x08062D8C }, { 0x2B62, 0, (void*)0x08062E34 }, - { 0x2B63, 0, (void*)0x08062E84 }, { 0x2B64, 0, (void*)0x08062F18 }, { 0x2B65, 0, (void*)0x08062F50 }, - { 0x2B66, 0, (void*)0x08062F98 }, { 0x2B67, 0, (void*)0x08062FE0 }, { 0x32C8, 0, (void*)0x08063054 }, - { 0x32C9, 0, (void*)0x080630D8 }, { 0x32CA, 0, (void*)0x08063120 }, { 0x32CB, 0, (void*)0x08063184 }, - { 0x32CC, 0, (void*)0x080631E0 }, { 0x32CD, 0, (void*)0x08063210 }, { 0x32CE, 0, (void*)0x0806326C }, - { 0x32CF, 0, (void*)0x08063294 }, { 0x32D0, 0, (void*)0x080632B4 }, { 0x32D1, 0, (void*)0x08063300 }, - { 0x32D2, 0, (void*)0x08063338 }, { 0x32D3, 0, (void*)0x08063384 }, { 0x32D4, 0, (void*)0x080633B4 }, - { 0x332C, 0, (void*)0x080633E8 }, { 0x332D, 0, (void*)0x08063408 }, { 0x332E, 0, (void*)0x080634FC }, - { 0x332F, 0, (void*)0x0806356C }, { 0x3330, 0, (void*)0x08063594 }, { 0x3331, 0, (void*)0x080635AC }, - { 0x3332, 0, (void*)0x080635D0 }, { 0x3333, 0, (void*)0x08063618 }, { 0x3334, 0, (void*)0x0806369C }, - { 0x3335, 0, (void*)0x08063714 }, { 0x3336, 0, (void*)0x08063734 }, { 0x3337, 0, (void*)0x08063788 }, - { 0x3338, 0, (void*)0x080637AC }, { 0x3339, 0, (void*)0x080637CC }, { 0x333A, 0, (void*)0x08063838 }, - { 0x333B, 0, (void*)0x08063868 }, { 0x333C, 0, (void*)0x08063898 }, { 0x333D, 0, (void*)0x08063948 }, - { 0x333E, 0, (void*)0x08063988 }, { 0x333F, 0, (void*)0x080639AC }, { 0x3340, 0, (void*)0x08063A58 }, - { 0x3341, 0, (void*)0x08063AB0 }, { 0x3342, 0, (void*)0x08063B24 }, { 0x3343, 0, (void*)0x08063BBC }, - { 0x3344, 0, (void*)0x08063C28 }, { 0x3345, 0, (void*)0x08063CF0 }, { 0x3346, 0, (void*)0x08063D24 }, - { 0x3347, 0, (void*)0x08063D5C }, { 0x3348, 0, (void*)0x08063D8C }, { 0x3349, 0, (void*)0x08063DEC }, - { 0x334A, 0, (void*)0x08063E70 }, { 0x334B, 0, (void*)0x08063EA8 }, { 0x334C, 0, (void*)0x08063EC4 }, - { 0x334D, 0, (void*)0x08063FB4 }, { 0x334E, 0, (void*)0x08063FDC }, { 0x334F, 0, (void*)0x08064038 }, - { 0x3350, 0, (void*)0x08064058 }, { 0x3351, 0, (void*)0x0806408C }, { 0x3352, 0, (void*)0x080640B0 }, - { 0x3353, 0, (void*)0x080640E0 }, { 0x3354, 0, (void*)0x08064168 }, { 0x3355, 0, (void*)0x080641B4 }, - { 0x3356, 0, (void*)0x080641EC }, { 0x3357, 0, (void*)0x08064218 }, { 0x3358, 0, (void*)0x08064230 }, - { 0x3359, 0, (void*)0x08064264 }, { 0x335A, 0, (void*)0x08064298 }, { 0x335B, 0, (void*)0x080642F0 }, - { 0x335C, 0, (void*)0x08064354 }, { 0x335D, 0, (void*)0x0806437C }, { 0x335E, 0, (void*)0x080643B4 }, - { 0x335F, 0, (void*)0x080643E4 }, { 0x3360, 0, (void*)0x0806444C }, { 0x3361, 0, (void*)0x08064498 }, - { 0x3362, 0, (void*)0x080644EC }, { 0x3363, 0, (void*)0x0806453C }, { 0x3364, 0, (void*)0x08064564 }, - { 0x3365, 0, (void*)0x08064654 }, { 0x3366, 0, (void*)0x08064718 }, { 0x3367, 0, (void*)0x080647E4 }, - { 0x3368, 0, (void*)0x08064860 }, { 0x3369, 0, (void*)0x080648B8 }, { 0x336A, 0, (void*)0x08064988 }, - { 0x336B, 0, (void*)0x080649F4 }, { 0x336C, 0, (void*)0x08064A44 }, { 0x336D, 0, (void*)0x08064AA0 }, - { 0x336E, 0, (void*)0x08064AE8 }, { 0x336F, 0, (void*)0x08064B10 }, { 0x3370, 0, (void*)0x08064B64 }, - { 0x3371, 0, (void*)0x08064BBC }, { 0x3390, 0, (void*)0x08064BEC }, { 0x3391, 0, (void*)0x08064C24 }, - { 0x3392, 0, (void*)0x08064CE0 }, { 0x3393, 0, (void*)0x08064D4C }, { 0x3394, 0, (void*)0x08064DA0 }, - { 0x3395, 0, (void*)0x08064E04 }, { 0x3396, 0, (void*)0x08064F10 }, { 0x3397, 0, (void*)0x08064F84 }, - { 0x3398, 0, (void*)0x08064FBC }, { 0x3399, 0, (void*)0x08065070 }, { 0x339A, 0, (void*)0x080650DC }, - { 0x339B, 0, (void*)0x08065144 }, { 0x339C, 0, (void*)0x0806516C }, { 0x339D, 0, (void*)0x0806519C }, - { 0x339E, 0, (void*)0x080651D4 }, { 0x339F, 0, (void*)0x080651F0 }, { 0x33A0, 0, (void*)0x0806524C }, - { 0x33A1, 0, (void*)0x08065358 }, { 0x33A2, 0, (void*)0x080653CC }, { 0x33A3, 0, (void*)0x08065408 }, - { 0x33A4, 0, (void*)0x08065438 }, { 0x33A5, 0, (void*)0x08065470 }, { 0x33A6, 0, (void*)0x080654CC }, - { 0x33A7, 0, (void*)0x08065510 }, { 0x33A8, 0, (void*)0x0806555C }, { 0x33A9, 0, (void*)0x080655A0 }, - { 0x33AA, 0, (void*)0x080655C0 }, { 0x33AB, 0, (void*)0x08065600 }, { 0x33AC, 0, (void*)0x08065658 }, - { 0x33AD, 0, (void*)0x08065678 }, { 0x33AE, 0, (void*)0x08065710 }, { 0x33AF, 0, (void*)0x080657A8 }, - { 0x33B0, 0, (void*)0x080657D0 }, { 0x33B1, 0, (void*)0x080657E8 }, { 0x33B2, 0, (void*)0x08065860 }, - { 0x33B3, 0, (void*)0x080658E4 }, { 0x33B4, 0, (void*)0x08065930 }, { 0x33B5, 0, (void*)0x0806597C }, - { 0x33B6, 0, (void*)0x080659DC }, { 0x33B7, 0, (void*)0x08065A28 }, { 0x33B8, 0, (void*)0x08065ABC }, - { 0x33B9, 0, (void*)0x08065AE0 }, { 0x33BA, 0, (void*)0x08065B08 }, { 0x33BB, 0, (void*)0x08065B7C }, - { 0x33BC, 0, (void*)0x08065BD8 }, { 0x33BD, 0, (void*)0x08065C5C }, { 0x33BE, 0, (void*)0x08065C88 }, - { 0x33BF, 0, (void*)0x08065CCC }, { 0x33C0, 0, (void*)0x08065D30 }, { 0x33C1, 0, (void*)0x08065DD4 }, - { 0x33C2, 0, (void*)0x08065E24 }, { 0x33C3, 0, (void*)0x08065E84 }, { 0x33C4, 0, (void*)0x08065F4C }, - { 0x33C5, 0, (void*)0x08066024 }, { 0x33C6, 0, (void*)0x08066120 }, { 0x33C7, 0, (void*)0x08066144 }, - { 0x33C8, 0, (void*)0x08066200 }, { 0x33C9, 0, (void*)0x08066268 }, { 0x33CA, 0, (void*)0x0806629C }, - { 0x33CB, 0, (void*)0x080662D0 }, { 0x33CC, 0, (void*)0x0806630C }, { 0x33CD, 0, (void*)0x08066324 }, - { 0x33CE, 0, (void*)0x0806635C }, { 0x33CF, 0, (void*)0x0806637C }, { 0x33D0, 0, (void*)0x080663AC }, - { 0x33D1, 0, (void*)0x08066464 }, { 0x33D2, 0, (void*)0x08066578 }, { 0x33D3, 0, (void*)0x080665F4 }, - { 0x33D4, 0, (void*)0x0806665C }, { 0x33D5, 0, (void*)0x080666D0 }, { 0x33D6, 0, (void*)0x08066708 }, - { 0x33D7, 0, (void*)0x08066788 }, { 0x33D8, 0, (void*)0x080667D4 }, { 0x33D9, 0, (void*)0x08066834 }, - { 0x33F4, 0, (void*)0x080668FC }, { 0x33F5, 0, (void*)0x08066934 }, { 0x33F6, 0, (void*)0x080669DC }, - { 0x33F7, 0, (void*)0x08066A3C }, { 0x33F9, 0, (void*)0x08066B00 }, { 0x3458, 0, (void*)0x08066B40 }, - { 0x3459, 0, (void*)0x08066B60 }, { 0x345A, 0, (void*)0x08066BC0 }, { 0x345B, 0, (void*)0x08066C10 }, - { 0x345C, 0, (void*)0x08066C7C }, { 0x345D, 0, (void*)0x08066CB8 }, { 0x345E, 0, (void*)0x08066D20 }, - { 0x345F, 0, (void*)0x08066D90 }, { 0x3460, 0, (void*)0x08066E58 }, { 0x3461, 0, (void*)0x08066E9C }, - { 0x3462, 0, (void*)0x08066EE8 }, { 0x3463, 0, (void*)0x08066F38 }, { 0x3464, 0, (void*)0x08066F64 }, - { 0x3465, 0, (void*)0x08066FF8 }, { 0x3466, 0, (void*)0x080670A4 }, { 0x3467, 0, (void*)0x080670F0 }, - { 0x3468, 0, (void*)0x08067144 }, { 0x3469, 0, (void*)0x08067174 }, { 0x346A, 0, (void*)0x080671E8 }, - { 0x346B, 0, (void*)0x08067208 }, { 0x346C, 0, (void*)0x08067224 }, { 0x346D, 0, (void*)0x0806728C }, - { 0x346E, 0, (void*)0x0806731C }, { 0x346F, 0, (void*)0x0806739C }, { 0x3470, 0, (void*)0x08067400 }, - { 0x3471, 0, (void*)0x0806743C }, { 0x3472, 0, (void*)0x0806746C }, { 0x3473, 0, (void*)0x080674B0 }, - { 0x3474, 0, (void*)0x08067520 }, { 0x3475, 0, (void*)0x08067594 }, { 0x3476, 0, (void*)0x080675B8 }, - { 0x3477, 0, (void*)0x080675E0 }, { 0x3478, 0, (void*)0x08067618 }, { 0x3479, 0, (void*)0x08067648 }, - { 0x347A, 0, (void*)0x08067688 }, { 0x347B, 0, (void*)0x080676B0 }, { 0x347C, 0, (void*)0x080676F0 }, - { 0x347D, 0, (void*)0x08067760 }, { 0x347E, 0, (void*)0x080677A4 }, { 0x347F, 0, (void*)0x080677F4 }, - { 0x3480, 0, (void*)0x0806782C }, { 0x3481, 0, (void*)0x080678A0 }, { 0x3482, 0, (void*)0x080678C8 }, - { 0x3483, 0, (void*)0x080678F8 }, { 0x3484, 0, (void*)0x08067934 }, { 0x3485, 0, (void*)0x08067990 }, - { 0x3486, 0, (void*)0x080679E0 }, { 0x3487, 0, (void*)0x08067A18 }, { 0x3488, 0, (void*)0x08067A68 }, - { 0x3489, 0, (void*)0x08067AE8 }, { 0x348A, 0, (void*)0x08067B54 }, { 0x348B, 0, (void*)0x08067BBC }, - { 0x348C, 0, (void*)0x08067C0C }, { 0x348D, 0, (void*)0x08067C5C }, { 0x348E, 0, (void*)0x08067CB8 }, - { 0x348F, 0, (void*)0x08067D6C }, { 0x3490, 0, (void*)0x08067DE0 }, { 0x3491, 0, (void*)0x08067E2C }, - { 0x3492, 0, (void*)0x08067E80 }, { 0x3493, 0, (void*)0x08067EDC }, { 0x3494, 0, (void*)0x08067F20 }, - { 0x3495, 0, (void*)0x08067F44 }, { 0x3496, 0, (void*)0x08067F64 }, { 0x3497, 0, (void*)0x08067FEC }, - { 0x3498, 0, (void*)0x0806803C }, { 0x3499, 0, (void*)0x08068094 }, { 0x349A, 0, (void*)0x080680C8 }, - { 0x349B, 0, (void*)0x080680FC }, { 0x349C, 0, (void*)0x0806812C }, { 0x349D, 0, (void*)0x08068158 }, - { 0x349E, 0, (void*)0x08068180 }, { 0x349F, 0, (void*)0x080681C0 }, { 0x34A0, 0, (void*)0x08068224 }, - { 0x34A1, 0, (void*)0x08068278 }, { 0x34A2, 0, (void*)0x080682C0 }, { 0x34A3, 0, (void*)0x0806830C }, - { 0x34A4, 0, (void*)0x08068394 }, { 0x34A5, 0, (void*)0x080683F4 }, { 0x34A6, 0, (void*)0x08068430 }, - { 0x34A7, 0, (void*)0x08068498 }, { 0x34A8, 0, (void*)0x080684FC }, { 0x34A9, 0, (void*)0x08068544 }, - { 0x34AA, 0, (void*)0x08068564 }, { 0x34AB, 0, (void*)0x08068598 }, { 0x34AC, 0, (void*)0x0806860C }, - { 0x34AD, 0, (void*)0x08068640 }, { 0x34AE, 0, (void*)0x080686F4 }, { 0x34AF, 0, (void*)0x08068768 }, - { 0x34B0, 0, (void*)0x08068780 }, { 0x34B1, 0, (void*)0x080687E0 }, { 0x34B2, 0, (void*)0x080687F8 }, - { 0x34B3, 0, (void*)0x08068860 }, { 0x3520, 0, (void*)0x080688F4 }, { 0x3521, 0, (void*)0x08068958 }, - { 0x3522, 0, (void*)0x080689C8 }, { 0x3523, 0, (void*)0x08068A38 }, { 0x3524, 0, (void*)0x08068A88 }, - { 0x3525, 0, (void*)0x08068B04 }, { 0x3526, 0, (void*)0x08068B30 }, { 0x3527, 0, (void*)0x08068B7C }, - { 0x3528, 0, (void*)0x08068CA0 }, { 0x3529, 0, (void*)0x08068CF4 }, { 0x352A, 0, (void*)0x08068D1C }, - { 0x352B, 0, (void*)0x08068DB0 }, { 0x352C, 0, (void*)0x08068E28 }, { 0x352D, 0, (void*)0x08068E78 }, - { 0x352E, 0, (void*)0x08068F14 }, { 0x352F, 0, (void*)0x08068F78 }, { 0x3530, 0, (void*)0x08068FA0 }, - { 0x3531, 0, (void*)0x08069020 }, { 0x3532, 0, (void*)0x080690CC }, { 0x3533, 0, (void*)0x0806913C }, - { 0x3534, 0, (void*)0x080691B0 }, { 0x3535, 0, (void*)0x08069224 }, { 0x3536, 0, (void*)0x0806923C }, - { 0x3537, 0, (void*)0x08069284 }, { 0x3538, 0, (void*)0x080692D8 }, { 0x3539, 0, (void*)0x08069314 }, - { 0x353A, 0, (void*)0x08069358 }, { 0x353B, 0, (void*)0x08069390 }, { 0x353C, 0, (void*)0x080693E4 }, - { 0x353D, 0, (void*)0x08069434 }, { 0x353E, 0, (void*)0x08069490 }, { 0x353F, 0, (void*)0x080694C4 }, - { 0x3540, 0, (void*)0x08069524 }, { 0x3541, 0, (void*)0x0806957C }, { 0x3542, 0, (void*)0x080695C0 }, - { 0x3543, 0, (void*)0x08069608 }, { 0x3544, 0, (void*)0x08069668 }, { 0x3545, 0, (void*)0x080696DC }, - { 0x3546, 0, (void*)0x08069734 }, { 0x3548, 0, (void*)0x08069774 }, { 0x3549, 0, (void*)0x08069814 }, - { 0x354A, 0, (void*)0x080698A0 }, { 0x354B, 0, (void*)0x08069930 }, { 0x354C, 0, (void*)0x08069998 }, - { 0xFFFC, 0, (void*)0x080699C8 }, { 0xFFFD, 0, (void*)0x080699D4 }, { 0xFFFF, 0, NULL }, -}; - -MessageTableEntry D_801CFB08[46] = { - { 0x4E20, 0xB0, (void*)0x07000000 }, { 0x4E21, 0xB0, (void*)0x0700003C }, - { 0x4E22, 0xB0, (void*)0x07000094 }, { 0x4E23, 0xB0, (void*)0x070000F0 }, - { 0x4E24, 0xB0, (void*)0x07000140 }, { 0x4E25, 0xB0, (void*)0x0700019C }, - { 0x4E26, 0xB0, (void*)0x070001D8 }, { 0x4E27, 0xB0, (void*)0x07000248 }, - { 0x4E28, 0xB0, (void*)0x0700027C }, { 0x4E29, 0xB0, (void*)0x070002E0 }, - { 0x4E2A, 0xB0, (void*)0x0700033C }, { 0x4E2B, 0xB0, (void*)0x07000384 }, - { 0x4E2C, 0xB0, (void*)0x070003C8 }, { 0x4E2D, 0xB0, (void*)0x0700040C }, - { 0x4E2E, 0xB0, (void*)0x07000450 }, { 0x4E2F, 0xB0, (void*)0x070004A8 }, - { 0x4E30, 0xB0, (void*)0x07000504 }, { 0x4E31, 0xB0, (void*)0x07000564 }, - { 0x4E32, 0xB0, (void*)0x070005CC }, { 0x4E33, 0xB0, (void*)0x07000610 }, - { 0x4E34, 0xB0, (void*)0x07000654 }, { 0x4E35, 0xB0, (void*)0x07000698 }, - { 0x4E36, 0xB0, (void*)0x070006F8 }, { 0x4E37, 0xB0, (void*)0x07000750 }, - { 0x4E38, 0xB0, (void*)0x07000798 }, { 0x4E39, 0xB0, (void*)0x0700081C }, - { 0x4E3A, 0xB0, (void*)0x07000888 }, { 0x4E3B, 0xB0, (void*)0x07000924 }, - { 0x4E3C, 0xB0, (void*)0x070009B4 }, { 0x4E3D, 0xB0, (void*)0x070009E8 }, - { 0x4E3E, 0xB0, (void*)0x07000A78 }, { 0x4E3F, 0xB0, (void*)0x07000AB0 }, - { 0x4E40, 0xB0, (void*)0x07000B2C }, { 0x4E41, 0xB0, (void*)0x07000B54 }, - { 0x4E42, 0xB0, (void*)0x07000B7C }, { 0x4E43, 0xB0, (void*)0x07000BA4 }, - { 0x4E44, 0xB0, (void*)0x07000BCC }, { 0x4E45, 0xB0, (void*)0x07000BF4 }, - { 0x4E46, 0xB0, (void*)0x07000C1C }, { 0x4E47, 0xB0, (void*)0x07000C44 }, - { 0x4E48, 0xB0, (void*)0x07000C6C }, { 0x4E49, 0xB0, (void*)0x07000CEC }, - { 0x4E4A, 0xB0, (void*)0x07000D5C }, { 0x4E4B, 0xB0, (void*)0x07000DC8 }, - { 0x4E4C, 0xB0, (void*)0x07000E54 }, { 0xFFFF, 0, NULL }, -}; From fc309f5eaa7a5acdd7f3b4fa9b5b7beb025287d8 Mon Sep 17 00:00:00 2001 From: Archez Date: Sat, 22 Jun 2024 15:05:32 -0400 Subject: [PATCH 16/21] bump lus with ucode change (#708) --- CMakeLists.txt | 2 +- libultraship | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fcdb1001f..e606c1627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ endif() set(GFX_DEBUG_DISASSEMBLER ON) # Tell LUS we're using F3DEX_GBI_2 (in a way that doesn't break libgfxd) -set(USE_F3DEX2 ON) +set(GBI_UCODE F3DEX_GBI_2) ################################################################################ # Set target arch type if empty. Visual studio solution generator provides it. diff --git a/libultraship b/libultraship index fccf181b4..5849d3a23 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit fccf181b449f82f3e6ae5cdc666319847f78e0a1 +Subproject commit 5849d3a23a18d0664cb04cc084fa120833b69353 From 120562952ca7c4fcfe1bcb312fb999bae4ebe954 Mon Sep 17 00:00:00 2001 From: Archez Date: Sun, 23 Jun 2024 14:51:57 -0400 Subject: [PATCH 17/21] bump lus with color combiner fixes (#711) --- libultraship | 2 +- .../Enhancements/GfxPatcher/AuthenticGfxPatches.cpp | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/libultraship b/libultraship index 5849d3a23..31e9b009f 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 5849d3a23a18d0664cb04cc084fa120833b69353 +Subproject commit 31e9b009f94e7074a847c7954926cba354cd7c72 diff --git a/mm/2s2h/Enhancements/GfxPatcher/AuthenticGfxPatches.cpp b/mm/2s2h/Enhancements/GfxPatcher/AuthenticGfxPatches.cpp index 78da2596a..3364ff86b 100644 --- a/mm/2s2h/Enhancements/GfxPatcher/AuthenticGfxPatches.cpp +++ b/mm/2s2h/Enhancements/GfxPatcher/AuthenticGfxPatches.cpp @@ -2,7 +2,6 @@ extern "C" { #include -#include "objects/object_uch/object_uch.h" #include "overlays/ovl_En_Syateki_Okuta/ovl_En_Syateki_Okuta.h" #include "overlays/ovl_Obj_Jgame_Light/ovl_Obj_Jgame_Light.h" @@ -11,15 +10,6 @@ void ResourceMgr_UnpatchGfxByName(const char* path, const char* patchName); Gfx* ResourceMgr_LoadGfxByName(const char* path); } -void PatchAlienEyeBeams() { - // A bug in the Alien's eye beam DL is incorrectly referring to TEXEL1 in the color combiner when - // the texture is loaded into TEXEL0, causing the CC rendering whatever was last loaded into TEXEL1. - // Patching the instruction to TEXEL0 restores the effect as seen on hardware. - ResourceMgr_PatchGfxByName(gAlienEyeBeamDL, "AlienEyeBeamFix", 4, - gsDPSetCombineLERP(NOISE, 0, PRIMITIVE, 0, 0, 0, 0, ENVIRONMENT, COMBINED, 0, - PRIMITIVE_ALPHA, PRIMITIVE, COMBINED, 0, TEXEL0, 0)); -} - void PatchMiniGameCrossAndCircleSymbols() { // The X and O displayed in mini-games are incorrectly set to FMT_I instead of FMT_IA, // Fast3D throws an assert and does nothing as FMT_I with SIZ_16 is not a valid texture type. @@ -48,6 +38,5 @@ void PatchMiniGameCrossAndCircleSymbols() { // Applies required patches for authentic bugs to allow the game to play and render properly void GfxPatcher_ApplyNecessaryAuthenticPatches() { - PatchAlienEyeBeams(); PatchMiniGameCrossAndCircleSymbols(); } From a38b9daa6dbf30e8b3e39fb223e29a4531eb10c2 Mon Sep 17 00:00:00 2001 From: Archez Date: Sun, 23 Jun 2024 15:19:33 -0400 Subject: [PATCH 18/21] Add HUD Editor support for horse carrots (#704) --- mm/2s2h/BenGui/HudEditor.cpp | 3 +++ mm/2s2h/BenGui/HudEditor.h | 1 + mm/src/code/z_parameter.c | 29 +++++++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/mm/2s2h/BenGui/HudEditor.cpp b/mm/2s2h/BenGui/HudEditor.cpp index 75b5ad58a..95202bbbf 100644 --- a/mm/2s2h/BenGui/HudEditor.cpp +++ b/mm/2s2h/BenGui/HudEditor.cpp @@ -17,6 +17,7 @@ HudEditorElement hudEditorElements[HUD_EDITOR_ELEMENT_MAX] = { HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_D_PAD, "D-Pad", "DPad", 271, 55, 255, 255, 255, 255), HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_MINIMAP, "Minimap", "Minimap", 295, 220, 0, 255, 255, 160), HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_START, "Start Button", "Start", 136, 17, 255, 130, 60, 255), + HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_CARROT, "Horse Carrots", "Carrots", 160, 64, 236, 92, 41, 255), HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_CLOCK, "Three Day Clock", "Clock", 160, 206, 255, 255, 255, 255), HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_HEARTS, "Hearts", "Hearts", 30, 26, 255, 70, 50, 255), HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_MAGIC_METER, "Magic", "Magic", 18, 34, 0, 200, 0, 255), @@ -206,6 +207,8 @@ void HudEditorWindow::DrawElement() { HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT); CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_START].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT); + CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_CARROT].modeCvar, + HUD_EDITOR_ELEMENT_MODE_MOVABLE_43); CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_CLOCK].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_43); CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_HEARTS].modeCvar, diff --git a/mm/2s2h/BenGui/HudEditor.h b/mm/2s2h/BenGui/HudEditor.h index a022c95ff..0078a6ede 100644 --- a/mm/2s2h/BenGui/HudEditor.h +++ b/mm/2s2h/BenGui/HudEditor.h @@ -32,6 +32,7 @@ typedef enum { HUD_EDITOR_ELEMENT_D_PAD, HUD_EDITOR_ELEMENT_MINIMAP, HUD_EDITOR_ELEMENT_START, + HUD_EDITOR_ELEMENT_CARROT, HUD_EDITOR_ELEMENT_CLOCK, HUD_EDITOR_ELEMENT_HEARTS, HUD_EDITOR_ELEMENT_MAGIC_METER, diff --git a/mm/src/code/z_parameter.c b/mm/src/code/z_parameter.c index 42487add4..6a6297196 100644 --- a/mm/src/code/z_parameter.c +++ b/mm/src/code/z_parameter.c @@ -8025,9 +8025,34 @@ void Interface_DrawMinigameIcons(PlayState* play) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha); } - gSPTextureRectangle(OVERLAY_DISP++, rectX << 2, rectY << 2, (rectX + 16) << 2, (rectY + 16) << 2, - G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + // #region 2S2H [Cosmetic] Hud Editor Carrots + HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_CARROT); + if (HudEditor_ShouldOverrideDraw()) { + // Derived from the original call to gSPTextureRectangle below + // Y pos set to 56 in override mode to ignore minigame state differences + s16 newX = rectX; + s16 newY = 56; + s16 newWidth = 16; + s16 newHeight = 16; + s16 dsdx = 512; + s16 dtdy = 512; + + if (HudEditor_IsActiveElementHidden()) { + break; + } + + HudEditor_ModifyDrawValues(&newX, &newY, &newWidth, &newHeight, &dsdx, &dtdy); + + gSPWideTextureRectangle(OVERLAY_DISP++, newX << 2, newY << 2, (newX + newWidth) << 2, + (newY + newHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx << 1, dtdy << 1); + } else { + // #endregion + gSPTextureRectangle(OVERLAY_DISP++, rectX << 2, rectY << 2, (rectX + 16) << 2, (rectY + 16) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } } + + hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE; } if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { From 3ef3e7a2394a36ca00cf23cb0cd8abf617809084 Mon Sep 17 00:00:00 2001 From: balloondude2 <55861555+balloondude2@users.noreply.github.com> Date: Mon, 24 Jun 2024 18:46:58 -0600 Subject: [PATCH 19/21] [Enhancement] Fix Fierce Deity interactions with Bombers (#674) * Allow FD to talk to Bomber Jim. Adds comments to unknown data. * fd works with blue bombers and guard bomber * clang format --- .../overlays/actors/ovl_En_Bombers/z_en_bombers.c | 6 +++++- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 6 ++++++ .../overlays/actors/ovl_En_Bomjima/z_en_bomjima.c | 14 ++++++++------ .../overlays/actors/ovl_En_Bomjima/z_en_bomjima.h | 2 +- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/mm/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/mm/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c index a67886832..229cce497 100644 --- a/mm/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/mm/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -257,7 +257,11 @@ void func_80C039A8(EnBombers* this, PlayState* play) { this->actor.textId = 0x744; } break; - + // #region 2S2H - Enhancements. Fierce Deity gets same dialog as Human without notebook + case PLAYER_FORM_FIERCE_DEITY: + this->actor.textId = 0x73D; + break; + // #endregion default: break; } diff --git a/mm/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c b/mm/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c index 92444c961..9b59ec40f 100644 --- a/mm/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/mm/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -165,6 +165,9 @@ void func_80C04BA0(EnBombers2* this, PlayState* play) { player = GET_PLAYER(play); switch (player->transformation) { + // #region 2S2H - Enhancements. Fierce Deity gets same dialog as Goron and Zora + case PLAYER_FORM_FIERCE_DEITY: + // #endregion case PLAYER_FORM_GORON: case PLAYER_FORM_ZORA: this->textIdIndex = 1; @@ -233,6 +236,9 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) { this->unk_28E = -0xFA0; break; + // #region 2S2H - Enhancements. Fierce Deity. + case PLAYER_FORM_FIERCE_DEITY: + // #endregion case PLAYER_FORM_GORON: case PLAYER_FORM_ZORA: this->unk_28E = -0x1770; diff --git a/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index 4976e7822..891e0741d 100644 --- a/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -84,19 +84,19 @@ static ColliderCylinderInit sCylinderInit = { { 10, 30, 0, { 0, 0, 0 } }, }; -u16 D_80C00A44[] = { 0x719, 0x71A, 0x71B, 0x708 }; +u16 D_80C00A44[] = { 0x719, 0x71A, 0x71B, 0x708 }; // text IDs before popping balloon -u16 D_80C00A4C[] = { 0x739, 0x73A, 0x73B, 0x000 }; +u16 D_80C00A4C[] = { 0x739, 0x73A, 0x73B, 0x000 }; // text IDs after popping balloon u16 D_80C00A54[] = { 0x739, 0x73A, 0x73B, 0x714, 0x709, 0x70A, 0x70B, 0x70C, 0x70D, 0x70E, 0x70F, 0x712, 0x713, -}; +}; // text IDs for Deku after popping balloon u16 D_80C00A70[] = { 0x739, 0x73A, 0x73B, 0x759, 0x753, 0x754, 0x755, 0x756, 0x70D, 0x757, 0x758, 0x712, 0x713, -}; +}; // text IDs for Human after popping balloon -u16 D_80C00A8C[] = { 0x736, 0x737, 0x738, 0x74E }; +u16 D_80C00A8C[] = { 0x736, 0x737, 0x738, 0x74E }; // text IDs after hide and seek typedef enum { /* -1 */ ENBOMJIMA_ANIM_NONE = -1, @@ -225,9 +225,11 @@ void func_80BFE32C(EnBomjima* this, PlayState* play, s32 arg2) { if (player->transformation == PLAYER_FORM_GORON) { this->unk_2C8 = 1; } - if (player->transformation == PLAYER_FORM_ZORA) { + // #region 2S2H - Enhancements. Fierce Deity gets same dialog as Zora + if (player->transformation == PLAYER_FORM_ZORA || player->transformation == PLAYER_FORM_FIERCE_DEITY) { this->unk_2C8 = 2; } + // #endregion switch (this->unk_2CA) { case 0: diff --git a/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h b/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h index 15b4b10fb..f288b70c1 100644 --- a/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h +++ b/mm/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h @@ -37,7 +37,7 @@ typedef struct EnBomjima { /* 0x2C2 */ s16 unk_2C2; /* 0x2C4 */ s16 cutsceneTimer; /* 0x2C6 */ s16 unk_2C6; - /* 0x2C8 */ s16 unk_2C8; + /* 0x2C8 */ s16 unk_2C8; //index into arrays of textIDs /* 0x2CA */ s16 unk_2CA; /* 0x2CC */ f32 animEndFrame; /* 0x2D0 */ f32 unk_2D0; From 2e4710c6c2d165de9ca8d4fe0eab29f2dbcfb110 Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Mon, 24 Jun 2024 23:16:10 -0500 Subject: [PATCH 20/21] Tweaks to warp point (#666) * Tweaks to warp point * wait for console logo exit --------- Co-authored-by: Archez --- mm/2s2h/BenGui/BenMenuBar.cpp | 1 - mm/2s2h/DeveloperTools/DeveloperTools.cpp | 1 + mm/2s2h/DeveloperTools/DeveloperTools.h | 2 + mm/2s2h/DeveloperTools/WarpPoint.cpp | 64 ++++++++++++++++--- mm/2s2h/DeveloperTools/WarpPoint.h | 6 -- mm/2s2h/Enhancements/Cutscenes/Cutscenes.cpp | 1 + mm/2s2h/Enhancements/Cutscenes/Cutscenes.h | 1 + .../Cutscenes/SkipToFileSelect.cpp | 33 ++++++++++ .../GameInteractor/GameInteractor.cpp | 4 ++ .../GameInteractor/GameInteractor.h | 2 + mm/include/variables.h | 1 + mm/src/code/game.c | 6 ++ .../overlays/gamestates/ovl_title/z_title.c | 13 ++-- 13 files changed, 109 insertions(+), 26 deletions(-) delete mode 100644 mm/2s2h/DeveloperTools/WarpPoint.h create mode 100644 mm/2s2h/Enhancements/Cutscenes/SkipToFileSelect.cpp diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 764d2ea65..37089aa7f 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -12,7 +12,6 @@ #include "2s2h/Enhancements/Graphics/PlayAsKafei.h" #include "2s2h/Enhancements/Modes/TimeMovesWhenYouMove.h" #include "2s2h/DeveloperTools/DeveloperTools.h" -#include "2s2h/DeveloperTools/WarpPoint.h" #include "2s2h/Enhancements/Cheats/Cheats.h" #include "2s2h/Enhancements/Player/Player.h" #include "HudEditor.h" diff --git a/mm/2s2h/DeveloperTools/DeveloperTools.cpp b/mm/2s2h/DeveloperTools/DeveloperTools.cpp index fe0d9606d..316d851e5 100644 --- a/mm/2s2h/DeveloperTools/DeveloperTools.cpp +++ b/mm/2s2h/DeveloperTools/DeveloperTools.cpp @@ -155,4 +155,5 @@ void InitDeveloperTools() { RegisterPreventActorUpdateHooks(); RegisterPreventActorDrawHooks(); RegisterPreventActorInitHooks(); + RegisterWarpPoint(); } diff --git a/mm/2s2h/DeveloperTools/DeveloperTools.h b/mm/2s2h/DeveloperTools/DeveloperTools.h index 3723d75d6..93c361b99 100644 --- a/mm/2s2h/DeveloperTools/DeveloperTools.h +++ b/mm/2s2h/DeveloperTools/DeveloperTools.h @@ -11,6 +11,8 @@ void RegisterDebugSaveCreate(); void RegisterPreventActorUpdateHooks(); void RegisterPreventActorDrawHooks(); void RegisterPreventActorInitHooks(); +void RegisterWarpPoint(); +void RenderWarpPointSection(); void InitDeveloperTools(); #endif // DEVELOPER_TOOLS_H diff --git a/mm/2s2h/DeveloperTools/WarpPoint.cpp b/mm/2s2h/DeveloperTools/WarpPoint.cpp index cde2fb3e6..619d2ccfd 100644 --- a/mm/2s2h/DeveloperTools/WarpPoint.cpp +++ b/mm/2s2h/DeveloperTools/WarpPoint.cpp @@ -1,15 +1,16 @@ -#include "WarpPoint.h" - #include #include "2s2h/BenGui/UIWidgets.hpp" #include "window/gui/IconsFontAwesome4.h" +#include "2s2h/Enhancements/GameInteractor/GameInteractor.h" extern "C" { #include "z64.h" #include "macros.h" #include "functions.h" +#include "overlays/gamestates/ovl_select/z_select.h" extern PlayState* gPlayState; extern SaveContext gSaveContext; +extern GameState* gGameState; } #define CV "gDeveloperTools.WarpPoint." @@ -27,6 +28,56 @@ std::unordered_map warpPointSceneList = { #undef DEFINE_SCENE #undef DEFINE_SCENE_UNSET +void Warp() { + Vec3f pos = { CVarGetFloat(CV "X", 0.0f), CVarGetFloat(CV "Y", 0.0f), CVarGetFloat(CV "Z", 0.0f) }; + s32 entrance = CVarGetInteger(CV "Entrance", ENTRANCE(SOUTH_CLOCK_TOWN, 0)); + + if (gPlayState == NULL) { + // If gPlayState is NULL, it means the the user opted into BootToWarpPoint and the game is starting up. This is + // a hidden cvar for developers, while it is extremely useful for quick testing and debugging, I am not 100% + // confident in it's stability and ability to initialize the game properly in all cases. So for now, I'm going + // to leave it as a hidden cvar. This is incompatible with the SkipToFileSelect enhancement. To enable it open + // the Console and type: `set gDeveloperTools.WarpPoint.BootToWarpPoint 1` + gSaveContext.gameMode = GAMEMODE_NORMAL; + Sram_InitNewSave(); + gSaveContext.sceneLayer = 0; + gSaveContext.save.time = CLOCK_TIME(8, 0); + gSaveContext.save.day = 1; + gSaveContext.save.cutsceneIndex = 0; + gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; + gSaveContext.save.linkAge = 0; + gSaveContext.fileNum = 0xFF; + MapSelect_LoadGame((MapSelectState*)gGameState, CVarGetInteger(CV "Entrance", 0), 0); + } else { + // The else case, and the rest of this function is primarly relevant code copied from Play_SetRespawnData and + // func_80169EFC, minus the parts that copy scene flags to scene we are warping to (this is obviously + // undesireable) + gPlayState->nextEntrance = Entrance_Create(entrance >> 9, 0, entrance & 0xF); + gPlayState->transitionTrigger = TRANS_TRIGGER_START; + gPlayState->transitionType = TRANS_TYPE_INSTANT; + } + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = Entrance_Create(entrance >> 9, 0, entrance & 0xF); + gSaveContext.respawn[RESPAWN_MODE_DOWN].roomIndex = CVarGetInteger(CV "Room", 0); + gSaveContext.respawn[RESPAWN_MODE_DOWN].pos = pos; + gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw = CVarGetFloat(CV "Rotation", 0.0f); + gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_D); + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_FAST; + gSaveContext.respawnFlag = -8; +} + +void RegisterWarpPoint() { + GameInteractor::Instance->RegisterGameHook([]() { + if (!CVarGetInteger("gEnhancements.Cutscenes.SkipToFileSelect", 0) && CVarGetInteger(CV "BootToWarpPoint", 0) && + CVarGetInteger(CV "Saved", 0)) { + // Normally called on console logo screen + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; + Warp(); + } + }); +} + void RenderWarpPointSection() { if (gPlayState == NULL) return; @@ -60,14 +111,7 @@ void RenderWarpPointSection() { } ImGui::SameLine(); if (UIWidgets::Button("Warp", { .size = UIWidgets::Sizes::Inline })) { - Vec3f pos = { CVarGetFloat(CV "X", 0.0f), CVarGetFloat(CV "Y", 0.0f), CVarGetFloat(CV "Z", 0.0f) }; - - Play_SetRespawnData(&gPlayState->state, RESPAWN_MODE_DOWN, - CVarGetInteger(CV "Entrance", ENTRANCE(SOUTH_CLOCK_TOWN, 0)), - CVarGetInteger(CV "Room", 0), PLAYER_PARAMS(0xFF, PLAYER_INITMODE_D), &pos, - CVarGetFloat(CV "Rotation", 0.0f)); - func_80169EFC(&gPlayState->state); - gSaveContext.respawnFlag = -8; + Warp(); } } } diff --git a/mm/2s2h/DeveloperTools/WarpPoint.h b/mm/2s2h/DeveloperTools/WarpPoint.h deleted file mode 100644 index 5a6a10883..000000000 --- a/mm/2s2h/DeveloperTools/WarpPoint.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef DEVELOPER_TOOLS_WARP_POINT_H -#define DEVELOPER_TOOLS_WARP_POINT_H - -void RenderWarpPointSection(); - -#endif // DEVELOPER_TOOLS_WARP_POINT_H diff --git a/mm/2s2h/Enhancements/Cutscenes/Cutscenes.cpp b/mm/2s2h/Enhancements/Cutscenes/Cutscenes.cpp index fe480a3f5..ecfc074bf 100644 --- a/mm/2s2h/Enhancements/Cutscenes/Cutscenes.cpp +++ b/mm/2s2h/Enhancements/Cutscenes/Cutscenes.cpp @@ -12,4 +12,5 @@ void RegisterCutscenes() { RegisterHideTitleCards(); RegisterSkipEntranceCutscenes(); RegisterSkipIntroSequence(); + RegisterSkipToFileSelect(); } diff --git a/mm/2s2h/Enhancements/Cutscenes/Cutscenes.h b/mm/2s2h/Enhancements/Cutscenes/Cutscenes.h index fcd955512..cca8e49af 100644 --- a/mm/2s2h/Enhancements/Cutscenes/Cutscenes.h +++ b/mm/2s2h/Enhancements/Cutscenes/Cutscenes.h @@ -14,5 +14,6 @@ void RegisterSkipClockTowerOpen(); void RegisterHideTitleCards(); void RegisterSkipEntranceCutscenes(); void RegisterSkipIntroSequence(); +void RegisterSkipToFileSelect(); #endif // CUTSCENES_H diff --git a/mm/2s2h/Enhancements/Cutscenes/SkipToFileSelect.cpp b/mm/2s2h/Enhancements/Cutscenes/SkipToFileSelect.cpp new file mode 100644 index 000000000..1b1e4e029 --- /dev/null +++ b/mm/2s2h/Enhancements/Cutscenes/SkipToFileSelect.cpp @@ -0,0 +1,33 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" + +extern "C" { +#include "z64.h" +#include "z64game.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" +#include "overlays/gamestates/ovl_title/z_title.h" +extern SaveContext gSaveContext; +extern GameState* gGameState; +} + +void RegisterSkipToFileSelect() { + GameInteractor::Instance->RegisterGameHook([]() { + if (CVarGetInteger("gEnhancements.Cutscenes.SkipToFileSelect", 0)) { + ConsoleLogoState* consoleLogoState = (ConsoleLogoState*)gGameState; + + // Wait for the console logo to fade out + if (consoleLogoState->exit) { + // Normally the PRNG seed is set at least once from the title opening running Play_Init + // We need to call it manually before file select creates RNG values for new saves + Rand_Seed(osGetTime()); + // Normally called on console logo screen + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; + + STOP_GAMESTATE(gGameState); + SET_NEXT_GAMESTATE(gGameState, FileSelect_Init, sizeof(FileSelectState)); + } + } + }); +} diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp index ae7eda45d..d0d9e4218 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.cpp @@ -19,6 +19,10 @@ void GameInteractor_ExecuteOnGameStateUpdate() { GameInteractor::Instance->ExecuteHooks(); } +void GameInteractor_ExecuteOnConsoleLogoUpdate() { + GameInteractor::Instance->ExecuteHooks(); +} + void GameInteractor_ExecuteOnKaleidoUpdate(PauseContext* pauseCtx) { GameInteractor::Instance->ExecuteHooks(pauseCtx); } diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h index 8da2e5ea6..1b2fdb2e9 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h @@ -257,6 +257,7 @@ class GameInteractor { DEFINE_HOOK(OnGameStateMainFinish, ()); DEFINE_HOOK(OnGameStateDrawFinish, ()); DEFINE_HOOK(OnGameStateUpdate, ()); + DEFINE_HOOK(OnConsoleLogoUpdate, ()); DEFINE_HOOK(OnKaleidoUpdate, (PauseContext * pauseCtx)); DEFINE_HOOK(OnSaveInit, (s16 fileNum)); DEFINE_HOOK(BeforeEndOfCycleSave, ()); @@ -300,6 +301,7 @@ extern "C" { void GameInteractor_ExecuteOnGameStateMainFinish(); void GameInteractor_ExecuteOnGameStateDrawFinish(); void GameInteractor_ExecuteOnGameStateUpdate(); +void GameInteractor_ExecuteOnConsoleLogoUpdate(); void GameInteractor_ExecuteOnKaleidoUpdate(PauseContext* pauseCtx); void GameInteractor_ExecuteOnSaveInit(s16 fileNum); void GameInteractor_ExecuteBeforeEndOfCycleSave(); diff --git a/mm/include/variables.h b/mm/include/variables.h index 43d20b140..57fe03b94 100644 --- a/mm/include/variables.h +++ b/mm/include/variables.h @@ -1765,6 +1765,7 @@ extern u16 D_0F000000[]; // #region 2S2H [General] extern PlayState* gPlayState; +extern GameState* gGameState; // #endregion #ifdef __cplusplus diff --git a/mm/src/code/game.c b/mm/src/code/game.c index 1b349289c..7fb04a125 100644 --- a/mm/src/code/game.c +++ b/mm/src/code/game.c @@ -26,6 +26,10 @@ VisZbuf sGameVisZbuf; VisMono sGameVisMono; ViMode sGameViMode; +// #region 2S2H [General] Making gGameState available +GameState* gGameState; +// #endregion + void GameState_UpdateFramerateDivisors(s32 divisor) { gFramerateDivisor = divisor; gFramerateDivisorF = divisor; @@ -205,6 +209,7 @@ void GameState_Realloc(GameState* gameState, size_t size) { } void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* gfxCtx) { + gGameState = gameState; gameState->gfxCtx = gfxCtx; gameState->frames = 0; gameState->main = NULL; @@ -256,6 +261,7 @@ void GameState_Destroy(GameState* gameState) { ViMode_Destroy(&sGameViMode); THA_Destroy(&gameState->tha); GameAlloc_Cleanup(&gameState->alloc); + gGameState = NULL; } GameStateFunc GameState_GetInit(GameState* gameState) { diff --git a/mm/src/overlays/gamestates/ovl_title/z_title.c b/mm/src/overlays/gamestates/ovl_title/z_title.c index ed622dee7..dfc1c3160 100644 --- a/mm/src/overlays/gamestates/ovl_title/z_title.c +++ b/mm/src/overlays/gamestates/ovl_title/z_title.c @@ -11,9 +11,9 @@ #include "overlays/gamestates/ovl_opening/z_opening.h" #include "misc/nintendo_rogo_static/nintendo_rogo_static.h" -#include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "build.h" #include "BenPort.h" +#include "2s2h/Enhancements/GameInteractor/GameInteractor.h" #include #define dgShipLogoDL "__OTR__misc/nintendo_rogo_static/gShipLogoDL" @@ -200,16 +200,11 @@ void ConsoleLogo_Main(GameState* thisx) { gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; STOP_GAMESTATE(&this->state); - if (CVarGetInteger("gEnhancements.Cutscenes.SkipToFileSelect", 0)) { - // Normally the PRNG seed is set at least once from the title opening running Play_Init - // We need to call it manually before file select creates RNG values for new saves - Rand_Seed(osGetTime()); - SET_NEXT_GAMESTATE(&this->state, FileSelect_Init, sizeof(FileSelectState)); - } else { - SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); - } + SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); } + GameInteractor_ExecuteOnConsoleLogoUpdate(); + CLOSE_DISPS(this->state.gfxCtx); } From aa1b0108f41104f95779b5b6361293f81345556c Mon Sep 17 00:00:00 2001 From: balloondude2 <55861555+balloondude2@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:44:08 -0600 Subject: [PATCH 21/21] [Enhancement] Preseve time speed during cycle reset (#658) * preseve time speed during cycle reset enhancement * clang format * update variable assignment Co-authored-by: Archez * add default value * better initial value --------- Co-authored-by: Archez --- mm/2s2h/BenGui/BenMenuBar.cpp | 4 ++++ mm/2s2h/Enhancements/Cycle/EndOfCycle.cpp | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 37089aa7f..465ae3b8a 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -465,6 +465,10 @@ void DrawEnhancementsMenu() { { .tooltip = "Playing the Song Of Time will not reset the Sword back to Kokiri Sword." }); UIWidgets::CVarCheckbox("Do not reset Rupees", "gEnhancements.Cycle.DoNotResetRupees", { .tooltip = "Playing the Song Of Time will not reset the your rupees." }); + UIWidgets::CVarCheckbox( + "Do not reset Time Speed", "gEnhancements.Cycle.DoNotResetTimeSpeed", + { .tooltip = + "Playing the Song Of Time will not reset the current time speed set by Inverted Song of Time." }); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(255, 255, 0, 255)); ImGui::SeparatorText("Unstable"); diff --git a/mm/2s2h/Enhancements/Cycle/EndOfCycle.cpp b/mm/2s2h/Enhancements/Cycle/EndOfCycle.cpp index d1afedaac..9624d337b 100644 --- a/mm/2s2h/Enhancements/Cycle/EndOfCycle.cpp +++ b/mm/2s2h/Enhancements/Cycle/EndOfCycle.cpp @@ -7,10 +7,13 @@ extern "C" { } SaveInfo saveInfoCopy; +s32 timeSpeedOffsetCopy = 0; void RegisterEndOfCycleSaveHooks() { - GameInteractor::Instance->RegisterGameHook( - []() { memcpy(&saveInfoCopy, &gSaveContext.save.saveInfo, sizeof(SaveInfo)); }); + GameInteractor::Instance->RegisterGameHook([]() { + memcpy(&saveInfoCopy, &gSaveContext.save.saveInfo, sizeof(SaveInfo)); + timeSpeedOffsetCopy = gSaveContext.save.timeSpeedOffset; + }); GameInteractor::Instance->RegisterGameHook([]() { if (CVarGetInteger("gEnhancements.Cycle.DoNotResetRupees", 0)) { @@ -77,5 +80,9 @@ void RegisterEndOfCycleSaveHooks() { SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_RAZOR); CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_RAZOR; } + + if (CVarGetInteger("gEnhancements.Cycle.DoNotResetTimeSpeed", 0)) { + gSaveContext.save.timeSpeedOffset = timeSpeedOffsetCopy; + } }); }