`z_parameter`: Magic (#934)

* Document magic

* Cleanup

* Few fixes

* PR Suggestions, More Lens Docs

* Few comments

* missed a spot

* Better macros/names

* Deactivate Lens

* more PR suggestions

* fix names
This commit is contained in:
engineer124 2022-09-14 12:49:17 -04:00 committed by GitHub
parent 85e141128b
commit 6451bcf158
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 699 additions and 203 deletions

View File

@ -75,9 +75,9 @@
<Texture Name="gAmmoDigit9Tex" OutName="ammo_digit_9" Format="ia8" Width="8" Height="8" Offset="0x4CE0"/>
<Texture Name="gAmmoDigitHalfTex" OutName="ammo_digit_half" Format="ia8" Width="16" Height="8" Offset="0x4D20"/>
<Texture Name="gMagicBarEndTex" OutName="magic_bar_end" Format="ia8" Width="8" Height="16" Offset="0x4DA0"/>
<Texture Name="gMagicBarMidTex" OutName="magic_bar_mid" Format="ia8" Width="24" Height="16" Offset="0x4E20"/>
<Texture Name="gMagicBarFillTex" OutName="magic_bar_fill" Format="ia8" Width="8" Height="8" Offset="0x4FA0"/>
<Texture Name="gMagicMeterEndTex" OutName="magic_meter_end" Format="ia8" Width="8" Height="16" Offset="0x4DA0"/>
<Texture Name="gMagicMeterMidTex" OutName="magic_meter_mid" Format="ia8" Width="24" Height="16" Offset="0x4E20"/>
<Texture Name="gMagicMeterFillTex" OutName="magic_meter_fill" Format="ia8" Width="8" Height="8" Offset="0x4FA0"/>
<!-- The analog clock from day one until midnight of the final day -->
<Texture Name="gThreeDayClockDiamondTex" OutName="three_day_clock_diamond" Format="ia8" Width="40" Height="32" Offset="0x4FE0"/>

View File

@ -718,7 +718,7 @@ void func_800B9038(Actor* actor, s32 timer);
void func_800B9084(Actor* actor);
void func_800B9098(Actor* actor);
s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 index, s32 arg4);
void func_800B90F4(PlayState* play);
void Actor_DeactivateLens(PlayState* play);
void func_800B9120(ActorContext* actorCtx);
void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEntry);
void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx);
@ -1855,13 +1855,9 @@ s32 Health_ChangeBy(PlayState* play, s16 healthChange);
void Health_GiveHearts(s16 hearts);
void Rupees_ChangeBy(s16 rupeeChange);
void Inventory_ChangeAmmo(s16 item, s16 ammoChange);
void Parameter_AddMagic(PlayState* play, s16 arg1);
void func_80115D5C(GameState* gamestate);
// void func_80115DB4(void);
// void func_80116088(void);
// void func_80116114(void);
// void func_80116348(void);
// void func_80116918(void);
void Magic_Add(PlayState* play, s16 magicToAdd);
void Magic_Reset(PlayState* play);
s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type);
// 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 func_80117100(void);

View File

@ -45,6 +45,9 @@
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
// To be used with `Magic_Add`, but ensures enough magic is added to fill the magic bar to capacity
#define MAGIC_FILL_TO_CAPACITY (((void)0, gSaveContext.magicFillTarget) + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER)
#define CONTROLLER1(gameState) (&(gameState)->input[0])
#define CONTROLLER2(gameState) (&(gameState)->input[1])
#define CONTROLLER3(gameState) (&(gameState)->input[2])

View File

@ -43,61 +43,58 @@
#define bREG(r) BASE_REG(28, r)
/* TODO: Actually confirm these, in case of miss-match it's at least a simple list to `sed` */
#define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT
#define R_RUN_SPEED_LIMIT REG(45)
#define R_UPDATE_RATE SREG(30)
#define R_PAUSE_MENU_MODE SREG(94)
#define R_C_UP_ICON_X YREG(88)
#define R_C_UP_ICON_Y YREG(89)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + i)
#define R_C_BTN_COLOR(i) ZREG(39 + i)
#define R_B_BTN_COLOR(i) ZREG(43 + i)
#define R_START_LABEL_DD(i) ZREG(48 + i)
#define R_START_LABEL_Y(i) ZREG(51 + i)
#define R_START_LABEL_X(i) ZREG(54 + i)
#define R_C_UP_BTN_X ZREG(62)
#define R_C_UP_BTN_Y ZREG(63)
#define R_START_BTN_X ZREG(68)
#define R_START_BTN_Y ZREG(69)
#define R_ITEM_BTN_X(i) ZREG(70 + i)
#define R_ITEM_BTN_Y(i) ZREG(74 + i)
#define R_ITEM_BTN_DD(i) ZREG(78 + i)
#define R_ITEM_ICON_X(i) ZREG(82 + i)
#define R_ITEM_ICON_Y(i) ZREG(86 + i)
#define R_ITEM_ICON_DD(i) ZREG(90 + i)
#define R_A_BTN_Y XREG(16)
#define R_A_BTN_X XREG(17)
#define R_A_ICON_Y XREG(19)
#define R_A_ICON_X XREG(20)
#define R_A_BTN_COLOR(i) XREG(22 + i)
#define R_MAGIC_BAR_SMALL_Y XREG(48)
#define R_MAGIC_BAR_X XREG(49)
#define R_MAGIC_BAR_LARGE_Y XREG(50)
#define R_MAGIC_FILL_X XREG(51)
#define R_MINIMAP_DISABLED XREG(95)
#define R_B_LABEL_DD WREG(0)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
#define R_B_LABEL_X(i) WREG(40 + i)
#define R_B_LABEL_Y(i) WREG(43 + i)
#define R_DGN_MINIMAP_X WREG(68)
#define R_DGN_MINIMAP_Y WREG(69)
#define R_MAP_INDEX VREG(11)
#define R_MAP_TEX_INDEX_BASE VREG(12)
#define R_MAP_TEX_INDEX VREG(13)
#define R_COMPASS_SCALE_X VREG(14)
#define R_COMPASS_SCALE_Y VREG(15)
#define R_COMPASS_OFFSET_X VREG(16)
#define R_COMPASS_OFFSET_Y VREG(17)
#define R_MINIMAP_COLOR(i) VREG(18 + i)
#define R_ITEM_AMMO_X(i) VREG(64 + i)
#define R_ITEM_AMMO_Y(i) VREG(68 + i)
#define R_ITEM_ICON_WIDTH(i) VREG(76 + i)
#define R_ITEM_BTN_WIDTH(i) VREG(80 + i)
#define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT
#define R_RUN_SPEED_LIMIT REG(45)
#define R_UPDATE_RATE SREG(30)
#define R_PAUSE_MENU_MODE SREG(94)
#define R_C_UP_ICON_X YREG(88)
#define R_C_UP_ICON_Y YREG(89)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + i)
#define R_C_BTN_COLOR(i) ZREG(39 + i)
#define R_B_BTN_COLOR(i) ZREG(43 + i)
#define R_START_LABEL_DD(i) ZREG(48 + i)
#define R_START_LABEL_Y(i) ZREG(51 + i)
#define R_START_LABEL_X(i) ZREG(54 + i)
#define R_C_UP_BTN_X ZREG(62)
#define R_C_UP_BTN_Y ZREG(63)
#define R_START_BTN_X ZREG(68)
#define R_START_BTN_Y ZREG(69)
#define R_ITEM_BTN_X(i) ZREG(70 + i)
#define R_ITEM_BTN_Y(i) ZREG(74 + i)
#define R_ITEM_BTN_DD(i) ZREG(78 + i)
#define R_ITEM_ICON_X(i) ZREG(82 + i)
#define R_ITEM_ICON_Y(i) ZREG(86 + i)
#define R_ITEM_ICON_DD(i) ZREG(90 + i)
#define R_A_BTN_Y XREG(16)
#define R_A_BTN_X XREG(17)
#define R_A_ICON_Y XREG(19)
#define R_A_ICON_X XREG(20)
#define R_A_BTN_COLOR(i) XREG(22 + i)
#define R_MAGIC_CONSUME_TIMER_GIANTS_MASK XREG(41)
#define R_MINIMAP_DISABLED XREG(95)
#define R_B_LABEL_DD WREG(0)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
#define R_B_LABEL_X(i) WREG(40 + i)
#define R_B_LABEL_Y(i) WREG(43 + i)
#define R_DGN_MINIMAP_X WREG(68)
#define R_DGN_MINIMAP_Y WREG(69)
#define R_MAP_INDEX VREG(11)
#define R_MAP_TEX_INDEX_BASE VREG(12)
#define R_MAP_TEX_INDEX VREG(13)
#define R_COMPASS_SCALE_X VREG(14)
#define R_COMPASS_SCALE_Y VREG(15)
#define R_COMPASS_OFFSET_X VREG(16)
#define R_COMPASS_OFFSET_Y VREG(17)
#define R_MINIMAP_COLOR(i) VREG(18 + i)
#define R_ITEM_AMMO_X(i) VREG(64 + i)
#define R_ITEM_AMMO_Y(i) VREG(68 + i)
#define R_ITEM_ICON_WIDTH(i) VREG(76 + i)
#define R_ITEM_BTN_WIDTH(i) VREG(80 + i)
#define R_FB_FILTER_TYPE SREG(80)
#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c)
#define R_FB_FILTER_A SREG(84)
#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c)
#define R_FB_FILTER_TYPE SREG(80)
#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c)
#define R_FB_FILTER_A SREG(84)
#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c)
#endif

