HabitRPG / habitica

A habit tracker app which treats your goals like a Role Playing Game.
https://habitica.com
Other
12.02k stars 4.1k forks source link

Fix Overpowered Skills [$50] #3029

Closed nbeckstead closed 9 years ago

nbeckstead commented 10 years ago

When I use backstab with my level 63 rogue, I get about 200 GP. I find this level of reward for spending 15 mana is sufficiently overpowered that I don't use the ability. My User ID: 66440307-9628-4eca-b448-ba008e82a3b3.

Did you help close this issue? Go claim the $50 bounty on Bountysource.

samwisegodfrey commented 10 years ago

When I use backstab (level 18 rogue) I get anywhere from 200 as nbeckstead described to over 400 GP. But then if I refresh the page, it subtracts again, but the mana remains lost. If I try to buy something with the gold before I refresh, the item will also be gone when I do. User ID f2a63afc-0714-4058-bc85-9d61862d1a24

deilann commented 10 years ago

That just sounds like you're happening upon doing this when we're having server issues. So it's happening locally, but not saving to the server. Refund yourself the mana and GP by going to Settings > Site and clicking "Fix Character Values"

On Wed, Mar 26, 2014 at 12:01 PM, samwisegodfrey notifications@github.comwrote:

When I use backstab (level 18 rogue) I get anywhere from 200 as nbeckstead described to over 400 GP. But then if I refresh the page, it subtracts again, but the mana remains lost. If I try to buy something with the gold before I refresh, the item will also be gone when I do. User ID f2a63afc-0714-4058-bc85-9d61862d1a24

Reply to this email directly or view it on GitHubhttps://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-38725528 .

ShabbyX commented 10 years ago

I have a very blue task (with score 200 I think) and backstab gives me ~700 GP and ~700 XP. While I do enjoy being virtually rich (even though I don't need the money), I think its reward is ridiculously high. Especially since pickpocket for the same task gives a mere ~20GP and backstab takes just 5 MP more.

Or, perhaps I should take the habit off the list, since it seems to be an already established habit...

deilann commented 10 years ago

You could also just use Backstab on a less blue Habit, until Sabe kibbles it. :) That should reduce it a bit. I sure know that I'd feel weird getting that big of a reward from 15 MP!

On Fri, Jul 11, 2014 at 12:48 AM, Shahbaz Youssefi <notifications@github.com

wrote:

