1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-05 15:34:41 +00:00

Defines for SaveContext flags (eventChkInf, itemGetInf, infTable, eventInf) (#1094)

* script-assisted `itemGetInf` flags

* comment near non-trivial `itemGetInf` usage

* Run formatter

* Try something with the itemgetinf flags that can't use the packed value

* Add defines for `eventChkInf` (direct access)

* Add defines for `eventChkInf` (access through `Flags_GetEventChkInf`)

* Add defines for `eventChkInf` (access through `Flags_SetEventChkInf`)

* Add defines for `infTable` (direct access)

* Add defines for `infTable` (used by `Flags_GetInfTable`)

* Add defines for `infTable` (used by `Flags_SetInfTable`)

* Add defines for `eventInf`

* parenthesis cleanup near `GET_EVENTCHKINF` usage

* parenthesis cleanup near `GET_ITEMGETINF` usage

* parenthesis cleanup near `GET_INFTABLE` usage

* fixup one `eventInf` usage

* parenthesis cleanup near `GET_EVENTINF` usage

* parenthesis cleanup near `Flags_GetEventChkInf` usage

* slight `z64save.h` formatting improvement

* Improve itemGetInf flags in z_bg_dy_yoseizo

* Questionable improvement in z_en_ge2

* Questionable improvement in z_en_daiku

* Questionable improvement in z_en_mu

* Run formatter

* Parentheses around `gSaveContext` macros arguments

* Move individual flags define to the end of z64save.h, and improve comments separating the groups
This commit is contained in:
Dragorn421 2022-04-29 20:19:48 +02:00 committed by GitHub
parent 16790bc253
commit 6336df5fcd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
146 changed files with 1931 additions and 1315 deletions

View file

@ -208,7 +208,7 @@ u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment) {
if (equipment == EQUIP_SWORD) {
gSaveContext.equips.buttonItems[0] = ITEM_NONE;
gSaveContext.infTable[29] = 1;
gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1;
}
Player_SetEquipmentData(globalCtx, player);

File diff suppressed because it is too large Load diff

View file

@ -52,40 +52,40 @@ CutsceneStateHandler sCsStateHandlers2[] = {
u8 sTitleCsState = 0;
EntranceCutscene sEntranceCutsceneTable[] = {
{ 0x0185, 2, 0xA0, gHyruleFieldIntroCs },
{ 0x013D, 2, 0xA1, gDMTIntroCs },
{ 0x00DB, 2, 0xA3, gKakarikoVillageIntroCs },
{ 0x0108, 2, 0xA4, gZorasDomainIntroCs },
{ 0x0138, 1, 0xA5, gHyruleCastleIntroCs },
{ 0x014D, 2, 0xA6, gGoronCityIntroCs },
{ 0x0053, 2, 0xA7, gTempleOfTimeIntroCs },
{ 0x0000, 2, 0xA8, gDekuTreeIntroCs },
{ 0x028A, 0, 0x18, gHyruleFieldSouthEponaJumpCs },
{ 0x0292, 0, 0x18, gHyruleFieldEastEponaJumpCs },
{ 0x028E, 0, 0x18, gHyruleFieldWestEponaJumpCs },
{ 0x0476, 0, 0x18, gHyruleFieldGateEponaJumpCs },
{ 0x050F, 1, 0xA9, gHyruleFieldGetOoTCs },
{ 0x0102, 2, 0xB1, gLakeHyliaIntroCs },
{ 0x0117, 2, 0xB2, gGerudoValleyIntroCs },
{ 0x0129, 2, 0xB3, gGerudoFortressIntroCs },
{ 0x0157, 2, 0xB4, gLonLonRanchIntroCs },
{ 0x0028, 2, 0xB5, gJabuJabuIntroCs },
{ 0x00E4, 2, 0xB6, gGraveyardIntroCs },
{ 0x0225, 2, 0xB7, gZorasFountainIntroCs },
{ 0x0123, 2, 0xB8, gDesertColossusIntroCs },
{ 0x0147, 2, 0xB9, gDeathMountainCraterIntroCs },
{ 0x0138, 0, 0xBA, gGanonsCastleIntroCs },
{ 0x0574, 2, 0x5A, gSunSongGraveSunSongTeachPart2Cs },
{ 0x0538, 2, 0xBB, gForestBarrierCs },
{ 0x053C, 2, 0xBC, gWaterBarrierCs },
{ 0x0540, 2, 0xBD, gShadowBarrierCs },
{ 0x0544, 2, 0xBE, gFireBarrierCs },
{ 0x0548, 2, 0xBF, gLightBarrierCs },
{ 0x054C, 2, 0xAD, gSpiritBarrierCs },
{ 0x008D, 0, 0xC0, gSpiritBossNabooruKnuckleIntroCs },
{ 0x03B4, 0, 0xC7, gGerudoFortressFirstCaptureCs },
{ 0x0246, 2, 0xB9, gDeathMountainCraterIntroCs },
{ 0x05E8, 2, 0xC6, gKokiriForestDekuSproutCs },
{ 0x0185, 2, EVENTCHKINF_A0, gHyruleFieldIntroCs },
{ 0x013D, 2, EVENTCHKINF_A1, gDMTIntroCs },
{ 0x00DB, 2, EVENTCHKINF_A3, gKakarikoVillageIntroCs },
{ 0x0108, 2, EVENTCHKINF_A4, gZorasDomainIntroCs },
{ 0x0138, 1, EVENTCHKINF_A5, gHyruleCastleIntroCs },
{ 0x014D, 2, EVENTCHKINF_A6, gGoronCityIntroCs },
{ 0x0053, 2, EVENTCHKINF_A7, gTempleOfTimeIntroCs },
{ 0x0000, 2, EVENTCHKINF_A8, gDekuTreeIntroCs },
{ 0x028A, 0, EVENTCHKINF_18, gHyruleFieldSouthEponaJumpCs },
{ 0x0292, 0, EVENTCHKINF_18, gHyruleFieldEastEponaJumpCs },
{ 0x028E, 0, EVENTCHKINF_18, gHyruleFieldWestEponaJumpCs },
{ 0x0476, 0, EVENTCHKINF_18, gHyruleFieldGateEponaJumpCs },
{ 0x050F, 1, EVENTCHKINF_A9, gHyruleFieldGetOoTCs },
{ 0x0102, 2, EVENTCHKINF_B1, gLakeHyliaIntroCs },
{ 0x0117, 2, EVENTCHKINF_B2, gGerudoValleyIntroCs },
{ 0x0129, 2, EVENTCHKINF_B3, gGerudoFortressIntroCs },
{ 0x0157, 2, EVENTCHKINF_B4, gLonLonRanchIntroCs },
{ 0x0028, 2, EVENTCHKINF_B5, gJabuJabuIntroCs },
{ 0x00E4, 2, EVENTCHKINF_B6, gGraveyardIntroCs },
{ 0x0225, 2, EVENTCHKINF_B7, gZorasFountainIntroCs },
{ 0x0123, 2, EVENTCHKINF_B8, gDesertColossusIntroCs },
{ 0x0147, 2, EVENTCHKINF_B9, gDeathMountainCraterIntroCs },
{ 0x0138, 0, EVENTCHKINF_BA, gGanonsCastleIntroCs },
{ 0x0574, 2, EVENTCHKINF_5A, gSunSongGraveSunSongTeachPart2Cs },
{ 0x0538, 2, EVENTCHKINF_BB, gForestBarrierCs },
{ 0x053C, 2, EVENTCHKINF_BC, gWaterBarrierCs },
{ 0x0540, 2, EVENTCHKINF_BD, gShadowBarrierCs },
{ 0x0544, 2, EVENTCHKINF_BE, gFireBarrierCs },
{ 0x0548, 2, EVENTCHKINF_BF, gLightBarrierCs },
{ 0x054C, 2, EVENTCHKINF_AD, gSpiritBarrierCs },
{ 0x008D, 0, EVENTCHKINF_C0, gSpiritBossNabooruKnuckleIntroCs },
{ 0x03B4, 0, EVENTCHKINF_C7, gGerudoFortressFirstCaptureCs },
{ 0x0246, 2, EVENTCHKINF_B9, gDeathMountainCraterIntroCs },
{ 0x05E8, 2, EVENTCHKINF_C6, gKokiriForestDekuSproutCs },
};
// Unused, seems to be an early list of dungeon entrance cutscene locations
@ -336,13 +336,13 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
}
break;
case 19:
gSaveContext.eventChkInf[6] |= 0x0020;
SET_EVENTCHKINF(EVENTCHKINF_65);
break;
case 20:
gSaveContext.eventChkInf[6] |= 0x0080;
SET_EVENTCHKINF(EVENTCHKINF_67);
break;
case 21:
gSaveContext.eventChkInf[6] |= 0x0200;
SET_EVENTCHKINF(EVENTCHKINF_69);
break;
case 22:
D_801614B0.r = 255;
@ -561,8 +561,8 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
case 8:
gSaveContext.fw.set = 0;
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
if (!(gSaveContext.eventChkInf[4] & 0x20)) {
gSaveContext.eventChkInf[4] |= 0x20;
if (!GET_EVENTCHKINF(EVENTCHKINF_45)) {
SET_EVENTCHKINF(EVENTCHKINF_45);
globalCtx->nextEntranceIndex = 0x00A0;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF3;
@ -634,7 +634,7 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case 18:
gSaveContext.eventChkInf[4] |= 0x8000;
SET_EVENTCHKINF(EVENTCHKINF_4F);
globalCtx->nextEntranceIndex = 0x0324;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
globalCtx->transitionType = TRANS_TYPE_FADE_BLACK;
@ -779,14 +779,14 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE_INSTANT;
break;
case 46:
gSaveContext.eventChkInf[4] |= 0x8000;
SET_EVENTCHKINF(EVENTCHKINF_4F);
globalCtx->nextEntranceIndex = 0x0324;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
globalCtx->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
case 47:
Item_Give(globalCtx, ITEM_SONG_NOCTURNE);
gSaveContext.eventChkInf[5] |= 0x10;
SET_EVENTCHKINF(EVENTCHKINF_54);
globalCtx->nextEntranceIndex = 0x00DB;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF1;
@ -1014,8 +1014,8 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case 95:
if ((gSaveContext.eventChkInf[4] & 0x100) && (gSaveContext.eventChkInf[4] & 0x200) &&
(gSaveContext.eventChkInf[4] & 0x400)) {
if (GET_EVENTCHKINF(EVENTCHKINF_48) && GET_EVENTCHKINF(EVENTCHKINF_49) &&
GET_EVENTCHKINF(EVENTCHKINF_4A)) {
globalCtx->nextEntranceIndex = 0x0053;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF3;
@ -1048,7 +1048,7 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
gSaveContext.cutsceneIndex = 0xFFF1;
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
} else {
gSaveContext.eventChkInf[12] |= 0x100;
SET_EVENTCHKINF(EVENTCHKINF_C8);
globalCtx->nextEntranceIndex = 0x0610;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE;
@ -1170,8 +1170,9 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
globalCtx->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case 113:
if (Flags_GetEventChkInf(0xBB) && Flags_GetEventChkInf(0xBC) && Flags_GetEventChkInf(0xBD) &&
Flags_GetEventChkInf(0xBE) && Flags_GetEventChkInf(0xBF) && Flags_GetEventChkInf(0xAD)) {
if (Flags_GetEventChkInf(EVENTCHKINF_BB) && Flags_GetEventChkInf(EVENTCHKINF_BC) &&
Flags_GetEventChkInf(EVENTCHKINF_BD) && Flags_GetEventChkInf(EVENTCHKINF_BE) &&
Flags_GetEventChkInf(EVENTCHKINF_BF) && Flags_GetEventChkInf(EVENTCHKINF_AD)) {
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gTowerBarrierCs);
globalCtx->csCtx.frames = 0;
gSaveContext.cutsceneTrigger = 1;
@ -1194,7 +1195,7 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break;
case 116:
if (gSaveContext.eventChkInf[12] & 0x100) {
if (GET_EVENTCHKINF(EVENTCHKINF_C8)) {
globalCtx->nextEntranceIndex = 0x0580;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE;
@ -2060,7 +2061,7 @@ void Cutscene_HandleEntranceTriggers(GlobalContext* globalCtx) {
}
if ((gSaveContext.entranceIndex == entranceCutscene->entrance) &&
(!Flags_GetEventChkInf(entranceCutscene->flag) || (entranceCutscene->flag == 0x18)) &&
(!Flags_GetEventChkInf(entranceCutscene->flag) || (entranceCutscene->flag == EVENTCHKINF_18)) &&
(gSaveContext.cutsceneIndex < 0xFFF0) && ((u8)gSaveContext.linkAge == requiredAge) &&
(gSaveContext.respawnFlag <= 0)) {
Flags_SetEventChkInf(entranceCutscene->flag);
@ -2076,29 +2077,29 @@ void Cutscene_HandleConditionalTriggers(GlobalContext* globalCtx) {
osSyncPrintf("\ngame_info.mode=[%d] restart_flag", ((void)0, gSaveContext.respawnFlag));
if ((gSaveContext.gameMode == 0) && (gSaveContext.respawnFlag <= 0) && (gSaveContext.cutsceneIndex < 0xFFF0)) {
if ((gSaveContext.entranceIndex == 0x01E1) && !Flags_GetEventChkInf(0xAC)) {
Flags_SetEventChkInf(0xAC);
if ((gSaveContext.entranceIndex == 0x01E1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) {
Flags_SetEventChkInf(EVENTCHKINF_AC);
gSaveContext.entranceIndex = 0x0123;
gSaveContext.cutsceneIndex = 0xFFF0;
} else if ((gSaveContext.entranceIndex == 0x00DB) && LINK_IS_ADULT && (gSaveContext.eventChkInf[4] & 0x0100) &&
(gSaveContext.eventChkInf[4] & 0x0200) && (gSaveContext.eventChkInf[4] & 0x0400) &&
!Flags_GetEventChkInf(0xAA)) {
Flags_SetEventChkInf(0xAA);
} else if ((gSaveContext.entranceIndex == 0x00DB) && LINK_IS_ADULT && GET_EVENTCHKINF(EVENTCHKINF_48) &&
GET_EVENTCHKINF(EVENTCHKINF_49) && GET_EVENTCHKINF(EVENTCHKINF_4A) &&
!Flags_GetEventChkInf(EVENTCHKINF_AA)) {
Flags_SetEventChkInf(EVENTCHKINF_AA);
gSaveContext.cutsceneIndex = 0xFFF0;
} else if ((gSaveContext.entranceIndex == 0x05E0) && !Flags_GetEventChkInf(0xC1)) {
Flags_SetEventChkInf(0xC1);
} else if ((gSaveContext.entranceIndex == 0x05E0) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) {
Flags_SetEventChkInf(EVENTCHKINF_C1);
Item_Give(globalCtx, ITEM_OCARINA_FAIRY);
gSaveContext.entranceIndex = 0x011E;
gSaveContext.cutsceneIndex = 0xFFF0;
} else if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) &&
LINK_IS_ADULT && !Flags_GetEventChkInf(0xC4) &&
LINK_IS_ADULT && !Flags_GetEventChkInf(EVENTCHKINF_C4) &&
(gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_TOKINOMA)) {
Flags_SetEventChkInf(0xC4);
Flags_SetEventChkInf(EVENTCHKINF_C4);
gSaveContext.entranceIndex = 0x0053;
gSaveContext.cutsceneIndex = 0xFFF8;
} else if (!Flags_GetEventChkInf(0xC7) &&
} else if (!Flags_GetEventChkInf(EVENTCHKINF_C7) &&
(gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_GANON_DEMO)) {
Flags_SetEventChkInf(0xC7);
Flags_SetEventChkInf(EVENTCHKINF_C7);
gSaveContext.entranceIndex = 0x0517;
gSaveContext.cutsceneIndex = 0xFFF0;
}

View file

@ -3,11 +3,11 @@
ElfMessage sChildSariaMsgs[] = {
ELF_MSG_STRENGTH_UPG(SKIP, 3, false, 0),
ELF_MSG_FLAG(CHECK, 0x61, false, 0x37), /* eventChkInf[3] & 0x80 */
ELF_MSG_FLAG(CHECK, 0x61, false, EVENTCHKINF_37),
ELF_MSG_END(0x64),
ELF_MSG_FLAG(CHECK, 0x62, false, 0x25), /* eventChkInf[2] & 0x20 */
ELF_MSG_FLAG(CHECK, 0x63, false, 0x37), /* eventChkInf[3] & 0x80 */
ELF_MSG_FLAG(CHECK, 0x65, false, 0x43), /* eventChkInf[4] & 0x8 */
ELF_MSG_FLAG(CHECK, 0x62, false, EVENTCHKINF_25),
ELF_MSG_FLAG(CHECK, 0x63, false, EVENTCHKINF_37),
ELF_MSG_FLAG(CHECK, 0x65, false, EVENTCHKINF_43),
ELF_MSG_MEDALLION(CHECK, 0x66, false, ITEM_MEDALLION_FOREST),
ELF_MSG_MEDALLION(CHECK, 0x66, false, ITEM_MEDALLION_FIRE),
ELF_MSG_MEDALLION(CHECK, 0x66, false, ITEM_MEDALLION_WATER),

View file

@ -30,7 +30,7 @@ void GameOver_Update(GlobalContext* globalCtx) {
gSaveContext.timer1State = 0;
gSaveContext.timer2State = 0;
gSaveContext.eventInf[1] &= ~1;
CLEAR_EVENTINF(EVENTINF_10);
// search inventory for spoiling items and revert if necessary
for (i = 0; i < ARRAY_COUNT(gSpoilingItems); i++) {

View file

@ -47,7 +47,7 @@ void func_8006D0EC(GlobalContext* globalCtx, Player* player) {
{ SCENE_SPOT20, 928, 0, -2280, 0, 2 },
};
if ((AREG(6) != 0) && (Flags_GetEventChkInf(0x18) || (DREG(1) != 0))) {
if ((AREG(6) != 0) && (Flags_GetEventChkInf(EVENTCHKINF_18) || (DREG(1) != 0))) {
player->rideActor = Actor_Spawn(&globalCtx->actorCtx, globalCtx, 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(GlobalContext* globalCtx, Player* player) {
horseActor =
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1);
horseActor->room = -1;
} else if ((gSaveContext.entranceIndex == 1230) && (gSaveContext.eventChkInf[1] & 0x100)) {
} else if ((gSaveContext.entranceIndex == 1230) && GET_EVENTCHKINF(EVENTCHKINF_18)) {
Actor* horseActor =
Actor_Spawn(&globalCtx->actorCtx, globalCtx, 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 ((globalCtx->sceneNum == gSaveContext.horseData.scene) &&
(Flags_GetEventChkInf(0x18) != 0 || DREG(1) != 0)) {
(Flags_GetEventChkInf(EVENTCHKINF_18) || DREG(1) != 0)) {
// "Set by existence of horse %d %d %d"
osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.scene, Flags_GetEventChkInf(0x18),
DREG(1));
osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.scene,
Flags_GetEventChkInf(EVENTCHKINF_18), DREG(1));
if (func_8006CFC0(gSaveContext.horseData.scene)) {
Actor* horseActor = Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_HORSE,
@ -92,11 +92,11 @@ void func_8006D0EC(GlobalContext* globalCtx, Player* player) {
osSyncPrintf(VT_RST);
func_8006D074(globalCtx);
}
} else if ((globalCtx->sceneNum == SCENE_SPOT20) && !Flags_GetEventChkInf(0x18) && (DREG(1) == 0)) {
} else if ((globalCtx->sceneNum == SCENE_SPOT20) && !Flags_GetEventChkInf(EVENTCHKINF_18) && (DREG(1) == 0)) {
Actor* horseActor =
Actor_Spawn(&globalCtx->actorCtx, globalCtx, 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(0x18) || (DREG(1) != 0)) {
} else if (Flags_GetEventChkInf(EVENTCHKINF_18) || (DREG(1) != 0)) {
for (i = 0; i < ARRAY_COUNT(horseSpawns); i++) {
HorseSpawn* horseSpawn = &horseSpawns[i];
if (horseSpawn->scene == globalCtx->sceneNum) {
@ -111,7 +111,7 @@ void func_8006D0EC(GlobalContext* globalCtx, Player* player) {
break;
}
}
} else if (!Flags_GetEventChkInf(0x18)) {
} else if (!Flags_GetEventChkInf(EVENTCHKINF_18)) {
if ((DREG(1) == 0) && (globalCtx->sceneNum == SCENE_SOUKO) && !IS_DAY) {
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_HORSE, 0.0f, 0.0f, -60.0f, 0, 0x7360, 0, 1);
}
@ -158,8 +158,11 @@ void func_8006D684(GlobalContext* globalCtx, Player* player) {
Actor_MountHorse(globalCtx, player, player->rideActor);
func_8002DE74(globalCtx, player);
gSaveContext.horseData.scene = globalCtx->sceneNum;
} else if ((globalCtx->sceneNum == SCENE_SPOT20) && ((gSaveContext.eventInf[0] & 0xF) == 6) &&
(Flags_GetEventChkInf(0x18) == 0) && (DREG(1) == 0)) {
} else if ((globalCtx->sceneNum == SCENE_SPOT20) &&
((gSaveContext.eventInf[EVENTINF_0X_INDEX] &
(EVENTINF_00_MASK | EVENTINF_01_MASK | EVENTINF_02_MASK | EVENTINF_03_MASK)) ==
(EVENTINF_01_MASK | EVENTINF_02_MASK)) &&
!Flags_GetEventChkInf(EVENTCHKINF_18) && (DREG(1) == 0)) {
player->rideActor =
Actor_Spawn(&globalCtx->actorCtx, globalCtx, 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);
@ -200,7 +203,7 @@ void func_8006D684(GlobalContext* globalCtx, Player* player) {
Vec3f sp54;
s32 temp = 0;
if (((gSaveContext.eventInf[0] & 0x10) >> 4) && D_8011F9B8[i].type == 6) {
if ((GET_EVENTINF(EVENTINF_04) >> EVENTINF_04_SHIFT) && D_8011F9B8[i].type == 6) {
temp = 0x8000;
}
@ -249,8 +252,11 @@ void func_8006DC68(GlobalContext* globalCtx, Player* player) {
((gSaveContext.entranceIndex == 0x028A || gSaveContext.entranceIndex == 0x028E ||
gSaveContext.entranceIndex == 0x0292 || gSaveContext.entranceIndex == 0x0476) &&
(gSaveContext.respawnFlag == 0)) ||
((globalCtx->sceneNum == SCENE_SPOT20) && ((gSaveContext.eventInf[0] & 0xF) == 6) &&
!Flags_GetEventChkInf(0x18) && (DREG(1) == 0))) {
((globalCtx->sceneNum == SCENE_SPOT20) &&
((gSaveContext.eventInf[EVENTINF_0X_INDEX] &
(EVENTINF_00_MASK | EVENTINF_01_MASK | EVENTINF_02_MASK | EVENTINF_03_MASK)) ==
(EVENTINF_01_MASK | EVENTINF_02_MASK)) &&
!Flags_GetEventChkInf(EVENTCHKINF_18) && (DREG(1) == 0))) {
func_8006D684(globalCtx, player);
} else {
func_8006D0EC(globalCtx, player);

View file

@ -2443,19 +2443,19 @@ void Environment_WarpSongLeave(GlobalContext* globalCtx) {
switch (globalCtx->nextEntranceIndex) {
case 0x147:
Flags_SetEventChkInf(0xB9);
Flags_SetEventChkInf(EVENTCHKINF_B9);
break;
case 0x0102:
Flags_SetEventChkInf(0xB1);
Flags_SetEventChkInf(EVENTCHKINF_B1);
break;
case 0x0123:
Flags_SetEventChkInf(0xB8);
Flags_SetEventChkInf(EVENTCHKINF_B8);
break;
case 0x00E4:
Flags_SetEventChkInf(0xB6);
Flags_SetEventChkInf(EVENTCHKINF_B6);
break;
case 0x0053:
Flags_SetEventChkInf(0xA7);
Flags_SetEventChkInf(EVENTCHKINF_A7);
break;
case 0x00FC:
break;

View file

@ -239,8 +239,26 @@ static s16 sOwEntranceIconPosY[24] = {
};
static u16 sOwEntranceFlag[20] = {
0xFFFF, 0x0008, 0x0007, 0xFFFF, 0x0000, 0x0003, 0x0005, 0xFFFF, 0x0002, 0xFFFF,
0xFFFF, 0x0006, 0x000B, 0xFFFF, 0xFFFF, 0x0001, 0x0004, 0xFFFF, 0xFFFF, 0x000D,
0xFFFF,
INFTABLE_1A8_SHIFT,
INFTABLE_1A7_SHIFT,
0xFFFF,
INFTABLE_1A0_SHIFT,
INFTABLE_1A3_SHIFT,
INFTABLE_1A5_SHIFT,
0xFFFF,
INFTABLE_1A2_SHIFT,
0xFFFF,
0xFFFF,
INFTABLE_1A6_SHIFT,
INFTABLE_1AB_SHIFT,
0xFFFF,
0xFFFF,
INFTABLE_1A1_SHIFT,
INFTABLE_1A4_SHIFT,
0xFFFF,
0xFFFF,
INFTABLE_1AD_SHIFT,
};
static f32 sFloorCoordY[10][8] = {

View file

@ -118,11 +118,16 @@ void Map_InitData(GlobalContext* globalCtx, s16 room) {
extendedMapIndex = 0x15;
}
} else if (globalCtx->sceneNum == SCENE_SPOT09) {
if ((LINK_AGE_IN_YEARS == YEARS_ADULT) && !((gSaveContext.eventChkInf[9] & 0xF) == 0xF)) {
if ((LINK_AGE_IN_YEARS == YEARS_ADULT) &&
!CHECK_FLAG_ALL(gSaveContext.eventChkInf[EVENTCHKINF_90_91_92_93_INDEX],
EVENTCHKINF_90_MASK | EVENTCHKINF_91_MASK | EVENTCHKINF_92_MASK |
EVENTCHKINF_93_MASK)) {
extendedMapIndex = 0x16;
}
} else if (globalCtx->sceneNum == SCENE_SPOT12) {
if ((gSaveContext.eventChkInf[9] & 0xF) == 0xF) {
if (CHECK_FLAG_ALL(gSaveContext.eventChkInf[EVENTCHKINF_90_91_92_93_INDEX],
EVENTCHKINF_90_MASK | EVENTCHKINF_91_MASK | EVENTCHKINF_92_MASK |
EVENTCHKINF_93_MASK)) {
extendedMapIndex = 0x17;
}
}
@ -455,7 +460,8 @@ void Minimap_Draw(GlobalContext* globalCtx) {
(LINK_AGE_IN_YEARS != YEARS_ADULT)) {
if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
(gSaveContext.infTable[26] & gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
(gSaveContext.infTable[INFTABLE_1AX_INDEX] &
gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
8, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
@ -470,7 +476,8 @@ void Minimap_Draw(GlobalContext* globalCtx) {
}
}
if ((globalCtx->sceneNum == SCENE_SPOT08) && (gSaveContext.infTable[26] & gBitFlags[9])) {
if ((globalCtx->sceneNum == SCENE_SPOT08) &&
(gSaveContext.infTable[INFTABLE_1AX_INDEX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8,
8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);

View file

@ -1605,7 +1605,7 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) {
textId += (gSaveContext.inventory.questItems & 0xF0000000 & 0xF0000000) >> QUEST_HEART_PIECE_COUNT;
} else if (msgCtx->textId == 0xC && CHECK_OWNED_EQUIP(EQUIP_SWORD, 2)) {
textId = 0xB; // Traded Giant's Knife for Biggoron Sword
} else if (msgCtx->textId == 0xB4 && (gSaveContext.eventChkInf[9] & 0x40)) {
} else if (msgCtx->textId == 0xB4 && GET_EVENTCHKINF(EVENTCHKINF_96)) {
textId = 0xB5; // Destroyed Gold Skulltula
}
// Ocarina Staff + Dialog
@ -2456,7 +2456,9 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) {
if (msgCtx->disableWarpSongs || interfaceCtx->restrictions.warpSongs == 3) {
Message_StartTextbox(globalCtx, 0x88C, NULL); // "You can't warp here!"
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
} else if ((gSaveContext.eventInf[0] & 0xF) != 1) {
} else if ((gSaveContext.eventInf[EVENTINF_0X_INDEX] &
(EVENTINF_00_MASK | EVENTINF_01_MASK | EVENTINF_02_MASK | EVENTINF_03_MASK)) !=
EVENTINF_00_MASK) {
Message_StartTextbox(globalCtx, msgCtx->lastPlayedSong + 0x88D,
NULL); // "Warp to [place name]?"
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_01;
@ -3217,8 +3219,10 @@ void Message_Update(GlobalContext* globalCtx) {
if (Message_ShouldAdvance(globalCtx)) {
osSyncPrintf("OCARINA_MODE=%d -> ", globalCtx->msgCtx.ocarinaMode);
globalCtx->msgCtx.ocarinaMode = (msgCtx->choiceIndex == 0) ? OCARINA_MODE_02 : OCARINA_MODE_04;
osSyncPrintf("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ", gSaveContext.eventInf[0] & 0xF, 1,
globalCtx->msgCtx.ocarinaMode);
osSyncPrintf("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ",
gSaveContext.eventInf[EVENTINF_0X_INDEX] &
(EVENTINF_00_MASK | EVENTINF_01_MASK | EVENTINF_02_MASK | EVENTINF_03_MASK),
1, globalCtx->msgCtx.ocarinaMode);
Message_CloseTextbox(globalCtx);
osSyncPrintf("OCARINA_MODE=%d\n", globalCtx->msgCtx.ocarinaMode);
}

View file

@ -768,7 +768,9 @@ void func_80083108(GlobalContext* globalCtx) {
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
}
} else if ((gSaveContext.eventInf[0] & 0xF) == 1) {
} else if ((gSaveContext.eventInf[EVENTINF_0X_INDEX] &
(EVENTINF_00_MASK | EVENTINF_01_MASK | EVENTINF_02_MASK | EVENTINF_03_MASK)) ==
EVENTINF_00_MASK) {
if (player->stateFlags1 & PLAYER_STATE1_23) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) &&
(gSaveContext.equips.buttonItems[0] != ITEM_BOW)) {
@ -828,7 +830,8 @@ void func_80083108(GlobalContext* globalCtx) {
(gSaveContext.equips.buttonItems[0] == ITEM_BOW) ||
(gSaveContext.equips.buttonItems[0] == ITEM_BOMBCHU) ||
(gSaveContext.equips.buttonItems[0] == ITEM_NONE)) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) || (gSaveContext.infTable[29] == 0)) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) ||
(gSaveContext.infTable[INFTABLE_1DX_INDEX] == 0)) {
gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
@ -851,7 +854,8 @@ void func_80083108(GlobalContext* globalCtx) {
(gSaveContext.equips.buttonItems[0] == ITEM_BOW) ||
(gSaveContext.equips.buttonItems[0] == ITEM_BOMBCHU) ||
(gSaveContext.equips.buttonItems[0] == ITEM_NONE)) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) || (gSaveContext.infTable[29] == 0)) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) ||
(gSaveContext.infTable[INFTABLE_1DX_INDEX] == 0)) {
gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
@ -1303,7 +1307,7 @@ void func_80084BF4(GlobalContext* globalCtx, u16 flag) {
Interface_LoadItemIcon1(globalCtx, 0);
}
} else if (gSaveContext.equips.buttonItems[0] == ITEM_NONE) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) || (gSaveContext.infTable[29] == 0)) {
if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) || (gSaveContext.infTable[INFTABLE_1DX_INDEX] == 0)) {
gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
Interface_LoadItemIcon1(globalCtx, 0);
}
@ -1636,8 +1640,8 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
AMMO(ITEM_SLINGSHOT) = CUR_CAPACITY(UPG_BULLET_BAG);
}
if (!(gSaveContext.itemGetInf[1] & 8)) {
gSaveContext.itemGetInf[1] |= 8;
if (!GET_ITEMGETINF(ITEMGETINF_13)) {
SET_ITEMGETINF(ITEMGETINF_13);
return ITEM_NONE;
}
@ -1649,8 +1653,8 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
AMMO(ITEM_SLINGSHOT) = CUR_CAPACITY(UPG_BULLET_BAG);
}
if (!(gSaveContext.itemGetInf[1] & 8)) {
gSaveContext.itemGetInf[1] |= 8;
if (!GET_ITEMGETINF(ITEMGETINF_13)) {
SET_ITEMGETINF(ITEMGETINF_13);
return ITEM_NONE;
}
@ -1695,8 +1699,8 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
func_80087708(globalCtx, 12, 5);
if (!(gSaveContext.infTable[25] & 0x100)) {
gSaveContext.infTable[25] |= 0x100;
if (!GET_INFTABLE(INFTABLE_198)) {
SET_INFTABLE(INFTABLE_198);
return ITEM_NONE;
}
@ -1708,8 +1712,8 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
func_80087708(globalCtx, 24, 5);
if (!(gSaveContext.infTable[25] & 0x100)) {
gSaveContext.infTable[25] |= 0x100;
if (!GET_INFTABLE(INFTABLE_198)) {
SET_INFTABLE(INFTABLE_198);
return ITEM_NONE;
}
@ -1770,7 +1774,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
} else if ((item >= ITEM_WEIRD_EGG) && (item <= ITEM_CLAIM_CHECK)) {
if (item == ITEM_SAW) {
gSaveContext.itemGetInf[1] |= 0x8000;
SET_ITEMGETINF(ITEMGETINF_1F);
}
temp = INV_CONTENT(item);
@ -1875,7 +1879,7 @@ u8 Item_CheckObtainability(u8 item) {
} else if (item == ITEM_LONGSHOT) {
return ITEM_NONE;
} else if ((item == ITEM_SEEDS) || (item == ITEM_SEEDS_30)) {
if (!(gSaveContext.itemGetInf[1] & 0x8)) {
if (!GET_ITEMGETINF(ITEMGETINF_13)) {
return ITEM_NONE;
} else {
return ITEM_SEEDS;
@ -1890,8 +1894,8 @@ u8 Item_CheckObtainability(u8 item) {
return ITEM_HEART;
} else if ((item == ITEM_MAGIC_SMALL) || (item == ITEM_MAGIC_LARGE)) {
// "Magic Pot Get_Inf_Table( 25, 0x0100)=%d"
osSyncPrintf("魔法の壷 Get_Inf_Table( 25, 0x0100)=%d\n", gSaveContext.infTable[25] & 0x100);
if (!(gSaveContext.infTable[25] & 0x100)) {
osSyncPrintf("魔法の壷 Get_Inf_Table( 25, 0x0100)=%d\n", GET_INFTABLE(INFTABLE_198));
if (!GET_INFTABLE(INFTABLE_198)) {
return ITEM_NONE;
} else {
return item;
@ -2639,7 +2643,7 @@ void func_80088AA0(s16 arg0) {
void func_80088AF0(GlobalContext* globalCtx) {
if (gSaveContext.timer2State != 0) {
if (gSaveContext.eventInf[1] & 1) {
if (GET_EVENTINF(EVENTINF_10)) {
gSaveContext.timer2Value = 239;
} else {
gSaveContext.timer2Value = 1;
@ -3408,8 +3412,10 @@ void Interface_Draw(GlobalContext* globalCtx) {
// Revert any spoiling trade quest items
for (svar1 = 0; svar1 < ARRAY_COUNT(gSpoilingItems); svar1++) {
if (INV_CONTENT(ITEM_TRADE_ADULT) == gSpoilingItems[svar1]) {
gSaveContext.eventInf[0] &= 0x7F80;
osSyncPrintf("EVENT_INF=%x\n", gSaveContext.eventInf[0]);
gSaveContext.eventInf[EVENTINF_0X_INDEX] &=
(u16) ~(EVENTINF_00_MASK | EVENTINF_01_MASK | EVENTINF_02_MASK | EVENTINF_03_MASK |
EVENTINF_04_MASK | EVENTINF_05_MASK | EVENTINF_06_MASK | EVENTINF_0F_MASK);
osSyncPrintf("EVENT_INF=%x\n", gSaveContext.eventInf[EVENTINF_0X_INDEX]);
globalCtx->nextEntranceIndex = spoilingItemEntrances[svar1];
INV_CONTENT(gSpoilingItemReverts[svar1]) = gSpoilingItemReverts[svar1];
@ -3719,10 +3725,10 @@ void Interface_Draw(GlobalContext* globalCtx) {
}
} else {
gSaveContext.timer2Value++;
if (gSaveContext.eventInf[1] & 1) {
if (GET_EVENTINF(EVENTINF_10)) {
if (gSaveContext.timer2Value == 240) {
Message_StartTextbox(globalCtx, 0x6083, NULL);
gSaveContext.eventInf[1] &= ~1;
CLEAR_EVENTINF(EVENTINF_10);
gSaveContext.timer2State = 0;
}
}

View file

@ -292,7 +292,7 @@ void Gameplay_Init(GameState* thisx) {
}
} else if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_SPOT04) && LINK_IS_ADULT &&
gSaveContext.sceneSetupIndex < 4) {
gSaveContext.sceneSetupIndex = (gSaveContext.eventChkInf[4] & 0x100) ? 3 : 2;
gSaveContext.sceneSetupIndex = GET_EVENTCHKINF(EVENTCHKINF_48) ? 3 : 2;
}
Gameplay_SpawnScene(

View file

@ -2846,7 +2846,7 @@ void func_8009E0B8(GlobalContext* globalCtx) {
spA3 = 255 - (u8)globalCtx->roomCtx.unk_74[0];
} else if (gSaveContext.sceneSetupIndex == 6) {
spA0 = globalCtx->roomCtx.unk_74[0] + 500;
} else if (((gSaveContext.sceneSetupIndex < 4) || LINK_IS_ADULT) && (gSaveContext.eventChkInf[0] & 0x80)) {
} else if (((gSaveContext.sceneSetupIndex < 4) || LINK_IS_ADULT) && GET_EVENTCHKINF(EVENTCHKINF_07)) {
spA0 = 2150;
}
@ -2874,7 +2874,7 @@ void func_8009E54C(GlobalContext* globalCtx) {
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_scene_table.c", 7058);
if ((gSaveContext.sceneSetupIndex > 3) || (LINK_IS_ADULT && !(gSaveContext.eventChkInf[6] & 0x200))) {
if ((gSaveContext.sceneSetupIndex > 3) || (LINK_IS_ADULT && !GET_EVENTCHKINF(EVENTCHKINF_69))) {
globalCtx->roomCtx.unk_74[0] = 87;
}

View file

@ -175,7 +175,7 @@ void Sram_InitNewSave(void) {
gSaveContext.horseData.pos.z = 5497;
gSaveContext.horseData.angle = -0x6AD9;
gSaveContext.magicLevel = 0;
gSaveContext.infTable[29] = 1;
gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1;
gSaveContext.sceneFlags[5].swch = 0x40000000;
}
@ -265,8 +265,8 @@ void Sram_InitDebugSave(void) {
gSaveContext.horseData.angle = -0x6AD9;
gSaveContext.infTable[0] |= 0x5009;
gSaveContext.eventChkInf[0] |= 0x123F;
gSaveContext.eventChkInf[8] |= 1;
gSaveContext.eventChkInf[12] |= 0x10;
SET_EVENTCHKINF(EVENTCHKINF_80);
SET_EVENTCHKINF(EVENTCHKINF_C4);
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI;
@ -408,9 +408,9 @@ void Sram_OpenSave(SramContext* sramCtx) {
}
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
if ((gSaveContext.eventChkInf[4] & 1) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
i = gSaveContext.eventChkInf[4] & ~1;
gSaveContext.eventChkInf[4] = i;
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
i = gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] = i;
INV_CONTENT(ITEM_LETTER_ZELDA) = ITEM_CHICKEN;