summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorpetrie911 <69443847+petrie911@users.noreply.github.com>2021-02-12 16:16:40 -0600
committerGitHub <noreply@github.com>2021-02-12 17:16:40 -0500
commitda55eaa2d8c05d8eaf2ad8d320189526268e7d59 (patch)
tree3df2ccb301edb84bc662fce7a424eeaa13edb29b /src
parent7ee8c8011c96ba5ab7a124c41a315859a03d3714 (diff)
En_Zl4 (#590)
* significant progress * cutscene data * match * docs * dist from link * compiler warnings * cutscene and such * object decomp * stuff * cleanup * name some things * stuff * cutscenes fixed * git subrepo pull --force tools/ZAPD subrepo: subdir: "tools/ZAPD" merged: "44f5d7cb9" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "44f5d7cb9" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * git subrepo pull --force tools/ZAPD subrepo: subdir: "tools/ZAPD" merged: "0305ec2c2" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "0305ec2c2" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * reorder * unused content * documented cutscene dlists * enviewer update * Update src/overlays/actors/ovl_En_Zl4/z_en_zl4.c Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Zl4/z_en_zl4.c Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com> * formatter Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain> Co-authored-by: Fig02 <fig02srl@gmail.com> Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/overlays/actors/ovl_En_Viewer/z_en_viewer.c49
-rw-r--r--src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c306
-rw-r--r--src/overlays/actors/ovl_En_Zl4/z_en_zl4.c1277
-rw-r--r--src/overlays/actors/ovl_En_Zl4/z_en_zl4.h22
-rw-r--r--src/overlays/actors/ovl_En_Zl4/z_en_zl4_cutscene_data.c186
-rw-r--r--src/overlays/actors/ovl_End_Title/z_end_title.c8
6 files changed, 1619 insertions, 229 deletions
diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
index 014ca0ac1..9cf83ef92 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
@@ -6,6 +6,7 @@
#include "z_en_viewer.h"
#include "overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.h"
+#include "objects/object_zl4/object_zl4.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS 0x00000010
@@ -110,7 +111,7 @@ static InitChainEntry sInitChain[] = {
struct_80B2CEE8 D_80B2CEE8[] = {
{ OBJECT_HORSE_ZELDA, OBJECT_HORSE_ZELDA, 1, 0, 2, 20, 1, &D_06006B2C, &D_06007148 },
{ OBJECT_IM, OBJECT_OPENING_DEMO1, 1, 0, 0, 10, 3, &D_0600F788, &D_060029CC },
- { OBJECT_ZL4, OBJECT_OPENING_DEMO1, 1, 0, 0, 10, 2, &D_0600E038, &D_06000450 },
+ { OBJECT_ZL4, OBJECT_OPENING_DEMO1, 1, 0, 0, 10, 2, &gChildZeldaSkel, &D_06000450 },
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, 0, 10, 0, &D_060119E8, &D_06002928 },
{ OBJECT_HORSE_GANON, OBJECT_HORSE_GANON, 1, 0, 2, 20, 1, &D_06008668, &D_06003858 },
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, 0, 10, 0, &D_060119E8, &D_060005B4 },
@@ -618,7 +619,7 @@ void func_80B2B8FC(EnViewer* this, GlobalContext* globalCtx) {
s32 func_80B2B928(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
if (globalCtx->sceneNum == SCENE_SPOT00) { // Hyrule Field
if (limbIndex == 2) {
- *dList = D_0600C410;
+ *dList = gChildZeldaCutsceneDressDL;
}
if (limbIndex == 7) {
*dList = NULL;
@@ -644,7 +645,7 @@ void func_80B2B9A4(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
if (globalCtx->sceneNum == SCENE_TOKINOMA && limbIndex == 16) {
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_viewer.c", 1568);
- gSPDisplayList(POLY_OPA_DISP++, D_0600DE08);
+ gSPDisplayList(POLY_OPA_DISP++, gChildZeldaOcarinaOfTimeDL);
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_viewer.c", 1570);
}
}
@@ -653,43 +654,43 @@ void func_80B2BA38(EnViewer* this, GlobalContext* globalCtx) {
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_viewer.c", 1583);
if (globalCtx->sceneNum == SCENE_SPOT00) { // Hyrule Field
if (globalCtx->csCtx.frames < 771) {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_060042F0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_06003EF0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeInTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeOutTex));
} else if (globalCtx->csCtx.frames < 772) {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_06002EF0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_06002EF0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeBlinkTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeBlinkTex));
} else if (globalCtx->csCtx.frames < 773) {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_060032F0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_060032F0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeShutTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeShutTex));
} else if (globalCtx->csCtx.frames < 791) {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_060036F0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_060036F0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeWideTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeWideTex));
} else if (globalCtx->csCtx.frames < 792) {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_06002EF0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_06002EF0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeBlinkTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeBlinkTex));
} else if (globalCtx->csCtx.frames < 793) {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_060032F0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_060032F0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeShutTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeShutTex));
} else {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_060042F0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_06003EF0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeInTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeOutTex));
}
if (gSaveContext.sceneSetupIndex == 6) {
- gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&D_060052F0));
+ gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&gChildZeldaMouthSurprisedTex));
} else {
if (globalCtx->csCtx.frames < 758) {
- gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&D_06004EF0));
+ gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&gChildZeldaMouthWorriedTex));
} else if (globalCtx->csCtx.frames < 848) {
- gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&D_060052F0));
+ gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&gChildZeldaMouthSurprisedTex));
} else {
- gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&D_06004EF0));
+ gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&gChildZeldaMouthWorriedTex));
}
}
} else {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_060032F0));
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_060032F0));
- gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&D_06004EF0));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeShutTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gChildZeldaEyeShutTex));
+ gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(&gChildZeldaMouthWorriedTex));
}
SkelAnime_DrawFlexOpa(globalCtx, this->skin.skelAnime.skeleton, this->skin.skelAnime.jointTable,
this->skin.skelAnime.dListCount, func_80B2B928, func_80B2B9A4, this);
diff --git a/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c b/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c
index 99acb3f9c..e9ce63d44 100644
--- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c
+++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c
@@ -247,174 +247,184 @@ CutsceneData D_80B4C5D0[] = {
};
// clang-format on
-u32 D_80B4D5C0[] = {
- 0xC3DC0000, 0x42EA0000, 0x00000000, 0xC3F50000, 0x42F00000, 0x00000000, 0x0000002D, 0xC3F20000, 0x42F40000,
- 0xC1E80000, 0xC3F00000, 0x42E80000, 0x41900000, 0x00000050, 0xC3CE8000, 0x43080000, 0xC2900000, 0xC3C98000,
- 0x430D0000, 0xC2B20000, 0x00000019, 0xC3E30000, 0x42F00000, 0x00000000, 0xC3D90000, 0x42F20000, 0x00000000,
- 0x00000014, 0xC3E30000, 0x42F00000, 0x00000000, 0xC3D70000, 0x42CE0000, 0xC2140000, 0x00000014, 0xC3E30000,
- 0x42D20000, 0x42480000, 0xC3E28000, 0x42D20000, 0x42840000, 0x0000003C, 0xC3FA8000, 0x42F40000, 0x00000000,
- 0xC3E08000, 0x42EE0000, 0x00000000, 0x0000002D, 0xC3E70000, 0x42F20000, 0x00000000, 0xC3D18000, 0x42FA0000,
- 0x00000000, 0x00000014, 0xC409C000, 0x42EE0000, 0x40E00000, 0xC412C000, 0x42E60000, 0x41600000, 0x00000014,
- 0xC3F48000, 0x43010000, 0x00000000, 0xC3EB0000, 0x43000000, 0x00000000, 0x00000028, 0xC4034000, 0x42FC0000,
- 0x00000000, 0xC3FE8000, 0x42FC0000, 0x00000000, 0x0000000A, 0xC3F58000, 0x42F00000, 0xC0E00000, 0xC3FE8000,
- 0x42E60000, 0xC0E00000, 0x0000004B, 0xC3F28000, 0x42F00000, 0xC2280000, 0xC3F20000, 0x42F00000, 0x41200000,
- 0x0000002D,
+CutsceneCameraAngle D_80B4D5C0[] = {
+ { { -440.0f, 117.0f, 0.0f }, { -490.0f, 120.0f, 0.0f }, 0, 45 },
+ { { -484.0f, 122.0f, -29.0f }, { -480.0f, 116.0f, 18.0f }, 0, 80 },
+ { { -413.0f, 136.0f, -72.0f }, { -403.0f, 141.0f, -89.0f }, 0, 25 },
+ { { -454.0f, 120.0f, 0.0f }, { -434.0f, 121.0f, 0.0f }, 0, 20 },
+ { { -454.0f, 120.0f, 0.0f }, { -430.0f, 103.0f, -37.0f }, 0, 20 },
+ { { -454.0f, 105.0f, 50.0f }, { -453.0f, 105.0f, 66.0f }, 0, 60 },
+ { { -501.0f, 122.0f, 0.0f }, { -449.0f, 119.0f, 0.0f }, 0, 45 },
+ { { -462.0f, 121.0f, 0.0f }, { -419.0f, 125.0f, 0.0f }, 0, 20 },
+ { { -551.0f, 119.0f, 7.0f }, { -587.0f, 115.0f, 14.0f }, 0, 20 },
+ { { -489.0f, 129.0f, 0.0f }, { -470.0f, 128.0f, 0.0f }, 0, 40 },
+ { { -525.0f, 126.0f, 0.0f }, { -509.0f, 126.0f, 0.0f }, 0, 10 },
+ { { -491.0f, 120.0f, -7.0f }, { -509.0f, 115.0f, -7.0f }, 0, 75 },
+ { { -485.0f, 120.0f, -42.0f }, { -484.0f, 120.0f, 10.0f }, 0, 45 },
};
-u32 D_80B4D72C[] = {
- 0x00000014, 0x42A19989, 0xFE1C007A, 0xFFE30000, 0x00000014, 0x42A19989, 0xFE1C007A, 0xFFE30000,
- 0x00000014, 0x42A19989, 0xFE1C007A, 0xFFE30000, 0x00000014, 0x42A19989, 0xFE3C0079, 0xFFEB0000,
- 0x00000014, 0x42A19989, 0xFE3C0079, 0xFFEB0000, 0x00000014, 0x42A19989, 0xFE3C0079, 0xFFEB0000,
- 0xFF000014, 0x42A19989, 0xFE3C0079, 0xFFEB0000, 0xFF00001E, 0x42A19989, 0xFE3C0079, 0xFFEB0000,
+CutsceneCameraPoint D_80B4D72C[] = {
+ { 0, 0, 20, 80.79987f, { -484, 122, -29 } }, { 0, 0, 20, 80.79987f, { -484, 122, -29 } },
+ { 0, 0, 20, 80.79987f, { -484, 122, -29 } }, { 0, 0, 20, 80.79987f, { -452, 121, -21 } },
+ { 0, 0, 20, 80.79987f, { -452, 121, -21 } }, { 0, 0, 20, 80.79987f, { -452, 121, -21 } },
+ { -1, 0, 20, 80.79987f, { -452, 121, -21 } }, { -1, 0, 30, 80.79987f, { -452, 121, -21 } },
};
-u32 D_80B4D7AC[] = {
- 0x00000000, 0x42A19989, 0xFE200074, 0x00120000, 0x00000000, 0x42A19989, 0xFE200074, 0x00120000,
- 0x00000000, 0x42A19989, 0xFE200074, 0x00120000, 0x00000000, 0x42A19989, 0xFE200074, 0x00120000,
- 0x00000000, 0x42A19989, 0xFE200074, 0x00120000, 0x00000000, 0x42A19989, 0xFE200074, 0x00120000,
- 0xFF000000, 0x42A19989, 0xFE200074, 0x00120000, 0xFF000000, 0x42A19989, 0xFE200074, 0x00120000,
+CutsceneCameraPoint D_80B4D7AC[] = {
+ { 0, 0, 0, 80.79987f, { -480, 116, 18 } }, { 0, 0, 0, 80.79987f, { -480, 116, 18 } },
+ { 0, 0, 0, 80.79987f, { -480, 116, 18 } }, { 0, 0, 0, 80.79987f, { -480, 116, 18 } },
+ { 0, 0, 0, 80.79987f, { -480, 116, 18 } }, { 0, 0, 0, 80.79987f, { -480, 116, 18 } },
+ { -1, 0, 0, 80.79987f, { -480, 116, 18 } }, { -1, 0, 0, 80.79987f, { -480, 116, 18 } },
};
-u32 D_80B4D82C[] = {
- 0x00000014, 0x4234CCDC, 0xFE490074, 0x00000000, 0x00000014, 0x4234CCDC, 0xFE490074, 0x00000000,
- 0x00000014, 0x424A667B, 0xFE4F0074, 0x00000000, 0x00000014, 0x425E6680, 0xFE510074, 0x00000000,
- 0x00000014, 0x4270001E, 0xFE550074, 0x00000000, 0x00000014, 0x4282000F, 0xFE580074, 0x00000000,
- 0x00000014, 0x428D999D, 0xFE5A0074, 0x00000000, 0x00000014, 0x4297332D, 0xFE5D0073, 0x00000000,
- 0xFF000014, 0x4297332D, 0xFE5D0074, 0x00000000, 0xFF00001E, 0x4297332D, 0xFE5D0073, 0x00000000,
+CutsceneCameraPoint D_80B4D82C[] = {
+ { 0, 0, 20, 45.200058f, { -439, 116, 0 } }, { 0, 0, 20, 45.200058f, { -439, 116, 0 } },
+ { 0, 0, 20, 50.60008f, { -433, 116, 0 } }, { 0, 0, 20, 55.600098f, { -431, 116, 0 } },
+ { 0, 0, 20, 60.000114f, { -427, 116, 0 } }, { 0, 0, 20, 65.000114f, { -424, 116, 0 } },
+ { 0, 0, 20, 70.800026f, { -422, 116, 0 } }, { 0, 0, 20, 75.59995f, { -419, 115, 0 } },
+ { -1, 0, 20, 75.59995f, { -419, 116, 0 } }, { -1, 0, 30, 75.59995f, { -419, 115, 0 } },
};
-u32 D_80B4D8CC[] = {
- 0x00000000, 0x427199B8, 0xFE200072, 0x00000000, 0x00000000, 0x4234CCDC, 0xFE200072, 0x00000000,
- 0x00000000, 0x4234CCDC, 0xFE260072, 0x00000000, 0x00000000, 0x424A667B, 0xFE280072, 0x00000000,
- 0x00000000, 0x425E6680, 0xFE2C0072, 0x00000000, 0x00000000, 0x4270001E, 0xFE2F0072, 0x00000000,
- 0x00000000, 0x4282000F, 0xFE310072, 0x00000000, 0x00000000, 0x428D999D, 0xFE340072, 0x00000000,
- 0xFF000000, 0x4297332D, 0xFE340072, 0x00000000, 0xFF000000, 0x4297332D, 0xFE340072, 0x00000000,
+CutsceneCameraPoint D_80B4D8CC[] = {
+ { 0, 0, 0, 60.400116f, { -480, 114, 0 } }, { 0, 0, 0, 45.200058f, { -480, 114, 0 } },
+ { 0, 0, 0, 45.200058f, { -474, 114, 0 } }, { 0, 0, 0, 50.60008f, { -472, 114, 0 } },
+ { 0, 0, 0, 55.600098f, { -468, 114, 0 } }, { 0, 0, 0, 60.000114f, { -465, 114, 0 } },
+ { 0, 0, 0, 65.000114f, { -463, 114, 0 } }, { 0, 0, 0, 70.800026f, { -460, 114, 0 } },
+ { -1, 0, 0, 75.59995f, { -460, 114, 0 } }, { -1, 0, 0, 75.59995f, { -460, 114, 0 } },
};
-u32 D_80B4D96C[] = {
- 0x00000019, 0x4270001E, 0xFF8C0032, 0x01D50000, 0x00000019, 0x4270001E, 0xFF8C0032, 0x01D50000,
- 0x00000019, 0x4270001E, 0xFF8A0032, 0x01D30000, 0x00000019, 0x4270001E, 0xFF880032, 0x01D10000,
- 0x00000019, 0x4270001E, 0xFF850032, 0x01D00000, 0x00000019, 0x4270001E, 0xFF820032, 0x01CF0000,
- 0x00000019, 0x4270001E, 0xFF7F0032, 0x01CE0000, 0x00000019, 0x4270001E, 0xFF7D0032, 0x01CE0000,
- 0x00000019, 0x4270001E, 0xFF7A0032, 0x01CF0000, 0x00000019, 0x4270001E, 0xFF770032, 0x01D00000,
- 0x00000019, 0x4270001E, 0xFF740032, 0x01D20000, 0x00000019, 0x4270001E, 0xFF740032, 0x01D20000,
- 0xFF000019, 0x4270001E, 0xFF740032, 0x01D20000, 0xFF000019, 0x4270001E, 0xFF740032, 0x01D20000,
+CutsceneCameraPoint D_80B4D96C[] = {
+ { 0, 0, 25, 60.000114f, { -116, 50, 469 } }, { 0, 0, 25, 60.000114f, { -116, 50, 469 } },
+ { 0, 0, 25, 60.000114f, { -118, 50, 467 } }, { 0, 0, 25, 60.000114f, { -120, 50, 465 } },
+ { 0, 0, 25, 60.000114f, { -123, 50, 464 } }, { 0, 0, 25, 60.000114f, { -126, 50, 463 } },
+ { 0, 0, 25, 60.000114f, { -129, 50, 462 } }, { 0, 0, 25, 60.000114f, { -131, 50, 462 } },
+ { 0, 0, 25, 60.000114f, { -134, 50, 463 } }, { 0, 0, 25, 60.000114f, { -137, 50, 464 } },
+ { 0, 0, 25, 60.000114f, { -140, 50, 466 } }, { 0, 0, 25, 60.000114f, { -140, 50, 466 } },
+ { -1, 0, 25, 60.000114f, { -140, 50, 466 } }, { -1, 0, 25, 60.000114f, { -140, 50, 466 } },
};
-u32 D_80B4DA4C[] = {
- 0x00000000, 0x41A33320, 0xFF7E0032, 0x01E00000, 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000,
- 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000, 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000,
- 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000, 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000,
- 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000, 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000,
- 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000, 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000,
- 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000, 0x00000000, 0x4270001E, 0xFF7E0032, 0x01E00000,
- 0xFF000000, 0x4270001E, 0xFF7E0032, 0x01E00000, 0xFF000000, 0x4270001E, 0xFF7E0032, 0x01E00000,
+CutsceneCameraPoint D_80B4DA4C[] = {
+ { 0, 0, 0, 20.399963f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { -1, 0, 0, 60.000114f, { -130, 50, 480 } }, { -1, 0, 0, 60.000114f, { -130, 50, 480 } },
};
-u32 D_80B4DB2C[] = {
- 0x0000001E, 0x41A66654, 0xFE550074, 0x00040000, 0x0000001E, 0x41A66654, 0xFE560073, 0x00040000, 0x0000001E,
- 0x41A66654, 0xFE530073, 0x00070000, 0x0000001E, 0x41A66654, 0xFE540072, 0x000C0000, 0x0000001E, 0x41A66654,
- 0xFE520072, 0x000E0000, 0x0000001E, 0x41A66654, 0xFE520072, 0x000E0000, 0x0000001E, 0x41A66654, 0xFE520072,
- 0x000E0000, 0xFF00001E, 0x41A66654, 0xFE520070, 0x000E0000, 0xFF00001E, 0x41A66654, 0xFE520070, 0x000E0000,
+CutsceneCameraPoint D_80B4DB2C[] = {
+ { 0, 0, 30, 20.799965f, { -427, 116, 4 } }, { 0, 0, 30, 20.799965f, { -426, 115, 4 } },
+ { 0, 0, 30, 20.799965f, { -429, 115, 7 } }, { 0, 0, 30, 20.799965f, { -428, 114, 12 } },
+ { 0, 0, 30, 20.799965f, { -430, 114, 14 } }, { 0, 0, 30, 20.799965f, { -430, 114, 14 } },
+ { 0, 0, 30, 20.799965f, { -430, 114, 14 } }, { -1, 0, 30, 20.799965f, { -430, 112, 14 } },
+ { -1, 0, 30, 20.799965f, { -430, 112, 14 } },
};
-u32 D_80B4DBBC[] = {
- 0x00000000, 0x41A66654, 0xFE7B006D, 0x00240000, 0x00000000, 0x41A66654, 0xFE7B006D, 0x00240000, 0x00000000,
- 0x41A66654, 0xFE7B006D, 0x00240000, 0x00000000, 0x41A66654, 0xFE7B006D, 0x00240000, 0x00000000, 0x41A66654,
- 0xFE7B006D, 0x00240000, 0x00000000, 0x41A66654, 0xFE7B006D, 0x00240000, 0x00000000, 0x41A66654, 0xFE7B006D,
- 0x00240000, 0xFF000000, 0x41A66654, 0xFE7B006D, 0x00240000, 0xFF000000, 0x41A66654, 0xFE7B006D, 0x00240000,
+CutsceneCameraPoint D_80B4DBBC[] = {
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { 0, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { 0, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { 0, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { -1, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { -1, 0, 0, 20.799965f, { -389, 109, 36 } },
};
-u32 D_80B4DC4C[] = {
- 0x0000001E, 0x42340000, 0xFE100077, 0x00000000, 0x0000001E, 0x42340000, 0xFE100077, 0x00000000, 0x0000001E,
- 0x42340000, 0xFE100077, 0x00000000, 0x0000000F, 0x42340000, 0xFE100077, 0x00000000, 0x0000000F, 0x42373343,
- 0xFE29007A, 0x00000000, 0x0000000F, 0x42373343, 0xFE75008B, 0x00000000, 0x0000000F, 0x42373343, 0xFF3F00B7,
- 0x00000000, 0x0000000F, 0x42373343, 0x001D00E8, 0x00000000, 0x0000001E, 0x42373343, 0x01680130, 0x00000000,
- 0x0000001E, 0x42373343, 0x01AD0148, 0x00000000, 0x0000001E, 0x42373343, 0x01AD0148, 0x00000000, 0x0000001E,
- 0x42373343, 0x01AD0148, 0x00000000, 0x0000001E, 0x42373343, 0x01AD0148, 0x00000000, 0xFF00001E, 0x42373343,
- 0x01AD0148, 0x00000000, 0xFF00001E, 0x42373343, 0x01AD0148, 0x00000000,
+CutsceneCameraPoint D_80B4DC4C[] = {
+ { 0, 0, 30, 45.0f, { -496, 119, 0 } }, { 0, 0, 30, 45.0f, { -496, 119, 0 } },
+ { 0, 0, 30, 45.0f, { -496, 119, 0 } }, { 0, 0, 15, 45.0f, { -496, 119, 0 } },
+ { 0, 0, 15, 45.80006f, { -471, 122, 0 } }, { 0, 0, 15, 45.80006f, { -395, 139, 0 } },
+ { 0, 0, 15, 45.80006f, { -193, 183, 0 } }, { 0, 0, 15, 45.80006f, { 29, 232, 0 } },
+ { 0, 0, 30, 45.80006f, { 360, 304, 0 } }, { 0, 0, 30, 45.80006f, { 429, 328, 0 } },
+ { 0, 0, 30, 45.80006f, { 429, 328, 0 } }, { 0, 0, 30, 45.80006f, { 429, 328, 0 } },
+ { 0, 0, 30, 45.80006f, { 429, 328, 0 } }, { -1, 0, 30, 45.80006f, { 429, 328, 0 } },
+ { -1, 0, 30, 45.80006f, { 429, 328, 0 } },
};
-u32 D_80B4DD3C[] = {
- 0x00000000, 0x42340000, 0xFE450073, 0x00000000, 0x00000000, 0x42340000, 0xFE450073, 0x00000000, 0x00000000,
- 0x42340000, 0xFE450073, 0x00000000, 0x00000000, 0x42340000, 0xFE450073, 0x00000000, 0x00000000, 0x42373343,
- 0xFE5C0085, 0x00000000, 0x00000000, 0x42373343, 0xFEA80096, 0x00000000, 0x00000000, 0x42373343, 0xFF7100C2,
- 0x00000000, 0x00000000, 0x42373343, 0x005000F3, 0x00000000, 0x00000000, 0x42373343, 0x019C013B, 0x00000000,
- 0x00000000, 0x42373343, 0x01E2014C, 0x00000000, 0x00000000, 0x42373343, 0x01E2014C, 0x00000000, 0x00000000,
- 0x42373343, 0x01E2014C, 0x00000000, 0x00000000, 0x42373343, 0x01E2014C, 0x00000000, 0xFF000000, 0x42373343,
- 0x01E2014C, 0x00000000, 0xFF000000, 0x42373343, 0x01E2014C, 0x00000000,
+CutsceneCameraPoint D_80B4DD3C[] = {
+ { 0, 0, 0, 45.0f, { -443, 115, 0 } }, { 0, 0, 0, 45.0f, { -443, 115, 0 } },
+ { 0, 0, 0, 45.0f, { -443, 115, 0 } }, { 0, 0, 0, 45.0f, { -443, 115, 0 } },
+ { 0, 0, 0, 45.80006f, { -420, 133, 0 } }, { 0, 0, 0, 45.80006f, { -344, 150, 0 } },
+ { 0, 0, 0, 45.80006f, { -143, 194, 0 } }, { 0, 0, 0, 45.80006f, { 80, 243, 0 } },
+ { 0, 0, 0, 45.80006f, { 412, 315, 0 } }, { 0, 0, 0, 45.80006f, { 482, 332, 0 } },
+ { 0, 0, 0, 45.80006f, { 482, 332, 0 } }, { 0, 0, 0, 45.80006f, { 482, 332, 0 } },
+ { 0, 0, 0, 45.80006f, { 482, 332, 0 } }, { -1, 0, 0, 45.80006f, { 482, 332, 0 } },
+ { -1, 0, 0, 45.80006f, { 482, 332, 0 } },
};
-u32 D_80B4DE2C[] = {
- 0x00000019, 0x42726685, 0x00420194, 0x01A90000, 0x00000019, 0x427199B8, 0x00420194, 0x01A90000,
- 0x00000019, 0x425E6680, 0x00420194, 0x01AA0000, 0x00000019, 0x425CCCE6, 0x003F0175, 0x019D0000,
- 0x00000019, 0x424999AE, 0x001A0161, 0x01980000, 0x00000019, 0x424999AE, 0x00110145, 0x018D0000,
- 0x00000019, 0x423599A9, 0x00110146, 0x018D0000, 0x00000019, 0x4234CCDC, 0xFF7800B1, 0x01030000,
- 0x00000019, 0x422199A4, 0xFEFE006F, 0x00A90000, 0x00000019, 0x4220CCD7, 0xFE87006C, 0x00410000,
- 0x00000019, 0x420CCCD2, 0xFE87006C, 0x00410000, 0x00000019, 0x420CCCD2, 0xFE87006C, 0x00410000,
- 0xFF00001E, 0x41F1999A, 0xFE88006C, 0x00410000, 0xFF00001E, 0x41F1999A, 0xFE88006C, 0x00410000,
+CutsceneCameraPoint D_80B4DE2C[] = {
+ { 0, 0, 25, 60.600117f, { 66, 404, 425 } }, { 0, 0, 25, 60.400116f, { 66, 404, 425 } },
+ { 0, 0, 25, 55.600098f, { 66, 404, 426 } }, { 0, 0, 25, 55.200096f, { 63, 373, 413 } },
+ { 0, 0, 25, 50.400078f, { 26, 353, 408 } }, { 0, 0, 25, 50.400078f, { 17, 325, 397 } },
+ { 0, 0, 25, 45.40006f, { 17, 326, 397 } }, { 0, 0, 25, 45.200058f, { -136, 177, 259 } },
+ { 0, 0, 25, 40.40004f, { -258, 111, 169 } }, { 0, 0, 25, 40.20004f, { -377, 108, 65 } },
+ { 0, 0, 25, 35.20002f, { -377, 108, 65 } }, { 0, 0, 25, 35.20002f, { -377, 108, 65 } },
+ { -1, 0, 30, 30.2f, { -376, 108, 65 } }, { -1, 0, 30, 30.2f, { -376, 108, 65 } },
};
-u32 D_80B4DF0C[] = {
- 0x00000000, 0x42373343, 0x001D017F, 0x01BD0000, 0x00000000, 0x42373343, 0x001D017F, 0x01BD0000,
- 0x00000000, 0x42373343, 0x001D017F, 0x01BD0000, 0x00000000, 0x42373343, 0x001D017F, 0x01BD0000,
- 0x00000000, 0x42373343, 0x001D017F, 0x01BD0000, 0x00000000, 0x42373343, 0x0031015B, 0x01A80000,
- 0x00000000, 0x42373343, 0x0031015B, 0x01A80000, 0x00000000, 0x41F1999A, 0xFF9900C0, 0x011E0000,
- 0x00000000, 0x41F1999A, 0xFF200071, 0x00C60000, 0x00000000, 0x41F1999A, 0xFEA7006D, 0x00600000,
- 0x00000000, 0x41F1999A, 0xFEA7006D, 0x00600000, 0x00000000, 0x41F1999A, 0xFEA7006D, 0x00600000,
- 0xFF000000, 0x41F1999A, 0xFEA7006D, 0x00600000, 0xFF000000, 0x41F1999A, 0xFEA7006D, 0x00600000,
+CutsceneCameraPoint D_80B4DF0C[] = {
+ { 0, 0, 0, 45.80006f, { 29, 383, 445 } }, { 0, 0, 0, 45.80006f, { 29, 383, 445 } },
+ { 0, 0, 0, 45.80006f, { 29, 383, 445 } }, { 0, 0, 0, 45.80006f, { 29, 383, 445 } },
+ { 0, 0, 0, 45.80006f, { 29, 383, 445 } }, { 0, 0, 0, 45.80006f, { 49, 347, 424 } },
+ { 0, 0, 0, 45.80006f, { 49, 347, 424 } }, { 0, 0, 0, 30.2f, { -103, 192, 286 } },
+ { 0, 0, 0, 30.2f, { -224, 113, 198 } }, { 0, 0, 0, 30.2f, { -345, 109, 96 } },
+ { 0, 0, 0, 30.2f, { -345, 109, 96 } }, { 0, 0, 0, 30.2f, { -345, 109, 96 } },
+ { -1, 0, 0, 30.2f, { -345, 109, 96 } }, { -1, 0, 0, 30.2f, { -345, 109, 96 } },
};
-u32 D_80B4DFEC[] = {
- 0x0000000A, 0x41F00000, 0xFE1E0077, 0x00000000, 0x0000000A, 0x41F00000, 0xFE1E0077, 0x00000000,
- 0x0000000A, 0x41F00000, 0xFE1E0077, 0x00000000, 0x0000000A, 0x41F66668, 0xFE1E0077, 0x00000000,
- 0x0000000A, 0x41F66668, 0xFE1E0077, 0x00000000, 0x0000000A, 0x41F66668, 0xFE32007E, 0x00000000,
- 0x0000001E, 0x41F66668, 0xFE750096, 0x00000000, 0x0000001E, 0x41F66668, 0xFE750096, 0x00000000,
- 0xFF00001E, 0x41F66668, 0xFE750096, 0x00000000, 0xFF00001E, 0x41F66668, 0xFE750096, 0x00000000,
+CutsceneCameraPoint D_80B4DFEC[] = {
+ { 0, 0, 10, 30.0f, { -482, 119, 0 } }, { 0, 0, 10, 30.0f, { -482, 119, 0 } },
+ { 0, 0, 10, 30.0f, { -482, 119, 0 } }, { 0, 0, 10, 30.800003f, { -482, 119, 0 } },
+ { 0, 0, 10, 30.800003f, { -482, 119, 0 } }, { 0, 0, 10, 30.800003f, { -462, 126, 0 } },
+ { 0, 0, 30, 30.800003f, { -395, 150, 0 } }, { 0, 0, 30, 30.800003f, { -395, 150, 0 } },
+ { -1, 0, 30, 30.800003f, { -395, 150, 0 } }, { -1, 0, 30, 30.800003f, { -395, 150, 0 } },
};
-u32 D_80B4E08C[] = {
- 0x00000000, 0x41F00000, 0xFE480073, 0x00000000, 0x00000000, 0x41F00000, 0xFE480073, 0x00000000,
- 0x00000000, 0x41F00000, 0xFE480073, 0x00000000, 0x00000000, 0x41F66668, 0xFE480073, 0x00000000,
- 0x00000000, 0x41F66668, 0xFE480073, 0x00000000, 0x00000000, 0x41F66668, 0xFE59008E, 0x00000000,
- 0x00000000, 0x41F66668, 0xFE9A00AB, 0x00000000, 0x00000000, 0x41F66668, 0xFE9A00AB, 0x00000000,
- 0xFF000000, 0x41F66668, 0xFE9A00AB, 0x00000000, 0xFF000000, 0x41F66668, 0xFE9A00AB, 0x00000000,
+CutsceneCameraPoint D_80B4E08C[] = {
+ { 0, 0, 0, 30.0f, { -440, 115, 0 } }, { 0, 0, 0, 30.0f, { -440, 115, 0 } },
+ { 0, 0, 0, 30.0f, { -440, 115, 0 } }, { 0, 0, 0, 30.800003f, { -440, 115, 0 } },
+ { 0, 0, 0, 30.800003f, { -440, 115, 0 } }, { 0, 0, 0, 30.800003f, { -423, 142, 0 } },
+ { 0, 0, 0, 30.800003f, { -358, 171, 0 } }, { 0, 0, 0, 30.800003f, { -358, 171, 0 } },
+ { -1, 0, 0, 30.800003f, { -358, 171, 0 } }, { -1, 0, 0, 30.800003f, { -358, 171, 0 } },
};
-u32 D_80B4E12C[] = {
- 0x0000001E, 0x41C80000, 0xFDD90077, 0x00070000, 0x0000001E, 0x41C80000, 0xFDD90077, 0x00070000, 0x0000000F,
- 0x41C80000, 0xFDD90077, 0x00070000, 0x0000000F, 0x42700000, 0xFE1B0078, 0xFFF90000, 0x0000001E, 0x42700000,
- 0xFE1B0078, 0xFFF90000, 0x0000001E, 0x42700000, 0xFE1B0078, 0xFFF90000, 0x0000001E, 0x42700000, 0xFE1B0076,
- 0xFFFB0000, 0xFF00001E, 0x42700000, 0xFE1B0077, 0xFFFA0000, 0xFF00001E, 0x42700000, 0xFE1B0077, 0xFFFA0000,
+CutsceneCameraPoint D_80B4E12C[] = {
+ { 0, 0, 30, 25.0f, { -551, 119, 7 } }, { 0, 0, 30, 25.0f, { -551, 119, 7 } },
+ { 0, 0, 15, 25.0f, { -551, 119, 7 } }, { 0, 0, 15, 60.0f, { -485, 120, -7 } },
+ { 0, 0, 30, 60.0f, { -485, 120, -7 } }, { 0, 0, 30, 60.0f, { -485, 120, -7 } },
+ { 0, 0, 30, 60.0f, { -485, 118, -5 } }, { -1, 0, 30, 60.0f, { -485, 119, -6 } },
+ { -1, 0, 30, 60.0f, { -485, 119, -6 } },
};
-u32 D_80B4E1BC[] = {
- 0x00000000, 0x4234CCDC, 0xFDB50073, 0x000E0000, 0x00000000, 0x41CB3366, 0xFDB50073, 0x000E0000, 0x00000000,
- 0x41CB3366, 0xFDB50073, 0x000E0000, 0x00000000, 0x4270CD09, 0xFDF70075, 0xFFFF0000, 0x00000000, 0x4270CD09,
- 0xFDF70075, 0xFFFF0000, 0x00000000, 0x4270CD09, 0xFDF70075, 0xFFFF0000, 0x00000000, 0x4270CD09, 0xFDF70075,
- 0xFFFF0000, 0xFF000000, 0x4270CD09, 0xFDF70074, 0x00000000, 0xFF000000, 0x4270CC08, 0xFDF70074, 0x00000000,
+CutsceneCameraPoint D_80B4E1BC[] = {
+ { 0, 0, 0, 45.200058f, { -587, 115, 14 } }, { 0, 0, 0, 25.400097f, { -587, 115, 14 } },
+ { 0, 0, 0, 25.400097f, { -587, 115, 14 } }, { 0, 0, 0, 60.20023f, { -521, 117, -1 } },
+ { 0, 0, 0, 60.20023f, { -521, 117, -1 } }, { 0, 0, 0, 60.20023f, { -521, 117, -1 } },
+ { 0, 0, 0, 60.20023f, { -521, 117, -1 } }, { -1, 0, 0, 60.20023f, { -521, 116, 0 } },
+ { -1, 0, 0, 60.19925f, { -521, 116, 0 } },
};
-u32 D_80B4E24C[] = {
- 0x0000001E, 0x4270001E, 0x004B0034, 0x00320000, 0x0000001E, 0x4270001E, 0x004B0034, 0x00300000,
- 0x0000003C, 0x4270001E, 0x004A0034, 0x002D0000, 0x0000003C, 0x4270001E, 0x00310033, 0xFFD50000,
- 0x0000001E, 0x4270001E, 0x00310033, 0xFFD50000, 0x0000001E, 0x4270001E, 0x00310033, 0xFFD50000,
- 0xFF00001E, 0x4270001E, 0x00310033, 0xFFD50000, 0xFF00001E, 0x4270001E, 0x00310033, 0xFFD50000,
+CutsceneCameraPoint D_80B4E24C[] = {
+ { 0, 0, 30, 60.000114f, { 75, 52, 50 } }, { 0, 0, 30, 60.000114f, { 75, 52, 48 } },
+ { 0, 0, 60, 60.000114f, { 74, 52, 45 } }, { 0, 0, 60, 60.000114f, { 49, 51, -43 } },
+ { 0, 0, 30, 60.000114f, { 49, 51, -43 } }, { 0, 0, 30, 60.000114f, { 49, 51, -43 } },
+ { -1, 0, 30, 60.000114f, { 49, 51, -43 } }, { -1, 0, 30, 60.000114f, { 49, 51, -43 } },
};
-u32 D_80B4E2CC[] = {
- 0x00000000, 0x4270001E, 0x005A0034, 0x00350000, 0x00000000, 0x4270001E, 0x005A0034, 0x00320000,
- 0x00000000, 0x4270001E, 0x005A0034, 0x002D0000, 0x00000000, 0x4270001E, 0x00410033, 0xFFD40000,
- 0x00000000, 0x4270001E, 0x00410033, 0xFFD40000, 0x00000000, 0x4270001E, 0x00410033, 0xFFD40000,
- 0xFF000000, 0x4270001E, 0x00410033, 0xFFD40000, 0xFF000000, 0x4270001E, 0x00410033, 0xFFD40000,
+CutsceneCameraPoint D_80B4E2CC[] = {
+ { 0, 0, 0, 60.000114f, { 90, 52, 53 } }, { 0, 0, 0, 60.000114f, { 90, 52, 50 } },
+ { 0, 0, 0, 60.000114f, { 90, 52, 45 } }, { 0, 0, 0, 60.000114f, { 65, 51, -44 } },
+ { 0, 0, 0, 60.000114f, { 65, 51, -44 } }, { 0, 0, 0, 60.000114f, { 65, 51, -44 } },
+ { -1, 0, 0, 60.000114f, { 65, 51, -44 } }, { -1, 0, 0, 60.000114f, { 65, 51, -44 } },
};
-u32 D_80B4E34C[] = {
- 0x0000001F, 0x4270001E, 0xFE3F0079, 0xFFED0000, 0x0000001E, 0x4270001E, 0xFE3F0079, 0xFFED0000,
- 0x0000001E, 0x4270001E, 0xFE3F0079, 0xFFED0000, 0x0000001E, 0x4270001E, 0xFE38006E, 0xFFEF0000,
- 0x0000001E, 0x4270001E, 0xFE38006E, 0xFFEF0000, 0x0000001E, 0x4270001E, 0xFE38006E, 0xFFEF0000,
- 0xFF00001E, 0x4270001E, 0xFE38006E, 0xFFEF0000, 0xFF00001E, 0x4270001E, 0xFE38006E, 0xFFEF0000,
+CutsceneCameraPoint D_80B4E34C[] = {
+ { 0, 0, 31, 60.000114f, { -449, 121, -19 } }, { 0, 0, 30, 60.000114f, { -449, 121, -19 } },
+ { 0, 0, 30, 60.000114f, { -449, 121, -19 } }, { 0, 0, 30, 60.000114f, { -456, 110, -17 } },
+ { 0, 0, 30, 60.000114f, { -456, 110, -17 } }, { 0, 0, 30, 60.000114f, { -456, 110, -17 } },
+ { -1, 0, 30, 60.000114f, { -456, 110, -17 } }, { -1, 0, 30, 60.000114f, { -456, 110, -17 } },
};
-u32 D_80B4E3CC[] = {
- 0x00000000, 0x4270001E, 0xFE47006B, 0xFFEA0000, 0x00000000, 0x4270001E, 0xFE47006B, 0xFFEA0000,
- 0x00000000, 0x4270001E, 0xFE47006B, 0xFFEA0000, 0x00000000, 0x4270001E, 0xFE47006B, 0xFFEA0000,
- 0x00000000, 0x4270001E, 0xFE47006B, 0xFFEA0000, 0x00000000, 0x4270001E, 0xFE47006B, 0xFFEA0000,
- 0xFF000000, 0x4270001E, 0xFE47006B, 0xFFEA0000, 0xFF000000, 0x4270001E, 0xFE47006B, 0xFFEA0000,
+CutsceneCameraPoint D_80B4E3CC[] = {
+ { 0, 0, 0, 60.000114f, { -441, 107, -22 } }, { 0, 0, 0, 60.000114f, { -441, 107, -22 } },
+ { 0, 0, 0, 60.000114f, { -441, 107, -22 } }, { 0, 0, 0, 60.000114f, { -441, 107, -22 } },
+ { 0, 0, 0, 60.000114f, { -441, 107, -22 } }, { 0, 0, 0, 60.000114f, { -441, 107, -22 } },
+ { -1, 0, 0, 60.000114f, { -441, 107, -22 } }, { -1, 0, 0, 60.000114f, { -441, 107, -22 } },
};
-u32 D_80B4E44C[] = {
- 0x0000001E, 0x41A66654, 0xFEB5006E, 0xFFA50000, 0x0000001E, 0x41A66654, 0xFEB5006E, 0xFFA50000,
- 0x0000001E, 0x41A66654, 0xFEB5006E, 0xFFA50000, 0x0000001E, 0x41A66654, 0xFE010079, 0x00070000,
- 0x0000001E, 0x41A66654, 0xFE010079, 0x00070000, 0x0000001E, 0x41A66654, 0xFE010079, 0x00070000,
- 0xFF00001E, 0x41A66654, 0xFE010079, 0x00070000, 0xFF00001E, 0x41A66654, 0xFE010079, 0x00070000,
+CutsceneCameraPoint D_80B4E44C[] = {
+ { 0, 0, 30, 20.799965f, { -331, 110, -91 } }, { 0, 0, 30, 20.799965f, { -331, 110, -91 } },
+ { 0, 0, 30, 20.799965f, { -331, 110, -91 } }, { 0, 0, 30, 20.799965f, { -511, 121, 7 } },
+ { 0, 0, 30, 20.799965f, { -511, 121, 7 } }, { 0, 0, 30, 20.799965f, { -511, 121, 7 } },
+ { -1, 0, 30, 20.799965f, { -511, 121, 7 } }, { -1, 0, 30, 20.799965f, { -511, 121, 7 } },
};
-u32 D_80B4E4CC[] = {
- 0x00000000, 0x41A66654, 0xFE8F006E, 0xFFBA0000, 0x00000000, 0x41A66654, 0xFE8F006E, 0xFFBA0000, 0x00000000,
- 0x41A66654, 0xFE8F006E, 0xFFBA0000, 0x00000000, 0x41A66654, 0xFDDB007C, 0x001D0000, 0x00000000, 0x41A66654,
- 0xFDDB007C, 0x001D0000, 0x00000000, 0x41A66654, 0xFDDB007C, 0x001D0000, 0xFF000000, 0x41A66654, 0xFDDB007C,
- 0x001D0000, 0xFF000000, 0x41A66654, 0xFDDB007C, 0x001D0000, D_80B4D72C, D_80B4D7AC, 0x00000000, D_80B4D82C,
- D_80B4D8CC, 0x00000000, D_80B4D96C, D_80B4DA4C, 0x00000000, D_80B4DB2C, D_80B4DBBC, 0x00000000, D_80B4DC4C,
- D_80B4DD3C, 0x00000000, D_80B4DE2C, D_80B4DF0C, 0x00000000, D_80B4DFEC, D_80B4E08C, 0x00000000, D_80B4E12C,
- D_80B4E1BC, 0x00000000, D_80B4E24C, D_80B4E2CC, 0x00000000, D_80B4E34C, D_80B4E3CC, 0x00000000, D_80B4E44C,
- D_80B4E4CC, 0x00000000,
+CutsceneCameraPoint D_80B4E4CC[] = {
+ { 0, 0, 0, 20.799965f, { -369, 110, -70 } }, { 0, 0, 0, 20.799965f, { -369, 110, -70 } },
+ { 0, 0, 0, 20.799965f, { -369, 110, -70 } }, { 0, 0, 0, 20.799965f, { -549, 124, 29 } },
+ { 0, 0, 0, 20.799965f, { -549, 124, 29 } }, { 0, 0, 0, 20.799965f, { -549, 124, 29 } },
+ { -1, 0, 0, 20.799965f, { -549, 124, 29 } }, { -1, 0, 0, 20.799965f, { -549, 124, 29 } },
+};
+CutsceneCameraMove D_80B4E54C[] = {
+ { D_80B4D72C, D_80B4D7AC, 0 }, { D_80B4D82C, D_80B4D8CC, 0 }, { D_80B4D96C, D_80B4DA4C, 0 },
+ { D_80B4DB2C, D_80B4DBBC, 0 }, { D_80B4DC4C, D_80B4DD3C, 0 }, { D_80B4DE2C, D_80B4DF0C, 0 },
+ { D_80B4DFEC, D_80B4E08C, 0 }, { D_80B4E12C, D_80B4E1BC, 0 }, { D_80B4E24C, D_80B4E2CC, 0 },
+ { D_80B4E34C, D_80B4E3CC, 0 }, { D_80B4E44C, D_80B4E4CC, 0 },
};
diff --git a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
index b2c7adfa7..a65152f47 100644
--- a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
+++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
@@ -5,38 +5,61 @@
*/
#include "z_en_zl4.h"
+#include "objects/object_zl4/object_zl4.h"
+#include "scenes/indoors/nakaniwa/nakaniwa_scene.h"
#define FLAGS 0x00000019
#define THIS ((EnZl4*)thisx)
+typedef enum {
+ /* 0 */ ZL4_CS_WAIT,
+ /* 1 */ ZL4_CS_START,
+ /* 2 */ ZL4_CS_MEET,
+ /* 3 */ ZL4_CS_STONE,
+ /* 4 */ ZL4_CS_NAMES,
+ /* 5 */ ZL4_CS_LEGEND,
+ /* 6 */ ZL4_CS_WINDOW,
+ /* 7 */ ZL4_CS_GANON,
+ /* 8 */ ZL4_CS_PLAN
+} EnZl4CutsceneState;
+
+typedef enum {
+ /* 0 */ ZL4_EYES_NEUTRAL,
+ /* 1 */ ZL4_EYES_SHUT,
+ /* 2 */ ZL4_EYES_LOOK_LEFT,
+ /* 3 */ ZL4_EYES_LOOK_RIGHT,
+ /* 4 */ ZL4_EYES_WIDE,
+ /* 5 */ ZL4_EYES_SQUINT,
+ /* 6 */ ZL4_EYES_OPEN
+} EnZl4EyeExpression;
+
+typedef enum {
+ /* 0 */ ZL4_MOUTH_NEUTRAL,
+ /* 1 */ ZL4_MOUTH_HAPPY,
+ /* 2 */ ZL4_MOUTH_WORRIED,
+ /* 3 */ ZL4_MOUTH_SURPRISED
+} EnZl4MouthExpression;
+
+typedef enum {
+ /* 0 */ ZL4_EYE_OPEN,
+ /* 1 */ ZL4_EYE_BLINK,
+ /* 2 */ ZL4_EYE_SHUT,
+ /* 3 */ ZL4_EYE_WIDE,
+ /* 4 */ ZL4_EYE_SQUINT,
+ /* 5 */ ZL4_EYE_LOOK_OUT,
+ /* 6 */ ZL4_EYE_LOOK_IN
+} EnZl4EyeState;
+
void EnZl4_Init(Actor* thisx, GlobalContext* globalCtx);
void EnZl4_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnZl4_Update(Actor* thisx, GlobalContext* globalCtx);
void EnZl4_Draw(Actor* thisx, GlobalContext* globalCtx);
-extern UNK_TYPE D_02000104;
-extern UNK_TYPE D_02000444;
-extern UNK_TYPE D_02003994;
-extern UNK_TYPE D_0600E038;
-extern UNK_TYPE D_0600F0A4;
-extern UNK_TYPE D_0600F894;
-extern UNK_TYPE D_06010DF8;
-extern UNK_TYPE D_060125E4;
-extern UNK_TYPE D_06012E58;
-extern UNK_TYPE D_06015F14;
-extern UNK_TYPE D_060169B4;
-extern UNK_TYPE D_06016D08;
-extern UNK_TYPE D_0601805C;
-extern UNK_TYPE D_06018898;
-extern UNK_TYPE D_0601910C;
-extern UNK_TYPE D_0601A2FC;
-extern UNK_TYPE D_0601AAE0;
-extern UNK_TYPE D_0601B874;
-extern UNK_TYPE D_0601BCF0;
-extern UNK_TYPE D_0601CE08;
+void EnZl4_Cutscene(EnZl4* this, GlobalContext* globalCtx);
+void EnZl4_Idle(EnZl4* this, GlobalContext* globalCtx);
+void EnZl4_TheEnd(EnZl4* this, GlobalContext* globalCtx);
-/*
const ActorInit En_Zl4_InitVars = {
ACTOR_EN_ZL4,
ACTORCAT_NPC,
@@ -49,7 +72,7 @@ const ActorInit En_Zl4_InitVars = {
(ActorFunc)EnZl4_Draw,
};
-static ColliderCylinderInit D_80B5E780 = {
+static ColliderCylinderInit sCylinderInit = {
{
COLTYPE_NONE,
AT_NONE,
@@ -68,61 +91,1211 @@ static ColliderCylinderInit D_80B5E780 = {
},
{ 10, 44, 0, { 0, 0, 0 } },
};
-*/
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5B7B0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5B888.s")
+CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
+
+typedef enum {
+ /* 0 */ ZL4_ANIM_0,
+ /* 1 */ ZL4_ANIM_1,
+ /* 2 */ ZL4_ANIM_2,
+ /* 3 */ ZL4_ANIM_3,
+ /* 4 */ ZL4_ANIM_4,
+ /* 5 */ ZL4_ANIM_5,
+ /* 6 */ ZL4_ANIM_6,
+ /* 7 */ ZL4_ANIM_7,
+ /* 8 */ ZL4_ANIM_8,
+ /* 9 */ ZL4_ANIM_9,
+ /* 10 */ ZL4_ANIM_10,
+ /* 11 */ ZL4_ANIM_11,
+ /* 12 */ ZL4_ANIM_12,
+ /* 13 */ ZL4_ANIM_13,
+ /* 14 */ ZL4_ANIM_14,
+ /* 15 */ ZL4_ANIM_15,
+ /* 16 */ ZL4_ANIM_16,
+ /* 17 */ ZL4_ANIM_17,
+ /* 18 */ ZL4_ANIM_18,
+ /* 19 */ ZL4_ANIM_19,
+ /* 20 */ ZL4_ANIM_20,
+ /* 21 */ ZL4_ANIM_21,
+ /* 22 */ ZL4_ANIM_22,
+ /* 23 */ ZL4_ANIM_23,
+ /* 24 */ ZL4_ANIM_24,
+ /* 25 */ ZL4_ANIM_25,
+ /* 26 */ ZL4_ANIM_26,
+ /* 27 */ ZL4_ANIM_27,
+ /* 28 */ ZL4_ANIM_28,
+ /* 29 */ ZL4_ANIM_29,
+ /* 30 */ ZL4_ANIM_30,
+ /* 31 */ ZL4_ANIM_31,
+ /* 32 */ ZL4_ANIM_32,
+ /* 33 */ ZL4_ANIM_33
+} EnZl4Animation;
+
+struct_80034EC0_Entry sAnimationEntries[] = {
+ /* 0 */ /* standing idle */ { &gChildZeldaAnim_000654, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 1 */ /* moves to introduce herself */ { &gChildZeldaAnim_00E5C8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ /* 2 */ /* introducing herself */ { &gChildZeldaAnim_00EBC4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 3 */ /* turns away from window surprised */
+ { &gChildZeldaAnim_010DF8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ /* 4 */ /* standing with hand in front of mouth */
+ { &gChildZeldaAnim_011248, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 5 */ /* surprise, moves hand to mouth */ { &gChildZeldaAnim_011698, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 6 */ /* uncrosses arms, leans toward link with hands together */
+ { &gChildZeldaAnim_011B34, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -8.0f },
+ /* 7 */ /* turns to write letter */ { &gChildZeldaAnim_0125E4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
+ /* 8 */ /* writing letter */ { &gChildZeldaAnim_012E58, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 9 */ /* pulls back, looks askew */ { &gChildZeldaAnim_013280, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ /* 10 */ /* looks askew at Link */ { &gChildZeldaAnim_013628, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 11 */ /* crosses arms, looks to the side */ { &gChildZeldaAnim_013A50, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ /* 12 */ /* arms crossed, looking away */ { &gChildZeldaAnim_013EA0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 13 */ /* turns away, hands behind back, looks up */
+ { &gChildZeldaAnim_015F14, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 14 */ /* turns back to link, hands on top of each other */
+ { &gChildZeldaAnim_0169B4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 15 */ /* hands behind back looking up */ { &gChildZeldaAnim_016D08, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 16 */ /* leans toward link, looks askew */ { &gChildZeldaAnim_01726C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ /* 17 */ /* leaning toward link, looking askew */
+ { &gChildZeldaAnim_017818, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -8.0f },
+ /* 18 */ /* neutral, looking at Link */ { &gChildZeldaAnim_01805C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 19 */ /* moves towards link, hands clasped */
+ { &gChildZeldaAnim_018898, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ /* 20 */ /* facing link, hands clasped */ { &gChildZeldaAnim_01910C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 21 */ /* look in window */ { &gChildZeldaAnim_019600, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 22 */ /* leans forward, hands together */ { &gChildZeldaAnim_01991C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ /* 23 */ /* turns to link, hands on top of each other */
+ { &gChildZeldaAnim_01A2FC, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 24 */ /* stands, hands on top of each other */
+ { &gChildZeldaAnim_01AAE0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 25 */ /* leaning forward, hands together */ { &gChildZeldaAnim_01AE88, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 26 */ /* walks aside, points to window */ { &gChildZeldaAnim_01B874, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
+ /* 27 */ /* stands pointing at window */ { &gChildZeldaAnim_01BCF0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 28 */ /* laughs, hands together */ { &gChildZeldaAnim_01C494, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 29 */ /* happy, hands together */ { &gChildZeldaAnim_01C7B0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ /* 30 */ /* standing hands behind back looking down*/
+ { &gChildZeldaAnim_01CE08, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 31 */ /* cocks head, hands clasped */ { &gChildZeldaAnim_00F0A4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
+ /* 32 */ /* happy, hands clasped */ { &gChildZeldaAnim_00F894, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ /* 33 */ /* transition to standing */ { &gChildZeldaAnim_000654, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -8.0f },
+};
+
+#include "z_en_zl4_cutscene_data.c"
+
+void EnZl4_SetCsCameraAngle(GlobalContext* globalCtx, s16 index) {
+ Camera* activeCam = ACTIVE_CAM;
+
+ Camera_ChangeSetting(activeCam, 0x21);
+ activeCam->at = sCsCameraAngle[index].at;
+ activeCam->eye = activeCam->eyeNext = sCsCameraAngle[index].eye;
+ activeCam->roll = sCsCameraAngle[index].roll;
+ activeCam->fov = sCsCameraAngle[index].fov;
+}
+
+void EnZl4_SetCsCameraMove(GlobalContext* globalCtx, s16 index) {
+ Camera* activeCam = ACTIVE_CAM;
+ Player* player = PLAYER;
+
+ Camera_ChangeSetting(activeCam, 0x25);
+ Camera_ResetAnim(activeCam);
+ Camera_SetCSParams(activeCam, sCsCameraMove[index].atPoints, sCsCameraMove[index].eyePoints, player,
+ sCsCameraMove[index].relativeToPlayer);
+}
+
+u16 EnZl4_GetText(GlobalContext* globalCtx, Actor* thisx) {
+ u16 faceReaction = Text_GetFaceReaction(globalCtx, 22);
+ u16 stoneCount;
+ s16 ret;
+
+ if (faceReaction != 0) {
+ return faceReaction;
+ }
+
+ stoneCount = 0;
+ if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD)) {
+ stoneCount = 1;
+ }
+ if (CHECK_QUEST_ITEM(QUEST_GORON_RUBY)) {
+ stoneCount++;
+ }
+ if (CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
+ stoneCount++;
+ }
+
+ if (stoneCount > 1) {
+ ret = 0x703D;
+ } else {
+ ret = 0x703C;
+ }
+ return ret;
+}
+
+s16 func_80B5B9B0(GlobalContext* globalCtx, Actor* thisx) {
+ if (func_8010BDBC(&globalCtx->msgCtx) == 2) {
+ return false;
+ }
+ return true;
+}
+
+void EnZl4_UpdateFace(EnZl4* this) {
+ if (this->blinkTimer > 0) {
+ this->blinkTimer--;
+ } else {
+ this->blinkTimer = 0;
+ }
+ if (this->blinkTimer <= 2) {
+ this->leftEyeState = this->rightEyeState = this->blinkTimer;
+ }
+ switch (this->eyeExpression) {
+ case ZL4_EYES_NEUTRAL:
+ if (this->blinkTimer == 0) {
+ this->blinkTimer = Rand_S16Offset(30, 30);
+ }
+ break;
+ case ZL4_EYES_SHUT:
+ if (this->blinkTimer == 0) {
+ this->leftEyeState = this->rightEyeState = ZL4_EYE_SHUT;
+ }
+ break;
+ case ZL4_EYES_LOOK_LEFT:
+ if (this->blinkTimer == 0) {
+ this->leftEyeState = ZL4_EYE_LOOK_OUT;
+ this->rightEyeState = ZL4_EYE_LOOK_IN;
+ }
+ break;
+ case ZL4_EYES_LOOK_RIGHT:
+ if (this->blinkTimer == 0) {
+ this->leftEyeState = ZL4_EYE_LOOK_IN;
+ this->rightEyeState = ZL4_EYE_LOOK_OUT;
+ }
+ break;
+ case ZL4_EYES_WIDE:
+ if (this->blinkTimer == 0) {
+ this->leftEyeState = this->rightEyeState = ZL4_EYE_WIDE;
+ }
+ break;
+ case ZL4_EYES_SQUINT:
+ if (this->blinkTimer == 0) {
+ this->leftEyeState = this->rightEyeState = ZL4_EYE_SQUINT;
+ }
+ break;
+ case ZL4_EYES_OPEN:
+ if (this->blinkTimer >= 3) {
+ this->blinkTimer = ZL4_EYE_OPEN;
+ }
+ break;
+ }
+ switch (this->mouthExpression) {
+ case ZL4_MOUTH_HAPPY:
+ this->mouthState = 1;
+ break;
+ case ZL4_MOUTH_WORRIED:
+ this->mouthState = 2;
+ break;
+ case ZL4_MOUTH_SURPRISED:
+ this->mouthState = 3;
+ break;
+ default:
+ this->mouthState = 0;
+ break;
+ }
+}
+
+void EnZl4_SetMove(EnZl4* this, GlobalContext* globalCtx) {
+ this->skelAnime.moveFlags |= 1;
+ AnimationContext_SetMoveActor(globalCtx, &this->actor, &this->skelAnime, 1.0f);
+}
+
+void func_80B5BB78(EnZl4* this, GlobalContext* globalCtx) {
+ Player* player = PLAYER;
+
+ this->unk_1E0.unk_18 = player->actor.world.pos;
+ func_80034A14(&this->actor, &this->unk_1E0, 2, 2);
+}
+
+void EnZl4_GetActionStartPos(CsCmdActorAction* action, Vec3f* vec) {
+ vec->x = action->startPos.x;
+ vec->y = action->startPos.y;
+ vec->z = action->startPos.z;
+}
+
+s32 EnZl4_SetupFromLegendCs(EnZl4* this, GlobalContext* globalCtx) {
+ Player* player = PLAYER;
+ Actor* playerx = &PLAYER->actor;
+ s16 rotY;
+
+ func_8002DF54(globalCtx, &this->actor, 8);
+ playerx->world.pos = this->actor.world.pos;
+ rotY = this->actor.shape.rot.y;
+ playerx->world.pos.x += 56.0f * Math_SinS(rotY);
+ playerx->world.pos.z += 56.0f * Math_CosS(rotY);
+
+ player->linearVelocity = playerx->speedXZ = 0.0f;
+
+ EnZl4_SetCsCameraMove(globalCtx, 5);
+ ShrinkWindow_SetVal(0x20);
+ Interface_ChangeAlpha(2);
+ this->talkTimer2 = 0;
+ return true;
+}
+
+s32 EnZl4_InMovingAnim(EnZl4* this) {
+ if ((this->skelAnime.animation == &gChildZeldaAnim_01B874) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_01BCF0) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_0125E4) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_012E58) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_015F14) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_0169B4) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_016D08) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_01805C) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_01A2FC) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_01AAE0) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_01CE08) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_018898) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_01910C) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_00F0A4) ||
+ (this->skelAnime.animation == &gChildZeldaAnim_00F894)) {
+ return true;
+ }
+ return false;
+}
+
+void EnZl4_Init(Actor* thisx, GlobalContext* globalCtx) {
+ s32 pad;
+ EnZl4* this = THIS;
+
+ SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gChildZeldaSkel, NULL, this->jointTable, this->morphTable, 18);
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 18.0f);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_21);
+ Collider_InitCylinder(globalCtx, &this->collider);
+ Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
+ CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
+ Actor_SetScale(&this->actor, 0.01f);
+ this->actor.targetMode = 6;
+ this->actor.textId = -1;
+ this->eyeExpression = this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+
+ if (gSaveContext.sceneSetupIndex >= 4) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
+ this->actionFunc = EnZl4_TheEnd;
+ } else if (gSaveContext.eventChkInf[4] & 1) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
+ this->actionFunc = EnZl4_Idle;
+ } else {
+ if (gSaveContext.entranceIndex != 0x5F0) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_21);
+ this->csState = ZL4_CS_WAIT;
+ this->talkState = 0;
+ } else {
+ EnZl4_SetupFromLegendCs(this, globalCtx);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
+ this->csState = ZL4_CS_LEGEND;
+ this->talkState = 0;
+ }
+ this->actionFunc = EnZl4_Cutscene;
+ }
+}
+
+void EnZl4_Destroy(Actor* thisx, GlobalContext* globalCtx) {
+ s32 pad;
+ EnZl4* this = THIS;
+
+ Collider_DestroyCylinder(globalCtx, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5B90C.s")
+s32 EnZl4_SetNextAnim(EnZl4* this, s32 nextAnim) {
+ if (!Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ return false;
+ }
+ func_80034EC0(&this->skelAnime, sAnimationEntries, nextAnim);
+ return true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5B9B0.s")
+void EnZl4_ReverseAnimation(EnZl4* this) {
+ f32 tempFrame = this->skelAnime.startFrame;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5B9E8.s")
+ this->skelAnime.startFrame = this->skelAnime.endFrame;
+ this->skelAnime.curFrame = this->skelAnime.endFrame;
+ this->skelAnime.endFrame = tempFrame;
+ this->skelAnime.playSpeed = -1.0f;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5BB38.s")
+s32 EnZl4_CsWaitForPlayer(EnZl4* this, GlobalContext* globalCtx) {
+ Player* player = PLAYER;
+ Actor* playerx = &PLAYER->actor;
+ s16 rotY;
+ s16 yawDiff;
+ s16 absYawDiff;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5BB78.s")
+ if (!func_8002F194(&this->actor, globalCtx)) {
+ yawDiff = (f32)this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
+ absYawDiff = ABS(yawDiff);
+ if ((playerx->world.pos.y != this->actor.world.pos.y) || (absYawDiff >= 0x3FFC)) {
+ return false;
+ } else {
+ func_8002F2CC(&this->actor, globalCtx, this->collider.dim.radius + 60.0f);
+ return false;
+ }
+ }
+ playerx->world.pos = this->actor.world.pos;
+ rotY = this->actor.shape.rot.y;
+ playerx->world.pos.x += 56.0f * Math_SinS(rotY);
+ playerx->world.pos.z += 56.0f * Math_CosS(rotY);
+ playerx->speedXZ = 0.0f;
+ player->linearVelocity = 0.0f;
+ return true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5BBC0.s")
+s32 EnZl4_CsMeetPlayer(EnZl4* this, GlobalContext* globalCtx) {
+ switch (this->talkState) {
+ case 0:
+ if (this->skelAnime.curFrame == 50.0f) {
+ Audio_PlayActorSound2(&this->actor, NA_SE_VO_Z0_MEET);
+ }
+ if (!EnZl4_SetNextAnim(this, ZL4_ANIM_4)) {
+ break;
+ } else {
+ func_8010B680(globalCtx, 0x702E, NULL);
+ this->talkState++;
+ }
+ break;
+ case 1:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 1);
+ func_8010B680(globalCtx, 0x702F, NULL);
+ this->talkTimer2 = 0;
+ this->talkState++;
+ }
+ break;
+ case 2:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gZeldasCourtyardMeetCs);
+ gSaveContext.cutsceneTrigger = 1;
+ EnZl4_SetCsCameraMove(globalCtx, 0);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkTimer2 = 0;
+ this->talkState++;
+ }
+ break;
+ case 3:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 45) {
+ func_8010B680(globalCtx, 0x70F9, NULL);
+ this->talkState++;
+ }
+ break;
+ case 4:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraMove(globalCtx, 1);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkTimer2 = 0;
+ this->talkState++;
+ }
+ break;
+ case 5:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 10) {
+ func_8010B680(globalCtx, 0x70FA, NULL);
+ this->talkState++;
+ }
+ break;
+ case 6:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 2);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_22);
+ this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+ this->talkTimer2 = 0;
+ this->talkState++;
+ func_8010B680(globalCtx, 0x70FB, NULL);
+ }
+ break;
+ }
+ return (this->talkState == 7) ? 1 : 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5BC00.s")
+s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
+ switch (this->talkState) {
+ case 0:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_25)) {
+ this->talkState++;
+ }
+ case 1:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 3);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkTimer1 = 40;
+ this->talkState = 2;
+ }
+ break;
+ case 2:
+ if (DECR(this->talkTimer1) == 0) {
+ func_8010B680(globalCtx, 0x7030, NULL);
+ this->talkState++;
+ }
+ break;
+ case 3:
+ if (!((func_8010BDBC(&globalCtx->msgCtx) == 4) && func_80106BC8(globalCtx))) {
+ break;
+ } else if (globalCtx->msgCtx.choiceIndex == 0) {
+ EnZl4_SetCsCameraAngle(globalCtx, 4);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_28);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_SQUINT;
+ this->mouthExpression = ZL4_MOUTH_HAPPY;
+ func_8010B680(globalCtx, 0x7032, NULL);
+ this->talkState = 7;
+ } else {
+ EnZl4_SetCsCameraAngle(globalCtx, 2);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_9);
+ this->mouthExpression = ZL4_MOUTH_WORRIED;
+ func_8010B680(globalCtx, 0x7031, NULL);
+ this->talkState++;
+ }
+ break;
+ case 4:
+ if (this->skelAnime.curFrame == 16.0f) {
+ Audio_PlayActorSound2(&this->actor, NA_SE_VO_Z0_QUESTION);
+ }
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_10)) {
+ this->talkState++;
+ }
+ case 5:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ globalCtx->msgCtx.msgMode = 0x37;
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_9);
+ this->mouthExpression = ZL4_MOUTH_WORRIED;
+ EnZl4_ReverseAnimation(this);
+ this->talkState = 6;
+ }
+ break;
+ case 6:
+ this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+ EnZl4_SetCsCameraAngle(globalCtx, 3);
+ func_8010B680(globalCtx, 0x7030, NULL);
+ this->talkState = 12;
+ break;
+ case 12:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_25)) {
+ this->talkState = 13;
+ }
+ case 13:
+ if (!((func_8010BDBC(&globalCtx->msgCtx) == 4) && func_80106BC8(globalCtx))) {
+ break;
+ } else if (globalCtx->msgCtx.choiceIndex == 0) {
+ EnZl4_SetCsCameraAngle(globalCtx, 4);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_28);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_SQUINT;
+ this->mouthExpression = ZL4_MOUTH_HAPPY;
+ func_8010B680(globalCtx, 0x7032, NULL);
+ this->talkState = 7;
+ } else {
+ EnZl4_SetCsCameraAngle(globalCtx, 2);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_9);
+ this->mouthExpression = ZL4_MOUTH_WORRIED;
+ func_8010B680(globalCtx, 0x7031, NULL);
+ this->talkState = 4;
+ }
+ break;
+ case 7:
+ if (this->skelAnime.curFrame == 17.0f) {
+ Audio_PlayActorSound2(&this->actor, NA_SE_VO_Z0_SMILE_0);
+ }
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_29)) {
+ this->talkState++;
+ }
+ case 8:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraMove(globalCtx, 2);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+ func_8010B680(globalCtx, 0x70FC, NULL);
+ this->talkState = 9;
+ }
+ break;
+ case 9:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 5);
+ func_8010B680(globalCtx, 0x70FD, NULL);
+ this->talkState++;
+ }
+ break;
+ case 10:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_5);
+ this->eyeExpression = ZL4_EYES_OPEN;
+ this->mouthExpression = ZL4_MOUTH_SURPRISED;
+ func_8010B680(globalCtx, 0x70FE, NULL);
+ this->talkState++;
+ }
+ break;
+ }
+ return (this->talkState == 11) ? 1 : 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5BCDC.s")
+s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
+ switch (this->talkState) {
+ case 0:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_4)) {
+ this->talkState++;
+ }
+ break;
+ case 1:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 6);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_1);
+ this->blinkTimer = 11;
+ this->eyeExpression = ZL4_EYES_SQUINT;
+ this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+ globalCtx->msgCtx.msgMode = 0x37;
+ func_8010B680(globalCtx, 0x70FF, NULL);
+ this->talkState++;
+ }
+ break;
+ case 2:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_2)) {
+ this->talkState++;
+ }
+ case 3:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_16);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState = 4;
+ }
+ break;
+ case 4:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_17)) {
+ func_8010B680(globalCtx, 0x2073, NULL);
+ this->talkState++;
+ }
+ break;
+ case 5:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraMove(globalCtx, 3);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkTimer2 = 0;
+ this->talkState = 6;
+ }
+ break;
+ case 6:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 15) {
+ func_8010B680(globalCtx, 0x2074, NULL);
+ this->talkState++;
+ }
+ break;
+ case 7:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_6);
+ this->mouthExpression = ZL4_MOUTH_HAPPY;
+ func_8010B680(globalCtx, 0x2075, NULL);
+ this->talkState++;
+ }
+ break;
+ case 8:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_25)) {
+ this->talkState++;
+ }
+ case 9:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_8010B680(globalCtx, 0x7033, NULL);
+ this->talkState = 10;
+ }
+ break;
+ case 10:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 4) && func_80106BC8(globalCtx)) {
+ if (globalCtx->msgCtx.choiceIndex == 0) {
+ EnZl4_SetCsCameraMove(globalCtx, 4);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_33);
+ this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkTimer2 = 0;
+ this->talkState = 15;
+ } else {
+ EnZl4_SetCsCameraAngle(globalCtx, 6);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkTimer1 = 20;
+ this->talkState++;
+ this->skelAnime.playSpeed = 0.0f;
+ }
+ }
+ break;
+ case 11:
+ if (DECR(this->talkTimer1) == 0) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_11);
+ this->blinkTimer = 11;
+ this->eyeExpression = ZL4_EYES_LOOK_RIGHT;
+ this->mouthExpression = ZL4_MOUTH_WORRIED;
+ func_8010B680(globalCtx, 0x7034, NULL);
+ this->talkState++;
+ }
+ break;
+ case 12:
+ if (this->skelAnime.curFrame == 5.0f) {
+ Audio_PlayActorSound2(&this->actor, NA_SE_VO_Z0_SIGH_0);
+ }
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_12)) {
+ this->talkState++;
+ }
+ case 13:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_6);
+ this->blinkTimer = 3;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_HAPPY;
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState = 14;
+ }
+ break;
+ case 14:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_25)) {
+ func_8010B680(globalCtx, 0x7033, NULL);
+ this->talkState = 10;
+ }
+ break;
+ case 15:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 30) {
+ func_8010B680(globalCtx, 0x7035, NULL);
+ this->talkState++;
+ }
+ break;
+ case 16:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState++;
+ }
+ case 17:
+ this->talkTimer2++;
+ if (this->talkTimer2 == 130) {
+ globalCtx->msgCtx.msgMode = 0x37;
+ globalCtx->nextEntranceIndex = 0xA0;
+ gSaveContext.nextCutsceneIndex = 0xFFF7;
+ globalCtx->sceneLoadFlag = 0x14;
+ globalCtx->fadeTransition = 3;
+ }
+ break;
+ }
+ if ((this->talkTimer2 == 17) && (this->talkTimer2 > 130)) {
+ return true;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/EnZl4_Init.s")
+s32 EnZl4_CsTellLegend(EnZl4* this, GlobalContext* globalCtx) {
+ Camera* activeCam = ACTIVE_CAM;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/EnZl4_Destroy.s")
+ switch (this->talkState) {
+ case 0:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 60) {
+ func_8010B680(globalCtx, 0x7037, NULL);
+ this->talkState++;
+ }
+ break;
+ case 1:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 7);
+ func_8010B680(globalCtx, 0x2076, NULL);
+ this->talkState++;
+ }
+ break;
+ case 2:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraMove(globalCtx, 6);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState++;
+ }
+ break;
+ case 3:
+ if (activeCam->animState == 2) {
+ func_8010B680(globalCtx, 0x2077, NULL);
+ this->talkState++;
+ }
+ break;
+ case 4:
+ if (!((func_8010BDBC(&globalCtx->msgCtx) == 4) && func_80106BC8(globalCtx))) {
+ break;
+ } else if (globalCtx->msgCtx.choiceIndex == 0) {
+ EnZl4_SetCsCameraAngle(globalCtx, 8);
+ func_8010B680(globalCtx, 0x7005, NULL);
+ this->talkState = 9;
+ } else {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_5);
+ this->mouthExpression = ZL4_MOUTH_SURPRISED;
+ func_8010B680(globalCtx, 0x7038, NULL);
+ this->talkState++;
+ Audio_PlayActorSound2(&this->actor, NA_SE_VO_Z0_HURRY);
+ }
+ break;
+ case 5:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_4)) {
+ this->talkState++;
+ }
+ case 6:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_33);
+ this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+ func_8010B680(globalCtx, 0x7037, NULL);
+ this->talkState++;
+ }
+ break;
+ case 7:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_8010B680(globalCtx, 0x2076, NULL);
+ this->talkState++;
+ }
+ break;
+ case 8:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_8010B680(globalCtx, 0x2077, NULL);
+ this->talkState = 4;
+ }
+ break;
+ case 9:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_26);
+ func_8010B680(globalCtx, 0x2078, NULL);
+ this->talkState++;
+ }
+ break;
+ case 10:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_27)) {
+ this->talkState++;
+ }
+ case 11:
+ if (!((func_8010BDBC(&globalCtx->msgCtx) == 4) && func_80106BC8(globalCtx))) {
+ break;
+ } else if (globalCtx->msgCtx.choiceIndex == 0) {
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState = 13;
+ } else {
+ func_8010B680(globalCtx, 0x700B, NULL);
+ this->talkState = 12;
+ }
+ break;
+ case 12:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState = 13;
+ }
+ break;
+ }
+ return (this->talkState == 13) ? 1 : 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5BF90.s")
+s32 EnZl4_CsLookWindow(EnZl4* this, GlobalContext* globalCtx) {
+ switch (this->talkState) {
+ case 0:
+ EnZl4_SetCsCameraMove(globalCtx, 7);
+ globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gZeldasCourtyardWindowCs);
+ gSaveContext.cutsceneTrigger = 1;
+ this->talkState++;
+ break;
+ case 1:
+ if (globalCtx->csCtx.state != 0) {
+ if (globalCtx->csCtx.frames == 90) {
+ globalCtx->csCtx.state = 3;
+ }
+ } else {
+ globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gZeldasCourtyardGanonCs);
+ gSaveContext.cutsceneTrigger = 1;
+ this->talkState++;
+ func_8002DF54(globalCtx, &this->actor, 8);
+ }
+ break;
+ case 2:
+ if (globalCtx->csCtx.state != 0) {
+ if (globalCtx->csCtx.frames == 209) {
+ globalCtx->csCtx.state = 3;
+ }
+ } else {
+ func_800AA000(0.0f, 0xA0, 0xA, 0x28);
+ func_8002DF54(globalCtx, &this->actor, 1);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_30);
+ EnZl4_SetCsCameraAngle(globalCtx, 11);
+ func_8010B680(globalCtx, 0x7039, NULL);
+ this->talkState++;
+ }
+ break;
+ case 3:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState++;
+ }
+ break;
+ }
+ return (this->talkState == 4) ? 1 : 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5BFE4.s")
+s32 EnZl4_CsWarnAboutGanon(EnZl4* this, GlobalContext* globalCtx) {
+ Player* player = PLAYER;
+ s16 rotY;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5C008.s")
+ switch (this->talkState) {
+ case 0:
+ player->actor.world.pos = this->actor.world.pos;
+ rotY = this->actor.shape.rot.y - 0x3FFC;
+ player->actor.world.pos.x += 34.0f * Math_SinS(rotY);
+ player->actor.world.pos.z += 34.0f * Math_CosS(rotY);
+ EnZl4_SetCsCameraMove(globalCtx, 8);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_WIDE;
+ this->mouthExpression = ZL4_MOUTH_WORRIED;
+ this->talkTimer2 = 0;
+ this->talkState++;
+ func_8010B680(globalCtx, 0x2079, NULL);
+ case 1:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 20) {
+ this->talkState++;
+ }
+ break;
+ case 2:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraMove(globalCtx, 9);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkTimer2 = 0;
+ this->talkState++;
+ }
+ break;
+ case 3:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 20) {
+ func_8010B680(globalCtx, 0x207A, NULL);
+ this->talkState++;
+ }
+ break;
+ case 4:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 12);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_23);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_SURPRISED;
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState++;
+ }
+ break;
+ case 5:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_24)) {
+ func_8010B680(globalCtx, 0x207B, NULL);
+ this->talkState++;
+ }
+ break;
+ case 6:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_8010B680(globalCtx, 0x703A, NULL);
+ this->talkState++;
+ }
+ break;
+ case 7:
+ if (!((func_8010BDBC(&globalCtx->msgCtx) == 4) && func_80106BC8(globalCtx))) {
+ break;
+ } else if (globalCtx->msgCtx.choiceIndex == 0) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_31);
+ this->blinkTimer = 11;
+ this->eyeExpression = ZL4_EYES_SQUINT;
+ this->mouthExpression = ZL4_MOUTH_HAPPY;
+ func_8010B680(globalCtx, 0x703B, NULL);
+ this->talkState = 11;
+ } else {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_13);
+ this->blinkTimer = 11;
+ this->eyeExpression = ZL4_EYES_LOOK_LEFT;
+ this->mouthExpression = ZL4_MOUTH_WORRIED;
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState++;
+ }
+ break;
+ case 8:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_15)) {
+ this->blinkTimer = 3;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_SURPRISED;
+ func_8010B680(globalCtx, 0x7073, NULL);
+ this->talkState++;
+ }
+ break;
+ case 9:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_14);
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState++;
+ }
+ break;
+ case 10:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_24)) {
+ func_8010B680(globalCtx, 0x703A, NULL);
+ this->talkState = 7;
+ }
+ break;
+ case 11:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_32)) {
+ this->talkState++;
+ }
+ case 12:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ globalCtx->msgCtx.msgMode = 0x37;
+ this->talkState = 13;
+ }
+ break;
+ }
+ return (this->talkState == 13) ? 1 : 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5C160.s")
+s32 EnZl4_CsMakePlan(EnZl4* this, GlobalContext* globalCtx) {
+ switch (this->talkState) {
+ case 0:
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_18);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_WORRIED;
+ EnZl4_SetCsCameraMove(globalCtx, 10);
+ this->talkTimer2 = 0;
+ this->talkState++;
+ case 1:
+ this->talkTimer2++;
+ if (this->talkTimer2 >= 10) {
+ func_8010B680(globalCtx, 0x7123, NULL);
+ this->talkState++;
+ }
+ break;
+ case 2:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ EnZl4_SetCsCameraAngle(globalCtx, 13);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_19);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_SURPRISED;
+ func_8010B680(globalCtx, 0x207C, NULL);
+ this->talkState++;
+ }
+ break;
+ case 3:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_20)) {
+ this->talkState++;
+ }
+ case 4:
+ if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
+ func_8010B680(globalCtx, 0x207D, NULL);
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_7);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_NEUTRAL;
+ this->talkState = 5;
+ this->unk_20F = this->lastAction = 0;
+ }
+ break;
+ case 5:
+ if (EnZl4_SetNextAnim(this, ZL4_ANIM_8)) {
+ this->talkState++;
+ }
+ case 6:
+ if (!((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx))) {
+ break;
+ } else {
+ Camera_ChangeSetting(globalCtx->cameraPtrs[globalCtx->activeCamera], 1);
+ this->talkState = 7;
+ globalCtx->talkWithPlayer(globalCtx, &this->actor);
+ func_8002F434(&this->actor, globalCtx, GI_LETTER_ZELDA, fabsf(this->actor.xzDistToPlayer) + 1.0f,
+ fabsf(this->actor.yDistToPlayer) + 1.0f);
+ globalCtx->msgCtx.unk_E3E7 = 4;
+ globalCtx->msgCtx.msgMode = 0x36;
+ }
+ break;
+ case 7:
+ if (Actor_HasParent(&this->actor, globalCtx)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
+ this->talkState++;
+ } else {
+ func_8002F434(&this->actor, globalCtx, GI_LETTER_ZELDA, fabsf(this->actor.xzDistToPlayer) + 1.0f,
+ fabsf(this->actor.yDistToPlayer) + 1.0f);
+ }
+ // no break here is required for matching
+ }
+ return (this->talkState == 8) ? 1 : 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5C458.s")
+void EnZl4_Cutscene(EnZl4* this, GlobalContext* globalCtx) {
+ Player* player = PLAYER;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5C984.s")
+ switch (this->csState) {
+ case ZL4_CS_WAIT:
+ if (EnZl4_CsWaitForPlayer(this, globalCtx)) {
+ this->talkState = 0;
+ this->csState++;
+ }
+ break;
+ case ZL4_CS_START:
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_3);
+ this->blinkTimer = 0;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_SURPRISED;
+ func_800F5C64(0x51);
+ EnZl4_SetCsCameraAngle(globalCtx, 0);
+ Interface_ChangeAlpha(2);
+ ShrinkWindow_SetVal(0x20);
+ this->talkState = 0;
+ this->csState++;
+ break;
+ case ZL4_CS_MEET:
+ if (EnZl4_CsMeetPlayer(this, globalCtx)) {
+ this->talkState = 0;
+ this->csState++;
+ }
+ break;
+ case ZL4_CS_STONE:
+ if (EnZl4_CsAskStone(this, globalCtx)) {
+ this->talkState = 0;
+ this->csState++;
+ }
+ break;
+ case ZL4_CS_NAMES:
+ if (EnZl4_CsAskName(this, globalCtx)) {
+ this->talkState = 0;
+ this->csState++;
+ }
+ break;
+ case ZL4_CS_LEGEND:
+ if (EnZl4_CsTellLegend(this, globalCtx)) {
+ this->talkState = 0;
+ this->csState++;
+ }
+ break;
+ case ZL4_CS_WINDOW:
+ if (EnZl4_CsLookWindow(this, globalCtx)) {
+ this->talkState = 0;
+ this->csState++;
+ }
+ break;
+ case ZL4_CS_GANON:
+ if (EnZl4_CsWarnAboutGanon(this, globalCtx)) {
+ this->talkState = 0;
+ this->csState++;
+ }
+ break;
+ case ZL4_CS_PLAN:
+ if (EnZl4_CsMakePlan(this, globalCtx)) {
+ func_8002DF54(globalCtx, &this->actor, 7);
+ gSaveContext.unk_13EE = 0x32;
+ gSaveContext.eventChkInf[4] |= 1;
+ this->actionFunc = EnZl4_Idle;
+ }
+ break;
+ }
+ this->unk_1E0.unk_18 = player->actor.world.pos;
+ func_80034A14(&this->actor, &this->unk_1E0, 2, (this->csState == ZL4_CS_WINDOW) ? 2 : 1);
+ if (EnZl4_InMovingAnim(this)) {
+ EnZl4_SetMove(this, globalCtx);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5CF70.s")
+void EnZl4_Idle(EnZl4* this, GlobalContext* globalCtx) {
+ func_800343CC(globalCtx, &this->actor, &this->unk_1E0.unk_00, this->collider.dim.radius + 60.0f, EnZl4_GetText,
+ func_80B5B9B0);
+ func_80B5BB78(this, globalCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5D3CC.s")
+void EnZl4_TheEnd(EnZl4* this, GlobalContext* globalCtx) {
+ s32 animIndex[] = { ZL4_ANIM_0, ZL4_ANIM_0, ZL4_ANIM_0, ZL4_ANIM_0, ZL4_ANIM_0,
+ ZL4_ANIM_0, ZL4_ANIM_0, ZL4_ANIM_26, ZL4_ANIM_21, ZL4_ANIM_3 };
+ CsCmdActorAction* npcAction;
+ Vec3f pos;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5D610.s")
+ if (SkelAnime_Update(&this->skelAnime) && (this->skelAnime.animation == &gChildZeldaAnim_010DF8)) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_4);
+ }
+ if (EnZl4_InMovingAnim(this)) {
+ EnZl4_SetMove(this, globalCtx);
+ }
+ if (globalCtx->csCtx.frames == 100) {
+ this->eyeExpression = ZL4_EYES_LOOK_LEFT;
+ }
+ if (globalCtx->csCtx.frames == 450) {
+ this->blinkTimer = 3;
+ this->eyeExpression = ZL4_EYES_NEUTRAL;
+ this->mouthExpression = ZL4_MOUTH_SURPRISED;
+ }
+ npcAction = globalCtx->csCtx.npcActions[0];
+ if (npcAction != NULL) {
+ EnZl4_GetActionStartPos(npcAction, &pos);
+ if (this->lastAction == 0) {
+ this->actor.world.pos = this->actor.home.pos = pos;
+ }
+ if (this->lastAction != npcAction->action) {
+ func_80034EC0(&this->skelAnime, sAnimationEntries, animIndex[npcAction->action]);
+ this->lastAction = npcAction->action;
+ }
+ this->actor.velocity.x = 0.0f;
+ this->actor.velocity.y = 0.0f;
+ this->actor.velocity.z = 0.0f;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5DAD8.s")
+void EnZl4_Update(Actor* thisx, GlobalContext* globalCtx) {
+ s32 pad;
+ EnZl4* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5DE1C.s")
+ if (this->actionFunc != EnZl4_TheEnd) {
+ SkelAnime_Update(&this->skelAnime);
+ }
+ EnZl4_UpdateFace(this);
+ Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ this->actionFunc(this, globalCtx);
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5E090.s")
+s32 EnZl4_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
+ EnZl4* this = THIS;
+ Vec3s sp1C;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5E108.s")
+ if (limbIndex == 17) {
+ sp1C = this->unk_1E0.unk_08;
+ Matrix_Translate(900.0f, 0.0f, 0.0f, 1);
+ Matrix_RotateX((sp1C.y / (f32)0x8000) * M_PI, MTXMODE_APPLY);
+ Matrix_RotateZ((sp1C.x / (f32)0x8000) * M_PI, MTXMODE_APPLY);
+ Matrix_Translate(-900.0f, 0.0f, 0.0f, 1);
+ }
+ if (limbIndex == 10) {
+ sp1C = this->unk_1E0.unk_0E;
+ Matrix_RotateY((sp1C.y / (f32)0x8000) * M_PI, MTXMODE_APPLY);
+ Matrix_RotateX((sp1C.x / (f32)0x8000) * M_PI, MTXMODE_APPLY);
+ }
+ if ((limbIndex >= 3) && (limbIndex < 7)) {
+ *dList = NULL;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/EnZl4_Update.s")
+void EnZl4_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
+ EnZl4* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5E364.s")
+ if (limbIndex == 17) {
+ Matrix_MultVec3f(&zeroVec, &this->actor.focus.pos);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/func_80B5E4F0.s")
+void EnZl4_Draw(Actor* thisx, GlobalContext* globalCtx) {
+ EnZl4* this = THIS;
+ u64* mouthTex[] = { gChildZeldaMouthNeutralTex, gChildZeldaMouthHappyTex, gChildZeldaMouthWorriedTex,
+ gChildZeldaMouthSurprisedTex };
+ u64* eyeTex[] = {
+ gChildZeldaEyeOpenTex, gChildZeldaEyeBlinkTex, gChildZeldaEyeShutTex, gChildZeldaEyeWideTex,
+ gChildZeldaEyeSquintTex, gChildZeldaEyeOutTex, gChildZeldaEyeInTex,
+ };
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Zl4/EnZl4_Draw.s")
+ OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_zl4.c", 2012);
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(eyeTex[this->rightEyeState]));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(eyeTex[this->leftEyeState]));
+ gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(mouthTex[this->mouthState]));
+ func_80093D18(globalCtx->state.gfxCtx);
+ SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ EnZl4_OverrideLimbDraw, EnZl4_PostLimbDraw, this);
+ CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_zl4.c", 2043);
+}
diff --git a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h
index 44dc3733b..699b1ed49 100644
--- a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h
+++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h
@@ -6,9 +6,29 @@
struct EnZl4;
+typedef void (*EnZl4ActionFunc)(struct EnZl4*, GlobalContext*);
+typedef void (*EnZl4DrawFunc)(struct EnZl4*, GlobalContext*);
+
typedef struct EnZl4 {
/* 0x0000 */ Actor actor;
- /* 0x014C */ char unk_14C[0x1A4];
+ /* 0x014C */ SkelAnime skelAnime;
+ /* 0x0190 */ EnZl4ActionFunc actionFunc;
+ /* 0x0194 */ ColliderCylinder collider;
+ /* 0x01E0 */ struct_80034A14_arg1 unk_1E0;
+ /* 0x0208 */ u8 talkState;
+ /* 0x0209 */ u8 csState;
+ /* 0x020A */ u8 leftEyeState;
+ /* 0x020B */ u8 rightEyeState;
+ /* 0x020C */ u8 mouthState;
+ /* 0x020D */ u8 eyeExpression;
+ /* 0x020E */ u8 mouthExpression;
+ /* 0x020F */ u8 unk_20F;
+ /* 0x0210 */ s16 blinkTimer;
+ /* 0x0212 */ s16 talkTimer1;
+ /* 0x0214 */ s16 talkTimer2;
+ /* 0x0216 */ s16 lastAction;
+ /* 0x0218 */ Vec3s jointTable[18];
+ /* 0x0284 */ Vec3s morphTable[18];
} EnZl4; // size = 0x02F0
extern const ActorInit En_Zl4_InitVars;
diff --git a/src/overlays/actors/ovl_En_Zl4/z_en_zl4_cutscene_data.c b/src/overlays/actors/ovl_En_Zl4/z_en_zl4_cutscene_data.c
new file mode 100644
index 000000000..63b8092d3
--- /dev/null
+++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4_cutscene_data.c
@@ -0,0 +1,186 @@
+#include "z_en_zl4.h"
+
+static CutsceneCameraAngle sCsCameraAngle[] = {
+ { { -490.0f, 120.0f, 0.0f }, { -440.0f, 117.0f, 0.0f }, 0, 45 },
+ { { -484.0f, 122.0f, -29.0f }, { -480.0f, 116.0f, 18.0f }, 0, 80 },
+ { { -413.0f, 136.0f, -72.0f }, { -403.0f, 141.0f, -89.0f }, 0, 25 },
+ { { -454.0f, 120.0f, 0.0f }, { -434.0f, 121.0f, 0.0f }, 0, 20 },
+ { { -453.0f, 107.0f, -13.0f }, { -440.0f, 102.0f, -25.0f }, 0, 40 },
+ { { -454.0f, 105.0f, 50.0f }, { -453.0f, 105.0f, 66.0f }, 0, 60 },
+ { { -496.0f, 119.0f, 0.0f }, { -443.0f, 115.0f, 0.0f }, 0, 45 },
+ { { -482.0f, 119.0f, 0.0f }, { -440.0f, 115.0f, 0.0f }, 0, 30 },
+ { { -551.0f, 119.0f, 7.0f }, { -587.0f, 115.0f, 14.0f }, 0, 25 },
+ { { -489.0f, 129.0f, 0.0f }, { -470.0f, 128.0f, 0.0f }, 0, 40 },
+ { { -525.0f, 126.0f, 0.0f }, { -509.0f, 126.0f, 0.0f }, 0, 10 },
+ { { -491.0f, 120.0f, -7.0f }, { -509.0f, 115.0f, -7.0f }, 0, 75 },
+ { { -485.0f, 119.0f, -35.0f }, { -484.0f, 116.0f, 15.0f }, 0, 45 },
+ { { -484.0f, 123.0f, -6.0f }, { -435.0f, 122.0f, -11.0f }, 0, 45 },
+};
+
+static CutsceneCameraPoint D_80B5EC70[] = {
+ { 0, 0, 20, 80.79987f, { -484, 122, -29 } }, { 0, 0, 20, 80.79987f, { -484, 122, -29 } },
+ { 0, 0, 20, 80.79987f, { -484, 122, -29 } }, { 0, 0, 20, 80.79987f, { -452, 121, -21 } },
+ { 0, 0, 20, 80.79987f, { -452, 121, -21 } }, { 0, 0, 20, 80.79987f, { -452, 121, -21 } },
+ { -1, 0, 20, 80.79987f, { -452, 121, -21 } }, { -1, 0, 30, 80.79987f, { -452, 121, -21 } },
+};
+static CutsceneCameraPoint D_80B5ECF0[] = {
+ { 0, 0, 0, 80.79987f, { -480, 116, 18 } }, { 0, 0, 0, 80.79987f, { -480, 116, 18 } },
+ { 0, 0, 0, 80.79987f, { -480, 116, 18 } }, { 0, 0, 0, 80.79987f, { -480, 116, 18 } },
+ { 0, 0, 0, 80.79987f, { -480, 116, 18 } }, { 0, 0, 0, 80.79987f, { -480, 116, 18 } },
+ { -1, 0, 0, 80.79987f, { -480, 116, 18 } }, { -1, 0, 0, 80.79987f, { -480, 116, 18 } },
+};
+static CutsceneCameraPoint D_80B5ED70[] = {
+ { 0, 0, 20, 45.200058f, { -439, 116, 0 } }, { 0, 0, 20, 45.200058f, { -439, 116, 0 } },
+ { 0, 0, 20, 50.60008f, { -433, 116, 0 } }, { 0, 0, 20, 55.600098f, { -431, 116, 0 } },
+ { 0, 0, 20, 60.000114f, { -427, 116, 0 } }, { 0, 0, 20, 65.000114f, { -424, 116, 0 } },
+ { 0, 0, 20, 70.800026f, { -422, 116, 0 } }, { 0, 0, 20, 75.59995f, { -419, 115, 0 } },
+ { -1, 0, 20, 75.59995f, { -419, 116, 0 } }, { -1, 0, 30, 75.59995f, { -419, 115, 0 } },
+};
+static CutsceneCameraPoint D_80B5EE10[] = {
+ { 0, 0, 0, 60.400116f, { -480, 114, 0 } }, { 0, 0, 0, 45.200058f, { -480, 114, 0 } },
+ { 0, 0, 0, 45.200058f, { -474, 114, 0 } }, { 0, 0, 0, 50.60008f, { -472, 114, 0 } },
+ { 0, 0, 0, 55.600098f, { -468, 114, 0 } }, { 0, 0, 0, 60.000114f, { -465, 114, 0 } },
+ { 0, 0, 0, 65.000114f, { -463, 114, 0 } }, { 0, 0, 0, 70.800026f, { -460, 114, 0 } },
+ { -1, 0, 0, 75.59995f, { -460, 114, 0 } }, { -1, 0, 0, 75.59995f, { -460, 114, 0 } },
+};
+static CutsceneCameraPoint D_80B5EEB0[] = {
+ { 0, 0, 25, 60.000114f, { -116, 50, 469 } }, { 0, 0, 25, 60.000114f, { -116, 50, 469 } },
+ { 0, 0, 25, 60.000114f, { -118, 50, 467 } }, { 0, 0, 25, 60.000114f, { -120, 50, 465 } },
+ { 0, 0, 25, 60.000114f, { -123, 50, 464 } }, { 0, 0, 25, 60.000114f, { -126, 50, 463 } },
+ { 0, 0, 25, 60.000114f, { -129, 50, 462 } }, { 0, 0, 25, 60.000114f, { -131, 50, 462 } },
+ { 0, 0, 25, 60.000114f, { -134, 50, 463 } }, { 0, 0, 25, 60.000114f, { -137, 50, 464 } },
+ { 0, 0, 25, 60.000114f, { -140, 50, 466 } }, { 0, 0, 25, 60.000114f, { -140, 50, 466 } },
+ { -1, 0, 25, 60.000114f, { -140, 50, 466 } }, { -1, 0, 25, 60.000114f, { -140, 50, 466 } },
+};
+static CutsceneCameraPoint D_80B5EF90[] = {
+ { 0, 0, 0, 20.399963f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { 0, 0, 0, 60.000114f, { -130, 50, 480 } }, { 0, 0, 0, 60.000114f, { -130, 50, 480 } },
+ { -1, 0, 0, 60.000114f, { -130, 50, 480 } }, { -1, 0, 0, 60.000114f, { -130, 50, 480 } },
+};
+static CutsceneCameraPoint D_80B5F070[] = {
+ { 0, 0, 30, 20.799965f, { -427, 116, 4 } }, { 0, 0, 30, 20.799965f, { -426, 115, 4 } },
+ { 0, 0, 30, 20.799965f, { -429, 115, 7 } }, { 0, 0, 30, 20.799965f, { -428, 114, 12 } },
+ { 0, 0, 30, 20.799965f, { -430, 114, 14 } }, { 0, 0, 30, 20.799965f, { -430, 114, 14 } },
+ { 0, 0, 30, 20.799965f, { -430, 114, 14 } }, { -1, 0, 30, 20.799965f, { -430, 112, 14 } },
+ { -1, 0, 30, 20.799965f, { -430, 112, 14 } },
+};
+static CutsceneCameraPoint D_80B5F100[] = {
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { 0, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { 0, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { 0, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { 0, 0, 0, 20.799965f, { -389, 109, 36 } }, { -1, 0, 0, 20.799965f, { -389, 109, 36 } },
+ { -1, 0, 0, 20.799965f, { -389, 109, 36 } },
+};
+static CutsceneCameraPoint D_80B5F190[] = {
+ { 0, 0, 30, 45.0f, { -496, 119, 0 } }, { 0, 0, 30, 45.0f, { -496, 119, 0 } },
+ { 0, 0, 30, 45.0f, { -496, 119, 0 } }, { 0, 0, 15, 45.0f, { -496, 119, 0 } },
+ { 0, 0, 15, 45.80006f, { -471, 122, 0 } }, { 0, 0, 15, 45.80006f, { -395, 139, 0 } },
+ { 0, 0, 15, 45.80006f, { -193, 183, 0 } }, { 0, 0, 15, 45.80006f, { 29, 232, 0 } },
+ { 0, 0, 30, 45.80006f, { 360, 304, 0 } }, { 0, 0, 30, 45.80006f, { 429, 328, 0 } },
+ { 0, 0, 30, 45.80006f, { 429, 328, 0 } }, { 0, 0, 30, 45.80006f, { 429, 328, 0 } },
+ { 0, 0, 30, 45.80006f, { 429, 328, 0 } }, { -1, 0, 30, 45.80006f, { 429, 328, 0 } },
+ { -1, 0, 30, 45.80006f, { 429, 328, 0 } },
+};
+static CutsceneCameraPoint D_80B5F280[] = {
+ { 0, 0, 0, 45.0f, { -443, 115, 0 } }, { 0, 0, 0, 45.0f, { -443, 115, 0 } },
+ { 0, 0, 0, 45.0f, { -443, 115, 0 } }, { 0, 0, 0, 45.0f, { -443, 115, 0 } },
+ { 0, 0, 0, 45.80006f, { -420, 133, 0 } }, { 0, 0, 0, 45.80006f, { -344, 150, 0 } },
+ { 0, 0, 0, 45.80006f, { -143, 194, 0 } }, { 0, 0, 0, 45.80006f, { 80, 243, 0 } },
+ { 0, 0, 0, 45.80006f, { 412, 315, 0 } }, { 0, 0, 0, 45.80006f, { 482, 332, 0 } },
+ { 0, 0, 0, 45.80006f, { 482, 332, 0 } }, { 0, 0, 0, 45.80006f, { 482, 332, 0 } },
+ { 0, 0, 0, 45.80006f, { 482, 332, 0 } }, { -1, 0, 0, 45.80006f, { 482, 332, 0 } },
+ { -1, 0, 0, 45.80006f, { 482, 332, 0 } },
+};
+static CutsceneCameraPoint D_80B5F370[] = {
+ { 0, 0, 25, 60.600117f, { 66, 404, 425 } }, { 0, 0, 25, 60.400116f, { 66, 404, 425 } },
+ { 0, 0, 25, 55.600098f, { 66, 404, 426 } }, { 0, 0, 25, 55.200096f, { 63, 373, 413 } },
+ { 0, 0, 25, 50.400078f, { 26, 353, 408 } }, { 0, 0, 25, 50.400078f, { 17, 325, 397 } },
+ { 0, 0, 25, 45.40006f, { 17, 326, 397 } }, { 0, 0, 25, 45.200058f, { -136, 177, 259 } },
+ { 0, 0, 25, 40.40004f, { -258, 111, 169 } }, { 0, 0, 25, 40.20004f, { -377, 108, 65 } },
+ { 0, 0, 25, 35.20002f, { -377, 108, 65 } }, { 0, 0, 25, 35.20002f, { -377, 108, 65 } },
+ { -1, 0, 30, 30.2f, { -376, 108, 65 } }, { -1, 0, 30, 30.2f, { -376, 108, 65 } },
+};
+static CutsceneCameraPoint D_80B5F450[] = {
+ { 0, 0, 0, 45.80006f, { 29, 383, 445 } }, { 0, 0, 0, 45.80006f, { 29, 383, 445 } },
+ { 0, 0, 0, 45.80006f, { 29, 383, 445 } }, { 0, 0, 0, 45.80006f, { 29, 383, 445 } },
+ { 0, 0, 0, 45.80006f, { 29, 383, 445 } }, { 0, 0, 0, 45.80006f, { 49, 347, 424 } },
+ { 0, 0, 0, 45.80006f, { 49, 347, 424 } }, { 0, 0, 0, 30.2f, { -103, 192, 286 } },
+ { 0, 0, 0, 30.2f, { -224, 113, 198 } }, { 0, 0, 0, 30.2f, { -345, 109, 96 } },
+ { 0, 0, 0, 30.2f, { -345, 109, 96 } }, { 0, 0, 0, 30.2f, { -345, 109, 96 } },
+ { -1, 0, 0, 30.2f, { -345, 109, 96 } }, { -1, 0, 0, 30.2f, { -345, 109, 96 } },
+};
+static CutsceneCameraPoint D_80B5F530[] = {
+ { 0, 0, 10, 30.0f, { -482, 119, 0 } }, { 0, 0, 10, 30.0f, { -482, 119, 0 } },
+ { 0, 0, 10, 30.0f, { -482, 119, 0 } }, { 0, 0, 10, 30.800003f, { -482, 119, 0 } },
+ { 0, 0, 10, 30.800003f, { -482, 119, 0 } }, { 0, 0, 10, 30.800003f, { -462, 126, 0 } },
+ { 0, 0, 30, 30.800003f, { -395, 150, 0 } }, { 0, 0, 30, 30.800003f, { -395, 150, 0 } },
+ { -1, 0, 30, 30.800003f, { -395, 150, 0 } }, { -1, 0, 30, 30.800003f, { -395, 150, 0 } },
+};
+static CutsceneCameraPoint D_80B5F5D0[] = {
+ { 0, 0, 0, 30.0f, { -440, 115, 0 } }, { 0, 0, 0, 30.0f, { -440, 115, 0 } },
+ { 0, 0, 0, 30.0f, { -440, 115, 0 } }, { 0, 0, 0, 30.800003f, { -440, 115, 0 } },
+ { 0, 0, 0, 30.800003f, { -440, 115, 0 } }, { 0, 0, 0, 30.800003f, { -423, 142, 0 } },
+ { 0, 0, 0, 30.800003f, { -358, 171, 0 } }, { 0, 0, 0, 30.800003f, { -358, 171, 0 } },
+ { -1, 0, 0, 30.800003f, { -358, 171, 0 } }, { -1, 0, 0, 30.800003f, { -358, 171, 0 } },
+};
+static CutsceneCameraPoint D_80B5F670[] = {
+ { 0, 0, 30, 25.0f, { -551, 119, 7 } }, { 0, 0, 30, 25.0f, { -551, 119, 7 } },
+ { 0, 0, 15, 25.0f, { -551, 119, 7 } }, { 0, 0, 15, 60.0f, { -485, 120, -7 } },
+ { 0, 0, 30, 60.0f, { -485, 120, -7 } }, { 0, 0, 30, 60.0f, { -485, 120, -7 } },
+ { 0, 0, 30, 60.0f, { -485, 118, -5 } }, { -1, 0, 30, 60.0f, { -485, 119, -6 } },
+ { -1, 0, 30, 60.0f, { -485, 119, -6 } },
+};
+static CutsceneCameraPoint D_80B5F700[] = {
+ { 0, 0, 0, 45.200058f, { -587, 115, 14 } }, { 0, 0, 0, 25.400097f, { -587, 115, 14 } },
+ { 0, 0, 0, 25.400097f, { -587, 115, 14 } }, { 0, 0, 0, 60.20023f, { -521, 117, -1 } },
+ { 0, 0, 0, 60.20023f, { -521, 117, -1 } }, { 0, 0, 0, 60.20023f, { -521, 117, -1 } },
+ { 0, 0, 0, 60.20023f, { -521, 117, -1 } }, { -1, 0, 0, 60.20023f, { -521, 116, 0 } },
+ { -1, 0, 0, 60.19925f, { -521, 116, 0 } },
+};
+static CutsceneCameraPoint D_80B5F790[] = {
+ { 0, 0, 30, 60.000114f, { 75, 52, 50 } }, { 0, 0, 30, 60.000114f, { 75, 52, 48 } },
+ { 0, 0, 60, 60.000114f, { 74, 52, 45 } }, { 0, 0, 60, 60.000114f, { 49, 51, -43 } },
+ { 0, 0, 30, 60.000114f, { 49, 51, -43 } }, { 0, 0, 30, 60.000114f, { 49, 51, -43 } },
+ { -1, 0, 30, 60.000114f, { 49, 51, -43 } }, { -1, 0, 30, 60.000114f, { 49, 51, -43 } },
+};
+static CutsceneCameraPoint D_80B5F810[] = {
+ { 0, 0, 0, 60.000114f, { 90, 52, 53 } }, { 0, 0, 0, 60.000114f, { 90, 52, 50 } },
+ { 0, 0, 0, 60.000114f, { 90, 52, 45 } }, { 0, 0, 0, 60.000114f, { 65, 51, -44 } },
+ { 0, 0, 0, 60.000114f, { 65, 51, -44 } }, { 0, 0, 0, 60.000114f, { 65, 51, -44 } },
+ { -1, 0, 0, 60.000114f, { 65, 51, -44 } }, { -1, 0, 0, 60.000114f, { 65, 51, -44 } },
+};
+static CutsceneCameraPoint D_80B5F890[] = {
+ { 0, 0, 31, 60.000114f, { -449, 121, -19 } }, { 0, 0, 30, 60.000114f, { -449, 121, -19 } },
+ { 0, 0, 30, 60.000114f, { -449, 121, -19 } }, { 0, 0, 30, 60.000114f, { -456, 110, -17 } },
+ { 0, 0, 30, 60.000114f, { -456, 110, -17 } }, { 0, 0, 30, 60.000114f, { -456, 110, -17 } },
+ { -1, 0, 30, 60.000114f, { -456, 110, -17 } }, { -1, 0, 30, 60.000114f, { -456, 110, -17 } },
+};
+static CutsceneCameraPoint D_80B5F910[] = {
+ { 0, 0, 0, 60.000114f, { -441, 107, -22 } }, { 0, 0, 0, 60.000114f, { -441, 107, -22 } },
+ { 0, 0, 0, 60.000114f, { -441, 107, -22 } }, { 0, 0, 0, 60.000114f, { -441, 107, -22 } },
+ { 0, 0, 0, 60.000114f, { -441, 107, -22 } }, { 0, 0, 0, 60.000114f, { -441, 107, -22 } },
+ { -1, 0, 0, 60.000114f, { -441, 107, -22 } }, { -1, 0, 0, 60.000114f, { -441, 107, -22 } },
+};
+static CutsceneCameraPoint D_80B5F990[] = {
+ { 0, 0, 30, 20.799965f, { -331, 110, -91 } }, { 0, 0, 30, 20.799965f, { -331, 110, -91 } },
+ { 0, 0, 30, 20.799965f, { -331, 110, -91 } }, { 0, 0, 30, 20.799965f, { -511, 121, 7 } },
+ { 0, 0, 30, 20.799965f, { -511, 121, 7 } }, { 0, 0, 30, 20.799965f, { -511, 121, 7 } },
+ { -1, 0, 30, 20.799965f, { -511, 121, 7 } }, { -1, 0, 30, 20.799965f, { -511, 121, 7 } },
+};
+static CutsceneCameraPoint D_80B5FA10[] = {
+ { 0, 0, 0, 20.799965f, { -369, 110, -70 } }, { 0, 0, 0, 20.799965f, { -369, 110, -70 } },
+ { 0, 0, 0, 20.799965f, { -369, 110, -70 } }, { 0, 0, 0, 20.799965f, { -549, 124, 29 } },
+ { 0, 0, 0, 20.799965f, { -549, 124, 29 } }, { 0, 0, 0, 20.799965f, { -549, 124, 29 } },
+ { -1, 0, 0, 20.799965f, { -549, 124, 29 } }, { -1, 0, 0, 20.799965f, { -549, 124, 29 } },
+};
+
+static CutsceneCameraMove sCsCameraMove[] = {
+ { D_80B5EC70, D_80B5ECF0, 0 }, { D_80B5ED70, D_80B5EE10, 0 }, { D_80B5EEB0, D_80B5EF90, 0 },
+ { D_80B5F070, D_80B5F100, 0 }, { D_80B5F190, D_80B5F280, 0 }, { D_80B5F370, D_80B5F450, 0 },
+ { D_80B5F530, D_80B5F5D0, 0 }, { D_80B5F670, D_80B5F700, 0 }, { D_80B5F790, D_80B5F810, 0 },
+ { D_80B5F890, D_80B5F910, 0 }, { D_80B5F990, D_80B5FA10, 0 },
+};
diff --git a/src/overlays/actors/ovl_End_Title/z_end_title.c b/src/overlays/actors/ovl_End_Title/z_end_title.c
index e77f9aac9..38b84fc76 100644
--- a/src/overlays/actors/ovl_End_Title/z_end_title.c
+++ b/src/overlays/actors/ovl_End_Title/z_end_title.c
@@ -62,7 +62,7 @@ void EndTitle_Draw(Actor* thisx, GlobalContext* globalCtx) {
Matrix_Mult(mf, MTXMODE_NEW);
Matrix_Translate(0.0f, 150.0f, 170.0f, MTXMODE_APPLY);
Matrix_Scale(0.13f, 0.13f, 0.13f, MTXMODE_APPLY);
- Matrix_RotateX(0.287621408700943f, MTXMODE_APPLY);
+ Matrix_RotateX(0xBB8 * M_PI / 0x8000, MTXMODE_APPLY);
Matrix_RotateY(0.0f, MTXMODE_APPLY);
Matrix_RotateZ(0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_end_title.c", 412), G_MTX_LOAD);
@@ -73,13 +73,13 @@ void EndTitle_Draw(Actor* thisx, GlobalContext* globalCtx) {
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_end_title.c", 419);
// Draw title cards on the screen
- if ((frameCount >= 891) && (this->endAlpha < 200)) {
+ if ((frameCount > 890) && (this->endAlpha < 200)) {
this->endAlpha += 7;
}
- if ((frameCount >= 811) && (this->tlozAlpha < 200)) {
+ if ((frameCount > 810) && (this->tlozAlpha < 200)) {
this->tlozAlpha += 15;
}
- if ((frameCount >= 851) && (this->ootAlpha < 200)) {
+ if ((frameCount > 850) && (this->ootAlpha < 200)) {
this->ootAlpha += 15;
}