OpenDiablo2/d2common/d2data/d2datadict/level_presets.go

107 lines
2.7 KiB
Go

package d2datadict
import (
"log"
"strings"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
)
type LevelPresetRecord struct {
Name string
DefinitionID int
LevelID int
Populate bool
Logicals bool
Outdoors bool
Animate bool
KillEdge bool
FillBlanks bool
SizeX int
SizeY int
AutoMap bool
Scan bool
Pops int
PopPad int
FileCount int
Files [6]string
Dt1Mask uint
Beta bool
Expansion bool
}
// CreateLevelPresetRecord parses a row from lvlprest.txt into a LevelPresetRecord
func createLevelPresetRecord(props []string) LevelPresetRecord {
i := -1
inc := func() int {
i++
return i
}
result := LevelPresetRecord{
Name: props[inc()],
DefinitionID: d2common.StringToInt(props[inc()]),
LevelID: d2common.StringToInt(props[inc()]),
Populate: d2common.StringToUint8(props[inc()]) == 1,
Logicals: d2common.StringToUint8(props[inc()]) == 1,
Outdoors: d2common.StringToUint8(props[inc()]) == 1,
Animate: d2common.StringToUint8(props[inc()]) == 1,
KillEdge: d2common.StringToUint8(props[inc()]) == 1,
FillBlanks: d2common.StringToUint8(props[inc()]) == 1,
SizeX: d2common.StringToInt(props[inc()]),
SizeY: d2common.StringToInt(props[inc()]),
AutoMap: d2common.StringToUint8(props[inc()]) == 1,
Scan: d2common.StringToUint8(props[inc()]) == 1,
Pops: d2common.StringToInt(props[inc()]),
PopPad: d2common.StringToInt(props[inc()]),
FileCount: d2common.StringToInt(props[inc()]),
Files: [6]string{
props[inc()],
props[inc()],
props[inc()],
props[inc()],
props[inc()],
props[inc()],
},
Dt1Mask: d2common.StringToUint(props[inc()]),
Beta: d2common.StringToUint8(props[inc()]) == 1,
Expansion: d2common.StringToUint8(props[inc()]) == 1,
}
return result
}
var LevelPresets map[int]LevelPresetRecord
// LoadLevelPresets loads level presets from text file
func LoadLevelPresets(file []byte) {
LevelPresets = make(map[int]LevelPresetRecord)
data := strings.Split(string(file), "\r\n")[1:]
for _, line := range data {
if line == "" {
continue
}
props := strings.Split(line, "\t")
if props[1] == "" {
continue // any line without a definition id is skipped (e.g. the "Expansion" line)
}
rec := createLevelPresetRecord(props)
LevelPresets[rec.DefinitionID] = rec
}
log.Printf("Loaded %d level presets", len(LevelPresets))
}
// LevelPreset looks up a LevelPresetRecord by ID
func LevelPreset(id int) LevelPresetRecord {
for i := 0; i < len(LevelPresets); i++ {
if LevelPresets[i].DefinitionID == id {
return LevelPresets[i]
}
}
panic("Unknown level preset")
}