diff --git a/include/functions.h b/include/functions.h index be85d86423..1cacc5fed2 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1652,10 +1652,10 @@ void func_800F0590(GlobalContext* globalCtx, Vec3f* arg1, s32 arg2, s32 arg3); // void func_800F10AC(void); // void func_800F112C(void); u16 Text_GetFaceReaction(GlobalContext* globalCtx, u32 reactionSet); -void func_800F12D0(GlobalContext* globalCtx); -void func_800F1304(GlobalContext* globalCtx, s16 param_2); -void func_800F1374(s32 param_1, s16 param_2); -s16 func_800F13E8(GlobalContext* globalCtx, s16 param_2); +void EnvFlags_UnsetAll(GlobalContext* globalCtx); +void EnvFlags_Set(GlobalContext* globalCtx, s16 flag); +void EnvFlags_Unset(GlobalContext* globalCtx, s16 flag); +s32 EnvFlags_Get(GlobalContext* globalCtx, s16 flag); s16 func_800F1460(s16 param_1); ActorCutscene* ActorCutscene_GetCutsceneImpl(s16 index); void ActorCutscene_Init(GlobalContext* globalCtx, ActorCutscene* cutscenes, s32 num); diff --git a/spec b/spec index f7bd476893..2350931e9f 100644 --- a/spec +++ b/spec @@ -483,7 +483,7 @@ beginseg include "build/src/code/code_800F07C0.o" include "build/data/code/code_801BC2A0.data.o" include "build/src/code/z_face_reaction.o" - include "build/src/code/code_800F12D0.o" + include "build/src/code/z_env_flags.o" include "build/src/code/z_eventmgr.o" include "build/data/code/z_eventmgr.bss.o" include "build/src/code/z_fcurve_data.o" diff --git a/src/code/code_800F12D0.c b/src/code/code_800F12D0.c deleted file mode 100644 index d34f11e814..0000000000 --- a/src/code/code_800F12D0.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_800F12D0/func_800F12D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_800F12D0/func_800F1304.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_800F12D0/func_800F1374.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_800F12D0/func_800F13E8.s") diff --git a/src/code/z_env_flags.c b/src/code/z_env_flags.c new file mode 100644 index 0000000000..d766815124 --- /dev/null +++ b/src/code/z_env_flags.c @@ -0,0 +1,33 @@ +#include "global.h" + +void EnvFlags_UnsetAll(GlobalContext* globalCtx) { + u8 i; + + for (i = 0; i < ARRAY_COUNT(globalCtx->envFlags); i++) { + globalCtx->envFlags[i] = 0; + } +} + +void EnvFlags_Set(GlobalContext* globalCtx, s16 flag) { + s16 index = flag / 16; + s16 bit = flag % 16; + s16 mask = 1 << bit; + + globalCtx->envFlags[index] |= mask; +} + +void EnvFlags_Unset(GlobalContext* globalCtx, s16 flag) { + s16 index = flag / 16; + s16 bit = flag % 16; + s16 mask = (1 << bit) ^ 0xFFFF; + + globalCtx->envFlags[index] &= mask; +} + +s32 EnvFlags_Get(GlobalContext* globalCtx, s16 flag) { + s16 index = flag / 16; + s16 bit = flag % 16; + s16 mask = 1 << bit; + + return globalCtx->envFlags[index] & mask; +} diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index ed485a1104..fb983aa6fe 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -98,7 +98,7 @@ void DoorAna_WaitClosed(DoorAna* this, GlobalContext* globalCtx) { if (grottoType == DOORANA_TYPE_UNK) { // in OOT decomp its marked as open with storms, but does not seem to open with storms in MM - if ((this->actor.xyzDistToPlayerSq < 40000.0f) && (func_800F13E8(globalCtx, 5))) { + if ((this->actor.xyzDistToPlayerSq < 40000.0f) && (EnvFlags_Get(globalCtx, 5))) { grottoIsOpen = 1; this->actor.flags &= ~0x10; // always update OFF } diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index f1938cf4c0..c67027a734 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -379,7 +379,7 @@ 0x800F05C0 : "z_elf_message", 0x800F07C0 : "code_800F07C0", 0x800F1250 : "z_face_reaction", - 0x800F12D0 : "code_800F12D0", + 0x800F12D0 : "z_env_flags", 0x800F1460 : "z_eventmgr", 0x800F23E0 : "z_fcurve_data", 0x800F2620 : "z_fcurve_data_skelanime", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 06583a169c..7e30deb3ed 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1632,10 +1632,10 @@ 0x800F10AC:("func_800F10AC",), 0x800F112C:("func_800F112C",), 0x800F1250:("Text_GetFaceReaction",), - 0x800F12D0:("func_800F12D0",), - 0x800F1304:("func_800F1304",), - 0x800F1374:("func_800F1374",), - 0x800F13E8:("func_800F13E8",), + 0x800F12D0:("EnvFlags_UnsetAll",), + 0x800F1304:("EnvFlags_Set",), + 0x800F1374:("EnvFlags_Unset",), + 0x800F13E8:("EnvFlags_Get",), 0x800F1460:("func_800F1460",), 0x800F14F8:("ActorCutscene_GetCutsceneImpl",), 0x800F1544:("ActorCutscene_Init",),