• New Horizons on Maelstrom
    Maelstrom New Horizons


    Visit our website www.piratehorizons.com to quickly find download links for the newest versions of our New Horizons mods Beyond New Horizons and Maelstrom New Horizons!

Poll Making the Effect of Poisoned Items "Stack"

Do you think this is a good idea?


  • Total voters
    8

Pieter Boelen

Navigation Officer
Administrator
Storm Modder
Hearts of Oak Donator
Would it be worth to add a "stacking" mechanism to the Poison code? That may not be too difficult.
And it would add an advantage to poisoning characters multiple times.

I think this is the relevant code from PROGRAM\Loc_ai\LAi_character.c:
Code:
      if(CheckAttribute(chr_ai, "poison"))
       {
         chr_ai.poison = stf(chr_ai.poison) - dltTime;
         if(stf(chr_ai.poison) <= 0.0)
         {
           DeleteAttribute(chr_ai, "poison");
         }else{
           // El Rapido -->
           /*hp = hp - dltTime*2.0;
           if(IsCharacterPerkOn(chr_ai, "Toughness"))
           {
             hp = hp - dltTime*1.0;
           }
           else
           {
             hp = hp - dltTime*2.0;
           }*/
           // El Rapido <--
           //Redone by Levis for extra perk(s)
           float multip = 4.0;
           if(CheckPerkForGroup(chr_ai, "DefendPoison")) multip -= 0.5; //party wide
           if(IsCharacterPerkOn(chr_ai, "Toughness")) multip -= 1;
           hp = hp - dltTime*multip;
           //End redo
         }
       }
Not entirely sure what that 'dltTime' input variable does though.... o_O

Anyway, I can think of two options:

1. Have a poison "timer" variable and a poison "intensity" one
The "timer" would get extended when newly poisoned AND the intensity increased.

I think this may get relatively complex and wouldn't always be quite correct either.
Imagine hitting a character at the very moment the first poison would stop having an effect.
Now this character would get DOUBLE poisoned for the entirety of his "next" period of being poisoned.
Not quite fair....

2. Have ONLY a "timer" one
The "intensity" could then be derived from the time value itself. And the timer would be "current timer + increase" whenever a new poison action is done.
Then damage to apply at each "update" could be calculated as:
HP hit = Timer value/Balancing variable;
So immediately after being poisoned, you get the FULL, say, "300/100=3" HP hit applied.
But once the timer gets to its end, this will be "1/100=0.01" instead. So it quite literally "wears off" after a while.

You would then get "unpoisoned" not when the timer reaches zero as it does now (because it would NEVER reach zero like this!),
but instead you could check when the timer drops below 1.0 instead.

Does that make any sense?
 
dltTime is the time which has passed since the last time this function was called.

at the moment poison doesn't have a intensity, it only has a timer. so you could stack the timer. But using antidote would still cure it.
I'd say the best way would be to have multiple attributes. So like this:

Pchar
- poison
-- arrow_0
---time = 200
---intensity = 1
-- arrow_1
---time = 100
---intensity = 1
-- skeleton_0
---time = 50
---intensity= 1.75

For example. If you use an antidote it will cure the one which is the highest (time*intensity). If the check function is called it will do it for each poison attribute (thats simple to mod). If one reaches time <= 0 it will remove itself. If there AttributeNum <= 0 then the poison attribute will be removed too.
When an poison is applied it will check if an attribute with the given "name" already exist, if so it will up the number 1 untill it finds the right number.
So you would have a function like:

PoisonCharacter(ref character, string name, int time, float intensity)
 
That does make this A LOT more complicated than what I suggested though! :shock
I am no great fan of using complicated solutions where a simple one can serve the purpose as well....
 
That does make this A LOT more complicated than what I suggested though! :shock
I am no great fan of using complicated solutions where a simple one can serve the purpose as well....
its a bit more complicated. but it would allow me to show in the interface what is actually poisoning you etc.
I am assuming we are talking for something which will be implemented after the public release right? Or do you want to have a quick way of doing this so it can still be included? Because if so you might want to reconsider, we do need to balance a lot of poisoning if its stackable. Imagine running into monkeys which can poison you. the chance they can poison you is pretty high now because it wont stack, so all these chances need to be rebalanced too
 
