supercasiobros/levelconverter/levelconv.py

125 lines
2.8 KiB
Python
Raw Normal View History

import os
import tempfile
import subprocess
2020-01-12 14:34:13 +01:00
from PIL import Image
# Palette de couleurs
pierre = (0, 0, 0)
brique = (255, 0, 0)
empty = (255, 255, 255)
piece = (203, 255, 0)
boite_piece = (255, 153, 0)
boite_champi = (204, 0, 255)
brique_piece = (101, 127, 0)
beton = (84, 84, 84)
tuyauMilieu = (0, 255, 102)
tuyau_bout = (50, 255, 0)
drapeau = (0, 255, 216)
goomba = (127, 76, 0)
koopa_vert = (25, 127, 0)
koopa_rouge = (127, 0, 0)
2020-02-02 17:55:03 +01:00
mario_start = (108, 81, 47)
2020-02-02 20:31:44 +01:00
nuage = (127, 127, 127)
arbre_tronc = (74,35,18)
arbre_feuilles = (0,86,0)
plante = (102,0,127)
2020-02-02 20:31:44 +01:00
def color_compare(color1, color2):
if color1[0] == color2[0] and color1[1] == color2[1] and color1[2] == color2[2]:
return 1
else:
return 0
def write_char(val):
2020-02-02 16:05:56 +01:00
a = val%256
return a.to_bytes(1,'little')
#if a>128:
# a -= 256
# return chr(a)
# return '%c' % int(val%256)
2020-01-12 14:34:13 +01:00
# Load image
filename = input("File name ?\n> ")
img = Image.open(filename)
2020-02-02 16:48:23 +01:00
print("Converting..." + filename + ", size =", img.size)
2020-01-12 14:34:13 +01:00
#rough binary
2020-02-02 16:05:56 +01:00
# code = str().encode('latin1')
code = write_char(int(img.size[0]))
code += write_char(int(img.size[1]))
2020-01-12 14:34:13 +01:00
pixels = img.load()
for x in range(0,img.size[0]):
for i in range(0, img.size[1]):
y=img.size[1]-i-1
if color_compare(pixels[x,y],empty):
code += write_char(0)
2020-01-12 14:34:13 +01:00
elif color_compare(pixels[x,y], pierre):
code += write_char(1)
elif color_compare(pixels[x,y], piece):
code += write_char(2)
elif color_compare(pixels[x,y], brique):
code += write_char(3)
elif color_compare(pixels[x,y],brique_piece):
code += write_char(4)
elif color_compare(pixels[x,y],boite_piece):
code += write_char(5)
elif color_compare(pixels[x,y],boite_champi):
code += write_char(6)
elif color_compare(pixels[x,y],beton):
code += write_char(7)
elif color_compare(pixels[x,y],tuyau_bout):
code += write_char(8)
2020-02-02 16:05:56 +01:00
elif color_compare(pixels[x,y], tuyauMilieu):
2020-02-02 16:05:56 +01:00
code += write_char(9)
2020-02-02 16:48:23 +01:00
elif color_compare(pixels[x,y], drapeau):
2020-02-02 16:48:23 +01:00
code += write_char(10)
elif color_compare(pixels[x,y], goomba):
code += write_char(11)
elif color_compare(pixels[x,y], koopa_vert):
2020-02-02 16:48:23 +01:00
code += write_char(12)
elif color_compare(pixels[x,y], koopa_rouge):
2020-02-02 16:48:23 +01:00
code += write_char(13)
2020-02-02 17:55:03 +01:00
elif color_compare(pixels[x,y], mario_start):
code += write_char(14)
2020-02-02 20:31:44 +01:00
elif color_compare(pixels[x,y], nuage):
code += write_char(15)
elif color_compare(pixels[x,y], arbre_tronc):
code += write_char(16)
elif color_compare(pixels[x,y], arbre_feuilles):
code += write_char(17)
elif color_compare(pixels[x,y], plante):
code += write_char(18)
2020-02-02 16:48:23 +01:00
else:
code += write_char(0)
print("Warning: unknown type at", x, y, "with pixel color: ", pixels[x,y])
2020-02-02 16:48:23 +01:00
2020-01-12 14:34:13 +01:00
2020-02-02 16:05:56 +01:00
f = open("../assets-fx/bin/lvl_"+filename, 'wb')
f.write(code)
f.close()
2020-02-02 16:05:56 +01:00
print("Converted succesfully ! (", os.path.getsize("../assets-fx/bin/lvl_"+filename), "bytes )")