farkam135 / GoIV

https://www.reddit.com/r/goiv
Other
372 stars 141 forks source link

Show percentage including base stats of pokemons #252

Closed Eccenux closed 6 years ago

Eccenux commented 8 years ago

My main issue with IV in general is that it is a bit misleading. Let's take Gyarados as an example. It's base stats are: Att: 192 Def: 196 Sta: 190

This gives for stamina range including IV is 190-205. So 0% IV is actually 93% of possible stamina (190/205).

So I propose to add a switch to show IV% and show absolute%. Default displayed could be in the settings and both could be displayed in show all.

Blaisorblade commented 8 years ago

Re possible stamina: you're talking about possible stamina for that pokemon (Gyarados), not in general, right? Because @nahojjjen mentioned that, and I wonder what's best to show—I guess you could argue both ways.

Eccenux commented 8 years ago

Yes, possible stamina for that pokemon species. Some might still like relative values (0-15), so that should probably be in the settings.

sarav commented 7 years ago

@Eccenux I see what you mean, but people generally use IV to decide how many individual of a species to keep/transfer. I think that's why we haven't seen people complain. And when you are comparing same species, the %based on 45 gives you a better resolution of the differences. In a Gyrados, a 5 difference in stamina might be 2% (5/190) but when compared to 45, it's 11%. Showing 2% beats the point of this App.

So, they don't often say "should I keep the Golduck or Vaporeon?" when both have water gun and Hydro pump.

I feel like movesets matter a lot more in that situation and people generally know a Vaporeon is better due to better HP.

Not opposed to your request, but maybe make it a settings that's off by default? I don't want to add more to the UI. It's already becoming too crowded.

Eccenux commented 7 years ago

Yes, I do that too (transfer pokemons with worse IV then others). That is good for evolutions, but if I would know absolute percentage I might focus on attacks rather then trying to find perfect IV. Also you might want to keep e.g. Flareon with high stamina, even if attack is low in IV (Flareon has high base attack and very low base stamina/HP).

sarav commented 7 years ago

But can't you do the same with just looking at how it's presented today? You still seem to be only comparing with a Pokemon type.

Your request makes sense to me if we have some Pokemon independent value to compare against. Then you can say "Oh, this flareon is overall better than this rapidash, let me keep the Flareon instead" or something like that. Comparing it to the base stat of the Pokemon doesn't give you that info.

Eccenux commented 7 years ago

But can't you do the same with just looking at how it's presented today?

No. I don't know how big are Flareon base stats - is it 100? 200? 300? By looking at IV alone I don't know if that 15 points will give me significant advantage.

To put it in a different context - let's say someone gives you $5. If you only have $50, then that's great. If you already have $300, then... meh, but thanks ;-).

sarav commented 7 years ago

I get that point. Agree with adding in base stat. But the absolute % should be a percentage of a value that doesn't change across Pokemon type. Otherwise, you'd still not have any idea of the base stat.

Say you gave $300 and I give you $100 out of a max of $200. Absolute% would be 80% (400/500)

Say you have $5, and I give you $5 out of a max of $5. Absolute% would be 100%.

But no, $10 isn't better than $400.

sarav commented 7 years ago

I'm saying we should always compare it to $1000. Not sure what that number is for Pokemon though. Maybe the best stat of all Pokemon?

Blaisorblade commented 7 years ago

Let's clarify goals. I think @Eccenux wants to use these percentages to compare pokemon of a single species with each other. And a measure relative to the species makes sense for this goal—so that you see, for instance, that for Gyarados IVs make a negligible difference.

While comparing with $1000 might make sense for comparing different species, which is what @sarav mentioned.

But I'm not sure we can start supporting, for instance, both. Somebody else IIRC on Reddit asked an option to show another purity formula (IIRC the geometric mean of IVs) and explained why it's more relevant than the average. I suspect allowing all this customization is a job for a spreadsheet or Pokemon database, and maybe we want to integrate with a separate app. Not sure how or whether to achieve that.

sarav commented 7 years ago

But comparing within a species gets better resolution with the way we do things now. If that's the case, I'd actually reject this request.

I completely understand the base stat makes a difference when fighting or defending, but within same species, it's pointless to look at it.

Blaisorblade commented 7 years ago

