diff options
| author | inspectredc <78732756+inspectredc@users.noreply.github.com> | 2025-03-30 17:29:59 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-30 12:29:59 -0400 |
| commit | 6140b2ec8f06e37ce29385096a4425b2a7207736 (patch) | |
| tree | 538d871f2b00192beeedd464dc063b0dd9f81f4e /soh/src/code | |
| parent | 0e23adc237f37f8dc4aa3398f10c3b556fb83be1 (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.c | 14 | ||||
| -rw-r--r-- | soh/src/code/z_actor.c | 9 | ||||
| -rw-r--r-- | soh/src/code/z_construct.c | 25 | ||||
| -rw-r--r-- | soh/src/code/z_demo.c | 4 | ||||
| -rw-r--r-- | soh/src/code/z_game_over.c | 6 | ||||
| -rw-r--r-- | soh/src/code/z_kanfont.c | 4030 | ||||
| -rw-r--r-- | soh/src/code/z_kanji.c | 127 | ||||
| -rw-r--r-- | soh/src/code/z_message_PAL.c | 1330 | ||||
| -rw-r--r-- | soh/src/code/z_parameter.c | 225 | ||||
| -rw-r--r-- | soh/src/code/z_sram.c | 6 |
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; |
