Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› Spielmechanik —› Bewegungspfade auf dem Geoscape

Autor Mitteilung
verfasst am: 27.07.2008, 11:55
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Es ist vielleicht noch nicht allen aufgefallen, aber im Galaktischen Krieg fliegen die Scouts und ein paar andere UFOs vorgefertigte Flugbahnen ab. Das klappt auch schon ganz gut, aber in der aktuellen Form gibt es ein Verwaltungsproblem...

Und zwar ist es momentan nicht einfach, aus dem Skript mit den Bewegungspfaden zu erkennen welcher Pfad wie abläuft - das ist einfach nur ein Durcheinander von Zahlen.
Außerdem kann man dadurch nur sehr schwer speziellen UFOs bestimmte Pfade zuweisen - und das wird später für Story-Missionen noch nötig werden.

Deshalb werde ich zusammen mit dem Skriptupdate für den GalWar auch diese Funktionen umstellen und jeden Pfad mit einem Namensfilter versehen.
Dieser Namensfilter muss ein hierarchischer Code sein, damit man später einfacher einen Weg aus einer Gruppe von ähnlichen Pfaden zufällig auswählen kann.

Und damit kommen wir zum Grund für diesen Post:
Im Folgenden ist ein erster Entwurf für diesen Code, und ich möchte wissen ob ich irgendeine Variante übersehen habe etc.
----------------------

Wahrscheinlich wird das Format dieses Namensfilters wie folgt aussehen:
AAAA##
Vier Buchstaben gefolgt von einer zweistelligen Nummerierung. Die Bedeutung der späteren Buchstaben ist dabei abhängig von den früher stehenden.

Der erste Buchstabe soll die Art des Kurses angeben.

A - Absolute Koordinaten - Das Flugobject bewegt sich jeweils zu den angegebenen Koordinaten

R - Relative Koordinaten - Die in diesem Pfad angegebenen Koordinaten werden zu einem Startpunkt addiert und das Objekt bewegt sich relativ zu dem festgelegten Startpunkt.

S - Spezielle Kurse - Ist momentan eher ein Platzhalter, das soll später für Story-Bezogene Bewegungspfade stehen, die sich nicht so ohne weiteres zuordnen lassen.

Z - Zielbezogene Kurse - Der Kurs wird ähnlich wie bei R relativ zu einem Zielpunkt gesetzt. Im Gegensatz zu den R-Kursen ist dies aber nicht der Startpunkt, sondern der Zielpunkt des Kurses und das Objekt bleibt am Zielpunkt (z.B. Stadt, Basis) stehen.


Im Falle der Absoluten Pfade soll der zweite Buchstabe eingrenzen, in was für Bereichen diese Koordinaten liegen. Der dritte und vierte Buchstabe würde diesen Bereich dann näher spezifizieren.

C - Continental - Die Kurse bewegen sich jeweils über die gesamte Landmasse eines Kontinents, wobei der dritte und vierte Buchstabe Abkürzungen für den Namen des Kontinents sind.

L - Land - Die Kurse bewegen sich jeweils innerhalb eines Landbereiches innerhalb eines Kontinents, der dritte und vierte Buchstabe definieren das Land. Eventuell könnte man anstelle von zwei Buchstaben auch den Zahlenindex des jeweiligen Landes in der Country_api an die dritte und vierte Stelle setzen - das ist eindeutiger aber schwerer zu lesen.

S - Sea - Die Kurse bewegen sich jeweils in einem Meeresbereich (also meist über Wasser), mit dem Namen des Meeres im dritten und vierten Buchstaben.

W - Worldwide - Der Kurs bewegt sich über die ganze Erde, der dritte gibt dabei Anhaltspunkte über die Art des Kurses, z.B. O - Orbital (sieht dann im Geoscape wie eine Orbitalbahn aus) oder C - Continental (sucht alle Landmassen ab) etc. Dies ist noch nicht detaillierter ausgearbeitet.


Im Falle von R - Relativen Koordinaten würde der zweite Buchstabe für die Form der Flugbahn stehen, z.B.
A - Area - Alle Koordinaten bleiben in einem kleinen Bereich um den Startpunkt
G - Geometric - Der Kurs folgt einer sich wiederholenden geometrischen Form wie Kreis, Spirale, etc
S - Sequence - Eine Positionssequenz wie z.B. mehrere kleine Kreise um einen Suchpunkt und dann ein größerer Flug zum nächsten Suchpunkt etc
W - Worldwide


