PDA

View Full Version : Pathfinder Dying rules



Eternall
July 2nd, 2013, 17:46
Hi,

I 'm not sure but I think that dying rules are not correctly applied in fantasy grounds, for Pathfinder.

I'm talking about this part of rules : "If your hit point total is negative, but not equal to or greater than your Constitution score, you’re dying."

In FG, a dying character makes a Contitution check to become stable, and dies when his wounds reach his HP +10. like i 3.5E.

Do i make a mistake ?

Trenloe
July 2nd, 2013, 17:53
Sounds like you're running the 3.5e/Pathfinder ruleset in 3.5e mode. Make sure the "Game System" option under the options menu (check box icon in the top right) is set to PFRPG.

If PFRPG is selected the dying threshold will be set to the current CON of the target.

Eternall
July 2nd, 2013, 21:52
Well, my game option is set to PFRPG. My characters still make CON checks to become stable , but when they reach their HP+10, FG stops to make rolls.

Trenloe
July 2nd, 2013, 22:21
Well, my game option is set to PFRPG. My characters still make CON checks to become stable , but when they reach their HP+10, FG stops to make rolls.
The status of a PC or NPC will show as "Dying" until they reach negative CON, at which point the status will change to "Dead". This is what I was referring to in my post.

But, as you have found out, it seems that the stabilisation logic does not take this into account and stops the stabilisation roll at 10.

Looking at the 3.5e ruleset code, in \ct\scripts\manager_ct.lua:

function nextActor(bSkipBell)
local nodeActive = getActiveCT();

-- Check for stabilization
local sOptionHRST = OptionsManager.getOption("HRST");
if sOptionHRST ~= "off" then
if nodeActive then
if (sOptionHRST == "all") or (DB.getValue(nodeActive, "friendfoe", "") == "friend") then
local nHP = DB.getValue(nodeActive, "hp", 0);
local nWounds = DB.getValue(nodeActive, "wounds", 0);
local nDying = GameSystemManager.getDeathThreshold(rActor);
if nHP > 0 and nWounds > nHP and nWounds < nHP + nDying then
local rActor = ActorManager.getActor("ct", nodeActive);
if not EffectsManager.hasEffect(rActor, "Stable") then
ActionDamage.performStabilizationRoll(rActor);
end
end
end
end
end
We see that the code to get the death threshold is being called, but the "rActor" variable is not available at this point so ndying is returned as default, which is 10. If the code is changed to get rActor before calling getDeathThreshold then this will work properly and return the CON value in nDying:

function nextActor(bSkipBell)
local nodeActive = getActiveCT();

-- Check for stabilization
local sOptionHRST = OptionsManager.getOption("HRST");
if sOptionHRST ~= "off" then
if nodeActive then
if (sOptionHRST == "all") or (DB.getValue(nodeActive, "friendfoe", "") == "friend") then
local nHP = DB.getValue(nodeActive, "hp", 0);
local nWounds = DB.getValue(nodeActive, "wounds", 0);
local rActor = ActorManager.getActor("ct", getActiveCT());
local nDying = GameSystemManager.getDeathThreshold(rActor);
if nHP > 0 and nWounds > nHP and nWounds < nHP + nDying then
local rActor = ActorManager.getActor("ct", nodeActive);
if not EffectsManager.hasEffect(rActor, "Stable") then
ActionDamage.performStabilizationRoll(rActor);
end
end
end
end
end

lachancery
July 2nd, 2013, 23:47
Good job on spotting that bug! :)

Eternall
July 3rd, 2013, 01:09
Really Thank you Trenloe, it works perfectly now ;)