1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-16 04:25:23 +00:00
OpenDiablo2/d2common/d2data/d2datadict/monster_level.go

114 lines
3.3 KiB
Go
Raw Normal View History

2020-07-31 19:00:09 +00:00
package d2datadict
import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
)
//MonsterLevelRecord represents a single row in monlvl.txt
type MonsterLevelRecord struct {
//The level
Level int
//Values for Battle.net
BattleNet monsterLevelValues
//Values for ladder/single player/lan
Ladder monsterLevelValues
}
type monsterLevelValues struct {
//Armor class
//An AC is calcuated as (MonLvl.txt Ac * Monstats.txt AC) / 100)
ArmorClass int
ArmorClassNightmare int
ArmorClassHell int
//To hit, influences ToHit values for both attacks
// (MonLvl.txt TH * Monstats.txt A1TH
// and MonLvl.txt TH * Monstats.txt A2TH) / 100
ToHit int
ToHitNightmare int
ToHitHell int
//Hitpoints, influences both minimum and maximum HP
//(MonLvl.txt HP * Monstats.txt minHP) / 100
// and MonLvl.txt HP * Monstats.txt maxHP) / 100
Hitpoints int
HitpointsNightmare int
HitpointsHell int
//Damage, influences minimum and maximum damage for both attacks
//MonLvl.txt DM * Monstats.txt A1MinD) / 100
// and MonLvl.txt DM * Monstats.txt A1MaxD) / 100
// and MonLvl.txt DM * Monstats.txt A2MinD) / 100
// and MonLvl.txt DM * Monstats.txt A2MaxD) / 100
Damage int
DamageNightmare int
DamageHell int
//Experience points
//The formula is (MonLvl.txt XP * Monstats.txt Exp) / 100
Experience int
ExperienceNightmare int
ExperienceHell int
}
//MonsterLevels stores the MonsterLevelRecords
var MonsterLevels map[int]*MonsterLevelRecord
//LoadMonsterLevels loads LoadMonsterLevelRecords into MonsterLevels
func LoadMonsterLevels(file []byte) {
MonsterLevels = make(map[int]*MonsterLevelRecord)
d := d2common.LoadDataDictionary(file)
for d.Next() {
record := &MonsterLevelRecord{
Level: d.Number("Level"),
BattleNet: monsterLevelValues{
ArmorClass: d.Number("AC"),
ArmorClassNightmare: d.Number("AC(N)"),
ArmorClassHell: d.Number("AC(H)"),
ToHit: d.Number("TH"),
ToHitNightmare: d.Number("TH (N)"),
ToHitHell: d.Number("TH (H)"),
Hitpoints: d.Number("HP"),
HitpointsNightmare: d.Number("HP (N)"),
HitpointsHell: d.Number("HP (H)"),
Damage: d.Number("DM"),
DamageNightmare: d.Number("DM (N)"),
DamageHell: d.Number("DM (H)"),
Experience: d.Number("XP"),
ExperienceNightmare: d.Number("XP (N)"),
ExperienceHell: d.Number("XP (H)"),
},
Ladder: monsterLevelValues{
ArmorClass: d.Number("L-AC"),
ArmorClassNightmare: d.Number("L-AC(N)"),
ArmorClassHell: d.Number("L-AC(H)"),
ToHit: d.Number("L-TH"),
ToHitNightmare: d.Number("L-TH (N)"),
ToHitHell: d.Number("L-TH (H)"),
Hitpoints: d.Number("L-HP"),
HitpointsNightmare: d.Number("L-HP (N)"),
HitpointsHell: d.Number("L-HP (H)"),
Damage: d.Number("L-DM"),
DamageNightmare: d.Number("L-DM (N)"),
DamageHell: d.Number("L-DM (H)"),
Experience: d.Number("L-XP"),
ExperienceNightmare: d.Number("L-XP (N)"),
ExperienceHell: d.Number("L-XP (H)"),
},
}
MonsterLevels[record.Level] = record
}
if d.Err != nil {
panic(d.Err)
}
log.Printf("Loaded %d MonsterLevel records", len(MonsterLevels))
}