le pallier à 105 serait faux?

U

ulmo

Invité
On est en train de trouver la réponse :
L'animation utilisée n'est pas la même.
"Skills.txt", colonnes "anim" et "seqtrans", il y a "SC" pour la majorité des sorts et "SQ" pour "Lightning", "Chain Lightning" et "Inferno" (et lui personne ne l'a remarqué :razz: ).
Le problème maintenant, c'est que "SQ" n'est pas documenté dans "PlrMode.txt", et que je n'ai pas trouvé les COFs correspondants...
 
S

Spookey

Invité
B'jour,

Faut dire aussi que Inferno n'est pas très utilisé... lol...
Pis c'est un sort "permanent" non ? Par permanent, je veux dire qu'une fois que tu joues les cracheurs de feu, tant que tu relaches pas le bouton droit, les flammes sortent... C'est pas une succession de cast comme FB, Foudre ou ees... Enfin, je vois ça comme ça...
 
C

Constance

Invité
[citation=4579819,0,20][nom]gandalf a écrit[/nom]qu'est ce qui differencie un sort sans delai de l'autre?[/citation]
Ben le nombre de frames de l'animation justement :o ... Ulmo semble être d'accord :hmm:
 
U

ulmo

Invité
[citation=4579855,0,22][nom]Spookey a écrit[/nom]B'jour,

Faut dire aussi que Inferno n'est pas très utilisé... lol...
[/citation]Oui je sais bien...
Pis c'est un sort "permanent" non ? Par permanent, je veux dire qu'une fois que tu joues les cracheurs de feu, tant que tu relaches pas le bouton droit, les flammes sortent... C'est pas une succession de cast comme FB, Foudre ou ees... Enfin, je vois ça comme ça...
A mon avis c'est une succession rapide de casts. Après il faudrait voir en détail le role des colonnes suivantes "seqnum" et "seqinput", qui donnent :
[fixed]
anim seqtrans seqnum seqinput
Inferno SQ SQ 6 10
Lightning SQ SC 12
Chain Lightning SQ SC 12
Autres sorts SC SC
[/fixed]
 
Z

zedemimon

Invité
A mon avis ca veut dire que tu réduis la durée d'animation "précast"... :??:
 
F

Fou-Dangereux

Invité
/me viens de tester juste à l'instant entre 105 et 125 fc, ben à 125 ça a l'air + rapide lightning.
edit : je viens de chronométrer (sur 30 sec)
105 fc : 58 foudres
125 fc : 63 foudres

ça fait quand même 5 en +, pas négligeable

(à 115 ça change rien)

edit : le titre n'est pas bon, puisque à 105 ya un pallier, c'est juste quà 125 (pas testé à 120) il semble que foudre et EES gagnent un pallier
 
M

Myrdinn

Invité
Très très bien et surtout très intéressant.
Je pense que l'on est en train de découvrir une exclusivité sur D2 :)

Bon je viens de faire 2 traces, je donne mes notes brutes (assez difficle à comprendre), je les simplifierais plus tard.

Trace 1 : Ice Bolt
Pour les 2 traces mon perso à 26 en FastCast soit 21 en Effective FastCast

Pour commencer une photo d'écran de mon débugger qui a une importance très élévée ici
IceBolt.gif


[Fixed]
0097F180 8D0449 LEA EAX,DWORD PTR DS:[ECX+ECX*2]
0097F183 83C1 78 ADD ECX,78
0097F186 8D0480 LEA EAX,DWORD PTR DS:[EAX+EAX*4]
0097F189 C1E0 03 SHL EAX,3
0097F18C 99 CDQ
0097F18D F7F9 IDIV ECX
0097F18F 8BC8 MOV ECX,EAX[/fixed]

ECX=(FastCast*3*5*8)/(Fastcast+120)=FastCast*120/(Fastcast+120)
J'ai 26 en FC --> EAX=1A (Cf photo d'écran)
On voit également le Cof Utilisé ici SOSCSTF (Sorcière en SpellCasting avecun Staff)
ECX= EfeectiveFc = 15 pour moi

