Folge mir, mein Freund!
Übersicht

![]() |
MegamagBetreff: Folge mir, mein Freund! |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, ich sitze gerade an meinem Design Document und bin an einem Feature angekommen, wo ich mir über die Umsetzung Gedanken machen muss, oder ob ich es möglicherweise ganz rausnehme. Also, stellen wir uns folgendes Szenario vor:
3D Welt mit Treppen, Fallen, Monstern, Wänden, Räumen und Ebenen. Oder um ein klareres Beispiel zu nehmen, wir haben einen kompletten Dungeon in 3D mit Monstern und co. Die Hauptifgur des Spiels wird aus der 3rd Person Perspective gespielt, Kamera dreht sich um Spieler (beispiel GTA). Der Spieler kann nun attackieren, springen, sliden und was ein Charakter halt so alles kann. So. Jetzt kommt der Punkt. Die Hauptfigur hat einen Freund. Und da ist das Problem: Ich habe mir jetzt mal Gedanken über diesen Freund gemacht und wie ich ihn sinnvoll in das Spiel integrieren könnte. Da man Gemeinschaftsattacken ausführen aknn und die Cutscenes mit beiden Charakteren stattfinden, war die naheliegenste Idee, dass der Freund dem Spieler folgt. Das wäre die eleganteste und schönste Lösung, der Freund läuft dem Spieler nach und bleibt in einigem Abstand von ihm stehen, um den Kampf nicht zu behindern. Jetzt die Möglichkeiten der Umsetzung... Ich könnte natürlich eine Hammer-KI schreiben, die jegliche Bewegung des Spielers auswertet und alle vorherliegenden Hindernisse einbezieht und vorausberechnet, wie gesprungen werden muss usw. Das wäre ein ganz schönes Desaster. Ich hatte aber noch eine andere Idee (von der ich allerdings nicht weiß, ob sie so funktioniert, wie ich es gerne hätte). Der Freund speichert alle bewegungen des Spielers in einer Art Liste und macht sie einfach genauso nach. So würde der Freund dem Spieler genau folgen und es gäbe keine Probleme mit Hindernissen. Problem hierbei: Was wäre, wenn es variable Hindernisse (z.B. bewegliche Plattformen) gäbe? Dann würde das ganze nicht mehr hinhauen. Dann hätte ich noch eine relativ laue Umsetzung. Man könnte den Spieler ja ein "(Ancient-)Teleport-Device" finden lassen, mit dem der Freund bei Gemeinschaftsmoves und Cutscenes herteleportiert wird. Wäre gamedesignerisch zwar sehr arm aber leicht umzusetzen. Jetzt kommt ihr ins Spiel. Was sagt ihr zu der ganzen Problematik? Wie würdet ihr das am besten Umsetzten? Oder habt ihr Möglicherweise eine ganz andere gamedesignerische Maßnahme? Ich bin dankbar für jeden Rat. Achja, es geht hier im Moment nur um Theorie und Möglchkeit der Umsetzung, ich braucht hier keine konkreten Codes posten. So. Genug geredet, ihr seid dran. |
||
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde keine hammer KI schreiben.
Mir fällt bei diesem Problem konkret das Spiel "Paper Mario" ein. In dem gibt es auch eine Person die der Spielfigur immer nachläuft. In diesem Spiel wurde es so gelöst, indem die Figur dem Hauptcharakter folgt, und sobald die Figur zu weit vom Spieler entfernt ist, teleportiert sie sich zum Hauptcharakter. Ich finde alles andere wäre nicht in Relation zum Nutzen. |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
Rocys |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube, ich würde jeden Level einfach mit waypoints versehen und infos für den Freund, wie dieser von Waypoint zu waypoint kommt. Dann schaust du halt immer, an welchem Waypoint sich der Spieler aufhält und lässt den Freund da hin laufen. | ||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die karte mit deinem Editor so bearbeiten, dass du den Freund führst: soll heißen, zonen markieren, indenen er springen muss, evtl etwas ausweichen muss, treppensteiganimation ausführen muss... wie in HL eben.muss ja nicht ultra komplex sein. eine koordiantenprüfung und/oder linepick nach vorne und wenn er nah genug ist springt er reicht ja aus. | ||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich weiß zwar nicht genau wie schlau deine Monster werden sollen, aber wenn sie schlau sein sollen brauchen auch diese eine Pfadsuche. Und genau diese könntest du auch für deinen Spielerpartner benutzen.
Darauf aufbauent könntest du deinen Spielepartner zufällige Pfadpunkte in unmittelbarerer nachbarschaft auswählen lassen und diese auf günstige bedingungen checken. zB Schutz usw. |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, das Pathfinding ist ja auch überhaupt kein Problem. Das Problem kommt bei den Hindernissen, die er überwinden soll. Stellen wir uns mal vor, wir haben einen Vorsprung. Der SPieler springt auf diesen Vorsprung. Der Freund müsste folgen. Wie soll das angestellt werden? Der Freund müsste berechnen, von wo er abspringen muss, und wo genau er landen muss - eine Heidenarbeit. Und wenn der Spieler wieder runterpringt, und der Freund folgt ihm, fältt auf die Sprungzone und springt automatisch wieder nach oben. Das könnte höchstens über etliche Zonen und Überprüfungstrigger sowie Zielberechnungen angestellt werden, was zudem auch noch sehr rechenlastig ist. | ||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich gehe mal davon aus, soein Hindernis ist ein eigenes Objekt.
Wenn der Freund jetzt in die Nähe eines Objektes kommt, könnte er genau das machen, was der Spieler zuvor gemacht hat. Also wenn du die Kiste raufkletterst, speicherst du alle relevanten Daten irgendwo ab. Bei einem Sprung über einen Abgrund zum Beispiel die Absprungposition und -richtung. Dann springt der Freund einfach von da und kommt genau dort auf wo auch du als Spieler gelandet bist. So würde ich es auf jedenfall lösen. |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde mit linepick schauen ob vor mir ein hindernis ist und hoch springen. Ganz einfach. Oder ob kurz vor mir ein loch im boden ist, das Tiefer als [x] meter ist und dann auch springen. | ||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wie möchtest du dann kontrollieren, ob du z.B. einen Vorsprung vor dir hast? Also eine Wand, wo oben ein Plateu ist. Wenn ich nach der Linepick Methode ginge, dann würde der Begleiter jedesmal springen, wenn er vor einer Wand steht.
Ich habe nochmal über einen anderen Ansatz nachgedacht. Der Begleiter folgt dem Spieler afuf Ebenen über Pathfinding. Springt der Spieler, wartet der Begleiter, ob der Spieler auf einer anderen Ebene als zuvor gelandet ist. Ist das der Fall, berechnet der Begleiter, wie er springen muss, um genau auf dem Punkt zu landen, wo der Spieler gelandet ist. Ist der Spieler nur einmal so hochgesprungen, würde der NPC also nicht springen, weil der Spieler keine Höhenveränderung bei der Landung gehabt hat. Und sollte der NPC trotzdem mal irgendwo runterfallen oder nicht hinterherkommen, würde er bei zu großer Distance einfach wieder zum Spieler teleportiert werden (ähnlich wie bei Sonic und Tails). Was haltet ihr davon? |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine möglichkeit wäre auch bei jeder Richtungs - änderung einen Waypoint zu erstellen und mit dem letzten Waypoint verbinden. Jetzt muss der Bot nur noch das machen was der Spieler macht und fertig. Blöd ist dabei nur, das wenn der Spieler stehen bleibt oder zurückläuft, der Bot natürlich hinterherläft oder im SPieler Stockt..
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja, prinzipiell kann man ja gucken ob es direkte wege zwischen waypoints gibt die evtl kürzer sind. wenn halt hindernisse oder angründe da sind geht er halt stupide nach | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group