mirror of https://github.com/zeldaret/mm.git
`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:
parent
85e141128b
commit
6451bcf158
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
|
|
|
|||
107
include/regs.h
107
include/regs.h
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -500,7 +500,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
if (play->gameOverCtx.state != 0) {
|
||||
if (play->gameOverCtx.state != GAMEOVER_INACTIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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",),
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
Loading…
Reference in New Issue