The Vorx

Kommentare anzeigen Worklog abonnieren
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Worklogs The Vorx

12. Das Langweilige zuerst

Mittwoch, 3. März 2010 von ComNik
Guten Abend,

Heute nur ein kurzer Eintrag, da ich morgen eine wichtige Arbeit schreibe. Wie der Titel schon sagt sind die "langweiligen" Dinge für grundlegendes Gameplay fertiggestellt und seperat in Tests implementiert.

Das wären:
Arrow Laden und managen von allen Möglichen Ressourcen
Arrow Laden und managen von Spielständen und Einstellungen
Arrow Verwalten und flexibles wechseln von GameStates
Arrow "Speicherverwaltung"
Arrow Und zu guter Letzt grundlegende Klassen wie TGame, TGameState, etc...

Was soll ich dazu noch groß sagen? Es funktioniert schnell und gut und muss jetzt eben in das Hauptprogramm eingebunden werden. Dann stelle ich alles auf die benutzen Formate um, ein oder zwei Optimierungen kommen noch rein, dann sollte das alles funktionieren. Sehen kann man davon natürlich nur folgende Test Ausgaben:

Code: [AUSKLAPPEN]

Loaded: AK-47 Config File @ data/weapons/ak.weapon
AK-47 -> model: Light
AK-47 -> range: 1000
AK-47 -> speed: 10.0
Complete!


(alle Angaben völlig erfunden)

Ich muss btw hier nochmal erwähnen, dass jeder, der in irgendeiner Weise an einer Daten Verwaltung plant, sich seine Mühe sparen kann und diese genialen Gedanken hier implementieren Wink : Fetze's Content Provider

Naja. Also wie gesagt im Moment arbeite ich an den Daten Definitionen, also wie die Formate aufgebaut sind etc... Alles eher unspannend.

Sobald Ressourcen und Daten automatisch vom Hauptspiel gemanagt werden, mache ich mich an die Player Klasse, damit ich die Steuerung und so schonmal implementieren kann.

Was die Steuerung angeht bin ich immer noch am rumtesten, ich hoffe ich finde in etwa den Mix aus Arcade und "Realismus" der mir vorschwebt. Ich suche im Moment nach einem Modell, das mir bei schweren Waffen eine etwas gemächlichere Drehung des Spielers ermöglicht, und gleichzeitig mit einfachen Maus und Winkel Daten zu füttern ist, also keine kompliziertere Simulation wie bei den Physik Objekten. Ich hatte auch schon ausprobiert nur den Kopf rotieren zu lassen und erst ab ein paar Grad, den Rest des Körpers mitschwenken zu lassen. Das macht aber erstens in einem 2D Spiel keinen wirklichen Sinn und ist unnötig kompliziert. Im Endeffekkt würde ich lieber in Richtung Arcade gehen.

Gut das wars auch eigentlich schon,
wenn jemand Fragen oder Anregungen zu der Implementation von Fetzes Ideen in BlitzMax (also nicht C# wie Maesto persönlich Wink), dann kann er gerne ne PN schicken.

lg
ComNik

11. Fail

Sonntag, 28. Februar 2010 von ComNik
Guten (eher schlechten...) Abend Forum.

Ich sass praktisch seit gestern morgen bis jetzt verzweifelt an der verdammten Implementation des originalen GJKs. Kurz zussammengefasst: Ich bin gescheitert.

Hier ein kurzer Abriss meiner Odyssee:
1.) Lektüre von (exakt) 7 PDFs, 2 PPTs und 4 Internetseiten über das Thema
2.) Prügelei mit Gino van Bergens Code (der Mann hat was gegen sämtliche Code Konventionen -.-)
3.) Frustriertes Schlagen gegen die Wand und Beginn des nunmehr 5. Implementationsversuch.
4.) 4 Stunden konzentriertes tippen, rechnen, lesen und wieder tippen.
5.) Natürlich -> Fehlschlag...

The Vorx steht also vom Zeitplan her unter keinem guten Stern, da Milestone 1 nun schonmal nicht eingehalten werden konnte. Ich brauche jetzt erstmal unbedingt eine Auszeit vom GJK und widme mich
erstmal voll dem Milestone 2 (um den es übrigens viel besser steht, nämlich die Implementation eines Gameplay-Prototypen). Hier muss ich noch ein paar langweilige Sachen wie die diversen Manager (Ressourcen, GameStates, Objekte etc...) zuende schreiben und kann mich dann voll und ganz auf die Player Klasse konzentrieren. Ich habe auch die Tage mal ein paar Steuerungsvarianten ausgetestet. Ich bin mit einer sehr zufrieden die allerdings ein Problem hat, das wohl noch viele Zellen meines armen Gehirns kosten wird. Wenn die Steuerung fertig ist schreib ich hier mehr rein. Ich hab da nämlich ein paar interessante Ideen, die hoffentlich auch in 2D funktionieren.

Wenn ich mit diesen Sachen größtenteils fertig bin, mache ich mich nochmal an eine strukturierte und durchgeplante Implementation des GJK (den ich inzwischen eh auswendig aufsagen kann -.-).

Und nicht dass falsche Gedanken aufkommen, ich bin immernoch 100%ig motiviert und werde garantiert meine Physik Spielerein nicht wegen einem blöden Algo aufgeben. Ich bleibe dran, nur eben erstmal Pause.

Ich ertrinke mittlerweile in DIN-A3 Seiten über die AI und das ganze nimmt immer mehr Form an. Natürlich kommen hier und da mal Sorgen über die Implementierung auf.
Außerdem habe ich die Codestruktur und den Projektaufbau von Quake 3 analysiert (Carmack Ftw!) und einige Sachen gelernt, die mir prompt aus meinem Source File Wirrwarr geholfen haben.

Außerdem will ich nochmal Fetze danken, der mir (ohne es zu wissen Wink) mit seinen Erläuterungen zum Verwalten von Content die letzten Probleme bei meinem DataManager beseitigt hat. Smile

lg
ComNik

10. Großer Fortschritt und große Probleme

Sonntag, 21. Februar 2010 von ComNik
Guten Abend,

