Pokémon Card GB2/ROM map

From Data Crystal
< Pokémon Card GB2
Revision as of 13:26, 30 May 2020 by Ed101 (talk | contribs) (spaces and column title)
Jump to navigation Jump to search

Chip tiny.png The following article is a ROM map for Pokémon Card GB2.

Bank 0

Copy Battle State in SRAM

ROM0:070C 2A               ldi  a,(hl)
ROM0:070D 12               ld   (de),a
ROM0:070E 13               inc  de
ROM0:070F 0B               dec  bc
ROM0:0710 79               ld   a,c
ROM0:0711 B0               or   b
ROM0:0712 20 F8            jr   nz,070C
ROM0:0714 C9               ret  

? (to document)

  • 0x715-0x73E - Pointer for Booster card ?
ROM0:0715 E5               push hl
ROM0:0716 C5               push bc
ROM0:0717 F5               push af
ROM0:0718 D5               push de
ROM0:0719 5D               ld   e,l
ROM0:071A 54               ld   d,h
ROM0:071B F8 09            ld   hl,sp+09
ROM0:071D 46               ld   b,(hl)
ROM0:071E 2B               dec  hl
ROM0:071F 4E               ld   c,(hl)
ROM0:0720 2B               dec  hl
ROM0:0721 70               ld   (hl),b
ROM0:0722 2B               dec  hl
ROM0:0723 71               ld   (hl),c
ROM0:0724 F8 09            ld   hl,sp+09
ROM0:0726 F0 80            ld   a,(ff00+80)
ROM0:0728 32               ldd  (hl),a
ROM0:0729 36 00            ld   (hl),00
ROM0:072B 7A               ld   a,d		// a = card ID >> 8
ROM0:072C 07               rlca 
ROM0:072D 07               rlca 
ROM0:072E E6 03            and  a,03		// If(carry) a = 3; Else a = 0
ROM0:0730 47               ld   b,a
ROM0:0731 CB BA            res  7,d
ROM0:0733 CB F2            set  6,d
ROM0:0735 6B               ld   l,e
ROM0:0736 62               ld   h,d		// hl = 0x4000 + card ID × 2
ROM0:0737 D1               pop  de		// de = card ID
ROM0:0738 F1               pop  af
ROM0:0739 80               add  b
ROM0:073A CD 73 07         call 0773
ROM0:073D C1               pop  bc
ROM0:073E C9               ret  
  • 0x73F-0x75D - ?
ROM0:073F E5               push hl
ROM0:0740 C5               push bc
ROM0:0741 F5               push af
ROM0:0742 D5               push de
ROM0:0743 5D               ld   e,l
ROM0:0744 54               ld   d,h
ROM0:0745 F8 09            ld   hl,sp+09
ROM0:0747 46               ld   b,(hl)
ROM0:0748 2B               dec  hl
ROM0:0749 4E               ld   c,(hl)
ROM0:074A 2B               dec  hl
ROM0:074B 70               ld   (hl),b
ROM0:074C 2B               dec  hl
ROM0:074D 71               ld   (hl),c
ROM0:074E F8 09            ld   hl,sp+09
ROM0:0750 F0 80            ld   a,(ff00+80)
ROM0:0752 32               ldd  (hl),a
ROM0:0753 36 00            ld   (hl),00
ROM0:0755 6B               ld   l,e
ROM0:0756 62               ld   h,d
ROM0:0757 D1               pop  de
ROM0:0758 F1               pop  af
ROM0:0759 CD 73 07         call 0773
ROM0:075C C1               pop  bc
ROM0:075D C9               ret  
  • 0x75E-0x772 - ?
ROM0:075E E5               push hl
ROM0:075F D5               push de
ROM0:0760 F8 07            ld   hl,sp+07
ROM0:0762 3A               ldd  a,(hl)
ROM0:0763 CD 73 07         call 0773
ROM0:0766 2B               dec  hl
ROM0:0767 56               ld   d,(hl)
ROM0:0768 2B               dec  hl
ROM0:0769 5E               ld   e,(hl)
ROM0:076A 23               inc  hl
ROM0:076B 23               inc  hl
ROM0:076C 73               ld   (hl),e
ROM0:076D 23               inc  hl
ROM0:076E 72               ld   (hl),d
ROM0:076F D1               pop  de
ROM0:0770 E1               pop  hl
ROM0:0771 F1               pop  af
ROM0:0772 C9               ret  
  • 0x773-0x778 - ?
ROM0:0773 E0 80            ld   (ff00+80),a
ROM0:0775 EA 00 20         ld   (2000),a
ROM0:0778 C9               ret

PRNG

/* function starts at 0x85A */
n = accumulator;
frame = (CACA);
seed = rl((CAC8) ⊕ (CAC9)) ⊕ rl((CAC8) ⊕ frame);
prn_1 = (seed × n) >> 8;			// 1-byte PRN used in most occasions: Booster packs, Coin flips, Random damage...
prn_2 = rr((CAC8) ⊕ rlc(rlc(CAC9)));		// 1-byte PRN used in fewer occasions
  • 0x844-0x859 - Pseudo-random number between 0 and n-1, multiply prn generated at 0x866 by n, keep the most-significant bits (register h)
ROM0:0844 D5               push de
ROM0:0845 7C               ld   a,h		// a = n
ROM0:0846 5D               ld   e,l		// e = rl((CAC8) ⊕ (CAC9)) ⊕ rl((CAC8) ⊕ (CACA))
ROM0:0847 16 00            ld   d,00		// d = 0
ROM0:0849 6A               ld   l,d
ROM0:084A 62               ld   h,d		// hl = 0
ROM0:084B 18 05            jr   0852
ROM0:084D 19               add  hl,de		// hl += de
ROM0:084E CB 23            sla  e		// e << 1
ROM0:0850 CB 12            rl   d		// rotate left, put the carry in the lsb of register d
ROM0:0852 CB 3F            srl  a		// a >> 1
ROM0:0854 38 F7            jr   c,084D		// If carry, jump to 0x84D
ROM0:0856 20 F6            jr   nz,084E		// ElseIf a != 0, jump to 0x84E
ROM0:0858 D1               pop  de
ROM0:0859 C9               ret
  • 0x85A-0x865 - Loads (rl((CAC9) ⊕ (CAC8)) ⊕ rl((CACA) ⊕ (CAC8)) × n) >> 8 in accumulator
ROM0:085A E5               push hl
ROM0:085B 67               ld   h,a		// h = n
ROM0:085C CD 66 08         call 0866
ROM0:085F 6F               ld   l,a		// l = rl((CACA) ⊕ (CAC9)) ⊕ rl((CAC8) ⊕ (CACA))
ROM0:0860 CD 44 08         call 0844
ROM0:0863 7C               ld   a,h		// a = h × l >> 8
ROM0:0864 E1               pop  hl
ROM0:0865 C9               ret
  • 0x866-0x889 - Stores a one-byte pseudo-random value in accumulator, and loads a new two-byte seed in (CAC8)
