Jump to content

Modifying Combat Arts and understanding Flags - spells.txt


Recommended Posts

3 hours ago, Lindor said:

The effect you're seeing is the weaken effect:

http://www.sacredwiki.org/index.php/Sacred_2:Chance_for_Weaken

Also called FX_GEN_SCHWAECHUNG. These are auto-trigger FX, but why on earth should they trigger on AV debuff? Anyway, since the "Standarte" CA doesn't have any other effect applied to enemies, this means the only way the effect can be triggered is through the AV debuff which is a 100% sure sign that the fix works.

Expanding on my claim where I said that this effect is not exclusive to weaken, I've now pinpointed it.

The spectral soldiers from Nether Allegiance have a hidden property where they have a chance to apply a movement speed slow on enemies on hit. Whenever it happens, the enemy shows the same effect as weaken. I don't know what damage type the soldiers deal, but it is not Ice, because the attack speed is not affected and it is not Magic, because that wouldn't slow the enemies.

So it is not really that strange that it shows up for an attack value debuff.

Link to comment
2 hours ago, Lindor said:

TESTING LOG:

type = "BONUS_COMBATVALUE_REL",
spez = "DEBUFF_ATTACKVALUE",
entry0 = {"et_debuff_EAW", 1300, 0, 0, 37 },
effect: increases Attack Value and Defense Value during casting animation, but not with duration of spell, by expected values (relative not flat)

type = "BONUS_COMBATVALUE_REL",
spez = "DEBUFF_ATTACKVALUE",
entry0 = {"et_debuff_EAW", -1300, 0, 0, 37 },
effect: increases Attack Value and Defense Value during casting animation, but not with duration of spell, by absolutely astronomical values

type = "BONUS_COMBATVALUE_REL",
spez = "CBTVAL_ATTACK",
entry0 = {"et_debuff_EAW", -1300, 0, 0, 37 },
effect: increases Attack Value during casting animation, but not with duration of spell, by absolutely astronomical values. The character loses ability to move. Game freezes upon quitting.

type = "BONUS_DEBUFF_REL",
spez = "DEBUFF_ATTACKVALUE",
entry0 = {"et_debuff_EAW", 1300, 0, 0, 37 },
effect: nothing happens.

type = "BONUS_CHARGE_ATTR",
spez = "CHARGE_AW_REL",
entry0 = {"et_debuff_EAW", 1300, 0, 0, 37 },
effect: does nothing to AV. The character loses ability to move. Game freezes upon quitting.
note: this is wierd because this effect exists exactly like that in base game. "et_charge_AW_rel", used by shadow warrior Kampfrausch, killing spree:
entry5 = {"et_charge_AW_rel", 450, 50, 1, 41 },
means that the 4th parameter, 37, is the problem and does not work with killing spree.

type = "BONUS_CHARGE_ATTR",
spez = "CHARGE_AW_REL",
entry0 = {"et_debuff_EAW", -1300, 0, 0, 41},
effect: does nothing to AV. The character loses ability to move. Game freezes upon quitting.

type = "BONUS_CHARGE_ATTR",
spez = "DEBUFF_ATTACKVALUE",
entry0 = {"et_debuff_EAW", 1300, 0, 0, 41},
effect: does nothing to AV. The character loses ability to move. Game freezes upon quitting.
note: man this type is really allergic to changes.

type = "BONUS_DEBUFF_WITH_ESSENCE",
spez = "DEBUFF_ATTACKVALUE",
entry0 = {"et_debuff_EAW", 1300, 0, 0, 41},
effect: debuffs the character attack value for duration of spell for relative amount. The character loses ability to move. Game freezes upon quitting.
note: I think the whole standing-still-crash-on-quitting issue is not due to this combination of parameters, but because I broke my testing char somewhere during the process. Imma use a backup then.

type = "BONUS_DEBUFF_WITH_ESSENCE",
spez = "DEBUFF_ATTACKVALUE",
entry0 = {"et_debuff_EAW", 1300, 0, 0, 42 },
effect: debuffs all enemies in range for duration of the spell. Probably relative, but impossible to test. The debuff is not inflicted upon the player on getting hit. seems like we got a winner.
note: went tp backup char, solving the issue. Works perfect!

