From 893937108bdd308f6ad35b415fbc1dcb1df03e91 Mon Sep 17 00:00:00 2001 From: Rabbit Whispers Date: Fri, 20 Jun 2025 22:00:16 -0500 Subject: whispers-qol: patch auto-transmo-gems to ignore stun resist and damage pen gems --- install.sh | 3 +- rabbit-bugfix/CHANGELOG.md | 13 ------ rabbit-bugfix/data/.keep | 0 rabbit-bugfix/hooks/load.lua | 16 -------- rabbit-bugfix/init.lua | 19 --------- rabbit-bugfix/overload/.keep | 0 .../superload/data/timed_effects/magical.lua | 47 ---------------------- rabbit-bugfix/superload/mod/class/Actor.lua | 11 ----- whispers-bugfix/CHANGELOG.md | 13 ++++++ whispers-bugfix/data/.keep | 0 whispers-bugfix/hooks/load.lua | 16 ++++++++ whispers-bugfix/init.lua | 19 +++++++++ whispers-bugfix/overload/.keep | 0 .../superload/data/timed_effects/magical.lua | 47 ++++++++++++++++++++++ whispers-bugfix/superload/mod/class/Actor.lua | 11 +++++ whispers-qol/data/.keep | 0 whispers-qol/hooks/load.lua | 0 whispers-qol/init.lua | 19 +++++++++ whispers-qol/overload/.keep | 0 whispers-qol/superload/mod/class/Player.lua | 18 +++++++++ 20 files changed, 145 insertions(+), 107 deletions(-) delete mode 100644 rabbit-bugfix/CHANGELOG.md delete mode 100644 rabbit-bugfix/data/.keep delete mode 100644 rabbit-bugfix/hooks/load.lua delete mode 100644 rabbit-bugfix/init.lua delete mode 100644 rabbit-bugfix/overload/.keep delete mode 100644 rabbit-bugfix/superload/data/timed_effects/magical.lua delete mode 100644 rabbit-bugfix/superload/mod/class/Actor.lua create mode 100644 whispers-bugfix/CHANGELOG.md create mode 100644 whispers-bugfix/data/.keep create mode 100644 whispers-bugfix/hooks/load.lua create mode 100644 whispers-bugfix/init.lua create mode 100644 whispers-bugfix/overload/.keep create mode 100644 whispers-bugfix/superload/data/timed_effects/magical.lua create mode 100644 whispers-bugfix/superload/mod/class/Actor.lua create mode 100644 whispers-qol/data/.keep create mode 100644 whispers-qol/hooks/load.lua create mode 100644 whispers-qol/init.lua create mode 100644 whispers-qol/overload/.keep create mode 100644 whispers-qol/superload/mod/class/Player.lua diff --git a/install.sh b/install.sh index cfcc1a4..e8c7855 100755 --- a/install.sh +++ b/install.sh @@ -1,9 +1,10 @@ function update_mod { + echo "updating $1..." cd $1 zip -r --filesync tome-$1.teaa init.lua data hooks overload superload install -m755 tome-$1.teaa $HOME/games/steam/TalesMajEyal/game/addons/tome-$1.teaa cd - } -update_mod rabbit-bugfix update_mod auto-tune +update_mod whispers-bugfix diff --git a/rabbit-bugfix/CHANGELOG.md b/rabbit-bugfix/CHANGELOG.md deleted file mode 100644 index a1373b1..0000000 --- a/rabbit-bugfix/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# Changelog - -All ntoable changes to this project will be documented in this file. - -This format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - -## [Unreleased] - -### Added - -- Passives update when taking Adept or equipping/unequipping talents\_mastery\_bonus items. - (This change by yutio888 was merged to the t-engine4 master branch but wasn't included in tome-1.7) -- Rime Wraith jumps when target is killed instead of disappearing entirely. diff --git a/rabbit-bugfix/data/.keep b/rabbit-bugfix/data/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/rabbit-bugfix/hooks/load.lua b/rabbit-bugfix/hooks/load.lua deleted file mode 100644 index 55290e7..0000000 --- a/rabbit-bugfix/hooks/load.lua +++ /dev/null @@ -1,16 +0,0 @@ -class:bindHook("ToME:load", function(self, data) - local Talents = require 'engine.interface.ActorTalents' - - -- update passives when adept is taken - if Talents.talents_def.T_ADEPT then - Talents.talents_def.T_ADEPT.passives = function(self, t, p) - self:talentTemporaryValue(p, "all_talents_bonus_level", 1.5) - - if not self._updating_adept then - self._updating_adept = true - self:updateAllTalentsPassives() - self._updating_adept = nil - end - end - end -end) diff --git a/rabbit-bugfix/init.lua b/rabbit-bugfix/init.lua deleted file mode 100644 index 8b4dbcf..0000000 --- a/rabbit-bugfix/init.lua +++ /dev/null @@ -1,19 +0,0 @@ -long_name = "Rabbit Bugfixes" -short_name = "rabbit-bugfix" -for_module = "tome" -addon_version = {0,1,0} -version = {1,7,6} -weight = 0 -author = {'Rabbit Whispers'} -homepage = {'starfall.systems'} -description = [[Rabbit Whispers' bugfix collection: - -- Adept and talents_mastery_bonus items now update passives (h/t yutio888) -- Rime Wraith jumps when target is killed -]] -tags = {} - -data = false -hooks = true -overload = false -superload = true diff --git a/rabbit-bugfix/overload/.keep b/rabbit-bugfix/overload/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/rabbit-bugfix/superload/data/timed_effects/magical.lua b/rabbit-bugfix/superload/data/timed_effects/magical.lua deleted file mode 100644 index c9d2e8c..0000000 --- a/rabbit-bugfix/superload/data/timed_effects/magical.lua +++ /dev/null @@ -1,47 +0,0 @@ -local _M = loadPrevious(...) - -local rime_wraith_jump = function(self, eff) - -- JUMP! - local list = table.values(self:projectCollect({type="ball", radius=10, selffire=false}, self.x, self.y, map.ACTOR)) - if #list == 0 then return end - local has = function(t) return t.target:hasEffect(t.target.EFF_HOARFROST_GOOD) or t.target:hasEffect(t.target.EFF_HOARFROST_BAD) end - local has_wraith = function(t) return t:hasEffect(t.EFF_RIME_WRAITH) or t:hasEffect(t.EFF_RIME_WRAITH_GELID_HOST) end - local list_has, list_not = {}, {} - for _, t in ipairs(list) do if has(t) then list_has[#list_has+1] = t else list_not[#list_not+1] = t end end - local use_list = #list_not > 0 and list_not or list_has - - local target - if eff.src:knowTalent(eff.src.T_FRIGID_PLUNGE) then - table.sort(use_list, "dist") - while #use_list > 0 do - target = table.remove(use_list).target - if not (has_wraith(target) and #use_list > 0) then break end - end - else - while #use_list > 0 do - target = rng.table(use_list).target - if not (has_wraith(target) and #user_list > 0) then break end - end - end - self:removeEffect(eff.effect_id) -- is this still necessary? self should be dead, after all - target:setEffect(eff.effect_id, eff.dur, eff) - game.level.map:particleEmitter(self.x, self.y, 1, "rime_wraith_move", {tx=target.x-self.x, ty=target.y-self.y}) - - if eff.src:knowTalent(eff.src.T_FRIGID_PLUNGE) then - local heal = eff.src:callTalent(eff.src.T_FRIGID_PLUNGE, "getHeal") - local dam = eff.src:callTalent(eff.src.T_FRIGID_PLUNGE, "getDamage") - eff.src.projectApply({type="beam", range=10, x=self.x, y=self.y}, target.x, target.y, Map.ACTOR, function(m) - if eff.src.reactionToward(m) <0 then - eff.src:attr("damage_shield_penetrate", 100) - pcall(function() DamageType:get(DamageType.COLD).projector(eff.src, m.x, m.y, DamageType.COLD, dam) end) - eff.src:attr("damage_shield_penetrate", -100) - else - m:heal(heal, eff.src) - end - end) - end -end -TemporaryEffects.tempeffect_def.EFF_RIME_WRAITH.callbackOnDeath = rime_wraith_jump -TemporaryEffects.tempeffect_def.EFF_RIME_WRAITH_GELID_HOST.callbackOnDeath = rime_wraith_jump - -return _M diff --git a/rabbit-bugfix/superload/mod/class/Actor.lua b/rabbit-bugfix/superload/mod/class/Actor.lua deleted file mode 100644 index 6084cd6..0000000 --- a/rabbit-bugfix/superload/mod/class/Actor.lua +++ /dev/null @@ -1,11 +0,0 @@ -local _M = loadPrevious(...) - -local base_onTemporaryValueChange = _M.onTemporaryValueChange -function _M:onTemporaryValueChange(prop, v, base) - if base == self.talents_mastery_bonus then - self:updateAllTalentsPassives() - end - base_onTemporaryValueChange(self, prop, v, base) -end - -return _M diff --git a/whispers-bugfix/CHANGELOG.md b/whispers-bugfix/CHANGELOG.md new file mode 100644 index 0000000..a1373b1 --- /dev/null +++ b/whispers-bugfix/CHANGELOG.md @@ -0,0 +1,13 @@ +# Changelog + +All ntoable changes to this project will be documented in this file. + +This format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). + +## [Unreleased] + +### Added + +- Passives update when taking Adept or equipping/unequipping talents\_mastery\_bonus items. + (This change by yutio888 was merged to the t-engine4 master branch but wasn't included in tome-1.7) +- Rime Wraith jumps when target is killed instead of disappearing entirely. diff --git a/whispers-bugfix/data/.keep b/whispers-bugfix/data/.keep new file mode 100644 index 0000000..e69de29 diff --git a/whispers-bugfix/hooks/load.lua b/whispers-bugfix/hooks/load.lua new file mode 100644 index 0000000..55290e7 --- /dev/null +++ b/whispers-bugfix/hooks/load.lua @@ -0,0 +1,16 @@ +class:bindHook("ToME:load", function(self, data) + local Talents = require 'engine.interface.ActorTalents' + + -- update passives when adept is taken + if Talents.talents_def.T_ADEPT then + Talents.talents_def.T_ADEPT.passives = function(self, t, p) + self:talentTemporaryValue(p, "all_talents_bonus_level", 1.5) + + if not self._updating_adept then + self._updating_adept = true + self:updateAllTalentsPassives() + self._updating_adept = nil + end + end + end +end) diff --git a/whispers-bugfix/init.lua b/whispers-bugfix/init.lua new file mode 100644 index 0000000..f7f3976 --- /dev/null +++ b/whispers-bugfix/init.lua @@ -0,0 +1,19 @@ +long_name = "Whispers' Bugfixes" +short_name = "whispers_bugfix" +for_module = "tome" +addon_version = {0,1,0} +version = {1,7,6} +weight = 0 +author = {'Rabbit Whispers'} +homepage = {'starfall.systems'} +description = [[Rabbit Whispers' bugfix collection: + +- Adept and talents_mastery_bonus items now update passives (h/t yutio888) +- Rime Wraith jumps when target is killed +]] +tags = {} + +data = false +hooks = true +overload = false +superload = true diff --git a/whispers-bugfix/overload/.keep b/whispers-bugfix/overload/.keep new file mode 100644 index 0000000..e69de29 diff --git a/whispers-bugfix/superload/data/timed_effects/magical.lua b/whispers-bugfix/superload/data/timed_effects/magical.lua new file mode 100644 index 0000000..c9d2e8c --- /dev/null +++ b/whispers-bugfix/superload/data/timed_effects/magical.lua @@ -0,0 +1,47 @@ +local _M = loadPrevious(...) + +local rime_wraith_jump = function(self, eff) + -- JUMP! + local list = table.values(self:projectCollect({type="ball", radius=10, selffire=false}, self.x, self.y, map.ACTOR)) + if #list == 0 then return end + local has = function(t) return t.target:hasEffect(t.target.EFF_HOARFROST_GOOD) or t.target:hasEffect(t.target.EFF_HOARFROST_BAD) end + local has_wraith = function(t) return t:hasEffect(t.EFF_RIME_WRAITH) or t:hasEffect(t.EFF_RIME_WRAITH_GELID_HOST) end + local list_has, list_not = {}, {} + for _, t in ipairs(list) do if has(t) then list_has[#list_has+1] = t else list_not[#list_not+1] = t end end + local use_list = #list_not > 0 and list_not or list_has + + local target + if eff.src:knowTalent(eff.src.T_FRIGID_PLUNGE) then + table.sort(use_list, "dist") + while #use_list > 0 do + target = table.remove(use_list).target + if not (has_wraith(target) and #use_list > 0) then break end + end + else + while #use_list > 0 do + target = rng.table(use_list).target + if not (has_wraith(target) and #user_list > 0) then break end + end + end + self:removeEffect(eff.effect_id) -- is this still necessary? self should be dead, after all + target:setEffect(eff.effect_id, eff.dur, eff) + game.level.map:particleEmitter(self.x, self.y, 1, "rime_wraith_move", {tx=target.x-self.x, ty=target.y-self.y}) + + if eff.src:knowTalent(eff.src.T_FRIGID_PLUNGE) then + local heal = eff.src:callTalent(eff.src.T_FRIGID_PLUNGE, "getHeal") + local dam = eff.src:callTalent(eff.src.T_FRIGID_PLUNGE, "getDamage") + eff.src.projectApply({type="beam", range=10, x=self.x, y=self.y}, target.x, target.y, Map.ACTOR, function(m) + if eff.src.reactionToward(m) <0 then + eff.src:attr("damage_shield_penetrate", 100) + pcall(function() DamageType:get(DamageType.COLD).projector(eff.src, m.x, m.y, DamageType.COLD, dam) end) + eff.src:attr("damage_shield_penetrate", -100) + else + m:heal(heal, eff.src) + end + end) + end +end +TemporaryEffects.tempeffect_def.EFF_RIME_WRAITH.callbackOnDeath = rime_wraith_jump +TemporaryEffects.tempeffect_def.EFF_RIME_WRAITH_GELID_HOST.callbackOnDeath = rime_wraith_jump + +return _M diff --git a/whispers-bugfix/superload/mod/class/Actor.lua b/whispers-bugfix/superload/mod/class/Actor.lua new file mode 100644 index 0000000..6084cd6 --- /dev/null +++ b/whispers-bugfix/superload/mod/class/Actor.lua @@ -0,0 +1,11 @@ +local _M = loadPrevious(...) + +local base_onTemporaryValueChange = _M.onTemporaryValueChange +function _M:onTemporaryValueChange(prop, v, base) + if base == self.talents_mastery_bonus then + self:updateAllTalentsPassives() + end + base_onTemporaryValueChange(self, prop, v, base) +end + +return _M diff --git a/whispers-qol/data/.keep b/whispers-qol/data/.keep new file mode 100644 index 0000000..e69de29 diff --git a/whispers-qol/hooks/load.lua b/whispers-qol/hooks/load.lua new file mode 100644 index 0000000..e69de29 diff --git a/whispers-qol/init.lua b/whispers-qol/init.lua new file mode 100644 index 0000000..a0d6666 --- /dev/null +++ b/whispers-qol/init.lua @@ -0,0 +1,19 @@ +long_name = "Whispers' QoL" +short_name = "whispers_qol" +for_module = "tome" +addon_version = {0,1,0} +version = {1,7,6} +-- weight >50 to patch ZOmnibus +weight = 51 +author = {'Rabbit Whispers'} +homepage = {'starfall.systems'} +description = [[Rabbit Whispers' quality of life collection: + +- Auto-Transmo Gems (if installed) will no longer transmute quartz, turquoise, or bloodstone regardless of settings +]] +tags = { } + +data = false +hooks = false +overload = false +superload = true diff --git a/whispers-qol/overload/.keep b/whispers-qol/overload/.keep new file mode 100644 index 0000000..e69de29 diff --git a/whispers-qol/superload/mod/class/Player.lua b/whispers-qol/superload/mod/class/Player.lua new file mode 100644 index 0000000..3a6068e --- /dev/null +++ b/whispers-qol/superload/mod/class/Player.lua @@ -0,0 +1,18 @@ +local _M = loadPrevious(...) + +-- detect Auto-Transmo Gems, hopefully durably +if type(config.settings.tome.auto_transmo_gems) ~= 'nil' then + local super_pickupFloor = _M.pickupFloor + function _M:pickupFloor(i, vocal, no_sort) + local ret = { super_pickupFloor(self, i, vocal, no_sort) } + + local o = ret[1] + if not (o and type(o) == 'table' and o.type == 'gem' and o.imbue_powers and o.__transmo == true) then + return unpack(ret) + if o.imbue_powers.stun_immune or o.imbue_powers.resists_pen then + o.__transmo = false + end + + return unpack(ret) + end +end -- cgit