From db89a09f9d701effe51d2122612a4ecd13d34320 Mon Sep 17 00:00:00 2001 From: "M. Sz" Date: Mon, 29 Mar 2021 08:30:10 +0200 Subject: [PATCH] dt1: added New method and mad unknownX bytes as an constant variable --- d2common/d2fileformats/d2dt1/block.go | 10 ++++- d2common/d2fileformats/d2dt1/dt1.go | 62 ++++++++++++++------------- d2common/d2fileformats/d2dt1/tile.go | 15 +++++-- 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/d2common/d2fileformats/d2dt1/block.go b/d2common/d2fileformats/d2dt1/block.go index 45e01917..fd3b0682 100644 --- a/d2common/d2fileformats/d2dt1/block.go +++ b/d2common/d2fileformats/d2dt1/block.go @@ -2,8 +2,6 @@ package d2dt1 // Block represents a DT1 block type Block struct { - unknown1 []byte - unknown2 []byte X int16 Y int16 GridX byte @@ -22,3 +20,11 @@ func (b *Block) Format() BlockDataFormat { return BlockFormatRLE } + +func (b *Block) unknown1() []byte { + return make([]byte, numUnknownBlockBytes) +} + +func (b *Block) unknown2() []byte { + return make([]byte, numUnknownBlockBytes) +} diff --git a/d2common/d2fileformats/d2dt1/dt1.go b/d2common/d2fileformats/d2dt1/dt1.go index 7dd5d218..a88d57b8 100644 --- a/d2common/d2fileformats/d2dt1/dt1.go +++ b/d2common/d2fileformats/d2dt1/dt1.go @@ -26,16 +26,26 @@ const ( numUnknownTileBytes2 = 4 numUnknownTileBytes3 = 7 numUnknownTileBytes4 = 12 + numUnknownBlockBytes = 2 ) // DT1 represents a DT1 file. type DT1 struct { - majorVersion int32 - minorVersion int32 - unknownHeaderBytes []byte - numberOfTiles int32 - bodyPosition int32 - Tiles []Tile + majorVersion int32 + minorVersion int32 + numberOfTiles int32 + bodyPosition int32 + Tiles []Tile +} + +// New creates a new DT1 +func New() *DT1 { + result := &DT1{ + majorVersion: knownMajorVersion, + minorVersion: knownMinorVersion, + } + + return result } // LoadDT1 loads a DT1 record @@ -61,10 +71,7 @@ func LoadDT1(fileData []byte) (*DT1, error) { return nil, fmt.Errorf(fmtErr, result.majorVersion, result.minorVersion) } - result.unknownHeaderBytes, err = br.ReadBytes(numUnknownHeaderBytes) - if err != nil { - return nil, err - } + br.SkipBytes(numUnknownHeaderBytes) result.numberOfTiles, err = br.ReadInt32() if err != nil { @@ -112,10 +119,7 @@ func LoadDT1(fileData []byte) (*DT1, error) { return nil, err } - tile.unknown1, err = br.ReadBytes(numUnknownTileBytes1) - if err != nil { - return nil, err - } + br.SkipBytes(numUnknownTileBytes1) tile.Type, err = br.ReadInt32() if err != nil { @@ -153,10 +157,7 @@ func LoadDT1(fileData []byte) (*DT1, error) { tile.SubTileFlags[i] = NewSubTileFlags(subtileFlagBytes) } - tile.unknown3, err = br.ReadBytes(numUnknownTileBytes3) - if err != nil { - return nil, err - } + br.SkipBytes(numUnknownTileBytes3) tile.blockHeaderPointer, err = br.ReadInt32() if err != nil { @@ -177,7 +178,7 @@ func LoadDT1(fileData []byte) (*DT1, error) { tile.Blocks = make([]Block, numBlocks) - tile.unknown4, err = br.ReadBytes(numUnknownTileBytes4) + br.SkipBytes(numUnknownTileBytes4) if err != nil { return nil, err } @@ -200,8 +201,7 @@ func LoadDT1(fileData []byte) (*DT1, error) { return nil, err } - //nolint:gomnd // Unknown data - result.Tiles[tileIdx].Blocks[blockIdx].unknown1, err = br.ReadBytes(2) + br.SkipBytes(numUnknownBlockBytes) if err != nil { return nil, err } @@ -226,8 +226,7 @@ func LoadDT1(fileData []byte) (*DT1, error) { return nil, err } - //nolint:gomnd // Unknown data - result.Tiles[tileIdx].Blocks[blockIdx].unknown2, err = br.ReadBytes(2) + br.SkipBytes(numUnknownBlockBytes) if err != nil { return nil, err } @@ -260,7 +259,7 @@ func (d *DT1) Marshal() []byte { // header sw.PushInt32(d.majorVersion) sw.PushInt32(d.minorVersion) - sw.PushBytes(d.unknownHeaderBytes...) + sw.PushBytes(d.unknownHeaderBytes()...) sw.PushInt32(d.numberOfTiles) sw.PushInt32(d.bodyPosition) @@ -271,7 +270,7 @@ func (d *DT1) Marshal() []byte { sw.PushUint16(d.Tiles[i].MaterialFlags.Encode()) sw.PushInt32(d.Tiles[i].Height) sw.PushInt32(d.Tiles[i].Width) - sw.PushBytes(d.Tiles[i].unknown1...) + sw.PushBytes(d.Tiles[i].unknown1()...) sw.PushInt32(d.Tiles[i].Type) sw.PushInt32(d.Tiles[i].Style) sw.PushInt32(d.Tiles[i].Sequence) @@ -282,11 +281,11 @@ func (d *DT1) Marshal() []byte { sw.PushBytes(j.Encode()) } - sw.PushBytes(d.Tiles[i].unknown3...) + sw.PushBytes(d.Tiles[i].unknown3()...) sw.PushInt32(d.Tiles[i].blockHeaderPointer) sw.PushInt32(d.Tiles[i].blockHeaderSize) sw.PushInt32(int32(len(d.Tiles[i].Blocks))) - sw.PushBytes(d.Tiles[i].unknown4...) + sw.PushBytes(d.Tiles[i].unknown4()...) } // we must sort blocks first @@ -308,12 +307,12 @@ func (d *DT1) Marshal() []byte { for j := range blocks[keys[i]] { sw.PushInt16(blocks[keys[i]][j].X) sw.PushInt16(blocks[keys[i]][j].Y) - sw.PushBytes(blocks[keys[i]][j].unknown1...) + sw.PushBytes(blocks[keys[i]][j].unknown1()...) sw.PushBytes(blocks[keys[i]][j].GridX) sw.PushBytes(blocks[keys[i]][j].GridY) sw.PushInt16(blocks[keys[i]][j].format) sw.PushInt32(blocks[keys[i]][j].Length) - sw.PushBytes(blocks[keys[i]][j].unknown2...) + sw.PushBytes(blocks[keys[i]][j].unknown2()...) sw.PushInt32(blocks[keys[i]][j].FileOffset) } @@ -325,3 +324,8 @@ func (d *DT1) Marshal() []byte { return sw.GetBytes() } + +func (d *DT1) unknownHeaderBytes() []byte { + result := make([]byte, numUnknownHeaderBytes) + return result +} diff --git a/d2common/d2fileformats/d2dt1/tile.go b/d2common/d2fileformats/d2dt1/tile.go index 7d1afdd0..93cac0c0 100644 --- a/d2common/d2fileformats/d2dt1/tile.go +++ b/d2common/d2fileformats/d2dt1/tile.go @@ -2,10 +2,7 @@ package d2dt1 // Tile is a representation of a map tile type Tile struct { - unknown1 []byte unknown2 []byte - unknown3 []byte - unknown4 []byte Direction int32 RoofHeight int16 MaterialFlags MaterialFlags @@ -20,3 +17,15 @@ type Tile struct { blockHeaderSize int32 Blocks []Block } + +func (t *Tile) unknown1() []byte { + return make([]byte, numUnknownTileBytes1) +} + +func (t *Tile) unknown3() []byte { + return make([]byte, numUnknownTileBytes3) +} + +func (t *Tile) unknown4() []byte { + return make([]byte, numUnknownTileBytes4) +}