diff --git a/docs/superpowers/specs/2026-09-16-strassen-design.md b/docs/superpowers/specs/2026-09-16-strassen-design.md index 4be01ec..2505bb9 100644 --- a/docs/superpowers/specs/2026-09-16-strassen-design.md +++ b/docs/superpowers/specs/2026-09-16-strassen-design.md @@ -86,12 +86,14 @@ Ein 15-cm-Bordstein hält den Spieler also nicht auf, er ist eine Stufe. Fahrzeu | Maßeinheit | Zentimeter | Meter | | Kernmaß | Bordstein 84,79 × 14,87 cm, Module 300 cm | Fahrbahnstücke **4,2 m** breit | | Texturen | 3 Materialien, alle 2048², mit Normal- und MetallicRoughness-Karte | 9 Materialien, 512–1024, Markierungen fest eingebacken | -| Brauchbar als | Profil und Texturen für Bordstein und Gehweg | später Schilder, Masten, Geländer | +| Brauchbar als | ursprünglich Profil und Texturen für Bordstein und Gehweg — am Ende keines von beidem, s. Korrektur unten | später Schilder, Masten, Geländer | Zwei Dinge liegen damit fest. Erstens: Das Straßen-Kit taugt nicht für die Fahrbahn — 4,2 m gegen 13,4 m gemessene Korridorbreite, und seine Markierungen sind europäisch (gelbe Randlinien, weiße gestrichelte Mitte), also das Gegenteil des amerikanischen Schemas. Zweitens: Das Bordstein-Kit besteht aus 16 Kästen mit zusammen 351 Punkten; seine Substanz sind die Texturen, nicht die Geometrie. 177 km Bordsteinkante wären in 3-m-Modulen rund 59.000 Einzelteile. **Korrektur (Gehwegtextur-Korrektur, 2026-09-18):** Die Zeile „Brauchbar als: Profil und Texturen für Bordstein und Gehweg" gilt nur noch für den Bordstein. `sidewalk_Diffuse.jpg` aus `modular_sidewalk_curb_kit` ist kein Betonbild, sondern das Platzhalterbild des Kits — dunkler Grund, roter Schriftzug „Tru-planar Sidewalk texture", im Browser geprüft. Solange `loadSet()` an der fehlenden Normal- und ARM-Karte scheiterte, fiel der Gehweg auf den einfarbigen Ersatz zurück und niemand bemerkte es; sobald `loadSet()` auch ohne die beiden Beiwerke lädt (s. Abschnitt „Texturen aus dem Kit" unten), kachelt der Schriftzug über die ganze Stadt. Der Gehweg benutzt deshalb `concrete_pavement` von Poly Haven (CC0), dieselbe Textur wie die Parkwege (`TEXTURES.paths`). Der Bordstein bleibt beim Kit — `curb_Diffuse.jpg` ist eine echte Betontextur mit Fugen, im Browser geprüft. +**Korrektur (Bordstein-Befund, 2026-09-18):** Auch der Bordstein kommt nicht mehr aus dem Kit. Seine Wand ist 18 cm hoch; dort trägt eine Textur mit waagerechter Struktur mehr als das Modulmuster des Kits, und der Nutzer hat `brushed_concrete_04` von Poly Haven (CC0) ausgewählt. Damit ist `modular_sidewalk_curb_kit` nirgends mehr im Spiel: Die Geometrie war von Anfang an selbst gebaut, beide Texturen kommen jetzt von Poly Haven, und die Namensnennung des Kits entfällt (s. Abschnitt „Namensnennung"). + ## Entscheidungen des Nutzers | Frage | Entscheidung | @@ -205,7 +207,7 @@ Der Schritt überspringt still, was schon da ist, und meldet verständlich, wenn `sidewalk_metallicRoughness.png` ist eine 605 Byte große Einfarbfläche und wird nicht übernommen; eine Normal-Map für den Gehweg liefert das Kit nicht. -**Namensnennung:** `manifest.json` und die Zeile im Spiel bekommen „Bordstein: Just8 (Sketchfab, CC BY 4.0)". Das Straßen-Kit wird in dieser Arbeit nicht benutzt und deshalb auch nicht genannt. Der Gehweg kommt seit der Korrektur oben (Abschnitt „Die beiden Kits") von Poly Haven (CC0) und bleibt deshalb wie die übrigen Poly-Haven-Texturen ohne eigene Namensnennung. +**Namensnennung:** Keine neue Zeile. Bordstein und Gehweg kommen seit den beiden Korrekturen oben (Abschnitt „Die beiden Kits") von Poly Haven (CC0) und brauchen wie die übrigen Poly-Haven-Texturen keine eigene Namensnennung; das Bordstein-Kit von Just8 und das Straßen-Kit werden nicht benutzt und deshalb auch nicht genannt. ## Chunk-Format diff --git a/public/textures/brushed_concrete_04_Diffuse.jpg b/public/textures/brushed_concrete_04_Diffuse.jpg new file mode 100644 index 0000000..eb12a40 Binary files /dev/null and b/public/textures/brushed_concrete_04_Diffuse.jpg differ diff --git a/public/textures/brushed_concrete_04_arm.jpg b/public/textures/brushed_concrete_04_arm.jpg new file mode 100644 index 0000000..d707edc Binary files /dev/null and b/public/textures/brushed_concrete_04_arm.jpg differ diff --git a/public/textures/brushed_concrete_04_nor_gl.jpg b/public/textures/brushed_concrete_04_nor_gl.jpg new file mode 100644 index 0000000..d41788f Binary files /dev/null and b/public/textures/brushed_concrete_04_nor_gl.jpg differ diff --git a/public/textures/curb_Diffuse.jpg b/public/textures/curb_Diffuse.jpg deleted file mode 100644 index a83e597..0000000 Binary files a/public/textures/curb_Diffuse.jpg and /dev/null differ diff --git a/public/textures/curb_arm.jpg b/public/textures/curb_arm.jpg deleted file mode 100644 index f79bf83..0000000 Binary files a/public/textures/curb_arm.jpg and /dev/null differ diff --git a/public/textures/curb_nor_gl.jpg b/public/textures/curb_nor_gl.jpg deleted file mode 100644 index 92f6c07..0000000 Binary files a/public/textures/curb_nor_gl.jpg and /dev/null differ diff --git a/src/world/materials.js b/src/world/materials.js index c937a83..09f9d4b 100644 --- a/src/world/materials.js +++ b/src/world/materials.js @@ -16,7 +16,10 @@ export const TEXTURES = { paths: "concrete_pavement", // helle Betonplatten, seit Teil 2 auch für den Gehweg (sidewalk unten) carriageway: "asphalt_02", lots: "asphalt_02", // Parkplätze und Vorplätze: derselbe Asphalt wie die Fahrbahn - curb: "curb", // modular_sidewalk_curb_kit (Just8, CC BY 4.0), s. tools/assets/textures.mjs + // Gebürsteter Beton mit Fugen und Kanten: die Wand ist nur 18 cm hoch, da zählt eine Textur mit + // waagerechter Struktur mehr als eine mit Muster. Vorher kam sie aus modular_sidewalk_curb_kit; + // die Kit-Textur ist damit nirgends mehr im Spiel (s. tools/assets/textures.mjs). + curb: "brushed_concrete_04", // Derselbe Wert wie TEXTURES.paths: helle Betonplatten in echter Größe. Die Kit-Textur schied // aus, weil sidewalk_Diffuse.jpg kein Betonbild war, sondern das Platzhalterbild des Kits // (roter Schriftzug "Tru-planar Sidewalk texture", im Browser geprüft). diff --git a/tools/assets/textures.mjs b/tools/assets/textures.mjs index a0b144c..2bf3235 100644 --- a/tools/assets/textures.mjs +++ b/tools/assets/textures.mjs @@ -2,11 +2,10 @@ // unangetastet, damit ein neuer Eintrag die übrigen Texturen nicht still ändert. import { existsSync } from "node:fs"; import { mkdir, writeFile } from "node:fs/promises"; -import sharp from "sharp"; const UA = { "User-Agent": "leonida-assets/0.1 (local hobby project)" }; const SLUGS = ["asphalt_02", "concrete_pavement_03", "white_stucco", "sand_01", "leafy_grass", "grass_path_2", "palm_bark", - "concrete_pavement"]; + "concrete_pavement", "brushed_concrete_04"]; const MAPS = ["Diffuse", "nor_gl", "arm"]; await mkdir("public/textures", { recursive: true }); @@ -24,42 +23,7 @@ for (const slug of SLUGS) { } } -// Der Bordstein kommt aus modular_sidewalk_curb_kit (Just8, CC BY 4.0). Der Ordner gehört dem -// Nutzer und liegt nicht im Repo — das Skript darf deshalb nicht von ihm abhängen, sondern -// überspringt den Schritt mit einer verständlichen Meldung, wenn er fehlt. Die drei erzeugten -// Dateien sind versioniert, danach braucht niemand mehr den Ordner. -// Korrektur: sidewalk_baseColor.jpeg (-> sidewalk_Diffuse.jpg) ist raus. Die Datei war das -// Platzhalterbild des Kits, keine Betontextur (roter Schriftzug "Tru-planar Sidewalk texture", -// im Browser geprüft) - der Gehweg benutzt jetzt concrete_pavement von Poly Haven, s. -// src/world/materials.js. -// Über CURB_KIT umstellbar, damit der Fall "Kit fehlt" geprüft werden kann, ohne den Ordner -// des Nutzers zu verschieben. -const KIT = `${process.env.CURB_KIT ?? "modular_sidewalk_curb_kit"}/textures`; -const KIT_MAPS = [ - // glTF packt Rauheit nach G und Metall nach B — dasselbe Schema wie die arm-Karten von - // Poly Haven, deshalb ist die metallicRoughness-Karte hier direkt das arm-Ziel. - { from: "CurbMat_baseColor.jpeg", to: "curb_Diffuse.jpg" }, - { from: "CurbMat_normal.png", to: "curb_nor_gl.jpg" }, - { from: "CurbMat_metallicRoughness.png", to: "curb_arm.jpg" }, -]; - -async function importCurbKit() { - if (!existsSync(KIT)) { - console.log(`${KIT} fehlt — Bordstein-Texturen übersprungen. Das Kit gehört dem Nutzer ` - + "und ist nicht im Repo; die erzeugten Dateien liegen bereits unter public/textures."); - return; - } - for (const { from, to } of KIT_MAPS) { - const target = `public/textures/${to}`; - if (existsSync(target)) { - console.log(`${to} ist schon da`); - continue; - } - // 1024 wie alle übrigen Texturen: die 2048er des Kits wären für ein 15 cm hohes - // Wandband Verschwendung. - await sharp(`${KIT}/${from}`).resize(1024, 1024).jpeg({ quality: 90 }).toFile(target); - console.log(`${to} erzeugt`); - } -} - -await importCurbKit(); +// modular_sidewalk_curb_kit (Just8, CC BY 4.0) wird nicht mehr gebraucht. Der Gehweg nimmt seit der +// Gehwegtextur-Korrektur concrete_pavement, der Bordstein seit dem Bordstein-Befund +// brushed_concrete_04 - beide von Poly Haven (CC0) und beide oben in SLUGS. Die Geometrie des +// Bordsteins war ohnehin selbst gebaut (s. src/world/geometry.js, kerbGeometry). diff --git a/tools/extract/run.py b/tools/extract/run.py index 31b5a7e..73d9595 100644 --- a/tools/extract/run.py +++ b/tools/extract/run.py @@ -169,8 +169,7 @@ def main() -> None: "class_shares": shares, "attribution": "Kartenkacheln: GTA VI Map (CC BY 4.0) — https://map.gtadb.org, YANIS v15. " "Wahrzeichen: rolux/gtamaplib-vc (Unlicense). " - "Flamingo Park: © OpenStreetMap-Mitwirkende (ODbL). " - "Bordstein: Just8 (Sketchfab, CC BY 4.0).", + "Flamingo Park: © OpenStreetMap-Mitwirkende (ODbL).", }) print(render_map(OUT, OUT), "->", OUT)