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)
							 |