Pokémon Gold and Silver
The Generation II Pokémon games for Game Boy Color, read through the pret/pokegold disassembly.
On this page
Pokémon Gold and Silver are the first Generation II games, for the Game Boy Color. The code read here is pret’s pokegold disassembly, diffed routine by routine against Crystal.
Most of what the atlas reads in Crystal’s battles is already in Gold and Silver, line for line. The staged critical hit1, the 17-type chart2, per-hit multi-hit damage3, and move priority with the Quick Claw4 all date from here. So do held items5, battle weather6, and a time of day from the cartridge clock7 that sets the wild encounter rate8. Escaping is Red and Blue’s formula; Crystal later adds two battles that block it9.
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Critical hit | From stages | Focus Energy, high-critical moves, and a Scope Lens add stages, from 17 to 128 in 256 |
| Hit chance | Move accuracy | an accuracy byte after stages, less 20 against a BrightPowder, and 255 always hits |
| Type effectiveness | 17 types | Steel and Dark join, in the chart Crystal later ships unchanged |
| Same-type attack bonus | Half again | damage plus half, after weather and badge boosts and before the type rows |
| Damage formula | Attack over defense | a random factor of 217–255 over 255, which Crystal keeps |
| Multi-hit attack | Per-hit damage | 2–5 hits, each with its own critical and damage roll |
| Random encounter | By area and time | the map's rate and its grass slots for morning, day, or night, then one of 7 slots |
| Fleeing | Speed ratio | Red and Blue's formula, plus a held Smoke Ball that always escapes |
| Turn order | Priority, then Speed | move priority from 0 to 3, then a held Quick Claw's roll, then Speed |
| Held item | each item carries a held effect and a parameter that battle code reads | |
| Weather | Set by moves | rain and sun for 5 turns, ×1.5 or ×½ on Water and Fire |
| Time of day | External clock | morning, day, and night from the cartridge clock's hour |
| Capture | Single catch roll | Crystal's code: one byte against the catch rate scaled by (3M − 2H)/3M, plus 10 for sleep or freeze and nothing for burn, poison or paralysis |
Every claim about this game, by concept (14)
References
- ^Gold and Silver already use the staged critical hit that Crystal keeps line for line: Focus Energy (+1), a high-critical move (+2), and a Scope Lens (+1) add to a critical level, which reads 17, 32, 64, 85, or 128 in 256 from
CriticalHitChances. Chansey holding a Lucky Punch and Farfetch'd holding a Stick get level 2 at once and skip the other bonuses.Codepret/pokegold · pret/pokecrystalrevisedHow we know
1145 cp CHANSEY 1146 jr nz, .Farfetchd 1147 ld a, [hl] 1148 cp LUCKY_PUNCH 1149 jr nz, .FocusEnergy ⋮ 1151; +2 critical level 1152 ld c, 2 1153 jr .Tally ⋮ 1156 cp FARFETCH_D 1157 jr nz, .FocusEnergy 1158 ld a, [hl] 1159 cp STICK ⋮
engine/battle/effect_commands.asm lines 1145–1205 at fc702b6 · upstream ↗ 1CriticalHitChances: 2 db 1 out_of 15 ; 0 3 db 1 out_of 8 ; +1 4 db 1 out_of 4 ; +2 5 db 1 out_of 3 ; +3 6 db 1 out_of 2 ; +4
data/battle/critical_hit_chances.asm lines 1–8 at fc702b6 · upstream ↗ engine/battle/effect_commands.asm#L1120-L1213 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^Gold and Silver's type chart file is the one Crystal ships, byte for byte, so the 17 types, Steel and Dark included, and Ghost's ×2 on Psychic date from Gold and Silver.Codepret/pokegold · pret/pokecrystal
How we know
1TypeMatchups: ⋮ 112 db -2 ; end (with Foresight) ⋮ 118 db -1 ; end
data/types/type_matchups.asm lines 1–118 at fc702b6 · upstream ↗ data/types/type_matchups.asm#L1-L118 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^Gold and Silver's
BattleCommand_EndLoop, which Crystal keeps apart from a comment, loops back to the critical command for every hit of a 2–5-hit move, so each hit rolls its own critical and damage.Codepret/pokegold · pret/pokecrystalHow we know
5161BattleCommand_EndLoop:engine/battle/effect_commands.asm lines 5161–5292 at fc702b6 · upstream ↗ engine/battle/effect_commands.asm#L5203-L5335 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^Gold and Silver order moves by priority, 3 for Protect and Endure, 2 for the priority-hit moves, 0 for Vital Throw and the force-switch, Counter, and Mirror Coat effects, and 1 for the rest; at equal priority a held Quick Claw goes first when a random byte is below its value, 60, about 23% of the time, and otherwise the higher Speed goes first, with a tie split evenly; Crystal keeps the routine.Codepret/pokegoldrevised
How we know
433 call CompareMovePriority ⋮ 445 cp HELD_QUICK_CLAW ⋮ 448 cp HELD_QUICK_CLAW ⋮ 450 call BattleRandom 451 cp e
engine/battle/core.asm lines 431–452 at fc702b6 · upstream ↗ 781GetMovePriority: 782; Return the priority (0-3) of move a. ⋮ 786 ; Vital Throw goes last. 787 cp VITAL_THROW
engine/battle/core.asm lines 781–792 at fc702b6 · upstream ↗ 1MoveEffectPriorities: 2 db EFFECT_PROTECT, 3 3 db EFFECT_ENDURE, 3 4 db EFFECT_PRIORITY_HIT, 2 5 db EFFECT_FORCE_SWITCH, 0 6 db EFFECT_COUNTER, 0 7 db EFFECT_MIRROR_COAT, 0
data/moves/effects_priorities.asm lines 1–8 at fc702b6 · upstream ↗ 155; QUICK_CLAW 156 item_attribute 100, HELD_QUICK_CLAW, 60, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 155–156 at fc702b6 · upstream ↗ 485.speed_check 486 ld de, wBattleMonSpeed 487 ld hl, wEnemyMonSpeed 488 ld c, 2 489 call CompareBytes 490 jr z, .speed_tie 491 jp nc, .player_first 492 jp .enemy_first ⋮ 494.speed_tie ⋮ 498 call BattleRandom 499 cp 50 percent + 1 ⋮ 501 jp .enemy_first
engine/battle/core.asm lines 485–501 at fc702b6 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^Each Gold and Silver item record carries a held effect and a parameter, which battle code reads from the item a Pokémon holds; Quick Claw's is 60, BrightPowder's 20, Leftovers' 10, and Scope Lens's
HELD_CRITICAL_UPhas 0.Codepret/pokegoldHow we know
155; QUICK_CLAW 156 item_attribute 100, HELD_QUICK_CLAW, 60, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 155–156 at fc702b6 · upstream ↗ 289; SCOPE_LENS 290 item_attribute 200, HELD_CRITICAL_UP, 0, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 289–290 at fc702b6 · upstream ↗ 302; LEFTOVERS 303 item_attribute 200, HELD_LEFTOVERS, 10, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 302–303 at fc702b6 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^Rain Dance and Sunny Day each set their weather for 5 turns; in rain, Water moves do ×1.5 and Fire moves ×½, in sun the reverse, and rain halves SolarBeam.Codepret/pokegoldrevised
How we know
1BattleCommand_StartRain: 2 ld a, WEATHER_RAIN 3 ld [wBattleWeather], a 4 ld a, 5 5 ld [wWeatherCount], a
engine/battle/move_effects/rain_dance.asm lines 1–5 at fc702b6 · upstream ↗ 1WeatherTypeModifiers: 2 db WEATHER_RAIN, WATER, MORE_EFFECTIVE 3 db WEATHER_RAIN, FIRE, NOT_VERY_EFFECTIVE 4 db WEATHER_SUN, FIRE, MORE_EFFECTIVE 5 db WEATHER_SUN, WATER, NOT_VERY_EFFECTIVE ⋮ 9 db WEATHER_RAIN, EFFECT_SOLARBEAM, NOT_VERY_EFFECTIVE
data/battle/weather_modifiers.asm lines 1–10 at fc702b6 · upstream ↗ 1BattleCommand_StartSun: 2 ld a, WEATHER_SUN 3 ld [wBattleWeather], a 4 ld a, 5 5 ld [wWeatherCount], a
engine/battle/move_effects/sunny_day.asm lines 1–5 at fc702b6 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^Gold and Silver set the time of day from the cartridge clock's hour, morning from 4:00 to 9:59, day from 10:00 to 17:59, and night from 18:00 to 3:59.Codepret/pokegold
How we know
25GetTimeOfDay:: 26; get time of day based on the current hour 27 ldh a, [hHours] ; hour 28 ld hl, TimesOfDay ⋮ 42; get time of day ⋮ 48TimesOfDay: 49; hours for the time of day 50; 0400-0959 morn | 1000-1759 day | 1800-0359 nite 51 db MORN_HOUR, NITE_F 52 db DAY_HOUR, MORN_F 53 db NITE_HOUR, DAY_F
engine/rtc/rtc.asm lines 25–55 at fc702b6 · upstream ↗ 37DEF MORN_HOUR EQU 4 ; 4 AM 38DEF DAY_HOUR EQU 10 ; 10 AM 39DEF NITE_HOUR EQU 18 ; 6 PM
constants/misc_constants.asm lines 37–39 at fc702b6 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^On each step, Gold and Silver's
TryWildEncounterreads the map's encounter rate for the current time of day (morning, day, or night), or its water rate, doubles it for the Pokémon March or Ruins of Alph radio, halves it for the Pokémon Lullaby or a Cleanse Tag, and starts a battle whenRandomis below it; Crystal keeps this unchanged.Codepret/pokegold · pret/pokecrystalHow we know
212.EncounterRate: 213 call GetMapEncounterRate 214 call ApplyMusicEffectOnEncounterRate 215 call ApplyCleanseTagEffectOnEncounterRate 216 call Random 217 cp b 218 ret ⋮ 220GetMapEncounterRate: 221 ld hl, wMornEncounterRate 222 call CheckOnWater 223 ld a, wWaterEncounterRate - wMornEncounterRate 224 jr z, .ok ⋮
engine/overworld/wildmons.asm lines 212–251 at fc702b6 · upstream ↗ engine/overworld/wildmons.asm#L176-L251 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^Gold and Silver's escape formula is Red and Blue's, plus 30 for each earlier attempt against a random byte, with a held Smoke Ball that always escapes; Crystal adds two battle types, Celebi's and Suicune's, that block escape.Codepret/pokegold · pret/pokered · pret/pokecrystalrevised
How we know
3504 cp HELD_ESCAPE ⋮ 3537 ld a, 32 ⋮ 3547 srl b 3548 rr a 3549 srl b 3550 rr a ⋮ 3564 ld b, 30
engine/battle/core.asm lines 3504–3564 at fc702b6 · upstream ↗ 1496TryRunningFromBattle: ⋮ 1528 ld a, 32 ⋮ 1557 ld b, 30
engine/battle/core.asm lines 1496–1612 at af51989 · upstream ↗ 3689 cp BATTLETYPE_CELEBI 3690 jp z, .cant_escape ⋮ 3692 jp z, .cant_escape 3693 cp BATTLETYPE_SUICUNE 3694 jp z, .cant_escape
engine/battle/core.asm lines 3689–3694 at 97187cd · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
Sources
Code
- pret contributors. 2026. “pokegold: disassembly of Pokémon Gold and Silver.” pret. Commit fc702b6. pret/pokegold @ fc702b6 · licence, all uses
- pret contributors. 2026. “pokecrystal: disassembly of Pokémon Crystal.” pret. Commit 97187cd. pret/pokecrystal @ 97187cd · licence, all uses
- pret contributors. 2026. “pokered: disassembly of Pokémon Red and Blue.” pret. Commit af51989. pret/pokered @ af51989 · licence, all uses