@Flixif you want relative AV debuffing on enemies, you can start with last specification.

 

Most appreciated, noted for further evaluation. 

  • Like! 1
Link to comment
4 hours ago, Lindor said:
  • idbeholdME's tested entry was a spell modification entry with the spell mod taken prior to the files modifications

One note about this. I did not have the mod picked when I started testing it. I had 5 mod points for Malevolent Champion but no mods taken for Augmenting Guidon. Always made the spells.txt change first and only then loaded the char and picked the mod. Then I always just ALT+F4'd so the game did not save after the test, repeating the process.

Edited by idbeholdME
  • Like! 1
Link to comment
10 minutes ago, idbeholdME said:

One note about this. I did not have the mod picked when I started testing it. I had 5 mod points for Malevolent Champion but no mods taken for Augmenting Guidon. Always made the spells.txt change first and only then loaded the char and picked the mod. Then I always just ALT+F4'd so the game did not save after the test, repeating the process.

Clever! Thx, I edited that out.

  • Like! 1
Link to comment
On 3/11/2022 at 11:02 PM, Lindor said:

TESTING LOG:

  Hide contents

Credits: idbeholdME
type = "BONUS_DEBUFF",
spez = "DEBUFF_ATTACKVALUE",
entry8 = {"et_debuff_EAW", 1300, 10, 5, 42 },
effect: It seemed to make the enemies hit much less often, debuff symbol showed up on them. Probably the desired behavior. From reading the above, it should be flat value and not a %. (the debuff symbol mentioned is the weaken FX, can say by a screenshot from idbeholdME)

type = "BONUS_DEBUFF_WITH_ESSENCE",
spez = "DEBUFF_ATTACKVALUE",
entry0 = {"et_debuff_EAW", 1300, 0, 0, 42 },
effect: Debuffs all enemies in range for duration of the spell. Probably relative (percentage based), but I don't know how to test that. The debuff is not inflicted upon the player on getting hit. The weaken FX are applied to the enemies. Seems like we got a winner.
note: went to backup char, solving the movement-ability-loss-and-crash-on-quitting issue. Works perfect!

If you want relative (percentage based) AV debuffing on enemies, you can use the last specification.

Bumping this with a couple questions.

So, can we safely say that BONUS_DEBUFF is a flat value and BONUS_DEBUFF_WITH_ESSENCE is % based?

I've been wondering, when exactly would the FLAT reduction be applied. I assume that difficulty levels just add high % bonuses to the attack and defense values of enemies, correct? If the flat reduction would affect the base value, it would have a tremendous impact.

Example: If a monster had 400 base attack rating, Niobium would give them a 400% bonus and then you debuff them with a level 1 banner (-131 attack). If it affects the base value then you would end up with:

(400-131)*5 = 1345 attack rating

If it applied only after all the other calculations are done, you would end up with:

400*5-131 = 1869 attack rating.

 

I'm expecting that it's the latter, but as you can't actually check the attack value of the monsters while under the effect of the debuff, I have no way of telling other than asking someone who knows the inner calculation mechanics of the game.

I'm just thinking, why would the original devs set the numbers to 130+1 per level. The one scenario where those numbers would make sense would be, if it was reducing the base value, before any bonuses :dntknw:

Could probably be tested if the type BONUS_DEBUFF Guidon was changed to affect the player instead of the enemy and then just looking at the numbers. Could that be done?

Edited by idbeholdME
Link to comment
21 minutes ago, idbeholdME said:

Could probably be tested if the type BONUS_DEBUFF Guidon was changed to affect the player instead of the enemy and then just looking at the numbers. Could that be done?

I do this for testing all the time.  Give a spell with the desired bonuses to the monster, then let the monster attack you. To make it easier to control you can create a taskcreature that spawns in a specific isolated spot.  I just haven't gotten around to testing any of the debuffs yet, but they're on my list.

FYI I'm not comfortable using the ESSENCE debuffs for general use due to how these interact with the Dryad's combat arts.  "Essence" refers to the way bonuses are applied when the Dryad has the shrunken heads of a certain enemy type equipped.    It what allows Twisted Torment for example to have a stronger effect against enemies for whom the Dryad has a shrunken head equipped. I wouldn't want the Dryad to have a massive boost to these debuffs vs. the other playable characters. There's also no evidence yet that the Essence bonuses are percentages.

