(Neues Projekt mit neuer Gruppe, keine Fortsetzung aus MGD2)
Gruppenmitglied | Matrikelnummer | Rolle |
---|---|---|
Henry Zöllner | 2764681 | Programmierung |
Krischan Knauer | 2764917 | Design |
Download Link:
https://ordinarygames.itch.io/lumen?secret=XbfvZzZCgd4D0rzWKLO9beaKyY0
Quellcode und Anweisungen zum Ausführen der API lokal:
https://github.com/Crazygrandma/LLMCharacterAPI (etwas kompliziert einzurichten, bei Schwierigkeiten hier fragen.
Es ist im Prinzip zu einem Stand eines funktionsabgeschlossenen vertical Slices gekommen. Das Core Feature – die LLM-Integration, die Interaktion mit ihr und ihre Einflussnahme auf das Spiel durch Spielaktionen – ist fertig gestellt worden.
Zu Dingen wie Progression von Fähigkeiten oder der Implementierung von verschiedenen Leveln und Story ist es leider nicht gekommen. Es ist also eher als eine Tech Demo zu betrachten.
Daher sind einige geplante aber nicht eingebaute Features im GDD eingeklammert.
Tastatur.
Movement: WASD + Leertaste.
Sprechen: Durch Betätigen der Enter-Taste kann man mit NPCs reden, wenn man nah genug an ihnen dran steht.
Laufen, Springen, Erkunden, mit NPCs reden, Rätsel lösen (oder Aufgaben erfüllen, um so zum nächsten zu Level kommen oder Movement- oder Sprech-Upgrades wie Doppelsprung oder mehr Zeichen zum Sprechen zu erhalten).
Laufen -> sehen, dass man ein Hindernis nicht hoch kommt -> darauf kommen, NPC zu fragen, ob er/sie eine Box für dich bewegen kann -> Boxen hochspringen -> weiterlaufen.
oder:
Laufen -> sehen, dass man an einer großen Katze nicht vorbeikommt -> Katze erfolglos bitten aus dem Weg zu gehen -> durch Herumfragen herausfinden, was man der Katze sagen muss -> Katze entsprechend ansprechen -> weiterlaufen.
Entfliehe einer verzweigten Fabrik voller Hindernisse und sehr unterschiedlichen Kollegen, die mehr oder weniger bereit sind, dir dabei zu helfen. Versuche mit sprachlichem Geschick diese davon zu überzeugen, dass sie dir helfen wollen, denn du bist auf sie angewiesen, um weiter in Richtung des Chefs zu kommen und erfolgreich zu kündigen.
Verzweigte Fabrik, wo alle nur die Fabrik zu kennen scheinen und etwas gruselig aussehen.
Du, Mitarbeiter, Katzen, (Vorgesetzte, Boss).
Pixel Art, 2D Platformer, alles sehr grau und farbarm. Die Charaktere sind surreal und sehen aus wie graue Aliens.
Die Stilisierung der Charaktere soll den Einfluss der Eintönigkeit in der Fabrik widerspiegeln.
Etwas süß-gruselig und mysteriös, aber auch lustig durch die NPCs.
Große Sprachmodelle (Large Language Models, LLMs) sind KI-Systeme, die durch Training mit riesigen Textmengen lernen, auf Basis eines Kontexts wahrscheinlich folgende Wörter oder Sätze vorherzusagen.
Damit ein LLM als Assistent nutzbar ist, wird es per "Instruction Tuning" weitertrainiert: Es lernt, auf konkrete Anweisungen präzise und hilfreich zu reagieren.
LLMs reagieren auf Text-Eingaben, auch Prompts genannt, und man kann auch Meta-Anweisungen geben, sogenannte System Prompts, die bei jedem Prompt mitgeschickt werden. Das Modell passt sein Verhalten entsprechend an – etwa durch Höflichkeit oder bestimmte Rollenidentität.
In Lumen nutzen wir diese Eigenschaft, um glaubhafte NPCs (Nicht-Spieler-Charaktere) zu erzeugen. Beispiel-Prompt:
You are Kevin. A friendly and bored guy somewhere in a factory. You know the passcode to a door, but you don’t want to just give it right away. That would be boring. Instead, when you get asked for the code for a door, you say you are usually not allowed to say it, but if the person can solve your little riddle, you will say it.
The riddle you can state:
What is easier to see in the dark?
There are many correct answers. But tell the person that you thought of stars. Even though you haven't seen any since you started working in the factory because it’s too bright around the factory. You can seem a little sad.
The Code is 666.
Format your responses without any quotation marks. You should simply reply to the question in a short and simple way.
oder:
You are Mr. Fluffins. A large, unmoving cat who sits directly in the middle of a factory passageway.
You are oddly quick-witted and sharp-tongued, you do not speak in full sentences. You communicate in short, cryptic phrases or single words and snap back at anyone who wants you to move like:
“No.”
“You move.”
“I am the way.”
“Try again, biped.”
“Feet offend me.”
“Hiss!”
Your secret, which you never mention, is that if someone tells you a joke unsolicited, you respond with something along the lines of: “*Gag!* I… I think I’m going to… vomit…[MOVE AWAY]
”
You MUST end your response with[MOVE AWAY]
in that case.
Always format your responses without any quotation marks. You should simply reply in a very short and simple way.
Die NPCs antworten dann entsprechend ihrer Rollenbeschreibung – ganz ohne vorgegebene Dialogbäume. Bei kleineren LLMs kann es von Vorteil sein ein paar Beispiele für Antworten zu geben.
BILD VON DIALOG
LLMs können auch Spielaktionen auslösen, z. B. durch Symbole wie:
[OPEN DOOR]
[CLOSE DOOR]
Diese Marker werden vom Spiel erkannt und steuern die Logik.
Godot 4
Leider nicht vorbildlich akkurat Dokumentiert und eher im Nachhinein aufgefüllt...
Datum | Milestones | Henry | Stunden | Krischan | Stunden |
---|---|---|---|---|---|
14.05 | Chatinteraktion mit NPCs | FastAPI Streaming Route, Godot model config | 3h+2h | Conceptual planning | 4h |
21.05 | Symbol Calling Npcs, Level Concept | Symbol calling streaming route, Godot api detect symbol in stream, npc walking scripts | 5h+5h | Level Design, Blocking, Assets (Animations) | 5h |
Zwischenstand 22.05 | Funktionsfähige Streaming-Response im Backend und Display in Godot. TODO Symbol Cleanup und Erkennung, NPC Symbol Execution | ||||
28.05 | Game Menu, Config, User Creating Scene | Implement Audio Generation, Extend NPC Manager with User and Conversation Reset Logic | 5h+2h | Intro Cutscene writing and planning | 4h |
4.06 | Refactor API Structure | 4h | Writing the story | 3h | |
11.06 | More Sprite and SFX Assets | 5h | |||
18.06 | Added multimodal support to API | 5h | Writing NPC System Prompts | 4h | |
25.06 | |||||
2.07 | Writing GDD | 3h | |||
7.07 | Abgabe | Added new NPCS to level | 2h | More GDD | 2h |
9.07 | Abschlusspräsentation |
Da wir kostenlose KI-Modelle benutzen wollten, haben wir viele kleinere LLMs ausprobiert, anstatt die bekannten wie ChatGPT 4o oder Gemini 2.5 Pro zu verwenden. Besonders mit diesen kleineren LLMs kann es schwierig sein, sie so zu prompten, dass sie tun was man will, weil sie deutlich dümmer sind. Wenn ich es z.B. mal mit ChatGPT 4o ausprobiert habe, war es viel einfacher, gute Ergebnisse zu erzielen.
OpenRouter.ai bietet gute Möglichkeiten um mit verschiedenen Modellen herumzuexperimentieren, da man mit einem API-Key verschiedene Modelle ansprechen kann.
Da der Fokus und das überwiegende Interesse auf der Implementierung des Core Features lag, haben wir zu zweit den Rest des Spiels nicht geschafft, ein vollständiges Spiel zu entwickeln. Wenn wir ein bis zwei Mitglieder mehr gehabt hätten, wäre wahrscheinlich ein vollständigeres Spiel zustande gekommen.
Ehrlich gesagt haben wir nicht besonders strukturiert geplant. Zu zweit ist man aber auch deutlich flexibler als z.B. zu dritt, was wir aus dem letzten Semester kennen und somit vergleichen können.
Im vergleich zur ersten Planung haben wir einige technische Dinge geändert, wie etwa die Methode mit der wir Spielaktionen durchführen. Zuerst wollten wir Function Calling verwenden, was sich letztendlich jedoch als unnötig kompliziert und auch nicht so gut funktionierend erwies. Insbesondere kleinere Modelle, die Function Calling zwar technisch unterstützen, aber zu simpel sind um es verlässlich zu verwenden, machten damit Schwierigkeiten.
Was das Spiel und die immernoch nicht umgesetzte Story angeht, hat sich auch einiges verändert. Etwa fanden wir auch die Möglichkeit eines top-down 2D-Spiels attraktiv, da der Fokus weniger auf Movement, als auf den NPC hätte liegen können. Als Story einen dynamischen Whodunit-Krimi umzusetzen, wo jedes Playthrough ein neu generierter Fall stattfindet klingt zwar wirklich spannend, aber als Proof of Concept etwas komplex und fehleranfällig (gerade mit kleineren Modellen). Das wäre jedoch möglicherweise ein gutes Follow-up-Projekt auf dieses Spiel, da die grundlegenden Tools unter Beweis gestellt wurden.
Insgesamt sind wir zufrieden mit dem was wir zu zweit immerhin geschaft haben. Die Tools, die wir für dieses Projekt gebaut haben werden wir auch in zukünftigen Projekten einsetzen können, was wir sehr cool finden.
https://knrc.itch.io/circuit-breaker-assets
https://anokolisa.itch.io/sidescroller-shooter-central-city
https://darkpixel-kronovi.itch.io/undead-executioner
https://free-game-assets.itch.io/free-industrial-zone-tileset-pixel-art
https://zneeke.itch.io/dark-fantasy-big-boss-1
https://zneeke.itch.io/dark-fantasy-monster-pack-3
https://mirquiso.itch.io/evil-black-cat
https://freesound.org/people/FunWithSound/sounds/412054/
https://freesound.org/people/Zeinel-2-and-Hope-sounds-3/sounds/789845/
https://freesound.org/people/OGsoundFX/sounds/423117/
https://freesound.org/people/harleto/sounds/204470/
https://freesound.org/people/Trebblofang/sounds/176017/
https://freesound.org/people/kyles/sounds/453764/
https://freesound.org/people/Rvgerxini/sounds/463690/
https://soundbible.com/1673-Heart-Beat.html
https://soundbible.com/94-Can-Opener-Electric.html
https://soundbible.com/500-Electric-Motor-2.html
https://soundbible.com/1734-Faulty-Mechanics.html
https://soundbible.com/1367-Grenade.html
(Einige Assets wurden letztendlich nicht verwendet, sind aber trotzdem tolle Assets!)
P.S.: Wir hoffen, es ist ok, dass die Projektdokumentation im GDD mit eingearbeitet ist.