Nach langer Zeit hier wieder mal ein bisschen was zu The Vorx. Die letzten Tage habe ich komplett mit Kollissionserkennung, penetrierenden Punkten, Baryzentrischen Koordinaten und noch mit vielem mehr zu diesem Thema zugebracht. Denn: Der GJK, der in meiner Physik Engine zur Kollissionserkennung genutzt wird hat auch ein paar Nachteile. Implementiert habe ich ihn und er funktioniert super. Außerdem ist er unglaubich schnell (keine Divisionen). Leider liefert er in dieser Form nur ein True/False = Kollission/Keine Kollission. Das war natürlich blöd ich musste also gucken wie ich die nötigen Informationen für eine physikalisch korrekte Reaktion rauskriege. Die Daten die mann dafür braucht sind: penetrierender Punkt, Kollissionsnormale, Zeit der Kollission, Kollissionstiefe.

Nach vielen Tagen sturen lesens hatte ich folgendes beschlossen:
Ich nutze diese schnelle boolsche GJK Variante für die AI z.B Line of Fire/View Tests und solche Sachen.

Für die physikalischen Kollissionen implementiere ich zurzeit den MPR (Minkowski Portal Refinement) Algorithmus. Dieser ist dem GJK sehr ähnlich, kann aber die nötigen Daten zurückliefern. Ich stehe unter ziemlichem Druck aber Versuche den bis morgen fertig zu kriegen, da ansonsten der Zeitplan nichtmehr einzuhalten ist.

Nun zu ein paar erfreulichern Neuigkeiten:

Letztens hatte ich ein/zwei motivationslose Tage in denen ich mich mit den Grundstrukturen des Spiels beschäftigt habe. Resultat ist jetzt ein fertiges TGame + TGameState System.

Das ist nicht kompliziert muss aber auch geschrieben werden. Jetzt müssen "lediglich" die Update() und Draw() Funktionen der verschiedenen States fertiggestellt werden und das Spiel läuft.

Ich will endlich die Physik hinter mir lassen, damit ich hier ein paar interessante Sachen vorstellen kann die ich in der letzten Zeit ausgearbeitet haben. Dieser Eintrag heute diente eigentlich nur dazu, zu zeigen das das Spiel noch lebt.

lg und gute Nacht,
ComNik

9. Zeitplan und "Physikalische Superkräfte"

Montag, 1. Februar 2010 von ComNik
Guten Abend allerseits,

Zuersteinmal habe ich heute die Meilensteine für dieses Jahr ausgearbeitet und in einem Zeitplan verewigt.
Sie arbeiten alle auf ein Ziel zu: Ein Alpha Release (generelle Spielmechanik, Effekte, Engine etc...) für den 24.12.2010 also an Heiligabend. Alles danach und gewonnene Zeit geht in die Content Creation.

user posted image

Ja. So die Zeiträume für die Bewältigung der einzelnen Meilensteine sind sehr knapp gewählt, aber es ist zu schaffen.

Kommen wir zum Hauptthema des Eintrages: Physikalische Superkräfte

Meine Idee dahinter:

Wenn mann sich heutzutage mal Zauber/Spezialkräfte anschaut, dann fallen einem zwei Sachen.
1. Sie sehen gut aus und haben meistens coole Effekkte, 2. Sie haben Physikalisch keinerlei Auswirkungen

Stellen wir uns folgende Situation vor: Der Spieler rennt durch eine Eislandschaft und kämpft gegen Monster. Es sind viele aber er hat gottseidank einen tollen neuen Schutzzauber der einen Wall aus Steinen um den Spieler herum aufbaut. Jetzt drängt sich dem interressierten Menschen vor dem Bildschirm eine Frage auf: Wo zur Hölle kamen die Steine her, und vor allem wohin verschwinden sie nach dem Zauber??

Gut, Eislandschaften wird es (abgesehen von kühlen Motorräumen auf dem Mutterschiff...) nicht geben. Aber die Situation aus dem letzten Eintrag ist auch gut. Ich dachte mir das eine telekinetische Kraft, die einen Schutzwall um den Spieler herum bildet, doch viel cooler wäre, wenn die Dichte der Schutzwand davon abhängt wie viel Schrott herumliegt. Somit ist es taktisch sinnvoller erstmal eine Granate zu werfen und dann mit dem so erhaltenen Teilen einen Wall um sich herum Kreisen zu lassen. Für Upgrades ist trotzdem noch Platz. Je mehr Punkte auf die Fähigkeit gesetzt werde, so rotiert der Wall schneller, nimmt mehr Objekte auf und hält somit noch besser Kugeln ab. Währenddessen kann sich der Spieler, heilen oder Munition nachfüllen.

Im Moment sind 8 Fähigkeiten geplant, die aber beständig erweitert werden. Außerdem lassen sich viele variiern. Alle werde ich hier nicht preisgeben aber ein paar durchaus (Namen btw W.i.P...):

Deckung:
Der Ausführende zieht durch telekinetische Kräfte alles was innerhalb seiner Kraft liegt in einen Tornado aus Energiend. Dadurch erzeugt er einen wirbelnden Kreis aus effektiver Deckung. Die Wahrscheinlichkeit im Kugelhagel getroffen zu werden wird dadurch drastisch reduziert. Wenn die Kraft besser ausgebildet wird ist sie am Ende sogar so stark, dass sie die hohe Beschleunigung von Kugeln auch umleiten kann. Somit ist der Schutz perfekt. Natürlich ist der Zauber sehr Anstrengend, aber er bietet notfalls auch Schutz für mehrere Leute.

Kraftwelle
Eigentlich die genaue Umkehr der Deckung. "Saugt" Gegenstände an und schiesst sie dann in einer großen Kraftentladung in alle Richtungen. Wenn die Kraft besser ausgebildet ist, wird die Beschleunigung der Gegenstände bei der Kraftentladung höher. Auf einem sehr hohen Level lässt sich die Fähigkeit mit der "Deckung" kombinieren".

Todeshauch
Dieser Zauber zieht ersteinmal ganz konventionell Lebensenergie von Objekten ab. Das besondere: Wenn mann ein bisschen überlegt, kommt man darauf, dass ja auch Lichtquellen und Waffen über Energie verfügen. Somit lässt sich mit diesem Zauber "überflüssiges" Licht löschen oder eben mal das Waffensystem eines Feindes deaktivieren.

