mirror of
https://github.com/zeldaret/mm.git
synced 2026-05-23 06:54:14 -04:00
147e4fcedc
* THA docs Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * format * namefixer * yada * remove zero pad comment * Update include/z64.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/thga.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * namefixer * bss * namefixer --------- Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
161 lines
4.5 KiB
C
161 lines
4.5 KiB
C
#include "z64debug_text.h"
|
|
#include "global.h"
|
|
|
|
typedef struct {
|
|
/* 0x0 */ u8 colorIndex;
|
|
/* 0x1 */ char text[11];
|
|
} DebugTextBufferEntry; // size = 0xC
|
|
|
|
typedef struct {
|
|
/* 0x0 */ u8 x;
|
|
/* 0x1 */ u8 y;
|
|
/* 0x2 */ u8 colorIndex;
|
|
/* 0x3 */ char text[41];
|
|
} DebugCamTextBufferEntry; // size = 0x2C
|
|
|
|
#define DEBUG_TEXT_DRAW_TEXT (1 << 0)
|
|
#define DEBUG_TEXT_DRAW_CAM_TEXT (1 << 1)
|
|
|
|
s32 sDebugTextDrawFlags = 0;
|
|
|
|
DebugTextBufferEntry sDebugTextBuffer[] = {
|
|
{ DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " },
|
|
{ DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " },
|
|
};
|
|
|
|
Color_RGBA8 sDebugTextColors[] = {
|
|
{ 0, 0, 0, 64 }, // DEBUG_TEXT_BLACK
|
|
{ 0, 0, 255, 64 }, // DEBUG_TEXT_BLUE
|
|
{ 255, 0, 0, 64 }, // DEBUG_TEXT_RED
|
|
{ 255, 0, 255, 64 }, // DEBUG_TEXT_PURPLE
|
|
{ 0, 255, 0, 64 }, // DEBUG_TEXT_GREEN
|
|
{ 0, 255, 255, 64 }, // DEBUG_TEXT_CYAN
|
|
{ 255, 255, 0, 64 }, // DEBUG_TEXT_YELLOW
|
|
{ 255, 255, 255, 64 }, // DEBUG_TEXT_WHITE
|
|
};
|
|
|
|
DebugCamTextBufferEntry sDebugCamTextBuffer[80];
|
|
|
|
s16 sDebugCamTextEntryCount = 0;
|
|
|
|
Color_RGBA8 sDebugCamTextColors[] = {
|
|
{ 255, 255, 32, 192 }, // DEBUG_CAM_TEXT_YELLOW
|
|
{ 255, 150, 128, 192 }, // DEBUG_CAM_TEXT_PEACH
|
|
{ 128, 96, 0, 64 }, // DEBUG_CAM_TEXT_BROWN
|
|
{ 192, 128, 16, 128 }, // DEBUG_CAM_TEXT_ORANGE
|
|
{ 255, 192, 32, 128 }, // DEBUG_CAM_TEXT_GOLD
|
|
{ 230, 230, 220, 64 }, // DEBUG_CAM_TEXT_WHITE
|
|
{ 128, 150, 255, 128 }, // DEBUG_CAM_TEXT_BLUE
|
|
{ 128, 255, 32, 128 }, // DEBUG_CAM_TEXT_GREEN
|
|
};
|
|
|
|
void Debug_ClearTextDrawFlags(void) {
|
|
sDebugTextDrawFlags = 0;
|
|
}
|
|
|
|
void Debug_ScreenText(s32 index, s32 colorIndex, const char* text) {
|
|
DebugTextBufferEntry* entry = &sDebugTextBuffer[index];
|
|
char* textDest = entry->text;
|
|
|
|
sDebugTextDrawFlags |= DEBUG_TEXT_DRAW_TEXT;
|
|
entry->colorIndex = colorIndex;
|
|
|
|
do {
|
|
*textDest++ = *text;
|
|
} while (*text++ != '\0');
|
|
}
|
|
|
|
void Debug_DrawScreenText(GfxPrint* printer) {
|
|
DebugTextBufferEntry* entry;
|
|
Color_RGBA8* color;
|
|
s32 y;
|
|
|
|
entry = sDebugTextBuffer;
|
|
for (y = 20; y < 20 + ARRAY_COUNT(sDebugTextBuffer); y++) {
|
|
GfxPrint_SetPos(printer, 26, y);
|
|
color = &sDebugTextColors[entry->colorIndex];
|
|
GfxPrint_SetColor(printer, color->r, color->g, color->b, color->a);
|
|
GfxPrint_Printf(printer, "%s", entry->text);
|
|
*entry->text = '\0';
|
|
entry++;
|
|
}
|
|
}
|
|
|
|
void DebugCamera_ScreenText(u8 x, u8 y, u8 colorIndex, const char* text) {
|
|
DebugCamTextBufferEntry* entry = &sDebugCamTextBuffer[sDebugCamTextEntryCount];
|
|
char* textDest;
|
|
s16 charCount;
|
|
|
|
sDebugTextDrawFlags |= DEBUG_TEXT_DRAW_CAM_TEXT;
|
|
if (sDebugCamTextEntryCount < ARRAY_COUNT(sDebugCamTextBuffer)) {
|
|
entry->x = x;
|
|
entry->y = y;
|
|
entry->colorIndex = colorIndex;
|
|
|
|
// Copy text into the entry, truncating if needed
|
|
charCount = 0;
|
|
textDest = entry->text;
|
|
|
|
while ((*textDest++ = *text++) != '\0') {
|
|
if (charCount++ >= ARRAY_COUNT(entry->text)) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
*textDest = '\0';
|
|
|
|
sDebugCamTextEntryCount++;
|
|
}
|
|
}
|
|
|
|
void DebugCamera_DrawScreenText(GfxPrint* printer) {
|
|
DebugCamTextBufferEntry* entry;
|
|
Color_RGBA8* color;
|
|
s32 i;
|
|
|
|
for (i = 0; i < sDebugCamTextEntryCount; i++) {
|
|
entry = &sDebugCamTextBuffer[i];
|
|
color = &sDebugCamTextColors[entry->colorIndex];
|
|
|
|
GfxPrint_SetColor(printer, color->r, color->g, color->b, color->a);
|
|
GfxPrint_SetPos(printer, entry->x, entry->y);
|
|
GfxPrint_Printf(printer, "%s", entry->text);
|
|
}
|
|
}
|
|
|
|
void Debug_DrawText(GraphicsContext* gfxCtx) {
|
|
Gfx* gfx;
|
|
Gfx* gfxHead;
|
|
GfxPrint printer;
|
|
|
|
if (THGA_GetRemaining(&gfxCtx->polyOpa) >= 0x2800) {
|
|
GfxPrint_Init(&printer);
|
|
|
|
OPEN_DISPS(gfxCtx);
|
|
|
|
gfxHead = POLY_OPA_DISP;
|
|
gfx = Graph_GfxPlusOne(gfxHead);
|
|
gSPDisplayList(DEBUG_DISP++, gfx);
|
|
|
|
GfxPrint_Open(&printer, gfx);
|
|
|
|
if (sDebugTextDrawFlags & DEBUG_TEXT_DRAW_CAM_TEXT) {
|
|
DebugCamera_DrawScreenText(&printer);
|
|
}
|
|
sDebugCamTextEntryCount = 0;
|
|
|
|
if (sDebugTextDrawFlags & DEBUG_TEXT_DRAW_TEXT) {
|
|
Debug_DrawScreenText(&printer);
|
|
}
|
|
|
|
gfx = GfxPrint_Close(&printer);
|
|
gSPEndDisplayList(gfx++);
|
|
Graph_BranchDlist(gfxHead, gfx);
|
|
POLY_OPA_DISP = gfx;
|
|
|
|
CLOSE_DISPS(gfxCtx);
|
|
|
|
GfxPrint_Destroy(&printer);
|
|
}
|
|
}
|