update
This commit is contained in:
@@ -33,6 +33,9 @@ var ueberwunden: Dictionary = {} # human_id -> {problem -> true}
|
||||
var gesehen_zaehler: Dictionary = {} # "human:problem" -> wie oft dabeigewesen
|
||||
var completed: Array = []
|
||||
var markiert: Dictionary = {} # human_id -> true: wer gerade ein Schild trägt
|
||||
var welt_version := 0 # zählt hoch, wenn Dorf oder Stadt neu erzeugt wurden
|
||||
var spuren: Dictionary = {} # human_id -> {ursache -> true}: in der Wohnung gelesen
|
||||
var notizen: Dictionary = {} # human_id -> [Zeilen mit Tag und Uhrzeit], für die Akte
|
||||
var time_h: float = 7.0
|
||||
var day: int = 1
|
||||
var teleport_lock: float = 0.0
|
||||
@@ -151,6 +154,7 @@ func insel_radius() -> float:
|
||||
func welt_erzeugen() -> void:
|
||||
DreamDB.erzeuge(haeuser())
|
||||
HumanDB.erzeuge()
|
||||
welt_version += 1
|
||||
|
||||
|
||||
## Das Traumdorf beginnt leer. Mit jedem erfüllten Traum zieht ein Wesen ein.
|
||||
@@ -352,11 +356,15 @@ func sehen(human_id: String, nr: int) -> void:
|
||||
|
||||
## Der Zustand einer Stunde. HUD und Panel zeichnen denselben -- zwei
|
||||
## Auslegungen würden mit der Zeit auseinanderlaufen.
|
||||
enum Stunde { UNBEKANNT, GESEHEN, SCHLAF, UNGEKLAERT, BENANNT, GEBAUT }
|
||||
enum Stunde { UNBEKANNT, GESEHEN, SCHLAF, UNGEKLAERT, BENANNT, GEBAUT, VERDAECHTIG }
|
||||
|
||||
|
||||
func slot_zustand(human_id: String, nr: int) -> int:
|
||||
if not gesehen_slot(human_id, nr):
|
||||
# eine gelesene Spur macht die Stunden ihrer Ursache verdächtig: dort lohnt es, dabei zu sein
|
||||
var g := slot_grund(human_id, nr)
|
||||
if Ursachen.ist_blocker(g) and spur_bekannt(human_id, Ursachen.ursache_von(g)):
|
||||
return Stunde.VERDAECHTIG
|
||||
return Stunde.UNBEKANNT
|
||||
if not system_in(human_id, nr).is_empty():
|
||||
return Stunde.GEBAUT
|
||||
@@ -405,6 +413,7 @@ func notieren(human_id: String, nr: int) -> String:
|
||||
if not Ursachen.ist_blocker(grund):
|
||||
notiz_sperre = NOTIZ_SPERRE
|
||||
notified.emit("Nichts schief: %s" % Orte.text(grund), Color(1, 0.75, 0.55))
|
||||
notiz(human_id, "Beobachtet: %s — nichts schief" % Orte.text(grund))
|
||||
return "daneben"
|
||||
if erkannt(human_id, nr):
|
||||
notified.emit("Schon notiert: %s" % Orte.text(grund), Color(0.8, 0.85, 1))
|
||||
@@ -414,13 +423,60 @@ func notieren(human_id: String, nr: int) -> String:
|
||||
erkannt_slots[human_id][nr] = true
|
||||
notified.emit("Erkannt: %s — %s" % [Ursachen.BLOCKER[grund]["name"],
|
||||
Ursachen.LISTE[Ursachen.ursache_von(grund)]["name"]], Color(0.8, 0.95, 1))
|
||||
notiz(human_id, "Erkannt: %s (%s)" % [Ursachen.BLOCKER[grund]["name"],
|
||||
Ursachen.LISTE[Ursachen.ursache_von(grund)]["name"]])
|
||||
state_changed.emit()
|
||||
return "treffer"
|
||||
|
||||
|
||||
## Eine Ursache gilt als erkannt, sobald eine ihrer Tätigkeiten aufgedeckt ist.
|
||||
## Nur eine Quelle -- sonst driften Slot und Ursache auseinander.
|
||||
## Ein Traumwesen flüstert eine Spur des Menschen, um den es gerade geht --
|
||||
## das Dorf hilft dem, der ihm seine Bewohner gebracht hat.
|
||||
func wesen_fluestert(index: int) -> String:
|
||||
var wesen: Dictionary = DreamDB.LIST[index] if index < DreamDB.LIST.size() else {"name": "Ein Wesen"}
|
||||
var wer := active_mission
|
||||
if wer == "":
|
||||
var offen := offene_missionen()
|
||||
wer = str(offen[0]["id"]) if not offen.is_empty() else ""
|
||||
if wer == "":
|
||||
return "%s lächelt nur. Nimm dir am Schwarzen Brett jemanden vor." % wesen["name"]
|
||||
var mensch := HumanDB.by_id(wer)
|
||||
for u in ursachen_von(wer):
|
||||
if spur_lesen(wer, str(u)):
|
||||
return "%s flüstert: Bei %s liegt etwas -- %s" % [wesen["name"], mensch["name"],
|
||||
Ursachen.LISTE[u]["spur_text"]]
|
||||
return "%s flüstert: Was bei %s herumliegt, kennst du schon. Geh hin und sieh, wann es geschieht." % \
|
||||
[wesen["name"], mensch["name"]]
|
||||
|
||||
|
||||
## Eine Zeile in die Akte: was wann festgestellt wurde.
|
||||
func notiz(human_id: String, text: String) -> void:
|
||||
if not notizen.has(human_id):
|
||||
notizen[human_id] = []
|
||||
notizen[human_id].append("Tag %d, %02d Uhr — %s" % [day, int(time_h), text])
|
||||
|
||||
|
||||
## Eine Spur in der Wohnung lesen: die Ursache ist damit bekannt, ihre
|
||||
## Stunden im Tag werden verdächtig. Liefert false, wenn sie schon bekannt war.
|
||||
func spur_lesen(human_id: String, ursache: String) -> bool:
|
||||
if spur_bekannt(human_id, ursache):
|
||||
return false
|
||||
if not spuren.has(human_id):
|
||||
spuren[human_id] = {}
|
||||
spuren[human_id][ursache] = true
|
||||
notiz(human_id, "Spur: %s" % Ursachen.LISTE[ursache]["spur"])
|
||||
state_changed.emit()
|
||||
return true
|
||||
|
||||
|
||||
func spur_bekannt(human_id: String, ursache: String) -> bool:
|
||||
return spuren.get(human_id, {}).has(ursache)
|
||||
|
||||
|
||||
func ursache_bekannt(human_id: String, ursache: String) -> bool:
|
||||
if spur_bekannt(human_id, ursache):
|
||||
return true
|
||||
for nr in erkannt_slots.get(human_id, {}):
|
||||
if Ursachen.ursache_von(slot_grund(human_id, int(nr))) == ursache:
|
||||
return true
|
||||
@@ -507,7 +563,8 @@ func system_setzen(human_id: String, nr: int, tech_id: String, widerstand: bool)
|
||||
var guete := float(pruef["guete"]) * (1.0 + 0.1 * float(verhalten(human_id, "guete")))
|
||||
systeme[human_id][nr] = {"tech": tech_id, "guete": guete}
|
||||
add_xp(tech_id, 2)
|
||||
notified.emit("System steht: %s um %02d:00" %
|
||||
notiz(human_id, "Routine gesetzt: %s" % TechDB.by_id(tech_id)["name"])
|
||||
notified.emit("Neue Routine steht: %s um %02d:00" %
|
||||
[TechDB.by_id(tech_id)["name"], int(slots(human_id)[nr][0])], Color(0.6, 1, 0.7))
|
||||
state_changed.emit()
|
||||
return {"ok": true, "erfolg": true, "guete": float(pruef["guete"])}
|
||||
@@ -699,7 +756,7 @@ func situation_anwenden(tech_id: String) -> Dictionary:
|
||||
ueberwunden[id] = {}
|
||||
ueberwunden[id][problem] = true
|
||||
res["ueberwunden"] = true
|
||||
notified.emit("%s überwunden" % Probleme.name_von(problem), Color(1, 0.85, 0.4))
|
||||
notified.emit("%s — ein Schritt weiter" % Probleme.name_von(problem), Color(1, 0.85, 0.4))
|
||||
state_changed.emit()
|
||||
return res
|
||||
|
||||
|
||||
Reference in New Issue
Block a user