Skip to content

Commit a1e4f97

Browse files
committed
compile and font implemented to get past title screen
1 parent 44884f1 commit a1e4f97

File tree

15 files changed

+4462
-3994
lines changed

15 files changed

+4462
-3994
lines changed

ZAPDTR

soh/assets/textures/kanji/kanji.h

+3,974-3,974
Large diffs are not rendered by default.

soh/include/functions.h

+5
Original file line numberDiff line numberDiff line change
@@ -2460,6 +2460,11 @@ void Message_OpenText(PlayState* play, u16 textId);
24602460
void Message_Decode(PlayState* play);
24612461
void Message_DrawText(PlayState* play, Gfx** gfxP);
24622462

2463+
// #region SOH [NTSC Support]
2464+
s32 Kanji_OffsetFromShiftJIS(u32 arg0);
2465+
void Font_LoadOrderedFontNTSC(Font* font);
2466+
// #endregion
2467+
24632468
// #region SOH [General]
24642469

24652470
void Interface_CreateQuadVertexGroup(Vtx* vtxList, s32 xStart, s32 yStart, s32 width, s32 height, u8 flippedH);

soh/include/message_data_static.h

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ extern const char _message_##textId##_fra[];
3434

3535
//#include "text/message_data.h"
3636
extern char* _message_0xFFFC_nes;
37+
extern char* _message_0xFFFC_jpn;
3738

3839
#undef DEFINE_MESSAGE
3940

soh/include/z64.h

+3
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,9 @@ typedef enum {
544544
LANGUAGE_MAX
545545
} Language;
546546

547+
// hacky fix to get rando to work
548+
#define LANGUAGE_JPN 4
549+
547550
// TODO get these properties from the textures themselves
548551
#define FONT_CHAR_TEX_WIDTH 16
549552
#define FONT_CHAR_TEX_HEIGHT 16

