Skip to content
8 changes: 8 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -672,8 +672,10 @@ fn default_i32_1() -> i32 {
pub struct FiringData {
pub damage: f64,
pub crit_mult: f64,
pub melee: f64,
pub pve_damage: f64,
pub pve_crit_mult: f64,
pub pve_melee: f64,
pub burst_delay: f64,
pub inner_burst_delay: f64,
#[serde(default)]
Expand All @@ -691,8 +693,10 @@ impl From<SubFamJson> for FiringData {
FiringData {
damage: value.damage,
crit_mult: (value.crit_mult) / 51.0 + 1.5,
melee: value.melee,
pve_damage: value.pve_damage,
pve_crit_mult: (value.pve_crit_mult) / 51.0 + 1.5,
pve_melee: value.pve_melee,
burst_delay: value.burst_delay / 30.0,
inner_burst_delay: value.inner_burst_delay / 30.0,
burst_size: value.burst_size,
Expand Down Expand Up @@ -778,8 +782,12 @@ struct RangeJson {
struct SubFamJson {
damage: f64,
crit_mult: f64,
#[serde(default)]
melee: f64,
pve_damage: f64,
pve_crit_mult: f64,
#[serde(default)]
pve_melee: f64,
burst_delay: f64,
#[serde(default = "default_i32_1")]
burst_size: i32,
Expand Down
13 changes: 7 additions & 6 deletions build_resources/weapon_formulas.json
Original file line number Diff line number Diff line change
Expand Up @@ -1235,7 +1235,7 @@
"2898674462": {"name": "Vexcaliber", "cat": "default", "subFam": "Lightweight", "magProf": "default", "pve": 1.25},
"2898674457": {"name": "Vexcaliber", "cat": "default", "subFam": "Vexcaliber", "magProf": "default", "pve": 1.25},
"1956005708": {"name": "Rapid-Fire Glaive", "cat": "default", "subFam": "Lightweight", "magProf": "default", "pve": 1.25},
"1207608520": {"name": "Winterbite", "cat": "zero", "subFam": "zero", "magProf": "winterbite"},
"1207608520": {"name": "Winterbite", "cat": "zero", "subFam": "Winterbite", "magProf": "winterbite"},
"cat": {
"default": {
"range": {"vpp_start": 0.0546,"offset_start": 15.0,"vpp_end": 0.198,"offset_end": 30.33, "floor_percent": 0.33},
Expand All @@ -1259,11 +1259,12 @@
}
},
"subFam": {
"Lightweight": {"damage":120.769, "crit_mult":-25.5, "pve_damage":108.07, "pve_crit_mult":-25.5, "burst_delay":22.0, "burst_size":1, "inner_burst_delay":0},
"Aggressive": {"damage":147.538, "crit_mult":-25.5, "pve_damage":133.75, "pve_crit_mult":-25.5, "burst_delay":30.0, "burst_size":1, "inner_burst_delay":0},
"Adaptive": {"damage":136.462, "crit_mult":-25.5, "pve_damage":120.91, "pve_crit_mult":-25.5, "burst_delay":27.0, "burst_size":1, "inner_burst_delay":0},
"Vexcaliber": {"damage":32.962, "crit_mult":-25.5, "pve_damage":30.87, "pve_crit_mult":-25.5, "burst_delay":22.0, "burst_size":5, "inner_burst_delay":0, "one_ammo":true},
"zero": {"damage":0.0, "crit_mult":0.0, "pve_damage":0.0, "pve_crit_mult":0.0, "burst_delay":0.0, "burst_size":1, "inner_burst_delay":0}
"Lightweight": {"damage":120.899, "crit_mult":-25.5, "melee": 84, "pve_damage":107.801, "pve_crit_mult":-25.5, "pve_melee": 70, "burst_delay":22.0, "burst_size":1, "inner_burst_delay":0},
"Aggressive": {"damage":147.457, "crit_mult":-25.5, "melee": 84, "pve_damage":131.483, "pve_crit_mult":-25.5, "pve_melee": 70, "burst_delay":30.0, "burst_size":1, "inner_burst_delay":0},
"Adaptive": {"damage":136.577, "crit_mult":-25.5, "melee": 84, "pve_damage":121.781, "pve_crit_mult":-25.5, "pve_melee": 70, "burst_delay":27.0, "burst_size":1, "inner_burst_delay":0},
"Vexcaliber": {"damage":33.231, "crit_mult":-25.5, "melee": 84, "pve_damage":36.596, "pve_crit_mult":-25.5, "pve_melee": 70, "burst_delay":22.0, "burst_size":5, "inner_burst_delay":0, "one_ammo":true},
"Winterbite": {"damage":570, "crit_mult":-25.5, "melee": 84, "pve_damage":508.25, "pve_crit_mult":-25.5, "pve_melee": 70, "burst_delay":30.0, "burst_size":1, "inner_burst_delay":0},
"zero": {"damage":0.0, "crit_mult":0.0, "melee": 0.0, "pve_damage":0.0, "pve_crit_mult":0.0, "pve_melee": 0.0, "burst_delay":0.0, "burst_size":1, "inner_burst_delay":0}

},
"magProf": {
Expand Down
32 changes: 32 additions & 0 deletions src/perks/buff_perks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -398,4 +398,36 @@ pub fn buff_perks() {
}
}),
);
add_dmr(
Perks::BurningFists,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
if _input.value == 0 {
return DamageModifierResponse::default();
}
let buffs = match _input.value {
1 => (1.0, 1.0, 1.55, 1.4),
2 => (1.2, 1.0, 2.10, 1.8),
3 => (1.25, 1.2, 2.65, 2.2),
4 => (1.3, 1.25, 3.2, 2.6),
5 => (1.35, 1.25, 3.75, 3.0),
_ => (1.35, 1.25, 3.75, 3.0)
};
let weapon_buff = if _input.pvp {
emp_buff(_input.cached_data, buffs.1)
} else {
emp_buff(_input.cached_data, buffs.0)
};
let melee_buff = if _input.calc_data.weapon_type == &WeaponType::GLAIVE {
buffs.3
} else {
buffs.2
};
DamageModifierResponse {
impact_dmg_scale: weapon_buff,
explosive_dmg_scale: weapon_buff,
melee_dmg_scale: melee_buff,
..Default::default()
}
}),
);
}
34 changes: 33 additions & 1 deletion src/perks/exotic_armor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -544,5 +544,37 @@ pub fn exotic_armor() {
}
stats
}),
)
);
add_dmr(
Perks::TritonVice,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
if _input.value == 0 || _input.calc_data.weapon_type != &WeaponType::GLAIVE {
return DamageModifierResponse::default();
}
DamageModifierResponse {
melee_dmg_scale: 2.0,
..Default::default()
}
}),
);
add_dmr(
Perks::WarlordsSigil,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
if _input.value == 0 {
return DamageModifierResponse::default();
}
let melee_buff = match _input.value {
1 => 1.55,
2 => 2.10,
3 => 2.65,
4 => 3.2,
5 => 3.75,
_ => 3.75
};
DamageModifierResponse {
melee_dmg_scale: melee_buff,
..Default::default()
}
}),
);
}
41 changes: 38 additions & 3 deletions src/perks/exotic_perks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ use super::{
add_dmr, add_edr, add_epr, add_fmr, add_hmr, add_mmr, add_rmr, add_rr, add_rsmr, add_sbr,
add_vmr, clamp,
lib::{
CalculationInput, DamageModifierResponse, ExtraDamageResponse, FiringModifierResponse,
HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse,
RangeModifierResponse, RefundResponse, ReloadModifierResponse, ReloadOverrideResponse,
CalculationInput, DamageModifierResponse, ExplosivePercentResponse, ExtraDamageResponse,
FiringModifierResponse, HandlingModifierResponse, InventoryModifierResponse,
MagazineModifierResponse, RangeModifierResponse, RefundResponse, ReloadModifierResponse,
ReloadOverrideResponse,
},
ModifierResponseInput, Perks,
};
Expand Down Expand Up @@ -1232,6 +1233,40 @@ pub fn exotic_perks() {
}),
);