-------------------------------------------------------------------------------
2) Animation Speed
-------------------------------------------------------------------------------

[fixed]0097F191 8D41 64 LEA EAX,DWORD PTR DS:[ECX+64]

EAX=100+(FastCast*120)/(Fastcast+120)
Pour moi = 79 (121 en décimal)


0097F194 3D AF000000 CMP EAX,0AF
0097F199 7E 05 JLE SHORT D2Common.0097F1A0
0097F19B B8 AF000000 MOV EAX,0AF

Cappé à 175% (Donc EFC cappé à 75)

0097F1A0 8B53 0C MOV EDX,DWORD PTR DS:[EBX+C][/fixed]

EDX=EBX+C=AnimRate
EBX=COF File Name pour Moi SOSCSTF (Extrait ici)

[fixed]052C69B4 53 4F 53 43 53 54 46 00 SOSCSTF.
052C69BC 0E 00 00 00 00 01 00 00 ...... OE=14=Base+1 et 100=Animrate = 256
052C69C4 00 00 00 00 00 00 00 01 .......
052C69CC 00 00 00 00 00 00 00 00 ........[/fixed]

EDX=100 pour moi (256)

[fixed]0097F1A3 0FAFD0 IMUL EDX,EAX[/fixed]
AnimRate*(100+(FastCast*120)/(Fastcast+120))
EDX=7900(256*121)

[fixed]0097F1A6 B8 1F85EB51 MOV EAX,51EB851F
0097F1AB F7E2 MUL EDX

0097F1AD C1EA 05 SHR EDX,5
EDX=AnimRate*(100+(FastCast*120)/(Fastcast+120))/100
EDX=135 (Je noterais 1#35 à partir de maintenant car c'est exprimé en frame)

0097F1B0 85D2 TEST EDX,EDX
Animation Speed=0 ?

0097F1B2 7E 23 JLE SHORT D2Common.0097F1D7
Oui --> exit

0097F1B4 81FA FF7F0000 CMP EDX,7FFF
EDX Vs 32667

0097F1BA 8BC2 MOV EAX,EDX
EAX=Animation Speed

0097F1BC 7C 05 JL SHORT D2Common.0097F1C3
0097F1BE B8 FF7F0000 MOV EAX,7FFF
Cappé à 7FFF

0097F1C3 66:8945 4C MOV WORD PTR SS:[EBP+4C],AX
PtUnit[+4C]=Animation Speed = 135 stoqué en +4C dans les propriété de ma sorcière

0097F1C7 5F POP EDI
EDI=EDI Initial=EAX initial =0A pour moi

0097F1C8 0FBFC0 MOVSX EAX,AX
0097F1CB 8945 3C MOV DWORD PTR SS:[EBP+3C],EAX
PtUnit[+3C]=Animation Speed? = 00 Avant pour moi


0097F1CE 5E POP ESI
0097F1CF 5D POP EBP
0097F1D0 5B POP EBX
0097F1D1 83C4 10 ADD ESP,10
0097F1D4 C2 0C00 RETN 0C[/fixed]

Fin de la routine de calucl de la vitesse d'animation des sorts
Retour à la routine de gestion de l'animation des personnages (D2Common.10349)

[fixed] D2Common.10349)
0097E6B5 68 64090000 PUSH 964
0097E6BA 68 F45C9A00 PUSH D2Common.009A5CF4 ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Common\UNITS\Units.cpp"
0097E6BF 56 PUSH ESI
0097E6C0 896E 30 MOV DWORD PTR DS:[ESI+30],EBP
ESI+30=0 (XOR EBP,EBP) line 97E51A

0097E6C3 E8 88090000 CALL D2Common.#10376
10376 (Animation Speed)
On revient ICI mais j'ai laissé le début pour ceux que ca intérresseraient

0097E6C8 8B56 50 MOV EDX,DWORD PTR DS:[ESI+50]
EDX=UnitPtr+50=CofName Ptr

