1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 15:04:31 +00:00

Improve gfxprint documentation and strings (#1028)

* Improve gfxprint documentation and strings

* Add GFXP_UNUSED_CHAR and rename bss variable
This commit is contained in:
Roman971 2021-11-28 14:48:17 +01:00 committed by GitHub
parent 1fa6e3874b
commit 54d77c71f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 508 additions and 387 deletions

View file

@ -3,71 +3,75 @@
static GlobalContext* sGlobalCtx;
char* D_8012CEE0[] = { "\x8Cキ-フレ-ム\x8Dガ" };
const char* D_8012CEE4 = "\x8Dタリマセン。";
const char* D_8012CEE8 = "\x8Dサイセイデキマセン";
const char* D_8012CEEC = "\x8Dサイセイシュウリョウ";
const char* D_8012CEF0 = "\x8Dサイセイチュウ!";
// TODO: cleanup these arrays and UB access
char* D_8012CEE0[] = { GFXP_KATAKANA "キ-フレ-ム" GFXP_HIRAGANA "ガ" };
char* D_8012CEE4 = GFXP_HIRAGANA "タリマセン。";
char* D_8012CEE8 = GFXP_HIRAGANA "サイセイデキマセン";
char* D_8012CEEC = GFXP_HIRAGANA "サイセイシュウリョウ";
char* D_8012CEF0 = GFXP_HIRAGANA "サイセイチュウ!";
const char* D_8012CEF4 = "DEMO CAMERA TOOL";
const char* D_8012CEF8[] = { "\x8Dモウハイリマセン", "\x8Dトウロク テンメ", "\x8Dヘンコウ / " };
const char* D_8012CF04 = "> >";
const char* D_8012CF08 = "< <";
const char* D_8012CF0C = "< >";
const char* D_8012CF10 = "\x8C*プレイヤ-*";
const char* D_8012CF14 = "\x8C\Eモ-ド\x8D ソウタイ";
const char* D_8012CF18[] = { "\x8C\Eモ-ド\x8Dゼッタイ", "\x8Dガメン\x8C デモ", "\x8Dガメン フツウ" };
const char* D_8012CF24[] = { "\x8DPジカン MAX", "\x8Cリンク\x8D キオク", "\x8Cリンク\x8D ムシ" };
const char* D_8012CF30 = "\x8D*ミテルイチ*";
const char* D_8012CF34 = "\x8C*カメラ\x8Dイチ*";
const char* D_8012CF38 = "DEBUG CAMERA";
const char* D_8012CF3C = "\x8Cセンタ-/ロック";
const char* D_8012CF40 = "\x8Cセンタ-/フリ-";
char* D_8012CEF4 = "DEMO CAMERA TOOL";
char* D_8012CEF8[] = { GFXP_HIRAGANA "モウハイリマセン", GFXP_HIRAGANA "トウロク テンメ", GFXP_HIRAGANA "ヘンコウ / " };
char* D_8012CF04 = "> >";
char* D_8012CF08 = "< <";
char* D_8012CF0C = "< >";
char* D_8012CF10 = GFXP_KATAKANA "*プレイヤ-*";
char* D_8012CF14 = GFXP_KATAKANA "Eモ-ド" GFXP_HIRAGANA " ソウタイ";
char* D_8012CF18[] = { GFXP_KATAKANA "Eモ-ド" GFXP_HIRAGANA "ゼッタイ", GFXP_HIRAGANA "ガメン" GFXP_KATAKANA " デモ",
GFXP_HIRAGANA "ガメン フツウ" };
char* D_8012CF24[] = { GFXP_HIRAGANA "Pジカン MAX", GFXP_KATAKANA "リンク" GFXP_HIRAGANA " キオク",
GFXP_KATAKANA "リンク" GFXP_HIRAGANA " ムシ" };
char* D_8012CF30 = GFXP_HIRAGANA "*ミテルイチ*";
char* D_8012CF34 = GFXP_KATAKANA "*カメラ" GFXP_HIRAGANA "イチ*";
char* D_8012CF38 = "DEBUG CAMERA";
char* D_8012CF3C = GFXP_KATAKANA "センタ-/ロック";
char* D_8012CF40 = GFXP_KATAKANA "センタ-/フリ-";
const char* D_8012CF44 = "DEMO CONTROL";
const char* D_8012CF48 = "\x8Cメモリ\x8Dガタリマセン";
const char* D_8012CF4C = "p";
const char* D_8012CF50[] = { "e", "s", "l", "c" };
char* D_8012CF44 = "DEMO CONTROL";
char* D_8012CF48 = GFXP_KATAKANA "メモリ" GFXP_HIRAGANA "ガタリマセン";
char* D_8012CF4C = "p";
char* D_8012CF50[] = { "e", "s", "l", "c" };
const char* D_8012CF60[] = { "\x8Cメモリパック" }; // "Mempak"
const char* D_8012CF64 = "\x8Cセーブ"; // "Save"
const char* D_8012CF68 = "\x8Cロード"; // "Load"
const char* D_8012CF6C = "\x8Cクリア-"; // "Clear"
const char* D_8012CF70 = "\x8Dヲヌカナイデネ";
char* D_8012CF60[] = { GFXP_KATAKANA "メモリパック" }; // "Mempak"
char* D_8012CF64 = GFXP_KATAKANA "セーブ"; // "Save"
char* D_8012CF68 = GFXP_KATAKANA "ロード"; // "Load"
char* D_8012CF6C = GFXP_KATAKANA "クリア-"; // "Clear"
char* D_8012CF70 = GFXP_HIRAGANA "ヲヌカナイデネ";
const char* D_8012CF74 = "FREE BYTE";
const char* D_8012CF78 = "NEED BYTE";
const char* D_8012CF7C = "\x8C*メモリ-パック*";
const char* D_8012CF80 = "\x8Dヲミツケラレマセン";
char* D_8012CF84 = "\x8Cファイル \x8D";
const char* D_8012CF88[] = { "\x8Dシテモイイデスカ?", "\x8Dゲンザイヘンシュウチュウノ", "\x8Cファイル\x8Dハハキサレマス" };
const char* D_8012CF94 = "\x8Dハイ";
const char* D_8012CF98 = "\x8Dイイエ";
const char* D_8012CF9C[] = { "\x8Dシテイマス", "\x8Dウワガキ" };
const char* D_8012CFA4 = "\x8Dシマシタ";
const char* D_8012CFA8 = "USE BYTE";
const char* D_8012CFAC = "\x8Dニシッパイ";
char* D_8012CF74 = "FREE BYTE";
char* D_8012CF78 = "NEED BYTE";
char* D_8012CF7C = GFXP_KATAKANA "*メモリ-パック*";
char* D_8012CF80 = GFXP_HIRAGANA "ヲミツケラレマセン";
char* D_8012CF84 = GFXP_KATAKANA "ファイル " GFXP_HIRAGANA "";
char* D_8012CF88[] = { GFXP_HIRAGANA "シテモイイデスカ?", GFXP_HIRAGANA "ゲンザイヘンシュウチュウノ",
GFXP_KATAKANA "ファイル" GFXP_HIRAGANA "ハハキサレマス" };
char* D_8012CF94 = GFXP_HIRAGANA "ハイ";
char* D_8012CF98 = GFXP_HIRAGANA "イイエ";
char* D_8012CF9C[] = { GFXP_HIRAGANA "シテイマス", GFXP_HIRAGANA "ウワガキ" };
char* D_8012CFA4 = GFXP_HIRAGANA "シマシタ";
char* D_8012CFA8 = "USE BYTE";
char* D_8012CFAC = GFXP_HIRAGANA "ニシッパイ";
const char* D_8012CFB0 = "\x8C\Eモ-ド\x8D コテイ";
char D_8012CFB4[] = "\x8Cフレ-ム ";
char D_8012CFC4[] = "\x8Cキ- / ";
char D_8012CFD0[] = "\x8D(センタ-テン)\0\0\0\0\0";
char D_8012CFE4[] = "\x8D(ゲンテン)\0\0\0\0\0\0";
char D_8012CFF8[] = "\x8C(プレイヤ-)\0\0\0\0\0";
char D_8012D00C[] = "\x8D(イチアワセ)\0\0\0\0\0\0";
char D_8012D020[] = "\x8D(セッテイ)\0\0\0\0\0\0\0\0";
char D_8012D034[] = "\x8D(キャッカン)\0\0\0\0\0\0";
char D_8012D048[] = "\x8CポイントNo. \0\0\0";
char D_8012D05C[] = "\x8Dガカク \0\0\0";
char D_8012D070[] = "\x8CNフレ-ム \0\0\0\0";
char D_8012D084[] = "\x8DZカイテン \0\0\0";
char D_8012D098[] = "\x8Cモ-ド \0\0\0\0";
char D_8012D0AC[] = " R\x8Dチュウシン \0\0\0";
char* D_8012CFB0 = GFXP_KATAKANA "Eモ-ド" GFXP_HIRAGANA " コテイ";
char D_8012CFB4[] = GFXP_KATAKANA "フレ-ム ";
char D_8012CFC4[] = GFXP_KATAKANA "キ- / ";
char D_8012CFD0[] = GFXP_HIRAGANA "(センタ-テン)\0\0\0\0\0";
char D_8012CFE4[] = GFXP_HIRAGANA "(ゲンテン)\0\0\0\0\0\0";
char D_8012CFF8[] = GFXP_KATAKANA "(プレイヤ-)\0\0\0\0\0";
char D_8012D00C[] = GFXP_HIRAGANA "(イチアワセ)\0\0\0\0\0\0";
char D_8012D020[] = GFXP_HIRAGANA "(セッテイ)\0\0\0\0\0\0\0\0";
char D_8012D034[] = GFXP_HIRAGANA "(キャッカン)\0\0\0\0\0\0";
char D_8012D048[] = GFXP_KATAKANA "ポイントNo. \0\0\0";
char D_8012D05C[] = GFXP_HIRAGANA "ガカク \0\0\0";
char D_8012D070[] = GFXP_KATAKANA "Nフレ-ム \0\0\0\0";
char D_8012D084[] = GFXP_HIRAGANA "Zカイテン \0\0\0";
char D_8012D098[] = GFXP_KATAKANA "モ-ド \0\0\0\0";
char D_8012D0AC[] = " R" GFXP_HIRAGANA "チュウシン \0\0\0";
char D_8012D0C0[] = "\x8DPジカン \0\0";
char D_8012D0D4[] = "\x8Dキョリ \0";
char D_8012D0E4[] = "\x8DXカイテン \0\0";
char D_8012D0F8[] = "\x8DYカイテン \0\0";
char D_8012D0C0[] = GFXP_HIRAGANA "Pジカン \0\0";
char D_8012D0D4[] = GFXP_HIRAGANA "キョリ \0";
char D_8012D0E4[] = GFXP_HIRAGANA "Xカイテン \0\0";
char D_8012D0F8[] = GFXP_HIRAGANA "Yカイテン \0\0";
#define ACTION_E 0
#define ACTION_SAVE 1
@ -1713,9 +1717,9 @@ void DbCamera_PrintAllCuts(Camera* cam) {
osSyncPrintf("@@@\n@@@\n@@@/* ****** spline point data ** finish! ***** */\n@@@\n");
}
char D_8012D114[] = "\x8Cフレ-ム ";
char D_8012D128[] = "\x8Cト-タル ";
char D_8012D13C[] = "\x8Cキ- / ";
char D_8012D114[] = GFXP_KATAKANA "フレ-ム ";
char D_8012D128[] = GFXP_KATAKANA "ト-タル ";
char D_8012D13C[] = GFXP_KATAKANA "キ- / ";
s32 func_800B91B0(Camera* cam, DbCamera* dbCamera) {
s32 pointCount;

View file

@ -1,9 +1,5 @@
#include "global.h"
// .bss
u8 D_801755F0;
// .data
u16 sGfxPrintFontTLUT[64] = {
0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000,
0xFFFF, 0x0000, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000,
@ -12,12 +8,12 @@ u16 sGfxPrintFontTLUT[64] = {
0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};
u16 sGfxPrintUnkTLUT[16] = {
u16 sGfxPrintRainbowTLUT[16] = {
0xF801, 0xFBC1, 0xFFC1, 0x07C1, 0x0421, 0x003F, 0x803F, 0xF83F,
0xF801, 0xFBC1, 0xFFC1, 0x07C1, 0x0421, 0x003F, 0x803F, 0xF83F,
};
u8 sGfxPrintUnkData[8] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
u8 sGfxPrintRainbowData[8] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
u8 sGfxPrintFontData[(16 * 256) / 2] = {
0x00, 0xDF, 0xFD, 0x00, 0x0A, 0xEE, 0xFF, 0xA0, 0x0D, 0xF2, 0x2D, 0xD0, 0x06, 0x61, 0x1D, 0xC0, 0x01, 0x12, 0x2D,
@ -130,38 +126,41 @@ u8 sGfxPrintFontData[(16 * 256) / 2] = {
0x1B, 0xAA, 0x40, 0x21, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
void GfxPrint_InitDlist(GfxPrint* this) {
// Can be used to set GFXP_FLAG_ENLARGE by default
static u8 sDefaultSpecialFlags;
void GfxPrint_Setup(GfxPrint* this) {
s32 width = 16;
s32 height = 256;
s32 i;
gDPPipeSync(this->dlist++);
gDPSetOtherMode(this->dlist++,
gDPPipeSync(this->dList++);
gDPSetOtherMode(this->dList++,
G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_IA16 | G_TL_TILE |
G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
G_AC_NONE | G_ZS_PRIM | G_RM_XLU_SURF | G_RM_XLU_SURF2);
gDPSetCombineMode(this->dlist++, G_CC_DECALRGBA, G_CC_DECALRGBA);
gDPLoadTextureBlock_4b(this->dlist++, sGfxPrintFontData, G_IM_FMT_CI, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP,
gDPSetCombineMode(this->dList++, G_CC_DECALRGBA, G_CC_DECALRGBA);
gDPLoadTextureBlock_4b(this->dList++, sGfxPrintFontData, G_IM_FMT_CI, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTLUT(this->dlist++, 64, 256, sGfxPrintFontTLUT);
gDPLoadTLUT(this->dList++, 64, 256, sGfxPrintFontTLUT);
for (i = 1; i < 4; i++) {
gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2, i, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
gDPSetTile(this->dList++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2, i, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
gDPSetTileSize(this->dlist++, i * 2, 0, 0, 60, 1020);
gDPSetTileSize(this->dList++, i * 2, 0, 0, 60, 1020);
}
gDPSetColor(this->dlist++, G_SETPRIMCOLOR, this->color.rgba);
gDPSetColor(this->dList++, G_SETPRIMCOLOR, this->color.rgba);
gDPLoadMultiTile_4b(this->dlist++, sGfxPrintUnkData, 0, 1, G_IM_FMT_CI, 2, 8, 0, 0, 1, 7, 4,
gDPLoadMultiTile_4b(this->dList++, sGfxPrintRainbowData, 0, 1, G_IM_FMT_CI, 2, 8, 0, 0, 1, 7, 4,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 1, 3, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTLUT(this->dlist++, 16, 320, sGfxPrintUnkTLUT);
gDPLoadTLUT(this->dList++, 16, 320, sGfxPrintRainbowTLUT);
for (i = 1; i < 4; i++) {
gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2 + 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 3,
gDPSetTile(this->dList++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2 + 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 3,
G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 1, G_TX_NOLOD);
gDPSetTileSize(this->dlist++, i * 2 + 1, 0, 0, 4, 28);
gDPSetTileSize(this->dList++, i * 2 + 1, 0, 0, 4, 28);
}
}
@ -170,64 +169,64 @@ void GfxPrint_SetColor(GfxPrint* this, u32 r, u32 g, u32 b, u32 a) {
this->color.g = g;
this->color.b = b;
this->color.a = a;
gDPPipeSync(this->dlist++);
gDPSetColor(this->dlist++, G_SETPRIMCOLOR, this->color.rgba);
gDPPipeSync(this->dList++);
gDPSetColor(this->dList++, G_SETPRIMCOLOR, this->color.rgba);
}
void GfxPrint_SetPosPx(GfxPrint* this, s32 x, s32 y) {
this->posX = this->baseX + (x << 2);
this->posY = this->baseY + (y << 2);
this->posX = this->baseX + (x * 4);
this->posY = this->baseY + (y * 4);
}
void GfxPrint_SetPos(GfxPrint* this, s32 x, s32 y) {
GfxPrint_SetPosPx(this, x << 3, y << 3);
GfxPrint_SetPosPx(this, x * 8, y * 8);
}
void GfxPrint_SetBasePosPx(GfxPrint* this, s32 x, s32 y) {
this->baseX = x << 2;
this->baseY = y << 2;
this->baseX = x * 4;
this->baseY = y * 4;
}
void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c) {
u32 tile = (c & 0xFF) * 2;
if (this->flag & GFXPRINT_UPDATE_MODE) {
this->flag &= ~GFXPRINT_UPDATE_MODE;
if (this->flags & GFXP_FLAG_UPDATE) {
this->flags &= ~GFXP_FLAG_UPDATE;
gDPPipeSync(this->dlist++);
if (this->flag & GFXPRINT_USE_RGBA16) {
gDPSetTextureLUT(this->dlist++, G_TT_RGBA16);
gDPSetCycleType(this->dlist++, G_CYC_2CYCLE);
gDPSetRenderMode(this->dlist++, G_RM_OPA_CI, G_RM_XLU_SURF2);
gDPSetCombineMode(this->dlist++, G_CC_INTERFERENCE, G_CC_PASS2);
gDPPipeSync(this->dList++);
if (this->flags & GFXP_FLAG_RAINBOW) {
gDPSetTextureLUT(this->dList++, G_TT_RGBA16);
gDPSetCycleType(this->dList++, G_CYC_2CYCLE);
gDPSetRenderMode(this->dList++, G_RM_OPA_CI, G_RM_XLU_SURF2);
gDPSetCombineMode(this->dList++, G_CC_INTERFERENCE, G_CC_PASS2);
} else {
gDPSetTextureLUT(this->dlist++, G_TT_IA16);
gDPSetCycleType(this->dlist++, G_CYC_1CYCLE);
gDPSetRenderMode(this->dlist++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetCombineMode(this->dlist++, G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM);
gDPSetTextureLUT(this->dList++, G_TT_IA16);
gDPSetCycleType(this->dList++, G_CYC_1CYCLE);
gDPSetRenderMode(this->dList++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetCombineMode(this->dList++, G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM);
}
}
if (this->flag & GFXPRINT_FLAG4) {
gDPSetColor(this->dlist++, G_SETPRIMCOLOR, 0);
if (this->flags & GFXP_FLAG_SHADOW) {
gDPSetColor(this->dList++, G_SETPRIMCOLOR, 0);
if (this->flag & GFXPRINT_FLAG64) {
gSPTextureRectangle(this->dlist++, (this->posX + 4) << 1, (this->posY + 4) << 1, (this->posX + 4 + 32) << 1,
if (this->flags & GFXP_FLAG_ENLARGE) {
gSPTextureRectangle(this->dList++, (this->posX + 4) << 1, (this->posY + 4) << 1, (this->posX + 4 + 32) << 1,
(this->posY + 4 + 32) << 1, tile, (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 9,
1 << 9);
} else {
gSPTextureRectangle(this->dlist++, this->posX + 4, this->posY + 4, this->posX + 4 + 32, this->posY + 4 + 32,
gSPTextureRectangle(this->dList++, this->posX + 4, this->posY + 4, this->posX + 4 + 32, this->posY + 4 + 32,
tile, (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 10, 1 << 10);
}
gDPSetColor(this->dlist++, G_SETPRIMCOLOR, this->color.rgba);
gDPSetColor(this->dList++, G_SETPRIMCOLOR, this->color.rgba);
}
if (this->flag & GFXPRINT_FLAG64) {
gSPTextureRectangle(this->dlist++, (this->posX) << 1, (this->posY) << 1, (this->posX + 32) << 1,
if (this->flags & GFXP_FLAG_ENLARGE) {
gSPTextureRectangle(this->dList++, (this->posX) << 1, (this->posY) << 1, (this->posX + 32) << 1,
(this->posY + 32) << 1, tile, (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 9, 1 << 9);
} else {
gSPTextureRectangle(this->dlist++, this->posX, this->posY, this->posX + 32, this->posY + 32, tile,
gSPTextureRectangle(this->dList++, this->posX, this->posY, this->posX + 32, this->posY + 32, tile,
(u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 10, 1 << 10);
}
@ -238,11 +237,11 @@ void GfxPrint_PrintChar(GfxPrint* this, u8 c) {
u8 charParam = c;
if (c == ' ') {
this->posX += 0x20;
} else if (c > 0x20 && c < 0x7F) {
this->posX += 32;
} else if (c > ' ' && c < 0x7F) {
GfxPrint_PrintCharImpl(this, charParam);
} else if (c >= 0xA0 && c < 0xE0) {
if (this->flag & GFXPRINT_FLAG1) {
if (this->flags & GFXP_FLAG_HIRAGANA) {
if (c < 0xC0) {
charParam = c - 0x20;
} else {
@ -252,91 +251,94 @@ void GfxPrint_PrintChar(GfxPrint* this, u8 c) {
GfxPrint_PrintCharImpl(this, charParam);
} else {
switch (c) {
case 0:
case '\0':
break;
case '\n':
this->posY += 0x20;
this->posY += 32;
case '\r':
this->posX = this->baseX;
break;
case '\t':
do {
GfxPrint_PrintCharImpl(this, 0x20);
GfxPrint_PrintCharImpl(this, ' ');
} while ((this->posX - this->baseX) % 256);
break;
case 0x8D:
this->flag |= GFXPRINT_FLAG1;
case GFXP_HIRAGANA_CHAR:
this->flags |= GFXP_FLAG_HIRAGANA;
break;
case 0x8C:
this->flag &= ~GFXPRINT_FLAG1;
case GFXP_KATAKANA_CHAR:
this->flags &= ~GFXP_FLAG_HIRAGANA;
break;
case 0x8B:
this->flag |= GFXPRINT_USE_RGBA16;
this->flag |= GFXPRINT_UPDATE_MODE;
case GFXP_RAINBOW_ON_CHAR:
this->flags |= GFXP_FLAG_RAINBOW;
this->flags |= GFXP_FLAG_UPDATE;
break;
case 0x8A:
this->flag &= ~GFXPRINT_USE_RGBA16;
this->flag |= GFXPRINT_UPDATE_MODE;
case GFXP_RAINBOW_OFF_CHAR:
this->flags &= ~GFXP_FLAG_RAINBOW;
this->flags |= GFXP_FLAG_UPDATE;
break;
case 0x8E:
case GFXP_UNUSED_CHAR:
default:
break;
}
}
}
void GfxPrint_PrintStringWithSize(GfxPrint* this, const void* buffer, size_t charSize, size_t charCount) {
void GfxPrint_PrintStringWithSize(GfxPrint* this, const void* buffer, u32 charSize, u32 charCount) {
const char* str = (const char*)buffer;
size_t count = charSize * charCount;
u32 count = charSize * charCount;
while (count) {
GfxPrint_PrintChar(this, *str++);
while (count != 0) {
GfxPrint_PrintChar(this, *(str++));
count--;
}
}
void GfxPrint_PrintString(GfxPrint* this, const char* str) {
while (*str) {
while (*str != '\0') {
GfxPrint_PrintChar(this, *(str++));
}
}
GfxPrint* GfxPrint_Callback(GfxPrint* this, const char* str, size_t size) {
void* GfxPrint_Callback(void* arg, const char* str, u32 size) {
GfxPrint* this = arg;
GfxPrint_PrintStringWithSize(this, str, sizeof(char), size);
return this;
}
void GfxPrint_Init(GfxPrint* this) {
this->flag &= ~GFXPRINT_OPEN;
this->flags &= ~GFXP_FLAG_OPEN;
this->callback = &GfxPrint_Callback;
this->dlist = NULL;
this->callback = GfxPrint_Callback;
this->dList = NULL;
this->posX = 0;
this->posY = 0;
this->baseX = 0;
this->baseY = 0;
this->color.rgba = 0;
this->flag &= ~GFXPRINT_FLAG1;
this->flag &= ~GFXPRINT_USE_RGBA16;
this->flag |= GFXPRINT_FLAG4;
this->flag |= GFXPRINT_UPDATE_MODE;
this->flags &= ~GFXP_FLAG_HIRAGANA;
this->flags &= ~GFXP_FLAG_RAINBOW;
this->flags |= GFXP_FLAG_SHADOW;
this->flags |= GFXP_FLAG_UPDATE;
if ((D_801755F0 & GFXPRINT_FLAG64)) {
this->flag |= GFXPRINT_FLAG64; //? dsdx/dtdy
if (sDefaultSpecialFlags & GFXP_FLAG_ENLARGE) {
this->flags |= GFXP_FLAG_ENLARGE;
} else {
this->flag &= ~GFXPRINT_FLAG64;
this->flags &= ~GFXP_FLAG_ENLARGE;
}
}
void GfxPrint_Destroy(GfxPrint* this) {
}
void GfxPrint_Open(GfxPrint* this, Gfx* dlist) {
if (!(this->flag & GFXPRINT_OPEN)) {
this->flag |= GFXPRINT_OPEN;
this->dlist = dlist;
GfxPrint_InitDlist(this);
void GfxPrint_Open(GfxPrint* this, Gfx* dList) {
if (!(this->flags & GFXP_FLAG_OPEN)) {
this->flags |= GFXP_FLAG_OPEN;
this->dList = dList;
GfxPrint_Setup(this);
} else {
osSyncPrintf("gfxprint_open:2重オープンです\n");
}
@ -345,15 +347,16 @@ void GfxPrint_Open(GfxPrint* this, Gfx* dlist) {
Gfx* GfxPrint_Close(GfxPrint* this) {
Gfx* ret;
this->flag &= ~GFXPRINT_OPEN;
gDPPipeSync(this->dlist++);
ret = this->dlist;
this->dlist = NULL;
this->flags &= ~GFXP_FLAG_OPEN;
gDPPipeSync(this->dList++);
ret = this->dList;
this->dList = NULL;
return ret;
}
s32 GfxPrint_VPrintf(GfxPrint* this, const char* fmt, va_list args) {
return PrintUtils_VPrintf((PrintCallback*)&this->callback, fmt, args);
return PrintUtils_VPrintf(&this->callback, fmt, args);
}
s32 GfxPrint_Printf(GfxPrint* this, const char* fmt, ...) {

View file

@ -79,7 +79,7 @@ void func_8006376C(u8 x, u8 y, u8 colorId, const char* text) {
}
// Draw Text
void func_80063828(GfxPrint* gfxPrint) {
void func_80063828(GfxPrint* printer) {
s32 i;
Color_RGBA8* color;
PrintTextBuffer* buffer;
@ -92,9 +92,9 @@ void func_80063828(GfxPrint* gfxPrint) {
text = buffer->text;
color = &printTextColors[buffer->colorId];
GfxPrint_SetColor(gfxPrint, color->r, color->g, color->b, color->a);
GfxPrint_SetPos(gfxPrint, buffer->x, buffer->y);
GfxPrint_Printf(gfxPrint, "%s", text);
GfxPrint_SetColor(printer, color->r, color->g, color->b, color->a);
GfxPrint_SetPos(printer, buffer->x, buffer->y);
GfxPrint_Printf(printer, "%s", text);
i += 1;
} while (i < D_8011E0B0);
}
@ -186,7 +186,7 @@ void func_8006390C(Input* input) {
}
// Draw Memory Viewer
void func_80063C04(GfxPrint* gfxPrint) {
void func_80063C04(GfxPrint* printer) {
s32 i;
s32 page = (gGameInfo->regPage * REG_PER_PAGE) - REG_PER_PAGE;
s32 regGroup = (gGameInfo->regGroup * REG_PAGES + gGameInfo->regPage) * REG_PER_PAGE - REG_PER_PAGE;
@ -197,16 +197,16 @@ void func_80063C04(GfxPrint* gfxPrint) {
name[0] = 'R';
name[1] = regChar[gGameInfo->regGroup]; // r_group type char
name[2] = '\0';
GfxPrint_SetColor(gfxPrint, 0, 128, 128, 128);
GfxPrint_SetColor(printer, 0, 128, 128, 128);
for (i = 0; i != REG_PER_PAGE; i++) {
if (i == gGameInfo->regCur) {
GfxPrint_SetColor(gfxPrint, 0, 255, 255, 255);
GfxPrint_SetColor(printer, 0, 255, 255, 255);
}
GfxPrint_SetPos(gfxPrint, 3, i + 5);
GfxPrint_Printf(gfxPrint, "%s%02d%6d", &name, page + i, gGameInfo->data[i + regGroup]);
GfxPrint_SetPos(printer, 3, i + 5);
GfxPrint_Printf(printer, "%s%02d%6d", &name, page + i, gGameInfo->data[i + regGroup]);
if (i == gGameInfo->regCur) {
GfxPrint_SetColor(gfxPrint, 0, 128, 128, 128);
GfxPrint_SetColor(printer, 0, 128, 128, 128);
}
}
}
@ -214,27 +214,27 @@ void func_80063C04(GfxPrint* gfxPrint) {
void func_80063D7C(GraphicsContext* gfxCtx) {
Gfx* sp7C;
Gfx* sp78;
GfxPrint gfxPrint;
GfxPrint printer;
Gfx* tempRet;
OPEN_DISPS(gfxCtx, "../z_debug.c", 628);
GfxPrint_Init(&gfxPrint);
GfxPrint_Init(&printer);
sp78 = POLY_OPA_DISP;
tempRet = Graph_GfxPlusOne(POLY_OPA_DISP);
gSPDisplayList(OVERLAY_DISP++, tempRet);
GfxPrint_Open(&gfxPrint, tempRet);
GfxPrint_Open(&printer, tempRet);
if ((OREG(0) == 1) || (OREG(0) == 8)) {
func_80063828(&gfxPrint);
func_80063828(&printer);
}
if (gGameInfo->regPage != 0) {
func_80063C04(&gfxPrint);
func_80063C04(&printer);
}
D_8011E0B0 = 0;
sp7C = GfxPrint_Close(&gfxPrint);
sp7C = GfxPrint_Close(&printer);
gSPEndDisplayList(sp7C++);
Graph_BranchDlist(sp78, sp7C);
POLY_OPA_DISP = sp7C;
@ -243,5 +243,5 @@ void func_80063D7C(GraphicsContext* gfxCtx) {
CLOSE_DISPS(gfxCtx, "../z_debug.c", 664);
GfxPrint_Destroy(&gfxPrint);
GfxPrint_Destroy(&printer);
}

View file

@ -777,8 +777,7 @@ void Environment_DisableUnderwaterLights(GlobalContext* globalCtx) {
void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint printer;
u32 time;
s32 pad;
s32 pad[2];
GfxPrint_Init(&printer);
GfxPrint_Open(&printer, *gfx);
@ -793,8 +792,7 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_Printf(&printer, "%s", "ZELDATIME ");
GfxPrint_SetColor(&printer, 255, 255, 255, 64);
time = gSaveContext.dayTime;
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * time / 60.0f));
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime) / 60.0f));
if ((gSaveContext.dayTime & 0x1F) >= 0x10 || gTimeIncrement >= 6) {
GfxPrint_Printf(&printer, "%s", ":");
@ -802,16 +800,14 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_Printf(&printer, "%s", " ");
}
time = gSaveContext.dayTime;
GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * time) % 60);
GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime)) % 60);
GfxPrint_SetColor(&printer, 255, 255, 55, 64);
GfxPrint_SetPos(&printer, 22, 9);
GfxPrint_Printf(&printer, "%s", "VRBOXTIME ");
GfxPrint_SetColor(&printer, 255, 255, 255, 64);
time = ((void)0, gSaveContext.skyboxTime);
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * time / 60.0f));
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.skyboxTime) / 60.0f));
if ((((void)0, gSaveContext.skyboxTime) & 0x1F) >= 0x10 || gTimeIncrement >= 6) {
GfxPrint_Printf(&printer, "%s", ":");
@ -819,8 +815,7 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_Printf(&printer, "%s", " ");
}
time = ((void)0, gSaveContext.skyboxTime);
GfxPrint_Printf(&printer, "%02d", (s16)(45.0f / 2048.0f * time) % 60);
GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.skyboxTime)) % 60);
GfxPrint_SetColor(&printer, 55, 255, 255, 64);
GfxPrint_SetPos(&printer, 22, 6);

View file

@ -82,7 +82,7 @@ void Moji_DrawChar(GraphicsContext* gfxCtx, char c) {
/**
* Does not work as is in most cases.
* Can work if the render mode, combiner and possibly other settings are set correctly.
* For example this works with the render mode used in `GfxPrint_InitDlist`,
* For example this works with the render mode used in `GfxPrint_Setup`,
* and `G_CC_MODULATEI_PRIM` for both combiner cycles.
*/
void Moji_DrawString(GraphicsContext* gfxCtx, const char* str) {