soh/soh/Enhancements/debugger/MessageViewer.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ void MessageViewer::DisplayCustomMessage() const {
112112
extern "C" MessageTableEntry* sNesMessageEntryTablePtr;
113113
extern "C" MessageTableEntry* sGerMessageEntryTablePtr;
114114
extern "C" MessageTableEntry* sFraMessageEntryTablePtr;
115+
extern "C" MessageTableEntry* sJpnMessageEntryTablePtr;
115116
extern "C" MessageTableEntry* sStaffMessageEntryTablePtr;
116117

117118
void FindMessage(PlayState* play, const uint16_t textId, const uint8_t language) {
@@ -131,6 +132,8 @@ void FindMessage(PlayState* play, const uint16_t textId, const uint8_t language)
131132
messageTableEntry = sGerMessageEntryTablePtr;
132133
else if (language == LANGUAGE_FRA)
133134
messageTableEntry = sFraMessageEntryTablePtr;
135+
else if (language == LANGUAGE_JPN)
136+
messageTableEntry = sJpnMessageEntryTablePtr;
134137

135138
// If PAL languages are not present in the OTR file, default to English
136139
if (messageTableEntry == nullptr)

soh/soh/OTRGlobals.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,8 @@ struct ExtensionEntry {
487487
extern uintptr_t clearMtx;
488488
extern "C" Mtx gMtxClear;
489489
extern "C" MtxF gMtxFClear;
490-
extern "C" void OTRMessage_Init();
490+
extern "C" void OTRMessage_Init(bool isPal);
491+
extern "C" uint32_t ResourceMgr_GetGameRegion(int index);
491492
extern "C" void AudioMgr_CreateNextAudioBuffer(s16* samples, u32 num_samples);
492493
extern "C" void AudioPlayer_Play(const uint8_t* buf, uint32_t len);
493494
extern "C" int AudioPlayer_Buffered(void);
@@ -1146,7 +1147,7 @@ extern "C" void InitOTR() {
11461147
#endif
11471148

11481149
clearMtx = (uintptr_t)&gMtxClear;
1149-
OTRMessage_Init();
1150+
OTRMessage_Init(ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL);
11501151
OTRAudio_Init();
11511152
OTRExtScanner();
11521153
VanillaItemTable_Init();

soh/soh/OTRGlobals.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ uint32_t IsGameMasterQuest();
8686
void DeinitOTR(void);
8787
void VanillaItemTable_Init();
8888
void OTRAudio_Init();
89-
void OTRMessage_Init();
89+
void OTRMessage_Init(bool isPal);
9090
void InitAudio();
9191
void Graph_StartFrame();
9292
void Graph_ProcessGfxCommands(Gfx* commands);

soh/soh/z_message_OTR.cpp

+44-9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
extern "C" MessageTableEntry* sNesMessageEntryTablePtr;
1313
extern "C" MessageTableEntry* sGerMessageEntryTablePtr;
1414
extern "C" MessageTableEntry* sFraMessageEntryTablePtr;
15+
extern "C" MessageTableEntry* sJpnMessageEntryTablePtr;
1516
extern "C" MessageTableEntry* sStaffMessageEntryTablePtr;
1617
//extern "C" MessageTableEntry* _message_0xFFFC_nes;
1718

@@ -103,19 +104,53 @@ MessageTableEntry* OTRMessage_LoadTable(const std::string& filePath, bool isNES)
103104
return table;
104105
}
105106

106-
extern "C" void OTRMessage_Init()
107+
MessageTableEntry* OTRMessage_LoadTableJPN(const std::string& filePath) {
108+
auto file = std::static_pointer_cast<SOH::Text>(Ship::Context::GetInstance()->GetResourceManager()->LoadResource(filePath));
109+
110+
if (file == nullptr)
111+
return nullptr;
112+
113+
// Allocate room for an additional message
114+
// OTRTODO: Should not be malloc'ing here. It's fine for now since we check elsewhere that the message table is
115+
// already null.
116+
MessageTableEntry* table = (MessageTableEntry*)malloc(sizeof(MessageTableEntry) * (file->messages.size() + 1));
117+
118+
for (size_t i = 0; i < file->messages.size(); i++) {
119+
SetMessageEntry(table[i], file->messages[i]);
120+
121+
if (file->messages[i].id == 0xFFFC)
122+
_message_0xFFFC_nes = (char*)file->messages[i].msg.c_str();
123+
}
124+
OTRMessage_LoadCustom("override/" + filePath.substr(0, filePath.find_last_of('/')) + "/*", table, file->messages.size() + 1);
125+
126+
// Assert that the first message starts at the first text ID
127+
assert(table[0].textId == 0x0001);
128+
129+
return table;
130+
}
131+
132+
extern "C" void OTRMessage_Init(bool isPal)
107133
{
108134
// OTRTODO: Added a lot of null checks here so that we don't malloc the table multiple times causing a memory leak.
109135
// We really ought to fix the implementation such that we aren't malloc'ing new tables.
110136
// Once we fix the implementation, remove these NULL checks.
111-
if (sNesMessageEntryTablePtr == NULL) {
112-
sNesMessageEntryTablePtr = OTRMessage_LoadTable("text/nes_message_data_static/nes_message_data_static", true);
113-
}
114-
if (sGerMessageEntryTablePtr == NULL) {
115-
sGerMessageEntryTablePtr = OTRMessage_LoadTable("text/ger_message_data_static/ger_message_data_static", false);
116-
}
117-
if (sFraMessageEntryTablePtr == NULL) {
118-
sFraMessageEntryTablePtr = OTRMessage_LoadTable("text/fra_message_data_static/fra_message_data_static", false);
137+
if (isPal) {
138+
if (sNesMessageEntryTablePtr == NULL) {
139+
sNesMessageEntryTablePtr = OTRMessage_LoadTable("text/nes_message_data_static/nes_message_data_static", true);
140+
}
141+
if (sGerMessageEntryTablePtr == NULL) {
142+
sGerMessageEntryTablePtr = OTRMessage_LoadTable("text/ger_message_data_static/ger_message_data_static", false);
143+
}
144+
if (sFraMessageEntryTablePtr == NULL) {
145+
sFraMessageEntryTablePtr = OTRMessage_LoadTable("text/fra_message_data_static/fra_message_data_static", false);
146+
}
147+
} else {
148+
if (sJpnMessageEntryTablePtr == NULL) {
149+
sJpnMessageEntryTablePtr = OTRMessage_LoadTableJPN("text/jpn_message_data_static/jpn_message_data_static");
150+
}
151+
if (sNesMessageEntryTablePtr == NULL) {
152+
sNesMessageEntryTablePtr = OTRMessage_LoadTable("text/nes_message_data_static/nes_message_data_static", false);
153+
}
119154
}
120155

121156
if (sStaffMessageEntryTablePtr == NULL) {

soh/src/code/z_construct.c

+5-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,11 @@ void Message_Init(PlayState* play) {
157157
osSyncPrintf("吹き出しgame_alloc=%x\n", 0x2200); // "Textbox game_alloc=%x"
158158
assert(msgCtx->textboxSegment != NULL);
159159

160-
Font_LoadOrderedFont(&play->msgCtx.font);
160+
if (ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL) {
161+
Font_LoadOrderedFont(&play->msgCtx.font);
162+
} else { // GAME_REGION_NTSC
163+
Font_LoadOrderedFontNTSC(&play->msgCtx.font);
164+
}
161165

162166
YREG(31) = 0;
163167
}

soh/src/code/z_kanfont.c

+41
Original file line numberDiff line numberDiff line change
@@ -4206,3 +4206,44 @@ void Font_LoadOrderedFont(Font* font) {
42064206
}
42074207
}
42084208
}
4209+
4210+
extern MessageTableEntry* sJpnMessageEntryTablePtr;
4211+
4212+
void Font_LoadOrderedFontNTSC(Font* font) {
4213+
s32 len;
4214+
s32 size;
4215+
s32 codePointIndex;
4216+
s32 fontBufIndex;
4217+
s32 offset;
4218+
4219+
// font->msgOffset = _message_0xFFFC_jpn - (const char*)_jpn_message_data_staticSegmentStart;
4220+
// size = font->msgLength = _message_0xFFFD_jpn - _message_0xFFFC_jpn;
4221+
// len = (u32)size / 2;
4222+
// DmaMgr_RequestSync(font->msgBufWide, (uintptr_t)_jpn_message_data_staticSegmentRomStart + font->msgOffset, size);
4223+
MessageTableEntry* msgEntry = sJpnMessageEntryTablePtr;
4224+
4225+
while (msgEntry->textId != 0xFFFC) {
4226+
msgEntry++;
4227+
}
4228+
4229+
size = msgEntry->msgSize;
4230+
len = (u32)size / 2;
4231+
memcpy(font->msgBuf, msgEntry->segment, size);
4232+
4233+
4234+
fontBufIndex = 0;
4235+
for (codePointIndex = 0; font->msgBufWide[codePointIndex] != 0x8170; codePointIndex++) {
4236+
if (len < codePointIndex) {
4237+
osSyncPrintf("ERROR!! エラー!!! error───!!!!\n");
4238+
break;
4239+
}
4240+
4241+
if (font->msgBufWide[codePointIndex] != 0xA) {
4242+
offset = Kanji_OffsetFromShiftJIS(font->msgBufWide[codePointIndex]);
4243+
offset /= FONT_CHAR_TEX_SIZE;
4244+
memcpy(&font->fontBuf[fontBufIndex * 8], kanjiFontTbl[offset], strlen(kanjiFontTbl[offset]) + 1);
4245+
// DmaMgr_RequestSync(&font->fontBuf[fontBufIndex * 8], (uintptr_t)_kanjiSegmentStart + offset, FONT_CHAR_TEX_SIZE);
4246+
fontBufIndex += FONT_CHAR_TEX_SIZE / 8;
4247+
}
4248+
}
4249+
}

soh/src/code/z_kanji.c

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#include "global.h"
2+
#include "macros.h"
3+
4+
u16 T_800AF828_ne0[] = {
5+
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D,
6+
0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B,
7+
0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029,
8+
0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
9+
0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
10+
0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053,
11+
0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061,
12+
0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x0000, 0x0000, 0x0000, 0x0000,
13+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072,
14+
0x0073, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
15+
0x0079, 0x007A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
16+
0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088,
17+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
18+
0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
19+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098,
20+
0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x009C, 0x009D, 0x009E, 0x009F,
21+
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD,
22+
0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
23+
0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3,
24+
0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x0000, 0x0000,
25+
0x0000, 0x0000, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB,
26+
0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9,
27+
0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
28+
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105,
29+
0x0106, 0x0107, 0x0108, 0x0109, 0x010A, 0x010B, 0x010C, 0x010D, 0x010E, 0x010F, 0x0110, 0x0111, 0x0112, 0x0113,
30+
0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120, 0x0121,
31+
0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0124, 0x0125,
32+
0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133,
33+
0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141,
34+
0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F,
35+
0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015A, 0x015B, 0x015C, 0x015D,
36+
0x015E, 0x015F, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016A, 0x016B,
37+
0x016C, 0x016D, 0x016E, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179,
38+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017A, 0x017B, 0x017C, 0x017D, 0x017E, 0x017F,
39+
0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018A, 0x018B, 0x018C, 0x018D,
40+
0x018E, 0x018F, 0x0190, 0x0191, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0193,
41+
0x0194, 0x0195, 0x0196, 0x0197, 0x0198, 0x0199, 0x019A, 0x019B, 0x019C, 0x019D, 0x019E, 0x019F, 0x01A0, 0x01A1,
42+
0x01A2, 0x01A3, 0x01A4, 0x01A5, 0x01A6, 0x01A7, 0x01A8, 0x01A9, 0x01AA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
43+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
44+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
45+
0x0000, 0x0000, 0x0000, 0x0000, 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4,
46+
0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA, 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2,
47+
0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA, 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
48+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01CC, 0x01CD, 0x01CE, 0x01CF,
49+
0x01D0, 0x01D1, 0x01D2, 0x01D3, 0x01D4, 0x01D5, 0x01D6, 0x01D7, 0x01D8, 0x01D9, 0x01DA, 0x01DB, 0x01DC, 0x01DD,
50+
0x01DE, 0x01DF, 0x01E0, 0x01E1, 0x01E2, 0x01E3, 0x01E4, 0x01E5, 0x01E6, 0x01E7, 0x01E8, 0x01E9, 0x01EA, 0x01EB,
51+
0x01EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
52+
0x01ED, 0x01EE, 0x01EF, 0x01F0, 0x01F1, 0x01F2, 0x01F3, 0x01F4, 0x01F5, 0x01F6, 0x01F7, 0x01F8, 0x01F9, 0x01FA,
53+
0x01FB, 0x01FC, 0x01FD, 0x01FE, 0x01FF, 0x0200, 0x0201, 0x0202, 0x0203, 0x0204, 0x0205, 0x0206, 0x0207, 0x0208,
54+
0x0209, 0x020A, 0x020B, 0x020C, 0x020D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
55+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
56+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
57+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
58+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x020E, 0x020F, 0x0210, 0x0211,
59+
0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D, 0x021E, 0x021F,
60+
0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223,
61+
0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231,
62+
0x0232, 0x0233, 0x0234, 0x0235, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
63+
0x0236, 0x0237, 0x0238, 0x0239, 0x023A, 0x023B, 0x023C, 0x023D, 0x023E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
64+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x023F, 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246,
65+
0x0247, 0x0248, 0x0000, 0x0000, 0x0000, 0x0000, 0x0249, 0x024A, 0x024B, 0x024C, 0x024D, 0x024E, 0x024F, 0x0250,
66+
0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0257, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0258, 0x0259,
67+
0x025A, 0x025B, 0x025C, 0x025D, 0x025E, 0x025F, 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0000,
68+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
69+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0267, 0x0268, 0x0269, 0x026A,
70+
0x026B, 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278,
71+
0x0279, 0x027A, 0x027B, 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
72+
0x0000, 0x0000, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D,
73+
0x028E, 0x028F, 0x0290, 0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B,
74+
0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
75+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
76+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
77+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
78+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02A0, 0x02A1, 0x02A2, 0x02A3, 0x02A4, 0x02A5,
79+
0x02A6, 0x02A7, 0x02A8, 0x02A9, 0x02AA, 0x02AB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
80+
0x0000, 0x0000, 0x0000, 0x0000, 0x02AC, 0x02AD, 0x02AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
81+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02AF, 0x02B0, 0x02B1, 0x02B2,
82+
0x02B3, 0x02B4, 0x02B5, 0x02B6, 0x02B7, 0x02B8, 0x02B9, 0x02BA, 0x02BB, 0x02BC, 0x02BD, 0x02BE, 0x02BF, 0x0000,
83+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
84+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
85+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5,
86+
0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF, 0x02D0, 0x02D1, 0x02D2, 0x02D3,
87+
0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
88+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
89+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
90+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
91+
0x0000, 0x0000, 0x0000, 0x0000, 0x02D9, 0x02DA, 0x02DB, 0x02DC, 0x02DD, 0x02DE, 0x02DF, 0x02E0, 0x02E1, 0x02E2,
92+
0x02E3, 0x02E4, 0x02E5, 0x02E6, 0x02E7, 0x02E8, 0x02E9, 0x02EA, 0x02EB, 0x02EC, 0x02ED, 0x02EE, 0x02EF, 0x02F0,
93+
0x02F1, 0x02F2, 0x02F3, 0x02F4, 0x02F5, 0x02F6, 0x02F7, 0x02F8, 0x02F9, 0x02FA, 0x02FB, 0x02FC, 0x02FD, 0x0000,
94+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02FE, 0x02FF, 0x0300, 0x0301, 0x0302, 0x0000, 0x0000, 0x0000,
95+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
96+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
97+
0x0000, 0x0000, 0x0000, 0x0000, 0x0303, 0x0304, 0x0305, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
98+
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0307, 0x0308, 0x0309,
99+
};
100+
101+
// Handwritten Function
102+
s32 Kanji_OffsetFromShiftJIS(u32 arg0) {
103+
s32 var_a3;
104+
105+
if (arg0 >= 0x8800) {
106+
var_a3 = (arg0 & 0xFF) - 0x40;
107+
if (var_a3 >= 0x40) {
108+
var_a3--;
109+
}
110+
return (var_a3 + 0x30A + (0xBC * ((arg0 >> 8) - 0x88))) << 7;
111+
}
112+
var_a3 = (arg0 & 0xFF) - 0x40;
113+
if (var_a3 >= 0x40) {
114+
var_a3--;
115+
}
116+
117+
// #Region 2S2H
118+
int index = var_a3 + (0xBC * ((arg0 >> 8) - 0x81));
119+
if (index < 0 || index >= ARRAY_COUNT(T_800AF828_ne0)) {
120+
// Invalid font char found
121+
// @bug: Some characters e.g. 0x0222 can reach here incorrectly
122+
return 0;
123+
}
124+
// #End region
125+
126+
return T_800AF828_ne0[var_a3 + (0xBC * ((arg0 >> 8) - 0x81))] << 7;
127+
}

0 commit comments

Comments
 (0)