diff options
author | Astatin <[email protected]> | 2025-06-06 12:30:32 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-06-06 12:30:32 +0200 |
commit | 103260bbab1f6816d578cafb641e7458b66eea15 (patch) | |
tree | 3e2e33ddc4d4ba7fcdefe2783be72a49b92b4523 /scripts | |
parent | eca91612b60b5379f9e8d6ce6f51366db54aacc3 (diff) |
Add script to extract build/tileset.png from Load_Tile routine in tiles.gbasm
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/extract-vram-tileset.py | 47 | ||||
-rw-r--r-- | scripts/generate-tiledata.py | 15 | ||||
-rw-r--r-- | scripts/tileset-dump.gbasm | 10 |
3 files changed, 72 insertions, 0 deletions
diff --git a/scripts/extract-vram-tileset.py b/scripts/extract-vram-tileset.py new file mode 100644 index 0000000..93b5f8b --- /dev/null +++ b/scripts/extract-vram-tileset.py @@ -0,0 +1,47 @@ +from PIL import Image +import numpy as np +import sys + +colours = [(0xe0, 0xf8, 0xd0), (0x88, 0xc0, 0x70), (0x34, 0x68, 0x56), (0x08, 0x18, 0x20)] + +if len(sys.argv) != 3: + print("Usage: ./extract-vram-tileset.py [vram_dump_file] [output_png]") + sys.exit(-1) + +filename = sys.argv[1] + +output_filename = sys.argv[2] + +file = open(filename, "r") + +vram_text = file.read() + +vram = [int(x, 16) for x in vram_text.split()] + +def parse_tile(image, tile, offset): + for y in range(0, 16, 2): + for x in range(0, 8): + colour_id = 0b00 + colour_id |= (tile[y] >> (7-x)) & 1 + colour_id |= ((tile[y+1] >> (7-x)) & 1) << 1 + image.putpixel((x+offset[0],int(y/2)+offset[1]), colours[colour_id]) + return image + +image = Image.new("RGB", (128,128)) + +x = 0 +y = 0 +for tile_addr in range(0x1000, 0x1800, 0x10): + parse_tile(image, vram[tile_addr:tile_addr + 0x10], (x * 8, y * 8)) + x += 1 + if x == 0x10: + x = 0 + y += 1 +for tile_addr in range(0x800, 0x1000, 0x10): + parse_tile(image, vram[tile_addr:tile_addr + 0x10], (x * 8, y * 8)) + x += 1 + if x == 0x10: + x = 0 + y += 1 + +image.save(output_filename) diff --git a/scripts/generate-tiledata.py b/scripts/generate-tiledata.py index e236fdd..729fc50 100644 --- a/scripts/generate-tiledata.py +++ b/scripts/generate-tiledata.py @@ -14,6 +14,7 @@ def get_sprite_png_parse_output(png, tallmode=False, sprite_1bpp_mode=False): sprite_idx = 0x10 print("GUI_Border_Data:") get_sprite_png_parse_output("./sprites/gui/borders.png") +print("GUI_Border_Data.end:") sprite_idx = 0x20 print("BG_Tile_Image_Data:") @@ -27,6 +28,7 @@ print("\n\t; Leaf") get_sprite_png_parse_output("./sprites/bg/leaf.png") print("\n\t; Box") get_sprite_png_parse_output("./sprites/bg/box.png") +print("BG_Tile_Image_Data.end:") sprite_idx = 0xf0 print("Small_sprites:") @@ -44,10 +46,12 @@ print("\n\t; Freeze status") get_sprite_png_parse_output("./sprites/gui/status-frozen.png") print("\n\t; Poison status") get_sprite_png_parse_output("./sprites/gui/status-poison.png") +print("Small_sprites.end:") sprite_idx = 0x80 print("\nFont_Data:") get_sprite_png_parse_output("./sprites/font.png") +print("\nFont_Data.end:") sprite_idx = 0x02 print("\nOBJ_Tile_Image_Data:") @@ -58,6 +62,7 @@ print("\n\t; Bunny back") get_sprite_png_parse_output("./sprites/bunny/bunny-back.png", tallmode=True) print("\n\t; Bunny front") get_sprite_png_parse_output("./sprites/bunny/bunny-front.png", tallmode=True) +print("\n.Bunny.end:") print("\n.Fox:") print("\n\t; Fox side") @@ -66,6 +71,7 @@ print("\n\t; Fox back") get_sprite_png_parse_output("./sprites/fox/fox-back.png", tallmode=True) print("\n\t; Fox front") get_sprite_png_parse_output("./sprites/fox/fox-front.png", tallmode=True) +print("\n.Fox.end:") print("\n.Cat:") print("\n\t; Cat side") @@ -74,6 +80,7 @@ print("\n\t; Cat back") get_sprite_png_parse_output("./sprites/cat/back.png", tallmode=True) print("\n\t; Cat front") get_sprite_png_parse_output("./sprites/cat/front.png", tallmode=True) +print("\n.Cat.end:") print("\n.Owl:") print("\n\t; Owl side") @@ -82,6 +89,7 @@ print("\n\t; Owl back") get_sprite_png_parse_output("./sprites/owl/back.png", tallmode=True) print("\n\t; Owl front") get_sprite_png_parse_output("./sprites/owl/front.png", tallmode=True) +print("\n.Owl.end:") print("\n.Bug:") print("\n\t; Bug side") @@ -90,6 +98,7 @@ print("\n\t; Bug back") get_sprite_png_parse_output("./sprites/bug/back.png", tallmode=True) print("\n\t; Bug front") get_sprite_png_parse_output("./sprites/bug/front.png", tallmode=True) +print("\n.Bug.end:") print("\n.Mouse:") print("\n\t; Mouse side") @@ -98,6 +107,7 @@ print("\n\t; Mouse back") get_sprite_png_parse_output("./sprites/mouse/back.png", tallmode=True) print("\n\t; Mouse front") get_sprite_png_parse_output("./sprites/mouse/front.png", tallmode=True) +print("\n.Mouse.end:") print("\n.Fimsh:") print("\n\t; Fimsh side") @@ -106,6 +116,7 @@ print("\n\t; Fimsh back") get_sprite_png_parse_output("./sprites/fimsh/back.png", tallmode=True) print("\n\t; Fimsh front") get_sprite_png_parse_output("./sprites/fimsh/front.png", tallmode=True) +print("\n.Fimsh.end:") print("\n.Penguin:") print("\n\t; Penguin side") @@ -114,6 +125,7 @@ print("\n\t; Penguin back") get_sprite_png_parse_output("./sprites/penguin/back.png", tallmode=True) print("\n\t; Penguin front") get_sprite_png_parse_output("./sprites/penguin/front.png", tallmode=True) +print("\n.Penguin.end:") print("\n.Frog:") print("\n\t; Frog side") @@ -122,6 +134,8 @@ print("\n\t; Frog back") get_sprite_png_parse_output("./sprites/frog/back.png", tallmode=True) print("\n\t; Frog front") get_sprite_png_parse_output("./sprites/frog/front.png", tallmode=True) +print("\n.Frog.end:") +print("\nOBJ_Tile_Image_Data.end:") sprite_idx = 0x60 print("\nAnimation_Sprites_Data:") @@ -131,3 +145,4 @@ get_sprite_png_parse_output("./sprites/animations/sparkle2.png", tallmode=True) get_sprite_png_parse_output("./sprites/animations/ball.png", tallmode=True) get_sprite_png_parse_output("./sprites/animations/bubble1.png", tallmode=True) get_sprite_png_parse_output("./sprites/animations/bubble2.png", tallmode=True) +print("\nAnimation_Sprites_Data.end:") diff --git a/scripts/tileset-dump.gbasm b/scripts/tileset-dump.gbasm new file mode 100644 index 0000000..d6015ac --- /dev/null +++ b/scripts/tileset-dump.gbasm @@ -0,0 +1,10 @@ +.PADTO $100 +LD SP, $fffe +CALL =Load_Tile +STOP + +.INCLUDE "definitions.gbasm" +.INCLUDE "utils.gbasm" +.INCLUDE "tileset.gbasm" +.INCLUDE "tiles.gbasm" +Entity_list: |