Skip to content
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

Honouring the healing potion limit #25

Open
8 tasks
rickparrish opened this issue Jan 1, 2022 · 19 comments
Open
8 tasks

Honouring the healing potion limit #25

rickparrish opened this issue Jan 1, 2022 · 19 comments

Comments

@rickparrish
Copy link
Owner

rickparrish commented Jan 1, 2022

I'll be using this issue to document the places where the player.healing count is incremented without enforcing the config.maxheals limit, so then we know what needs to be updated and tested.

The first instance I saw relates to pick-pocketing a guest at the dormitory, which leads to some questions about what should happen in an over-limit scenario:

  • If a guest has 10 potions, but I can only hold 2 more, then two possible ways to go would be:

    • I grab all 10, but the game tells me I'm clumsy and drop 8 of them. This updates the game logic for the player (they don't go over limit), but keeps the same logic for the guest (all their potions are stolen/broken, leaving them with zero)
    • I only grab the 2 that I can carry, leaving the guest with 8. This updates the game logic for both the player (limit enforced) and the guest (not all their potions are stolen)
  • If I already have the max number of healing potions, should I still be allowed to pick-pocket, or should it not be an option anymore?

  • Pick-pocketing a guest at the dormitory

    procedure Attack_Guest; {Attack Guest at the Dormitory}

  • Quest penalty should scale to config.maxheals -- what percentage for low, medium, and high?

    case quest.penalty of

  • Quest reward should scale to config.maxheals -- what percentage for low, medium, and high?

    case quest.reward of

  • Online trading. What is global_maxinput? Should it be config.maxheals?

    maxm := global_maxinput - enemy.healing;

  • Online trading. It subtracts from player but doesn't add to enemy -- does that happen elsewhere in the function?

    player.healing := player.healing - nr1;

  • White Water oil at the Gym adds 200 potions if player is already at the healing potion limit. Even if they're not at the limit, they can still go over it if they're within 5 of the limit

    if player.healing < config.maxheals then

  • Dungeon wishing well adds a random number of potions

    Inc(player.healing, x);

  • Dungeon treasure chest adds a number of potions based on level

    player.healing := player.healing + xx;

@dan1982code
Copy link
Collaborator

Great points -- thanks, Rick! I don't have any personal opinion to add here but I do look forward to hearing what others think.

@rickparrish rickparrish mentioned this issue Jan 1, 2022
13 tasks
@rickparrish
Copy link
Owner Author

Thanks Dan. I have a personal preference, but it's by far the worst user experience, so I left it off the list of options :)

@dan1982code
Copy link
Collaborator

:)

I will add that whatever we do here is going to change the gameplay quite a bit; e.g. right now, people routinely use these hacks to stockpile healings. So like before going in for a big kill, people spend a few days gaining healing potions.

If we enforce the limit and remove these hacks, then things like the (t) massage in the gym become a little less useful...

@codefenix-ConChaos
Copy link

I will add that whatever we do here is going to change the gameplay quite a bit; e.g. right now, people routinely use these hacks to stockpile healings. So like before going in for a big kill, people spend a few days gaining healing potions.

If we enforce the limit and remove these hacks, then things like the (t) massage in the gym become a little less useful...

I can totally see your point there. However, it gets ridiculous at several thousand potions.

Perhaps one compromise might be a hidden max threshold. In other words, one can go above the configured limit, but there's a ceiling above that limit (say, 2x whatever the config'd limit is).

Or another idea, maybe allow them to carry above the configured limit for the remainder of that game day. And then have it corrected during the next day's maintenance. Say something like, "some of your extra potions seem to have spoiled during the night", or "went missing", or something.

(It's worth mentioning that this exploit is really only problematic in small games with one player or a team of players performing these actions unopposed by others, and therefore not having a need to even use potions, so it's easier for them to build up the supply. So maybe it's not as big problem in larger games with more players.)

  • I grab all 10, but the game tells me I'm clumsy and drop 8 of them. This updates the game logic for the player (they don't go over limit), but keeps the same logic for the guest (all their potions are stolen/broken, leaving them with zero)
  • I only grab the 2 that I can carry, leaving the guest with 8. This updates the game logic for both the player (limit enforced) and the guest (not all their potions are stolen)

I like both of these ideas as well.

@rickparrish
Copy link
Owner Author

Or another idea, maybe allow them to carry above the configured limit for the remainder of that game day. And then have it corrected during the next day's maintenance. Say something like, "some of your extra potions seem to have spoiled during the night", or "went missing", or something.

I kind of like that idea. Partly because it means just one change in the maintenance instead of several changes all over the place, but also because it mostly restores the sysop's control over the limit, while still allowing a player to temporarily stock up before a big kill.

