PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rundenbasierendes KS



DusK
10.03.2006, 09:19
Hi, also ich hätt mal ne Frage. Ich arbeite im Moment mit Serges KS, dass auch wunderbar funktioniert. Ich wollt jetzt aber gern daraus ein rundenbasierendes bauen anstatt ein ATB. Ich mein das so: am Anfang jeder Runde werden die Kommandos für die Helden eingegeben und der schnellste fängt an. Müsst eigentlich jeder kennen. Ich nenn mal als Beispiel GoldenSun1u2, Dragon Quest 8, und das standart Ks des Makers. Das Problem ist halt ich bekomm die Geschwindigkeitsvergleiche nicht hin, also um festzustellen wer der schnellste ist um schließlich eine Zugreihenfolge für den Kampf festzulegen. Ich hoffe ihr könnt mir weiterhelfen.

Dhan
10.03.2006, 10:10
Eine einfache Syntax könnte so aussehen (HeldXWar sind Switche):
fork (Held1War = false){fork (Held1Speed > Max){Held1Speed = Max}}
fork (Held2War = false){fork (Held2Speed > Max){Held2Speed = Max}}
fork (Held3War = false){fork (Held3Speed > Max){Held3Speed = Max}}
usw auch für Monster und dann lässt du jeden Helden und jedes Monster mit der Speed, die mit Max übereinstimmt, handeln und setzt ihren War-Switch auf true

wenn dir das zu komplex ist, mach im ATB, dass keine Wartezeit mehr ist und sobald ein Held gehandelt hat, "steigt seine ATB-Leiste" nicht mehr bis alle dran waren

DusK
10.03.2006, 11:10
Also die Helden Switches sollen dann angeben ob der Held im KS ist. Hab ich das richtig verstanden? Und was ist der Max Befehl? Ich verwende den deutschen Maker.

Dhan
10.03.2006, 16:25
max is nur ne Variable
An den Anfang noch Max = 0 schreiben

HeldXWar ist ein Switch der angibt, ob der Held diese Runde schon gezogen hat, nicht, ob er in der Party ist
Wenn Max nach der Abfrage immer noch 0 ist, ist die Runde vorbei und alle HeldXWar und MonsterXWar werden wieder false gesetzt

Tyrfing
10.03.2006, 16:51
Das sind doch nur variablennamen. Max = Maximal. Das ist zur Kennzeichnung^^

DusK
11.03.2006, 18:02
Sorry des versteh ich net ganz. Könntest du es mal als MakerCode zeigen?
Muss nicht lang sein. Nur das ichs besser versteh.

Dhan
11.03.2006, 18:25
http://dhan.de/KSBasis.zip <<< Exe fehlt, einfach aus einem anderen Projekt reinkopieren
Dieses Projekt besitzt keine Startposition und alles Wichtige dieses Projekts findest du im Grafiklosen Event oben links im Maker
Es fehlt jegliche Berechnungssyntax und der Code für die Angriffe, das ist so lediglich ein Grundgerüst und absolut kein fertiges KS

Ums dir nochmal zu verdeutlichen, das Script "hakt" jeden Charakter, der in einer Runde gezogen hat, ab und schaut bei allen übrigen, wer von denen den höchsten Speed-Wert hat und alle mit diesem Speed-Wert dürfen dann ziehen und werden selbst abgehakt, wenn alle abgehakt sind, ist die Runde vorbei und alle "Haken" werden entfernt. Wenn alle den gleichen Speed-Wert hätten, kämen sie in der Reihenfolge Held 1 Held 2 Held 3... Monster 1 Monster 2 Monster 3 dran

auf jeden Fall stellt das Script so die Basis eines rundenbasierten KSes da. Du kannst es leicht erweitern, z.B. könntest du zum Rundenende (das ist da, wo der Switch Range Off verwendet wird) einbauen, dass die Speedwerte zufällig festgelegt werden oder dass sie eine Variation bekommen, wer Speed 50 hat, könnte als Variationsspeed z.B. mit +-5 eine Variation von 45-55 haben

DusK
11.03.2006, 18:29
boah, super vielen dank Dhan.
Eine Frage jedoch hätt ich noch. Ich möchte es gerne so machen, dass man am Anafg eines Zuges die Aktionen für ALLE seine Chars festlkegt. Dann werden die Aktionen ausgeführt und dann gehts wieder von vorne los. Wie kann ich denn die Aktionen die ein Chara macht speichern, so dass wenn man eine Kommando eingegeben hat und die anderen auch noch eins bekommen dies nicht verloren geht, denn bei Se´rges werden die Kommandos eingegeben und sofort ausgeführt. ich möcht es so machen dass halt alle erest eingetippt werden müssen. Hofffe das war nicht zu kompliziert ^.^

Tyrfing
12.03.2006, 09:44
Du könntest jedem char eine Variable zuweisen und dann halt mit einer ID speichern. Also angreifen -> In die Vraibale den Wert 1 tun.
Superangriff -> In die Variable den Wert 2 tun.

ich hoffe ich hatte das jetzt richtig verstanden und konnte dir helfen^^"

Dhan
12.03.2006, 10:34
Ich würde einmal ein paar Variablen machen, die die Reihenfolge speichern.
Variable R1 bis R6 in meinem Script, mit mehr Helden und Monster natürlich mehr Variablen.
Jeder Held und jedes Monster erhält eine ID, Held1 z.B. ID1, Held2 ID2, Monster1 ID4 usw
Wenn nun ein Charakter (also Held oder Monster) dran sind, setzt du ihre ID in die niedrigste leere R-Variable, keine Sorge, wird gleich im Code beschrieben.
Außerdem musst du natürlich speichern, wie sie Handeln, dafür machst du nochma für jeden Charakter eine Variable, H1H, H2H bis M3H

