Start extracting text data

This commit is contained in:
YohannDR 2023-10-20 01:07:21 +02:00
parent dcb4b09d1a
commit e0f6976efb
14 changed files with 2133 additions and 24 deletions

View File

@ -41,6 +41,7 @@ PREPROC = tools/preproc/preproc
ASFLAGS = -mcpu=arm7tdmi
CFLAGS = -Werror -O2 -mthumb-interwork -fhex-asm -f2003-patch
CPPFLAGS = -nostdinc -Iinclude/
PREPROCFLAGS = charmap.txt
# Objects
CSRC = $(wildcard src/**.c) $(wildcard src/**/**.c) $(wildcard src/**/**/**.c)
@ -123,7 +124,7 @@ $(ELF) $(MAP): $(OBJ) linker.ld
%.s: %.c
$(MSG) CC $@
$Q$(PREPROC) $< | $(CPP) $(CPPFLAGS) | $(CC) -o $@ $(CFLAGS) && printf '\t.align 2, 0 @ dont insert nops\n' >> $@
$Q$(PREPROC) $< $(PREPROCFLAGS) | $(CPP) $(CPPFLAGS) | $(CC) -o $@ $(CFLAGS) && printf '\t.align 2, 0 @ dont insert nops\n' >> $@
src/sram/%.s: CFLAGS = -O1 -mthumb-interwork -fhex-asm
src/sram/%.s: src/sram/%.c

View File

@ -4,7 +4,7 @@ This is a work in progress decompilation of Metroid - Zero Mission.
2673/2721 functions decompiled (98.24%, 48 left)
0x35b9c0/0x76b014 bytes of data not in blobs (45.27%, 0x40f654 left)
0x388ac0/0x76b014 bytes of data not in blobs (47.63%, 0x3e2554 left)
Progress can be seen here : https://docs.google.com/spreadsheets/d/1X8XarD5evY8ZI7r_GQqh1pYmdVMbBcINYfRBUlogmKY/edit#gid=0

1317
charmap.txt Normal file

File diff suppressed because it is too large Load Diff

281
charmap_backup.txt Normal file
View File

@ -0,0 +1,281 @@
'1' = 005E
'0' = 00F0
'1' = 00F1
'2' = 00F2
'3' = 00F3
'4' = 00F4
'5' = 00F5
'6' = 00F6
'7' = 00F7
'8' = 00F8
'9' = 00F9
'¥' = 0345
'¥' = 045C
'ª' = 034A
'º' = 035A
'=' = 0400
'!' = 0401
'”' = 0402
'#' = 0403
'$' = 0404
'%' = 0405
'&' = 0406
''' = 0407
'(' = 0408
')' = 0409
'*' = 040A
'+' = 040B
',' = 040C
'-' = 040D
'.' = 040E
'/' = 040F
'0' = 0410
'1' = 0411
'2' = 0412
'3' = 0413
'4' = 0414
'5' = 0415
'6' = 0416
'7' = 0417
'8' = 0418
'9' = 0419
':' = 041A
';' = 041B
'Ü' = 041C
'ü' = 041D
'“' = 041E
'?' = 041F
'A' = 0441
'B' = 0442
'C' = 0443
'D' = 0444
'E' = 0445
'F' = 0446
'G' = 0447
'H' = 0448
'I' = 0449
'J' = 044A
'K' = 044B
'L' = 044C
'M' = 044D
'N' = 044E
'O' = 044F
'P' = 0450
'Q' = 0451
'R' = 0452
'S' = 0453
'T' = 0454
'U' = 0455
'V' = 0456
'W' = 0457
'X' = 0458
'Y' = 0459
'Z' = 045A
'[' = 045B
']' = 045D
'a' = 0481
'b' = 0482
'c' = 0483
'd' = 0484
'e' = 0485
'f' = 0486
'g' = 0487
'h' = 0488
'i' = 0489
'j' = 048A
'k' = 048B
'l' = 048C
'm' = 048D
'n' = 048E
'o' = 048F
'p' = 0490
'q' = 0491
'r' = 0492
's' = 0493
't' = 0494
'u' = 0495
'v' = 0496
'w' = 0497
'x' = 0498
'y' = 0499
'z' = 049A
'{' = 049B
'|' = 049C
'}' = 049D
DEL = 049F
'。' = 04C2
'「' = 04C4
'」' = 04C6
'、' = 04C8
'・' = 04CA
'ヲ' = 04CC
'ァ' = 04CE
'ィ' = 04D0
'ゥ' = 04D2
'ェ' = 04D4
'ォ' = 04D6
'ャ' = 04D8
'ュ' = 04DA
'ョ' = 04DC
'ッ' = 04DE
'ー' = 0500
'ア' = 0502
'イ' = 0504
'ウ' = 0506
'エ' = 0508
'オ' = 050A
'カ' = 050C
'キ' = 050E
'ク' = 0510
'ケ' = 0512
'コ' = 0514
'サ' = 0516
'シ' = 0518
'ス' = 051A
'セ' = 051C
'ソ' = 051E
'タ' = 0540
'チ' = 0542
'ツ' = 0544
'テ' = 0546
'ト' = 0548
'ナ' = 054A
'ニ' = 054C
'ヌ' = 054E
'ネ' = 0550
'' = 0552
'ハ' = 0554
'ヒ' = 0556
'フ' = 0558
'ヘ' = 055A
'ホ' = 055C
'マ' = 055E
'ミ' = 0580
'ム' = 0582
'メ' = 0584
'モ' = 0586
'ヤ' = 0588
'ユ' = 058A
'ヨ' = 058C
'ラ' = 058E
'リ' = 0590
'ル' = 0592
'レ' = 0594
'ロ' = 0596
'ワ' = 0598
'ン' = 059A
'゛' = 059C
'゜' = 059E
'ダ' = 05C0
'ヂ' = 05C2
'ヅ' = 05C4
'デ' = 05C6
'ド' = 05C8
'バ' = 05D4
'ビ' = 05D6
'ブ' = 05D8
'ベ' = 05DA
'ボ' = 05DC
'パ' = 05DE
'ピ' = 0600
'プ' = 0602
'ペ' = 0604
'ポ' = 0606
'ガ' = 060C
'ギ' = 060E
'グ' = 0610
'ゲ' = 0612
'ゴ' = 0614
'ザ' = 0616
'ジ' = 0618
'ズ' = 061A
'ゼ' = 061C
'ゾ' = 061E
'を' = 064C
'ぁ' = 064E
'ぃ' = 0650
'ぅ' = 0652
'ぇ' = 0654
'ぉ' = 0656
'ゃ' = 0658
'ゅ' = 065A
'ょ' = 065C
'っ' = 065E
'あ' = 0682
'い' = 0684
'う' = 0686
'え' = 0688
'お' = 068A
'か' = 068C
'き' = 068E
'く' = 0690
'け' = 0692
'こ' = 0694
'さ' = 0696
'し' = 0698
'す' = 069A
'せ' = 069C
'そ' = 069E
'た' = 06C0
'ち' = 06C2
'つ' = 06C4
'て' = 06C6
'と' = 06C8
'な' = 06CA
'に' = 06CC
'ぬ' = 06CE
'ね' = 06D0
'の' = 06D2
'は' = 06D4
'ひ' = 06D6
'ふ' = 06D8
'へ' = 06DA
'ほ' = 06DC
'ま' = 06DE
'み' = 0700
'む' = 0702
'め' = 0704
'も' = 0706
'や' = 0708
'ゆ' = 070A
'よ' = 070C
'ら' = 070E
'り' = 0710
'る' = 0712
'れ' = 0714
'ろ' = 0716
'わ' = 0718
'ん' = 071A
'だ' = 0740
'ぢ' = 0742
'づ' = 0744
'で' = 0746
'ど' = 0748
'ば' = 0754
'び' = 0756
'ぶ' = 0758
'べ' = 075A
'ぼ' = 075C
'ぱ' = 075E
'ぴ' = 0780
'ぷ' = 0782
'ぺ' = 0784
'ぽ' = 0786
'が' = 078C
'ぎ' = 078E
'ぐ' = 0790
'げ' = 0792
'ご' = 0794
'ざ' = 0796
'じ' = 0798
'ず' = 079A
'ぜ' = 079C
'ぞ' = 079E
'X' = 07C0
'~' = 07C6
'『' = 07C8
'』' = 07CA
'℃' = 07CC
'応' = 0FD8
'壊' = 145C

View File

@ -1122,6 +1122,10 @@ menus/EraseSram/QuestionEnglish.gfx.lz;1006;0x413c64;4
menus/EraseSram/Box.tt;137;0x414c1c;4
menus/EraseSram/Background.tt;368;0x414e40;4
# Text
characters_graphics.gfx;180224;0x415460;1
# Pause screen
menus/PauseScreen/40dd10.pal;96;0x40dd10;2
@ -2697,7 +2701,7 @@ Blob_2320ec_2376a8.bin;21948;0x2320ec;1
Blob_238b68_23a5bc.bin;6740;0x238b68;1
Blob_2d5ba0_2d7ae7.bin;7988;0x2d5ba0;1
Blob_34099c_345868.bin;20172;0x34099c;1
Blob_415460_446d68.bin;203016;0x415460;1
Blob_442560_446d68.bin;18440;0x442560;1
Blob_479400_4bfee4.bin;289508;0x479400;1
Blob_60c630_74f8b4.bin;1323652;0x60c630;1
Blob_754bd0_75e6a8.bin;39640;0x754bd0;1

View File

@ -2,8 +2,212 @@
#define TEXT_DATA_H
#include "types.h"
#include "structs/text.h"
extern const u8 sCharactersGfx[176 * 1024];
extern const u16 sJapaneseText_Message_Dummy[];
extern const u16 sJapaneseText_Message_EnergyTankAcquired[];
extern const u16 sJapaneseText_Message_MissileTankAcquired[];
extern const u16 sJapaneseText_Message_FirstMissileTank[];
extern const u16 sJapaneseText_Message_SuperMissileTankAcquired[];
extern const u16 sJapaneseText_Message_FirstSuperMissileTank[];
extern const u16 sJapaneseText_Message_PowerBombTankAqcuired[];
extern const u16 sJapaneseText_Message_FirstPowerBombTank[];
extern const u16 sJapaneseText_Message_LongBeam[];
extern const u16 sJapaneseText_Message_ChargeBeam[];
extern const u16 sJapaneseText_Message_IceBeam[];
extern const u16 sJapaneseText_Message_WaveBeam[];
extern const u16 sJapaneseText_Message_UnknownItemPlasma[];
extern const u16 sJapaneseText_Message_Bomb[];
extern const u16 sJapaneseText_Message_VariaSuit[];
extern const u16 sJapaneseText_Message_UnknownItemGravity[];
extern const u16 sJapaneseText_Message_MorphBall[];
extern const u16 sJapaneseText_Message_SpeedBooster[];
extern const u16 sJapaneseText_Message_HighJump[];
extern const u16 sJapaneseText_Message_ScrewAttack[];
extern const u16 sJapaneseText_Message_UnknownItemSpaceJump[];
extern const u16 sJapaneseText_Message_PowerGrip[];
extern const u16 sJapaneseText_Message_SavePrompt[];
extern const u16 sJapaneseText_Message_SaveComplete[];
extern const u16 sJapaneseText_Message_WeaponRessuplyComplete[];
extern const u16 sJapaneseText_Message_EnergyTankRechargeComplete[];
extern const u16 sJapaneseText_Message_WeaponsAndEnergyRestored[];
extern const u16 sJapaneseText_Message_BrinstarMap[];
extern const u16 sJapaneseText_Message_KraidMap[];
extern const u16 sJapaneseText_Message_NorfairMap[];
extern const u16 sJapaneseText_Message_RidleyMap[];
extern const u16 sJapaneseText_Message_MotherShipMap[];
extern const u16 sJapaneseText_Message_FullyPoweredSuit[];
extern const u16 sJapaneseText_Message_ZebesEscape[];
extern const u16 sJapaneseText_Message_ChozodiaEscape[];
extern const u16 sJapaneseText_Message_EnemyLocationAbnormal[];
extern const u16 sJapaneseText_Message_ActivateEasySleep[];
extern const u16 sJapaneseText_Message_PressSelectLAndR[];
extern const u16 sJapaneseText_Message_EasySleepPrompt[];
extern const u16 sJapaneseText_Location_Brinstar[];
extern const u16 sJapaneseText_Location_Kraid[];
extern const u16 sJapaneseText_Location_Norfair[];
extern const u16 sJapaneseText_Location_Ridley[];
extern const u16 sJapaneseText_Location_Tourian[];
extern const u16 sJapaneseText_Location_Crateria[];
extern const u16 sJapaneseText_Location_Chozodia[];
extern const u16 sJapaneseText_Location_Mothership[];
extern const u16 sJapaneseText_Location_PlanetZebes[];
extern const u16 sJapaneseText_Location_SaveRoom[];
extern const u16 sJapaneseText_Location_ResearchRoom[];
extern const u16 sJapaneseText_Location_MapRoom[];
extern const u16 sJapaneseText_Location_ChozoRuins[];
extern const u16 sJapaneseText_Location_Starship[];
extern const u16 sJapaneseText_Location_Unused7[];
extern const u16 sJapaneseText_Location_Unused8[];
extern const u16 sJapaneseText_Location_Unused9[];
extern const u16 sJapaneseText_Location_Unused10[];
extern const u16 sJapaneseText_Location_Unused11[];
extern const u16 sJapaneseText_Location_Unused12[];
extern const u16 sJapaneseText_Location_Unused13[];
extern const u16 sJapaneseText_Location_Unused14[];
extern const u16 sJapaneseText_Location_Unused15[];
extern const u16 sJapaneseText_Location_Unused16[];
extern const u16 sJapaneseText_Location_Unused17[];
extern const u16 sJapaneseText_Location_Unused18[];
extern const u16 sHiraganaText_Message_Dummy[];
extern const u16 sHiraganaText_Message_EnergyTankAcquired[];
extern const u16 sHiraganaText_Message_MissileTankAcquired[];
extern const u16 sHiraganaText_Message_FirstMissileTank[];
extern const u16 sHiraganaText_Message_SuperMissileTankAcquired[];
extern const u16 sHiraganaText_Message_FirstSuperMissileTank[];
extern const u16 sHiraganaText_Message_PowerBombTankAqcuired[];
extern const u16 sHiraganaText_Message_FirstPowerBombTank[];
extern const u16 sHiraganaText_Message_LongBeam[];
extern const u16 sHiraganaText_Message_ChargeBeam[];
extern const u16 sHiraganaText_Message_IceBeam[];
extern const u16 sHiraganaText_Message_WaveBeam[];
extern const u16 sHiraganaText_Message_UnknownItemPlasma[];
extern const u16 sHiraganaText_Message_Bomb[];
extern const u16 sHiraganaText_Message_VariaSuit[];
extern const u16 sHiraganaText_Message_UnknownItemGravity[];
extern const u16 sHiraganaText_Message_MorphBall[];
extern const u16 sHiraganaText_Message_SpeedBooster[];
extern const u16 sHiraganaText_Message_HighJump[];
extern const u16 sHiraganaText_Message_ScrewAttack[];
extern const u16 sHiraganaText_Message_UnknownItemSpaceJump[];
extern const u16 sHiraganaText_Message_PowerGrip[];
extern const u16 sHiraganaText_Message_SavePrompt[];
extern const u16 sHiraganaText_Message_SaveComplete[];
extern const u16 sHiraganaText_Message_WeaponRessuplyComplete[];
extern const u16 sHiraganaText_Message_EnergyTankRechargeComplete[];
extern const u16 sHiraganaText_Message_WeaponsAndEnergyRestored[];
extern const u16 sHiraganaText_Message_BrinstarMap[];
extern const u16 sHiraganaText_Message_KraidMap[];
extern const u16 sHiraganaText_Message_NorfairMap[];
extern const u16 sHiraganaText_Message_RidleyMap[];
extern const u16 sHiraganaText_Message_MotherShipMap[];
extern const u16 sHiraganaText_Message_FullyPoweredSuit[];
extern const u16 sHiraganaText_Message_ZebesEscape[];
extern const u16 sHiraganaText_Message_ChozodiaEscape[];
extern const u16 sHiraganaText_Message_EnemyLocationAbnormal[];
extern const u16 sHiraganaText_Message_ActivateEasySleep[];
extern const u16 sHiraganaText_Message_PressSelectLAndR[];
extern const u16 sHiraganaText_Message_EasySleepPrompt[];
extern const u16 sHiraganaText_Location_Brinstar[];
extern const u16 sHiraganaText_Location_Kraid[];
extern const u16 sHiraganaText_Location_Norfair[];
extern const u16 sHiraganaText_Location_Ridley[];
extern const u16 sHiraganaText_Location_Tourian[];
extern const u16 sHiraganaText_Location_Crateria[];
extern const u16 sHiraganaText_Location_Chozodia[];
extern const u16 sHiraganaText_Location_Mothership[];
extern const u16 sHiraganaText_Location_PlanetZebes[];
extern const u16 sHiraganaText_Location_SaveRoom[];
extern const u16 sHiraganaText_Location_ResearchRoom[];
extern const u16 sHiraganaText_Location_MapRoom[];
extern const u16 sHiraganaText_Location_ChozoRuins[];
extern const u16 sHiraganaText_Location_Starship[];
extern const u16 sHirganaText_Location_Unused7[];
extern const u16 sHirganaText_Location_Unused8[];
extern const u16 sHirganaText_Location_Unused9[];
extern const u16 sHirganaText_Location_Unused10[];
extern const u16 sHirganaText_Location_Unused11[];
extern const u16 sHirganaText_Location_Unused12[];
extern const u16 sHirganaText_Location_Unused13[];
extern const u16 sHirganaText_Location_Unused14[];
extern const u16 sHirganaText_Location_Unused15[];
extern const u16 sHirganaText_Location_Unused16[];
extern const u16 sHirganaText_Location_Unused17[];
extern const u16 sHirganaText_Location_Unused18[];
extern const u16 sEnglishText_Message_Dummy[];
extern const u16 sEnglishText_Message_EnergyTankAcquired[];
extern const u16 sEnglishText_Message_MissileTankAcquired[];
extern const u16 sEnglishText_Message_FirstMissileTank[];
extern const u16 sEnglishText_Message_SuperMissileTankAcquired[];
extern const u16 sEnglishText_Message_FirstSuperMissileTank[];
extern const u16 sEnglishText_Message_PowerBombTankAqcuired[];
extern const u16 sEnglishText_Message_FirstPowerBombTank[];
extern const u16 sEnglishText_Message_LongBeam[];
extern const u16 sEnglishText_Message_ChargeBeam[];
extern const u16 sEnglishText_Message_IceBeam[];
extern const u16 sEnglishText_Message_WaveBeam[];
extern const u16 sEnglishText_Message_UnknownItemPlasma[];
extern const u16 sEnglishText_Message_Bomb[];
extern const u16 sEnglishText_Message_VariaSuit[];
extern const u16 sEnglishText_Message_UnknownItemGravity[];
extern const u16 sEnglishText_Message_MorphBall[];
extern const u16 sEnglishText_Message_SpeedBooster[];
extern const u16 sEnglishText_Message_HighJump[];
extern const u16 sEnglishText_Message_ScrewAttack[];
extern const u16 sEnglishText_Message_UnknownItemSpaceJump[];
extern const u16 sEnglishText_Message_PowerGrip[];
extern const u16 sEnglishText_Message_SavePrompt[];
extern const u16 sEnglishText_Message_SaveComplete[];
extern const u16 sEnglishText_Message_WeaponRessuplyComplete[];
extern const u16 sEnglishText_Message_EnergyTankRechargeComplete[];
extern const u16 sEnglishText_Message_WeaponsAndEnergyRestored[];
extern const u16 sEnglishText_Message_BrinstarMap[];
extern const u16 sEnglishText_Message_KraidMap[];
extern const u16 sEnglishText_Message_NorfairMap[];
extern const u16 sEnglishText_Message_RidleyMap[];
extern const u16 sEnglishText_Message_MotherShipMap[];
extern const u16 sEnglishText_Message_FullyPoweredSuit[];
extern const u16 sEnglishText_Message_ZebesEscape[];
extern const u16 sEnglishText_Message_ChozodiaEscape[];
extern const u16 sEnglishText_Message_EnemyLocationAbnormal[];
extern const u16 sEnglishText_Message_ActivateEasySleep[];
extern const u16 sEnglishText_Message_PressSelectLAndR[];
extern const u16 sEnglishText_Message_EasySleepPrompt[];
extern const u16 sEnglishText_Location_Brinstar[];
extern const u16 sEnglishText_Location_Kraid[];
extern const u16 sEnglishText_Location_Norfair[];
extern const u16 sEnglishText_Location_Ridley[];
extern const u16 sEnglishText_Location_Tourian[];
extern const u16 sEnglishText_Location_Crateria[];
extern const u16 sEnglishText_Location_Chozodia[];
extern const u16 sEnglishText_Location_Mothership[];
extern const u16 sEnglishText_Location_PlanetZebes[];
extern const u16 sEnglishText_Location_SaveRoom[];
extern const u16 sEnglishText_Location_ResearchRoom[];
extern const u16 sEnglishText_Location_MapRoom[];
extern const u16 sEnglishText_Location_ChozoRuins[];
extern const u16 sEnglishText_Location_Starship[];
extern const u16 sEnglishText_Location_Unused7[];
extern const u16 sEnglishText_Location_Unused8[];
extern const u16 sEnglishText_Location_Unused9[];
extern const u16 sEnglishText_Location_Unused10[];
extern const u16 sEnglishText_Location_Unused11[];
extern const u16 sEnglishText_Location_Unused12[];
extern const u16 sEnglishText_Location_Unused13[];
extern const u16 sEnglishText_Location_Unused14[];
extern const u16 sEnglishText_Location_Unused15[];
extern const u16 sEnglishText_Location_Unused16[];
extern const u16 sEnglishText_Location_Unused17[];
extern const u16 sEnglishText_Location_Unused18[];
// Temp
extern const u16** const sStoryTextPointers[7];
extern const u16** const sLocationTextpointers[7];
@ -11,8 +215,6 @@ extern const u16** const sMessageTextpointers[7];
extern const u16** const sFileScreenTextPointers[7];
extern const u16** const sDescriptionTextPointers[7];
extern const u8 sCharactersGfx[180224];
extern u32 sArray_7602f0[9];
extern u32 sArray_760314[9];
extern u32 sArray_760338[24];

View File

@ -176,6 +176,7 @@
#define PEN_GET_ENERGY(pen) (LOW_BYTE((pen) >> 24))
#define INCTEXT(x) {0}
#define INCBIN(...) {0}
#define INCBIN_U8 INCBIN

View File

@ -694,6 +694,7 @@ SECTIONS {
src/data/menus/pause_screen_map_data.o(.rodata);
src/data/save_file_data.o(.rodata);
src/data/menus/erase_sram_data.o(.rodata);
src/data/text_data.o(.rodata);
/* 415460-446d68 */
src/data/menus/title_screen_data.o(.rodata);
src/data/menus/game_over_data.o(.rodata);

View File

@ -381,5 +381,3 @@ const struct OamArray sEraseSramMenuOam[7] = {
.preAction = OAM_ARRAY_PRE_ACTION_RESET_FRAME
},
};
static const u8 sTempArray_415460[0x31908] = INCBIN_U8("data/Blob_415460_446d68.bin");

