42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import requests
|
|
import PIL.Image
|
|
import re
|
|
|
|
url = "https://raw.githubusercontent.com/CrystalSaver/Z4RandomizerBeta2/master/"
|
|
|
|
for k, v in requests.get(url + "asset-manifest.json").json()['files'].items():
|
|
m = re.match("static/media/Graphics(.+)\\.bin", k)
|
|
assert m is not None
|
|
if not k.startswith("static/media/Graphics") or not k.endswith(".bin"):
|
|
continue
|
|
name = m.group(1)
|
|
|
|
data = requests.get(url + v).content
|
|
|
|
icon = PIL.Image.new("P", (16, 16))
|
|
buffer = bytearray(b'\x00' * 16 * 8)
|
|
for idx in range(0x0C0, 0x0C2):
|
|
for y in range(16):
|
|
a = data[idx * 32 + y * 2]
|
|
b = data[idx * 32 + y * 2 + 1]
|
|
for x in range(8):
|
|
v = 0
|
|
if a & (0x80 >> x):
|
|
v |= 1
|
|
if b & (0x80 >> x):
|
|
v |= 2
|
|
buffer[x+y*8] = v
|
|
tile = PIL.Image.frombytes('P', (8, 16), bytes(buffer))
|
|
x = (idx % 16) * 8
|
|
icon.paste(tile, (x, 0))
|
|
pal = icon.getpalette()
|
|
assert pal is not None
|
|
pal[0:3] = [150, 150, 255]
|
|
pal[3:6] = [0, 0, 0]
|
|
pal[6:9] = [59, 180, 112]
|
|
pal[9:12] = [251, 221, 197]
|
|
icon.putpalette(pal)
|
|
icon = icon.resize((32, 32))
|
|
icon.save("gfx/%s.bin.png" % (name))
|
|
open("gfx/%s.bin" % (name), "wb").write(data)
|