1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-11 11:33:48 +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

@ -2124,21 +2124,15 @@ void func_800FA3DC(void);
u8 func_800FAD34(void); u8 func_800FAD34(void);
void func_800FADF8(void); void func_800FADF8(void);
void func_800FAEB4(void); void func_800FAEB4(void);
void GfxPrint_InitDlist(GfxPrint*); void GfxPrint_SetColor(GfxPrint* this, u32 r, u32 g, u32 b, u32 a);
void GfxPrint_SetColor(GfxPrint*, u32, u32, u32, u32); void GfxPrint_SetPosPx(GfxPrint* this, s32 x, s32 y);
void GfxPrint_SetPosPx(GfxPrint*, s32, s32); void GfxPrint_SetPos(GfxPrint* this, s32 x, s32 y);
void GfxPrint_SetPos(GfxPrint*, s32, s32); void GfxPrint_SetBasePosPx(GfxPrint* this, s32 x, s32 y);
void GfxPrint_SetBasePosPx(GfxPrint*, s32, s32); void GfxPrint_Init(GfxPrint* this);
void GfxPrint_PrintCharImpl(GfxPrint*, u8); void GfxPrint_Destroy(GfxPrint* this);
void GfxPrint_PrintChar(GfxPrint*, u8); void GfxPrint_Open(GfxPrint* this, Gfx* dList);
void GfxPrint_PrintStringWithSize(GfxPrint*, const void*, size_t, size_t); Gfx* GfxPrint_Close(GfxPrint* this);
GfxPrint* GfxPrint_Callback(GfxPrint*, const char*, size_t); s32 GfxPrint_Printf(GfxPrint* this, const char* fmt, ...);
void GfxPrint_Init(GfxPrint*);
void GfxPrint_Destroy(GfxPrint*);
void GfxPrint_Open(GfxPrint*, Gfx*);
Gfx* GfxPrint_Close(GfxPrint*);
s32 GfxPrint_VPrintf(GfxPrint*, const char*, va_list);
s32 GfxPrint_Printf(GfxPrint*, const char*, ...);
void func_800FBCE0(); void func_800FBCE0();
void func_800FBFD8(void); void func_800FBFD8(void);
void* Overlay_AllocateAndLoad(u32 vRomStart, u32 vRomEnd, void* vRamStart, void* vRamEnd); void* Overlay_AllocateAndLoad(u32 vRomStart, u32 vRomEnd, void* vRamStart, void* vRamEnd);

View file

