Add 'data/' from commit '583b780994269da9be95e3494fb1445801a896ed'
git-subtree-dir: data git-subtree-mainline:30393ad424
git-subtree-split:583b780994
This commit is contained in:
commit
be222ce1da
|
@ -0,0 +1,5 @@
|
||||||
|
Label Address Format Comment
|
||||||
|
character_battle_sprite_tiles 0x25000 12 of 32 of TileNES2bpp
|
||||||
|
weapon_battle_sprite_tiles 0x26800 128 of TileNES2bpp
|
||||||
|
title_logo_tiles 0x27400 96 of TileNES2bpp "6x8 logo, gothic text - 8x2 ""FINAL"", 12x2 ""FANTASY"", 8x1 ""ソタチツテトナニ"""
|
||||||
|
character_battle_sprite_palettes 12 of Palette FINDME
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -0,0 +1,3 @@
|
||||||
|
Label Address Format Comment
|
||||||
|
character_battle_sprite_tiles 0x25E00 9 of 32 of TileNES2bpp
|
||||||
|
character_battle_sprite_palettes 9 of Palette FINDME
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Label Address Format Comment
|
||||||
|
character_battle_sprite_tiles 0x50000 22 of 42 of TileNES2bpp
|
||||||
|
character_battle_sprite_palettes 22 of Palette FINDME
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
Label SNES PSX_file PSX_offset format Comment
|
||||||
|
character_battle_sprite_tiles 0xD0000 /mnu/men_bin.eng 14 of 64 of TileSNES4bpp FIXME - PSX
|
||||||
|
character_battle_sprite_piggy_tiles 0xD7000 48 of TileSNES4bpp FIXME - PSX
|
||||||
|
character_battle_sprite_golbez_tiles 0xD7600 27 of TileSNES4bpp FIXME - PSX
|
||||||
|
character_battle_sprite_anna_tiles 0xD7960 14 of TileSNES4bpp FIXME - PSX
|
||||||
|
character_battle_sprite_palettes 0xE7D00 /btl/ff5_btl.bin 16 of Palette16Of555 FIXME - PSX
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
Label SNES PSX_file PSX_offset format Comment
|
||||||
|
character_battle_sprite_stone_palette 0x00F807 N/A N/A Palette16Of555 Also 0x199835
|
||||||
|
character_battle_sprite_disabled_palette 0x00F867 /mnu/memsave.bin 0x000034 Palette16Of555
|
||||||
|
locations_bg_palettes 0x03BB00 /nar/ff5_binx.bin 0x03BF80 43 of Palette128Of555
|
||||||
|
font_glyphs_dialogue 0x03E800 256 of SNESTritile length 0x1800
|
||||||
|
sfx_brr_data 0x041E3F Use the below SPC pointers
|
||||||
|
sfx_brr_pointers 0x041F4F 8 of 2 of u16 SPC memory addresses not ROM. Start address followed by loop address.
|
||||||
|
sfx_adsrs 0x041F71 8 of u16
|
||||||
|
sfx_samplerates 0x041F83 8 of u16
|
||||||
|
sfx_data 0x041F95 Contains SPC pointers and tracks
|
||||||
|
bgm_song_pointers 0x043B97 72 of u24
|
||||||
|
bgm_instrument_brr_pointers 0x043C6F 35 of u24
|
||||||
|
bgm_instrument_loop_starts 0x043CD8 35 of u16
|
||||||
|
bgm_instrument_samplerates 0x043D1E 35 of u16
|
||||||
|
bgm_instrument_adsrs 0x043D64 35 of u16
|
||||||
|
bgm_instrument_indices 0x043DAA 72 of 16 of u16 length 0x900
|
||||||
|
enemy_battle_sprite_palettes 0x0ED000 See enemy_battle_sprite_data for pointers. Some are 8 colours instead of 16.
|
||||||
|
worldmap_blocks 0x0FF0C0 /nar/ff5_binx.bin 0x040300 3 of 4 of 192 of u8 # Top-left corners, top-right corners, bottom-left corners, bottom-right corners
|
||||||
|
worldmap_tiles.bias 0x0FF9C0 /nar/ff5_bin3.bin 0x03FB00 3 of 256 of u8 Add to each pixel of the mode7c tiles
|
||||||
|
worldmap_palettes 0x0FFCC0 /nar/ff5_binx.bin 0x040000 3 of Palette128Of555
|
||||||
|
enemy_stats 0x100000 384 of EnemyStats
|
||||||
|
enemy_battle_sprite_layouts_small 0x10D004 102 of 8 of u8 length 0x330
|
||||||
|
enemy_battle_sprite_layouts_large 0x10D334 72 of 16 of u16 length 0x900
|
||||||
|
enemy_battle_sprite_mini 0x10E003 4 of TileSNES4bpp length 0x80
|
||||||
|
enemy_battle_sprite_frog 0x10E083 4 of TileSNES4bpp length 0x80
|
||||||
|
enemy_battle_sprite_shadow 0x10E103 3 of TileSNES4bpp length 0x60
|
||||||
|
tbl_weapons 0x110000 128 of WeaponData length 0x600
|
||||||
|
tbl_armors 0x110600 96 of ArmorData length 0x480
|
||||||
|
tbl_items 0x110A80 32 of ItemData length 0x100
|
||||||
|
tbl_magic 0x110B80 256 of MagicData length 0x800
|
||||||
|
tbl_equip_types 0x112480 64 of 4 of u8 length 0x100 - Item Equipment type definitions (64x4 bytes, 2B weapon, 2B armor)
|
||||||
|
tbl_armors_elem_def 0x112580 64 of ElemDef length 0x140 - Item Armor Element defense 64x(5B - absorb, evade, immunity, half, weakness)
|
||||||
|
tbl_armors_status 0x1126C0 64 of StatusEffect length 0x1C0 - Item Armor Status defense 64x(7B - 4B Initial, 3B Immune)
|
||||||
|
tbl_prices_items 0x112A00 256 of ItemCost length 0x200
|
||||||
|
tbl_prices_magic 0x112C00 128 of ItemCost length 0x100
|
||||||
|
tbl_charlevels_exp 0x115000 99 of u24
|
||||||
|
tbl_charlevels_hp_base 0x115129 99 of u16
|
||||||
|
tbl_charlevels_mp_base 0x1151EF 99 of u16
|
||||||
|
ptrs_job_ability_lists 0x1152C0 21 of u16
|
||||||
|
job_ability_counts 0x1152EA 22 of u8
|
||||||
|
job_ability_lists 0x115300 length 0x12C - u16 ABP required, u8 ID. Pointers are from bank 0x110000 and start at $5300
|
||||||
|
tbl_char_stat_bonuses 0x11551E 5 of 4 of u8
|
||||||
|
tbl_job_base_stats 0x1156B0 22 of 4 of u8
|
||||||
|
tbl_job_default_equipment 0x115708 22 of 4 of u8
|
||||||
|
tbl_job_default_commands 0x115760 22 of 4 of u8
|
||||||
|
tbl_job_innates 0x1157B8 22 of u16
|
||||||
|
tbl_ability_stats_commands 0x115E00 256 of 4 of u8 length 0x400
|
||||||
|
tbl_ability_stats_passives 0x116308 33 of 4 of u8 length 0x84
|
||||||
|
character_initial_data 0x117000 4 of Character length 0x140
|
||||||
|
attack_layouts 0x117FA0 5 of 2048 of u8 length 0x2400
|
||||||
|
weapon_palettes 0x11A3A0
|
||||||
|
enemy_battle_status_sprite_palette 0x11A400 Palette16Of555
|
||||||
|
tiles_fist 0x11D710 /btl/ff5_btl.bin 0x021D10 TileSNES3bpp Also /mnu/men_bin.eng:0x00D910
|
||||||
|
font_glyphs_small 0x11F000 256 of TileSNES2bpp length 0x1000
|
||||||
|
character_battle_sprite_tiles 0x120000 /mnu/men_bin.eng 0x010200 5 of 22 of 48 of TileSNES4bpp
|
||||||
|
character_battle_sprite_palettes 0x14A3C0 /btl/ff5_btl.bin 0x0273C0 5 of 22 of Palette16Of555 Also /mnu/men_bin.eng:0x03A5C0
|
||||||
|
enemy_battle_sprite_data 0x14B180 384 of EnemySpriteData length 0x780
|
||||||
|
character_battle_sprite_layouts 0x14B997 /btl/ff5_btl.bin 0x028997 11 of 6 of u8
|
||||||
|
tbl_battle_backgrounds 0x14BA21 34 of BattleBackgroundData
|
||||||
|
battle_background_palettes 0x14BB31 84 of Palette16Of555
|
||||||
|
ptrs_battle_background_tile_animations 0x14C5B1 8 of u16 bank 0x140000 (0xD40000)
|
||||||
|
battle_background_tile_animations_data 0x14C5C1 see above
|
||||||
|
ptrs_battle_background_palette_animations 0x14C6CD 3 of u16 bank 0x140000 (0xD40000)
|
||||||
|
battle_background_palette_animations_data 0x14C6D3 see above
|
||||||
|
ptrs_battle_background_tilemap_flips 0x14C736 9 of u16 bank 0x140000 (0xD40000)
|
||||||
|
battle_background_tilemap_flips_data 0x14C75C see above
|
||||||
|
ptrs_battle_background_tilemaps 0x14C86D 28 of u16 bank 0x140000 (0xD40000)
|
||||||
|
? 0x14C8A5
|
||||||
|
battle_background_tilemaps_data 0x14E09B see above
|
||||||
|
enemy_battle_sprite_tiles 0x150000 See enemy_battle_sprite_data for pointers
|
||||||
|
ptrs_battle_background_tileset_skips 0x184157 21 of u24 RAM addresses, subtract 0x7FC000 from results to get offset from tileset
|
||||||
|
ptrs_battle_background_tilesets 0x184196 21 of u24 ROM addresses, subtract 0xC00000
|
||||||
|
lzss_battle_background_tilesets 0x1841D5 see pointers above, 4bpp
|
||||||
|
? 0x18DE36
|
||||||
|
ptrs_event_data 0x18E080 687 of u16
|
||||||
|
event_data 0x18E5E0 see above, links to extended event data
|
||||||
|
tiles_attack_anims 0x190000
|
||||||
|
ptrs_anim_unk1 0x19A486 405 of u16 bank offsets to below
|
||||||
|
0x19A7B0 padding
|
||||||
|
anim_unk1 0x19A7C0 see above
|
||||||
|
ptrs_anim_unk2 0x19B35E 1669 of u16 bank offsets to below, animation frame data??? also to anim_unk1
|
||||||
|
anim_unk2 0x19C068 see above
|
||||||
|
tiles_npcs 0x1A0000
|
||||||
|
worldmap_tiles.0 0x1B8000 /nar/ff5_bin3.bin 0x039B00 256 of TileSNESMode7c Add the biases
|
||||||
|
worldmap_tiles.1 0x1BA000 /nar/ff5_bin3.bin 0x039B00 256 of TileSNESMode7c Add the biases
|
||||||
|
worldmap_tiles.2 0x1BC000 /nar/ff5_bin3.bin 0x039B00 128 of TileSNESMode7c Add the biases
|
||||||
|
font_glyphs_kanji 0x1BD000 426 of SNESTritile length of 0x27F0
|
||||||
|
? 0x1BF800
|
||||||
|
RPGe_font_character_widths 0x203225 512 of u8 RPGe only, Includes the 1px spacing
|
|
|
@ -0,0 +1,256 @@
|
||||||
|
|
||||||
|
\n
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
バ
|
||||||
|
ば
|
||||||
|
ビ
|
||||||
|
び
|
||||||
|
ブ
|
||||||
|
ぶ
|
||||||
|
ベ
|
||||||
|
べ
|
||||||
|
ボ
|
||||||
|
ぼ
|
||||||
|
ガ
|
||||||
|
が
|
||||||
|
ギ
|
||||||
|
ぎ
|
||||||
|
グ
|
||||||
|
ぐ
|
||||||
|
ゲ
|
||||||
|
げ
|
||||||
|
ゴ
|
||||||
|
ご
|
||||||
|
ザ
|
||||||
|
ざ
|
||||||
|
ジ
|
||||||
|
じ
|
||||||
|
ズ
|
||||||
|
ず
|
||||||
|
ゼ
|
||||||
|
ぜ
|
||||||
|
ゾ
|
||||||
|
ぞ
|
||||||
|
ダ
|
||||||
|
だ
|
||||||
|
ヂ
|
||||||
|
ぢ
|
||||||
|
ヅ
|
||||||
|
づ
|
||||||
|
デ
|
||||||
|
で
|
||||||
|
ド
|
||||||
|
ど
|
||||||
|
ヴ
|
||||||
|
パ
|
||||||
|
ぱ
|
||||||
|
ピ
|
||||||
|
ぴ
|
||||||
|
プ
|
||||||
|
ぷ
|
||||||
|
ペ
|
||||||
|
ぺ
|
||||||
|
ポ
|
||||||
|
ぽ
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
_m
|
||||||
|
_H
|
||||||
|
_P
|
||||||
|
ハ
|
||||||
|
は
|
||||||
|
ヒ
|
||||||
|
ひ
|
||||||
|
フ
|
||||||
|
ふ
|
||||||
|
ヘ
|
||||||
|
へ
|
||||||
|
ホ
|
||||||
|
ほ
|
||||||
|
カ
|
||||||
|
か
|
||||||
|
キ
|
||||||
|
き
|
||||||
|
ク
|
||||||
|
く
|
||||||
|
ケ
|
||||||
|
け
|
||||||
|
コ
|
||||||
|
こ
|
||||||
|
サ
|
||||||
|
さ
|
||||||
|
シ
|
||||||
|
し
|
||||||
|
ス
|
||||||
|
す
|
||||||
|
セ
|
||||||
|
せ
|
||||||
|
ソ
|
||||||
|
そ
|
||||||
|
タ
|
||||||
|
た
|
||||||
|
チ
|
||||||
|
ち
|
||||||
|
ツ
|
||||||
|
つ
|
||||||
|
テ
|
||||||
|
て
|
||||||
|
ト
|
||||||
|
と
|
||||||
|
ウ
|
||||||
|
う
|
||||||
|
ア
|
||||||
|
あ
|
||||||
|
イ
|
||||||
|
い
|
||||||
|
エ
|
||||||
|
え
|
||||||
|
オ
|
||||||
|
お
|
||||||
|
ナ
|
||||||
|
な
|
||||||
|
ニ
|
||||||
|
に
|
||||||
|
ヌ
|
||||||
|
ぬ
|
||||||
|
ネ
|
||||||
|
ね
|
||||||
|
ノ
|
||||||
|
の
|
||||||
|
マ
|
||||||
|
ま
|
||||||
|
ミ
|
||||||
|
み
|
||||||
|
ム
|
||||||
|
む
|
||||||
|
メ
|
||||||
|
め
|
||||||
|
モ
|
||||||
|
も
|
||||||
|
ラ
|
||||||
|
ら
|
||||||
|
リ
|
||||||
|
り
|
||||||
|
ル
|
||||||
|
る
|
||||||
|
レ
|
||||||
|
れ
|
||||||
|
ロ
|
||||||
|
ろ
|
||||||
|
ヤ
|
||||||
|
や
|
||||||
|
ユ
|
||||||
|
ゆ
|
||||||
|
ヨ
|
||||||
|
よ
|
||||||
|
ワ
|
||||||
|
わ
|
||||||
|
ン
|
||||||
|
ん
|
||||||
|
ヲ
|
||||||
|
を
|
||||||
|
ッ
|
||||||
|
っ
|
||||||
|
ャ
|
||||||
|
ゃ
|
||||||
|
ュ
|
||||||
|
ゅ
|
||||||
|
ョ
|
||||||
|
ょ
|
||||||
|
ァ
|
||||||
|
ー
|
||||||
|
ィ
|
||||||
|
⋯
|
||||||
|
ぅ
|
||||||
|
!
|
||||||
|
ェ
|
||||||
|
?
|
||||||
|
ォ
|
||||||
|
%
|
||||||
|
/
|
||||||
|
:
|
||||||
|
「
|
||||||
|
」
|
||||||
|
。
|
||||||
|
A
|
||||||
|
B
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
L
|
||||||
|
R
|
||||||
|
E
|
||||||
|
H
|
||||||
|
M
|
||||||
|
P
|
||||||
|
S
|
||||||
|
C
|
||||||
|
T
|
||||||
|
←
|
||||||
|
→
|
||||||
|
+
|
||||||
|
、
|
||||||
|
◯
|
||||||
|
『
|
||||||
|
F
|
||||||
|
°C
|
||||||
|
・
|
||||||
|
(
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,256 @@
|
||||||
|
|
||||||
|
\n
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
バ
|
||||||
|
ば
|
||||||
|
ビ
|
||||||
|
び
|
||||||
|
ブ
|
||||||
|
ぶ
|
||||||
|
ベ
|
||||||
|
べ
|
||||||
|
ボ
|
||||||
|
ぼ
|
||||||
|
ガ
|
||||||
|
が
|
||||||
|
ギ
|
||||||
|
ぎ
|
||||||
|
グ
|
||||||
|
ぐ
|
||||||
|
ゲ
|
||||||
|
げ
|
||||||
|
ゴ
|
||||||
|
ご
|
||||||
|
ザ
|
||||||
|
ざ
|
||||||
|
ジ
|
||||||
|
じ
|
||||||
|
ズ
|
||||||
|
ず
|
||||||
|
ゼ
|
||||||
|
ぜ
|
||||||
|
ゾ
|
||||||
|
ぞ
|
||||||
|
ダ
|
||||||
|
だ
|
||||||
|
ヂ
|
||||||
|
ぢ
|
||||||
|
ヅ
|
||||||
|
づ
|
||||||
|
デ
|
||||||
|
で
|
||||||
|
ド
|
||||||
|
ど
|
||||||
|
ヴ
|
||||||
|
パ
|
||||||
|
ぱ
|
||||||
|
ピ
|
||||||
|
ぴ
|
||||||
|
プ
|
||||||
|
ぷ
|
||||||
|
ペ
|
||||||
|
“
|
||||||
|
‘
|
||||||
|
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
_m
|
||||||
|
_H
|
||||||
|
_P
|
||||||
|
A
|
||||||
|
B
|
||||||
|
C
|
||||||
|
D
|
||||||
|
E
|
||||||
|
F
|
||||||
|
G
|
||||||
|
H
|
||||||
|
I
|
||||||
|
J
|
||||||
|
K
|
||||||
|
L
|
||||||
|
M
|
||||||
|
N
|
||||||
|
O
|
||||||
|
P
|
||||||
|
Q
|
||||||
|
R
|
||||||
|
S
|
||||||
|
T
|
||||||
|
U
|
||||||
|
V
|
||||||
|
W
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
Z
|
||||||
|
a
|
||||||
|
b
|
||||||
|
c
|
||||||
|
d
|
||||||
|
e
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
i
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
m
|
||||||
|
n
|
||||||
|
o
|
||||||
|
p
|
||||||
|
q
|
||||||
|
r
|
||||||
|
s
|
||||||
|
t
|
||||||
|
u
|
||||||
|
v
|
||||||
|
w
|
||||||
|
x
|
||||||
|
y
|
||||||
|
z
|
||||||
|
il
|
||||||
|
it
|
||||||
|
|
||||||
|
li
|
||||||
|
ll
|
||||||
|
’
|
||||||
|
”
|
||||||
|
:
|
||||||
|
;
|
||||||
|
,
|
||||||
|
(
|
||||||
|
)
|
||||||
|
/
|
||||||
|
!
|
||||||
|
?
|
||||||
|
.
|
||||||
|
ti
|
||||||
|
fi
|
||||||
|
ラ
|
||||||
|
ら
|
||||||
|
p
|
||||||
|
el
|
||||||
|
‘
|
||||||
|
“
|
||||||
|
if
|
||||||
|
lt
|
||||||
|
tl
|
||||||
|
ir
|
||||||
|
tt
|
||||||
|
や
|
||||||
|
ユ
|
||||||
|
ゆ
|
||||||
|
ヨ
|
||||||
|
よ
|
||||||
|
ワ
|
||||||
|
わ
|
||||||
|
ン
|
||||||
|
ん
|
||||||
|
ヲ
|
||||||
|
を
|
||||||
|
ッ
|
||||||
|
っ
|
||||||
|
ャ
|
||||||
|
ゃ
|
||||||
|
ュ
|
||||||
|
ゅ
|
||||||
|
ョ
|
||||||
|
ょ
|
||||||
|
ァ
|
||||||
|
ー
|
||||||
|
ィ
|
||||||
|
⋯
|
||||||
|
ぅ
|
||||||
|
!
|
||||||
|
ェ
|
||||||
|
?
|
||||||
|
ォ
|
||||||
|
%
|
||||||
|
/
|
||||||
|
:
|
||||||
|
「
|
||||||
|
」
|
||||||
|
。
|
||||||
|
A
|
||||||
|
B
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
L
|
||||||
|
R
|
||||||
|
E
|
||||||
|
H
|
||||||
|
M
|
||||||
|
P
|
||||||
|
S
|
||||||
|
C
|
||||||
|
T
|
||||||
|
←
|
||||||
|
→
|
||||||
|
+
|
||||||
|
、
|
||||||
|
◯
|
||||||
|
『
|
||||||
|
|
||||||
|
°C
|
||||||
|
・
|
||||||
|
(
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,426 @@
|
||||||
|
王
|
||||||
|
行
|
||||||
|
力
|
||||||
|
様
|
||||||
|
飛
|
||||||
|
世
|
||||||
|
界
|
||||||
|
封
|
||||||
|
入
|
||||||
|
城
|
||||||
|
竜
|
||||||
|
士
|
||||||
|
船
|
||||||
|
印
|
||||||
|
海
|
||||||
|
父
|
||||||
|
人
|
||||||
|
見
|
||||||
|
魔
|
||||||
|
物
|
||||||
|
大
|
||||||
|
者
|
||||||
|
本
|
||||||
|
何
|
||||||
|
戦
|
||||||
|
出
|
||||||
|
気
|
||||||
|
手
|
||||||
|
言
|
||||||
|
石
|
||||||
|
守
|
||||||
|
辺
|
||||||
|
無
|
||||||
|
心
|
||||||
|
間
|
||||||
|
前
|
||||||
|
風
|
||||||
|
帰
|
||||||
|
私
|
||||||
|
生
|
||||||
|
年
|
||||||
|
武
|
||||||
|
器
|
||||||
|
兵
|
||||||
|
火
|
||||||
|
使
|
||||||
|
中
|
||||||
|
急
|
||||||
|
時
|
||||||
|
森
|
||||||
|
来
|
||||||
|
砂
|
||||||
|
動
|
||||||
|
女
|
||||||
|
待
|
||||||
|
臣
|
||||||
|
地
|
||||||
|
助
|
||||||
|
当
|
||||||
|
今
|
||||||
|
上
|
||||||
|
悪
|
||||||
|
泉
|
||||||
|
騎
|
||||||
|
思
|
||||||
|
持
|
||||||
|
変
|
||||||
|
水
|
||||||
|
塔
|
||||||
|
草
|
||||||
|
仲
|
||||||
|
復
|
||||||
|
目
|
||||||
|
作
|
||||||
|
分
|
||||||
|
知
|
||||||
|
機
|
||||||
|
一
|
||||||
|
姫
|
||||||
|
最
|
||||||
|
聞
|
||||||
|
械
|
||||||
|
神
|
||||||
|
流
|
||||||
|
乗
|
||||||
|
取
|
||||||
|
町
|
||||||
|
殿
|
||||||
|
事
|
||||||
|
空
|
||||||
|
勇
|
||||||
|
村
|
||||||
|
早
|
||||||
|
子
|
||||||
|
格
|
||||||
|
納
|
||||||
|
伝
|
||||||
|
消
|
||||||
|
書
|
||||||
|
長
|
||||||
|
話
|
||||||
|
合
|
||||||
|
所
|
||||||
|
場
|
||||||
|
脱
|
||||||
|
北
|
||||||
|
後
|
||||||
|
全
|
||||||
|
忍
|
||||||
|
獣
|
||||||
|
詩
|
||||||
|
吟
|
||||||
|
落
|
||||||
|
自
|
||||||
|
階
|
||||||
|
説
|
||||||
|
残
|
||||||
|
親
|
||||||
|
活
|
||||||
|
休
|
||||||
|
姉
|
||||||
|
破
|
||||||
|
土
|
||||||
|
度
|
||||||
|
記
|
||||||
|
発
|
||||||
|
赤
|
||||||
|
侍
|
||||||
|
死
|
||||||
|
国
|
||||||
|
旅
|
||||||
|
完
|
||||||
|
小
|
||||||
|
林
|
||||||
|
古
|
||||||
|
図
|
||||||
|
礼
|
||||||
|
商
|
||||||
|
島
|
||||||
|
邪
|
||||||
|
部
|
||||||
|
狩
|
||||||
|
精
|
||||||
|
姿
|
||||||
|
防
|
||||||
|
向
|
||||||
|
先
|
||||||
|
解
|
||||||
|
板
|
||||||
|
下
|
||||||
|
台
|
||||||
|
賢
|
||||||
|
対
|
||||||
|
木
|
||||||
|
成
|
||||||
|
命
|
||||||
|
配
|
||||||
|
法
|
||||||
|
飲
|
||||||
|
回
|
||||||
|
願
|
||||||
|
門
|
||||||
|
東
|
||||||
|
開
|
||||||
|
貸
|
||||||
|
増
|
||||||
|
危
|
||||||
|
舘
|
||||||
|
道
|
||||||
|
身
|
||||||
|
老
|
||||||
|
西
|
||||||
|
近
|
||||||
|
層
|
||||||
|
第
|
||||||
|
青
|
||||||
|
光
|
||||||
|
読
|
||||||
|
外
|
||||||
|
理
|
||||||
|
強
|
||||||
|
同
|
||||||
|
谷
|
||||||
|
負
|
||||||
|
意
|
||||||
|
学
|
||||||
|
攻
|
||||||
|
屋
|
||||||
|
体
|
||||||
|
運
|
||||||
|
河
|
||||||
|
聖
|
||||||
|
必
|
||||||
|
南
|
||||||
|
方
|
||||||
|
黒
|
||||||
|
絶
|
||||||
|
食
|
||||||
|
艇
|
||||||
|
山
|
||||||
|
穴
|
||||||
|
名
|
||||||
|
受
|
||||||
|
暁
|
||||||
|
傷
|
||||||
|
少
|
||||||
|
鼻
|
||||||
|
倉
|
||||||
|
然
|
||||||
|
的
|
||||||
|
男
|
||||||
|
用
|
||||||
|
酒
|
||||||
|
安
|
||||||
|
現
|
||||||
|
代
|
||||||
|
立
|
||||||
|
具
|
||||||
|
育
|
||||||
|
続
|
||||||
|
通
|
||||||
|
会
|
||||||
|
庫
|
||||||
|
飼
|
||||||
|
日
|
||||||
|
窟
|
||||||
|
砲
|
||||||
|
広
|
||||||
|
化
|
||||||
|
博
|
||||||
|
以
|
||||||
|
兄
|
||||||
|
室
|
||||||
|
洞
|
||||||
|
別
|
||||||
|
番
|
||||||
|
昔
|
||||||
|
住
|
||||||
|
吸
|
||||||
|
去
|
||||||
|
宝
|
||||||
|
毒
|
||||||
|
売
|
||||||
|
好
|
||||||
|
枝
|
||||||
|
踊
|
||||||
|
月
|
||||||
|
巣
|
||||||
|
底
|
||||||
|
明
|
||||||
|
感
|
||||||
|
宿
|
||||||
|
召
|
||||||
|
喚
|
||||||
|
決
|
||||||
|
形
|
||||||
|
団
|
||||||
|
異
|
||||||
|
初
|
||||||
|
険
|
||||||
|
家
|
||||||
|
息
|
||||||
|
連
|
||||||
|
集
|
||||||
|
墓
|
||||||
|
著
|
||||||
|
跡
|
||||||
|
遺
|
||||||
|
内
|
||||||
|
悲
|
||||||
|
教
|
||||||
|
返
|
||||||
|
頭
|
||||||
|
再
|
||||||
|
高
|
||||||
|
借
|
||||||
|
登
|
||||||
|
走
|
||||||
|
過
|
||||||
|
敵
|
||||||
|
鏡
|
||||||
|
愛
|
||||||
|
魚
|
||||||
|
燃
|
||||||
|
幅
|
||||||
|
音
|
||||||
|
血
|
||||||
|
滝
|
||||||
|
次
|
||||||
|
閉
|
||||||
|
求
|
||||||
|
声
|
||||||
|
箱
|
||||||
|
軍
|
||||||
|
泣
|
||||||
|
港
|
||||||
|
冊
|
||||||
|
秒
|
||||||
|
憶
|
||||||
|
潜
|
||||||
|
爆
|
||||||
|
恋
|
||||||
|
石
|
||||||
|
左
|
||||||
|
役
|
||||||
|
放
|
||||||
|
衛
|
||||||
|
母
|
||||||
|
建
|
||||||
|
角
|
||||||
|
信
|
||||||
|
師
|
||||||
|
元
|
||||||
|
失
|
||||||
|
字
|
||||||
|
歩
|
||||||
|
遊
|
||||||
|
頂
|
||||||
|
震
|
||||||
|
収
|
||||||
|
追
|
||||||
|
暗
|
||||||
|
橋
|
||||||
|
起
|
||||||
|
約
|
||||||
|
束
|
||||||
|
文
|
||||||
|
反
|
||||||
|
絵
|
||||||
|
能
|
||||||
|
歌
|
||||||
|
弱
|
||||||
|
境
|
||||||
|
波
|
||||||
|
針
|
||||||
|
千
|
||||||
|
炎
|
||||||
|
望
|
||||||
|
雨
|
||||||
|
金
|
||||||
|
希
|
||||||
|
花
|
||||||
|
不
|
||||||
|
白
|
||||||
|
剣
|
||||||
|
陸
|
||||||
|
勝
|
||||||
|
烏
|
||||||
|
笛
|
||||||
|
究
|
||||||
|
三
|
||||||
|
探
|
||||||
|
夜
|
||||||
|
病
|
||||||
|
半
|
||||||
|
美
|
||||||
|
敗
|
||||||
|
友
|
||||||
|
研
|
||||||
|
予
|
||||||
|
支
|
||||||
|
々
|
||||||
|
除
|
||||||
|
数
|
||||||
|
店
|
||||||
|
翼
|
||||||
|
充
|
||||||
|
填
|
||||||
|
薬
|
||||||
|
弟
|
||||||
|
経
|
||||||
|
験
|
||||||
|
値
|
||||||
|
闘
|
||||||
|
得
|
||||||
|
闇
|
||||||
|
混
|
||||||
|
乱
|
||||||
|
点
|
||||||
|
速
|
||||||
|
閃
|
||||||
|
射
|
||||||
|
斬
|
||||||
|
鉄
|
||||||
|
宣
|
||||||
|
告
|
||||||
|
電
|
||||||
|
磁
|
||||||
|
圧
|
||||||
|
昇
|
||||||
|
重
|
||||||
|
倍
|
||||||
|
妖
|
||||||
|
刀
|
||||||
|
拡
|
||||||
|
散
|
||||||
|
影
|
||||||
|
御
|
||||||
|
正
|
||||||
|
漠
|
||||||
|
特
|
||||||
|
胸
|
||||||
|
永
|
||||||
|
遠
|
||||||
|
議
|
||||||
|
浮
|
||||||
|
眠
|
||||||
|
逃
|
||||||
|
滅
|
||||||
|
囗
|
||||||
|
極
|
||||||
|
湖
|
||||||
|
利
|
||||||
|
周
|
||||||
|
緑
|
||||||
|
切
|
||||||
|
紙
|
||||||
|
胸
|
||||||
|
平
|
||||||
|
和
|
||||||
|
宇
|
||||||
|
宙
|
||||||
|
則
|
||||||
|
孤
|
||||||
|
溝
|
||||||
|
|
|
@ -0,0 +1,256 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
A
|
||||||
|
B
|
||||||
|
C
|
||||||
|
D
|
||||||
|
E
|
||||||
|
F
|
||||||
|
G
|
||||||
|
H
|
||||||
|
I
|
||||||
|
J
|
||||||
|
K
|
||||||
|
L
|
||||||
|
M
|
||||||
|
N
|
||||||
|
O
|
||||||
|
P
|
||||||
|
Q
|
||||||
|
R
|
||||||
|
S
|
||||||
|
T
|
||||||
|
U
|
||||||
|
V
|
||||||
|
W
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
Z
|
||||||
|
[stone]
|
||||||
|
[toad]
|
||||||
|
[mini]
|
||||||
|
[float]
|
||||||
|
[poison]
|
||||||
|
[KO]
|
||||||
|
[blind]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
_m
|
||||||
|
_H
|
||||||
|
_P
|
||||||
|
ハ
|
||||||
|
は
|
||||||
|
ヒ
|
||||||
|
ひ
|
||||||
|
フ
|
||||||
|
ふ
|
||||||
|
ヘ
|
||||||
|
へ
|
||||||
|
ホ
|
||||||
|
ほ
|
||||||
|
カ
|
||||||
|
か
|
||||||
|
キ
|
||||||
|
き
|
||||||
|
ク
|
||||||
|
く
|
||||||
|
ケ
|
||||||
|
け
|
||||||
|
コ
|
||||||
|
こ
|
||||||
|
サ
|
||||||
|
さ
|
||||||
|
シ
|
||||||
|
し
|
||||||
|
ス
|
||||||
|
す
|
||||||
|
セ
|
||||||
|
せ
|
||||||
|
ソ
|
||||||
|
そ
|
||||||
|
タ
|
||||||
|
た
|
||||||
|
チ
|
||||||
|
ち
|
||||||
|
ツ
|
||||||
|
つ
|
||||||
|
テ
|
||||||
|
て
|
||||||
|
ト
|
||||||
|
と
|
||||||
|
ウ
|
||||||
|
う
|
||||||
|
ア
|
||||||
|
あ
|
||||||
|
イ
|
||||||
|
い
|
||||||
|
エ
|
||||||
|
え
|
||||||
|
オ
|
||||||
|
お
|
||||||
|
ナ
|
||||||
|
な
|
||||||
|
ニ
|
||||||
|
に
|
||||||
|
ヌ
|
||||||
|
ぬ
|
||||||
|
ネ
|
||||||
|
ね
|
||||||
|
ノ
|
||||||
|
の
|
||||||
|
マ
|
||||||
|
ま
|
||||||
|
ミ
|
||||||
|
み
|
||||||
|
ム
|
||||||
|
む
|
||||||
|
メ
|
||||||
|
め
|
||||||
|
モ
|
||||||
|
も
|
||||||
|
ラ
|
||||||
|
ら
|
||||||
|
リ
|
||||||
|
り
|
||||||
|
ル
|
||||||
|
る
|
||||||
|
レ
|
||||||
|
れ
|
||||||
|
ロ
|
||||||
|
ろ
|
||||||
|
ヤ
|
||||||
|
や
|
||||||
|
ユ
|
||||||
|
ゆ
|
||||||
|
ヨ
|
||||||
|
よ
|
||||||
|
ワ
|
||||||
|
わ
|
||||||
|
ン
|
||||||
|
ん
|
||||||
|
ヲ
|
||||||
|
を
|
||||||
|
ッ
|
||||||
|
っ
|
||||||
|
ャ
|
||||||
|
ゃ
|
||||||
|
ュ
|
||||||
|
ゅ
|
||||||
|
ョ
|
||||||
|
ょ
|
||||||
|
ァ
|
||||||
|
ー
|
||||||
|
ィ
|
||||||
|
‥
|
||||||
|
ぅ
|
||||||
|
!
|
||||||
|
ェ
|
||||||
|
?
|
||||||
|
ォ
|
||||||
|
%
|
||||||
|
/
|
||||||
|
:
|
||||||
|
「
|
||||||
|
」
|
||||||
|
。
|
||||||
|
A
|
||||||
|
B
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
L
|
||||||
|
R
|
||||||
|
E
|
||||||
|
H
|
||||||
|
M
|
||||||
|
P
|
||||||
|
S
|
||||||
|
C
|
||||||
|
T
|
||||||
|
↑
|
||||||
|
→
|
||||||
|
+
|
||||||
|
[洋剣]
|
||||||
|
[wh.mag]
|
||||||
|
[blk.mag]
|
||||||
|
🕒
|
||||||
|
[刂]
|
||||||
|
[槍]
|
||||||
|
[鉞]
|
||||||
|
[刀]
|
||||||
|
[棒]
|
||||||
|
[杖]
|
||||||
|
[弓]
|
||||||
|
♪
|
||||||
|
[鞭]
|
||||||
|
[bell]
|
||||||
|
[shield]
|
||||||
|
[helmet]
|
||||||
|
[armor]
|
||||||
|
[ring]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,256 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
A
|
||||||
|
B
|
||||||
|
C
|
||||||
|
D
|
||||||
|
E
|
||||||
|
F
|
||||||
|
G
|
||||||
|
H
|
||||||
|
I
|
||||||
|
J
|
||||||
|
K
|
||||||
|
L
|
||||||
|
M
|
||||||
|
N
|
||||||
|
O
|
||||||
|
P
|
||||||
|
Q
|
||||||
|
R
|
||||||
|
S
|
||||||
|
T
|
||||||
|
U
|
||||||
|
V
|
||||||
|
W
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
Z
|
||||||
|
[stone]
|
||||||
|
[toad]
|
||||||
|
[mini]
|
||||||
|
[float]
|
||||||
|
[poison]
|
||||||
|
[KO]
|
||||||
|
[blind]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
_m
|
||||||
|
_H
|
||||||
|
_P
|
||||||
|
A
|
||||||
|
B
|
||||||
|
C
|
||||||
|
D
|
||||||
|
E
|
||||||
|
F
|
||||||
|
G
|
||||||
|
H
|
||||||
|
I
|
||||||
|
J
|
||||||
|
K
|
||||||
|
L
|
||||||
|
M
|
||||||
|
N
|
||||||
|
O
|
||||||
|
P
|
||||||
|
Q
|
||||||
|
R
|
||||||
|
S
|
||||||
|
T
|
||||||
|
U
|
||||||
|
V
|
||||||
|
W
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
Z
|
||||||
|
a
|
||||||
|
b
|
||||||
|
c
|
||||||
|
d
|
||||||
|
e
|
||||||
|
f
|
||||||
|
g
|
||||||
|
h
|
||||||
|
i
|
||||||
|
j
|
||||||
|
k
|
||||||
|
l
|
||||||
|
m
|
||||||
|
n
|
||||||
|
o
|
||||||
|
p
|
||||||
|
q
|
||||||
|
r
|
||||||
|
s
|
||||||
|
t
|
||||||
|
u
|
||||||
|
v
|
||||||
|
w
|
||||||
|
x
|
||||||
|
y
|
||||||
|
z
|
||||||
|
il
|
||||||
|
it
|
||||||
|
|
||||||
|
li
|
||||||
|
ll
|
||||||
|
'
|
||||||
|
"
|
||||||
|
:
|
||||||
|
;
|
||||||
|
,
|
||||||
|
(
|
||||||
|
)
|
||||||
|
/
|
||||||
|
!
|
||||||
|
?
|
||||||
|
.
|
||||||
|
ti
|
||||||
|
fi
|
||||||
|
Bl
|
||||||
|
a
|
||||||
|
pe
|
||||||
|
l
|
||||||
|
'
|
||||||
|
"
|
||||||
|
if
|
||||||
|
lt
|
||||||
|
tl
|
||||||
|
ir
|
||||||
|
tt
|
||||||
|
や
|
||||||
|
ユ
|
||||||
|
ゆ
|
||||||
|
ヨ
|
||||||
|
よ
|
||||||
|
ワ
|
||||||
|
わ
|
||||||
|
ン
|
||||||
|
ん
|
||||||
|
ヲ
|
||||||
|
を
|
||||||
|
[key]
|
||||||
|
[shoe]
|
||||||
|
◆
|
||||||
|
[hammer]
|
||||||
|
⛺
|
||||||
|
[ribbon]
|
||||||
|
[potion]
|
||||||
|
[shirt]
|
||||||
|
♪
|
||||||
|
-
|
||||||
|
[shuriken]
|
||||||
|
‥
|
||||||
|
[scroll]
|
||||||
|
!
|
||||||
|
[claw]
|
||||||
|
?
|
||||||
|
[glove]
|
||||||
|
%
|
||||||
|
/
|
||||||
|
:
|
||||||
|
「
|
||||||
|
」
|
||||||
|
.
|
||||||
|
A
|
||||||
|
B
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
L
|
||||||
|
R
|
||||||
|
E
|
||||||
|
H
|
||||||
|
M
|
||||||
|
P
|
||||||
|
S
|
||||||
|
C
|
||||||
|
T
|
||||||
|
↑
|
||||||
|
→
|
||||||
|
+
|
||||||
|
[sword]
|
||||||
|
[wh.mag]
|
||||||
|
[blk.mag]
|
||||||
|
🕒
|
||||||
|
[knife]
|
||||||
|
[spear]
|
||||||
|
[axe]
|
||||||
|
[katana]
|
||||||
|
[rod]
|
||||||
|
[staff]
|
||||||
|
[bow]
|
||||||
|
[harp]
|
||||||
|
[whip]
|
||||||
|
[bell]
|
||||||
|
[shield]
|
||||||
|
[helmet]
|
||||||
|
[armor]
|
||||||
|
[ring]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,256 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
バ
|
||||||
|
ば
|
||||||
|
ビ
|
||||||
|
び
|
||||||
|
ブ
|
||||||
|
ぶ
|
||||||
|
ベ
|
||||||
|
べ
|
||||||
|
ボ
|
||||||
|
ぼ
|
||||||
|
ガ
|
||||||
|
が
|
||||||
|
ギ
|
||||||
|
ぎ
|
||||||
|
グ
|
||||||
|
ぐ
|
||||||
|
ゲ
|
||||||
|
げ
|
||||||
|
ゴ
|
||||||
|
ご
|
||||||
|
ザ
|
||||||
|
ざ
|
||||||
|
ジ
|
||||||
|
じ
|
||||||
|
ズ
|
||||||
|
ず
|
||||||
|
ゼ
|
||||||
|
ぜ
|
||||||
|
ゾ
|
||||||
|
ぞ
|
||||||
|
ダ
|
||||||
|
だ
|
||||||
|
ヂ
|
||||||
|
ぢ
|
||||||
|
ヅ
|
||||||
|
づ
|
||||||
|
デ
|
||||||
|
で
|
||||||
|
ド
|
||||||
|
ど
|
||||||
|
ヴ
|
||||||
|
パ
|
||||||
|
ぱ
|
||||||
|
ピ
|
||||||
|
ぴ
|
||||||
|
プ
|
||||||
|
ぷ
|
||||||
|
ペ
|
||||||
|
ぺ
|
||||||
|
ポ
|
||||||
|
ぽ
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
_m
|
||||||
|
_H
|
||||||
|
_P
|
||||||
|
ハ
|
||||||
|
は
|
||||||
|
ヒ
|
||||||
|
ひ
|
||||||
|
フ
|
||||||
|
ふ
|
||||||
|
ヘ
|
||||||
|
へ
|
||||||
|
ホ
|
||||||
|
ほ
|
||||||
|
カ
|
||||||
|
か
|
||||||
|
キ
|
||||||
|
き
|
||||||
|
ク
|
||||||
|
く
|
||||||
|
ケ
|
||||||
|
け
|
||||||
|
コ
|
||||||
|
こ
|
||||||
|
サ
|
||||||
|
さ
|
||||||
|
シ
|
||||||
|
し
|
||||||
|
ス
|
||||||
|
す
|
||||||
|
セ
|
||||||
|
せ
|
||||||
|
ソ
|
||||||
|
そ
|
||||||
|
タ
|
||||||
|
た
|
||||||
|
チ
|
||||||
|
ち
|
||||||
|
ツ
|
||||||
|
つ
|
||||||
|
テ
|
||||||
|
て
|
||||||
|
ト
|
||||||
|
と
|
||||||
|
ウ
|
||||||
|
う
|
||||||
|
ア
|
||||||
|
あ
|
||||||
|
イ
|
||||||
|
い
|
||||||
|
エ
|
||||||
|
え
|
||||||
|
オ
|
||||||
|
お
|
||||||
|
ナ
|
||||||
|
な
|
||||||
|
ニ
|
||||||
|
に
|
||||||
|
ヌ
|
||||||
|
ぬ
|
||||||
|
ネ
|
||||||
|
ね
|
||||||
|
ノ
|
||||||
|
の
|
||||||
|
マ
|
||||||
|
ま
|
||||||
|
ミ
|
||||||
|
み
|
||||||
|
ム
|
||||||
|
む
|
||||||
|
メ
|
||||||
|
め
|
||||||
|
モ
|
||||||
|
も
|
||||||
|
ラ
|
||||||
|
ら
|
||||||
|
リ
|
||||||
|
り
|
||||||
|
ル
|
||||||
|
る
|
||||||
|
レ
|
||||||
|
れ
|
||||||
|
ロ
|
||||||
|
ろ
|
||||||
|
ヤ
|
||||||
|
や
|
||||||
|
ユ
|
||||||
|
ゆ
|
||||||
|
ヨ
|
||||||
|
よ
|
||||||
|
ワ
|
||||||
|
わ
|
||||||
|
ン
|
||||||
|
ん
|
||||||
|
ヲ
|
||||||
|
を
|
||||||
|
ッ
|
||||||
|
っ
|
||||||
|
ャ
|
||||||
|
ゃ
|
||||||
|
ュ
|
||||||
|
ゅ
|
||||||
|
ョ
|
||||||
|
ょ
|
||||||
|
ァ
|
||||||
|
ー
|
||||||
|
ィ
|
||||||
|
‥
|
||||||
|
ぅ
|
||||||
|
!
|
||||||
|
ェ
|
||||||
|
?
|
||||||
|
ォ
|
||||||
|
%
|
||||||
|
/
|
||||||
|
:
|
||||||
|
「
|
||||||
|
」
|
||||||
|
。
|
||||||
|
A
|
||||||
|
B
|
||||||
|
X
|
||||||
|
Y
|
||||||
|
L
|
||||||
|
R
|
||||||
|
E
|
||||||
|
H
|
||||||
|
M
|
||||||
|
P
|
||||||
|
S
|
||||||
|
C
|
||||||
|
T
|
||||||
|
↑
|
||||||
|
→
|
||||||
|
+
|
||||||
|
[洋剣]
|
||||||
|
[wh.mag]
|
||||||
|
[blk.mag]
|
||||||
|
🕒
|
||||||
|
[刂]
|
||||||
|
[槍]
|
||||||
|
[鉞]
|
||||||
|
[刀]
|
||||||
|
[棒]
|
||||||
|
[杖]
|
||||||
|
[弓]
|
||||||
|
♪
|
||||||
|
[鞭]
|
||||||
|
[bell]
|
||||||
|
[shield]
|
||||||
|
[helmet]
|
||||||
|
[armor]
|
||||||
|
[ring]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,189 @@
|
||||||
|
{
|
||||||
|
"NPCs sprites": {
|
||||||
|
"start": "0x1A0000",
|
||||||
|
"bpp": 4,
|
||||||
|
"definitions": [
|
||||||
|
[2, 2, 2, "Crystal shards"],
|
||||||
|
[2, 2, 2, "sparkle"],
|
||||||
|
[2, 2, 2, "speech bubble exclamation"],
|
||||||
|
[2, 2, 2, "speech bubble question"],
|
||||||
|
[2, 2, 2, "speech bubble heart"],
|
||||||
|
[2, 2, 2, "binding barrier"],
|
||||||
|
[2, 2, 2, "wisp flame"],
|
||||||
|
[2, 2, 20, "lightning"],
|
||||||
|
[2, 2, 4, "sparkle glow"],
|
||||||
|
[2, 2, 2, "void demon that Leviathan kills (second palette)"],
|
||||||
|
[2, 2, 2, "void demon Triton/Nereid/Phobos"],
|
||||||
|
[2, 2, 2, "void demon Wendigo (second palette)"],
|
||||||
|
[2, 2, 2, "void demon Azulmagia (third palette)"],
|
||||||
|
[2, 2, 2, "void demon Catastrophe (third palette)"],
|
||||||
|
[2, 2, 1, "void demon Calofisteri"],
|
||||||
|
[2, 2, 1, "fallen soldier"],
|
||||||
|
[2, 2, 2, "lightning 2"],
|
||||||
|
[2, 2, 2, "sparkle glow 2"],
|
||||||
|
[2, 2, 2, "blob shadow"],
|
||||||
|
[2, 2, 2, "void demon Halicarnassus (second palette)"],
|
||||||
|
[2, 2, 2, "Faris hair blowing in the wind"],
|
||||||
|
[2, 4, 1, "rainbow stripes"],
|
||||||
|
[2, 2, 2, "pirate sleeping standing"],
|
||||||
|
[2, 2, 2, "Faris hair blowing in the wind 2"],
|
||||||
|
[2, 2, 2, "WingRaptor (2x2 wing, 2x2 body)"],
|
||||||
|
[2, 2, 1, "Melusine"],
|
||||||
|
[2, 2, 1, "jumping in shock"],
|
||||||
|
[2, 2, 1, "blank"],
|
||||||
|
[2, 2, 1, "fallen woman"],
|
||||||
|
[2, 2, 1, "fallen Cid"],
|
||||||
|
[2, 2, 1, "fallen Mid"],
|
||||||
|
[2, 2, 4, "Crystal upper"],
|
||||||
|
[2, 2, 4, "Crystal lower"],
|
||||||
|
[2, 2, 4, "fireball"],
|
||||||
|
[2, 2, 4, "sparkle glow 3"],
|
||||||
|
[2, 2, 4, "kite-shaped crystal"],
|
||||||
|
[2, 2, 4, "puff of smoke"],
|
||||||
|
[2, 2, 4, "fire geyser"],
|
||||||
|
[2, 2, 4, "flame in ball"],
|
||||||
|
[2, 2, 4, "growing sparkle"],
|
||||||
|
[2, 2, 4, "Abductor"],
|
||||||
|
[2, 2, 4, "Galuf glowing"],
|
||||||
|
[2, 2, 4, "Goblin?"],
|
||||||
|
[2, 2, 4, "kingly guy"],
|
||||||
|
[2, 2, 4, "Queen Karnak"],
|
||||||
|
[2, 2, 4, "bard"],
|
||||||
|
[2, 2, 4, "kid"],
|
||||||
|
[2, 2, 4, "old woman"],
|
||||||
|
[2, 2, 4, "merchant guy"],
|
||||||
|
[2, 2, 4, "sheep"],
|
||||||
|
[2, 2, 4, "girl"],
|
||||||
|
[2, 2, 2, "Garula"],
|
||||||
|
[2, 2, 2, "Archeoaevis"],
|
||||||
|
[2, 2, 4, "guy"],
|
||||||
|
[2, 2, 4, "turban guy"],
|
||||||
|
[2, 2, 4, "snake"],
|
||||||
|
[2, 2, 1, "mummy"],
|
||||||
|
[2, 2, 1, "small kid"],
|
||||||
|
[2, 2, 2, "blank"],
|
||||||
|
[2, 2, 4, "Magissa"],
|
||||||
|
[2, 2, 4, "Gilgamesh"],
|
||||||
|
[2, 2, 4, "Faris dress"],
|
||||||
|
[2, 2, 4, "Skeleton"],
|
||||||
|
[2, 2, 4, "cutscene bird"],
|
||||||
|
[2, 2, 4, "Omega"],
|
||||||
|
[2, 2, 8, "King Tycoon strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Pirate strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Boko strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Black Chocobo strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "servant lady strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "King Walse strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Chancellor strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Werewolf strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Moogle strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Kelger strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Xezat strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Ghido strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Dorgann strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 4, "Dwarf"],
|
||||||
|
[2, 2, 4, "Chicobo"],
|
||||||
|
[2, 2, 8, "kid strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "woman strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "old man with pointy hat strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "scholar strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "soldier strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "dancer strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "soldier 2 strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Cid strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 8, "Mid strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 6, "Black Chocobo flying"],
|
||||||
|
[2, 2, 2, "blank"],
|
||||||
|
[2, 2, 8, "Exdeath strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 16, "mini strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 16, "frog strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 16, "Bartz strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 16, "Lenna strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 16, "Galuf strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 16, "Faris strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 16, "Krile strip (some tiles not 2x2)"],
|
||||||
|
[2, 2, 1, "fallen King Tycoon"],
|
||||||
|
[2, 2, 1, "fallen Durgann?"],
|
||||||
|
[2, 2, 1, "fallen Queen Karnak"],
|
||||||
|
[2, 2, 19, "Syldra?"],
|
||||||
|
[2, 2, 1, "Dragongrass?"],
|
||||||
|
[2, 2, 1, "arrow"],
|
||||||
|
[2, 2, 2, "book"],
|
||||||
|
[2, 2, 1, "map"],
|
||||||
|
[2, 2, 1, "torn page"],
|
||||||
|
[2, 2, 4, "Dragongrass attack mode"],
|
||||||
|
[2, 4, 1, "Siren"],
|
||||||
|
[2, 2, 1, "fallen soldier 2"],
|
||||||
|
[2, 2, 1, "campfire sticks"],
|
||||||
|
[2, 2, 2, "dragon head"],
|
||||||
|
[2, 2, 1, "King Tycoon's Helmet"],
|
||||||
|
[2, 2, 1, "picture?"],
|
||||||
|
[2, 2, 1, "music box?"],
|
||||||
|
[2, 6, 1, "some fire pillar thing"],
|
||||||
|
[2, 2, 2, "bubbles"],
|
||||||
|
[2, 2, 1, "void demon Twintania"],
|
||||||
|
[2, 2, 1, "egg"],
|
||||||
|
[2, 2, 1, "pendant"],
|
||||||
|
[2, 2, 1, "elder branch"],
|
||||||
|
[2, 2, 1, "elder branch tiara"],
|
||||||
|
[2, 2, 1, "magic mirror?"],
|
||||||
|
[2, 2, 1, "piece of glass?"],
|
||||||
|
[2, 2, 1, "piece of adamantine?"],
|
||||||
|
[2, 2, 1, "bomb"],
|
||||||
|
[2, 2, 1, "vertical rope"],
|
||||||
|
[2, 2, 1, "antlion pincer?"],
|
||||||
|
[2, 2, 1, "elder branch 2???"],
|
||||||
|
[2, 2, 1, "stone tablet"],
|
||||||
|
[2, 2, 1, "void demon Apanda"],
|
||||||
|
[2, 4, 1, "gargoyle statue"],
|
||||||
|
[2, 2, 6, "Leviathan?"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Excalibur"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Assassin Dagger"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Sasuke's Katana"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Holy Lance"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Rune Axe"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Masamune"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Yoichi's Bow"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Fire Lash"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Sage Staff"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Magus Rod"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Apollo's Harp"],
|
||||||
|
[2, 2, 1, "Sealed Weapon - Gaia's Bell"],
|
||||||
|
[2, 2, 1, "Bartz tied up"],
|
||||||
|
[2, 2, 1, "Lenna tied up"],
|
||||||
|
[2, 2, 1, "Galuf tied up"],
|
||||||
|
[2, 2, 1, "void demon Necrophobe (palette 2)"],
|
||||||
|
[1, 1, 64, "Hiryuu tiles"]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Overworld / World map sprites": {
|
||||||
|
"start": "0x1B3A00",
|
||||||
|
"bpp": 3,
|
||||||
|
"definitions": [
|
||||||
|
[2, 2, 1, "Tent"],
|
||||||
|
[2, 2, 1, "Cabin"],
|
||||||
|
[1, 1, 1, "shadow large"],
|
||||||
|
[1, 1, 1, "shadow medium"],
|
||||||
|
[1, 1, 1, "shadow small"],
|
||||||
|
[1, 1, 1, "question mark"],
|
||||||
|
[1, 1, 1, "up arrow"],
|
||||||
|
[1, 1, 1, "plus large"],
|
||||||
|
[1, 1, 1, "plus small"],
|
||||||
|
[1, 1, 1, "x small"],
|
||||||
|
[2, 2, 6, "Ship"],
|
||||||
|
[2, 2, 6, "Hiryuu"],
|
||||||
|
[2, 2, 6, "Steamship"],
|
||||||
|
[2, 2, 6, "Airship"],
|
||||||
|
[2, 2, 6, "Submarine underwater"],
|
||||||
|
[2, 2, 6, "Submarine surface"],
|
||||||
|
[2, 2, 6, "Airship/Submarine transformation"]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Overworld sprites": {
|
||||||
|
"start": "0x1B4D80",
|
||||||
|
"bpp": 4,
|
||||||
|
"definitions": [
|
||||||
|
[2, 1, 202, "TBC"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
name num_entries address snes_address bytes snes_bytes rpge_ptr_offset snes_ptr_offset dialog null_terminated
|
||||||
|
ability_names 33 0x116200 8
|
||||||
|
battle_commands 96 0x201150 0x115800 7 5
|
||||||
|
character_names 5 0x115500 6
|
||||||
|
dialogue 0x900 0x2013F0 0x082220 3 2 0x000000 0x0A0000 True
|
||||||
|
enemy_names 384 0x200050 0x105C00 10 8
|
||||||
|
items 0x100 0x111380 9
|
||||||
|
item_long_names 0x120 0x275860 0x111380 24 9
|
||||||
|
item_descriptions 128 0x114000 2 0x110000 0x110000 True True
|
||||||
|
job_names 22 0x115600 8
|
||||||
|
job_and_ability_descs 133 0x117140 2 0x110000 0x110000 True
|
||||||
|
magics 87 0x111C80 6
|
||||||
|
magics2 73 0x111E8A 9
|
||||||
|
menu_strings 139 0x00F987 2 0x270000 0x000000 True
|
||||||
|
zone_names 164 0x107000 2 0x270000 0x107200 True
|
|
|
@ -0,0 +1,165 @@
|
||||||
|
struct AttackType
|
||||||
|
u1 is_blue_magic
|
||||||
|
u1 is_white_magic
|
||||||
|
u1 is_black_magic
|
||||||
|
u1 is_dimension_magic
|
||||||
|
u1 is_summon
|
||||||
|
u1 is_sound
|
||||||
|
u1 is_longrange
|
||||||
|
u1 is_physical
|
||||||
|
|
||||||
|
struct AttackProperties
|
||||||
|
u2 action_delay
|
||||||
|
u1 roulette
|
||||||
|
u1 target_enemy_by_default
|
||||||
|
u1 can_target_either_side
|
||||||
|
u1 can_select_target
|
||||||
|
u1 always_target_all
|
||||||
|
u1 can_target_all
|
||||||
|
|
||||||
|
struct WeaponData
|
||||||
|
AttackProperties attack_properties
|
||||||
|
AttackType attack_type
|
||||||
|
u6 item_type
|
||||||
|
u1 is_unthrowable
|
||||||
|
u1 byte_2_leftover
|
||||||
|
EquipStatBonus bonus
|
||||||
|
u6 description
|
||||||
|
u1 can_double_grip
|
||||||
|
u1 only_double_grip
|
||||||
|
u1 is_wonder_rod
|
||||||
|
u1 is_action_on_use
|
||||||
|
u1 can_magic_sword
|
||||||
|
u1 is_action_on_hit
|
||||||
|
u1 is_5.4
|
||||||
|
u1 is_initiative
|
||||||
|
u1 is_knife_parry
|
||||||
|
u1 is_sword_parry
|
||||||
|
u7 spell_cast
|
||||||
|
u1 is_break_after_use
|
||||||
|
u8 attack_power
|
||||||
|
u7 attack_effect
|
||||||
|
u1 byte_8_leftover
|
||||||
|
u8 param0 # accuracy_percent for sub-100 weapons, crit rate on katanas, element on Flametongue/Icebrand/Excalibur/AirKnife/Trident/WindSpear
|
||||||
|
u8 param1 # on_hit_effect_percent for weapons that cast actions on hit, also Rune weapons bonus attack power
|
||||||
|
u8 param2 # action_on_hit for weapons that cast actions on hit, Also Rune weapons 5 mana cost on attack, also element of attack for rods
|
||||||
|
|
||||||
|
struct ArmorData
|
||||||
|
u8 slot # b0 - 0x01 acc, 0x02 body, 0x04 head, 0x08 shield, 0xF0 unused
|
||||||
|
u8 weight # b1
|
||||||
|
u6 item_type
|
||||||
|
u1 is_unthrowable
|
||||||
|
u1 byte_2_leftover
|
||||||
|
EquipStatBonus bonus # b3
|
||||||
|
u6 description # b4
|
||||||
|
u2 byte_4_leftovers
|
||||||
|
u1 is_improve_catch # b5
|
||||||
|
u1 is_become_undead
|
||||||
|
u1 is_improve_dance
|
||||||
|
u1 is_halve_mp_cost
|
||||||
|
u1 is_improve_steal
|
||||||
|
u1 is_improve_brawl
|
||||||
|
u1 is_elf_cape_dodge
|
||||||
|
u1 is_block_all_magic # b5
|
||||||
|
u8 evasion # b6
|
||||||
|
u8 defense
|
||||||
|
u8 m_evasion
|
||||||
|
u8 m_def # b9
|
||||||
|
u8 elem_effect # b10 - 01 ½ lightning, 02 ½ all, 03 immune poison damage, 04 absorb fire+immune ice+weak water, 05 absorb water+immune fire+weak lightning, 06 Bone Mail (absorb poison, halve ice, weak fire/holy), 07 absorb fire, 08 absorb ice
|
||||||
|
u8 status_effect # b11 - 01 auto-regen, 02 auto-doom, 03 auto-haste + immune slow/stop/paralyse/sleep, 04 immune petrify, 05 Ribbon, 06 immune confuse, 07 immune silence, 08 immune blind, 09 immune poison, 0A bone mail, 0B auto-reflect, 0C immune mini, 0D immune old/zombie, 0E auto-sap + immune sleep, 0F auto-blink, 10 immune mini/paralyse, 11 immune confuse/mini, 12 immune confuse/toad, 13 immune toad/paralyse
|
||||||
|
|
||||||
|
|
||||||
|
struct ItemData
|
||||||
|
AttackProperties attack_properties
|
||||||
|
u8 attack_type
|
||||||
|
u1 unk0
|
||||||
|
u1 is_unmixable
|
||||||
|
u1 unk1
|
||||||
|
u1 is_magic_lamp
|
||||||
|
u1 is_undrinkable
|
||||||
|
u1 is_unusable_in_battle
|
||||||
|
u1 is_unthrowable
|
||||||
|
u1 unk2
|
||||||
|
u6 description # b3
|
||||||
|
u2 byte_3_leftovers
|
||||||
|
u7 attack_formula
|
||||||
|
u1 is_unavoidable
|
||||||
|
u8 param_0
|
||||||
|
u8 param_1
|
||||||
|
u8 param_2
|
||||||
|
|
||||||
|
|
||||||
|
struct MagicData
|
||||||
|
AttackProperties attack_properties
|
||||||
|
u8 attack_type
|
||||||
|
u4 meteo_extra_hits
|
||||||
|
u2 unk
|
||||||
|
u1 is_learnable
|
||||||
|
u1 is_monster_bit
|
||||||
|
u7 mp_cost
|
||||||
|
u1 is_unreflectable
|
||||||
|
u7 attack_formula
|
||||||
|
u1 is_unavoidable
|
||||||
|
u8 param_0
|
||||||
|
u8 param_1
|
||||||
|
u8 param_2
|
||||||
|
|
||||||
|
|
||||||
|
struct ElemDef
|
||||||
|
u8 absorb
|
||||||
|
u8 evade
|
||||||
|
u8 immune
|
||||||
|
u8 half
|
||||||
|
u8 weak
|
||||||
|
|
||||||
|
struct StatusEffect
|
||||||
|
4 of u8 initial
|
||||||
|
3 of u8 immune
|
||||||
|
|
||||||
|
|
||||||
|
struct EnemySpriteData
|
||||||
|
u7 tileset_offset_hi # combined with lo, << 3, + 0x150000
|
||||||
|
u1 is_3bpp
|
||||||
|
u8 tileset_offset_lo
|
||||||
|
u2 palette_offset_hi # combined with lo, << 4, + 0x0ED000
|
||||||
|
u4 unk
|
||||||
|
u1 is_separate_shadow
|
||||||
|
u1 is_large_layout
|
||||||
|
u8 palette_offset_lo
|
||||||
|
u8 layout_id # Small? <<3, + 0x10D004, take 8 bytes. Large? <<5, + 0x10D334, take 32 bytes.
|
||||||
|
|
||||||
|
struct BattleBackgroundData
|
||||||
|
u8 tileset_id
|
||||||
|
2 of u8 palette_ids
|
||||||
|
u8 tilemap_id
|
||||||
|
u8 tilemap_flips_id
|
||||||
|
u8 tilemap_v_flips_id # Unused, all 0xFF = no flips
|
||||||
|
u8 tilecycle_id
|
||||||
|
u8 palcycle_id
|
||||||
|
|
||||||
|
struct EnemyStats
|
||||||
|
u8 speed
|
||||||
|
u8 attack_power
|
||||||
|
u8 attack_multiplier
|
||||||
|
u8 evasion
|
||||||
|
u8 defense
|
||||||
|
u8 magic_power
|
||||||
|
u8 magic_defense
|
||||||
|
u8 magic_evasion
|
||||||
|
u16 max_hp
|
||||||
|
u16 max_mp
|
||||||
|
u16 reward_exp
|
||||||
|
u16 reward_gil
|
||||||
|
u8 attack_graphics
|
||||||
|
u8 elements_immune
|
||||||
|
u24 status_immune
|
||||||
|
u8 elements_absorb
|
||||||
|
AttackType attack_type
|
||||||
|
u8 elements_weak
|
||||||
|
u8 monster_type
|
||||||
|
u8 flags_25
|
||||||
|
u16 status_26
|
||||||
|
u16 status_28
|
||||||
|
u8 29
|
||||||
|
u8 30
|
||||||
|
u8 level # 31
|
Can't render this file because it has a wrong number of fields in line 43.
|
|
@ -0,0 +1,161 @@
|
||||||
|
struct Character
|
||||||
|
u3 character_id # 0=Bartz, 1=Lenna, 2=Galuf, 3=Faris, 4=Krile, 5/6/7 unused
|
||||||
|
u1 is_female # 0=male, 1=female
|
||||||
|
u2 unk0 # Two unknown, possibly unused bits
|
||||||
|
u1 is_absent # 0=present, 1=absent
|
||||||
|
u1 is_back_row
|
||||||
|
u8 current_job_id
|
||||||
|
u8 level
|
||||||
|
u24 experience
|
||||||
|
u16 hp_current
|
||||||
|
u16 hp_max
|
||||||
|
u16 mp_current
|
||||||
|
u16 mp_max
|
||||||
|
u8 equipped_head
|
||||||
|
u8 equipped_body
|
||||||
|
u8 equipped_acc
|
||||||
|
u8 equipped_rh_shield
|
||||||
|
u8 equipped_lh_shield
|
||||||
|
u8 equipped_rh_weapon
|
||||||
|
u8 equipped_lh_weapon
|
||||||
|
u8 caught_monster
|
||||||
|
u8 ability_1
|
||||||
|
u8 ability_2
|
||||||
|
u8 ability_3
|
||||||
|
u8 ability_4
|
||||||
|
u8 status_1
|
||||||
|
u8 status_2
|
||||||
|
u8 status_3
|
||||||
|
u8 status_4
|
||||||
|
u8 action_flags
|
||||||
|
u8 damage_mod
|
||||||
|
u16 innates
|
||||||
|
u8 magic_element_up
|
||||||
|
u8 equip_weight
|
||||||
|
u8 base_strength
|
||||||
|
u8 base_agility
|
||||||
|
u8 base_stamina
|
||||||
|
u8 base_magic
|
||||||
|
u8 current_strength
|
||||||
|
u8 current_agility
|
||||||
|
u8 current_stamina
|
||||||
|
u8 current_magic
|
||||||
|
u8 evasion
|
||||||
|
u8 defense
|
||||||
|
u8 magic_evasion
|
||||||
|
u8 magic_defense
|
||||||
|
u8 elemental_absorb
|
||||||
|
u8 elemental_evade
|
||||||
|
u8 elemental_immune
|
||||||
|
u8 elemental_half
|
||||||
|
u8 elemental_weakness
|
||||||
|
u8 resistance_status_1
|
||||||
|
u8 resistance_status_2
|
||||||
|
u8 resistance_status_3
|
||||||
|
u8 specialty_weapon
|
||||||
|
u8 specialty_equipment
|
||||||
|
u8 current_job_level
|
||||||
|
u16 current_job_abp
|
||||||
|
u8 spell_level_1
|
||||||
|
u8 spell_level_2
|
||||||
|
u8 spell_level_3
|
||||||
|
u32 equipment_category
|
||||||
|
u16 attack
|
||||||
|
u8 attack_id_reaction_unused
|
||||||
|
u8 unk1
|
||||||
|
u8 unk2
|
||||||
|
u8 unk3
|
||||||
|
u8 freelancer_strength
|
||||||
|
u8 freelancer_agility
|
||||||
|
u8 freelancer_stamina
|
||||||
|
u8 freelancer_magic
|
||||||
|
u16 freelancer_innates
|
||||||
|
|
||||||
|
struct Job_progress
|
||||||
|
u12 abp
|
||||||
|
u4 level
|
||||||
|
|
||||||
|
struct Config
|
||||||
|
u3 battle_speed # 0=1 in-game, ..., 5=6 in-game
|
||||||
|
u1 is_wait_mode # 0=active, 1=wait???
|
||||||
|
u3 message_speed # 0=1 in-game, ..., 5=6 in-game
|
||||||
|
u1 command_set # 0=window, 1=shortcut
|
||||||
|
u5 menu_color_r
|
||||||
|
u5 menu_color_g
|
||||||
|
u5 menu_color_b
|
||||||
|
u1 padding
|
||||||
|
u1 reequip_mode # 0=optimum, 1=empty
|
||||||
|
u1 is_mono # 0=stereo, 1=mono
|
||||||
|
u1 is_memory_cursor # 0=reset, 1=memory
|
||||||
|
u4 unk0
|
||||||
|
u1 hide_atb_gauge # 0=show, 1=hide
|
||||||
|
u6 unk1
|
||||||
|
u1 is_controller_custom # 0=no, 1=yes
|
||||||
|
u1 is_controller_2p # 0=no, 1=yes
|
||||||
|
u8 button_A # Bit of action
|
||||||
|
u8 button_B # Bit of action
|
||||||
|
u8 button_X # Bit of action
|
||||||
|
u8 button_Y # Bit of action
|
||||||
|
u8 button_L # Bit of action
|
||||||
|
u8 button_R # Bit of action
|
||||||
|
u8 button_Select # Bit of action
|
||||||
|
4 of u8 character_player_nums # 0=controller 1, 1=controller 2
|
||||||
|
4 of 4 of u8 character_shortcut_commands # 0=ability_1, 1=ability_2, 2=ability_3, 3=ability_4
|
||||||
|
|
||||||
|
struct Vehicle
|
||||||
|
u2 mode_switching
|
||||||
|
u3 movement_type
|
||||||
|
u3 map_id
|
||||||
|
u7 unk0
|
||||||
|
u1 is_hidden # 0=show, 1=hide
|
||||||
|
u8 x
|
||||||
|
u8 y
|
||||||
|
|
||||||
|
struct Save_slot
|
||||||
|
4 of Character characters
|
||||||
|
256 of u8 inventory_item_ids
|
||||||
|
256 of u8 inventory_item_qtys
|
||||||
|
u24 unlocked_jobs
|
||||||
|
4 of 22 of Job_progress character_jobs_progress
|
||||||
|
4 of u8 character_abilities_learned_count
|
||||||
|
4 of 20 of u8 character_abilities_learned
|
||||||
|
u24 current_gil
|
||||||
|
u32 game_time_frames
|
||||||
|
u16 num_enemies_defeated
|
||||||
|
32 of u8 magic_learned
|
||||||
|
Config config
|
||||||
|
5 of 6 of u8 character_names # Bartz, Lenna, Galuf, Faris, Krile. Dialog is hardcoded for everyone except Bartz's name anyway...
|
||||||
|
6 of u8 unk0
|
||||||
|
u8 magic_lamp_next_summon
|
||||||
|
u8 num_battles_escaped # Brave Blade vs Chicken Knife
|
||||||
|
u8 wonder_rod_magic
|
||||||
|
9 of u8 unk1
|
||||||
|
u16 num_total_battles
|
||||||
|
u16 num_times_saved
|
||||||
|
u8 last_battle_results # 0=victory, 1=game over, 2=escaped
|
||||||
|
15 of u8 flags_battle_events
|
||||||
|
32 of u8 flags_treasure_opened
|
||||||
|
32 of u8 unk_probably_still_flags_treasure_opened
|
||||||
|
96 of u8 flags_events # RAM map mentions $D8E000. This is likely critical to story progression and scripting.
|
||||||
|
96 of u8 unk_probably_still_flags_events
|
||||||
|
u16 map_id_inner
|
||||||
|
u16 map_id_world
|
||||||
|
u8 pos_x
|
||||||
|
u8 pos_y
|
||||||
|
u8 current_character_sprite
|
||||||
|
u8 current_character_facing
|
||||||
|
u8 current_vehicle
|
||||||
|
Vehicle veh_chocobo
|
||||||
|
Vehicle veh_black_chocobo
|
||||||
|
Vehicle veh_hiryuu
|
||||||
|
Vehicle veh_submarine
|
||||||
|
Vehicle veh_steamship
|
||||||
|
Vehicle veh_airship
|
||||||
|
u16 teleport_map_id
|
||||||
|
u8 teleport_map_x
|
||||||
|
u8 teleport_map_y
|
||||||
|
u8 initial_seed
|
||||||
|
u8 walking_speed # 0=normal, 1=double (fast), 80=half (slow)
|
||||||
|
u8 timed_event_active
|
||||||
|
u16 timed_event_timer
|
||||||
|
u16 timed_event_end
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
struct ItemCost # All definitions here are intended to be overriden in code, but provide correctly-sized stubs for programs that don't care
|
||||||
|
u1 is_sellable
|
||||||
|
u1 is_sellprice_5gil
|
||||||
|
u6 exponent
|
||||||
|
u8 mantissa # buy_price = mantissa * int(pow(10, exponent)); sell_price = -1 if not is_sellable else (5 if is_sellprice_5gil else buy_price/2)
|
||||||
|
|
||||||
|
struct EquipStatBonus
|
||||||
|
u1 is_stat_bonus # 0 -> data is elemental bonus bitfield; 1 -> 4bit toggle fields for affected stats, 3bit selector of bonus enum
|
||||||
|
u7 data # Meaning changes based on is_stat_bonus
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -0,0 +1,121 @@
|
||||||
|
Creative Commons Legal Code
|
||||||
|
|
||||||
|
CC0 1.0 Universal
|
||||||
|
|
||||||
|
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||||
|
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||||
|
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||||
|
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||||
|
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||||
|
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||||
|
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||||
|
HEREUNDER.
|
||||||
|
|
||||||
|
Statement of Purpose
|
||||||
|
|
||||||
|
The laws of most jurisdictions throughout the world automatically confer
|
||||||
|
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||||
|
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||||
|
authorship and/or a database (each, a "Work").
|
||||||
|
|
||||||
|
Certain owners wish to permanently relinquish those rights to a Work for
|
||||||
|
the purpose of contributing to a commons of creative, cultural and
|
||||||
|
scientific works ("Commons") that the public can reliably and without fear
|
||||||
|
of later claims of infringement build upon, modify, incorporate in other
|
||||||
|
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||||
|
and for any purposes, including without limitation commercial purposes.
|
||||||
|
These owners may contribute to the Commons to promote the ideal of a free
|
||||||
|
culture and the further production of creative, cultural and scientific
|
||||||
|
works, or to gain reputation or greater distribution for their Work in
|
||||||
|
part through the use and efforts of others.
|
||||||
|
|
||||||
|
For these and/or other purposes and motivations, and without any
|
||||||
|
expectation of additional consideration or compensation, the person
|
||||||
|
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||||
|
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||||
|
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||||
|
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||||
|
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||||
|
|
||||||
|
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||||
|
protected by copyright and related or neighboring rights ("Copyright and
|
||||||
|
Related Rights"). Copyright and Related Rights include, but are not
|
||||||
|
limited to, the following:
|
||||||
|
|
||||||
|
i. the right to reproduce, adapt, distribute, perform, display,
|
||||||
|
communicate, and translate a Work;
|
||||||
|
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||||
|
iii. publicity and privacy rights pertaining to a person's image or
|
||||||
|
likeness depicted in a Work;
|
||||||
|
iv. rights protecting against unfair competition in regards to a Work,
|
||||||
|
subject to the limitations in paragraph 4(a), below;
|
||||||
|
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||||
|
in a Work;
|
||||||
|
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||||
|
European Parliament and of the Council of 11 March 1996 on the legal
|
||||||
|
protection of databases, and under any national implementation
|
||||||
|
thereof, including any amended or successor version of such
|
||||||
|
directive); and
|
||||||
|
vii. other similar, equivalent or corresponding rights throughout the
|
||||||
|
world based on applicable law or treaty, and any national
|
||||||
|
implementations thereof.
|
||||||
|
|
||||||
|
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||||
|
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||||
|
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||||
|
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||||
|
of action, whether now known or unknown (including existing as well as
|
||||||
|
future claims and causes of action), in the Work (i) in all territories
|
||||||
|
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||||
|
treaty (including future time extensions), (iii) in any current or future
|
||||||
|
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||||
|
including without limitation commercial, advertising or promotional
|
||||||
|
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||||
|
member of the public at large and to the detriment of Affirmer's heirs and
|
||||||
|
successors, fully intending that such Waiver shall not be subject to
|
||||||
|
revocation, rescission, cancellation, termination, or any other legal or
|
||||||
|
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||||
|
as contemplated by Affirmer's express Statement of Purpose.
|
||||||
|
|
||||||
|
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||||
|
be judged legally invalid or ineffective under applicable law, then the
|
||||||
|
Waiver shall be preserved to the maximum extent permitted taking into
|
||||||
|
account Affirmer's express Statement of Purpose. In addition, to the
|
||||||
|
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||||
|
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||||
|
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||||
|
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||||
|
maximum duration provided by applicable law or treaty (including future
|
||||||
|
time extensions), (iii) in any current or future medium and for any number
|
||||||
|
of copies, and (iv) for any purpose whatsoever, including without
|
||||||
|
limitation commercial, advertising or promotional purposes (the
|
||||||
|
"License"). The License shall be deemed effective as of the date CC0 was
|
||||||
|
applied by Affirmer to the Work. Should any part of the License for any
|
||||||
|
reason be judged legally invalid or ineffective under applicable law, such
|
||||||
|
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||||
|
of the License, and in such case Affirmer hereby affirms that he or she
|
||||||
|
will not (i) exercise any of his or her remaining Copyright and Related
|
||||||
|
Rights in the Work or (ii) assert any associated claims and causes of
|
||||||
|
action with respect to the Work, in either case contrary to Affirmer's
|
||||||
|
express Statement of Purpose.
|
||||||
|
|
||||||
|
4. Limitations and Disclaimers.
|
||||||
|
|
||||||
|
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||||
|
surrendered, licensed or otherwise affected by this document.
|
||||||
|
b. Affirmer offers the Work as-is and makes no representations or
|
||||||
|
warranties of any kind concerning the Work, express, implied,
|
||||||
|
statutory or otherwise, including without limitation warranties of
|
||||||
|
title, merchantability, fitness for a particular purpose, non
|
||||||
|
infringement, or the absence of latent or other defects, accuracy, or
|
||||||
|
the present or absence of errors, whether or not discoverable, all to
|
||||||
|
the greatest extent permissible under applicable law.
|
||||||
|
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||||
|
that may apply to the Work or any use thereof, including without
|
||||||
|
limitation any person's Copyright and Related Rights in the Work.
|
||||||
|
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||||
|
consents, permissions or other rights required for any use of the
|
||||||
|
Work.
|
||||||
|
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||||
|
party to this document and has no duty or obligation with respect to
|
||||||
|
this CC0 or use of the Work.
|
|
@ -0,0 +1,3 @@
|
||||||
|
# ChocolateBirdData
|
||||||
|
|
||||||
|
The data definitions that ChocolateBird uses, separated out into its own repository so that other projects can easily use them.
|
|
@ -0,0 +1,283 @@
|
||||||
|
# This is a reference implementation of parsing, serializing, and deserializing ChocolateBird's struct definitions.
|
||||||
|
# It is ported from the original GDscript to Python.
|
||||||
|
import logging
|
||||||
|
from io import TextIOWrapper
|
||||||
|
from struct import pack_into, unpack_from, calcsize
|
||||||
|
from collections.abc import Buffer
|
||||||
|
|
||||||
|
|
||||||
|
class LeftoverBits:
|
||||||
|
number_bits = 0
|
||||||
|
bit_buffer = 0 # Stored as an integer
|
||||||
|
|
||||||
|
|
||||||
|
class ReadBuffer:
|
||||||
|
backing_buffer: Buffer
|
||||||
|
position: int = 0
|
||||||
|
|
||||||
|
def __init__(self, backing_buffer, position: int = 0) -> None:
|
||||||
|
self.backing_buffer = backing_buffer
|
||||||
|
self.position = position
|
||||||
|
|
||||||
|
def get(self, format) -> tuple:
|
||||||
|
values = unpack_from(format, self.backing_buffer, self.position)
|
||||||
|
self.position += calcsize(format) # TODO: cache this
|
||||||
|
return values
|
||||||
|
|
||||||
|
|
||||||
|
class WriteBuffer:
|
||||||
|
backing_buffer: Buffer
|
||||||
|
position: int = 0
|
||||||
|
|
||||||
|
def __init__(self, backing_buffer, position: int = 0) -> None:
|
||||||
|
self.backing_buffer = backing_buffer
|
||||||
|
self.position = position
|
||||||
|
|
||||||
|
def put(self, format, *values) -> None:
|
||||||
|
pack_into(format, self.backing_buffer, self.position, *values)
|
||||||
|
self.position += calcsize(format) # TODO: cache this
|
||||||
|
|
||||||
|
|
||||||
|
class StructType:
|
||||||
|
name: str = None
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
if self.name:
|
||||||
|
return self.name
|
||||||
|
return super().__repr__()
|
||||||
|
|
||||||
|
def get_value(self, buffer: ReadBuffer, leftover_bits: LeftoverBits):
|
||||||
|
raise NotImplementedError('Deserialization not implemented')
|
||||||
|
def put_value(self, buffer: WriteBuffer, value, leftover_bits: LeftoverBits):
|
||||||
|
raise NotImplementedError('Serialization not implemented')
|
||||||
|
|
||||||
|
|
||||||
|
class SimpleStruct(StructType):
|
||||||
|
format: str
|
||||||
|
def __init__(self, format, name=None) -> None:
|
||||||
|
self.format = format
|
||||||
|
self.name = name
|
||||||
|
def get_value(self, buffer: ReadBuffer, leftover_bits: LeftoverBits):
|
||||||
|
return buffer.get(self.format)[0]
|
||||||
|
def put_value(self, buffer: WriteBuffer, value, leftover_bits: LeftoverBits):
|
||||||
|
buffer.put(self.format, value)
|
||||||
|
|
||||||
|
|
||||||
|
class U24(StructType):
|
||||||
|
name = 'u24'
|
||||||
|
def get_value(self, buffer: ReadBuffer, leftover_bits: LeftoverBits):
|
||||||
|
u16, u8 = buffer.get('<HB')
|
||||||
|
return u16 | (u8 << 16)
|
||||||
|
def put_value(self, buffer: WriteBuffer, value, leftover_bits: LeftoverBits):
|
||||||
|
buffer.put('<HB', value & 0xFFFF, value >> 16)
|
||||||
|
|
||||||
|
|
||||||
|
class S24(StructType):
|
||||||
|
name = 's24'
|
||||||
|
def get_value(self, buffer: ReadBuffer, leftover_bits: LeftoverBits):
|
||||||
|
u16, u8 = buffer.get('<HB')
|
||||||
|
unsigned = u16 | (u8 << 16)
|
||||||
|
return unsigned - (2 * (unsigned & 0x800000))
|
||||||
|
def put_value(self, buffer: WriteBuffer, value, leftover_bits: LeftoverBits):
|
||||||
|
unsigned = value % 0x1000000
|
||||||
|
buffer.put('<HB', unsigned & 0xFFFF, unsigned >> 16)
|
||||||
|
|
||||||
|
|
||||||
|
class UBits(StructType):
|
||||||
|
bits = 8
|
||||||
|
|
||||||
|
def __init__(self, bits: int):
|
||||||
|
self.bits = bits
|
||||||
|
self.name = f'u{bits:d}'
|
||||||
|
|
||||||
|
def get_value(self, buffer: ReadBuffer, leftover_bits: LeftoverBits):
|
||||||
|
while leftover_bits.number_bits < self.bits:
|
||||||
|
leftover_bits.bit_buffer |= buffer.get('<B')[0] << leftover_bits.number_bits
|
||||||
|
leftover_bits.number_bits += 8
|
||||||
|
value = leftover_bits.bit_buffer & ((1 << self.bits)-1)
|
||||||
|
leftover_bits.bit_buffer = leftover_bits.bit_buffer >> self.bits
|
||||||
|
leftover_bits.number_bits -= self.bits
|
||||||
|
return value
|
||||||
|
|
||||||
|
def put_value(self, buffer: WriteBuffer, value, leftover_bits: LeftoverBits):
|
||||||
|
leftover_bits.bit_buffer |= value << leftover_bits.number_bits
|
||||||
|
leftover_bits.number_bits += self.bits
|
||||||
|
while leftover_bits.number_bits >= 8:
|
||||||
|
buffer.put('<B', leftover_bits.bit_buffer & 0xFF)
|
||||||
|
leftover_bits.number_bits -= 8
|
||||||
|
leftover_bits.bit_buffer = leftover_bits.bit_buffer >> 8
|
||||||
|
|
||||||
|
|
||||||
|
class Struct(StructType):
|
||||||
|
members: list # Array of [name, StructType]
|
||||||
|
|
||||||
|
def __init__(self, name=None) -> None:
|
||||||
|
self.name = name
|
||||||
|
self.members = []
|
||||||
|
|
||||||
|
def get_value(self, buffer: ReadBuffer, leftover_bits: LeftoverBits):
|
||||||
|
return {key: struct_type.get_value(buffer, leftover_bits) for key, struct_type in self.members}
|
||||||
|
|
||||||
|
def put_value(self, buffer: WriteBuffer, value, leftover_bits: LeftoverBits):
|
||||||
|
for key, struct_type in self.members:
|
||||||
|
if not (key in value):
|
||||||
|
logging.error(f'Key "{key}" missing from value supplied')
|
||||||
|
return
|
||||||
|
struct_type.put_value(buffer, value[key], leftover_bits)
|
||||||
|
|
||||||
|
|
||||||
|
class StructArrayType(StructType):
|
||||||
|
count: int
|
||||||
|
struct_type: StructType
|
||||||
|
|
||||||
|
def __init__(self, count, struct_type, name=None) -> None:
|
||||||
|
self.count = count
|
||||||
|
self.struct_type = struct_type
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
def get_value(self, buffer: ReadBuffer, leftover_bits: LeftoverBits) -> list:
|
||||||
|
return [self.struct_type.get_value(buffer, leftover_bits) for i in range(self.count)]
|
||||||
|
|
||||||
|
def put_value(self, buffer: WriteBuffer, value, leftover_bits: LeftoverBits) -> None:
|
||||||
|
if len(value) < self.count:
|
||||||
|
logging.error('Not enough values supplied')
|
||||||
|
return
|
||||||
|
for i in range(self.count):
|
||||||
|
self.struct_type.put_value(buffer, value[i], leftover_bits)
|
||||||
|
|
||||||
|
|
||||||
|
def get_base_structarraytypes() -> dict:
|
||||||
|
return {
|
||||||
|
'u8': SimpleStruct('<B', 'u8'),
|
||||||
|
's8': SimpleStruct('<b', 's8'),
|
||||||
|
'u16': SimpleStruct('<H', 'u16'),
|
||||||
|
's16': SimpleStruct('<h', 's16'),
|
||||||
|
'u24': U24(),
|
||||||
|
's24': S24(),
|
||||||
|
'u32': SimpleStruct('<I', 'u32'),
|
||||||
|
's32': SimpleStruct('<i', 's32'),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_structarraytype(type: str, existing_structs: dict):
|
||||||
|
tokens = type.split(' ')
|
||||||
|
t: str = tokens[-1]
|
||||||
|
inner_type: Struct = None
|
||||||
|
if t in existing_structs:
|
||||||
|
inner_type = existing_structs[t]
|
||||||
|
elif t[0] == 'u':
|
||||||
|
b: int = int(t[1:])
|
||||||
|
if b > 0:
|
||||||
|
inner_type = UBits(b)
|
||||||
|
existing_structs[f'u{b:d}'] = inner_type # Cache it for future use
|
||||||
|
if not inner_type:
|
||||||
|
logging.error(f'typestring "{type}" has no matches for "{t}" in existing structs')
|
||||||
|
return
|
||||||
|
|
||||||
|
l: int = len(tokens)
|
||||||
|
if l == 1:
|
||||||
|
return inner_type
|
||||||
|
# Our parsing goal is to turn 'a of b of c of d' into StructArrayType<StructArrayType<StructArrayType<d, c>, b>, a>
|
||||||
|
# Our strategy is to parse backwards over the tokens, changing inner_type at each point
|
||||||
|
# a of b of c of (d)
|
||||||
|
# a of b of (c of d)
|
||||||
|
# a of (b of c of d)
|
||||||
|
# (a of b of c of d)
|
||||||
|
# done
|
||||||
|
i: int = l-2
|
||||||
|
while i > -1:
|
||||||
|
match tokens[i]:
|
||||||
|
case 'of':
|
||||||
|
i -= 1
|
||||||
|
l1: int = int(tokens[i])
|
||||||
|
if l1 > 1:
|
||||||
|
inner_type = StructArrayType(l1, inner_type, name=type) # Might be worth caching these later on if we use them more
|
||||||
|
i -= 1
|
||||||
|
case k:
|
||||||
|
logging.error(f'Invalid keyword used in type designator: "{k}"')
|
||||||
|
return
|
||||||
|
return inner_type
|
||||||
|
|
||||||
|
|
||||||
|
def parse_struct_definitions_from_tsv_file(tsv_file: TextIOWrapper, existing_structs: dict) -> None:
|
||||||
|
current_struct: Struct
|
||||||
|
lines = tsv_file.read().rstrip().split('\n')
|
||||||
|
for line in lines:
|
||||||
|
# logging.debug(line)
|
||||||
|
tokens = line.split('\t')
|
||||||
|
size = len(tokens)
|
||||||
|
if size < 2:
|
||||||
|
continue
|
||||||
|
# Size is at least 2
|
||||||
|
type, label = tokens[:2]
|
||||||
|
if type == 'struct':
|
||||||
|
# New struct declaration
|
||||||
|
current_struct = Struct(name=label)
|
||||||
|
existing_structs[label] = current_struct
|
||||||
|
elif type and label:
|
||||||
|
current_struct.members.append([label, get_structarraytype(type, existing_structs)])
|
||||||
|
# TODO: Maybe store the trailing comments somewhere?
|
||||||
|
|
||||||
|
|
||||||
|
def parse_struct_definitions_from_tsv_filename(filename: str, existing_structs: dict) -> None:
|
||||||
|
with open(filename, 'r') as file:
|
||||||
|
parse_struct_definitions_from_tsv_file(file, existing_structs)
|
||||||
|
|
||||||
|
|
||||||
|
def load_ff5_snes_struct_definitions() -> dict:
|
||||||
|
existing_structs = get_base_structarraytypes()
|
||||||
|
parse_struct_definitions_from_tsv_filename('structs_SNES_stubs.tsv', existing_structs)
|
||||||
|
parse_struct_definitions_from_tsv_filename('5/structs/SNES_stubs.tsv', existing_structs)
|
||||||
|
parse_struct_definitions_from_tsv_filename('5/structs/SNES.tsv', existing_structs)
|
||||||
|
parse_struct_definitions_from_tsv_filename('5/structs/SNES_save.tsv', existing_structs)
|
||||||
|
return existing_structs
|
||||||
|
|
||||||
|
|
||||||
|
# Basic TSV dumper
|
||||||
|
# This is mostly unrelated, but helpful for debugging.
|
||||||
|
def flatten_keys(d: dict, prefix: str = '') -> dict:
|
||||||
|
output = {}
|
||||||
|
for k, v in d.items():
|
||||||
|
if isinstance(v, dict):
|
||||||
|
flat = flatten_keys(v, f'{prefix}{k}.')
|
||||||
|
for k2, v2 in flat.items():
|
||||||
|
output[k2] = v2
|
||||||
|
else:
|
||||||
|
output[f'{prefix}{k}'] = v
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def dump_tsv(filename, table):
|
||||||
|
table_flat = [flatten_keys(d) for d in table]
|
||||||
|
hex_digits = len(f'{len(table_flat)-1:X}') # See how long the hex representation of the last number will be, so we can zero-pad the rest to match.
|
||||||
|
hex_format = f'0{hex_digits}X'
|
||||||
|
|
||||||
|
with open(filename, 'w') as file:
|
||||||
|
headers = list(table_flat[0].keys())
|
||||||
|
file.write('\t'.join(['ID'] + headers) + '\n')
|
||||||
|
for i, entry in enumerate(table_flat):
|
||||||
|
file.write('\t'.join([f'0x{i:{hex_format}}'] + [str(entry[key]) for key in headers]) + '\n')
|
||||||
|
|
||||||
|
|
||||||
|
# Example usage: run this script with a positional filename argument for a FF5 .sfc and it will load EnemyStats from it.
|
||||||
|
if __name__ == '__main__':
|
||||||
|
existing_structs = load_ff5_snes_struct_definitions()
|
||||||
|
leftover_bits = LeftoverBits()
|
||||||
|
|
||||||
|
from sys import argv
|
||||||
|
if len(argv) > 1:
|
||||||
|
rom_filename = argv[1]
|
||||||
|
if rom_filename.endswith('.sfc'):
|
||||||
|
with open(rom_filename, 'rb') as file:
|
||||||
|
rom_data = file.read()
|
||||||
|
buffer = ReadBuffer(rom_data, 0x100000)
|
||||||
|
# enemy_stats = existing_structs['EnemyStats'].get_value(buffer, leftover_bits)
|
||||||
|
enemy_stats = get_structarraytype('384 of EnemyStats', existing_structs).get_value(buffer, leftover_bits)
|
||||||
|
print('Loaded EnemyStats table to enemy_stats! If you ran the python interpreter with -i flag, you can now examine it in the REPL.')
|
||||||
|
# Also add a basic dumper
|
||||||
|
if len(argv) > 2 and argv[2] == 'dump_tsv':
|
||||||
|
dump_tsv('enemy_stats.tsv', enemy_stats)
|
||||||
|
print('Dumped enemy_stats table to enemy_stats.tsv!')
|
||||||
|
else:
|
||||||
|
print(f'Argument "{rom_filename}" doesn\'t end in ".sfc", so it was not parsed as a FF5 SNES ROM.')
|
||||||
|
else:
|
||||||
|
print('Example usage: run this script with a positional filename argument for a FF5 .sfc and it will load EnemyStats from it.')
|
|
@ -0,0 +1,29 @@
|
||||||
|
struct TileSNESMode7 # All definitions here are intended to be overriden in code, but provide correctly-sized stubs for programs that don't care
|
||||||
|
64 of u8 data
|
||||||
|
|
||||||
|
struct TileSNESMode7c
|
||||||
|
32 of u8 data
|
||||||
|
|
||||||
|
struct TileSNES4bpp
|
||||||
|
32 of u8 data
|
||||||
|
|
||||||
|
struct TileSNES3bpp
|
||||||
|
24 of u8 data
|
||||||
|
|
||||||
|
struct TileSNES2bpp
|
||||||
|
16 of u8 data
|
||||||
|
|
||||||
|
struct TileSNES1bpp
|
||||||
|
8 of u8 data
|
||||||
|
|
||||||
|
struct SNESTritile
|
||||||
|
24 of u8 data
|
||||||
|
|
||||||
|
struct ColorBGR555
|
||||||
|
u16 data
|
||||||
|
|
||||||
|
struct Palette16Of555 # Typed PoolColorArray in GDscript
|
||||||
|
16 of ColorBGR555 data
|
||||||
|
|
||||||
|
struct Palette128Of555 # Typed PoolColorArray in GDscript
|
||||||
|
128 of ColorBGR555 data
|
Can't render this file because it has a wrong number of fields in line 2.
|
Loading…
Reference in New Issue