92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package combat
|
|
|
|
import "github.com/tolelom/catacombs/entity"
|
|
|
|
type ComboAction struct {
|
|
Class entity.Class
|
|
ActionType string // "attack", "skill", "item"
|
|
}
|
|
|
|
type ComboEffect struct {
|
|
DamageMultiplier float64 // multiplied onto each AttackIntent.Multiplier
|
|
BonusDamage int // added to each AttackIntent.PlayerATK
|
|
HealAll int // heal all players after resolution
|
|
Message string // shown in combat log
|
|
}
|
|
|
|
type ComboDef struct {
|
|
Name string
|
|
Required []ComboAction
|
|
Effect ComboEffect
|
|
}
|
|
|
|
var comboDefs = []ComboDef{
|
|
{
|
|
Name: "Ice Shatter",
|
|
Required: []ComboAction{
|
|
{Class: entity.ClassMage, ActionType: "skill"},
|
|
{Class: entity.ClassWarrior, ActionType: "attack"},
|
|
},
|
|
Effect: ComboEffect{DamageMultiplier: 1.5, Message: "💥 ICE SHATTER! Frozen enemies shatter!"},
|
|
},
|
|
{
|
|
Name: "Holy Assault",
|
|
Required: []ComboAction{
|
|
{Class: entity.ClassHealer, ActionType: "skill"},
|
|
{Class: entity.ClassWarrior, ActionType: "attack"},
|
|
},
|
|
Effect: ComboEffect{DamageMultiplier: 1.3, HealAll: 10, Message: "✨ HOLY ASSAULT! Blessed strikes heal the party!"},
|
|
},
|
|
{
|
|
Name: "Shadow Strike",
|
|
Required: []ComboAction{
|
|
{Class: entity.ClassRogue, ActionType: "skill"},
|
|
{Class: entity.ClassMage, ActionType: "attack"},
|
|
},
|
|
Effect: ComboEffect{DamageMultiplier: 1.4, Message: "🗡️ SHADOW STRIKE! Magical shadows amplify the attack!"},
|
|
},
|
|
{
|
|
Name: "Full Assault",
|
|
Required: []ComboAction{
|
|
{Class: entity.ClassWarrior, ActionType: "attack"},
|
|
{Class: entity.ClassMage, ActionType: "attack"},
|
|
{Class: entity.ClassRogue, ActionType: "attack"},
|
|
},
|
|
Effect: ComboEffect{DamageMultiplier: 1.3, BonusDamage: 5, Message: "⚔️ FULL ASSAULT! Combined attack overwhelms!"},
|
|
},
|
|
{
|
|
Name: "Restoration",
|
|
Required: []ComboAction{
|
|
{Class: entity.ClassHealer, ActionType: "skill"},
|
|
{Class: entity.ClassRogue, ActionType: "item"},
|
|
},
|
|
Effect: ComboEffect{HealAll: 20, Message: "💚 RESTORATION! Combined healing surges!"},
|
|
},
|
|
}
|
|
|
|
func DetectCombos(actions map[string]ComboAction) []ComboDef {
|
|
var triggered []ComboDef
|
|
for _, combo := range comboDefs {
|
|
if matchesCombo(combo.Required, actions) {
|
|
triggered = append(triggered, combo)
|
|
}
|
|
}
|
|
return triggered
|
|
}
|
|
|
|
func matchesCombo(required []ComboAction, actions map[string]ComboAction) bool {
|
|
for _, req := range required {
|
|
found := false
|
|
for _, act := range actions {
|
|
if act.Class == req.Class && act.ActionType == req.ActionType {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|