Und Einige mehr...

Spielereien wie Feuerbälle oder magische Runen wird es definitiv nicht geben. Keinerlei Dinge die den Kampf mit Schusswaffen und Telekinese irgendwie stören Wink

Ausserdem habe ich meine grafische "Vision" (ihr wisst ja, kein grafisches Talent zur Umsetzung) nochmal komplett neu überdacht. Bzw wurde ich diesbezüglich erleuchtet. Ich hoffe ich kann das mit Halbleiter oder jemand anderem Umsetzen und irgendwann mal hier zeigen. Aber in Gedanken kommts cool rüber Wink

Hier genau zu erklären was ich mir Vorstelle wäre zu kompliziert deswegen nur meine Inspirationen:
Gears of War (Epic Games), Unreal Tournament III (auch Epic), Starcraft II (Blizzard).

Bitte jetzt nicht in 3D Träume verfallen, es geht nur ums Grundlegende Aussehen...

Und ein weiterer Eintrag zuende,
lg
ComNik

8. [EXKURS]: Die "WarpEngine" [EXKURS]

Donnerstag, 28. Januar 2010 von ComNik
Guten Abend Smile

Aus gegebenem Anlass (siehe weiter unten) unterbrechen wir unser normales Programm für diese Sondermeldung:

Die WarpEngine macht endlich große Fortschritte Smile

Anscheinend findet das niemand so toll wie ich, deswegen erklär ich mal von Anfang an.

Die WarpEngine ist ein Game Framework und seit etwa Mitte letzten Jahres in Entwicklung. Es ist eine der treibenden Kräfte von The Vorx.
Die WarpEngine heisst so weil ich im frühpubertären Eifer auf der Suche nach einem "coolen" Name war. Naja er hat sich eben gehalten...

Sie besteht aus folgenden Elementen/Modulen:
Grün = Fertig; Blau = Fast Fertig; Rot = Unfertig

Exclamation WarpRigid :: Die Physik Engine
Exclamation WarpAnimation :: Das Animationssystem. Seit kurzem Frameunabhängig
Exclamation WarpCount :: Zähler, wichtig für das Animationssystem.
Exclamation WarpParticle :: Partikel Engine, braucht noch ein paar wichtige Funktionen
Exclamation WarpLight :: Unterstützt noch keine Schatten.
Exclamation WarpSound :: Leicht verbessertes 3D Sound Modul.
Exclamation WarpGUI :: Siehe Worklog...
Exclamation WarpEffect :: Bietet unterschiedliche Effekte für Texte und Bilder.
Exclamation WarpMaps :: Map Engine

Letztes Jahr ging die Entwicklung nur schleppend voran. Aber in den letzten 2 Wochen habe ich den kompletten Zeitplan wieder aufgeholt. Das freut mich natürlich und das wollte ich hier mal mitteilen, damit man nicht denkt ich sei untätig...

lg und gute Nacht Smile
ComNik

7. Physik - Hoffnungen/Ideen

Montag, 25. Januar 2010 von ComNik
Guten Abend.

Wie man am Titel des Worklogs erkennen kann, kommt es heute zum Themawechsel. Wie beim letzten Thema fange ich heute einfach mit meinen Ideen an, also wie ich angefangen habe zu planen. Die Umsetzung (und die IMMER noch nicht fertige Physik Engine WarpPhysics) wird dann in den folgenden Einträgen besprochen.

Ein weiteres Gedankenspiel:

"Ohrenbetäubender Lärm hallt in den riesigen Kellergewölben des Mutterschiffs wieder. Rebellen und Sicherheitspersonal liefern sich wie sooft ein heftiges Feuergefecht. Hastig suchen die Rebellen hinter Kisten, Rohren, Gerüsten und allem möglichen Weiteren Deckung. Die Sicherheitsleute sind eindeutig im Vorteil. Schwere Geschütze werden in Position gesteuert und feuern Salven aus Vorx³ verstärkten Projektilen, Lasern und Granaten durch die Gegend. Die auch aus Vorx³ bestehenden Wände tragen keinerlei Schaden davon. Die Kiste hinter der sich ein bedauernswerter Rebelle versteckt hält, wird von ein paar großkalibrigen Kugeln nur so auseinandergefetzt. Der Mann wirft noch verzweifelt eine seiner Granaten bevor der Plasma Tank seines Kampfanzugs im Kugelhalgel durchlöchert wird, ihn in einer gewaltigen Explosion zerreißt und herumliegende Gerüstteile nur so durch die Gegend schleudert. Plötzlich weiten sich die Augen eines Sicherheitsmanns, er hat die Granate gesehen die auf ihn und seine Kollegen zufliegt. "Deckung!", brüllt er und versucht in Richtung der nächsten Deckung zu springen. Für seine Kollegen kommt jede Warnung zu spät sie versuchen zu Rennen, werden von den Kugeln der Rebellen getroffen, nach hinten geworfen. - und von der Explosion getötet. Trotzdem sieht es nicht gut aus für die verbleibenden Rebellen. In diesem Moment trifft die Verstärkung ein. Der Spieler stürmt auf die Polizisten zu, eine gewaltige Telekinetische Kraft entfesselnd (Wie er die kriegt besprechen wir noch). Sämtliche herumliegenden Trümmerteile erheben sich und wirbeln wie ein riesiges Schutzschild um den Spieler herum. Die Kugeln der Polizisten prallen daran ab. Mit einer gewaltigen Energieentladung schleudert er die angezogenen Teile von sich und trifft die schweren Geschütze, die explodieren und töten die restlichen Sicherheitsleute.
- Ein Sieg für die Rebellen!"

So. Die treibende Kraft hinter all diesen coolen Szenen ist eindeutig die Physik. Und die kommt in meiner Prioritäten Liste gleich hinter der KI. Ich liste mal auf was ich haben will:

Arrow Physikalisch korrekte Kollissionen, Bewegungen und Drehungen
Arrow Physikalisch korrekte "Superkräfte"
Arrow Geschosse, die einen Gegner auch wirklich treffen müssen...
Arrow Zerstörbare Umgebung
Arrow Realistische Wirkung auf umliegende Objekte durch Explosionen
Arrow Alle Objekte sollen "greifbar" sein.
Arrow Auch die "Kamera" soll ein Physik Objekt sein (somit wackelt der Bildschirm bei einer Explosion Smile)

Das dürfte es sein. Das realisieren soll meine Physik Engine "WarpPhysics". Die arbeitet mit Rigid Bodies und wird (wenn sie denn endlich mal fertig ist) hier besprochen.

Als erstes mal überlegte ich mir eine Objek Hierarchie die wie folgt aussieht:
user posted image

Okay was sieht mann da?

TBody: TBody ist die Grundklasse aller Physikalischen Objekte. Sie stellt grundlegende physikalische Werte und Funktionen zusammen.

Danach gibt es drei Untergruppen:

TLifeform: Lifeforms sind eigentlich nur Physikalische Objekte die einen eigenen "Antrieb" haben.
TItem: Alle Objekte die einen Effekt haben und aufnehmbar sind.
TDestructable: Objekte die wenn ihre Energie 0 ist kapputt gehen. Sie sind zudem nur schiebbar (mit genügend Kraft) und können nicht ins Inventar aufgenommen werden.

Und wieder mehrere Untergruppen:

TNpc, TPlayer, TVehicle: Eigentlich klar...
TWeapon, TSpell: Waffen und Zauber. Haben wie die sonstigen Items einen Effekt. Können eben ausgerüstet werden.
TDestructable: Objekte wie Kisten, Gerüstteile, Tische, Stühle, Rohre - alles was kapputtgehen soll Twisted Evil

Tja. Da es hier wieder zu lang wird noch eine kurze Auflistung der Themen die die Physik abdecken:

Arrow "Physikalische Spezialkräfte"
Arrow Die Physik Engine
Arrow Demo

Wünscht mir ein bisschen Glück, dass ich die Engine endlich fertig kriege. Dann gehts hier auch mal richtig weiter.

lg und gute Nacht
ComNik


6. KI Fortschritt und mehr

Samstag, 23. Januar 2010 von ComNik
Hallo *uff*

Nach längerer Zeit. Der einzige Grund dafür ist das ich nicht ohne ein Bild oder irgendwas hier auftauchen wollte. Ich hätte tausende Einträge über Physik und alles andere schreiben können, aber damit hätte ich mein so oft angekündigtes "Thema -> Screen/Vid/Demo" Schema durchbrochen.

Heute geht es vorerst ein letztes mal um die KI.
Als erstes einmal ein Screen:

user posted image

Tjaja ich zeige nur ein statisches Bild weil die Demo noch viel zu unfertig ist. Das liegt nicht an meiner Faulheit sondern an dem wachsenden Umfang. Ursprünglich hatte ich für die Demo geplant: Bewegungssystem und Beziehungen.

Hinter diesem kleinen mit schlechten Grafiken versehenen Bild steckt einiges mehr:

Arrow TMotionController - Bewegungsystem
Arrow Sensorsystem zum Erkennen von Npcs/Objekten, Bewegungen, Sounds und Events
Arrow TMsg Event System
Arrow Behavior Scripts
Arrow Steering Behaviors
Arrow Ein paar Behaviors
Arrow Relationships (der Grund warum paar grüne Bällchen fliehen und andere nicht Wink )
Arrow TInfo Objects

... und meine Map Engine WarpMaps Wink

Es fehlt noch ein ausführliches Debugging und das TSlot Action System um das ganze zu releasen. Dazu habe ich im Moment mein Praktikum und daher wenig Zeit...

Zurück zur Entwicklung:

Wir errinnern uns an unser Ober Thema "Simulation einer lebendigen Welt".
Einiges hat sich zu diesem Punkt getan. Wie oben schon angedeutet nutzen Npcs nun zum sammeln von Informationen Sensoren. Es gibt mehrere Arten von Sensoren

Arrow Schaden
Arrow "Augen"
Arrow "Ohren"

Schaden liefert einfach die Größe des Erhaltenen Schadens zurück (das wird noch ausführlich beim Thema "Realistische Aktionen" besprochen).

Die "Augen" suchen nach befreundeten oder andersweitig bekannten Npcs. Wenn sie einen Entdecken setzen sie dem Npc dem die Augen gehören einfach eine Message in seinen Event Channel.
Das klappt im Test Programm schon alles super. Ich hab spasseshalber mal einem Npc eine Möglichkeit zum casten eines "Fire in the Hole!" Events verpasst. Er warf fröhlich damit um sich und komischerweise wollte sich ihm kein Anderer nähern Wink. Mit anderen Worten: Es funktioniert schonmal im Grunde alles, es muss nur noch mit guten Behavior Scripts gefüllt werden. Immer im Hinterkopf behalten das wir im Moment immer nur über ein Thema reden. Nicht über Kampf oder andere Aktionen. Nur übers "Leben".

Außerdem gibt es eine weitere Neuerung, die ich mir von S.T.A.L.K.E.R abgeschaut habe. Npcs unterscheiden zwischen zwei AI Modes. Einmal AI_ONLINE und einmal AI_OFFLINE.

Ein Npc "geht Offline", wenn er den sichtbaren Bildschirm-Ausschnitt verlässt. Je nach AI_Mode werden weniger performance lastige Algorithmen verwendet.
Btw Performance: [b]Mit 50 Npcs und allen Grundsystem verbraucht die AI im Moment knapp 5% meines Quad Cores. Es sind aber auch noch nicht alle Culling Methoden drinn.

Ich habe inzwischen bestimmt noch 10 Seiten mehr zu den beiden Anderen großen KI Themen vollgeplant, aber darüber schreibe ich erst in ein paar Wochen. Die nächsten Einträge behandeln erstmal die Physik Engine (die immer noch nicht fertig ist -.-) und ein paar weitere kleine Sachen.

Also dann, sorry für den kurzen Eintrag (müde...)
lg
ComNik

5. KI (Part 3): Beziehungen, Bedürfnisse und Charakter

Donnerstag, 14. Januar 2010 von ComNik
Guten Abend,

Zuersteinmal: Alle die das hier lesen bitte ich sich (falls noch nicht gelesen oder schon getan) an der Spendenaktion für Haiti zu beteiligen. Während wir hier fröhlich coden kämpfen da Leute ums überleben Exclamation
Danke Smile


