Remove PaletteOf555 type, make godot implementation automatically detect arrays of colors in general form

This commit is contained in:
Luke Hubmayer-Werner 2024-06-27 14:41:12 +09:30
parent a350cea708
commit 7ccca74bc6
5 changed files with 26 additions and 37 deletions

View File

@ -1,7 +1,7 @@
Label SNES PSX_file PSX_offset format Comment Label SNES PSX_file PSX_offset format Comment
character_battle_sprite_stone_palette 0x00F807 N/A N/A Palette16Of555 Also 0x199835 character_battle_sprite_stone_palette 0x00F807 N/A N/A 16 of ColorBGR555 Also 0x199835
character_battle_sprite_disabled_palette 0x00F867 /mnu/memsave.bin 0x000034 Palette16Of555 character_battle_sprite_disabled_palette 0x00F867 /mnu/memsave.bin 0x000034 16 of ColorBGR555
locations_bg_palettes 0x03BB00 /nar/ff5_binx.bin 0x03BF80 43 of Palette128Of555 locations_bg_palettes 0x03BB00 /nar/ff5_binx.bin 0x03BF80 43 of 128 of ColorBGR555
font_glyphs_dialogue 0x03E800 256 of SNESTritile length 0x1800 font_glyphs_dialogue 0x03E800 256 of SNESTritile length 0x1800
sfx_brr_data 0x041E3F Use the below SPC pointers 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_brr_pointers 0x041F4F 8 of 2 of u16 SPC memory addresses not ROM. Start address followed by loop address.
@ -17,7 +17,7 @@ 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. 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_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_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 worldmap_palettes 0x0FFCC0 /nar/ff5_binx.bin 0x040000 3 of 128 of ColorBGR555
tbl_enemy_stats 0x100000 384 of EnemyStats tbl_enemy_stats 0x100000 384 of EnemyStats
enemy_battle_sprite_layouts_small 0x10D004 102 of 8 of u8 length 0x330 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_layouts_large 0x10D334 72 of 16 of u16 length 0x900
@ -49,15 +49,15 @@ tbl_ability_stats_passives 0x116308 33 of 4 of u8 length 0x84
character_initial_data 0x117000 4 of Character length 0x140 character_initial_data 0x117000 4 of Character length 0x140
attack_layouts 0x117FA0 5 of 2048 of u8 length 0x2400 attack_layouts 0x117FA0 5 of 2048 of u8 length 0x2400
weapon_palettes 0x11A3A0 weapon_palettes 0x11A3A0
enemy_battle_status_sprite_palette 0x11A400 Palette16Of555 enemy_battle_status_sprite_palette 0x11A400 16 of ColorBGR555
tiles_fist 0x11D710 /btl/ff5_btl.bin 0x021D10 TileSNES3bpp Also /mnu/men_bin.eng:0x00D910 tiles_fist 0x11D710 /btl/ff5_btl.bin 0x021D10 TileSNES3bpp Also /mnu/men_bin.eng:0x00D910
font_glyphs_small 0x11F000 256 of TileSNES2bpp length 0x1000 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_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 character_battle_sprite_palettes 0x14A3C0 /btl/ff5_btl.bin 0x0273C0 5 of 22 of 16 of ColorBGR555 Also /mnu/men_bin.eng:0x03A5C0
enemy_battle_sprite_data 0x14B180 384 of EnemySpriteData length 0x780 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 character_battle_sprite_layouts 0x14B997 /btl/ff5_btl.bin 0x028997 11 of 6 of u8
tbl_battle_backgrounds 0x14BA21 34 of BattleBackgroundData tbl_battle_backgrounds 0x14BA21 34 of BattleBackgroundData
battle_background_palettes 0x14BB31 84 of Palette16Of555 battle_background_palettes 0x14BB31 84 of 16 of ColorBGR555
ptrs_battle_background_tile_animations 0x14C5B1 8 of u16 bank 0x140000 (0xD40000) ptrs_battle_background_tile_animations 0x14C5B1 8 of u16 bank 0x140000 (0xD40000)
battle_background_tile_animations_data 0x14C5C1 see above battle_background_tile_animations_data 0x14C5C1 see above
ptrs_battle_background_palette_animations 0x14C6CD 3 of u16 bank 0x140000 (0xD40000) ptrs_battle_background_palette_animations 0x14C6CD 3 of u16 bank 0x140000 (0xD40000)