ROM0:0866 E5               push hl
ROM0:0867 D5               push de
ROM0:0868 21 C8 CA         ld   hl,CAC8
ROM0:086B 2A               ldi  a,(hl)		// Loads (CAC8)
ROM0:086C 56               ld   d,(hl)		// Loads (CAC9)
ROM0:086D 23               inc  hl
ROM0:086E 5F               ld   e,a		// e = (CAC8)
ROM0:086F 7A               ld   a,d		// a = (CAC9)
ROM0:0870 07               rlca
ROM0:0871 07               rlca
ROM0:0872 AB               xor  e
ROM0:0873 1F               rra 			// a = rr(rlc(rlc(CAC9)) ⊕ (CAC8))
ROM0:0874 F5               push af		// Stores result
ROM0:0875 7A               ld   a,d		// a = (CAC9)
ROM0:0876 AB               xor  e
ROM0:0877 57               ld   d,a 		// d = (CAC9) ⊕ (CAC8)
ROM0:0878 7E               ld   a,(hl)		// Loads PRNG frame (CACA)
ROM0:0879 AB               xor  e
ROM0:087A 5F               ld   e,a		// e = (CACA) ⊕ (CAC8)
ROM0:087B F1               pop  af
ROM0:087C CB 13            rl   e
ROM0:087E CB 12            rl   d
ROM0:0880 7A               ld   a,d
ROM0:0881 AB               xor  e		// a = rl((CAC9) ⊕ (CAC8)) ⊕ rl((CACA) ⊕ (CAC8))
ROM0:0882 34               inc  (hl)		// Increment PRNG frame in (CACA)
ROM0:0883 2B               dec  hl
ROM0:0884 72               ld   (hl),d		// Loads rl((CAC9) ⊕ (CAC8)) in (CAC9)
ROM0:0885 2B               dec  hl
ROM0:0886 73               ld   (hl),e		// Loads rl((CACA) ⊕ (CAC8)) in (CAC8)
ROM0:0887 D1               pop  de
ROM0:0888 E1               pop  hl
ROM0:0889 C9               ret

? (to document)

  • 0x9A7-0x9B3 - ?
ROM0:09A7 F5               push af
ROM0:09A8 E5               push hl
ROM0:09A9 F8 04            ld   hl,sp+04
ROM0:09AB 7E               ld   a,(hl)
ROM0:09AC CD 73 07         call 0773
ROM0:09AF E1               pop  hl
ROM0:09B0 F1               pop  af
ROM0:09B1 33               inc  sp
ROM0:09B2 33               inc  sp
ROM0:09B3 C9               ret  

Multiply by 10

  • 0xB20-0xB27 - Multiply accumulator by 10
ROM0:0B20 D5               push de
ROM0:0B21 5F               ld   e,a
ROM0:0B22 87               add  a
ROM0:0B23 87               add  a
ROM0:0B24 83               add  e
ROM0:0B25 87               add  a
ROM0:0B26 D1               pop  de
ROM0:0B27 C9               ret

? (Reads deck ?)

ROM0:111F F5               push af
ROM0:1120 E5               push hl
ROM0:1121 CD 6B 11         call 116B
ROM0:1124 5E               ld   e,(hl)
ROM0:1125 23               inc  hl
ROM0:1126 56               ld   d,(hl)
ROM0:1127 E1               pop  hl
ROM0:1128 F1               pop  af
ROM0:1129 C9               ret

Damage calculation

  • 0x1500-0x1534 - Initialize damage modifiers
ROM0:1500 AF               xor  a
ROM0:1501 EA 01 CD         ld   (CD01),a	// Sets every damage modifier to 0
ROM0:1504 EA E2 CC         ld   (CCE2),a
ROM0:1507 EA 02 CD         ld   (CD02),a
ROM0:150A EA FB CC         ld   (CCFB),a
ROM0:150D EA 04 CD         ld   (CD04),a
ROM0:1510 EA 05 CD         ld   (CD05),a
ROM0:1513 EA 06 CD         ld   (CD06),a
ROM0:1516 EA 0A CD         ld   (CD0A),a
ROM0:1519 EA 0C CD         ld   (CD0C),a
ROM0:151C EA 0D CD         ld   (CD0D),a
ROM0:151F EA 16 CD         ld   (CD16),a
ROM0:1522 21 10 CD         ld   hl,CD10
ROM0:1525 22               ldi  (hl),a
ROM0:1526 22               ldi  (hl),a
ROM0:1527 22               ldi  (hl),a
ROM0:1528 77               ld   (hl),a
ROM0:1529 DF               rst  18
ROM0:152A 13               inc  de
ROM0:152B 6B               ld   l,e
ROM0:152C 3E ED            ld   a,ED
ROM0:152E CD 8C 14         call 148C
ROM0:1531 EA 0B CD         ld   (CD0B),a
ROM0:1534 C9               ret  
  • 0x1796-0x17A4 - Loads Base Damage of current attack
ROM0:1796 AF               xor  a
ROM0:1797 EA D1 CC         ld   (CCD1),a
ROM0:179A 21 C9 CC         ld   hl,CCC9
ROM0:179D 2A               ldi  a,(hl)		// Loads Base Damage of current attack
ROM0:179E B6               or   (hl)
ROM0:179F 20 04            jr   nz,17A5		// If the attack deals damage, jump to next function at 0x17A5
ROM0:17A1 11 00 00         ld   de,0000
ROM0:17A4 C9               ret
  • 0x17A5-0x17BF -
ROM0:17A5 AF               xor  a
ROM0:17A6 E0 9F            ld   (ff00+9F),a
ROM0:17A8 56               ld   d,(hl)
ROM0:17A9 2B               dec  hl
ROM0:17AA 5E               ld   e,(hl)		// Loads Base Damage of current attack
ROM0:17AB CB 7A            bit  7,d
ROM0:17AD 28 0B            jr   z,17BA
ROM0:17AF CB BA            res  7,d
ROM0:17B1 AF               xor  a
ROM0:17B2 EA D1 CC         ld   (CCD1),a
ROM0:17B5 DF               rst  18
ROM0:17B6 22               ldi  (hl),a
ROM0:17B7 6C               ld   l,h
ROM0:17B8 18 4F            jr   1809
ROM0:17BA DF               rst  18
ROM0:17BB 22               ldi  (hl),a
ROM0:17BC 6C               ld   l,h
ROM0:17BD 7B               ld   a,e
ROM0:17BE B2               or   d
ROM0:17BF C8               ret  z
  • 0x18B3-0x18C8 - Subtract final damage from the Defending Pokémon HP
ROM0:18B3 E5               push hl
ROM0:18B4 D5               push de
ROM0:18B5 7E               ld   a,(hl)		// Loads (C2C8) or (C3C8), Defending Pokémon's remaining HP
ROM0:18B6 93               sub  e		// Subtract damage from remaining HP
ROM0:18B7 77               ld   (hl),a		// Loads result in (C2C8) or (C3C8)
ROM0:18B8 3E 00            ld   a,00 
ROM0:18BA 9A               sbc  d
ROM0:18BB E6 80            and  a,80
ROM0:18BD 28 02            jr   z,18C1		// If damage was greater than remaining HP, set remaining HP to 0
ROM0:18BF 36 00            ld   (hl),00
ROM0:18C1 7E               ld   a,(hl)
ROM0:18C2 B7               or   a
ROM0:18C3 28 01            jr   z,18C6		// If remaining HP is greater than 0, set carry flag
ROM0:18C5 37               scf  
ROM0:18C6 D1               pop  de
ROM0:18C7 E1               pop  hl
ROM0:18C8 C9               ret

