From 7d0eeb0fd3a0bbb6a4cfda0cd05fc3bb9f537b0f Mon Sep 17 00:00:00 2001 From: "M. Sz" Date: Wed, 10 Feb 2021 12:59:07 +0100 Subject: [PATCH] hotfix: d2cof encoder: changed way of pushing weapon class --- d2common/d2fileformats/d2cof/cof.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/d2common/d2fileformats/d2cof/cof.go b/d2common/d2fileformats/d2cof/cof.go index fa9b1002..ceb9ab11 100644 --- a/d2common/d2fileformats/d2cof/cof.go +++ b/d2common/d2fileformats/d2cof/cof.go @@ -30,10 +30,6 @@ const ( layerWeaponClass ) -const ( - layerWeaponClassLength = 4 -) - const ( badCharacter = string(byte(0)) ) @@ -196,15 +192,22 @@ func (c *COF) Marshal() []byte { sw.PushBytes(byte(c.CofLayers[i].DrawEffect)) - weaponClassString := c.CofLayers[i].WeaponClass.String() + const ( + maxCodeLength = 3 // we assume item codes to look like 'hax' or 'kit' + terminator = 0 + ) - for letter := 0; letter < layerWeaponClassLength; letter++ { - if letter < len(weaponClassString) { - sw.PushBytes(weaponClassString[letter]) - } else { - sw.PushBytes(0) + weaponCode := c.CofLayers[i].WeaponClass.String() + + for idx, letter := range weaponCode { + if idx > maxCodeLength { + break } + + sw.PushBytes(byte(letter)) } + + sw.PushBytes(terminator) } for _, i := range c.AnimationFrames {