0097E6CB 5F POP EDI
EDI=0A (FastCast) Cf au dessus

0097E6CC 8B42 08 MOV EAX,DWORD PTR DS:[EDX+8]
EAX=BAse Frame+1 Pour moi = 0E soit 15

0097E6CF C1E0 08 SHL EAX,8
EAX=256*(Base Frame+1)

0097E6D2 8946 48 MOV DWORD PTR DS:[ESI+48],EAX
ESI+48=BAseFrame+1
ESI+4C=Animation Speed

0097E6D5 5E POP ESI
0097E6D6 5D POP EBP
0097E6D7 B8 01000000 MOV EAX,1
0097E6DC 5B POP EBX
0097E6DD 83C4 1C ADD ESP,1C
0097E6E0 C2 0400 RETN 4[/fixed]
On arrive ici avec tout ce qu'il faut pour gérer l'animmation

La longueur de l'animation = Base+1 * 256 car c'est un nombre d'image exprimé en 1/256eme
La vitesse de l'animation = AnimRate*(100+(FastCast*120)/(Fastcast+120))/100

Ensuite le jeu incrémente à chaque tick un compteur avec la vitesse d'animation
Quand le compteur est supérieur à la durée de l'animation l'animation estv terminée

On peu également exprimée ceci avec une formule mathématique que vous connaissez déjà
FastCast Ticks= [256*(Base+1)/(Animation Speed* (100+EFC)/100)] -1
avec EffectiveFastCast
EFC=(Somme des FastCast*120)/(Somme des FastCast+120)

OK Rien de nouveau on obtient bien les palliers archi connu.

Trace 2 : Lignthning(Foudre)
Pour les 2 traces mon perso à 26 en FastCast soit 21 en Effective FastCast

Pour commencer une photo d'écran de mon débugger qui a une importance très élévée ici
LightningBolt.gif

[fixed]0097F180 8D0449 LEA EAX,DWORD PTR DS:[ECX+ECX*2]
0097F183 83C1 78 ADD ECX,78
0097F186 8D0480 LEA EAX,DWORD PTR DS:[EAX+EAX*4]
0097F189 C1E0 03 SHL EAX,3
0097F18C 99 CDQ
0097F18D F7F9 IDIV ECX
0097F18F 8BC8 MOV ECX,EAX

ECX=(FastCast*3*5*8)/(Fastcast+120)=FastCast*120/(Fastcast+120)
J'ai 26 en FC --> EAX=1A (Cf photo d'écran)
On voit également le Cof Utilisé ici SOGHSTF (Sorcière en GetHit-FastHitRecovery) avecun Staff)
ECX= EfeectiveFc = 15 pour moi

-------------------------------------------------------------------------------
2) Animation Speed
-------------------------------------------------------------------------------

0097F191 8D41 64 LEA EAX,DWORD PTR DS:[ECX+64]

EAX=100+(FastCast*120)/(Fastcast+120)
Pour moi = 79 (121 en décimal)


0097F194 3D AF000000 CMP EAX,0AF
0097F199 7E 05 JLE SHORT D2Common.0097F1A0
0097F19B B8 AF000000 MOV EAX,0AF

Cappé à 175% (Donc EFC cappé à 75)

0097F1A0 8B53 0C MOV EDX,DWORD PTR DS:[EBX+C][/fixed]
EDX=EBX+C=AnimRate
EBX=COF File Name pour Moi SOGHSTF :??: Le jeu utilise l'animation du GetHit (FastHitRecovery) pour l'attaque foudre

[fixed]052BA738 53 4F 47 48 53 54 46 00 SOGHSTF.
052BA740 08 00 00 00 00 01 00 00 ...... Base+1 = 8 AnimSpeed = 256
052BA748 00 00 00 00 00 00 00 00 ........

EDX=100 pour moi (256)

0097F1A3 0FAFD0 IMUL EDX,EAX
AnimRate*(100+(FastCast*120)/(Fastcast+120))
EDX=7900(256*121)