1 Label SNES PSX_file PSX_offset format Comment
2 character_battle_sprite_stone_palette 0x00F807 N/A N/A Palette16Of555 16 of ColorBGR555 Also 0x199835
3 character_battle_sprite_disabled_palette 0x00F867 /mnu/memsave.bin 0x000034 Palette16Of555 16 of ColorBGR555
4 locations_bg_palettes 0x03BB00 /nar/ff5_binx.bin 0x03BF80 43 of Palette128Of555 43 of 128 of ColorBGR555
5 font_glyphs_dialogue 0x03E800 256 of SNESTritile length 0x1800
6 sfx_brr_data 0x041E3F Use the below SPC pointers
7 sfx_brr_pointers 0x041F4F 8 of 2 of u16 SPC memory addresses not ROM. Start address followed by loop address.
17 enemy_battle_sprite_palettes 0x0ED000 See enemy_battle_sprite_data for pointers. Some are 8 colours instead of 16.
18 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
19 worldmap_tiles.bias 0x0FF9C0 /nar/ff5_bin3.bin 0x03FB00 3 of 256 of u8 Add to each pixel of the mode7c tiles
20 worldmap_palettes 0x0FFCC0 /nar/ff5_binx.bin 0x040000 3 of Palette128Of555 3 of 128 of ColorBGR555
21 tbl_enemy_stats 0x100000 384 of EnemyStats
22 enemy_battle_sprite_layouts_small 0x10D004 102 of 8 of u8 length 0x330
23 enemy_battle_sprite_layouts_large 0x10D334 72 of 16 of u16 length 0x900
49 character_initial_data 0x117000 4 of Character length 0x140
50 attack_layouts 0x117FA0 5 of 2048 of u8 length 0x2400
51 weapon_palettes 0x11A3A0
52 enemy_battle_status_sprite_palette 0x11A400 Palette16Of555 16 of ColorBGR555
53 tiles_fist 0x11D710 /btl/ff5_btl.bin 0x021D10 TileSNES3bpp Also /mnu/men_bin.eng:0x00D910
54 font_glyphs_small 0x11F000 256 of TileSNES2bpp length 0x1000
55 character_battle_sprite_tiles 0x120000 /mnu/men_bin.eng 0x010200 5 of 22 of 48 of TileSNES4bpp
56 character_battle_sprite_palettes 0x14A3C0 /btl/ff5_btl.bin 0x0273C0 5 of 22 of Palette16Of555 5 of 22 of 16 of ColorBGR555 Also /mnu/men_bin.eng:0x03A5C0
57 enemy_battle_sprite_data 0x14B180 384 of EnemySpriteData length 0x780
58 character_battle_sprite_layouts 0x14B997 /btl/ff5_btl.bin 0x028997 11 of 6 of u8
59 tbl_battle_backgrounds 0x14BA21 34 of BattleBackgroundData
60 battle_background_palettes 0x14BB31 84 of Palette16Of555 84 of 16 of ColorBGR555
61 ptrs_battle_background_tile_animations 0x14C5B1 8 of u16 bank 0x140000 (0xD40000)
62 battle_background_tile_animations_data 0x14C5C1 see above
63 ptrs_battle_background_palette_animations 0x14C6CD 3 of u16 bank 0x140000 (0xD40000)

View File

@ -20,10 +20,7 @@ struct SNESTritile
24 of u8 data 24 of u8 data
struct ColorBGR555 struct ColorBGR555
u16 data u5 r5
u5 g5
struct Palette16Of555 # Typed PoolColorArray in GDscript u5 b5
16 of ColorBGR555 data u1 0
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.

View File

@ -319,7 +319,6 @@ var monster_battle_sprite_textures := {} # "tiles_offset:layout_id:large:bpp" -
func load_enemy_battle_sprites(data: Dictionary, buffer: StreamPeerBuffer): func load_enemy_battle_sprites(data: Dictionary, buffer: StreamPeerBuffer):
var PAL: int = Common.SNES_PSX_addresses.enemy_battle_sprite_palettes.SNES var PAL: int = Common.SNES_PSX_addresses.enemy_battle_sprite_palettes.SNES
var TILES: int = Common.SNES_PSX_addresses.enemy_battle_sprite_tiles.SNES var TILES: int = Common.SNES_PSX_addresses.enemy_battle_sprite_tiles.SNES
var Palette16Of555 = RomLoader.structdefs.Palette16Of555
data.monster_battle_sprites = [] data.monster_battle_sprites = []
for monster in data.enemy_battle_sprite_data: for monster in data.enemy_battle_sprite_data:
var entry = {} var entry = {}

View File