@BlaZZZed1980
Copy link

I also agree that the maintenance solution would be the ideal fix to this issue... still allowing for a small, temporary boost if necessary, but not allowing it to be exploited for cheating.

@rickparrish
Copy link
Owner Author

I've just pushed new binaries that incorporate the "spoil extra potions during maint" suggestion that @CraigEMP made.

In #23 it was mentioned that some people have stockpiled 20,000 potions. On one hand, that's an absurd use of the loopholes that allow extra potions, so I don't really feel bad for a user trying to unbalance the game to that degree. But on the other hand, if I was a user who went from 20,000 to 75 overnight, I probably wouldn't be very happy.

So maybe spoilage should be a percentage, and for example with 50% of extra spoiling every night it would take around 9 days to go from 20,000 to the default max of 75.

So I guess the two questions are whether we care that some people are going to be in for a big surprise one day, and if so, how quickly we should decrease their stockpile back to the configured limit?

@BlaZZZed1980
Copy link

I think your 50%/day above the allowed limit is perfect.

@codefenix-ConChaos
Copy link

codefenix-ConChaos commented Oct 27, 2022

I've just pushed new binaries that incorporate the "spoil extra potions during maint" suggestion that @CraigEMP made.

I tested this morning and it works nicely! I went into editor and set a test character to 2000 potions, let maintenance run, and then saw the message about the spoilage and found that I was indeed back down to the configured limit.

In #23 it was mentioned that some people have stockpiled 20,000 potions. On one hand, that's an absurd use of the loopholes that allow extra potions, so I don't really feel bad for a user trying to unbalance the game to that degree. But on the other hand, if I was a user who went from 20,000 to 75 overnight, I probably wouldn't be very happy.

So maybe spoilage should be a percentage, and for example with 50% of extra spoiling every night it would take around 9 days to go from 20,000 to the default max of 75.

So I guess the two questions are whether we care that some people are going to be in for a big surprise one day, and if so, how quickly we should decrease their stockpile back to the configured limit?

My personal stance: I have little tolerance for cheating, and I have no qualms about upsetting players who deliberately take advantage of exploits like this.

Then again, it's only a game. :)

Bottom line, 50% per day until corrected is more than reasonable, as long as it's not difficult to implement.

@EdgarVerona
Copy link

EdgarVerona commented Oct 27, 2022 via email

@codefenix-ConChaos
Copy link

codefenix-ConChaos commented Oct 27, 2022

I don't know if it matters either way, but if folks are worried about backlash, what if it just refunded them the difference - so basically maintenance happens and the "refund fairy" comes and takes your extra potions, and gives you some % of their cost as a refund.

Potions only cost money when bought in the Magic Shop or from the monk in the Dungeon, and you cannot buy more than the configured max either way. Potions gained via exploits are gained at no cost. Therefore, your refund fairy would be awarding free money for potions gained through exploits.

Definitely two different modes of thought out there - the "don't punish an exploit the game allowed" group and the "they should have known better" group.

When you put it like this, the 50% per day correction now seems all the more a fair compromise. Less punishing and more forgiving, but still correcting the issue to make it fair for others playing.

@EdgarVerona
Copy link

EdgarVerona commented Oct 27, 2022 via email

@dan1982code
Copy link
Collaborator

Without the thousands and thousands of healing potions exploit, is Supreme Being defeatable? :D just want to make sure because using the healing potions exploit is how I finished the game in the past.

@BlaZZZed1980
Copy link

I did it just the other day with some mediocre weapons, and only 3 white-water massages to boost the potions up to around 500. That wouldn't have been affected by this new cleanup routine anyway. So, yes. It's very doable.

@codefenix-ConChaos
Copy link

I've done it with the default 125. Just by standard dungeon grinding, daily Orbs drinks, and spending all my wishing well wishes on defense.

@rickparrish
Copy link
Owner Author

Only spoiling 50% of the extra is an easy change. I still didn't setup a game, so as with the last binaries these aren't tested, so please backup before seeing how they work!

@BlaZZZed1980
Copy link

Updated to the win32 binary with 50% spoilage. Works fine! Thanks so much for this update.

@codefenix-ConChaos
Copy link

I concur that the 50% fix works great. I tested the go32-v2 (DOS) version as well.

Thanks for this update. It goes a long way to fix some balance issues.

And since it's been brought up more than once in this thread, to those concerned that you somehow need thousands of extra potions to win the game:

  1. You don't.
  2. A sysop may allow a higher maximum potion amount (up to 9999), which can be still kept legitimately with this change.

@rickparrish
Copy link
Owner Author

Thanks for testing!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants