暗黑破坏神3玩家中文网
主站 暗黑3 暗黑2 基础介绍 任务帮助 场景地图 怪物资料 攻略 装备库 NPC 角色职业 魔法技能 精彩视频 图库 人物存档 下载 CNBN战网
您现在的位置: 暗黑破坏神2中文网 >> 暗黑2攻略 >> 正文 收藏本文
暗黑Beta | 暗黑1 | 地狱火 | 暗黑2 | 毁灭之王 | 暗黑3

超级随机金怪属性奖励程序

..::| 暗黑破坏神2资料站 · 收藏本文 · 【字体: 】 |::..
前言: 我想大家都看过ghost9988(2years)在v1.10初期的大作1.10 怪物元素抵抗及免疫的总结分析,从中应该受益良多。
近日,Nefarius公布了对超级和随机金怪防御和抗性相关Mod奖励的解析结果This function handles boss AC and all boss resistance boni,从中我们可以看到一些新的东西。
由于Nefarius基本是直接给出的v1.10各程序段的结论,所以我找到了v1.11b的相关程序,并对每个程序段重新作了较为详细的注释(基本是逐句注释,考虑到其中涉及的基本都是固定的代码及其名称,所以全部用英文注释)。
鉴于我极其有限的汇编水平,如有错误纰漏的地方,勿怪。

*由于从v1.11开始,Blizzard把许多Functions拆开放到不同的地方。对电脑来说,只不过是换了一行内存地址,但对Reader来说实在是增加了许多麻烦。
v1.11b,Blizzard又让其变了一次。
所以,许多Reader都宁可解析v1.10,况且,v1.11/v1.11b各程序只是有些小改动(如某些函数语句的改变),其功能基本都没有改变。
*v1.10的Function由Nefarius解析。
*当然,我会尽量找到并解析最新版本的程序。

≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈清新脱俗的分割线≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈

程序起始及几个退出设定

CF D2Game.6FD08B10
CODE:
6FD08B10 /$ 83EC 0C     SUB ESP,0C
6FD08B13 |. 56         PUSH ESI
6FD08B14 |. 8BF1       MOV ESI,ECX
6FD08B16 |. 85F6       TEST ESI,ESI
6FD08B18 |. 895424 0C     MOV DWORD PTR SS:[ESP+C],EDX
6FD08B1C |. 0F84 82020000 JE D2GAME.6FD08DA4
6FD08B22 |. 8B06       MOV EAX,DWORD PTR DS:[ESI]
6FD08B24 |. 83F8 01     CMP EAX,1
6FD08B27 |. 0F85 77020000 JNZ D2GAME.6FD08DA4
6FD08B2D |. 8B4424 14     MOV EAX,DWORD PTR SS:[ESP+14]
6FD08B31 |. 85C0       TEST EAX,EAX
6FD08B33 |. 0F84 6B020000 JE D2GAME.6FD08DA4
[Copy to clipboard]


##################################################################

Stone Skin AC Function

CF D2Game.6FD08B39
CODE:
6FD08B39 |. 83FA 1C     CMP EDX,1C               ; uniquemod 28 (Stone Skin)
6FD08B3C |. 75 17       JNZ SHORT D2GAME.6FD08B55     ; not Stone Skin, jump the Get Monster Quondam Resistances Function
6FD08B3E |. 6A 00       PUSH 0                                  
6FD08B40 |. 6A 1F       PUSH 1F                 ; StatID 31 (armorclass)
6FD08B42 |. 56         PUSH ESI
6FD08B43 |. E8 A818F2FF   CALL     ; get inherent armorclass
6FD08B48 |. 6A 00       PUSH 0
6FD08B4A |. D1E0       SHL EAX,1                 ; EAX ← armorclass*2
6FD08B4C |. 50         PUSH EAX                
6FD08B4D |. 6A 1F       PUSH 1F                  
6FD08B4F |. 56         PUSH ESI                
6FD08B50 |. E8 E918F2FF   CALL     ; armorclass = armorclass*2
[Copy to clipboard]

如果没检测到Stone Skin,则跳到Get Monster Quondam Resistances Function

如果有Stone Skin,则怪物防御=基础防御×2
依序执行D2Game.6FD08B55地址的指令


*Stone Skin仅仅使怪物防御×2,而非AS所言的×3
*CALL 是得到当前属性原有数值的Function
*CALL 是得到当前属性经过增加后的数值的Function
*SHL EAX,1 二进制逻辑左移一位即十进制×2
*16进制1Ch = 十进制28d,1Fh = 31d

##################################################################

Get Monster Quondam Resistances Function

