Ganz alleine bin ich nicht. Fest im Team ist bereits ein Komponist. Mit ihm habe ich bereits Ideen für einen OST besprochen, welche die Atmosphäre des Spiels vertiefen soll. Ein Leveldesigner hat sein Interesse bekundet und ich hoffe, dass wir uns die Tage auf eine Zusammenarbeit einigen können. Für 2D und 3D Assets suche ich momentan nach Leuten (Freiwillige vor
). Ich will das Team möglichst klein halten, allerdings reichen meine Fähigkeiten insbesondere als Artist jeglicher Art nicht ansatzweise aus. Aber ich habe auch so schon allerhand zu tun und kann mich dann noch mehr darauf konzentrieren.
Bei mir braucht "leider" jeder NPC einen Tagesablauf. Aber das ist nicht sonderlich schlimm, da sie recht schnell erstellt sind. Bei Gothic gab es ja auch Tagesabläufe die aus "ich verkaufe Karten" und "ich schlafe" bestehen.
Die Frage ist halt, wie detailiert müssen die Abläufe sein. Aber wie versprochen, erkläre ich mal etwas dazu:
Für mein System habe ich mir überlegt, wie ich so leicht wie möglich ein dynamisches System erstellen kann. Da hatte ich die Idee von gebietsabhängigem Verhalten. Ein NPC ist in einem Gebiet und hat dort X-Möglichkeiten etwas zu tun. Z.B. die Kneipe, in der er Sitzen, Essen, Reden, Verkaufen, Bedienen kann usw. Das kann ich beliebig Ausbauen oder klein halten. Jeder NPC, der in dem Gebiet ist, hat erstmal alle Möglichkeiten offen dies zu tun. Nun bekommt jeder NPC aber für jede Zeit noch einen individuellen Tag, der bestimmt ob er Gast, Kellner oder Wirt ist oder gar eine "Customrolle" (also extra definierte Rolle) einnimmt. Technisch sieht das etwa wie folgt aus:
Ein Gebiet wird durch eine Box definiert. In der Box werden automatisch beim Setzen alle nutzbaren Objekte und zusätzliche Waypoints registriert. Das funktioniert bereits. Im folgenden Bild sieht man einen Teil meiner Prototyp-Spielwiese inklusive eines solchen Gebiets.
Im Bild erkennt man, dass registrierte Objekte ihre Objektbezeichnung visuallisieren. die 2 Leitern auf der linken Seite sind von der Box (erkennbar an den gelben Kanten) nicht erfasst. Jedes Gebiet erhält außerdem einen sogenannten "Behavior Tree", der das Verhalten der NPCs innerhalb genaustens festlegt und er entscheidet auch welche Rolle was darf und was nicht. Also ein Gast hat den selben Baum wie ein Wirt. Da ich noch keine richtige Location habe, kann ich leider nur mit einem unvollständigen Behavior Tree dienen.
Die grünen Felder sind sogenannte "Services" und besorgen mir Daten (in dem Fall über Startzeit des nächsten Tagesgeschehens und Ingamezeit). Das blaue Feld überprüft ob es Zeit für den nächsten Tagespunkt ist und leitet dann an das Skript weiter, welches den nächsten Verhaltensbaum läd. Auf der anderen Seite, wo "Sequence" leer sind muss geprüft werden, ob es sich um Gast, Wirt etc handelt oder ob der Spieler den NPC anspricht oder gar wütend macht (man denke an Waffe ziehen in Gothic). Am Ende des Baums sind jeweils wieder Skripts, die ähnlich wie die Gebietsbox von oben funktionieren. Soll der NPC auf einen Stuhl sitzen und essen, werden alle freien und registrierten Stühle des Gebiets abgefragt und der NPC kann endweder einen festen Stuhl zugewiesen bekommen oder sich einen frei raussuchen. Die Koordinaten werden anhand der Objektkoordinaten berechnet und lösen je nach Objekttyp das eben erwähnte Skript aus. Das Ganze hier hat aber bereits nichts mehr mit den "Tagesabläufen" zu tun. Die Tagesabläufe werden nämlich als Tabelle gespeichert und das sieht in etwa so aus:
"Things to do" ist die Entscheidung, was der NPC am Tag macht. Mehrere Eingaben bedeutet je nach Zufall kann einer von mehreren Eingaben eintreffen. Die Wahrscheinlichkeiten für den Zufall werden mit "ToDo Weight" angegeben (Optionen - 1 ergibt Anzahl an nötigen Wahrscheinlichkeitsangaben). In welchem Zeitraum das geschehen soll, ergeben die nächsten 2 Angaben (0 Uhr = 0 und 24 Uhr = 24.000). "RoleIs" ist das, was ich mit dem Wirt, Gast und Kellner besprochen habe. Die Liste muss so groß wie die Liste für "Things to do" sein. Ein paar weitere Spalten werden sicher noch hinzukommen um weitere Optionen definieren zu können. Im Beispielbild hat der NPC 3 Tagesaufgaben jeden Tag und sowohl Zeit als auch Aufgaben sind hier nur als Prototyp-Test eingefügt.
@Faye: Für unwichtige NPCs ist ein Tagesablauf also ziemlich schnell erstellt, wie du siehst. Allerdings funktioniert das erst dann wirklich, wenn zumindest die Gebietsboxen vorhanden sind (Objekte interessieren nur Behavior Trees und deren Tasks). Es macht aber auch einen großen Unterschied, ob die Männer in der Stadt rumgammeln oder ins Bergwerk rennen müssen. Rumgammeln können sich nämlich eigentlich nur Reiche leisten. Aber du hast natürlich recht, in anderen Spielen kann das ganz anders gehandhabt werden und der Rest macht dann die eigene Vorstellungskraft automatisch.
Ein weiterer spannender Punkt ist, dass ich die Tabelle lediglich am NPC laden muss.
[Bild: L99Juk1.png]
Über dieses Drop-Down Menü kann ich die Standardtabelle (gewöhnlicher Tagesablauf des NPCs) angeben. Ich kann allerdings auch später über ganz andere Skripte die Datatable durch eine andere ersetzen. Ein Bauer arbeitet plötzlich für den Schmied und muss dafür umziehen? Kein Problem. Für kleinere Änderungen versuche ich allerdings eine "Injektion" zu erstellen (bin für Umsetzung noch am Planen).
So, ich hoffe ich habe dazu nichts vergessen. Stellt gerne Fragen wenn etwas unklar ist oder ihr noch etwas wissen wollt. Die Posts sind oft sehr anregend für mich.
Und nun nochmal zu dir Faye:
Danke für das Angebot mit der Story-QA. Die Story steht noch nicht fest. Das hätte ich zwar tun können, aber ich möchte vorher erstmal etwas von der Welt sehen um die Story besser in die Welt integrieren zu können. Außerdem
könnte es sein, dass jemand ein bisschen beim Storywriting mitmachen möchte. In dem Fall kann ich mehr Kreativität für den zweiten Writer bieten als einfach nur Aufgaben abzuarbeiten. Aber ich würde dein Angebot trotzdem gerne annehmen, wenn du nichts dagegen hast? Irgendwann wird die Story hoffentlich stehen.