WOW
CLASSIC
DIABLO IV
DIABLO III
DIABLO II
HEARTHSTONE
OVERWATCH
AUTRES SITES
Diablo Immortal
Diablo
Warcraft Rumble
Warcraft III
Warcraft II
Warcraft
StarCraft II
StarCraft
Heroes of the Storm
Heroes Builder
Legends
Film Warcraft
Destiny 2
StarCraft : Ghost
Forum
Accueil
Forums
Nouveaux messages
Rechercher dans les forums
Quoi de neuf
Nouveaux messages
Nouveaux messages de profil
Dernières activités
Membres
Visiteurs actuels
Nouveaux messages de profil
Rechercher dans les messages de profil
Connexion
S'inscrire
Quoi de neuf
Rechercher
Rechercher
Rechercher par titre uniquement
Par:
Nouveaux messages
Rechercher dans les forums
Menu
Connexion
S'inscrire
Installer l'application
Installer
Note:
This feature may not be available in some browsers.
Accueil
Forums
Diablo
Diablo 2
Classes
Barbare
Quelques questions techniques...
JavaScript est désactivé. Pour une meilleure expérience, s'il vous plaît activer JavaScript dans votre navigateur avant de continuer.
Vous utilisez un navigateur obsolète. Il se peut qu'il n'affiche pas correctement ce site ou d'autres.
Vous devez le mettre à niveau ou utiliser un
navigateur alternatif
.
Répondre au sujet
Message
<blockquote data-quote="Myrdinn" data-source="post: 6719"><p>Hum certain de ce que j'annonce. LE test est effectué sur PlrMode.txt </p><p>[code]Contenu de plrmode.txt</p><p>Name Token</p><p>Death DT</p><p>Neutral NU</p><p>Walk WL</p><p>Run RN</p><p>Get Hit GH</p><p>Town Neutral TN</p><p>Town Walk TW</p><p>Attack1 A1</p><p>Attack2 A2</p><p>Block BL</p><p>Cast SC</p><p>Throw TH</p><p>Kick KK</p><p>Skill1 S1</p><p>Skill2 S2</p><p>Skill3 S3</p><p>Skill4 S4</p><p>Dead DD</p><p>Sequence GH</p><p>Knock back GH[/code]</p><p>Voila les différents MODES d'un joueur, ces MODES sont numérotés 0=Death, 2 =Walk, 3=run ...</p><p></p><p>MAintenant la routine du block</p><p></p><p>[code]0008110E 90 NOP</p><p>0008110F 90 NOP</p><p>00081110 53 PUSH EBX</p><p>00081111 56 PUSH ESI</p><p>00081112 57 PUSH EDI</p><p>00081113 8BF2 MOV ESI,EDX</p><p>00081115 8BD9 MOV EBX,ECX</p><p>00081117 E8 B4C0FFFF CALL 0007D1D0</p><p>0008111C 8B40 50 MOV EAX,DWORD PTR DS:[EAX+50][/code]</p><p>Bon le début de routine classique avec sauvegarde des pointeurs.</p><p>Notez le EAX+50. Le registre EAX contient l'adresse du GamePtr et en +50 on a le type de jeu 0=D2c et 1=LOD.</p><p></p><p>[code]0008111F 50 PUSH EAX</p><p>00081120 56 PUSH ESI</p><p>00081121 E8 16400400 CALL 000C513C[/code]</p><p>C'est la fonction D2common.10433. Celle qui calcule le block.</p><p>Elle tient compte de 2 paramètres</p><p>EAX=D2c ou LOD (les calculs etant différents pour d2c et LOD. </p><p>ESI=Ptr de l'unité defenseur (celle qui bloque)</p><p>LE résultat est la formule archi connue d block pas la peine de m'étendre sur son fonctionnement.</p><p></p><p>[code]00081126 8BF8 MOV EDI,EAX</p><p>00081128 85FF TEST EDI,EDI</p><p>0008112A 74 79 JE SHORT 000811A5[/code]</p><p>%Block=0? si oui exit (pas de block) sinon on continue</p><p></p><p>[code]0008112C 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]</p><p>00081130 85C0 TEST EAX,EAX</p><p>00081132 74 71 JE SHORT 000811A5[/code]</p><p>Un test d'un flag <strong>L'attaque ne peut pas être bloquée</strong> C'est une nouveauté de la 1.09. Pour l'instant elle n'a pas de rélaité mais je suis prêt à parier qu'il y aura une nouvelle compétence <em>qui ne peut être bloquée </em> dans la 1.10</p><p>Bref on annule le bloque si l'attaquant à ne peut etre bloqué et exit. Sinon on continu</p><p></p><p>[code]00081134 833E 00 CMP DWORD PTR DS:[ESI],0</p><p>00081137 75 20 JNZ SHORT 00081159[/code]</p><p>La cible est elle un joueur. Sinon saut vers "la résolution du block" la suite ne s'applique qu'aux joueurs.</p><p></p><p>[code]00081139 56 PUSH ESI</p><p>0008113A E8 D93F0400 CALL 000C5118</p><p>0008113F 85C0 TEST EAX,EAX</p><p>00081141 74 16 JE SHORT 00081159[/code]</p><p>Test si le joueur est dans un etat déplacement</p><p>On est en déplacement si le joueur est soit dans le MODE2 soit le MODE3 soit le MODE 6. </p><p>Bref si tu regardes dans le fichiers ces etats sont WALK / RUN /TOWN WALK. Bref Trombe même si c'est un déplacement n'est pas inclus dans le test.</p><p></p><p>Si oui on continue, autrement on sort de la procédure (= %block normal) et on continue sur la "résolution du block")</p><p></p><p>[code]37E 0C 02 CMP DWORD PTR DS:[ESI+C],2</p><p>00081147 74 10 JE SHORT 00081159[/code]</p><p>Regarde si on est dans le mode 2 = WALK</p><p>Dans ce cas exit vers la résolution</p><p>Si on continue on est soit en MODE RUN Soit TOWNWALK</p><p></p><p>[code]00081149 B8 56555555 MOV EAX,55555556</p><p>0008114E F7EF IMUL EDI</p><p>00081150 8BCA MOV ECX,EDX</p><p>00081152 C1E9 1F SHR ECX,1F</p><p>00081155 03D1 ADD EDX,ECX</p><p>00081157 8BFA MOV EDI,EDX[/code]</p><p>C'est une division par 3 en assembleur.</p><p>Bref si on est en mode RUN ou TOWNWALK(peu importe, on ne peux pas être attqué dans ce mode, cependant si je fais un mod ou c'est possible le Block est très mauvais en ville) le %BLOCK est divisé par 3 </p><p></p><p>[code]00081159 55 PUSH EBP</p><p>0008115A BA 64000000 MOV EDX,64</p><p>0008115F 8D4E 2C LEA ECX,DWORD PTR DS:[ESI+2C]</p><p>00081162 E8 99360400 CALL 000C4800</p><p>00081167 8BE8 MOV EBP,EAX</p><p>00081169 8BCB MOV ECX,EBX</p><p>0008116B 68 38B5D16F PUSH 6FD1B538</p><p>00081170 55 PUSH EBP</p><p>00081171 57 PUSH EDI</p><p>00081172 56 PUSH ESI</p><p>00081173 E8 58C0FFFF CALL 0007D1D0</p><p>00081178 8BC8 MOV ECX,EAX</p><p>0008117A 8BD3 MOV EDX,EBX</p><p>0008117C E8 BF970000 CALL 0008A940</p><p>00081181 3BEF CMP EBP,EDI</p><p>00081183 5D POP EBP</p><p>00081184 7D 0B JGE SHORT 00081191</p><p>00081186 5F POP EDI</p><p>00081187 5E POP ESI</p><p>00081188 B8 01000000 MOV EAX,1</p><p>0008118D 5B POP EBX</p><p>0008118E C2 0800 RETN 8 ...[/code]</p><p></p><p>Bon la suite est la <strong>Résolution du block</strong>, c'est un tirage aléatoire entre 1 et 100 pour voir si le block est réussi plus diverse procédures de sortie, pas la peine de faire un cours complet sur le block <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite8" alt=":D" title="Big grin :D" loading="lazy" data-shortname=":D" /></p><p></p><p></p><p>Bref je suis très étonné par ce que tu me racontes, Pendant la trombe on est dans le MODE 7 ATTACK1.</p><p>Pourrais tu me donner les protocoles de tests qui t'ammène à de telles conclusions, je suis prêt à les reproduire et à tracer la procédure de block ligne par ligne pour le confirmer/contredire si nécessaire.</p><p></p><p>Merci d'avance.</p><p></p><p>EDIT J'ai laissé l'assembleur pour les puristes. </p><p>On peut églament suivre le cheminement du jeu (sans comprendre l'assembleur en sautant les lignes d'assembleur) en ne lisant que le texte entre les [ code ]</p></blockquote><p></p>
[QUOTE="Myrdinn, post: 6719"] Hum certain de ce que j'annonce. LE test est effectué sur PlrMode.txt [code]Contenu de plrmode.txt Name Token Death DT Neutral NU Walk WL Run RN Get Hit GH Town Neutral TN Town Walk TW Attack1 A1 Attack2 A2 Block BL Cast SC Throw TH Kick KK Skill1 S1 Skill2 S2 Skill3 S3 Skill4 S4 Dead DD Sequence GH Knock back GH[/code] Voila les différents MODES d'un joueur, ces MODES sont numérotés 0=Death, 2 =Walk, 3=run ... MAintenant la routine du block [code]0008110E 90 NOP 0008110F 90 NOP 00081110 53 PUSH EBX 00081111 56 PUSH ESI 00081112 57 PUSH EDI 00081113 8BF2 MOV ESI,EDX 00081115 8BD9 MOV EBX,ECX 00081117 E8 B4C0FFFF CALL 0007D1D0 0008111C 8B40 50 MOV EAX,DWORD PTR DS:[EAX+50][/code] Bon le début de routine classique avec sauvegarde des pointeurs. Notez le EAX+50. Le registre EAX contient l'adresse du GamePtr et en +50 on a le type de jeu 0=D2c et 1=LOD. [code]0008111F 50 PUSH EAX 00081120 56 PUSH ESI 00081121 E8 16400400 CALL 000C513C[/code] C'est la fonction D2common.10433. Celle qui calcule le block. Elle tient compte de 2 paramètres EAX=D2c ou LOD (les calculs etant différents pour d2c et LOD. ESI=Ptr de l'unité defenseur (celle qui bloque) LE résultat est la formule archi connue d block pas la peine de m'étendre sur son fonctionnement. [code]00081126 8BF8 MOV EDI,EAX 00081128 85FF TEST EDI,EDI 0008112A 74 79 JE SHORT 000811A5[/code] %Block=0? si oui exit (pas de block) sinon on continue [code]0008112C 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14] 00081130 85C0 TEST EAX,EAX 00081132 74 71 JE SHORT 000811A5[/code] Un test d'un flag [b]L'attaque ne peut pas être bloquée[/b] C'est une nouveauté de la 1.09. Pour l'instant elle n'a pas de rélaité mais je suis prêt à parier qu'il y aura une nouvelle compétence [i]qui ne peut être bloquée [/i] dans la 1.10 Bref on annule le bloque si l'attaquant à ne peut etre bloqué et exit. Sinon on continu [code]00081134 833E 00 CMP DWORD PTR DS:[ESI],0 00081137 75 20 JNZ SHORT 00081159[/code] La cible est elle un joueur. Sinon saut vers "la résolution du block" la suite ne s'applique qu'aux joueurs. [code]00081139 56 PUSH ESI 0008113A E8 D93F0400 CALL 000C5118 0008113F 85C0 TEST EAX,EAX 00081141 74 16 JE SHORT 00081159[/code] Test si le joueur est dans un etat déplacement On est en déplacement si le joueur est soit dans le MODE2 soit le MODE3 soit le MODE 6. Bref si tu regardes dans le fichiers ces etats sont WALK / RUN /TOWN WALK. Bref Trombe même si c'est un déplacement n'est pas inclus dans le test. Si oui on continue, autrement on sort de la procédure (= %block normal) et on continue sur la "résolution du block") [code]37E 0C 02 CMP DWORD PTR DS:[ESI+C],2 00081147 74 10 JE SHORT 00081159[/code] Regarde si on est dans le mode 2 = WALK Dans ce cas exit vers la résolution Si on continue on est soit en MODE RUN Soit TOWNWALK [code]00081149 B8 56555555 MOV EAX,55555556 0008114E F7EF IMUL EDI 00081150 8BCA MOV ECX,EDX 00081152 C1E9 1F SHR ECX,1F 00081155 03D1 ADD EDX,ECX 00081157 8BFA MOV EDI,EDX[/code] C'est une division par 3 en assembleur. Bref si on est en mode RUN ou TOWNWALK(peu importe, on ne peux pas être attqué dans ce mode, cependant si je fais un mod ou c'est possible le Block est très mauvais en ville) le %BLOCK est divisé par 3 [code]00081159 55 PUSH EBP 0008115A BA 64000000 MOV EDX,64 0008115F 8D4E 2C LEA ECX,DWORD PTR DS:[ESI+2C] 00081162 E8 99360400 CALL 000C4800 00081167 8BE8 MOV EBP,EAX 00081169 8BCB MOV ECX,EBX 0008116B 68 38B5D16F PUSH 6FD1B538 00081170 55 PUSH EBP 00081171 57 PUSH EDI 00081172 56 PUSH ESI 00081173 E8 58C0FFFF CALL 0007D1D0 00081178 8BC8 MOV ECX,EAX 0008117A 8BD3 MOV EDX,EBX 0008117C E8 BF970000 CALL 0008A940 00081181 3BEF CMP EBP,EDI 00081183 5D POP EBP 00081184 7D 0B JGE SHORT 00081191 00081186 5F POP EDI 00081187 5E POP ESI 00081188 B8 01000000 MOV EAX,1 0008118D 5B POP EBX 0008118E C2 0800 RETN 8 ...[/code] Bon la suite est la [b]Résolution du block[/b], c'est un tirage aléatoire entre 1 et 100 pour voir si le block est réussi plus diverse procédures de sortie, pas la peine de faire un cours complet sur le block :D Bref je suis très étonné par ce que tu me racontes, Pendant la trombe on est dans le MODE 7 ATTACK1. Pourrais tu me donner les protocoles de tests qui t'ammène à de telles conclusions, je suis prêt à les reproduire et à tracer la procédure de block ligne par ligne pour le confirmer/contredire si nécessaire. Merci d'avance. EDIT J'ai laissé l'assembleur pour les puristes. On peut églament suivre le cheminement du jeu (sans comprendre l'assembleur en sautant les lignes d'assembleur) en ne lisant que le texte entre les [ code ] [/QUOTE]
Nom d'utilisateur
Vérification
Poster une réponse
Accueil
Forums
Diablo
Diablo 2
Classes
Barbare
Quelques questions techniques...
Haut