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 // Cinema 24/7 -- Navigation
// Lobby Foyer Labyrinth-Etagen Eingang Theater 4 // Lobby -> Foyer -> Labyrinth-Etagen -> Eingang Theater 4
// //
// Variablen: // Variablen:
// past_it Spieler ist an Theater 4 vorbeigegangen (bool) // past_it -- Spieler ist an Theater 4 vorbeigegangen (bool)
// snaks Spieler hat Snacks mitgenommen (0/1) // snaks -- Spieler hat Snacks mitgenommen (0/1)
// had_sweets Spieler hat süße Snacks gewählt (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. // Ü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. // 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. // Begegnung mit Nails, der Schattenkünstlerin.
// //
// Variablen: // Variablen:
// favor_nails Nails' Stimmung; > 0 = Sympathie, < 0 = Genervtheit // favor_nails -- Nails' Stimmung; > 0 = Sympathie, < 0 = Genervtheit
// past_it aus cinema.ink via KV: Spieler ist an Theater 4 vorbeigegangen // past_it -- aus cinema.ink via KV: Spieler ist an Theater 4 vorbeigegangen
// snaks aus cinema.ink via KV: Spieler hat Snacks (0/1) // 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) // had_sweets -- aus cinema.ink via KV: Spieler hat Süßes gewählt (0/1)
// fallbear temporär: Bär verliert Gleichgewicht beim Ausweichen // fallbear -- temporär: Bär verliert Gleichgewicht beim Ausweichen
// boop_success temporär: Einhorn-Nase boopen erfolgreich (0/1) // boop_success -- temporär: Einhorn-Nase boopen erfolgreich (0/1)
// //
// Stub-Knoten (noch zu schreiben): // Stub-Knoten (noch zu schreiben):
// the_show, cbear, shadow_battle, apprentice, quitter, // 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] ++ [Project]
// TODO: per Shuffle zufällig zwischen "passable" und "ugly" wechseln. // 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. // VAR wolf_ugly + { shuffle: - ... - ... }-Syntax oder zwei Pfade.
And... you create a passable attempt. Much smaller and a little crooked, maybe. 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. It is baiting you. Cunning. You can already start to feel the strength of your attacks receding.
= cbear = 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 -> END
= the_show = the_show
// TODO: Die eigentliche Vorstellung Nails' Schattentheater // TODO: Die eigentliche Vorstellung -- Nails' Schattentheater
// Übergang in silent_show (stilles Beobachten) oder interaktiv // Übergang in silent_show (stilles Beobachten) oder interaktiv
-> silent_show -> silent_show
@@ -828,7 +828,7 @@ It dips its head into the water, gracefully. Kissing the ripples of the surface
-> END -> END
= shadow_battle = shadow_battle
// TODO: Schattenkampf Nails' wolf vs. Spieler's bear, freie Wahl // TODO: Schattenkampf -- Nails' wolf vs. Spieler's bear, freie Wahl
-> END -> END
= apprentice = apprentice
@@ -836,7 +836,7 @@ It dips its head into the water, gracefully. Kissing the ripples of the surface
-> END -> END
= quitter = quitter
// TODO: Hase flüchtet vom Bildschirm feige Niederlage // TODO: Hase flüchtet vom Bildschirm -- feige Niederlage
-> END -> END
= her_portfolio = her_portfolio
@@ -852,5 +852,5 @@ It dips its head into the water, gracefully. Kissing the ripples of the surface
-> END -> END
= seeulater = seeulater
// TODO: Verabredung für später Spieler kommt nochmal // TODO: Verabredung für später -- Spieler kommt nochmal
-> END -> END
+1 -1
View File
@@ -10,7 +10,7 @@ VAR quest_mushroom_done = false
- quest_mushroom_active && mushrooms_collected >= 10: - quest_mushroom_active && mushrooms_collected >= 10:
# color whisper # color whisper
Du hast {mushrooms_collected} Pilze dabei mehr als genug! Du hast {mushrooms_collected} Pilze dabei -- mehr als genug!
* [Hier, nimm sie.] * [Hier, nimm sie.]
~ quest_mushroom_done = true ~ quest_mushroom_done = true
# color whisper # 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 exit 1
fi 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 built=0 skipped=0 failed=0
shopt -s nullglob shopt -s nullglob
for src in "$ink_dir"/*.ink; do for src in "$ink_dir"/*.ink; do
out="${src%.ink}.ink.json" out="${src%.ink}.ink.json"
name="$(basename "$src")" 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. # Inkrementell: überspringen, wenn Ausgabe existiert und neuer ist.
if [ "$force" -eq 0 ] && [ -f "$out" ] && [ "$out" -nt "$src" ]; then if [ "$force" -eq 0 ] && [ -f "$out" ] && [ "$out" -nt "$src" ]; then
printf ' aktuell %s\n' "$name" printf ' aktuell %s\n' "$name"