summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
authorinspectredc <78732756+inspectredc@users.noreply.github.com>2025-03-30 17:29:59 +0100
committerGitHub <noreply@github.com>2025-03-30 12:29:59 -0400
commit6140b2ec8f06e37ce29385096a4425b2a7207736 (patch)
tree538d871f2b00192beeedd464dc063b0dd9f81f4e /soh/src/code
parent0e23adc237f37f8dc4aa3398f10c3b556fb83be1 (diff)
NTSC Support (N64) (#4198)
* copy n64 pal 10 doing this so i can check diffs i make * transfer german->jp icon item * overlays, message data, icon item jpn, audio, code todo: title_static, gameplay keep * add kanji and fix title cards * title static * spell folder correctly * boss title cards, do action, icon item, item name, map name * headers for jpn stuff * gameplay_keep * Scenes, audio, jp text extraction, rom support, overlay fixes, sheik & darunia todo: test & disable darunia fix cvar for ntsc * msgptr init fix * icon item offsets * comment out title cards until zapd can fix itself (we extract these in a different file anyway) * compile and font implemented to get past title screen * file select * message, kaleido and everything else but rando * uintptr_t * rando and custom messages working! * ntsc-j 1.0 support * n64 logo? * copy ntsc 10 to 11 * ntsc 11 extraction * change title version names * copy ntsc 11 to 12 * ntsc 12 extraction * clean up some todos * re checkout submodules post merge * fix US filename * support cross-version filenames * add new versions to non-mq list * use correct message table init * Fix ntsc nes message table overriding pal nes message table * actual fix, allows extraction * fix file name using wrong font of file being hovered over * Fix barinade crash * re-add pal * better jabu fix and revert LUS * fix gerudo title cards * better better owl select * more owl fixes * build * fix some name decode issues * Switch Language Mid Text * Fix PAL displaying for JP filenames * Fix AskToEquip Crash * Disable Credits Timing Fix on NTSC * Fix JP Text positioning * basic language switching (BIG todo: file select, title screen) * Title Screen Hopefully working * add ntsc to linux appimage stuff, TODO: add .v64/.n64 support * Update OTRExporter * Fix pause to decide offset * Fix bomb item name crash * fix fire arrows and PoH * builds * update asset changes and fix menu language changing * fix name decode * Fix crashes and add rando/boss rush select stuff * Revive debug feature by setting language cvar too * Fix ocarina text speed softlock, and update jp text speed changes * Merge remote-tracking branch 'upstream/develop' into NTSC * Fix options menu and let pal use japanese fully * Resolve some suggestions * match up gTextSpeed changes to english (still broken!) * Fix text speed crash * Set default filename language on save init funcs * bump otrexporter * Display same correct info for n64 ntsc-j and ntsc-u * quicktext more closely aligned with decomp * linux appimage v64/n64 checksums * bump zapd * Credits Fix Tooltip Adjusted * update supported hashes json * update shasums to include JP n64
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/game.c14
-rw-r--r--soh/src/code/z_actor.c9
-rw-r--r--soh/src/code/z_construct.c25
-rw-r--r--soh/src/code/z_demo.c4
-rw-r--r--soh/src/code/z_game_over.c6
-rw-r--r--soh/src/code/z_kanfont.c4030
-rw-r--r--soh/src/code/z_kanji.c127
-rw-r--r--soh/src/code/z_message_PAL.c1330
-rw-r--r--soh/src/code/z_parameter.c225
-rw-r--r--soh/src/code/z_sram.c6
10 files changed, 5587 insertions, 189 deletions
diff --git a/soh/src/code/game.c b/soh/src/code/game.c
index 7e1db9c17..382d9595a 100644
--- a/soh/src/code/game.c
+++ b/soh/src/code/game.c
@@ -6,6 +6,12 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h"
+#include "message_data_static.h"
+extern MessageTableEntry* sNesMessageEntryTablePtr;
+extern MessageTableEntry* sGerMessageEntryTablePtr;
+extern MessageTableEntry* sFraMessageEntryTablePtr;
+extern MessageTableEntry* sJpnMessageEntryTablePtr;
+
SpeedMeter D_801664D0;
VisCvg sVisCvg;
VisZBuf sVisZBuf;
@@ -339,6 +345,14 @@ void GameState_Update(GameState* gameState) {
gSaveContext.language = CVarGetInteger(CVAR_SETTING("Languages"), LANGUAGE_ENG);
+ if (gSaveContext.language == LANGUAGE_JPN && sJpnMessageEntryTablePtr == NULL) {
+ gSaveContext.language = LANGUAGE_ENG;
+ } else if (gSaveContext.language == LANGUAGE_GER && sGerMessageEntryTablePtr == NULL) {
+ gSaveContext.language = LANGUAGE_ENG;
+ } else if (gSaveContext.language == LANGUAGE_FRA && sFraMessageEntryTablePtr == NULL) {
+ gSaveContext.language = LANGUAGE_ENG;
+ }
+
GameInteractor_ExecuteOnGameFrameUpdate();
gameState->frames++;
}
diff --git a/soh/src/code/z_actor.c b/soh/src/code/z_actor.c
index 6d5f9b3b6..5fb60c4e0 100644
--- a/soh/src/code/z_actor.c
+++ b/soh/src/code/z_actor.c
@@ -847,6 +847,10 @@ void TitleCard_InitBossName(PlayState* play, TitleCardContext* titleCtx, void* t
newName[length - 6] = 'G';
newName[length - 5] = 'E';
newName[length - 4] = 'R';
+ } else if (gSaveContext.language == LANGUAGE_JPN) {
+ newName[length - 6] = 'J';
+ newName[length - 5] = 'P';
+ newName[length - 4] = 'N';
}
texture = newName;
}
@@ -1067,6 +1071,11 @@ void TitleCard_InitPlaceName(PlayState* play, TitleCardContext* titleCtx, void*
newName[length - 6] = 'G';
newName[length - 5] = 'E';
newName[length - 4] = 'R';
+ }
+ else if (gSaveContext.language == LANGUAGE_JPN) {
+ newName[length - 6] = 'J';
+ newName[length - 5] = 'P';
+ newName[length - 4] = 'N';
}
texture = newName;
}
diff --git a/soh/src/code/z_construct.c b/soh/src/code/z_construct.c
index 065c6f413..7fb2ff657 100644
--- a/soh/src/code/z_construct.c
+++ b/soh/src/code/z_construct.c
@@ -1,6 +1,7 @@
#include "global.h"
#include <textures/do_action_static/do_action_static.h>
#include <assert.h>
+#include "soh/ResourceManagerHelpers.h"
void func_80110990(PlayState* play) {
Map_Destroy(play);
@@ -80,21 +81,21 @@ void func_801109B0(PlayState* play) {
}
}
- osSyncPrintf("EVENT=%d\n", ((void)0, gSaveContext.timer1State));
+ osSyncPrintf("EVENT=%d\n", ((void)0, gSaveContext.timerState));
- if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8) || (gSaveContext.timer2State == 4) ||
- (gSaveContext.timer2State == 10)) {
+ if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8) || (gSaveContext.subTimerState == 4) ||
+ (gSaveContext.subTimerState == 10)) {
osSyncPrintf("restart_flag=%d\n", ((void)0, gSaveContext.respawnFlag));
if ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) {
- if (gSaveContext.timer1State == 4) {
- gSaveContext.timer1State = 1;
+ if (gSaveContext.timerState == 4) {
+ gSaveContext.timerState = 1;
gSaveContext.timerX[0] = 140;
gSaveContext.timerY[0] = 80;
}
}
- if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8)) {
+ if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8)) {
temp = 0;
} else {
temp = 1;
@@ -109,10 +110,10 @@ void func_801109B0(PlayState* play) {
}
}
- if ((gSaveContext.timer1State >= 11) && (gSaveContext.timer1State < 16)) {
- gSaveContext.timer1State = 0;
+ if ((gSaveContext.timerState >= 11) && (gSaveContext.timerState < 16)) {
+ gSaveContext.timerState = 0;
// "Timer Stop!!!!!!!!!!!!!!!!!!!!!!"
- osSyncPrintf("タイマー停止!!!!!!!!!!!!!!!!!!!!! = %d\n", gSaveContext.timer1State);
+ osSyncPrintf("タイマー停止!!!!!!!!!!!!!!!!!!!!! = %d\n", gSaveContext.timerState);
}
osSyncPrintf("PARAMETER領域=%x\n", parameterSize + 0x5300); // "Parameter Area = %x"
@@ -157,7 +158,11 @@ void Message_Init(PlayState* play) {
osSyncPrintf("吹き出しgame_alloc=%x\n", 0x2200); // "Textbox game_alloc=%x"
assert(msgCtx->textboxSegment != NULL);
- Font_LoadOrderedFont(&play->msgCtx.font);
+ if (ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL && gSaveContext.language != LANGUAGE_JPN) {
+ Font_LoadOrderedFont(&play->msgCtx.font);
+ } else { // GAME_REGION_NTSC
+ Font_LoadOrderedFontNTSC(&play->msgCtx.font);
+ }
YREG(31) = 0;
}
diff --git a/soh/src/code/z_demo.c b/soh/src/code/z_demo.c
index c079d0064..d5b6e3a27 100644
--- a/soh/src/code/z_demo.c
+++ b/soh/src/code/z_demo.c
@@ -521,7 +521,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
}
bool playCutscene = false;
- if (!CVarGetInteger(CVAR_ENHANCEMENT("CreditsFix"), 1) && (cmd->startFrame == csCtx->frames)) {
+ if ((!CVarGetInteger(CVAR_ENHANCEMENT("CreditsFix"), 1) || ResourceMgr_GetGameRegion(0) == GAME_REGION_NTSC) && (cmd->startFrame == csCtx->frames)) {
playCutscene = true;
} else if (CVarGetInteger(CVAR_ENHANCEMENT("CreditsFix"), 1)) {
u16 delay = 0;
@@ -576,7 +576,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
osSyncPrintf("\n分岐先指定!!=[%d]番", cmd->base); // "Future fork designation=No. [%d]"
if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (csCtx->frames != cmd->startFrame)) {
- gSaveContext.unk_13E7 = 1;
+ gSaveContext.forceRisingButtonAlphas = 1;
}
gSaveContext.cutsceneIndex = 0;
diff --git a/soh/src/code/z_game_over.c b/soh/src/code/z_game_over.c
index 1850133aa..80974a9b9 100644
--- a/soh/src/code/z_game_over.c
+++ b/soh/src/code/z_game_over.c
@@ -31,8 +31,8 @@ void GameOver_Update(PlayState* play) {
case GAMEOVER_DEATH_START:
Message_CloseTextbox(play);
- gSaveContext.timer1State = 0;
- gSaveContext.timer2State = 0;
+ gSaveContext.timerState = 0;
+ gSaveContext.subTimerState = 0;
gSaveContext.eventInf[1] &= ~1;
// search inventory for spoiling items and revert if necessary
@@ -77,7 +77,7 @@ void GameOver_Update(PlayState* play) {
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = BTN_ENABLED;
}
- gSaveContext.unk_13E7 = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0;
+ gSaveContext.forceRisingButtonAlphas = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0;
Environment_InitGameOverLights(play);
gGameOverTimer = 20;
diff --git a/soh/src/code/z_kanfont.c b/soh/src/code/z_kanfont.c
index 217ef3c0a..b0b754b89 100644
--- a/soh/src/code/z_kanfont.c
+++ b/soh/src/code/z_kanfont.c
@@ -4,6 +4,7 @@
#include "message_data_static.h"
#include "textures/nes_font_static/nes_font_static.h"
+#include "textures/kanji/kanji.h"
#include "textures/message_static/message_static.h"
static const char* fntTbl[] =
@@ -150,6 +151,3983 @@ static const char* fntTbl[] =
gMsgCharABControlPadTex,
};
+static const char* kanjiFontTbl[] = {
+ gMsgKanji8140SpaceTex,
+ gMsgKanji8141ToutenTex,
+ gMsgKanji8142KutenTex,
+ gMsgKanji8143CommaTex,
+ gMsgKanji8144PeriodTex,
+ gMsgKanji8145NakatenTex,
+ gMsgKanji8146ColonTex,
+ gMsgKanji8147SemicolonTex,
+ gMsgKanji8148QuestionMarkTex,
+ gMsgKanji8149ExclamationMarkTex,
+ gMsgKanji814ADakutenTex,
+ gMsgKanji814BHandakutenTex,
+ gMsgKanji814CAcuteAccentTex,
+ gMsgKanji814DGraveAccentTex,
+ gMsgKanji814EDiaeresisTex,
+ gMsgKanji814FCircumflexAccentTex,
+ gMsgKanji8150EmptyTex,
+ gMsgKanji8151EmptyTex,
+ gMsgKanji8152IchinojitenKatakanaTex,
+ gMsgKanji8153IchinojitenKatakanaDakutenTex,
+ gMsgKanji8154IchinojitenHiraganaTex,
+ gMsgKanji8155IchinojitenHiraganaDakutenTex,
+ gMsgKanji8156NonojitenTex,
+ gMsgKanji8157Tex,
+ gMsgKanji8158DounojitenTex,
+ gMsgKanji8159ShimeTex,
+ gMsgKanji815AZeroTex,
+ gMsgKanji815BChouonpuTex,
+ gMsgKanji815CDashTex,
+ gMsgKanji815DHyphenTex,
+ gMsgKanji815ESlashTex,
+ gMsgKanji815FBackSlashTex,
+ gMsgKanji8160WaveDashTex,
+ gMsgKanji8161DoubleVerticalLineTex,
+ gMsgKanji8162VerticalLineTex,
+ gMsgKanji8163SantenLeaderTex,
+ gMsgKanji8164NitenLeaderTex,
+ gMsgKanji8165SingleQuotationMarkLeftTex,
+ gMsgKanji8166SingleQuotationMarkRightTex,
+ gMsgKanji8167DoubleQuotationMarkLeftTex,
+ gMsgKanji8168DoubleQuotationMarkRightTex,
+ gMsgKanji8169ParenthesesLeftTex,
+ gMsgKanji816AParenthesesRightTex,
+ gMsgKanji816BKikkoukakkoLeftTex,
+ gMsgKanji816CKikkoukakkoRightTex,
+ gMsgKanji816DSquareBracketLeftTex,
+ gMsgKanji816ESquareBracketRightTex,
+ gMsgKanji816FCurlyBracketLeftTex,
+ gMsgKanji8170CurlyBracketRightTex,
+ gMsgKanji8171YamakakkoLeftTex,
+ gMsgKanji8172YamakakkoRightTex,
+ gMsgKanji8173NijyuuyamakakkoLeftTex,
+ gMsgKanji8174NijyuuyamakakkoRightTex,
+ gMsgKanji8175KagikakkoLeftTex,
+ gMsgKanji8176KagikakkoRightTex,
+ gMsgKanji8177NijyuukagikakkoLeftTex,
+ gMsgKanji8178NijyuukagikakkoRightTex,
+ gMsgKanji8179SumitsukikakkoLeftTex,
+ gMsgKanji817ASumitsukikakkoRightTex,
+ gMsgKanji817BPlusSignTex,
+ gMsgKanji817CMinusSignTex,
+ gMsgKanji817DPlusMinusSignTex,
+ gMsgKanji817EMultiplicationSignTex,
+ gMsgKanji8180DivisionSignTex,
+ gMsgKanji8181EqualsSignTex,
+ gMsgKanji8182NotEqualSignTex,
+ gMsgKanji8183LessThanSignTex,
+ gMsgKanji8184GreaterThanSignTex,
+ gMsgKanji8185LessThanOrEqualToTex,
+ gMsgKanji8186GreaterThanOrEqualToTex,
+ gMsgKanji8187InfinityTex,
+ gMsgKanji8188ThereforeTex,
+ gMsgKanji8189MaleTex,
+ gMsgKanji818AFemaleTex,
+ gMsgKanji818BDegreeSignTex,
+ gMsgKanji818CPrimeTex,
+ gMsgKanji818DDoublePrimeTex,
+ gMsgKanji818ECelciusTex,
+ gMsgKanji818FYenSignTex,
+ gMsgKanji8190DollarSignTex,
+ gMsgKanji8191CentSignTex,
+ gMsgKanji8192PoundSignTex,
+ gMsgKanji8193PercentSignTex,
+ gMsgKanji8194NumberSignTex,
+ gMsgKanji8195AmpersandTex,
+ gMsgKanji8196AsteriskTex,
+ gMsgKanji8197AtSignTex,
+ gMsgKanji8198SectionSignTex,
+ gMsgKanji8199WhiteStarTex,
+ gMsgKanji819ABlackStarTex,
+ gMsgKanji819BWhiteCircleTex,
+ gMsgKanji819CBlackCircleTex,
+ gMsgKanji819DDoubleCircleTex,
+ gMsgKanji819EWhiteDiamondTex,
+ gMsgKanji819FBlackDiamondTex,
+ gMsgKanji81A0WhiteSquareTex,
+ gMsgKanji81A1BlackSquareTex,
+ gMsgKanji81A2WhiteTriangleTex,
+ gMsgKanji81A3BlackTriangleTex,
+ gMsgKanji81A4WhiteInvertedTriangleTex,
+ gMsgKanji81A5BlackInvertedTriangleTex,
+ gMsgKanji81A6KomejirushiTex,
+ gMsgKanji81A7PostalMarkTex,
+ gMsgKanji81A8ArrowRightTex,
+ gMsgKanji81A9ArrowLeftTex,
+ gMsgKanji81AAArrowUpTex,
+ gMsgKanji81ABArrowDownTex,
+ gMsgKanji81ACGetaTex,
+ gMsgKanji81B8EmptyTex,
+ gMsgKanji81B9EmptyTex,
+ gMsgKanji81BAEmptyTex,
+ gMsgKanji81BBEmptyTex,
+ gMsgKanji81BCEmptyTex,
+ gMsgKanji81BDEmptyTex,
+ gMsgKanji81BEEmptyTex,
+ gMsgKanji81BFIntersectionTex,
+ gMsgKanji81C8EmptyTex,
+ gMsgKanji81C9EmptyTex,
+ gMsgKanji81CAEmptyTex,
+ gMsgKanji81CBEmptyTex,
+ gMsgKanji81CCEmptyTex,
+ gMsgKanji81CDEmptyTex,
+ gMsgKanji81CEEmptyTex,
+ gMsgKanji81DBEmptyTex,
+ gMsgKanji81DCEmptyTex,
+ gMsgKanji81DDEmptyTex,
+ gMsgKanji81DEEmptyTex,
+ gMsgKanji81DFEmptyTex,
+ gMsgKanji81E0ApproximatelyEqualToTex,
+ gMsgKanji81E1MuchLessThanTex,
+ gMsgKanji81E2MuchGreaterThanTex,
+ gMsgKanji81E3SquareRootTex,
+ gMsgKanji81E4SimilarTex,
+ gMsgKanji81E5ProportionalTex,
+ gMsgKanji81E6BecauseTex,
+ gMsgKanji81E7IntegralTex,
+ gMsgKanji81E8DoubleIntegralTex,
+ gMsgKanji81F0EmptyTex,
+ gMsgKanji81F1EmptyTex,
+ gMsgKanji81F2EmptyTex,
+ gMsgKanji81F3EmptyTex,
+ gMsgKanji81F4EmptyTex,
+ gMsgKanji81F5EmptyTex,
+ gMsgKanji81F6EmptyTex,
+ gMsgKanji81F7EmptyTex,
+ gMsgKanji81FCEmptyTex,
+ gMsgKanji824FZeroTex,
+ gMsgKanji8250OneTex,
+ gMsgKanji8251TwoTex,
+ gMsgKanji8252ThreeTex,
+ gMsgKanji8253FourTex,
+ gMsgKanji8254FiveTex,
+ gMsgKanji8255SixTex,
+ gMsgKanji8256SevenTex,
+ gMsgKanji8257EightTex,
+ gMsgKanji8258NineTex,
+ gMsgKanji8260CapitalATex,
+ gMsgKanji8261CapitalBTex,
+ gMsgKanji8262CapitalCTex,
+ gMsgKanji8263CapitalDTex,
+ gMsgKanji8264CapitalETex,
+ gMsgKanji8265CapitalFTex,
+ gMsgKanji8266CapitalGTex,
+ gMsgKanji8267CapitalHTex,
+ gMsgKanji8268CapitalITex,
+ gMsgKanji8269CapitalJTex,
+ gMsgKanji826ACapitalKTex,
+ gMsgKanji826BCapitalLTex,
+ gMsgKanji826CCapitalMTex,
+ gMsgKanji826DCapitalNTex,
+ gMsgKanji826ECapitalOTex,
+ gMsgKanji826FCapitalPTex,
+ gMsgKanji8270CapitalQTex,
+ gMsgKanji8271CapitalRTex,
+ gMsgKanji8272CapitalSTex,
+ gMsgKanji8273CapitalTTex,
+ gMsgKanji8274CapitalUTex,
+ gMsgKanji8275CapitalVTex,
+ gMsgKanji8276CapitalWTex,
+ gMsgKanji8277CapitalXTex,
+ gMsgKanji8278CapitalYTex,
+ gMsgKanji8279CapitalZTex,
+ gMsgKanji8281LowercaseATex,
+ gMsgKanji8282LowercaseBTex,
+ gMsgKanji8283LowercaseCTex,
+ gMsgKanji8284LowercaseDTex,
+ gMsgKanji8285LowercaseETex,
+ gMsgKanji8286LowercaseFTex,
+ gMsgKanji8287LowercaseGTex,
+ gMsgKanji8288LowercaseHTex,
+ gMsgKanji8289LowercaseITex,
+ gMsgKanji828ALowercaseJTex,
+ gMsgKanji828BLowercaseKTex,
+ gMsgKanji828CLowercaseLTex,
+ gMsgKanji828DLowercaseMTex,
+ gMsgKanji828ELowercaseNTex,
+ gMsgKanji828FLowercaseOTex,
+ gMsgKanji8290LowercasePTex,
+ gMsgKanji8291LowercaseQTex,
+ gMsgKanji8292LowercaseRTex,
+ gMsgKanji8293LowercaseSTex,
+ gMsgKanji8294LowercaseTTex,
+ gMsgKanji8295LowercaseUTex,
+ gMsgKanji8296LowercaseVTex,
+ gMsgKanji8297LowercaseWTex,
+ gMsgKanji8298LowercaseXTex,
+ gMsgKanji8299LowercaseYTex,
+ gMsgKanji829ALowercaseZTex,
+ gMsgKanji829FHiraganaSmallATex,
+ gMsgKanji82A0HiraganaATex,
+ gMsgKanji82A1HiraganaSmallITex,
+ gMsgKanji82A2HiraganaITex,
+ gMsgKanji82A3HiraganaSmallUTex,
+ gMsgKanji82A4HiraganaUTex,
+ gMsgKanji82A5HiraganaSmallETex,
+ gMsgKanji82A6HiraganaETex,
+ gMsgKanji82A7HiraganaSmallOTex,
+ gMsgKanji82A8HiraganaOTex,
+ gMsgKanji82A9HiraganaKaTex,
+ gMsgKanji82AAHiraganaGaTex,
+ gMsgKanji82ABHiraganaKiTex,
+ gMsgKanji82ACHiraganaGiTex,
+ gMsgKanji82ADHiraganaKuTex,
+ gMsgKanji82AEHiraganaGuTex,
+ gMsgKanji82AFHiraganaKeTex,
+ gMsgKanji82B0HiraganaGeTex,
+ gMsgKanji82B1HiraganaKoTex,
+ gMsgKanji82B2HiraganaGoTex,
+ gMsgKanji82B3HiraganaSaTex,
+ gMsgKanji82B4HiraganaZaTex,
+ gMsgKanji82B5HiraganaShiTex,
+ gMsgKanji82B6HiraganaJiTex,
+ gMsgKanji82B7HiraganaSuTex,
+ gMsgKanji82B8HiraganaZuTex,
+ gMsgKanji82B9HiraganaSeTex,
+ gMsgKanji82BAHiraganaZeTex,
+ gMsgKanji82BBHiraganaSoTex,
+ gMsgKanji82BCHiraganaZoTex,
+ gMsgKanji82BDHiraganaTaTex,
+ gMsgKanji82BEHiraganaDaTex,
+ gMsgKanji82BFHiraganaChiTex,
+ gMsgKanji82C0HiraganaDiTex,
+ gMsgKanji82C1HiraganaSmallTsuTex,
+ gMsgKanji82C2HiraganaTsuTex,
+ gMsgKanji82C3HiraganaDuTex,
+ gMsgKanji82C4HiraganaTeTex,
+ gMsgKanji82C5HiraganaDeTex,
+ gMsgKanji82C6HiraganaToTex,
+ gMsgKanji82C7HiraganaDoTex,
+ gMsgKanji82C8HiraganaNaTex,
+ gMsgKanji82C9HiraganaNiTex,
+ gMsgKanji82CAHiraganaNuTex,
+ gMsgKanji82CBHiraganaNeTex,
+ gMsgKanji82CCHiraganaNoTex,
+ gMsgKanji82CDHiraganaHaTex,
+ gMsgKanji82CEHiraganaBaTex,
+ gMsgKanji82CFHiraganaPaTex,
+ gMsgKanji82D0HiraganaHiTex,
+ gMsgKanji82D1HiraganaBiTex,
+ gMsgKanji82D2HiraganaPiTex,
+ gMsgKanji82D3HiraganaFuTex,
+ gMsgKanji82D4HiraganaBuTex,
+ gMsgKanji82D5HiraganaPuTex,
+ gMsgKanji82D6HiraganaHeTex,
+ gMsgKanji82D7HiraganaBeTex,
+ gMsgKanji82D8HiraganaPeTex,
+ gMsgKanji82D9HiraganaHoTex,
+ gMsgKanji82DAHiraganaBoTex,
+ gMsgKanji82DBHiraganaPoTex,
+ gMsgKanji82DCHiraganaMaTex,
+ gMsgKanji82DDHiraganaMiTex,
+ gMsgKanji82DEHiraganaMuTex,
+ gMsgKanji82DFHiraganaMeTex,
+ gMsgKanji82E0HiraganaMoTex,
+ gMsgKanji82E1HiraganaSmallYaTex,
+ gMsgKanji82E2HiraganaYaTex,
+ gMsgKanji82E3HiraganaSmallYuTex,
+ gMsgKanji82E4HiraganaYuTex,
+ gMsgKanji82E5HiraganaSmallYoTex,
+ gMsgKanji82E6HiraganaYoTex,
+ gMsgKanji82E7HiraganaRaTex,
+ gMsgKanji82E8HiraganaRiTex,
+ gMsgKanji82E9HiraganaRuTex,
+ gMsgKanji82EAHiraganaReTex,
+ gMsgKanji82EBHiraganaRoTex,
+ gMsgKanji82ECHiraganaSmallWaTex,
+ gMsgKanji82EDHiraganaWaTex,
+ gMsgKanji82EEHiraganaWiTex,
+ gMsgKanji82EFHiraganaWeTex,
+ gMsgKanji82F0HiraganaWoTex,
+ gMsgKanji82F1HiraganaNTex,
+ gMsgKanji82F2EmptyTex,
+ gMsgKanji8340KatakanaSmallATex,
+ gMsgKanji8341KatakanaATex,
+ gMsgKanji8342KatakanaSmallITex,
+ gMsgKanji8343KatakanaITex,
+ gMsgKanji8344KatakanaSmallUTex,
+ gMsgKanji8345KatakanaUTex,
+ gMsgKanji8346KatakanaSmallETex,
+ gMsgKanji8347KatakanaETex,
+ gMsgKanji8348KatakanaSmallOTex,
+ gMsgKanji8349KatakanaOTex,
+ gMsgKanji834AKatakanaKaTex,
+ gMsgKanji834BKatakanaGaTex,
+ gMsgKanji834CKatakanaKiTex,
+ gMsgKanji834DKatakanaGiTex,
+ gMsgKanji834EKatakanaKuTex,
+ gMsgKanji834FKatakanaGuTex,
+ gMsgKanji8350KatakanaKeTex,
+ gMsgKanji8351KatakanaGeTex,
+ gMsgKanji8352KatakanaKoTex,
+ gMsgKanji8353KatakanaGoTex,
+ gMsgKanji8354KatakanaSaTex,
+ gMsgKanji8355KatakanaZaTex,
+ gMsgKanji8356KatakanaShiTex,
+ gMsgKanji8357KatakanaJiTex,
+ gMsgKanji8358KatakanaSuTex,
+ gMsgKanji8359KatakanaZuTex,
+ gMsgKanji835AKatakanaSeTex,
+ gMsgKanji835BKatakanaZeTex,
+ gMsgKanji835CKatakanaSoTex,
+ gMsgKanji835DKatakanaZoTex,
+ gMsgKanji835EKatakanaTaTex,
+ gMsgKanji835FKatakanaDaTex,
+ gMsgKanji8360KatakanaChiTex,
+ gMsgKanji8361KatakanaDiTex,
+ gMsgKanji8362KatakanaSmallTsuTex,
+ gMsgKanji8363KatakanaTsuTex,
+ gMsgKanji8364KatakanaDuTex,
+ gMsgKanji8365KatakanaTeTex,
+ gMsgKanji8366KatakanaDeTex,
+ gMsgKanji8367KatakanaToTex,
+ gMsgKanji8368KatakanaDoTex,
+ gMsgKanji8369KatakanaNaTex,
+ gMsgKanji836AKatakanaNiTex,
+ gMsgKanji836BKatakanaNuTex,
+ gMsgKanji836CKatakanaNeTex,
+ gMsgKanji836DKatakanaNoTex,
+ gMsgKanji836EKatakanaHaTex,
+ gMsgKanji836FKatakanaBaTex,
+ gMsgKanji8370KatakanaPaTex,
+ gMsgKanji8371KatakanaHiTex,
+ gMsgKanji8372KatakanaBiTex,
+ gMsgKanji8373KatakanaPiTex,
+ gMsgKanji8374KatakanaFuTex,
+ gMsgKanji8375KatakanaBuTex,
+ gMsgKanji8376KatakanaPuTex,
+ gMsgKanji8377KatakanaHeTex,
+ gMsgKanji8378KatakanaBeTex,
+ gMsgKanji8379KatakanaPeTex,
+ gMsgKanji837AKatakanaHoTex,
+ gMsgKanji837BKatakanaBoTex,
+ gMsgKanji837CKatakanaPoTex,
+ gMsgKanji837DKatakanaMaTex,
+ gMsgKanji837EKatakanaMiTex,
+ gMsgKanji8380KatakanaMuTex,
+ gMsgKanji8381KatakanaMeTex,
+ gMsgKanji8382KatakanaMoTex,
+ gMsgKanji8383KatakanaSmallYaTex,
+ gMsgKanji8384KatakanaYaTex,
+ gMsgKanji8385KatakanaSmallYuTex,
+ gMsgKanji8386KatakanaYuTex,
+ gMsgKanji8387KatakanaSmallYoTex,
+ gMsgKanji8388KatakanaYoTex,
+ gMsgKanji8389KatakanaRaTex,
+ gMsgKanji838AKatakanaRiTex,
+ gMsgKanji838BKatakanaRuTex,
+ gMsgKanji838CKatakanaReTex,
+ gMsgKanji838DKatakanaRoTex,
+ gMsgKanji838EKatakanaSmallWaTex,
+ gMsgKanji838FKatakanaWaTex,
+ gMsgKanji8390KatakanaWiTex,
+ gMsgKanji8391KatakanaWeTex,
+ gMsgKanji8392KatakanaWoTex,
+ gMsgKanji8393KatakanaNTex,
+ gMsgKanji8394KatakanaVuTex,
+ gMsgKanji8395KatakanaSmallKaTex,
+ gMsgKanji8396KatakanaSmallKeTex,
+ gMsgKanji839FButtonATex,
+ gMsgKanji83A0ButtonBTex,
+ gMsgKanji83A1ButtonCTex,
+ gMsgKanji83A2ButtonLTex,
+ gMsgKanji83A3ButtonRTex,
+ gMsgKanji83A4ButtonZTex,
+ gMsgKanji83A5ButtonCUpTex,
+ gMsgKanji83A6ButtonCDownTex,
+ gMsgKanji83A7ButtonCLeftTex,
+ gMsgKanji83A8ButtonCRightTex,
+ gMsgKanji83A9ZTargetSignTex,
+ gMsgKanji83AAControlStickTex,
+ gMsgKanji83ABGreekCapitalNuTex,
+ gMsgKanji83ACGreekCapitalXiTex,
+ gMsgKanji83ADGreekCapitalOmicronTex,
+ gMsgKanji83AEGreekCapitalPiTex,
+ gMsgKanji83AFGreekCapitalRhoTex,
+ gMsgKanji83B0GreekCapitalSigmaTex,
+ gMsgKanji83B1GreekCapitalTauTex,
+ gMsgKanji83B2GreekCapitalUpsilonTex,
+ gMsgKanji83B3GreekCapitalPhiTex,
+ gMsgKanji83B4GreekCapitalChiTex,
+ gMsgKanji83B5GreekCapitalPsiTex,
+ gMsgKanji83B6GreekCapitalOmegaTex,
+ gMsgKanji83BFGreekLowercaseAlphaTex,
+ gMsgKanji83C0GreekLowercaseBetaTex,
+ gMsgKanji83C1GreekLowercaseGammaTex,
+ gMsgKanji83C2GreekLowercaseDeltaTex,
+ gMsgKanji83C3GreekLowercaseEpsilonTex,
+ gMsgKanji83C4GreekLowercaseZetaTex,
+ gMsgKanji83C5GreekLowercaseEtaTex,
+ gMsgKanji83C6GreekLowercaseThetaTex,
+ gMsgKanji83C7GreekLowercaseIotaTex,
+ gMsgKanji83C8GreekLowercaseKappaTex,
+ gMsgKanji83C9GreekLowercaseLamdaTex,
+ gMsgKanji83CAGreekLowercaseMuTex,
+ gMsgKanji83CBGreekLowercaseNuTex,
+ gMsgKanji83CCGreekLowercaseXiTex,
+ gMsgKanji83CDGreekLowercaseOmicronTex,
+ gMsgKanji83CEGreekLowercasePiTex,
+ gMsgKanji83CFGreekLowercaseRhoTex,
+ gMsgKanji83D0GreekLowercaseSigmaTex,
+ gMsgKanji83D1GreekLowercaseTauTex,
+ gMsgKanji83D2GreekLowercaseUpsilonTex,
+ gMsgKanji83D3GreekLowercasePhiTex,
+ gMsgKanji83D4GreekLowercaseChiTex,
+ gMsgKanji83D5GreekLowercasePsiTex,
+ gMsgKanji83D6GreekLowercaseOmegaTex,
+ gMsgKanji83D7EmptyTex,
+ gMsgKanji8440HylianATex,
+ gMsgKanji8441HylianITex,
+ gMsgKanji8442HylianUTex,
+ gMsgKanji8443HylianETex,
+ gMsgKanji8444HylianOTex,
+ gMsgKanji8445HylianKaTex,
+ gMsgKanji8446HylianKiTex,
+ gMsgKanji8447HylianKuTex,
+ gMsgKanji8448HylianKeTex,
+ gMsgKanji8449HylianKoTex,
+ gMsgKanji844AHylianSaTex,
+ gMsgKanji844BHylianShiTex,
+ gMsgKanji844CHylianSuTex,
+ gMsgKanji844DHylianSeTex,
+ gMsgKanji844EHylianSoTex,
+ gMsgKanji844FHylianTaTex,
+ gMsgKanji8450HylianChiTex,
+ gMsgKanji8451HylianTsuTex,
+ gMsgKanji8452HylianTeTex,
+ gMsgKanji8453HylianToTex,
+ gMsgKanji8454HylianNaTex,
+ gMsgKanji8455HylianNiTex,
+ gMsgKanji8456HylianNuTex,
+ gMsgKanji8457HylianNeTex,
+ gMsgKanji8458HylianNoTex,
+ gMsgKanji8459HylianHaTex,
+ gMsgKanji845AHylianHiTex,
+ gMsgKanji845BHylianFuTex,
+ gMsgKanji845CHylianHeTex,
+ gMsgKanji845DHylianHoTex,
+ gMsgKanji845EHylianMaTex,
+ gMsgKanji845FHylianMiTex,
+ gMsgKanji8460HylianMuTex,
+ gMsgKanji8470HylianMeTex,
+ gMsgKanji8471HylianMoTex,
+ gMsgKanji8472HylianYaTex,
+ gMsgKanji8473HylianYuTex,
+ gMsgKanji8474HylianYoTex,
+ gMsgKanji8475HylianRaTex,
+ gMsgKanji8476HylianRiTex,
+ gMsgKanji8477HylianRuTex,
+ gMsgKanji8478HylianReTex,
+ gMsgKanji8479HylianRoTex,
+ gMsgKanji847AHylianWaTex,
+ gMsgKanji847BHylianWoTex,
+ gMsgKanji847CHylianNTex,
+ gMsgKanji847DHylianToutenTex,
+ gMsgKanji847EHylianKutenTex,
+ gMsgKanji8480CyrillicLowercaseOTex,
+ gMsgKanji8481CyrillicLowercasePeTex,
+ gMsgKanji8482CyrillicLowercaseErTex,
+ gMsgKanji8483CyrillicLowercaseEsTex,
+ gMsgKanji8484CyrillicLowercaseTeTex,
+ gMsgKanji8485CyrillicLowercaseUTex,
+ gMsgKanji8486CyrillicLowercaseEfTex,
+ gMsgKanji8487CyrillicLowercaseHaTex,
+ gMsgKanji8488CyrillicLowercaseTseTex,
+ gMsgKanji8489CyrillicLowercaseCheTex,
+ gMsgKanji848ACyrillicLowercaseShaTex,
+ gMsgKanji848BCyrillicLowercaseShchaTex,
+ gMsgKanji848CCyrillicLowercaseHardSignTex,
+ gMsgKanji848DCyrillicLowercaseYeruTex,
+ gMsgKanji848ECyrillicLowercaseSoftSignTex,
+ gMsgKanji848FCyrillicLowercaseETex,
+ gMsgKanji8490CyrillicLowercaseYuTex,
+ gMsgKanji8491CyrillicLowercaseYaTex,
+ gMsgKanji849FBoxThinHorizontalTex,
+ gMsgKanji84A0BoxThinVerticalTex,
+ gMsgKanji84A1BoxThinTopLeftTex,
+ gMsgKanji84A2BoxThinTopRightTex,
+ gMsgKanji84A3BoxThinBottomRightTex,
+ gMsgKanji84A4BoxThinBottomLeftTex,
+ gMsgKanji84A5BoxThinLeftTex,
+ gMsgKanji84A6BoxThinTopTex,
+ gMsgKanji84A7BoxThinRightTex,
+ gMsgKanji84A8BoxThinBottomTex,
+ gMsgKanji84A9BoxThinCenterTex,
+ gMsgKanji84AABoxThickHorizontalTex,
+ gMsgKanji84ABBoxThickVerticalTex,
+ gMsgKanji84ACBoxThickTopLeftTex,
+ gMsgKanji84ADBoxThickTopRightTex,
+ gMsgKanji84AEBoxThickBottomRightTex,
+ gMsgKanji84AFBoxThickBottomLeftTex,
+ gMsgKanji84B0BoxThickLeftTex,
+ gMsgKanji84B1BoxThickTopTex,
+ gMsgKanji84B2BoxThickRightTex,
+ gMsgKanji84B3BoxThickBottomTex,
+ gMsgKanji84B4BoxThickCenterTex,
+ gMsgKanji84B5BoxVertThickHorizThinLeftTex,
+ gMsgKanji84B6BoxVertThinHorizThickTopTex,
+ gMsgKanji84B7BoxVertThickHorizThinRightTex,
+ gMsgKanji84B8BoxVertThinHorizThickBottomTex,
+ gMsgKanji84B9BoxVertThinHorizThickCenterTex,
+ gMsgKanji84BABoxVertThinHorizThickLeftTex,
+ gMsgKanji84BBBoxVertThickHorizThinTopTex,
+ gMsgKanji84BCBoxVertThinHorizThickRightTex,
+ gMsgKanji84BDBoxVertThickHorizThinBottomTex,
+ gMsgKanji84BEBoxVertThickHorizThinCenterTex,
+ gMsgKanji84BFEmptyTex,
+ gMsgKanji8540HalfwidthExclamationMarkTex,
+ gMsgKanji8541HalfwidthQuotationMarkTex,
+ gMsgKanji8542HalfwidthNumberSignTex,
+ gMsgKanji8543HalfwidthDollarSignTex,
+ gMsgKanji8544HalfwidthPercentSignTex,
+ gMsgKanji8545HalfwidthAmpersandTex,
+ gMsgKanji8546HalfwidthApostropheTex,
+ gMsgKanji8547HalfwidthParenthesesLeftTex,
+ gMsgKanji8548HalfwidthParenthesesRightTex,
+ gMsgKanji8549HalfwidthAsteriskTex,
+ gMsgKanji854AHalfwidthPlusSignTex,
+ gMsgKanji854BHalfwidthCommaTex,
+ gMsgKanji854CHalfwidthHyphenMinusTex,
+ gMsgKanji854DHalfwidthPeriodTex,
+ gMsgKanji854EHalfwidthSlashTex,
+ gMsgKanji854FHalfwidth0Tex,
+ gMsgKanji8550Halfwidth1Tex,
+ gMsgKanji8551Halfwidth2Tex,
+ gMsgKanji8552Halfwidth3Tex,
+ gMsgKanji8553Halfwidth4Tex,
+ gMsgKanji855EHalfwidthQuestionMarkTex,
+ gMsgKanji855FHalfwidthAtSignTex,
+ gMsgKanji8560HalfwidthCapitalATex,
+ gMsgKanji8561HalfwidthCapitalBTex,
+ gMsgKanji8562HalfwidthCapitalCTex,
+ gMsgKanji8563HalfwidthCapitalDTex,
+ gMsgKanji8564HalfwidthCapitalETex,
+ gMsgKanji8565HalfwidthCapitalFTex,
+ gMsgKanji8566HalfwidthCapitalGTex,
+ gMsgKanji8567HalfwidthCapitalHTex,
+ gMsgKanji8568HalfwidthCapitalITex,
+ gMsgKanji8569HalfwidthCapitalJTex,
+ gMsgKanji856AHalfwidthCapitalKTex,
+ gMsgKanji856BHalfwidthCapitalLTex,
+ gMsgKanji856CHalfwidthCapitalMTex,
+ gMsgKanji856DHalfwidthCapitalNTex,
+ gMsgKanji856EHalfwidthCapitalOTex,
+ gMsgKanji856FHalfwidthCapitalPTex,
+ gMsgKanji8570HalfwidthCapitalQTex,
+ gMsgKanji8571HalfwidthCapitalRTex,
+ gMsgKanji857CHalfwidthSquareBracketRightTex,
+ gMsgKanji857DHalfwidthCircumflexAccentTex,
+ gMsgKanji857EEmptyTex,
+ gMsgKanji8580HalfwidthGraveAccentTex,
+ gMsgKanji8581HalfwidthLowercaseATex,
+ gMsgKanji8582HalfwidthLowercaseBTex,
+ gMsgKanji8583HalfwidthLowercaseCTex,
+ gMsgKanji8584HalfwidthLowercaseDTex,
+ gMsgKanji8585HalfwidthLowercaseETex,
+ gMsgKanji8591HalfwidthLowercaseQTex,
+ gMsgKanji8592HalfwidthLowercaseRTex,
+ gMsgKanji8593HalfwidthLowercaseSTex,
+ gMsgKanji8594HalfwidthLowercaseTTex,
+ gMsgKanji8595HalfwidthLowercaseUTex,
+ gMsgKanji8596HalfwidthLowercaseVTex,
+ gMsgKanji8597HalfwidthLowercaseWTex,
+ gMsgKanji8598HalfwidthLowercaseXTex,
+ gMsgKanji8599HalfwidthLowercaseYTex,
+ gMsgKanji859AHalfwidthLowercaseZTex,
+ gMsgKanji859FHalfwidthKutenTex,
+ gMsgKanji85A0HalfwidthKagikakkoLeftTex,
+ gMsgKanji85A1HalfwidthKagikakkoRightTex,
+ gMsgKanji85A2HalfwidthToutenTex,
+ gMsgKanji85A3HalfwidthNakatenTex,
+ gMsgKanji85A4HalfwidthKatakanaWoTex,
+ gMsgKanji85A5HalfwidthKatakanaSmallATex,
+ gMsgKanji85A6HalfwidthKatakanaSmallITex,
+ gMsgKanji85A7HalfwidthKatakanaSmallUTex,
+ gMsgKanji85A8HalfwidthKatakanaSmallETex,
+ gMsgKanji85A9HalfwidthKatakanaSmallOTex,
+ gMsgKanji85AAHalfwidthKatakanaSmallYaTex,
+ gMsgKanji85ABHalfwidthKatakanaSmallYuTex,
+ gMsgKanji85ACHalfwidthKatakanaSmallYoTex,
+ gMsgKanji85ADHalfwidthKatakanaSmallTsuTex,
+ gMsgKanji85B3HalfwidthKatakanaOTex,
+ gMsgKanji85B4HalfwidthKatakanaKaTex,
+ gMsgKanji85B5HalfwidthKatakanaKiTex,
+ gMsgKanji85B6HalfwidthKatakanaKuTex,
+ gMsgKanji85B7HalfwidthKatakanaKeTex,
+ gMsgKanji85B8HalfwidthKatakanaKoTex,
+ gMsgKanji85B9HalfwidthKatakanaSaTex,
+ gMsgKanji85BAHalfwidthKatakanaShiTex,
+ gMsgKanji85BBHalfwidthKatakanaSuTex,
+ gMsgKanji85BCHalfwidthKatakanaSeTex,
+ gMsgKanji85BDHalfwidthKatakanaSoTex,
+ gMsgKanji85BEHalfwidthKatakanaTaTex,
+ gMsgKanji85BFHalfwidthKatakanaChiTex,
+ gMsgKanji85C0HalfwidthKatakanaTsuTex,
+ gMsgKanji85C1HalfwidthKatakanaTeTex,
+ gMsgKanji85DBHalfwidthKatakanaNTex,
+ gMsgKanji85DCHalfwidthDakutenTex,
+ gMsgKanji85DDHalfwidthHandakutenTex,
+ gMsgKanji85DEHalfwidthKatakanaWiTex,
+ gMsgKanji85DFHalfwidthKatakanaWeTex,
+ gMsgKanji85E0HalfwidthKatakanaSmallWaTex,
+ gMsgKanji85E1HalfwidthKatakanaSmallKaTex,
+ gMsgKanji85E2HalfwidthKatakanaSmallKeTex,
+ gMsgKanji85E3HalfwidthKatakanaVuTex,
+ gMsgKanji85E4HalfwidthKatakanaGaTex,
+ gMsgKanji85E5HalfwidthKatakanaGiTex,
+ gMsgKanji85E6HalfwidthKatakanaGuTex,
+ gMsgKanji85E7HalfwidthKatakanaGeTex,
+ gMsgKanji85E8HalfwidthKatakanaGoTex,
+ gMsgKanji85E9HalfwidthKatakanaZaTex,
+ gMsgKanji85EAHalfwidthKatakanaJiTex,
+ gMsgKanji85EBHalfwidthKatakanaZuTex,
+ gMsgKanji85ECHalfwidthKatakanaZeTex,
+ gMsgKanji85EDHalfwidthKatakanaZoTex,
+ gMsgKanji85EEHalfwidthKatakanaDaTex,
+ gMsgKanji85EFHalfwidthKatakanaDiTex,
+ gMsgKanji85F0HalfwidthKatakanaDuTex,
+ gMsgKanji85F1HalfwidthKatakanaDeTex,
+ gMsgKanji85F2HalfwidthKatakanaDoTex,
+ gMsgKanji85F3HalfwidthKatakanaBaTex,
+ gMsgKanji85F4HalfwidthKatakanaPaTex,
+ gMsgKanji85F5HalfwidthKatakanaBiTex,
+ gMsgKanji8640EmptyTex,
+ gMsgKanji8641TategakiToutenTex,
+ gMsgKanji8642TategakiKutenTex,
+ gMsgKanji8643HalfwidthHorizontalThinTex,
+ gMsgKanji8644HalfwidthHorizontalThickTex,
+ gMsgKanji8645HalfwidthVerticalThinTex,
+ gMsgKanji8646HalfwidthVerticalThickTex,
+ gMsgKanji8647HalfwidthHorizontalThinDottedTex,
+ gMsgKanji8648HalfwidthHorizontalThickDottedTex,
+ gMsgKanji8649HalfwidthVerticalThinDottedTex,
+ gMsgKanji864AHalfwidthVerticalThickDottedTex,
+ gMsgKanji864BHalfwidthHorizontalThinDotted2Tex,
+ gMsgKanji864CHalfwidthHorizontalThickDotted2Tex,
+ gMsgKanji864DHalfwidthVerticalThinDotted2Tex,
+ gMsgKanji864EHalfwidthVerticalThickDotted2Tex,
+ gMsgKanji864FHalfwidthBoxThinTopLeftTex,
+ gMsgKanji8650VerticalFarRightTex,
+ gMsgKanji8651VerticalFarLeftTex,
+ gMsgKanji8652HalfwidthBoxThickTopLeftTex,
+ gMsgKanji8653HalfwidthBoxThinTopRightTex,
+ gMsgKanji8654HalfwidthBoxVertThinHorizThickTopRightTex,
+ gMsgKanji8655HalfwidthBoxVertThickHorizThinTopRightTex,
+ gMsgKanji8656HalfwidthBoxThickTopRightTex,
+ gMsgKanji8657HalfwidthBoxThinBottomLeftTex,
+ gMsgKanji8658HalfwidthBoxVertThinHorizThickBottomLeftTex,
+ gMsgKanji8659HalfwidthBoxVertThickHorizThinBottomLeftTex,
+ gMsgKanji865AHalfwidthBoxThickBottomLeftTex,
+ gMsgKanji865BTategakiChouonpuTex,
+ gMsgKanji865CTategakiDashTex,
+ gMsgKanji865DTategakiHyphenTex,
+ gMsgKanji869BHalfwidthNijyuukagikakkoRightTex,
+ gMsgKanji869CHalfwidthSumitsukikakkoLeftTex,
+ gMsgKanji869DHalfwidthSumitsukikakkoRightTex,
+ gMsgKanji869EHalfwidthHyphenTex,
+ gMsgKanji869FEmptyTex,
+ gMsgKanji86A0EmptyTex,
+ gMsgKanji86A1EmptyTex,
+ gMsgKanji86A2EmptyTex,
+ gMsgKanji86A3EmptyTex,
+ gMsgKanji86A4EmptyTex,
+ gMsgKanji86A5EmptyTex,
+ gMsgKanji86A6EmptyTex,
+ gMsgKanji86B3BoxVertThinHorizThickTopRightTex,
+ gMsgKanji86B4BoxVertThickHorizThinTopRightTex,
+ gMsgKanji86B5BoxThickTopRightTex,
+ gMsgKanji86C7BoxVertThinHorizThickRightTex,
+ gMsgKanji86C8BoxTopThickBottomThinHorizThinRightTex,
+ gMsgKanji86C9BoxTopThinBottomThickHorizThinRightTex,
+ gMsgKanji86CABoxVertThickHorizThinRightTex,
+ gMsgKanji86CBBoxTopThickBottomThinHorizThickRightTex,
+ gMsgKanji86CCBoxTopThinBottomThickHorizThickRightTex,
+ gMsgKanji86CDBoxThickRightTex,
+ gMsgKanji86CEBoxThinTopTex,
+ gMsgKanji86CFBoxVertThinLeftThickRightThinTopTex,
+ gMsgKanji86D0BoxVertThinLeftThinRightThickTopTex,
+ gMsgKanji86D1BoxVertThinHorizThickTopTex,
+ gMsgKanji86D2BoxVertThickHorizThinTopTex,
+ gMsgKanji86D3BoxVertThickLeftThickRightThinTopTex,
+ gMsgKanji86D4BoxVertThickLeftThinRightThickTopTex,
+ gMsgKanji86D5BoxThickTopTex,
+ gMsgKanji86D6BoxThinBottomTex,
+ gMsgKanji86D7BoxVertThinLeftThickRightThinBottomTex,
+ gMsgKanji8740Circled1Tex,
+ gMsgKanji8741Circled2Tex,
+ gMsgKanji8742Circled3Tex,
+ gMsgKanji8743Circled4Tex,
+ gMsgKanji8744Circled5Tex,
+ gMsgKanji8745Circled6Tex,
+ gMsgKanji8746Circled7Tex,
+ gMsgKanji8747Circled8Tex,
+ gMsgKanji8748Circled9Tex,
+ gMsgKanji8749Circled10Tex,
+ gMsgKanji874ACircled11Tex,
+ gMsgKanji874BCircled12Tex,
+ gMsgKanji874CCircled13Tex,
+ gMsgKanji874DCircled14Tex,
+ gMsgKanji874ECircled15Tex,
+ gMsgKanji874FCircled16Tex,
+ gMsgKanji8750Circled17Tex,
+ gMsgKanji8751Circled18Tex,
+ gMsgKanji8752Circled19Tex,
+ gMsgKanji8753Circled20Tex,
+ gMsgKanji8754RomanNumeral1Tex,
+ gMsgKanji8755RomanNumeral2Tex,
+ gMsgKanji8756RomanNumeral3Tex,
+ gMsgKanji8757RomanNumeral4Tex,
+ gMsgKanji8758RomanNumeral5Tex,
+ gMsgKanji8791IdenticalToTex,
+ gMsgKanji8792IntegralTex,
+ gMsgKanji8793CountourIntegralTex,
+ gMsgKanji8794SummationTex,
+ gMsgKanji8795SquareRootTex,
+ gMsgKanji8796PerpendicularSymbolTex,
+ gMsgKanji8797AngleTex,
+ gMsgKanji8798RightAngleTex,
+ gMsgKanji8799RightTriangleTex,
+ gMsgKanji879ABecauseTex,
+ gMsgKanji879BIntersectionTex,
+ gMsgKanji879CUnionTex,
+ gMsgKanji879DEmptyTex,
+ gMsgKanji879EEmptyTex,
+ gMsgKanji879FHiraganaSmallATex,
+ gMsgKanji87A0EmptyTex,
+ gMsgKanji87A1EmptyTex,
+ gMsgKanji87A2EmptyTex,
+ gMsgKanji87A3EmptyTex,
+ gMsgKanji87A4EmptyTex,
+ gMsgKanji87A5EmptyTex,
+ gMsgKanji87A6EmptyTex,
+ gMsgKanji87A7EmptyTex,
+ gMsgKanji87A8EmptyTex,
+ gMsgKanji87A9EmptyTex,
+ gMsgKanji87AAEmptyTex,
+ gMsgKanji87ABEmptyTex,
+ gMsgKanji87ACEmptyTex,
+ gMsgKanji87ADEmptyTex,
+ gMsgKanji87AEEmptyTex,
+ gMsgKanji87AFEmptyTex,
+ gMsgKanji87B0EmptyTex,
+ gMsgKanji87B1EmptyTex,
+ gMsgKanji87B2EmptyTex,
+ gMsgKanji87B3EmptyTex,
+ gMsgKanji87B4EmptyTex,
+ gMsgKanji87B5EmptyTex,
+ gMsgKanji87BDEmptyTex,
+ gMsgKanji87BEEmptyTex,
+ gMsgKanji87BFEmptyTex,
+ gMsgKanji87C0EmptyTex,
+ gMsgKanji87C1EmptyTex,
+ gMsgKanji87E5EmptyTex,
+ gMsgKanji87E6EmptyTex,
+ gMsgKanji87E7EmptyTex,
+ gMsgKanji87E8EmptyTex,
+ gMsgKanji87FAEmptyTex,
+ gMsgKanji87FBEmptyTex,
+ gMsgKanji87FCEmptyTex,
+ gMsgKanji8840KatakanaSmallATex,
+ gMsgKanji8841EmptyTex,
+ gMsgKanji8842EmptyTex,
+ gMsgKanji8843EmptyTex,
+ gMsgKanji8844EmptyTex,
+ gMsgKanji8845EmptyTex,
+ gMsgKanji8846EmptyTex,
+ gMsgKanji8847EmptyTex,
+ gMsgKanji8848EmptyTex,
+ gMsgKanji8849EmptyTex,
+ gMsgKanji884AEmptyTex,
+ gMsgKanji884BEmptyTex,
+ gMsgKanji884CEmptyTex,
+ gMsgKanji884DEmptyTex,
+ gMsgKanji884EEmptyTex,
+ gMsgKanji884FEmptyTex,
+ gMsgKanji8850EmptyTex,
+ gMsgKanji8851EmptyTex,
+ gMsgKanji8852EmptyTex,
+ gMsgKanji8853EmptyTex,
+ gMsgKanji8854EmptyTex,
+ gMsgKanji8855EmptyTex,
+ gMsgKanji8856EmptyTex,
+ gMsgKanji8857EmptyTex,
+ gMsgKanji8858EmptyTex,
+ gMsgKanji8859EmptyTex,
+ gMsgKanji885AEmptyTex,
+ gMsgKanji885BEmptyTex,
+ gMsgKanji885CEmptyTex,
+ gMsgKanji885DEmptyTex,
+ gMsgKanji885EEmptyTex,
+ gMsgKanji885FEmptyTex,
+ gMsgKanji8860EmptyTex,
+ gMsgKanji8861EmptyTex,
+ gMsgKanji8862EmptyTex,
+ gMsgKanji8863EmptyTex,
+ gMsgKanji8864EmptyTex,
+ gMsgKanji8865EmptyTex,
+ gMsgKanji8866EmptyTex,
+ gMsgKanji8867EmptyTex,
+ gMsgKanji8868EmptyTex,
+ gMsgKanji8869EmptyTex,
+ gMsgKanji886AEmptyTex,
+ gMsgKanji886BEmptyTex,
+ gMsgKanji886CEmptyTex,
+ gMsgKanji886DEmptyTex,
+ gMsgKanji886EEmptyTex,
+ gMsgKanji886FEmptyTex,
+ gMsgKanji8870EmptyTex,
+ gMsgKanji8871EmptyTex,
+ gMsgKanji8872EmptyTex,
+ gMsgKanji8873EmptyTex,
+ gMsgKanji8874EmptyTex,
+ gMsgKanji8875EmptyTex,
+ gMsgKanji8876EmptyTex,
+ gMsgKanji8877EmptyTex,
+ gMsgKanji8878EmptyTex,
+ gMsgKanji8879EmptyTex,
+ gMsgKanji887AEmptyTex,
+ gMsgKanji887BEmptyTex,
+ gMsgKanji887CEmptyTex,
+ gMsgKanji887DEmptyTex,
+ gMsgKanji887EEmptyTex,
+ gMsgKanji8880EmptyTex,
+ gMsgKanji8881EmptyTex,
+ gMsgKanji8882EmptyTex,
+ gMsgKanji8883EmptyTex,
+ gMsgKanji8884EmptyTex,
+ gMsgKanji8885EmptyTex,
+ gMsgKanji8886EmptyTex,
+ gMsgKanji8887EmptyTex,
+ gMsgKanji8888EmptyTex,
+ gMsgKanji8889EmptyTex,
+ gMsgKanji888AEmptyTex,
+ gMsgKanji888BEmptyTex,
+ gMsgKanji888CEmptyTex,
+ gMsgKanji888DEmptyTex,
+ gMsgKanji888EEmptyTex,
+ gMsgKanji888FEmptyTex,
+ gMsgKanji8890EmptyTex,
+ gMsgKanji8891EmptyTex,
+ gMsgKanji8892EmptyTex,
+ gMsgKanji8893EmptyTex,
+ gMsgKanji8894EmptyTex,
+ gMsgKanji8895EmptyTex,
+ gMsgKanji8896EmptyTex,
+ gMsgKanji8897EmptyTex,
+ gMsgKanji8898EmptyTex,
+ gMsgKanji8899EmptyTex,
+ gMsgKanji889AEmptyTex,
+ gMsgKanji889BEmptyTex,
+ gMsgKanji889CEmptyTex,
+ gMsgKanji889DEmptyTex,
+ gMsgKanji889EEmptyTex,
+ gMsgKanji889FTex,
+ gMsgKanji88A0Tex,
+ gMsgKanji88A1Tex,
+ gMsgKanji88A2Tex,
+ gMsgKanji88A3Tex,
+ gMsgKanji88A4Tex,
+ gMsgKanji88A5Tex,
+ gMsgKanji88A6Tex,
+ gMsgKanji88A7Tex,
+ gMsgKanji88A8Tex,
+ gMsgKanji88A9Tex,
+ gMsgKanji88AATex,
+ gMsgKanji88ABTex,
+ gMsgKanji88ACTex,
+ gMsgKanji88ADTex,
+ gMsgKanji88AETex,
+ gMsgKanji88AFTex,
+ gMsgKanji88B0Tex,
+ gMsgKanji88B1Tex,
+ gMsgKanji88B2Tex,
+ gMsgKanji88B3Tex,
+ gMsgKanji88B4Tex,
+ gMsgKanji88B5Tex,
+ gMsgKanji88B6Tex,
+ gMsgKanji88B7Tex,
+ gMsgKanji88B8Tex,
+ gMsgKanji88B9Tex,
+ gMsgKanji88BATex,
+ gMsgKanji88BBTex,
+ gMsgKanji88BCTex,
+ gMsgKanji88BDTex,
+ gMsgKanji88BETex,
+ gMsgKanji88BFTex,
+ gMsgKanji88C0Tex,
+ gMsgKanji88C1Tex,
+ gMsgKanji88C2Tex,
+ gMsgKanji88C3Tex,
+ gMsgKanji88C4Tex,
+ gMsgKanji88C5Tex,
+ gMsgKanji88C6Tex,
+ gMsgKanji88C7Tex,
+ gMsgKanji88C8Tex,
+ gMsgKanji88C9Tex,
+ gMsgKanji88CATex,
+ gMsgKanji88CBTex,
+ gMsgKanji88CCTex,
+ gMsgKanji88CDTex,
+ gMsgKanji88CETex,
+ gMsgKanji88CFTex,
+ gMsgKanji88D0Tex,
+ gMsgKanji88D1Tex,
+ gMsgKanji88D2Tex,
+ gMsgKanji88D3Tex,
+ gMsgKanji88D4Tex,
+ gMsgKanji88D5Tex,
+ gMsgKanji88D6Tex,
+ gMsgKanji88D7Tex,
+ gMsgKanji88D8Tex,
+ gMsgKanji88D9Tex,
+ gMsgKanji88DATex,
+ gMsgKanji88DBTex,
+ gMsgKanji88DCTex,
+ gMsgKanji88DDTex,
+ gMsgKanji88DETex,
+ gMsgKanji88DFTex,
+ gMsgKanji88E0Tex,
+ gMsgKanji88E1Tex,
+ gMsgKanji88E2Tex,
+ gMsgKanji88E3Tex,
+ gMsgKanji88E4Tex,
+ gMsgKanji88E5Tex,
+ gMsgKanji88E6Tex,
+ gMsgKanji88E7Tex,
+ gMsgKanji88E8Tex,
+ gMsgKanji88E9Tex,
+ gMsgKanji88EATex,
+ gMsgKanji88EBTex,
+ gMsgKanji88ECTex,
+ gMsgKanji88EDTex,
+ gMsgKanji88EETex,
+ gMsgKanji88EFTex,
+ gMsgKanji88F0Tex,
+ gMsgKanji88F1Tex,
+ gMsgKanji88F2Tex,
+ gMsgKanji88F3Tex,
+ gMsgKanji88F4Tex,
+ gMsgKanji88F5Tex,
+ gMsgKanji88F6Tex,
+ gMsgKanji88F7Tex,
+ gMsgKanji88F8Tex,
+ gMsgKanji88F9Tex,
+ gMsgKanji88FATex,
+ gMsgKanji88FBTex,
+ gMsgKanji88FCTex,
+ gMsgKanji8940Tex,
+ gMsgKanji8941Tex,
+ gMsgKanji8942Tex,
+ gMsgKanji8943Tex,
+ gMsgKanji8944Tex,
+ gMsgKanji8945Tex,
+ gMsgKanji8946Tex,
+ gMsgKanji8947Tex,
+ gMsgKanji8948Tex,
+ gMsgKanji8949Tex,
+ gMsgKanji894ATex,
+ gMsgKanji894BTex,
+ gMsgKanji894CTex,
+ gMsgKanji894DTex,
+ gMsgKanji894ETex,
+ gMsgKanji894FTex,
+ gMsgKanji8950Tex,
+ gMsgKanji8951Tex,
+ gMsgKanji8952Tex,
+ gMsgKanji8953Tex,
+ gMsgKanji8954Tex,
+ gMsgKanji8955Tex,
+ gMsgKanji8956Tex,
+ gMsgKanji8957Tex,
+ gMsgKanji8958Tex,
+ gMsgKanji8959Tex,
+ gMsgKanji895ATex,
+ gMsgKanji895BTex,
+ gMsgKanji895CTex,
+ gMsgKanji895DTex,
+ gMsgKanji895ETex,
+ gMsgKanji895FTex,
+ gMsgKanji8960Tex,
+ gMsgKanji8961Tex,
+ gMsgKanji8962Tex,
+ gMsgKanji8963Tex,
+ gMsgKanji8964Tex,
+ gMsgKanji8965Tex,
+ gMsgKanji8966Tex,
+ gMsgKanji8967Tex,
+ gMsgKanji8968Tex,
+ gMsgKanji8969Tex,
+ gMsgKanji896ATex,
+ gMsgKanji896BTex,
+ gMsgKanji896CTex,
+ gMsgKanji896DTex,
+ gMsgKanji896ETex,
+ gMsgKanji896FTex,
+ gMsgKanji8970Tex,
+ gMsgKanji8971Tex,
+ gMsgKanji8972Tex,
+ gMsgKanji8973Tex,
+ gMsgKanji8974Tex,
+ gMsgKanji8975Tex,
+ gMsgKanji8976Tex,
+ gMsgKanji8977Tex,
+ gMsgKanji8978Tex,
+ gMsgKanji8979Tex,
+ gMsgKanji897ATex,
+ gMsgKanji897BTex,
+ gMsgKanji897CTex,
+ gMsgKanji897DTex,
+ gMsgKanji897ETex,
+ gMsgKanji8980Tex,
+ gMsgKanji8981Tex,
+ gMsgKanji8982Tex,
+ gMsgKanji8983Tex,
+ gMsgKanji8984Tex,
+ gMsgKanji8985Tex,
+ gMsgKanji8986Tex,
+ gMsgKanji8987Tex,
+ gMsgKanji8988Tex,
+ gMsgKanji8989Tex,
+ gMsgKanji898ATex,
+ gMsgKanji898BTex,
+ gMsgKanji898CTex,
+ gMsgKanji898DTex,
+ gMsgKanji898ETex,
+ gMsgKanji898FTex,
+ gMsgKanji8990Tex,
+ gMsgKanji8991Tex,
+ gMsgKanji8992Tex,
+ gMsgKanji8993Tex,
+ gMsgKanji8994Tex,
+ gMsgKanji8995Tex,
+ gMsgKanji8996Tex,
+ gMsgKanji8997Tex,
+ gMsgKanji8998Tex,
+ gMsgKanji8999Tex,
+ gMsgKanji899ATex,
+ gMsgKanji899BTex,
+ gMsgKanji899CTex,
+ gMsgKanji899DTex,
+ gMsgKanji899ETex,
+ gMsgKanji899FTex,
+ gMsgKanji89A0Tex,
+ gMsgKanji89A1Tex,
+ gMsgKanji89A2Tex,
+ gMsgKanji89A3Tex,
+ gMsgKanji89A4Tex,
+ gMsgKanji89A5Tex,
+ gMsgKanji89A6Tex,
+ gMsgKanji89A7Tex,
+ gMsgKanji89A8Tex,
+ gMsgKanji89A9Tex,
+ gMsgKanji89AATex,
+ gMsgKanji89ABTex,
+ gMsgKanji89ACTex,
+ gMsgKanji89ADTex,
+ gMsgKanji89AETex,
+ gMsgKanji89AFTex,
+ gMsgKanji89B0Tex,
+ gMsgKanji89B1Tex,
+ gMsgKanji89B2Tex,
+ gMsgKanji89B3Tex,
+ gMsgKanji89B4Tex,
+ gMsgKanji89B5Tex,
+ gMsgKanji89B6Tex,
+ gMsgKanji89B7Tex,
+ gMsgKanji89B8Tex,
+ gMsgKanji89B9Tex,
+ gMsgKanji89BATex,
+ gMsgKanji89BBTex,
+ gMsgKanji89BCTex,
+ gMsgKanji89BDTex,
+ gMsgKanji89BETex,
+ gMsgKanji89BFTex,
+ gMsgKanji89C0Tex,
+ gMsgKanji89C1Tex,
+ gMsgKanji89C2Tex,
+ gMsgKanji89C3Tex,
+ gMsgKanji89C4Tex,
+ gMsgKanji89C5Tex,
+ gMsgKanji89C6Tex,
+ gMsgKanji89C7Tex,
+ gMsgKanji89C8Tex,
+ gMsgKanji89C9Tex,
+ gMsgKanji89CATex,
+ gMsgKanji89CBTex,
+ gMsgKanji89CCTex,
+ gMsgKanji89CDTex,
+ gMsgKanji89CETex,
+ gMsgKanji89CFTex,
+ gMsgKanji89D0Tex,
+ gMsgKanji89D1Tex,
+ gMsgKanji89D2Tex,
+ gMsgKanji89D3Tex,
+ gMsgKanji89D4Tex,
+ gMsgKanji89D5Tex,
+ gMsgKanji89D6Tex,
+ gMsgKanji89D7Tex,
+ gMsgKanji89D8Tex,
+ gMsgKanji89D9Tex,
+ gMsgKanji89DATex,
+ gMsgKanji89DBTex,
+ gMsgKanji89DCTex,
+ gMsgKanji89DDTex,
+ gMsgKanji89DETex,
+ gMsgKanji89DFTex,
+ gMsgKanji89E0Tex,
+ gMsgKanji89E1Tex,
+ gMsgKanji89E2Tex,
+ gMsgKanji89E3Tex,
+ gMsgKanji89E4Tex,
+ gMsgKanji89E5Tex,
+ gMsgKanji89E6Tex,
+ gMsgKanji89E7Tex,
+ gMsgKanji89E8Tex,
+ gMsgKanji89E9Tex,
+ gMsgKanji89EATex,
+ gMsgKanji89EBTex,
+ gMsgKanji89ECTex,
+ gMsgKanji89EDTex,
+ gMsgKanji89EETex,
+ gMsgKanji89EFTex,
+ gMsgKanji89F0Tex,
+ gMsgKanji89F1Tex,
+ gMsgKanji89F2Tex,
+ gMsgKanji89F3Tex,
+ gMsgKanji89F4Tex,
+ gMsgKanji89F5Tex,
+ gMsgKanji89F6Tex,
+ gMsgKanji89F7Tex,
+ gMsgKanji89F8Tex,
+ gMsgKanji89F9Tex,
+ gMsgKanji89FATex,
+ gMsgKanji89FBTex,
+ gMsgKanji89FCTex,
+ gMsgKanji8A40Tex,
+ gMsgKanji8A41Tex,
+ gMsgKanji8A42Tex,
+ gMsgKanji8A43Tex,
+ gMsgKanji8A44Tex,
+ gMsgKanji8A45Tex,
+ gMsgKanji8A46Tex,
+ gMsgKanji8A47Tex,
+ gMsgKanji8A48Tex,
+ gMsgKanji8A49Tex,
+ gMsgKanji8A4ATex,
+ gMsgKanji8A4BTex,
+ gMsgKanji8A4CTex,
+ gMsgKanji8A4DTex,
+ gMsgKanji8A4ETex,
+ gMsgKanji8A4FTex,
+ gMsgKanji8A50Tex,
+ gMsgKanji8A51Tex,
+ gMsgKanji8A52Tex,
+ gMsgKanji8A53Tex,
+ gMsgKanji8A54Tex,
+ gMsgKanji8A55Tex,
+ gMsgKanji8A56Tex,
+ gMsgKanji8A57Tex,
+ gMsgKanji8A58Tex,
+ gMsgKanji8A59Tex,
+ gMsgKanji8A5ATex,
+ gMsgKanji8A5BTex,
+ gMsgKanji8A5CTex,
+ gMsgKanji8A5DTex,
+ gMsgKanji8A5ETex,
+ gMsgKanji8A5FTex,
+ gMsgKanji8A60Tex,
+ gMsgKanji8A61Tex,
+ gMsgKanji8A62Tex,
+ gMsgKanji8A63Tex,
+ gMsgKanji8A64Tex,
+ gMsgKanji8A65Tex,
+ gMsgKanji8A66Tex,
+ gMsgKanji8A67Tex,
+ gMsgKanji8A68Tex,
+ gMsgKanji8A69Tex,
+ gMsgKanji8A6ATex,
+ gMsgKanji8A6BTex,
+ gMsgKanji8A6CTex,
+ gMsgKanji8A6DTex,
+ gMsgKanji8A6ETex,
+ gMsgKanji8A6FTex,
+ gMsgKanji8A70Tex,
+ gMsgKanji8A71Tex,
+ gMsgKanji8A72Tex,
+ gMsgKanji8A73Tex,
+ gMsgKanji8A74Tex,
+ gMsgKanji8A75Tex,
+ gMsgKanji8A76Tex,
+ gMsgKanji8A77Tex,
+ gMsgKanji8A78Tex,
+ gMsgKanji8A79Tex,
+ gMsgKanji8A7ATex,
+ gMsgKanji8A7BTex,
+ gMsgKanji8A7CTex,
+ gMsgKanji8A7DTex,
+ gMsgKanji8A7ETex,
+ gMsgKanji8A80Tex,
+ gMsgKanji8A81Tex,
+ gMsgKanji8A82Tex,
+ gMsgKanji8A83Tex,
+ gMsgKanji8A84Tex,
+ gMsgKanji8A85Tex,
+ gMsgKanji8A86Tex,
+ gMsgKanji8A87Tex,
+ gMsgKanji8A88Tex,
+ gMsgKanji8A89Tex,
+ gMsgKanji8A8ATex,
+ gMsgKanji8A8BTex,
+ gMsgKanji8A8CTex,
+ gMsgKanji8A8DTex,
+ gMsgKanji8A8ETex,
+ gMsgKanji8A8FTex,
+ gMsgKanji8A90Tex,
+ gMsgKanji8A91Tex,
+ gMsgKanji8A92Tex,
+ gMsgKanji8A93Tex,
+ gMsgKanji8A94Tex,
+ gMsgKanji8A95Tex,
+ gMsgKanji8A96Tex,
+ gMsgKanji8A97Tex,
+ gMsgKanji8A98Tex,
+ gMsgKanji8A99Tex,
+ gMsgKanji8A9ATex,
+ gMsgKanji8A9BTex,
+ gMsgKanji8A9CTex,
+ gMsgKanji8A9DTex,
+ gMsgKanji8A9ETex,
+ gMsgKanji8A9FTex,
+ gMsgKanji8AA0Tex,
+ gMsgKanji8AA1Tex,
+ gMsgKanji8AA2Tex,
+ gMsgKanji8AA3Tex,
+ gMsgKanji8AA4Tex,
+ gMsgKanji8AA5Tex,
+ gMsgKanji8AA6Tex,
+ gMsgKanji8AA7Tex,
+ gMsgKanji8AA8Tex,
+ gMsgKanji8AA9Tex,
+ gMsgKanji8AAATex,
+ gMsgKanji8AABTex,
+ gMsgKanji8AACTex,
+ gMsgKanji8AADTex,
+ gMsgKanji8AAETex,
+ gMsgKanji8AAFTex,
+ gMsgKanji8AB0Tex,
+ gMsgKanji8AB1Tex,
+ gMsgKanji8AB2Tex,
+ gMsgKanji8AB3Tex,
+ gMsgKanji8AB4Tex,
+ gMsgKanji8AB5Tex,
+ gMsgKanji8AB6Tex,
+ gMsgKanji8AB7Tex,
+ gMsgKanji8AB8Tex,
+ gMsgKanji8AB9Tex,
+ gMsgKanji8ABATex,
+ gMsgKanji8ABBTex,
+ gMsgKanji8ABCTex,
+ gMsgKanji8ABDTex,
+ gMsgKanji8ABETex,
+ gMsgKanji8ABFTex,
+ gMsgKanji8AC0Tex,
+ gMsgKanji8AC1Tex,
+ gMsgKanji8AC2Tex,
+ gMsgKanji8AC3Tex,
+ gMsgKanji8AC4Tex,
+ gMsgKanji8AC5Tex,
+ gMsgKanji8AC6Tex,
+ gMsgKanji8AC7Tex,
+ gMsgKanji8AC8Tex,
+ gMsgKanji8AC9Tex,
+ gMsgKanji8ACATex,
+ gMsgKanji8ACBTex,
+ gMsgKanji8ACCTex,
+ gMsgKanji8ACDTex,
+ gMsgKanji8ACETex,
+ gMsgKanji8ACFTex,
+ gMsgKanji8AD0Tex,
+ gMsgKanji8AD1Tex,
+ gMsgKanji8AD2Tex,
+ gMsgKanji8AD3Tex,
+ gMsgKanji8AD4Tex,
+ gMsgKanji8AD5Tex,
+ gMsgKanji8AD6Tex,
+ gMsgKanji8AD7Tex,
+ gMsgKanji8AD8Tex,
+ gMsgKanji8AD9Tex,
+ gMsgKanji8ADATex,
+ gMsgKanji8ADBTex,
+ gMsgKanji8ADCTex,
+ gMsgKanji8ADDTex,
+ gMsgKanji8ADETex,
+ gMsgKanji8ADFTex,
+ gMsgKanji8AE0Tex,
+ gMsgKanji8AE1Tex,
+ gMsgKanji8AE2Tex,
+ gMsgKanji8AE3Tex,
+ gMsgKanji8AE4Tex,
+ gMsgKanji8AE5Tex,
+ gMsgKanji8AE6Tex,
+ gMsgKanji8AE7Tex,
+ gMsgKanji8AE8Tex,
+ gMsgKanji8AE9Tex,
+ gMsgKanji8AEATex,
+ gMsgKanji8AEBTex,
+ gMsgKanji8AECTex,
+ gMsgKanji8AEDTex,
+ gMsgKanji8AEETex,
+ gMsgKanji8AEFTex,
+ gMsgKanji8AF0Tex,
+ gMsgKanji8AF1Tex,
+ gMsgKanji8AF2Tex,
+ gMsgKanji8AF3Tex,
+ gMsgKanji8AF4Tex,
+ gMsgKanji8AF5Tex,
+ gMsgKanji8AF6Tex,
+ gMsgKanji8AF7Tex,
+ gMsgKanji8AF8Tex,
+ gMsgKanji8AF9Tex,
+ gMsgKanji8AFATex,
+ gMsgKanji8AFBTex,
+ gMsgKanji8AFCTex,
+ gMsgKanji8B40Tex,
+ gMsgKanji8B41Tex,
+ gMsgKanji8B42Tex,
+ gMsgKanji8B43Tex,
+ gMsgKanji8B44Tex,
+ gMsgKanji8B45Tex,
+ gMsgKanji8B46Tex,
+ gMsgKanji8B47Tex,
+ gMsgKanji8B48Tex,
+ gMsgKanji8B49Tex,
+ gMsgKanji8B4ATex,
+ gMsgKanji8B4BTex,
+ gMsgKanji8B4CTex,
+ gMsgKanji8B4DTex,
+ gMsgKanji8B4ETex,
+ gMsgKanji8B4FTex,
+ gMsgKanji8B50Tex,
+ gMsgKanji8B51Tex,
+ gMsgKanji8B52Tex,
+ gMsgKanji8B53Tex,
+ gMsgKanji8B54Tex,
+ gMsgKanji8B55Tex,
+ gMsgKanji8B56Tex,
+ gMsgKanji8B57Tex,
+ gMsgKanji8B58Tex,
+ gMsgKanji8B59Tex,
+ gMsgKanji8B5ATex,
+ gMsgKanji8B5BTex,
+ gMsgKanji8B5CTex,
+ gMsgKanji8B5DTex,
+ gMsgKanji8B5ETex,
+ gMsgKanji8B5FTex,
+ gMsgKanji8B60Tex,
+ gMsgKanji8B61Tex,
+ gMsgKanji8B62Tex,
+ gMsgKanji8B63Tex,
+ gMsgKanji8B64Tex,
+ gMsgKanji8B65Tex,
+ gMsgKanji8B66Tex,
+ gMsgKanji8B67Tex,
+ gMsgKanji8B68Tex,
+ gMsgKanji8B69Tex,
+ gMsgKanji8B6ATex,
+ gMsgKanji8B6BTex,
+ gMsgKanji8B6CTex,
+ gMsgKanji8B6DTex,
+ gMsgKanji8B6ETex,
+ gMsgKanji8B6FTex,
+ gMsgKanji8B70Tex,
+ gMsgKanji8B71Tex,
+ gMsgKanji8B72Tex,
+ gMsgKanji8B73Tex,
+ gMsgKanji8B74Tex,
+ gMsgKanji8B75Tex,
+ gMsgKanji8B76Tex,
+ gMsgKanji8B77Tex,
+ gMsgKanji8B78Tex,
+ gMsgKanji8B79Tex,
+ gMsgKanji8B7ATex,
+ gMsgKanji8B7BTex,
+ gMsgKanji8B7CTex,
+ gMsgKanji8B7DTex,
+ gMsgKanji8B7ETex,
+ gMsgKanji8B80Tex,
+ gMsgKanji8B81Tex,
+ gMsgKanji8B82Tex,
+ gMsgKanji8B83Tex,
+ gMsgKanji8B84Tex,
+ gMsgKanji8B85Tex,
+ gMsgKanji8B86Tex,
+ gMsgKanji8B87Tex,
+ gMsgKanji8B88Tex,
+ gMsgKanji8B89Tex,
+ gMsgKanji8B8ATex,
+ gMsgKanji8B8BTex,
+ gMsgKanji8B8CTex,
+ gMsgKanji8B8DTex,
+ gMsgKanji8B8ETex,
+ gMsgKanji8B8FTex,
+ gMsgKanji8B90Tex,
+ gMsgKanji8B91Tex,
+ gMsgKanji8B92Tex,
+ gMsgKanji8B93Tex,
+ gMsgKanji8B94Tex,
+ gMsgKanji8B95Tex,
+ gMsgKanji8B96Tex,
+ gMsgKanji8B97Tex,
+ gMsgKanji8B98Tex,
+ gMsgKanji8B99Tex,
+ gMsgKanji8B9ATex,
+ gMsgKanji8B9BTex,
+ gMsgKanji8B9CTex,
+ gMsgKanji8B9DTex,
+ gMsgKanji8B9ETex,
+ gMsgKanji8B9FTex,
+ gMsgKanji8BA0Tex,
+ gMsgKanji8BA1Tex,
+ gMsgKanji8BA2Tex,
+ gMsgKanji8BA3Tex,
+ gMsgKanji8BA4Tex,
+ gMsgKanji8BA5Tex,
+ gMsgKanji8BA6Tex,
+ gMsgKanji8BA7Tex,
+ gMsgKanji8BA8Tex,
+ gMsgKanji8BA9Tex,
+ gMsgKanji8BAATex,
+ gMsgKanji8BABTex,
+ gMsgKanji8BACTex,
+ gMsgKanji8BADTex,
+ gMsgKanji8BAETex,
+ gMsgKanji8BAFTex,
+ gMsgKanji8BB0Tex,
+ gMsgKanji8BB1Tex,
+ gMsgKanji8BB2Tex,
+ gMsgKanji8BB3Tex,
+ gMsgKanji8BB4Tex,
+ gMsgKanji8BB5Tex,
+ gMsgKanji8BB6Tex,
+ gMsgKanji8BB7Tex,
+ gMsgKanji8BB8Tex,
+ gMsgKanji8BB9Tex,
+ gMsgKanji8BBATex,
+ gMsgKanji8BBBTex,
+ gMsgKanji8BBCTex,
+ gMsgKanji8BBDTex,
+ gMsgKanji8BBETex,
+ gMsgKanji8BBFTex,
+ gMsgKanji8BC0Tex,
+ gMsgKanji8BC1Tex,
+ gMsgKanji8BC2Tex,
+ gMsgKanji8BC3Tex,
+ gMsgKanji8BC4Tex,
+ gMsgKanji8BC5Tex,
+ gMsgKanji8BC6Tex,
+ gMsgKanji8BC7Tex,
+ gMsgKanji8BC8Tex,
+ gMsgKanji8BC9Tex,
+ gMsgKanji8BCATex,
+ gMsgKanji8BCBTex,
+ gMsgKanji8BCCTex,
+ gMsgKanji8BCDTex,
+ gMsgKanji8BCETex,
+ gMsgKanji8BCFTex,
+ gMsgKanji8BD0Tex,
+ gMsgKanji8BD1Tex,
+ gMsgKanji8BD2Tex,
+ gMsgKanji8BD3Tex,
+ gMsgKanji8BD4Tex,
+ gMsgKanji8BD5Tex,
+ gMsgKanji8BD6Tex,
+ gMsgKanji8BD7Tex,
+ gMsgKanji8BD8Tex,
+ gMsgKanji8BD9Tex,
+ gMsgKanji8BDATex,
+ gMsgKanji8BDBTex,
+ gMsgKanji8BDCTex,
+ gMsgKanji8BDDTex,
+ gMsgKanji8BDETex,
+ gMsgKanji8BDFTex,
+ gMsgKanji8BE0Tex,
+ gMsgKanji8BE1Tex,
+ gMsgKanji8BE2Tex,
+ gMsgKanji8BE3Tex,
+ gMsgKanji8BE4Tex,
+ gMsgKanji8BE5Tex,
+ gMsgKanji8BE6Tex,
+ gMsgKanji8BE7Tex,
+ gMsgKanji8BE8Tex,
+ gMsgKanji8BE9Tex,
+ gMsgKanji8BEATex,
+ gMsgKanji8BEBTex,
+ gMsgKanji8BECTex,
+ gMsgKanji8BEDTex,
+ gMsgKanji8BEETex,
+ gMsgKanji8BEFTex,
+ gMsgKanji8BF0Tex,
+ gMsgKanji8BF1Tex,
+ gMsgKanji8BF2Tex,
+ gMsgKanji8BF3Tex,
+ gMsgKanji8BF4Tex,
+ gMsgKanji8BF5Tex,
+ gMsgKanji8BF6Tex,
+ gMsgKanji8BF7Tex,
+ gMsgKanji8BF8Tex,
+ gMsgKanji8BF9Tex,
+ gMsgKanji8BFATex,
+ gMsgKanji8BFBTex,
+ gMsgKanji8BFCTex,
+ gMsgKanji8C40Tex,
+ gMsgKanji8C41Tex,
+ gMsgKanji8C42Tex,
+ gMsgKanji8C43Tex,
+ gMsgKanji8C44Tex,
+ gMsgKanji8C45Tex,
+ gMsgKanji8C46Tex,
+ gMsgKanji8C47Tex,
+ gMsgKanji8C48Tex,
+ gMsgKanji8C49Tex,
+ gMsgKanji8C4ATex,
+ gMsgKanji8C4BTex,
+ gMsgKanji8C4CTex,
+ gMsgKanji8C4DTex,
+ gMsgKanji8C4ETex,
+ gMsgKanji8C4FTex,
+ gMsgKanji8C50Tex,
+ gMsgKanji8C51Tex,
+ gMsgKanji8C52Tex,
+ gMsgKanji8C53Tex,
+ gMsgKanji8C54Tex,
+ gMsgKanji8C55Tex,
+ gMsgKanji8C56Tex,
+ gMsgKanji8C57Tex,
+ gMsgKanji8C58Tex,
+ gMsgKanji8C59Tex,
+ gMsgKanji8C5ATex,
+ gMsgKanji8C5BTex,
+ gMsgKanji8C5CTex,
+ gMsgKanji8C5DTex,
+ gMsgKanji8C5ETex,
+ gMsgKanji8C5FTex,
+ gMsgKanji8C60Tex,
+ gMsgKanji8C61Tex,
+ gMsgKanji8C62Tex,
+ gMsgKanji8C63Tex,
+ gMsgKanji8C64Tex,
+ gMsgKanji8C65Tex,
+ gMsgKanji8C66Tex,
+ gMsgKanji8C67Tex,
+ gMsgKanji8C68Tex,
+ gMsgKanji8C69Tex,
+ gMsgKanji8C6ATex,
+ gMsgKanji8C6BTex,
+ gMsgKanji8C6CTex,
+ gMsgKanji8C6DTex,
+ gMsgKanji8C6ETex,
+ gMsgKanji8C6FTex,
+ gMsgKanji8C70Tex,
+ gMsgKanji8C71Tex,
+ gMsgKanji8C72Tex,
+ gMsgKanji8C73Tex,
+ gMsgKanji8C74Tex,
+ gMsgKanji8C75Tex,
+ gMsgKanji8C76Tex,
+ gMsgKanji8C77Tex,
+ gMsgKanji8C78Tex,
+ gMsgKanji8C79Tex,
+ gMsgKanji8C7ATex,
+ gMsgKanji8C7BTex,
+ gMsgKanji8C7CTex,
+ gMsgKanji8C7DTex,
+ gMsgKanji8C7ETex,
+ gMsgKanji8C80Tex,
+ gMsgKanji8C81Tex,
+ gMsgKanji8C82Tex,
+ gMsgKanji8C83Tex,
+ gMsgKanji8C84Tex,
+ gMsgKanji8C85Tex,
+ gMsgKanji8C86Tex,
+ gMsgKanji8C87Tex,
+ gMsgKanji8C88Tex,
+ gMsgKanji8C89Tex,
+ gMsgKanji8C8ATex,
+ gMsgKanji8C8BTex,
+ gMsgKanji8C8CTex,
+ gMsgKanji8C8DTex,
+ gMsgKanji8C8ETex,
+ gMsgKanji8C8FTex,
+ gMsgKanji8C90Tex,
+ gMsgKanji8C91Tex,
+ gMsgKanji8C92Tex,
+ gMsgKanji8C93Tex,
+ gMsgKanji8C94Tex,
+ gMsgKanji8C95Tex,
+ gMsgKanji8C96Tex,
+ gMsgKanji8C97Tex,
+ gMsgKanji8C98Tex,
+ gMsgKanji8C99Tex,
+ gMsgKanji8C9ATex,
+ gMsgKanji8C9BTex,
+ gMsgKanji8C9CTex,
+ gMsgKanji8C9DTex,
+ gMsgKanji8C9ETex,
+ gMsgKanji8C9FTex,
+ gMsgKanji8CA0Tex,
+ gMsgKanji8CA1Tex,
+ gMsgKanji8CA2Tex,
+ gMsgKanji8CA3Tex,
+ gMsgKanji8CA4Tex,
+ gMsgKanji8CA5Tex,
+ gMsgKanji8CA6Tex,
+ gMsgKanji8CA7Tex,
+ gMsgKanji8CA8Tex,
+ gMsgKanji8CA9Tex,
+ gMsgKanji8CAATex,
+ gMsgKanji8CABTex,
+ gMsgKanji8CACTex,
+ gMsgKanji8CADTex,
+ gMsgKanji8CAETex,
+ gMsgKanji8CAFTex,
+ gMsgKanji8CB0Tex,
+ gMsgKanji8CB1Tex,
+ gMsgKanji8CB2Tex,
+ gMsgKanji8CB3Tex,
+ gMsgKanji8CB4Tex,
+ gMsgKanji8CB5Tex,
+ gMsgKanji8CB6Tex,
+ gMsgKanji8CB7Tex,
+ gMsgKanji8CB8Tex,
+ gMsgKanji8CB9Tex,
+ gMsgKanji8CBATex,
+ gMsgKanji8CBBTex,
+ gMsgKanji8CBCTex,
+ gMsgKanji8CBDTex,
+ gMsgKanji8CBETex,
+ gMsgKanji8CBFTex,
+ gMsgKanji8CC0Tex,
+ gMsgKanji8CC1Tex,
+ gMsgKanji8CC2Tex,
+ gMsgKanji8CC3Tex,
+ gMsgKanji8CC4Tex,
+ gMsgKanji8CC5Tex,
+ gMsgKanji8CC6Tex,
+ gMsgKanji8CC7Tex,
+ gMsgKanji8CC8Tex,
+ gMsgKanji8CC9Tex,
+ gMsgKanji8CCATex,
+ gMsgKanji8CCBTex,
+ gMsgKanji8CCCTex,
+ gMsgKanji8CCDTex,
+ gMsgKanji8CCETex,
+ gMsgKanji8CCFTex,
+ gMsgKanji8CD0Tex,
+ gMsgKanji8CD1Tex,
+ gMsgKanji8CD2Tex,
+ gMsgKanji8CD3Tex,
+ gMsgKanji8CD4Tex,
+ gMsgKanji8CD5Tex,
+ gMsgKanji8CD6Tex,
+ gMsgKanji8CD7Tex,
+ gMsgKanji8CD8Tex,
+ gMsgKanji8CD9Tex,
+ gMsgKanji8CDATex,
+ gMsgKanji8CDBTex,
+ gMsgKanji8CDCTex,
+ gMsgKanji8CDDTex,
+ gMsgKanji8CDETex,
+ gMsgKanji8CDFTex,
+ gMsgKanji8CE0Tex,
+ gMsgKanji8CE1Tex,
+ gMsgKanji8CE2Tex,
+ gMsgKanji8CE3Tex,
+ gMsgKanji8CE4Tex,
+ gMsgKanji8CE5Tex,
+ gMsgKanji8CE6Tex,
+ gMsgKanji8CE7Tex,
+ gMsgKanji8CE8Tex,
+ gMsgKanji8CE9Tex,
+ gMsgKanji8CEATex,
+ gMsgKanji8CEBTex,
+ gMsgKanji8CECTex,
+ gMsgKanji8CEDTex,
+ gMsgKanji8CEETex,
+ gMsgKanji8CEFTex,
+ gMsgKanji8CF0Tex,
+ gMsgKanji8CF1Tex,
+ gMsgKanji8CF2Tex,
+ gMsgKanji8CF3Tex,
+ gMsgKanji8CF4Tex,
+ gMsgKanji8CF5Tex,
+ gMsgKanji8CF6Tex,
+ gMsgKanji8CF7Tex,
+ gMsgKanji8CF8Tex,
+ gMsgKanji8CF9Tex,
+ gMsgKanji8CFATex,
+ gMsgKanji8CFBTex,
+ gMsgKanji8CFCTex,
+ gMsgKanji8D40Tex,
+ gMsgKanji8D41Tex,
+ gMsgKanji8D42Tex,
+ gMsgKanji8D43Tex,
+ gMsgKanji8D44Tex,
+ gMsgKanji8D45Tex,
+ gMsgKanji8D46Tex,
+ gMsgKanji8D47Tex,
+ gMsgKanji8D48Tex,
+ gMsgKanji8D49Tex,
+ gMsgKanji8D4ATex,
+ gMsgKanji8D4BTex,
+ gMsgKanji8D4CTex,
+ gMsgKanji8D4DTex,
+ gMsgKanji8D4ETex,
+ gMsgKanji8D4FTex,
+ gMsgKanji8D50Tex,
+ gMsgKanji8D51Tex,
+ gMsgKanji8D52Tex,
+ gMsgKanji8D53Tex,
+ gMsgKanji8D54Tex,
+ gMsgKanji8D55Tex,
+ gMsgKanji8D56Tex,
+ gMsgKanji8D57Tex,
+ gMsgKanji8D58Tex,
+ gMsgKanji8D59Tex,
+ gMsgKanji8D5ATex,
+ gMsgKanji8D5BTex,
+ gMsgKanji8D5CTex,
+ gMsgKanji8D5DTex,
+ gMsgKanji8D5ETex,
+ gMsgKanji8D5FTex,
+ gMsgKanji8D60Tex,
+ gMsgKanji8D61Tex,
+ gMsgKanji8D62Tex,
+ gMsgKanji8D63Tex,
+ gMsgKanji8D64Tex,
+ gMsgKanji8D65Tex,
+ gMsgKanji8D66Tex,
+ gMsgKanji8D67Tex,
+ gMsgKanji8D68Tex,
+ gMsgKanji8D69Tex,
+ gMsgKanji8D6ATex,
+ gMsgKanji8D6BTex,
+ gMsgKanji8D6CTex,
+ gMsgKanji8D6DTex,
+ gMsgKanji8D6ETex,
+ gMsgKanji8D6FTex,
+ gMsgKanji8D70Tex,
+ gMsgKanji8D71Tex,
+ gMsgKanji8D72Tex,
+ gMsgKanji8D73Tex,
+ gMsgKanji8D74Tex,
+ gMsgKanji8D75Tex,
+ gMsgKanji8D76Tex,
+ gMsgKanji8D77Tex,
+ gMsgKanji8D78Tex,
+ gMsgKanji8D79Tex,
+ gMsgKanji8D7ATex,
+ gMsgKanji8D7BTex,
+ gMsgKanji8D7CTex,
+ gMsgKanji8D7DTex,
+ gMsgKanji8D7ETex,
+ gMsgKanji8D80Tex,
+ gMsgKanji8D81Tex,
+ gMsgKanji8D82Tex,
+ gMsgKanji8D83Tex,
+ gMsgKanji8D84Tex,
+ gMsgKanji8D85Tex,
+ gMsgKanji8D86Tex,
+ gMsgKanji8D87Tex,
+ gMsgKanji8D88Tex,
+ gMsgKanji8D89Tex,
+ gMsgKanji8D8ATex,
+ gMsgKanji8D8BTex,
+ gMsgKanji8D8CTex,
+ gMsgKanji8D8DTex,
+ gMsgKanji8D8ETex,
+ gMsgKanji8D8FTex,
+ gMsgKanji8D90Tex,
+ gMsgKanji8D91Tex,
+ gMsgKanji8D92Tex,
+ gMsgKanji8D93Tex,
+ gMsgKanji8D94Tex,
+ gMsgKanji8D95Tex,
+ gMsgKanji8D96Tex,
+ gMsgKanji8D97Tex,
+ gMsgKanji8D98Tex,
+ gMsgKanji8D99Tex,
+ gMsgKanji8D9ATex,
+ gMsgKanji8D9BTex,
+ gMsgKanji8D9CTex,
+ gMsgKanji8D9DTex,
+ gMsgKanji8D9ETex,
+ gMsgKanji8D9FTex,
+ gMsgKanji8DA0Tex,
+ gMsgKanji8DA1Tex,
+ gMsgKanji8DA2Tex,
+ gMsgKanji8DA3Tex,
+ gMsgKanji8DA4Tex,
+ gMsgKanji8DA5Tex,
+ gMsgKanji8DA6Tex,
+ gMsgKanji8DA7Tex,
+ gMsgKanji8DA8Tex,
+ gMsgKanji8DA9Tex,
+ gMsgKanji8DAATex,
+ gMsgKanji8DABTex,
+ gMsgKanji8DACTex,
+ gMsgKanji8DADTex,
+ gMsgKanji8DAETex,
+ gMsgKanji8DAFTex,
+ gMsgKanji8DB0Tex,
+ gMsgKanji8DB1Tex,
+ gMsgKanji8DB2Tex,
+ gMsgKanji8DB3Tex,
+ gMsgKanji8DB4Tex,
+ gMsgKanji8DB5Tex,
+ gMsgKanji8DB6Tex,
+ gMsgKanji8DB7Tex,
+ gMsgKanji8DB8Tex,
+ gMsgKanji8DB9Tex,
+ gMsgKanji8DBATex,
+ gMsgKanji8DBBTex,
+ gMsgKanji8DBCTex,
+ gMsgKanji8DBDTex,
+ gMsgKanji8DBETex,
+ gMsgKanji8DBFTex,
+ gMsgKanji8DC0Tex,
+ gMsgKanji8DC1Tex,
+ gMsgKanji8DC2Tex,
+ gMsgKanji8DC3Tex,
+ gMsgKanji8DC4Tex,
+ gMsgKanji8DC5Tex,
+ gMsgKanji8DC6Tex,
+ gMsgKanji8DC7Tex,
+ gMsgKanji8DC8Tex,
+ gMsgKanji8DC9Tex,
+ gMsgKanji8DCATex,
+ gMsgKanji8DCBTex,
+ gMsgKanji8DCCTex,
+ gMsgKanji8DCDTex,
+ gMsgKanji8DCETex,
+ gMsgKanji8DCFTex,
+ gMsgKanji8DD0Tex,
+ gMsgKanji8DD1Tex,
+ gMsgKanji8DD2Tex,
+ gMsgKanji8DD3Tex,
+ gMsgKanji8DD4Tex,
+ gMsgKanji8DD5Tex,
+ gMsgKanji8DD6Tex,
+ gMsgKanji8DD7Tex,
+ gMsgKanji8DD8Tex,
+ gMsgKanji8DD9Tex,
+ gMsgKanji8DDATex,
+ gMsgKanji8DDBTex,
+ gMsgKanji8DDCTex,
+ gMsgKanji8DDDTex,
+ gMsgKanji8DDETex,
+ gMsgKanji8DDFTex,
+ gMsgKanji8DE0Tex,
+ gMsgKanji8DE1Tex,
+ gMsgKanji8DE2Tex,
+ gMsgKanji8DE3Tex,
+ gMsgKanji8DE4Tex,
+ gMsgKanji8DE5Tex,
+ gMsgKanji8DE6Tex,
+ gMsgKanji8DE7Tex,
+ gMsgKanji8DE8Tex,
+ gMsgKanji8DE9Tex,
+ gMsgKanji8DEATex,
+ gMsgKanji8DEBTex,
+ gMsgKanji8DECTex,
+ gMsgKanji8DEDTex,
+ gMsgKanji8DEETex,
+ gMsgKanji8DEFTex,
+ gMsgKanji8DF0Tex,
+ gMsgKanji8DF1Tex,
+ gMsgKanji8DF2Tex,
+ gMsgKanji8DF3Tex,
+ gMsgKanji8DF4Tex,
+ gMsgKanji8DF5Tex,
+ gMsgKanji8DF6Tex,
+ gMsgKanji8DF7Tex,
+ gMsgKanji8DF8Tex,
+ gMsgKanji8DF9Tex,
+ gMsgKanji8DFATex,
+ gMsgKanji8DFBTex,
+ gMsgKanji8DFCTex,
+ gMsgKanji8E40Tex,
+ gMsgKanji8E41Tex,
+ gMsgKanji8E42Tex,
+ gMsgKanji8E43Tex,
+ gMsgKanji8E44Tex,
+ gMsgKanji8E45Tex,
+ gMsgKanji8E46Tex,
+ gMsgKanji8E47Tex,
+ gMsgKanji8E48Tex,
+ gMsgKanji8E49Tex,
+ gMsgKanji8E4ATex,
+ gMsgKanji8E4BTex,
+ gMsgKanji8E4CTex,
+ gMsgKanji8E4DTex,
+ gMsgKanji8E4ETex,
+ gMsgKanji8E4FTex,
+ gMsgKanji8E50Tex,
+ gMsgKanji8E51Tex,
+ gMsgKanji8E52Tex,
+ gMsgKanji8E53Tex,
+ gMsgKanji8E54Tex,
+ gMsgKanji8E55Tex,
+ gMsgKanji8E56Tex,
+ gMsgKanji8E57Tex,
+ gMsgKanji8E58Tex,
+ gMsgKanji8E59Tex,
+ gMsgKanji8E5ATex,
+ gMsgKanji8E5BTex,
+ gMsgKanji8E5CTex,
+ gMsgKanji8E5DTex,
+ gMsgKanji8E5ETex,
+ gMsgKanji8E5FTex,
+ gMsgKanji8E60Tex,
+ gMsgKanji8E61Tex,
+ gMsgKanji8E62Tex,
+ gMsgKanji8E63Tex,
+ gMsgKanji8E64Tex,
+ gMsgKanji8E65Tex,
+ gMsgKanji8E66Tex,
+ gMsgKanji8E67Tex,
+ gMsgKanji8E68Tex,
+ gMsgKanji8E69Tex,
+ gMsgKanji8E6ATex,
+ gMsgKanji8E6BTex,
+ gMsgKanji8E6CTex,
+ gMsgKanji8E6DTex,
+ gMsgKanji8E6ETex,
+ gMsgKanji8E6FTex,
+ gMsgKanji8E70Tex,
+ gMsgKanji8E71Tex,
+ gMsgKanji8E72Tex,
+ gMsgKanji8E73Tex,
+ gMsgKanji8E74Tex,
+ gMsgKanji8E75Tex,
+ gMsgKanji8E76Tex,
+ gMsgKanji8E77Tex,
+ gMsgKanji8E78Tex,
+ gMsgKanji8E79Tex,
+ gMsgKanji8E7ATex,
+ gMsgKanji8E7BTex,
+ gMsgKanji8E7CTex,
+ gMsgKanji8E7DTex,
+ gMsgKanji8E7ETex,
+ gMsgKanji8E80Tex,
+ gMsgKanji8E81Tex,
+ gMsgKanji8E82Tex,
+ gMsgKanji8E83Tex,
+ gMsgKanji8E84Tex,
+ gMsgKanji8E85Tex,
+ gMsgKanji8E86Tex,
+ gMsgKanji8E87Tex,
+ gMsgKanji8E88Tex,
+ gMsgKanji8E89Tex,
+ gMsgKanji8E8ATex,
+ gMsgKanji8E8BTex,
+ gMsgKanji8E8CTex,
+ gMsgKanji8E8DTex,
+ gMsgKanji8E8ETex,
+ gMsgKanji8E8FTex,
+ gMsgKanji8E90Tex,
+ gMsgKanji8E91Tex,
+ gMsgKanji8E92Tex,
+ gMsgKanji8E93Tex,
+ gMsgKanji8E94Tex,
+ gMsgKanji8E95Tex,
+ gMsgKanji8E96Tex,
+ gMsgKanji8E97Tex,
+ gMsgKanji8E98Tex,
+ gMsgKanji8E99Tex,
+ gMsgKanji8E9ATex,
+ gMsgKanji8E9BTex,
+ gMsgKanji8E9CTex,
+ gMsgKanji8E9DTex,
+ gMsgKanji8E9ETex,
+ gMsgKanji8E9FTex,
+ gMsgKanji8EA0Tex,
+ gMsgKanji8EA1Tex,
+ gMsgKanji8EA2Tex,
+ gMsgKanji8EA3Tex,
+ gMsgKanji8EA4Tex,
+ gMsgKanji8EA5Tex,
+ gMsgKanji8EA6Tex,
+ gMsgKanji8EA7Tex,
+ gMsgKanji8EA8Tex,
+ gMsgKanji8EA9Tex,
+ gMsgKanji8EAATex,
+ gMsgKanji8EABTex,
+ gMsgKanji8EACTex,
+ gMsgKanji8EADTex,
+ gMsgKanji8EAETex,
+ gMsgKanji8EAFTex,
+ gMsgKanji8EB0Tex,
+ gMsgKanji8EB1Tex,
+ gMsgKanji8EB2Tex,
+ gMsgKanji8EB3Tex,
+ gMsgKanji8EB4Tex,
+ gMsgKanji8EB5Tex,
+ gMsgKanji8EB6Tex,
+ gMsgKanji8EB7Tex,
+ gMsgKanji8EB8Tex,
+ gMsgKanji8EB9Tex,
+ gMsgKanji8EBATex,
+ gMsgKanji8EBBTex,
+ gMsgKanji8EBCTex,
+ gMsgKanji8EBDTex,
+ gMsgKanji8EBETex,
+ gMsgKanji8EBFTex,
+ gMsgKanji8EC0Tex,
+ gMsgKanji8EC1Tex,
+ gMsgKanji8EC2Tex,
+ gMsgKanji8EC3Tex,
+ gMsgKanji8EC4Tex,
+ gMsgKanji8EC5Tex,
+ gMsgKanji8EC6Tex,
+ gMsgKanji8EC7Tex,
+ gMsgKanji8EC8Tex,
+ gMsgKanji8EC9Tex,
+ gMsgKanji8ECATex,
+ gMsgKanji8ECBTex,
+ gMsgKanji8ECCTex,
+ gMsgKanji8ECDTex,
+ gMsgKanji8ECETex,
+ gMsgKanji8ECFTex,
+ gMsgKanji8ED0Tex,
+ gMsgKanji8ED1Tex,
+ gMsgKanji8ED2Tex,
+ gMsgKanji8ED3Tex,
+ gMsgKanji8ED4Tex,
+ gMsgKanji8ED5Tex,
+ gMsgKanji8ED6Tex,
+ gMsgKanji8ED7Tex,
+ gMsgKanji8ED8Tex,
+ gMsgKanji8ED9Tex,
+ gMsgKanji8EDATex,
+ gMsgKanji8EDBTex,
+ gMsgKanji8EDCTex,
+ gMsgKanji8EDDTex,
+ gMsgKanji8EDETex,
+ gMsgKanji8EDFTex,
+ gMsgKanji8EE0Tex,
+ gMsgKanji8EE1Tex,
+ gMsgKanji8EE2Tex,
+ gMsgKanji8EE3Tex,
+ gMsgKanji8EE4Tex,
+ gMsgKanji8EE5Tex,
+ gMsgKanji8EE6Tex,
+ gMsgKanji8EE7Tex,
+ gMsgKanji8EE8Tex,
+ gMsgKanji8EE9Tex,
+ gMsgKanji8EEATex,
+ gMsgKanji8EEBTex,
+ gMsgKanji8EECTex,
+ gMsgKanji8EEDTex,
+ gMsgKanji8EEETex,
+ gMsgKanji8EEFTex,
+ gMsgKanji8EF0Tex,
+ gMsgKanji8EF1Tex,
+ gMsgKanji8EF2Tex,
+ gMsgKanji8EF3Tex,
+ gMsgKanji8EF4Tex,
+ gMsgKanji8EF5Tex,
+ gMsgKanji8EF6Tex,
+ gMsgKanji8EF7Tex,
+ gMsgKanji8EF8Tex,
+ gMsgKanji8EF9Tex,
+ gMsgKanji8EFATex,
+ gMsgKanji8EFBTex,
+ gMsgKanji8EFCTex,
+ gMsgKanji8F40Tex,
+ gMsgKanji8F41Tex,
+ gMsgKanji8F42Tex,
+ gMsgKanji8F43Tex,
+ gMsgKanji8F44Tex,
+ gMsgKanji8F45Tex,
+ gMsgKanji8F46Tex,
+ gMsgKanji8F47Tex,
+ gMsgKanji8F48Tex,
+ gMsgKanji8F49Tex,
+ gMsgKanji8F4ATex,
+ gMsgKanji8F4BTex,
+ gMsgKanji8F4CTex,
+ gMsgKanji8F4DTex,
+ gMsgKanji8F4ETex,
+ gMsgKanji8F4FTex,
+ gMsgKanji8F50Tex,
+ gMsgKanji8F51Tex,
+ gMsgKanji8F52Tex,
+ gMsgKanji8F53Tex,
+ gMsgKanji8F54Tex,
+ gMsgKanji8F55Tex,
+ gMsgKanji8F56Tex,
+ gMsgKanji8F57Tex,
+ gMsgKanji8F58Tex,
+ gMsgKanji8F59Tex,
+ gMsgKanji8F5ATex,
+ gMsgKanji8F5BTex,
+ gMsgKanji8F5CTex,
+ gMsgKanji8F5DTex,
+ gMsgKanji8F5ETex,
+ gMsgKanji8F5FTex,
+ gMsgKanji8F60Tex,
+ gMsgKanji8F61Tex,
+ gMsgKanji8F62Tex,
+ gMsgKanji8F63Tex,
+ gMsgKanji8F64Tex,
+ gMsgKanji8F65Tex,
+ gMsgKanji8F66Tex,
+ gMsgKanji8F67Tex,
+ gMsgKanji8F68Tex,
+ gMsgKanji8F69Tex,
+ gMsgKanji8F6ATex,
+ gMsgKanji8F6BTex,
+ gMsgKanji8F6CTex,
+ gMsgKanji8F6DTex,
+ gMsgKanji8F6ETex,
+ gMsgKanji8F6FTex,
+ gMsgKanji8F70Tex,
+ gMsgKanji8F71Tex,
+ gMsgKanji8F72Tex,
+ gMsgKanji8F73Tex,
+ gMsgKanji8F74Tex,
+ gMsgKanji8F75Tex,
+ gMsgKanji8F76Tex,
+ gMsgKanji8F77Tex,
+ gMsgKanji8F78Tex,
+ gMsgKanji8F79Tex,
+ gMsgKanji8F7ATex,
+ gMsgKanji8F7BTex,
+ gMsgKanji8F7CTex,
+ gMsgKanji8F7DTex,
+ gMsgKanji8F7ETex,
+ gMsgKanji8F80Tex,
+ gMsgKanji8F81Tex,
+ gMsgKanji8F82Tex,
+ gMsgKanji8F83Tex,
+ gMsgKanji8F84Tex,
+ gMsgKanji8F85Tex,
+ gMsgKanji8F86Tex,
+ gMsgKanji8F87Tex,
+ gMsgKanji8F88Tex,
+ gMsgKanji8F89Tex,
+ gMsgKanji8F8ATex,
+ gMsgKanji8F8BTex,
+ gMsgKanji8F8CTex,
+ gMsgKanji8F8DTex,
+ gMsgKanji8F8ETex,
+ gMsgKanji8F8FTex,
+ gMsgKanji8F90Tex,
+ gMsgKanji8F91Tex,
+ gMsgKanji8F92Tex,
+ gMsgKanji8F93Tex,
+ gMsgKanji8F94Tex,
+ gMsgKanji8F95Tex,
+ gMsgKanji8F96Tex,
+ gMsgKanji8F97Tex,
+ gMsgKanji8F98Tex,
+ gMsgKanji8F99Tex,
+ gMsgKanji8F9ATex,
+ gMsgKanji8F9BTex,
+ gMsgKanji8F9CTex,
+ gMsgKanji8F9DTex,
+ gMsgKanji8F9ETex,
+ gMsgKanji8F9FTex,
+ gMsgKanji8FA0Tex,
+ gMsgKanji8FA1Tex,
+ gMsgKanji8FA2Tex,
+ gMsgKanji8FA3Tex,
+ gMsgKanji8FA4Tex,
+ gMsgKanji8FA5Tex,
+ gMsgKanji8FA6Tex,
+ gMsgKanji8FA7Tex,
+ gMsgKanji8FA8Tex,
+ gMsgKanji8FA9Tex,
+ gMsgKanji8FAATex,
+ gMsgKanji8FABTex,
+ gMsgKanji8FACTex,
+ gMsgKanji8FADTex,
+ gMsgKanji8FAETex,
+ gMsgKanji8FAFTex,
+ gMsgKanji8FB0Tex,
+ gMsgKanji8FB1Tex,
+ gMsgKanji8FB2Tex,
+ gMsgKanji8FB3Tex,
+ gMsgKanji8FB4Tex,
+ gMsgKanji8FB5Tex,
+ gMsgKanji8FB6Tex,
+ gMsgKanji8FB7Tex,
+ gMsgKanji8FB8Tex,
+ gMsgKanji8FB9Tex,
+ gMsgKanji8FBATex,
+ gMsgKanji8FBBTex,
+ gMsgKanji8FBCTex,
+ gMsgKanji8FBDTex,
+ gMsgKanji8FBETex,
+ gMsgKanji8FBFTex,
+ gMsgKanji8FC0Tex,
+ gMsgKanji8FC1Tex,
+ gMsgKanji8FC2Tex,
+ gMsgKanji8FC3Tex,
+ gMsgKanji8FC4Tex,
+ gMsgKanji8FC5Tex,
+ gMsgKanji8FC6Tex,
+ gMsgKanji8FC7Tex,
+ gMsgKanji8FC8Tex,
+ gMsgKanji8FC9Tex,
+ gMsgKanji8FCATex,
+ gMsgKanji8FCBTex,
+ gMsgKanji8FCCTex,
+ gMsgKanji8FCDTex,
+ gMsgKanji8FCETex,
+ gMsgKanji8FCFTex,
+ gMsgKanji8FD0Tex,
+ gMsgKanji8FD1Tex,
+ gMsgKanji8FD2Tex,
+ gMsgKanji8FD3Tex,
+ gMsgKanji8FD4Tex,
+ gMsgKanji8FD5Tex,
+ gMsgKanji8FD6Tex,
+ gMsgKanji8FD7Tex,
+ gMsgKanji8FD8Tex,
+ gMsgKanji8FD9Tex,
+ gMsgKanji8FDATex,
+ gMsgKanji8FDBTex,
+ gMsgKanji8FDCTex,
+ gMsgKanji8FDDTex,
+ gMsgKanji8FDETex,
+ gMsgKanji8FDFTex,
+ gMsgKanji8FE0Tex,
+ gMsgKanji8FE1Tex,
+ gMsgKanji8FE2Tex,
+ gMsgKanji8FE3Tex,
+ gMsgKanji8FE4Tex,
+ gMsgKanji8FE5Tex,
+ gMsgKanji8FE6Tex,
+ gMsgKanji8FE7Tex,
+ gMsgKanji8FE8Tex,
+ gMsgKanji8FE9Tex,
+ gMsgKanji8FEATex,
+ gMsgKanji8FEBTex,
+ gMsgKanji8FECTex,
+ gMsgKanji8FEDTex,
+ gMsgKanji8FEETex,
+ gMsgKanji8FEFTex,
+ gMsgKanji8FF0Tex,
+ gMsgKanji8FF1Tex,
+ gMsgKanji8FF2Tex,
+ gMsgKanji8FF3Tex,
+ gMsgKanji8FF4Tex,
+ gMsgKanji8FF5Tex,
+ gMsgKanji8FF6Tex,
+ gMsgKanji8FF7Tex,
+ gMsgKanji8FF8Tex,
+ gMsgKanji8FF9Tex,
+ gMsgKanji8FFATex,
+ gMsgKanji8FFBTex,
+ gMsgKanji8FFCTex,
+ gMsgKanji9040Tex,
+ gMsgKanji9041Tex,
+ gMsgKanji9042Tex,
+ gMsgKanji9043Tex,
+ gMsgKanji9044Tex,
+ gMsgKanji9045Tex,
+ gMsgKanji9046Tex,
+ gMsgKanji9047Tex,
+ gMsgKanji9048Tex,
+ gMsgKanji9049Tex,
+ gMsgKanji904ATex,
+ gMsgKanji904BTex,
+ gMsgKanji904CTex,
+ gMsgKanji904DTex,
+ gMsgKanji904ETex,
+ gMsgKanji904FTex,
+ gMsgKanji9050Tex,
+ gMsgKanji9051Tex,
+ gMsgKanji9052Tex,
+ gMsgKanji9053Tex,
+ gMsgKanji9054Tex,
+ gMsgKanji9055Tex,
+ gMsgKanji9056Tex,
+ gMsgKanji9057Tex,
+ gMsgKanji9058Tex,
+ gMsgKanji9059Tex,
+ gMsgKanji905ATex,
+ gMsgKanji905BTex,
+ gMsgKanji905CTex,
+ gMsgKanji905DTex,
+ gMsgKanji905ETex,
+ gMsgKanji905FTex,
+ gMsgKanji9060Tex,
+ gMsgKanji9061Tex,
+ gMsgKanji9062Tex,
+ gMsgKanji9063Tex,
+ gMsgKanji9064Tex,
+ gMsgKanji9065Tex,
+ gMsgKanji9066Tex,
+ gMsgKanji9067Tex,
+ gMsgKanji9068Tex,
+ gMsgKanji9069Tex,
+ gMsgKanji906ATex,
+ gMsgKanji906BTex,
+ gMsgKanji906CTex,
+ gMsgKanji906DTex,
+ gMsgKanji906ETex,
+ gMsgKanji906FTex,
+ gMsgKanji9070Tex,
+ gMsgKanji9071Tex,
+ gMsgKanji9072Tex,
+ gMsgKanji9073Tex,
+ gMsgKanji9074Tex,
+ gMsgKanji9075Tex,
+ gMsgKanji9076Tex,
+ gMsgKanji9077Tex,
+ gMsgKanji9078Tex,
+ gMsgKanji9079Tex,
+ gMsgKanji907ATex,
+ gMsgKanji907BTex,
+ gMsgKanji907CTex,
+ gMsgKanji907DTex,
+ gMsgKanji907ETex,
+ gMsgKanji9080Tex,
+ gMsgKanji9081Tex,
+ gMsgKanji9082Tex,
+ gMsgKanji9083Tex,
+ gMsgKanji9084Tex,
+ gMsgKanji9085Tex,
+ gMsgKanji9086Tex,
+ gMsgKanji9087Tex,
+ gMsgKanji9088Tex,
+ gMsgKanji9089Tex,
+ gMsgKanji908ATex,
+ gMsgKanji908BTex,
+ gMsgKanji908CTex,
+ gMsgKanji908DTex,
+ gMsgKanji908ETex,
+ gMsgKanji908FTex,
+ gMsgKanji9090Tex,
+ gMsgKanji9091Tex,
+ gMsgKanji9092Tex,
+ gMsgKanji9093Tex,
+ gMsgKanji9094Tex,
+ gMsgKanji9095Tex,
+ gMsgKanji9096Tex,
+ gMsgKanji9097Tex,
+ gMsgKanji9098Tex,
+ gMsgKanji9099Tex,
+ gMsgKanji909ATex,
+ gMsgKanji909BTex,
+ gMsgKanji909CTex,
+ gMsgKanji909DTex,
+ gMsgKanji909ETex,
+ gMsgKanji909FTex,
+ gMsgKanji90A0Tex,
+ gMsgKanji90A1Tex,
+ gMsgKanji90A2Tex,
+ gMsgKanji90A3Tex,
+ gMsgKanji90A4Tex,
+ gMsgKanji90A5Tex,
+ gMsgKanji90A6Tex,
+ gMsgKanji90A7Tex,
+ gMsgKanji90A8Tex,
+ gMsgKanji90A9Tex,
+ gMsgKanji90AATex,
+ gMsgKanji90ABTex,
+ gMsgKanji90ACTex,
+ gMsgKanji90ADTex,
+ gMsgKanji90AETex,
+ gMsgKanji90AFTex,
+ gMsgKanji90B0Tex,
+ gMsgKanji90B1Tex,
+ gMsgKanji90B2Tex,
+ gMsgKanji90B3Tex,
+ gMsgKanji90B4Tex,
+ gMsgKanji90B5Tex,
+ gMsgKanji90B6Tex,
+ gMsgKanji90B7Tex,
+ gMsgKanji90B8Tex,
+ gMsgKanji90B9Tex,
+ gMsgKanji90BATex,
+ gMsgKanji90BBTex,
+ gMsgKanji90BCTex,
+ gMsgKanji90BDTex,
+ gMsgKanji90BETex,
+ gMsgKanji90BFTex,
+ gMsgKanji90C0Tex,
+ gMsgKanji90C1Tex,
+ gMsgKanji90C2Tex,
+ gMsgKanji90C3Tex,
+ gMsgKanji90C4Tex,
+ gMsgKanji90C5Tex,
+ gMsgKanji90C6Tex,
+ gMsgKanji90C7Tex,
+ gMsgKanji90C8Tex,
+ gMsgKanji90C9Tex,
+ gMsgKanji90CATex,
+ gMsgKanji90CBTex,
+ gMsgKanji90CCTex,
+ gMsgKanji90CDTex,
+ gMsgKanji90CETex,
+ gMsgKanji90CFTex,
+ gMsgKanji90D0Tex,
+ gMsgKanji90D1Tex,
+ gMsgKanji90D2Tex,
+ gMsgKanji90D3Tex,
+ gMsgKanji90D4Tex,
+ gMsgKanji90D5Tex,
+ gMsgKanji90D6Tex,
+ gMsgKanji90D7Tex,
+ gMsgKanji90D8Tex,
+ gMsgKanji90D9Tex,
+ gMsgKanji90DATex,
+ gMsgKanji90DBTex,
+ gMsgKanji90DCTex,
+ gMsgKanji90DDTex,
+ gMsgKanji90DETex,
+ gMsgKanji90DFTex,
+ gMsgKanji90E0Tex,
+ gMsgKanji90E1Tex,
+ gMsgKanji90E2Tex,
+ gMsgKanji90E3Tex,
+ gMsgKanji90E4Tex,
+ gMsgKanji90E5Tex,
+ gMsgKanji90E6Tex,
+ gMsgKanji90E7Tex,
+ gMsgKanji90E8Tex,
+ gMsgKanji90E9Tex,
+ gMsgKanji90EATex,
+ gMsgKanji90EBTex,
+ gMsgKanji90ECTex,
+ gMsgKanji90EDTex,
+ gMsgKanji90EETex,
+ gMsgKanji90EFTex,
+ gMsgKanji90F0Tex,
+ gMsgKanji90F1Tex,
+ gMsgKanji90F2Tex,
+ gMsgKanji90F3Tex,
+ gMsgKanji90F4Tex,
+ gMsgKanji90F5Tex,
+ gMsgKanji90F6Tex,
+ gMsgKanji90F7Tex,
+ gMsgKanji90F8Tex,
+ gMsgKanji90F9Tex,
+ gMsgKanji90FATex,
+ gMsgKanji90FBTex,
+ gMsgKanji90FCTex,
+ gMsgKanji9140Tex,
+ gMsgKanji9141Tex,
+ gMsgKanji9142Tex,
+ gMsgKanji9143Tex,
+ gMsgKanji9144Tex,
+ gMsgKanji9145Tex,
+ gMsgKanji9146Tex,
+ gMsgKanji9147Tex,
+ gMsgKanji9148Tex,
+ gMsgKanji9149Tex,
+ gMsgKanji914ATex,
+ gMsgKanji914BTex,
+ gMsgKanji914CTex,
+ gMsgKanji914DTex,
+ gMsgKanji914ETex,
+ gMsgKanji914FTex,
+ gMsgKanji9150Tex,
+ gMsgKanji9151Tex,
+ gMsgKanji9152Tex,
+ gMsgKanji9153Tex,
+ gMsgKanji9154Tex,
+ gMsgKanji9155Tex,
+ gMsgKanji9156Tex,
+ gMsgKanji9157Tex,
+ gMsgKanji9158Tex,
+ gMsgKanji9159Tex,
+ gMsgKanji915ATex,
+ gMsgKanji915BTex,
+ gMsgKanji915CTex,
+ gMsgKanji915DTex,
+ gMsgKanji915ETex,
+ gMsgKanji915FTex,
+ gMsgKanji9160Tex,
+ gMsgKanji9161Tex,
+ gMsgKanji9162Tex,
+ gMsgKanji9163Tex,
+ gMsgKanji9164Tex,
+ gMsgKanji9165Tex,
+ gMsgKanji9166Tex,
+ gMsgKanji9167Tex,
+ gMsgKanji9168Tex,
+ gMsgKanji9169Tex,
+ gMsgKanji916ATex,
+ gMsgKanji916BTex,
+ gMsgKanji916CTex,
+ gMsgKanji916DTex,
+ gMsgKanji916ETex,
+ gMsgKanji916FTex,
+ gMsgKanji9170Tex,
+ gMsgKanji9171Tex,
+ gMsgKanji9172Tex,
+ gMsgKanji9173Tex,
+ gMsgKanji9174Tex,
+ gMsgKanji9175Tex,
+ gMsgKanji9176Tex,
+ gMsgKanji9177Tex,
+ gMsgKanji9178Tex,
+ gMsgKanji9179Tex,
+ gMsgKanji917ATex,
+ gMsgKanji917BTex,
+ gMsgKanji917CTex,
+ gMsgKanji917DTex,
+ gMsgKanji917ETex,
+ gMsgKanji9180Tex,
+ gMsgKanji9181Tex,
+ gMsgKanji9182Tex,
+ gMsgKanji9183Tex,
+ gMsgKanji9184Tex,
+ gMsgKanji9185Tex,
+ gMsgKanji9186Tex,
+ gMsgKanji9187Tex,
+ gMsgKanji9188Tex,
+ gMsgKanji9189Tex,
+ gMsgKanji918ATex,
+ gMsgKanji918BTex,
+ gMsgKanji918CTex,
+ gMsgKanji918DTex,
+ gMsgKanji918ETex,
+ gMsgKanji918FTex,
+ gMsgKanji9190Tex,
+ gMsgKanji9191Tex,
+ gMsgKanji9192Tex,
+ gMsgKanji9193Tex,
+ gMsgKanji9194Tex,
+ gMsgKanji9195Tex,
+ gMsgKanji9196Tex,
+ gMsgKanji9197Tex,
+ gMsgKanji9198Tex,
+ gMsgKanji9199Tex,
+ gMsgKanji919ATex,
+ gMsgKanji919BTex,
+ gMsgKanji919CTex,
+ gMsgKanji919DTex,
+ gMsgKanji919ETex,
+ gMsgKanji919FTex,
+ gMsgKanji91A0Tex,
+ gMsgKanji91A1Tex,
+ gMsgKanji91A2Tex,
+ gMsgKanji91A3Tex,
+ gMsgKanji91A4Tex,
+ gMsgKanji91A5Tex,
+ gMsgKanji91A6Tex,
+ gMsgKanji91A7Tex,
+ gMsgKanji91A8Tex,
+ gMsgKanji91A9Tex,
+ gMsgKanji91AATex,
+ gMsgKanji91ABTex,
+ gMsgKanji91ACTex,
+ gMsgKanji91ADTex,
+ gMsgKanji91AETex,
+ gMsgKanji91AFTex,
+ gMsgKanji91B0Tex,
+ gMsgKanji91B1Tex,
+ gMsgKanji91B2Tex,
+ gMsgKanji91B3Tex,
+ gMsgKanji91B4Tex,
+ gMsgKanji91B5Tex,
+ gMsgKanji91B6Tex,
+ gMsgKanji91B7Tex,
+ gMsgKanji91B8Tex,
+ gMsgKanji91B9Tex,
+ gMsgKanji91BATex,
+ gMsgKanji91BBTex,
+ gMsgKanji91BCTex,
+ gMsgKanji91BDTex,
+ gMsgKanji91BETex,
+ gMsgKanji91BFTex,
+ gMsgKanji91C0Tex,
+ gMsgKanji91C1Tex,
+ gMsgKanji91C2Tex,
+ gMsgKanji91C3Tex,
+ gMsgKanji91C4Tex,
+ gMsgKanji91C5Tex,
+ gMsgKanji91C6Tex,
+ gMsgKanji91C7Tex,
+ gMsgKanji91C8Tex,
+ gMsgKanji91C9Tex,
+ gMsgKanji91CATex,
+ gMsgKanji91CBTex,
+ gMsgKanji91CCTex,
+ gMsgKanji91CDTex,
+ gMsgKanji91CETex,
+ gMsgKanji91CFTex,
+ gMsgKanji91D0Tex,
+ gMsgKanji91D1Tex,
+ gMsgKanji91D2Tex,
+ gMsgKanji91D3Tex,
+ gMsgKanji91D4Tex,
+ gMsgKanji91D5Tex,
+ gMsgKanji91D6Tex,
+ gMsgKanji91D7Tex,
+ gMsgKanji91D8Tex,
+ gMsgKanji91D9Tex,
+ gMsgKanji91DATex,
+ gMsgKanji91DBTex,
+ gMsgKanji91DCTex,
+ gMsgKanji91DDTex,
+ gMsgKanji91DETex,
+ gMsgKanji91DFTex,
+ gMsgKanji91E0Tex,
+ gMsgKanji91E1Tex,
+ gMsgKanji91E2Tex,
+ gMsgKanji91E3Tex,
+ gMsgKanji91E4Tex,
+ gMsgKanji91E5Tex,
+ gMsgKanji91E6Tex,
+ gMsgKanji91E7Tex,
+ gMsgKanji91E8Tex,
+ gMsgKanji91E9Tex,
+ gMsgKanji91EATex,
+ gMsgKanji91EBTex,
+ gMsgKanji91ECTex,
+ gMsgKanji91EDTex,
+ gMsgKanji91EETex,
+ gMsgKanji91EFTex,
+ gMsgKanji91F0Tex,
+ gMsgKanji91F1Tex,
+ gMsgKanji91F2Tex,
+ gMsgKanji91F3Tex,
+ gMsgKanji91F4Tex,
+ gMsgKanji91F5Tex,
+ gMsgKanji91F6Tex,
+ gMsgKanji91F7Tex,
+ gMsgKanji91F8Tex,
+ gMsgKanji91F9Tex,
+ gMsgKanji91FATex,
+ gMsgKanji91FBTex,
+ gMsgKanji91FCTex,
+ gMsgKanji9240Tex,
+ gMsgKanji9241Tex,
+ gMsgKanji9242Tex,
+ gMsgKanji9243Tex,
+ gMsgKanji9244Tex,
+ gMsgKanji9245Tex,
+ gMsgKanji9246Tex,
+ gMsgKanji9247Tex,
+ gMsgKanji9248Tex,
+ gMsgKanji9249Tex,
+ gMsgKanji924ATex,
+ gMsgKanji924BTex,
+ gMsgKanji924CTex,
+ gMsgKanji924DTex,
+ gMsgKanji924ETex,
+ gMsgKanji924FTex,
+ gMsgKanji9250Tex,
+ gMsgKanji9251Tex,
+ gMsgKanji9252Tex,
+ gMsgKanji9253Tex,
+ gMsgKanji9254Tex,
+ gMsgKanji9255Tex,
+ gMsgKanji9256Tex,
+ gMsgKanji9257Tex,
+ gMsgKanji9258Tex,
+ gMsgKanji9259Tex,
+ gMsgKanji925ATex,
+ gMsgKanji925BTex,
+ gMsgKanji925CTex,
+ gMsgKanji925DTex,
+ gMsgKanji925ETex,
+ gMsgKanji925FTex,
+ gMsgKanji9260Tex,
+ gMsgKanji9261Tex,
+ gMsgKanji9262Tex,
+ gMsgKanji9263Tex,
+ gMsgKanji9264Tex,
+ gMsgKanji9265Tex,
+ gMsgKanji9266Tex,
+ gMsgKanji9267Tex,
+ gMsgKanji9268Tex,
+ gMsgKanji9269Tex,
+ gMsgKanji926ATex,
+ gMsgKanji926BTex,
+ gMsgKanji926CTex,
+ gMsgKanji926DTex,
+ gMsgKanji926ETex,
+ gMsgKanji926FTex,
+ gMsgKanji9270Tex,
+ gMsgKanji9271Tex,
+ gMsgKanji9272Tex,
+ gMsgKanji9273Tex,
+ gMsgKanji9274Tex,
+ gMsgKanji9275Tex,
+ gMsgKanji9276Tex,
+ gMsgKanji9277Tex,
+ gMsgKanji9278Tex,
+ gMsgKanji9279Tex,
+ gMsgKanji927ATex,
+ gMsgKanji927BTex,
+ gMsgKanji927CTex,
+ gMsgKanji927DTex,
+ gMsgKanji927ETex,
+ gMsgKanji9280Tex,
+ gMsgKanji9281Tex,
+ gMsgKanji9282Tex,
+ gMsgKanji9283Tex,
+ gMsgKanji9284Tex,
+ gMsgKanji9285Tex,
+ gMsgKanji9286Tex,
+ gMsgKanji9287Tex,
+ gMsgKanji9288Tex,
+ gMsgKanji9289Tex,
+ gMsgKanji928ATex,
+ gMsgKanji928BTex,
+ gMsgKanji928CTex,
+ gMsgKanji928DTex,
+ gMsgKanji928ETex,
+ gMsgKanji928FTex,
+ gMsgKanji9290Tex,
+ gMsgKanji9291Tex,
+ gMsgKanji9292Tex,
+ gMsgKanji9293Tex,
+ gMsgKanji9294Tex,
+ gMsgKanji9295Tex,
+ gMsgKanji9296Tex,
+ gMsgKanji9297Tex,
+ gMsgKanji9298Tex,
+ gMsgKanji9299Tex,
+ gMsgKanji929ATex,
+ gMsgKanji929BTex,
+ gMsgKanji929CTex,
+ gMsgKanji929DTex,
+ gMsgKanji929ETex,
+ gMsgKanji929FTex,
+ gMsgKanji92A0Tex,
+ gMsgKanji92A1Tex,
+ gMsgKanji92A2Tex,
+ gMsgKanji92A3Tex,
+ gMsgKanji92A4Tex,
+ gMsgKanji92A5Tex,
+ gMsgKanji92A6Tex,
+ gMsgKanji92A7Tex,
+ gMsgKanji92A8Tex,
+ gMsgKanji92A9Tex,
+ gMsgKanji92AATex,
+ gMsgKanji92ABTex,
+ gMsgKanji92ACTex,
+ gMsgKanji92ADTex,
+ gMsgKanji92AETex,
+ gMsgKanji92AFTex,
+ gMsgKanji92B0Tex,
+ gMsgKanji92B1Tex,
+ gMsgKanji92B2Tex,
+ gMsgKanji92B3Tex,
+ gMsgKanji92B4Tex,
+ gMsgKanji92B5Tex,
+ gMsgKanji92B6Tex,
+ gMsgKanji92B7Tex,
+ gMsgKanji92B8Tex,
+ gMsgKanji92B9Tex,
+ gMsgKanji92BATex,
+ gMsgKanji92BBTex,
+ gMsgKanji92BCTex,
+ gMsgKanji92BDTex,
+ gMsgKanji92BETex,
+ gMsgKanji92BFTex,
+ gMsgKanji92C0Tex,
+ gMsgKanji92C1Tex,
+ gMsgKanji92C2Tex,
+ gMsgKanji92C3Tex,
+ gMsgKanji92C4Tex,
+ gMsgKanji92C5Tex,
+ gMsgKanji92C6Tex,
+ gMsgKanji92C7Tex,
+ gMsgKanji92C8Tex,
+ gMsgKanji92C9Tex,
+ gMsgKanji92CATex,
+ gMsgKanji92CBTex,
+ gMsgKanji92CCTex,
+ gMsgKanji92CDTex,
+ gMsgKanji92CETex,
+ gMsgKanji92CFTex,
+ gMsgKanji92D0Tex,
+ gMsgKanji92D1Tex,
+ gMsgKanji92D2Tex,
+ gMsgKanji92D3Tex,
+ gMsgKanji92D4Tex,
+ gMsgKanji92D5Tex,
+ gMsgKanji92D6Tex,
+ gMsgKanji92D7Tex,
+ gMsgKanji92D8Tex,
+ gMsgKanji92D9Tex,
+ gMsgKanji92DATex,
+ gMsgKanji92DBTex,
+ gMsgKanji92DCTex,
+ gMsgKanji92DDTex,
+ gMsgKanji92DETex,
+ gMsgKanji92DFTex,
+ gMsgKanji92E0Tex,
+ gMsgKanji92E1Tex,
+ gMsgKanji92E2Tex,
+ gMsgKanji92E3Tex,
+ gMsgKanji92E4Tex,
+ gMsgKanji92E5Tex,
+ gMsgKanji92E6Tex,
+ gMsgKanji92E7Tex,
+ gMsgKanji92E8Tex,
+ gMsgKanji92E9Tex,
+ gMsgKanji92EATex,
+ gMsgKanji92EBTex,
+ gMsgKanji92ECTex,
+ gMsgKanji92EDTex,
+ gMsgKanji92EETex,
+ gMsgKanji92EFTex,
+ gMsgKanji92F0Tex,
+ gMsgKanji92F1Tex,
+ gMsgKanji92F2Tex,
+ gMsgKanji92F3Tex,
+ gMsgKanji92F4Tex,
+ gMsgKanji92F5Tex,
+ gMsgKanji92F6Tex,
+ gMsgKanji92F7Tex,
+ gMsgKanji92F8Tex,
+ gMsgKanji92F9Tex,
+ gMsgKanji92FATex,
+ gMsgKanji92FBTex,
+ gMsgKanji92FCTex,
+ gMsgKanji9340Tex,
+ gMsgKanji9341Tex,
+ gMsgKanji9342Tex,
+ gMsgKanji9343Tex,
+ gMsgKanji9344Tex,
+ gMsgKanji9345Tex,
+ gMsgKanji9346Tex,
+ gMsgKanji9347Tex,
+ gMsgKanji9348Tex,
+ gMsgKanji9349Tex,
+ gMsgKanji934ATex,
+ gMsgKanji934BTex,
+ gMsgKanji934CTex,
+ gMsgKanji934DTex,
+ gMsgKanji934ETex,
+ gMsgKanji934FTex,
+ gMsgKanji9350Tex,
+ gMsgKanji9351Tex,
+ gMsgKanji9352Tex,
+ gMsgKanji9353Tex,
+ gMsgKanji9354Tex,
+ gMsgKanji9355Tex,
+ gMsgKanji9356Tex,
+ gMsgKanji9357Tex,
+ gMsgKanji9358Tex,
+ gMsgKanji9359Tex,
+ gMsgKanji935ATex,
+ gMsgKanji935BTex,
+ gMsgKanji935CTex,
+ gMsgKanji935DTex,
+ gMsgKanji935ETex,
+ gMsgKanji935FTex,
+ gMsgKanji9360Tex,
+ gMsgKanji9361Tex,
+ gMsgKanji9362Tex,
+ gMsgKanji9363Tex,
+ gMsgKanji9364Tex,
+ gMsgKanji9365Tex,
+ gMsgKanji9366Tex,
+ gMsgKanji9367Tex,
+ gMsgKanji9368Tex,
+ gMsgKanji9369Tex,
+ gMsgKanji936ATex,
+ gMsgKanji936BTex,
+ gMsgKanji936CTex,
+ gMsgKanji936DTex,
+ gMsgKanji936ETex,
+ gMsgKanji936FTex,
+ gMsgKanji9370Tex,
+ gMsgKanji9371Tex,
+ gMsgKanji9372Tex,
+ gMsgKanji9373Tex,
+ gMsgKanji9374Tex,
+ gMsgKanji9375Tex,
+ gMsgKanji9376Tex,
+ gMsgKanji9377Tex,
+ gMsgKanji9378Tex,
+ gMsgKanji9379Tex,
+ gMsgKanji937ATex,
+ gMsgKanji937BTex,
+ gMsgKanji937CTex,
+ gMsgKanji937DTex,
+ gMsgKanji937ETex,
+ gMsgKanji9380Tex,
+ gMsgKanji9381Tex,
+ gMsgKanji9382Tex,
+ gMsgKanji9383Tex,
+ gMsgKanji9384Tex,
+ gMsgKanji9385Tex,
+ gMsgKanji9386Tex,
+ gMsgKanji9387Tex,
+ gMsgKanji9388Tex,
+ gMsgKanji9389Tex,
+ gMsgKanji938ATex,
+ gMsgKanji938BTex,
+ gMsgKanji938CTex,
+ gMsgKanji938DTex,
+ gMsgKanji938ETex,
+ gMsgKanji938FTex,
+ gMsgKanji9390Tex,
+ gMsgKanji9391Tex,
+ gMsgKanji9392Tex,
+ gMsgKanji9393Tex,
+ gMsgKanji9394Tex,
+ gMsgKanji9395Tex,
+ gMsgKanji9396Tex,
+ gMsgKanji9397Tex,
+ gMsgKanji9398Tex,
+ gMsgKanji9399Tex,
+ gMsgKanji939ATex,
+ gMsgKanji939BTex,
+ gMsgKanji939CTex,
+ gMsgKanji939DTex,
+ gMsgKanji939ETex,
+ gMsgKanji939FTex,
+ gMsgKanji93A0Tex,
+ gMsgKanji93A1Tex,
+ gMsgKanji93A2Tex,
+ gMsgKanji93A3Tex,
+ gMsgKanji93A4Tex,
+ gMsgKanji93A5Tex,
+ gMsgKanji93A6Tex,
+ gMsgKanji93A7Tex,
+ gMsgKanji93A8Tex,
+ gMsgKanji93A9Tex,
+ gMsgKanji93AATex,
+ gMsgKanji93ABTex,
+ gMsgKanji93ACTex,
+ gMsgKanji93ADTex,
+ gMsgKanji93AETex,
+ gMsgKanji93AFTex,
+ gMsgKanji93B0Tex,
+ gMsgKanji93B1Tex,
+ gMsgKanji93B2Tex,
+ gMsgKanji93B3Tex,
+ gMsgKanji93B4Tex,
+ gMsgKanji93B5Tex,
+ gMsgKanji93B6Tex,
+ gMsgKanji93B7Tex,
+ gMsgKanji93B8Tex,
+ gMsgKanji93B9Tex,
+ gMsgKanji93BATex,
+ gMsgKanji93BBTex,
+ gMsgKanji93BCTex,
+ gMsgKanji93BDTex,
+ gMsgKanji93BETex,
+ gMsgKanji93BFTex,
+ gMsgKanji93C0Tex,
+ gMsgKanji93C1Tex,
+ gMsgKanji93C2Tex,
+ gMsgKanji93C3Tex,
+ gMsgKanji93C4Tex,
+ gMsgKanji93C5Tex,
+ gMsgKanji93C6Tex,
+ gMsgKanji93C7Tex,
+ gMsgKanji93C8Tex,
+ gMsgKanji93C9Tex,
+ gMsgKanji93CATex,
+ gMsgKanji93CBTex,
+ gMsgKanji93CCTex,
+ gMsgKanji93CDTex,
+ gMsgKanji93CETex,
+ gMsgKanji93CFTex,
+ gMsgKanji93D0Tex,
+ gMsgKanji93D1Tex,
+ gMsgKanji93D2Tex,
+ gMsgKanji93D3Tex,
+ gMsgKanji93D4Tex,
+ gMsgKanji93D5Tex,
+ gMsgKanji93D6Tex,
+ gMsgKanji93D7Tex,
+ gMsgKanji93D8Tex,
+ gMsgKanji93D9Tex,
+ gMsgKanji93DATex,
+ gMsgKanji93DBTex,
+ gMsgKanji93DCTex,
+ gMsgKanji93DDTex,
+ gMsgKanji93DETex,
+ gMsgKanji93DFTex,
+ gMsgKanji93E0Tex,
+ gMsgKanji93E1Tex,
+ gMsgKanji93E2Tex,
+ gMsgKanji93E3Tex,
+ gMsgKanji93E4Tex,
+ gMsgKanji93E5Tex,
+ gMsgKanji93E6Tex,
+ gMsgKanji93E7Tex,
+ gMsgKanji93E8Tex,
+ gMsgKanji93E9Tex,
+ gMsgKanji93EATex,
+ gMsgKanji93EBTex,
+ gMsgKanji93ECTex,
+ gMsgKanji93EDTex,
+ gMsgKanji93EETex,
+ gMsgKanji93EFTex,
+ gMsgKanji93F0Tex,
+ gMsgKanji93F1Tex,
+ gMsgKanji93F2Tex,
+ gMsgKanji93F3Tex,
+ gMsgKanji93F4Tex,
+ gMsgKanji93F5Tex,
+ gMsgKanji93F6Tex,
+ gMsgKanji93F7Tex,
+ gMsgKanji93F8Tex,
+ gMsgKanji93F9Tex,
+ gMsgKanji93FATex,
+ gMsgKanji93FBTex,
+ gMsgKanji93FCTex,
+ gMsgKanji9440Tex,
+ gMsgKanji9441Tex,
+ gMsgKanji9442Tex,
+ gMsgKanji9443Tex,
+ gMsgKanji9444Tex,
+ gMsgKanji9445Tex,
+ gMsgKanji9446Tex,
+ gMsgKanji9447Tex,
+ gMsgKanji9448Tex,
+ gMsgKanji9449Tex,
+ gMsgKanji944ATex,
+ gMsgKanji944BTex,
+ gMsgKanji944CTex,
+ gMsgKanji944DTex,
+ gMsgKanji944ETex,
+ gMsgKanji944FTex,
+ gMsgKanji9450Tex,
+ gMsgKanji9451Tex,
+ gMsgKanji9452Tex,
+ gMsgKanji9453Tex,
+ gMsgKanji9454Tex,
+ gMsgKanji9455Tex,
+ gMsgKanji9456Tex,
+ gMsgKanji9457Tex,
+ gMsgKanji9458Tex,
+ gMsgKanji9459Tex,
+ gMsgKanji945ATex,
+ gMsgKanji945BTex,
+ gMsgKanji945CTex,
+ gMsgKanji945DTex,
+ gMsgKanji945ETex,
+ gMsgKanji945FTex,
+ gMsgKanji9460Tex,
+ gMsgKanji9461Tex,
+ gMsgKanji9462Tex,
+ gMsgKanji9463Tex,
+ gMsgKanji9464Tex,
+ gMsgKanji9465Tex,
+ gMsgKanji9466Tex,
+ gMsgKanji9467Tex,
+ gMsgKanji9468Tex,
+ gMsgKanji9469Tex,
+ gMsgKanji946ATex,
+ gMsgKanji946BTex,
+ gMsgKanji946CTex,
+ gMsgKanji946DTex,
+ gMsgKanji946ETex,
+ gMsgKanji946FTex,
+ gMsgKanji9470Tex,
+ gMsgKanji9471Tex,
+ gMsgKanji9472Tex,
+ gMsgKanji9473Tex,
+ gMsgKanji9474Tex,
+ gMsgKanji9475Tex,
+ gMsgKanji9476Tex,
+ gMsgKanji9477Tex,
+ gMsgKanji9478Tex,
+ gMsgKanji9479Tex,
+ gMsgKanji947ATex,
+ gMsgKanji947BTex,
+ gMsgKanji947CTex,
+ gMsgKanji947DTex,
+ gMsgKanji947ETex,
+ gMsgKanji9480Tex,
+ gMsgKanji9481Tex,
+ gMsgKanji9482Tex,
+ gMsgKanji9483Tex,
+ gMsgKanji9484Tex,
+ gMsgKanji9485Tex,
+ gMsgKanji9486Tex,
+ gMsgKanji9487Tex,
+ gMsgKanji9488Tex,
+ gMsgKanji9489Tex,
+ gMsgKanji948ATex,
+ gMsgKanji948BTex,
+ gMsgKanji948CTex,
+ gMsgKanji948DTex,
+ gMsgKanji948ETex,
+ gMsgKanji948FTex,
+ gMsgKanji9490Tex,
+ gMsgKanji9491Tex,
+ gMsgKanji9492Tex,
+ gMsgKanji9493Tex,
+ gMsgKanji9494Tex,
+ gMsgKanji9495Tex,
+ gMsgKanji9496Tex,
+ gMsgKanji9497Tex,
+ gMsgKanji9498Tex,
+ gMsgKanji9499Tex,
+ gMsgKanji949ATex,
+ gMsgKanji949BTex,
+ gMsgKanji949CTex,
+ gMsgKanji949DTex,
+ gMsgKanji949ETex,
+ gMsgKanji949FTex,
+ gMsgKanji94A0Tex,
+ gMsgKanji94A1Tex,
+ gMsgKanji94A2Tex,
+ gMsgKanji94A3Tex,
+ gMsgKanji94A4Tex,
+ gMsgKanji94A5Tex,
+ gMsgKanji94A6Tex,
+ gMsgKanji94A7Tex,
+ gMsgKanji94A8Tex,
+ gMsgKanji94A9Tex,
+ gMsgKanji94AATex,
+ gMsgKanji94ABTex,
+ gMsgKanji94ACTex,
+ gMsgKanji94ADTex,
+ gMsgKanji94AETex,
+ gMsgKanji94AFTex,
+ gMsgKanji94B0Tex,
+ gMsgKanji94B1Tex,
+ gMsgKanji94B2Tex,
+ gMsgKanji94B3Tex,
+ gMsgKanji94B4Tex,
+ gMsgKanji94B5Tex,
+ gMsgKanji94B6Tex,
+ gMsgKanji94B7Tex,
+ gMsgKanji94B8Tex,
+ gMsgKanji94B9Tex,
+ gMsgKanji94BATex,
+ gMsgKanji94BBTex,
+ gMsgKanji94BCTex,
+ gMsgKanji94BDTex,
+ gMsgKanji94BETex,
+ gMsgKanji94BFTex,
+ gMsgKanji94C0Tex,
+ gMsgKanji94C1Tex,
+ gMsgKanji94C2Tex,
+ gMsgKanji94C3Tex,
+ gMsgKanji94C4Tex,
+ gMsgKanji94C5Tex,
+ gMsgKanji94C6Tex,
+ gMsgKanji94C7Tex,
+ gMsgKanji94C8Tex,
+ gMsgKanji94C9Tex,
+ gMsgKanji94CATex,
+ gMsgKanji94CBTex,
+ gMsgKanji94CCTex,
+ gMsgKanji94CDTex,
+ gMsgKanji94CETex,
+ gMsgKanji94CFTex,
+ gMsgKanji94D0Tex,
+ gMsgKanji94D1Tex,
+ gMsgKanji94D2Tex,
+ gMsgKanji94D3Tex,
+ gMsgKanji94D4Tex,
+ gMsgKanji94D5Tex,
+ gMsgKanji94D6Tex,
+ gMsgKanji94D7Tex,
+ gMsgKanji94D8Tex,
+ gMsgKanji94D9Tex,
+ gMsgKanji94DATex,
+ gMsgKanji94DBTex,
+ gMsgKanji94DCTex,
+ gMsgKanji94DDTex,
+ gMsgKanji94DETex,
+ gMsgKanji94DFTex,
+ gMsgKanji94E0Tex,
+ gMsgKanji94E1Tex,
+ gMsgKanji94E2Tex,
+ gMsgKanji94E3Tex,
+ gMsgKanji94E4Tex,
+ gMsgKanji94E5Tex,
+ gMsgKanji94E6Tex,
+ gMsgKanji94E7Tex,
+ gMsgKanji94E8Tex,
+ gMsgKanji94E9Tex,
+ gMsgKanji94EATex,
+ gMsgKanji94EBTex,
+ gMsgKanji94ECTex,
+ gMsgKanji94EDTex,
+ gMsgKanji94EETex,
+ gMsgKanji94EFTex,
+ gMsgKanji94F0Tex,
+ gMsgKanji94F1Tex,
+ gMsgKanji94F2Tex,
+ gMsgKanji94F3Tex,
+ gMsgKanji94F4Tex,
+ gMsgKanji94F5Tex,
+ gMsgKanji94F6Tex,
+ gMsgKanji94F7Tex,
+ gMsgKanji94F8Tex,
+ gMsgKanji94F9Tex,
+ gMsgKanji94FATex,
+ gMsgKanji94FBTex,
+ gMsgKanji94FCTex,
+ gMsgKanji9540Tex,
+ gMsgKanji9541Tex,
+ gMsgKanji9542Tex,
+ gMsgKanji9543Tex,
+ gMsgKanji9544Tex,
+ gMsgKanji9545Tex,
+ gMsgKanji9546Tex,
+ gMsgKanji9547Tex,
+ gMsgKanji9548Tex,
+ gMsgKanji9549Tex,
+ gMsgKanji954ATex,
+ gMsgKanji954BTex,
+ gMsgKanji954CTex,
+ gMsgKanji954DTex,
+ gMsgKanji954ETex,
+ gMsgKanji954FTex,
+ gMsgKanji9550Tex,
+ gMsgKanji9551Tex,
+ gMsgKanji9552Tex,
+ gMsgKanji9553Tex,
+ gMsgKanji9554Tex,
+ gMsgKanji9555Tex,
+ gMsgKanji9556Tex,
+ gMsgKanji9557Tex,
+ gMsgKanji9558Tex,
+ gMsgKanji9559Tex,
+ gMsgKanji955ATex,
+ gMsgKanji955BTex,
+ gMsgKanji955CTex,
+ gMsgKanji955DTex,
+ gMsgKanji955ETex,
+ gMsgKanji955FTex,
+ gMsgKanji9560Tex,
+ gMsgKanji9561Tex,
+ gMsgKanji9562Tex,
+ gMsgKanji9563Tex,
+ gMsgKanji9564Tex,
+ gMsgKanji9565Tex,
+ gMsgKanji9566Tex,
+ gMsgKanji9567Tex,
+ gMsgKanji9568Tex,
+ gMsgKanji9569Tex,
+ gMsgKanji956ATex,
+ gMsgKanji956BTex,
+ gMsgKanji956CTex,
+ gMsgKanji956DTex,
+ gMsgKanji956ETex,
+ gMsgKanji956FTex,
+ gMsgKanji9570Tex,
+ gMsgKanji9571Tex,
+ gMsgKanji9572Tex,
+ gMsgKanji9573Tex,
+ gMsgKanji9574Tex,
+ gMsgKanji9575Tex,
+ gMsgKanji9576Tex,
+ gMsgKanji9577Tex,
+ gMsgKanji9578Tex,
+ gMsgKanji9579Tex,
+ gMsgKanji957ATex,
+ gMsgKanji957BTex,
+ gMsgKanji957CTex,
+ gMsgKanji957DTex,
+ gMsgKanji957ETex,
+ gMsgKanji9580Tex,
+ gMsgKanji9581Tex,
+ gMsgKanji9582Tex,
+ gMsgKanji9583Tex,
+ gMsgKanji9584Tex,
+ gMsgKanji9585Tex,
+ gMsgKanji9586Tex,
+ gMsgKanji9587Tex,
+ gMsgKanji9588Tex,
+ gMsgKanji9589Tex,
+ gMsgKanji958ATex,
+ gMsgKanji958BTex,
+ gMsgKanji958CTex,
+ gMsgKanji958DTex,
+ gMsgKanji958ETex,
+ gMsgKanji958FTex,
+ gMsgKanji9590Tex,
+ gMsgKanji9591Tex,
+ gMsgKanji9592Tex,
+ gMsgKanji9593Tex,
+ gMsgKanji9594Tex,
+ gMsgKanji9595Tex,
+ gMsgKanji9596Tex,
+ gMsgKanji9597Tex,
+ gMsgKanji9598Tex,
+ gMsgKanji9599Tex,
+ gMsgKanji959ATex,
+ gMsgKanji959BTex,
+ gMsgKanji959CTex,
+ gMsgKanji959DTex,
+ gMsgKanji959ETex,
+ gMsgKanji959FTex,
+ gMsgKanji95A0Tex,
+ gMsgKanji95A1Tex,
+ gMsgKanji95A2Tex,
+ gMsgKanji95A3Tex,
+ gMsgKanji95A4Tex,
+ gMsgKanji95A5Tex,
+ gMsgKanji95A6Tex,
+ gMsgKanji95A7Tex,
+ gMsgKanji95A8Tex,
+ gMsgKanji95A9Tex,
+ gMsgKanji95AATex,
+ gMsgKanji95ABTex,
+ gMsgKanji95ACTex,
+ gMsgKanji95ADTex,
+ gMsgKanji95AETex,
+ gMsgKanji95AFTex,
+ gMsgKanji95B0Tex,
+ gMsgKanji95B1Tex,
+ gMsgKanji95B2Tex,
+ gMsgKanji95B3Tex,
+ gMsgKanji95B4Tex,
+ gMsgKanji95B5Tex,
+ gMsgKanji95B6Tex,
+ gMsgKanji95B7Tex,
+ gMsgKanji95B8Tex,
+ gMsgKanji95B9Tex,
+ gMsgKanji95BATex,
+ gMsgKanji95BBTex,
+ gMsgKanji95BCTex,
+ gMsgKanji95BDTex,
+ gMsgKanji95BETex,
+ gMsgKanji95BFTex,
+ gMsgKanji95C0Tex,
+ gMsgKanji95C1Tex,
+ gMsgKanji95C2Tex,
+ gMsgKanji95C3Tex,
+ gMsgKanji95C4Tex,
+ gMsgKanji95C5Tex,
+ gMsgKanji95C6Tex,
+ gMsgKanji95C7Tex,
+ gMsgKanji95C8Tex,
+ gMsgKanji95C9Tex,
+ gMsgKanji95CATex,
+ gMsgKanji95CBTex,
+ gMsgKanji95CCTex,
+ gMsgKanji95CDTex,
+ gMsgKanji95CETex,
+ gMsgKanji95CFTex,
+ gMsgKanji95D0Tex,
+ gMsgKanji95D1Tex,
+ gMsgKanji95D2Tex,
+ gMsgKanji95D3Tex,
+ gMsgKanji95D4Tex,
+ gMsgKanji95D5Tex,
+ gMsgKanji95D6Tex,
+ gMsgKanji95D7Tex,
+ gMsgKanji95D8Tex,
+ gMsgKanji95D9Tex,
+ gMsgKanji95DATex,
+ gMsgKanji95DBTex,
+ gMsgKanji95DCTex,
+ gMsgKanji95DDTex,
+ gMsgKanji95DETex,
+ gMsgKanji95DFTex,
+ gMsgKanji95E0Tex,
+ gMsgKanji95E1Tex,
+ gMsgKanji95E2Tex,
+ gMsgKanji95E3Tex,
+ gMsgKanji95E4Tex,
+ gMsgKanji95E5Tex,
+ gMsgKanji95E6Tex,
+ gMsgKanji95E7Tex,
+ gMsgKanji95E8Tex,
+ gMsgKanji95E9Tex,
+ gMsgKanji95EATex,
+ gMsgKanji95EBTex,
+ gMsgKanji95ECTex,
+ gMsgKanji95EDTex,
+ gMsgKanji95EETex,
+ gMsgKanji95EFTex,
+ gMsgKanji95F0Tex,
+ gMsgKanji95F1Tex,
+ gMsgKanji95F2Tex,
+ gMsgKanji95F3Tex,
+ gMsgKanji95F4Tex,
+ gMsgKanji95F5Tex,
+ gMsgKanji95F6Tex,
+ gMsgKanji95F7Tex,
+ gMsgKanji95F8Tex,
+ gMsgKanji95F9Tex,
+ gMsgKanji95FATex,
+ gMsgKanji95FBTex,
+ gMsgKanji95FCTex,
+ gMsgKanji9640Tex,
+ gMsgKanji9641Tex,
+ gMsgKanji9642Tex,
+ gMsgKanji9643Tex,
+ gMsgKanji9644Tex,
+ gMsgKanji9645Tex,
+ gMsgKanji9646Tex,
+ gMsgKanji9647Tex,
+ gMsgKanji9648Tex,
+ gMsgKanji9649Tex,
+ gMsgKanji964ATex,
+ gMsgKanji964BTex,
+ gMsgKanji964CTex,
+ gMsgKanji964DTex,
+ gMsgKanji964ETex,
+ gMsgKanji964FTex,
+ gMsgKanji9650Tex,
+ gMsgKanji9651Tex,
+ gMsgKanji9652Tex,
+ gMsgKanji9653Tex,
+ gMsgKanji9654Tex,
+ gMsgKanji9655Tex,
+ gMsgKanji9656Tex,
+ gMsgKanji9657Tex,
+ gMsgKanji9658Tex,
+ gMsgKanji9659Tex,
+ gMsgKanji965ATex,
+ gMsgKanji965BTex,
+ gMsgKanji965CTex,
+ gMsgKanji965DTex,
+ gMsgKanji965ETex,
+ gMsgKanji965FTex,
+ gMsgKanji9660Tex,
+ gMsgKanji9661Tex,
+ gMsgKanji9662Tex,
+ gMsgKanji9663Tex,
+ gMsgKanji9664Tex,
+ gMsgKanji9665Tex,
+ gMsgKanji9666Tex,
+ gMsgKanji9667Tex,
+ gMsgKanji9668Tex,
+ gMsgKanji9669Tex,
+ gMsgKanji966ATex,
+ gMsgKanji966BTex,
+ gMsgKanji966CTex,
+ gMsgKanji966DTex,
+ gMsgKanji966ETex,
+ gMsgKanji966FTex,
+ gMsgKanji9670Tex,
+ gMsgKanji9671Tex,
+ gMsgKanji9672Tex,
+ gMsgKanji9673Tex,
+ gMsgKanji9674Tex,
+ gMsgKanji9675Tex,
+ gMsgKanji9676Tex,
+ gMsgKanji9677Tex,
+ gMsgKanji9678Tex,
+ gMsgKanji9679Tex,
+ gMsgKanji967ATex,
+ gMsgKanji967BTex,
+ gMsgKanji967CTex,
+ gMsgKanji967DTex,
+ gMsgKanji967ETex,
+ gMsgKanji9680Tex,
+ gMsgKanji9681Tex,
+ gMsgKanji9682Tex,
+ gMsgKanji9683Tex,
+ gMsgKanji9684Tex,
+ gMsgKanji9685Tex,
+ gMsgKanji9686Tex,
+ gMsgKanji9687Tex,
+ gMsgKanji9688Tex,
+ gMsgKanji9689Tex,
+ gMsgKanji968ATex,
+ gMsgKanji968BTex,
+ gMsgKanji968CTex,
+ gMsgKanji968DTex,
+ gMsgKanji968ETex,
+ gMsgKanji968FTex,
+ gMsgKanji9690Tex,
+ gMsgKanji9691Tex,
+ gMsgKanji9692Tex,
+ gMsgKanji9693Tex,
+ gMsgKanji9694Tex,
+ gMsgKanji9695Tex,
+ gMsgKanji9696Tex,
+ gMsgKanji9697Tex,
+ gMsgKanji9698Tex,
+ gMsgKanji9699Tex,
+ gMsgKanji969ATex,
+ gMsgKanji969BTex,
+ gMsgKanji969CTex,
+ gMsgKanji969DTex,
+ gMsgKanji969ETex,
+ gMsgKanji969FTex,
+ gMsgKanji96A0Tex,
+ gMsgKanji96A1Tex,
+ gMsgKanji96A2Tex,
+ gMsgKanji96A3Tex,
+ gMsgKanji96A4Tex,
+ gMsgKanji96A5Tex,
+ gMsgKanji96A6Tex,
+ gMsgKanji96A7Tex,
+ gMsgKanji96A8Tex,
+ gMsgKanji96A9Tex,
+ gMsgKanji96AATex,
+ gMsgKanji96ABTex,
+ gMsgKanji96ACTex,
+ gMsgKanji96ADTex,
+ gMsgKanji96AETex,
+ gMsgKanji96AFTex,
+ gMsgKanji96B0Tex,
+ gMsgKanji96B1Tex,
+ gMsgKanji96B2Tex,
+ gMsgKanji96B3Tex,
+ gMsgKanji96B4Tex,
+ gMsgKanji96B5Tex,
+ gMsgKanji96B6Tex,
+ gMsgKanji96B7Tex,
+ gMsgKanji96B8Tex,
+ gMsgKanji96B9Tex,
+ gMsgKanji96BATex,
+ gMsgKanji96BBTex,
+ gMsgKanji96BCTex,
+ gMsgKanji96BDTex,
+ gMsgKanji96BETex,
+ gMsgKanji96BFTex,
+ gMsgKanji96C0Tex,
+ gMsgKanji96C1Tex,
+ gMsgKanji96C2Tex,
+ gMsgKanji96C3Tex,
+ gMsgKanji96C4Tex,
+ gMsgKanji96C5Tex,
+ gMsgKanji96C6Tex,
+ gMsgKanji96C7Tex,
+ gMsgKanji96C8Tex,
+ gMsgKanji96C9Tex,
+ gMsgKanji96CATex,
+ gMsgKanji96CBTex,
+ gMsgKanji96CCTex,
+ gMsgKanji96CDTex,
+ gMsgKanji96CETex,
+ gMsgKanji96CFTex,
+ gMsgKanji96D0Tex,
+ gMsgKanji96D1Tex,
+ gMsgKanji96D2Tex,
+ gMsgKanji96D3Tex,
+ gMsgKanji96D4Tex,
+ gMsgKanji96D5Tex,
+ gMsgKanji96D6Tex,
+ gMsgKanji96D7Tex,
+ gMsgKanji96D8Tex,
+ gMsgKanji96D9Tex,
+ gMsgKanji96DATex,
+ gMsgKanji96DBTex,
+ gMsgKanji96DCTex,
+ gMsgKanji96DDTex,
+ gMsgKanji96DETex,
+ gMsgKanji96DFTex,
+ gMsgKanji96E0Tex,
+ gMsgKanji96E1Tex,
+ gMsgKanji96E2Tex,
+ gMsgKanji96E3Tex,
+ gMsgKanji96E4Tex,
+ gMsgKanji96E5Tex,
+ gMsgKanji96E6Tex,
+ gMsgKanji96E7Tex,
+ gMsgKanji96E8Tex,
+ gMsgKanji96E9Tex,
+ gMsgKanji96EATex,
+ gMsgKanji96EBTex,
+ gMsgKanji96ECTex,
+ gMsgKanji96EDTex,
+ gMsgKanji96EETex,
+ gMsgKanji96EFTex,
+ gMsgKanji96F0Tex,
+ gMsgKanji96F1Tex,
+ gMsgKanji96F2Tex,
+ gMsgKanji96F3Tex,
+ gMsgKanji96F4Tex,
+ gMsgKanji96F5Tex,
+ gMsgKanji96F6Tex,
+ gMsgKanji96F7Tex,
+ gMsgKanji96F8Tex,
+ gMsgKanji96F9Tex,
+ gMsgKanji96FATex,
+ gMsgKanji96FBTex,
+ gMsgKanji96FCTex,
+ gMsgKanji9740Tex,
+ gMsgKanji9741Tex,
+ gMsgKanji9742Tex,
+ gMsgKanji9743Tex,
+ gMsgKanji9744Tex,
+ gMsgKanji9745Tex,
+ gMsgKanji9746Tex,
+ gMsgKanji9747Tex,
+ gMsgKanji9748Tex,
+ gMsgKanji9749Tex,
+ gMsgKanji974ATex,
+ gMsgKanji974BTex,
+ gMsgKanji974CTex,
+ gMsgKanji974DTex,
+ gMsgKanji974ETex,
+ gMsgKanji974FTex,
+ gMsgKanji9750Tex,
+ gMsgKanji9751Tex,
+ gMsgKanji9752Tex,
+ gMsgKanji9753Tex,
+ gMsgKanji9754Tex,
+ gMsgKanji9755Tex,
+ gMsgKanji9756Tex,
+ gMsgKanji9757Tex,
+ gMsgKanji9758Tex,
+ gMsgKanji9759Tex,
+ gMsgKanji975ATex,
+ gMsgKanji975BTex,
+ gMsgKanji975CTex,
+ gMsgKanji975DTex,
+ gMsgKanji975ETex,
+ gMsgKanji975FTex,
+ gMsgKanji9760Tex,
+ gMsgKanji9761Tex,
+ gMsgKanji9762Tex,
+ gMsgKanji9763Tex,
+ gMsgKanji9764Tex,
+ gMsgKanji9765Tex,
+ gMsgKanji9766Tex,
+ gMsgKanji9767Tex,
+ gMsgKanji9768Tex,
+ gMsgKanji9769Tex,
+ gMsgKanji976ATex,
+ gMsgKanji976BTex,
+ gMsgKanji976CTex,
+ gMsgKanji976DTex,
+ gMsgKanji976ETex,
+ gMsgKanji976FTex,
+ gMsgKanji9770Tex,
+ gMsgKanji9771Tex,
+ gMsgKanji9772Tex,
+ gMsgKanji9773Tex,
+ gMsgKanji9774Tex,
+ gMsgKanji9775Tex,
+ gMsgKanji9776Tex,
+ gMsgKanji9777Tex,
+ gMsgKanji9778Tex,
+ gMsgKanji9779Tex,
+ gMsgKanji977ATex,
+ gMsgKanji977BTex,
+ gMsgKanji977CTex,
+ gMsgKanji977DTex,
+ gMsgKanji977ETex,
+ gMsgKanji9780Tex,
+ gMsgKanji9781Tex,
+ gMsgKanji9782Tex,
+ gMsgKanji9783Tex,
+ gMsgKanji9784Tex,
+ gMsgKanji9785Tex,
+ gMsgKanji9786Tex,
+ gMsgKanji9787Tex,
+ gMsgKanji9788Tex,
+ gMsgKanji9789Tex,
+ gMsgKanji978ATex,
+ gMsgKanji978BTex,
+ gMsgKanji978CTex,
+ gMsgKanji978DTex,
+ gMsgKanji978ETex,
+ gMsgKanji978FTex,
+ gMsgKanji9790Tex,
+ gMsgKanji9791Tex,
+ gMsgKanji9792Tex,
+ gMsgKanji9793Tex,
+ gMsgKanji9794Tex,
+ gMsgKanji9795Tex,
+ gMsgKanji9796Tex,
+ gMsgKanji9797Tex,
+ gMsgKanji9798Tex,
+ gMsgKanji9799Tex,
+ gMsgKanji979ATex,
+ gMsgKanji979BTex,
+ gMsgKanji979CTex,
+ gMsgKanji979DTex,
+ gMsgKanji979ETex,
+ gMsgKanji979FTex,
+ gMsgKanji97A0Tex,
+ gMsgKanji97A1Tex,
+ gMsgKanji97A2Tex,
+ gMsgKanji97A3Tex,
+ gMsgKanji97A4Tex,
+ gMsgKanji97A5Tex,
+ gMsgKanji97A6Tex,
+ gMsgKanji97A7Tex,
+ gMsgKanji97A8Tex,
+ gMsgKanji97A9Tex,
+ gMsgKanji97AATex,
+ gMsgKanji97ABTex,
+ gMsgKanji97ACTex,
+ gMsgKanji97ADTex,
+ gMsgKanji97AETex,
+ gMsgKanji97AFTex,
+ gMsgKanji97B0Tex,
+ gMsgKanji97B1Tex,
+ gMsgKanji97B2Tex,
+ gMsgKanji97B3Tex,
+ gMsgKanji97B4Tex,
+ gMsgKanji97B5Tex,
+ gMsgKanji97B6Tex,
+ gMsgKanji97B7Tex,
+ gMsgKanji97B8Tex,
+ gMsgKanji97B9Tex,
+ gMsgKanji97BATex,
+ gMsgKanji97BBTex,
+ gMsgKanji97BCTex,
+ gMsgKanji97BDTex,
+ gMsgKanji97BETex,
+ gMsgKanji97BFTex,
+ gMsgKanji97C0Tex,
+ gMsgKanji97C1Tex,
+ gMsgKanji97C2Tex,
+ gMsgKanji97C3Tex,
+ gMsgKanji97C4Tex,
+ gMsgKanji97C5Tex,
+ gMsgKanji97C6Tex,
+ gMsgKanji97C7Tex,
+ gMsgKanji97C8Tex,
+ gMsgKanji97C9Tex,
+ gMsgKanji97CATex,
+ gMsgKanji97CBTex,
+ gMsgKanji97CCTex,
+ gMsgKanji97CDTex,
+ gMsgKanji97CETex,
+ gMsgKanji97CFTex,
+ gMsgKanji97D0Tex,
+ gMsgKanji97D1Tex,
+ gMsgKanji97D2Tex,
+ gMsgKanji97D3Tex,
+ gMsgKanji97D4Tex,
+ gMsgKanji97D5Tex,
+ gMsgKanji97D6Tex,
+ gMsgKanji97D7Tex,
+ gMsgKanji97D8Tex,
+ gMsgKanji97D9Tex,
+ gMsgKanji97DATex,
+ gMsgKanji97DBTex,
+ gMsgKanji97DCTex,
+ gMsgKanji97DDTex,
+ gMsgKanji97DETex,
+ gMsgKanji97DFTex,
+ gMsgKanji97E0Tex,
+ gMsgKanji97E1Tex,
+ gMsgKanji97E2Tex,
+ gMsgKanji97E3Tex,
+ gMsgKanji97E4Tex,
+ gMsgKanji97E5Tex,
+ gMsgKanji97E6Tex,
+ gMsgKanji97E7Tex,
+ gMsgKanji97E8Tex,
+ gMsgKanji97E9Tex,
+ gMsgKanji97EATex,
+ gMsgKanji97EBTex,
+ gMsgKanji97ECTex,
+ gMsgKanji97EDTex,
+ gMsgKanji97EETex,
+ gMsgKanji97EFTex,
+ gMsgKanji97F0Tex,
+ gMsgKanji97F1Tex,
+ gMsgKanji97F2Tex,
+ gMsgKanji97F3Tex,
+ gMsgKanji97F4Tex,
+ gMsgKanji97F5Tex,
+ gMsgKanji97F6Tex,
+ gMsgKanji97F7Tex,
+ gMsgKanji97F8Tex,
+ gMsgKanji97F9Tex,
+ gMsgKanji97FATex,
+ gMsgKanji97FBTex,
+ gMsgKanji97FCTex,
+ gMsgKanji9840Tex,
+ gMsgKanji9841Tex,
+ gMsgKanji9842Tex,
+ gMsgKanji9843Tex,
+ gMsgKanji9844Tex,
+ gMsgKanji9845Tex,
+ gMsgKanji9846Tex,
+ gMsgKanji9847Tex,
+ gMsgKanji9848Tex,
+ gMsgKanji9849Tex,
+ gMsgKanji984ATex,
+ gMsgKanji984BTex,
+ gMsgKanji984CTex,
+ gMsgKanji984DTex,
+ gMsgKanji984ETex,
+ gMsgKanji984FTex,
+ gMsgKanji9850Tex,
+ gMsgKanji9851Tex,
+ gMsgKanji9852Tex,
+ gMsgKanji9853Tex,
+ gMsgKanji9854Tex,
+ gMsgKanji9855Tex,
+ gMsgKanji9856Tex,
+ gMsgKanji9857Tex,
+ gMsgKanji9858Tex,
+ gMsgKanji9859Tex,
+ gMsgKanji985ATex,
+ gMsgKanji985BTex,
+ gMsgKanji985CTex,
+ gMsgKanji985DTex,
+ gMsgKanji985ETex,
+ gMsgKanji985FTex,
+ gMsgKanji9860Tex,
+ gMsgKanji9861Tex,
+ gMsgKanji9862Tex,
+ gMsgKanji9863Tex,
+ gMsgKanji9864Tex,
+ gMsgKanji9865Tex,
+ gMsgKanji9866Tex,
+ gMsgKanji9867Tex,
+ gMsgKanji9868Tex,
+ gMsgKanji9869Tex,
+ gMsgKanji986ATex,
+ gMsgKanji986BTex,
+ gMsgKanji986CTex,
+ gMsgKanji986DTex,
+ gMsgKanji986ETex,
+ gMsgKanji986FTex,
+ gMsgKanji9870Tex,
+ gMsgKanji9871Tex,
+ gMsgKanji9872Tex,
+ gMsgKanji9873EmptyTex,
+ gMsgKanji9874EmptyTex,
+ gMsgKanji9875EmptyTex,
+ gMsgKanji9876EmptyTex,
+ gMsgKanji9877EmptyTex,
+ gMsgKanji9878EmptyTex,
+ gMsgKanji9879EmptyTex,
+ gMsgKanji987AEmptyTex,
+ gMsgKanji987BEmptyTex,
+ gMsgKanji987CEmptyTex,
+ gMsgKanji987DEmptyTex,
+ gMsgKanji987EEmptyTex,
+ gMsgKanji9880EmptyTex,
+ gMsgKanji9881EmptyTex,
+ gMsgKanji9882EmptyTex,
+ gMsgKanji9883EmptyTex,
+ gMsgKanji9884EmptyTex,
+ gMsgKanji9885EmptyTex,
+ gMsgKanji9886EmptyTex,
+ gMsgKanji9887EmptyTex,
+ gMsgKanji9888EmptyTex,
+ gMsgKanji9889EmptyTex,
+ gMsgKanji988AEmptyTex,
+ gMsgKanji988BEmptyTex,
+ gMsgKanji988CEmptyTex,
+ gMsgKanji988DEmptyTex,
+ gMsgKanji988EEmptyTex,
+ gMsgKanji988FEmptyTex,
+ gMsgKanji9890EmptyTex,
+ gMsgKanji9891EmptyTex,
+ gMsgKanji9892EmptyTex,
+ gMsgKanji9893EmptyTex,
+ gMsgKanji9894EmptyTex,
+ gMsgKanji9895EmptyTex,
+ gMsgKanji9896EmptyTex,
+ gMsgKanji9897EmptyTex,
+ gMsgKanji9898EmptyTex,
+ gMsgKanji9899EmptyTex,
+ gMsgKanji989AEmptyTex,
+ gMsgKanji989BEmptyTex,
+ gMsgKanji989CEmptyTex,
+ gMsgKanji989DEmptyTex,
+ gMsgKanji989EEmptyTex,
+ gMsgKanji989FEmptyTex,
+ gMsgKanji98A0EmptyTex,
+ gMsgKanji98A1EmptyTex,
+ gMsgKanji98A2EmptyTex,
+ gMsgKanji98A3EmptyTex,
+ gMsgKanji98A4EmptyTex,
+ gMsgKanji98A5EmptyTex,
+ gMsgKanji98A6EmptyTex,
+ gMsgKanji98A7EmptyTex,
+ gMsgKanji98A8EmptyTex,
+ gMsgKanji98A9EmptyTex,
+ gMsgKanji98AAEmptyTex,
+ gMsgKanji98ABEmptyTex,
+ gMsgKanji98ACEmptyTex,
+ gMsgKanji98ADEmptyTex,
+ gMsgKanji98AEEmptyTex,
+ gMsgKanji98AFEmptyTex,
+ gMsgKanji98B0EmptyTex,
+ gMsgKanji98B1EmptyTex,
+ gMsgKanji98B2EmptyTex,
+ gMsgKanji98B3EmptyTex,
+ gMsgKanji98B4EmptyTex,
+ gMsgKanji98B5EmptyTex,
+ gMsgKanji98B6EmptyTex,
+ gMsgKanji98B7EmptyTex,
+ gMsgKanji98B8EmptyTex,
+ gMsgKanji98B9EmptyTex,
+ gMsgKanji98BAEmptyTex,
+ gMsgKanji98BBEmptyTex,
+ gMsgKanji98BCEmptyTex,
+ gMsgKanji98BDEmptyTex,
+ gMsgKanji98BEEmptyTex,
+ gMsgKanji98BFEmptyTex,
+ gMsgKanji98C0EmptyTex,
+ gMsgKanji98C1EmptyTex,
+ gMsgKanji98C2EmptyTex,
+ gMsgKanji98C3EmptyTex,
+ gMsgKanji98C4EmptyTex,
+ gMsgKanji98C5EmptyTex,
+ gMsgKanji98C6EmptyTex,
+ gMsgKanji98C7EmptyTex,
+ gMsgKanji98C8EmptyTex,
+ gMsgKanji98C9EmptyTex,
+ gMsgKanji98CAEmptyTex,
+ gMsgKanji98CBEmptyTex,
+ gMsgKanji98CCEmptyTex,
+ gMsgKanji98CDEmptyTex,
+ gMsgKanji98CEEmptyTex,
+ gMsgKanji98CFEmptyTex,
+ gMsgKanji98D0EmptyTex,
+ gMsgKanji98D1EmptyTex,
+ gMsgKanji98D2EmptyTex,
+ gMsgKanji98D3EmptyTex,
+ gMsgKanji98D4EmptyTex,
+ gMsgKanji98D5EmptyTex,
+ gMsgKanji98D6EmptyTex,
+ gMsgKanji98D7EmptyTex,
+ gMsgKanji98D8EmptyTex,
+ gMsgKanji98D9EmptyTex,
+ gMsgKanji98DAEmptyTex,
+ gMsgKanji98DBEmptyTex,
+ gMsgKanji98DCEmptyTex,
+ gMsgKanji98DDEmptyTex,
+ gMsgKanji98DEEmptyTex,
+ gMsgKanji98DFEmptyTex,
+ gMsgKanji98E0EmptyTex,
+ gMsgKanji98E1EmptyTex,
+ gMsgKanji98E2EmptyTex,
+ gMsgKanji98E3EmptyTex,
+ gMsgKanji98E4EmptyTex,
+ gMsgKanji98E5EmptyTex,
+ gMsgKanji98E6EmptyTex,
+ gMsgKanji98E7EmptyTex,
+ gMsgKanji98E8EmptyTex,
+ gMsgKanji98E9EmptyTex,
+ gMsgKanji98EAEmptyTex,
+ gMsgKanji98EBEmptyTex,
+ gMsgKanji98ECEmptyTex,
+ gMsgKanji98EDEmptyTex,
+ gMsgKanji98EEEmptyTex,
+ gMsgKanji98EFEmptyTex,
+ gMsgKanji98F0EmptyTex,
+ gMsgKanji98F1EmptyTex,
+ gMsgKanji98F2EmptyTex,
+ gMsgKanji98F3EmptyTex,
+ gMsgKanji98F4EmptyTex,
+ gMsgKanji98F5EmptyTex,
+ gMsgKanji98F6EmptyTex,
+ gMsgKanji98F7EmptyTex,
+ gMsgKanji98F8EmptyTex,
+ gMsgKanji98F9EmptyTex,
+ gMsgKanji98FAEmptyTex,
+ gMsgKanji98FBEmptyTex,
+ gMsgKanji98FCEmptyTex,
+};
+
const char* msgStaticTbl[] =
{
gDefaultMessageBackgroundTex,
@@ -161,7 +4139,14 @@ const char* msgStaticTbl[] =
gMessageArrowTex
};
-void func_8006EE50(Font* font, u16 arg1, u16 arg2) {
+void func_8006EE50(Font* font, u16 character, u16 codePointIndex) {
+ // #region SOH [NTSC]
+ // DmaMgr_RequestSync(&font->charTexBuf[codePointIndex], _kanjiSegmentStart + Kanji_OffsetFromShiftJIS(character), 0x80);
+ s32 charIndex = Kanji_OffsetFromShiftJIS(character);
+ charIndex /= FONT_CHAR_TEX_SIZE;
+ if (charIndex < ARRAY_COUNT(kanjiFontTbl))
+ memcpy(&font->charTexBuf[codePointIndex], kanjiFontTbl[charIndex], strlen(kanjiFontTbl[charIndex]) + 1);
+ // #endregion
}
/**
@@ -228,3 +4213,46 @@ void Font_LoadOrderedFont(Font* font) {
}
}
}
+
+// #region SOH [NTSC]
+extern MessageTableEntry* sJpnMessageEntryTablePtr;
+
+void Font_LoadOrderedFontNTSC(Font* font) {
+ s32 len;
+ s32 size;
+ s32 codePointIndex;
+ s32 fontBufIndex;
+ s32 offset;
+
+ // font->msgOffset = _message_0xFFFC_jpn - (const char*)_jpn_message_data_staticSegmentStart;
+ // size = font->msgLength = _message_0xFFFD_jpn - _message_0xFFFC_jpn;
+ // len = (u32)size / 2;
+ // DmaMgr_RequestSync(font->msgBufWide, (uintptr_t)_jpn_message_data_staticSegmentRomStart + font->msgOffset, size);
+ MessageTableEntry* msgEntry = sJpnMessageEntryTablePtr;
+
+ while (msgEntry->textId != 0xFFFC) {
+ msgEntry++;
+ }
+
+ size = msgEntry->msgSize;
+ len = (u32)size / 2;
+ memcpy(font->msgBuf, msgEntry->segment, size);
+
+
+ fontBufIndex = 0;
+ for (codePointIndex = 0; font->msgBufWide[codePointIndex] != 0x8170; codePointIndex++) {
+ if (len < codePointIndex) {
+ osSyncPrintf("ERROR!! エラー!!! error───!!!!\n");
+ break;
+ }
+
+ if (font->msgBufWide[codePointIndex] != 0xA) {
+ offset = Kanji_OffsetFromShiftJIS(font->msgBufWide[codePointIndex]);
+ offset /= FONT_CHAR_TEX_SIZE;
+ memcpy(&font->fontBuf[fontBufIndex * 8], kanjiFontTbl[offset], strlen(kanjiFontTbl[offset]) + 1);
+ // DmaMgr_RequestSync(&font->fontBuf[fontBufIndex * 8], (uintptr_t)_kanjiSegmentStart + offset, FONT_CHAR_TEX_SIZE);
+ fontBufIndex += FONT_CHAR_TEX_SIZE / 8;
+ }
+ }
+}
+// #endregion
diff --git a/soh/src/code/z_kanji.c b/soh/src/code/z_kanji.c
new file mode 100644
index 000000000..cd818a9a1
--- /dev/null
+++ b/soh/src/code/z_kanji.c
@@ -0,0 +1,127 @@
+#include "global.h"
+#include "macros.h"
+
+u16 T_800AF828_ne0[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D,
+ 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B,
+ 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029,
+ 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
+ 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053,
+ 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061,
+ 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072,
+ 0x0073, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098,
+ 0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD,
+ 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3,
+ 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB,
+ 0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9,
+ 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105,
+ 0x0106, 0x0107, 0x0108, 0x0109, 0x010A, 0x010B, 0x010C, 0x010D, 0x010E, 0x010F, 0x0110, 0x0111, 0x0112, 0x0113,
+ 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120, 0x0121,
+ 0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0124, 0x0125,
+ 0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133,
+ 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141,
+ 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F,
+ 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015A, 0x015B, 0x015C, 0x015D,
+ 0x015E, 0x015F, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016A, 0x016B,
+ 0x016C, 0x016D, 0x016E, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017A, 0x017B, 0x017C, 0x017D, 0x017E, 0x017F,
+ 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018A, 0x018B, 0x018C, 0x018D,
+ 0x018E, 0x018F, 0x0190, 0x0191, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0193,
+ 0x0194, 0x0195, 0x0196, 0x0197, 0x0198, 0x0199, 0x019A, 0x019B, 0x019C, 0x019D, 0x019E, 0x019F, 0x01A0, 0x01A1,
+ 0x01A2, 0x01A3, 0x01A4, 0x01A5, 0x01A6, 0x01A7, 0x01A8, 0x01A9, 0x01AA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4,
+ 0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA, 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2,
+ 0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA, 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01CC, 0x01CD, 0x01CE, 0x01CF,
+ 0x01D0, 0x01D1, 0x01D2, 0x01D3, 0x01D4, 0x01D5, 0x01D6, 0x01D7, 0x01D8, 0x01D9, 0x01DA, 0x01DB, 0x01DC, 0x01DD,
+ 0x01DE, 0x01DF, 0x01E0, 0x01E1, 0x01E2, 0x01E3, 0x01E4, 0x01E5, 0x01E6, 0x01E7, 0x01E8, 0x01E9, 0x01EA, 0x01EB,
+ 0x01EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x01ED, 0x01EE, 0x01EF, 0x01F0, 0x01F1, 0x01F2, 0x01F3, 0x01F4, 0x01F5, 0x01F6, 0x01F7, 0x01F8, 0x01F9, 0x01FA,
+ 0x01FB, 0x01FC, 0x01FD, 0x01FE, 0x01FF, 0x0200, 0x0201, 0x0202, 0x0203, 0x0204, 0x0205, 0x0206, 0x0207, 0x0208,
+ 0x0209, 0x020A, 0x020B, 0x020C, 0x020D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x020E, 0x020F, 0x0210, 0x0211,
+ 0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D, 0x021E, 0x021F,
+ 0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223,
+ 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231,
+ 0x0232, 0x0233, 0x0234, 0x0235, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0236, 0x0237, 0x0238, 0x0239, 0x023A, 0x023B, 0x023C, 0x023D, 0x023E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x023F, 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246,
+ 0x0247, 0x0248, 0x0000, 0x0000, 0x0000, 0x0000, 0x0249, 0x024A, 0x024B, 0x024C, 0x024D, 0x024E, 0x024F, 0x0250,
+ 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0257, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0258, 0x0259,
+ 0x025A, 0x025B, 0x025C, 0x025D, 0x025E, 0x025F, 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0267, 0x0268, 0x0269, 0x026A,
+ 0x026B, 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278,
+ 0x0279, 0x027A, 0x027B, 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D,
+ 0x028E, 0x028F, 0x0290, 0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B,
+ 0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02A0, 0x02A1, 0x02A2, 0x02A3, 0x02A4, 0x02A5,
+ 0x02A6, 0x02A7, 0x02A8, 0x02A9, 0x02AA, 0x02AB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x02AC, 0x02AD, 0x02AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02AF, 0x02B0, 0x02B1, 0x02B2,
+ 0x02B3, 0x02B4, 0x02B5, 0x02B6, 0x02B7, 0x02B8, 0x02B9, 0x02BA, 0x02BB, 0x02BC, 0x02BD, 0x02BE, 0x02BF, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5,
+ 0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF, 0x02D0, 0x02D1, 0x02D2, 0x02D3,
+ 0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x02D9, 0x02DA, 0x02DB, 0x02DC, 0x02DD, 0x02DE, 0x02DF, 0x02E0, 0x02E1, 0x02E2,
+ 0x02E3, 0x02E4, 0x02E5, 0x02E6, 0x02E7, 0x02E8, 0x02E9, 0x02EA, 0x02EB, 0x02EC, 0x02ED, 0x02EE, 0x02EF, 0x02F0,
+ 0x02F1, 0x02F2, 0x02F3, 0x02F4, 0x02F5, 0x02F6, 0x02F7, 0x02F8, 0x02F9, 0x02FA, 0x02FB, 0x02FC, 0x02FD, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02FE, 0x02FF, 0x0300, 0x0301, 0x0302, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0303, 0x0304, 0x0305, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0307, 0x0308, 0x0309,
+};
+
+// Handwritten Function
+s32 Kanji_OffsetFromShiftJIS(u32 arg0) {
+ s32 var_a3;
+
+ if (arg0 >= 0x8800) {
+ var_a3 = (arg0 & 0xFF) - 0x40;
+ if (var_a3 >= 0x40) {
+ var_a3--;
+ }
+ return (var_a3 + 0x30A + (0xBC * ((arg0 >> 8) - 0x88))) << 7;
+ }
+ var_a3 = (arg0 & 0xFF) - 0x40;
+ if (var_a3 >= 0x40) {
+ var_a3--;
+ }
+
+ // #Region SOH
+ int index = var_a3 + (0xBC * ((arg0 >> 8) - 0x81));
+ if (index < 0 || index >= ARRAY_COUNT(T_800AF828_ne0)) {
+ // Invalid font char found
+ // @bug: Some characters e.g. 0x0222 can reach here incorrectly
+ return 0;
+ }
+ // #End region
+
+ return T_800AF828_ne0[var_a3 + (0xBC * ((arg0 >> 8) - 0x81))] << 7;
+} \ No newline at end of file
diff --git a/soh/src/code/z_message_PAL.c b/soh/src/code/z_message_PAL.c
index e6b944a73..4ab76a93b 100644
--- a/soh/src/code/z_message_PAL.c
+++ b/soh/src/code/z_message_PAL.c
@@ -12,6 +12,14 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/OTRGlobals.h"
+#include "soh/SaveManager.h"
+#include "soh/ResourceManagerHelpers.h"
+
+// #region SOH [NTSC] - Allows custom messages to work on japanese
+static bool sDisplayNextMessageAsEnglish = false;
+static u8 sLastLanguage = LANGUAGE_ENG;
+static u16 sTextBoxNum = 0;
+// #endregion
s16 sTextFade = false; // original name: key_off_flag ?
@@ -40,6 +48,7 @@ u16 sOcarinaSongBitFlags = 0; // ocarina bit flags
MessageTableEntry* sNesMessageEntryTablePtr = NULL;
MessageTableEntry* sGerMessageEntryTablePtr = NULL;
MessageTableEntry* sFraMessageEntryTablePtr = NULL;
+MessageTableEntry* sJpnMessageEntryTablePtr = NULL;
MessageTableEntry* sStaffMessageEntryTablePtr = NULL;
char* _message_0xFFFC_nes;
@@ -283,6 +292,45 @@ void Message_GrowTextbox(MessageContext* msgCtx) {
R_TEXTBOX_X = (R_TEXTBOX_X_TARGET + R_TEXTBOX_WIDTH_TARGET) - (R_TEXTBOX_WIDTH / 2);
}
+// Taken from decomped N64 1.0 z_message https://decomp.me/scratch/462bn
+void Message_FindMessageJPN(PlayState* play, u16 textId) {
+ const char* foundSeg;
+ const char* nextSeg;
+ const char* seg;
+ Font* font = &play->msgCtx.font;
+ MessageTableEntry* messageTableEntry = sJpnMessageEntryTablePtr;
+
+ seg = messageTableEntry->segment;
+
+ while (messageTableEntry->textId != 0xFFFF) {
+ if (messageTableEntry->textId == textId) {
+ foundSeg = messageTableEntry->segment;
+ font->charTexBuf[0] = messageTableEntry->typePos;
+ nextSeg = messageTableEntry->segment;
+ font->msgOffset = messageTableEntry->segment;
+ font->msgLength = messageTableEntry->msgSize;
+ // "Message found!!!"
+ osSyncPrintf(" メッセージが,見つかった!!! = %x "
+ "(data=%x) (data0=%x) (data1=%x) (data2=%x) (data3=%x)\n",
+ textId, font->msgOffset, font->msgLength, foundSeg, seg, nextSeg);
+ return;
+ }
+ messageTableEntry++;
+ }
+
+ // "Message not found!!!"
+ osSyncPrintf(" メッセージが,見つからなかった!!! = %x\n", textId);
+ messageTableEntry = sJpnMessageEntryTablePtr;
+
+ foundSeg = messageTableEntry->segment;
+ font->charTexBuf[0] = messageTableEntry->typePos;
+ messageTableEntry++;
+ nextSeg = messageTableEntry->segment;
+
+ font->msgOffset = foundSeg - seg;
+ font->msgLength = nextSeg - foundSeg;
+}
+
void Message_FindMessage(PlayState* play, u16 textId) {
const char* foundSeg;
const char* nextSeg;
@@ -290,13 +338,6 @@ void Message_FindMessage(PlayState* play, u16 textId) {
const char** languageSegmentTable;
Font* font;
const char* seg;
- u16 bufferId = textId;
- // Use the better owl message if better owl is enabled
- if (CVarGetInteger(CVAR_ENHANCEMENT("BetterOwl"), 0) != 0 && (bufferId == 0x2066 || bufferId == 0x607B ||
- bufferId == 0x10C2 || bufferId == 0x10C6 || bufferId == 0x206A))
- {
- bufferId = 0x71B3;
- }
if (gSaveContext.language == LANGUAGE_GER)
messageTableEntry = sGerMessageEntryTablePtr;
@@ -312,7 +353,7 @@ void Message_FindMessage(PlayState* play, u16 textId) {
while (messageTableEntry->textId != 0xFFFF) {
font = &play->msgCtx.font;
- if (messageTableEntry->textId == bufferId) {
+ if (messageTableEntry->textId == textId) {
foundSeg = messageTableEntry->segment;
font->charTexBuf[0] = messageTableEntry->typePos;
@@ -323,14 +364,14 @@ void Message_FindMessage(PlayState* play, u16 textId) {
// "Message found!!!"
osSyncPrintf(" メッセージが,見つかった!!! = %x "
"(data=%x) (data0=%x) (data1=%x) (data2=%x) (data3=%x)\n",
- bufferId, font->msgOffset, font->msgLength, foundSeg, seg, nextSeg);
+ textId, font->msgOffset, font->msgLength, foundSeg, seg, nextSeg);
return;
}
messageTableEntry++;
}
// "Message not found!!!"
- osSyncPrintf(" メッセージが,見つからなかった!!! = %x\n", bufferId);
+ osSyncPrintf(" メッセージが,見つからなかった!!! = %x\n", textId);
font = &play->msgCtx.font;
messageTableEntry = sNesMessageEntryTablePtr;
@@ -899,6 +940,345 @@ void Message_HandleOcarina(PlayState* play) {
}
}
+// Taken from decomped N64 1.0 z_message https://decomp.me/scratch/462bn
+void Message_DrawTextJPN(PlayState* play, Gfx** gfxP) {
+ MessageContext* msgCtx = &play->msgCtx;
+ Font* font = &play->msgCtx.font;
+ u16 character;
+ u16 j;
+ u16 i;
+ u16 charTexIdx;
+ Gfx* gfx = *gfxP;
+ int gTextSpeed, gSlowTextSpeed;
+
+ play->msgCtx.textPosX = R_TEXT_INIT_XPOS;
+ play->msgCtx.textPosY = R_TEXT_INIT_YPOS;
+
+ if (msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW) {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0;
+ } else {
+ msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255;
+ }
+
+ msgCtx->unk_E3D0 = 0;
+ charTexIdx = 0;
+
+ gTextSpeed = CVarGetInteger(CVAR_ENHANCEMENT("TextSpeed"), 1);
+ gSlowTextSpeed = CVarGetInteger(CVAR_ENHANCEMENT("SlowTextSpeed"), gTextSpeed);
+
+ for (i = 0; i < msgCtx->textDrawPos; i++) {
+ character = msgCtx->msgBufDecodedWide[i];
+
+ switch (character) {
+ case MESSAGE_NEWLINE_JPN:
+ msgCtx->textPosY += R_TEXT_LINE_SPACING;
+ msgCtx->textPosX = R_TEXT_INIT_XPOS;
+ if (msgCtx->choiceNum == 1) {
+ msgCtx->textPosX += 32;
+ }
+ if (msgCtx->choiceNum == 2) {
+ msgCtx->textPosX += 32;
+ }
+ break;
+ case MESSAGE_COLOR_JPN:
+ Message_SetTextColor(msgCtx, msgCtx->msgBufDecodedWide[++i]);
+ break;
+ case MESSAGE_SPACE_JPN:
+ msgCtx->textPosX += CVarGetInteger(CVAR_ENHANCEMENT("TextSpacing"), 6);
+ break;
+ case MESSAGE_BOX_BREAK_JPN:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ if (!sTextboxSkipped) {
+ Audio_PlaySoundGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT;
+ Font_LoadMessageBoxIcon(&play->msgCtx.font, TEXTBOX_ICON_TRIANGLE);
+ } else {
+ msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
+ msgCtx->textUnskippable = false;
+ msgCtx->msgBufPos++;
+ }
+ }
+ *gfxP = gfx;
+ return;
+ case MESSAGE_SHIFT_JPN:
+ msgCtx->textPosX += msgCtx->msgBufDecodedWide[++i];
+ break;
+ case MESSAGE_TEXTID_JPN:
+ // #region SOH [General] Fixes softlock for higher text speeds
+ if (gTextSpeed > 1) {
+ msgCtx->textDrawPos = i + 1;
+ }
+ // #endregion
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_HAS_NEXT;
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySoundGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ Font_LoadMessageBoxIcon(&play->msgCtx.font, TEXTBOX_ICON_TRIANGLE);
+ }
+ *gfxP = gfx;
+ return;
+ case MESSAGE_QUICKTEXT_ENABLE_JPN:
+ if ((i + 1 == msgCtx->textDrawPos || (gTextSpeed > 1 && i + gTextSpeed >= msgCtx->textDrawPos)) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING ||
+ (msgCtx->msgMode >= MSGMODE_OCARINA_STARTING &&
+ msgCtx->msgMode < MSGMODE_SCARECROW_LONG_RECORDING_START))) {
+ j = i;
+ while (true) {
+ character = msgCtx->msgBufDecodedWide[j];
+ if ((character != MESSAGE_QUICKTEXT_DISABLE_JPN) && (character != MESSAGE_PERSISTENT_JPN) &&
+ (character != MESSAGE_EVENT_JPN) && (character != MESSAGE_BOX_BREAK_DELAYED_JPN) &&
+ (character != MESSAGE_AWAIT_BUTTON_PRESS_JPN) && (character != MESSAGE_BOX_BREAK_JPN) &&
+ (character != MESSAGE_END_JPN)) {
+ j++;
+ } else {
+ break;
+ }
+ }
+ if (j > msgCtx->textDrawPos) {
+ i = j - 1;
+ msgCtx->textDrawPos = j;
+ }
+ }
+ /* fallthrough */
+ case MESSAGE_QUICKTEXT_DISABLE_JPN:
+ break;
+ case MESSAGE_AWAIT_BUTTON_PRESS_JPN:
+ if (i + 1 == msgCtx->textDrawPos) {
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_AWAIT_INPUT;
+ Font_LoadMessageBoxIcon(&play->msgCtx.font, TEXTBOX_ICON_TRIANGLE);
+ }
+ *gfxP = gfx;
+ return;
+ }
+ break;
+ case MESSAGE_BOX_BREAK_DELAYED_JPN:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->stateTimer = msgCtx->msgBufDecodedWide[++i];
+ msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK;
+ }
+ *gfxP = gfx;
+ return;
+ case MESSAGE_FADE2_JPN:
+ break;
+ case MESSAGE_SFX_JPN:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING && !sMessageHasSetSfx) {
+ sMessageHasSetSfx = true;
+ Audio_PlaySoundGeneral(msgCtx->msgBufDecodedWide[i + 1], &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ }
+ i++;
+ break;
+ case MESSAGE_ITEM_ICON_JPN:
+ i = Message_DrawItemIcon(play, msgCtx->msgBufDecodedWide[i + 1], &gfx, i);
+ break;
+ case MESSAGE_BACKGROUND_JPN:
+ // clang-format off
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { \
+ Audio_PlaySoundGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ }
+ // clang-format on
+ gDPPipeSync(gfx++);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(gfx++, 0, 0, sTextboxBackgroundBackPrimColors[msgCtx->textboxBackgroundBackColorIdx][0],
+ sTextboxBackgroundBackPrimColors[msgCtx->textboxBackgroundBackColorIdx][1],
+ sTextboxBackgroundBackPrimColors[msgCtx->textboxBackgroundBackColorIdx][2],
+ msgCtx->textColorAlpha);
+
+ gDPLoadTextureBlock_4b(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, G_IM_FMT_I, 96, 48, 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);
+ gSPTextureRectangle(
+ gfx++, (msgCtx->textPosX + 1) << 2,
+ (R_TEXTBOX_BG_YPOS + sTextboxBackgroundYOffsets[msgCtx->textboxBackgroundYOffsetIdx]) << 2,
+ (msgCtx->textPosX + 96 + 1) << 2,
+ (R_TEXTBOX_BG_YPOS + sTextboxBackgroundYOffsets[msgCtx->textboxBackgroundYOffsetIdx] + 48) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ gDPLoadTextureBlock_4b(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE + 0x900, G_IM_FMT_I, 96,
+ 48, 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);
+ gSPTextureRectangle(
+ gfx++, (msgCtx->textPosX + 96 + 1) << 2,
+ (R_TEXTBOX_BG_YPOS + sTextboxBackgroundYOffsets[msgCtx->textboxBackgroundYOffsetIdx]) << 2,
+ (msgCtx->textPosX + 96 + 1 + 96 + 1) << 2,
+ (R_TEXTBOX_BG_YPOS + sTextboxBackgroundYOffsets[msgCtx->textboxBackgroundYOffsetIdx] + 48) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, sTextboxBackgroundForePrimColors[msgCtx->textboxBackgroundForeColorIdx][0],
+ sTextboxBackgroundForePrimColors[msgCtx->textboxBackgroundForeColorIdx][1],
+ sTextboxBackgroundForePrimColors[msgCtx->textboxBackgroundForeColorIdx][2],
+ msgCtx->textColorAlpha);
+
+ gDPLoadTextureBlock_4b(gfx++, ((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE), G_IM_FMT_I, 96, 48, 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);
+ gSPTextureRectangle(gfx++, msgCtx->textPosX << 2, R_TEXTBOX_BG_YPOS << 2, (msgCtx->textPosX + 96) << 2,
+ (R_TEXTBOX_BG_YPOS + 48) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ gDPLoadTextureBlock_4b(gfx++, ((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE + 0x900), G_IM_FMT_I,
+ 96, 48, 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);
+ gSPTextureRectangle(gfx++, (msgCtx->textPosX + 96) << 2, R_TEXTBOX_BG_YPOS << 2,
+ (msgCtx->textPosX + 192) << 2, (R_TEXTBOX_BG_YPOS + 48) << 2, G_TX_RENDERTILE, 0, 0,
+ 1 << 10, 1 << 10);
+
+ gDPPipeSync(gfx++);
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+ msgCtx->textPosX += 32;
+ break;
+ case MESSAGE_TEXT_SPEED_JPN:
+ msgCtx->textDelay = msgCtx->msgBufDecodedWide[++i];
+ break;
+ case MESSAGE_UNSKIPPABLE_JPN:
+ msgCtx->textUnskippable = CVarGetInteger(CVAR_ENHANCEMENT("SkipText"), 0) != 1;
+ break;
+ case MESSAGE_TWO_CHOICE_JPN:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_2_CHOICE;
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->textId;
+ msgCtx->stateTimer = 4;
+ msgCtx->choiceIndex = 0;
+ if (CVarGetInteger(CVAR_ENHANCEMENT("BetterOwl"), 0)) {
+ if ((msgCtx->textId == 0x2066 || msgCtx->textId == 0x607B || msgCtx->textId == 0x10C2 ||
+ msgCtx->textId == 0x10C6 || msgCtx->textId == 0x206A)) {
+ msgCtx->choiceIndex = 1;
+ }
+ }
+ Font_LoadMessageBoxIcon(font, TEXTBOX_ICON_ARROW);
+ }
+ break;
+ case MESSAGE_THREE_CHOICE_JPN:
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_3_CHOICE;
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->choiceTextId = msgCtx->textId;
+ msgCtx->stateTimer = 4;
+ msgCtx->choiceIndex = 0;
+ Font_LoadMessageBoxIcon(font, TEXTBOX_ICON_ARROW);
+ }
+ break;
+ case MESSAGE_END_JPN:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_DEFAULT) {
+ Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_END, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ Font_LoadMessageBoxIcon(font, TEXTBOX_ICON_SQUARE);
+ if (play->csCtx.state == 0) {
+ Interface_SetDoAction(play, DO_ACTION_RETURN);
+ }
+ }
+ }
+ *gfxP = gfx;
+ return;
+ case MESSAGE_OCARINA_JPN:
+ // #region SOH [General] Fixes softlock for higher text speeds
+ if (gTextSpeed > 1) {
+ msgCtx->textDrawPos = i + 1;
+ }
+ // #endregion
+ if (i + 1 == msgCtx->textDrawPos) {
+ Message_HandleOcarina(play);
+ *gfxP = gfx;
+ return;
+ }
+ break;
+ case MESSAGE_FADE_JPN:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_FADING;
+ msgCtx->stateTimer = msgCtx->msgBufDecodedWide[++i];
+ Font_LoadMessageBoxIcon(font, TEXTBOX_ICON_SQUARE);
+ if (play->csCtx.state == 0) {
+ Interface_SetDoAction(play, DO_ACTION_RETURN);
+ }
+ }
+ *gfxP = gfx;
+ return;
+ case MESSAGE_PERSISTENT_JPN:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ Audio_PlaySoundGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_PERSISTENT;
+ }
+ *gfxP = gfx;
+ return;
+ case MESSAGE_EVENT_JPN:
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
+ msgCtx->msgMode = MSGMODE_TEXT_DONE;
+ msgCtx->textboxEndType = TEXTBOX_ENDTYPE_EVENT;
+ Font_LoadMessageBoxIcon(&play->msgCtx.font, TEXTBOX_ICON_TRIANGLE);
+ Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_END, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ }
+ *gfxP = gfx;
+ return;
+ default:
+ switch (character) {
+ case 0x8169:
+ case 0x8175:
+ msgCtx->textPosX -= 6;
+ break;
+ case 0x8145:
+ msgCtx->textPosX -= 3;
+ break;
+ case 0x8148:
+ case 0x8149:
+ case 0x814F:
+ case 0x8250:
+ msgCtx->textPosX -= 2;
+ break;
+ }
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING && i + 1 == msgCtx->textDrawPos &&
+ msgCtx->textDelayTimer == msgCtx->textDelay) {
+ Audio_PlaySoundGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ }
+ Message_DrawTextChar(play, &font->charTexBuf[charTexIdx], &gfx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+
+ switch (character) {
+ case 0x8144:
+ msgCtx->textPosX += 3;
+ break;
+ case 0x816A:
+ case 0x8176:
+ msgCtx->textPosX += 5;
+ break;
+ case 0x8141:
+ case 0x8142:
+ case 0x8168:
+ msgCtx->textPosX += 7;
+ break;
+ case 0x814F:
+ case 0x8194:
+ case 0x8196:
+ msgCtx->textPosX += 9;
+ break;
+ case 0x8145:
+ msgCtx->textPosX += 10;
+ break;
+ default:
+ msgCtx->textPosX += (s32)(16.0f * (R_TEXT_CHAR_SCALE / 100.0f));
+ break;
+ }
+ break;
+ }
+ }
+
+ if (msgCtx->textDelay == 0) {
+ msgCtx->textDrawPos = i + gTextSpeed;
+ if (msgCtx->textDrawPos > msgCtx->decodedTextLen) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen + 1;
+ }
+ } else if (msgCtx->textDelayTimer == 0) {
+ msgCtx->textDrawPos = i + 1;
+ msgCtx->textDelayTimer = msgCtx->textDelay;
+ } else if (msgCtx->textDelayTimer <= gSlowTextSpeed) {
+ msgCtx->textDelayTimer = 0;
+ } else {
+ msgCtx->textDelayTimer -= gSlowTextSpeed;
+ }
+ *gfxP = gfx;
+}
+
/**
* Draws the text contents of a textbox, up to the current point that has
* been scrolled to so far.
@@ -984,7 +1364,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
*gfxP = gfx;
return;
case MESSAGE_QUICKTEXT_ENABLE:
- if (i < msgCtx->textDrawPos && i + gTextSpeed >= msgCtx->textDrawPos && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING ||
+ if ((i + 1 == msgCtx->textDrawPos || (gTextSpeed > 1 && i + gTextSpeed >= msgCtx->textDrawPos)) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING ||
(msgCtx->msgMode >= MSGMODE_OCARINA_STARTING &&
msgCtx->msgMode < MSGMODE_SCARECROW_LONG_RECORDING_START))) {
j = i;
@@ -1124,6 +1504,12 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
msgCtx->choiceTextId = msgCtx->textId;
msgCtx->stateTimer = 4;
msgCtx->choiceIndex = 0;
+ if (CVarGetInteger(CVAR_ENHANCEMENT("BetterOwl"), 0)) {
+ if ((msgCtx->textId == 0x2066 || msgCtx->textId == 0x607B || msgCtx->textId == 0x10C2 ||
+ msgCtx->textId == 0x10C6 || msgCtx->textId == 0x206A)) {
+ msgCtx->choiceIndex = 1;
+ }
+ }
Font_LoadMessageBoxIcon(font, TEXTBOX_ICON_ARROW);
}
break;
@@ -1151,7 +1537,11 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
*gfxP = gfx;
return;
case MESSAGE_OCARINA:
- msgCtx->textDrawPos = i + 1;
+ // #region SOH [General] Fixes softlock for higher text speeds
+ if (gTextSpeed > 1) {
+ msgCtx->textDrawPos = i + 1;
+ }
+ // #endregion
if (i + 1 == msgCtx->textDrawPos) {
Message_HandleOcarina(play);
*gfxP = gfx;
@@ -1187,6 +1577,21 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
}
*gfxP = gfx;
return;
+ // #region SOH [NTSC] - support multiple file name languages
+ case MESSAGE_NAME:
+ if (ResourceMgr_GetGameRegion(0) == GAME_REGION_NTSC && gSaveContext.ship.filenameLanguage == NAME_LANGUAGE_NTSC_JPN) {
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING && i + 1 == msgCtx->textDrawPos &&
+ msgCtx->textDelayTimer == msgCtx->textDelay) {
+ Audio_PlaySoundGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
+ }
+ Message_DrawTextChar(play, &font->charTexBuf[charTexIdx], &gfx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+
+ msgCtx->textPosX += (s32)(16.0f * (R_TEXT_CHAR_SCALE / 100.0f));
+ break;
+ }
+ /* fallthrough */
+ // #endregion
default:
if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING && i + 1 == msgCtx->textDrawPos &&
msgCtx->textDelayTimer == msgCtx->textDelay) {
@@ -1213,17 +1618,18 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
}
void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 y) {
- static s16 sIconItem32XOffsets[] = { 74, 74, 74 };
- static s16 sIconItem24XOffsets[] = { 72, 72, 72 };
+ static s16 sIconItem32XOffsets[] = { 74, 74, 74, 54 };
+ static s16 sIconItem24XOffsets[] = { 72, 72, 72, 50 };
MessageContext* msgCtx = &play->msgCtx;
InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ u8 language = sDisplayNextMessageAsEnglish ? LANGUAGE_ENG : gSaveContext.language;
if (itemId == ITEM_DUNGEON_MAP) {
interfaceCtx->mapPalette[30] = 0xFF;
interfaceCtx->mapPalette[31] = 0xFF;
}
if (itemId < ITEM_MEDALLION_FOREST) {
- R_TEXTBOX_ICON_XPOS = R_TEXT_INIT_XPOS - sIconItem32XOffsets[gSaveContext.language];
+ R_TEXTBOX_ICON_XPOS = R_TEXT_INIT_XPOS - sIconItem32XOffsets[language];
R_TEXTBOX_ICON_YPOS = y + 6;
R_TEXTBOX_ICON_SIZE = 32;
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE,
@@ -1231,7 +1637,7 @@ void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 y) {
// "Item 32-0"
osSyncPrintf("アイテム32-0\n");
} else {
- R_TEXTBOX_ICON_XPOS = R_TEXT_INIT_XPOS - sIconItem24XOffsets[gSaveContext.language];
+ R_TEXTBOX_ICON_XPOS = R_TEXT_INIT_XPOS - sIconItem24XOffsets[language];
R_TEXTBOX_ICON_YPOS = y + 10;
R_TEXTBOX_ICON_SIZE = 24;
memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE,
@@ -1243,6 +1649,601 @@ void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 y) {
msgCtx->choiceNum = 1;
}
+// #region SOH [NTSC] - Add support for filenames on different versions
+bool Message_DecodeName(PlayState* play, s16* decodedBufPosPtr, s32* charTexIdxPtr) {
+ s32 i;
+ s32 j;
+ s32 playerNameLen;
+ u8 curChar2;
+ MessageContext* msgCtx = &play->msgCtx;
+ Font* font = &play->msgCtx.font;
+ u8 emptyChar = (gSaveContext.ship.filenameLanguage == NAME_LANGUAGE_PAL) ? 0x3E : 0xDF;
+
+ for (playerNameLen = ARRAY_COUNT(gSaveContext.playerName); playerNameLen > 0; playerNameLen--) {
+ if (gSaveContext.playerName[playerNameLen - 1] != emptyChar) {
+ break;
+ }
+ }
+
+ if (ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL && gSaveContext.language != LANGUAGE_JPN) {
+ if (gSaveContext.ship.filenameLanguage == NAME_LANGUAGE_PAL) {
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+ if (curChar2 == 0x3E) {
+ curChar2 = ' ';
+ } else if (curChar2 == 0x40) {
+ curChar2 = '.';
+ } else if (curChar2 == 0x3F) {
+ curChar2 = '-';
+ } else if (curChar2 < 0xA) {
+ curChar2 += 0;
+ curChar2 += '0';
+ } else if (curChar2 < 0x24) {
+ curChar2 += 0;
+ curChar2 += '7';
+ } else if (curChar2 < 0x3E) {
+ curChar2 += 0;
+ curChar2 += '=';
+ }
+ if (curChar2 != ' ') {
+ Font_LoadChar(font, curChar2 - ' ', *charTexIdxPtr);
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+
+ msgCtx->msgBufDecoded[*decodedBufPosPtr] = curChar2;
+ (*decodedBufPosPtr)++;
+ }
+ } else if (gSaveContext.ship.filenameLanguage == NAME_LANGUAGE_NTSC_ENG) {
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+ if (curChar2 == 0xDF) {
+ curChar2 = ' ';
+ } else if (curChar2 == 0xEA) {
+ curChar2 = '.';
+ } else if (curChar2 == 0xE4) {
+ curChar2 = '-';
+ } else if (curChar2 < 0xA) {
+ curChar2 += 0;
+ curChar2 += '0';
+ } else if (curChar2 < 0xC5) {
+ curChar2 += 0;
+ curChar2 -= 0x6A;
+ } else if (curChar2 < 0xDF) {
+ curChar2 += 0;
+ curChar2 -= 0x64;
+ }
+ if (curChar2 != ' ') {
+ Font_LoadChar(font, curChar2 - ' ', *charTexIdxPtr);
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+
+ msgCtx->msgBufDecoded[(*decodedBufPosPtr)] = curChar2;
+ (*decodedBufPosPtr)++;
+ }
+ } else {
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+
+ // Remove JPN Characters from the pool (set them to ' ')
+ if (curChar2 >= 0x0A && curChar2 < 0xAB) {
+ curChar2 = 0xDF;
+ } else if (curChar2 == 0xE7 || curChar2 == 0xE8) {
+ curChar2 = 0xDF;
+ }
+
+ if (curChar2 == 0xDF) {
+ curChar2 = ' ';
+ } else if (curChar2 == 0xEA) {
+ curChar2 = '.';
+ } else if (curChar2 == 0xE4) {
+ curChar2 = '-';
+ } else if (curChar2 < 0xA) {
+ curChar2 += 0;
+ curChar2 += '0';
+ } else if (curChar2 < 0xC5) {
+ curChar2 += 0;
+ curChar2 -= 0x6A;
+ } else if (curChar2 < 0xDF) {
+ curChar2 += 0;
+ curChar2 -= 0x64;
+ }
+
+ if (curChar2 != ' ') {
+ Font_LoadChar(font, curChar2 - ' ', *charTexIdxPtr);
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+
+ msgCtx->msgBufDecoded[(*decodedBufPosPtr)] = curChar2;
+ (*decodedBufPosPtr)++;
+ }
+ }
+ } else { // GAME_REGION_NTSC
+
+ if (gSaveContext.ship.filenameLanguage == NAME_LANGUAGE_NTSC_JPN) {
+ if (gSaveContext.language == LANGUAGE_JPN) {
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+ u8* fontBuf = &font->fontBuf[(curChar2 * 32) << 2];
+ msgCtx->msgBufDecodedWide[(*decodedBufPosPtr)++] = MESSAGE_NAME_JPN;
+ for (j = 0; j < FONT_CHAR_TEX_SIZE; j += 4) {
+ font->charTexBuf[*charTexIdxPtr + j + 0] = fontBuf[j + 0];
+ font->charTexBuf[*charTexIdxPtr + j + 1] = fontBuf[j + 1];
+ font->charTexBuf[*charTexIdxPtr + j + 2] = fontBuf[j + 2];
+ font->charTexBuf[*charTexIdxPtr + j + 3] = fontBuf[j + 3];
+ }
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+ } else { // LANGUAGE_ENG
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+ u8* fontBuf = &font->fontBuf[(curChar2 * 32) << 2];
+ msgCtx->msgBufDecoded[(*decodedBufPosPtr)++] = MESSAGE_NAME;
+ for (j = 0; j < FONT_CHAR_TEX_SIZE; j += 4) {
+ font->charTexBuf[*charTexIdxPtr + j + 0] = fontBuf[j + 0];
+ font->charTexBuf[*charTexIdxPtr + j + 1] = fontBuf[j + 1];
+ font->charTexBuf[*charTexIdxPtr + j + 2] = fontBuf[j + 2];
+ font->charTexBuf[*charTexIdxPtr + j + 3] = fontBuf[j + 3];
+ }
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+ }
+ } else if (gSaveContext.ship.filenameLanguage == NAME_LANGUAGE_NTSC_ENG) {
+ if (gSaveContext.language == LANGUAGE_JPN) {
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+ u8* fontBuf = &font->fontBuf[(curChar2 * 32) << 2];
+ msgCtx->msgBufDecodedWide[(*decodedBufPosPtr)++] = MESSAGE_NAME_JPN;
+ for (j = 0; j < FONT_CHAR_TEX_SIZE; j += 4) {
+ font->charTexBuf[*charTexIdxPtr + j + 0] = fontBuf[j + 0];
+ font->charTexBuf[*charTexIdxPtr + j + 1] = fontBuf[j + 1];
+ font->charTexBuf[*charTexIdxPtr + j + 2] = fontBuf[j + 2];
+ font->charTexBuf[*charTexIdxPtr + j + 3] = fontBuf[j + 3];
+ }
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+ } else { // LANGUAGE_ENG
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+ if (curChar2 == 0xDF) {
+ curChar2 = ' ';
+ } else if (curChar2 == 0xEA) {
+ curChar2 = '.';
+ } else if (curChar2 == 0xE4) {
+ curChar2 = '-';
+ } else if (curChar2 < 0xA) {
+ curChar2 += 0;
+ curChar2 += '0';
+ } else if (curChar2 < 0xC5) {
+ curChar2 += 0;
+ curChar2 -= 0x6A;
+ } else if (curChar2 < 0xDF) {
+ curChar2 += 0;
+ curChar2 -= 0x64;
+ }
+ if (curChar2 != ' ') {
+ Font_LoadChar(font, curChar2 - ' ', *charTexIdxPtr);
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+
+ msgCtx->msgBufDecoded[(*decodedBufPosPtr)] = curChar2;
+ (*decodedBufPosPtr)++;
+ }
+ }
+ } else if (gSaveContext.ship.filenameLanguage == NAME_LANGUAGE_PAL) {
+ if (gSaveContext.language == LANGUAGE_JPN) {
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+
+ // Convert PAL char to NTSC
+ if (curChar2 >= 0xA && curChar2 <= 0x3E) {
+ curChar2 += 0xA1;
+ } else if (curChar2 == 0x3F) {
+ curChar2 += 0xA5;
+ } else if (curChar2 == 0x40) {
+ curChar2 += 0xAA;
+ }
+
+ u8* fontBuf = &font->fontBuf[(curChar2 * 32) << 2];
+ msgCtx->msgBufDecoded[(*decodedBufPosPtr)++] = MESSAGE_NAME;
+ for (j = 0; j < FONT_CHAR_TEX_SIZE; j += 4) {
+ font->charTexBuf[*charTexIdxPtr + j + 0] = fontBuf[j + 0];
+ font->charTexBuf[*charTexIdxPtr + j + 1] = fontBuf[j + 1];
+ font->charTexBuf[*charTexIdxPtr + j + 2] = fontBuf[j + 2];
+ font->charTexBuf[*charTexIdxPtr + j + 3] = fontBuf[j + 3];
+ }
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+ } else { // LANGUAGE_ENG
+ for (i = 0; i < playerNameLen; i++) {
+ curChar2 = gSaveContext.playerName[i];
+ if (curChar2 == 0x3E) {
+ curChar2 = ' ';
+ } else if (curChar2 == 0x40) {
+ curChar2 = '.';
+ } else if (curChar2 == 0x3F) {
+ curChar2 = '-';
+ } else if (curChar2 < 0xA) {
+ curChar2 += 0;
+ curChar2 += '0';
+ } else if (curChar2 < 0x24) {
+ curChar2 += 0;
+ curChar2 += '7';
+ } else if (curChar2 < 0x3E) {
+ curChar2 += 0;
+ curChar2 += '=';
+ }
+ if (curChar2 != ' ') {
+ Font_LoadChar(font, curChar2 - ' ', *charTexIdxPtr);
+ *charTexIdxPtr += FONT_CHAR_TEX_SIZE;
+ }
+
+ msgCtx->msgBufDecoded[*decodedBufPosPtr] = curChar2;
+ (*decodedBufPosPtr)++;
+ }
+ }
+ }
+ }
+ (*decodedBufPosPtr)--;
+
+ return true;
+}
+// #endregion
+
+// Taken from decomped N64 1.0 z_message https://decomp.me/scratch/462bn
+void Message_DecodeJPN(PlayState* play) {
+ u16 curChar;
+ u8 curChar2;
+ u8 *fontBuf;
+ s32 loadChar;
+ s32 charTexIdx = 0;
+ s16 playerNameLen;
+ s16 numLines = 0;
+ s16 digits[4];
+ u16 value;
+ s16 decodedBufPos = 0;
+ s16 i;
+ s16 j;
+ f32 timeInSeconds;
+ MessageContext *msgCtx = &play->msgCtx;
+ Font *font = &play->msgCtx.font;
+
+ while (true) {
+ curChar = msgCtx->msgBufDecodedWide[decodedBufPos] = font->msgBufWide[msgCtx->msgBufPos];
+
+ // #region SOH - Don't require input for credits textboxes in randomizer
+ if (CVarGetInteger(CVAR_ENHANCEMENT("NoInputForCredits"), 0) && (
+ msgCtx->textId == 0x706F ||
+ msgCtx->textId == 0x7091 ||
+ msgCtx->textId == 0x7092 ||
+ msgCtx->textId == 0x7093 ||
+ msgCtx->textId == 0x7094 ||
+ msgCtx->textId == 0x7095
+ )) {
+ if (curChar == MESSAGE_BOX_BREAK_JPN) {
+ curChar = msgCtx->msgBufDecodedWide[decodedBufPos] = font->msgBufWide[msgCtx->msgBufPos] = MESSAGE_BOX_BREAK_DELAYED_JPN;
+ } else if (curChar == MESSAGE_END_JPN) {
+ // use fade instead of fade2, as fade2 is unimplemented in JP
+ curChar = msgCtx->msgBufDecodedWide[decodedBufPos] = font->msgBufWide[msgCtx->msgBufPos] = MESSAGE_FADE_JPN;
+ curChar = msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[++msgCtx->msgBufPos] = MESSAGE_END_JPN;
+ }
+ }
+ // #endregion
+
+ if (curChar == MESSAGE_BOX_BREAK_JPN || curChar == MESSAGE_TEXTID_JPN || curChar == MESSAGE_BOX_BREAK_DELAYED_JPN ||
+ curChar == MESSAGE_EVENT_JPN || curChar == MESSAGE_END_JPN) {
+ msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
+ msgCtx->textDrawPos = 1;
+ R_TEXT_INIT_YPOS = R_TEXTBOX_Y + 6;
+ if (msgCtx->textBoxType != TEXTBOX_TYPE_NONE_BOTTOM) {
+ if (numLines == 0) {
+ R_TEXT_INIT_YPOS = (u16)(R_TEXTBOX_Y + 22);
+ } else if (numLines == 1) {
+ R_TEXT_INIT_YPOS = (u16)(R_TEXTBOX_Y + 14);
+ }
+ }
+ if (curChar == MESSAGE_TEXTID_JPN) {
+ sNextTextId = msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[msgCtx->msgBufPos + 1];
+ }
+ if (curChar == MESSAGE_BOX_BREAK_DELAYED_JPN) {
+ msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[msgCtx->msgBufPos + 1];
+ msgCtx->msgBufPos += 2;
+ }
+ msgCtx->decodedTextLen = decodedBufPos;
+ if (sTextboxSkipped) {
+ msgCtx->textDrawPos = msgCtx->decodedTextLen;
+ }
+ break;
+ }
+ if (curChar == MESSAGE_NAME_JPN) {
+ // #region SOH [NTSC] - Support multiple names
+ if (!Message_DecodeName(play, &decodedBufPos, &charTexIdx)) {
+ for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) {
+ if (gSaveContext.playerName[playerNameLen - 1] != 0xDF) {
+ break;
+ }
+ }
+ for (i = 0; i < playerNameLen; i++) {
+ curChar = gSaveContext.playerName[i];
+ // FAKE? Figure out what best way to match is
+ fontBuf = &font->fontBuf[(curChar * 32) << 2];
+ msgCtx->msgBufDecodedWide[decodedBufPos + i] = MESSAGE_NAME_JPN;
+
+ for (j = 0; j < FONT_CHAR_TEX_SIZE; j += 4) {
+ font->charTexBuf[charTexIdx + j + 0] = fontBuf[j + 0];
+ font->charTexBuf[charTexIdx + j + 1] = fontBuf[j + 1];
+ font->charTexBuf[charTexIdx + j + 2] = fontBuf[j + 2];
+ font->charTexBuf[charTexIdx + j + 3] = fontBuf[j + 3];
+ }
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ decodedBufPos += playerNameLen - 1;
+ }
+ } else if (curChar == MESSAGE_MARATHON_TIME_JPN || curChar == MESSAGE_RACE_TIME_JPN) {
+ digits[0] = digits[1] = digits[2] = 0;
+ if (curChar == MESSAGE_RACE_TIME_JPN) {
+ digits[3] = gSaveContext.timerSeconds;
+ } else {
+ digits[3] = gSaveContext.subTimerSeconds;
+ }
+ while (digits[3] >= 60) {
+ digits[1]++;
+ if (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+ digits[3] -= 60;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ func_8006EE50(font, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ if (i == 1) {
+ func_8006EE50(font, 0x95AA, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = 0x95AA;
+ decodedBufPos++;
+ } else if (i == 3) {
+ func_8006EE50(font, 0x9562, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = 0x9562;
+ }
+ }
+ } else if (curChar == MESSAGE_POINTS_JPN) {
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = gSaveContext.minigameScore;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if (i == 3 || digits[i] != 0) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ func_8006EE50(font, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == MESSAGE_TOKENS_JPN) {
+ digits[0] = digits[1] = 0;
+ digits[2] = gSaveContext.inventory.gsTokens;
+
+ while (digits[2] >= 100) {
+ digits[0]++;
+ digits[2] -= 100;
+ }
+ while (digits[2] >= 10) {
+ digits[1]++;
+ digits[2] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 3; i++) {
+ if (i == 2 || digits[i] != 0) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ func_8006EE50(font, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == MESSAGE_FISH_INFO_JPN) {
+ digits[0] = 0;
+ digits[1] = gSaveContext.minigameScore;
+
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+
+ for (i = 0; i < 2; i++) {
+ if (i == 1 || digits[i] != 0) {
+ func_8006EE50(font, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ } else if (curChar == MESSAGE_HIGHSCORE_JPN) {
+ value = HIGH_SCORE(font->msgBufWide[++msgCtx->msgBufPos] & 0xFF);
+ if ((font->msgBufWide[msgCtx->msgBufPos] & 0xFF) == 2) {
+ if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
+ value &= 0x7F;
+ } else {
+ value = ((HIGH_SCORE(font->msgBufWide[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F;
+ }
+ }
+ switch (font->msgBufWide[msgCtx->msgBufPos] & 0xFF) {
+ case HS_HBA:
+ case HS_POE_POINTS:
+ case HS_FISHING:
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = value;
+
+ while (digits[3] >= 1000) {
+ digits[0]++;
+ digits[3] -= 1000;
+ }
+ while (digits[3] >= 100) {
+ digits[1]++;
+ digits[3] -= 100;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ loadChar = false;
+ for (i = 0; i < 4; i++) {
+ if (i == 3 || digits[i] != 0) {
+ loadChar = true;
+ }
+ if (loadChar) {
+ func_8006EE50(font, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ }
+ }
+ decodedBufPos--;
+ break;
+ case HS_UNK_05:
+ break;
+ case HS_HORSE_RACE:
+ case HS_MARATHON:
+ case HS_DAMPE_RACE:
+ digits[0] = digits[1] = digits[2] = 0;
+ digits[3] = value;
+
+ while (digits[3] >= 60) {
+ digits[1]++;
+ if (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+ digits[3] -= 60;
+ }
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ func_8006EE50(font, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ if (i == 1) {
+ func_8006EE50(font, 0x95AA, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = 0x95AA;
+ decodedBufPos++;
+ } else if (i == 3) {
+ func_8006EE50(font, 0x9562, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = 0x9562;
+ }
+ }
+ break;
+ }
+ } else if (curChar == MESSAGE_TIME_JPN) {
+ digits[0] = 0;
+ timeInSeconds = gSaveContext.dayTime * (24.0f * 60.0f / 0x10000);
+
+ digits[1] = timeInSeconds / 60.0f;
+ while (digits[1] >= 10) {
+ digits[0]++;
+ digits[1] -= 10;
+ }
+ digits[2] = 0;
+ digits[3] = (s16)timeInSeconds % 60;
+ while (digits[3] >= 10) {
+ digits[2]++;
+ digits[3] -= 10;
+ }
+
+ for (i = 0; i < 4; i++) {
+ func_8006EE50(font, digits[i] + 0x824F, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = digits[i] + 0x824F;
+ decodedBufPos++;
+ if (i == 1) {
+ func_8006EE50(font, 0x8E9E, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = 0x8E9E;
+ decodedBufPos++;
+ } else if (i == 3) {
+ func_8006EE50(font, 0x95AA, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ msgCtx->msgBufDecodedWide[decodedBufPos] = 0x95AA;
+ }
+ }
+ } else if (curChar == MESSAGE_ITEM_ICON_JPN) {
+ msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[msgCtx->msgBufPos + 1];
+ Message_LoadItemIcon(play, font->msgBufWide[msgCtx->msgBufPos + 1], R_TEXTBOX_Y + 10);
+ } else if (curChar == MESSAGE_BACKGROUND_JPN) {
+ msgCtx->textboxBackgroundIdx = font->msgBufWide[msgCtx->msgBufPos + 1] * 2;
+ msgCtx->textboxBackgroundForeColorIdx = (font->msgBufWide[msgCtx->msgBufPos + 2] & 0xF000) >> 12;
+ msgCtx->textboxBackgroundBackColorIdx = (font->msgBufWide[msgCtx->msgBufPos + 2] & 0xF00) >> 8;
+ msgCtx->textboxBackgroundYOffsetIdx = (font->msgBufWide[msgCtx->msgBufPos + 2] & 0xF0) >> 4;
+ msgCtx->textboxBackgroundUnkArg = font->msgBufWide[msgCtx->msgBufPos + 2] & 0xF;
+ memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, gRedMessageXLeftTex, strlen(gRedMessageXLeftTex) + 1);
+ memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE + 0x900, gRedMessageXRightTex, strlen(gRedMessageXRightTex) + 1);
+ numLines = 2;
+ msgCtx->msgBufPos += 2;
+ R_TEXTBOX_BG_YPOS = R_TEXTBOX_Y + 8;
+ } else if (curChar == MESSAGE_COLOR_JPN) {
+ msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[++msgCtx->msgBufPos] & 0xF;
+ } else if (curChar == MESSAGE_NEWLINE_JPN) {
+ numLines++;
+ } else if (curChar != MESSAGE_QUICKTEXT_ENABLE_JPN && curChar != MESSAGE_QUICKTEXT_DISABLE_JPN &&
+ curChar != MESSAGE_AWAIT_BUTTON_PRESS_JPN && curChar != MESSAGE_OCARINA_JPN &&
+ curChar != MESSAGE_PERSISTENT_JPN && curChar != MESSAGE_UNSKIPPABLE_JPN) {
+ if (curChar == MESSAGE_FADE_JPN) {
+ sTextFade = true;
+ msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[++msgCtx->msgBufPos] & 0xFF;
+ } else if (curChar == MESSAGE_SHIFT_JPN || curChar == MESSAGE_TEXT_SPEED_JPN) {
+ msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[++msgCtx->msgBufPos] & 0xFF;
+ } else if (curChar == MESSAGE_SFX_JPN) {
+ msgCtx->msgBufDecodedWide[++decodedBufPos] = font->msgBufWide[++msgCtx->msgBufPos];
+ } else if (curChar == MESSAGE_TWO_CHOICE_JPN) {
+ msgCtx->choiceNum = 2;
+ } else if (curChar == MESSAGE_THREE_CHOICE_JPN) {
+ msgCtx->choiceNum = 3;
+ R_TEXT_INIT_XPOS += 32;
+ } else if (curChar != MESSAGE_SPACE_JPN) {
+ func_8006EE50(font, curChar, charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ }
+ decodedBufPos++;
+ msgCtx->msgBufPos++;
+ }
+}
+
void Message_Decode(PlayState* play) {
u8 temp_s2;
u8 phi_s1;
@@ -1258,6 +2259,10 @@ void Message_Decode(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
Font* font = &play->msgCtx.font;
+ // #region SOH [NTSC] - allow switching languages mid text
+ sTextBoxNum++;
+ // #endregion
+
if ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING && msgCtx->msgMode <= MSGMODE_OCARINA_AWAIT_INPUT) || msgCtx->textBoxType == TEXTBOX_TYPE_OCARINA) {
// TODO: Figure out what specific textures to invalidate to prevent the ocarina textboxes from flashing
gSPInvalidateTexCache(play->state.gfxCtx->polyOpa.p++, NULL);
@@ -1273,6 +2278,13 @@ void Message_Decode(PlayState* play) {
play->msgCtx.textUnskippable = play->msgCtx.textDelay = play->msgCtx.textDelayTimer = 0;
sTextFade = false;
+ // #region SOH [NTSC] - Originally this is all in one function, but for ease of reading, the JP decoding will be separated out
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_DecodeJPN(play);
+ return;
+ }
+ // #endregion
+
while (true) {
phi_s1 = temp_s2 = msgCtx->msgBufDecoded[decodedBufPos] = font->msgBuf[msgCtx->msgBufPos];
@@ -1328,40 +2340,46 @@ void Message_Decode(PlayState* play) {
break;
} else if (temp_s2 == MESSAGE_NAME) {
// Substitute the player name control character for the file's player name.
- for (playerNameLen = ARRAY_COUNT(gSaveContext.playerName); playerNameLen > 0; playerNameLen--) {
- if (gSaveContext.playerName[playerNameLen - 1] != 0x3E) {
- break;
+ // #region SOH [NTSC] - Support PAL and NTSC with either language
+ // Function always returns true, so block is not entered
+ if (!Message_DecodeName(play, &decodedBufPos, &charTexIdx)) {
+ for (playerNameLen = ARRAY_COUNT(gSaveContext.playerName); playerNameLen > 0; playerNameLen--) {
+ if (gSaveContext.playerName[playerNameLen - 1] != 0x3E) {
+ break;
+ }
}
- }
- // "Name"
- osSyncPrintf("\n名前 = ");
- for (i = 0; i < playerNameLen; i++) {
- phi_s1 = gSaveContext.playerName[i];
- if (phi_s1 == 0x3E) {
- phi_s1 = ' ';
- } else if (phi_s1 == 0x40) {
- phi_s1 = '.';
- } else if (phi_s1 == 0x3F) {
- phi_s1 = '-';
- } else if (phi_s1 < 0xA) {
- phi_s1 += 0;
- phi_s1 += '0';
- } else if (phi_s1 < 0x24) {
- phi_s1 += 0;
- phi_s1 += '7';
- } else if (phi_s1 < 0x3E) {
- phi_s1 += 0;
- phi_s1 += '=';
- }
- if (phi_s1 != ' ') {
- Font_LoadChar(font, phi_s1 - ' ', charTexIdx);
- charTexIdx += FONT_CHAR_TEX_SIZE;
+ // "Name"
+ osSyncPrintf("\n名前 = ");
+
+ for (i = 0; i < playerNameLen; i++) {
+ phi_s1 = gSaveContext.playerName[i];
+ if (phi_s1 == 0x3E) {
+ phi_s1 = ' ';
+ } else if (phi_s1 == 0x40) {
+ phi_s1 = '.';
+ } else if (phi_s1 == 0x3F) {
+ phi_s1 = '-';
+ } else if (phi_s1 < 0xA) {
+ phi_s1 += 0;
+ phi_s1 += '0';
+ } else if (phi_s1 < 0x24) {
+ phi_s1 += 0;
+ phi_s1 += '7';
+ } else if (phi_s1 < 0x3E) {
+ phi_s1 += 0;
+ phi_s1 += '=';
+ }
+ if (phi_s1 != ' ') {
+ Font_LoadChar(font, phi_s1 - ' ', charTexIdx);
+ charTexIdx += FONT_CHAR_TEX_SIZE;
+ }
+ osSyncPrintf("%x ", phi_s1);
+ msgCtx->msgBufDecoded[decodedBufPos] = phi_s1;
+ decodedBufPos++;
}
- osSyncPrintf("%x ", phi_s1);
- msgCtx->msgBufDecoded[decodedBufPos] = phi_s1;
- decodedBufPos++;
+ decodedBufPos--;
}
- decodedBufPos--;
+ // #endregion
} else if (temp_s2 == MESSAGE_MARATHON_TIME || temp_s2 == MESSAGE_RACE_TIME) {
// Convert the values of the appropriate timer to digits and add the
// digits to the decoded buffer in place of the control character.
@@ -1369,9 +2387,9 @@ void Message_Decode(PlayState* play) {
osSyncPrintf("\nEVENTタイマー = ");
digits[0] = digits[1] = digits[2] = 0;
if (temp_s2 == MESSAGE_RACE_TIME) {
- digits[3] = gSaveContext.timer1Value;
+ digits[3] = gSaveContext.timerSeconds;
} else {
- digits[3] = gSaveContext.timer2Value;
+ digits[3] = gSaveContext.subTimerSeconds;
}
while (digits[3] >= 60) {
@@ -1672,6 +2690,8 @@ void Message_OpenText(PlayState* play, u16 textId) {
Font* font = &msgCtx->font;
s16 textBoxType;
+ sDisplayNextMessageAsEnglish = false;
+
if (msgCtx->msgMode == MSGMODE_NONE) {
gSaveContext.unk_13EE = gSaveContext.unk_13EA;
}
@@ -1698,6 +2718,10 @@ void Message_OpenText(PlayState* play, u16 textId) {
R_TEXT_LINE_SPACING = 6;
R_TEXT_INIT_XPOS = 20;
YREG(1) = 48;
+ } else if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ R_TEXT_CHAR_SCALE = 88;
+ R_TEXT_LINE_SPACING = 18;
+ R_TEXT_INIT_XPOS = 50;
} else {
R_TEXT_CHAR_SCALE = 75;
R_TEXT_LINE_SPACING = 12;
@@ -1722,6 +2746,11 @@ void Message_OpenText(PlayState* play, u16 textId) {
}
msgCtx->textId = textId;
+ // #region SOH [NTSC] - allow for switching languages mid textbox
+ sLastLanguage = gSaveContext.language;
+ sTextBoxNum = 0;
+ // #endregion
+
if (textId == 0x2030) { // Talking to Ingo as adult in Lon Lon Ranch for the first time before freeing Epona
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("???????????????? z_message.c ??????????????????\n");
@@ -1732,6 +2761,14 @@ void Message_OpenText(PlayState* play, u16 textId) {
// RANDOTODO: Use this for ice trap messages
if (CustomMessage_RetrieveIfExists(play)) {
osSyncPrintf("Found custom message");
+ if (gSaveContext.language == LANGUAGE_JPN) {
+ sDisplayNextMessageAsEnglish = true;
+ if (!sTextIsCredits) {
+ R_TEXT_CHAR_SCALE = 75;
+ R_TEXT_LINE_SPACING = 12;
+ R_TEXT_INIT_XPOS = 65;
+ }
+ }
} else if (sTextIsCredits) {
Message_FindCreditsMessage(play, textId);
msgCtx->msgLength = font->msgLength;
@@ -1752,10 +2789,23 @@ void Message_OpenText(PlayState* play, u16 textId) {
(textId == 0x4C || textId == 0xA4)) ||
// 4D == Hylian Shield
textId == 0x4D)) {
+ // NTSC TODO: Translate EquipNow Message
Message_FindMessage(play, textId);
+ if (gSaveContext.language == LANGUAGE_JPN) {
+ sDisplayNextMessageAsEnglish = true;
+ if (!sTextIsCredits) {
+ R_TEXT_CHAR_SCALE = 75;
+ R_TEXT_LINE_SPACING = 12;
+ R_TEXT_INIT_XPOS = 65;
+ }
+ }
msgCtx->msgLength = font->msgLength = GetEquipNowMessage(font->msgBuf, font->msgOffset, sizeof(font->msgBuf));
} else {
- Message_FindMessage(play, textId);
+ if (gSaveContext.language == LANGUAGE_JPN) {
+ Message_FindMessageJPN(play, textId);
+ } else {
+ Message_FindMessage(play, textId);
+ }
msgCtx->msgLength = font->msgLength;
char* src = (uintptr_t)font->msgOffset;
memcpy(font->msgBuf, src, font->msgLength);
@@ -2229,6 +3279,32 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
gSPSegment(gfx++, 0x07, msgCtx->textboxSegment);
if (msgCtx->msgLength != 0) {
+ // #region SOH [NTSC] - allow switching languages mid text
+ if (gSaveContext.language != sLastLanguage) {
+ u16 drawPos = msgCtx->textDrawPos;
+ u16 choiceNum = msgCtx->choiceNum;
+ u16 textUnskippable = msgCtx->textUnskippable;
+ u16 textboxEndType = msgCtx->textboxEndType;
+ u8 msgMode = msgCtx->msgMode;
+ s16 textboxColorAlphaCurrent = msgCtx->textboxColorAlphaCurrent;
+ s32 textBoxNum;
+ s32 textBoxMax = sTextBoxNum - 1;
+ Message_OpenText(play, msgCtx->textId);
+ Message_Decode(play);
+ // Move to correct textbox
+ for (textBoxNum = 0; textBoxNum < textBoxMax; textBoxNum++) {
+ msgCtx->msgBufPos++;
+ Message_Decode(play);
+ }
+ msgCtx->textDrawPos = (drawPos > msgCtx->decodedTextLen) ? msgCtx->decodedTextLen : drawPos;
+ msgCtx->choiceNum = choiceNum;
+ msgCtx->textUnskippable = textUnskippable;
+ msgCtx->textboxEndType = textboxEndType;
+ msgCtx->msgMode = msgMode;
+ msgCtx->textboxColorAlphaCurrent = textboxColorAlphaCurrent;
+ }
+ // #endregion
+
if (msgCtx->ocarinaAction != OCARINA_ACTION_FROGS && msgCtx->msgMode != MSGMODE_SONG_PLAYED_ACT &&
msgCtx->msgMode >= MSGMODE_TEXT_BOX_GROWING && msgCtx->msgMode < MSGMODE_TEXT_CLOSING &&
msgCtx->textBoxType < TEXTBOX_TYPE_NONE_BOTTOM) {
@@ -2257,16 +3333,28 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
for (j = 0, i = 0; i < 48; i++, j += 0x80) {
func_8006EE50(&play->msgCtx.font, 0x8140, j);
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
}
break;
case MSGMODE_TEXT_DISPLAYING:
case MSGMODE_TEXT_DELAYED_BREAK:
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_TEXT_AWAIT_INPUT:
case MSGMODE_TEXT_AWAIT_NEXT:
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
Message_DrawTextboxIcon(play, &gfx, R_TEXTBOX_END_XPOS, R_TEXTBOX_END_YPOS);
break;
case MSGMODE_OCARINA_STARTING:
@@ -2309,7 +3397,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
if (msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY &&
msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP) {
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
}
break;
case MSGMODE_OCARINA_PLAYING:
@@ -2402,7 +3494,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
if (msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY &&
msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP) {
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
}
break;
case MSGMODE_OCARINA_CORRECT_PLAYBACK:
@@ -2460,11 +3556,19 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
play->msgCtx.ocarinaMode = OCARINA_MODE_03;
}
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_OCARINA_FAIL:
case MSGMODE_SONG_PLAYBACK_FAIL:
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
case MSGMODE_OCARINA_FAIL_NO_TEXT:
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
@@ -2528,7 +3632,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
play->msgCtx.lastPlayedSong == OCARINA_SONG_TIME ||
play->msgCtx.lastPlayedSong == OCARINA_SONG_STORMS ||
play->msgCtx.lastPlayedSong == OCARINA_SONG_SUNS) {
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
Audio_OcaSetInstrument(1);
Audio_OcaSetInstrument(1);
Audio_OcaSetSongPlayback(msgCtx->lastPlayedSong + 1, 1);
@@ -2572,7 +3680,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
sOcarinaNoteBufPos = 0;
msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION;
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN:
Message_ContinueTextbox(play, msgCtx->lastPlayedSong + 0x893); // You played [song name]
@@ -2587,21 +3699,33 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->stateTimer = 1;
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_DISPLAY_SONG_PLAYED_TEXT:
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
msgCtx->msgMode = MSGMODE_SONG_PLAYED_ACT_BEGIN;
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_SONG_PLAYED_ACT_BEGIN:
Audio_OcaSetInstrument(0);
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_SONG_PLAYED_ACT;
msgCtx->stateTimer = 2;
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_SONG_PLAYED_ACT:
msgCtx->stateTimer--;
@@ -2680,7 +3804,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
}
case MSGMODE_SONG_DEMONSTRATION_DONE:
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_SONG_PLAYBACK:
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
@@ -2727,10 +3855,18 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->stateTimer = 10;
msgCtx->msgMode = MSGMODE_SONG_PLAYBACK_FAIL;
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_OCARINA_AWAIT_INPUT:
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
if (Message_ShouldAdvance(play)) {
func_8010BD58(play, msgCtx->ocarinaAction);
}
@@ -2745,7 +3881,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
sOcarinaNoteBufLen = 0;
Message_ResetOcarinaNoteState();
msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_ONGOING;
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_SCARECROW_LONG_RECORDING_ONGOING:
msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
@@ -2793,7 +3933,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n");
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_SCARECROW_LONG_PLAYBACK:
case MSGMODE_SCARECROW_PLAYBACK:
@@ -2829,7 +3973,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
Audio_OcaSetRecordingState(2);
Audio_OcaSetInstrument(1);
msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_ONGOING;
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_SCARECROW_RECORDING_ONGOING:
msgCtx->ocarinaStaff = Audio_OcaGetRecordingStaff();
@@ -2864,7 +4012,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
Message_CloseTextbox(play);
msgCtx->msgMode = MSGMODE_SCARECROW_RECORDING_FAILED;
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_SCARECROW_RECORDING_FAILED:
osSyncPrintf("cccccccccccc\n");
@@ -2941,7 +4093,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->msgMode = MSGMODE_MEMORY_GAME_ROUND_SUCCESS;
msgCtx->stateTimer = 30;
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_MEMORY_GAME_ROUND_SUCCESS:
msgCtx->ocarinaStaff = Audio_OcaGetPlayingStaff();
@@ -2963,7 +4119,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
play->msgCtx.ocarinaMode = OCARINA_MODE_0F;
}
}
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
break;
case MSGMODE_MEMORY_GAME_START_NEXT_ROUND:
if (!Audio_IsSfxPlaying(NA_SE_SY_METRONOME)) {
@@ -2993,7 +4153,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_FROGS_WAITING:
break;
case MSGMODE_TEXT_DONE:
- Message_DrawText(play, &gfx);
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_DrawTextJPN(play, &gfx);
+ } else {
+ Message_DrawText(play, &gfx);
+ }
switch (msgCtx->textboxEndType) {
case TEXTBOX_ENDTYPE_2_CHOICE:
@@ -3021,6 +4185,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
}
break;
case MSGMODE_TEXT_CLOSING:
+ if (sDisplayNextMessageAsEnglish) {
+ sDisplayNextMessageAsEnglish = false;
+ }
+ /* fallthrough */
case MSGMODE_PAUSED:
break;
case MSGMODE_UNK_20:
@@ -3322,9 +4490,15 @@ void Message_Update(PlayState* play) {
R_TEXTBOX_X_TARGET = sTextboxXPositions[var];
R_TEXTBOX_END_YPOS = sTextboxEndIconYOffset[var] + R_TEXTBOX_Y_TARGET;
- R_TEXT_CHOICE_YPOS(0) = R_TEXTBOX_Y_TARGET + 20;
- R_TEXT_CHOICE_YPOS(1) = R_TEXTBOX_Y_TARGET + 32;
- R_TEXT_CHOICE_YPOS(2) = R_TEXTBOX_Y_TARGET + 44;
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ R_TEXT_CHOICE_YPOS(0) = R_TEXTBOX_Y_TARGET + 7;
+ R_TEXT_CHOICE_YPOS(1) = R_TEXTBOX_Y_TARGET + 25;
+ R_TEXT_CHOICE_YPOS(2) = R_TEXTBOX_Y_TARGET + 43;
+ } else {
+ R_TEXT_CHOICE_YPOS(0) = R_TEXTBOX_Y_TARGET + 20;
+ R_TEXT_CHOICE_YPOS(1) = R_TEXTBOX_Y_TARGET + 32;
+ R_TEXT_CHOICE_YPOS(2) = R_TEXTBOX_Y_TARGET + 44;
+ }
osSyncPrintf("message->msg_disp_type=%x\n", msgCtx->textBoxProperties & 0xF0);
if (msgCtx->textBoxType == TEXTBOX_TYPE_NONE_BOTTOM ||
msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW) {
@@ -3417,7 +4591,11 @@ void Message_Update(PlayState* play) {
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_HAS_NEXT) {
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_PASS, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
- Message_ContinueTextbox(play, sNextTextId);
+ if (gSaveContext.language == LANGUAGE_JPN && !sTextIsCredits && !sDisplayNextMessageAsEnglish) {
+ Message_ContinueTextbox(play, msgCtx->msgBufDecodedWide[msgCtx->textDrawPos]);
+ } else {
+ Message_ContinueTextbox(play, sNextTextId);
+ }
} else {
Audio_PlaySoundGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
Message_CloseTextbox(play);
diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c
index bf0ba6a1c..6df6665ed 100644
--- a/soh/src/code/z_parameter.c
+++ b/soh/src/code/z_parameter.c
@@ -24,6 +24,12 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/gameplaystats.h"
+#include "message_data_static.h"
+extern MessageTableEntry* sNesMessageEntryTablePtr;
+extern MessageTableEntry* sGerMessageEntryTablePtr;
+extern MessageTableEntry* sFraMessageEntryTablePtr;
+extern MessageTableEntry* sJpnMessageEntryTablePtr;
+
#define DO_ACTION_TEX_WIDTH() 48
#define DO_ACTION_TEX_HEIGHT() 16
#define DO_ACTION_TEX_SIZE() ((DO_ACTION_TEX_WIDTH() * DO_ACTION_TEX_HEIGHT()) / 2)
@@ -318,7 +324,7 @@ void func_80082644(PlayState* play, s16 alpha) {
void func_8008277C(PlayState* play, s16 maxAlpha, s16 alpha) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
- if (gSaveContext.unk_13E7 != 0) {
+ if (gSaveContext.forceRisingButtonAlphas != 0) {
func_80082644(play, alpha);
return;
}
@@ -843,12 +849,12 @@ void func_80083108(PlayState* play) {
if ((gSaveContext.cutsceneIndex < 0xFFF0) ||
((play->sceneNum == SCENE_LON_LON_RANCH) && (gSaveContext.cutsceneIndex == 0xFFF0))) {
- gSaveContext.unk_13E7 = 0;
+ gSaveContext.forceRisingButtonAlphas = 0;
if ((player->stateFlags1 & PLAYER_STATE1_ON_HORSE) || (play->shootingGalleryStatus > 1) ||
((play->sceneNum == SCENE_BOMBCHU_BOWLING_ALLEY) && Flags_GetSwitch(play, 0x38))) {
if (gSaveContext.equips.buttonItems[0] != ITEM_NONE || randoCanTrackSwordless) {
- gSaveContext.unk_13E7 = 1;
+ gSaveContext.forceRisingButtonAlphas = 1;
if (gSaveContext.buttonStatus[0] == BTN_DISABLED) {
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
@@ -915,7 +921,7 @@ void func_80083108(PlayState* play) {
} else if (play->sceneNum == SCENE_CHAMBER_OF_THE_SAGES && !IS_BOSS_RUSH) {
Interface_ChangeAlpha(1);
} else if (play->sceneNum == SCENE_FISHING_POND) {
- gSaveContext.unk_13E7 = 2;
+ gSaveContext.forceRisingButtonAlphas = 2;
if (play->interfaceCtx.unk_260 != 0) {
if (gSaveContext.equips.buttonItems[0] != ITEM_FISHING_POLE) {
gSaveContext.buttonStatus[0] = gSaveContext.equips.buttonItems[0];
@@ -2796,6 +2802,10 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l
newName[loadOffset][length - 6] = 'G';
newName[loadOffset][length - 5] = 'E';
newName[loadOffset][length - 4] = 'R';
+ } else if (gSaveContext.language == LANGUAGE_JPN) {
+ newName[loadOffset][length - 6] = 'J';
+ newName[loadOffset][length - 5] = 'P';
+ newName[loadOffset][length - 4] = 'N';
}
doAction = newName[loadOffset];
}
@@ -2861,6 +2871,10 @@ void Interface_LoadActionLabelB(PlayState* play, u16 action) {
newName[length - 6] = 'G';
newName[length - 5] = 'E';
newName[length - 4] = 'R';
+ } else if (gSaveContext.language == LANGUAGE_JPN) {
+ newName[length - 6] = 'J';
+ newName[length - 5] = 'P';
+ newName[length - 4] = 'N';
}
doAction = newName;
}
@@ -3750,21 +3764,21 @@ void func_80088AA0(s16 arg0) {
gSaveContext.timerX[1] = 140;
gSaveContext.timerY[1] = 80;
D_80125A5C = 0;
- gSaveContext.timer2Value = arg0;
+ gSaveContext.subTimerSeconds = arg0;
if (arg0 != 0) {
- gSaveContext.timer2State = 1;
+ gSaveContext.subTimerState = 1;
} else {
- gSaveContext.timer2State = 7;
+ gSaveContext.subTimerState = 7;
}
}
void func_80088AF0(PlayState* play) {
- if (gSaveContext.timer2State != 0) {
+ if (gSaveContext.subTimerState != 0) {
if (gSaveContext.eventInf[1] & 1) {
- gSaveContext.timer2Value = 239;
+ gSaveContext.subTimerSeconds = 239;
} else {
- gSaveContext.timer2Value = 1;
+ gSaveContext.subTimerSeconds = 1;
}
}
}
@@ -3773,12 +3787,12 @@ void func_80088B34(s16 arg0) {
gSaveContext.timerX[0] = 140;
gSaveContext.timerY[0] = 80;
D_80125A5C = 0;
- gSaveContext.timer1Value = arg0;
+ gSaveContext.timerSeconds = arg0;
if (arg0 != 0) {
- gSaveContext.timer1State = 5;
+ gSaveContext.timerState = 5;
} else {
- gSaveContext.timer1State = 11;
+ gSaveContext.timerState = 11;
}
}
@@ -3795,8 +3809,8 @@ void Interface_DrawActionLabel(GraphicsContext* gfxCtx, void* texture) {
}
void Interface_DrawItemButtons(PlayState* play) {
- static void* cUpLabelTextures[] = { gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpENGTex };
- static s16 startButtonLeftPos[] = { 132, 130, 130 };
+ static void* cUpLabelTextures[] = { gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpJPTex };
+ static s16 startButtonLeftPos[] = { 132, 130, 130, 132 };
InterfaceContext* interfaceCtx = &play->interfaceCtx;
Player* player = GET_PLAYER(play);
PauseContext* pauseCtx = &play->pauseCtx;
@@ -4970,6 +4984,13 @@ void Interface_Draw(PlayState* play) {
s16 svar5;
s16 svar6;
bool fullUi = !CVarGetInteger(CVAR_ENHANCEMENT("MinimalUI"), 0) || !R_MINIMAP_DISABLED || play->pauseCtx.state != 0;
+ // #region SOH [NTSC]
+ s32 languageOffset = gSaveContext.language;
+
+ if (languageOffset == LANGUAGE_JPN) {
+ languageOffset = LANGUAGE_ENG;
+ }
+ // #endregion
if (GameInteractor_NoUIActive()) {
return;
@@ -5256,10 +5277,10 @@ void Interface_Draw(PlayState* play) {
// B Button Do Action Label
s16 PosX_adjust;
s16 PosY_adjust;
- if (gSaveContext.language == 2) {
+ if (gSaveContext.language == LANGUAGE_FRA) {
PosX_adjust = -12;
PosY_adjust = 5;
- } else if (gSaveContext.language == 1) { //ger
+ } else if (gSaveContext.language == LANGUAGE_GER) {
PosY_adjust = 6;
PosX_adjust = -9;
} else {
@@ -5292,8 +5313,8 @@ void Interface_Draw(PlayState* play) {
BbtnPosX = -9999;
}
} else {
- BbtnPosX = OTRGetRectDimensionFromRightEdge(R_B_LABEL_X(gSaveContext.language)+X_Margins_BtnB_label);
- BbtnPosY = R_B_LABEL_Y(gSaveContext.language)+Y_Margins_BtnB_label;
+ BbtnPosX = OTRGetRectDimensionFromRightEdge(R_B_LABEL_X(languageOffset)+X_Margins_BtnB_label);
+ BbtnPosY = R_B_LABEL_Y(languageOffset)+Y_Margins_BtnB_label;
}
gDPPipeSync(OVERLAY_DISP++);
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
@@ -5304,7 +5325,7 @@ void Interface_Draw(PlayState* play) {
DO_ACTION_TEX_WIDTH(), DO_ACTION_TEX_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);
- R_B_LABEL_DD = (1 << 10) / (WREG(37 + gSaveContext.language) / 100.0f);
+ R_B_LABEL_DD = (1 << 10) / (WREG(37 + languageOffset) / 100.0f);
gSPWideTextureRectangle(OVERLAY_DISP++, BbtnPosX << 2, BbtnPosY << 2,
(BbtnPosX + DO_ACTION_TEX_WIDTH()) << 2,
(BbtnPosY + DO_ACTION_TEX_HEIGHT()) << 2, G_TX_RENDERTILE, 0, 0,
@@ -5498,7 +5519,7 @@ void Interface_Draw(PlayState* play) {
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha);
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
- Matrix_Translate(-138.0f + rAIconX, rAIconY, WREG(46 + gSaveContext.language) / 10.0f, MTXMODE_NEW);
+ Matrix_Translate(-138.0f + rAIconX, rAIconY, WREG(46 + languageOffset) / 10.0f, MTXMODE_NEW);
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
Matrix_RotateX(interfaceCtx->unk_1F4 / 10000.0f, MTXMODE_APPLY);
gSPMatrix(OVERLAY_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
@@ -5664,13 +5685,13 @@ void Interface_Draw(PlayState* play) {
}
}
- if ((gSaveContext.timer2State == 5) && (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
+ if ((gSaveContext.subTimerState == 5) && (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
// Trade quest timer reached 0
D_8015FFE6 = 40;
gSaveContext.cutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
- gSaveContext.timer2State = 0;
+ gSaveContext.subTimerState = 0;
if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
@@ -5711,28 +5732,28 @@ void Interface_Draw(PlayState* play) {
(play->shootingGalleryStatus <= 1) &&
!((play->sceneNum == SCENE_BOMBCHU_BOWLING_ALLEY) && Flags_GetSwitch(play, 0x38))) {
svar6 = 0;
- switch (gSaveContext.timer1State) {
+ switch (gSaveContext.timerState) {
case 1:
D_8015FFE2 = 20;
D_8015FFE0 = 20;
- gSaveContext.timer1Value = gSaveContext.health >> 1;
- gSaveContext.timer1State = 2;
+ gSaveContext.timerSeconds = gSaveContext.health >> 1;
+ gSaveContext.timerState = 2;
break;
case 2:
D_8015FFE2--;
if (D_8015FFE2 == 0) {
D_8015FFE2 = 20;
- gSaveContext.timer1State = 3;
+ gSaveContext.timerState = 3;
}
break;
case 5:
case 11:
D_8015FFE2 = 20;
D_8015FFE0 = 20;
- if (gSaveContext.timer1State == 5) {
- gSaveContext.timer1State = 6;
+ if (gSaveContext.timerState == 5) {
+ gSaveContext.timerState = 6;
} else {
- gSaveContext.timer1State = 12;
+ gSaveContext.timerState = 12;
}
break;
case 6:
@@ -5740,10 +5761,10 @@ void Interface_Draw(PlayState* play) {
D_8015FFE2--;
if (D_8015FFE2 == 0) {
D_8015FFE2 = 20;
- if (gSaveContext.timer1State == 6) {
- gSaveContext.timer1State = 7;
+ if (gSaveContext.timerState == 6) {
+ gSaveContext.timerState = 7;
} else {
- gSaveContext.timer1State = 13;
+ gSaveContext.timerState = 13;
}
}
break;
@@ -5770,15 +5791,15 @@ void Interface_Draw(PlayState* play) {
gSaveContext.timerY[0] = 46;
}
- if (gSaveContext.timer1State == 3) {
- gSaveContext.timer1State = 4;
+ if (gSaveContext.timerState == 3) {
+ gSaveContext.timerState = 4;
} else {
- gSaveContext.timer1State = 8;
+ gSaveContext.timerState = 8;
}
}
case 4:
case 8:
- if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8)) {
+ if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8)) {
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[0] = 54;
} else {
@@ -5786,28 +5807,28 @@ void Interface_Draw(PlayState* play) {
}
}
- if ((gSaveContext.timer1State >= 3) && (msgCtx->msgLength == 0)) {
+ if ((gSaveContext.timerState >= 3) && (msgCtx->msgLength == 0)) {
D_8015FFE0--;
if (D_8015FFE0 == 0) {
- if (gSaveContext.timer1Value != 0) {
- gSaveContext.timer1Value--;
+ if (gSaveContext.timerSeconds != 0) {
+ gSaveContext.timerSeconds--;
}
D_8015FFE0 = 20;
- if (gSaveContext.timer1Value == 0) {
- gSaveContext.timer1State = 10;
+ if (gSaveContext.timerSeconds == 0) {
+ gSaveContext.timerState = 10;
if (D_80125A5C != 0) {
gSaveContext.health = 0;
play->damagePlayer(play, -(gSaveContext.health + 2));
}
D_80125A5C = 0;
- } else if (gSaveContext.timer1Value > 60) {
+ } else if (gSaveContext.timerSeconds > 60) {
if (timerDigits[4] == 1) {
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
- } else if (gSaveContext.timer1Value >= 11) {
+ } else if (gSaveContext.timerSeconds >= 11) {
if (timerDigits[4] & 1) {
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -5840,10 +5861,10 @@ void Interface_Draw(PlayState* play) {
gSaveContext.timerY[0] = 46;
}
- gSaveContext.timer1State = 14;
+ gSaveContext.timerState = 14;
}
case 14:
- if (gSaveContext.timer1State == 14) {
+ if (gSaveContext.timerState == 14) {
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[0] = 54;
} else {
@@ -5851,15 +5872,15 @@ void Interface_Draw(PlayState* play) {
}
}
- if (gSaveContext.timer1State >= 3) {
+ if (gSaveContext.timerState >= 3) {
D_8015FFE0--;
if (D_8015FFE0 == 0) {
- gSaveContext.timer1Value++;
+ gSaveContext.timerSeconds++;
D_8015FFE0 = 20;
- if (gSaveContext.timer1Value == 3599) {
+ if (gSaveContext.timerSeconds == 3599) {
D_8015FFE2 = 40;
- gSaveContext.timer1State = 15;
+ gSaveContext.timerState = 15;
} else {
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -5868,37 +5889,37 @@ void Interface_Draw(PlayState* play) {
}
break;
case 10:
- if (gSaveContext.timer2State != 0) {
+ if (gSaveContext.subTimerState != 0) {
D_8015FFE6 = 20;
D_8015FFE4 = 20;
gSaveContext.timerX[1] = 140;
gSaveContext.timerY[1] = 80;
- if (gSaveContext.timer2State < 7) {
- gSaveContext.timer2State = 2;
+ if (gSaveContext.subTimerState < 7) {
+ gSaveContext.subTimerState = 2;
} else {
- gSaveContext.timer2State = 8;
+ gSaveContext.subTimerState = 8;
}
- gSaveContext.timer1State = 0;
+ gSaveContext.timerState = 0;
} else {
- gSaveContext.timer1State = 0;
+ gSaveContext.timerState = 0;
}
case 15:
break;
default:
svar6 = 1;
- switch (gSaveContext.timer2State) {
+ switch (gSaveContext.subTimerState) {
case 1:
case 7:
D_8015FFE6 = 20;
D_8015FFE4 = 20;
gSaveContext.timerX[1] = 140;
gSaveContext.timerY[1] = 80;
- if (gSaveContext.timer2State == 1) {
- gSaveContext.timer2State = 2;
+ if (gSaveContext.subTimerState == 1) {
+ gSaveContext.subTimerState = 2;
} else {
- gSaveContext.timer2State = 8;
+ gSaveContext.subTimerState = 8;
}
break;
case 2:
@@ -5906,10 +5927,10 @@ void Interface_Draw(PlayState* play) {
D_8015FFE6--;
if (D_8015FFE6 == 0) {
D_8015FFE6 = 20;
- if (gSaveContext.timer2State == 2) {
- gSaveContext.timer2State = 3;
+ if (gSaveContext.subTimerState == 2) {
+ gSaveContext.subTimerState = 3;
} else {
- gSaveContext.timer2State = 9;
+ gSaveContext.subTimerState = 9;
}
}
break;
@@ -5917,7 +5938,7 @@ void Interface_Draw(PlayState* play) {
case 9:
osSyncPrintf("event_xp[1]=%d, event_yp[1]=%d TOTAL_EVENT_TM=%d\n",
svar5 = gSaveContext.timerX[1], svar2 = gSaveContext.timerY[1],
- gSaveContext.timer2Value);
+ gSaveContext.subTimerSeconds);
svar1 = (gSaveContext.timerX[1] - 26) / D_8015FFE6;
gSaveContext.timerX[1] -= svar1;
if (gSaveContext.healthCapacity > 0xA0) {
@@ -5938,15 +5959,15 @@ void Interface_Draw(PlayState* play) {
gSaveContext.timerY[1] = 46;
}
- if (gSaveContext.timer2State == 3) {
- gSaveContext.timer2State = 4;
+ if (gSaveContext.subTimerState == 3) {
+ gSaveContext.subTimerState = 4;
} else {
- gSaveContext.timer2State = 10;
+ gSaveContext.subTimerState = 10;
}
}
case 4:
case 10:
- if ((gSaveContext.timer2State == 4) || (gSaveContext.timer2State == 10)) {
+ if ((gSaveContext.subTimerState == 4) || (gSaveContext.subTimerState == 10)) {
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[1] = 54;
} else {
@@ -5954,35 +5975,35 @@ void Interface_Draw(PlayState* play) {
}
}
- if (gSaveContext.timer2State >= 3) {
+ if (gSaveContext.subTimerState >= 3) {
D_8015FFE4--;
if (D_8015FFE4 == 0) {
D_8015FFE4 = 20;
- if (gSaveContext.timer2State == 4) {
- gSaveContext.timer2Value--;
- osSyncPrintf("TOTAL_EVENT_TM=%d\n", gSaveContext.timer2Value);
+ if (gSaveContext.subTimerState == 4) {
+ gSaveContext.subTimerSeconds--;
+ osSyncPrintf("TOTAL_EVENT_TM=%d\n", gSaveContext.subTimerSeconds);
- if (gSaveContext.timer2Value <= 0) {
+ if (gSaveContext.subTimerSeconds <= 0) {
if (!Flags_GetSwitch(play, 0x37) ||
((play->sceneNum != SCENE_GANON_BOSS) &&
(play->sceneNum != SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR) &&
(play->sceneNum != SCENE_GANONS_TOWER_COLLAPSE_INTERIOR) &&
(play->sceneNum != SCENE_INSIDE_GANONS_CASTLE_COLLAPSE))) {
D_8015FFE6 = 40;
- gSaveContext.timer2State = 5;
+ gSaveContext.subTimerState = 5;
gSaveContext.cutsceneIndex = 0;
Message_StartTextbox(play, 0x71B0, NULL);
Player_SetCsActionWithHaltedActors(play, NULL, 8);
} else {
D_8015FFE6 = 40;
- gSaveContext.timer2State = 6;
+ gSaveContext.subTimerState = 6;
}
- } else if (gSaveContext.timer2Value > 60) {
+ } else if (gSaveContext.subTimerSeconds > 60) {
if (timerDigits[4] == 1) {
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
- } else if (gSaveContext.timer2Value > 10) {
+ } else if (gSaveContext.subTimerSeconds > 10) {
if ((timerDigits[4] & 1)) {
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -5992,17 +6013,17 @@ void Interface_Draw(PlayState* play) {
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
} else {
- gSaveContext.timer2Value++;
+ gSaveContext.subTimerSeconds++;
if (gSaveContext.eventInf[1] & 1) {
- if (gSaveContext.timer2Value == 240) {
+ if (gSaveContext.subTimerSeconds == 240) {
Message_StartTextbox(play, 0x6083, NULL);
gSaveContext.eventInf[1] &= ~1;
- gSaveContext.timer2State = 0;
+ gSaveContext.subTimerState = 0;
}
}
}
- if ((gSaveContext.timer2Value % 60) == 0) {
+ if ((gSaveContext.subTimerSeconds % 60) == 0) {
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
@@ -6012,22 +6033,22 @@ void Interface_Draw(PlayState* play) {
case 6:
D_8015FFE6--;
if (D_8015FFE6 == 0) {
- gSaveContext.timer2State = 0;
+ gSaveContext.subTimerState = 0;
}
break;
}
break;
}
- if (((gSaveContext.timer1State != 0) && (gSaveContext.timer1State != 10)) ||
- (gSaveContext.timer2State != 0)) {
+ if (((gSaveContext.timerState != 0) && (gSaveContext.timerState != 10)) ||
+ (gSaveContext.subTimerState != 0)) {
timerDigits[0] = timerDigits[1] = svar2 = timerDigits[3] = 0;
timerDigits[2] = 10; // digit 10 is used as ':' (colon)
- if (gSaveContext.timer1State != 0) {
- timerDigits[4] = gSaveContext.timer1Value;
+ if (gSaveContext.timerState != 0) {
+ timerDigits[4] = gSaveContext.timerSeconds;
} else {
- timerDigits[4] = gSaveContext.timer2Value;
+ timerDigits[4] = gSaveContext.subTimerSeconds;
}
while (timerDigits[4] >= 60) {
@@ -6079,14 +6100,14 @@ void Interface_Draw(PlayState* play) {
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
TEXEL0, 0, PRIMITIVE, 0);
- if (gSaveContext.timer1State != 0) {
- if ((gSaveContext.timer1Value < 10) && (gSaveContext.timer1State < 11)) {
+ if (gSaveContext.timerState != 0) {
+ if ((gSaveContext.timerSeconds < 10) && (gSaveContext.timerState < 11)) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
} else {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255);
}
} else {
- if ((gSaveContext.timer2Value < 10) && (gSaveContext.timer2State < 6)) {
+ if ((gSaveContext.subTimerSeconds < 10) && (gSaveContext.subTimerState < 6)) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
} else {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255);
@@ -6243,14 +6264,24 @@ void Interface_Update(PlayState* play) {
GameInteractor_ExecuteOnInterfaceUpdate();
+ bool isPal = ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL;
+
if (CHECK_BTN_ALL(debugInput->press.button, BTN_DLEFT)) {
gSaveContext.language = LANGUAGE_ENG;
+ CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_ENG);
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
- } else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DUP)) {
+ } else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DUP) && sGerMessageEntryTablePtr != NULL) {
gSaveContext.language = LANGUAGE_GER;
+ CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_GER);
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
- } else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DRIGHT)) {
+ } else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DRIGHT) && sFraMessageEntryTablePtr != NULL) {
gSaveContext.language = LANGUAGE_FRA;
+ CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_FRA);
+ osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
+ } else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DDOWN) && sJpnMessageEntryTablePtr != NULL) {
+ // Add this in to have an equivalent ntsc language debugging feature
+ gSaveContext.language = LANGUAGE_JPN;
+ CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_JPN);
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
}
@@ -6397,7 +6428,7 @@ void Interface_Update(PlayState* play) {
HealthMeter_Update(play);
- if ((gSaveContext.timer1State >= 3) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
+ if ((gSaveContext.timerState >= 3) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
(msgCtx->msgMode == MSGMODE_NONE) && !(player->stateFlags2 & PLAYER_STATE2_ATTEMPT_PLAY_FOR_ACTOR) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) {}
@@ -6516,16 +6547,16 @@ void Interface_Update(PlayState* play) {
Interface_UpdateMagicBar(play);
}
- if (gSaveContext.timer1State == 0) {
+ if (gSaveContext.timerState == 0) {
if (((D_80125A58 == 1) || (D_80125A58 == 2) || (D_80125A58 == 4)) && ((gSaveContext.health >> 1) != 0)) {
- gSaveContext.timer1State = 1;
+ gSaveContext.timerState = 1;
gSaveContext.timerX[0] = 140;
gSaveContext.timerY[0] = 80;
D_80125A5C = 1;
}
} else {
- if (((D_80125A58 == 0) || (D_80125A58 == 3)) && (gSaveContext.timer1State < 5)) {
- gSaveContext.timer1State = 0;
+ if (((D_80125A58 == 0) || (D_80125A58 == 3)) && (gSaveContext.timerState < 5)) {
+ gSaveContext.timerState = 0;
}
}
diff --git a/soh/src/code/z_sram.c b/soh/src/code/z_sram.c
index d6141d78b..4de491fa2 100644
--- a/soh/src/code/z_sram.c
+++ b/soh/src/code/z_sram.c
@@ -7,6 +7,7 @@
#include "soh/Enhancements/randomizer/savefile.h"
#include "soh/OTRGlobals.h"
#include "soh/SaveManager.h"
+#include "soh/ResourceManagerHelpers.h"
#define NUM_DUNGEONS 8
#define NUM_COWS 10
@@ -238,6 +239,11 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
gSaveContext.linkAge = 1;
gSaveContext.dayTime = 0x6AAB;
gSaveContext.cutsceneIndex = 0xFFF1;
+ if (ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL && gSaveContext.language != LANGUAGE_JPN) {
+ gSaveContext.ship.filenameLanguage = NAME_LANGUAGE_PAL;
+ } else { // GAME_REGION_NTSC
+ gSaveContext.ship.filenameLanguage = (gSaveContext.language == LANGUAGE_JPN) ? NAME_LANGUAGE_NTSC_JPN : NAME_LANGUAGE_NTSC_ENG;
+ }
if ((fileChooseCtx->buttonIndex == 0 && CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0))) {
gSaveContext.cutsceneIndex = 0;