CF D2Game.6FD08B55
CODE:
6FD08B55 |> 53         PUSH EBX
6FD08B56 |. 55         PUSH EBP
6FD08B57 |. 57         PUSH EDI
6FD08B58 |. 6A 00       PUSH 0
6FD08B5A |. 6A 27       PUSH 27                   ; StatID 39 (fireresist)
6FD08B5C |. 56         PUSH ESI
6FD08B5D |. C74424 2C 0000>MOV DWORD PTR SS:[ESP+2C],0
6FD08B65 |. E8 8618F2FF   CALL     ; get fireresist
6FD08B6A |. 6A 00       PUSH 0
6FD08B6C |. 6A 29       PUSH 29                   ; StatID 41 (lightresist)
6FD08B6E |. 56         PUSH ESI
6FD08B6F |. 8BF8       MOV EDI,EAX                 ; EDI ← fireresist
6FD08B71 |. E8 7A18F2FF   CALL     ; get lightresist
6FD08B76 |. 6A 00       PUSH 0
6FD08B78 |. 6A 2B       PUSH 2B                   ; StatID 43 (coldresist)
6FD08B7A |. 56         PUSH ESI
6FD08B7B |. 894424 1C     MOV DWORD PTR SS:[ESP+1C],EAX     ; ESP+1Ch ← lightresist  
6FD08B7F |. E8 6C18F2FF   CALL     ; get coldresist
6FD08B84 |. 6A 00       PUSH 0
6FD08B86 |. 6A 2D       PUSH 2D                   ; StatID 45 (poisonresist)
6FD08B88 |. 56         PUSH ESI
6FD08B89 |. 8BD8       MOV EBX,EAX                 ; EBX ← coldresist
6FD08B8B |. E8 6018F2FF   CALL     ; get poisonresist
6FD08B90 |. 6A 00       PUSH 0
6FD08B92 |. 6A 24       PUSH 24                   ; StatID 36 (damageresist)
6FD08B94 |. 56         PUSH ESI
6FD08B95 |. 8BE8       MOV EBP,EAX                 ; EBP ← poisonresist
6FD08B97 |. E8 5418F2FF   CALL     ; get damageresist
6FD08B9C |. 6A 00       PUSH 0
6FD08B9E |. 6A 25       PUSH 25                   ; StatID 37 (magicresist)
6FD08BA0 |. 56         PUSH ESI
6FD08BA1 |. 894424 20     MOV DWORD PTR SS:[ESP+20],EAX     ; ESP+20h ← damageresist
6FD08BA5 |. E8 4618F2FF   CALL     ; get magicresist
[Copy to clipboard]

得到当前怪物的原有抗性
各抗性存放的寄存器
EDI = fireresist
ESP+1Ch = lightresist
EBX = coldresist
EBP = poisonresist
ESP+20h = damageresist
EAX = magicresist
依序执行D2Game.6FD08BAA地址的指令


*27h = 39d, 29h = 41d, 2Bh = 43d, 2Dh = 45d, 24h = 36d, 25h = 37d

##################################################################

Check Immunities Function

CF D2Game.6FD08BAA
CODE:
6FD08BAA |. 83FF 64     CMP EDI,64
6FD08BAD |. 7C 08       JL SHORT D2GAME.6FD08BB7     ; fireresist < 100, jump D2GAME.6FD08BB7
6FD08BAF |. C74424 20 0100>MOV DWORD PTR SS:[ESP+20],1   ; immunities = 1
6FD08BB7 |> 837C24 10 64   CMP DWORD PTR SS:[ESP+10],64
6FD08BBC |. 7C 04       JL SHORT D2GAME.6FD08BC2     ; lightresist < 100, jump D2GAME.6FD08BC2
6FD08BBE |. FF4424 20     INC DWORD PTR SS:[ESP+20]     ; immunities+1
6FD08BC2 |> 83FB 64     CMP EBX,64
6FD08BC5 |. 7C 04       JL SHORT D2GAME.6FD08BCB     ; coldresist < 100, jump D2GAME.6FD08BCB
6FD08BC7 |. FF4424 20     INC DWORD PTR SS:[ESP+20]     ; immunities+1
6FD08BCB |> 83FD 64     CMP EBP,64
6FD08BCE |. 7C 04       JL SHORT D2GAME.6FD08BD4     ; poisonresist < 100, jump D2GAME.6FD08BD4
6FD08BD0 |. FF4424 20     INC DWORD PTR SS:[ESP+20]     ; immunities+1
6FD08BD4 |> 8B5424 14     MOV EDX,DWORD PTR SS:[ESP+14]
6FD08BD8 |. 83FA 64     CMP EDX,64
6FD08BDB |. 7C 04       JL SHORT D2GAME.6FD08BE1     ; damageresist < 100, jump D2GAME.6FD08BE1
6FD08BDD |. FF4424 20     INC DWORD PTR SS:[ESP+20]     ; immunities+1
6FD08BE1 |> 83F8 64     CMP EAX,64
6FD08BE4 |. 7C 04       JL SHORT D2GAME.6FD08BEA     ; magicresist < 100, jump
6FD08BE6 |. FF4424 20     INC DWORD PTR SS:[ESP+20]     ; immunities+1
6FD08BEA |> 837C24 20 02   CMP DWORD PTR SS:[ESP+20],2
6FD08BEF |. 0F8D AC010000 JGE D2GAME.6FD08DA1         ; immunities >= 2, jump the Exit Function
[Copy to clipboard]

检测当前怪物是否有免疫
检测顺序为fireresist, lightresist, coldresist, poisonresist, damageresist, magicresist
≥ 100 即标记为免疫
统计其有几系免疫
若免疫数 ≥ 2,则跳到Exit Function
若免疫数〈 2,依序执行D2Game.6FD08BF5地址的指令


*64h = 100d

##################################################################