Weitere Ideen oder Kommentare?
Ihr habt wohl ca. 1 Monat bevor ich die entsprechenden Skripte bearbeiten werde...
verfasst am: 01.08.2008, 21:20
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Keine Kommentare???

Ich selber denke momentan darüber nach den Code auf zwei Buchstaben plus Nummerierung zu kürzen...
verfasst am: 01.08.2008, 21:34
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Ist der Minat denn schon rum ;)
Das ist nun nicht gerade leicht verdauliche Kost, da sollte man schon mal etwas Zeit für frei haben - und vor allem keine 30 Grad im Zimmer ;)
verfasst am: 01.08.2008, 21:44
Registrierdatum: 26.06.2008, 13:42

 Beiträge: 648
Zitat: LennStar
und vor allem keine 30 Grad im Zimmer ;)


Rechner erzeugen nunmal Wärme ;)

Verstehen kann ich die ganze Sache net wirklich, aber ne Kürzung auf 2 Buchstaben hört sich für mich übersichtlicher an...

Story UFO's einfach nur über Land fliegen lassen, der Rest is Glückssache ;)
verfasst am: 01.08.2008, 21:49
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Zitat: Speedy
Story UFO's einfach nur über Land fliegen lassen, der Rest is Glückssache ;)

Eben das soll es nicht sein.
Wenn man z.B. eine Story schreibt das ein UFO einen Zick-Zack-Kurs über Frankreich fliegt und sich dann auf dem Eifelturm aufspießt, dann sollte das betreffende UFO auch wirklich am Ende auf Paris landen und nicht in Kairo...

Und es ist nunmal so das die meisten Spielsatzersteller überfordert sind, wenn sie eine aufwendigere Bewegung eines UFOs skripten sollen...
Zitat: LennStar
Ist der Minat denn schon rum ;)

Nein, ist er nicht - allerdings wollte ich in einem Monat ab Post schon damit anfangen zu skripten, d.h. dann sollte die Diskussion schon fortgeschritten sein.

Hauptgrund für den Post war aber das ich befürchtete, er wäre unter den vielen anderen neuen Posts untergegangen, und ihn wieder auf die Hauptseite holen wollte ;-)
verfasst am: 01.08.2008, 21:52
Registrierdatum: 26.06.2008, 13:42

 Beiträge: 648
Zitat: DirkF
Eben das soll es nicht sein.
Wenn man z.B. eine Story schreibt das ein UFO einen Zick-Zack-Kurs über Frankreich fliegt und sich dann auf dem Eifelturm aufspießt, dann sollte das betreffende UFO auch wirklich am Ende auf Paris landen und nicht in Kairo...


OK, geb mich geschlagen! Bei mir zählt erstmal nur das die Story weiter geht, net das es unbedingt genau stimmt ;)
verfasst am: 31.05.2009, 18:46
Registrierdatum: 17.03.2006, 21:04

 Beiträge: 47
Wie sind die flugbahnen genau definiert?
Bis jetzt habe ich nur eckige Flugbahnen gesehen, deshalb gehe ich davon aus, das die Fluigbahnen mehrere sätze von höhen und breitengräden sind, die das ufo dann eines nach dem anderen abfliegt. (die Koordinaten sind dann also diese ecken).
Wie wärs mit ufos die entlang Vektordefinierte Bahnen verlaufen? Die Ufos würden auf perfekt weiche bahnen fliegen was das spiel glaubwürdiger macht und die verfolgung erschwert.
Dann könnten spielsatzersteller ziemlich schnell ein paar bahnen definieren (was sehr einfach ist), dann bräuchten wir keine vordefinierten bahnen mehr.
Das hierfür natürlich eine neue ufo-engine nötig wird ist klar.
verfasst am: 31.05.2009, 20:21 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Die Flugbahnen sind als Koordinaten auf dem Geoscape definiert, die angeflogen werden sollen. Einige sind eher gleichförmig, andere eher chaotisch.
"Sanftere" Flugbahnen erfordern einfach nur eine größere Kette von Koordinatenpunkten, aber dies habe ich aus verschiedenen Gründen nicht gemacht.
1.) zu wenig Zeit
2.) die momentan verwendete Funktion ist nur ein Platzhalter, der bei zu vielen Pfaden und Punkten irgendwann an seine Grenzen stoßen wird.

