diff --git a/game/engines/default/engine/Birther.lua b/game/engines/default/engine/Birther.lua index 6205e6f13104d1e8fd825c935224323d7f58896e..c3bd715aa93d859066d69b2e62e2405b428c287e 100644 --- a/game/engines/default/engine/Birther.lua +++ b/game/engines/default/engine/Birther.lua @@ -363,6 +363,7 @@ function _M:apply() self.actor.body = d.body self.actor:initBody() end + if self.applyingDescriptor then self:applyingDescriptor(i, d) end end -- Apply stats now to not be overridden by other things diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua index c7fab1fa4d474ec55bd51bc45d555a1c077f5c21..1f5432faafe79685e3d059ed9bad1abc5f03841c 100644 --- a/game/modules/tome/class/GameState.lua +++ b/game/modules/tome/class/GameState.lua @@ -1376,6 +1376,7 @@ function _M:createRandomBoss(base, data) -- Add talent categories for tt, d in pairs(class.talents_types or {}) do b:learnTalentType(tt, true) b:setTalentTypeMastery(tt, (b:getTalentTypeMastery(tt) or 1) + d[2]) end + for tt, d in pairs(class.unlockable_talents_types or {}) do b:learnTalentType(tt, true) b:setTalentTypeMastery(tt, (b:getTalentTypeMastery(tt) or 1) + d[2]) end -- Add starting equipment for k, resolver in pairs(class.copy or {}) do diff --git a/game/modules/tome/data/birth/classes/mage.lua b/game/modules/tome/data/birth/classes/mage.lua index 71e770f44ba1ebbbf044f0fa018c7a48b4a5e60c..35ac8d5d7af9a79ec50760102092a078373128ff 100644 --- a/game/modules/tome/data/birth/classes/mage.lua +++ b/game/modules/tome/data/birth/classes/mage.lua @@ -70,6 +70,12 @@ newBirthDescriptor{ ["spell/aegis"]={true, 0.3}, ["cunning/survival"]={false, -0.1}, }, + unlockable_talents_types = { + ["spell/wildfire"]={false, 0.3, "mage_pyromancer"}, + ["spell/ice"]={false, 0.3, "mage_cryomancer"}, + ["spell/stone"]={false, 0.3, "mage_geomancer"}, + ["spell/storm"]={false, 0.3, "mage_tempest"}, + }, birth_example_particles = "arcane_power", talents = { [ActorTalents.T_ARCANE_POWER] = 1, @@ -97,12 +103,6 @@ newBirthDescriptor{ {type="weapon", subtype="staff", name="elm staff", autoreq=true, ego_chance=-1000}, {type="armor", subtype="cloth", name="linen robe", autoreq=true, ego_chance=-1000}, }, - resolvers.generic(function(self) - if profile.mod.allow_build.mage_pyromancer then self:learnTalentType("spell/wildfire", false) self:setTalentTypeMastery("spell/wildfire", 1.3) end - if profile.mod.allow_build.mage_cryomancer then self:learnTalentType("spell/ice", false) self:setTalentTypeMastery("spell/ice", 1.3) end - if profile.mod.allow_build.mage_geomancer then self:learnTalentType("spell/stone", false) self:setTalentTypeMastery("spell/stone", 1.3) end - if profile.mod.allow_build.mage_tempest then self:learnTalentType("spell/storm", false) self:setTalentTypeMastery("spell/storm", 1.3) end - end), }, copy_add = { life_rating = -4, diff --git a/game/modules/tome/data/birth/classes/rogue.lua b/game/modules/tome/data/birth/classes/rogue.lua index 283950bfa53cf2e72004272c30e24caea491ef4c..f7663e3089f8d3bfa58f8b62b59542b13258845f 100644 --- a/game/modules/tome/data/birth/classes/rogue.lua +++ b/game/modules/tome/data/birth/classes/rogue.lua @@ -67,17 +67,15 @@ newBirthDescriptor{ ["cunning/lethality"]={true, 0.3}, ["cunning/survival"]={true, 0.3}, }, + unlockable_talents_types = { + ["cunning/poisons"]={false, 0.3, "rogue_poisons"}, + }, talents = { [ActorTalents.T_STEALTH] = 1, [ActorTalents.T_TRAP_MASTERY] = 1, [ActorTalents.T_LETHALITY] = 1, [ActorTalents.T_DUAL_STRIKE] = 1, }, - copy = { - resolvers.generic(function(self) - if profile.mod.allow_build.rogue_poisons then self:learnTalentType("cunning/poisons", false) self:setTalentTypeMastery("cunning/poisons", 1.3) end - end), - }, } newBirthDescriptor{ diff --git a/game/modules/tome/dialogs/Birther.lua b/game/modules/tome/dialogs/Birther.lua index 6201c998bdbfc2d790308086fffc8094b93af6fa..f5c0d465af397a79831c0a09c9dd151ddd706f0c 100644 --- a/game/modules/tome/dialogs/Birther.lua +++ b/game/modules/tome/dialogs/Birther.lua @@ -174,6 +174,23 @@ function _M:checkNew(fct) end end +function _M:applyingDescriptor(i, d) + if d.unlockable_talents_types then + for t, v in pairs(d.unlockable_talents_types) do + if profile.mod.allow_build[v[3]] then + local mastery + if type(v) == "table" then + v, mastery = v[1], v[2] + else + v, mastery = v, 0 + end + self.actor:learnTalentType(t, v) + self.actor.talents_types_mastery[t] = (self.actor.talents_types_mastery[t] or 1) + mastery + end + end + end +end + function _M:atEnd(v) if v == "created" and not self.ui_by_ui[self.c_ok].hidden then self:checkNew(function()