Am Anfang der Runde: Variable RR (nochma eine mehr) = Variablennummer der Variable R1

Bei jedem ziehenden Charakters:
H = (ID des Charakters) (H ist lediglich eine weitere Variable)
Variable No. RR = H (Variable No. heißt, die Variable mit dieser Nummer, schau ma unter Set Variable, nennt man Zeiger. Achtung, damit das funktioniert, müssen die Variablen R1, R2, R3 etc direkt aufeinander folgen)
(und hier jetzt ein Code, in dem die Handlungspeicherungsvariable des Charakters, also z.B. H1H, je nach Wahl des Spielers auf einen bestimmten Wert gesetzt wird, z.B. könnte "Angreifen" 1 sein)
RR +1


Und am Rundenende dann ein Script, dass den Charakter von R1 ermittelt, das ausführt, was in seiner Variable steht (wenn R1 die ID von Held 2 hätte, also das, was als Handlung in H2H steht), dann von R2 usw

Is jetz scho eine Spur schwerer, ich hoffe, du verstehst es so, stell ruhig Fragen ^^
Die Funktion eines Zeigers, also Variable No., solltest du dir merken, damit kann man noch viel mehr anstellen

DusK
12.03.2006, 13:46
Okay, ich versuchs mal nachzuvollziehen.
Die variable RR bestimmt welche Variable von welchem Helden welche Aktion gespeichert wird. Das funktioniert dann so ähnlich wie beim Einstieg ins SKS des E-Books. Dort funktionierts glaub ich genau so um die Helden festzulegern die Kämpfen. Hab ichs richtig verstande?
p.s. Wenn jeder Held z.B. 50 Zauber kann wirds später ziemlich unübersictlich^.^

Dhan
12.03.2006, 15:10
RR bestimmt im Prinzip, auf welche RX (mit RX mein ich R1-R6) zugegriffen wird
Die ID des Heldens (oder Monsters), dessen Script zuerst aufgerufen wird (weil er die höchste Speed hat), wird in R1 gespeichert, die ID des zweiten in R2 usw und RR merkt sich einfach, welche RX als nächstes eine ID zugewiesen wird
Die Aktion dagegen wird in einer Variable gespeichert, die grundsätzlich zu einem bestimmten Monster/Helden gehört, so gehört H1H grundsätzlich zum ersten Helden der Party (nicht zum ersten Helden, der in dieser Runde handelt) und enthält die Aktion dieses Heldens in dieser Runde

wenn jetzt R1 die ID 3 hätte, wäre der erste Held, der in dieser Runde handelt, Held 3 und die Aktion, die er macht, wäre in H3H gespeichert

KS-Kurse hab ich mir nie wirklich durchgelesen, kann ich jetz nech vergleichen

DusK
12.03.2006, 15:17
Ah, gut. Dann hab ichs ja richtig verstanden. Muss ich erst mal planen ob ich das realisieren kann. Technisch bin ich nicht gerade der beste. Bis jetzt hab ich das auch noch nicht in einem Spiel gesehen. Eigentlich ist es ja auch nur das normale KS des Makers aber aus der Seitenansicht. So hatte ich mir das vorgestellt. Bin auf die Idee gekommen weil ich letzens Dragon Quest VIII und Rudra no hiou gespielt habe. Wie gesagt bin ich technisch nicht der beste deshalb plane ich Serges KS so umzubauen dass es ohne ATB funktionjier. Serges KS hab ich einfach am besten verstanden.

Dhan
12.03.2006, 17:44
Im Idealfall verstehst du den Grundsatz des Codens sodass du fremden Code überhaupt nicht direkt zu übernehmen brauchst (wobei dein Code ähnlich wird bei gleicher Aufgabenstellung)

Das Wichtigste ist eine klare Struktur, es gibt eine Basisstruktur, die die wichtigsten Prozesse einleitet und koordiniert und andere Strukturen aufruft die dann wiederrum niedrigere Strukturen aufrufen

Pack in eine Struktur nur das rein, was sie wirklich braucht um ihre Aufgabe zu erfüllen, Schnickschnack ist die Aufgabe der niedrigsten Strukturen

Baue das System dynamisch, man sollte jederzeit auch höhere Strukturen umbauen können ohne dass niedrigere Strukturen stark geändert werden müssten und man sollte jederzeit die Struktur erweitern können

Unterscheide grundsätzlich zwischen Strukturen, die den Ablauf der Sache steuern und Strukturen, die speichern, Datenbankstrukturen sozusagen

(falls jetz irgendein Klugscheisser kommt, ich meine nicht Programmiertechnische structures mit Strukturen ^^)

Tyrfing
12.03.2006, 19:02
Also, ich würde dir empfehlen mal umzudenken. Versuche nicht herauszufinden

"Wie mache ich ein KS?"
"Wie mache ich eine Schadensberechnung"

Sondern denk logisch. Z.B. Wenn du dem Helden HP abziehen willst musst du nur überlegen, dass du im prinziep eine Variable um einen bestimmten Wert verringerst.
Also, du musst einfach logisch denken und schon lösen sich die probleme ;D

DusK
13.03.2006, 13:31
Schdensberechung usw. weis ich da ich Serges KS durchgearbeitet hab. Ich wollte es wie schon gesagt in ein komplett rundenbasierendes KS umbauen.