Gen 1 Type Chart: A Generation Changes Reference

The Gen 1 type chart has 15 types. It is not interchangeable with the modern 18-type chart: Ghost attacks cannot affect Psychic in this chart, Bug and Poison interact differently, and Fire does not yet resist Ice. Use the matching chart when revisiting an older game or checking a type spreadsheet.

This reference compares three chart families: Gen 1, Gen 2–5, and Gen 6+. It separates changes to existing matchups from newly introduced types. The downloadable data records every chart-only result for one or two defending types, including theoretical combinations that no Pokémon actually has.

For a quick matchup, use the type calculator. For the rule changes and the data behind them, start below.

The Gen 1 type chart

Gen 1 includes Normal, Fire, Water, Electric, Grass, Ice, Fighting, Poison, Ground, Flying, Psychic, Bug, Rock, Ghost and Dragon. Dark and Steel join the later chart; Fairy joins the Gen 6+ chart.

Read across an attacking row → to a defending column ↓. Scroll inside the table to see every type.

Gen 1 chart-only effectiveness; not final damage.
Attack ↓
Defend →
NormalFireWaterElectricGrassIceFightingPoisonGroundFlyingPsychicBugRockGhostDragon
Normal1×1×1×1×1×1×1×1×1×1×1×1×½×0×1×
Fire1×½×½×1×2×2×1×1×1×1×1×2×½×1×½×
Water1×2×½×1×½×1×1×1×2×1×1×1×2×1×½×
Electric1×1×2×½×½×1×1×1×0×2×1×1×1×1×½×
Grass1×½×2×1×½×1×1×½×2×½×1×½×2×1×½×
Ice1×1×½×1×2×½×1×1×2×2×1×1×1×1×2×
Fighting2×1×1×1×1×2×1×½×1×½×½×½×2×0×1×
Poison1×1×1×1×2×1×1×½×½×1×1×2×½×½×1×
Ground1×2×1×2×½×1×1×2×1×0×1×½×2×1×1×
Flying1×1×1×½×2×1×2×1×1×1×1×2×½×1×1×
Psychic1×1×1×1×1×1×2×2×1×1×½×1×1×1×1×
Bug1×½×1×1×2×1×½×2×1×½×2×1×1×½×1×
Rock1×2×1×1×1×2×½×1×½×2×1×2×1×1×1×
Ghost0×1×1×1×1×1×1×1×1×1×0×1×1×2×1×
Dragon1×1×1×1×1×1×1×1×1×1×1×1×1×1×2×

0× immune · ½× resisted · 1× neutral · 2× super effective

What changed after Gen 1?

Compare an attack type with a defending type. These four entries change when the same 15 types are compared across the Gen 1 and Gen 2–5 inputs:

Gen 1 → Gen 2–5

Existing types only; 15 shared types. New types: Dark, Steel.
Attack → defenderGen 1Gen 2–5Data
Ice → Fire1×½×CSV row 2
Bug → Poison2×½×CSV row 3
Ghost → Psychic0×2×CSV row 4
Poison → Bug2×1×CSV row 5

Dark and Steel introduce additional matchups. Those are additions to the available type set, rather than changed cells in a table whose two types already existed.

The next chart-family transition changes two entries among the existing 17 types:

Gen 2–5 → Gen 6+

Existing types only; 17 shared types. New types: Fairy.
Attack → defenderGen 2–5Gen 6+Data
Ghost → Steel½×1×CSV row 61
Dark → Steel½×1×CSV row 62

Fairy adds another attacking row and defending column. Consult the full inputs when a Fairy interaction is involved; the two-row table above describes existing-type changes only.

These entries come from a fixed Pokémon Showdown source revision. The source files and their checksums are listed in the downloads. They were checked against the 838 cells across our three input tables. This is a source-consistency check, not a cartridge test.

How changes reach a dual-type result

In this disclosed model, multiply the attacking type’s factor against each defending type. An immunity makes the product zero. For a single defending type, use its factor once; never square it as if the Pokémon had two copies of that type.

Consider Bug attacking Grass/Poison. In the Gen 1 input, Bug is 2× against Grass and 2× against Poison, giving 4×. In the later chart, its ½× interaction with Poison changes the product to 1×. The combination has not changed; one input factor has.