Magic Resistant Function

CF D2Game.6FD08BF5
CODE:
6FD08BF5 |. 8B4C24 18     MOV ECX,DWORD PTR SS:[ESP+18]
6FD08BF9 |. 83F9 08     CMP ECX,8                 ; uniquemod 8 (Magic Resistant)
6FD08BFC |. 0F85 81000000 JNZ D2GAME.6FD08C83           ; not Magic Resistant, jump the Fire Enchanted Function
6FD08C02 |. 83FB 64     CMP EBX,64
6FD08C05 |. 7D 17       JGE SHORT D2GAME.6FD08C1E       ; EBX >= 100, jump D2GAME.6FD08C1E
6FD08C07 |. 6A 00       PUSH 0
6FD08C09 |. 83C3 28     ADD EBX,28                 ; EBX ← EBX+40
6FD08C0C |. 53         PUSH EBX
6FD08C0D |. 6A 2B       PUSH 2B                   ; StatID 43 (coldresist)
6FD08C0F |. 56         PUSH ESI
6FD08C10 |. E8 2918F2FF   CALL     ; coldresist = coldresist+40
6FD08C15 |. 83FB 64     CMP EBX,64
6FD08C18 |. 7C 04       JL SHORT D2GAME.6FD08C1E       ; EBX < 100, jump D2GAME.6FD08C1E
6FD08C1A |. FF4424 20     INC DWORD PTR SS:[ESP+20]       ; immunities+1
6FD08C1E |> 837C24 20 02   CMP DWORD PTR SS:[ESP+20],2
6FD08C23 |. 0F8D 78010000 JGE D2GAME.6FD08DA1           ; immunities >= 2, jump the Exit Function
6FD08C29 |. 83FF 64     CMP EDI,64
6FD08C2C |. 7D 17       JGE SHORT D2GAME.6FD08C45       ; EDI >= 100, jump D2GAME.6FD08C45
6FD08C2E |. 6A 00       PUSH 0                  
6FD08C30 |. 83C7 28     ADD EDI,28                 ; EDI ← EDI+40
6FD08C33 |. 57         PUSH EDI
6FD08C34 |. 6A 27       PUSH 27                   ; StatID 39 (fireresist)
6FD08C36 |. 56         PUSH ESI
6FD08C37 |. E8 0218F2FF   CALL     ; fireresist = fireresist+40
6FD08C3C |. 83FF 64     CMP EDI,64
6FD08C3F |. 7C 04       JL SHORT D2GAME.6FD08C45       ; EDI < 100, jump D2GAME.6FD08C45
6FD08C41 |. FF4424 20     INC DWORD PTR SS:[ESP+20]       ; immunities+1
6FD08C45 |> 837C24 20 02   CMP DWORD PTR SS:[ESP+20],2    
6FD08C4A |. 0F8D 51010000 JGE D2GAME.6FD08DA1           ; immunities >= 2, jump the Exit Function
6FD08C50 |. 8B7C24 10     MOV EDI,DWORD PTR SS:[ESP+10]    
6FD08C54 |. 83FF 64     CMP EDI,64                
6FD08C57 |. 0F8D 44010000 JGE D2GAME.6FD08DA1           ; lightresist >= 100, jump the Exit Function
6FD08C5D |. 6A 00       PUSH 0
6FD08C5F |. 83C7 28     ADD EDI,28                 ; EDI ← EDI+40
6FD08C62 |. 57         PUSH EDI
6FD08C63 |. 6A 29       PUSH 29                   ; StatID 41 (lightresist)
6FD08C65 |. 56         PUSH ESI
6FD08C66 |. E8 D317F2FF   CALL     ; lightresist = lightresist+40
6FD08C6B |. 83FF 64     CMP EDI,64
6FD08C6E |. 0F8C 2D010000 JL D2GAME.6FD08DA1           ; lightresist < 100, jump the Exit Function
6FD08C74 |. 8B4424 20     MOV EAX,DWORD PTR SS:[ESP+20]   ; EAX ← immunities
6FD08C78 |. 5F         POP EDI
6FD08C79 |. 5D         POP EBP
6FD08C7A |. 5B         POP EBX
6FD08C7B |. 40         INC EAX                   ; immunities+1
6FD08C7C |. 5E         POP ESI
6FD08C7D |. 83C4 0C     ADD ESP,0C                
6FD08C80 |. C2 0400     RETN 4                   ; Exit
[Copy to clipboard]

如果没有检测到Magic Resistant,则跳到Fire Enchanted Function

如有Magic Resistant,若resist < 100,则resist+40
检测顺序coldresist, fireresist, lightresist
coldresist, fireresist步骤若免疫数 ≥ 2,则跳到Exit Function
若免疫数〈 2,依序执行下一地址的指令,在执行到最后的lightresist后,若lightresist < 100,则直接跳到Exit Function,若lightresist >= 100,则在依序执行完免疫数量+1后退出程序


*Magic Resistant依次增加冰冷、火焰、闪电各40%抗性,但前提是怪物当前其抗性 < 100%且免疫数量小于2
*64h = 100d, 28h = 40d, 2Bh = 43d, 27h = 39d, 29h = 41d


##################################################################

Fire Enchanted Function

CF D2Game.6FD08C83
CODE:
6FD08C83 |> 83F9 09     CMP ECX,9               ; uniquemod 9 (Fire Enchanted)
6FD08C86 |. 75 18       JNZ SHORT D2GAME.6FD08CA0     ; not Fire Enchanted, jump the Cold Enchanted Function
6FD08C88 |. 6A 00       PUSH 0
6FD08C8A |. 83C7 4B     ADD EDI,4B               ; fireresist ← fireresist+75
6FD08C8D |. 57         PUSH EDI                
6FD08C8E |. 6A 27       PUSH 27                 ; StatID 39 (fireresist)
6FD08C90 |. 56         PUSH ESI
6FD08C91 |. E8 A817F2FF   CALL   ; fireresist = fireresist+75
6FD08C96 |. 5F         POP EDI
6FD08C97 |. 5D         POP EBP
6FD08C98 |. 5B         POP EBX
6FD08C99 |. 5E         POP ESI
6FD08C9A |. 83C4 0C     ADD ESP,0C
6FD08C9D |. C2 0400     RETN 4                 ; Exit
[Copy to clipboard]

如果没有检测到Fire Enchanted,则跳到Cold Enchanted Function

如有Fire Enchanted,则火焰抗性增加75%
退出程序


*4Bh = 75d, 27h = 39d

##################################################################

Cold Enchanted Function

CF D2Game.6FD08CA0
CODE:
6FD08CA0 |> 83F9 12     CMP ECX,12               ; uniquemod 18 (Cold Enchanted)        
6FD08CA3 |. 75 18       JNZ SHORT D2GAME.6FD08CBD     ; not Cold Enchanted, jump the Lightning Enchanted Function
6FD08CA5 |. 6A 00       PUSH 0
6FD08CA7 |. 83C3 4B     ADD EBX,4B               ; coldresist ← coldresist+75
6FD08CAA |. 53         PUSH EBX
6FD08CAB |. 6A 2B       PUSH 2B                 ; StatID 43 (coldresist)
6FD08CAD |. 56         PUSH ESI
6FD08CAE |. E8 8B17F2FF   CALL   ; coldresist = coldresist+75
6FD08CB3 |. 5F         POP EDI
6FD08CB4 |. 5D         POP EBP
6FD08CB5 |. 5B         POP EBX
6FD08CB6 |. 5E         POP ESI
6FD08CB7 |. 83C4 0C     ADD ESP,0C
6FD08CBA |. C2 0400     RETN 4                 ; Exit
[Copy to clipboard]

如果没有检测到Cold Enchanted,则跳到Lightning Enchanted Function

如有Cold Enchanted,则冰冷抗性增加75%
退出程序


*12h = 18d, 4Bh = 75d, 2Bh = 43d

##################################################################

Lightning Enchanted Function

CF D2Game.6FD08CBD
CODE:
6FD08CBD |> 83F9 11     CMP ECX,11               ; uniquemod 17 (Lightning Enchanted)
6FD08CC0 |. 75 1C       JNZ SHORT D2GAME.6FD08CDE     ; not Lightning Enchanted, jump the Poison Hit Function
6FD08CC2 |. 8B4424 10     MOV EAX,DWORD PTR SS:[ESP+10]   ; EAX ← lightresist
6FD08CC6 |. 6A 00       PUSH 0
6FD08CC8 |. 83C0 4B     ADD EAX,4B               ; lightresist ← lightresist+75
6FD08CCB |. 50         PUSH EAX
6FD08CCC |. 6A 29       PUSH 29                 ; StatID 41 (lightresist)
6FD08CCE |. 56         PUSH ESI
6FD08CCF |. E8 6A17F2FF   CALL   ; lightresist = lightresist+75    
6FD08CD4 |. 5F         POP EDI
6FD08CD5 |. 5D         POP EBP
6FD08CD6 |. 5B         POP EBX
6FD08CD7 |. 5E         POP ESI
6FD08CD8 |. 83C4 0C     ADD ESP,0C
6FD08CDB |. C2 0400     RETN 4                 ; Exit
[Copy to clipboard]

如果没有检测到Lightning Enchanted,则跳到Poison Hit Function

如有Lightning Enchanted,则闪电抗性增加75%
退出程序


*11h = 17d, 4Bh = 75d, 29h = 41d

##################################################################

Poison Hit Function

CF D2Game.6FD08CDE
CODE:
6FD08CDE |> 83F9 17     CMP ECX,17               ; uniquemod 23 (Poison Hit)      
6FD08CE1 |. 75 18       JNZ SHORT D2GAME.6FD08CFB     ; not Poison Hit, jump the Mana Burn Function
6FD08CE3 |. 6A 00       PUSH 0            
6FD08CE5 |. 83C5 4B     ADD EBP,4B               ; poisonresist ← poisonresist+75
6FD08CE8 |. 55         PUSH EBP
6FD08CE9 |. 6A 2D       PUSH 2D                 ; StatID 45 (poisonresist)
6FD08CEB |. 56         PUSH ESI
6FD08CEC |. E8 4D17F2FF   CALL   ; poisonresist = poisonresist+75
6FD08CF1 |. 5F         POP EDI
6FD08CF2 |. 5D         POP EBP
6FD08CF3 |. 5B         POP EBX
6FD08CF4 |. 5E         POP ESI
6FD08CF5 |. 83C4 0C     ADD ESP,0C
6FD08CF8 |. C2 0400     RETN 4                 ; Exit
[Copy to clipboard]

如果没有检测到Poison Hit,则跳到Mana Burn Function

如有Poison Hit,则毒素抗性增加75%
退出程序


*17h = 23d, 4Bh = 75d, 2Dh = 45d

##################################################################

Mana Burn Function

CF D2Game.6FD08CFB
CODE:
6FD08CFB |> 83F9 19     CMP ECX,19               ; uniquemod 25(Mana Burn)
6FD08CFE |. 75 18       JNZ SHORT D2GAME.6FD08D18     ; not Mana Burn, jump the Spectral Hit Function
6FD08D00 |. 6A 00       PUSH 0                
6FD08D02 |. 83C0 14     ADD EAX,14               ; magicresist ← magicresist+20
6FD08D05 |. 50         PUSH EAX
6FD08D06 |. 6A 25       PUSH 25                 ; StatID 37 (magicresist)
6FD08D08 |. 56         PUSH ESI
6FD08D09 |. E8 3017F2FF   CALL   ; magicresist = magicresist+20
6FD08D0E |. 5F         POP EDI
6FD08D0F |. 5D         POP EBP
6FD08D10 |. 5B         POP EBX
6FD08D11 |. 5E         POP ESI
6FD08D12 |. 83C4 0C     ADD ESP,0C
6FD08D15 |. C2 0400     RETN 4                 ; Exit
[Copy to clipboard]

如果没有检测到Mana Burn,则跳到Spectral Hit Function

如有Mana Burn,则魔法抗性增加20%
退出程序


*19h = 25d, 14h = 20d, 25h = 37d

##################################################################

Spectral Hit Function

CF D2Game.6FD08D18
CODE:
6FD08D18 |> 83F9 1B     CMP ECX,1B                 ; uniquemod 27 (Spectral Hit)
6FD08D1B |. 75 71       JNZ SHORT D2GAME.6FD08D8E       ; not Spectral Hit, jump the Stone Skin Function
6FD08D1D |. 83FB 4B     CMP EBX,4B
6FD08D20 |. 7D 17       JGE SHORT D2GAME.6FD08D39       ; coldresist >= 75, jump D2GAME.6FD08D39
6FD08D22 |. 6A 00       PUSH 0
6FD08D24 |. 83C3 14     ADD EBX,14                 ; coldresist ← coldresist+20
6FD08D27 |. 53         PUSH EBX
6FD08D28 |. 6A 2B       PUSH 2B                   ; StatID 43 (coldresist)
6FD08D2A |. 56         PUSH ESI
6FD08D2B |. E8 0E17F2FF   CALL     ; coldresist = coldresist+20
6FD08D30 |. 83FB 64     CMP EBX,64
6FD08D33 |. 7C 04       JL SHORT D2GAME.6FD08D39       ; coldresist < 100, jump D2GAME.6FD08D39
6FD08D35 |. FF4424 20     INC DWORD PTR SS:[ESP+20]       ; immunities+1
6FD08D39 |> 837C24 20 02   CMP DWORD PTR SS:[ESP+20],2    
6FD08D3E |. 7D 61       JGE SHORT D2GAME.6FD08DA1       ; immunities >= 2, jump the Exit Function
6FD08D40 |. 83FF 4B     CMP EDI,4B
6FD08D43 |. 7D 17       JGE SHORT D2GAME.6FD08D5C       ; fireresist >= 75, jump D2GAME.6FD08D5C
6FD08D45 |. 6A 00       PUSH 0
6FD08D47 |. 83C7 14     ADD EDI,14                 ; fireresist ← fireresist+20    
6FD08D4A |. 57         PUSH EDI
6FD08D4B |. 6A 27       PUSH 27                   ; StatID 39 (fireresist)
6FD08D4D |. 56         PUSH ESI
6FD08D4E |. E8 EB16F2FF   CALL     ; fireresist = fireresist+20
6FD08D53 |. 83FF 64     CMP EDI,64
6FD08D56 |. 7C 04       JL SHORT D2GAME.6FD08D5C       ; fireresist < 100, jump D2GAME.6FD08D5C
6FD08D58 |. FF4424 20     INC DWORD PTR SS:[ESP+20]       ; immunities+1
6FD08D5C |> 837C24 20 02   CMP DWORD PTR SS:[ESP+20],2
6FD08D61 |. 7D 3E       JGE SHORT D2GAME.6FD08DA1       ; immunities >= 2 , jump the Exit Function
6FD08D63 |. 8B7C24 10     MOV EDI,DWORD PTR SS:[ESP+10]   ; EDI ← lightresist
6FD08D67 |. 83FF 4B     CMP EDI,4B
6FD08D6A |. 7D 35       JGE SHORT D2GAME.6FD08DA1       ; lightresist >= 75, jump the Exit Function
6FD08D6C |. 6A 00       PUSH 0
6FD08D6E |. 83C7 14     ADD EDI,14                 ; lightresist ← lightresist+20
6FD08D71 |. 57         PUSH EDI
6FD08D72 |. 6A 29       PUSH 29                   ; StatID 41 (lightresist)
6FD08D74 |. 56         PUSH ESI
6FD08D75 |. E8 C416F2FF   CALL     ; lightresist = lightresist+20
6FD08D7A |. 83FF 64     CMP EDI,64
6FD08D7D |. 7C 22       JL SHORT D2GAME.6FD08DA1       ; lightresist < 100, jump the Exit Function
6FD08D7F |. 8B4424 20     MOV EAX,DWORD PTR SS:[ESP+20]   ; EAX ← immunities
6FD08D83 |. 5F         POP EDI                  
6FD08D84 |. 5D         POP EBP                  
6FD08D85 |. 5B         POP EBX                  
6FD08D86 |. 40         INC EAX                   ; immunities+1
6FD08D87 |. 5E         POP ESI
6FD08D88 |. 83C4 0C     ADD ESP,0C
6FD08D8B |. C2 0400     RETN 4                   ; Exit
[Copy to clipboard]

