mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Skill point prerequisites and costs
This commit is contained in:
parent
5d5fbde291
commit
eacbdefb75
36
assets/common/skill_trees/skill_cost.ron
Normal file
36
assets/common/skill_trees/skill_cost.ron
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
({
|
||||||
|
Sword(BalancedFinisher): 1,
|
||||||
|
Sword(OffensiveCombo): 2,
|
||||||
|
Sword(OffensiveFinisher): 3,
|
||||||
|
Sword(OffensiveAdvance): 3,
|
||||||
|
Sword(CripplingCombo): 4,
|
||||||
|
Sword(CripplingFinisher): 5,
|
||||||
|
Sword(CripplingStrike): 5,
|
||||||
|
Sword(CripplingGouge): 5,
|
||||||
|
Sword(CleavingCombo): 4,
|
||||||
|
Sword(CleavingFinisher): 5,
|
||||||
|
Sword(CleavingSpin): 5,
|
||||||
|
Sword(CleavingDive): 5,
|
||||||
|
Sword(DefensiveCombo): 2,
|
||||||
|
Sword(DefensiveBulwark): 3,
|
||||||
|
Sword(DefensiveRetreat): 3,
|
||||||
|
Sword(ParryingCombo): 4,
|
||||||
|
Sword(ParryingParry): 5,
|
||||||
|
Sword(ParryingRiposte): 5,
|
||||||
|
Sword(ParryingCounter): 5,
|
||||||
|
Sword(HeavyCombo): 4,
|
||||||
|
Sword(HeavyFinisher): 5,
|
||||||
|
Sword(HeavyPommelStrike): 5,
|
||||||
|
Sword(HeavyFortitude): 5,
|
||||||
|
Sword(MobilityCombo): 2,
|
||||||
|
Sword(MobilityFeint): 3,
|
||||||
|
Sword(MobilityAgility): 3,
|
||||||
|
Sword(ReachingCombo): 4,
|
||||||
|
Sword(ReachingCharge): 5,
|
||||||
|
Sword(ReachingFlurry): 5,
|
||||||
|
Sword(ReachingSkewer): 5,
|
||||||
|
Sword(AirSlashCombo): 4,
|
||||||
|
Sword(AirSlashVertical): 5,
|
||||||
|
Sword(AirSlashHorizontal): 5,
|
||||||
|
Sword(AirSlashWhirlwind): 5,
|
||||||
|
})
|
@ -1,4 +1,34 @@
|
|||||||
({
|
({
|
||||||
|
Sword(OffensiveFinisher): {Sword(OffensiveCombo): 1},
|
||||||
|
Sword(OffensiveAdvance): {Sword(OffensiveCombo): 1},
|
||||||
|
Sword(CripplingCombo): {Sword(OffensiveCombo): 1},
|
||||||
|
Sword(CripplingFinisher): {Sword(CripplingCombo): 1},
|
||||||
|
Sword(CripplingStrike): {Sword(CripplingCombo): 1},
|
||||||
|
Sword(CripplingGouge): {Sword(CripplingCombo): 1},
|
||||||
|
Sword(CleavingCombo): {Sword(OffensiveCombo): 1},
|
||||||
|
Sword(CleavingFinisher): {Sword(CleavingCombo): 1},
|
||||||
|
Sword(CleavingSpin): {Sword(CleavingCombo): 1},
|
||||||
|
Sword(CleavingDive): {Sword(CleavingCombo): 1},
|
||||||
|
Sword(DefensiveBulwark): {Sword(DefensiveCombo): 1},
|
||||||
|
Sword(DefensiveRetreat): {Sword(DefensiveCombo): 1},
|
||||||
|
Sword(ParryingCombo): {Sword(DefensiveCombo): 1},
|
||||||
|
Sword(ParryingParry): {Sword(ParryingCombo): 1},
|
||||||
|
Sword(ParryingRiposte): {Sword(ParryingCombo): 1},
|
||||||
|
Sword(ParryingCounter): {Sword(ParryingCombo): 1},
|
||||||
|
Sword(HeavyCombo): {Sword(DefensiveCombo): 1},
|
||||||
|
Sword(HeavyFinisher): {Sword(HeavyCombo): 1},
|
||||||
|
Sword(HeavyPommelStrike): {Sword(HeavyCombo): 1},
|
||||||
|
Sword(HeavyFortitude): {Sword(HeavyCombo): 1},
|
||||||
|
Sword(MobilityFeint): {Sword(MobilityCombo): 1},
|
||||||
|
Sword(MobilityAgility): {Sword(MobilityCombo): 1},
|
||||||
|
Sword(ReachingCombo): {Sword(MobilityCombo): 1},
|
||||||
|
Sword(ReachingCharge): {Sword(ReachingCombo): 1},
|
||||||
|
Sword(ReachingFlurry): {Sword(ReachingCombo): 1},
|
||||||
|
Sword(ReachingSkewer): {Sword(ReachingCombo): 1},
|
||||||
|
Sword(AirSlashCombo): {Sword(MobilityCombo): 1},
|
||||||
|
Sword(AirSlashVertical): {Sword(AirSlashCombo): 1},
|
||||||
|
Sword(AirSlashHorizontal): {Sword(AirSlashCombo): 1},
|
||||||
|
Sword(AirSlashWhirlwind): {Sword(AirSlashCombo): 1},
|
||||||
Axe(LDamage): {Axe(UnlockLeap): 1},
|
Axe(LDamage): {Axe(UnlockLeap): 1},
|
||||||
Axe(LKnockback): {Axe(UnlockLeap): 1},
|
Axe(LKnockback): {Axe(UnlockLeap): 1},
|
||||||
Axe(LCost): {Axe(UnlockLeap): 1},
|
Axe(LCost): {Axe(UnlockLeap): 1},
|
||||||
|
@ -56,6 +56,15 @@ impl Asset for SkillPrerequisitesMap {
|
|||||||
const EXTENSION: &'static str = "ron";
|
const EXTENSION: &'static str = "ron";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
|
pub struct SkillCostMap(HashMap<Skill, u16>);
|
||||||
|
|
||||||
|
impl Asset for SkillCostMap {
|
||||||
|
type Loader = assets::RonLoader;
|
||||||
|
|
||||||
|
const EXTENSION: &'static str = "ron";
|
||||||
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
// Determines the skills that comprise each skill group.
|
// Determines the skills that comprise each skill group.
|
||||||
//
|
//
|
||||||
@ -115,6 +124,12 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
hashes
|
hashes
|
||||||
};
|
};
|
||||||
|
// Loads the cost in skill points per level needed to purchase a skill
|
||||||
|
pub static ref SKILL_COST: HashMap<Skill, u16> = {
|
||||||
|
SkillCostMap::load_expect_cloned(
|
||||||
|
"common.skill_trees.skill_cost",
|
||||||
|
).0
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Serialize, Deserialize, Ord, PartialOrd)]
|
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Serialize, Deserialize, Ord, PartialOrd)]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::comp::skillset::{
|
use crate::comp::skillset::{
|
||||||
SkillGroupKind, SKILL_GROUP_LOOKUP, SKILL_MAX_LEVEL, SKILL_PREREQUISITES,
|
SkillGroupKind, SKILL_COST, SKILL_GROUP_LOOKUP, SKILL_MAX_LEVEL, SKILL_PREREQUISITES,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@ -215,7 +215,11 @@ impl Skill {
|
|||||||
/// Returns the cost in skill points of unlocking a particular skill
|
/// Returns the cost in skill points of unlocking a particular skill
|
||||||
pub fn skill_cost(&self, level: u16) -> u16 {
|
pub fn skill_cost(&self, level: u16) -> u16 {
|
||||||
// TODO: Better balance the costs later
|
// TODO: Better balance the costs later
|
||||||
level
|
SKILL_COST
|
||||||
|
.get(self)
|
||||||
|
.copied()
|
||||||
|
.unwrap_or(1)
|
||||||
|
.saturating_mul(level)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the maximum level a skill can reach, returns None if the skill
|
/// Returns the maximum level a skill can reach, returns None if the skill
|
||||||
|
Loading…
Reference in New Issue
Block a user