0097F1A6 B8 1F85EB51 MOV EAX,51EB851F
0097F1AB F7E2 MUL EDX

0097F1AD C1EA 05 SHR EDX,5
EDX=AnimRate*(100+(FastCast*120)/(Fastcast+120))/100
EDX=animation Speed = 135 (Je noterais 1#35 à partir de maintenant car c'est exprimé en frame) L'animation avance de 1 image et 35/256 eme par ticks

0097F1B0 85D2 TEST EDX,EDX
Animation Speed=0 ?

0097F1B2 7E 23 JLE SHORT D2Common.0097F1D7
Oui --> exit

0097F1B4 81FA FF7F0000 CMP EDX,7FFF
EDX Vs 32667

0097F1BA 8BC2 MOV EAX,EDX
EAX=Animation Speed

0097F1BC 7C 05 JL SHORT D2Common.0097F1C3
0097F1BE B8 FF7F0000 MOV EAX,7FFF
Cappé à 7FFF

0097F1C3 66:8945 4C MOV WORD PTR SS:[EBP+4C],AX
PtUnit[+4C]=Animation Speed = 135 stoqué en +4C dans les propriété de ma sorcière

0097F1C7 5F POP EDI
EDI=EDI Initial=EAX initial =0A pour moi = Etat du Joueur(Mod) ici OA correspond à SC pour Spell Casting (Cf PlrModes.txt)

0097F1C8 0FBFC0 MOVSX EAX,AX
0097F1CB 8945 3C MOV DWORD PTR SS:[EBP+3C],EAX
PtUnit[+3C]=Animation Speed = 135 L'animation speed est stoqué en 2 endroits dans les propriétés du joueur, 1 représente la vitesse l'autre un compteur

0097F1CE 5E POP ESI
0097F1CF 5D POP EBP
0097F1D0 5B POP EBX
0097F1D1 83C4 10 ADD ESP,10
0097F1D4 C2 0C00 RETN 0C[/fixed]

Bon on obtient exactement la même chose à l'exception du COF utilisé
Fin de la routine de calucl de la vitesse d'animation des sorts
Retour à la routine de gestion de l'animation des personnages (D2Common.10349)
Sauf qu'au lieu de terminer sur le 349 classqiue les sorts en question utilise le calcul de vitesse des attaques Kick de l'assassin :)


[fixed]Kick Special Animation Part
0097E622 56 PUSH ESI
0097E623 E8 7841FBFF CALL D2Common.#10682
0097E628 3BC5 CMP EAX,EBP
0097E62A 8946 30 MOV DWORD PTR DS:[ESI+30],EAX
0097E62D 74 67 JE SHORT D2Common.0097E696
0097E62F 56 PUSH ESI
0097E630 E8 6B42FBFF CALL D2Common.#10683
0097E635 56 PUSH ESI
0097E636 8946 34 MOV DWORD PTR DS:[ESI+34],EAX
0097E639 896E 38 MOV DWORD PTR DS:[ESI+38],EBP
0097E63C C746 3C 00010000 MOV DWORD PTR DS:[ESI+3C],100
0097E643 E8 7842FBFF CALL D2Common.#10684
Kick Animation Length[/fixed]
C'est cette partie que je doit tracer de nouveau
J'ai juste regarder le résultat et ici le base+1 = 19 :??:
En réalité j'ai regardé un peu on a 2 animations de GetHit de 8 Frames et un arrêt de 3 frames entre les 2, mais je préfère le confirmer plus tard

