Gen 4's HP Bar Speed is Very Competitively Relevant

Posting this in Ruins of Alph because I don’t have permissions for Policy Review and would also like the ability to get responses.

TL;DR The gen 4 blissey meme is competitively relevant, but Pokemon Showdown does nothing to handle it. Watch my video to learn why.

For those of you who don’t know me, I’m a programmer who specifically finds Pokemon battle analysis fascinating. While I am the creator of the reverse damage calculator, Chinchow, please do not assume I posted this just for personal gain. This post is strictly advocating better cartridge accuracy.

Everyone always memes on gen 4 Blissey for taking forever to faint, but no one seems to know that it’s a significantly relevant mechanic to competitive Pokemon.
When I asked about using the HP bar speed to track HP on the smogon discord 2 years ago, I got this as my only answer:
Some Discord User said:
you probably could
the different speed that it goes down is probably hard to tell regardless so eh
like, only like pokemon with a high HP stat you can tell that it goes faster or not if its 0 HP or 252 HP
and it is probably still a minimal difference
Since no one bothered to interrupt them, I’m going to presume this is the community’s current stance on the usefulness of the HP bar speed – “maybe technically useful, but probably not”.

Even the most relevant post to this discussion only says that

Humans probably cannot determine this number down to exact HP precision in most cases, but might be able to distinguish 100 HP vs. 105 HP, for example.
This is beyond underwhelming. It turns out that you can use the HP bar’s depletion speed to determine the exact damage dealt by moves, and by extension, the exact HP of your opponent’s Pokemon.

Unless you have done reverse engineering or glitch hunting in gen 4, I doubt that you have the pre-requisite knowledge to fully understand how this works, so please watch this video I have just made on the topic. It should clarify how this works in practice. There are no “probablys” or “theoreticallys”.

Assuming you have watched the video, you should have a sense of how important the HP bar speed mechanics are for non little cup pokemon. Pokemon Showdown has nothing to account for this defining mechanic, completely missing the mark for cartridge accuracy with regards to HP display.

Thus, I have the following proposals to account for the hp depletion speed mechanic in gen 4:
  1. Show the exact HP of pokemon in gen 4 battle replays but not in-battle, similar to how random battles work. At the cost of not being completely accurate to how the mechanic works, it should be simple to implement.
  2. On all damage and heal protocol events in replays, send an extra hint/debug message indicating the amount of health changed (don’t include the denominator). This handles the exceptions mentioned in the video with the way Pokemon Showdown is currently implemented because they don’t trigger a damage event for the user.
  3. Only show exact HPs on damage and heal events (specifically not switching events). Sort of a mix between proposals 1 and 2, but this one seems harder to implement and also brings up Pokemon Showdown’s problematic assumptions with the HP denominator back to light.
I just realized my 2nd proposal doesn't give enough information to do the same analysis I did with finding Rotom-Wash's max HP in the video. To fix this, the damage per each pixel (or percent, whichever is easier to implement) would need to be sent.
It would look something like this:
Code:
Pixel 47 -> 46: 5 dmg
Pixel 46 -> 45: 5 dmg
...
Pixel 31 -> 30: 5 dmg
Pokemon ended on pixel 30, so that would be the last hint message sent.
All of this would apply to non little cup formats because these mechanics do not play a factor in Pokemon with under 48 HP. Additionally, these could all have a delay period before being visible to accommodate people playing tournaments (e.g. playing a best of 3 game). These proposals are all server side solutions, as it doesn’t make sense to implement a client side solution for this.

Note that I am specifying replays here because this is where it especially stings to not have this valuable information since you have all the time you want to count frames. I also agree with pre that it feels more in the spirit of cartridge play to not have exact values during a battle.

DO NOT be mistaken into thinking that this means it isn’t possible to do this practically in-battle. It might be difficult, but people seem to be under the impression that Pokemon plays out the same way as smash bros because posts in the previous thread on HP timing kept mentioning human reaction times as a factor to how this would work. This is a turn based game. You have time in between turns to record a section of your battle with OBS, extract its frames, and then frame count. Please do not mention human reaction time because it is not relevant to this mechanic at all.
If you think the process is too slow to be done in 5 minutes, I can test it out. Be aware that you can use OBS keybindings and scripts to speed up the process. People also don’t necessarily battle alone (have you watched pokeaim?) and can always employ the help of a friend to do the frame counting for them, or the general audience could do this too. Heck, streamers could have an army of viewers dividing up the process to make it whiz by. Time is NOT a limiting factor.

In contrast to the 48ths vs percentages arguments that have gone on in the past, this is not a nitpicking discussion of convenience. The main argument for that discussion can be summarized as follows:
The HP display mechanics are a part of the user interface. There is no reason to overcomplicate it by converting it to 48ths when the exact percentages do pretty much the same job.
The percentages do not do “pretty much the same job” here because they omit all of the critical timing data. Obviously, implementing the exact mechanic is a terrible way to handle this. No one wants to watch blissey take 25 seconds to KO, and trying to find the dead frames for every scene would be a difficult and fruitless endeavor.