An alternative that may have some promise is the "bb_lower_armor" bonus which has a unique bonus type ("BONUS_LOWERARMOR") which may or may not be percentage-based.

  • Like! 1
Link to comment
42 minutes ago, Flix said:

I do this for testing all the time.  Give a spell with the desired bonuses to the monster, then let the monster attack you. To make it easier to control you can create a taskcreature that spawns in a specific isolated spot.  I just haven't gotten around to testing any of the debuffs yet, but they're on my list.

So, could I just add the token to, for example "harterschlag", then get hit by an enemy that has this attack and it would apply the debuff?

EDIT:

Tried and didn't work. Not sure what I'm doing wrong, but I'll leave it to you :D 

Edited by idbeholdME
Link to comment
21 hours ago, Flix said:

There's also no evidence yet that the Essence bonuses are percentages.

unless my observations are incorrect, the second to last test I did showed that the essence mod in question is percentage if used with 41 parameter. I'm just not sure about it with other parameters. Your method of testing that could probably provide the evidence in question. Sry I don't have time to do hat atm, esp. since your provided knowledge about the essence types kinda excluded this type already.

Link to comment
  • 1 month later...

One question about mods that provide either "regThisBuff" or "regThisCool. I assume that 1000 is the base cooldown rate. So if a mod lessens the regeneration impact of a buff or lowers the cooldown of a CA, like this mod entry for Battle Stance:

entry6 = {"et_regThisBuff", 500, 10, 3, 8 },

Then the formula for the total regen penalty from the buff would be 1000/1510 at level 1, correct? So 66.2% of the original penalty? The math seems to mostly check out (+- a couple decimals).

Which would become 1000/2000 at CA level 50 (50% of the original penalty) and 1000/2500 at CA level 100 (40% of the original penalty), correct?

Edited by idbeholdME
Link to comment
2 hours ago, Flix said:

Not to ignore your question (I honestly don't know but your math checks out), but it reminded me of a previous discussion about the debuffs and whether there was a good percentage-based solution for spells.

After testing, I now believe that debuffs to enemy armor/defense/attack were always percentage based, in all forms.  The notion that the bonus used on spells was a flat reduction may have been one of those things that was told and then repeated over and over until no one questioned it.

For these tests, I used the stock vanilla spell tokens/blueprint bonuses, previously assumed to be flat debuffs. I tested by fighting an enemy equipped with a spell to debuff my attack rating. The spell tooltip (programmed by Dmitriy to display in percentages for D2F) reported that the value should be a 43% reduction to opponent attack.

BASE:

aW0oamF.png

 

AFTER BEING STRUCK & DEBUFFED:

YPehKz4.png

 

This comes out to a 42.9% reduction, rounded up.  I haven't tried it with armor or defense yet, but I will hypothesize that it will be the same result.

Interesting. Does that mean that in the case of the Fear mod for Augmenting Guidon, it's been a 13%+0.1% per CA level reduction instead of 130+1 flat?

 

One more thing to the question above. There is also "cost_thisSpell". Pelting Strikes has it as a mod option.

entry6 = {"et_cost_thisSpell", 250, 0, 3, 4 },

But it seems to work the same way as the "reg" tokens. After picking, the regen time went down 20% (1000/1250) from 5.3 to 4.2 (79.3%, within rounding margin). So I really don't know why there are multiple tokens for the same thing.

 

AND

speaking of Pelting Strikes, the other option for the silver mod happens to be a defense reduction :)

entry7 = {"et_debuff_EVW", 100, 1, 4, 133 },

If your results apply, then it would mean 10% + 0.1% per CA level defense value reduction, correct?

And do these reductions stack? Thanks to the tests that were done with the Augmenting Guidon and how it gave the enemies the ability to stack attack value reduction on you with every hit, I'm inclined to say yes. And it would make sense, as Pelting Strikes keeps hitting the same enemy as long as it lives/is within range and would be in line with the design philosophy (. The debuff from the Guidon lasted for 7-10 seconds and the duration refreshed with every new application. If all of the above is true and these attack and defense reductions on the various CAs behave the same, then this mod for PS will quickly shred the defenses of any target after several hits and it can be kept up pretty much indefinitely.

