Ich hab mich jetzt auch dazu entschlossen, ein eigenes KS für mein Spiel zu machen, und zwar ein strategisches auf Rundenbasis. Das ist so gedacht, dass man die Chars auch bewegen kann und man die Umgebung taktisch nutzen kann, z.B um Deckung zu suchen oder um von einem erhähten Standpunt zu feuern. Dabei soll jeder Held in jeder Runde eine bestimmte Anzahl Aktionspunkte haben, die er für verschiedene Aktionen nutzen kann, z.B. ein Feld bewegen kostet 1 Punkt.
Da ich damit gerade erst angefangen habe, und schon vor Problemen stehe, hab ich diesen Thread eröffnet, da ich mit Sicherheit in nächster Zeit noch mehr Schwierigkeiten bekomme.
Mein aktuelles Problem: Die Unterscheidung von Nah- und Fernkampf. Nahkampf soll logischerweise nur möglich sein, wenn sich der Hero direkt neben einem Gegner befindet, bloß weiß ich nicht genau, wie ich das amchen soll. Wenn ich über eine variable die Positionen der beiden Events abfrage, kann ich sie leider nicht in der Hinsicht vergleichen, dass sie nur um 1 voneinander abweichen, was ja der Fall wäre, wenn die beiden Events nebeneinander stehen. Wenn das doch geht, sagt mir bitte, wie ,oder gebt mir andere Möglichkeite, wie ich das machen kann! Danke schon mal!
--
By the treachery of men
the field is lost
The night falls and
great is the triumph of evil
(The final Chapter)
Hm das kommt darauf an, mit was du die Positionen der beiden Events abfragst: entweder mit X/Y-Coordinate oder mit Scene-X/Y. Der Unterschied darin liegt, dass die Coordinates nach den Tiles berechnet wird, also auf welchem Tile das Event steht. Scene-X/Y hingegen holt sich die Bildpunkte aus dem Spielfenster heraus (also maximal x: 320 und y: 240).
Ich hoff, du weisst erst mal den Unterschied, ist ein wenig holprig erklärt, ich weiss ^^°
Gut, wie kannst du nun die Entfernung abfragen. Das ist eigentlich sehr einfach.
Du musst dir erst die differenz der jeweiligen X- oder Y-Koordinaten abfragen, also
Ich glaube, so müsste es jedenfalls theoretisch stimmen. Hab mal im Pseudocode geschrieben...
Ich hoff mal, dass das für nen Anstoss hilft ^^°
Nachteil bei dieser Methode: Du müsstest eine Prozedur schreiben, die die Entfernung von deinem "Helden" zu JEDEM Gegnerevent ausrechnet, und das können viele Variablen werden mit der Zeit. Stell dir mal vor, du hast 20 Gegner rumlaufen ^^° Also entweder Gegneranzahl pro Map beschränken, oder warten, bis jemand anderer nen besseren Vorschlag postet ... oder du findest einen anderen Weg oder hast shcon eine Idee, wie du das anstellen willst ^^
Geändert von TheByteRaper (22.12.2003 um 19:25 Uhr)
Hmm, so ganz funktionert das nicht, fürchte ich. ich verstehe auch nicht, warum am Ende was mit <=15 rauskommen muss.... Was ist denn eigentlich <= dabei? < ist smaller, ist <= below? Bis jetzt funktioniert das jedenfalls nicht.
--
By the treachery of men
the field is lost
The night falls and
great is the triumph of evil
(The final Chapter)
Das <= ist "below", ja.
Und 15 deswegen, weil du ja was passieren lassen willst, wenn dein Held ein Tile entfernt ist (also ein solches Quadrat halt ^^). Da ein Tile bekanntlich 16x16 Pixel gross ist, ist das die Bedingung für die Distanz:
Ist die Distanz kleiner oder gleich 15 (eigentlich trifft die Bedingung "gleich" mehr zu, wiel wenns kleiner wär, müsstest du schon auf dem Gegner stehen ^^), dann bist du ein Feld von deinem Gegner entfernt.
Naja, warums nicht funktioniert, kann ich auch gerade nicht sagen, 1:1 muss es nicht funktionieren, war ja nur so ein Gedankengang, sollte der Inspiration gelten. Aber warum genau, kann ich per Ferndiagnose nicht feststellen ^^
Ich benutze dieses System jedenfalls erfolgreich ^^°
du musst die variablen X sowie Y mit dem Wert deines Charakters und des Gegners vergleichen lassen.
Wenn dabei der X Wert des Helden größer ist als der X Wert des Gegner, steht also der Hero rechts vom Gegner.
Dann machst du eine neue Variable die den X Wert des Gegners mit eins verrechnet. ->[ X-Gegner + 1 ]
Jetzt machst du noch eine X Variable die den Wert des Heros minus den Wert des Gegners verrechnte. -> [X-Gegner - X-Hero]
Der Wert von [X-Gegner - X-Hero] sollte 1 Ergeben. Wenn es eine größere oder kleinere Zahl ergibt, steht der Hero entweder links oder rechts vom Gegner entfernt. -> [Fernatacke]
Das ganze musst du dann auch mit Y-Variablen machen.
trifft keine X oder Y Variable zusammen... dann ist der Fernangriff eher Quer ausführbar- also nicht auf der selben "Grundlinie".
Ich hoffe du verstehst was ich meine- ´s kompliziert.
--
«Wir können alles schaffen, wir brauchen nur genug dressierte Affen» - infinite monkey theorem
Machst du das KS in einen Extra-Bildschirm oder direkt von der Map aus? Letzteres ist nämlich eine ganze Ecke schwerer, ich weiss nicht, ob dir bewusst ist, worauf du dich da einlässt...
Sphere
Nein, ich machs in einen Extra-Bildschirm. Und ich bin noch nicht sicher, ob das was wird, will erst nur aml wissen obs überhaupt geht. und bis jetzt klappts ganz gut.
--
By the treachery of men
the field is lost
The night falls and
great is the triumph of evil
(The final Chapter)
Ich möchte, dass zu Beginn jedes Kampfes jeder Held und jeder Gegner einen "Initiative-Wurf" macht, und dass dann der mit dem höchten Wert anfängt, dann ist der mit dem nächsthöheren Wert dran... und so weiter bis zu dem, der den niedrigsten Wert hat. Das Ermitteln der Werte ist kein Problem, die Reihenfolge allerdings schon. wer kann mir helfen?
--
By the treachery of men
the field is lost
The night falls and
great is the triumph of evil
(The final Chapter)
Du machst ein Script, das prüft, welcher Wert höher ist, anschließend setzt es passend eine Variable, das Event, welches die Angriffe koordiniert, hat mehrere Seiten, die sich nach der Variable richten.
btw, zur vorigen Frage, wieso eigentlich die genaue Position? Die Chip-Position genügt doch?
Ähhh... Moment mal, kann es sein, dass dieses Event, wenn ich die vier Heros habe und auch nur einen einzigen Gegner, ungefähr 120 Seiten braucht? Wenn ich mich nicht irre gibts dann nämlich so viele Möglichkeiten für die Reihenfolge... Geht das nicht auch ein bisschen kürzer?
--
By the treachery of men
the field is lost
The night falls and
great is the triumph of evil
(The final Chapter)
Du kannst es folgendermaßen machen: die Reihenfolge ist in Varis gespeichert.
Jede Figur, ob Held oder Monster, hat eine Nummer.
Am Anfang entspricht Reihenfolge der Nummer.
Dann machst du folgendes:
Erst wird der Switch Änderung auf off gesetzt (der Sinn kommt später)
dann werden per Call-Event die Initiativwerte der Figuren auf erstem und zweitem Platz ermittelt, wenn der zweite einen höheren Wert hat, werden die Plätze getauscht und Änderung auf on gesetzt
dasselbe geschieht nun mit allen Plätzen bis du mit vorletztem und letztem Platz gearbeitet hast.
Dann fragt es ab, ob Änderung auf on ist, wenn ja, wird das ganze wieder an den Anfang gesetzt
Dann wird der Switch Reihenfolge auf on gesetzt, wodurch bei diesem Event die zweite Seite aktiviert wird.
diese Seite hat folgendes:
Erst frägt sie ab, ob die Variable des ersten Platzes 0 beträgt, 0 bedeutet keine Figur, wenn ja, ist eine Kampfrunde zuende und die Nächste beginnt (wieder das Ganze von vorne)
Wenn nicht, dann wird die Variable Handelndefigur auf die des ersten Platzes gesetzt
Anschließend bekommt der erste Platz die Figurennummer des zweiten, der zweiten des dritten usw, der letzte Platz bekommt die Nummer 0.
Das Event hat nun für jede Figur eine Seite, die durch die Variable Handelndefigur bestimmt wird und das Script der jeweiligen Figur beinhaltet. Nach dem Script wird Handelndefigur auf 0 gesetzt
Mehr brauchs garnet. Ich hoffe mal, es funktioniert so.
--
class Dog { //(...)
boolean getBuddha() { throw NullPointerException; } }
Spielt Hero-Chan!
Ob deine Idee funktioniert weiß ich nicht, weil ich es noch nicht ausprobiert habe. Mittlerweile hatte ich eine eigene Idee: Am Anfang wird für jeden beteiligten die Initiative-Variable festgelegt. Dann folgt noch eine zusätzliche Variable, die auf einen Wert gesetzt wird,der höher liegt, als die Initiative sein kann. Ein parallel process event regelt dann die reihenfolge: zuerst wird diese variable um 1 verringert, dann werden alle Initiativewert mit ihr verglichen, zum schluss wird überprüft, ob die Variable 0 ist. Dann geht das wieder von vorne los, bis ein Initiativewert der Variable entspricht, wodurch die dazugehörige Person automatisch an der reihe ist. Wenn die Figur seinen zug vollendet hat, geht es weiter, d.h. da kein andeer initiativewert mehr übereinstimmt geht es wieder von vorne los, bis der nächste wert erreicht ist. So kommen alle nacheiander dran. Sobald die Vergleichsvariable 0 erreicht hat, wird sie wieder hochgesetzt und eine neue Runde beginnt.
--
By the treachery of men
the field is lost
The night falls and
great is the triumph of evil
(The final Chapter)
Man könnte es ja durch eine art sichtfeld lösen in dem per forcs abgefragt wird ob dort ein hinderniss ist.Wäre recht aufwendig zu skripten aber eine möglichkeit!
Die Reihenfolge hab ich jetzt, Nah- und Fernkampf funktionieren auch, jetzt hab ich mal gedacht, ich mach mich mal an die KI. Dazu brauchen meine Monster natürlich zuerst ein ausgefeiltes Routefinding. Mit einem oder zwei Hindernissen pro Kampfschauplatz ist das kein Problem, aber was, wenn ich felsen, Gebäude, Bäume etc. haben will, wie in den normalen Karten auch? Die Kampfschauplätze sollen natürlich genau so aussehen, wie die Umgebung, in der man sich befindet. Gibt es einen etwas einfacheren Weg, als bei jedem Schritt zu überprüfen, ob irgendein Hindernis zwischen dem Monster und dem Char, den es angreift, gibt? Vielleicht Wegpunkte, oder sowas?
Wenn das ganze zu kompliziert und langwierig wird, muss ich wohl aufgeben, denn sonst habe ich keine Chance, das Spiel irgendwann mal fertig zu kriegen. Mir graut es jetzt schon vor solchen Dingen wie Inventar und Fähigkeiten und sowas...
--
By the treachery of men
the field is lost
The night falls and
great is the triumph of evil
(The final Chapter)
@Dhan ich wollte nur was zum ersten problem posten ich habe den theadre gelesen und da ich nur auf das erste problem eine antwort wusste habe ich die gepostet da die IMO besser ist als die anderen.
@Problemlso ich weiss jetzt das leider nicht so genau aber man könnte es so machen das beim auswählen oder wenn die Figur ausgewählt wird die felder aufleuchten welche man betreten kann und natürlich die reichweite wie weit man gehen kann,jetzt wählt man mit einem cursor aus wo die Figur sich hinbewegen soll jetzt fragse die X,Y position des cursors löscht diesen und setzt dort per set event place die Figur hin am besten mit einer kleinen animation,das ist zwar nicht ganz sp hüpsch aber ich finde es gut und auch ansprechend.Oder schau dir das mauskript im tastaturpatch an dort ist sowas eingebaut.