? (to document)

  • 0x1B50-0x1B73 - ?
ROM0:1B50 E5               push hl
ROM0:1B51 C5               push bc
ROM0:1B52 D5               push de
ROM0:1B53 DF               rst  18
ROM0:1B54 0C               inc  c
ROM0:1B55 6A               ld   l,d
ROM0:1B56 D1               pop  de
ROM0:1B57 CD 86 07         call 0786
ROM0:1B5A 21 00 C0         ld   hl,C000
ROM0:1B5D 19               add  hl,de
ROM0:1B5E 7E               ld   a,(hl)
ROM0:1B5F E6 7F            and  a,7F
ROM0:1B61 FE 63            cp   a,63
ROM0:1B63 30 09            jr   nc,1B6E
ROM0:1B65 21 00 A1         ld   hl,A100
ROM0:1B68 19               add  hl,de
ROM0:1B69 7E               ld   a,(hl)
ROM0:1B6A E6 7F            and  a,7F
ROM0:1B6C 3C               inc  a
ROM0:1B6D 77               ld   (hl),a
ROM0:1B6E CD 8E 07         call 078E
ROM0:1B71 C1               pop  bc
ROM0:1B72 E1               pop  hl
ROM0:1B73 C9               ret  

Loads card data

  • 0x2D70-0x2D8C - Loads card data from array at 0x5C430
ROM0:2D70 E5               push hl
ROM0:2D71 D5               push de
ROM0:2D72 CD 8D 2D         call 2D8D		// Ensures card ID in register de is valid
ROM0:2D75 38 13            jr   c,2D8A
ROM0:2D77 3E 17            ld   a,17
ROM0:2D79 CD 15 07         call 0715		// Pointer for Booster card ?
ROM0:2D7C 5E               ld   e,(hl)		// e = Card Type
ROM0:2D7D 01 05 00         ld   bc,0005
ROM0:2D80 09               add  hl,bc
ROM0:2D81 46               ld   b,(hl)		// b = Rarity
ROM0:2D82 23               inc  hl
ROM0:2D83 23               inc  hl
ROM0:2D84 4E               ld   c,(hl)		// c = Booster
ROM0:2D85 CD 5E 07         call 075E
ROM0:2D88 7B               ld   a,e		// a = Card Type
ROM0:2D89 B7               or   a		// (to clear carry flag)
ROM0:2D8A D1               pop  de		// de = Card ID
ROM0:2D8B E1               pop  hl		// hl = Pointer to possible cards in Booster pack
ROM0:2D8C C9               ret  
ROM0:2D8D D5               push de
ROM0:2D8E C5               push bc
ROM0:2D8F 7A               ld   a,d
ROM0:2D90 B3               or   e
ROM0:2D91 28 0A            jr   z,2D9D
ROM0:2D93 7A               ld   a,d
ROM0:2D94 FE 01            cp   a,01
ROM0:2D96 20 03            jr   nz,2D9B
ROM0:2D98 7B               ld   a,e
ROM0:2D99 FE BE            cp   a,BE
ROM0:2D9B 38 03            jr   c,2DA0		// If((CardID > 0) && (CardID < 0x1BE)), jump to 0:2DA0
ROM0:2D9D 37               scf  
ROM0:2D9E 18 13            jr   2DB3		// Else jump to 0:2DB3
  • 0x2DA0-0x2DB5 - ?
ROM0:2DA0 6B               ld   l,e
ROM0:2DA1 62               ld   h,d
ROM0:2DA2 29               add  hl,hl		// hl = CardID × 2
ROM0:2DA3 01 00 00         ld   bc,0000
ROM0:2DA6 09               add  hl,bc
ROM0:2DA7 3E 17            ld   a,17
ROM0:2DA9 CD 15 07         call 0715		// hl = pointer for Booster card ?
ROM0:2DAC 2A               ldi  a,(hl)
ROM0:2DAD 66               ld   h,(hl)
ROM0:2DAE 6F               ld   l,a		// hl = (4000 + Card ID ×2)
ROM0:2DAF CD 5E 07         call 075E
ROM0:2DB2 B7               or   a
ROM0:2DB3 C1               pop  bc
ROM0:2DB4 D1               pop  de
ROM0:2DB5 C9               ret

0:3509

ROM0:3509 F1               pop  af
ROM0:350A 04               inc  b
ROM0:350B 22               ldi  (hl),a
ROM0:350C 0D               dec  c
ROM0:350D 20 FC            jr   nz,350B
ROM0:350F 05               dec  b
ROM0:3510 20 F9            jr   nz,350B
ROM0:3512 C9               ret  
ROM0:3513 79               ld   a,c
ROM0:3514 B0               or   b
ROM0:3515 20 01            jr   nz,3518     ;if (≠ 0), jump to Copy data to SRAM
ROM0:3517 C9               ret  

Copy data to SRAM

ROM0:3518 04               inc  b
ROM0:3519 2A               ldi  a,(hl)
ROM0:351A 12               ld   (de),a
ROM0:351B 13               inc  de
ROM0:351C 0D               dec  c
ROM0:351D 20 FA            jr   nz,3519
ROM0:351F 05               dec  b
ROM0:3520 20 F7            jr   nz,3519
ROM0:3522 C9               ret

Bank 3

Booster pack

Booster pack arrays

  • 0xCC9B-0xCE40 - Booster pack arrays, to analyze. Bold text means it's described below.
00 08 FF 00 08 FF 00 00 FF 00 01 FF 00 09 FF 00
02 00 FF 00 00 FF 00 01 FF 00 00 FF 00 04 04 FF
00 00 FF 00 02 02 FF 00 01 00 FF 00 03 FF 00 02
02 FF 00 00 00 FF 00 03 00 FF 00 01 FF 00 02 FF
00 02 02 FF 00 04 02 FF 00 00 00 FF 00 01 01 FF
00 02 FF 00 03 03 FF 00 00 00 FF 00 04 04 FF 00
01 01 FF 00 03 02 FF 00 03 02 FF 00 04 03 FF 00
03 03 FF 00 00 FF 00 01 01 FF 00 00 00 FF 00 03
03 FF 00 02 FF 00 00 FF 00 04 04 FF 00 02 01 FF
00 00 00 FF 00 06 05 FF 00 03 FF 00 04 FF 00 00
FF 00 04 00 FF 00 05 00 FF 00 05 01 FF 00 05 02
FF 00 06 02 FF 00 05 FF 00 05 FF 00 05 FF 00 05
05 FF 00 05 FF 00 05 FF 00 05 05 FF 00 01 00 FF
00 02 FF 00 05 FF 00 06 05 FF 00 06 05 FF 00 02
FF 00 03 FF 00 06 FF 00 05 05 FF 00 06 03 FF 00
06 04 FF 00 06 05 FF 00 06 00 FF 00 06 01 FF 00
05 01 FF 00 05 02 FF 00 06 06 FF 00 01 01 FF 00
02 02 FF 00 03 03 FF 00 05 03 FF 00 06 04 FF 00
06 06 FF 00 09 FF 00 03 02 00 FF 00 03 02 FF 00
03 02 01 FF 00 06 05 FF 01 02 00 01 02 03 04 05
06 FF 02 02 00 01 02 FF 02 04 00 01 02 FF 02 04
00 01 02 03 FF 02 04 00 01 02 03 04 FF 02 02 02
05 06 FF 02 04 01 02 05 06 FF 02 04 02 03 04 05
06 FF 02 04 00 01 02 03 04 05 06 FF 00 0A 0A 0A
FF 00 0B 0A 0A FF 00 0C 0B 0A FF 00 0A FF 00 0B
FF 00 0C FF 00 00 FF 00 01 FF 00 02 FF 00 05 FF
00 06 FF 00 09 FF
  • 0xCDA2-0xCDA5 - 2 Ambition Booster packs
