match: func_800B653C (#574)

* match: func_800B653C

* fix: func_800B653C
This commit is contained in:
Dominik Peters
2025-05-14 21:22:06 +02:00
committed by GitHub
parent de60cff244
commit 39b4e87474
3 changed files with 82 additions and 87 deletions
+6 -6
View File
@@ -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:
&emsp;&emsp;&emsp;&emsp;Decomp progress: 87.49%
&emsp;&emsp;&emsp;&emsp;Decomp progress: 87.61%
&emsp;&emsp;&emsp;&emsp;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
View File
@@ -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
View File
@@ -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