Archipelago/worlds/kdl3/Aesthetics.py

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