00 - Fixed
06 06 - Ambition ×2
  • 0xCDA6-0xCDA9 - 2 Legends Booster packs
00 - Fixed
01 01 - Legends ×2
  • 0xCDAA-0xCDAD - 2 Lost Isle Booster packs
00 - Fixed
02 02 - Lost Isle ×2
  • 0xCDAE-0xCDB1 - 2 Assault Booster packs
00 - Fixed
03 03 - Assault ×2
  • 0xCDD3-0xCDDB - 2 Random Booster packs from 0x00 to 0x06
01 - Random
02 - 2 Booster packs
00 01 02 03 04 05 06 - Booster packs IDs

Booster packs array to be used

  • 0xDBDB-0xDBF1 - If(valueFromFunc0xDD5Aor0xDD27 + (D61A) + 1 == 0x20), set (D61A) to 0, hl to (D61B-D61C), a to (D619)
ROM3:5BDB AF               xor  a
ROM3:5BDC EA 1A D6         ld   (D61A),a		// (D61A) = 0
ROM3:5BDF 21 1B D6         ld   hl,D61B
ROM3:5BE2 2A               ldi  a,(hl)
ROM3:5BE3 66               ld   h,(hl)
ROM3:5BE4 6F               ld   l,a
ROM3:5BE5 11 1E D6         ld   de,D61E
ROM3:5BE8 01 20 00         ld   bc,0020
ROM3:5BEB FA 19 D6         ld   a,(D619)
ROM3:5BEE CD 38 34         call 3438
ROM3:5BF1 C9               ret  
  • 0xDD0E-0xDD25 - Fail-safe from Func0xE531; fixes (D61A) and (D61B)
ROM3:5D0E 4F               ld   c,a		// c = valueFromFunc0xDD27
ROM3:5D0F 21 1B D6         ld   hl,D61B
ROM3:5D12 86               add  (hl)
ROM3:5D13 22               ldi  (hl),a		// (D61B) += valueFromFunc0xDD27
ROM3:5D14 30 01            jr   nc,5D17
ROM3:5D16 34               inc  (hl)
ROM3:5D17 79               ld   a,c
ROM3:5D18 21 1A D6         ld   hl,D61A
ROM3:5D1B 86               add  (hl)
ROM3:5D1C FE 20            cp   a,20
ROM3:5D1E 30 02            jr   nc,5D22		// If(a == 0x20), jump to 3:5D22
ROM3:5D20 77               ld   (hl),a		// (D61A) += valueFromFunc0xDD27 + (D61A) + 1
ROM3:5D21 C9               ret  
ROM3:5D22 CD DB 5B         call 5BDB		// If(a == 0x20), call 3:5BDB
ROM3:5D25 C9               ret  
  • 0xDD27-0xDD39 - Fail-safe from Func0xE531; sets accumulator to 1, 2, 3, 4 or 5, then jumps to 0xDD0E
ROM3:5D27 3E 01            ld   a,01
ROM3:5D29 18 E3            jr   5D0E
ROM3:5D2B 3E 02            ld   a,02
ROM3:5D2D 18 DF            jr   5D0E
ROM3:5D2F 3E 03            ld   a,03
ROM3:5D31 18 DB            jr   5D0E
ROM3:5D33 3E 04            ld   a,04
ROM3:5D35 18 D7            jr   5D0E
ROM3:5D37 3E 05            ld   a,05
ROM3:5D39 18 D3            jr   5D0E
  • 0xDD3B-0xDD53 - Stores pointer to the Booster pack array in register bc
ROM3:5D3B F5               push af
ROM3:5D3C 21 1A D6         ld   hl,D61A
ROM3:5D3F 86               add  (hl)
ROM3:5D40 3C               inc  a		// a = valueFromFunc0xDD5A + (D61A) + 1
ROM3:5D41 FE 20            cp   a,20
ROM3:5D43 30 0F            jr   nc,5D54		// If(a == 0x20), jump to 3:5D54
ROM3:5D45 C1               pop  bc
ROM3:5D46 3D               dec  a
ROM3:5D47 21 1E D6         ld   hl,D61E
ROM3:5D4A 85               add  l
ROM3:5D4B 6F               ld   l,a
ROM3:5D4C 30 01            jr   nc,5D4F
ROM3:5D4E 24               inc  h
ROM3:5D4F 2A               ldi  a,(hl)
ROM3:5D50 46               ld   b,(hl)
ROM3:5D51 4F               ld   c,a		// Store pointer to the array in BC
ROM3:5D52 B0               or   b
ROM3:5D53 C9               ret  
  • 0xDD54-0xDD59 - (from Func0xDD3B) If(valueFromFunc0xDD5A + (D61A) + 1 == 20)
ROM3:5D54 CD DB 5B         call 5BDB		// If(a == 0x20), call 3:5BDB
ROM3:5D57 F1               pop  af
ROM3:5D58 18 E1            jr   5D3B
  • 0xDD5A-0xDD64 - Sets accumulator to 1, 2 or 3, then jumps to 0xDD3B
ROM3:5D5A 3E 01            ld   a,01
ROM3:5D5C 18 DD            jr   5D3B
ROM3:5D5E 3E 02            ld   a,02
ROM3:5D60 18 D9            jr   5D3B
ROM3:5D62 3E 03            ld   a,03
ROM3:5D64 18 D5            jr   5D3B

Awards Booster packs

  • 0xE531-0xE5B2 - Gives Booster packs to the player
ROM3:6531 CD 5A 5D         call 5D5A		// Stores Booster packs array in register bc
ROM3:6534 69               ld   l,c
ROM3:6535 60               ld   h,b
ROM3:6536 2A               ldi  a,(hl)
ROM3:6537 FE 00            cp   a,00
ROM3:6539 28 0B            jr   z,6546		// If fixed Booster pack, jump to 3:6546
ROM3:653B FE 01            cp   a,01
ROM3:653D 28 23            jr   z,6562		// If random Booster pack, jump to 3:6562
ROM3:653F FE 02            cp   a,02
ROM3:6541 28 15            jr   z,6558		// If random number of random Booster packs, jump to 3:6558
ROM3:6543 C3 2F 5D         jp   5D2F		// Fail-safe, jump to 3:5D2F, (D61A) += 3, (D61B) += 3
ROM3:6546 E5               push hl
ROM3:6547 AF               xor  a
ROM3:6548 4F               ld   c,a
ROM3:6549 2A               ldi  a,(hl)		// Load next Booster pack ID
ROM3:654A FE FF            cp   a,FF
ROM3:654C 28 03            jr   z,6551		// If the Booster array has been fully read, jump to 3:6551
ROM3:654E 0C               inc  c
ROM3:654F 18 F8            jr   6549
ROM3:6551 E1               pop  hl
ROM3:6552 79               ld   a,c
ROM3:6553 EA 67 D6         ld   (D667),a
ROM3:6556 18 62            jr   65BA
ROM3:6558 2A               ldi  a,(hl)		// Load max number of Booster packs
ROM3:6559 CD 5A 08         call 085A		// Pseudo-Random Number between 0 and max number of Booster packs array - 1
ROM3:655C 3C               inc  a		// a++
ROM3:655D EA 67 D6         ld   (D667),a	// Store number of Booster packs to be awarded in (D667)
ROM3:6560 18 04            jr   6566		// Jump to 3:6566 (random Booster pack)
ROM3:6562 2A               ldi  a,(hl)		// Load number of Booster packs to be awarded from the array at 0xCDD3
ROM3:6563 EA 67 D6         ld   (D667),a	// Store number of Booster packs to be awarded in (D667)
ROM3:6566 11 4E D6         ld   de,D64E
ROM3:6569 AF               xor  a
ROM3:656A 4F               ld   c,a
ROM3:656B 2A               ldi  a,(hl)		// Load next Booster pack ID
ROM3:656C FE FF            cp   a,FF
ROM3:656E 28 05            jr   z,6575		// If the Booster array has been fully read, jump to 3:6575
ROM3:6570 12               ld   (de),a		// Store Booster pack ID in (D64E) + current iteration
ROM3:6571 13               inc  de
ROM3:6572 0C               inc  c
ROM3:6573 18 F6            jr   656B
ROM3:6575 79               ld   a,c
ROM3:6576 EA 5E D6         ld   (D65E),a
ROM3:6579 11 5F D6         ld   de,D65F
ROM3:657C FA 67 D6         ld   a,(D667)
ROM3:657F 4F               ld   c,a
ROM3:6580 FA 5E D6         ld   a,(D65E)
ROM3:6583 CD 5A 08         call 085A		// Pseudo-Random Number between 0 and (D65E)-1
ROM3:6586 21 4E D6         ld   hl,D64E
ROM3:6589 85               add  l
ROM3:658A 6F               ld   l,a
ROM3:658B 30 01            jr   nc,658E
ROM3:658D 24               inc  h
ROM3:658E 7E               ld   a,(hl)
ROM3:658F 12               ld   (de),a		// Store Booster pack to be awarded in (D65F) + current iteration
ROM3:6590 13               inc  de
ROM3:6591 0D               dec  c
ROM3:6592 20 EC            jr   nz,6580
ROM3:6594 FA 67 D6         ld   a,(D667)
ROM3:6597 4F               ld   c,a
ROM3:6598 FA 67 D6         ld   a,(D667)
ROM3:659B 47               ld   b,a
ROM3:659C 21 5F D6         ld   hl,D65F
ROM3:659F 11 5F D6         ld   de,D65F
ROM3:65A2 13               inc  de
ROM3:65A3 05               dec  b
ROM3:65A4 28 0E            jr   z,65B4
ROM3:65A6 1A               ld   a,(de)
ROM3:65A7 BE               cp   (hl)
ROM3:65A8 38 06            jr   c,65B0
ROM3:65AA 1A               ld   a,(de)
ROM3:65AB F5               push af
ROM3:65AC 7E               ld   a,(hl)
ROM3:65AD 12               ld   (de),a
ROM3:65AE F1               pop  af
ROM3:65AF 77               ld   (hl),a
ROM3:65B0 23               inc  hl
ROM3:65B1 13               inc  de
ROM3:65B2 18 EF            jr   65A3
  • 0xE5B4-0xE5BA - Loops the random Booster pack generation
ROM3:65B4 0D               dec  c
ROM3:65B5 20 E1            jr   nz,6598
ROM3:65B7 21 5F D6         ld   hl,D65F
ROM3:65BA EF               rst  28

Bank 6

Cards in Booster pack (to document)

  • 0x1AD41-0x1AD80 - ?
ROM6:6D41 E5               push hl
ROM6:6D42 D5               push de
ROM6:6D43 11 9F 38         ld   de,389F
ROM6:6D46 CD BB 1F         call 1FBB
ROM6:6D49 D1               pop  de
ROM6:6D4A CD 0A 2D         call 2D0A
ROM6:6D4D CD 78 30         call 3078
ROM6:6D50 3E 30            ld   a,30
ROM6:6D52 CD 62 30         call 3062
ROM6:6D55 3E C2            ld   a,C2
ROM6:6D57 E0 99            ld   (ff00+99),a	// (FF99) = 0xC2
ROM6:6D59 E1               pop  hl
ROM6:6D5A EF               rst  28
ROM6:6D5B 09               add  hl,bc
ROM6:6D5C 58               ld   e,b
ROM6:6D5D 41               ld   b,c
ROM6:6D5E CD 67 30         call 3067
ROM6:6D61 B7               or   a
ROM6:6D62 20 FA            jr   nz,6D5E
ROM6:6D64 CD 7D 30         call 307D
ROM6:6D67 DF               rst  18
ROM6:6D68 FA 53 C9         ld   a,(C953)
ROM6:6D6B EF               rst  28
ROM6:6D6C 09               add  hl,bc
ROM6:6D6D DA 57            db   DA,57
ROM6:6D6F CD 81 6D         call 6D81
ROM6:6D72 21 00 C4         ld   hl,C400
ROM6:6D75 5E               ld   e,(hl)
ROM6:6D76 23               inc  hl
ROM6:6D77 56               ld   d,(hl)
ROM6:6D78 23               inc  hl
ROM6:6D79 7B               ld   a,e
ROM6:6D7A B2               or   d
ROM6:6D7B C8               ret  z
ROM6:6D7C CD 50 1B         call 1B50
ROM6:6D7F 18 F4            jr   6D75
  • 0x1AD81-0x1ADA1 - Stores number of cards in current Booster pack in (C510)
