You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
6.4 KiB
Go
168 lines
6.4 KiB
Go
package model
|
|
|
|
type EnemyType string
|
|
|
|
const (
|
|
EnemyWolf EnemyType = "wolf"
|
|
EnemyBoar EnemyType = "boar"
|
|
EnemyZombie EnemyType = "zombie"
|
|
EnemySpider EnemyType = "spider"
|
|
EnemyOrc EnemyType = "orc"
|
|
EnemySkeletonArcher EnemyType = "skeleton_archer"
|
|
EnemyBattleLizard EnemyType = "battle_lizard"
|
|
EnemyFireDemon EnemyType = "fire_demon"
|
|
EnemyIceGuardian EnemyType = "ice_guardian"
|
|
EnemySkeletonKing EnemyType = "skeleton_king"
|
|
EnemyWaterElement EnemyType = "water_element"
|
|
EnemyForestWarden EnemyType = "forest_warden"
|
|
EnemyLightningTitan EnemyType = "lightning_titan"
|
|
)
|
|
|
|
type SpecialAbility string
|
|
|
|
const (
|
|
AbilityBurn SpecialAbility = "burn" // DoT fire damage
|
|
AbilitySlow SpecialAbility = "slow" // -40% movement speed (Water Element)
|
|
AbilityCritical SpecialAbility = "critical" // chance for double damage
|
|
AbilityPoison SpecialAbility = "poison" // DoT poison damage
|
|
AbilityFreeze SpecialAbility = "freeze" // -50% attack speed (generic)
|
|
AbilityIceSlow SpecialAbility = "ice_slow" // -20% attack speed (Ice Guardian per spec)
|
|
AbilityStun SpecialAbility = "stun" // no attacks for 2 sec
|
|
AbilityDodge SpecialAbility = "dodge" // chance to avoid incoming damage
|
|
AbilityRegen SpecialAbility = "regen" // regenerate HP over time
|
|
AbilityBurst SpecialAbility = "burst" // every Nth attack deals multiplied damage
|
|
AbilityChainLightning SpecialAbility = "chain_lightning" // 3x damage after 5 attacks
|
|
AbilitySummon SpecialAbility = "summon" // summons minions
|
|
)
|
|
|
|
type Enemy struct {
|
|
ID int64 `json:"id"`
|
|
Type EnemyType `json:"type"`
|
|
Name string `json:"name"`
|
|
HP int `json:"hp"`
|
|
MaxHP int `json:"maxHp"`
|
|
Attack int `json:"attack"`
|
|
Defense int `json:"defense"`
|
|
Speed float64 `json:"speed"` // attacks per second
|
|
CritChance float64 `json:"critChance"` // 0.0 to 1.0
|
|
MinLevel int `json:"minLevel"`
|
|
MaxLevel int `json:"maxLevel"`
|
|
XPReward int64 `json:"xpReward"`
|
|
GoldReward int64 `json:"goldReward"`
|
|
SpecialAbilities []SpecialAbility `json:"specialAbilities,omitempty"`
|
|
IsElite bool `json:"isElite"`
|
|
AttackCount int `json:"-"` // tracks attacks for burst/chain abilities
|
|
}
|
|
|
|
// IsAlive returns true if the enemy has HP remaining.
|
|
func (e *Enemy) IsAlive() bool {
|
|
return e.HP > 0
|
|
}
|
|
|
|
// HasAbility checks if the enemy possesses a given special ability.
|
|
func (e *Enemy) HasAbility(a SpecialAbility) bool {
|
|
for _, ab := range e.SpecialAbilities {
|
|
if ab == a {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// EnemyTemplates defines base stats for each enemy type.
|
|
// These are used when spawning new enemies; actual instances may have scaled stats.
|
|
var EnemyTemplates = map[EnemyType]Enemy{
|
|
// --- Basic enemies ---
|
|
EnemyWolf: {
|
|
Type: EnemyWolf, Name: "Forest Wolf",
|
|
MaxHP: 45, Attack: 9, Defense: 4, Speed: 1.8, CritChance: 0.05,
|
|
MinLevel: 1, MaxLevel: 5,
|
|
XPReward: 1, GoldReward: 1,
|
|
},
|
|
EnemyBoar: {
|
|
Type: EnemyBoar, Name: "Wild Boar",
|
|
MaxHP: 65, Attack: 18, Defense: 7, Speed: 0.8, CritChance: 0.08,
|
|
MinLevel: 2, MaxLevel: 6,
|
|
XPReward: 1, GoldReward: 1,
|
|
},
|
|
EnemyZombie: {
|
|
Type: EnemyZombie, Name: "Rotting Zombie",
|
|
MaxHP: 95, Attack: 16, Defense: 7, Speed: 0.5,
|
|
MinLevel: 3, MaxLevel: 8,
|
|
XPReward: 1, GoldReward: 1,
|
|
SpecialAbilities: []SpecialAbility{AbilityPoison},
|
|
},
|
|
EnemySpider: {
|
|
Type: EnemySpider, Name: "Cave Spider",
|
|
MaxHP: 38, Attack: 16, Defense: 3, Speed: 2.0, CritChance: 0.15,
|
|
MinLevel: 4, MaxLevel: 9,
|
|
XPReward: 1, GoldReward: 1,
|
|
SpecialAbilities: []SpecialAbility{AbilityCritical},
|
|
},
|
|
EnemyOrc: {
|
|
Type: EnemyOrc, Name: "Orc Warrior",
|
|
MaxHP: 110, Attack: 21, Defense: 12, Speed: 1.0, CritChance: 0.05,
|
|
MinLevel: 5, MaxLevel: 12,
|
|
XPReward: 1, GoldReward: 1,
|
|
SpecialAbilities: []SpecialAbility{AbilityBurst},
|
|
},
|
|
EnemySkeletonArcher: {
|
|
Type: EnemySkeletonArcher, Name: "Skeleton Archer",
|
|
MaxHP: 90, Attack: 24, Defense: 10, Speed: 1.3, CritChance: 0.06,
|
|
MinLevel: 6, MaxLevel: 14,
|
|
XPReward: 1, GoldReward: 1,
|
|
SpecialAbilities: []SpecialAbility{AbilityDodge},
|
|
},
|
|
EnemyBattleLizard: {
|
|
Type: EnemyBattleLizard, Name: "Battle Lizard",
|
|
MaxHP: 140, Attack: 24, Defense: 18, Speed: 0.7, CritChance: 0.03,
|
|
MinLevel: 7, MaxLevel: 15,
|
|
XPReward: 1, GoldReward: 1,
|
|
SpecialAbilities: []SpecialAbility{AbilityRegen},
|
|
},
|
|
|
|
// --- Elite enemies ---
|
|
EnemyFireDemon: {
|
|
Type: EnemyFireDemon, Name: "Fire Demon",
|
|
MaxHP: 230, Attack: 34, Defense: 20, Speed: 1.2, CritChance: 0.10,
|
|
MinLevel: 10, MaxLevel: 20,
|
|
XPReward: 1, GoldReward: 1, IsElite: true,
|
|
SpecialAbilities: []SpecialAbility{AbilityBurn},
|
|
},
|
|
EnemyIceGuardian: {
|
|
Type: EnemyIceGuardian, Name: "Ice Guardian",
|
|
MaxHP: 280, Attack: 32, Defense: 28, Speed: 0.7, CritChance: 0.04,
|
|
MinLevel: 12, MaxLevel: 22,
|
|
XPReward: 1, GoldReward: 1, IsElite: true,
|
|
SpecialAbilities: []SpecialAbility{AbilityIceSlow},
|
|
},
|
|
EnemySkeletonKing: {
|
|
Type: EnemySkeletonKing, Name: "Skeleton King",
|
|
MaxHP: 420, Attack: 48, Defense: 30, Speed: 0.9, CritChance: 0.08,
|
|
MinLevel: 15, MaxLevel: 25,
|
|
XPReward: 1, GoldReward: 1, IsElite: true,
|
|
SpecialAbilities: []SpecialAbility{AbilityRegen, AbilitySummon},
|
|
},
|
|
EnemyWaterElement: {
|
|
Type: EnemyWaterElement, Name: "Water Element",
|
|
MaxHP: 520, Attack: 42, Defense: 24, Speed: 0.8, CritChance: 0.05,
|
|
MinLevel: 18, MaxLevel: 28,
|
|
XPReward: 2, GoldReward: 1, IsElite: true,
|
|
SpecialAbilities: []SpecialAbility{AbilitySlow},
|
|
},
|
|
EnemyForestWarden: {
|
|
Type: EnemyForestWarden, Name: "Forest Warden",
|
|
MaxHP: 700, Attack: 38, Defense: 40, Speed: 0.5, CritChance: 0.03,
|
|
MinLevel: 20, MaxLevel: 30,
|
|
XPReward: 2, GoldReward: 1, IsElite: true,
|
|
SpecialAbilities: []SpecialAbility{AbilityRegen},
|
|
},
|
|
EnemyLightningTitan: {
|
|
Type: EnemyLightningTitan, Name: "Lightning Titan",
|
|
MaxHP: 650, Attack: 56, Defense: 30, Speed: 1.5, CritChance: 0.12,
|
|
MinLevel: 25, MaxLevel: 35,
|
|
XPReward: 3, GoldReward: 2, IsElite: true,
|
|
SpecialAbilities: []SpecialAbility{AbilityStun, AbilityChainLightning},
|
|
},
|
|
}
|