Time is on my Side
die Waffengeschwindigkeit
Logischerweise ist die Waffengeschwindigkeit nur dann von Belang, wenn man mit der Waffe nicht zaubert, sondern kämpft. Also zuschlägt, wirft oder schießt. Daher profitieren auch nur solche Charaktere vom Attribut Increased Attack Speed / Erhöhte Angriffsgeschwindigkeit, kurz IAS. Etwas verschwommen wird die Differenzierung bei manchen Kampffertigkeiten, so ist beispielsweise die Amazonenwurffertigkeit Lightning Bolt / Blitzschlag zwar letztendlich ein reiner Blitzangriff, besteht aber dennoch aus einem geworfenen Spieß und unterliegt somit der Wurfgeschwindigkeit. Smite / Niederstrecken, also der Schildschlag des Paladins, wird zwar mit dem Schild ausgeführt, doch zählt auch hier die Geschwindigkeit der Waffe und deren Erhöhung mit. Die Legefallen der Assassine sind zwar durchaus mit Zaubern vergleichbar, die Legegeschwindigkeit wird aber dennoch von Waffengeschwindigkeit und IAS bestimmt.
Nicht irritieren lassen sollte man sich an dieser Stelle von den Waffenbeschreibungen im Spiel selbst. Diese sind für jede Waffenklasse jeder Charakterklasse in der d2client.dll abhängig von der AnimData.d2 zugeordnet und festgelegt. Obwohl man mit mehr IAS aus beliebigen Quellen die Waffe schneller bedienen kann, ändert sich diese Anzeige nur beim Überschreiten eines Schwellwerts durch IAS Sockelungen in der Waffe selbst. Dennoch ist die Anzeige natürlich ein Orientierungspunkt für das Grundtempo der Waffe an dieser Klasse. Nur sollte man nicht darauf hereinfallen, falls man die Waffe mit einer anderen Klasse betrachtet hat als derjenigen, die die Waffe führen soll.
Die Gegenstände mit Affices zur Verbesserung der Angriffsgeschwindigkeit sind wie gewohnt auf Atairs d2wissen zu finden.
formale Herleitung
Bedauerlicherweise konkurrieren mehrere Begriffe um die Aufmerksamkeit des Lesers, die oftmals das gleiche meinen, aber anders benannt sind. Manchmal auch umgekehrt. Es beginnt schon mit dem Begriff Frame, der andernorts bereits allgemein beschrieben ist. In unserem Zusammenhang hier besteht die Angriffsanimation aus einer vorgegebenen Anzahl Einzelbilder, die auch Frames genannt werden. Jede Animation besteht aus einer solchen Bildfolge. Die Anzahl dieser Bilder wird als AnimLength bezeichnet, ebenso verbreitet ist dafür auch der Begriff Frames per direction oder auch technokratisch Base+1. Das Spiel selbst läuft konstant mit 25 Frames pro Sekunde (fps), hier meint Frames allerdings eine Zeiteinheit (1/25 Sekunde). Die Geschwindigkeit, mit der eine Animation abgespielt wird, wird AnimRate genannt. Die Zeitdauer der Animation wird AnimDuration genannt. Es gilt dabei:
AnimDuration = AnimLength / AnimRate
AnimLength | Auszug aus animdata.d2 |
AnimSpeed | |
AnimRate | ItemStatCost.txt (StatID 68) |
IASItem | ItemStatCost.txt (StatID 93) |
SIAS | Skills.txt (aurastates) oder im Spiel nachsehen - Fanatismus - Burst of Speed / Tempoblitz - Werwolf - (Frenzy / Raserei) |
WSM | Weapons.txt (speed) |
Dummerweise ergibt diese Division keinesfalls immer eine ganze Zahl, was zur Abbildung innerhalb des Spielzeitrasters aber notwendig ist. Um Rundungsfehler möglichst klein zu halten, kommt hier ein Mechanismus zum Einsatz, der als HitShift Einzug in die entsprechenden Abhandlungen gehalten hat, dummerweise wird dafür auch der Name AnimSpeed oder auch vanim verwandt. Netterweise ist bei der Betrachtung der Angriffsgeschwindigkeit meines Wissens nach dieser Wert immer 256. Die Formel wird dabei zu:
AnimDuration = AnimLength * 256 / AnimRate
Um das Ganze noch etwas komplizierter zu gestalten, kommt nun noch die Beschleunigung der Animation zum Tragen. AnimRate (auch BaseRate oder ColdEffect, wobei letzteres irreführend ist) besteht aus der Standardgeschwindigkeit AnimSpeed und der Beschleunigung durch IAS von Fertigkeiten und Gegenständen respektive der negativen Beschleunigung durch Verlangsamungen verschiedener Art, ich nenne sie hier mal AnimAcc. Unser Formelgebilde sieht damit so aus:
AnimDuration = AnimLength * 256 / AnimSpeed * AnimAcc
Noch nicht kompliziert genug?
AnimAcc ist ein Prozentsatz. Folglich ist ohne Beschleunigung oder Verlangsamung AnimRate = 100, damit der Teil
AnimSpeed*100 / 100 = AnimSpeed
für die Standardgeschwindigkeit Gültigkeit behält.
Dazu kommen noch das effektive IAS EIAS, das fertigkeitenbezogene Skill-IAS, kurz SIAS, und die Basisgeschwindigkeit der verwendeten Waffe, präziser der Weapon Speed Modifier oder kurz WSM. Damit erweitern wir die bisherige Formel um:
AnimAcc = (AnimRate + SIAS + EIAS - WSM) / 100 *
Wobei EIAS wie alle via Ausrüstung beschleunigbaren Animationen Opfer einer Funktion ist, die als 'diminishing returns' bezeichnet wird. Dadurch sind immer höhere gegenstandsseitige Investitionen an IASItem notwendig, um noch einen weiteren Framesprung zu schaffen:
EIAS = [120 * IASItem / (120 + IASItem)]
Für unsere bisherige Formel folgt daraus als Weiterentwicklung:
AnimDuration = AnimLength * 256 / AnimSpeed * (AnimRate + SIAS + EIAS - WSM) / 100 *
Wem das Errechnen der EIAS Werte zu mühsam ist, der findet im Anhang GaiaCaTs Tabelle mit der Gegenüberstellung beider Werte.
Nun wird noch ein bißchen gerundet, damit auch wirklich ein ganzzahliges Ergebnis erzielt wird. Schließlich muß der Wert ja innerhalb des 25fps Spielzeitrasters auch darstellbar sein.
Außerdem sind von unserer Serie an Einzelbildchen das erste und das letzte immer gleich. Allerdings wird das letzte Bildchen niemals abgespielt. So wird sichergestellt, daß die Gesamtanimation 'rundläuft', auch wenn die gleiche Animation mehrmals hintereinander benötigt wird. Daher erhält unser Formelkonstrukt ganz am Ende noch eine -1.
Daraus ergibt sich als
Hauptformel
AnimDuration = {(AnimLength * 256) / [AnimSpeed * (AnimRate + SIAS + EIAS - WSM) / 100]} - 1 * mit EIAS = [120 * IASItem / (120 + IASItem)]
AnimDuration: Länge der Animation in Frames ('fpa') AnimLength: die vorgegebene Anzahl Frames pro Zyklus ('Frames per Direction') AnimSpeed: die vorgegebene Granulierung (auch 'extra precision', HitShift) AnimRate: Verlangsamungen SIAS: fertigkeitenbasierendes IAS WSM: Weapon Speed Modifier EIAS: effektives IAS aus IASItem IASItem: IAS von Gegenständen [ ]: abrunden { }: aufrunden SIAS und EIAS werden oftmals als EIAS zusammengefaßt dargestellt
Wurfwaffen erhalten beim Werfen einen Malus von 30 auf WSM in der Berechnung. Man wirft also grundsätzlich langsamer, als man mit derselben Waffe zuschlagen würde.
Serienattacken
Serienattacken sind Fend / Widersetzen, Strafe / Streuen (beide Amazone) und Zeal / Eifer des Paladins sowie Fury / Wut des Werwolfs und Dragon Talon / Drachenklaue.
Animationstechnisch betrachtet wird hier ein sogenannter 'Rollback' einer ganz normalen Angriffsanimation erzeugt. Der Animationszyklus beginnt wie die Standardattacke, wiederholt aber einige Frames um das sogenannte ActionFlag in einer Schleife und endet dann wiederum mit den letzten Frames der Standardattacke. Das ActionFlag markiert hierbei dasjenige Frame, bei dem die eigentliche Aktion - also das Auftreffen der Nahkampfwaffe auf den Gegner respektive das Abfeuern eines Pfeils - ausgeführt wird.
Dazu kommt noch eine kleine charakterklassenspezifische Besonderheit. Bei Amazonen und Zauberinnen ohne Waffe startet eine Rollback Animation erst mit dem zweiten Bild. Tragen die Mädels andere Waffen als Schußwaffen oder Zweihandspeere, so beginnen die Animationen erst mit dem dritten Bild. Vergleicht dazu Myrdinns Tabelle aus der d2common.dll.
siehe auch:
- Zeal for all Classes in der Lounge
- Amazon Zeal attack speed im Basin
besonders Myrdinns Postings
Sequenzanimation
Jab / Stoß, Impale / Aufspießen, alle klauenspezifischen Assassinenattacken, Leap Attack / Sprungangriff und Charge / Ansturm benutzen eine Sequenz von Animationen, also Zugriffe auf Teile verschiedener Animatioszyklen. Hier gibt es ein paar Besonderheiten zu berücksichtigen.
AnimDuration = {(AnimLength * 256) / [AnimSpeed * (AnimRate + SIAS + EIAS - WSM) / 100]} *
Puh, Glück gehabt, ist die gleiche Formel. Oder etwa doch nicht?
Offensichtlich fehlt die -1, diese kommt bei den Sequenzanimationen in der Tat nicht zur Anwendung.
Weniger offensichtlich ist, daß Sequenzanimationen +30 als Malus auf WSM * erhalten.
Achtung: * auf d2wissen sind die Basisgeschwindigkeiten, also die WSM Werte, vorzeichenvertauscht im Unterschied zum Arreat Summit. Wer mit den Werten von d2wissen rechnet, muß den WSM Wert in den Formeln addieren statt subtrahieren!
Ferner ist für die Geschwindigkeit des eigentlichen Zuschlagens weder bei Leap Attack noch bei Charge die Waffengeschwindigkeit von irgendeiner Bedeutung.
Frenzy / Raserei, Double Throw / Doppelwurf und Double Swing / Doppelschlag sind als Doppelwaffenattacken schon wieder so speziell, daß sie einen eigenen Abschnitt weiter unten erhalten haben. Auch Whirlwind / Wirbelwind nutzt die Sequenzanimation, aber das ist ohnehin eine Nummer für sich, die glücklicherweise bereits ausführlich nachgelesen werden kann. Bei Wirbelwind zählt nur und einzig IAS auf der Waffe!
siehe auch:
- Weapon Speed Mechanics, by Trucidation and Crystalion englisch
- general mechanisms, by JRichard englisch
- Weapon Speed Formula in der Lounge englisch
- Various Speed Questions im Basin englisch
- SpeedCaps by Nefarius englisch
- Waffengeschwindigkeitskalkulator auf indiablo.de
- neuer Waffengeschwindigkeitskalkulator auf indiablo.de
- Whirlwind Speed im Basin englisch
- Whirlwind Mechanism in der Lounge englisch
- Whirlwind, sehr technisch, von Myrdinn englisch
Angriffsgeschwindigkeit mit zwei Waffen
- betrifft nur Assassine und Barbar -
Werden mit zwei Waffen Angriffe ausgeführt, so ist IASitem auf der zweiten Waffe vollkommen unerheblich.Das gilt ausdrücklich auch wenn tatsächlich mit beiden Waffen zugeschlagen wird, nicht nur bei Attacken, die ohnehin nur mit der Haupthand durchgeführt werden, egal was in der Nebenhand ist.
EIAS = [120 * (∑IASitem - IAS2nd)/(120 + ∑IASitem - IAS2nd)]
Frenzy / Raserei Beschleunigungsformel
Vinc = 70 + (WSM1st + WSM2nd)/2 + ∑SIAS + EIAS fpa = {256 * 17 / [256 * Vinc / 100]} / 2
Double Swing / Doppelschwung Beschleunigungsformel
Vinc = 120 + (WSM1st + WSM2nd)/2 + ∑SIAS + EIAS fpa = {256 * 17 / [256 * Vinc / 100]} / 2
Double Throw / Doppelwurf Beschleunigungsformel
Vinc = 70 + (WSM1st + WSM2nd)/2 + ∑SIAS + EIAS fpa = {256 * 12 / [256 * Vinc / 100]} / 2
EIAS: effektiv wirkendes IAS IASitem: IAS auf Gegenständen IAS2nd: IAS auf Sekundärwaffe Vinc: Geschwindigkeitssteigerung (auch speed increase); hartkodierte Limits: (175 ≥ Vinc ≥ 15) WSM1st: Weapon Speed Modifier Primärwaffe WSM2nd: Weapon Speed Modifier Sekundärwaffe SIAS: IAS Fertigkeitenbonus (Frenzy, Fanatismus, BoS, Werwolf) fpa: Frames per Animation { }: aufrunden [ ]: abrunden
Nach neueren Erkenntnissen von HarzIV aka b.haart aka Behaart führt die Sequenzanimation der Doppelattacken des Barbaren zu ziemlich kruden Ergebnissen je nach primärer und sekundärer Waffe. Da mir das zu weit geht, verweise ich an dieser Stelle einfach auf den entsprechenden Thread im d2info-Forum.
siehe auch:
- Frenzy Guide von Grimborn englisch
- Frenzy IAS Formula von Kyrene englisch
- Frenzyspeed - teh FAQ von Behaart
- Frenzy IAS charge-up steps?, Anmerkungen von Hammerman englisch
Wandelformen
Die Wandelformen als Vampir oder Untoter Fetisch benutzen die obige Hauptformel, wobei die Werte der Wandelform eingesetzt werden, nicht die der Charaktere.
Abweichend sind also
Form | AnimLength | AnimSpeed |
---|---|---|
Vampir | 14 | 176 |
Untoter Fetisch | 12 | 256 |
Die Wandelformen als Werbär oder Werwolf sind etwas komplizierter, da hier auch die dem unverwandelten Charakter zugehörigen Werte in die Berechnung einfließen.
AnimDuration = {(AnimLength * 256) / [AnimSpeed * (AnimRate + SIAS + EIAS - WSM) / 100]} - 1 wobei AnimSpeed = [256 * Framesneutral / Delay] und Delay = [256 * FramesChar / [(100 + WIAS - WSM) * CharSpeed / 100]]
neue Variablen: Framesneutral: die Anzahl der Frames für die neutrale Animation (NU; Rumstehen) der Wandelform FramesChar: die Anzahl der Frames, die der unverwandelte Charakter für eine Angriffsanimation nutzt * CharSpeed: AnimSpeed des unverwandelten Charakters, siehe Auszug aus AnimData.d2 * Ausnahme sind Zweihandschwerter als Waffen, hier wird dann der Wert von Einhandschwertern herangezogen
Animation | Werwolf | Werbär |
---|---|---|
A1 | 13 | 12 |
S3 | 10 | 10 |
NU | 09 | 10 |
Credits / Danke
- Behaart
- BigEyedBug
- brianc84
- Crystalion
- GaiaCaT
- Grimborn
- Hammerman
- JRichard
- Kyrene
- Myrdinn
- mshannes
- Nefarius
- RTB
- Seisset
- TitanSeal
- Trucidation
- mishy23
Anhang
EIAS | IAS | EIAS | IAS | EIAS | IAS | EIAS | IAS | EIAS | IAS |
---|---|---|---|---|---|---|---|---|---|
1 | 2 | 21 | 26 | 41 | 63 | 61 | 125 | 81 | 250 |
2 | 3 | 22 | 27 | 42 | 65 | 62 | 129 | 82 | 259 |
3 | 4 | 23 | 29 | 43 | 68 | 63 | 133 | 83 | 270 |
4 | 5 | 24 | 30 | 44 | 70 | 64 | 138 | 84 | 280 |
5 | 6 | 25 | 32 | 45 | 72 | 65 | 142 | 85 | 292 |
6 | 7 | 26 | 34 | 46 | 75 | 66 | 147 | 86 | 304 |
7 | 8 | 27 | 35 | 47 | 78 | 67 | 152 | 87 | 317 |
8 | 9 | 28 | 37 | 48 | 80 | 68 | 157 | 88 | 330 |
9 | 10 | 29 | 39 | 49 | 83 | 69 | 163 | 89 | 345 |
10 | 11 | 30 | 40 | 50 | 86 | 70 | 168 | 90 | 360 |
11 | 13 | 31 | 42 | 51 | 89 | 71 | 174 | 91 | 377 |
12 | 14 | 32 | 44 | 52 | 92 | 72 | 180 | 92 | 395 |
13 | 15 | 33 | 46 | 53 | 95 | 73 | 187 | 93 | 414 |
14 | 16 | 34 | 48 | 54 | 99 | 74 | 194 | 94 | 434 |
15 | 18 | 35 | 50 | 55 | 102 | 75 | 200 | 95 | 456 |
16 | 19 | 36 | 52 | 56 | 105 | 76 | 208 | 96 | 480 |
17 | 20 | 37 | 54 | 57 | 109 | 77 | 215 | 97 | 507 |
18 | 22 | 38 | 56 | 58 | 113 | 78 | 223 | 98 | 535 |
19 | 23 | 39 | 58 | 59 | 117 | 79 | 232 | 99 | 566 |
20 | 24 | 40 | 60 | 60 | 120 | 80 | 240 | 100 | 600 |
Feedback und Korrekturen mit nachvollziehbarer Erläuterung nehme ich dankend via Mail über diese Adresse entgegen.