Soo, wieder mal ein kleines Thema zum Diskutieren, bei dem es im Detail sicher eine Menge Moeglichkeiten gibt.
Ich moechte kein Kampfscript ala 100.000 Einheiten kaempfen gegen 50.000 Einheiten, dann gibt es so und so viele prozentuale Verluste.
Jede Einheit ist ein einzelnes Objekt mit individuellem Schadensmodell, individuellen Modulen fuer Waffen, Schilde, Antrieb, etc... die wiederum ein Schadensmodell und ein level haben. Bestimmte Schilde haben Vorteile gegen bestimmte Waffen und umgekehrt.
D.h. jeder "Schuss" einer Einheit auf eine andere wird einzeln berechnet und der Schaden zugeteilt, der komplette Kampf wird simuliert. Momentan passieren alle Schritte bis Kampfende "in einem Moment", fuer eine zukuenftige Version plane ich, es in Minutenticks ablaufen zu lassen (fuer jede Schussphase).
Das grosse Problem ist dabei: wie regelt man focus fire? Jeweils komplett random Zielwahl? Komplettes Focus fire aller einheiten? Zusaellige Gruppierung von Einheiten mit gleichem Ziel?
Kennt jemand von euch die funmap "footman frenzy" in Warcraft 3? Man hat eine Basis, einen Helden und alle 8 Sekunden bekommt einen Soldaten dazu. Gespielt wird 3vs3vs3vs3, mit einem grossen Schlachtfeld in der Mitte. Geht nun also der Kampf los, treffen eine Menge Einheiten aufeinander. Lassen wir die Helden aussen vor.
Die Einheiten laufen aufeinander zu und "reihen sich auf", es ist relativ wenig focus fire gegeben, solang kein Eingreifen erfolgt.
Ich haette nun gern ein einigermassen realistisches Verhalten, dem man durch weitere Parameter (z.B. Kapitaen vorhanden, Vorteile fuer bestimmte Koalitionen) ein anpassbares Focussing bestimmen kann. Eben als wuerde der Spieler in Warcraft 3 manuell seine Einheiten auf ein bestimmtes Ziel fokussieren (und dadurch schneller in zahlenmaessige Ueberlegenheit kommen udn den Kampf gewinnen).
Bei gleichen Ausgangsbedingungen ist das noch harmlos, da es nicht wirklich auffaellt, wenn keine Seite fokussiert. Wenn jedoch unausgeglichene Geschwader aufeinander treffen, z.B. 20 Schiffe gegen 10 Schiffe, spielt es eine ziemlich grosse Rolle.
Habt ihr Tipps oder Ideen, wie sich dies am besten realisieren liesse?
Kampfsimulation im Detail / Focus Fire
gepostet vor 16 Jahre, 8 Monate von Kallisti
gepostet vor 16 Jahre, 8 Monate von Drezil
zum thema zielwahl:
ich schaue bei mir alle einheiten durch, die als ziel in frage kommen (reichweite, schiffe in einem quadtree).
während der iteration schau ich mir diese durch und berechne den maximal möglichen schaden, den zustand des gegners (hp, sp, etc.) und gewichte solche faktoren. Am ende hab ich dann nur noch nen pointer auf das schiff, auf das ich am meisten schaden mache, bzw. das am schnellsten unter meinem beschuss kaputt geht. Und auf dieses schiesse ich dann.
ich schaue bei mir alle einheiten durch, die als ziel in frage kommen (reichweite, schiffe in einem quadtree).
während der iteration schau ich mir diese durch und berechne den maximal möglichen schaden, den zustand des gegners (hp, sp, etc.) und gewichte solche faktoren. Am ende hab ich dann nur noch nen pointer auf das schiff, auf das ich am meisten schaden mache, bzw. das am schnellsten unter meinem beschuss kaputt geht. Und auf dieses schiesse ich dann.
gepostet vor 16 Jahre, 8 Monate von Kallisti
Naja, aber 100%iges Focus Fire von allen Einheiten in einem Geschwader ist nicht wirklich realistisch, oder?
Also ich tendiere dazu es so zu machen, dass ich das Geschwader in Gruppen unterteile. Je unkoordinierter, desto mehr Gruppen.
Ein Geschwader kann bei uns zur Zeit maximal 25 Schiffe haben, fuer spaeter sind 10-15 geplant. Ein total unkoordiniertes Geschwader wuerde ich dann auf Einheitenzahl / 1.5 aufteilen, so dass 1 bzw. 2 Schiffe immer dasselbe Ziel haben.
Steigt der Koordinationsfaktor geht das eben hin, bis man nur noch eine Gruppe hat (Extremfall, der natuerlich eher die Ausnahme bleiben sollte, allein weil z.B. eigene Schiffe einander blockieren koennen, dann muesste man erst noch friendly fire implementieren ^^), die ein Ziel fokussiert. Das Ziel wuerde dann auch in der naechsten Kampfrunde wieder anvisiert.
Die Frage is halt wie nah des einer realistischen Situation kommt, ob es fuer die User akzeptable Resultate produziert und ob es elegantere / bessere Loesungswege gibt.
Intelligente Zielwahl, also entweder die gefaehrlichsten oder die schwaechsten Gegner automatisch bestimmen, ist sicherlich auch eine interessante Sache. Fraglich wiederum wie realistisch es ist und von welchen Faktoren es abhaengen sollte. Wuerde ebenfalls die Bedeutung von Kapitaenen betonen, die diese Eigenschaft verbessern... hmm. Ist aber auch nen zweischneidiges Schwert, da zum einen leicht frustrierend und zum anderen schwer zu balancen.
Also ich tendiere dazu es so zu machen, dass ich das Geschwader in Gruppen unterteile. Je unkoordinierter, desto mehr Gruppen.
Ein Geschwader kann bei uns zur Zeit maximal 25 Schiffe haben, fuer spaeter sind 10-15 geplant. Ein total unkoordiniertes Geschwader wuerde ich dann auf Einheitenzahl / 1.5 aufteilen, so dass 1 bzw. 2 Schiffe immer dasselbe Ziel haben.
Steigt der Koordinationsfaktor geht das eben hin, bis man nur noch eine Gruppe hat (Extremfall, der natuerlich eher die Ausnahme bleiben sollte, allein weil z.B. eigene Schiffe einander blockieren koennen, dann muesste man erst noch friendly fire implementieren ^^), die ein Ziel fokussiert. Das Ziel wuerde dann auch in der naechsten Kampfrunde wieder anvisiert.
Die Frage is halt wie nah des einer realistischen Situation kommt, ob es fuer die User akzeptable Resultate produziert und ob es elegantere / bessere Loesungswege gibt.
Intelligente Zielwahl, also entweder die gefaehrlichsten oder die schwaechsten Gegner automatisch bestimmen, ist sicherlich auch eine interessante Sache. Fraglich wiederum wie realistisch es ist und von welchen Faktoren es abhaengen sollte. Wuerde ebenfalls die Bedeutung von Kapitaenen betonen, die diese Eigenschaft verbessern... hmm. Ist aber auch nen zweischneidiges Schwert, da zum einen leicht frustrierend und zum anderen schwer zu balancen.
gepostet vor 16 Jahre, 8 Monate von TheUndeadable
Da ja alle Einheiten aufnummeriert sind, kannst du eine summierte Wahrscheinlichkeit bei jeder Einheit speichern:
Beispiel:
Grenadiere: kein Fokusfire
Panzer: Doppelter Fokusfire
6 Grenadiere, 2 Panzer
Datensätze:
Grenadier 1: 10%
Grenadier 2: 20%
Grenadier 3: 30%
Grenadier 4: 40%
Grenadier 5: 50%
Grenadier 6: 60%
Panzer 1: 80%
Panzer 2: 100%
Da dein Zufallszahlengenerator eine Zahl zwischen 0 und 100% rauswirft, kannst du nun einfach per binärer Suche die getroffene Einheit ermitteln.
Bei einer Implementierung in C# konnte ich Kämpfe bis zu 100.000 Einheiten in Sekundenbruchteilen berechnen lassen. Dies erwarte ich so bei jeder kompilierten Sprache.
Beispiel:
Grenadiere: kein Fokusfire
Panzer: Doppelter Fokusfire
6 Grenadiere, 2 Panzer
Datensätze:
Grenadier 1: 10%
Grenadier 2: 20%
Grenadier 3: 30%
Grenadier 4: 40%
Grenadier 5: 50%
Grenadier 6: 60%
Panzer 1: 80%
Panzer 2: 100%
Da dein Zufallszahlengenerator eine Zahl zwischen 0 und 100% rauswirft, kannst du nun einfach per binärer Suche die getroffene Einheit ermitteln.
Bei einer Implementierung in C# konnte ich Kämpfe bis zu 100.000 Einheiten in Sekundenbruchteilen berechnen lassen. Dies erwarte ich so bei jeder kompilierten Sprache.
gepostet vor 16 Jahre, 8 Monate von Fornax
Also für mich schreit das sehr nach der Gauß'schen Normalverteilung, und danach dass der User evtl Einstellt: Erst gefährliche Einheiten, dann welche die schnell kaputt ghen; oder einfach auf alles.. Dass er dass selber regulieren kann. Wobei das wohl zu kompliziert wird, sowohl für dich als auch für die User.
gepostet vor 16 Jahre, 8 Monate von Nuky
Bei uns gibt es eine voreingestellte Schussreihenfolge für jedes Schiff (siehe Schiffsdaten). Das gibt eine teilweise Vorausberechenbarkeit und viele taktische Möglichkeiten. Bei mir gibt es 6 Phasen im eigentlichen Kampf (siehe wiki.aquarion.org/index/Kampfablauf).
Vielleicht kannst du dir da ja was rauslesen.
Vielleicht kannst du dir da ja was rauslesen.
gepostet vor 16 Jahre, 8 Monate von RaydenDD
Ich versuche die Wahrscheinlichkeit zu ermitteln, das ein bestimmtes Schiff auf ein anderes trifft ... daraus ergibt sich dann ein Wertebereich der alle möglichen Ziele beinhaltet und jedem Ziel einen kleineren oder größeren Bereich zuweist. Aus der ganzen Bandbreite wird dann per Random ein Ziel genommen.
Schiffe können einen Primärziel haben, Schiffstypen die Primärziel sind erhalten dann einen größeren Wertebereich als mögliches Ziel.
Hört sich komisch an, isses aber auch. Naja ist eine Annäherung und noch verbesserungswürdig, ich bin immer der Gratwanderung zwischen Realismus und Berechnungsgeschwindigkeit da bei mir recht große Schiffsanzahlen auftreten können.
EDIT: Geht ein bisschen am Focusfire vorbei aber es hat so einen ähnlichen Effekt .. das einzige Problem das sich dir stellt ist eigentlich, wie bestimme ich das Primär und möglicherweise Sekundärziel und wie hoch ist die wahrscheinlichkeit auf ein anders Schiff zu treffen bzw. von einem anderen Schiff getroffen zu werden, so das ich mich nicht auf mein Primärziel konzentrieren kann.
Schiffe können einen Primärziel haben, Schiffstypen die Primärziel sind erhalten dann einen größeren Wertebereich als mögliches Ziel.
Hört sich komisch an, isses aber auch. Naja ist eine Annäherung und noch verbesserungswürdig, ich bin immer der Gratwanderung zwischen Realismus und Berechnungsgeschwindigkeit da bei mir recht große Schiffsanzahlen auftreten können.
EDIT: Geht ein bisschen am Focusfire vorbei aber es hat so einen ähnlichen Effekt .. das einzige Problem das sich dir stellt ist eigentlich, wie bestimme ich das Primär und möglicherweise Sekundärziel und wie hoch ist die wahrscheinlichkeit auf ein anders Schiff zu treffen bzw. von einem anderen Schiff getroffen zu werden, so das ich mich nicht auf mein Primärziel konzentrieren kann.
gepostet vor 16 Jahre, 8 Monate von altertoby
also bei uns wird es atm auch eher zufällig ausgewählt welches Schiff als Ziel genommen wird.
Davor erfolgt eine kleine Voraussortierung (kaputte Schiffe, eigene/verbündete Schiffe und sowas raus)... ist ja klar. Danach werden die Schiffe leicht! gewichtet (dabei spielt eigentlich fast nur der zu erreichende Schaden eine Rolle, evt wird das noch auf "wieviel Schaden bis Tod" erweitert) und dann schlußendlich doch zufällig ausgewählt (aber halt mit der Wichtung).
Das Problem bei Focus Fire ist meines Erachtens, dass sobald du Spionage der Schiffe in deinem Spiel hast weißt du natürlich als Spieler wie stark die Einheiten des Gegners sind.
Also wenn man einen entsprechenden Log hat, aber was ist wenn man davor nicht gespiot hat?
Woher weiß man dann überhaupt welches Schiff das beste ist?
100% Focus Fire ist auch *****, zb wird wohl ein Soldat nicht einmal um die kämpfende Meute rennen um seinen Kollegen am anderen Ende zu helfen... eh der da ist, ist der Kampf vorbei
Als Idee hätte ich für dich:
nicht wirklich Focus Fire, sondern einfach die Stärke zb der Schilde und Waffen abhängig von eingesteckten Schaden machen. Dann schwächt man den Gegner egal auf welches Schiff man schießt und wie schnell der Tod ist. (außerdem noch realistischer... oder warum soll ein sinkendes Schiff noch ne volle Breitseite abgegeben )
Davor erfolgt eine kleine Voraussortierung (kaputte Schiffe, eigene/verbündete Schiffe und sowas raus)... ist ja klar. Danach werden die Schiffe leicht! gewichtet (dabei spielt eigentlich fast nur der zu erreichende Schaden eine Rolle, evt wird das noch auf "wieviel Schaden bis Tod" erweitert) und dann schlußendlich doch zufällig ausgewählt (aber halt mit der Wichtung).
Das Problem bei Focus Fire ist meines Erachtens, dass sobald du Spionage der Schiffe in deinem Spiel hast weißt du natürlich als Spieler wie stark die Einheiten des Gegners sind.
Also wenn man einen entsprechenden Log hat, aber was ist wenn man davor nicht gespiot hat?
Woher weiß man dann überhaupt welches Schiff das beste ist?
100% Focus Fire ist auch *****, zb wird wohl ein Soldat nicht einmal um die kämpfende Meute rennen um seinen Kollegen am anderen Ende zu helfen... eh der da ist, ist der Kampf vorbei
Als Idee hätte ich für dich:
nicht wirklich Focus Fire, sondern einfach die Stärke zb der Schilde und Waffen abhängig von eingesteckten Schaden machen. Dann schwächt man den Gegner egal auf welches Schiff man schießt und wie schnell der Tod ist. (außerdem noch realistischer... oder warum soll ein sinkendes Schiff noch ne volle Breitseite abgegeben )