NPC's selbständig durch Spielwelt laufen lassen...aber wie?

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
steven
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 64
Registriert: 26.01.2006, 23:32
Wohnort: Schweiz

NPC's selbständig durch Spielwelt laufen lassen...aber wie?

Beitrag von steven »

Hallo KhrisM...äh...ich meine natürlich ein herzliches Hallo an Alle ;O)

Habe nochmals ein schwerwiegendes Problem, hoffe nun auf Lösungsansätze um es verstehen zu können. In meinem Spiel gibt es NPC's die an einen fixen Raum gebunden sind, diese zu verwalten ist eigentlich kein Problem. Entweder sie sind zu bestimmten Zeiten da, machen etwas oder sind eben nicht anwesend. Dann gibt es NPC's die sich durch die Örtlichkeit (mehrere Räume) bewegen sollen, unabhängig von meiner Spielfigur. Nun fangen die Probleme an. Ich begrenze es mal auf 3 Räume und auf einen NPC:


¦ Raum 1 ¦---¦ Raum 2 ¦---¦ Raum 3 ¦


Angenommen meine Spielfigur (EGO) kommt von Raum 2 nach Raum 3. Dort taucht dann NPC auf, wandert durch Raum 3 durch und verschwindet in Raum 2. Soweit alles gut.

1. Wenn EGO aber nun vor NPC wieder in Raum 2 wechselt, dann wird NPC dort nicht erscheinen, obwohl er ja dorthin wollte.

2. Geht EGO in Raum 2 zurück, nachdem NPC dorthin verschwunden ist, ist NPC zwar dann da, aber immer noch in der Position wo ich ihn mit dem ChanceRoom-Befehl hingeschickt habe. Ziemlich unrealistisch, weil EGO vielleicht noch 10 Minuten in Raum 3 bleibt, nachdem NPC weg ist. Der hätte in der Zwischenzeit schon weiter nach Raum 1 verschwinden sollen.

3. Wenn NPC in Raum 3 zu laufen beginnt, EGO dann schnell zurück in Raum 2 geht und dann wieder in Raum 3, läuft NPC dann zwar weiter durch Raum 3 zu seinem Zielort, aber er hat solange mit weiterlaufen gewartet, bis EGO dort wieder erschienen ist.

4. Wenn NPC stehen bleibt und ich mit EGO durchlaufe, macht EGO einen Bogen um NPC. Laufen beide gleichzeitig, kommt es zum Geistereffekt und die gehen einfach durcheinander durch.


Ich hoffe, ich konnte mich einigermassen verständlich ausdrücken. Hatte schon mehrmals nach dem Problem im Forum und im Internet gesucht, aber keinen passenden Beitrag gefunden.

Schonmal vielen Dank für mögliches Interesse und liebe Grüsse

Steven
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: NPC's selbständig durch Spielwelt laufen lassen...aber w

Beitrag von KhrisMUC »

Radiant hat für Heroine's Quest eine komplette NPC-Engine geschrieben, soweit ich weiß; dort laufen die Charaktere einwandfrei durch viele auch quer verbundene Räume, und tauchen nach Raumwechseln immer da auf, wo sie sein sollen. Sehr beeindruckend, und ich möchte gar nicht wissen, wie viele Zeilen Code drin stecken...
Grundsätzlich würde ich so an das Ganze herangehen, dass in globalen Variablen ein Netzwerk von Wegpunkten gespeichert ist, dass sich durch mehrere Räume zieht. Die Charaktere werden nun erstmal "virtuell" auf die Reise geschickt; d.h. die Routine, die NPCs verwaltet, schickt bspw. jemanden von seinem Haus los zu einem Punkt drei Räume weiter. Diese Bewegung findet in Echtzeit statt, auch wenn der Spieler nicht im gleichen Raum ist, d.h. die Position des NPC innerhalb des Wegpunkte-Netzes wird ständig verändert. Wegpunkte befinden sich an allen wichtigen Punkten der Spielwelt, also bei Raumausgängen, vor Türen, etc.
Jeder Pfad zwischen zwei Wegpunkten hat eine Raumnummer; Wegpunkte haben Raumnummern und Raumkoordinaten. Betritt der Spieler einen Raum, wird in "before fadein" jeder NPC im Raum auf der Position auf dem Pfad entsprechende Raumkoordinaten gesetzt, dann Richtung nächstem Wegpunkt geschickt.
Ist der NPC also im Raum, wird seine Bewegung von Character.Walk() übernommen; außerhalb des Raumes dann wieder von der Routine, die seine Position im Wegenetz berechnet.

Problem 4 ist nochmal separat ziemlich aufwendig; grundsätzlich funktioniert es so, dass Objekte und Charaktere, die .Solid sind, ein rechteckiges Loch aus der walkable area schneiden. Beim Pathfinding wird also drumherum gelaufen, ich bezweifle aber, das AGS den Pfad während des Laufens ständig neu berechnet.

Eine gute Lösung gibt es nicht wirklich, außer halt eine eigene Pathfinding-Engine einzubauen. Damit muss auch das Laufen selbst animiert werden, usw.
Use gopher repellent on funny little man
Benutzeravatar
steven
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 64
Registriert: 26.01.2006, 23:32
Wohnort: Schweiz

Re: NPC's selbständig durch Spielwelt laufen lassen...aber w

Beitrag von steven »

Hallo KhrisMUC,

Danke für Dein Interesse. Es wundert mich manchmal, wieso man Dir nicht eine eigene Sparte hier einrichtet. Sowas wie: KhrisMUC beantwortet Fragen...

Heroine's Quest kannte ich bisher nicht, habe aber heute einen Download-Link davon gefunden. Werde ich mir auf jedenfall mal ansehen, sieht ziemlich professionell aus. Ich bastle übrigens gerade an einer ähnlichen Lösung herum wie Du sie mir beschrieben hast, wird wohl noch etwas dauern bis ich es hinkriege. Habe auch noch so sehr viel Arbeit mit meinem Spiel. Wenn ich es geschafft habe werde ich es hier aber mitteilen, damit andere davon profitieren können...

Zum Problem mit dem Überschneiden von der Spielfigur und einem NPC hatte ich mir noch überlegt: Wenn der NPC der Spielfigur zu nahe kommt dessen Y-Position zu verändern.

Ein paar Ideen hab ich auf jedenfall noch...

Nochmals lieben Dank und Grüsse aus der Schweiz

Steven
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

Re: NPC's selbständig durch Spielwelt laufen lassen...aber w

Beitrag von Rocco »

Hi Steven,

Da gibts das Character Control Module -> http://www.adventuregamestudio.co.uk/fo ... ic=28821.0
hat für meine Bedürfnisse immer gut funktioniert.
Benutzeravatar
steven
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 64
Registriert: 26.01.2006, 23:32
Wohnort: Schweiz

Re: NPC's selbständig durch Spielwelt laufen lassen...aber w

Beitrag von steven »

Hallo Rocco,

Vielen Dank für den Typ, werd ich mir auf jedenfall anschauen...werde die nächsten Tagen wohl nicht dazu kommen, doch sieht sehr interessant aus vom Beschreib her.

Liebe Grüsse

Steven
Antworten