diff options
| author | petrie911 <69443847+petrie911@users.noreply.github.com> | 2021-02-12 16:16:40 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-12 17:16:40 -0500 |
| commit | da55eaa2d8c05d8eaf2ad8d320189526268e7d59 (patch) | |
| tree | 3df2ccb301edb84bc662fce7a424eeaa13edb29b /src | |
| parent | 7ee8c8011c96ba5ab7a124c41a315859a03d3714 (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.c | 49 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c | 306 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_En_Zl4/z_en_zl4.c | 1277 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_En_Zl4/z_en_zl4.h | 22 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_En_Zl4/z_en_zl4_cutscene_data.c | 186 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_End_Title/z_end_title.c | 8 |
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; } |