ROM6:6D81 3E C2            ld   a,C2
ROM6:6D83 E0 99            ld   (ff00+99),a	// (FF99) = 0xC2
ROM6:6D85 67               ld   h,a
ROM6:6D86 2E 00            ld   l,00		// hl = 0xC200
ROM6:6D88 AF               xor  a		// Start of the loop, 00s (C200) to (C23C)
ROM6:6D89 22               ldi  (hl),a
ROM6:6D8A 7D               ld   a,l
ROM6:6D8B FE 3C            cp   a,3C
ROM6:6D8D 38 F9            jr   c,6D88		// End of the loop
ROM6:6D8F 21 00 C4         ld   hl,C400
ROM6:6D92 11 10 C5         ld   de,C510
ROM6:6D95 0E 00            ld   c,00
ROM6:6D97 2A               ldi  a,(hl)		// Start of the loop, load next card in Booster pack
ROM6:6D98 B6               or   (hl)
ROM6:6D99 23               inc  hl		// hl++
ROM6:6D9A 28 06            jr   z,6DA2		// If end of the array, jump to 6:6DA2
ROM6:6D9C 79               ld   a,c
ROM6:6D9D 12               ld   (de),a		// Store current iteration in (C510 + current iteration)
ROM6:6D9E 13               inc  de
ROM6:6D9F 0C               inc  c
ROM6:6DA0 18 F5            jr   6D97		// End of the loop
  • 0x1ADA2-0x1ADB1 - ?
ROM6:6DA2 3E FF            ld   a,FF
ROM6:6DA4 12               ld   (de),a		// Store FF in (C510 + c)
ROM6:6DA5 DF               rst  18
ROM6:6DA6 78               ld   a,b
ROM6:6DA7 42               ld   b,d
ROM6:6DA8 DF               rst  18
ROM6:6DA9 2A               ldi  a,(hl)
ROM6:6DAA 52               ld   d,d
ROM6:6DAB 21 58 00         ld   hl,0058
ROM6:6DAE 11 3C 02         ld   de,023C
ROM6:6DB1 DF               rst  18

Bank 9

Save Battle State in SRAM - subroutine

ROM9:4017 E5               push hl
ROM9:4018 C5               push bc
ROM9:4019 4E               ld   c,(hl)
ROM9:401A 23               inc  hl
ROM9:401B 46               ld   b,(hl)
ROM9:401C 23               inc  hl
ROM9:401D E1               pop  hl
ROM9:401E CD 0C 07         call 070C		// Copy Battle State in SRAM
ROM9:4021 E1               pop  hl
ROM9:4022 23               inc  hl
ROM9:4023 23               inc  hl
ROM9:4024 18 E9            jr   400F
ROM9:4026 E1               pop  hl
ROM9:4027 11 45 23         ld   de,2345
ROM9:402A 01 52 03         ld   bc,0352
ROM9:402D 7B               ld   a,e
ROM9:402E 96               sub  (hl)
ROM9:402F 5F               ld   e,a
ROM9:4030 2A               ldi  a,(hl)
ROM9:4031 AA               xor  d
ROM9:4032 57               ld   d,a
ROM9:4033 0B               dec  bc
ROM9:4034 79               ld   a,c
ROM9:4035 B0               or   b
ROM9:4036 20 F5            jr   nz,402D
ROM9:4038 E1               pop  hl
ROM9:4039 3E 01            ld   a,01
ROM9:403B 22               ldi  (hl),a
ROM9:403C 73               ld   (hl),e
ROM9:403D 23               inc  hl
ROM9:403E 72               ld   (hl),d
ROM9:403F 23               inc  hl
ROM9:4040 FA 02 CC         ld   a,(CC02)
ROM9:4043 77               ld   (hl),a
ROM9:4044 CD 8E 07         call 078E
ROM9:4047 C9               ret

WRAM pointer and amount of bytes to be copied to SRAM

ROM9:4084
00 C2 - (C200)
10 03 - 784 bytes

Cards in Booster pack

Add cards in Booster pack ?

  • 0x257D4-0x25811 - ?
ROM9:57D4 13               inc  de
ROM9:57D5 13               inc  de
ROM9:57D6 13               inc  de
ROM9:57D7 13               inc  de
ROM9:57D8 15               dec  d
ROM9:57D9 15               dec  d
ROM9:57DA 5F               ld   e,a
ROM9:57DB 87               add  a
ROM9:57DC 83               add  e
ROM9:57DD 87               add  a
ROM9:57DE 5F               ld   e,a
ROM9:57DF 16 00            ld   d,00
ROM9:57E1 21 4E 58         ld   hl,584E
ROM9:57E4 19               add  hl,de
ROM9:57E5 46               ld   b,(hl)
ROM9:57E6 23               inc  hl
ROM9:57E7 4E               ld   c,(hl)
ROM9:57E8 23               inc  hl
ROM9:57E9 11 00 C4         ld   de,C400
ROM9:57EC 3E 02            ld   a,02		// Fossil
ROM9:57EE CD 12 58         call 5812
ROM9:57F1 3E 01            ld   a,01		// Jungle
ROM9:57F3 CD 12 58         call 5812
ROM9:57F6 3E 00            ld   a,00		// Base Set
ROM9:57F8 CD 12 58         call 5812
ROM9:57FB 3E FF            ld   a,FF		// Promo
ROM9:57FD CD 12 58         call 5812
ROM9:5800 AF               xor  a
ROM9:5801 12               ld   (de),a		// Stores cards in Booster pack in (C400)
ROM9:5802 13               inc  de
ROM9:5803 12               ld   (de),a
ROM9:5804 21 10 C5         ld   hl,C510
ROM9:5807 0E 0A            ld   c,0A
ROM9:5809 AF               xor  a
ROM9:580A 22               ldi  (hl),a
ROM9:580B 3C               inc  a
ROM9:580C 0D               dec  c
ROM9:580D 20 FB            jr   nz,580A
ROM9:580F 36 FF            ld   (hl),FF
ROM9:5811 C9               ret  

Store Expansion in HRAM

ROM9:5812 E0 98            ld   (ff00+98),a
ROM9:5814 2A               ldi  a,(hl)		// Loads value from the array at 0x25850
ROM9:5815 B7               or   a
ROM9:5816 C8               ret  z		// Return If(a == 0)

Adds cards in Booster pack

  • 0x25817-0x2584D - Generates cards in Booster pack
ROM9:5817 2B               dec  hl
ROM9:5818 C5               push bc
ROM9:5819 D5               push de
ROM9:581A E5               push hl
ROM9:581B F0 98            ld   a,(ff00+98)	// a = card Expansion
ROM9:581D CD A2 58         call 58A2
ROM9:5820 E1               pop  hl
ROM9:5821 D1               pop  de
ROM9:5822 C1               pop  bc
ROM9:5823 2A               ldi  a,(hl)
ROM9:5824 E5               push hl
ROM9:5825 C5               push bc
ROM9:5826 4F               ld   c,a
ROM9:5827 C5               push bc
ROM9:5828 21 10 C5         ld   hl,C510
ROM9:582B FA 54 CD         ld   a,(CD54)
ROM9:582E CD 5A 08         call 085A		// Pseudo-Random Number between 0 and (CD54) - 1
ROM9:5831 6F               ld   l,a
ROM9:5832 26 00            ld   h,00
ROM9:5834 29               add  hl,hl
ROM9:5835 01 00 C0         ld   bc,C000
ROM9:5838 09               add  hl,bc
ROM9:5839 2A               ldi  a,(hl)
ROM9:583A B6               or   (hl)
ROM9:583B 2B               dec  hl
ROM9:583C 28 ED            jr   z,582B
ROM9:583E 2A               ldi  a,(hl)
ROM9:583F 12               ld   (de),a		// Stores cards in Booster pack in (C400)
ROM9:5840 13               inc  de
ROM9:5841 7E               ld   a,(hl)
ROM9:5842 12               ld   (de),a
ROM9:5843 13               inc  de
ROM9:5844 AF               xor  a
ROM9:5845 32               ldd  (hl),a
ROM9:5846 77               ld   (hl),a
ROM9:5847 C1               pop  bc
ROM9:5848 0D               dec  c
ROM9:5849 20 DC            jr   nz,5827
ROM9:584B C1               pop  bc
ROM9:584C E1               pop  hl
ROM9:584D C9               ret

