armour init
This commit is contained in:
parent
b91c1620e4
commit
13bba0200b
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
# Key Mechanics
|
# Key Mechanics
|
||||||
* 10d chaos maths, not rock paper scissors
|
* 10d chaos maths, not rock paper scissors
|
||||||
|
* phys is faster and chaotic
|
||||||
|
* spells are slow and reliable
|
||||||
|
|
||||||
# WORK WORK
|
# WORK WORK
|
||||||
|
|
||||||
@ -13,16 +15,19 @@ strangle
|
|||||||
|
|
||||||
|
|
||||||
## NOW
|
## NOW
|
||||||
|
* armour and SS
|
||||||
|
* rolls as a drop item
|
||||||
|
* armour and SS the same
|
||||||
|
* evasion is a % function of the value
|
||||||
|
|
||||||
|
## SOON
|
||||||
* clean up categories
|
* clean up categories
|
||||||
* why is the text fucked?
|
* why is the text fucked?
|
||||||
* iconography
|
* iconography
|
||||||
* full svg buttons to not have to fuck around with text
|
* full svg buttons to not have to fuck around with text
|
||||||
* FAQ
|
* FAQ
|
||||||
|
|
||||||
## SOON
|
|
||||||
* aoe skills
|
* aoe skills
|
||||||
|
|
||||||
* armour and SS
|
|
||||||
|
|
||||||
* keep track of games joined
|
* keep track of games joined
|
||||||
* concede game on leave
|
* concede game on leave
|
||||||
@ -92,3 +97,31 @@ gem td style attr combinations
|
|||||||
* 18: Restrictions breed creativity
|
* 18: Restrictions breed creativity
|
||||||
* 19: Your audience is good at recognizing problems and bad at solving them
|
* 19: Your audience is good at recognizing problems and bad at solving them
|
||||||
* 20: All the lessons connect
|
* 20: All the lessons connect
|
||||||
|
|
||||||
|
Evasion:
|
||||||
|
• Provides a X% chance to dodge direct hits
|
||||||
|
• Exists a bar with e.g. 200 / 200 evasion rating
|
||||||
|
• Your chance to dodge is reduced as your evasion rating is reduced
|
||||||
|
20% base dodge with e.g 150 / 200 rating will reduce your chance to dodge to 15%
|
||||||
|
|
||||||
|
• As you take damage your evasion rating decreases as a linear proportion of your HP bar
|
||||||
|
(not armour or magic shield)
|
||||||
|
E.g. with 700/900 hp your (200 / 200) evasion rating would be reduced to
|
||||||
|
(7/9) * 200 = 155
|
||||||
|
|
||||||
|
|
||||||
|
Armor:
|
||||||
|
• Defensive bonus against incoming physical damage
|
||||||
|
• Provides a X% mitigation to reduce incoming physical damage before it is applied
|
||||||
|
• Armor exists as an additional pseudo health bar
|
||||||
|
• Armor is reduced to zero before damage is applied to cryp health
|
||||||
|
• If damage taken is physical, armor is the first defensive bar to be reduced
|
||||||
|
• A cryp has the X% mitigation while they have at least 1 armour
|
||||||
|
|
||||||
|
Magic Shield (same as armor basically)
|
||||||
|
• Defensive bonus against incoming magic damage
|
||||||
|
• Provides a X% mitigation to reduce incoming magic damage before it is applied
|
||||||
|
• Magic shield exists as an additional pseudo health bar
|
||||||
|
• Magic shield is reduced to zero before damage is applied to cryp health
|
||||||
|
• If damage taken is magic, armor is the first defensive bar to be reduced
|
||||||
|
• A cryp has the X% mitigation while they have at least 1 magic shield
|
||||||
@ -50,6 +50,8 @@ pub enum Stat {
|
|||||||
SpellDamageTaken,
|
SpellDamageTaken,
|
||||||
Healing,
|
Healing,
|
||||||
HealingTaken,
|
HealingTaken,
|
||||||
|
Armour,
|
||||||
|
SpellShield,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
@ -91,9 +93,11 @@ pub struct Cryp {
|
|||||||
pub account: Uuid,
|
pub account: Uuid,
|
||||||
pub phys_dmg: CrypStat,
|
pub phys_dmg: CrypStat,
|
||||||
pub spell_dmg: CrypStat,
|
pub spell_dmg: CrypStat,
|
||||||
pub stamina: CrypStat,
|
|
||||||
pub speed: CrypStat,
|
pub speed: CrypStat,
|
||||||
|
pub stamina: CrypStat,
|
||||||
pub hp: CrypStat,
|
pub hp: CrypStat,
|
||||||
|
pub armour: CrypStat,
|
||||||
|
pub spell_shield: CrypStat,
|
||||||
pub xp: u64,
|
pub xp: u64,
|
||||||
pub lvl: u8,
|
pub lvl: u8,
|
||||||
pub skills: Vec<CrypSkill>,
|
pub skills: Vec<CrypSkill>,
|
||||||
@ -118,6 +122,8 @@ impl Cryp {
|
|||||||
speed: CrypStat { base: 0, stat: Stat::Speed },
|
speed: CrypStat { base: 0, stat: Stat::Speed },
|
||||||
stamina: CrypStat { base: 0, stat: Stat::Stamina },
|
stamina: CrypStat { base: 0, stat: Stat::Stamina },
|
||||||
hp: CrypStat { base: 0, stat: Stat::Hp },
|
hp: CrypStat { base: 0, stat: Stat::Hp },
|
||||||
|
armour: CrypStat { base: 50, stat: Stat::Armour },
|
||||||
|
spell_shield: CrypStat { base: 50, stat: Stat::SpellShield },
|
||||||
lvl: 0,
|
lvl: 0,
|
||||||
xp: 0,
|
xp: 0,
|
||||||
skills: vec![],
|
skills: vec![],
|
||||||
@ -441,10 +447,21 @@ impl Cryp {
|
|||||||
|
|
||||||
let modified_phys_dmg = phys_dmg_mods.iter().fold(amount, |acc, m| m.apply(acc));
|
let modified_phys_dmg = phys_dmg_mods.iter().fold(amount, |acc, m| m.apply(acc));
|
||||||
|
|
||||||
self.hp.reduce(modified_phys_dmg);
|
// calculate amount of damage armour will not absorb
|
||||||
|
// eg 50 armour 25 dmg -> 25 remainder
|
||||||
|
// 50 armour 100 dmg -> 0 remainder
|
||||||
|
let remainder = self.armour.base.saturating_sub(modified_phys_dmg);
|
||||||
|
let mitigation = modified_phys_dmg.saturating_sub(remainder);
|
||||||
|
|
||||||
|
// reduce armour by damage amount
|
||||||
|
self.armour.reduce(modified_phys_dmg);
|
||||||
|
|
||||||
|
// deal remainder to hp
|
||||||
|
self.hp.reduce(remainder);
|
||||||
|
|
||||||
return ResolutionResult::Damage {
|
return ResolutionResult::Damage {
|
||||||
amount: modified_phys_dmg,
|
amount: modified_phys_dmg,
|
||||||
|
mitigation,
|
||||||
category: Category::PhysDmg,
|
category: Category::PhysDmg,
|
||||||
immunity,
|
immunity,
|
||||||
};
|
};
|
||||||
@ -471,7 +488,14 @@ impl Cryp {
|
|||||||
|
|
||||||
let modified_spell_dmg = spell_dmg_mods.iter().fold(amount, |acc, m| m.apply(acc));
|
let modified_spell_dmg = spell_dmg_mods.iter().fold(amount, |acc, m| m.apply(acc));
|
||||||
|
|
||||||
self.hp.reduce(modified_spell_dmg);
|
// reduce spell_shield by damage amount
|
||||||
|
self.spell_shield.reduce(modified_spell_dmg);
|
||||||
|
|
||||||
|
// reduce amount by the amount absorbed by spell_shield
|
||||||
|
let remainder = amount.saturating_sub(modified_spell_dmg);
|
||||||
|
|
||||||
|
// deal remainder to hp
|
||||||
|
self.hp.reduce(remainder);
|
||||||
|
|
||||||
return ResolutionResult::Damage {
|
return ResolutionResult::Damage {
|
||||||
amount: modified_spell_dmg,
|
amount: modified_spell_dmg,
|
||||||
|
|||||||
@ -347,28 +347,36 @@ impl Game {
|
|||||||
|
|
||||||
for result in cast.resolution.results.iter() {
|
for result in cast.resolution.results.iter() {
|
||||||
match result {
|
match result {
|
||||||
ResolutionResult::Damage { amount, category: _, immunity } => {
|
ResolutionResult::Damage { amount, mitigation, category: _, immunity } => {
|
||||||
match immunity.immune {
|
match immunity.immune {
|
||||||
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}", cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}",
|
||||||
false => self.log.push(format!("[{:}] {:} {:?} {:} {:}", cast.resolution.speed, source.name, cast.skill, target.name, amount)),
|
cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
||||||
|
false => self.log.push(format!("[{:}] {:} {:?} {:} {:}",
|
||||||
|
cast.resolution.speed, source.name, cast.skill, target.name, amount)),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ResolutionResult::Healing { amount, overhealing, category: _, immunity } => {
|
ResolutionResult::Healing { amount, overhealing, category: _, immunity } => {
|
||||||
match immunity.immune {
|
match immunity.immune {
|
||||||
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}", cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}",
|
||||||
false => self.log.push(format!("[{:}] {:} {:?} {:} {:} ({:}OH)", cast.resolution.speed, source.name, cast.skill, target.name, amount, overhealing)),
|
cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
||||||
|
false => self.log.push(format!("[{:}] {:} {:?} {:} {:} ({:}OH)",
|
||||||
|
cast.resolution.speed, source.name, cast.skill, target.name, amount, overhealing)),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ResolutionResult::Effect { effect, duration, immunity } => {
|
ResolutionResult::Effect { effect, duration, immunity } => {
|
||||||
match immunity.immune {
|
match immunity.immune {
|
||||||
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}", cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}",
|
||||||
false => self.log.push(format!("[{:}] {:} {:?} {:} {:?} {:}T", cast.resolution.speed, source.name, cast.skill, target.name, effect, duration)),
|
cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
||||||
|
false => self.log.push(format!("[{:}] {:} {:?} {:} {:?} {:}T",
|
||||||
|
cast.resolution.speed, source.name, cast.skill, target.name, effect, duration)),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ResolutionResult::Removal { effect, immunity } => {
|
ResolutionResult::Removal { effect, immunity } => {
|
||||||
match immunity.immune {
|
match immunity.immune {
|
||||||
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}", cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}",
|
||||||
false => self.log.push(format!("[{:}] {:?} removed {:} {:?}", cast.resolution.speed, source.name, target.name, effect)),
|
cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
|
||||||
|
false => self.log.push(format!("[{:}] {:?} removed {:} {:?}",
|
||||||
|
cast.resolution.speed, source.name, target.name, effect)),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,7 +66,7 @@ impl Disable {
|
|||||||
|
|
||||||
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
|
||||||
pub enum ResolutionResult {
|
pub enum ResolutionResult {
|
||||||
Damage { amount: u64, category: Category , immunity: Immunity },
|
Damage { amount: u64, mitigation: u64, category: Category , immunity: Immunity },
|
||||||
Healing { amount: u64, overhealing: u64, category: Category , immunity: Immunity },
|
Healing { amount: u64, overhealing: u64, category: Category , immunity: Immunity },
|
||||||
Effect { effect: Effect, duration: u8, immunity: Immunity },
|
Effect { effect: Effect, duration: u8, immunity: Immunity },
|
||||||
Removal { effect: Effect, immunity: Immunity },
|
Removal { effect: Effect, immunity: Immunity },
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user