Compare commits

..

3 Commits

Author SHA1 Message Date
irrlicht ccac320e0e Sonderzeichen in person.ink ersetzt 2026-06-15 11:52:47 +02:00
irrlicht ff3e66ae3e Scan auf nicht-CP437-Zeichen in Ink-Buildscript 2026-06-15 11:51:53 +02:00
irrlicht 7c92f046a1 nicht-CP437-Zeichen ersetzt 2026-06-15 11:51:20 +02:00
5 changed files with 45 additions and 20 deletions
+5 -5
View File
@@ -1,10 +1,10 @@
// Cinema 24/7 Navigation
// Lobby Foyer Labyrinth-Etagen Eingang Theater 4
// Cinema 24/7 -- Navigation
// Lobby -> Foyer -> Labyrinth-Etagen -> Eingang Theater 4
//
// Variablen:
// past_it Spieler ist an Theater 4 vorbeigegangen (bool)
// snaks Spieler hat Snacks mitgenommen (0/1)
// had_sweets Spieler hat süße Snacks gewählt (0/1)
// past_it -- Spieler ist an Theater 4 vorbeigegangen (bool)
// snaks -- Spieler hat Snacks mitgenommen (0/1)
// had_sweets -- Spieler hat süße Snacks gewählt (0/1)
//
// Übergang zu cinema_f4r4.ink via # start_ink Tag bei Eintreten in Theater 4.
// KV-Store überträgt snaks/had_sweets/past_it automatisch ans nächste Script.
+13 -13
View File
@@ -1,13 +1,13 @@
// Cinema 24/7 Theater 4: Nails
// Cinema 24/7 -- Theater 4: Nails
// Begegnung mit Nails, der Schattenkünstlerin.
//
// Variablen:
// favor_nails Nails' Stimmung; > 0 = Sympathie, < 0 = Genervtheit
// past_it aus cinema.ink via KV: Spieler ist an Theater 4 vorbeigegangen
// snaks aus cinema.ink via KV: Spieler hat Snacks (0/1)
// had_sweets aus cinema.ink via KV: Spieler hat Süßes gewählt (0/1)
// fallbear temporär: Bär verliert Gleichgewicht beim Ausweichen
// boop_success temporär: Einhorn-Nase boopen erfolgreich (0/1)
// favor_nails -- Nails' Stimmung; > 0 = Sympathie, < 0 = Genervtheit
// past_it -- aus cinema.ink via KV: Spieler ist an Theater 4 vorbeigegangen
// snaks -- aus cinema.ink via KV: Spieler hat Snacks (0/1)
// had_sweets -- aus cinema.ink via KV: Spieler hat Süßes gewählt (0/1)
// fallbear -- temporär: Bär verliert Gleichgewicht beim Ausweichen
// boop_success -- temporär: Einhorn-Nase boopen erfolgreich (0/1)
//
// Stub-Knoten (noch zu schreiben):
// the_show, cbear, shadow_battle, apprentice, quitter,
@@ -448,7 +448,7 @@ Her: No. It's fine. You can sit down in the front as well. Just there will be fi
--
++ [Project]
// TODO: per Shuffle zufällig zwischen "passable" und "ugly" wechseln.
// Inklecate unterstützt keine mehrzeiligen {~}-Sequenzen braucht
// Inklecate unterstützt keine mehrzeiligen {~}-Sequenzen -- braucht
// VAR wolf_ugly + { shuffle: - ... - ... }-Syntax oder zwei Pfade.
And... you create a passable attempt. Much smaller and a little crooked, maybe.
--
@@ -798,11 +798,11 @@ You must never underestimate how dangerous a desperate animal is.
It is baiting you. Cunning. You can already start to feel the strength of your attacks receding.
= cbear
// TODO: Gegenangriff-Bär Bär greift aus erhöhter Position an
// TODO: Gegenangriff-Bär -- Bär greift aus erhöhter Position an
-> END
= the_show
// TODO: Die eigentliche Vorstellung Nails' Schattentheater
// TODO: Die eigentliche Vorstellung -- Nails' Schattentheater
// Übergang in silent_show (stilles Beobachten) oder interaktiv
-> silent_show
@@ -828,7 +828,7 @@ It dips its head into the water, gracefully. Kissing the ripples of the surface
-> END
= shadow_battle
// TODO: Schattenkampf Nails' wolf vs. Spieler's bear, freie Wahl
// TODO: Schattenkampf -- Nails' wolf vs. Spieler's bear, freie Wahl
-> END
= apprentice
@@ -836,7 +836,7 @@ It dips its head into the water, gracefully. Kissing the ripples of the surface
-> END
= quitter
// TODO: Hase flüchtet vom Bildschirm feige Niederlage
// TODO: Hase flüchtet vom Bildschirm -- feige Niederlage
-> END
= her_portfolio
@@ -852,5 +852,5 @@ It dips its head into the water, gracefully. Kissing the ripples of the surface
-> END
= seeulater
// TODO: Verabredung für später Spieler kommt nochmal
// TODO: Verabredung für später -- Spieler kommt nochmal
-> END
+1 -1
View File
@@ -10,7 +10,7 @@ VAR quest_mushroom_done = false
- quest_mushroom_active && mushrooms_collected >= 10:
# color whisper
Du hast {mushrooms_collected} Pilze dabei mehr als genug!
Du hast {mushrooms_collected} Pilze dabei -- mehr als genug!
* [Hier, nimm sie.]
~ quest_mushroom_done = true
# color whisper
+1 -1
View File
@@ -1 +1 @@
{"inkVersion":21,"root":[[["ev",{"VAR?":"quest_mushroom_done"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Danke nochmal für die Pilze. Das Rezept ist fast fertig.","\n",{"->":"ende"},{"->":"0.4"},null]}],["ev",{"VAR?":"quest_mushroom_active"},{"VAR?":"mushrooms_collected"},10,">=","&&","/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ Pilze dabei mehr als genug!","\n","ev","str","^Hier, nimm sie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Lass mich noch ein paar behalten.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_done","re":true},"#","^color whisper","/#","^Wunderbar, vielen Dank! Das wird ein gutes Süppchen.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Wie du willst. Komm wieder, wenn du sie loswerden möchtest.","\n",{"->":"ende"},{"#f":5}]}]}],["ev",{"VAR?":"quest_mushroom_active"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast schon ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ von 10 Pilzen. Mach ruhig weiter.","\n",{"->":"ende"},{"->":"0.4"},null]}],[{"->":".^.b"},{"b":["\n","#","^color whisper","/#","^TEST1 Hallo! Ich bräuchte 10 Pilze für ein Rezept. Hättest du Lust, welche zu sammeln?","\n","ev","str","^Klar, ich helfe.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Vielleicht später.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_active","re":true},"#","^color whisper","/#","^Danke! Ich warte hier.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Schade. Komm gerne nochmal vorbei.","\n",{"->":"ende"},{"#f":5}]}]}],"nop","\n",["done",{"#n":"g-0"}],null],"done",{"ende":[["ev","str","^Bis dann","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","#","^person_farewell","/#","end",{"#f":5}]}],null],"global decl":["ev",0,{"VAR=":"mushrooms_collected"},false,{"VAR=":"quest_mushroom_active"},false,{"VAR=":"quest_mushroom_done"},"/ev","end",null]}],"listDefs":{}}
{"inkVersion":21,"root":[[["ev",{"VAR?":"quest_mushroom_done"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Danke nochmal für die Pilze. Das Rezept ist fast fertig.","\n",{"->":"ende"},{"->":"0.4"},null]}],["ev",{"VAR?":"quest_mushroom_active"},{"VAR?":"mushrooms_collected"},10,">=","&&","/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ Pilze dabei -- mehr als genug!","\n","ev","str","^Hier, nimm sie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Lass mich noch ein paar behalten.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_done","re":true},"#","^color whisper","/#","^Wunderbar, vielen Dank! Das wird ein gutes Süppchen.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Wie du willst. Komm wieder, wenn du sie loswerden möchtest.","\n",{"->":"ende"},{"#f":5}]}]}],["ev",{"VAR?":"quest_mushroom_active"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast schon ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ von 10 Pilzen. Mach ruhig weiter.","\n",{"->":"ende"},{"->":"0.4"},null]}],[{"->":".^.b"},{"b":["\n","#","^color whisper","/#","^TEST1 Hallo! Ich bräuchte 10 Pilze für ein Rezept. Hättest du Lust, welche zu sammeln?","\n","ev","str","^Klar, ich helfe.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Vielleicht später.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_active","re":true},"#","^color whisper","/#","^Danke! Ich warte hier.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Schade. Komm gerne nochmal vorbei.","\n",{"->":"ende"},{"#f":5}]}]}],"nop","\n",["done",{"#n":"g-0"}],null],"done",{"ende":[["ev","str","^Bis dann","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","#","^person_farewell","/#","end",{"#f":5}]}],null],"global decl":["ev",0,{"VAR=":"mushrooms_collected"},false,{"VAR=":"quest_mushroom_active"},false,{"VAR=":"quest_mushroom_done"},"/ev","end",null]}],"listDefs":{}}
+25
View File
@@ -54,12 +54,37 @@ if [ ! -d "$ink_dir" ]; then
exit 1
fi
# Prüft eine .ink-Datei auf Zeichen außerhalb von CP437 und gibt sie aus.
# Exit-Code 1 wenn Treffer gefunden, sonst 0.
check_cp437() {
python3 - "$1" <<'PYEOF'
import sys
path = sys.argv[1]
cp437 = set(bytes(range(256)).decode('cp437', errors='replace'))
hits = []
with open(path, encoding='utf-8') as f:
for lineno, line in enumerate(f, 1):
for ch in line:
if ord(ch) > 127 and ch not in cp437:
hits.append(f' Z.{lineno}: U+{ord(ch):04X} {repr(ch)}')
for h in hits:
print(h)
sys.exit(1 if hits else 0)
PYEOF
}
built=0 skipped=0 failed=0
shopt -s nullglob
for src in "$ink_dir"/*.ink; do
out="${src%.ink}.ink.json"
name="$(basename "$src")"
# CP437-Warnung: läuft immer, unabhängig vom Build-Status.
if ! cp437_warn="$(check_cp437 "$src")"; then
printf ' WARNUNG %s -- Nicht-CP437-Zeichen:\n' "$name"
printf '%s\n' "$cp437_warn"
fi
# Inkrementell: überspringen, wenn Ausgabe existiert und neuer ist.
if [ "$force" -eq 0 ] && [ -f "$out" ] && [ "$out" -nt "$src" ]; then
printf ' aktuell %s\n' "$name"