diff --git a/internal/relic/cavern/band/band.go b/internal/relic/cavern/band/band.go new file mode 100644 index 00000000..f7b76d91 --- /dev/null +++ b/internal/relic/cavern/band/band.go @@ -0,0 +1,63 @@ +package band + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const ( + check = "band-of-sizzling-thunder" + buff = "band-of-sizzling-thunder-buff" +) + +// 2pc: Increases Lightning DMG by 10%. +// 4pc: When the wearer uses their Skill, increases the wearer's ATK by 20% for 1 turn(s). + +func init() { + relic.Register(key.BandOfSizzlingThunder, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.ThunderDamagePercent: 0.1}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: nil, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: check, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(check, modifier.Config{ + Listeners: modifier.Listeners{ + OnBeforeAction: onBeforeSkill, + }, + }) + modifier.Register(buff, modifier.Config{ + Stacking: modifier.ReplaceBySource, + StatusType: model.StatusType_STATUS_BUFF, + CanDispel: true, + Duration: 1, + }) +} + +func onBeforeSkill(mod *modifier.Instance, e event.ActionStart) { + if e.AttackType == model.AttackType_SKILL { + mod.Engine().AddModifier(mod.Owner(), info.Modifier{ + Name: buff, + Source: mod.Owner(), + Stats: info.PropMap{prop.ATKPercent: 0.2}, + }) + } +} diff --git a/internal/relic/cavern/disciple/disciple.go b/internal/relic/cavern/disciple/disciple.go new file mode 100644 index 00000000..d747494e --- /dev/null +++ b/internal/relic/cavern/disciple/disciple.go @@ -0,0 +1,83 @@ +package disciple + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const ( + check = "longevous-disciple" + crbuff = "longevous-disciple-cr-buff" +) + +// 2pc: Increases Max HP by 12%. +// 4pc: When the wearer is hit or has their HP consumed by an ally or themselves, +// their CRIT Rate increases by 8% for 2 turn(s) and up to 2 stacks. + +// TO-DO: in onHPChange, assumes e.Target means source; check whether this is correct + +func init() { + relic.Register(key.LongevousDisciple, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.HPPercent: 0.12}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: nil, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: check, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(check, modifier.Config{ + Listeners: modifier.Listeners{ + OnHPChange: onHPChange, + OnAfterBeingAttacked: onAfterBeingAttacked, + }, + }) + modifier.Register(crbuff, modifier.Config{ + Stacking: modifier.ReplaceBySource, + StatusType: model.StatusType_STATUS_BUFF, + CanDispel: true, + MaxCount: 2, + CountAddWhenStack: 1, + Duration: 2, + Listeners: modifier.Listeners{ + OnAdd: onAdd, + }, + }) +} + +func onHPChange(mod *modifier.Instance, e event.HPChange) { + // source is friendly, not HP change by damage, hp change is negative + if mod.Engine().IsCharacter(e.Target) && !e.IsHPChangeByDamage && e.NewHP < e.OldHP { + mod.Engine().AddModifier(mod.Owner(), info.Modifier{ + Name: crbuff, + Source: mod.Owner(), + }) + } +} + +func onAfterBeingAttacked(mod *modifier.Instance, e event.AttackEnd) { + mod.Engine().AddModifier(mod.Owner(), info.Modifier{ + Name: crbuff, + Source: mod.Owner(), + }) +} + +func onAdd(mod *modifier.Instance) { + mod.AddProperty(prop.ATKPercent, 0.08*mod.Count()) +} diff --git a/internal/relic/cavern/eagle/eagle.go b/internal/relic/cavern/eagle/eagle.go new file mode 100644 index 00000000..fb85d929 --- /dev/null +++ b/internal/relic/cavern/eagle/eagle.go @@ -0,0 +1,55 @@ +package eagle + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const eagle = "eagle-of-twilight-thunder" + +// 2pc: Increases Wind DMG by 10%. +// 4pc: After the wearer uses their Ultimate, their action is Advanced Forward by 25%. + +func init() { + relic.Register(key.EagleOfTwilightLine, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.WindDamagePercent: 0.1}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: nil, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: eagle, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(eagle, modifier.Config{ + Listeners: modifier.Listeners{ + OnAfterAction: onAfterUltimate, + }, + }) +} + +func onAfterUltimate(mod *modifier.Instance, e event.ActionEnd) { + if e.AttackType == model.AttackType_ULT { + mod.Engine().ModifyGaugeNormalized(info.ModifyAttribute{ + Key: eagle, + Target: mod.Owner(), + Source: mod.Owner(), + Amount: -0.25, + }) + } +} diff --git a/internal/relic/cavern/firesmith/firesmith.go b/internal/relic/cavern/firesmith/firesmith.go new file mode 100644 index 00000000..5ae13a3b --- /dev/null +++ b/internal/relic/cavern/firesmith/firesmith.go @@ -0,0 +1,76 @@ +package firesmith + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const ( + check = "firesmith-of-lava-forging" + buff = "firesmith-of-lava-forging-buff" +) + +// 2pc: Increases Fire DMG by 10%. +// 4pc: Increases the wearer's Skill DMG by 12%. +// After unleashing Ultimate, increases the wearer's Fire DMG by 12% for the next attack. + +func init() { + relic.Register(key.FiresmithOfLavaForging, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.FireDamagePercent: 0.1}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: nil, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: check, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(check, modifier.Config{ + Listeners: modifier.Listeners{ + OnBeforeHitAll: onBeforeHitAll, + OnAfterAction: onAfterUltimate, + }, + }) + modifier.Register(buff, modifier.Config{ + StatusType: model.StatusType_STATUS_BUFF, + CanDispel: true, + Listeners: modifier.Listeners{ + OnAfterAttack: removeBuff, + }, + }) +} + +func onBeforeHitAll(mod *modifier.Instance, e event.HitStart) { + if e.Hit.AttackType == model.AttackType_SKILL { + e.Hit.Attacker.AddProperty(check, prop.AllDamagePercent, 0.12) + } +} + +func onAfterUltimate(mod *modifier.Instance, e event.ActionEnd) { + if e.AttackType == model.AttackType_ULT { + mod.Engine().AddModifier(mod.Owner(), info.Modifier{ + Name: buff, + Source: mod.Owner(), + Stats: info.PropMap{prop.FireDamagePercent: 0.12}, + }) + } +} + +func removeBuff(mod *modifier.Instance, e event.AttackEnd) { + mod.RemoveSelf() +} diff --git a/internal/relic/cavern/guard/guard.go b/internal/relic/cavern/guard/guard.go new file mode 100644 index 00000000..2675703a --- /dev/null +++ b/internal/relic/cavern/guard/guard.go @@ -0,0 +1,67 @@ +package guard + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const ( + guard = "guard-of-wuthering-snow" + heal = "guard-of-wuthering-snow-heal" + energy = "guard-of-wuthering-snow-energy" +) + +// 2pc: Reduces DMG taken by 8%. +// 4pc: At the beginning of the turn, if the wearer's HP is equal to or less than 50%, +// restores HP equal to 8% of their Max HP and regenerates 5 Energy. + +func init() { + relic.Register(key.GuardOfWutheringSnow, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.AllDamageReduce: 0.08}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: nil, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: guard, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(guard, modifier.Config{ + Listeners: modifier.Listeners{ + OnPhase1: onPhase1, + }, + }) +} + +func onPhase1(mod *modifier.Instance) { + // If above 50% HP, bypass + if mod.Engine().HPRatio(mod.Owner()) > 0.5 { + return + } + mod.Engine().Heal(info.Heal{ + Key: heal, + Targets: []key.TargetID{mod.Owner()}, + Source: mod.Owner(), + BaseHeal: info.HealMap{model.HealFormula_BY_TARGET_MAX_HP: 0.08}, + }) + mod.Engine().ModifyEnergy(info.ModifyAttribute{ + Key: energy, + Target: mod.Owner(), + Source: mod.Owner(), + Amount: 5.0, + }) +} diff --git a/internal/relic/cavern/messenger/messenger.go b/internal/relic/cavern/messenger/messenger.go new file mode 100644 index 00000000..996e560d --- /dev/null +++ b/internal/relic/cavern/messenger/messenger.go @@ -0,0 +1,86 @@ +package messenger + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const ( + check = "messenger-traversing-hackerspace" + buff = "messenger-traversing-hackerspace-buff" +) + +// 2pc: Increases SPD by 6%. +// 4pc: When the wearer uses their Ultimate on an ally, +// SPD for all allies increases by 12% for 1 turn(s). This effect cannot be stacked. + +func init() { + relic.Register(key.MessengerTraversingHackerspace, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.SPDPercent: 0.06}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: nil, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: check, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(check, modifier.Config{ + Listeners: modifier.Listeners{ + OnBeforeAction: BuffSelf, + OnAfterAction: BuffAllies, + }, + }) + modifier.Register(buff, modifier.Config{ + Stacking: modifier.Replace, + StatusType: model.StatusType_STATUS_BUFF, + CanDispel: true, + BehaviorFlags: []model.BehaviorFlag{model.BehaviorFlag_STAT_SPEED_UP}, + Duration: 1, + }) +} + +// Workaround for missing "eligible" target list in ActionStart: +// Apply buff to owner when OnBeforeAction is triggered +// KNOWN BUG: this will also buff owners equipping this 4p set even if they do not target allies with an Ult +func BuffSelf(mod *modifier.Instance, e event.ActionStart) { + if e.AttackType == model.AttackType_ULT { + mod.Engine().AddModifier(mod.Owner(), info.Modifier{ + Name: buff, + Source: mod.Owner(), + Stats: info.PropMap{prop.SPDPercent: 0.12}, + }) + } +} + +// Apply buff to other allies when OnAfterAction is triggered +// INACCURACY: this should apply instead when OnBeforeAction is triggered +func BuffAllies(mod *modifier.Instance, e event.ActionEnd) { + if e.AttackType == model.AttackType_ULT { + for _, char := range mod.Engine().Characters() { + if char == mod.Owner() { + continue + } + mod.Engine().AddModifier(char, info.Modifier{ + Name: buff, + Source: mod.Owner(), + Stats: info.PropMap{prop.SPDPercent: 0.12}, + }) + } + } +} diff --git a/internal/relic/cavern/thief/thief.go b/internal/relic/cavern/thief/thief.go new file mode 100644 index 00000000..a29b585c --- /dev/null +++ b/internal/relic/cavern/thief/thief.go @@ -0,0 +1,52 @@ +package thief + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" +) + +const thief = "thief-of-shooting-meteor" + +// 2pc: Increases Break Effect by 16%. +// 4pc: Increases the wearer's Break Effect by 16%. +// After the wearer inflicts Weakness Break on an enemy, regenerates 3 Energy. + +func init() { + relic.Register(key.ThiefOfShootingMeteor, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.BreakEffect: 0.16}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: info.PropMap{prop.BreakEffect: 0.16}, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: thief, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(thief, modifier.Config{ + Listeners: modifier.Listeners{ + OnTriggerBreak: onTriggerBreak, + }, + }) +} + +func onTriggerBreak(mod *modifier.Instance, target key.TargetID) { + mod.Engine().ModifyEnergy(info.ModifyAttribute{ + Key: thief, + Target: mod.Owner(), + Source: mod.Owner(), + Amount: 3.0, + }) +} diff --git a/internal/relic/cavern/wastelander/wastelander.go b/internal/relic/cavern/wastelander/wastelander.go new file mode 100644 index 00000000..bf911c19 --- /dev/null +++ b/internal/relic/cavern/wastelander/wastelander.go @@ -0,0 +1,59 @@ +package wastelander + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const ( + wastelander = "wastelander-of-banditry-desert" + wastelandercr = "wastelander-of-banditry-desert-cr" + wastelandercdmg = "wastelander-of-banditry-desert-cdmg" +) + +// 2pc: Increases Imaginary DMG by 10%. +// 4pc: When attacking debuffed enemies, the wearer's CRIT Rate increases by 10%, +// and their CRIT DMG increases by 20% against Imprisoned enemies. + +func init() { + relic.Register(key.WastelanderOfBanditryDesert, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.ImaginaryDamagePercent: 0.1}, + CreateEffect: nil, + }, + { + MinCount: 4, + Stats: nil, + CreateEffect: func(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: wastelander, + Source: owner, + }) + }, + }, + }, + }) + modifier.Register(wastelander, modifier.Config{ + Listeners: modifier.Listeners{ + OnBeforeHitAll: onBeforeHitAll, + }, + }) +} + +func onBeforeHitAll(mod *modifier.Instance, e event.HitStart) { + debuffCount := e.Hit.Defender.StatusCount(model.StatusType_STATUS_DEBUFF) + if debuffCount >= 1 { + e.Hit.Attacker.AddProperty(wastelandercr, prop.CritChance, 0.1) + if mod.Engine().HasBehaviorFlag(e.Defender, model.BehaviorFlag_STAT_CONFINE) { + e.Hit.Attacker.AddProperty(wastelandercdmg, prop.CritDMG, 0.2) + } + } +} diff --git a/internal/relic/planar/celestial/celestial.go b/internal/relic/planar/celestial/celestial.go new file mode 100644 index 00000000..93040261 --- /dev/null +++ b/internal/relic/planar/celestial/celestial.go @@ -0,0 +1,59 @@ +package celestial + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" +) + +// 2pc: Increases the wearer's CRIT DMG by 16%. +// When the wearer's current CRIT DMG reaches 120% or higher, after entering battle, +// the wearer's CRIT Rate increases by 60% until the end of their first attack. + +// Multi Wave Support not implemented + +const celestial = "celestial-differentiator" + +func init() { + relic.Register(key.CelestialDifferentiator, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.CritDMG: 0.16}, + CreateEffect: nil, + }, + { + MinCount: 2, + Stats: nil, + CreateEffect: Create, + }, + }, + }) + modifier.Register(celestial, modifier.Config{ + Listeners: modifier.Listeners{ + OnAfterAttack: removeSelf, + }, + }) +} + +func Create(engine engine.Engine, owner key.TargetID) { + engine.Events().BattleStart.Subscribe(func(e event.BattleStart) { + for _, char := range e.CharStats { + if char.ID() == owner && char.CritDamage() >= 1.2 { + engine.AddModifier(owner, info.Modifier{ + Name: celestial, + Source: owner, + Stats: info.PropMap{prop.CritChance: 0.6}, + }) + } + } + }) +} + +func removeSelf(mod *modifier.Instance, e event.AttackEnd) { + mod.RemoveSelf() +} diff --git a/internal/relic/planar/keel/keel.go b/internal/relic/planar/keel/keel.go new file mode 100644 index 00000000..83a4870b --- /dev/null +++ b/internal/relic/planar/keel/keel.go @@ -0,0 +1,99 @@ +package keel + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/relic" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +// 2pc: Increases the wearer's Effect RES by 10%. +// When the wearer's Effect RES is at 30% or higher, all allies' CRIT DMG increases by 10%. + +const ( + check = "broken-keel" + keelcdmg = "broken-keel-cdmg" +) + +type state struct { + // "flag" to reduce redundancy when adding and removing buff + applied bool +} + +func init() { + relic.Register(key.BrokenKeel, relic.Config{ + Effects: []relic.SetEffect{ + { + MinCount: 2, + Stats: info.PropMap{prop.EffectRES: 0.1}, + CreateEffect: nil, + }, + { + MinCount: 2, + Stats: nil, + CreateEffect: Create, + }, + }, + }) + modifier.Register(check, modifier.Config{ + Listeners: modifier.Listeners{ + OnAdd: onCheck, + OnPropertyChange: onCheck, + }, + }) + modifier.Register(keelcdmg, modifier.Config{ + Stacking: modifier.ReplaceBySource, + BehaviorFlags: []model.BehaviorFlag{model.BehaviorFlag_REMOVE_WHEN_SOURCE_DEAD}, + }) +} + +func Create(engine engine.Engine, owner key.TargetID) { + engine.AddModifier(owner, info.Modifier{ + Name: check, + Source: owner, + State: &state{applied: false}, + }) + engine.Events().BattleStart.Subscribe(func(event event.BattleStart) { + for char := range event.CharInfo { + engine.AddModifier(char, info.Modifier{ + Name: keelcdmg, + Source: owner, + }) + } + }) + // remove buff from all chars on planar holder's death + engine.Events().TargetDeath.Subscribe(func(e event.TargetDeath) { + if e.Target == owner { + for _, char := range engine.Characters() { + engine.RemoveModifierFromSource(char, owner, keelcdmg) + } + } + }) +} + +func onCheck(mod *modifier.Instance) { + stats := mod.OwnerStats() + st := mod.State().(*state) + + if stats.EffectRES() >= 0.3 && !st.applied { + for _, c := range mod.Engine().Characters() { + mod.Engine().AddModifier(c, info.Modifier{ + Name: keelcdmg, + Source: mod.Owner(), + Stats: info.PropMap{prop.CritDMG: 0.1}, + }) + } + st.applied = true + } + + if stats.EffectRES() < 0.3 && st.applied { + for _, c := range mod.Engine().Characters() { + mod.Engine().RemoveModifierFromSource(c, mod.Owner(), keelcdmg) + } + st.applied = false + } +} diff --git a/pkg/key/relic.go b/pkg/key/relic.go index 985f7c9b..c07c70a7 100644 --- a/pkg/key/relic.go +++ b/pkg/key/relic.go @@ -4,29 +4,39 @@ type Relic string // Cavern const ( - MusketeerOfWildWheat Relic = "musketeer_of_wild_wheat" - HunterOfGlacialForest Relic = "hunter_of_glacial_forest" - PasserbyOfWanderingCloud Relic = "passerby_of_wandering_cloud" - KnightOfPurityPalace Relic = "knight_of_purity_palace" - GeniusOfBrilliantStars Relic = "genius_of_brilliant_stars" - ChampionOfStreetwiseBoxing Relic = "champion_of_streetwise_boxing" - AshblazingGrandDuke Relic = "the_ashblazing_grand_duke" - WindSoaringValorous Relic = "the_wind_soaring_valorous" + MusketeerOfWildWheat Relic = "musketeer_of_wild_wheat" + HunterOfGlacialForest Relic = "hunter_of_glacial_forest" + PasserbyOfWanderingCloud Relic = "passerby_of_wandering_cloud" + KnightOfPurityPalace Relic = "knight_of_purity_palace" + GeniusOfBrilliantStars Relic = "genius_of_brilliant_stars" + ChampionOfStreetwiseBoxing Relic = "champion_of_streetwise_boxing" + GuardOfWutheringSnow Relic = "guard_of_wuthering_snow" + FiresmithOfLavaForging Relic = "firesmith_of_lava-forging" + BandOfSizzlingThunder Relic = "band_of_sizzling_thunder" + EagleOfTwilightLine Relic = "eagle_of_twilight_line" + ThiefOfShootingMeteor Relic = "thief_of_shooting_meteor" + WastelanderOfBanditryDesert Relic = "wastelander_of_banditry_desert" + LongevousDisciple Relic = "longevous_disciple" + MessengerTraversingHackerspace Relic = "messenger_traversing_hackerspace" + WindSoaringValorous Relic = "the_wind_soaring_valorous" + AshblazingGrandDuke Relic = "the_ashblazing_grand_duke" ) // Planar const ( - BelobogOfTheArchitects Relic = "belobog_of_the_architects" - SpaceSealingStation Relic = "space_sealing_station" - InertSalsotto Relic = "inert_salsotto" - TaliaKingdomOfBanditry Relic = "talia_kingdom_of_banditry" - SprightlyVonwacq Relic = "sprightly_vonwacq" - PanGalactic Relic = "pan_galactic" - RutilantArena Relic = "rutilant_arena" - Glamoth Relic = "firmament_frontline_glamoth" - PenaconyLandOfDreams Relic = "penacony_land_of_dreams" - IzumoGensei Relic = "izumo_gensei_and_takama_divine_realm" - Lushaka Relic = "lushaka_the_sunken_seas" + BelobogOfTheArchitects Relic = "belobog_of_the_architects" + SpaceSealingStation Relic = "space_sealing_station" + InertSalsotto Relic = "inert_salsotto" + TaliaKingdomOfBanditry Relic = "talia_kingdom_of_banditry" + SprightlyVonwacq Relic = "sprightly_vonwacq" + PanGalactic Relic = "pan_galactic" + RutilantArena Relic = "rutilant_arena" + CelestialDifferentiator Relic = "celestial_differentiator" + BrokenKeel Relic = "broken_keel" + Glamoth Relic = "firmament_frontline_glamoth" + PenaconyLandOfDreams Relic = "penacony_land_of_dreams" + IzumoGensei Relic = "izumo_gensei_and_takama_divine_realm" + Lushaka Relic = "lushaka_the_sunken_seas" ) func (r Relic) String() string { diff --git a/pkg/simulation/imports.go b/pkg/simulation/imports.go index 78e8c59e..2d1553d8 100644 --- a/pkg/simulation/imports.go +++ b/pkg/simulation/imports.go @@ -107,17 +107,27 @@ import ( _ "github.com/simimpact/srsim/internal/lightcone/preservation/thisisme" _ "github.com/simimpact/srsim/internal/lightcone/preservation/trendoftheuniversalmarket" _ "github.com/simimpact/srsim/internal/lightcone/preservation/wearewildfire" + _ "github.com/simimpact/srsim/internal/relic/cavern/band" _ "github.com/simimpact/srsim/internal/relic/cavern/championboxing" + _ "github.com/simimpact/srsim/internal/relic/cavern/disciple" _ "github.com/simimpact/srsim/internal/relic/cavern/duke" + _ "github.com/simimpact/srsim/internal/relic/cavern/eagle" + _ "github.com/simimpact/srsim/internal/relic/cavern/firesmith" _ "github.com/simimpact/srsim/internal/relic/cavern/genius" + _ "github.com/simimpact/srsim/internal/relic/cavern/guard" _ "github.com/simimpact/srsim/internal/relic/cavern/hunterofglacialforest" + _ "github.com/simimpact/srsim/internal/relic/cavern/messenger" _ "github.com/simimpact/srsim/internal/relic/cavern/musketeer" _ "github.com/simimpact/srsim/internal/relic/cavern/puritypalace" + _ "github.com/simimpact/srsim/internal/relic/cavern/thief" _ "github.com/simimpact/srsim/internal/relic/cavern/valorous" _ "github.com/simimpact/srsim/internal/relic/cavern/wanderingcloud" + _ "github.com/simimpact/srsim/internal/relic/cavern/wastelander" _ "github.com/simimpact/srsim/internal/relic/planar/belobog" + _ "github.com/simimpact/srsim/internal/relic/planar/celestial" _ "github.com/simimpact/srsim/internal/relic/planar/glamoth" _ "github.com/simimpact/srsim/internal/relic/planar/izumo" + _ "github.com/simimpact/srsim/internal/relic/planar/keel" _ "github.com/simimpact/srsim/internal/relic/planar/lushaka" _ "github.com/simimpact/srsim/internal/relic/planar/pangalactic" _ "github.com/simimpact/srsim/internal/relic/planar/penacony"