Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
MeAndUnique committed Aug 30, 2022
2 parents aa4ada6 + ba8a3a7 commit aa857f3
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 62 deletions.
8 changes: 4 additions & 4 deletions scripts/manager_action_attack_5e_tmt.lua
Expand Up @@ -54,13 +54,13 @@ end

function attackMatchesResultCondition(rTriggerData, rEventData)
if rTriggerData.sAttackResult == "attack_result_property_hit" then
return string.match(rEventData.rRoll.sResults, "%[HIT%]") ~= nil or string.match(rEventData.sResults, "%[AUTOMATIC HIT%]") ~= nil;
return (rEventData.rRoll.sResult == "hit") or (rEventData.rRoll.sResult == "crit");
elseif rTriggerData.sAttackResult == "attack_result_property_critical" then
return string.match(rEventData.rRoll.sResults, "%[CRITICAL HIT%]") ~= nil;
return rEventData.rRoll.sResult == "crit";
elseif rTriggerData.sAttackResult == "attack_result_property_miss" then
return string.match(rEventData.rRoll.sResults, "%[MISS%]") ~= nil
return (rEventData.rRoll.sResult == "miss") or (rEventData.rRoll.sResult == "fumble");
elseif rTriggerData.sAttackResult == "attack_result_property_fumble" then
return string.match(rEventData.rRoll.sResults, "%[AUTOMATIC MISS%]") ~= nil or string.match(rEventData.sResults, "%[FUMBLE%]") ~= nil
return rEventData.rRoll.sResult == "miss";
end

return false;
Expand Down
86 changes: 28 additions & 58 deletions scripts/manager_action_damage_5e_tmt.lua
Expand Up @@ -4,16 +4,9 @@
--

local getDamageAdjustOriginal;
local decodeDamageTextOriginal;
local applyDamageOriginal;
local messageDamageOriginal;

local mathMaxOriginal;
local stringFormatOriginal;

local rActiveSource = nil;
local rActiveTarget = nil;
local rActiveDamageOutput = nil;
local bPrepareForBeforeDamageEvent = false;

rBeforeDamageTakenEvent = {
Expand All @@ -32,8 +25,6 @@ rModifyDamageAction = nil;
function onInit()
getDamageAdjustOriginal = ActionDamage.getDamageAdjust;
ActionDamage.getDamageAdjust = getDamageAdjust;
decodeDamageTextOriginal = ActionDamage.decodeDamageText;
ActionDamage.decodeDamageText = decodeDamageText;
applyDamageOriginal = ActionDamage.applyDamage;
ActionDamage.applyDamage = applyDamage;
messageDamageOriginal = ActionDamage.messageDamage;
Expand Down Expand Up @@ -176,60 +167,40 @@ function intializeActions()
TriggerManager.defineAction(rEnsureRemainingHitpointsAction);
end

function mathMax(adjustedWounds, zero)
math.max = mathMaxOriginal;

-- TODO account for tempHP damage by checking against the getDamageAdjust output
local nWounds = getWounds(rActiveTarget);
local nDamage = nWounds - adjustedWounds;
local nTotal = getTotalHitPoints(rActiveTarget);

local rEventData = {rSource=rActiveSource, rTarget=rActiveTarget, nDamage=nDamage, nWounds=nWounds, nHitpoints=nTotal};
TriggerManager.fireEvent(rBeforeDamageTakenEvent.sName, rEventData);

return math.max(nWounds - rEventData.nDamage, zero);
end

-- In the event that math.max isn't invoked first, ensure that it is reset.
function stringFormat(sFormat, ...)
math.max = mathMaxOriginal;
string.format = stringFormatOriginal;
return string.format(sFormat, unpack(arg));
end


function getDamageAdjust(rSource, rTarget, nDamage, rDamageOutput)
local results = {getDamageAdjustOriginal(rSource, rTarget, nDamage, rDamageOutput)};
rTarget.rDamageOutput = rDamageOutput;
local nDamageAdjust, bVulnerable, bResist = getDamageAdjustOriginal(rSource, rTarget, nDamage, rDamageOutput);

if bPrepareForBeforeDamageEvent then
mathMaxOriginal = math.max;
math.max = mathMax;
stringFormatOriginal = string.format;
string.format = stringFormat;
local nWounds = getWounds(rTarget);
local nTotal = getTotalHitPoints(rTarget);
local nTemporaryHitpoints = getTemporaryHitPoints(rTarget);
local rEventData = {
rSource = rSource,
rTarget = rTarget,
nDamage = rDamageOutput.nVal + nDamageAdjust,
nWounds = nWounds,
nHitpoints = nTotal,
nTemporaryHitpoints = nTemporaryHitpoints
};
TriggerManager.fireEvent(rBeforeDamageTakenEvent.sName, rEventData);

if rEventData.nAdjust then
nDamageAdjust = nDamageAdjust + rEventData.nAdjust;
end
end

bPrepareForBeforeDamageEvent = false;
return unpack(results);
end

function decodeDamageText(nDamage, sDamageDesc)
rActiveDamageOutput = decodeDamageTextOriginal(nDamage, sDamageDesc);
return rActiveDamageOutput;
return nDamageAdjust, bVulnerable, bResist;
end

function applyDamage(rSource, rTarget, bSecret, sDamage, nTotal)
rActiveSource = rSource;
rActiveTarget = rTarget;
function applyDamage(rSource, rTarget, rRoll)
bPrepareForBeforeDamageEvent = true;
applyDamageOriginal(rSource, rTarget, bSecret, sDamage, nTotal);
applyDamageOriginal(rSource, rTarget, rRoll);
end

function messageDamage(rSource, rTarget, bSecret, sDamageType, sDamageDesc, sTotal, sExtraResult)
messageDamageOriginal(rSource, rTarget, bSecret, sDamageType, sDamageDesc, sTotal, sExtraResult);

rActiveSource = nil;
rActiveTarget = nil;
rActiveDamageOutput = nil;
function messageDamage(rSource, rTarget, rRoll)
messageDamageOriginal(rSource, rTarget, rRoll);
end

function targetHasCurrentHitpoints(rTriggerData, rEventData)
Expand Down Expand Up @@ -322,12 +293,11 @@ function getWounds(rActor, sType, nodeActor)
end

function ensureRemainingHitpoints(rTriggerData, rEventData)
local nCurrent = rEventData.nHitpoints - rEventData.nWounds;
local nInitialDamage = rEventData.nDamage;
rEventData.nDamage = math.max(rEventData.nDamage, rTriggerData.nMinimum - nCurrent);
local nCurrent = rEventData.nHitpoints + rEventData.nTemporaryHitpoints - rEventData.nWounds;
rEventData.nAdjust = math.min(0, nCurrent - rTriggerData.nMinimum - rEventData.nDamage);

if nInitialDamage ~= rEventData.nDamage then
table.insert(rActiveDamageOutput.tNotifications, rTriggerData.sMessage);
if rEventData.nAdjust ~= 0 then
table.insert(rEventData.rTarget.rDamageOutput.tNotifications, rTriggerData.sMessage);
end
end

Expand Down Expand Up @@ -361,7 +331,7 @@ function modifyDamage(rTriggerData, rEventData)
end

if nInitialDamage ~= rEventData.nDamage then
table.insert(rActiveDamageOutput.tNotifications, rTriggerData.sMessage);
table.insert(rEventData.rTarget.rDamageOutput.tNotifications, rTriggerData.sMessage);
end
end

Expand Down

0 comments on commit aa857f3

Please sign in to comment.