Merge branch 'atree' into atree_active_box

This commit is contained in:
hppeng 2022-07-08 17:29:40 -07:00
commit c5191cfe99
10 changed files with 1700 additions and 1486 deletions

3028
clean.json

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -8,7 +8,7 @@ The game, of course
Additional Contributors, in no particular order:
- Kiocifer (Icons!)
- IncinerateMe (helping transition to 1.20.3 / CI helper)
- puppy (wynn2 ability tree help)
- dog (wynn2 ability tree help)
- SockMower (ability tree encode/decode optimization)
- ITechnically (coding emotional support / misc)
- touhoku (best IM)

View file

@ -468,22 +468,24 @@ const atree_collect_spells = new (class extends ComputeNode {
let ret_spells = new Map();
for (const [abil_id, abil] of atree_merged.entries()) {
// TODO: Possibly, make a better way for detecting "spell abilities"?
if (abil.effects.length == 0) { continue; }
let ret_spell = deepcopy(abil.effects[0]); // NOTE: do not mutate results of previous steps!
let has_spell_def = false;
for (const effect of abil.effects) {
if (effect.type === 'replace_spell') {
has_spell_def = true;
// replace_spell just replaces all (defined) aspects.
for (const key in effect) {
ret_spell[key] = deepcopy(effect[key]);
const ret_spell = ret_spells.get(effect.base_spell);
if (ret_spell) {
// NOTE: do not mutate results of previous steps!
for (const key in effect) {
ret_spell[key] = deepcopy(effect[key]);
}
}
else {
ret_spells.set(effect.base_spell, deepcopy(effect));
}
}
}
if (!has_spell_def) { continue; }
}
const base_spell_id = ret_spell.base_spell;
for (const [abil_id, abil] of atree_merged.entries()) {
for (const effect of abil.effects) {
switch (effect.type) {
case 'replace_spell':
@ -491,7 +493,7 @@ const atree_collect_spells = new (class extends ComputeNode {
continue;
case 'add_spell_prop': {
const { base_spell, target_part = null, cost = 0, behavior = 'merge'} = effect;
if (base_spell !== base_spell_id) { continue; } // TODO: redundant? if we assume abils only affect one spell
const ret_spell = ret_spells.get(base_spell);
// TODO: unjankify this... if ('cost' in ret_spell) { ret_spell.cost += cost; }
if (target_part === null) {
@ -513,7 +515,7 @@ const atree_collect_spells = new (class extends ComputeNode {
for (const [idx, v] of Object.entries(effect.hits)) { // looks kinda similar to multipliers case... hmm... can we unify all of these three? (make healpower a list)
if (idx in part.hits) { part.hits[idx] += v; }
else { part.hits[idx] = v; }
}
}
}
else {
throw "uhh invalid spell add effect";
@ -534,7 +536,7 @@ const atree_collect_spells = new (class extends ComputeNode {
}
case 'convert_spell_conv':
const { base_spell, target_part, conversion } = effect;
if (base_spell !== base_spell_id) { continue; } // TODO: redundant? if we assume abils only affect one spell
const ret_spell = ret_spells.get(base_spell);
const elem_idx = damageClasses.indexOf(conversion);
let filter = target_part === 'all';
for (let part of ret_spell.parts) { // TODO: replace with Map? to avoid this linear search... idk prolly good since its not more verbose to type in json
@ -553,7 +555,6 @@ const atree_collect_spells = new (class extends ComputeNode {
continue;
}
}
ret_spells.set(base_spell_id, ret_spell);
}
return ret_spells;
}

View file

@ -341,7 +341,6 @@ const atrees = {
"desc": "When you hit the ground with Arrow Bomb, leave a Trap that damages enemies. (Max 2 Traps)",
"archetype": "Trapper",
"archetype_req": 2,
"base_abil": "Arrow Bomb",
"parents": ["Bryophyte Roots"],
"dependencies": [],
"blockers": [],
@ -357,10 +356,17 @@ const atrees = {
},
"effects": [
{
"type": "add_spell_prop",
"base_spell": 3,
"target_part": "Basaltic Trap",
"multipliers": [140, 30, 0, 0, 30, 0]
"type": "replace_spell",
"name": "Basaltic Trap",
"base_spell": 7,
"display": "Trap Damage",
"parts": [
{
"name": "Trap Damage",
"type": "damage",
"multipliers": [140, 30, 0, 0, 30, 0]
}
]
}
]
},
@ -581,7 +587,7 @@ const atrees = {
"desc": "Your Traps will give you 2.85 Mana per second when you stay close to them.",
"archetype": "Trapper",
"archetype_req": 5,
"base_abil": "Arrow Bomb",
"base_abil": "Basaltic Trap",
"parents": ["More Traps", "Better Arrow Shield"],
"dependencies": [],
"blockers": [],
@ -794,6 +800,7 @@ const atrees = {
"desc": "Your Traps will be connected by a rope that deals damage to enemies every 0.2s.",
"archetype": "Trapper",
"archetype_req": 0,
"base_abil": "Basaltic Trap",
"parents": ["Grape Bomb"],
"dependencies": ["Basaltic Trap"],
"blockers": [],
@ -804,20 +811,16 @@ const atrees = {
},
"effects": [
{
"type": "replace_spell",
"name": "Tangled Traps",
"base_spell": 7,
"display": "DPS",
"parts": [
{
"name": "Damage Tick",
"multipliers": [20, 0, 0, 0, 0, 20]
},
{
"name": "DPS",
"hits": { "Damage Tick": 5 }
}
]
"type": "add_spell_prop",
"base_spell": 7,
"target_part": "Line Damage Tick",
"multipliers": [20, 0, 0, 0, 0, 20]
},
{
"type": "add_spell_prop",
"base_spell": 7,
"target_part": "DPS",
"hits": { "Line Damage Tick": 5 }
}
]
},
@ -874,7 +877,7 @@ const atrees = {
"desc": "Allow you to place +6 Traps, but with reduced damage and range.",
"archetype": "Trapper",
"archetype_req": 10,
"base_abil": "Arrow Bomb",
"base_abil": "Basaltic Trap",
"parents": ["Grape Bomb", "Cheaper Arrow Bomb (2)"],
"dependencies": ["Basaltic Trap"],
"blockers": [],
@ -884,8 +887,8 @@ const atrees = {
"effects": [
{
"type": "add_spell_prop",
"base_spell": 3,
"target_part": "Basaltic Trap",
"base_spell": 8,
"target_part": "Trap Damage",
"cost": 0,
"multipliers": [-80, 0, 0, 0, 0, 0]
},
@ -1262,7 +1265,7 @@ const atrees = {
"desc": "Increase the maximum amount of active Traps you can have by +2.",
"archetype": "Trapper",
"archetype_req": 0,
"base_abil": "Arrow Bomb",
"base_abil": "Basaltic Trap",
"parents": ["Bouncing Bomb"],
"dependencies": ["Basaltic Trap"],
"blockers": [],
@ -1783,7 +1786,7 @@ const atrees = {
"desc": "Your Traps will deal +20% more damage for every second they are active (Max +80%)",
"archetype": "Trapper",
"archetype_req": 0,
"base_abil": "Arrow Bomb",
"base_abil": "Basaltic Trap",
"parents": ["More Shields"],
"dependencies": ["Basaltic Trap"],
"blockers": [],
@ -1814,7 +1817,7 @@ const atrees = {
"desc": "Add +80% Max Damage to Patient Hunter",
"archetype": "Trapper",
"archetype_req": 0,
"base_abil": "Arrow Bomb",
"base_abil": "Basaltic Trap",
"parents": ["Grape Bomb"],
"dependencies": ["Patient Hunter"],
"blockers": [],

File diff suppressed because one or more lines are too long

View file

@ -945,7 +945,7 @@ class SkillPointSetterNode extends ComputeNode {
class SumNumberInputNode extends InputNode {
compute_func(input_map) {
let value = this.input_field.value;
if (value === "") { value = 0; }
if (value === "") { value = "0"; }
let input_num = 0;
if (value.includes("+")) {

View file

@ -1,4 +1,4 @@
const DB_VERSION = 93;
const DB_VERSION = 94;
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.jsA
let db;

View file

@ -19,5 +19,62 @@
{"name":"Breakthrough","type":"bracelet","level":105,"tier":"Fabled","majorIds":[],"intelligence":45,"agility":45,"strengthPoints":-4,"dexterityPoints":-4,"defensePoints":-6,"earthDefense":-45,"thunderDefense":-45,"fireDefense":-30,"sdPct-base":13,"sdRaw-base":75,"ms-base":6,"spRaw2-base":-4,"category":"accessory","displayName":"Breakthrough","spellDamage":13,"spellDamageRaw":75,"manaSteal":6,"spellCostRaw2":-4,"identified":false},
{"name":"Detachment","type":"bracelet","level":105,"tier":"Fabled","majorIds":[],"dexterity":55,"agility":60,"thunderDefense":60,"airDefense":60,"mdRaw-base":-85,"sdRaw-base":-65,"spd-base":13,"spPct4-base":-13,"category":"accessory","displayName":"Detachment","damageBonusRaw":-85,"spellDamageRaw":-65,"speed":13,"spellCostPct4":-13,"identified":false},
{"name":"Exhibition","type":"necklace","level":105,"tier":"Fabled","majorIds":[],"intelligence":80,"earthDefense":-30,"thunderDefense":-30,"waterDefense":60,"fireDefense":-30,"airDefense":-30,"mr-base":-4,"spRaw1-base":-2,"spRaw2-base":-2,"spRaw3-base":-2,"spRaw4-base":-2,"category":"accessory","displayName":"Exhibition","manaRegen":-4,"spellCostRaw1":-2,"spellCostRaw2":-2,"spellCostRaw3":-2,"spellCostRaw4":-2,"identified":false},
{"name":"Simulacrum","type":"necklace","level":105,"tier":"Fabled","majorIds":[],"strength":55,"defense":45,"health":-800,"earthDefense":-70,"fireDefense":-90,"sdRaw-base":150,"hprRaw-base":-150,"mr-base":5,"spd-base":8,"category":"accessory","displayName":"Simulacrum","spellDamageRaw":150,"healthRegenRaw":-150,"manaRegen":5,"speed":8,"identified":false}
{"name":"Simulacrum","type":"necklace","level":105,"tier":"Fabled","majorIds":[],"strength":55,"defense":45,"health":-800,"earthDefense":-70,"fireDefense":-90,"sdRaw-base":150,"hprRaw-base":-150,"mr-base":5,"spd-base":8,"category":"accessory","displayName":"Simulacrum","spellDamageRaw":150,"healthRegenRaw":-150,"manaRegen":5,"speed":8,"identified":false},
{"name":"Medeis","type":"chestplate","level":100,"tier":"Unique","sockets":3,"majorIds":[],"dexterity":40,"intelligence":40,"defense":40,"dexterityPoints":10,"intelligencePoints":10,"defensePoints":10,"health":2950,"earthDefense":-100,"thunderDefense":75,"waterDefense":75,"fireDefense":75,"airDefense":-100,"tDamPct-base":8,"wDamPct-base":8,"fDamPct-base":8,"sdPct-base":8,"category":"armor","displayName":"Medeis","bonusEarthDamage":-75,"bonusThunderDamage":8,"bonusWaterDamage":8,"bonusFireDamage":8,"bonusAirDamage":-75,"spellDamage":8,"identified":false},
{"name":"Roulette","type":"dagger","level":79,"tier":"Rare","majorIds":[],"dexterity":40,"dexterityPoints":8,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-58","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_FAST","category":"weapon","displayName":"Roulette","basedps":29,"bonusThunderDamage":888,"xpBonus":8,"lootBonus":8,"identified":false},
{"name":"Prowess","type":"bracelet","level":100,"tier":"Legendary","majorIds":[],"quest":"The Qira Hive","strengthPoints":4,"dexterityPoints":4,"intelligencePoints":4,"defensePoints":4,"agilityPoints":4,"health":425,"category":"accessory","displayName":"Prowess","identified":true},
{"name":"Caesura","type":"helmet","level":93,"tier":"Unique","sockets":2,"majorIds":[],"strength":45,"dexterity":60,"intelligence":30,"strengthPoints":10,"intelligencePoints":15,"health":2450,"earthDefense":100,"thunderDefense":100,"waterDefense":-250,"category":"armor","displayName":"Caesura","bonusEarthDamage":25,"bonusThunderDamage":25,"spellDamage":10,"spellDamageRaw":231,"manaRegen":-15,"manaSteal":-15,"identified":false},
{"name":"Gigabyte","type":"necklace","level":93,"tier":"Legendary","strengthPoints":4,"dexterityPoints":4,"intelligencePoints":4,"defensePoints":4,"agilityPoints":4,"health":-512,"mr-base":-4,"identified":true,"category":"accessory","displayName":"Gigabyte","healthRegenRaw":48,"manaRegen":-4,"thorns":8,"speed":8},
{"name":"Pro Tempore","type":"boots","level":88,"tier":"Unique","sockets":4,"majorIds":[],"dexterity":40,"intelligence":50,"intelligencePoints":10,"health":2350,"thunderDefense":-50,"waterDefense":-50,"sdRaw-base":104,"category":"armor","displayName":"Pro Tempore","spellDamage":20,"spellDamageRaw":104,"manaRegen":10,"manaSteal":-15,"lifeSteal":165,"identified":false},
{"name":"Orange Lily","type":"bow","level":96,"tier":"Legendary","sockets":3,"strength":50,"intelligence":60,"damage":"75-140","earthDamage":"165-235","thunderDamage":"0-0","waterDamage":"165-235","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SLOW","identified":true,"category":"weapon","displayName":"Orange Lily","basedps":507.5,"bonusEarthDamage":20,"bonusWaterDamage":20,"bonusAirDamage":-150,"bonusAirDefense":-100,"manaRegen":10,"spellCostRaw3":-5,"spellCostRaw4":50},
{"name":"Brainwash","type":"helmet","level":96,"tier":"Rare","majorIds":[],"strength":40,"dexterity":70,"strengthPoints":13,"intelligencePoints":-50,"health":2800,"earthDefense":70,"thunderDefense":100,"waterDefense":-220,"mr-base":10,"ms-base":15,"category":"armor","displayName":"Brainwash","bonusThunderDamage":15,"bonusWaterDamage":-30,"spellDamage":10,"spellDamageRaw":190,"healthRegen":-40,"manaRegen":10,"manaSteal":15,"identified":false},
{"name":"Second Wind","type":"leggings","level":83,"tier":"Fabled","sockets":3,"majorIds":[],"defense":65,"agility":40,"agilityPoints":20,"health":6325,"earthDefense":-350,"thunderDefense":-350,"fireDefense":120,"airDefense":120,"ls-base":-475,"category":"armor","displayName":"Second Wind","attackSpeedBonus":1,"healthRegen":-30,"lifeSteal":-475,"speed":20,"identified":false},
{"name":"Cumulonimbus","type":"helmet","level":94,"tier":"Rare","sockets":3,"majorIds":[],"dexterity":30,"intelligence":30,"agility":30,"dexterityPoints":10,"intelligencePoints":10,"agilityPoints":10,"health":1800,"thunderDefense":70,"waterDefense":70,"airDefense":70,"sdPct-base":15,"category":"armor","displayName":"Cumulonimbus","bonusThunderDamage":10,"bonusWaterDamage":10,"bonusAirDamage":10,"spellDamage":15,"speed":25,"identified":false},
{"name":"Morrowind","type":"wand","level":96,"tier":"Legendary","sockets":3,"majorIds":[],"agility":45,"agilityPoints":14,"damage":"30-60","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"45-135","attackSpeed":"FAST","sdRaw-base":145,"category":"weapon","displayName":"Morrowind","basedps":135,"bonusEarthDamage":-15,"bonusAirDamage":23,"spellDamageRaw":145,"bonusAirDefense":23,"reflection":46,"speed":23,"identified":false},
{"name": "Anima-Infused Helmet", "displayName":"Boreal-Patterned Crown","type":"helmet","level":100,"tier":"Legendary","sockets":2,"quest":"The Qira Hive","dexterity":40,"intelligence":40,"agility":40,"strengthPoints":-30,"defensePoints":-30,"health":3000,"thunderDefense":150,"waterDefense":150,"airDefense":150,"identified":true,"category":"armor","displayName":"Boreal-Patterned Crown","bonusThunderDamage":25,"bonusWaterDamage":25,"bonusAirDamage":25,"damageBonus":-40,"spellDamage":20,"spellDamageRaw":300,"bonusThunderDefense":10,"bonusWaterDefense":10,"bonusAirDefense":10,"manaRegen":8},
{"name":"Corsair","type":"helmet","level":99,"tier":"Unique","sockets":2,"majorIds":[],"dexterity":55,"agility":35,"dexterityPoints":8,"health":2900,"earthDefense":-140,"thunderDefense":80,"airDefense":110,"ms-base":5,"spPct1-base":-10,"spPct4-base":-14,"category":"armor","displayName":"Corsair","bonusThunderDamage":10,"bonusAirDamage":12,"manaSteal":5,"speed":11,"spellCostPct1":-10,"spellCostPct4":-14,"emeraldStealing":4,"identified":false},
{"name":"Scaldsteppers","type":"boots","level":90,"tier":"Unique","sockets":2,"majorIds":[],"intelligence":40,"defense":30,"intelligencePoints":7,"health":2325,"thunderDefense":-100,"waterDefense":110,"fireDefense":80,"airDefense":-90,"spRaw3-base":-4,"category":"armor","displayName":"Scaldsteppers","bonusWaterDamage":10,"bonusFireDamage":10,"bonusAirDamage":-12,"spellDamage":20,"exploding":10,"spellCostRaw3":-4,"identified":false},
{"name":"Charging Flame","type":"spear","level":94,"tier":"Rare","sockets":2,"majorIds":[],"intelligence":40,"defense":40,"damage":"20-40","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"40-120","fireDamage":"20-140","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":5,"spRaw2-base":-12,"category":"weapon","displayName":"Charging Flame","basedps":190,"bonusWaterDamage":12,"bonusFireDamage":12,"damageBonus":12,"spellDamage":12,"healthBonus":-1200,"bonusThunderDefense":-25,"manaRegen":5,"exploding":24,"spellCostRaw2":-12,"identified":false},
{"name":"Aphotic","type":"helmet","level":98,"tier":"Legendary","sockets":2,"majorIds":[],"intelligence":100,"dexterityPoints":-80,"intelligencePoints":5,"health":3200,"thunderDefense":-150,"waterDefense":150,"spRaw3-base":-7,"category":"armor","displayName":"Aphotic","spellDamage":50,"attackSpeedBonus":-6,"spellCostRaw3":-7,"identified":false},
{"name":"Silent Ballet","type":"relik","level":83,"tier":"Unique","majorIds":[],"strength":40,"agility":40,"damage":"0-0","earthDamage":"110-121","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"110-121","attackSpeed":"FAST","category":"weapon","displayName":"Silent Ballet","basedps":231,"damageBonus":40,"spellDamage":-40000,"spellDamageRaw":-40000,"spellCostPct1":-40,"spellCostPct2":-40,"spellCostPct3":-40,"spellCostPct4":-40,"spellCostRaw1":-40,"spellCostRaw2":-40,"spellCostRaw3":-40,"spellCostRaw4":-40,"identified":false},
{"name":"Rhythm of the Seasons","type":"spear","level":100,"tier":"Fabled","sockets":2,"majorIds":["RALLY"],"strength":80,"defense":60,"defensePoints":12,"damage":"40-50","earthDamage":"100-140","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","mr-base":15,"category":"weapon","displayName":"Rhythm of the Seasons","basedps":165,"bonusWaterDamage":25,"healthBonus":1800,"healthRegenRaw":-660,"manaRegen":15,"identified":false},
{"name":"Sorrow","type":"chestplate","level":72,"tier":"Rare","sockets":1,"intelligence":95,"health":1400,"thunderDefense":-150,"waterDefense":150,"identified":true,"category":"armor","displayName":"Sorrow","bonusWaterDamage":42,"spellDamage":8,"manaRegen":5,"manaSteal":-20,"spellCostRaw1":-8,"soulPoints":20},
{"name":"Condensation","type":"boots","level":87,"tier":"Unique","majorIds":[],"intelligence":75,"intelligencePoints":10,"health":2000,"thunderDefense":-120,"waterDefense":100,"spRaw3-base":-6,"category":"armor","displayName":"Condensation","damageBonus":-30,"spellDamage":30,"bonusThunderDefense":-20,"spellCostRaw3":-6,"identified":false},
{"name":"Augoeides","type":"chestplate","level":63,"tier":"Rare","majorIds":[],"intelligence":65,"health":1000,"earthDefense":20,"thunderDefense":20,"waterDefense":20,"fireDefense":20,"airDefense":20,"mr-base":5,"spRaw3-base":-5,"category":"armor","displayName":"Augoeides","damageBonusRaw":-52,"manaRegen":5,"reflection":30,"spellCostRaw3":-5,"xpBonus":5,"lootBonus":8,"soulPoints":10,"identified":false},
{"name":"Matryoshka Shell","type":"chestplate","level":55,"tier":"Legendary","sockets":18,"majorIds":[],"strength":10,"dexterity":10,"intelligence":10,"defense":10,"agility":10,"health":550,"earthDefense":50,"thunderDefense":50,"waterDefense":50,"fireDefense":50,"airDefense":50,"spRaw1-base":-5,"category":"armor","displayName":"Matryoshka Shell","bonusEarthDefense":20,"bonusThunderDefense":20,"bonusWaterDefense":20,"bonusFireDefense":20,"bonusAirDefense":20,"speed":10,"spellCostRaw1":-5,"xpBonus":20,"lootBonus":20,"identified":false},
{"name":"Pure","type":"wand","level":65,"tier":"Mythic","majorIds":["ENTROPY"],"intelligence":50,"agility":30,"damage":"0-5","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"20-45","fireDamage":"0-0","airDamage":"15-55","attackSpeed":"FAST","ms-base":30,"spRaw3-base":6,"category":"weapon","displayName":"Pure","basedps":70,"damageBonus":-100,"spellDamage":400,"manaSteal":30,"reflection":20,"spellCostRaw3":6,"xpBonus":30,"identified":false},
{"name":"Resurgence","type":"boots","level":91,"tier":"Mythic","sockets":4,"majorIds":[],"intelligence":65,"defense":90,"intelligencePoints":25,"health":4550,"waterDefense":175,"fireDefense":125,"mr-base":30,"category":"armor","displayName":"Resurgence","damageBonus":-45,"spellDamage":-35,"healthRegenRaw":390,"manaRegen":30,"speed":-14,"soulPoints":20,"identified":false},
{"name":"Galleon","type":"boots","level":92,"tier":"Mythic","sockets":3,"majorIds":[],"strength":65,"intelligence":60,"health":4500,"earthDefense":200,"waterDefense":250,"airDefense":-175,"ms-base":20,"category":"armor","displayName":"Galleon","bonusEarthDamage":36,"bonusWaterDamage":36,"damageBonus":45,"attackSpeedBonus":-1,"poison":4231,"manaSteal":20,"emeraldStealing":15,"lootBonus":20,"identified":false},
{"name":"Boreal","type":"boots","level":93,"tier":"Mythic","sockets":3,"majorIds":[],"defense":75,"agility":65,"health":5000,"fireDefense":250,"airDefense":375,"mr-base":10,"category":"armor","displayName":"Boreal","bonusEarthDamage":-75,"bonusThunderDamage":-75,"bonusFireDefense":50,"bonusAirDefense":50,"healthRegen":100,"healthRegenRaw":269,"manaRegen":10,"reflection":25,"speed":25,"identified":false},
{"name":"Freedom","type":"bow","level":93,"tier":"Mythic","sockets":4,"majorIds":[],"strength":40,"dexterity":40,"intelligence":40,"defense":40,"agility":40,"agilityPoints":30,"damage":"0-0","earthDamage":"85-109","thunderDamage":"45-149","waterDamage":"65-129","fireDamage":"75-119","airDamage":"55-139","attackSpeed":"NORMAL","mr-base":10,"category":"weapon","displayName":"Freedom","basedps":485,"damageBonusRaw":111,"spellDamageRaw":111,"healthBonus":1000,"manaRegen":10,"speed":15,"identified":false},
{"name":"Olympic","type":"relik","level":93,"tier":"Mythic","sockets":3,"majorIds":[],"agility":105,"agilityPoints":25,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"345-375","attackSpeed":"FAST","spRaw1-base":-10,"spRaw2-base":-10,"category":"weapon","displayName":"Olympic","basedps":360,"bonusAirDamage":20,"bonusAirDefense":30,"jumpHeight":6,"speed":35,"spellCostRaw1":-10,"spellCostRaw2":-10,"identified":false},
{"name":"Guardian","type":"spear","level":93,"tier":"Mythic","sockets":3,"majorIds":["GUARDIAN"],"defense":110,"defensePoints":20,"damage":"50-90","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"165-205","airDamage":"0-0","attackSpeed":"NORMAL","category":"weapon","displayName":"Guardian","basedps":255,"healthBonus":6000,"bonusEarthDefense":20,"bonusWaterDefense":20,"bonusFireDefense":20,"healthRegenRaw":585,"manaRegen":1,"thorns":25,"identified":false},
{"name":"Hadal","type":"relik","level":94,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":130,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"1750-2150","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_SLOW","mr-base":30,"spPct3-base":112,"spPct4-base":112,"category":"weapon","displayName":"Hadal","basedps":1950,"spellDamage":75,"manaRegen":30,"spellCostPct3":112,"spellCostPct4":112,"identified":false},
{"name":"Nullification","type":"dagger","level":95,"tier":"Mythic","sockets":3,"majorIds":[],"strength":30,"dexterity":30,"intelligence":30,"defense":30,"agility":30,"defensePoints":40,"damage":"0-0","earthDamage":"60-66","thunderDamage":"22-104","waterDamage":"46-80","fireDamage":"36-90","airDamage":"28-98","attackSpeed":"FAST","ms-base":16,"category":"weapon","displayName":"Nullification","basedps":315,"poison":-7000,"bonusEarthDefense":143,"bonusThunderDefense":143,"bonusWaterDefense":143,"bonusFireDefense":143,"bonusAirDefense":143,"manaSteal":16,"lifeSteal":495,"reflection":80,"identified":false},
{"name":"Idol","type":"spear","level":95,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":120,"intelligencePoints":26,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"230-330","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":10,"spRaw2-base":-50,"category":"weapon","displayName":"Idol","basedps":280,"spellDamageRaw":264,"bonusWaterDefense":15,"manaRegen":10,"reflection":30,"spellCostRaw2":-50,"soulPoints":25,"identified":false},
{"name":"Dawnbreak","type":"boots","level":96,"tier":"Mythic","sockets":2,"majorIds":[],"dexterity":65,"defense":65,"health":4225,"thunderDefense":200,"waterDefense":-125,"fireDefense":200,"airDefense":-125,"ms-base":12,"category":"armor","displayName":"Dawnbreak","bonusThunderDamage":27,"bonusFireDamage":27,"damageBonusRaw":2700,"attackSpeedBonus":-20,"manaSteal":12,"lifeSteal":350,"exploding":23,"identified":false},
{"name":"Cataclysm","type":"dagger","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":120,"dexterityPoints":20,"damage":"40-140","earthDamage":"0-0","thunderDamage":"45-305","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_FAST","category":"weapon","displayName":"Cataclysm","basedps":265,"bonusThunderDamage":17,"healthBonus":-6000,"thorns":21,"spellCostRaw1":-1,"emeraldStealing":5,"identified":false},
{"name":"Grimtrap","type":"dagger","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"strength":100,"strengthPoints":15,"damage":"175-235","earthDamage":"305-425","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SLOW","ms-base":-10,"spRaw4-base":-10,"category":"weapon","displayName":"Grimtrap","basedps":570,"poison":2000,"manaSteal":-10,"lifeSteal":650,"thorns":70,"spellCostRaw2":1,"spellCostRaw4":-10,"identified":false},
{"name":"Weathered","type":"dagger","level":96,"tier":"Mythic","sockets":3,"majorIds":["ROVINGASSASSIN"],"agility":110,"agilityPoints":15,"damage":"40-80","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"140-230","attackSpeed":"VERY_FAST","ms-base":16,"category":"weapon","displayName":"Weathered","basedps":245,"bonusAirDamage":20,"attackSpeedBonus":1,"manaSteal":16,"reflection":25,"exploding":-50,"speed":25,"identified":false},
{"name":"Thrundacrack","type":"spear","level":96,"tier":"Mythic","sockets":4,"majorIds":[],"dexterity":105,"dexterityPoints":35,"damage":"50-90","earthDamage":"0-0","thunderDamage":"50-220","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","spRaw3-base":-6,"category":"weapon","displayName":"Thrundacrack","basedps":205,"bonusThunderDamage":25,"bonusWaterDamage":60,"healthRegen":-60,"speed":9,"spellCostRaw3":-6,"identified":false},
{"name":"Lament","type":"wand","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":110,"intelligencePoints":20,"damage":"70-90","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"180-190","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SLOW","ms-base":40,"spPct1-base":-35,"category":"weapon","displayName":"Lament","basedps":265,"bonusWaterDamage":80,"manaSteal":40,"lifeSteal":-500,"spellCostPct1":-35,"identified":false},
{"name":"Toxoplasmosis","type":"relik","level":96,"tier":"Mythic","sockets":2,"majorIds":[],"strength":110,"strengthPoints":40,"damage":"0-0","earthDamage":"3-3","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","ms-base":18,"category":"weapon","displayName":"Toxoplasmosis","basedps":3,"poison":10000,"manaSteal":18,"lifeSteal":500,"speed":20,"lootBonus":20,"identified":false},
{"name":"Stardew","type":"boots","level":97,"tier":"Mythic","sockets":2,"majorIds":[],"dexterity":65,"intelligence":75,"health":4075,"earthDefense":-100,"thunderDefense":150,"waterDefense":150,"fireDefense":-100,"airDefense":-100,"mr-base":-9,"ms-base":15,"category":"armor","displayName":"Stardew","bonusThunderDamage":35,"bonusWaterDamage":35,"spellDamageRaw":313,"manaRegen":-9,"manaSteal":15,"reflection":25,"identified":false},
{"name":"Divzer","type":"bow","level":97,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":115,"dexterityPoints":37,"defensePoints":-39,"agilityPoints":-550,"damage":"48-50","earthDamage":"0-0","thunderDamage":"250-250","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_FAST","ms-base":30,"category":"weapon","displayName":"Divzer","basedps":299,"bonusWaterDamage":-550,"bonusFireDamage":-550,"damageBonusRaw":536,"spellDamageRaw":253,"attackSpeedBonus":1,"manaSteal":30,"lifeSteal":973,"identified":false},
{"name":"Inferno","type":"dagger","level":97,"tier":"Mythic","sockets":3,"majorIds":[],"defense":105,"defensePoints":15,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"855-1045","airDamage":"0-0","attackSpeed":"VERY_SLOW","category":"weapon","displayName":"Inferno","basedps":950,"bonusFireDamage":35,"damageBonus":25,"damageBonusRaw":560,"healthBonus":1500,"bonusWaterDefense":-40,"healthRegen":-45,"manaRegen":-1,"speed":25,"spellCostRaw1":-1,"identified":false},
{"name":"Nirvana","type":"dagger","level":97,"tier":"Mythic","sockets":3,"majorIds":["ARCANES"],"intelligence":110,"intelligencePoints":40,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"320-385","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":10,"ms-base":-20,"category":"weapon","displayName":"Nirvana","basedps":352.5,"damageBonus":-80,"spellDamage":25,"healthBonus":-2000,"manaRegen":10,"manaSteal":-20,"reflection":15,"identified":false},
{"name":"Collapse","type":"spear","level":97,"tier":"Mythic","sockets":3,"majorIds":["FISSION"],"strength":35,"dexterity":35,"intelligence":35,"defense":35,"agility":35,"strengthPoints":45,"damage":"40-65","earthDamage":"0-310","thunderDamage":"0-310","waterDamage":"0-310","fireDamage":"0-310","airDamage":"0-310","attackSpeed":"VERY_SLOW","ms-base":18,"category":"weapon","displayName":"Collapse","basedps":827.5,"damageBonus":50,"bonusEarthDefense":-65,"bonusThunderDefense":-65,"bonusWaterDefense":-65,"bonusFireDefense":-65,"bonusAirDefense":-65,"manaSteal":18,"exploding":250,"identified":false},
{"name":"Gaia","type":"wand","level":97,"tier":"Mythic","sockets":3,"majorIds":[],"strength":105,"strengthPoints":25,"damage":"150-220","earthDamage":"380-490","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_SLOW","spRaw4-base":-9,"category":"weapon","displayName":"Gaia","basedps":620,"damageBonus":15,"damageBonusRaw":575,"spellDamageRaw":-275,"poison":2500,"thorns":15,"spellCostRaw4":-9,"identified":false},
{"name":"Absolution","type":"relik","level":97,"tier":"Mythic","majorIds":[],"defense":115,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"195-205","airDamage":"0-0","attackSpeed":"SUPER_FAST","mr-base":16,"spRaw1-base":-20,"category":"weapon","displayName":"Absolution","basedps":200,"bonusWaterDamage":200,"bonusFireDamage":20,"healthBonus":3000,"bonusEarthDefense":45,"bonusThunderDefense":45,"manaRegen":16,"spellCostRaw1":-20,"soulPoints":23,"identified":false},
{"name":"Spring","type":"bow","level":98,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":120,"strengthPoints":15,"dexterityPoints":-40,"intelligencePoints":15,"damage":"150-185","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"200-310","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":30,"category":"weapon","displayName":"Spring","basedps":422.5,"bonusThunderDamage":-50,"bonusWaterDamage":20,"manaRegen":30,"identified":false},
{"name":"Monster","type":"wand","level":98,"tier":"Mythic","sockets":3,"majorIds":[],"defense":110,"defensePoints":40,"damage":"110-140","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"160-220","airDamage":"0-0","attackSpeed":"SLOW","ms-base":10,"spRaw1-base":4,"category":"weapon","displayName":"Monster","basedps":315,"bonusFireDamage":25,"damageBonus":40,"healthBonus":3000,"manaSteal":10,"lifeSteal":500,"spellCostRaw1":4,"identified":false},
{"name":"Revenant","type":"boots","level":99,"tier":"Mythic","sockets":3,"majorIds":[],"strength":70,"agility":70,"health":7000,"earthDefense":70,"airDefense":70,"ms-base":10,"spPct4-base":-28,"category":"armor","displayName":"Revenant","bonusEarthDamage":40,"bonusAirDamage":40,"damageBonus":-70,"damageBonusRaw":520,"healthBonus":-2500,"manaSteal":10,"reflection":120,"speed":40,"spellCostPct4":-28,"identified":false},
{"name":"Fatal","type":"wand","level":99,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":110,"dexterityPoints":25,"damage":"0-0","earthDamage":"0-0","thunderDamage":"1-360","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","spPct1-base":28,"spPct2-base":-49,"category":"weapon","displayName":"Fatal","basedps":180.5,"spellDamage":25,"manaSteal":1,"speed":15,"spellCostPct1":28,"spellCostPct2":-49,"identified":false},
{"name":"Warp","type":"wand","level":99,"tier":"Mythic","sockets":3,"majorIds":[],"agility":130,"agilityPoints":20,"damage":"40-70","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"190-220","attackSpeed":"VERY_FAST","mr-base":-49,"spRaw1-base":4,"spRaw2-base":-299,"category":"weapon","displayName":"Warp","basedps":260,"bonusAirDamage":15,"healthRegen":-200,"healthRegenRaw":-600,"manaRegen":-49,"reflection":90,"exploding":50,"speed":180,"spellCostRaw1":4,"spellCostRaw2":-299,"identified":false},
{"name":"Oblivion","type":"dagger","level":101,"tier":"Mythic","sockets":4,"majorIds":[],"dexterity":75,"intelligence":65,"dexterityPoints":15,"damage":"1-200","earthDamage":"0-0","thunderDamage":"600-999","waterDamage":"600-999","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_SLOW","mr-base":-30,"ms-base":15,"spRaw2-base":-20,"category":"weapon","displayName":"Oblivion","basedps":1699.5,"spellDamageRaw":265,"manaRegen":-30,"manaSteal":15,"exploding":40,"spellCostRaw2":-20,"soulPoints":40,"identified":false},
{"name":"Epoch","type":"bow","level":102,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":70,"agility":70,"damage":"500-620","earthDamage":"0-0","thunderDamage":"480-640","waterDamage":"0-0","fireDamage":"0-0","airDamage":"520-600","attackSpeed":"SUPER_SLOW","sdPct-base":40,"category":"weapon","displayName":"Epoch","basedps":1680,"damageBonusRaw":769,"spellDamage":40,"manaSteal":-1,"lifeSteal":825,"speed":-20,"sprint":70,"spellCostRaw1":-1,"spellCostRaw4":-1,"identified":false},
{"name":"Fantasia","type":"relik","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"strength":45,"dexterity":45,"intelligence":45,"defense":45,"agility":45,"intelligencePoints":50,"damage":"0-0","earthDamage":"200-340","thunderDamage":"260-280","waterDamage":"230-310","fireDamage":"215-325","airDamage":"245-295","attackSpeed":"VERY_SLOW","spPct1-base":-27,"spPct2-base":-27,"spPct3-base":-27,"spPct4-base":-27,"category":"weapon","displayName":"Fantasia","basedps":1350,"spellDamage":30,"manaRegen":-4,"manaSteal":-4,"spellCostPct1":-27,"spellCostPct2":-27,"spellCostPct3":-27,"spellCostPct4":-27,"identified":false},
{"name":"Slayer","type":"boots","level":94,"tier":"Mythic","sockets":2,"majorIds":[],"dexterity":75,"agility":60,"dexterityPoints":20,"health":3775,"waterDefense":-100,"spPct3-base":-30,"category":"armor","displayName":"Slayer","damageBonusRaw":285,"attackSpeedBonus":1,"healthRegenRaw":-270,"speed":27,"spellCostPct3":-30,"emeraldStealing":10,"identified":false},
{"name":"Immolation","type":"relik","level":101,"tier":"Mythic","sockets":3,"majorIds":[],"defense":80,"agility":80,"defensePoints":50,"agilityPoints":50,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"200-440","airDamage":"310-330","attackSpeed":"SLOW","spPct3-base":-14,"category":"weapon","displayName":"Immolation","basedps":640,"bonusWaterDamage":-1000,"bonusFireDamage":45,"bonusAirDamage":45,"healthBonus":-2750,"healthRegen":-180,"spellCostPct3":-14,"identified":false},
{"name":"Convergence","type":"spear","level":104,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":65,"defense":75,"damage":"70-90","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"100-120","fireDamage":"105-115","airDamage":"0-0","attackSpeed":"NORMAL","spPct3-base":-45,"category":"weapon","displayName":"Convergence","basedps":300,"bonusEarthDamage":55,"bonusThunderDamage":55,"bonusAirDefense":35,"healthRegen":43,"sprintRegen":43,"spellCostPct3":-45,"identified":false}
]}

View file

@ -58,6 +58,11 @@ mul_keys = {
"ms": 50
}
def round_near(x, eps=1e-5):
if x - round(x) < eps:
return round(x)
return x
remap_items = []
#old_items_map = dict()
import math
@ -67,7 +72,7 @@ for item in old_items:
# SUPER JANKY ROUNDING
tentimes = round(item[k] * v)
rem = tentimes % 10
val = math.floor(round(tentimes / 10))
val = math.floor(round_near(tentimes / 10))
if rem >= 5:
val += 1
item[k] = val