Add Knuckles waving, improve transparency handling
authorNick Downing <nick@ndcode.org>
Tue, 2 Aug 2022 04:48:02 +0000 (14:48 +1000)
committerNick Downing <nick@ndcode.org>
Tue, 2 Aug 2022 04:48:02 +0000 (14:48 +1000)
.gitignore
Makefile
gr_to_ihx.py
knuckles_waving_8_colours.xcf [new file with mode: 0644]
knuckles_waving_8_colours_apple.xcf [new file with mode: 0644]
knuckles_waving_8_colours_apple_80x48.xcf [new file with mode: 0644]
knuckles_waving_8_colours_apple_80x48_indexed.gif [new file with mode: 0644]
knuckles_waving_8_colours_apple_80x48_indexed.xcf [new file with mode: 0644]
orig/caff1d476ccf70b5f64410d4e11bf6220ced7330_hq-1022577052 [new file with mode: 0644]

index 9f20333..c001220 100644 (file)
@@ -7,6 +7,8 @@
 *.rel
 *.rst
 *.tok
+/dlores_viewer12.asm
+/knuckles_frame*.gif
 /sonic_frame*.gif
 /test.dsk
 /test/sonic_gr1.bas
index 5e39f9f..4a8ccc5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -24,9 +24,10 @@ asxv5pxx:
 dos33fsprogs:
        ${MAKE} ${MAKEFLAGS} -C dos33fsprogs/utils/dos33fs-utils dos33 mkdos33fs
 
-test.dsk: bootable.dsk sonic.a2bin
+test.dsk: bootable.dsk sonic.a2bin knuckles.a2bin
        cp bootable.dsk $@
        ${DOS33} $@ SAVE B sonic.a2bin SONIC
+       ${DOS33} $@ SAVE B knuckles.a2bin KNUCKLES
 
 sonic.a2bin: sonic.ihx
        ./a2_hex2bin.py $< $@ 
@@ -69,6 +70,74 @@ sonic_frame4.gif: sonic_running_6_colours_apple_80x48_indexed.gif
 sonic_frame5.gif: sonic_running_6_colours_apple_80x48_indexed.gif
        convert "$^[5]" $@
 
+knuckles.a2bin: knuckles.ihx
+       ./a2_hex2bin.py $< $@ 
+
+knuckles.ihx: \
+dlores_viewer12.ihx \
+knuckles_frames.ihx
+       ${HEXMERGE} -o $@ $^
+
+dlores_viewer12.ihx: dlores_viewer12.rel
+       ${ASLINK} -n -m -u -il -b zpage=0 -b text=${LOAD_ADDR} $@ $^
+
+dlores_viewer12.rel: dlores_viewer12.asm
+       ${AS6500} -l -o dlores_viewer12.asm
+
+dlores_viewer12.asm: dlores_viewer.asm
+       sed -e 's/DATA_FRAMES = 6/DATA_FRAMES = 12/' <$< >$@
+
+knuckles_frames.ihx: \
+knuckles_frame0.gif \
+knuckles_frame1.gif \
+knuckles_frame2.gif \
+knuckles_frame3.gif \
+knuckles_frame4.gif \
+knuckles_frame5.gif \
+knuckles_frame6.gif \
+knuckles_frame7.gif \
+knuckles_frame8.gif \
+knuckles_frame9.gif \
+knuckles_frame10.gif \
+knuckles_frame11.gif
+       ./gr_to_ihx.py --combine ${DATA_ADDR} "$^" $@
+
+knuckles_frame0.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[0]" $@
+
+knuckles_frame1.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[1]" $@
+
+knuckles_frame2.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[2]" $@
+
+knuckles_frame3.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[3]" $@
+
+knuckles_frame4.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[4]" $@
+
+knuckles_frame5.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[5]" $@
+
+knuckles_frame6.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[6]" $@
+
+knuckles_frame7.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[7]" $@
+
+knuckles_frame8.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[8]" $@
+
+knuckles_frame9.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[9]" $@
+
+knuckles_frame10.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[10]" $@
+
+knuckles_frame11.gif: knuckles_waving_8_colours_apple_80x48_indexed.gif
+       convert "$^[11]" $@
+
 .PHONY: clean
 clean:
        ${MAKE} ${MAKEFLAGS} -C asxv5pxx/asxmak/linux/build clean
@@ -83,4 +152,7 @@ clean:
 *.map \
 *.rel \
 *.rst \
+sonic_frame*.gif \
+dlores_viewer12.asm \
+knuckles_frame*.gif \
 test.dsk
index ac67053..f1c2e2f 100755 (executable)
@@ -9,8 +9,12 @@ from intelhex import IntelHex
 EXIT_SUCCESS = 0
 EXIT_FAILURE = 1
 
+combine = False
+if len(sys.argv) >= 2 and sys.argv[1] == '--combine':
+  combine = True
+  del sys.argv[1]
 if len(sys.argv) < 4:
-  print(f'usage: {sys.argv[0]:s} load_addr "in.png ..." out.ihx')
+  print(f'usage: {sys.argv[0]:s} [--combine] load_addr "in.png ..." out.ihx')
   sys.exit(EXIT_FAILURE)
 load_addr = int(sys.argv[1], 0)
 in_pngs = sys.argv[2].split()
@@ -20,12 +24,14 @@ image_in = []
 for in_png in in_pngs:
   image_in_pil = PIL.Image.open(in_png)
   assert image_in_pil.mode == 'P'
-  image_in.append(
-    numpy.frombuffer(
-      image_in_pil.tobytes(),
-      dtype = numpy.uint8
-    ).reshape((image_in_pil.size[1], image_in_pil.size[0]))
-  )
+  image = numpy.frombuffer(
+    image_in_pil.tobytes(),
+    dtype = numpy.uint8
+  ).reshape((image_in_pil.size[1], image_in_pil.size[0]))
+  image = image.copy()
+  if 'transparency' in image_in_pil.info:
+    image[image == image_in_pil.info['transparency']] = 0x10
+  image_in.append(image)
 image_in = numpy.stack(image_in, 0)
 
 ts, ys, xs = image_in.shape
@@ -33,8 +39,13 @@ assert ys == 48
 assert xs == 80
 
 # deal with transparency
-transparent_color = image_in[0, 0, 0] # temporary
-image_in[image_in == transparent_color] = 0
+if combine:
+  for i in range(1, ts):
+    mask = image_in[i, :, :] != 0x10
+    content = image_in[i, mask]
+    image_in[i, :, :] = image_in[i - 1, :, :]
+    image_in[i, mask] = content
+image_in &= 0xf # remove transparency
 
 image_out = numpy.zeros((ts, 8, 0x100), numpy.uint8)
 shifts = [0, 4]
diff --git a/knuckles_waving_8_colours.xcf b/knuckles_waving_8_colours.xcf
new file mode 100644 (file)
index 0000000..4a7aedc
Binary files /dev/null and b/knuckles_waving_8_colours.xcf differ
diff --git a/knuckles_waving_8_colours_apple.xcf b/knuckles_waving_8_colours_apple.xcf
new file mode 100644 (file)
index 0000000..3b8e35e
Binary files /dev/null and b/knuckles_waving_8_colours_apple.xcf differ
diff --git a/knuckles_waving_8_colours_apple_80x48.xcf b/knuckles_waving_8_colours_apple_80x48.xcf
new file mode 100644 (file)
index 0000000..d4b45a7
Binary files /dev/null and b/knuckles_waving_8_colours_apple_80x48.xcf differ
diff --git a/knuckles_waving_8_colours_apple_80x48_indexed.gif b/knuckles_waving_8_colours_apple_80x48_indexed.gif
new file mode 100644 (file)
index 0000000..6102d5a
Binary files /dev/null and b/knuckles_waving_8_colours_apple_80x48_indexed.gif differ
diff --git a/knuckles_waving_8_colours_apple_80x48_indexed.xcf b/knuckles_waving_8_colours_apple_80x48_indexed.xcf
new file mode 100644 (file)
index 0000000..b65b304
Binary files /dev/null and b/knuckles_waving_8_colours_apple_80x48_indexed.xcf differ
diff --git a/orig/caff1d476ccf70b5f64410d4e11bf6220ced7330_hq-1022577052 b/orig/caff1d476ccf70b5f64410d4e11bf6220ced7330_hq-1022577052
new file mode 100644 (file)
index 0000000..6f62498
Binary files /dev/null and b/orig/caff1d476ccf70b5f64410d4e11bf6220ced7330_hq-1022577052 differ