So nach dieser kurzen moralischen Angelgenheit wieder zurück zum eigentlichen Thema des Worklogs.

Punkt 1 der heutigen Tagesordnung ist nochmal das TInfo Objekt. Je länger ich dran rumplane desto praktischer erscheint es mir. Es wird nun eins der wichtigsten Types, da fast jede Art von Objektübergabe (Events, Gespräche, Items übergeben alles Mögliche...) darüber erfolgt. Das hat folgende Gründe:

Arrow Dadurch das das TInfo Objekt nur die nötigen Informationen enthält, muss nicht bei jedem kleinen Event der ganze Datenbalast (Beschleunigung, Geschwindigkeit, Bedürfnisse, weiss der Teufel was) mitgegeben werden

Arrow Ein Npc kann eine begrenzte Anzahl TInfos speichern (also sich nur eine bestimmte Anzahl Objekte "merken"). Wenn er den Npc nochmal sieht, sucht er einfach die "Errinnerung" raus und aktualisiert sie. Das ganze ist viel speicherschonender und performanter als Riesen Arrays.

Verwendungszwecke:

Arrow Beziehungen merken, um richtig auf andere Npcs reagieren zu können. Die Charaktere die er nicht gespeichert hat (wenn er eine besonders schlechte oder gute Beziehung zu einem Charakter aufbaut speichert er ihn übrigens über andere Charaktere hinweg) kriegen eine "Standard - Beziehungs - Formel" ab. Mehr zu Beziehungen weiter unten

Arrow " Zeuge spielen ". Sicherheitsleute werden auf der Suche nach dem Spieler oder nach anderen Npcs (bööööse Npcs) Drohnen schicken und über "Funk" (privater Message Channel, mehr dazu auch bald...) kommunizieren um das Ziel zu verhaften (oder zu erschiessen...). Allerdings bringt der beste Polizist nichts wenn er planlos durch die Gegend rennt. Und es ist einfach unfair wenn sie (wie in Oblivion) durch magische Zufälle die weit entfernte Position des Spielers erraten und direkt dahinstürmen.
Daher werden Polizisten bei der Verfolgung nach dem Ziel fragen. Wenn ein Npc etwas "weiß" schickt er das TInfo Objekt einfach rüber. Der Polizist updated und verfällt wieder in Beamtensprint...

Arrow Positionen merken. Jahaa der Npc merkt sich schliesslich nicht nur Leute sondern auch (wichtige) Gegenstände. Sollte er also seinen geliebten... ...Besen brauchen, weiss er direkt wo er ist. Und wenn er ihn nicht findet? Na wer erräts? Genau er rennt rum und fragt nach (ist bei nem Besen aber eher unwahrscheinlich: "Hallo haben sie meinen Besen gesehen?"...). Durch das dynamische Questsystem (von dem ich auch noch ausführlich Berichte) kann der Spieler jetzt per Zufall den armen Npc treffen dem sein Besen abhanden gekommen ist. Der überträgt ihm im Gespräch die TTask Suche Besen. Der Spieler findet einen Besen gibt ihn dem Npc und bekommt eine kleine Belohnung und eine verbesserte Beziehung zu dem Npc.

Und noch ein paar weitere Verwendungen die hier aber zu klein sind um sie zu erwähnen.
Ok damit hätten wir das TInfo Objekt zu genüge behandelt.

Punkt 2 der Tagesordnung: Beziehungen

Es gibt verschiedene Arten von Gemüt States gegenüber einem anderen Npc (bzw dessen TInfo Object):

    ST_TERRIFIED - Der NPC nimmt sofort reißaus wenn er ein Objekt sieht zu dem er dieses Flag hier hat
    ST_FEAR - Der NPC hält einen großen Sicherheitsabstand (zum Beispiel Mitglieder der Vorx Crew)
    ST_HATE - Der NPC ist wirklich wütend und sucht nach dem Objekt und versucht ihm zu schaden
    ST_ANNOYED - Der NPC ist wütend und antwortet nicht auf Gesprächsversuche und macht einen großen Bogen um den Betreffenden
    ST_NEUTRAL - Der NPC ist einfach neutral
    ST_LIKE - Der NPC freut sich den Anderen zu sehen und redet von selbst mit ihm
    ST_ADMIRE - Der NPC bewundert den Anderen. Er steht im auch in Quests bei.
    ST_FANCY - Der NPC vergöttert den Anderen^^. Er folgt ihm in jede noch so gefährliche Situation.


So. Bestimmte Charaktere können einen Beziehungs Bonus haben. Sie sind dann Standardmäßig furchteinflößend oder so Wink
Diese Beziehungen beeinflussen maßgeblich (zusammen mit den Charaktereigenschaften) das Verhalten auf Events.

Part 3 der Tagesordnung: Charakter


    - Mut
    - Loyalität
    - Gesetzestreue
    - Aggression
    - Hilfsbereitschaft


Eventuell kommen noch welche hinzu aber das sind die wichtigsten. Wenn zum Beispiel die Polizisten bei einem NPC mit hoher Loyalität zur Fraktion der Rebellen nachfragen, dann gibt er eventuell falsche Informationen. Oder wenn er wirklich mutig und sehr loyal ist und vielleicht auch noch eine gute Beziehung zum Spieler oder Verfolgten hat, dann stellt er sich sogar den Polizisten in den Weg. Gesetzestreue beeinflusst zusammen mit Aggression und einer schlechten Beziehung die Wahrscheinlichkeit in einem Feuergefecht zu schiessen. Etc alles ziemlich selbsterklärend.

Wenn ich im zweiten Teil also "Realistische Aktionen" angelangt bin erklär ich das Behavior System das diese Sachen vereint.

Part 4: Bedürfnisse

Die NPCs im Spiel werden kein SIMS 3 Bedürfnisse an den Tag legen, man muss keine Kunst oder Kochpunkte sammeln... Ich liste mal auf:


    - Hunger & Durst
    - Munition - Wird von Trigger Bedingungen beeinflusst
    - Item - Wird von Trigger Bedingungen beeinflusst
    - Schlaf


Auch hier kommt vielleicht noch was dazu, aber so dürfte das erstmal klappen.

Ich hoffe diese Bedürfnisse sind selbsterklärend.