Steel/Psychic gives a different example. A Ghost attack is 2× against Psychic in both later chart families. Steel reduces that to 1× in Gen 2–5, while the Gen 6+ product is 2×. The model makes the two factors visible so that a reader can check the arithmetic.

This multiplication is deliberately a limited chart model. Move exceptions and full Gen 1 battle behavior can differ; use a game-specific simulator when that distinction matters.

Worked chart-only products; the defending type combination is unchanged.
Attack → defending pairEarlier factorsLater factors
Bug → Grass/PoisonGen 1
2 × 2 = 4×
Gen 2–5
2 × ½ = 1×
Ghost → Steel/PsychicGen 2–5
½ × 2 = 1×
Gen 6+
1 × 2 = 2×

What the downloadable comparison covers

Unique mathematical type sets; theoretical pairs are included.
Chart familyTypesSingleDistinct dualTotal profiles
Gen 11515105120
Gen 2–51717136153
Gen 6+1818153171

The total is n + n(n−1)/2. Reversing the order of two defending types does not create a new profile. These are mathematical type sets, not counts of species or combinations actually available in a particular game.

The v1 model generates 444 profiles and 7,479 attack-versus-profile results. For fair era comparisons, the change ledger uses only attacking and defending types shared by both eras. Under that restriction, 53 profiles change from Gen 1 to Gen 2–5 and 17 from Gen 2–5 to Gen 6+. The downloadable ledger records 92 changed attack/profile cells across those two comparisons. Adding new types is reported separately.

Complete shared-type change ledger

92 changed attack/profile cells across both transitions. Only attacking and defending types shared by the two eras are compared; newly added types are excluded from these changes.

Gen 1 → Gen 2–5: 59 changed cells in 53 profiles
Gen 1 → Gen 2–5, shared types only. CSV row numbers include the header.
AttackDefending profileBeforeAfterCSV
IceFire1×½×Row 2
BugPoison2×½×Row 3
GhostPsychic0×2×Row 4
PoisonBug2×1×Row 5
IceNormal/Fire1×½×Row 6
BugNormal/Poison2×½×Row 7
PoisonNormal/Bug2×1×Row 8
IceFire/Water½×¼×Row 9
IceFire/Electric1×½×Row 10
IceFire/Grass2×1×Row 11
IceFire/Ice½×¼×Row 12
IceFire/Fighting1×½×Row 13
IceFire/Poison1×½×Row 14
BugFire/Poison1×¼×Row 15
IceFire/Ground2×1×Row 16
IceFire/Flying2×1×Row 17
IceFire/Psychic1×½×Row 18
GhostFire/Psychic0×2×Row 19
IceFire/Bug1×½×Row 20
PoisonFire/Bug2×1×Row 21
IceFire/Rock1×½×Row 22
IceFire/Ghost1×½×Row 23
IceFire/Dragon2×1×Row 24
BugWater/Poison2×½×Row 25
GhostWater/Psychic0×2×Row 26
PoisonWater/Bug2×1×Row 27
BugElectric/Poison2×½×Row 28
GhostElectric/Psychic0×2×Row 29
PoisonElectric/Bug2×1×Row 30
BugGrass/Poison4×1×Row 31
GhostGrass/Psychic0×2×Row 32
PoisonGrass/Bug4×2×Row 33
BugIce/Poison2×½×Row 34
GhostIce/Psychic0×2×Row 35
PoisonIce/Bug2×1×Row 36
BugFighting/Poison1×¼×Row 37
GhostFighting/Psychic0×2×Row 38
PoisonFighting/Bug2×1×Row 39
BugPoison/Ground2×½×Row 40
BugPoison/Flying1×¼×Row 41
BugPoison/Psychic4×1×Row 42
GhostPoison/Psychic0×2×Row 43
PoisonPoison/Bug1×½×Row 44
BugPoison/Bug2×½×Row 45
BugPoison/Rock2×½×Row 46
BugPoison/Ghost1×¼×Row 47
BugPoison/Dragon2×½×Row 48
GhostGround/Psychic0×2×Row 49
PoisonGround/Bug1×½×Row 50
GhostFlying/Psychic0×2×Row 51
PoisonFlying/Bug2×1×Row 52
PoisonPsychic/Bug2×1×Row 53
GhostPsychic/Bug0×2×Row 54
GhostPsychic/Rock0×2×Row 55
GhostPsychic/Ghost0×4×Row 56
GhostPsychic/Dragon0×2×Row 57
PoisonBug/Rock1×½×Row 58
PoisonBug/Ghost1×½×Row 59
PoisonBug/Dragon2×1×Row 60
Gen 2–5 → Gen 6+: 33 changed cells in 17 profiles
Gen 2–5 → Gen 6+, shared types only. CSV row numbers include the header.
AttackDefending profileBeforeAfterCSV
GhostSteel½×1×Row 61
DarkSteel½×1×Row 62
DarkNormal/Steel½×1×Row 63
GhostFire/Steel½×1×Row 64
DarkFire/Steel½×1×Row 65
GhostWater/Steel½×1×Row 66
DarkWater/Steel½×1×Row 67
GhostElectric/Steel½×1×Row 68
DarkElectric/Steel½×1×Row 69
GhostGrass/Steel½×1×Row 70
DarkGrass/Steel½×1×Row 71
GhostIce/Steel½×1×Row 72
DarkIce/Steel½×1×Row 73
GhostFighting/Steel½×1×Row 74
DarkFighting/Steel¼×½×Row 75
GhostPoison/Steel½×1×Row 76
DarkPoison/Steel½×1×Row 77
GhostGround/Steel½×1×Row 78
DarkGround/Steel½×1×Row 79
GhostFlying/Steel½×1×Row 80
DarkFlying/Steel½×1×Row 81
GhostPsychic/Steel1×2×Row 82
DarkPsychic/Steel1×2×Row 83
GhostBug/Steel½×1×Row 84
DarkBug/Steel½×1×Row 85
GhostRock/Steel½×1×Row 86
DarkRock/Steel½×1×Row 87
GhostGhost/Steel1×2×Row 88
DarkGhost/Steel1×2×Row 89
GhostDragon/Steel½×1×Row 90
DarkDragon/Steel½×1×Row 91
GhostDark/Steel¼×½×Row 92
DarkDark/Steel¼×½×Row 93

Sources, reproduction and corrections

Version 1.0.0 · 23 October 2026 · Published by TypeChart, an independent fan tool.

The official Pokémon type chart is useful for current-game background and explicitly notes that affinity can differ by game. Our historical inputs use the pinned, MIT-licensed Showdown implementation. The source establishes the inputs; TypeChart’s enumerated profiles and comparison ledger are our own derived outputs. Neither source endorses this reference.

Download the inputs, results, change ledger, method, scope notes, source version, license and Python script from the data links below. Place the script beside charts-v1.json and run python3 reproduce-v1.py using Python 3’s standard library. No network access or additional package is required. The script regenerates the JSON results and CSV changes.

Scope and limits

This reference does not include abilities, items, weather, special move interactions, inverse battles, Terastallization or Stellar mechanics. It does not apply Pokémon GO or Trading Card Game rules. It does not model every Gen 1 bug, damage rounding, or battle message. “Gen 6+” names the pinned standard chart family, not a promise to cover every later game mechanic.

A resistance count is not a measure of competitive strength. Stats, moves, abilities, availability and a team’s actual opponents matter. No battle win rate, damage estimate or species usage claim follows from these tables.

Found a mismatch? Send a correction with the game, attack type, defending type or pair, and a source or reproducible example. Changes to inputs or methods receive a new data version and a dated correction note.

Version 1 data downloads

Each file belongs to the 23 October 2026 v1.0.0 snapshot. Keep the source license with the input data.

Methodology JSON
Enumeration method, scope and reproduction command.
Sources JSON
Source URLs, dates and what each source supports.
Full results JSON
All 444 defensive profiles and 7,479 attack/profile results.
Change ledger CSV
All 92 changed attack/profile cells between shared types.
Chart inputs JSON
The three defender-first type tables used in this comparison.
Reproduction script Python
Regenerate results and changes offline with Python 3.
Limitations JSON
Excluded mechanics and interpretation boundaries.
Showdown license TXT
MIT license retained with the source-derived inputs.
Source version JSON
Pinned upstream revision and input-file checksums.