1. So far I think I like the encumbrance mode the best, because it seems most realistic to me. The weight of all that stuff in your pack will drag you down whether you're wearing it or not. It's also the only mode where strength plays a role. With the other modes, it's all about speed/athletics. This mode also gives you another reason to use feather effects (and in this context feather can be superior to fortify strength).
With encumbrance mode, at speed and athletics of 50, 1/3 encumbrance in the water is tolerable, but much more than that and you'll have a serious problem. At 100 speed/athletics, 2/3 encumbrance is okay, 3/4 is problematic. If you want to be able to swim decently fully encumbered, you'll need speed/athletics above 150 (or one well above).
2. The default multiplier does seem to have basically the same effect on all three modes, but the equipment weight mode is a bit of an outlier, just because there's such a big difference between the lightest and heaviest heavy armor.
In armor class mode, the worst case scenario is 270 downpull with nine heavy pieces. In encumbrance mode, worst case is 300, at full encumbrance (it could be higher, but then you'd be over encumbered anyway). But in equipment weight mode, it really varies a lot depending on what kind of equipment you're wearing.
If you're wearing full iron/steel/dwemer armor, this mode is about the same as the worst-case scenario in the other modes. But in full daedric armor and a daedric war axe, you're at 852 downpull, and there's no way you'll be able to surface unless speed/athletics are both like 300+.
I'm not sure if there's a good way to address this difference. It feels too punishing with super-heavy equipment compared to the other modes, but shifting the formula downward would probably make it feel too lenient with relatively lighter equipment like steel. All I can think of is either implementing a cap, or changing the formula such that each additional unit of weight has less and less of an additional penalty (maybe logarithmic instead of linear).
3. One thing I'd like to see is a mode where all three values are calculated and the worst is applied. Maybe also separately configurable multipliers for the different modes.
Anyway, I think this is a great mod.
Edit: Actually, here's an idea for the equipment weight mode formula, without using logs:
Weight above 135 only counts 10%. For a full set of glass armor plus war axe, pulldown is 136.8. For iron, it's 272.6, almost exactly double glass. For ebony it's 299.8, and for daedric 328.2. So not a huge difference between iron and daedric, but a big difference between glass and iron. Maybe sacrifices a bit of realism for a bit more consistency between modes.
Thanks for taking the time to do this analysis. :) I've implemented your updated forumla as a new formula option, and it definitely balances out the heavy armours.
I like the idea of a "worst of the bunch" mode as well. I'll implement that and separately configurable multipliers (should've done that from the beginning lol) for the next version.
1. In the all equipment necro edit mode, in term2, the 270 term should also be modified by (mult/100) - this is my mistake. It should be whatever term1 is at 135 weight, which is 270 when mult = 100. So: (mult/100) * ((weight - 135) * 0.2 + 270)
2. Ideally there would be an option for the "worst case scenario" mode to take into account only one of the "all equipment" values, either the regular one or the necro edit one. Right now I'm commenting out the line for the regular all equipment formula so it's not included in the comparison.
In any case, there's no need to include both the regular and necro edit all equipment formulas in the comparison, since the latter is guaranteed to be no higher than the former.
3. There's a copy/paste error in the MCM description for the all equipment necro edit mode. It should be based on the regular all equipment mode, not the encumbrance mode. Also, the descriptions and dropdown options are in a non-ideal order (because of pairs). Fixing that might be more trouble than it's worth though.
4. I was too optimistic earlier in my analysis of encumbrance mode (though I still like it best of the original three). At 50 speed/athletics, you really don't want to have any higher than 1/4 encumbrance to swim reasonably comfortably - 1/3 is very problematic (though you can keep surfaced with a great deal of effort). At 100 speed/athletics, 2/5 encumbrance is somewhat comfortable, but 1/2 is problematic. To swim comfortably fully encumbered, you would need speed/athletics both well above 200.
This is a lot more realistic than vanilla. When people swim in the real world, their "encumbrance" is basically 0, a swimsuit that weighs maybe a few ounces at most. If we were carrying in the water 1/4 the maximum amount we're strong enough to lug around with us on land, we'd be dragged down too.
2. I thought about this, but wasn't really sure how to address the issue, so I just... didn't, haha. I suppose an option would be the best solution. I'll add that for the next version.
3. Whoopsie, fixed that copy/paste error. As for the order of the dropdown, that one really irked me, but I really didn't want to go back on dynamically generating the MCM. :( I also figured it would be more trouble than it's worth to fix, but maybe someday it'll annoy me enough to make me go through the trouble lol.
Thanks again for all the input, I really appreciate it!
2. Worst case scenario mode considers equipped armor and all equipment modes, and either all equipment necro edit mode or encumbrance mode, depending on the mcm setting. All equipment and encumbrance formulas should be swapped. So change
results.equippedArmour = formulas.equippedArmour(actor, ref) results.allEquipment = formulas.allEquipment(actor, ref) if config.allEquipmentWorstCaseNecroMode then results.allEquipmentNecroEdit = formulas.allEquipmentNecroEdit(actor, ref) else results.encumbrancePercentage = formulas.encumbrancePercentage(mobile, ref) end
to
results.equippedArmour = formulas.equippedArmour(actor, ref) results.encumbrancePercentage = formulas.encumbrancePercentage(mobile, ref) if config.allEquipmentWorstCaseNecroMode then results.allEquipmentNecroEdit = formulas.allEquipmentNecroEdit(actor, ref) else results.allEquipment = formulas.allEquipment(actor, ref) end
3. Actually to make the options/descriptions appear in order, the table in common.lua could be something like
and then iterate through it with ipairs. This isn't too bad, although in your main function you'd have to iterate through the whole table to find the correct mode. Maybe iterate through the table until you find one where .value == config.mode, then use .mode to fetch the correct formula. Something like
for _, t in ipairs(common.modes) do if t.value == config.mode then downPull, debugStr = formulas[t.mode](actor, mobile, ref) break end end
although you'd have to standardize the parameters.
Whoops, that's what I get for doing all my coding after a 10-hour workday, lol. 1+2 are fixed. Additionally, 3 has been implemented; thanks for that snippet, I was really hoping to get rid of that nasty if/elseif block.
Looks like 1.3.0 is working perfectly, at least I'm not noticing any problems after 5 minutes of testing :)
Actually there is one thing, but it's minor. This isn't mentioned in the MCM, but due to the way you get the config now, any changes to settings require restarting Morrowind to be effective. You can set restartRequired = true in the MCM settings so the player will be notified.
And there's a tiny typo in one of the dropdowns, an errant ")" at the end.
That's not something minor to me lol, so I reverted to not resetting config values of mismatched type to the defaults. I was trying to prevent any "help mod doesn't work after update" comments, but I'll just put a warning.
I couldn't tell from the video. Can you walk along the bottom once you sink, or are you immobilized? There's an old mod by Yacoby called Swimming Realism that reduces your carrying capacity to 20% normal when you're in water, but it just prevents you from moving, like when you're normally over encumbered. I always wanted to be able to put on a heavy suit of armor and walk along the ocean floor.
Excellent. Exactly what I was hoping for. I know that alternate movement animations aren't possible yet, although I did see an experiment to use the swimming animation for levitation, so maybe someday.
A great concept and some good work, but it could use some polish. When I tried to turn it off in the menu nothing changed and my character was still being pulled down. Also, my character was being pulled down even on an empty inventory which forced me to keep moving to stay above the water, I think this is a bit excessive. Perhaps it could have no effect until you reach a certain level of encumbrance? Perhaps this level could be affected by Athletics?
First issue is fixed. Second "issue" is impossible, you probably had it configured wrong. 0 Encumbrance will not be pulled down if that option is enabled. Athletics already affects an actor's swimspeed which counteracts the negative z velocity the mod adds, and I have no desire to make these formulas any more complex. If you don't want to be slightly pulled down with low encumbrance, use one of the other options.
Great idea, I was thinking about this problem that I may swim in full armor and lot of stuff, only a bit slower.
I would consider make this only encumbrance depended - as one may cast feather spell (or enchanted armor like Daedric armor given by Therana for Auriel Bow).
This is still land of magic and any realism mod should consider magic.
Turns out the player was only affected because I made a dumb error lol. That's been fixed, and an option to properly only affect the player has been added.
28 comments
1. So far I think I like the encumbrance mode the best, because it seems most realistic to me. The weight of all that stuff in your pack will drag you down whether you're wearing it or not. It's also the only mode where strength plays a role. With the other modes, it's all about speed/athletics. This mode also gives you another reason to use feather effects (and in this context feather can be superior to fortify strength).
With encumbrance mode, at speed and athletics of 50, 1/3 encumbrance in the water is tolerable, but much more than that and you'll have a serious problem. At 100 speed/athletics, 2/3 encumbrance is okay, 3/4 is problematic. If you want to be able to swim decently fully encumbered, you'll need speed/athletics above 150 (or one well above).
2. The default multiplier does seem to have basically the same effect on all three modes, but the equipment weight mode is a bit of an outlier, just because there's such a big difference between the lightest and heaviest heavy armor.
In armor class mode, the worst case scenario is 270 downpull with nine heavy pieces. In encumbrance mode, worst case is 300, at full encumbrance (it could be higher, but then you'd be over encumbered anyway). But in equipment weight mode, it really varies a lot depending on what kind of equipment you're wearing.
If you're wearing full iron/steel/dwemer armor, this mode is about the same as the worst-case scenario in the other modes. But in full daedric armor and a daedric war axe, you're at 852 downpull, and there's no way you'll be able to surface unless speed/athletics are both like 300+.
I'm not sure if there's a good way to address this difference. It feels too punishing with super-heavy equipment compared to the other modes, but shifting the formula downward would probably make it feel too lenient with relatively lighter equipment like steel. All I can think of is either implementing a cap, or changing the formula such that each additional unit of weight has less and less of an additional penalty (maybe logarithmic instead of linear).
3. One thing I'd like to see is a mode where all three values are calculated and the worst is applied. Maybe also separately configurable multipliers for the different modes.
Anyway, I think this is a great mod.
Edit: Actually, here's an idea for the equipment weight mode formula, without using logs:
term1 = (mult/100) * weight * 2
term2 = ((mult/100) * (weight - 135) * 0.2) + 270
downpull = math.min(term1, term2)
Weight above 135 only counts 10%. For a full set of glass armor plus war axe, pulldown is 136.8. For iron, it's 272.6, almost exactly double glass. For ebony it's 299.8, and for daedric 328.2. So not a huge difference between iron and daedric, but a big difference between glass and iron. Maybe sacrifices a bit of realism for a bit more consistency between modes.
I like the idea of a "worst of the bunch" mode as well. I'll implement that and separately configurable multipliers (should've done that from the beginning lol) for the next version.
1. In the all equipment necro edit mode, in term2, the 270 term should also be modified by (mult/100) - this is my mistake. It should be whatever term1 is at 135 weight, which is 270 when mult = 100. So: (mult/100) * ((weight - 135) * 0.2 + 270)
2. Ideally there would be an option for the "worst case scenario" mode to take into account only one of the "all equipment" values, either the regular one or the necro edit one. Right now I'm commenting out the line for the regular all equipment formula so it's not included in the comparison.
In any case, there's no need to include both the regular and necro edit all equipment formulas in the comparison, since the latter is guaranteed to be no higher than the former.
3. There's a copy/paste error in the MCM description for the all equipment necro edit mode. It should be based on the regular all equipment mode, not the encumbrance mode. Also, the descriptions and dropdown options are in a non-ideal order (because of pairs). Fixing that might be more trouble than it's worth though.
4. I was too optimistic earlier in my analysis of encumbrance mode (though I still like it best of the original three). At 50 speed/athletics, you really don't want to have any higher than 1/4 encumbrance to swim reasonably comfortably - 1/3 is very problematic (though you can keep surfaced with a great deal of effort). At 100 speed/athletics, 2/5 encumbrance is somewhat comfortable, but 1/2 is problematic. To swim comfortably fully encumbered, you would need speed/athletics both well above 200.
This is a lot more realistic than vanilla. When people swim in the real world, their "encumbrance" is basically 0, a swimsuit that weighs maybe a few ounces at most. If we were carrying in the water 1/4 the maximum amount we're strong enough to lug around with us on land, we'd be dragged down too.
2. I thought about this, but wasn't really sure how to address the issue, so I just... didn't, haha. I suppose an option would be the best solution. I'll add that for the next version.
3. Whoopsie, fixed that copy/paste error. As for the order of the dropdown, that one really irked me, but I really didn't want to go back on dynamically generating the MCM. :( I also figured it would be more trouble than it's worth to fix, but maybe someday it'll annoy me enough to make me go through the trouble lol.
Thanks again for all the input, I really appreciate it!
1. The term2 formula isn't actually fixed - (mult/100) still only affects the first part. Change
local term2 = ((config.multipliers.allEquipment / 100) * (totalWeight - 135) * 0.2 + 270)
to
local term2 = (config.multipliers.allEquipment / 100) * ((totalWeight - 135) * 0.2 + 270)
2. Worst case scenario mode considers equipped armor and all equipment modes, and either all equipment necro edit mode or encumbrance mode, depending on the mcm setting. All equipment and encumbrance formulas should be swapped. So change
results.equippedArmour = formulas.equippedArmour(actor, ref)
results.allEquipment = formulas.allEquipment(actor, ref)
if config.allEquipmentWorstCaseNecroMode then
results.allEquipmentNecroEdit = formulas.allEquipmentNecroEdit(actor, ref)
else
results.encumbrancePercentage = formulas.encumbrancePercentage(mobile, ref)
end
to
results.equippedArmour = formulas.equippedArmour(actor, ref)
results.encumbrancePercentage = formulas.encumbrancePercentage(mobile, ref)
if config.allEquipmentWorstCaseNecroMode then
results.allEquipmentNecroEdit = formulas.allEquipmentNecroEdit(actor, ref)
else
results.allEquipment = formulas.allEquipment(actor, ref)
end
3. Actually to make the options/descriptions appear in order, the table in common.lua could be something like
this.modes = {
{
mode = "equippedArmour",
value = 0,
description = "...",
},
{
mode = "allEquipment",
value = 1,
description = "...",
},
...
}
and then iterate through it with ipairs. This isn't too bad, although in your main function you'd have to iterate through the whole table to find the correct mode. Maybe iterate through the table until you find one where .value == config.mode, then use .mode to fetch the correct formula. Something like
for _, t in ipairs(common.modes) do
if t.value == config.mode then
downPull, debugStr = formulas[t.mode](actor, mobile, ref)
break
end
end
although you'd have to standardize the parameters.
Actually there is one thing, but it's minor. This isn't mentioned in the MCM, but due to the way you get the config now, any changes to settings require restarting Morrowind to be effective. You can set restartRequired = true in the MCM settings so the player will be notified.
And there's a tiny typo in one of the dropdowns, an errant ")" at the end.
I know that alternate movement animations aren't possible yet, although I did see an experiment to use the swimming animation for levitation, so maybe someday.
I would consider make this only encumbrance depended - as one may cast feather spell (or enchanted armor like Daedric armor given by Therana for Auriel Bow).
This is still land of magic and any realism mod should consider magic.
I suppose I could make an option for player-only.