如果没有检测到Spectral Hit,则跳到Stone Skin Res Function

如有Spectral Hit,若resist < 75,则resist+20
检测顺序coldresist, fireresist, lightresist
coldresist, fireresist步骤若免疫数 ≥ 2,则跳到Exit Function
若免疫数〈 2,依序执行下一地址的指令,在执行到最后的lightresist后,若lightresist < 100,则直接跳到Exit Function,若lightresist >= 100,则在依序执行完免疫数量+1后退出程序


*Spectral Hit增加冰冷、火焰、闪电各20%抗性,但前提是怪物当前抗性 < 75。这也是为什么大部分情况下Spectral Hit不能增加抗性的原因。
*1Bh = 27d, 4Bh = 75d, 14h = 20d, 2Bh = 43d, 64h = 100d, 27h = 39d, 29h = 41d

##################################################################

Stone Skin Res Function

CF D2Game.6FD08D8E
CODE:
6FD08D8E |> 83F9 1C     CMP ECX,1C               ; uniquemod 28 (Stone Skin)
6FD08D91 |. 75 0E       JNZ SHORT D2GAME.6FD08DA1     ; not Stone Skin , jump the Exit Function
6FD08D93 |. 6A 00       PUSH 0
6FD08D95 |. 83C2 32     ADD EDX,32               ; damageresist ← damageresist+50
6FD08D98 |. 52         PUSH EDX
6FD08D99 |. 6A 24       PUSH 24                 ; StatID 36 (damageresist)
6FD08D9B |. 56         PUSH ESI
6FD08D9C |. E8 9D16F2FF   CALL   ; damageresist = damageresist+50
[Copy to clipboard]

如果没有检测到Stone Skin,则跳到Exit Function

如有Stone Skin,则物理抗性增加50%
依序执行下一地址D2Game.6FD08DA1的指令


*1Ch = 28d, 32h = 50d, 24h = 36d

##################################################################

Exit Function

CF D2Game.6FD08DA1
CODE:
6FD08DA1 |> 5F         POP EDI
6FD08DA2 |. 5D         POP EBP
6FD08DA3 |. 5B         POP EBX
6FD08DA4 |> 5E         POP ESI
6FD08DA5 |. 83C4 0C     ADD ESP,0C
6FD08DA8 \\\\. C2 0400     RETN 4
[Copy to clipboard]

退出程序段
*这里的POP/ADD和程序最初的PUSH/SUB相对应

由以上的解析我们可以看到,对金怪的Mod奖励检测是周而复始的,也就是说每检测到一个Mod奖励,执行后退出程序 → 然后检测到下一个Mod奖励,再执行再退出程序 → 再检测到下一个Mod奖励,再执行再退出程序…………

皮肤硬化(Stone Skin)增加怪物1倍的防御值,即防御值 = 原基础防御值×2
魔法抵抗(Magic Resistant)当前相关抗性小于100%,则依次增加怪物 40% 冰抗、火抗、电抗
火焰强化(Fire Enchanted)增加怪物 75% 火抗
冰冷强化(Cold Enchanted)增加怪物 75% 冰抗
闪电强化(Lightning Enchanted)增加怪物 75% 电抗
毒素一击(PoisonHit) 增加怪物 75% 毒抗,这个Mod名称不显示在怪物名字下方
燃烧法力(Mana Burn)增加怪物 20% 魔抗
幽灵一击(Special Hit)当前相关抗性小于75%,则依次增加怪物 20% 冰抗、火抗、电抗
皮肤硬化(Stone Skin)增加怪物 50% 物抗

以上只要即时检测到免疫数≥2即退出程序


≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈清新脱俗的分割线≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈

我们来举些例子
①Hell难度的Pindleskin
基础抗性 火抗 0% , 电抗 33% ,冰抗 50% ,毒抗 100%,物抗 50%,魔抗 50%
固定奖励技能是Fire Enchanted
随机奖励依次为Spectral Hit、Cold Enchanted
Fire Enchanted作用:冰抗 50% ,火抗 0%+75% = 75% ,电抗 33% ,毒抗 100%,物抗 50%,魔抗 50%
Spectral Hit作用:冰抗 50%+20% = 70% ,火抗 ≥ 75% 不加,电抗 33%+20% = 53%,毒抗 100%,物抗 50%,魔抗 50%
Cold Enchanted作用:冰抗 70%+75% = 145% ,火抗 75% ,电抗 53%,毒抗 100%,物抗 50%,魔抗 50%
最终抗性为 冰抗 145% ,火抗 75% ,电抗 53%,毒抗 100%,物抗 50%,魔抗 50%,冰毒两系免疫

