aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-05-13 15:52:37 +0200
committerAstatin <[email protected]>2025-05-13 15:52:37 +0200
commitef9de76cd0bc313385b7edac3659e03ab36d3c1e (patch)
tree4125a1ba04438d8e9db5262d24b525f370a41f2f /scripts
parentb0f9e2e6d53983faa9d213b40d2bd6a23473e134 (diff)
Add bugs and poison
Diffstat (limited to 'scripts')
-rw-r--r--scripts/generate-tiledata.py9
-rw-r--r--scripts/parse_sprite_png.py160
2 files changed, 92 insertions, 77 deletions
diff --git a/scripts/generate-tiledata.py b/scripts/generate-tiledata.py
index 153c272..e236fdd 100644
--- a/scripts/generate-tiledata.py
+++ b/scripts/generate-tiledata.py
@@ -1,10 +1,11 @@
import subprocess
+import parse_sprite_png
sprite_idx = 0x0
def get_sprite_png_parse_output(png, tallmode=False, sprite_1bpp_mode=False):
global sprite_idx
- result = str(subprocess.check_output(["python", "./scripts/parse_sprite_png.py", png] + (["--8x16"] if tallmode else []) + (["--1bpp"] if sprite_1bpp_mode else []))).split("\\n")
+ result = parse_sprite_png.parseSprite(png, sprite_8x16=tallmode, sprite_1bpp=sprite_1bpp_mode).split("\n")
for r in result:
if r.startswith(".DB"):
print("\t{} ; 0x{:02x}".format(r, sprite_idx))
@@ -39,6 +40,10 @@ print("\n\t; Disabled Cursor")
get_sprite_png_parse_output("./sprites/gui/disabled-cursor.png")
print("\n\t; Floor")
get_sprite_png_parse_output("./sprites/gui/floor.png")
+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")
sprite_idx = 0x80
print("\nFont_Data:")
@@ -124,3 +129,5 @@ print("\n\t; Sparkles")
get_sprite_png_parse_output("./sprites/animations/sparkle1.png", tallmode=True)
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)
diff --git a/scripts/parse_sprite_png.py b/scripts/parse_sprite_png.py
index 730b487..304a283 100644
--- a/scripts/parse_sprite_png.py
+++ b/scripts/parse_sprite_png.py
@@ -2,82 +2,90 @@ from PIL import Image
import numpy as np
import sys
-sprite_8x16 = "--8x16" in sys.argv
-
-sprite_8x8 = "--8x8" in sys.argv
-
-sprite_1bpp = "--1bpp" in sys.argv
-
-file = Image.open(sys.argv[1]).convert("RGB")
-
-px_array = np.asarray(file)
-
-def getpx(sprite_nb, x, y):
- double_sprite_nb = int(sprite_nb / 4)
- sprite_double_line = int(double_sprite_nb / (file.width / 16))
- sprite_double_column = int(double_sprite_nb % (file.width / 16))
- sprite_tile_y = 1 if sprite_nb & 0b10 else 0
- sprite_tile_x = 1 if sprite_nb & 0b01 else 0
-
- if sprite_8x16 or file.width < 16:
- sprite_tile_x ^= sprite_tile_y
- sprite_tile_y ^= sprite_tile_x
- sprite_tile_x ^= sprite_tile_y
-
- sprite_line = sprite_double_line * 2 + sprite_tile_y
- sprite_column = sprite_double_column * 2 + sprite_tile_x
-
- if sprite_8x8:
- sprite_line = int(sprite_nb / (file.width / 8))
- sprite_column = int(sprite_nb % (file.width / 8))
-
- if file.width < 16:
- sprite_line = sprite_column * 2 + sprite_line
- sprite_column = 0
-
- return [int(x) for x in px_array[int(sprite_line * 8 + y)][int(sprite_column * 8 + x)]]
-
+def parseSprite(file_name, sprite_8x16=False, sprite_8x8=False, sprite_1bpp=False):
+ file = Image.open(file_name).convert("RGB")
+
+ px_array = np.asarray(file)
+
+ def getpx(sprite_nb, x, y):
+ double_sprite_nb = int(sprite_nb / 4)
+ sprite_double_line = int(double_sprite_nb / (file.width / 16))
+ sprite_double_column = int(double_sprite_nb % (file.width / 16))
+ sprite_tile_y = 1 if sprite_nb & 0b10 else 0
+ sprite_tile_x = 1 if sprite_nb & 0b01 else 0
+
+ if sprite_8x16 or file.width < 16:
+ sprite_tile_x ^= sprite_tile_y
+ sprite_tile_y ^= sprite_tile_x
+ sprite_tile_x ^= sprite_tile_y
+
+ sprite_line = sprite_double_line * 2 + sprite_tile_y
+ sprite_column = sprite_double_column * 2 + sprite_tile_x
+
+ if sprite_8x8:
+ sprite_line = int(sprite_nb / (file.width / 8))
+ sprite_column = int(sprite_nb % (file.width / 8))
+
+ if file.width < 16:
+ sprite_line = sprite_column * 2 + sprite_line
+ sprite_column = 0
+
+ return [int(x) for x in px_array[int(sprite_line * 8 + y)][int(sprite_column * 8 + x)]]
+
+
+ if file.width % 8 != 0 or file.height % 8 != 0:
+ raise ValueError("Width and height must be multiples of 8px")
+
+ sprite_nb = int((file.width / 8) * (file.height / 8))
+
+ result = ""
+ for nb in range(0, sprite_nb):
+ result1 = [0,0,0,0,0,0,0,0]
+ result2 = [0,0,0,0,0,0,0,0]
+ for y in range(0, 8):
+ for x in range(0, 8):
+ px = getpx(nb, x, y)
+ dw = px[0] - 0xe0 + px[1] - 0xf8 + px[2] - 0xd0
+ dlg = px[0] - 0x88 + px[1] - 0xc0 + px[2] - 0x70
+ ddg = px[0] - 0x34 + px[1] - 0x68 + px[2] - 0x56
+ db = px[0] - 0x08 + px[1] - 0x18 + px[2] - 0x20
+
+ if min(abs(db), abs(ddg)) < min(abs(dlg), abs(dw)):
+ result2[y] |= 1 << (7-x)
+ if min(abs(db), abs(dlg)) < min(abs(ddg), abs(dw)):
+ result1[y] |= 1 << (7-x)
+
+ if abs(db) < min(abs(dw), abs(dlg), abs(ddg)):
+ result += "#"
+ elif abs(ddg) < min(abs(dw), abs(dlg), abs(db)):
+ result += ";"
+ elif abs(dlg) < min(abs(dw), abs(ddg), abs(db)):
+ result += "."
+ else:
+ result += " "
+ result += "\n"
+ result += "\n\n"
+ for i in range(0, 8):
+ if sprite_1bpp:
+ if i == 0:
+ result += (".DB $%02x" % (result1[i]))
+ else:
+ result += (", $%02x" % (result1[i]))
+ else:
+ if i == 0:
+ result += (".DB $%02x, $%02x" % (result1[i], result2[i]))
+ else:
+ result += (", $%02x, $%02x" % (result1[i], result2[i]))
+ result += ("\n\n")
+ return result
-if file.width % 8 != 0 or file.height % 8 != 0:
- raise ValueError("Width and height must be multiples of 8px")
+if __name__ == "__main__":
+ sprite_8x16 = "--8x16" in sys.argv
+
+ sprite_8x8 = "--8x8" in sys.argv
+
+ sprite_1bpp = "--1bpp" in sys.argv
-sprite_nb = int((file.width / 8) * (file.height / 8))
+ file_name = sys.argv[1]
-for nb in range(0, sprite_nb):
- result1 = [0,0,0,0,0,0,0,0]
- result2 = [0,0,0,0,0,0,0,0]
- for y in range(0, 8):
- for x in range(0, 8):
- px = getpx(nb, x, y)
- dw = px[0] - 0xe0 + px[1] - 0xf8 + px[2] - 0xd0
- dlg = px[0] - 0x88 + px[1] - 0xc0 + px[2] - 0x70
- ddg = px[0] - 0x34 + px[1] - 0x68 + px[2] - 0x56
- db = px[0] - 0x08 + px[1] - 0x18 + px[2] - 0x20
-
- if min(abs(db), abs(ddg)) < min(abs(dlg), abs(dw)):
- result2[y] |= 1 << (7-x)
- if min(abs(db), abs(dlg)) < min(abs(ddg), abs(dw)):
- result1[y] |= 1 << (7-x)
-
- if abs(db) < min(abs(dw), abs(dlg), abs(ddg)):
- print("#", end = '')
- elif abs(ddg) < min(abs(dw), abs(dlg), abs(db)):
- print(";", end = '')
- elif abs(dlg) < min(abs(dw), abs(ddg), abs(db)):
- print(".", end = '')
- else:
- print(" ", end = '')
- print("\n", end = '')
- print("\n")
- for i in range(0, 8):
- if sprite_1bpp:
- if i == 0:
- print(".DB $%02x" % (result1[i]), end='')
- else:
- print(", $%02x" % (result1[i]), end='')
- else:
- if i == 0:
- print(".DB $%02x, $%02x" % (result1[i], result2[i]), end='')
- else:
- print(", $%02x, $%02x" % (result1[i], result2[i]), end='')
- print("\n")
+ print(parseSprite(file_name, sprite_8x16=sprite_8x16, sprite_8x8=sprite_8x8, sprite_1bpp=sprite_1bpp))