On this page
  1. Related
  2. Mechanics
  3. References
  4. Sources

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

MechanicKindHow
Critical hitFrom stagesFocus Energy, high-critical moves, and a Scope Lens add stages, from 17 to 128 in 256
Hit chanceMove accuracyan accuracy byte after stages, less 20 against a BrightPowder, and 255 always hits
Type effectiveness17 typesSteel and Dark join, in the chart Crystal later ships unchanged
Same-type attack bonusHalf againdamage plus half, after weather and badge boosts and before the type rows
Damage formulaAttack over defensea random factor of 217–255 over 255, which Crystal keeps
Multi-hit attackPer-hit damage2–5 hits, each with its own critical and damage roll
Random encounterBy area and timethe map's rate and its grass slots for morning, day, or night, then one of 7 slots
FleeingSpeed ratioRed and Blue's formula, plus a held Smoke Ball that always escapes
Turn orderPriority, then Speedmove priority from 0 to 3, then a held Quick Claw's roll, then Speed
Held itemeach item carries a held effect and a parameter that battle code reads
WeatherSet by movesrain and sun for 5 turns, ×1.5 or ×½ on Water and Fire
Time of dayExternal clockmorning, day, and night from the cartridge clock's hour
CaptureSingle catch rollCrystal'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)
CaptureGold and Silver run the same capture code as Crystal: from the catch-rate load to the final roll, PokeBallEffect differs only in comments, and the wobble table is identical.Code
Critical hitGold 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.Code
Damage formulaGold and Silver's BattleCommand_DamageVariation leaves 0 or 1 damage alone and otherwise multiplies by a random byte, rotated, redrawn until it is at least 217 (85 percent + 1), and divides by 255 (100 percent); Crystal keeps the command unchanged. Their BattleCommand_DamageCalc differs from Crystal's only in comments and one doubling written sla a where Crystal has add a.Code
FleeingGold and Silver's escape formula is Red and Blue's, ⌊32P/(⌊E/4⌋mod256)⌋ 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.Code
Held itemEach 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_UP has 0.Code
Hit chanceGold and Silver's BattleCommand_CheckHit, which Crystal keeps unchanged, subtracts a target's BrightPowder value (20) from the stage-scaled accuracy byte, lets a byte of 255 always hit, and otherwise hits on a random byte below it.Code
Multi-hit attackGold 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.Code
Random encounterOn each step, Gold and Silver's TryWildEncounter reads 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 when Random is below it; Crystal keeps this unchanged.Code
The time of day picks which of a grass area's three sets of 7 slots is used; a roll from 1 to 100 then picks a slot at 30, 30, 20, 10, 5, 4, and 1 percent, or one of 3 water slots at 60, 30, and 10 percent. Crystal's routine and table are the same.Code
Same-type attack bonusGold and Silver's BattleCommand_Stab, which Crystal keeps unchanged, applies the weather and badge type boosts and then STAB, damage+⌊damage/2⌋, before the type rows.Code
Time of dayGold 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.Code
Turn orderGold 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.Code
Type effectivenessGold 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.Code
WeatherRain 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.Code

References

  1. ^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/pokecrystalrevised
    How 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.

    In the claim ledger

  2. ^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.

    In the claim ledger

  3. ^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/pokecrystal
    How 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.

    In the claim ledger

  4. ^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.

    In the claim ledger

  5. ^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_UP has 0.Codepret/pokegold
    How 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.

    In the claim ledger

  6. ^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.

    In the claim ledger

  7. ^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.

    In the claim ledger

  8. ^On each step, Gold and Silver's TryWildEncounter reads 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 when Random is below it; Crystal keeps this unchanged.Codepret/pokegold · pret/pokecrystal
    How 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.

    In the claim ledger

  9. ^Gold and Silver's escape formula is Red and Blue's, ⌊32P/(⌊E/4⌋mod256)⌋ 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.

    In the claim ledger

Sources

Code