Array ?

  • 0x25850-0x258A0 - Array ?
01 03 05 01 01 01 01 03 05 01 02 02 01 03 05 01
03 03 01 03 06 00 04 04 01 03 06 00 05 05 01 03
06 00 06 06 01 03 06 00 00 07 0A 00 00 00 00 00
00 00 00 0A 00 06 01 03 06 00 00 04 01 03 06 00
03 06 01 03 06 00 05 06 01 03 06 00 00 06 02 03
05 00

Special handlers for Promo and GB cards ?

  • 0x258A2-0x258BB - Special handlers for Promo and GB cards ?
ROM9:58A2 FE FF            cp   a,FF
ROM9:58A4 28 49            jr   z,58EF		// If((FF98) == 0xFF), jump to 9:58EF
ROM9:58A6 FE FE            cp   a,FE
ROM9:58A8 28 40            jr   z,58EA		// If((FF98) == 0xFE), jump to 9:58EA
ROM9:58AA 21 51 CD         ld   hl,CD51
ROM9:58AD 22               ldi  (hl),a		// a = (CD51)
ROM9:58AE 70               ld   (hl),b		// b = (CD52)
ROM9:58AF 23               inc  hl
ROM9:58B0 71               ld   (hl),c		// c = (CD53)
ROM9:58B1 AF               xor  a		// a = 0
ROM9:58B2 EA 54 CD         ld   (CD54),a	// a = (CD54)
ROM9:58B5 11 00 00         ld   de,0000		// de = 0
ROM9:58B8 21 00 C0         ld   hl,C000		// hl = 0xC000
ROM9:58BB 18 1E            jr   58DB

Cards of specified Rarity and Expansion

  • 0x258BD-0x258E9 - Loads cards pool of specified Rarity used to generate Booster pack
ROM9:58BD E5               push hl
ROM9:58BE 21 51 CD         ld   hl,CD51
ROM9:58C1 78               ld   a,b
ROM9:58C2 BE               cp   (hl)
ROM9:58C3 20 17            jr   nz,58DC		// If(Rarity ≠ (CD51)), jump to 9:58DC (next Card ID)
ROM9:58C5 23               inc  hl
ROM9:58C6 79               ld   a,c
ROM9:58C7 BE               cp   (hl)
ROM9:58C8 28 08            jr   z,58D2		// If(Booster ID = (CD52)), jump to 9:58D2
ROM9:58CA 38 10            jr   c,58DC		// ElseIf(Booster ID < (CD52)), jump to 9:58DC (next Card ID)
ROM9:58CC 23               inc  hl
ROM9:58CD BE               cp   (hl)
ROM9:58CE 28 02            jr   z,58D2		// If(Booster ID = (CD53)), jump to 9:58D2
ROM9:58D0 30 0A            jr   nc,58DC		// ElseIf(Booster ID ≥ (CD53)), jump to 9:58DC (next Card ID)
ROM9:58D2 21 54 CD         ld   hl,CD54
ROM9:58D5 34               inc  (hl)		// (CD54)++
ROM9:58D6 E1               pop  hl
ROM9:58D7 73               ld   (hl),e		// Stores card ID to (C000 + current iteration ×2)
ROM9:58D8 23               inc  hl
ROM9:58D9 72               ld   (hl),d
ROM9:58DA 23               inc  hl
ROM9:58DB E5               push hl
ROM9:58DC 13               inc  de		// Card ID++
ROM9:58DD CD 70 2D         call 2D70		// Loads card data
ROM9:58E0 E1               pop  hl
ROM9:58E1 30 DA            jr   nc,58BD		// If no carry, loop to 58BD
ROM9:58E3 AF               xor  a		// a = 0
ROM9:58E4 22               ldi  (hl),a
ROM9:58E5 77               ld   (hl),a
ROM9:58E6 FA 54 CD         ld   a,(CD54)
ROM9:58E9 C9               ret

GB and Promo cards

  • 0x258EA-0x258EE - GB cards ?
ROM9:58EA 21 22 59         ld   hl,5922
ROM9:58ED 18 03            jr   58F2
  • 0x258EF-0x25907 - Promo cards ?
ROM9:58EF 21 08 59         ld   hl,5908
ROM9:58F2 0E 00            ld   c,00
ROM9:58F4 11 00 C0         ld   de,C000
ROM9:58F7 2A               ldi  a,(hl)
ROM9:58F8 47               ld   b,a
ROM9:58F9 12               ld   (de),a		// Stores cards pool to (C000)
ROM9:58FA 13               inc  de
ROM9:58FB 2A               ldi  a,(hl)
ROM9:58FC 12               ld   (de),a
ROM9:58FD 13               inc  de
ROM9:58FE 0C               inc  c
ROM9:58FF B0               or   b
ROM9:5900 20 F5            jr   nz,58F7
ROM9:5902 79               ld   a,c
ROM9:5903 3D               dec  a
ROM9:5904 EA 54 CD         ld   (CD54),a
ROM9:5907 C9               ret

Lists of cards?

  • 0x25908-0x25921 - 2 repetitions of basic energy cards? (terminated by 0x0000)
Card ID   Card Name
-------   ----------------
0001      Grass Energy
0002      Fire Energy
0003      Water Energy
0004      Lightning Energy
0005      Fighting Energy
0006      Psychic Energy
0001      Grass Energy
0002      Fire Energy
0003      Water Energy
0004      Lightning Energy
0005      Fighting Energy
0006      Psychic Energy
  • 0x25922-0x25933 - 2 repetitions of Phantom cards? (terminated by 0x0000)
Card ID   Card Name
-------   -----------------------
0012      Gameboy Venusaur Lv64
0141      Promo Mew Lv15
01BC      Here Comes Team Rocket!
0188      Promo Lugia Lv55
0012      Gameboy Venusaur Lv64
0141      Promo Mew Lv15
01BC      Here Comes Team Rocket!
0188      Promo Lugia Lv55

These lists indicate that the GB/Promo distinction suggested above may actually be Energy/Phantom.

Bank 17

Unknown list of cards

  • 0x44606-0x44617 - List of 1 Pokemon of each type and a trainer card

Might be to do with Black Box (5->1 Trade).

