This commit is contained in:
ntr 2019-03-21 00:01:42 +11:00
parent 616a4b23cb
commit c452a4cd92
6 changed files with 122 additions and 99 deletions

View File

@ -257,12 +257,12 @@ class ItemList extends Phaser.Scene {
} return false; } return false;
}; };
this.add.text(ITEM_WIDTH * 11, ITEM_HEIGHT * 1.1, 'Scoreboard', TEXT.HEADER); // this.add.text(ITEM_WIDTH * 11, ITEM_HEIGHT * 1.1, 'Scoreboard', TEXT.HEADER);
scores.forEach(([name, score], i) => { // scores.forEach(([name, score], i) => {
const SCORE_X = ITEM_WIDTH * 11; // const SCORE_X = ITEM_WIDTH * 11;
const SCORE_Y = ITEM_HEIGHT * 1.1 * (i + 2); // const SCORE_Y = ITEM_HEIGHT * 1.1 * (i + 2);
this.add.text(SCORE_X, SCORE_Y, `${score.wins} - ${score.losses} | ${name}`, TEXT.NORMAL); // this.add.text(SCORE_X, SCORE_Y, `${score.wins} - ${score.losses} | ${name}`, TEXT.NORMAL);
}); // });
// Add Handlers // Add Handlers
this.input.on('dragstart', (pointer, item) => { this.input.on('dragstart', (pointer, item) => {

View File

@ -17,6 +17,16 @@
## NOW ## NOW
cryp vbox cryp vbox
ensure all skills impl ensure all skills impl
Skill::Reflect -> reflect incoming attacks back to opponent
Skill::Ruin -> aoe stun
Skill::Slay -> red attack with bonus somethingorother for blue
Skill::Strangle -> stun + dot
Skill::Clutch -> cannot go below 1hp
Skill::Taunt -> redirect incomnig attacks to self
Skill::Toxic -> apply debuff to attackers
recharge
make parry semi-aggressive make parry semi-aggressive
constants constants
change to ownership pattern change to ownership pattern

View File

@ -425,6 +425,27 @@ impl Cryp {
self.hp.value self.hp.value
} }
pub fn recharge(&mut self) -> ResolutionResult {
let immunity = self.immune(Skill::Recharge);
let immune = immunity.immune;
if immune {
ResolutionResult::Recharge {
red: 0,
blue: 0,
immunity: immunity.clone(),
};
}
let red = self.red_shield.max.saturating_sub(self.red_shield.value);
self.red_shield.value = self.red_shield.max;
let blue = self.blue_shield.max.saturating_sub(self.blue_shield.value);
self.blue_shield.value = self.blue_shield.max;
ResolutionResult::Recharge { red, blue, immunity }
}
pub fn heal(&mut self, skill: Skill, amount: u64) -> ResolutionResult { pub fn heal(&mut self, skill: Skill, amount: u64) -> ResolutionResult {
let immunity = self.immune(skill); let immunity = self.immune(skill);
let immune = immunity.immune; let immune = immunity.immune;
@ -433,7 +454,6 @@ impl Cryp {
ResolutionResult::Healing { ResolutionResult::Healing {
amount: 0, amount: 0,
overhealing: 0, overhealing: 0,
category: Category::RedHeal,
immunity: immunity.clone(), immunity: immunity.clone(),
}; };
} }
@ -461,7 +481,6 @@ impl Cryp {
return ResolutionResult::Healing { return ResolutionResult::Healing {
amount: healing, amount: healing,
overhealing, overhealing,
category: Category::RedHeal,
immunity, immunity,
}; };
} }

View File

@ -374,7 +374,7 @@ impl Game {
cast.resolution.speed, source.name, cast.skill, target.name, amount, mitigation)), cast.resolution.speed, source.name, cast.skill, target.name, amount, mitigation)),
} }
}, },
ResolutionResult::Healing { amount, overhealing, category: _, immunity } => { ResolutionResult::Healing { amount, overhealing, immunity } => {
match immunity.immune { match immunity.immune {
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}", true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}",
cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)), cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
@ -398,6 +398,14 @@ impl Game {
cast.resolution.speed, source.name, target.name, effect)), cast.resolution.speed, source.name, target.name, effect)),
} }
}, },
ResolutionResult::Recharge { red, blue, immunity } => {
match immunity.immune {
true => self.log.push(format!("[{:}] {:} {:?} {:} immune {:?}",
cast.resolution.speed, source.name, cast.skill, target.name, immunity.effects)),
false => self.log.push(format!("[{:}] {:} {:?} {:} {:}R {:}B",
cast.resolution.speed, source.name, cast.skill, target.name, red, blue)),
}
},
ResolutionResult::Evasion { skill: _, evasion_rating } => { ResolutionResult::Evasion { skill: _, evasion_rating } => {
self.log.push(format!("[{:}] {:} {:?} {:} evaded ({:}%)", self.log.push(format!("[{:}] {:} {:?} {:} evaded ({:}%)",
cast.resolution.speed, source.name, cast.skill, target.name, evasion_rating)); cast.resolution.speed, source.name, cast.skill, target.name, evasion_rating));

View File

@ -61,7 +61,8 @@ impl Disable {
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)] #[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
pub enum ResolutionResult { pub enum ResolutionResult {
Damage { amount: u64, mitigation: 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, immunity: Immunity },
Recharge { red: u64, blue: u64, 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 },
Evasion { skill: Skill, evasion_rating: u64 }, Evasion { skill: Skill, evasion_rating: u64 },
@ -291,14 +292,12 @@ impl Effect {
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)] #[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
pub enum Category { pub enum Category {
Red, Red,
RedHeal,
RedDamage, RedDamage,
RedDebuff, RedDebuff,
RedBuff, RedBuff,
RedTick, RedTick,
Blue, Blue,
BlueDamage, BlueDamage,
BlueHeal,
BlueDebuff, BlueDebuff,
BlueBuff, BlueBuff,
BlueTick, BlueTick,
@ -316,6 +315,14 @@ pub enum Skill {
Parry, // avoid all damage Parry, // avoid all damage
Snare, Snare,
Recharge,
Reflect,
Ruin,
Slay,
Strangle,
Clutch,
Taunt,
Toxic,
Strike, Strike,
Stun, Stun,
@ -373,33 +380,14 @@ impl Skill {
match self { match self {
Skill::Attack => None, Skill::Attack => None,
Skill::Strike => None, Skill::Strike => None,
// -----------------
// Nature
// -----------------
Skill::Block => None, // reduce damage Skill::Block => None, // reduce damage
Skill::Parry => None, // avoid all damage Skill::Parry => None, // avoid all damage
Skill::Snare => Some(1), Skill::Snare => Some(1),
Skill::Stun => Some(1), Skill::Stun => Some(1),
// -----------------
// Technology
// -----------------
// -----------------
// Preservation
// -----------------
Skill::Heal => None, Skill::Heal => None,
Skill::Triage => None, // hot Skill::Triage => None, // hot
Skill::TriageTick => None, Skill::TriageTick => None,
Skill::Throw => Some(1), // no damage stun, adds vulnerable Skill::Throw => Some(1), // no damage stun, adds vulnerable
// -----------------
// Destruction
// -----------------
Skill::Blast => None, Skill::Blast => None,
Skill::Amplify => Some(1), Skill::Amplify => Some(1),
Skill::Decay => None, // dot Skill::Decay => None, // dot
@ -407,23 +395,23 @@ impl Skill {
Skill::Siphon => Some(1), Skill::Siphon => Some(1),
Skill::SiphonTick => None, Skill::SiphonTick => None,
Skill::Curse => Some(1), Skill::Curse => Some(1),
// -----------------
// Purity
// -----------------
Skill::Empower => Some(1), Skill::Empower => Some(1),
Skill::Shield => None, Skill::Shield => None,
Skill::Silence => Some(1), Skill::Silence => Some(1),
Skill::Purify => None, Skill::Purify => None,
Skill::Purge => None, Skill::Purge => None,
// -----------------
// Chaos
// -----------------
Skill::Banish => Some(1), Skill::Banish => Some(1),
Skill::Hex => None, Skill::Hex => None,
Skill::Haste => None, Skill::Haste => None,
Skill::Slow => None, Skill::Slow => None,
Skill::Reflect => Some(2),
Skill::Recharge => Some(2),
Skill::Ruin => Some(1),
Skill::Slay => None,
Skill::Strangle => Some(1),
Skill::Clutch => Some(2),
Skill::Taunt => Some(1),
Skill::Toxic => Some(1),
// ----------------- // -----------------
// Test // Test
@ -494,6 +482,17 @@ impl Skill {
Skill::Slow => Category::Blue, Skill::Slow => Category::Blue,
// WRONG
Skill::Recharge => Category::Blue,
Skill::Reflect => Category::Blue,
Skill::Ruin => Category::Blue,
Skill::Slay => Category::Blue,
Skill::Strangle => Category::Blue,
Skill::Clutch => Category::Blue,
Skill::Taunt => Category::Blue,
Skill::Toxic => Category::Blue,
// ----------------- // -----------------
// Test // Test
// ----------------- // -----------------
@ -552,6 +551,16 @@ impl Skill {
Skill::Purify => 1, Skill::Purify => 1,
Skill::Purge => 1, Skill::Purge => 1,
Skill::Recharge => 1,
Skill::Reflect => 1,
Skill::Ruin => 1,
Skill::Slay => 1,
Skill::Strangle => 1,
Skill::Clutch => 1,
Skill::Taunt => 1,
Skill::Toxic => 1,
// unimplemented // unimplemented
// Skill::Lag => 2, // // Skill::Lag => 2, //
@ -593,57 +602,41 @@ impl Skill {
} }
match self { match self {
Skill::Attack => attack(source, target, resolution),
// -----------------
// Nature
// -----------------
Skill::Strike => strike(source, target, resolution),
Skill::Block => block(source, target, resolution),
Skill::Parry => parry(source, target, resolution),
Skill::Snare => snare(source, target, resolution), // TODO prevent physical moves
Skill::Stun => stun(source, target, resolution),
// -----------------
// Technology
// -----------------
// -----------------
// Preservation
// -----------------
Skill::Heal => heal(source, target, resolution),
Skill::Triage => triage(source, target, resolution), // hot
Skill::TriageTick => triage_tick(source, target, resolution), // hot
Skill::Throw => throw(source, target, resolution), // no damage stun, adds vulnerable
// -----------------
// Destruction
// -----------------
Skill::Blast => blast(source, target, resolution),
Skill::Amplify => amplify(source, target, resolution), // increase magic damage Skill::Amplify => amplify(source, target, resolution), // increase magic damage
Skill::Attack => attack(source, target, resolution),
Skill::Banish => banish(source, target, resolution), // TODO prevent all actions
Skill::Blast => blast(source, target, resolution),
Skill::Block => block(source, target, resolution),
Skill::Curse => curse(source, target, resolution),
Skill::Decay => decay(source, target, resolution), // dot Skill::Decay => decay(source, target, resolution), // dot
Skill::DecayTick => decay_tick(source, target, resolution), // dot Skill::DecayTick => decay_tick(source, target, resolution), // dot
Skill::Siphon => siphon(source, target, resolution),
Skill::SiphonTick => siphon_tick(source, target, resolution), // hot
Skill::Curse => curse(source, target, resolution),
// -----------------
// Purity
// -----------------
Skill::Empower => empower(source, target, resolution), // increased phys damage Skill::Empower => empower(source, target, resolution), // increased phys damage
Skill::Haste => haste(source, target, resolution), // speed slow
Skill::Heal => heal(source, target, resolution),
Skill::Hex => hex(source, target, resolution), // todo prevent casting
Skill::Parry => parry(source, target, resolution),
Skill::Purge => purge(source, target, resolution), // dispel all buffs
Skill::Purify => purify(source, target, resolution), // dispel all debuffs
Skill::Recharge => recharge(source, target, resolution), // target is immune to magic damage and fx
Skill::Shield => shield(source, target, resolution), // target is immune to magic damage and fx Skill::Shield => shield(source, target, resolution), // target is immune to magic damage and fx
Skill::Silence => silence(source, target, resolution), // target cannot cast spells Skill::Silence => silence(source, target, resolution), // target cannot cast spells
Skill::Purify => purify(source, target, resolution), // dispel all debuffs Skill::Siphon => siphon(source, target, resolution),
Skill::Purge => purge(source, target, resolution), // dispel all buffs Skill::SiphonTick => siphon_tick(source, target, resolution), // hot
// -----------------
// Chaos
// -----------------
Skill::Banish => banish(source, target, resolution), // TODO prevent all actions
Skill::Hex => hex(source, target, resolution), // todo prevent casting
Skill::Haste => haste(source, target, resolution), // speed slow
Skill::Slow => slow(source, target, resolution), // speed slow Skill::Slow => slow(source, target, resolution), // speed slow
Skill::Snare => snare(source, target, resolution), // TODO prevent physical moves
Skill::Strike => strike(source, target, resolution),
Skill::Stun => stun(source, target, resolution),
Skill::Throw => throw(source, target, resolution), // no damage stun, adds vulnerable
Skill::Triage => triage(source, target, resolution), // hot
Skill::TriageTick => triage_tick(source, target, resolution), // hot
Skill::Reflect => unimplemented!(),
Skill::Ruin => unimplemented!(),
Skill::Slay => unimplemented!(),
Skill::Strangle => unimplemented!(),
Skill::Clutch => unimplemented!(),
Skill::Taunt => unimplemented!(),
Skill::Toxic => unimplemented!(),
// ----------------- // -----------------
// Test // Test
@ -734,26 +727,12 @@ fn heal(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resol
} }
fn triage(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution { fn triage(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution {
let triage = CrypEffect { let effect = CrypEffect {
effect: Effect::Triage, effect: Effect::Triage,
duration: Effect::Triage.duration(), duration: Effect::Triage.duration(),
tick: Some(Cast::new_tick(cryp, target, Skill::TriageTick)), tick: Some(Cast::new_tick(cryp, target, Skill::TriageTick)),
}; };
let immunity = target.immune(Skill::Triage); target.add_effect(Skill::Triage, effect);
let immune = immunity.immune;
let snare_result = ResolutionResult::Effect {
effect: triage.effect,
duration: triage.duration,
immunity,
};
resolution.results.push(snare_result);
if !immune {
target.effects.push(triage);
}
return resolution; return resolution;
} }
@ -815,6 +794,11 @@ fn curse(_cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Res
return resolution;; return resolution;;
} }
fn recharge(_cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution {
resolution.results.push(target.recharge());
return resolution;
}
fn siphon(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution { fn siphon(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution {
let siphon = CrypEffect { let siphon = CrypEffect {
effect: Effect::Siphon, effect: Effect::Siphon,

View File

@ -61,6 +61,7 @@ pub enum Var {
Purge, Purge,
Purify, Purify,
Reflect, Reflect,
Recharge,
Ruin, Ruin,
Shield, Shield,
Silence, Silence,
@ -153,6 +154,7 @@ impl Var {
Var::Parry => Some(Skill::Parry), Var::Parry => Some(Skill::Parry),
Var::Purge => Some(Skill::Purge), Var::Purge => Some(Skill::Purge),
Var::Purify => Some(Skill::Purify), Var::Purify => Some(Skill::Purify),
Var::Recharge => Some(Skill::Recharge),
// Var::Reflect => Some(Skill::Reflect), // Var::Reflect => Some(Skill::Reflect),
// Var::Ruin => Some(Skill::Ruin), // Var::Ruin => Some(Skill::Ruin),
Var::Shield => Some(Skill::Shield), Var::Shield => Some(Skill::Shield),