②还是Hell难度的Pindleskin
基础抗性 火抗 0% , 电抗 33% ,冰抗 50% ,毒抗 100%,物抗 50%,魔抗 50%
固定奖励技能是Fire Enchanted
随机奖励依次为Cold Enchanted、Spectral Hit
Fire Enchanted作用:冰抗 50% ,火抗 0%+75% = 75% ,电抗 33% ,毒抗 100%,物抗 50%,魔抗 50%
Cold Enchanted作用:冰抗 50%+75% = 125% ,火抗 75% ,电抗 33%,毒抗 100%,物抗 50%,魔抗 50%
检测到免疫 ≥ 2
不进行Spectral Hit的抗性奖励
最终抗性为 冰抗 125% ,火抗 75% ,电抗 33%,毒抗 100%,物抗 50%,魔抗 50%,冰毒两系免疫

③假设Hell难度的某随机金怪
基础抗性 火抗 60% ,电抗 60% ,冰抗 60% ,毒抗 50%,物抗 50%,魔抗 50%
奖励依次为Cold Enchanted、Magic Resistant、Special Hit
Cold Enchanted作用:冰抗 60%+75% = 135% ,火抗 60% ,电抗 60%,毒抗 50%,物抗 50%,魔抗 50%
Magic Resistant作用: 冰抗 ≥ 100% 不加,火抗 60%+40% = 100%
检测到免疫 ≥ 2
不进行Magic Resistant对电抗的奖励
不进行Spectral Hit的抗性奖励
最终抗性为 冰抗 135% ,火抗 100% ,电抗 60%,毒抗 50%,物抗 50%,魔抗 50%,冰火两系免疫

≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈清新脱俗的分割线≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈

附1: StatID List
CF ItemStatCost.txt

CODE:
Stat       ID
armorclass   31
damageresist   36
magicresist   37
fireresist   39
lightresist   41
coldresist   43
poisonresist   45
[Copy to clipboard]


附2: UniquemodID List
CF MonUMod.txt

CODE:
uniquemod   id
resist       8
fire       9
lightning   17
cold       18
poisonhit   23
manahit     25
spectralhit   27
stoneskin   28
[Copy to clipboard]


附3: D2Common.#10590 Function
CF D2Common.6FD5CDA0

CODE:
6FD5CDA0 >/$ 8B4424 0C     MOV EAX,DWORD PTR SS:[ESP+C]
6FD5CDA4 |. 53         PUSH EBX
6FD5CDA5 |. 8B5C24 0C     MOV EBX,DWORD PTR SS:[ESP+C]
6FD5CDA9 |. 56         PUSH ESI
6FD5CDAA |. 8B7424 0C     MOV ESI,DWORD PTR SS:[ESP+C]
6FD5CDAE |. 8B4E 5C     MOV ECX,DWORD PTR DS:[ESI+5C]
6FD5CDB1 |. 57         PUSH EDI
6FD5CDB2 |. 8B7C24 1C     MOV EDI,DWORD PTR SS:[ESP+1C]
6FD5CDB6 |. 57         PUSH EDI
6FD5CDB7 |. 50         PUSH EAX
6FD5CDB8 |. 53         PUSH EBX
6FD5CDB9 |. 51         PUSH ECX
6FD5CDBA |. E8 21FBFFFF   CALL D2COMMON.#10564
6FD5CDBF |. 85C0       TEST EAX,EAX
6FD5CDC1 |. 74 17       JE SHORT D2COMMON.6FD5CDDA
6FD5CDC3 |. 833E 00     CMP DWORD PTR DS:[ESI],0
6FD5CDC6 |. 75 12       JNZ SHORT D2COMMON.6FD5CDDA
6FD5CDC8 |. 8BC3       MOV EAX,EBX
6FD5CDCA |. 8B5E 5C     MOV EBX,DWORD PTR DS:[ESI+5C]
6FD5CDCD |. 0FB7D7       MOVZX EDX,DI
6FD5CDD0 |. C1E0 10     SHL EAX,10
6FD5CDD3 |. 03C2       ADD EAX,EDX
6FD5CDD5 |. E8 A6DEFFFF   CALL D2COMMON.6FD5AC80
6FD5CDDA |> 5F         POP EDI
6FD5CDDB |. 5E         POP ESI
6FD5CDDC |. 5B         POP EBX
6FD5CDDD \\\\. C2 1000     RETN 10
[Copy to clipboard]


附4: D2Common.#10061 Function
CF D2Common.6FD5B2A0