@ -33,19 +33,11 @@ class SNESTritile extends STRUCT.StructType: # Not TileSNESTritile as these are
return GRAPHICS.get_tritile(buffer) return GRAPHICS.get_tritile(buffer)
class ColorBGR555 extends STRUCT.StructType: class ColorBGR555 extends STRUCT.StructType:
func _init():
self.primitive_type = TYPE_COLOR
func get_value(buffer: StreamPeer, leftover_bits: Array): func get_value(buffer: StreamPeer, leftover_bits: Array):
return GRAPHICS.bgr555_to_color(buffer.get_u16()) return GRAPHICS.bgr555_to_color(buffer.get_u16())
class PaletteOf555 extends STRUCT.StructType:
var length: int = 16
func _init(length: int):
self.length = length
func get_value(buffer: StreamPeer, leftover_bits: Array):
var array := PoolColorArray()
for i in self.length:
array.append(GRAPHICS.bgr555_to_color(buffer.get_u16()))
return array
class ItemCost extends STRUCT.StructType: class ItemCost extends STRUCT.StructType:
func get_value(buffer: StreamPeer, leftover_bits: Array): func get_value(buffer: StreamPeer, leftover_bits: Array):
var b0 := buffer.get_u8() var b0 := buffer.get_u8()
@ -108,8 +100,6 @@ static func get_structtypes() -> Dictionary:
'TileSNES1bpp': TileSNES1bpp.new(), 'TileSNES1bpp': TileSNES1bpp.new(),
'SNESTritile': SNESTritile.new(), 'SNESTritile': SNESTritile.new(),
'ColorBGR555': ColorBGR555.new(), 'ColorBGR555': ColorBGR555.new(),
'Palette16Of555': PaletteOf555.new(16),
'Palette128Of555': PaletteOf555.new(128),
'ItemCost': ItemCost.new(), 'ItemCost': ItemCost.new(),
'EquipStatBonus': EquipStatBonus.new(), 'EquipStatBonus': EquipStatBonus.new(),
} }

View File

@ -3,6 +3,7 @@
# leftover_bits is array of form [count, value] # leftover_bits is array of form [count, value]
# array is used for reference semantics as get and put operations may mutate it # array is used for reference semantics as get and put operations may mutate it
class StructType: class StructType:
var primitive_type := TYPE_NIL
func get_value(buffer: StreamPeer, leftover_bits: Array): func get_value(buffer: StreamPeer, leftover_bits: Array):
assert(false, 'Deserialization not implemented') assert(false, 'Deserialization not implemented')
func put_value(buffer: StreamPeer, value, leftover_bits: Array): func put_value(buffer: StreamPeer, value, leftover_bits: Array):
@ -92,31 +93,31 @@ class Struct extends StructType:
var result = {} var result = {}
for member in members: for member in members:
var key: String = member[0] var key: String = member[0]
var structType: StructType = member[1] var struct_type: StructType = member[1]
result[key] = structType.get_value(buffer, leftover_bits) result[key] = struct_type.get_value(buffer, leftover_bits)
return result return result
func put_value(buffer: StreamPeer, value, leftover_bits: Array): func put_value(buffer: StreamPeer, value, leftover_bits: Array):
for member in members: for member in members:
var key: String = member[0] var key: String = member[0]
var structType: StructType = member[1] var struct_type: StructType = member[1]
if not (key in value): if not (key in value):
print_debug('Key "%s" missing from value supplied' % key) print_debug('Key "%s" missing from value supplied' % key)
return return
structType.put_value(buffer, value[key], leftover_bits) struct_type.put_value(buffer, value[key], leftover_bits)
class StructArrayType extends StructType: class StructArrayType extends StructType:
var count: int var count: int
var structType: StructType var contained_struct_type: StructType
func _init(count, structType) -> void: func _init(count, contained_struct_type) -> void:
self.count = count self.count = count
self.structType = structType self.contained_struct_type = contained_struct_type
func get_value(buffer: StreamPeer, leftover_bits: Array): func get_value(buffer: StreamPeer, leftover_bits: Array):
# Might be a bit too much branching but oh well # Might be a bit too much branching but oh well
if self.structType is U8: if self.contained_struct_type is U8:
var result = PoolByteArray() var result = PoolByteArray()
# Slight optimization over calling the method # Slight optimization over calling the method
for i in self.count: for i in self.count:
@ -125,7 +126,9 @@ class StructArrayType extends StructType:
var result = [] var result = []
for i in self.count: for i in self.count:
result.append(self.structType.get_value(buffer, leftover_bits)) result.append(self.contained_struct_type.get_value(buffer, leftover_bits))
if self.contained_struct_type.primitive_type == TYPE_COLOR:
return PoolColorArray(result)
return result return result
func put_value(buffer: StreamPeer, value, leftover_bits: Array): func put_value(buffer: StreamPeer, value, leftover_bits: Array):
@ -133,7 +136,7 @@ class StructArrayType extends StructType:
print_debug('Not enough values supplied') print_debug('Not enough values supplied')
return return
for i in self.count: for i in self.count:
self.structType.put_value(buffer, value[i], leftover_bits) self.contained_struct_type.put_value(buffer, value[i], leftover_bits)
static func get_base_structarraytypes() -> Dictionary: static func get_base_structarraytypes() -> Dictionary: