aboutsummaryrefslogtreecommitdiff
path: root/internal/world
diff options
context:
space:
mode:
Diffstat (limited to 'internal/world')
-rw-r--r--internal/world/mob.go85
-rw-r--r--internal/world/objects.go4
2 files changed, 50 insertions, 39 deletions
diff --git a/internal/world/mob.go b/internal/world/mob.go
index 9ca1a45..ec7db36 100644
--- a/internal/world/mob.go
+++ b/internal/world/mob.go
@@ -56,6 +56,7 @@ type MobDef struct {
AssassinLevel int `yaml:"assassin_level"`
FinishingBlow string `yaml:"finishing_blow"`
DamageWithout string `yaml:"damage_without"`
+ Size string `yaml:"size"`
Talk *action.TalkConfig `yaml:"talk,omitempty"`
}
@@ -106,12 +107,56 @@ type MobInstance struct {
AssassinLevel int
FinishingBlow string
DamageWithout string
+ Size string
TalkConfig *action.TalkConfig
}
func (m *MobInstance) IsTalkable() bool { return m.TalkConfig != nil }
+func NewMobInstance(def *MobDef, instanceID string, roomID int, wanderRooms []int, wanderInterval float64) *MobInstance {
+ return &MobInstance{
+ InstanceID: instanceID,
+ DefID: def.ID,
+ Name: def.Name,
+ HP: def.HP,
+ MaxHP: def.HP,
+ Attack: def.Attack,
+ Strength: def.Strength,
+ Defense: def.Defense,
+ Ranged: def.Ranged,
+ Science: def.Science,
+ Speed: def.Speed,
+ Aggressive: def.Aggressive,
+ Protected: def.Protected,
+ Unique: def.Unique,
+ RespawnTicks: def.RespawnTicks,
+ RoomID: roomID,
+ HomeRoomID: roomID,
+ WanderRooms: wanderRooms,
+ WanderInterval: wanderInterval,
+ Drops: def.Drops,
+ AttackBonus: def.AttackBonus,
+ StrengthBonus: def.StrengthBonus,
+ AttackType: def.AttackType,
+ StabDefense: def.StabDefense,
+ SlashDefense: def.SlashDefense,
+ CrushDefense: def.CrushDefense,
+ ScienceDefense: def.ScienceDefense,
+ RangedDefense: def.RangedDefense,
+ Weakness: def.Weakness,
+ StealTable: def.StealTable,
+ StealLevel: def.StealLevel,
+ StealXP: def.StealXP,
+ StealSpeed: def.StealSpeed,
+ AssassinLevel: def.AssassinLevel,
+ FinishingBlow: def.FinishingBlow,
+ DamageWithout: def.DamageWithout,
+ Size: def.Size,
+ TalkConfig: def.Talk,
+ }
+}
+
const (
MatchNone = 0
MatchPrefix = 1
@@ -276,45 +321,7 @@ func (s *MobStore) SeedMobs(roomID int, entries []RoomMob) {
if _, exists := s.instances[instID]; exists {
continue
}
- inst := &MobInstance{
- InstanceID: instID,
- DefID: defID,
- Name: dw.def.Name,
- HP: dw.def.HP,
- MaxHP: dw.def.HP,
- Attack: dw.def.Attack,
- Strength: dw.def.Strength,
- Defense: dw.def.Defense,
- Ranged: dw.def.Ranged,
- Science: dw.def.Science,
- Speed: dw.def.Speed,
- Aggressive: dw.def.Aggressive,
- Protected: dw.def.Protected,
- Unique: dw.def.Unique,
- RespawnTicks: dw.def.RespawnTicks,
- WanderRooms: dw.rm.WanderRooms,
- WanderInterval: dw.rm.WanderInterval,
- RoomID: roomID,
- HomeRoomID: roomID,
- Drops: dw.def.Drops,
- AttackBonus: dw.def.AttackBonus,
- StrengthBonus: dw.def.StrengthBonus,
- AttackType: dw.def.AttackType,
- StabDefense: dw.def.StabDefense,
- SlashDefense: dw.def.SlashDefense,
- CrushDefense: dw.def.CrushDefense,
- ScienceDefense: dw.def.ScienceDefense,
- RangedDefense: dw.def.RangedDefense,
- Weakness: dw.def.Weakness,
- StealTable: dw.def.StealTable,
- StealLevel: dw.def.StealLevel,
- StealXP: dw.def.StealXP,
- StealSpeed: dw.def.StealSpeed,
- AssassinLevel: dw.def.AssassinLevel,
- FinishingBlow: dw.def.FinishingBlow,
- DamageWithout: dw.def.DamageWithout,
- TalkConfig: dw.def.Talk,
- }
+ inst := NewMobInstance(dw.def, instID, roomID, dw.rm.WanderRooms, dw.rm.WanderInterval)
inst.IdleDescription = pickIdleDescription(dw.def.IdleDescriptions)
s.instances[instID] = inst
}
diff --git a/internal/world/objects.go b/internal/world/objects.go
index ae2586a..bf4b592 100644
--- a/internal/world/objects.go
+++ b/internal/world/objects.go
@@ -23,6 +23,10 @@ type ObjState struct {
SharedMax float64
SharedTimer int
Quality float64
+
+ SafespotLevel int
+ SafespotTicksAtLevel int
+ SafespotOccupants []string
}
type ObjMove struct {