Skip to content
Snippets Groups Projects
Commit b6c973ff authored by DarkGod's avatar DarkGod
Browse files

Merge branch 'detailed-weapon' into 'master'

Detailed weapon

Adds the option to show base weapon damage as the actual multiplier it ends up being.
parents 4bb1870d 080eff59
No related branches found
No related tags found
No related merge requests found
......@@ -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)*100).."% 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
......@@ -602,7 +609,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: %3d%% Range: %.1fx"):format(use_actor:combatDamagePower(combat, add_table.dam) * 100, 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)
......
......@@ -1312,9 +1312,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
......@@ -1547,12 +1547,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