diff --git a/d2common/d2fileformats/d2cof/cof.go b/d2common/d2fileformats/d2cof/cof.go index 5b119b47..ceb9ab11 100644 --- a/d2common/d2fileformats/d2cof/cof.go +++ b/d2common/d2fileformats/d2cof/cof.go @@ -121,7 +121,6 @@ func (c *COF) Unmarshal(fileData []byte) error { layer.Transparent = b[layerTransparent] > 0 layer.DrawEffect = d2enum.DrawEffect(b[layerDrawEffect]) - layer.weaponClassByte = b[layerWeaponClass:] layer.WeaponClass = d2enum.WeaponClassFromString(strings.TrimSpace(strings.ReplaceAll( string(b[layerWeaponClass:]), badCharacter, ""))) @@ -193,7 +192,22 @@ func (c *COF) Marshal() []byte { sw.PushBytes(byte(c.CofLayers[i].DrawEffect)) - sw.PushBytes(c.CofLayers[i].weaponClassByte...) + const ( + maxCodeLength = 3 // we assume item codes to look like 'hax' or 'kit' + terminator = 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 { diff --git a/d2common/d2fileformats/d2cof/cof_layer.go b/d2common/d2fileformats/d2cof/cof_layer.go index 2658e691..8a09f9c1 100644 --- a/d2common/d2fileformats/d2cof/cof_layer.go +++ b/d2common/d2fileformats/d2cof/cof_layer.go @@ -4,11 +4,10 @@ import "github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum" // CofLayer is a structure that represents a single layer in a COF file. type CofLayer struct { - Type d2enum.CompositeType - Shadow byte - Selectable bool - Transparent bool - DrawEffect d2enum.DrawEffect - WeaponClass d2enum.WeaponClass - weaponClassByte []byte + Type d2enum.CompositeType + Shadow byte + Selectable bool + Transparent bool + DrawEffect d2enum.DrawEffect + WeaponClass d2enum.WeaponClass }