RPG-Maker Quartier

Hier dreht sich alles um die RPG-Maker-Reihe von ASCII/Enterbrain. Der RPG-Maker ist ein Tool, mit dem du dir dein eigenes kleines Rollenspiel erstellen kannst. Du findest hier alles, was du dazu brauchst. Aber natürlich umfasst die Community noch mehr!
Aktuelle Zeit: Di Mär 03, 2020 2:23

Alle Zeiten sind UTC + 1 Stunde



Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
Offline
Wurstbrot
Wurstbrot
Benutzeravatar
Beiträge: 92
Alter: 28
 Betreff des Beitrags: Rudel-Funktion [Gelöst]
BeitragVerfasst: Sa Jan 26, 2013 18:58 
Hi alle zusammen!


Ich bastle an einem AKS-Spiel im Rm2k3 und ich hab folgendes Problem:

Meine Gegner im Spiel werden zufällig durch verschiedene Parameter bestimmt. Dabei gibt es auch "Rudel-Monster", was bedeutet, dass sie in der Nähe gespawnt werden müssen (In diesem Fall werden sie direkt an der selben Stelle gespawnt wo das erste Rudelmonster gespawnt wurde). An sich funktioniert alles einwandfrei, nur wollen die Monster sich danach nicht mehr bewegen bzw. kommen aus dem "Rudel-Platz" nicht mehr heraus. Alles wird dynamisch bestimmt.
Im Prototyp hat alles gut funktioniert und die Monster sind einfach auseinandergegangen, sodass sie frei beweglich waren. Jedoch hatten zu diesem Zeitpunkt alle Viecher das Bewegungspattern "Move randomly". Seitdem ich jedem Monster ein eigenes Bewegungspattern gegeben hab (Welches ebenfalls dynamisch bestimmt wird) funktioniert das leider nicht mehr und alle Rudelmonster bleiben in einem Fleck stecken (Spawnpunkt).