I have a very blue task (with score 200 I think) and backstab gives me ~700 GP and ~700 XP. While I do enjoy being virtually rich (even though I don't need the money), I think it's reward is ridiculously high. Especially since pickpocket for the same task gives a mere ~20GP and backstab takes just 5 MP more.

Or, perhaps I should take the habit off the list, since it seems to be an already established habit...

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-48703188.

ShabbyX commented 10 years ago

@deilann , well I deleted that reward manually and removed those habits. I came to the conclusion that if the habit has a score of 200, then I'm doing well in it and I don't need to track it with HabitRPG. I stopped using backstab altogether.

deilann commented 10 years ago

{alys: notedallabovehere}

Yeah. When I play rogue, I stopped using Backstab altogether myself, which is part of the reason I'd like to see it nerfed. When it's so powerful that using it is no fun...

On Mon, Jul 14, 2014 at 12:31 PM, Shahbaz Youssefi <notifications@github.com

wrote:

@deilann https://github.com/deilann , well I deleted that reward manually and removed those habits. I came to the conclusion that if the habit has a score of 200, then I'm doing well in it and I don't need to track it with HabitRPG. I stopped using backstab altogether.

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-48948324.

lemoness commented 10 years ago

{alys: copied}

How would we like to go about rebalancing Backstab? Have been hearing complaints from my party members, so it's on my mind.

Some relevant comments from the Trello card: (Yuu) "Yes, Rogue's backstab is awesome for long streaks, but with low intelligence, it is really hard to get the mp to use it. Plus, it doesn't damage bosses, which I think is unfair, since the frequency of use counteracts the high value. I think it would be neat if backstab kept the 30% crit rate, but also had a 30% miss rate, and damaged the boss. Plus, during collection quests, my rogue did collect more pieces, but not significantly so."

(starsystemic) "I think that Pickpocket and Backstab need to be tweaked a bit. As it stands now, I never use Pickpocket because it's outclassed in every way by Backstab for just 5MP more. I think that it would remain relevant if (all numbers are just for illustration purposes, not actual value suggestions) Pickpocket gave 100 gold, and Backstab gave 50 EXP and 25 gold (or just EXP and no gold at all) - that way, if I just needed some gold, I'd turn to Pickpocket every time, instead of going for the slightly more expensive EXP boosting Backstab. (Oh, and it would be great if Backstab did boss damage, but I feel like I might have already said that somewhere else? It feels weird to have such a combat oriented flavor name that doesn't do any damage)."

I know we decided not to make Backstab damage bosses because Rogues and Healers are supposed to be support classes, but the issue with Backstab does remain.

According to the wiki, this is how Pickpocket works: y = task value + 2 + (PER / 2) GP = 25 * y / (y + 75) If the task value is negative, "-1" is used instead of its value. The maximum gold obtainable with pickpocket is 25. For a new task (a yellow task with a value of 0): At PER=50 you will receive 6.6 GP. At PER=200 you will receive 14.4 GP.

This is how Backstab currently works: You damage the task by adding 0.03 to its value. GP = task value + 1 XP = task value + 1 If the task value is negative, "0" is used instead of its value. A red/orange task will give you 1 XP and 1 GP. A green task will give you 1-5 XP and 1-5 GP. A blue task will give you 10 XP and 10 GP or more (up to thousands for very blue tasks). There is a 30% chance of a critical hit, in which case the damage, XP gain, and GP gain are increased by an amount that is based partially on 2% of your STR.

I'd like to see the algorithm for Backstab changed so it corresponds with starsystemic's suggestion.

ShabbyX commented 10 years ago

{alys: important}

@lemoness, actually starsystemic's idea is not bad at all. How about this, keep pickpocket as it is:

y = task value + 2 + (PER / 2)
GP = 25 * y / (y + 75)

so, having a reward that is at maximum 25GP, and tweak backstab:

y = task value + 2 + (PER / 2)
GP = 15 * y / (y + 75)
XP = (20 + level / 2) * y / (y + 75)

which means less gold (maximum 15), but instead some XP which is at maximum 70. I made the XP scale with level, because a limit like 20 XP is way too low for high level players and a high limit is way too much for low level players. I divided the level by 2, because higher level means more mana which means more frequency of cast, so there is no point in making backstab give a lot of XP. It will simply be invoked many times.

I'd say that on critical hit, it would make sense to do some damage to boss. Of course, since backstab doesn't actually finish the task, it makes sense for the critical hit to be less than the damage done by finishing the task, perhaps a fixed percentage of it. This has a very nice side effect as well! If I choose a red task, I get less GP and XP, but the critical hit results in a higher damage to the boss. On the other hand, if I choose a blue task, I get more GP and XP, but the critical hit would be rather negligible. So there's that choice there I have to make, which makes it more interesting.

Beware of one thing though, if someone has a very dark red task, as a low-priority something to do in the future whenever doesn't matter (as I do myself), then having backstab do a percentage of task-finish damage on critical hit could again mean overpowered backstab. So a limiting formula, similar to your pickpocket formula may be useful again (adjust use of STR to become similar to your other critical hit formulas):

z = some_function_of(STR) + 2 - task value
td = task damage
Critical Damage = sqrt(td) * log(td) * z / (z + 25)

where task value for blue tasks is 1 (opposite of pickpocket, because we want to value red tasks more). I guess task finish damage is also a function of task value involving strength, so perhaps the STR could be removed from z. For the maximum critical damage, I chose sqrt(td) * log(td) just by experimenting. It looks like this:

sqrt(td) * log(td)

which means for tasks that would give 20 damage on completion, it does ~14 damage while for tasks that would give 200 damage on completion, it would do ~75. If you think that's too much, you could also do for example:

Critical Damage = sqrt(td) * sqrt(log(td)) * z / (z + 25)

which gives the following maximum damage:

sqrt(td) * sqrt(log(td))

for finish damage 20 gives ~8 damage and for finish damage 200 gives ~32.

lemoness commented 10 years ago

{alys: noted}

I think we won't have Backstab do any damage to the boss, but I like this solution otherwise! That being said, number are NOT my specialty, so I'd love some feedback from other people.

On Wed, Sep 10, 2014 at 12:55 AM, Shahbaz Youssefi <notifications@github.com

wrote:

!lemoness, actually starsystemic's idea is not bad at all. How about this, keep pickpocket as it is:

y = task value + 2 + (PER / 2) GP = 25 * y / (y + 75)

so, having a reward that is at maximum 25GP, and tweak backstab:

y = task value + 2 + (PER / 2) GP = 15 * y / (y + 75) XP = (20 + level / 2) * y / (y + 75)

which means less gold (maximum 15), but instead some XP which is at maximum 70. I made the XP scale with level, because a limit like 20 XP is way too low for high level players and a high limit is way too much for low level players. I divided the level by 2, because higher level means more mana which means more frequency of cast, so there is no point in making backstab give a lot of XP. It will simply be invoked many times.

I'd say that on critical hit, it would make sense to do some damage to boss. I don't know the formula of critical hit for other tasks, but probably one of the ones you already have is ok. Of course, since backstab doesn't actually finish the task, it makes sense for the critical hit to be less than the damage done by finishing the task.

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-55082424.

betaveros commented 10 years ago

{alys: copied} {alys: important}

Are there plans to make this change or discuss it further? I'd like to have a nerfed Backstab to play with, and @ShabbyX's formulae seem good. The only change I'd make is to get rid of the (20 + level / 2) factor --- I don't think it's necessary since low-level players' y values would probably make their boosts far from the cap anyway and the increasing ease with which high-level players get MP would cause more of a balancing issue. I'd just replace it with a constant, perhaps 75 again, the same cap as for Burst of Flames.

lemoness commented 10 years ago

{alys: copied} {alys: important}

If people think this change looks good, then a programmer is free to make it!

Note that Burst of Flames is also OP in its current form, though, if you're referencing its cap. Mostly in terms of boss damage.

Honestly, we should probably have all of these skill changes consolidated into a single ticket for ease of implementation, pulling from the Trello discussions as well.

On Sat, Nov 8, 2014 at 6:56 AM, Brian notifications@github.com wrote:

Are there plans to make this change or discuss it further? I'd like to have a nerfed Backstab to play with, and @ShabbyX https://github.com/ShabbyX's formulae seem good. The only change I'd make is to get rid of the (20 + level / 2) factor --- I don't think it's necessary since low-level players' y values would probably make their boosts far from the cap anyway and the increasing ease with which high-level players get MP would cause more of a balancing issue. I'd just replace it with a constant, perhaps 75 again, the same cap as for Burst of Flames.

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-62260470.

betaveros commented 10 years ago

{alys: noted}

There already appears to be a PR (not mine) about these issues --- https://github.com/HabitRPG/habitrpg-shared/pull/331 . I haven't looked too closely at it. It seems strange to use STR so much for a Rogue skill. But I thought somebody else more familiar than I am about these issues would be better qualified to give feedback, and it would be weird for me to PR before this other PR gets discussed or resolved.

betaveros commented 10 years ago

{alys: noted}

Is there anything I can do to further this discussion? If I made a PR right now nerfing Backstab exactly as discussed above and nothing else, would it be likely to get merged? (I'm hesitant because of the other PR I linked. Not to mention it would also be a big change probably requiring an announcement in advance of some kind.)

I don't want to be pushy --- this is an open-source project and everybody here is a volunteer, I know. But a more balanced Backstab, one that doesn't completely drown out the effects of my normal task completion but still lets me feel Rogue-like, is probably the single thing that would improve my HabitRPG experience the most right now.

lemoness commented 10 years ago

{alys: noted}

I would say probably yes, but I think that if you can swing it, it would make sense to do all of the skill rebalancing at the same time - that way people only have to readjust once.

Looks like someone wanted to implement hyperbolic functions originally - check out the description/attached documents on this page: https://trello.com/c/L1H6LiZ3/110-classes-v-2-character-stats-attributes-the-class-system-buffs

Backstab fix proposed:

@ShabbyX: "How about this, keep pickpocket as it is:

y = task value + 2 + (PER / 2) GP = 25 * y / (y + 75) so, having a reward that is at maximum 25GP, and tweak backstab:

y = task value + 2 + (PER / 2) GP = 15 * y / (y + 75) XP = (20 + level / 2) * y / (y + 75) which means less gold (maximum 15), but instead some XP which is at maximum 70. I made the XP scale with level, because a limit like 20 XP is way too low for high level players and a high limit is way too much for low level players. I divided the level by 2, because higher level means more mana which means more frequency of cast, so there is no point in making backstab give a lot of XP. It will simply be invoked many times."

Valorous Presence fix proposed:

@betaveros: "Another benefit of capping or reducing the growth of the crit multiplier would be making Backstab less overpowered, although I don't think that change would be enough by itself.

Here's a specific proposal (I didn't compile or run exactly this yet, only mocking-up in another language):

crit: (stat='str', chance=.03) -> if user.fns.predictableRandom() <= chance_(1+user._statsComputed[stat]/100) then 1.5 + diminishingReturns(.005_user._statsComputed[stat], 4, 1) else 1 Expanded version:

crit: (stat='str', chance=.03) -> s = user.statsComputed[stat] if user.fns.predictableRandom() <= chance(1+s/100) then 1.5 + 4_s/(s+200) else 1 A table for comparison:

stat old mult new mult 1.0 1.52000 1.51990 25.0 2.00000 1.94444 50.0 2.50000 2.30000 75.0 3.00000 2.59091 100.0 3.50000 2.83333 150.0 4.50000 3.21429 200.0 5.50000 3.50000 250.0 6.50000 3.72222 300.0 7.50000 3.90000 400.0 9.50000 4.16667"

Burst of Flames fix proposed: @deilann: "I suggest making Burst of Flames work much like Brutal Smash, which does 20% of your STR as damage. However, due to mages having higher MP, I think it would be more appropriate to make Burst of Flames do 10% of the users INT as damage. Mages tend to have more than twice as much mana and gain it back faster."

Note: Ideally, the game should be optimized for levels 1-100, and leveling after 100 should show no increase or benefit to skills, stats, etc. So the highest Stat you could have for something is around 200 (100 attribute points + 50 perfect day bonus + 50 if you're wearing both legendary weapons that affect that stat... might go a little higher depending on your other equipment but I think that varies per stat) and the game should be balanced with that in mind. (We could also just go ahead and say that 200 is the absolute maximum stat you can have in game to keep it a round number.)

Are there any other skills that need nerfing? Those seem to be the main complaints I get.

Alys commented 10 years ago

{alys: noted}

If we're modifying several skills at once, can we make Tools of the Trade more powerful? It's VERY weak at the moment. For a level 15 Rogue with all attribute points allocated to PER, a single cast of that skill increases the drop chance for a new yellow To-Do from 25.1% to 25.2%. The player has to cast it about eight times (200 MP!) to increase the drop chance to 26%. I think this makes the skill pretty much worthless.

The relevant code is: member.stats.buffs.per += Math.ceil(user._statsComputed.per * .03)

If .03 is changed to 2.0, then a single cast of Tools of the Trade will increase drop chance from 25% to 30% for a level 15 player, which feels reasonable to me. For a level 100 payer with 100 points of PER, a single cast would increase drop chance from 38% to 52% (maybe that is too much).

lemoness commented 10 years ago

{alys: noted}

No objections here, since players have drop caps anyway, so Tools of the Trade has a natural cap - unless it affects gold gain as well, in which case it will need diminishing returns like the others.

lemoness commented 10 years ago

{alys: noted}

Ah, just looked it up - it does affect gold, so we'll need to give it diminishing returns. Happy to raise the base, though.

On Sunday, November 16, 2014, S Leslie leslie@habitrpg.com wrote:

No objections here, since players have drop caps anyway, so Tools of the Trade has a natural cap - unless it affects gold gain as well, in which case it will need diminishing returns like the others.

On Sunday, November 16, 2014, Alice Harris <notifications@github.com javascript:_e(%7B%7D,'cvml','notifications@github.com');> wrote:

If we're modifying several skills at once, can we make Tools of the Trade more powerful? It's VERY weak at the moment. For a level 15 Rogue with all attribute points allocated to PER, a single cast of that skill increases the drop chance for a new yellow To-Do from 25.1% to 25.2%. The player has to cast it about eight times (200 MP!) to increase the drop chance to 26%. I think this makes the skill pretty much worthless.

The relevant code https://github.com/HabitRPG/habitrpg-shared/blob/develop/script/content.coffee#L538 is: member.stats.buffs.per += Math.ceil(user._statsComputed.per * .03)

If .03 is changed to 2.0, then a single cast of Tools of the Trade will increase drop chance from 25% to 30% for a level 15 player, which feels reasonable to me. For a level 100 payer with 100 points of PER, a single cast would increase drop chance from 38% to 52% (maybe that is too much).

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-63209796.

ShabbyX commented 10 years ago

{alys: noted}

I'm all for what @alys said! And yes, surely with diminishing returns

lemoness commented 9 years ago

{alys: noted}

I've added a $50 bounty for whoever implements all these changes!

I was wondering - do we think we should also add diminishing returns for Ethereal Surge?

selena-ariel commented 9 years ago

{alys: noted}

So far, my entire expertise with programming consists of writing "Hello world!" programs in Java, and although fiddling with complex code is great fun, there's no way I'm going to start playing around with the code where I can actually mess it up. However, I thought of a few problems/solutions that seemed so obvious to me that there must be a reason they're not already being used, yet they still seem so annoyingly obvious it will bother me forever if I don't point them out somewhere: 1) ethereal surge shouldn't add to other mage's mana. It's very nice that a powerful mage isn't able to generate his own infinite mana pool, but that's not very helpful if two mages can do it together. 2) there should be a cap on much how a stat can be buffed. Right now, some players' stats are over 6 digits long, and that's ridiculous. playing around any of the other non-buffing skills isn't going to help a player with INT = 454,984,156.Just sayin'...

I fiddled around with the code a bit to create caps for the total buff a stat can be granted by using spells (pasted into my own notepad document so that I didn't mess anything up). I honestly don't know how to program, and creating the buffs cap seemed so ridiculously easy that I am sure I must have done it wrong or missed some important detail. So here's a snapshot of my first coding attempt, just in case anyone's interested: coding

(I went through the entire spells code adding caps wherever they seemed appropriate, but I'm not going to paste the entire thing)

selena-ariel commented 9 years ago

{alys: noted}

here's an example, just to give all of the hard-working coders (who are so awesome! I absolutely love :sparkling_heart: this game!!!) a touch of amusement to their day:

ridiculousbuffs

This user must really be hacking away at those to-dos! :smile:

ShilohT commented 9 years ago

{alys: noted}

I'm going to work on implementing these, if that's okay.

betaveros commented 9 years ago

{alys: noted, asked for new PR}

I've been pretty busy in real life, but just for the record, my crit cap has a PR here.

ShilohT commented 9 years ago

{alys: noted, also PR above}

I've implemented the suggested changes to Backstab, Burst of Flames, and Tools of the Trade. Still need to put in diminishing returns on Tools, but I don't think I'm the right person to decide on what the cap/s should be. If there's anything else to do, just say the word! (Ethereal Surge is already capped at 25, by the way.)

ShabbyX commented 9 years ago

{alys: ignore}

@selena-ariel

my entire expertise with programming consists of writing "Hello world!" programs in Java

I think you would do well with first ditching the horrible notepad and get a descent editor. You could also ditch the horrible windows altogether and switch to a descent operating system.

You would be surprised how much difference a good terminal makes for a programmer.

betaveros commented 9 years ago

{alys: noted}

Hmm, my opinion on Backstab might have gotten lost: I still think the XP should just get a constant cap like XP = 75 * y / (y + 75). It's more like Burst of Flames; a player starting out isn't going to have a high value of y, so he/she won't get an XP gain close to the cap; and casting spells gets easier as you level up and your INT increases anyway, so one's total XP gain from Backstab already increases linearly, which I think is roughly the same growth that everyday task usage should go through. 75 might be too high, though. Any comments?

As for buff diminishing, we could change everything like Math.ceil(user._statsComputed.xyz * k) to Math.ceil(diminishingReturns(user._statsComputed.xyz, 200*k, 200)), of course manually putting in the constant 200*k depending on what the constant k was in different parts of the code. This would make the buffs grow roughly the same as they do now for low stats while capping them. It's still a generous cap on par with my critical multiplier one, since I think the total effect of this change will cap the effects of stats in most of the problematic places.

selena-ariel commented 9 years ago

{alys: ignore}

@ShabbyX Hmm thanks for the advice. I'm working on it, but my USB broke a few days ago and I won't be able to install a new O.S. until I get a new one. As soon as I get some decent programming software installed on my computer, I'll be able to start practicing so's I can actually be useful someday...

Alys commented 9 years ago

{alys: noted}

A Healer in the party that one of my accounts is in has pointed out that Protective Aura is rather weak. He's thinking it might be better if it was twice as powerful, which would be easy to do with the current code - change .15 to .3 in https://github.com/HabitRPG/habitrpg-shared/blob/develop/script/content.coffee#L579

There's also discussion happening in the party about ways of making the effects of the skill random across a range of values, but with values in the middle of the range more common than the extremes. Is that something we might be interested in looking at?

deilann commented 9 years ago

{alys: noted}

ooooo I like that idea.

On Tue, Dec 2, 2014 at 1:10 AM, Alice Harris notifications@github.com wrote:

A Healer in the party that one of my accounts is in has pointed out that Protective Aura is rather weak. He's thinking it might be better if it was twice as powerful, which would be easy to do with the current code - change .15 to .3 in https://github.com/HabitRPG/habitrpg-shared/blob/develop/script/content.coffee#L579

There's also discussion happening in the party about ways of making the effects of the skill random across a range of values, but with values in the middle of the range more common than the extremes. Is that something we might be interested in looking at?

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-65201207.

ShabbyX commented 9 years ago

{alys: noted}

Yeah random may not be bad. It's important to know that true random is very bad for games though. That always gives people a feeling of being "really unlucky" and start hating the game for it. An algorithm that is not truly random is actually better. For example an algorithm that generates all possible values (multiple times for higher weights), shuffle them, and start picking them one by one.

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

So I'm new the site and don't know a lot about the different skills but I've been playing games like this for a long time so I'll try and help any way I can. :)

I'm in the party Alys mentioned above. If you tell me what kind of randomness you want I can probably come up with a formula that would be pretty easy to implement. I'll post a couple questions and then see if I can come up with something that makes sense. :+1:

  1. What's the current formula? lol Is it just .15*Con? (Caster's Constitution?)
  2. How strong to you want the "average" spell to be? How much variation do you want?
  3. Do you want the shocks to be based on level/stats? Or a consistent range for everyone?
  4. Do you want the shocks to be absolute or relative? (+-10 vs +-10%)
  5. What kind of distribution do you want? Like should small shocks be equally likely as big shocks?

That's a start. I don't think there's anything on there that would be too difficult.

Is the backstab issue sorted or are you still looking to reformulate that too?

Timoteo32 commented 9 years ago

{alys: noted}

Also @ShabbyX you're referencing a "risk adverse" person and assuming that they are more upset by a below average result than they are by a positive result of the same magnitude. This is true in many things but since this doesn't really matter (no real life gains or losses) the added benefit of being "interesting" may carry the argument.

Plus on sites like this, any additions usually raise morale because they show an active development staff.

lemoness commented 9 years ago

{alys: noted}

I'd been okay with strengthening Protective Aura, but as with all of these, please include diminishing returns to avoid the skyrocketing buff problem :)

Had we agreed on a "hard" stat cap? I don't think it's a bad idea.

On Tue, Dec 2, 2014 at 8:01 AM, Timoteo32 notifications@github.com wrote:

Also @ShabbyX https://github.com/ShabbyX you're referencing a "risk adverse" person and assuming that they are more upset by a below average result than they are by a positive result of the same magnitude. This is true in many things but since this doesn't really matter (no real life gains or losses) the added benefit of being "interesting" may carry the argument.

Plus on sites like this, any additions usually raise morale because they show an active development staff.

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-65253766.

Timoteo32 commented 9 years ago

{alys: noted}

Just from a gaming concept, I think you're better off to go with diminishing returns as opposed to a "hard cap" just to allow players to feel like they're gaining at least SOMETHING. Otherwise people are more likely to quit. :/

But you're absolutely right @lemoness

lemoness commented 9 years ago

{alys: noted}

Okay, we can stick with diminishing returns for now, then! Worst comes to worst, we can add a cap back in if we need to do so.

On Tue, Dec 2, 2014 at 6:18 PM, Timoteo32 notifications@github.com wrote:

Just from a gaming concept, I think you're better off to go with diminishing returns as opposed to a "hard cap" just to allow players to feel like they're gaining at least SOMETHING. Otherwise people are more likely to quit. :/

But you're absolutely right @lemoness https://github.com/lemoness

— Reply to this email directly or view it on GitHub https://github.com/HabitRPG/habitrpg/issues/3029#issuecomment-65342250.

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

The tricky thing is that one of the guys in our party thinks the spell is currently too powerful and he's a pretty high level so I'm trying to find a formula that offers diminishing returns but is still stronger than the current setup at high levels, which is tricky.

If it's not too hard to code, I might suggest a piece-wise function depending on a player's stats.

Alys commented 9 years ago

_{alys: PROTECTIVE AURA}_

@Timoteo32 from your questions in your earlier comment:

"What's the current formula? lol Is it just .15*Con? (Caster's Constitution?)" Yes - defined here (user._statsComputed.con is the CON of the person casting the skill, including their CON from all sources - gear, buffs, etc)

"How strong to you want the "average" spell to be? How much variation do you want?" I did a little bit of testing with a character of level 50 and all attribute points assigned to CON. Twice as powerful as the current skill seemed okay; three times as powerful was definitely too much.

I have no opinions about your other questions from that comment. If no one else responds to them, make whatever decisions you think best.

"If it's not too hard to code, I might suggest a piece-wise function depending on a player's stats." I think that would be fine. It would just be an if ... else if ... else statement. That might even make the code easier to understand than a more complex formula that catered for every range of skills.

One thing that is important: The maximum level you should consider is 100. We don't try to balance the game for levels higher than that. Currently, at higher levels, you do keep getting attribute points, but we'll be changing that soon. In fact, I should do that really soon just to get it over and done with. Assume that 100 attribute points is the maximum number of points that the user can assign to CON (although of course CON can be higher than 100 because of gear and buffs.)

Timoteo32 commented 9 years ago

{alys: noted}

Okay, cool. I just posted a first idea in our party but with that input in mind, I'll come up with something more specific. We're gonna have to boost it a good bit though if Pug was feeling it was too weak before and you're about to take a third of his Con away :/

Also, you want it to stay scaling just on Con and not level or Int right?

Alys commented 9 years ago

{alys: noted}

"you want it to stay scaling just on Con and not level or Int" I personally think so. But others might have reasons to disagree. I like the simplicity of that though.

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

So my initial suggestion is use 2.5*sqrt(Constitution)+E. Where E is a random number off a list ~N (0,4). So 68% of the shocks would be less than +-4 and 96% would be less than +-8.

For comparison, the expected value of a cast for high level players (100 Con) would be 25 vs 15 currently. (or about 3 higher then Pug is casting now). Obviously for anyone not losing stats due to the change, it would just be outright better virtually all the time. For someone like Pug, 84% of the time it would be just as good as they are currently getting and about 30% of the time it would be at least 5 higher. This may not seem like a huge boost but combined with dropping everyone's stats to 100, it would represent an a expected boost of 25% vs the 15% he gets now. (I'm just using him as a benchmark cause it's someone we both know lol. I have no clue how he ranks in level/stats across the site).

This formula would also reward lower level players much faster. While the top casts aren't increased as dramatically, someone with 50 Con would have an expected cast about 2.4x what it is currently.

The bottom players (say 15 Con) will see the greatest gains but would also be the most effected by the shocks since I made them absolute gains instead of relative. But because of their low stats the boost to like 3x what they'e getting now is only a shift from 3 to 10. Even with basic equipment, no one should be in danger of having a shock send them negative, even at level 10. Unless they're really trying to (have put no points in Con and are naked at level 10) but I'm cool with those people taking Con away from their teammates haha.

But the weirdest part is looking at Parties like ours with high and low level players together. Even as it is now, Pug can triple my Con with a single cast (if I'm not wearing our sweet new armor). Too much of a boost to the top end would result is huge variances in results for lower level players.

Alys commented 9 years ago

{alys: noted}

Sounds pretty impressive! But alas, we really should put in something to make it completely impossible to give a negative CON value. Every so often, we get players who want to fight other players, and I am concerned that if a skill could be manipulated to be detrimental to others, then it would be, occasionally. That would be bad.

crookedneighbor commented 9 years ago

{alys: noted}

I agree with @Alys there's no reason a buff spell should result in a negative value.

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

Lol, that's fine. All you need to do is set it up like this. (But coded lol)

B=2.5*sqrt(CON)+E If B>0 let B=0. (Or say 2 if you want to guarantee a minimum buff)

But since we don't even get skills until level 10, that's like a minimum stat of 5. And there's like a 10.56% chance that E would be below -5. I figured since the Warrior gear gives Con if they happened to buy anything or put any points in Con (if this is a skill they care about) it would be incredibly unlikely and even then would be like -1. :P

As far as E, I don't know what options you have in your coding. You can generate the number yourself at the time or I can generate like 1,000 (or more) "random" numbers with that distribution (or whatever dist you want probably) in MatLab and then send them to you and the code can just grab one off the list at random. There's probably an online generator you could use too but I can't be arsed to look. :P

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

Or if you wanted to say shift the whole function without changing the way it scales you could add a +2 or whatever to the end, but I feel like that makes it too strong too early relative to the caster's stats.

The other thing that occurred to me that doesn't make sense is that a low stat caster could in THEORY cast a spell that would give more Con than they have. :P (Although very unlikely) You could get around this by using a piece-wise function or adding another line to put a ceiling on it like the floor above.

If CON<20, let B=.3CON+E, else B=2.5*sqrt(CON)+E

or

If B>.75CON, let B=.75CON

ShabbyX commented 9 years ago

_{alys: PROTECTIVE AURA}_

@Timoteo32 piece-wise linear is not the best thing as it introduces incontinuity. That may be a lazy way out, but I'm sure whatever piece-wise linear function you come up with, we can find a nice continuous function approximating it (or rather, the piece-wise function would be approximating that).

Anyway, we clearly want a curve whose second differential is negative (for the common folk, that means a curve that slows down over time). Both log and sqrt satisfy this (and there are others as well). So I would suggest to just play around with combinations of these two until you find what you are looking for. You can see a couple of examples in my comment above (the one with graphs).

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

Did you see the initial formula I put above? I do have one continuously differentiable concave function. I was just throwing out other possible ideas for the Devs as well.

But piecewise linear functions can be continuous as long as you match the ends up. Which I admittedly didn't do in the above quick example but could easily be done. So it would be B=.559CON if CON<20 then switch to the other formula if that's something they wanted to do.

Although strict continuity is pretty pointless because all our stats are discrete so if you were really worried about it, you could put your discontinuities in the gaps and players would skip right past. (No one will ever have 25.14 CON so if that point isn't defined it doesn't really matter)

ShabbyX commented 9 years ago

_{alys: PROTECTIVE AURA}_

@Timoteo32 sorry maybe I wasn't clear. I did notice you used sqrt. I was just reminding you of another function (log) and that their combinations could be something you would want to play with it.

Regarding continuity, I meant second level (C2 as it is mathematically called), which "looks smooth" to a human.

In the end, a formula like sqrt(log(x)) is quite easier to read and code than a piece-was linear function. So we might as well as just get a nice formula and stick it in.

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

Oh yeah, I know about those. But both ln and log level off a lot faster so by the time we scaled it to the final range desired, you would have super strong spells early and then not gain much down the road. You could manipulate a log to look more like that but I figured I'd start with what seems the closest to what we wanted. Although now that I've gotten some sleep, I may go play with it a little more to see if I can get a better formula.

And I know what you meant when you said continuity but I have no clue why from a gaming perspective (or coding) why the second derivative would matter at all, aside from describing the general shape of the function you want.

Timoteo32 commented 9 years ago

_{alys: PROTECTIVE AURA}_

So in thinking, I think the following formula would work better:

B=sqrt(7.5*CON)-1+E

It doesn't give quite as big of gains quickly but gives a little more gains at the top than the previous post. Obviously will still require the non-negativity constraint.

Also you can see graphs below. Red is first formula I posted, Blue is second, Yellow is current and black is double the current. I was aiming to land somewhere between the two lines at full strength.

Alys commented 9 years ago

{alys: ignore}

Lemoness would like the rebalanced skills and associated changes to be live in time for the new year.

Below is a framework for recording what we want and what we have done so far. I am still in the process of filling this in so it is incomplete. I will be taking information from this issue, from linked issues and PRs, and from Trello. EDIT: The framework has been removed and an updated version has been added to a more recent comment. If you really want to see this version, it's here: https://i.imgur.com/go0nXac.png

I've created two rebalancing-2014-12 feature branches that we can use for merging and testing our changes:

We can push changes to those feature branches and merge them for testing without any risk of the changes going live before we are ready. However it might be best that we don't do that until I've finished going through the changes submitted so far.