This commit is contained in:
Team3
2026-09-04 00:06:51 +02:00
parent 8c7da42e64
commit 8b60164592
8 changed files with 690 additions and 73 deletions

View File

@@ -24,7 +24,8 @@ var progress: Dictionary = {} # human_id -> 0..100
var cooldown: Dictionary = {} # tech_id -> Restsekunden
var systeme: Dictionary = {} # human_id -> {slot -> {tech, guete}}
var erkannt_slots: Dictionary = {} # human_id -> {slot -> true}
var beobachtung: Dictionary = {} # "human:slot" -> Sekunden
var gesehen: Dictionary = {} # human_id -> {slot -> true}, wo man dabei war
var notiz_sperre: float = 0.0 # nach einem Fehlgriff kurz gesperrt
var completed: Array = []
var time_h: float = 7.0
var day: int = 1
@@ -55,6 +56,8 @@ func _setup_input() -> void:
"steigen": [KEY_SPACE],
"sinken": [KEY_SHIFT],
"interagieren": [KEY_E],
"folgen": [KEY_F],
"notieren": [KEY_R],
"journal": [KEY_J, KEY_TAB],
"tempo_1": [KEY_1, KEY_KP_1],
"tempo_2": [KEY_2, KEY_KP_2],
@@ -305,7 +308,7 @@ func _insel_waechst() -> void:
const BASIS_TEMPO := 45.0 # Prozent je Tag, wenn nichts mehr bremst
const GUETE_ERSATZ := 1.35 # Blocker mit gleicher Belohnung ersetzt
const GUETE_NEU := 1.0 # System in einen freien Slot gesetzt
const ERKENNEN_SEK := 3.0 # so lange muss man dabeistehen
const NOTIZ_SPERRE := 6.0 # nach einem Fehlgriff schaut man erst wieder hin
func slots(human_id: String) -> Array:
@@ -313,6 +316,34 @@ func slots(human_id: String) -> Array:
return h["routine"] if h.has("routine") else []
## Welcher Slot deckt diese Stunde ab? Jeder Tag ist gleich, es gibt keine
## Wochentage -- der Ablauf 0-23 Uhr wiederholt sich.
func slot_bei_stunde(human_id: String, stunde: int) -> int:
var r := slots(human_id)
if r.is_empty():
return -1
var nr := r.size() - 1
for i in range(r.size()):
if float(stunde) >= float(r[i][0]):
nr = i
return nr
## Dabeigewesen: die Stunde ist im Ablauf nicht mehr leer. Was dort schiefläuft,
## steht damit noch nicht fest -- das muss der Spieler benennen.
func gesehen_slot(human_id: String, nr: int) -> bool:
return gesehen.get(human_id, {}).has(nr)
func sehen(human_id: String, nr: int) -> void:
if gesehen_slot(human_id, nr):
return
if not gesehen.has(human_id):
gesehen[human_id] = {}
gesehen[human_id][nr] = true
state_changed.emit()
func slot_grund(human_id: String, nr: int) -> String:
var r := slots(human_id)
return str(r[nr][2]) if nr >= 0 and nr < r.size() else ""
@@ -339,23 +370,30 @@ func erkannt(human_id: String, nr: int) -> bool:
return erkannt_slots.get(human_id, {}).has(nr)
## Dabeistehen deckt auf, was dort wirklich läuft -- und damit die Ursache.
func beobachten(human_id: String, nr: int, delta: float) -> bool:
## Zusehen allein deckt nichts auf. Der Spieler muss den Moment benennen:
## "hier läuft etwas schief". Trifft er, steht die Ursache im Journal.
## Greift er daneben, schaut er eine Weile umsonst hin.
## Grundlage bleibt awareness training -- nur ist das Bemerken jetzt ein Akt.
func notieren(human_id: String, nr: int) -> String:
if notiz_sperre > 0.0:
return "gesperrt"
var grund := slot_grund(human_id, nr)
if not Ursachen.ist_blocker(grund):
notiz_sperre = NOTIZ_SPERRE
notified.emit("Hier läuft nichts schief — %s ist einfach ihr Tag." %
Orte.text(grund), Color(1, 0.75, 0.55))
return "daneben"
if erkannt(human_id, nr):
return false
var schluessel := "%s:%d" % [human_id, nr]
var stand: float = float(beobachtung.get(schluessel, 0.0)) + delta
beobachtung[schluessel] = stand
if stand < ERKENNEN_SEK:
return false
notified.emit("Das hast du schon notiert: %s." % Orte.text(grund),
Color(0.8, 0.85, 1))
return "bekannt"
if not erkannt_slots.has(human_id):
erkannt_slots[human_id] = {}
erkannt_slots[human_id][nr] = true
var b := slot_grund(human_id, nr)
notified.emit("Erkannt: %s — %s" % [Ursachen.BLOCKER[b]["name"],
Ursachen.LISTE[Ursachen.ursache_von(b)]["name"]], Color(0.8, 0.95, 1))
notified.emit("Erkannt: %s — %s" % [Ursachen.BLOCKER[grund]["name"],
Ursachen.LISTE[Ursachen.ursache_von(grund)]["name"]], Color(0.8, 0.95, 1))
state_changed.emit()
return true
return "treffer"
## Eine Ursache gilt als erkannt, sobald eine ihrer Tätigkeiten aufgedeckt ist.