1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-27 07:07:09 +00:00

Document Talon (En_Ta) (#1348)

* Rename flags related to Talon

* Document Talon (ovl_En_Ta)

* Formatting

* ovl_En_Ta review fixes

* Add horse eventinf flag usage comments

* Rename TALON_STATE_FLAG_3

* Review fixes

* More review fixes

* Fix super-cucco zero-gravity time comment

* Fix formatting

* Talon review comment fixes

* Review comment fixes

* Rename waking up action funcs
This commit is contained in:
Lauri Koskela 2022-10-15 13:28:05 +03:00 committed by GitHub
parent 9675051377
commit b806ac0191
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 642 additions and 500 deletions

View file

@ -293,11 +293,11 @@ typedef enum {
#define EVENTCHKINF_10 0x10
#define EVENTCHKINF_11 0x11
#define EVENTCHKINF_12 0x12
#define EVENTCHKINF_13 0x13
#define EVENTCHKINF_14 0x14
#define EVENTCHKINF_TALON_WOKEN_IN_CASTLE 0x13
#define EVENTCHKINF_TALON_RETURNED_FROM_CASTLE 0x14
#define EVENTCHKINF_15 0x15
#define EVENTCHKINF_16 0x16
#define EVENTCHKINF_18 0x18
#define EVENTCHKINF_EPONA_OBTAINED 0x18
#define EVENTCHKINF_1B 0x1B
#define EVENTCHKINF_1C 0x1C
#define EVENTCHKINF_1D 0x1D
@ -354,13 +354,13 @@ typedef enum {
#define EVENTCHKINF_67 0x67
#define EVENTCHKINF_68 0x68
#define EVENTCHKINF_69 0x69
#define EVENTCHKINF_6A 0x6A
#define EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO 0x6A
// 0x6B
#define EVENTCHKINF_6B_INDEX 6
#define EVENTCHKINF_6B_SHIFT 11
#define EVENTCHKINF_6B_MASK (1 << EVENTCHKINF_6B_SHIFT)
#define EVENTCHKINF_6B ((EVENTCHKINF_6B_INDEX << 4) | EVENTCHKINF_6B_SHIFT)
#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX 6
#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT 11
#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK (1 << EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT)
#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO ((EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX << 4) | EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT)
#define EVENTCHKINF_6E 0x6E
#define EVENTCHKINF_6F 0x6F
@ -473,7 +473,7 @@ typedef enum {
* SaveContext.itemGetInf
*/
#define ITEMGETINF_02 0x02
#define ITEMGETINF_TALON_BOTTLE 0x02
#define ITEMGETINF_03 0x03
#define ITEMGETINF_04 0x04
#define ITEMGETINF_05 0x05
@ -563,7 +563,7 @@ typedef enum {
#define INFTABLE_71 0x71
#define INFTABLE_76 0x76
#define INFTABLE_77 0x77
#define INFTABLE_7E 0x7E
#define INFTABLE_TALKED_TO_TALON_IN_RANCH_HOUSE 0x7E
#define INFTABLE_84 0x84
#define INFTABLE_85 0x85
#define INFTABLE_8B 0x8B
@ -709,8 +709,13 @@ typedef enum {
#define EVENTINF_HORSES_0F_MASK (1 << EVENTINF_HORSES_0F_SHIFT)
#define EVENTINF_HORSES_05 ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_05_SHIFT)
#define EVENTINF_HORSES_06 ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_06_SHIFT)
// Used in z_en_ta (Talon) to store Cucco game winning status
// and in z_en_ge1 (Gerudo) to store archery in-progress status
#define EVENTINF_HORSES_08 ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_08_SHIFT)
#define EVENTINF_CUCCO_GAME_WON EVENTINF_HORSES_08
// Used in z_en_ta (Talon) and z_en_ma3 (Malon) to store minigame finishing status
#define EVENTINF_HORSES_0A ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_0A_SHIFT)
#define EVENTINF_CUCCO_GAME_FINISHED EVENTINF_HORSES_0A
typedef enum {
/* 0 */ EVENTINF_HORSES_STATE_0,

View file

@ -4602,7 +4602,7 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
if (Flags_GetEventChkInf(EVENTCHKINF_09) && Flags_GetEventChkInf(EVENTCHKINF_25) &&
Flags_GetEventChkInf(EVENTCHKINF_37)) {
retTextId = 0x7047;
} else if (Flags_GetEventChkInf(EVENTCHKINF_14)) {
} else if (Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
retTextId = 0x701A;
} else if (Flags_GetEventChkInf(EVENTCHKINF_11)) {
if (Flags_GetInfTable(INFTABLE_C6)) {
@ -4911,9 +4911,10 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
retTextId = 0x2049;
} else if (Flags_GetEventChkInf(EVENTCHKINF_15)) {
retTextId = 0x2048;
} else if (Flags_GetEventChkInf(EVENTCHKINF_14)) {
} else if (Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
retTextId = 0x2047;
} else if (Flags_GetEventChkInf(EVENTCHKINF_12) && !Flags_GetEventChkInf(EVENTCHKINF_14)) {
} else if (Flags_GetEventChkInf(EVENTCHKINF_12) &&
!Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
retTextId = 0x2044;
} else if (Flags_GetEventChkInf(EVENTCHKINF_10)) {
if (Flags_GetEventChkInf(EVENTCHKINF_11)) {
@ -4927,7 +4928,7 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
break;
case 72:
if (!LINK_IS_ADULT) {
if (Flags_GetEventChkInf(EVENTCHKINF_14)) {
if (Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
retTextId = 0x2040;
} else if (Flags_GetInfTable(INFTABLE_94)) {
retTextId = 0x2040;
@ -4935,7 +4936,7 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
retTextId = 0x203F;
}
} else {
if (!Flags_GetEventChkInf(EVENTCHKINF_18)) {
if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)) {
if (!IS_DAY) {
retTextId = 0x204E;
} else if (Flags_GetInfTable(INFTABLE_9A)) {

View file

@ -61,10 +61,10 @@ EntranceCutscene sEntranceCutsceneTable[] = {
{ ENTR_SPOT18_0, 2, EVENTCHKINF_A6, gGoronCityIntroCs },
{ ENTR_TOKINOMA_0, 2, EVENTCHKINF_A7, gTempleOfTimeIntroCs },
{ ENTR_YDAN_0, 2, EVENTCHKINF_A8, gDekuTreeIntroCs },
{ ENTR_SPOT00_11, 0, EVENTCHKINF_18, gHyruleFieldSouthEponaJumpCs },
{ ENTR_SPOT00_13, 0, EVENTCHKINF_18, gHyruleFieldEastEponaJumpCs },
{ ENTR_SPOT00_12, 0, EVENTCHKINF_18, gHyruleFieldWestEponaJumpCs },
{ ENTR_SPOT00_15, 0, EVENTCHKINF_18, gHyruleFieldGateEponaJumpCs },
{ ENTR_SPOT00_11, 0, EVENTCHKINF_EPONA_OBTAINED, gHyruleFieldSouthEponaJumpCs },
{ ENTR_SPOT00_13, 0, EVENTCHKINF_EPONA_OBTAINED, gHyruleFieldEastEponaJumpCs },
{ ENTR_SPOT00_12, 0, EVENTCHKINF_EPONA_OBTAINED, gHyruleFieldWestEponaJumpCs },
{ ENTR_SPOT00_15, 0, EVENTCHKINF_EPONA_OBTAINED, gHyruleFieldGateEponaJumpCs },
{ ENTR_SPOT00_16, 1, EVENTCHKINF_A9, gHyruleFieldGetOoTCs },
{ ENTR_SPOT06_0, 2, EVENTCHKINF_B1, gLakeHyliaIntroCs },
{ ENTR_SPOT09_0, 2, EVENTCHKINF_B2, gGerudoValleyIntroCs },
@ -2061,7 +2061,7 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) {
}
if ((gSaveContext.entranceIndex == entranceCutscene->entrance) &&
(!Flags_GetEventChkInf(entranceCutscene->flag) || (entranceCutscene->flag == EVENTCHKINF_18)) &&
(!Flags_GetEventChkInf(entranceCutscene->flag) || (entranceCutscene->flag == EVENTCHKINF_EPONA_OBTAINED)) &&
(gSaveContext.cutsceneIndex < 0xFFF0) && ((u8)gSaveContext.linkAge == requiredAge) &&
(gSaveContext.respawnFlag <= 0)) {
Flags_SetEventChkInf(entranceCutscene->flag);

View file

@ -48,7 +48,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
{ SCENE_SPOT20, 928, 0, -2280, 0, 2 },
};
if ((AREG(6) != 0) && (Flags_GetEventChkInf(EVENTCHKINF_18) || (DREG(1) != 0))) {
if ((AREG(6) != 0) && (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0))) {
player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x,
player->actor.world.pos.y, player->actor.world.pos.z, player->actor.shape.rot.x,
player->actor.shape.rot.y, player->actor.shape.rot.z, 9);
@ -67,15 +67,15 @@ void func_8006D0EC(PlayState* play, Player* player) {
gSaveContext.minigameState = 0;
horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1);
horseActor->room = -1;
} else if ((gSaveContext.entranceIndex == ENTR_SPOT20_7) && GET_EVENTCHKINF(EVENTCHKINF_18)) {
} else if ((gSaveContext.entranceIndex == ENTR_SPOT20_7) && GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
Actor* horseActor =
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, 1);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 389);
} else if ((play->sceneId == gSaveContext.horseData.sceneId) &&
(Flags_GetEventChkInf(EVENTCHKINF_18) || DREG(1) != 0)) {
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0)) {
// "Set by existence of horse %d %d %d"
osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.sceneId,
Flags_GetEventChkInf(EVENTCHKINF_18), DREG(1));
Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), DREG(1));
if (func_8006CFC0(gSaveContext.horseData.sceneId)) {
Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.horseData.pos.x,
@ -92,10 +92,10 @@ void func_8006D0EC(PlayState* play, Player* player) {
osSyncPrintf(VT_RST);
func_8006D074(play);
}
} else if ((play->sceneId == SCENE_SPOT20) && !Flags_GetEventChkInf(EVENTCHKINF_18) && (DREG(1) == 0)) {
} else if ((play->sceneId == SCENE_SPOT20) && !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -500.0f, 0, 0, 0, 1);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 443);
} else if (Flags_GetEventChkInf(EVENTCHKINF_18) || (DREG(1) != 0)) {
} else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
for (i = 0; i < ARRAY_COUNT(horseSpawns); i++) {
HorseSpawn* horseSpawn = &horseSpawns[i];
if (horseSpawn->sceneId == play->sceneId) {
@ -110,7 +110,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
break;
}
}
} else if (!Flags_GetEventChkInf(EVENTCHKINF_18)) {
} else if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)) {
if ((DREG(1) == 0) && (play->sceneId == SCENE_SOUKO) && !IS_DAY) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -60.0f, 0, 0x7360, 0, 1);
}
@ -158,7 +158,7 @@ void func_8006D684(PlayState* play, Player* player) {
func_8002DE74(play, player);
gSaveContext.horseData.sceneId = play->sceneId;
} else if ((play->sceneId == SCENE_SPOT20) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
!Flags_GetEventChkInf(EVENTCHKINF_18) && (DREG(1) == 0)) {
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
player->rideActor =
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 894.0f, 0.0f, -2084.0f, 0, -0x7FFF, 0, 5);
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 582);
@ -252,7 +252,7 @@ void func_8006DC68(PlayState* play, Player* player) {
gSaveContext.entranceIndex == ENTR_SPOT00_13 || gSaveContext.entranceIndex == ENTR_SPOT00_15) &&
(gSaveContext.respawnFlag == 0)) ||
((play->sceneId == SCENE_SPOT20) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
!Flags_GetEventChkInf(EVENTCHKINF_18) && (DREG(1) == 0))) {
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) {
func_8006D684(play, player);
} else {
func_8006D0EC(play, player);

View file

@ -5,7 +5,7 @@ ElfMessage gOverworldNaviMsgs[] = {
ELF_MSG_FLAG(CHECK, 0x40, false, EVENTCHKINF_05),
ELF_MSG_FLAG(CHECK, 0x41, false, EVENTCHKINF_09),
ELF_MSG_FLAG(CHECK, 0x42, false, EVENTCHKINF_12),
ELF_MSG_FLAG(CHECK, 0x43, false, EVENTCHKINF_14),
ELF_MSG_FLAG(CHECK, 0x43, false, EVENTCHKINF_TALON_RETURNED_FROM_CASTLE),
ELF_MSG_FLAG(CHECK, 0x44, false, EVENTCHKINF_40),
ELF_MSG_SONG(CHECK, 0x45, false, ITEM_SONG_SARIA),
ELF_MSG_STRENGTH_UPG(CHECK, 0x46, true, 0),

View file

@ -45,7 +45,7 @@ void BgInGate_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
if ((play->sceneId != SCENE_SPOT20 || !LINK_IS_ADULT) ||
(GET_EVENTCHKINF(EVENTCHKINF_18) && (gSaveContext.cutsceneIndex != 0xFFF0))) {
(GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) && (gSaveContext.cutsceneIndex != 0xFFF0))) {
Actor_Kill(&this->dyna.actor);
return;
}

View file

@ -110,7 +110,7 @@ s32 func_808B3AAC(BgSpot15Rrbox* this, PlayState* play) {
}
if (rotY < 0x2000 && rotY > -0x6000) {
return GET_EVENTCHKINF(EVENTCHKINF_14);
return GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE);
}
return true;
}