[fixed]0097E648 C1E0 08 SHL EAX,8
0097E64B 8946 48 MOV DWORD PTR DS:[ESI+48],EAX
0097E64E 8D5424 20 LEA EDX,DWORD PTR SS:[ESP+20]
0097E652 8D4424 24 LEA EAX,DWORD PTR SS:[ESP+24]
0097E656 52 PUSH EDX
0097E657 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20]
0097E65B 50 PUSH EAX
0097E65C 8B46 38 MOV EAX,DWORD PTR DS:[ESI+38]
0097E65F 8D5424 20 LEA EDX,DWORD PTR SS:[ESP+20]
0097E663 51 PUSH ECX
0097E664 8B4E 30 MOV ECX,DWORD PTR DS:[ESI+30]
0097E667 52 PUSH EDX
0097E668 55 PUSH EBP
0097E669 50 PUSH EAX
0097E66A 51 PUSH ECX
0097E66B E8 7042FBFF CALL D2Common.#10685
0097E670 6A 01 PUSH 1
0097E672 8B5424 1C MOV EDX,DWORD PTR SS:[ESP+1C]
0097E676 8B4424 20 MOV EAX,DWORD PTR SS:[ESP+20]
0097E67A 8A4C24 24 MOV CL,BYTE PTR SS:[ESP+24]
0097E67E 8956 40 MOV DWORD PTR DS:[ESI+40],EDX
0097E681 C1E0 08 SHL EAX,8
0097E684 884E 4E MOV BYTE PTR DS:[ESI+4E],CL
0097E687 BA 00400000 MOV EDX,4000
0097E68C 8BCE MOV ECX,ESI
0097E68E 8946 44 MOV DWORD PTR DS:[ESI+44],EAX
0097E691 E8 CA300000 CALL D2Common.00981760
0097E696 68 61090000 PUSH 961
0097E69B 68 F45C9A00 PUSH D2Common.009A5CF4 ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Common\UNITS\Units.cpp"

0097E6A0 56 PUSH ESI
0097E6A1 E8 AA090000 CALL D2Common.#10376
10376 (Animation Speed)

0097E6A6 5F POP EDI
0097E6A7 5E POP ESI
0097E6A8 5D POP EBP
0097E6A9 B8 01000000 MOV EAX,1
0097E6AE 5B POP EBX
0097E6AF 83C4 1C ADD ESP,1C
0097E6B2 C2 0400 RETN 4[/fixed]
Bon je ne commente pas la fin car ca n'a pas d'interêt pour le moment

C'est extremement brut mais je voulais vous informer au fure t àmesure de mon avancement :)

A suivre
 

Carou

Membre
Oh mon dieu comment tu veux que j'intègre ca dans le guide :tired:

Bon on va déjà attendre que tu ai terminé :)

EBX change mais ca ne modifie pas le calcul intermédiaire si j'ai bien compris, mais après le jeu utilise le calcul des kick de l'assassin ??

Il compterai (sous réserve) 2 ani de FHR + 3 frames intermédiaires... mais en quoi augmenter le fast cast joue là dessus ?? Les kick de l'asn ne tournent pas au fast cast, le calcul ne devrait pas être modifié ??
 
M

Myrdinn

Invité
OK Carou je venais juste de terminer le trace qunad j'ia posté, encore une fois c'est difficile à absorber :lol:
Le calcul de la vitesse d'animation ne change pas, c'est ce que je démontre ici. Par contre l'animation ferais 19 frames au lieu de 15 soit 4frames de plus donc la formule non développeée étant

Nombre de tick(Frames) = Longueur de l'animation / Vitesse d'animation
Ce qui développé devient
FastCast Ticks= [256*(Base+1)/(Animation Speed* (100+EFC)/100)] -1
avec EffectiveFastCast
EFC=(Somme des FastCast*120)/(Somme des FastCast+120)

est différent

Si on prend 19 images comme hypothèse et la même formule de calcul (Ce que je ne peux pas prouver pour le moment) les palliers deviennent
FastCast --> Nombre de Ticks
0 --> 18
7 --> 17
15 --> 16
23 --> 15
35 --> 14
52 --> 13
78 --> 12
117 --> 11
194 --> 10

