Roadmap 0.4
Aus PantheonWiki
Diese Seite soll auch unseren aktuellen Arbeitsstand widerspiegeln. Also beteiligt euch bitte alle daran. Aktualisiert die Seite, wenn ihr mit etwas fertig seid, was die Demo betrifft. Das überhaupt nicht von Ogre geklaute Prinzip sieht vor, dass fertigen Aufträgen ein [done] hintenan gestellt wird, und dass Aufträgen, an denen tatsächlich gearbeitet wird [in progress] hintenan gestellt wird, Aufträge, die noch nicht bearbeitet werden können, weil Voraussetzungen fehlen, werden durch ein [wait] markiert. Bitte signiert das dann entsprechend, damit jeder weiß an wen er sich für Nachfragen zuwenden hat.
| Version | 0.4 |
|---|---|
| Codename | Shruuf |
| Keyfeatures | Einfacher Kampf, Taskmanagement, Persistenz, Inventar |
| Feature Freeze | noch nicht festgelegt |
| Release | noch nicht festgelegt |
Inhaltsverzeichnis |
Beschreibung
Mit der 3. Techdemo nähern wir uns langsam dem Begriff "Rollenspiel". Inhaltlich hat Steele ein neues Abenteuer ausgearbeitet, damit den Grafikern nicht langweilig wird und auch hier nochmal Verbesserungen geschehen können.
Die TD3 wird erst veröffentlicht, wenn diese Features implementiert sind.
- Kampf (Haffax & Benutzer:No22, AI-Schnittstelle in Zusammenarbeit mit Iblis?)
- Taskmanagement [done]
- Persistenz (GameObjects) Timm
- Inventar [done]
Pflichtaufgaben
Kampf
Es findet ein einfacher Rundenkampf nach vereinfachten DSA-Regeln statt. Es gibt 2 Kämpfer, 1 pro Partei. Erlaubte Aktionen sind Bewegung, Nahkampf-Attacke, Parade.
[in progress] haffax Vorüberlegungen siehe Notizen:Kampf
- Kampf-Regeln
- Basiskampfregeln
- Initiative [done]
- Attacke/Parade [done]
- Ausweichen
- Waffenreichweite und Eigenschaften [done]
- Glückliche Attacke/Parade, Patzer
- Kampf gegen Tiere zumindest im Ansatz umsetzen
- Natürliche Waffen [done]
- Tiersonderregeln.
- Basiskampfregeln
- Kampf-AI wird bewusst einfach gehalten
- AI kann einfache Entscheidungen treffen und umsetzen. [done]
- AI kann sinnvolle einfache Entscheidungen treffen und umsetzen. [done]
- AI kann von sich aus den Kampf beginnen.
- Kampf-Visualisieren
- Ausgewählte Kampfaktionen werden angezeigt. [done]
- Log-Window zeigt Kampfereignisse an. [done]
- Eigene und der Gegner-Lebenspunkte werden angezeigt.
- Kampfgeschehen wird dargestellt. [in progress]
- GUI schön gestalten.
- Kampf-Steuerung
- Kampfaktionen können ausgewählt werden. [done]
- Kamerakontrolle [done] Melven
- Kampf ins Spiel integrieren
- Kampf sauber beginnen/beenden.
- Wechsel aus und in Kampf aus den anderen Control States.
- Tod des Helden -> Game Over [done]
Inventar [done]
Der Held hat ein Inventar, welches über ein Dialogfenster kontrolliert werden kann. Die verschiedenen Slots des Helden sind im Fenster sichtbar. Ein Heiltrank, der in der Map liegt, kann eingesteckt werden. Einige Slots können den Heiltrank aufnehmen (Hand) andere nicht (Kopf). Der Heiltrank kann im Inventar benutzt werden. Ein Schwert in der Hand des Helden hat sowohl optische Auswirkungen (man sieht das Schwert in der Hand) als auch regeltechnische (das Schwert kann im Kampf benutzt werden). Ein Rucksack im Besitz des Helden kann (als Container) geöffnet werden. Container haben eine bestimmte Anzahl Kästchen. Gegenstände belegen eine unterschiedliche Anzahl Kästchen.
- Inventarverwaltung in Rules
- Slots für einige Bones des Charmodells
- Gegenstand in einen Slot legen ändert den Zustand des GO auf GOS_HELD und befestigt ihn am passenden Bone [done] Blakharaz
- Gegenstand in einen Slot legen löst evtl. eine Wirkung aus (nur dann wenn der Gegenstand in diesem Slot benutzt werden kann, Trennung von held und ready) (z.B. Rüstungsschutz erhöht sich) [done] melven
- Container
- Gegenstand in einen Container legen ändert den Zustand des GO auf GOS_IN_POSSESSION [done] Blakharaz
- Einschränkung der Inhalte von Slots und Containern sind möglich [done] Blakharaz
- Slots für einige Bones des Charmodells
- Inventardialog
- Design
- Konstruktion
- Bedienung
- Drag&Drop zwischen Slots [done] Blakharaz
- Drag&Drop von Slot nach Containerdialog [done] Blakharaz
- Drag&Drop von Slot zu Boden [done] melven
- Drag&Drop von Boden zu Slot [done] melven
- Nicht erlaubte Operationen (Messer am Kopf-Slot befestigen) können nicht ausgeführt werden [done] melven
- Gegenstände können benutzt werden [done] Blakharaz
- Auswirkungen von Operationen werden angezeigt, bevor sie passieren (z.B. Markieren von nicht möglichen Operationen) [done] melven
- Containerdialog
GameObject-System [done]
- Properties-System
- Properties müssen verschiedene Typen unterstützen
- Typemaps für Ruby (automatische Umwandlung in Property-Objekte) [done] Blakharaz
- alle Eigenschaften von Objekten lassen sich per Property ändern und per Key auslesen
- GameObjects
- GameObject [done] Blakharaz
- Creature [semi-done] SF fehlen, werden für 0.4 aber nicht benötigt Blakharaz
- inkl. Inventar [done] Blakharaz
- Person
- Item [done] Blakharaz
- Container [done] Blakharaz
- Armor [semi-done] Trefferzonen fehlen, werden für 0.4 aber auch nicht benötigt Blakharaz
- Weapon [done] Blakharaz
- Ein Ruby-Modul, das in allen Ruby-GO-Klassen Attribute aus Properties liest und sie in Properties schreiben kann [done] Blakharaz
- Property-Vererbung: Standardwerte können von allgemeineren GOF-Klassen geerbt werden [done] Blakharaz
- Quests [done] Blakharaz
- GameObjects
Maps [done]
Die Eigenschaften der Spielobjekte sind in Datendateien zu finden. Das Verhalten ist weiterhin in (Ruby-)Klassen definiert. Es gibt Dateien mit Grundeinstellungen für häufig benötigte Spielobjekte. In Blender lassen sich Spielobjekte instantiieren und deren Eigenschaften festlegen, sie werden in die dotScene-Datei exportiert. RL liest die Eigenschaften aus der dotScene und erstellt die Objekte automatisch und konfiguriert sie.
- GameObject-Verwaltung [done]
- Zusammenfassen mehrerer Maps in eine Szene
- Definition des Formates für die Szene (*.rlscene) [done] Blakharaz
- SceneLoader [done] Blakharaz
- Definition für das Mapformat (*.rlmap) und Dokumentation [done] Blakharaz
- Alle möglichen Objekte und Einstellungen einzelner Objekte werden aus einer Map-Datei gelesen (genaueres siehe RoadMap:Mapformat) [done]
- Neuer erweiterter Maploader im Scriptsubsystem [done] Blakharaz
- Karten können ein Initialisierungsskript haben [done] Timm
Persistenz
Der Spieler kann den Zustand des Spiels abspeichern und nach Beenden und Neustart wiederherstellen.
- ein Objekt kann alle seine Eigenschaften in einem PropertyRecordPtr zurückgeben [done] Vincent22
- Überlegung einer Implementierung [done] (siehe Notizen - Persistenz) Timm
- Alle speicherbaren Objekte können serialisiert werden. Timm
- Objekte speicherbar machen
- Global
- Speicherzeit [done]
- Engineversion [done]
- ModuleId [done]
- KartenId [in progress]
- TimeSource (GameTime) [done]
- Daten pro Szene
- Globale Daten
- Quest [in progress]
- Journal [in progress]
- GameObjects [in progress]
- ControlState [wait]
- Zonen [in progress]
- GameEventArea
- Jobs [in progress]
- Global
- Objekte speicherbar machen
- Wiederherstellung der Daten beim Szenenwechsel
- Wiederherstellung der Daten beim Laden aus der Datei
- Ablegen des Statuses in den Arbeitsspeicher
- Serialisierung in eine Datei
- Szenenwechsel durch Skript erlauben [in progress]
- User Interface
- Es muss möglich sein, in dem gestarteten Modul ein Save Game zu laden/speichern [in porgress]
- Es muss möglich sein, in dem Hauptmenü ein Spiel zu laden [in progress]
- User Interface
Automatisches Verhalten
Ein NSC kann eigenständig von einem Punkt zum anderen laufen. Er umgeht dabei Hindernisse. Automatische Zeitabläufe sind möglich. Ein NSC kann selbständig kämpfen.
- Wegfindung [in progress] Iblis
- Wegfindung steht auch im Kampf zur Verfügung
- Kollisionsvermeidung [in progress] Iblis
- Entscheidungen im Kampf
- Interface (dem NSC sollten die gleichen Informationen zur Verfügung stehen, die auch der Spieler hat) -> Kampf
- Regelsätze
- Einfache Regeln, nach denen NSCs entscheiden, wie sie sich in verschiedenen Kampfsituationen verhalten
Dialoge mit NSCs
- Kontrollfluss beim Dialog umgestalten (MVC) [done]
- Dokumentieren
- einfache Operatoren, zählen [done]
- <random> [done]
Questbook [done]
Grafikfeatures/Shaderprogrammierung
-
Basismaterialien mit Variablen für Texturbias, ....(wird von Hand gemacht) - Nicht so sehr ein Feature: Eine Dokumentation für die Licht-Parameter: Welche Zahl bedeutet was? Aus welchem Bereich muss sie kommen?
- LiSPSM Schatten mit Selfshadowing für Häuser und "Anit-Anti-Schatten-Shader"
- Spiegelbare Normalmaps (an der Vertikalen) [done]
Taskmanagement [done]
- Tasks [done] Blakharaz
- Pause und Zeitlupe berücksichtigen [done] Blakharaz
Debugging [done]
- Framework für visuelle Debughelfer [done] haffax
- In-Game-Property-Anzeige für GameObjects [done] Vincent22
Skripten
- Praktische Standard-Jobs und vorbereiteten Joblisten mit optionalem "Warten" zwischen den Jobs (Animation a, dann Sound b und gleichzeitig Animation c und Gehen Zu Truhe, nimm Gegenstand, bring Gegenstand zu Character )
- Zwischensequenzen (mit Hilfe von Jobs)
UI
- InputManager auf OIS umstellen, da Ogre ab der nächsten Version (1.4) kein Inputsystem mehr hat [done]
- InputManager aufräumen [done]
- Trennung globaler Input, Controller-Input. [done]
- Screenshots in allen Lebenslagen erlauben. [done]
- Trennung globaler Input, Controller-Input. [done]
- GUI-Definitionen reparieren
- Neue GUI-Definitionen für
- Slider
- Combobox
Optionale Features
Meshimporter (Blender)
Das import-plugin für Ogre/RL-meshes muss verbessert werden. Nur mit einem funktionierenden Meshimporter können in Zukunft Charakterbauteile für das MCK gebaut werden.
- Mesh
- Material/Textur
- Skelett
- Animation
Scripten[done]
- Zonen, die jede beliebige Größe und Ausdehnung annehmen können. [done]
- Wiederholbare Abfrage ob man sich in der Zone NAME befindet [done]
- Musikanbindung an diese Zonen. [done]
- Umschalten der Beleuchtung je nach Zone [done]
- Auslösen von Triggern (in Ruby) durch Betreten oder Verlassen [done]
Inventar
Der Held kann die Rüstung/Kleidung wechseln. Truhen können benutzt werden, deren Inhalt kann mit dem des Heldeninventars ausgetausch werden.
- Angelegte Rüstung ist am Helden sichtbar [Done]
- Für in der Welt befindliche Container gibt es ein Inventarfenster
- Mehrfache .mesh File Definitionen pro Item
- Das gleiche Item ist für beide Geschlechter definiert [Done]melven
- Das gleiche Item hat mehrere Variationen die je nach den angelegten Gegenständen verändert werden
- Items die Flags setzen: (Sets, für z.B. Hosen, die bei langen Stiefeln in den Stiefeln stecken)
- Armschienen
- Stiefel - müssen eine höhere Priorität haben als Beinschienen
- Beinschienen
- Helme
- Rüstung
- Items mit Variationen:
- Kleidung
- Hosen
- Haare
- Rucksack (eventuell)
- Items die Flags setzen: (Sets, für z.B. Hosen, die bei langen Stiefeln in den Stiefeln stecken)
- Kleidung
- Es kann zwischen 2 Grundformen gewählt werden deren Material frei definieren kann
- Kurzärmlig
- Langärmlig
- Es besteht die Möglichkeit zusätzliche ausgefallenere Meshes anzugeben, die bei setzen von Flags (siehe oben) entweder auf ihre eigene Variation (zB bei Armschienen engere Ärmel, bei Rüstungen alles enger außer Ärmel) oder aber (zB bei angelegter Rüstung und Armschienen) auf ihren jeweilige Grundform zurückgeführt wird.
- Es kann zwischen 2 Grundformen gewählt werden deren Material frei definieren kann
Dialoge mit NSCs
- Anbindung an einen Dialog-Test-Tool ermöglichen, dass die RL-Bibliotheken lädt, ohne das grafische Level zu starten.
- Eine einfache Anwendung (z.B. mit wxWidgets), die RL-libs benutzt, um Dialoge testen zu können -> 0.6 Blakharaz
- Internationalisierung [done] Iblis
- Besseres Condition-Handling [done] Blakharaz
- Mehr als zwei Gesprächsparteien (Spieler und zwei NSCs)
- Im Dialog die Kamera manuell woanders hinsetzen (Absolut oder relativ zu anderen Gameobjects). z.B. ausgehend von einem NSC/SC so, dass die Kamera von hinten über der Schulter hängt.
- GUI-Optimierung (bitte mal genauer spezifizieren ;) )
Optionen / Menüs
- Grafikoptionen [in progress]
- Shader an/abschaltbar (Matthias)
- Texturdetails umschaltbar (für Grafikkarten mit weniger Speicher) (siehe Texturebias)
- Soundkonfiguration
- Tastenbezeichnung für die Konfiguration in den externen Dateien vereinheitlichen (nicht Umschalttaste in den Config-Dateien benutzen)
- Invert Mouse optional [done]
- Sprache/Tastaturlayout umschaltbar
- Automatische Vorschläge für Grafikoptionen
Physik
- Updater für TreeCollision (Problem ist evtl. in OgreNewt zu suchen)
- Bessere Materialbehandlung und Controllerbehandlung Momentan wird auch Bot<->Level-Kollision vom MovementController erledigt. Das ist schlecht. Wird inzwischen durch MovingCreature gesteuert. [done] melven
Multimedia
- Sound faden/Crossfaden. [in progress] JoSch
- Freigeben aller Resourcen beim Entladen des Soundtreibers. [done]
- Soundchannels für unterschiedliche "Quellen"
Grafik
- Bestimmte Lichter nur an bestimmte Objekte übergeben
- Wenn man sich innerhalb einer Lichtzone befindet soll an Objekte außerhalb nur das Sonnenlicht übergeben werden (eventuell andere Lichtquellen außerhalb der Zone / Fackel des Chars im Türbereich usw...)
- An Innenräume mit Lightingmap oder Pre-Vertex-Lighting sollen nur bewegliche Lichter wie Fackeln usw Übergeben werden, nicht die Statischen der Zone.
- Kombination von Vertexcolourshadern und Normalmapshadern (in ersterem ist lt. TT-Diskussionsrunde noch Platz)
UI
- Verbesserung von UiSubsystem.showMessageWindow()
- Mehr Knopfvarianten+Benennung & evtl. Callbacks ( OK, JA, NEIN, ...) [done]
- Icon
- Größe wird an Textlänge angepasst
RPG
- Ausdauer
- Laufen/Springen kostet Ausdauer [done]
- Wenn nichts Ausdauerintensives getan wird, regeneriert sie sich. [done]
- Wenn keine Ausdauer mehr da ist, kann nichts Ausdauerintensives getan werden. [done]
- Quests
- Questsystem überarbeiten
- Sind alle Zustände benötigt, lassen sich die meisten Quests (aus anderen CRPGs oder P&P-Abenteuern) im RL-Questsystem ausdrücken? -> Forendiskussion
- Evtl. Listener durch Closures (Codeblöcke als Parameter) ersetzen/ergänzen.
- Questsystem überarbeiten
Characterwechsel [done]
Der aktiv gesteuerte Character kann gewechselt werden, nach dem Wechsel beziehen sich alle neu geöffneten Fenster auf den neuen Character
- Characterwechsel [done]
Aufgaben (Allgemein)
- Performance-Verbesserung
- Weit vom Spieler entfernte GameObjects ausblenden (nicht nur grafisch, auch für die Intelligenz)
- Kompilieren beschleunigen (Precompiled Headers oder Includes durch Forward-Deklarationen ersetzen) [done]
- Textarbeit
- (Halb-)Automatische Code-Dokumentation (C++ und Schnittstelle nach Ruby) [done] Blakharaz
- Dokumentieren (Viele Klassen sind noch überhaupt nicht dokumentiert, von der C++-Ruby-Schnittstelle ganz zu schweigen)
- C++: http://docs.rastullahs-lockenpracht.de/api/annotated.html
- C++->Ruby (Doxygen-Kommentare in den SWIG-Dateien): http://docs.rastullahs-lockenpracht.de/ruby-api/annotated.html
- Die Debug-Konsole könnte hübschere Meldungen geben [done]
