The Type Message Experiment
In Red, Blue and Yellow, you may have noticed battle messages going something like this:
Enemy WHATEVER sent out DUGTRIO!
Go! VENUSAUR!
DUGTRIO used EARTHQUAKE!
It's super effective!
But, you say,
wait a minute... super effective? Venusaur is a Grass-type! Grass is resistant to Ground! The combination of Grass and Poison should make Ground deal normal damage since they cancel each other out, not super effective!
And indeed, that is what actually happens - the damage modifier, in spite of the game message of super-effectiveness, is 1 just like it would be if that Earthquake were hitting a Raticate. However, that message has always bugged me. My original conclusion was that the game just always used type 2. This is very logical from a programmer's point of view; it would be very natural if the game code were for example something like this:
string typemessage;
int damagemodifier = 1;
for (int i = 0; i < 2; i++) {
if (isSuperEffective(attackType, defendType
)) {
typemessage = "It's super effective!";
damagemodifier *= 2;
}
else if (isNotVeryEffective(attackType, defendType)) {
typemessage = "It's not very effective...";
damagemodifier *= 0.5;
}
else if (isIneffective(attackType, defendType)) {
typemessage = "It doesn't affect " + defendName + "!";
damagemodifier *= 0;
}
} Basically, the game would first test the attacking type against the defender's type 1, change the battle message and multiply the damage modifier accordingly, and then do the same for type 2. The message for type 1, if any, would be overwritten with the message for type 2, if any. It made perfect sense, and I never really gave it more thought than that.
One day I was in the unofficial IRC chat when surskitty, who was playing Blue, asked why Leech Life was showing up as super effective on Zubat. I jumped up to explain that the message showed either super effective or not very effective but the damage was normal.
Then it hit me that Zubat is a Poison/Flying type. Bug is super effective on Poison (in R/B/Y) and not very effective on Flying. It was showing the message for type 1.
I hurried to Azure Heights, the most comprehensive website about R/B/Y mechanics, to see if they had it. All the information they had was that for example, if you use Vine Whip on a Tentacool, it will be shown as super effective but actually deal normal damage.
Thus, I set out on a quest to find the real way the game decides which message to display. I took out my Yellow and used my type tool to find out all possible type combinations where one type was weak and the other resistant, took out the ones that actually occurred in the game, and started testing. This was what I got after trying all the possibilities (the numbers beside the type names are the type numbers in the game code):
Attack typeType 1Type 2ResultType used Fighting (1)Ice (25)Flying (2)Super effectiveType 1 Fighting (1)Ice (25)Psychic (24)Super effectiveType 1 Fighting (1)Rock (5)Flying (2)Super effectiveType 1 Fighting (1)Normal (0)Flying (2)Not very effectiveType 2 Poison (3)Grass (22)Poison (3)Not very effectiveType 2 Poison (3)Bug (7)Poison (3)Super effectiveType 1 Ground (4)Grass (22)Poison (3)Super effectiveType 2 Ground (4)Bug (7)Poison (3)Super effectiveType 2 Bug (7)Poison (3)Flying (2)Super effectiveType 1 Bug (7)Ghost (8)Poison (3)Super effectiveType 2 Fire (20)Water (21)Ice (25)Not very effectiveType 1 Grass (22)Water (21)Poison (3)Super effectiveType 1 Grass (22)Water (21)Flying (2)Not very effectiveType 2 Grass (22)Rock (5)Flying (2)Not very effectiveType 2 Electric (23)Dragon (26)Flying (2)Not very effectiveType 1 Electric (23)Electric (23)Flying (2)Super effectiveType 2 Ice (25)Ice (25)Flying (2)Super effectiveType 2 Ice (25)Water (21)Flying (2)Super effectiveType 2 Unfortunately, I couldn't make heads or tails of this. I had been speculating that it could even have something to do with whether the type numbers were odd or even or which was the highest, but one theory after another was proven incorrect, and when we had all the data there seemed to be no sense to it whatsoever. Some of it was very decidedly bizarre:
Attack typeType 1Type 2ResultType used Poison (3)Grass (22)Poison (3)Not very effectiveType 2 Poison (3)Bug (7)Poison (3)Super effectiveType 1 Ground (4)Grass (22)Poison (3)Super effectiveType 2 Ground (4)Bug (7)Poison (3)Super effectiveType 2 The exact same two types being attacked, first by Poison and then by Ground, but in one case both are shown as super effective according to type 2 but in the other one is shown as not very effective according to type 2 and the other super effective according to type 1. It just didn't make sense.
I resorted to Sharking. I don't actually have a GameShark, but I started my VisualBoy Advance emulator and Yellow ROM using a save file from a video of a guy beating the game in a bizarrely short time using a Mew Glitched Nidoking that had been elevated to level 100 through another glitch. After some searching on the Internet I finally found a code for modifying a Pokémon's type.
I started by reversing some of the type combinations I had already tried, since I had figured it would give a lot of information to know whether it mattered which type was which. I made Nidoking a Flying/Poison type and got it attacked with a Leech Life, and got super effective, the same result as when a Poison/Flying Pokémon is attacked with a Bug attack. I tried some more and those were all the same as when the types were the other way around so I concluded that only the combination mattered, not which was type 1 and which was type 2.
But that was not the only reason I had resorted to Sharking that Nidoking. Using the type tool again, I found out which attacking type offered the most possible weakness/resistance-conflict type combinations (as more constants are always a good thing), and it turned out to be Grass, with 18 different such combinations to test: Fire, Grass, Poison, Flying, Bug and Dragon paired with Water, Ground and Rock.
One of those combinations, as you might notice, is Poison/Water, and when I came to that I realized something odd: the game was showing it as not very effective even though I had previously written that Grass on Water/Poison was super effective. I tried it again to make sure; then I remembered that I had actually never tried a Grass attack on Tentacool but instead trusted what Azure Heights said. I started up my real Yellow to make sure nothing was being mucked up in any way and tested a Grass attack on Tentacool, and it was not very effective after all. Phew. That could have messed things up.
Finally I got the results:
Attack typeType 1Type 2ResultType used Fighting (1)Ice (25)Flying (2)Super effectiveType 1 Fighting (1)Ice (25)Psychic (24)Super effectiveType 1 Fighting (1)Rock (5)Flying (2)Super effectiveType 1 Fighting (1)Normal (0)Flying (2)Not very effectiveType 2 Poison (3)Grass (22)Poison (3)Not very effectiveType 2 Poison (3)Bug (7)Poison (3)Super effectiveType 1 Ground (4)Grass (22)Poison (3)Super effectiveType 2 Ground (4)Bug (7)Poison (3)Super effectiveType 2 Bug (7)Poison (3)Flying (2)Super effectiveType 1 Bug (7)Ghost (8)Poison (3)Super effectiveType 2 Fire (20)Water (21)Ice (25)Not very effectiveType 1 Grass (22)Water (21)Poison (3)Not very effectiveType 2 Grass (22)Water (21)Flying (2)Not very effectiveType 2 Grass (22)Rock (5)Flying (2)Not very effectiveType 2 Grass (22)Fire (20)Water (21)Super effectiveType 2 Grass (22)Fire (20)Ground (4)Super effectiveType 2 Grass (22)Fire (20)Rock (5)Super effectiveType 2 Grass (22)Grass (22)Water (21)Not very effectiveType 1 Grass (22)Grass (22)Ground (4)Super effectiveType 2 Grass (22)Grass (22)Rock (5)Super effectiveType 2 Grass (22)Poison (3)Ground (4)Not very effectiveType 1 Grass (22)Poison (3)Rock (5)Super effectiveType 2 Grass (22)Flying (2)Ground (4)Not very effectiveType 1 Grass (22)Bug (7)Water (21)Not very effectiveType 1 Grass (22)Bug (7)Ground (4)Not very effectiveType 1 Grass (22)Bug (7)Rock (5)Super effectiveType 2 Grass (22)Dragon (26)Water (21)Not very effectiveType 1 Grass (22)Dragon (26)Ground (4)Not very effectiveType 1 Grass (22)Dragon (26)Rock (5)Not very effectiveType 1 Electric (23)Dragon (26)Flying (2)Not very effectiveType 1 Electric (23)Electric (23)Flying (2)Super effectiveType 2 Ice (25)Ice (25)Flying (2)Super effectiveType 2 Ice (25)Water (21)Flying (2)Super effectiveType 2 Again, constants are good, so I put together a table of some data with as many constants as possible, organized accordingly:
Attack typeType 1Type 2ResultType used Grass (22)Fire (20)Water (21)Super effectiveType 2 Grass (22)Grass (22)Water (21)Not very effectiveType 1 Grass (22)Poison (3)Water (21)Not very effectiveType 1 Grass (22)Flying (2)Water (21)Not very effectiveType 1 Grass (22)Bug (7)Water (21)Not very effectiveType 1 Grass (22)Dragon (26)Water (21)Not very effectiveType 1 Attack typeType 1Type 2ResultType used Grass (22)Fire (20)Ground (4)Super effectiveType 2 Grass (22)Grass (22)Ground (4)Super effectiveType 2 Grass (22)Poison (3)Ground (4)Not very effectiveType 1 Grass (22)Flying (2)Ground (4)Not very effectiveType 1 Grass (22)Bug (7)Ground (4)Not very effectiveType 1 Grass (22)Dragon (26)Ground (4)Not very effectiveType 1 Attack typeType 1Type 2ResultType used Grass (22)Fire (20)Rock (5)Super effectiveType 2 Grass (22)Grass (22)Rock (5)Super effectiveType 2 Grass (22)Poison (3)Rock (5)Super effectiveType 2 Grass (22)Flying (2)Rock (5)Not very effectiveType 1 Grass (22)Bug (7)Rock (5)Super effectiveType 2 Grass (22)Dragon (26)Rock (5)Not very effectiveType 1 Unfortunately, however, I couldn't see any discernible rule in this either, and therefore could only come to the conclusion that either the game makers were on crack and made an extremely complicated formula just to pointlessly determine this or they somehow just programmed it with random if statements which don't bring up any pattern.
However, Captain Mofocious of the forums later posted about having found the actual type advantage table from the game, the order of which explains everything. Instead of being a table, essentially, it is a list of each type combination that does not deal normal damage with the special damage it does:
- Water 2x vs. Fire
- Fire 2x vs. Grass
- Fire 2x vs. Ice
- Grass 2x vs. Water
- Electric 2x vs. Water
- Water 2x vs. Rock
- Ground 0x vs. Flying
- Water 1/2x vs. Water
- Fire 1/2x vs. Fire
- Electric 1/2x vs. Electric
- Ice 1/2x vs. Ice
- Grass 1/2x vs. Grass
- Psychic 1/2x vs. Psychic
- Fire 1/2x vs. Water
- Grass 1/2x vs. Fire
- Water 1/2x vs. Grass
- Electric 1/2x vs. Grass
- Normal 1/2x vs. Rock
- Normal 0x vs. Ghost
- Ghost 2x vs. Ghost
- Fire 2x vs. Bug
- Fire 1/2x vs. Rock
- Water 2x vs. Ground
- Electric 0x vs. Ground
- Electric 2x vs. Flying
- Grass 2x vs. Ground
- Grass 1/2x vs. Flying
- Grass 1/2x vs. Poison
- Grass 2x vs. Rock
- Grass 1/2x vs. Flying
- Ice 1/2x vs. Water
- Ice 2x vs. Grass
- Ice 2x vs. Ground
- Ice 2x vs. Flying
- Fighting 2x vs. Normal
- Fighting 1/2x vs. Poison
- Fighting 1/2x vs. Flying
- Fighting 1/2x vs. Psychic
- Fighting 1/2x vs. Bug
- Fighting 2x vs. Rock
- Fighting 2x vs. Ice
- Fighting 0x vs. Ghost
- Poison 2x vs. Grass
- Poison 1/2x vs. Poison
- Poison 1/2x vs. Ground
- Poison 2x vs. Bug
- Poison 1/2x vs. Rock
- Poison 1/2x vs. Ghost
- Ground 2x vs. Fire
- Ground 2x vs. Electric
- Ground 1/2x vs. Grass
- Ground 1/2x vs. Bug
- Ground 2x vs. Rock
- Ground 2x vs. Poison
- Flying 1/2x vs. Electric
- Flying 2x vs. Fighting
- Flying 2x vs. Bug
- Flying 2x vs. Grass
- Flying 1/2x vs. Rock
- Psychic 2x vs. Fighting
- Psychic 2x vs. Poison
- Bug 1/2x vs. Fire
- Bug 2x vs. Grass
- Bug 1/2x vs. Fighting
- Bug 1/2x vs. Flying
- Bug 2x vs. Psychic
- Bug 1/2x vs. Ghost
- Bug 2x vs. Poison
- Rock 2x vs. Fire
- Rock 1/2x vs. Fighting
- Rock 1/2x vs. Ground
- Rock 2x vs. Flying
- Rock 2x vs. Bug
- Rock 2x vs. Ice
- Ghost 0x vs. Normal
- Ghost 0x vs. Psychic
- Fire 1/2x vs. Dragon
- Water 1/2x vs. Dragon
- Electric 1/2x vs. Dragon
- Grass 1/2x vs. Dragon
- Ice 2x vs. Dragon
- Dragon 2x vs. Dragon
This is very enlightening. Firstly and most importantly for this experiment, it shows which weaknesses and resistances override the others. When a Pokémon is hit by an attack, the game goes down through the chart, finds any weaknesses and resistances that should be applying (one or two), and for each of them changes the message, so that it shows the message for whichever weakness comes later. (It turned out I had made a mistake and written down that Grass showed up as super effective against Fire/Water - in fact it says not very effective as I reverified, so that is still consistent. If you spot anything else in the result table above that doesn't fit with this, do let me know so I can retest it.)
Additionally, it is a wonderful insight into the programmers' minds. It starts off with the basic elemental weaknesses and Ground vs. Flying, the stuff that's likely to be the first they thought of, as well as taking all the types that resist themselves except Poison and adding that in. Then they decide, "Okay, this is way too disorganized. Let's do this in some sensible order." And then they proceed, starting with Normal attacking anything, throw in Ghost vs. Ghost just so they won't forget, go on with Fire (or rather, everything they hadn't done before in the elemental jumble that started the chart), and then proceed in the official ordering of the types that we see in the type chart in the instruction booklet - Normal, Fire, Water, Electric, Grass, Ice, Fighting, Poison, Ground, Flying, Psychic, Bug, Rock, Ghost, Dragon - rather than their numerical order in the game code (which is completely different, as shown in the table above). Perhaps they created the instruction booklet type chart somewhere in between and were even copying down from that? And then when they've dealt with Ghost, suddenly we get both the offensive and defensive specifics for the Dragon type (explaining why, as many people had noted, Dragon always took precedence when it was involved), as if that type were a last-minute addition (I wouldn't be surprised, considering how there are only three Dragon-types in the game and one Dragon attack, with Gyarados being the puzzling Water/Flying combination). One mystery solved and a lot more only vaguely related found out!