But comparing within a species gets better resolution with the way we do things now. If that's the case, I'd actually reject this request.

I'd have to look at base stats for other pokemons—but it sounds like the difference between min and max stamina IV for Gyarados is the difference between 93% and 100% of the actual stamina, in which case that'd be irrelevant and the extra resolution you have now is not useful. (You could gain it again with one decimal digit here, BTW).

But I'm not sure that 93% is meaningful. Yes, the formulas compute and use staminaIV only after adding it to baseStamina. But those values are then rescaled in non-linear ways (see PokeInfoCalculator.getIVPossibilities). The appropriate summary might be actual CP and actual HP, relative to max CP and max HP—this seems independent from the pokemon level.

But I'm not sure if the raw stats just influence HP and CP or are used directly in battle, complicating the picture.

sadyc1 commented 7 years ago

This feature request actually makes a lot of sense. The damage output scales linearly with the total attack (base + iv), so it makes much more sense to display % of the total stats, not just IV (https://pokemongo.gamepress.gg/damage-mechanics) To give an example: Victreebel has 221 base attack and 151 base defense. The IV has more impact on defense than on attack.

More discussions on this: https://www.reddit.com/r/TheSilphRoad/comments/52vlzm/a_better_metric_for_pokemon_stat_perfection/ There are other threads on readdit that say that % IV reporting is misleading when it comes to actual battle impact.

Blaisorblade commented 7 years ago

Thanks for the pointer. That matters because, IMHO, GoIV should not make up new standard metrics to avoid confusion, but follow consensus from the community.

It also seems that IV alone are never used directly in other formulas—they all depend on base stats + IV. Also, knowing HP/CP is not enough—gym battle formulas also need actual stats in addition, as explained by the Gamepress page you link.

MelvynEzi commented 7 years ago

I agree, base stats should be included. IV by its own is really not important (yes I've said it again). We all know a level 10 Snorlax (with 20% perfect IV) beats a level 20 Diglett (with 100% perfect IV).

sarav commented 7 years ago

Maybe make this an option. I'm not really convinced yet that it should be % of basestat.

rpgrca commented 7 years ago

I agree with @sarav here, if possible add it as an option (disabled by default) because everyone is using GoIV right now in different way. Once you turn this on, for all but the very weak species % of base stats will almost always be in the high 80s and low 90s, which is what people are usually using now as a benchmark to powerup pokemon or not. In other words, it will be misleading for someone who is seldom used to see 90% IV to suddenly see many pokemon in their 90%, just because the base stat percentage is being used.

sarav commented 7 years ago

I'm not even sure I see the whole point of %base stat. That's just as if you are zooming out the details.

The only other alternative approach that I find more or equally useful is combining the IVs in the way they are used in the damage (done to the defender) calculation. Meaning, an A/D/S = 15/0/0 might be better than a A/D/S = 0/0/15 because of how the stats are used in the damage calculation. People mainly care about IV for attacking gyms.

nahojjjen commented 7 years ago

unnamed

I created a proof of concept implementation that shows a new text box in the results, the information in the image is:

First row "general score" - this is a score which can be used to compare different pokemon, it's simply the att * def * sta /10000

The second thing shows how much better your pokemon is compared to if the pokemon had 0% ivs, and how much weaker it is compared to if it had 100% ivs. This relates to what's requested in this issue, being able to compare how much difference the IVs actually do. This stat is based on the "general score".

Lastly it shows the pokemon base stats.


The above implementation is pure text, and is in no way an attempt to show how it could be designed visually. I just made it because I think it can be worth discussing these values as an example. Im aware that you'll probably react to adding a weird proprietary value "general score", but I'd like to point out that there's no widely accepted comparison of power adopted by users, and this value has strong basis in how much power the pokemon actually has.

I based the logic on the post here https://www.reddit.com/r/TheSilphRoad/comments/52vlzm/a_better_metric_for_pokemon_stat_perfection/

leejonf commented 7 years ago

Maybe I can help focus the discussion by giving an actual use case I went through yesterday, where a feature like this would have helped quite a lot.

I have a Weepinbell with 80% IV perfection, either 12 13 11 or 11 14 11. After evolving to Victrebel, it will take 90 candies and 99.6k dust to get to level 30, when it will have total stats 171 121 125 or 170 121 125, for CP of 2104 or 2101. I've been saving up to evolve it to a Victrebel.

But yesterday I caught a Bellsprout with 62% IV perfection, 14 00 14, but once it's a Victrebel it will only take 56 candies and 64k dust to take it to level 30. It would have total stats on 173 111 127, for a CP of 2054.

So I'm trying to compare these two pokemon and figure out which to evolve. The Weepinbell has better IVs by far, but will take 30k more dust to level up. Is it really worth all that dust?

I had to futz with the stat and CP formulas for a while to work out the answer (I'm going with the high level, low IV% candidate). But the app could easily display "Stats at lvl XX" on the screen it displays the CP, candy, and dust cost to get to XX. If the app had displayed "171 121 125" and "173 111 127" on the respective 'mons, my life would have been easier.

I guess you'd have to average these displayed stats when there are multiple IV possibilities. Still, would have been nice.

tl;dr: IVs should really be taken in the context of the 'mon's base stats to figure out how valuable one extra IV point would be.

rpgrca commented 7 years ago

That's exactly something I'd appreciate, but not sure it should belong to GoIV. And it's one of the reasons why I haven't spent stardust yet (other than by mistake, like today on a fresh magnemite). Still waiting for a way to easily solve what @leejonf mentioned.

sarav commented 7 years ago

@leejonf But the bigger problem in your case is the current level of your pokemon more so than the IVs. IVs decide what CP you get when you get to level 30. The power up cost and candy cost has nothing to do with IVs. The only difference it'll make in your case if what CP you'll get at level 30 for both pokemon. You get that info already along with the power up cost. So, it was really a decision of whether the marginal increase in CP was work the power up cost delta. That's your decision to make and the app already gives all the relevant data.

sarav commented 7 years ago

@nahojjjen I was reading that reddit post earlier today too. I was initially all for Metric 2 (as seem by my earlier comment in this issue).

All the other metrics (other than the IV perfection we show today) are either attempting to allow the player to compare:

But the problem with all those metrics and attempts is that they try to include base stat but completely ignore the moveset stats. Which are way more important than even IV if you are trying to compare which one would be more effective. Eg: Which of the different electric pokemon is more effective -- so that you may transfer the weaker one or pick the stronger one for a battle. So, just looking at base stats is half way attempt and a misleading one (moveset could wipe out any benefit from IVs)

Another problem with base stat is that for pokemon with same moveset, it's just making the difference between the IVs less visible without really helping the user make a different decision. What I mean by this is that, for a given species, the pokemon with the higher IV perfection is always going to be better than the one with the lower IV perfection. All the user wants to know in pokemon of the same species is that which one is better. So adding base stats just makes it annoying because you either lose that information because we round off the decimal places, or people have to start looking the decimal places (9.012 vs 9,1 -- this is mentally more taxing).

I'd really like something like a general score you did -- but that'll need to include the movesets to be meaningful. I'd be great if you could implement that. But that's a ton of work and I'd understand if you can't do it -- lots of data to type/scrape and the OCR work to identify the moveset (especially when is also obscured). And if you did do it, I think it should be based on something like Metric 2 that takes into account the move stat and the damage formula.

sadyc1 commented 7 years ago

"the pokemon with the higher IV perfection is always going to be better than the one with the lower IV perfection" - This is not true. One example, if you aim for high CP then Attack is more significant than Defense and HP - that's exactly why IV% is misleading. In this case a 15/15/0 is better than a 2/15/15 despite the 2nd having higher IV. For reference, the CP formula: https://www.reddit.com/r/TheSilphRoad/comments/4t7r4d/exact_pokemon_cp_formula/

The move sets is another topic which is unrelated with this thread. While the move sets matter the most, in all cases when you need to evolve a pokemon, you first judge by IV, evolve the best one from IV point of view and then hope for the "best" moves. Besides there are a lot of challenges with evaluating the move sets:

MelvynEzi commented 7 years ago

Technically, total % IV shouldn't even be a thing anymore. Following are examples of how IVs impact calculations:

CP calculation: CP = (BaseAtk + IndAtk) * (BaseDef + IndDef)^0.5 * (BaseSta + IndSta)^0.5 * (ECpM)^2 / 10 ATT directly impacts CP as compared to DEF/STA which will be square rooted. As mentioned by @sadyc1, 15/15/0 will always be better than 2/15/15 when it comes to CP, despite the latter having higher IV.

Pokemon stats modifier: Damage = Floor(0.5 * (Attack / Defense) * (CpM_Atk / CpM_Def) * STAB * Type * Power) + 1 ATT affects total damage output (which can be further multiplied by STAB, type effectiveness) during Gym Battles DEF affects total damage taken during Gym Battles STA affects HP (HP = ECpM * (BaseSta + IndSta))

In summary, based on IV impact on calculations, ATT > DEF > STA.

However, Pokemon has their own BASE STATS (which is constant between species). That is why your opponent's 10% IV, 600 CP Snorlax will always beat your 100% IV, 800 CP Raticate everytime.

sarav commented 7 years ago

@sadyc1 -- you took my comment out of context and arguing against a point I wasn't making. I'm saying that whatever you define as "better IV" (att, def, stam or a combination of those) -- bringing in base stat isn't going to change anything between two pokemon of the same species. The "better" IV will always be "better" -- so looking at base stat is pointless and forces people to look at decimal values.

sarav commented 7 years ago

@DJCrapsody I knew all the IVs weren't equal, but didn't bother analyzing the formula yet. So, yeah, I agree with your point about Attack being more important in general. But response above still seems valid -- for a given species bringing in base stats doesn't change anything and just forces us to look at decimal values.

Btw, CpM_Atk, CpM_def, etc are all picked based on the CP, right? And higher CP means higher values for these? In that case, Attack is almost ^2 (not really) important in damage calculation. So, we should probably report IV perfection as:

IV Atk ^ 2 + IV Dev ^ 0.5 + IV Sta ^ 0,5 / (15 ^ 2 + 15 ^ 0.5 + 15 ^ 0.5)

I'm just making up the Attack^2 because I don't have a better expression to show that it's more than linear importance.

Blaisorblade commented 7 years ago

CpM is just a function of the level (see Data.CpM[level], with level rescaled by functions in Data), it multiplies the CP (but not only)—IIRC the level is only used in other formulas after being translated to CpM[level].

Blaisorblade commented 7 years ago

I think it'd be nice to actually document usecases. I still only see as valid usecase comparing different pokemon of the same species. To compare across pokemons of different species, you'd need lots more strategic info, including consideration of potential opponent types and so on.

Also, while total IV might be misleading, it's a simple and established metric so we can't really remove it. I also know the IV range I want for some Pokemon—I'm looking for Magikarp in the high 90s and Eevees in the 80s-90s, given what I have.

I agree with @sarav here:

The only other alternative approach that I find more or equally useful is combining the IVs in the way they are used in the damage (done to the defender) calculation.

So we could add the damage formula you use (for a move without STAB, with type effectiveness 1, and probably with some fixed power), since that's most useful as summary of the IV effects on damage, short of actually OCRing the moves which is absolutely not trivial.

@DJCrapsody Are those (and HP) the only stats impacted by IV? We already show CP (current and after evolution). We should show HP of evolutions (filed #423).

That is why your opponent's 10% IV, 600 CP Snorlax will always beat your 100% IV, 800 CP Raticate everytime.

Throwing away a 10% Snorlax for a 100% Raticate would sure be silly. But having the base stats wouldn't be enough.

I don't think preventing that is GoIV's job at the expense of other things—except maybe for documentation.

MelvynEzi commented 7 years ago

@Blaisorblade yup those are the things that gets affected by IV (or total stats in general).

I agree when it comes to use case, we're usually comparing 2 pokemons of the same species rather than the different species. We can still add base stats somewhere so there's some easy to refer info for those who want to know which species is stronger and stuff.

sarav commented 7 years ago

@nahojjjen actually convinced me on the %perfect-pokemon and the general score (He gave it a better name in the newer screenshots in Discord). But the general score still treats total atk, def and sta stats equally.

I'm not sure if treating atk, def, sta equally is right or not. I used to think sta should be less important because of it not playing a big role in the damage output. But then it plays an important role in how long an attacker can take hits while doing damage. So, that feels equally important to gym fights.

But Atk having STAB multiplier is a good point. So, to me it feels like

Atk = Def = Sta or Atk > Def = Sta (with STAB. Otherwise, no.)

Thoughts @Blaisorblade @DJCrapsody @oskomonzon @thearaks @rpgrca ? And how would you want to weight the stats if/when you say ">" ?

Having said all that, even without any changes to @nahojjjen's formula, it's still a lot better than not having that info at all. For example, I had a Machop that was 15/15/0 but showed up as 67%. Would have loved to see how it compared to %perfect-pokemon.

MelvynEzi commented 7 years ago

Atk > Def = HP

nahojjjen commented 7 years ago

After using my branch for a while where Ive tested different versions of displaying "dynamic battle score", "combat score" and "battle rating", Ive noticed the following:

Battle score is not easy to remember, and minor differences between species are often not important as they're overshadowed by other factors, so adding a tier-system feels easier to comprehend than a battle score. (S,A,B,C,D,E) than a number such as 832.

When comparing within the same species, knowing how close to perfect the pokemon was was all I needed, for example, Ive found a magikarp which while only 94% perfect, has 99% of the power compared to if it had perfect IV's, so I intend to evolve it.

So I suggest adding the following in the power up and evolution box:

  1. Add a label "Pokemon tier" which can is represented by a symbol (S,A,B,C,D) and a symbol (+ or -) which is calculated based on the att * def * sta internally. Furthermore I personally liked having the pressing the text create a toast with the pokemon stats.
  2. Add an "Intelligent perfection %:" label, which shows how much power the Pokemon has compared to a Pokemon with perfect IVs. For example, this eevee would evolve into a vaporeon which has 94% the power of a perfect vape. I could add a clickable "?" link after the label which brings up a dialog which explains what it is when clicked.

I motivate using (att * def * sta) without adding more value to attack (or any other value) because from my understanding, which stat is more important is heavily dependent on whether the Pokemon is used for gym attack (with dodge & without dodge) and gym defense.

I believe implementing these proposed changes would give meaningful and understandable information to the users.

MelvynEzi commented 7 years ago

Sounds interesting, Would love to see that in action and I agree it's easier to understand by tier than raw numbers.

sadyc1 commented 7 years ago
  1. What's the use of "pokemon tier" or score? We already have CP as a general score across all species, and is actually some sort of att * def * sta... why invent a different formula to create some artificial tier? CP or any other cross-species score based on stats alone is misleading because move types and pokemon types (water, fire, etc) are more important than CP when you pick a fight.
  2. "Intelligent perfection %:" and IV in general make sense to have in the app and are useful for one thing: to decide what to evolve... the other decisions are taken based on move types. (for example a STAB move gives you 25% more damage witch vastly overcomes any kind of IV difference)
nahojjjen commented 7 years ago

@sadyc1 CP is dependent on level, which tier wouldnt be. Consider the scenario with a 600 cp butterfree and a 400 cp lapras. The lapras would have a higher tier. Imagine it another way, the tier basically says how much the max CP of a pokemon is. A mewtwo has high max cp, so it'd get a high tier, while a caterpie has an abyssal max CP, so it gets a bad tier. What the tier label does is that it interprets the information for you. What if a pokemons max cp is 1800? Is that a good pokemon? What if instead you're given the info that the pokemon is tier C+ ? Im aware that this only takes base stats into account, and does not consider type advantages or moves. Type advantages tend to change with the meta changes though (next gen release & rebalancing), and moves have already been rebalanced twice. Stats stay the same.

In my current debug, mewtwo would be A+ (unless you get really unlucky with IVs), Lapras would be B+, Charizard C, etc. It makes it easy to see how powerful a pokemon is, stat-wise.

I'm personally interested in connecting pokemon tier with user-modifiable clipboard-on-scan. I'd like to have my auto-clipboard be {Tier} {Intelligent perfection %} {AttIV DefIV StaIV} so for example A-87%⑩⑧⑩ That way I could sort by name to get the strongest pokemon species, I'd see approx how powerful their stats are & I'd see their ivs.

sarav commented 7 years ago

I like the idea of the general score, but honestly, I'd rather see the number than some tier. The reason for justifying a tier also kinda justifies NOT needing a general score. Things like movesets make a bigger difference. But we all still like the idea general score so we can compare pokemon of different species -- so making it a tier without showing the actual number kinda defeats the purpose IMHO.

For example, I wanted to compare a Charizard and an Arcanine. Their base stats are kinda close. But with the IVs, the Charizard might end up being better than the Arcanine. If you have a Tier, they'll probably both end up in the same tier and it kinda defeats the purpose.

At the least, have an option to show the actual score?

nahojjjen commented 7 years ago

@sarav with my current implementation, Charizard would be roughly C+ and Arcanine is roughly B. High/low IVs bump pokemon up / down a notch.

There are so many tiers, so pokemon who are in the same tier... Deserve to be in the same tier in my testing. The current tiers Ive got is: A+ A A- B+ B B- C+ C C- D+ D D- E+ E E- F+ F F-

Thats 18 different tiers, but they're all easy to comprehend.

I do however want to add the ability for the user to see more advanced information (the pokemon base stats) in a toast if the user presses the tier info, adding the battle score to the toast wouldnt be difficult. Do you think this is a fair compromise?

sarav commented 7 years ago

I'm going to always look the "battle score" though. Maybe I'd be convinced that tiers are sufficient once I start using it? Actually, what is the range for these tiers? Just publishing them might just make it easier for us to decide if the tier is sufficient? Also, why not just make it a setting -- Something like "Represent battle score as tiers" that can be default on or off based on the consensus. That should be pretty easy to do too. You can still show the base stats, etc in a toast as you mentioned.

rpgrca commented 7 years ago

Here they use 6 tiers, they used to have only 4. With 18 tiers, I think the difference between tiers might not be as noticeable. I'd think, SS, S, A - F are far enough (maybe even too much).

sarav commented 7 years ago

This whole tiering is not a standard definition. The user might not like the tiering ranges that @nahojjjen picked or @rpgrca picked. It's a subjective opinion. So, I think we should avoid tiering or at least not make it default.

rpgrca commented 7 years ago

Of course, in fact down here SS and S aren't considered rankings at all, and qualifications in letter were used back when I was teen (20 years ago).

Most of the time I just want to know which pokemon I can use to beat a defender. Or, if I'm training, which pokemon would maximize my experience and prestige gaining. IV are useful to discard pokemon, or to know which one to power up (of course, if its moveset is good), but in battles I never used them. I prefer knowing which pokemon gives me the advantage against a defender, or which pokemon would give me the most prestige while training. For this, I use something like Pokewin, and I believe trying to match it would be a mistake, at least for the current GoIV scope.

Blaisorblade commented 7 years ago

My 2 cents were about not introducing a formula/system/ranking on our own. @Eremiell has been doing tons of research for his manager. If we added plugins, the different ideas for this would be an excellent use case.

nahojjjen commented 7 years ago

This issue thread has become very long and difficult to keep track of.

One of the things I interpreted from the original issue as stated in this post is that it's currently difficult to see how much an iv actually matters, if the pokemon has a low / high base already in the IV.

For me this issue is solved in my clipboard branch, as I display CP % compared to perfect iv in my clipboard, which in a roundabout way gives me the information I want.

sadyc1 commented 7 years ago

Back to what was initially proposed, simple: "Show percentage including base stats of pokemons" Or at least show the base stats. Again the logic behind it is that not all stats are created equal and it depends on the species (another example: for snorlax, the stamina IV is less important than defense IV, because it already has a lot of base stamina). This is not for comparing between species.

nahojjjen commented 7 years ago

I could create a token for stat % ((basestat + iv) / (basestat+15)) for the user customizable clipboard setting, but I dont think this information is requested enough that we can justify putting it in the results view.

sarav commented 7 years ago

@nahojjjen how about tapping/long pressing the %IV showing a toast of the %base of all the 3 IVs? Or your max CP% or whatever info will help me decide if I should keep a 15/10/5 or a 10/10/10 bellsprout.

sadyc1 commented 7 years ago

I totally agree this is sort of an advanced feature and shouldn't be on the default screen. I like @sarav suggestion.

Blaisorblade commented 7 years ago

@nahojjjen added the %max CP field to the advanced view, and this is now in master (since a while).