But armor reduction must be flat, take this entry from Soul Hammer:

entry6 = {"et_debuff_armor_phy", 1000, 15, 3, 133 },

It must be 100+1.5 flat, because otherwise, it would be 100% + 1.5% per level. The main question here would be, does this effect stack in the same way? As in, as long as it doesn't drop, can you just stack it indefinitely? Pelting Strikes has this mod:

entry9 = {"et_debuff_armor_phy", 500, 10, 6, 133 },

When Dual Wielding, you land 6 hits, would it result in a 306 physical armor reduction if all hits land on the same opponent? Could you stack it further with further combos? Would it stop at 0 or even go into negative? Or would it only apply once?

 

EDIT:
I just realized something. Bonuses on gear that say "Opponent's attack value -x%" or "Opponent's defense value -X%" actually apply it only when you hit the enemies, not globally. That is why this stat is not reflected on the inventory "last opponent" screen. I suddenly started seeing the debuff symbol above every enemy I hit and I had no idea why. Turns out it was my helmet that had "Opponent's attack value -x%". Once I removed it, the symbol stopped appearing. Until now, I had just assumed that it just didn't show up but worked in the background. Same question applies here. Does it stack? Most likely yes due to the Guidon behavior, as long as the debuff doesn't drop and you keep refreshing it.

attack.jpg.0041e03e46d85190ef38a492465e3792.jpg

Edited by idbeholdME
Link to comment
11 hours ago, idbeholdME said:

One question about mods that provide either "regThisBuff" or "regThisCool. I assume that 1000 is the base cooldown rate. So if a mod lessens the regeneration impact of a buff or lowers the cooldown of a CA, like this mod entry for Battle Stance:

entry6 = {"et_regThisBuff", 500, 10, 3, 8 },

Then the formula for the total regen penalty from the buff would be 1000/1510 at level 1, correct? So 66.2% of the original penalty? The math seems to mostly check out (+- a couple decimals).

Which would become 1000/2000 at CA level 50 (50% of the original penalty) and 1000/2500 at CA level 100 (40% of the original penalty), correct?

I don't know for sure, but the devs seem to have an affinity to (x^2)/(x+y) kind of formulas. So your math would check out, just differing by a factor of 1000 but that doesn't matter, final percentages are the same.

8 hours ago, idbeholdME said:

entry6 = {"et_cost_thisSpell", 250, 0, 3, 4 },

et_cost_thisSpell is actually not defined at the end of spells.txt, meaning it's hardcoded. There must be something special, like the interaction with the 4th parameter of the token or smth like that. Maybe the key is that et_regThisBuff only works for buffs while et_cost_thisSpell works for all spells. Just a guess though.

8 hours ago, idbeholdME said:

If your results apply, then it would mean 10% + 0.1% per CA level defense value reduction, correct?

Seems reasonable.

8 hours ago, idbeholdME said:

And do these reductions stack? Thanks to the tests that were done with the Augmenting Guidon and how it gave the enemies the ability to stack attack value reduction on you with every hit, I'm inclined to say yes.

Can't conclude that. The augmenting guidon test where the enemies were debuffing the player stacking with each hit was with bonus type "BONUS_DEBUFF_POTENTIAL" while pelting strikes uses and Flix is talking about "BONUS_DEBUFF" (I think).

8 hours ago, idbeholdME said:

Would it stop at 0 or even go into negative?

Definitely not negative. You can see above what happens with the game when negative values come in play. If I were the dev, I would've hardcoded a cap for maximum amount of armor debuff that can be present at a time, let's say 33% or smth like that. Again, just a guess.

8 hours ago, idbeholdME said:

Same question applies here. Does it stack? Most likely yes due to the Guidon behavior, as long as the debuff doesn't drop and you keep refreshing it.

Again, can't conclude that if the debuff doesn't use potential, but can conclude that if the debuff uses potential. I've taken a look at EE, there the answer is yes.

But I also think they have a built-in limited time duration. Based on how short the debuff is when the nebula boss attacks you (not even a second), the overlap is probably very small.

  • Like! 1
Link to comment
1 hour ago, Lindor said:

Can't conclude that. The augmenting guidon test where the enemies were debuffing the player stacking with each hit was with bonus type "BONUS_DEBUFF_POTENTIAL" while pelting strikes uses and Flix is talking about "BONUS_DEBUFF" (I think).

Ah, right. Then testing whether it stacks if applied again before the debuff drops off or whether it just refreshes should be one of the next tests. It has the same long duration as the POTENTIAL debuff though (and the gear bonuses).

As for the armor reduction, testing the duration of the debuff and stacking properties would also shed some much needed light on this. But as I said, if it didn't stack, one would have to wonder, why would a CA like Pelting Strikes have a mod for it.

 

1 hour ago, Lindor said:

et_cost_thisSpell is actually not defined at the end of spells.txt, meaning it's hardcoded. There must be something special, like the interaction with the 4th parameter of the token or smth like that. Maybe the key is that et_regThisBuff only works for buffs while et_cost_thisSpell works for all spells. Just a guess though.

I was mostly thinking about the difference from regThisCool. Seems to be doing exactly the same thing. As in, reduces the total regen time AFTER all the other normal regen calculations are done, by a portion equal to 1000/X, where X is 1000 + the mod value. The only thing that comes to mind would be if cost_thisSpell would actually reduce the "cost". Assuming the base cost is 1000, so that it would become 750/1000 after a 25% reduction. But that would have to result in a 25% total regen time reduction and in my test, it lowered it by 20% (20.7% due to rounding), which means it does the same thing (1000/1250) :dntknw:

Edited by idbeholdME
Link to comment
1 hour ago, idbeholdME said:

I was mostly thinking about the difference from regThisCool. Seems to be doing exactly the same thing. As in, reduces the total regen time AFTER all the other normal regen calculations are done, by a portion equal to 1000/X, where X is 1000 + the mod value. The only thing that comes to mind would be if cost_thisSpell would actually reduce the "cost". Assuming the base cost is 1000, so that it would become 750/1000 after a 25% reduction. But that would have to result in a 25% total regen time reduction and in my test, it lowered it by 20% (20.7% due to rounding), which means it does the same thing (1000/1250) :dntknw:

et_regThisCool usually does what it says it does, reducing the cooldown and NOT the regeneration time. That's why it's usually exclusively used with spells that have a cooldown. It makes sense that there is quirky behaviour if you use it with spells which don't have a cooldown.

So the difference is, et_cost_thisSpell does not reduce the cooldown if the spell has one. It also makes sense that et_cost_thisSpell exists so that it can reduce the regen time on spells with cooldown and so that both tokens can be used together at the same time for the same spell.

Btw et_regThisCool is also not defined at the end of spells.txt.

  • Like! 1
Link to comment
2 hours ago, Lindor said:

Btw et_regThisCool is also not defined at the end of spells.txt

All spell property names are hardcoded. Some are only addressed by spell-specific functions. It baffles me as to why the coder in charge had decided to use an approach, that can be accurately described, as anti-utilitarian. Just to show 'em?

  • Like! 1
Link to comment
2 hours ago, idbeholdME said:

Concluding notes:

As usual you answer most of your own questions before I can get home from work.  :3lmao:

The duration of debuffs is controlled by the "et_duration_sec" spell token.  Without it they will last until reload.  This is why it's important to have this token even on spells that would otherwise not need a duration defined.

Correct on the diminishing returns. Similar to reflect/block chance for example, you can increase the token value to absurd levels and it will never reach 100%.  So 500, 10, should not be construed as 50% + 1% per level.

Items use the POTENTIAL bonus (they're granting the potential to you, the wielder), that why it only triggers on hit and not like some kind of constant aura.

I would have assumed debuffs stack with each hit. Interesting to know only the duration is refreshed.

Link to comment
  • 2 months later...
On 3/11/2022 at 6:58 PM, Flix said:

BONUS_DEBUFF_POTENTIAL might be just what it sounds like.  It simply grants the potential to the target.

Coming back to this topic, if POTENTIAL debuffs grant the potential to the target, then do those debuffs as item boni also grant the potential to enemies hit? A lot of item boni debuff use the POTENTIAL debuffs. It would be pretty laughable if they all the time did grant the enemies the potential to debuff the player instead every time you hit them.

On 3/20/2022 at 12:55 AM, Flix said:

An alternative that may have some promise is the "bb_lower_armor" bonus which has a unique bonus type ("BONUS_LOWERARMOR") which may or may not be percentage-based.

Dd you test it? Did it work?

 

In my mod I'll go with the ESSENCE debuffs. I like the idea of the Dryad shrunken head equipped having a bigger impact. But I need to know wether BONUS_LOWERARMOR is % or flat for my current project. In fact I need to know exactly how ALL bonus type/spez combinations work. Feel free to dump in any knowledge about those here.

Link to comment
50 minutes ago, Lindor said:

Dd you test it? Did it work?

BONUS_LOWERARMOR did absolutely nothing in my tests, and as such I've abandoned it totally (or will once the next EE is released).

Given that the functioning armor debuff (BONUS_DEBUFF_ARMOR) is percentage, for D2F/EE it is simply a matter of selecting which elements to emphasize (individual or "max" for all).

52 minutes ago, Lindor said:

It would be pretty laughable if they all the time did grant the enemies the potential to debuff the player instead every time you hit them.

One would question why such a bonus even exists in that case. :3lmao:  I believe the target is the item itself, or perhaps the player, when the bonus is used on an item.

Link to comment
  • 3 weeks later...
On 4/25/2022 at 9:16 PM, idbeholdME said:

Potentially left to test:

1) How would the armor reduction from the CA mod interact with "Opponent's armor: Physical -x%" item mod on gear. Whether it would stack with the mod reduction or if it would be wasted.

@Flix @Lindor

Coming back to this with some test results. I've been testing, whether the armor reduction from Pelting Strikes and Soul Hammer mods stacks. And there have been some interesting findings.

1) Turns out, that the armor reduction from CAs is applied once PER CAST and it stacks. Meaning that yes, only the first hit of Pelting Strikes applies the reduction, but if you cast it again and the first hit targets the same enemy as before, it will lower the enemy armor further. Hard to test with Pelting Strikes, but clearly visible with Soul Hammer. Some numbers for a Mounted Goblin Hunter:

Base physical armor - 312

After 1 Soul Hammer hit - 133

After 2 Soul Hammer hits - 84

After 3 Soul Hammer hits - 61

 

So it stacks with diminishing returns, like many other things in the game. I think the same stands for Pelting Strikes, but stacking it is definitely more difficult than from Soul Hammer (or Demonic Blow), because the reduction is applied only once per cast. This makes Soul Hammer and Demonic Blow extremely powerful at shredding tough enemies' armor, like bosses. Here is an example of what Carnach's armor looked like after hitting him many times with Soul Hammer, over and over. Almost no physical armor left:

carn.jpg.81119d4b16c118a1826dfae460e77478.jpg

 

2) The reductions from different sources stack in the same way. This time for a Goblin Boar Rider:

Base physical armor - 357

After 1 Soul Hammer hit - 152

After 1 Pelting Strikes execution - 206

After 1 Soul Hammer hit + 1 Pelting Strikes execution - 116

Which very likely means, that any Opponent's armor: Physical -x% item mods will stack in a similar way.

 

3) When coming from CAs the armor reduction is applied EVEN if the attack misses. The debuff icon still shows up on the enemy even if the hit missed and did no damage. Their armor is still reduced (if you then kill the enemy with normal attacks). This further hints at that the armor reduction from the CA mods is bound to the execution and NOT the hits themselves the CA performs, further explaining why Pelting Strikes only applies it once per cast.

 

4) All the reductions seem to have their own duration. Applying another one does not refresh the previous ones. The armor debuff duration on Gold seems to be about 16 seconds. I hit a Fighting Boar once with Soul Hammer, waited 12 seconds, hit it with another Soul Hammer and then killed it after a total of 25 seconds. Normally, a Fighting Boar has these numbers:

Base Armor - 202

1 Soul Hammer hit - 86

2 Soul Hammer hits - 60

 

with the scenario mentioned above, the Boar's armor after killing him was 86, so as if he was hit only once. Confirming that the duration is not refreshed, but the game keeps track of all the durations separately.

 

TEST DATA:

Enemy level - 93

Soul Hammer level - 23 with the Silver Battering armor reduction mod.

Pelting Strikes level - 23 with the Gold Indentation armor reduction mod.

Edited by idbeholdME
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...
Please Sign In or Sign Up