aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-06-06 12:30:32 +0200
committerAstatin <[email protected]>2025-06-06 12:30:32 +0200
commit103260bbab1f6816d578cafb641e7458b66eea15 (patch)
tree3e2e33ddc4d4ba7fcdefe2783be72a49b92b4523 /scripts
parenteca91612b60b5379f9e8d6ce6f51366db54aacc3 (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.py47
-rw-r--r--scripts/generate-tiledata.py15
-rw-r--r--scripts/tileset-dump.gbasm10
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: