MISSILE_CalculatePierceCount: Stack[-0x10] is one D2SeedStrc, not two int32
The 8-byte seed at EBP-0xc (Stack[-0x10], with Stack[-0xc] its high half) is typed as two committed int32_t locals, nSeedLow and nSeedHigh. InitSeed_Param_666 (0x00650e40) gets ECX = &seed and writes both dwords. The loop then steps the 64-bit LCG and rolls newLow % 100 against the pierce chance. Because the slot is split, the decompile goes through a synthetic _nSeedLow view, and the generator emits it as a separate, uninitialised int32_t: Source/D2Client/UNIT/Missile.cpp:734-735 steps garbage, and __frame0.nSeedLow never advances. So the client-side pierce count is undefined. The server twin CalculatePierce (0x0059f940) has the same asm and is typed D2SeedStrc sSeedState; it decompiles and generates correctly (Missiles.cpp:97-98). Ask for the maintainer: rename the slot (e.g. sSeed), since nSeedLow names a whole seed.
Changes 1, applied together
Retype variable
win 0x004cd420 Stack[-0x10]typeint32_t→D2SeedStrc