[1.13c] Fire Golem Death Damage

This forum is for discussions on how to edit what can not be edited through the txt files, needless to say this isn't about battle net hacking.

Moderators: Nefarius, Havvoric

Post Reply
User avatar
mmpx222
Junior Member
Paladin
Posts: 139
Joined: Sat Apr 26, 2014 9:19 am
Korea South

[1.13c] Fire Golem Death Damage

Post by mmpx222 » Fri Jan 04, 2019 4:47 pm

Fire Golem has a little-known functionality: When it is killed or unsummoned†, it deals 100 physical, 100 fire damage in a small area. I've been looking for ways to modify the damage and/or radius of the effect, but was unsuccessful so far.

† This includes replacing an existing fire golem by (re-)summoning another golem.

Until now, the only information available was Nefarius's comment:
Nefarius wrote:
Wed May 16, 2007 11:35 am
Besides the dolls and siegebeasts, the only other monsters that deal splash damage on death are Fire Enchanted bosses and Fire Golems (<- I haven't analyse the golem splash yet)
No point in waiting for his analysis. Using this post as a guide, I eventually located the function responsible for the golem's death damage in 1.13c: D2Game.265E0. Specifically, this part sets the damage amount and radius:

Code: Select all

(D2Game.dll, cLoD 1.13c)
Address   Hex dump             Command                                             Comments
$+26680   |.  6A 00            PUSH 0                                              ; |Arg7 = 0
$+26682   |.  B8 00640000      MOV EAX,6400                                        ; |Golem death damage?
$+26687   |.  894424 2C        MOV DWORD PTR SS:[ESP+2C],EAX                       ; |
$+2668B   |.  894424 34        MOV DWORD PTR SS:[ESP+34],EAX                       ; |
$+2668F   |.  8D4424 24        LEA EAX,[ESP+24]                                    ; |
$+26693   |.  50               PUSH EAX                                            ; |Arg6 => OFFSET LOCAL.27
$+26694   |.  6A 06            PUSH 6                                              ; |Arg5 = 6
$+26696   |.  53               PUSH EBX                                            ; |Arg4
$+26697   |.  55               PUSH EBP                                            ; |Arg3
$+26698   |.  52               PUSH EDX                                            ; |Arg2
$+26699   |.  51               PUSH ECX                                            ; |Arg1 => ARG.ECX
$+2669A   |.  E8 E17C0B00      CALL D2Game.038AE380                                ; \D2Game.?DeliverDmgUsingMissile?
At D2Game.26682, EAX is assigned a value of 6400 (=100 × 256 damage). This value is then copied to two locations on the stack, which seem to be the physical/fire damage fields of some struct on the stack. The game also sets a damage radius of 6 subtiles (=4 yards) in D2Game.26694. Finally, the game calls a function that delivers the damage using a missile (D2Game.2669A).

Preliminary testing corroborates these assumptions: modifying D2Game.26682 changes both physical and fire damage, and modifying D2Game.26694 changes the radius of the damage area.

Unfortunately, this confirms that the damage type, amount, and radius are fixed, and cannot be altered by softcoded means. Giving the golem -% Enemy Fire Resist (passive_fire_pierce) works, but +% Fire Skill Damage (passive_fire_mastery) does not. More testing to come.

One point of solace: An old thread on Lurker Lounge claims that Fire Golem's death explosion does not give kill experience. While testing, I confirmed that it actually does.
D2TXT / D2INI - Python scripts for editing TXT files, or converting between TXT ↔ INI files

Post Reply

Return to “Code Editing”