Card ID Card Name
------- ------------------------
0C 00   B-Pack Bulbasaur Lv12
59 00   Rocket Charmander Lv9
7F 00   Rocket Squirtle Lv16
BD 00   Promo Pikachu Lv13
F7 00   Rocket Dark Machoke Lv28
42 01   Fossil Mew Lv23
5E 01   Gameboy Meowth Lv13
BC 01   Here Comes Team Rocket!

Black Box Recipes

  • 0x44618-0x446AF - Table of cards that can be obtained via Black Box recipes, and the offset at where the recipes are stored
  • 0x446B0-0x44785 - A list of recipes for the table above (each one is terminated by 0x0000 and uses between 2 and 4 cards Rare cards)
                                Recipe  
Card                            Offset  Recipe (stored at offset listed)
------------------------------- ------  -----------------------------
P20: Dugtrio Lv40               46B0    E9 00 0A 01 0B 01 00 00 
P21: Mankey Lv7                 46B8    0A 01 0B 01 00 00 
P19: Diglett Lv16               46BE    E9 00 EB 00 00 00 
P04: Moltres Lv40               46C4    63 00 65 00 79 00 00 00 
P03: Arcanine Lv34              46CC    63 00 6B 00 00 00 
A13: (R) Base Charizard Lv76    46D2    60 00 65 00 00 00 
P10: Pikachu Lv13               46D8    C7 00 C8 00 C5 00 C9 00 00 00 
P11: Pikachu Lv16 (Toyota)      46E2    C7 00 C8 00 C5 00 00 00 
P18: Zapdos Lv68                46EA    C7 00 C9 00 E0 00 00 00 
P12: Pikachu Lv16 (CoroCoro)    46F2    D5 00 D6 00 CE 00 D0 00 00 00 
P17: Electabuzz Lv20            46FC    DA 00 CF 00 CE 00 D0 00 00 00 
P08: Articuno Lv37              4706    8F 00 9D 00 B8 00 00 00 
P06: Magikarp Lv10              470E    AB 00 AC 00 00 00 
P05: Blastoise Lv52             4714    85 00 AC 00 00 00 
P01: Venusaur Lv67              471A    39 00 15 00 00 00 
P30: GR's Mewtwo Lv35           4720    42 01 3A 01 3E 01 00 00 
P29: Mewtwo Lv60 (CoroCoro)     4728    42 01 3E 01 00 00 
P28: Mewtwo Lv60 (FanBook)      472E    42 01 3A 01 00 00 
P27: Mewtwo Lv30                4734    3A 01 3E 01 00 00 
P25: Slowpoke Lv9               473A    1B 01 2C 01 35 01 00 00 
P43: Super Energy Retrieval     4742    8F 00 81 01 00 00 
P34: Dark Persian Lv28          4748    6E 01 56 01 5B 01 00 00 
P32: Jigglypuff Lv12            4750    6E 01 54 01 00 00 
P36: Kangaskhan Lv38            4756    71 01 81 01 00 00 
P35: Farfetch'd Lv20            475C    47 01 54 01 74 01 00 00 
P39: Dragonite Lv41             4764    85 01 86 01 81 01 00 00 
B52: (R) Fossil Dragonite Lv45  476C    85 01 86 01 83 01 00 00 
P33: Meowth Lv14                4774    74 01 7C 01 00 00 
P38: Hungry Snorlax Lv50        477A    7C 01 7D 01 00 00 
P37: Cool Porygon Lv15          4780    74 01 56 01 00 00 
  • 0x44786-0x447AF - A list of promo cards (covers all of promos not listed above, with a few inconsistencies) (terminated by 0x0000)
Card ID   Card Name                    Method to obtain
-------   --------------------------   -------------------
12 00     Gameboy Venusaur Lv64        CardPop!
BA 00     Promo Marill Lv17            Ishihara…
B6 00     Promo Omastar Lv36           Bill's Computer
01 01     Promo Golem Lv37             Bill's Computer
F8 00     Promo Machamp Lv54           Bill's Computer
1C 01     Promo Alakazam Lv45          Bill's Computer
2D 01     Promo Gengar Lv40            Bill's Computer
39 01     Promo Mewtwo Lv30            CHALLENGE CUP 1st
41 01     Promo Mew Lv15               CardPop!
40 01     Promo Mew Lv8                COIN TOSS GAME
C3 00     Promo Surfing Pikachu Lv13   Ishihara…
C4 00     Promo Surfing Pikachu Lv13   Ishihara…
C1 00     Promo Flying Pikachu Lv12    Ishihara…
C2 00     Promo Flying Pikachu Lv12    Ishihara…
84 01     Promo Dragonite Lv43         Benefactor…
87 01     Promo Togepi Lv8             Ishihara…
88 01     Promo Lugia Lv55             CardPop!
BC 01     Here Comes Team Rocket!      CardPop!
8A 01     Imakuni?                     Imakuni?
A2 01     Computer Error               Rival…
  • 0x448DE-0x44928 - Seems to be the list of cards that can be won from the Grand Master's Cup
Card ID   Card Name
-------   ---------------------------
69 00     Promo Arcanine Lv34
BF 00     Promo Pikachu Lv16
C0 00     Promo Pikachu Lv16
C3 00     Promo Surfing Pikachu Lv13
C4 00     Promo Surfing Pikachu Lv13
D8 00     Promo Electabuzz Lv20
1E 01     Promo Slowpoke Lv9
3D 01     Promo Mewtwo Lv60
3C 01     Promo Mewtwo Lv60
40 01     Promo Mew Lv8
58 01     Promo Jigglypuff Lv12
C1 00     Promo Flying Pikachu Lv12
C2 00     Promo Flying Pikachu Lv12
64 01     Promo Dark Persian Lv28
5F 01     Promo Meowth Lv14
7B 01     Promo Cool Porygon Lv15
7E 01     Promo Snorlax Lv50
14 00     Promo Venusaur Lv67
5F 00     Promo Charizard Lv76
84 00     Promo Blastoise Lv52
39 01     Promo Mewtwo Lv30
BD 00     Promo Pikachu Lv13
66 01     Promo Farfetch'd Lv20
70 01     Promo Kangaskhan Lv38
E8 00     Promo Diglett Lv16
EA 00     Promo Dugtrio Lv40
84 01     Promo Dragonite Lv43
AA 00     Promo Magikarp Lv10
87 01     Promo Togepi Lv8
BA 00     Promo Marill Lv17
ED 00     Promo Mankey Lv7
A2 01     Computer Error!
98 01     Super Energy Retrieval
7B 00     Promo Moltres Lv40
B9 00     Promo Articuno Lv37
E1 00     Promo Zapdos Lv68
83 01     Promo Dragonite Lv41

Bank 23

Cards Data

  • 0x5C430-0x62A69 - Cards Data array
Size    Description
----    -----------
   1    Card Type
   1    ?
   1    ?
   2    Species pointer
   1    Rarity
   1    Expansion
   1    Booster
   2    Card ID
   1    Hit Points
   1    Card Category
   2    Evolves from (Species pointer)
   4    Attack #1 cost
   1    Attack #1 damage
   4    Attack #2 cost
   1    Attack #2 damage
   1    Retreat Cost
   1    Weakness
   1    Resistance
   1    Pokédex ID
   1    Level