435 lines
10 KiB
Python
435 lines
10 KiB
Python
import struct
|
|
from .Options import KirbyFlavorPreset, GooeyFlavorPreset
|
|
|
|
kirby_flavor_presets = {
|
|
1: {
|
|
"1": "B50029",
|
|
"2": "FF91C6",
|
|
"3": "B0123B",
|
|
"4": "630F0F",
|
|
"5": "D60052",
|
|
"6": "DE4873",
|
|
"7": "D07880",
|
|
"8": "000000",
|
|
"9": "F770A5",
|
|
"10": "E01784",
|
|
"11": "CA4C74",
|
|
"12": "A7443F",
|
|
"13": "FF1784",
|
|
"14": "FFA1DE",
|
|
"15": "B03830",
|
|
},
|
|
2: {
|
|
"1": "C70057",
|
|
"2": "FF3554",
|
|
"3": "AA0040",
|
|
"4": "C02D47",
|
|
"5": "E02068",
|
|
"6": "C2183F",
|
|
"7": "D03F80",
|
|
"8": "872939",
|
|
"9": "E82B47",
|
|
"10": "E80067",
|
|
"11": "D52F40",
|
|
"12": "9F1C33",
|
|
"13": "FD187F",
|
|
"14": "F85068",
|
|
"15": "D2386F",
|
|
},
|
|
3: {
|
|
"1": "5858e2",
|
|
"2": "e6e6fa",
|
|
"3": "bcbcf2",
|
|
"4": "8484e6",
|
|
"5": "2929ec",
|
|
"6": "b5b5f0",
|
|
"7": "847bd6",
|
|
"8": "3232d6",
|
|
"9": "d6d6ef",
|
|
"10": "4a52ef",
|
|
"11": "c6c6e6",
|
|
"12": "4343ad",
|
|
"13": "6767ff",
|
|
"14": "f6f6fd",
|
|
"15": "3139b6",
|
|
},
|
|
4: {
|
|
"1": "B01810",
|
|
"2": "F0E08D",
|
|
"3": "C8A060",
|
|
"4": "A87043",
|
|
"5": "E03700",
|
|
"6": "EFC063",
|
|
"7": "D07818",
|
|
"8": "A8501C",
|
|
"9": "E8D070",
|
|
"10": "E2501E",
|
|
"11": "E8C55C",
|
|
"12": "B08833",
|
|
"13": "E8783B",
|
|
"14": "F8F8A5",
|
|
"15": "B03800",
|
|
},
|
|
5: {
|
|
"1": "9F4410",
|
|
"2": "88F27B",
|
|
"3": "57A044",
|
|
"4": "227029",
|
|
"5": "C75418",
|
|
"6": "57BA23",
|
|
"7": "1C6B00",
|
|
"8": "2D6823",
|
|
"9": "3FD744",
|
|
"10": "E06C16",
|
|
"11": "54C053",
|
|
"12": "1A541E",
|
|
"13": "F06B10",
|
|
"14": "98F89A",
|
|
"15": "B05830",
|
|
},
|
|
6: {
|
|
"1": "7C1060",
|
|
"2": "CA8AE8",
|
|
"3": "8250A5",
|
|
"4": "604B7B",
|
|
"5": "A52068",
|
|
"6": "8D64B8",
|
|
"7": "B73B80",
|
|
"8": "672D9A",
|
|
"9": "BA82D5",
|
|
"10": "B55098",
|
|
"11": "9F5CCF",
|
|
"12": "632B74",
|
|
"13": "CF78B5",
|
|
"14": "DA98F8",
|
|
"15": "8D3863",
|
|
},
|
|
7: {
|
|
"1": "6F1410",
|
|
"2": "C2735C",
|
|
"3": "5C351C",
|
|
"4": "875440",
|
|
"5": "9F2F0C",
|
|
"6": "874C3B",
|
|
"7": "88534C",
|
|
"8": "4C1E00",
|
|
"9": "B06458",
|
|
"10": "921C16",
|
|
"11": "9F5C54",
|
|
"12": "5B3125",
|
|
"13": "C01A14",
|
|
"14": "CF785B",
|
|
"15": "6B3125",
|
|
},
|
|
8: {
|
|
"1": "a6a6a6",
|
|
"2": "e6e6e6",
|
|
"3": "bcbcbc",
|
|
"4": "848484",
|
|
"5": "909090",
|
|
"6": "b5b5b5",
|
|
"7": "848484",
|
|
"8": "646464",
|
|
"9": "d6d6d6",
|
|
"10": "525252",
|
|
"11": "c6c6c6",
|
|
"12": "737373",
|
|
"13": "949494",
|
|
"14": "f6f6f6",
|
|
"15": "545454",
|
|
},
|
|
9: {
|
|
"1": "400000",
|
|
"2": "6B6B6B",
|
|
"3": "2B2B2B",
|
|
"4": "181818",
|
|
"5": "640000",
|
|
"6": "3D3D3D",
|
|
"7": "878787",
|
|
"8": "020202",
|
|
"9": "606060",
|
|
"10": "980000",
|
|
"11": "505050",
|
|
"12": "474747",
|
|
"13": "C80000",
|
|
"14": "808080",
|
|
"15": "AF0000",
|
|
},
|
|
10: {
|
|
"1": "2B4B10",
|
|
"2": "EF8A9D",
|
|
"3": "C84F6B",
|
|
"4": "B74F54",
|
|
"5": "126018",
|
|
"6": "D85F6F",
|
|
"7": "D06870",
|
|
"8": "A24858",
|
|
"9": "E77B8D",
|
|
"10": "168025",
|
|
"11": "DF5C68",
|
|
"12": "9D4353",
|
|
"13": "48953F",
|
|
"14": "F897AD",
|
|
"15": "B03830",
|
|
},
|
|
11: {
|
|
"1": "7B290C",
|
|
"2": "FF9A00",
|
|
"3": "B05C1C",
|
|
"4": "8F3F0E",
|
|
"5": "D23B0C",
|
|
"6": "E08200",
|
|
"7": "D05800",
|
|
"8": "8A2B16",
|
|
"9": "EF970A",
|
|
"10": "E24800",
|
|
"11": "E58F00",
|
|
"12": "A03700",
|
|
"13": "ED3B00",
|
|
"14": "FFAF27",
|
|
"15": "A84700",
|
|
},
|
|
12: {
|
|
"1": "AFA810",
|
|
"2": "4FF29D",
|
|
"3": "2BA04C",
|
|
"4": "007043",
|
|
"5": "C7C218",
|
|
"6": "33BA5F",
|
|
"7": "006B40",
|
|
"8": "2D6823",
|
|
"9": "1CD773",
|
|
"10": "E0CF16",
|
|
"11": "2DC06C",
|
|
"12": "00543F",
|
|
"13": "F0F010",
|
|
"14": "43F8B2",
|
|
"15": "B0A230",
|
|
},
|
|
13: {
|
|
"1": "7C73B0",
|
|
"2": "CACAE7",
|
|
"3": "7B7BA8",
|
|
"4": "5F5FA7",
|
|
"5": "B57EDC",
|
|
"6": "8585C5",
|
|
"7": "5B5B82",
|
|
"8": "474796",
|
|
"9": "B2B2D8",
|
|
"10": "B790EF",
|
|
"11": "9898C2",
|
|
"12": "6B6BB7",
|
|
"13": "CDADFA",
|
|
"14": "E6E6FA",
|
|
"15": "976FBD",
|
|
},
|
|
}
|
|
|
|
gooey_flavor_presets = {
|
|
1: {
|
|
"1": "CD539D",
|
|
"2": "D270AD",
|
|
"3": "F27CBF",
|
|
"4": "FF91C6",
|
|
"5": "FFA1DE",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
2: {
|
|
"1": "161600",
|
|
"2": "592910",
|
|
"3": "5A3118",
|
|
"4": "AB3918",
|
|
"5": "EB3918",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
3: {
|
|
"1": "001616",
|
|
"2": "102959",
|
|
"3": "18315A",
|
|
"4": "1839AB",
|
|
"5": "1839EB",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
4: {
|
|
"1": "C8A031",
|
|
"2": "C5BD38",
|
|
"3": "D2CD48",
|
|
"4": "E2E040",
|
|
"5": "EAE2A0",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
5: {
|
|
"1": "54A208",
|
|
"2": "5CB021",
|
|
"3": "6CB206",
|
|
"4": "8AC54C",
|
|
"5": "8DD554",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
6: {
|
|
"1": "3D083D",
|
|
"2": "4B024B",
|
|
"3": "4C104C",
|
|
"4": "5F0A5F",
|
|
"5": "9F1D9F",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
7: {
|
|
"1": "270C08",
|
|
"2": "481C10",
|
|
"3": "581E10",
|
|
"4": "5B2712",
|
|
"5": "743316",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
8: {
|
|
"1": "7F7F7F",
|
|
"2": "909090",
|
|
"3": "9D9D9D",
|
|
"4": "BFBFBF",
|
|
"5": "D2D2D2",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
9: {
|
|
"1": "141414",
|
|
"2": "2D2D2D",
|
|
"3": "404040",
|
|
"4": "585858",
|
|
"5": "7F7F7F",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
10: {
|
|
"1": "954353",
|
|
"2": "AF4F68",
|
|
"3": "CD6073",
|
|
"4": "E06774",
|
|
"5": "E587A2",
|
|
"6": "17AF10",
|
|
"7": "4FE748",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
11: {
|
|
"1": "CF4700",
|
|
"2": "D85C08",
|
|
"3": "E26C04",
|
|
"4": "EA7B16",
|
|
"5": "EF8506",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
12: {
|
|
"1": "1C4708",
|
|
"2": "105B1C",
|
|
"3": "186827",
|
|
"4": "187C3B",
|
|
"5": "188831",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
13: {
|
|
"1": "501E70",
|
|
"2": "673B87",
|
|
"3": "7848A7",
|
|
"4": "9067C7",
|
|
"5": "B57EDC",
|
|
"6": "B51810",
|
|
"7": "EF524A",
|
|
"8": "D6C6C6",
|
|
"9": "FFFFFF",
|
|
},
|
|
}
|
|
|
|
kirby_target_palettes = {
|
|
0x64646: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 1),
|
|
0x64846: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 1),
|
|
0x1E007E: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 1),
|
|
0x1E009C: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 0.5),
|
|
0x1E00F6: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 1),
|
|
0x1E0114: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 0.5),
|
|
0x1E0216: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 1),
|
|
0x1E0234: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 0.5),
|
|
0x1E0486: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 1),
|
|
0x1E04A4: (["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 0, 0.5),
|
|
}
|
|
|
|
gooey_target_palettes = {
|
|
0x604C2: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x64592: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x64692: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x64892: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x1E02CA: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x1E0342: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x1E05A6: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x1E05B8: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 0.5),
|
|
0x1E0636: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1),
|
|
0x1E065A: (["1", "2", "3", "4", "5", "6", "7", "8", "9"], 0, 1.5),
|
|
}
|
|
|
|
|
|
def get_kirby_palette(world):
|
|
palette = world.options.kirby_flavor_preset.value
|
|
if palette == KirbyFlavorPreset.option_custom:
|
|
return world.options.kirby_flavor.value
|
|
return kirby_flavor_presets.get(palette, None)
|
|
|
|
|
|
def get_gooey_palette(world):
|
|
palette = world.options.gooey_flavor_preset.value
|
|
if palette == GooeyFlavorPreset.option_custom:
|
|
return world.options.gooey_flavor.value
|
|
return gooey_flavor_presets.get(palette, None)
|
|
|
|
|
|
def rgb888_to_bgr555(red, green, blue) -> bytes:
|
|
red = red >> 3
|
|
green = green >> 3
|
|
blue = blue >> 3
|
|
outcol = (blue << 10) + (green << 5) + red
|
|
return struct.pack("H", outcol)
|
|
|
|
|
|
def get_palette_bytes(palette, target, offset, factor):
|
|
output_data = bytearray()
|
|
for color in target:
|
|
hexcol = palette[color]
|
|
if hexcol.startswith("#"):
|
|
hexcol = hexcol.replace("#", "")
|
|
colint = int(hexcol, 16)
|
|
col = ((colint & 0xFF0000) >> 16, (colint & 0xFF00) >> 8, colint & 0xFF)
|
|
col = tuple(int(int(factor*x) + offset) for x in col)
|
|
byte_data = rgb888_to_bgr555(col[0], col[1], col[2])
|
|
output_data.extend(bytearray(byte_data))
|
|
return output_data
|