diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6429160b..1affb99f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -93,11 +93,11 @@ New skill `Hybrid`
- Heal
Changed multiplier 120% -> 130%
-- Parry
+- Counter
Changed duration 1T -> 2T
Changed cooldown 0T -> 2T
Now recharges 110% red damage as red life
- Riposte multiplier reduced 100% -> 70%
+ CounterAttack multiplier reduced 100% -> 70%
- Siphon
Multiplier changed 30% -> 40%
diff --git a/COMBOS.md b/COMBOS.md
index 24232ec2..a2c8b6d2 100644
--- a/COMBOS.md
+++ b/COMBOS.md
@@ -96,7 +96,7 @@ RB - Invert
# Block Base #
-RR - Parry
+RR - Counter
GG - Reflect
BB - Electrify
RG - Intercept
diff --git a/SPECS.md b/SPECS.md
index cd8d089f..8125c11e 100644
--- a/SPECS.md
+++ b/SPECS.md
@@ -56,7 +56,7 @@ In your player Construct #1 has `Strike`, Construct #2 has `Slay` and `Heal`, Co
- Buy 2 Basic Damage Spec (item)
- Combine 2 Red + 'Stun' -> Strangle
- - Combine 2 Red + 'Block' -> Parry
+ - Combine 2 Red + 'Block' -> Counter
Construct #1 -> Give 'Stun' & 'Strangle' -> Strike, Stun, Strangle + 2 x Red Damage Spec (10R)
Construct #2 -> 'No change' -> Heal (2G)
diff --git a/client/src/animations.test.jsx b/client/src/animations.test.jsx
index 7a36d1dd..840500c6 100644
--- a/client/src/animations.test.jsx
+++ b/client/src/animations.test.jsx
@@ -80,27 +80,28 @@ const SKILLS = [
'BlastI',
'ChaosI',
'ClutchI',
- 'ElectrifyI',
- 'ElectrocuteI',
- 'ElectrocuteTickI',
+ 'CounterAttackI',
+ 'CounterI',
'CurseI',
'DecayI',
'DecayTickI',
+ 'ElectrifyI',
+ 'ElectrocuteI',
+ 'ElectrocuteTickI',
'HasteI',
'HasteStrike',
+ 'HatredI',
'HealI',
'HexI',
- 'HatredI',
'HostilityI',
'HybridBlast',
'HybridI',
+ 'InterceptI',
'InvertI',
- 'ParryI',
'PurgeI',
'PurifyI',
'RechargeI',
'ReflectI',
- 'RiposteI',
'RuinI',
'ScatterI',
'SilenceI',
@@ -110,7 +111,6 @@ const SKILLS = [
'SleepI',
'SnareI',
'StrikeI',
- 'InterceptI',
'ThrowI',
'TriageI',
'TriageTickI',
diff --git a/client/src/components/animations.jsx b/client/src/components/animations.jsx
index 5190461f..b8e9ce76 100644
--- a/client/src/components/animations.jsx
+++ b/client/src/components/animations.jsx
@@ -22,7 +22,7 @@ const Hex = require('./anims/hex');
const Hybrid = require('./anims/hybrid');
const Intercept = require('./anims/intercept');
const Invert = require('./anims/invert');
-const Parry = require('./anims/parry');
+const Counter = require('./anims/counter');
const Purify = require('./anims/purify');
const Recharge = require('./anims/recharge');
const Refl = require('./anims/reflect');
@@ -150,7 +150,7 @@ function animations(props) {
case 'Electrify': return ;
case 'Electrocute': return ;
case 'ElectrocuteTick': return ;
- case 'Parry': return ;
+ case 'Counter': return ;
case 'Purify': return ;
case 'Recharge': return ;
case 'Reflect': return ;
diff --git a/client/src/components/anims/parry.jsx b/client/src/components/anims/counter.jsx
similarity index 83%
rename from client/src/components/anims/parry.jsx
rename to client/src/components/anims/counter.jsx
index 0619b956..f44ba138 100644
--- a/client/src/components/anims/parry.jsx
+++ b/client/src/components/anims/counter.jsx
@@ -4,7 +4,7 @@ const anime = require('animejs').default;
const { TIMES } = require('../../constants');
-class Parry extends Component {
+class Counter extends Component {
constructor() {
super();
this.animations = [];
@@ -15,25 +15,25 @@ class Parry extends Component {
);
@@ -41,7 +41,7 @@ class Parry extends Component {
componentDidMount() {
this.animations.push(anime({
- targets: ['#parry'],
+ targets: ['#counter'],
opacity: [
{ value: 1, delay: TIMES.TARGET_DELAY_MS, duration: TIMES.TARGET_DURATION_MS * 0.2 },
{ value: 0, delay: TIMES.TARGET_DURATION_MS * 0.6, duration: TIMES.TARGET_DURATION_MS * 0.2 },
@@ -50,7 +50,7 @@ class Parry extends Component {
}));
this.animations.push(anime({
- targets: ['#parry'],
+ targets: ['#counter'],
rotateX: 180,
delay: TIMES.TARGET_DELAY_MS * 2,
duration: TIMES.TARGET_DURATION_MS / 2,
@@ -58,7 +58,7 @@ class Parry extends Component {
}));
this.animations.push(anime({
- targets: ['#parryFilter feTurbulence', '#parryFilter feDisplacementMap'],
+ targets: ['#counterFilter feTurbulence', '#counterFilter feDisplacementMap'],
baseFrequency: 2,
scale: 10,
numOctaves: 5,
@@ -80,4 +80,4 @@ class Parry extends Component {
}
}
-module.exports = Parry;
+module.exports = Counter;
diff --git a/client/src/components/anims/intercept.jsx b/client/src/components/anims/intercept.jsx
index aa89d80f..5bc179a4 100644
--- a/client/src/components/anims/intercept.jsx
+++ b/client/src/components/anims/intercept.jsx
@@ -48,8 +48,8 @@ class Intercept extends Component {
this.animations.push(anime({
targets: ['#intercept'],
transform: [
- `scale(1) ${this.props.player ? 'rotate(180)' : ''}`,
- `scale(3) ${this.props.player ? 'rotate(180)' : ''}`,
+ `scale(1 1) ${this.props.player ? 'rotate(180)' : ''}`,
+ `scale(30 3) ${this.props.player ? 'rotate(180)' : ''}`,
],
strokeWidth: 0,
diff --git a/client/src/components/targeting.arrows.jsx b/client/src/components/targeting.arrows.jsx
index cf403d42..eabbd530 100644
--- a/client/src/components/targeting.arrows.jsx
+++ b/client/src/components/targeting.arrows.jsx
@@ -1,6 +1,7 @@
const preact = require('preact');
const { Component } = require('preact');
const { connect } = require('preact-redux');
+const anime = require('animejs').default;
const throttle = require('lodash/throttle');
@@ -16,6 +17,7 @@ class TargetSvg extends Component {
this.onResize = throttle(() => {
const svg = document.getElementById('targeting');
const { width, height } = svg.getBoundingClientRect();
+ const path = document.querySelector('#targeting path');
this.setState({ width, height });
}, 500);
}
@@ -104,6 +106,14 @@ class TargetSvg extends Component {
window.addEventListener('resize', this.onResize);
this.onResize();
setTimeout(this.onResize, 50);
+ // anime({
+ // targets: ['#targeting path'],
+ // strokeDashoffset: [anime.setDashoffset, 0],
+ // duration: 1000,
+ // easing: 'linear',
+ // loop: true,
+ // delay: anime.stagger(3000),
+ // });
}
componentWillUnmount() {
diff --git a/client/src/test.instance.js b/client/src/test.instance.js
index df9e7c21..b2c97ef4 100644
--- a/client/src/test.instance.js
+++ b/client/src/test.instance.js
@@ -98,7 +98,7 @@ function testInstance(uuid) {
"cd": 2
},
{
- "skill": "Parry",
+ "skill": "Counter",
"self_targeting": true,
"cd": 2
}
@@ -1707,7 +1707,7 @@ function testInstance(uuid) {
"cd": null
},
{
- "skill": "Parry",
+ "skill": "Counter",
"self_targeting": true,
"cd": 2
}
@@ -4010,7 +4010,7 @@ function testInstance(uuid) {
"cd": null
},
{
- "skill": "Parry",
+ "skill": "Counter",
"self_targeting": true,
"cd": 2
},
diff --git a/client/src/utils.jsx b/client/src/utils.jsx
index 0e3b4d2d..c4c954bc 100644
--- a/client/src/utils.jsx
+++ b/client/src/utils.jsx
@@ -358,7 +358,7 @@ const removeTier = skill => {
if (skill.includes('Hybrid')) return 'Hybrid';
if (skill.includes('Amplify')) return 'Amplify';
- if (skill.includes('Parry')) return 'Parry';
+ if (skill.includes('Counter')) return 'Counter';
if (skill.includes('Purify')) return 'Purify';
if (skill.includes('Electrify')) return 'Electrify';
if (skill.includes('Electrocute')) return 'Electrocute';
diff --git a/server/src/effect.rs b/server/src/effect.rs
index 12ae9857..1176e9c9 100644
--- a/server/src/effect.rs
+++ b/server/src/effect.rs
@@ -16,7 +16,7 @@ pub enum Effect {
Hex,
Hybrid,
Invert,
- Parry,
+ Counter,
Purge,
Reflect,
Slow,
@@ -66,7 +66,7 @@ pub enum Effect {
impl Effect {
pub fn immune(&self, skill: Skill) -> bool {
match self {
- Effect::Parry => match skill {
+ Effect::Counter => match skill {
Skill::Attack => true,
Skill::Stun => true,
_ => skill.colours().contains(&Colour::Red)
@@ -166,7 +166,7 @@ impl Effect {
Effect::Stun => Some(Colour::Red),
Effect::Block => Some(Colour::Green),
Effect::Buff => Some(Colour::Green),
- Effect::Parry => Some(Colour::Green),
+ Effect::Counter => Some(Colour::Green),
Effect::Vulnerable => Some(Colour::Red),
Effect::Snare => Some(Colour::Red),
Effect::Clutch => Some(Colour::Green),
diff --git a/server/src/game.rs b/server/src/game.rs
index a89de93f..786a60a7 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -854,7 +854,7 @@ mod tests {
.learn(Skill::Stun)
.learn(Skill::Attack)
.learn(Skill::Block)
- .learn(Skill::ParryI)
+ .learn(Skill::CounterI)
.learn(Skill::SiphonI)
.learn(Skill::AmplifyI)
.learn(Skill::Stun)
@@ -866,7 +866,7 @@ mod tests {
.learn(Skill::Stun)
.learn(Skill::Attack)
.learn(Skill::Block)
- .learn(Skill::ParryI)
+ .learn(Skill::CounterI)
.learn(Skill::SiphonI)
.learn(Skill::AmplifyI)
.learn(Skill::Stun)
@@ -1074,7 +1074,7 @@ mod tests {
}
#[test]
- fn parry_test() {
+ fn counter_test() {
let mut game = create_test_game();
let x_player = game.players[0].clone();
@@ -1087,11 +1087,11 @@ mod tests {
game.construct_by_id(y_construct.id).unwrap().reduce_cooldowns();
}
- while game.construct_by_id(x_construct.id).unwrap().skill_on_cd(Skill::ParryI).is_some() {
+ while game.construct_by_id(x_construct.id).unwrap().skill_on_cd(Skill::CounterI).is_some() {
game.construct_by_id(x_construct.id).unwrap().reduce_cooldowns();
}
- game.add_skill(x_player.id, x_construct.id, None, Skill::ParryI).unwrap();
+ game.add_skill(x_player.id, x_construct.id, None, Skill::CounterI).unwrap();
game.add_skill(y_player.id, y_construct.id, Some(x_construct.id), Skill::Stun).unwrap();
game.player_ready(x_player.id).unwrap();
@@ -1099,10 +1099,10 @@ mod tests {
game = game.resolve_phase_start();
- // should not be stunned because of parry
+ // should not be stunned because of counter
assert!(game.player_by_id(x_player.id).unwrap().constructs[0].is_stunned() == false);
// riposte
- assert_eq!(game.player_by_id(y_player.id).unwrap().constructs[0].green_life(), (1024 - x_construct.red_power().pct(Skill::RiposteI.multiplier())));
+ assert_eq!(game.player_by_id(y_player.id).unwrap().constructs[0].green_life(), (1024 - x_construct.red_power().pct(Skill::CounterAttackI.multiplier())));
}
#[test]
diff --git a/server/src/item.rs b/server/src/item.rs
index 428f8954..9b2a2830 100644
--- a/server/src/item.rs
+++ b/server/src/item.rs
@@ -130,9 +130,9 @@ pub enum Item {
InvertI,
InvertII,
InvertIII,
- ParryI,
- ParryII,
- ParryIII,
+ CounterI,
+ CounterII,
+ CounterIII,
PurgeI,
PurgeII,
PurgeIII,
@@ -335,9 +335,9 @@ impl Item {
Item::InvertI => Some(Skill::InvertI),
Item::InvertII => Some(Skill::InvertII),
Item::InvertIII => Some(Skill::InvertIII),
- Item::ParryI => Some(Skill::ParryI),
- Item::ParryII => Some(Skill::ParryII),
- Item::ParryIII => Some(Skill::ParryIII),
+ Item::CounterI => Some(Skill::CounterI),
+ Item::CounterII => Some(Skill::CounterII),
+ Item::CounterIII => Some(Skill::CounterIII),
Item::PurgeI => Some(Skill::PurgeI),
Item::PurgeII => Some(Skill::PurgeII),
Item::PurgeIII => Some(Skill::PurgeIII),
@@ -668,9 +668,9 @@ impl Item {
"Reverse healing into damage and damage into healing.
Any excess red or blue damage is converted into shield recharge."),
- Item::ParryI |
- Item::ParryII |
- Item::ParryIII => format!("{} {:?}% red power and blocks red skills for {:?}T. {} {:?}% red power.",
+ Item::CounterI |
+ Item::CounterII |
+ Item::CounterIII => format!("{} {:?}% red power and blocks red skills for {:?}T. {} {:?}% red power.",
"Self targetting skill. Recharges RedLife for",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[0].get_duration(),
@@ -825,9 +825,9 @@ impl Item {
Item::InvertII => vec![Item::InvertI, Item::InvertI, Item::InvertI],
Item::InvertIII => vec![Item::InvertII, Item::InvertII, Item::InvertII],
- Item::ParryI => vec![Item::Block, Item::Red, Item::Red],
- Item::ParryII => vec![Item::ParryI, Item::ParryI, Item::ParryI],
- Item::ParryIII => vec![Item::ParryII, Item::ParryII, Item::ParryII], // Add red recharge
+ Item::CounterI => vec![Item::Block, Item::Red, Item::Red],
+ Item::CounterII => vec![Item::CounterI, Item::CounterI, Item::CounterI],
+ Item::CounterIII => vec![Item::CounterII, Item::CounterII, Item::CounterII], // Add red recharge
Item::PurifyI => vec![Item::Block, Item::Green, Item::Green],
Item::PurifyII => vec![Item::PurifyI, Item::PurifyI, Item::PurifyI],
Item::PurifyIII => vec![Item::PurifyII, Item::PurifyII, Item::PurifyII],
@@ -997,9 +997,9 @@ impl From for Item {
Skill::InvertI => Item::InvertI,
Skill::InvertII => Item::InvertII,
Skill::InvertIII => Item::InvertIII,
- Skill::ParryI => Item::ParryI,
- Skill::ParryII => Item::ParryII,
- Skill::ParryIII => Item::ParryIII,
+ Skill::CounterI => Item::CounterI,
+ Skill::CounterII => Item::CounterII,
+ Skill::CounterIII => Item::CounterIII,
Skill::PurgeI => Item::PurgeI,
Skill::PurgeII => Item::PurgeII,
Skill::PurgeIII => Item::PurgeIII,
@@ -1065,9 +1065,9 @@ impl From for Item {
Skill::HatredIII => Item::HostilityIII,
Skill::HasteStrike => Item::HasteI,
Skill::HybridBlast => Item::HybridI,
- Skill::RiposteI => Item::ParryI,
- Skill::RiposteII => Item::ParryII,
- Skill::RiposteIII => Item::ParryIII,
+ Skill::CounterAttackI => Item::CounterI,
+ Skill::CounterAttackII => Item::CounterII,
+ Skill::CounterAttackIII => Item::CounterIII,
Skill::SiphonTickI => Item::SiphonI,
Skill::SiphonTickII => Item::SiphonII,
Skill::SiphonTickIII => Item::SiphonIII,
@@ -1205,9 +1205,9 @@ pub fn get_combos() -> Vec {
Combo { components: Item::InvertII.combo(), item: Item::InvertII },
Combo { components: Item::InvertIII.combo(), item: Item::InvertIII },
- Combo { components: Item::ParryI.combo(), item: Item::ParryI },
- Combo { components: Item::ParryII.combo(), item: Item::ParryII },
- Combo { components: Item::ParryIII.combo(), item: Item::ParryIII },
+ Combo { components: Item::CounterI.combo(), item: Item::CounterI },
+ Combo { components: Item::CounterII.combo(), item: Item::CounterII },
+ Combo { components: Item::CounterIII.combo(), item: Item::CounterIII },
Combo { components: Item::PurifyI.combo(), item: Item::PurifyI },
Combo { components: Item::PurifyII.combo(), item: Item::PurifyII },
Combo { components: Item::PurifyIII.combo(), item: Item::PurifyIII },
diff --git a/server/src/skill.rs b/server/src/skill.rs
index af425adf..76098132 100644
--- a/server/src/skill.rs
+++ b/server/src/skill.rs
@@ -188,9 +188,9 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut
Skill::InvertII |
Skill::InvertIII => invert(source, target, resolutions, skill),
- Skill::ParryI |
- Skill::ParryII |
- Skill::ParryIII => parry(source, target, resolutions, skill),
+ Skill::CounterI |
+ Skill::CounterII |
+ Skill::CounterIII => counter(source, target, resolutions, skill),
Skill::PurgeI |
Skill::PurgeII |
@@ -275,9 +275,9 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut
Skill::HatredII |
Skill::HatredIII => panic!("should only trigger from hatred"),
Skill::HybridBlast => panic!("should only trigger from hybrid"),
- Skill::RiposteI |
- Skill::RiposteII |
- Skill::RiposteIII => panic!("should only trigger from parry"),
+ Skill::CounterAttackI |
+ Skill::CounterAttackII |
+ Skill::CounterAttackIII => panic!("should only trigger from counter"),
// Not used
@@ -322,15 +322,15 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
}
},
- Event::Immunity { skill: _, immunity } => match immunity.contains(&Effect::Parry) {
+ Event::Immunity { skill: _, immunity } => match immunity.contains(&Effect::Counter) {
true => {
let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
- .find(|e| e.effect == Effect::Parry).unwrap().clone();
+ .find(|e| e.effect == Effect::Counter).unwrap().clone();
match meta {
Some(EffectMeta::Skill(s)) => {
resolutions = riposte(&mut target, &mut source, resolutions, s);
},
- _ => panic!("no parry skill"),
+ _ => panic!("no counter skill"),
};
},
@@ -560,9 +560,9 @@ pub enum Skill {
InvertII,
InvertIII,
- ParryI, // avoid all damage
- ParryII,
- ParryIII,
+ CounterI, // avoid all damage
+ CounterII,
+ CounterIII,
PurgeI,
PurgeII,
PurgeIII,
@@ -579,9 +579,9 @@ pub enum Skill {
ReflectII,
ReflectIII,
- RiposteI,
- RiposteII,
- RiposteIII,
+ CounterAttackI,
+ CounterAttackII,
+ CounterAttackIII,
RuinI,
RuinII,
@@ -669,12 +669,12 @@ impl Skill {
Skill::ElectrocuteTickII => 100,
Skill::ElectrocuteTickIII => 130,
- Skill::ParryI => 110,
- Skill::ParryII => 145,
- Skill::ParryIII => 200,
- Skill::RiposteI => 70,
- Skill::RiposteII => 95,
- Skill::RiposteIII => 120,
+ Skill::CounterI => 110,
+ Skill::CounterII => 145,
+ Skill::CounterIII => 200,
+ Skill::CounterAttackI => 70,
+ Skill::CounterAttackII => 95,
+ Skill::CounterAttackIII => 120,
Skill::PurifyI => 45, //Green dmg (heal)
Skill::PurifyII => 70,
@@ -812,12 +812,12 @@ impl Skill {
Skill::InvertII => vec![ConstructEffect {effect: Effect::Invert, duration: 3, meta: None, tick: None}],
Skill::InvertIII => vec![ConstructEffect {effect: Effect::Invert, duration: 4, meta: None, tick: None}],
- Skill::ParryI => vec![ConstructEffect {effect: Effect::Parry, duration: 2,
- meta: Some(EffectMeta::Skill(Skill::RiposteI)), tick: None}],
- Skill::ParryII => vec![ConstructEffect {effect: Effect::Parry, duration: 2,
- meta: Some(EffectMeta::Skill(Skill::RiposteII)), tick: None}],
- Skill::ParryIII => vec![ConstructEffect {effect: Effect::Parry, duration: 2,
- meta: Some(EffectMeta::Skill(Skill::RiposteIII)), tick: None}],
+ Skill::CounterI => vec![ConstructEffect {effect: Effect::Counter, duration: 2,
+ meta: Some(EffectMeta::Skill(Skill::CounterAttackI)), tick: None}],
+ Skill::CounterII => vec![ConstructEffect {effect: Effect::Counter, duration: 2,
+ meta: Some(EffectMeta::Skill(Skill::CounterAttackII)), tick: None}],
+ Skill::CounterIII => vec![ConstructEffect {effect: Effect::Counter, duration: 2,
+ meta: Some(EffectMeta::Skill(Skill::CounterAttackIII)), tick: None}],
Skill::ReflectI => vec![ConstructEffect {effect: Effect::Reflect, duration: 1, meta: None, tick: None }],
Skill::ReflectII => vec![ConstructEffect {effect: Effect::Reflect, duration: 2, meta: None, tick: None }],
@@ -895,9 +895,9 @@ impl Skill {
Skill::StrikeII => None,
Skill::StrikeIII => None,
Skill::Block => None, // reduce damage
- Skill::ParryI |
- Skill::ParryII |
- Skill::ParryIII => Some(2), // avoid all damage
+ Skill::CounterI |
+ Skill::CounterII |
+ Skill::CounterIII => Some(2), // avoid all damage
Skill::SnareI => Some(2),
Skill::SnareII => Some(2),
@@ -1020,9 +1020,9 @@ impl Skill {
// Trigger
Skill::HybridBlast |
Skill::HasteStrike |
- Skill::RiposteI |
- Skill::RiposteII |
- Skill::RiposteIII | // parry
+ Skill::CounterAttackI |
+ Skill::CounterAttackII |
+ Skill::CounterAttackIII | // counter
Skill::ElectrocuteI |
Skill::ElectrocuteII |
Skill::ElectrocuteIII |
@@ -1125,9 +1125,9 @@ impl Skill {
Skill::ClutchI |
Skill::ClutchII |
Skill::ClutchIII |
- Skill::ParryI |
- Skill::ParryII |
- Skill::ParryIII => true,
+ Skill::CounterI |
+ Skill::CounterII |
+ Skill::CounterIII => true,
_ => false,
}
@@ -1159,9 +1159,9 @@ impl Skill {
Skill::InvertI |
Skill::InvertII |
Skill::InvertIII |
- Skill::ParryI |
- Skill::ParryII |
- Skill::ParryIII |
+ Skill::CounterI |
+ Skill::CounterII |
+ Skill::CounterIII |
Skill::PurifyI |
Skill::PurifyII |
Skill::PurifyIII |
@@ -1318,7 +1318,7 @@ fn buff(source: &mut Construct, target: &mut Construct, mut results: Resolutions
return results;
}
-fn parry(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
+fn counter(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let red_amount = source.red_power().pct(skill.multiplier());
results.push(Resolution::new(source, target)
.event(target.recharge(skill, red_amount, 0))