""" make-mc-textures.py – erzeugt die 16×16-Kacheln für das Minecraft-Design (src/assets/design/*.png). Eigene, zufällig erzeugte Muster im Block-Stil – keine Original-Texturen aus dem Spiel. Aufruf: python scripts/make-mc-textures.py """ import os import random from PIL import Image ZIEL = os.path.join(os.path.dirname(__file__), '..', 'src', 'assets', 'design') os.makedirs(ZIEL, exist_ok=True) def klemme(v): return max(0, min(255, int(v))) def rauschen(basis, streuung, seed, flecken=None): """Grundfarbe mit Pixelrauschen; flecken = (anteil, farbe, streuung).""" rnd = random.Random(seed) img = Image.new('RGB', (16, 16)) px = img.load() for y in range(16): for x in range(16): d = rnd.randint(-streuung, streuung) farbe = basis if flecken and rnd.random() < flecken[0]: farbe = flecken[1] d = rnd.randint(-flecken[2], flecken[2]) px[x, y] = tuple(klemme(c + d) for c in farbe) return img def speichere(img, name): img.save(os.path.join(ZIEL, name)) print(name) # Hintergrund der Instanzliste: dunkle Erde (wie hinter Menüs im Spiel) speichere(rauschen((44, 32, 23), 6, 11, (0.16, (31, 22, 15), 4)), 'erde-dunkel.png') # Leisten (Werkzeugleiste, Seitenleiste, Statusleiste): dunkler Schiefer schiefer = rauschen((46, 46, 50), 6, 23, (0.12, (34, 34, 38), 3)) px = schiefer.load() rnd = random.Random(5) for _ in range(5): # ein paar waagerechte Bruchkanten wie bei Tiefenschiefer y = rnd.randrange(16) x0 = rnd.randrange(16) for x in range(x0, min(16, x0 + rnd.randint(3, 7))): px[x, y] = (30, 30, 33) speichere(schiefer, 'schiefer.png') # Dialoge: Stein stein = rauschen((78, 78, 80), 8, 37, (0.10, (60, 60, 62), 4)) speichere(stein, 'stein.png') # Holzbretter (z. B. Kopf der Dialoge): vier Bretter zu je 4 Pixeln bretter = Image.new('RGB', (16, 16)) px = bretter.load() rnd = random.Random(41) farben = [(122, 92, 56), (114, 86, 52), (128, 97, 60), (118, 89, 54)] fugen = [3, 11, 7, 14] for brett in range(4): for y in range(brett * 4, brett * 4 + 4): for x in range(16): c = farben[brett] d = rnd.randint(-5, 5) if y == brett * 4 + 3: # dunkle Fuge unter jedem Brett c, d = (74, 55, 33), rnd.randint(-2, 2) elif x == fugen[brett]: # Stoßfuge c, d = (88, 66, 40), 0 px[x, y] = tuple(klemme(v + d) for v in c) speichere(bretter, 'bretter.png') # Grasnarbe: oberer Rand der Werkzeugleiste (16×4, grün mit "Tropfen") gras = Image.new('RGBA', (16, 4), (0, 0, 0, 0)) px = gras.load() rnd = random.Random(53) tiefe = [2, 3, 2, 2, 4, 3, 2, 3, 2, 2, 3, 4, 2, 3, 2, 3] for x in range(16): for y in range(tiefe[x]): g = rnd.randint(-10, 10) px[x, y] = (klemme(84 + g), klemme(140 + g), klemme(52 + g // 2), 255) speichere(gras, 'gras.png')