@ -1511,26 +1511,35 @@ typedef struct {
/* 0x38 */ void(*inputCallback)(); /* 0x38 */ void(*inputCallback)();
} FaultDrawer; // size = 0x3C } FaultDrawer; // size = 0x3C
typedef struct GfxPrint { typedef struct {
/* 0x00 */ struct GfxPrint* (*callback)(struct GfxPrint*, const char*, size_t); /* 0x00 */ PrintCallback callback;
/* 0x04 */ Gfx* dlist; /* 0x04 */ Gfx* dList;
/* 0x08 */ u16 posX; /* 0x08 */ u16 posX;
/* 0x0A */ u16 posY; /* 0x0A */ u16 posY;
/* 0x0C */ u16 baseX; /* 0x0C */ u16 baseX;
/* 0x0E */ u8 baseY; /* 0x0E */ u8 baseY;
/* 0x0F */ u8 flag; /* 0x0F */ u8 flags;
/* 0x10 */ Color_RGBA8_u32 color; /* 0x10 */ Color_RGBA8_u32 color;
/* 0x14 */ char unk_14[0x1C]; // unused /* 0x14 */ char unk_14[0x1C]; // unused
} GfxPrint; // size = 0x30 } GfxPrint; // size = 0x30
typedef enum { #define GFXP_UNUSED "\x8E"
GFXPRINT_FLAG1 = 1, #define GFXP_UNUSED_CHAR 0x8E
GFXPRINT_USE_RGBA16 = 2, #define GFXP_HIRAGANA "\x8D"
GFXPRINT_FLAG4 = 4, #define GFXP_HIRAGANA_CHAR 0x8D
GFXPRINT_UPDATE_MODE = 8, #define GFXP_KATAKANA "\x8C"
GFXPRINT_FLAG64 = 0x40, #define GFXP_KATAKANA_CHAR 0x8C
GFXPRINT_OPEN = 0x80 #define GFXP_RAINBOW_ON "\x8B"
} GfxPrintFlag; #define GFXP_RAINBOW_ON_CHAR 0x8B
#define GFXP_RAINBOW_OFF "\x8A"
#define GFXP_RAINBOW_OFF_CHAR 0x8A
#define GFXP_FLAG_HIRAGANA (1 << 0)
#define GFXP_FLAG_RAINBOW (1 << 1)
#define GFXP_FLAG_SHADOW (1 << 2)
#define GFXP_FLAG_UPDATE (1 << 3)
#define GFXP_FLAG_ENLARGE (1 << 6)
#define GFXP_FLAG_OPEN (1 << 7)
typedef struct StackEntry { typedef struct StackEntry {
/* 0x00 */ struct StackEntry* next; /* 0x00 */ struct StackEntry* next;

View file

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

View file

@ -1,9 +1,5 @@
#include "global.h" #include "global.h"
// .bss
u8 D_801755F0;
// .data
u16 sGfxPrintFontTLUT[64] = { u16 sGfxPrintFontTLUT[64] = {
0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 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, 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, 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,
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] = { u8 sGfxPrintFontData[(16 * 256) / 2] = {
0x00, 0xDF, 0xFD, 0x00, 0x0A, 0xEE, 0xFF, 0xA0, 0x0D, 0xF2, 0x2D, 0xD0, 0x06, 0x61, 0x1D, 0xC0, 0x01, 0x12, 0x2D, 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, 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 width = 16;
s32 height = 256; s32 height = 256;
s32 i; s32 i;
gDPPipeSync(this->dlist++); gDPPipeSync(this->dList++);
gDPSetOtherMode(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_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_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); G_AC_NONE | G_ZS_PRIM | G_RM_XLU_SURF | G_RM_XLU_SURF2);
gDPSetCombineMode(this->dlist++, G_CC_DECALRGBA, G_CC_DECALRGBA); 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, 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); 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++) { 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); 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); 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++) { 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); 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.g = g;
this->color.b = b; this->color.b = b;
this->color.a = a; this->color.a = a;
gDPPipeSync(this->dlist++); gDPPipeSync(this->dList++);
gDPSetColor(this->dlist++, G_SETPRIMCOLOR, this->color.rgba); gDPSetColor(this->dList++, G_SETPRIMCOLOR, this->color.rgba);
} }
void GfxPrint_SetPosPx(GfxPrint* this, s32 x, s32 y) { void GfxPrint_SetPosPx(GfxPrint* this, s32 x, s32 y) {
this->posX = this->baseX + (x << 2); this->posX = this->baseX + (x * 4);
this->posY = this->baseY + (y << 2); this->posY = this->baseY + (y * 4);
} }
void GfxPrint_SetPos(GfxPrint* this, s32 x, s32 y) { 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) { void GfxPrint_SetBasePosPx(GfxPrint* this, s32 x, s32 y) {
this->baseX = x << 2; this->baseX = x * 4;
this->baseY = y << 2; this->baseY = y * 4;
} }
void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c) { void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c) {
u32 tile = (c & 0xFF) * 2; u32 tile = (c & 0xFF) * 2;
if (this->flag & GFXPRINT_UPDATE_MODE) { if (this->flags & GFXP_FLAG_UPDATE) {
this->flag &= ~GFXPRINT_UPDATE_MODE; this->flags &= ~GFXP_FLAG_UPDATE;
gDPPipeSync(this->dlist++); gDPPipeSync(this->dList++);
if (this->flag & GFXPRINT_USE_RGBA16) { if (this->flags & GFXP_FLAG_RAINBOW) {
gDPSetTextureLUT(this->dlist++, G_TT_RGBA16); gDPSetTextureLUT(this->dList++, G_TT_RGBA16);
gDPSetCycleType(this->dlist++, G_CYC_2CYCLE); gDPSetCycleType(this->dList++, G_CYC_2CYCLE);
gDPSetRenderMode(this->dlist++, G_RM_OPA_CI, G_RM_XLU_SURF2); gDPSetRenderMode(this->dList++, G_RM_OPA_CI, G_RM_XLU_SURF2);
gDPSetCombineMode(this->dlist++, G_CC_INTERFERENCE, G_CC_PASS2); gDPSetCombineMode(this->dList++, G_CC_INTERFERENCE, G_CC_PASS2);
} else { } else {
gDPSetTextureLUT(this->dlist++, G_TT_IA16); gDPSetTextureLUT(this->dList++, G_TT_IA16);
gDPSetCycleType(this->dlist++, G_CYC_1CYCLE); gDPSetCycleType(this->dList++, G_CYC_1CYCLE);
gDPSetRenderMode(this->dlist++, G_RM_XLU_SURF, G_RM_XLU_SURF2); gDPSetRenderMode(this->dList++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetCombineMode(this->dlist++, G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM); gDPSetCombineMode(this->dList++, G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM);
} }
} }
if (this->flag & GFXPRINT_FLAG4) { if (this->flags & GFXP_FLAG_SHADOW) {
gDPSetColor(this->dlist++, G_SETPRIMCOLOR, 0); gDPSetColor(this->dList++, G_SETPRIMCOLOR, 0);
if (this->flag & GFXPRINT_FLAG64) { if (this->flags & GFXP_FLAG_ENLARGE) {
gSPTextureRectangle(this->dlist++, (this->posX + 4) << 1, (this->posY + 4) << 1, (this->posX + 4 + 32) << 1, 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, (this->posY + 4 + 32) << 1, tile, (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 9,
1 << 9); 1 << 9);
} else { } 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); 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) { if (this->flags & GFXP_FLAG_ENLARGE) {
gSPTextureRectangle(this->dlist++, (this->posX) << 1, (this->posY) << 1, (this->posX + 32) << 1, 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); (this->posY + 32) << 1, tile, (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1 << 9, 1 << 9);
} else { } 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); (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; u8 charParam = c;
if (c == ' ') { if (c == ' ') {
this->posX += 0x20; this->posX += 32;
} else if (c > 0x20 && c < 0x7F) { } else if (c > ' ' && c < 0x7F) {
GfxPrint_PrintCharImpl(this, charParam); GfxPrint_PrintCharImpl(this, charParam);
} else if (c >= 0xA0 && c < 0xE0) { } else if (c >= 0xA0 && c < 0xE0) {
if (this->flag & GFXPRINT_FLAG1) { if (this->flags & GFXP_FLAG_HIRAGANA) {
if (c < 0xC0) { if (c < 0xC0) {
charParam = c - 0x20; charParam = c - 0x20;
} else { } else {
@ -252,91 +251,94 @@ void GfxPrint_PrintChar(GfxPrint* this, u8 c) {
GfxPrint_PrintCharImpl(this, charParam); GfxPrint_PrintCharImpl(this, charParam);
} else { } else {
switch (c) { switch (c) {
case 0: case '\0':
break; break;
case '\n': case '\n':
this->posY += 0x20; this->posY += 32;
case '\r': case '\r':
this->posX = this->baseX; this->posX = this->baseX;
break; break;
case '\t': case '\t':
do { do {
GfxPrint_PrintCharImpl(this, 0x20); GfxPrint_PrintCharImpl(this, ' ');
} while ((this->posX - this->baseX) % 256); } while ((this->posX - this->baseX) % 256);
break; break;
case 0x8D: case GFXP_HIRAGANA_CHAR:
this->flag |= GFXPRINT_FLAG1; this->flags |= GFXP_FLAG_HIRAGANA;
break; break;
case 0x8C: case GFXP_KATAKANA_CHAR:
this->flag &= ~GFXPRINT_FLAG1; this->flags &= ~GFXP_FLAG_HIRAGANA;
break; break;
case 0x8B: case GFXP_RAINBOW_ON_CHAR:
this->flag |= GFXPRINT_USE_RGBA16; this->flags |= GFXP_FLAG_RAINBOW;
this->flag |= GFXPRINT_UPDATE_MODE; this->flags |= GFXP_FLAG_UPDATE;
break; break;
case 0x8A: case GFXP_RAINBOW_OFF_CHAR:
this->flag &= ~GFXPRINT_USE_RGBA16; this->flags &= ~GFXP_FLAG_RAINBOW;
this->flag |= GFXPRINT_UPDATE_MODE; this->flags |= GFXP_FLAG_UPDATE;
break; break;
case 0x8E: case GFXP_UNUSED_CHAR:
default: default:
break; 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; const char* str = (const char*)buffer;
size_t count = charSize * charCount; u32 count = charSize * charCount;
while (count) { while (count != 0) {
GfxPrint_PrintChar(this, *str++); GfxPrint_PrintChar(this, *(str++));
count--; count--;
} }
} }
void GfxPrint_PrintString(GfxPrint* this, const char* str) { void GfxPrint_PrintString(GfxPrint* this, const char* str) {
while (*str) { while (*str != '\0') {
GfxPrint_PrintChar(this, *(str++)); 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); GfxPrint_PrintStringWithSize(this, str, sizeof(char), size);
return this; return this;
} }
void GfxPrint_Init(GfxPrint* this) { void GfxPrint_Init(GfxPrint* this) {
this->flag &= ~GFXPRINT_OPEN; this->flags &= ~GFXP_FLAG_OPEN;
this->callback = &GfxPrint_Callback; this->callback = GfxPrint_Callback;
this->dlist = NULL; this->dList = NULL;
this->posX = 0; this->posX = 0;
this->posY = 0; this->posY = 0;
this->baseX = 0; this->baseX = 0;
this->baseY = 0; this->baseY = 0;
this->color.rgba = 0; this->color.rgba = 0;
this->flag &= ~GFXPRINT_FLAG1; this->flags &= ~GFXP_FLAG_HIRAGANA;
this->flag &= ~GFXPRINT_USE_RGBA16; this->flags &= ~GFXP_FLAG_RAINBOW;
this->flag |= GFXPRINT_FLAG4; this->flags |= GFXP_FLAG_SHADOW;
this->flag |= GFXPRINT_UPDATE_MODE; this->flags |= GFXP_FLAG_UPDATE;
if ((D_801755F0 & GFXPRINT_FLAG64)) { if (sDefaultSpecialFlags & GFXP_FLAG_ENLARGE) {
this->flag |= GFXPRINT_FLAG64; //? dsdx/dtdy this->flags |= GFXP_FLAG_ENLARGE;
} else { } else {
this->flag &= ~GFXPRINT_FLAG64; this->flags &= ~GFXP_FLAG_ENLARGE;
} }
} }
void GfxPrint_Destroy(GfxPrint* this) { void GfxPrint_Destroy(GfxPrint* this) {
} }
void GfxPrint_Open(GfxPrint* this, Gfx* dlist) { void GfxPrint_Open(GfxPrint* this, Gfx* dList) {
if (!(this->flag & GFXPRINT_OPEN)) { if (!(this->flags & GFXP_FLAG_OPEN)) {
this->flag |= GFXPRINT_OPEN; this->flags |= GFXP_FLAG_OPEN;
this->dlist = dlist; this->dList = dList;
GfxPrint_InitDlist(this); GfxPrint_Setup(this);
} else { } else {
osSyncPrintf("gfxprint_open:2重オープンです\n"); osSyncPrintf("gfxprint_open:2重オープンです\n");
} }
@ -345,15 +347,16 @@ void GfxPrint_Open(GfxPrint* this, Gfx* dlist) {
Gfx* GfxPrint_Close(GfxPrint* this) { Gfx* GfxPrint_Close(GfxPrint* this) {
Gfx* ret; Gfx* ret;
this->flag &= ~GFXPRINT_OPEN; this->flags &= ~GFXP_FLAG_OPEN;
gDPPipeSync(this->dlist++); gDPPipeSync(this->dList++);
ret = this->dlist; ret = this->dList;
this->dlist = NULL; this->dList = NULL;
return ret; return ret;
} }
s32 GfxPrint_VPrintf(GfxPrint* this, const char* fmt, va_list args) { 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, ...) { 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 // Draw Text
void func_80063828(GfxPrint* gfxPrint) { void func_80063828(GfxPrint* printer) {
s32 i; s32 i;
Color_RGBA8* color; Color_RGBA8* color;
PrintTextBuffer* buffer; PrintTextBuffer* buffer;
@ -92,9 +92,9 @@ void func_80063828(GfxPrint* gfxPrint) {
text = buffer->text; text = buffer->text;
color = &printTextColors[buffer->colorId]; color = &printTextColors[buffer->colorId];
GfxPrint_SetColor(gfxPrint, color->r, color->g, color->b, color->a); GfxPrint_SetColor(printer, color->r, color->g, color->b, color->a);
GfxPrint_SetPos(gfxPrint, buffer->x, buffer->y); GfxPrint_SetPos(printer, buffer->x, buffer->y);
GfxPrint_Printf(gfxPrint, "%s", text); GfxPrint_Printf(printer, "%s", text);
i += 1; i += 1;
} while (i < D_8011E0B0); } while (i < D_8011E0B0);
} }
@ -186,7 +186,7 @@ void func_8006390C(Input* input) {
} }
// Draw Memory Viewer // Draw Memory Viewer
void func_80063C04(GfxPrint* gfxPrint) { void func_80063C04(GfxPrint* printer) {
s32 i; s32 i;
s32 page = (gGameInfo->regPage * REG_PER_PAGE) - REG_PER_PAGE; s32 page = (gGameInfo->regPage * REG_PER_PAGE) - REG_PER_PAGE;
s32 regGroup = (gGameInfo->regGroup * REG_PAGES + 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[0] = 'R';
name[1] = regChar[gGameInfo->regGroup]; // r_group type char name[1] = regChar[gGameInfo->regGroup]; // r_group type char
name[2] = '\0'; 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++) { for (i = 0; i != REG_PER_PAGE; i++) {
if (i == gGameInfo->regCur) { 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_SetPos(printer, 3, i + 5);
GfxPrint_Printf(gfxPrint, "%s%02d%6d", &name, page + i, gGameInfo->data[i + regGroup]); GfxPrint_Printf(printer, "%s%02d%6d", &name, page + i, gGameInfo->data[i + regGroup]);
if (i == gGameInfo->regCur) { 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) { void func_80063D7C(GraphicsContext* gfxCtx) {
Gfx* sp7C; Gfx* sp7C;
Gfx* sp78; Gfx* sp78;
GfxPrint gfxPrint; GfxPrint printer;
Gfx* tempRet; Gfx* tempRet;
OPEN_DISPS(gfxCtx, "../z_debug.c", 628); OPEN_DISPS(gfxCtx, "../z_debug.c", 628);
GfxPrint_Init(&gfxPrint); GfxPrint_Init(&printer);
sp78 = POLY_OPA_DISP; sp78 = POLY_OPA_DISP;
tempRet = Graph_GfxPlusOne(POLY_OPA_DISP); tempRet = Graph_GfxPlusOne(POLY_OPA_DISP);
gSPDisplayList(OVERLAY_DISP++, tempRet); gSPDisplayList(OVERLAY_DISP++, tempRet);
GfxPrint_Open(&gfxPrint, tempRet); GfxPrint_Open(&printer, tempRet);
if ((OREG(0) == 1) || (OREG(0) == 8)) { if ((OREG(0) == 1) || (OREG(0) == 8)) {
func_80063828(&gfxPrint); func_80063828(&printer);
} }
if (gGameInfo->regPage != 0) { if (gGameInfo->regPage != 0) {
func_80063C04(&gfxPrint); func_80063C04(&printer);
} }
D_8011E0B0 = 0; D_8011E0B0 = 0;
sp7C = GfxPrint_Close(&gfxPrint); sp7C = GfxPrint_Close(&printer);
gSPEndDisplayList(sp7C++); gSPEndDisplayList(sp7C++);
Graph_BranchDlist(sp78, sp7C); Graph_BranchDlist(sp78, sp7C);
POLY_OPA_DISP = sp7C; POLY_OPA_DISP = sp7C;
@ -243,5 +243,5 @@ void func_80063D7C(GraphicsContext* gfxCtx) {
CLOSE_DISPS(gfxCtx, "../z_debug.c", 664); 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) { void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint printer; GfxPrint printer;
u32 time; s32 pad[2];
s32 pad;
GfxPrint_Init(&printer); GfxPrint_Init(&printer);
GfxPrint_Open(&printer, *gfx); GfxPrint_Open(&printer, *gfx);
@ -793,8 +792,7 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_Printf(&printer, "%s", "ZELDATIME "); GfxPrint_Printf(&printer, "%s", "ZELDATIME ");
GfxPrint_SetColor(&printer, 255, 255, 255, 64); GfxPrint_SetColor(&printer, 255, 255, 255, 64);
time = gSaveContext.dayTime; GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime) / 60.0f));
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * time / 60.0f));
if ((gSaveContext.dayTime & 0x1F) >= 0x10 || gTimeIncrement >= 6) { if ((gSaveContext.dayTime & 0x1F) >= 0x10 || gTimeIncrement >= 6) {
GfxPrint_Printf(&printer, "%s", ":"); GfxPrint_Printf(&printer, "%s", ":");
@ -802,16 +800,14 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_Printf(&printer, "%s", " "); GfxPrint_Printf(&printer, "%s", " ");
} }
time = gSaveContext.dayTime; GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime)) % 60);
GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * time) % 60);
GfxPrint_SetColor(&printer, 255, 255, 55, 64); GfxPrint_SetColor(&printer, 255, 255, 55, 64);
GfxPrint_SetPos(&printer, 22, 9); GfxPrint_SetPos(&printer, 22, 9);
GfxPrint_Printf(&printer, "%s", "VRBOXTIME "); GfxPrint_Printf(&printer, "%s", "VRBOXTIME ");
GfxPrint_SetColor(&printer, 255, 255, 255, 64); GfxPrint_SetColor(&printer, 255, 255, 255, 64);
time = ((void)0, gSaveContext.skyboxTime); GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.skyboxTime) / 60.0f));
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * time / 60.0f));
if ((((void)0, gSaveContext.skyboxTime) & 0x1F) >= 0x10 || gTimeIncrement >= 6) { if ((((void)0, gSaveContext.skyboxTime) & 0x1F) >= 0x10 || gTimeIncrement >= 6) {
GfxPrint_Printf(&printer, "%s", ":"); GfxPrint_Printf(&printer, "%s", ":");
@ -819,8 +815,7 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_Printf(&printer, "%s", " "); GfxPrint_Printf(&printer, "%s", " ");
} }
time = ((void)0, gSaveContext.skyboxTime); GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.skyboxTime)) % 60);
GfxPrint_Printf(&printer, "%02d", (s16)(45.0f / 2048.0f * time) % 60);
GfxPrint_SetColor(&printer, 55, 255, 255, 64); GfxPrint_SetColor(&printer, 55, 255, 255, 64);
GfxPrint_SetPos(&printer, 22, 6); 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. * Does not work as is in most cases.
* Can work if the render mode, combiner and possibly other settings are set correctly. * 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. * and `G_CC_MODULATEI_PRIM` for both combiner cycles.
*/ */
void Moji_DrawString(GraphicsContext* gfxCtx, const char* str) { void Moji_DrawString(GraphicsContext* gfxCtx, const char* str) {

View file

@ -40,155 +40,260 @@ void Select_LoadGame(SelectContext* this, s32 entranceIndex) {
SET_NEXT_GAMESTATE(&this->state, Gameplay_Init, GlobalContext); SET_NEXT_GAMESTATE(&this->state, Gameplay_Init, GlobalContext);
} }
// "Translation" ("Actual name") // "Translation" (Actual name)
static SceneSelectEntry sScenes[] = { static SceneSelectEntry sScenes[] = {
{ " 1:SPOT00", Select_LoadGame, 0x00CD }, // "1: SPOT00" (Hyrule Field) // "1: SPOT00" (Hyrule Field)
{ " 2:SPOT01", Select_LoadGame, 0x00DB }, // "2: SPOT01" (Kakariko Village) { " 1:SPOT00", Select_LoadGame, 0x00CD },
{ " 3:SPOT02", Select_LoadGame, 0x00E4 }, // "3: SPOT02" (Graveyard) // "2: SPOT01" (Kakariko Village)
{ " 4:SPOT03", Select_LoadGame, 0x00EA }, // "4: SPOT03" (Zora's River) { " 2:SPOT01", Select_LoadGame, 0x00DB },
{ " 5:SPOT04", Select_LoadGame, 0x00EE }, // "5: SPOT04" (Kokiri Forest) // "3: SPOT02" (Graveyard)
{ " 6:SPOT05", Select_LoadGame, 0x00FC }, // "6: SPOT05" (Sacred Forest Meadow) { " 3:SPOT02", Select_LoadGame, 0x00E4 },
{ " 7:SPOT06", Select_LoadGame, 0x0102 }, // "7: SPOT06" (Lake Hylia) // "4: SPOT03" (Zora's River)
{ " 8:SPOT07", Select_LoadGame, 0x0108 }, // "8: SPOT07" (Zora's Domain) { " 4:SPOT03", Select_LoadGame, 0x00EA },
{ " 9:SPOT08", Select_LoadGame, 0x010E }, // "9: SPOT08" (Zora's Fountain) // "5: SPOT04" (Kokiri Forest)
{ "10:SPOT09", Select_LoadGame, 0x0117 }, // "10: SPOT09" (Gerudo Valley) { " 5:SPOT04", Select_LoadGame, 0x00EE },
{ "11:SPOT10", Select_LoadGame, 0x011E }, // "11: SPOT10" (Lost Woods) // "6: SPOT05" (Sacred Forest Meadow)
{ "12:SPOT11", Select_LoadGame, 0x0123 }, // "12: SPOT11" (Desert Colossus) { " 6:SPOT05", Select_LoadGame, 0x00FC },
{ "13:SPOT12", Select_LoadGame, 0x0129 }, // "13: SPOT12" (Gerudo's Fortress) // "7: SPOT06" (Lake Hylia)
{ "14:SPOT13", Select_LoadGame, 0x0130 }, // "14: SPOT13" (Haunted Wasteland) { " 7:SPOT06", Select_LoadGame, 0x0102 },
{ "15:SPOT15", Select_LoadGame, 0x0138 }, // "15: SPOT15" (Hyrule Castle) // "8: SPOT07" (Zora's Domain)
{ "16:SPOT16", Select_LoadGame, 0x013D }, // "16: SPOT16" (Death Mountain Trail) { " 8:SPOT07", Select_LoadGame, 0x0108 },
{ "17:SPOT17", Select_LoadGame, 0x0147 }, // "17: SPOT17" (Death Mountain Crater) // "9: SPOT08" (Zora's Fountain)
{ "18:SPOT18", Select_LoadGame, 0x014D }, // "18: SPOT18" (Goron City) { " 9:SPOT08", Select_LoadGame, 0x010E },
{ "19:SPOT20", Select_LoadGame, 0x0157 }, // "19: SPOT20" (Lon Lon Ranch) // "10: SPOT09" (Gerudo Valley)
{ "20:\x8Dトキノマ", Select_LoadGame, 0x0053 }, // "20: Chamber of Time" (Temple Of Time) { "10:SPOT09", Select_LoadGame, 0x0117 },
{ "21:\x8Dケンジャノマ", Select_LoadGame, 0x006B }, // "21: Chamber of the Sages" (Chamber of the Sages) // "11: SPOT10" (Lost Woods)
{ "22:\x8Dシャテキジョウ", Select_LoadGame, 0x003B }, // "22: Target Range" (Shooting Gallery) { "11:SPOT10", Select_LoadGame, 0x011E },
{ "23:\x8Cハイラル\x8Dニワ\x8Cゲーム", Select_LoadGame, 0x007A }, // "23: Hyrule Garden Game" (Hyrule Garden Minigame) // "12: SPOT11" (Desert Colossus)
{ "24:\x8Dハカシタトビコミアナ", Select_LoadGame, 0x031C }, // "24: Grave Dive Hole" (Grave (Redead)) { "12:SPOT11", Select_LoadGame, 0x0123 },
{ "25:\x8Dハカシタトビコミアナ 2", Select_LoadGame, 0x004B }, // "25: Grave Dive Hole 2" (Grave (Fairy's Fountain)) // "13: SPOT12" (Gerudo's Fortress)
{ "26:\x8Dオウケ ノ ハカアナ", Select_LoadGame, 0x002D }, // "26: Royal Family's Grave" (Royal Family's Tomb) { "13:SPOT12", Select_LoadGame, 0x0129 },
{ "27:\x8Dダイヨウセイノイズミ", Select_LoadGame, // "14: SPOT13" (Haunted Wasteland)
0x0315 }, // "27: Great Fairy's Fountain" (Great Fairy's Fountain (Upgrades)) { "14:SPOT13", Select_LoadGame, 0x0130 },
{ "28:\x8Dトビコミ ヨウセイ アナ", Select_LoadGame, 0x036D }, // "28: Fairy Dive Hole" (Fairy's Fountain (Healing Fairies)) // "15: SPOT15" (Hyrule Castle)
{ "29:\x8Dマホウセキ ヨウセイノイズミ", Select_LoadGame, { "15:SPOT15", Select_LoadGame, 0x0138 },
0x0371 }, // "29: Magic Stone Fairy's Fountain" (Great Fairy's Fountain (Spells)) // "16: SPOT16" (Death Mountain Trail)
{ "30:\x8Cガノン\x8Dサイシュウセン", Select_LoadGame, 0x043F }, // "30: Final Battle With Ganon" (Battle With Ganon) { "16:SPOT16", Select_LoadGame, 0x013D },
{ "31:\x8Cハイラル\x8Dナカニワ", Select_LoadGame, 0x0400 }, // "31: Hyrule Inner Garden" (Castle Courtyard) // "17: SPOT17" (Death Mountain Crater)
{ "32:\x8Dツリボリ", Select_LoadGame, 0x045F }, // "32: Fishing" (Fishing Pond) { "17:SPOT17", Select_LoadGame, 0x0147 },
{ "33:\x8Cボムチュウボーリング", Select_LoadGame, 0x0507 }, // "33: Bombchu Bowling" (Bombchu Bowling Alley) // "18: SPOT18" (Goron City)
{ "34:\x8Cロンロン\x8Dボクジョウ ソウコ 1", Select_LoadGame, 0x004F }, // "34: Lon Lon Ranch - Storehouse 1" (Talon's House) { "18:SPOT18", Select_LoadGame, 0x014D },
{ "35:\x8Cロンロン\x8Dボクジョウ ソウコ 2", Select_LoadGame, 0x05D0 }, // "35: Lon Lon Ranch - Storehouse 2" (Ranch Silo) // "19: SPOT20" (Lon Lon Ranch)
{ "36:\x8Dミハリ ゴヤ", Select_LoadGame, 0x007E }, // "36: Lookout Hut" (Guard House) { "19:SPOT20", Select_LoadGame, 0x0157 },
{ "37:\x8Dマホウ ノ クスリヤ", Select_LoadGame, 0x0072 }, // "37: Magic Potion Shop" (Granny's Potion Shop) // "20: Chamber of Time" (Temple Of Time)
{ "38:\x8Dタカラバコヤ", Select_LoadGame, 0x0063 }, // "38: Treasure Chest Shop" (Treasure Chest Game) { "20:" GFXP_HIRAGANA "トキノマ", Select_LoadGame, 0x0053 },
{ "39:\x8Dキン \x8Cスタルチュラ ハウス", Select_LoadGame, 0x0550 }, // "39: Gold Skulltula House" (House of Skulltula) // "21: Chamber of the Sages" (Chamber of the Sages)
{ "40:\x8Dジョウカマチ イリグチ", Select_LoadGame, 0x0033 }, // "40: Castle Town - Entrance" (Market Entrance) { "21:" GFXP_HIRAGANA "ケンジャノマ", Select_LoadGame, 0x006B },
{ "41:\x8Dジョウカマチ", Select_LoadGame, 0x00B1 }, // "41: Castle Town" (Market) // "22: Target Range" (Shooting Gallery)
{ "42:\x8Dウラロジ", Select_LoadGame, 0x00AD }, // "42: Back Alley" (Back Alley) { "22:" GFXP_HIRAGANA "シャテキジョウ", Select_LoadGame, 0x003B },
{ "43:\x8Dトキノシンデン マエ", Select_LoadGame, 0x0171 }, // "43: In Front of the Temple of Time" (Temple of Time Exterior) // "23: Hyrule Garden Game" (Hyrule Garden Minigame)
{ "44:\x8Dリンクノイエ", Select_LoadGame, 0x00BB }, // "44: Link's House" (Link's House) { "23:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム", Select_LoadGame, 0x007A },
{ "45:\x8Cカカリコ\x8Dムラノナガヤ", Select_LoadGame, 0x02FD }, // "45: Kakariko Village Row House" (Carpenter Boss's House) // "24: Grave Dive Hole" (Grave (Redead))
{ "46:\x8Dウラロジノ イエ", Select_LoadGame, 0x043B }, // "46: Back Alley House" (Back Alley House (Man in Green)) { "24:" GFXP_HIRAGANA "ハカシタトビコミアナ", Select_LoadGame, 0x031C },
{ "47:\x8Dコキリノムラ モノシリキョウダイノイエ", Select_LoadGame, // "25: Grave Dive Hole 2" (Grave (Fairy's Fountain))
0x00C9 }, // "47: Kokiri Village - Know-It-All Brothers' House" (Know-It-All Brothers' House) { "25:" GFXP_HIRAGANA "ハカシタトビコミアナ 2", Select_LoadGame, 0x004B },
{ "48:\x8Dコキリノムラ フタゴノイエ", Select_LoadGame, 0x009C }, // "48: Kokiri Village - Twins' House" (Twins' House) // "26: Royal Family's Grave" (Royal Family's Tomb)
{ "49:\x8Dコキリノムラ \x8Cミド\x8Dノイエ", Select_LoadGame, 0x0433 }, // "49: Kokiri Village - Mido's House" (Mido's House) { "26:" GFXP_HIRAGANA "オウケ ノ ハカアナ", Select_LoadGame, 0x002D },
{ "50:\x8Dコキリノムラ \x8Cサリア\x8Dノイエ", Select_LoadGame, 0x0437 }, // "50: Kokiri Village - Saria's House" (Saria's House) // "27: Great Fairy's Fountain" (Great Fairy's Fountain (Upgrades))
{ "51:\x8Dウマゴヤ", Select_LoadGame, 0x02F9 }, // "51: Stable" (Stable) { "27:" GFXP_HIRAGANA "ダイヨウセイノイズミ", Select_LoadGame, 0x0315 },
{ "52:\x8Dハカモリノイエ", Select_LoadGame, 0x030D }, // "52: Grave Keeper's House" (Gravekeeper's Hut) // "28: Fairy Dive Hole" (Fairy's Fountain (Healing Fairies))
{ "53:\x8Dウラロジ イヌオバサンノイエ", Select_LoadGame, 0x0398 }, // "53: Back Alley - Dog Lady's House" (Back Alley House) { "28:" GFXP_HIRAGANA "トビコミ ヨウセイ アナ", Select_LoadGame, 0x036D },
{ "54:\x8Dカカリコムラ \x8Cインパ\x8Dノイエ", Select_LoadGame, // "29: Magic Stone Fairy's Fountain" (Great Fairy's Fountain (Spells))
0x039C }, // "54: Kakariko Village - Impa's House" (Impa's House) { "29:" GFXP_HIRAGANA "マホウセキ ヨウセイノイズミ", Select_LoadGame, 0x0371 },
{ "55:\x8Cハイリア\x8D ケンキュウジョ", Select_LoadGame, 0x0043 }, // "55: Hylia Laboratory" (Lakeside Laboratory) // "30: Final Battle With Ganon" (Battle With Ganon)
{ "56:\x8Cテント", Select_LoadGame, 0x03A0 }, // "56: Tent" (Carpenters' Tent) { "30:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン", Select_LoadGame, 0x043F },
{ "57:\x8Dタテノミセ", Select_LoadGame, 0x00B7 }, // "57: Shield Shop" (Bazaar) // "31: Hyrule Inner Garden" (Castle Courtyard)
{ "58:\x8Dコキリゾクノミセ", Select_LoadGame, 0x00C1 }, // "58: Kokiri Shop" (Kokiri Shop) { "31:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ナカニワ", Select_LoadGame, 0x0400 },
{ "59:\x8Cゴロン\x8Dノミセ", Select_LoadGame, 0x037C }, // "59: Goron Shop" (Goron Shop) // "32: Fishing" (Fishing Pond)
{ "60:\x8Cゾーラ\x8Dノミセ", Select_LoadGame, 0x0380 }, // "60: Zora Shop" (Zora Shop) { "32:" GFXP_HIRAGANA "ツリボリ", Select_LoadGame, 0x045F },
{ "61:\x8Cカカリコ\x8Dムラ クスリヤ", Select_LoadGame, // "33: Bombchu Bowling" (Bombchu Bowling Alley)
0x0384 }, // "61: Kakariko Village - Potion Shop" (Kakariko Potion Shop) { "33:" GFXP_KATAKANA "ボムチュウボーリング", Select_LoadGame, 0x0507 },
{ "62:\x8Dジョウカマチ クスリヤ", Select_LoadGame, 0x0388 }, // "62: Castle Town - Potion Shop" (Market Potion Shop) // "34: Lon Lon Ranch - Storehouse 1" (Talon's House)
{ "63:\x8Dウラロジ ヨルノミセ", Select_LoadGame, 0x0390 }, // "63: Back Alley - Night Shop" (Bombchu Shop) { "34:" GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 1", Select_LoadGame, 0x004F },
{ "64:\x8Dオメンヤ", Select_LoadGame, 0x0530 }, // "64: Mask Shop" (Happy Mask Shop) // "35: Lon Lon Ranch - Storehouse 2" (Ranch Silo)
{ "65:\x8Cゲルド\x8Dノシュウレンジョウ", Select_LoadGame, 0x0008 }, // "65: Gerudo Training Area" (Gerudo Training Ground) { "35:" GFXP_KATAKANA "ロンロン" GFXP_HIRAGANA "ボクジョウ ソウコ 2", Select_LoadGame, 0x05D0 },
{ "66:\x8Dヨウセイノキノ \x8Cダンジョン", Select_LoadGame, 0x0000 }, // "66: Fairy Tree Dungeon" (Inside the Deku Tree) // "36: Lookout Hut" (Guard House)
{ "67:\x8Dヨウセイノキノ \x8Cダンジョン ボス", Select_LoadGame, 0x040F }, // "67: Fairy Tree Dungeon - Boss" (Gohma's Lair) { "36:" GFXP_HIRAGANA "ミハリ ゴヤ", Select_LoadGame, 0x007E },
{ "68:\x8Cドドンゴ ダンジョン", Select_LoadGame, 0x0004 }, // "68: Dondogo Dungeon" (Dodongo's Cavern) // "37: Magic Potion Shop" (Granny's Potion Shop)
{ "69:\x8Cドドンゴ ダンジョン ボス", Select_LoadGame, 0x040B }, // "69: Dondogo Dungeon - Boss" (King Dodongo's Lair) { "37:" GFXP_HIRAGANA "マホウ ノ クスリヤ", Select_LoadGame, 0x0072 },
{ "70:\x8Dキョダイギョ \x8Cダンジョン", Select_LoadGame, 0x0028 }, // "70: Giant Fish Dungeon" (Inside Jabu-Jabu's Belly) // "38: Treasure Chest Shop" (Treasure Chest Game)
{ "71:\x8Dキョダイギョ \x8Cダンジョン ボス", Select_LoadGame, 0x0301 }, // "71: Giant Fish Dungeon - Boss" (Barinade's Lair) { "38:" GFXP_HIRAGANA "タカラバコヤ", Select_LoadGame, 0x0063 },
{ "72:\x8Dモリノシンデン", Select_LoadGame, 0x0169 }, // "72: Forest Temple" (Forest Temple) // "39: Gold Skulltula House" (House of Skulltula)
{ "73:\x8Dモリノシンデン \x8Cボス", Select_LoadGame, 0x000C }, // "73: Forest Temple - Boss" (Phantom Ganon's Lair) { "39:" GFXP_HIRAGANA "キン " GFXP_KATAKANA "スタルチュラ ハウス", Select_LoadGame, 0x0550 },
{ "74:\x8Dイドシタ \x8Cダンジョン", Select_LoadGame, 0x0098 }, // "74: Dungeon Below the Well" (Bottom of the Well) // "40: Castle Town - Entrance" (Market Entrance)
{ "75:\x8Dハカシタ \x8Cダンジョン", Select_LoadGame, 0x0037 }, // "75: Dungeon Beneath the Graves" (Shadow Temple) { "40:" GFXP_HIRAGANA "ジョウカマチ イリグチ", Select_LoadGame, 0x0033 },
{ "76:\x8Dハカシタ \x8Cダンジョン ボス", Select_LoadGame, // "41: Castle Town" (Market)
0x0413 }, // "76: Dungeon Beneath the Graves - Boss" (Bongo Bongo's Lair) { "41:" GFXP_HIRAGANA "ジョウカマチ", Select_LoadGame, 0x00B1 },
{ "77:\x8Dヒノシンデン", Select_LoadGame, 0x0165 }, // "77: Fire Temple" (Fire Temple) // "42: Back Alley" (Back Alley)
{ "78:\x8Dヒノシンデン \x8Cボス", Select_LoadGame, 0x0305 }, // "78: Fire Temple - Boss" (Volvagia's Lair) { "42:" GFXP_HIRAGANA "ウラロジ", Select_LoadGame, 0x00AD },
{ "79:\x8Dミズノシンデン", Select_LoadGame, 0x0010 }, // "79: Water Temple" (Water Temple) // "43: In Front of the Temple of Time" (Temple of Time Exterior)
{ "80:\x8Dミズノシンデン \x8Cボス", Select_LoadGame, 0x0417 }, // "80: Water Temple - Boss" (Morpha's Lair) { "43:" GFXP_HIRAGANA "トキノシンデン マエ", Select_LoadGame, 0x0171 },
{ "81:\x8Dジャシンゾウ \x8Cダンジョン", Select_LoadGame, 0x0082 }, // "81: Evil Goddess Statue Dungeon" (Spirit Temple) // "44: Link's House" (Link's House)
{ "82:\x8Dジャシンゾウ \x8Cダンジョン アイアンナック", Select_LoadGame, { "44:" GFXP_HIRAGANA "リンクノイエ", Select_LoadGame, 0x00BB },
0x008D }, // "82: Evil Goddess Statue Dungeon - Iron Knuckle" (Iron Knuckle's Lair) // "45: Kakariko Village Row House" (Carpenter Boss's House)
{ "83:\x8Dジャシンゾウ \x8Cダンジョン ボス", Select_LoadGame, { "45:" GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラノナガヤ", Select_LoadGame, 0x02FD },
0x05EC }, // "83: Evil Goddess Statue Dungeon - Boss" (Twinrova's Lair) // "46: Back Alley House" (Back Alley House (Man in Green))
{ "84:\x8Cガノン\x8Dノトウ", Select_LoadGame, 0x041B }, // "84: Ganon's Tower" (Ganon's Tower) { "46:" GFXP_HIRAGANA "ウラロジノ イエ", Select_LoadGame, 0x043B },
{ "85:\x8Cガノン\x8Dノトウ\x8Cボス", Select_LoadGame, 0x041F }, // "85: Ganon's Tower - Boss" (Ganondorf's Lair) // "47: Kokiri Village - Know-It-All Brothers' House" (Know-It-All Brothers' House)
{ "86:\x8Dコオリノドウクツ", Select_LoadGame, 0x0088 }, // "86: Ice Cavern" (Ice Cavern) { "47:" GFXP_HIRAGANA "コキリノムラ モノシリキョウダイノイエ", Select_LoadGame, 0x00C9 },
{ "87:\x8Dハカシタ\x8Cリレー", Select_LoadGame, 0x044F }, // "87: Relay Beneath the Graves" (Dampé's Grave) // "48: Kokiri Village - Twins' House" (Twins' House)
{ "88:\x8Cガノン\x8Dチカ \x8Cダンジョン", Select_LoadGame, { "48:" GFXP_HIRAGANA "コキリノムラ フタゴノイエ", Select_LoadGame, 0x009C },
0x0467 }, // "88: Ganon's Basement Dungeon" (Inside Ganon's Castle) // "49: Kokiri Village - Mido's House" (Mido's House)
{ "89:\x8Cガノン\x8Dサイシュウセン \x8Cデモ & バトル", Select_LoadGame, { "49:" GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "ミド" GFXP_HIRAGANA "ノイエ", Select_LoadGame, 0x0433 },
0x0517 }, // "89: Final Battle With Ganon - Cutscene & Battle" (Ganondorf's Death Scene & Tower Escape Exterior) // "50: Kokiri Village - Saria's House" (Saria's House)
{ "90:\x8Cガノン\x8Dノトウ ソノゴ 1", Select_LoadGame, { "50:" GFXP_HIRAGANA "コキリノムラ " GFXP_KATAKANA "サリア" GFXP_HIRAGANA "ノイエ", Select_LoadGame, 0x0437 },
0x0179 }, // "90: Ganon's Tower Aftermath 1" (Escaping Ganon's Tower 1) // "51: Stable" (Stable)
{ "91:\x8Cガノン\x8Dノトウ ソノゴ 2", Select_LoadGame, { "51:" GFXP_HIRAGANA "ウマゴヤ", Select_LoadGame, 0x02F9 },
0x01B5 }, // "91: Ganon's Tower Aftermath 2" (Escaping Ganon's Tower 2) // "52: Grave Keeper's House" (Gravekeeper's Hut)
{ "92:\x8Cガノン\x8Dノトウ ソノゴ 3", Select_LoadGame, { "52:" GFXP_HIRAGANA "ハカモリノイエ", Select_LoadGame, 0x030D },
0x03DC }, // "92: Ganon's Tower Aftermath 3" (Escaping Ganon's Tower 3) // "53: Back Alley - Dog Lady's House" (Back Alley House)
{ "93:\x8Cガノン\x8Dノトウ ソノゴ 4", Select_LoadGame, { "53:" GFXP_HIRAGANA "ウラロジ イヌオバサンノイエ", Select_LoadGame, 0x0398 },
0x03E4 }, // "93: Ganon's Tower Aftermath 4" (Escaping Ganon's Tower 4) // "54: Kakariko Village - Impa's House" (Impa's House)
{ "94:\x8Cガノン\x8Dチカ ソノゴ", Select_LoadGame, 0x056C }, // "94: Ganon's Basement Aftermath" (Escaping Ganon's Castle) { "54:" GFXP_HIRAGANA "カカリコムラ " GFXP_KATAKANA "インパ" GFXP_HIRAGANA "ノイエ", Select_LoadGame, 0x039C },
{ "95:\x8Cゲルド\x8Dツウロ 1-2", Select_LoadGame, 0x0486 }, // "95: Gerudo Passage 1-2" (Thieves' Hideout 1) // "55: Hylia Laboratory" (Lakeside Laboratory)
{ "96:\x8Cゲルド\x8Dツウロ 3-4 9-10", Select_LoadGame, 0x048E }, // "96: Gerudo Passage 3-4 9-10" (Thieves' Hideout 2) { "55:" GFXP_KATAKANA "ハイリア" GFXP_HIRAGANA " ケンキュウジョ", Select_LoadGame, 0x0043 },
{ "97:\x8Cゲルド\x8Dツウロ 5-6", Select_LoadGame, 0x0496 }, // "97: Gerudo Passage 5-6" (Thieves' Hideout 3) // "56: Tent" (Carpenters' Tent)
{ "98:\x8Cゲルド\x8Dツウロ 7-8", Select_LoadGame, 0x049E }, // "98: Gerudo Passage 7-8" (Thieves' Hideout 4) { "56:" GFXP_KATAKANA "テント", Select_LoadGame, 0x03A0 },
{ "99:\x8Cゲルド\x8Dツウロ 11-12", Select_LoadGame, 0x04AE }, // "99: Gerudo Passage 11-12" (Thieves' Hideout 5) // "57: Shield Shop" (Bazaar)
{ "100:\x8Cゲルド\x8Dツウロ 13", Select_LoadGame, 0x0570 }, // "100: Gerudo Passage 13" (Thieves' Hideout 6) { "57:" GFXP_HIRAGANA "タテノミセ", Select_LoadGame, 0x00B7 },
{ "101:\x8Dカクシトビコミアナ 0", Select_LoadGame, 0x003F }, // "101: Hidden Dive Hole 0" (Grotto 0 - Gossip Stone & Chest) // "58: Kokiri Shop" (Kokiri Shop)
{ "102:\x8Dカクシトビコミアナ 1", Select_LoadGame, { "58:" GFXP_HIRAGANA "コキリゾクノミセ", Select_LoadGame, 0x00C1 },
0x0598 }, // "102: Hidden Dive Hole 1" (Grotto 1 - Skulltula & Gold Skulltula) // "59: Goron Shop" (Goron Shop)
{ "103:\x8Dカクシトビコミアナ 2", Select_LoadGame, { "59:" GFXP_KATAKANA "ゴロン" GFXP_HIRAGANA "ノミセ", Select_LoadGame, 0x037C },
0x059C }, // "103: Hidden Dive Hole 2" (Grotto 2 - Business Scrub & Heart Piece) // "60: Zora Shop" (Zora Shop)
{ "104:\x8Dカクシトビコミアナ 3", Select_LoadGame, 0x05A0 }, // "104: Hidden Dive Hole 3" (Grotto 3 - Redeads) { "60:" GFXP_KATAKANA "ゾーラ" GFXP_HIRAGANA "ノミセ", Select_LoadGame, 0x0380 },
{ "105:\x8Dカクシトビコミアナ 4", Select_LoadGame, 0x05A4 }, // "105: Hidden Dive Hole 4" (Grotto 4 - 3 Business Scrubs) // "61: Kakariko Village - Potion Shop" (Kakariko Potion Shop)
{ "106:\x8Dカクシトビコミアナ 5", Select_LoadGame, { "61:" GFXP_KATAKANA "カカリコ" GFXP_HIRAGANA "ムラ クスリヤ", Select_LoadGame, 0x0384 },
0x05A8 }, // "106: Hidden Dive Hole 5" (Grotto 5 - Gossip Stone, Skulltula, Cow) // "62: Castle Town - Potion Shop" (Market Potion Shop)
{ "107:\x8Dカクシトビコミアナ 6", Select_LoadGame, 0x05AC }, // "107: Hidden Dive Hole 6" (Grotto 6 - Octorok) { "62:" GFXP_HIRAGANA "ジョウカマチ クスリヤ", Select_LoadGame, 0x0388 },
{ "108:\x8Dカクシトビコミアナ 7", Select_LoadGame, // "63: Back Alley - Night Shop" (Bombchu Shop)
0x05B0 }, // "108: Hidden Dive Hole 7" (Grotto 7 - Business Scrub & Deku Nut Upgrade) { "63:" GFXP_HIRAGANA "ウラロジ ヨルノミセ", Select_LoadGame, 0x0390 },
{ "109:\x8Dカクシトビコミアナ 8", Select_LoadGame, 0x05B4 }, // "109: Hidden Dive Hole 8" (Grotto 8 - 2 Wolfos) // "64: Mask Shop" (Happy Mask Shop)
{ "110:\x8Dカクシトビコミアナ 9", Select_LoadGame, 0x05B8 }, // "110: Hidden Dive Hole 9" (Grotto 9 - Bombable Walls) { "64:" GFXP_HIRAGANA "オメンヤ", Select_LoadGame, 0x0530 },
{ "111:\x8Dカクシトビコミアナ 10", Select_LoadGame, 0x05BC }, // "111: Hidden Dive Hole 10" (Grotto 10 - 2 Business Scrubs) // "65: Gerudo Training Area" (Gerudo Training Ground)
{ "112:\x8Dカクシトビコミアナ 11", Select_LoadGame, { "65:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ノシュウレンジョウ", Select_LoadGame, 0x0008 },
0x05C0 }, // "112: Hidden Dive Hole 11" (Grotto 11 - Tektite & Heart Piece) // "66: Fairy Tree Dungeon" (Inside the Deku Tree)
{ "113:\x8Dカクシトビコミアナ 12", Select_LoadGame, 0x05C4 }, // "113: Hidden Dive Hole 12" (Grotto 12 - Deku Stage) { "66:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン", Select_LoadGame, 0x0000 },
{ "114:\x8Dカクシトビコミアナ 13", Select_LoadGame, 0x05FC }, // "114: Hidden Dive Hole 13" (Grotto 13 - Rupees & Cow) // "67: Fairy Tree Dungeon - Boss" (Gohma's Lair)
{ "115:\x8Cハイラル デモ", Select_LoadGame, 0x00A0 }, // "115: Hyrule Cutscenes" (Cutscene Map) { "67:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン ボス", Select_LoadGame, 0x040F },
{ "116:\x8Dベッシツ (タカラバコ\x8Cワープ)", Select_LoadGame, // "68: Dondogo Dungeon" (Dodongo's Cavern)
0x0520 }, // "116: Special Room (Treasure Chest Warp)" (Ganondorf Test Room) { "68:" GFXP_KATAKANA "ドドンゴ ダンジョン", Select_LoadGame, 0x0004 },
{ "117:\x8Dササ\x8Cテスト", Select_LoadGame, 0x0018 }, // "117: Sasaki Test" (Sasa Test) // "69: Dondogo Dungeon - Boss" (King Dodongo's Lair)
{ "118:\x8Cテストマップ", Select_LoadGame, 0x0094 }, // "118: Test Map" (Jungle Gym) { "69:" GFXP_KATAKANA "ドドンゴ ダンジョン ボス", Select_LoadGame, 0x040B },
{ "119:\x8Cテストルーム", Select_LoadGame, 0x0024 }, // "119: Test Room" (Treasure Chest Room) // "70: Giant Fish Dungeon" (Inside Jabu-Jabu's Belly)
{ "120:\x8Dチュウ\x8Cスタロフォス\x8Dベヤ", Select_LoadGame, 0x001C }, // "120: Stalfos Miniboss Room" (Stalfos Miniboss Room) { "70:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン", Select_LoadGame, 0x0028 },
{ "121:\x8Cボススタロフォス\x8Dベヤ", Select_LoadGame, 0x0020 }, // "121: Boss Stalfos Room" (Stalfos Boss Room) // "71: Giant Fish Dungeon - Boss" (Barinade's Lair)
{ "122:Sutaru", Select_LoadGame, 0x0047 }, // "122: Stal" (Sutaru) { "71:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン ボス", Select_LoadGame, 0x0301 },
{ "123:jikkenjyou", Select_LoadGame, 0x02EA }, // "123: Test Area" (Shooting Gallery) // "72: Forest Temple" (Forest Temple)
{ "124:depth\x8Cテスト", Select_LoadGame, 0x00B6 }, // "124: Depth Test" (Depth Test) { "72:" GFXP_HIRAGANA "モリノシンデン", Select_LoadGame, 0x0169 },
{ "125:\x8Cハイラル\x8Dニワ\x8Cゲーム2", Select_LoadGame, // "73: Forest Temple - Boss" (Phantom Ganon's Lair)
0x0076 }, // "125: Hyrule Garden Game 2" (Early Hyrule Garden Game) { "73:" GFXP_HIRAGANA "モリノシンデン " GFXP_KATAKANA "ボス", Select_LoadGame, 0x000C },
{ "title", (void*)Select_LoadTitle, 0x0000 }, // "title" (Title Screen) // "74: Dungeon Below the Well" (Bottom of the Well)
{ "74:" GFXP_HIRAGANA "イドシタ " GFXP_KATAKANA "ダンジョン", Select_LoadGame, 0x0098 },
// "75: Dungeon Beneath the Graves" (Shadow Temple)
{ "75:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン", Select_LoadGame, 0x0037 },
// "76: Dungeon Beneath the Graves - Boss" (Bongo Bongo's Lair)
{ "76:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン ボス", Select_LoadGame, 0x0413 },
// "77: Fire Temple" (Fire Temple)
{ "77:" GFXP_HIRAGANA "ヒノシンデン", Select_LoadGame, 0x0165 },
// "78: Fire Temple - Boss" (Volvagia's Lair)
{ "78:" GFXP_HIRAGANA "ヒノシンデン " GFXP_KATAKANA "ボス", Select_LoadGame, 0x0305 },
// "79: Water Temple" (Water Temple)
{ "79:" GFXP_HIRAGANA "ミズノシンデン", Select_LoadGame, 0x0010 },
// "80: Water Temple - Boss" (Morpha's Lair)
{ "80:" GFXP_HIRAGANA "ミズノシンデン " GFXP_KATAKANA "ボス", Select_LoadGame, 0x0417 },
// "81: Evil Goddess Statue Dungeon" (Spirit Temple)
{ "81:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン", Select_LoadGame, 0x0082 },
// "82: Evil Goddess Statue Dungeon - Iron Knuckle" (Iron Knuckle's Lair)
{ "82:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン アイアンナック", Select_LoadGame, 0x008D },
// "83: Evil Goddess Statue Dungeon - Boss" (Twinrova's Lair)
{ "83:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン ボス", Select_LoadGame, 0x05EC },
// "84: Ganon's Tower" (Ganon's Tower)
{ "84:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ", Select_LoadGame, 0x041B },
// "85: Ganon's Tower - Boss" (Ganondorf's Lair)
{ "85:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ" GFXP_KATAKANA "ボス", Select_LoadGame, 0x041F },
// "86: Ice Cavern" (Ice Cavern)
{ "86:" GFXP_HIRAGANA "コオリノドウクツ", Select_LoadGame, 0x0088 },
// "87: Relay Beneath the Graves" (Dampé's Grave)
{ "87:" GFXP_HIRAGANA "ハカシタ" GFXP_KATAKANA "リレー", Select_LoadGame, 0x044F },
// "88: Ganon's Basement Dungeon" (Inside Ganon's Castle)
{ "88:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ " GFXP_KATAKANA "ダンジョン", Select_LoadGame, 0x0467 },
// "89: Final Battle With Ganon - Cutscene & Battle" (Ganondorf's Death Scene & Tower Escape Exterior)
{ "89:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "サイシュウセン " GFXP_KATAKANA "デモ & バトル", Select_LoadGame, 0x0517 },
// "90: Ganon's Tower Aftermath 1" (Escaping Ganon's Tower 1)
{ "90:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 1", Select_LoadGame, 0x0179 },
// "91: Ganon's Tower Aftermath 2" (Escaping Ganon's Tower 2)
{ "91:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 2", Select_LoadGame, 0x01B5 },
// "92: Ganon's Tower Aftermath 3" (Escaping Ganon's Tower 3)
{ "92:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 3", Select_LoadGame, 0x03DC },
// "93: Ganon's Tower Aftermath 4" (Escaping Ganon's Tower 4)
{ "93:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "ノトウ ソノゴ 4", Select_LoadGame, 0x03E4 },
// "94: Ganon's Basement Aftermath" (Escaping Ganon's Castle)
{ "94:" GFXP_KATAKANA "ガノン" GFXP_HIRAGANA "チカ ソノゴ", Select_LoadGame, 0x056C },
// "95: Gerudo Passage 1-2" (Thieves' Hideout 1)
{ "95:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 1-2", Select_LoadGame, 0x0486 },
// "96: Gerudo Passage 3-4 9-10" (Thieves' Hideout 2)
{ "96:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 3-4 9-10", Select_LoadGame, 0x048E },
// "97: Gerudo Passage 5-6" (Thieves' Hideout 3)
{ "97:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 5-6", Select_LoadGame, 0x0496 },
// "98: Gerudo Passage 7-8" (Thieves' Hideout 4)
{ "98:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 7-8", Select_LoadGame, 0x049E },
// "99: Gerudo Passage 11-12" (Thieves' Hideout 5)
{ "99:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 11-12", Select_LoadGame, 0x04AE },
// "100: Gerudo Passage 13" (Thieves' Hideout 6)
{ "100:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ツウロ 13", Select_LoadGame, 0x0570 },
// "101: Hidden Dive Hole 0" (Grotto 0 - Gossip Stone & Chest)
{ "101:" GFXP_HIRAGANA "カクシトビコミアナ 0", Select_LoadGame, 0x003F },
// "102: Hidden Dive Hole 1" (Grotto 1 - Skulltula & Gold Skulltula)
{ "102:" GFXP_HIRAGANA "カクシトビコミアナ 1", Select_LoadGame, 0x0598 },
// "103: Hidden Dive Hole 2" (Grotto 2 - Business Scrub & Heart Piece)
{ "103:" GFXP_HIRAGANA "カクシトビコミアナ 2", Select_LoadGame, 0x059C },
// "104: Hidden Dive Hole 3" (Grotto 3 - Redeads)
{ "104:" GFXP_HIRAGANA "カクシトビコミアナ 3", Select_LoadGame, 0x05A0 },
// "105: Hidden Dive Hole 4" (Grotto 4 - 3 Business Scrubs)
{ "105:" GFXP_HIRAGANA "カクシトビコミアナ 4", Select_LoadGame, 0x05A4 },
// "106: Hidden Dive Hole 5" (Grotto 5 - Gossip Stone, Skulltula, Cow)
{ "106:" GFXP_HIRAGANA "カクシトビコミアナ 5", Select_LoadGame, 0x05A8 },
// "107: Hidden Dive Hole 6" (Grotto 6 - Octorok)
{ "107:" GFXP_HIRAGANA "カクシトビコミアナ 6", Select_LoadGame, 0x05AC },
// "108: Hidden Dive Hole 7" (Grotto 7 - Business Scrub & Deku Nut Upgrade)
{ "108:" GFXP_HIRAGANA "カクシトビコミアナ 7", Select_LoadGame, 0x05B0 },
// "109: Hidden Dive Hole 8" (Grotto 8 - 2 Wolfos)
{ "109:" GFXP_HIRAGANA "カクシトビコミアナ 8", Select_LoadGame, 0x05B4 },
// "110: Hidden Dive Hole 9" (Grotto 9 - Bombable Walls)
{ "110:" GFXP_HIRAGANA "カクシトビコミアナ 9", Select_LoadGame, 0x05B8 },
// "111: Hidden Dive Hole 10" (Grotto 10 - 2 Business Scrubs)
{ "111:" GFXP_HIRAGANA "カクシトビコミアナ 10", Select_LoadGame, 0x05BC },
// "112: Hidden Dive Hole 11" (Grotto 11 - Tektite & Heart Piece)
{ "112:" GFXP_HIRAGANA "カクシトビコミアナ 11", Select_LoadGame, 0x05C0 },
// "113: Hidden Dive Hole 12" (Grotto 12 - Deku Stage)
{ "113:" GFXP_HIRAGANA "カクシトビコミアナ 12", Select_LoadGame, 0x05C4 },
// "114: Hidden Dive Hole 13" (Grotto 13 - Rupees & Cow)
{ "114:" GFXP_HIRAGANA "カクシトビコミアナ 13", Select_LoadGame, 0x05FC },
// "115: Hyrule Cutscenes" (Cutscene Map)
{ "115:" GFXP_KATAKANA "ハイラル デモ", Select_LoadGame, 0x00A0 },
// "116: Special Room (Treasure Chest Warp)" (Ganondorf Test Room)
{ "116:" GFXP_HIRAGANA "ベッシツ (タカラバコ" GFXP_KATAKANA "ワープ)", Select_LoadGame, 0x0520 },
// "117: Sasaki Test" (Sasa Test)
{ "117:" GFXP_HIRAGANA "ササ" GFXP_KATAKANA "テスト", Select_LoadGame, 0x0018 },
// "118: Test Map" (Jungle Gym)
{ "118:" GFXP_KATAKANA "テストマップ", Select_LoadGame, 0x0094 },
// "119: Test Room" (Treasure Chest Room)
{ "119:" GFXP_KATAKANA "テストルーム", Select_LoadGame, 0x0024 },
// "120: Stalfos Miniboss Room" (Stalfos Miniboss Room)
{ "120:" GFXP_HIRAGANA "チュウ" GFXP_KATAKANA "スタロフォス" GFXP_HIRAGANA "ベヤ", Select_LoadGame, 0x001C },
// "121: Boss Stalfos Room" (Stalfos Boss Room)
{ "121:" GFXP_KATAKANA "ボススタロフォス" GFXP_HIRAGANA "ベヤ", Select_LoadGame, 0x0020 },
// "122: Stal" (Sutaru)
{ "122:Sutaru", Select_LoadGame, 0x0047 },
// "123: Test Area" (Shooting Gallery)
{ "123:jikkenjyou", Select_LoadGame, 0x02EA },
// "124: Depth Test" (Depth Test)
{ "124:depth" GFXP_KATAKANA "テスト", Select_LoadGame, 0x00B6 },
// "125: Hyrule Garden Game 2" (Early Hyrule Garden Game)
{ "125:" GFXP_KATAKANA "ハイラル" GFXP_HIRAGANA "ニワ" GFXP_KATAKANA "ゲーム2", Select_LoadGame, 0x0076 },
// "title" (Title Screen)
{ "title", (void*)Select_LoadTitle, 0x0000 },
}; };
void Select_UpdateMenu(SelectContext* this) { void Select_UpdateMenu(SelectContext* this) {
@ -426,19 +531,30 @@ void Select_PrintMenu(SelectContext* this, GfxPrint* printer) {
} }
static const char* sLoadingMessages[] = { static const char* sLoadingMessages[] = {
"\x8Dシバラクオマチクダサイ", // "Please wait a minute", // "Please wait a minute"
"\x8Dチョット マッテネ", // "Hold on a sec", GFXP_HIRAGANA "シバラクオマチクダサイ",
"\x8Cウェイト ア モーメント", // "Wait a moment", // "Hold on a sec"
"\x8Cロード\x8Dチュウ", // "Loading", GFXP_HIRAGANA "チョット マッテネ",
"\x8Dナウ ワーキング", // "Now working", // "Wait a moment"
"\x8Dイマ ツクッテマス", // "Now creating", GFXP_KATAKANA "ウェイト ア モーメント",
"\x8Dコショウジャナイヨ", // "It's not broken", // "Loading"
"\x8Cコーヒー ブレイク", // "Coffee Break", GFXP_KATAKANA "ロード" GFXP_HIRAGANA "チュウ",
"\x8C" // "Now working"
"Bメンヲセットシテクダサイ", // "Please set B side", GFXP_HIRAGANA "ナウ ワーキング",
"\x8Dジット\x8Cガマン\x8D\x8C\x8Dデアッタ", // "Be patient, now", // "Now creating"
"\x8Dイマシバラクオマチクダサイ", // "Please wait just a minute", GFXP_HIRAGANA "イマ ツクッテマス",
"\x8Dアワテナイアワテナイ。ヒトヤスミヒトヤスミ。", // "Don't worry, don't worry. Take a break, take a break", // "It's not broken"
GFXP_HIRAGANA "コショウジャナイヨ",
// "Coffee Break"
GFXP_KATAKANA "コーヒー ブレイク",
// "Please set B side"
GFXP_KATAKANA "Bメンヲセットシテクダサイ",
// "Be patient, now"
GFXP_HIRAGANA "ジット" GFXP_KATAKANA "ガマン" GFXP_HIRAGANA "" GFXP_KATAKANA "" GFXP_HIRAGANA "デアッタ",
// "Please wait just a minute"
GFXP_HIRAGANA "イマシバラクオマチクダサイ",
// "Don't worry, don't worry. Take a break, take a break."
GFXP_HIRAGANA "アワテナイアワテナイ。ヒトヤスミヒトヤスミ。",
}; };
void Select_PrintLoadingMessage(SelectContext* this, GfxPrint* printer) { void Select_PrintLoadingMessage(SelectContext* this, GfxPrint* printer) {
@ -451,10 +567,8 @@ void Select_PrintLoadingMessage(SelectContext* this, GfxPrint* printer) {
} }
static const char* sAgeLabels[] = { static const char* sAgeLabels[] = {
"\x8D" GFXP_HIRAGANA "17(ワカモノ)", // "17(young)"
"17(ワカモノ)", // "17(young)" GFXP_HIRAGANA "5(ワカスギ)", // "5(very young)"
"\x8D"
"5(ワカスギ)", // "5(very young)"
}; };
void Select_PrintAgeSetting(SelectContext* this, GfxPrint* printer, s32 age) { void Select_PrintAgeSetting(SelectContext* this, GfxPrint* printer, s32 age) {
@ -471,12 +585,12 @@ void Select_PrintCutsceneSetting(SelectContext* this, GfxPrint* printer, u16 csI
switch (csIndex) { switch (csIndex) {
case 0: case 0:
label = "\x8D ヨル \x8Cゴロン"; label = GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン";
gSaveContext.dayTime = 0; gSaveContext.dayTime = 0;
break; break;
case 0x8000: case 0x8000:
// clang-format off // clang-format off
gSaveContext.dayTime = 0x8000; label = "\x8Dオヒル \x8Cジャラ"; gSaveContext.dayTime = 0x8000; label = GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ";
// clang-format on // clang-format on
break; break;
case 0xFFF0: case 0xFFF0:
@ -517,7 +631,7 @@ void Select_PrintCutsceneSetting(SelectContext* this, GfxPrint* printer, u16 csI
}; };
gSaveContext.skyboxTime = gSaveContext.dayTime; gSaveContext.skyboxTime = gSaveContext.dayTime;
GfxPrint_Printf(printer, "Stage:\x8C%s", label); GfxPrint_Printf(printer, "Stage:" GFXP_KATAKANA "%s", label);
} }
void Select_DrawMenu(SelectContext* this) { void Select_DrawMenu(SelectContext* this) {
@ -531,6 +645,7 @@ void Select_DrawMenu(SelectContext* this) {
SET_FULLSCREEN_VIEWPORT(&this->view); SET_FULLSCREEN_VIEWPORT(&this->view);
func_800AAA50(&this->view, 0xF); func_800AAA50(&this->view, 0xF);
func_80094140(gfxCtx); func_80094140(gfxCtx);
printer = alloca(sizeof(GfxPrint)); printer = alloca(sizeof(GfxPrint));
GfxPrint_Init(printer); GfxPrint_Init(printer);
GfxPrint_Open(printer, POLY_OPA_DISP); GfxPrint_Open(printer, POLY_OPA_DISP);
@ -554,6 +669,7 @@ void Select_DrawLoadingScreen(SelectContext* this) {
SET_FULLSCREEN_VIEWPORT(&this->view); SET_FULLSCREEN_VIEWPORT(&this->view);
func_800AAA50(&this->view, 0xF); func_800AAA50(&this->view, 0xF);
func_80094140(gfxCtx); func_80094140(gfxCtx);
printer = alloca(sizeof(GfxPrint)); printer = alloca(sizeof(GfxPrint));
GfxPrint_Init(printer); GfxPrint_Init(printer);
GfxPrint_Open(printer, POLY_OPA_DISP); GfxPrint_Open(printer, POLY_OPA_DISP);

View file

@ -43,35 +43,35 @@ void KaleidoScope_DrawDebugEditorText(Gfx** gfxp) {
GfxPrint_SetPos(&printer, 4, 2); GfxPrint_SetPos(&printer, 4, 2);
GfxPrint_SetColor(&printer, 255, 60, 0, 255); GfxPrint_SetColor(&printer, 255, 60, 0, 255);
GfxPrint_Printf(&printer, "%s", "\x8Cルピー"); // "Rupee" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "ルピー"); // "Rupee"
GfxPrint_SetPos(&printer, 15, 2); GfxPrint_SetPos(&printer, 15, 2);
GfxPrint_Printf(&printer, "%s", "\x8Cハート"); // "Heart" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "ハート"); // "Heart"
GfxPrint_SetPos(&printer, 26, 3); GfxPrint_SetPos(&printer, 26, 3);
GfxPrint_Printf(&printer, "%s", "/4"); GfxPrint_Printf(&printer, "%s", "/4");
GfxPrint_SetPos(&printer, 4, 5); GfxPrint_SetPos(&printer, 4, 5);
GfxPrint_Printf(&printer, "%s", "\x8Cアイテム"); // "Item" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "アイテム"); // "Item"
GfxPrint_SetPos(&printer, 4, 13); GfxPrint_SetPos(&printer, 4, 13);
GfxPrint_Printf(&printer, "%s", "KEY"); GfxPrint_Printf(&printer, "%s", "KEY");
GfxPrint_SetPos(&printer, 4, 15); GfxPrint_SetPos(&printer, 4, 15);
GfxPrint_Printf(&printer, "%s", "\x8Dソウビ"); // "Equipment" GfxPrint_Printf(&printer, "%s", GFXP_HIRAGANA "ソウビ"); // "Equipment"
GfxPrint_SetPos(&printer, 23, 14); GfxPrint_SetPos(&printer, 23, 14);
GfxPrint_Printf(&printer, "%s", "\x8Cケン"); // "Sword" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "ケン"); // "Sword"
GfxPrint_SetPos(&printer, 23, 15); GfxPrint_SetPos(&printer, 23, 15);
GfxPrint_Printf(&printer, "%s", "\x8Cタテ"); // "Shield" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "タテ"); // "Shield"
GfxPrint_SetPos(&printer, 4, 17); GfxPrint_SetPos(&printer, 4, 17);
GfxPrint_Printf(&printer, "%s", "MAP"); GfxPrint_Printf(&printer, "%s", "MAP");
GfxPrint_SetPos(&printer, 4, 19); GfxPrint_SetPos(&printer, 4, 19);
GfxPrint_Printf(&printer, "%s", "\x8Dフウイン"); // "Seal" GfxPrint_Printf(&printer, "%s", GFXP_HIRAGANA "フウイン"); // "Seal"
GfxPrint_SetPos(&printer, 20, 19); GfxPrint_SetPos(&printer, 20, 19);
GfxPrint_Printf(&printer, "%s", "\x8Dセイレイセキ"); // "Spiritual Stone" GfxPrint_Printf(&printer, "%s", GFXP_HIRAGANA "セイレイセキ"); // "Spiritual Stone"
GfxPrint_SetPos(&printer, 4, 21); GfxPrint_SetPos(&printer, 4, 21);
GfxPrint_Printf(&printer, "%s", "\x8Cオカリナ"); // "Ocarina" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "オカリナ"); // "Ocarina"
GfxPrint_SetPos(&printer, 4, 24); GfxPrint_SetPos(&printer, 4, 24);
GfxPrint_Printf(&printer, "%s", "\x8Cコレクト"); // "Collect" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "コレクト"); // "Collect"
GfxPrint_SetPos(&printer, 14, 24); GfxPrint_SetPos(&printer, 14, 24);
GfxPrint_Printf(&printer, "%s", "\x8Cキンスタ"); // "Skulltula" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "キンスタ"); // "Skulltula"
GfxPrint_SetPos(&printer, 23, 24); GfxPrint_SetPos(&printer, 23, 24);
GfxPrint_Printf(&printer, "%s", "\x8Cカケラ"); // "Gold Token" GfxPrint_Printf(&printer, "%s", GFXP_KATAKANA "カケラ"); // "Gold Token"
GfxPrint_SetPos(&printer, 28, 24); GfxPrint_SetPos(&printer, 28, 24);
GfxPrint_Printf(&printer, "%s", "/4"); GfxPrint_Printf(&printer, "%s", "/4");