For those of you who are about to reject this on the basis of team scouting, I’d like to ask why you deserve arbitrarily more “privacy” than someone playing the game on a real cartridge. When Pokemon Showdown says it is committed to cartridge accuracy, it should be cartridge accurate in all aspects, including its replays. Single battles on the vs recorder show the HP of the current player’s pokemon, so technically we should at the very least see the current HP of whoever uploaded the replay in order to be cartridge accurate. The only time mechanics are modded is when they are overtly broken, like sleep. Please let me know why this proposal, which only asks to change replays, would be an overtly broken in-battle mechanic. If you don’t want people to see your replay, then make it private.

I also ask that you don’t reply to this thread showcasing a replay of 6 level 1 FEAR rattatas destroying the gen 4 OU meta as a reason to reject the proposal. I am trying to make these proposals as simple as possible so that they can be reasonably implemented, so there’s bound to be some small exceptions to this.

If you are wondering why I didn’t analyze something more notable like a VGC battle or one of BKC’s wifi battles, it’s because they all have too low of a framerate for me to properly analyze. The HP bar is still related to time, but with frame rates below 60 FPS for recording, you can’t get the accuracy down to the exact HP. For the purposes of analyzing *replays*, however, this fact is irrelevant. Replays should not be compared to video recordings of battles. The Showdown equivalent of battle screen recordings would be Showdown screen recordings. Screen recordings are not uploaded to the replay server and are therefore not replays. Replays are more akin to vs recorder battles, which also store the battle’s sequence of moves and events in a format that is cross game compatible (in this case, between HG/SS/Pt).

Finally, please do not reject this on the basis that Ruins of Alph metas shouldn’t change. This argument is for tier shifts, not mechanics fixes. Back in 2019, McMeghan pointed out that Showdown had been incorrectly making spread moves only apply a 25% reduction instead of a 50% reduction for gen 3 doubles. The response here was not, we shouldn’t change it because old gens shouldn’t be touched. People immediately cared that there was an issue with an important mechanic and wanted to fix it. I can’t see why this neglected mechanic should be treated any differently. This is Pokemon Showdown, not Fakemon Showdown. One of the most important parts of a Pokemon simulator is to correctly handle cartridge mechanics, and this is no exception.

I would like to hear what the current gen 4 playerbase thinks about these proposals and see if there are any other ideas. As I am not an active player myself, I don’t have a clear idea of how this will sit with the playerbase. If anyone knows other exceptions to HP depletion that I haven’t mentioned, please shout them out as well. At the very least, if you vehemently disagree with this, I’d like to see your compelling argument as to why cartridge accuracy would be disastrous for gen 4 in this case.

Smaller issues that are somewhat related
Pokemon Showdown implements destiny bond and perish song incorrectly. From watching the video, you would know that there’s supposed to be a damage event to show the HP of affected pokemon decreasing to 0. Pokemon Showdown does not include this damage event, removing the valuable information you would get from slowly watching their HP bar drop. I would fix this myself, as it’s actually wrong in all generations, but my actively maintained mechanics related pull request on Showdown from over two months ago still hasn’t been merged. As a side note, Pokemon Showdown also gets self-KO moves wrong in gen 5+ because their HP bar depletes normally from then on.
Despite many threads on the 48 pixel view, this is wrong too. At least in gen 4, the 1/48 pixel is not used at all, yet Pokemon Showdown still uses it. In this case, there’s an information leak about the Pokemon’s health.

The biggest lesson here is that we should never assume mechanics in the battle are irrelevant. It is always important to test them out before ignoring them, so the next time someone asks about the usefulness of an obscure mechanic, don’t downplay its importance unless it has been proven to be useless. The reason why destiny bond and perish song were implemented incorrectly is likely because nobody thought sending that extra damage protocol message to show the HP depleting was important, so they just ignored it. This is a terrible loss of information, and because nobody thought it was important, tons of old replays will be inaccurately missing it.

The second is that we shouldn’t assume we understand mechanics correctly until testing them thoroughly. When I asked about it, the person responding said that speed was related to max HP. This is a natural assumption to make, considering blissey is the poster child of this mechanic. However, my research has proven this to be incorrect – seismic toss takes the same time to deplete HP for a blissey and a shuckle. The problem here is that this myth, although reasonable, gets passed around until everyone starts spreading misinformation about mechanics. People believing in these myths then start implementing mechanics on Showdown and getting them wrong, causing all kinds of bugs across the simulator.
I am guilty of this too. I almost mislabeled the 63 damage flash frames before super effective hits in my video due to negligence, and if I hadn’t been asked to check out Platinum, I would have missed it and misinformed people. This is something all of us need to improve upon.

I plan to look into this for other past gens in the future. Crystal_ has showcased HP timing mechanics in gen 2, and all gens from gen 5 and below seem to have HP depletion speeds related to the amount of damage dealt, but unlike in gen 4, they may also be related to max HP.

Happy frame counting! Please remember the proposal is primarily about REPLAYS and not active battles.
 
Last edited:

Users Who Are Viewing This Thread (Users: 1, Guests: 0)

Top