So, Augmentation boosts Dexterity based on Cunning, and Unified Body boosts Constitution based on Dexterity. If I have both, does that mean boosting Cunning will indirectly boost Constitution, or are they applied separately? Could we create an infinite loop by, for instance, having one talent that boosts STR based on DEX and another that boosts DEX based on STR? Could I just go crazy with an Adventurer and take every talent that boosts any stat at all and let them all reinforce and stack on each other?
[My motivation is that I read a couple threads over on the Steam forum about builds designed around wearing Monolith Armor, and I'm starting to get that itch to create Yet Another Character™… ]
How are stat-boosting talents applied?
Moderator: Moderator
-
- Sher'Tul Godslayer
- Posts: 2480
- Joined: Thu Jan 23, 2003 8:13 pm
- Location: A shallow water area south of Bree
- Contact:
How are stat-boosting talents applied?
"Blessed are the yeeks, for they shall inherit Arda..."
-
- Wyrmic
- Posts: 257
- Joined: Tue Jan 03, 2017 7:12 pm
Re: How are stat-boosting talents applied?
I hate to say this, Zizzo, but I think that you are by far the most qualified of any of us to go find that out in the code. I have also wondered this but not gotten a satisfying answer through testing or asking.
I figure if this topic was left alone long enough, you'd have gone source diving for the answer anyway, so I may as well save you the waiting
I figure if this topic was left alone long enough, you'd have gone source diving for the answer anyway, so I may as well save you the waiting
Let slip the toast of war.
-
- Sher'Tul Godslayer
- Posts: 2480
- Joined: Thu Jan 23, 2003 8:13 pm
- Location: A shallow water area south of Bree
- Contact:
Re: How are stat-boosting talents applied?
So. It has come to this.PseudoLoneWolf wrote: ↑Sun Oct 13, 2024 12:01 am I hate to say this, Zizzo, but I think that you are by far the most qualified of any of us to go find that out in the code. I have also wondered this but not gotten a satisfying answer through testing or asking.
I figure if this topic was left alone long enough, you'd have gone source diving for the answer anyway, so I may as well save you the waiting
So, as is my usual strategy, I whipped up an addon to do some testing and experimentation, and it's straightforward enough that I figured I might as well publish it, on the theory that other people might want to play with it; for lack of a better name, I'm calling it Temporary Stat Watch. Basically, it prints useful information in the log file every time :addTemporaryValue() or :removeTemporaryValue() is called on the "inc_stats" property (search the log file for lines that start with "[TEMP_STAT]"). For instance, here's the output from activating Augmentation at one point:
Code: Select all
[TEMP_STAT] adding temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=0/dex=0/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-add[30]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[30]: inc str=2/dex=3/mag=0/wil=0/cun=0/con=0/lck=0
Code: Select all
[TEMP_STAT] adding temporary stats: str=2/dex=2/mag=2/cun=2
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=3/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-rmv[30]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[30]: inc str=4/dex=5/mag=0/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] * post-rmv[30]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[30]: inc str=2/dex=2/mag=0/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] adding temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=2/mag=0/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] * post-add[32]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[32]: inc str=4/dex=5/mag=0/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] * post-add[31]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[31]: inc str=4/dex=5/mag=2/wil=0/cun=2/con=0/lck=0
Code: Select all
[TEMP_STAT] removing temporary stats: str=2/dex=2/mag=2/cun=2
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[11]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[11]: inc str=4/dex=5/mag=2/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[12]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[12]: inc str=2/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-rmv[12]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[12]: inc str=0/dex=0/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] adding temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=0/dex=0/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-add[13]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[13]: inc str=2/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-rmv[11]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[11]: inc str=2/dex=3/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] adding temporary stats: str=3/dex=3/mag=3/cun=3
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=3/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[13]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[13]: inc str=5/dex=6/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-rmv[13]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[13]: inc str=3/dex=3/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] adding temporary stats: str=2/dex=4
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=3/dex=3/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-add[15]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[15]: inc str=5/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-add[14]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[14]: inc str=5/dex=7/mag=3/wil=0/cun=3/con=0/lck=0
And just for giggles, let's see what that second point in Inner Power looks like with a point in both Augmentation and Unified Body:
Code: Select all
[TEMP_STAT] removing temporary stats: str=2/dex=2/mag=2/cun=2
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[18]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[18]: inc str=7/dex=5/mag=2/wil=0/cun=2/con=4/lck=0
[TEMP_STAT] removing temporary stats: con=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[33]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[33]: inc str=7/dex=3/mag=2/wil=0/cun=2/con=4/lck=0
[TEMP_STAT] * post-rmv[33]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[33]: inc str=7/dex=3/mag=2/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=3
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[35]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[35]: inc str=7/dex=3/mag=2/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] * post-rmv[35]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[35]: inc str=4/dex=3/mag=2/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=4/dex=3/mag=2/wil=0/cun=2/con=0/lck=0
[TEMP_STAT] * post-add[37]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[37]: inc str=4/dex=3/mag=2/wil=0/cun=2/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=3
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=4/dex=3/mag=2/wil=0/cun=2/con=4/lck=0
[TEMP_STAT] * post-add[39]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[39]: inc str=7/dex=3/mag=2/wil=0/cun=2/con=4/lck=0
[TEMP_STAT] removing temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[27]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[27]: inc str=5/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] removing temporary stats: con=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[37]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[37]: inc str=5/dex=0/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-rmv[37]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[37]: inc str=5/dex=0/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=3
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[39]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[39]: inc str=5/dex=0/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-rmv[39]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[39]: inc str=2/dex=0/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=0/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-add[41]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[41]: inc str=2/dex=0/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=3
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=0/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-add[43]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[43]: inc str=5/dex=0/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-rmv[27]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[27]: inc str=3/dex=0/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=3/dex=0/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] removing temporary stats: con=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[41]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[41]: inc str=3/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-rmv[41]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[41]: inc str=3/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=3
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[43]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[43]: inc str=3/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-rmv[43]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[43]: inc str=0/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=0/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-add[46]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[46]: inc str=0/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=3
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=0/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-add[48]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[48]: inc str=3/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-add[44]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[44]: inc str=5/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] removing temporary stats: con=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[46]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[46]: inc str=5/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-rmv[46]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[46]: inc str=5/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=3
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[48]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[48]: inc str=5/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-rmv[48]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[48]: inc str=2/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=3/mag=2/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-add[50]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[50]: inc str=2/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=3
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-add[52]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[52]: inc str=5/dex=3/mag=2/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-rmv[18]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[18]: inc str=5/dex=3/mag=0/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=3/dex=3/mag=3/cun=3
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=5/dex=3/mag=0/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] removing temporary stats: con=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[50]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[50]: inc str=5/dex=6/mag=0/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-rmv[50]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[50]: inc str=5/dex=6/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=3
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[52]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[52]: inc str=5/dex=6/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-rmv[52]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[52]: inc str=2/dex=6/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=6/mag=0/wil=0/cun=0/con=0/lck=0
[TEMP_STAT] * post-add[55]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[55]: inc str=2/dex=6/mag=0/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=3
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=2/dex=6/mag=0/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] * post-add[57]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[57]: inc str=5/dex=6/mag=0/wil=0/cun=0/con=4/lck=0
[TEMP_STAT] removing temporary stats: str=2/dex=3
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[44]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[44]: inc str=8/dex=6/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] removing temporary stats: con=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[55]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[55]: inc str=8/dex=3/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] * post-rmv[55]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[55]: inc str=8/dex=3/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=3
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[57]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[57]: inc str=8/dex=3/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-rmv[57]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[57]: inc str=5/dex=3/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=5/dex=3/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-add[59]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[59]: inc str=5/dex=3/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=5/dex=3/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] * post-add[61]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[61]: inc str=9/dex=3/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] * post-rmv[44]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[44]: inc str=7/dex=3/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] adding temporary stats: str=2/dex=4
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=7/dex=3/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] removing temporary stats: con=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[59]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[59]: inc str=7/dex=7/mag=0/wil=0/cun=3/con=4/lck=0
[TEMP_STAT] * post-rmv[59]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[59]: inc str=7/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[61]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[61]: inc str=7/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-rmv[61]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[61]: inc str=3/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=5
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=3/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-add[64]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[64]: inc str=3/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] adding temporary stats: str=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from recomputeStats() in Augmentation
[TEMP_STAT] - from callbackOnStatChange(cun, 2) in Augmentation
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=3/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] * post-add[66]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[66]: inc str=7/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] * post-add[62]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[62]: inc str=9/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] removing temporary stats: con=5
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[64]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[64]: inc str=9/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] * post-rmv[64]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[64]: inc str=9/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] removing temporary stats: str=4
[TEMP_STAT] - from updateTalentPassives(Unified Body)
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] - from learnTalent(Inner Power)
[TEMP_STAT] * pre-rmv[66]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-rmv[66]: inc str=9/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-rmv[66]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-rmv[66]: inc str=5/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] adding temporary stats: con=5
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=5/dex=7/mag=0/wil=0/cun=3/con=0/lck=0
[TEMP_STAT] * post-add[68]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[68]: inc str=5/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] adding temporary stats: str=4
[TEMP_STAT] - from passives() in Unified Body
[TEMP_STAT] - from callbackOnStatChange(dex, 3) in Unified Body
[TEMP_STAT] - from passives() in Inner Power
[TEMP_STAT] * pre-add: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * pre-add: inc str=5/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] * post-add[70]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[70]: inc str=9/dex=7/mag=0/wil=0/cun=3/con=5/lck=0
[TEMP_STAT] * post-add[53]: base str=12/dex=12/mag=36/wil=12/cun=28/con=12/lck=50
[TEMP_STAT] * post-add[53]: inc str=9/dex=7/mag=3/wil=0/cun=3/con=5/lck=0
"Blessed are the yeeks, for they shall inherit Arda..."
-
- Wyrmic
- Posts: 257
- Joined: Tue Jan 03, 2017 7:12 pm
Re: How are stat-boosting talents applied?
Oh dear that is... quite the log.
So if I'm parsing this correctly, it seems like they do all stack on each other but they're stacked by order of talent learned like you said. Which, all things considered, is probably a sensible way to implement this? But it means if you do want to abuse this we're going to need to be careful which talents you take in which order. I don't think I'm good enough at maths to determine that order, though. I'm not even completely sure what all talents increase your stats. I've been playing with too many mods for too long....
So if I'm parsing this correctly, it seems like they do all stack on each other but they're stacked by order of talent learned like you said. Which, all things considered, is probably a sensible way to implement this? But it means if you do want to abuse this we're going to need to be careful which talents you take in which order. I don't think I'm good enough at maths to determine that order, though. I'm not even completely sure what all talents increase your stats. I've been playing with too many mods for too long....
Let slip the toast of war.