View File

@ -1,4 +1,213 @@
#include "data/text_data.h"
#include "macros.h"
#include "constants/text.h"
const u8 sCharactersGfx[176 * 1024] = INCBIN_U8("data/characters_graphics.gfx");
const u16 sJapaneseText_Message_Dummy[] = INCTEXT("{WIDTH(98)}ダミー\n{WIDTH(110)}");
const u16 sJapaneseText_Message_EnergyTankAcquired[] = INCTEXT("{WIDTH(38)}{COLOR(5)}ENERGY TANK エネルギータンク\n{WIDTH(62)}{COLOR(0)}体力の最大値が{UP}した");
const u16 sJapaneseText_Message_MissileTankAcquired[] = INCTEXT("{WIDTH(38)}{COLOR(5)}MISSILE TANK ミサイルタンク\n{WIDTH(34)}{COLOR(0)}保有できるミサイルの最大値が{UP}した");
const u16 sJapaneseText_Message_FirstMissileTank[] = INCTEXT("{WIDTH(38)}{COLOR(5)}MISSILE TANK ミサイルタンク\n{WIDTH(110)}");
const u16 sJapaneseText_Message_SuperMissileTankAcquired[] = INCTEXT("{WIDTH(2)}{COLOR(5)}SUPER MISSILE TANK スーパーミサイルタンク\n{WIDTH(18)}{COLOR(0)}保有できるスーパーミサイルの最大値が{UP}した");
const u16 sJapaneseText_Message_FirstSuperMissileTank[] = INCTEXT("{WIDTH(2)}{COLOR(5)}SUPER MISSILE TANK スーパーミサイルタンク\n{WIDTH(110)}");
const u16 sJapaneseText_Message_PowerBombTankAqcuired[] = INCTEXT("{WIDTH(23)}{COLOR(5)}POWER BOMB TANK パワーボムタンク\n{WIDTH(30)}{COLOR(0)}保有できるパワーボムの最大値が{UP}した");
const u16 sJapaneseText_Message_FirstPowerBombTank[] = INCTEXT("{WIDTH(23)}{COLOR(5)}POWER BOMB TANK パワーボムタンク\n{WIDTH(110)}");
const u16 sJapaneseText_Message_LongBeam[] = INCTEXT("{WIDTH(52)}{COLOR(5)}LONG BEAM ロングビーム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_ChargeBeam[] = INCTEXT("{WIDTH(40)}{COLOR(5)}CHARGE BEAM チャージビーム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_IceBeam[] = INCTEXT("{WIDTH(56)}{COLOR(5)}ICE BEAM アイスビーム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_WaveBeam[] = INCTEXT("{WIDTH(46)}{COLOR(5)}WAVE BEAM ウェイブビーム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_UnknownItemPlasma[] = INCTEXT("{WIDTH(84)}{COLOR(5)}未詳アイテム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_Bomb[] = INCTEXT("{WIDTH(84)}{COLOR(5)}BOMB ボム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_VariaSuit[] = INCTEXT("{WIDTH(50)}{COLOR(5)}VARIA SUIT バリアスーツ\n{WIDTH(110)}");
const u16 sJapaneseText_Message_UnknownItemGravity[] = INCTEXT("{WIDTH(84)}{COLOR(5)}未詳アイテム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_MorphBall[] = INCTEXT("{WIDTH(48)}{COLOR(5)}MORPH BALL モーフボール\n{WIDTH(110)}");
const u16 sJapaneseText_Message_SpeedBooster[] = INCTEXT("{WIDTH(26)}{COLOR(5)}SPEED BOOSTER スピードブースター\n{WIDTH(110)}");
const u16 sJapaneseText_Message_HighJump[] = INCTEXT("{WIDTH(58)}{COLOR(5)}HI-JUMP ハイジャンプ\n{WIDTH(110)}");
const u16 sJapaneseText_Message_ScrewAttack[] = INCTEXT("{WIDTH(30)}{COLOR(5)}SCREW ATTACK スクリューアタック\n{WIDTH(110)}");
const u16 sJapaneseText_Message_UnknownItemSpaceJump[] = INCTEXT("{WIDTH(84)}{COLOR(5)}未詳アイテム\n{WIDTH(110)}");
const u16 sJapaneseText_Message_PowerGrip[] = INCTEXT("{WIDTH(44)}{COLOR(5)}POWER GRIP パワーグリップ\n{WIDTH(110)}");
const u16 sJapaneseText_Message_SavePrompt[] = INCTEXT("{WIDTH(78)}セーブしますか?\n{WIDTH(94)}{YES}Yes{NO}No");
const u16 sJapaneseText_Message_SaveComplete[] = INCTEXT("{WIDTH(88)}セーブ完了\n{WIDTH(110)}");
const u16 sJapaneseText_Message_WeaponRessuplyComplete[] = INCTEXT("{WIDTH(100)}武器\n{WIDTH(82)}全補給 完了");
const u16 sJapaneseText_Message_EnergyTankRechargeComplete[] = INCTEXT("{WIDTH(100)}体力\n{WIDTH(82)}全回復{SPACE_JP}完了");
const u16 sJapaneseText_Message_WeaponsAndEnergyRestored[] = INCTEXT("{WIDTH(75)}武器 体力ともに\n{WIDTH(82)}全回復 完了");
const u16 sJapaneseText_Message_BrinstarMap[] = INCTEXT("{WIDTH(33)}{COLOR(9)}BRINSTAR{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を取得した\n{WIDTH(110)}");
const u16 sJapaneseText_Message_KraidMap[] = INCTEXT("{WIDTH(43)}{COLOR(8)}KRAID{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を取得した\n{WIDTH(110)}");
const u16 sJapaneseText_Message_NorfairMap[] = INCTEXT("{WIDTH(36)}{COLOR(6)}NORFAIR{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を取得した\n{WIDTH(110)}");
const u16 sJapaneseText_Message_RidleyMap[] = INCTEXT("{WIDTH(40)}{COLOR(7)}RIDLEY{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を取得した\n{WIDTH(110)}");
const u16 sJapaneseText_Message_MotherShipMap[] = INCTEXT("{WIDTH(36)}{COLOR(10)}マザーシップ{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を取得した\n{WIDTH(110)}");
const u16 sJapaneseText_Message_FullyPoweredSuit[] = INCTEXT("{WIDTH(46)}伝説の{COLOR(5)}パワードスーツ{COLOR(0)}を取得した\n{WIDTH(110)}");
const u16 sJapaneseText_Message_ZebesEscape[] = INCTEXT("{WIDTH(76)}自爆装置作動{BANG_BANG_JP}\n{WIDTH(88)}脱出せよ{BANG_BANG_JP}");
const u16 sJapaneseText_Message_ChozodiaEscape[] = INCTEXT("{WIDTH(76)}自爆装置作動{BANG_BANG_JP}\n{WIDTH(88)}脱出せよ{BANG_BANG_JP}");
const u16 sJapaneseText_Message_EnemyLocationAbnormal[] = INCTEXT("{WIDTH(69)}敵配置データが異常\n{WIDTH(24)}メッセージフレームが配置されていませんか?");
const u16 sJapaneseText_Message_ActivateEasySleep[] = INCTEXT("{WIDTH(53)}スリープモードに入りますか?\n{WIDTH(56)}スリープモードから戻る時は");
const u16 sJapaneseText_Message_PressSelectLAndR[] = INCTEXT("{WIDTH(50)}{Select_button} と {L_button_left} と {R_button_left} を\n{WIDTH(67)}同時に押してください");
const u16 sJapaneseText_Message_EasySleepPrompt[] = INCTEXT("{WIDTH(101)}Yes\n{WIDTH(104)}No");
const u16 sJapaneseText_Location_Brinstar[] = INCTEXT("{WIDTH(43)}BRINSTAR - ブリンスタ -");
const u16 sJapaneseText_Location_Kraid[] = INCTEXT("{WIDTH(57)}KRAID - クレイド -");
const u16 sJapaneseText_Location_Norfair[] = INCTEXT("{WIDTH(46)}NORFAIR - ノルフェア -");
const u16 sJapaneseText_Location_Ridley[] = INCTEXT("{WIDTH(54)}RIDLEY - リドリー -");
const u16 sJapaneseText_Location_Tourian[] = INCTEXT("{WIDTH(46)}TOURIAN - ツーリアン -");
const u16 sJapaneseText_Location_Crateria[] = INCTEXT("{WIDTH(43)}CRATERIA - クレテリア -");
const u16 sJapaneseText_Location_Chozodia[] = INCTEXT("{WIDTH(34)}CHOZODIA - チョウゾディア -");
const u16 sJapaneseText_Location_Mothership[] = INCTEXT("{WIDTH(47)}スペースパイレーツ{SPACE_JP}マザーシップ");
const u16 sJapaneseText_Location_PlanetZebes[] = INCTEXT("{WIDTH(84)}惑星ゼーベス");
const u16 sJapaneseText_Location_SaveRoom[] = INCTEXT("{WIDTH(86)}セーブルーム");
const u16 sJapaneseText_Location_ResearchRoom[] = INCTEXT("{WIDTH(78)}リチャージルーム");
const u16 sJapaneseText_Location_MapRoom[] = INCTEXT("{WIDTH(86)}マップルーム");
const u16 sJapaneseText_Location_ChozoRuins[] = INCTEXT("{WIDTH(90)}鳥人遺跡");
const u16 sJapaneseText_Location_Starship[] = INCTEXT("{WIDTH(86)}スターシップ");
const u16 sJapaneseText_Location_Unused7[] = INCTEXT("{WIDTH(98)}空き7");
const u16 sJapaneseText_Location_Unused8[] = INCTEXT("{WIDTH(97)}空き{NUMBER_8_JP}");
const u16 sJapaneseText_Location_Unused9[] = INCTEXT("{WIDTH(97)}空き{NUMBER_9_JP}");
const u16 sJapaneseText_Location_Unused10[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_0_JP}");
const u16 sJapaneseText_Location_Unused11[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_1_JP}");
const u16 sJapaneseText_Location_Unused12[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_2_JP}");
const u16 sJapaneseText_Location_Unused13[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_3_JP}");
const u16 sJapaneseText_Location_Unused14[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_4_JP}");
const u16 sJapaneseText_Location_Unused15[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_5_JP}");
const u16 sJapaneseText_Location_Unused16[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_6_JP}");
const u16 sJapaneseText_Location_Unused17[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_7_JP}");
const u16 sJapaneseText_Location_Unused18[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_8_JP}");
const u16 sHiraganaText_Message_Dummy[] = INCTEXT("{WIDTH(98)}ダミー\n{WIDTH(110)}");
const u16 sHiraganaText_Message_EnergyTankAcquired[] = INCTEXT("{WIDTH(78)}{COLOR(5)}エネルギータンク\n{WIDTH(40)}{COLOR(0)}たいりょくの{SPACE_JP}さいだいちが{SPACE_JP}あがった");
const u16 sHiraganaText_Message_MissileTankAcquired[] = INCTEXT("{WIDTH(82)}{COLOR(5)}ミサイルタンク\n{WIDTH(17)}{COLOR(0)}ミサイルを{SPACE_JP}もてるかずの{SPACE_JP}さいだいちが{SPACE_JP}あがった");
const u16 sHiraganaText_Message_FirstMissileTank[] = INCTEXT("{WIDTH(82)}{COLOR(5)}ミサイルタンク\n{WIDTH(110)}");
const u16 sHiraganaText_Message_SuperMissileTankAcquired[] = INCTEXT("{WIDTH(66)}{COLOR(5)}スーパーミサイルタンク\n{WIDTH(1)}{COLOR(0)}スーパーミサイルを{SPACE_JP}もてるかずの{SPACE_JP}さいだいちが{SPACE_JP}あがった");
const u16 sHiraganaText_Message_FirstSuperMissileTank[] = INCTEXT("{WIDTH(66)}{COLOR(5)}スーパーミサイルタンク\n{WIDTH(110)}");
const u16 sHiraganaText_Message_PowerBombTankAqcuired[] = INCTEXT("{WIDTH(78)}{COLOR(5)}パワーボムタンク\n{WIDTH(13)}{COLOR(0)}パワーボムを{SPACE_JP}もてるかずの{SPACE_JP}さいだいちが{SPACE_JP}あがった");
const u16 sHiraganaText_Message_FirstPowerBombTank[] = INCTEXT("{WIDTH(78)}{COLOR(5)}パワーボムタンク\n{WIDTH(110)}");
const u16 sHiraganaText_Message_LongBeam[] = INCTEXT("{WIDTH(86)}{COLOR(5)}ロングビーム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_ChargeBeam[] = INCTEXT("{WIDTH(82)}{COLOR(5)}チャージビーム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_IceBeam[] = INCTEXT("{WIDTH(86)}{COLOR(5)}アイスビーム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_WaveBeam[] = INCTEXT("{WIDTH(82)}{COLOR(5)}ウェイブビーム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_UnknownItemPlasma[] = INCTEXT("{WIDTH(56)}{COLOR(5)}なにか{SPACE_JP}わからない{SPACE_JP}アイテム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_Bomb[] = INCTEXT("{WIDTH(102)}{COLOR(5)}ボム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_VariaSuit[] = INCTEXT("{WIDTH(86)}{COLOR(5)}バリアスーツ\n{WIDTH(110)}");
const u16 sHiraganaText_Message_UnknownItemGravity[] = INCTEXT("{WIDTH(56)}{COLOR(5)}なにか{SPACE_JP}わからない{SPACE_JP}アイテム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_MorphBall[] = INCTEXT("{WIDTH(86)}{COLOR(5)}モーフボール\n{WIDTH(110)}");
const u16 sHiraganaText_Message_SpeedBooster[] = INCTEXT("{WIDTH(74)}{COLOR(5)}スピードブースター\n{WIDTH(110)}");
const u16 sHiraganaText_Message_HighJump[] = INCTEXT("{WIDTH(86)}{COLOR(5)}ハイジャンプ\n{WIDTH(110)}");
const u16 sHiraganaText_Message_ScrewAttack[] = INCTEXT("{WIDTH(74)}{COLOR(5)}スクリューアタック\n{WIDTH(110)}");
const u16 sHiraganaText_Message_UnknownItemSpaceJump[] = INCTEXT("{WIDTH(56)}{COLOR(5)}なにか{SPACE_JP}わからない{SPACE_JP}アイテム\n{WIDTH(110)}");
const u16 sHiraganaText_Message_PowerGrip[] = INCTEXT("{WIDTH(82)}{COLOR(5)}パワーグリップ\n{WIDTH(110)}");
const u16 sHiraganaText_Message_SavePrompt[] = INCTEXT("{WIDTH(78)}セーブしますか?\n{WIDTH(90)}{YES}はい{NO}いいえ");
const u16 sHiraganaText_Message_SaveComplete[] = INCTEXT("{WIDTH(82)}セーブしました\n{WIDTH(110)}");
const u16 sHiraganaText_Message_WeaponRessuplyComplete[] = INCTEXT("{WIDTH(98)}ぶきが\n{WIDTH(56)}ぜんぶ{SPACE_JP}ほきゅう{SPACE_JP}されました");
const u16 sHiraganaText_Message_EnergyTankRechargeComplete[] = INCTEXT("{WIDTH(86)}たいりょくが\n{WIDTH(56)}ぜんぶ{SPACE_JP}かいふく{SPACE_JP}されました");
const u16 sHiraganaText_Message_WeaponsAndEnergyRestored[] = INCTEXT("{WIDTH(71)}ぶきも{SPACE_JP}たいりょくも\n{WIDTH(56)}ぜんぶ{SPACE_JP}かいふく{SPACE_JP}されました");
const u16 sHiraganaText_Message_BrinstarMap[] = INCTEXT("{WIDTH(35)}{COLOR(9)}ブリンスタ{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を{SPACE_JP}てにいれた\n{WIDTH(110)}");
const u16 sHiraganaText_Message_KraidMap[] = INCTEXT("{WIDTH(39)}{COLOR(8)}クレイド{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を てにいれた\n{WIDTH(110)}");
const u16 sHiraganaText_Message_NorfairMap[] = INCTEXT("{WIDTH(35)}{COLOR(6)}ノルフェア{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を{SPACE_JP}てにいれた\n{WIDTH(110)}");
const u16 sHiraganaText_Message_RidleyMap[] = INCTEXT("{WIDTH(39)}{COLOR(7)}リドリー{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を{SPACE_JP}てにいれた\n{WIDTH(110)}");
const u16 sHiraganaText_Message_MotherShipMap[] = INCTEXT("{WIDTH(23)}{COLOR(10)}うちゅうかいぞくせん{COLOR(0)}の{COLOR(5)}マップデータ{COLOR(0)}を{SPACE_JP}とった\n{WIDTH(110)}");
const u16 sHiraganaText_Message_FullyPoweredSuit[] = INCTEXT("{WIDTH(35)}でんせつの{COLOR(5)}パワードスーツ{COLOR(0)}を{SPACE_JP}てにいれた\n{WIDTH(110)}");
const u16 sHiraganaText_Message_ZebesEscape[] = INCTEXT("{WIDTH(67)}じばくそうち{SPACE_JP}さどう{BANG_BANG_JP}\n{WIDTH(78)}だっしゅつせよ{BANG_BANG_JP}");
const u16 sHiraganaText_Message_ChozodiaEscape[] = INCTEXT("{WIDTH(67)}じばくそうち{SPACE_JP}さどう{BANG_BANG_JP}\n{WIDTH(78)}だっしゅつせよ{BANG_BANG_JP}");
const u16 sHiraganaText_Message_EnemyLocationAbnormal[] = INCTEXT("{WIDTH(58)}てきはいちデータがいじょう\n{WIDTH(22)}メッセージフレームがはいちされていませんか?");
const u16 sHiraganaText_Message_ActivateEasySleep[] = INCTEXT("{WIDTH(50)}スリープモードにはいりますか?\n{WIDTH(50)}スリープモードからもどるときは");
const u16 sHiraganaText_Message_PressSelectLAndR[] = INCTEXT("{WIDTH(50)}{Select_button} と {L_button_left} と {R_button_left} を\n{WIDTH(66)}どうじにおしてください");
const u16 sHiraganaText_Message_EasySleepPrompt[] = INCTEXT("{WIDTH(102)}はい\n{WIDTH(98)}いいえ");
const u16 sHiraganaText_Location_Brinstar[] = INCTEXT("{WIDTH(90)}ブリンスタ");
const u16 sHiraganaText_Location_Kraid[] = INCTEXT("{WIDTH(94)}クレイド");
const u16 sHiraganaText_Location_Norfair[] = INCTEXT("{WIDTH(90)}ノルフェア");
const u16 sHiraganaText_Location_Ridley[] = INCTEXT("{WIDTH(94)}リドリー");
const u16 sHiraganaText_Location_Tourian[] = INCTEXT("{WIDTH(90)}ツーリアン");
const u16 sHiraganaText_Location_Crateria[] = INCTEXT("{WIDTH(90)}クレテリア");
const u16 sHiraganaText_Location_Chozodia[] = INCTEXT("{WIDTH(82)}チョウゾディア");
const u16 sHiraganaText_Location_Mothership[] = INCTEXT("{WIDTH(70)}うちゅうかいぞくせん");
const u16 sHiraganaText_Location_PlanetZebes[] = INCTEXT("{WIDTH(78)}わくせいゼーベス");
const u16 sHiraganaText_Location_SaveRoom[] = INCTEXT("{WIDTH(86)}セーブルーム");
const u16 sHiraganaText_Location_ResearchRoom[] = INCTEXT("{WIDTH(78)}リチャージルーム");
const u16 sHiraganaText_Location_MapRoom[] = INCTEXT("{WIDTH(86)}マップルーム");
const u16 sHiraganaText_Location_ChozoRuins[] = INCTEXT("{WIDTH(78)}ちょうじんいせき");
const u16 sHiraganaText_Location_Starship[] = INCTEXT("{WIDTH(86)}スターシップ");
const u16 sHirganaText_Location_Unused7[] = INCTEXT("{WIDTH(98)}空き7");
const u16 sHirganaText_Location_Unused8[] = INCTEXT("{WIDTH(97)}空き{NUMBER_8_JP}");
const u16 sHirganaText_Location_Unused9[] = INCTEXT("{WIDTH(97)}空き{NUMBER_9_JP}");
const u16 sHirganaText_Location_Unused10[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_0_JP}");
const u16 sHirganaText_Location_Unused11[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_1_JP}");
const u16 sHirganaText_Location_Unused12[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_2_JP}");
const u16 sHirganaText_Location_Unused13[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_3_JP}");
const u16 sHirganaText_Location_Unused14[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_4_JP}");
const u16 sHirganaText_Location_Unused15[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_5_JP}");
const u16 sHirganaText_Location_Unused16[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_6_JP}");
const u16 sHirganaText_Location_Unused17[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_7_JP}");
const u16 sHirganaText_Location_Unused18[] = INCTEXT("{WIDTH(93)}空き{NUMBER_1_JP}{NUMBER_8_JP}");
static const u8 sTempArray_442560[0x4808] = INCBIN_U8("data/Blob_442560_446d68.bin");
/*
const u16 sEnglishText_Message_Dummy[] = INCTEXT("");
const u16 sEnglishText_Message_EnergyTankAcquired[] = INCTEXT("");
const u16 sEnglishText_Message_MissileTankAcquired[] = INCTEXT("");
const u16 sEnglishText_Message_FirstMissileTank[] = INCTEXT("");
const u16 sEnglishText_Message_SuperMissileTankAcquired[] = INCTEXT("");
const u16 sEnglishText_Message_FirstSuperMissileTank[] = INCTEXT("");
const u16 sEnglishText_Message_PowerBombTankAqcuired[] = INCTEXT("");
const u16 sEnglishText_Message_FirstPowerBombTank[] = INCTEXT("");
const u16 sEnglishText_Message_LongBeam[] = INCTEXT("");
const u16 sEnglishText_Message_ChargeBeam[] = INCTEXT("");
const u16 sEnglishText_Message_IceBeam[] = INCTEXT("");
const u16 sEnglishText_Message_WaveBeam[] = INCTEXT("");
const u16 sEnglishText_Message_UnknownItemPlasma[] = INCTEXT("");
const u16 sEnglishText_Message_Bomb[] = INCTEXT("");
const u16 sEnglishText_Message_VariaSuit[] = INCTEXT("");
const u16 sEnglishText_Message_UnknownItemGravity[] = INCTEXT("");
const u16 sEnglishText_Message_MorphBall[] = INCTEXT("");
const u16 sEnglishText_Message_SpeedBooster[] = INCTEXT("");
const u16 sEnglishText_Message_HighJump[] = INCTEXT("");
const u16 sEnglishText_Message_ScrewAttack[] = INCTEXT("");
const u16 sEnglishText_Message_UnknownItemSpaceJump[] = INCTEXT("");
const u16 sEnglishText_Message_PowerGrip[] = INCTEXT("");
const u16 sEnglishText_Message_SavePrompt[] = INCTEXT("");
const u16 sEnglishText_Message_SaveComplete[] = INCTEXT("");
const u16 sEnglishText_Message_WeaponRessuplyComplete[] = INCTEXT("");
const u16 sEnglishText_Message_EnergyTankRechargeComplete[] = INCTEXT("");
const u16 sEnglishText_Message_WeaponsAndEnergyRestored[] = INCTEXT("");
const u16 sEnglishText_Message_BrinstarMap[] = INCTEXT("");
const u16 sEnglishText_Message_KraidMap[] = INCTEXT("");
const u16 sEnglishText_Message_NorfairMap[] = INCTEXT("");
const u16 sEnglishText_Message_RidleyMap[] = INCTEXT("");
const u16 sEnglishText_Message_MotherShipMap[] = INCTEXT("");
const u16 sEnglishText_Message_FullyPoweredSuit[] = INCTEXT("");
const u16 sEnglishText_Message_ZebesEscape[] = INCTEXT("");
const u16 sEnglishText_Message_ChozodiaEscape[] = INCTEXT("");
const u16 sEnglishText_Message_EnemyLocationAbnormal[] = INCTEXT("");
const u16 sEnglishText_Message_ActivateEasySleep[] = INCTEXT("");
const u16 sEnglishText_Message_PressSelectLAndR[] = INCTEXT("");
const u16 sEnglishText_Message_EasySleepPrompt[] = INCTEXT("");
const u16 sEnglishText_Location_Brinstar[] = INCTEXT("");
const u16 sEnglishText_Location_Kraid[] = INCTEXT("");
const u16 sEnglishText_Location_Norfair[] = INCTEXT("");
const u16 sEnglishText_Location_Ridley[] = INCTEXT("");
const u16 sEnglishText_Location_Tourian[] = INCTEXT("");
const u16 sEnglishText_Location_Crateria[] = INCTEXT("");
const u16 sEnglishText_Location_Chozodia[] = INCTEXT("");
const u16 sEnglishText_Location_Mothership[] = INCTEXT("");
const u16 sEnglishText_Location_PlanetZebes[] = INCTEXT("");
const u16 sEnglishText_Location_SaveRoom[] = INCTEXT("");
const u16 sEnglishText_Location_ResearchRoom[] = INCTEXT("");
const u16 sEnglishText_Location_MapRoom[] = INCTEXT("");
const u16 sEnglishText_Location_ChozoRuins[] = INCTEXT("");
const u16 sEnglishText_Location_Starship[] = INCTEXT("");
const u16 sEnglishText_Location_Unused7[] = INCTEXT("");
const u16 sEnglishText_Location_Unused8[] = INCTEXT("");
const u16 sEnglishText_Location_Unused9[] = INCTEXT("");
const u16 sEnglishText_Location_Unused10[] = INCTEXT("");
const u16 sEnglishText_Location_Unused11[] = INCTEXT("");
const u16 sEnglishText_Location_Unused12[] = INCTEXT("");
const u16 sEnglishText_Location_Unused13[] = INCTEXT("");
const u16 sEnglishText_Location_Unused14[] = INCTEXT("");
const u16 sEnglishText_Location_Unused15[] = INCTEXT("");
const u16 sEnglishText_Location_Unused16[] = INCTEXT("");
const u16 sEnglishText_Location_Unused17[] = INCTEXT("");
const u16 sEnglishText_Location_Unused18[] = INCTEXT("");
const u8 sCharacterWidths[1184] = {
0
@ -6,7 +215,7 @@ const u8 sCharacterWidths[1184] = {
const struct Message sMessage_Empty = {
.textIndex = 0,
.indent = 0,
.WIDTH = 0,
.timer = 0,
.color = 0,
.line = 0,
@ -21,7 +230,7 @@ const struct Message sMessage_Empty = {
const struct Message sMessageStoryText_Empty = {
.textIndex = 0,
.indent = 0,
.WIDTH = 0,
.timer = 0,
.color = 0,
.line = 0,
@ -36,7 +245,7 @@ const struct Message sMessageStoryText_Empty = {
const struct Message sMessageFileScreen_Empty = {
.textIndex = 0,
.indent = 0,
.WIDTH = 0,
.timer = 0,
.color = 0,
.line = 0,
@ -51,7 +260,7 @@ const struct Message sMessageFileScreen_Empty = {
const struct Message sMessageDescription_Empty = {
.textIndex = 0,
.indent = 0,
.WIDTH = 0,
.timer = 0,
.color = 0,
.line = 0,
@ -63,3 +272,4 @@ const struct Message sMessageDescription_Empty = {
.isMessage = FALSE,
.messageEnded = FALSE
};
*/

View File

@ -196,10 +196,13 @@ void CFile::TryConvertString()
long oldLineNum = m_lineNum;
bool noTerminator = false;
if (m_buffer[m_pos] != '_' || (m_pos > 0 && IsIdentifierChar(m_buffer[m_pos - 1])))
// printf("%c", m_buffer[m_pos]);
std::string identifier("INCTEXT");
if (!CheckIdentifier(identifier) || (m_pos > 0 && IsIdentifierChar(m_buffer[m_pos - 1])))
return;
m_pos++;
m_pos += identifier.size();
if (m_buffer[m_pos] == '_')
{
@ -228,7 +231,7 @@ void CFile::TryConvertString()
if (m_buffer[m_pos] == '"')
{
unsigned char s[kMaxStringLength];
unsigned short s[kMaxStringLength];
int length;
StringParser stringParser(m_buffer, m_size);
@ -241,8 +244,9 @@ void CFile::TryConvertString()
RaiseError(e.what());
}
// printf("\n\n%d ; %s\n\n", length, s);
for (int i = 0; i < length; i++)
printf("0x%02X, ", s[i]);
printf("0x%04X, ", s[i]);
}
else if (m_buffer[m_pos] == ')')
{
@ -263,7 +267,7 @@ void CFile::TryConvertString()
if (noTerminator)
std::printf(" }");
else
std::printf("0xFF }");
std::printf("CHAR_TERMINATOR }");
}
bool CFile::CheckIdentifier(const std::string& ident)

View File

@ -43,6 +43,66 @@ void PrintAsmBytes(unsigned char *s, int length)
}
}
void PreprocAsmFile(std::string filename)
{
std::stack<AsmFile> stack;
stack.push(AsmFile(filename));
for (;;)
{
while (stack.top().IsAtEnd())
{
stack.pop();
if (stack.empty())
return;
else
stack.top().OutputLocation();
}
Directive directive = stack.top().GetDirective();
switch (directive)
{
case Directive::Include:
stack.push(AsmFile(stack.top().ReadPath()));
stack.top().OutputLocation();
break;
case Directive::String:
{
unsigned char s[kMaxStringLength];
int length = stack.top().ReadString(s);
PrintAsmBytes(s, length);
break;
}
case Directive::Braille:
{
unsigned char s[kMaxStringLength];
int length = stack.top().ReadBraille(s);
PrintAsmBytes(s, length);
break;
}
case Directive::Unknown:
{
std::string globalLabel = stack.top().GetGlobalLabel();
if (globalLabel.length() != 0)
{
const char *s = globalLabel.c_str();
std::printf("%s: ; .global %s\n", s, s);
}
else
{
stack.top().OutputLine();
}
break;
}
}
}
}
void PreprocCFile(const char * filename, bool isStdin)
{
CFile cFile(filename, isStdin);
@ -72,18 +132,22 @@ char* GetFileExtension(char* filename)
int main(int argc, char **argv)
{
if (argc < 2 || argc > 3)
if (argc < 3 || argc > 4)
{
std::fprintf(stderr, "Usage: %s SRC_FILE [-i]\nwhere -i denotes if input is from stdin\n", argv[0]);
std::fprintf(stderr, "Usage: %s SRC_FILE CHARMAP_FILE [-i]\nwhere -i denotes if input is from stdin\n", argv[0]);
return 1;
}
g_charmap = new Charmap(argv[2]);
char* extension = GetFileExtension(argv[1]);
if (!extension)
FATAL_ERROR("\"%s\" has no file extension.\n", argv[1]);
if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) {
if ((extension[0] == 's') && extension[1] == 0)
PreprocAsmFile(argv[1]);
else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) {
if (argc == 4) {
if (argv[3][0] == '-' && argv[3][1] == 'i' && argv[3][2] == '\0') {
PreprocCFile(argv[1], true);
@ -97,4 +161,4 @@ int main(int argc, char **argv)
FATAL_ERROR("\"%s\" has an unknown file extension of \"%s\".\n", argv[1], extension);
return 0;
}
}

View File

@ -113,7 +113,8 @@ std::string StringParser::ReadBracketedConstants()
while (IsIdentifierChar(m_buffer[m_pos]))
m_pos++;
std::string sequence = g_charmap->Constant(std::string(&m_buffer[startPos], m_pos - startPos));
std::string txt = std::string(&m_buffer[startPos], m_pos - startPos);
std::string sequence = g_charmap->Constant(txt);
if (sequence.length() == 0)
{
@ -121,6 +122,22 @@ std::string StringParser::ReadBracketedConstants()
RaiseError("unknown constant '%s'", &m_buffer[startPos]);
}
if (m_buffer[m_pos] == '(')
{
m_pos++; // (
Integer integer = ReadInteger();
unsigned short mask = sequence[0] << 8 | (sequence[1] & 0xFF);
mask |= integer.value;
sequence[0] = mask >> 8;
sequence[1] = mask;
m_pos++; // )
}
totalSequence += sequence;
}
else if (IsAsciiDigit(m_buffer[m_pos]))
@ -166,7 +183,7 @@ std::string StringParser::ReadBracketedConstants()
}
// Reads a charmap string.
int StringParser::ParseString(long srcPos, unsigned char* dest, int& destLength)
int StringParser::ParseString(long srcPos, unsigned short* dest, int& destLength)
{
m_pos = srcPos;
@ -183,11 +200,17 @@ int StringParser::ParseString(long srcPos, unsigned char* dest, int& destLength)
{
std::string sequence = (m_buffer[m_pos] == '{') ? ReadBracketedConstants() : ReadCharOrEscape();
for (const char& c : sequence)
for (size_t i = 0; i < sequence.size(); i += 2)
{
if (destLength == kMaxStringLength)
RaiseError("mapped string longer than %d bytes", kMaxStringLength);
unsigned int c;
if (sequence[i] == 0)
c = sequence[i + 1] & 0xFF;
else
c = sequence[i] << 8 | (sequence[i + 1] & 0xFF);
dest[destLength++] = c;
}
}
@ -336,7 +359,10 @@ StringParser::Integer StringParser::ReadHex()
StringParser::Integer StringParser::ReadInteger()
{
if (!IsAsciiDigit(m_buffer[m_pos]))
{
// printf("\n\n\nXXXXXX\n%s\n\n\n", &m_buffer[m_pos]);
RaiseError("expected integer");
}
if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x')
{

View File

@ -29,7 +29,7 @@ class StringParser
{
public:
StringParser(char* buffer, long size) : m_buffer(buffer), m_size(size), m_pos(0) {}
int ParseString(long srcPos, unsigned char* dest, int &destLength);
int ParseString(long srcPos, unsigned short* dest, int &destLength);
private:
struct Integer