Der Platz wird wiedermal knapp, ich höre hier auf. Der nächste Eintrag kommt erst, wenn ich eine Demo zu:
Bewegung, Beziehung und so weiter fertig hab.

Dann gehts wie gesagt mit der Physik weiter.

Danke wirdermal fürs lesen und gute Nacht,
ComNik

4. KI (Part II): Eine lebendige Welt :?

Mittwoch, 13. Januar 2010 von ComNik
Moin,

ich möchte den heutigen Eintrag mit einer kleinen Überlegung (natürlich zum Thema) einleiten:

"Ein x beliebiger Tag auf dem Mutterschiff, der Spieler befindet sich in einem der eher wohlhabenderen Sektoren. Die Wettersimulation erhellt den Marktbezirk in warmen Pseudo-Sonnenlicht. Der Tag ist schon etwas weiter fortgeschritten, die Händler preisen lautstark ihre Restposten an. Strassenfeger Putzen, Arbeiter tragen schwere Waren und Gerätschaften von A nach B. Die wohlhabendere Bevölkerung des Sektors gönnt sich einen kleinen Bummel durch die "Stadt". Es wird verhandelt, die Leute treffen Bekannte oder gute Freunde. Man kennt sich, grüßt sich und unterhält sich eventuell über die jüngsten Geschehnisse. Zum Beispiel der Polizeieinsatz wenige Augenblicke zuvor, wo Sicherheitsleute keine 100 Meter von hier einen Dieb erschossen. Alltag eben. Der Tote wird im Hintergrund von einem Leichenräumdienst auf einem kleinen, leichten (die Vorzüge des Vorx³...) Hover Karren abgeholt. Nach und nach ergreift der Hunger die Menschen, sie ziehen sich in Kneipen oder in ihre Wohnungen zurück um einen Snack einzunehmen oder mit Freunden was zu trinken. Der Marktplatz leert sich. Unser Held reiht sich hintern ein paar Sicherheitsleute in die Schlange ein, die ein paar Ersatz Magazine und einen DNA Zellen Akku für ihre Waffen kaufen. Der Held unterhält sich kurz mit dem Händler, sie sind gut befreundet. Er ersteht (natürlich zum Sonderpreis) ein paar Experimentelle Patronen. Das Leben geht seinen Gang..."

So, das würden wir doch als lebendige Spielwelt ansehen, oder nicht? Ich tue das und deshalb hab ich meine Umsetzung auch anhand so eines Gedankenspiels entworfen.

Wir Analysieren jetzt mal die Situation Stück für Stück: Was ist das aller elementarste für die Atmosphäre einer lebenden Stadt? Natürlich - Die Bewegung. Kein Spiel kommt ohne sie aus. Und selbst jede noch so intelligente KI würde langweilig wirken, wenn sie ihre Intelligenz im stehen unter beweis stellt.

Das heisst als aller erstes muss die Bewegungsmöglichkeit für einen Npc umgesetzt werden. Alle seine Aktionen und Handlungen (Laufen, Rennen, Fliehen, Schiessen usw...) müssen schnell und einfach von der KI angesteuert werden können. Dazu habe ich mir das sogenannte Trigger System ausgedacht.
Das bietet dem Npc eine "Liste von Möglichkeiten" zwischen denen er wählen kann. Nicht anders ist das bei uns Menschen auch wenn wir vielleicht ein paar tausend Trigger (oder TTrigger Instanzen *g*) mehr haben. Jeder Trigger löst wie der Name schon sagt etwas aus. Um diese Aktionsmöglichkeiten noch zu sortieren werden sie an das Slot System gekoppelt. Jeder Charakter hat verschiedene Slots:

Arrow Kopf
Arrow Torso
Arrow Linke Hand
Arrow Rechte Hand
Arrow Beine

Nun, die wichtigsten Bewegungstrigger kommen natürlich an die Beine. Also erstellen wir für jeden Npc einen Trigger der an den Slot gekoppelt wird. Dieser kann nun zwischen verschiedenen Modi unterscheiden wenn er getriggert wird.

Arrow Zufällig Wandern
Arrow Zu einem bestimmten Punkt laufen
Arrow Von einem bestimmten Punkt weggehen
Arrow Ein Objekt (Npc, Item etc...) verfolgen
Arrow Vor einem Objekt fliehen

Wenn die KI nun also einen Npc bewegen will löst sie den Trigger aus mit folgenden Parametern: Modus, Geschwindigkeit + die Parameter die der Modus erfordert . Der Trigger regelt nun die Beschleunigung des Npc (alles durch Physik Engine enthalten) bestimmt ein Ziel und bewegt nun den Npc unter Berücksichtigung der "Steering Force - Walking Behaviors". Diese Steering Behaviors stellen Funktionen bereit um Bewegungen natürlicher aussehen zu lassen. Somit läuft ein Npc nicht in einer gerade Linie auf einen Punkt zu, sondern in einem leichten Bogen. Alles einstellbar. Außerdem lässt sich damit das Bewegen einer Masse aus vielen Npcs verwalten. Die Npcs versuchen beim laufen immer einen bestimmten Abstand zu anderen zu halten, weichen Hindernissen aus und folgen ihrem Pfad. Das gekoppelt mit einem ordentlichen A* würde schon sehr schöne zufällige Bewegungen ergeben. Es würde ein richtig schönes Getummel entstehen. Das umzusetzen ist keine Kunst, es braucht natürlich etwas Feintuning und Zeit. Da ist ja aber auch noch keine KI im Spiel. Nochmal dran erinnern: Wir versuchen nur, dem Npc die Möglichkeit zum Laufen zu geben. Daran arbeite ich im Moment, in einem kleinen Experiment, dass ich dann hier auch veröffentliche. Wenn das alles geschafft ist, stehen die Npcs zwar exakt so dumm rum wie zuvor, aber sie könnten sich bewegen!... wenn sie wollten.

