Angriffe
Allgemeines
Wie auch die Zauber haben Angriffe den Zweck Gegner zu schädigen und bestehen damit aus mehr als einer graphischen Ausgabe. Sie beinhalten eine Aktion, zum Beispiel das Treffen eines Gegners oder das Erzeugen eines Geschosses. Um das Aktionstick - den Zeitpunkt des Auslösens der Aktion - zu berechnen wird ebenfalls das bereits bekannte System angewandt, welches sich in diesem Fall wie auch schon bei den Zaubern auf das in der animdata.txt markierte FrameDataActionFlag stützt.
Die Angriffsanimationen sind weitaus komplexer als jene, die wir bisher behandelt haben. Da Angriffe in einem solchem Spiel eine wichtigere Rolle spielen, gibt es eine große Vielfalt an einflussreichen Faktoren. Weiters gibt es einige Fertigkeiten, welche ein anderes als das bisher bekannte System zur Berechnung der Geschwindigkeit anwenden. Dazu gehört die Gruppe der Rollbackfertigkeiten (Drachen-Kralle, Eifer, Streuen, Widersetzen, Wut), die generelle Verwandlung in einen Werwolf/Werbären sowie die Fertigkeiten "Babaren-Wut" und "Wirbelwind". Letztere hat überhaupt keine Ähnlichkeit mehr mit dem allgemeinen Berechnungssystem, sondern wird über eine eigene Programmroutine gesteuert.
Bei den Angriffen finden sich auch sehr viele Sequenzen, weil es dank dieser möglich wird, zwei verschiedene Animationen zu verbinden. Darauf basiert zum Beispiel "Ansturm" (Lauf- und Angriffsanimation) oder "Raserei" (links- und rechtshändiger Angriff). Diese Sequenzen erhalten nun allerdings einen Malus auf die Angriffsgeschwindigkeit, doch darauf werde ich später noch genauer eingehen.
Für einen Angriff verwendet man im Regelfall eine Waffe, welche neben eventuell vorhandenem IAS selbst auch Einfluss auf die Geschwindigkeit hat. Jeder
Grundwaffe (Phasenklinge, Legendärer Hammer, ...) ist ein gewisser Wert - der
Weapon Speed Modifier, kurz WSM genannt - zugewiesen, welcher direkt auf die Acceleration wirkt. Manche sprechen auch von der "Grundgeschwindigkeit" der Waffe, doch da der WSM nur einen von vielen Einflussfaktoren darstellt, ist dieser Ausdruck etwas unglücklich gewählt. Da der WSM innerhalb der Formel subtrahiert wird, bedeutet ein möglichst kleiner Wert eine Erhöhung der Angriffsgeschwindigkeit. Auf D2Wissen.de sind allerdings die Vorzeichen vertauscht, sodass die Waffen durch einen hohen WSM beschleunigt werden.
Animationslänge und Aktionstick
AT = {(Hitshift*FrameDataActionFlag)/[(AnimationSpeed*Acceleration/100)]}
FPA = {(Hitshift*FramesPerDirection)/[AnimationSpeed*Acceleration/100]} - 1
Wie man anhand der Formeln erkennen kann, handelt es sich bei der Acceleration um einen Prozentwert. Dieser muss daher über einen Grundwert verfügen, der dann durch bestimmte Boni und Mali verändert werden kann. Bei der Angriffsgeschwindigkeit gibt es dabei mehrere beeinflussende Faktoren:
Acceleration = Baserate + EIAS + SIAS - WSM (+ ColdEffekt)
Baserate ... Der Grundwert der Beschleunigung verwendet für Angriffe einen Wert von 100.
EIAS ... Sie wird intern aus der IAS berechnet. Dabei wird die so genannte "dimishing returns" Formel (siehe unten) angewandt, die einen sinkenden Grenznutzen aufweist. Anders ausgedrückt braucht man mit steigendem Wert immer mehr IAS um noch eine weitere Änderung der EIAS zu bewirken.
EIAS = [120*IAS/(120 + IAS)]
SIAS ... Die Summe aller Boni und Mali zur Angriffsgeschwindigkeit, die wir von verschiedensten Fertigkeiten (zum Beispiel Fanatismus oder Altern) erhalten. Auch die Gegnerverlangsamung gewisser Gegenstände wird hier verrechnet.
WSM ... Der Weapon Speed Modifier ist ein waffenabhängiger Wert zur Steuerung der Geschwindigkeit. Da er nicht die "dimishing returns" Formel durchläuft, kann er die Geschwindigkeit entscheidend beeinflussen.
ColdEffekt ... Kälteangriffe verfügen meist über eine Wirkzeit, während dieser die Geschwindigkeiten der betroffenen Einheit beeinflusst werden. Während Spieler hier einen konstanten Wert von 50 besitzen, ist jeder Monsterklasse in der MonStats.txt für jeden Schwierigkeitsgrad ein eigener Wert zugewiesen.
StartingFrame
Bisher sind wir immer davon ausgegangen, dass unsere Animation mit dem Frame 00, also der Counterstellung 0 beginnt. Dieses Startingframe, welches den Beginn der Animation kennzeichnet, ist für alle Charaktere und alle Waffengattungen in der D2Common.dll festgehalten und im Regelfall das erste Frame, sprich jenes mit der Bezeichnung "FrameData00". Für die Angriffsanimationen (exklusive Wurfangriffen) mit den Charakterklassen "Amazone" und "Zauberin" kann das StartingFrame allerdings je nach verwendeter Waffenart auch einen anderen Wert annehmen. Dies bedeutet, dass die Animation verkürzt und damit deren Dauer verringert wird.
Code:
[color=gold]Waffe: hth 1hs 2hs 1ht 2ht stf bow xbw[/color]
[color=silver]StartingFrame: 1 2 2 2 2 2 0 0[/color]
Die Werte sind für Zauberinen und Amazonen ident, daher gebe ich sie nur einmal an. Alle anderen Charklassen haben immer ein StartingFrame von 0.
Damit müssen wir unsere Formel noch weiter modifizieren, indem wir das StartingFrame von den FramesPerDirection abziehen. Damit erhalten wir die Zahl der wirklich verwendeten Frames und die Formeln sind korrekt:
AT = {(Hitshift*(FramesPerDirection - Startingframe))/[(AnimationSpeed*Acceleration/100)]}
FPA = {(Hitshift*(FramesPerDirection - Startingframe))/[AnimationSpeed*Acceleration/100]} - 1
Acceleration = Baserate + [120*IAS/(120 + IAS)] + SIAS - WSM (+ ColdEffekt)
Auszulesende Werte
Nun benötigen wir wiederum die Werte für
FrameDataActionFlag,
FramesPerDirektion und
AnimationSpeed. Hier wird die Auflistung schon umfangreicher, weil mehrere Animationen für den Angriff genutzt werden können:
Code:
[b][color=gold]Amazone[/color] [color=silver]Assassine[/color] [color=gold]Barbar[/color] [color=silver]Druide[/color] [color=gold]Nekromant[/color] [color=silver]Paladin[/color] [color=gold]Zauberin[/color][/b]
[b][color=gold]A1[/color][color=silver]HTH[/color] [color=gold]08 13 256[/color] [color=silver]06 11 256[/color] [color=gold]06 12 256[/color] [color=silver]08 16 256[/color] [color=gold]08 15 256[/color] [color=silver]07 14 256[/color] [color=gold]09 16 256[/color]
[color=gold]A2[/color][color=silver]HTH[/color] [color=gold]---[/color] [color=silver]06 12 256[/color] [color=gold]---[/color] [color=silver]---[/color] [color=gold]---[/color] [color=silver]---[/color] [color=gold]08 16 256[/color][/b]
[color=gold]A1[/color][color=silver]HTx[/color] [color=silver]06 11 208[/color]
[color=gold]A2[/color][color=silver]HTx[/color] [color=silver]06 12 208[/color]
[color=gold][b]A1[/color][color=silver]1HS[/color] [color=gold]10 16 256[/color] [color=silver]07 15 256[/color] [color=gold]07 16 256[/color] [color=silver]09 19 256[/color] [color=gold]09 19 256[/color] [color=silver]07 15 256[/color] [color=gold]12 20 256[/color][/b]
[color=gold]A1[/color][color=silver]2HS[/color] [color=gold]12 20 256[/color] [color=silver]11 23 256[/color] [color=gold]08 18 256[/color] [color=silver]10 21 256[/color] [color=gold]11 23 256[/color] [color=silver]08 18 256[/color] [color=gold]14 24 256[/color]
[color=gold]A2[/color][color=silver]2HS[/color] [color=gold]---[/color] [color=silver]---[/color] [color=gold]---[/color] [color=silver]---[/color] [color=gold]---[/color] [color=silver]08 19 256[/color] [color=gold]---[/color]
[color=gold][b]A1[/color][color=silver]1HT[/color] [color=gold]09 15 256[/color] [color=silver]07 15 256[/color] [color=gold]07 16 256[/color] [color=silver]08 19 256[/color] [color=gold]09 19 256[/color] [color=silver]08 17 256[/color] [color=gold]11 19 256[/color][/b]
[color=gold]A1[/color][color=silver]2HT[/color] [color=gold]11 18 256[/color] [color=silver]10 23 256[/color] [color=gold]09 19 256[/color] [color=silver]09 23 256[/color] [color=gold]10 24 256[/color] [color=silver]08 20 256[/color] [color=gold]13 23 256[/color]
[color=gold]A2[/color][color=silver]2HT[/color] [color=gold]---[/color] [color=silver]---[/color] [color=gold]---[/color] [color=silver]---[/color] [color=gold]---[/color] [color=silver]09 20 256[/color] [color=gold]---[/color]
[color=gold][b]A1[/color][color=silver]STF[/color] [color=gold]12 20 256[/color] [color=silver]09 19 256[/color] [color=gold]09 19 256[/color] [color=silver]09 17 256[/color] [color=gold]11 20 256[/color] [color=silver]09 18 256[/color] [color=gold]11 18 256[/color][/b]
[color=gold]A1[/color][color=silver]BOW[/color] [color=gold]06 14 256[/color] [color=silver]07 16 256[/color] [color=gold]07 15 256[/color] [color=silver]08 16 256[/color] [color=gold]09 18 256[/color] [color=silver]08 16 256[/color] [color=gold]09 17 256[/color]
[color=gold][b]A1[/color][color=silver]XBW[/color] [color=gold]09 20 256[/color] [color=silver]10 21 256[/color] [color=gold]10 20 256[/color] [color=silver]10 20 256[/color] [color=gold]11 20 256[/color] [color=silver]10 20 256[/color] [color=gold]11 20 256[/color][/b]
[color=gold][b]TH[/color][color=silver]xxx[/color] [color=gold]09 16 256[/color] [color=silver]07 16 256[/color] [color=gold]08 16 256[/color] [color=silver]08 18 256[/color] [color=gold]10 20 256[/color] [color=silver]08 16 256[/color] [color=gold]10 20 256[/color][/b]
[color=gold]KK[/color][color=silver]xxx[/color] [color=silver]04 13 256[/color]
[color=gold][b]S1[/color][color=silver]xxx[/color] [color=gold]xx 09 256[/color] [color=silver]07 12 256[/color][/b]
[color=gold]S2[/color][color=silver]xxx[/color] [color=silver]04 08 128[/color]
[color=gold][b]S3[/color][color=silver]1Jx[/color] [color=gold]08 12 256[/color][/b]
[color=gold]S3[/color][color=silver]1Sx[/color] [color=gold]07 12 256[/color]
[color=gold][b]S4[/color][color=silver]1Jx[/color] [color=gold]08 16 256[/color][/b]
[color=gold]S4[/color][color=silver]1Sx[/color] [color=gold]09 16 256[/color]
[color=gold][b]S4[/color][color=silver]HT2[/color] [color=silver]06 12 208[/color][/b]
--------------------------------------------------------------------------------------------------
[b][color=gold]Werwolf[/color] [color=silver]Werbär[/color] [color=gold]Fetisch[/color] [color=silver]Vampir[/color][/b]
[b][color=gold]A1[/color][color=silver]xxx[/color] [color=gold]07 13 xxx[/color] [color=silver]07 12 xxx[/color] [color=gold]08 12 256[/color] [color=silver]09 14 176[/color][/b]
[color=gold]S3[/color][color=silver]xxx[/color] [color=gold]06 10 xxx[/color] [color=silver]06 10 xxx[/color]
[b][color=gold]NU[/color][color=silver]xxx[/color] [color=gold]xx 09 xxx[/color] [color=silver]xx 10 xxx[/color][/b]
--------------------------------------------------------------------------------------------------
[b][color=gold]Rogue[/color] [color=silver]Stadtwache[/color] [color=gold]Eisenwolf[/color] [color=silver]Barbarensöldner[/color][/b]
[b][color=gold]A1[/color][color=silver]xxx[/color] [color=gold]06 15 256[/color] [color=silver]11 16 256[/color] [color=gold]06 15 256[/color] [color=silver]05/12 16 256[/color][/b]
~ Die Anordnung der Werte sowie die Animationsbezeichnungen sollten bereits klar sein. Das kleine "x" in den obigen Bezeichnungen ist ein Platzhalter, dort können alle möglichen Zeichen eingesetzt werden. Die Bezeichnung "HTx" meint beispielsweise die Waffenklassen "HT1" und "HT2". Der Platzhalter ist jedoch nicht auf Zahlen beschränkt, er kann auch Buchstaben ersetzen.
~ Jene A2-Animationen, bei denen keine Werte eingetragen sind, verwenden die Werte der zugehörigen A1-Animation. Bei allen nicht aufgeführten A2-Animationen sind die Werte sogar für alle Charaktere mit den zugehörigen A1-Animationen ident.
~ Der Barbarensöldner vollführt mit einem normalen Angriff zwei Schläge, sodass er auch zwei FrameDataActionFlag benötigt. Diese sind in obiger Tabelle durch einen Slash getrennt.
Animationsverwendung
Unsere bisherigen Aktionen (Block, Treffererholung und Zauber) haben, mit Ausnahme von Sequenzen, stets nur eine Animation verwendet. Bei den Angriffen jedoch stehen verschiedene Animationen zur Auswahl. Daher folgt nun eine Auflistung, welche Animation von welchen Angriffen/Fertigkeiten genutzt wird. Diese Angriffe sind dabei der Übersichtlichkeit halber in die verschiedenen Charakterklassen eingeteilt:
A1:
normaler Angriff
"Bogen und Armbrust"-Fertigkeiten, Energieschlag, Kettenblitzschlag, Geladener Schlag, Widersetzen
Tigerschlag, Kobraschlag, Phönixschlag
Hieb, Lähmen, Konzentrieren, Amok
Barbarenwut, Zerfleischen, Feuerklauen, Wut
Giftdolch
Opfer, Eifer, Rache, Bekehrung
A2:
normaler Angriff
KK:
Drachen-Kralle, Drachen-Schwanz
S1:
(Ausweichen, Meiden, Entrinnen)
Schildschlag
S2:
Stationärfallen, Feuerstoß, Schocknetz, Klingenwächter
S3:
Sekundärschlag des Barbaren
Hunger, Tollwut
S4:
Sekundärschlag der Assassine
Sekundärwurf des Barbaren
TH:
Wurf
Giftwurfspieß, Blitzschlag, Pestwurfspieß, Blitzendes Unheil
Sequenzen
Viele Angriffe verwenden nicht eine komplette Animation, sondern sind aus einzelnen Frames einer oder mehreren Animationen zusammengesetzt. Beispiele dafür sind "Ansturm", welche neben dem Angriff auch Frames der RN-Animation nutzt oder "Raserei", welche für den Erst- und Zweitschlag Teile unterschiedlicher Animationen (A1 und S3) nutzt. Über die von Charakteren verwendeten Sequenzen gibt es keine Informationen in der animdata.d2, sondern man muss sie aus der D2Common.dll auslesen, was ungleich schwerer ist. Für die Sequenzen der Monster (zu denen auch die Söldner zählen) gibt es eine eigene Regelung, denn deren Sequenzdaten sind aus der MonSeq.txt auszulesen. Die Zuordnung der Sequenzen zu den einzelnen Fertigkeiten erfolgt in der Skills.txt. Einerseits haben Sequenzen in der Spalte "anim" das Kürzel "SQ" eingetragen und andererseits enthält die Spalte "seqnum" den Index der jeweils verwendeten Animation.
Aus Platzgründen füge ich die Informationen bezüglich der von Charakteren verwendeten Sequenzen nicht hier ein, sondern verweise an dieser Stelle nur auf die
Auflistung im letzten Teil dieser FAQ. Zumeist ist jede Sequenz nur einer bestimmten Fertigkeit zugewiesen, sodass die dortigen Bezeichnungen klar sein sollten. Daher erspare ich es mir alle Fertigkeiten mit der verwendeten Sequenz hier anzugeben und weise stattdessen nur darauf hin, dass die Sequenz Nummer 16 (von mir als "Charger" bezeichnet) für die Fertigkeiten "Feuerfäuste", "Donnerklauen", "Eisklingen" und "Drachen-Klaue" verwendet wird.
Für die Berechnung der Animationsdauern ist zu berücksichtigen, dass beinahe die bekannte Formel gilt, das letzte Tick in diesem Fall jedoch nicht wegfällt. Weiters haben Charaktere - im Gegensatz zu Söldnern und Monstern - für Angriffs-Sequenzen einen Malus von 30 auf die Acceleration.
AT = {(Hitshift*FramesPerDirection)/[(AnimationSpeed*(Baserate - 30 + EIAS + SIAS - WSM)/100)]}
FPA = {(Hitshift*FramesPerDirection)/[AnimationSpeed*(Baserate - 30 + EIAS + SIAS - WSM)/100]}
Zusammenfassung
AT = {(256*(FrameDataActionFlag - StartingFrame))/[(AnimationSpeed*(100 + EIAS + SIAS - WSM (+ ColdEffekt))/100)]}
FPA = {(256*(FramesPerDirection - StartingFrame))/[AnimationSpeed*(100 + EIAS + SIAS - WSM (+ ColdEffekt))/100]} - 1
EIAS = [120*IAS/(120 + IAS)]
Für Spieler-Sequenzen:
AT = {(256*FrameDataActionFlag)/[(AnimationSpeed*(70 + EIAS + SIAS - WSM (+ ColdEffekt))/100)]}
FPA = {(256*FramesPerDirection)/[AnimationSpeed*(70 + EIAS + SIAS - WSM (+ ColdEffekt))/100]}
EIAS = [120*IAS/(120 + IAS)]
FramesPerDirection ... Die Anzahl an Einzelbildern der Animation, abhängig von Charakterklasse und Waffentyp.
StartingFrame ... Jenes Frame, mit dem die Animation beginnt. Ist für die normale Angriffsanimation von Amazonen und Zauberinnen für bestimmte Waffen größer als 0.
AnimationSpeed ... Der Grundwert des Counter-Anstiegswertes, wird ebenso durch die Animation bestimmt.
SIAS ... Die Summe aller Fertigkeitsboni und -mali zur Angriffsgeschwindigkeit, inklusive dem Malus der Gegnerverlangsamung.
WSM ... Die Geschwindigkeitsmodifikation durch den Grundtyp der Waffe.
ColdEffekt ... Geschwindigkeitsmalus durch Kältedauer, der Wert beträgt für Charaktere -50.