Merge branch 'master' into partial-match/func_800B82B4

This commit is contained in:
David Benepe
2025-04-16 10:39:34 -04:00
committed by GitHub
24 changed files with 184 additions and 167 deletions
+11 -11
View File
@@ -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:
&emsp;&emsp;&emsp;&emsp;Decomp progress: 78.88%
&emsp;&emsp;&emsp;&emsp;Decomp progress: 78.93%
&emsp;&emsp;&emsp;&emsp;Documentation progress: 49.86%
&emsp;&emsp;&emsp;&emsp;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
View File
@@ -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
View File
@@ -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);
}
}
-1
View File
@@ -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
View File
@@ -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) {
+2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 {
+2
View File
@@ -28,6 +28,8 @@
#define CINEMATIC_PLAYERS 1
#define CINEMATIC_CUTSCENE 2
#define MAX_INITIALS_LENGTH 3
enum PauseMenuResults {
PAUSE_NONE,
PAUSE_CONTINUE,
+1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+2 -2
View File
@@ -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):
+2 -3
View File
@@ -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