View File

@ -1028,11 +1028,11 @@ extern UNK_PTR D_801BF5C0;
// extern UNK_TYPE2 D_801BF890;
// extern UNK_TYPE2 D_801BF898;
// extern UNK_TYPE2 D_801BF89C;
// extern UNK_TYPE2 D_801BF8A0;
// extern UNK_TYPE2 D_801BF8A4;
// extern UNK_TYPE2 D_801BF8A8;
// extern UNK_TYPE2 D_801BF8AC;
// extern UNK_TYPE2 D_801BF8B0;
// extern UNK_TYPE2 sMagicMeterOutlinePrimRed;
// extern UNK_TYPE2 sMagicMeterOutlinePrimGreen;
// extern UNK_TYPE2 sMagicMeterOutlinePrimBlue;
// extern UNK_TYPE2 sMagicBorderRatio;
// extern UNK_TYPE2 sMagicBorderStep;
// extern UNK_TYPE2 D_801BF8DC;
// extern UNK_TYPE2 D_801BF8E0;
// extern UNK_TYPE2 D_801BF8E4;
@ -2719,7 +2719,7 @@ extern f32 D_801DE860;
extern f32 D_801DE864;
extern f32 D_801DE868;
extern f32 D_801DE884;
extern TexturePtr D_801DE890[];
extern TexturePtr gCircleTex;
extern f32 D_801DF090;
extern f32 D_801DF094;
extern f32 D_801DF0A0;

View File

