-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Armor values different from Exile 3 #245
Comments
This is one of the areas where I think it's fine to depart from the original BoE and treat it as fixing a bug from the original game. If only it were easy to come up with an actual list of these differences… |
There are several different issues at play here.
short defense = get_ran(1,1,item.item_level); And in the short get_ran (short times,short min,short max, bool use_unique_ran){
...
if(max < min) max = min;
if(max == min) return times * min;
... For the Shirt, it is essentially calling The implications of this are that a Shirt has the same defensive value as a Leather Baldric, and is better than a Crude Buckler (due to both encumbrance and weight). I believe that changing the code here (to where |
Are other armor types intended to always block at least 1 damage? If so, then I think it would be better to treat armor level 0 as a special case which doesn't call get_ran(), and the other armors keep 1 as the minimum. And if the UI currently says they block 0-x damage then we should change those to say 1-x damage. I'm not the right person to be making calls about game balance, though. I have no credentials for RPG combat design or tuning. No matter how we fix this, we should do it with a feature flag (I'll implement those asap) so that old replays can keep their dice rolls the same. |
You're right, my mistake. I think armor is expected to always block at least 1 damage. Adding a conditional check for |
I greatly appreciate you looking into to this and doing the hard part (figuring it out)! |
A way to fix this and PR without waiting for feature flags, would be to add the conditional and make it return 0 for 0 armor level, but still call get_ran(), just dropping the value. We have a replay system which relies on keeping seeded randomness the same between versions of the game. If we add or remove a dice-roll, combat in replays diverges greatly. |
Assigning myself to fix the shirt defense bug. If we need to go further and find/fix more discrepancies, I don't really know how. |
Reading back through this issue, I'm seeing that the core problem is the handling of armor value 0 and displaying how much damage it will block. So I will consider it fixed just by handling those things. |
Agreed. The issue isn't specific to Shirts, it's just the most obvious example. Other items affected include the Glue Gauntlets and the Magician's Hat, not to mention items in custom scenarios. Your changes should resolve the issue. |
Armor items with item level 0, will have a base defense value of 0 instead of 1, and display their defense value as such in the get items screen. Fix #245
Exile 3 shirt: defend 1
Openboe shirt: defend 0
The text was updated successfully, but these errors were encountered: