the beginninging
This commit is contained in:
parent
7913de7eb9
commit
cd6e31b306
42
CHANGELOG.md
42
CHANGELOG.md
@ -12,7 +12,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
(Proposed changes not all impl)
|
||||
|
||||
New skill `Scatter `
|
||||
New skill `Scatter`
|
||||
Combines - Buff + BB
|
||||
Links targets together so dmg taken is split
|
||||
Recharge 140% source blue damage as blue life to target
|
||||
@ -31,7 +31,7 @@ New skill `Impurity`
|
||||
|
||||
- Removed Empower (Buff + RR) -> combined effect with amplify
|
||||
|
||||
- Amplify
|
||||
- Amplify
|
||||
Changed to Buff + RB (was Buff + BB)
|
||||
Increases both red and blue power.
|
||||
Red and blue attacks recharge red and blue life (to be impl)
|
||||
@ -47,7 +47,7 @@ New skill `Impurity`
|
||||
RNG range changed from (0 - 20%) -> (0 - 30%)
|
||||
Same dmg range but more RNG
|
||||
|
||||
- Haste
|
||||
- Haste
|
||||
Changed to Buff + RG (was Buff + RB)
|
||||
Buff causes target to deal an extra attack when using red attack base skills (strike / slay / chaos)
|
||||
Extra attack does 25% source speed as red damage
|
||||
@ -65,7 +65,7 @@ New skill `Impurity`
|
||||
- Strike
|
||||
Change multipliers T1/T2/T3 (110/130/150 -> 90/110/130)
|
||||
|
||||
- Taunt
|
||||
- Taunt
|
||||
Changed to Buff + RR (was Buff + RG)
|
||||
Now recharges 80% source red damage as red life to target
|
||||
|
||||
@ -77,13 +77,13 @@ New skill `Impurity`
|
||||
## [0.1.1] - 2019-05-03
|
||||
### Added
|
||||
Event::Skill
|
||||
needed to convey the use of skill which is followed by other events
|
||||
needed to convey the use of skill which is followed by other events
|
||||
used for skill Purify to show that it is used and then followed by removal and other events
|
||||
New Skill `Sleep`
|
||||
Combined using Stun + GG
|
||||
Stuns target for 3T (might need to be 4T)
|
||||
Deals 240% green damage (heal)
|
||||
Concept - high duration stun with the drawback of a big heal on the target
|
||||
Concept - high duration stun with the drawback of a big heal on the target
|
||||
Base cooldown 3T
|
||||
(Could be played aggressively or defensively)
|
||||
|
||||
@ -91,31 +91,31 @@ New skill `Impurity`
|
||||
|
||||
### Changed
|
||||
Switch purify with reflect
|
||||
- Purify
|
||||
- Purify
|
||||
Now GG + block (was GB + block)
|
||||
Now applies a small heal 45% multiplier green damage (power) for each debuff removed
|
||||
|
||||
- Reflect
|
||||
|
||||
- Reflect
|
||||
Now GB + block (was GG + block)
|
||||
Recharges blue life at 45% blue damage
|
||||
|
||||
|
||||
- Server function recharge changed to take skill, red amount and blue amount as inputs
|
||||
|
||||
|
||||
- Recharge Skill reworked
|
||||
No longer restores full Red and Blue life
|
||||
Now restores Red life and Blue life based on respective red and blue damage
|
||||
Now restores Red life and Blue life based on respective red and blue damage
|
||||
Recharge value calculated at 85% multiplier with red and blue damage
|
||||
|
||||
Silence
|
||||
Silence
|
||||
No longer Stun + GB (already exists as debuff BB)
|
||||
Now also deals damage amount of 55% base blue damage
|
||||
This damage amount does 45% more damage per blue skill blocked
|
||||
This damage amount does 45% more damage per blue skill blocked
|
||||
Maximum = (0.55)(1.35)*base_blue_damage
|
||||
Cooldown changed 1T -> 2T
|
||||
Debuff duration increased 2T -> 3T
|
||||
Snare
|
||||
Now also deals damage amount of 40% base red damage
|
||||
This damage amount does 45% more damage per red skill blocked
|
||||
This damage amount does 45% more damage per red skill blocked
|
||||
Maximum = (0.40)(1.35)*base_red_damage
|
||||
Cooldown changed 1T -> 2T
|
||||
Debuff duration increased 2T -> 3T
|
||||
@ -126,24 +126,24 @@ New skill `Impurity`
|
||||
Taunt now GR + Buff
|
||||
No longer self-target only
|
||||
|
||||
|
||||
|
||||
Hex is now Stun + GB (was Stun + RB)
|
||||
Banish is now Stun + RB (was Stun + RG) for rng theme
|
||||
Throw is now Stun + RG (was Stun + GG)
|
||||
Throw is now Stun + RG (was Stun + GG)
|
||||
- Better fit as it applies inc Red taken debuff (vulnerability)
|
||||
|
||||
|
||||
## [0.1.0] - 2019-05-02
|
||||
### Added
|
||||
New skill `Chaos`
|
||||
New skill `Chaos`
|
||||
- 50% base red & blue with an additional rng 20% blue & red
|
||||
- Combo'd with Attack + Red + Blue
|
||||
|
||||
New skill `Slay`
|
||||
New skill `Slay`
|
||||
- 70% base red, heals (green damage) for equivalent dmg dealt
|
||||
- Combo'd with Attack + Red + Green
|
||||
|
||||
New effect `Wither`
|
||||
New effect `Wither`
|
||||
- Reduces green damage taken by 50%
|
||||
|
||||
### Fixed
|
||||
@ -163,7 +163,7 @@ New skill `Impurity`
|
||||
|
||||
- Changed skill damage multipliers
|
||||
`Blast` 100% -> 130%
|
||||
`CorruptionTick` 100% -> 80%
|
||||
`CorruptionTick` 100% -> 80%
|
||||
`Decay` 50% -> 25%
|
||||
`Heal` 100% -> 120%
|
||||
`SiphonTick` 100% -> 30%
|
||||
|
||||
@ -64,6 +64,7 @@ impl CrypSkill {
|
||||
pub enum EffectMeta {
|
||||
TickAmount(u64),
|
||||
AddedDamage(u64),
|
||||
ScatterTarget(Uuid),
|
||||
}
|
||||
|
||||
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
|
||||
@ -470,7 +471,7 @@ impl Cryp {
|
||||
.fold(self.speed.value, |acc, fx| fx.0.apply(acc, fx.1));
|
||||
return modified_speed;
|
||||
}
|
||||
|
||||
|
||||
pub fn red_life(&self) -> u64 {
|
||||
self.red_life.value
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ use failure::err_msg;
|
||||
use account::Account;
|
||||
use rpc::{GameStateParams, GameSkillParams};
|
||||
use cryp::{Cryp};
|
||||
use skill::{Skill, Effect, Cast, Resolution, Event, resolve};
|
||||
use skill::{Skill, Effect, Cast, Resolution, Event, resolution_steps};
|
||||
use player::{Player};
|
||||
use instance::{instance_game_finished, global_game_finished};
|
||||
use util::{IntPct};
|
||||
@ -133,7 +133,7 @@ impl Game {
|
||||
.collect::<Vec<Cryp>>()
|
||||
}
|
||||
|
||||
fn update_cryp(&mut self, cryp: &mut Cryp) -> &mut Game {
|
||||
pub fn update_cryp(&mut self, cryp: &mut Cryp) -> &mut Game {
|
||||
match self.players.iter_mut().find(|t| t.cryps.iter().any(|c| c.id == cryp.id)) {
|
||||
Some(player) => {
|
||||
let index = player.cryps.iter().position(|t| t.id == cryp.id).unwrap();
|
||||
@ -373,7 +373,7 @@ impl Game {
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn get_targets(&self, skill: Skill, source: &Cryp, target_cryp_id: Uuid) -> Vec<Uuid> {
|
||||
pub fn get_targets(&self, skill: Skill, source: &Cryp, target_cryp_id: Uuid) -> Vec<Uuid> {
|
||||
let target_player = self.players.iter()
|
||||
.find(|t| t.cryps.iter().any(|c| c.id == target_cryp_id))
|
||||
.unwrap();
|
||||
@ -415,19 +415,7 @@ impl Game {
|
||||
while let Some(cast) = self.stack.pop() {
|
||||
// println!("{:} casts ", cast);
|
||||
|
||||
let mut resolutions = vec![];
|
||||
let mut source = self.cryp_by_id(cast.source_cryp_id).unwrap().clone();
|
||||
|
||||
let targets = self.get_targets(cast.skill, &source, cast.target_cryp_id);
|
||||
for target_id in targets {
|
||||
let mut source = self.cryp_by_id(cast.source_cryp_id).unwrap().clone();
|
||||
let mut target = self.cryp_by_id(target_id).unwrap().clone();
|
||||
resolutions = resolve(cast.skill, &mut source, &mut target, resolutions);
|
||||
// save the clones
|
||||
self.update_cryp(&mut source);
|
||||
self.update_cryp(&mut target);
|
||||
}
|
||||
|
||||
let mut resolutions = resolution_steps(&cast, &mut self);
|
||||
resolutions.reverse();
|
||||
while let Some(resolution) = resolutions.pop() {
|
||||
self.log_resolution(cast.speed, &resolution);
|
||||
|
||||
@ -5,6 +5,33 @@ use util::{IntPct};
|
||||
use cryp::{Cryp, CrypEffect, EffectMeta, Stat};
|
||||
use vbox::{Var};
|
||||
|
||||
use game::{Game};
|
||||
|
||||
pub fn resolution_steps(cast: &Cast, game: &mut Game) -> Resolutions {
|
||||
let mut resolutions = vec![];
|
||||
|
||||
resolutions = pre_resolve(cast, game, resolutions);
|
||||
|
||||
return resolutions;
|
||||
}
|
||||
|
||||
pub fn pre_resolve(cast: &Cast, game: &mut Game, mut resolutions: Resolutions) -> Resolutions {
|
||||
let skill = cast.skill;
|
||||
let mut source = game.cryp_by_id(cast.source_cryp_id).unwrap().clone();
|
||||
|
||||
let targets = game.get_targets(cast.skill, &source, cast.target_cryp_id);
|
||||
for target_id in targets {
|
||||
let mut source = game.cryp_by_id(cast.source_cryp_id).unwrap().clone();
|
||||
let mut target = game.cryp_by_id(target_id).unwrap().clone();
|
||||
resolutions = resolve(cast.skill, &mut source, &mut target, resolutions);
|
||||
// save the clones
|
||||
game.update_cryp(&mut source);
|
||||
game.update_cryp(&mut target);
|
||||
}
|
||||
|
||||
return resolutions;
|
||||
}
|
||||
|
||||
pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutions: Vec<Resolution>) -> Resolutions {
|
||||
if let Some(disable) = source.disabled(skill) {
|
||||
resolutions.push(Resolution::new(source, target).event(Event::Disable { disable, skill }));
|
||||
@ -25,6 +52,10 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
|
||||
return resolve(skill, target, source, resolutions);
|
||||
}
|
||||
|
||||
if target.affected(Effect::Scatter) {
|
||||
resolutions = resolve(skill, target, source, resolutions);
|
||||
}
|
||||
|
||||
// match self.category() == Category::Red {
|
||||
// true => {
|
||||
// if let Some(evasion) = target.evade(*self) {
|
||||
@ -421,7 +452,7 @@ impl Effect {
|
||||
|
||||
Effect::Hostility => Category::Buff,
|
||||
|
||||
// magic
|
||||
// magic
|
||||
Effect::Impurity => Category::Buff,
|
||||
Effect::Scatter => Category::Buff,
|
||||
Effect::Invert => Category::Buff,
|
||||
@ -579,7 +610,7 @@ impl Skill {
|
||||
Skill::CorruptionTick => 80,
|
||||
Skill::DecayTick => 25,
|
||||
Skill::Riposte => 70,
|
||||
|
||||
|
||||
_ => 100,
|
||||
}
|
||||
}
|
||||
@ -986,7 +1017,7 @@ fn riposte(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill
|
||||
fn snare(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||
let snare = CrypEffect::new(Effect::Snare, skill.duration());
|
||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, snare)));
|
||||
|
||||
|
||||
let mut s_multi: u64 = 100;
|
||||
for cs in target.skills.iter() {
|
||||
s_multi += match cs.skill.category() {
|
||||
@ -1093,7 +1124,7 @@ fn decay(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill:
|
||||
let wither = CrypEffect::new(Effect::Wither, skill.duration());
|
||||
let decay = CrypEffect::new(Effect::Decay, skill.duration())
|
||||
.set_tick(Cast::new_tick(source, target, Skill::DecayTick));
|
||||
|
||||
|
||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, decay)));
|
||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, wither)));
|
||||
return decay_tick(source, target, results, Skill::DecayTick);
|
||||
@ -1180,7 +1211,7 @@ fn invert(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill:
|
||||
fn reflect(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||
let effect = CrypEffect::new(Effect::Reflect, skill.duration());
|
||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)));
|
||||
|
||||
|
||||
let blue_amount = source.blue_damage().pct(skill.multiplier());
|
||||
results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount)));
|
||||
|
||||
@ -1232,14 +1263,13 @@ fn scatter(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill
|
||||
fn silence(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||
let silence = CrypEffect::new(Effect::Silence, skill.duration());
|
||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, silence)));
|
||||
|
||||
let mut s_multi: u64 = 100;
|
||||
for cs in target.skills.iter() {
|
||||
s_multi += match cs.skill.category() {
|
||||
Category::Blue => 45,
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
|
||||
let s_multi = target.skills
|
||||
.iter()
|
||||
.fold(100, |acc, cs| match cs.skill.category() {
|
||||
Category::Blue => acc + 45,
|
||||
_ => acc,
|
||||
});
|
||||
|
||||
let amount = source.blue_damage().pct(skill.multiplier()).pct(s_multi);
|
||||
target.deal_blue_damage(skill, amount)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user