Ok wieder zurück zu meiner kleinen Geschichte oben. Bewegung ist implementiert, wie wird die jetzt genutzt? Man müsste den Npcs Aufgaben geben. Zu diesem Zwecke habe ich noch mal eingehend die Radiant AI von Oblivion "studiert" (gezockt...) und mich informiert. Die Npcs im allseits bekannten RPG Hit bekommen eine Aufgabe (z.B Putzen.) und ein Gerät das man dafür braucht (z.B Besen). Ein lustiger Bericht besagt das man einem Npc diese Kombination und einem anderen eine Andere gab. Dann tauschte mann aber die Geräte sodass beide ihre Aufgabe nicht erfüllen konnten. Da der eine Aggressiver als der Andere war, erschlug er ihn kurzerhand um an seinen geliebten Besen zu kommen und seine Aufgabe zu erfüllen.

Somit habe ich mir eine weitere Klasse ausgedacht: TTask. Diese Klasse fällt eher unter den Bereich von "Realistische Aktionen simulieren und selbstständig entscheiden" und wird daher erst im nächsten Eintrag behandelt.

Wir überspringen einfach mal die Aufgaben und nehmen an das die Npcs zufällig durch die Gegend wandern. Was hat unser Beispiel noch so? Ah ja: Freunde, Unterhaltungen - allgemein Beziehnungen zwischen den Npcs. Das wird jetzt nochmal umfangreich, alles andere muss nach morgen gesplittet werden da sonst hier wirklich zu viel steht.

Also kurz gesagt: Die Npcs "tauschen" sogenannte [b]TInfo[\b] Objekte aus. Das hat mehrere Vorteile gegenüber Arrays. Erstens Speicher (da nur schonmal gesehene und für merkenswert befundene *hübsche npc frau* Npcs gespeichert werden). Zweitens aus Culling Gründen kein Datenverlust.

Ich stelle beide Modelle einfach mal vor wie ich sie mir gedacht hatte (ich werde wahrscheinlich das mit den TInfo Objekten nutzen) aber Performanz muss getestet werden:

Arrays: Jeder Npc bekommt ein Array in dem die Beziehung zu allen anderen gespeichert ist. Da das bei ca. 500 und mehr Npcs problematisch wird, hab ich mir da ein Container System ausgedacht. Vom Speicherverbrauch wäre das dadurch noch erträglich.

Aber ich habe ein besseres System: (Ein Bild sagt mehr als tausend Worte)
user posted image

Der schwarze NPC sieht den Roten und den Grünen. Nach Zufall (oder evtl. anderen Kriterien) entscheidet er das er nur den Grünen speichert. Er schickt dem Grünen eine Anfrage auf ein TInfo Objekt und erhält dieses auch Prompt.

Das TInfo Objekt enthält folgende Informationen:
Arrow Position
Arrow Surface - mehr dazu wenns um die Objekt Hierarchie geht
Arrow ID
Arrow Name
Arrow Beziehung zu dem Objekt das das TInfo Objekt gesendet hat

Dabei müssen nicht alle dieser Felder direkt ausgefüllt werden. Wenn der Schwarze wie im Bild nur aus der Entfernung eine Anfrage schickt erhält er nur Position, Surface (Kleidung etc..). Das Beziehungsfeld ist erstmal = der Beziehung zu der Fraktion des Grünen. Wenn sie im Gespräch TInfos austauschen dann ist auch Name und ID dabei.

So langsam wird hier sehr voll und ich hab noch sehr viel zu sagen (und sogar eine Demo in Arbeit *g*).
Ich muss leider splitten es geht morgen weiter mit den Sachen die mit den TInfos gemacht werden.
Die KI ist einfach eine große Angelegenheit und braucht viel Erklärung. Es fehlen noch viele Dinge wie Reaktionen auf Beziehungen und natürlich das Message System. Ach es ist wirklich viel. Ich hab mir überlegt das ich sobald das Thema "Simulation einer lebendigen Welt" abgeschlossen ist, erkläre ich ein paar Sachen zur Physik. Dann gehts weiter. Weil das werden sonst so viele Einträge mit dem gleichen Thema, dass es einfach zu langweilig wird.

Bis dann - und sorry für das abrupte Ende hier,
lg
ComNik Smile

3. KI (Part I) : Grundgedanken & Bereiche

Dienstag, 12. Januar 2010 von ComNik
Moin,

Es ist kalt und ich bin leicht demotiviert aber KIs sind nunmal mein Lieblingsthema deswegen kommt heute der Versprochene Eintrag.
Insgesamt wird die KI vielleicht so 4-5 Einträge brauchen, heute der erste der sich mit folgenden Punkten beschäftigt:


Arrow Wozu ausgeklügelte KI in einem Shooter?
Arrow Was erwarte/erhoffe ich mir von der KI?
Arrow Damit zusammenhängend: Die Unterbereiche


Diese 3 Punkte kommen ganz gut in einem Eintrag unter. In den nächsten KI Parts geht es dann einfach um die genaue Realisierung der Unterbereiche.

Wozu ausgeklügelte KI in einem Shooter?

Ganz einfach: Je besser die KI, desto interressanter wird ein Gefecht. Außerdem wird es ja wie schon gesagt einen leichten RPG anteil geben, und meiner Meinung nach ist die KI das wichtigste in einem Rollenspiel um die Welt und die Handlung glaubwürdig zu präsentieren.

Was erwarte ich von der KI?

Über die Frage hab ich mir lange Gedanken gemacht, obwohl es ja eigentlich offensichtlich scheint.
Eine KI sollte möglichst intelligent handeln. Was heisst das? - Naja wenn man mit ihr kämpft soll sie einen fordern (Deckung, Umzingeln, Druck machen, Deckung von mir beseitigen/umgehen, Im Verbund arbeiten).
Damit wäre das Gameplay spezifische ja eigentlich abgeschlossen. Wenn das erreicht wäre, dann hätte man interressante Kämpfe die viel länger Spass machen als simples rumrennen und schiessen (NPCs = Kanonenfutter). Das hatte ich schnell festgelegt, das ist ja auch offensichtlich. Der wesentlich spannendere Teil (vor allem in einem RPG) ist die lebendigkeit der Spielwelt. Wenn man sich das bisschen überlegt erkennt man sofort, dass das viel komplizierter und umfangreicher ist als "simples" ducken, feuern etc...