Ich hab auch schon probiert, dass direkt nach dem Spawn das Monster sich um ein Feld bewegt (Phase ON, Move, Phase OFF), was an sich schon Schwierigkeiten bringen könnte, falls das Monster sich neben einer Wand befindet. Jedoch funktioniert danach meistens auch nicht mal das gegebene Bewegungsmuster und das Monster bleibt einfach still stehen. Auch hab ich schon probiert den Spawnpunkt neben dem Monster zu bestimmen (durch Abfragen auf die TerrainID). Nichts geht. :(


Hat jemand einen guten Lösungsvorschlag?

EDIT:
Ich hab herausgefunden dass die Monster sich deswegen nicht vom Fleck bewegen weil ihnen noch keine Werte gegeben wurden. Dabei ist jedes Monster ein paralleler Prozess, welches abgefragt wird ob der Modulus Typus = 0 ist. Danach werden die Werte verteilt. Woran kann das liegen, dass - obwohl der Fall zutrifft - dennoch keine Werte verteilt werden?


Cheers,
Clave


Zuletzt geändert von Clave am Mo Jan 28, 2013 23:38, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Offline
Wurstbrot
Wurstbrot
Benutzeravatar
Beiträge: 92
Alter: 28
 Betreff des Beitrags: Re: Rudel-Funktion
BeitragVerfasst: Mo Jan 28, 2013 23:36 
Das Problem ist gelöst.

Für diejenigen, die das interessiert:

Meine Gegner-Events sind Events mit vielen Seiten. Die letzte Seite ist das eigentliche Event, in welcher die Hauptabfrage abläuft, die anderen Seiten sind Codes mit verschiedenen Funktionen (Sehen, Bewegen,...). Dabei wird zuerst durch obligatorische Variablen die ID abgefragt:

ThisX, ThisY;
Store Event-ID -> ThisID (ThisX, ThisY);
ThisID = EnemyType (Eine längere Berechnung, wird unten ein wenig erklärt);
Modulus ThisID;
If ThisID == 0
Call Event [This Event, Page 1];
...


Auf Seite 1 werden die Werte verteilt durch eine "dynamische Variable". Im Hauptarray der Variablen ist ab Variable 101 bis 4001 für Gegner reserviert. Mit jeweils 5 Gegnervariablen heißt das theoretische 780 Gegner in einer Map, was jedoch aufgrund der Performance nicht geht. Wie dem auch sei, ich arbeite viel mit der "Wert der Referenz"-Variablenfunktion, also dass ich in "ThisControl" den Wert 101 gespeichert hab und deswegen die 101. Variable manipuliere - also den Gegner-Typus. Dabei hab ich ein immer gleiches Muster, wie Typus (Was für eine Art Gegner das ist), HP, ATK, ... welches durch Common Events (Befehl "Call Event") eingespeichert und definiert wird.

Nachdem die Werte verteilt wurden muss die Grafik als "Move Event" gegeben werden. Da war mein erstes Problem: Ohne "Proceed With Movement" gäbe es keine Grafik, da sich die parallelen Prozesse überschneiden (Gegen meine Erwartung). Genau das gleiche Problem war bei dem eigentlichen Bewegungsmuster, aber dazu später mehr. Direkt vor der Wert- und Grafikvergabe für das Event hatte ich eine kleine Abfrage eingebaut, ob ein Rudel gerade generiert wird. Wie wird ein Rudel generiert? Auch wenn es ein wenig umständlich ist, scheint mir dies die einfachste und speichersparendste Lösung zu sein: Bei der Wertvergabe wird bei den Rudelmonstern eine Variable auf den Mostertypus gesetzt. Danach wird die Rudelgröße abhängig von der Schwierigkeitsstufe bestimmt. Gleichzeitig wird das "Rudelzentrum", also der im ersten Post erwähnte Spawn-Point der Monster mit den aktuellen "ThisX" und "ThisY" Variablen gleichgesetzt. Wenn nun ein nächstes Monster generiert wird, wird nicht nach Wahrscheinlichkeit und anderen Switches und Variablen bestimmt, sondern sofort auf den MonsterTypus des Rudels gesetzt. Im Event steht nun die Abfrage, ob diese besagte Variable auf 0 steht: Wenn ja, dann wird ein neues Monster nach den alten Regeln generiert. Wenn nicht, dann wird das Event zum Spawn-Point des Rudels verschoben und der Typus angeglichen.

Mein Problem war, dass dies überhaupt nicht der Fall war, wenn alles andere gut funktioniert hat. Die Monster blieben beim ersten erscheinen auf ihren eigenen Punkt. Erst nachdem ich alle Gegnerwerte resettet hab (Und die Gegner sich automatisch neue Werte zugewiesen hatten), wurde dies gemacht. Und selbst dann nicht reibungslos: Manchmal blieben Gegner auf ihrem 0-Typus und wechselten dauernd die Grafik und das Bewegungsmuster, manchmal erschienen Monster in einem Rudel, welche keine Rudelmonster waren. Im Endeffekt waren die Überschneidungen der ganzen Events das Problem. Das hab ich gelöst, indem ich ein "InUse"-Switch abfrage (Im Hauptprogramm des Events):

...
If InUse ON;
{
;
}
Else
{
Switch "InUse" turn ON;
...
[Programm]
}


Nachdem das komplette Programm einmal durchgelaufen ist, wird das Switch wieder ausgemacht. So gibt es auch keine Überschneidungen. Der einzige Nachteil an der Sache ist, dass die Gegner nicht mehr sofort generiert werden sondern 1 Gegner in ca. 0,1Sekunden. Doch damit kann man leben wenn man in Levels genug Puffer einbaut :)


Ich hoffe dass ich durch diesen Text jemanden weiterhelfen kann, der vielleicht ein ähnliches Problem hat, oder jemanden neue Denkanstöße geben kann.
Danke fürs Durchlesen!

Cheers,
Clave


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de