Posted May 22, 2016
I decided to put my question first just in case you don't want/need to read my notes thus far.
QUESTION:
With a value of 100 returned for pickpocket success chance, the pickpocket check still sometimes fails and the npc becomes hostile. Why is this?
NOTES:
So as a lot of you are probably already aware, the pickpocketing mechanics in Morrowind are less than satisfactory and I'm trying to "balance" it. I am using the pickpocket formula found on this page, so feel free to correct me if I'm using incorrect information.
http://forums.bethsoft.com/topic/1097214-gameplay-mechanics-analysis
Here is the formula for easy reference:
fatigueTerm = fFatigueBase - fFatigueMult*(1 - normalisedFatigue)
where normalisedFatigue is a function of fatigue. empty fatigue bar -> 0.0, full fatigue bar -> 1.0
Note fatigueTerm is normally 1.25 at full fatigue.
checks the whole stack no matter how many you try to take
note: filled soulgems have the value of an empty soulgem due to a missing calculation
stackValue = itemValue * itemsInStack
valueTerm = 10 * fPickPocketMod * stackValue
x = (0.2 * pcAgility + 0.1 * pcLuck + pcSneak) * fatigueTerm
y = (valueTerm + npcSneak + 0.2 * npcAgilityTerm + 0.1 * npcLuckTerm) * npcFatigueTerm
t = x - y + x (yes, that's what it does)
if t < pcSneak / iPickMinChance:
roll 100, win if roll <= int(pcSneak / iPickMinChance)
else:
t = min(iPickMaxChance, t)
roll 100, win if roll <= int(t)
What I've done so far is...
iPickMaxChance set to 100 (previously 75) (allowing up to 100% success if the stats are high enough)
fPickPocketMod set to 0.008 (previously 0.3)
I came up with this number based on the first thieves guild quest which asks you to steal a diamond. Since one of the ways to obtain it is to pickpocket it, I felt it should be consistently successful for a level 1 character with decent thief specs.
For this I used a wood elf with 45 sneak, 60 agility, and 40 luck, the highest possible starting stats without making luck a main attribute or taking the lover birthsign. This will return 76.25 for the value of (x) when at full stamina. The target is Nalcarya of White Haven, the Balmora alchemist. She returns a value of 27.5 for (y) BEFORE considering valueTerm. This will return a value of 125 for (t).
What I want is for this character to have a (t) value of 100, no higher or lower, since this is supposed to be a beginner mission and this character does have considerably high thieving skills. For this, I will need to subtract a value of 25 from the result (t) so that t = 100 instead of 125 by altering valueTerm. valueTerm should equal 20 so that after modified by npcFatigueTerm, we will get a value of 25.
The diamond has a value of 250. For valueTerm, (10 * 0.008 * 250) will give us a value of 20. Now Nalcarya will return a value of 52.5 for (y) and exactly 100 for (t). Upon testing, it seems that around 1 in 10 times, the pickpocket check will still fail.
Example 2, second thieves guild quest, stealing Nerano Manor Key from Sovor Trandel. Sovor returns 57.75 for the value of (y). The key has no value so valueTerm should be 0. For this test, my character had Sneak 45, Agility 85, Luck 40. My character returns a value of 82.5 for (x) and 107.25 for (t) against Sovor. Again, the pickpocket check will still sometimes fail (it seems much more frequent in this scenario, around 3-4 out of 10 times).
Any advice is appreciated.
QUESTION:
With a value of 100 returned for pickpocket success chance, the pickpocket check still sometimes fails and the npc becomes hostile. Why is this?
NOTES:
So as a lot of you are probably already aware, the pickpocketing mechanics in Morrowind are less than satisfactory and I'm trying to "balance" it. I am using the pickpocket formula found on this page, so feel free to correct me if I'm using incorrect information.
http://forums.bethsoft.com/topic/1097214-gameplay-mechanics-analysis
Here is the formula for easy reference:
fatigueTerm = fFatigueBase - fFatigueMult*(1 - normalisedFatigue)
where normalisedFatigue is a function of fatigue. empty fatigue bar -> 0.0, full fatigue bar -> 1.0
Note fatigueTerm is normally 1.25 at full fatigue.
checks the whole stack no matter how many you try to take
note: filled soulgems have the value of an empty soulgem due to a missing calculation
stackValue = itemValue * itemsInStack
valueTerm = 10 * fPickPocketMod * stackValue
x = (0.2 * pcAgility + 0.1 * pcLuck + pcSneak) * fatigueTerm
y = (valueTerm + npcSneak + 0.2 * npcAgilityTerm + 0.1 * npcLuckTerm) * npcFatigueTerm
t = x - y + x (yes, that's what it does)
if t < pcSneak / iPickMinChance:
roll 100, win if roll <= int(pcSneak / iPickMinChance)
else:
t = min(iPickMaxChance, t)
roll 100, win if roll <= int(t)
What I've done so far is...
iPickMaxChance set to 100 (previously 75) (allowing up to 100% success if the stats are high enough)
fPickPocketMod set to 0.008 (previously 0.3)
I came up with this number based on the first thieves guild quest which asks you to steal a diamond. Since one of the ways to obtain it is to pickpocket it, I felt it should be consistently successful for a level 1 character with decent thief specs.
For this I used a wood elf with 45 sneak, 60 agility, and 40 luck, the highest possible starting stats without making luck a main attribute or taking the lover birthsign. This will return 76.25 for the value of (x) when at full stamina. The target is Nalcarya of White Haven, the Balmora alchemist. She returns a value of 27.5 for (y) BEFORE considering valueTerm. This will return a value of 125 for (t).
What I want is for this character to have a (t) value of 100, no higher or lower, since this is supposed to be a beginner mission and this character does have considerably high thieving skills. For this, I will need to subtract a value of 25 from the result (t) so that t = 100 instead of 125 by altering valueTerm. valueTerm should equal 20 so that after modified by npcFatigueTerm, we will get a value of 25.
The diamond has a value of 250. For valueTerm, (10 * 0.008 * 250) will give us a value of 20. Now Nalcarya will return a value of 52.5 for (y) and exactly 100 for (t). Upon testing, it seems that around 1 in 10 times, the pickpocket check will still fail.
Example 2, second thieves guild quest, stealing Nerano Manor Key from Sovor Trandel. Sovor returns 57.75 for the value of (y). The key has no value so valueTerm should be 0. For this test, my character had Sneak 45, Agility 85, Luck 40. My character returns a value of 82.5 for (x) and 107.25 for (t) against Sovor. Again, the pickpocket check will still sometimes fail (it seems much more frequent in this scenario, around 3-4 out of 10 times).
Any advice is appreciated.