mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-27 21:56:19 -04:00
dt1: added New method and mad unknownX bytes as an constant variable
This commit is contained in:
parent
435fd1a61b
commit
db89a09f9d
@ -2,8 +2,6 @@ package d2dt1
|
|||||||
|
|
||||||
// Block represents a DT1 block
|
// Block represents a DT1 block
|
||||||
type Block struct {
|
type Block struct {
|
||||||
unknown1 []byte
|
|
||||||
unknown2 []byte
|
|
||||||
X int16
|
X int16
|
||||||
Y int16
|
Y int16
|
||||||
GridX byte
|
GridX byte
|
||||||
@ -22,3 +20,11 @@ func (b *Block) Format() BlockDataFormat {
|
|||||||
|
|
||||||
return BlockFormatRLE
|
return BlockFormatRLE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Block) unknown1() []byte {
|
||||||
|
return make([]byte, numUnknownBlockBytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Block) unknown2() []byte {
|
||||||
|
return make([]byte, numUnknownBlockBytes)
|
||||||
|
}
|
||||||
|
@ -26,18 +26,28 @@ const (
|
|||||||
numUnknownTileBytes2 = 4
|
numUnknownTileBytes2 = 4
|
||||||
numUnknownTileBytes3 = 7
|
numUnknownTileBytes3 = 7
|
||||||
numUnknownTileBytes4 = 12
|
numUnknownTileBytes4 = 12
|
||||||
|
numUnknownBlockBytes = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
// DT1 represents a DT1 file.
|
// DT1 represents a DT1 file.
|
||||||
type DT1 struct {
|
type DT1 struct {
|
||||||
majorVersion int32
|
majorVersion int32
|
||||||
minorVersion int32
|
minorVersion int32
|
||||||
unknownHeaderBytes []byte
|
|
||||||
numberOfTiles int32
|
numberOfTiles int32
|
||||||
bodyPosition int32
|
bodyPosition int32
|
||||||
Tiles []Tile
|
Tiles []Tile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New creates a new DT1
|
||||||
|
func New() *DT1 {
|
||||||
|
result := &DT1{
|
||||||
|
majorVersion: knownMajorVersion,
|
||||||
|
minorVersion: knownMinorVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// LoadDT1 loads a DT1 record
|
// LoadDT1 loads a DT1 record
|
||||||
//nolint:funlen,gocognit,gocyclo // Can't reduce
|
//nolint:funlen,gocognit,gocyclo // Can't reduce
|
||||||
func LoadDT1(fileData []byte) (*DT1, error) {
|
func LoadDT1(fileData []byte) (*DT1, error) {
|
||||||
@ -61,10 +71,7 @@ func LoadDT1(fileData []byte) (*DT1, error) {
|
|||||||
return nil, fmt.Errorf(fmtErr, result.majorVersion, result.minorVersion)
|
return nil, fmt.Errorf(fmtErr, result.majorVersion, result.minorVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
result.unknownHeaderBytes, err = br.ReadBytes(numUnknownHeaderBytes)
|
br.SkipBytes(numUnknownHeaderBytes)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
result.numberOfTiles, err = br.ReadInt32()
|
result.numberOfTiles, err = br.ReadInt32()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -112,10 +119,7 @@ func LoadDT1(fileData []byte) (*DT1, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
tile.unknown1, err = br.ReadBytes(numUnknownTileBytes1)
|
br.SkipBytes(numUnknownTileBytes1)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
tile.Type, err = br.ReadInt32()
|
tile.Type, err = br.ReadInt32()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -153,10 +157,7 @@ func LoadDT1(fileData []byte) (*DT1, error) {
|
|||||||
tile.SubTileFlags[i] = NewSubTileFlags(subtileFlagBytes)
|
tile.SubTileFlags[i] = NewSubTileFlags(subtileFlagBytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
tile.unknown3, err = br.ReadBytes(numUnknownTileBytes3)
|
br.SkipBytes(numUnknownTileBytes3)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
tile.blockHeaderPointer, err = br.ReadInt32()
|
tile.blockHeaderPointer, err = br.ReadInt32()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -177,7 +178,7 @@ func LoadDT1(fileData []byte) (*DT1, error) {
|
|||||||
|
|
||||||
tile.Blocks = make([]Block, numBlocks)
|
tile.Blocks = make([]Block, numBlocks)
|
||||||
|
|
||||||
tile.unknown4, err = br.ReadBytes(numUnknownTileBytes4)
|
br.SkipBytes(numUnknownTileBytes4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -200,8 +201,7 @@ func LoadDT1(fileData []byte) (*DT1, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint:gomnd // Unknown data
|
br.SkipBytes(numUnknownBlockBytes)
|
||||||
result.Tiles[tileIdx].Blocks[blockIdx].unknown1, err = br.ReadBytes(2)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -226,8 +226,7 @@ func LoadDT1(fileData []byte) (*DT1, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint:gomnd // Unknown data
|
br.SkipBytes(numUnknownBlockBytes)
|
||||||
result.Tiles[tileIdx].Blocks[blockIdx].unknown2, err = br.ReadBytes(2)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -260,7 +259,7 @@ func (d *DT1) Marshal() []byte {
|
|||||||
// header
|
// header
|
||||||
sw.PushInt32(d.majorVersion)
|
sw.PushInt32(d.majorVersion)
|
||||||
sw.PushInt32(d.minorVersion)
|
sw.PushInt32(d.minorVersion)
|
||||||
sw.PushBytes(d.unknownHeaderBytes...)
|
sw.PushBytes(d.unknownHeaderBytes()...)
|
||||||
sw.PushInt32(d.numberOfTiles)
|
sw.PushInt32(d.numberOfTiles)
|
||||||
sw.PushInt32(d.bodyPosition)
|
sw.PushInt32(d.bodyPosition)
|
||||||
|
|
||||||
@ -271,7 +270,7 @@ func (d *DT1) Marshal() []byte {
|
|||||||
sw.PushUint16(d.Tiles[i].MaterialFlags.Encode())
|
sw.PushUint16(d.Tiles[i].MaterialFlags.Encode())
|
||||||
sw.PushInt32(d.Tiles[i].Height)
|
sw.PushInt32(d.Tiles[i].Height)
|
||||||
sw.PushInt32(d.Tiles[i].Width)
|
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].Type)
|
||||||
sw.PushInt32(d.Tiles[i].Style)
|
sw.PushInt32(d.Tiles[i].Style)
|
||||||
sw.PushInt32(d.Tiles[i].Sequence)
|
sw.PushInt32(d.Tiles[i].Sequence)
|
||||||
@ -282,11 +281,11 @@ func (d *DT1) Marshal() []byte {
|
|||||||
sw.PushBytes(j.Encode())
|
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].blockHeaderPointer)
|
||||||
sw.PushInt32(d.Tiles[i].blockHeaderSize)
|
sw.PushInt32(d.Tiles[i].blockHeaderSize)
|
||||||
sw.PushInt32(int32(len(d.Tiles[i].Blocks)))
|
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
|
// we must sort blocks first
|
||||||
@ -308,12 +307,12 @@ func (d *DT1) Marshal() []byte {
|
|||||||
for j := range blocks[keys[i]] {
|
for j := range blocks[keys[i]] {
|
||||||
sw.PushInt16(blocks[keys[i]][j].X)
|
sw.PushInt16(blocks[keys[i]][j].X)
|
||||||
sw.PushInt16(blocks[keys[i]][j].Y)
|
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].GridX)
|
||||||
sw.PushBytes(blocks[keys[i]][j].GridY)
|
sw.PushBytes(blocks[keys[i]][j].GridY)
|
||||||
sw.PushInt16(blocks[keys[i]][j].format)
|
sw.PushInt16(blocks[keys[i]][j].format)
|
||||||
sw.PushInt32(blocks[keys[i]][j].Length)
|
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)
|
sw.PushInt32(blocks[keys[i]][j].FileOffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,3 +324,8 @@ func (d *DT1) Marshal() []byte {
|
|||||||
|
|
||||||
return sw.GetBytes()
|
return sw.GetBytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *DT1) unknownHeaderBytes() []byte {
|
||||||
|
result := make([]byte, numUnknownHeaderBytes)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
@ -2,10 +2,7 @@ package d2dt1
|
|||||||
|
|
||||||
// Tile is a representation of a map tile
|
// Tile is a representation of a map tile
|
||||||
type Tile struct {
|
type Tile struct {
|
||||||
unknown1 []byte
|
|
||||||
unknown2 []byte
|
unknown2 []byte
|
||||||
unknown3 []byte
|
|
||||||
unknown4 []byte
|
|
||||||
Direction int32
|
Direction int32
|
||||||
RoofHeight int16
|
RoofHeight int16
|
||||||
MaterialFlags MaterialFlags
|
MaterialFlags MaterialFlags
|
||||||
@ -20,3 +17,15 @@ type Tile struct {
|
|||||||
blockHeaderSize int32
|
blockHeaderSize int32
|
||||||
Blocks []Block
|
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)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user