diff --git a/game/engines/default/engine/Map.lua b/game/engines/default/engine/Map.lua index 8078c0ff9db8762c7db3e30e3bfc6f0d05c86678..4a2bb3d828608c363fbec8272639d92c67967860 100644 --- a/game/engines/default/engine/Map.lua +++ b/game/engines/default/engine/Map.lua @@ -730,6 +730,7 @@ end --- Sets the current view area if x and y are out of bounds function _M:moveViewSurround(x, y, marginx, marginy, ignore_padding) + if not x or not y then return end local omx, omy = self.mx, self.my if ignore_padding then diff --git a/game/engines/default/engine/version.lua b/game/engines/default/engine/version.lua index 74575bd6007f62a336f7400c1f01ec5d93174058..4138f28722614c60b1fa36f0c647219b9e355b27 100644 --- a/game/engines/default/engine/version.lua +++ b/game/engines/default/engine/version.lua @@ -18,7 +18,7 @@ -- darkgod@te4.org -- Engine Version -engine.version = {0,9,42,"te4",17} +engine.version = {0,9,43,"te4",17} engine.require_c_core = engine.version[5] engine.version_id = ("%s-%d_%d.%d.%d"):format(engine.version[4], engine.require_c_core, engine.version[1], engine.version[2], engine.version[3]) diff --git a/game/modules/example/init.lua b/game/modules/example/init.lua index 3153dc177ae2865277c251929937ae311bead987..acccf8ded94b7f2303f5aad6e59586a243c30262 100644 --- a/game/modules/example/init.lua +++ b/game/modules/example/init.lua @@ -23,7 +23,7 @@ short_name = "example" author = { "DarkGod", "darkgod@te4.org" } homepage = "http://te4.org/modules:example" version = {1,0,0} -engine = {0,9,42,"te4"} +engine = {0,9,43,"te4"} description = [[ This is *NOT* a game, just an example/template to make your own using the T-Engine4. ]] diff --git a/game/modules/example_realtime/init.lua b/game/modules/example_realtime/init.lua index 5fcfe7859e4a0a93572cd298489aa441aedafe09..dc93de2a162bc2960c4c3ef94f4b726c07bcbfb3 100644 --- a/game/modules/example_realtime/init.lua +++ b/game/modules/example_realtime/init.lua @@ -23,7 +23,7 @@ short_name = "example_realtime" author = { "DarkGod", "darkgod@te4.org" } homepage = "http://te4.org/modules:example" version = {1,0,0} -engine = {0,9,42,"te4"} +engine = {0,9,43,"te4"} description = [[ This is *NOT* a game, just an example/template to make your own using the T-Engine4. ]] diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index a4e41ec0c82fe5434b12441bddede670dbe02835..3b235ef0897a798ba0ba91290369b13c6c89c9e1 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -1607,7 +1607,7 @@ function _M:onTakeHit(value, src) value = adjusted_value - self.damage_shield_absorb self.damage_shield_absorb = 0 end - if reflection > 0 and reflect_damage > 0 and src.y and src.x and not src.dead then + if reflection and reflect_damage and reflection > 0 and reflect_damage > 0 and src.y and src.x and not src.dead then local a = game.level.map(src.x, src.y, Map.ACTOR) if a and self:reactionToward(a) < 0 then a:takeHit(math.ceil(reflect_damage * reflection), self) @@ -1942,6 +1942,11 @@ function _M:onTakeHit(value, src) for tid, _ in pairs(self.invis_on_hit_disable) do self:forceUseTalent(tid, {ignore_energy=true}) end end + -- Bloodspring + if value >= self.max_life * 0.20 and self:knowTalent(self.T_BLOODSPRING) then + self:triggerTalent(self.T_BLOODSPRING) + end + if self:knowTalent(self.T_DUCK_AND_DODGE) then local t = self:getTalentFromId(self.T_DUCK_AND_DODGE) if value >= self.max_life * t.getThreshold(self, t) then diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua index 0dd8bb3c37bdd9929c9b4eb11ba77b43d21d4c97..27f653e78a2bdf202388192c0b9535003c6757eb 100644 --- a/game/modules/tome/class/GameState.lua +++ b/game/modules/tome/class/GameState.lua @@ -656,10 +656,12 @@ function _M:displayWeatherShader(level, ps, x, y, nb_keyframes) local mapcoords = {(-sx + level.map.mx * level.map.tile_w) / level.map.viewport.width , (-sy + level.map.my * level.map.tile_h) / level.map.viewport.height} for j = 1, #ps do - ps[j]:setUniform("mapCoord", mapcoords) - ps[j].shad:use(true) - core.display.drawQuad(x, y, level.map.viewport.width, level.map.viewport.height, 255, 255, 255, 255) - ps[j].shad:use(false) + if ps[j].shad then + ps[j]:setUniform("mapCoord", mapcoords) + ps[j].shad:use(true) + core.display.drawQuad(x, y, level.map.viewport.width, level.map.viewport.height, 255, 255, 255, 255) + ps[j].shad:use(false) + end end end diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua index b71c5f75c31209a2e40162224338f1831aa9763f..164521a397205101bc0f325359c5f8d9dbce1d95 100644 --- a/game/modules/tome/class/Player.lua +++ b/game/modules/tome/class/Player.lua @@ -984,7 +984,7 @@ function _M:playerTakeoff() end function _M:playerUseItem(object, item, inven) - if game.zone.wilderness then game.logPlayer(self, "You cannot use items on the world map.") return end + if not game.zone or game.zone.wilderness then game.logPlayer(self, "You cannot use items on the world map.") return end local use_fct = function(o, inven, item) if not o then return end diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua index 389fba0149a1f8626b061a358e900a08a90e5af4..818c46cd478ee3d9c4e3d83a38e3450f532630f3 100644 --- a/game/modules/tome/class/interface/Combat.lua +++ b/game/modules/tome/class/interface/Combat.lua @@ -83,7 +83,7 @@ The ToME combat system has the following attributes: - armor penetration: reduction of target's armor - damage: raw damage done ]] -function _M:attackTarget(target, damtype, mult, noenergy) +function _M:attackTarget(target, damtype, mult, noenergy, force_unharmed) local speed, hit = nil, false local sound, sound_miss = nil, nil @@ -145,7 +145,8 @@ function _M:attackTarget(target, damtype, mult, noenergy) break_stealth = true end - if not speed and not self:attr("disarmed") and not self:isUnarmed() then + local mean + if not speed and not self:attr("disarmed") and not self:isUnarmed() and not force_unharmed then -- All weapons in main hands if self:getInven(self.INVEN_MAINHAND) then for i, o in ipairs(self:getInven(self.INVEN_MAINHAND)) do @@ -179,6 +180,7 @@ function _M:attackTarget(target, damtype, mult, noenergy) end end end + mean = "weapon" end -- Barehanded ? @@ -191,6 +193,7 @@ function _M:attackTarget(target, damtype, mult, noenergy) if hit and not sound then sound = combat.sound elseif not hit and not sound_miss then sound_miss = combat.sound_miss end if not combat.no_stealth_break then break_stealth = true end + mean = "unharmed" end -- We use up our own energy @@ -211,6 +214,15 @@ function _M:attackTarget(target, damtype, mult, noenergy) t.on_attackTarget(self, t, target) end + if self:attr("unharmed_attack_on_hit") then + local v = self:attr("unharmed_attack_on_hit") + self:attr("unharmed_attack_on_hit", -v) + if mean == "weapon" then self:attackTarget(target, nil, 1, true, true) + elseif mean == "unharmed" and rng.percent(60) then self:attackTarget(target, nil, 1, true, true) + end + self:attr("unharmed_attack_on_hit", v) + end + -- Cancel stealth! if break_stealth then self:breakStealth() end self:breakLightningSpeed() diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua index d610c9f9834c2a1cad587be851537ba26540f407..ef76126dde5dc46ef79cddd2f7aeab4a6d64e087 100644 --- a/game/modules/tome/data/damage_types.lua +++ b/game/modules/tome/data/damage_types.lua @@ -919,12 +919,17 @@ newDamageType{ name = "wave", type = "WAVE", projector = function(src, x, y, type, dam) local srcx, srcy = dam.x, dam.y + local base = dam dam = dam.dam - DamageType:get(DamageType.COLD).projector(src, x, y, DamageType.COLD, dam / 2) - DamageType:get(DamageType.PHYSICAL).projector(src, x, y, DamageType.PHYSICAL, dam / 2) + if not base.st then + DamageType:get(DamageType.COLD).projector(src, x, y, DamageType.COLD, dam / 2) + DamageType:get(DamageType.PHYSICAL).projector(src, x, y, DamageType.PHYSICAL, dam / 2) + else + DamageType:get(DamageType.BLIGHT).projector(src, x, y, DamageType.BLIGHT, dam) + end local target = game.level.map(x, y, Map.ACTOR) if target then - if target:checkHit(src:combatSpellpower(), target:combatPhysicalResist(), 0, 95, 15) and target:canBe("knockback") then + if target:checkHit(base.power or src:combatSpellpower(), target:combatPhysicalResist(), 0, 95, 15) and target:canBe("knockback") then target:knockback(srcx, srcy, 1) target:crossTierEffect(target.EFF_OFFBALANCE, src:combatSpellpower()) game.logSeen(target, "%s is knocked back!", target.name:capitalize()) diff --git a/game/modules/tome/data/general/npcs/horror.lua b/game/modules/tome/data/general/npcs/horror.lua index 816de0dffdf8ce33c3bef5865988834bc2538334..fe79b83ead6846a4a8d8078282d6a57808907ac5 100644 --- a/game/modules/tome/data/general/npcs/horror.lua +++ b/game/modules/tome/data/general/npcs/horror.lua @@ -938,7 +938,7 @@ newEntity{ base = "BASE_NPC_HORROR", on_act = function(self) if self.blades > 2 or not rng.percent(20) then return end self.blades = self.blades + 1 - self:forceUseTalent(Talents.T_ANIMATE_BLADE, {ignore_cd=true, force_level=1}) + self:forceUseTalent(self.T_ANIMATE_BLADE, {ignore_cd=true, force_level=1}) end, resolvers.talents{ @@ -993,7 +993,7 @@ newEntity{ base="BASE_NPC_HORROR", define_as = "ANIMATED_BLADE", game.logSeen(self, "A rift opens, spawning a free floating blade!") game.level.map:addEffect(self, self.x, self.y, 3, - DamageType.TEMPORAL, 25, + engine.DamageType.TEMPORAL, 25, 0, 5, nil, {type="time_prison"}, diff --git a/game/modules/tome/data/general/objects/boss-artifacts.lua b/game/modules/tome/data/general/objects/boss-artifacts.lua index 7f1b692d59aea19c689d9a9da72856b8078a837c..0edcc5d9d0cb24526a16b1a8faf02bf16dd7e384 100644 --- a/game/modules/tome/data/general/objects/boss-artifacts.lua +++ b/game/modules/tome/data/general/objects/boss-artifacts.lua @@ -837,7 +837,7 @@ newEntity{ base = "BASE_GEM", define_as = "CRYSTAL_FOCUS", max_power = 1, power_regen = 1, use_power = { name = "combine with a weapon", power = 1, use = function(self, who, gem_inven, gem_item) - who:showInventory("Fuse with which weapon?", who:getInven("INVEN"), function(o) return (o.type == "weapon" or o.subtype == "hands") and o.subtype ~= "mindstar" and not o.egoed and not o.unique and not o.rare end, function(o, item) + who:showInventory("Fuse with which weapon?", who:getInven("INVEN"), function(o) return (o.type == "weapon" or o.subtype == "hands") and o.subtype ~= "mindstar" and not o.egoed and not o.unique and not o.rare and not o.archery end, function(o, item) local oldname = o:getName{do_color=true} -- Remove the gem diff --git a/game/modules/tome/data/general/objects/egos/torques.lua b/game/modules/tome/data/general/objects/egos/torques.lua index ececb2d50e053ee125adf60adfc6164e01a8b381..02eaffdd36dbe78fe6702d6931ec12c73cc33db1 100644 --- a/game/modules/tome/data/general/objects/egos/torques.lua +++ b/game/modules/tome/data/general/objects/egos/torques.lua @@ -70,7 +70,7 @@ newEntity{ newEntity{ name = "quiet ", prefix=true, - keywords = {quiest=true}, + keywords = {quiet=true}, level_range = {30, 50}, rarity = 12, greater_ego = 1, diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua index 50717013b37ebf71ff37ec5a14f662efe6051566..65197d0eab2fa3e68e1338fb205ff7fc5fe3d41b 100644 --- a/game/modules/tome/data/general/objects/world-artifacts.lua +++ b/game/modules/tome/data/general/objects/world-artifacts.lua @@ -3962,7 +3962,7 @@ newEntity{ base = "BASE_GAUNTLETS", end, max_power = 150, power_regen = 1, use_power = { name = "destroy an arcane item", power = 1, use = function(self, who, obj_inven, obj_item) - local d = who:showInventory("Destroy which item?", who:getInven("INVEN"), function(o) return o.unique and o.power_source.arcane and o.power_source.arcane and o.power_source.arcane == true and o.material_level and o.material_level > self.material_level end, function(o, item, inven) + local d = who:showInventory("Destroy which item?", who:getInven("INVEN"), function(o) return o.unique and o.power_source and o.power_source.arcane and o.power_source.arcane and o.power_source.arcane == true and o.material_level and o.material_level > self.material_level end, function(o, item, inven) if o.material_level <= self.material_level then return end self.material_level=o.material_level game.logPlayer(who, "You crush the %s, and the gloves take on an illustrious shine!", o:getName{do_color=true}) diff --git a/game/modules/tome/data/gfx/talents/bloodspring.png b/game/modules/tome/data/gfx/talents/bloodspring.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9338ff29dc8407a870a9a75161b99b43bbf67a Binary files /dev/null and b/game/modules/tome/data/gfx/talents/bloodspring.png differ diff --git a/game/modules/tome/data/gfx/talents/flexible_combat.png b/game/modules/tome/data/gfx/talents/flexible_combat.png new file mode 100644 index 0000000000000000000000000000000000000000..a44bc9503d3c243dc9d463f4580cdbea4a0f3b79 Binary files /dev/null and b/game/modules/tome/data/gfx/talents/flexible_combat.png differ diff --git a/game/modules/tome/data/gfx/talents/titan_s_smash.png b/game/modules/tome/data/gfx/talents/titan_s_smash.png new file mode 100644 index 0000000000000000000000000000000000000000..5de9fe02dd8eb9c84e8c510b297e256e993f76f9 Binary files /dev/null and b/game/modules/tome/data/gfx/talents/titan_s_smash.png differ diff --git a/game/modules/tome/data/gfx/talents/windblade.png b/game/modules/tome/data/gfx/talents/windblade.png new file mode 100644 index 0000000000000000000000000000000000000000..1a0fc86ce1f52261e6beab2dd6fec99e61873c73 Binary files /dev/null and b/game/modules/tome/data/gfx/talents/windblade.png differ diff --git a/game/modules/tome/data/lore/rhaloren.lua b/game/modules/tome/data/lore/rhaloren.lua index 94554e2d389257e6286625368ac7d65fd56dc26e..66f95409931abe29e926db1e9a63cfa15f34bca1 100644 --- a/game/modules/tome/data/lore/rhaloren.lua +++ b/game/modules/tome/data/lore/rhaloren.lua @@ -39,7 +39,7 @@ newLore{ name = "letter (rhaloren camp)", lore = [[The Scintillating Caverns must be protected. Our great leader has ordered it so, and his word is more binding than any law. Our numbers are few, and we must move in secrecy, but a quiet watch will be made on the caverns. Any who are seen to interfere in them must be lured here to our place of strength, and brought before me for inquisition. -More have joined our cause. Their eyes have been opened to the injustice our people have suffered, blamed by the other races for the Spellblaze and its effects. They are sick of the cowardice of the Council, who sit in silence as we are scorned and hated across the world. But most of all they are inspired by our great leader, and the powers he has gained from studying the Spellblaze. He alone realizes our full potential, he alone can see in our hearts what we are truly capable of. He has blessed me, rescued me from a tortured life and touched me me, rescued me from a tortured life and touched me with his power. Only he can lead our people! With his mastery the world will see our strength and recognise us as a true force to be reckoned with. +More have joined our cause. Their eyes have been opened to the injustice our people have suffered, blamed by the other races for the Spellblaze and its effects. They are sick of the cowardice of the Council, who sit in silence as we are scorned and hated across the world. But most of all they are inspired by our great leader, and the powers he has gained from studying the Spellblaze. He alone realizes our full potential, he alone can see in our hearts what we are truly capable of. He has blessed me, rescued me from a tortured life and touched me with his power. Only he can lead our people! With his mastery the world will see our strength and recognise us as a true force to be reckoned with. Trust in his power, for he shall bring us all to glory. diff --git a/game/modules/tome/data/talents/uber/const.lua b/game/modules/tome/data/talents/uber/const.lua index 906e496fd2d29b4f4bcdb2f463c8d0976f0c445e..2e30f81857e61e3ee7136d89de024098648ed612 100644 --- a/game/modules/tome/data/talents/uber/const.lua +++ b/game/modules/tome/data/talents/uber/const.lua @@ -33,3 +33,32 @@ uberTalent{ :format() end, } + +uberTalent{ + name = "Bloodspring", + mode = "passive", + cooldown = 12, + require = { special={desc="Be close to the draconic world", fct=function(self) return self:attr("drake_touched") and self:attr("drake_touched") >= 2 end} }, + trigger = function(self, t) + -- Add a lasting map effect + game.level.map:addEffect(self, + self.x, self.y, 4, + DamageType.WAVE, {dam=100 + self:getCon() * 3, x=self.x, y=self.y, st=DamageType.BLIGHT, power=50 + self:getCon() * 2}, + 1, + 5, nil, + engine.Entity.new{alpha=100, display='', color_br=200, color_bg=60, color_bb=20}, + function(e) + e.radius = e.radius + 0.5 + return true + end, + false + ) + game:playSoundNear(self, "talents/tidalwave") + self:startTalentCooldown(t) + end, + info = function(self, t) + return ([[When a single blow deals more than 20%% of your total life blood gushes of your body, creating a bloody tidal wave for 4 turns that deals %0.2f blight damage and knocks back foes. + Damage increases with the Constitution stat.]]) + :format(100 + self:getCon() * 3) + end, +} diff --git a/game/modules/tome/data/talents/uber/dex.lua b/game/modules/tome/data/talents/uber/dex.lua index 769d25fce772aeb6e6bdd4d53982329238059d5d..0399bccf434840621f3cfed1149ebca57dfd629a 100644 --- a/game/modules/tome/data/talents/uber/dex.lua +++ b/game/modules/tome/data/talents/uber/dex.lua @@ -52,3 +52,34 @@ uberTalent{ :format() end, } + +uberTalent{ + name = "Windblade", + mode = "activated", + require = { special={desc="Know at least 20 talent levels of stamina using talents.", fct=function(self) return knowRessource(self, "stamina", 20) end} }, + cooldown = 20, + stamina = 30, + radius = 2, + range = 1, + target = function(self, t) + return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t)} + end, + action = function(self, t) + local tg = self:getTalentTarget(t) + self:project(tg, self.x, self.y, function(px, py, tg, self) + local target = game.level.map(px, py, Map.ACTOR) + if target and target ~= self then + local hit = self:attackTarget(target, nil, 1.3, true) + if hit and target:canBe("disarm") then + target:setEffect(target.EFF_DISARMED, 4, {}) + end + end + end) + + return true + end, + info = function(self, t) + return ([[You spin madly in a gust of wind, dealing 140%% weapon damage to all foes in a radius 2 and disarming them for 4 turns.]]) + :format() + end, +} diff --git a/game/modules/tome/data/talents/uber/str.lua b/game/modules/tome/data/talents/uber/str.lua index 6b06aaffdf8c4d4f69419fcd635123d59f031894..e963328a2004974b2fa7d8314e2746da22389842 100644 --- a/game/modules/tome/data/talents/uber/str.lua +++ b/game/modules/tome/data/talents/uber/str.lua @@ -16,3 +16,54 @@ -- -- Nicolas Casalini "DarkGod" -- darkgod@te4.org + +uberTalent{ + name = "Flexible Combat", + mode = "passive", + on_learn = function(self, t) + self:attr("unharmed_attack_on_hit", 1) + end, + on_unlearn = function(self, t) + self:attr("unharmed_attack_on_hit", -1) + end, + info = function(self, t) + return ([[Each time you make a melee attack you have 100%% chances to do an additional unharmed strike, if using weapons and 60%% chances if already fighting unharmed.]]) + :format() + end, +} + +uberTalent{ + name = "Titan's Smash", + mode = "activated", + require = { special={desc="Be of at least size category 'huge' (also required to use it) and know at least 20 talent levels of stamina using talents.", fct=function(self) return self.size_category and self.size_category >= 5 and knowRessource(self, "stamina", 20) end} }, + on_pre_use = function(self, t) return self.size_category and self.size_category >= 5 end, + cooldown = 10, + stamina = 20, + action = function(self, t) + local tg = {type="hit", range=self:getTalentRange(t)} + local x, y, target = self:getTarget(tg) + if not x or not y or not target then return nil end + if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end + + local hit = self:attackTarget(target, nil, 2.3, true) + + if target:attr("dead") or not hit then return end + + local dx, dy = (target.x - self.x), (target.y - self.y) + local dir = util.coordToDir(dx, dy, 0) + local sides = util.dirSides(dir, 0) + + target:knockback(self.x, self.y, 5, function(t2) + local d = rng.chance(2) and sides.hard_left or sides.hard_right + local sx, sy = util.coordAddDir(t2.x, t2.y, d) + t2:knockback(sx, sy, 2) + if t2:canBe("stun") then t2:setEffect(t2.EFF_STUNNED, 3, {}) end + end) + if target:canBe("stun") then target:setEffect(target.EFF_STUNNED, 3, {}) end + end, + info = function(self, t) + return ([[You deal a massive blow to your foe, smashing it for 230%% weapon damage and knocking it back 6 tiles away. + All foes in its path will be knocked on the sides and stunned for 3 turns.]]) + :format() + end, +} diff --git a/game/modules/tome/data/talents/uber/uber.lua b/game/modules/tome/data/talents/uber/uber.lua index 69d686f2cecd5919bb29f1a571306d8bc5a8d8c6..8401c1d515cd5f51f66ce5e4792324c522a2aa2d 100644 --- a/game/modules/tome/data/talents/uber/uber.lua +++ b/game/modules/tome/data/talents/uber/uber.lua @@ -24,6 +24,16 @@ newTalentType{ hide = true, type="uber/magic", name = "magic", description = "Ul newTalentType{ hide = true, type="uber/willpower", name = "willpower", description = "Ultimate talents you may only know one." } newTalentType{ hide = true, type="uber/cunning", name = "cunning", description = "Ultimate talents you may only know one." } + +knowRessource = function(self, r, v) + local cnt = 0 + for tid, l in pairs(self.talents) do + local t = self:getTalentFromId(tid) + if rawget(t, r) or rawget(t, "sustain_"..r) then cnt = cnt + l end + end + return cnt >= v +end + uberTalent = function(t) t.type = {"uber/strength", 1} t.uber = true diff --git a/game/modules/tome/data/talents/uber/wil.lua b/game/modules/tome/data/talents/uber/wil.lua index 93144d4873e8f5ad4cd771037d1a2b4b90d87d2a..2434f232a72c1965713fab7ebdf25300795d66cd 100644 --- a/game/modules/tome/data/talents/uber/wil.lua +++ b/game/modules/tome/data/talents/uber/wil.lua @@ -19,7 +19,7 @@ uberTalent{ name = "Draconic Will", - cooldown = 20, + cooldown = 15, no_energy = true, action = function(self, t) self:setEffect(self.EFF_DRACONIC_WILL, 5, {}) diff --git a/game/modules/tome/data/zones/wilderness/zone.lua b/game/modules/tome/data/zones/wilderness/zone.lua index c4cf10ecace89133b24349a5cce24511ed253384..58427ec5a86cc64a68b0c114157402010ab2d83b 100644 --- a/game/modules/tome/data/zones/wilderness/zone.lua +++ b/game/modules/tome/data/zones/wilderness/zone.lua @@ -19,7 +19,7 @@ return { name = "World of Eyal", - display_name = function(x, y) return game.level.map.attrs(x or game.player.x, y or game.player.y, "zonename") or "Eyal" end, + display_name = function(x, y) return game.level and game.level.map.attrs(x or game.player.x, y or game.player.y, "zonename") or "Eyal" end, variable_zone_name = true, level_range = {1, 1}, max_level = 1, diff --git a/game/modules/tome/dialogs/UberTalent.lua b/game/modules/tome/dialogs/UberTalent.lua index 1c672f23fc6ad870c2722c85f1f34bbb4ec57cbe..d2aac74fa44df73b0a0752beac4b1f7ac5d03e73 100644 --- a/game/modules/tome/dialogs/UberTalent.lua +++ b/game/modules/tome/dialogs/UberTalent.lua @@ -107,6 +107,7 @@ function _M:onSelect(item) end function _M:use(item) + self.actor:learnTalent(item.data.talent, true) end function _M:getTalentDesc(item) diff --git a/game/modules/tome/init.lua b/game/modules/tome/init.lua index 8151d178219033da1b8a296e5d48c26d127e35d8..b6a9c96632090f80e9ad89cd39b85d4cdad50a52 100644 --- a/game/modules/tome/init.lua +++ b/game/modules/tome/init.lua @@ -22,8 +22,8 @@ long_name = "Tales of Maj'Eyal: Age of Ascendancy" short_name = "tome" author = { "DarkGod", "darkgod@te4.org" } homepage = "http://te4.org/" -version = {0,9,42} -engine = {0,9,42,"te4"} +version = {0,9,43} +engine = {0,9,43,"te4"} description = [[ Welcome to Maj'Eyal.