Vektorbasierte Bahnen sind momentan nicht möglich, und ich weiß auch nicht ob sie jemals vernünftig implementiert werden können - falls ja, dann auf jeden Fall nicht in nächster Zeit.
verfasst am: 01.06.2009, 00:37 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: Tiberian
Wie wärs mit ufos die entlang Vektordefinierte Bahnen verlaufen? Die Ufos würden auf perfekt weiche bahnen fliegen was das spiel glaubwürdiger macht und die verfolgung erschwert.

Was verstehst du unter Vektorbahnen? Ein Vektor gibt eine Richtung an - wenn ich den Richtungsvektor neu setze, habe ich auch die Ecke. Wenn der Richtungsvektor eine Funktion der Zeit sein soll, dann ist das nichts anderes, als wenn man in jedem Zeitschritt ein neues Ziel setzt. Das ließe sich im Prinzip per Skript machen, allerdings mach das meines erachtens die Eingabe von Flugrouten eher schwerer - von dem Rechenaufwand mal abgesehen (dürfte bei den wenigen UFOs kaum eine Rolle spielen). Man könnte vielleicht überlegen, einfache Figuren zu programmieren (Kreisbahn etc.) - aber das ist wegen der Kugelkoordinaten nicht ganz trivial ^^
verfasst am: 01.06.2009, 01:43 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Hm, ich kenne weder die bisherigen UFO-Skripte noch weiß ich, ob meine Idee überhaupt umsetzbar ist... aber ich schreibs einfach mal hier rein:
Wie wäre es, die einen Array mit x Koordinaten anzulegen, diese z.B. im 6-Stunden-Wechsel rotieren zu lassen [falls mehr als ein Wert im Array] und z.B. jede Stunde einen Counter hochzuzählen (am besten um nen Zufallswert) und den draufzurechnen, und dann das Ganze noch mit einem zufälligen Wert (z.B: +/-5%) verrechnet. Dann natürlich noch abfangen falls der Wert über dem Maximum liegt. Würde mit mehreren Koordinaten eine relativ große Varianz (verglichen mit der Menge der eingegeben Koordinaten) bieten, und wenn man nur eine nimmt (und die Zeitabstände )

Pseudocode (korrekte Formatierung und vor lalem Strukturierung spar ich mir) könnte so aussehen (ich geh einfach mal davon aus, dass die Koordinaten ein float sind - ist natürlich noch einfacher alls es integer ist):
//plusminus, KoordCount, counter, rand1, rand2, rand3, max1 und max2 sind integer
//Koord1 und Koord2 sind Arrays mit nix als integer, müssen gleich viele enthalten
//DestKoord ist float

plusminus = [Zufallszahl 1 oder -1]
Koordcounter = 0
counter = 0

label start


Koord1[KoordCount] = x //der Part der Koordinate vor dem Komma
Koord2[KoordCount] = y //der Part der Koordinate hinter dem Komma
rand1 = zufallszahl x //z.B. 95 bis 105
rand2 = zufallszahl y //s.o.
rand3 = zufallszahl z //kein % sondern für Addition, z.B. +1 bis +5
max1 = z //so groß der die Koordinate vorm Komma sein
max2 = aa //so groß darf die Koordinate nachm Komma sein


Koord1[KoordCount] = Koord1[KoordCount] * (rand1/100) + counter
//ergo -5% bis +5% + counter
Koord2[KoordCount] = Koord2[KoordCount] * (rand2/100) + counter
//s.o.

if (Koord1[KoordCount] größer max1 oder Koord2[KoordCount] größer max2)
{
goto start
}

counter = counter + (rand3*plusminus)
DestKoord = Koord1b[KoordCount],Koord2b[KoordCount]
//sorgt dafür, dass ohne Neustart immer addiert oder immer subtrahiert wird

if counter größer x oder counter kleiner -x
{
plusminus = plusminus*(-1)
}
//optional, lässt den counter innerhalb des Bereichs +/-x hin und her schaukeln
//alternativ kann man auch x zufällig machen, aber das wäre langsam etwas übertrieben

alle [6/12/whatever] Stunden
{
if KoordCount Werte in Koord1 oder KoordCount Werte in Koord2
{
KoordCount=0 //falls einer der Arrays erschöpft ist, wir wieder von vorne angefangen
//Falls nur ein Wert im Array ändert sich garnix
}
if KoordCount kleiner Anzahl der Werte in Koord1 und
KoordCount kleiner Anzahl der Werte in Koord2
{
KoordCount++ 
//geht zum nächsten Wert im Array, falls Koord1 und Koord2 noch weitere Werte parat haben
}
}



Ich hoffe, ich hab nix vergessen... ist schon spät.
Edit: Japp, es ist wirklich spät - zumindest nach meinen Rechtschreibfehlern zu urteilen. Naja die gröbsten sollten jetzt raus sein.
verfasst am: 02.06.2009, 00:35
Registrierdatum: 17.03.2006, 21:04

 Beiträge: 47
Zitat: DirkF
"Sanftere" Flugbahnen erfordern einfach nur eine größere Kette von Koordinatenpunkten

Wenn man es nach momentanem system macht, ja. Deshalb die Idee von den Vektoren.
Zitat: DirkF
die momentan verwendete Funktion ist nur ein Platzhalter, der bei zu vielen Pfaden und Punkten irgendwann an seine Grenzen stoßen wird.

Das ist toll, dann will ich mal meinen Vorschlag präsentieren.
Zitat: Natter
Was verstehst du unter Vektorbahnen? Ein Vektor gibt eine Richtung an - wenn ich den Richtungsvektor neu setze, habe ich auch die Ecke. Wenn der Richtungsvektor eine Funktion der Zeit sein soll, dann ist das nichts anderes, als wenn man in jedem Zeitschritt ein neues Ziel setzt. Das ließe sich im Prinzip per Skript machen, allerdings mach das meines erachtens die Eingabe von Flugrouten eher schwerer - von dem Rechenaufwand mal abgesehen (dürfte bei den wenigen UFOs kaum eine Rolle spielen). Man könnte vielleicht überlegen, einfache Figuren zu programmieren (Kreisbahn etc.) - aber das ist wegen der Kugelkoordinaten nicht ganz trivial ^^


Ok, ich sehe ich habe mich vieleicht nicht klar genug ausgedrückt. Vektoren sind alles andere als eckig :).
Vieleicht verstehst du was ich meine wenn ich von NURBS (Non Uniformal rational B-Spline) spreche?
mit NURBS kann man mit wenigen Datenpunkten runde Kurven erzeugen.
Eine einfache NRUBS Kurve zweiten grades besteht aus
3 Datenpunkten: Anfang, Kontrollpunkt, und Endpunkt.
Das sind 2 Vektoren A-K und K-E.
Das Ufo beginnt von A aus mit A-K zu fliegen. Während dem flug beginnt es zunehmend mit K-E zu fliegen, während A-K abnimmt.
Am Ende läuft es auf K-E und kommt beim Endpunkt E an.
den Kontrollpunkt hat das UFO auf seiner Parabelförmigen Reise nicht berührt, die Parabel wird aber von diesem quasi angezogen.
Mit mehreren Punkten kann man komplexere Bahnen erzeugen, durch veränderung der Punktgewichtung kann man neben parabelförmige Bahnen auch runde und gerade strecken erzeugen.
ich werde noc einh bild dazu rendern und hochladen.
vieleicht hilft auch die wiki weiter

Zitat: Natter

aber das ist wegen der Kugelkoordinaten nicht ganz trivial ^^

Mach dir deswegen mal keine sorgen, das geht wie bei der Basenauswahl und bei der Alphatronkarte. das wird vom 2-dimensionalen auf die Kugel gewickelt.
verfasst am: 02.06.2009, 02:06 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zu den NRUBS. Wie gesagt, per Skript lässt sich das leicht umsetzen - man muss nur eine entsprechende Funktion schreiben, die in jedem Zeitschritt die Flugrichtung korrigiert. Man gibt zwar momentan dem UFO den Zielpunkt vor, aber es sollte nicht allzu schwer sein, aus der Richtung einen Zielpunkt festzulegen.

