From 16222948a32da54ba982b7771f3651d222f37a1d Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 6 Mar 2021 21:16:35 -0500 Subject: [PATCH] Sceptre skill tree and migration. --- .../common/abilities/sceptre/healingbeam.ron | 3 +- .../abilities/sceptre/lifestealbeam.ron | 2 +- .../abilities/weapon_ability_manifest.ron | 2 +- .../common/skill_trees/skill_max_levels.ron | 22 +- .../skill_trees/skill_prerequisites.ron | 49 +-- .../skills_skill-groups_manifest.ron | 23 +- assets/voxygen/i18n/en/buff.ron | 2 +- assets/voxygen/i18n/en/skills.ron | 54 +-- common/src/comp/ability.rs | 92 ++--- common/src/comp/skills.rs | 28 +- .../down.sql | 1 + .../up.sql | 6 + server/src/persistence/json_models.rs | 46 ++- voxygen/src/hud/diary.rs | 385 ++++++++++-------- voxygen/src/hud/img_ids.rs | 1 + 15 files changed, 365 insertions(+), 351 deletions(-) create mode 100644 server/src/migrations/2021-03-06-213310_reset-sceptre-skills/down.sql create mode 100644 server/src/migrations/2021-03-06-213310_reset-sceptre-skills/up.sql diff --git a/assets/common/abilities/sceptre/healingbeam.ron b/assets/common/abilities/sceptre/healingbeam.ron index 4fb8535507..59960b244f 100644 --- a/assets/common/abilities/sceptre/healingbeam.ron +++ b/assets/common/abilities/sceptre/healingbeam.ron @@ -6,7 +6,6 @@ HealingBeam( tick_rate: 2.0, range: 25.0, max_angle: 1.0, - lifesteal_eff: 0.0, - energy_cost: 50, + energy_cost: 75, specifier: HealingBeam, ) \ No newline at end of file diff --git a/assets/common/abilities/sceptre/lifestealbeam.ron b/assets/common/abilities/sceptre/lifestealbeam.ron index 3f233fac95..a54b9bfa8f 100644 --- a/assets/common/abilities/sceptre/lifestealbeam.ron +++ b/assets/common/abilities/sceptre/lifestealbeam.ron @@ -7,7 +7,7 @@ BasicBeam( range: 25.0, max_angle: 1.0, lifesteal_eff: 0.15, - energy_regen: 25, + energy_regen: 50, energy_drain: 0, orientation_behavior: Normal, specifier: LifestealBeam diff --git a/assets/common/abilities/weapon_ability_manifest.ron b/assets/common/abilities/weapon_ability_manifest.ron index 2c9f072a6c..915b48c981 100644 --- a/assets/common/abilities/weapon_ability_manifest.ron +++ b/assets/common/abilities/weapon_ability_manifest.ron @@ -73,7 +73,7 @@ primary: "common.abilities.sceptre.lifestealbeam", secondary: "common.abilities.sceptre.healingbeam", abilities: [ - (None, "common.abilities.sceptre.wardingaura"), + (Some(Sceptre(UnlockAura)), "common.abilities.sceptre.wardingaura"), ], ), Dagger: ( diff --git a/assets/common/skill_trees/skill_max_levels.ron b/assets/common/skill_trees/skill_max_levels.ron index 9c48f8ec4e..47825a83f2 100644 --- a/assets/common/skill_trees/skill_max_levels.ron +++ b/assets/common/skill_trees/skill_max_levels.ron @@ -58,17 +58,17 @@ Staff(SKnockback): Some(2), Staff(SRange): Some(2), Staff(SCost): Some(2), - Sceptre(BHeal): Some(3), - Sceptre(BDamage): Some(2), - Sceptre(BRange): Some(2), - Sceptre(BLifesteal): Some(2), - Sceptre(BRegen): Some(2), - Sceptre(BCost): Some(2), - Sceptre(PHeal): Some(3), - Sceptre(PDamage): Some(2), - Sceptre(PRadius): Some(2), - Sceptre(PCost): Some(2), - Sceptre(PProjSpeed): Some(2), + Sceptre(LDamage): Some(3), + Sceptre(LRange): Some(2), + Sceptre(LLifesteal): Some(3), + Sceptre(LRegen): Some(2), + Sceptre(HHeal): Some(3), + Sceptre(HCost): Some(2), + Sceptre(HRange): Some(2), + Sceptre(AStrength): Some(2), + Sceptre(ADuration): Some(2), + Sceptre(ARange): Some(2), + Sceptre(ACost): Some(2), Roll(Cost): Some(2), Roll(Strength): Some(2), Roll(Duration): Some(2), diff --git a/assets/common/skill_trees/skill_prerequisites.ron b/assets/common/skill_trees/skill_prerequisites.ron index 44c84cf49c..55a8c1cccd 100644 --- a/assets/common/skill_trees/skill_prerequisites.ron +++ b/assets/common/skill_trees/skill_prerequisites.ron @@ -1,68 +1,27 @@ ({ - Roll(Cost): {Roll(ImmuneMelee): None}, - Roll(Strength): {Roll(ImmuneMelee): None}, - Roll(Duration): {Roll(ImmuneMelee): None}, - Sword(TsDamage): {Sword(TsCombo): None}, - Sword(TsRegen): {Sword(TsCombo): None}, - Sword(TsSpeed): {Sword(TsCombo): None}, - Sword(DDrain): {Sword(DDamage): Some(1)}, - Sword(DCost): {Sword(DDamage): Some(1)}, - Sword(DSpeed): {Sword(DDamage): Some(1)}, - Sword(DInfinite): {Sword(DDamage): Some(1)}, - Sword(DScaling): {Sword(DDamage): Some(1)}, Sword(SDamage): {Sword(UnlockSpin): None}, Sword(SSpeed): {Sword(UnlockSpin): None}, Sword(SCost): {Sword(UnlockSpin): None}, Sword(SSpins): {Sword(UnlockSpin): None}, - Axe(DsDamage): {Axe(DsCombo): None}, - Axe(DsSpeed): {Axe(DsCombo): None}, - Axe(DsRegen): {Axe(DsCombo): None}, - Axe(SHelicopter): {Axe(SInfinite): None}, - Axe(SDamage): {Axe(SInfinite): None}, - Axe(SSpeed): {Axe(SInfinite): None}, - Axe(SCost): {Axe(SInfinite): None}, Axe(LDamage): {Axe(UnlockLeap): None}, Axe(LKnockback): {Axe(UnlockLeap): None}, Axe(LCost): {Axe(UnlockLeap): None}, Axe(LDistance): {Axe(UnlockLeap): None}, - Hammer(SsDamage): {Hammer(SsKnockback): Some(1)}, - Hammer(SsRegen): {Hammer(SsKnockback): Some(1)}, - Hammer(SsSpeed): {Hammer(SsKnockback): Some(1)}, - Hammer(CDamage): {Hammer(CKnockback): Some(1)}, - Hammer(CDrain): {Hammer(CKnockback): Some(1)}, - Hammer(CSpeed): {Hammer(CKnockback): Some(1)}, Hammer(LDamage): {Hammer(UnlockLeap): None}, Hammer(LCost): {Hammer(UnlockLeap): None}, Hammer(LDistance): {Hammer(UnlockLeap): None}, Hammer(LKnockback): {Hammer(UnlockLeap): None}, Hammer(LRange): {Hammer(UnlockLeap): None}, - Bow(BRegen): {Bow(BDamage): Some(1)}, - Bow(CKnockback): {Bow(CDamage): Some(1)}, - Bow(CProjSpeed): {Bow(CDamage): Some(1)}, - Bow(CDrain): {Bow(CDamage): Some(1)}, - Bow(CSpeed): {Bow(CDamage): Some(1)}, - Bow(CMove): {Bow(CDamage): Some(1)}, Bow(RDamage): {Bow(UnlockRepeater): None}, Bow(RGlide): {Bow(UnlockRepeater): None}, Bow(RArrows): {Bow(UnlockRepeater): None}, Bow(RCost): {Bow(UnlockRepeater): None}, - Staff(BDamage): {Staff(BExplosion): None}, - Staff(BRegen): {Staff(BExplosion): None}, - Staff(BRadius): {Staff(BExplosion): None}, - Staff(FRange): {Staff(FDamage): Some(1)}, - Staff(FDrain): {Staff(FDamage): Some(1)}, - Staff(FVelocity): {Staff(FDamage): Some(1)}, Staff(SDamage): {Staff(UnlockShockwave): None}, Staff(SKnockback): {Staff(UnlockShockwave): None}, Staff(SRange): {Staff(UnlockShockwave): None}, Staff(SCost): {Staff(UnlockShockwave): None}, - Sceptre(BDamage): {Sceptre(BHeal): Some(1)}, - Sceptre(BRange): {Sceptre(BHeal): Some(1)}, - Sceptre(BLifesteal): {Sceptre(BHeal): Some(1)}, - Sceptre(BRegen): {Sceptre(BHeal): Some(1)}, - Sceptre(BCost): {Sceptre(BHeal): Some(1)}, - Sceptre(PDamage): {Sceptre(PHeal): Some(1)}, - Sceptre(PRadius): {Sceptre(PHeal): Some(1)}, - Sceptre(PCost): {Sceptre(PHeal): Some(1)}, - Sceptre(PProjSpeed): {Sceptre(PHeal): Some(1)}, + Sceptre(AStrength): {Sceptre(UnlockAura): None}, + Sceptre(ADuration): {Sceptre(UnlockAura): None}, + Sceptre(ARange): {Sceptre(UnlockAura): None}, + Sceptre(ACost): {Sceptre(UnlockAura): None}, }) \ No newline at end of file diff --git a/assets/common/skill_trees/skills_skill-groups_manifest.ron b/assets/common/skill_trees/skills_skill-groups_manifest.ron index 6735642c82..74ec09ff14 100644 --- a/assets/common/skill_trees/skills_skill-groups_manifest.ron +++ b/assets/common/skill_trees/skills_skill-groups_manifest.ron @@ -95,16 +95,17 @@ Staff(SCost), ], Weapon(Sceptre): [ - Sceptre(BHeal), - Sceptre(BDamage), - Sceptre(BRange), - Sceptre(BLifesteal), - Sceptre(BRegen), - Sceptre(BCost), - Sceptre(PHeal), - Sceptre(PDamage), - Sceptre(PRadius), - Sceptre(PCost), - Sceptre(PProjSpeed), + Sceptre(LDamage), + Sceptre(LRange), + Sceptre(LLifesteal), + Sceptre(LRegen), + Sceptre(HHeal), + Sceptre(HCost), + Sceptre(HRange), + Sceptre(UnlockAura), + Sceptre(AStrength), + Sceptre(ADuration), + Sceptre(ARange), + Sceptre(ACost), ], }) \ No newline at end of file diff --git a/assets/voxygen/i18n/en/buff.ron b/assets/voxygen/i18n/en/buff.ron index c29a013a71..5a3b6510ee 100644 --- a/assets/voxygen/i18n/en/buff.ron +++ b/assets/voxygen/i18n/en/buff.ron @@ -18,7 +18,7 @@ "buff.title.invulnerability": "Invulnerability", "buff.desc.invulnerability": "You cannot be damaged by any attack.", "buff.title.protectingward": "Protecting Ward", - "buff.desc.protectingward": "You are protected, somewhat, from attacks." + "buff.desc.protectingward": "You are protected, somewhat, from attacks.", // Debuffs "buff.title.bleed": "Bleeding", "buff.desc.bleed": "Inflicts regular damage.", diff --git a/assets/voxygen/i18n/en/skills.ron b/assets/voxygen/i18n/en/skills.ron index b9b6f8a3a1..f62f42180b 100644 --- a/assets/voxygen/i18n/en/skills.ron +++ b/assets/voxygen/i18n/en/skills.ron @@ -34,32 +34,34 @@ "hud.skill.roll_dur_title": "Rolling Duration", "hud.skill.roll_dur": "Roll for 20% more time{SP}", // Sceptre - "hud.skill.sc_healbomb_title" : "Heal Bomb", - "hud.skill.sc_healbomb" : "Killing with kindness", - "hud.skill.sc_projectile_speed_title": "Projectile Speed", - "hud.skill.sc_projectile_speed": "Projectile threw 25% faster{SP}", - "hud.skill.sc_energy_cost_title" : "Energy Cost", - "hud.skill.sc_energy_cost" : "Decreases energy cost of bomb by 15%{SP}", - "hud.skill.sc_radius_title" : "Radius", - "hud.skill.sc_radius" : "Increases radius by 30%{SP}", - "hud.skill.sc_damage_title" : "Damage", - "hud.skill.sc_damage" : "Increases damage of bomb by 20%{SP}", - "hud.skill.sc_heal_title" : "Heal", - "hud.skill.sc_heal" : "Increases healing of bomb by 15%{SP}", - "hud.skill.sc_heal_cost_title" : "Heal Cost", - "hud.skill.sc_heal_cost" : "Use 10% less energy when healing{SP}", - "hud.skill.sc_lifesteal_efficiency_title" : "Lifesteal Efficiency", - "hud.skill.sc_lifesteal_efficiency" : "Thieve 25% more health{SP}", - "hud.skill.sc_range_title" : "Range", - "hud.skill.sc_range" : "Longer beam, by 20%{SP}", - "hud.skill.sc_energy_regen_title" : "Energy Regen", - "hud.skill.sc_energy_regen" : "Increases energy regen from dealing damage by 10%{SP}", - "hud.skill.sc_beam_title" : "Heal Beam", - "hud.skill.sc_beam" : "Heal your party, but unheal the enemies", - "hud.skill.sc_beam_damage_title" : "Beam Damage", - "hud.skill.sc_beam_damage" : "Increases damage from the beam by 25%{SP}", - "hud.skill.sc_beam_heal_title" : "Beam Heal", - "hud.skill.sc_beam_heal" : "Increased healing from the beam by 15%{SP}", + "hud.skill.sc_lifesteal_title": "Lifesteal Beam", + "hud.skill.sc_lifesteal": "Drain the life from your enemies", + "hud.skill.sc_lifesteal_damage_title": "Damage", + "hud.skill.sc_lifesteal_damage": "Deal 20% more damage{SP}", + "hud.skill.sc_lifesteal_range_title": "Range", + "hud.skill.sc_lifesteal_range": "Your beam reaches 25% further{SP}", + "hud.skill.sc_lifesteal_lifesteal_title": "Lifesteal", + "hud.skill.sc_lifesteal_lifesteal": "Convert an additional 30% of damage into health{SP}", + "hud.skill.sc_lifesteal_regen_title": "Stamina Regen", + "hud.skill.sc_lifesteal_regen": "Replenish your stamina by an additional 25%{SP}", + "hud.skill.sc_heal_title": "Healing Beam", + "hud.skill.sc_heal": "Heal your allies using the blood of your enemies", + "hud.skill.sc_heal_heal_title": "Heal", + "hud.skill.sc_heal_heal": "Increases the amount you heal others by 20%{SP}", + "hud.skill.sc_heal_cost_title": "Stamina Cost", + "hud.skill.sc_heal_cost": "Healing others requires 20% less stamina{SP}", + "hud.skill.sc_heal_range_title": "Range", + "hud.skill.sc_heal_range": "Your beam reachs 25% further{SP}", + "hud.skill.sc_wardaura_unlock_title": "Warding Aura Unlock", + "hud.skill.sc_wardaura_unlock": "Allows you to ward your allies against enemy attacks{SP}", + "hud.skill.sc_wardaura_strength_title": "Strength", + "hud.skill.sc_wardaura_strength": "The strength of your protection increases by 20%{SP}", + "hud.skill.sc_wardaura_duration_title": "Duration", + "hud.skill.sc_wardaura_duration": "The effects of your ward last 30% longer{SP}", + "hud.skill.sc_wardaura_range_title": "Radius", + "hud.skill.sc_wardaura_range": "Your ward reaches 25% further{SP}", + "hud.skill.sc_wardaura_cost_title": "Stamina Cost", + "hud.skill.sc_wardaura_cost": "Creating the ward requries 20% less energy{SP}", // Staff "hud.skill.st_shockwave_range_title" : "Shockwave Range", "hud.skill.st_shockwave_range" : "throw things that used to be out of reach, range increased 20%{SP}", diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index c55d668c32..9194b552f5 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -997,73 +997,73 @@ impl CharacterAbility { } }, Some(ToolKind::Sceptre) => { - //use skills::SceptreSkill::*; - /*match self { + use skills::SceptreSkill::*; + match self { BasicBeam { - ref mut base_hps, - ref mut base_dps, - ref mut lifesteal_eff, + ref mut damage, ref mut range, - ref mut energy_regen, - ref mut energy_cost, ref mut beam_duration, + ref mut lifesteal_eff, + ref mut energy_regen, .. } => { - if let Ok(Some(level)) = skillset.skill_level(Sceptre(BHeal)) { - *base_hps *= 1.15_f32.powi(level.into()); + if let Ok(Some(level)) = skillset.skill_level(Sceptre(LDamage)) { + *damage *= 1.2_f32.powi(level.into()); } - if let Ok(Some(level)) = skillset.skill_level(Sceptre(BDamage)) { - *base_dps *= 1.25_f32.powi(level.into()); - } - if let Ok(Some(level)) = skillset.skill_level(Sceptre(BRange)) { - let range_mod = 1.20_f32.powi(level.into()); + if let Ok(Some(level)) = skillset.skill_level(Sceptre(LRange)) { + let range_mod = 1.25_f32.powi(level.into()); *range *= range_mod; // Duration modified to keep velocity constant *beam_duration *= range_mod; } - if let Ok(Some(level)) = skillset.skill_level(Sceptre(BLifesteal)) { - *lifesteal_eff *= 1.25_f32.powi(level.into()); + if let Ok(Some(level)) = skillset.skill_level(Sceptre(LRegen)) { + *energy_regen *= 1.25_f32.powi(level.into()); } - if let Ok(Some(level)) = skillset.skill_level(Sceptre(BRegen)) { - *energy_regen *= 1.1_f32.powi(level.into()); - } - if let Ok(Some(level)) = skillset.skill_level(Sceptre(BCost)) { - *energy_cost *= 0.9_f32.powi(level.into()); + if let Ok(Some(level)) = skillset.skill_level(Sceptre(LLifesteal)) { + *lifesteal_eff *= 1.3_f32.powi(level.into()); } }, - BasicRanged { + HealingBeam { + ref mut heal, ref mut energy_cost, - ref mut projectile, - ref mut projectile_speed, + ref mut range, + ref mut beam_duration, .. } => { - { - let heal_level = skillset - .skill_level(Sceptre(PHeal)) - .unwrap_or(None) - .unwrap_or(0); - let damage_level = skillset - .skill_level(Sceptre(PDamage)) - .unwrap_or(None) - .unwrap_or(0); - let range_level = skillset - .skill_level(Sceptre(PRadius)) - .unwrap_or(None) - .unwrap_or(0); - let heal = 1.15_f32.powi(heal_level.into()); - let power = 1.2_f32.powi(damage_level.into()); - let range = 1.3_f32.powi(range_level.into()); - *projectile = projectile.modified_projectile(power, 1_f32, range); + if let Ok(Some(level)) = skillset.skill_level(Sceptre(HHeal)) { + *heal *= 1.2_f32.powi(level.into()); } - if let Ok(Some(level)) = skillset.skill_level(Sceptre(PCost)) { - *energy_cost *= 0.85_f32.powi(level.into()); + if let Ok(Some(level)) = skillset.skill_level(Sceptre(HRange)) { + let range_mod = 1.25_f32.powi(level.into()); + *range *= range_mod; + // Duration modified to keep velocity constant + *beam_duration *= range_mod; } - if let Ok(Some(level)) = skillset.skill_level(Sceptre(PProjSpeed)) { - *projectile_speed *= 1.25_f32.powi(level.into()); + if let Ok(Some(level)) = skillset.skill_level(Sceptre(HCost)) { + *energy_cost *= 0.8_f32.powi(level.into()); + } + }, + BasicAura { + ref mut aura, + ref mut range, + ref mut energy_cost, + .. + } => { + if let Ok(Some(level)) = skillset.skill_level(Sceptre(AStrength)) { + aura.strength *= 1.2_f32.powi(level.into()); + } + if let Ok(Some(level)) = skillset.skill_level(Sceptre(ADuration)) { + aura.duration.map(|dur| dur * 1.3_f32.powi(level.into())); + } + if let Ok(Some(level)) = skillset.skill_level(Sceptre(ARange)) { + *range *= 1.25_f32.powi(level.into()); + } + if let Ok(Some(level)) = skillset.skill_level(Sceptre(ACost)) { + *energy_cost *= 0.8_f32.powi(level.into()); } }, _ => {}, - }*/ + } }, None => { use skills::RollSkill::*; diff --git a/common/src/comp/skills.rs b/common/src/comp/skills.rs index 51eaa3044d..2829b90039 100644 --- a/common/src/comp/skills.rs +++ b/common/src/comp/skills.rs @@ -219,19 +219,21 @@ pub enum StaffSkill { #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] pub enum SceptreSkill { - // Beam upgrades - BHeal, - BDamage, - BRange, - BLifesteal, - BRegen, - BCost, - // Projectile upgrades - PHeal, - PDamage, - PRadius, - PCost, - PProjSpeed, + // Lifesteal beam upgrades + LDamage, + LRange, + LLifesteal, + LRegen, + // Healing beam upgrades + HHeal, + HCost, + HRange, + // Warding aura upgrades + UnlockAura, + AStrength, + ADuration, + ARange, + ACost, } #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] diff --git a/server/src/migrations/2021-03-06-213310_reset-sceptre-skills/down.sql b/server/src/migrations/2021-03-06-213310_reset-sceptre-skills/down.sql new file mode 100644 index 0000000000..291a97c5ce --- /dev/null +++ b/server/src/migrations/2021-03-06-213310_reset-sceptre-skills/down.sql @@ -0,0 +1 @@ +-- This file should undo anything in `up.sql` \ No newline at end of file diff --git a/server/src/migrations/2021-03-06-213310_reset-sceptre-skills/up.sql b/server/src/migrations/2021-03-06-213310_reset-sceptre-skills/up.sql new file mode 100644 index 0000000000..0d47fab5b7 --- /dev/null +++ b/server/src/migrations/2021-03-06-213310_reset-sceptre-skills/up.sql @@ -0,0 +1,6 @@ +-- Resets sceptre skill tree by deleting scetpre skills and setting available skill points to earned skill points +-- Deletes all sceptre skills, does not delete unlock sceptre skill +DELETE FROM skill WHERE skill LIKE 'Sceptre%'; +-- Resets available skill points to earned skill points for sceptre skill tree +UPDATE skill_group +SET available_sp = earned_sp WHERE skill_group_kind = 'Weapon Sceptre'; \ No newline at end of file diff --git a/server/src/persistence/json_models.rs b/server/src/persistence/json_models.rs index 0ddfa0269c..9c58a844c5 100644 --- a/server/src/persistence/json_models.rs +++ b/server/src/persistence/json_models.rs @@ -118,17 +118,18 @@ pub fn skill_to_db_string(skill: comp::skills::Skill) -> String { Staff(StaffSkill::SKnockback) => "Staff SKnockback", Staff(StaffSkill::SRange) => "Staff SRange", Staff(StaffSkill::SCost) => "Staff SCost", - Sceptre(SceptreSkill::BHeal) => "Sceptre BHeal", - Sceptre(SceptreSkill::BDamage) => "Sceptre BDamage", - Sceptre(SceptreSkill::BRange) => "Sceptre BRange", - Sceptre(SceptreSkill::BLifesteal) => "Sceptre BLifesteal", - Sceptre(SceptreSkill::BRegen) => "Sceptre BRegen", - Sceptre(SceptreSkill::BCost) => "Sceptre BCost", - Sceptre(SceptreSkill::PHeal) => "Sceptre PHeal", - Sceptre(SceptreSkill::PDamage) => "Sceptre PDamage", - Sceptre(SceptreSkill::PRadius) => "Sceptre PRadius", - Sceptre(SceptreSkill::PCost) => "Sceptre PCost", - Sceptre(SceptreSkill::PProjSpeed) => "Sceptre PProjSpeed", + Sceptre(SceptreSkill::LDamage) => "Sceptre LDamage", + Sceptre(SceptreSkill::LRange) => "Sceptre LRange", + Sceptre(SceptreSkill::LLifesteal) => "Sceptre LLifesteal", + Sceptre(SceptreSkill::LRegen) => "Sceptre LRegen", + Sceptre(SceptreSkill::HHeal) => "Sceptre HHeal", + Sceptre(SceptreSkill::HCost) => "Sceptre HCost", + Sceptre(SceptreSkill::HRange) => "Sceptre HRange", + Sceptre(SceptreSkill::UnlockAura) => "Sceptre UnlockAura", + Sceptre(SceptreSkill::AStrength) => "Sceptre AStrength", + Sceptre(SceptreSkill::ADuration) => "Sceptre ADuration", + Sceptre(SceptreSkill::ARange) => "Sceptre ARange", + Sceptre(SceptreSkill::ACost) => "Sceptre ACost", Roll(RollSkill::ImmuneMelee) => "Roll ImmuneMelee", Roll(RollSkill::Cost) => "Roll Cost", Roll(RollSkill::Strength) => "Roll Strength", @@ -240,17 +241,18 @@ pub fn db_string_to_skill(skill_string: &str) -> comp::skills::Skill { "Staff SKnockback" => Staff(StaffSkill::SKnockback), "Staff SRange" => Staff(StaffSkill::SRange), "Staff SCost" => Staff(StaffSkill::SCost), - "Sceptre BHeal" => Sceptre(SceptreSkill::BHeal), - "Sceptre BDamage" => Sceptre(SceptreSkill::BDamage), - "Sceptre BRange" => Sceptre(SceptreSkill::BRange), - "Sceptre BLifesteal" => Sceptre(SceptreSkill::BLifesteal), - "Sceptre BRegen" => Sceptre(SceptreSkill::BRegen), - "Sceptre BCost" => Sceptre(SceptreSkill::BCost), - "Sceptre PHeal" => Sceptre(SceptreSkill::PHeal), - "Sceptre PDamage" => Sceptre(SceptreSkill::PDamage), - "Sceptre PRadius" => Sceptre(SceptreSkill::PRadius), - "Sceptre PCost" => Sceptre(SceptreSkill::PCost), - "Sceptre PProjSpeed" => Sceptre(SceptreSkill::PProjSpeed), + "Sceptre LDamage" => Sceptre(SceptreSkill::LDamage), + "Sceptre LRange" => Sceptre(SceptreSkill::LRange), + "Sceptre LLifesteal" => Sceptre(SceptreSkill::LLifesteal), + "Sceptre LRegen" => Sceptre(SceptreSkill::LRegen), + "Sceptre HHeal" => Sceptre(SceptreSkill::HHeal), + "Sceptre HCost" => Sceptre(SceptreSkill::HCost), + "Sceptre HRange" => Sceptre(SceptreSkill::HRange), + "Sceptre UnlockAura" => Sceptre(SceptreSkill::UnlockAura), + "Sceptre AStrength" => Sceptre(SceptreSkill::AStrength), + "Sceptre ADuration" => Sceptre(SceptreSkill::ADuration), + "Sceptre ARange" => Sceptre(SceptreSkill::ARange), + "Sceptre ACost" => Sceptre(SceptreSkill::ACost), "Roll ImmuneMelee" => Roll(RollSkill::ImmuneMelee), "Roll Cost" => Roll(RollSkill::Cost), "Roll Strength" => Roll(RollSkill::Strength), diff --git a/voxygen/src/hud/diary.rs b/voxygen/src/hud/diary.rs index c8cb25b898..f8fe98d048 100644 --- a/voxygen/src/hud/diary.rs +++ b/voxygen/src/hud/diary.rs @@ -135,19 +135,20 @@ widget_ids! { skill_staff_shockwave_3, skill_staff_shockwave_4, sceptre_render, - skill_sceptre_beam_0, - skill_sceptre_beam_1, - skill_sceptre_beam_2, - skill_sceptre_beam_3, - skill_sceptre_beam_4, - skill_sceptre_beam_5, - skill_sceptre_beam_6, - skill_sceptre_bomb_0, - skill_sceptre_bomb_1, - skill_sceptre_bomb_2, - skill_sceptre_bomb_3, - skill_sceptre_bomb_4, - skill_sceptre_bomb_5, + skill_sceptre_lifesteal_0, + skill_sceptre_lifesteal_1, + skill_sceptre_lifesteal_2, + skill_sceptre_lifesteal_3, + skill_sceptre_lifesteal_4, + skill_sceptre_heal_0, + skill_sceptre_heal_1, + skill_sceptre_heal_2, + skill_sceptre_heal_3, + skill_sceptre_aura_0, + skill_sceptre_aura_1, + skill_sceptre_aura_2, + skill_sceptre_aura_3, + skill_sceptre_aura_4, general_combat_render_0, general_combat_render_1, skill_general_stat_0, @@ -535,7 +536,7 @@ impl<'a> Widget for Diary<'a> { SelectedSkillTree::Weapon(ToolKind::Hammer) => 5, SelectedSkillTree::Weapon(ToolKind::Bow) => 3, SelectedSkillTree::Weapon(ToolKind::Staff) => 5, - SelectedSkillTree::Weapon(ToolKind::Sceptre) => 7, + SelectedSkillTree::Weapon(ToolKind::Sceptre) => 5, _ => 0, }; let skills_top_r = match sel_tab { @@ -545,7 +546,7 @@ impl<'a> Widget for Diary<'a> { SelectedSkillTree::Weapon(ToolKind::Hammer) => 5, SelectedSkillTree::Weapon(ToolKind::Bow) => 7, SelectedSkillTree::Weapon(ToolKind::Staff) => 5, - SelectedSkillTree::Weapon(ToolKind::Sceptre) => 6, + SelectedSkillTree::Weapon(ToolKind::Sceptre) => 4, _ => 0, }; let skills_bot_l = match sel_tab { @@ -555,6 +556,7 @@ impl<'a> Widget for Diary<'a> { SelectedSkillTree::Weapon(ToolKind::Hammer) => 6, SelectedSkillTree::Weapon(ToolKind::Bow) => 5, SelectedSkillTree::Weapon(ToolKind::Staff) => 5, + SelectedSkillTree::Weapon(ToolKind::Sceptre) => 5, _ => 0, }; let skills_bot_r = match sel_tab { @@ -3249,20 +3251,20 @@ impl<'a> Widget for Diary<'a> { // 5 1 6 // 3 0 4 // 8 2 7 - Button::image(self.imgs.skill_sceptre_heal) + Button::image(self.imgs.skill_sceptre_lifesteal) .w_h(74.0, 74.0) .mid_top_with_margin_on(state.skills_top_l[0], 3.0) .with_tooltip( self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_beam_title"), - &self.localized_strings.get("hud.skill.sc_beam"), + &self.localized_strings.get("hud.skill.sc_lifesteal_title"), + &self.localized_strings.get("hud.skill.sc_lifesteal"), &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_beam_0, ui); - let skill = Skill::Sceptre(BHeal); + .set(state.skill_sceptre_lifesteal_0, ui); + let skill = Skill::Sceptre(LDamage); if create_skill_button( - self.imgs.heal_heal_skill, + self.imgs.skill_sceptre_lifesteal, state.skills_top_l[1], &self.stats.skill_set, skill, @@ -3271,9 +3273,11 @@ impl<'a> Widget for Diary<'a> { ) .with_tooltip( self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_beam_heal_title"), + &self + .localized_strings + .get("hud.skill.sc_lifesteal_damage_title"), &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_beam_heal"), + &self.localized_strings.get("hud.skill.sc_lifesteal_damage"), skill, &self.stats.skill_set, &self.localized_strings, @@ -3281,14 +3285,14 @@ impl<'a> Widget for Diary<'a> { &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_beam_1, ui) + .set(state.skill_sceptre_lifesteal_1, ui) .was_clicked() { events.push(Event::UnlockSkill(skill)); }; - let skill = Skill::Sceptre(BDamage); + let skill = Skill::Sceptre(LRange); if create_skill_button( - self.imgs.heal_damage_skill, + self.imgs.skill_sceptre_lifesteal, state.skills_top_l[2], &self.stats.skill_set, skill, @@ -3297,9 +3301,11 @@ impl<'a> Widget for Diary<'a> { ) .with_tooltip( self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_beam_damage_title"), + &self + .localized_strings + .get("hud.skill.sc_lifesteal_range_title"), &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_beam_damage"), + &self.localized_strings.get("hud.skill.sc_lifesteal_range"), skill, &self.stats.skill_set, &self.localized_strings, @@ -3307,14 +3313,14 @@ impl<'a> Widget for Diary<'a> { &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_beam_2, ui) + .set(state.skill_sceptre_lifesteal_2, ui) .was_clicked() { events.push(Event::UnlockSkill(skill)); }; - let skill = Skill::Sceptre(BRegen); + let skill = Skill::Sceptre(LLifesteal); if create_skill_button( - self.imgs.heal_energy_regen_skill, + self.imgs.skill_sceptre_lifesteal, state.skills_top_l[3], &self.stats.skill_set, skill, @@ -3325,9 +3331,11 @@ impl<'a> Widget for Diary<'a> { self.tooltip_manager, &self .localized_strings - .get("hud.skill.sc_energy_regen_title"), + .get("hud.skill.sc_lifesteal_lifesteal_title"), &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_energy_regen"), + &self + .localized_strings + .get("hud.skill.sc_lifesteal_lifesteal"), skill, &self.stats.skill_set, &self.localized_strings, @@ -3335,55 +3343,27 @@ impl<'a> Widget for Diary<'a> { &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_beam_3, ui) + .set(state.skill_sceptre_lifesteal_3, ui) .was_clicked() { events.push(Event::UnlockSkill(skill)); }; - let skill = Skill::Sceptre(BRange); + let skill = Skill::Sceptre(LRegen); if create_skill_button( - self.imgs.heal_radius_skill, + self.imgs.skill_sceptre_lifesteal, state.skills_top_l[4], &self.stats.skill_set, skill, self.fonts, &get_skill_label(skill, &self.stats.skill_set), ) - .with_tooltip( - self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_range_title"), - &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_range"), - skill, - &self.stats.skill_set, - &self.localized_strings, - ), - &diary_tooltip, - TEXT_COLOR, - ) - .set(state.skill_sceptre_beam_4, ui) - .was_clicked() - { - events.push(Event::UnlockSkill(skill)); - }; - let skill = Skill::Sceptre(BLifesteal); - if create_skill_button( - self.imgs.heal_lifesteal_skill, - state.skills_top_l[5], - &self.stats.skill_set, - skill, - self.fonts, - &get_skill_label(skill, &self.stats.skill_set), - ) .with_tooltip( self.tooltip_manager, &self .localized_strings - .get("hud.skill.sc_lifesteal_efficiency_title"), + .get("hud.skill.sc_lifesteal_regen_title"), &add_sp_cost_tooltip( - &self - .localized_strings - .get("hud.skill.sc_lifesteal_efficiency"), + &self.localized_strings.get("hud.skill.sc_lifesteal_regen"), skill, &self.stats.skill_set, &self.localized_strings, @@ -3391,15 +3371,53 @@ impl<'a> Widget for Diary<'a> { &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_beam_5, ui) + .set(state.skill_sceptre_lifesteal_4, ui) .was_clicked() { events.push(Event::UnlockSkill(skill)); }; - let skill = Skill::Sceptre(BCost); + // Top right skills + Button::image(self.imgs.skill_sceptre_heal) + .w_h(74.0, 74.0) + .mid_top_with_margin_on(state.skills_top_r[0], 3.0) + .with_tooltip( + self.tooltip_manager, + &self.localized_strings.get("hud.skill.sc_heal_title"), + &self.localized_strings.get("hud.skill.sc_heal"), + &diary_tooltip, + TEXT_COLOR, + ) + .set(state.skill_sceptre_heal_0, ui); + let skill = Skill::Sceptre(HHeal); if create_skill_button( - self.imgs.heal_cost_skill, - state.skills_top_l[6], + self.imgs.skill_sceptre_heal, + state.skills_top_r[1], + &self.stats.skill_set, + skill, + self.fonts, + &get_skill_label(skill, &self.stats.skill_set), + ) + .with_tooltip( + self.tooltip_manager, + &self.localized_strings.get("hud.skill.sc_heal_heal_title"), + &add_sp_cost_tooltip( + &self.localized_strings.get("hud.skill.sc_heal_heal"), + skill, + &self.stats.skill_set, + &self.localized_strings, + ), + &diary_tooltip, + TEXT_COLOR, + ) + .set(state.skill_sceptre_heal_1, ui) + .was_clicked() + { + events.push(Event::UnlockSkill(skill)); + }; + let skill = Skill::Sceptre(HCost); + if create_skill_button( + self.imgs.skill_sceptre_heal, + state.skills_top_r[2], &self.stats.skill_set, skill, self.fonts, @@ -3417,78 +3435,14 @@ impl<'a> Widget for Diary<'a> { &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_beam_6, ui) + .set(state.skill_sceptre_heal_2, ui) .was_clicked() { events.push(Event::UnlockSkill(skill)); }; - Button::image(self.imgs.skill_sceptre_heal) - .w_h(74.0, 74.0) - .mid_top_with_margin_on(state.skills_top_r[0], 3.0) - .with_tooltip( - self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_healbomb_title"), - &self.localized_strings.get("hud.skill.sc_healbomb"), - &diary_tooltip, - TEXT_COLOR, - ) - .set(state.skill_sceptre_bomb_0, ui); - // Top right skills - let skill = Skill::Sceptre(PHeal); + let skill = Skill::Sceptre(HRange); if create_skill_button( - self.imgs.heal_heal_skill, - state.skills_top_r[1], - &self.stats.skill_set, - skill, - self.fonts, - &get_skill_label(skill, &self.stats.skill_set), - ) - .with_tooltip( - self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_heal_title"), - &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_heal"), - skill, - &self.stats.skill_set, - &self.localized_strings, - ), - &diary_tooltip, - TEXT_COLOR, - ) - .set(state.skill_sceptre_bomb_1, ui) - .was_clicked() - { - events.push(Event::UnlockSkill(skill)); - }; - let skill = Skill::Sceptre(PDamage); - if create_skill_button( - self.imgs.heal_damage_skill, - state.skills_top_r[2], - &self.stats.skill_set, - skill, - self.fonts, - &get_skill_label(skill, &self.stats.skill_set), - ) - .with_tooltip( - self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_damage_title"), - &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_damage"), - skill, - &self.stats.skill_set, - &self.localized_strings, - ), - &diary_tooltip, - TEXT_COLOR, - ) - .set(state.skill_sceptre_bomb_2, ui) - .was_clicked() - { - events.push(Event::UnlockSkill(skill)); - }; - let skill = Skill::Sceptre(PRadius); - if create_skill_button( - self.imgs.heal_radius_skill, + self.imgs.skill_sceptre_heal, state.skills_top_r[3], &self.stats.skill_set, skill, @@ -3497,9 +3451,9 @@ impl<'a> Widget for Diary<'a> { ) .with_tooltip( self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_radius_title"), + &self.localized_strings.get("hud.skill.sc_heal_range_title"), &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_radius"), + &self.localized_strings.get("hud.skill.sc_heal_range"), skill, &self.stats.skill_set, &self.localized_strings, @@ -3507,41 +3461,16 @@ impl<'a> Widget for Diary<'a> { &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_bomb_3, ui) + .set(state.skill_sceptre_heal_3, ui) .was_clicked() { events.push(Event::UnlockSkill(skill)); }; - let skill = Skill::Sceptre(PCost); + // Bottom left skills + let skill = Skill::Sceptre(UnlockAura); if create_skill_button( - self.imgs.heal_cost_skill, - state.skills_top_r[4], - &self.stats.skill_set, - skill, - self.fonts, - &get_skill_label(skill, &self.stats.skill_set), - ) - .with_tooltip( - self.tooltip_manager, - &self.localized_strings.get("hud.skill.sc_energy_cost_title"), - &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_energy_cost"), - skill, - &self.stats.skill_set, - &self.localized_strings, - ), - &diary_tooltip, - TEXT_COLOR, - ) - .set(state.skill_sceptre_bomb_4, ui) - .was_clicked() - { - events.push(Event::UnlockSkill(skill)); - }; - let skill = Skill::Sceptre(PProjSpeed); - if create_skill_button( - self.imgs.heal_projectile_speed_skill, - state.skills_top_r[5], + self.imgs.skill_sceptre_aura, + state.skills_bot_l[0], &self.stats.skill_set, skill, self.fonts, @@ -3551,9 +3480,9 @@ impl<'a> Widget for Diary<'a> { self.tooltip_manager, &self .localized_strings - .get("hud.skill.sc_projectile_speed_title"), + .get("hud.skill.sc_wardaura_unlock_title"), &add_sp_cost_tooltip( - &self.localized_strings.get("hud.skill.sc_projectile_speed"), + &self.localized_strings.get("hud.skill.sc_wardaura_unlock"), skill, &self.stats.skill_set, &self.localized_strings, @@ -3561,7 +3490,119 @@ impl<'a> Widget for Diary<'a> { &diary_tooltip, TEXT_COLOR, ) - .set(state.skill_sceptre_bomb_5, ui) + .set(state.skill_sceptre_aura_0, ui) + .was_clicked() + { + events.push(Event::UnlockSkill(skill)); + }; + let skill = Skill::Sceptre(AStrength); + if create_skill_button( + self.imgs.skill_sceptre_aura, + state.skills_bot_l[1], + &self.stats.skill_set, + skill, + self.fonts, + &get_skill_label(skill, &self.stats.skill_set), + ) + .with_tooltip( + self.tooltip_manager, + &self + .localized_strings + .get("hud.skill.sc_wardaura_strength_title"), + &add_sp_cost_tooltip( + &self.localized_strings.get("hud.skill.sc_wardaura_strength"), + skill, + &self.stats.skill_set, + &self.localized_strings, + ), + &diary_tooltip, + TEXT_COLOR, + ) + .set(state.skill_sceptre_aura_1, ui) + .was_clicked() + { + events.push(Event::UnlockSkill(skill)); + }; + let skill = Skill::Sceptre(ADuration); + if create_skill_button( + self.imgs.skill_sceptre_aura, + state.skills_bot_l[2], + &self.stats.skill_set, + skill, + self.fonts, + &get_skill_label(skill, &self.stats.skill_set), + ) + .with_tooltip( + self.tooltip_manager, + &self + .localized_strings + .get("hud.skill.sc_wardaura_duration_title"), + &add_sp_cost_tooltip( + &self.localized_strings.get("hud.skill.sc_wardaura_duration"), + skill, + &self.stats.skill_set, + &self.localized_strings, + ), + &diary_tooltip, + TEXT_COLOR, + ) + .set(state.skill_sceptre_aura_2, ui) + .was_clicked() + { + events.push(Event::UnlockSkill(skill)); + }; + let skill = Skill::Sceptre(ARange); + if create_skill_button( + self.imgs.skill_sceptre_aura, + state.skills_bot_l[3], + &self.stats.skill_set, + skill, + self.fonts, + &get_skill_label(skill, &self.stats.skill_set), + ) + .with_tooltip( + self.tooltip_manager, + &self + .localized_strings + .get("hud.skill.sc_wardaura_range_title"), + &add_sp_cost_tooltip( + &self.localized_strings.get("hud.skill.sc_wardaura_range"), + skill, + &self.stats.skill_set, + &self.localized_strings, + ), + &diary_tooltip, + TEXT_COLOR, + ) + .set(state.skill_sceptre_aura_3, ui) + .was_clicked() + { + events.push(Event::UnlockSkill(skill)); + }; + let skill = Skill::Sceptre(ACost); + if create_skill_button( + self.imgs.skill_sceptre_aura, + state.skills_bot_l[4], + &self.stats.skill_set, + skill, + self.fonts, + &get_skill_label(skill, &self.stats.skill_set), + ) + .with_tooltip( + self.tooltip_manager, + &self + .localized_strings + .get("hud.skill.sc_wardaura_cost_title"), + &add_sp_cost_tooltip( + &self.localized_strings.get("hud.skill.sc_wardaura_cost"), + skill, + &self.stats.skill_set, + &self.localized_strings, + ), + &diary_tooltip, + TEXT_COLOR, + ) + .set(state.skill_sceptre_aura_4, ui) .was_clicked() { events.push(Event::UnlockSkill(skill)); diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index 2864542ffd..07c0355202 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -452,6 +452,7 @@ image_ids! { hammerleap: "voxygen.element.icons.skill_hammerleap", skill_axe_leap_slash: "voxygen.element.icons.skill_axe_leap_slash", skill_bow_jump_burst: "voxygen.element.icons.skill_bow_jump_burst", + // Do not merge until icon for this skill_sceptre_aura: "voxygen.element.icons.heal_bomb", missing_icon: "voxygen.element.icons.missing_icon_grey",