mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
match: func_800B653C (#574)
* match: func_800B653C * fix: func_800B653C
This commit is contained in:
@@ -5,9 +5,9 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the
|
||||
All versions are supported, and the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fda38e533b9fe63bb9670) of the game is the default if not specified.
|
||||
|
||||
<!-- README_SCORE_SUMMARY_BEGIN -->
|
||||
As of May 13, 2025, this is our current score:
|
||||
As of May 14, 2025, this is our current score:
|
||||
|
||||
    Decomp progress: 87.49%
|
||||
    Decomp progress: 87.61%
|
||||
|
||||
    Documentation progress: 56.95%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
@@ -117,13 +117,13 @@ s32 is_drumstick_unlocked(void) {
|
||||
```
|
||||
|
||||
<!-- README_SCORE_BEGIN -->
|
||||
As of May 13, 2025, this is our current score:
|
||||
As of May 14, 2025, this is our current score:
|
||||
```
|
||||
=====================================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
--------------- 87.49% Complete (88.41% NON_MATCHING) ---------------
|
||||
# Decompiled functions: 1892
|
||||
# GLOBAL_ASM remaining: 59
|
||||
--------------- 87.61% Complete (88.53% NON_MATCHING) ---------------
|
||||
# Decompiled functions: 1893
|
||||
# GLOBAL_ASM remaining: 58
|
||||
# NON_MATCHING functions: 6
|
||||
# NON_EQUIVALENT WIP functions: 18
|
||||
---------------------------- Game Status ----------------------------
|
||||
|
||||
+75
-80
@@ -350,91 +350,87 @@ UNUSED s32 debug_text_width(const char *format, ...) {
|
||||
return stringLength;
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
s32 func_800B653C(Gfx **dList, char *buffer) {
|
||||
char *bufferSave;
|
||||
s32 var_a1;
|
||||
s32 func_800B653C(Gfx **dList, u8 *buffer) {
|
||||
u8 *bufferCopy;
|
||||
s32 xOffset;
|
||||
char *nextBuffer;
|
||||
char red;
|
||||
char green;
|
||||
char blue;
|
||||
char alpha;
|
||||
u8 red;
|
||||
u8 green;
|
||||
u8 blue;
|
||||
u8 alpha;
|
||||
u8 bufferValue;
|
||||
|
||||
bufferSave = buffer;
|
||||
nextBuffer = buffer + 1;
|
||||
while (*buffer != NULL) {
|
||||
bufferCopy = buffer;
|
||||
bufferValue = *buffer;
|
||||
buffer++;
|
||||
while (bufferValue != NULL) {
|
||||
xOffset = 0;
|
||||
if (*buffer >= 11) {
|
||||
if (*buffer >= 0x21) {
|
||||
switch (*buffer) {
|
||||
case 0x83:
|
||||
D_80127CB4 = 0;
|
||||
break;
|
||||
case 0x84:
|
||||
D_80127CB4 = 1;
|
||||
break;
|
||||
case 0x81:
|
||||
red = *nextBuffer++;
|
||||
green = *nextBuffer++;
|
||||
blue = *nextBuffer++;
|
||||
alpha = *nextBuffer++;
|
||||
if (gDebugTextOn) {
|
||||
gDPSetEnvColor((*dList)++, red, green, blue, alpha);
|
||||
}
|
||||
break;
|
||||
case 0x85:
|
||||
red = *nextBuffer++;
|
||||
green = *nextBuffer++;
|
||||
blue = *nextBuffer++;
|
||||
alpha = *nextBuffer++;
|
||||
if (!gDebugTextOn) {
|
||||
gDPSetPrimColor((*dList)++, 0, 0, red, green, blue, alpha);
|
||||
}
|
||||
break;
|
||||
case 0x82:
|
||||
if (!gDebugTextOn) {
|
||||
debug_text_background(dList, D_80127CB0, D_80127CB2, gDebugTextX, gDebugTextY + 10);
|
||||
}
|
||||
gDebugTextX = *nextBuffer++;
|
||||
gDebugTextX |= *nextBuffer++ << 8;
|
||||
gDebugTextY = *nextBuffer++;
|
||||
gDebugTextY |= *nextBuffer++ << 8;
|
||||
D_80127CB0 = gDebugTextX;
|
||||
D_80127CB2 = gDebugTextY;
|
||||
break;
|
||||
switch (bufferValue) {
|
||||
case 0x83:
|
||||
D_80127CB4 = 0;
|
||||
break;
|
||||
case 0x84:
|
||||
D_80127CB4 = 1;
|
||||
break;
|
||||
case 0x81:
|
||||
red = buffer[0];
|
||||
green = buffer[1];
|
||||
blue = buffer[2];
|
||||
alpha = buffer[3];
|
||||
buffer += 4;
|
||||
if (gDebugTextOn) {
|
||||
gDPSetEnvColor((*dList)++, red, green, blue, alpha);
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
case 0x85:
|
||||
red = buffer[0];
|
||||
green = buffer[1];
|
||||
blue = buffer[2];
|
||||
alpha = buffer[3];
|
||||
buffer += 4;
|
||||
if (!gDebugTextOn) {
|
||||
gDPSetPrimColor((*dList)++, 0, 0, red, green, blue, alpha);
|
||||
}
|
||||
break;
|
||||
case 0x82:
|
||||
if (!gDebugTextOn) {
|
||||
debug_text_background(dList, D_80127CB0, D_80127CB2, gDebugTextX, gDebugTextY + 10);
|
||||
}
|
||||
gDebugTextX = buffer[0];
|
||||
gDebugTextX |= buffer[1] << 8;
|
||||
gDebugTextY = buffer[2];
|
||||
gDebugTextY |= buffer[3] << 8;
|
||||
D_80127CB0 = gDebugTextX;
|
||||
D_80127CB2 = gDebugTextY;
|
||||
buffer += 4;
|
||||
break;
|
||||
case 0x20:
|
||||
xOffset = 6;
|
||||
if (*buffer != 0x20) {
|
||||
xOffset = debug_text_character(dList, *buffer);
|
||||
break;
|
||||
case 10:
|
||||
if (!gDebugTextOn) {
|
||||
debug_text_background(dList, D_80127CB0, D_80127CB2, gDebugTextX, gDebugTextY + 10);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
switch (*buffer) {
|
||||
case 10:
|
||||
if (!gDebugTextOn) {
|
||||
debug_text_background(dList, D_80127CB0, D_80127CB2, gDebugTextX, gDebugTextY + 10);
|
||||
}
|
||||
debug_text_newline();
|
||||
D_80127CB0 = gDebugTextX;
|
||||
D_80127CB2 = gDebugTextY;
|
||||
break;
|
||||
case 9:
|
||||
if (!(gDebugTextX % 32)) {
|
||||
xOffset = 32;
|
||||
} else {
|
||||
xOffset = 32 - (gDebugTextX % 32);
|
||||
}
|
||||
break;
|
||||
}
|
||||
debug_text_newline();
|
||||
D_80127CB0 = gDebugTextX;
|
||||
D_80127CB2 = gDebugTextY;
|
||||
break;
|
||||
case 9:
|
||||
if (!(gDebugTextX % 32)) {
|
||||
xOffset = 32;
|
||||
} else {
|
||||
xOffset = 32 - (gDebugTextX % 32);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
xOffset = debug_text_character(dList, bufferValue);
|
||||
break;
|
||||
}
|
||||
var_a1 = gDebugScreenWidth - 16;
|
||||
if (D_80127CB4 != 0 && *buffer >= 32 && *buffer < 0x80) {
|
||||
|
||||
if (D_80127CB4 != 0 && bufferValue >= 32 && bufferValue < 0x80) {
|
||||
xOffset = 7;
|
||||
}
|
||||
gDebugTextX += xOffset;
|
||||
if (var_a1 < gDebugTextX) {
|
||||
if ((gDebugScreenWidth - 16) < gDebugTextX) {
|
||||
if (!gDebugTextOn) {
|
||||
debug_text_background(dList, D_80127CB0, D_80127CB2, gDebugTextX, gDebugTextY + 10);
|
||||
}
|
||||
@@ -442,13 +438,12 @@ s32 func_800B653C(Gfx **dList, char *buffer) {
|
||||
D_80127CB0 = gDebugTextX;
|
||||
D_80127CB2 = gDebugTextY;
|
||||
}
|
||||
*buffer = *nextBuffer++;
|
||||
bufferValue = *buffer;
|
||||
buffer++;
|
||||
}
|
||||
return nextBuffer - bufferSave;
|
||||
|
||||
return buffer - bufferCopy;
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/printf/func_800B653C.s")
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Render the background for the debug text.
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ void debug_text_bounds(void);
|
||||
void debug_text_origin(void);
|
||||
void debug_text_newline(void);
|
||||
|
||||
s32 func_800B653C(Gfx**, char*);
|
||||
s32 func_800B653C(Gfx**, u8*);
|
||||
int vsprintf(char *s, const char *fmt, ...);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user