diff --git a/d2common/d2fileformats/d2pl2/pl2.go b/d2common/d2fileformats/d2pl2/pl2.go index 2023cff0..79db5c21 100644 --- a/d2common/d2fileformats/d2pl2/pl2.go +++ b/d2common/d2fileformats/d2pl2/pl2.go @@ -41,3 +41,15 @@ func Load(data []byte) (*PL2, error) { return result, nil } + +// Marshal encodes PL2 back into byte slice +func (p *PL2) Marshal() []byte { + restruct.EnableExprBeta() + + data, err := restruct.Pack(binary.LittleEndian, p) + if err != nil { + panic(err) + } + + return data +} diff --git a/d2common/d2fileformats/d2pl2/pl2_test.go b/d2common/d2fileformats/d2pl2/pl2_test.go new file mode 100644 index 00000000..87be05ac --- /dev/null +++ b/d2common/d2fileformats/d2pl2/pl2_test.go @@ -0,0 +1,40 @@ +package d2pl2 + +import ( + "testing" +) + +func exampleData() *PL2 { + result := &PL2{ + BasePalette: PL2Palette{}, + SelectedUintShift: PL2PaletteTransform{}, + RedTones: PL2PaletteTransform{}, + GreenTones: PL2PaletteTransform{}, + BlueTones: PL2PaletteTransform{}, + DarkendColorShift: PL2PaletteTransform{}, + } + + result.BasePalette.Colors[0].R = 8 + result.DarkendColorShift.Indices[0] = 123 + + return result +} + +func TestPL2_MarshalUnmarshal(t *testing.T) { + pl2 := exampleData() + + data := pl2.Marshal() + + newPL2, err := Load(data) + if err != nil { + t.Error(err) + } + + if newPL2.BasePalette.Colors[0] != pl2.BasePalette.Colors[0] { + t.Fatal("unexpected length") + } + + if pl2.DarkendColorShift.Indices[0] != newPL2.DarkendColorShift.Indices[0] { + t.Fatal("unexpected index set") + } +}