more results screen fixes for widescreen, refactor results screens to share struct

This commit is contained in:
Oliver Bell committed 2024-10-20 18:53:22 +01:00
1 parent 75bb45bacd
commit 207d4f6978
6 files changed
+295 -294

No files matched your search

+4 -1
View File
@@ -342,7 +342,10 @@
"boss_8.h": "c",
"config.h": "c",
"sprite_tables.h": "c",
"iron_ball.h": "c"
"iron_ball.h": "c",
"char_states.h": "c",
"course_select.h": "c",
"level_endings.h": "c"
},
"asm-code-lens.donated": true,
"editor.formatOnSave": true,
+19 -3
View File
@@ -2,11 +2,27 @@
#define GUARD_STAGE_RESULTS_H
#include "global.h"
#include "sprite.h"
#include "screen_fade.h"
typedef struct {
/* 0x00 */ ScreenFade fade;
/* 0x0C */ Sprite title[3];
/* 0x9C */ Sprite sprScores[3];
/* 0x12C */ Sprite separator;
/* 0x15C */ u32 timeBonusScore;
/* 0x160 */ u32 ringBonusScore;
/* 0x164 */ u32 spRingBonusScore;
/* 0x168 */ s32 counter; // frames since task started
/* 0x16C */ s32 unk16C;
} StageResultsBase; /* size: 0x174 */
u16 CreateStageResults(u32, u16, u8);
void StageResults_AnimateSeparator(void);
void StageResults_AnimateTitle(void);
extern const u16 sAnimsGotThroughZoneAndActNames[11][3];
extern const u16 sStageResultsHeadlineTexts[5][3];
extern const u16 sAnimsGotThroughCharacterNames[5][3];
extern const u16 gAnimsGotThroughZoneAndActNames[][3];
extern const u16 gStageResultsHeadlineTexts[][3];
extern const u16 gAnimsGotThroughCharacterNames[][3];
#endif // GUARD_STAGE_RESULTS_H
+7 -7
View File
@@ -112,6 +112,8 @@ void sub_8036168(void)
if (--countdown->unk68 == 0) {
gPlayer.moveState &= ~MOVESTATE_IGNORE_INPUT;
// Uncomment to skip straight to level ending
// gPlayer.moveState |= MOVESTATE_GOAL_REACHED;
gStageFlags &= ~STAGE_FLAG__ACT_START;
gStageFlags &= ~STAGE_FLAG__100;
gPlayer.charState = CHARSTATE_WALK_A;
@@ -149,8 +151,8 @@ void sub_8036168(void)
s = &countdown->sprCountdownDigits;
s->variant = SA2_ANIM_VARIANT_COUNTDOWN_1 - Div(countdown->unk68, GBA_FRAMES_PER_SECOND);
s->prevVariant = -1;
s->x = (I(gPlayer.x) - gCamera.x) + 0x18;
s->y = (I(gPlayer.y) - gCamera.y) - 0x18;
s->x = (I(gPlayer.x) - gCamera.x) + 24;
s->y = (I(gPlayer.y) - gCamera.y) - 24;
UpdateSpriteAnimation(s);
DisplaySprite(s);
}
@@ -175,11 +177,9 @@ void sub_8036398(void)
s->x = countdown->unk60 - gCamera.x;
s->y = countdown->unk64 - gCamera.y;
{
if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) {
TaskDestroy(gCurTask);
return;
}
if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) {
TaskDestroy(gCurTask);
return;
}
UpdateSpriteAnimation(s);
+139 -149
View File
@@ -21,15 +21,7 @@
#include "constants/zones.h"
typedef struct {
/* 0x00 */ ScreenFade fade;
/* 0x0C */ Sprite s1[3];
/* 0x9C */ Sprite sprScores[3];
/* 0x12C */ Sprite s7;
/* 0x15C */ u32 timeBonusScore;
/* 0x160 */ u32 ringBonusScore;
/* 0x164 */ u32 spRingBonusScore;
/* 0x168 */ s32 counter; // frames since task started
/* 0x16C */ s32 unk16C;
StageResultsBase base;
/* 0x170 */ bool8 isCountingDone;
} StageResults; /* size: 0x174 */
@@ -37,7 +29,12 @@ typedef struct {
#define OUTRO_RING_BONUS_Y_POS (DISPLAY_HEIGHT / 2) + 30
#define OUTRO_SP_RING_BONUS_Y_POS (DISPLAY_HEIGHT / 2) + 50
const u16 sAnimsGotThroughCharacterNames[5][3] = {
static void Task_UpdateStageResults(void);
static void TaskDestructor_StageResults(struct Task *);
static void AnimateResults(u16 frame);
static void DestroyStageResultsGfx(void);
const u16 gAnimsGotThroughCharacterNames[][3] = {
{ 24, SA2_ANIM_CHAR_GOT_THROUGH, SA2_ANIM_VARIANT_CHAR_GOT_THROUGH_SONIC },
{ 27, SA2_ANIM_CHAR_GOT_THROUGH, SA2_ANIM_VARIANT_CHAR_GOT_THROUGH_CREAM },
{ 24, SA2_ANIM_CHAR_GOT_THROUGH, SA2_ANIM_VARIANT_CHAR_GOT_THROUGH_TAILS },
@@ -45,7 +42,7 @@ const u16 sAnimsGotThroughCharacterNames[5][3] = {
{ 18, SA2_ANIM_CHAR_GOT_THROUGH, SA2_ANIM_VARIANT_CHAR_GOT_THROUGH_AMY },
};
const u16 sStageResultsHeadlineTexts[5][3] = {
const u16 gStageResultsHeadlineTexts[][3] = {
{ 28, SA2_ANIM_RESULTS_HEADLINE, SA2_ANIM_VARIANT_RESULTS_HEADLINE_GOT_THROUGH },
{ 36, SA2_ANIM_RESULTS_HEADLINE, SA2_ANIM_VARIANT_RESULTS_HEADLINE_BOSS_DESTROYED },
{ 0, 0, 0 },
@@ -53,7 +50,7 @@ const u16 sStageResultsHeadlineTexts[5][3] = {
{ 0, 0, 0 },
};
const u16 sAnimsGotThroughZoneAndActNames[11][3] = {
const u16 gAnimsGotThroughZoneAndActNames[][3] = {
{ 14, SA2_ANIM_STAGE, SA2_ANIM_VARIANT_STAGE_ACT_1 }, { 14, SA2_ANIM_STAGE, SA2_ANIM_VARIANT_STAGE_ACT_2 },
{ 18, SA2_ANIM_STAGE, SA2_ANIM_VARIANT_STAGE_ZONE(ZONE_1) }, { 18, SA2_ANIM_STAGE, SA2_ANIM_VARIANT_STAGE_ZONE(ZONE_2) },
{ 18, SA2_ANIM_STAGE, SA2_ANIM_VARIANT_STAGE_ZONE(ZONE_3) }, { 18, SA2_ANIM_STAGE, SA2_ANIM_VARIANT_STAGE_ZONE(ZONE_4) },
@@ -62,20 +59,13 @@ const u16 sAnimsGotThroughZoneAndActNames[11][3] = {
{ 16, SA2_ANIM_STAGE, SA2_ANIM_VARIANT_STAGE_EXTRA },
};
static const u16 sStageScoreBonusesTexts[3][3] = {
static const u16 sStageScoreBonusesTexts[][3] = {
{ 26, SA2_ANIM_SCORE_BONUSES, SA2_ANIM_VARIANT_SCORE_BONUSES_TIME },
{ 26, SA2_ANIM_SCORE_BONUSES, SA2_ANIM_VARIANT_SCORE_BONUSES_RING },
{ 26, SA2_ANIM_SCORE_BONUSES, SA2_ANIM_VARIANT_SCORE_BONUSES_SP_RING },
};
static const u16 sStageResultsTextOffset[3] = { 0, 69, 173 };
void Task_UpdateStageResults(void);
void TaskDestructor_StageResults(struct Task *);
void sub_80310F0(void);
static void sub_8031138(u16 p0);
void sub_8031314(void);
static void DestroyStageResultsGfx(void);
static const u16 sStageResultsTextOffset[] = { 0, 69, 173 };
u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount)
{
@@ -94,70 +84,70 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount)
t = TaskCreate(Task_UpdateStageResults, sizeof(StageResults), 0xC100, 0, TaskDestructor_StageResults);
outro = TASK_DATA(t);
outro->counter = zero;
outro->base.counter = zero;
outro->isCountingDone = zero;
outro->fade.window = zero;
outro->fade.flags = 1;
outro->fade.speed = Q(1.0);
outro->fade.brightness = zero;
outro->fade.bldCnt = 0x3FFF;
outro->fade.bldAlpha = zero;
outro->base.fade.window = zero;
outro->base.fade.flags = 1;
outro->base.fade.speed = Q(1.0);
outro->base.fade.brightness = zero;
outro->base.fade.bldCnt = 0x3FFF;
outro->base.fade.bldAlpha = zero;
if ((gPlayer.moveState & MOVESTATE_GOAL_REACHED) && (gSpecialRingCount >= SPECIAL_STAGE_REQUIRED_SP_RING_COUNT)) {
outro->fade.speed = Q(0.25);
outro->fade.bldCnt = 0x3FBF;
outro->base.fade.speed = Q(0.25);
outro->base.fade.bldCnt = 0x3FBF;
} else if (IS_FINAL_OR_EXTRA_STAGE(gCurrentLevel)) {
outro->fade.bldCnt = 0x3FAF;
outro->fade.brightness = 0x2000;
UpdateScreenFade(&outro->fade);
outro->base.fade.bldCnt = 0x3FAF;
outro->base.fade.brightness = 0x2000;
UpdateScreenFade(&outro->base.fade);
}
if (courseTime < ZONE_TIME_TO_INT(0, 30)) {
outro->timeBonusScore = 80000;
outro->base.timeBonusScore = 80000;
} else if (courseTime < ZONE_TIME_TO_INT(0, 50)) {
outro->timeBonusScore = 50000;
outro->base.timeBonusScore = 50000;
} else if (courseTime < ZONE_TIME_TO_INT(1, 0)) {
outro->timeBonusScore = 10000;
outro->base.timeBonusScore = 10000;
} else if (courseTime < ZONE_TIME_TO_INT(1, 30)) {
outro->timeBonusScore = 5000;
outro->base.timeBonusScore = 5000;
} else if (courseTime < ZONE_TIME_TO_INT(2, 0)) {
outro->timeBonusScore = 4000;
outro->base.timeBonusScore = 4000;
} else if (courseTime < ZONE_TIME_TO_INT(3, 0)) {
outro->timeBonusScore = 3000;
outro->base.timeBonusScore = 3000;
} else if (courseTime < ZONE_TIME_TO_INT(4, 0)) {
outro->timeBonusScore = 2000;
outro->base.timeBonusScore = 2000;
} else if (courseTime < ZONE_TIME_TO_INT(5, 0)) {
outro->timeBonusScore = 1000;
outro->base.timeBonusScore = 1000;
} else if (courseTime < ZONE_TIME_TO_INT(6, 0)) {
outro->timeBonusScore = 500;
outro->base.timeBonusScore = 500;
} else {
outro->timeBonusScore = 0;
outro->base.timeBonusScore = 0;
}
outro->ringBonusScore = ringCount * 100;
outro->base.ringBonusScore = ringCount * 100;
if (spRingCount == SPECIAL_STAGE_REQUIRED_SP_RING_COUNT) {
outro->spRingBonusScore = 10000;
outro->base.spRingBonusScore = 10000;
} else {
outro->spRingBonusScore = spRingCount * 1000;
outro->base.spRingBonusScore = spRingCount * 1000;
}
if (outro->spRingBonusScore > outro->ringBonusScore) {
if (outro->spRingBonusScore > outro->timeBonusScore) {
outro->unk16C = Div(outro->spRingBonusScore, 100);
if (outro->base.spRingBonusScore > outro->base.ringBonusScore) {
if (outro->base.spRingBonusScore > outro->base.timeBonusScore) {
outro->base.unk16C = Div(outro->base.spRingBonusScore, 100);
} else {
outro->unk16C = Div(outro->timeBonusScore, 100);
outro->base.unk16C = Div(outro->base.timeBonusScore, 100);
}
} else {
if (outro->ringBonusScore > outro->timeBonusScore) {
outro->unk16C = Div(outro->ringBonusScore, 100);
if (outro->base.ringBonusScore > outro->base.timeBonusScore) {
outro->base.unk16C = Div(outro->base.ringBonusScore, 100);
} else {
outro->unk16C = Div(outro->timeBonusScore, 100);
outro->base.unk16C = Div(outro->base.timeBonusScore, 100);
}
}
s = &outro->s7;
s = &outro->base.separator;
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2);
s->graphics.dest = VramMalloc(4);
@@ -174,12 +164,12 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount)
s->frameFlags = SPRITE_FLAG(PRIORITY, 0);
UpdateSpriteAnimation(s);
s = &outro->s1[0];
s = &outro->base.title[0];
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2) - 39;
s->graphics.dest = VramMalloc(sAnimsGotThroughCharacterNames[gSelectedCharacter][0]);
s->graphics.anim = sAnimsGotThroughCharacterNames[gSelectedCharacter][1];
s->variant = sAnimsGotThroughCharacterNames[gSelectedCharacter][2];
s->graphics.dest = VramMalloc(gAnimsGotThroughCharacterNames[gSelectedCharacter][0]);
s->graphics.anim = gAnimsGotThroughCharacterNames[gSelectedCharacter][1];
s->variant = gAnimsGotThroughCharacterNames[gSelectedCharacter][2];
s->oamFlags = SPRITE_OAM_ORDER(4);
s->graphics.size = 0;
s->animCursor = 0;
@@ -196,17 +186,17 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount)
u8 level;
bool32 isBossAct = ACT_INDEX(gCurrentLevel) >> 1;
s = &outro->s1[1];
s = &outro->base.title[1];
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2) - 31;
s->graphics.dest = VramMalloc(sStageResultsHeadlineTexts[isBossAct][0]);
s->graphics.anim = sStageResultsHeadlineTexts[isBossAct][1];
s->variant = sStageResultsHeadlineTexts[isBossAct][2];
s->graphics.dest = VramMalloc(gStageResultsHeadlineTexts[isBossAct][0]);
s->graphics.anim = gStageResultsHeadlineTexts[isBossAct][1];
s->variant = gStageResultsHeadlineTexts[isBossAct][2];
extraLevel = gCurrentLevel; // needed for matching
if (IS_FINAL_STAGE(extraLevel) || IS_EXTRA_STAGE(gCurrentLevel)) {
s->graphics.anim = sStageResultsHeadlineTexts[0][1];
s->variant = sStageResultsHeadlineTexts[0][2];
s->graphics.anim = gStageResultsHeadlineTexts[0][1];
s->variant = gStageResultsHeadlineTexts[0][2];
}
s->oamFlags = SPRITE_OAM_ORDER(4);
@@ -227,19 +217,19 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount)
level = gCurrentLevel & 1;
}
s = &outro->s1[2];
s = &outro->base.title[2];
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2) - 31;
s->graphics.dest = VramMalloc(sAnimsGotThroughZoneAndActNames[level][0]);
s->graphics.anim = sAnimsGotThroughZoneAndActNames[level][1];
s->variant = sAnimsGotThroughZoneAndActNames[level][2];
s->graphics.dest = VramMalloc(gAnimsGotThroughZoneAndActNames[level][0]);
s->graphics.anim = gAnimsGotThroughZoneAndActNames[level][1];
s->variant = gAnimsGotThroughZoneAndActNames[level][2];
if (IS_FINAL_STAGE(gCurrentLevel)) {
s->graphics.anim = sAnimsGotThroughZoneAndActNames[9][1];
s->variant = sAnimsGotThroughZoneAndActNames[9][2];
s->graphics.anim = gAnimsGotThroughZoneAndActNames[9][1];
s->variant = gAnimsGotThroughZoneAndActNames[9][2];
} else if (IS_EXTRA_STAGE(gCurrentLevel)) {
s->graphics.anim = sAnimsGotThroughZoneAndActNames[10][1];
s->variant = sAnimsGotThroughZoneAndActNames[10][2];
s->graphics.anim = gAnimsGotThroughZoneAndActNames[10][1];
s->variant = gAnimsGotThroughZoneAndActNames[10][2];
}
s->oamFlags = SPRITE_OAM_ORDER(4);
@@ -254,8 +244,8 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount)
UpdateSpriteAnimation(s);
}
for (i = 0; i < ARRAY_COUNT(outro->sprScores); i++) {
s = &outro->sprScores[i];
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->graphics.dest = VramMalloc(sStageScoreBonusesTexts[i][0]);
@@ -290,18 +280,18 @@ u16 CreateStageResults(u32 courseTime, u16 ringCount, u8 spRingCount)
m4aSongNumStart(MUS_ACT_CLEAR);
}
return (u16)outro->unk16C;
return (u16)outro->base.unk16C;
}
void Task_UpdateStageResults(void)
static void Task_UpdateStageResults(void)
{
StageResults *outro = TASK_DATA(gCurTask);
u32 counter = outro->counter;
u32 counter = outro->base.counter;
if (++counter > outro->unk16C + 309) {
counter = outro->unk16C + 310;
if (++counter > outro->base.unk16C + 309) {
counter = outro->base.unk16C + 310;
}
outro->counter = counter;
outro->base.counter = counter;
if (IS_EXTRA_STAGE(gCurrentLevel)) {
gBldRegs.bldCnt = (BLDCNT_TGT2_ALL | BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_BD | BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2
@@ -309,41 +299,41 @@ void Task_UpdateStageResults(void)
}
if (counter >= 150) {
if (outro->ringBonusScore != 0) {
outro->ringBonusScore -= 100;
if (outro->base.ringBonusScore != 0) {
outro->base.ringBonusScore -= 100;
INCREMENT_SCORE_A(100);
}
if (outro->spRingBonusScore != 0) {
outro->spRingBonusScore -= 100;
if (outro->base.spRingBonusScore != 0) {
outro->base.spRingBonusScore -= 100;
INCREMENT_SCORE_A(100);
}
if (outro->timeBonusScore != 0) {
outro->timeBonusScore -= 100;
if (outro->base.timeBonusScore != 0) {
outro->base.timeBonusScore -= 100;
INCREMENT_SCORE_A(100);
}
// If user pressed A, quickly finish score counting
if (!IS_FINAL_OR_EXTRA_STAGE(gCurrentLevel)) {
if (gPressedKeys & A_BUTTON) {
INCREMENT_SCORE_A(outro->ringBonusScore);
INCREMENT_SCORE_A(outro->spRingBonusScore);
INCREMENT_SCORE_A(outro->timeBonusScore);
INCREMENT_SCORE_A(outro->base.ringBonusScore);
INCREMENT_SCORE_A(outro->base.spRingBonusScore);
INCREMENT_SCORE_A(outro->base.timeBonusScore);
outro->ringBonusScore = 0;
outro->spRingBonusScore = 0;
outro->timeBonusScore = 0;
outro->base.ringBonusScore = 0;
outro->base.spRingBonusScore = 0;
outro->base.timeBonusScore = 0;
if (counter < outro->unk16C + 149) {
counter = outro->unk16C + 149;
outro->counter = counter;
if (counter < outro->base.unk16C + 149) {
counter = outro->base.unk16C + 149;
outro->base.counter = counter;
}
}
}
if ((gStageTime % 4u) == 0) {
if ((outro->ringBonusScore != 0) || (outro->spRingBonusScore != 0) || (outro->timeBonusScore != 0)) {
if ((outro->base.ringBonusScore != 0) || (outro->base.spRingBonusScore != 0) || (outro->base.timeBonusScore != 0)) {
m4aSongNumStart(SE_STAGE_RESULT_COUNTER);
} else if (!outro->isCountingDone) {
outro->isCountingDone = TRUE;
@@ -352,7 +342,7 @@ void Task_UpdateStageResults(void)
}
}
if (counter > outro->unk16C + 309) {
if (counter > outro->base.unk16C + 309) {
if (IS_FINAL_STAGE(gCurrentLevel)) {
if ((gMPlayInfo_BGM.status & 0xFFFF) == 0) {
gLoadedSaveGame->unlockedLevels[gSelectedCharacter] = LEVEL_INDEX(ZONE_FINAL, ACT_TRUE_AREA_53);
@@ -388,7 +378,7 @@ void Task_UpdateStageResults(void)
return;
}
} else {
if (UpdateScreenFade(&outro->fade) == 1) {
if (UpdateScreenFade(&outro->base.fade) == 1) {
gBldRegs.bldY = 0x10;
gPlayer.moveState |= MOVESTATE_100000;
@@ -488,27 +478,27 @@ void Task_UpdateStageResults(void)
}
}
sub_80310F0();
sub_8031314();
StageResults_AnimateSeparator();
StageResults_AnimateTitle();
if (IS_FINAL_OR_EXTRA_STAGE(gCurrentLevel)) {
if (counter > outro->unk16C + 245) {
if (counter > outro->base.unk16C + 245) {
u32 innerCount = counter;
innerCount -= 245;
sub_8031138((innerCount - outro->unk16C) * 16);
AnimateResults((innerCount - outro->base.unk16C) * 16);
} else {
sub_8031138(0);
AnimateResults(0);
}
} else {
sub_8031138(0);
AnimateResults(0);
}
}
void sub_80310F0(void)
void StageResults_AnimateSeparator(void)
{
StageResults *outro = TASK_DATA(gCurTask);
u32 counter = outro->counter;
Sprite *s = &outro->s7;
u32 counter = outro->base.counter;
Sprite *s = &outro->base.separator;
if (counter <= 15) {
s->x = (16 - counter) * 15;
@@ -520,17 +510,17 @@ void sub_80310F0(void)
}
}
void sub_8031138(u16 p0)
static void AnimateResults(u16 frame)
{
StageResults *outro = TASK_DATA(gCurTask);
u32 counter = outro->counter;
u32 counter = outro->base.counter;
u32 i;
Sprite *s;
s32 r4;
if (counter < 24) {
s32 x;
s = &outro->s7;
s = &outro->base.separator;
x = 0;
if (counter <= 16) {
@@ -538,14 +528,14 @@ void sub_8031138(u16 p0)
}
for (i = 0; i < ((DISPLAY_WIDTH + 32) / 32); i++) {
s->x = (x - p0) + i * 32;
s->x = (x - frame) + i * 32;
DisplaySprite(s);
}
} else {
s = &outro->s7;
s = &outro->base.separator;
for (i = 0; i < ((DISPLAY_WIDTH + 32) / 32); i++) {
s->x = -p0 + i * 32;
s->x = -frame + i * 32;
DisplaySprite(s);
}
}
@@ -554,15 +544,15 @@ void sub_8031138(u16 p0)
u32 numDisplayedBonuses = (ACT_INDEX(gCurrentLevel) == ACT_BOSS) ? 2 : 3;
for (i = 0; i < numDisplayedBonuses; i++) {
s = &outro->s1[i];
s->x -= p0;
s = &outro->base.title[i];
s->x -= frame;
DisplaySprite(s);
}
}
if (counter >= 39) {
s = &outro->sprScores[0];
s = &outro->base.sprScores[0];
if (counter < 56) {
u16 innerX = DISPLAY_WIDTH - ((counter - 39) * 12);
@@ -570,18 +560,18 @@ void sub_8031138(u16 p0)
} else {
r4 = (DISPLAY_WIDTH / 2) - 72;
}
s->x = r4 - p0;
s->x = r4 - frame;
DisplaySprite(s);
{
s16 r4_2 = r4;
s16 pp = p0;
StageUI_PrintIntegerAt(outro->timeBonusScore, r4_2 + 144 - pp, OUTRO_TIME_BONUS_Y_POS, 0);
s16 pp = frame;
StageUI_PrintIntegerAt(outro->base.timeBonusScore, r4_2 + 144 - pp, OUTRO_TIME_BONUS_Y_POS, 0);
}
}
if (counter >= 49) {
s = &outro->sprScores[1];
s = &outro->base.sprScores[1];
if (counter <= 65) {
u16 innerX = DISPLAY_WIDTH - ((counter - 49) * 12);
@@ -589,18 +579,18 @@ void sub_8031138(u16 p0)
} else {
r4 = (DISPLAY_WIDTH / 2) - 72;
}
s->x = r4 - p0;
s->x = r4 - frame;
DisplaySprite(s);
{
s16 r4_2 = r4;
s16 pp = p0;
StageUI_PrintIntegerAt(outro->ringBonusScore, r4_2 + 144 - pp, OUTRO_RING_BONUS_Y_POS, 0);
s16 pp = frame;
StageUI_PrintIntegerAt(outro->base.ringBonusScore, r4_2 + 144 - pp, OUTRO_RING_BONUS_Y_POS, 0);
}
}
if ((ACT_INDEX(gCurrentLevel) != ACT_BOSS) && (gCurrentLevel < LEVEL_INDEX(ZONE_FINAL, ACT_XX_FINAL_ZONE)) && (counter >= 59)) {
s = &outro->sprScores[2];
s = &outro->base.sprScores[2];
if (counter <= 75) {
u16 innerX = DISPLAY_WIDTH - ((counter - 59) * 12);
@@ -609,21 +599,21 @@ void sub_8031138(u16 p0)
r4 = (DISPLAY_WIDTH / 2) - 72;
}
s->x = r4 - p0;
s->x = r4 - frame;
DisplaySprite(s);
{
s16 r4_2 = r4;
s16 pp = p0;
StageUI_PrintIntegerAt(outro->spRingBonusScore, r4_2 + 144 - pp, OUTRO_SP_RING_BONUS_Y_POS, 0);
s16 pp = frame;
StageUI_PrintIntegerAt(outro->base.spRingBonusScore, r4_2 + 144 - pp, OUTRO_SP_RING_BONUS_Y_POS, 0);
}
}
}
void sub_8031314(void)
void StageResults_AnimateTitle(void)
{
StageResults *outro = TASK_DATA(gCurTask);
u32 counter = outro->counter;
u32 counter = outro->base.counter;
if (counter > 28) {
u32 x;
@@ -638,7 +628,7 @@ void sub_8031314(void)
s32 i = 0;
s32 x2 = (s16)x;
for (; i < ARRAY_COUNT(sStageResultsTextOffset); i++) {
Sprite *s = &outro->s1[i];
Sprite *s = &outro->base.title[i];
s32 offset = sStageResultsTextOffset[i];
s->x = x2 + offset;
}
@@ -646,32 +636,32 @@ void sub_8031314(void)
}
}
void TaskDestructor_StageResults(struct Task *t)
static void TaskDestructor_StageResults(struct Task *t)
{
StageResults *outro = TASK_DATA(t);
if (outro->s7.graphics.dest != NULL) {
VramFree(outro->s7.graphics.dest);
VramFree(outro->s1[0].graphics.dest);
VramFree(outro->s1[1].graphics.dest);
VramFree(outro->s1[2].graphics.dest);
VramFree(outro->sprScores[0].graphics.dest);
VramFree(outro->sprScores[1].graphics.dest);
VramFree(outro->sprScores[2].graphics.dest);
if (outro->base.separator.graphics.dest != NULL) {
VramFree(outro->base.separator.graphics.dest);
VramFree(outro->base.title[0].graphics.dest);
VramFree(outro->base.title[1].graphics.dest);
VramFree(outro->base.title[2].graphics.dest);
VramFree(outro->base.sprScores[0].graphics.dest);
VramFree(outro->base.sprScores[1].graphics.dest);
VramFree(outro->base.sprScores[2].graphics.dest);
}
}
void DestroyStageResultsGfx(void)
static void DestroyStageResultsGfx(void)
{
StageResults *outro = TASK_DATA(gCurTask);
if (outro->s7.graphics.dest != NULL) {
VramFree(outro->s7.graphics.dest);
VramFree(outro->s1[0].graphics.dest);
VramFree(outro->s1[1].graphics.dest);
VramFree(outro->s1[2].graphics.dest);
VramFree(outro->sprScores[0].graphics.dest);
VramFree(outro->sprScores[1].graphics.dest);
VramFree(outro->sprScores[2].graphics.dest);
if (outro->base.separator.graphics.dest != NULL) {
VramFree(outro->base.separator.graphics.dest);
VramFree(outro->base.title[0].graphics.dest);
VramFree(outro->base.title[1].graphics.dest);
VramFree(outro->base.title[2].graphics.dest);
VramFree(outro->base.sprScores[0].graphics.dest);
VramFree(outro->base.sprScores[1].graphics.dest);
VramFree(outro->base.sprScores[2].graphics.dest);
outro->s7.graphics.dest = NULL;
outro->base.separator.graphics.dest = NULL;
}
}
+125 -133
View File
@@ -16,51 +16,51 @@
#include "constants/char_states.h"
#include "constants/songs.h"
struct TimeAttackResultsCutScene {
ScreenFade unk0;
Sprite unkC[3];
Sprite unk9C[3];
Sprite unk12C;
u32 unk15C;
u8 filler160[8];
u32 unk168;
u8 filler16C[5];
typedef struct {
StageResultsBase base;
u8 unk170;
u8 unk171;
u8 unk172;
u8 unk173;
u8 unk174;
u8 unk175;
u8 filler176[2];
Sprite unk178[7];
Sprite digits[7];
SpriteTransform transform;
s16 unk2D4;
s16 unk2D6;
u8 unk2D8;
};
s16 medalSpinSpeed;
s16 medalSpin;
u8 rank;
} TimeAttackResultsCutScene;
void sub_8089AEC(void);
void sub_8089BB0(struct Task *);
u8 sub_80899B8(u32 finishTime);
static void TaskDestructor_TimeAttackResults(struct Task *);
static void Task_AnimateResults(void);
static void Task_HandleExit(void);
static u8 StoreRecord(u32 finishTime);
static const s8 sTimeResultDigitAnim[] = {
3, 2, 1, 0, 0, -1, -2, -3, -4, -4, -3, -2, 1, 2, 3, 0, 0, 0, 0, 0,
};
static const u8 unused[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
u32 CreateTimeAttackResults(u32 finishTime)
{
struct Task *t;
struct TimeAttackResultsCutScene *resultsCutScene;
TimeAttackResultsCutScene *resultsCutScene;
ScreenFade *fade;
Sprite *s = NULL;
s16 millis, minutes, seconds;
u8 i;
u8 isBossLevel;
u8 level;
u8 i, level;
bool8 isBossLevel;
gLoadedSaveGame->score += (s16)gRingCount;
t = TaskCreate(sub_8089AEC, sizeof(struct TimeAttackResultsCutScene), 0xC100, 0, sub_8089BB0);
t = TaskCreate(Task_AnimateResults, sizeof(TimeAttackResultsCutScene), 0xC100, 0, TaskDestructor_TimeAttackResults);
resultsCutScene = TASK_DATA(t);
fade = &resultsCutScene->unk0;
fade = &resultsCutScene->base.fade;
resultsCutScene->unk168 = 0;
resultsCutScene->unk2D4 = 0x800;
resultsCutScene->unk2D6 = 0x4000;
resultsCutScene->base.counter = 0;
resultsCutScene->medalSpinSpeed = Q(8);
resultsCutScene->medalSpin = Q(64);
fade->window = 0;
fade->flags = 1;
@@ -69,15 +69,14 @@ u32 CreateTimeAttackResults(u32 finishTime)
fade->bldCnt = 0x3FFF;
fade->bldAlpha = 0;
resultsCutScene->unk15C = finishTime;
resultsCutScene->base.timeBonusScore = finishTime;
if (finishTime < MAX_COURSE_TIME) {
s16 temp = finishTime % 60;
u32 temp2 = finishTime - temp;
resultsCutScene->unk15C = temp2;
millis = gMillisUnpackTable[temp][0] * 10;
millis += gMillisUnpackTable[temp][1];
seconds = temp2 / 60;
s16 millisIndex = finishTime % 60;
resultsCutScene->base.timeBonusScore = finishTime - millisIndex;
millis = gMillisUnpackTable[millisIndex][0] * 10;
millis += gMillisUnpackTable[millisIndex][1];
seconds = resultsCutScene->base.timeBonusScore / 60;
minutes = seconds / 60;
seconds += minutes * -60;
} else {
@@ -93,7 +92,7 @@ u32 CreateTimeAttackResults(u32 finishTime)
resultsCutScene->unk175 = UNITS_DIGIT(millis);
for (i = 0; i < 7; i++) {
s = &resultsCutScene->unk178[i];
s = &resultsCutScene->digits[i];
s->x = i * 14 + ((DISPLAY_WIDTH / 2) - 48);
s->y = (DISPLAY_HEIGHT / 2) + 8;
s->graphics.dest = VramMalloc(4);
@@ -110,21 +109,21 @@ u32 CreateTimeAttackResults(u32 finishTime)
s->frameFlags = 0;
}
resultsCutScene->unk178[0].variant += resultsCutScene->unk171;
resultsCutScene->unk178[1].variant = DELIMINATOR_DIGIT;
resultsCutScene->unk178[2].variant += resultsCutScene->unk172;
resultsCutScene->unk178[3].variant += resultsCutScene->unk173;
resultsCutScene->unk178[4].variant = DELIMINATOR_DIGIT;
resultsCutScene->unk178[5].variant += resultsCutScene->unk174;
resultsCutScene->unk178[6].variant += resultsCutScene->unk175;
resultsCutScene->digits[0].variant += resultsCutScene->unk171;
resultsCutScene->digits[1].variant = DELIMINATOR_DIGIT;
resultsCutScene->digits[2].variant += resultsCutScene->unk172;
resultsCutScene->digits[3].variant += resultsCutScene->unk173;
resultsCutScene->digits[4].variant = DELIMINATOR_DIGIT;
resultsCutScene->digits[5].variant += resultsCutScene->unk174;
resultsCutScene->digits[6].variant += resultsCutScene->unk175;
for (i = 0; i < 7; i++) {
UpdateSpriteAnimation(&resultsCutScene->unk178[i]);
UpdateSpriteAnimation(&resultsCutScene->digits[i]);
}
resultsCutScene->unk2D8 = sub_80899B8(finishTime);
resultsCutScene->rank = StoreRecord(finishTime);
s = &resultsCutScene->unk12C;
s = &resultsCutScene->base.separator;
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2);
s->graphics.dest = VramMalloc(4);
@@ -141,12 +140,12 @@ u32 CreateTimeAttackResults(u32 finishTime)
s->frameFlags = 0;
UpdateSpriteAnimation(s);
s = &resultsCutScene->unkC[0];
s = &resultsCutScene->base.title[0];
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2) - 39;
s->graphics.dest = VramMalloc(sAnimsGotThroughCharacterNames[gSelectedCharacter][0]);
s->graphics.anim = sAnimsGotThroughCharacterNames[gSelectedCharacter][1];
s->variant = sAnimsGotThroughCharacterNames[gSelectedCharacter][2];
s->graphics.dest = VramMalloc(gAnimsGotThroughCharacterNames[gSelectedCharacter][0]);
s->graphics.anim = gAnimsGotThroughCharacterNames[gSelectedCharacter][1];
s->variant = gAnimsGotThroughCharacterNames[gSelectedCharacter][2];
s->oamFlags = SPRITE_OAM_ORDER(4);
s->graphics.size = 0;
s->animCursor = 0;
@@ -160,12 +159,12 @@ u32 CreateTimeAttackResults(u32 finishTime)
isBossLevel = ACT_INDEX(gCurrentLevel) >> 1;
s = &resultsCutScene->unkC[1];
s = &resultsCutScene->base.title[1];
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2) - 31;
s->graphics.dest = VramMalloc(sStageResultsHeadlineTexts[isBossLevel][0]);
s->graphics.anim = sStageResultsHeadlineTexts[isBossLevel][1];
s->variant = sStageResultsHeadlineTexts[isBossLevel][2];
s->graphics.dest = VramMalloc(gStageResultsHeadlineTexts[isBossLevel][0]);
s->graphics.anim = gStageResultsHeadlineTexts[isBossLevel][1];
s->variant = gStageResultsHeadlineTexts[isBossLevel][2];
s->oamFlags = SPRITE_OAM_ORDER(4);
s->graphics.size = 0;
s->animCursor = 0;
@@ -183,12 +182,12 @@ u32 CreateTimeAttackResults(u32 finishTime)
} else {
level = gCurrentLevel & 1;
}
s = &resultsCutScene->unkC[2];
s = &resultsCutScene->base.title[2];
s->x = DISPLAY_WIDTH + 16;
s->y = (DISPLAY_HEIGHT / 2) - 31;
s->graphics.dest = VramMalloc(sAnimsGotThroughZoneAndActNames[level][0]);
s->graphics.anim = sAnimsGotThroughZoneAndActNames[level][1];
s->variant = sAnimsGotThroughZoneAndActNames[level][2];
s->graphics.dest = VramMalloc(gAnimsGotThroughZoneAndActNames[level][0]);
s->graphics.anim = gAnimsGotThroughZoneAndActNames[level][1];
s->variant = gAnimsGotThroughZoneAndActNames[level][2];
s->oamFlags = SPRITE_OAM_ORDER(4);
s->graphics.size = 0;
s->animCursor = 0;
@@ -200,7 +199,7 @@ u32 CreateTimeAttackResults(u32 finishTime)
s->frameFlags = 0;
UpdateSpriteAnimation(s);
s = &resultsCutScene->unk9C[0];
s = &resultsCutScene->base.sprScores[0];
s->x = (DISPLAY_WIDTH / 2) - 80;
s->y = (DISPLAY_HEIGHT / 2) + 10;
s->graphics.dest = VramMalloc(8);
@@ -217,13 +216,13 @@ u32 CreateTimeAttackResults(u32 finishTime)
s->frameFlags = 0;
UpdateSpriteAnimation(s);
s = &resultsCutScene->unk9C[1];
s = &resultsCutScene->base.sprScores[1];
s->x = (DISPLAY_WIDTH / 2);
s->y = (DISPLAY_HEIGHT / 2) + 40;
s->graphics.dest = VramMalloc(16);
s->graphics.anim = SA2_ANIM_TIME_ATTACK_DIGITS;
if (resultsCutScene->unk2D8 != 0) {
s->variant = resultsCutScene->unk2D8 + SA2_ANIM_VARIANT_TA_DIGITS_PLATE_0_BRONZE;
if (resultsCutScene->rank != 0) {
s->variant = resultsCutScene->rank + SA2_ANIM_VARIANT_TA_DIGITS_PLATE_0_BRONZE;
} else {
s->variant = SA2_ANIM_VARIANT_TA_DIGITS_PLATE_1_GOLD;
}
@@ -244,10 +243,10 @@ u32 CreateTimeAttackResults(u32 finishTime)
resultsCutScene->transform.y = (DISPLAY_HEIGHT / 2) + 40;
resultsCutScene->transform.rotation = 0;
s = &resultsCutScene->unk9C[2];
s = &resultsCutScene->base.sprScores[2];
s->x = (DISPLAY_WIDTH / 2);
s->y = (DISPLAY_HEIGHT / 2) + 68;
s->graphics.dest = VramMalloc(0x16);
s->graphics.dest = VramMalloc(22);
s->graphics.anim = SA2_ANIM_TA_RECORD;
s->variant = 0;
s->oamFlags = SPRITE_OAM_ORDER(4);
@@ -267,7 +266,7 @@ u32 CreateTimeAttackResults(u32 finishTime)
gPlayer.charState = CHARSTATE_ACT_CLEAR_TIME_ATTACK_OR_BOSS;
}
if (resultsCutScene->unk2D8 == 1) {
if (resultsCutScene->rank == 1) {
m4aSongNumStart(MUS_TIME_ATTACK_3);
} else {
m4aSongNumStart(MUS_TIME_ATTACK_2);
@@ -276,23 +275,19 @@ u32 CreateTimeAttackResults(u32 finishTime)
return 600;
}
const s8 gUnknown_080E05C4[] = {
3, 2, 1, 0, 0, -1, -2, -3, -4, -4, -3, -2, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
void sub_80897E8(void)
static void AnimateResults(void)
{
struct TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(gCurTask);
TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(gCurTask);
Sprite *s;
u32 unk168 = resultsCutScene->unk168;
u32 frame = resultsCutScene->base.counter;
u32 i;
if (unk168 < 24) {
if (frame < 24) {
s32 temp;
s = &resultsCutScene->unk12C;
s = &resultsCutScene->base.separator;
temp = 0;
if (unk168 <= 16) {
temp = ((16 - unk168) * 24);
if (frame <= 16) {
temp = ((16 - frame) * 24);
}
for (i = 0; i < ((DISPLAY_WIDTH + 32) / 32); i++) {
@@ -300,69 +295,71 @@ void sub_80897E8(void)
DisplaySprite(s);
}
} else {
s = &resultsCutScene->unk12C;
s = &resultsCutScene->base.separator;
for (i = 0; i < ((DISPLAY_WIDTH + 32) / 32); i++) {
s->x = (i * 32); // TODO: Does (i * 32) match?
s->x = i * 32;
DisplaySprite(s);
}
}
if (unk168 > 28) {
s32 temp = ((gCurrentLevel & ACT_BOSS) && !(gCurrentLevel & ACT_2)) ? 2 : 3;
if (frame > 28) {
s32 numElements = ((gCurrentLevel & ACT_BOSS) && !(gCurrentLevel & ACT_2)) ? 2 : 3;
for (i = 0; i < temp; i++) {
s = &resultsCutScene->unkC[i];
for (i = 0; i < numElements; i++) {
s = &resultsCutScene->base.title[i];
DisplaySprite(s);
}
}
if (unk168 > 89) {
s = &resultsCutScene->unk9C[0];
if ((unk168 - 90) < 11) {
s->x = (((DISPLAY_WIDTH / 2) - 20) - unk168) * 16 + 40;
if (frame >= 90) {
// TIME text
s = &resultsCutScene->base.sprScores[0];
if ((frame - 90) <= 10) {
s->x = (100 - frame) * 16 + ((DISPLAY_WIDTH / 2) - 80);
}
DisplaySprite(s);
}
if (unk168 > 119) {
s32 temp = (unk168 - 127);
if (temp > 16) {
if (resultsCutScene->unk2D8) {
s = &resultsCutScene->unk9C[1];
resultsCutScene->transform.width = gSineTable[(((u16)resultsCutScene->unk2D6 >> 8) * 4) + 0x100] >> 6;
resultsCutScene->unk2D6 += resultsCutScene->unk2D4;
if (frame >= 120) {
s32 dFrames = (frame - 127);
if (dFrames > 16) {
if (resultsCutScene->rank > 0) {
// medal
s = &resultsCutScene->base.sprScores[1];
resultsCutScene->transform.width = COS_24_8(I((u16)resultsCutScene->medalSpin) * 4);
resultsCutScene->medalSpin += resultsCutScene->medalSpinSpeed;
if (resultsCutScene->unk2D6 == 0) {
if (resultsCutScene->unk2D4 == 0x800) {
resultsCutScene->unk2D4 = 0x400;
if (resultsCutScene->medalSpin == 0) {
if (resultsCutScene->medalSpinSpeed == Q(8)) {
resultsCutScene->medalSpinSpeed = Q(4);
} else {
resultsCutScene->unk2D4 = 0;
resultsCutScene->medalSpinSpeed = 0;
}
}
if (resultsCutScene->transform.width == 0) {
resultsCutScene->transform.width = 0x10;
resultsCutScene->transform.width = Q(0.0625);
}
TransformSprite(s, &resultsCutScene->transform);
DisplaySprite(s);
}
if (resultsCutScene->unk2D8 == 1 && (unk168 & 0x20)) {
s = &resultsCutScene->unk9C[2];
// Flash the new record text
if (resultsCutScene->rank == 1 && (frame & 32)) {
s = &resultsCutScene->base.sprScores[2];
DisplaySprite(s);
}
}
for (i = 0; i < 7; i++) {
s32 index = (unk168 - 120) - i;
s32 index = (frame - 120) - i;
if (index < 0) {
break;
}
s = &resultsCutScene->unk178[i];
if (index < 0x14U) {
s->y += gUnknown_080E05C4[index];
s = &resultsCutScene->digits[i];
if (index < ARRAY_COUNT(sTimeResultDigitAnim)) {
s->y += sTimeResultDigitAnim[index];
}
DisplaySprite(s);
@@ -370,8 +367,7 @@ void sub_80897E8(void)
}
}
// StoreRecord
u8 sub_80899B8(u32 finishTime)
static u8 StoreRecord(u32 finishTime)
{
u32 existingRecords[3];
u8 i;
@@ -379,7 +375,7 @@ u8 sub_80899B8(u32 finishTime)
u8 character = gSelectedCharacter;
u8 zone = gCurrentLevel >> 2;
s32 currentLevel = gCurrentLevel;
u8 act = currentLevel - currentLevel / (ACTS_PER_ZONE + 1) * (ACTS_PER_ZONE + 1);
u8 act = currentLevel - (currentLevel / (ACTS_PER_ZONE + 1)) * (ACTS_PER_ZONE + 1);
u8 rank = 0;
for (i = 0; i < 3; i++) {
@@ -401,28 +397,24 @@ u8 sub_80899B8(u32 finishTime)
return rank;
}
void sub_80310F0(void);
void sub_8031314(void);
void sub_8089B40(void);
void sub_8089AEC(void)
static void Task_AnimateResults(void)
{
struct TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(gCurTask);
u32 unk168 = resultsCutScene->unk168;
resultsCutScene->unk168 = ++unk168;
sub_80310F0();
sub_8031314();
sub_80897E8();
TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(gCurTask);
u32 frame = resultsCutScene->base.counter;
resultsCutScene->base.counter = ++frame;
StageResults_AnimateSeparator();
StageResults_AnimateTitle();
AnimateResults();
if (((unk168 > 160) && (gPressedKeys & (A_BUTTON | START_BUTTON))) || (unk168 > 600)) {
gCurTask->main = sub_8089B40;
if (((frame > 160) && (gPressedKeys & (A_BUTTON | START_BUTTON))) || (frame > 600)) {
gCurTask->main = Task_HandleExit;
}
}
void sub_8089B40(void)
static void Task_HandleExit(void)
{
struct TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(gCurTask);
if (UpdateScreenFade(&resultsCutScene->unk0) == SCREEN_FADE_COMPLETE) {
TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(gCurTask);
if (UpdateScreenFade(&resultsCutScene->base.fade) == SCREEN_FADE_COMPLETE) {
WriteSaveGame();
TasksDestroyAll();
gUnknown_03002AE4 = gUnknown_0300287C;
@@ -432,28 +424,28 @@ void sub_8089B40(void)
return;
}
sub_80310F0();
sub_8031314();
sub_80897E8();
StageResults_AnimateSeparator();
StageResults_AnimateTitle();
AnimateResults();
}
void sub_8089BB0(struct Task *t)
static void TaskDestructor_TimeAttackResults(struct Task *t)
{
u32 i;
struct TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(t);
VramFree(resultsCutScene->unk12C.graphics.dest);
TimeAttackResultsCutScene *resultsCutScene = TASK_DATA(t);
VramFree(resultsCutScene->base.separator.graphics.dest);
for (i = 0; i < 3; i++) {
VramFree(resultsCutScene->unkC[i].graphics.dest);
VramFree(resultsCutScene->base.title[i].graphics.dest);
}
for (i = 0; i < 3; i++) {
VramFree(resultsCutScene->unk9C[i].graphics.dest);
VramFree(resultsCutScene->base.sprScores[i].graphics.dest);
}
for (i = 0; i < 7; i++) {
VramFree(resultsCutScene->unk178[i].graphics.dest);
VramFree(resultsCutScene->digits[i].graphics.dest);
}
gStageFlags &= ~0x200;
gStageFlags &= ~STAGE_FLAG__TURN_OFF_TIMER;
}
+1 -1
View File
@@ -315,7 +315,7 @@ void CreateTitleScreen(void)
// Goes from 16384 -> 102 in an log curve \_
titleScreen->wavesTranslationX[i] = val;
// Goes from 4 -> 642 in steps of 4 but becomes
// a slightly more jagged line as i in creases
// a slightly more jagged line as i increases
titleScreen->wavesTranslationY[i] = Div(65536, val);
};