its a bit more complicated. but it would allow me to show in the interface what is actually poisoning you etc.
That might be nice, but sounds superfluous to me. :shrug

I am assuming we are talking for something which will be implemented after the public release right? Or do you want to have a quick way of doing this so it can still be included?
That is why we've got a poll. If nobody actually cares about this being done, why should we bother doing anything at all?
I am certainly not going to find more work for myself if there is no need in doing it.
So unless there is massive interest, I'll list this under "Build 15" features for the distant future.

Because if so you might want to reconsider, we do need to balance a lot of poisoning if its stackable. Imagine running into monkeys which can poison you. the chance they can poison you is pretty high now because it wont stack, so all these chances need to be rebalanced too
We'd find out from playtesting once the mechanism has been changed, I imagine.
Would indeed make those crazy monkeys more dangerous though. But maybe they should also be limited to specific locations or quest stuff?
It would also make "poisoned arrows" more dangerous which could be interesting if we want natives to be an actual threat to the players.

Anyway, for now I just want to see some brainstorming and feedback here. :doff
 
A little information about poisoning.
When I worked with the blowgun which has only one type of arrows: poisoned, I thought they got so very
very dangerous for the maincharacter. I tried to experiment with the phrase poison = 300; but I couldn't
notice any visible difference whatever I changed it too. It ended up with a workaround which poisons pchar much more slowly.

Also if enemies are weak (don't have many HP:s) a simple one-time poison kills them rather quick.
 
Question: Does poisoning always result in death if no antidote is taken, or does it wear off after a time?
 
Last edited:
So far I have not seen anyone survive. Weaker or stronger enemies - it's just a matter of time.
 
Question: Does poisoning always result in death is no antidote is taken, or does it wear off after a time?
It does, in theory, wear off. And I think for the player certainly, it indeed does.
So that probably applies to NPCs as well. But they might already have died by that time. :facepalm
 
When I tested and fought standard enemies (turned into indians) it was enough with one poisoned arrow
and then direct a standard arrow to kill them (automatic switch there).

Now that were rather weak enemies, nothing like the guards. But the guards died too, after a while.
 
it's because in most cases the time for poison is set to 200. Which means at least 200 HP is substracted. There aren't many characters which have more then 200 HP.
 
If we make it stack, weer can reduce the time per single poison event.
Then characters could actually survive it for "low poison" situations.

Plus a Borgiablade could become substantially more dangerous!
 
If we make it stack, weer can reduce the time per single poison event.
Then characters could actually survive it for "low poison" situations.

Plus a Borgiablade could become substantially more dangerous!
yeah but a antidote would become less usefull. only if you got a stack of poison.
The whole idea of poison is that you only have to hit someone once and then he gets killed unless he fixes it right?

if we want to do it right I think the duration should actually be infinite (or very long) but there should be an intensity added. So an arrow for example only poisons for 0.1
Which means every X ms 0.1 health is substracted. But this intensity can stack. So after 10 arrows you are at the intensity of poison as it is now.

Antidote fixes for example 1 poison. but if you are poisoned for 1.5 you need at least 2 antidotes. This could also allow us to make multiple tier of antidotes, just as with health potions.
This should be relatively easy to implement.
 
If poison doesn't guarantee death, then indeed you may not request an antidote.
But before the poison effect wears off, you'll have lost HP. So it remains useful to prevent that.

And if you got badly poisoned, then it would be EXTRA useful.
So I don't quite see a problem there.
 
If poison doesn't guarantee death, then indeed you may not request an antidote.
But before the poison effect wears off, you'll have lost HP. So it remains useful to prevent that.

And if you got badly poisoned, then it would be EXTRA useful.
So I don't quite see a problem there.
well from my perspective the whole idea of poison is it kills you slowly. I always tought the poison in this game was actually going a bit to fast already. So thats why I sugest don't stack the time. But remove the time al together but make the damage per timedelta stack instead and lower the default damage.
 
I think poison is nasty enough already, of course you can carry around a bunch of potions and not worry about it, but they cost money or require luck to find so those values (money/luck) can be adjusted to make them less common perhaps?
 
Back
Top