Nun ja was erwarten wir von einer realistischen Spielwelt? Zuerst einmal: Viele NPCs ( = eventuell hoher Rechenaufwand?). Diese NPCs sollten eine Aufgabe haben, man sollte zuschauen können wie sie sich morgens auf den Weg in ihre Läden machen, oder einfach durch die Gegend spazieren, sich unterhalten oder Handel treiben. Paradebeispiel: Oblivion (gut über die Unterhaltungen da kann man streiten). Dann sollten die NPCs nicht nur eine Stimmung gegenüber dem Helden sondern auch gegenüber den anderen haben (uuh grooooße Arrays...). Sie sollten vor dingen die ihnen Angst machen wegrennen (böse Monster, böse Schiessereien, böse Waffen, böse Menschen). Sie sollen Verbrechen erkennen (ala Held zieht Waffe und erschiesst armen Händler), diese dann zum Beispiel der Polizei melden. Da fiel mir direkt ein wichtiger Punkt ein: Realistisches Message/Event System (dazu bald mehr). Auf keinen Fall wie in Oblivion im Hinterhof jemanden töten und direkt steht eine Wache neben einem die vorher 2 Kilometer entfernt war...
Gut soweit. Langweiliges Stadleben braucht man in RPGs nicht, es soll ja heftig hergehen: Polizisten/Wachen rennen hinter dem Spieler her, Schiessereien. Da wirkt es doch äußerst unrealistisch wenn die Menge stehen bleibt, ihrem Tagwerk nachgeht - nichts macht. Ängstliche fliehen, mutige (dem Spieler gut gesonnene) ziehen ihrerseits eine (eventuell vorhandene) Waffe, schiessen auch. "Regiemstreue" schiessen auf den Helden. Die Wachen selber sollten Verstärkung rufen diese intelligent an Fluchtwege ordern etc.. etc... Das wichtigste um sowas zu Realisieren ist mein Message/Behavior System. Das wird bald näher behandelt.

Dann kam mir ein weiterer Gedanke: Es nervt doch total wenn die Spielwelt nur dann aufgemischt wird, wenn der Spieler sich dazu herablässt einen unschuldigen Bürger zu erschiessen oder einen Quest anzunehmen. Und da fiel mir direkt ein cooles Video von Stalker ein: Da wird gezeigt wie die KI Fraktionen sich "zusammenfinden" um kleine Schiessereien um Artefakte oder wasweisich was abzuhalten - und das völlig von selbst. Man spaziert also durch die Spielwelt, da fliegen einem plötzlich aus heiterem Himmel Kugeln um die Ohren und man erkennt Stalker und Soldaten in eienem heftigen Feuergefecht wenige Meter von einem entfernt. Man schlägt sich zum Beispiel auf die Seite der Stalker bläst den Soldaten die Helme weg, gewinnt, sammelt Beute und steigt im Ansehen der Stalker. Das fand ich toll das wollt ich haben. Zur Realisierung später mehr.

Ok wenn man sich das jetzt alles nochmal in einer Spielszene vorstellt kommt das doch schon ganz ordentlich rüber:

"Ein schöner Tag auf dem Mutterschiff, die Wetter Simulations Maschienen arbeiten auf hochturen, die Schiffsadministration war für Sonne, also erstrahlen die riesigen Markthallen, Gartenanlagen und die Industriebereiche in hellstem, sauberen Licht (das durch eine interressante, hier nicht näher erklärte Technologie aus dem allseits gebrauchten Higgs Boson (Entdeckt: Ca. 1 Millionen Jahre vor Entstehung der Erde auf Grajt IV und auf der Erde nochmal um ca. 5 Milliarden Jahre später) extrahiert wird und die gleichen Eigenschaften wir Sonnenlicht aufweist). Der Spieler spaziert zusammen mit eineigen NPCs aus der Kneipe heraus in der er ein Frühstück zu sich nahm, die anderen NPCs verabschieden sich nach und nach, gehen ihrer Wege. Einem folgt der Spieler bis zu einem kleinen Gemüsestand wo sich der NPC hinter die Theke stellt und beginnt lautstark seine Waren anzupreisen). Der Spieler läuft ungestört dessen weiter, sein Ziel ist ein geheimer Kellergang, indem sich die Rebellen treffen wollen. Auf dem Weg dahin kommt er an einer der zahlreichen Gartenanlagen vorbei (wobei die Samen nicht in Erde sondern in einem mit elektronisch leitendem Gas gefülltem Uranfeld gedeihen - und das prächtig). Im kurzen Gespräch mit einem der Führer einer aufbrechenden Karawane (die Güter zu den Händlern liefert) erfährt er das sie das sie in die gleiche Richtung müssen. Kurzerhand schliesst sich der Spieler an. Nach ein paar Minuten Marsch werden sie in einem etwas weniger bewachten Gebiet von einer Horde flinker Banditen (unterschiedlichsten Lebensformen angehörig, angegriffen). Das Gefecht dauert kurz, die Banditen die noch können fliehen. Die Karawane zieht weiter. Am Ziel angekommen erhält der Spieler einen kleinen Lohn und zieht weiter..."

Etc.. etc.. das hört sich wie ich finde recht atmosphärisch an. Man stelle sich vor wie er nun weiter zieht sich mit den Rebellen trifft, plötzlich werden sie von Wachen entdeckt - Gefecht - Flucht - Verstecken etc.. Die Möglichkeiten sind unbegrenzt.

Ich mache mir keine Illusionen: 100% werde ich das nicht umsetzen können. Aber einige der Sachen die ich mir ausgedacht habe könntem dem ganzen recht nah kommen. Ich hoffe das beste.
Mehr zur Realisierung wird kommen.

Die Bereiche der KI:

Nach einigem Überlegen kam ich auf diese Aufteilung:

1. Lebendige, realistische Spielwelt simulieren.
2. Intelligente, geplante Aktionen entscheiden und alleine oder im Verbund umsetzen.
3. Fordernde Gefechte und spannende Quests liefern.


So sah das für mich schon sehr freundlich aus weil ich eine genaue To Do Liste hatte.
Diese einzelnen Punkte werden nun jeweils einzeln in einem WLog Eintrag behandelt. Ich zähle meine Ideen dazu auf, spreche über die Umsetzung und Realisierbarkeit. Und hoffentlich kann ich dann ein paar Demos liefern die einzelne Ideen umsetzen.

Danke wieder fürs lesen, ich hoffe es hat euch wenigstens ein bisschen interressiert.
lg Smile
ComNik

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter