From a968854eaa6e842a6d4405fd1d34c5257ca57a25 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:54:33 +0100 Subject: [PATCH 01/10] Fix Game|Time Over text scroll positions --- src/game/game_over.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/game/game_over.c b/src/game/game_over.c index 90357b5f2..f3db9e92a 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -18,6 +18,9 @@ #include "constants/animations.h" #include "constants/songs.h" +#define G_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) +#define T_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) + typedef struct { ScreenFade unk0; LostLifeCause lostLifeCause; @@ -195,13 +198,13 @@ void Task_GameOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone >= 61) { + if (screen->framesUntilDone > 60) { s16 temp = screen->framesUntilDone + 60; s->x = temp; sprite2->x = temp; } else { - s->x = (DISPLAY_WIDTH / 2); - sprite2->x = (DISPLAY_WIDTH / 2); + s->x = G_OVR_TXT_REST_X; + sprite2->x = G_OVR_TXT_REST_X; } UpdateScreenFade(&screen->unk0); @@ -235,7 +238,7 @@ void sub_80369D8(void) screen->unk0.bldCnt = (BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_ALL | BLDCNT_TGT2_ALL); screen->unk0.bldAlpha = 0; memset(gBgPalette, RGB16(31, 7, 0), sizeof(gBgPalette)); - gFlags |= 0x1; + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; gCurTask->main = sub_8036B30; } @@ -338,14 +341,17 @@ void UpdateTimeOverScreenSprites(GameOverScreen *screen) Sprite *s = &screen->sprGameOrTime; Sprite *sprite2 = &screen->sprOver; if (screen->framesUntilDone > 140) { + // Move into screen middle s16 temp = (screen->framesUntilDone * 2) - 160; s->x = temp; sprite2->x = temp; } else if (screen->framesUntilDone > 40) { - s->x = (DISPLAY_WIDTH / 2); - sprite2->x = (DISPLAY_WIDTH / 2); + // Stay at screen middle + s->x = T_OVR_TXT_REST_X; + sprite2->x = T_OVR_TXT_REST_X; } else if (screen->framesUntilDone > 0) { - s16 temp = (DISPLAY_WIDTH / 2) - ((40 - screen->framesUntilDone) * 2); + // Move left during screen fade-out + s16 temp = T_OVR_TXT_REST_X - ((40 - screen->framesUntilDone) * 2); s->x = temp; sprite2->x = temp; } else { From 9c43664d5a27eacd5872e5fee3bcb175466ca0b7 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Mon, 23 Mar 2026 12:03:20 +0100 Subject: [PATCH 02/10] Remove some magic nums --- src/game/game_over.c | 110 ++++++++++++++++++++++++++++++------------- 1 file changed, 77 insertions(+), 33 deletions(-) diff --git a/src/game/game_over.c b/src/game/game_over.c index f3db9e92a..535708cfe 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -14,13 +14,33 @@ #include "game/stage/screen_fade.h" #include "game/stage/stage.h" +#include "game/stage/debug_text_printer.h" #include "constants/animations.h" #include "constants/songs.h" +#include "constants/zones.h" #define G_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) #define T_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) +#define G_OVR_TXT_START_X (G_OVR_TXT_REST_X + 20) +#define T_OVR_TXT_START_X (T_OVR_TXT_REST_X + 60) +#define G_OVR_TXT_END_X (G_OVR_TXT_REST_X - 120) +#define T_OVR_TXT_END_X (T_OVR_TXT_REST_X - 120) + +#define T_OVR_TXT_MOVE_DELTA (T_OVR_TXT_REST_X + 40) + +// TODO: Maybe these should represent X values, not time? +#define T_OVR_POINT_PAUSE (T_OVR_TXT_REST_X + 20) +#define T_OVR_PAUSE_DURATION (T_OVR_TXT_REST_X - 20) +#define T_OVR_POINT_RESUME (T_OVR_POINT_PAUSE - T_OVR_PAUSE_DURATION) + +#define G_OVR_TXT_FADE_1_X (G_OVR_TXT_REST_X - 60) +#define G_OVR_TXT_FADE_2_X (G_OVR_TXT_FADE_1_X - 10) + +#define T_OVR_TXT_FADE_1_X (G_OVR_TXT_REST_X + 30) +#define T_OVR_TXT_FADE_2_X (G_OVR_TXT_REST_X - 90) + typedef struct { ScreenFade unk0; LostLifeCause lostLifeCause; @@ -36,21 +56,31 @@ typedef struct { void Task_FadeoutToOverScreen(void); void DisplayOverScreenTextSprites(GameOverScreen *screen); -void sub_80369D8(void); +void Task_GameOverScreen2(void); static void InitOverScreen(LostLifeCause lostLifeCause); void Task_GameOverScreenMain(void); void TaskDestructor_GameOverTimeOverScreen(struct Task *); void Task_TimeOverScreenMain(void); -void sub_8036B70(void); +void Task_GameOverScreen4(void); void UpdateTimeOverScreenSprites(GameOverScreen *screen); -void sub_8036B30(void); +void Task_GameOverScreen3(void); + +#if DEBUG +void TEMP_PrintX(GameOverScreen *screen) +{ + printf("%d\n", screen->framesUntilDone); + Debug_PrintIntegerAt(screen->framesUntilDone, 32, 24); +} +#else +#define TEMP_PrintX(x) +#endif void CreateGameOverScreen(LostLifeCause lostLifeCause) { struct Task *t = TaskCreate(Task_FadeoutToOverScreen, sizeof(GameOverScreenFade), 0x2220, 0, NULL); - GameOverScreenFade *screen = TASK_DATA(t); + GameOverScreenFade *screenFade = TASK_DATA(t); - ScreenFade *fade = &screen->unk0; + ScreenFade *fade = &screenFade->unk0; fade->window = SCREEN_FADE_USE_WINDOW_1; fade->brightness = Q(0); fade->flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -58,8 +88,8 @@ void CreateGameOverScreen(LostLifeCause lostLifeCause) fade->bldCnt = (BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_ALL | BLDCNT_TGT2_ALL); fade->bldAlpha = 0; - screen->lostLifeCause = lostLifeCause; - screen->delay = 10; + screenFade->lostLifeCause = lostLifeCause; + screenFade->delay = 10; m4aMPlayFadeOut(&gMPlayInfo_BGM, 8); m4aMPlayFadeOut(&gMPlayInfo_SE1, 8); @@ -99,6 +129,10 @@ static void InitOverScreen(LostLifeCause lostLifeCause) GameOverScreen *screen; Sprite *s; ScreenFade *fade; +#if DEBUG + Debug_CreateAsciiTask(0, 0); + lostLifeCause = OVER_CAUSE_ZERO_LIVES; +#endif gWinRegs[WINREG_WININ] = WIN_RANGE(0, 0); gWinRegs[WINREG_WINOUT] = WIN_RANGE(0, 0); @@ -123,11 +157,13 @@ static void InitOverScreen(LostLifeCause lostLifeCause) screen = TASK_DATA(t); if (lostLifeCause & OVER_CAUSE_ZERO_LIVES) { - screen->framesUntilDone = 140; + screen->framesUntilDone = G_OVR_TXT_START_X; } else { - screen->framesUntilDone = 180; + screen->framesUntilDone = T_OVR_TXT_START_X; } + TEMP_PrintX(screen); + s = &screen->sprGameOrTime; s->graphics.dest = VramMalloc(0x40); if (lostLifeCause & OVER_CAUSE_ZERO_LIVES) { @@ -180,7 +216,7 @@ void Task_GameOverScreenMain(void) gBldRegs.bldCnt = 0x3FEF; - if (screen->framesUntilDone == 60) { + if (screen->framesUntilDone == G_OVR_TXT_FADE_1_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -189,7 +225,7 @@ void Task_GameOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone == 50) { + if (screen->framesUntilDone == G_OVR_TXT_FADE_2_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = (SCREEN_FADE_FLAG_2 | SCREEN_FADE_FLAG_DARKEN); @@ -198,8 +234,8 @@ void Task_GameOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone > 60) { - s16 temp = screen->framesUntilDone + 60; + if (screen->framesUntilDone > G_OVR_TXT_FADE_1_X) { + s16 temp = screen->framesUntilDone + G_OVR_TXT_FADE_1_X; s->x = temp; sprite2->x = temp; } else { @@ -209,7 +245,7 @@ void Task_GameOverScreenMain(void) UpdateScreenFade(&screen->unk0); - if (--screen->framesUntilDone == 0) { + if (--screen->framesUntilDone == G_OVR_TXT_END_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -218,19 +254,21 @@ void Task_GameOverScreenMain(void) | BLDCNT_TGT1_BG3 | BLDCNT_TGT2_ALL); screen->unk0.bldAlpha = 0; - screen->framesUntilDone = 120; - gCurTask->main = sub_80369D8; + screen->framesUntilDone = G_OVR_TXT_REST_X; + gCurTask->main = Task_GameOverScreen2; } + TEMP_PrintX(screen); DisplayOverScreenTextSprites(screen); } -void sub_80369D8(void) +void Task_GameOverScreen2(void) { GameOverScreen *screen = TASK_DATA(gCurTask); UpdateScreenFade(&screen->unk0); + TEMP_PrintX(screen); - if (--screen->framesUntilDone == 0) { + if (--screen->framesUntilDone == G_OVR_TXT_END_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = (SCREEN_FADE_FLAG_LIGHTEN); @@ -239,8 +277,9 @@ void sub_80369D8(void) screen->unk0.bldAlpha = 0; memset(gBgPalette, RGB16(31, 7, 0), sizeof(gBgPalette)); gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; - gCurTask->main = sub_8036B30; + gCurTask->main = Task_GameOverScreen3; } + TEMP_PrintX(screen); DisplayOverScreenTextSprites(screen); } @@ -250,10 +289,11 @@ void Task_TimeOverScreenMain(void) GameOverScreen *screen = TASK_DATA(gCurTask); Sprite *s = &screen->sprGameOrTime; Sprite *sprite2 = &screen->sprOver; + TEMP_PrintX(screen); gBldRegs.bldCnt = 0x3FEF; - if (screen->framesUntilDone == 150) { + if (screen->framesUntilDone == T_OVR_TXT_FADE_1_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -262,7 +302,7 @@ void Task_TimeOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone == 140) { + if (screen->framesUntilDone == T_OVR_POINT_PAUSE) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = (SCREEN_FADE_FLAG_2 | SCREEN_FADE_FLAG_DARKEN); @@ -271,7 +311,7 @@ void Task_TimeOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone == 30) { + if (screen->framesUntilDone == T_OVR_TXT_FADE_2_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -282,7 +322,7 @@ void Task_TimeOverScreenMain(void) UpdateScreenFade(&screen->unk0); - if (--screen->framesUntilDone == 0) { + if (--screen->framesUntilDone == T_OVR_TXT_END_X) { TasksDestroyAll(); PAUSE_BACKGROUNDS_QUEUE(); gBgSpritesCount = 0; @@ -300,24 +340,26 @@ void Task_TimeOverScreenMain(void) UpdateTimeOverScreenSprites(screen); } -void sub_8036B30(void) +void Task_GameOverScreen3(void) { GameOverScreen *screen = TASK_DATA(gCurTask); + TEMP_PrintX(screen); - if (UpdateScreenFade(&screen->unk0) != 0) { + if (UpdateScreenFade(&screen->unk0) != SCREEN_FADE_RUNNING) { screen->framesUntilDone = 140; UpdateScreenFade(&screen->unk0); - gCurTask->main = sub_8036B70; + gCurTask->main = Task_GameOverScreen4; } DisplayOverScreenTextSprites(screen); } -void sub_8036B70(void) +void Task_GameOverScreen4(void) { GameOverScreen *screen = TASK_DATA(gCurTask); + TEMP_PrintX(screen); - if (--screen->framesUntilDone == 0) { + if (--screen->framesUntilDone == G_OVR_TXT_END_X) { TasksDestroyAll(); PAUSE_BACKGROUNDS_QUEUE(); gBgSpritesCount = 0; @@ -340,18 +382,20 @@ void UpdateTimeOverScreenSprites(GameOverScreen *screen) { Sprite *s = &screen->sprGameOrTime; Sprite *sprite2 = &screen->sprOver; - if (screen->framesUntilDone > 140) { + TEMP_PrintX(screen); + + if (screen->framesUntilDone > T_OVR_POINT_PAUSE) { // Move into screen middle - s16 temp = (screen->framesUntilDone * 2) - 160; + s16 temp = (screen->framesUntilDone * 2) - T_OVR_TXT_MOVE_DELTA; s->x = temp; sprite2->x = temp; - } else if (screen->framesUntilDone > 40) { + } else if (screen->framesUntilDone > T_OVR_POINT_RESUME) { // Stay at screen middle s->x = T_OVR_TXT_REST_X; sprite2->x = T_OVR_TXT_REST_X; - } else if (screen->framesUntilDone > 0) { + } else if (screen->framesUntilDone > T_OVR_TXT_END_X) { // Move left during screen fade-out - s16 temp = T_OVR_TXT_REST_X - ((40 - screen->framesUntilDone) * 2); + s16 temp = T_OVR_TXT_REST_X - ((T_OVR_POINT_RESUME - screen->framesUntilDone) * 2); s->x = temp; sprite2->x = temp; } else { From b84d74adeed52f0e97fa99bdcbc7d3d198ad2339 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:41:02 +0100 Subject: [PATCH 03/10] Use ALLOC_TILES() and document Time Over x-values --- include/constants/anim_sizes.h | 12 +++++++++-- include/constants/animations.h | 1 + src/game/game_over.c | 39 ++++++++++++++++++++-------------- src/game/stage/player.c | 4 ++++ 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/include/constants/anim_sizes.h b/include/constants/anim_sizes.h index d3b3e8e1b..873e6a6ee 100644 --- a/include/constants/anim_sizes.h +++ b/include/constants/anim_sizes.h @@ -3,10 +3,18 @@ // TODO: Auto-generate this file #define MAX_TILES(_animName) ((_animName##_WIDTH / 8) * (_animName##_HEIGHT / 8)) -#define MAX_TILES_VARIANT(_animName, _variant) ((_animName##_VAR##_variant##_WIDTH / 8) * (_animName##_VAR##_variant##_HEIGHT / 8)) +#define MAX_TILES_VARIANT(_animName, _variant) ((_animName##_VAR##_variant##_WIDTH / 8) * (_animName##_VAR##_##_variant##_HEIGHT / 8)) #define ALLOC_TILES(_animName) VramMalloc(((_animName##_WIDTH / 8) * (_animName##_HEIGHT / 8))) #define ALLOC_TILES_VARIANT(_animName, _variant) \ - VramMalloc(((_animName##_VAR##_variant##_WIDTH / 8) * (_animName##_VAR##_variant##_HEIGHT / 8))) + VramMalloc(((_animName##_VAR##_##_variant##_WIDTH / 8) * (_animName##_VAR##_##_variant##_HEIGHT / 8))) + +// 849 +#define SA2_ANIM_GAME_OVER_WIDTH 64 +#define SA2_ANIM_GAME_OVER_HEIGHT 64 +#define SA2_ANIM_GAME_OVER_VAR_GAME_WIDTH 64 +#define SA2_ANIM_GAME_OVER_VAR_GAME_HEIGHT 64 +#define SA2_ANIM_GAME_OVER_VAR_OVER_WIDTH 64 +#define SA2_ANIM_GAME_OVER_VAR_OVER_HEIGHT 64 // 849 #define SA2_ANIM_GRIND_EFFECT_WIDTH 32 diff --git a/include/constants/animations.h b/include/constants/animations.h index b63d9496d..5085c1965 100644 --- a/include/constants/animations.h +++ b/include/constants/animations.h @@ -6,6 +6,7 @@ /* Collection of animation indices for Sonic Advance 2. * - By JaceCear */ +#include "constants/anim_sizes.h" // "x_PROJ" means "projectile belonging to x" diff --git a/src/game/game_over.c b/src/game/game_over.c index 535708cfe..7083fc6e7 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -22,24 +22,28 @@ #define G_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) #define T_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) +#define G_OVR_TXT_Y (DISPLAY_HEIGHT / 2) +#define T_OVR_TXT_Y (DISPLAY_HEIGHT / 2) #define G_OVR_TXT_START_X (G_OVR_TXT_REST_X + 20) #define T_OVR_TXT_START_X (T_OVR_TXT_REST_X + 60) -#define G_OVR_TXT_END_X (G_OVR_TXT_REST_X - 120) -#define T_OVR_TXT_END_X (T_OVR_TXT_REST_X - 120) #define T_OVR_TXT_MOVE_DELTA (T_OVR_TXT_REST_X + 40) // TODO: Maybe these should represent X values, not time? -#define T_OVR_POINT_PAUSE (T_OVR_TXT_REST_X + 20) -#define T_OVR_PAUSE_DURATION (T_OVR_TXT_REST_X - 20) -#define T_OVR_POINT_RESUME (T_OVR_POINT_PAUSE - T_OVR_PAUSE_DURATION) +#define T_OVR_POINT_PAUSE (T_OVR_TXT_REST_X + 20) +#define T_OVR_PAUSE_DURATION (ZONE_TIME_TO_INT(0, 1) + ZONE_TIME_TO_INT(0, 2. / 3.)) +#define T_OVR_FADEOUT_DURATION ZONE_TIME_TO_INT(0, 2) +#define T_OVR_POINT_RESUME (T_OVR_POINT_PAUSE - T_OVR_PAUSE_DURATION) -#define G_OVR_TXT_FADE_1_X (G_OVR_TXT_REST_X - 60) +#define G_OVR_TXT_FADE_1_X (G_OVR_TXT_REST_X - ZONE_TIME_TO_INT(0, 1)) #define G_OVR_TXT_FADE_2_X (G_OVR_TXT_FADE_1_X - 10) #define T_OVR_TXT_FADE_1_X (G_OVR_TXT_REST_X + 30) -#define T_OVR_TXT_FADE_2_X (G_OVR_TXT_REST_X - 90) +#define T_OVR_TXT_FADE_2_X (T_OVR_POINT_RESUME - 10) + +#define G_OVR_TXT_END_X (G_OVR_TXT_REST_X - T_OVR_FADEOUT_DURATION) +#define T_OVR_TXT_END_X (T_OVR_POINT_RESUME - 40) typedef struct { ScreenFade unk0; @@ -131,7 +135,7 @@ static void InitOverScreen(LostLifeCause lostLifeCause) ScreenFade *fade; #if DEBUG Debug_CreateAsciiTask(0, 0); - lostLifeCause = OVER_CAUSE_ZERO_LIVES; + // lostLifeCause = OVER_CAUSE_ZERO_LIVES; #endif gWinRegs[WINREG_WININ] = WIN_RANGE(0, 0); @@ -165,7 +169,7 @@ static void InitOverScreen(LostLifeCause lostLifeCause) TEMP_PrintX(screen); s = &screen->sprGameOrTime; - s->graphics.dest = VramMalloc(0x40); + s->graphics.dest = ALLOC_TILES_VARIANT(SA2_ANIM_GAME_OVER, GAME); if (lostLifeCause & OVER_CAUSE_ZERO_LIVES) { s->graphics.anim = SA2_ANIM_GAME_OVER; s->variant = SA2_ANIM_VARIANT_GAME_OVER_GAME; @@ -175,7 +179,7 @@ static void InitOverScreen(LostLifeCause lostLifeCause) } s->prevVariant = -1; s->x = 0; - s->y = DISPLAY_HEIGHT / 2; + s->y = G_OVR_TXT_Y; s->oamFlags = SPRITE_OAM_ORDER(3); s->graphics.size = 0; s->qAnimDelay = 0; @@ -185,12 +189,12 @@ static void InitOverScreen(LostLifeCause lostLifeCause) UpdateSpriteAnimation(s); s = &screen->sprOver; - s->graphics.dest = VramMalloc(0x40); + s->graphics.dest = ALLOC_TILES_VARIANT(SA2_ANIM_GAME_OVER, OVER); s->graphics.anim = SA2_ANIM_GAME_OVER; s->variant = SA2_ANIM_VARIANT_GAME_OVER_OVER; s->prevVariant = -1; s->x = 0; - s->y = DISPLAY_HEIGHT / 2; + s->y = G_OVR_TXT_Y; s->graphics.size = 0; s->oamFlags = SPRITE_OAM_ORDER(3); s->qAnimDelay = 0; @@ -214,9 +218,10 @@ void Task_GameOverScreenMain(void) Sprite *s = &screen->sprGameOrTime; Sprite *sprite2 = &screen->sprOver; - gBldRegs.bldCnt = 0x3FEF; + gBldRegs.bldCnt = BLDCNT_TGT2_ALL | BLDCNT_EFFECT_DARKEN | (BLDCNT_TGT1_ALL & ~BLDCNT_TGT1_OBJ); if (screen->framesUntilDone == G_OVR_TXT_FADE_1_X) { + // Lighten up text screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -226,6 +231,7 @@ void Task_GameOverScreenMain(void) } if (screen->framesUntilDone == G_OVR_TXT_FADE_2_X) { + // Normalize text color back screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = (SCREEN_FADE_FLAG_2 | SCREEN_FADE_FLAG_DARKEN); @@ -291,7 +297,7 @@ void Task_TimeOverScreenMain(void) Sprite *sprite2 = &screen->sprOver; TEMP_PrintX(screen); - gBldRegs.bldCnt = 0x3FEF; + gBldRegs.bldCnt = BLDCNT_TGT2_ALL | BLDCNT_EFFECT_DARKEN | (BLDCNT_TGT1_ALL & ~BLDCNT_TGT1_OBJ); if (screen->framesUntilDone == T_OVR_TXT_FADE_1_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; @@ -346,7 +352,7 @@ void Task_GameOverScreen3(void) TEMP_PrintX(screen); if (UpdateScreenFade(&screen->unk0) != SCREEN_FADE_RUNNING) { - screen->framesUntilDone = 140; + screen->framesUntilDone = T_OVR_POINT_PAUSE; UpdateScreenFade(&screen->unk0); gCurTask->main = Task_GameOverScreen4; } @@ -357,7 +363,6 @@ void Task_GameOverScreen3(void) void Task_GameOverScreen4(void) { GameOverScreen *screen = TASK_DATA(gCurTask); - TEMP_PrintX(screen); if (--screen->framesUntilDone == G_OVR_TXT_END_X) { TasksDestroyAll(); @@ -368,6 +373,8 @@ void Task_GameOverScreen4(void) } else { DisplayOverScreenTextSprites(screen); } + + TEMP_PrintX(screen); } void DisplayOverScreenTextSprites(GameOverScreen *screen) diff --git a/src/game/stage/player.c b/src/game/stage/player.c index d2960174e..8bee662c8 100644 --- a/src/game/stage/player.c +++ b/src/game/stage/player.c @@ -800,7 +800,11 @@ void SetStageSpawnPos(u32 character, u32 level, u32 playerID, Player *p) } p->unk98 = 0; +#if DEBUG + p->checkpointTime = ZONE_TIME_TO_INT(10, 0) - 3; +#else p->checkpointTime = 0; +#endif p->spriteInfoBody = &gPlayerBodyPSI; p->spriteInfoLimbs = &gPlayerLimbsPSI; } From cd024b69ab49996018da0fdd03698d97e8bdacf3 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:29:01 +0100 Subject: [PATCH 04/10] Slightly better macro names --- src/game/game_over.c | 91 +++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/src/game/game_over.c b/src/game/game_over.c index 7083fc6e7..13101d834 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -20,30 +20,35 @@ #include "constants/songs.h" #include "constants/zones.h" -#define G_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) -#define T_OVR_TXT_REST_X (DISPLAY_WIDTH / 2) -#define G_OVR_TXT_Y (DISPLAY_HEIGHT / 2) -#define T_OVR_TXT_Y (DISPLAY_HEIGHT / 2) +// NOTE: +// The prefixes indicate their relation to the specific "over" screen: +// G_x = GAME OVER +// T_x = TIME OVER -#define G_OVR_TXT_START_X (G_OVR_TXT_REST_X + 20) -#define T_OVR_TXT_START_X (T_OVR_TXT_REST_X + 60) +// These are shared, no need to prefix. +// TODO: Should we add global DISPLAY_MIDDLE_X|Y #defines and remove these? +#define REST_X (DISPLAY_WIDTH / 2) +#define REST_Y (DISPLAY_HEIGHT / 2) -#define T_OVR_TXT_MOVE_DELTA (T_OVR_TXT_REST_X + 40) +#define G_START_X (REST_X + 20) +#define T_START_X (REST_X + 60) + +#define T_PRE_PAUSE_DELTA (20) // TODO: Maybe these should represent X values, not time? -#define T_OVR_POINT_PAUSE (T_OVR_TXT_REST_X + 20) -#define T_OVR_PAUSE_DURATION (ZONE_TIME_TO_INT(0, 1) + ZONE_TIME_TO_INT(0, 2. / 3.)) -#define T_OVR_FADEOUT_DURATION ZONE_TIME_TO_INT(0, 2) -#define T_OVR_POINT_RESUME (T_OVR_POINT_PAUSE - T_OVR_PAUSE_DURATION) +#define T_PAUSE_X (REST_X + 20) +#define T_DURATION_PAUSE (ZONE_TIME_TO_INT(0, 1) + ZONE_TIME_TO_INT(0, 2. / 3.)) +#define T_DURATION_FADEOUT ZONE_TIME_TO_INT(0, 2) +#define T_POINT_RESUME (T_PAUSE_X - T_DURATION_PAUSE) -#define G_OVR_TXT_FADE_1_X (G_OVR_TXT_REST_X - ZONE_TIME_TO_INT(0, 1)) -#define G_OVR_TXT_FADE_2_X (G_OVR_TXT_FADE_1_X - 10) +#define G_FADE_1_X (REST_X - ZONE_TIME_TO_INT(0, 1)) +#define G_FADE_2_X (G_FADE_1_X - 10) -#define T_OVR_TXT_FADE_1_X (G_OVR_TXT_REST_X + 30) -#define T_OVR_TXT_FADE_2_X (T_OVR_POINT_RESUME - 10) +#define T_FADE_1_X (REST_X + 30) +#define T_FADE_2_X (T_POINT_RESUME - 10) -#define G_OVR_TXT_END_X (G_OVR_TXT_REST_X - T_OVR_FADEOUT_DURATION) -#define T_OVR_TXT_END_X (T_OVR_POINT_RESUME - 40) +#define G_END_X (REST_X - T_DURATION_FADEOUT) +#define T_END_X (T_POINT_RESUME - 40) typedef struct { ScreenFade unk0; @@ -161,9 +166,9 @@ static void InitOverScreen(LostLifeCause lostLifeCause) screen = TASK_DATA(t); if (lostLifeCause & OVER_CAUSE_ZERO_LIVES) { - screen->framesUntilDone = G_OVR_TXT_START_X; + screen->framesUntilDone = G_START_X; } else { - screen->framesUntilDone = T_OVR_TXT_START_X; + screen->framesUntilDone = T_START_X; } TEMP_PrintX(screen); @@ -179,7 +184,7 @@ static void InitOverScreen(LostLifeCause lostLifeCause) } s->prevVariant = -1; s->x = 0; - s->y = G_OVR_TXT_Y; + s->y = REST_Y; s->oamFlags = SPRITE_OAM_ORDER(3); s->graphics.size = 0; s->qAnimDelay = 0; @@ -194,7 +199,7 @@ static void InitOverScreen(LostLifeCause lostLifeCause) s->variant = SA2_ANIM_VARIANT_GAME_OVER_OVER; s->prevVariant = -1; s->x = 0; - s->y = G_OVR_TXT_Y; + s->y = REST_Y; s->graphics.size = 0; s->oamFlags = SPRITE_OAM_ORDER(3); s->qAnimDelay = 0; @@ -220,7 +225,7 @@ void Task_GameOverScreenMain(void) gBldRegs.bldCnt = BLDCNT_TGT2_ALL | BLDCNT_EFFECT_DARKEN | (BLDCNT_TGT1_ALL & ~BLDCNT_TGT1_OBJ); - if (screen->framesUntilDone == G_OVR_TXT_FADE_1_X) { + if (screen->framesUntilDone == G_FADE_1_X) { // Lighten up text screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); @@ -230,7 +235,7 @@ void Task_GameOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone == G_OVR_TXT_FADE_2_X) { + if (screen->framesUntilDone == G_FADE_2_X) { // Normalize text color back screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); @@ -240,18 +245,18 @@ void Task_GameOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone > G_OVR_TXT_FADE_1_X) { - s16 temp = screen->framesUntilDone + G_OVR_TXT_FADE_1_X; + if (screen->framesUntilDone > G_FADE_1_X) { + s16 temp = screen->framesUntilDone + G_FADE_1_X; s->x = temp; sprite2->x = temp; } else { - s->x = G_OVR_TXT_REST_X; - sprite2->x = G_OVR_TXT_REST_X; + s->x = REST_X; + sprite2->x = REST_X; } UpdateScreenFade(&screen->unk0); - if (--screen->framesUntilDone == G_OVR_TXT_END_X) { + if (--screen->framesUntilDone == G_END_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -260,7 +265,7 @@ void Task_GameOverScreenMain(void) | BLDCNT_TGT1_BG3 | BLDCNT_TGT2_ALL); screen->unk0.bldAlpha = 0; - screen->framesUntilDone = G_OVR_TXT_REST_X; + screen->framesUntilDone = REST_X; gCurTask->main = Task_GameOverScreen2; } TEMP_PrintX(screen); @@ -274,7 +279,7 @@ void Task_GameOverScreen2(void) UpdateScreenFade(&screen->unk0); TEMP_PrintX(screen); - if (--screen->framesUntilDone == G_OVR_TXT_END_X) { + if (--screen->framesUntilDone == G_END_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = (SCREEN_FADE_FLAG_LIGHTEN); @@ -299,7 +304,7 @@ void Task_TimeOverScreenMain(void) gBldRegs.bldCnt = BLDCNT_TGT2_ALL | BLDCNT_EFFECT_DARKEN | (BLDCNT_TGT1_ALL & ~BLDCNT_TGT1_OBJ); - if (screen->framesUntilDone == T_OVR_TXT_FADE_1_X) { + if (screen->framesUntilDone == T_FADE_1_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -308,7 +313,7 @@ void Task_TimeOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone == T_OVR_POINT_PAUSE) { + if (screen->framesUntilDone == T_PAUSE_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = (SCREEN_FADE_FLAG_2 | SCREEN_FADE_FLAG_DARKEN); @@ -317,7 +322,7 @@ void Task_TimeOverScreenMain(void) screen->unk0.bldAlpha = 0; } - if (screen->framesUntilDone == T_OVR_TXT_FADE_2_X) { + if (screen->framesUntilDone == T_FADE_2_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -328,7 +333,7 @@ void Task_TimeOverScreenMain(void) UpdateScreenFade(&screen->unk0); - if (--screen->framesUntilDone == T_OVR_TXT_END_X) { + if (--screen->framesUntilDone == T_END_X) { TasksDestroyAll(); PAUSE_BACKGROUNDS_QUEUE(); gBgSpritesCount = 0; @@ -352,7 +357,7 @@ void Task_GameOverScreen3(void) TEMP_PrintX(screen); if (UpdateScreenFade(&screen->unk0) != SCREEN_FADE_RUNNING) { - screen->framesUntilDone = T_OVR_POINT_PAUSE; + screen->framesUntilDone = T_PAUSE_X; UpdateScreenFade(&screen->unk0); gCurTask->main = Task_GameOverScreen4; } @@ -364,7 +369,7 @@ void Task_GameOverScreen4(void) { GameOverScreen *screen = TASK_DATA(gCurTask); - if (--screen->framesUntilDone == G_OVR_TXT_END_X) { + if (--screen->framesUntilDone == G_END_X) { TasksDestroyAll(); PAUSE_BACKGROUNDS_QUEUE(); gBgSpritesCount = 0; @@ -391,18 +396,18 @@ void UpdateTimeOverScreenSprites(GameOverScreen *screen) Sprite *sprite2 = &screen->sprOver; TEMP_PrintX(screen); - if (screen->framesUntilDone > T_OVR_POINT_PAUSE) { + if (screen->framesUntilDone > T_PAUSE_X) { // Move into screen middle - s16 temp = (screen->framesUntilDone * 2) - T_OVR_TXT_MOVE_DELTA; + s16 temp = (screen->framesUntilDone * 2) - (T_PAUSE_X + T_PRE_PAUSE_DELTA); s->x = temp; sprite2->x = temp; - } else if (screen->framesUntilDone > T_OVR_POINT_RESUME) { + } else if (screen->framesUntilDone > T_POINT_RESUME) { // Stay at screen middle - s->x = T_OVR_TXT_REST_X; - sprite2->x = T_OVR_TXT_REST_X; - } else if (screen->framesUntilDone > T_OVR_TXT_END_X) { + s->x = REST_X; + sprite2->x = REST_X; + } else if (screen->framesUntilDone > T_END_X) { // Move left during screen fade-out - s16 temp = T_OVR_TXT_REST_X - ((T_OVR_POINT_RESUME - screen->framesUntilDone) * 2); + s16 temp = REST_X - ((T_POINT_RESUME - screen->framesUntilDone) * 2); s->x = temp; sprite2->x = temp; } else { From df41fffa46000dbc5a3ea43a046156d91172e365 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Tue, 24 Mar 2026 21:34:50 +0100 Subject: [PATCH 05/10] Fix Game Over x-values --- src/game/game_over.c | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/src/game/game_over.c b/src/game/game_over.c index 13101d834..b0c54212d 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -26,14 +26,16 @@ // T_x = TIME OVER // These are shared, no need to prefix. -// TODO: Should we add global DISPLAY_MIDDLE_X|Y #defines and remove these? +// TODO: Should we add global DISPLAY_CENTER_X|Y #defines and remove these? #define REST_X (DISPLAY_WIDTH / 2) #define REST_Y (DISPLAY_HEIGHT / 2) +#define DURATION_TEXT_BLINK 10 #define G_START_X (REST_X + 20) #define T_START_X (REST_X + 60) #define T_PRE_PAUSE_DELTA (20) +#define G_PRE_PAUSE_DELTA (60) // TODO: Maybe these should represent X values, not time? #define T_PAUSE_X (REST_X + 20) @@ -42,7 +44,7 @@ #define T_POINT_RESUME (T_PAUSE_X - T_DURATION_PAUSE) #define G_FADE_1_X (REST_X - ZONE_TIME_TO_INT(0, 1)) -#define G_FADE_2_X (G_FADE_1_X - 10) +#define G_FADE_2_X (G_FADE_1_X - DURATION_TEXT_BLINK) #define T_FADE_1_X (REST_X + 30) #define T_FADE_2_X (T_POINT_RESUME - 10) @@ -74,16 +76,6 @@ void Task_GameOverScreen4(void); void UpdateTimeOverScreenSprites(GameOverScreen *screen); void Task_GameOverScreen3(void); -#if DEBUG -void TEMP_PrintX(GameOverScreen *screen) -{ - printf("%d\n", screen->framesUntilDone); - Debug_PrintIntegerAt(screen->framesUntilDone, 32, 24); -} -#else -#define TEMP_PrintX(x) -#endif - void CreateGameOverScreen(LostLifeCause lostLifeCause) { struct Task *t = TaskCreate(Task_FadeoutToOverScreen, sizeof(GameOverScreenFade), 0x2220, 0, NULL); @@ -138,10 +130,6 @@ static void InitOverScreen(LostLifeCause lostLifeCause) GameOverScreen *screen; Sprite *s; ScreenFade *fade; -#if DEBUG - Debug_CreateAsciiTask(0, 0); - // lostLifeCause = OVER_CAUSE_ZERO_LIVES; -#endif gWinRegs[WINREG_WININ] = WIN_RANGE(0, 0); gWinRegs[WINREG_WINOUT] = WIN_RANGE(0, 0); @@ -171,8 +159,6 @@ static void InitOverScreen(LostLifeCause lostLifeCause) screen->framesUntilDone = T_START_X; } - TEMP_PrintX(screen); - s = &screen->sprGameOrTime; s->graphics.dest = ALLOC_TILES_VARIANT(SA2_ANIM_GAME_OVER, GAME); if (lostLifeCause & OVER_CAUSE_ZERO_LIVES) { @@ -246,7 +232,7 @@ void Task_GameOverScreenMain(void) } if (screen->framesUntilDone > G_FADE_1_X) { - s16 temp = screen->framesUntilDone + G_FADE_1_X; + s16 temp = screen->framesUntilDone + G_PRE_PAUSE_DELTA; s->x = temp; sprite2->x = temp; } else { @@ -268,7 +254,6 @@ void Task_GameOverScreenMain(void) screen->framesUntilDone = REST_X; gCurTask->main = Task_GameOverScreen2; } - TEMP_PrintX(screen); DisplayOverScreenTextSprites(screen); } @@ -277,7 +262,6 @@ void Task_GameOverScreen2(void) { GameOverScreen *screen = TASK_DATA(gCurTask); UpdateScreenFade(&screen->unk0); - TEMP_PrintX(screen); if (--screen->framesUntilDone == G_END_X) { screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; @@ -290,7 +274,6 @@ void Task_GameOverScreen2(void) gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; gCurTask->main = Task_GameOverScreen3; } - TEMP_PrintX(screen); DisplayOverScreenTextSprites(screen); } @@ -300,7 +283,6 @@ void Task_TimeOverScreenMain(void) GameOverScreen *screen = TASK_DATA(gCurTask); Sprite *s = &screen->sprGameOrTime; Sprite *sprite2 = &screen->sprOver; - TEMP_PrintX(screen); gBldRegs.bldCnt = BLDCNT_TGT2_ALL | BLDCNT_EFFECT_DARKEN | (BLDCNT_TGT1_ALL & ~BLDCNT_TGT1_OBJ); @@ -354,7 +336,6 @@ void Task_TimeOverScreenMain(void) void Task_GameOverScreen3(void) { GameOverScreen *screen = TASK_DATA(gCurTask); - TEMP_PrintX(screen); if (UpdateScreenFade(&screen->unk0) != SCREEN_FADE_RUNNING) { screen->framesUntilDone = T_PAUSE_X; @@ -378,8 +359,6 @@ void Task_GameOverScreen4(void) } else { DisplayOverScreenTextSprites(screen); } - - TEMP_PrintX(screen); } void DisplayOverScreenTextSprites(GameOverScreen *screen) @@ -394,7 +373,6 @@ void UpdateTimeOverScreenSprites(GameOverScreen *screen) { Sprite *s = &screen->sprGameOrTime; Sprite *sprite2 = &screen->sprOver; - TEMP_PrintX(screen); if (screen->framesUntilDone > T_PAUSE_X) { // Move into screen middle From 70cd72f5391efb9fcb4a4c93d7c573d2a10b9dc1 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Tue, 24 Mar 2026 21:36:12 +0100 Subject: [PATCH 06/10] Remove DEBUG code --- src/game/stage/player.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/game/stage/player.c b/src/game/stage/player.c index 8bee662c8..d2960174e 100644 --- a/src/game/stage/player.c +++ b/src/game/stage/player.c @@ -800,11 +800,7 @@ void SetStageSpawnPos(u32 character, u32 level, u32 playerID, Player *p) } p->unk98 = 0; -#if DEBUG - p->checkpointTime = ZONE_TIME_TO_INT(10, 0) - 3; -#else p->checkpointTime = 0; -#endif p->spriteInfoBody = &gPlayerBodyPSI; p->spriteInfoLimbs = &gPlayerLimbsPSI; } From 0e77c09e94f8fa3c1e727ae21afc7b1be1929506 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Tue, 24 Mar 2026 23:17:05 +0100 Subject: [PATCH 07/10] Formatter... --- src/game/game_over.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/game_over.c b/src/game/game_over.c index b0c54212d..ba31f90d8 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -27,8 +27,8 @@ // These are shared, no need to prefix. // TODO: Should we add global DISPLAY_CENTER_X|Y #defines and remove these? -#define REST_X (DISPLAY_WIDTH / 2) -#define REST_Y (DISPLAY_HEIGHT / 2) +#define REST_X (DISPLAY_WIDTH / 2) +#define REST_Y (DISPLAY_HEIGHT / 2) #define DURATION_TEXT_BLINK 10 #define G_START_X (REST_X + 20) From fdcf227104b45d384fd90c60813b3fee8f0df027 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:31:57 +0100 Subject: [PATCH 08/10] Some minor documentation of tasks --- src/game/game_over.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/game/game_over.c b/src/game/game_over.c index ba31f90d8..b205dcfd2 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -67,14 +67,14 @@ typedef struct { void Task_FadeoutToOverScreen(void); void DisplayOverScreenTextSprites(GameOverScreen *screen); -void Task_GameOverScreen2(void); +void Task_OverScreenFadeBgUpdate(void); static void InitOverScreen(LostLifeCause lostLifeCause); void Task_GameOverScreenMain(void); void TaskDestructor_GameOverTimeOverScreen(struct Task *); void Task_TimeOverScreenMain(void); -void Task_GameOverScreen4(void); +void Task_OverScreenWaitMusicEnd(void); void UpdateTimeOverScreenSprites(GameOverScreen *screen); -void Task_GameOverScreen3(void); +void Task_OverScreenFadeTextUpdate(void); void CreateGameOverScreen(LostLifeCause lostLifeCause) { @@ -232,10 +232,12 @@ void Task_GameOverScreenMain(void) } if (screen->framesUntilDone > G_FADE_1_X) { + // Move "GAME OVER" text into screen middle s16 temp = screen->framesUntilDone + G_PRE_PAUSE_DELTA; s->x = temp; sprite2->x = temp; } else { + // "GAME OVER" text is at screen middle s->x = REST_X; sprite2->x = REST_X; } @@ -252,13 +254,13 @@ void Task_GameOverScreenMain(void) screen->unk0.bldAlpha = 0; screen->framesUntilDone = REST_X; - gCurTask->main = Task_GameOverScreen2; + gCurTask->main = Task_OverScreenFadeBgUpdate; } DisplayOverScreenTextSprites(screen); } -void Task_GameOverScreen2(void) +void Task_OverScreenFadeBgUpdate(void) { GameOverScreen *screen = TASK_DATA(gCurTask); UpdateScreenFade(&screen->unk0); @@ -272,7 +274,7 @@ void Task_GameOverScreen2(void) screen->unk0.bldAlpha = 0; memset(gBgPalette, RGB16(31, 7, 0), sizeof(gBgPalette)); gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; - gCurTask->main = Task_GameOverScreen3; + gCurTask->main = Task_OverScreenFadeTextUpdate; } DisplayOverScreenTextSprites(screen); @@ -287,6 +289,7 @@ void Task_TimeOverScreenMain(void) gBldRegs.bldCnt = BLDCNT_TGT2_ALL | BLDCNT_EFFECT_DARKEN | (BLDCNT_TGT1_ALL & ~BLDCNT_TGT1_OBJ); if (screen->framesUntilDone == T_FADE_1_X) { + // Lighten up text screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -296,6 +299,7 @@ void Task_TimeOverScreenMain(void) } if (screen->framesUntilDone == T_PAUSE_X) { + // Normalize text color back screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = (SCREEN_FADE_FLAG_2 | SCREEN_FADE_FLAG_DARKEN); @@ -305,6 +309,7 @@ void Task_TimeOverScreenMain(void) } if (screen->framesUntilDone == T_FADE_2_X) { + // Init screen fadeout screen->unk0.window = SCREEN_FADE_USE_WINDOW_1; screen->unk0.brightness = Q(0); screen->unk0.flags = SCREEN_FADE_FLAG_LIGHTEN; @@ -333,20 +338,20 @@ void Task_TimeOverScreenMain(void) UpdateTimeOverScreenSprites(screen); } -void Task_GameOverScreen3(void) +void Task_OverScreenFadeTextUpdate(void) { GameOverScreen *screen = TASK_DATA(gCurTask); if (UpdateScreenFade(&screen->unk0) != SCREEN_FADE_RUNNING) { screen->framesUntilDone = T_PAUSE_X; UpdateScreenFade(&screen->unk0); - gCurTask->main = Task_GameOverScreen4; + gCurTask->main = Task_OverScreenWaitMusicEnd; } DisplayOverScreenTextSprites(screen); } -void Task_GameOverScreen4(void) +void Task_OverScreenWaitMusicEnd(void) { GameOverScreen *screen = TASK_DATA(gCurTask); From ab8b52e1678cbc04e09cfd2a19b641363a33b790 Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Wed, 25 Mar 2026 17:09:55 +0100 Subject: [PATCH 09/10] Introduce DISPLAY_CENTER_X|Y macros --- include/gba/defines.h | 2 + src/game/countdown.c | 8 +-- src/game/course_select.c | 2 +- src/game/cutscenes/credits_end.c | 6 +- src/game/cutscenes/final_ending_fall.c | 4 +- src/game/cutscenes/final_ending_land.c | 12 ++-- src/game/cutscenes/missing_emeralds.c | 2 +- src/game/decomp_credits.c | 14 ++-- src/game/enemies/mon.c | 4 +- src/game/game_over.c | 33 +++++----- src/game/multiboot/collect_rings/results.c | 8 +-- src/game/multiboot/connection.c | 4 +- src/game/multiplayer/communication_outcome.c | 6 +- src/game/multiplayer/indicators.c | 32 ++++----- src/game/multiplayer/multipak_connection.c | 4 +- src/game/multiplayer/multiplayer_event_mgr.c | 4 +- src/game/multiplayer/team_play.c | 6 +- src/game/multiplayer_lobby.c | 4 +- src/game/sa1_sa2_shared/demo_manager.c | 8 +-- src/game/sa1_sa2_shared/pause_menu.c | 4 +- src/game/sound_test.c | 22 +++---- src/game/special_stage/guard_robo.c | 2 +- src/game/special_stage/main.c | 6 +- src/game/special_stage/physics.c | 2 +- src/game/special_stage/player.c | 6 +- src/game/special_stage/ui.c | 69 ++++++++++---------- src/game/special_stage/utils.c | 2 +- src/game/stage/camera.c | 22 +++---- src/game/stage/intro.c | 14 ++-- src/game/stage/player.c | 8 +-- src/game/stage/player_super_sonic.c | 2 +- src/game/stage/results.c | 28 ++++---- src/game/stage/ui.c | 14 ++-- src/game/time_attack/lobby.c | 4 +- src/game/time_attack/mode_select.c | 2 +- src/game/time_attack/results.c | 30 ++++----- src/game/title_screen.c | 20 +++--- 37 files changed, 209 insertions(+), 211 deletions(-) diff --git a/include/gba/defines.h b/include/gba/defines.h index 35127c3d5..0ae35e119 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -133,6 +133,8 @@ extern uint8_t OAM[OAM_SIZE]; #define OBJ_VRAM_TOTAL_SIZE (VRAM_SIZE - BG_VRAM_SIZE) #endif +#define DISPLAY_CENTER_X (DISPLAY_WIDTH / 2) +#define DISPLAY_CENTER_Y (DISPLAY_HEIGHT / 2) #if WIDESCREEN_HACK #define WIN_REG_SIZE 4 diff --git a/src/game/countdown.c b/src/game/countdown.c index ec5723055..689a734a0 100644 --- a/src/game/countdown.c +++ b/src/game/countdown.c @@ -20,13 +20,13 @@ #define ALIGN_DIGITS_VERTICALLY !TRUE #if !PLATFORM_GBA && ALIGN_DIGITS_HORIZONTALLY -#define DIGITS_X (DISPLAY_WIDTH / 2) +#define DIGITS_X DISPLAY_CENTER_X #else #define DIGITS_X ((I(gPlayer.qWorldX) - gCamera.x) + 24) #endif #if !PLATFORM_GBA && ALIGN_DIGITS_VERTICALLY -#define DIGITS_Y (DISPLAY_HEIGHT / 2) +#define DIGITS_Y DISPLAY_CENTER_Y #else #define DIGITS_Y ((I(gPlayer.qWorldY) - gCamera.y) - 24) #endif @@ -249,7 +249,7 @@ void Task_RaceStartMessageMain(void) s = &startMessage->sLeft; transform = &startMessage->transformLeft; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT / 4); s->frameFlags = gOamMatrixIndex++ | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1); transform->rotation = 0; @@ -271,7 +271,7 @@ void Task_RaceStartMessageMain(void) s = &startMessage->sRight; transform = &startMessage->transformRight; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT / 4); s->frameFlags = gOamMatrixIndex++ | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1); transform->rotation = 0; diff --git a/src/game/course_select.c b/src/game/course_select.c index 6bf40bfbf..092ed8b56 100644 --- a/src/game/course_select.c +++ b/src/game/course_select.c @@ -978,7 +978,7 @@ static void RenderUI(struct CourseSelectionScreen *coursesScreen) } else { s = &coursesScreen->chaosEmeralds[0]; } - s->x = (((i * 3)) * 8) + ((DISPLAY_WIDTH / 2) - 84); + s->x = (((i * 3)) * 8) + (DISPLAY_CENTER_X - 84); UpdateSpriteAnimation(s); DisplaySprite(s); } diff --git a/src/game/cutscenes/credits_end.c b/src/game/cutscenes/credits_end.c index 64b8b9df5..fc65eaecb 100644 --- a/src/game/cutscenes/credits_end.c +++ b/src/game/cutscenes/credits_end.c @@ -169,7 +169,7 @@ void CreateCreditsEndCutScene(u8 creditsVariant) s->graphics.anim = gUnknown_080E12D0[0].anim; s->variant = gUnknown_080E12D0[0].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = -20; s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; @@ -190,7 +190,7 @@ void CreateCreditsEndCutScene(u8 creditsVariant) s->graphics.anim = gUnknown_080E12D0[1].anim; s->variant = gUnknown_080E12D0[1].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = DISPLAY_HEIGHT + 96; // Note: 96 is the width of metatiles s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; @@ -211,7 +211,7 @@ void CreateCreditsEndCutScene(u8 creditsVariant) s->graphics.anim = gUnknown_080E12D0[2].anim; s->variant = gUnknown_080E12D0[2].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = DISPLAY_HEIGHT + 96; s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; diff --git a/src/game/cutscenes/final_ending_fall.c b/src/game/cutscenes/final_ending_fall.c index d180a243b..ba0f32635 100644 --- a/src/game/cutscenes/final_ending_fall.c +++ b/src/game/cutscenes/final_ending_fall.c @@ -230,8 +230,8 @@ void CreateFinalEndingFallCutScene(void) s->graphics.dest = (void *)scene->unk494; scene->unk494 += 0x1A00; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2); + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; s->animCursor = 0; diff --git a/src/game/cutscenes/final_ending_land.c b/src/game/cutscenes/final_ending_land.c index 8ee9b6ac2..a7ba1aa2d 100644 --- a/src/game/cutscenes/final_ending_land.c +++ b/src/game/cutscenes/final_ending_land.c @@ -226,7 +226,7 @@ void CreateFinalEndingLandingCutScene(void) s->graphics.dest = (void *)scene->unk618; scene->unk618 += 0x120; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2) - 10; + s->x = DISPLAY_CENTER_X - 10; s->y = -20; s->oamFlags = SPRITE_OAM_ORDER(1); s->graphics.size = 0; @@ -268,7 +268,7 @@ void CreateFinalEndingLandingCutScene(void) s->graphics.anim = gUnknown_080E17A4[gSelectedCharacter].anim; s->variant = gUnknown_080E17A4[gSelectedCharacter].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = -20; s->oamFlags = SPRITE_OAM_ORDER(1); s->graphics.size = 0; @@ -382,7 +382,7 @@ void CreateFinalEndingLandingCutScene(void) s->graphics.anim = gUnknown_080E17A4[40].anim; s->variant = gUnknown_080E17A4[40].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = -20; s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; @@ -403,7 +403,7 @@ void CreateFinalEndingLandingCutScene(void) s->graphics.anim = gUnknown_080E17A4[41].anim; s->variant = gUnknown_080E17A4[41].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = DISPLAY_HEIGHT + 96; s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; @@ -424,7 +424,7 @@ void CreateFinalEndingLandingCutScene(void) s->graphics.anim = gUnknown_080E17A4[42].anim; s->variant = gUnknown_080E17A4[42].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = DISPLAY_HEIGHT + 96; s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; @@ -445,7 +445,7 @@ void CreateFinalEndingLandingCutScene(void) s->graphics.anim = gUnknown_080E17A4[gSelectedCharacter + 0x19].anim; s->variant = gUnknown_080E17A4[gSelectedCharacter + 0x19].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = 0; s->oamFlags = SPRITE_OAM_ORDER(1); s->graphics.size = 0; diff --git a/src/game/cutscenes/missing_emeralds.c b/src/game/cutscenes/missing_emeralds.c index f405446b9..ee38b4fc8 100644 --- a/src/game/cutscenes/missing_emeralds.c +++ b/src/game/cutscenes/missing_emeralds.c @@ -146,7 +146,7 @@ void CreateMissingChaosEmaraldsCutScene(void) s->y = 90; } s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->oamFlags = SPRITE_OAM_ORDER(0); s->graphics.size = 0; s->animCursor = 0; diff --git a/src/game/decomp_credits.c b/src/game/decomp_credits.c index 81ea96f45..0dbfbc12c 100644 --- a/src/game/decomp_credits.c +++ b/src/game/decomp_credits.c @@ -77,7 +77,7 @@ void CreateDecompCreditsScreen(bool32 hasProfile) s = &cred->sprSonic; s->x = -508; - s->y = (DISPLAY_HEIGHT / 2) - 16; + s->y = DISPLAY_CENTER_Y - 16; SPRITE_INIT_FLAGS(s, 64, SA2_ANIM_CHAR(SA2_CHAR_ANIM_WALK, CHARACTER_SONIC), 4, 18, 2, SPRITE_FLAG_MASK_X_FLIP); s->animSpeed = SPRITE_ANIM_SPEED(4); cred->qSonicScreenX = Q(s->x); @@ -91,8 +91,8 @@ void CreateDecompCreditsScreen(bool32 hasProfile) cred->qTailsScreenX = Q(s->x); s = &cred->sprLogoOllie; - s->x = (DISPLAY_WIDTH / 2) + 24; - s->y = (DISPLAY_HEIGHT / 2) - (LOGO_WIDTH / 2); + s->x = DISPLAY_CENTER_X + 24; + s->y = DISPLAY_CENTER_Y - (LOGO_WIDTH / 2); SPRITE_INIT_FLAGS(s, 64, 1133, 1, 18, 2, SPRITE_FLAG_MASK_X_FLIP); s->palId = 2; cred->qLogoOllieScreenX = Q(s->x); @@ -164,7 +164,7 @@ void Task_DecompCreditsFirst() UpdateSprites(cred); // Check Tails' position - if (cred->sprLogoJace.x <= ((DISPLAY_WIDTH / 2) + 24)) { + if (cred->sprLogoJace.x <= (DISPLAY_CENTER_X + 24)) { cred->sprTails.graphics.anim = SA2_ANIM_CHAR(33, CHARACTER_TAILS); cred->sprTails.variant = 0; cred->qSpeedTails = 0; @@ -199,7 +199,7 @@ void Task_DecompCreditsFirst() } } - if ((cred->qSpeedSonic <= 0) && cred->sprSonic.x < (DISPLAY_WIDTH / 2) + 16) { + if ((cred->qSpeedSonic <= 0) && cred->sprSonic.x < DISPLAY_CENTER_X + 16) { cred->qSpeedSonic = Q(0); cred->sprSonic.graphics.anim = SA2_ANIM_CHAR(SA2_CHAR_ANIM_34, CHARACTER_SONIC); @@ -224,7 +224,7 @@ void Task_SonicArrived(void) UpdateSprites(cred); // Check Tails' position - if (cred->sprLogoJace.x <= ((DISPLAY_WIDTH / 2) + 24)) { + if (cred->sprLogoJace.x <= (DISPLAY_CENTER_X + 24)) { cred->sprTails.graphics.anim = SA2_ANIM_CHAR(33, CHARACTER_TAILS); cred->sprTails.variant = 0; cred->qSpeedTails = 0; @@ -300,7 +300,7 @@ void customHBlank(void) if ((vcount >= DISPLAY_HEIGHT - 16 - 1) && (vcount < DISPLAY_HEIGHT - 1)) { // "PRESS START to continue" ((u16 *)BG_PLTT)[0] = RGB_WHITE; - } else if ((vcount >= (DISPLAY_HEIGHT / 2) - 1) && (vcount < DISPLAY_HEIGHT - 1)) { + } else if ((vcount >= DISPLAY_CENTER_Y - 1) && (vcount < DISPLAY_HEIGHT - 1)) { // Logo background (JaceCear) ((u16 *)BG_PLTT)[0] = ((u16 *)OBJ_PLTT)[3 * PALETTE_LEN_4BPP]; } else { diff --git a/src/game/enemies/mon.c b/src/game/enemies/mon.c index 7be19179a..39484b8e8 100644 --- a/src/game/enemies/mon.c +++ b/src/game/enemies/mon.c @@ -86,7 +86,7 @@ static void Task_MonMain(void) TaskDestroy(gCurTask); return; } else { - if ((gPlayer.qWorldX > mon->x - Q(DISPLAY_WIDTH / 2)) && (gPlayer.qWorldX < mon->x + Q(DISPLAY_WIDTH / 2)) + if ((gPlayer.qWorldX > mon->x - Q(DISPLAY_CENTER_X)) && (gPlayer.qWorldX < mon->x + Q(DISPLAY_CENTER_X)) && (gPlayer.qWorldY > mon->y - Q(50)) && (gPlayer.qWorldY < mon->y + Q(50))) { gCurTask->main = Task_Mon_2; s->graphics.anim = SA2_ANIM_MON; @@ -183,7 +183,7 @@ static void Task_Mon_4(void) Player_UpdateHomingPosition(mon->x, mon->y); if (UpdateSpriteAnimation(s) == 0) { - if ((gPlayer.qWorldX > mon->x - Q(DISPLAY_WIDTH / 2)) && (gPlayer.qWorldX < mon->x + Q(DISPLAY_WIDTH / 2)) + if ((gPlayer.qWorldX > mon->x - Q(DISPLAY_CENTER_X)) && (gPlayer.qWorldX < mon->x + Q(DISPLAY_CENTER_X)) && (gPlayer.qWorldY > mon->y - Q(50)) && (gPlayer.qWorldY < mon->y + Q(50))) { ENEMY_TURN_TO_PLAYER(mon->x, s); diff --git a/src/game/game_over.c b/src/game/game_over.c index b205dcfd2..5080d189a 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -25,31 +25,28 @@ // G_x = GAME OVER // T_x = TIME OVER -// These are shared, no need to prefix. -// TODO: Should we add global DISPLAY_CENTER_X|Y #defines and remove these? -#define REST_X (DISPLAY_WIDTH / 2) -#define REST_Y (DISPLAY_HEIGHT / 2) +// Shared, no need to prefix. #define DURATION_TEXT_BLINK 10 -#define G_START_X (REST_X + 20) -#define T_START_X (REST_X + 60) +#define G_START_X (DISPLAY_CENTER_X + 20) +#define T_START_X (DISPLAY_CENTER_X + 60) #define T_PRE_PAUSE_DELTA (20) #define G_PRE_PAUSE_DELTA (60) // TODO: Maybe these should represent X values, not time? -#define T_PAUSE_X (REST_X + 20) +#define T_PAUSE_X (DISPLAY_CENTER_X + 20) #define T_DURATION_PAUSE (ZONE_TIME_TO_INT(0, 1) + ZONE_TIME_TO_INT(0, 2. / 3.)) #define T_DURATION_FADEOUT ZONE_TIME_TO_INT(0, 2) #define T_POINT_RESUME (T_PAUSE_X - T_DURATION_PAUSE) -#define G_FADE_1_X (REST_X - ZONE_TIME_TO_INT(0, 1)) +#define G_FADE_1_X (DISPLAY_CENTER_X - ZONE_TIME_TO_INT(0, 1)) #define G_FADE_2_X (G_FADE_1_X - DURATION_TEXT_BLINK) -#define T_FADE_1_X (REST_X + 30) +#define T_FADE_1_X (DISPLAY_CENTER_X + 30) #define T_FADE_2_X (T_POINT_RESUME - 10) -#define G_END_X (REST_X - T_DURATION_FADEOUT) +#define G_END_X (DISPLAY_CENTER_X - T_DURATION_FADEOUT) #define T_END_X (T_POINT_RESUME - 40) typedef struct { @@ -170,7 +167,7 @@ static void InitOverScreen(LostLifeCause lostLifeCause) } s->prevVariant = -1; s->x = 0; - s->y = REST_Y; + s->y = DISPLAY_CENTER_Y; s->oamFlags = SPRITE_OAM_ORDER(3); s->graphics.size = 0; s->qAnimDelay = 0; @@ -185,7 +182,7 @@ static void InitOverScreen(LostLifeCause lostLifeCause) s->variant = SA2_ANIM_VARIANT_GAME_OVER_OVER; s->prevVariant = -1; s->x = 0; - s->y = REST_Y; + s->y = DISPLAY_CENTER_Y; s->graphics.size = 0; s->oamFlags = SPRITE_OAM_ORDER(3); s->qAnimDelay = 0; @@ -238,8 +235,8 @@ void Task_GameOverScreenMain(void) sprite2->x = temp; } else { // "GAME OVER" text is at screen middle - s->x = REST_X; - sprite2->x = REST_X; + s->x = DISPLAY_CENTER_X; + sprite2->x = DISPLAY_CENTER_X; } UpdateScreenFade(&screen->unk0); @@ -253,7 +250,7 @@ void Task_GameOverScreenMain(void) | BLDCNT_TGT1_BG3 | BLDCNT_TGT2_ALL); screen->unk0.bldAlpha = 0; - screen->framesUntilDone = REST_X; + screen->framesUntilDone = DISPLAY_CENTER_X; gCurTask->main = Task_OverScreenFadeBgUpdate; } @@ -386,11 +383,11 @@ void UpdateTimeOverScreenSprites(GameOverScreen *screen) sprite2->x = temp; } else if (screen->framesUntilDone > T_POINT_RESUME) { // Stay at screen middle - s->x = REST_X; - sprite2->x = REST_X; + s->x = DISPLAY_CENTER_X; + sprite2->x = DISPLAY_CENTER_X; } else if (screen->framesUntilDone > T_END_X) { // Move left during screen fade-out - s16 temp = REST_X - ((T_POINT_RESUME - screen->framesUntilDone) * 2); + s16 temp = DISPLAY_CENTER_X - ((T_POINT_RESUME - screen->framesUntilDone) * 2); s->x = temp; sprite2->x = temp; } else { diff --git a/src/game/multiboot/collect_rings/results.c b/src/game/multiboot/collect_rings/results.c index 69c43a21c..01309a26d 100644 --- a/src/game/multiboot/collect_rings/results.c +++ b/src/game/multiboot/collect_rings/results.c @@ -269,8 +269,8 @@ void Task_MultiplayerSinglePakResultsScreenInit(void) #ifndef COLLECT_RINGS_ROM if (gMultiSioStatusFlags & MULTI_SIO_PARENT) { s = &resultsScreen->unk400; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2); + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; if (resultsScreen->unk434) { s->graphics.dest = resultsScreen->unk370[2].graphics.dest + 0x180; @@ -524,7 +524,7 @@ void sub_8082788(void) u16 temp; s = &resultsScreen->unk80[i].unk0; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = gMultiplayerRanks[i] * 40 + 20; UpdateSpriteAnimation(s); DisplaySprite(s); @@ -559,7 +559,7 @@ void sub_8082788(void) } else { u16 temp; s = &resultsScreen->unk80[i].unk0; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = i * 40 + 20; UpdateSpriteAnimation(s); DisplaySprite(s); diff --git a/src/game/multiboot/connection.c b/src/game/multiboot/connection.c index ad64bcb5d..b459c0b7c 100644 --- a/src/game/multiboot/connection.c +++ b/src/game/multiboot/connection.c @@ -335,7 +335,7 @@ void StartSinglePakConnect(void) UpdateSpriteAnimation(s); s = &connectScreen->unk3C; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT - 38); s->oamFlags = SPRITE_OAM_ORDER(4); s->graphics.size = 0; @@ -352,7 +352,7 @@ void StartSinglePakConnect(void) ram += gUnknown_080E01B6[connectScreen->unkFA][2] * 0x20; s = &connectScreen->unk6C; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT * (7. / 8.)); s->oamFlags = SPRITE_OAM_ORDER(4); s->graphics.size = 0; diff --git a/src/game/multiplayer/communication_outcome.c b/src/game/multiplayer/communication_outcome.c index 4ac1fe2be..0d4816076 100644 --- a/src/game/multiplayer/communication_outcome.c +++ b/src/game/multiplayer/communication_outcome.c @@ -131,7 +131,7 @@ void CreateMultipackOutcomeScreen(u8 outcome) UpdateSpriteAnimation(s); #elif (GAME == GAME_SA2) s = &outcomeScreen->spr100; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = DISPLAY_HEIGHT - 20; s->graphics.dest = (void *)OBJ_VRAM0; s->oamFlags = SPRITE_OAM_ORDER(15); @@ -164,7 +164,7 @@ void CreateMultipackOutcomeScreen(u8 outcome) UpdateSpriteAnimation(s); #elif (GAME == GAME_SA2) s = &outcomeScreen->sprD0; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = 36; s->graphics.dest = (void *)OBJ_VRAM0 + 0x2000; s->oamFlags = SPRITE_OAM_ORDER(15); @@ -197,7 +197,7 @@ void CreateMultipackOutcomeScreen(u8 outcome) UpdateSpriteAnimation(s); #elif (GAME == GAME_SA2) s = &outcomeScreen->sprA0; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = DISPLAY_HEIGHT - 40; s->graphics.dest = (void *)OBJ_VRAM0 + 0x4000; s->oamFlags = SPRITE_OAM_ORDER(15); diff --git a/src/game/multiplayer/indicators.c b/src/game/multiplayer/indicators.c index 186071ecf..cdbfc3d35 100644 --- a/src/game/multiplayer/indicators.c +++ b/src/game/multiplayer/indicators.c @@ -86,21 +86,21 @@ } \ \ if (rot == 0) { \ - tfy = (DISPLAY_HEIGHT / 2); \ + tfy = DISPLAY_CENTER_Y; \ tfx = DISPLAY_WIDTH; \ } else if (rot == 256) { \ tfy = DISPLAY_HEIGHT; \ - tfx = (DISPLAY_WIDTH / 2); \ + tfx = DISPLAY_CENTER_X; \ } else if (rot == 512) { \ - tfy = (DISPLAY_HEIGHT / 2); \ + tfy = DISPLAY_CENTER_Y; \ tfx = 0; \ } else if (rot == 768) { \ tfy = 0; \ - tfx = (DISPLAY_WIDTH / 2); \ + tfx = DISPLAY_CENTER_X; \ } else { \ if ((targetX) > 0) { \ s16 divRes = Div(SIN_24_8(rot) * 256, COS_24_8(rot)); \ - tfy = ((divRes * 15) >> 5) + (DISPLAY_HEIGHT / 2); \ + tfy = ((divRes * 15) >> 5) + DISPLAY_CENTER_Y; \ \ if ((targetY) > 0) { \ if (tfy >= DISPLAY_HEIGHT) { \ @@ -108,7 +108,7 @@ tfy = DISPLAY_HEIGHT; \ sinVal = (256 - rot) & ONE_CYCLE; \ divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ - tfx = ((divRes * 5) >> 4) + (DISPLAY_WIDTH / 2); \ + tfx = ((divRes * 5) >> 4) + DISPLAY_CENTER_X; \ } else { \ tfx = DISPLAY_WIDTH; \ } \ @@ -118,7 +118,7 @@ tfy = 0; \ sinVal = (256 - rot) & ONE_CYCLE; \ divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ - tfx = (DISPLAY_WIDTH / 2) - ((divRes * 5) >> 4); \ + tfx = DISPLAY_CENTER_X - ((divRes * 5) >> 4); \ } else { \ tfx = DISPLAY_WIDTH; \ } \ @@ -127,14 +127,14 @@ } else { \ s16 divRes \ = Div((SIN_24_8((rot - (SIN_PERIOD / 2)) & ONE_CYCLE)) * 0x100, (COS_24_8((rot - (SIN_PERIOD / 2)) & ONE_CYCLE))); \ - tfy = (DISPLAY_HEIGHT / 2) - ((divRes * 15) >> 5); \ + tfy = DISPLAY_CENTER_Y - ((divRes * 15) >> 5); \ if ((targetY) > 0) { \ if (tfy >= DISPLAY_HEIGHT) { \ s32 sinVal; \ tfy = DISPLAY_HEIGHT; \ sinVal = (768 - rot) & ONE_CYCLE; \ divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ - tfx = ((divRes * 5) >> 4) + (DISPLAY_WIDTH / 2); \ + tfx = ((divRes * 5) >> 4) + DISPLAY_CENTER_X; \ } else { \ tfx = 0; \ } \ @@ -145,7 +145,7 @@ \ sinVal = (768 - rot) & ONE_CYCLE; \ divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ - tfx = (DISPLAY_WIDTH / 2) - ((divRes * 5) >> 4); \ + tfx = DISPLAY_CENTER_X - ((divRes * 5) >> 4); \ } else { \ tfx = 0; \ } \ @@ -259,8 +259,8 @@ static void Task_801951C(void) RETURN_IF_PLAYER_ONSCREEN(mpp->pos.x, mpp->pos.y, gCamera.x, gCamera.y); - opponentX2 = (unsigned)(mpp->pos.x - (DISPLAY_WIDTH / 2) - gCamera.x); - opponentY2 = (unsigned)(mpp->pos.y - (DISPLAY_HEIGHT / 2) - gCamera.y); + opponentX2 = (unsigned)(mpp->pos.x - DISPLAY_CENTER_X - gCamera.x); + opponentY2 = (unsigned)(mpp->pos.y - DISPLAY_CENTER_Y - gCamera.y); UPDATE_INDICATOR(opponentX2, opponentY2, spr, transform); } @@ -280,8 +280,8 @@ static void Task_8019898(void) RETURN_IF_PLAYER_ONSCREEN(mpp->pos.x, mpp->pos.y, gCamera.x, gCamera.y); // _08019576 - opponentX = (unsigned)(mpp->pos.x - (DISPLAY_WIDTH / 2) - gCamera.x); - opponentY = (unsigned)(mpp->pos.y - (DISPLAY_HEIGHT / 2) - gCamera.y); + opponentX = (unsigned)(mpp->pos.x - DISPLAY_CENTER_X - gCamera.x); + opponentY = (unsigned)(mpp->pos.y - DISPLAY_CENTER_Y - gCamera.y); // Only addition is from here if (gCamera.x >= 961) { @@ -294,8 +294,8 @@ static void Task_8019898(void) RETURN_IF_PLAYER_ONSCREEN(mpp->pos.x, mpp->pos.y, normalizedCamX, normalizedCamY); - normalizedCamX = ({ mpp->pos.x - (DISPLAY_WIDTH / 2); }) - normalizedCamX; - normalizedCamY = ({ mpp->pos.y - (DISPLAY_HEIGHT / 2); }) - normalizedCamY; + normalizedCamX = ({ mpp->pos.x - DISPLAY_CENTER_X; }) - normalizedCamX; + normalizedCamY = ({ mpp->pos.y - DISPLAY_CENTER_Y; }) - normalizedCamY; if (MAX(ABS(opponentX), ABS(opponentY)) > MAX(ABS(normalizedCamX), ABS(normalizedCamY))) { opponentX = normalizedCamX; diff --git a/src/game/multiplayer/multipak_connection.c b/src/game/multiplayer/multipak_connection.c index 713fb6ea9..d362eba0d 100644 --- a/src/game/multiplayer/multipak_connection.c +++ b/src/game/multiplayer/multipak_connection.c @@ -128,7 +128,7 @@ void StartMultiPakConnect(void) s->graphics.anim = gPressStartTiles[gLoadedSaveGame->language].anim; s->variant = gPressStartTiles[gLoadedSaveGame->language].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = 122; s->oamFlags = SPRITE_OAM_ORDER(4); s->graphics.size = 0; @@ -144,7 +144,7 @@ void StartMultiPakConnect(void) s->graphics.anim = SA2_ANIM_MP_MSG; s->variant = SA2_ANIM_VARIANT_MP_MSG_2; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT * (7. / 8.)); s->oamFlags = SPRITE_OAM_ORDER(4); s->graphics.size = 0; diff --git a/src/game/multiplayer/multiplayer_event_mgr.c b/src/game/multiplayer/multiplayer_event_mgr.c index 11660b958..4ea8f30e8 100644 --- a/src/game/multiplayer/multiplayer_event_mgr.c +++ b/src/game/multiplayer/multiplayer_event_mgr.c @@ -131,8 +131,8 @@ void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i) gPlayer.moveState |= MOVESTATE_IN_AIR; mpp->unk60 = 30; gPlayer.timerInvulnerability = ZONE_TIME_TO_INT(0, 2); - gCamera.x = (I(gPlayer.qWorldX) + gCamera.shiftX) - (DISPLAY_WIDTH / 2); - gCamera.y = (I(gPlayer.qWorldY) + gCamera.shiftY) - (DISPLAY_HEIGHT / 2); + gCamera.x = (I(gPlayer.qWorldX) + gCamera.shiftX) - DISPLAY_CENTER_X; + gCamera.y = (I(gPlayer.qWorldY) + gCamera.shiftY) - DISPLAY_CENTER_Y; m4aSongNumStart(SE_218); } } diff --git a/src/game/multiplayer/team_play.c b/src/game/multiplayer/team_play.c index 54a0ce055..331f1412f 100644 --- a/src/game/multiplayer/team_play.c +++ b/src/game/multiplayer/team_play.c @@ -407,7 +407,7 @@ static void sub_805CC34(void) sub_805D644(teamPlayScreen); s = &teamPlayScreen->unkC0[0]; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = 28; DisplaySprite(s); @@ -432,7 +432,7 @@ static void sub_805CC34(void) DisplaySprite(s); s = &teamPlayScreen->unkC0[4]; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = 52; DisplaySprite(s); @@ -497,7 +497,7 @@ static void sub_805D1F8(void) MultiPakHeartbeat(); s = &teamPlayScreen->unkC0[1]; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = 28; DisplaySprite(s); diff --git a/src/game/multiplayer_lobby.c b/src/game/multiplayer_lobby.c index 7068754fd..e572f10b8 100644 --- a/src/game/multiplayer_lobby.c +++ b/src/game/multiplayer_lobby.c @@ -164,7 +164,7 @@ static void CreateUI(struct MultiplayerLobbyScreen *lobbyScreen) s->graphics.anim = SA2_ANIM_MP_CHEESE_SITTING; s->variant = 3; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT)-50; s->oamFlags = SPRITE_OAM_ORDER(3); s->graphics.size = 0; @@ -181,7 +181,7 @@ static void CreateUI(struct MultiplayerLobbyScreen *lobbyScreen) s->graphics.anim = sUiText[TextElementOffsetAlt(lang, 3, i)].anim; s->variant = sUiText[TextElementOffsetAlt(lang, 3, i)].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT / 4) - 4; s->oamFlags = SPRITE_OAM_ORDER(4); s->graphics.size = 0; diff --git a/src/game/sa1_sa2_shared/demo_manager.c b/src/game/sa1_sa2_shared/demo_manager.c index 52ef04eda..a0d2d3b35 100644 --- a/src/game/sa1_sa2_shared/demo_manager.c +++ b/src/game/sa1_sa2_shared/demo_manager.c @@ -75,8 +75,8 @@ void CreateDemoManager(void) gStageFlags |= STAGE_FLAG__DEMO_RUNNING; s = &dm->textPressStart; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2) + 33; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y + 33; #if (GAME == GAME_SA1) s->graphics.dest = ALLOC_TILES(SA1_ANIM_PRESS_START_MSG_JP); @@ -104,8 +104,8 @@ void CreateDemoManager(void) UpdateSpriteAnimation(s); s = &dm->textDemoPlay; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2); + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; #if (GAME == GAME_SA1) s->graphics.dest = ALLOC_TILES(SA1_ANIM_DEMO_PLAY); diff --git a/src/game/sa1_sa2_shared/pause_menu.c b/src/game/sa1_sa2_shared/pause_menu.c index 388e08e6a..b402a6cd4 100644 --- a/src/game/sa1_sa2_shared/pause_menu.c +++ b/src/game/sa1_sa2_shared/pause_menu.c @@ -81,8 +81,8 @@ void CreatePauseMenu(void) s->animSpeed = 0x10; s->palId = 0; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2); + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; s->frameFlags = 0; diff --git a/src/game/sound_test.c b/src/game/sound_test.c index e1978b6a2..4de4310a0 100644 --- a/src/game/sound_test.c +++ b/src/game/sound_test.c @@ -352,9 +352,9 @@ static void SoundTestScreenCreateUI(struct Task *t) sub_806A568(backControlName, RENDER_TARGET_SCREEN, sBackButtonText[TextOffset(langOffset, 0, 1, 2)], sBackButtonText[TextOffset(langOffset, 1, 1, 2)], 0x1000, 90, DISPLAY_HEIGHT - 26, 5, sBackButtonText[TextOffset(langOffset, 2, 1, 2)], 0); - sub_806A568(scrollArrows, RENDER_TARGET_SCREEN, 1, 0x3C5, 0x1000, (DISPLAY_WIDTH / 4) + 30, (DISPLAY_HEIGHT / 2) + 10, 5, 2, 0); + sub_806A568(scrollArrows, RENDER_TARGET_SCREEN, 1, 0x3C5, 0x1000, (DISPLAY_WIDTH / 4) + 30, DISPLAY_CENTER_Y + 10, 5, 2, 0); - for (i = 0, xPos = (DISPLAY_WIDTH / 4) + 20, yPos = (DISPLAY_HEIGHT / 2) + 16; i < 3; i++, songNumDisplayElement++, xPos -= 8) { + for (i = 0, xPos = (DISPLAY_WIDTH / 4) + 20, yPos = DISPLAY_CENTER_Y + 16; i < 3; i++, songNumDisplayElement++, xPos -= 8) { if (i == 0) { sub_806A568(songNumDisplayElement, RENDER_TARGET_SCREEN, 2, 0x45f, 0x1000, xPos, yPos, 5, 0x11, 0); } else { @@ -363,8 +363,8 @@ static void SoundTestScreenCreateUI(struct Task *t) } for (i = 0; i < 4; i++) { - sub_806A568(&speakerCone[i], RENDER_TARGET_SCREEN, 0x40, 0x3ce, i | 0x1060, (DISPLAY_WIDTH / 4) + 16, (DISPLAY_HEIGHT / 2) + 10, 6, - 0, 0); + sub_806A568(&speakerCone[i], RENDER_TARGET_SCREEN, 0x40, 0x3ce, i | 0x1060, (DISPLAY_WIDTH / 4) + 16, DISPLAY_CENTER_Y + 10, 6, 0, + 0); } // Transforms static circle @@ -373,7 +373,7 @@ static void SoundTestScreenCreateUI(struct Task *t) transforms[i].qScaleX = Q(1); transforms[i].qScaleY = Q(1); transforms[i].x = (DISPLAY_WIDTH / 4) + 16; - transforms[i].y = (DISPLAY_HEIGHT / 2) + 10; + transforms[i].y = DISPLAY_CENTER_Y + 10; } transforms[1].x--; @@ -381,10 +381,10 @@ static void SoundTestScreenCreateUI(struct Task *t) transforms[2].x--; transforms[3].y--; - sub_806A568(danceStage, RENDER_TARGET_SCREEN, 0x14, 0x3CC, 0x1000, (DISPLAY_WIDTH / 4) * 3, (DISPLAY_HEIGHT / 2) + 60, 6, 0, 4); - sub_806A568(animatedCream, RENDER_TARGET_SCREEN, 0x40, 0x3CA, 0x1000, (DISPLAY_WIDTH / 4) * 3, (DISPLAY_HEIGHT / 2) + 36, 5, 0, 0); + sub_806A568(danceStage, RENDER_TARGET_SCREEN, 0x14, 0x3CC, 0x1000, (DISPLAY_WIDTH / 4) * 3, DISPLAY_CENTER_Y + 60, 6, 0, 4); + sub_806A568(animatedCream, RENDER_TARGET_SCREEN, 0x40, 0x3CA, 0x1000, (DISPLAY_WIDTH / 4) * 3, DISPLAY_CENTER_Y + 36, 5, 0, 0); animatedCream++; - sub_806A568(animatedCream, RENDER_TARGET_SCREEN, 0x48, 0x3C8, 0x1000, (DISPLAY_WIDTH / 4) * 3, (DISPLAY_HEIGHT / 2) + 36, 5, 0, 0); + sub_806A568(animatedCream, RENDER_TARGET_SCREEN, 0x48, 0x3C8, 0x1000, (DISPLAY_WIDTH / 4) * 3, DISPLAY_CENTER_Y + 36, 5, 0, 0); for (i = 0; i < MAX_SOUND_NAME_LENGTH; i++) { sub_806A568(&soundTestScreen->nameDisplay[i], RENDER_TARGET_SCREEN, 2, 0x45F, 0x1000, 0, 0, 5, @@ -569,16 +569,16 @@ static void SoundTestScreenRenderUI(void) gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; for (i = 0; i < 2; i++, numberDisplayDigit++) { - numberDisplayDigit->y = (DISPLAY_HEIGHT / 2) + 16; + numberDisplayDigit->y = DISPLAY_CENTER_Y + 16; if (soundTestScreen->soundNumAnimSteps[i] != 0) { if (soundTestScreen->soundNumAnimSteps[i] > 0) { - numberDisplayDigit->y = sDigitTransitionAnim[soundTestScreen->soundNumAnimSteps[i]] + (DISPLAY_HEIGHT / 2) + 16; + numberDisplayDigit->y = sDigitTransitionAnim[soundTestScreen->soundNumAnimSteps[i]] + DISPLAY_CENTER_Y + 16; soundTestScreen->soundNumAnimSteps[i]--; } if (soundTestScreen->soundNumAnimSteps[i] < 0) { - numberDisplayDigit->y = (DISPLAY_HEIGHT / 2) + 16 - sDigitTransitionAnim[-soundTestScreen->soundNumAnimSteps[i]]; + numberDisplayDigit->y = DISPLAY_CENTER_Y + 16 - sDigitTransitionAnim[-soundTestScreen->soundNumAnimSteps[i]]; soundTestScreen->soundNumAnimSteps[i]++; } } diff --git a/src/game/special_stage/guard_robo.c b/src/game/special_stage/guard_robo.c index 974a5c5b2..edb44b0c1 100644 --- a/src/game/special_stage/guard_robo.c +++ b/src/game/special_stage/guard_robo.c @@ -45,7 +45,7 @@ static void GuardRoboInit(struct SpecialStageGuardRobo *guardRobo) guardRobo->vram = gSpecialStageVramPointer; gSpecialStageVramPointer += maxSize * TILE_SIZE_4BPP; - sub_8071380(&guardRobo->sprite, vramOld, DISPLAY_WIDTH / 2, (DISPLAY_HEIGHT / 2) - 20, 7, sprites); + sub_8071380(&guardRobo->sprite, vramOld, DISPLAY_CENTER_X, DISPLAY_CENTER_Y - 20, 7, sprites); guardRobo->sprites = sprites; guardRobo->state = 1; diff --git a/src/game/special_stage/main.c b/src/game/special_stage/main.c index b30b97315..b7e7fa57d 100644 --- a/src/game/special_stage/main.c +++ b/src/game/special_stage/main.c @@ -122,7 +122,7 @@ void CreateSpecialStage(s16 selectedCharacter, s16 level) stage->unk5C7 = 0; stage->unk5C8 = 0; - stage->cameraOriginX = DISPLAY_WIDTH / 2; + stage->cameraOriginX = DISPLAY_CENTER_X; stage->cameraHeight = 140; stage->worldScale = 64; // scale @@ -132,7 +132,7 @@ void CreateSpecialStage(s16 selectedCharacter, s16 level) // This value is 49 on the GBA // - (horizonHeight / 2) - 1 is just a guess - viewDistance = (DISPLAY_HEIGHT / 2) - (60 / 2) - 1; + viewDistance = DISPLAY_CENTER_Y - (60 / 2) - 1; stage->viewDistance = viewDistance; // Round up to the nearest power of 2 @@ -733,7 +733,7 @@ static void Task_ShowIntroScreen(void) { struct SpecialStage *stage = TASK_DATA(gCurTask); SetupIntroScreenRegisters(); - sub_806CA88(&stage->introText, RENDER_TARGET_SCREEN, 0x28, 0x37C, 0, (DISPLAY_WIDTH / 2), (DISPLAY_HEIGHT / 2), 0, 0, 0); + sub_806CA88(&stage->introText, RENDER_TARGET_SCREEN, 0x28, 0x37C, 0, DISPLAY_CENTER_X, DISPLAY_CENTER_Y, 0, 0, 0); stage->state = 1; m4aSongNumStart(MUS_SPECIAL_STAGE_INTRO); diff --git a/src/game/special_stage/physics.c b/src/game/special_stage/physics.c index 05fe79875..96a9a2f6a 100644 --- a/src/game/special_stage/physics.c +++ b/src/game/special_stage/physics.c @@ -84,7 +84,7 @@ static void Task_PhysicsMain(void) screenX = sin * 20; screenY = cos * 20; - screenX = Q_16_16_TO_INT(screenX) + (DISPLAY_WIDTH / 2) - 8; + screenX = Q_16_16_TO_INT(screenX) + DISPLAY_CENTER_X - 8; screenY = -(Q_16_16_TO_INT(screenY) >> 1) + 120; // Same Y as player player->roboArrow.x = screenX; diff --git a/src/game/special_stage/player.c b/src/game/special_stage/player.c index 63b6ef693..cd3ee2bdc 100644 --- a/src/game/special_stage/player.c +++ b/src/game/special_stage/player.c @@ -108,8 +108,8 @@ struct Task *CreateSpecialStagePlayer(struct SpecialStage *stage) s->graphics.anim = SA2_ANIM_SP_STAGE_ARROW; s->frameFlags = SPRITE_FLAG(PRIORITY, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE, 30); - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2); + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; s->oamFlags = SPRITE_OAM_ORDER(0); s->qAnimDelay = 0; s->prevAnim = -1; @@ -310,7 +310,7 @@ void sub_806D548(Sprite *s, void *vram, s16 y, u8 b, const struct UNK_80DF670 *c s->graphics.size = 0; s->graphics.anim = c4->anim; s->frameFlags = frameFlags; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = y; s->oamFlags = SPRITE_OAM_ORDER(b); s->qAnimDelay = 0; diff --git a/src/game/special_stage/ui.c b/src/game/special_stage/ui.c index 508e539d2..b7df33202 100644 --- a/src/game/special_stage/ui.c +++ b/src/game/special_stage/ui.c @@ -211,29 +211,29 @@ static void CreateRingCounter(struct SpecialStageUI *ui) const struct UNK_80DF670 *sprite; sprite = &sValueSprites[stage->ringsHundreds]; - sub_806CA88(&ui->ringsHundredsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, (DISPLAY_WIDTH / 2) - 20, 16, 1, + sub_806CA88(&ui->ringsHundredsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, DISPLAY_CENTER_X - 20, 16, 1, sprite->variant, 0); sprite = &sValueSprites[stage->ringsTens]; - sub_806CA88(&ui->ringsTensDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, (DISPLAY_WIDTH / 2) - 12, 16, 1, + sub_806CA88(&ui->ringsTensDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, DISPLAY_CENTER_X - 12, 16, 1, sprite->variant, 0); sprite = &sValueSprites[stage->ringsUnits]; - sub_806CA88(&ui->ringsUnitsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, (DISPLAY_WIDTH / 2) - 4, 16, 1, + sub_806CA88(&ui->ringsUnitsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, DISPLAY_CENTER_X - 4, 16, 1, sprite->variant, 0); - sub_806CA88(&ui->unk154, RENDER_TARGET_SCREEN, 8, 0x378, 0x1000, (DISPLAY_WIDTH / 2), 14, 2, 0, 0); + sub_806CA88(&ui->unk154, RENDER_TARGET_SCREEN, 8, 0x378, 0x1000, DISPLAY_CENTER_X, 14, 2, 0, 0); sprite = &sValueSprites[stage->ringsTargetHundreds]; - sub_806CA88(&ui->ringsTargetHundredsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, (DISPLAY_WIDTH / 2) + 4, 24, 1, + sub_806CA88(&ui->ringsTargetHundredsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, DISPLAY_CENTER_X + 4, 24, 1, sprite->variant, 0); sprite = &sValueSprites[stage->ringsTargetTens]; - sub_806CA88(&ui->ringsTargetTensDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, (DISPLAY_WIDTH / 2) + 12, 24, 1, + sub_806CA88(&ui->ringsTargetTensDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, DISPLAY_CENTER_X + 12, 24, 1, sprite->variant, 0); sprite = &sValueSprites[stage->ringsTargetUnits]; - sub_806CA88(&ui->ringsTargetUnitsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, (DISPLAY_WIDTH / 2) + 20, 24, 1, + sub_806CA88(&ui->ringsTargetUnitsDigit, RENDER_TARGET_SCREEN, sprite->size, sprite->anim, 0x1000, DISPLAY_CENTER_X + 20, 24, 1, sprite->variant, 0); } @@ -332,7 +332,7 @@ static void HandlePaused(struct SpecialStageUI *ui) { 40, SA2_ANIM_PAUSE_MENU_FR, 0 }, { 40, SA2_ANIM_PAUSE_MENU_ES, 0 }, { 40, SA2_ANIM_PAUSE_MENU_IT, 0 }, }; - sub_806CA88(s, 1, pauseMenuVariants[lang][0], pauseMenuVariants[lang][1], 0x1000, (DISPLAY_WIDTH / 2), (DISPLAY_HEIGHT / 2), 0, + sub_806CA88(s, 1, pauseMenuVariants[lang][0], pauseMenuVariants[lang][1], 0x1000, DISPLAY_CENTER_X, DISPLAY_CENTER_Y, 0, pauseMenuVariants[lang][2], 0); DmaCopy16(3, &GET_PALETTE_COLOR_OBJ(15, 9), ui->pauseMenuPalette1, sizeof(ui->pauseMenuPalette1)); @@ -348,8 +348,8 @@ static void SpecialStageResultsScreenCreateUI(struct SpecialStageResultsScreen * { const struct UNK_80DF670 *sprite; struct SpecialStage *stage = resultsScreen->stage; - s16 a = (DISPLAY_WIDTH / 2) - 72, b = (DISPLAY_WIDTH / 2) - 72, c = (DISPLAY_WIDTH / 2) - 72; - s16 d = (DISPLAY_WIDTH / 2) + 38, e = (DISPLAY_WIDTH / 2) + 38, f = (DISPLAY_WIDTH / 2) + 38; + s16 a = DISPLAY_CENTER_X - 72, b = DISPLAY_CENTER_X - 72, c = DISPLAY_CENTER_X - 72; + s16 d = DISPLAY_CENTER_X + 38, e = DISPLAY_CENTER_X + 38, f = DISPLAY_CENTER_X + 38; s16 i; u8 chaosEmeralds = gLoadedSaveGame->chaosEmeralds[stage->character]; @@ -359,33 +359,32 @@ static void SpecialStageResultsScreenCreateUI(struct SpecialStageResultsScreen * gSpecialStageSubMenuVramPointer = NULL; if (stage->targetReached) { - sub_806CA88(&resultsScreen->unk4, 1, 0x28, SA2_ANIM_SP_STAGE_NOTIFS, 0, DISPLAY_WIDTH + 16 + a, (DISPLAY_HEIGHT / 2) - 48, 0, 1, 0); + sub_806CA88(&resultsScreen->unk4, 1, 0x28, SA2_ANIM_SP_STAGE_NOTIFS, 0, DISPLAY_WIDTH + 16 + a, DISPLAY_CENTER_Y - 48, 0, 1, 0); sub_806CA88(&resultsScreen->unk34, 1, gUnknown_080DF880[character].size, gUnknown_080DF880[character].anim, 0, - DISPLAY_WIDTH + 16 + a, (DISPLAY_HEIGHT / 2) - 56, 0, gUnknown_080DF880[character].variant, 0); + DISPLAY_WIDTH + 16 + a, DISPLAY_CENTER_Y - 56, 0, gUnknown_080DF880[character].variant, 0); } else { - sub_806CA88(&resultsScreen->unk4, 1, 0x20, SA2_ANIM_SP_STAGE_NOTIFS, 0, DISPLAY_WIDTH + 16 + a, (DISPLAY_HEIGHT / 2) - 48, 0, 0, 0); + sub_806CA88(&resultsScreen->unk4, 1, 0x20, SA2_ANIM_SP_STAGE_NOTIFS, 0, DISPLAY_WIDTH + 16 + a, DISPLAY_CENTER_Y - 48, 0, 0, 0); } - sub_806CA88(&resultsScreen->unk1B4, 1, 0x16, SA2_ANIM_SP_STAGE_SCORE_BONUSES, 0, DISPLAY_WIDTH + 16 + a, (DISPLAY_HEIGHT / 2) - 8, 0, 0, + sub_806CA88(&resultsScreen->unk1B4, 1, 0x16, SA2_ANIM_SP_STAGE_SCORE_BONUSES, 0, DISPLAY_WIDTH + 16 + a, DISPLAY_CENTER_Y - 8, 0, 0, 0); + sub_806CA88(&resultsScreen->unk1E4, 1, 0x16, SA2_ANIM_SP_STAGE_SCORE_BONUSES, 0, DISPLAY_WIDTH + 16 + b, DISPLAY_CENTER_Y + 12, 0, 1, + 0); + sub_806CA88(&resultsScreen->unk214, 1, 0x16, SA2_ANIM_SP_STAGE_SCORE_BONUSES, 0, DISPLAY_WIDTH + 16 + c, DISPLAY_CENTER_Y + 32, 0, 2, 0); - sub_806CA88(&resultsScreen->unk1E4, 1, 0x16, SA2_ANIM_SP_STAGE_SCORE_BONUSES, 0, DISPLAY_WIDTH + 16 + b, (DISPLAY_HEIGHT / 2) + 12, 0, - 1, 0); - sub_806CA88(&resultsScreen->unk214, 1, 0x16, SA2_ANIM_SP_STAGE_SCORE_BONUSES, 0, DISPLAY_WIDTH + 16 + c, (DISPLAY_HEIGHT / 2) + 32, 0, - 2, 0); for (i = 0; i < 5; i++) { sub_806CA88(&resultsScreen->unk244[i], 1, sValueSprites[0].size, sValueSprites[0].anim, 0, d + SomeMacro807028C(i), - (DISPLAY_HEIGHT / 2) + 8, 0, sValueSprites[0].variant, 0); + DISPLAY_CENTER_Y + 8, 0, sValueSprites[0].variant, 0); } for (i = 0; i < 5; i++) { sub_806CA88(&resultsScreen->unk334[i], 1, sValueSprites[0].size, sValueSprites[0].anim, 0, e + SomeMacro807028C(i), - (DISPLAY_HEIGHT / 2) + 28, 0, sValueSprites[0].variant, 0); + DISPLAY_CENTER_Y + 28, 0, sValueSprites[0].variant, 0); } for (i = 0; i < 5; i++) { sub_806CA88(&resultsScreen->unk424[i], 1, sValueSprites[0].size, sValueSprites[0].anim, 0, f + SomeMacro807028C(i), - (DISPLAY_HEIGHT / 2) + 48, 0, sValueSprites[0].variant, 0); + DISPLAY_CENTER_Y + 48, 0, sValueSprites[0].variant, 0); } for (i = 0; i < NUM_COURSE_ZONES; i++) { @@ -395,7 +394,7 @@ static void SpecialStageResultsScreenCreateUI(struct SpecialStageResultsScreen * sprite = &sChaosEmeraldUnlockedSprites[7]; } - sub_806CA88(&resultsScreen->chaosEmerald[i], 1, 9, sprite->anim, 0, i * 24 + DISPLAY_WIDTH + 52, (DISPLAY_HEIGHT / 2) - 28, 0, + sub_806CA88(&resultsScreen->chaosEmerald[i], 1, 9, sprite->anim, 0, i * 24 + DISPLAY_WIDTH + 52, DISPLAY_CENTER_Y - 28, 0, sprite->variant, 0); } @@ -451,11 +450,11 @@ void sub_807061C(s16 a) s = &resultsScreen->unk4; if (stage->targetReached) { - s->x = resultsScreen->unk516 + (DISPLAY_WIDTH / 2) - 44; + s->x = resultsScreen->unk516 + DISPLAY_CENTER_X - 44; s = &resultsScreen->unk34; - s->x = resultsScreen->unk516 + (DISPLAY_WIDTH / 2) - 116; + s->x = resultsScreen->unk516 + DISPLAY_CENTER_X - 116; } else { - s->x = resultsScreen->unk516 + (DISPLAY_WIDTH / 2) - 72; + s->x = resultsScreen->unk516 + DISPLAY_CENTER_X - 72; } } @@ -470,7 +469,7 @@ void sub_8070680(s16 a) for (i = 0; i < 7; i++) { Sprite *s = &resultsScreen->chaosEmerald[i]; s32 x = (i * 24); - s32 base = resultsScreen->unk518 + (DISPLAY_WIDTH / 2) - 84; + s32 base = resultsScreen->unk518 + DISPLAY_CENTER_X - 84; x += base; s->x = x; } @@ -486,14 +485,14 @@ void sub_80706D8(s16 a) resultsScreen->unk51A = (11 - a) * 22; s = &resultsScreen->unk1B4; - s->x = resultsScreen->unk51A + (DISPLAY_WIDTH / 2) - 72; + s->x = resultsScreen->unk51A + DISPLAY_CENTER_X - 72; for (i = 0; i < 5; i++) { s32 temp2, temp; s = &resultsScreen->unk244[i]; temp2 = (i * 8); - temp = resultsScreen->unk51A + (DISPLAY_WIDTH / 2) + 38; + temp = resultsScreen->unk51A + DISPLAY_CENTER_X + 38; s->x = temp2 + temp; } } @@ -508,12 +507,12 @@ void sub_8070740(s16 a) resultsScreen->unk51C = (11 - a) * 22; s = &resultsScreen->unk1E4; - s->x = resultsScreen->unk51C + (DISPLAY_WIDTH / 2) - 72; + s->x = resultsScreen->unk51C + DISPLAY_CENTER_X - 72; for (i = 0; i < 5; i++) { s = &resultsScreen->unk334[i]; temp2 = (i * 8); - temp = resultsScreen->unk51C + (DISPLAY_WIDTH / 2) + 38; + temp = resultsScreen->unk51C + DISPLAY_CENTER_X + 38; s->x = temp2 + temp; } } @@ -528,12 +527,12 @@ void sub_80707A8(s16 xPos) resultsScreen->unk51E = (11 - xPos) * 22; s = &resultsScreen->unk214; - s->x = resultsScreen->unk51E + (DISPLAY_WIDTH / 2) - 72; + s->x = resultsScreen->unk51E + DISPLAY_CENTER_X - 72; for (i = 0; i < 5; i++) { s = &resultsScreen->unk424[i]; temp2 = (i * 8); - temp = resultsScreen->unk51E + (DISPLAY_WIDTH / 2) + 38; + temp = resultsScreen->unk51E + DISPLAY_CENTER_X + 38; s->x = temp2 + temp; } } @@ -722,8 +721,8 @@ void RenderTime(void) static void CreateMultiplierValue(struct SpecialStageUI *ui) { const struct UNK_80DF670 *unkF840 = &sValueSprites[11]; - sub_806CA88(&ui->multiplier, 0, unkF840->size, unkF840->anim, 0x1000, (DISPLAY_WIDTH / 2) - 8, (DISPLAY_HEIGHT / 2) + 20, 2, - unkF840->variant, 0); + sub_806CA88(&ui->multiplier, 0, unkF840->size, unkF840->anim, 0x1000, DISPLAY_CENTER_X - 8, DISPLAY_CENTER_Y + 20, 2, unkF840->variant, + 0); } void RenderMultiplier(void) @@ -750,7 +749,7 @@ void CreateStartText(struct SpecialStageUI *ui) Sprite *s = &ui->startText; ui->unk2A8 = 1; ui->unk2A4 = gSpecialStageVramPointer; - sub_806CA88(s, 0, 20, 0x376, 0x1000, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 1, 0, 0); + sub_806CA88(s, 0, 20, 0x376, 0x1000, DISPLAY_CENTER_X, DISPLAY_HEIGHT / 2, 1, 0, 0); } void RenderStartText(struct SpecialStageUI *ui) { DisplaySprite(&ui->startText); } diff --git a/src/game/special_stage/utils.c b/src/game/special_stage/utils.c index 323e5f298..41e6bd8f4 100644 --- a/src/game/special_stage/utils.c +++ b/src/game/special_stage/utils.c @@ -123,7 +123,7 @@ bool16 SpecialStageCalcEntityScreenPosition(struct UNK_806CB84 *a, struct Specia } a->unkA = val; a->screenY = (a->unkA - unk874->unkE) - (Q_16_16(unk874->unk12) / world->qPerspectiveTable[val]); - a->unk8 = ((DISPLAY_WIDTH / 2) - ((r9 * ((DISPLAY_WIDTH / 2) + 15)) / r8)); + a->unk8 = (DISPLAY_CENTER_X - ((r9 * (DISPLAY_CENTER_X + 15)) / r8)); a->screenX = a->unk8 - unk874->unkC; if (unk874->unk8 != 0) { a->unk6 = (((unk874->unk8 * 8) / world->qPerspectiveTable[val]) * 9) >> 2; diff --git a/src/game/stage/camera.c b/src/game/stage/camera.c index a4af99cb7..c07558e4d 100644 --- a/src/game/stage/camera.c +++ b/src/game/stage/camera.c @@ -504,7 +504,7 @@ void InitCamera(u32 level) gBossCameraClampYLower = gBossCameraYClamps[ZONE_FINAL + 1][0]; gBossCameraClampYUpper = gBossCameraYClamps[ZONE_FINAL + 1][1]; camera->x = 600; - camera->unk10 = (DISPLAY_WIDTH / 2); + camera->unk10 = DISPLAY_CENTER_X; camera->unk14 = 0; camera->y = 0; camera->unk64 = -4; @@ -514,15 +514,15 @@ void InitCamera(u32 level) // for now we use the original GBA values as otherwise the boss // goes off the screen (not sure why yet) camera->unk10 = I(player->qWorldX) - (2 * 240); - camera->y = I(player->qWorldY) - ((DISPLAY_HEIGHT / 2) + 4); + camera->y = I(player->qWorldY) - (DISPLAY_CENTER_Y + 4); camera->unk14 = camera->y; camera->unk64 = player->spriteOffsetY - 4; } } else #endif { - camera->x = I(player->qWorldX) - (DISPLAY_WIDTH / 2); - camera->y = I(player->qWorldY) - ((DISPLAY_HEIGHT / 2) + 4); + camera->x = I(player->qWorldX) - DISPLAY_CENTER_X; + camera->y = I(player->qWorldY) - (DISPLAY_CENTER_Y + 4); if (camera->x < 0) { camera->x = 0; @@ -565,7 +565,7 @@ void InitCamera(u32 level) // Only need to use the original value for these zones #define DISPLAY_WIDTH_FOR_BOSS_TAS \ - ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_2 || LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) ? (240 / 2) : (DISPLAY_WIDTH / 2)) + ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_2 || LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) ? (240 / 2) : DISPLAY_CENTER_X) void UpdateCamera(void) { @@ -605,18 +605,18 @@ void UpdateCamera(void) #if TAS_TESTING && TAS_TESTING_WIDESCREEN_HACK && DISPLAY_WIDTH > 240 if (newX + (DISPLAY_WIDTH_FOR_BOSS_TAS + 1) < I(player->qWorldX)) { #else - if (newX + ((DISPLAY_WIDTH / 2) + 1) < I(player->qWorldX)) { + if (newX + (DISPLAY_CENTER_X + 1) < I(player->qWorldX)) { #endif - if ((camera->unk10 + (DISPLAY_HEIGHT / 2)) > newX) { + if ((camera->unk10 + DISPLAY_CENTER_Y) > newX) { s32 playerScreenX = I(player->qWorldX); #if TAS_TESTING && TAS_TESTING_WIDESCREEN_HACK && DISPLAY_WIDTH > 240 playerScreenX -= DISPLAY_WIDTH_FOR_BOSS_TAS; #else - playerScreenX -= DISPLAY_WIDTH / 2; + playerScreenX -= DISPLAY_CENTER_X; #endif camera->shiftX = playerScreenX - newX; } else { - newX = (camera->unk10 + (DISPLAY_HEIGHT / 2)); + newX = (camera->unk10 + DISPLAY_CENTER_Y); camera->shiftX = 0; } } else { @@ -666,7 +666,7 @@ void UpdateCamera(void) } else { if (!(camera->unk50 & 1)) { s16 airSpeedX = player->qSpeedAirX; - camera->unk10 = I(player->qWorldX) + camera->shiftX - (DISPLAY_WIDTH / 2); + camera->unk10 = I(player->qWorldX) + camera->shiftX - DISPLAY_CENTER_X; camera->unk56 = (airSpeedX + (camera->unk56 * 15)) >> 4; camera->unk10 += (camera->unk56 >> 5); } @@ -692,7 +692,7 @@ void UpdateCamera(void) camera->unk64 = unk64; } - camera->unk14 = I(player->qWorldY) + camera->shiftY - (DISPLAY_HEIGHT / 2) + camera->unk4C + unk64; + camera->unk14 = I(player->qWorldY) + camera->shiftY - DISPLAY_CENTER_Y + camera->unk4C + unk64; } } diff --git a/src/game/stage/intro.c b/src/game/stage/intro.c index fc671b99d..25dafed75 100644 --- a/src/game/stage/intro.c +++ b/src/game/stage/intro.c @@ -854,7 +854,7 @@ static void Task_IntroColorAnimation(void) if (innerCount < INTROFRAME_NAME_AND_BANNER) { /* Bottom left */ mask1->angle = -(innerCount * (DISPLAY_WIDTH / INTROFRAME_NAME_AND_BANNER)) + (DISPLAY_WIDTH + DEG_TO_SIN(5.625)); - mask1->y = (DISPLAY_HEIGHT / 2) + 8; + mask1->y = DISPLAY_CENTER_Y + 8; if (innerCount >= INTROFRAME_BANNER_APPEARS) { /* Top Banner */ @@ -1021,17 +1021,17 @@ static void Task_IntroZoneNameAndIconAnimations(void) if (counter <= 12) { s->x = 254 - (((counter * 75) << 6) >> 8); - s->y = ((DISPLAY_HEIGHT / 2) + 41) - (((counter * 123) << 3) >> 8); + s->y = (DISPLAY_CENTER_Y + 41) - (((counter * 123) << 3) >> 8); } else if (counter <= 100) { // _08030078 s->x = 254 - (((13 * 75) << 6) >> 8) + 13; - s->y = ((DISPLAY_HEIGHT / 2) + 41) - (((13 * 123) << 3) >> 8) + 2; + s->y = (DISPLAY_CENTER_Y + 41) - (((13 * 123) << 3) >> 8) + 2; } else { // _08030086 u32 innerCount = counter - (100 - 12); s->x = 254 - (((innerCount * 75) << 6) >> 8); - s->y = ((DISPLAY_HEIGHT / 2) + 41) - (((innerCount * 123) << 3) >> 8); + s->y = (DISPLAY_CENTER_Y + 41) - (((innerCount * 123) << 3) >> 8); } // _080300AE @@ -1040,13 +1040,13 @@ static void Task_IntroZoneNameAndIconAnimations(void) if (counter <= 12) { s->x = 284 - (((counter * 75) << 6) >> 8); - s->y = ((DISPLAY_HEIGHT / 2) + 47) - (((counter * 123) << 3) >> 8); + s->y = (DISPLAY_CENTER_Y + 47) - (((counter * 123) << 3) >> 8); } else if (counter <= 100) { s->x = 284 - (((13 * 75) << 6) >> 8) + 13; - s->y = ((DISPLAY_HEIGHT / 2) + 47) - (((13 * 123) << 3) >> 8) + 2; + s->y = (DISPLAY_CENTER_Y + 47) - (((13 * 123) << 3) >> 8) + 2; } else { s->x = 284 - ((((counter - (100 - 12)) * 75) << 6) >> 8); - s->y = ((DISPLAY_HEIGHT / 2) + 47) - ((((counter - (100 - 12)) * 123) << 3) >> 8); + s->y = (DISPLAY_CENTER_Y + 47) - ((((counter - (100 - 12)) * 123) << 3) >> 8); } // _0803012A diff --git a/src/game/stage/player.c b/src/game/stage/player.c index d2960174e..b90abb8c2 100644 --- a/src/game/stage/player.c +++ b/src/game/stage/player.c @@ -3500,8 +3500,8 @@ void Task_PlayerHandleDeath(void) gSpecialRingCount = 0; InitializePlayer(&gPlayer); - gCamera.x = I(gPlayer.qWorldX) + gCamera.shiftX - (DISPLAY_WIDTH / 2); - gCamera.y = I(gPlayer.qWorldY) + gCamera.shiftY - (DISPLAY_HEIGHT / 2); + gCamera.x = I(gPlayer.qWorldX) + gCamera.shiftX - DISPLAY_CENTER_X; + gCamera.y = I(gPlayer.qWorldY) + gCamera.shiftY - DISPLAY_CENTER_Y; m4aMPlayTempoControl(&gMPlayInfo_BGM, 256); gPlayer.moveState = 0; gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; @@ -5931,9 +5931,9 @@ void Player_8027C5C(Player *p) // x-position relative to a sprite region? s32 playerX = I(p->qWorldX) - gCamera.x; - if (playerX > (DISPLAY_WIDTH / 2)) { + if (playerX > DISPLAY_CENTER_X) { p->qSpeedGround = Q(4.5); - } else if (playerX < (DISPLAY_WIDTH / 2)) { + } else if (playerX < DISPLAY_CENTER_X) { p->qSpeedGround = Q(5.5); } else { p->qSpeedGround = Q(5.0); diff --git a/src/game/stage/player_super_sonic.c b/src/game/stage/player_super_sonic.c index ee22d3693..3429bafa4 100644 --- a/src/game/stage/player_super_sonic.c +++ b/src/game/stage/player_super_sonic.c @@ -797,7 +797,7 @@ static void sub_802C8A0(struct SuperSonic *sonic) sonic->flags &= ~SUPER_FLAG__4; x = Q(gCamera.x + (DISPLAY_WIDTH + 76)); - y = Q(gCamera.y + (DISPLAY_HEIGHT / 2)); + y = Q(gCamera.y + DISPLAY_CENTER_Y); sonic->worldX += Div((x - sonic->worldX), 100); sonic->worldY += Div((y - sonic->worldY), 100); diff --git a/src/game/stage/results.c b/src/game/stage/results.c index 2ea560493..74f53c898 100644 --- a/src/game/stage/results.c +++ b/src/game/stage/results.c @@ -25,9 +25,9 @@ typedef struct { /* 0x170 */ bool8 isCountingDone; } StageResults; /* size: 0x174 */ -#define OUTRO_TIME_BONUS_Y_POS (DISPLAY_HEIGHT / 2) + 10 -#define OUTRO_RING_BONUS_Y_POS (DISPLAY_HEIGHT / 2) + 30 -#define OUTRO_SP_RING_BONUS_Y_POS (DISPLAY_HEIGHT / 2) + 50 +#define OUTRO_TIME_BONUS_Y_POS DISPLAY_CENTER_Y + 10 +#define OUTRO_RING_BONUS_Y_POS DISPLAY_CENTER_Y + 30 +#define OUTRO_SP_RING_BONUS_Y_POS DISPLAY_CENTER_Y + 50 static void Task_UpdateStageResults(void); static void TaskDestructor_StageResults(struct Task *); @@ -149,7 +149,7 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount) s = &outro->base.separator; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2); + s->y = DISPLAY_CENTER_Y; s->graphics.dest = VramMalloc(4); s->graphics.anim = SA2_ANIM_TA_WHITE_BAR; s->variant = 0; @@ -166,7 +166,7 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount) s = &outro->base.title[0]; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2) - 39; + s->y = DISPLAY_CENTER_Y - 39; s->graphics.dest = VramMalloc(gAnimsGotThroughCharacterNames[gSelectedCharacter][0]); s->graphics.anim = gAnimsGotThroughCharacterNames[gSelectedCharacter][1]; s->variant = gAnimsGotThroughCharacterNames[gSelectedCharacter][2]; @@ -188,7 +188,7 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount) s = &outro->base.title[1]; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2) - 31; + s->y = DISPLAY_CENTER_Y - 31; s->graphics.dest = VramMalloc(gStageResultsHeadlineTexts[isBossAct][0]); s->graphics.anim = gStageResultsHeadlineTexts[isBossAct][1]; s->variant = gStageResultsHeadlineTexts[isBossAct][2]; @@ -219,7 +219,7 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount) s = &outro->base.title[2]; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2) - 31; + s->y = DISPLAY_CENTER_Y - 31; s->graphics.dest = VramMalloc(gAnimsGotThroughZoneAndActNames[level][0]); s->graphics.anim = gAnimsGotThroughZoneAndActNames[level][1]; s->variant = gAnimsGotThroughZoneAndActNames[level][2]; @@ -247,7 +247,7 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount) for (i = 0; i < ARRAY_COUNT(outro->base.sprScores); i++) { s = &outro->base.sprScores[i]; s->x = DISPLAY_WIDTH + 16; - s->y = ((DISPLAY_HEIGHT / 2) - 6) + i * 20; + s->y = (DISPLAY_CENTER_Y - 6) + i * 20; s->graphics.dest = VramMalloc(sStageScoreBonusesTexts[i][0]); s->graphics.anim = sStageScoreBonusesTexts[i][1]; s->variant = sStageScoreBonusesTexts[i][2]; @@ -502,9 +502,9 @@ void StageResults_AnimateSeparator(void) if (counter <= 15) { s->x = (16 - counter) * 15; - s->y = (DISPLAY_HEIGHT / 2) + 20; + s->y = DISPLAY_CENTER_Y + 20; } else if (counter <= 23) { - s->y = (DISPLAY_HEIGHT / 2) + 20; + s->y = DISPLAY_CENTER_Y + 20; } else if (counter <= 28) { s->y -= 7; } @@ -558,7 +558,7 @@ static void AnimateResults(u16 frame) u16 innerX = DISPLAY_WIDTH - ((counter - 39) * 12); r4 = innerX; } else { - r4 = (DISPLAY_WIDTH / 2) - 72; + r4 = DISPLAY_CENTER_X - 72; } s->x = r4 - frame; DisplaySprite(s); @@ -577,7 +577,7 @@ static void AnimateResults(u16 frame) u16 innerX = DISPLAY_WIDTH - ((counter - 49) * 12); r4 = innerX; } else { - r4 = (DISPLAY_WIDTH / 2) - 72; + r4 = DISPLAY_CENTER_X - 72; } s->x = r4 - frame; DisplaySprite(s); @@ -596,7 +596,7 @@ static void AnimateResults(u16 frame) u16 innerX = DISPLAY_WIDTH - ((counter - 59) * 12); r4 = innerX; } else { - r4 = (DISPLAY_WIDTH / 2) - 72; + r4 = DISPLAY_CENTER_X - 72; } s->x = r4 - frame; @@ -621,7 +621,7 @@ void StageResults_AnimateTitle(void) if (counter < 45) { x = (u16)(DISPLAY_WIDTH - ((counter - 29) * 15)); } else { - x = (DISPLAY_WIDTH / 2) - 117; + x = DISPLAY_CENTER_X - 117; } { diff --git a/src/game/stage/ui.c b/src/game/stage/ui.c index 73b3ee081..032b90797 100644 --- a/src/game/stage/ui.c +++ b/src/game/stage/ui.c @@ -441,7 +441,7 @@ void Task_StageUIMain(void) if (oam != (OamData *)iwram_end) #endif { - UI_OAM_SET(oam, (DISPLAY_WIDTH / 2) - 21, 0, SPRITE_SHAPE(8x16), SPRITE_SIZE(8x16), + UI_OAM_SET(oam, DISPLAY_CENTER_X - 21, 0, SPRITE_SHAPE(8x16), SPRITE_SIZE(8x16), (ui->digitsTileData[UI_ASCII_COLON] | palId)); } @@ -451,7 +451,7 @@ void Task_StageUIMain(void) if (oam != (OamData *)iwram_end) #endif { - UI_OAM_SET(oam, (DISPLAY_WIDTH / 2) + 3, 0, SPRITE_SHAPE(8x16), SPRITE_SIZE(8x16), + UI_OAM_SET(oam, DISPLAY_CENTER_X + 3, 0, SPRITE_SHAPE(8x16), SPRITE_SIZE(8x16), (ui->digitsTileData[UI_ASCII_COLON] | palId)); } @@ -471,35 +471,35 @@ void Task_StageUIMain(void) // Milliseconds-L sd = &digits[gMillisUnpackTable[r5][0]]; - sd->x = ((DISPLAY_WIDTH / 2) + 16) + 0 * 8; + sd->x = (DISPLAY_CENTER_X + 16) + 0 * 8; sd->y = 16; sd->palId = palId; DisplaySprite(sd); // Milliseconds-R sd = &digits[gMillisUnpackTable[r5][1]]; - sd->x = ((DISPLAY_WIDTH / 2) + 16) + 1 * 8; + sd->x = (DISPLAY_CENTER_X + 16) + 1 * 8; sd->y = 16; sd->palId = palId; DisplaySprite(sd); // Seconds-L sd = &digits[gSecondsTable[seconds][0]]; - sd->x = ((DISPLAY_WIDTH / 2) - 8) + 0 * 8; + sd->x = (DISPLAY_CENTER_X - 8) + 0 * 8; sd->y = 16; sd->palId = palId; DisplaySprite(sd); // Seconds-R sd = &digits[gSecondsTable[seconds][1]]; - sd->x = ((DISPLAY_WIDTH / 2) - 8) + 1 * 8; + sd->x = (DISPLAY_CENTER_X - 8) + 1 * 8; sd->y = 16; sd->palId = palId; DisplaySprite(sd); // Minutes sd = &digits[minutes]; - sd->x = (DISPLAY_WIDTH / 2) - 24; + sd->x = DISPLAY_CENTER_X - 24; sd->y = 16; sd->palId = palId; DisplaySprite(sd); diff --git a/src/game/time_attack/lobby.c b/src/game/time_attack/lobby.c index d96a0cbb5..7f8238180 100644 --- a/src/game/time_attack/lobby.c +++ b/src/game/time_attack/lobby.c @@ -96,7 +96,7 @@ void sub_8088944(struct TimeAttackLobbyScreen *lobbyScreen) s->graphics.anim = gUnknown_080E04D4[lang * 5 + i].anim; s->variant = gUnknown_080E04D4[lang * 5 + i].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = i * 16 + 24; if (i > 2) { s->y -= 16; @@ -135,7 +135,7 @@ void sub_8088944(struct TimeAttackLobbyScreen *lobbyScreen) s->graphics.anim = gUnknown_080E0474[gSelectedCharacter].anim; s->variant = gUnknown_080E0474[gSelectedCharacter].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; s->y = (DISPLAY_HEIGHT * (13. / 16.)); s->oamFlags = SPRITE_OAM_ORDER(4); s->graphics.size = 0; diff --git a/src/game/time_attack/mode_select.c b/src/game/time_attack/mode_select.c index 540b6fba9..53f1ee345 100644 --- a/src/game/time_attack/mode_select.c +++ b/src/game/time_attack/mode_select.c @@ -181,7 +181,7 @@ void CreateTimeAttackModeSelectionScreen(void) s->graphics.anim = gUnknown_080E0384[TextElementOffset(lang, 5, 2)].anim; s->variant = gUnknown_080E0384[TextElementOffset(lang, 5, 2)].variant; s->prevVariant = -1; - s->x = DISPLAY_WIDTH / 2 - 112; + s->x = DISPLAY_CENTER_X - 112; s->y = DISPLAY_HEIGHT - 57; s->oamFlags = SPRITE_OAM_ORDER(4); s->graphics.size = 0; diff --git a/src/game/time_attack/results.c b/src/game/time_attack/results.c index f6aff5a76..e5839c926 100644 --- a/src/game/time_attack/results.c +++ b/src/game/time_attack/results.c @@ -93,8 +93,8 @@ u32 CreateTimeAttackResults(u32 finishTime) for (i = 0; i < 7; i++) { s = &resultsCutScene->digits[i]; - s->x = i * 14 + ((DISPLAY_WIDTH / 2) - 48); - s->y = (DISPLAY_HEIGHT / 2) + 8; + s->x = i * 14 + (DISPLAY_CENTER_X - 48); + s->y = DISPLAY_CENTER_Y + 8; s->graphics.dest = VramMalloc(4); s->graphics.anim = SA2_ANIM_TIME_ATTACK_DIGITS; s->variant = SA2_ANIM_VARIANT_TA_DIGITS_0; @@ -125,7 +125,7 @@ u32 CreateTimeAttackResults(u32 finishTime) s = &resultsCutScene->base.separator; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2); + s->y = DISPLAY_CENTER_Y; s->graphics.dest = VramMalloc(4); s->graphics.anim = SA2_ANIM_TA_WHITE_BAR; s->variant = 0; @@ -142,7 +142,7 @@ u32 CreateTimeAttackResults(u32 finishTime) s = &resultsCutScene->base.title[0]; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2) - 39; + s->y = DISPLAY_CENTER_Y - 39; s->graphics.dest = VramMalloc(gAnimsGotThroughCharacterNames[gSelectedCharacter][0]); s->graphics.anim = gAnimsGotThroughCharacterNames[gSelectedCharacter][1]; s->variant = gAnimsGotThroughCharacterNames[gSelectedCharacter][2]; @@ -161,7 +161,7 @@ u32 CreateTimeAttackResults(u32 finishTime) s = &resultsCutScene->base.title[1]; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2) - 31; + s->y = DISPLAY_CENTER_Y - 31; s->graphics.dest = VramMalloc(gStageResultsHeadlineTexts[isBossLevel][0]); s->graphics.anim = gStageResultsHeadlineTexts[isBossLevel][1]; s->variant = gStageResultsHeadlineTexts[isBossLevel][2]; @@ -184,7 +184,7 @@ u32 CreateTimeAttackResults(u32 finishTime) } s = &resultsCutScene->base.title[2]; s->x = DISPLAY_WIDTH + 16; - s->y = (DISPLAY_HEIGHT / 2) - 31; + s->y = DISPLAY_CENTER_Y - 31; s->graphics.dest = VramMalloc(gAnimsGotThroughZoneAndActNames[level][0]); s->graphics.anim = gAnimsGotThroughZoneAndActNames[level][1]; s->variant = gAnimsGotThroughZoneAndActNames[level][2]; @@ -200,8 +200,8 @@ u32 CreateTimeAttackResults(u32 finishTime) UpdateSpriteAnimation(s); s = &resultsCutScene->base.sprScores[0]; - s->x = (DISPLAY_WIDTH / 2) - 80; - s->y = (DISPLAY_HEIGHT / 2) + 10; + s->x = DISPLAY_CENTER_X - 80; + s->y = DISPLAY_CENTER_Y + 10; s->graphics.dest = VramMalloc(8); s->graphics.anim = SA2_ANIM_TA_RECORD; s->variant = SA2_ANIM_VARIANT_TA_TIME; @@ -217,8 +217,8 @@ u32 CreateTimeAttackResults(u32 finishTime) UpdateSpriteAnimation(s); s = &resultsCutScene->base.sprScores[1]; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2) + 40; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y + 40; s->graphics.dest = VramMalloc(16); s->graphics.anim = SA2_ANIM_TIME_ATTACK_DIGITS; if (resultsCutScene->rank != 0) { @@ -239,13 +239,13 @@ u32 CreateTimeAttackResults(u32 finishTime) resultsCutScene->transform.qScaleX = 0; resultsCutScene->transform.qScaleY = +Q(1); - resultsCutScene->transform.x = (DISPLAY_WIDTH / 2); - resultsCutScene->transform.y = (DISPLAY_HEIGHT / 2) + 40; + resultsCutScene->transform.x = DISPLAY_CENTER_X; + resultsCutScene->transform.y = DISPLAY_CENTER_Y + 40; resultsCutScene->transform.rotation = 0; s = &resultsCutScene->base.sprScores[2]; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2) + 68; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y + 68; s->graphics.dest = VramMalloc(22); s->graphics.anim = SA2_ANIM_TA_RECORD; s->variant = 0; @@ -316,7 +316,7 @@ static void AnimateResults(void) // TIME text s = &resultsCutScene->base.sprScores[0]; if ((frame - 90) <= 10) { - s->x = (100 - frame) * 16 + ((DISPLAY_WIDTH / 2) - 80); + s->x = (100 - frame) * 16 + (DISPLAY_CENTER_X - 80); } DisplaySprite(s); } diff --git a/src/game/title_screen.c b/src/game/title_screen.c index 430d2fa59..47a72237b 100644 --- a/src/game/title_screen.c +++ b/src/game/title_screen.c @@ -568,8 +568,8 @@ static void InitTitleScreenUI(TitleScreen *titleScreen) s->graphics.anim = gPressStartTiles[language].anim; s->variant = gPressStartTiles[language].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2) + 30; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y + 30; s->graphics.size = 0; s->oamFlags = SPRITE_OAM_ORDER(3); s->qAnimDelay = 0; @@ -587,19 +587,19 @@ static void InitTitleScreenUI(TitleScreen *titleScreen) s->graphics.anim = sMenuTiles[MenuTextIdx(language, menuItemId)].anim; s->variant = sMenuTiles[MenuTextIdx(language, menuItemId)].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); + s->x = DISPLAY_CENTER_X; // Generate menu item y positions // position * lineHeight + topPadding if (menuItemId < SinglePlayerMenuItem(0)) { // PlayModeMenu positions - s->y = (PlayModeMenuIndex(menuItemId) * 18) + (DISPLAY_HEIGHT / 2) + 16; + s->y = (PlayModeMenuIndex(menuItemId) * 18) + DISPLAY_CENTER_Y + 16; } else if (gLoadedSaveGame->chaoGardenUnlocked) { // SinglePlayerMenu positions if we have the chao garden available - s->y = (SinglePlayerMenuIndex(menuItemId) * 16) + (DISPLAY_HEIGHT / 2) + 16; + s->y = (SinglePlayerMenuIndex(menuItemId) * 16) + DISPLAY_CENTER_Y + 16; } else { // SinglePlayerMenu positions if we don't have the chao garden - s->y = (SinglePlayerMenuIndex(menuItemId) * 18) + (DISPLAY_HEIGHT / 2) + 20; + s->y = (SinglePlayerMenuIndex(menuItemId) * 18) + DISPLAY_CENTER_Y + 20; } s->graphics.size = 0; @@ -616,8 +616,8 @@ static void InitTitleScreenUI(TitleScreen *titleScreen) s->graphics.anim = sMenuTiles[ARRAY_COUNT(sMenuTiles) - 1].anim; s->variant = sMenuTiles[ARRAY_COUNT(sMenuTiles) - 1].variant; s->prevVariant = -1; - s->x = (DISPLAY_WIDTH / 2); - s->y = (DISPLAY_HEIGHT / 2); + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; s->graphics.size = 0; s->oamFlags = SPRITE_OAM_ORDER(30); s->qAnimDelay = 0; @@ -1080,7 +1080,7 @@ static void Task_PlayModeMenuMain(void) m4aSongNumStart(SE_SELECT); if (titleScreen->menuCursor == PlayModeMenuIndex(MENU_ITEM_SINGLE_PLAYER)) { - titleScreen->menuItems[MENU_ITEM_MULTI_PLAYER].x = (DISPLAY_WIDTH / 2); + titleScreen->menuItems[MENU_ITEM_MULTI_PLAYER].x = DISPLAY_CENTER_X; CreateMenuItemTransition(&titleScreen->menuItems[MENU_ITEM_MULTI_PLAYER], TRANSITION_OUT); titleScreen->animFrame = SinglePlayerMenuIndex(MENU_ITEM_GAME_START); @@ -1904,7 +1904,7 @@ static void Task_StartTitleScreenDemo(void) static void ShowGameLogo(TitleScreen *_) { // angle, width, height, right, bottom, left, top - sub_8003EE4(0, 0x100, 0x100, 0, 0, (DISPLAY_WIDTH / 2) - 100, 8, gBgAffineRegs); + sub_8003EE4(0, 0x100, 0x100, 0, 0, DISPLAY_CENTER_X - 100, 8, gBgAffineRegs); } static void BirdAnimEnd(void) From bf87ca1e5a63b96d0e96c2f607e499cdf6d770fa Mon Sep 17 00:00:00 2001 From: JaceCear <11230293+JaceCear@users.noreply.github.com> Date: Wed, 25 Mar 2026 21:30:24 +0100 Subject: [PATCH 10/10] Rename ZONE_TIME_TO_INT() -> TIME() --- include/constants/zones.h | 4 +-- include/game/parameters/characters.h | 6 ++-- src/game/bosses/boss_2.c | 10 +++---- src/game/bosses/boss_4.c | 12 ++++---- src/game/game_over.c | 6 ++-- .../collect_rings_lap_trigger.c | 6 ++-- src/game/interactables_2/egg_utopia/pole.c | 2 +- src/game/interactables_2/sky_canyon/fan.c | 8 +++--- .../multiboot/collect_rings/time_display.c | 2 +- src/game/multiplayer/mp_player.c | 2 +- src/game/multiplayer/multiplayer_event_mgr.c | 6 ++-- src/game/sa1_sa2_shared/demo_manager.c | 4 +-- src/game/sa1_sa2_shared/itembox.c | 4 +-- src/game/stage/boss_results_transition.c | 2 +- src/game/stage/player.c | 6 ++-- src/game/stage/results.c | 18 ++++++------ src/game/stage/stage.c | 10 +++---- src/game/stage/ui.c | 28 +++++++------------ 18 files changed, 64 insertions(+), 72 deletions(-) diff --git a/include/constants/zones.h b/include/constants/zones.h index b04ceeb0c..fcf675ce8 100644 --- a/include/constants/zones.h +++ b/include/constants/zones.h @@ -80,8 +80,8 @@ #define IS_EXTRA_STAGE(lvl) ((lvl) == LEVEL_INDEX(ZONE_FINAL, ACT_TRUE_AREA_53)) #define IS_FINAL_OR_EXTRA_STAGE(lvl) ((IS_FINAL_STAGE(lvl)) || (IS_EXTRA_STAGE(lvl))) -#define ZONE_TIME_TO_INT(minutes, seconds) (int)(((minutes * 60.) + seconds) * GBA_FRAMES_PER_SECOND) -#define MAX_COURSE_TIME (ZONE_TIME_TO_INT(10, 0)) +#define TIME(minutes, seconds) (int)(((minutes * 60.) + seconds) * GBA_FRAMES_PER_SECOND) +#define MAX_COURSE_TIME (TIME(10, 0)) #define SPECIAL_STAGE_REQUIRED_SP_RING_COUNT 7 diff --git a/include/game/parameters/characters.h b/include/game/parameters/characters.h index 265989455..7e2b7b0ce 100644 --- a/include/game/parameters/characters.h +++ b/include/game/parameters/characters.h @@ -16,7 +16,7 @@ #define PLAYER_MAX_NOT_HELD_JUMP_FORCE 3.0 #define PLAYER_MAX_NOT_HELD_JUMP_FORCE_UNDER_WATER 1.5 -#define PLAYER_INVULNERABLE_DURATION ZONE_TIME_TO_INT(0, 2) +#define PLAYER_INVULNERABLE_DURATION TIME(0, 2) #define PLAYER_AIR_SPEED_MAX 15.0 @@ -24,13 +24,13 @@ #define TRICK__STOP_N_SLAM__DROP_SPEED Q(0.21875) /*** Cream ***/ -#define CREAM_FLYING_DURATION ZONE_TIME_TO_INT(0, 4) +#define CREAM_FLYING_DURATION TIME(0, 4) /*** Tails ***/ // NOTE: Unlike Cream, Tails does fly for 8 seconds, but his initial value gets set to 4. // For some reason they lower his timer only every 2nd frame (in PlayerCB_8012C2C), // instead of using a bigger value from the get-go, even though they gave him a // 4-byte timer. -#define TAILS_FLYING_DURATION (ZONE_TIME_TO_INT(0, 8) / 2) +#define TAILS_FLYING_DURATION (TIME(0, 8) / 2) #endif // GUARD_PARAMETERS_CHARACTERS_H \ No newline at end of file diff --git a/src/game/bosses/boss_2.c b/src/game/bosses/boss_2.c index fdbcfb346..5bdb7043f 100644 --- a/src/game/bosses/boss_2.c +++ b/src/game/bosses/boss_2.c @@ -849,7 +849,7 @@ static u8 CheckBossDestruction(EggBomberTank *boss, Player *player) if (Coll_Player_Boss_Attack(s, I(boss->qWorldX), I(boss->qWorldY), 0, player) == 1) { if (boss->cannonHealth != 0) { Sprite *s = &boss->pilot; - boss->unk73 = ZONE_TIME_TO_INT(0, 0.5); + boss->unk73 = TIME(0, 0.5); if (boss->bossHitTimer == 0) { s->graphics.anim = SA2_ANIM_EGG_BOMBER_TANK_PILOT; @@ -863,7 +863,7 @@ static u8 CheckBossDestruction(EggBomberTank *boss, Player *player) } else { if (Coll_Player_Enemy(s, I(boss->qWorldX), I(boss->qWorldY), 0, player) == 1) { Sprite *s = &boss->pilot; - boss->unk73 = ZONE_TIME_TO_INT(0, 0.5); + boss->unk73 = TIME(0, 0.5); if (boss->bossHitTimer == 0) { s->graphics.anim = SA2_ANIM_EGG_BOMBER_TANK_PILOT; @@ -1087,7 +1087,7 @@ static void TaskDestructor_EggBomberTankMain(struct Task *t) UNUSED static void sub_803E798(EggBomberTank *boss) { Sprite *s = &boss->pilot; - boss->unk73 = ZONE_TIME_TO_INT(0, 0.5); + boss->unk73 = TIME(0, 0.5); if (boss->bossHitTimer == 0) { s->graphics.anim = SA2_ANIM_EGG_BOMBER_TANK_PILOT; s->variant = 1; @@ -1155,7 +1155,7 @@ static void Task_EggBomberTankBombExplosion(void) if (Coll_Player_Enemy(s, I(bomb->x) + gCamera.x, I(bomb->y) + gCamera.y, 0, &gPlayer) == 1) { if (bomb->boss->bossHitTimer == 0) { Sprite *s = &bomb->boss->pilot; - bomb->boss->unk73 = ZONE_TIME_TO_INT(0, 0.5); + bomb->boss->unk73 = TIME(0, 0.5); s->graphics.anim = SA2_ANIM_HAMMERTANK_PILOT; s->variant = 1; @@ -1233,7 +1233,7 @@ static void Task_BombExplosionMain(void) if (Coll_Player_Enemy(s, explosion->x + gCamera.x, explosion->y + gCamera.y, 0, &gPlayer) == 1) { if (explosion->boss->bossHitTimer == 0) { Sprite *s = &explosion->boss->pilot; - explosion->boss->unk73 = ZONE_TIME_TO_INT(0, 0.5); + explosion->boss->unk73 = TIME(0, 0.5); s->graphics.anim = SA2_ANIM_HAMMERTANK_PILOT; s->variant = 1; s->prevVariant = -1; diff --git a/src/game/bosses/boss_4.c b/src/game/bosses/boss_4.c index 7dd7c3de1..d72c8e54e 100644 --- a/src/game/bosses/boss_4.c +++ b/src/game/bosses/boss_4.c @@ -34,8 +34,8 @@ #define AEROEGG_TAILTIP_OFFSET_X (0) #define AEROEGG_TAILTIP_OFFSET_Y (20) -#define AEROEGG_COOLDOWN_NORMAL ZONE_TIME_TO_INT(0, 2. + (1. / 3.)) -#define AEROEGG_COOLDOWN_PINCH ZONE_TIME_TO_INT(0, 1. + (1. / 3.)) +#define AEROEGG_COOLDOWN_NORMAL TIME(0, 2. + (1. / 3.)) +#define AEROEGG_COOLDOWN_PINCH TIME(0, 1. + (1. / 3.)) #define RESERVED_EXPLOSION_TILES_VRAM (void *)(OBJ_VRAM0 + 0x2980) @@ -209,7 +209,7 @@ void CreateAeroEgg(void) boss->main.unk15 = 0; boss->main.unk16 = 0; boss->main.timerBombDrop = 0; - boss->main.unk0 = ZONE_TIME_TO_INT(0, 2); + boss->main.unk0 = TIME(0, 2); boss->main.timerUnk = 0; boss->main.unk17 = 0; @@ -362,7 +362,7 @@ static void sub_8041A08(AeroEgg *boss) } } - if (++boss->main.timerUnk > ZONE_TIME_TO_INT(0, 5)) { + if (++boss->main.timerUnk > TIME(0, 5)) { r7 = TRUE; } @@ -370,7 +370,7 @@ static void sub_8041A08(AeroEgg *boss) s->graphics.anim = SA2_ANIM_AERO_EGG_PLATFORM; s->variant = 2; s->prevVariant = -1; - boss->main.timerUnk = ZONE_TIME_TO_INT(0, 5); + boss->main.timerUnk = TIME(0, 5); boss->main.unk17 = TRUE; } } else { @@ -806,7 +806,7 @@ static void Task_AeroEggMain(void) boss->main.unk0--; if (boss->main.unk0 == 0) { - boss->main.timerBombDrop = ZONE_TIME_TO_INT(0, 3); + boss->main.timerBombDrop = TIME(0, 3); gCurTask->main = Task_80426C4; } diff --git a/src/game/game_over.c b/src/game/game_over.c index 5080d189a..353824e83 100644 --- a/src/game/game_over.c +++ b/src/game/game_over.c @@ -36,11 +36,11 @@ // TODO: Maybe these should represent X values, not time? #define T_PAUSE_X (DISPLAY_CENTER_X + 20) -#define T_DURATION_PAUSE (ZONE_TIME_TO_INT(0, 1) + ZONE_TIME_TO_INT(0, 2. / 3.)) -#define T_DURATION_FADEOUT ZONE_TIME_TO_INT(0, 2) +#define T_DURATION_PAUSE (TIME(0, 1) + TIME(0, 2. / 3.)) +#define T_DURATION_FADEOUT TIME(0, 2) #define T_POINT_RESUME (T_PAUSE_X - T_DURATION_PAUSE) -#define G_FADE_1_X (DISPLAY_CENTER_X - ZONE_TIME_TO_INT(0, 1)) +#define G_FADE_1_X (DISPLAY_CENTER_X - TIME(0, 1)) #define G_FADE_2_X (G_FADE_1_X - DURATION_TEXT_BLINK) #define T_FADE_1_X (DISPLAY_CENTER_X + 30) diff --git a/src/game/interactables_2/collect_rings_lap_trigger.c b/src/game/interactables_2/collect_rings_lap_trigger.c index c64206f2e..2ec4e3233 100644 --- a/src/game/interactables_2/collect_rings_lap_trigger.c +++ b/src/game/interactables_2/collect_rings_lap_trigger.c @@ -87,9 +87,9 @@ static void HandleLap(Sprite_LapTrigger *trigger) // __0808043C timeDiff = gCheckpointTime - trigger->prevTime; - if (timeDiff > ZONE_TIME_TO_INT(0, 30)) { + if (timeDiff > TIME(0, 30)) { ringBonus = 5; - } else if (timeDiff > ZONE_TIME_TO_INT(0, 20)) { + } else if (timeDiff > TIME(0, 20)) { ringBonus = 10; } else { ringBonus = 15; @@ -195,7 +195,7 @@ static void CreateSprite_Notif_RingBonus(void) Sprite_Notif_RingBonus *notif = TASK_DATA(t); Sprite *s = ¬if->s; - notif->framesVisible = ZONE_TIME_TO_INT(0, 2); + notif->framesVisible = TIME(0, 2); SPRITE_INIT_WITHOUT_ANIM_OR_VRAM(s, 1, 1, 0); diff --git a/src/game/interactables_2/egg_utopia/pole.c b/src/game/interactables_2/egg_utopia/pole.c index a476437c1..293915c06 100644 --- a/src/game/interactables_2/egg_utopia/pole.c +++ b/src/game/interactables_2/egg_utopia/pole.c @@ -72,7 +72,7 @@ static void Task_807EA8C(void) sub_807ED68(pole); return; } - if (gPlayer.timerInvulnerability == ZONE_TIME_TO_INT(0, 2)) { + if (gPlayer.timerInvulnerability == TIME(0, 2)) { sub_807ED88(pole); return; } diff --git a/src/game/interactables_2/sky_canyon/fan.c b/src/game/interactables_2/sky_canyon/fan.c index a10b57882..681edb8ae 100644 --- a/src/game/interactables_2/sky_canyon/fan.c +++ b/src/game/interactables_2/sky_canyon/fan.c @@ -36,10 +36,10 @@ typedef struct { // Durations for each of the "stages" of the propellers with periodic fan speed -#define PERIOD_END__OFF (ZONE_TIME_TO_INT(0, 1)) /* 1s */ -#define PERIOD_END__ACCEL (PERIOD_END__OFF + ZONE_TIME_TO_INT(0, 1)) /* 1s */ -#define PERIOD_END__MAX_SPEED (PERIOD_END__ACCEL + ZONE_TIME_TO_INT(0, 4)) /* 4s */ -#define PERIOD_END__DECEL (PERIOD_END__MAX_SPEED + ZONE_TIME_TO_INT(0, 1)) /* 1s */ +#define PERIOD_END__OFF (TIME(0, 1)) /* 1s */ +#define PERIOD_END__ACCEL (PERIOD_END__OFF + TIME(0, 1)) /* 1s */ +#define PERIOD_END__MAX_SPEED (PERIOD_END__ACCEL + TIME(0, 4)) /* 4s */ +#define PERIOD_END__DECEL (PERIOD_END__MAX_SPEED + TIME(0, 1)) /* 1s */ #define PERIODIC_PROP_FULL_DURATION (PERIOD_END__DECEL) /* 7s */ // Used to clamp the player's max speed diff --git a/src/game/multiboot/collect_rings/time_display.c b/src/game/multiboot/collect_rings/time_display.c index 116e6671c..7b4eb07b8 100644 --- a/src/game/multiboot/collect_rings/time_display.c +++ b/src/game/multiboot/collect_rings/time_display.c @@ -131,7 +131,7 @@ void sub_8082E9C(TimeDisplay *timeDisplay) temp4 = Base10DigitsToHexNibbles(index); palId = 0; - if (gCourseTime < ZONE_TIME_TO_INT(1, 0)) { + if (gCourseTime < TIME(1, 0)) { #ifndef NON_MATCHING palId = (-(gStageTime & 0x10)) >> 0x1F; #else diff --git a/src/game/multiplayer/mp_player.c b/src/game/multiplayer/mp_player.c index 1cb313ad1..a0e9bbbc3 100644 --- a/src/game/multiplayer/mp_player.c +++ b/src/game/multiplayer/mp_player.c @@ -1948,7 +1948,7 @@ bool32 SA2_LABEL(sub_8018300)(void) if (gMultiplayerCharacters[mpp->unk56] == 3) { if (s->graphics.anim == SA1_ANIM_CHAR(AMY, BOOSTLESS_ATTACK) || s->graphics.anim == SA1_ANIM_CHAR(AMY, 56)) { gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__MP_SLOW_DOWN; - gPlayer.timerSpeedup = ZONE_TIME_TO_INT(0, 10); + gPlayer.timerSpeedup = TIME(0, 10); gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__SPEED_UP; CreateItemTask_Confusion(gPlayer.character); m4aMPlayTempoControl(&gMPlayInfo_BGM, Q(0.5)); diff --git a/src/game/multiplayer/multiplayer_event_mgr.c b/src/game/multiplayer/multiplayer_event_mgr.c index 4ea8f30e8..65c5e3d5e 100644 --- a/src/game/multiplayer/multiplayer_event_mgr.c +++ b/src/game/multiplayer/multiplayer_event_mgr.c @@ -105,7 +105,7 @@ void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i) || ((gMultiplayerConnections & (0x10 << (i))) >> ((i + 4)) != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) { gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__CONFUSION; - gPlayer.confusionTimer = ZONE_TIME_TO_INT(0, 10); + gPlayer.confusionTimer = TIME(0, 10); CreateItemTask_Confusion(gPlayer.character); m4aSongNumStart(SE_ITEM_CONFUSION); } @@ -130,7 +130,7 @@ void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i) gPlayer.layer = (mpp->unk54 >> 7) & 1; gPlayer.moveState |= MOVESTATE_IN_AIR; mpp->unk60 = 30; - gPlayer.timerInvulnerability = ZONE_TIME_TO_INT(0, 2); + gPlayer.timerInvulnerability = TIME(0, 2); gCamera.x = (I(gPlayer.qWorldX) + gCamera.shiftX) - DISPLAY_CENTER_X; gCamera.y = (I(gPlayer.qWorldY) + gCamera.shiftY) - DISPLAY_CENTER_Y; m4aSongNumStart(SE_218); @@ -145,7 +145,7 @@ void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i) != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4)))) { gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__MP_SLOW_DOWN; - gPlayer.timerSpeedup = ZONE_TIME_TO_INT(0, 10); + gPlayer.timerSpeedup = TIME(0, 10); gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__SPEED_UP; CreateItemTask_Confusion(gPlayer.character); m4aSongNumStart(SE_ITEM_CONFUSION); diff --git a/src/game/sa1_sa2_shared/demo_manager.c b/src/game/sa1_sa2_shared/demo_manager.c index a0d2d3b35..04ddc9ac1 100644 --- a/src/game/sa1_sa2_shared/demo_manager.c +++ b/src/game/sa1_sa2_shared/demo_manager.c @@ -22,11 +22,11 @@ #if (GAME == GAME_SA1) #define DEMO_SPRITE_PRIO 1 #define DEMO_OAM_ORDER 15 -#define DEMO_PLAYBACK_TIME ZONE_TIME_TO_INT(0, 30) +#define DEMO_PLAYBACK_TIME TIME(0, 30) #elif (GAME == GAME_SA2) #define DEMO_SPRITE_PRIO 0 #define DEMO_OAM_ORDER 1 -#define DEMO_PLAYBACK_TIME ZONE_TIME_TO_INT(0, 24.5) +#define DEMO_PLAYBACK_TIME TIME(0, 24.5) #endif typedef struct { diff --git a/src/game/sa1_sa2_shared/itembox.c b/src/game/sa1_sa2_shared/itembox.c index 024ff0607..fe4078b79 100644 --- a/src/game/sa1_sa2_shared/itembox.c +++ b/src/game/sa1_sa2_shared/itembox.c @@ -24,8 +24,8 @@ #include "constants/songs.h" #include "constants/zones.h" -#define ITEM_DURATION_INVINCIBILITY ZONE_TIME_TO_INT(0, 20) -#define ITEM_DURATION_SPEED_UP ZONE_TIME_TO_INT(0, 20) +#define ITEM_DURATION_INVINCIBILITY TIME(0, 20) +#define ITEM_DURATION_SPEED_UP TIME(0, 20) typedef struct { /* 0x00 */ SpriteBase base; diff --git a/src/game/stage/boss_results_transition.c b/src/game/stage/boss_results_transition.c index b9876153e..8b0ef5992 100644 --- a/src/game/stage/boss_results_transition.c +++ b/src/game/stage/boss_results_transition.c @@ -181,7 +181,7 @@ void Task_802F06C(void) ScreenFade *ts = &sri->ts; UpdateScreenFade(ts); - if (++sri->unk10 > ZONE_TIME_TO_INT(0, 2)) { + if (++sri->unk10 > TIME(0, 2)) { ts->speed = 60; gCurTask->main = Task_802ED98; } diff --git a/src/game/stage/player.c b/src/game/stage/player.c index b90abb8c2..eac70b38b 100644 --- a/src/game/stage/player.c +++ b/src/game/stage/player.c @@ -864,7 +864,7 @@ void InitializePlayer(Player *p) p->stoodObj = NULL; p->itemEffect = PLAYER_ITEM_EFFECT__NONE; p->SA2_LABEL(unk2A) = 0; - p->SA2_LABEL(unk72) = ZONE_TIME_TO_INT(0, 6); + p->SA2_LABEL(unk72) = TIME(0, 6); p->SA2_LABEL(unk7E) = 0; p->SA2_LABEL(unk7C) = 0; p->SA2_LABEL(unk82) = Q(1); @@ -3558,7 +3558,7 @@ void Task_PlayerDied(void) if (DeadPlayerLeftScreen(&gPlayer, &gCamera, gPlayer.qWorldY)) { player_0_Task *gt = TASK_DATA(gCurTask); - gt->unk4 = ZONE_TIME_TO_INT(0, 1); + gt->unk4 = TIME(0, 1); gPlayer.moveState |= MOVESTATE_100000; if (IS_MULTI_PLAYER) { sub_8024B10(p, psi1); @@ -5816,7 +5816,7 @@ void Player_InitVictoryPoseTransition(Player *p) { Player_CameraShift_inline(p); - p->unk72 = ZONE_TIME_TO_INT(0, 1.5); + p->unk72 = TIME(0, 1.5); if (gCurrentLevel < LEVEL_INDEX(ZONE_FINAL, ACT_XX_FINAL_ZONE)) { switch (gCurrentLevel & 0x3) { diff --git a/src/game/stage/results.c b/src/game/stage/results.c index 74f53c898..3ebcc4591 100644 --- a/src/game/stage/results.c +++ b/src/game/stage/results.c @@ -103,23 +103,23 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount) UpdateScreenFade(&outro->base.fade); } - if (courseTime < ZONE_TIME_TO_INT(0, 30)) { + if (courseTime < TIME(0, 30)) { outro->base.timeBonusScore = 80000; - } else if (courseTime < ZONE_TIME_TO_INT(0, 50)) { + } else if (courseTime < TIME(0, 50)) { outro->base.timeBonusScore = 50000; - } else if (courseTime < ZONE_TIME_TO_INT(1, 0)) { + } else if (courseTime < TIME(1, 0)) { outro->base.timeBonusScore = 10000; - } else if (courseTime < ZONE_TIME_TO_INT(1, 30)) { + } else if (courseTime < TIME(1, 30)) { outro->base.timeBonusScore = 5000; - } else if (courseTime < ZONE_TIME_TO_INT(2, 0)) { + } else if (courseTime < TIME(2, 0)) { outro->base.timeBonusScore = 4000; - } else if (courseTime < ZONE_TIME_TO_INT(3, 0)) { + } else if (courseTime < TIME(3, 0)) { outro->base.timeBonusScore = 3000; - } else if (courseTime < ZONE_TIME_TO_INT(4, 0)) { + } else if (courseTime < TIME(4, 0)) { outro->base.timeBonusScore = 2000; - } else if (courseTime < ZONE_TIME_TO_INT(5, 0)) { + } else if (courseTime < TIME(5, 0)) { outro->base.timeBonusScore = 1000; - } else if (courseTime < ZONE_TIME_TO_INT(6, 0)) { + } else if (courseTime < TIME(6, 0)) { outro->base.timeBonusScore = 500; } else { outro->base.timeBonusScore = 0; diff --git a/src/game/stage/stage.c b/src/game/stage/stage.c index 024fd5c9b..6913147eb 100644 --- a/src/game/stage/stage.c +++ b/src/game/stage/stage.c @@ -171,12 +171,12 @@ void GameStageStart(void) gMPStageStartFrameCount = gFrameCount; } - gCheckpointTime = ZONE_TIME_TO_INT(0, 0); + gCheckpointTime = TIME(0, 0); if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { - gCourseTime = ZONE_TIME_TO_INT(0, 0); + gCourseTime = TIME(0, 0); } else { - gCourseTime = ZONE_TIME_TO_INT(3, 0); + gCourseTime = TIME(3, 0); } CreateGameStage(); @@ -509,9 +509,9 @@ void GameStageStart(void) gMPStageStartFrameCount = gFrameCount; - gCheckpointTime = ZONE_TIME_TO_INT(0, 0); + gCheckpointTime = TIME(0, 0); - gCourseTime = ZONE_TIME_TO_INT(3, 0); + gCourseTime = TIME(3, 0); CreateGameStage(); } diff --git a/src/game/stage/ui.c b/src/game/stage/ui.c index 032b90797..cee7b4a13 100644 --- a/src/game/stage/ui.c +++ b/src/game/stage/ui.c @@ -66,25 +66,17 @@ const u8 gMillisUnpackTable[60][2] = { }; const s16 sZoneTimeSecondsTable[] = { - ZONE_TIME_TO_INT(0, 0), ZONE_TIME_TO_INT(0, 1), ZONE_TIME_TO_INT(0, 2), ZONE_TIME_TO_INT(0, 3), ZONE_TIME_TO_INT(0, 4), - ZONE_TIME_TO_INT(0, 5), ZONE_TIME_TO_INT(0, 6), ZONE_TIME_TO_INT(0, 7), ZONE_TIME_TO_INT(0, 8), ZONE_TIME_TO_INT(0, 9), - ZONE_TIME_TO_INT(0, 10), ZONE_TIME_TO_INT(0, 11), ZONE_TIME_TO_INT(0, 12), ZONE_TIME_TO_INT(0, 13), ZONE_TIME_TO_INT(0, 14), - ZONE_TIME_TO_INT(0, 15), ZONE_TIME_TO_INT(0, 16), ZONE_TIME_TO_INT(0, 17), ZONE_TIME_TO_INT(0, 18), ZONE_TIME_TO_INT(0, 19), - ZONE_TIME_TO_INT(0, 20), ZONE_TIME_TO_INT(0, 21), ZONE_TIME_TO_INT(0, 22), ZONE_TIME_TO_INT(0, 23), ZONE_TIME_TO_INT(0, 24), - ZONE_TIME_TO_INT(0, 25), ZONE_TIME_TO_INT(0, 26), ZONE_TIME_TO_INT(0, 27), ZONE_TIME_TO_INT(0, 28), ZONE_TIME_TO_INT(0, 29), - ZONE_TIME_TO_INT(0, 30), ZONE_TIME_TO_INT(0, 31), ZONE_TIME_TO_INT(0, 32), ZONE_TIME_TO_INT(0, 33), ZONE_TIME_TO_INT(0, 34), - ZONE_TIME_TO_INT(0, 35), ZONE_TIME_TO_INT(0, 36), ZONE_TIME_TO_INT(0, 37), ZONE_TIME_TO_INT(0, 38), ZONE_TIME_TO_INT(0, 39), - ZONE_TIME_TO_INT(0, 40), ZONE_TIME_TO_INT(0, 41), ZONE_TIME_TO_INT(0, 42), ZONE_TIME_TO_INT(0, 43), ZONE_TIME_TO_INT(0, 44), - ZONE_TIME_TO_INT(0, 45), ZONE_TIME_TO_INT(0, 46), ZONE_TIME_TO_INT(0, 47), ZONE_TIME_TO_INT(0, 48), ZONE_TIME_TO_INT(0, 49), - ZONE_TIME_TO_INT(0, 50), ZONE_TIME_TO_INT(0, 51), ZONE_TIME_TO_INT(0, 52), ZONE_TIME_TO_INT(0, 53), ZONE_TIME_TO_INT(0, 54), - ZONE_TIME_TO_INT(0, 55), ZONE_TIME_TO_INT(0, 56), ZONE_TIME_TO_INT(0, 57), ZONE_TIME_TO_INT(0, 58), ZONE_TIME_TO_INT(0, 59), - ZONE_TIME_TO_INT(1, 0), + TIME(0, 0), TIME(0, 1), TIME(0, 2), TIME(0, 3), TIME(0, 4), TIME(0, 5), TIME(0, 6), TIME(0, 7), TIME(0, 8), + TIME(0, 9), TIME(0, 10), TIME(0, 11), TIME(0, 12), TIME(0, 13), TIME(0, 14), TIME(0, 15), TIME(0, 16), TIME(0, 17), + TIME(0, 18), TIME(0, 19), TIME(0, 20), TIME(0, 21), TIME(0, 22), TIME(0, 23), TIME(0, 24), TIME(0, 25), TIME(0, 26), + TIME(0, 27), TIME(0, 28), TIME(0, 29), TIME(0, 30), TIME(0, 31), TIME(0, 32), TIME(0, 33), TIME(0, 34), TIME(0, 35), + TIME(0, 36), TIME(0, 37), TIME(0, 38), TIME(0, 39), TIME(0, 40), TIME(0, 41), TIME(0, 42), TIME(0, 43), TIME(0, 44), + TIME(0, 45), TIME(0, 46), TIME(0, 47), TIME(0, 48), TIME(0, 49), TIME(0, 50), TIME(0, 51), TIME(0, 52), TIME(0, 53), + TIME(0, 54), TIME(0, 55), TIME(0, 56), TIME(0, 57), TIME(0, 58), TIME(0, 59), TIME(1, 0), }; const u16 sZoneTimeMinutesTable[] = { - ZONE_TIME_TO_INT(0, 0), ZONE_TIME_TO_INT(1, 0), ZONE_TIME_TO_INT(2, 0), ZONE_TIME_TO_INT(3, 0), - ZONE_TIME_TO_INT(4, 0), ZONE_TIME_TO_INT(5, 0), ZONE_TIME_TO_INT(6, 0), ZONE_TIME_TO_INT(7, 0), - ZONE_TIME_TO_INT(8, 0), ZONE_TIME_TO_INT(9, 0), ZONE_TIME_TO_INT(10, 0), + TIME(0, 0), TIME(1, 0), TIME(2, 0), TIME(3, 0), TIME(4, 0), TIME(5, 0), TIME(6, 0), TIME(7, 0), TIME(8, 0), TIME(9, 0), TIME(10, 0), }; typedef struct { @@ -283,7 +275,7 @@ void Task_StageUIMain(void) } } - if ((!gLoadedSaveGame->timeLimitDisabled) && (gCourseTime >= ZONE_TIME_TO_INT(9, 40)) && (Mod(gCourseTime, 60) == 0)) { + if ((!gLoadedSaveGame->timeLimitDisabled) && (gCourseTime >= TIME(9, 40)) && (Mod(gCourseTime, 60) == 0)) { m4aSongNumStart(SE_TIMER); } @@ -463,7 +455,7 @@ void Task_StageUIMain(void) r5 = r1 - sZoneTimeMinutesTable[minutes]; tempTime = gCourseTime; - tempB = ZONE_TIME_TO_INT(9, 0); + tempB = TIME(9, 0); palId = 0; if (tempTime > tempB) { palId = (-(gStageTime & 0x10)) >> 31;