REDIVIVUS

Proposals / #1106

Type the codec frame iterator's frame-bounds argument as D2CodecFrameBoundsStrc *

checked · by dtchitt · submitted 2026-11-03

CODEC_DecompressAllFrames keeps a local D2CodecFrameBoundsStrc sFrameBounds and passes &sFrameBounds, cast to an integer, to CODEC_InitializeFrameIterator (call at 0060c500, in ESI) and CODEC_DecompressFrameData (call at 0060c9fc, as nCodecState), and both hand it on to CODEC_AdvanceFrameIterator. All three bodies read only its fields at their width: InitializeFrameIterator reads nWidth (0x10, 0060b4b3 MOV EAX,[ESI+0x10]) and nHeight (0x14), writes nBlockStride (0x28), nBlockCount (0x24) and nIterSteps (0x20) and checks nFrameCount (0x1c). AdvanceFrameIterator reads pFrameArray (0x4, 0060b2c1), nMinX (0x8), nMinY (0xc), nFrameCount and nBlockStride. So the three integer parameters become D2CodecFrameBoundsStrc *. DecompressFrameData's name nCodecState is a chosen name that undersells it; left to review.

Changes 3, applied together

  1. Retype variable win 0x0060b4b0 ESI

    typeint32_t→D2CodecFrameBoundsStrc *
  2. Retype variable win 0x0060b2b0 EAX

    typeint32_t→D2CodecFrameBoundsStrc *
  3. Retype variable win 0x0060b9a0 Stack[0x4]

    typeint32_t→D2CodecFrameBoundsStrc *