2020-01-26 00:39:13 -05:00
|
|
|
package d2datadict
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
|
|
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
|
|
|
)
|
|
|
|
|
2020-06-30 09:17:07 -04:00
|
|
|
// LevelWarpRecord is a representation of a row from lvlwarp.txt
|
|
|
|
// it describes the warp graphics offsets and dimensions for levels
|
2020-01-26 00:39:13 -05:00
|
|
|
type LevelWarpRecord struct {
|
2020-06-29 12:37:11 -04:00
|
|
|
ID int32
|
2020-01-26 00:39:13 -05:00
|
|
|
SelectX int32
|
|
|
|
SelectY int32
|
|
|
|
SelectDX int32
|
|
|
|
SelectDY int32
|
|
|
|
ExitWalkX int32
|
|
|
|
ExitWalkY int32
|
|
|
|
OffsetX int32
|
|
|
|
OffsetY int32
|
|
|
|
LitVersion bool
|
|
|
|
Tiles int32
|
|
|
|
Direction string
|
|
|
|
}
|
|
|
|
|
2020-06-29 12:37:11 -04:00
|
|
|
// LevelWarps loaded from txt records
|
2020-06-30 09:17:07 -04:00
|
|
|
//nolint:gochecknoglobals // Currently global by design, only written once
|
2020-01-26 00:39:13 -05:00
|
|
|
var LevelWarps map[int]*LevelWarpRecord
|
|
|
|
|
2020-06-29 12:37:11 -04:00
|
|
|
// LoadLevelWarps loads LevelWarpRecord's from text file data
|
2020-01-31 23:18:11 -05:00
|
|
|
func LoadLevelWarps(levelWarpData []byte) {
|
2020-01-26 00:39:13 -05:00
|
|
|
LevelWarps = make(map[int]*LevelWarpRecord)
|
|
|
|
streamReader := d2common.CreateStreamReader(levelWarpData)
|
|
|
|
numRecords := int(streamReader.GetInt32())
|
2020-06-29 12:37:11 -04:00
|
|
|
|
2020-01-26 00:39:13 -05:00
|
|
|
for i := 0; i < numRecords; i++ {
|
|
|
|
id := int(streamReader.GetInt32())
|
|
|
|
LevelWarps[id] = &LevelWarpRecord{}
|
2020-06-29 12:37:11 -04:00
|
|
|
LevelWarps[id].ID = int32(id)
|
2020-01-26 00:39:13 -05:00
|
|
|
LevelWarps[id].SelectX = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].SelectY = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].SelectDX = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].SelectDY = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].ExitWalkX = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].ExitWalkY = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].OffsetX = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].OffsetY = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].LitVersion = streamReader.GetInt32() == 1
|
|
|
|
LevelWarps[id].Tiles = streamReader.GetInt32()
|
|
|
|
LevelWarps[id].Direction = string(streamReader.GetByte())
|
|
|
|
streamReader.SkipBytes(3)
|
|
|
|
}
|
2020-06-29 12:37:11 -04:00
|
|
|
|
2020-01-26 00:39:13 -05:00
|
|
|
log.Printf("Loaded %d level warps", len(LevelWarps))
|
|
|
|
}
|