mirror of https://github.com/zeldaret/mm.git
`z_parameter`: Time (1 non-matching) (#1144)
* import time docs * cleanup * fix display list * missed one * three-day events * PR Suggestions and cleanup * adjust comment * more macros * PR Suggestions * move InterfaceContext
This commit is contained in:
parent
1792268c94
commit
f92c4e6b02
|
|
@ -1383,9 +1383,9 @@ void func_800FD928(s32 param_1);
|
|||
// void func_800FDC94(void);
|
||||
// void func_800FE390(void);
|
||||
// void func_800FE3E0(void);
|
||||
void func_800FE484(void);
|
||||
s32 func_800FE498(void);
|
||||
// void func_800FE4A8(void);
|
||||
void Environment_StopTime(void);
|
||||
void Environment_StartTime(void);
|
||||
u8 Environment_IsTimeStopped(void);
|
||||
u32 func_800FE4B8(PlayState* play);
|
||||
// void func_800FE590(void);
|
||||
// void func_800FE5D0(void);
|
||||
|
|
@ -1707,7 +1707,7 @@ Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth,
|
|||
|
||||
void Interface_StartTimer(s16 timerId, s16 seconds);
|
||||
void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState);
|
||||
void func_8010EE74(PlayState* play, s32 day);
|
||||
void Interface_NewDay(PlayState* play, s32 day);
|
||||
void Interface_SetHudVisibility(u16 hudVisibility);
|
||||
void func_80110038(PlayState* play);
|
||||
// void func_80111CB4(void);
|
||||
|
|
|
|||
|
|
@ -48,10 +48,13 @@
|
|||
#define DAY_LENGTH (CLOCK_TIME(24, 0))
|
||||
|
||||
#define TIME_TO_MINUTES_F(time) ((time) * ((24.0f * 60.0f) / 0x10000)) // 0.021972656f
|
||||
#define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f)))
|
||||
|
||||
#define TIME_TO_MINUTES_ALT_F(time) ((time) / (0x10000 / (24.0f * 60.0f)))
|
||||
|
||||
#define TIME_TO_SECONDS_F(time) ((time) * ((24.0f * 60.0f * 60.0f) / 0x10000))
|
||||
|
||||
#define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f)))
|
||||
#define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000))
|
||||
#define CLOCK_TIME_ALT2_F(hr, min) ((((hr) + (min) / 60.0f) * 60.0f) / (24.0f * 60.0f / 0x10000))
|
||||
|
||||
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
|
||||
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
|
||||
|
|
|
|||
|
|
@ -43,15 +43,23 @@
|
|||
#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_TIME_SPEED REG(15)
|
||||
#define R_RUN_SPEED_LIMIT REG(45)
|
||||
|
||||
#define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT
|
||||
#define R_UPDATE_RATE SREG(30)
|
||||
#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_PAUSE_BG_PRERENDER_STATE SREG(94)
|
||||
|
||||
#define R_PLAY_FILL_SCREEN_ON MREG(64)
|
||||
#define R_PLAY_FILL_SCREEN_R MREG(65)
|
||||
#define R_PLAY_FILL_SCREEN_G MREG(66)
|
||||
#define R_PLAY_FILL_SCREEN_B MREG(67)
|
||||
#define R_PLAY_FILL_SCREEN_ALPHA MREG(68)
|
||||
|
||||
#define R_PAUSE_WORLD_MAP_YAW YREG(24)
|
||||
#define R_PAUSE_WORLD_MAP_Y_OFFSET YREG(25)
|
||||
#define R_PAUSE_WORLD_MAP_DEPTH YREG(26)
|
||||
|
|
@ -60,6 +68,7 @@
|
|||
#define R_PAUSE_DBG_QUEST_CURSOR_Y YREG(71)
|
||||
#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)
|
||||
|
|
@ -76,21 +85,26 @@
|
|||
#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_PAUSE_DBG_MAP_CLOUD_ON XREG(50)
|
||||
#define R_PAUSE_DBG_MAP_CLOUD_X XREG(52)
|
||||
#define R_PAUSE_DBG_MAP_CLOUD_Y XREG(53)
|
||||
#define R_MOON_CRASH_TIMER_Y XREG(80)
|
||||
#define R_MOON_CRASH_TIMER_X XREG(81)
|
||||
#define R_PAUSE_OWLWARP_ALPHA XREG(87)
|
||||
#define R_STORY_FILL_SCREEN_ALPHA XREG(91)
|
||||
#define R_REVERSE_FLOOR_INDEX XREG(94)
|
||||
#define R_MINIMAP_DISABLED XREG(95)
|
||||
|
||||
#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_THREE_DAY_CLOCK_Y_POS XREG(43)
|
||||
#define R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF XREG(44)
|
||||
#define R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF XREG(45)
|
||||
#define R_PAUSE_DBG_MAP_CLOUD_ON XREG(50)
|
||||
#define R_PAUSE_DBG_MAP_CLOUD_X XREG(52)
|
||||
#define R_PAUSE_DBG_MAP_CLOUD_Y XREG(53)
|
||||
#define R_MOON_CRASH_TIMER_Y XREG(80)
|
||||
#define R_MOON_CRASH_TIMER_X XREG(81)
|
||||
#define R_PAUSE_OWLWARP_ALPHA XREG(87)
|
||||
#define R_STORY_FILL_SCREEN_ALPHA XREG(91)
|
||||
#define R_REVERSE_FLOOR_INDEX XREG(94)
|
||||
#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)
|
||||
|
|
@ -98,6 +112,7 @@
|
|||
#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)
|
||||
|
|
@ -111,9 +126,4 @@
|
|||
#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)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -705,11 +705,11 @@ extern UNK_PTR D_801BF5C0;
|
|||
// extern UNK_TYPE1 D_801BFB14;
|
||||
// extern UNK_TYPE1 D_801BFB1C;
|
||||
// extern UNK_TYPE1 D_801BFB24;
|
||||
// extern UNK_TYPE2 D_801BFB2C;
|
||||
// extern UNK_TYPE2 sThreeDayClockAlpha;
|
||||
// extern UNK_TYPE2 D_801BFB30;
|
||||
// extern UNK_TYPE2 D_801BFB34;
|
||||
// extern UNK_TYPE1 D_801BFB38;
|
||||
// extern UNK_TYPE1 D_801BFB6C;
|
||||
// extern UNK_TYPE1 sThreeDayClockHours;
|
||||
// extern UNK_TYPE1 sThreeDayClockHourTextures;
|
||||
// extern UNK_TYPE2 D_801BFBCC;
|
||||
// extern UNK_TYPE2 D_801BFBD0;
|
||||
// extern UNK_TYPE2 D_801BFBD4;
|
||||
|
|
@ -728,7 +728,7 @@ extern UNK_PTR D_801BF5C0;
|
|||
// extern UNK_TYPE1 D_801BFC08;
|
||||
// extern UNK_TYPE1 D_801BFC0C;
|
||||
// extern UNK_TYPE1 D_801BFC10;
|
||||
// extern UNK_TYPE1 D_801BFC14;
|
||||
// extern UNK_TYPE1 sFinalHoursDigitTextures;
|
||||
// extern UNK_TYPE1 D_801BFC40;
|
||||
// extern UNK_TYPE2 sTimerStateTimer;
|
||||
// extern UNK_TYPE2 sTimerDigits;
|
||||
|
|
|
|||
106
include/z64.h
106
include/z64.h
|
|
@ -466,106 +466,6 @@ typedef struct {
|
|||
/* 0x2CA */ s16 unk_2CA; // Uses OwlWarpId enum for Owl Warp. Never set.
|
||||
} PauseContext; // size = 0x2D0
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ View view;
|
||||
/* 0x168 */ Vtx* actionVtx;
|
||||
/* 0x16C */ Vtx* beatingHeartVtx;
|
||||
/* 0x170 */ u8* parameterSegment;
|
||||
/* 0x174 */ u8* doActionSegment;
|
||||
/* 0x178 */ u8* iconItemSegment;
|
||||
/* 0x17C */ u8* mapSegment;
|
||||
/* 0x180 */ u8* unk_180;
|
||||
/* 0x184 */ DmaRequest dmaRequest_184;
|
||||
/* 0x1A4 */ DmaRequest dmaRequest_1A4;
|
||||
/* 0x1C4 */ DmaRequest dmaRequest_1C4;
|
||||
/* 0x1E4 */ OSMesgQueue loadQueue;
|
||||
/* 0x1FC */ OSMesg loadMsg;
|
||||
/* 0x200 */ Viewport viewport;
|
||||
/* 0x210 */ s16 unk_210;
|
||||
/* 0x212 */ u16 unk_212;
|
||||
/* 0x214 */ u16 unk_214;
|
||||
/* 0x218 */ f32 unk_218;
|
||||
/* 0x21C */ s16 unk_21C;
|
||||
/* 0x21E */ s16 bButtonDoAction;
|
||||
/* 0x220 */ s16 unk_220;
|
||||
/* 0x222 */ s16 unk_222;
|
||||
/* 0x224 */ s16 unk_224;
|
||||
/* 0x226 */ s16 lifeColorChange;
|
||||
/* 0x228 */ s16 lifeColorChangeDirection;
|
||||
/* 0x22A */ s16 beatingHeartPrim[3];
|
||||
/* 0x230 */ s16 beatingHeartEnv[3];
|
||||
/* 0x236 */ s16 heartsPrimR[2];
|
||||
/* 0x23A */ s16 heartsPrimG[2];
|
||||
/* 0x23E */ s16 heartsPrimB[2];
|
||||
/* 0x242 */ s16 heartsEnvR[2];
|
||||
/* 0x246 */ s16 heartsEnvG[2];
|
||||
/* 0x24A */ s16 heartsEnvB[2];
|
||||
/* 0x24E */ s16 health;
|
||||
/* 0x250 */ s16 unkTimer;
|
||||
/* 0x252 */ s16 lifeSizeChange;
|
||||
/* 0x254 */ s16 lifeSizeChangeDirection; // 1 means shrinking, 0 growing
|
||||
/* 0x256 */ s16 unk_256;
|
||||
/* 0x258 */ s16 magicConsumptionTimer; // For certain magic states, 1 unit of magic is consumed every time the timer reaches 0
|
||||
/* 0x25A */ u8 numHorseBoosts;
|
||||
/* 0x25C */ u16 minigamePoints; // Points to add to the minigame score. Reset to 0 every frame.
|
||||
/* 0x25E */ u16 minigameHiddenPoints; // Points to add to the secondary set of minigame points not displayed. Reset to 0 every frame.
|
||||
/* 0x260 */ u16 minigameAmmo;
|
||||
/* 0x262 */ u16 minigameUnusedPoints; // Associated with other minigame points, unused
|
||||
/* 0x264 */ s16 unk_264;
|
||||
/* 0x266 */ s16 aAlpha;
|
||||
/* 0x268 */ s16 bAlpha;
|
||||
/* 0x26A */ s16 cLeftAlpha;
|
||||
/* 0x26C */ s16 cDownAlpha;
|
||||
/* 0x26E */ s16 cRightAlpha;
|
||||
/* 0x270 */ s16 healthAlpha;
|
||||
/* 0x272 */ s16 magicAlpha;
|
||||
/* 0x274 */ s16 minimapAlpha;
|
||||
/* 0x276 */ s16 startAlpha;
|
||||
/* 0x278 */ s16 unk_278;
|
||||
/* 0x27A */ s16 dungeonOrBossAreaMapIndex;
|
||||
/* 0x27C */ s16 mapRoomNum;
|
||||
/* 0x27E */ u8 unk_27E;
|
||||
/* 0x27F */ u8 unk_27F;
|
||||
/* 0x280 */ u8 minigameState;
|
||||
/* 0x282 */ s16 minigameCountdownAlpha;
|
||||
/* 0x284 */ s16 minigameCountdownScale;
|
||||
/* 0x286 */ s16 perfectLettersOn;
|
||||
/* 0x288 */ s16 perfectLettersType;
|
||||
/* 0x28A */ s16 perfectLettersState[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x29A */ u16 perfectLettersAngles[PERFECT_LETTERS_NUM_LETTERS]; // Angle that follows the projectory of an ellipse
|
||||
/* 0x2AA */ s16 perfectLettersOffsetX[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x2BC */ f32 perfectLettersSemiAxisX[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x2DC */ f32 perfectLettersSemiAxisY[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x2FC */ s16 perfectLettersPrimColor[4];
|
||||
/* 0x304 */ s16 perfectLettersCount;
|
||||
/* 0x306 */ s16 perfectLettersUnused;
|
||||
/* 0x308 */ s16 perfectLettersColorIndex;
|
||||
/* 0x30A */ s16 perfectLettersColorTimer;
|
||||
/* 0x30C */ s16 perfectLettersTimer;
|
||||
struct {
|
||||
/* 0x30E */ u8 unk_30E; // "h_gauge"
|
||||
/* 0x30F */ u8 bButton;
|
||||
/* 0x310 */ u8 aButton;
|
||||
/* 0x311 */ u8 tradeItems;
|
||||
/* 0x312 */ u8 unk_312;
|
||||
/* 0x313 */ u8 unk_313;
|
||||
/* 0x314 */ u8 unk_314;
|
||||
/* 0x315 */ u8 songOfSoaring;
|
||||
/* 0x316 */ u8 songOfStorms;
|
||||
/* 0x317 */ u8 unk_317;
|
||||
/* 0x318 */ u8 pictographBox;
|
||||
/* 0x319 */ u8 all; // "another"; enables all item restrictions
|
||||
} restrictions; // size = 0xC
|
||||
/* 0x31A */ u8 storyState;
|
||||
/* 0x31B */ u8 storyType;
|
||||
/* 0x31C */ u8 unk_31C;
|
||||
/* 0x320 */ OSMesgQueue unk_320;
|
||||
/* 0x338 */ OSMesg unk_338;
|
||||
/* 0x33C */ void* unk_33C;
|
||||
/* 0x340 */ u32 unk_340;
|
||||
/* 0x344 */ u32 unk_344;
|
||||
} InterfaceContext; // size = 0x348
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ void* loadedRamAddr;
|
||||
/* 0x04 */ uintptr_t vromStart;
|
||||
|
|
@ -584,10 +484,8 @@ typedef enum {
|
|||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 unk_0;
|
||||
/* 0x02 */ u16 timeIncrement;
|
||||
/* 0x04 */ f32 unk_4;
|
||||
/* 0x08 */ f32 unk_8;
|
||||
/* 0x0C */ f32 unk_C;
|
||||
/* 0x02 */ u16 sceneTimeSpeed;
|
||||
/* 0x04 */ Vec3f sunPos;
|
||||
/* 0x10 */ u8 unk_10;
|
||||
/* 0x11 */ u8 unk_11;
|
||||
/* 0x12 */ u8 unk_12;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define Z64INTERFACE_H
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "z64view.h"
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ MINIGAME_STATE_NONE,
|
||||
|
|
@ -38,4 +39,104 @@ typedef enum {
|
|||
#define PERFECT_LETTERS_NUM_LETTERS 8
|
||||
#define PERFECT_LETTERS_ANGLE_PER_LETTER (0x10000 / PERFECT_LETTERS_NUM_LETTERS)
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ View view;
|
||||
/* 0x168 */ Vtx* actionVtx;
|
||||
/* 0x16C */ Vtx* beatingHeartVtx;
|
||||
/* 0x170 */ u8* parameterSegment;
|
||||
/* 0x174 */ u8* doActionSegment;
|
||||
/* 0x178 */ u8* iconItemSegment;
|
||||
/* 0x17C */ u8* mapSegment;
|
||||
/* 0x180 */ u8* unk_180;
|
||||
/* 0x184 */ DmaRequest dmaRequest_184;
|
||||
/* 0x1A4 */ DmaRequest dmaRequest_1A4;
|
||||
/* 0x1C4 */ DmaRequest dmaRequest_1C4;
|
||||
/* 0x1E4 */ OSMesgQueue loadQueue;
|
||||
/* 0x1FC */ OSMesg loadMsg;
|
||||
/* 0x200 */ Viewport viewport;
|
||||
/* 0x210 */ s16 unk_210;
|
||||
/* 0x212 */ u16 unk_212;
|
||||
/* 0x214 */ u16 unk_214;
|
||||
/* 0x218 */ f32 unk_218;
|
||||
/* 0x21C */ s16 unk_21C;
|
||||
/* 0x21E */ s16 bButtonDoAction;
|
||||
/* 0x220 */ s16 unk_220;
|
||||
/* 0x222 */ s16 unk_222;
|
||||
/* 0x224 */ s16 unk_224;
|
||||
/* 0x226 */ s16 lifeColorChange;
|
||||
/* 0x228 */ s16 lifeColorChangeDirection;
|
||||
/* 0x22A */ s16 beatingHeartPrim[3];
|
||||
/* 0x230 */ s16 beatingHeartEnv[3];
|
||||
/* 0x236 */ s16 heartsPrimR[2];
|
||||
/* 0x23A */ s16 heartsPrimG[2];
|
||||
/* 0x23E */ s16 heartsPrimB[2];
|
||||
/* 0x242 */ s16 heartsEnvR[2];
|
||||
/* 0x246 */ s16 heartsEnvG[2];
|
||||
/* 0x24A */ s16 heartsEnvB[2];
|
||||
/* 0x24E */ s16 health;
|
||||
/* 0x250 */ s16 unkTimer;
|
||||
/* 0x252 */ s16 lifeSizeChange;
|
||||
/* 0x254 */ s16 lifeSizeChangeDirection; // 1 means shrinking, 0 growing
|
||||
/* 0x256 */ s16 unk_256;
|
||||
/* 0x258 */ s16 magicConsumptionTimer; // For certain magic states, 1 unit of magic is consumed every time the timer reaches 0
|
||||
/* 0x25A */ u8 numHorseBoosts;
|
||||
/* 0x25C */ u16 minigamePoints; // Points to add to the minigame score. Reset to 0 every frame.
|
||||
/* 0x25E */ u16 minigameHiddenPoints; // Points to add to the secondary set of minigame points not displayed. Reset to 0 every frame.
|
||||
/* 0x260 */ u16 minigameAmmo;
|
||||
/* 0x262 */ u16 minigameUnusedPoints; // Associated with other minigame points, unused
|
||||
/* 0x264 */ s16 unk_264;
|
||||
/* 0x266 */ s16 aAlpha;
|
||||
/* 0x268 */ s16 bAlpha;
|
||||
/* 0x26A */ s16 cLeftAlpha;
|
||||
/* 0x26C */ s16 cDownAlpha;
|
||||
/* 0x26E */ s16 cRightAlpha;
|
||||
/* 0x270 */ s16 healthAlpha;
|
||||
/* 0x272 */ s16 magicAlpha;
|
||||
/* 0x274 */ s16 minimapAlpha;
|
||||
/* 0x276 */ s16 startAlpha;
|
||||
/* 0x278 */ s16 unk_278;
|
||||
/* 0x27A */ s16 dungeonOrBossAreaMapIndex;
|
||||
/* 0x27C */ s16 mapRoomNum;
|
||||
/* 0x27E */ u8 unk_27E;
|
||||
/* 0x27F */ u8 unk_27F;
|
||||
/* 0x280 */ u8 minigameState;
|
||||
/* 0x282 */ s16 minigameCountdownAlpha;
|
||||
/* 0x284 */ s16 minigameCountdownScale;
|
||||
/* 0x286 */ s16 perfectLettersOn;
|
||||
/* 0x288 */ s16 perfectLettersType;
|
||||
/* 0x28A */ s16 perfectLettersState[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x29A */ u16 perfectLettersAngles[PERFECT_LETTERS_NUM_LETTERS]; // Angle that follows the projectory of an ellipse
|
||||
/* 0x2AA */ s16 perfectLettersOffsetX[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x2BC */ f32 perfectLettersSemiAxisX[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x2DC */ f32 perfectLettersSemiAxisY[PERFECT_LETTERS_NUM_LETTERS];
|
||||
/* 0x2FC */ s16 perfectLettersPrimColor[4];
|
||||
/* 0x304 */ s16 perfectLettersCount;
|
||||
/* 0x306 */ s16 perfectLettersUnused;
|
||||
/* 0x308 */ s16 perfectLettersColorIndex;
|
||||
/* 0x30A */ s16 perfectLettersColorTimer;
|
||||
/* 0x30C */ s16 perfectLettersTimer;
|
||||
struct {
|
||||
/* 0x30E */ u8 unk_30E; // "h_gauge"
|
||||
/* 0x30F */ u8 bButton;
|
||||
/* 0x310 */ u8 aButton;
|
||||
/* 0x311 */ u8 tradeItems;
|
||||
/* 0x312 */ u8 unk_312;
|
||||
/* 0x313 */ u8 unk_313;
|
||||
/* 0x314 */ u8 unk_314;
|
||||
/* 0x315 */ u8 songOfSoaring;
|
||||
/* 0x316 */ u8 songOfStorms;
|
||||
/* 0x317 */ u8 unk_317;
|
||||
/* 0x318 */ u8 pictographBox;
|
||||
/* 0x319 */ u8 all; // "another"; enables all item restrictions
|
||||
} restrictions; // size = 0xC
|
||||
/* 0x31A */ u8 storyState;
|
||||
/* 0x31B */ u8 storyType;
|
||||
/* 0x31C */ u8 unk_31C;
|
||||
/* 0x320 */ OSMesgQueue unk_320;
|
||||
/* 0x338 */ OSMesg unk_338;
|
||||
/* 0x33C */ void* unk_33C;
|
||||
/* 0x340 */ u32 unk_340;
|
||||
/* 0x344 */ u32 unk_344;
|
||||
} InterfaceContext; // size = 0x348
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ typedef struct Save {
|
|||
/* 0x000C */ u16 time; // "zelda_time"
|
||||
/* 0x000E */ u16 owlSaveLocation;
|
||||
/* 0x0010 */ s32 isNight; // "asahiru_fg"
|
||||
/* 0x0014 */ s32 daySpeed; // "change_zelda_time"
|
||||
/* 0x0014 */ s32 timeSpeedOffset; // "change_zelda_time"
|
||||
/* 0x0018 */ s32 day; // "totalday"
|
||||
/* 0x001C */ s32 daysElapsed; // "eventday"
|
||||
/* 0x0020 */ u8 playerForm; // "player_character"
|
||||
|
|
@ -396,6 +396,11 @@ typedef enum SunsSongState {
|
|||
|
||||
#define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5)
|
||||
|
||||
// The day begins at CLOCK_TIME(6, 0) so it must be offset.
|
||||
#define TIME_UNTIL_MOON_CRASH \
|
||||
((4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)));
|
||||
#define TIME_UNTIL_NEW_DAY (DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)));
|
||||
|
||||
#define GET_PLAYER_FORM ((void)0, gSaveContext.save.playerForm)
|
||||
|
||||
#define SLOT(item) gItemSlots[item]
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ typedef struct {
|
|||
/* 0x2 */ UNK_TYPE1 pad2[2];
|
||||
/* 0x4 */ u8 hour;
|
||||
/* 0x5 */ u8 min;
|
||||
/* 0x6 */ u8 unk6;
|
||||
/* 0x6 */ u8 timeSpeed;
|
||||
} SCmdTimeSettings; // size = 0x7
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
|
|
@ -252,9 +252,9 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
|
|||
break;
|
||||
case 0x12:
|
||||
if (!gSaveContext.save.isNight) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)REG(15);
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)R_TIME_SPEED;
|
||||
} else {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)(2 * REG(15));
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)(2 * R_TIME_SPEED);
|
||||
}
|
||||
break;
|
||||
case 0x13:
|
||||
|
|
@ -326,10 +326,10 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
|
|||
if (csCtx->frames != D_801BB15C) {
|
||||
D_801BB15C = csCtx->frames;
|
||||
|
||||
if (REG(15) != 0) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
|
||||
if (R_TIME_SPEED != 0) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
|
||||
gSaveContext.save.time =
|
||||
((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
|
||||
((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -124,11 +124,11 @@
|
|||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE3E0.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE484.s")
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopTime.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE498.s")
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StartTime.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4A8.s")
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4B8.s")
|
||||
|
||||
|
|
|
|||
|
|
@ -212,13 +212,9 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16*
|
|||
s16 i;
|
||||
|
||||
if (arg1 == 0xCF) {
|
||||
// Calculates the time left before the moon crashes.
|
||||
// The day begins at CLOCK_TIME(6, 0) so it must be offset.
|
||||
timeLeft = (4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
|
||||
timeLeft = TIME_UNTIL_MOON_CRASH;
|
||||
} else {
|
||||
// Calculates the time left before a new day.
|
||||
// The day begins at CLOCK_TIME(6, 0) so it must be offset.
|
||||
timeLeft = DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
|
||||
timeLeft = TIME_UNTIL_NEW_DAY;
|
||||
}
|
||||
|
||||
timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft);
|
||||
|
|
|
|||
|
|
@ -932,7 +932,28 @@ u32 Interface_GetCompressedTimerDigits(s16 timerId) {
|
|||
(timerArr[4] << 4) | timerArr[5];
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010EE74.s")
|
||||
void Interface_NewDay(PlayState* play, s32 day) {
|
||||
s32 pad;
|
||||
s16 i = day - 1;
|
||||
|
||||
// i is used to store dayMinusOne
|
||||
if ((i < 0) || (i >= 3)) {
|
||||
i = 0;
|
||||
}
|
||||
|
||||
// Loads day number from week_static for the three-day clock
|
||||
DmaMgr_SendRequest0((u32)play->interfaceCtx.doActionSegment + 0x780,
|
||||
(u32)SEGMENT_ROM_START(week_static) + i * 0x510, 0x510);
|
||||
|
||||
// i is used to store sceneId
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.permanentSceneFlags); i++) {
|
||||
gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
|
||||
gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
|
||||
gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
|
||||
gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
|
||||
gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
|
||||
}
|
||||
}
|
||||
|
||||
void Interface_SetHudVisibility(u16 hudVisibility) {
|
||||
if (gSaveContext.hudVisibility != hudVisibility) {
|
||||
|
|
@ -3088,17 +3109,550 @@ s16 D_801BFB24[] = { 0, 255, 100, 0 }; // magicArrowEffectsB
|
|||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80119030.s")
|
||||
|
||||
s16 D_801BFB2C = 255;
|
||||
/**
|
||||
* Draws either the analog three-day clock or the digital final-hours clock
|
||||
*/
|
||||
#ifdef NON_MATCHING
|
||||
void Interface_DrawClock(PlayState* play) {
|
||||
static s16 sThreeDayClockAlpha = 255;
|
||||
static s16 D_801BFB30 = 0; // sClockAlphaTimer1
|
||||
static s16 D_801BFB34 = 0; // sClockAlphaTimer2
|
||||
static u16 sThreeDayClockHours[] = {
|
||||
CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0),
|
||||
CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0),
|
||||
CLOCK_TIME(10, 0), CLOCK_TIME(11, 0), CLOCK_TIME(12, 0), CLOCK_TIME(13, 0), CLOCK_TIME(14, 0),
|
||||
CLOCK_TIME(15, 0), CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), CLOCK_TIME(19, 0),
|
||||
CLOCK_TIME(20, 0), CLOCK_TIME(21, 0), CLOCK_TIME(22, 0), CLOCK_TIME(23, 0), CLOCK_TIME(24, 0) - 1,
|
||||
};
|
||||
static TexturePtr sThreeDayClockHourTextures[] = {
|
||||
gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex,
|
||||
gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex,
|
||||
gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex,
|
||||
gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex,
|
||||
gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex,
|
||||
gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex,
|
||||
};
|
||||
static s16 D_801BFBCC = 0; // sClockInvDiamondPrimRed
|
||||
static s16 D_801BFBD0 = 0; // sClockInvDiamondPrimGreen
|
||||
static s16 D_801BFBD4 = 255; // sClockInvDiamondPrimBlue
|
||||
static s16 D_801BFBD8 = 0; // sClockInvDiamondEnvRed
|
||||
static s16 D_801BFBDC = 0; // sClockInvDiamondEnvGreen
|
||||
static s16 D_801BFBE0 = 0; // sClockInvDiamondEnvBlue
|
||||
static s16 D_801BFBE4 = 15; // sClockInvDiamondTimer
|
||||
static s16 D_801BFBE8 = 0; // sClockInvDiamondTargetIndex
|
||||
static s16 D_801BFBEC[] = { 100, 0 }; // sClockInvDiamondPrimRedTargets
|
||||
static s16 D_801BFBF0[] = { 205, 155 }; // sClockInvDiamondPrimGreenTargets
|
||||
static s16 D_801BFBF4[] = { 255, 255 }; // sClockInvDiamondPrimBlueTargets
|
||||
static s16 D_801BFBF8[] = { 30, 0 }; // sClockInvDiamondEnvRedTargets
|
||||
static s16 D_801BFBFC[] = { 30, 0 }; // sClockInvDiamondEnvGreenTargets
|
||||
static s16 D_801BFC00[] = { 100, 0 }; // sClockInvDiamondEnvBlueTargets
|
||||
static s16 D_801BFC04[] = { 255, 0 }; // sFinalHoursClockDigitsRed
|
||||
static s16 D_801BFC08[] = { 100, 0 }; // sFinalHoursClockFrameEnvRedTargets
|
||||
static s16 D_801BFC0C[] = { 30, 0 }; // sFinalHoursClockFrameEnvGreenTargets
|
||||
static s16 D_801BFC10[] = { 100, 0 }; // sFinalHoursClockFrameEnvBlueTargets
|
||||
static TexturePtr sFinalHoursDigitTextures[] = {
|
||||
gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex,
|
||||
gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex,
|
||||
gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex,
|
||||
};
|
||||
// sFinalHoursDigitSlotPosXOffset
|
||||
static s16 D_801BFC40[] = {
|
||||
127, 136, 144, 151, 160, 168, 175, 184,
|
||||
};
|
||||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
MessageContext* msgCtx = &play->msgCtx;
|
||||
s16 sp1E6;
|
||||
f32 temp_f14;
|
||||
u32 timeUntilMoonCrash;
|
||||
f32 sp1D8;
|
||||
f32 timeInMinutes;
|
||||
f32 timeInSeconds;
|
||||
f32 sp1CC;
|
||||
s32 new_var;
|
||||
s16 sp1C6;
|
||||
s16 currentHour;
|
||||
u16 time;
|
||||
s16 temp;
|
||||
s16 colorStep;
|
||||
s16 finalHoursClockSlots[8]; // sp1AC
|
||||
s16 index;
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
if (R_TIME_SPEED != 0) {
|
||||
if ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) ||
|
||||
(msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
|
||||
(gSaveContext.gameMode == 3)) {
|
||||
if (!FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day < 4)) {
|
||||
/**
|
||||
* Changes Clock's transparancy depending if Player is moving or not and possibly other things
|
||||
*/
|
||||
if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) {
|
||||
if (func_801234D4(play)) {
|
||||
sThreeDayClockAlpha = 80;
|
||||
D_801BFB30 = 5;
|
||||
D_801BFB34 = 20;
|
||||
} else if (D_801BFB34 != 0) {
|
||||
D_801BFB34--;
|
||||
} else if (D_801BFB30 != 0) {
|
||||
colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / D_801BFB30;
|
||||
sThreeDayClockAlpha += colorStep;
|
||||
|
||||
if (sThreeDayClockAlpha >= 255) {
|
||||
sThreeDayClockAlpha = 255;
|
||||
D_801BFB30 = 0;
|
||||
}
|
||||
} else {
|
||||
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
|
||||
sThreeDayClockAlpha = 255;
|
||||
} else {
|
||||
sThreeDayClockAlpha = interfaceCtx->bAlpha;
|
||||
}
|
||||
D_801BFB34 = 0;
|
||||
D_801BFB30 = 0;
|
||||
}
|
||||
} else {
|
||||
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
|
||||
sThreeDayClockAlpha = 255;
|
||||
} else {
|
||||
sThreeDayClockAlpha = interfaceCtx->bAlpha;
|
||||
}
|
||||
D_801BFB34 = 0;
|
||||
D_801BFB30 = 0;
|
||||
}
|
||||
|
||||
if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
|
||||
|
||||
func_8012C654(play->state.gfxCtx);
|
||||
|
||||
/**
|
||||
* Draw Clock's Hour Lines
|
||||
*/
|
||||
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
|
||||
gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
|
||||
TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128,
|
||||
35, 1, 6, 0, 1 << 10, 1 << 10);
|
||||
|
||||
/**
|
||||
* Draw Clock's Border
|
||||
*/
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
|
||||
TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
//! @bug A texture height of 50 is given below. The texture is only 48 units height
|
||||
//! resulting in this reading into the next texture. This results in a white
|
||||
//! dot in the bottom center of the clock. For the three-day clock, this is
|
||||
//! covered by the diamond. However, it can be seen by the final-hours clock.
|
||||
OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50,
|
||||
1, 6, 0, 1 << 10, 1 << 10);
|
||||
|
||||
if (((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) &&
|
||||
(((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) {
|
||||
func_8012C8D4(play->state.gfxCtx);
|
||||
gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
} else {
|
||||
/**
|
||||
* Draw Three-Day Clock's Diamond
|
||||
*/
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
|
||||
// Time is slowed down to half speed with inverted song of time
|
||||
if (gSaveContext.save.timeSpeedOffset == -2) {
|
||||
// Clock diamond is blue and flashes white
|
||||
colorStep = ABS_ALT(D_801BFBCC - D_801BFBEC[D_801BFBE8]) / D_801BFBE4;
|
||||
if (D_801BFBCC >= D_801BFBEC[D_801BFBE8]) {
|
||||
D_801BFBCC -= colorStep;
|
||||
} else {
|
||||
D_801BFBCC += colorStep;
|
||||
}
|
||||
|
||||
colorStep = ABS_ALT(D_801BFBD0 - D_801BFBF0[D_801BFBE8]) / D_801BFBE4;
|
||||
if (D_801BFBD0 >= D_801BFBF0[D_801BFBE8]) {
|
||||
D_801BFBD0 -= colorStep;
|
||||
} else {
|
||||
D_801BFBD0 += colorStep;
|
||||
}
|
||||
|
||||
colorStep = ABS_ALT(D_801BFBD4 - D_801BFBF4[D_801BFBE8]) / D_801BFBE4;
|
||||
if (D_801BFBD4 >= D_801BFBF4[D_801BFBE8]) {
|
||||
D_801BFBD4 -= colorStep;
|
||||
} else {
|
||||
D_801BFBD4 += colorStep;
|
||||
}
|
||||
|
||||
colorStep = ABS_ALT(D_801BFBD8 - D_801BFBF8[D_801BFBE8]) / D_801BFBE4;
|
||||
if (D_801BFBD8 >= D_801BFBF8[D_801BFBE8]) {
|
||||
D_801BFBD8 -= colorStep;
|
||||
} else {
|
||||
D_801BFBD8 += colorStep;
|
||||
}
|
||||
|
||||
colorStep = ABS_ALT(D_801BFBDC - D_801BFBFC[D_801BFBE8]) / D_801BFBE4;
|
||||
if (D_801BFBDC >= D_801BFBFC[D_801BFBE8]) {
|
||||
D_801BFBDC -= colorStep;
|
||||
} else {
|
||||
D_801BFBDC += colorStep;
|
||||
}
|
||||
|
||||
colorStep = ABS_ALT(D_801BFBE0 - D_801BFC00[D_801BFBE8]) / D_801BFBE4;
|
||||
if (D_801BFBE0 >= D_801BFC00[D_801BFBE8]) {
|
||||
D_801BFBE0 -= colorStep;
|
||||
} else {
|
||||
D_801BFBE0 += colorStep;
|
||||
}
|
||||
|
||||
D_801BFBE4--;
|
||||
|
||||
if (D_801BFBE4 == 0) {
|
||||
D_801BFBCC = D_801BFBEC[D_801BFBE8];
|
||||
D_801BFBD0 = D_801BFBF0[D_801BFBE8];
|
||||
D_801BFBD4 = D_801BFBF4[D_801BFBE8];
|
||||
D_801BFBD8 = D_801BFBF8[D_801BFBE8];
|
||||
D_801BFBDC = D_801BFBFC[D_801BFBE8];
|
||||
D_801BFBE0 = D_801BFC00[D_801BFBE8];
|
||||
D_801BFBE4 = 15;
|
||||
D_801BFBE8 ^= 1;
|
||||
}
|
||||
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
|
||||
PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
|
||||
PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BFBCC, D_801BFBD0, 255, sThreeDayClockAlpha);
|
||||
gDPSetEnvColor(OVERLAY_DISP++, D_801BFBD8, D_801BFBDC, D_801BFBE0, 0);
|
||||
} else {
|
||||
// Clock diamond is green for regular timeSpeedOffset
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha);
|
||||
}
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40,
|
||||
32, 1 << 10, 1 << 10);
|
||||
|
||||
/**
|
||||
* Draw Three-Day Clock's Day-Number over Diamond
|
||||
*/
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27,
|
||||
137, 192, 48, 27, 1 << 10, 1 << 10);
|
||||
|
||||
/**
|
||||
* Draw Three-Day Clock's Star (for the Minute Tracker)
|
||||
*/
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
|
||||
if (D_801BF974 != 0) {
|
||||
D_801BF980 += 0.02f;
|
||||
D_801BF97C += 11;
|
||||
} else {
|
||||
D_801BF980 -= 0.02f;
|
||||
D_801BF97C -= 11;
|
||||
}
|
||||
|
||||
D_801BF978--;
|
||||
if (D_801BF978 == 0) {
|
||||
D_801BF978 = 10;
|
||||
D_801BF974 ^= 1;
|
||||
}
|
||||
|
||||
timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time);
|
||||
timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f;
|
||||
|
||||
func_8012C8D4(play->state.gfxCtx);
|
||||
|
||||
gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
if (sThreeDayClockAlpha != 255) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha);
|
||||
} else {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C);
|
||||
}
|
||||
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
|
||||
gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
|
||||
|
||||
Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY);
|
||||
Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0);
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, 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);
|
||||
gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cuts off Three-Day Clock's Sun and Moon when they dip below the clock
|
||||
*/
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880,
|
||||
R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f);
|
||||
|
||||
// determines the current hour
|
||||
for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) {
|
||||
if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker)
|
||||
*/
|
||||
time = gSaveContext.save.time;
|
||||
sp1D8 = Math_SinS(time) * -40.0f;
|
||||
temp_f14 = Math_CosS(time) * -34.0f;
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha);
|
||||
|
||||
Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0);
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0);
|
||||
|
||||
/**
|
||||
* Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker)
|
||||
*/
|
||||
sp1D8 = Math_SinS(time) * 40.0f;
|
||||
temp_f14 = Math_CosS(time) * 34.0f;
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha);
|
||||
|
||||
Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0);
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0);
|
||||
|
||||
/**
|
||||
* Cuts off Three-Day Clock's Hour Digits when they dip below the clock
|
||||
*/
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880,
|
||||
R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f);
|
||||
|
||||
/**
|
||||
* Draws Three-Day Clock's Hour Digit Above the Sun
|
||||
*/
|
||||
sp1CC = gSaveContext.save.time * 0.000096131f;
|
||||
|
||||
// Rotates Three-Day Clock's Hour Digit To Above the Sun
|
||||
Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY);
|
||||
gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
// Draws Three-Day Clock's Hour Digit Above the Sun
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
|
||||
TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha);
|
||||
gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0);
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0);
|
||||
|
||||
// Colours the Three-Day Clocks's Hour Digit Above the Sun
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
|
||||
gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0);
|
||||
|
||||
/**
|
||||
* Draws Three-Day Clock's Hour Digit Above the Moon
|
||||
*/
|
||||
// Rotates Three-Day Clock's Hour Digit To Above the Moon
|
||||
Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateZF(-sp1CC, MTXMODE_APPLY);
|
||||
gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
// Draws Three-Day Clock's Hour Digit Above the Moon
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
|
||||
TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha);
|
||||
gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0);
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0);
|
||||
|
||||
// Colours the Three-Day Clocks's Hour Digit Above the Moon
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha);
|
||||
gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0);
|
||||
|
||||
gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor);
|
||||
|
||||
// Final Hours
|
||||
if ((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) &&
|
||||
(((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) {
|
||||
if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) {
|
||||
// The Final Hours clock will flash red
|
||||
|
||||
colorStep =
|
||||
ABS_ALT(sFinalHoursClockDigitsRed - D_801BFC04[sFinalHoursClockColorTargetIndex]) /
|
||||
sFinalHoursClockColorTimer;
|
||||
if (sFinalHoursClockDigitsRed >= D_801BFC04[sFinalHoursClockColorTargetIndex]) {
|
||||
sFinalHoursClockDigitsRed -= colorStep;
|
||||
} else {
|
||||
sFinalHoursClockDigitsRed += colorStep;
|
||||
}
|
||||
|
||||
colorStep =
|
||||
ABS_ALT(sFinalHoursClockFrameEnvRed - D_801BFC08[sFinalHoursClockColorTargetIndex]) /
|
||||
sFinalHoursClockColorTimer;
|
||||
if (sFinalHoursClockFrameEnvRed >= D_801BFC08[sFinalHoursClockColorTargetIndex]) {
|
||||
sFinalHoursClockFrameEnvRed -= colorStep;
|
||||
} else {
|
||||
sFinalHoursClockFrameEnvRed += colorStep;
|
||||
}
|
||||
|
||||
colorStep =
|
||||
ABS_ALT(sFinalHoursClockFrameEnvGreen - D_801BFC0C[sFinalHoursClockColorTargetIndex]) /
|
||||
sFinalHoursClockColorTimer;
|
||||
if (sFinalHoursClockFrameEnvGreen >= D_801BFC0C[sFinalHoursClockColorTargetIndex]) {
|
||||
sFinalHoursClockFrameEnvGreen -= colorStep;
|
||||
} else {
|
||||
sFinalHoursClockFrameEnvGreen += colorStep;
|
||||
}
|
||||
|
||||
colorStep =
|
||||
ABS_ALT(sFinalHoursClockFrameEnvBlue - D_801BFC10[sFinalHoursClockColorTargetIndex]) /
|
||||
sFinalHoursClockColorTimer;
|
||||
if (sFinalHoursClockFrameEnvBlue >= D_801BFC10[sFinalHoursClockColorTargetIndex]) {
|
||||
sFinalHoursClockFrameEnvBlue -= colorStep;
|
||||
} else {
|
||||
sFinalHoursClockFrameEnvBlue += colorStep;
|
||||
}
|
||||
|
||||
sFinalHoursClockColorTimer--;
|
||||
|
||||
if (sFinalHoursClockColorTimer == 0) {
|
||||
sFinalHoursClockDigitsRed = D_801BFC04[sFinalHoursClockColorTargetIndex];
|
||||
sFinalHoursClockFrameEnvRed = D_801BFC08[sFinalHoursClockColorTargetIndex];
|
||||
sFinalHoursClockFrameEnvGreen = D_801BFC0C[sFinalHoursClockColorTargetIndex];
|
||||
sFinalHoursClockFrameEnvBlue = D_801BFC10[sFinalHoursClockColorTargetIndex];
|
||||
sFinalHoursClockColorTimer = 6;
|
||||
sFinalHoursClockColorTargetIndex ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
sp1E6 = sThreeDayClockAlpha;
|
||||
if (sp1E6 != 0) {
|
||||
sp1E6 = 255;
|
||||
}
|
||||
|
||||
func_8012C654(play->state.gfxCtx);
|
||||
|
||||
/**
|
||||
* Draws Final-Hours Clock's Frame
|
||||
*/
|
||||
gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
|
||||
gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
|
||||
PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
|
||||
PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6);
|
||||
gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen,
|
||||
sFinalHoursClockFrameEnvBlue, 0);
|
||||
|
||||
OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202,
|
||||
80, 13, 0, 0, 0, 1 << 10, 1 << 10);
|
||||
|
||||
finalHoursClockSlots[0] = 0;
|
||||
|
||||
timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH;
|
||||
|
||||
timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash);
|
||||
|
||||
// digits for hours
|
||||
finalHoursClockSlots[1] = timeInMinutes / 60.0f;
|
||||
finalHoursClockSlots[2] = timeInMinutes / 60.0f;
|
||||
|
||||
temp = (s32)timeInMinutes % 60;
|
||||
|
||||
while (finalHoursClockSlots[1] >= 10) {
|
||||
finalHoursClockSlots[0]++;
|
||||
finalHoursClockSlots[1] -= 10;
|
||||
}
|
||||
|
||||
// digits for minutes
|
||||
finalHoursClockSlots[3] = 0;
|
||||
finalHoursClockSlots[4] = temp;
|
||||
|
||||
while (finalHoursClockSlots[4] >= 10) {
|
||||
finalHoursClockSlots[3]++;
|
||||
finalHoursClockSlots[4] -= 10;
|
||||
}
|
||||
|
||||
// digits for seconds
|
||||
finalHoursClockSlots[6] = 0;
|
||||
finalHoursClockSlots[7] =
|
||||
timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) +
|
||||
(((void)0, temp) * ((f32)0x10000 / (24 * 60))));
|
||||
|
||||
while (finalHoursClockSlots[7] >= 10) {
|
||||
finalHoursClockSlots[6]++;
|
||||
finalHoursClockSlots[7] -= 10;
|
||||
}
|
||||
|
||||
// Colon separating hours from minutes and minutes from seconds
|
||||
finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10;
|
||||
|
||||
/**
|
||||
* Draws Final-Hours Clock's Digits
|
||||
*/
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6);
|
||||
gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0);
|
||||
|
||||
for (sp1C6 = 0; sp1C6 < 8; sp1C6++) {
|
||||
index = D_801BFC40[sp1C6];
|
||||
|
||||
OVERLAY_DISP =
|
||||
Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]],
|
||||
8, 8, index, 205, 8, 8, 1 << 10, 1 << 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
#else
|
||||
s16 sThreeDayClockAlpha = 255;
|
||||
s16 D_801BFB30 = 0;
|
||||
s16 D_801BFB34 = 0;
|
||||
u16 D_801BFB38[] = {
|
||||
u16 sThreeDayClockHours[] = {
|
||||
CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0),
|
||||
CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0),
|
||||
CLOCK_TIME(10, 0), CLOCK_TIME(11, 0), CLOCK_TIME(12, 0), CLOCK_TIME(13, 0), CLOCK_TIME(14, 0),
|
||||
CLOCK_TIME(15, 0), CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), CLOCK_TIME(19, 0),
|
||||
CLOCK_TIME(20, 0), CLOCK_TIME(21, 0), CLOCK_TIME(22, 0), CLOCK_TIME(23, 0), CLOCK_TIME(24, 0) - 1,
|
||||
};
|
||||
TexturePtr D_801BFB6C[] = {
|
||||
TexturePtr sThreeDayClockHourTextures[] = {
|
||||
gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex,
|
||||
gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex,
|
||||
gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex,
|
||||
|
|
@ -3124,7 +3678,7 @@ s16 D_801BFC04[] = { 255, 0 };
|
|||
s16 D_801BFC08[] = { 100, 0 };
|
||||
s16 D_801BFC0C[] = { 30, 0 };
|
||||
s16 D_801BFC10[] = { 100, 0 };
|
||||
TexturePtr D_801BFC14[] = {
|
||||
TexturePtr sFinalHoursDigitTextures[] = {
|
||||
gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex,
|
||||
gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex,
|
||||
gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex,
|
||||
|
|
@ -3132,8 +3686,9 @@ TexturePtr D_801BFC14[] = {
|
|||
s16 D_801BFC40[] = {
|
||||
127, 136, 144, 151, 160, 168, 175, 184,
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80119610.s")
|
||||
void Interface_DrawClock(PlayState* play);
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_DrawClock.s")
|
||||
#endif
|
||||
|
||||
void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType) {
|
||||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
|
|
|
|||
|
|
@ -378,30 +378,31 @@ void Scene_HeaderCmdSkyboxDisables(PlayState* play, SceneCmd* cmd) {
|
|||
|
||||
// SceneTableEntry Header Command 0x10: Time Settings
|
||||
void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) {
|
||||
if (cmd->timeSettings.hour != 0xFF && cmd->timeSettings.min != 0xFF) {
|
||||
if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) {
|
||||
gSaveContext.skyboxTime = gSaveContext.save.time =
|
||||
(u16)(((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / 0.021972656f);
|
||||
CLOCK_TIME_ALT2_F(cmd->timeSettings.hour, cmd->timeSettings.min);
|
||||
}
|
||||
|
||||
if (cmd->timeSettings.unk6 != 0xFF) {
|
||||
play->envCtx.timeIncrement = cmd->timeSettings.unk6;
|
||||
if (cmd->timeSettings.timeSpeed != 0xFF) {
|
||||
play->envCtx.sceneTimeSpeed = cmd->timeSettings.timeSpeed;
|
||||
} else {
|
||||
play->envCtx.timeIncrement = 0;
|
||||
play->envCtx.sceneTimeSpeed = 0;
|
||||
}
|
||||
|
||||
if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.timeIncrement != 0)) {
|
||||
play->envCtx.timeIncrement = 5;
|
||||
// Increase time speed during first cycle
|
||||
if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.sceneTimeSpeed != 0)) {
|
||||
play->envCtx.sceneTimeSpeed = 5;
|
||||
}
|
||||
|
||||
if (gSaveContext.sunsSongState == SUNSSONG_INACTIVE) {
|
||||
REG(15) = play->envCtx.timeIncrement;
|
||||
R_TIME_SPEED = play->envCtx.sceneTimeSpeed;
|
||||
}
|
||||
|
||||
play->envCtx.unk_4 = -(Math_SinS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f;
|
||||
play->envCtx.unk_8 = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f;
|
||||
play->envCtx.unk_C = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 20.0f) * 25.0f;
|
||||
play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
|
||||
|
||||
if ((play->envCtx.timeIncrement == 0) && (gSaveContext.save.cutscene < 0xFFF0)) {
|
||||
if ((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutscene < 0xFFF0)) {
|
||||
gSaveContext.skyboxTime = gSaveContext.save.time;
|
||||
|
||||
if ((gSaveContext.skyboxTime >= CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
|
|||
u8 slot;
|
||||
u8 item;
|
||||
|
||||
gSaveContext.save.daySpeed = 0;
|
||||
gSaveContext.save.timeSpeedOffset = 0;
|
||||
gSaveContext.save.daysElapsed = 0;
|
||||
gSaveContext.save.day = 0;
|
||||
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
|
||||
|
|
@ -593,7 +593,7 @@ void Sram_ResetSave(void) {
|
|||
gSaveContext.save.unk_06 = 0;
|
||||
gSaveContext.save.linkAge = 0;
|
||||
gSaveContext.save.isNight = false;
|
||||
gSaveContext.save.daySpeed = 0;
|
||||
gSaveContext.save.timeSpeedOffset = 0;
|
||||
gSaveContext.save.snowheadCleared = 0;
|
||||
gSaveContext.save.hasTatl = false;
|
||||
gSaveContext.save.isOwlSave = false;
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ void func_809542A0(BgIngate* this, PlayState* play) {
|
|||
gSaveContext.nextTransitionType = TRANS_TYPE_03;
|
||||
this->actionFunc = func_80953F8C;
|
||||
CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
|
||||
func_800FE498();
|
||||
Environment_StartTime();
|
||||
}
|
||||
|
||||
void func_80954340(BgIngate* this, PlayState* play) {
|
||||
|
|
@ -264,7 +264,7 @@ void func_80954340(BgIngate* this, PlayState* play) {
|
|||
func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6);
|
||||
this->timePath = &play->setupPathList[this->timePath->unk1];
|
||||
func_80953F14(this, play);
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -283,7 +283,7 @@ void func_809543D4(BgIngate* this, PlayState* play) {
|
|||
func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6);
|
||||
this->unk160 &= ~0x4;
|
||||
this->actionFunc = func_809541B8;
|
||||
func_800FE498();
|
||||
Environment_StartTime();
|
||||
func_8019F208();
|
||||
} else {
|
||||
if (this->timePath != NULL) {
|
||||
|
|
@ -304,7 +304,7 @@ void func_809543D4(BgIngate* this, PlayState* play) {
|
|||
func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6);
|
||||
this->unk160 &= ~0x4;
|
||||
this->actionFunc = func_809541B8;
|
||||
func_800FE498();
|
||||
Environment_StartTime();
|
||||
func_8019F230();
|
||||
}
|
||||
func_801477B4(play);
|
||||
|
|
|
|||
|
|
@ -1154,7 +1154,7 @@ void DmStk_WaitForTelescope(DmStk* this, PlayState* play) {
|
|||
if (play->view.fovy < 25.0f) {
|
||||
if ((screenPos.x >= 70.0f) && (screenPos.x < (SCREEN_WIDTH - 70.0f)) && (screenPos.y >= 30.0f) &&
|
||||
(screenPos.y < (SCREEN_HEIGHT - 30.0f))) {
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
this->actionFunc = DmStk_StartTelescopeCutscene;
|
||||
}
|
||||
}
|
||||
|
|
@ -1181,7 +1181,7 @@ void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) {
|
|||
|
||||
if (ActorCutscene_GetCanPlayNext(cutscene)) {
|
||||
ActorCutscene_Start(cutscene, &this->actor);
|
||||
func_800FE498();
|
||||
Environment_StartTime();
|
||||
this->actionFunc = DmStk_DoNothing;
|
||||
} else {
|
||||
ActorCutscene_SetIntentToPlay(cutscene);
|
||||
|
|
@ -1816,9 +1816,10 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
|
|||
(play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) &&
|
||||
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) &&
|
||||
(play->csCtx.state == 0)) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
|
||||
if (REG(15) != 0) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
|
||||
if (R_TIME_SPEED != 0) {
|
||||
gSaveContext.save.time =
|
||||
((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ void DoorWarp1_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
if ((play->sceneId == SCENE_MITURIN_BS) || (play->sceneId == SCENE_HAKUGIN_BS) ||
|
||||
(play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_SEA_BS)) {
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
play->interfaceCtx.restrictions.unk_312 = 1;
|
||||
play->interfaceCtx.restrictions.songOfSoaring = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -748,7 +748,7 @@ void func_80BDF578(EnAl* this, PlayState* play) {
|
|||
void func_80BDF5E8(EnAl* this, PlayState* play) {
|
||||
ScheduleOutput sp20;
|
||||
|
||||
this->unk_4E0 = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->unk_4E0 = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
if (!Schedule_RunScript(play, D_80BDFC70, &sp20) ||
|
||||
((this->unk_35C != sp20.result) && !func_80BDF390(this, play, &sp20))) {
|
||||
this->actor.shape.shadowDraw = NULL;
|
||||
|
|
|
|||
|
|
@ -102,8 +102,8 @@ void func_809C10B0(EnAob01* this, s32 arg1) {
|
|||
}
|
||||
|
||||
void func_809C1124(void) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
}
|
||||
|
||||
void func_809C1158(EnAob01* this, PlayState* play) {
|
||||
|
|
|
|||
|
|
@ -654,7 +654,7 @@ void EnBaba_GaveBlastMask(EnBaba* this, PlayState* play) {
|
|||
void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) {
|
||||
ScheduleOutput scheduleOutput;
|
||||
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
|
||||
if (!Schedule_RunScript(play, sSchedule, &scheduleOutput) ||
|
||||
((this->scheduleResult != scheduleOutput.result) &&
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ void func_809CCEE8(EnBji01* this, PlayState* play) {
|
|||
}
|
||||
|
||||
void func_809CD028(EnBji01* this, PlayState* play) {
|
||||
f32 timeBeforeMoonCrash;
|
||||
f32 timeUntilMoonCrash;
|
||||
|
||||
switch (this->actor.params) {
|
||||
case SHIKASHI_TYPE_DEFAULT:
|
||||
|
|
@ -177,11 +177,8 @@ void func_809CD028(EnBji01* this, PlayState* play) {
|
|||
this->textId = 0x5EA;
|
||||
break;
|
||||
case 3:
|
||||
// Calculates the time left before the moon crashes.
|
||||
// The day begins at CLOCK_TIME(6, 0) so it must be offset.
|
||||
timeBeforeMoonCrash = (4 - CURRENT_DAY) * DAY_LENGTH -
|
||||
(u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
|
||||
if (timeBeforeMoonCrash < CLOCK_TIME_F(1, 0)) {
|
||||
timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH;
|
||||
if (timeUntilMoonCrash < CLOCK_TIME_F(1, 0)) {
|
||||
this->textId = 0x5E8;
|
||||
} else {
|
||||
this->textId = 0x5EB;
|
||||
|
|
|
|||
|
|
@ -846,7 +846,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) {
|
|||
|
||||
D_8090CD04 = 20;
|
||||
play->specialEffects = sFishingEffects;
|
||||
REG(15) = 1; // gTimeIncrement in OoT
|
||||
R_TIME_SPEED = 1;
|
||||
D_809171FC = 0;
|
||||
D_809171F6 = 10;
|
||||
|
||||
|
|
|
|||
|
|
@ -488,7 +488,7 @@ void func_80B10344(EnGb2* this, PlayState* play) {
|
|||
if (this->unk_280 == 3) {
|
||||
this->unk_26C &= ~0x200;
|
||||
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
|
||||
func_800FE498();
|
||||
Environment_StartTime();
|
||||
SET_EVENTINF(EVENTINF_46);
|
||||
func_80B0FE7C(play);
|
||||
} else if (this->unk_280 == 2) {
|
||||
|
|
@ -892,7 +892,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
|
||||
if (gSaveContext.save.entrance == ENTRANCE(GHOST_HUT, 1)) {
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
this->actionFunc = func_80B10240;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1582,7 +1582,7 @@ void func_80950C24(EnGm* this, PlayState* play) {
|
|||
void func_80950CDC(EnGm* this, PlayState* play) {
|
||||
ScheduleOutput sp20;
|
||||
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
|
||||
if (!Schedule_RunScript(play, D_80951820, &sp20) ||
|
||||
((this->unk_258 != sp20.result) && !func_80950280(this, play, &sp20))) {
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) {
|
|||
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_FREE0);
|
||||
Play_SetCameraAtEye(play, CAM_ID_MAIN, &mainCamAt, &mainCamEye);
|
||||
Play_SetCameraFov(play, CAM_ID_MAIN, 45.0f);
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -876,7 +876,7 @@ void func_80BF2A50(EnIg* this, PlayState* play) {
|
|||
void func_80BF2AF8(EnIg* this, PlayState* play) {
|
||||
ScheduleOutput sp20;
|
||||
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
|
||||
if (!Schedule_RunScript(play, D_80BF3260, &sp20) ||
|
||||
((this->scheduleResult != sp20.result) && !func_80BF2368(this, play, &sp20))) {
|
||||
|
|
|
|||
|
|
@ -3016,7 +3016,7 @@ void func_80B49C38(EnInvadepoh* this, PlayState* play) {
|
|||
if (this->unk378 == 0) {
|
||||
temp_v0_2 = func_800FE620(play);
|
||||
if (temp_v0_2 > 0) {
|
||||
temp_v0_2 = (REG(15) * -16.0f / temp_v0_2) - 0.5f;
|
||||
temp_v0_2 = (R_TIME_SPEED * -16.0f / temp_v0_2) - 0.5f;
|
||||
this->unk378 = func_80B45550(this, play, SQ(80.0f), temp_v0_2);
|
||||
}
|
||||
}
|
||||
|
|
@ -3968,7 +3968,7 @@ void func_80B4C730(EnInvadepoh* this, PlayState* play) {
|
|||
if (this->unk378 == 0) {
|
||||
temp_v0_2 = func_800FE620(play);
|
||||
if (temp_v0_2 > 0) {
|
||||
temp_v0_2 = (REG(15) * -23.0f / temp_v0_2) - 0.5f;
|
||||
temp_v0_2 = (R_TIME_SPEED * -23.0f / temp_v0_2) - 0.5f;
|
||||
this->unk378 = func_80B45550(this, play, SQ(80.0f), temp_v0_2);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ void func_80BC2150(EnJa* this, PlayState* play) {
|
|||
void func_80BC21A8(EnJa* this, PlayState* play) {
|
||||
ScheduleOutput sp18;
|
||||
|
||||
this->unk_35C = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->unk_35C = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
if (!Schedule_RunScript(play, D_80BC35F0, &sp18) ||
|
||||
((this->unk_1D8.unk_00 != sp18.result) && !func_80BC20D0(this, play, &sp18))) {
|
||||
this->actor.shape.shadowDraw = NULL;
|
||||
|
|
|
|||
|
|
@ -638,7 +638,7 @@ void EnNb_HandleSchedule(EnNb* this, PlayState* play) {
|
|||
void EnNb_FollowSchedule(EnNb* this, PlayState* play) {
|
||||
ScheduleOutput scheduleOutput;
|
||||
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
|
||||
if (gSaveContext.eventInf[4] & 8) {
|
||||
scheduleOutput.result = EN_NB_SCH_1;
|
||||
|
|
|
|||
|
|
@ -1987,7 +1987,7 @@ void func_80AFA4D0(EnPm* this, PlayState* play) {
|
|||
u16 sp3C = 0;
|
||||
ScheduleOutput sp2C;
|
||||
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
if (this->unk_38C != 0) {
|
||||
time = gSaveContext.save.time - D_801F4E78;
|
||||
sp3C = gSaveContext.save.time;
|
||||
|
|
|
|||
|
|
@ -231,8 +231,8 @@ void EnSuttari_TriggerTransition(PlayState* play, u16 entrance) {
|
|||
}
|
||||
|
||||
void EnSuttari_UpdateTime(void) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
}
|
||||
|
||||
s32 func_80BAA904(EnSuttari* this, PlayState* play) {
|
||||
|
|
@ -1104,7 +1104,7 @@ void func_80BACE4C(EnSuttari* this, PlayState* play) {
|
|||
void func_80BACEE0(EnSuttari* this, PlayState* play) {
|
||||
ScheduleOutput scheduleOutput;
|
||||
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
|
||||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
|
|
@ -1128,7 +1128,7 @@ void func_80BACEE0(EnSuttari* this, PlayState* play) {
|
|||
void func_80BAD004(EnSuttari* this, PlayState* play) {
|
||||
ScheduleOutput scheduleOutput;
|
||||
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
|
||||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
|
|
@ -1255,7 +1255,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) {
|
|||
this->animIndex = 2;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
|
||||
}
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
|
||||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
|
|
@ -1293,7 +1293,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) {
|
|||
this->animIndex = 2;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
|
||||
}
|
||||
this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
|
||||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
|
|
|
|||
|
|
@ -473,7 +473,7 @@ void func_80BE1224(EnTab* this, PlayState* play) {
|
|||
void func_80BE127C(EnTab* this, PlayState* play) {
|
||||
ScheduleOutput sp18;
|
||||
|
||||
this->unk_31A = REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
this->unk_31A = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
|
||||
if (!Schedule_RunScript(play, D_80BE18D0, &sp18) ||
|
||||
((this->unk_1D8 != sp18.result) && !func_80BE1060(this, play, &sp18))) {
|
||||
|
|
|
|||
|
|
@ -507,7 +507,7 @@ void EnTest3_Destroy(Actor* thisx, PlayState* play2) {
|
|||
Collider_DestroyQuad(play, &this->player.meleeWeaponQuads[1]);
|
||||
Collider_DestroyQuad(play, &this->player.shieldQuad);
|
||||
ZeldaArena_Free(this->player.maskObjectSegment);
|
||||
func_800FE498();
|
||||
Environment_StartTime();
|
||||
}
|
||||
|
||||
s32 func_80A3F080(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
|
||||
|
|
@ -764,7 +764,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) {
|
|||
if (this->unk_D8D >= 0) {
|
||||
if (func_80A3E9DC(this, play)) {
|
||||
this->unk_D8D = -1;
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
}
|
||||
} else if ((play->actorCtx.flags & ACTORCTX_FLAG_6) || (play->actorCtx.flags & ACTORCTX_FLAG_5)) {
|
||||
this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->player.actor.cutscene);
|
||||
|
|
@ -779,9 +779,9 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) {
|
|||
}
|
||||
} else if ((D_80A41D20 == 2) && func_80A3E9DC(this, play)) {
|
||||
ActorCutscene_SetReturnCamera(CAM_ID_MAIN);
|
||||
func_800FE498();
|
||||
if (gSaveContext.save.time > CLOCK_TIME(6, 0)) {
|
||||
func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16)-gSaveContext.save.time)));
|
||||
Environment_StartTime();
|
||||
if (((void)0, gSaveContext.save.time) > CLOCK_TIME(6, 0)) {
|
||||
func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time))));
|
||||
}
|
||||
if (play->actorCtx.flags & ACTORCTX_FLAG_6) {
|
||||
SET_WEEKEVENTREG(WEEKEVENTREG_51_20);
|
||||
|
|
@ -967,7 +967,7 @@ void func_80A40678(EnTest3* this, PlayState* play) {
|
|||
|
||||
this->unk_D80 = ((this->unk_D88 == 20) || (this->unk_D88 == 10) || (this->unk_D88 == 9)) ? 3
|
||||
: Play_InCsMode(play) ? 0
|
||||
: REG(15) + ((void)0, gSaveContext.save.daySpeed);
|
||||
: R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
|
||||
if (Schedule_RunScript(play, sScheduleScript, &scheduleOutput)) {
|
||||
if (this->unk_D88 != scheduleOutput.result) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* File: z_en_test4.c
|
||||
* Overlay: ovl_En_Test4
|
||||
* Description: Three-Day Timer
|
||||
* Description: Three-Day Events
|
||||
*/
|
||||
|
||||
#include "prevent_bss_reordering.h"
|
||||
|
|
@ -59,7 +59,7 @@ void func_80A41D70(EnTest4* this, PlayState* play) {
|
|||
this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE;
|
||||
}
|
||||
|
||||
func_8010EE74(play, CURRENT_DAY);
|
||||
Interface_NewDay(play, CURRENT_DAY);
|
||||
D_801BDBC8 = 0xFE;
|
||||
func_800FB758(play);
|
||||
func_800FEAF4(&play->envCtx);
|
||||
|
|
@ -95,7 +95,7 @@ void func_80A41FA4(EnTest4* this, PlayState* play) {
|
|||
} else if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
|
||||
Sram_IncrementDay();
|
||||
gSaveContext.save.time = CLOCK_TIME(6, 0);
|
||||
func_8010EE74(play, CURRENT_DAY);
|
||||
Interface_NewDay(play, CURRENT_DAY);
|
||||
func_80151A68(play, sDayMessages2[CURRENT_DAY - 1]);
|
||||
D_801BDBC8 = 0xFE;
|
||||
func_800FB758(play);
|
||||
|
|
|
|||
|
|
@ -323,8 +323,8 @@ void func_80AECB6C(EnTk* this, PlayState* play) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (REG(15) != 0.0f) {
|
||||
this->skelAnime.playSpeed = (f32)func_800FE620(play) / REG(15);
|
||||
if (R_TIME_SPEED != 0.0f) {
|
||||
this->skelAnime.playSpeed = (f32)func_800FE620(play) / R_TIME_SPEED;
|
||||
} else {
|
||||
this->skelAnime.playSpeed = 0.0f;
|
||||
}
|
||||
|
|
@ -337,14 +337,14 @@ void func_80AECB6C(EnTk* this, PlayState* play) {
|
|||
func_80AEC658(&this->skelAnime, this->unk_320, 1.0f, &sp48, &sp44);
|
||||
}
|
||||
|
||||
temp2 = REG(15) * sp44;
|
||||
temp2 = R_TIME_SPEED * sp44;
|
||||
temp_f0 = temp2;
|
||||
|
||||
this->unk_2DC += (REG(15) * sp44) - temp2;
|
||||
this->unk_2DC += (R_TIME_SPEED * sp44) - temp2;
|
||||
temp3 = this->unk_2DC;
|
||||
this->timePathTimeSpeed = temp2 + temp3;
|
||||
this->unk_2DC -= temp3;
|
||||
this->unk_2E0 += REG(15);
|
||||
this->unk_2E0 += R_TIME_SPEED;
|
||||
|
||||
if (Schedule_RunScript(play, D_80AEF800, &sp34)) {
|
||||
if ((this->unk_3CC != sp34.result) && !func_80AED354(this, play, &sp34)) {
|
||||
|
|
|
|||
|
|
@ -486,9 +486,10 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) {
|
|||
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) &&
|
||||
(play->csCtx.state == 0)) {
|
||||
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
|
||||
if (REG(15) != 0) {
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
|
||||
gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
|
||||
if (R_TIME_SPEED != 0) {
|
||||
gSaveContext.save.time =
|
||||
((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -698,7 +698,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
|
|||
sp54 = false;
|
||||
this->flags |= OBJ_UM_FLAG_0100;
|
||||
ObjUm_SetupAction(this, func_80B7A144);
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
} else {
|
||||
// Waiting for player
|
||||
|
||||
|
|
@ -722,7 +722,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
|
|||
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) {
|
||||
this->pathIndex = this->initialPathIndex;
|
||||
sp54 = false;
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
ObjUm_SetupAction(this, ObjUm_PreMilkRunStartCs);
|
||||
this->unk_354 = 0;
|
||||
ObjUm_RotatePlayer(this, play, 0);
|
||||
|
|
@ -735,7 +735,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
this->pathIndex = this->initialPathIndex;
|
||||
sp54 = false;
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
ObjUm_SetupAction(this, ObjUm_StartCs);
|
||||
this->unk_354 = 0;
|
||||
ObjUm_RotatePlayer(this, play, 0);
|
||||
|
|
@ -747,7 +747,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
this->pathIndex = this->initialPathIndex;
|
||||
sp54 = false;
|
||||
func_800FE484();
|
||||
Environment_StopTime();
|
||||
ObjUm_SetupAction(this, ObjUm_PostMilkRunStartCs);
|
||||
this->unk_354 = 0;
|
||||
ObjUm_RotatePlayer(this, play, 0);
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) {
|
|||
this->unk16C -= 0.05f;
|
||||
} else {
|
||||
Actor_Kill(&this->actor);
|
||||
if ((REG(15) != 0x190) && (play->msgCtx.unk12046 == 0)) {
|
||||
if ((R_TIME_SPEED != 400) && (play->msgCtx.unk12046 == 0)) {
|
||||
if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) {
|
||||
gSaveContext.sunsSongState = SUNSSONG_START;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,10 +170,10 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
|
|||
|
||||
if (!(this->actor.xzDistToPlayer > 120.0f)) {
|
||||
if ((gSaveContext.save.time >= CLOCK_TIME(6, 30)) && (gSaveContext.save.time < CLOCK_TIME(7, 30))) {
|
||||
cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.unk_4 * (1.0f / 6.0f));
|
||||
cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f));
|
||||
cylinderPos.y =
|
||||
(player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.unk_8 * (1.0f / 6.0f));
|
||||
cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.unk_C * (1.0f / 6.0f));
|
||||
(player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f));
|
||||
cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f));
|
||||
|
||||
this->hitboxPos = cylinderPos;
|
||||
|
||||
|
|
|
|||
|
|
@ -1768,9 +1768,9 @@
|
|||
0x800FDC94:("func_800FDC94",),
|
||||
0x800FE390:("func_800FE390",),
|
||||
0x800FE3E0:("func_800FE3E0",),
|
||||
0x800FE484:("func_800FE484",),
|
||||
0x800FE498:("func_800FE498",),
|
||||
0x800FE4A8:("func_800FE4A8",),
|
||||
0x800FE484:("Environment_StopTime",),
|
||||
0x800FE498:("Environment_StartTime",),
|
||||
0x800FE4A8:("Environment_IsTimeStopped",),
|
||||
0x800FE4B8:("func_800FE4B8",),
|
||||
0x800FE590:("func_800FE590",),
|
||||
0x800FE5D0:("func_800FE5D0",),
|
||||
|
|
@ -2099,7 +2099,7 @@
|
|||
0x8010EB50:("Interface_StartGoronRaceTimer",),
|
||||
0x8010EBA0:("Interface_StartBottleTimer",),
|
||||
0x8010EC54:("Interface_GetCompressedTimerDigits",),
|
||||
0x8010EE74:("func_8010EE74",),
|
||||
0x8010EE74:("Interface_NewDay",),
|
||||
0x8010EF68:("Interface_SetHudVisibility",),
|
||||
0x8010EF9C:("Interface_UpdateButtonAlphasByStatus",),
|
||||
0x8010F0D4:("Interface_UpdateButtonAlphas",),
|
||||
|
|
@ -2150,7 +2150,7 @@
|
|||
0x80118890:("func_80118890",),
|
||||
0x80118BA4:("func_80118BA4",),
|
||||
0x80119030:("func_80119030",),
|
||||
0x80119610:("func_80119610",),
|
||||
0x80119610:("Interface_DrawClock",),
|
||||
0x8011B4E0:("Interface_SetPerfectLetters",),
|
||||
0x8011B5C0:("Interface_UpdatePerfectLettersType1",),
|
||||
0x8011B9E0:("Interface_UpdatePerfectLettersType2",),
|
||||
|
|
|
|||
|
|
@ -1139,11 +1139,11 @@
|
|||
0x801BFB14:("D_801BFB14","UNK_TYPE1","",0x1),
|
||||
0x801BFB1C:("D_801BFB1C","UNK_TYPE1","",0x1),
|
||||
0x801BFB24:("D_801BFB24","UNK_TYPE1","",0x1),
|
||||
0x801BFB2C:("D_801BFB2C","UNK_TYPE2","",0x2),
|
||||
0x801BFB2C:("sThreeDayClockAlpha","UNK_TYPE2","",0x2),
|
||||
0x801BFB30:("D_801BFB30","UNK_TYPE2","",0x2),
|
||||
0x801BFB34:("D_801BFB34","UNK_TYPE2","",0x2),
|
||||
0x801BFB38:("D_801BFB38","UNK_TYPE1","",0x1),
|
||||
0x801BFB6C:("D_801BFB6C","UNK_TYPE1","",0x1),
|
||||
0x801BFB38:("sThreeDayClockHours","UNK_TYPE1","",0x1),
|
||||
0x801BFB6C:("sThreeDayClockHourTextures","UNK_TYPE1","",0x1),
|
||||
0x801BFBCC:("D_801BFBCC","UNK_TYPE2","",0x2),
|
||||
0x801BFBD0:("D_801BFBD0","UNK_TYPE2","",0x2),
|
||||
0x801BFBD4:("D_801BFBD4","UNK_TYPE2","",0x2),
|
||||
|
|
@ -1162,7 +1162,7 @@
|
|||
0x801BFC08:("D_801BFC08","UNK_TYPE1","",0x1),
|
||||
0x801BFC0C:("D_801BFC0C","UNK_TYPE1","",0x1),
|
||||
0x801BFC10:("D_801BFC10","UNK_TYPE1","",0x1),
|
||||
0x801BFC14:("D_801BFC14","UNK_TYPE1","",0x1),
|
||||
0x801BFC14:("sFinalHoursDigitTextures","UNK_TYPE1","",0x1),
|
||||
0x801BFC40:("D_801BFC40","UNK_TYPE1","",0x1),
|
||||
0x801BFC50:("sPerfectLettersType1OffScreenAngles","UNK_TYPE2","",0x2),
|
||||
0x801BFC60:("sPerfectLettersType1PrimColorTargets","s16","[6]",0xC),
|
||||
|
|
|
|||
|
|
@ -530,6 +530,9 @@ wordReplace = {
|
|||
"func_800A81F0": "EffectBlure_AddVertex",
|
||||
"func_800A8514": "EffectBlure_AddSpace",
|
||||
"Effect_GetParams": "Effect_GetByIndex",
|
||||
"func_800FE484": "Environment_StopTime",
|
||||
"func_800FE498": "Environment_StartTime",
|
||||
"func_800FE4A8": "Environment_IsTimeStopped",
|
||||
"func_800F5A8C": "Environment_LerpWeight",
|
||||
"func_801A3F54": "Audio_SetCutsceneFlag",
|
||||
"func_800EA0D4": "Cutscene_Start",
|
||||
|
|
@ -691,7 +694,8 @@ wordReplace = {
|
|||
"gSaveContext.equippedMask": "gSaveContext.save.equippedMask",
|
||||
"gSaveContext.entranceIndex": "gSaveContext.save.entrance",
|
||||
"gSaveContext.time": "gSaveContext.save.time",
|
||||
"gSaveContext.unk_14": "gSaveContext.save.daySpeed",
|
||||
"gSaveContext.save.daySpeed": "gSaveContext.save.timeSpeedOffset",
|
||||
"gSaveContext.unk_14": "gSaveContext.save.timeSpeedOffset",
|
||||
"gSaveContext.unk_FE6": "gSaveContext.save.bombersCaughtNum",
|
||||
"gSaveContext.unk_FE7": "gSaveContext.save.bombersCaughtOrder",
|
||||
"gSaveContext.linkAge": "gSaveContext.save.linkAge",
|
||||
|
|
|
|||
|
|
@ -1282,9 +1282,9 @@ asm/non_matchings/code/z_kankyo/func_800FDAF8.s,func_800FDAF8,0x800FDAF8,0x67
|
|||
asm/non_matchings/code/z_kankyo/func_800FDC94.s,func_800FDC94,0x800FDC94,0x1BF
|
||||
asm/non_matchings/code/z_kankyo/func_800FE390.s,func_800FE390,0x800FE390,0x14
|
||||
asm/non_matchings/code/z_kankyo/func_800FE3E0.s,func_800FE3E0,0x800FE3E0,0x29
|
||||
asm/non_matchings/code/z_kankyo/func_800FE484.s,func_800FE484,0x800FE484,0x5
|
||||
asm/non_matchings/code/z_kankyo/func_800FE498.s,func_800FE498,0x800FE498,0x4
|
||||
asm/non_matchings/code/z_kankyo/func_800FE4A8.s,func_800FE4A8,0x800FE4A8,0x4
|
||||
asm/non_matchings/code/z_kankyo/Environment_StopTime.s,Environment_StopTime,0x800FE484,0x5
|
||||
asm/non_matchings/code/z_kankyo/Environment_StartTime.s,Environment_StartTime,0x800FE498,0x4
|
||||
asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s,Environment_IsTimeStopped,0x800FE4A8,0x4
|
||||
asm/non_matchings/code/z_kankyo/func_800FE4B8.s,func_800FE4B8,0x800FE4B8,0x36
|
||||
asm/non_matchings/code/z_kankyo/func_800FE590.s,func_800FE590,0x800FE590,0x10
|
||||
asm/non_matchings/code/z_kankyo/func_800FE5D0.s,func_800FE5D0,0x800FE5D0,0x10
|
||||
|
|
@ -1613,7 +1613,7 @@ asm/non_matchings/code/z_parameter/Interface_StartPostmanTimer.s,Interface_Start
|
|||
asm/non_matchings/code/z_parameter/Interface_StartGoronRaceTimer.s,Interface_StartGoronRaceTimer,0x8010EB50,0x14
|
||||
asm/non_matchings/code/z_parameter/Interface_StartBottleTimer.s,Interface_StartBottleTimer,0x8010EBA0,0x2D
|
||||
asm/non_matchings/code/z_parameter/Interface_GetCompressedTimerDigits.s,Interface_GetCompressedTimerDigits,0x8010EC54,0x88
|
||||
asm/non_matchings/code/z_parameter/func_8010EE74.s,func_8010EE74,0x8010EE74,0x3D
|
||||
asm/non_matchings/code/z_parameter/Interface_NewDay.s,Interface_NewDay,0x8010EE74,0x3D
|
||||
asm/non_matchings/code/z_parameter/Interface_SetHudVisibility.s,Interface_SetHudVisibility,0x8010EF68,0xD
|
||||
asm/non_matchings/code/z_parameter/Interface_UpdateButtonAlphasByStatus.s,Interface_UpdateButtonAlphasByStatus,0x8010EF9C,0x4E
|
||||
asm/non_matchings/code/z_parameter/Interface_UpdateButtonAlphas.s,Interface_UpdateButtonAlphas,0x8010F0D4,0x35
|
||||
|
|
@ -1664,7 +1664,7 @@ asm/non_matchings/code/z_parameter/func_80118084.s,func_80118084,0x80118084,0x20
|
|||
asm/non_matchings/code/z_parameter/func_80118890.s,func_80118890,0x80118890,0xC5
|
||||
asm/non_matchings/code/z_parameter/func_80118BA4.s,func_80118BA4,0x80118BA4,0x123
|
||||
asm/non_matchings/code/z_parameter/func_80119030.s,func_80119030,0x80119030,0x178
|
||||
asm/non_matchings/code/z_parameter/func_80119610.s,func_80119610,0x80119610,0x7B4
|
||||
asm/non_matchings/code/z_parameter/Interface_DrawClock.s,Interface_DrawClock,0x80119610,0x7B4
|
||||
asm/non_matchings/code/z_parameter/Interface_SetPerfectLetters.s,Interface_SetPerfectLetters,0x8011B4E0,0x38
|
||||
asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType1.s,Interface_UpdatePerfectLettersType1,0x8011B5C0,0x108
|
||||
asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType2.s,Interface_UpdatePerfectLettersType2,0x8011B9E0,0x164
|
||||
|
|
|
|||
|
Loading…
Reference in New Issue