@ -523,7 +523,7 @@ typedef struct {
/* 0x252 */ s16 lifeSizeChange;
/* 0x254 */ s16 lifeSizeChangeDirection; // 1 means shrinking, 0 growing
/* 0x256 */ s16 unk_256;
/* 0x258 */ s16 unk_258;
/* 0x258 */ s16 magicConsumptionTimer; // For certain magic states, 1 unit of magic is consumed every time the timer reaches 0
/* 0x25A */ u8 numHorseBoosts;
/* 0x25C */ u16 unk_25C;
/* 0x25E */ u16 unk_25E;

View File

@ -365,15 +365,18 @@ typedef struct ActorListEntry {
/* 0x8 */ s32 unk_08;
} ActorListEntry; // size = 0xC
// Target size when activated
#define LENS_MASK_ACTIVE_SIZE 100
typedef struct ActorContext {
/* 0x000 */ u8 freezeFlashTimer;
/* 0x001 */ UNK_TYPE1 pad1;
/* 0x002 */ u8 unk2;
/* 0x003 */ u8 unk3;
/* 0x004 */ s8 unk4;
/* 0x003 */ u8 lensActive;
/* 0x004 */ s8 lensMaskSize; // The size of the circle when drawn the lens mask. Larger value leads to a smaller circle
/* 0x005 */ u8 unk5;
/* 0x006 */ UNK_TYPE1 pad6[0x5];
/* 0x00B */ s8 unkB;
/* 0x00B */ s8 lensActorsDrawn;
/* 0x00C */ s16 unkC;
/* 0x00E */ u8 totalLoadedActors;
/* 0x00F */ u8 undrawnActorCount;

View File

@ -24,6 +24,36 @@ typedef enum RespawnMode {
#define SAVE_BUFFER_SIZE 0x4000
typedef enum {
/* 0 */ MAGIC_STATE_IDLE, // Regular gameplay
/* 1 */ MAGIC_STATE_CONSUME_SETUP, // Sets the speed at which the magic border flashes
/* 2 */ MAGIC_STATE_CONSUME, // Consume magic until target is reached or no more magic is available
/* 3 */ MAGIC_STATE_METER_FLASH_1, // Flashes border
/* 4 */ MAGIC_STATE_METER_FLASH_2, // Flashes border and draws yellow magic to preview target consumption
/* 5 */ MAGIC_STATE_RESET, // Reset colors and return to idle
/* 6 */ MAGIC_STATE_METER_FLASH_3, // Flashes border with no additional behaviour
/* 7 */ MAGIC_STATE_CONSUME_LENS, // Magic slowly consumed by Lens of Truth
/* 8 */ MAGIC_STATE_STEP_CAPACITY, // Step `magicCapacity` to full capacity
/* 9 */ MAGIC_STATE_FILL, // Add magic until magicFillTarget is reached
/* 10 */ MAGIC_STATE_CONSUME_GORON_ZORA_SETUP,
/* 11 */ MAGIC_STATE_CONSUME_GORON_ZORA, // Magic slowly consumed by Goron spiked rolling or Zora electric barrier.
/* 12 */ MAGIC_STATE_CONSUME_GIANTS_MASK // Magic slowly consumed by Giant's Mask
} MagicState;
typedef enum {
/* 0 */ MAGIC_CONSUME_NOW, // Consume magic immediately without preview
/* 1 */ MAGIC_CONSUME_WAIT_NO_PREVIEW, // Sets consume target but waits to consume. No yellow magic preview to target consumption. Unused
/* 2 */ MAGIC_CONSUME_NOW_ALT, // Identical behaviour to MAGIC_CONSUME_NOW. Unused
/* 3 */ MAGIC_CONSUME_LENS, // Lens of Truth consumption
/* 4 */ MAGIC_CONSUME_WAIT_PREVIEW, // Sets consume target but waits to consume. Show magic to be consumed in yellow.
/* 5 */ MAGIC_CONSUME_GORON_ZORA, // Goron spiked rolling or Zora electric barrier slow consumption
/* 6 */ MAGIC_CONSUME_GIANTS_MASK, // Giant's Mask slow consumption
/* 7 */ MAGIC_CONSUME_DEITY_BEAM // Fierce Deity Beam consumption, consumed magic now and not via request
} MagicChangeType;
#define MAGIC_NORMAL_METER 0x30
#define MAGIC_DOUBLE_METER (2 * MAGIC_NORMAL_METER)
typedef struct SramContext {
/* 0x00 */ u8* readBuff;
/* 0x04 */ u8 *saveBuf;
@ -105,13 +135,13 @@ typedef struct SavePlayerData {
/* 0x08 */ char playerName[8]; // "player_name"
/* 0x10 */ s16 healthCapacity; // "max_life"
/* 0x12 */ s16 health; // "now_life"
/* 0x14 */ s8 magicLevel; // "magic_max"
/* 0x15 */ s8 magic; // "magic_now"
/* 0x14 */ s8 magicLevel; // 0 for no magic/new load, 1 for magic, 2 for double magic "magic_max"
/* 0x15 */ s8 magic; // current magic available for use "magic_now"
/* 0x16 */ s16 rupees; // "lupy_count"
/* 0x18 */ u16 swordHealth; // "long_sword_hp"
/* 0x1A */ u16 tatlTimer; // "navi_timer"
/* 0x1C */ u8 magicAcquired; // "magic_mode"
/* 0x1D */ u8 doubleMagic; // "magic_ability"
/* 0x1C */ u8 isMagicAcquired; // "magic_mode"
/* 0x1D */ u8 isDoubleMagicAcquired; // "magic_ability"
/* 0x1E */ u8 doubleDefense; // "life_ability"
/* 0x1F */ u8 unk_1F; // "ocarina_round"
/* 0x20 */ u8 unk_20; // "first_memory"
@ -226,13 +256,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"
/* 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"
/* 0x3F28 */ s16 magicState; // determines magic meter behavior on each frame "magic_flag"
/* 0x3F2A */ s16 isMagicRequested; // a request to add magic has been given "recovery_magic_flag"
/* 0x3F2C */ s16 magicFlag; // Set to 0 in func_80812D94(), otherwise unused "keep_magic_flag"
/* 0x3F2E */ s16 magicCapacity; // maximum magic available "magic_now_max"
/* 0x3F30 */ s16 magicFillTarget; // target used to fill magic "magic_now_now"
/* 0x3F32 */ s16 magicToConsume; // accumulated magic that is requested to be consumed "magic_used"
/* 0x3F34 */ s16 magicToAdd; // accumulated magic that is requested to be added "magic_recovery"
/* 0x3F36 */ u16 mapIndex; // "scene_ID"
/* 0x3F38 */ u16 minigameState; // "yabusame_mode"
/* 0x3F3A */ u16 minigameScore; // "yabusame_total"

View File

@ -8,7 +8,7 @@ void TitleSetup_GameStateResetContext(void) {
XREG(12) = 0xE;
XREG(13) = 0;
XREG(31) = 0;
XREG(41) = 0x50;
R_MAGIC_CONSUME_TIMER_GIANTS_MASK = 80;
XREG(43) = 0xFC54;
XREG(44) = 0xD7;

View File

@ -2212,10 +2212,10 @@ s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgI
return false;
}
void func_800B90F4(PlayState* play) {
if (play->actorCtx.unk3 != 0) {
play->actorCtx.unk3 = 0;
func_80115D5C(&play->state);
void Actor_DeactivateLens(PlayState* play) {
if (play->actorCtx.lensActive) {
play->actorCtx.lensActive = false;
Magic_Reset(play);
}
}
@ -2594,7 +2594,7 @@ void func_800B9D1C(Actor* actor) {
void Actor_DrawAllSetup(PlayState* play) {
play->actorCtx.undrawnActorCount = 0;
play->actorCtx.unkB = 0;
play->actorCtx.lensActorsDrawn = false;
}
s32 Actor_RecordUndrawnActor(PlayState* play, Actor* actor) {
@ -2607,13 +2607,12 @@ s32 Actor_RecordUndrawnActor(PlayState* play, Actor* actor) {
return true;
}
void func_800B9E84(Gfx** arg0, s32 arg1) {
func_80164C14(arg0, D_801DE890, 4, 0, 6, 6, ((100 - arg1) * 0.003f) + 1.0f);
void Actor_DrawLensOverlay(Gfx** gfxP, s32 lensMaskSize) {
func_80164C14(gfxP, &gCircleTex, 4, 0, 6, 6, ((LENS_MASK_ACTIVE_SIZE - lensMaskSize) * 0.003f) + 1.0f);
}
#ifdef NON_EQUIVALENT
// Related to draw actors with lens
void func_800B9EF4(PlayState* play, s32 numActors, Actor** actors) {
void Actor_DrawLensActors(PlayState* play, s32 numActors, Actor** actors) {
s32 spB4;
Gfx* spAC;
void* spA8; // pad
@ -2684,7 +2683,7 @@ void func_800B9EF4(PlayState* play, s32 numActors, Actor** actors) {
}
// spAC = phi_s1;
func_800B9E84(&spAC, play->actorCtx.unk4);
Actor_DrawLensOverlay(&spAC, play->actorCtx.lensMaskSize);
phi_s1_2 = func_801660B8(play, spAC);
for (spB4 = 0; spB4 < numActors; spB4++, actors++) {
@ -2744,7 +2743,7 @@ void func_800B9EF4(PlayState* play, s32 numActors, Actor** actors) {
spAC = phi_s1_2;
// spAC = temp_s1_11;
func_800B9E84(&spAC, (s32)play->actorCtx.unk4);
Actor_DrawLensOverlay(&spAC, (s32)play->actorCtx.lensMaskSize);
// temp_s1_11->words.w0 = 0xE7000000;
// temp_s1_11->words.w1 = 0;
// temp_s1_12 = temp_s1_11 + 8;
@ -2796,15 +2795,15 @@ void func_800B9EF4(PlayState* play, s32 numActors, Actor** actors) {
// spAC = temp_s1_18 + 8;
gDPSetPrimColor(spAC++, 0, 0, 74, 0, 0, 74);
func_800B9E84(&spAC, (s32)play->actorCtx.unk4);
Actor_DrawLensOverlay(&spAC, (s32)play->actorCtx.lensMaskSize);
OVERLAY_DISP = spAC;
CLOSE_DISPS(play->state.gfxCtx);
}
#else
void func_800B9EF4(PlayState* play, s32 numActors, Actor** actors);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_actor/func_800B9EF4.s")
void Actor_DrawLensActors(PlayState* play, s32 numActors, Actor** actors);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_actor/Actor_DrawLensActors.s")
#endif
s32 func_800BA2D8(PlayState* play, Actor* actor) {
@ -2883,7 +2882,7 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
actor->isDrawn = false;
if ((actor->init == NULL) && (actor->draw != NULL) && (actor->flags & actorFlags)) {
if ((actor->flags & ACTOR_FLAG_80) &&
((play->roomCtx.currRoom.unk5 == 0) || (play->actorCtx.unk4 == 0x64) ||
((play->roomCtx.currRoom.unk5 == 0) || (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) ||
(actor->room != play->roomCtx.currRoom.num))) {
if (Actor_RecordUndrawnActor(play, actor)) {}
} else {
@ -2903,17 +2902,17 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
gSPDisplayList(sp58, &ref2[1]);
POLY_XLU_DISP = &ref2[1];
if (play->actorCtx.unk3 != 0) {
Math_StepToC(&play->actorCtx.unk4, 100, 20);
if (play->actorCtx.lensActive) {
Math_StepToC(&play->actorCtx.lensMaskSize, LENS_MASK_ACTIVE_SIZE, 20);
if (GET_PLAYER(play)->stateFlags2 & 0x8000000) {
func_800B90F4(play);
Actor_DeactivateLens(play);
}
} else {
Math_StepToC(&play->actorCtx.unk4, 0, 10);
Math_StepToC(&play->actorCtx.lensMaskSize, 0, 10);
}
if (play->actorCtx.unk4 != 0) {
play->actorCtx.unkB = 1;
func_800B9EF4(play, play->actorCtx.undrawnActorCount, play->actorCtx.undrawnActors);
if (play->actorCtx.lensMaskSize != 0) {
play->actorCtx.lensActorsDrawn = true;
Actor_DrawLensActors(play, play->actorCtx.undrawnActorCount, play->actorCtx.undrawnActors);
}
tmp2 = POLY_XLU_DISP;

View File

@ -25,7 +25,7 @@ u16 ElfMessage_GetFirstCycleHint(PlayState* play) {
}
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) {

View File

@ -500,7 +500,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
}
}
if (play->gameOverCtx.state != 0) {
if (play->gameOverCtx.state != GAMEOVER_INACTIVE) {
return;
}

View File

@ -75,7 +75,8 @@ void KaleidoSetup_Update(PlayState* play) {
if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
if ((gSaveContext.save.cutscene < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) {
if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) {
if ((play->unk_1887C < 2) && (gSaveContext.unk_3F28 != 8) && (gSaveContext.unk_3F28 != 9)) {
if ((play->unk_1887C < 2) && (gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) &&
(gSaveContext.magicState != MAGIC_STATE_FILL)) {
if (!(gSaveContext.eventInf[1] & 0x80) && !(player->stateFlags1 & 0x20)) {
if (!(play->actorCtx.unk5 & 2) && !(play->actorCtx.unk5 & 4)) {
if ((play->actorCtx.unk268 == 0) && CHECK_BTN_ALL(input->press.button, BTN_START)) {

View File

@ -139,11 +139,11 @@ u16 sMinigameScoreDigits[] = { 0, 0, 0, 0 };
u16 sCUpInvisible = 0;
u16 sCUpTimer = 0;
s16 sMagicBarOutlinePrimRed = 255;
s16 sMagicBarOutlinePrimGreen = 255;
s16 sMagicBarOutlinePrimBlue = 255;
s16 D_801BF8AC = 2; // sMagicBorderRatio
s16 D_801BF8B0 = 1;
s16 sMagicMeterOutlinePrimRed = 255;
s16 sMagicMeterOutlinePrimGreen = 255;
s16 sMagicMeterOutlinePrimBlue = 255;
s16 sMagicBorderRatio = 2;
s16 sMagicBorderStep = 1;
s16 sExtraItemBases[] = {
ITEM_STICK, // ITEM_STICKS_5
@ -225,10 +225,14 @@ s16 sFinalHoursClockColorTargetIndex = 0;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010CD98.s")
Gfx* func_8010CFBC(Gfx* displayListHead, void* texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop,
s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b, s16 a);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010CFBC.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D2D4.s")
Gfx* func_8010D480(Gfx* displayListHead, void* texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop,
s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b, s16 a, s32 argE, s32 argF);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D480.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D7D0.s")
@ -600,7 +604,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return item;
} else if (item == ITEM_MAGIC_SMALL) {
Parameter_AddMagic(play, 0x18);
Magic_Add(play, MAGIC_NORMAL_METER / 2);
if (!(gSaveContext.save.weekEventReg[12] & 0x80)) {
gSaveContext.save.weekEventReg[12] |= 0x80;
return ITEM_NONE;
@ -608,7 +612,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return item;
} else if (item == ITEM_MAGIC_LARGE) {
Parameter_AddMagic(play, 0x30);
Magic_Add(play, MAGIC_NORMAL_METER);
if (!(gSaveContext.save.weekEventReg[12] & 0x80)) {
gSaveContext.save.weekEventReg[12] |= 0x80;
return ITEM_NONE;
@ -1145,26 +1149,482 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange) {
}
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Parameter_AddMagic.s")
void Magic_Add(PlayState* play, s16 magicToAdd) {
if (((void)0, gSaveContext.save.playerData.magic) < ((void)0, gSaveContext.magicCapacity)) {
gSaveContext.magicToAdd += magicToAdd;
gSaveContext.isMagicRequested = true;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80115D5C.s")
void Magic_Reset(PlayState* play) {
if ((gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) && (gSaveContext.magicState != MAGIC_STATE_FILL)) {
sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255;
gSaveContext.magicState = MAGIC_STATE_IDLE;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80115DB4.s")
/**
* Request to consume magic.
*
* @param magicToConsume the positive-valued amount to decrease magic by
* @param type how the magic is consumed.
* @return false if the request failed
*/
s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116088.s")
// Magic is not acquired yet
if (!gSaveContext.save.playerData.isMagicAcquired) {
return false;
}
s16 magicBorderColors[][3] = {
// Not enough magic available to consume
if ((gSaveContext.save.playerData.magic - magicToConsume) < 0) {
if (gSaveContext.magicCapacity != 0) {
play_sound(NA_SE_SY_ERROR);
}
return false;
}
switch (type) {
case MAGIC_CONSUME_NOW:
case MAGIC_CONSUME_NOW_ALT:
// Drain magic immediately e.g. Deku Bubble
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
(gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
if (gSaveContext.save.weekEventReg[14] & 8) {
// Drank Chateau Romani
magicToConsume = 0;
}
gSaveContext.magicToConsume = magicToConsume;
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
return true;
} else {
play_sound(NA_SE_SY_ERROR);
return false;
}
case MAGIC_CONSUME_WAIT_NO_PREVIEW:
// Sets consume target but waits to consume.
// No yellow magic to preview target consumption.
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
(gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
if (gSaveContext.save.weekEventReg[14] & 8) {
// Drank Chateau Romani
magicToConsume = 0;
}
gSaveContext.magicToConsume = magicToConsume;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_3;
return true;
} else {
play_sound(NA_SE_SY_ERROR);
return false;
}
case MAGIC_CONSUME_LENS:
if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
if (gSaveContext.save.playerData.magic != 0) {
interfaceCtx->magicConsumptionTimer = 80;
gSaveContext.magicState = MAGIC_STATE_CONSUME_LENS;
return true;
} else {
return false;
}
} else if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
return true;
} else {
return false;
}
case MAGIC_CONSUME_WAIT_PREVIEW:
// Sets consume target but waits to consume.
// Preview consumption with a yellow bar. e.g. Spin Attack
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
(gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
gSaveContext.magicToConsume = magicToConsume;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_2;
return true;
} else {
play_sound(NA_SE_SY_ERROR);
return false;
}
case MAGIC_CONSUME_GORON_ZORA:
// Goron spiked rolling or Zora electric barrier
if (gSaveContext.save.playerData.magic != 0) {
interfaceCtx->magicConsumptionTimer = 10;
gSaveContext.magicState = MAGIC_STATE_CONSUME_GORON_ZORA_SETUP;
return true;
} else {
return false;
}
case MAGIC_CONSUME_GIANTS_MASK:
// Wearing Giant's Mask
if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
if (gSaveContext.save.playerData.magic != 0) {
interfaceCtx->magicConsumptionTimer = R_MAGIC_CONSUME_TIMER_GIANTS_MASK;
gSaveContext.magicState = MAGIC_STATE_CONSUME_GIANTS_MASK;
return true;
} else {
return false;
}
}
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_GIANTS_MASK) {
return true;
} else {
return false;
}
case MAGIC_CONSUME_DEITY_BEAM:
// Consumes magic immediately
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) ||
(gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
if (gSaveContext.save.weekEventReg[14] & 8) {
// Drank Chateau Romani
magicToConsume = 0;
}
gSaveContext.save.playerData.magic -= magicToConsume;
return true;
} else {
play_sound(NA_SE_SY_ERROR);
return false;
}
}
return false;
}
void Magic_UpdateAddRequest(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.magicCapacity)) {
gSaveContext.save.playerData.magic = gSaveContext.magicCapacity;
gSaveContext.magicToAdd = 0;
gSaveContext.isMagicRequested = false;
} else {
gSaveContext.magicToAdd -= 4;
if (gSaveContext.magicToAdd <= 0) {
gSaveContext.magicToAdd = 0;
gSaveContext.isMagicRequested = false;
}
}
}
}
s16 sMagicBorderColors[][3] = {
{ 255, 255, 255 },
{ 150, 150, 150 },
};
s16 magicBorderIndices[] = { 0, 1, 1, 0 };
s16 magicBorderColorTimerIndex[] = { 2, 1, 2, 1 };
s16 sMagicBorderIndices[] = { 0, 1, 1, 0 };
s16 sMagicBorderColorTimerIndex[] = { 2, 1, 2, 1 };
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116114.s")
void Magic_FlashMeterBorder(void) {
s16 borderChangeR;
s16 borderChangeG;
s16 borderChangeB;
s16 index = sMagicBorderIndices[sMagicBorderStep];
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116348.s")
borderChangeR = ABS_ALT(sMagicMeterOutlinePrimRed - sMagicBorderColors[index][0]) / sMagicBorderRatio;
borderChangeG = ABS_ALT(sMagicMeterOutlinePrimGreen - sMagicBorderColors[index][1]) / sMagicBorderRatio;
borderChangeB = ABS_ALT(sMagicMeterOutlinePrimBlue - sMagicBorderColors[index][2]) / sMagicBorderRatio;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116918.s")
if (sMagicMeterOutlinePrimRed >= sMagicBorderColors[index][0]) {
sMagicMeterOutlinePrimRed -= borderChangeR;
} else {
sMagicMeterOutlinePrimRed += borderChangeR;
}
if (sMagicMeterOutlinePrimGreen >= sMagicBorderColors[index][1]) {
sMagicMeterOutlinePrimGreen -= borderChangeG;
} else {
sMagicMeterOutlinePrimGreen += borderChangeG;
}
if (sMagicMeterOutlinePrimBlue >= sMagicBorderColors[index][2]) {
sMagicMeterOutlinePrimBlue -= borderChangeB;
} else {
sMagicMeterOutlinePrimBlue += borderChangeB;
}
sMagicBorderRatio--;
if (sMagicBorderRatio == 0) {
sMagicMeterOutlinePrimRed = sMagicBorderColors[index][0];
sMagicMeterOutlinePrimGreen = sMagicBorderColors[index][1];
sMagicMeterOutlinePrimBlue = sMagicBorderColors[index][2];
sMagicBorderRatio = sMagicBorderColorTimerIndex[sMagicBorderStep];
sMagicBorderStep++;
if (sMagicBorderStep >= 4) {
sMagicBorderStep = 0;
}
}
}
void Magic_Update(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
InterfaceContext* interfaceCtx = &play->interfaceCtx;
s16 magicCapacityTarget;
if (gSaveContext.save.weekEventReg[14] & 8) {
// Drank Chateau Romani
Magic_FlashMeterBorder();
}
switch (gSaveContext.magicState) {
case MAGIC_STATE_STEP_CAPACITY:
// Step magicCapacity to the capacity determined by magicLevel
// This changes the width of the magic meter drawn
magicCapacityTarget = gSaveContext.save.playerData.magicLevel * MAGIC_NORMAL_METER;
if (gSaveContext.magicCapacity != magicCapacityTarget) {
if (gSaveContext.magicCapacity < magicCapacityTarget) {
gSaveContext.magicCapacity += 0x10;
if (gSaveContext.magicCapacity > magicCapacityTarget) {
gSaveContext.magicCapacity = magicCapacityTarget;
}
} else {
gSaveContext.magicCapacity -= 0x10;
if (gSaveContext.magicCapacity <= magicCapacityTarget) {
gSaveContext.magicCapacity = magicCapacityTarget;
}
}
} else {
// Once the capacity has reached its target,
// follow up by filling magic to magicFillTarget
gSaveContext.magicState = MAGIC_STATE_FILL;
}
break;
case MAGIC_STATE_FILL:
// Add magic until magicFillTarget is reached
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.magicFillTarget)) {
gSaveContext.save.playerData.magic = gSaveContext.magicFillTarget;
gSaveContext.magicState = MAGIC_STATE_IDLE;
}
break;
case MAGIC_STATE_CONSUME_SETUP:
// Sets the speed at which magic border flashes
sMagicBorderRatio = 2;
gSaveContext.magicState = MAGIC_STATE_CONSUME;
break;
case MAGIC_STATE_CONSUME:
// Consume magic until target is reached or no more magic is available
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
gSaveContext.save.playerData.magic =
((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume);
if (gSaveContext.save.playerData.magic <= 0) {
gSaveContext.save.playerData.magic = 0;
}
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255;
}
// fallthrough (flash border while magic is being consumed)
case MAGIC_STATE_METER_FLASH_1:
case MAGIC_STATE_METER_FLASH_2:
case MAGIC_STATE_METER_FLASH_3:
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
Magic_FlashMeterBorder();
}
break;
case MAGIC_STATE_RESET:
sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255;
gSaveContext.magicState = MAGIC_STATE_IDLE;
break;
case MAGIC_STATE_CONSUME_LENS:
// Slowly consume magic while Lens of Truth is active
if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
(msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) &&
!Play_InCsMode(play)) {
if ((gSaveContext.save.playerData.magic == 0) ||
((func_801242DC(play) >= 2) && (func_801242DC(play) <= 4)) ||
((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)) ||
!play->actorCtx.lensActive) {
// Deactivate Lens of Truth and set magic state to idle
play->actorCtx.lensActive = false;
play_sound(NA_SE_SY_GLASSMODE_OFF);
gSaveContext.magicState = MAGIC_STATE_IDLE;
sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255;
break;
}
interfaceCtx->magicConsumptionTimer--;
if (interfaceCtx->magicConsumptionTimer == 0) {
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
gSaveContext.save.playerData.magic--;
}
interfaceCtx->magicConsumptionTimer = 80;
}
}
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
Magic_FlashMeterBorder();
}
break;
case MAGIC_STATE_CONSUME_GORON_ZORA_SETUP:
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
gSaveContext.save.playerData.magic -= 2;
}
if (gSaveContext.save.playerData.magic <= 0) {
gSaveContext.save.playerData.magic = 0;
}
gSaveContext.magicState = MAGIC_STATE_CONSUME_GORON_ZORA;
// fallthrough
case MAGIC_STATE_CONSUME_GORON_ZORA:
if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == 0) && (msgCtx->msgMode == 0) &&
(play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(play->transitionMode == TRANS_MODE_OFF)) {
if (!Play_InCsMode(play)) {
interfaceCtx->magicConsumptionTimer--;
if (interfaceCtx->magicConsumptionTimer == 0) {
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
gSaveContext.save.playerData.magic--;
}
if (gSaveContext.save.playerData.magic <= 0) {
gSaveContext.save.playerData.magic = 0;
}
interfaceCtx->magicConsumptionTimer = 10;
}
}
}
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
Magic_FlashMeterBorder();
}
break;
case MAGIC_STATE_CONSUME_GIANTS_MASK:
if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
(msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
if (!Play_InCsMode(play)) {
interfaceCtx->magicConsumptionTimer--;
if (interfaceCtx->magicConsumptionTimer == 0) {
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
gSaveContext.save.playerData.magic--;
}
if (gSaveContext.save.playerData.magic <= 0) {
gSaveContext.save.playerData.magic = 0;
}
interfaceCtx->magicConsumptionTimer = R_MAGIC_CONSUME_TIMER_GIANTS_MASK;
}
}
}
if (!(gSaveContext.save.weekEventReg[14] & 8)) {
Magic_FlashMeterBorder();
}
break;
default:
gSaveContext.magicState = MAGIC_STATE_IDLE;
break;
}
}
void Magic_DrawMeter(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
s16 magicBarY;
OPEN_DISPS(play->state.gfxCtx);
if (gSaveContext.save.playerData.magicLevel != 0) {
if (gSaveContext.save.playerData.healthCapacity > 0xA0) {
magicBarY = 42; // two rows of hearts
} else {
magicBarY = 34; // one row of hearts
}
func_8012C654(play->state.gfxCtx);
gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255);
OVERLAY_DISP = func_8010CFBC(OVERLAY_DISP, gMagicMeterEndTex, 8, 16, 18, magicBarY, 8, 16, 1 << 10, 1 << 10,
sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, sMagicMeterOutlinePrimBlue,
interfaceCtx->magicAlpha);
OVERLAY_DISP =
func_8010CFBC(OVERLAY_DISP, gMagicMeterMidTex, 24, 16, 26, magicBarY, ((void)0, gSaveContext.magicCapacity),
16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen,
sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha);
OVERLAY_DISP =
func_8010D480(OVERLAY_DISP, gMagicMeterEndTex, 8, 16, ((void)0, gSaveContext.magicCapacity) + 26, magicBarY,
8, 16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen,
sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha, 3, 0x100);
gDPPipeSync(OVERLAY_DISP++);
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE, PRIMITIVE,
ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE);
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
if (gSaveContext.magicState == MAGIC_STATE_METER_FLASH_2) {
// Yellow part of the meter indicating the amount of magic to be subtracted
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 250, 250, 0, interfaceCtx->magicAlpha);
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gMagicMeterFillTex, 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);
gSPTextureRectangle(OVERLAY_DISP++, 104, (magicBarY + 3) << 2,
(((void)0, gSaveContext.save.playerData.magic) + 26) << 2, (magicBarY + 10) << 2,
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
// Fill the rest of the meter with the normal magic color
gDPPipeSync(OVERLAY_DISP++);
if (gSaveContext.save.weekEventReg[14] & 8) {
// Blue magic (drank Chateau Romani)
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 200, interfaceCtx->magicAlpha);
} else {
// Green magic (default)
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 200, 0, interfaceCtx->magicAlpha);
}
gSPTextureRectangle(
OVERLAY_DISP++, 104, (magicBarY + 3) << 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 {
// Fill the whole meter with the normal magic color
if (gSaveContext.save.weekEventReg[14] & 8) {
// Blue magic (drank Chateau Romani)
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 200, interfaceCtx->magicAlpha);
} else {
// Green magic (default)
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 200, 0, interfaceCtx->magicAlpha);
}
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gMagicMeterFillTex, 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);
gSPTextureRectangle(OVERLAY_DISP++, 104, (magicBarY + 3) << 2,
(((void)0, gSaveContext.save.playerData.magic) + 26) << 2, (magicBarY + 10) << 2,
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
}
CLOSE_DISPS(play->state.gfxCtx);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116FD8.s")

View File

@ -597,12 +597,12 @@ SavePlayerData sSaveDefaultPlayerData = {
0x30, // healthCapacity
0x30, // health
0, // magicLevel
0x30, // magic
MAGIC_NORMAL_METER, // magic
0, // rupees
0, // swordHealth
0, // tatlTimer
0, // magicAcquired
0, // doubleMagic
false, // isMagicAcquired
false, // isDoubleMagicAcquired
0, // doubleDefense
0, // unk_1F
0xFF, // unk_20
@ -697,12 +697,12 @@ SavePlayerData sSaveDebugPlayerData = {
0x80, // healthCapacity
0x80, // health
0, // magicLevel
0x30, // magic
0x32, // rupees
0x64, // swordHealth
MAGIC_NORMAL_METER, // magic
50, // rupees
100, // swordHealth
0, // tatlTimer
1, // magicAcquired
0, // doubleMagic
true, // isMagicAcquired
false, // isDoubleMagicAcquired
0, // doubleDefense
0, // unk_1F
0xFF, // unk_20

View File

@ -81,7 +81,7 @@ void ArrowFire_Init(Actor* thisx, PlayState* play) {
void ArrowFire_Destroy(Actor* thisx, PlayState* play) {
ArrowFire* this = THIS;
func_80115D5C(&play->state);
Magic_Reset(play);
Collider_DestroyQuad(play, &this->collider1);
Collider_DestroyQuad(play, &this->collider2);
}

View File

@ -57,7 +57,7 @@ void ArrowIce_Init(Actor* thisx, PlayState* play) {
}
void ArrowIce_Destroy(Actor* thisx, PlayState* play) {
func_80115D5C(&play->state);
Magic_Reset(play);
(void)"消滅"; // Unreferenced in retail, means "Disappearance"
}

View File

@ -56,7 +56,7 @@ void ArrowLight_Init(Actor* thisx, PlayState* play) {
}
void ArrowLight_Destroy(Actor* thisx, PlayState* play) {
func_80115D5C(&play->state);
Magic_Reset(play);
(void)"消滅"; // Unreferenced in retail, means "Disappearance"
}

View File

@ -571,7 +571,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) {
} else {
this->unk_1D20 = 1;
}
XREG(41) = KREG(14) + 20;
R_MAGIC_CONSUME_TIMER_GIANTS_MASK = KREG(14) + 20;
this->unk_01AC = 1.0f;
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_TANRON5, 0.0f, 1000.0f, 0.0f, 0, 0, 0, 0);
} else if (this->actor.params == TWINMOLD_TAIL) {

View File

@ -139,7 +139,7 @@ void EnArrow_Destroy(Actor* thisx, PlayState* play) {
}
if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6) && (this->actor.child == NULL)) {
func_80115D5C(&play->state);
Magic_Reset(play);
}
}
@ -162,13 +162,13 @@ void func_8088A594(EnArrow* this, PlayState* play) {
this->bubble.unk_148++;
if (this->bubble.unk_148 > 20) {
this->actionFunc = func_8088ACE0;
func_80115D5C(&play->state);
Magic_Reset(play);
}
}
} else {
if ((this->actor.params != ENARROW_8) && (player->unk_D57 == 0)) {
if (this->actor.params == ENARROW_7) {
func_80115D5C(&play->state);
Magic_Reset(play);
}
Actor_MarkForDeath(&this->actor);
return;
@ -202,7 +202,7 @@ void func_8088A594(EnArrow* this, PlayState* play) {
this->bubble.unk_144 = CLAMP_MIN(this->bubble.unk_144, 3.5f);
func_8088A514(this);
this->unk_260 = 99;
func_80115D5C(&play->state);
Magic_Reset(play);
} 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);
@ -310,7 +310,7 @@ void func_8088AA98(EnArrow* this, PlayState* play) {
return;
}
func_80115D5C(&play->state);
Magic_Reset(play);
}
}
}

View File

@ -639,7 +639,7 @@ void func_80B3F78C(EnDai* this, PlayState* play) {
};
s32 pad;
if (play->actorCtx.unkB != 0) {
if (play->actorCtx.lensActorsDrawn) {
this->unk_1CE |= 0x40;
} else {
Actor_RecordUndrawnActor(play, &this->actor);

View File

@ -201,7 +201,7 @@ void func_80A5063C(EnDnb* this, PlayState* play) {
void EnDnb_Draw(Actor* thisx, PlayState* play) {
EnDnb* this = THIS;
if (play->actorCtx.unk4 != 0) {
if (play->actorCtx.lensMaskSize != 0) {
func_80A50510(this, play);
} else {
func_80A5063C(this, play);

View File

@ -675,8 +675,7 @@ void func_8088DD34(EnElf* this, PlayState* play) {
!func_8088C804(&this->actor.world.pos, &refActor->actor.world.pos, 10.0f)) {
Health_ChangeBy(play, 0x80);
if (this->fairyFlags & 0x200) {
Parameter_AddMagic(play, ((void)0, gSaveContext.unk_3F30) +
(gSaveContext.save.playerData.doubleMagic * 0x30) + 0x30);
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
}
gSaveContext.jinxTimer = 0;
this->unk_254 = 50.0f;

View File

@ -99,7 +99,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) {
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, PlayState* play) {
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 {
@ -477,8 +477,7 @@ void func_80A3A610(EnElfgrp* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->unk_144 == 60) {
Parameter_AddMagic(play,
((void)0, gSaveContext.unk_3F30) + (gSaveContext.save.playerData.doubleMagic * 0x30) + 0x30);
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
gSaveContext.healthAccumulator = 320;
}

View File

@ -739,7 +739,7 @@ s32 EnFirefly_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
Gfx** gfx) {
EnFirefly* this = THIS;
if (this->isInvisible && (play->actorCtx.unk4 != 0x64)) {
if (this->isInvisible && (play->actorCtx.lensMaskSize != LENS_MASK_ACTIVE_SIZE)) {
*dList = NULL;
} else if (limbIndex == 1) {
pos->y += 2300.0f;

View File

@ -651,9 +651,8 @@ void func_80962A10(EnFu* this, PlayState* play) {
this->unk_546 = 1;
}
if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.playerData.magicAcquired) {
Parameter_AddMagic(play,
((void)0, gSaveContext.unk_3F30) + (gSaveContext.save.playerData.doubleMagic * 48) + 48);
if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.playerData.isMagicAcquired) {
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
}
func_80962F10(this);
@ -1139,7 +1138,7 @@ void func_80963DE4(EnFu* this, PlayState* play) {
}
void func_80963EAC(EnFu* this, PlayState* play) {
if (gSaveContext.save.playerData.magicAcquired) {
if (gSaveContext.save.playerData.isMagicAcquired) {
if (this->unk_540 == 1) {
Message_StartTextbox(play, 0x2847, &this->actor);
this->unk_552 = 0x2847;

View File

@ -231,7 +231,7 @@ void func_80B35450(EnGg* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
func_800B90F4(play);
Actor_DeactivateLens(play);
}
this->unk_308 = 1;
this->actionFunc = func_80B352A4;
@ -682,7 +682,7 @@ void EnGg_Destroy(Actor* thisx, PlayState* play) {
void EnGg_Update(Actor* thisx, PlayState* play) {
EnGg* this = THIS;
if (play->actorCtx.unk4 == 100) {
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
this->actor.flags |= ACTOR_FLAG_80;
this->actor.flags |= ACTOR_FLAG_1;
} else {

View File

@ -421,7 +421,7 @@ void EnGg2_Destroy(Actor* thisx, PlayState* play) {
void EnGg2_Update(Actor* thisx, PlayState* play) {
EnGg2* this = THIS;
if (play->actorCtx.unk4 == 100) {
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
this->actor.flags |= ACTOR_FLAG_80;
this->actor.flags |= ACTOR_FLAG_1;
if ((this->unk_2EE == 5) && (this->unk_2EE == 7)) {
@ -443,7 +443,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) {
if ((this->unk_2EE == 5) || (this->unk_2EE == 7)) {
func_800B9010(&this->actor, NA_SE_EN_SHARP_FLOAT - SFX_FLAG);
if ((play->actorCtx.unk4 == 100) && ((play->state.frames % 4) == 0)) {
if ((play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) && ((play->state.frames % 4) == 0)) {
func_80B3B4B0(this, play);
}
}

View File

@ -724,8 +724,7 @@ void func_80B51B40(EnGk* this, PlayState* play) {
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_03;
gSaveContext.nextTransitionType = TRANS_TYPE_03;
Parameter_AddMagic(play, ((void)0, gSaveContext.unk_3F30) +
(gSaveContext.save.playerData.doubleMagic * 0x30) + 0x30);
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
} else {
this->actionFunc = func_80B51760;
}

View File

@ -433,8 +433,7 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) {
gSaveContext.nextTransitionType = TRANS_TYPE_02;
func_801477B4(play);
func_800B7298(play, &this->actor, 7);
Parameter_AddMagic(play,
((void)0, gSaveContext.unk_3F30) + (gSaveContext.save.playerData.doubleMagic * 48) + 48);
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
gSaveContext.eventInf[1] &= (u8)~1;
gSaveContext.eventInf[1] &= (u8)~2;

View File

@ -107,7 +107,7 @@ void EnTest2_Update(Actor* thisx, PlayState* play) {
void EnTest2_UpdateForLens(Actor* thisx, PlayState* play) {
EnTest2* this = THIS;
if (play->actorCtx.unk4 == 100) {
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
this->actor.flags |= ACTOR_FLAG_80;
} else {
this->actor.flags &= ~ACTOR_FLAG_80;

View File

@ -123,7 +123,7 @@ void ItemEtcetera_Update(Actor* thisx, PlayState* play) {
void ItemEtcetera_DrawThroughLens(Actor* thisx, PlayState* play) {
ItemEtcetera* this = THIS;
if (play->actorCtx.unk4 == 100) {
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
func_800B8050(&this->actor, play, 0);
func_800B8118(&this->actor, play, 0);
GetItem_Draw(play, this->getItemDrawId);

View File

@ -72,7 +72,7 @@ void OceffSpot_Destroy(Actor* thisx, PlayState* play2) {
LightContext_RemoveLight(play, &play->lightCtx, this->lightNode1);
LightContext_RemoveLight(play, &play->lightCtx, this->lightNode2);
func_80115D5C(&play->state);
Magic_Reset(play);
}
void OceffSpot_End(OceffSpot* this, PlayState* play) {

View File

@ -42,7 +42,7 @@ void OceffWipe2_Init(Actor* thisx, PlayState* play) {
void OceffWipe2_Destroy(Actor* thisx, PlayState* play) {
OceffWipe2* this = THIS;
func_80115D5C(&play->state);
Magic_Reset(play);
play->msgCtx.unk120B0 = 0;
}

View File

@ -43,7 +43,7 @@ void OceffWipe3_Init(Actor* thisx, PlayState* play) {
void OceffWipe3_Destroy(Actor* thisx, PlayState* play) {
OceffWipe3* this = THIS;
func_80115D5C(&play->state);
Magic_Reset(play);
play->msgCtx.unk120B0 = 0;
}

View File

@ -38,7 +38,7 @@ void OceffWipe6_Init(Actor* thisx, PlayState* play) {
}
void OceffWipe6_Destroy(Actor* thisx, PlayState* play) {
func_80115D5C(&play->state);
Magic_Reset(play);
play->msgCtx.unk120B0 = 0;
}

View File

@ -42,7 +42,7 @@ void OceffWipe7_Init(Actor* thisx, PlayState* play) {
void OceffWipe7_Destroy(Actor* thisx, PlayState* play) {
OceffWipe7* this = THIS;
func_80115D5C(&play->state);
Magic_Reset(play);
play->msgCtx.unk120B0 = 0;
}

View File

@ -811,7 +811,7 @@
0x800B9084:("func_800B9084",),
0x800B9098:("func_800B9098",),
0x800B90AC:("func_800B90AC",),
0x800B90F4:("func_800B90F4",),
0x800B90F4:("Actor_DeactivateLens",),
0x800B9120:("func_800B9120",),
0x800B9170:("Actor_InitContext",),
0x800B9334:("Actor_SpawnSetupActors",),
@ -821,8 +821,8 @@
0x800B9D1C:("func_800B9D1C",),
0x800B9E3C:("Actor_DrawAllSetup",),
0x800B9E4C:("Actor_RecordUndrawnActor",),
0x800B9E84:("func_800B9E84",),
0x800B9EF4:("func_800B9EF4",),
0x800B9E84:("Actor_DrawLensOverlay",),
0x800B9EF4:("Actor_DrawLensActors",),
0x800BA2D8:("func_800BA2D8",),
0x800BA2FC:("func_800BA2FC",),
0x800BA42C:("Actor_DrawAll",),
@ -2134,13 +2134,13 @@
0x801159C0:("Health_GiveHearts",),
0x801159EC:("Rupees_ChangeBy",),
0x80115A14:("Inventory_ChangeAmmo",),
0x80115D14:("Parameter_AddMagic",),
0x80115D5C:("func_80115D5C",),
0x80115DB4:("func_80115DB4",),
0x80116088:("func_80116088",),
0x80116114:("func_80116114",),
0x80116348:("func_80116348",),
0x80116918:("func_80116918",),
0x80115D14:("Magic_Add",),
0x80115D5C:("Magic_Reset",),
0x80115DB4:("Magic_Consume",),
0x80116088:("Magic_UpdateAddRequest",),
0x80116114:("Magic_FlashMeterBorder",),
0x80116348:("Magic_Update",),
0x80116918:("Magic_DrawMeter",),
0x80116FD8:("func_80116FD8",),
0x801170B8:("func_801170B8",),
0x80117100:("func_80117100",),

View File

@ -1069,11 +1069,11 @@
0x801BF890:("sMinigameScoreDigits","UNK_TYPE2","",0x2),
0x801BF898:("sCUpInvisible","UNK_TYPE2","",0x2),
0x801BF89C:("sCUpTimer","UNK_TYPE2","",0x2),
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),
0x801BF8A0:("sMagicMeterOutlinePrimRed","UNK_TYPE2","",0x2),
0x801BF8A4:("sMagicMeterOutlinePrimGreen","UNK_TYPE2","",0x2),
0x801BF8A8:("sMagicMeterOutlinePrimBlue","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),
@ -3434,7 +3434,7 @@
0x801DE868:("D_801DE868","f32","",0x4),
0x801DE86C:("jtbl_801DE86C","UNK_PTR","",0x4),
0x801DE884:("D_801DE884","f32","",0x4),
0x801DE890:("D_801DE890","UNK_TYPE1","",0x1),
0x801DE890:("gCircleTex","UNK_TYPE1","",0x1),
0x801DF090:("D_801DF090","f32","",0x4),
0x801DF094:("D_801DF094","f32","",0x4),
0x801DF0A0:("D_801DF0A0","f32","",0x4),

View File

@ -283,6 +283,7 @@ wordReplace = {
"Actor_IsFacingPlayerAndWithinRange": "Actor_IsFacingAndNearPlayer",
"func_800BC8B8": "Actor_DrawDoorLock",
"func_800B86C8": "Actor_ChangeFocus",
"func_800B90F4": "Actor_DeactivateLens",
"zelda_malloc": "ZeldaArena_Malloc",
"zelda_mallocR": "ZeldaArena_MallocR",
"zelda_realloc": "ZeldaArena_Realloc",
@ -498,6 +499,9 @@ wordReplace = {
"func_801159c0": "Health_GiveHearts",
"func_801159EC": "Rupees_ChangeBy",
"func_80115A14": "Inventory_ChangeAmmo",
"Parameter_AddMagic": "Magic_Add",
"func_80115D5C": "Magic_Reset",
"func_80115DB4": "Magic_Consume",
"func_8013EC44": "Rumble_Override",
"func_8013ECE0": "Rumble_Request",
"func_8017D2FC": "Math3D_LineSegVsPlane",
@ -648,8 +652,8 @@ wordReplace = {
"gSaveContext.naviTimer": "gSaveContext.save.playerData.tatlTimer",
"gSaveContext.tatlTimer": "gSaveContext.save.playerData.tatlTimer",
"gSaveContext.rupees": "gSaveContext.save.playerData.rupees",
"gSaveContext.magicAcquired": "gSaveContext.save.playerData.magicAcquired",
"gSaveContext.doubleMagic": "gSaveContext.save.playerData.doubleMagic",
"gSaveContext.magicAcquired": "gSaveContext.save.playerData.isMagicAcquired",
"gSaveContext.doubleMagic": "gSaveContext.save.playerData.isDoubleMagicAcquired",
"gSaveContext.doubleDefense": "gSaveContext.save.playerData.doubleDefense",
"gSaveContext.playerName": "gSaveContext.save.playerData.playerName",
"gSaveContext.inventory": "gSaveContext.save.inventory",
@ -671,6 +675,11 @@ wordReplace = {
"gSaveContext.unk_1016": "gSaveContext.jinxTimer",
"gSaveContext.unk_3F58": "gSaveContext.sunsSongState",
"gSaveContext.unk_48C8": "gSaveContext.dungeonIndex",
"gSaveContext.save.playerData.magicAcquired": "gSaveContext.save.playerData.isMagicAcquired",
"gSaveContext.save.playerDatadoubleMagic": "gSaveContext.save.playerData.isDoubleMagicAcquired",
"gSaveContext.unk_3F28": "gSaveContext.magicState",
"gSaveContext.unk_3F30": "gSaveContext.magicFillTarget",
"gSaveContext.unk_3F2C": "gSaveContext.magicFlag",
"gSaveContext.save.entranceIndex": "gSaveContext.save.entrance",
"player->unk_A87": "player->exchangeItemId",
@ -704,6 +713,9 @@ wordReplace = {
"play->msgCtx.unk12023": "play->msgCtx.stateTimer",
"play->msgCtx.unk1202A": "play->msgCtx.ocarinaMode",
"play->msgCtx.unk1202C": "play->msgCtx.ocarinaAction",
"play->msgCtx.unk11F04": "play->msgCtx.currentTextId",
"play->actorCtx.unk3": "play->actorCtx.lensActive",
"play->actorCtx.unk4": "play->actorCtx.lensMaskSize",
"play->nextEntranceIndex": "play->nextEntrance",
"play->sceneLoadFlag": "play->transitionTrigger",

View File

@ -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_DeactivateLens.s,Actor_DeactivateLens,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
@ -335,8 +335,8 @@ asm/non_matchings/code/z_actor/Actor_Draw.s,Actor_Draw,0x800B9A04,0xC6
asm/non_matchings/code/z_actor/func_800B9D1C.s,func_800B9D1C,0x800B9D1C,0x48
asm/non_matchings/code/z_actor/Actor_DrawAllSetup.s,Actor_DrawAllSetup,0x800B9E3C,0x4
asm/non_matchings/code/z_actor/Actor_RecordUndrawnActor.s,Actor_RecordUndrawnActor,0x800B9E4C,0xE
asm/non_matchings/code/z_actor/func_800B9E84.s,func_800B9E84,0x800B9E84,0x1C
asm/non_matchings/code/z_actor/func_800B9EF4.s,func_800B9EF4,0x800B9EF4,0xF9
asm/non_matchings/code/z_actor/Actor_DrawLensOverlay.s,Actor_DrawLensOverlay,0x800B9E84,0x1C
asm/non_matchings/code/z_actor/Actor_DrawLensActors.s,Actor_DrawLensActors,0x800B9EF4,0xF9
asm/non_matchings/code/z_actor/func_800BA2D8.s,func_800BA2D8,0x800BA2D8,0x9
asm/non_matchings/code/z_actor/func_800BA2FC.s,func_800BA2FC,0x800BA2FC,0x4C
asm/non_matchings/code/z_actor/Actor_DrawAll.s,Actor_DrawAll,0x800BA42C,0xB4
@ -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/Parameter_AddMagic.s,Parameter_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/func_80116348.s,func_80116348,0x80116348,0x174
asm/non_matchings/code/z_parameter/func_80116918.s,func_80116918,0x80116918,0x1B0
asm/non_matchings/code/z_parameter/Magic_Add.s,Magic_Add,0x80115D14,0x12
asm/non_matchings/code/z_parameter/Magic_Reset.s,Magic_Reset,0x80115D5C,0x16
asm/non_matchings/code/z_parameter/Magic_Consume.s,Magic_Consume,0x80115DB4,0xB5
asm/non_matchings/code/z_parameter/Magic_UpdateAddRequest.s,Magic_UpdateAddRequest,0x80116088,0x23
asm/non_matchings/code/z_parameter/Magic_FlashMeterBorder.s,Magic_FlashMeterBorder,0x80116114,0x8D
asm/non_matchings/code/z_parameter/Magic_Update.s,Magic_Update,0x80116348,0x174
asm/non_matchings/code/z_parameter/Magic_DrawMeter.s,Magic_DrawMeter,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/func_80117100.s,func_80117100,0x80117100,0x248

1 asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s EnAObj_Init 0x800A5AC0 0x2B
325 asm/non_matchings/code/z_actor/func_800B9084.s func_800B9084 0x800B9084 0x5
326 asm/non_matchings/code/z_actor/func_800B9098.s func_800B9098 0x800B9098 0x5
327 asm/non_matchings/code/z_actor/func_800B90AC.s func_800B90AC 0x800B90AC 0x12
328 asm/non_matchings/code/z_actor/func_800B90F4.s asm/non_matchings/code/z_actor/Actor_DeactivateLens.s func_800B90F4 Actor_DeactivateLens 0x800B90F4 0xB
329 asm/non_matchings/code/z_actor/func_800B9120.s func_800B9120 0x800B9120 0x14
330 asm/non_matchings/code/z_actor/Actor_InitContext.s Actor_InitContext 0x800B9170 0x71
331 asm/non_matchings/code/z_actor/Actor_SpawnSetupActors.s Actor_SpawnSetupActors 0x800B9334 0x56
335 asm/non_matchings/code/z_actor/func_800B9D1C.s func_800B9D1C 0x800B9D1C 0x48
336 asm/non_matchings/code/z_actor/Actor_DrawAllSetup.s Actor_DrawAllSetup 0x800B9E3C 0x4
337 asm/non_matchings/code/z_actor/Actor_RecordUndrawnActor.s Actor_RecordUndrawnActor 0x800B9E4C 0xE
338 asm/non_matchings/code/z_actor/func_800B9E84.s asm/non_matchings/code/z_actor/Actor_DrawLensOverlay.s func_800B9E84 Actor_DrawLensOverlay 0x800B9E84 0x1C
339 asm/non_matchings/code/z_actor/func_800B9EF4.s asm/non_matchings/code/z_actor/Actor_DrawLensActors.s func_800B9EF4 Actor_DrawLensActors 0x800B9EF4 0xF9
340 asm/non_matchings/code/z_actor/func_800BA2D8.s func_800BA2D8 0x800BA2D8 0x9
341 asm/non_matchings/code/z_actor/func_800BA2FC.s func_800BA2FC 0x800BA2FC 0x4C
342 asm/non_matchings/code/z_actor/Actor_DrawAll.s Actor_DrawAll 0x800BA42C 0xB4
1648 asm/non_matchings/code/z_parameter/Health_GiveHearts.s Health_GiveHearts 0x801159C0 0xB
1649 asm/non_matchings/code/z_parameter/Rupees_ChangeBy.s Rupees_ChangeBy 0x801159EC 0xA
1650 asm/non_matchings/code/z_parameter/Inventory_ChangeAmmo.s Inventory_ChangeAmmo 0x80115A14 0xC0
1651 asm/non_matchings/code/z_parameter/Parameter_AddMagic.s asm/non_matchings/code/z_parameter/Magic_Add.s Parameter_AddMagic Magic_Add 0x80115D14 0x12
1652 asm/non_matchings/code/z_parameter/func_80115D5C.s asm/non_matchings/code/z_parameter/Magic_Reset.s func_80115D5C Magic_Reset 0x80115D5C 0x16
1653 asm/non_matchings/code/z_parameter/func_80115DB4.s asm/non_matchings/code/z_parameter/Magic_Consume.s func_80115DB4 Magic_Consume 0x80115DB4 0xB5
1654 asm/non_matchings/code/z_parameter/func_80116088.s asm/non_matchings/code/z_parameter/Magic_UpdateAddRequest.s func_80116088 Magic_UpdateAddRequest 0x80116088 0x23
1655 asm/non_matchings/code/z_parameter/func_80116114.s asm/non_matchings/code/z_parameter/Magic_FlashMeterBorder.s func_80116114 Magic_FlashMeterBorder 0x80116114 0x8D
1656 asm/non_matchings/code/z_parameter/func_80116348.s asm/non_matchings/code/z_parameter/Magic_Update.s func_80116348 Magic_Update 0x80116348 0x174
1657 asm/non_matchings/code/z_parameter/func_80116918.s asm/non_matchings/code/z_parameter/Magic_DrawMeter.s func_80116918 Magic_DrawMeter 0x80116918 0x1B0
1658 asm/non_matchings/code/z_parameter/func_80116FD8.s func_80116FD8 0x80116FD8 0x38
1659 asm/non_matchings/code/z_parameter/func_801170B8.s func_801170B8 0x801170B8 0x12
1660 asm/non_matchings/code/z_parameter/func_80117100.s func_80117100 0x80117100 0x248