mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Merge branch 'master' into partial-match/func_800B82B4
This commit is contained in:
@@ -7,9 +7,9 @@ All versions are supported, and the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fd
|
||||
<!-- README_SCORE_SUMMARY_BEGIN -->
|
||||
As of April 14, 2025, this is our current score:
|
||||
|
||||
    Decomp progress: 78.88%
|
||||
    Decomp progress: 78.93%
|
||||
|
||||
    Documentation progress: 49.86%
|
||||
    Documentation progress: 50.05%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
|
||||
---
|
||||
@@ -121,10 +121,10 @@ As of April 14, 2025, this is our current score:
|
||||
```
|
||||
===================================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
-------------- 78.88% Complete (81.70% NON_MATCHING) --------------
|
||||
# Decompiled functions: 1850
|
||||
# GLOBAL_ASM remaining: 101
|
||||
# NON_MATCHING functions: 13
|
||||
-------------- 78.93% Complete (81.50% NON_MATCHING) --------------
|
||||
# Decompiled functions: 1851
|
||||
# GLOBAL_ASM remaining: 100
|
||||
# NON_MATCHING functions: 12
|
||||
# NON_EQUIVALENT WIP functions: 29
|
||||
--------------------------- Game Status ---------------------------
|
||||
Balloons: 38/47, Keys: 4/4, Trophies: 3/5
|
||||
@@ -133,14 +133,14 @@ As of April 14, 2025, this is our current score:
|
||||
We are collecting silver coins in Haunted Woods. (0/8 silver coins)
|
||||
===================================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
------------------------- 49.86% Complete -------------------------
|
||||
# Documented functions: 1089
|
||||
# Undocumented remaining: 565
|
||||
------------------------- 50.05% Complete -------------------------
|
||||
# Documented functions: 1090
|
||||
# Undocumented remaining: 564
|
||||
--------------------------- Game Status ---------------------------
|
||||
Balloons: 24/47, Keys: 3/4, Trophies: 2/5
|
||||
Balloons: 25/47, Keys: 3/4, Trophies: 2/5
|
||||
T.T. Amulets: 2/4, Wizpig Amulets: 2/4
|
||||
-------------------------------------------------------------------
|
||||
We are racing in Pirate Lagoon. (Lap 3/3)
|
||||
We are racing in Treasure Caves. (Lap 1/3)
|
||||
===================================================================
|
||||
```
|
||||
<!-- README_SCORE_END -->
|
||||
|
||||
+2
-1
@@ -1,4 +1,5 @@
|
||||
splat64[mips]==0.32.3
|
||||
splat64[mips]==0.33.2
|
||||
spimdisasm==1.33.0
|
||||
pycparser>=2.22
|
||||
colorama>=0.4.6
|
||||
watchdog>=6.0.0
|
||||
|
||||
+2
-1
@@ -8,6 +8,7 @@
|
||||
#include "audio_internal.h"
|
||||
#include "audiomgr.h"
|
||||
#include "audiosfx.h"
|
||||
#include "audio_spatial.h"
|
||||
#include "sched.h"
|
||||
#include "libultra/src/audio/seqchannel.h"
|
||||
|
||||
@@ -842,7 +843,7 @@ void sound_play_spatial(u16 soundID, f32 x, f32 y, f32 z, s32 **soundMask) {
|
||||
sound_play(soundID, (s32 *) soundMask);
|
||||
|
||||
if (*soundMask != NULL) {
|
||||
func_80009B7C(*soundMask, x, y, z);
|
||||
audioline_reverb(*soundMask, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -122,6 +122,5 @@ void sound_volume_set_relative(u16 soundID, void *soundState, u8 volume);
|
||||
void music_sequence_init(ALCSPlayer *seqp, void *sequence, u8 *seqID, ALCSeq *seq);
|
||||
void sound_play(u16 soundID, s32* soundMask);
|
||||
f32 music_animation_fraction(void);
|
||||
void func_80009B7C(s32 *soundState, f32 x, f32 y, f32 z);
|
||||
|
||||
#endif
|
||||
|
||||
+34
-42
@@ -115,7 +115,7 @@ void func_80008174(void) {
|
||||
}
|
||||
}
|
||||
gUsedMasks = 0;
|
||||
|
||||
|
||||
// var_s1 = D_80119C58;
|
||||
// do {
|
||||
// var_s1->soundID = 0;
|
||||
@@ -177,7 +177,7 @@ void func_80008174(void) {
|
||||
// var_a3->unkC = -100000.0f;;
|
||||
// var_a3->unk8 = -100000.0f;
|
||||
// var_a3->unk4 = -100000.0f;
|
||||
|
||||
|
||||
// var_v0_2 = var_a3->unk20;
|
||||
// for (j = 3; j != 15; j++, j+= 3) {// this should be j+=4 but has to be split up to match?
|
||||
// // 3, 7, 11
|
||||
@@ -195,7 +195,7 @@ void func_80008174(void) {
|
||||
// var_v0_2[-1].unk4 = -100000.0f;
|
||||
// var_v0_2[-1].unk8 = -100000.0f;
|
||||
// };
|
||||
|
||||
|
||||
// var_a3++;
|
||||
// var_a1++;
|
||||
// var_a2++;
|
||||
@@ -455,39 +455,38 @@ s32 func_80009AB4(u8 arg0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
u8 func_80009D6C(unk8011A6D8 *, f32, f32, f32);
|
||||
// audioline_reverb
|
||||
void func_80009B7C(s32 *soundState, f32 x, f32 y, f32 z) {
|
||||
void audioline_reverb(s32 *soundState, f32 x, f32 y, f32 z) {
|
||||
s32 i;
|
||||
s32 j;
|
||||
s32 levelSegmentIndex;
|
||||
s32 numOfYVals;
|
||||
s32 distBetween;
|
||||
unk8011A6D8 *temp;
|
||||
s32 k;
|
||||
f32 outX;
|
||||
f32 outY;
|
||||
f32 outZ;
|
||||
u8 temp_v0_4;
|
||||
s32 distBetween;
|
||||
s32 maxDist;
|
||||
s32 levelSegmentIndex;
|
||||
s32 numOfYVals;
|
||||
u8 volume;
|
||||
s32 var_s6;
|
||||
s32 i;
|
||||
s32 k;
|
||||
unk8011A6D8 *temp;
|
||||
f32 yVals[9]; // Not sure of the number needed
|
||||
u8 temp_v0_4;
|
||||
f32 *coords;
|
||||
f32 yVals[10];
|
||||
|
||||
levelSegmentIndex = get_level_segment_index_from_position(x, y, z);
|
||||
volume = 0;
|
||||
var_s6 = 400;
|
||||
maxDist = 400;
|
||||
for (i = 0; i < ARRAY_COUNT(D_8011A6D8); i++) {
|
||||
temp = &D_8011A6D8[i];
|
||||
if (temp->unk0.unk0_02 != 0) {
|
||||
if (func_80009AB4(i) != 0) {
|
||||
coords = temp->unk4.unk4_floats;
|
||||
for (j = 0; j < temp->unkB8; j++) {
|
||||
distBetween = audioline_distance(x, y, z, &temp->unk4.unk4_vec[j], &outX, &outY, &outZ);
|
||||
if (distBetween < var_s6) {
|
||||
distBetween = audioline_distance(x, y, z, coords, &outX, &outY, &outZ);
|
||||
if (distBetween < maxDist) {
|
||||
numOfYVals = func_8002BAB0(levelSegmentIndex, x, z, yVals);
|
||||
for (k = 0; k < numOfYVals; k++) {
|
||||
if (y < yVals[k]) {
|
||||
var_s6 = distBetween;
|
||||
maxDist = distBetween;
|
||||
temp_v0_4 = func_80009D6C(&D_8011A6D8[i], outX, outY, outZ);
|
||||
if (volume < temp_v0_4) {
|
||||
volume = temp_v0_4;
|
||||
@@ -495,6 +494,7 @@ void func_80009B7C(s32 *soundState, f32 x, f32 y, f32 z) {
|
||||
}
|
||||
}
|
||||
}
|
||||
coords += 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -503,44 +503,36 @@ void func_80009B7C(s32 *soundState, f32 x, f32 y, f32 z) {
|
||||
sound_event_update((s32) soundState, AL_SNDP_FX_EVT, (u32) volume);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/audio_spatial/func_80009B7C.s")
|
||||
#endif
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/audio_spatial/func_80009D6C.s")
|
||||
|
||||
void debug_render_audio_effects(Gfx **arg0, Vertex **arg1, Triangle **arg2) {
|
||||
void debug_render_audio_effects(Gfx **dList, Vertex **verts, Triangle **tris) {
|
||||
s32 i, j;
|
||||
f32 *var_s1;
|
||||
f32 *coords;
|
||||
unk80119C58 *var_s2;
|
||||
unk8011A6D8 *var_s2_2;
|
||||
|
||||
i = 0;
|
||||
do {
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_80119C58); i++) {
|
||||
var_s2 = &D_80119C58[i];
|
||||
var_s1 = var_s2->unk4.unk4_floats;
|
||||
coords = var_s2->unk4.unk4_floats;
|
||||
if (D_80119C58[i].soundID != 0) {
|
||||
for (j = 0; j < var_s2->unk17C; j++) {
|
||||
debug_render_line(arg0, arg1, arg2, var_s1, 0xFF, 0xFF, 0);
|
||||
var_s1 += 3;
|
||||
debug_render_line(dList, verts, tris, coords, 255, 255, 0);
|
||||
coords += 3;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
} while (ARRAY_COUNT(D_80119C58) > i);
|
||||
}
|
||||
|
||||
i = 0;
|
||||
do {
|
||||
for (i = 0; i < ARRAY_COUNT(D_8011A6D8); i++) {
|
||||
var_s2_2 = &D_8011A6D8[i];
|
||||
var_s1 = var_s2_2->unk4.unk4_floats;
|
||||
coords = var_s2_2->unk4.unk4_floats;
|
||||
if (D_8011A6D8[i].unk0.unk0_02 != 0) {
|
||||
for (j = 0; j < var_s2_2->unkB8; j++) {
|
||||
debug_render_line(arg0, arg1, arg2, var_s1, 0xFF, 0, 0xFF);
|
||||
var_s1 += 3;
|
||||
for (j = 0; j < var_s2_2->unkB8; j++) {
|
||||
debug_render_line(dList, verts, tris, coords, 255, 0, 255);
|
||||
coords += 3;
|
||||
}
|
||||
}
|
||||
|
||||
i++;
|
||||
} while (i != ARRAY_COUNT(D_8011A6D8));
|
||||
}
|
||||
}
|
||||
|
||||
void func_8000A2E8(s32 arg0) {
|
||||
|
||||
@@ -88,10 +88,12 @@ void update_spatial_audio_position(SoundMask *arg0, f32 x, f32 y, f32 z);
|
||||
s32 func_80009AB4(u8 arg0);
|
||||
void audioline_init(void);
|
||||
void audioline_reverb_create(f32, f32, f32, u8, u8, u8);
|
||||
void audioline_reverb(s32 *soundState, f32 x, f32 y, f32 z);
|
||||
|
||||
s32 audioline_distance(f32 inX, f32 inY, f32 inZ, f32 coords[6], f32 *outX, f32 *outY, f32 *outZ);
|
||||
void func_80008174(void); // Non Matching
|
||||
void func_80008438(Object **arg0, s32 numRacers, s32 updateRate); // Non Matching
|
||||
void func_80006FC8(Object **objs, s32 numRacers, ObjectSegment *segment, u8 arg3, s32 updateRate); // Non Matching
|
||||
u8 func_80009D6C(unk8011A6D8 *, f32, f32, f32);
|
||||
|
||||
#endif
|
||||
|
||||
+8
-8
@@ -340,8 +340,8 @@ void func_80005254(Object *obj, u32 buttonsPressed, u32 buttonsHeld, s32 updateR
|
||||
sound_event_update((s32) gRacerSound->unkA8, AL_SNDP_VOL_EVT, 0);
|
||||
} else {
|
||||
sound_event_update((s32) gRacerSound->unkA8, AL_SNDP_VOL_EVT, gRacerSound->unkAC << 8);
|
||||
func_80009B7C((s32 *) gRacerSound->unkA8, obj->segment.trans.x_position, obj->segment.trans.y_position,
|
||||
obj->segment.trans.z_position);
|
||||
audioline_reverb((s32 *) gRacerSound->unkA8, obj->segment.trans.x_position, obj->segment.trans.y_position,
|
||||
obj->segment.trans.z_position);
|
||||
}
|
||||
}
|
||||
gRacerSound->unkA0 = var_s0;
|
||||
@@ -729,9 +729,9 @@ void func_80006FC8(Object **objs, s32 numRacers, ObjectSegment *segment, u8 arg3
|
||||
temp_f0_3 = gRacerSound->unk38 / 100.0f;
|
||||
sp8C = temp_f0_3 + ((((f32) gRacerSound->unk39 / 100.0f) - temp_f0_3) * temp_f20_2);
|
||||
if (gRacerSound->unk50 != NULL) {
|
||||
func_80009B7C((s32 *) gRacerSound->unk50, objs[loopCount1]->segment.trans.x_position,
|
||||
objs[loopCount1]->segment.trans.y_position,
|
||||
objs[loopCount1]->segment.trans.z_position);
|
||||
audioline_reverb((s32 *) gRacerSound->unk50, objs[loopCount1]->segment.trans.x_position,
|
||||
objs[loopCount1]->segment.trans.y_position,
|
||||
objs[loopCount1]->segment.trans.z_position);
|
||||
sound_event_update((s32) gRacerSound->unk50, AL_SNDP_VOL_EVT, temp_s3 << 8);
|
||||
sound_event_update((s32) gRacerSound->unk50, AL_SNDP_PITCH_EVT, *((u32 *) &sp8C));
|
||||
func_80004604((ALSoundState *) gRacerSound->unk50, 80);
|
||||
@@ -766,7 +766,7 @@ void func_80006FC8(Object **objs, s32 numRacers, ObjectSegment *segment, u8 arg3
|
||||
func_80001F14(gRacerSound->unk0[loopCount2], (s32 *) &gRacerSound->unk48[loopCount2]);
|
||||
}
|
||||
if (gRacerSound->unk48[loopCount2] != NULL) {
|
||||
func_80009B7C(
|
||||
audioline_reverb(
|
||||
(s32 *) gRacerSound->unk48[loopCount2], objs[loopCount1]->segment.trans.x_position,
|
||||
objs[loopCount1]->segment.trans.y_position, objs[loopCount1]->segment.trans.z_position);
|
||||
sound_event_update((s32) gRacerSound->unk48[loopCount2], AL_SNDP_VOL_EVT, temp_s3 << 8);
|
||||
@@ -910,8 +910,8 @@ void func_80006FC8(Object **objs, s32 numRacers, ObjectSegment *segment, u8 arg3
|
||||
func_80001F14(temp->unk0[0], (s32 *) &temp->unk48[0]);
|
||||
}
|
||||
if (temp->unk48[0] != NULL) {
|
||||
func_80009B7C((s32 *) temp->unk48[0], temp->racerPos.x, temp->racerPos.y,
|
||||
temp->racerPos.z);
|
||||
audioline_reverb((s32 *) temp->unk48[0], temp->racerPos.x, temp->racerPos.y,
|
||||
temp->racerPos.z);
|
||||
sound_event_update((s32) temp->unk48[0], AL_SNDP_VOL_EVT, temp->unk88 << 8);
|
||||
sound_event_update((s32) temp->unk48[0], AL_SNDP_PITCH_EVT, *((u32 *) &temp->unk8C));
|
||||
if (arg3 != 1) {
|
||||
|
||||
+30
-30
@@ -113,9 +113,9 @@ typedef struct Unk8012C2D4_JP {
|
||||
Gfx *dList;
|
||||
} Unk8012C2D4_JP;
|
||||
|
||||
FontData_JP *D_8012C2A4_EE5E4;
|
||||
FontJpSpacing *D_8012C2A8_EE5E8[4]; // 4 tables for spacing in different fonts?
|
||||
s32 D_8012C2B8_EE5F8;
|
||||
FontData_JP *D_8012C2A4_EE5E4; // Official Name: dxTable
|
||||
FontJpSpacing *D_8012C2A8_EE5E8[NUMBER_OF_JP_FONTS]; // 4 tables for spacing in different fonts?
|
||||
s32 fontInUse; // Official Name: fontInUse
|
||||
Unk8012C2D4_JP (*D_8012C2BC_EE5FC)[128];
|
||||
JpCharHeader (*D_8012C2C0_EE600)[18];
|
||||
Gfx *D_8012C2C4_EE604;
|
||||
@@ -255,7 +255,7 @@ void unload_font(s32 fontID) {
|
||||
*/
|
||||
void set_text_font(s32 fontID) {
|
||||
#if REGION == REGION_JP
|
||||
gDialogueBoxBackground[0].font = D_8012C2B8_EE5F8 = fontID;
|
||||
gDialogueBoxBackground[0].font = fontInUse = fontID;
|
||||
#else
|
||||
if (fontID < gNumberOfFonts) {
|
||||
gDialogueBoxBackground[0].font = fontID;
|
||||
@@ -550,13 +550,13 @@ void render_text_string(Gfx **dList, DialogueBoxBackground *box, char *text, Ali
|
||||
return;
|
||||
}
|
||||
|
||||
func_800C7864_C8464(text, otherText);
|
||||
prevFont = D_8012C2B8_EE5F8;
|
||||
D_8012C2B8_EE5F8 = box->font;
|
||||
fontConvertString(text, otherText);
|
||||
prevFont = fontInUse;
|
||||
fontInUse = box->font;
|
||||
xpos = box->xpos;
|
||||
ypos = box->ypos;
|
||||
|
||||
fontData = (FontData_JP *) &D_8012C2A4_EE5E4[D_8012C2B8_EE5F8];
|
||||
fontData = (FontData_JP *) &D_8012C2A4_EE5E4[fontInUse];
|
||||
gSPDisplayList((*dList)++, dDialogueBoxBegin);
|
||||
if (box != gDialogueBoxBackground) {
|
||||
scisOffset = (((box->y2 - box->y1) + 1) / (f32) 2) * scisScale;
|
||||
@@ -642,7 +642,7 @@ void render_text_string(Gfx **dList, DialogueBoxBackground *box, char *text, Ali
|
||||
uly = box->y1 + ypos;
|
||||
lrx = ulx + fontData->x;
|
||||
lry = uly + fontData->y;
|
||||
charSpace = D_8012C2A8_EE5E8[D_8012C2B8_EE5F8]->spacing[jpCharValue];
|
||||
charSpace = D_8012C2A8_EE5E8[fontInUse]->spacing[jpCharValue];
|
||||
if ((lrx > 0) && (lry > 0) && (ulx < box->x2) && (uly < box->y2)) {
|
||||
someIndexForJpChar =
|
||||
func_800C7744_C8344(dList, jpCharValue, &textureS, &textureT, &textureS2, &textureT2);
|
||||
@@ -698,7 +698,7 @@ void render_text_string(Gfx **dList, DialogueBoxBackground *box, char *text, Ali
|
||||
}
|
||||
box->xpos = xpos - box->textOffsetX;
|
||||
box->ypos = ypos - box->textOffsetY;
|
||||
D_8012C2B8_EE5F8 = prevFont; // Put previous font index back.
|
||||
fontInUse = prevFont; // Put previous font index back.
|
||||
if (box != gDialogueBoxBackground) {
|
||||
viewport_scissor(dList);
|
||||
}
|
||||
@@ -1306,8 +1306,7 @@ void parse_string_with_number(char *input, char *output, s32 number) {
|
||||
void parse_string_with_number(char *input, char *output, s32 number) {
|
||||
char currentChar;
|
||||
|
||||
currentChar = *input++;
|
||||
while (currentChar) {
|
||||
while ((currentChar = *input++)) {
|
||||
if (currentChar & 0x80) {
|
||||
char nextChar = *input++;
|
||||
if (nextChar == 0xE) {
|
||||
@@ -1321,8 +1320,6 @@ void parse_string_with_number(char *input, char *output, s32 number) {
|
||||
} else {
|
||||
*output++ = currentChar;
|
||||
}
|
||||
currentChar = *input;
|
||||
input++;
|
||||
}
|
||||
*output = '\0'; // null terminator
|
||||
}
|
||||
@@ -1366,7 +1363,7 @@ void func_800C6464_C7064(void) {
|
||||
}
|
||||
|
||||
mempool_free(jpFontData);
|
||||
D_8012C2B8_EE5F8 = 0;
|
||||
fontInUse = 0;
|
||||
}
|
||||
|
||||
void func_800C663C_C723C(void) {
|
||||
@@ -1428,8 +1425,8 @@ s32 func_800C68CC_C74CC(u16 arg0) {
|
||||
u16 glyphIndex;
|
||||
Unk8012C2D4_JP *asset;
|
||||
|
||||
glyphIndex = ((D_8012C2B8_EE5F8 << 12) | (arg0 & 0xFFF));
|
||||
var_a3 = (D_8012C2A4_EE5E4[D_8012C2B8_EE5F8].bytesPerCharacter + 0x11F) / 0x120;
|
||||
glyphIndex = ((fontInUse << 12) | (arg0 & 0xFFF));
|
||||
var_a3 = (D_8012C2A4_EE5E4[fontInUse].bytesPerCharacter + 0x11F) / 0x120;
|
||||
D_8012C2BC_EE5FC = D_8012C2C8_EE608;
|
||||
D_8012C2C0_EE600 = D_8012C2CC_EE60C;
|
||||
curIndex = -1;
|
||||
@@ -1477,18 +1474,21 @@ s32 func_800C68CC_C74CC(u16 arg0) {
|
||||
}
|
||||
asset = &D_8012C2C0_EE600[curIndex];
|
||||
load_asset_to_address(ASSET_BINARY_46, (u32) asset,
|
||||
D_8012C2A4_EE5E4[D_8012C2B8_EE5F8].offsetToData +
|
||||
(D_8012C2A4_EE5E4[D_8012C2B8_EE5F8].bytesPerCharacter * arg0),
|
||||
D_8012C2A4_EE5E4[D_8012C2B8_EE5F8].bytesPerCharacter);
|
||||
func_800C6DD4_C79D4((*D_8012C2BC_EE5FC)[curIndex].dList, asset, D_8012C2A4_EE5E4[D_8012C2B8_EE5F8].x,
|
||||
D_8012C2A4_EE5E4[D_8012C2B8_EE5F8].y);
|
||||
D_8012C2A4_EE5E4[fontInUse].offsetToData +
|
||||
(D_8012C2A4_EE5E4[fontInUse].bytesPerCharacter * arg0),
|
||||
D_8012C2A4_EE5E4[fontInUse].bytesPerCharacter);
|
||||
fontCreateDisplayList((*D_8012C2BC_EE5FC)[curIndex].dList, asset, D_8012C2A4_EE5E4[fontInUse].x,
|
||||
D_8012C2A4_EE5E4[fontInUse].y);
|
||||
}
|
||||
|
||||
return curIndex;
|
||||
}
|
||||
}
|
||||
|
||||
void func_800C6DD4_C79D4(Gfx *dList, Asset46 *asset, s32 width, s32 height) {
|
||||
/**
|
||||
* Official Name: fontCreateDisplayList
|
||||
*/
|
||||
void fontCreateDisplayList(Gfx *dList, Asset46 *asset, s32 width, s32 height) {
|
||||
if (asset->unk0 != -1) {
|
||||
asset->unk0 = (s32) asset + asset->unk0;
|
||||
} else {
|
||||
@@ -1616,7 +1616,7 @@ void func_800C7804_C8404(s32 arg0) {
|
||||
}
|
||||
}
|
||||
|
||||
u8 D_800E5234_E5E34[] = {
|
||||
u8 gFontConversionTable[] = {
|
||||
0x0F, 0x34, 0x0A, 0x36, 0x02, 0x06, 0x0D, 0x37, 0x03, 0x04, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x3E, 0x05, 0x0B, 0x3F, 0x0C, 0x40,
|
||||
0x41, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
|
||||
@@ -1625,11 +1625,13 @@ u8 D_800E5234_E5E34[] = {
|
||||
0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0x03, 0x0F, 0x04, 0x0E, 0x0F,
|
||||
};
|
||||
|
||||
void func_800C7864_C8464(char *inString, char *outString) {
|
||||
/**
|
||||
* Official Name: fontConvertString
|
||||
*/
|
||||
void fontConvertString(char *inString, char *outString) {
|
||||
char currentChar;
|
||||
|
||||
currentChar = *inString++;
|
||||
while (currentChar) {
|
||||
while ((currentChar = *inString++)) {
|
||||
if (currentChar & 0x80) {
|
||||
*outString++ = currentChar;
|
||||
*outString++ = *inString++;
|
||||
@@ -1637,10 +1639,8 @@ void func_800C7864_C8464(char *inString, char *outString) {
|
||||
*outString++ = currentChar;
|
||||
} else {
|
||||
*outString++ = 0x80;
|
||||
*outString++ = D_800E5234_E5E34[currentChar - 32];
|
||||
*outString++ = gFontConversionTable[currentChar - 32];
|
||||
}
|
||||
currentChar = *inString;
|
||||
inString++;
|
||||
}
|
||||
*outString = '\0';
|
||||
}
|
||||
|
||||
+2
-2
@@ -193,10 +193,10 @@ void func_800C663C_C723C(void);
|
||||
void func_800C6870_C7470(void);
|
||||
void func_800C67F4_C73F4(void);
|
||||
s32 func_800C68CC_C74CC(u16 arg0);
|
||||
void func_800C6DD4_C79D4(Gfx *dList, Asset46 *asset, s32 width, s32 height);
|
||||
void fontCreateDisplayList(Gfx *dList, Asset46 *asset, s32 width, s32 height);
|
||||
s32 func_800C7744_C8344(Gfx **dList, u16 charIndex, s32 *outLeft, s32 *outTop, s32 *outRight, s32 *outBottom);
|
||||
void func_800C7804_C8404(s32 arg0);
|
||||
void func_800C7864_C8464(char *inString, char *outString);
|
||||
void fontConvertString(char *inString, char *outString);
|
||||
void func_800C78E0_C84E0(void);
|
||||
|
||||
#endif
|
||||
|
||||
+72
-47
@@ -523,7 +523,7 @@ s8 gInAdvModeTrophyRace = FALSE;
|
||||
// Height scale of the wooden frames in the track select menu.
|
||||
f32 gTrackSelectWoodFrameHeightScale = 1.0f;
|
||||
|
||||
s32 gResetTitleScale = 1;
|
||||
s32 gResetTitleScale = TRUE;
|
||||
|
||||
s32 gTitleScreenCurrentOption = 0; // 0 = "Start", 1 = "Options"
|
||||
|
||||
@@ -545,11 +545,11 @@ s32 gTrackSpecifiedWithTrackIdToLoad = 0;
|
||||
s32 gMenuDelay = 0;
|
||||
s32 gNumberOfReadyPlayers = 0;
|
||||
s32 D_800DF484 = 0;
|
||||
s32 gTitleScreenLoaded = 0;
|
||||
s32 unused_800DF48C = 0;
|
||||
s32 unused_800DF490 = 0;
|
||||
s32 gIsInAdventureTwo = 0;
|
||||
s32 gPlayerHasSeenCautionMenu = 0;
|
||||
s32 gTitleScreenLoaded = FALSE;
|
||||
UNUSED s32 unused_800DF48C = 0;
|
||||
UNUSED s32 unused_800DF490 = 0;
|
||||
s32 gIsInAdventureTwo = FALSE;
|
||||
s32 gPlayerHasSeenCautionMenu = FALSE;
|
||||
s32 *gMenuTextLangTable = NULL;
|
||||
|
||||
char **gMenuText = NULL;
|
||||
@@ -563,7 +563,7 @@ u8 sMenuGuiColourBlendFactor = 0;
|
||||
// Seems like it doesn't matter what you set it as?
|
||||
s32 gMenuSpriteFlags = 0;
|
||||
|
||||
s32 gIsInTracksMode = 1;
|
||||
s32 gIsInTracksMode = TRUE;
|
||||
s32 gNumberOfActivePlayers = 1;
|
||||
s32 gIsInTwoPlayerAdventure = 0;
|
||||
s32 gTrackIdForPreview = ASSET_LEVEL_CENTRALAREAHUB;
|
||||
@@ -1288,9 +1288,7 @@ char *sControllerPakFullMenuText[5] = { 0, 0, 0, 0, 0 };
|
||||
char *sNoControllerPakMenuText[5] = { 0, 0, 0, 0, 0 };
|
||||
|
||||
// CORRUPT DATA / If you wish to change / Controller Pak or Rumble Pak, / please do so now.
|
||||
char *sCorruptDataMenuText[3] = { 0, 0, 0 }; // This should be 5 in size? This is unclear still.
|
||||
|
||||
char *D_800E09F8[3] = { 0, 0, 0 };
|
||||
char *sCorruptDataMenuText[6] = { 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
// If you wish to use / the Controller Pak / insert it now!
|
||||
char *sInsertControllerPakMenuText[3] = { 0, 0, 0 };
|
||||
@@ -1408,8 +1406,8 @@ s32 gFilenameY = 120;
|
||||
s32 gFilenameFont = ASSET_FONTS_BIGFONT;
|
||||
s32 gNameEntryLength = 0;
|
||||
s32 D_800E0FA4 = 0;
|
||||
char gCheckAdvEnterInitials[4] = "DKR"; // Default file name?
|
||||
s32 D_800E0FAC = 0;
|
||||
char gCheckAdvEnterInitials[] = "DKR"; // Default file name
|
||||
s32 D_800E0FAC = FALSE;
|
||||
s32 gIndexOfCurInputCharacter = 0;
|
||||
|
||||
s16 gAdvTrackInitObjectIndices[18] = { 0x0004, 0x0000, 0x0001, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D,
|
||||
@@ -3307,7 +3305,7 @@ void menu_title_screen_init(void) {
|
||||
s32 i;
|
||||
s32 numberOfPlayers;
|
||||
|
||||
gTitleScreenLoaded = 1;
|
||||
gTitleScreenLoaded = TRUE;
|
||||
gOptionBlinkTimer = 0;
|
||||
gMenuDelay = 0;
|
||||
reset_character_id_slots();
|
||||
@@ -4142,7 +4140,7 @@ void savemenu_render_element(SaveFileData *file, s32 x, s32 y) {
|
||||
texture = gMenuAssets[TEXTURE_SURFACE_BUTTON_WOOD];
|
||||
colour = COLOUR_RGBA32(176, 224, 192, 255);
|
||||
if (!gSavefileData[file->controllerIndex]->newGame) {
|
||||
filename_decompress(gSavefileData[file->controllerIndex]->filename, buffer, 3);
|
||||
filename_decompress(gSavefileData[file->controllerIndex]->filename, buffer, MAX_INITIALS_LENGTH);
|
||||
filename_trim(buffer, buffer);
|
||||
text2 = buffer;
|
||||
firstDigit = *gSavefileData[file->controllerIndex]->balloonsPtr / 10;
|
||||
@@ -4168,7 +4166,7 @@ void savemenu_render_element(SaveFileData *file, s32 x, s32 y) {
|
||||
texture = gMenuAssets[TEXTURE_UNK_44];
|
||||
colour = gContPakSaveBgColours[file->controllerIndex];
|
||||
text2 = buffer;
|
||||
filename_decompress(file->compressedFilename, buffer, 3);
|
||||
filename_decompress(file->compressedFilename, buffer, MAX_INITIALS_LENGTH);
|
||||
// char *gConPakAdvSavePrefix = " (ADV.";
|
||||
for (i = 0; gConPakAdvSavePrefix[i] != '\0'; i++) {
|
||||
buffer[i + 3] = gConPakAdvSavePrefix[i];
|
||||
@@ -5562,13 +5560,17 @@ void bootscreen_init_cpak(void) {
|
||||
#endif
|
||||
}
|
||||
|
||||
#if REGION == REGION_JP
|
||||
#define PAKMENU_JP_OFFSET 2
|
||||
#else
|
||||
#define PAKMENU_JP_OFFSET 0
|
||||
#endif
|
||||
/**
|
||||
* Render the controller pak menu.
|
||||
* Lists the pak index, as well as remaining pages, then displays all known files.
|
||||
* Also draws the confirmation box.
|
||||
* Visual Aid : https://i.imgur.com/7T2Scdr.png
|
||||
*/
|
||||
#if REGION != REGION_JP
|
||||
void pakmenu_render(UNUSED s32 updateRate) {
|
||||
s32 highlight;
|
||||
s32 i;
|
||||
@@ -5608,15 +5610,19 @@ void pakmenu_render(UNUSED s32 updateRate) {
|
||||
set_dialogue_font(6, ASSET_FONTS_FUNFONT);
|
||||
set_current_text_colour(6, 255, 255, 255, 0, 255);
|
||||
set_current_text_background_colour(6, 0, 0, 0, 0);
|
||||
render_dialogue_text(6, POS_CENTRED, 2, gMenuText[ASSET_MENU_TEXT_CONTPAK1 + gMenuOption], 1,
|
||||
render_dialogue_text(6, POS_CENTRED, 2 - PAKMENU_JP_OFFSET, gMenuText[ASSET_MENU_TEXT_CONTPAK1 + gMenuOption], 1,
|
||||
HORZ_ALIGN_CENTER); // CONTROLLER PAK 1 / 2 / 3 / 4
|
||||
render_dialogue_text(6, POS_CENTRED, 16, gMenuText[ASSET_MENU_TEXT_FREEPAGESX], sCurrentControllerPakFreePages,
|
||||
render_dialogue_text(6, POS_CENTRED, 16 - PAKMENU_JP_OFFSET, gMenuText[ASSET_MENU_TEXT_FREEPAGESX], sCurrentControllerPakFreePages,
|
||||
HORZ_ALIGN_CENTER); // FREE PAGES: ~
|
||||
render_dialogue_box(&sMenuCurrDisplayList, NULL, NULL, 6);
|
||||
|
||||
yPos += 34; // To 82
|
||||
|
||||
#if REGION == REGION_JP
|
||||
set_dialogue_font(6, ASSET_FONTS_SUBTITLEFONT);
|
||||
#else
|
||||
set_dialogue_font(6, ASSET_FONTS_SMALLFONT);
|
||||
#endif
|
||||
set_current_text_background_colour(6, 0, 0, 0, 0);
|
||||
for (i = -1; i < sControllerPakMenuNumberOfRows; i++) {
|
||||
dialogue_clear(6);
|
||||
@@ -5642,9 +5648,19 @@ void pakmenu_render(UNUSED s32 updateRate) {
|
||||
fileNameText = gBootPakData[gOpacityDecayTimer + i];
|
||||
numberOfPages = sCurrentControllerPakNumberOfPages[gOpacityDecayTimer + i];
|
||||
}
|
||||
#if REGION == REGION_JP
|
||||
render_dialogue_text(6, 21, 2, noteText, gOpacityDecayTimer + i + 1, HORZ_ALIGN_CENTER);
|
||||
if (i < 0) {
|
||||
render_dialogue_text(6, POS_CENTRED, 2, fileNameText, 1, HORZ_ALIGN_CENTER);
|
||||
} else {
|
||||
render_dialogue_text(6, 44, 2, fileNameText, 1, HORZ_ALIGN_LEFT);
|
||||
}
|
||||
render_dialogue_text(6, 241, 2, pagesText, numberOfPages, HORZ_ALIGN_CENTER);
|
||||
#else
|
||||
render_dialogue_text(6, 26, 2, noteText, gOpacityDecayTimer + i + 1, HORZ_ALIGN_CENTER);
|
||||
render_dialogue_text(6, 56, 2, fileNameText, 1, HORZ_ALIGN_LEFT);
|
||||
render_dialogue_text(6, 240, 2, pagesText, numberOfPages, HORZ_ALIGN_CENTER);
|
||||
#endif
|
||||
#if VERSION >= VERSION_79
|
||||
set_kerning(TRUE);
|
||||
#endif
|
||||
@@ -5677,16 +5693,29 @@ void pakmenu_render(UNUSED s32 updateRate) {
|
||||
yPos = SCREEN_HEIGHT_HALF;
|
||||
}
|
||||
dialogue_clear(6);
|
||||
#if REGION == REGION_JP
|
||||
set_dialogue_font(6, ASSET_FONTS_SMALLFONT);
|
||||
set_current_dialogue_box_coords(6, 56, yPos - 28, 264, yPos + 28);
|
||||
#else
|
||||
set_dialogue_font(6, ASSET_FONTS_FUNFONT);
|
||||
set_current_dialogue_box_coords(6, 76, yPos - 28, 244, yPos + 28);
|
||||
#endif
|
||||
set_current_dialogue_background_colour(6, 0, 0, 0, 160);
|
||||
|
||||
yPos = 4;
|
||||
for (i = 0; i <= 2; i++) {
|
||||
if (i == 0) {
|
||||
#if REGION == REGION_JP
|
||||
set_current_text_colour(6, 208, 128, 255, 255, 255);
|
||||
#else
|
||||
set_current_text_colour(6, 255, 0, 255, 64, 255);
|
||||
#endif
|
||||
} else if (i == gMenuStage) {
|
||||
#if REGION == REGION_JP
|
||||
set_current_text_colour(6, 255, highlight, highlight, 255, 255);
|
||||
#else
|
||||
set_current_text_colour(6, 255, 255, 255, highlight, 255);
|
||||
#endif
|
||||
} else {
|
||||
set_current_text_colour(6, 255, 255, 255, 0, 255);
|
||||
}
|
||||
@@ -5715,10 +5744,6 @@ void pakmenu_render(UNUSED s32 updateRate) {
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
// No match JPN pakmenu_render
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/menu/pakmenu_render.s")
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Handles the controller pak menu accessed from the boot screen.
|
||||
@@ -7089,7 +7114,7 @@ s32 menu_character_select_loop(s32 updateRate) {
|
||||
charselect_assign_ai(charSlot);
|
||||
charselect_assign_players(gActivePlayersArray);
|
||||
|
||||
gIsInTracksMode = 1;
|
||||
gIsInTracksMode = TRUE;
|
||||
if (confirmOffset >= gNumberOfActivePlayers) {
|
||||
music_change_off();
|
||||
load_level_for_menu(ASSET_LEVEL_OPTIONSBACKGROUND, -1, 0);
|
||||
@@ -7226,7 +7251,7 @@ void menu_caution_init(void) {
|
||||
load_font(ASSET_FONTS_BIGFONT);
|
||||
#endif
|
||||
transition_begin(&sMenuTransitionFadeOut);
|
||||
gPlayerHasSeenCautionMenu = 1;
|
||||
gPlayerHasSeenCautionMenu = TRUE;
|
||||
#if REGION == REGION_JP
|
||||
func_800C663C_C723C();
|
||||
#endif
|
||||
@@ -7553,7 +7578,7 @@ void fileselect_render(UNUSED s32 updateRate) {
|
||||
menu_camera_centre();
|
||||
set_ortho_matrix_view(&sMenuCurrDisplayList, &sMenuCurrHudMat);
|
||||
for (i = 0; i < NUMBER_OF_SAVE_FILES; i++) {
|
||||
if (gSavefileInfo[i].isAdventure2 == gIsInAdventureTwo || gSavefileInfo[i].isStarted == 0) {
|
||||
if (gSavefileInfo[i].isAdventure2 == gIsInAdventureTwo || gSavefileInfo[i].isStarted == FALSE) {
|
||||
colour = COLOUR_RGBA32(176, 224, 192, 255);
|
||||
} else {
|
||||
colour = COLOUR_RGBA32(106, 144, 115, 255);
|
||||
@@ -7985,7 +8010,7 @@ s32 menu_file_select_loop(s32 updateRate) {
|
||||
}
|
||||
gSavefileInfo[i].isStarted = TRUE;
|
||||
gSavefileInfo[i].balloonCount = *gSavefileData[i]->balloonsPtr;
|
||||
filename_decompress(gSavefileData[i]->filename, gSavefileInfo[i].name, 3);
|
||||
filename_decompress(gSavefileData[i]->filename, gSavefileInfo[i].name, MAX_INITIALS_LENGTH);
|
||||
}
|
||||
}
|
||||
gOpacityDecayTimer = 0;
|
||||
@@ -8020,7 +8045,7 @@ s32 menu_file_select_loop(s32 updateRate) {
|
||||
menu_unload_bigfont();
|
||||
gFileNew = FALSE;
|
||||
gSavefileInfo[gSaveFileIndex].isAdventure2 = 0;
|
||||
if (gIsInAdventureTwo != 0) {
|
||||
if (gIsInAdventureTwo) {
|
||||
gSavefileInfo[gSaveFileIndex].isAdventure2 = 1;
|
||||
}
|
||||
gSavefileInfo[gSaveFileIndex].isStarted = 1;
|
||||
@@ -8070,7 +8095,7 @@ s32 menu_file_select_loop(s32 updateRate) {
|
||||
fontUseFont();
|
||||
}
|
||||
gNumberOfActivePlayers = 1;
|
||||
D_800E0FAC = 1;
|
||||
D_800E0FAC = TRUE;
|
||||
fileselect_free();
|
||||
music_change_on();
|
||||
init_racer_headers();
|
||||
@@ -8195,12 +8220,12 @@ void menu_track_select_init(void) {
|
||||
settings = get_settings();
|
||||
get_number_of_levels_and_worlds(&levelCount, &worldCount);
|
||||
trackIds = (s8 *) get_misc_asset(ASSET_MISC_TRACKS_MENU_IDS);
|
||||
if (gTitleScreenLoaded != 0) {
|
||||
if (gTitleScreenLoaded != FALSE) {
|
||||
gTrackSelectCursorX = 0;
|
||||
gTrackSelectCursorY = 0;
|
||||
gTracksMenuTimeTrialHighlightIndex = 0;
|
||||
gTracksMenuAdventureHighlightIndex = 0;
|
||||
gTitleScreenLoaded = 0;
|
||||
gTitleScreenLoaded = FALSE;
|
||||
}
|
||||
gTrackSelectViewPortX = fb_size();
|
||||
gTrackSelectViewportY = GET_VIDEO_HEIGHT(gTrackSelectViewPortX) & 0xFFFF;
|
||||
@@ -8689,7 +8714,7 @@ void trackmenu_render_2D(s32 x, s32 y, char *hubName, char *trackName, s32 rectO
|
||||
set_text_colour(255, 255, 255, 0, opacity);
|
||||
draw_text(&sMenuCurrDisplayList, SCREEN_WIDTH_HALF, (yTemp - sp6C) - 88, hubName, ALIGN_MIDDLE_CENTER);
|
||||
gTrackMenuHubName = hubName;
|
||||
set_kerning(0);
|
||||
set_kerning(FALSE);
|
||||
}
|
||||
#if REGION == REGION_JP
|
||||
set_text_colour(0, 0, 0, 255, opacity / 2);
|
||||
@@ -9182,14 +9207,14 @@ void trackmenu_setup_render(UNUSED s32 updateRate) {
|
||||
#endif
|
||||
set_text_colour(255, 128, 255, 96, sMenuGuiOpacity);
|
||||
filename_decompress(settings->courseInitialsPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview],
|
||||
filename.buffer, 3);
|
||||
filename.buffer, MAX_INITIALS_LENGTH);
|
||||
#if REGION == REGION_JP
|
||||
draw_text(&sMenuCurrDisplayList, 249, regionOffset + 70, filename.buffer, ALIGN_MIDDLE_CENTER);
|
||||
#else
|
||||
draw_text(&sMenuCurrDisplayList, 250, regionOffset + 72, filename.buffer, ALIGN_MIDDLE_CENTER);
|
||||
#endif
|
||||
filename_decompress(settings->flapInitialsPtr[gPlayerSelectVehicle[0]][gTrackIdForPreview], filename.buffer,
|
||||
3);
|
||||
MAX_INITIALS_LENGTH);
|
||||
#if REGION == REGION_JP
|
||||
draw_text(&sMenuCurrDisplayList, 249, regionOffset + 89, filename.buffer, ALIGN_MIDDLE_CENTER);
|
||||
#else
|
||||
@@ -9864,11 +9889,11 @@ void adventuretrack_render(UNUSED s32 updateRate, s32 arg1, s32 arg2) {
|
||||
gMenuText[ASSET_MENU_TEXT_BESTLAP], ADVENTURETRACK_ALIGN);
|
||||
set_text_colour(255, 128, 255, 96, 255);
|
||||
filename_decompress(settings->courseInitialsPtr[gPlayerSelectVehicle[0]][mapID],
|
||||
(char *) &filename, 3);
|
||||
(char *) &filename, MAX_INITIALS_LENGTH);
|
||||
draw_text(&sMenuCurrDisplayList, ADVENTURETRACK_XPOS2, yOffset + ADVENTURETRACK_YPOS3,
|
||||
(char *) &filename, ALIGN_MIDDLE_CENTER);
|
||||
filename_decompress(settings->flapInitialsPtr[gPlayerSelectVehicle[0]][mapID],
|
||||
(char *) &filename, 3);
|
||||
(char *) &filename, MAX_INITIALS_LENGTH);
|
||||
draw_text(&sMenuCurrDisplayList, ADVENTURETRACK_XPOS2, yOffset + ADVENTURETRACK_YPOS2,
|
||||
(char *) &filename, ALIGN_MIDDLE_CENTER);
|
||||
menu_timestamp_render(settings->courseTimesPtr[gPlayerSelectVehicle[0]][ADVENTURETRACK_MAPID],
|
||||
@@ -10309,7 +10334,7 @@ s32 menu_pause_loop(UNUSED Gfx **dl, s32 updateRate) {
|
||||
if (gMenuSubOption == 1) {
|
||||
if (gTrophyRaceWorldId != 0) {
|
||||
gTrophyRaceWorldId = 0;
|
||||
if (gIsInTracksMode == 0) {
|
||||
if (gIsInTracksMode == FALSE) {
|
||||
return PAUSE_QUIT_LOBBY;
|
||||
}
|
||||
return PAUSE_QUIT_TRACKS;
|
||||
@@ -10874,17 +10899,17 @@ s32 menu_postrace(Gfx **dList, MatrixS **matrices, Vertex **vertices, s32 update
|
||||
gRecordTimesMenuElements[6].t.numberU16 =
|
||||
&settings->flapTimesPtr[*gPlayerSelectVehicle][settings->courseId];
|
||||
filename_decompress(settings->courseInitialsPtr[*gPlayerSelectVehicle][settings->courseId],
|
||||
gCourseInitials, 3);
|
||||
gCourseInitials, MAX_INITIALS_LENGTH);
|
||||
filename_decompress(settings->flapInitialsPtr[*gPlayerSelectVehicle][settings->courseId],
|
||||
gFLapInitials, 3);
|
||||
gFLapInitials, MAX_INITIALS_LENGTH);
|
||||
if (settings->racers[0].best_times != 0) {
|
||||
gMenuStage = POSTRACE_STAGE_ENTER_INITIALS;
|
||||
if ((gIsInTracksMode == 0) && (D_800E0FAC)) {
|
||||
filename_decompress(settings->filename, gCheckAdvEnterInitials, 3);
|
||||
D_800E0FAC = 0;
|
||||
if (gIsInTracksMode == FALSE && D_800E0FAC != FALSE) {
|
||||
filename_decompress(settings->filename, gCheckAdvEnterInitials, MAX_INITIALS_LENGTH);
|
||||
D_800E0FAC = FALSE;
|
||||
}
|
||||
filename_init(textOffsetY + 196, 160, textOffsetY + 120, 2, &D_800E0FA4, gCheckAdvEnterInitials,
|
||||
3);
|
||||
MAX_INITIALS_LENGTH);
|
||||
} else {
|
||||
postrace_offsets(gRecordTimesMenuElements, 0.5f, 15.0f, 0.5f, textOffsetY, timeOffsetY);
|
||||
gMenuStage = POSTRACE_STAGE_RACE_RECORDS;
|
||||
@@ -10904,15 +10929,15 @@ s32 menu_postrace(Gfx **dList, MatrixS **matrices, Vertex **vertices, s32 update
|
||||
if (filename_enter(updateRate)) {
|
||||
if (settings->racers[0].best_times & 0x7F) {
|
||||
settings->flapInitialsPtr[*gPlayerSelectVehicle][settings->courseId] =
|
||||
filename_compress(gCheckAdvEnterInitials, 3);
|
||||
filename_compress(gCheckAdvEnterInitials, MAX_INITIALS_LENGTH);
|
||||
filename_decompress(settings->flapInitialsPtr[*gPlayerSelectVehicle][settings->courseId],
|
||||
gFLapInitials, 3);
|
||||
gFLapInitials, MAX_INITIALS_LENGTH);
|
||||
}
|
||||
if (settings->racers[0].best_times & 0x80) {
|
||||
settings->courseInitialsPtr[*gPlayerSelectVehicle][settings->courseId] =
|
||||
filename_compress(gCheckAdvEnterInitials, 3);
|
||||
filename_compress(gCheckAdvEnterInitials, MAX_INITIALS_LENGTH);
|
||||
filename_decompress(settings->courseInitialsPtr[*gPlayerSelectVehicle][settings->courseId],
|
||||
gCourseInitials, 3);
|
||||
gCourseInitials, MAX_INITIALS_LENGTH);
|
||||
}
|
||||
postrace_offsets(gRecordTimesMenuElements, 0.5f, 15.0f, 0.5f, textOffsetY, timeOffsetY);
|
||||
gMenuStage = POSTRACE_STAGE_RACE_RECORDS;
|
||||
@@ -12328,7 +12353,7 @@ s32 menu_trophy_race_rankings_loop(s32 updateRate) {
|
||||
temp6 = 0;
|
||||
}
|
||||
gRankingsPortraitIDs[temp6] = -1;
|
||||
if (gIsInTracksMode == 1) {
|
||||
if (gIsInTracksMode == TRUE) {
|
||||
if (sp34 >= 3) {
|
||||
menu_init(MENU_TRACK_SELECT);
|
||||
} else {
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#define CINEMATIC_PLAYERS 1
|
||||
#define CINEMATIC_CUTSCENE 2
|
||||
|
||||
#define MAX_INITIALS_LENGTH 3
|
||||
|
||||
enum PauseMenuResults {
|
||||
PAUSE_NONE,
|
||||
PAUSE_CONTINUE,
|
||||
|
||||
@@ -772,6 +772,7 @@ void try_free_object_header(s32 index) {
|
||||
* Converts the passed value into an accurate countdown value based on the systems region.
|
||||
* Since PAL runs at 50Hz, it therefore will reduce the timer to 5/6 to match, keeping
|
||||
* it consistent with non PAL timers, running 60Hz.
|
||||
* Official Name: objTvTimes
|
||||
*/
|
||||
s32 normalise_time(s32 timer) {
|
||||
if (osTvType != OS_TV_TYPE_PAL || timer < 0) {
|
||||
|
||||
+2
-2
@@ -3518,8 +3518,8 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR
|
||||
sound_play_spatial(SOUND_CAR_SLIDE, obj->segment.trans.x_position, obj->segment.trans.y_position,
|
||||
obj->segment.trans.z_position, (s32 **) &racer->unk10);
|
||||
} else {
|
||||
func_80009B7C((void *) racer->unk10, obj->segment.trans.x_position, obj->segment.trans.y_position,
|
||||
obj->segment.trans.z_position);
|
||||
audioline_reverb((void *) racer->unk10, obj->segment.trans.x_position, obj->segment.trans.y_position,
|
||||
obj->segment.trans.z_position);
|
||||
}
|
||||
if (racer->unk14) {
|
||||
sound_stop((void *) racer->unk14);
|
||||
|
||||
+1
-2
@@ -175,7 +175,7 @@ s32 gfxtask_run_xbus(Gfx *dlBegin, Gfx *dlEnd, UNUSED s32 recvMesg) {
|
||||
dkrtask->unused58 = COLOUR_TAG_RED;
|
||||
dkrtask->unused5C = COLOUR_TAG_RED;
|
||||
dkrtask->task.data_ptr = (u64 *) dlBegin;
|
||||
dkrtask->task.data_size = ((s32) dlEnd - (s32) dlBegin) >> 3; // Shifted by 3, repsenting the size of the Gfx type.
|
||||
dkrtask->task.data_size = dlEnd - dlBegin;
|
||||
dkrtask->task.type = M_GFXTASK;
|
||||
dkrtask->task.flags = OS_TASK_DP_WAIT;
|
||||
dkrtask->task.ucode_boot = (u64 *) rspF3DDKRBootStart;
|
||||
@@ -510,7 +510,6 @@ void bgdraw_texture_init(TextureHeader *tex1, TextureHeader *tex2, u32 shiftX) {
|
||||
|
||||
/**
|
||||
* Seems to render the background screen after a race finishes while you're at the menu deciding what to do next.
|
||||
* https://i.imgur.com/MHbUD2a.png is an example. The left is correct, and the right is incorrect rendering.
|
||||
* Official Name: rcpMosaicClear
|
||||
*/
|
||||
void bgdraw_texture(Gfx **dList) {
|
||||
|
||||
+4
-3
@@ -1325,13 +1325,14 @@ void force_mark_write_save_file(s32 saveFileIndex) {
|
||||
|
||||
/**
|
||||
* Marks a flag to write a save file to flash as long as we're not in tracks mode, and we're in the draw game render
|
||||
* context. This should prevent save data from being overwritten outside of Adventure Mode. Official Name: mainSaveGame2
|
||||
* context. This should prevent save data from being overwritten outside of Adventure Mode.
|
||||
* Official Name: mainSaveGame2
|
||||
*/
|
||||
void safe_mark_write_save_file(s32 saveFileIndex) {
|
||||
if (gGameMode == GAMEMODE_INGAME && !is_in_tracks_mode()) {
|
||||
gSaveDataFlags &= ~SAVE_DATA_FLAG_WRITE_SAVE_FILE_NUMBER_BITS; // Wipe out bits 10 and 11
|
||||
gSaveDataFlags |= (SAVE_DATA_FLAG_WRITE_SAVE_DATA | ((saveFileIndex & 3) << 10));
|
||||
; // Set bit 6 and place saveFileIndex into bits 10 and 11
|
||||
gSaveDataFlags |= (SAVE_DATA_FLAG_WRITE_SAVE_DATA |
|
||||
((saveFileIndex & 3) << 10)); // Set bit 6 and place saveFileIndex into bits 10 and 11
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -1082,8 +1082,7 @@ void render_rain_overlay(RainGfxData *rainGfx, s32 time) {
|
||||
s32 i;
|
||||
f32 zSin;
|
||||
f32 zCos;
|
||||
int unused;
|
||||
int unused2;
|
||||
UNUSED s32 pad[2];
|
||||
TextureHeader *tex;
|
||||
Gfx *curDL;
|
||||
Triangle *tri;
|
||||
|
||||
+1
-1
Submodule tools/asm-differ updated: 150720b883...ddb2fad1b7
+1
-1
Submodule tools/m2c updated: f29e59172f...4caccf86a0
@@ -116,8 +116,8 @@ MAP_FILE = DkrMapFile()
|
||||
# Adding regional and other version functions here to ignore since we're only scoring US_1.0 for now.
|
||||
NOT_FUNCTION_NAMES = ['if', 'else', 'switch', 'while', 'for', 'dmacopy_internal', 'func_80082BC8_837C8', 'rumble_enable',
|
||||
'func_800C6464_C7064', 'func_800C663C_C723C', 'func_800C67F4_C73F4', 'func_800C6870_C7470',
|
||||
'func_800C68CC_C74CC', 'func_800C6DD4_C79D4', 'func_800C7744_C8344', 'func_800C7804_C8404',
|
||||
'func_800C7864_C8464', 'func_800C78E0_C84E0']
|
||||
'func_800C68CC_C74CC', 'fontCreateDisplayList', 'func_800C7744_C8344', 'func_800C7804_C8404',
|
||||
'fontConvertString', 'func_800C78E0_C84E0']
|
||||
|
||||
class ScoreFileMatch:
|
||||
def __init__(self, comment, functionName):
|
||||
|
||||
@@ -149,7 +149,7 @@ audioline_ambient_create = 0x800098A4;
|
||||
audioline_reverb_create = 0x80009968;
|
||||
func_800099EC = 0x800099EC;
|
||||
func_80009AB4 = 0x80009AB4;
|
||||
func_80009B7C = 0x80009B7C;
|
||||
audioline_reverb = 0x80009B7C;
|
||||
func_80009D6C = 0x80009D6C;
|
||||
debug_render_audio_effects = 0x8000A184;
|
||||
func_8000A2E8 = 0x8000A2E8;
|
||||
@@ -2645,7 +2645,6 @@ sBadControllerPakMenuText = 0x800E2410;
|
||||
sControllerPakFullMenuText = 0x800E2424;
|
||||
sNoControllerPakMenuText = 0x800E2438;
|
||||
sCorruptDataMenuText = 0x800E244C;
|
||||
D_800E09F8 = 0x800E2458;
|
||||
sInsertControllerPakMenuText = 0x800E2464;
|
||||
D_800E0A10 = 0x800E2470;
|
||||
sInsertRumblePakMenuText = 0x800E2474;
|
||||
@@ -4593,7 +4592,7 @@ gDialogueText = 0x8012C29C;
|
||||
gCompactKerning = 0x8012C2A0;
|
||||
D_8012C2A4_EE5E4 = 0x8012C2A4;
|
||||
D_8012C2A8_EE5E8 = 0x8012C2A8; // size:0x10
|
||||
D_8012C2B8_EE5F8 = 0x8012C2B8;
|
||||
fontInUse = 0x8012C2B8;
|
||||
D_8012C2BC_EE5FC = 0x8012C2BC;
|
||||
D_8012C2C0_EE600 = 0x8012C2C0;
|
||||
D_8012C2C4_EE604 = 0x8012C2C4;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user