CODE:
6FD5B2A0 >/$ 8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
6FD5B2A4 |. 85C0       TEST EAX,EAX
6FD5B2A6 |. 75 03       JNZ SHORT D2COMMON.6FD5B2AB
6FD5B2A8 |. C2 0C00     RETN 0C
6FD5B2AB |> 53         PUSH EBX
6FD5B2AC |. 8B58 5C     MOV EBX,DWORD PTR DS:[EAX+5C]
6FD5B2AF |. 85DB       TEST EBX,EBX
6FD5B2B1 |. 75 06       JNZ SHORT D2COMMON.6FD5B2B9
6FD5B2B3 |. 33C0       XOR EAX,EAX
6FD5B2B5 |. 5B         POP EBX
6FD5B2B6 |. C2 0C00     RETN 0C
6FD5B2B9 |> 57         PUSH EDI
6FD5B2BA |. 8B7C24 10     MOV EDI,DWORD PTR SS:[ESP+10]
6FD5B2BE |. 85FF       TEST EDI,EDI
6FD5B2C0 |. 7C 20       JL SHORT D2COMMON.6FD5B2E2
6FD5B2C2 |. 8B0D 8CEEDE6F MOV ECX,DWORD PTR DS:[sgptDataTables]   ; D2COMMON.6FDF0790
6FD5B2C8 |. 3BB9 D40B0000 CMP EDI,DWORD PTR DS:[ECX+BD4]
6FD5B2CE |. 7D 12       JGE SHORT D2COMMON.6FD5B2E2
6FD5B2D0 |. 8B91 CC0B0000 MOV EDX,DWORD PTR DS:[ECX+BCC]
6FD5B2D6 |. 8BC7       MOV EAX,EDI
6FD5B2D8 |. 69C0 44010000 IMUL EAX,EAX,144
6FD5B2DE |. 03C2       ADD EAX,EDX
6FD5B2E0 |. 75 07       JNZ SHORT D2COMMON.6FD5B2E9
6FD5B2E2 |> 5F         POP EDI
6FD5B2E3 |. 33C0       XOR EAX,EAX
6FD5B2E5 |. 5B         POP EBX
6FD5B2E6 |. C2 0C00     RETN 0C
6FD5B2E9 |> 50         PUSH EAX
6FD5B2EA |. 0FB74424 18   MOVZX EAX,WORD PTR SS:[ESP+18]
6FD5B2EF |. C1E7 10     SHL EDI,10
6FD5B2F2 |. 03F8       ADD EDI,EAX
6FD5B2F4 |. E8 97FDFFFF   CALL D2COMMON.6FD5B090
6FD5B2F9 |. 5F         POP EDI
6FD5B2FA |. 5B         POP EBX
6FD5B2FB \\\\. C2 0C00     RETN 0C
[Copy to clipboard]

·暗黑破坏神中文网 ·点击:2974次 · Www.Diablo2.Com.Cn ·
  • 上一篇文章:
  • 下一篇文章:
  • ..:: 版权声明 ::..
    · 凡本网署名文字、图片和音视频稿件,版权均属 暗黑破坏神中文网 [Diablo2.Com.cn] 所有。
    · 任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发表。
    · 本网协议授权的媒体、网站,在转载使用时必 须注明“稿件来源: 暗黑破坏神中文网[Diablo2.Com.cn] ”。
    · 未经本站明确许可,任何网站不得盗链及抄袭;如引用页面,请务必注明来自本站( 含域名连接),谢谢!
     
     

    ..::暗黑破坏神III游戏下载::..
    暗黑破坏神1下载 暗黑破坏神1:地狱火下载 暗黑破坏神2下载 暗黑破坏神2:毁灭之王下载 暗黑破坏神3下载
    暗黑破坏神2战网开荒

    新手入门
    基础知识 | 角色介绍 | 角色类型
    硬件支持 | 游戏问题 | 物品管理
    人物技能 | 多人游戏 | 游戏交易

    游戏资料
    场景地形 | 妖魔鬼怪 | N P C
    任务帮助 | 祭台神龛 | 经 验 值
    角色属性 | 游戏组队 | 雇 佣 兵
    自然抵抗 | 游戏难度 | 交易买卖
    玩家对战 | 游戏控制 | 赌博系统
    游戏国度 | 怪物属性 | 专家模式
    暗黑俗语 | 魔法物品 | 奶牛关卡

    人物角色
    女 巫 | 男 巫 | 刺 客 | 游 侠
    亚 马 逊 | 野 蛮 人 | 德 鲁 伊

    魔法技能
    基础知识 | 野 蛮 人 | 刺 客
    施放延迟 | 亚 马 逊 | 死灵法师
    分配策略 | 德 鲁 伊 | 女 法 师
    圣 骑 士 | 地 狱 火 | 暗 黑 1

    物品装备
    物品基础 | 普通物品 | 宝石珠宝
    扩展物品 | 精华物品 | 魔法词缀
    绿色套装 | 暗金物品 | 赫拉迪克
    精彩图片 | 合成物品 | 神符之语
    插槽 | 护符 | 戒指 | 项链 | 头饰

    在线模拟器
    角色技能计算器|BUG打孔公式
    神符之语图文版 | 跑速计算器
    暗黑2盾牌的最终格挡率计算器
    人物攻击命中率(准确率)计算器
    武器攻速计算器|武器伤害计算器
    暗黑破坏神1
    暗黑破坏神1:地狱火
    暗黑破坏神2
    暗黑破坏神2:毁灭之王