2.0.2 (#252)
* 2.0.2 mage tree Super super janky implementation of winded * Clean up breathless definition * Numerical values and archetype req update for non mage ability trees Notably excludes: Effigy attack speed Double/Triple totem multipliers more shields damage change arrow hurricane nerf don't think this includes dependencies but idk if any changed? Topology fixing still needed * Archer, Warrior and Shaman updated (mostly) * Assassin tree changes * Item db update guess this is the 2.0.2 branch now * Mage edit to match ingame * Fix misc. atree stuff that wasn't fixed yet warrior connections and positions double/triple totem implementation ragna nerf --------- Co-authored-by: hppeng <hppeng> Co-authored-by: TopHat of Pride <33451677+TopHat-of-Pride@users.noreply.github.com> Co-authored-by: aspiepuppy <emimeado@gmail.com>
This commit is contained in:
parent
2bdebda89f
commit
dc878caf1c
61077
clean.json
61077
clean.json
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
1
data/2.0.2.1/atree.json
Normal file
1
data/2.0.2.1/atree.json
Normal file
File diff suppressed because one or more lines are too long
1
data/2.0.2.1/ingreds.json
Normal file
1
data/2.0.2.1/ingreds.json
Normal file
File diff suppressed because one or more lines are too long
1
data/2.0.2.1/items.json
Normal file
1
data/2.0.2.1/items.json
Normal file
File diff suppressed because one or more lines are too long
1069
data/2.0.2.1/tomes.json
Normal file
1069
data/2.0.2.1/tomes.json
Normal file
File diff suppressed because it is too large
Load diff
6318
ingreds_clean.json
6318
ingreds_clean.json
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -302,7 +302,7 @@ function expandRecipe(recipe) {
|
|||
function idRound(id){
|
||||
rounded = Math.round(id);
|
||||
if(rounded == 0){
|
||||
return 1; //this is a hack, will need changing along w/ rest of ID system if anything changes
|
||||
return Math.sign(id); //this is a hack, will need changing along w/ rest of ID system if anything changes
|
||||
}else{
|
||||
return rounded;
|
||||
}
|
||||
|
|
|
@ -87,10 +87,10 @@ stat_scaling: {
|
|||
"slider_name": Optional[str],
|
||||
"slider_step": Optional[float],
|
||||
round: Optional[bool] // Control floor behavior. True for stats and false for slider by default
|
||||
slider_behavior: Optional[str] // One of: "merge", "modify". default: merge
|
||||
behavior: Optional[str] // One of: "merge", "modify". default: merge
|
||||
// merge: add if exist, make new part if not exist
|
||||
// modify: change existing part, by incrementing properties. do nothing if not exist
|
||||
slider_max: Optional[float] // affected by slider_behavior
|
||||
slider_max: Optional[float] // affected by behavior
|
||||
inputs: Optional[list[scaling_target]] // List of things to scale. Omit this if using slider
|
||||
|
||||
output: Optional[scaling_target | List[scaling_target]] // One of the following:
|
||||
|
@ -511,18 +511,35 @@ const atree_make_interactives = new (class extends ComputeNode {
|
|||
const slider_map = new Map();
|
||||
const button_map = new Map();
|
||||
|
||||
// first, pull out all the sliders and toggles.
|
||||
for (const [abil_id, ability] of merged_abils.entries()) {
|
||||
let to_process = [];
|
||||
for (const [abil_id, ability] of merged_abils) {
|
||||
for (const effect of ability.effects) {
|
||||
if (effect['type'] === "stat_scaling" && effect['slider'] === true) {
|
||||
const { slider_name, slider_behavior = 'merge', slider_max, slider_step } = effect;
|
||||
to_process.push([effect, abil_id, ability]);
|
||||
}
|
||||
if (effect['type'] === "raw_stat" && effect['toggle']) {
|
||||
to_process.push([effect, abil_id, ability]);
|
||||
}
|
||||
}
|
||||
}
|
||||
let unprocessed = [];
|
||||
// first, pull out all the sliders and toggles.
|
||||
let k = to_process.length;
|
||||
for (let i = 0; i < k; ++i) {
|
||||
for (const [effect, abil_id, ability] of to_process) {
|
||||
if (effect['type'] === "stat_scaling" && effect['slider'] === true) {
|
||||
const { slider_name, behavior = 'merge', slider_max, slider_step } = effect;
|
||||
if (slider_map.has(slider_name)) {
|
||||
if (slider_max !== undefined) {
|
||||
const slider_info = slider_map.get(slider_name);
|
||||
slider_info.max += slider_max;
|
||||
}
|
||||
else {
|
||||
unprocessed.push([effect, abil_id, ability]);
|
||||
}
|
||||
}
|
||||
else if (slider_behavior === 'merge') {
|
||||
else if (behavior === 'merge') {
|
||||
console.log(effect);
|
||||
slider_map.set(slider_name, {
|
||||
label_name: slider_name+' ('+ability.display_name+')',
|
||||
max: slider_max,
|
||||
|
@ -532,6 +549,9 @@ const atree_make_interactives = new (class extends ComputeNode {
|
|||
abil: ability
|
||||
});
|
||||
}
|
||||
else {
|
||||
unprocessed.push([effect, abil_id, ability]);
|
||||
}
|
||||
}
|
||||
if (effect['type'] === "raw_stat" && effect['toggle']) {
|
||||
const { toggle: toggle_name } = effect;
|
||||
|
@ -540,6 +560,9 @@ const atree_make_interactives = new (class extends ComputeNode {
|
|||
});
|
||||
}
|
||||
}
|
||||
if (unprocessed.length == to_process.length) { break; }
|
||||
to_process = unprocessed;
|
||||
unprocessed = [];
|
||||
}
|
||||
// next, render the sliders and toggles onto the abilities.
|
||||
for (const [slider_name, slider_info] of slider_map.entries()) {
|
||||
|
@ -623,9 +646,13 @@ const atree_scaling = new (class extends ComputeNode {
|
|||
continue;
|
||||
case 'stat_scaling':
|
||||
let total = 0;
|
||||
const {slider = false, scaling = [0]} = effect;
|
||||
const {slider = false, scaling = [0], behavior="merge"} = effect;
|
||||
let { positive = true, round = true } = effect;
|
||||
if (slider) {
|
||||
if (behavior == "modify" && !slider_map.has(effect.slider_name)) {
|
||||
// Dangerous control flow.. early continue
|
||||
continue;
|
||||
}
|
||||
const slider_val = slider_map.get(effect.slider_name).slider.value;
|
||||
total = parseInt(slider_val) * scaling[0];
|
||||
round = false;
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -29,7 +29,8 @@ function parsePowdering(powder_info) {
|
|||
let atree_data = null;
|
||||
const wynn_version_names = [
|
||||
'2.0.1.1',
|
||||
'2.0.1.2'
|
||||
'2.0.1.2',
|
||||
'2.0.2.1'
|
||||
];
|
||||
const WYNN_VERSION_LATEST = wynn_version_names.length - 1;
|
||||
// Default to the newest version.
|
||||
|
|
|
@ -17,7 +17,7 @@ let armor_powder_node = new (class extends ComputeNode {
|
|||
}
|
||||
})();
|
||||
|
||||
const damageMultipliers = new Map([ ["totem", 0.2], ["warscream", 0.0], ["ragnarokkr", 0.30], ["fortitude", 0.60], ["radiance", 0.0] ]);
|
||||
const damageMultipliers = new Map([ ["totem", 0.2], ["warscream", 0.0], ["ragnarokkr", 0.20], ["fortitude", 0.60], ["radiance", 0.0] ]);
|
||||
|
||||
let boosts_node = new (class extends ComputeNode {
|
||||
constructor() { super('builder-boost-input'); }
|
||||
|
|
|
@ -67,6 +67,9 @@ function calculateSpellDamage(stats, weapon, _conversions, use_spell_damage, ign
|
|||
// 2.1. First, apply neutral conversion (scale weapon damage). Keep track of total weapon damage here.
|
||||
let damages = [];
|
||||
const neutral_convert = conversions[0] / 100;
|
||||
if (neutral_convert == 0) {
|
||||
present = [false, false, false, false, false, false]
|
||||
}
|
||||
let weapon_min = 0;
|
||||
let weapon_max = 0;
|
||||
for (const damage of weapon_damages) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const DB_VERSION = 121;
|
||||
const DB_VERSION = 122;
|
||||
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.jsA
|
||||
|
||||
let db;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const ING_DB_VERSION = 19;
|
||||
const ING_DB_VERSION = 20;
|
||||
|
||||
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.js
|
||||
|
||||
|
|
|
@ -15,4 +15,4 @@ if __name__ == "__main__":
|
|||
args = parser.parse_args()
|
||||
|
||||
infile, outfile = args.infile, args.outfile
|
||||
json.dump(json.load(open(infile)), open(outfile, "w"))
|
||||
json.dump(json.load(open(infile)), open(outfile, "w"), ensure_ascii=False, separators=(',', ':'))
|
||||
|
|
|
@ -3794,5 +3794,9 @@
|
|||
"Blue Wynnter Sweater": 3792,
|
||||
"Green Wynnter Sweater": 3793,
|
||||
"Purple Wynnter Sweater": 3794,
|
||||
"Red Wynnter Sweater": 3795
|
||||
"Red Wynnter Sweater": 3795,
|
||||
"Athanasia": 3796,
|
||||
"Provenance": 3797,
|
||||
"Veneration": 3798,
|
||||
"Reckoning": 3799
|
||||
}
|
|
@ -221,4 +221,4 @@ with open("ing_map.json", "w") as ing_mapfile:
|
|||
|
||||
#save ings
|
||||
with open(outfile, "w") as out_file:
|
||||
json.dump(ings, out_file)
|
||||
json.dump(ings, out_file, ensure_ascii=False, separators=(',', ':'))
|
||||
|
|
|
@ -96,5 +96,5 @@ with open("id_map.json","w") as id_mapfile:
|
|||
|
||||
#write the data back to the outfile
|
||||
with open(outfile, "w+") as out_file:
|
||||
json.dump(data, out_file)
|
||||
json.dump(data, out_file, ensure_ascii=False, separators=(',', ':'))
|
||||
|
||||
|
|
Loading…
Reference in a new issue