Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 48 additions & 1 deletion fix_ascendancy_positions.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
logging.basicConfig(level=logging.INFO)


@dataclasses.dataclass(frozen=True, slots=True)
@dataclasses.dataclass(frozen=True) #, slots=True) #, slots breaks becouse its already defined?
class Point2D:
"""Two-dimensional point. Supports subtracting points."""
x: int
Expand Down Expand Up @@ -40,6 +40,42 @@ def __sub__(self, other: Point2D) -> Point2D:
"Saboteur": Point2D(10200, -2200),
"Ascendant": Point2D(-7800, 7200),
}
EXTRA_NODES = {
"Necromancer": [{"Node": {"name": "Nine Lives", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/Int.png", "isNotable": True, "skill" : 27602},
"offset": Point2D(-1500, -1000)}],
"Guardian": [{"Node": {"name": "Searing Purity", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/StrInt.png", "isNotable": True, "skill" : 57568},
"offset": Point2D(-1000, 1500)}],
"Berserker": [{"Node": {"name": "Indomitable Resolve", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/Str.png", "isNotable": True, "skill" : 52435},
"offset": Point2D(-1000, 0)}],
"Ascendant": [{"Node": {"name": "Unleashed Potential", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/SkillPoint.png", "skill" : 19355},
"offset": Point2D(-1000, 1000)}],
"Champion": [{"Node": {"name": "Fatal Flourish", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/StrDex.png", "isNotable": True, "skill" : 42469},
"offset": Point2D(0, 1000)}],
"Raider": [{"Node": {"name": "Fury of Nature", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/Dex.png", "isNotable": True, "skill" : 18054},
"offset": Point2D(1000, -1500)}],
"Saboteur": [{"Node": {"name": "Harness the Void", "icon": "Art/2DArt/SkillIcons/passives/Ascendants/DexInt.png", "isNotable": True, "skill" : 57331},
"offset": Point2D(1000, -1500)}],
}
EXTRA_NODE_IDS = { #these can be any value but for now they are hardcoded to what random numbers generated last time for consistancy, the "hash" value is what we should probs use though as its the value in the ggpk
"Nine Lives": {"NodeID": 33600, "GroupID" : 44472},
"Searing Purity": {"NodeID": 22278, "GroupID" : 50933},
"Soul Drinker": {"NodeID": 19264, "GroupID" : 37841, "hash" : 45999},
"Harness the Void": {"GroupID" : 37841},
"Fury of Nature": {"NodeID": 62630, "GroupID" : 56600},
"Fatal Flourish": {"NodeID": 11264, "GroupID" : 63033},
"Indomitable Resolve": {"NodeID": 15386, "GroupID" : 25519},
"Unleashed Potential": {"NodeID": 55193, "GroupID" : 60495},
}
EXTRA_NODES_STATS = { # these should not be hardcoded here, but should by inserted later via the exporter from the ggpk (they are AsendencySpecialEdlritch in PassiveSkills.dat, though reminder text seems to be missing)
"Nine Lives": {"stats": ["25% of Damage taken Recouped as Life, Mana and Energy Shield", "Recoup Effects instead occur over 3 seconds"], "reminderText": ["(Only Damage from Hits can be Recouped, over 4 seconds following the Hit)"]},
"Searing Purity": {"stats": ["45% of Chaos Damage taken as Fire Damage", "45% of Chaos Damage taken as Lightning Damage"], "reminderText": []},
"Soul Drinker": {"stats": ["2% of Damage Leeched as Energy Shield", "20% increased Attack and Cast Speed while Leeching Energy Shield", "Energy Shield Leech effects are not removed when Energy Shield is Filled"], "reminderText": ["(Leeched Energy Shield is recovered over time. Multiple Leeches can occur simultaneously, up to a maximum rate)"]},
"Harness the Void": {"stats": ["27% chance to gain 25% of Non-Chaos Damage with Hits as Extra Chaos Damage", "13% chance to gain 50% of Non-Chaos Damage with Hits as Extra Chaos Damage", "7% chance to gain 100% of Non-Chaos Damage with Hits as Extra Chaos Damage"], "reminderText": []},
"Fury of Nature" : {"stats": ["Non-Damaging Elemental Ailments you inflict spread to nearby enemies in a radius of 20", "Non-Damaging Elemental Ailments you inflict have 100% more Effect"], "reminderText": ["(Elemental Ailments are Ignited, Scorched, Chilled, Frozen, Brittled, Shocked, and Sapped)"]},
"Fatal Flourish": {"stats": ["Final Repeat of Attack Skills deals 60% more Damage", "Non-Travel Attack Skills Repeat an additional Time"], "reminderText": []},
"Indomitable Resolve": {"stats": ["Deal 10% less Damage", "Take 25% less Damage"], "reminderText": []},
"Unleashed Potential" : {"stats": ["400% increased Endurance, Frenzy and Power Charge Duration", "25% chance to gain a Power, Frenzy or Endurance Charge on Kill", "+1 to Maximum Endurance Charges", "+1 to Maximum Frenzy Charges", "+1 to Maximum Power Charges"], "reminderText": []},
}


def fix_ascendancy_positions(path: os.PathLike) -> None:
Expand Down Expand Up @@ -70,6 +106,17 @@ def fix_ascendancy_positions(path: os.PathLike) -> None:
offset = NODE_GROUPS[ascendancy] - ascendancy_starting_point[ascendancy]
group["x"] += offset.x
group["y"] += offset.y
for ascendancy in EXTRA_NODES:
for node in EXTRA_NODES[ascendancy]:
if str(EXTRA_NODE_IDS[node["Node"]["name"]]["GroupID"]) in data["groups"]: #using hardcoded value from last time, can use another method instead, like just grabbing the next avalible value
print("GroupID already taken")
return
node["Node"]["group"] = EXTRA_NODE_IDS[node["Node"]["name"]]["GroupID"]
data["groups"][node["Node"]["group"]] = {"x": NODE_GROUPS[ascendancy].x + node["offset"].x, "y": NODE_GROUPS[ascendancy].y + node["offset"].y, "orbits": [0], "nodes": [node["Node"]["skill"]]}
data["nodes"][node["Node"]["skill"]] = node["Node"] | {"ascendancyName": ascendancy, "orbit": 0, "orbitIndex": 0, "out": [], "in": [], "stats": [], "reminderText": []}
if node["Node"]["name"] in EXTRA_NODES_STATS:
data["nodes"][node["Node"]["skill"]]["stats"] = EXTRA_NODES_STATS[node["Node"]["name"]]["stats"]
data["nodes"][node["Node"]["skill"]]["reminderText"] = EXTRA_NODES_STATS[node["Node"]["name"]]["reminderText"]
with open(path, "w", encoding="utf-8") as o:
json.dump(data, o, indent=4)

Expand Down
17 changes: 17 additions & 0 deletions src/Classes/PassiveTree.lua
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,20 @@ local PassiveTreeClass = newClass("PassiveTree", function(self, treeVersion)
self.orbitAnglesByOrbit[orbit] = self:CalcOrbitAngles(skillsInOrbit)
end

if versionNum >= 3.19 then
local treeTextOLD
local treeFileOLD = io.open("TreeData/".. "3_18" .."/tree.lua", "r")
if treeFileOLD then
treeTextOLD = treeFileOLD:read("*a")
treeFileOLD:close()
end
local temp = {}
for k, v in pairs(assert(loadstring(treeTextOLD))()) do
temp[k] = v
end
self.assets = temp.assets
self.skillSprites = self.sprites
end
ConPrintf("Loading passive tree assets...")
for name, data in pairs(self.assets) do
self:LoadImage(name..".png", cdnRoot..(data[0.3835] or data[1]), data, not name:match("[OL][ri][bn][ie][tC]") and "ASYNC" or nil)--, not name:match("[OL][ri][bn][ie][tC]") and "MIPMAP" or nil)
Expand All @@ -137,6 +151,9 @@ local PassiveTreeClass = newClass("PassiveTree", function(self, treeVersion)
local spriteSheets = { }
for type, data in pairs(self.skillSprites) do
local maxZoom = data[#data]
if versionNum >= 3.19 then
maxZoom = data[0.3835] or data[1]
end
local sheet = spriteSheets[maxZoom.filename]
if not sheet then
sheet = { }
Expand Down
14 changes: 14 additions & 0 deletions src/Export/spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6686,6 +6686,20 @@ return {
refTo="PassiveSkillMasteryGroups",
type="Key",
width=150
},
[32]={
list=false,
name="AtlasMastery_rid",
refTo="",
type="Key",
width=150
},
[33]={
list=false,
name="SoundEffect",
refTo="SoundEffects",
type="Key",
width=150
}
},
PassiveTreeExpansionJewelSizes={
Expand Down
7 changes: 6 additions & 1 deletion src/GameVersions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ liveTargetVersion = "3_0"
-- Skill tree versions
---Added for convenient indexing of skill tree versions.
---@type string[]
treeVersionList = { "2_6", "3_6", "3_7", "3_8", "3_9", "3_10", "3_11", "3_12", "3_13", "3_14", "3_15", "3_16", "3_17", "3_18", }
treeVersionList = { "2_6", "3_6", "3_7", "3_8", "3_9", "3_10", "3_11", "3_12", "3_13", "3_14", "3_15", "3_16", "3_17", "3_18", "3_19", }
--- Always points to the latest skill tree version.
latestTreeVersion = treeVersionList[#treeVersionList]
---Tree version where multiple skill trees per build were introduced to PoBC.
Expand Down Expand Up @@ -85,4 +85,9 @@ treeVersions = {
num = 3.18,
url = "https://www.pathofexile.com/passive-skill-tree/3.18.0/",
},
["3_19"] = {
display = "3.19",
num = 3.19,
url = "https://www.pathofexile.com/passive-skill-tree/3.19.0/",
},
}
Binary file added src/TreeData/3_19/mastery-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/TreeData/3_19/mastery-active-effect-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/TreeData/3_19/mastery-active-selected-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/TreeData/3_19/mastery-connected-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/TreeData/3_19/mastery-disabled-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/TreeData/3_19/skills-3.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/TreeData/3_19/skills-disabled-3.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading