Skip to content
Snippets Groups Projects
Commit b75fb9a9 authored by Grayswandir's avatar Grayswandir
Browse files

Adds 'Advanced Weapon Stats' option to display actual weapon power.

parent fe773c80
No related branches found
No related tags found
No related merge requests found
......@@ -66,7 +66,7 @@ function _M:getRequirementDesc(who)
if self.require.stat and self.require.stat.str then
self.require.stat.mag, self.require.stat.str = self.require.stat.str, nil
end
local desc = base_getRequirementDesc(self, who)
self.require = oldreq
......@@ -171,6 +171,13 @@ end
--- Describes an attribute, to expand object name
function _M:descAttribute(attr)
local power = function(c)
if config.settings.tome.advanced_weapon_stats then
return math.floor(Combat.combatDamagePower({}, self.combat)*1000).." power"
else
return c.dam.."-"..(c.dam*(c.damrange or 1.1)).." power"
end
end
if attr == "MASTERY" then
local tms = {}
for ttn, i in pairs(self.wielder.talents_types_mastery) do
......@@ -194,20 +201,20 @@ function _M:descAttribute(attr)
return ("%s%0.2f/turn"):format(i > 0 and "+" or "-", math.abs(i))
elseif attr == "COMBAT" then
local c = self.combat
return c.dam.."-"..(c.dam*(c.damrange or 1.1)).." power, "..(c.apr or 0).." apr"
return power(c)..", "..(c.apr or 0).." apr"
elseif attr == "COMBAT_AMMO" then
local c = self.combat
return c.shots_left.."/"..math.floor(c.capacity)..", "..c.dam.."-"..(c.dam*(c.damrange or 1.1)).." power, "..(c.apr or 0).." apr"
return c.shots_left.."/"..math.floor(c.capacity)..", "..power(c)..", "..(c.apr or 0).." apr"
elseif attr == "COMBAT_DAMTYPE" then
local c = self.combat
return c.dam.."-"..(c.dam*(c.damrange or 1.1)).." power, "..("%d"):format((c.apr or 0)).." apr, "..DamageType:get(c.damtype).name.." damage"
return power(c)..", "..("%d"):format((c.apr or 0)).." apr, "..DamageType:get(c.damtype).name.." damage"
elseif attr == "COMBAT_ELEMENT" then
local c = self.combat
return c.dam.."-"..(c.dam*(c.damrange or 1.1)).." power, "..("%d"):format((c.apr or 0)).." apr, "..DamageType:get(c.element or DamageType.PHYSICAL).name.." element"
return power(c)..", "..("%d"):format((c.apr or 0)).." apr, "..DamageType:get(c.element or DamageType.PHYSICAL).name.." element"
elseif attr == "SHIELD" then
local c = self.special_combat
if c and (game.player:knowTalentType("technique/shield-offense") or game.player:knowTalentType("technique/shield-defense") or game.player:attr("show_shield_combat")) then
return c.dam.." dam, "..c.block.." block"
return power(c)..", "..c.block.." block"
else
return c.block.." block"
end
......@@ -311,7 +318,7 @@ function _M:getName(t)
if not t.no_add_name and (self.been_reshaped or self.been_imbued) then
name = (type(self.been_reshaped) == "string" and self.been_reshaped or "") .. name .. (type(self.been_imbued) == "string" and self.been_imbued or "")
end
if not self:isIdentified() and not t.force_id and self:getUnidentifiedName() then name = self:getUnidentifiedName() end
-- To extend later
......@@ -580,7 +587,11 @@ function _M:getTextualDesc(compare_with, use_actor)
else
power_diff = ("(%s)"):format(power_diff)
end
desc:add(("Base power: %.1f - %.1f"):format((combat.dam or 0) + (add_table.dam or 0), ((combat.damrange or (1.1 - (add_table.damrange or 0))) + (add_table.damrange or 0)) * ((combat.dam or 0) + (add_table.dam or 0))))
if config.settings.tome.advanced_weapon_stats then
desc:add(("Power: %4d Range: %.1fx"):format(use_actor:combatDamagePower(combat, add_table.dam) * 1000, use_actor:combatDamageRange(combat, add_table.damrange)))
else
desc:add(("Base power: %.1f - %.1f"):format((combat.dam or 0) + (add_table.dam or 0), ((combat.damrange or (1.1 - (add_table.damrange or 0))) + (add_table.damrange or 0)) * ((combat.dam or 0) + (add_table.dam or 0))))
end
desc:merge(power_diff:toTString())
desc:add(true)
desc:add(("Uses stat%s: %s"):format(#dm > 1 and "s" or "",table.concat(dm, ', ')), true)
......@@ -1089,7 +1100,7 @@ function _M:getTextualDesc(compare_with, use_actor)
desc:add(("Talent master%s: "):format(any_mastery > 1 and "ies" or "y"))
for ttn, ttid in pairs(masteries) do
local tt = Talents.talents_types_def[ttn]
if tt then
if tt then
local cat = tt.type:gsub("/.*", "")
local name = cat:capitalize().." / "..tt.name:capitalize()
local diff = (ttid[2] or 0) - (ttid[1] or 0)
......
......@@ -1311,9 +1311,9 @@ function _M:combatCrit(weapon)
end
--- Gets the damage range
function _M:combatDamageRange(weapon)
function _M:combatDamageRange(weapon, add)
weapon = weapon or self.combat or {}
return (self.combat_damrange or 0) + (weapon.damrange or 1.1)
return (self.combat_damrange or 0) + (weapon.damrange or 1.1) + (add or 0)
end
--- Scale damage values
......@@ -1546,12 +1546,17 @@ function _M:combatDamage(weapon, adddammod)
local talented_mod = 1 + self:combatTrainingPercentInc(weapon)
local power = math.max((weapon.dam or 1), 1)
power = (math.sqrt(power / 10) - 1) * 0.5 + 1
local power = self:combatDamagePower(weapon)
-- print(("[COMBAT DAMAGE] power(%f) totstat(%f) talent_mod(%f)"):format(power, totstat, talented_mod))
return self:rescaleDamage(0.3*(self:combatPhysicalpower(nil, weapon) + totstat) * power * talented_mod)
end
--- Gets the 'power' portion of the damage
function _M:combatDamagePower(weapon_combat, add)
local power = math.max((weapon_combat.dam or 1) + (add or 0), 1)
return (math.sqrt(power / 10) - 1) * 0.5 + 1
end
function _M:combatPhysicalpower(mod, weapon, add)
mod = mod or 1
add = add or 0
......
......@@ -344,6 +344,15 @@ function _M:generateListUi()
if game.player.updateMainShader then game.player:updateMainShader() end
end,}
local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Toggles advanced weapon statistics display.#WHITE#"}
list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Advanced Weapon Statistics#WHITE##{normal}#", status=function(item)
return tostring(config.settings.tome.advanced_weapon_stats and "enabled" or "disabled")
end, fct=function(item)
config.settings.tome.advanced_weapon_stats = not config.settings.tome.advanced_weapon_stats
game:saveSettings("tome.advanced_weapon_stats", ("tome.advanced_weapon_stats = %s\n"):format(tostring(config.settings.tome.advanced_weapon_stats)))
self.c_list:drawItem(item)
end,}
self.list = list
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment