Schiffskampf-Berechnung
Einleitung
Quelle: CombatShip.cpp
Kommt es zu Raumschlachten, findet eine Schiffskampf-Berechnung statt:
Ablauf der Kampfberechnung
Nachdem der Einfluß der Manövrierbarkeit (siehe unten) berechnet ist, finden folgende Abläufe statt:
CalculateNextPosition()
Diese Funktion berechnet den nächsten Punkt auf dem Weg zum Ziel, den das Schiff erreichen wird. (nächste Schußposition?)
Hypothese: Schiffe im Kampf fliegen aufeinander zu bzw. dann aneinander vorbei. Dafür haben Sie programmtechnisch einen Zielpunkt, wohin sie fliegen, unterwegs feuern sie (siehe auch Bild)
Bild CombatSimulator
Wenn das Schiff getarnt war und geschossen hat, dann den Tarncounter runterzählen
Kann das "Schiff" nicht fliegen, so gibt es keine neue Position
Wenn noch keine Flugroute berechnet wurde...
...wenn der Schiffsbefehl ANGREIFEN ist...
...und noch kein Ziel ausgewählt ist ...
...dann Zielposition mit mindestens Distanz 10 wählen
...wenn der Schiffsbefehl MEIDEN ist...
...dann zufällige Zielposition im Raum wählen
...wenn der Schiffsbefehl RÜCKZUG ist...
...dann frühest möglichen Rückzugszeitpunkt runterzählen...
...wenn Zähler gleich null ist, eine zufällige Zielposition wählen
Route zur Zielposition berechnen
Abstand berechnen
Beschleunigung berechnen
Bei z.B. einer Manövrierbarkeit von 5 wird bei Speed 1 gestartet und dann immer um 1 erhöht, bis Speed 5 erreicht ist. Genauso wird auch wieder verlangsamt.
Beam-Angriff auf Ziel m_pTarget
Funktion: AttackEnemyWithBeam(const CPoint& beamStart)
nur wenn Distanz größer eins (da sonst ja das Schiff gerammt wurde)
Bonus durch Schiffsspezialeigenschaften besorgen
es wird so viel wie möglich geschossen (Beam)
...unter Berücksichtigung der Beam-Dauer, danach wird die Rechargetime/Wiederaufladezeit abgewarten und dann wieder geschossen
Reichweite = Type(MK)*5 + (Bonus durch Feuer-System) + 50 (um auf 60 bis 160 zu kommen)
Schaden berechnen
Den Schaden wird für jeden Beamstrahl einzeln berechnen. Es wird eine Schleife gleich der Anzahl der Beamstrahlen der Beamwaffe durchlaufen.
Ziel zerstört
Wenn das Ziel keine Hülle mehr hat, wurde es zerstört (HURRA !!!). Es wird ein neues Ziel gesucht und mit dem nächsten Beamstrahl angegriffen.
Torpedo-Angriff auf Ziel m_pTarget
Funktion: AttackEnemyWithTorpedo(std::list<CTorpedo*>* pCT, const CPoint& torpedoStart)
nur wenn Distanz größer drei
wenn das Schiff getarnt ist, dann wird frühestens gefeuert...
...wenn man auf eine Distanz von 2/3 der maximalen Torpedoreichweite rangeflogen ist (weil ? man das getarnte Schiff dann sieht? - in der Zwischenzeit wurde man schon angegriffen???)
Bonus durch Schiffsspezialeigenschaften besorgen
voraussichtlicher Gesamtschaden dieser Torpedoattacke berechnen
Anzahl der verschieden Torpedo-Launcher durchgehen
Jetzt das Ziel des Torpedos berechnen
Dafür den Kurs des Zielschiffes anschauen. Berechnen, nach welcher Zeit der Torpedo sich mit dem Ziel treffen würde. Dorthin muss geschossen werden
Wenn die Distanz nicht größer als 200 ist, werden die Torpedos abgefeuert
Sinn des folgenden Kommentars nicht klar:
// Hier überprüfe ich mit der old_distance. Weil wenn ich die nehmen würde, die wir nach einer bestimmten Zeit erst haben, sind die Schiffe, die schnell fliegen im Nachteil. Deren Gegner würden zuerst schießen, weil die Distanz schneller kleiner wird.
Abgeschaltene Funktion: wenn der voraussichtliche Torpedo-Gesamtschaden zu groß ist
// Wenn der voraussichtliche Torpedogesamtschaden viel größer ist als die noch aktuelle Hülle // plus Schilde des Gegners, dann Abbruch und neues Ziel aufschalten und angreifen. Wir geben // hier die Art und die aktuelle Numer des Beams zurück
Einfluß der Manövrierbarkeit
Eine höhere Manövrierbarkeit bedeutet einen Vorteil im Schiffskampf. Dies wird durch einen Bonus umgesetzt.
Die Manövrierbarkeit kennt 10 Abstufungen von 0 (keine, z.B. Außenposten) bis 9 (phänomenal).
Trefferbonus
Für den Trefferbonus liegt zugrunde:
0 00% 00% 00% 00% 00% 00% 00% 00% 00% 00%
1 05% 00% 00% 00% 00% 00% 00% 00% 00% 00%
2 10% 05% 00% 00% 00% 00% 00% 00% 00% 00%
3 15% 10% 05% 00% 00% 00% 00% 00% 00% 00%
4 20% 15% 10% 05% 00% 00% 00% 00% 00% 00%
5 25% 20% 15% 10% 05% 00% 00% 00% 00% 00%
6 30% 25% 20% 15% 10% 05% 00% 00% 00% 00%
7 35% 30% 25% 20% 15% 10% 05% 00% 00% 00%
8 40% 35% 30% 25% 20% 15% 10% 05% 00% 00%
9 45% 40% 35% 30% 25% 20% 15% 10% 05% 00%
Zur Abstufung folgende Hypothese: Für jede Stufe einer besseren Manövrierbarkeit (Mx) gibt es hier einen 5%-Bonus. Hat ein Schiff M3, der Gegner nur M1, beträgt der Bonus 10%. Maximaler Trefferbonus ist 45%.
Verteidigungsbonus (=to hit malus für Gegner)
Hier ist nicht klar, was das ist:
- Verteidigungs-Bonus, weil die Manövrierbarkeit höher ist als die des Gegners und man deshalb schwerer zu treffen ist
- Verteidigungs-Malus, weil die Manövrierbarkeit niedriger ist als die des Gegners und man deshalb leichter zu treffen ist
0 00% 00% 00% 00% 00% 00% 00% 00% 00% 00%
1 04% 00% 00% 00% 00% 00% 00% 00% 00% 00%
2 10% 04% 00% 00% 00% 00% 00% 00% 00% 00%
3 18% 10% 04% 00% 00% 00% 00% 00% 00% 00%
4 28% 18% 10% 04% 00% 00% 00% 00% 00% 00%
5 40% 28% 18% 10% 04% 00% 00% 00% 00% 00%
6 54% 40% 28% 18% 10% 04% 00% 00% 00% 00%
7 70% 54% 40% 28% 18% 10% 04% 00% 00% 00%
8 88% 70% 54% 40% 28% 18% 10% 04% 00% 00%
9 96% 88% 70% 54% 40% 28% 18% 10% 04% 00%