mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-03 07:07:25 -05:00
248 lines
4.3 KiB
Go
248 lines
4.3 KiB
Go
package d2ds1
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2path"
|
|
)
|
|
|
|
func exampleData() *DS1 { //nolint:funlen // not a big deal if this is long func
|
|
exampleFloor1 := Tile{
|
|
// common fields
|
|
tileCommonFields: tileCommonFields{
|
|
Prop1: 2,
|
|
Sequence: 89,
|
|
Unknown1: 123,
|
|
Style: 20,
|
|
Unknown2: 53,
|
|
HiddenBytes: 1,
|
|
RandomIndex: 2,
|
|
YAdjust: 21,
|
|
},
|
|
tileFloorShadowFields: tileFloorShadowFields{
|
|
Animated: false,
|
|
},
|
|
}
|
|
|
|
exampleFloor2 := Tile{
|
|
// common fields
|
|
tileCommonFields: tileCommonFields{
|
|
Prop1: 3,
|
|
Sequence: 89,
|
|
Unknown1: 213,
|
|
Style: 28,
|
|
Unknown2: 53,
|
|
HiddenBytes: 7,
|
|
RandomIndex: 3,
|
|
YAdjust: 28,
|
|
},
|
|
tileFloorShadowFields: tileFloorShadowFields{
|
|
Animated: true,
|
|
},
|
|
}
|
|
|
|
exampleWall1 := Tile{
|
|
// common fields
|
|
tileCommonFields: tileCommonFields{
|
|
Prop1: 3,
|
|
Sequence: 89,
|
|
Unknown1: 213,
|
|
Style: 28,
|
|
Unknown2: 53,
|
|
HiddenBytes: 7,
|
|
RandomIndex: 3,
|
|
YAdjust: 28,
|
|
},
|
|
tileWallFields: tileWallFields{
|
|
Type: d2enum.TileRightWall,
|
|
},
|
|
}
|
|
|
|
exampleWall2 := Tile{
|
|
// common fields
|
|
tileCommonFields: tileCommonFields{
|
|
Prop1: 3,
|
|
Sequence: 93,
|
|
Unknown1: 193,
|
|
Style: 17,
|
|
Unknown2: 13,
|
|
HiddenBytes: 1,
|
|
RandomIndex: 1,
|
|
YAdjust: 22,
|
|
},
|
|
tileWallFields: tileWallFields{
|
|
Type: d2enum.TileLeftWall,
|
|
},
|
|
}
|
|
|
|
exampleShadow := Tile{
|
|
// common fields
|
|
tileCommonFields: tileCommonFields{
|
|
Prop1: 3,
|
|
Sequence: 93,
|
|
Unknown1: 173,
|
|
Style: 17,
|
|
Unknown2: 12,
|
|
HiddenBytes: 1,
|
|
RandomIndex: 1,
|
|
YAdjust: 22,
|
|
},
|
|
tileFloorShadowFields: tileFloorShadowFields{
|
|
Animated: false,
|
|
},
|
|
}
|
|
|
|
result := &DS1{
|
|
ds1Layers: &ds1Layers{
|
|
width: 2,
|
|
height: 2,
|
|
Floors: layerGroup{
|
|
// number of floors (one floor)
|
|
{
|
|
// tile grid = []tileRow
|
|
tiles: tileGrid{
|
|
// tile rows = []Tile
|
|
// 2x2 tiles
|
|
{
|
|
exampleFloor1,
|
|
exampleFloor2,
|
|
},
|
|
{
|
|
exampleFloor2,
|
|
exampleFloor1,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Walls: layerGroup{
|
|
// number of walls (two floors)
|
|
{
|
|
// tile grid = []tileRow
|
|
tiles: tileGrid{
|
|
// tile rows = []Tile
|
|
// 2x2 tiles
|
|
{
|
|
exampleWall1,
|
|
exampleWall2,
|
|
},
|
|
{
|
|
exampleWall2,
|
|
exampleWall1,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
// tile grid = []tileRow
|
|
tiles: tileGrid{
|
|
// tile rows = []Tile
|
|
// 2x2 tiles
|
|
{
|
|
exampleWall1,
|
|
exampleWall2,
|
|
},
|
|
{
|
|
exampleWall2,
|
|
exampleWall1,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Shadows: layerGroup{
|
|
// number of shadows (always 1)
|
|
{
|
|
// tile grid = []tileRow
|
|
tiles: tileGrid{
|
|
// tile rows = []Tile
|
|
// 2x2 tiles
|
|
{
|
|
exampleShadow,
|
|
exampleShadow,
|
|
},
|
|
{
|
|
exampleShadow,
|
|
exampleShadow,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Files: []string{"a.dt1", "bfile.dt1"},
|
|
Objects: []Object{
|
|
{0, 0, 0, 0, 0, nil},
|
|
{0, 1, 0, 0, 0, []d2path.Path{{}}},
|
|
{0, 2, 0, 0, 0, nil},
|
|
{0, 3, 0, 0, 0, nil},
|
|
},
|
|
substitutionGroups: nil,
|
|
version: 17,
|
|
Act: 1,
|
|
SubstitutionType: 0,
|
|
unknown2: 20,
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func TestDS1_MarshalUnmarshal(t *testing.T) {
|
|
ds1 := exampleData()
|
|
|
|
data := ds1.Marshal()
|
|
|
|
_, loadErr := Unmarshal(data)
|
|
if loadErr != nil {
|
|
t.Error(loadErr)
|
|
}
|
|
}
|
|
|
|
func TestDS1_Version(t *testing.T) {
|
|
ds1 := exampleData()
|
|
|
|
v := ds1.Version()
|
|
|
|
ds1.SetVersion(v + 1)
|
|
|
|
if ds1.Version() == v {
|
|
t.Fatal("expected different ds1 version")
|
|
}
|
|
}
|
|
|
|
func TestDS1_SetSize(t *testing.T) {
|
|
ds1 := exampleData()
|
|
|
|
w, h := ds1.Size()
|
|
|
|
ds1.SetSize(w+1, h-1)
|
|
|
|
w2, h2 := ds1.Size()
|
|
|
|
if w2 != (w+1) || h2 != (h-1) {
|
|
t.Fatal("unexpected width/height after setting size")
|
|
}
|
|
}
|
|
|
|
func Test_getLayerSchema(t *testing.T) {
|
|
ds1 := exampleData()
|
|
|
|
expected := map[int]layerStreamType{
|
|
0: layerStreamWall1,
|
|
1: layerStreamOrientation1,
|
|
2: layerStreamWall2,
|
|
3: layerStreamOrientation2,
|
|
4: layerStreamFloor1,
|
|
5: layerStreamShadow1,
|
|
}
|
|
|
|
schema := ds1.getLayerSchema()
|
|
|
|
if len(schema) != len(expected) {
|
|
t.Fatal("unexpected schema length")
|
|
}
|
|
|
|
for idx := range expected {
|
|
if schema[idx] != expected[idx] {
|
|
t.Fatal("unexpected layer type in schema")
|
|
}
|
|
}
|
|
}
|