The 1 failure on saves

User-to-User support and questions to the Developers and DM team.
Locked
Agifem
Noob
Posts: 13
Joined: Wed Mar 05, 2003 9:24 am
Location: Look ! Behind you ! *runs away*
Contact:

The 1 failure on saves

Post by Agifem »

The forums says : "User-to-User support and questions to the Developers and DM team." I have a question for the dev team : How did you remove the 1 failure on saving throws ? I'm not a dev of any kind, just a curious programmer. I've taken a look at the code, I've read much about how everyone seems unable to solve that problem.
A paladin needs Charisma, Strengh, Wisdom, Constitution, and a bit of Dexterity. That does not leave much for Intelligence...

I'm sorry about my bad english, i'm french.
In every lie lies a part of truth.

User avatar
Joran
Spamalot
Posts: 584
Joined: Mon Dec 16, 2002 1:00 am
Location: Austin, TX

Post by Joran »

It's pretty simple, actually. The reason auto-fail is a problem is that it causes things that shouldn't ever fail a certain saving throw to fail those throws. Instead of bothering with all sorts of complicated checks, we only deal with one: if creature x fails a saving throw, override that and call it saved if x's base save + 1 is greater than the DC of the save.

Base save < x, DC x: Roll a 1, fail.
Base save >= x, DC x: Roll a 1, succeed.

Agifem
Noob
Posts: 13
Joined: Wed Mar 05, 2003 9:24 am
Location: Look ! Behind you ! *runs away*
Contact:

Post by Agifem »

But that would require to modify the function that rolls the saves, shouldn't it ? And I haven't found any way to access such a function, not to mention modify it. But I must admit I am an amateur scripter.
A paladin needs Charisma, Strengh, Wisdom, Constitution, and a bit of Dexterity. That does not leave much for Intelligence...

I'm sorry about my bad english, i'm french.
In every lie lies a part of truth.

User avatar
Joran
Spamalot
Posts: 584
Joined: Mon Dec 16, 2002 1:00 am
Location: Austin, TX

Post by Joran »

no, instead of calling said function directly, call a wrapper to it:

Code: Select all

int FixedSavingThrowFunction(...)
{
    int nTest = OriginalSavingThrowFunction(...);
    if(nTest == FALSE)
    {
        if((nBaseSave + 1) >= DC) 
        { 
            // Override the original function
            return TRUE;
        }
    }

    // Don't override
    return nTest;
}
Granted, this means you must replace all instances of OriginalSavingThrowFunction with FixedSavingThrowFunction, but since in NS4 we re-wrote every Bioware script anyway, that wasn't much of an issue ;)

Agifem
Noob
Posts: 13
Joined: Wed Mar 05, 2003 9:24 am
Location: Look ! Behind you ! *runs away*
Contact:

Post by Agifem »

Oh, smart. I imagine it took some work for all the spells (i've seen my spellbook :p ), but what about the effects, like disease or vorpal ? They have a script as well ?
A paladin needs Charisma, Strengh, Wisdom, Constitution, and a bit of Dexterity. That does not leave much for Intelligence...

I'm sorry about my bad english, i'm french.
In every lie lies a part of truth.

Lokey
-2 Penalty in Daylight
Posts: 3094
Joined: Mon Dec 16, 2002 6:49 pm
Contact:

Post by Lokey »

Diseases are scripted and so can be passed through a save function as Joran outlined.

On hit effects are engine though, and are responsible for more insta-kill exploits than I care to list here.

For weapons, on hit cast spell plus dynamic item properties are your friends for giving you an event hook to do things like slay, vorpal, dev crit or dispel with some kind of sanity. It's on our list of things to do...of course that list is rather extensive.
Tep wrote:I login and there's a dwarf to kill. You can't ask for much more than that.
Alkapwn wrote:NC has the most amazing melee build there is. Its a friggin unstopable juggernaut of pain.

Agifem
Noob
Posts: 13
Joined: Wed Mar 05, 2003 9:24 am
Location: Look ! Behind you ! *runs away*
Contact:

Post by Agifem »

D'oh ! So, basically, you solved all spells and spell like abilities, all poisons and diseases, but only Bioware can solve the other various stuff like vorpal, slay and dev crit and all ... Well, I know who should be cursed then :roll: ... how do you spell Bioware again ?

Anyway, thanks for all the answers :D
A paladin needs Charisma, Strengh, Wisdom, Constitution, and a bit of Dexterity. That does not leave much for Intelligence...

I'm sorry about my bad english, i'm french.
In every lie lies a part of truth.

Agifem
Noob
Posts: 13
Joined: Wed Mar 05, 2003 9:24 am
Location: Look ! Behind you ! *runs away*
Contact:

Post by Agifem »

Oh, by the way, I was thinking if something like this would improve processing speed, since it doesn't test at all if the creature can't fail (or can't succeed, you get my point)

Code: Select all

int FixedSavingThrowFunction(...)
{
if((nBaseSave + 1) >= DC) 
   { 
    return TRUE;
    }

int nTest = OriginalSavingThrowFunction(...);
    return nTest;
}
Now, it all depends if you see more automatic success rolls or more potential failing rolls, but i think the small if shouldn't take too much time to process. What do you think ?
A paladin needs Charisma, Strengh, Wisdom, Constitution, and a bit of Dexterity. That does not leave much for Intelligence...

I'm sorry about my bad english, i'm french.
In every lie lies a part of truth.

User avatar
Joran
Spamalot
Posts: 584
Joined: Mon Dec 16, 2002 1:00 am
Location: Austin, TX

Post by Joran »

Agifem - the reason it wouldn't work as well that way is that the "OriginalSavingThrowFunction" is what actually performs the throw (and does the display on the player's screen). We still want the throw to be performed, we just want to override it when it says a 1 is a failure when it's not.

Consequenlty, you may see - "saving throw failed" in the status screen when it actually succeeds, but there's nothing we can do about that.

Agifem
Noob
Posts: 13
Joined: Wed Mar 05, 2003 9:24 am
Location: Look ! Behind you ! *runs away*
Contact:

Post by Agifem »

What about that ?

Code: Select all

int FixedSavingThrowFunction(...)
{
if((nBaseSave + 1) >= DC) 
   { 
    print("automatic success gna gna gna save 49 vs DC 12 gna gna gna");
    return TRUE;
    }

int nTest = OriginalSavingThrowFunction(...);
    return nTest;
}
This way, you save time, the message appears correctly and everybody's happy (and i know there is no such function as "print", but i'm quite new to that, and i don't remember the function name).
This is just my idea. Feel free to not like it.
A paladin needs Charisma, Strengh, Wisdom, Constitution, and a bit of Dexterity. That does not leave much for Intelligence...

I'm sorry about my bad english, i'm french.
In every lie lies a part of truth.

Locked

Return to “NS4 Help and Support”