print("Game started")
colors = [color(i) for i in [(26,28,44),(93,39,93),(177,62,83),(239,125,87),(255,205,117),(167,240,112),(56,183,100),(37,113,121),(41,54,111),(59,93,201),(65,166,246),(115,239,247),(244,244,244),(148,176,194),(86,108,134),(51,60,87)]]
-sprites = {}
+sprites = {'assiette': (0, 2, 20, 17,
+ 'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),
+ 'oignon': (3, 3, 16, 13,
+ 'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),
+ 'oignon_coupe': (3, 5, 13, 14,
+ 'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),
+ 'planche': (0, 5, 20, 14,
+ 'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),
+ 'player_down': (3, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'player_left': (3, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),
+ 'player_right': (2, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),
+ 'player_up': (3, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'poele': (0, 0, 19, 19,
+ 'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),
+ 'salade': (1, 4, 18, 13,
+ 'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),
+ 'salade_cuite': (2, 7, 15, 9,
+ 'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg')}
class Ingredient:
def __init__(self, i_nom):
self.p_type = p_type
self.p_ingredients = p_ingredients
+def draw_sprite(sprite_name: str, x: int, y: int, multiplier=1)->None:
+ if sprite_name not in sprites: raise ValueError('Sprite name not in sprites')
+ offx, offy, w, h, data = sprites[sprite_name]
+ curx, cury = x+offx, y+offy
+ for i in range(h):
+ for k in range(w):
+ px = int(data[w*i+k], 18)
+ if px != 16 and px != 17:
+ fill_rect(curx*multiplier,cury*multiplier,multiplier,multiplier,colors[px])
+ curx += 1
+ curx=x+offx
+ cury+=1
+
+
def draw_map(mapid: int):
if mapid==0:
fill_rect(0,40,320,182,colors[4]) # table
fill_rect(122,206,76,8,colors[2])
fill_rect(122,214,76,8,colors[15])
-draw_map(0)
\ No newline at end of file
+draw_map(0)
+draw_sprite("player_up", 0, 0, 2)
\ No newline at end of file
from os.path import isfile, join
from PIL import Image
import numpy as np
+import pprint
-path = "./src/sprites/"
-files_list = [f for f in listdir(path) if isfile(join(path, f))]
colors = [(26,28,44),(93,39,93),(177,62,83),(239,125,87),(255,205,117),(167,240,112),(56,183,100),(37,113,121),(41,54,111),(59,93,201),(65,166,246),(115,239,247),(244,244,244),(148,176,194),(86,108,134),(51,60,87)]
-def get_color_id(r, g, b, a)->str:
+def get_color_id(r: int, g: int, b: int, a: int)->str:
+ """
+ Get the pixel color id, it is a str that goes from 0 to h
+ """
if a ==0: # if transparent
return "g"
try:
case 15:
return "f"
-def get_offset_x(img, w, h)->int:
+def get_offset_x(img: Image.Image, w: int, h: int)->int:
+ """
+ Returns the x offset of an image
+ """
offsetx = 0
for i in range(h):
for i in range(w):
offsetx+=1
return offsetx
-def get_offset_y(img, w, h)->int:
+def get_offset_y(img: Image.Image, w: int, h: int)->int:
+ """
+ Returns the y offset of an image
+ """
offsety = 0
for i in range(w):
for i in range(h):
offsety+=1
return offsety
-def get_croped_image(img)-> tuple[Image.Image, int, int]:
+def get_croped_image(img: Image.Image)->tuple[Image.Image, int, int]:
+ """
+ Removes the borders (transparent) from the image and return the x and y offsets to get it to the right position
+ """
w, h = img.size
- offsetx, offsety = get_offset_x(image, w, h), get_offset_y(img, w, h)
- img_reversed = image.rotate(180)
+ offsetx, offsety = get_offset_x(img, w, h), get_offset_y(img, w, h)
+ img_reversed = img.rotate(180)
neg_offsetx, neg_offsety = get_offset_y(img_reversed, w, h), get_offset_x(img_reversed, w, h)
img_croped = img.crop((offsetx, offsety, h-neg_offsety, w-neg_offsetx))
- print("w;", w, "h",h,"x:",offsetx, "y:", offsety, "neg x:", neg_offsetx, "neg y:", neg_offsety)
- print(h-offsetx-neg_offsetx, w-offsety-neg_offsety)
return (img_croped, offsetx, offsety)
-image = Image.open(join(path, "salade.png"))
-image_croped, off_x, off_y = get_croped_image(image)
-w, h = image_croped.size
-result = ""
-for v in range(h):
- for k in range(w):
- result += get_color_id(*image_croped.getpixel((k, v)))
-print('result is,', result)
-image_croped.show()
-exit()
+def compress_string_image(img: str)->str:
+ pass
+def convert_all_files(save_to_file: bool, compress_sprites: bool, path: str)->None:
+ files_list = [f for f in listdir(path) if isfile(join(path, f))]
+ result_file = None
+ final_result = {}
+ if save_to_file:
+ result_file = open(join(path, "sprites_converted.txt"), "w")
-for file in files_list:
- if not file.endswith(".png"):
- print("Skipping", file, ", because it's not a png image.")
- break
- image = Image.open(join(path, file))
- w, h = image.size
- offsetx, offsety = 0,0
+ for file in files_list:
+ if not file.endswith(".png"):
+ print("Skipping", file, ", because it's not a png image.")
+ break
+ image = Image.open(join(path, file))
+ image_croped, off_x, off_y = get_croped_image(image)
+ w, h = image_croped.size
+ result = ""
+ for v in range(h):
+ for k in range(w):
+ result += get_color_id(*image_croped.getpixel((k, v)))
+ print('Finished,', file, '\n', result, '\n')
+ final_result[file.removesuffix(".png")] = (off_x, off_y, w, h, result)
+ if save_to_file:
+ result_file.write(file + "\n" + pprint.pformat(final_result, compact=True) + '\n')
+ result_file.close()
+def gui()->None:
+ print("""
+ ___ _ _ ___ _
+ / __|_ __ _ _(_) |_ ___ ___ / __|___ _ ___ _____ _ _| |_ ___ _ _
+ \__ \ '_ \ '_| | _/ -_|_-< | (__/ _ \ ' \ V / -_) '_| _/ -_) '_|
+ |___/ .__/_| |_|\__\___/__/ \___\___/_||_\_/\___|_| \__\___|_|
+ |_|
+ - An Ayabusa software
+
+What would you like to do?
+ [1] Convert all sprites and print them
+ [2] Convert all sprites and save them to file (sprites_converted.txt)
+ [other] Quit/Cancel""")
+ save_to_file = False
+ compress_sprites = True
+ path = "./src/sprites/"
+
+ choice = input("Your choice [1]: ")
+ if choice == "1" or choice == "":
+ save_to_file = False
+ elif choice == "2":
+ save_to_file = True
+ else:
+ print("Invalid input exiting the program.")
+ exit()
+
+ choice = input("Where are your sprites located ? [./src/sprites/]: ")
+ if choice != "":
+ path = choice
+
+ choice = input("Would you like to compress the spites ? (Y/N) [Y]: ")
+ if choice == "Y" or choice == "":
+ compress_sprites = True
+ elif choice == "N":
+ compress_sprites = False
+ else:
+ print("Invalid input exiting the program.")
+ exit()
+ print("Convertion started ...\n")
+ convert_all_files(save_to_file, compress_sprites, path)
+ print("Convertion finished ...")
+
+# Launch the text UI
+gui()
\ No newline at end of file
--- /dev/null
+sprites_converted.txt
+{'assiette': (0, 2, 20, 17,
+ 'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),
+ 'oignon': (3, 3, 16, 13,
+ 'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),
+ 'oignon_coupe': (3, 5, 13, 14,
+ 'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),
+ 'planche': (0, 5, 20, 14,
+ 'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),
+ 'player_down': (3, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'player_left': (3, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),
+ 'player_right': (2, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),
+ 'player_up': (3, 0, 15, 20,
+ 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'poele': (0, 0, 19, 19,
+ 'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),
+ 'salade': (1, 4, 18, 13,
+ 'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),
+ 'salade_cuite': (2, 7, 15, 9,
+ 'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg')}