diff --git a/include/functions.h b/include/functions.h index 2dc52d561..744354ec4 100644 --- a/include/functions.h +++ b/include/functions.h @@ -739,7 +739,7 @@ void func_800B9038(Actor* actor, s32 timer); void func_800B9084(Actor* actor); void func_800B9098(Actor* actor); s32 func_800B90AC(GlobalContext* globalCtx, Actor* actor, CollisionPoly* polygon, s32 index, s32 arg4); -void func_800B90F4(GlobalContext* globalCtx); +void Actor_DisableLens(GlobalContext* globalCtx); void func_800B9120(ActorContext* actorCtx); void Actor_InitContext(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEntry* actorEntry); void Actor_UpdateAll(GlobalContext* globalCtx, ActorContext* actorCtx); @@ -1934,13 +1934,13 @@ s32 Health_ChangeBy(GlobalContext* globalCtx, s16 healthChange); void Health_GiveHearts(s16 hearts); void Rupees_ChangeBy(s16 rupeeChange); void Inventory_ChangeAmmo(s16 item, s16 ammoChange); -void Interface_AddMagic(GlobalContext* globalCtx, s16 arg1); -void func_80115D5C(GameState* gamestate); -// void func_80115DB4(void); -// void func_80116088(void); -// void func_80116114(void); -// void Interface_UpdateMagicBar(void); -// void Interface_DrawMagicBar(void); +void Magic_Add(GlobalContext* globalCtx, s16 arg1); +void Magic_ResetBar(GameState* gamestate); +// void Magic_Consume(void); +// void Magic_UpdateAdd(void); +// void Magic_UpdateBarBorderColor(void); +// void Magic_UpdateBar(void); +// void Magic_DrawBar(void); // void func_80116FD8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_801170B8(void); // void Interface_DrawItemButtons(void); diff --git a/include/variables.h b/include/variables.h index fe89204e4..c16905aaf 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1032,8 +1032,8 @@ extern UNK_PTR D_801BF5C0; // extern UNK_TYPE2 sMagicBarOutlinePrimRed; // extern UNK_TYPE2 sMagicBarOutlinePrimGreen; // extern UNK_TYPE2 sMagicBarOutlinePrimBlue; -// extern UNK_TYPE2 D_801BF8AC; -// extern UNK_TYPE2 D_801BF8B0; +// extern UNK_TYPE2 sMagicBorderRatio; +// extern UNK_TYPE2 sMagicBorderStep; // extern UNK_TYPE2 D_801BF8DC; // extern UNK_TYPE2 D_801BF8E0; // extern UNK_TYPE2 D_801BF8E4; diff --git a/include/z64actor.h b/include/z64actor.h index ee73ae8af..af74a4757 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -359,7 +359,7 @@ typedef struct ActorContext { /* 0x000 */ u8 freezeFlashTimer; /* 0x001 */ UNK_TYPE1 pad1; /* 0x002 */ u8 unk2; - /* 0x003 */ u8 unk3; + /* 0x003 */ u8 lensActive; /* 0x004 */ s8 unk4; /* 0x005 */ u8 unk5; /* 0x006 */ UNK_TYPE1 pad6[0x5]; diff --git a/include/z64save.h b/include/z64save.h index 12d4e981e..3d8c3b98e 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -24,6 +24,36 @@ typedef enum RespawnMode { #define SAVE_BUFFER_SIZE 0x4000 +typedef enum MagicBarAction { + /* 00 */ MAGIC_BAR_ACTION_IDLE, // Regular gameplay + /* 01 */ MAGIC_BAR_ACTION_CONSUME_SETUP, // Sets the speed in which magic border flashes + /* 02 */ MAGIC_BAR_ACTION_CONSUME, // Consume magic until target is reached or no more magic is available + /* 03 */ MAGIC_BAR_ACTION_BORDER_CHANGE_1, // Flashes border and freezes Dark Link + /* 04 */ MAGIC_BAR_ACTION_BORDER_CHANGE_2, // Flashes border and draws yellow magic to preview target consumption + /* 05 */ MAGIC_BAR_ACTION_RESTORE_IDLE, // Reset colors and return to idle + /* 06 */ MAGIC_BAR_ACTION_BORDER_CHANGE_3, // Flashes border with no additional behaviour + /* 07 */ MAGIC_BAR_ACTION_LENS_CONSUME, // Magic slowly consumed by lens. + /* 08 */ MAGIC_BAR_ACTION_GROW_WIDE, // Init magic on a new load, grow from a width of 0 to magicCapacity + /* 09 */ MAGIC_BAR_ACTION_FILL, + /* 10 */ MAGIC_BAR_ACTION_CONSUME_2, + /* 11 */ MAGIC_BAR_ACTION_CONSUME_3, + /* 12 */ MAGIC_BAR_ACTION_CONSUME_4 +} MagicBarAction; + +typedef enum MagicBarChange { + /* 0 */ MAGIC_BAR_CONSUME_NOW, // Consume Magic immediately without preview + /* 1 */ MAGIC_BAR_CONSUME_WAIT_NO_PREVIEW, // Sets consume target but waits to consume. No yellow magic preview to target consumption. Unused + /* 2 */ MAGIC_BAR_CONSUME_NOW_ALT, // Identical behaviour to MAGIC_BAR_CONSUME_NOW. Unused + /* 3 */ MAGIC_BAR_CONSUME_LENS, // Lens consumption + /* 4 */ MAGIC_BAR_CONSUME_WAIT_PREVIEW, // Sets consume target but waits to consume. Draws yellow magic to target consumption + /* 5 */ MAGIC_BAR_CONSUME_2, + /* 6 */ MAGIC_BAR_CONSUME_4, + /* 7 */ MAGIC_BAR_CONSUME_UNK +} MagicBarChange; + +#define MAGIC_HALF_BAR 0x30 +#define MAGIC_FULL_BAR (2 * MAGIC_HALF_BAR) + typedef struct SramContext { /* 0x00 */ u8* readBuff; /* 0x04 */ u8 *saveBuf; @@ -109,8 +139,8 @@ typedef struct SavePlayerData { /* 0x0016 */ s16 rupees; // "lupy_count" /* 0x0018 */ u16 swordHealth; // "long_sword_hp" /* 0x001A */ u16 tatlTimer; // "navi_timer" - /* 0x001C */ u8 magicAcquired; // "magic_mode" - /* 0x001D */ u8 doubleMagic; // "magic_ability" + /* 0x001C */ u8 isMagicAcquired; // "magic_mode" + /* 0x001D */ u8 isDoubleMagicAcquired; // "magic_ability" /* 0x001E */ u8 doubleDefense; // "life_ability" /* 0x001F */ u8 unk_1F; // "ocarina_round" /* 0x0020 */ u8 unk_20; // "first_memory" @@ -225,13 +255,13 @@ typedef struct SaveContext { /* 0x3F22 */ u16 unk_3F22; // "prev_alpha_type" /* 0x3F24 */ u16 unk_3F24; // "alpha_count" /* 0x3F26 */ u16 unk_3F26; // "last_time_type" - /* 0x3F28 */ s16 unk_3F28; // "magic_flag" - /* 0x3F2A */ s16 unk_3F2A; // "recovery_magic_flag" + /* 0x3F28 */ s16 magicBarAction; // "magic_flag" + /* 0x3F2A */ s16 isMagicRequested; // "recovery_magic_flag" /* 0x3F2C */ s16 unk_3F2C; // "keep_magic_flag" - /* 0x3F2E */ s16 unk_3F2E; // "magic_now_max" - /* 0x3F30 */ s16 unk_3F30; // "magic_now_now" - /* 0x3F32 */ s16 unk_3F32; // "magic_used" - /* 0x3F34 */ s16 unk_3F34; // "magic_recovery" + /* 0x3F2E */ s16 magicCapacityDrawn; // "magic_now_max" + /* 0x3F30 */ s16 magicCapacity; // "magic_now_now" + /* 0x3F32 */ s16 magicToConsume; // "magic_used" + /* 0x3F34 */ s16 magicToAdd; // "magic_recovery" /* 0x3F36 */ u16 mapIndex; // "scene_ID" /* 0x3F38 */ u16 minigameState; // "yabusame_mode" /* 0x3F3A */ u16 minigameScore; // "yabusame_total" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 24bc91a17..56e121b33 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2214,10 +2214,10 @@ s32 func_800B90AC(GlobalContext* globalCtx, Actor* actor, CollisionPoly* polygon return false; } -void func_800B90F4(GlobalContext* globalCtx) { - if (globalCtx->actorCtx.unk3 != 0) { - globalCtx->actorCtx.unk3 = 0; - func_80115D5C(&globalCtx->state); +void Actor_DisableLens(GlobalContext* globalCtx) { + if (globalCtx->actorCtx.lensActive) { + globalCtx->actorCtx.lensActive = false; + Magic_ResetBar(&globalCtx->state); } } @@ -2906,14 +2906,15 @@ void Actor_DrawAll(GlobalContext* globalCtx, ActorContext* actorCtx) { gSPDisplayList(sp58, &ref2[1]); POLY_XLU_DISP = &ref2[1]; - if (globalCtx->actorCtx.unk3 != 0) { + if (globalCtx->actorCtx.lensActive) { Math_StepToC(&globalCtx->actorCtx.unk4, 100, 20); if (GET_PLAYER(globalCtx)->stateFlags2 & 0x8000000) { - func_800B90F4(globalCtx); + Actor_DisableLens(globalCtx); } } else { Math_StepToC(&globalCtx->actorCtx.unk4, 0, 10); } + if (globalCtx->actorCtx.unk4 != 0) { globalCtx->actorCtx.unkB = 1; func_800B9EF4(globalCtx, globalCtx->actorCtx.undrawnActorCount, globalCtx->actorCtx.undrawnActors); diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c index cd2fa96b6..7e2a1933f 100644 --- a/src/code/z_elf_message.c +++ b/src/code/z_elf_message.c @@ -25,7 +25,7 @@ u16 ElfMessage_GetFirstCycleHint(GlobalContext* globalCtx) { } return 0x21D; } - if (gSaveContext.save.playerData.magicAcquired != true) { + if (gSaveContext.save.playerData.isMagicAcquired != true) { return 0x21F; } if (INV_CONTENT(ITEM_DEED_LAND) == ITEM_DEED_LAND) { diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index bc7dcd646..6505355b9 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -73,7 +73,8 @@ void KaleidoSetup_Update(GlobalContext* globalCtx) { if ((globalCtx->sceneLoadFlag == 0) && (globalCtx->unk_18B4A == 0)) { if ((gSaveContext.save.cutscene < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) { if (!Play_InCsMode(globalCtx) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) { - if ((globalCtx->unk_1887C < 2) && (gSaveContext.unk_3F28 != 8) && (gSaveContext.unk_3F28 != 9)) { + if ((globalCtx->unk_1887C < 2) && (gSaveContext.magicBarAction != 8) && + (gSaveContext.magicBarAction != 9)) { if (!(gSaveContext.eventInf[1] & 0x80) && !(player->stateFlags1 & 0x20)) { if (!(globalCtx->actorCtx.unk5 & 2) && !(globalCtx->actorCtx.unk5 & 4)) { if ((globalCtx->actorCtx.unk268 == 0) && diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 9b7b662d5..4d6854ecb 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -149,8 +149,8 @@ u16 sCUpTimer = 0; s16 sMagicBarOutlinePrimRed = 255; s16 sMagicBarOutlinePrimGreen = 255; s16 sMagicBarOutlinePrimBlue = 255; -s16 D_801BF8AC = 2; // sMagicBorderRatio -s16 D_801BF8B0 = 1; +s16 sMagicBorderRatio = 2; +s16 sMagicBorderStep = 1; s16 sExtraItemBases[] = { ITEM_STICK, // ITEM_STICKS_5 @@ -1576,7 +1576,7 @@ void func_80110038(GlobalContext* globalCtx) { gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED; gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED; } - } else if ((gSaveContext.save.playerData.magicAcquired == 0) && (CUR_FORM == PLAYER_FORM_DEKU) && + } else if (!gSaveContext.save.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) && (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NUT)) { BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_UNK_FD; gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED; @@ -2522,7 +2522,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) { return item; } else if (item == ITEM_MAGIC_SMALL) { - Interface_AddMagic(globalCtx, 0x18); + Magic_Add(globalCtx, 0x18); if (!(gSaveContext.save.weekEventReg[12] & 0x80)) { gSaveContext.save.weekEventReg[12] |= 0x80; return ITEM_NONE; @@ -2530,7 +2530,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) { return item; } else if (item == ITEM_MAGIC_LARGE) { - Interface_AddMagic(globalCtx, 0x30); + Magic_Add(globalCtx, 0x30); if (!(gSaveContext.save.weekEventReg[12] & 0x80)) { gSaveContext.save.weekEventReg[12] |= 0x80; return ITEM_NONE; @@ -3010,7 +3010,7 @@ void func_801155B4(GlobalContext* globalCtx, s16 arg1) { (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) <= ITEM_SWORD_GILDED)) || (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NONE) || (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NUT)) { - if ((CUR_FORM == PLAYER_FORM_DEKU) && (gSaveContext.save.playerData.magicAcquired == 0)) { + if ((CUR_FORM == PLAYER_FORM_DEKU) && !gSaveContext.save.playerData.isMagicAcquired) { interfaceCtx->unk_21E = 0xFD; } else { interfaceCtx->unk_21E = arg1; @@ -3157,269 +3157,285 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange) { } } -void Interface_AddMagic(GlobalContext* globalCtx, s16 arg1) { - if (((void)0, gSaveContext.save.playerData.magic) < ((void)0, gSaveContext.unk_3F2E)) { - gSaveContext.unk_3F34 += arg1; - gSaveContext.unk_3F2A = 1; +void Magic_Add(GlobalContext* globalCtx, s16 magicToAdd) { + if (((void)0, gSaveContext.save.playerData.magic) < ((void)0, gSaveContext.magicCapacityDrawn)) { + gSaveContext.magicToAdd += magicToAdd; + gSaveContext.isMagicRequested = true; } } -void func_80115D5C(GameState* gamestate) { - if ((gSaveContext.unk_3F28 != 8) && (gSaveContext.unk_3F28 != 9)) { +void Magic_ResetBar(GameState* gamestate) { + if ((gSaveContext.magicBarAction != MAGIC_BAR_ACTION_GROW_WIDE) && + (gSaveContext.magicBarAction != MAGIC_BAR_ACTION_FILL)) { sMagicBarOutlinePrimRed = sMagicBarOutlinePrimGreen = sMagicBarOutlinePrimBlue = 255; - gSaveContext.unk_3F28 = 0; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_IDLE; } } -s32 func_80115DB4(GlobalContext* globalCtx, s16 arg1, s16 arg2) { - if (gSaveContext.save.playerData.magicAcquired == 0) { - return 0; +s32 Magic_Consume(GlobalContext* globalCtx, s16 magicToConsume, s16 consumeType) { + InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; + + if (!gSaveContext.save.playerData.isMagicAcquired) { + return false; } - if ((gSaveContext.save.playerData.magic - arg1) < 0) { - if (gSaveContext.unk_3F2E != 0) { + if ((gSaveContext.save.playerData.magic - magicToConsume) < 0) { + if (gSaveContext.magicCapacityDrawn != 0) { play_sound(NA_SE_SY_ERROR); } - return 0; + return false; } - switch (arg2) { - case 0: - case 2: - if ((gSaveContext.unk_3F28 == 0) || (gSaveContext.unk_3F28 == 7)) { - if (gSaveContext.unk_3F28 == 7) { - globalCtx->actorCtx.unk3 = 0; + switch (consumeType) { + case MAGIC_BAR_CONSUME_NOW: + case MAGIC_BAR_CONSUME_NOW_ALT: + if ((gSaveContext.magicBarAction == MAGIC_BAR_ACTION_IDLE) || + (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME)) { + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME) { + globalCtx->actorCtx.lensActive = false; } if (gSaveContext.save.weekEventReg[14] & 8) { - arg1 = 0; + magicToConsume = 0; } - gSaveContext.unk_3F32 = arg1; - gSaveContext.unk_3F28 = 1; - return 1; + gSaveContext.magicToConsume = magicToConsume; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_CONSUME_SETUP; + return true; + } else { + play_sound(NA_SE_SY_ERROR); + return false; } - play_sound(NA_SE_SY_ERROR); - return 0; - case 1: - if ((gSaveContext.unk_3F28 == 0) || (gSaveContext.unk_3F28 == 7)) { - if (gSaveContext.unk_3F28 == 7) { - globalCtx->actorCtx.unk3 = 0; + case MAGIC_BAR_CONSUME_WAIT_NO_PREVIEW: + if ((gSaveContext.magicBarAction == MAGIC_BAR_ACTION_IDLE) || + (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME)) { + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME) { + globalCtx->actorCtx.lensActive = false; } if (gSaveContext.save.weekEventReg[14] & 8) { - arg1 = 0; + magicToConsume = 0; } - gSaveContext.unk_3F32 = arg1; - gSaveContext.unk_3F28 = 6; - return 1; + gSaveContext.magicToConsume = magicToConsume; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_BORDER_CHANGE_3; + return true; + } else { + play_sound(NA_SE_SY_ERROR); + return false; } - play_sound(NA_SE_SY_ERROR); - return 0; - case 3: - if (gSaveContext.unk_3F28 == 0) { + case MAGIC_BAR_CONSUME_LENS: + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_IDLE) { if (gSaveContext.save.playerData.magic != 0) { - globalCtx->interfaceCtx.unk_258 = 0x50; - gSaveContext.unk_3F28 = 7; - return 1; + interfaceCtx->unk_258 = 80; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_LENS_CONSUME; + return true; + } else { + return false; } - return 0; + } else if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME) { + return true; + } else { + return false; } - if (gSaveContext.unk_3F28 == 7) { - return 1; - } - return 0; - case 4: - if ((gSaveContext.unk_3F28 == 0) || (gSaveContext.unk_3F28 == 7)) { - if (gSaveContext.unk_3F28 == 7) { - globalCtx->actorCtx.unk3 = 0; + + case MAGIC_BAR_CONSUME_WAIT_PREVIEW: + if ((gSaveContext.magicBarAction == MAGIC_BAR_ACTION_IDLE) || + (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME)) { + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME) { + globalCtx->actorCtx.lensActive = false; } - gSaveContext.unk_3F32 = arg1; - gSaveContext.unk_3F28 = 4; - return 1; + gSaveContext.magicToConsume = magicToConsume; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_BORDER_CHANGE_2; + return true; + } else { + play_sound(NA_SE_SY_ERROR); + return false; } - play_sound(NA_SE_SY_ERROR); - return 0; - case 5: + + case MAGIC_BAR_CONSUME_2: if (gSaveContext.save.playerData.magic != 0) { - globalCtx->interfaceCtx.unk_258 = 0xA; - gSaveContext.unk_3F28 = 0xA; - return 1; + interfaceCtx->unk_258 = 10; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_CONSUME_2; + return true; + } else { + return false; } - return 0; - case 6: - if (gSaveContext.unk_3F28 == 0) { + + case MAGIC_BAR_CONSUME_4: + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_IDLE) { if (gSaveContext.save.playerData.magic != 0) { - globalCtx->interfaceCtx.unk_258 = XREG(41); - gSaveContext.unk_3F28 = 0xC; - return 1; + interfaceCtx->unk_258 = XREG(41); + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_CONSUME_4; + return true; + } else { + return false; } - return 0; } - if (gSaveContext.unk_3F28 == 0xC) { - return 1; + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_CONSUME_4) { + return true; + } else { + return false; } - return 0; - case 7: - if ((gSaveContext.unk_3F28 == 0) || (gSaveContext.unk_3F28 == 7)) { - if (gSaveContext.unk_3F28 == 7) { - globalCtx->actorCtx.unk3 = 0; + + case MAGIC_BAR_CONSUME_UNK: + if ((gSaveContext.magicBarAction == MAGIC_BAR_ACTION_IDLE) || + (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME)) { + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_LENS_CONSUME) { + globalCtx->actorCtx.lensActive = false; } if (gSaveContext.save.weekEventReg[14] & 8) { - arg1 = 0; + magicToConsume = 0; } - gSaveContext.save.playerData.magic -= arg1; - return 1; + gSaveContext.save.playerData.magic -= magicToConsume; + return true; + } else { + play_sound(NA_SE_SY_ERROR); + return false; } - play_sound(NA_SE_SY_ERROR); - return 0; + default: - return 0; + return false; } } -void func_80116088(void) { - if (gSaveContext.unk_3F2A != 0) { +void Magic_UpdateAdd(void) { + if (gSaveContext.isMagicRequested) { gSaveContext.save.playerData.magic += 4; play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG); - if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.unk_3F2E)) { - gSaveContext.save.playerData.magic = gSaveContext.unk_3F2E; - gSaveContext.unk_3F34 = 0; - gSaveContext.unk_3F2A = 0; + if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.magicCapacityDrawn)) { + gSaveContext.save.playerData.magic = gSaveContext.magicCapacityDrawn; + gSaveContext.magicToAdd = 0; + gSaveContext.isMagicRequested = false; } else { - gSaveContext.unk_3F34 -= 4; - if (gSaveContext.unk_3F34 <= 0) { - gSaveContext.unk_3F34 = 0; - gSaveContext.unk_3F2A = 0; + gSaveContext.magicToAdd -= 4; + if (gSaveContext.magicToAdd <= 0) { + gSaveContext.magicToAdd = 0; + gSaveContext.isMagicRequested = false; } } } } -// Part of Interface_UpdateMagicBar in OoT, but that function was broken into parts -void func_80116114(void) { - static s16 magicBorderColors[][3] = { +void Magic_UpdateBarBorderColor(void) { + static s16 sMagicBorderColors[][3] = { { 255, 255, 255 }, { 150, 150, 150 }, }; - static s16 magicBorderIndices[] = { 0, 1, 1, 0 }; - static s16 magicBorderColorTimerIndex[] = { 2, 1, 2, 1 }; - s16 colorStep1; - s16 colorStep2; - s16 colorStep3; - s16 index; + static s16 sMagicBorderIndices[] = { 0, 1, 1, 0 }; + static s16 sMagicBorderColorTimerIndex[] = { 2, 1, 2, 1 }; + s16 borderChangeR; + s16 borderChangeG; + s16 borderChangeB; + s16 index = sMagicBorderIndices[sMagicBorderStep]; - index = magicBorderIndices[D_801BF8B0]; - colorStep1 = ABS_ALT(sMagicBarOutlinePrimRed - magicBorderColors[index][0]) / D_801BF8AC; - colorStep2 = ABS_ALT(sMagicBarOutlinePrimGreen - magicBorderColors[index][1]) / D_801BF8AC; - colorStep3 = ABS_ALT(sMagicBarOutlinePrimBlue - magicBorderColors[index][2]) / D_801BF8AC; + borderChangeR = ABS_ALT(sMagicBarOutlinePrimRed - sMagicBorderColors[index][0]) / sMagicBorderRatio; + borderChangeG = ABS_ALT(sMagicBarOutlinePrimGreen - sMagicBorderColors[index][1]) / sMagicBorderRatio; + borderChangeB = ABS_ALT(sMagicBarOutlinePrimBlue - sMagicBorderColors[index][2]) / sMagicBorderRatio; - if (sMagicBarOutlinePrimRed >= magicBorderColors[index][0]) { - sMagicBarOutlinePrimRed -= colorStep1; + if (sMagicBarOutlinePrimRed >= sMagicBorderColors[index][0]) { + sMagicBarOutlinePrimRed -= borderChangeR; } else { - sMagicBarOutlinePrimRed += colorStep1; + sMagicBarOutlinePrimRed += borderChangeR; } - if (sMagicBarOutlinePrimGreen >= magicBorderColors[index][1]) { - sMagicBarOutlinePrimGreen -= colorStep2; + if (sMagicBarOutlinePrimGreen >= sMagicBorderColors[index][1]) { + sMagicBarOutlinePrimGreen -= borderChangeG; } else { - sMagicBarOutlinePrimGreen += colorStep2; + sMagicBarOutlinePrimGreen += borderChangeG; } - if (sMagicBarOutlinePrimBlue >= magicBorderColors[index][2]) { - sMagicBarOutlinePrimBlue -= colorStep3; + if (sMagicBarOutlinePrimBlue >= sMagicBorderColors[index][2]) { + sMagicBarOutlinePrimBlue -= borderChangeB; } else { - sMagicBarOutlinePrimBlue += colorStep3; + sMagicBarOutlinePrimBlue += borderChangeB; } - D_801BF8AC--; + sMagicBorderRatio--; - if (D_801BF8AC == 0) { - sMagicBarOutlinePrimRed = magicBorderColors[index][0]; - sMagicBarOutlinePrimGreen = magicBorderColors[index][1]; - sMagicBarOutlinePrimBlue = magicBorderColors[index][2]; - D_801BF8AC = magicBorderColorTimerIndex[D_801BF8B0]; - D_801BF8B0++; - if (D_801BF8B0 >= 4) { - D_801BF8B0 = 0; + if (sMagicBorderRatio == 0) { + sMagicBarOutlinePrimRed = sMagicBorderColors[index][0]; + sMagicBarOutlinePrimGreen = sMagicBorderColors[index][1]; + sMagicBarOutlinePrimBlue = sMagicBorderColors[index][2]; + sMagicBorderRatio = sMagicBorderColorTimerIndex[sMagicBorderStep]; + sMagicBorderStep++; + if (sMagicBorderStep >= 4) { + sMagicBorderStep = 0; } } } -void Interface_UpdateMagicBar(GlobalContext* globalCtx) { +void Magic_UpdateBar(GlobalContext* globalCtx) { MessageContext* msgCtx = &globalCtx->msgCtx; InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; s16 temp; if (gSaveContext.save.weekEventReg[14] & 8) { - func_80116114(); + Magic_UpdateBarBorderColor(); } - switch (gSaveContext.unk_3F28) { - case 8: - temp = gSaveContext.save.playerData.magicLevel * 0x30; - if (gSaveContext.unk_3F2E != temp) { - if (gSaveContext.unk_3F2E < temp) { - gSaveContext.unk_3F2E += 0x10; - if (gSaveContext.unk_3F2E > temp) { - gSaveContext.unk_3F2E = temp; + switch (gSaveContext.magicBarAction) { + case MAGIC_BAR_ACTION_GROW_WIDE: + temp = gSaveContext.save.playerData.magicLevel * MAGIC_HALF_BAR; // magicCapacity + if (gSaveContext.magicCapacityDrawn != temp) { + if (gSaveContext.magicCapacityDrawn < temp) { + gSaveContext.magicCapacityDrawn += 0x10; + if (gSaveContext.magicCapacityDrawn > temp) { + gSaveContext.magicCapacityDrawn = temp; } } else { - gSaveContext.unk_3F2E -= 0x10; - if (gSaveContext.unk_3F2E <= temp) { - gSaveContext.unk_3F2E = temp; + gSaveContext.magicCapacityDrawn -= 0x10; + if (gSaveContext.magicCapacityDrawn <= temp) { + gSaveContext.magicCapacityDrawn = temp; } } } else { - gSaveContext.unk_3F28 = 9; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_FILL; } break; - case 9: + case MAGIC_BAR_ACTION_FILL: gSaveContext.save.playerData.magic += 0x10; if ((gSaveContext.gameMode == 0) && (gSaveContext.sceneSetupIndex < 4)) { play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG); } - if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.unk_3F30)) { - gSaveContext.save.playerData.magic = gSaveContext.unk_3F30; - gSaveContext.unk_3F28 = 0; + if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.magicCapacity)) { + gSaveContext.save.playerData.magic = gSaveContext.magicCapacity; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_IDLE; } break; - case 1: - D_801BF8AC = 2; - gSaveContext.unk_3F28 = 2; + case MAGIC_BAR_ACTION_CONSUME_SETUP: + sMagicBorderRatio = 2; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_CONSUME; break; - case 2: + case MAGIC_BAR_ACTION_CONSUME: if (!(gSaveContext.save.weekEventReg[14] & 8)) { gSaveContext.save.playerData.magic = - ((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.unk_3F32); + ((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume); if (gSaveContext.save.playerData.magic <= 0) { gSaveContext.save.playerData.magic = 0; } - gSaveContext.unk_3F28 = 3; - sMagicBarOutlinePrimBlue = 255; - sMagicBarOutlinePrimGreen = sMagicBarOutlinePrimBlue; - sMagicBarOutlinePrimRed = sMagicBarOutlinePrimGreen; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_BORDER_CHANGE_1; + sMagicBarOutlinePrimRed = sMagicBarOutlinePrimGreen = sMagicBarOutlinePrimBlue = 255; } // fallthrough - case 3: - case 4: - case 6: + case MAGIC_BAR_ACTION_BORDER_CHANGE_1: + case MAGIC_BAR_ACTION_BORDER_CHANGE_2: + case MAGIC_BAR_ACTION_BORDER_CHANGE_3: if (!(gSaveContext.save.weekEventReg[14] & 8)) { - func_80116114(); + Magic_UpdateBarBorderColor(); } break; - case 5: + case MAGIC_BAR_ACTION_RESTORE_IDLE: sMagicBarOutlinePrimRed = sMagicBarOutlinePrimGreen = sMagicBarOutlinePrimBlue = 255; - gSaveContext.unk_3F28 = 0; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_IDLE; break; - case 7: + case MAGIC_BAR_ACTION_LENS_CONSUME: if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) && (msgCtx->msgMode == 0) && (globalCtx->gameOverCtx.state == 0) && (globalCtx->sceneLoadFlag == 0) && (globalCtx->unk_18B4A == 0)) { if (!Play_InCsMode(globalCtx)) { @@ -3428,10 +3444,10 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS) && (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS) && (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS)) || - (globalCtx->actorCtx.unk3 == 0)) { - globalCtx->actorCtx.unk3 = false; + !globalCtx->actorCtx.lensActive) { + globalCtx->actorCtx.lensActive = false; play_sound(NA_SE_SY_GLASSMODE_OFF); - gSaveContext.unk_3F28 = 0; + gSaveContext.magicBarAction = 0; sMagicBarOutlinePrimRed = sMagicBarOutlinePrimGreen = sMagicBarOutlinePrimBlue = 255; break; } @@ -3446,7 +3462,7 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { } } if (!(gSaveContext.save.weekEventReg[14] & 8)) { - func_80116114(); + Magic_UpdateBarBorderColor(); } break; @@ -3457,10 +3473,10 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { if (gSaveContext.save.playerData.magic <= 0) { gSaveContext.save.playerData.magic = 0; } - gSaveContext.unk_3F28 = 11; + gSaveContext.magicBarAction = 11; // fallthrough - case 11: + case MAGIC_BAR_ACTION_CONSUME_3: if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) && (msgCtx->msgMode == 0) && (globalCtx->gameOverCtx.state == 0) && (globalCtx->sceneLoadFlag == 0) && (globalCtx->unk_18B4A == 0)) { if (!Play_InCsMode(globalCtx)) { @@ -3477,11 +3493,11 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { } } if (!(gSaveContext.save.weekEventReg[14] & 8)) { - func_80116114(); + Magic_UpdateBarBorderColor(); } break; - case 12: + case MAGIC_BAR_ACTION_CONSUME_4: if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) && (msgCtx->msgMode == 0) && (globalCtx->gameOverCtx.state == 0) && (globalCtx->sceneLoadFlag == 0) && (globalCtx->unk_18B4A == 0)) { if (!Play_InCsMode(globalCtx)) { @@ -3498,17 +3514,17 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { } } if (!(gSaveContext.save.weekEventReg[14] & 8)) { - func_80116114(); + Magic_UpdateBarBorderColor(); } break; default: - gSaveContext.unk_3F28 = 0; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_IDLE; break; } } -void Interface_DrawMagicBar(GlobalContext* globalCtx) { +void Magic_DrawBar(GlobalContext* globalCtx) { InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; s16 magicBarY; @@ -3528,12 +3544,13 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { OVERLAY_DISP = func_8010CFBC(OVERLAY_DISP, gMagicBarEndTex, 8, 16, 18, magicBarY, 8, 16, 1 << 10, 1 << 10, sMagicBarOutlinePrimRed, sMagicBarOutlinePrimGreen, sMagicBarOutlinePrimBlue, interfaceCtx->magicAlpha); - OVERLAY_DISP = func_8010CFBC(OVERLAY_DISP, gMagicBarMidTex, 24, 16, 26, magicBarY, - ((void)0, gSaveContext.unk_3F2E), 16, 1 << 10, 1 << 10, sMagicBarOutlinePrimRed, - sMagicBarOutlinePrimGreen, sMagicBarOutlinePrimBlue, interfaceCtx->magicAlpha); OVERLAY_DISP = - func_8010D480(OVERLAY_DISP, gMagicBarEndTex, 8, 16, ((void)0, gSaveContext.unk_3F2E) + 26, magicBarY, 8, 16, - 1 << 10, 1 << 10, sMagicBarOutlinePrimRed, sMagicBarOutlinePrimGreen, + func_8010CFBC(OVERLAY_DISP, gMagicBarMidTex, 24, 16, 26, magicBarY, + ((void)0, gSaveContext.magicCapacityDrawn), 16, 1 << 10, 1 << 10, sMagicBarOutlinePrimRed, + sMagicBarOutlinePrimGreen, sMagicBarOutlinePrimBlue, interfaceCtx->magicAlpha); + OVERLAY_DISP = + func_8010D480(OVERLAY_DISP, gMagicBarEndTex, 8, 16, ((void)0, gSaveContext.magicCapacityDrawn) + 26, + magicBarY, 8, 16, 1 << 10, 1 << 10, sMagicBarOutlinePrimRed, sMagicBarOutlinePrimGreen, sMagicBarOutlinePrimBlue, interfaceCtx->magicAlpha, 3, 0x100); gDPPipeSync(OVERLAY_DISP++); @@ -3541,7 +3558,7 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); - if (gSaveContext.unk_3F28 == 4) { + if (gSaveContext.magicBarAction == MAGIC_BAR_ACTION_BORDER_CHANGE_2) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 250, 250, 0, interfaceCtx->magicAlpha); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gMagicBarFillTex, G_IM_FMT_I, 16, 16, 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); @@ -3559,7 +3576,7 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { gSPTextureRectangle( OVERLAY_DISP++, 104, (magicBarY + 3) << 2, - ((((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.unk_3F32)) + 26) << 2, + ((((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume)) + 26) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } else { if (gSaveContext.save.weekEventReg[14] & 8) { @@ -6003,7 +6020,7 @@ void Interface_Draw(GlobalContext* globalCtx) { 1 << 10); } - Interface_DrawMagicBar(globalCtx); + Magic_DrawBar(globalCtx); func_8010A54C(globalCtx); if ((SREG(94) != 2) && (SREG(94) != 3)) { @@ -6491,35 +6508,35 @@ void Interface_Update(GlobalContext* globalCtx) { // Update Magic if (!(player->stateFlags1 & 0x200)) { if (XREG(4) == 1) { - if (gSaveContext.save.playerData.magicAcquired == 0) { - gSaveContext.save.playerData.magicAcquired = 1; + if (!gSaveContext.save.playerData.isMagicAcquired) { + gSaveContext.save.playerData.isMagicAcquired = 1; } - gSaveContext.save.playerData.doubleMagic = 1; - gSaveContext.save.playerData.magic = 0x60; + gSaveContext.save.playerData.isDoubleMagicAcquired = true; + gSaveContext.save.playerData.magic = MAGIC_FULL_BAR; gSaveContext.save.playerData.magicLevel = 0; XREG(4) = 0; } else if (XREG(4) == -1) { - if (gSaveContext.save.playerData.magicAcquired == 0) { - gSaveContext.save.playerData.magicAcquired = 1; + if (!gSaveContext.save.playerData.isMagicAcquired) { + gSaveContext.save.playerData.isMagicAcquired = true; } - gSaveContext.save.playerData.doubleMagic = 0; - gSaveContext.save.playerData.magic = 0x30; + gSaveContext.save.playerData.isDoubleMagicAcquired = false; + gSaveContext.save.playerData.magic = MAGIC_HALF_BAR; gSaveContext.save.playerData.magicLevel = 0; XREG(4) = 0; } - if (gSaveContext.save.playerData.magicAcquired != 0) { + if (gSaveContext.save.playerData.isMagicAcquired) { if (gSaveContext.save.playerData.magicLevel == 0) { - gSaveContext.save.playerData.magicLevel = gSaveContext.save.playerData.doubleMagic + 1; - gSaveContext.unk_3F30 = gSaveContext.save.playerData.magic; + gSaveContext.save.playerData.magicLevel = gSaveContext.save.playerData.isDoubleMagicAcquired + 1; + gSaveContext.magicCapacity = gSaveContext.save.playerData.magic; gSaveContext.save.playerData.magic = 0; - gSaveContext.unk_3F28 = 8; + gSaveContext.magicBarAction = MAGIC_BAR_ACTION_GROW_WIDE; BUTTON_ITEM_EQUIP(PLAYER_FORM_DEKU, EQUIP_SLOT_B) = ITEM_NUT; } } - Interface_UpdateMagicBar(globalCtx); - func_80116088(); + Magic_UpdateBar(globalCtx); + Magic_UpdateAdd(); } if (gSaveContext.unk_3DD0[5] == 0) { @@ -6670,7 +6687,7 @@ void Interface_Init(GlobalContext* globalCtx) { View_Init(&interfaceCtx->view, globalCtx->state.gfxCtx); - interfaceCtx->unk_258 = 0x10; + interfaceCtx->unk_258 = 16; interfaceCtx->unkTimer = 200; parameterStaticSize = SEGMENT_ROM_SIZE(parameter_static); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 05078382b..8ba19a473 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -576,12 +576,12 @@ SavePlayerData sSaveDefaultPlayerData = { 0x30, // healthCapacity 0x30, // health 0, // magicLevel - 0x30, // magic + MAGIC_HALF_BAR, // magic 0, // rupees 0, // swordHealth 0, // tatlTimer - 0, // magicAcquired - 0, // doubleMagic + false, // isMagicAcquired + false, // isDoubleMagicAcquired 0, // doubleDefense 0, // unk_1F 0xFF, // unk_20 @@ -674,12 +674,12 @@ SavePlayerData sSaveDebugPlayerData = { 0x80, // healthCapacity 0x80, // health 0, // magicLevel - 0x30, // magic - 0x32, // rupees - 0x64, // swordHealth + MAGIC_HALF_BAR, // magic + 50, // rupees + 100, // swordHealth 0, // tatlTimer - 1, // magicAcquired - 0, // doubleMagic + true, // isMagicAcquired + false, // isDoubleMagicAcquired 0, // doubleDefense 0, // unk_1F 0xFF, // unk_20 diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index 0b9bedbb8..18c26d62f 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -81,7 +81,7 @@ void ArrowFire_Init(Actor* thisx, GlobalContext* globalCtx) { void ArrowFire_Destroy(Actor* thisx, GlobalContext* globalCtx) { ArrowFire* this = THIS; - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); Collider_DestroyQuad(globalCtx, &this->collider1); Collider_DestroyQuad(globalCtx, &this->collider2); } diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c index 8a402dfbe..f2a1a6712 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -57,7 +57,7 @@ void ArrowIce_Init(Actor* thisx, GlobalContext* globalCtx) { } void ArrowIce_Destroy(Actor* thisx, GlobalContext* globalCtx) { - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); (void)"消滅"; // Unreferenced in retail, means "Disappearance" } diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c index ac8eb1ae9..0c1689837 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -56,7 +56,7 @@ void ArrowLight_Init(Actor* thisx, GlobalContext* globalCtx) { } void ArrowLight_Destroy(Actor* thisx, GlobalContext* globalCtx) { - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); (void)"消滅"; // Unreferenced in retail, means "Disappearance" } diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index f1dc5c6f6..6547673a1 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -139,7 +139,7 @@ void EnArrow_Destroy(Actor* thisx, GlobalContext* globalCtx) { } if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6) && (this->actor.child == NULL)) { - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); } } @@ -162,13 +162,13 @@ void func_8088A594(EnArrow* this, GlobalContext* globalCtx) { this->bubble.unk_148++; if (this->bubble.unk_148 > 20) { this->actionFunc = func_8088ACE0; - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); } } } else { if ((this->actor.params != ENARROW_8) && (player->unk_D57 == 0)) { if (this->actor.params == ENARROW_7) { - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); } Actor_MarkForDeath(&this->actor); return; @@ -202,7 +202,7 @@ void func_8088A594(EnArrow* this, GlobalContext* globalCtx) { this->bubble.unk_144 = CLAMP_MIN(this->bubble.unk_144, 3.5f); func_8088A514(this); this->unk_260 = 99; - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); } else if (this->actor.params >= ENARROW_6) { if ((this->actor.params == ENARROW_8) && (this->actor.world.rot.x < 0)) { Actor_SetScale(&this->actor, 0.009f); @@ -311,7 +311,7 @@ void func_8088AA98(EnArrow* this, GlobalContext* globalCtx) { return; } - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); } } } diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index fcaf6063d..5903ce55d 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -675,8 +675,8 @@ void func_8088DD34(EnElf* this, GlobalContext* globalCtx) { !func_8088C804(&this->actor.world.pos, &refActor->actor.world.pos, 10.0f)) { Health_ChangeBy(globalCtx, 0x80); if (this->fairyFlags & 0x200) { - Interface_AddMagic(globalCtx, ((void)0, gSaveContext.unk_3F30) + - (gSaveContext.save.playerData.doubleMagic * 0x30) + 0x30); + Magic_Add(globalCtx, ((void)0, gSaveContext.magicCapacity) + + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_HALF_BAR); } gSaveContext.jinxTimer = 0; this->unk_254 = 50.0f; diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c index 605edd6d4..410ab1222 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -99,7 +99,7 @@ void EnElfgrp_Init(Actor* thisx, GlobalContext* globalCtx) { break; case ENELFGRP_2: - if (gSaveContext.save.playerData.doubleMagic == true) { + if (gSaveContext.save.playerData.isDoubleMagicAcquired == true) { func_80A396B0(this, 1); } break; @@ -156,7 +156,7 @@ void EnElfgrp_Init(Actor* thisx, GlobalContext* globalCtx) { func_80A396B0(this, 3); this->unk_14A |= 2; } - } else if (gSaveContext.save.playerData.magicAcquired == true) { + } else if (gSaveContext.save.playerData.isMagicAcquired == true) { func_80A396B0(this, 1); } } else { @@ -481,8 +481,8 @@ void func_80A3A610(EnElfgrp* this, GlobalContext* globalCtx) { Player* player = GET_PLAYER(globalCtx); if (this->unk_144 == 60) { - Interface_AddMagic(globalCtx, - ((void)0, gSaveContext.unk_3F30) + (gSaveContext.save.playerData.doubleMagic * 0x30) + 0x30); + Magic_Add(globalCtx, ((void)0, gSaveContext.magicCapacity) + + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_HALF_BAR); gSaveContext.healthAccumulator = 320; } diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 6100e5ea8..96022e0ac 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -651,10 +651,9 @@ void func_80962A10(EnFu* this, GlobalContext* globalCtx) { this->unk_546 = 1; } - if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.playerData.magicAcquired) { - s16 temp = gSaveContext.unk_3F30; - - Interface_AddMagic(globalCtx, temp + (gSaveContext.save.playerData.doubleMagic * 48) + 48); + if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.playerData.isMagicAcquired) { + Magic_Add(globalCtx, ((void)0, gSaveContext.magicCapacity) + + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_HALF_BAR); } func_80962F10(this); @@ -1139,7 +1138,7 @@ void func_80963DE4(EnFu* this, GlobalContext* globalCtx) { } void func_80963EAC(EnFu* this, GlobalContext* globalCtx) { - if (gSaveContext.save.playerData.magicAcquired) { + if (gSaveContext.save.playerData.isMagicAcquired) { if (this->unk_540 == 1) { Message_StartTextbox(globalCtx, 0x2847, &this->actor); this->unk_552 = 0x2847; diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c index 3d80cc847..cb660bf02 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -231,7 +231,7 @@ void func_80B35450(EnGg* this, GlobalContext* globalCtx) { if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) { if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) { - func_800B90F4(globalCtx); + Actor_DisableLens(globalCtx); } this->unk_308 = 1; this->actionFunc = func_80B352A4; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 22c34cf72..60bf9aa60 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -727,8 +727,8 @@ void func_80B51B40(EnGk* this, GlobalContext* globalCtx) { globalCtx->sceneLoadFlag = 0x14; globalCtx->unk_1887F = 3; gSaveContext.nextTransition = 3; - Interface_AddMagic(globalCtx, ((void)0, gSaveContext.unk_3F30) + - (gSaveContext.save.playerData.doubleMagic * 0x30) + 0x30); + Magic_Add(globalCtx, ((void)0, gSaveContext.magicCapacity) + + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_HALF_BAR); } else { this->actionFunc = func_80B51760; } diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c index 8dfdeaeb8..31ff3015d 100644 --- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c +++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c @@ -433,8 +433,8 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, GlobalContext* globalCtx) { gSaveContext.nextTransition = 2; func_801477B4(globalCtx); func_800B7298(globalCtx, &this->actor, 7); - Interface_AddMagic(globalCtx, - ((void)0, gSaveContext.unk_3F30) + (gSaveContext.save.playerData.doubleMagic * 48) + 48); + Magic_Add(globalCtx, ((void)0, gSaveContext.magicCapacity) + + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_HALF_BAR); gSaveContext.eventInf[1] &= (u8)~1; gSaveContext.eventInf[1] &= (u8)~2; diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c index a16821f00..1944ba739 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c +++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c @@ -38,7 +38,7 @@ void OceffWipe6_Init(Actor* thisx, GlobalContext* globalCtx) { } void OceffWipe6_Destroy(Actor* thisx, GlobalContext* globalCtx) { - func_80115D5C(&globalCtx->state); + Magic_ResetBar(&globalCtx->state); globalCtx->msgCtx.unk120B0 = 0; } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index e3e4d6f1b..7d2b4a438 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -811,7 +811,7 @@ 0x800B9084:("func_800B9084",), 0x800B9098:("func_800B9098",), 0x800B90AC:("func_800B90AC",), - 0x800B90F4:("func_800B90F4",), + 0x800B90F4:("Actor_DisableLens",), 0x800B9120:("func_800B9120",), 0x800B9170:("Actor_InitContext",), 0x800B9334:("Actor_SpawnSetupActors",), @@ -2134,13 +2134,13 @@ 0x801159C0:("Health_GiveHearts",), 0x801159EC:("Rupees_ChangeBy",), 0x80115A14:("Inventory_ChangeAmmo",), - 0x80115D14:("Interface_AddMagic",), - 0x80115D5C:("func_80115D5C",), - 0x80115DB4:("func_80115DB4",), - 0x80116088:("func_80116088",), - 0x80116114:("func_80116114",), - 0x80116348:("Interface_UpdateMagicBar",), - 0x80116918:("Interface_DrawMagicBar",), + 0x80115D14:("Magic_Add",), + 0x80115D5C:("Magic_ResetBar",), + 0x80115DB4:("Magic_Consume",), + 0x80116088:("Magic_UpdateAdd",), + 0x80116114:("Magic_UpdateBarBorderColor",), + 0x80116348:("Magic_UpdateBar",), + 0x80116918:("Magic_DrawBar",), 0x80116FD8:("func_80116FD8",), 0x801170B8:("func_801170B8",), 0x80117100:("Interface_DrawItemButtons",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 02fc3e1ab..ad68be167 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1072,8 +1072,8 @@ 0x801BF8A0:("sMagicBarOutlinePrimRed","UNK_TYPE2","",0x2), 0x801BF8A4:("sMagicBarOutlinePrimGreen","UNK_TYPE2","",0x2), 0x801BF8A8:("sMagicBarOutlinePrimBlue","UNK_TYPE2","",0x2), - 0x801BF8AC:("D_801BF8AC","UNK_TYPE2","",0x2), - 0x801BF8B0:("D_801BF8B0","UNK_TYPE2","",0x2), + 0x801BF8AC:("sMagicBorderRatio","UNK_TYPE2","",0x2), + 0x801BF8B0:("sMagicBorderStep","UNK_TYPE2","",0x2), 0x801BF8DC:("D_801BF8DC","UNK_TYPE2","",0x2), 0x801BF8E0:("D_801BF8E0","UNK_TYPE2","",0x2), 0x801BF8E4:("D_801BF8E4","UNK_TYPE2","",0x2), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index f58eee8ff..f22dd6cf4 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -325,7 +325,7 @@ asm/non_matchings/code/z_actor/func_800B9038.s,func_800B9038,0x800B9038,0x13 asm/non_matchings/code/z_actor/func_800B9084.s,func_800B9084,0x800B9084,0x5 asm/non_matchings/code/z_actor/func_800B9098.s,func_800B9098,0x800B9098,0x5 asm/non_matchings/code/z_actor/func_800B90AC.s,func_800B90AC,0x800B90AC,0x12 -asm/non_matchings/code/z_actor/func_800B90F4.s,func_800B90F4,0x800B90F4,0xB +asm/non_matchings/code/z_actor/Actor_DisableLens.s,Actor_DisableLens,0x800B90F4,0xB asm/non_matchings/code/z_actor/func_800B9120.s,func_800B9120,0x800B9120,0x14 asm/non_matchings/code/z_actor/Actor_InitContext.s,Actor_InitContext,0x800B9170,0x71 asm/non_matchings/code/z_actor/Actor_SpawnSetupActors.s,Actor_SpawnSetupActors,0x800B9334,0x56 @@ -1648,13 +1648,13 @@ asm/non_matchings/code/z_parameter/Health_ChangeBy.s,Health_ChangeBy,0x80115908, asm/non_matchings/code/z_parameter/Health_GiveHearts.s,Health_GiveHearts,0x801159C0,0xB asm/non_matchings/code/z_parameter/Rupees_ChangeBy.s,Rupees_ChangeBy,0x801159EC,0xA asm/non_matchings/code/z_parameter/Inventory_ChangeAmmo.s,Inventory_ChangeAmmo,0x80115A14,0xC0 -asm/non_matchings/code/z_parameter/Interface_AddMagic.s,Interface_AddMagic,0x80115D14,0x12 -asm/non_matchings/code/z_parameter/func_80115D5C.s,func_80115D5C,0x80115D5C,0x16 -asm/non_matchings/code/z_parameter/func_80115DB4.s,func_80115DB4,0x80115DB4,0xB5 -asm/non_matchings/code/z_parameter/func_80116088.s,func_80116088,0x80116088,0x23 -asm/non_matchings/code/z_parameter/func_80116114.s,func_80116114,0x80116114,0x8D -asm/non_matchings/code/z_parameter/Interface_UpdateMagicBar.s,Interface_UpdateMagicBar,0x80116348,0x174 -asm/non_matchings/code/z_parameter/Interface_DrawMagicBar.s,Interface_DrawMagicBar,0x80116918,0x1B0 +asm/non_matchings/code/z_parameter/Magic_Add.s,Magic_Add,0x80115D14,0x12 +asm/non_matchings/code/z_parameter/Magic_ResetBar.s,Magic_ResetBar,0x80115D5C,0x16 +asm/non_matchings/code/z_parameter/Magic_Consume.s,Magic_Consume,0x80115DB4,0xB5 +asm/non_matchings/code/z_parameter/Magic_UpdateAdd.s,Magic_UpdateAdd,0x80116088,0x23 +asm/non_matchings/code/z_parameter/Magic_UpdateBarBorderColor.s,Magic_UpdateBarBorderColor,0x80116114,0x8D +asm/non_matchings/code/z_parameter/Magic_UpdateBar.s,Magic_UpdateBar,0x80116348,0x174 +asm/non_matchings/code/z_parameter/Magic_DrawBar.s,Magic_DrawBar,0x80116918,0x1B0 asm/non_matchings/code/z_parameter/func_80116FD8.s,func_80116FD8,0x80116FD8,0x38 asm/non_matchings/code/z_parameter/func_801170B8.s,func_801170B8,0x801170B8,0x12 asm/non_matchings/code/z_parameter/Interface_DrawItemButtons.s,Interface_DrawItemButtons,0x80117100,0x248