View file

@ -41,7 +41,7 @@ void BgUmaJump_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
if (this->dyna.actor.params == 1) {
if (!Flags_GetEventChkInf(EVENTCHKINF_18) && (DREG(1) == 0)) {
if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
Actor_Kill(&this->dyna.actor);
return;
}

View file

@ -197,7 +197,7 @@ void EnDoor_SetupType(EnDoor* this, PlayState* play) {
}
} else if (doorType == DOOR_CHECKABLE) {
this->actor.textId = ENDOOR_GET_CHECKABLE_TEXT_ID(&this->actor) + 0x0200;
if (this->actor.textId == 0x0229 && !GET_EVENTCHKINF(EVENTCHKINF_14)) {
if (this->actor.textId == 0x0229 && !GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
// Talon's house door. If Talon has not been woken up at Hyrule Castle
// this door should be openable at any time of day.
// Note that there is no check for time of day, as the night layers for Lon Lon

View file

@ -316,7 +316,7 @@ void EnGirlA_SetupAction(EnGirlA* this, EnGirlAActionFunc func) {
s32 EnGirlA_TryChangeShopItem(EnGirlA* this) {
switch (this->actor.params) {
case SI_MILK_BOTTLE:
if (GET_ITEMGETINF(ITEMGETINF_02)) {
if (GET_ITEMGETINF(ITEMGETINF_TALON_BOTTLE)) {
this->actor.params = SI_RECOVERY_HEART;
return true;
}

View file

@ -682,8 +682,9 @@ s32 EnHorse_Spawn(EnHorse* this, PlayState* play) {
player = GET_PLAYER(play);
if (play->sceneId != SCENE_SPOT20 ||
//! Same flag checked twice
(Flags_GetEventChkInf(EVENTCHKINF_18) &&
(GET_EVENTINF_HORSES_STATE() != EVENTINF_HORSES_STATE_6 || Flags_GetEventChkInf(EVENTCHKINF_18))) ||
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) &&
(GET_EVENTINF_HORSES_STATE() != EVENTINF_HORSES_STATE_6 ||
Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED))) ||
// always load two spawns inside lon lon
((sHorseSpawns[i].pos.x == 856 && sHorseSpawns[i].pos.y == 0 && sHorseSpawns[i].pos.z == -918) ||
(sHorseSpawns[i].pos.x == -1003 && sHorseSpawns[i].pos.y == 0 && sHorseSpawns[i].pos.z == -755))) {
@ -794,7 +795,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->stateFlags = ENHORSE_FLAG_19 | ENHORSE_CANT_JUMP | ENHORSE_UNRIDEABLE;
} else if (this->actor.params == 6) {
this->stateFlags = ENHORSE_FLAG_19 | ENHORSE_CANT_JUMP;
if (Flags_GetEventChkInf(EVENTCHKINF_18) || DREG(1) != 0) {
if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0) {
this->stateFlags &= ~ENHORSE_CANT_JUMP;
this->stateFlags |= ENHORSE_FLAG_26;
} else if (GET_EVENTINF(EVENTINF_HORSES_06) && this->type == HORSE_HNI) {
@ -808,7 +809,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
}
if (play->sceneId == SCENE_SPOT20 && GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6 &&
!Flags_GetEventChkInf(EVENTCHKINF_18) && !DREG(1)) {
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && !DREG(1)) {
this->stateFlags |= ENHORSE_FLAG_25;
}
@ -834,7 +835,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
Actor_Kill(&this->actor);
return;
}
if (Flags_GetEventChkInf(EVENTCHKINF_18)) {
if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)) {
Actor_Kill(&this->actor);
return;
}
@ -842,12 +843,12 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
Actor_Kill(&this->actor);
return;
}
} else if (!Flags_GetEventChkInf(EVENTCHKINF_18) && !DREG(1) && !IS_DAY) {
} else if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && !DREG(1) && !IS_DAY) {
Actor_Kill(&this->actor);
return;
}
} else if (play->sceneId == SCENE_MALON_STABLE) {
if (IS_DAY || Flags_GetEventChkInf(EVENTCHKINF_18) || DREG(1) != 0 || !LINK_IS_ADULT) {
if (IS_DAY || Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0 || !LINK_IS_ADULT) {
Actor_Kill(&this->actor);
return;
}
@ -882,7 +883,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
} else if (this->actor.params == 8) {
EnHorse_InitHorsebackArchery(this);
Interface_InitHorsebackArchery(play);
} else if (play->sceneId == SCENE_SPOT20 && !Flags_GetEventChkInf(EVENTCHKINF_18) && !DREG(1)) {
} else if (play->sceneId == SCENE_SPOT20 && !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && !DREG(1)) {
EnHorse_InitFleePlayer(this);
} else {
if (play->sceneId == SCENE_SOUKO) {

View file

@ -444,7 +444,7 @@ void EnHorseGameCheck_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnHorseGameCheckBase* this = (EnHorseGameCheckBase*)thisx;
if ((play->sceneId == SCENE_SPOT20) && (Flags_GetEventChkInf(EVENTCHKINF_18) || DREG(1))) {
if ((play->sceneId == SCENE_SPOT20) && (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1))) {
this->actor.params = HORSEGAME_MALON_RACE;
}
if (sInitFuncs[this->actor.params] != NULL) {

View file

@ -165,7 +165,7 @@ void EnHorseLinkChild_Init(Actor* thisx, PlayState* play) {
if (IS_CUTSCENE_LAYER) {
func_80A69EC0(this);
} else if (play->sceneId == SCENE_SPOT20) {
if (!Flags_GetEventChkInf(EVENTCHKINF_14)) {
if (!Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
Actor_Kill(&this->actor);
return;
}

View file

@ -207,7 +207,7 @@ void EnHorseNormal_Init(Actor* thisx, PlayState* play) {
return;
}
if (!LINK_IS_ADULT) {
if (Flags_GetEventChkInf(EVENTCHKINF_14)) {
if (Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
if (this->actor.world.rot.z != 3) {
Actor_Kill(&this->actor);
return;
@ -216,7 +216,7 @@ void EnHorseNormal_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
return;
}
} else if (Flags_GetEventChkInf(EVENTCHKINF_18) || (DREG(1) != 0)) {
} else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
if (this->actor.world.rot.z != 7) {
Actor_Kill(&this->actor);
return;

View file

@ -429,7 +429,9 @@ u16 func_80A6F810(PlayState* play, Actor* thisx) {
switch (this->actor.params & 0x7F) {
case ENHY_TYPE_AOB:
if (play->sceneId == SCENE_KAKARIKO) {
return (this->unk_330 & EVENTCHKINF_6B_MASK) ? 0x508D : (GET_INFTABLE(INFTABLE_CB) ? 0x508C : 0x508B);
return (this->unk_330 & EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK)
? 0x508D
: (GET_INFTABLE(INFTABLE_CB) ? 0x508C : 0x508B);
} else if (play->sceneId == SCENE_MARKET_DAY) {
return GET_EVENTINF(EVENTINF_30) ? 0x709B : 0x709C;
} else if (gSaveContext.dogIsLost) {
@ -457,7 +459,7 @@ u16 func_80A6F810(PlayState* play, Actor* thisx) {
return 0x5085;
} else if (GET_EVENTCHKINF(EVENTCHKINF_80)) {
return GET_INFTABLE(INFTABLE_C3) ? 0x701A : 0x7047;
} else if (GET_EVENTCHKINF(EVENTCHKINF_14)) {
} else if (GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 0x701A;
} else if (GET_EVENTCHKINF(EVENTCHKINF_10)) {
return 0x701B;
@ -537,7 +539,9 @@ u16 func_80A6F810(PlayState* play, Actor* thisx) {
if (!LINK_IS_ADULT) {
return GET_EVENTCHKINF(EVENTCHKINF_80) ? 0x505F : (GET_INFTABLE(INFTABLE_163) ? 0x505E : 0x505D);
} else {
return (this->unk_330 & EVENTCHKINF_6B_MASK) ? 0x5062 : (GET_INFTABLE(INFTABLE_164) ? 0x5061 : 0x5060);
return (this->unk_330 & EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK)
? 0x5062
: (GET_INFTABLE(INFTABLE_164) ? 0x5061 : 0x5060);
}
case ENHY_TYPE_BJI_19:
return 0x7120;
@ -909,7 +913,7 @@ void EnHy_InitImpl(EnHy* this, PlayState* play) {
}
if (play->sceneId == SCENE_KAKARIKO) {
this->unk_330 = gSaveContext.eventChkInf[EVENTCHKINF_6B_INDEX];
this->unk_330 = gSaveContext.eventChkInf[EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX];
}
EnHy_InitSetProperties(this);

View file

@ -110,7 +110,7 @@ static Gfx* sAdultEraDLs[] = {
};
u16 func_80A78FB0(PlayState* play) {
if (GET_EVENTCHKINF(EVENTCHKINF_14)) {
if (GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
if (GET_INFTABLE(INFTABLE_97)) {
return 0x2046;
} else {
@ -131,7 +131,7 @@ u16 func_80A79010(PlayState* play) {
if (temp_v0 != 0) {
return temp_v0;
}
if (GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
if (IS_DAY) {
return 0x205F;
} else {
@ -364,34 +364,34 @@ s32 func_80A7975C(EnIn* this, PlayState* play) {
s32 func_80A79830(EnIn* this, PlayState* play) {
if (play->sceneId == SCENE_SPOT20 && LINK_IS_CHILD && IS_DAY && this->actor.shape.rot.z == 1 &&
!GET_EVENTCHKINF(EVENTCHKINF_14)) {
!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 1;
}
if (play->sceneId == SCENE_MALON_STABLE && LINK_IS_CHILD && IS_DAY && this->actor.shape.rot.z == 3 &&
GET_EVENTCHKINF(EVENTCHKINF_14)) {
GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 1;
}
if (play->sceneId == SCENE_MALON_STABLE && LINK_IS_CHILD && IS_NIGHT) {
if ((this->actor.shape.rot.z == 2) && !GET_EVENTCHKINF(EVENTCHKINF_14)) {
if ((this->actor.shape.rot.z == 2) && !GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 1;
}
if ((this->actor.shape.rot.z == 4) && GET_EVENTCHKINF(EVENTCHKINF_14)) {
if ((this->actor.shape.rot.z == 4) && GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 1;
}
}
if (play->sceneId == SCENE_SPOT20 && LINK_IS_ADULT && IS_DAY) {
if ((this->actor.shape.rot.z == 5) && !GET_EVENTCHKINF(EVENTCHKINF_18)) {
if ((this->actor.shape.rot.z == 5) && !GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
return 2;
}
if ((this->actor.shape.rot.z == 7) && GET_EVENTCHKINF(EVENTCHKINF_18)) {
if ((this->actor.shape.rot.z == 7) && GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
return 4;
}
}
if (play->sceneId == SCENE_SOUKO && LINK_IS_ADULT && IS_NIGHT) {
if (this->actor.shape.rot.z == 6 && !GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (this->actor.shape.rot.z == 6 && !GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
return 3;
}
if (this->actor.shape.rot.z == 8 && GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (this->actor.shape.rot.z == 8 && GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
return 3;
}
}
@ -530,7 +530,7 @@ void func_80A79FB0(EnIn* this, PlayState* play) {
case 3:
EnIn_ChangeAnim(this, ENIN_ANIM_7);
this->actionFunc = func_80A7A4BC;
if (!GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
this->actor.params = 5;
}
break;

View file

@ -107,7 +107,7 @@ u16 EnMa1_GetText(PlayState* play, Actor* thisx) {
return 0x2048;
}
}
if (GET_EVENTCHKINF(EVENTCHKINF_14)) {
if (GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 0x2047;
}
if (GET_EVENTCHKINF(EVENTCHKINF_12)) {
@ -188,10 +188,10 @@ s32 func_80AA08C4(EnMa1* this, PlayState* play) {
return 0;
}
if (((play->sceneId == SCENE_MARKET_NIGHT) || (play->sceneId == SCENE_MARKET_DAY)) &&
!GET_EVENTCHKINF(EVENTCHKINF_14) && !GET_INFTABLE(INFTABLE_8B)) {
!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE) && !GET_INFTABLE(INFTABLE_8B)) {
return 1;
}
if ((play->sceneId == SCENE_SPOT15) && !GET_EVENTCHKINF(EVENTCHKINF_14)) {
if ((play->sceneId == SCENE_SPOT15) && !GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
if (GET_INFTABLE(INFTABLE_8B)) {
return 1;
} else {
@ -199,13 +199,13 @@ s32 func_80AA08C4(EnMa1* this, PlayState* play) {
return 0;
}
}
if ((play->sceneId == SCENE_SOUKO) && IS_NIGHT && GET_EVENTCHKINF(EVENTCHKINF_14)) {
if ((play->sceneId == SCENE_SOUKO) && IS_NIGHT && GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 1;
}
if (play->sceneId != SCENE_SPOT20) {
return 0;
}
if ((this->actor.shape.rot.z == 3) && IS_DAY && GET_EVENTCHKINF(EVENTCHKINF_14)) {
if ((this->actor.shape.rot.z == 3) && IS_DAY && GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
return 1;
}
return 0;
@ -282,7 +282,7 @@ void EnMa1_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 6;
this->unk_1E8.unk_00 = 0;
if (!GET_EVENTCHKINF(EVENTCHKINF_14) || CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
if (!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE) || CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
this->actionFunc = func_80AA0D88;
EnMa1_ChangeAnim(this, ENMA1_ANIM_2);
} else {
@ -309,9 +309,9 @@ void func_80AA0D88(EnMa1* this, PlayState* play) {
}
}
if ((play->sceneId == SCENE_SPOT15) && GET_EVENTCHKINF(EVENTCHKINF_14)) {
if ((play->sceneId == SCENE_SPOT15) && GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
Actor_Kill(&this->actor);
} else if (!GET_EVENTCHKINF(EVENTCHKINF_14) || CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
} else if (!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE) || CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
if (this->unk_1E8.unk_00 == 2) {
this->actionFunc = func_80AA0EA0;
play->msgCtx.stateTimer = 4;

View file

@ -74,7 +74,7 @@ u16 func_80AA19A0(PlayState* play, Actor* thisx) {
if (faceReaction != 0) {
return faceReaction;
}
if (GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
return 0x2056;
}
if (IS_NIGHT) {
@ -141,15 +141,15 @@ u16 func_80AA1B58(EnMa2* this, PlayState* play) {
if (LINK_IS_CHILD) {
return 0;
}
if (!GET_EVENTCHKINF(EVENTCHKINF_18) && (play->sceneId == SCENE_MALON_STABLE) && IS_DAY &&
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) && (play->sceneId == SCENE_MALON_STABLE) && IS_DAY &&
(this->actor.shape.rot.z == 5)) {
return 1;
}
if (!GET_EVENTCHKINF(EVENTCHKINF_18) && (play->sceneId == SCENE_SPOT20) && IS_NIGHT &&
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) && (play->sceneId == SCENE_SPOT20) && IS_NIGHT &&
(this->actor.shape.rot.z == 6)) {
return 2;
}
if (!GET_EVENTCHKINF(EVENTCHKINF_18) || (play->sceneId != SCENE_SPOT20)) {
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) || (play->sceneId != SCENE_SPOT20)) {
return 0;
}
if ((this->actor.shape.rot.z == 7) && IS_DAY) {

View file

@ -201,7 +201,7 @@ s32 func_80AA2EC8(EnMa3* this, PlayState* play) {
if (LINK_IS_CHILD) {
return 2;
}
if (!GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
return 2;
}
if (GET_EVENTINF(EVENTINF_HORSES_0A)) {

View file

@ -188,22 +188,22 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
}
break;
case 1:
if (GET_EVENTCHKINF(EVENTCHKINF_14)) {
if (GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
Actor_Kill(&this->actor);
}
break;
case 3:
if (!GET_EVENTCHKINF(EVENTCHKINF_14)) {
if (!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
Actor_Kill(&this->actor);
}
break;
case 5:
if (GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
Actor_Kill(&this->actor);
}
break;
case 7:
if (!GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
Actor_Kill(&this->actor);
}
break;

View file

@ -342,7 +342,7 @@ void func_80ABA778(EnNiwLady* this, PlayState* play) {
this->unk_27A = 2;
if (!GET_ITEMGETINF(ITEMGETINF_2E)) {
this->unk_27A = 3;
if (GET_EVENTCHKINF(EVENTCHKINF_6A)) {
if (GET_EVENTCHKINF(EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO)) {
this->unk_27A = 9;
if (this->unk_277 != 0) {
this->unk_27A = 10;
@ -365,7 +365,7 @@ void func_80ABA878(EnNiwLady* this, PlayState* play) {
}
if (Actor_ProcessTalkRequest(&this->actor, play)) {
playerExchangeItemId = func_8002F368(play);
if ((playerExchangeItemId == EXCH_ITEM_POCKET_CUCCO) && GET_EVENTCHKINF(EVENTCHKINF_6A)) {
if ((playerExchangeItemId == EXCH_ITEM_POCKET_CUCCO) && GET_EVENTCHKINF(EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO)) {
func_80078884(NA_SE_SY_TRE_BOX_APPEAR);
player->actor.textId = sTradeItemTextIds[5];
this->unk_26E = this->unk_27A + 21;

File diff suppressed because it is too large Load diff

View file

@ -9,31 +9,60 @@
struct EnTa;
typedef void (*EnTaActionFunc)(struct EnTa*, PlayState*);
typedef void (*EnTaUnkFunc)(struct EnTa*);
typedef void (*EnTaBlinkFunc)(struct EnTa*);
typedef void (*EnTaAnimFunc)(struct EnTa*);
typedef enum {
/* 0xFFFF */ ENTA_CHILD_ERA = -1,
/* 0x0001 */ ENTA_IN_KAKARIKO = 1,
/* 0x0002 */ ENTA_RETURNED_FROM_KAKARIKO
} EnTaType;
typedef enum {
/* 0x00 */ ENTA_LIMB_NONE,
/* 0x01 */ ENTA_LIMB_ROOT,
/* 0x02 */ ENTA_LIMB_LEFT_THIGH,
/* 0x03 */ ENTA_LIMB_LEFT_LEG,
/* 0x04 */ ENTA_LIMB_LEFT_FOOT,
/* 0x05 */ ENTA_LIMB_RIGHT_THIGH,
/* 0x06 */ ENTA_LIMB_RIGHT_LEG,
/* 0x07 */ ENTA_LIMB_RIGHT_FOOT,
/* 0x08 */ ENTA_LIMB_CHEST,
/* 0x09 */ ENTA_LIMB_LEFT_SHOULDER,
/* 0x0A */ ENTA_LIMB_LEFT_ARM,
/* 0x0B */ ENTA_LIMB_LEFT_HAND,
/* 0x0C */ ENTA_LIMB_RIGHT_SHOULDER,
/* 0x0D */ ENTA_LIMB_RIGHT_ARM,
/* 0x0E */ ENTA_LIMB_RIGHT_HAND,
/* 0x0F */ ENTA_LIMB_HEAD,
/* 0x10 */ ENTA_LIMB_TORSO,
/* 0x11 */ ENTA_LIMB_MAX
} EnTaLimb;
typedef struct EnTa {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ Vec3s jointTable[17];
/* 0x01F6 */ Vec3s morphTable[17];
/* 0x0190 */ Vec3s jointTable[ENTA_LIMB_MAX];
/* 0x01F6 */ Vec3s morphTable[ENTA_LIMB_MAX];
/* 0x025C */ EnTaActionFunc actionFunc;
/* 0x0260 */ EnTaUnkFunc unk_260;
/* 0x0260 */ EnTaAnimFunc animFunc;
/* 0x0264 */ ColliderCylinder collider;
/* 0x02B0 */ EnTaUnkFunc unk_2B0;
/* 0x02B0 */ EnTaBlinkFunc blinkFunc;
/* 0x02B4 */ s16 eyeIndex;
/* 0x02B6 */ s16 blinkTimer;
/* 0x02B8 */ EnNiw* superCuccos[3];
/* 0x02C4 */ s16 unk_2C4[3];
/* 0x02CA */ u8 unk_2CA;
/* 0x02CC */ s16 unk_2CC;
/* 0x02CE */ s16 unk_2CE;
/* 0x02C4 */ s16 superCuccoTimers[3]; // This is used to time animations and actions for super-cuccos
/* 0x02CA */ u8 lastFoundSuperCuccoIdx;
/* 0x02CC */ s16 timer;
/* 0x02CE */ s16 rapidBlinks;
/* 0x02D0 */ s16 subCamId;
/* 0x02D2 */ s16 returnToCamId;
/* 0x02D4 */ Vec3s unk_2D4;
/* 0x02DA */ Vec3s unk_2DA;
/* 0x02E0 */ u16 unk_2E0;
/* 0x02E2 */ s16 unk_2E2;
/* 0x02D4 */ Vec3s headRot;
/* 0x02DA */ Vec3s torsoRot;
/* 0x02E0 */ u16 stateFlags;
/* 0x02E2 */ s16 nodOffTimer;
/* 0x02E4 */ AnimationHeader* currentAnimation;
} EnTa; // size = 0x02E8
#endif

View file

@ -66,7 +66,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) {
osSyncPrintf("\n\n");
// "☆☆☆☆☆ Cloudy (._.) Ah Melancholy ☆☆☆☆☆"
osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ くもり (._.) あーあ 憂鬱 ☆☆☆☆☆ \n" VT_RST);
if (Flags_GetEventChkInf(EVENTCHKINF_18)) {
if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)) {
Actor_Kill(&this->actor);
}
EnWeatherTag_SetupAction(this, EnWeatherTag_DisabledCloudyLonLonRanch);

View file

@ -11840,7 +11840,7 @@ void func_8084D3E4(Player* this, PlayState* play) {
this->actor.parent = NULL;
AREG(6) = 0;
if (Flags_GetEventChkInf(EVENTCHKINF_18) || (DREG(1) != 0)) {
if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
gSaveContext.horseData.pos.x = rideActor->actor.world.pos.x;
gSaveContext.horseData.pos.y = rideActor->actor.world.pos.y;
gSaveContext.horseData.pos.z = rideActor->actor.world.pos.z;

View file

@ -2708,11 +2708,11 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->worldMapPoints[4] = 1;
}
if (GET_EVENTCHKINF(EVENTCHKINF_6A)) {
if (GET_EVENTCHKINF(EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO)) {
pauseCtx->worldMapPoints[4] = 2;
}
if (GET_EVENTCHKINF(EVENTCHKINF_18)) {
if (GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
pauseCtx->worldMapPoints[4] = 1;
}