Personnellement je ne pense pas que ce soit si simpliste (trop lent ca se saurait, encore que j'ai déjà vu plus flagrant ;) , a confirmer) , je pense qu'en cas de répétition la séquence n'est pas forcément jouer en entier

Bref à suivre
 
G

Gandalf

Invité
bon j'ai essayer de suivre, mais c'est pas evident :D en fait j'ai pas trop compris pkoi tu parlais de FHR, et de kick de l'assassin...
 
U

ulmo

Invité
[citation=4579962,0,30][nom]Myrdinn a écrit[/nom]je pense qu'en cas de répétition la séquence n'est pas forcément jouer en entier[/citation]Il y a un lien avec la colonne "seqnum" ?

D'autre part, es-tu capable de m'expliquer comment a procédé la personne qui a ralenti le jeu jusqu'à pouvoir compter les images d'une animation ?
On en parle dans le post sur les vitesses du jeu ou sur PK, lorsque quelqu'un se rend compte qu'il manque les deux premières images d'une animation d'attaque de l'amazone.
 
M

Myrdinn

Invité
[citation=4579963,30,1][nom]gandalf a écrit[/nom]bon j'ai essayer de suivre, mais c'est pas evident :D en fait j'ai pas trop compris pkoi tu parlais de FHR, et de kick de l'assassin...
[/citation]

Le FHR car le sort Lightning utilise comme animation celle fu FHR (2 fois avec une petite animation au milieu)
Et le calcul du nombre d'image utilise la même routine que celle du kick de l'assassin.

@Lameth. Il risque de s'agiter souvent car j'ai bien l'intention de creuser la chose :lol:
 
M

Myrdinn

Invité
[citation=4579966,30,3][nom]Ulmo a écrit[/nom]Il y a un lien avec la colonne "seqnum" ?

D'autre part, es-tu capable de m'expliquer comment a procédé la personne qui a ralenti le jeu jusqu'à pouvoir compter les images d'une animation ?
On en parle dans le post sur les vitesses du jeu ou sur PK, lorsque quelqu'un se rend compte qu'il manque les deux premières images d'une animation d'attaque de l'amazone.
[/citation]
A ma connaissance ce n'est plus possible. Personne n'a troiuvé le code pour la 1.10 et celui de la 1.08 ne fonctionne plus

EDIT je poste ici chez les sorcières car cous êtes très perspicaces et vous m'avez convaincu de regarder le code de nouveau, mais cec iest valable pour toutes les calsses qui utiliseraient des sequences au lieu du traditionnel SpellCasting :D
 
L

Lameth

Invité
pour ralentir le jeu, je crois qu'il y a une option au lancement du jeu (-fr je crois, enfin suffit de regarder dans le post avec les options de lancement). Par contre j'ai jamais réussi à la faire marcher cette option :p

edit: bon bah c'est pas ça en fait alors :p
 
M

Myrdinn

Invité
Si si c'est ça .L'option existait sous D2c et quelqu'un l'avait réintégrée pour la 1.08, c'est pourquoi je parle de code :D
 
L

Lameth

Invité
[citation=4579967,0,34][nom]Myrdinn a écrit[/nom]Le FHR car le sort Lightning utilise comme animation celle fu FHR (2 fois avec une petite animation au milieu)
Et le calcul du nombre d'image utilise la même routine que celle du kick de l'assassin.

@Lameth. Il risque de s'agiter souvent car j'ai bien l'intention de creuser la chose :lol:
[/citation]

donc le jeu utilise la longueur de l'anim, le flag action, et le starting frame du kick de l'assassin avec la formule de fc (sous réserve que c'est bien celle qui est utilisée) et pour l'affichage, il utilise les anim de fhr ? Donc le (2x8 + une anim de 3 au milieu) est variable? (je vérifie que j'ai bien comrpis jusque là :p )
 
G

Gandalf

Invité
chouette :) merci myrdinn, et je vais faire comme Lameth, attendre d'en savoir plus et rester avec mon drapeaux ^^
 
L

Lameth

Invité
[citation=4579972,0,39][nom]gandalf a écrit[/nom]chouette :) merci myrdinn, et je vais faire comme myrdinn, attendre d'en savoir plus et rester avec mon drapeaux ^^ et merci myrdinn ;)
[/citation]

tu ferais pas un e fixation sur quelqu'un? :p
 
Haut