add_dmr(
Perks::PerpetualLoophole,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
if _input.value == 0 {
return DamageModifierResponse::default();
}
DamageModifierResponse {
melee_dmg_scale: 1.2,
..Default::default()
}
}),
);
add_epr(
Perks::BigFrigidGlaive,
Box::new(|_input: ModifierResponseInput| -> ExplosivePercentResponse {
ExplosivePercentResponse {
percent: 1.0,
..Default::default()
}
}),
);
add_dmr(
Perks::WeightedEdge,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
if _input.value == 0 {
return DamageModifierResponse::default();
}
DamageModifierResponse {
melee_dmg_scale: 1.5,
..Default::default()
}
}),
);

add_dmr(
Perks::InverseRelationship,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
Expand Down
5 changes: 4 additions & 1 deletion src/perks/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,13 +141,15 @@ pub struct DamageModifierResponse {
pub impact_dmg_scale: f64,
pub explosive_dmg_scale: f64,
pub crit_scale: f64,
pub melee_dmg_scale: f64,
}
impl Default for DamageModifierResponse {
fn default() -> Self {
Self {
impact_dmg_scale: 1.0,
explosive_dmg_scale: 1.0,
crit_scale: 1.0,
melee_dmg_scale: 1.0,
}
}
}
Expand All @@ -157,7 +159,7 @@ impl DamageModifierResponse {
Self {
impact_dmg_scale: modifier,
explosive_dmg_scale: modifier,
// pending: melee_dmg_scale
melee_dmg_scale: modifier,
..Default::default()
}
}
Expand Down Expand Up @@ -423,4 +425,5 @@ pub struct DamageProfile {
pub explosion_dmg: f64,
pub crit_mult: f64,
pub damage_delay: f64,
pub melee_dmg: f64,
}
6 changes: 6 additions & 0 deletions src/perks/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ pub enum Perks {
TritonVice = 187957397,
GlacialGuard = 185514250,
DoomFang = 1155472387,
BurningFists = 384759955,
WarlordsSigil = 2731901709,

//parts
ImpactCasing = 3796465595,
Expand Down Expand Up @@ -446,6 +448,7 @@ pub enum Perks {
Tempering = 362132290,
ThreadOfAscent = 4208512216,
Amplified = 880704824,
BannerOfWar = 988980154,

//kinetic exotic
CranialSpike = 1319823571,
Expand Down Expand Up @@ -513,6 +516,7 @@ pub enum Perks {
Unrepentant = 2641107734,
ArcConductor = 2516532331,
VoidLeech = 3441203855,
PerpetualLoophole = 2171805903,
InverseRelationship = 1833111001,
Spindle = 1180907940,
TheRightChoice = 34498892,
Expand All @@ -538,6 +542,8 @@ pub enum Perks {
TargetAquired = 939227542,
TractorCannon = 1210807262,
MarksmanSights = 1408087975,
BigFrigidGlaive = 1207608520,
WeightedEdge = 75282108,

#[num_enum(default)]
Ignore = 69420,
Expand Down
15 changes: 15 additions & 0 deletions src/perks/other_perks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,21 @@ pub fn other_perks() {
}
}),
);

add_dmr(
Perks::BannerOfWar,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
if _input.value == 0 {
return DamageModifierResponse::default();
}
// TODO for glaives handle syntho/wormgod reducing this to 1.125/1.05 respectively
DamageModifierResponse {
melee_dmg_scale: 1.25,
..Default::default()
}
}),
);

add_dmr(
Perks::SupportFrame,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
Expand Down
6 changes: 6 additions & 0 deletions src/perks/perk_options_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ fn hash_to_perk_option_data(_hash: u32) -> Option<PerkOptionData> {
Perks::HeatRises => Some(PerkOptionData::toggle()),
Perks::FlowState => Some(PerkOptionData::toggle()),
Perks::ThreadOfAscent => Some(PerkOptionData::toggle()),
Perks::BannerOfWar => Some(PerkOptionData::stacking(4)),
Perks::WellOfRadiance => Some(PerkOptionData::static_()),
Perks::Amplified => Some(PerkOptionData::static_()),
Perks::Radiant => Some(PerkOptionData::static_()),
Expand All @@ -407,6 +408,9 @@ fn hash_to_perk_option_data(_hash: u32) -> Option<PerkOptionData> {
Perks::Unrepentant => Some(PerkOptionData::toggle()),
Perks::ArcConductor => Some(PerkOptionData::toggle()),
Perks::VoidLeech => Some(PerkOptionData::toggle()),
Perks::PerpetualLoophole => Some(PerkOptionData::toggle()),
Perks::BigFrigidGlaive => Some(PerkOptionData::static_()),
Perks::WeightedEdge => Some(PerkOptionData::toggle()),
Perks::InverseRelationship => Some(PerkOptionData::stacking(3)),
Perks::Spindle => Some(PerkOptionData::stacking(25)),
Perks::TheRightChoice => Some(PerkOptionData::static_()),
Expand Down Expand Up @@ -450,6 +454,8 @@ fn hash_to_perk_option_data(_hash: u32) -> Option<PerkOptionData> {
Perks::StringTheory => Some(PerkOptionData::static_()),
Perks::Judgment => Some(PerkOptionData::toggle()),
Perks::DoomFang => Some(PerkOptionData::stacking(4)),
Perks::BurningFists => Some(PerkOptionData::stacking(5)),
Perks::WarlordsSigil => Some(PerkOptionData::stacking(5)),

//misc
Perks::UmbralSharpening => Some(PerkOptionData::stacking(5)),
Expand Down
13 changes: 13 additions & 0 deletions src/perks/year_5_perks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -543,4 +543,17 @@ pub fn year_5_perks() {
}
}),
);

add_dmr(
Perks::CloseToMelee,
Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {
if _input.value == 0 {
return DamageModifierResponse::default();
}
DamageModifierResponse {
melee_dmg_scale: 1.3,
..Default::default()
}
}),
);
}
6 changes: 6 additions & 0 deletions src/types/js_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,13 +237,17 @@ pub struct JsFiringResponse {
pub pvp_explosion_damage: f64,
#[wasm_bindgen(js_name = "pvpCritMult", readonly)]
pub pvp_crit_mult: f64,
#[wasm_bindgen(js_name = "pvpMeleeDamage", readonly)]
pub pvp_melee_damage: f64,

#[wasm_bindgen(js_name = "pveImpactDamage", readonly)]
pub pve_impact_damage: f64,
#[wasm_bindgen(js_name = "pveExplosionDamage", readonly)]
pub pve_explosion_damage: f64,
#[wasm_bindgen(js_name = "pveCritMult", readonly)]
pub pve_crit_mult: f64,
#[wasm_bindgen(js_name = "pveMeleeDamage", readonly)]
pub pve_melee_damage: f64,

#[wasm_bindgen(js_name = "burstDelay", readonly)]
pub burst_delay: f64,
Expand All @@ -262,9 +266,11 @@ impl From<FiringResponse> for JsFiringResponse {
pvp_impact_damage: firing.pvp_impact_damage,
pvp_explosion_damage: firing.pvp_explosion_damage,
pvp_crit_mult: firing.pvp_crit_mult,
pvp_melee_damage: firing.pvp_melee_damage,
pve_impact_damage: firing.pve_impact_damage,
pve_explosion_damage: firing.pve_explosion_damage,
pve_crit_mult: firing.pve_crit_mult,
pve_melee_damage: firing.pve_melee_damage,
burst_delay: firing.burst_delay,
inner_burst_delay: firing.inner_burst_delay,
burst_size: firing.burst_size,
Expand Down
5 changes: 5 additions & 0 deletions src/types/rs_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ pub struct WeaponPath(pub u32, pub u32);
pub struct FiringData {
pub damage: f64,
pub crit_mult: f64,
pub melee: f64,
pub pve_damage: f64,
pub pve_crit_mult: f64,
pub pve_melee: f64,
pub burst_delay: f64,
pub inner_burst_delay: f64,
pub burst_size: i32,
Expand Down Expand Up @@ -196,10 +198,12 @@ pub struct FiringResponse {
pub pvp_impact_damage: f64,
pub pvp_explosion_damage: f64,
pub pvp_crit_mult: f64,
pub pvp_melee_damage: f64,

pub pve_impact_damage: f64,
pub pve_explosion_damage: f64,
pub pve_crit_mult: f64,
pub pve_melee_damage: f64,

pub burst_delay: f64,
pub inner_burst_delay: f64,
Expand Down Expand Up @@ -227,5 +231,6 @@ impl FiringResponse {
);
self.pve_impact_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult;
self.pve_explosion_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult;
self.pve_melee_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult;
}
}
Loading
Loading