From e75c51e841ca97ad9f2f258c8b163acdfa4a3cf5 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 24 Feb 2023 10:08:06 -0500 Subject: [PATCH] WeekEventFlags: Entrance Cutscenes Watched (#1166) * entrance regs * cleanup comments * add comment * comments * missed a space * fix placement of comment --- include/z64save.h | 73 +++++++++++-------- .../actors/ovl_Dm_Ravine/z_dm_ravine.c | 2 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 5 +- .../z_en_horse_link_child.c | 3 +- src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c | 2 +- tools/weekeventregconvert.py | 62 ++++++++-------- 6 files changed, 80 insertions(+), 67 deletions(-) diff --git a/include/z64save.h b/include/z64save.h index acd2fe6f80..1b5531540b 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -503,36 +503,43 @@ typedef enum SunsSongState { #define PACK_WEEKEVENTREG_FLAG(index, mask) (((index) << 8) | (mask)) #define WEEKEVENTREG_00_01 PACK_WEEKEVENTREG_FLAG(0, 0x01) -#define WEEKEVENTREG_00_02 PACK_WEEKEVENTREG_FLAG(0, 0x02) -#define WEEKEVENTREG_00_04 PACK_WEEKEVENTREG_FLAG(0, 0x04) -#define WEEKEVENTREG_00_08 PACK_WEEKEVENTREG_FLAG(0, 0x08) -#define WEEKEVENTREG_00_10 PACK_WEEKEVENTREG_FLAG(0, 0x10) -#define WEEKEVENTREG_00_20 PACK_WEEKEVENTREG_FLAG(0, 0x20) -#define WEEKEVENTREG_00_40 PACK_WEEKEVENTREG_FLAG(0, 0x40) -#define WEEKEVENTREG_00_80 PACK_WEEKEVENTREG_FLAG(0, 0x80) -#define WEEKEVENTREG_01_01 PACK_WEEKEVENTREG_FLAG(1, 0x01) -#define WEEKEVENTREG_01_02 PACK_WEEKEVENTREG_FLAG(1, 0x02) -#define WEEKEVENTREG_01_04 PACK_WEEKEVENTREG_FLAG(1, 0x04) -#define WEEKEVENTREG_01_08 PACK_WEEKEVENTREG_FLAG(1, 0x08) -#define WEEKEVENTREG_01_10 PACK_WEEKEVENTREG_FLAG(1, 0x10) -#define WEEKEVENTREG_01_20 PACK_WEEKEVENTREG_FLAG(1, 0x20) -#define WEEKEVENTREG_01_40 PACK_WEEKEVENTREG_FLAG(1, 0x40) -#define WEEKEVENTREG_01_80 PACK_WEEKEVENTREG_FLAG(1, 0x80) -#define WEEKEVENTREG_02_01 PACK_WEEKEVENTREG_FLAG(2, 0x01) -#define WEEKEVENTREG_02_02 PACK_WEEKEVENTREG_FLAG(2, 0x02) -#define WEEKEVENTREG_02_04 PACK_WEEKEVENTREG_FLAG(2, 0x04) -#define WEEKEVENTREG_02_08 PACK_WEEKEVENTREG_FLAG(2, 0x08) -#define WEEKEVENTREG_02_10 PACK_WEEKEVENTREG_FLAG(2, 0x10) -#define WEEKEVENTREG_02_20 PACK_WEEKEVENTREG_FLAG(2, 0x20) -#define WEEKEVENTREG_02_40 PACK_WEEKEVENTREG_FLAG(2, 0x40) -#define WEEKEVENTREG_02_80 PACK_WEEKEVENTREG_FLAG(2, 0x80) -#define WEEKEVENTREG_03_01 PACK_WEEKEVENTREG_FLAG(3, 0x01) -#define WEEKEVENTREG_03_02 PACK_WEEKEVENTREG_FLAG(3, 0x02) -#define WEEKEVENTREG_03_04 PACK_WEEKEVENTREG_FLAG(3, 0x04) -#define WEEKEVENTREG_03_08 PACK_WEEKEVENTREG_FLAG(3, 0x08) -#define WEEKEVENTREG_03_10 PACK_WEEKEVENTREG_FLAG(3, 0x10) -#define WEEKEVENTREG_03_20 PACK_WEEKEVENTREG_FLAG(3, 0x20) -#define WEEKEVENTREG_03_40 PACK_WEEKEVENTREG_FLAG(3, 0x40) + +/* Entrance cutscenes watched */ + +#define WEEKEVENTREG_ENTERED_TERMINA_FIELD PACK_WEEKEVENTREG_FLAG(0, 0x02) +#define WEEKEVENTREG_ENTERED_IKANA_GRAVEYARD PACK_WEEKEVENTREG_FLAG(0, 0x04) +#define WEEKEVENTREG_ENTERED_ROMANI_RANCH PACK_WEEKEVENTREG_FLAG(0, 0x08) +#define WEEKEVENTREG_ENTERED_GORMAN_TRACK PACK_WEEKEVENTREG_FLAG(0, 0x10) +#define WEEKEVENTREG_ENTERED_MOUNTAIN_VILLAGE_WINTER PACK_WEEKEVENTREG_FLAG(0, 0x20) +#define WEEKEVENTREG_ENTERED_GORON_SHRINE PACK_WEEKEVENTREG_FLAG(0, 0x40) +#define WEEKEVENTREG_ENTERED_SNOWHEAD PACK_WEEKEVENTREG_FLAG(0, 0x80) +#define WEEKEVENTREG_ENTERED_SOUTHERN_SWAMP_POISONED PACK_WEEKEVENTREG_FLAG(1, 0x01) +#define WEEKEVENTREG_ENTERED_WOODFALL PACK_WEEKEVENTREG_FLAG(1, 0x02) +#define WEEKEVENTREG_ENTERED_DEKU_PALACE PACK_WEEKEVENTREG_FLAG(1, 0x04) +#define WEEKEVENTREG_ENTERED_GREAT_BAY_COAST PACK_WEEKEVENTREG_FLAG(1, 0x08) +#define WEEKEVENTREG_ENTERED_PIRATES_FORTRESS PACK_WEEKEVENTREG_FLAG(1, 0x10) +#define WEEKEVENTREG_ENTERED_ZORA_HALL PACK_WEEKEVENTREG_FLAG(1, 0x20) +#define WEEKEVENTREG_ENTERED_WATERFALL_RAPIDS PACK_WEEKEVENTREG_FLAG(1, 0x40) +#define WEEKEVENTREG_ENTERED_IKANA_CANYON PACK_WEEKEVENTREG_FLAG(1, 0x80) +// Attached to the scene but unused. Entrance cutscene is instead triggered by `ACTOR_OBJ_DEMO` +#define WEEKEVENTREG_ENTERED_IKANA_CASTLE PACK_WEEKEVENTREG_FLAG(2, 0x01) +#define WEEKEVENTREG_ENTERED_STONE_TOWER PACK_WEEKEVENTREG_FLAG(2, 0x02) +#define WEEKEVENTREG_ENTERED_STONE_TOWER_INVERTED PACK_WEEKEVENTREG_FLAG(2, 0x04) +#define WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN PACK_WEEKEVENTREG_FLAG(2, 0x08) +#define WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN PACK_WEEKEVENTREG_FLAG(2, 0x10) +#define WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN PACK_WEEKEVENTREG_FLAG(2, 0x20) +#define WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE PACK_WEEKEVENTREG_FLAG(2, 0x40) +#define WEEKEVENTREG_ENTERED_SNOWHEAD_TEMPLE PACK_WEEKEVENTREG_FLAG(2, 0x80) +// Attached to the scene but unused. Entrance cutscene is instead triggered by `ACTOR_OBJ_DEMO` +#define WEEKEVENTREG_ENTERED_PIRATES_FORTRESS_EXTERIOR PACK_WEEKEVENTREG_FLAG(3, 0x01) +#define WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE PACK_WEEKEVENTREG_FLAG(3, 0x02) +#define WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE_INVERTED PACK_WEEKEVENTREG_FLAG(3, 0x04) +// Unused as no cutscene is attached to this script +#define WEEKEVENTREG_ENTERED_THE_MOON PACK_WEEKEVENTREG_FLAG(3, 0x08) +#define WEEKEVENTREG_ENTERED_MOON_DEKU_TRIAL PACK_WEEKEVENTREG_FLAG(3, 0x10) +#define WEEKEVENTREG_ENTERED_MOON_GORON_TRIAL PACK_WEEKEVENTREG_FLAG(3, 0x20) +#define WEEKEVENTREG_ENTERED_MOON_ZORA_TRIAL PACK_WEEKEVENTREG_FLAG(3, 0x40) + #define WEEKEVENTREG_03_80 PACK_WEEKEVENTREG_FLAG(3, 0x80) #define WEEKEVENTREG_04_01 PACK_WEEKEVENTREG_FLAG(4, 0x01) #define WEEKEVENTREG_04_02 PACK_WEEKEVENTREG_FLAG(4, 0x02) @@ -565,7 +572,8 @@ typedef enum SunsSongState { #define WEEKEVENTREG_07_10 PACK_WEEKEVENTREG_FLAG(7, 0x10) #define WEEKEVENTREG_07_20 PACK_WEEKEVENTREG_FLAG(7, 0x20) #define WEEKEVENTREG_07_40 PACK_WEEKEVENTREG_FLAG(7, 0x40) -#define WEEKEVENTREG_07_80 PACK_WEEKEVENTREG_FLAG(7, 0x80) +// Entrance cutscene watched to the prison where the deku princess is kept. Also set in door_warp1.c +#define WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON PACK_WEEKEVENTREG_FLAG(7, 0x80) #define WEEKEVENTREG_08_01 PACK_WEEKEVENTREG_FLAG(8, 0x01) #define WEEKEVENTREG_08_02 PACK_WEEKEVENTREG_FLAG(8, 0x02) #define WEEKEVENTREG_08_04 PACK_WEEKEVENTREG_FLAG(8, 0x04) @@ -785,6 +793,9 @@ typedef enum SunsSongState { #define WEEKEVENTREG_31_10 PACK_WEEKEVENTREG_FLAG(31, 0x10) #define WEEKEVENTREG_31_20 PACK_WEEKEVENTREG_FLAG(31, 0x20) +//! @note: entrance cutscenes defined in `CutsceneEntry` can not use +//! any of the below weekEventFlags due to bitpacking + // Cremia asked the player to accompany her to town #define WEEKEVENTREG_31_40 PACK_WEEKEVENTREG_FLAG(31, 0x40) // Player is playing the Milk Run diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c index 25fee11db7..cd6890505b 100644 --- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c +++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c @@ -32,7 +32,7 @@ void DmRavine_Init(Actor* thisx, PlayState* play) { s32 pad; DmRavine* this = THIS; - if (CHECK_WEEKEVENTREG_ALT(WEEKEVENTREG_00_10) | cREG(0)) { + if (CHECK_WEEKEVENTREG_ALT(WEEKEVENTREG_ENTERED_GORMAN_TRACK) | cREG(0)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 7ec2245d7d..df067d0a9c 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -652,7 +652,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { if (this->unk_202 != 0) { if (phi_v0_2 > 0) { - SET_WEEKEVENTREG(WEEKEVENTREG_07_80); + SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON); } switch (phi_v0_2) { @@ -711,7 +711,8 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { switch (phi_v0_2) { case 0: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { - SET_WEEKEVENTREG(WEEKEVENTREG_07_80); + // Skips the entrance cutscene as this flag is attached to `ENTRANCE(WOODFALL_TEMPLE, 1)` + SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON); play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1); play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_WHITE; diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index a10504720b..1e26b47e62 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -345,7 +345,8 @@ void func_808DF194(EnHorseLinkChild* this, PlayState* play) { sp4C = SkelAnime_Update(&this->skin.skelAnime); if ((sp4C != 0) || (this->unk_148 == 1) || (this->unk_148 == 0)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_01_20)) { + // The carry-over of this flag from OoT was not done correctly + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL)) { f32 sp44 = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos); s32 pad; diff --git a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c index 060e793ca8..af796da2c8 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c @@ -1,7 +1,7 @@ /* * File: z_obj_demo.c * Overlay: ovl_Obj_Demo - * Description: + * Description: Cutscene triggers when player is in range */ #include "z_obj_demo.h" diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index e2092e5959..fbefc1b3db 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -5,36 +5,36 @@ import re weekEventReg = { ( 0 << 8) | 0x01: "WEEKEVENTREG_00_01", - ( 0 << 8) | 0x02: "WEEKEVENTREG_00_02", - ( 0 << 8) | 0x04: "WEEKEVENTREG_00_04", - ( 0 << 8) | 0x08: "WEEKEVENTREG_00_08", - ( 0 << 8) | 0x10: "WEEKEVENTREG_00_10", - ( 0 << 8) | 0x20: "WEEKEVENTREG_00_20", - ( 0 << 8) | 0x40: "WEEKEVENTREG_00_40", - ( 0 << 8) | 0x80: "WEEKEVENTREG_00_80", - ( 1 << 8) | 0x01: "WEEKEVENTREG_01_01", - ( 1 << 8) | 0x02: "WEEKEVENTREG_01_02", - ( 1 << 8) | 0x04: "WEEKEVENTREG_01_04", - ( 1 << 8) | 0x08: "WEEKEVENTREG_01_08", - ( 1 << 8) | 0x10: "WEEKEVENTREG_01_10", - ( 1 << 8) | 0x20: "WEEKEVENTREG_01_20", - ( 1 << 8) | 0x40: "WEEKEVENTREG_01_40", - ( 1 << 8) | 0x80: "WEEKEVENTREG_01_80", - ( 2 << 8) | 0x01: "WEEKEVENTREG_02_01", - ( 2 << 8) | 0x02: "WEEKEVENTREG_02_02", - ( 2 << 8) | 0x04: "WEEKEVENTREG_02_04", - ( 2 << 8) | 0x08: "WEEKEVENTREG_02_08", - ( 2 << 8) | 0x10: "WEEKEVENTREG_02_10", - ( 2 << 8) | 0x20: "WEEKEVENTREG_02_20", - ( 2 << 8) | 0x40: "WEEKEVENTREG_02_40", - ( 2 << 8) | 0x80: "WEEKEVENTREG_02_80", - ( 3 << 8) | 0x01: "WEEKEVENTREG_03_01", - ( 3 << 8) | 0x02: "WEEKEVENTREG_03_02", - ( 3 << 8) | 0x04: "WEEKEVENTREG_03_04", - ( 3 << 8) | 0x08: "WEEKEVENTREG_03_08", - ( 3 << 8) | 0x10: "WEEKEVENTREG_03_10", - ( 3 << 8) | 0x20: "WEEKEVENTREG_03_20", - ( 3 << 8) | 0x40: "WEEKEVENTREG_03_40", + ( 0 << 8) | 0x02: "WEEKEVENTREG_ENTERED_TERMINA_FIELD", + ( 0 << 8) | 0x04: "WEEKEVENTREG_ENTERED_IKANA_GRAVEYARD", + ( 0 << 8) | 0x08: "WEEKEVENTREG_ENTERED_ROMANI_RANCH", + ( 0 << 8) | 0x10: "WEEKEVENTREG_ENTERED_GORMAN_TRACK", + ( 0 << 8) | 0x20: "WEEKEVENTREG_ENTERED_MOUNTAIN_VILLAGE_WINTER", + ( 0 << 8) | 0x40: "WEEKEVENTREG_ENTERED_GORON_SHRINE", + ( 0 << 8) | 0x80: "WEEKEVENTREG_ENTERED_SNOWHEAD", + ( 1 << 8) | 0x01: "WEEKEVENTREG_ENTERED_SOUTHERN_SWAMP_POISONED", + ( 1 << 8) | 0x02: "WEEKEVENTREG_ENTERED_WOODFALL", + ( 1 << 8) | 0x04: "WEEKEVENTREG_ENTERED_DEKU_PALACE", + ( 1 << 8) | 0x08: "WEEKEVENTREG_ENTERED_GREAT_BAY_COAST", + ( 1 << 8) | 0x10: "WEEKEVENTREG_ENTERED_PIRATES_FORTRESS", + ( 1 << 8) | 0x20: "WEEKEVENTREG_ENTERED_ZORA_HALL", + ( 1 << 8) | 0x40: "WEEKEVENTREG_ENTERED_WATERFALL_RAPIDS", + ( 1 << 8) | 0x80: "WEEKEVENTREG_ENTERED_IKANA_CANYON", + ( 2 << 8) | 0x01: "WEEKEVENTREG_ENTERED_IKANA_CASTLE", + ( 2 << 8) | 0x02: "WEEKEVENTREG_ENTERED_STONE_TOWER", + ( 2 << 8) | 0x04: "WEEKEVENTREG_ENTERED_STONE_TOWER_INVERTED", + ( 2 << 8) | 0x08: "WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN", + ( 2 << 8) | 0x10: "WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN", + ( 2 << 8) | 0x20: "WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN", + ( 2 << 8) | 0x40: "WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE", + ( 2 << 8) | 0x80: "WEEKEVENTREG_ENTERED_SNOWHEAD_TEMPLE", + ( 3 << 8) | 0x01: "WEEKEVENTREG_ENTERED_PIRATES_FORTRESS_EXTERIOR", + ( 3 << 8) | 0x02: "WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE", + ( 3 << 8) | 0x04: "WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE_INVERTED", + ( 3 << 8) | 0x08: "WEEKEVENTREG_ENTERED_THE_MOON", + ( 3 << 8) | 0x10: "WEEKEVENTREG_ENTERED_MOON_DEKU_TRIAL", + ( 3 << 8) | 0x20: "WEEKEVENTREG_ENTERED_MOON_GORON_TRIAL", + ( 3 << 8) | 0x40: "WEEKEVENTREG_ENTERED_MOON_ZORA_TRIAL", ( 3 << 8) | 0x80: "WEEKEVENTREG_03_80", ( 4 << 8) | 0x01: "WEEKEVENTREG_04_01", ( 4 << 8) | 0x02: "WEEKEVENTREG_04_02", @@ -67,7 +67,7 @@ weekEventReg = { ( 7 << 8) | 0x10: "WEEKEVENTREG_07_10", ( 7 << 8) | 0x20: "WEEKEVENTREG_07_20", ( 7 << 8) | 0x40: "WEEKEVENTREG_07_40", - ( 7 << 8) | 0x80: "WEEKEVENTREG_07_80", + ( 7 << 8) | 0x80: "WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON", ( 8 << 8) | 0x01: "WEEKEVENTREG_08_01", ( 8 << 8) | 0x02: "WEEKEVENTREG_08_02", ( 8 << 8) | 0x04: "WEEKEVENTREG_08_04",