diff --git a/scripts/loaders/SpriteLoader.gd b/scripts/loaders/SpriteLoader.gd index 31b884c..c0f9006 100644 --- a/scripts/loaders/SpriteLoader.gd +++ b/scripts/loaders/SpriteLoader.gd @@ -146,132 +146,132 @@ static func make_tile_atlas(tile_images) -> Image: return image -func snes_load_worldmap(rom: File): - # Load Worldmap Graphics - var worldmap_tile_counts = [256, 256, 128] # Only 128 underwater tiles - for world_ts in 3: # Bartz/Combined World, Galuf World, Underwater (world tilesets, not to be confused with the 5 world maps) - var tile_count: int = worldmap_tile_counts[world_ts] - var image := generate_palette(rom, Common.SNES_PSX_addresses['worldmap_palettes']['SNES'] + (world_ts*0x100), 0x100) - worldmap_palette_imgs.append(image) - worldmap_palette_textures.append(texture_from_image(image)) +# func snes_load_worldmap(rom: File): +# # Load Worldmap Graphics +# var worldmap_tile_counts = [256, 256, 128] # Only 128 underwater tiles +# for world_ts in 3: # Bartz/Combined World, Galuf World, Underwater (world tilesets, not to be confused with the 5 world maps) +# var tile_count: int = worldmap_tile_counts[world_ts] +# var image := generate_palette(rom, Common.SNES_PSX_addresses['worldmap_palettes']['SNES'] + (world_ts*0x100), 0x100) +# worldmap_palette_imgs.append(image) +# worldmap_palette_textures.append(texture_from_image(image)) - var tile_palettes = [] - rom.seek(Common.SNES_PSX_addresses['worldmap_tiles.bias']['SNES'] + (world_ts*0x100)) - for pal in 256: - tile_palettes.append(rom.get_8()) +# var tile_palettes = [] +# rom.seek(Common.SNES_PSX_addresses['worldmap_tiles.bias']['SNES'] + (world_ts*0x100)) +# for pal in 256: +# tile_palettes.append(rom.get_8()) - var tile_images = [] - # var tile_textures = [] - rom.seek(Common.SNES_PSX_addresses['worldmap_tiles']['SNES'] + (world_ts*0x2000)) - for tile in tile_count: - var tiledata := rom.get_buffer(32) - image = snes_graphics.mode7_compressed_to_tile(tiledata, tile_palettes[tile]) - tile_images.append(image) - # tile_textures.append(texture_from_image(image)) - if world_ts == 0: # Waterfall hack: lay it out vertically, pushing out dummy tiles - tile_images[0x97] = tile_images[0x88] - tile_images[0x98] = tile_images[0x87] - worldmap_tile_individual_imgs.append(tile_images) - worldmap_tile_atlas_textures.append(texture_from_image(make_tile_atlas(tile_images))) +# var tile_images = [] +# # var tile_textures = [] +# rom.seek(Common.SNES_PSX_addresses['worldmap_tiles']['SNES'] + (world_ts*0x2000)) +# for tile in tile_count: +# var tiledata := rom.get_buffer(32) +# image = snes_graphics.mode7_compressed_to_tile(tiledata, tile_palettes[tile]) +# tile_images.append(image) +# # tile_textures.append(texture_from_image(image)) +# if world_ts == 0: # Waterfall hack: lay it out vertically, pushing out dummy tiles +# tile_images[0x97] = tile_images[0x88] +# tile_images[0x98] = tile_images[0x87] +# worldmap_tile_individual_imgs.append(tile_images) +# worldmap_tile_atlas_textures.append(texture_from_image(make_tile_atlas(tile_images))) - # Block definitions - var block_images = [] - var block_textures = [] - var block_bank_start: int = Common.SNES_PSX_addresses['worldmap_blocks']['SNES'] + (world_ts*0x300) - var block_tile_ids := PoolByteArray() - for block in 0xC0: # 192 blocks per world tileset - image = Image.new() - image.create(16, 16, false, INDEX_FORMAT) - for tile in 4: - rom.seek(block_bank_start + block + (tile * 0xC0)) # Horrible interleaving scheme - var src_idx := rom.get_8() - block_tile_ids.append(src_idx) - if src_idx < tile_count: - image.blit_rect(tile_images[src_idx], Rect2(0, 0, 8, 8), Vector2((tile%2)*8, (tile/2)*8)) - block_images.append(image) - block_textures.append(texture_from_image(image)) - worldmap_block_individual_imgs.append(block_images) - worldmap_block_individual_textures.append(block_textures) - worldmap_block_tile_ids.append(block_tile_ids) - # Make block atlas - image = Image.new() - image.create(16*16, 16*12, false, INDEX_FORMAT) - for block in 0xC0: - image.blit_rect(block_images[block], Rect2(0, 0, 16, 16), Vector2((block%16)*16, (block/16)*16)) - worldmap_block_atlas_imgs.append(image) - worldmap_block_atlas_textures.append(texture_from_image(image)) +# # Block definitions +# var block_images = [] +# var block_textures = [] +# var block_bank_start: int = Common.SNES_PSX_addresses['worldmap_blocks']['SNES'] + (world_ts*0x300) +# var block_tile_ids := PoolByteArray() +# for block in 0xC0: # 192 blocks per world tileset +# image = Image.new() +# image.create(16, 16, false, INDEX_FORMAT) +# for tile in 4: +# rom.seek(block_bank_start + block + (tile * 0xC0)) # Horrible interleaving scheme +# var src_idx := rom.get_8() +# block_tile_ids.append(src_idx) +# if src_idx < tile_count: +# image.blit_rect(tile_images[src_idx], Rect2(0, 0, 8, 8), Vector2((tile%2)*8, (tile/2)*8)) +# block_images.append(image) +# block_textures.append(texture_from_image(image)) +# worldmap_block_individual_imgs.append(block_images) +# worldmap_block_individual_textures.append(block_textures) +# worldmap_block_tile_ids.append(block_tile_ids) +# # Make block atlas +# image = Image.new() +# image.create(16*16, 16*12, false, INDEX_FORMAT) +# for block in 0xC0: +# image.blit_rect(block_images[block], Rect2(0, 0, 16, 16), Vector2((block%16)*16, (block/16)*16)) +# worldmap_block_atlas_imgs.append(image) +# worldmap_block_atlas_textures.append(texture_from_image(image)) - # # DEBUG: Make tile atlas - # image = Image.new() - # image.create(16*8, (tile_count/16)*8, false, INDEX_FORMAT) - # for tile in tile_count: - # image.blit_rect(tile_images[tile], Rect2(0, 0, 8, 8), Vector2((tile%16)*8, (tile/16)*8)) - # worldmap_tile_atlas_textures.append(texture_from_image(image)) +# # # DEBUG: Make tile atlas +# # image = Image.new() +# # image.create(16*8, (tile_count/16)*8, false, INDEX_FORMAT) +# # for tile in tile_count: +# # image.blit_rect(tile_images[tile], Rect2(0, 0, 8, 8), Vector2((tile%16)*8, (tile/16)*8)) +# # worldmap_tile_atlas_textures.append(texture_from_image(image)) - MapLoader.update_worldmap_block_tile_ids(worldmap_block_tile_ids) +# MapLoader.update_worldmap_block_tile_ids(worldmap_block_tile_ids) -func snes_load_battle_sprites(rom: File): - # Load Battle sprites - rom.seek(Common.SNES_PSX_addresses['character_battle_sprite_layouts']['SNES']) - var battle_strip_layouts = rom.get_buffer(num_Character_Battle_Sprite_Layouts * 6) - # Character Battle Sprite Tiles - for strip in range(0, 22*5): - var tiles = [] - for i in range(0, 32*48, 32): - tiles.append(snes_graphics.get_tile(rom, Common.SNES_PSX_addresses['character_battle_sprite_tiles']['SNES'] + (strip*32*48) + i, 32)) - var strip_image = Image.new() - strip_image.create(16, 24 * num_Character_Battle_Sprite_Layouts, false, INDEX_FORMAT) - for i in range(6 * num_Character_Battle_Sprite_Layouts): - strip_image.blit_rect(tiles[battle_strip_layouts[i]], Rect2(0, 0, 8, 8), Vector2((i%2) * 8, (i/2) * 8)) - strip_images.append(strip_image) - strip_textures.append(texture_from_image(strip_image)) +# func snes_load_battle_sprites(rom: File): +# # Load Battle sprites +# rom.seek(Common.SNES_PSX_addresses['character_battle_sprite_layouts']['SNES']) +# var battle_strip_layouts = rom.get_buffer(num_Character_Battle_Sprite_Layouts * 6) +# # Character Battle Sprite Tiles +# for strip in range(0, 22*5): +# var tiles = [] +# for i in range(0, 32*48, 32): +# tiles.append(snes_graphics.get_tile(rom, Common.SNES_PSX_addresses['character_battle_sprite_tiles']['SNES'] + (strip*32*48) + i, 32)) +# var strip_image = Image.new() +# strip_image.create(16, 24 * num_Character_Battle_Sprite_Layouts, false, INDEX_FORMAT) +# for i in range(6 * num_Character_Battle_Sprite_Layouts): +# strip_image.blit_rect(tiles[battle_strip_layouts[i]], Rect2(0, 0, 8, 8), Vector2((i%2) * 8, (i/2) * 8)) +# strip_images.append(strip_image) +# strip_textures.append(texture_from_image(strip_image)) - # Character Battle Sprite Palettes - for palette in range(0, 22*5): - character_battle_sprite_palette_textures.append(texture_from_image(generate_palette(rom, Common.SNES_PSX_addresses['character_battle_sprite_palettes']['SNES'] + (palette*32)))) - character_battle_sprite_palette_disabled_texture = texture_from_image(generate_palette(rom, Common.SNES_PSX_addresses['character_battle_sprite_disabled_palette']['SNES'])) - character_battle_sprite_palette_stone_texture = texture_from_image(generate_palette(rom, Common.SNES_PSX_addresses['character_battle_sprite_stone_palette']['SNES'])) +# # Character Battle Sprite Palettes +# for palette in range(0, 22*5): +# character_battle_sprite_palette_textures.append(texture_from_image(generate_palette(rom, Common.SNES_PSX_addresses['character_battle_sprite_palettes']['SNES'] + (palette*32)))) +# character_battle_sprite_palette_disabled_texture = texture_from_image(generate_palette(rom, Common.SNES_PSX_addresses['character_battle_sprite_disabled_palette']['SNES'])) +# character_battle_sprite_palette_stone_texture = texture_from_image(generate_palette(rom, Common.SNES_PSX_addresses['character_battle_sprite_stone_palette']['SNES'])) - weapon_textures['Fist'] = texture_from_image(snes_graphics.get_tile(rom, Common.SNES_PSX_addresses['tiles_fist']['SNES'], 24)) +# weapon_textures['Fist'] = texture_from_image(snes_graphics.get_tile(rom, Common.SNES_PSX_addresses['tiles_fist']['SNES'], 24)) -var json_sprite_blocks: Dictionary = Common.load_json('res://data/sprite_blocks.json') # This needs error handling later -var sprite_blocks := {} -func snes_load_map_sprites(rom: File): - # Main palettes - var map_palettes = [] - for i in 4: - map_palettes.append(generate_palette(rom, 0x1FFC00 + 32*i)) +# var json_sprite_blocks: Dictionary = Common.load_json('res://data/sprite_blocks.json') # This needs error handling later +# var sprite_blocks := {} +# func snes_load_map_sprites(rom: File): +# # Main palettes +# var map_palettes = [] +# for i in 4: +# map_palettes.append(generate_palette(rom, 0x1FFC00 + 32*i)) - for k in json_sprite_blocks.keys(): - var v = json_sprite_blocks[k] - var start: int = v['start'].hex_to_int() - var bpp := int(v['bpp']) - var definitions = v['definitions'] - var total_tiles := 0 - for defn in definitions: - total_tiles += defn[0] * defn[1] * defn[2] - print_debug('Processing sprite block "%s" - starts at $%06X with %d %dbpp tiles' % [k, start, total_tiles, bpp]) - rom.seek(start) - var tiles := [] - match bpp: - 1: - for i in total_tiles: - tiles.append(snes_graphics._1plane_to_tile(rom.get_buffer(8))) - 2: - for i in total_tiles: - tiles.append(snes_graphics._2plane_to_tile(rom.get_buffer(16))) - 3: - for i in total_tiles: - tiles.append(snes_graphics._3plane_to_tile(rom.get_buffer(24))) - 4: - for i in total_tiles: - tiles.append(snes_graphics._4plane_to_tile(rom.get_buffer(32))) - _: - print_debug('Invalid bpp "%s" in sprite blocks json' % bpp) - sprite_blocks[k] = tiles +# for k in json_sprite_blocks.keys(): +# var v = json_sprite_blocks[k] +# var start: int = v['start'].hex_to_int() +# var bpp := int(v['bpp']) +# var definitions = v['definitions'] +# var total_tiles := 0 +# for defn in definitions: +# total_tiles += defn[0] * defn[1] * defn[2] +# print_debug('Processing sprite block "%s" - starts at $%06X with %d %dbpp tiles' % [k, start, total_tiles, bpp]) +# rom.seek(start) +# var tiles := [] +# match bpp: +# 1: +# for i in total_tiles: +# tiles.append(snes_graphics._1plane_to_tile(rom.get_buffer(8))) +# 2: +# for i in total_tiles: +# tiles.append(snes_graphics._2plane_to_tile(rom.get_buffer(16))) +# 3: +# for i in total_tiles: +# tiles.append(snes_graphics._3plane_to_tile(rom.get_buffer(24))) +# 4: +# for i in total_tiles: +# tiles.append(snes_graphics._4plane_to_tile(rom.get_buffer(32))) +# _: +# print_debug('Invalid bpp "%s" in sprite blocks json' % bpp) +# sprite_blocks[k] = tiles static func bias_tile(unbiased: PoolByteArray, bias: int) -> Image: var image := Image.new() @@ -281,10 +281,10 @@ static func bias_tile(unbiased: PoolByteArray, bias: int) -> Image: image.create_from_data(8, 8, false, INDEX_FORMAT, biased) return image -func load_snes_rom(rom: File): - snes_load_battle_sprites(rom) - snes_load_worldmap(rom) - # snes_load_map_sprites(rom) +# func load_snes_rom(rom: File): +# snes_load_battle_sprites(rom) +# snes_load_worldmap(rom) +# # snes_load_map_sprites(rom) func load_from_structs(data: Dictionary): # Load Battle sprites