From 93f22fcc42238c451697b4c85cb5b800ed1d73b4 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Mon, 7 Oct 2024 11:16:04 +0200 Subject: [PATCH 01/12] [includes] z_collision_check.c (#2252) * [includes] z_collision_check.c * bss --- src/code/z_collision_check.c | 17 +++++++++++++---- .../ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c | 1 + .../ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index 14a12b96b7..41555de22e 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -1,13 +1,22 @@ -#include "global.h" +#include "gfx.h" +#include "macros.h" +#include "regs.h" +#include "sfx.h" +#include "sys_math3d.h" +#include "sys_matrix.h" #include "terminal.h" #include "versions.h" - +#include "z64collision_check.h" +#include "z64effect.h" #include "z64frame_advance.h" +#include "zelda_arena.h" +#include "z64play.h" #include "overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h" +#include "z_lib.h" -#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:208" \ - "pal-1.0:200 pal-1.1:200" +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ + "ntsc-1.2:104 pal-1.0:104 pal-1.1:104" typedef s32 (*ColChkResetFunc)(PlayState*, Collider*); typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*); diff --git a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c index 8a67d26faf..2e279a5b12 100644 --- a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c +++ b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c @@ -5,6 +5,7 @@ */ #include "z_eff_ss_hitmark.h" +#include "global.h" #include "assets/objects/gameplay_keep/gameplay_keep.h" #define rTexIndex regs[0] diff --git a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h index 6859910455..591ba5a7d0 100644 --- a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h +++ b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h @@ -2,7 +2,7 @@ #define Z_EFF_SS_HITMARK_H #include "ultra64.h" -#include "global.h" +#include "z64math.h" typedef struct EffectSsHitMarkInitParams { /* 0x00 */ s32 type; From 7dd8f2b6ad27ef8ec08b21f9575f5ad6f2dc308d Mon Sep 17 00:00:00 2001 From: fig02 Date: Tue, 8 Oct 2024 00:19:10 -0400 Subject: [PATCH 02/12] Document `Player_ChooseNextIdleAnim` (#2262) * document most of Player_ChooseNextIdleAnim * finish documenting Player_ChooseNextIdleAnim * capital letter * dummy block numbers for the script * fix bss * bug comment * SpeicalIdle -> Fidget, clean up related things * fix rng chance comment * normal -> default * rework Player_CheckForIdleAnim * swap idle anim defines * remove COMMON_FIDGET * add ARRAY_COUNT_2D * change macro def --- include/macros.h | 1 + include/z64player.h | 10 +- src/boot/z_std_dma.c | 2 +- src/code/main.c | 2 +- src/code/z_bgcheck.c | 2 +- src/code/z_camera.c | 2 +- src/code/z_demo.c | 2 +- src/code/z_kaleido_scope_call.c | 2 +- src/code/z_kankyo.c | 6 +- src/overlays/actors/ovl_Boss_Va/z_boss_va.c | 2 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 3 + src/overlays/actors/ovl_En_Ru1/z_en_ru1.c | 2 +- src/overlays/actors/ovl_Fishing/z_fishing.c | 2 +- .../actors/ovl_player_actor/z_player.c | 327 +++++++++++------- 14 files changed, 232 insertions(+), 133 deletions(-) diff --git a/include/macros.h b/include/macros.h index dc317c22bf..744fd51cb0 100644 --- a/include/macros.h +++ b/include/macros.h @@ -18,6 +18,7 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0])) +#define ARRAY_COUNT_2D(arr) (s32)(sizeof(arr) / sizeof(arr[0][0])) #define PHYSICAL_TO_VIRTUAL(addr) (void*)((uintptr_t)(addr) + 0x80000000) #define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - 0x80000000) diff --git a/include/z64player.h b/include/z64player.h index d717903483..1f92088ad9 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -70,6 +70,12 @@ typedef enum PlayerEnvHazard { /* 0x4 */ PLAYER_ENV_HAZARD_UNDERWATER_FREE } PlayerEnvHazard; +typedef enum PlayerIdleType { + /* -0x1 */ PLAYER_IDLE_CRIT_HEALTH = -1, + /* 0x0 */ PLAYER_IDLE_DEFAULT, + /* 0x1 */ PLAYER_IDLE_FIDGET +} PlayerIdleType; + typedef enum PlayerItemAction { /* 0x00 */ PLAYER_IA_NONE, /* 0x01 */ PLAYER_IA_SWORD_CS, // Hold sword without shield in hand. The sword is not usable. @@ -724,7 +730,7 @@ typedef struct WeaponInfo { #define PLAYER_STATE2_25 (1 << 25) #define PLAYER_STATE2_26 (1 << 26) #define PLAYER_STATE2_27 (1 << 27) -#define PLAYER_STATE2_28 (1 << 28) +#define PLAYER_STATE2_IDLE_FIDGET (1 << 28) // Playing a fidget idle animation (under typical circumstances, see `Player_ChooseNextIdleAnim` for more info) #define PLAYER_STATE2_29 (1 << 29) #define PLAYER_STATE2_30 (1 << 30) #define PLAYER_STATE2_31 (1 << 31) @@ -830,7 +836,7 @@ typedef struct Player { /* 0x06A0 */ f32 unk_6A0; /* 0x06A4 */ f32 closestSecretDistSq; /* 0x06A8 */ Actor* unk_6A8; - /* 0x06AC */ s8 unk_6AC; + /* 0x06AC */ s8 idleType; /* 0x06AD */ u8 unk_6AD; /* 0x06AE */ u16 unk_6AE; /* 0x06B0 */ s16 unk_6B0; diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c index 3c6019182b..f67e9eeec7 100644 --- a/src/boot/z_std_dma.c +++ b/src/boot/z_std_dma.c @@ -27,7 +27,7 @@ #endif #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ - "ntsc-1.2:94 pal-1.0:92 pal-1.1:92" + "ntsc-1.2:92 pal-1.0:90 pal-1.1:90" StackEntry sDmaMgrStackInfo; OSMesgQueue sDmaMgrMsgQueue; diff --git a/src/code/main.c b/src/code/main.c index 03831ffb32..8e572bdce3 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -23,7 +23,7 @@ extern struct IrqMgr gIrqMgr; #endif #pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \ - "ntsc-1.2:154 pal-1.0:152 pal-1.1:152" + "ntsc-1.2:151 pal-1.0:149 pal-1.1:149" extern u8 _buffersSegmentEnd[]; diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 431578d36f..e1960e6d11 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1,7 +1,7 @@ #include "global.h" #include "terminal.h" -#pragma increment_block_number "ntsc-1.2:140" +#pragma increment_block_number "ntsc-1.2:136" u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList); void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector); diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 6e092f7354..053151a42c 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -3639,7 +3639,7 @@ s32 Camera_KeepOn3(Camera* camera) { } #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ - "ntsc-1.2:96 pal-1.0:94 pal-1.1:94" + "ntsc-1.2:93 pal-1.0:91 pal-1.1:91" s32 Camera_KeepOn4(Camera* camera) { static Vec3f D_8015BD50; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index cada27694b..4b48261cd7 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -124,7 +124,7 @@ u16 gCamAtSplinePointsAppliedFrame; u16 gCamEyePointAppliedFrame; u16 gCamAtPointAppliedFrame; -#pragma increment_block_number "gc-eu:192 gc-eu-mq:176 gc-jp:192 gc-jp-ce:192 gc-jp-mq:176 gc-us:192 gc-us-mq:176" \ +#pragma increment_block_number "gc-eu:188 gc-eu-mq:176 gc-jp:188 gc-jp-ce:188 gc-jp-mq:176 gc-us:188 gc-us-mq:176" \ "ntsc-1.2:80 pal-1.0:80 pal-1.1:80" // Cam ID to return to when a scripted cutscene is finished diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index 985b6c3b70..0b18477e5b 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -1,5 +1,5 @@ #pragma increment_block_number "gc-eu:224 gc-eu-mq:224 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \ - "ntsc-1.2:0" + "ntsc-1.2:224 pal-1.0:224 pal-1.1:224" #include "global.h" #include "terminal.h" diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 27157ae2e9..f6cde3a952 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -1,5 +1,5 @@ -#pragma increment_block_number "gc-eu:248 gc-eu-mq:248 gc-jp:240 gc-jp-ce:240 gc-jp-mq:240 gc-us:240 gc-us-mq:240" \ - "ntsc-1.2:0 pal-1.0:252 pal-1.1:252" +#pragma increment_block_number "gc-eu:244 gc-eu-mq:244 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \ + "ntsc-1.2:224 pal-1.0:252 pal-1.1:252" #include "global.h" #include "ultra64.h" @@ -215,7 +215,7 @@ s16 sSunDepthTestX; s16 sSunDepthTestY; #pragma increment_block_number "gc-eu:240 gc-eu-mq:240 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \ - "ntsc-1.2:216 pal-1.0:240 pal-1.1:240" + "ntsc-1.2:224 pal-1.0:240 pal-1.1:240" LightNode* sNGameOverLightNode; LightInfo sNGameOverLightInfo; diff --git a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c index 5fc0865c51..dac0649e4c 100644 --- a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c +++ b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c @@ -10,7 +10,7 @@ #include "assets/objects/gameplay_keep/gameplay_keep.h" #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ - "ntsc-1.2:128" + "ntsc-1.2:128 pal-1.0:128 pal-1.1:128" #define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5) diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index 11525d2fc2..9cb632da8a 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -6,6 +6,9 @@ #include "assets/objects/object_efc_star_field/object_efc_star_field.h" #include "assets/objects/object_toki_objects/object_toki_objects.h" +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ + "ntsc-1.2:128" + #define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5) void DemoKankyo_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c index c6c8effa6a..fc5a5a441c 100644 --- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c +++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c @@ -1658,7 +1658,7 @@ void func_80AEE7C4(EnRu1* this, PlayState* play) { *unk_370 = 0.0f; } else { player = GET_PLAYER(play); - if (player->stateFlags2 & PLAYER_STATE2_28) { + if (player->stateFlags2 & PLAYER_STATE2_IDLE_FIDGET) { this->unk_370 += 1.0f; if (this->action != 32) { if (*unk_370 > 30.0f) { diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c index 72fe16901f..255d5fc336 100644 --- a/src/overlays/actors/ovl_Fishing/z_fishing.c +++ b/src/overlays/actors/ovl_Fishing/z_fishing.c @@ -35,7 +35,7 @@ #include "cic6105.h" #endif -#pragma increment_block_number "gc-eu:183 gc-eu-mq:183 gc-jp:183 gc-jp-ce:183 gc-jp-mq:183 gc-us:183 gc-us-mq:183" \ +#pragma increment_block_number "gc-eu:180 gc-eu-mq:180 gc-jp:180 gc-jp-ce:180 gc-jp-mq:180 gc-us:180 gc-us-mq:180" \ "ntsc-1.2:128 pal-1.0:128 pal-1.1:128" #define FLAGS ACTOR_FLAG_4 diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index c2937c1d9d..82afb14714 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -1118,40 +1118,84 @@ static LinkAnimationHeader* D_80853D4C[][3] = { &gPlayerAnim_link_fighter_Rside_jump_endR }, }; -static LinkAnimationHeader* sSpecialIdleAnimations[][2] = { +typedef enum FidgetType { + /* 0x00 */ FIDGET_LOOK_AROUND, + /* 0x01 */ FIDGET_COLD, + /* 0x02 */ FIDGET_WARM, + /* 0x03 */ FIDGET_HOT, // same animations as FIDGET_WARM + /* 0x04 */ FIDGET_STRETCH_1, + /* 0x05 */ FIDGET_STRETCH_2, // same animations as FIDGET_STRETCH_1 + /* 0x06 */ FIDGET_STRETCH_3, // same animations as FIDGET_STRETCH_1 + /* 0x07 */ FIDGET_CRIT_HEALTH_START, + /* 0x08 */ FIDGET_CRIT_HEALTH_LOOP, + /* 0x09 */ FIDGET_SWORD_SWING, + /* 0x0A */ FIDGET_ADJUST_TUNIC, + /* 0x0B */ FIDGET_TAP_FEET, + /* 0x0C */ FIDGET_ADJUST_SHIELD, + /* 0x0D */ FIDGET_SWORD_SWING_TWO_HAND +} FidgetType; + +static LinkAnimationHeader* sFidgetAnimations[][2] = { + // FIDGET_LOOK_AROUND { &gPlayerAnim_link_normal_wait_typeA_20f, &gPlayerAnim_link_normal_waitF_typeA_20f }, + + // FIDGET_COLD { &gPlayerAnim_link_normal_wait_typeC_20f, &gPlayerAnim_link_normal_waitF_typeC_20f }, + + // FIDGET_WARM { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, + + // FIDGET_HOT { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, + + // FIDGET_STRETCH_1 { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, + + // FIDGET_STRETCH_2 { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, + + // FIDGET_STRETCH_3 { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, + + // FIDGET_CRIT_HEALTH_START { &gPlayerAnim_link_wait_heat1_20f, &gPlayerAnim_link_waitF_heat1_20f }, + + // FIDGET_CRIT_HEALTH_LOOP { &gPlayerAnim_link_wait_heat2_20f, &gPlayerAnim_link_waitF_heat2_20f }, + + // FIDGET_SWORD_SWING { &gPlayerAnim_link_wait_itemD1_20f, &gPlayerAnim_link_wait_itemD1_20f }, + + // FIDGET_ADJUST_TUNIC { &gPlayerAnim_link_wait_itemA_20f, &gPlayerAnim_link_waitF_itemA_20f }, + + // FIDGET_TAP_FEET { &gPlayerAnim_link_wait_itemB_20f, &gPlayerAnim_link_waitF_itemB_20f }, + + // FIDGET_ADJUST_SHIELD { &gPlayerAnim_link_wait_itemC_20f, &gPlayerAnim_link_wait_itemC_20f }, + + // FIDGET_SWORD_SWING_TWO_HAND { &gPlayerAnim_link_wait_itemD2_20f, &gPlayerAnim_link_wait_itemD2_20f } }; -static AnimSfxEntry sSpecialIdleAnimSfxSneeze[] = { +static AnimSfxEntry sFidgetAnimSfxSneeze[] = { { NA_SE_VO_LI_SNEEZE, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 8) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxSweat[] = { +static AnimSfxEntry sFidgetAnimSfxSweat[] = { { NA_SE_VO_LI_SWEAT, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 18) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxHeat1[] = { +static AnimSfxEntry sFidgetAnimSfxCritHealthStart[] = { { NA_SE_VO_LI_BREATH_REST, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 13) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxHeat2[] = { +static AnimSfxEntry sFidgetAnimSfxCritHealthLoop[] = { { NA_SE_VO_LI_BREATH_REST, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 10) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxBelt[] = { +static AnimSfxEntry sFidgetAnimSfxTunic[] = { { NA_SE_PL_CALM_HIT, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 44) }, { NA_SE_PL_CALM_HIT, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 48) }, { NA_SE_PL_CALM_HIT, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 52) }, @@ -1159,96 +1203,96 @@ static AnimSfxEntry sSpecialIdleAnimSfxBelt[] = { { NA_SE_PL_CALM_HIT, -ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 60) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxFootTap[] = { +static AnimSfxEntry sFidgetAnimSfxTapFeet[] = { { 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 25) }, { 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 30) }, { 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 44) }, { 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 48) }, { 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 52) }, { 0, -ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 56) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxShield[] = { +static AnimSfxEntry sFidgetAnimSfxShield[] = { { NA_SE_IT_SHIELD_POSTURE, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 16) }, { NA_SE_IT_SHIELD_POSTURE, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 20) }, { NA_SE_IT_SHIELD_POSTURE, -ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 70) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxSword1[] = { +static AnimSfxEntry sFidgetAnimSfxSword[] = { { NA_SE_IT_HAMMER_SWING, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 10) }, { NA_SE_VO_LI_AUTO_JUMP, ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 10) }, { NA_SE_IT_SWORD_SWING, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 22) }, { NA_SE_VO_LI_SWORD_N, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 22) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxSword2[] = { +static AnimSfxEntry sFidgetAnimSfxSwordTwoHand[] = { { NA_SE_IT_SWORD_SWING, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 39) }, { NA_SE_VO_LI_SWORD_N, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 39) }, }; -static AnimSfxEntry sSpecialIdleAnimSfxRelax[] = { +static AnimSfxEntry sFidgetAnimSfxStretch[] = { { NA_SE_VO_LI_RELAX, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 20) }, }; -typedef enum SpecialIdleAnimSfxType { - /* 0x0 */ SPECIAL_IDLE_ANIMSFX_NONE, - /* 0x1 */ SPECIAL_IDLE_ANIMSFX_SNEEZE, - /* 0x2 */ SPECIAL_IDLE_ANIMSFX_SWEAT, - /* 0x3 */ SPECIAL_IDLE_ANIMSFX_HEAT_1, - /* 0x4 */ SPECIAL_IDLE_ANIMSFX_HEAT_2, - /* 0x5 */ SPECIAL_IDLE_ANIMSFX_BELT, - /* 0x6 */ SPECIAL_IDLE_ANIMSFX_FOOT_TAP, - /* 0x7 */ SPECIAL_IDLE_ANIMSFX_SHIELD, - /* 0x8 */ SPECIAL_IDLE_ANIMSFX_SWORD_1, - /* 0x9 */ SPECIAL_IDLE_ANIMSFX_SWORD_2, - /* 0xA */ SPECIAL_IDLE_ANIMSFX_RELAX, -} SpecialIdleAnimSfxType; +typedef enum FidgetAnimSfxType { + /* 0x0 */ FIDGET_ANIMSFX_NONE, + /* 0x1 */ FIDGET_ANIMSFX_SNEEZE, + /* 0x2 */ FIDGET_ANIMSFX_SWEAT, + /* 0x3 */ FIDGET_ANIMSFX_CRIT_HEALTH_START, + /* 0x4 */ FIDGET_ANIMSFX_CRIT_HEALTH_LOOP, + /* 0x5 */ FIDGET_ANIMSFX_TUNIC, + /* 0x6 */ FIDGET_ANIMSFX_TAP_FEET, + /* 0x7 */ FIDGET_ANIMSFX_SHIELD, + /* 0x8 */ FIDGET_ANIMSFX_SWORD, + /* 0x9 */ FIDGET_ANIMSFX_SWORD_TWO_HAND, + /* 0xA */ FIDGET_ANIMSFX_STRETCH +} FidgetAnimSfxType; -static AnimSfxEntry* sSpecialIdleAnimSfxLists[] = { - sSpecialIdleAnimSfxSneeze, // SPECIAL_IDLE_ANIMSFX_SNEEZE - sSpecialIdleAnimSfxSweat, // SPECIAL_IDLE_ANIMSFX_SWEAT - sSpecialIdleAnimSfxHeat1, // SPECIAL_IDLE_ANIMSFX_HEAT_1 - sSpecialIdleAnimSfxHeat2, // SPECIAL_IDLE_ANIMSFX_HEAT_2 - sSpecialIdleAnimSfxBelt, // SPECIAL_IDLE_ANIMSFX_BELT - sSpecialIdleAnimSfxFootTap, // SPECIAL_IDLE_ANIMSFX_FOOT_TAP - sSpecialIdleAnimSfxShield, // SPECIAL_IDLE_ANIMSFX_SHIELD - sSpecialIdleAnimSfxSword1, // SPECIAL_IDLE_ANIMSFX_SWORD_1 - sSpecialIdleAnimSfxSword2, // SPECIAL_IDLE_ANIMSFX_SWORD_2 - sSpecialIdleAnimSfxRelax, // SPECIAL_IDLE_ANIMSFX_RELAX - NULL, // unused entry +static AnimSfxEntry* sFidgetAnimSfxLists[] = { + sFidgetAnimSfxSneeze, // FIDGET_ANIMSFX_SNEEZE + sFidgetAnimSfxSweat, // FIDGET_ANIMSFX_SWEAT + sFidgetAnimSfxCritHealthStart, // FIDGET_ANIMSFX_CRIT_HEALTH_START + sFidgetAnimSfxCritHealthLoop, // FIDGET_ANIMSFX_CRIT_HEALTH_LOOP + sFidgetAnimSfxTunic, // FIDGET_ANIMSFX_TUNIC + sFidgetAnimSfxTapFeet, // FIDGET_ANIMSFX_TAP_FEET + sFidgetAnimSfxShield, // FIDGET_ANIMSFX_SHIELD + sFidgetAnimSfxSword, // FIDGET_ANIMSFX_SWORD + sFidgetAnimSfxSwordTwoHand, // FIDGET_ANIMSFX_SWORD_TWO_HAND + sFidgetAnimSfxStretch, // FIDGET_ANIMSFX_STRETCH + NULL, // unused entry }; /** - * The indices in this array correspond 1 to 1 with the entries of sSpecialIdleAnimations. - * There is also an extra SPECIAL_IDLE_ANIMSFX_NONE at the end that doesn't correspond to any animation. + * The indices in this array correspond 1 to 1 with the entries of sFidgetAnimations. + * There is also an extra FIDGET_ANIMSFX_NONE at the end that doesn't correspond to any animation. */ -static u8 sSpecialIdleAnimSfxTypes[] = { - SPECIAL_IDLE_ANIMSFX_NONE, // used by gPlayerAnim_link_normal_wait_typeA_20f - SPECIAL_IDLE_ANIMSFX_NONE, // used by gPlayerAnim_link_normal_waitF_typeA_20f - SPECIAL_IDLE_ANIMSFX_SNEEZE, // used by gPlayerAnim_link_normal_wait_typeC_20f - SPECIAL_IDLE_ANIMSFX_SNEEZE, // used by gPlayerAnim_link_normal_waitF_typeC_20f - SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_wait_typeB_20f - SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_waitF_typeB_20f - SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_wait_typeB_20f - SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_waitF_typeB_20f - SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_wait_typeD_20f - SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_waitF_typeD_20f - SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_wait_typeD_20f - SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_waitF_typeD_20f - SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_wait_typeD_20f - SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_waitF_typeD_20f - SPECIAL_IDLE_ANIMSFX_HEAT_1, // used by gPlayerAnim_link_wait_heat1_20f - SPECIAL_IDLE_ANIMSFX_HEAT_1, // used by gPlayerAnim_link_waitF_heat1_20f - SPECIAL_IDLE_ANIMSFX_HEAT_2, // used by gPlayerAnim_link_wait_heat2_20f - SPECIAL_IDLE_ANIMSFX_HEAT_2, // used by gPlayerAnim_link_waitF_heat2_20f - SPECIAL_IDLE_ANIMSFX_SWORD_1, // used by gPlayerAnim_link_wait_itemD1_20f - SPECIAL_IDLE_ANIMSFX_SWORD_1, // used by gPlayerAnim_link_wait_itemD1_20f - SPECIAL_IDLE_ANIMSFX_BELT, // used by gPlayerAnim_link_wait_itemA_20f - SPECIAL_IDLE_ANIMSFX_BELT, // used by gPlayerAnim_link_waitF_itemA_20f - SPECIAL_IDLE_ANIMSFX_FOOT_TAP, // used by gPlayerAnim_link_wait_itemB_20f - SPECIAL_IDLE_ANIMSFX_FOOT_TAP, // used by gPlayerAnim_link_waitF_itemB_20f - SPECIAL_IDLE_ANIMSFX_SHIELD, // used by gPlayerAnim_link_wait_itemC_20f - SPECIAL_IDLE_ANIMSFX_SHIELD, // used by gPlayerAnim_link_wait_itemC_20f - SPECIAL_IDLE_ANIMSFX_SWORD_2, // used by gPlayerAnim_link_wait_itemD2_20f - SPECIAL_IDLE_ANIMSFX_SWORD_2, // used by gPlayerAnim_link_wait_itemD2_20f - SPECIAL_IDLE_ANIMSFX_NONE, // unused, doesnt correspond to any animation +static u8 sFidgetAnimSfxTypes[] = { + FIDGET_ANIMSFX_NONE, // FIDGET_LOOK_AROUND + FIDGET_ANIMSFX_NONE, // FIDGET_LOOK_AROUND (sword/shield in hand) + FIDGET_ANIMSFX_SNEEZE, // FIDGET_COLD + FIDGET_ANIMSFX_SNEEZE, // FIDGET_COLD (sword/shield in hand) + FIDGET_ANIMSFX_SWEAT, // FIDGET_WARM + FIDGET_ANIMSFX_SWEAT, // FIDGET_WARM (sword/shield in hand) + FIDGET_ANIMSFX_SWEAT, // FIDGET_HOT + FIDGET_ANIMSFX_SWEAT, // FIDGET_HOT (sword/shield in hand) + FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_1 + FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_1 (sword/shield in hand) + FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_2 + FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_2 (sword/shield in hand) + FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_3 + FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_3 (sword/shield in hand) + FIDGET_ANIMSFX_CRIT_HEALTH_START, // FIDGET_CRIT_HEALTH_START + FIDGET_ANIMSFX_CRIT_HEALTH_START, // FIDGET_CRIT_HEALTH_START (sword/shield in hand) + FIDGET_ANIMSFX_CRIT_HEALTH_LOOP, // FIDGET_CRIT_HEALTH_LOOP + FIDGET_ANIMSFX_CRIT_HEALTH_LOOP, // FIDGET_CRIT_HEALTH_LOOP (sword/shield in hand) + FIDGET_ANIMSFX_SWORD, // FIDGET_SWORD_SWING + FIDGET_ANIMSFX_SWORD, // FIDGET_SWORD_SWING (sword/shield in hand) + FIDGET_ANIMSFX_TUNIC, // FIDGET_ADJUST_TUNIC + FIDGET_ANIMSFX_TUNIC, // FIDGET_ADJUST_TUNIC (sword/shield in hand) + FIDGET_ANIMSFX_TAP_FEET, // FIDGET_TAP_FEET + FIDGET_ANIMSFX_TAP_FEET, // FIDGET_TAP_FEET (sword/shield in hand) + FIDGET_ANIMSFX_SHIELD, // FIDGET_ADJUST_SHIELD + FIDGET_ANIMSFX_SHIELD, // FIDGET_ADJUST_SHIELD (sword/shield in hand) + FIDGET_ANIMSFX_SWORD_TWO_HAND, // FIDGET_SWORD_SWING_TWO_HAND + FIDGET_ANIMSFX_SWORD_TWO_HAND, // FIDGET_SWORD_SWING_TWO_HAND (sword/shield in hand) + FIDGET_ANIMSFX_NONE, // unused, doesnt correspond to any animation }; // Used to map item IDs to item actions @@ -2192,41 +2236,49 @@ void func_808332F4(Player* this, PlayState* play) { /** * Get the appropriate Idle animation based on current `modelAnimType`. - * This is used as the "primary" idle animation. + * This is the default idle animation. * - * For special idle animations (which for example, change based on environment) - * see `sSpecialIdleAnimations`. + * For fidget idle animations (which can for example, change based on environment) + * see `sFidgetAnimations`. */ LinkAnimationHeader* Player_GetIdleAnim(Player* this) { return GET_PLAYER_ANIM(PLAYER_ANIMGROUP_wait, this->modelAnimType); } /** - * Checks if the current animation is a "special" idle animation. - * If it is, the index into `sSpecialIdleAnimations` is returned (plus one). - * If the current animation is a "primary" idle animation, -1 is returned. + * Return values for `Player_CheckForIdleAnim` + */ +#define IDLE_ANIM_DEFAULT -1 +#define IDLE_ANIM_NONE 0 +// Fidget idle anims are returned by index. See `sFidgetAnimations` and `FidgetType`. + +/** + * Checks if the current animation is an idle animation. + * If the current animation is a fidget animation, the index into + * `sFidgetAnimations` is returned (plus one). + * If the current animation is a default idle animation, -1 is returned. * Lastly if the current animation is neither of these, 0 is returned. */ -s32 Player_CheckSpecialIdleAnim(Player* this) { +s32 Player_CheckForIdleAnim(Player* this) { if (Player_GetIdleAnim(this) != this->skelAnime.animation) { - LinkAnimationHeader** specialAnim; + LinkAnimationHeader** fidgetAnim; s32 i; - for (i = 0, specialAnim = &sSpecialIdleAnimations[0][0]; i < 28; i++, specialAnim++) { - if (this->skelAnime.animation == *specialAnim) { + for (i = 0, fidgetAnim = &sFidgetAnimations[0][0]; i < ARRAY_COUNT_2D(sFidgetAnimations); i++, fidgetAnim++) { + if (this->skelAnime.animation == *fidgetAnim) { return i + 1; } } - return 0; + return IDLE_ANIM_NONE; } - return -1; + return IDLE_ANIM_DEFAULT; } -void Player_ProcessSpecialIdleAnimSfxList(Player* this, s32 specialIdleAnimIndex) { - if (sSpecialIdleAnimSfxTypes[specialIdleAnimIndex] != SPECIAL_IDLE_ANIMSFX_NONE) { - Player_ProcessAnimSfxList(this, sSpecialIdleAnimSfxLists[sSpecialIdleAnimSfxTypes[specialIdleAnimIndex] - 1]); +void Player_ProcessFidgetAnimSfxList(Player* this, s32 fidgetAnimIndex) { + if (sFidgetAnimSfxTypes[fidgetAnimIndex] != FIDGET_ANIMSFX_NONE) { + Player_ProcessAnimSfxList(this, sFidgetAnimSfxLists[sFidgetAnimSfxTypes[fidgetAnimIndex] - 1]); } } @@ -2792,7 +2844,7 @@ void func_80834644(PlayState* play, Player* this) { Player_SetUpperActionFunc(this, sItemActionUpdateFuncs[this->heldItemAction]); this->unk_834 = 0; - this->unk_6AC = 0; + this->idleType = PLAYER_IDLE_DEFAULT; Player_DetachHeldActor(play, this); this->stateFlags1 &= ~PLAYER_STATE1_START_CHANGING_HELD_ITEM; } @@ -2890,16 +2942,16 @@ s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play) { (sUseHeldItem || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && (play->shootingGalleryStatus == 0)))))) { Player_SetUpperActionFunc(this, sItemActionUpdateFuncs[this->heldItemAction]); this->unk_834 = 0; - this->unk_6AC = 0; + this->idleType = PLAYER_IDLE_DEFAULT; sHeldItemButtonIsHeldDown = sUseHeldItem; return this->upperActionFunc(this, play); } - if (Player_CheckSpecialIdleAnim(this) != 0) { + if (Player_CheckForIdleAnim(this) != IDLE_ANIM_NONE) { Player_WaitToFinishItemChange(play, this); Player_AnimPlayOnce(play, this, Player_GetIdleAnim(this)); - this->unk_6AC = 0; + this->idleType = PLAYER_IDLE_DEFAULT; } else { Player_WaitToFinishItemChange(play, this); } @@ -2943,7 +2995,7 @@ s32 func_80834C74(Player* this, PlayState* play) { Player_SetUpperActionFunc(this, sItemActionUpdateFuncs[this->heldItemAction]); LinkAnimation_PlayLoop(play, &this->upperSkelAnime, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_wait, this->modelAnimType)); - this->unk_6AC = 0; + this->idleType = PLAYER_IDLE_DEFAULT; this->upperActionFunc(this, play); return false; @@ -3092,7 +3144,7 @@ s32 func_808351D4(Player* this, PlayState* play) { Math_ScaledStepToS(&this->unk_6C0, 1200, 400); this->unk_6AE |= 0x100; - if ((this->unk_836 == 0) && (Player_CheckSpecialIdleAnim(this) == 0) && + if ((this->unk_836 == 0) && (Player_CheckForIdleAnim(this) == IDLE_ANIM_NONE) && (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) { LinkAnimation_PlayOnce(play, &this->upperSkelAnime, D_808543CC[sp2C]); this->unk_836 = -1; @@ -3388,13 +3440,13 @@ s32 Player_SetupAction(PlayState* play, Player* this, PlayerActionFunc actionFun this->stateFlags1 &= ~(PLAYER_STATE1_2 | PLAYER_STATE1_6 | PLAYER_STATE1_26 | PLAYER_STATE1_28 | PLAYER_STATE1_29 | PLAYER_STATE1_31); - this->stateFlags2 &= ~(PLAYER_STATE2_19 | PLAYER_STATE2_27 | PLAYER_STATE2_28); + this->stateFlags2 &= ~(PLAYER_STATE2_19 | PLAYER_STATE2_27 | PLAYER_STATE2_IDLE_FIDGET); this->stateFlags3 &= ~(PLAYER_STATE3_1 | PLAYER_STATE3_3 | PLAYER_STATE3_FLYING_WITH_HOOKSHOT); this->av1.actionVar1 = 0; this->av2.actionVar2 = 0; - this->unk_6AC = 0; + this->idleType = PLAYER_IDLE_DEFAULT; func_808326F0(this); @@ -3642,14 +3694,14 @@ s32 Player_UpdateUpperBody(Player* this, PlayState* play) { if (this->upperAnimInterpWeight != 0.0f) { // The functionality contained within this block of code is never used in practice // because `upperAnimInterpWeight` is always 0. - if ((Player_CheckSpecialIdleAnim(this) == 0) || (this->speedXZ != 0.0f)) { + if ((Player_CheckForIdleAnim(this) == IDLE_ANIM_NONE) || (this->speedXZ != 0.0f)) { AnimTaskQueue_AddCopyUsingMapInverted(play, this->skelAnime.limbCount, this->upperSkelAnime.jointTable, this->skelAnime.jointTable, sUpperBodyLimbCopyMap); } Math_StepToF(&this->upperAnimInterpWeight, 0.0f, 0.25f); AnimTaskQueue_AddInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable, this->upperSkelAnime.jointTable, 1.0f - this->upperAnimInterpWeight); - } else if ((Player_CheckSpecialIdleAnim(this) == 0) || (this->speedXZ != 0.0f)) { + } else if ((Player_CheckForIdleAnim(this) == IDLE_ANIM_NONE) || (this->speedXZ != 0.0f)) { // Only copy the upper body animation to the upper body limbs in the main skeleton. // Doing so allows the main skeleton to play its own animation for the lower body limbs. AnimTaskQueue_AddCopyUsingMap(play, this->skelAnime.limbCount, this->skelAnime.jointTable, @@ -8071,47 +8123,84 @@ void Player_Action_808407CC(Player* this, PlayState* play) { } } -void func_808409CC(PlayState* play, Player* this) { +void Player_ChooseNextIdleAnim(PlayState* play, Player* this) { LinkAnimationHeader* anim; - LinkAnimationHeader** animPtr; + LinkAnimationHeader** fidgetAnimPtr; s32 heathIsCritical; - s32 sp38; - s32 sp34; + s32 fidgetType; + s32 commonType; if ((this->focusActor != NULL) || - (!(heathIsCritical = Health_IsCritical()) && ((this->unk_6AC = (this->unk_6AC + 1) & 1) != 0))) { - this->stateFlags2 &= ~PLAYER_STATE2_28; + (!(heathIsCritical = Health_IsCritical()) && ((this->idleType = (this->idleType + 1) & 1) != 0))) { + this->stateFlags2 &= ~PLAYER_STATE2_IDLE_FIDGET; anim = Player_GetIdleAnim(this); } else { - this->stateFlags2 |= PLAYER_STATE2_28; + this->stateFlags2 |= PLAYER_STATE2_IDLE_FIDGET; + if (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { + // Default idle animation will play if carrying an actor. + // Note that in this case, `PLAYER_STATE2_IDLE_FIDGET` is still set even though the + // animation that plays isn't a fidget animation. anim = Player_GetIdleAnim(this); } else { - sp38 = play->roomCtx.curRoom.behaviorType2; + // Pick fidget type based on room behavior. + // This may be changed below. + fidgetType = play->roomCtx.curRoom.behaviorType2; + if (heathIsCritical) { - if (this->unk_6AC >= 0) { - sp38 = 7; - this->unk_6AC = -1; + if (this->idleType >= PLAYER_IDLE_DEFAULT) { + fidgetType = FIDGET_CRIT_HEALTH_START; + + // When health is critical, `idleType` will not be updated. + // It will stay as `PLAYER_IDLE_CRIT_HEALTH` until health is no longer critical. + this->idleType = PLAYER_IDLE_CRIT_HEALTH; } else { - sp38 = 8; + // Keep looping the critical health animation until critical health ends + fidgetType = FIDGET_CRIT_HEALTH_LOOP; } } else { - sp34 = Rand_ZeroOne() * 5.0f; - if (sp34 < 4) { - if (((sp34 != 0) && (sp34 != 3)) || ((this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) && - ((sp34 == 3) || (Player_GetMeleeWeaponHeld2(this) != 0)))) { - if ((sp34 == 0) && Player_HoldsTwoHandedWeapon(this)) { - sp34 = 4; + commonType = Rand_ZeroOne() * 5; + + // There is a 4/5 chance that a common fidget type will be considered. + // However it may get rejected by the conditions below. + // The type determined by `curRoom.behaviorType2` will be used if a common type is rejected. + if (commonType < 4) { + // `FIDGET_ADJUST_TUNIC` and `FIDGET_TAP_FEET` are accepted unconditionally. + // The sword and shield related common types have extra restrictions. + // + // Note that `FIDGET_SWORD_SWING` is the first common fidget type, which is why + // all operations are done relative to this type. + if (((commonType + FIDGET_SWORD_SWING != FIDGET_SWORD_SWING) && + (commonType + FIDGET_SWORD_SWING != FIDGET_ADJUST_SHIELD)) || + ((this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) && + ((commonType + FIDGET_SWORD_SWING == FIDGET_ADJUST_SHIELD) || + (Player_GetMeleeWeaponHeld2(this) != 0)))) { + //! @bug It is possible for `FIDGET_ADJUST_SHIELD` to be used even if + //! a shield is not currently equipped. This is because of how being shieldless + //! is implemented. There is no sword-only model type, only + //! `PLAYER_MODELGROUP_SWORD_AND_SHIELD` exists. Therefore, the right hand type will be + //! `PLAYER_MODELTYPE_RH_SHIELD` if sword is in hand, even if no shield is equipped. + if ((commonType + FIDGET_SWORD_SWING == FIDGET_SWORD_SWING) && + Player_HoldsTwoHandedWeapon(this)) { + //! @bug This code is unreachable. + //! The check above groups the `Player_GetMeleeWeaponHeld2` check and + //! `PLAYER_MODELTYPE_RH_SHIELD` conditions together, meaning sword and shield must be + //! in hand. However shield is not in hand when using a two handed melee weapon. + commonType = FIDGET_SWORD_SWING_TWO_HAND - FIDGET_SWORD_SWING; } - sp38 = sp34 + 9; + + fidgetType = FIDGET_SWORD_SWING + commonType; } } } - animPtr = &sSpecialIdleAnimations[sp38][0]; + + fidgetAnimPtr = &sFidgetAnimations[fidgetType][0]; + if (this->modelAnimType != PLAYER_ANIMTYPE_1) { - animPtr = &sSpecialIdleAnimations[sp38][1]; + fidgetAnimPtr = &sFidgetAnimations[fidgetType][1]; } - anim = *animPtr; + + anim = *fidgetAnimPtr; } } @@ -8120,14 +8209,14 @@ void func_808409CC(PlayState* play, Player* this) { } void Player_Action_80840BC8(Player* this, PlayState* play) { - s32 specialIdleAnimIndex = Player_CheckSpecialIdleAnim(this); + s32 idleAnimResult = Player_CheckForIdleAnim(this); s32 sp40 = LinkAnimation_Update(play, &this->skelAnime); f32 speedTarget; s16 yawTarget; s16 temp; - if (specialIdleAnimIndex > 0) { - Player_ProcessSpecialIdleAnimSfxList(this, specialIdleAnimIndex - 1); + if (idleAnimResult > IDLE_ANIM_NONE) { + Player_ProcessFidgetAnimSfxList(this, idleAnimResult - 1); } if (sp40 != 0) { @@ -8139,7 +8228,7 @@ void Player_Action_80840BC8(Player* this, PlayState* play) { (this->skelAnime.jointTable[0].y + ((this->av2.actionVar2 & 1) * 0x50)) - 0x28; } else { Player_FinishAnimMovement(this); - func_808409CC(play, this); + Player_ChooseNextIdleAnim(play, this); } } From 2048a65dd89a5aa8c24616d47411e5363eb49fbf Mon Sep 17 00:00:00 2001 From: cadmic Date: Wed, 9 Oct 2024 04:41:16 -0700 Subject: [PATCH 03/12] [ntsc-1.0/1.1] Match line numbers in debug strings (#2255) --- src/boot/z_locale.c | 6 +++- src/boot/z_std_dma.c | 28 +++++++++++-------- src/code/game.c | 12 ++++++-- src/code/graph.c | 18 ++++++++++-- src/code/padmgr.c | 4 ++- src/code/sys_cfb.c | 6 +++- src/code/z_bgcheck.c | 8 ++++++ src/code/z_play.c | 6 +++- src/code/z_room.c | 12 ++++++-- src/n64dd/z_n64dd.c | 10 +++---- .../z_en_horse_game_check.c | 4 +++ 11 files changed, 86 insertions(+), 28 deletions(-) diff --git a/src/boot/z_locale.c b/src/boot/z_locale.c index 6d60af64b4..ec752bcd05 100644 --- a/src/boot/z_locale.c +++ b/src/boot/z_locale.c @@ -39,7 +39,11 @@ void Locale_Init(void) { PRINTF(VT_COL(RED, WHITE)); PRINTF(T("z_locale_init: 日本用かアメリカ用か判別できません\n", "z_locale_init: Can't tell if it's for Japan or America\n")); -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + LogUtils_HungupThread("../z_locale.c", 86); +#elif OOT_VERSION < PAL_1_0 + LogUtils_HungupThread("../z_locale.c", 92); +#elif OOT_VERSION < GC_JP LogUtils_HungupThread("../z_locale.c", 101); #else LogUtils_HungupThread("../z_locale.c", 118); diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c index f67e9eeec7..d609ce6f10 100644 --- a/src/boot/z_std_dma.c +++ b/src/boot/z_std_dma.c @@ -296,12 +296,14 @@ NORETURN void DmaMgr_Error(DmaRequest* req, const char* filename, const char* er Fault_AddHungupAndCrashImpl(buff1, buff2); } -#define DMA_ERROR(req, filename, errorName, errorDesc, file, n64Line, gcLine) \ +#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) \ DmaMgr_Error(req, filename, errorName, errorDesc) -#elif PLATFORM_N64 -#define DMA_ERROR(req, filename, errorName, errorDesc, file, n64Line, gcLine) Fault_AddHungupAndCrash(file, n64Line) -#elif PLATFORM_GC -#define DMA_ERROR(req, filename, errorName, errorDesc, file, n64Line, gcLine) Fault_AddHungupAndCrash(file, gcLine) +#elif OOT_VERSION < NTSC_1_1 +#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line1) +#elif OOT_VERSION < GC_JP +#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line2) +#else +#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line3) #endif #if PLATFORM_GC @@ -407,7 +409,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) { DMA_ERROR(req, filename, "Segment Alignment Error", T("セグメント境界をまたがってDMA転送することはできません", "DMA transfers cannot cross segment boundaries"), - "../z_std_dma.c", 578, 726); + "../z_std_dma.c", 575, 578, 726); } DmaMgr_DmaRomToRam(iter->romStart + (vrom - iter->file.vromStart), ram, size); @@ -428,7 +430,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) { DMA_ERROR(req, filename, "Can't Transfer Segment", T("圧縮されたセグメントの途中からはDMA転送することはできません", "DMA transfer cannot be performed from the middle of a compressed segment"), - "../z_std_dma.c", 598, 746); + "../z_std_dma.c", 595, 598, 746); } if (size != iter->file.vromEnd - iter->file.vromStart) { @@ -437,7 +439,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) { DMA_ERROR(req, filename, "Can't Transfer Segment", T("圧縮されたセグメントの一部だけをDMA転送することはできません", "It is not possible to DMA only part of a compressed segment"), - "../z_std_dma.c", 604, 752); + "../z_std_dma.c", 601, 604, 752); } // Reduce the thread priority and decompress the file, the decompression routine handles the DMA @@ -470,8 +472,8 @@ void DmaMgr_ProcessRequest(DmaRequest* req) { // Error, rom is compressed so DMA may only be requested within the filesystem bounds DMA_ERROR(req, NULL, "DATA DON'T EXIST", - T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c", 624, - 771); + T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c", 621, + 624, 771); return; } else { // ROM is uncompressed, allow arbitrary DMA even if the region is not marked in the filesystem @@ -543,7 +545,7 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size, // its line number is unknown. //! @bug `req` is passed to `DMA_ERROR` without rom, ram and size being set DMA_ERROR(req, NULL, "ILLIGAL DMA-FUNCTION CALL", T("パラメータ異常です", "Parameter error"), "../z_std_dma.c", - 0, 0); + 0, 0, 0); } #endif @@ -645,7 +647,9 @@ void DmaMgr_Init(void) { PRINTF("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart, gDmaDataTable[0].file.vromEnd); //! @bug The main code file where fault.c resides is not yet loaded -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + Fault_AddHungupAndCrash("../z_std_dma.c", 837); +#elif OOT_VERSION < GC_JP Fault_AddHungupAndCrash("../z_std_dma.c", 840); #else Fault_AddHungupAndCrash("../z_std_dma.c", 1055); diff --git a/src/code/game.c b/src/code/game.c index 2b665e0d8d..bd129ef775 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -386,7 +386,11 @@ void GameState_InitArena(GameState* gameState, size_t size) { } else { THA_Init(&gameState->tha, NULL, 0); PRINTF(T("ハイラル確保失敗\n", "Failure to secure Hyrule\n")); -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + HUNGUP_AND_CRASH("../game.c", 895); +#elif OOT_VERSION < PAL_1_0 + HUNGUP_AND_CRASH("../game.c", 898); +#elif OOT_VERSION < GC_JP HUNGUP_AND_CRASH("../game.c", 985); #else HUNGUP_AND_CRASH("../game.c", 999); @@ -431,7 +435,11 @@ void GameState_Realloc(GameState* gameState, size_t size) { SystemArena_Display(); #endif -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + HUNGUP_AND_CRASH("../game.c", 940); +#elif OOT_VERSION < PAL_1_0 + HUNGUP_AND_CRASH("../game.c", 943); +#elif OOT_VERSION < GC_JP HUNGUP_AND_CRASH("../game.c", 1030); #else HUNGUP_AND_CRASH("../game.c", 1044); diff --git a/src/code/graph.c b/src/code/graph.c index bf16214521..1a98ab1afb 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -379,7 +379,11 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) { PRINTF("%c", BEL); PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域先頭が破壊されています\n", "Dynamic area head is destroyed\n") VT_RST); -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + Fault_AddHungupAndCrash("../graph.c", 937); +#elif OOT_VERSION < PAL_1_0 + Fault_AddHungupAndCrash("../graph.c", 940); +#elif OOT_VERSION < GC_JP Fault_AddHungupAndCrash("../graph.c", 951); #else Fault_AddHungupAndCrash("../graph.c", 1070); @@ -390,7 +394,11 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) { PRINTF("%c", BEL); PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域末尾が破壊されています\n", "Dynamic region tail is destroyed\n") VT_RST); -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + Fault_AddHungupAndCrash("../graph.c", 943); +#elif OOT_VERSION < PAL_1_0 + Fault_AddHungupAndCrash("../graph.c", 946); +#elif OOT_VERSION < GC_JP Fault_AddHungupAndCrash("../graph.c", 957); #else Fault_AddHungupAndCrash("../graph.c", 1076); @@ -486,7 +494,11 @@ void Graph_ThreadEntry(void* arg0) { sprintf(faultMsg, "CLASS SIZE= %d bytes", size); Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg); -#elif PLATFORM_N64 +#elif OOT_VERSION < NTSC_1_1 + Fault_AddHungupAndCrash("../graph.c", 1067); +#elif OOT_VERSION < PAL_1_0 + Fault_AddHungupAndCrash("../graph.c", 1070); +#elif OOT_VERSION < GC_JP Fault_AddHungupAndCrash("../graph.c", 1081); #else Fault_AddHungupAndCrash("../graph.c", 1200); diff --git a/src/code/padmgr.c b/src/code/padmgr.c index 58e0ba2f32..f9ccce7809 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -326,7 +326,9 @@ void PadMgr_UpdateInputs(PadMgr* padMgr) { default: // Unknown error response LOG_HEX("padnow1->errno", pad->errno, "../padmgr.c", 396); -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + Fault_AddHungupAndCrash("../padmgr.c", 379); +#elif OOT_VERSION < GC_JP Fault_AddHungupAndCrash("../padmgr.c", 382); #else Fault_AddHungupAndCrash("../padmgr.c", 397); diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 553cc50d87..76012588b2 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -33,7 +33,11 @@ void SysCfb_Init(s32 n64dd) { PRINTF("RAM4M mode\n"); sSysCfbEnd = 0x80400000; } else { -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + LogUtils_HungupThread("../sys_cfb.c", 305); +#elif OOT_VERSION < PAL_1_0 + LogUtils_HungupThread("../sys_cfb.c", 308); +#elif OOT_VERSION < GC_JP LogUtils_HungupThread("../sys_cfb.c", 322); #else LogUtils_HungupThread("../sys_cfb.c", 354); diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index e1960e6d11..163b9a2b37 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1611,7 +1611,11 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader colCtx->subdivAmount.z, ALIGNOF_MASK(StaticLookup)); if (colCtx->lookupTbl == NULL) { +#if OOT_VERSION < NTSC_1_1 + LogUtils_HungupThread("../z_bgcheck.c", 4173); +#else LogUtils_HungupThread("../z_bgcheck.c", 4176); +#endif } colCtx->minBounds.x = colCtx->colHeader->minBounds.x; colCtx->minBounds.y = colCtx->colHeader->minBounds.y; @@ -1635,7 +1639,11 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader tblMax = customNodeListMax; } else { if (colCtx->memSize < memSize) { +#if OOT_VERSION < NTSC_1_1 + LogUtils_HungupThread("../z_bgcheck.c", 4227); +#else LogUtils_HungupThread("../z_bgcheck.c", 4230); +#endif } tblMax = (colCtx->memSize - memSize) / sizeof(SSNode); } diff --git a/src/code/z_play.c b/src/code/z_play.c index e4269a2c2f..3cfedca3de 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -176,7 +176,11 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) { break; default: -#if OOT_VERSION < PAL_1_1 +#if OOT_VERSION < NTSC_1_1 + HUNGUP_AND_CRASH("../z_play.c", 2263); +#elif OOT_VERSION < PAL_1_0 + HUNGUP_AND_CRASH("../z_play.c", 2266); +#elif OOT_VERSION < PAL_1_1 HUNGUP_AND_CRASH("../z_play.c", 2269); #elif OOT_VERSION < GC_JP HUNGUP_AND_CRASH("../z_play.c", 2272); diff --git a/src/code/z_room.c b/src/code/z_room.c index 6ac20bbd9a..80154f61c3 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -456,7 +456,11 @@ RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomS PRINTF(VT_COL(RED, WHITE) T("z_room.c:カメラIDに一致するデータが存在しません camid=%d\n", "z_room.c: Data consistent with camera id does not exist camid=%d\n") VT_RST, bgCamIndex); -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + Fault_AddHungupAndCrash("../z_room.c", 724); +#elif OOT_VERSION < PAL_1_0 + Fault_AddHungupAndCrash("../z_room.c", 727); +#elif OOT_VERSION < GC_JP Fault_AddHungupAndCrash("../z_room.c", 721); #else LogUtils_HungupThread("../z_room.c", 726); @@ -543,7 +547,11 @@ void Room_DrawImage(PlayState* play, Room* room, u32 flags) { } else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) { Room_DrawImageMulti(play, room, flags); } else { -#if PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 + Fault_AddHungupAndCrash("../z_room.c", 849); +#elif OOT_VERSION < PAL_1_0 + Fault_AddHungupAndCrash("../z_room.c", 852); +#elif OOT_VERSION < GC_JP Fault_AddHungupAndCrash("../z_room.c", 836); #else LogUtils_HungupThread("../z_room.c", 841); diff --git a/src/n64dd/z_n64dd.c b/src/n64dd/z_n64dd.c index 60dbe7d917..a2fd113309 100644 --- a/src/n64dd/z_n64dd.c +++ b/src/n64dd/z_n64dd.c @@ -112,9 +112,9 @@ void func_801C6FD8(void) { // Adds a HungupAndCrash void func_801C7018(void) { if (D_80121213 != 0) { -#if OOT_VERSION == NTSC_1_0 +#if OOT_VERSION < NTSC_1_1 Fault_AddHungupAndCrash("../z_n64dd.c", 503); -#elif OOT_VERSION == NTSC_1_1 +#elif OOT_VERSION < PAL_1_0 Fault_AddHungupAndCrash("../z_n64dd.c", 551); #else Fault_AddHungupAndCrash("../z_n64dd.c", 573); @@ -215,7 +215,7 @@ void func_801C7268(void) { } else if (B_801D9DC8 != 0) { B_801D9DC8 = 0; } -#if OOT_VERSION == NTSC_1_0 +#if OOT_VERSION < NTSC_1_1 if (B_801D9DC0 != 0) { sp1C = (osGetTime() - B_801D9DC0) * 64 / 3000; @@ -338,7 +338,7 @@ s32 func_801C7658(void) { B_801D9D50.unk_00 = 13; (&func_801C8000)(&B_801D9D50); -#if OOT_VERSION > NTSC_1_1 +#if OOT_VERSION >= PAL_1_0 StackCheck_Init(&B_801DAF88, B_801D9F88, STACK_TOP(B_801D9F88), 0, 0x100, "ddmsg"); osCreateThread(&B_801D9DD8, THREAD_ID_DDMSG, &func_801C711C, &B_801D9B90, STACK_TOP(B_801D9F88), THREAD_PRI_DDMSG); osStartThread(&B_801D9DD8); @@ -519,7 +519,7 @@ void func_801C7C1C(void* dest, s32 offset, s32 size) { bcopy((u8*)sp4C, (u8*)dest + func_801C7BEC(sp5C) - sp54 + var_s1, sp50); } } -#if OOT_VERSION == NTSC_1_0 +#if OOT_VERSION < NTSC_1_1 if (B_801D9DC0 != 0) { temp_v1_2 = (osGetTime() - B_801D9DC0) * 64 / 3000; if (1000000 - temp_v1_2 > 0) { diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index 25683388aa..839b25df2b 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -90,7 +90,11 @@ s32 EnHorseGameCheck_InitIngoRace(EnHorseGameCheckBase* base, PlayState* play) { this->ingoHorse = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -250.0f, 1.0f, -1650.0f, 0, 0x4000, 0, 0x8003); if (this->ingoHorse == NULL) { +#if OOT_VERSION < NTSC_1_1 + LogUtils_HungupThread("../z_en_horse_game_check.c", 382); +#else LogUtils_HungupThread("../z_en_horse_game_check.c", 385); +#endif } this->startTimer = 0; this->finishTimer = 0; From d3bf8ae78b36e4f81fa3c2f90e97ce067f61d12e Mon Sep 17 00:00:00 2001 From: cadmic Date: Wed, 9 Oct 2024 05:22:57 -0700 Subject: [PATCH 04/12] [ntsc-1.0/1.1] Extract assets (except audio) for ntsc-1.0 and ntsc-1.1 (#2253) * [ntsc-1.0/1.1] Extract assets (except audio) for ntsc-1.0 and ntsc-1.1 * Fix merge with pal-1.0/1.1 --- Makefile | 17 +- assets/xml/scenes/dungeons/ddan_boss.xml | 2 +- assets/xml/scenes/dungeons/ddan_boss_v2.xml | 12 + assets/xml/scenes/dungeons/ice_doukutu.xml | 4 +- assets/xml/scenes/dungeons/ice_doukutu_v2.xml | 44 + assets/xml/scenes/overworld/spot01.xml | 1 - assets/xml/scenes/overworld/spot02.xml | 1 - assets/xml/scenes/overworld/spot04.xml | 2 - assets/xml/scenes/overworld/spot09.xml | 3 - assets/xml/scenes/overworld/spot16.xml | 2 +- assets/xml/scenes/overworld/spot16_v2.xml | 15 + assets/xml/textures/nintendo_rogo_static.xml | 2 +- .../xml/textures/nintendo_rogo_static_v2.xml | 8 + baseroms/gc-eu-mq-dbg/config.yml | 6 +- baseroms/gc-eu-mq/config.yml | 6 +- baseroms/gc-eu/config.yml | 8 +- baseroms/gc-jp-ce/config.yml | 8 +- baseroms/gc-jp-mq/config.yml | 6 +- baseroms/gc-jp/config.yml | 8 +- baseroms/gc-us-mq/config.yml | 6 +- baseroms/gc-us/config.yml | 8 +- baseroms/ntsc-1.0/checksum-JP-compressed.md5 | 1 + baseroms/ntsc-1.0/checksum-JP.md5 | 1 + baseroms/ntsc-1.0/checksum-US-compressed.md5 | 1 + baseroms/ntsc-1.0/checksum-US.md5 | 1 + baseroms/ntsc-1.0/config.yml | 1219 +++++++++++++ baseroms/ntsc-1.0/segments.csv | 1511 +++++++++++++++++ baseroms/ntsc-1.1/checksum-JP-compressed.md5 | 1 + baseroms/ntsc-1.1/checksum-JP.md5 | 1 + baseroms/ntsc-1.1/checksum-US-compressed.md5 | 1 + baseroms/ntsc-1.1/checksum-US.md5 | 1 + baseroms/ntsc-1.1/config.yml | 1219 +++++++++++++ baseroms/ntsc-1.1/segments.csv | 1511 +++++++++++++++++ baseroms/ntsc-1.2/config.yml | 8 +- baseroms/pal-1.0/config.yml | 4 +- baseroms/pal-1.1/config.yml | 4 +- tools/ZAPDConfigs/ntsc-1.0/Config.xml | 10 + tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt | 2 + tools/ZAPDConfigs/ntsc-1.1/Config.xml | 10 + tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt | 2 + 40 files changed, 5627 insertions(+), 50 deletions(-) create mode 100644 assets/xml/scenes/dungeons/ddan_boss_v2.xml create mode 100644 assets/xml/scenes/dungeons/ice_doukutu_v2.xml create mode 100644 assets/xml/scenes/overworld/spot16_v2.xml create mode 100644 assets/xml/textures/nintendo_rogo_static_v2.xml create mode 100644 baseroms/ntsc-1.0/checksum-JP-compressed.md5 create mode 100644 baseroms/ntsc-1.0/checksum-JP.md5 create mode 100644 baseroms/ntsc-1.0/checksum-US-compressed.md5 create mode 100644 baseroms/ntsc-1.0/checksum-US.md5 create mode 100644 baseroms/ntsc-1.0/config.yml create mode 100644 baseroms/ntsc-1.0/segments.csv create mode 100644 baseroms/ntsc-1.1/checksum-JP-compressed.md5 create mode 100644 baseroms/ntsc-1.1/checksum-JP.md5 create mode 100644 baseroms/ntsc-1.1/checksum-US-compressed.md5 create mode 100644 baseroms/ntsc-1.1/checksum-US.md5 create mode 100644 baseroms/ntsc-1.1/config.yml create mode 100644 baseroms/ntsc-1.1/segments.csv create mode 100644 tools/ZAPDConfigs/ntsc-1.0/Config.xml create mode 100644 tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt create mode 100644 tools/ZAPDConfigs/ntsc-1.1/Config.xml create mode 100644 tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt diff --git a/Makefile b/Makefile index d6bd20cc8c..1739a85b3b 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,8 @@ COMPILER ?= ido # gc-eu-mq GameCube Europe/PAL Master Quest # gc-jp-ce GameCube Japan (Collector's Edition disc) # The following versions are work-in-progress and not yet matching: -# (none currently) +# ntsc-1.0 N64 NTSC 1.0 (Japan/US depending on REGION) +# ntsc-1.1 N64 NTSC 1.1 (Japan/US depending on REGION) VERSION ?= gc-eu-mq-dbg # Number of threads to extract and compress with N_THREADS ?= $(shell nproc) @@ -50,7 +51,19 @@ CPP_DEFINES ?= REGIONAL_CHECKSUM := 0 # Version-specific settings -ifeq ($(VERSION),pal-1.0) +ifeq ($(VERSION),ntsc-1.0) + REGIONAL_CHECKSUM := 1 + REGION ?= JP + PLATFORM := N64 + DEBUG := 0 + COMPARE := 0 +else ifeq ($(VERSION),ntsc-1.1) + REGIONAL_CHECKSUM := 1 + REGION ?= JP + PLATFORM := N64 + DEBUG := 0 + COMPARE := 0 +else ifeq ($(VERSION),pal-1.0) REGION ?= EU PLATFORM := N64 DEBUG := 0 diff --git a/assets/xml/scenes/dungeons/ddan_boss.xml b/assets/xml/scenes/dungeons/ddan_boss.xml index 2b61024906..86a34e6d9a 100644 --- a/assets/xml/scenes/dungeons/ddan_boss.xml +++ b/assets/xml/scenes/dungeons/ddan_boss.xml @@ -6,7 +6,7 @@ - + diff --git a/assets/xml/scenes/dungeons/ddan_boss_v2.xml b/assets/xml/scenes/dungeons/ddan_boss_v2.xml new file mode 100644 index 0000000000..2b61024906 --- /dev/null +++ b/assets/xml/scenes/dungeons/ddan_boss_v2.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/xml/scenes/dungeons/ice_doukutu.xml b/assets/xml/scenes/dungeons/ice_doukutu.xml index 4d25aa74f4..f816d7ca24 100644 --- a/assets/xml/scenes/dungeons/ice_doukutu.xml +++ b/assets/xml/scenes/dungeons/ice_doukutu.xml @@ -1,8 +1,8 @@ - - + + diff --git a/assets/xml/scenes/dungeons/ice_doukutu_v2.xml b/assets/xml/scenes/dungeons/ice_doukutu_v2.xml new file mode 100644 index 0000000000..4d25aa74f4 --- /dev/null +++ b/assets/xml/scenes/dungeons/ice_doukutu_v2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/scenes/overworld/spot01.xml b/assets/xml/scenes/overworld/spot01.xml index 4a57964115..205da509c3 100644 --- a/assets/xml/scenes/overworld/spot01.xml +++ b/assets/xml/scenes/overworld/spot01.xml @@ -7,7 +7,6 @@ - diff --git a/assets/xml/scenes/overworld/spot02.xml b/assets/xml/scenes/overworld/spot02.xml index 334d0e5991..45708dd3ac 100644 --- a/assets/xml/scenes/overworld/spot02.xml +++ b/assets/xml/scenes/overworld/spot02.xml @@ -8,7 +8,6 @@ - diff --git a/assets/xml/scenes/overworld/spot04.xml b/assets/xml/scenes/overworld/spot04.xml index 3cfc140950..c861d45278 100644 --- a/assets/xml/scenes/overworld/spot04.xml +++ b/assets/xml/scenes/overworld/spot04.xml @@ -14,8 +14,6 @@ - - diff --git a/assets/xml/scenes/overworld/spot09.xml b/assets/xml/scenes/overworld/spot09.xml index a447c9df44..7b7ec2ce5e 100644 --- a/assets/xml/scenes/overworld/spot09.xml +++ b/assets/xml/scenes/overworld/spot09.xml @@ -8,9 +8,6 @@ - - - diff --git a/assets/xml/scenes/overworld/spot16.xml b/assets/xml/scenes/overworld/spot16.xml index 57a64323b2..f3d92c8fe7 100644 --- a/assets/xml/scenes/overworld/spot16.xml +++ b/assets/xml/scenes/overworld/spot16.xml @@ -10,6 +10,6 @@ - + diff --git a/assets/xml/scenes/overworld/spot16_v2.xml b/assets/xml/scenes/overworld/spot16_v2.xml new file mode 100644 index 0000000000..57a64323b2 --- /dev/null +++ b/assets/xml/scenes/overworld/spot16_v2.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/assets/xml/textures/nintendo_rogo_static.xml b/assets/xml/textures/nintendo_rogo_static.xml index 7a60524b20..295bbfcfa2 100644 --- a/assets/xml/textures/nintendo_rogo_static.xml +++ b/assets/xml/textures/nintendo_rogo_static.xml @@ -3,6 +3,6 @@ - + diff --git a/assets/xml/textures/nintendo_rogo_static_v2.xml b/assets/xml/textures/nintendo_rogo_static_v2.xml new file mode 100644 index 0000000000..7a60524b20 --- /dev/null +++ b/assets/xml/textures/nintendo_rogo_static_v2.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/baseroms/gc-eu-mq-dbg/config.yml b/baseroms/gc-eu-mq-dbg/config.yml index 007665d84d..84a6d3b6c7 100644 --- a/baseroms/gc-eu-mq-dbg/config.yml +++ b/baseroms/gc-eu-mq-dbg/config.yml @@ -988,7 +988,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan_mq.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1160,7 +1160,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1236,7 +1236,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/gc-eu-mq/config.yml b/baseroms/gc-eu-mq/config.yml index 2716a23e1a..f29e904e85 100644 --- a/baseroms/gc-eu-mq/config.yml +++ b/baseroms/gc-eu-mq/config.yml @@ -972,7 +972,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan_mq.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1142,7 +1142,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1202,7 +1202,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/gc-eu/config.yml b/baseroms/gc-eu/config.yml index 97cd20648e..de1d26194c 100644 --- a/baseroms/gc-eu/config.yml +++ b/baseroms/gc-eu/config.yml @@ -972,7 +972,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1000,7 +1000,7 @@ assets: - name: scenes/dungeons/HIDAN xml_path: assets/xml/scenes/dungeons/HIDAN.xml - name: scenes/dungeons/ice_doukutu - xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml + xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml - name: scenes/dungeons/jyasinboss xml_path: assets/xml/scenes/dungeons/jyasinboss.xml - name: scenes/dungeons/jyasinzou @@ -1142,7 +1142,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1202,7 +1202,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/gc-jp-ce/config.yml b/baseroms/gc-jp-ce/config.yml index 59c57730af..3a3de8c818 100644 --- a/baseroms/gc-jp-ce/config.yml +++ b/baseroms/gc-jp-ce/config.yml @@ -971,7 +971,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -999,7 +999,7 @@ assets: - name: scenes/dungeons/HIDAN xml_path: assets/xml/scenes/dungeons/HIDAN.xml - name: scenes/dungeons/ice_doukutu - xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml + xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml - name: scenes/dungeons/jyasinboss xml_path: assets/xml/scenes/dungeons/jyasinboss.xml - name: scenes/dungeons/jyasinzou @@ -1141,7 +1141,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1201,7 +1201,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/gc-jp-mq/config.yml b/baseroms/gc-jp-mq/config.yml index 433e3fe6ad..6e1ab6b0ef 100644 --- a/baseroms/gc-jp-mq/config.yml +++ b/baseroms/gc-jp-mq/config.yml @@ -971,7 +971,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan_mq.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1141,7 +1141,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1201,7 +1201,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/gc-jp/config.yml b/baseroms/gc-jp/config.yml index f86773ac41..08df45e6ae 100644 --- a/baseroms/gc-jp/config.yml +++ b/baseroms/gc-jp/config.yml @@ -971,7 +971,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -999,7 +999,7 @@ assets: - name: scenes/dungeons/HIDAN xml_path: assets/xml/scenes/dungeons/HIDAN.xml - name: scenes/dungeons/ice_doukutu - xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml + xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml - name: scenes/dungeons/jyasinboss xml_path: assets/xml/scenes/dungeons/jyasinboss.xml - name: scenes/dungeons/jyasinzou @@ -1141,7 +1141,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1201,7 +1201,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/gc-us-mq/config.yml b/baseroms/gc-us-mq/config.yml index 1a64ec2dbd..df026951f4 100644 --- a/baseroms/gc-us-mq/config.yml +++ b/baseroms/gc-us-mq/config.yml @@ -971,7 +971,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan_mq.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1141,7 +1141,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1201,7 +1201,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/gc-us/config.yml b/baseroms/gc-us/config.yml index 3a63996ed1..60050cb7ec 100644 --- a/baseroms/gc-us/config.yml +++ b/baseroms/gc-us/config.yml @@ -971,7 +971,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -999,7 +999,7 @@ assets: - name: scenes/dungeons/HIDAN xml_path: assets/xml/scenes/dungeons/HIDAN.xml - name: scenes/dungeons/ice_doukutu - xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml + xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml - name: scenes/dungeons/jyasinboss xml_path: assets/xml/scenes/dungeons/jyasinboss.xml - name: scenes/dungeons/jyasinzou @@ -1141,7 +1141,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1201,7 +1201,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/ntsc-1.0/checksum-JP-compressed.md5 b/baseroms/ntsc-1.0/checksum-JP-compressed.md5 new file mode 100644 index 0000000000..b371d6ee69 --- /dev/null +++ b/baseroms/ntsc-1.0/checksum-JP-compressed.md5 @@ -0,0 +1 @@ +9f04c8e68534b870f707c247fa4b50fc build/ntsc-1.0/oot-ntsc-1.0-compressed.z64 diff --git a/baseroms/ntsc-1.0/checksum-JP.md5 b/baseroms/ntsc-1.0/checksum-JP.md5 new file mode 100644 index 0000000000..0bdeb74cb9 --- /dev/null +++ b/baseroms/ntsc-1.0/checksum-JP.md5 @@ -0,0 +1 @@ +963d8ee3bd921f4d3c833b82004a76d2 build/ntsc-1.0/oot-ntsc-1.0.z64 diff --git a/baseroms/ntsc-1.0/checksum-US-compressed.md5 b/baseroms/ntsc-1.0/checksum-US-compressed.md5 new file mode 100644 index 0000000000..7aa912648b --- /dev/null +++ b/baseroms/ntsc-1.0/checksum-US-compressed.md5 @@ -0,0 +1 @@ +5bd1fe107bf8106b2ab6650abecd54d6 build/ntsc-1.0/oot-ntsc-1.0-compressed.z64 diff --git a/baseroms/ntsc-1.0/checksum-US.md5 b/baseroms/ntsc-1.0/checksum-US.md5 new file mode 100644 index 0000000000..fda12ac58c --- /dev/null +++ b/baseroms/ntsc-1.0/checksum-US.md5 @@ -0,0 +1 @@ +6829a16db1a34e8ce989847cd8da8d9a build/ntsc-1.0/oot-ntsc-1.0.z64 diff --git a/baseroms/ntsc-1.0/config.yml b/baseroms/ntsc-1.0/config.yml new file mode 100644 index 0000000000..072aebec3d --- /dev/null +++ b/baseroms/ntsc-1.0/config.yml @@ -0,0 +1,1219 @@ +checksums: + - checksum-JP + - checksum-US +dmadata_start: 0x7430 +text_lang_pal: false +incbins: + - name: ipl3 + segment: makerom + vram: 0x80000040 + size: 0xFC0 + - name: rspbootText + segment: boot + vram: 0x800060B0 + size: 0x160 + - name: aspMainText + segment: code + vram: 0x800E2FC0 + size: 0xFB0 + - name: gspF3DZEX2_NoN_PosLight_fifoText + segment: code + vram: 0x800E3F70 + size: 0x1390 + - name: gspS2DEX2d_fifoText + segment: code + vram: 0x800E5300 + size: 0x18C0 + - name: njpgdspMainText + segment: code + vram: 0x800E6BC0 + size: 0xAF0 + - name: aspMainData + segment: code + vram: 0x801142E0 + size: 0x2E0 + - name: gspF3DZEX2_NoN_PosLight_fifoData + segment: code + vram: 0x801145C0 + size: 0x420 + - name: gspS2DEX2d_fifoData + segment: code + vram: 0x801149E0 + size: 0x390 + - name: njpgdspMainData + segment: code + vram: 0x80114D70 + size: 0x60 +variables: + gMtxClear: 0x800FEDB0 + sJpnMessageEntryTable: 0x8010A94C + sNesMessageEntryTable: 0x8010EA8C + sStaffMessageEntryTable: 0x80112CAC + gSoundFontTable: 0x80113740 + gSequenceFontTable: 0x801139B0 + gSequenceTable: 0x80113B70 + gSampleBankTable: 0x80114260 + sShadowTex: 0x80AE0AE0 +assets: +- name: code/fbdemo_circle + xml_path: assets/xml/code/fbdemo_circle.xml + start_offset: 0xEC0A8 + end_offset: 0xED2C8 +- name: code/fbdemo_triforce + xml_path: assets/xml/code/fbdemo_triforce.xml + start_offset: 0xEB530 + end_offset: 0xEB600 +- name: code/fbdemo_wipe1 + xml_path: assets/xml/code/fbdemo_wipe1.xml + start_offset: 0xEB600 + end_offset: 0xEBF90 +- name: n64dd/error_textures + xml_path: assets/xml/n64dd/error_textures.xml + start_offset: 0xC160 + end_offset: 0x11D60 +- name: misc/link_animetion + xml_path: assets/xml/misc/link_animetion.xml +- name: misc/z_select_static + xml_path: assets/xml/misc/z_select_static.xml +- name: objects/gameplay_dangeon_keep + xml_path: assets/xml/objects/gameplay_dangeon_keep.xml +- name: objects/gameplay_field_keep + xml_path: assets/xml/objects/gameplay_field_keep.xml +- name: objects/gameplay_keep + xml_path: assets/xml/objects/gameplay_keep.xml +- name: objects/object_ahg + xml_path: assets/xml/objects/object_ahg.xml +- name: objects/object_am + xml_path: assets/xml/objects/object_am.xml +- name: objects/object_ane + xml_path: assets/xml/objects/object_ane.xml +- name: objects/object_ani + xml_path: assets/xml/objects/object_ani.xml +- name: objects/object_anubice + xml_path: assets/xml/objects/object_anubice.xml +- name: objects/object_aob + xml_path: assets/xml/objects/object_aob.xml +- name: objects/object_b_heart + xml_path: assets/xml/objects/object_b_heart.xml +- name: objects/object_Bb + xml_path: assets/xml/objects/object_Bb.xml +- name: objects/object_bba + xml_path: assets/xml/objects/object_bba.xml +- name: objects/object_bdan_objects + xml_path: assets/xml/objects/object_bdan_objects.xml +- name: objects/object_bdoor + xml_path: assets/xml/objects/object_bdoor.xml +- name: objects/object_bg + xml_path: assets/xml/objects/object_bg.xml +- name: objects/object_bigokuta + xml_path: assets/xml/objects/object_bigokuta.xml +- name: objects/object_bird + xml_path: assets/xml/objects/object_bird.xml +- name: objects/object_bji + xml_path: assets/xml/objects/object_bji.xml +- name: objects/object_bl + xml_path: assets/xml/objects/object_bl.xml +- name: objects/object_blkobj + xml_path: assets/xml/objects/object_blkobj.xml +- name: objects/object_bob + xml_path: assets/xml/objects/object_bob.xml +- name: objects/object_boj + xml_path: assets/xml/objects/object_boj.xml +- name: objects/object_bombf + xml_path: assets/xml/objects/object_bombf.xml +- name: objects/object_bombiwa + xml_path: assets/xml/objects/object_bombiwa.xml +- name: objects/object_bowl + xml_path: assets/xml/objects/object_bowl.xml +- name: objects/object_box + xml_path: assets/xml/objects/object_box.xml +- name: objects/object_brob + xml_path: assets/xml/objects/object_brob.xml +- name: objects/object_bubble + xml_path: assets/xml/objects/object_bubble.xml +- name: objects/object_bv + xml_path: assets/xml/objects/object_bv.xml +- name: objects/object_bw + xml_path: assets/xml/objects/object_bw.xml +- name: objects/object_bwall + xml_path: assets/xml/objects/object_bwall.xml +- name: objects/object_bxa + xml_path: assets/xml/objects/object_bxa.xml +- name: objects/object_cne + xml_path: assets/xml/objects/object_cne.xml +- name: objects/object_cob + xml_path: assets/xml/objects/object_cob.xml +- name: objects/object_cow + xml_path: assets/xml/objects/object_cow.xml +- name: objects/object_crow + xml_path: assets/xml/objects/object_crow.xml +- name: objects/object_cs + xml_path: assets/xml/objects/object_cs.xml +- name: objects/object_d_elevator + xml_path: assets/xml/objects/object_d_elevator.xml +- name: objects/object_d_hsblock + xml_path: assets/xml/objects/object_d_hsblock.xml +- name: objects/object_d_lift + xml_path: assets/xml/objects/object_d_lift.xml +- name: objects/object_daiku + xml_path: assets/xml/objects/object_daiku.xml +- name: objects/object_ddan_objects + xml_path: assets/xml/objects/object_ddan_objects.xml +- name: objects/object_dekubaba + xml_path: assets/xml/objects/object_dekubaba.xml +- name: objects/object_dekujr + xml_path: assets/xml/objects/object_dekujr.xml +- name: objects/object_dekunuts + xml_path: assets/xml/objects/object_dekunuts.xml +- name: objects/object_demo_6k + xml_path: assets/xml/objects/object_demo_6k.xml +- name: objects/object_demo_kekkai + xml_path: assets/xml/objects/object_demo_kekkai.xml +- name: objects/object_demo_tre_lgt + xml_path: assets/xml/objects/object_demo_tre_lgt.xml +- name: objects/object_dh + xml_path: assets/xml/objects/object_dh.xml +- name: objects/object_dnk + xml_path: assets/xml/objects/object_dnk.xml +- name: objects/object_dns + xml_path: assets/xml/objects/object_dns.xml +- name: objects/object_dodojr + xml_path: assets/xml/objects/object_dodojr.xml +- name: objects/object_dodongo + xml_path: assets/xml/objects/object_dodongo.xml +- name: objects/object_dog + xml_path: assets/xml/objects/object_dog.xml +- name: objects/object_door_gerudo + xml_path: assets/xml/objects/object_door_gerudo.xml +- name: objects/object_door_killer + xml_path: assets/xml/objects/object_door_killer.xml +- name: objects/object_ds + xml_path: assets/xml/objects/object_ds.xml +- name: objects/object_ds2 + xml_path: assets/xml/objects/object_ds2.xml +- name: objects/object_du + xml_path: assets/xml/objects/object_du.xml +- name: objects/object_dy_obj + xml_path: assets/xml/objects/object_dy_obj.xml +- name: objects/object_ec + xml_path: assets/xml/objects/object_ec.xml +- name: objects/object_efc_crystal_light + xml_path: assets/xml/objects/object_efc_crystal_light.xml +- name: objects/object_efc_doughnut + xml_path: assets/xml/objects/object_efc_doughnut.xml +- name: objects/object_efc_erupc + xml_path: assets/xml/objects/object_efc_erupc.xml +- name: objects/object_efc_fire_ball + xml_path: assets/xml/objects/object_efc_fire_ball.xml +- name: objects/object_efc_flash + xml_path: assets/xml/objects/object_efc_flash.xml +- name: objects/object_efc_lgt_shower + xml_path: assets/xml/objects/object_efc_lgt_shower.xml +- name: objects/object_efc_star_field + xml_path: assets/xml/objects/object_efc_star_field.xml +- name: objects/object_efc_tw + xml_path: assets/xml/objects/object_efc_tw.xml +- name: objects/object_ei + xml_path: assets/xml/objects/object_ei.xml +- name: objects/object_fa + xml_path: assets/xml/objects/object_fa.xml +- name: objects/object_fd + xml_path: assets/xml/objects/object_fd.xml +- name: objects/object_fd2 + xml_path: assets/xml/objects/object_fd2.xml +- name: objects/object_fhg + xml_path: assets/xml/objects/object_fhg.xml +- name: objects/object_fire + xml_path: assets/xml/objects/object_fire.xml +- name: objects/object_firefly + xml_path: assets/xml/objects/object_firefly.xml +- name: objects/object_fish + xml_path: assets/xml/objects/object_fish.xml +- name: objects/object_fr + xml_path: assets/xml/objects/object_fr.xml +- name: objects/object_fu + xml_path: assets/xml/objects/object_fu.xml +- name: objects/object_fw + xml_path: assets/xml/objects/object_fw.xml +- name: objects/object_fz + xml_path: assets/xml/objects/object_fz.xml +- name: objects/object_ganon + xml_path: assets/xml/objects/object_ganon.xml +- name: objects/object_ganon2 + xml_path: assets/xml/objects/object_ganon2.xml +- name: objects/object_ganon_anime1 + xml_path: assets/xml/objects/object_ganon_anime1.xml +- name: objects/object_ganon_anime2 + xml_path: assets/xml/objects/object_ganon_anime2.xml +- name: objects/object_ganon_anime3 + xml_path: assets/xml/objects/object_ganon_anime3.xml +- name: objects/object_ganon_objects + xml_path: assets/xml/objects/object_ganon_objects.xml +- name: objects/object_ge1 + xml_path: assets/xml/objects/object_ge1.xml +- name: objects/object_geff + xml_path: assets/xml/objects/object_geff.xml +- name: objects/object_geldb + xml_path: assets/xml/objects/object_geldb.xml +- name: objects/object_gi_arrow + xml_path: assets/xml/objects/object_gi_arrow.xml +- name: objects/object_gi_arrowcase + xml_path: assets/xml/objects/object_gi_arrowcase.xml +- name: objects/object_gi_bean + xml_path: assets/xml/objects/object_gi_bean.xml +- name: objects/object_gi_bomb_1 + xml_path: assets/xml/objects/object_gi_bomb_1.xml +- name: objects/object_gi_bomb_2 + xml_path: assets/xml/objects/object_gi_bomb_2.xml +- name: objects/object_gi_bombpouch + xml_path: assets/xml/objects/object_gi_bombpouch.xml +- name: objects/object_gi_boomerang + xml_path: assets/xml/objects/object_gi_boomerang.xml +- name: objects/object_gi_boots_2 + xml_path: assets/xml/objects/object_gi_boots_2.xml +- name: objects/object_gi_bosskey + xml_path: assets/xml/objects/object_gi_bosskey.xml +- name: objects/object_gi_bottle + xml_path: assets/xml/objects/object_gi_bottle.xml +- name: objects/object_gi_bottle_letter + xml_path: assets/xml/objects/object_gi_bottle_letter.xml +- name: objects/object_gi_bow + xml_path: assets/xml/objects/object_gi_bow.xml +- name: objects/object_gi_bracelet + xml_path: assets/xml/objects/object_gi_bracelet.xml +- name: objects/object_gi_brokensword + xml_path: assets/xml/objects/object_gi_brokensword.xml +- name: objects/object_gi_butterfly + xml_path: assets/xml/objects/object_gi_butterfly.xml +- name: objects/object_gi_clothes + xml_path: assets/xml/objects/object_gi_clothes.xml +- name: objects/object_gi_coin + xml_path: assets/xml/objects/object_gi_coin.xml +- name: objects/object_gi_compass + xml_path: assets/xml/objects/object_gi_compass.xml +- name: objects/object_gi_dekupouch + xml_path: assets/xml/objects/object_gi_dekupouch.xml +- name: objects/object_gi_egg + xml_path: assets/xml/objects/object_gi_egg.xml +- name: objects/object_gi_eye_lotion + xml_path: assets/xml/objects/object_gi_eye_lotion.xml +- name: objects/object_gi_fire + xml_path: assets/xml/objects/object_gi_fire.xml +- name: objects/object_gi_fish + xml_path: assets/xml/objects/object_gi_fish.xml +- name: objects/object_gi_frog + xml_path: assets/xml/objects/object_gi_frog.xml +- name: objects/object_gi_gerudo + xml_path: assets/xml/objects/object_gi_gerudo.xml +- name: objects/object_gi_gerudomask + xml_path: assets/xml/objects/object_gi_gerudomask.xml +- name: objects/object_gi_ghost + xml_path: assets/xml/objects/object_gi_ghost.xml +- name: objects/object_gi_glasses + xml_path: assets/xml/objects/object_gi_glasses.xml +- name: objects/object_gi_gloves + xml_path: assets/xml/objects/object_gi_gloves.xml +- name: objects/object_gi_goddess + xml_path: assets/xml/objects/object_gi_goddess.xml +- name: objects/object_gi_golonmask + xml_path: assets/xml/objects/object_gi_golonmask.xml +- name: objects/object_gi_grass + xml_path: assets/xml/objects/object_gi_grass.xml +- name: objects/object_gi_hammer + xml_path: assets/xml/objects/object_gi_hammer.xml +- name: objects/object_gi_heart + xml_path: assets/xml/objects/object_gi_heart.xml +- name: objects/object_gi_hearts + xml_path: assets/xml/objects/object_gi_hearts.xml +- name: objects/object_gi_hookshot + xml_path: assets/xml/objects/object_gi_hookshot.xml +- name: objects/object_gi_hoverboots + xml_path: assets/xml/objects/object_gi_hoverboots.xml +- name: objects/object_gi_insect + xml_path: assets/xml/objects/object_gi_insect.xml +- name: objects/object_gi_jewel + xml_path: assets/xml/objects/object_gi_jewel.xml +- name: objects/object_gi_key + xml_path: assets/xml/objects/object_gi_key.xml +- name: objects/object_gi_ki_tan_mask + xml_path: assets/xml/objects/object_gi_ki_tan_mask.xml +- name: objects/object_gi_letter + xml_path: assets/xml/objects/object_gi_letter.xml +- name: objects/object_gi_liquid + xml_path: assets/xml/objects/object_gi_liquid.xml +- name: objects/object_gi_longsword + xml_path: assets/xml/objects/object_gi_longsword.xml +- name: objects/object_gi_m_arrow + xml_path: assets/xml/objects/object_gi_m_arrow.xml +- name: objects/object_gi_magicpot + xml_path: assets/xml/objects/object_gi_magicpot.xml +- name: objects/object_gi_map + xml_path: assets/xml/objects/object_gi_map.xml +- name: objects/object_gi_medal + xml_path: assets/xml/objects/object_gi_medal.xml +- name: objects/object_gi_melody + xml_path: assets/xml/objects/object_gi_melody.xml +- name: objects/object_gi_milk + xml_path: assets/xml/objects/object_gi_milk.xml +- name: objects/object_gi_mushroom + xml_path: assets/xml/objects/object_gi_mushroom.xml +- name: objects/object_gi_niwatori + xml_path: assets/xml/objects/object_gi_niwatori.xml +- name: objects/object_gi_nuts + xml_path: assets/xml/objects/object_gi_nuts.xml +- name: objects/object_gi_ocarina + xml_path: assets/xml/objects/object_gi_ocarina.xml +- name: objects/object_gi_ocarina_0 + xml_path: assets/xml/objects/object_gi_ocarina_0.xml +- name: objects/object_gi_pachinko + xml_path: assets/xml/objects/object_gi_pachinko.xml +- name: objects/object_gi_powder + xml_path: assets/xml/objects/object_gi_powder.xml +- name: objects/object_gi_prescription + xml_path: assets/xml/objects/object_gi_prescription.xml +- name: objects/object_gi_purse + xml_path: assets/xml/objects/object_gi_purse.xml +- name: objects/object_gi_rabit_mask + xml_path: assets/xml/objects/object_gi_rabit_mask.xml +- name: objects/object_gi_redead_mask + xml_path: assets/xml/objects/object_gi_redead_mask.xml +- name: objects/object_gi_rupy + xml_path: assets/xml/objects/object_gi_rupy.xml +- name: objects/object_gi_saw + xml_path: assets/xml/objects/object_gi_saw.xml +- name: objects/object_gi_scale + xml_path: assets/xml/objects/object_gi_scale.xml +- name: objects/object_gi_seed + xml_path: assets/xml/objects/object_gi_seed.xml +- name: objects/object_gi_shield_1 + xml_path: assets/xml/objects/object_gi_shield_1.xml +- name: objects/object_gi_shield_2 + xml_path: assets/xml/objects/object_gi_shield_2.xml +- name: objects/object_gi_shield_3 + xml_path: assets/xml/objects/object_gi_shield_3.xml +- name: objects/object_gi_skj_mask + xml_path: assets/xml/objects/object_gi_skj_mask.xml +- name: objects/object_gi_soldout + xml_path: assets/xml/objects/object_gi_soldout.xml +- name: objects/object_gi_soul + xml_path: assets/xml/objects/object_gi_soul.xml +- name: objects/object_gi_stick + xml_path: assets/xml/objects/object_gi_stick.xml +- name: objects/object_gi_sutaru + xml_path: assets/xml/objects/object_gi_sutaru.xml +- name: objects/object_gi_sword_1 + xml_path: assets/xml/objects/object_gi_sword_1.xml +- name: objects/object_gi_ticketstone + xml_path: assets/xml/objects/object_gi_ticketstone.xml +- name: objects/object_gi_truth_mask + xml_path: assets/xml/objects/object_gi_truth_mask.xml +- name: objects/object_gi_zoramask + xml_path: assets/xml/objects/object_gi_zoramask.xml +- name: objects/object_gj + xml_path: assets/xml/objects/object_gj.xml +- name: objects/object_gjyo_objects + xml_path: assets/xml/objects/object_gjyo_objects.xml +- name: objects/object_gla + xml_path: assets/xml/objects/object_gla.xml +- name: objects/object_gm + xml_path: assets/xml/objects/object_gm.xml +- name: objects/object_gnd + xml_path: assets/xml/objects/object_gnd.xml +- name: objects/object_gnd_magic + xml_path: assets/xml/objects/object_gnd_magic.xml +- name: objects/object_gndd + xml_path: assets/xml/objects/object_gndd.xml +- name: objects/object_god_lgt + xml_path: assets/xml/objects/object_god_lgt.xml +- name: objects/object_gol + xml_path: assets/xml/objects/object_gol.xml +- name: objects/object_goma + xml_path: assets/xml/objects/object_goma.xml +- name: objects/object_goroiwa + xml_path: assets/xml/objects/object_goroiwa.xml +- name: objects/object_gr + xml_path: assets/xml/objects/object_gr.xml +- name: objects/object_gs + xml_path: assets/xml/objects/object_gs.xml +- name: objects/object_gt + xml_path: assets/xml/objects/object_gt.xml +- name: objects/object_haka + xml_path: assets/xml/objects/object_haka.xml +- name: objects/object_haka_door + xml_path: assets/xml/objects/object_haka_door.xml +- name: objects/object_haka_objects + xml_path: assets/xml/objects/object_haka_objects.xml +- name: objects/object_hakach_objects + xml_path: assets/xml/objects/object_hakach_objects.xml +- name: objects/object_hata + xml_path: assets/xml/objects/object_hata.xml +- name: objects/object_heavy_object + xml_path: assets/xml/objects/object_heavy_object.xml +- name: objects/object_hidan_objects + xml_path: assets/xml/objects/object_hidan_objects.xml +- name: objects/object_hintnuts + xml_path: assets/xml/objects/object_hintnuts.xml +- name: objects/object_hni + xml_path: assets/xml/objects/object_hni.xml +- name: objects/object_horse + xml_path: assets/xml/objects/object_horse.xml +- name: objects/object_horse_ganon + xml_path: assets/xml/objects/object_horse_ganon.xml +- name: objects/object_horse_link_child + xml_path: assets/xml/objects/object_horse_link_child.xml +- name: objects/object_horse_normal + xml_path: assets/xml/objects/object_horse_normal.xml +- name: objects/object_horse_zelda + xml_path: assets/xml/objects/object_horse_zelda.xml +- name: objects/object_hs + xml_path: assets/xml/objects/object_hs.xml +- name: objects/object_human + xml_path: assets/xml/objects/object_human.xml +- name: objects/object_ice_objects + xml_path: assets/xml/objects/object_ice_objects.xml +- name: objects/object_ik + xml_path: assets/xml/objects/object_ik.xml +- name: objects/object_im + xml_path: assets/xml/objects/object_im.xml +- name: objects/object_in + xml_path: assets/xml/objects/object_in.xml +- name: objects/object_ingate + xml_path: assets/xml/objects/object_ingate.xml +- name: objects/object_jj + xml_path: assets/xml/objects/object_jj.xml +- name: objects/object_js + xml_path: assets/xml/objects/object_js.xml +- name: objects/object_jya_door + xml_path: assets/xml/objects/object_jya_door.xml +- name: objects/object_jya_iron + xml_path: assets/xml/objects/object_jya_iron.xml +- name: objects/object_jya_obj + xml_path: assets/xml/objects/object_jya_obj.xml +- name: objects/object_ka + xml_path: assets/xml/objects/object_ka.xml +- name: objects/object_kanban + xml_path: assets/xml/objects/object_kanban.xml +- name: objects/object_kibako2 + xml_path: assets/xml/objects/object_kibako2.xml +- name: objects/object_kingdodongo + xml_path: assets/xml/objects/object_kingdodongo.xml +- name: objects/object_km1 + xml_path: assets/xml/objects/object_km1.xml +- name: objects/object_kusa + xml_path: assets/xml/objects/object_kusa.xml +- name: objects/object_kw1 + xml_path: assets/xml/objects/object_kw1.xml +- name: objects/object_kz + xml_path: assets/xml/objects/object_kz.xml +- name: objects/object_light_ring + xml_path: assets/xml/objects/object_light_ring.xml +- name: objects/object_lightbox + xml_path: assets/xml/objects/object_lightbox.xml +- name: objects/object_lightswitch + xml_path: assets/xml/objects/object_lightswitch.xml +- name: objects/object_link_boy + xml_path: assets/xml/objects/object_link_boy.xml +- name: objects/object_link_child + xml_path: assets/xml/objects/object_link_child.xml +- name: objects/object_ma1 + xml_path: assets/xml/objects/object_ma1.xml +- name: objects/object_ma2 + xml_path: assets/xml/objects/object_ma2.xml +- name: objects/object_mag + xml_path: assets/xml/objects/object_mag.xml +- name: objects/object_mamenoki + xml_path: assets/xml/objects/object_mamenoki.xml +- name: objects/object_mastergolon + xml_path: assets/xml/objects/object_mastergolon.xml +- name: objects/object_masterkokiri + xml_path: assets/xml/objects/object_masterkokiri.xml +- name: objects/object_masterkokirihead + xml_path: assets/xml/objects/object_masterkokirihead.xml +- name: objects/object_masterzoora + xml_path: assets/xml/objects/object_masterzoora.xml +- name: objects/object_mb + xml_path: assets/xml/objects/object_mb.xml +- name: objects/object_md + xml_path: assets/xml/objects/object_md.xml +- name: objects/object_medal + xml_path: assets/xml/objects/object_medal.xml +- name: objects/object_menkuri_objects + xml_path: assets/xml/objects/object_menkuri_objects.xml +- name: objects/object_mir_ray + xml_path: assets/xml/objects/object_mir_ray.xml +- name: objects/object_mizu_objects + xml_path: assets/xml/objects/object_mizu_objects.xml +- name: objects/object_mjin + xml_path: assets/xml/objects/object_mjin.xml +- name: objects/object_mjin_dark + xml_path: assets/xml/objects/object_mjin_dark.xml +- name: objects/object_mjin_flame + xml_path: assets/xml/objects/object_mjin_flame.xml +- name: objects/object_mjin_flash + xml_path: assets/xml/objects/object_mjin_flash.xml +- name: objects/object_mjin_ice + xml_path: assets/xml/objects/object_mjin_ice.xml +- name: objects/object_mjin_oka + xml_path: assets/xml/objects/object_mjin_oka.xml +- name: objects/object_mjin_soul + xml_path: assets/xml/objects/object_mjin_soul.xml +- name: objects/object_mjin_wind + xml_path: assets/xml/objects/object_mjin_wind.xml +- name: objects/object_mk + xml_path: assets/xml/objects/object_mk.xml +- name: objects/object_mm + xml_path: assets/xml/objects/object_mm.xml +- name: objects/object_mo + xml_path: assets/xml/objects/object_mo.xml +- name: objects/object_mori_hineri1 + xml_path: assets/xml/objects/object_mori_hineri1.xml +- name: objects/object_mori_hineri1a + xml_path: assets/xml/objects/object_mori_hineri1a.xml +- name: objects/object_mori_hineri2 + xml_path: assets/xml/objects/object_mori_hineri2.xml +- name: objects/object_mori_hineri2a + xml_path: assets/xml/objects/object_mori_hineri2a.xml +- name: objects/object_mori_objects + xml_path: assets/xml/objects/object_mori_objects.xml +- name: objects/object_mori_tex + xml_path: assets/xml/objects/object_mori_tex.xml +- name: objects/object_ms + xml_path: assets/xml/objects/object_ms.xml +- name: objects/object_mu + xml_path: assets/xml/objects/object_mu.xml +- name: objects/object_nb + xml_path: assets/xml/objects/object_nb.xml +- name: objects/object_niw + xml_path: assets/xml/objects/object_niw.xml +- name: objects/object_nwc + xml_path: assets/xml/objects/object_nwc.xml +- name: objects/object_ny + xml_path: assets/xml/objects/object_ny.xml +- name: objects/object_o_anime + xml_path: assets/xml/objects/object_o_anime.xml +- name: objects/object_oA1 + xml_path: assets/xml/objects/object_oA1.xml +- name: objects/object_oA2 + xml_path: assets/xml/objects/object_oA2.xml +- name: objects/object_oA3 + xml_path: assets/xml/objects/object_oA3.xml +- name: objects/object_oA4 + xml_path: assets/xml/objects/object_oA4.xml +- name: objects/object_oA5 + xml_path: assets/xml/objects/object_oA5.xml +- name: objects/object_oA6 + xml_path: assets/xml/objects/object_oA6.xml +- name: objects/object_oA7 + xml_path: assets/xml/objects/object_oA7.xml +- name: objects/object_oA8 + xml_path: assets/xml/objects/object_oA8.xml +- name: objects/object_oA9 + xml_path: assets/xml/objects/object_oA9.xml +- name: objects/object_oA10 + xml_path: assets/xml/objects/object_oA10.xml +- name: objects/object_oA11 + xml_path: assets/xml/objects/object_oA11.xml +- name: objects/object_oB1 + xml_path: assets/xml/objects/object_oB1.xml +- name: objects/object_oB2 + xml_path: assets/xml/objects/object_oB2.xml +- name: objects/object_oB3 + xml_path: assets/xml/objects/object_oB3.xml +- name: objects/object_oB4 + xml_path: assets/xml/objects/object_oB4.xml +- name: objects/object_oE1 + xml_path: assets/xml/objects/object_oE1.xml +- name: objects/object_oE1s + xml_path: assets/xml/objects/object_oE1s.xml +- name: objects/object_oE2 + xml_path: assets/xml/objects/object_oE2.xml +- name: objects/object_oE3 + xml_path: assets/xml/objects/object_oE3.xml +- name: objects/object_oE4 + xml_path: assets/xml/objects/object_oE4.xml +- name: objects/object_oE4s + xml_path: assets/xml/objects/object_oE4s.xml +- name: objects/object_oE5 + xml_path: assets/xml/objects/object_oE5.xml +- name: objects/object_oE6 + xml_path: assets/xml/objects/object_oE6.xml +- name: objects/object_oE7 + xml_path: assets/xml/objects/object_oE7.xml +- name: objects/object_oE8 + xml_path: assets/xml/objects/object_oE8.xml +- name: objects/object_oE9 + xml_path: assets/xml/objects/object_oE9.xml +- name: objects/object_oE10 + xml_path: assets/xml/objects/object_oE10.xml +- name: objects/object_oE11 + xml_path: assets/xml/objects/object_oE11.xml +- name: objects/object_oE12 + xml_path: assets/xml/objects/object_oE12.xml +- name: objects/object_oE_anime + xml_path: assets/xml/objects/object_oE_anime.xml +- name: objects/object_oF1d_map + xml_path: assets/xml/objects/object_oF1d_map.xml +- name: objects/object_oF1s + xml_path: assets/xml/objects/object_oF1s.xml +- name: objects/object_okuta + xml_path: assets/xml/objects/object_okuta.xml +- name: objects/object_opening_demo1 + xml_path: assets/xml/objects/object_opening_demo1.xml +- name: objects/object_os + xml_path: assets/xml/objects/object_os.xml +- name: objects/object_os_anime + xml_path: assets/xml/objects/object_os_anime.xml +- name: objects/object_ossan + xml_path: assets/xml/objects/object_ossan.xml +- name: objects/object_ouke_haka + xml_path: assets/xml/objects/object_ouke_haka.xml +- name: objects/object_owl + xml_path: assets/xml/objects/object_owl.xml +- name: objects/object_peehat + xml_path: assets/xml/objects/object_peehat.xml +- name: objects/object_po_composer + xml_path: assets/xml/objects/object_po_composer.xml +- name: objects/object_po_field + xml_path: assets/xml/objects/object_po_field.xml +- name: objects/object_po_sisters + xml_path: assets/xml/objects/object_po_sisters.xml +- name: objects/object_poh + xml_path: assets/xml/objects/object_poh.xml +- name: objects/object_ps + xml_path: assets/xml/objects/object_ps.xml +- name: objects/object_pu_box + xml_path: assets/xml/objects/object_pu_box.xml +- name: objects/object_rd + xml_path: assets/xml/objects/object_rd.xml +- name: objects/object_reeba + xml_path: assets/xml/objects/object_reeba.xml +- name: objects/object_relay_objects + xml_path: assets/xml/objects/object_relay_objects.xml +- name: objects/object_rl + xml_path: assets/xml/objects/object_rl.xml +- name: objects/object_rr + xml_path: assets/xml/objects/object_rr.xml +- name: objects/object_rs + xml_path: assets/xml/objects/object_rs.xml +- name: objects/object_ru1 + xml_path: assets/xml/objects/object_ru1.xml +- name: objects/object_ru2 + xml_path: assets/xml/objects/object_ru2.xml +- name: objects/object_sa + xml_path: assets/xml/objects/object_sa.xml +- name: objects/object_sb + xml_path: assets/xml/objects/object_sb.xml +- name: objects/object_sd + xml_path: assets/xml/objects/object_sd.xml +- name: objects/object_shop_dungen + xml_path: assets/xml/objects/object_shop_dungen.xml +- name: objects/object_shopnuts + xml_path: assets/xml/objects/object_shopnuts.xml +- name: objects/object_siofuki + xml_path: assets/xml/objects/object_siofuki.xml +- name: objects/object_sk2 + xml_path: assets/xml/objects/object_sk2.xml +- name: objects/object_skb + xml_path: assets/xml/objects/object_skb.xml +- name: objects/object_skj + xml_path: assets/xml/objects/object_skj.xml +- name: objects/object_spot00_break + xml_path: assets/xml/objects/object_spot00_break.xml +- name: objects/object_spot00_objects + xml_path: assets/xml/objects/object_spot00_objects.xml +- name: objects/object_spot01_matoya + xml_path: assets/xml/objects/object_spot01_matoya.xml +- name: objects/object_spot01_matoyab + xml_path: assets/xml/objects/object_spot01_matoyab.xml +- name: objects/object_spot01_objects + xml_path: assets/xml/objects/object_spot01_objects.xml +- name: objects/object_spot01_objects2 + xml_path: assets/xml/objects/object_spot01_objects2.xml +- name: objects/object_spot02_objects + xml_path: assets/xml/objects/object_spot02_objects.xml +- name: objects/object_spot03_object + xml_path: assets/xml/objects/object_spot03_object.xml +- name: objects/object_spot04_objects + xml_path: assets/xml/objects/object_spot04_objects.xml +- name: objects/object_spot05_objects + xml_path: assets/xml/objects/object_spot05_objects.xml +- name: objects/object_spot06_objects + xml_path: assets/xml/objects/object_spot06_objects.xml +- name: objects/object_spot07_object + xml_path: assets/xml/objects/object_spot07_object.xml +- name: objects/object_spot08_obj + xml_path: assets/xml/objects/object_spot08_obj.xml +- name: objects/object_spot09_obj + xml_path: assets/xml/objects/object_spot09_obj.xml +- name: objects/object_spot11_obj + xml_path: assets/xml/objects/object_spot11_obj.xml +- name: objects/object_spot12_obj + xml_path: assets/xml/objects/object_spot12_obj.xml +- name: objects/object_spot15_obj + xml_path: assets/xml/objects/object_spot15_obj.xml +- name: objects/object_spot16_obj + xml_path: assets/xml/objects/object_spot16_obj.xml +- name: objects/object_spot17_obj + xml_path: assets/xml/objects/object_spot17_obj.xml +- name: objects/object_spot18_obj + xml_path: assets/xml/objects/object_spot18_obj.xml +- name: objects/object_ssh + xml_path: assets/xml/objects/object_ssh.xml +- name: objects/object_sst + xml_path: assets/xml/objects/object_sst.xml +- name: objects/object_st + xml_path: assets/xml/objects/object_st.xml +- name: objects/object_stream + xml_path: assets/xml/objects/object_stream.xml +- name: objects/object_syokudai + xml_path: assets/xml/objects/object_syokudai.xml +- name: objects/object_ta + xml_path: assets/xml/objects/object_ta.xml +- name: objects/object_timeblock + xml_path: assets/xml/objects/object_timeblock.xml +- name: objects/object_tite + xml_path: assets/xml/objects/object_tite.xml +- name: objects/object_tk + xml_path: assets/xml/objects/object_tk.xml +- name: objects/object_toki_objects + xml_path: assets/xml/objects/object_toki_objects.xml +- name: objects/object_torch2 + xml_path: assets/xml/objects/object_torch2.xml +- name: objects/object_toryo + xml_path: assets/xml/objects/object_toryo.xml +- name: objects/object_tp + xml_path: assets/xml/objects/object_tp.xml +- name: objects/object_tr + xml_path: assets/xml/objects/object_tr.xml +- name: objects/object_trap + xml_path: assets/xml/objects/object_trap.xml +- name: objects/object_triforce_spot + xml_path: assets/xml/objects/object_triforce_spot.xml +- name: objects/object_ts + xml_path: assets/xml/objects/object_ts.xml +- name: objects/object_tsubo + xml_path: assets/xml/objects/object_tsubo.xml +- name: objects/object_tw + xml_path: assets/xml/objects/object_tw.xml +- name: objects/object_umajump + xml_path: assets/xml/objects/object_umajump.xml +- name: objects/object_vali + xml_path: assets/xml/objects/object_vali.xml +- name: objects/object_vase + xml_path: assets/xml/objects/object_vase.xml +- name: objects/object_vm + xml_path: assets/xml/objects/object_vm.xml +- name: objects/object_wallmaster + xml_path: assets/xml/objects/object_wallmaster.xml +- name: objects/object_warp1 + xml_path: assets/xml/objects/object_warp1.xml +- name: objects/object_warp2 + xml_path: assets/xml/objects/object_warp2.xml +- name: objects/object_wf + xml_path: assets/xml/objects/object_wf.xml +- name: objects/object_wood02 + xml_path: assets/xml/objects/object_wood02.xml +- name: objects/object_xc + xml_path: assets/xml/objects/object_xc.xml +- name: objects/object_yabusame_point + xml_path: assets/xml/objects/object_yabusame_point.xml +- name: objects/object_ydan_objects + xml_path: assets/xml/objects/object_ydan_objects.xml +- name: objects/object_yukabyun + xml_path: assets/xml/objects/object_yukabyun.xml +- name: objects/object_zf + xml_path: assets/xml/objects/object_zf.xml +- name: objects/object_zg + xml_path: assets/xml/objects/object_zg.xml +- name: objects/object_zl1 + xml_path: assets/xml/objects/object_zl1.xml +- name: objects/object_zl2 + xml_path: assets/xml/objects/object_zl2.xml +- name: objects/object_zl2_anime1 + xml_path: assets/xml/objects/object_zl2_anime1.xml +- name: objects/object_zl2_anime2 + xml_path: assets/xml/objects/object_zl2_anime2.xml +- name: objects/object_zl4 + xml_path: assets/xml/objects/object_zl4.xml +- name: objects/object_zo + xml_path: assets/xml/objects/object_zo.xml +- name: overlays/ovl_Arrow_Fire + xml_path: assets/xml/overlays/ovl_Arrow_Fire.xml + start_offset: 0x960 + end_offset: 0x1D80 +- name: overlays/ovl_Arrow_Ice + xml_path: assets/xml/overlays/ovl_Arrow_Ice.xml + start_offset: 0x980 + end_offset: 0x1DA0 +- name: overlays/ovl_Arrow_Light + xml_path: assets/xml/overlays/ovl_Arrow_Light.xml + start_offset: 0x990 + end_offset: 0x1DB0 +- name: overlays/ovl_Bg_Ganon_Otyuka + xml_path: assets/xml/overlays/ovl_Bg_Ganon_Otyuka.xml + start_offset: 0x1110 + end_offset: 0x24EC +- name: overlays/ovl_Bg_Jya_Cobra + xml_path: assets/xml/overlays/ovl_Bg_Jya_Cobra.xml + start_offset: 0x1830 + end_offset: 0x18A8 +- name: overlays/ovl_Boss_Dodongo + xml_path: assets/xml/overlays/ovl_Boss_Dodongo.xml + start_offset: 0x61C8 + end_offset: 0x91C8 +- name: overlays/ovl_Boss_Ganon + xml_path: assets/xml/overlays/ovl_Boss_Ganon.xml + start_offset: 0xE398 + end_offset: 0x20EB8 +- name: overlays/ovl_Boss_Ganon2 + xml_path: assets/xml/overlays/ovl_Boss_Ganon2.xml + start_offset: 0x9F48 + end_offset: 0x103F8 +- name: overlays/ovl_Boss_Sst + xml_path: assets/xml/overlays/ovl_Boss_Sst.xml + start_offset: 0xA330 + end_offset: 0xACE0 +- name: overlays/ovl_Demo_Shd + xml_path: assets/xml/overlays/ovl_Demo_Shd.xml + start_offset: 0x410 + end_offset: 0x2390 +- name: overlays/ovl_Effect_Ss_Fhg_Flash + xml_path: assets/xml/overlays/ovl_Effect_Ss_Fhg_Flash.xml + start_offset: 0x9F0 + end_offset: 0xEA8 +- name: overlays/ovl_En_Bili + xml_path: assets/xml/overlays/ovl_En_Bili.xml + start_offset: 0x1E40 + end_offset: 0x1E60 +- name: overlays/ovl_En_Clear_Tag + xml_path: assets/xml/overlays/ovl_En_Clear_Tag.xml + start_offset: 0x2600 + end_offset: 0x8900 +- name: overlays/ovl_En_Ganon_Mant + xml_path: assets/xml/overlays/ovl_En_Ganon_Mant.xml + start_offset: 0x11E8 + end_offset: 0x40E8 +- name: overlays/ovl_En_Ganon_Organ + xml_path: assets/xml/overlays/ovl_En_Ganon_Organ.xml + start_offset: 0x328 + end_offset: 0x6EB0 +- name: overlays/ovl_En_Holl + xml_path: assets/xml/overlays/ovl_En_Holl.xml + start_offset: 0xE68 + end_offset: 0xED0 +- name: overlays/ovl_En_Jsjutan + xml_path: assets/xml/overlays/ovl_En_Jsjutan.xml + start_offset: 0x12B8 + end_offset: 0x4C50 +- name: overlays/ovl_En_Kanban + xml_path: assets/xml/overlays/ovl_En_Kanban.xml + start_offset: 0x2E70 + end_offset: 0x2F30 +- name: overlays/ovl_En_Sda + xml_path: assets/xml/overlays/ovl_En_Sda.xml + start_offset: 0x14A8 + end_offset: 0x1538 +- name: overlays/ovl_En_Ssh + xml_path: assets/xml/overlays/ovl_En_Ssh.xml + start_offset: 0x2150 + end_offset: 0x21E0 +- name: overlays/ovl_En_St + xml_path: assets/xml/overlays/ovl_En_St.xml + start_offset: 0x26A0 + end_offset: 0x2730 +- name: overlays/ovl_En_Sth + xml_path: assets/xml/overlays/ovl_En_Sth.xml + start_offset: 0xE60 + end_offset: 0x3E34 +- name: overlays/ovl_End_Title + xml_path: assets/xml/overlays/ovl_End_Title.xml + start_offset: 0x6F0 + end_offset: 0x4098 +- name: overlays/ovl_file_choose + xml_path: assets/xml/overlays/ovl_file_choose.xml + start_offset: 0xEC50 + end_offset: 0xF330 +- name: overlays/ovl_Magic_Dark + xml_path: assets/xml/overlays/ovl_Magic_Dark.xml + start_offset: 0xC90 + end_offset: 0x16C0 +- name: overlays/ovl_Magic_Fire + xml_path: assets/xml/overlays/ovl_Magic_Fire.xml + start_offset: 0xB20 + end_offset: 0x2170 +- name: overlays/ovl_Magic_Wind + xml_path: assets/xml/overlays/ovl_Magic_Wind.xml + start_offset: 0x6A0 + end_offset: 0x1BB8 +- name: overlays/ovl_Oceff_Spot + xml_path: assets/xml/overlays/ovl_Oceff_Spot.xml + start_offset: 0x780 + end_offset: 0xE58 +- name: overlays/ovl_Oceff_Storm + xml_path: assets/xml/overlays/ovl_Oceff_Storm.xml + start_offset: 0x740 + end_offset: 0x1AD0 +- name: overlays/ovl_Oceff_Wipe + xml_path: assets/xml/overlays/ovl_Oceff_Wipe.xml + start_offset: 0x4F0 + end_offset: 0xCB0 +- name: overlays/ovl_Oceff_Wipe2 + xml_path: assets/xml/overlays/ovl_Oceff_Wipe2.xml + start_offset: 0x430 + end_offset: 0x1698 +- name: overlays/ovl_Oceff_Wipe3 + xml_path: assets/xml/overlays/ovl_Oceff_Wipe3.xml + start_offset: 0x430 + end_offset: 0x1678 +- name: overlays/ovl_Oceff_Wipe4 + xml_path: assets/xml/overlays/ovl_Oceff_Wipe4.xml + start_offset: 0x410 + end_offset: 0xEF8 +- name: scenes/dungeons/bdan + xml_path: assets/xml/scenes/dungeons/bdan.xml +- name: scenes/dungeons/bdan_boss + xml_path: assets/xml/scenes/dungeons/bdan_boss.xml +- name: scenes/dungeons/Bmori1 + xml_path: assets/xml/scenes/dungeons/Bmori1.xml +- name: scenes/dungeons/ddan + xml_path: assets/xml/scenes/dungeons/ddan.xml +- name: scenes/dungeons/ddan_boss + xml_path: assets/xml/scenes/dungeons/ddan_boss.xml +- name: scenes/dungeons/FIRE_bs + xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml +- name: scenes/dungeons/ganon + xml_path: assets/xml/scenes/dungeons/ganon.xml +- name: scenes/dungeons/ganon_boss + xml_path: assets/xml/scenes/dungeons/ganon_boss.xml +- name: scenes/dungeons/ganon_demo + xml_path: assets/xml/scenes/dungeons/ganon_demo.xml +- name: scenes/dungeons/ganon_final + xml_path: assets/xml/scenes/dungeons/ganon_final.xml +- name: scenes/dungeons/ganon_sonogo + xml_path: assets/xml/scenes/dungeons/ganon_sonogo.xml +- name: scenes/dungeons/ganontika + xml_path: assets/xml/scenes/dungeons/ganontika.xml +- name: scenes/dungeons/ganontikasonogo + xml_path: assets/xml/scenes/dungeons/ganontikasonogo.xml +- name: scenes/dungeons/gerudoway + xml_path: assets/xml/scenes/dungeons/gerudoway.xml +- name: scenes/dungeons/HAKAdan + xml_path: assets/xml/scenes/dungeons/HAKAdan.xml +- name: scenes/dungeons/HAKAdan_bs + xml_path: assets/xml/scenes/dungeons/HAKAdan_bs.xml +- name: scenes/dungeons/HAKAdanCH + xml_path: assets/xml/scenes/dungeons/HAKAdanCH.xml +- name: scenes/dungeons/HIDAN + xml_path: assets/xml/scenes/dungeons/HIDAN.xml +- name: scenes/dungeons/ice_doukutu + xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml +- name: scenes/dungeons/jyasinboss + xml_path: assets/xml/scenes/dungeons/jyasinboss.xml +- name: scenes/dungeons/jyasinzou + xml_path: assets/xml/scenes/dungeons/jyasinzou.xml +- name: scenes/dungeons/men + xml_path: assets/xml/scenes/dungeons/men.xml +- name: scenes/dungeons/MIZUsin + xml_path: assets/xml/scenes/dungeons/MIZUsin.xml +- name: scenes/dungeons/MIZUsin_bs + xml_path: assets/xml/scenes/dungeons/MIZUsin_bs.xml +- name: scenes/dungeons/moribossroom + xml_path: assets/xml/scenes/dungeons/moribossroom.xml +- name: scenes/dungeons/ydan + xml_path: assets/xml/scenes/dungeons/ydan.xml +- name: scenes/dungeons/ydan_boss + xml_path: assets/xml/scenes/dungeons/ydan_boss.xml +- name: scenes/indoors/bowling + xml_path: assets/xml/scenes/indoors/bowling.xml +- name: scenes/indoors/daiyousei_izumi + xml_path: assets/xml/scenes/indoors/daiyousei_izumi.xml +- name: scenes/indoors/hairal_niwa + xml_path: assets/xml/scenes/indoors/hairal_niwa.xml +- name: scenes/indoors/hairal_niwa_n + xml_path: assets/xml/scenes/indoors/hairal_niwa_n.xml +- name: scenes/indoors/hakasitarelay + xml_path: assets/xml/scenes/indoors/hakasitarelay.xml +- name: scenes/indoors/hut + xml_path: assets/xml/scenes/indoors/hut.xml +- name: scenes/indoors/hylia_labo + xml_path: assets/xml/scenes/indoors/hylia_labo.xml +- name: scenes/indoors/impa + xml_path: assets/xml/scenes/indoors/impa.xml +- name: scenes/indoors/kakariko + xml_path: assets/xml/scenes/indoors/kakariko.xml +- name: scenes/indoors/kenjyanoma + xml_path: assets/xml/scenes/indoors/kenjyanoma.xml +- name: scenes/indoors/kokiri_home + xml_path: assets/xml/scenes/indoors/kokiri_home.xml +- name: scenes/indoors/kokiri_home3 + xml_path: assets/xml/scenes/indoors/kokiri_home3.xml +- name: scenes/indoors/kokiri_home4 + xml_path: assets/xml/scenes/indoors/kokiri_home4.xml +- name: scenes/indoors/kokiri_home5 + xml_path: assets/xml/scenes/indoors/kokiri_home5.xml +- name: scenes/indoors/labo + xml_path: assets/xml/scenes/indoors/labo.xml +- name: scenes/indoors/link_home + xml_path: assets/xml/scenes/indoors/link_home.xml +- name: scenes/indoors/mahouya + xml_path: assets/xml/scenes/indoors/mahouya.xml +- name: scenes/indoors/malon_stable + xml_path: assets/xml/scenes/indoors/malon_stable.xml +- name: scenes/indoors/miharigoya + xml_path: assets/xml/scenes/indoors/miharigoya.xml +- name: scenes/indoors/nakaniwa + xml_path: assets/xml/scenes/indoors/nakaniwa.xml +- name: scenes/indoors/souko + xml_path: assets/xml/scenes/indoors/souko.xml +- name: scenes/indoors/syatekijyou + xml_path: assets/xml/scenes/indoors/syatekijyou.xml +- name: scenes/indoors/takaraya + xml_path: assets/xml/scenes/indoors/takaraya.xml +- name: scenes/indoors/tent + xml_path: assets/xml/scenes/indoors/tent.xml +- name: scenes/indoors/tokinoma + xml_path: assets/xml/scenes/indoors/tokinoma.xml +- name: scenes/indoors/yousei_izumi_tate + xml_path: assets/xml/scenes/indoors/yousei_izumi_tate.xml +- name: scenes/indoors/yousei_izumi_yoko + xml_path: assets/xml/scenes/indoors/yousei_izumi_yoko.xml +- name: scenes/misc/enrui + xml_path: assets/xml/scenes/misc/enrui.xml +- name: scenes/misc/entra + xml_path: assets/xml/scenes/misc/entra.xml +- name: scenes/misc/entra_n + xml_path: assets/xml/scenes/misc/entra_n.xml +- name: scenes/misc/hakaana + xml_path: assets/xml/scenes/misc/hakaana.xml +- name: scenes/misc/hakaana2 + xml_path: assets/xml/scenes/misc/hakaana2.xml +- name: scenes/misc/hakaana_ouke + xml_path: assets/xml/scenes/misc/hakaana_ouke.xml +- name: scenes/misc/hiral_demo + xml_path: assets/xml/scenes/misc/hiral_demo.xml +- name: scenes/misc/kakariko3 + xml_path: assets/xml/scenes/misc/kakariko3.xml +- name: scenes/misc/kakusiana + xml_path: assets/xml/scenes/misc/kakusiana.xml +- name: scenes/misc/kinsuta + xml_path: assets/xml/scenes/misc/kinsuta.xml +- name: scenes/misc/market_alley + xml_path: assets/xml/scenes/misc/market_alley.xml +- name: scenes/misc/market_alley_n + xml_path: assets/xml/scenes/misc/market_alley_n.xml +- name: scenes/misc/market_day + xml_path: assets/xml/scenes/misc/market_day.xml +- name: scenes/misc/market_night + xml_path: assets/xml/scenes/misc/market_night.xml +- name: scenes/misc/market_ruins + xml_path: assets/xml/scenes/misc/market_ruins.xml +- name: scenes/misc/shrine + xml_path: assets/xml/scenes/misc/shrine.xml +- name: scenes/misc/shrine_n + xml_path: assets/xml/scenes/misc/shrine_n.xml +- name: scenes/misc/shrine_r + xml_path: assets/xml/scenes/misc/shrine_r.xml +- name: scenes/misc/turibori + xml_path: assets/xml/scenes/misc/turibori.xml +- name: scenes/overworld/ganon_tou + xml_path: assets/xml/scenes/overworld/ganon_tou.xml +- name: scenes/overworld/spot00 + xml_path: assets/xml/scenes/overworld/spot00.xml +- name: scenes/overworld/spot01 + xml_path: assets/xml/scenes/overworld/spot01.xml +- name: scenes/overworld/spot02 + xml_path: assets/xml/scenes/overworld/spot02.xml +- name: scenes/overworld/spot03 + xml_path: assets/xml/scenes/overworld/spot03.xml +- name: scenes/overworld/spot04 + xml_path: assets/xml/scenes/overworld/spot04.xml +- name: scenes/overworld/spot05 + xml_path: assets/xml/scenes/overworld/spot05.xml +- name: scenes/overworld/spot06 + xml_path: assets/xml/scenes/overworld/spot06.xml +- name: scenes/overworld/spot07 + xml_path: assets/xml/scenes/overworld/spot07.xml +- name: scenes/overworld/spot08 + xml_path: assets/xml/scenes/overworld/spot08.xml +- name: scenes/overworld/spot09 + xml_path: assets/xml/scenes/overworld/spot09.xml +- name: scenes/overworld/spot10 + xml_path: assets/xml/scenes/overworld/spot10.xml +- name: scenes/overworld/spot11 + xml_path: assets/xml/scenes/overworld/spot11.xml +- name: scenes/overworld/spot12 + xml_path: assets/xml/scenes/overworld/spot12.xml +- name: scenes/overworld/spot13 + xml_path: assets/xml/scenes/overworld/spot13.xml +- name: scenes/overworld/spot15 + xml_path: assets/xml/scenes/overworld/spot15.xml +- name: scenes/overworld/spot16 + xml_path: assets/xml/scenes/overworld/spot16.xml +- name: scenes/overworld/spot17 + xml_path: assets/xml/scenes/overworld/spot17.xml +- name: scenes/overworld/spot18 + xml_path: assets/xml/scenes/overworld/spot18.xml +- name: scenes/overworld/spot20 + xml_path: assets/xml/scenes/overworld/spot20.xml +- name: scenes/shops/alley_shop + xml_path: assets/xml/scenes/shops/alley_shop.xml +- name: scenes/shops/drag + xml_path: assets/xml/scenes/shops/drag.xml +- name: scenes/shops/face_shop + xml_path: assets/xml/scenes/shops/face_shop.xml +- name: scenes/shops/golon + xml_path: assets/xml/scenes/shops/golon.xml +- name: scenes/shops/kokiri_shop + xml_path: assets/xml/scenes/shops/kokiri_shop.xml +- name: scenes/shops/night_shop + xml_path: assets/xml/scenes/shops/night_shop.xml +- name: scenes/shops/shop1 + xml_path: assets/xml/scenes/shops/shop1.xml +- name: scenes/shops/zoora + xml_path: assets/xml/scenes/shops/zoora.xml +- name: textures/backgrounds + xml_path: assets/xml/textures/backgrounds.xml +- name: textures/do_action_static + xml_path: assets/xml/textures/do_action_static.xml +- name: textures/icon_item_24_static + xml_path: assets/xml/textures/icon_item_24_static.xml +- name: textures/icon_item_dungeon_static + xml_path: assets/xml/textures/icon_item_dungeon_static.xml +- name: textures/icon_item_field_static + xml_path: assets/xml/textures/icon_item_field_static.xml +- name: textures/icon_item_gameover_static + xml_path: assets/xml/textures/icon_item_gameover_static.xml +- name: textures/icon_item_jpn_static + xml_path: assets/xml/textures/icon_item_jpn_static.xml +- name: textures/icon_item_nes_static + xml_path: assets/xml/textures/icon_item_nes_static.xml +- name: textures/icon_item_static + xml_path: assets/xml/textures/icon_item_static.xml +- name: textures/item_name_static + xml_path: assets/xml/textures/item_name_static.xml +- name: textures/kanji + xml_path: assets/xml/textures/kanji.xml +- name: textures/map_48x85_static + xml_path: assets/xml/textures/map_48x85_static.xml +- name: textures/map_grand_static + xml_path: assets/xml/textures/map_grand_static.xml +- name: textures/map_i_static + xml_path: assets/xml/textures/map_i_static.xml +- name: textures/map_name_static + xml_path: assets/xml/textures/map_name_static.xml +- name: textures/message_static + xml_path: assets/xml/textures/message_static.xml +- name: textures/message_texture_static + xml_path: assets/xml/textures/message_texture_static.xml +- name: textures/nes_font_static + xml_path: assets/xml/textures/nes_font_static.xml +- name: textures/nintendo_rogo_static + xml_path: assets/xml/textures/nintendo_rogo_static.xml +- name: textures/parameter_static + xml_path: assets/xml/textures/parameter_static.xml +- name: textures/place_title_cards + xml_path: assets/xml/textures/place_title_cards.xml +- name: textures/skyboxes + xml_path: assets/xml/textures/skyboxes.xml +- name: textures/title_static + xml_path: assets/xml/textures/title_static.xml diff --git a/baseroms/ntsc-1.0/segments.csv b/baseroms/ntsc-1.0/segments.csv new file mode 100644 index 0000000000..cb73e168af --- /dev/null +++ b/baseroms/ntsc-1.0/segments.csv @@ -0,0 +1,1511 @@ +Name,VRAM start +makerom,80000000 +boot,80000460 +dmadata, +Audiobank, +Audioseq, +Audiotable, +kanji, +link_animetion, +icon_item_static, +icon_item_24_static, +icon_item_field_static, +icon_item_dungeon_static, +icon_item_gameover_static, +icon_item_jpn_static, +icon_item_nes_static, +item_name_static, +map_name_static, +do_action_static, +message_static, +jpn_message_data_static, +message_texture_static, +nes_font_static, +nes_message_data_static, +staff_message_data_static, +map_grand_static, +map_i_static, +map_48x85_static, +code,800110A0 +n64dd,801C6E80 +ovl_title,80800000 +ovl_select,808009C0 +ovl_opening,80803720 +ovl_file_choose,80803880 +ovl_kaleido_scope,808137C0 +ovl_player_actor,808301C0 +ovl_map_mark_data,808567F0 +ovl_En_Test,8085D350 +ovl_En_GirlA,80862C00 +ovl_En_Part,80865520 +ovl_En_Light,80866B30 +ovl_En_Door,80867920 +ovl_En_Box,80868750 +ovl_En_Poh,8086A290 +ovl_En_Okuta,8086E420 +ovl_En_Bom,80870A00 +ovl_En_Wallmas,808718D0 +ovl_En_Dodongo,808732E0 +ovl_En_Firefly,80876080 +ovl_En_Horse,808781F0 +ovl_En_Arrow,80884410 +ovl_En_Elf,80885B00 +ovl_En_Niw,8088A4C0 +ovl_En_Tite,8088D7F0 +ovl_En_Reeba,80890590 +ovl_En_Peehat,80892000 +ovl_En_Holl,80895700 +ovl_En_Scene_Change,808966D0 +ovl_En_Zf,80896800 +ovl_En_Hata,8089D300 +ovl_Boss_Dodongo,8089D890 +ovl_Boss_Goma,808A7370 +ovl_En_Zl1,808AD2F0 +ovl_En_Viewer,808B10F0 +ovl_En_Goma,808B3FC0 +ovl_Bg_Pushbox,808B6C50 +ovl_En_Bubble,808B6F50 +ovl_Door_Shutter,808B8370 +ovl_En_Dodojr,808BA5F0 +ovl_En_Bdfire,808BC490 +ovl_En_Boom,808BD020 +ovl_En_Torch2,808BD8E0 +ovl_En_Bili,808C0080 +ovl_En_Tp,808C2350 +ovl_En_St,808C41A0 +ovl_En_Bw,808C6E10 +ovl_En_Eiyer,808CA170 +ovl_En_River_Sound,808CBDD0 +ovl_En_Horse_Normal,808CC760 +ovl_En_Ossan,808CED80 +ovl_Bg_Treemouth,808D5360 +ovl_Bg_Dodoago,808D69B0 +ovl_Bg_Hidan_Dalm,808D7760 +ovl_Bg_Hidan_Hrock,808D7FB0 +ovl_En_Horse_Ganon,808D87E0 +ovl_Bg_Hidan_Rock,808D9560 +ovl_Bg_Hidan_Rsekizou,808DA650 +ovl_Bg_Hidan_Sekizou,808DB230 +ovl_Bg_Hidan_Sima,808DC680 +ovl_Bg_Hidan_Syoku,808DD5A0 +ovl_En_Xc,808DDA00 +ovl_Bg_Hidan_Curtain,808E4190 +ovl_Bg_Spot00_Hanebasi,808E4C30 +ovl_En_Mb,808E5D40 +ovl_En_Bombf,808E9E80 +ovl_Bg_Hidan_Firewall,808EB2F0 +ovl_Bg_Dy_Yoseizo,808EBA50 +ovl_En_Zl2,808EE7A0 +ovl_Bg_Hidan_Fslift,808F2ED0 +ovl_En_OE2,808F33A0 +ovl_Bg_Ydan_Hasi,808F3480 +ovl_Bg_Ydan_Maruta,808F3C30 +ovl_Boss_Ganondrof,808F4310 +ovl_En_Am,808F9080 +ovl_En_Dekubaba,808FB480 +ovl_En_M_Fire1,808FEF20 +ovl_En_M_Thunder,808FF0C0 +ovl_Bg_Ddan_Jd,809006B0 +ovl_Bg_Breakwall,80900D00 +ovl_En_Jj,80901B70 +ovl_En_Horse_Zelda,80903140 +ovl_Bg_Ddan_Kd,80903C30 +ovl_Door_Warp1,80904520 +ovl_Obj_Syokudai,809087D0 +ovl_Item_B_Heart,80909410 +ovl_En_Dekunuts,80909800 +ovl_Bg_Menkuri_Kaiten,8090B000 +ovl_Bg_Menkuri_Eye,8090B190 +ovl_En_Vali,8090B630 +ovl_Bg_Mizu_Movebg,8090DCD0 +ovl_Bg_Mizu_Water,8090EE70 +ovl_Arms_Hook,8090FB40 +ovl_En_fHG,809108A0 +ovl_Bg_Mori_Hineri,809131D0 +ovl_En_Bb,80913EA0 +ovl_Bg_Toki_Hikari,80917B70 +ovl_En_Yukabyun,80918910 +ovl_Bg_Toki_Swd,80918F20 +ovl_En_Fhg_Fire,8091A570 +ovl_Bg_Mjin,8091CB90 +ovl_Bg_Hidan_Kousi,8091CF70 +ovl_Door_Toki,8091D4F0 +ovl_Bg_Hidan_Hamstep,8091D650 +ovl_En_Bird,8091E4E0 +ovl_En_Wood02,8091E9A0 +ovl_En_Lightbox,8091FB80 +ovl_En_Pu_box,80920000 +ovl_En_Trap,80920340 +ovl_En_Arow_Trap,809215E0 +ovl_En_Vase,80921730 +ovl_En_Ta,80921830 +ovl_En_Tk,809251F0 +ovl_Bg_Mori_Bigst,80927020 +ovl_Bg_Mori_Elevator,80927950 +ovl_Bg_Mori_Kaitenkabe,80928440 +ovl_Bg_Mori_Rakkatenjo,80928AA0 +ovl_En_Vm,80929410 +ovl_Demo_Effect,8092ACC0 +ovl_Demo_Kankyo,809307C0 +ovl_Bg_Hidan_Fwbig,809344C0 +ovl_En_Floormas,809351A0 +ovl_En_Heishi1,80938580 +ovl_En_Rd,80939A90 +ovl_En_Po_Sisters,8093C340 +ovl_Bg_Heavy_Block,80941030 +ovl_Bg_Po_Event,80942920 +ovl_Obj_Mure,80944760 +ovl_En_Sw,80945770 +ovl_Boss_Fd,80948F60 +ovl_Object_Kankyo,80950290 +ovl_En_Du,809534B0 +ovl_En_Fd,80954F50 +ovl_En_Horse_Link_Child,80957C10 +ovl_Door_Ana,80959A10 +ovl_Bg_Spot02_Objects,8095A080 +ovl_Bg_Haka,8095B3D0 +ovl_Magic_Wind,8095BA90 +ovl_Magic_Fire,8095D790 +ovl_En_Ru1,8095FA60 +ovl_Boss_Fd2,80967100 +ovl_En_Fd_Fire,8096AE30 +ovl_En_Dh,8096BB40 +ovl_En_Dha,8096D610 +ovl_En_Rl,8096E5E0 +ovl_En_Encount1,8096F4C0 +ovl_Demo_Du,80970020 +ovl_Demo_Im,80973800 +ovl_Demo_Tre_Lgt,80977770 +ovl_En_Fw,80977E80 +ovl_Bg_Vb_Sima,80979630 +ovl_En_Vb_Ball,80979D40 +ovl_Bg_Haka_Megane,8097AEE0 +ovl_Bg_Haka_MeganeBG,8097B2E0 +ovl_Bg_Haka_Ship,8097B9A0 +ovl_Bg_Haka_Sgami,8097C3E0 +ovl_En_Heishi2,8097D000 +ovl_En_Encount2,8097F200 +ovl_En_Fire_Rock,80980430 +ovl_En_Brob,80981540 +ovl_Mir_Ray,80982630 +ovl_Bg_Spot09_Obj,80983EF0 +ovl_Bg_Spot18_Obj,80984400 +ovl_Boss_Va,80984CD0 +ovl_Bg_Haka_Tubo,8099BEC0 +ovl_Bg_Haka_Trap,8099C8E0 +ovl_Bg_Haka_Huta,8099DEB0 +ovl_Bg_Haka_Zou,8099E950 +ovl_Bg_Spot17_Funen,8099FB40 +ovl_En_Syateki_Itm,8099FD90 +ovl_En_Syateki_Man,809A0B30 +ovl_En_Tana,809A18F0 +ovl_En_Nb,809A1B90 +ovl_Boss_Mo,809A6160 +ovl_En_Sb,809B6210 +ovl_En_Bigokuta,809B7650 +ovl_En_Karebaba,809BA160 +ovl_Bg_Bdan_Objects,809BBA50 +ovl_Demo_Sa,809BCD20 +ovl_Demo_Go,809BF840 +ovl_En_In,809C05A0 +ovl_En_Tr,809C3300 +ovl_Bg_Spot16_Bombstone,809C4C00 +ovl_Bg_Hidan_Kowarerukabe,809C6140 +ovl_Bg_Bombwall,809C7010 +ovl_En_Ru2,809C78D0 +ovl_Obj_Dekujr,809CA650 +ovl_Bg_Mizu_Uzu,809CAC90 +ovl_Bg_Spot06_Objects,809CAE60 +ovl_Bg_Ice_Objects,809CC270 +ovl_Bg_Haka_Water,809CD1B0 +ovl_En_Ma2,809CD990 +ovl_En_Bom_Chu,809CE9F0 +ovl_En_Horse_Game_Check,809D0090 +ovl_Boss_Tw,809D1160 +ovl_En_Rr,809E6C60 +ovl_En_Ba,809E9180 +ovl_En_Bx,809EB050 +ovl_En_Anubice,809EBB40 +ovl_En_Anubice_Fire,809ECDF0 +ovl_Bg_Mori_Hashigo,809EDBB0 +ovl_Bg_Mori_Hashira4,809EE470 +ovl_Bg_Mori_Idomizu,809EEA00 +ovl_Bg_Spot16_Doughnut,809EF040 +ovl_Bg_Bdan_Switch,809EF5F0 +ovl_En_Ma1,809F0A20 +ovl_Boss_Ganon,809F1D00 +ovl_Boss_Sst,80A17AF0 +ovl_En_Ny,80A24050 +ovl_En_Fr,80A25980 +ovl_Item_Shield,80A28410 +ovl_Bg_Ice_Shelter,80A28E20 +ovl_En_Ice_Hono,80A2A050 +ovl_Item_Ocarina,80A2B240 +ovl_Magic_Dark,80A2BA10 +ovl_Demo_6K,80A2D260 +ovl_En_Anubice_Tag,80A2FF70 +ovl_Bg_Haka_Gate,80A30240 +ovl_Bg_Spot15_Saku,80A312D0 +ovl_Bg_Jya_Goroiwa,80A31610 +ovl_Bg_Jya_Zurerukabe,80A31D90 +ovl_Bg_Jya_Cobra,80A32440 +ovl_Bg_Jya_Kanaami,80A34160 +ovl_Fishing,80A34510 +ovl_Obj_Oshihiki,80A4EFC0 +ovl_Bg_Gate_Shutter,80A50A70 +ovl_Eff_Dust,80A50EF0 +ovl_Bg_Spot01_Fusya,80A522D0 +ovl_Bg_Spot01_Idohashira,80A52570 +ovl_Bg_Spot01_Idomizu,80A53170 +ovl_Bg_Po_Syokudai,80A53480 +ovl_Bg_Ganon_Otyuka,80A53DD0 +ovl_Bg_Spot15_Rrbox,80A56410 +ovl_Bg_Umajump,80A571F0 +ovl_En_Insect,80A57380 +ovl_En_Butte,80A598A0 +ovl_En_Fish,80A5AE70 +ovl_Bg_Spot08_Iceblock,80A5CF80 +ovl_Item_Etcetera,80A5DFC0 +ovl_Arrow_Fire,80A5E890 +ovl_Arrow_Ice,80A60750 +ovl_Arrow_Light,80A62630 +ovl_Obj_Kibako,80A64520 +ovl_Obj_Tsubo,80A65220 +ovl_En_Wonder_Item,80A66210 +ovl_En_Ik,80A66F40 +ovl_Demo_Ik,80A6B580 +ovl_En_Skj,80A6CA90 +ovl_En_Skjneedle,80A703D0 +ovl_En_G_Switch,80A706E0 +ovl_Demo_Ext,80A71F10 +ovl_Demo_Shd,80A72850 +ovl_En_Dns,80A74C60 +ovl_Elf_Msg,80A75FF0 +ovl_En_Honotrap,80A765E0 +ovl_En_Tubo_Trap,80A77B30 +ovl_Obj_Ice_Poly,80A787D0 +ovl_Bg_Spot03_Taki,80A79180 +ovl_Bg_Spot07_Taki,80A79A70 +ovl_En_Fz,80A7A030 +ovl_En_Po_Relay,80A7C040 +ovl_Bg_Relay_Objects,80A7D750 +ovl_En_Diving_Game,80A7DF00 +ovl_En_Kusa,80A7F8B0 +ovl_Obj_Bean,80A80D90 +ovl_Obj_Bombiwa,80A83520 +ovl_Obj_Switch,80A83A90 +ovl_Obj_Elevator,80A85850 +ovl_Obj_Lift,80A85C10 +ovl_Obj_Hsblock,80A86630 +ovl_En_Okarina_Tag,80A86C00 +ovl_En_Yabusame_Mark,80A880E0 +ovl_En_Goroiwa,80A887B0 +ovl_En_Ex_Ruppy,80A8AB70 +ovl_En_Toryo,80A8BC30 +ovl_En_Daiku,80A8C8C0 +ovl_En_Nwc,80A8E000 +ovl_En_Blkobj,80A8EA40 +ovl_Item_Inbox,80A8EFA0 +ovl_En_Ge1,80A8F100 +ovl_Obj_Blockstop,80A91130 +ovl_En_Sda,80A912D0 +ovl_En_Clear_Tag,80A929D0 +ovl_En_Niw_Lady,80A9DF70 +ovl_En_Gm,80A9F850 +ovl_En_Ms,80AA0580 +ovl_En_Hs,80AA0C70 +ovl_Bg_Ingate,80AA1810 +ovl_En_Kanban,80AA1BA0 +ovl_En_Heishi3,80AA4CF0 +ovl_En_Syateki_Niw,80AA56C0 +ovl_En_Attack_Niw,80AA7750 +ovl_Bg_Spot01_Idosoko,80AA89B0 +ovl_En_Sa,80AA8BC0 +ovl_En_Wonder_Talk,80AAAE30 +ovl_Bg_Gjyo_Bridge,80AAB4C0 +ovl_En_Ds,80AAB9C0 +ovl_En_Mk,80AAC5E0 +ovl_En_Bom_Bowl_Man,80AAD470 +ovl_En_Bom_Bowl_Pit,80AAE9B0 +ovl_En_Owl,80AAF320 +ovl_En_Ishi,80AB2EC0 +ovl_Obj_Hana,80ABC010 +ovl_Obj_Lightswitch,80ABC320 +ovl_Obj_Mure2,80ABD750 +ovl_En_Go,80ABE170 +ovl_En_Fu,80AC27B0 +ovl_En_Changer,80AC3500 +ovl_Bg_Jya_Megami,80AC3EE0 +ovl_Bg_Jya_Lift,80AC50C0 +ovl_Bg_Jya_Bigmirror,80AC5610 +ovl_Bg_Jya_Bombchuiwa,80AC5E50 +ovl_Bg_Jya_Amishutter,80AC6980 +ovl_Bg_Jya_Bombiwa,80AC6D10 +ovl_Bg_Spot18_Basket,80AC72D0 +ovl_En_Ganon_Organ,80AC82C0 +ovl_En_Siofuki,80ACF2C0 +ovl_En_Stream,80AD0070 +ovl_En_Mm,80AD0600 +ovl_En_Ko,80AD1C20 +ovl_En_Kz,80AD5D60 +ovl_En_Weather_Tag,80AD7270 +ovl_Bg_Sst_Floor,80AD8160 +ovl_En_Ani,80AD86C0 +ovl_En_Ex_Item,80AD9430 +ovl_Bg_Jya_Ironobj,80ADA5A0 +ovl_En_Js,80ADB350 +ovl_En_Jsjutan,80ADBD20 +ovl_En_Cs,80AE1640 +ovl_En_Md,80AE2870 +ovl_En_Hy,80AE4EE0 +ovl_En_Ganon_Mant,80AE8820 +ovl_En_Okarina_Effect,80AECA40 +ovl_En_Mag,80AECDF0 +ovl_Door_Gerudo,80AF1D00 +ovl_Elf_Msg2,80AF22F0 +ovl_Demo_Gt,80AF2760 +ovl_En_Po_Field,80AF7D60 +ovl_Efc_Erupc,80AFB7D0 +ovl_Bg_Zg,80AFC2B0 +ovl_En_Heishi4,80AFC720 +ovl_En_Zl3,80AFD620 +ovl_Boss_Ganon2,80B05470 +ovl_En_Kakasi,80B18280 +ovl_En_Takara_Man,80B18FC0 +ovl_Obj_Makeoshihiki,80B19880 +ovl_Oceff_Spot,80B19D10 +ovl_End_Title,80B1AC40 +ovl_En_Torch,80B1ED70 +ovl_Demo_Ec,80B1EE60 +ovl_Shot_Sun,80B226C0 +ovl_En_Dy_Extra,80B22D80 +ovl_En_Wonder_Talk2,80B23300 +ovl_En_Ge2,80B239A0 +ovl_Obj_Roomtimer,80B25340 +ovl_En_Ssh,80B25590 +ovl_En_Sth,80B27B80 +ovl_Oceff_Wipe,80B2BC30 +ovl_Effect_Ss_Dust,80B2C980 +ovl_Effect_Ss_KiraKira,80B2D1B0 +ovl_Effect_Ss_Bomb,80B2D820 +ovl_Effect_Ss_Bomb2,80B2DC40 +ovl_Effect_Ss_Blast,80B2E570 +ovl_Effect_Ss_G_Spk,80B2E900 +ovl_Effect_Ss_D_Fire,80B2EEB0 +ovl_Effect_Ss_Bubble,80B2F3A0 +ovl_Effect_Ss_G_Ripple,80B2F820 +ovl_Effect_Ss_G_Splash,80B2FD80 +ovl_Effect_Ss_G_Magma,80B30230 +ovl_Effect_Ss_G_Fire,80B30490 +ovl_Effect_Ss_Lightning,80B30720 +ovl_Effect_Ss_Dt_Bubble,80B30DF0 +ovl_Effect_Ss_Hahen,80B31380 +ovl_Effect_Ss_Stick,80B319C0 +ovl_Effect_Ss_Sibuki,80B31D60 +ovl_Effect_Ss_Sibuki2,80B32430 +ovl_Effect_Ss_G_Magma2,80B32760 +ovl_Effect_Ss_Stone1,80B32C70 +ovl_Effect_Ss_HitMark,80B33000 +ovl_Effect_Ss_Fhg_Flash,80B33550 +ovl_Effect_Ss_K_Fire,80B344D0 +ovl_Effect_Ss_Solder_Srch_Ball,80B34900 +ovl_Effect_Ss_Kakera,80B34AB0 +ovl_Effect_Ss_Ice_Piece,80B35B40 +ovl_Effect_Ss_En_Ice,80B35F80 +ovl_Effect_Ss_Fire_Tail,80B36790 +ovl_Effect_Ss_En_Fire,80B36E90 +ovl_Effect_Ss_Extra,80B375D0 +ovl_Effect_Ss_Fcircle,80B37990 +ovl_Effect_Ss_Dead_Db,80B37E40 +ovl_Effect_Ss_Dead_Dd,80B38320 +ovl_Effect_Ss_Dead_Ds,80B388B0 +ovl_Effect_Ss_Dead_Sound,80B38D30 +ovl_Oceff_Storm,80B38E70 +ovl_En_Weiyer,80B3AA10 +ovl_Bg_Spot05_Soko,80B3C410 +ovl_Bg_Jya_1flift,80B3C730 +ovl_Bg_Jya_Haheniron,80B3CDC0 +ovl_Bg_Spot12_Gate,80B3D5B0 +ovl_Bg_Spot12_Saku,80B3D9C0 +ovl_En_Hintnuts,80B3DE80 +ovl_En_Nutsball,80B3F8B0 +ovl_Bg_Spot00_Break,80B3FED0 +ovl_En_Shopnuts,80B40070 +ovl_En_It,80B40F80 +ovl_En_GeldB,80B41110 +ovl_Oceff_Wipe2,80B464C0 +ovl_Oceff_Wipe3,80B47C30 +ovl_En_Niw_Girl,80B49380 +ovl_En_Dog,80B49E50 +ovl_En_Si,80B4B000 +ovl_Bg_Spot01_Objects2,80B4B500 +ovl_Obj_Comb,80B4B9C0 +ovl_Bg_Spot11_Bakudankabe,80B4C220 +ovl_Obj_Kibako2,80B4C860 +ovl_En_Dnt_Demo,80B4CF20 +ovl_En_Dnt_Jiji,80B4DC40 +ovl_En_Dnt_Nomal,80B4F150 +ovl_En_Guest,80B51F50 +ovl_Bg_Bom_Guard,80B528F0 +ovl_En_Hs2,80B52B10 +ovl_Demo_Kekkai,80B530F0 +ovl_Bg_Spot08_Bakudankabe,80B543D0 +ovl_Bg_Spot17_Bakudankabe,80B54A70 +ovl_Obj_Mure3,80B55150 +ovl_En_Tg,80B55920 +ovl_En_Mu,80B55FF0 +ovl_En_Go2,80B56910 +ovl_En_Wf,80B5C930 +ovl_En_Skb,80B60C40 +ovl_Demo_Gj,80B62530 +ovl_Demo_Geff,80B661E0 +ovl_Bg_Gnd_Firemeiro,80B66A00 +ovl_Bg_Gnd_Darkmeiro,80B66F40 +ovl_Bg_Gnd_Soulmeiro,80B67700 +ovl_Bg_Gnd_Nisekabe,80B67F60 +ovl_Bg_Gnd_Iceblock,80B680D0 +ovl_Bg_Ydan_Sp,80B691D0 +ovl_En_Gb,80B6A940 +ovl_En_Gs,80B6C070 +ovl_Bg_Mizu_Bwall,80B6DF10 +ovl_Bg_Mizu_Shutter,80B6F3E0 +ovl_En_Daiku_Kakariko,80B6FBE0 +ovl_Bg_Bowl_Wall,80B70FA0 +ovl_En_Wall_Tubo,80B71920 +ovl_En_Po_Desert,80B71E10 +ovl_En_Crow,80B72BD0 +ovl_Door_Killer,80B74270 +ovl_Bg_Spot11_Oasis,80B757E0 +ovl_Bg_Spot18_Futa,80B75F10 +ovl_Bg_Spot18_Shutter,80B760B0 +ovl_En_Ma3,80B76600 +ovl_En_Cow,80B77570 +ovl_Bg_Ice_Turara,80B789D0 +ovl_Bg_Ice_Shutter,80B79200 +ovl_En_Kakasi2,80B79670 +ovl_En_Kakasi3,80B79D90 +ovl_Oceff_Wipe4,80B7AE70 +ovl_En_Eg,80B7BE50 +ovl_Bg_Menkuri_Nisekabe,80B7C000 +ovl_En_Zo,80B7C150 +ovl_Effect_Ss_Ice_Smoke,80B7E700 +ovl_Obj_Makekinsuta,80B7EBC0 +ovl_En_Ge3,80B7ED10 +ovl_Obj_Timeblock,80B7F860 +ovl_Obj_Hamishi,80B804A0 +ovl_En_Zl4,80B80CF0 +ovl_En_Mm2,80B85720 +ovl_Bg_Jya_Block,80B864E0 +ovl_Obj_Warp2block,80B86750 +gameplay_keep, +gameplay_field_keep, +gameplay_dangeon_keep, +gameplay_object_exchange_static, +object_link_boy, +object_link_child, +object_box, +object_human, +object_okuta, +object_poh, +object_wallmaster, +object_dy_obj, +object_firefly, +object_dodongo, +object_fire, +object_niw, +object_tite, +object_reeba, +object_peehat, +object_kingdodongo, +object_horse, +object_zf, +object_goma, +object_zl1, +object_gol, +object_bubble, +object_dodojr, +object_torch2, +object_bl, +object_tp, +object_oA1, +object_st, +object_bw, +object_ei, +object_horse_normal, +object_oB1, +object_o_anime, +object_spot04_objects, +object_ddan_objects, +object_hidan_objects, +object_horse_ganon, +object_oA2, +object_spot00_objects, +object_mb, +object_bombf, +object_sk2, +object_oE1, +object_oE_anime, +object_oE2, +object_ydan_objects, +object_gnd, +object_am, +object_dekubaba, +object_oA3, +object_oA4, +object_oA5, +object_oA6, +object_oA7, +object_jj, +object_oA8, +object_oA9, +object_oB2, +object_oB3, +object_oB4, +object_horse_zelda, +object_opening_demo1, +object_warp1, +object_b_heart, +object_dekunuts, +object_oE3, +object_oE4, +object_menkuri_objects, +object_oE5, +object_oE6, +object_oE7, +object_oE8, +object_oE9, +object_oE10, +object_oE11, +object_oE12, +object_vali, +object_oA10, +object_oA11, +object_mizu_objects, +object_fhg, +object_ossan, +object_mori_hineri1, +object_Bb, +object_toki_objects, +object_yukabyun, +object_zl2, +object_mjin, +object_mjin_flash, +object_mjin_dark, +object_mjin_flame, +object_mjin_ice, +object_mjin_soul, +object_mjin_wind, +object_mjin_oka, +object_haka_objects, +object_spot06_objects, +object_ice_objects, +object_relay_objects, +object_mori_hineri1a, +object_mori_hineri2, +object_mori_hineri2a, +object_mori_objects, +object_mori_tex, +object_spot08_obj, +object_warp2, +object_hata, +object_bird, +object_wood02, +object_lightbox, +object_pu_box, +object_trap, +object_vase, +object_im, +object_ta, +object_tk, +object_xc, +object_vm, +object_bv, +object_hakach_objects, +object_efc_crystal_light, +object_efc_fire_ball, +object_efc_flash, +object_efc_lgt_shower, +object_efc_star_field, +object_god_lgt, +object_light_ring, +object_triforce_spot, +object_medal, +object_bdan_objects, +object_sd, +object_rd, +object_po_sisters, +object_heavy_object, +object_gndd, +object_fd, +object_du, +object_fw, +object_horse_link_child, +object_spot02_objects, +object_haka, +object_ru1, +object_syokudai, +object_fd2, +object_dh, +object_rl, +object_efc_tw, +object_demo_tre_lgt, +object_gi_key, +object_mir_ray, +object_brob, +object_gi_jewel, +object_spot09_obj, +object_spot18_obj, +object_bdoor, +object_spot17_obj, +object_shop_dungen, +object_nb, +object_mo, +object_sb, +object_gi_melody, +object_gi_heart, +object_gi_compass, +object_gi_bosskey, +object_gi_medal, +object_gi_nuts, +object_sa, +object_gi_hearts, +object_gi_arrowcase, +object_gi_bombpouch, +object_in, +object_tr, +object_spot16_obj, +object_oE1s, +object_oE4s, +object_os_anime, +object_gi_bottle, +object_gi_stick, +object_gi_map, +object_oF1d_map, +object_ru2, +object_gi_shield_1, +object_dekujr, +object_gi_magicpot, +object_gi_bomb_1, +object_oF1s, +object_ma2, +object_gi_purse, +object_hni, +object_tw, +object_rr, +object_bxa, +object_anubice, +object_gi_gerudo, +object_gi_arrow, +object_gi_bomb_2, +object_gi_egg, +object_gi_scale, +object_gi_shield_2, +object_gi_hookshot, +object_gi_ocarina, +object_gi_milk, +object_ma1, +object_ganon, +object_sst, +object_ny, +object_fr, +object_gi_pachinko, +object_gi_boomerang, +object_gi_bow, +object_gi_glasses, +object_gi_liquid, +object_ani, +object_demo_6k, +object_gi_shield_3, +object_gi_letter, +object_spot15_obj, +object_jya_obj, +object_gi_clothes, +object_gi_bean, +object_gi_fish, +object_gi_saw, +object_gi_hammer, +object_gi_grass, +object_gi_longsword, +object_spot01_objects, +object_md, +object_km1, +object_kw1, +object_zo, +object_kz, +object_umajump, +object_masterkokiri, +object_masterkokirihead, +object_mastergolon, +object_masterzoora, +object_aob, +object_ik, +object_ahg, +object_cne, +object_gi_niwatori, +object_skj, +object_gi_bottle_letter, +object_bji, +object_bba, +object_gi_ocarina_0, +object_ds, +object_ane, +object_boj, +object_spot03_object, +object_spot07_object, +object_fz, +object_bob, +object_ge1, +object_yabusame_point, +object_gi_boots_2, +object_gi_seed, +object_gnd_magic, +object_d_elevator, +object_d_hsblock, +object_d_lift, +object_mamenoki, +object_goroiwa, +object_toryo, +object_daiku, +object_nwc, +object_blkobj, +object_gm, +object_ms, +object_hs, +object_ingate, +object_lightswitch, +object_kusa, +object_tsubo, +object_gi_gloves, +object_gi_coin, +object_kanban, +object_gjyo_objects, +object_owl, +object_mk, +object_fu, +object_gi_ki_tan_mask, +object_gi_redead_mask, +object_gi_skj_mask, +object_gi_rabit_mask, +object_gi_truth_mask, +object_ganon_objects, +object_siofuki, +object_stream, +object_mm, +object_fa, +object_os, +object_gi_eye_lotion, +object_gi_powder, +object_gi_mushroom, +object_gi_ticketstone, +object_gi_brokensword, +object_js, +object_cs, +object_gi_prescription, +object_gi_bracelet, +object_gi_soldout, +object_gi_frog, +object_mag, +object_door_gerudo, +object_gt, +object_efc_erupc, +object_zl2_anime1, +object_zl2_anime2, +object_gi_golonmask, +object_gi_zoramask, +object_gi_gerudomask, +object_ganon2, +object_ka, +object_ts, +object_zg, +object_gi_hoverboots, +object_gi_m_arrow, +object_ds2, +object_ec, +object_fish, +object_gi_sutaru, +object_gi_goddess, +object_ssh, +object_bigokuta, +object_bg, +object_spot05_objects, +object_spot12_obj, +object_bombiwa, +object_hintnuts, +object_rs, +object_spot00_break, +object_gla, +object_shopnuts, +object_geldb, +object_gr, +object_dog, +object_jya_iron, +object_jya_door, +object_spot01_objects2, +object_spot11_obj, +object_kibako2, +object_dns, +object_dnk, +object_gi_fire, +object_gi_insect, +object_gi_butterfly, +object_gi_ghost, +object_gi_soul, +object_bowl, +object_po_field, +object_demo_kekkai, +object_efc_doughnut, +object_gi_dekupouch, +object_ganon_anime1, +object_ganon_anime2, +object_ganon_anime3, +object_gi_rupy, +object_spot01_matoya, +object_spot01_matoyab, +object_po_composer, +object_mu, +object_wf, +object_skb, +object_gj, +object_geff, +object_haka_door, +object_gs, +object_ps, +object_bwall, +object_crow, +object_cow, +object_cob, +object_gi_sword_1, +object_door_killer, +object_ouke_haka, +object_timeblock, +object_zl4, +g_pn_01, +g_pn_02, +g_pn_03, +g_pn_04, +g_pn_05, +g_pn_06, +g_pn_07, +g_pn_08, +g_pn_09, +g_pn_10, +g_pn_11, +g_pn_12, +g_pn_13, +g_pn_14, +g_pn_15, +g_pn_16, +g_pn_17, +g_pn_18, +g_pn_19, +g_pn_20, +g_pn_21, +g_pn_22, +g_pn_23, +g_pn_24, +g_pn_25, +g_pn_26, +g_pn_27, +g_pn_28, +g_pn_29, +g_pn_30, +g_pn_31, +g_pn_32, +g_pn_33, +g_pn_34, +g_pn_35, +g_pn_36, +g_pn_37, +g_pn_38, +g_pn_39, +g_pn_40, +g_pn_41, +g_pn_42, +g_pn_43, +g_pn_44, +g_pn_45, +g_pn_46, +g_pn_47, +g_pn_48, +g_pn_49, +g_pn_50, +g_pn_51, +g_pn_52, +g_pn_53, +g_pn_54, +g_pn_55, +g_pn_56, +g_pn_57, +z_select_static, +nintendo_rogo_static, +title_static, +parameter_static, +vr_fine0_static, +vr_fine0_pal_static, +vr_fine1_static, +vr_fine1_pal_static, +vr_fine2_static, +vr_fine2_pal_static, +vr_fine3_static, +vr_fine3_pal_static, +vr_cloud0_static, +vr_cloud0_pal_static, +vr_cloud1_static, +vr_cloud1_pal_static, +vr_cloud2_static, +vr_cloud2_pal_static, +vr_cloud3_static, +vr_cloud3_pal_static, +vr_holy0_static, +vr_holy0_pal_static, +vr_holy1_static, +vr_holy1_pal_static, +vr_MDVR_static, +vr_MDVR_pal_static, +vr_MNVR_static, +vr_MNVR_pal_static, +vr_RUVR_static, +vr_RUVR_pal_static, +vr_LHVR_static, +vr_LHVR_pal_static, +vr_KHVR_static, +vr_KHVR_pal_static, +vr_K3VR_static, +vr_K3VR_pal_static, +vr_K4VR_static, +vr_K4VR_pal_static, +vr_K5VR_static, +vr_K5VR_pal_static, +vr_SP1a_static, +vr_SP1a_pal_static, +vr_MLVR_static, +vr_MLVR_pal_static, +vr_KKRVR_static, +vr_KKRVR_pal_static, +vr_KR3VR_static, +vr_KR3VR_pal_static, +vr_IPVR_static, +vr_IPVR_pal_static, +vr_KSVR_static, +vr_KSVR_pal_static, +vr_GLVR_static, +vr_GLVR_pal_static, +vr_ZRVR_static, +vr_ZRVR_pal_static, +vr_DGVR_static, +vr_DGVR_pal_static, +vr_ALVR_static, +vr_ALVR_pal_static, +vr_NSVR_static, +vr_NSVR_pal_static, +vr_LBVR_static, +vr_LBVR_pal_static, +vr_TTVR_static, +vr_TTVR_pal_static, +vr_FCVR_static, +vr_FCVR_pal_static, +elf_message_field, +elf_message_ydan, +ddan_scene, +ddan_room_0, +ddan_room_1, +ddan_room_2, +ddan_room_3, +ddan_room_4, +ddan_room_5, +ddan_room_6, +ddan_room_7, +ddan_room_8, +ddan_room_9, +ddan_room_10, +ddan_room_11, +ddan_room_12, +ddan_room_13, +ddan_room_14, +ddan_room_15, +ddan_room_16, +spot00_scene, +spot00_room_0, +spot01_scene, +spot01_room_0, +spot02_scene, +spot02_room_0, +spot02_room_1, +spot03_scene, +spot03_room_0, +spot03_room_1, +spot04_scene, +spot04_room_0, +spot04_room_1, +spot04_room_2, +spot05_scene, +spot05_room_0, +spot06_scene, +spot06_room_0, +spot07_scene, +spot07_room_0, +spot07_room_1, +spot08_scene, +spot08_room_0, +spot09_scene, +spot09_room_0, +spot10_scene, +spot10_room_0, +spot10_room_1, +spot10_room_2, +spot10_room_3, +spot10_room_4, +spot10_room_5, +spot10_room_6, +spot10_room_7, +spot10_room_8, +spot10_room_9, +spot11_scene, +spot11_room_0, +spot12_scene, +spot12_room_0, +spot12_room_1, +spot13_scene, +spot13_room_0, +spot13_room_1, +spot15_scene, +spot15_room_0, +spot16_scene, +spot16_room_0, +spot17_scene, +spot17_room_0, +spot17_room_1, +spot18_scene, +spot18_room_0, +spot18_room_1, +spot18_room_2, +spot18_room_3, +market_day_scene, +market_day_room_0, +market_night_scene, +market_night_room_0, +HIDAN_scene, +HIDAN_room_0, +HIDAN_room_1, +HIDAN_room_2, +HIDAN_room_3, +HIDAN_room_4, +HIDAN_room_5, +HIDAN_room_6, +HIDAN_room_7, +HIDAN_room_8, +HIDAN_room_9, +HIDAN_room_10, +HIDAN_room_11, +HIDAN_room_12, +HIDAN_room_13, +HIDAN_room_14, +HIDAN_room_15, +HIDAN_room_16, +HIDAN_room_17, +HIDAN_room_18, +HIDAN_room_19, +HIDAN_room_20, +HIDAN_room_21, +HIDAN_room_22, +HIDAN_room_23, +HIDAN_room_24, +HIDAN_room_25, +HIDAN_room_26, +Bmori1_scene, +Bmori1_room_0, +Bmori1_room_1, +Bmori1_room_2, +Bmori1_room_3, +Bmori1_room_4, +Bmori1_room_5, +Bmori1_room_6, +Bmori1_room_7, +Bmori1_room_8, +Bmori1_room_9, +Bmori1_room_10, +Bmori1_room_11, +Bmori1_room_12, +Bmori1_room_13, +Bmori1_room_14, +Bmori1_room_15, +Bmori1_room_16, +Bmori1_room_17, +Bmori1_room_18, +Bmori1_room_19, +Bmori1_room_20, +Bmori1_room_21, +Bmori1_room_22, +ydan_scene, +ydan_room_0, +ydan_room_1, +ydan_room_2, +ydan_room_3, +ydan_room_4, +ydan_room_5, +ydan_room_6, +ydan_room_7, +ydan_room_8, +ydan_room_9, +ydan_room_10, +ydan_room_11, +kenjyanoma_scene, +kenjyanoma_room_0, +tokinoma_scene, +tokinoma_room_0, +tokinoma_room_1, +link_home_scene, +link_home_room_0, +kokiri_shop_scene, +kokiri_shop_room_0, +MIZUsin_scene, +MIZUsin_room_0, +MIZUsin_room_1, +MIZUsin_room_2, +MIZUsin_room_3, +MIZUsin_room_4, +MIZUsin_room_5, +MIZUsin_room_6, +MIZUsin_room_7, +MIZUsin_room_8, +MIZUsin_room_9, +MIZUsin_room_10, +MIZUsin_room_11, +MIZUsin_room_12, +MIZUsin_room_13, +MIZUsin_room_14, +MIZUsin_room_15, +MIZUsin_room_16, +MIZUsin_room_17, +MIZUsin_room_18, +MIZUsin_room_19, +MIZUsin_room_20, +MIZUsin_room_21, +MIZUsin_room_22, +kokiri_home_scene, +kokiri_home_room_0, +kakusiana_scene, +kakusiana_room_0, +kakusiana_room_1, +kakusiana_room_2, +kakusiana_room_3, +kakusiana_room_4, +kakusiana_room_5, +kakusiana_room_6, +kakusiana_room_7, +kakusiana_room_8, +kakusiana_room_9, +kakusiana_room_10, +kakusiana_room_11, +kakusiana_room_12, +kakusiana_room_13, +entra_scene, +entra_room_0, +bdan_scene, +bdan_room_0, +bdan_room_1, +bdan_room_2, +bdan_room_3, +bdan_room_4, +bdan_room_5, +bdan_room_6, +bdan_room_7, +bdan_room_8, +bdan_room_9, +bdan_room_10, +bdan_room_11, +bdan_room_12, +bdan_room_13, +bdan_room_14, +bdan_room_15, +HAKAdan_scene, +HAKAdan_room_0, +HAKAdan_room_1, +HAKAdan_room_2, +HAKAdan_room_3, +HAKAdan_room_4, +HAKAdan_room_5, +HAKAdan_room_6, +HAKAdan_room_7, +HAKAdan_room_8, +HAKAdan_room_9, +HAKAdan_room_10, +HAKAdan_room_11, +HAKAdan_room_12, +HAKAdan_room_13, +HAKAdan_room_14, +HAKAdan_room_15, +HAKAdan_room_16, +HAKAdan_room_17, +HAKAdan_room_18, +HAKAdan_room_19, +HAKAdan_room_20, +HAKAdan_room_21, +HAKAdan_room_22, +moribossroom_scene, +moribossroom_room_0, +moribossroom_room_1, +syatekijyou_scene, +syatekijyou_room_0, +men_scene, +men_room_0, +men_room_1, +men_room_2, +men_room_3, +men_room_4, +men_room_5, +men_room_6, +men_room_7, +men_room_8, +men_room_9, +men_room_10, +shop1_scene, +shop1_room_0, +hairal_niwa_scene, +hairal_niwa_room_0, +ganon_tou_scene, +ganon_tou_room_0, +market_alley_scene, +market_alley_room_0, +spot20_scene, +spot20_room_0, +market_ruins_scene, +market_ruins_room_0, +entra_n_scene, +entra_n_room_0, +enrui_scene, +enrui_room_0, +market_alley_n_scene, +market_alley_n_room_0, +hiral_demo_scene, +hiral_demo_room_0, +kokiri_home3_scene, +kokiri_home3_room_0, +jyasinzou_scene, +jyasinzou_room_0, +jyasinzou_room_1, +jyasinzou_room_2, +jyasinzou_room_3, +jyasinzou_room_4, +jyasinzou_room_5, +jyasinzou_room_6, +jyasinzou_room_7, +jyasinzou_room_8, +jyasinzou_room_9, +jyasinzou_room_10, +jyasinzou_room_11, +jyasinzou_room_12, +jyasinzou_room_13, +jyasinzou_room_14, +jyasinzou_room_15, +jyasinzou_room_16, +jyasinzou_room_17, +jyasinzou_room_18, +jyasinzou_room_19, +jyasinzou_room_20, +jyasinzou_room_21, +jyasinzou_room_22, +jyasinzou_room_23, +jyasinzou_room_24, +jyasinzou_room_25, +jyasinzou_room_26, +jyasinzou_room_27, +jyasinzou_room_28, +ice_doukutu_scene, +ice_doukutu_room_0, +ice_doukutu_room_1, +ice_doukutu_room_2, +ice_doukutu_room_3, +ice_doukutu_room_4, +ice_doukutu_room_5, +ice_doukutu_room_6, +ice_doukutu_room_7, +ice_doukutu_room_8, +ice_doukutu_room_9, +ice_doukutu_room_10, +ice_doukutu_room_11, +malon_stable_scene, +malon_stable_room_0, +kakariko_scene, +kakariko_room_0, +bdan_boss_scene, +bdan_boss_room_0, +bdan_boss_room_1, +FIRE_bs_scene, +FIRE_bs_room_0, +FIRE_bs_room_1, +hut_scene, +hut_room_0, +daiyousei_izumi_scene, +daiyousei_izumi_room_0, +hakaana_scene, +hakaana_room_0, +yousei_izumi_tate_scene, +yousei_izumi_tate_room_0, +yousei_izumi_yoko_scene, +yousei_izumi_yoko_room_0, +golon_scene, +golon_room_0, +zoora_scene, +zoora_room_0, +drag_scene, +drag_room_0, +alley_shop_scene, +alley_shop_room_0, +night_shop_scene, +night_shop_room_0, +impa_scene, +impa_room_0, +labo_scene, +labo_room_0, +tent_scene, +tent_room_0, +nakaniwa_scene, +nakaniwa_room_0, +ddan_boss_scene, +ddan_boss_room_0, +ddan_boss_room_1, +ydan_boss_scene, +ydan_boss_room_0, +ydan_boss_room_1, +HAKAdan_bs_scene, +HAKAdan_bs_room_0, +HAKAdan_bs_room_1, +MIZUsin_bs_scene, +MIZUsin_bs_room_0, +MIZUsin_bs_room_1, +ganon_scene, +ganon_room_0, +ganon_room_1, +ganon_room_2, +ganon_room_3, +ganon_room_4, +ganon_room_5, +ganon_room_6, +ganon_room_7, +ganon_room_8, +ganon_room_9, +ganon_boss_scene, +ganon_boss_room_0, +jyasinboss_scene, +jyasinboss_room_0, +jyasinboss_room_1, +jyasinboss_room_2, +jyasinboss_room_3, +kokiri_home4_scene, +kokiri_home4_room_0, +kokiri_home5_scene, +kokiri_home5_room_0, +ganon_final_scene, +ganon_final_room_0, +kakariko3_scene, +kakariko3_room_0, +hakasitarelay_scene, +hakasitarelay_room_0, +hakasitarelay_room_1, +hakasitarelay_room_2, +hakasitarelay_room_3, +hakasitarelay_room_4, +hakasitarelay_room_5, +hakasitarelay_room_6, +shrine_scene, +shrine_room_0, +turibori_scene, +turibori_room_0, +shrine_n_scene, +shrine_n_room_0, +shrine_r_scene, +shrine_r_room_0, +ganontika_scene, +ganontika_room_0, +ganontika_room_1, +ganontika_room_2, +ganontika_room_3, +ganontika_room_4, +ganontika_room_5, +ganontika_room_6, +ganontika_room_7, +ganontika_room_8, +ganontika_room_9, +ganontika_room_10, +ganontika_room_11, +ganontika_room_12, +ganontika_room_13, +ganontika_room_14, +ganontika_room_15, +ganontika_room_16, +ganontika_room_17, +ganontika_room_18, +ganontika_room_19, +hakaana2_scene, +hakaana2_room_0, +gerudoway_scene, +gerudoway_room_0, +gerudoway_room_1, +gerudoway_room_2, +gerudoway_room_3, +gerudoway_room_4, +gerudoway_room_5, +HAKAdanCH_scene, +HAKAdanCH_room_0, +HAKAdanCH_room_1, +HAKAdanCH_room_2, +HAKAdanCH_room_3, +HAKAdanCH_room_4, +HAKAdanCH_room_5, +HAKAdanCH_room_6, +hairal_niwa_n_scene, +hairal_niwa_n_room_0, +bowling_scene, +bowling_room_0, +hakaana_ouke_scene, +hakaana_ouke_room_0, +hakaana_ouke_room_1, +hakaana_ouke_room_2, +hylia_labo_scene, +hylia_labo_room_0, +souko_scene, +souko_room_0, +souko_room_1, +souko_room_2, +miharigoya_scene, +miharigoya_room_0, +mahouya_scene, +mahouya_room_0, +takaraya_scene, +takaraya_room_0, +takaraya_room_1, +takaraya_room_2, +takaraya_room_3, +takaraya_room_4, +takaraya_room_5, +takaraya_room_6, +ganon_sonogo_scene, +ganon_sonogo_room_0, +ganon_sonogo_room_1, +ganon_sonogo_room_2, +ganon_sonogo_room_3, +ganon_sonogo_room_4, +ganon_demo_scene, +ganon_demo_room_0, +face_shop_scene, +face_shop_room_0, +kinsuta_scene, +kinsuta_room_0, +ganontikasonogo_scene, +ganontikasonogo_room_0, +ganontikasonogo_room_1, +bump_texture_static, +anime_model_1_static, +anime_model_2_static, +anime_model_3_static, +anime_model_4_static, +anime_model_5_static, +anime_model_6_static, +anime_texture_1_static, +anime_texture_2_static, +anime_texture_3_static, +anime_texture_4_static, +anime_texture_5_static, +anime_texture_6_static, +softsprite_matrix_static, diff --git a/baseroms/ntsc-1.1/checksum-JP-compressed.md5 b/baseroms/ntsc-1.1/checksum-JP-compressed.md5 new file mode 100644 index 0000000000..f02c9c055f --- /dev/null +++ b/baseroms/ntsc-1.1/checksum-JP-compressed.md5 @@ -0,0 +1 @@ +1bf5f42b98c3e97948f01155f12e2d88 build/ntsc-1.1/oot-ntsc-1.1-compressed.z64 diff --git a/baseroms/ntsc-1.1/checksum-JP.md5 b/baseroms/ntsc-1.1/checksum-JP.md5 new file mode 100644 index 0000000000..771035379f --- /dev/null +++ b/baseroms/ntsc-1.1/checksum-JP.md5 @@ -0,0 +1 @@ +8b07c719217cb89334edf481a52ef392 build/ntsc-1.1/oot-ntsc-1.1.z64 diff --git a/baseroms/ntsc-1.1/checksum-US-compressed.md5 b/baseroms/ntsc-1.1/checksum-US-compressed.md5 new file mode 100644 index 0000000000..4d13bee152 --- /dev/null +++ b/baseroms/ntsc-1.1/checksum-US-compressed.md5 @@ -0,0 +1 @@ +721fdcc6f5f34be55c43a807f2a16af4 build/ntsc-1.1/oot-ntsc-1.1-compressed.z64 diff --git a/baseroms/ntsc-1.1/checksum-US.md5 b/baseroms/ntsc-1.1/checksum-US.md5 new file mode 100644 index 0000000000..df5611fe03 --- /dev/null +++ b/baseroms/ntsc-1.1/checksum-US.md5 @@ -0,0 +1 @@ +a11496a4abcd9f173f2f2a342a6370d2 build/ntsc-1.1/oot-ntsc-1.1.z64 diff --git a/baseroms/ntsc-1.1/config.yml b/baseroms/ntsc-1.1/config.yml new file mode 100644 index 0000000000..6726cc59f6 --- /dev/null +++ b/baseroms/ntsc-1.1/config.yml @@ -0,0 +1,1219 @@ +checksums: + - checksum-JP + - checksum-US +dmadata_start: 0x7430 +text_lang_pal: false +incbins: + - name: ipl3 + segment: makerom + vram: 0x80000040 + size: 0xFC0 + - name: rspbootText + segment: boot + vram: 0x800060B0 + size: 0x160 + - name: aspMainText + segment: code + vram: 0x800E3180 + size: 0xFB0 + - name: gspF3DZEX2_NoN_PosLight_fifoText + segment: code + vram: 0x800E4130 + size: 0x1390 + - name: gspS2DEX2d_fifoText + segment: code + vram: 0x800E54C0 + size: 0x18C0 + - name: njpgdspMainText + segment: code + vram: 0x800E6D80 + size: 0xAF0 + - name: aspMainData + segment: code + vram: 0x801144A0 + size: 0x2E0 + - name: gspF3DZEX2_NoN_PosLight_fifoData + segment: code + vram: 0x80114780 + size: 0x420 + - name: gspS2DEX2d_fifoData + segment: code + vram: 0x80114BA0 + size: 0x390 + - name: njpgdspMainData + segment: code + vram: 0x80114F30 + size: 0x60 +variables: + gMtxClear: 0x800FEF70 + sJpnMessageEntryTable: 0x8010AB0C + sNesMessageEntryTable: 0x8010EC4C + sStaffMessageEntryTable: 0x80112E6C + gSoundFontTable: 0x80113900 + gSequenceFontTable: 0x80113B70 + gSequenceTable: 0x80113D30 + gSampleBankTable: 0x80114420 + sShadowTex: 0x80AE0C80 +assets: +- name: code/fbdemo_circle + xml_path: assets/xml/code/fbdemo_circle.xml + start_offset: 0xEC268 + end_offset: 0xED488 +- name: code/fbdemo_triforce + xml_path: assets/xml/code/fbdemo_triforce.xml + start_offset: 0xEB6F0 + end_offset: 0xEB7C0 +- name: code/fbdemo_wipe1 + xml_path: assets/xml/code/fbdemo_wipe1.xml + start_offset: 0xEB7C0 + end_offset: 0xEC150 +- name: n64dd/error_textures + xml_path: assets/xml/n64dd/error_textures.xml + start_offset: 0xC140 + end_offset: 0x11D40 +- name: misc/link_animetion + xml_path: assets/xml/misc/link_animetion.xml +- name: misc/z_select_static + xml_path: assets/xml/misc/z_select_static.xml +- name: objects/gameplay_dangeon_keep + xml_path: assets/xml/objects/gameplay_dangeon_keep.xml +- name: objects/gameplay_field_keep + xml_path: assets/xml/objects/gameplay_field_keep.xml +- name: objects/gameplay_keep + xml_path: assets/xml/objects/gameplay_keep.xml +- name: objects/object_ahg + xml_path: assets/xml/objects/object_ahg.xml +- name: objects/object_am + xml_path: assets/xml/objects/object_am.xml +- name: objects/object_ane + xml_path: assets/xml/objects/object_ane.xml +- name: objects/object_ani + xml_path: assets/xml/objects/object_ani.xml +- name: objects/object_anubice + xml_path: assets/xml/objects/object_anubice.xml +- name: objects/object_aob + xml_path: assets/xml/objects/object_aob.xml +- name: objects/object_b_heart + xml_path: assets/xml/objects/object_b_heart.xml +- name: objects/object_Bb + xml_path: assets/xml/objects/object_Bb.xml +- name: objects/object_bba + xml_path: assets/xml/objects/object_bba.xml +- name: objects/object_bdan_objects + xml_path: assets/xml/objects/object_bdan_objects.xml +- name: objects/object_bdoor + xml_path: assets/xml/objects/object_bdoor.xml +- name: objects/object_bg + xml_path: assets/xml/objects/object_bg.xml +- name: objects/object_bigokuta + xml_path: assets/xml/objects/object_bigokuta.xml +- name: objects/object_bird + xml_path: assets/xml/objects/object_bird.xml +- name: objects/object_bji + xml_path: assets/xml/objects/object_bji.xml +- name: objects/object_bl + xml_path: assets/xml/objects/object_bl.xml +- name: objects/object_blkobj + xml_path: assets/xml/objects/object_blkobj.xml +- name: objects/object_bob + xml_path: assets/xml/objects/object_bob.xml +- name: objects/object_boj + xml_path: assets/xml/objects/object_boj.xml +- name: objects/object_bombf + xml_path: assets/xml/objects/object_bombf.xml +- name: objects/object_bombiwa + xml_path: assets/xml/objects/object_bombiwa.xml +- name: objects/object_bowl + xml_path: assets/xml/objects/object_bowl.xml +- name: objects/object_box + xml_path: assets/xml/objects/object_box.xml +- name: objects/object_brob + xml_path: assets/xml/objects/object_brob.xml +- name: objects/object_bubble + xml_path: assets/xml/objects/object_bubble.xml +- name: objects/object_bv + xml_path: assets/xml/objects/object_bv.xml +- name: objects/object_bw + xml_path: assets/xml/objects/object_bw.xml +- name: objects/object_bwall + xml_path: assets/xml/objects/object_bwall.xml +- name: objects/object_bxa + xml_path: assets/xml/objects/object_bxa.xml +- name: objects/object_cne + xml_path: assets/xml/objects/object_cne.xml +- name: objects/object_cob + xml_path: assets/xml/objects/object_cob.xml +- name: objects/object_cow + xml_path: assets/xml/objects/object_cow.xml +- name: objects/object_crow + xml_path: assets/xml/objects/object_crow.xml +- name: objects/object_cs + xml_path: assets/xml/objects/object_cs.xml +- name: objects/object_d_elevator + xml_path: assets/xml/objects/object_d_elevator.xml +- name: objects/object_d_hsblock + xml_path: assets/xml/objects/object_d_hsblock.xml +- name: objects/object_d_lift + xml_path: assets/xml/objects/object_d_lift.xml +- name: objects/object_daiku + xml_path: assets/xml/objects/object_daiku.xml +- name: objects/object_ddan_objects + xml_path: assets/xml/objects/object_ddan_objects.xml +- name: objects/object_dekubaba + xml_path: assets/xml/objects/object_dekubaba.xml +- name: objects/object_dekujr + xml_path: assets/xml/objects/object_dekujr.xml +- name: objects/object_dekunuts + xml_path: assets/xml/objects/object_dekunuts.xml +- name: objects/object_demo_6k + xml_path: assets/xml/objects/object_demo_6k.xml +- name: objects/object_demo_kekkai + xml_path: assets/xml/objects/object_demo_kekkai.xml +- name: objects/object_demo_tre_lgt + xml_path: assets/xml/objects/object_demo_tre_lgt.xml +- name: objects/object_dh + xml_path: assets/xml/objects/object_dh.xml +- name: objects/object_dnk + xml_path: assets/xml/objects/object_dnk.xml +- name: objects/object_dns + xml_path: assets/xml/objects/object_dns.xml +- name: objects/object_dodojr + xml_path: assets/xml/objects/object_dodojr.xml +- name: objects/object_dodongo + xml_path: assets/xml/objects/object_dodongo.xml +- name: objects/object_dog + xml_path: assets/xml/objects/object_dog.xml +- name: objects/object_door_gerudo + xml_path: assets/xml/objects/object_door_gerudo.xml +- name: objects/object_door_killer + xml_path: assets/xml/objects/object_door_killer.xml +- name: objects/object_ds + xml_path: assets/xml/objects/object_ds.xml +- name: objects/object_ds2 + xml_path: assets/xml/objects/object_ds2.xml +- name: objects/object_du + xml_path: assets/xml/objects/object_du.xml +- name: objects/object_dy_obj + xml_path: assets/xml/objects/object_dy_obj.xml +- name: objects/object_ec + xml_path: assets/xml/objects/object_ec.xml +- name: objects/object_efc_crystal_light + xml_path: assets/xml/objects/object_efc_crystal_light.xml +- name: objects/object_efc_doughnut + xml_path: assets/xml/objects/object_efc_doughnut.xml +- name: objects/object_efc_erupc + xml_path: assets/xml/objects/object_efc_erupc.xml +- name: objects/object_efc_fire_ball + xml_path: assets/xml/objects/object_efc_fire_ball.xml +- name: objects/object_efc_flash + xml_path: assets/xml/objects/object_efc_flash.xml +- name: objects/object_efc_lgt_shower + xml_path: assets/xml/objects/object_efc_lgt_shower.xml +- name: objects/object_efc_star_field + xml_path: assets/xml/objects/object_efc_star_field.xml +- name: objects/object_efc_tw + xml_path: assets/xml/objects/object_efc_tw.xml +- name: objects/object_ei + xml_path: assets/xml/objects/object_ei.xml +- name: objects/object_fa + xml_path: assets/xml/objects/object_fa.xml +- name: objects/object_fd + xml_path: assets/xml/objects/object_fd.xml +- name: objects/object_fd2 + xml_path: assets/xml/objects/object_fd2.xml +- name: objects/object_fhg + xml_path: assets/xml/objects/object_fhg.xml +- name: objects/object_fire + xml_path: assets/xml/objects/object_fire.xml +- name: objects/object_firefly + xml_path: assets/xml/objects/object_firefly.xml +- name: objects/object_fish + xml_path: assets/xml/objects/object_fish.xml +- name: objects/object_fr + xml_path: assets/xml/objects/object_fr.xml +- name: objects/object_fu + xml_path: assets/xml/objects/object_fu.xml +- name: objects/object_fw + xml_path: assets/xml/objects/object_fw.xml +- name: objects/object_fz + xml_path: assets/xml/objects/object_fz.xml +- name: objects/object_ganon + xml_path: assets/xml/objects/object_ganon.xml +- name: objects/object_ganon2 + xml_path: assets/xml/objects/object_ganon2.xml +- name: objects/object_ganon_anime1 + xml_path: assets/xml/objects/object_ganon_anime1.xml +- name: objects/object_ganon_anime2 + xml_path: assets/xml/objects/object_ganon_anime2.xml +- name: objects/object_ganon_anime3 + xml_path: assets/xml/objects/object_ganon_anime3.xml +- name: objects/object_ganon_objects + xml_path: assets/xml/objects/object_ganon_objects.xml +- name: objects/object_ge1 + xml_path: assets/xml/objects/object_ge1.xml +- name: objects/object_geff + xml_path: assets/xml/objects/object_geff.xml +- name: objects/object_geldb + xml_path: assets/xml/objects/object_geldb.xml +- name: objects/object_gi_arrow + xml_path: assets/xml/objects/object_gi_arrow.xml +- name: objects/object_gi_arrowcase + xml_path: assets/xml/objects/object_gi_arrowcase.xml +- name: objects/object_gi_bean + xml_path: assets/xml/objects/object_gi_bean.xml +- name: objects/object_gi_bomb_1 + xml_path: assets/xml/objects/object_gi_bomb_1.xml +- name: objects/object_gi_bomb_2 + xml_path: assets/xml/objects/object_gi_bomb_2.xml +- name: objects/object_gi_bombpouch + xml_path: assets/xml/objects/object_gi_bombpouch.xml +- name: objects/object_gi_boomerang + xml_path: assets/xml/objects/object_gi_boomerang.xml +- name: objects/object_gi_boots_2 + xml_path: assets/xml/objects/object_gi_boots_2.xml +- name: objects/object_gi_bosskey + xml_path: assets/xml/objects/object_gi_bosskey.xml +- name: objects/object_gi_bottle + xml_path: assets/xml/objects/object_gi_bottle.xml +- name: objects/object_gi_bottle_letter + xml_path: assets/xml/objects/object_gi_bottle_letter.xml +- name: objects/object_gi_bow + xml_path: assets/xml/objects/object_gi_bow.xml +- name: objects/object_gi_bracelet + xml_path: assets/xml/objects/object_gi_bracelet.xml +- name: objects/object_gi_brokensword + xml_path: assets/xml/objects/object_gi_brokensword.xml +- name: objects/object_gi_butterfly + xml_path: assets/xml/objects/object_gi_butterfly.xml +- name: objects/object_gi_clothes + xml_path: assets/xml/objects/object_gi_clothes.xml +- name: objects/object_gi_coin + xml_path: assets/xml/objects/object_gi_coin.xml +- name: objects/object_gi_compass + xml_path: assets/xml/objects/object_gi_compass.xml +- name: objects/object_gi_dekupouch + xml_path: assets/xml/objects/object_gi_dekupouch.xml +- name: objects/object_gi_egg + xml_path: assets/xml/objects/object_gi_egg.xml +- name: objects/object_gi_eye_lotion + xml_path: assets/xml/objects/object_gi_eye_lotion.xml +- name: objects/object_gi_fire + xml_path: assets/xml/objects/object_gi_fire.xml +- name: objects/object_gi_fish + xml_path: assets/xml/objects/object_gi_fish.xml +- name: objects/object_gi_frog + xml_path: assets/xml/objects/object_gi_frog.xml +- name: objects/object_gi_gerudo + xml_path: assets/xml/objects/object_gi_gerudo.xml +- name: objects/object_gi_gerudomask + xml_path: assets/xml/objects/object_gi_gerudomask.xml +- name: objects/object_gi_ghost + xml_path: assets/xml/objects/object_gi_ghost.xml +- name: objects/object_gi_glasses + xml_path: assets/xml/objects/object_gi_glasses.xml +- name: objects/object_gi_gloves + xml_path: assets/xml/objects/object_gi_gloves.xml +- name: objects/object_gi_goddess + xml_path: assets/xml/objects/object_gi_goddess.xml +- name: objects/object_gi_golonmask + xml_path: assets/xml/objects/object_gi_golonmask.xml +- name: objects/object_gi_grass + xml_path: assets/xml/objects/object_gi_grass.xml +- name: objects/object_gi_hammer + xml_path: assets/xml/objects/object_gi_hammer.xml +- name: objects/object_gi_heart + xml_path: assets/xml/objects/object_gi_heart.xml +- name: objects/object_gi_hearts + xml_path: assets/xml/objects/object_gi_hearts.xml +- name: objects/object_gi_hookshot + xml_path: assets/xml/objects/object_gi_hookshot.xml +- name: objects/object_gi_hoverboots + xml_path: assets/xml/objects/object_gi_hoverboots.xml +- name: objects/object_gi_insect + xml_path: assets/xml/objects/object_gi_insect.xml +- name: objects/object_gi_jewel + xml_path: assets/xml/objects/object_gi_jewel.xml +- name: objects/object_gi_key + xml_path: assets/xml/objects/object_gi_key.xml +- name: objects/object_gi_ki_tan_mask + xml_path: assets/xml/objects/object_gi_ki_tan_mask.xml +- name: objects/object_gi_letter + xml_path: assets/xml/objects/object_gi_letter.xml +- name: objects/object_gi_liquid + xml_path: assets/xml/objects/object_gi_liquid.xml +- name: objects/object_gi_longsword + xml_path: assets/xml/objects/object_gi_longsword.xml +- name: objects/object_gi_m_arrow + xml_path: assets/xml/objects/object_gi_m_arrow.xml +- name: objects/object_gi_magicpot + xml_path: assets/xml/objects/object_gi_magicpot.xml +- name: objects/object_gi_map + xml_path: assets/xml/objects/object_gi_map.xml +- name: objects/object_gi_medal + xml_path: assets/xml/objects/object_gi_medal.xml +- name: objects/object_gi_melody + xml_path: assets/xml/objects/object_gi_melody.xml +- name: objects/object_gi_milk + xml_path: assets/xml/objects/object_gi_milk.xml +- name: objects/object_gi_mushroom + xml_path: assets/xml/objects/object_gi_mushroom.xml +- name: objects/object_gi_niwatori + xml_path: assets/xml/objects/object_gi_niwatori.xml +- name: objects/object_gi_nuts + xml_path: assets/xml/objects/object_gi_nuts.xml +- name: objects/object_gi_ocarina + xml_path: assets/xml/objects/object_gi_ocarina.xml +- name: objects/object_gi_ocarina_0 + xml_path: assets/xml/objects/object_gi_ocarina_0.xml +- name: objects/object_gi_pachinko + xml_path: assets/xml/objects/object_gi_pachinko.xml +- name: objects/object_gi_powder + xml_path: assets/xml/objects/object_gi_powder.xml +- name: objects/object_gi_prescription + xml_path: assets/xml/objects/object_gi_prescription.xml +- name: objects/object_gi_purse + xml_path: assets/xml/objects/object_gi_purse.xml +- name: objects/object_gi_rabit_mask + xml_path: assets/xml/objects/object_gi_rabit_mask.xml +- name: objects/object_gi_redead_mask + xml_path: assets/xml/objects/object_gi_redead_mask.xml +- name: objects/object_gi_rupy + xml_path: assets/xml/objects/object_gi_rupy.xml +- name: objects/object_gi_saw + xml_path: assets/xml/objects/object_gi_saw.xml +- name: objects/object_gi_scale + xml_path: assets/xml/objects/object_gi_scale.xml +- name: objects/object_gi_seed + xml_path: assets/xml/objects/object_gi_seed.xml +- name: objects/object_gi_shield_1 + xml_path: assets/xml/objects/object_gi_shield_1.xml +- name: objects/object_gi_shield_2 + xml_path: assets/xml/objects/object_gi_shield_2.xml +- name: objects/object_gi_shield_3 + xml_path: assets/xml/objects/object_gi_shield_3.xml +- name: objects/object_gi_skj_mask + xml_path: assets/xml/objects/object_gi_skj_mask.xml +- name: objects/object_gi_soldout + xml_path: assets/xml/objects/object_gi_soldout.xml +- name: objects/object_gi_soul + xml_path: assets/xml/objects/object_gi_soul.xml +- name: objects/object_gi_stick + xml_path: assets/xml/objects/object_gi_stick.xml +- name: objects/object_gi_sutaru + xml_path: assets/xml/objects/object_gi_sutaru.xml +- name: objects/object_gi_sword_1 + xml_path: assets/xml/objects/object_gi_sword_1.xml +- name: objects/object_gi_ticketstone + xml_path: assets/xml/objects/object_gi_ticketstone.xml +- name: objects/object_gi_truth_mask + xml_path: assets/xml/objects/object_gi_truth_mask.xml +- name: objects/object_gi_zoramask + xml_path: assets/xml/objects/object_gi_zoramask.xml +- name: objects/object_gj + xml_path: assets/xml/objects/object_gj.xml +- name: objects/object_gjyo_objects + xml_path: assets/xml/objects/object_gjyo_objects.xml +- name: objects/object_gla + xml_path: assets/xml/objects/object_gla.xml +- name: objects/object_gm + xml_path: assets/xml/objects/object_gm.xml +- name: objects/object_gnd + xml_path: assets/xml/objects/object_gnd.xml +- name: objects/object_gnd_magic + xml_path: assets/xml/objects/object_gnd_magic.xml +- name: objects/object_gndd + xml_path: assets/xml/objects/object_gndd.xml +- name: objects/object_god_lgt + xml_path: assets/xml/objects/object_god_lgt.xml +- name: objects/object_gol + xml_path: assets/xml/objects/object_gol.xml +- name: objects/object_goma + xml_path: assets/xml/objects/object_goma.xml +- name: objects/object_goroiwa + xml_path: assets/xml/objects/object_goroiwa.xml +- name: objects/object_gr + xml_path: assets/xml/objects/object_gr.xml +- name: objects/object_gs + xml_path: assets/xml/objects/object_gs.xml +- name: objects/object_gt + xml_path: assets/xml/objects/object_gt.xml +- name: objects/object_haka + xml_path: assets/xml/objects/object_haka.xml +- name: objects/object_haka_door + xml_path: assets/xml/objects/object_haka_door.xml +- name: objects/object_haka_objects + xml_path: assets/xml/objects/object_haka_objects.xml +- name: objects/object_hakach_objects + xml_path: assets/xml/objects/object_hakach_objects.xml +- name: objects/object_hata + xml_path: assets/xml/objects/object_hata.xml +- name: objects/object_heavy_object + xml_path: assets/xml/objects/object_heavy_object.xml +- name: objects/object_hidan_objects + xml_path: assets/xml/objects/object_hidan_objects.xml +- name: objects/object_hintnuts + xml_path: assets/xml/objects/object_hintnuts.xml +- name: objects/object_hni + xml_path: assets/xml/objects/object_hni.xml +- name: objects/object_horse + xml_path: assets/xml/objects/object_horse.xml +- name: objects/object_horse_ganon + xml_path: assets/xml/objects/object_horse_ganon.xml +- name: objects/object_horse_link_child + xml_path: assets/xml/objects/object_horse_link_child.xml +- name: objects/object_horse_normal + xml_path: assets/xml/objects/object_horse_normal.xml +- name: objects/object_horse_zelda + xml_path: assets/xml/objects/object_horse_zelda.xml +- name: objects/object_hs + xml_path: assets/xml/objects/object_hs.xml +- name: objects/object_human + xml_path: assets/xml/objects/object_human.xml +- name: objects/object_ice_objects + xml_path: assets/xml/objects/object_ice_objects.xml +- name: objects/object_ik + xml_path: assets/xml/objects/object_ik.xml +- name: objects/object_im + xml_path: assets/xml/objects/object_im.xml +- name: objects/object_in + xml_path: assets/xml/objects/object_in.xml +- name: objects/object_ingate + xml_path: assets/xml/objects/object_ingate.xml +- name: objects/object_jj + xml_path: assets/xml/objects/object_jj.xml +- name: objects/object_js + xml_path: assets/xml/objects/object_js.xml +- name: objects/object_jya_door + xml_path: assets/xml/objects/object_jya_door.xml +- name: objects/object_jya_iron + xml_path: assets/xml/objects/object_jya_iron.xml +- name: objects/object_jya_obj + xml_path: assets/xml/objects/object_jya_obj.xml +- name: objects/object_ka + xml_path: assets/xml/objects/object_ka.xml +- name: objects/object_kanban + xml_path: assets/xml/objects/object_kanban.xml +- name: objects/object_kibako2 + xml_path: assets/xml/objects/object_kibako2.xml +- name: objects/object_kingdodongo + xml_path: assets/xml/objects/object_kingdodongo.xml +- name: objects/object_km1 + xml_path: assets/xml/objects/object_km1.xml +- name: objects/object_kusa + xml_path: assets/xml/objects/object_kusa.xml +- name: objects/object_kw1 + xml_path: assets/xml/objects/object_kw1.xml +- name: objects/object_kz + xml_path: assets/xml/objects/object_kz.xml +- name: objects/object_light_ring + xml_path: assets/xml/objects/object_light_ring.xml +- name: objects/object_lightbox + xml_path: assets/xml/objects/object_lightbox.xml +- name: objects/object_lightswitch + xml_path: assets/xml/objects/object_lightswitch.xml +- name: objects/object_link_boy + xml_path: assets/xml/objects/object_link_boy.xml +- name: objects/object_link_child + xml_path: assets/xml/objects/object_link_child.xml +- name: objects/object_ma1 + xml_path: assets/xml/objects/object_ma1.xml +- name: objects/object_ma2 + xml_path: assets/xml/objects/object_ma2.xml +- name: objects/object_mag + xml_path: assets/xml/objects/object_mag.xml +- name: objects/object_mamenoki + xml_path: assets/xml/objects/object_mamenoki.xml +- name: objects/object_mastergolon + xml_path: assets/xml/objects/object_mastergolon.xml +- name: objects/object_masterkokiri + xml_path: assets/xml/objects/object_masterkokiri.xml +- name: objects/object_masterkokirihead + xml_path: assets/xml/objects/object_masterkokirihead.xml +- name: objects/object_masterzoora + xml_path: assets/xml/objects/object_masterzoora.xml +- name: objects/object_mb + xml_path: assets/xml/objects/object_mb.xml +- name: objects/object_md + xml_path: assets/xml/objects/object_md.xml +- name: objects/object_medal + xml_path: assets/xml/objects/object_medal.xml +- name: objects/object_menkuri_objects + xml_path: assets/xml/objects/object_menkuri_objects.xml +- name: objects/object_mir_ray + xml_path: assets/xml/objects/object_mir_ray.xml +- name: objects/object_mizu_objects + xml_path: assets/xml/objects/object_mizu_objects.xml +- name: objects/object_mjin + xml_path: assets/xml/objects/object_mjin.xml +- name: objects/object_mjin_dark + xml_path: assets/xml/objects/object_mjin_dark.xml +- name: objects/object_mjin_flame + xml_path: assets/xml/objects/object_mjin_flame.xml +- name: objects/object_mjin_flash + xml_path: assets/xml/objects/object_mjin_flash.xml +- name: objects/object_mjin_ice + xml_path: assets/xml/objects/object_mjin_ice.xml +- name: objects/object_mjin_oka + xml_path: assets/xml/objects/object_mjin_oka.xml +- name: objects/object_mjin_soul + xml_path: assets/xml/objects/object_mjin_soul.xml +- name: objects/object_mjin_wind + xml_path: assets/xml/objects/object_mjin_wind.xml +- name: objects/object_mk + xml_path: assets/xml/objects/object_mk.xml +- name: objects/object_mm + xml_path: assets/xml/objects/object_mm.xml +- name: objects/object_mo + xml_path: assets/xml/objects/object_mo.xml +- name: objects/object_mori_hineri1 + xml_path: assets/xml/objects/object_mori_hineri1.xml +- name: objects/object_mori_hineri1a + xml_path: assets/xml/objects/object_mori_hineri1a.xml +- name: objects/object_mori_hineri2 + xml_path: assets/xml/objects/object_mori_hineri2.xml +- name: objects/object_mori_hineri2a + xml_path: assets/xml/objects/object_mori_hineri2a.xml +- name: objects/object_mori_objects + xml_path: assets/xml/objects/object_mori_objects.xml +- name: objects/object_mori_tex + xml_path: assets/xml/objects/object_mori_tex.xml +- name: objects/object_ms + xml_path: assets/xml/objects/object_ms.xml +- name: objects/object_mu + xml_path: assets/xml/objects/object_mu.xml +- name: objects/object_nb + xml_path: assets/xml/objects/object_nb.xml +- name: objects/object_niw + xml_path: assets/xml/objects/object_niw.xml +- name: objects/object_nwc + xml_path: assets/xml/objects/object_nwc.xml +- name: objects/object_ny + xml_path: assets/xml/objects/object_ny.xml +- name: objects/object_o_anime + xml_path: assets/xml/objects/object_o_anime.xml +- name: objects/object_oA1 + xml_path: assets/xml/objects/object_oA1.xml +- name: objects/object_oA2 + xml_path: assets/xml/objects/object_oA2.xml +- name: objects/object_oA3 + xml_path: assets/xml/objects/object_oA3.xml +- name: objects/object_oA4 + xml_path: assets/xml/objects/object_oA4.xml +- name: objects/object_oA5 + xml_path: assets/xml/objects/object_oA5.xml +- name: objects/object_oA6 + xml_path: assets/xml/objects/object_oA6.xml +- name: objects/object_oA7 + xml_path: assets/xml/objects/object_oA7.xml +- name: objects/object_oA8 + xml_path: assets/xml/objects/object_oA8.xml +- name: objects/object_oA9 + xml_path: assets/xml/objects/object_oA9.xml +- name: objects/object_oA10 + xml_path: assets/xml/objects/object_oA10.xml +- name: objects/object_oA11 + xml_path: assets/xml/objects/object_oA11.xml +- name: objects/object_oB1 + xml_path: assets/xml/objects/object_oB1.xml +- name: objects/object_oB2 + xml_path: assets/xml/objects/object_oB2.xml +- name: objects/object_oB3 + xml_path: assets/xml/objects/object_oB3.xml +- name: objects/object_oB4 + xml_path: assets/xml/objects/object_oB4.xml +- name: objects/object_oE1 + xml_path: assets/xml/objects/object_oE1.xml +- name: objects/object_oE1s + xml_path: assets/xml/objects/object_oE1s.xml +- name: objects/object_oE2 + xml_path: assets/xml/objects/object_oE2.xml +- name: objects/object_oE3 + xml_path: assets/xml/objects/object_oE3.xml +- name: objects/object_oE4 + xml_path: assets/xml/objects/object_oE4.xml +- name: objects/object_oE4s + xml_path: assets/xml/objects/object_oE4s.xml +- name: objects/object_oE5 + xml_path: assets/xml/objects/object_oE5.xml +- name: objects/object_oE6 + xml_path: assets/xml/objects/object_oE6.xml +- name: objects/object_oE7 + xml_path: assets/xml/objects/object_oE7.xml +- name: objects/object_oE8 + xml_path: assets/xml/objects/object_oE8.xml +- name: objects/object_oE9 + xml_path: assets/xml/objects/object_oE9.xml +- name: objects/object_oE10 + xml_path: assets/xml/objects/object_oE10.xml +- name: objects/object_oE11 + xml_path: assets/xml/objects/object_oE11.xml +- name: objects/object_oE12 + xml_path: assets/xml/objects/object_oE12.xml +- name: objects/object_oE_anime + xml_path: assets/xml/objects/object_oE_anime.xml +- name: objects/object_oF1d_map + xml_path: assets/xml/objects/object_oF1d_map.xml +- name: objects/object_oF1s + xml_path: assets/xml/objects/object_oF1s.xml +- name: objects/object_okuta + xml_path: assets/xml/objects/object_okuta.xml +- name: objects/object_opening_demo1 + xml_path: assets/xml/objects/object_opening_demo1.xml +- name: objects/object_os + xml_path: assets/xml/objects/object_os.xml +- name: objects/object_os_anime + xml_path: assets/xml/objects/object_os_anime.xml +- name: objects/object_ossan + xml_path: assets/xml/objects/object_ossan.xml +- name: objects/object_ouke_haka + xml_path: assets/xml/objects/object_ouke_haka.xml +- name: objects/object_owl + xml_path: assets/xml/objects/object_owl.xml +- name: objects/object_peehat + xml_path: assets/xml/objects/object_peehat.xml +- name: objects/object_po_composer + xml_path: assets/xml/objects/object_po_composer.xml +- name: objects/object_po_field + xml_path: assets/xml/objects/object_po_field.xml +- name: objects/object_po_sisters + xml_path: assets/xml/objects/object_po_sisters.xml +- name: objects/object_poh + xml_path: assets/xml/objects/object_poh.xml +- name: objects/object_ps + xml_path: assets/xml/objects/object_ps.xml +- name: objects/object_pu_box + xml_path: assets/xml/objects/object_pu_box.xml +- name: objects/object_rd + xml_path: assets/xml/objects/object_rd.xml +- name: objects/object_reeba + xml_path: assets/xml/objects/object_reeba.xml +- name: objects/object_relay_objects + xml_path: assets/xml/objects/object_relay_objects.xml +- name: objects/object_rl + xml_path: assets/xml/objects/object_rl.xml +- name: objects/object_rr + xml_path: assets/xml/objects/object_rr.xml +- name: objects/object_rs + xml_path: assets/xml/objects/object_rs.xml +- name: objects/object_ru1 + xml_path: assets/xml/objects/object_ru1.xml +- name: objects/object_ru2 + xml_path: assets/xml/objects/object_ru2.xml +- name: objects/object_sa + xml_path: assets/xml/objects/object_sa.xml +- name: objects/object_sb + xml_path: assets/xml/objects/object_sb.xml +- name: objects/object_sd + xml_path: assets/xml/objects/object_sd.xml +- name: objects/object_shop_dungen + xml_path: assets/xml/objects/object_shop_dungen.xml +- name: objects/object_shopnuts + xml_path: assets/xml/objects/object_shopnuts.xml +- name: objects/object_siofuki + xml_path: assets/xml/objects/object_siofuki.xml +- name: objects/object_sk2 + xml_path: assets/xml/objects/object_sk2.xml +- name: objects/object_skb + xml_path: assets/xml/objects/object_skb.xml +- name: objects/object_skj + xml_path: assets/xml/objects/object_skj.xml +- name: objects/object_spot00_break + xml_path: assets/xml/objects/object_spot00_break.xml +- name: objects/object_spot00_objects + xml_path: assets/xml/objects/object_spot00_objects.xml +- name: objects/object_spot01_matoya + xml_path: assets/xml/objects/object_spot01_matoya.xml +- name: objects/object_spot01_matoyab + xml_path: assets/xml/objects/object_spot01_matoyab.xml +- name: objects/object_spot01_objects + xml_path: assets/xml/objects/object_spot01_objects.xml +- name: objects/object_spot01_objects2 + xml_path: assets/xml/objects/object_spot01_objects2.xml +- name: objects/object_spot02_objects + xml_path: assets/xml/objects/object_spot02_objects.xml +- name: objects/object_spot03_object + xml_path: assets/xml/objects/object_spot03_object.xml +- name: objects/object_spot04_objects + xml_path: assets/xml/objects/object_spot04_objects.xml +- name: objects/object_spot05_objects + xml_path: assets/xml/objects/object_spot05_objects.xml +- name: objects/object_spot06_objects + xml_path: assets/xml/objects/object_spot06_objects.xml +- name: objects/object_spot07_object + xml_path: assets/xml/objects/object_spot07_object.xml +- name: objects/object_spot08_obj + xml_path: assets/xml/objects/object_spot08_obj.xml +- name: objects/object_spot09_obj + xml_path: assets/xml/objects/object_spot09_obj.xml +- name: objects/object_spot11_obj + xml_path: assets/xml/objects/object_spot11_obj.xml +- name: objects/object_spot12_obj + xml_path: assets/xml/objects/object_spot12_obj.xml +- name: objects/object_spot15_obj + xml_path: assets/xml/objects/object_spot15_obj.xml +- name: objects/object_spot16_obj + xml_path: assets/xml/objects/object_spot16_obj.xml +- name: objects/object_spot17_obj + xml_path: assets/xml/objects/object_spot17_obj.xml +- name: objects/object_spot18_obj + xml_path: assets/xml/objects/object_spot18_obj.xml +- name: objects/object_ssh + xml_path: assets/xml/objects/object_ssh.xml +- name: objects/object_sst + xml_path: assets/xml/objects/object_sst.xml +- name: objects/object_st + xml_path: assets/xml/objects/object_st.xml +- name: objects/object_stream + xml_path: assets/xml/objects/object_stream.xml +- name: objects/object_syokudai + xml_path: assets/xml/objects/object_syokudai.xml +- name: objects/object_ta + xml_path: assets/xml/objects/object_ta.xml +- name: objects/object_timeblock + xml_path: assets/xml/objects/object_timeblock.xml +- name: objects/object_tite + xml_path: assets/xml/objects/object_tite.xml +- name: objects/object_tk + xml_path: assets/xml/objects/object_tk.xml +- name: objects/object_toki_objects + xml_path: assets/xml/objects/object_toki_objects.xml +- name: objects/object_torch2 + xml_path: assets/xml/objects/object_torch2.xml +- name: objects/object_toryo + xml_path: assets/xml/objects/object_toryo.xml +- name: objects/object_tp + xml_path: assets/xml/objects/object_tp.xml +- name: objects/object_tr + xml_path: assets/xml/objects/object_tr.xml +- name: objects/object_trap + xml_path: assets/xml/objects/object_trap.xml +- name: objects/object_triforce_spot + xml_path: assets/xml/objects/object_triforce_spot.xml +- name: objects/object_ts + xml_path: assets/xml/objects/object_ts.xml +- name: objects/object_tsubo + xml_path: assets/xml/objects/object_tsubo.xml +- name: objects/object_tw + xml_path: assets/xml/objects/object_tw.xml +- name: objects/object_umajump + xml_path: assets/xml/objects/object_umajump.xml +- name: objects/object_vali + xml_path: assets/xml/objects/object_vali.xml +- name: objects/object_vase + xml_path: assets/xml/objects/object_vase.xml +- name: objects/object_vm + xml_path: assets/xml/objects/object_vm.xml +- name: objects/object_wallmaster + xml_path: assets/xml/objects/object_wallmaster.xml +- name: objects/object_warp1 + xml_path: assets/xml/objects/object_warp1.xml +- name: objects/object_warp2 + xml_path: assets/xml/objects/object_warp2.xml +- name: objects/object_wf + xml_path: assets/xml/objects/object_wf.xml +- name: objects/object_wood02 + xml_path: assets/xml/objects/object_wood02.xml +- name: objects/object_xc + xml_path: assets/xml/objects/object_xc.xml +- name: objects/object_yabusame_point + xml_path: assets/xml/objects/object_yabusame_point.xml +- name: objects/object_ydan_objects + xml_path: assets/xml/objects/object_ydan_objects.xml +- name: objects/object_yukabyun + xml_path: assets/xml/objects/object_yukabyun.xml +- name: objects/object_zf + xml_path: assets/xml/objects/object_zf.xml +- name: objects/object_zg + xml_path: assets/xml/objects/object_zg.xml +- name: objects/object_zl1 + xml_path: assets/xml/objects/object_zl1.xml +- name: objects/object_zl2 + xml_path: assets/xml/objects/object_zl2.xml +- name: objects/object_zl2_anime1 + xml_path: assets/xml/objects/object_zl2_anime1.xml +- name: objects/object_zl2_anime2 + xml_path: assets/xml/objects/object_zl2_anime2.xml +- name: objects/object_zl4 + xml_path: assets/xml/objects/object_zl4.xml +- name: objects/object_zo + xml_path: assets/xml/objects/object_zo.xml +- name: overlays/ovl_Arrow_Fire + xml_path: assets/xml/overlays/ovl_Arrow_Fire.xml + start_offset: 0x960 + end_offset: 0x1D80 +- name: overlays/ovl_Arrow_Ice + xml_path: assets/xml/overlays/ovl_Arrow_Ice.xml + start_offset: 0x980 + end_offset: 0x1DA0 +- name: overlays/ovl_Arrow_Light + xml_path: assets/xml/overlays/ovl_Arrow_Light.xml + start_offset: 0x990 + end_offset: 0x1DB0 +- name: overlays/ovl_Bg_Ganon_Otyuka + xml_path: assets/xml/overlays/ovl_Bg_Ganon_Otyuka.xml + start_offset: 0x1110 + end_offset: 0x24EC +- name: overlays/ovl_Bg_Jya_Cobra + xml_path: assets/xml/overlays/ovl_Bg_Jya_Cobra.xml + start_offset: 0x1830 + end_offset: 0x18A8 +- name: overlays/ovl_Boss_Dodongo + xml_path: assets/xml/overlays/ovl_Boss_Dodongo.xml + start_offset: 0x61C8 + end_offset: 0x91C8 +- name: overlays/ovl_Boss_Ganon + xml_path: assets/xml/overlays/ovl_Boss_Ganon.xml + start_offset: 0xE398 + end_offset: 0x20EB8 +- name: overlays/ovl_Boss_Ganon2 + xml_path: assets/xml/overlays/ovl_Boss_Ganon2.xml + start_offset: 0x9F48 + end_offset: 0x103F8 +- name: overlays/ovl_Boss_Sst + xml_path: assets/xml/overlays/ovl_Boss_Sst.xml + start_offset: 0xA330 + end_offset: 0xACE0 +- name: overlays/ovl_Demo_Shd + xml_path: assets/xml/overlays/ovl_Demo_Shd.xml + start_offset: 0x410 + end_offset: 0x2390 +- name: overlays/ovl_Effect_Ss_Fhg_Flash + xml_path: assets/xml/overlays/ovl_Effect_Ss_Fhg_Flash.xml + start_offset: 0x9F0 + end_offset: 0xEA8 +- name: overlays/ovl_En_Bili + xml_path: assets/xml/overlays/ovl_En_Bili.xml + start_offset: 0x1E40 + end_offset: 0x1E60 +- name: overlays/ovl_En_Clear_Tag + xml_path: assets/xml/overlays/ovl_En_Clear_Tag.xml + start_offset: 0x2600 + end_offset: 0x8900 +- name: overlays/ovl_En_Ganon_Mant + xml_path: assets/xml/overlays/ovl_En_Ganon_Mant.xml + start_offset: 0x11E8 + end_offset: 0x40E8 +- name: overlays/ovl_En_Ganon_Organ + xml_path: assets/xml/overlays/ovl_En_Ganon_Organ.xml + start_offset: 0x328 + end_offset: 0x6EB0 +- name: overlays/ovl_En_Holl + xml_path: assets/xml/overlays/ovl_En_Holl.xml + start_offset: 0xE68 + end_offset: 0xED0 +- name: overlays/ovl_En_Jsjutan + xml_path: assets/xml/overlays/ovl_En_Jsjutan.xml + start_offset: 0x12B8 + end_offset: 0x4C50 +- name: overlays/ovl_En_Kanban + xml_path: assets/xml/overlays/ovl_En_Kanban.xml + start_offset: 0x2E70 + end_offset: 0x2F30 +- name: overlays/ovl_En_Sda + xml_path: assets/xml/overlays/ovl_En_Sda.xml + start_offset: 0x14A8 + end_offset: 0x1538 +- name: overlays/ovl_En_Ssh + xml_path: assets/xml/overlays/ovl_En_Ssh.xml + start_offset: 0x2150 + end_offset: 0x21E0 +- name: overlays/ovl_En_St + xml_path: assets/xml/overlays/ovl_En_St.xml + start_offset: 0x26A0 + end_offset: 0x2730 +- name: overlays/ovl_En_Sth + xml_path: assets/xml/overlays/ovl_En_Sth.xml + start_offset: 0xE60 + end_offset: 0x3E34 +- name: overlays/ovl_End_Title + xml_path: assets/xml/overlays/ovl_End_Title.xml + start_offset: 0x6F0 + end_offset: 0x4098 +- name: overlays/ovl_file_choose + xml_path: assets/xml/overlays/ovl_file_choose.xml + start_offset: 0xEC50 + end_offset: 0xF330 +- name: overlays/ovl_Magic_Dark + xml_path: assets/xml/overlays/ovl_Magic_Dark.xml + start_offset: 0xC90 + end_offset: 0x16C0 +- name: overlays/ovl_Magic_Fire + xml_path: assets/xml/overlays/ovl_Magic_Fire.xml + start_offset: 0xB20 + end_offset: 0x2170 +- name: overlays/ovl_Magic_Wind + xml_path: assets/xml/overlays/ovl_Magic_Wind.xml + start_offset: 0x6A0 + end_offset: 0x1BB8 +- name: overlays/ovl_Oceff_Spot + xml_path: assets/xml/overlays/ovl_Oceff_Spot.xml + start_offset: 0x780 + end_offset: 0xE58 +- name: overlays/ovl_Oceff_Storm + xml_path: assets/xml/overlays/ovl_Oceff_Storm.xml + start_offset: 0x740 + end_offset: 0x1AD0 +- name: overlays/ovl_Oceff_Wipe + xml_path: assets/xml/overlays/ovl_Oceff_Wipe.xml + start_offset: 0x4F0 + end_offset: 0xCB0 +- name: overlays/ovl_Oceff_Wipe2 + xml_path: assets/xml/overlays/ovl_Oceff_Wipe2.xml + start_offset: 0x430 + end_offset: 0x1698 +- name: overlays/ovl_Oceff_Wipe3 + xml_path: assets/xml/overlays/ovl_Oceff_Wipe3.xml + start_offset: 0x430 + end_offset: 0x1678 +- name: overlays/ovl_Oceff_Wipe4 + xml_path: assets/xml/overlays/ovl_Oceff_Wipe4.xml + start_offset: 0x410 + end_offset: 0xEF8 +- name: scenes/dungeons/bdan + xml_path: assets/xml/scenes/dungeons/bdan.xml +- name: scenes/dungeons/bdan_boss + xml_path: assets/xml/scenes/dungeons/bdan_boss.xml +- name: scenes/dungeons/Bmori1 + xml_path: assets/xml/scenes/dungeons/Bmori1.xml +- name: scenes/dungeons/ddan + xml_path: assets/xml/scenes/dungeons/ddan.xml +- name: scenes/dungeons/ddan_boss + xml_path: assets/xml/scenes/dungeons/ddan_boss.xml +- name: scenes/dungeons/FIRE_bs + xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml +- name: scenes/dungeons/ganon + xml_path: assets/xml/scenes/dungeons/ganon.xml +- name: scenes/dungeons/ganon_boss + xml_path: assets/xml/scenes/dungeons/ganon_boss.xml +- name: scenes/dungeons/ganon_demo + xml_path: assets/xml/scenes/dungeons/ganon_demo.xml +- name: scenes/dungeons/ganon_final + xml_path: assets/xml/scenes/dungeons/ganon_final.xml +- name: scenes/dungeons/ganon_sonogo + xml_path: assets/xml/scenes/dungeons/ganon_sonogo.xml +- name: scenes/dungeons/ganontika + xml_path: assets/xml/scenes/dungeons/ganontika.xml +- name: scenes/dungeons/ganontikasonogo + xml_path: assets/xml/scenes/dungeons/ganontikasonogo.xml +- name: scenes/dungeons/gerudoway + xml_path: assets/xml/scenes/dungeons/gerudoway.xml +- name: scenes/dungeons/HAKAdan + xml_path: assets/xml/scenes/dungeons/HAKAdan.xml +- name: scenes/dungeons/HAKAdan_bs + xml_path: assets/xml/scenes/dungeons/HAKAdan_bs.xml +- name: scenes/dungeons/HAKAdanCH + xml_path: assets/xml/scenes/dungeons/HAKAdanCH.xml +- name: scenes/dungeons/HIDAN + xml_path: assets/xml/scenes/dungeons/HIDAN.xml +- name: scenes/dungeons/ice_doukutu + xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml +- name: scenes/dungeons/jyasinboss + xml_path: assets/xml/scenes/dungeons/jyasinboss.xml +- name: scenes/dungeons/jyasinzou + xml_path: assets/xml/scenes/dungeons/jyasinzou.xml +- name: scenes/dungeons/men + xml_path: assets/xml/scenes/dungeons/men.xml +- name: scenes/dungeons/MIZUsin + xml_path: assets/xml/scenes/dungeons/MIZUsin.xml +- name: scenes/dungeons/MIZUsin_bs + xml_path: assets/xml/scenes/dungeons/MIZUsin_bs.xml +- name: scenes/dungeons/moribossroom + xml_path: assets/xml/scenes/dungeons/moribossroom.xml +- name: scenes/dungeons/ydan + xml_path: assets/xml/scenes/dungeons/ydan.xml +- name: scenes/dungeons/ydan_boss + xml_path: assets/xml/scenes/dungeons/ydan_boss.xml +- name: scenes/indoors/bowling + xml_path: assets/xml/scenes/indoors/bowling.xml +- name: scenes/indoors/daiyousei_izumi + xml_path: assets/xml/scenes/indoors/daiyousei_izumi.xml +- name: scenes/indoors/hairal_niwa + xml_path: assets/xml/scenes/indoors/hairal_niwa.xml +- name: scenes/indoors/hairal_niwa_n + xml_path: assets/xml/scenes/indoors/hairal_niwa_n.xml +- name: scenes/indoors/hakasitarelay + xml_path: assets/xml/scenes/indoors/hakasitarelay.xml +- name: scenes/indoors/hut + xml_path: assets/xml/scenes/indoors/hut.xml +- name: scenes/indoors/hylia_labo + xml_path: assets/xml/scenes/indoors/hylia_labo.xml +- name: scenes/indoors/impa + xml_path: assets/xml/scenes/indoors/impa.xml +- name: scenes/indoors/kakariko + xml_path: assets/xml/scenes/indoors/kakariko.xml +- name: scenes/indoors/kenjyanoma + xml_path: assets/xml/scenes/indoors/kenjyanoma.xml +- name: scenes/indoors/kokiri_home + xml_path: assets/xml/scenes/indoors/kokiri_home.xml +- name: scenes/indoors/kokiri_home3 + xml_path: assets/xml/scenes/indoors/kokiri_home3.xml +- name: scenes/indoors/kokiri_home4 + xml_path: assets/xml/scenes/indoors/kokiri_home4.xml +- name: scenes/indoors/kokiri_home5 + xml_path: assets/xml/scenes/indoors/kokiri_home5.xml +- name: scenes/indoors/labo + xml_path: assets/xml/scenes/indoors/labo.xml +- name: scenes/indoors/link_home + xml_path: assets/xml/scenes/indoors/link_home.xml +- name: scenes/indoors/mahouya + xml_path: assets/xml/scenes/indoors/mahouya.xml +- name: scenes/indoors/malon_stable + xml_path: assets/xml/scenes/indoors/malon_stable.xml +- name: scenes/indoors/miharigoya + xml_path: assets/xml/scenes/indoors/miharigoya.xml +- name: scenes/indoors/nakaniwa + xml_path: assets/xml/scenes/indoors/nakaniwa.xml +- name: scenes/indoors/souko + xml_path: assets/xml/scenes/indoors/souko.xml +- name: scenes/indoors/syatekijyou + xml_path: assets/xml/scenes/indoors/syatekijyou.xml +- name: scenes/indoors/takaraya + xml_path: assets/xml/scenes/indoors/takaraya.xml +- name: scenes/indoors/tent + xml_path: assets/xml/scenes/indoors/tent.xml +- name: scenes/indoors/tokinoma + xml_path: assets/xml/scenes/indoors/tokinoma.xml +- name: scenes/indoors/yousei_izumi_tate + xml_path: assets/xml/scenes/indoors/yousei_izumi_tate.xml +- name: scenes/indoors/yousei_izumi_yoko + xml_path: assets/xml/scenes/indoors/yousei_izumi_yoko.xml +- name: scenes/misc/enrui + xml_path: assets/xml/scenes/misc/enrui.xml +- name: scenes/misc/entra + xml_path: assets/xml/scenes/misc/entra.xml +- name: scenes/misc/entra_n + xml_path: assets/xml/scenes/misc/entra_n.xml +- name: scenes/misc/hakaana + xml_path: assets/xml/scenes/misc/hakaana.xml +- name: scenes/misc/hakaana2 + xml_path: assets/xml/scenes/misc/hakaana2.xml +- name: scenes/misc/hakaana_ouke + xml_path: assets/xml/scenes/misc/hakaana_ouke.xml +- name: scenes/misc/hiral_demo + xml_path: assets/xml/scenes/misc/hiral_demo.xml +- name: scenes/misc/kakariko3 + xml_path: assets/xml/scenes/misc/kakariko3.xml +- name: scenes/misc/kakusiana + xml_path: assets/xml/scenes/misc/kakusiana.xml +- name: scenes/misc/kinsuta + xml_path: assets/xml/scenes/misc/kinsuta.xml +- name: scenes/misc/market_alley + xml_path: assets/xml/scenes/misc/market_alley.xml +- name: scenes/misc/market_alley_n + xml_path: assets/xml/scenes/misc/market_alley_n.xml +- name: scenes/misc/market_day + xml_path: assets/xml/scenes/misc/market_day.xml +- name: scenes/misc/market_night + xml_path: assets/xml/scenes/misc/market_night.xml +- name: scenes/misc/market_ruins + xml_path: assets/xml/scenes/misc/market_ruins.xml +- name: scenes/misc/shrine + xml_path: assets/xml/scenes/misc/shrine.xml +- name: scenes/misc/shrine_n + xml_path: assets/xml/scenes/misc/shrine_n.xml +- name: scenes/misc/shrine_r + xml_path: assets/xml/scenes/misc/shrine_r.xml +- name: scenes/misc/turibori + xml_path: assets/xml/scenes/misc/turibori.xml +- name: scenes/overworld/ganon_tou + xml_path: assets/xml/scenes/overworld/ganon_tou.xml +- name: scenes/overworld/spot00 + xml_path: assets/xml/scenes/overworld/spot00.xml +- name: scenes/overworld/spot01 + xml_path: assets/xml/scenes/overworld/spot01.xml +- name: scenes/overworld/spot02 + xml_path: assets/xml/scenes/overworld/spot02.xml +- name: scenes/overworld/spot03 + xml_path: assets/xml/scenes/overworld/spot03.xml +- name: scenes/overworld/spot04 + xml_path: assets/xml/scenes/overworld/spot04.xml +- name: scenes/overworld/spot05 + xml_path: assets/xml/scenes/overworld/spot05.xml +- name: scenes/overworld/spot06 + xml_path: assets/xml/scenes/overworld/spot06.xml +- name: scenes/overworld/spot07 + xml_path: assets/xml/scenes/overworld/spot07.xml +- name: scenes/overworld/spot08 + xml_path: assets/xml/scenes/overworld/spot08.xml +- name: scenes/overworld/spot09 + xml_path: assets/xml/scenes/overworld/spot09.xml +- name: scenes/overworld/spot10 + xml_path: assets/xml/scenes/overworld/spot10.xml +- name: scenes/overworld/spot11 + xml_path: assets/xml/scenes/overworld/spot11.xml +- name: scenes/overworld/spot12 + xml_path: assets/xml/scenes/overworld/spot12.xml +- name: scenes/overworld/spot13 + xml_path: assets/xml/scenes/overworld/spot13.xml +- name: scenes/overworld/spot15 + xml_path: assets/xml/scenes/overworld/spot15.xml +- name: scenes/overworld/spot16 + xml_path: assets/xml/scenes/overworld/spot16.xml +- name: scenes/overworld/spot17 + xml_path: assets/xml/scenes/overworld/spot17.xml +- name: scenes/overworld/spot18 + xml_path: assets/xml/scenes/overworld/spot18.xml +- name: scenes/overworld/spot20 + xml_path: assets/xml/scenes/overworld/spot20.xml +- name: scenes/shops/alley_shop + xml_path: assets/xml/scenes/shops/alley_shop.xml +- name: scenes/shops/drag + xml_path: assets/xml/scenes/shops/drag.xml +- name: scenes/shops/face_shop + xml_path: assets/xml/scenes/shops/face_shop.xml +- name: scenes/shops/golon + xml_path: assets/xml/scenes/shops/golon.xml +- name: scenes/shops/kokiri_shop + xml_path: assets/xml/scenes/shops/kokiri_shop.xml +- name: scenes/shops/night_shop + xml_path: assets/xml/scenes/shops/night_shop.xml +- name: scenes/shops/shop1 + xml_path: assets/xml/scenes/shops/shop1.xml +- name: scenes/shops/zoora + xml_path: assets/xml/scenes/shops/zoora.xml +- name: textures/backgrounds + xml_path: assets/xml/textures/backgrounds.xml +- name: textures/do_action_static + xml_path: assets/xml/textures/do_action_static.xml +- name: textures/icon_item_24_static + xml_path: assets/xml/textures/icon_item_24_static.xml +- name: textures/icon_item_dungeon_static + xml_path: assets/xml/textures/icon_item_dungeon_static.xml +- name: textures/icon_item_field_static + xml_path: assets/xml/textures/icon_item_field_static.xml +- name: textures/icon_item_gameover_static + xml_path: assets/xml/textures/icon_item_gameover_static.xml +- name: textures/icon_item_jpn_static + xml_path: assets/xml/textures/icon_item_jpn_static.xml +- name: textures/icon_item_nes_static + xml_path: assets/xml/textures/icon_item_nes_static.xml +- name: textures/icon_item_static + xml_path: assets/xml/textures/icon_item_static.xml +- name: textures/item_name_static + xml_path: assets/xml/textures/item_name_static.xml +- name: textures/kanji + xml_path: assets/xml/textures/kanji.xml +- name: textures/map_48x85_static + xml_path: assets/xml/textures/map_48x85_static.xml +- name: textures/map_grand_static + xml_path: assets/xml/textures/map_grand_static.xml +- name: textures/map_i_static + xml_path: assets/xml/textures/map_i_static.xml +- name: textures/map_name_static + xml_path: assets/xml/textures/map_name_static.xml +- name: textures/message_static + xml_path: assets/xml/textures/message_static.xml +- name: textures/message_texture_static + xml_path: assets/xml/textures/message_texture_static.xml +- name: textures/nes_font_static + xml_path: assets/xml/textures/nes_font_static.xml +- name: textures/nintendo_rogo_static + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml +- name: textures/parameter_static + xml_path: assets/xml/textures/parameter_static.xml +- name: textures/place_title_cards + xml_path: assets/xml/textures/place_title_cards.xml +- name: textures/skyboxes + xml_path: assets/xml/textures/skyboxes.xml +- name: textures/title_static + xml_path: assets/xml/textures/title_static.xml diff --git a/baseroms/ntsc-1.1/segments.csv b/baseroms/ntsc-1.1/segments.csv new file mode 100644 index 0000000000..78f80b081e --- /dev/null +++ b/baseroms/ntsc-1.1/segments.csv @@ -0,0 +1,1511 @@ +Name,VRAM start +makerom,80000000 +boot,80000460 +dmadata, +Audiobank, +Audioseq, +Audiotable, +kanji, +link_animetion, +icon_item_static, +icon_item_24_static, +icon_item_field_static, +icon_item_dungeon_static, +icon_item_gameover_static, +icon_item_jpn_static, +icon_item_nes_static, +item_name_static, +map_name_static, +do_action_static, +message_static, +jpn_message_data_static, +message_texture_static, +nes_font_static, +nes_message_data_static, +staff_message_data_static, +map_grand_static, +map_i_static, +map_48x85_static, +code,800110A0 +n64dd,801C7040 +ovl_title,80800000 +ovl_select,808009C0 +ovl_opening,80803720 +ovl_file_choose,80803880 +ovl_kaleido_scope,808137C0 +ovl_player_actor,808301C0 +ovl_map_mark_data,80856810 +ovl_En_Test,8085D370 +ovl_En_GirlA,80862C20 +ovl_En_Part,80865540 +ovl_En_Light,80866B50 +ovl_En_Door,80867940 +ovl_En_Box,80868780 +ovl_En_Poh,8086A2C0 +ovl_En_Okuta,8086E450 +ovl_En_Bom,80870A30 +ovl_En_Wallmas,80871900 +ovl_En_Dodongo,80873310 +ovl_En_Firefly,808760B0 +ovl_En_Horse,80878220 +ovl_En_Arrow,80884440 +ovl_En_Elf,80885B30 +ovl_En_Niw,8088A4F0 +ovl_En_Tite,8088D820 +ovl_En_Reeba,808905C0 +ovl_En_Peehat,80892030 +ovl_En_Holl,80895730 +ovl_En_Scene_Change,80896700 +ovl_En_Zf,80896830 +ovl_En_Hata,8089D330 +ovl_Boss_Dodongo,8089D8C0 +ovl_Boss_Goma,808A73A0 +ovl_En_Zl1,808AD320 +ovl_En_Viewer,808B1120 +ovl_En_Goma,808B3FF0 +ovl_Bg_Pushbox,808B6C80 +ovl_En_Bubble,808B6F80 +ovl_Door_Shutter,808B83A0 +ovl_En_Dodojr,808BA620 +ovl_En_Bdfire,808BC4C0 +ovl_En_Boom,808BD050 +ovl_En_Torch2,808BD910 +ovl_En_Bili,808C00B0 +ovl_En_Tp,808C2380 +ovl_En_St,808C41D0 +ovl_En_Bw,808C6E40 +ovl_En_Eiyer,808CA1A0 +ovl_En_River_Sound,808CBE00 +ovl_En_Horse_Normal,808CC790 +ovl_En_Ossan,808CEDB0 +ovl_Bg_Treemouth,808D5390 +ovl_Bg_Dodoago,808D69E0 +ovl_Bg_Hidan_Dalm,808D7790 +ovl_Bg_Hidan_Hrock,808D7FE0 +ovl_En_Horse_Ganon,808D8810 +ovl_Bg_Hidan_Rock,808D9590 +ovl_Bg_Hidan_Rsekizou,808DA680 +ovl_Bg_Hidan_Sekizou,808DB260 +ovl_Bg_Hidan_Sima,808DC6B0 +ovl_Bg_Hidan_Syoku,808DD5D0 +ovl_En_Xc,808DDA30 +ovl_Bg_Hidan_Curtain,808E41C0 +ovl_Bg_Spot00_Hanebasi,808E4C60 +ovl_En_Mb,808E5D70 +ovl_En_Bombf,808E9F00 +ovl_Bg_Hidan_Firewall,808EB370 +ovl_Bg_Dy_Yoseizo,808EBAD0 +ovl_En_Zl2,808EE8D0 +ovl_Bg_Hidan_Fslift,808F3000 +ovl_En_OE2,808F34D0 +ovl_Bg_Ydan_Hasi,808F35B0 +ovl_Bg_Ydan_Maruta,808F3D60 +ovl_Boss_Ganondrof,808F4440 +ovl_En_Am,808F91B0 +ovl_En_Dekubaba,808FB5B0 +ovl_En_M_Fire1,808FF050 +ovl_En_M_Thunder,808FF1F0 +ovl_Bg_Ddan_Jd,809007E0 +ovl_Bg_Breakwall,80900E30 +ovl_En_Jj,80901CA0 +ovl_En_Horse_Zelda,80903270 +ovl_Bg_Ddan_Kd,80903D60 +ovl_Door_Warp1,80904650 +ovl_Obj_Syokudai,80908900 +ovl_Item_B_Heart,80909540 +ovl_En_Dekunuts,80909930 +ovl_Bg_Menkuri_Kaiten,8090B130 +ovl_Bg_Menkuri_Eye,8090B2C0 +ovl_En_Vali,8090B760 +ovl_Bg_Mizu_Movebg,8090DE00 +ovl_Bg_Mizu_Water,8090EFA0 +ovl_Arms_Hook,8090FC70 +ovl_En_fHG,809109D0 +ovl_Bg_Mori_Hineri,80913300 +ovl_En_Bb,80913FD0 +ovl_Bg_Toki_Hikari,80917CA0 +ovl_En_Yukabyun,80918A40 +ovl_Bg_Toki_Swd,80919050 +ovl_En_Fhg_Fire,8091A6A0 +ovl_Bg_Mjin,8091CCC0 +ovl_Bg_Hidan_Kousi,8091D0A0 +ovl_Door_Toki,8091D620 +ovl_Bg_Hidan_Hamstep,8091D780 +ovl_En_Bird,8091E610 +ovl_En_Wood02,8091EAD0 +ovl_En_Lightbox,8091FCB0 +ovl_En_Pu_box,80920130 +ovl_En_Trap,80920470 +ovl_En_Arow_Trap,80921710 +ovl_En_Vase,80921860 +ovl_En_Ta,80921960 +ovl_En_Tk,80925320 +ovl_Bg_Mori_Bigst,80927150 +ovl_Bg_Mori_Elevator,80927A80 +ovl_Bg_Mori_Kaitenkabe,80928570 +ovl_Bg_Mori_Rakkatenjo,80928BD0 +ovl_En_Vm,80929540 +ovl_Demo_Effect,8092ADF0 +ovl_Demo_Kankyo,809308F0 +ovl_Bg_Hidan_Fwbig,809345F0 +ovl_En_Floormas,809352D0 +ovl_En_Heishi1,809386B0 +ovl_En_Rd,80939BC0 +ovl_En_Po_Sisters,8093C470 +ovl_Bg_Heavy_Block,80941160 +ovl_Bg_Po_Event,80942A50 +ovl_Obj_Mure,80944890 +ovl_En_Sw,809458A0 +ovl_Boss_Fd,80949090 +ovl_Object_Kankyo,809503C0 +ovl_En_Du,809535E0 +ovl_En_Fd,80955080 +ovl_En_Horse_Link_Child,80957D40 +ovl_Door_Ana,80959B40 +ovl_Bg_Spot02_Objects,8095A1B0 +ovl_Bg_Haka,8095B500 +ovl_Magic_Wind,8095BBC0 +ovl_Magic_Fire,8095D8C0 +ovl_En_Ru1,8095FB90 +ovl_Boss_Fd2,80967230 +ovl_En_Fd_Fire,8096AF60 +ovl_En_Dh,8096BC70 +ovl_En_Dha,8096D740 +ovl_En_Rl,8096E730 +ovl_En_Encount1,8096F610 +ovl_Demo_Du,80970170 +ovl_Demo_Im,80973950 +ovl_Demo_Tre_Lgt,809778C0 +ovl_En_Fw,80977FD0 +ovl_Bg_Vb_Sima,80979780 +ovl_En_Vb_Ball,80979E90 +ovl_Bg_Haka_Megane,8097B030 +ovl_Bg_Haka_MeganeBG,8097B430 +ovl_Bg_Haka_Ship,8097BAF0 +ovl_Bg_Haka_Sgami,8097C530 +ovl_En_Heishi2,8097D150 +ovl_En_Encount2,8097F350 +ovl_En_Fire_Rock,80980580 +ovl_En_Brob,80981690 +ovl_Mir_Ray,80982780 +ovl_Bg_Spot09_Obj,80984040 +ovl_Bg_Spot18_Obj,80984550 +ovl_Boss_Va,80984E20 +ovl_Bg_Haka_Tubo,8099C010 +ovl_Bg_Haka_Trap,8099CA30 +ovl_Bg_Haka_Huta,8099E000 +ovl_Bg_Haka_Zou,8099EAA0 +ovl_Bg_Spot17_Funen,8099FC90 +ovl_En_Syateki_Itm,8099FEE0 +ovl_En_Syateki_Man,809A0C80 +ovl_En_Tana,809A1A40 +ovl_En_Nb,809A1CE0 +ovl_Boss_Mo,809A62B0 +ovl_En_Sb,809B6360 +ovl_En_Bigokuta,809B77A0 +ovl_En_Karebaba,809BA2B0 +ovl_Bg_Bdan_Objects,809BBBA0 +ovl_Demo_Sa,809BCE70 +ovl_Demo_Go,809BF990 +ovl_En_In,809C06F0 +ovl_En_Tr,809C3450 +ovl_Bg_Spot16_Bombstone,809C4D50 +ovl_Bg_Hidan_Kowarerukabe,809C6290 +ovl_Bg_Bombwall,809C7160 +ovl_En_Ru2,809C7A20 +ovl_Obj_Dekujr,809CA7A0 +ovl_Bg_Mizu_Uzu,809CADE0 +ovl_Bg_Spot06_Objects,809CAFB0 +ovl_Bg_Ice_Objects,809CC3C0 +ovl_Bg_Haka_Water,809CD300 +ovl_En_Ma2,809CDAE0 +ovl_En_Bom_Chu,809CEB40 +ovl_En_Horse_Game_Check,809D01E0 +ovl_Boss_Tw,809D12B0 +ovl_En_Rr,809E6DB0 +ovl_En_Ba,809E92E0 +ovl_En_Bx,809EB1B0 +ovl_En_Anubice,809EBCA0 +ovl_En_Anubice_Fire,809ECF50 +ovl_Bg_Mori_Hashigo,809EDD10 +ovl_Bg_Mori_Hashira4,809EE5D0 +ovl_Bg_Mori_Idomizu,809EEB60 +ovl_Bg_Spot16_Doughnut,809EF1A0 +ovl_Bg_Bdan_Switch,809EF750 +ovl_En_Ma1,809F0B80 +ovl_Boss_Ganon,809F1E60 +ovl_Boss_Sst,80A17C50 +ovl_En_Ny,80A241B0 +ovl_En_Fr,80A25AE0 +ovl_Item_Shield,80A28570 +ovl_Bg_Ice_Shelter,80A28F80 +ovl_En_Ice_Hono,80A2A1B0 +ovl_Item_Ocarina,80A2B3A0 +ovl_Magic_Dark,80A2BB70 +ovl_Demo_6K,80A2D3C0 +ovl_En_Anubice_Tag,80A300D0 +ovl_Bg_Haka_Gate,80A303A0 +ovl_Bg_Spot15_Saku,80A31430 +ovl_Bg_Jya_Goroiwa,80A31770 +ovl_Bg_Jya_Zurerukabe,80A31EF0 +ovl_Bg_Jya_Cobra,80A325A0 +ovl_Bg_Jya_Kanaami,80A342C0 +ovl_Fishing,80A34670 +ovl_Obj_Oshihiki,80A4F120 +ovl_Bg_Gate_Shutter,80A50BD0 +ovl_Eff_Dust,80A51050 +ovl_Bg_Spot01_Fusya,80A52430 +ovl_Bg_Spot01_Idohashira,80A526D0 +ovl_Bg_Spot01_Idomizu,80A532D0 +ovl_Bg_Po_Syokudai,80A535E0 +ovl_Bg_Ganon_Otyuka,80A53F30 +ovl_Bg_Spot15_Rrbox,80A56570 +ovl_Bg_Umajump,80A57350 +ovl_En_Insect,80A574E0 +ovl_En_Butte,80A59A00 +ovl_En_Fish,80A5AFD0 +ovl_Bg_Spot08_Iceblock,80A5D0E0 +ovl_Item_Etcetera,80A5E120 +ovl_Arrow_Fire,80A5E9F0 +ovl_Arrow_Ice,80A608B0 +ovl_Arrow_Light,80A62790 +ovl_Obj_Kibako,80A64680 +ovl_Obj_Tsubo,80A65380 +ovl_En_Wonder_Item,80A66370 +ovl_En_Ik,80A670A0 +ovl_Demo_Ik,80A6B6E0 +ovl_En_Skj,80A6CBF0 +ovl_En_Skjneedle,80A70530 +ovl_En_G_Switch,80A70840 +ovl_Demo_Ext,80A72070 +ovl_Demo_Shd,80A729B0 +ovl_En_Dns,80A74DC0 +ovl_Elf_Msg,80A76150 +ovl_En_Honotrap,80A76740 +ovl_En_Tubo_Trap,80A77C90 +ovl_Obj_Ice_Poly,80A78930 +ovl_Bg_Spot03_Taki,80A792E0 +ovl_Bg_Spot07_Taki,80A79BD0 +ovl_En_Fz,80A7A190 +ovl_En_Po_Relay,80A7C1A0 +ovl_Bg_Relay_Objects,80A7D8B0 +ovl_En_Diving_Game,80A7E060 +ovl_En_Kusa,80A7FA10 +ovl_Obj_Bean,80A80EF0 +ovl_Obj_Bombiwa,80A83680 +ovl_Obj_Switch,80A83BF0 +ovl_Obj_Elevator,80A859B0 +ovl_Obj_Lift,80A85D70 +ovl_Obj_Hsblock,80A86790 +ovl_En_Okarina_Tag,80A86D60 +ovl_En_Yabusame_Mark,80A88260 +ovl_En_Goroiwa,80A88930 +ovl_En_Ex_Ruppy,80A8ACF0 +ovl_En_Toryo,80A8BDB0 +ovl_En_Daiku,80A8CA40 +ovl_En_Nwc,80A8E180 +ovl_En_Blkobj,80A8EBC0 +ovl_Item_Inbox,80A8F120 +ovl_En_Ge1,80A8F280 +ovl_Obj_Blockstop,80A912B0 +ovl_En_Sda,80A91450 +ovl_En_Clear_Tag,80A92B50 +ovl_En_Niw_Lady,80A9E0F0 +ovl_En_Gm,80A9F9F0 +ovl_En_Ms,80AA0720 +ovl_En_Hs,80AA0E10 +ovl_Bg_Ingate,80AA19B0 +ovl_En_Kanban,80AA1D40 +ovl_En_Heishi3,80AA4E90 +ovl_En_Syateki_Niw,80AA5860 +ovl_En_Attack_Niw,80AA78F0 +ovl_Bg_Spot01_Idosoko,80AA8B50 +ovl_En_Sa,80AA8D60 +ovl_En_Wonder_Talk,80AAAFD0 +ovl_Bg_Gjyo_Bridge,80AAB660 +ovl_En_Ds,80AABB60 +ovl_En_Mk,80AAC780 +ovl_En_Bom_Bowl_Man,80AAD610 +ovl_En_Bom_Bowl_Pit,80AAEB50 +ovl_En_Owl,80AAF4C0 +ovl_En_Ishi,80AB3060 +ovl_Obj_Hana,80ABC1B0 +ovl_Obj_Lightswitch,80ABC4C0 +ovl_Obj_Mure2,80ABD8F0 +ovl_En_Go,80ABE310 +ovl_En_Fu,80AC2950 +ovl_En_Changer,80AC36A0 +ovl_Bg_Jya_Megami,80AC4080 +ovl_Bg_Jya_Lift,80AC5260 +ovl_Bg_Jya_Bigmirror,80AC57B0 +ovl_Bg_Jya_Bombchuiwa,80AC5FF0 +ovl_Bg_Jya_Amishutter,80AC6B20 +ovl_Bg_Jya_Bombiwa,80AC6EB0 +ovl_Bg_Spot18_Basket,80AC7470 +ovl_En_Ganon_Organ,80AC8460 +ovl_En_Siofuki,80ACF460 +ovl_En_Stream,80AD0210 +ovl_En_Mm,80AD07A0 +ovl_En_Ko,80AD1DC0 +ovl_En_Kz,80AD5F00 +ovl_En_Weather_Tag,80AD7410 +ovl_Bg_Sst_Floor,80AD8300 +ovl_En_Ani,80AD8860 +ovl_En_Ex_Item,80AD95D0 +ovl_Bg_Jya_Ironobj,80ADA740 +ovl_En_Js,80ADB4F0 +ovl_En_Jsjutan,80ADBEC0 +ovl_En_Cs,80AE17E0 +ovl_En_Md,80AE2A10 +ovl_En_Hy,80AE5080 +ovl_En_Ganon_Mant,80AE89C0 +ovl_En_Okarina_Effect,80AECBE0 +ovl_En_Mag,80AECF90 +ovl_Door_Gerudo,80AF1EA0 +ovl_Elf_Msg2,80AF2490 +ovl_Demo_Gt,80AF2900 +ovl_En_Po_Field,80AF7F00 +ovl_Efc_Erupc,80AFB970 +ovl_Bg_Zg,80AFC450 +ovl_En_Heishi4,80AFC8C0 +ovl_En_Zl3,80AFD7C0 +ovl_Boss_Ganon2,80B05610 +ovl_En_Kakasi,80B18420 +ovl_En_Takara_Man,80B19160 +ovl_Obj_Makeoshihiki,80B19A20 +ovl_Oceff_Spot,80B19EB0 +ovl_End_Title,80B1ADE0 +ovl_En_Torch,80B1EF10 +ovl_Demo_Ec,80B1F000 +ovl_Shot_Sun,80B22860 +ovl_En_Dy_Extra,80B22F20 +ovl_En_Wonder_Talk2,80B234A0 +ovl_En_Ge2,80B23B40 +ovl_Obj_Roomtimer,80B254E0 +ovl_En_Ssh,80B25730 +ovl_En_Sth,80B27D20 +ovl_Oceff_Wipe,80B2BDD0 +ovl_Effect_Ss_Dust,80B2CB20 +ovl_Effect_Ss_KiraKira,80B2D350 +ovl_Effect_Ss_Bomb,80B2D9C0 +ovl_Effect_Ss_Bomb2,80B2DDE0 +ovl_Effect_Ss_Blast,80B2E710 +ovl_Effect_Ss_G_Spk,80B2EAA0 +ovl_Effect_Ss_D_Fire,80B2F050 +ovl_Effect_Ss_Bubble,80B2F540 +ovl_Effect_Ss_G_Ripple,80B2F9C0 +ovl_Effect_Ss_G_Splash,80B2FF20 +ovl_Effect_Ss_G_Magma,80B303D0 +ovl_Effect_Ss_G_Fire,80B30630 +ovl_Effect_Ss_Lightning,80B308C0 +ovl_Effect_Ss_Dt_Bubble,80B30F90 +ovl_Effect_Ss_Hahen,80B31520 +ovl_Effect_Ss_Stick,80B31B60 +ovl_Effect_Ss_Sibuki,80B31F00 +ovl_Effect_Ss_Sibuki2,80B325D0 +ovl_Effect_Ss_G_Magma2,80B32900 +ovl_Effect_Ss_Stone1,80B32E10 +ovl_Effect_Ss_HitMark,80B331A0 +ovl_Effect_Ss_Fhg_Flash,80B336F0 +ovl_Effect_Ss_K_Fire,80B34670 +ovl_Effect_Ss_Solder_Srch_Ball,80B34AA0 +ovl_Effect_Ss_Kakera,80B34C50 +ovl_Effect_Ss_Ice_Piece,80B35CE0 +ovl_Effect_Ss_En_Ice,80B36120 +ovl_Effect_Ss_Fire_Tail,80B369E0 +ovl_Effect_Ss_En_Fire,80B370E0 +ovl_Effect_Ss_Extra,80B37820 +ovl_Effect_Ss_Fcircle,80B37BE0 +ovl_Effect_Ss_Dead_Db,80B38090 +ovl_Effect_Ss_Dead_Dd,80B38570 +ovl_Effect_Ss_Dead_Ds,80B38B00 +ovl_Effect_Ss_Dead_Sound,80B38F80 +ovl_Oceff_Storm,80B390C0 +ovl_En_Weiyer,80B3AC60 +ovl_Bg_Spot05_Soko,80B3C660 +ovl_Bg_Jya_1flift,80B3C980 +ovl_Bg_Jya_Haheniron,80B3D010 +ovl_Bg_Spot12_Gate,80B3D800 +ovl_Bg_Spot12_Saku,80B3DC10 +ovl_En_Hintnuts,80B3E0D0 +ovl_En_Nutsball,80B3FB00 +ovl_Bg_Spot00_Break,80B40120 +ovl_En_Shopnuts,80B402C0 +ovl_En_It,80B411D0 +ovl_En_GeldB,80B41360 +ovl_Oceff_Wipe2,80B46710 +ovl_Oceff_Wipe3,80B47E80 +ovl_En_Niw_Girl,80B495D0 +ovl_En_Dog,80B4A0A0 +ovl_En_Si,80B4B250 +ovl_Bg_Spot01_Objects2,80B4B750 +ovl_Obj_Comb,80B4BC10 +ovl_Bg_Spot11_Bakudankabe,80B4C470 +ovl_Obj_Kibako2,80B4CAB0 +ovl_En_Dnt_Demo,80B4D170 +ovl_En_Dnt_Jiji,80B4DE90 +ovl_En_Dnt_Nomal,80B4F3A0 +ovl_En_Guest,80B521A0 +ovl_Bg_Bom_Guard,80B52B40 +ovl_En_Hs2,80B52D60 +ovl_Demo_Kekkai,80B53340 +ovl_Bg_Spot08_Bakudankabe,80B54620 +ovl_Bg_Spot17_Bakudankabe,80B54CC0 +ovl_Obj_Mure3,80B553A0 +ovl_En_Tg,80B55B70 +ovl_En_Mu,80B56240 +ovl_En_Go2,80B56B60 +ovl_En_Wf,80B5CB80 +ovl_En_Skb,80B60E90 +ovl_Demo_Gj,80B62780 +ovl_Demo_Geff,80B66430 +ovl_Bg_Gnd_Firemeiro,80B66C50 +ovl_Bg_Gnd_Darkmeiro,80B67190 +ovl_Bg_Gnd_Soulmeiro,80B67950 +ovl_Bg_Gnd_Nisekabe,80B681B0 +ovl_Bg_Gnd_Iceblock,80B68320 +ovl_Bg_Ydan_Sp,80B69420 +ovl_En_Gb,80B6AB90 +ovl_En_Gs,80B6C2C0 +ovl_Bg_Mizu_Bwall,80B6E160 +ovl_Bg_Mizu_Shutter,80B6F630 +ovl_En_Daiku_Kakariko,80B6FE30 +ovl_Bg_Bowl_Wall,80B711F0 +ovl_En_Wall_Tubo,80B71B70 +ovl_En_Po_Desert,80B72060 +ovl_En_Crow,80B72E20 +ovl_Door_Killer,80B744C0 +ovl_Bg_Spot11_Oasis,80B75A30 +ovl_Bg_Spot18_Futa,80B76160 +ovl_Bg_Spot18_Shutter,80B76300 +ovl_En_Ma3,80B76850 +ovl_En_Cow,80B777C0 +ovl_Bg_Ice_Turara,80B78C20 +ovl_Bg_Ice_Shutter,80B79450 +ovl_En_Kakasi2,80B798C0 +ovl_En_Kakasi3,80B79FE0 +ovl_Oceff_Wipe4,80B7B0C0 +ovl_En_Eg,80B7C0A0 +ovl_Bg_Menkuri_Nisekabe,80B7C250 +ovl_En_Zo,80B7C3A0 +ovl_Effect_Ss_Ice_Smoke,80B7E950 +ovl_Obj_Makekinsuta,80B7EE10 +ovl_En_Ge3,80B7EF60 +ovl_Obj_Timeblock,80B7FAB0 +ovl_Obj_Hamishi,80B806F0 +ovl_En_Zl4,80B80F40 +ovl_En_Mm2,80B85970 +ovl_Bg_Jya_Block,80B86730 +ovl_Obj_Warp2block,80B869A0 +gameplay_keep, +gameplay_field_keep, +gameplay_dangeon_keep, +gameplay_object_exchange_static, +object_link_boy, +object_link_child, +object_box, +object_human, +object_okuta, +object_poh, +object_wallmaster, +object_dy_obj, +object_firefly, +object_dodongo, +object_fire, +object_niw, +object_tite, +object_reeba, +object_peehat, +object_kingdodongo, +object_horse, +object_zf, +object_goma, +object_zl1, +object_gol, +object_bubble, +object_dodojr, +object_torch2, +object_bl, +object_tp, +object_oA1, +object_st, +object_bw, +object_ei, +object_horse_normal, +object_oB1, +object_o_anime, +object_spot04_objects, +object_ddan_objects, +object_hidan_objects, +object_horse_ganon, +object_oA2, +object_spot00_objects, +object_mb, +object_bombf, +object_sk2, +object_oE1, +object_oE_anime, +object_oE2, +object_ydan_objects, +object_gnd, +object_am, +object_dekubaba, +object_oA3, +object_oA4, +object_oA5, +object_oA6, +object_oA7, +object_jj, +object_oA8, +object_oA9, +object_oB2, +object_oB3, +object_oB4, +object_horse_zelda, +object_opening_demo1, +object_warp1, +object_b_heart, +object_dekunuts, +object_oE3, +object_oE4, +object_menkuri_objects, +object_oE5, +object_oE6, +object_oE7, +object_oE8, +object_oE9, +object_oE10, +object_oE11, +object_oE12, +object_vali, +object_oA10, +object_oA11, +object_mizu_objects, +object_fhg, +object_ossan, +object_mori_hineri1, +object_Bb, +object_toki_objects, +object_yukabyun, +object_zl2, +object_mjin, +object_mjin_flash, +object_mjin_dark, +object_mjin_flame, +object_mjin_ice, +object_mjin_soul, +object_mjin_wind, +object_mjin_oka, +object_haka_objects, +object_spot06_objects, +object_ice_objects, +object_relay_objects, +object_mori_hineri1a, +object_mori_hineri2, +object_mori_hineri2a, +object_mori_objects, +object_mori_tex, +object_spot08_obj, +object_warp2, +object_hata, +object_bird, +object_wood02, +object_lightbox, +object_pu_box, +object_trap, +object_vase, +object_im, +object_ta, +object_tk, +object_xc, +object_vm, +object_bv, +object_hakach_objects, +object_efc_crystal_light, +object_efc_fire_ball, +object_efc_flash, +object_efc_lgt_shower, +object_efc_star_field, +object_god_lgt, +object_light_ring, +object_triforce_spot, +object_medal, +object_bdan_objects, +object_sd, +object_rd, +object_po_sisters, +object_heavy_object, +object_gndd, +object_fd, +object_du, +object_fw, +object_horse_link_child, +object_spot02_objects, +object_haka, +object_ru1, +object_syokudai, +object_fd2, +object_dh, +object_rl, +object_efc_tw, +object_demo_tre_lgt, +object_gi_key, +object_mir_ray, +object_brob, +object_gi_jewel, +object_spot09_obj, +object_spot18_obj, +object_bdoor, +object_spot17_obj, +object_shop_dungen, +object_nb, +object_mo, +object_sb, +object_gi_melody, +object_gi_heart, +object_gi_compass, +object_gi_bosskey, +object_gi_medal, +object_gi_nuts, +object_sa, +object_gi_hearts, +object_gi_arrowcase, +object_gi_bombpouch, +object_in, +object_tr, +object_spot16_obj, +object_oE1s, +object_oE4s, +object_os_anime, +object_gi_bottle, +object_gi_stick, +object_gi_map, +object_oF1d_map, +object_ru2, +object_gi_shield_1, +object_dekujr, +object_gi_magicpot, +object_gi_bomb_1, +object_oF1s, +object_ma2, +object_gi_purse, +object_hni, +object_tw, +object_rr, +object_bxa, +object_anubice, +object_gi_gerudo, +object_gi_arrow, +object_gi_bomb_2, +object_gi_egg, +object_gi_scale, +object_gi_shield_2, +object_gi_hookshot, +object_gi_ocarina, +object_gi_milk, +object_ma1, +object_ganon, +object_sst, +object_ny, +object_fr, +object_gi_pachinko, +object_gi_boomerang, +object_gi_bow, +object_gi_glasses, +object_gi_liquid, +object_ani, +object_demo_6k, +object_gi_shield_3, +object_gi_letter, +object_spot15_obj, +object_jya_obj, +object_gi_clothes, +object_gi_bean, +object_gi_fish, +object_gi_saw, +object_gi_hammer, +object_gi_grass, +object_gi_longsword, +object_spot01_objects, +object_md, +object_km1, +object_kw1, +object_zo, +object_kz, +object_umajump, +object_masterkokiri, +object_masterkokirihead, +object_mastergolon, +object_masterzoora, +object_aob, +object_ik, +object_ahg, +object_cne, +object_gi_niwatori, +object_skj, +object_gi_bottle_letter, +object_bji, +object_bba, +object_gi_ocarina_0, +object_ds, +object_ane, +object_boj, +object_spot03_object, +object_spot07_object, +object_fz, +object_bob, +object_ge1, +object_yabusame_point, +object_gi_boots_2, +object_gi_seed, +object_gnd_magic, +object_d_elevator, +object_d_hsblock, +object_d_lift, +object_mamenoki, +object_goroiwa, +object_toryo, +object_daiku, +object_nwc, +object_blkobj, +object_gm, +object_ms, +object_hs, +object_ingate, +object_lightswitch, +object_kusa, +object_tsubo, +object_gi_gloves, +object_gi_coin, +object_kanban, +object_gjyo_objects, +object_owl, +object_mk, +object_fu, +object_gi_ki_tan_mask, +object_gi_redead_mask, +object_gi_skj_mask, +object_gi_rabit_mask, +object_gi_truth_mask, +object_ganon_objects, +object_siofuki, +object_stream, +object_mm, +object_fa, +object_os, +object_gi_eye_lotion, +object_gi_powder, +object_gi_mushroom, +object_gi_ticketstone, +object_gi_brokensword, +object_js, +object_cs, +object_gi_prescription, +object_gi_bracelet, +object_gi_soldout, +object_gi_frog, +object_mag, +object_door_gerudo, +object_gt, +object_efc_erupc, +object_zl2_anime1, +object_zl2_anime2, +object_gi_golonmask, +object_gi_zoramask, +object_gi_gerudomask, +object_ganon2, +object_ka, +object_ts, +object_zg, +object_gi_hoverboots, +object_gi_m_arrow, +object_ds2, +object_ec, +object_fish, +object_gi_sutaru, +object_gi_goddess, +object_ssh, +object_bigokuta, +object_bg, +object_spot05_objects, +object_spot12_obj, +object_bombiwa, +object_hintnuts, +object_rs, +object_spot00_break, +object_gla, +object_shopnuts, +object_geldb, +object_gr, +object_dog, +object_jya_iron, +object_jya_door, +object_spot01_objects2, +object_spot11_obj, +object_kibako2, +object_dns, +object_dnk, +object_gi_fire, +object_gi_insect, +object_gi_butterfly, +object_gi_ghost, +object_gi_soul, +object_bowl, +object_po_field, +object_demo_kekkai, +object_efc_doughnut, +object_gi_dekupouch, +object_ganon_anime1, +object_ganon_anime2, +object_ganon_anime3, +object_gi_rupy, +object_spot01_matoya, +object_spot01_matoyab, +object_po_composer, +object_mu, +object_wf, +object_skb, +object_gj, +object_geff, +object_haka_door, +object_gs, +object_ps, +object_bwall, +object_crow, +object_cow, +object_cob, +object_gi_sword_1, +object_door_killer, +object_ouke_haka, +object_timeblock, +object_zl4, +g_pn_01, +g_pn_02, +g_pn_03, +g_pn_04, +g_pn_05, +g_pn_06, +g_pn_07, +g_pn_08, +g_pn_09, +g_pn_10, +g_pn_11, +g_pn_12, +g_pn_13, +g_pn_14, +g_pn_15, +g_pn_16, +g_pn_17, +g_pn_18, +g_pn_19, +g_pn_20, +g_pn_21, +g_pn_22, +g_pn_23, +g_pn_24, +g_pn_25, +g_pn_26, +g_pn_27, +g_pn_28, +g_pn_29, +g_pn_30, +g_pn_31, +g_pn_32, +g_pn_33, +g_pn_34, +g_pn_35, +g_pn_36, +g_pn_37, +g_pn_38, +g_pn_39, +g_pn_40, +g_pn_41, +g_pn_42, +g_pn_43, +g_pn_44, +g_pn_45, +g_pn_46, +g_pn_47, +g_pn_48, +g_pn_49, +g_pn_50, +g_pn_51, +g_pn_52, +g_pn_53, +g_pn_54, +g_pn_55, +g_pn_56, +g_pn_57, +z_select_static, +nintendo_rogo_static, +title_static, +parameter_static, +vr_fine0_static, +vr_fine0_pal_static, +vr_fine1_static, +vr_fine1_pal_static, +vr_fine2_static, +vr_fine2_pal_static, +vr_fine3_static, +vr_fine3_pal_static, +vr_cloud0_static, +vr_cloud0_pal_static, +vr_cloud1_static, +vr_cloud1_pal_static, +vr_cloud2_static, +vr_cloud2_pal_static, +vr_cloud3_static, +vr_cloud3_pal_static, +vr_holy0_static, +vr_holy0_pal_static, +vr_holy1_static, +vr_holy1_pal_static, +vr_MDVR_static, +vr_MDVR_pal_static, +vr_MNVR_static, +vr_MNVR_pal_static, +vr_RUVR_static, +vr_RUVR_pal_static, +vr_LHVR_static, +vr_LHVR_pal_static, +vr_KHVR_static, +vr_KHVR_pal_static, +vr_K3VR_static, +vr_K3VR_pal_static, +vr_K4VR_static, +vr_K4VR_pal_static, +vr_K5VR_static, +vr_K5VR_pal_static, +vr_SP1a_static, +vr_SP1a_pal_static, +vr_MLVR_static, +vr_MLVR_pal_static, +vr_KKRVR_static, +vr_KKRVR_pal_static, +vr_KR3VR_static, +vr_KR3VR_pal_static, +vr_IPVR_static, +vr_IPVR_pal_static, +vr_KSVR_static, +vr_KSVR_pal_static, +vr_GLVR_static, +vr_GLVR_pal_static, +vr_ZRVR_static, +vr_ZRVR_pal_static, +vr_DGVR_static, +vr_DGVR_pal_static, +vr_ALVR_static, +vr_ALVR_pal_static, +vr_NSVR_static, +vr_NSVR_pal_static, +vr_LBVR_static, +vr_LBVR_pal_static, +vr_TTVR_static, +vr_TTVR_pal_static, +vr_FCVR_static, +vr_FCVR_pal_static, +elf_message_field, +elf_message_ydan, +ddan_scene, +ddan_room_0, +ddan_room_1, +ddan_room_2, +ddan_room_3, +ddan_room_4, +ddan_room_5, +ddan_room_6, +ddan_room_7, +ddan_room_8, +ddan_room_9, +ddan_room_10, +ddan_room_11, +ddan_room_12, +ddan_room_13, +ddan_room_14, +ddan_room_15, +ddan_room_16, +spot00_scene, +spot00_room_0, +spot01_scene, +spot01_room_0, +spot02_scene, +spot02_room_0, +spot02_room_1, +spot03_scene, +spot03_room_0, +spot03_room_1, +spot04_scene, +spot04_room_0, +spot04_room_1, +spot04_room_2, +spot05_scene, +spot05_room_0, +spot06_scene, +spot06_room_0, +spot07_scene, +spot07_room_0, +spot07_room_1, +spot08_scene, +spot08_room_0, +spot09_scene, +spot09_room_0, +spot10_scene, +spot10_room_0, +spot10_room_1, +spot10_room_2, +spot10_room_3, +spot10_room_4, +spot10_room_5, +spot10_room_6, +spot10_room_7, +spot10_room_8, +spot10_room_9, +spot11_scene, +spot11_room_0, +spot12_scene, +spot12_room_0, +spot12_room_1, +spot13_scene, +spot13_room_0, +spot13_room_1, +spot15_scene, +spot15_room_0, +spot16_scene, +spot16_room_0, +spot17_scene, +spot17_room_0, +spot17_room_1, +spot18_scene, +spot18_room_0, +spot18_room_1, +spot18_room_2, +spot18_room_3, +market_day_scene, +market_day_room_0, +market_night_scene, +market_night_room_0, +HIDAN_scene, +HIDAN_room_0, +HIDAN_room_1, +HIDAN_room_2, +HIDAN_room_3, +HIDAN_room_4, +HIDAN_room_5, +HIDAN_room_6, +HIDAN_room_7, +HIDAN_room_8, +HIDAN_room_9, +HIDAN_room_10, +HIDAN_room_11, +HIDAN_room_12, +HIDAN_room_13, +HIDAN_room_14, +HIDAN_room_15, +HIDAN_room_16, +HIDAN_room_17, +HIDAN_room_18, +HIDAN_room_19, +HIDAN_room_20, +HIDAN_room_21, +HIDAN_room_22, +HIDAN_room_23, +HIDAN_room_24, +HIDAN_room_25, +HIDAN_room_26, +Bmori1_scene, +Bmori1_room_0, +Bmori1_room_1, +Bmori1_room_2, +Bmori1_room_3, +Bmori1_room_4, +Bmori1_room_5, +Bmori1_room_6, +Bmori1_room_7, +Bmori1_room_8, +Bmori1_room_9, +Bmori1_room_10, +Bmori1_room_11, +Bmori1_room_12, +Bmori1_room_13, +Bmori1_room_14, +Bmori1_room_15, +Bmori1_room_16, +Bmori1_room_17, +Bmori1_room_18, +Bmori1_room_19, +Bmori1_room_20, +Bmori1_room_21, +Bmori1_room_22, +ydan_scene, +ydan_room_0, +ydan_room_1, +ydan_room_2, +ydan_room_3, +ydan_room_4, +ydan_room_5, +ydan_room_6, +ydan_room_7, +ydan_room_8, +ydan_room_9, +ydan_room_10, +ydan_room_11, +kenjyanoma_scene, +kenjyanoma_room_0, +tokinoma_scene, +tokinoma_room_0, +tokinoma_room_1, +link_home_scene, +link_home_room_0, +kokiri_shop_scene, +kokiri_shop_room_0, +MIZUsin_scene, +MIZUsin_room_0, +MIZUsin_room_1, +MIZUsin_room_2, +MIZUsin_room_3, +MIZUsin_room_4, +MIZUsin_room_5, +MIZUsin_room_6, +MIZUsin_room_7, +MIZUsin_room_8, +MIZUsin_room_9, +MIZUsin_room_10, +MIZUsin_room_11, +MIZUsin_room_12, +MIZUsin_room_13, +MIZUsin_room_14, +MIZUsin_room_15, +MIZUsin_room_16, +MIZUsin_room_17, +MIZUsin_room_18, +MIZUsin_room_19, +MIZUsin_room_20, +MIZUsin_room_21, +MIZUsin_room_22, +kokiri_home_scene, +kokiri_home_room_0, +kakusiana_scene, +kakusiana_room_0, +kakusiana_room_1, +kakusiana_room_2, +kakusiana_room_3, +kakusiana_room_4, +kakusiana_room_5, +kakusiana_room_6, +kakusiana_room_7, +kakusiana_room_8, +kakusiana_room_9, +kakusiana_room_10, +kakusiana_room_11, +kakusiana_room_12, +kakusiana_room_13, +entra_scene, +entra_room_0, +bdan_scene, +bdan_room_0, +bdan_room_1, +bdan_room_2, +bdan_room_3, +bdan_room_4, +bdan_room_5, +bdan_room_6, +bdan_room_7, +bdan_room_8, +bdan_room_9, +bdan_room_10, +bdan_room_11, +bdan_room_12, +bdan_room_13, +bdan_room_14, +bdan_room_15, +HAKAdan_scene, +HAKAdan_room_0, +HAKAdan_room_1, +HAKAdan_room_2, +HAKAdan_room_3, +HAKAdan_room_4, +HAKAdan_room_5, +HAKAdan_room_6, +HAKAdan_room_7, +HAKAdan_room_8, +HAKAdan_room_9, +HAKAdan_room_10, +HAKAdan_room_11, +HAKAdan_room_12, +HAKAdan_room_13, +HAKAdan_room_14, +HAKAdan_room_15, +HAKAdan_room_16, +HAKAdan_room_17, +HAKAdan_room_18, +HAKAdan_room_19, +HAKAdan_room_20, +HAKAdan_room_21, +HAKAdan_room_22, +moribossroom_scene, +moribossroom_room_0, +moribossroom_room_1, +syatekijyou_scene, +syatekijyou_room_0, +men_scene, +men_room_0, +men_room_1, +men_room_2, +men_room_3, +men_room_4, +men_room_5, +men_room_6, +men_room_7, +men_room_8, +men_room_9, +men_room_10, +shop1_scene, +shop1_room_0, +hairal_niwa_scene, +hairal_niwa_room_0, +ganon_tou_scene, +ganon_tou_room_0, +market_alley_scene, +market_alley_room_0, +spot20_scene, +spot20_room_0, +market_ruins_scene, +market_ruins_room_0, +entra_n_scene, +entra_n_room_0, +enrui_scene, +enrui_room_0, +market_alley_n_scene, +market_alley_n_room_0, +hiral_demo_scene, +hiral_demo_room_0, +kokiri_home3_scene, +kokiri_home3_room_0, +jyasinzou_scene, +jyasinzou_room_0, +jyasinzou_room_1, +jyasinzou_room_2, +jyasinzou_room_3, +jyasinzou_room_4, +jyasinzou_room_5, +jyasinzou_room_6, +jyasinzou_room_7, +jyasinzou_room_8, +jyasinzou_room_9, +jyasinzou_room_10, +jyasinzou_room_11, +jyasinzou_room_12, +jyasinzou_room_13, +jyasinzou_room_14, +jyasinzou_room_15, +jyasinzou_room_16, +jyasinzou_room_17, +jyasinzou_room_18, +jyasinzou_room_19, +jyasinzou_room_20, +jyasinzou_room_21, +jyasinzou_room_22, +jyasinzou_room_23, +jyasinzou_room_24, +jyasinzou_room_25, +jyasinzou_room_26, +jyasinzou_room_27, +jyasinzou_room_28, +ice_doukutu_scene, +ice_doukutu_room_0, +ice_doukutu_room_1, +ice_doukutu_room_2, +ice_doukutu_room_3, +ice_doukutu_room_4, +ice_doukutu_room_5, +ice_doukutu_room_6, +ice_doukutu_room_7, +ice_doukutu_room_8, +ice_doukutu_room_9, +ice_doukutu_room_10, +ice_doukutu_room_11, +malon_stable_scene, +malon_stable_room_0, +kakariko_scene, +kakariko_room_0, +bdan_boss_scene, +bdan_boss_room_0, +bdan_boss_room_1, +FIRE_bs_scene, +FIRE_bs_room_0, +FIRE_bs_room_1, +hut_scene, +hut_room_0, +daiyousei_izumi_scene, +daiyousei_izumi_room_0, +hakaana_scene, +hakaana_room_0, +yousei_izumi_tate_scene, +yousei_izumi_tate_room_0, +yousei_izumi_yoko_scene, +yousei_izumi_yoko_room_0, +golon_scene, +golon_room_0, +zoora_scene, +zoora_room_0, +drag_scene, +drag_room_0, +alley_shop_scene, +alley_shop_room_0, +night_shop_scene, +night_shop_room_0, +impa_scene, +impa_room_0, +labo_scene, +labo_room_0, +tent_scene, +tent_room_0, +nakaniwa_scene, +nakaniwa_room_0, +ddan_boss_scene, +ddan_boss_room_0, +ddan_boss_room_1, +ydan_boss_scene, +ydan_boss_room_0, +ydan_boss_room_1, +HAKAdan_bs_scene, +HAKAdan_bs_room_0, +HAKAdan_bs_room_1, +MIZUsin_bs_scene, +MIZUsin_bs_room_0, +MIZUsin_bs_room_1, +ganon_scene, +ganon_room_0, +ganon_room_1, +ganon_room_2, +ganon_room_3, +ganon_room_4, +ganon_room_5, +ganon_room_6, +ganon_room_7, +ganon_room_8, +ganon_room_9, +ganon_boss_scene, +ganon_boss_room_0, +jyasinboss_scene, +jyasinboss_room_0, +jyasinboss_room_1, +jyasinboss_room_2, +jyasinboss_room_3, +kokiri_home4_scene, +kokiri_home4_room_0, +kokiri_home5_scene, +kokiri_home5_room_0, +ganon_final_scene, +ganon_final_room_0, +kakariko3_scene, +kakariko3_room_0, +hakasitarelay_scene, +hakasitarelay_room_0, +hakasitarelay_room_1, +hakasitarelay_room_2, +hakasitarelay_room_3, +hakasitarelay_room_4, +hakasitarelay_room_5, +hakasitarelay_room_6, +shrine_scene, +shrine_room_0, +turibori_scene, +turibori_room_0, +shrine_n_scene, +shrine_n_room_0, +shrine_r_scene, +shrine_r_room_0, +ganontika_scene, +ganontika_room_0, +ganontika_room_1, +ganontika_room_2, +ganontika_room_3, +ganontika_room_4, +ganontika_room_5, +ganontika_room_6, +ganontika_room_7, +ganontika_room_8, +ganontika_room_9, +ganontika_room_10, +ganontika_room_11, +ganontika_room_12, +ganontika_room_13, +ganontika_room_14, +ganontika_room_15, +ganontika_room_16, +ganontika_room_17, +ganontika_room_18, +ganontika_room_19, +hakaana2_scene, +hakaana2_room_0, +gerudoway_scene, +gerudoway_room_0, +gerudoway_room_1, +gerudoway_room_2, +gerudoway_room_3, +gerudoway_room_4, +gerudoway_room_5, +HAKAdanCH_scene, +HAKAdanCH_room_0, +HAKAdanCH_room_1, +HAKAdanCH_room_2, +HAKAdanCH_room_3, +HAKAdanCH_room_4, +HAKAdanCH_room_5, +HAKAdanCH_room_6, +hairal_niwa_n_scene, +hairal_niwa_n_room_0, +bowling_scene, +bowling_room_0, +hakaana_ouke_scene, +hakaana_ouke_room_0, +hakaana_ouke_room_1, +hakaana_ouke_room_2, +hylia_labo_scene, +hylia_labo_room_0, +souko_scene, +souko_room_0, +souko_room_1, +souko_room_2, +miharigoya_scene, +miharigoya_room_0, +mahouya_scene, +mahouya_room_0, +takaraya_scene, +takaraya_room_0, +takaraya_room_1, +takaraya_room_2, +takaraya_room_3, +takaraya_room_4, +takaraya_room_5, +takaraya_room_6, +ganon_sonogo_scene, +ganon_sonogo_room_0, +ganon_sonogo_room_1, +ganon_sonogo_room_2, +ganon_sonogo_room_3, +ganon_sonogo_room_4, +ganon_demo_scene, +ganon_demo_room_0, +face_shop_scene, +face_shop_room_0, +kinsuta_scene, +kinsuta_room_0, +ganontikasonogo_scene, +ganontikasonogo_room_0, +ganontikasonogo_room_1, +bump_texture_static, +anime_model_1_static, +anime_model_2_static, +anime_model_3_static, +anime_model_4_static, +anime_model_5_static, +anime_model_6_static, +anime_texture_1_static, +anime_texture_2_static, +anime_texture_3_static, +anime_texture_4_static, +anime_texture_5_static, +anime_texture_6_static, +softsprite_matrix_static, diff --git a/baseroms/ntsc-1.2/config.yml b/baseroms/ntsc-1.2/config.yml index 9dc77744df..f9293586f9 100644 --- a/baseroms/ntsc-1.2/config.yml +++ b/baseroms/ntsc-1.2/config.yml @@ -978,7 +978,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1006,7 +1006,7 @@ assets: - name: scenes/dungeons/HIDAN xml_path: assets/xml/scenes/dungeons/HIDAN.xml - name: scenes/dungeons/ice_doukutu - xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml + xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml - name: scenes/dungeons/jyasinboss xml_path: assets/xml/scenes/dungeons/jyasinboss.xml - name: scenes/dungeons/jyasinzou @@ -1148,7 +1148,7 @@ assets: - name: scenes/overworld/spot15 xml_path: assets/xml/scenes/overworld/spot15.xml - name: scenes/overworld/spot16 - xml_path: assets/xml/scenes/overworld/spot16.xml + xml_path: assets/xml/scenes/overworld/spot16_v2.xml - name: scenes/overworld/spot17 xml_path: assets/xml/scenes/overworld/spot17.xml - name: scenes/overworld/spot18 @@ -1208,7 +1208,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/pal-1.0/config.yml b/baseroms/pal-1.0/config.yml index a6f882ab10..1a80071bbb 100644 --- a/baseroms/pal-1.0/config.yml +++ b/baseroms/pal-1.0/config.yml @@ -984,7 +984,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1214,7 +1214,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/baseroms/pal-1.1/config.yml b/baseroms/pal-1.1/config.yml index 7dc75e5306..57f037b350 100644 --- a/baseroms/pal-1.1/config.yml +++ b/baseroms/pal-1.1/config.yml @@ -984,7 +984,7 @@ assets: - name: scenes/dungeons/ddan xml_path: assets/xml/scenes/dungeons/ddan.xml - name: scenes/dungeons/ddan_boss - xml_path: assets/xml/scenes/dungeons/ddan_boss.xml + xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml - name: scenes/dungeons/FIRE_bs xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml - name: scenes/dungeons/ganon @@ -1214,7 +1214,7 @@ assets: - name: textures/nes_font_static xml_path: assets/xml/textures/nes_font_static.xml - name: textures/nintendo_rogo_static - xml_path: assets/xml/textures/nintendo_rogo_static.xml + xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml - name: textures/parameter_static xml_path: assets/xml/textures/parameter_static.xml - name: textures/place_title_cards diff --git a/tools/ZAPDConfigs/ntsc-1.0/Config.xml b/tools/ZAPDConfigs/ntsc-1.0/Config.xml new file mode 100644 index 0000000000..b2f4e3e4d3 --- /dev/null +++ b/tools/ZAPDConfigs/ntsc-1.0/Config.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt b/tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt new file mode 100644 index 0000000000..f19720a6c6 --- /dev/null +++ b/tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt @@ -0,0 +1,2 @@ +800FEDB0 gMtxClear +80AE0AE0 sShadowTex diff --git a/tools/ZAPDConfigs/ntsc-1.1/Config.xml b/tools/ZAPDConfigs/ntsc-1.1/Config.xml new file mode 100644 index 0000000000..b2f4e3e4d3 --- /dev/null +++ b/tools/ZAPDConfigs/ntsc-1.1/Config.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt b/tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt new file mode 100644 index 0000000000..8bf78d7c3c --- /dev/null +++ b/tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt @@ -0,0 +1,2 @@ +800FEF70 gMtxClear +80AE0C80 sShadowTex From 60f9607569249813d508ec70ef501db6d46682ea Mon Sep 17 00:00:00 2001 From: cadmic Date: Wed, 9 Oct 2024 06:48:53 -0700 Subject: [PATCH 05/12] [ntsc-1.0/1.1] Match "system" files (#2254) --- include/z64.h | 10 ++++++---- src/boot/cic6105.c | 4 ++++ src/boot/is_debug.c | 5 +++++ src/code/irqmgr.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/code/main.c | 13 ++++++++++++- src/code/z_vimode.c | 40 +++++++++++++++++++++++++++++++++++++++- 6 files changed, 108 insertions(+), 6 deletions(-) diff --git a/include/z64.h b/include/z64.h index d52d459de3..5779205b38 100644 --- a/include/z64.h +++ b/include/z64.h @@ -389,10 +389,12 @@ ALIGNED(4) typedef struct PreNmiBuff { } PreNmiBuff; // size = 0x18 (actually osAppNMIBuffer is 0x40 bytes large but the rest is unused) typedef enum ViModeEditState { - /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, - /* 1 */ VI_MODE_EDIT_STATE_ACTIVE, - /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments - /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode + /* -2 */ VI_MODE_EDIT_STATE_NEGATIVE_2 = -2, + /* -1 */ VI_MODE_EDIT_STATE_NEGATIVE_1, + /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, + /* 1 */ VI_MODE_EDIT_STATE_ACTIVE, + /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments + /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode } ViModeEditState; typedef struct ViMode { diff --git a/src/boot/cic6105.c b/src/boot/cic6105.c index e0ddcb2c49..85ae47b0c7 100644 --- a/src/boot/cic6105.c +++ b/src/boot/cic6105.c @@ -39,7 +39,11 @@ void CIC6105_FaultClient(void) { Fault_Printf(" [Creator:%s]", gBuildCreator); Fault_SetCursor(56, 192); Fault_Printf("[Date:%s]", gBuildDate); +#if OOT_VERSION < PAL_1_0 + Fault_SetCursor(128, 24); +#else Fault_SetCursor(96, 32); +#endif Fault_Printf("I LOVE YOU %08x", func_80001714()); } diff --git a/src/boot/is_debug.c b/src/boot/is_debug.c index dc2cedc4b8..44d22fa874 100644 --- a/src/boot/is_debug.c +++ b/src/boot/is_debug.c @@ -48,6 +48,11 @@ void rmonPrintf(const char* fmt, ...) { va_end(args); } +#if OOT_VERSION < PAL_1_0 +void func_800015F4(void) { +} +#endif + #if OOT_DEBUG void* is_proutSyncPrintf(void* arg, const char* str, size_t count) { u32 data; diff --git a/src/code/irqmgr.c b/src/code/irqmgr.c index d623ddad88..3a1e3cdf55 100644 --- a/src/code/irqmgr.c +++ b/src/code/irqmgr.c @@ -34,6 +34,7 @@ */ #include "global.h" #include "terminal.h" +#include "versions.h" vu32 gIrqMgrResetStatus = IRQ_RESET_STATUS_IDLE; volatile OSTime sIrqMgrResetTime = 0; @@ -43,9 +44,13 @@ u32 sIrqMgrRetraceCount = 0; // Internal messages #define IRQ_RETRACE_MSG 666 #define IRQ_PRENMI_MSG 669 +#if OOT_VERSION < PAL_1_0 +#define IRQ_PRENMI500_MSG 670 +#else #define IRQ_PRENMI450_MSG 671 #define IRQ_PRENMI480_MSG 672 #define IRQ_PRENMI500_MSG 673 +#endif /** * Registers a client and an associated message queue with the IRQ manager. When an @@ -163,8 +168,13 @@ void IrqMgr_HandlePreNMI(IrqMgr* irqMgr) { irqMgr->resetStatus = IRQ_RESET_STATUS_PRENMI; sIrqMgrResetTime = irqMgr->resetTime = osGetTime(); +#if OOT_VERSION < PAL_1_0 + // Schedule a PRENMI500 message to be handled in 500ms + osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(500000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI500_MSG); +#else // Schedule a PRENMI450 message to be handled in 450ms osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(450000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI450_MSG); +#endif IrqMgr_JamMesgToClients(irqMgr, (OSMesg)&irqMgr->prenmiMsg); } @@ -183,6 +193,27 @@ void IrqMgr_CheckStacks(void) { } } +#if OOT_VERSION < PAL_1_0 + +void IrqMgr_HandlePreNMI500(IrqMgr* irqMgr) { + u64 nmi = IRQ_RESET_STATUS_NMI; // required to match + u32 result; + + gIrqMgrResetStatus = nmi; + irqMgr->resetStatus = IRQ_RESET_STATUS_NMI; + + IrqMgr_SendMesgToClients(irqMgr, (OSMesg)&irqMgr->nmiMsg); + + result = osAfterPreNMI(); + if (result != 0) { + // Schedule another PRENMI500 message to be handled in 1ms + osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(1000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI500_MSG); + } + IrqMgr_CheckStacks(); +} + +#else + void IrqMgr_HandlePreNMI450(IrqMgr* irqMgr) { u64 nmi = IRQ_RESET_STATUS_NMI; // required to match @@ -215,6 +246,8 @@ void IrqMgr_HandlePreNMI500(IrqMgr* irqMgr) { IrqMgr_CheckStacks(); } +#endif + /** * Runs on each vertical retrace * @@ -244,6 +277,11 @@ void IrqMgr_ThreadEntry(void* arg) { while (!exit) { osRecvMesg(&irqMgr->queue, (OSMesg*)&msg, OS_MESG_BLOCK); switch (msg) { +#if OOT_VERSION < PAL_1_0 + default: + break; +#endif + case IRQ_RETRACE_MSG: IrqMgr_HandleRetrace(irqMgr); break; @@ -254,6 +292,7 @@ void IrqMgr_ThreadEntry(void* arg) { IrqMgr_HandlePreNMI(irqMgr); break; +#if OOT_VERSION >= PAL_1_0 case IRQ_PRENMI450_MSG: PRINTF("PRENMI450_MSG\n"); PRINTF(T("スケジューラ:PRENMI450メッセージを受信\n", "Scheduler: Receives PRENMI450 message\n")); @@ -265,6 +304,7 @@ void IrqMgr_ThreadEntry(void* arg) { PRINTF(T("スケジューラ:PRENMI480メッセージを受信\n", "Scheduler: Receives PRENMI480 message\n")); IrqMgr_HandlePreNMI480(irqMgr); break; +#endif case IRQ_PRENMI500_MSG: PRINTF("PRENMI500_MSG\n"); @@ -273,11 +313,13 @@ void IrqMgr_ThreadEntry(void* arg) { exit = true; break; +#if OOT_VERSION >= PAL_1_0 default: PRINTF(T("irqmgr.c:予期しないメッセージを受け取りました(%08x)\n", "irqmgr.c: Unexpected message received (%08x)\n"), msg); break; +#endif } } diff --git a/src/code/main.c b/src/code/main.c index 8e572bdce3..6c2b35af29 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,4 +1,5 @@ #include "ultra64.h" +#include "versions.h" // Declared before including other headers for BSS ordering extern uintptr_t gSegments[NUM_SEGMENTS]; @@ -39,7 +40,11 @@ uintptr_t gSegments[NUM_SEGMENTS]; OSThread sGraphThread; STACK(sGraphStack, 0x1800); +#if OOT_VERSION < PAL_1_0 +STACK(sSchedStack, 0x400); +#else STACK(sSchedStack, 0x600); +#endif STACK(sAudioStack, 0x800); STACK(sPadMgrStack, 0x500); STACK(sIrqMgrStack, 0x500); @@ -78,7 +83,7 @@ void Main(void* arg) { #if PLATFORM_N64 func_800AD410(); if (D_80121211 != 0) { - systemHeapStart = (uintptr_t)&_n64ddSegmentEnd; + systemHeapStart = (uintptr_t)_n64ddSegmentEnd; SysCfb_Init(1); } else { func_800AD488(); @@ -150,7 +155,10 @@ void Main(void* arg) { StackCheck_Init(&sGraphStackInfo, sGraphStack, STACK_TOP(sGraphStack), 0, 0x100, "graph"); osCreateThread(&sGraphThread, THREAD_ID_GRAPH, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), THREAD_PRI_GRAPH); osStartThread(&sGraphThread); + +#if OOT_VERSION >= PAL_1_0 osSetThreadPri(NULL, THREAD_PRI_MAIN); +#endif while (true) { s16* msg = NULL; @@ -162,6 +170,9 @@ void Main(void* arg) { switch (*msg) { case OS_SC_PRE_NMI_MSG: PRINTF(T("main.c: リセットされたみたいだよ\n", "main.c: Looks like it's been reset\n")); +#if OOT_VERSION < PAL_1_0 + StackCheck_Check(NULL); +#endif PreNmiBuff_SetReset(gAppNmiBufferPtr); break; } diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index 8abcb62e79..a971810758 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -1,5 +1,6 @@ #include "global.h" #include "ultra64/viint.h" +#include "versions.h" void ViMode_LogPrint(OSViMode* osViMode) { LOG_ADDRESS("osvimodep", osViMode, "../z_vimode.c", 87); @@ -182,6 +183,7 @@ void ViMode_Save(ViMode* viMode) { R_VI_MODE_EDIT_ULX_ADJ = viMode->leftAdjust; R_VI_MODE_EDIT_LRX_ADJ = viMode->rightAdjust; +#if OOT_VERSION >= PAL_1_0 if (SREG(58) == 1) { SREG(58) = 0; @@ -200,6 +202,7 @@ void ViMode_Save(ViMode* viMode) { break; } } +#endif } void ViMode_Load(ViMode* viMode) { @@ -270,8 +273,18 @@ void ViMode_Update(ViMode* viMode, Input* input) { // Load state from REGs ViMode_Load(viMode); +#if OOT_VERSION < PAL_1_0 + if (viMode->editState == VI_MODE_EDIT_STATE_NEGATIVE_2) { + // Log comparison between the NTSC LAN1 mode and the custom mode + ViMode_LogPrint(&osViModeNtscLan1); + ViMode_LogPrint(&viMode->customViMode); + viMode->editState = VI_MODE_EDIT_STATE_NEGATIVE_1; + } else if ((viMode->editState == VI_MODE_EDIT_STATE_2) || (viMode->editState == VI_MODE_EDIT_STATE_3)) +#else if ((viMode->editState == VI_MODE_EDIT_STATE_ACTIVE) || (viMode->editState == VI_MODE_EDIT_STATE_2) || - (viMode->editState == VI_MODE_EDIT_STATE_3)) { + (viMode->editState == VI_MODE_EDIT_STATE_3)) +#endif + { gScreenWidth = viMode->viWidth; gScreenHeight = viMode->viHeight; @@ -333,6 +346,21 @@ void ViMode_Update(ViMode* viMode, Input* input) { } // Clamp adjustments +#if OOT_VERSION < PAL_1_0 + // Do not allow parts of the framebuffer to end up offscreen + if (viMode->leftAdjust < 0) { + viMode->leftAdjust = 0; + } + if (viMode->upperAdjust < 0) { + viMode->upperAdjust = 0; + } + if (viMode->rightAdjust > 0) { + viMode->rightAdjust = 0; + } + if (viMode->lowerAdjust > 0) { + viMode->lowerAdjust = 0; + } +#else if (viMode->editState >= VI_MODE_EDIT_STATE_2) { // Allow parts of the framebuffer to possibly be offscreen by a small margin if (viMode->leftAdjust < -16) { @@ -362,11 +390,21 @@ void ViMode_Update(ViMode* viMode, Input* input) { viMode->lowerAdjust = 0; } } +#endif // Configure the custom VI mode with the selected settings ViMode_Configure(viMode, OS_VI_MPAL_LPN1, osTvType, viMode->loRes, viMode->antialiasOff, viMode->modeN, viMode->fb16Bit, viMode->viWidth, viMode->viHeight, viMode->leftAdjust, viMode->rightAdjust, viMode->upperAdjust, viMode->lowerAdjust); + +#if OOT_VERSION < PAL_1_0 + if (viMode->editState == VI_MODE_EDIT_STATE_3) { + // Log comparison between the NTSC LAN1 mode and the custom mode + ViMode_LogPrint(&osViModeNtscLan1); + ViMode_LogPrint(&viMode->customViMode); + } +#endif + ViMode_ConfigureFeatures(viMode, viMode->viFeatures); if (viMode->editState == VI_MODE_EDIT_STATE_3) { From 621b8f38c565c6a801c9f375165e84095d587dd0 Mon Sep 17 00:00:00 2001 From: cadmic Date: Wed, 9 Oct 2024 07:53:16 -0700 Subject: [PATCH 06/12] [ntsc-1.0/1.1] Match audio library (#2243) * [ntsc-1.0/1.1] Match audio library * Don't include versions.h in audio table headers * Include versions.h where audio tables are used --- include/audio/aseq.h | 2 + include/sequence.h | 1 + include/sfx.h | 1 + include/tables/sequence_table.h | 6 +- include/tables/sfx/enemybank_table.h | 6 +- include/tables/sfx/environmentbank_table.h | 12 ++-- include/tables/sfx/itembank_table.h | 6 +- src/audio/general.c | 75 ++++++++++++---------- src/audio/lib/seqplayer.c | 4 +- src/audio/lib/synthesis.c | 8 +-- src/audio/lib/thread.c | 5 +- src/audio/session_config.c | 6 +- src/audio/sfx.c | 2 +- src/audio/sfx_params.c | 1 + src/audio/tables/sequence_table.c | 1 + 15 files changed, 74 insertions(+), 62 deletions(-) diff --git a/include/audio/aseq.h b/include/audio/aseq.h index 1c66a3a2c3..ac600738b0 100644 --- a/include/audio/aseq.h +++ b/include/audio/aseq.h @@ -52,6 +52,8 @@ #ifndef ASEQ_H #define ASEQ_H +#include "versions.h" + /** * IO Ports */ diff --git a/include/sequence.h b/include/sequence.h index c895cd980e..d405e32362 100644 --- a/include/sequence.h +++ b/include/sequence.h @@ -2,6 +2,7 @@ #define SEQUENCE_H #include "ultra64.h" +#include "versions.h" #define DEFINE_SEQUENCE(_0, seqId, _2, _3, _4) seqId, #define DEFINE_SEQUENCE_PTR(_0, seqId, _2, _3, _4) seqId, diff --git a/include/sfx.h b/include/sfx.h index a55ca01885..4d90cf5a6a 100644 --- a/include/sfx.h +++ b/include/sfx.h @@ -2,6 +2,7 @@ #define SFX_H #include "ultra64.h" +#include "versions.h" #include "z64math.h" typedef enum SfxBankType { diff --git a/include/tables/sequence_table.h b/include/tables/sequence_table.h index d813cfb0da..3e8f13e5f9 100644 --- a/include/tables/sequence_table.h +++ b/include/tables/sequence_table.h @@ -15,10 +15,10 @@ * - Argument 3: Cache load policy for the sequence (AudioCacheLoadType) * - Argument 4: Sequence flags */ -#if PLATFORM_N64 -#define SEQ_0_FLAGS SEQ_FLAG_FANFARE | SEQ_FLAG_ENEMY -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC #define SEQ_0_FLAGS SEQ_FLAG_FANFARE +#else +#define SEQ_0_FLAGS SEQ_FLAG_FANFARE | SEQ_FLAG_ENEMY #endif DEFINE_SEQUENCE (Sequence_0, NA_BGM_GENERAL_SFX, MEDIUM_CART, CACHE_LOAD_PERMANENT, SEQ_0_FLAGS ) // general_sfx DEFINE_SEQUENCE (Sequence_1, NA_BGM_NATURE_AMBIENCE, MEDIUM_CART, CACHE_LOAD_TEMPORARY, SEQ_FLAG_ENEMY ) // nature_ambience diff --git a/include/tables/sfx/enemybank_table.h b/include/tables/sfx/enemybank_table.h index ae2c3b7148..de741033e8 100644 --- a/include/tables/sfx/enemybank_table.h +++ b/include/tables/sfx/enemybank_table.h @@ -334,10 +334,10 @@ /* 0x3942 */ DEFINE_SFX(CHAN_4EA8, NA_SE_EN_BALINADE_THUNDER, 0x34, 3, 0, 0) /* 0x3943 */ DEFINE_SFX(CHAN_415D, NA_SE_EN_BALINADE_BL_SPARK, 0x20, 2, 0, 0) /* 0x3944 */ DEFINE_SFX(CHAN_4184, NA_SE_EN_BALINADE_BL_DEAD, 0x34, 3, 0, 0) -#if PLATFORM_N64 -/* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x34, 3, 0, 0) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC /* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x30, 3, 0, 0) +#else +/* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x34, 3, 0, 0) #endif /* 0x3946 */ DEFINE_SFX(CHAN_425D, NA_SE_EN_BALINADE_HIT_RINK, 0x38, 3, 0, 0) /* 0x3947 */ DEFINE_SFX(CHAN_3AF4, NA_SE_EN_GANON_WAVE_GND, 0x20, 3, 0, 0) diff --git a/include/tables/sfx/environmentbank_table.h b/include/tables/sfx/environmentbank_table.h index 08bd08de7e..a2ecf23c0d 100644 --- a/include/tables/sfx/environmentbank_table.h +++ b/include/tables/sfx/environmentbank_table.h @@ -43,10 +43,10 @@ /* 0x281F */ DEFINE_SFX(CHAN_1B61, NA_SE_EV_TBOX_UNLOCK, 0x30, 0, 0, 0) /* 0x2820 */ DEFINE_SFX(CHAN_1B7D, NA_SE_EV_TBOX_OPEN, 0x30, 0, 0, 0) /* 0x2821 */ DEFINE_SFX(CHAN_1B93, NA_SE_SY_TIMER, 0xA0, 0, 0, SFX_FLAG_13 | SFX_FLAG_3) -#if PLATFORM_N64 -/* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x2D, 2, 0, 0) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC /* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x20, 2, 0, 0) +#else +/* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x2D, 2, 0, 0) #endif /* 0x2823 */ DEFINE_SFX(CHAN_1BF9, NA_SE_EV_SPEAR_HIT, 0x30, 0, 0, 0) /* 0x2824 */ DEFINE_SFX(CHAN_1C14, NA_SE_EV_ELEVATOR_MOVE, 0x30, 0, 0, SFX_FLAG_11) @@ -108,10 +108,10 @@ /* 0x285C */ DEFINE_SFX(CHAN_2374, NA_SE_EV_BLOCKSINK, 0x30, 2, 0, 0) /* 0x285D */ DEFINE_SFX(CHAN_2389, NA_SE_EV_CROWD, 0x30, 0, 0, SFX_FLAG_13 | SFX_FLAG_12 | SFX_FLAG_11) /* 0x285E */ DEFINE_SFX(CHAN_23A6, NA_SE_EV_WATER_LEVEL_DOWN, 0x30, 0, 0, 0) -#if PLATFORM_N64 -/* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x2C, 0, 0, 0) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC /* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x30, 0, 0, 0) +#else +/* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x2C, 0, 0, 0) #endif /* 0x2860 */ DEFINE_SFX(CHAN_23EB, NA_SE_EV_LADDER_DOUND, 0x30, 3, 0, 0) /* 0x2861 */ DEFINE_SFX(CHAN_2401, NA_SE_EV_WEB_VIBRATION, 0x30, 0, 0, 0) diff --git a/include/tables/sfx/itembank_table.h b/include/tables/sfx/itembank_table.h index 53f2ffadb2..ed2001a557 100644 --- a/include/tables/sfx/itembank_table.h +++ b/include/tables/sfx/itembank_table.h @@ -28,10 +28,10 @@ /* 0x1810 */ DEFINE_SFX(CHAN_10A2, NA_SE_IT_BOOMERANG_FLY, 0x30, 0, 0, SFX_FLAG_10) /* 0x1811 */ DEFINE_SFX(CHAN_10D2, NA_SE_IT_SWORD_STRIKE, 0x40, 2, 0, 0) /* 0x1812 */ DEFINE_SFX(CHAN_10E6, NA_SE_IT_HAMMER_SWING, 0x30, 0, 1, 0) -#if PLATFORM_N64 -/* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x20, 0, 0, 0) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC /* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x30, 0, 0, 0) +#else +/* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x20, 0, 0, 0) #endif /* 0x1814 */ DEFINE_SFX(CHAN_110B, NA_SE_IT_ARROW_STICK_CRE, 0x30, 0, 0, 0) /* 0x1815 */ DEFINE_SFX(CHAN_1120, NA_SE_IT_ARROW_STICK_OBJ, 0x34, 0, 0, 0) diff --git a/src/audio/general.c b/src/audio/general.c index e75b0361bc..090a727a42 100644 --- a/src/audio/general.c +++ b/src/audio/general.c @@ -1188,7 +1188,7 @@ u8 D_8016B9F3; u8 sFanfareStartTimer; u16 sFanfareSeqId; -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) u16 sPrevAmbienceSeqId; #endif @@ -1706,7 +1706,7 @@ void AudioOcarina_PlayControllerInput(u8 unused) { } else { // no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN sCurOcarinaBendIndex = 0; -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) sCurOcarinaVibrato = 0; #endif sCurOcarinaBendFreq = 1.0f; // No bend @@ -1852,18 +1852,17 @@ void AudioOcarina_PlaybackSong(void) { sRelativeNotePlaybackVolume = sNotePlaybackVolume / 127.0f; } -#if PLATFORM_N64 - // Update vibrato - sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato; - // Sets vibrato to io port 6 - AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato); -#else // Update vibrato +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) { sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato; // Sets vibrato to io port 6 AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato); } +#else + sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato; + // Sets vibrato to io port 6 + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato); #endif // Update bend @@ -2145,7 +2144,7 @@ void AudioOcarina_RecordSong(void) { } else if (sRecordOcarinaVolume != sCurOcarinaVolume) { noteChanged = true; } else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) { -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) { noteChanged = true; } @@ -2153,7 +2152,7 @@ void AudioOcarina_RecordSong(void) { noteChanged = true; #endif } else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) { -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) { noteChanged = true; } @@ -2494,7 +2493,7 @@ f32 Audio_ComputeSfxFreqScale(u8 bankId, u8 entryIdx) { switch (bankId) { case BANK_VOICE: -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (((entry->sfxId & 0xFF) < 0x40) && (sAudioBaseFilter2 != 0)) { phi_v0 = true; } else if (((entry->sfxId & 0xFF) >= 0x40) && (sAudioExtraFilter2 != 0)) { @@ -2615,7 +2614,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) { f32 behindScreenZ; u8 baseFilter = 0; SfxBankEntry* entry = &gSfxBanks[bankId][entryIdx]; -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) s32 pad; #endif @@ -2656,7 +2655,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) { } } if (sAudioBaseFilter != 0) { -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if ((bankId == BANK_PLAYER) || (bankId == BANK_ITEM) || ((bankId == BANK_VOICE) && ((entry->sfxId & 0xFF) < 0x40))) #else @@ -3240,7 +3239,7 @@ void Audio_PlaySceneSequence(u16 seqId) { AUDIOCMD_GLOBAL_STOP_AUDIOCMDS(); } -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) { Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0); AUDIOCMD_GLOBAL_STOP_AUDIOCMDS(); @@ -3384,7 +3383,7 @@ void func_800F5B58(void) { if (sPrevMainBgmSeqId == NA_BGM_DISABLED) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0); } else { -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (sPrevMainBgmSeqId == NA_BGM_NATURE_AMBIENCE) { sPrevMainBgmSeqId = sPrevAmbienceSeqId; } @@ -3520,10 +3519,10 @@ void Audio_SetSequenceMode(u8 seqMode) { volumeFadeInTimer); SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY); -#if PLATFORM_N64 - if (seqId > NA_BGM_NATURE_AMBIENCE) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC if (seqId != NA_BGM_NATURE_AMBIENCE) +#else + if (seqId > NA_BGM_NATURE_AMBIENCE) #endif { Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, @@ -3545,14 +3544,20 @@ void Audio_SetSequenceMode(u8 seqMode) { sPrevSeqMode = seqMode + 0x80; } else { -#if PLATFORM_N64 - if (seqMode == SEQ_MODE_ENEMY) { - // If both seqMode = sPrevSeqMode = SEQ_MODE_ENEMY - if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) && (seqId != NA_BGM_DISABLED) && - (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY)) { - SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY); - sPrevSeqMode = seqMode + 0x80; - } +#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC + // Empty +#elif OOT_VERSION < PAL_1_0 + if ((seqMode == SEQ_MODE_ENEMY) && (seqId != NA_BGM_FIELD_LOGIC) && + (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED)) { + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY); + sPrevSeqMode = seqMode + 0x80; + } +#else + // If both seqMode = sPrevSeqMode = SEQ_MODE_ENEMY + if ((seqMode == SEQ_MODE_ENEMY) && (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) && + (seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY)) { + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY); + sPrevSeqMode = seqMode + 0x80; } #endif } @@ -3595,20 +3600,20 @@ void Audio_SetBgmEnemyVolume(f32 dist) { sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f; Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sAudioEnemyVol, 10); -#if PLATFORM_N64 - if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) +#else + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE) #endif { Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, (0x7F - sAudioEnemyVol), 10); } } -#if PLATFORM_N64 - if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) +#else + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE) #endif { Audio_SplitBgmChannels(sAudioEnemyVol); @@ -3923,7 +3928,7 @@ void func_800F6C34(void) { sFanfareStartTimer = 0; D_8016B9F3 = 1; sMalonSingingDisabled = false; -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) sPrevAmbienceSeqId = NA_BGM_DISABLED; #endif } @@ -3984,7 +3989,7 @@ void Audio_StartNatureAmbienceSequence(u16 playerIO, u16 channelMask) { } #endif -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) && (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_NATURE_AMBIENCE)) { Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0); @@ -4018,7 +4023,7 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) { if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) || !(sSeqFlags[gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) { -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) { sPrevAmbienceSeqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId; } diff --git a/src/audio/lib/seqplayer.c b/src/audio/lib/seqplayer.c index 63aedeb56b..71132797e2 100644 --- a/src/audio/lib/seqplayer.c +++ b/src/audio/lib/seqplayer.c @@ -437,7 +437,7 @@ void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) { void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) { s32 finished = 0; -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (seqPlayer->finished == 1) { finished = 1; } @@ -457,7 +457,7 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) { } if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) { -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (finished == 1) { AudioHeap_ReleaseNotesForFont(seqPlayer->defaultFont); } diff --git a/src/audio/lib/synthesis.c b/src/audio/lib/synthesis.c index d2214d99ac..d19ed4ae5f 100644 --- a/src/audio/lib/synthesis.c +++ b/src/audio/lib/synthesis.c @@ -644,10 +644,10 @@ Acmd* AudioSynth_DoOneAudioUpdate(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updat // Leak reverb between the left and right channels -#if PLATFORM_N64 - if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO)) -#else +#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC if ((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) +#else + if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO)) #endif { cmd = AudioSynth_LeakReverb(cmd, reverb); @@ -785,7 +785,7 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac; numSamplesToLoad = samplesLenFixedPoint >> 16; -#if PLATFORM_N64 +#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC) if (numSamplesToLoad == 0) { skipBytes = false; } diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c index 561e95e14c..c074f596a1 100644 --- a/src/audio/lib/thread.c +++ b/src/audio/lib/thread.c @@ -1,4 +1,5 @@ #include "global.h" +#include "versions.h" #define SAMPLES_TO_OVERPRODUCE 0x10 #define EXTRA_BUFFERED_AI_SAMPLES_TARGET 0x80 @@ -16,7 +17,7 @@ AudioTask* AudioThread_Update(void) { return AudioThread_UpdateImpl(); } -#if PLATFORM_N64 +#if !(OOT_VERSION < PAL_1_0 || PLATFORM_GC) static s32 sMaxAbiCmdCnt = 0x80; static AudioTask* sWaitingAudioTask = NULL; #endif @@ -25,7 +26,7 @@ static AudioTask* sWaitingAudioTask = NULL; * This is Audio_Update for the audio thread */ AudioTask* AudioThread_UpdateImpl(void) { -#if !PLATFORM_N64 +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC static s32 sMaxAbiCmdCnt = 0x80; static AudioTask* sWaitingAudioTask = NULL; #endif diff --git a/src/audio/session_config.c b/src/audio/session_config.c index 8d1d97ca0c..8c2824eee4 100644 --- a/src/audio/session_config.c +++ b/src/audio/session_config.c @@ -18,10 +18,10 @@ const TempoData gTempoData = { // Sizes of everything on the init pool #define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers)) #define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont)) -#if PLATFORM_N64 -#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE + 0x10) -#else +#if OOT_VERSION < PAL_1_0 || PLATFORM_GC #define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE) +#else +#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE + 0x10) #endif const AudioHeapInitSizes gAudioHeapInitSizes = { diff --git a/src/audio/sfx.c b/src/audio/sfx.c index 90ed7a28f6..b3de8eef5d 100644 --- a/src/audio/sfx.c +++ b/src/audio/sfx.c @@ -342,7 +342,7 @@ void Audio_ChooseActiveSfx(u8 bankId) { entry->sfxId, entry->posX, entry->posZ, *entry->posX, *entry->posY, *entry->posZ); } entry->priority = (u32)entry->dist + (SQ(0xFF - sfxImportance) * SQ(76)); -#if !PLATFORM_N64 +#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC temp3 = entry->sfxId; // fake entry->priority = entry->priority + temp3 - temp3; #endif diff --git a/src/audio/sfx_params.c b/src/audio/sfx_params.c index 4f52fbdf0a..7dc1bbd2c7 100644 --- a/src/audio/sfx_params.c +++ b/src/audio/sfx_params.c @@ -1,5 +1,6 @@ #include "ultra64.h" #include "global.h" +#include "versions.h" #define DEFINE_SFX(_0, _1, importance, distParam, randParam, flags) \ { importance, ((((distParam) << SFX_PARAM_01_SHIFT) & SFX_PARAM_01_MASK) | \ diff --git a/src/audio/tables/sequence_table.c b/src/audio/tables/sequence_table.c index 7a08ce79c5..dc3321d2b4 100644 --- a/src/audio/tables/sequence_table.c +++ b/src/audio/tables/sequence_table.c @@ -1,5 +1,6 @@ #include "attributes.h" #include "z64audio.h" +#include "versions.h" // Symbol definition From ba9c60552b7a879d05a15aee102b502333b6bb41 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Thu, 10 Oct 2024 02:22:52 +0200 Subject: [PATCH 07/12] Player doc: some rotation logic/data (#1443) * Docs: some player rotation logic/data * Improve misleading comment * rename temps * unk_6AE_rotFlags * format * disasm metadata --- include/z64player.h | 22 +- src/code/z_actor.c | 2 +- src/code/z_player_lib.c | 24 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 2 +- .../actors/ovl_player_actor/z_player.c | 259 ++++++++++-------- 5 files changed, 169 insertions(+), 140 deletions(-) diff --git a/include/z64player.h b/include/z64player.h index 1f92088ad9..a081506178 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -748,6 +748,16 @@ typedef void (*PlayerActionFunc)(struct Player*, struct PlayState*); typedef s32 (*UpperActionFunc)(struct Player*, struct PlayState*); typedef void (*AfterPutAwayFunc)(struct PlayState*, struct Player*); +#define UNK6AE_ROT_FOCUS_X (1 << 0) +#define UNK6AE_ROT_FOCUS_Y (1 << 1) +#define UNK6AE_ROT_FOCUS_Z (1 << 2) +#define UNK6AE_ROT_HEAD_X (1 << 3) +#define UNK6AE_ROT_HEAD_Y (1 << 4) +#define UNK6AE_ROT_HEAD_Z (1 << 5) +#define UNK6AE_ROT_UPPER_X (1 << 6) +#define UNK6AE_ROT_UPPER_Y (1 << 7) +#define UNK6AE_ROT_UPPER_Z (1 << 8) + typedef struct Player { /* 0x0000 */ Actor actor; /* 0x014C */ s8 currentTunic; // current tunic from `PlayerTunic` @@ -838,15 +848,11 @@ typedef struct Player { /* 0x06A8 */ Actor* unk_6A8; /* 0x06AC */ s8 idleType; /* 0x06AD */ u8 unk_6AD; - /* 0x06AE */ u16 unk_6AE; - /* 0x06B0 */ s16 unk_6B0; + /* 0x06AE */ u16 unk_6AE_rotFlags; // See `UNK6AE_ROT_` macros. If its flag isn't set, a rot steps to 0. + /* 0x06B0 */ s16 upperLimbYawSecondary; /* 0x06B2 */ char unk_6B4[0x004]; - /* 0x06B6 */ s16 unk_6B6; - /* 0x06B8 */ s16 unk_6B8; - /* 0x06BA */ s16 unk_6BA; - /* 0x06BC */ s16 unk_6BC; - /* 0x06BE */ s16 unk_6BE; - /* 0x06C0 */ s16 unk_6C0; + /* 0x06B6 */ Vec3s headLimbRot; + /* 0x06BC */ Vec3s upperLimbRot; /* 0x06C2 */ s16 unk_6C2; /* 0x06C4 */ f32 unk_6C4; /* 0x06C8 */ SkelAnime upperSkelAnime; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 71e25d9530..cbe84c927e 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1098,7 +1098,7 @@ int func_8002DD6C(Player* player) { } int func_8002DD78(Player* player) { - return func_8002DD6C(player) && player->unk_834; + return func_8002DD6C(player) && (player->unk_834 != 0); } int func_8002DDA8(PlayState* play) { diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index c9815c3137..d7ec54bd03 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1295,22 +1295,22 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** } if (limbIndex == PLAYER_LIMB_HEAD) { - rot->x += this->unk_6BA; - rot->y -= this->unk_6B8; - rot->z += this->unk_6B6; + rot->x += this->headLimbRot.z; + rot->y -= this->headLimbRot.y; + rot->z += this->headLimbRot.x; } else if (limbIndex == PLAYER_LIMB_UPPER) { - if (this->unk_6B0 != 0) { + if (this->upperLimbYawSecondary != 0) { Matrix_RotateZ(BINANG_TO_RAD(0x44C), MTXMODE_APPLY); - Matrix_RotateY(BINANG_TO_RAD(this->unk_6B0), MTXMODE_APPLY); + Matrix_RotateY(BINANG_TO_RAD(this->upperLimbYawSecondary), MTXMODE_APPLY); } - if (this->unk_6BE != 0) { - Matrix_RotateY(BINANG_TO_RAD(this->unk_6BE), MTXMODE_APPLY); + if (this->upperLimbRot.y != 0) { + Matrix_RotateY(BINANG_TO_RAD(this->upperLimbRot.y), MTXMODE_APPLY); } - if (this->unk_6BC != 0) { - Matrix_RotateX(BINANG_TO_RAD(this->unk_6BC), MTXMODE_APPLY); + if (this->upperLimbRot.x != 0) { + Matrix_RotateX(BINANG_TO_RAD(this->upperLimbRot.x), MTXMODE_APPLY); } - if (this->unk_6C0 != 0) { - Matrix_RotateZ(BINANG_TO_RAD(this->unk_6C0), MTXMODE_APPLY); + if (this->upperLimbRot.z != 0) { + Matrix_RotateZ(BINANG_TO_RAD(this->upperLimbRot.z), MTXMODE_APPLY); } } else if (limbIndex == PLAYER_LIMB_L_THIGH) { s32 pad; @@ -1788,7 +1788,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve Matrix_MtxFToYXZRotS(&sp44, &heldActor->world.rot, 0); heldActor->shape.rot = heldActor->world.rot; - if (func_8002DD78(this) != 0) { + if (func_8002DD78(this)) { Matrix_Translate(500.0f, 300.0f, 0.0f, MTXMODE_APPLY); Player_DrawHookshotReticle(play, this, (this->heldItemAction == PLAYER_IA_HOOKSHOT) ? 38600.0f : 77600.0f); diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index fb57ef0148..d02d1b5fa4 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -724,7 +724,7 @@ void EnHorse_ResetRace(EnHorse* this, PlayState* play) { s32 EnHorse_PlayerCanMove(EnHorse* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((player->stateFlags1 & PLAYER_STATE1_0) || func_8002DD78(GET_PLAYER(play)) == 1 || + if ((player->stateFlags1 & PLAYER_STATE1_0) || func_8002DD78(GET_PLAYER(play)) == true || (player->stateFlags1 & PLAYER_STATE1_20) || ((this->stateFlags & ENHORSE_FLAG_19) && !this->inRace) || this->action == ENHORSE_ACT_HBA || player->actor.flags & ACTOR_FLAG_TALK || play->csCtx.state != CS_STATE_IDLE) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 82afb14714..10aa62442d 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3141,8 +3141,8 @@ s32 func_808351D4(Player* this, PlayState* play) { sp2C = 1; } - Math_ScaledStepToS(&this->unk_6C0, 1200, 400); - this->unk_6AE |= 0x100; + Math_ScaledStepToS(&this->upperLimbRot.z, 1200, 400); + this->unk_6AE_rotFlags |= UNK6AE_ROT_UPPER_Z; if ((this->unk_836 == 0) && (Player_CheckForIdleAnim(this) == IDLE_ANIM_NONE) && (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) { @@ -3675,7 +3675,7 @@ s32 Player_UpdateUpperBody(Player* this, PlayState* play) { this->yaw = this->actor.shape.rot.y; this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; this->hoverBootsTimer = 0; - this->unk_6AE |= 0x43; + this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_FOCUS_Y | UNK6AE_ROT_UPPER_X; Player_PlayVoiceSfx(this, NA_SE_VO_LI_LASH); return true; } @@ -3763,48 +3763,68 @@ void Player_UpdateShapeYaw(Player* this, PlayState* play) { this->unk_87C = this->actor.shape.rot.y - previousYaw; } -s32 func_808369C8(s16* pValue, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5) { - s16 temp1; - s16 temp2; - s16 temp3; +/** + * Step a value by `step` to a `target` value. + * Constrains the value to be no further than `constraintRange` from `constraintMid` (accounting for wrapping). + * Constrains the value to be no further than `overflowRange` from 0. + * If this second constraint is enforced, return how much the value was past by the range, or return 0. + * + * @return The amount by which the value overflowed the absolute range defined by `overflowRange` + */ +s32 Player_ScaledStepBinangClamped(s16* pValue, s16 target, s16 step, s16 overflowRange, s16 constraintMid, + s16 constraintRange) { + s16 diff; + s16 clampedDiff; + s16 valueBeforeOverflowClamp; - temp1 = temp2 = arg4 - *pValue; - temp2 = CLAMP(temp2, -arg5, arg5); - *pValue += (s16)(temp1 - temp2); + // Clamp value to [constraintMid - constraintRange , constraintMid + constraintRange] + // This is more involved than a simple `CLAMP`, to account for binang wrapping + diff = clampedDiff = constraintMid - *pValue; + clampedDiff = CLAMP(clampedDiff, -constraintRange, constraintRange); + *pValue += (s16)(diff - clampedDiff); - Math_ScaledStepToS(pValue, arg1, arg2); + Math_ScaledStepToS(pValue, target, step); - temp3 = *pValue; - if (*pValue < -arg3) { - *pValue = -arg3; - } else if (*pValue > arg3) { - *pValue = arg3; + valueBeforeOverflowClamp = *pValue; + if (*pValue < -overflowRange) { + *pValue = -overflowRange; + } else if (*pValue > overflowRange) { + *pValue = overflowRange; } - return temp3 - *pValue; + return valueBeforeOverflowClamp - *pValue; } s32 func_80836AB8(Player* this, s32 arg1) { - s16 sp36; - s16 var; + s16 targetUpperBodyYaw; + s16 yaw; - var = this->actor.shape.rot.y; - if (arg1 != 0) { - var = this->actor.focus.rot.y; - this->unk_6BC = this->actor.focus.rot.x; - this->unk_6AE |= 0x41; + yaw = this->actor.shape.rot.y; + if (arg1) { + yaw = this->actor.focus.rot.y; + this->upperLimbRot.x = this->actor.focus.rot.x; + this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_UPPER_X; } else { - func_808369C8(&this->unk_6BC, - func_808369C8(&this->unk_6B6, this->actor.focus.rot.x, 600, 10000, this->actor.focus.rot.x, 0), - 200, 4000, this->unk_6B6, 10000); - sp36 = this->actor.focus.rot.y - var; - func_808369C8(&sp36, 0, 200, 24000, this->unk_6BE, 8000); - var = this->actor.focus.rot.y - sp36; - func_808369C8(&this->unk_6B8, sp36 - this->unk_6BE, 200, 8000, sp36, 8000); - func_808369C8(&this->unk_6BE, sp36, 200, 8000, this->unk_6B8, 8000); - this->unk_6AE |= 0xD9; + // Step the head pitch to the focus pitch. + // If the head cannot be pitched enough, pitch the upper body. + Player_ScaledStepBinangClamped(&this->upperLimbRot.x, + Player_ScaledStepBinangClamped(&this->headLimbRot.x, this->actor.focus.rot.x, + 600, 10000, this->actor.focus.rot.x, 0), + 200, 4000, this->headLimbRot.x, 10000); + + // Step the upper body and head yaw to the focus yaw. + // Eventually prefers turning the upper body rather than the head. + targetUpperBodyYaw = this->actor.focus.rot.y - yaw; + Player_ScaledStepBinangClamped(&targetUpperBodyYaw, 0, 200, 24000, this->upperLimbRot.y, 8000); + yaw = this->actor.focus.rot.y - targetUpperBodyYaw; + Player_ScaledStepBinangClamped(&this->headLimbRot.y, targetUpperBodyYaw - this->upperLimbRot.y, 200, 8000, + targetUpperBodyYaw, 8000); + Player_ScaledStepBinangClamped(&this->upperLimbRot.y, targetUpperBodyYaw, 200, 8000, this->headLimbRot.y, 8000); + + this->unk_6AE_rotFlags |= + UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_HEAD_X | UNK6AE_ROT_HEAD_Y | UNK6AE_ROT_UPPER_X | UNK6AE_ROT_UPPER_Y; } - return var; + return yaw; } /** @@ -4241,7 +4261,7 @@ s32 Player_TryActionHandlerList(PlayState* play, Player* this, s8* actionHandler } if (func_8008F128(this)) { - this->unk_6AE |= 0x41; + this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_UPPER_X; return true; } @@ -5925,8 +5945,8 @@ void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) { } void func_8083B010(Player* this) { - this->actor.focus.rot.x = this->actor.focus.rot.z = this->unk_6B6 = this->unk_6B8 = this->unk_6BA = this->unk_6BC = - this->unk_6BE = this->unk_6C0 = 0; + this->actor.focus.rot.x = this->actor.focus.rot.z = this->headLimbRot.x = this->headLimbRot.y = + this->headLimbRot.z = this->upperLimbRot.x = this->upperLimbRot.y = this->upperLimbRot.z = 0; this->actor.focus.rot.y = this->actor.shape.rot.y; } @@ -6472,7 +6492,7 @@ s32 Player_ActionHandler_11(Player* this, PlayState* play) { this->unk_86C = 0.0f; func_80833C3C(this); } - this->unk_6BC = this->unk_6BE = this->unk_6C0 = 0; + this->upperLimbRot.x = this->upperLimbRot.y = this->upperLimbRot.z = 0; } frame = Animation_GetLastFrame(anim); @@ -7019,18 +7039,21 @@ void func_8083D6EC(PlayState* play, Player* this) { s32 func_8083DB98(Player* this, s32 arg1) { Actor* focusActor = this->focusActor; - Vec3f sp30; - s16 sp2E; - s16 sp2C; + Vec3f playerHeadPos; + s16 targetFocusRotX; + s16 targetFocusRotY; - sp30.x = this->actor.world.pos.x; - sp30.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; - sp30.z = this->actor.world.pos.z; - sp2E = Math_Vec3f_Pitch(&sp30, &focusActor->focus.pos); - sp2C = Math_Vec3f_Yaw(&sp30, &focusActor->focus.pos); - Math_SmoothStepToS(&this->actor.focus.rot.y, sp2C, 4, 10000, 0); - Math_SmoothStepToS(&this->actor.focus.rot.x, sp2E, 4, 10000, 0); - this->unk_6AE |= 2; + playerHeadPos.x = this->actor.world.pos.x; + playerHeadPos.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; + playerHeadPos.z = this->actor.world.pos.z; + + targetFocusRotX = Math_Vec3f_Pitch(&playerHeadPos, &focusActor->focus.pos); + targetFocusRotY = Math_Vec3f_Yaw(&playerHeadPos, &focusActor->focus.pos); + + Math_SmoothStepToS(&this->actor.focus.rot.y, targetFocusRotY, 4, 10000, 0); + Math_SmoothStepToS(&this->actor.focus.rot.x, targetFocusRotX, 4, 10000, 0); + + this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_Y; return func_80836AB8(this, arg1); } @@ -7045,9 +7068,9 @@ void func_8083DC54(Player* this, PlayState* play) { if (this->focusActor != NULL) { if (func_8002DD78(this) || func_808334B4(this)) { - func_8083DB98(this, 1); + func_8083DB98(this, true); } else { - func_8083DB98(this, 0); + func_8083DB98(this, false); } return; } @@ -7070,22 +7093,22 @@ void func_8083DC54(Player* this, PlayState* play) { void func_8083DDC8(Player* this, PlayState* play) { if (!func_8002DD78(this) && !func_808334B4(this) && (this->speedXZ > 5.0f)) { - s16 temp1; - s16 temp2; + s16 targetPitch; + s16 targetRoll; - temp1 = this->speedXZ * 200.0f; - temp2 = (s16)(this->yaw - this->actor.shape.rot.y) * this->speedXZ * 0.1f; + targetPitch = this->speedXZ * 200.0f; + targetRoll = (s16)(this->yaw - this->actor.shape.rot.y) * this->speedXZ * 0.1f; - temp1 = CLAMP(temp1, -4000, 4000); - temp2 = CLAMP(-temp2, -4000, 4000); + targetPitch = CLAMP(targetPitch, -4000, 4000); + targetRoll = CLAMP(-targetRoll, -4000, 4000); - Math_ScaledStepToS(&this->unk_6BC, temp1, 900); - this->unk_6B6 = -(f32)this->unk_6BC * 0.5f; + Math_ScaledStepToS(&this->upperLimbRot.x, targetPitch, 900); + this->headLimbRot.x = -(f32)this->upperLimbRot.x * 0.5f; - Math_ScaledStepToS(&this->unk_6BA, temp2, 300); - Math_ScaledStepToS(&this->unk_6C0, temp2, 200); + Math_ScaledStepToS(&this->headLimbRot.z, targetRoll, 300); + Math_ScaledStepToS(&this->upperLimbRot.z, targetRoll, 200); - this->unk_6AE |= 0x168; + this->unk_6AE_rotFlags |= UNK6AE_ROT_HEAD_X | UNK6AE_ROT_HEAD_Z | UNK6AE_ROT_UPPER_X | UNK6AE_ROT_UPPER_Z; } else { func_8083DC54(this, play); } @@ -7854,10 +7877,10 @@ s32 func_8083FD78(Player* this, f32* arg1, s16* arg2, PlayState* play) { } if (this->focusActor != NULL) { - func_8083DB98(this, 1); + func_8083DB98(this, true); } else { Math_SmoothStepToS(&this->actor.focus.rot.x, sControlInput->rel.stick_y * 240.0f, 14, 4000, 30); - func_80836AB8(this, 1); + func_80836AB8(this, true); } } else { if (this->focusActor != NULL) { @@ -8868,7 +8891,7 @@ s32 func_808428D8(Player* this, PlayState* play) { Player_AnimPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru); this->av1.actionVar1 = 1; this->meleeWeaponAnimation = PLAYER_MWA_STAB_1H; - this->yaw = this->actor.shape.rot.y + this->unk_6BE; + this->yaw = this->actor.shape.rot.y + this->upperLimbRot.y; return 1; } @@ -9104,14 +9127,14 @@ void Player_Action_80843188(Player* this, PlayState* play) { sp48 = 100; } - sp46 = ABS(sp4A - this->unk_6BE) * 0.25f; + sp46 = ABS(sp4A - this->upperLimbRot.y) * 0.25f; if (sp46 < 50) { sp46 = 50; } Math_ScaledStepToS(&this->actor.focus.rot.x, sp4C, sp48); - this->unk_6BC = this->actor.focus.rot.x; - Math_ScaledStepToS(&this->unk_6BE, sp4A, sp46); + this->upperLimbRot.x = this->actor.focus.rot.x; + Math_ScaledStepToS(&this->upperLimbRot.y, sp4A, sp46); if (this->av1.actionVar1 != 0) { if (!func_80842DF4(play, this)) { @@ -9153,7 +9176,7 @@ void Player_Action_80843188(Player* this, PlayState* play) { this->stateFlags1 |= PLAYER_STATE1_22; Player_SetModelsForHoldingShield(this); - this->unk_6AE |= 0xC1; + this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_UPPER_X | UNK6AE_ROT_UPPER_Y; } void Player_Action_808435C4(Player* this, PlayState* play) { @@ -10701,60 +10724,60 @@ void Player_Init(Actor* thisx, PlayState* play2) { MREG(64) = 0; } -void func_808471F4(s16* pValue) { +void Player_ApproachZeroBinang(s16* pValue) { s16 step; - step = (ABS(*pValue) * 100.0f) / 1000.0f; + step = ABS(*pValue) * 100.0f / 1000.0f; step = CLAMP(step, 400, 4000); Math_ScaledStepToS(pValue, 0, step); } void func_80847298(Player* this) { - if (!(this->unk_6AE & 2)) { - s16 sp26 = this->actor.focus.rot.y - this->actor.shape.rot.y; + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_FOCUS_Y)) { + s16 diff = this->actor.focus.rot.y - this->actor.shape.rot.y; - func_808471F4(&sp26); - this->actor.focus.rot.y = this->actor.shape.rot.y + sp26; + Player_ApproachZeroBinang(&diff); + this->actor.focus.rot.y = this->actor.shape.rot.y + diff; } - if (!(this->unk_6AE & 1)) { - func_808471F4(&this->actor.focus.rot.x); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_FOCUS_X)) { + Player_ApproachZeroBinang(&this->actor.focus.rot.x); } - if (!(this->unk_6AE & 8)) { - func_808471F4(&this->unk_6B6); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_HEAD_X)) { + Player_ApproachZeroBinang(&this->headLimbRot.x); } - if (!(this->unk_6AE & 0x40)) { - func_808471F4(&this->unk_6BC); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_UPPER_X)) { + Player_ApproachZeroBinang(&this->upperLimbRot.x); } - if (!(this->unk_6AE & 4)) { - func_808471F4(&this->actor.focus.rot.z); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_FOCUS_Z)) { + Player_ApproachZeroBinang(&this->actor.focus.rot.z); } - if (!(this->unk_6AE & 0x10)) { - func_808471F4(&this->unk_6B8); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_HEAD_Y)) { + Player_ApproachZeroBinang(&this->headLimbRot.y); } - if (!(this->unk_6AE & 0x20)) { - func_808471F4(&this->unk_6BA); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_HEAD_Z)) { + Player_ApproachZeroBinang(&this->headLimbRot.z); } - if (!(this->unk_6AE & 0x80)) { - if (this->unk_6B0 != 0) { - func_808471F4(&this->unk_6B0); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_UPPER_Y)) { + if (this->upperLimbYawSecondary != 0) { + Player_ApproachZeroBinang(&this->upperLimbYawSecondary); } else { - func_808471F4(&this->unk_6BE); + Player_ApproachZeroBinang(&this->upperLimbRot.y); } } - if (!(this->unk_6AE & 0x100)) { - func_808471F4(&this->unk_6C0); + if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_UPPER_Z)) { + Player_ApproachZeroBinang(&this->upperLimbRot.z); } - this->unk_6AE = 0; + this->unk_6AE_rotFlags = 0; } static f32 D_80854784[] = { 120.0f, 240.0f, 360.0f }; @@ -12234,7 +12257,7 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { s16 temp2; s16 temp3; - if (!func_8002DD78(this) && !func_808334B4(this) && (arg2 == 0)) { + if (!func_8002DD78(this) && !func_808334B4(this) && !arg2) { temp2 = sControlInput->rel.stick_y * 240.0f; Math_SmoothStepToS(&this->actor.focus.rot.x, temp2, 14, 4000, 30); @@ -12256,7 +12279,7 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { this->actor.focus.rot.y = CLAMP(temp2, -temp1, temp1) + this->actor.shape.rot.y; } - this->unk_6AE |= 2; + this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_Y; return func_80836AB8(this, (play->shootingGalleryStatus != 0) || func_8002DD78(this) || func_808334B4(this)) - arg3; } @@ -12377,9 +12400,9 @@ void Player_Action_8084B1D8(Player* this, PlayState* play) { Sfx_PlaySfxCentered(NA_SE_SY_CAMERA_ZOOM_UP); } else if ((DECR(this->av2.actionVar2) == 0) || (this->unk_6AD != 2)) { if (func_8008F128(this)) { - this->unk_6AE |= 0x43; + this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_FOCUS_Y | UNK6AE_ROT_UPPER_X; } else { - this->actor.shape.rot.y = func_8084ABD8(play, this, 0, 0); + this->actor.shape.rot.y = func_8084ABD8(play, this, false, 0); } } @@ -12471,7 +12494,7 @@ void Player_Action_8084B530(Player* this, PlayState* play) { } if (this->focusActor != NULL) { - this->yaw = this->actor.shape.rot.y = func_8083DB98(this, 0); + this->yaw = this->actor.shape.rot.y = func_8083DB98(this, false); } } @@ -13232,9 +13255,9 @@ void Player_Action_8084CC98(Player* this, PlayState* play) { this->unk_6AD = 0; this->stateFlags1 &= ~PLAYER_STATE1_20; } else { - this->unk_6BE = func_8084ABD8(play, this, 1, -5000) - this->actor.shape.rot.y; - this->unk_6BE += 5000; - this->unk_6B0 = -5000; + this->upperLimbRot.y = func_8084ABD8(play, this, true, -5000) - this->actor.shape.rot.y; + this->upperLimbRot.y += 5000; + this->upperLimbYawSecondary = -5000; } return; } @@ -13242,20 +13265,20 @@ void Player_Action_8084CC98(Player* this, PlayState* play) { if ((this->csAction != PLAYER_CSACTION_NONE) || (!func_8084C9BC(this, play) && !Player_ActionHandler_13(this, play))) { if (this->focusActor != NULL) { - if (func_8002DD78(this) != 0) { - this->unk_6BE = func_8083DB98(this, 1) - this->actor.shape.rot.y; - this->unk_6BE = CLAMP(this->unk_6BE, -0x4AAA, 0x4AAA); - this->actor.focus.rot.y = this->actor.shape.rot.y + this->unk_6BE; - this->unk_6BE += 5000; - this->unk_6AE |= 0x80; + if (func_8002DD78(this)) { + this->upperLimbRot.y = func_8083DB98(this, true) - this->actor.shape.rot.y; + this->upperLimbRot.y = CLAMP(this->upperLimbRot.y, -0x4AAA, 0x4AAA); + this->actor.focus.rot.y = this->actor.shape.rot.y + this->upperLimbRot.y; + this->upperLimbRot.y += 5000; + this->unk_6AE_rotFlags |= UNK6AE_ROT_UPPER_Y; } else { - func_8083DB98(this, 0); + func_8083DB98(this, false); } } else { - if (func_8002DD78(this) != 0) { - this->unk_6BE = func_8084ABD8(play, this, 1, -5000) - this->actor.shape.rot.y; - this->unk_6BE += 5000; - this->unk_6B0 = -5000; + if (func_8002DD78(this)) { + this->upperLimbRot.y = func_8084ABD8(play, this, true, -5000) - this->actor.shape.rot.y; + this->upperLimbRot.y += 5000; + this->upperLimbYawSecondary = -5000; } } } @@ -14078,7 +14101,7 @@ void Player_Action_8084F104(Player* this, PlayState* play) { } if ((this->av1.actionVar1 == 0) && (this->focusActor != NULL)) { - this->yaw = this->actor.shape.rot.y = func_8083DB98(this, 0); + this->yaw = this->actor.shape.rot.y = func_8083DB98(this, false); } } @@ -14258,8 +14281,8 @@ void Player_Action_8084FA54(Player* this, PlayState* play) { LinkAnimation_Update(play, &this->skelAnime); Player_UpdateUpperBody(this, play); - this->unk_6BE = func_8084ABD8(play, this, 1, 0) - this->actor.shape.rot.y; - this->unk_6AE |= 0x80; + this->upperLimbRot.y = func_8084ABD8(play, this, true, 0) - this->actor.shape.rot.y; + this->unk_6AE_rotFlags |= UNK6AE_ROT_UPPER_Y; if (play->shootingGalleryStatus < 0) { play->shootingGalleryStatus++; @@ -14536,7 +14559,7 @@ void Player_Action_808502D0(Player* this, PlayState* play) { sp2C = this->actor.world.pos.y - shockwavePos.y; Math_ScaledStepToS(&this->actor.focus.rot.x, Math_Atan2S(45.0f, sp2C), 800); - func_80836AB8(this, 1); + func_80836AB8(this, true); if ((((this->meleeWeaponAnimation == PLAYER_MWA_HAMMER_FORWARD) && LinkAnimation_OnFrame(&this->skelAnime, 7.0f)) || @@ -15154,7 +15177,7 @@ void func_80851314(Player* this) { this->focusActor = this->csActor; if (this->focusActor != NULL) { - this->actor.shape.rot.y = func_8083DB98(this, 0); + this->actor.shape.rot.y = func_8083DB98(this, false); } } From 33251ccb511d3a96504fd1cd95cc7e955858bb28 Mon Sep 17 00:00:00 2001 From: fig02 Date: Wed, 9 Oct 2024 21:37:33 -0400 Subject: [PATCH 08/12] name action wrappers (#2261) --- .../actors/ovl_player_actor/z_player.c | 66 ++++++++++++------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 10aa62442d..a8ec061289 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3453,23 +3453,41 @@ s32 Player_SetupAction(PlayState* play, Player* this, PlayerActionFunc actionFun return 1; } -void func_80835DAC(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) { - s32 temp; +/** + * Calls `Player_SetupAction` to setup a new action, but takes extra measures to + * preserve AnimMovement while doing so. + */ +void Player_SetupActionPreserveAnimMovement(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) { + s32 savedMovementFlags; - temp = this->skelAnime.movementFlags; + savedMovementFlags = this->skelAnime.movementFlags; + + // Setting `skelAnime.movementFlags` to 0 will prevent `Player_FinishAnimMovement` from ending + // AnimMovement when `Player_SetupAction` is called. this->skelAnime.movementFlags = 0; + Player_SetupAction(play, this, actionFunc, flags); - this->skelAnime.movementFlags = temp; + this->skelAnime.movementFlags = savedMovementFlags; } -void func_80835DE4(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) { - s32 temp; +/** + * Calls `Player_SetupAction` to setup a new action, but takes extra measures to + * preserve the current itemAction while doing so. + * + * Note that `itemAction` must be PLAYER_IA_NONE or higher for the action change to take place. + */ +void Player_SetupActionPreserveItemAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) { + s32 savedItemAction; - if (this->itemAction >= 0) { - temp = this->itemAction; + if (this->itemAction >= PLAYER_IA_NONE) { + savedItemAction = this->itemAction; + + // Setting `itemAction` to `heldItemAction` will prevent `func_8008EC70` from running when + // `Player_SetupAction` is called. this->itemAction = this->heldItemAction; + Player_SetupAction(play, this, actionFunc, flags); - this->itemAction = temp; + this->itemAction = savedItemAction; Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); } } @@ -5617,7 +5635,7 @@ void func_8083A0F4(PlayState* play, Player* this) { } void func_8083A2F8(PlayState* play, Player* this) { - func_80835DAC(play, this, Player_Action_8084B530, 0); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084B530, 0); this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_29; @@ -5628,7 +5646,7 @@ void func_8083A2F8(PlayState* play, Player* this) { } void func_8083A360(PlayState* play, Player* this) { - func_80835DAC(play, this, Player_Action_8084CC98, 0); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084CC98, 0); } void func_8083A388(PlayState* play, Player* this) { @@ -5639,7 +5657,7 @@ void func_8083A3B0(PlayState* play, Player* this) { s32 sp1C = this->av2.actionVar2; s32 sp18 = this->av1.actionVar1; - func_80835DAC(play, this, Player_Action_8084BF1C, 0); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084BF1C, 0); this->actor.velocity.y = 0.0f; this->av2.actionVar2 = sp1C; @@ -5647,11 +5665,11 @@ void func_8083A3B0(PlayState* play, Player* this) { } void func_8083A40C(PlayState* play, Player* this) { - func_80835DAC(play, this, Player_Action_8084C760, 0); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084C760, 0); } void func_8083A434(PlayState* play, Player* this) { - func_80835DAC(play, this, Player_Action_8084E6D4, 0); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084E6D4, 0); this->stateFlags1 |= PLAYER_STATE1_10 | PLAYER_STATE1_29; @@ -5922,7 +5940,7 @@ void func_8083AE40(Player* this, s16 objectId) { } void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) { - func_80835DE4(play, this, Player_Action_808507F4, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_808507F4, 0); this->av1.actionVar1 = magicSpell - 3; @@ -6025,7 +6043,7 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) { (this->exchangeItemId == EXCH_ITEM_BOTTLE_BLUE_FIRE))))))) { if ((play->actorCtx.titleCtx.delayTimer == 0) && (play->actorCtx.titleCtx.alpha == 0)) { - func_80835DE4(play, this, Player_Action_8084F104, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_8084F104, 0); if (sp2C >= 0) { giEntry = &sGetItemTable[D_80854528[sp2C] - 1]; @@ -6052,7 +6070,7 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) { (this->itemAction == PLAYER_IA_MAGIC_BEAN))) { if (this->exchangeItemId == EXCH_ITEM_MAGIC_BEAN) { Inventory_ChangeAmmo(ITEM_MAGIC_BEAN, -1); - func_80835DE4(play, this, Player_Action_8084279C, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_8084279C, 0); this->stateFlags1 |= PLAYER_STATE1_29; this->av2.actionVar2 = 0x50; this->av1.actionVar1 = -1; @@ -6087,20 +6105,20 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) { sp2C = Player_ActionToBottle(this, this->itemAction); if (sp2C >= 0) { if (sp2C == 0xC) { - func_80835DE4(play, this, Player_Action_8084EED8, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EED8, 0); Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_bottle_bug_out); func_80835EA4(play, 3); } else if ((sp2C > 0) && (sp2C < 4)) { - func_80835DE4(play, this, Player_Action_8084EFC0, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EFC0, 0); Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_bottle_fish_out); func_80835EA4(play, (sp2C == 1) ? 1 : 5); } else { - func_80835DE4(play, this, Player_Action_8084EAC0, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EAC0, 0); Player_AnimChangeOnceMorphAdjusted(play, this, &gPlayerAnim_link_bottle_drink_demo_start); func_80835EA4(play, 2); } } else { - func_80835DE4(play, this, Player_Action_8084E3C4, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_8084E3C4, 0); Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_normal_okarina_start); this->stateFlags2 |= PLAYER_STATE2_27; func_80835EA4(play, (this->unk_6A8 != NULL) ? 0x5B : 0x5A); @@ -7540,7 +7558,7 @@ s32 func_8083EC18(Player* this, PlayState* play, u32 wallFlags) { } void func_8083F070(Player* this, LinkAnimationHeader* anim, PlayState* play) { - func_80835DAC(play, this, Player_Action_8084C5F8, 0); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084C5F8, 0); LinkAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, (4.0f / 3.0f)); } @@ -8103,7 +8121,7 @@ void Player_Action_808407CC(Player* this, PlayState* play) { } if (!Player_FriendlyLockOnOrParallel(this)) { - func_80835DAC(play, this, Player_Action_80840BC8, 1); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_80840BC8, 1); this->yaw = this->actor.shape.rot.y; return; } @@ -13030,7 +13048,7 @@ s32 func_8084C9BC(Player* this, PlayState* play) { if (EN_HORSE_CHECK_1(rideActor) || (EN_HORSE_CHECK_4(rideActor) && CHECK_BTN_ALL(sControlInput->press.button, BTN_A))) { rideActor->actor.child = NULL; - func_80835DAC(play, this, Player_Action_8084D3E4, 0); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084D3E4, 0); this->unk_878 = sp34 - rideActor->actor.world.pos.y; Player_AnimPlayOnce(play, this, (this->mountSide < 0) ? &gPlayerAnim_link_uma_left_down From 869bae342932cae89e3bb7ac8db7d2f736013f96 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Thu, 10 Oct 2024 04:09:58 +0200 Subject: [PATCH 09/12] Pause doc: misc, fixups (#2265) * use missed reg macros * do action indexing cleanup * misc * doc fixup ish in KaleidoScope_SetPageVertices * newline_police * `43` -> `(PAGE_BG_QUADS + WORLD_MAP_QUAD_28)` --- src/code/z_construct.c | 35 +++++++-------- src/code/z_kaleido_setup.c | 2 +- src/code/z_message.c | 2 +- src/code/z_parameter.c | 4 +- .../ovl_file_choose/z_file_choose.c | 5 ++- .../ovl_kaleido_scope/z_kaleido_collect.c | 2 +- .../misc/ovl_kaleido_scope/z_kaleido_map.c | 43 +++++++++++-------- .../misc/ovl_kaleido_scope/z_kaleido_scope.c | 29 +++++++------ 8 files changed, 70 insertions(+), 52 deletions(-) diff --git a/src/code/z_construct.c b/src/code/z_construct.c index 0720bc8b9a..374665d385 100644 --- a/src/code/z_construct.c +++ b/src/code/z_construct.c @@ -52,17 +52,17 @@ void Interface_Init(PlayState* play) { #if OOT_NTSC if (gSaveContext.language == LANGUAGE_JPN) { - doActionOffset = LANGUAGE_JPN * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_JPN * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE; } else { - doActionOffset = LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE; } #else if (gSaveContext.language == LANGUAGE_ENG) { - doActionOffset = LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE; } else if (gSaveContext.language == LANGUAGE_GER) { - doActionOffset = LANGUAGE_GER * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_GER * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE; } else { - doActionOffset = LANGUAGE_FRA * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_FRA * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE; } #endif @@ -71,17 +71,17 @@ void Interface_Init(PlayState* play) { #if OOT_NTSC if (gSaveContext.language == LANGUAGE_JPN) { - doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_JPN * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_JPN * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE; } else { - doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE; } #else if (gSaveContext.language == LANGUAGE_ENG) { - doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE; } else if (gSaveContext.language == LANGUAGE_GER) { - doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_GER * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_GER * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE; } else { - doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_FRA * DO_ACTION_MAX * DO_ACTION_TEX_SIZE; + doActionOffset = (LANGUAGE_FRA * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE; } #endif @@ -326,7 +326,7 @@ void Regs_InitDataImpl(void) { ZREG(10) = 200; ZREG(11) = 0; ZREG(12) = 200; - ZREG(13) = 0; + R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON = false; ZREG(14) = 110; ZREG(15) = 56; ZREG(16) = 1; @@ -619,11 +619,12 @@ void Regs_InitDataImpl(void) { R_MINIMAP_COLOR(2) = 255; } - VREG(21) = 0; - VREG(22) = 0; - VREG(23) = 0; - VREG(24) = 0; - VREG(25) = 0; + R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_A) = 0; + R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_DOWN) = 0; + R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_RIGHT) = 0; + R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_LEFT) = 0; + R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_UP) = 0; + VREG(26) = 0; VREG(27) = 0; R_OCARINA_BUTTONS_XPOS = 98; @@ -649,7 +650,7 @@ void Regs_InitDataImpl(void) { R_OCARINA_BUTTONS_YPOS(2) = 176; R_OCARINA_BUTTONS_YPOS(3) = 172; R_OCARINA_BUTTONS_YPOS(4) = 170; - VREG(50) = 30; + R_OCARINA_BUTTONS_APPEAR_ALPHA_STEP = 30; R_OCARINA_BUTTONS_YPOS_OFFSET = 0; VREG(52) = -16; VREG(53) = 230; diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 1079cd0838..990b1c0405 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -144,7 +144,7 @@ void KaleidoSetup_Init(PlayState* play) { pauseCtx->cursorPoint[PAUSE_ITEM] = 0; pauseCtx->cursorPoint[PAUSE_MAP] = VREG(30) + 3; - pauseCtx->cursorPoint[PAUSE_QUEST] = 0; + pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_MEDALLION_FOREST; pauseCtx->cursorPoint[PAUSE_EQUIP] = 1; pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 10; diff --git a/src/code/z_message.c b/src/code/z_message.c index fe60644dd5..1bd060944f 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -3889,7 +3889,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) { if (1) {} if (sOcarinaButtonAlphaValues[i] != 255) { - sOcarinaButtonAlphaValues[i] += VREG(50); + sOcarinaButtonAlphaValues[i] += R_OCARINA_BUTTONS_APPEAR_ALPHA_STEP; if (sOcarinaButtonAlphaValues[i] >= 255) { sOcarinaButtonAlphaValues[i] = 255; } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index c7289316cc..a2959e0ade 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -2125,9 +2125,9 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l #endif #if OOT_VERSION < PAL_1_0 - if ((action != DO_ACTION_NONE) && (action != DO_ACTION_MAX + DO_ACTION_NONE)) + if ((action != 0 * DO_ACTION_MAX + DO_ACTION_NONE) && (action != 1 * DO_ACTION_MAX + DO_ACTION_NONE)) #else - if ((action != DO_ACTION_NONE) && (action != DO_ACTION_MAX + DO_ACTION_NONE) && + if ((action != 0 * DO_ACTION_MAX + DO_ACTION_NONE) && (action != 1 * DO_ACTION_MAX + DO_ACTION_NONE) && (action != 2 * DO_ACTION_MAX + DO_ACTION_NONE)) #endif { diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c index 61a2eb1f61..ef4d6cd779 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c @@ -1135,7 +1135,10 @@ static void* sQuestItemTextures[] = { static s16 sQuestItemRed[] = { 255, 255, 255, 0, 255, 0, 255, 200, 200 }; static s16 sQuestItemGreen[] = { 255, 255, 255, 255, 60, 100, 130, 50, 200 }; static s16 sQuestItemBlue[] = { 255, 255, 255, 0, 0, 255, 0, 255, 0 }; -static s16 sQuestItemFlags[] = { 0x0012, 0x0013, 0x0014, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005 }; +static s16 sQuestItemFlags[] = { + QUEST_KOKIRI_EMERALD, QUEST_GORON_RUBY, QUEST_ZORA_SAPPHIRE, QUEST_MEDALLION_FOREST, QUEST_MEDALLION_FIRE, + QUEST_MEDALLION_WATER, QUEST_MEDALLION_SPIRIT, QUEST_MEDALLION_SHADOW, QUEST_MEDALLION_LIGHT, +}; #if OOT_NTSC && OOT_VERSION < GC_JP_CE static void* sSaveXTextures[] = { gFileSelSaveXJPNTex, gFileSelSaveXENGTex }; diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c index 7a9d3b5e78..4828f726eb 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c @@ -578,7 +578,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { sHpPrimBlue = sHpPrimColors[sHpPrimState][2]; sHpPrimAlpha = sHpPrimColors[sHpPrimState][3]; sHpPrimTimer = ZREG(24 + sHpPrimState); - if (++sHpPrimState >= 4) { + if (++sHpPrimState >= ARRAY_COUNT(sHpPrimColors)) { sHpPrimState = 0; } } diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c index 4b964dff86..b873337030 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c @@ -648,7 +648,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[188], 32, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_IMAGE_FIRST) * 4], 32, 0); for (j = t = i = 0; i < 8; i++, t++, j += 4) { gDPLoadTextureBlock( @@ -659,7 +659,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[220], 28, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_IMAGE_FIRST + 8) * 4], 28, 0); for (j = i = 0; i < 6; i++, t++, j += 4) { gDPLoadTextureBlock( @@ -681,8 +681,9 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { gSPLoadUcodeL(gfx++, gspS2DEX2d_fifo); - Room_DrawBackground2D(&gfx, gWorldMapImageTex, gWorldMapImageTLUT, 216, 128, G_IM_FMT_CI, G_IM_SIZ_8b, - G_TT_RGBA16, 256, HREG(13) / 100.0f, HREG(14) / 100.0f); + Room_DrawBackground2D(&gfx, gWorldMapImageTex, gWorldMapImageTLUT, WORLD_MAP_IMAGE_WIDTH, + WORLD_MAP_IMAGE_HEIGHT, G_IM_FMT_CI, G_IM_SIZ_8b, G_TT_RGBA16, 256, HREG(13) / 100.0f, + HREG(14) / 100.0f); gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); @@ -764,25 +765,33 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { // Quad PAGE_BG_QUADS + WORLD_MAP_QUAD_28 - pauseCtx->mapPageVtx[172].v.ob[0] = pauseCtx->mapPageVtx[174].v.ob[0] = - areaBoxPosX[((void)0, gSaveContext.worldMapArea)]; + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[0] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 2].v.ob[0] = + areaBoxPosX[((void)0, gSaveContext.worldMapArea)]; - pauseCtx->mapPageVtx[173].v.ob[0] = pauseCtx->mapPageVtx[175].v.ob[0] = - pauseCtx->mapPageVtx[172].v.ob[0] + areaBoxWidths[((void)0, gSaveContext.worldMapArea)]; + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 1].v.ob[0] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.ob[0] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[0] + + areaBoxWidths[((void)0, gSaveContext.worldMapArea)]; - pauseCtx->mapPageVtx[172].v.ob[1] = pauseCtx->mapPageVtx[173].v.ob[1] = - areaBoxPosY[((void)0, gSaveContext.worldMapArea)] + pauseCtx->pagesYOrigin1; + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[1] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 1].v.ob[1] = + areaBoxPosY[((void)0, gSaveContext.worldMapArea)] + pauseCtx->pagesYOrigin1; - pauseCtx->mapPageVtx[174].v.ob[1] = pauseCtx->mapPageVtx[175].v.ob[1] = - pauseCtx->mapPageVtx[172].v.ob[1] - areaBoxHeights[((void)0, gSaveContext.worldMapArea)]; + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 2].v.ob[1] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.ob[1] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[1] - + areaBoxHeights[((void)0, gSaveContext.worldMapArea)]; - pauseCtx->mapPageVtx[173].v.tc[0] = pauseCtx->mapPageVtx[175].v.tc[0] = - areaBoxWidths[((void)0, gSaveContext.worldMapArea)] << 5; + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 1].v.tc[0] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.tc[0] = + areaBoxWidths[((void)0, gSaveContext.worldMapArea)] << 5; - pauseCtx->mapPageVtx[174].v.tc[1] = pauseCtx->mapPageVtx[175].v.tc[1] = - areaBoxHeights[((void)0, gSaveContext.worldMapArea)] << 5; + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 2].v.tc[1] = + pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.tc[1] = + areaBoxHeights[((void)0, gSaveContext.worldMapArea)] << 5; - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[172], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4], 4, 0); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 255, pauseCtx->alpha); diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c index 3ae7c53313..71104dd545 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c @@ -2494,10 +2494,12 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num pageBgQuadX = 0 - (PAGE_BG_COLS * PAGE_BG_QUAD_WIDTH) / 2 - PAGE_BG_QUAD_WIDTH; - for (bufI = 0, j = 0; j < 3; j++) { + // For each column + for (bufI = 0, j = 0; j < PAGE_BG_COLS; j++) { pageBgQuadX += PAGE_BG_QUAD_WIDTH; - for (pageBgQuadY = (PAGE_BG_ROWS * PAGE_BG_QUAD_HEIGHT) / 2, i = 0; i < 5; + // For each row + for (pageBgQuadY = (PAGE_BG_ROWS * PAGE_BG_QUAD_HEIGHT) / 2, i = 0; i < PAGE_BG_ROWS; i++, bufI += 4, pageBgQuadY -= PAGE_BG_QUAD_HEIGHT) { vtx[bufI + 0].v.ob[0] = vtx[bufI + 2].v.ob[0] = pageBgQuadX; @@ -2579,9 +2581,9 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num } if (vtxPage == VTX_PAGE_MAP_WORLD) { - // For world map page, initialize vtx beyond VTX_PAGE_MAP_WORLD_QUADS + // WORLD_MAP_QUAD_TRADE_QUEST_MARKER - bufI -= 12; + bufI -= ((VTX_PAGE_MAP_WORLD_QUADS - WORLD_MAP_QUAD_TRADE_QUEST_MARKER) * 4); j = gSaveContext.worldMapArea; @@ -2595,7 +2597,7 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num vtx[bufI + 2].v.ob[1] = vtx[bufI + 3].v.ob[1] = vtx[bufI + 0].v.ob[1] - sVtxMapWorldAreaHeight[j]; - bufI += 12; + bufI += ((VTX_PAGE_MAP_WORLD_QUADS - WORLD_MAP_QUAD_TRADE_QUEST_MARKER) * 4); if (pauseCtx->tradeQuestMarker != TRADE_QUEST_MARKER_NONE) { if (sTradeQuestMarkerBobTimer == 0) { @@ -2893,7 +2895,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->questPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_QUEST_QUADS) * 4) * sizeof(Vtx)); KaleidoScope_SetPageVertices(play, pauseCtx->questPageVtx, VTX_PAGE_QUEST, VTX_PAGE_QUEST_QUADS); - pauseCtx->cursorVtx = GRAPH_ALLOC(gfxCtx, PAUSE_CURSOR_QUAD_MAX * 4 * sizeof(Vtx)); + pauseCtx->cursorVtx = GRAPH_ALLOC(gfxCtx, (PAUSE_CURSOR_QUAD_MAX * 4) * sizeof(Vtx)); for (i = 0; i < (PAUSE_CURSOR_QUAD_MAX * 4); i++) { pauseCtx->cursorVtx[i].v.ob[0] = pauseCtx->cursorVtx[i].v.ob[1] = pauseCtx->cursorVtx[i].v.ob[2] = 0; @@ -2925,6 +2927,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->itemVtx = GRAPH_ALLOC(gfxCtx, (ITEM_QUAD_MAX * 4) * sizeof(Vtx)); // ITEM_QUAD_GRID_FIRST to ITEM_QUAD_GRID_LAST + for (k = 0, i = 0, y = (ITEM_GRID_ROWS * ITEM_GRID_CELL_HEIGHT) / 2 - 6; k < ITEM_GRID_ROWS; k++, y -= ITEM_GRID_CELL_HEIGHT) { for (x = 0 - (ITEM_GRID_COLS * ITEM_GRID_CELL_WIDTH) / 2, j = 0; j < ITEM_GRID_COLS; @@ -3396,11 +3399,11 @@ void KaleidoScope_UpdateOpening(PlayState* play) { func_80084BF4(play, 1); - gSaveContext.buttonStatus[0] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][0]; - gSaveContext.buttonStatus[1] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1]; - gSaveContext.buttonStatus[2] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][2]; - gSaveContext.buttonStatus[3] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][3]; - gSaveContext.buttonStatus[4] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][4]; + gSaveContext.buttonStatus[0] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][0]; + gSaveContext.buttonStatus[1] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][1]; + gSaveContext.buttonStatus[2] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][2]; + gSaveContext.buttonStatus[3] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][3]; + gSaveContext.buttonStatus[4] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][4]; pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode]; @@ -3583,8 +3586,10 @@ void KaleidoScope_Update(PlayState* play) { if ((((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) && (pauseCtx->state == PAUSE_STATE_MAIN)) { + pauseCtx->stickAdjX = input->rel.stick_x; pauseCtx->stickAdjY = input->rel.stick_y; + KaleidoScope_UpdateCursorVtx(play); KaleidoScope_HandlePageToggles(pauseCtx, input); } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && ((pauseCtx->mainState < PAUSE_MAIN_STATE_3) || @@ -4028,7 +4033,7 @@ void KaleidoScope_Update(PlayState* play) { break; case PAUSE_MAIN_STATE_SWITCHING_PAGE: - KaleidoScope_UpdatePageSwitch(play, play->state.input); + KaleidoScope_UpdatePageSwitch(play, &play->state.input[0]); break; case PAUSE_MAIN_STATE_SONG_PLAYBACK: From fdf502dcdd55657a63d641a7a52628542eed277f Mon Sep 17 00:00:00 2001 From: fig02 Date: Thu, 10 Oct 2024 12:56:39 -0400 Subject: [PATCH 10/12] Document `Player_Action_Idle` (#2266) * document Player_Action_Idle * Player_DecelerateToZero * cleanup R_RUN_SPEED_LIMIT usages * format * typo * reorder reg * shake timer is used for fall damage * comment on shake timer only being processed in one place * format and edit comment * shakeTimer -> fallDamageStunTimer --- include/regs.h | 1 + include/z64player.h | 1 + src/code/z_player_lib.c | 30 ++--- .../actors/ovl_player_actor/z_player.c | 121 ++++++++++-------- 4 files changed, 86 insertions(+), 67 deletions(-) diff --git a/include/regs.h b/include/regs.h index 61f1ad6426..335861f25d 100644 --- a/include/regs.h +++ b/include/regs.h @@ -48,6 +48,7 @@ #define R_ENV_Z_FAR REG(13) #define R_ENV_FOG_NEAR REG(14) #define R_ENV_TIME_SPEED_OLD REG(15) // Most likely used during development. Unused in the final game. +#define R_DECELERATE_RATE REG(43) #define R_RUN_SPEED_LIMIT REG(45) #define R_ENABLE_ARENA_DBG SREG(0) #define R_AUDIOMGR_DEBUG_LEVEL SREG(20) diff --git a/include/z64player.h b/include/z64player.h index a081506178..3f79d7ca55 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -881,6 +881,7 @@ typedef struct Player { /* 0x0850 */ union { s16 actionVar2; + s16 fallDamageStunTimer; // Player_Action_Idle: Prevents any movement and shakes model up and down quickly to indicate fall damage stun s16 bonked; // Player_Action_Roll: set to true after bonking into a wall or an actor } av2; // "Action Variable 2": context dependent variable that has different meanings depending on what action is currently running diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index d7ec54bd03..1699dd2003 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -24,8 +24,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = { FRAMERATE_CONST(270, 324), // REG(36) 600, // REG(37) FRAMERATE_CONST(350, 420), // REG(38) - 800, // REG(43) - 600, // REG(45) + 800, // R_DECELERATE_RATE + 600, // R_RUN_SPEED_LIMIT -100, // REG(68) 600, // REG(69) 590, // IREG(66) @@ -44,8 +44,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = { FRAMERATE_CONST(270, 324), // REG(36) 1000, // REG(37) FRAMERATE_CONST(0, 0), // REG(38) - 800, // REG(43) - 300, // REG(45) + 800, // R_DECELERATE_RATE + 300, // R_RUN_SPEED_LIMIT -160, // REG(68) 600, // REG(69) 590, // IREG(66) @@ -64,8 +64,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = { FRAMERATE_CONST(270, 324), // REG(36) 600, // REG(37) FRAMERATE_CONST(600, 720), // REG(38) - 800, // REG(43) - 550, // REG(45) + 800, // R_DECELERATE_RATE + 550, // R_RUN_SPEED_LIMIT -100, // REG(68) 600, // REG(69) 540, // IREG(66) @@ -84,8 +84,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = { FRAMERATE_CONST(400, 480), // REG(36) 0, // REG(37) FRAMERATE_CONST(300, 360), // REG(38) - 800, // REG(43) - 500, // REG(45) + 800, // R_DECELERATE_RATE + 500, // R_RUN_SPEED_LIMIT -100, // REG(68) 600, // REG(69) 590, // IREG(66) @@ -104,8 +104,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = { FRAMERATE_CONST(270, 324), // REG(36) 600, // REG(37) FRAMERATE_CONST(50, 60), // REG(38) - 800, // REG(43) - 550, // REG(45) + 800, // R_DECELERATE_RATE + 550, // R_RUN_SPEED_LIMIT -40, // REG(68) 400, // REG(69) 540, // IREG(66) @@ -124,8 +124,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = { FRAMERATE_CONST(400, 480), // REG(36) 800, // REG(37) FRAMERATE_CONST(400, 480), // REG(38) - 800, // REG(43) - 550, // REG(45) + 800, // R_DECELERATE_RATE + 550, // R_RUN_SPEED_LIMIT -100, // REG(68) 600, // REG(69) 540, // IREG(66) @@ -589,8 +589,8 @@ void Player_SetBootData(PlayState* play, Player* this) { REG(36) = bootRegs[5]; REG(37) = bootRegs[6]; REG(38) = bootRegs[7]; - REG(43) = bootRegs[8]; - REG(45) = bootRegs[9]; + R_DECELERATE_RATE = bootRegs[8]; + R_RUN_SPEED_LIMIT = bootRegs[9]; REG(68) = bootRegs[10]; REG(69) = bootRegs[11]; IREG(66) = bootRegs[12]; @@ -600,7 +600,7 @@ void Player_SetBootData(PlayState* play, Player* this) { MREG(95) = bootRegs[16]; if (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_2) { - REG(45) = 500; + R_RUN_SPEED_LIMIT = 500; } } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index a8ec061289..016fd87902 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -267,7 +267,7 @@ void func_80853148(PlayState* play, Actor* actor); void Player_Action_80840450(Player* this, PlayState* play); void Player_Action_808407CC(Player* this, PlayState* play); -void Player_Action_80840BC8(Player* this, PlayState* play); +void Player_Action_Idle(Player* this, PlayState* play); void Player_Action_80840DE4(Player* this, PlayState* play); void Player_Action_808414F8(Player* this, PlayState* play); void Player_Action_8084170C(Player* this, PlayState* play); @@ -4095,8 +4095,14 @@ s32 Player_CalcSpeedAndYawFromControlStick(PlayState* play, Player* this, f32* o return false; } -s32 func_8083721C(Player* this) { - return Math_StepToF(&this->speedXZ, 0.0f, REG(43) / 100.0f); +/** + * Steps speed toward zero to at a rate defined by current boot data. + * After zero is reached, speed will be held at zero. + * + * @return true if speed is 0, false otherwise + */ +s32 Player_DecelerateToZero(Player* this) { + return Math_StepToF(&this->speedXZ, 0.0f, R_DECELERATE_RATE / 100.0f); } /** @@ -4182,7 +4188,7 @@ static s8 sActionHandlerList6[] = { -PLAYER_ACTION_HANDLER_7, }; -static s8 sActionHandlerList7[] = { +static s8 sActionHandlerListIdle[] = { PLAYER_ACTION_HANDLER_0, PLAYER_ACTION_HANDLER_11, PLAYER_ACTION_HANDLER_1, PLAYER_ACTION_HANDLER_2, PLAYER_ACTION_HANDLER_3, PLAYER_ACTION_HANDLER_5, PLAYER_ACTION_HANDLER_TALK, PLAYER_ACTION_HANDLER_9, PLAYER_ACTION_HANDLER_8, PLAYER_ACTION_HANDLER_7, -PLAYER_ACTION_HANDLER_ROLL, @@ -4312,14 +4318,14 @@ typedef enum PlayerActionInterruptResult { /** * An Action Interrupt allows for ending an action early, toward the end of an animation. * - * First, `sActionHandlerList7` will be checked to see if any of those actions should be used. + * First, `sActionHandlerListIdle` will be checked to see if any of those actions should be used. * It should be noted that the `updateUpperBody` argument passed to `Player_TryActionHandlerList` * is `true`. This means that an item can be used during the interrupt window. * * If no actions from the Action Handler List are used, then the control stick is checked to see if * any movement should occur. * - * Note that while this function can set up a new action with `sActionHandlerList7`, this function + * Note that while this function can set up a new action with `sActionHandlerListIdle`, this function * will not set up an appropriate action for moving. * It is the callers responsibility to react accordingly to `PLAYER_INTERRUPT_MOVE`. * @@ -4331,7 +4337,7 @@ s32 Player_TryActionInterrupt(PlayState* play, Player* this, SkelAnime* skelAnim s16 yawTarget; if ((skelAnime->endFrame - frameRange) <= skelAnime->curFrame) { - if (Player_TryActionHandlerList(play, this, sActionHandlerList7, true)) { + if (Player_TryActionHandlerList(play, this, sActionHandlerListIdle, true)) { return PLAYER_INTERRUPT_NEW_ACTION; } @@ -5571,7 +5577,7 @@ void func_80839FFC(Player* this, PlayState* play) { } else if (Player_FriendlyLockOnOrParallel(this)) { actionFunc = Player_Action_808407CC; } else { - actionFunc = Player_Action_80840BC8; + actionFunc = Player_Action_Idle; } Player_SetupAction(play, this, actionFunc, 1); @@ -5579,6 +5585,7 @@ void func_80839FFC(Player* this, PlayState* play) { void func_8083A060(Player* this, PlayState* play) { func_80839FFC(this, play); + if (Player_CheckHostileLockOn(this)) { this->av2.actionVar2 = 1; } @@ -6434,7 +6441,7 @@ void func_8083C0B8(Player* this, PlayState* play) { } void func_8083C0E8(Player* this, PlayState* play) { - Player_SetupAction(play, this, Player_Action_80840BC8, 1); + Player_SetupAction(play, this, Player_Action_Idle, 1); Player_AnimPlayOnce(play, this, Player_GetIdleAnim(this)); this->yaw = this->actor.shape.rot.y; } @@ -6533,7 +6540,7 @@ s32 func_8083C484(Player* this, f32* arg1, s16* arg2) { s16 yaw = this->yaw - *arg2; if (ABS(yaw) > 0x6000) { - if (func_8083721C(this)) { + if (Player_DecelerateToZero(this)) { *arg1 = 0.0f; *arg2 = this->yaw; } else { @@ -6752,7 +6759,7 @@ void func_8083CD54(PlayState* play, Player* this, s16 yaw) { void func_8083CE0C(Player* this, PlayState* play) { LinkAnimationHeader* anim; - Player_SetupAction(play, this, Player_Action_80840BC8, 1); + Player_SetupAction(play, this, Player_Action_Idle, 1); if (this->unk_870 < 0.5f) { anim = GET_PLAYER_ANIM(PLAYER_ANIMGROUP_waitR2wait, this->modelAnimType); @@ -8045,7 +8052,7 @@ void Player_Action_80840450(Player* this, PlayState* play) { func_808401B0(play, this); } - func_8083721C(this); + Player_DecelerateToZero(this); if (!Player_TryActionHandlerList(play, this, sActionHandlerList1, true)) { if (!Player_UpdateHostileLockOn(this) && @@ -8112,7 +8119,7 @@ void Player_Action_808407CC(Player* this, PlayState* play) { Player_AnimPlayOnce(play, this, Player_GetIdleAnim(this)); } - func_8083721C(this); + Player_DecelerateToZero(this); if (!Player_TryActionHandlerList(play, this, sActionHandlerList2, true)) { if (Player_UpdateHostileLockOn(this)) { @@ -8121,7 +8128,7 @@ void Player_Action_808407CC(Player* this, PlayState* play) { } if (!Player_FriendlyLockOnOrParallel(this)) { - Player_SetupActionPreserveAnimMovement(play, this, Player_Action_80840BC8, 1); + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_Idle, 1); this->yaw = this->actor.shape.rot.y; return; } @@ -8249,34 +8256,37 @@ void Player_ChooseNextIdleAnim(PlayState* play, Player* this) { ANIMMODE_ONCE, -6.0f); } -void Player_Action_80840BC8(Player* this, PlayState* play) { +void Player_Action_Idle(Player* this, PlayState* play) { s32 idleAnimResult = Player_CheckForIdleAnim(this); - s32 sp40 = LinkAnimation_Update(play, &this->skelAnime); + s32 animDone = LinkAnimation_Update(play, &this->skelAnime); f32 speedTarget; s16 yawTarget; - s16 temp; + s16 yawDiff; if (idleAnimResult > IDLE_ANIM_NONE) { Player_ProcessFidgetAnimSfxList(this, idleAnimResult - 1); } - if (sp40 != 0) { - if (this->av2.actionVar2 != 0) { - if (DECR(this->av2.actionVar2) == 0) { + if (animDone) { + if (this->av2.fallDamageStunTimer != 0) { + if (DECR(this->av2.fallDamageStunTimer) == 0) { this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; } + + // Offset model y position. + // Depending on if the timer is even or odd, the offset will be 40 or -40 model space units. this->skelAnime.jointTable[0].y = - (this->skelAnime.jointTable[0].y + ((this->av2.actionVar2 & 1) * 0x50)) - 0x28; + (this->skelAnime.jointTable[0].y + ((this->av2.fallDamageStunTimer & 1) * 80)) - 40; } else { Player_FinishAnimMovement(this); Player_ChooseNextIdleAnim(play, this); } } - func_8083721C(this); + Player_DecelerateToZero(this); - if (this->av2.actionVar2 == 0) { - if (!Player_TryActionHandlerList(play, this, sActionHandlerList7, true)) { + if (this->av2.fallDamageStunTimer == 0) { + if (!Player_TryActionHandlerList(play, this, sActionHandlerListIdle, true)) { if (Player_UpdateHostileLockOn(this)) { func_8083CEAC(this, play); return; @@ -8294,14 +8304,16 @@ void Player_Action_80840BC8(Player* this, PlayState* play) { return; } - temp = yawTarget - this->actor.shape.rot.y; - if (ABS(temp) > 800) { + yawDiff = yawTarget - this->actor.shape.rot.y; + + if (ABS(yawDiff) > 800) { func_8083CD54(play, this, yawTarget); return; } Math_ScaledStepToS(&this->actor.shape.rot.y, yawTarget, 1200); this->yaw = this->actor.shape.rot.y; + if (Player_GetIdleAnim(this) == this->skelAnime.animation) { func_8083DC54(this, play); } @@ -8454,7 +8466,7 @@ s32 func_80841458(Player* this, f32* arg1, s16* arg2, PlayState* play) { } if (*arg1 != 0.0f) { - if (func_8083721C(this)) { + if (Player_DecelerateToZero(this)) { *arg1 = 0.0f; *arg2 = this->yaw; } else { @@ -8515,7 +8527,7 @@ void Player_Action_8084170C(Player* this, PlayState* play) { s16 yawTarget; sp34 = LinkAnimation_Update(play, &this->skelAnime); - func_8083721C(this); + Player_DecelerateToZero(this); if (!Player_TryActionHandlerList(play, this, sActionHandlerList4, true)) { Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play); @@ -8815,7 +8827,7 @@ void Player_Action_808423EC(Player* this, PlayState* play) { Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play); if ((this->skelAnime.morphWeight == 0.0f) && (this->skelAnime.curFrame > 5.0f)) { - func_8083721C(this); + Player_DecelerateToZero(this); if ((this->skelAnime.curFrame > 10.0f) && (func_8083FC68(this, speedTarget, yawTarget) < 0)) { func_8083CBF0(this, yawTarget, play); @@ -8836,7 +8848,7 @@ void Player_Action_8084251C(Player* this, PlayState* play) { sp34 = LinkAnimation_Update(play, &this->skelAnime); - func_8083721C(this); + Player_DecelerateToZero(this); if (!Player_TryActionHandlerList(play, this, sActionHandlerList10, true)) { Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play); @@ -9115,7 +9127,7 @@ void Player_Action_80843188(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_22; } - func_8083721C(this); + Player_DecelerateToZero(this); if (this->av2.actionVar2 != 0) { f32 sp54; @@ -9202,7 +9214,7 @@ void Player_Action_808435C4(Player* this, PlayState* play) { LinkAnimationHeader* anim; f32 frames; - func_8083721C(this); + Player_DecelerateToZero(this); if (this->av1.actionVar1 == 0) { sUpperBodyIsBusy = Player_UpdateUpperBody(this, play); @@ -9229,7 +9241,7 @@ void Player_Action_808435C4(Player* this, PlayState* play) { void Player_Action_8084370C(Player* this, PlayState* play) { s32 interruptResult; - func_8083721C(this); + Player_DecelerateToZero(this); interruptResult = Player_TryActionInterrupt(play, this, &this->skelAnime, 16.0f); @@ -9292,7 +9304,7 @@ void Player_Action_80843954(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_5 | PLAYER_STATE2_6; func_808382BC(this); - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime) && (this->speedXZ == 0.0f)) { if (this->stateFlags1 & PLAYER_STATE1_29) { @@ -9393,7 +9405,7 @@ void Player_Action_80843CEC(Player* this, PlayState* play) { } } - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime)) { if (this->actor.category == ACTORCAT_PLAYER) { @@ -9605,10 +9617,15 @@ void Player_Action_8084411C(Player* this, PlayState* play) { if (sp3C > 0) { func_8083A098(this, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_landing, this->modelAnimType), play); this->skelAnime.endFrame = 8.0f; + + // `func_8083A098` above can choose from a few different "idle" action variants. + // However `fallDamageStunTimer` is only processed by `Player_Action_Idle`. + // This means it is possible for the stun to not take effect + // (for example, by holding Z when landing). if (sp3C == 1) { - this->av2.actionVar2 = 10; + this->av2.fallDamageStunTimer = 10; } else { - this->av2.actionVar2 = 20; + this->av2.fallDamageStunTimer = 20; } } else if (sp3C == 0) { func_8083A098(this, anim, play); @@ -9828,7 +9845,7 @@ void Player_Action_80844E68(Player* this, PlayState* play) { this->av2.actionVar2 = -1; } - func_8083721C(this); + Player_DecelerateToZero(this); if (!func_80842964(this, play) && (this->av2.actionVar2 != 0)) { func_80844E3C(this); @@ -10252,7 +10269,7 @@ void Player_Action_80845EF8(Player* this, PlayState* play) { } void Player_Action_80846050(Player* this, PlayState* play) { - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime)) { func_80839F90(this, play); @@ -10305,7 +10322,7 @@ void Player_Action_80846120(Player* this, PlayState* play) { } void Player_Action_80846260(Player* this, PlayState* play) { - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime)) { Player_AnimPlayLoop(play, this, &gPlayerAnim_link_silver_wait); @@ -10362,7 +10379,7 @@ void Player_Action_80846408(Player* this, PlayState* play) { } void Player_Action_808464B0(Player* this, PlayState* play) { - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime)) { func_80839F90(this, play); @@ -10387,7 +10404,7 @@ void Player_Action_80846578(Player* this, PlayState* play) { f32 speedTarget; s16 yawTarget; - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime) || ((this->skelAnime.curFrame >= 8.0f) && @@ -12398,7 +12415,7 @@ void Player_Action_8084B1D8(Player* this, PlayState* play) { func_8084B000(this); func_8084AEEC(this, &this->speedXZ, 0, this->actor.shape.rot.y); } else { - func_8083721C(this); + Player_DecelerateToZero(this); } if ((this->unk_6AD == 2) && (func_8002DD6C(this) || func_808332E4(this))) { @@ -13532,7 +13549,7 @@ void Player_Action_8084DC48(Player* this, PlayState* play) { this->actor.velocity.y = -2.0f; } - func_8083721C(this); + Player_DecelerateToZero(this); return; } @@ -13758,7 +13775,7 @@ void Player_Action_8084E604(Player* this, PlayState* play) { Player_PlayVoiceSfx(this, NA_SE_VO_LI_SWORD_N); } - func_8083721C(this); + Player_DecelerateToZero(this); } static AnimSfxEntry D_808549E0[] = { @@ -13956,7 +13973,7 @@ void Player_Action_8084ECA4(Player* this, PlayState* play) { s32 i; sp24 = &D_80854554[this->av2.actionVar2]; - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime)) { if (this->av1.actionVar1 != 0) { @@ -14045,7 +14062,7 @@ static AnimSfxEntry D_80854A34[] = { }; void Player_Action_8084EFC0(Player* this, PlayState* play) { - func_8083721C(this); + Player_DecelerateToZero(this); if (LinkAnimation_Update(play, &this->skelAnime)) { func_8083C0E8(this, play); @@ -14594,7 +14611,7 @@ void Player_Action_808502D0(Player* this, PlayState* play) { void Player_Action_808505DC(Player* this, PlayState* play) { LinkAnimation_Update(play, &this->skelAnime); - func_8083721C(this); + Player_DecelerateToZero(this); if (this->skelAnime.curFrame >= 6.0f) { func_80839FFC(this, play); @@ -14757,7 +14774,7 @@ void Player_Action_808507F4(Player* this, PlayState* play) { } } - func_8083721C(this); + Player_DecelerateToZero(this); } void Player_Action_80850AEC(Player* this, PlayState* play) { @@ -14823,7 +14840,7 @@ void Player_Action_80850C68(Player* this, PlayState* play) { this->av2.actionVar2 = 1; } - func_8083721C(this); + Player_DecelerateToZero(this); if (this->unk_860 == 0) { func_80853080(this, play); @@ -15465,7 +15482,7 @@ void func_80851CA4(PlayState* play, Player* this, CsCmdActorCue* cue) { } if (this->av2.actionVar2 != 0) { - func_8083721C(this); + Player_DecelerateToZero(this); } } @@ -15991,7 +16008,7 @@ s32 Player_TryCsAction(PlayState* play, Actor* actor, s32 csAction) { } void func_80853080(Player* this, PlayState* play) { - Player_SetupAction(play, this, Player_Action_80840BC8, 1); + Player_SetupAction(play, this, Player_Action_Idle, 1); Player_AnimChangeOnceMorph(play, this, Player_GetIdleAnim(this)); this->yaw = this->actor.shape.rot.y; } From 53c57599a4b2116a2900465f2567b2da21147c3e Mon Sep 17 00:00:00 2001 From: fig02 Date: Thu, 10 Oct 2024 22:04:30 -0400 Subject: [PATCH 11/12] Name talking action related things (#2260) * name talking related things * Player_Action_TalkExchangeItem -> Player_Action_ExchangeItem * splitting action stuff to new PR * format --- include/z64player.h | 4 +- src/code/z_actor.c | 18 ++--- .../ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c | 2 +- .../ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 2 +- .../actors/ovl_En_Nutsball/z_en_nutsball.c | 2 +- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 2 +- .../actors/ovl_player_actor/z_player.c | 81 +++++++++++-------- 9 files changed, 63 insertions(+), 52 deletions(-) diff --git a/include/z64player.h b/include/z64player.h index 3f79d7ca55..8b9ea8ce56 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -675,7 +675,7 @@ typedef struct WeaponInfo { #define PLAYER_STATE1_3 (1 << 3) #define PLAYER_STATE1_HOSTILE_LOCK_ON (1 << 4) // Currently locked onto a hostile actor. Triggers a "battle" variant of many actions. #define PLAYER_STATE1_5 (1 << 5) -#define PLAYER_STATE1_6 (1 << 6) +#define PLAYER_STATE1_TALKING (1 << 6) // Currently talking to an actor. This includes item exchanges. #define PLAYER_STATE1_DEAD (1 << 7) // Player has died. Note that this gets set when the death cutscene has started, after landing from the air. #define PLAYER_STATE1_START_CHANGING_HELD_ITEM (1 << 8) // Item change process has begun #define PLAYER_STATE1_9 (1 << 9) @@ -903,7 +903,7 @@ typedef struct Player { /* 0x0888 */ f32 distToInteractWall; // xyz distance to the interact wall /* 0x088C */ u8 ledgeClimbType; /* 0x088D */ u8 ledgeClimbDelayTimer; - /* 0x088E */ u8 unk_88E; + /* 0x088E */ u8 textboxBtnCooldownTimer; // Prevents usage of A/B/C-up when counting down /* 0x088F */ u8 damageFlickerAnimCounter; // Used to flicker Link after taking damage /* 0x0890 */ u8 unk_890; /* 0x0891 */ u8 bodyShockTimer; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index cbe84c927e..49ee50fbe8 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -389,7 +389,7 @@ void Attention_Draw(Attention* attention, PlayState* play) { Attention_SetReticlePos(attention, attention->curReticle, projectedPos.x, projectedPos.y, projectedPos.z); - if (!(player->stateFlags1 & PLAYER_STATE1_6) || (actor != player->focusActor)) { + if (!(player->stateFlags1 & PLAYER_STATE1_TALKING) || (actor != player->focusActor)) { OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57); for (i = 0, curReticle = attention->curReticle; i < numReticles; @@ -2308,29 +2308,29 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* play u32 sCategoryFreezeMasks[ACTORCAT_MAX] = { // ACTORCAT_SWITCH - PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28, + PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28, // ACTORCAT_BG - PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28, + PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28, // ACTORCAT_PLAYER 0, // ACTORCAT_EXPLOSIVE - PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28, + PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28, // ACTORCAT_NPC PLAYER_STATE1_DEAD, // ACTORCAT_ENEMY - PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29, + PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29, // ACTORCAT_PROP PLAYER_STATE1_DEAD | PLAYER_STATE1_28, // ACTORCAT_ITEMACTION 0, // ACTORCAT_MISC - PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29, + PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29, // ACTORCAT_BOSS - PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28, + PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28, // ACTORCAT_DOOR 0, // ACTORCAT_CHEST - PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28, + PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28, }; void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { @@ -2381,7 +2381,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { requiredActorFlag = ACTOR_FLAG_25; } - if ((player->stateFlags1 & PLAYER_STATE1_6) && ((player->actor.textId & 0xFF00) != 0x600)) { + if ((player->stateFlags1 & PLAYER_STATE1_TALKING) && ((player->actor.textId & 0xFF00) != 0x600)) { sp74 = player->talkActor; } diff --git a/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c b/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c index 3ac31d0c5c..4bb944cb9d 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c +++ b/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c @@ -289,7 +289,7 @@ void BgHakaSgami_Update(Actor* thisx, PlayState* play) { BgHakaSgami* this = (BgHakaSgami*)thisx; Player* player = GET_PLAYER(play); - if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) || + if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) || (this->actionFunc == BgHakaSgami_SetupSpin)) { this->actionFunc(this, play); } diff --git a/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c b/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c index 4b49c9b87b..9e2a0d9ad4 100644 --- a/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c +++ b/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c @@ -200,7 +200,7 @@ void BgJyaGoroiwa_Update(Actor* thisx, PlayState* play) { s32 bgId; Vec3f checkPos; - if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) { + if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) { this->actionFunc(this, play); BgJyaGoroiwa_UpdateRotation(this); checkPos.x = this->actor.world.pos.x; diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index e34ea1fae9..1cfb4255d3 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -915,7 +915,7 @@ void DoorShutter_Update(Actor* thisx, PlayState* play) { DoorShutter* this = (DoorShutter*)thisx; Player* player = GET_PLAYER(play); - if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28)) || + if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28)) || (this->actionFunc == DoorShutter_WaitForObject)) { this->actionFunc(this, play); } diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c index a4f7d74c1e..209b0b7c4d 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -739,7 +739,7 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) { s32 pad; s32 bgId; - if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) { + if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) { if (this->collisionDisabledTimer > 0) { this->collisionDisabledTimer--; } diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index 5a89a5e2b3..d2f6fbdea6 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -147,7 +147,7 @@ void EnNutsball_Update(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); s32 pad; - if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) || + if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) || (this->actionFunc == func_80ABBB34)) { this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 04450335d0..45b047f53f 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -578,7 +578,7 @@ void EnOkuta_Update(Actor* thisx, PlayState* play2) { Vec3f prevPos; s32 canRestorePrevPos; - if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) { + if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) { if (this->actor.params == 0) { EnOkuta_ColliderCheck(this, play); if (!WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 016fd87902..d9f846fa38 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -263,7 +263,7 @@ s32 func_80852F38(PlayState* play, Player* this); s32 Player_TryCsAction(PlayState* play, Actor* actor, s32 csAction); void func_80853080(Player* this, PlayState* play); s32 Player_InflictDamage(PlayState* play, s32 damage); -void func_80853148(PlayState* play, Actor* actor); +void Player_StartTalking(PlayState* play, Actor* actor); void Player_Action_80840450(Player* this, PlayState* play); void Player_Action_808407CC(Player* this, PlayState* play); @@ -305,7 +305,7 @@ void Player_Action_80846408(Player* this, PlayState* play); void Player_Action_808464B0(Player* this, PlayState* play); void Player_Action_80846578(Player* this, PlayState* play); void Player_Action_8084B1D8(Player* this, PlayState* play); -void Player_Action_8084B530(Player* this, PlayState* play); +void Player_Action_Talk(Player* this, PlayState* play); void Player_Action_8084B78C(Player* this, PlayState* play); void Player_Action_8084B898(Player* this, PlayState* play); void Player_Action_8084B9E4(Player* this, PlayState* play); @@ -333,7 +333,7 @@ void Player_Action_8084EAC0(Player* this, PlayState* play); void Player_Action_8084ECA4(Player* this, PlayState* play); void Player_Action_8084EED8(Player* this, PlayState* play); void Player_Action_8084EFC0(Player* this, PlayState* play); -void Player_Action_8084F104(Player* this, PlayState* play); +void Player_Action_ExchangeItem(Player* this, PlayState* play); void Player_Action_8084F390(Player* this, PlayState* play); void Player_Action_8084F608(Player* this, PlayState* play); void Player_Action_8084F698(Player* this, PlayState* play); @@ -1731,7 +1731,7 @@ BAD_RETURN(s32) func_80832224(Player* this) { this->unk_6AD = 0; } -s32 func_8083224C(PlayState* play) { +s32 Player_IsTalking(PlayState* play) { Player* this = GET_PLAYER(play); return CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK); @@ -3438,8 +3438,8 @@ s32 Player_SetupAction(PlayState* play, Player* this, PlayerActionFunc actionFun Player_FinishAnimMovement(this); - this->stateFlags1 &= ~(PLAYER_STATE1_2 | PLAYER_STATE1_6 | PLAYER_STATE1_26 | PLAYER_STATE1_28 | PLAYER_STATE1_29 | - PLAYER_STATE1_31); + this->stateFlags1 &= ~(PLAYER_STATE1_2 | PLAYER_STATE1_TALKING | PLAYER_STATE1_26 | PLAYER_STATE1_28 | + PLAYER_STATE1_29 | PLAYER_STATE1_31); this->stateFlags2 &= ~(PLAYER_STATE2_19 | PLAYER_STATE2_27 | PLAYER_STATE2_IDLE_FIDGET); this->stateFlags3 &= ~(PLAYER_STATE3_1 | PLAYER_STATE3_3 | PLAYER_STATE3_FLYING_WITH_HOOKSHOT); @@ -3914,7 +3914,7 @@ void Player_UpdateZTargeting(Player* this, PlayState* play) { ignoreLeash = true; } - isTalking = func_8083224C(play); + isTalking = Player_IsTalking(play); if (isTalking || (this->zTargetActiveTimer != 0) || (this->stateFlags1 & (PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_BOOMERANG_THROWN))) { @@ -5376,7 +5376,7 @@ s32 Player_ActionHandler_1(Player* this, PlayState* play) { if (this->doorType <= PLAYER_DOORTYPE_AJAR) { doorActor->textId = 0xD0; - func_80853148(play, doorActor); + Player_StartTalking(play, doorActor); return 0; } @@ -5641,10 +5641,10 @@ void func_8083A0F4(PlayState* play, Player* this) { } } -void func_8083A2F8(PlayState* play, Player* this) { - Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084B530, 0); +void Player_SetupTalk(PlayState* play, Player* this) { + Player_SetupActionPreserveAnimMovement(play, this, Player_Action_Talk, 0); - this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_29; + this->stateFlags1 |= PLAYER_STATE1_TALKING | PLAYER_STATE1_29; if (this->actor.textId != 0) { Message_StartTextbox(play, this->actor.textId, this->talkActor); @@ -6050,14 +6050,14 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) { (this->exchangeItemId == EXCH_ITEM_BOTTLE_BLUE_FIRE))))))) { if ((play->actorCtx.titleCtx.delayTimer == 0) && (play->actorCtx.titleCtx.alpha == 0)) { - Player_SetupActionPreserveItemAction(play, this, Player_Action_8084F104, 0); + Player_SetupActionPreserveItemAction(play, this, Player_Action_ExchangeItem, 0); if (sp2C >= 0) { giEntry = &sGetItemTable[D_80854528[sp2C] - 1]; func_8083AE40(this, giEntry->objectId); } - this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_28 | PLAYER_STATE1_29; + this->stateFlags1 |= PLAYER_STATE1_TALKING | PLAYER_STATE1_28 | PLAYER_STATE1_29; if (sp2C >= 0) { sp2C = sp2C + 1; @@ -6255,7 +6255,7 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) { // This is especially important to prevent unwanted behavior with regards to mask trading. this->currentMask = sSavedCurrentMask; - func_80853148(play, talkOfferActor); + Player_StartTalking(play, talkOfferActor); return true; } @@ -10653,7 +10653,7 @@ void Player_Init(Actor* thisx, PlayState* play2) { play->tryPlayerCsAction = Player_TryCsAction; play->func_11D54 = func_80853080; play->damagePlayer = Player_InflictDamage; - play->talkWithPlayer = func_80853148; + play->talkWithPlayer = Player_StartTalking; thisx->room = -1; this->ageProperties = &sAgeProperties[gSaveContext.save.linkAge]; @@ -11628,8 +11628,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { this->unk_A73--; } - if (this->unk_88E != 0) { - this->unk_88E--; + if (this->textboxBtnCooldownTimer != 0) { + this->textboxBtnCooldownTimer--; } if (this->unk_A87 != 0) { @@ -12069,7 +12069,9 @@ void Player_Update(Actor* thisx, PlayState* play) { } else { input = play->state.input[0]; - if (this->unk_88E != 0) { + if (this->textboxBtnCooldownTimer != 0) { + // Prevent the usage of A/B/C-up. + // Helps avoid accidental inputs when mashing to close the final textbox. input.cur.button &= ~(BTN_A | BTN_B | BTN_CUP); input.press.button &= ~(BTN_A | BTN_B | BTN_CUP); } @@ -12480,8 +12482,9 @@ s32 func_8084B4D4(PlayState* play, Player* this) { return 0; } -void Player_Action_8084B530(Player* this, PlayState* play) { +void Player_Action_Talk(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_5; + Player_UpdateUpperBody(this, play); if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { @@ -12507,7 +12510,7 @@ void Player_Action_8084B530(Player* this, PlayState* play) { } } - this->unk_88E = 10; + this->textboxBtnCooldownTimer = 10; return; } @@ -12518,6 +12521,7 @@ void Player_Action_8084B530(Player* this, PlayState* play) { } else if (!Player_CheckHostileLockOn(this) && LinkAnimation_Update(play, &this->skelAnime)) { if (this->skelAnime.movementFlags != 0) { Player_FinishAnimMovement(this); + if ((this->talkActor->category == ACTORCAT_NPC) && (this->heldItemAction != PLAYER_IA_FISHING_POLE)) { Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_normal_talk_free); } else { @@ -13205,7 +13209,7 @@ void Player_Action_8084CC98(Player* this, PlayState* play) { } if (this->av2.actionVar2 == 1) { - if (sUpperBodyIsBusy || func_8083224C(play)) { + if (sUpperBodyIsBusy || Player_IsTalking(play)) { Player_AnimPlayOnce(play, this, &gPlayerAnim_link_uma_wait_3); } else if (LinkAnimation_Update(play, &this->skelAnime)) { this->av2.actionVar2 = 99; @@ -13240,7 +13244,7 @@ void Player_Action_8084CC98(Player* this, PlayState* play) { this->yaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y; if ((this->csAction != PLAYER_CSACTION_NONE) || - (!func_8083224C(play) && ((rideActor->actor.speed != 0.0f) || !Player_ActionHandler_Talk(this, play)) && + (!Player_IsTalking(play) && ((rideActor->actor.speed != 0.0f) || !Player_ActionHandler_Talk(this, play)) && !Player_ActionHandler_Roll(this, play))) { if (!sUpperBodyIsBusy) { if (this->av1.actionVar1 != 0) { @@ -13380,7 +13384,7 @@ void Player_Action_8084D610(Player* this, PlayState* play) { func_80832CB0(play, this, &gPlayerAnim_link_swimer_swim_wait); func_8084B000(this); - if (!func_8083224C(play) && !Player_TryActionHandlerList(play, this, sActionHandlerList11, true) && + if (!Player_IsTalking(play) && !Player_TryActionHandlerList(play, this, sActionHandlerList11, true) && !func_8083D12C(play, this, sControlInput)) { f32 speedTarget; s16 yawTarget; @@ -13727,11 +13731,11 @@ void Player_Action_8084E3C4(Player* this, PlayState* play) { Camera_SetFinishedFlag(Play_GetCamera(play, CAM_ID_MAIN)); if ((this->talkActor != NULL) && (this->talkActor == this->unk_6A8)) { - func_80853148(play, this->talkActor); + Player_StartTalking(play, this->talkActor); } else if (this->naviTextId < 0) { this->talkActor = this->naviActor; this->naviActor->textId = -this->naviTextId; - func_80853148(play, this->talkActor); + Player_StartTalking(play, this->talkActor); } else if (!Player_ActionHandler_13(this, play)) { func_8083A098(this, &gPlayerAnim_link_normal_okarina_end, play); } @@ -13804,7 +13808,7 @@ void Player_Action_8084E6D4(Player* this, PlayState* play) { this->exchangeItemId = EXCH_ITEM_NONE; if (func_8084B4D4(play, this) == 0) { - func_80853148(play, this->talkActor); + Player_StartTalking(play, this->talkActor); } } else { func_8084DFAC(play, this); @@ -14085,7 +14089,7 @@ static AnimSfxEntry D_80854A3C[] = { { NA_SE_PL_PUT_OUT_ITEM, -ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 30) }, }; -void Player_Action_8084F104(Player* this, PlayState* play) { +void Player_Action_ExchangeItem(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_5; if (LinkAnimation_Update(play, &this->skelAnime)) { @@ -14099,7 +14103,7 @@ void Player_Action_8084F104(Player* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_TALK; } - func_80853148(play, talkActor); + Player_StartTalking(play, talkActor); } else { GetItemEntry* giEntry = &sGetItemTable[D_80854528[this->exchangeItemId - 1] - 1]; @@ -16024,8 +16028,13 @@ s32 Player_InflictDamage(PlayState* play, s32 damage) { return 0; } -// Start talking with the given actor -void func_80853148(PlayState* play, Actor* actor) { +/** + * Start talking to the specified actor. + * + * This function does not concern trading exchange items. + * For item exchanges see relevant code in `Player_ActionChange_13` and `Player_Action_ExchangeItem`. + */ +void Player_StartTalking(PlayState* play, Actor* actor) { Player* this = GET_PLAYER(play); s32 pad; @@ -16038,6 +16047,8 @@ void func_80853148(PlayState* play, Actor* actor) { this->exchangeItemId = EXCH_ITEM_NONE; if (actor->textId == 0xFFFF) { + // Player will stand and look at the actor with no text appearing. + // This can be used to delay text from appearing, for example. Player_SetCsActionWithHaltedActors(play, actor, PLAYER_CSACTION_1); actor->flags |= ACTOR_FLAG_TALK; Player_PutAwayHeldItem(play, this); @@ -16053,15 +16064,15 @@ void func_80853148(PlayState* play, Actor* actor) { s32 sp24 = this->av2.actionVar2; Player_PutAwayHeldItem(play, this); - func_8083A2F8(play, this); + Player_SetupTalk(play, this); this->av2.actionVar2 = sp24; } else { if (func_808332B8(this)) { - Player_SetupWaitForPutAway(play, this, func_8083A2F8); + Player_SetupWaitForPutAway(play, this, Player_SetupTalk); Player_AnimChangeLoopSlowMorph(play, this, &gPlayerAnim_link_swimer_swim_wait); } else if ((actor->category != ACTORCAT_NPC) || (this->heldItemAction == PLAYER_IA_FISHING_POLE)) { - func_8083A2F8(play, this); + Player_SetupTalk(play, this); if (!Player_CheckHostileLockOn(this)) { if ((actor != this->naviActor) && (actor->xzDistToPlayer < 40.0f)) { @@ -16071,7 +16082,7 @@ void func_80853148(PlayState* play, Actor* actor) { } } } else { - Player_SetupWaitForPutAway(play, this, func_8083A2F8); + Player_SetupWaitForPutAway(play, this, Player_SetupTalk); Player_AnimPlayOnceAdjusted(play, this, (actor->xzDistToPlayer < 40.0f) ? &gPlayerAnim_link_normal_backspace : &gPlayerAnim_link_normal_talk_free); @@ -16085,7 +16096,7 @@ void func_80853148(PlayState* play, Actor* actor) { func_80832224(this); } - this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_29; + this->stateFlags1 |= PLAYER_STATE1_TALKING | PLAYER_STATE1_29; } if ((this->naviActor == this->talkActor) && ((this->talkActor->textId & 0xFF00) != 0x200)) { From 746adfc727e9429b255dcea3c15a3f5c26d57254 Mon Sep 17 00:00:00 2001 From: cadmic Date: Thu, 10 Oct 2024 20:48:26 -0700 Subject: [PATCH 12/12] Use MASS_IMMOVABLE/MASS_HEAVY everywhere (#2269) --- src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c | 2 +- src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c | 2 +- src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c | 4 ++-- src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c | 2 +- src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c | 4 ++-- src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c | 2 +- src/overlays/actors/ovl_En_Gb/z_en_gb.c | 2 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 4 ++-- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Ny/z_en_ny.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 2 +- src/overlays/actors/ovl_En_Trap/z_en_trap.c | 2 +- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c index f80a01a11e..1849c7e41e 100644 --- a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c +++ b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c @@ -381,7 +381,7 @@ void BossMo_Init(Actor* thisx, PlayState* play2) { } else { Actor_SetScale(&this->actor, 0.01f); BossMo_SetupTentacle(this, play); - this->actor.colChkInfo.mass = 0xFF; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; MO_WATER_LEVEL(play) = -50; this->waterTexAlpha = 90.0f; this->actor.world.pos.y = MO_WATER_LEVEL(play); diff --git a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c index 67b820b93a..72b07e4e01 100644 --- a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c +++ b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c @@ -484,7 +484,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) { } Actor_SetScale(&this->actor, 2.5 * 0.01f); - this->actor.colChkInfo.mass = 255; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.colChkInfo.health = 0; Collider_InitCylinder(play, &this->collider); diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c index 3577d1394b..c21d760eb9 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -178,7 +178,7 @@ void EnDekunuts_SetupBurrow(EnDekunuts* this) { void EnDekunuts_SetupBeginRun(EnDekunuts* this) { Animation_MorphToPlayOnce(&this->skelAnime, &gDekuNutsUnburrowAnim, -3.0f); this->collider.dim.height = 37; - this->actor.colChkInfo.mass = 0x32; + this->actor.colChkInfo.mass = 50; Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE); this->collider.base.acFlags &= ~AC_ON; this->actionFunc = EnDekunuts_BeginRun; @@ -446,7 +446,7 @@ void EnDekunuts_ColliderCheck(EnDekunuts* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; Actor_SetDropFlag(&this->actor, &this->collider.elem, true); - if (this->actor.colChkInfo.mass == 0x32) { + if (this->actor.colChkInfo.mass == 50) { if ((this->actor.colChkInfo.damageEffect != 0) || (this->actor.colChkInfo.damage != 0)) { if (this->actor.colChkInfo.damageEffect != 1) { if (this->actor.colChkInfo.damageEffect == 2) { diff --git a/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c b/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c index 5bd9228946..fb0b7bc340 100644 --- a/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c +++ b/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c @@ -83,7 +83,7 @@ void EnDntJiji_Init(Actor* thisx, PlayState* play) { // "Deku Scrub mask show elder" PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ デグナッツお面品評会長老 ☆☆☆☆☆ %x\n" VT_RST, this->stage); this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED; - this->actor.colChkInfo.mass = 0xFF; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.attentionRangeType = ATTENTION_RANGE_6; this->actionFunc = EnDntJiji_SetFlower; this->actor.gravity = -2.0f; diff --git a/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c b/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c index f6eaf076b5..2863aa1f80 100644 --- a/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c +++ b/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c @@ -128,7 +128,7 @@ void EnDntNomal_Init(Actor* thisx, PlayState* play) { this->type = ENDNTNOMAL_TARGET; } this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED; - this->actor.colChkInfo.mass = 0xFF; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->objectId = -1; if (this->type == ENDNTNOMAL_TARGET) { PRINTF("\n\n"); @@ -676,7 +676,7 @@ void EnDntNomal_SetupStageAttack(EnDntNomal* this, PlayState* play) { if (this->timer3 == 0) { this->endFrame = (f32)Animation_GetLastFrame(&gDntStageSpitAnim); Animation_Change(&this->skelAnime, &gDntStageSpitAnim, 1.0f, 0.0f, this->endFrame, ANIMMODE_ONCE, -10.0f); - this->actor.colChkInfo.mass = 0xFF; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->isSolid = true; this->timer2 = 0; Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); diff --git a/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c b/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c index 7b5d7a7586..0090a17cd3 100644 --- a/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c +++ b/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c @@ -63,7 +63,7 @@ static ColliderCylinderInit sCylinderInit = { { 18, 20, 0, { 0, 0, 0 } }, }; -static CollisionCheckInfoInit2 sColChkInit = { 1, 2, 25, 25, 0xFF }; +static CollisionCheckInfoInit2 sColChkInit = { 1, 2, 25, 25, MASS_IMMOVABLE }; void EnDodojr_Init(Actor* thisx, PlayState* play) { EnDodojr* this = (EnDodojr*)thisx; diff --git a/src/overlays/actors/ovl_En_Gb/z_en_gb.c b/src/overlays/actors/ovl_En_Gb/z_en_gb.c index e7fa809a06..40612e8646 100644 --- a/src/overlays/actors/ovl_En_Gb/z_en_gb.c +++ b/src/overlays/actors/ovl_En_Gb/z_en_gb.c @@ -176,7 +176,7 @@ void EnGb_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->dyna.actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); Actor_SetScale(&this->dyna.actor, 0.01f); - this->dyna.actor.colChkInfo.mass = 0xFF; + this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; this->dyna.actor.speed = 0.0f; this->dyna.actor.velocity.y = 0.0f; this->dyna.actor.gravity = -1.0f; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index d02d1b5fa4..843427fc8b 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -3608,9 +3608,9 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) { } if (thisx->speed == 0.0f && !(this->stateFlags & ENHORSE_FLAG_19)) { - thisx->colChkInfo.mass = 0xFF; + thisx->colChkInfo.mass = MASS_IMMOVABLE; } else { - thisx->colChkInfo.mass = 0xFE; + thisx->colChkInfo.mass = MASS_HEAVY; } if (thisx->speed >= 5.0f) { diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index ba73bf7732..ab748fe164 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -60,7 +60,7 @@ void EnMk_Init(Actor* thisx, PlayState* play) { Animation_PlayLoop(&this->skelAnime, &object_mk_Anim_000D88); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.colChkInfo.mass = 0xFF; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); this->actionFunc = EnMk_Wait; diff --git a/src/overlays/actors/ovl_En_Ny/z_en_ny.c b/src/overlays/actors/ovl_En_Ny/z_en_ny.c index 2c04b71db8..e31bd37d52 100644 --- a/src/overlays/actors/ovl_En_Ny/z_en_ny.c +++ b/src/overlays/actors/ovl_En_Ny/z_en_ny.c @@ -138,7 +138,7 @@ void EnNy_Init(Actor* thisx, PlayState* play) { // "Dummy new initials" PRINTF("ダミーニュウ イニシャル[ %d ] !!\n", this->actor.params); PRINTF("En_Ny_actor_move2[ %x ] !!\n", EnNy_UpdateUnused); - this->actor.colChkInfo.mass = 0xFF; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.update = EnNy_UpdateUnused; this->collider.base.colMaterial = COL_MATERIAL_METAL; } diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index 824528d5d9..da5b8bd4bc 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -160,7 +160,7 @@ void EnSkb_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.damageTable = &sDamageTable; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f); this->actor.focus.pos = this->actor.world.pos; - this->actor.colChkInfo.mass = 0xFE; + this->actor.colChkInfo.mass = MASS_HEAVY; this->actor.colChkInfo.health = 2; this->actor.shape.yOffset = -8000.0f; SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildUncurlingAnim, this->jointTable, diff --git a/src/overlays/actors/ovl_En_Trap/z_en_trap.c b/src/overlays/actors/ovl_En_Trap/z_en_trap.c index 8763edd047..420e5a1ca1 100644 --- a/src/overlays/actors/ovl_En_Trap/z_en_trap.c +++ b/src/overlays/actors/ovl_En_Trap/z_en_trap.c @@ -113,7 +113,7 @@ void EnTrap_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, thisx, &sCylinderInit); ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 0.0f); thisx->attentionRangeType = ATTENTION_RANGE_3; - thisx->colChkInfo.mass = 0xFF; + thisx->colChkInfo.mass = MASS_IMMOVABLE; } void EnTrap_Destroy(Actor* thisx, PlayState* play) {