Zitat: Tiberian
Mach dir deswegen mal keine sorgen, das geht wie bei der Basenauswahl und bei der Alphatronkarte. das wird vom 2-dimensionalen auf die Kugel gewickelt.

Naja, genau das ist das Problem. Dabei wird die Figur verzerrt. Klingt jetz vielleicht nicht dramatisch, aber nur um mal ein Beispiel zu nennen:
Wenn du die y-Koordinate auf 0 setzt, bzw. auf 180 und dann entlang der X-Achse fliegen willst, dann bleibt das UFO stehen. Warum? Weil du entlang des Poles fliegst, und der ist nur ein Punkt.
Natürlich sollten durch diese Verzerrung keine Ecken entstehen, aber ein Kreis ist dann mit Sicherheit kein Kreis mehr.
verfasst am: 29.06.2009, 15:52 · Edited by: Tiberian
Registrierdatum: 17.03.2006, 21:04

 Beiträge: 47
Zitat: Natter

Mach dir deswegen mal keine sorgen, das geht wie bei der Basenauswahl und bei der Alphatronkarte. das wird vom 2-dimensionalen auf die Kugel gewickelt.


Naja, genau das ist das Problem. Dabei wird die Figur verzerrt. Klingt jetz vielleicht nicht dramatisch, aber nur um mal ein Beispiel zu nennen:
Wenn du die y-Koordinate auf 0 setzt, bzw. auf 180 und dann entlang der X-Achse fliegen willst, dann bleibt das UFO stehen. Warum? Weil du entlang des Poles fliegst, und der ist nur ein Punkt.
Natürlich sollten durch diese Verzerrung keine Ecken entstehen, aber ein Kreis ist dann mit Sicherheit kein Kreis mehr.


Das Stimmt, da hast du völlig recht, wenn du ein ufo um den Nordpol kreisen lassen möchtest müsstest du eine Horizontale Gerade auf der 2-d Karte einzeichnen.
Das man, wenn man alle Punkte eines Poles (der ja auf der Kugel nur ein Punkt ist) verbindet keine Strecke sondern ein Punkt erhält ist mir übrigens klar.

Die frage ist ob es nötig ist die Ufos perfekt Kreiseln zu lassen. (warum sollten die im Kreis fliegen? sind ja nicht betrunken oder so? xD)

Falls eine Kreisbewegung dennoch so wichtig ist kann man das als dennoch mit etwas aufwand erreichen:
in der nähe vom äquator fällt so eine Verzerrung nicht gross auf, und in der nähe der Polen muss man die gewichtung der Splines anpassen, die Kontrollpunkte nicht quadratisch sondern Traperzförmig ausrichten, um der Verzerrung etwas entgegenzuwirken. (Sorry, ich weiss jetzt nicht ob mich alle verstanden haben)
verfasst am: 29.06.2009, 16:05 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: Tiberian

Das man, wenn man alle Punkte eines Poles (der ja auf der Kugel nur ein Punkt ist) verbindet keine Strecke sondern ein Punkt erhält ist mir übrigens klar.

Wenn dir das sowieso klar ist, dann sollte dir aber auch klar sein, dass eine (angeblich einfache) Definition von Flugrouten auf einer Kugeloberfläche über eine X-Y-Ebene keiensfalls trivial ist.
Zitat: Tiberian
Die frage ist ob es nötig ist die Ufos perfekt Kreiseln zu lassen.

Nein - die Frage ist, ob Routen allgemein nutzbar sind, oder ebend nicht. Wenn ich flexible Anfangspunkte zulassen will, dann ist das imho ein Problem. Außerdem sollten alle Positionen auf dem Globus gleichwertig sein - wäre Blöd, wenn die UFOs meinstens in Äquatornähe wären.

Man könnte ja auch fragen - warum sollen die UFOs keine Haken schlagen? Sie fliegen immer den kürzesten Weg zum Ziel - wenn sich das Ziel ändert, warum dann viele hundert Kilometer Umweg in einen Bogen stecken?



Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.012 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003