Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

Yu-Gi-Oh! Worldwide Edition: Stairway to the Destined Duel/ROM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
Line 21: Line 21:
  080008AA 4846    ldr    r0,=0C0Fh                              ;9  4770
  080008AA 4846    ldr    r0,=0C0Fh                              ;9  4770
  080008AC 4681    mov    r9,r0                                  ;2  4772
  080008AC 4681    mov    r9,r0                                  ;2  4772
  080008AE 4C46    ldr    r4,=8372FBAh                            ;9  4781
  080008AE 4C46    ldr    r4,=8372FBAh                            ;r4 = pointer_to_in_game_text
  080008B0 2009    mov    r0,9h                                  ;2  4783
  080008B0 2009    mov    r0,9h                                  ;2  4783
  080008B2 2109    mov    r1,9h                                  ;2  4785
  080008B2 2109    mov    r1,9h                                  ;2  4785

Revision as of 07:01, 12 September 2022

Chip tiny.png The following article is a ROM map for Yu-Gi-Oh! Worldwide Edition: Stairway to the Destined Duel.

0x884 (load CPU deck ?)

08000884 0105     lsl     r5,r0,4h                                ;2  4659
08000886 0000     lsl     r0,r0,0h                                ;2  4661
08000888 0307     lsl     r7,r0,0Ch                               ;2  4663
0800088A 0000     lsl     r0,r0,0h                                ;2  4665
0800088C B5F0     push    r4-r7,r14                               ;26 4691
0800088E 4657     mov     r7,r10                                  ;2  4693
08000890 464E     mov     r6,r9                                   ;2  4695
08000892 4645     mov     r5,r8                                   ;2  4697
08000894 B4E0     push    r5-r7                                   ;18 4715
08000896 4849     ldr     r0,=5000200h                            ;9  4724
08000898 4949     ldr     r1,=8385104h                            ;9  4733
0800089A 468A     mov     r10,r1                                  ;2  4735
0800089C 2220     mov     r2,20h                                  ;2  4737
0800089E F088F9F7 bl      8088C90h                                ;10 4747
080008A2 2020     mov     r0,20h                                  ;2  4749
080008A4 2110     mov     r1,10h                                  ;2  4751
080008A6 F087FD0F bl      80882C8h                                ;10 4761
080008AA 4846     ldr     r0,=0C0Fh                               ;9  4770
080008AC 4681     mov     r9,r0                                   ;2  4772
080008AE 4C46     ldr     r4,=8372FBAh                            ;r4 = pointer_to_in_game_text
080008B0 2009     mov     r0,9h                                   ;2  4783
080008B2 2109     mov     r1,9h                                   ;2  4785
080008B4 464A     mov     r2,r9                                   ;2  4787
080008B6 1C23     mov     r3,r4                                   ;2  4789
080008B8 F087FFA4 bl      8088804h                                ;10 4799
080008BC 4943     ldr     r1,=0C07h                               ;9  4808
080008BE 4688     mov     r8,r1                                   ;2  4810
080008C0 2008     mov     r0,8h                                   ;2  4812
080008C2 2108     mov     r1,8h                                   ;2  4814
080008C4 4642     mov     r2,r8                                   ;2  4816
080008C6 1C23     mov     r3,r4                                   ;2  4818
080008C8 F087FF9C bl      8088804h                                ;10 4828
080008CC 4E40     ldr     r6,=0C01h                               ;9  4837
080008CE 2073     mov     r0,73h                                  ;2  4839
080008D0 210B     mov     r1,0Bh                                  ;2  4841
080008D2 1C32     mov     r2,r6                                   ;2  4843
080008D4 1C23     mov     r3,r4                                   ;2  4845
080008D6 F087FF95 bl      8088804h                                ;10 4855
080008DA 4D3E     ldr     r5,=0C0Dh                               ;9  4864
080008DC 2072     mov     r0,72h                                  ;2  4866
080008DE 210A     mov     r1,0Ah                                  ;2  4868
080008E0 1C2A     mov     r2,r5                                   ;2  4870
080008E2 1C23     mov     r3,r4                                   ;2  4872
080008E4 F087FF8E bl      8088804h                                ;10 4882
080008E8 340A     add     r4,0Ah                                  ;2  4884
080008EA 2001     mov     r0,1h                                   ;2  4886
080008EC 2129     mov     r1,29h                                  ;2  4888
080008EE 464A     mov     r2,r9                                   ;2  4890
080008F0 1C23     mov     r3,r4                                   ;2  4892
080008F2 F087FF87 bl      8088804h                                ;10 4902
080008F6 2000     mov     r0,0h                                   ;2  4904
080008F8 2128     mov     r1,28h                                  ;2  4906
080008FA 4642     mov     r2,r8                                   ;2  4908
080008FC 1C23     mov     r3,r4                                   ;2  4910
080008FE F087FF81 bl      8088804h                                ;10 4920
08000902 2069     mov     r0,69h                                  ;2  4922
08000904 212B     mov     r1,2Bh                                  ;2  4924
08000906 1C32     mov     r2,r6                                   ;2  4926
08000908 1C23     mov     r3,r4                                   ;2  4928
0800090A F087FF7B bl      8088804h                                ;10 4938
0800090E 2068     mov     r0,68h                                  ;2  4940
08000910 212A     mov     r1,2Ah                                  ;2  4942
08000912 1C2A     mov     r2,r5                                   ;2  4944
08000914 1C23     mov     r3,r4                                   ;2  4946
08000916 F087FF75 bl      8088804h                                ;10 4956
0800091A 482F     ldr     r0,=6014000h                            ;9  4965
0800091C 2100     mov     r1,0h                                   ;2  4967
0800091E F088F89B bl      8088A58h                                ;10 4977
08000922 24A0     mov     r4,0A0h                                 ;2  4979
08000924 04E4     lsl     r4,r4,13h                               ;2  4981
08000926 1C20     mov     r0,r4                                   ;2  4983
08000928 4651     mov     r1,r10                                  ;2  4985
0800092A 2220     mov     r2,20h                                  ;2  4987
0800092C F088F9A2 bl      8088C74h                                ;10 4997
08000930 2000     mov     r0,0h                                   ;2  4999
08000932 8020     strh    r0,[r4]                                 ;5  5004
08000934 4B29     ldr     r3,=8A9E708h                            ;9  5013
08000936 2000     mov     r0,0h                                   ;2  5015
08000938 2110     mov     r1,10h                                  ;2  5017
0800093A 2220     mov     r2,20h                                  ;2  5019
0800093C F085FBF2 bl      8086124h                                ;10 5029
08000940 2080     mov     r0,80h                                  ;2  5031
08000942 00C0     lsl     r0,r0,3h                                ;2  5033
08000944 4B26     ldr     r3,=8A9F8DCh                            ;9  5042
08000946 2120     mov     r1,20h                                  ;2  5044
08000948 22A0     mov     r2,0A0h                                 ;2  5046
0800094A F085FBEB bl      8086124h                                ;10 5056
0800094E 2480     mov     r4,80h                                  ;2  5058
08000950 0124     lsl     r4,r4,4h                                ;2  5060
08000952 2294     mov     r2,94h                                  ;2  5062
08000954 0052     lsl     r2,r2,1h                                ;2  5064
08000956 4B23     ldr     r3,=8AA0BECh                            ;9  5073
08000958 1C20     mov     r0,r4                                   ;2  5075
0800095A 2130     mov     r1,30h                                  ;2  5077
0800095C F085FBE2 bl      8086124h                                ;10 5087
08000960 22AE     mov     r2,0AEh                                 ;2  5089
08000962 0052     lsl     r2,r2,1h                                ;2  5091
08000964 4B20     ldr     r3,=8AA1214h                            ;9  5100
08000966 1C20     mov     r0,r4                                   ;2  5102
08000968 2140     mov     r1,40h                                  ;2  5104
0800096A F085FBDB bl      8086124h                                ;10 5114
0800096E 2400     mov     r4,0h                                   ;2  5116
08000970 271F     mov     r7,1Fh                                  ;2  5118
08000972 26F8     mov     r6,0F8h                                 ;2  5120
08000974 00B6     lsl     r6,r6,2h                                ;2  5122
08000976 25F8     mov     r5,0F8h                                 ;2  5124
08000978 01ED     lsl     r5,r5,7h                                ;2  5126
0800097A 0063     lsl     r3,r4,1h                                ;2  5128
0800097C 481B     ldr     r0,=5000180h                            ;9  5137
0800097E 181B     add     r3,r3,r0                                ;2  5139
08000980 8819     ldrh    r1,[r3]                                 ;4  5143
08000982 221F     mov     r2,1Fh                                  ;2  5145
08000984 400A     and     r2,r1                                   ;2  5147
08000986 1C08     mov     r0,r1                                   ;2  5149
08000988 4030     and     r0,r6                                   ;2  5151
0800098A 4029     and     r1,r5                                   ;2  5153
0800098C 0852     lsr     r2,r2,1h                                ;2  5155
0800098E 403A     and     r2,r7                                   ;2  5157
08000990 0840     lsr     r0,r0,1h                                ;2  5159
08000992 4030     and     r0,r6                                   ;2  5161
08000994 0849     lsr     r1,r1,1h                                ;2  5163
08000996 4029     and     r1,r5                                   ;2  5165
08000998 4302     orr     r2,r0                                   ;2  5167
0800099A 4311     orr     r1,r2                                   ;2  5169
0800099C 8019     strh    r1,[r3]                                 ;5  5174
0800099E 3401     add     r4,1h                                   ;2  5176
080009A0 2C0F     cmp     r4,0Fh                                  ;2  5178
080009A2 DDEA     ble     800097Ah                                ;8  5186
080009A4 4812     ldr     r0,=3004876h                            ;9  5195
080009A6 4913     ldr     r1,=8228570h                            ;9  5204
080009A8 2220     mov     r2,20h                                  ;2  5206
080009AA F088F963 bl      8088C74h                                ;10 5216
080009AE BC38     pop     r3-r5                                   ;17 5233
080009B0 4698     mov     r8,r3                                   ;2  5235
080009B2 46A1     mov     r9,r4                                   ;2  5237
080009B4 46AA     mov     r10,r5                                  ;2  5239
080009B6 BCF0     pop     r4-r7                                   ;21 5260
080009B8 BC01     pop     r0                                      ;9  5269
080009BA 4700     bx      r0                                      ;8  5277

Cards stats

Display card ATK

0800FC50 B570     push    r4-r6,r14                       ;
0800FC52 0400     lsl     r0,r0,10h                       ;
0800FC54 0C04     lsr     r4,r0,10h                       ;
0800FC56 0409     lsl     r1,r1,10h                       ;
0800FC58 0C0D     lsr     r5,r1,10h                       ;
0800FC5A 0412     lsl     r2,r2,10h                       ;
0800FC5C 0C16     lsr     r6,r2,10h                       ;
0800FC5E F7FFFFED bl      800FC3Ch                        ;
0800FC62 4809     ldr     r0,=2013E00h                    ;
0800FC64 8044     strh    r4,[r0,2h]                      ;r4 = card_id
0800FC66 4809     ldr     r0,=7FFh                        ;
0800FC68 4020     and     r0,r4                           ;
0800FC6A 0080     lsl     r0,r0,2h                        ;Ensures card_id < 2048
0800FC6C 4908     ldr     r1,=8832B84h                    ;
0800FC6E 1840     add     r0,r0,r1                        ;r0 = 0x8832B84 + ((card_ID & 0x7FF) << 2)
0800FC70 6800     ldr     r0,[r0]                         ;r0 = [compressed_card_data_array]
0800FC72 21F8     mov     r1,0F8h                         ;
0800FC74 0449     lsl     r1,r1,11h                       ;
0800FC76 4008     and     r0,r1                           ;r0 &= 0x1F00000
0800FC78 0D00     lsr     r0,r0,14h                       ;r0 >> 20
0800FC7A 2815     cmp     r0,15h                          ;
0800FC7C DB0F     blt     800FC9Eh                        ;if (card_type < 0x15 [is a monster card]), branch to 0x800FC9E
0800FC7E 2817     cmp     r0,17h                          ;
0800FC80 DD08     ble     800FC94h                        ;if (card_type ≤ 0x17 [is not a monster card]), branch to 0x800FC94
0800FC82 2818     cmp     r0,18h                          ;
0800FC84 D008     beq     800FC98h                        ;if (card_type == DIVINE_BEAST), branch to 0x800FC98
0800FC86 E00A     b       800FC9Eh                        ;else branch to 0x800FC9E (default for Monster cards)
0800FC88 3E00     sub     r6,0h                           ;
0800FC8A 0201     lsl     r1,r0,8h                        ;
0800FC8C 07FF     lsl     r7,r7,1Fh                       ;
0800FC8E 0000     lsl     r0,r0,0h                        ;
0800FC90 2B84     cmp     r3,84h                          ;
0800FC92 0883     lsr     r3,r0,2h                        ;
0800FC94 2000     mov     r0,0h                           ;if (card_type ≤ 0x17 [is not a monster card]), ATK = 0
0800FC96 E00D     b       800FCB4h                        ;branch to 0x800FCB4 (store 0 into [0x02013E2C])
0800FC98 20FA     mov     r0,0FAh                         ;if (card_type == DIVINE_BEAST) ...
0800FC9A 0100     lsl     r0,r0,4h                        ;ATK = 4000
0800FC9C E00A     b       800FCB4h                        ;branch to 0x800FCB4 (store 4000 into [0x02013E2C])
0800FC9E 480F     ldr     r0,=7FFh                        ;if (card_type < 0x15 [is a monster card])
0800FCA0 4020     and     r0,r4                           ;Ensures card_id < 2048
0800FCA2 0080     lsl     r0,r0,2h                        ;r0 = (card_id & 0x7FF) << 2
0800FCA4 4B0E     ldr     r3,=8832B84h                    ;
0800FCA6 18C0     add     r0,r0,r3                        ;r0 = 0x8832B84 + ((0x7FF & card_ID) << 2)
0800FCA8 6801     ldr     r1,[r0]                         ;r1 = [compressed_card_data_array]
0800FCAA 0389     lsl     r1,r1,0Eh                       ;
0800FCAC 0DC9     lsr     r1,r1,17h                       ;
0800FCAE 0088     lsl     r0,r1,2h                        ;
0800FCB0 1840     add     r0,r0,r1                        ;
0800FCB2 0040     lsl     r0,r0,1h                        ;r0 = DWORD(((r1 << 14 >> 23 << 2) + (r1 << 14 >> 23)) << 1)
0800FCB4 4A0B     ldr     r2,=2013E00h                    ;
0800FCB6 62D0     str     r0,[r2,2Ch]                     ;Store card ATK into [0x02013E2C]
0800FCB8 4808     ldr     r0,=7FFh                        ;
0800FCBA 4020     and     r0,r4                           ;
0800FCBC 0080     lsl     r0,r0,2h                        ;
0800FCBE 4908     ldr     r1,=8832B84h                    ;
0800FCC0 1840     add     r0,r0,r1                        ;r0 = 0x8832B84 + ((r0 & r4) << 2)
0800FCC2 6800     ldr     r0,[r0]                         ;
0800FCC4 21F8     mov     r1,0F8h                         ;
0800FCC6 0449     lsl     r1,r1,11h                       ;r1 = 0x1F00000
0800FCC8 4008     and     r0,r1                           ;r0  &= r1
0800FCCA 0D00     lsr     r0,r0,14h                       ;r0 >>= 20
0800FCCC 2815     cmp     r0,15h                          ;
0800FCCE DB10     blt     800FCF2h                        ;if (card_type < 0x15), branch to 0x800FCF2
0800FCD0 2817     cmp     r0,17h                          ;
0800FCD2 DD09     ble     800FCE8h                        ;if (card_type ≤ 0x17), branch to 0x800FCE8
0800FCD4 2818     cmp     r0,18h                          ;
0800FCD6 D009     beq     800FCECh                        ;if (card_type == DIVINE_BEAST), branch to 0x800FCEC
0800FCD8 E00B     b       800FCF2h                        ;else branch to 0x800FCF2 (default for Monster cards)
0800FCDA 0000     lsl     r0,r0,0h                        ;

? (CPU deck ?)

? (calls the super long routine)

08067BFE 2000     mov     r0,0h                                   ;r0 = 0
08067C00 4680     mov     r8,r0                                   ;r8 = 0
08067C02 4919     ldr     r1,=2018FE4h                            ;
08067C04 2001     mov     r0,1h                                   ;r0 = 1
08067C06 464A     mov     r2,r9                                   ;r2 = r9
08067C08 4010     and     r0,r2                                   ;r0 & r2
08067C0A 4A18     ldr     r2,=0D64h                               ;r2 = 0xD64
08067C0C 4350     mul     r0,r2                                   ;r0 ×= r2
08067C0E 1840     add     r0,r0,r1                                ;r0 += r1
08067C10 78C0     ldrb    r0,[r0,3h]                              ;r0 = [r0 + 3]
08067C12 4580     cmp     r8,r0                                   ;
08067C14 DB01     blt     8067C1Ah                                ;if (r8 < [r0 + 3]), branch to the Super-long routine checking a lot of card IDs in the deck
08067C16 F000FD46 bl      80686A6h                                ;

Super-long routine checking cards in the deck

08067C1A 4C15     ldr     r4,=7FFh                                ;
08067C1C 1C27     mov     r7,r4                                   ;r7 = 0x7FF
08067C1E 23F8     mov     r3,0F8h                                 ;
08067C20 045B     lsl     r3,r3,11h                               ;
08067C22 2001     mov     r0,1h                                   ;
08067C24 4649     mov     r1,r9                                   ;
08067C26 4008     and     r0,r1                                   ;
08067C28 4644     mov     r4,r8                                   ;
08067C2A 00A1     lsl     r1,r4,2h                                ;
08067C2C 4350     mul     r0,r2                                   ;
08067C2E 1809     add     r1,r1,r0                                ;
08067C30 4810     ldr     r0,=20197A8h                            ;r0 = pointer_to_player_deck_during_duel
08067C32 1809     add     r1,r1,r0                                ;r1 = pointer_to_player_deck_during_duel + pointer_position_in_player_deck
08067C34 6808     ldr     r0,[r1]                                 ;r0 = card_id
08067C36 0500     lsl     r0,r0,14h                               ;
08067C38 0D06     lsr     r6,r0,14h                               ;
08067C3A 1C31     mov     r1,r6                                   ;r1 = card_id
08067C3C 4039     and     r1,r7                                   ;r1 & 0x7FF (ensures card_id < 2048)
08067C3E 0088     lsl     r0,r1,2h                                ;r0 = card_id << 2
08067C40 4C0D     ldr     r4,=8832B84h                            ;r4 = pointer_to_card_stats_array
08067C42 1902     add     r2,r0,r4                                ;
08067C44 6810     ldr     r0,[r2]                                 ;r0 = card_stats
08067C46 4018     and     r0,r3                                   ;
08067C48 0D00     lsr     r0,r0,14h                               ;r0 = card_type
08067C4A 2815     cmp     r0,15h                                  ;
08067C4C D01A     beq     8067C84h                                ;if (card_type == TRAP), branch to 08067C84
08067C4E 2816     cmp     r0,16h                                  ;
08067C50 D100     bne     8067C54h                                ;if (card_type ≠ MAGIC), branch to 08067C54
08067C52 E128     b       8067EA6h                                ;else if (card_type == MAGIC), branch to 08067EA6
08067C54 0048     lsl     r0,r1,1h                                ;...if (card_type ≠ TRAP && card_type ≠ MAGIC), r0 = current_card_id << 1
08067C56 4909     ldr     r1,=8833C80h                            ;r1 = pointer_to_internal_cards_ids_array
08067C58 1840     add     r0,r0,r1                                ;r0 = pointer_to_internal_cards_ids_array + (current_card_id << 1)
08067C5A 8801     ldrh    r1,[r0]                                 ;r1 = internal_card_id
08067C5C 4808     ldr     r0,=776h                                ;
08067C5E 4281     cmp     r1,r0                                   ;
08067C60 D000     beq     8067C64h                                ;if (r1 == 0d1910 [Obelisk the Tormentor in DM6, unused]), branch to 08067C64
08067C62 E20D     b       8068080h                                ;else branch to 08068080
08067C64 2003     mov     r0,3h                                   ;r0 = 3
08067C66 E238     b       80680DAh                                ;branch to 080680DA
08067C68 8FE4     ldrh    r4,[r4,3Eh]                             ;
08067C6A 0201     lsl     r1,r0,8h                                ;
08067C6C 0D64     lsr     r4,r4,15h                               ;
08067C6E 0000     lsl     r0,r0,0h                                ;
08067C70 07FF     lsl     r7,r7,1Fh                               ;
08067C72 0000     lsl     r0,r0,0h                                ;
08067C74 97A8     str     r7,[sp,2A0h]                            ;
08067C76 0201     lsl     r1,r0,8h                                ;
08067C78 2B84     cmp     r3,84h                                  ;
08067C7A 0883     lsr     r3,r0,2h                                ;
08067C7C 3C80     sub     r4,80h                                  ;
08067C7E 0883     lsr     r3,r0,2h                                ;
08067C80 0776     lsl     r6,r6,1Dh                               ;
08067C82 0000     lsl     r0,r0,0h                                ;
08067C84 6968     ldr     r0,[r5,14h]                             ;...if (card_type == TRAP)
08067C86 3001     add     r0,1h                                   ;
08067C88 6168     str     r0,[r5,14h]                             ;increment number of Trap cards in the deck stored in IWRAM
08067C8A 6811     ldr     r1,[r2]                                 ;r1 = [r2]
08067C8C 1C08     mov     r0,r1                                   ;r0 = r1
08067C8E 4018     and     r0,r3                                   ;
08067C90 0D00     lsr     r0,r0,14h                               ;
08067C92 2816     cmp     r0,16h                                  ;
08067C94 DC06     bgt     8067CA4h                                ;
08067C96 2815     cmp     r0,15h                                  ;
08067C98 DB04     blt     8067CA4h                                ;
08067C9A 20E0     mov     r0,0E0h                                 ;
08067C9C 0300     lsl     r0,r0,0Ch                               ;r0 = 0x1C00000
08067C9E 4001     and     r1,r0                                   ;r1 &= r0
08067CA0 0C48     lsr     r0,r1,11h                               ;r0 = r1 >> 17
08067CA2 E000     b       8067CA6h                                ;branch to 08067CA6
08067CA4 2000     mov     r0,0h                                   ;
08067CA6 2803     cmp     r0,3h                                   ;
08067CA8 D009     beq     8067CBEh                                ;if (r0 == 3), branch to 08067CBE
08067CAA 2803     cmp     r0,3h                                   ;
08067CAC DC02     bgt     8067CB4h                                ;if (r0 > 3), branch to 08067CB4
08067CAE 2802     cmp     r0,2h                                   ;
08067CB0 D00D     beq     8067CCEh                                ;if (r0 == 2), branch to 08067CCE
08067CB2 E013     b       8067CDCh                                ;else branch to 08067CDC
08067CB4 2804     cmp     r0,4h                                   ;
08067CB6 D006     beq     8067CC6h                                ;if (r0 == 4), branch to 08067CC6
08067CB8 2805     cmp     r0,5h                                   ;
08067CBA D00C     beq     8067CD6h                                ;if (r0 == 5), branch to 08067CD6
08067CBC E00E     b       8067CDCh                                ;else branch to 08067CDC
08067CBE 6A28     ldr     r0,[r5,20h]                             ;
08067CC0 3001     add     r0,1h                                   ;
08067CC2 6228     str     r0,[r5,20h]                             ;[r5 + 0x20]++
08067CC4 E00A     b       8067CDCh                                ;branch to 08067CDC
08067CC6 69E8     ldr     r0,[r5,1Ch]                             ;
08067CC8 3001     add     r0,1h                                   ;
08067CCA 61E8     str     r0,[r5,1Ch]                             ;[r5 + 0x1C]++
08067CCC E006     b       8067CDCh                                ;branch to 08067CDC
08067CCE 6A68     ldr     r0,[r5,24h]                             ;
08067CD0 3001     add     r0,1h                                   ;
08067CD2 6268     str     r0,[r5,24h]                             ;[r5 + 0x24]++
08067CD4 E002     b       8067CDCh                                ;branch to 08067CDC
08067CD6 6AA8     ldr     r0,[r5,28h]                             ;
08067CD8 3001     add     r0,1h                                   ;
08067CDA 62A8     str     r0,[r5,28h]                             ;[r5 + 0x28]++
08067CDC 403E     and     r6,r7                                   ;current_card_id &= 0x7FF
08067CDE 0070     lsl     r0,r6,1h                                ;r0 = current_card_id << 1
08067CE0 4A0F     ldr     r2,=8833C80h                            ;r2 = pointer_to_internal_cards_ids_array
08067CE2 1880     add     r0,r0,r2                                ;r0 = pointer_to_internal_cards_ids_array + (current_card_id << 1)
08067CE4 8801     ldrh    r1,[r0]                                 ;r1 = internal_card_id
08067CE6 480F     ldr     r0,=40Eh                                ;r0 = 0x40E [0d1038]
08067CE8 4281     cmp     r1,r0                                   ;
08067CEA D101     bne     8067CF0h                                ;if (internal_card_id ≠ 0d1038 [Magic Thorns]), branch to 08067CF0
08067CEC F000FCB2 bl      8068654h                                ;else call 0x8068654
08067CF0 4281     cmp     r1,r0                                   ;
08067CF2 DC5F     bgt     8067DB4h                                ;if (internal_card_id > 0d1038), branch to 08067DB4
08067CF4 3845     sub     r0,45h                                  ;r0 = 0x3C9 [0d969]
08067CF6 4281     cmp     r1,r0                                   ;
08067CF8 D100     bne     8067CFCh                                ;if (internal_card_id ≠ 0d969 [Chain Destruction]), branch to 08067CFC
08067CFA E1B9     b       8068070h                                ;else branch to 08068070
08067CFC 4281     cmp     r1,r0                                   ;
08067CFE DC2D     bgt     8067D5Ch                                ;if (internal_card_id > 0d969), branch to 08067D5C
08067D00 4809     ldr     r0,=2ADh                                ;r0 = 0x2AD [0d685]
08067D02 4281     cmp     r1,r0                                   ;
08067D04 D100     bne     8067D08h                                ;if (internal_card_id ≠ 0d685 [Widespread Ruin]), branch to 08067D08
08067D06 E1B3     b       8068070h                                ;else branch to 08068070
08067D08 4281     cmp     r1,r0                                   ;
08067D0A DC13     bgt     8067D34h                                ;if (internal_card_id > 0d685), branch to 08067D34
08067D0C 381C     sub     r0,1Ch                                  ;
08067D0E 4281     cmp     r1,r0                                   ;
08067D10 D101     bne     8067D16h                                ;if (internal_card_id ≠ 0d657 [Metalmorph]), branch to 08067D16
08067D12 F000FC94 bl      806863Eh                                ;else branch to 0806863E
08067D16 4281     cmp     r1,r0                                   ;
08067D18 DC08     bgt     8067D2Ch                                ;if (internal_card_id > 0d657), branch to 08067D2C
08067D1A 20AE     mov     r0,0AEh                                 ;else r0 = 0xAE
08067D1C 0040     lsl     r0,r0,1h                                ;r0 << 1 [0x15C ; 0d348 ; Spellbinding Circle]
08067D1E E083     b       8067E28h                                ;branch to 08067E28
08067D20 3C80     sub     r4,80h                                  ;-
08067D22 0883     lsr     r3,r0,2h                                ;-
08067D24 040E     lsl     r6,r1,10h                               ;-
08067D26 0000     lsl     r0,r0,0h                                ;-
08067D28 02AD     lsl     r5,r5,0Ah                               ;-
08067D2A 0000     lsl     r0,r0,0h                                ;-
08067D2C 4800     ldr     r0,=2A9h                                ;... if (internal_card_id > 0d657), r0 = 0x2A9 [0d681 ; Eatgaboon]
08067D2E E031     b       8067D94h                                ;branch to 08067D94
08067D30 02A9     lsl     r1,r5,0Ah                               ;-
08067D32 0000     lsl     r0,r0,0h                                ;-
08067D34 4804     ldr     r0,=3ABh                                ;... if (internal_card_id > 0d685), r0 = 0x3AB [0d939 ; Bell of Destruction]
08067D36 4281     cmp     r1,r0                                   ;
08067D38 D101     bne     8067D3Eh                                ;if (internal_card_id ≠ 0d939 [Bell of Destruction]), branch to 08067D3E
08067D3A F000FC8B bl      8068654h                                ;else call 08068654
08067D3E 4281     cmp     r1,r0                                   ;
08067D40 DC04     bgt     8067D4Ch                                ;if (internal_card_id > 0d939), branch to 08067D4C
08067D42 38FA     sub     r0,0FAh                                 ;r0 = 0d689 [Fake Trap in DM6, unused]
08067D44 E070     b       8067E28h                                ;branch to 08067E28
08067D46 0000     lsl     r0,r0,0h                                ;-
08067D48 03AB     lsl     r3,r5,0Eh                               ;-
08067D4A 0000     lsl     r0,r0,0h                                ;-
08067D4C 4802     ldr     r0,=3B1h                                ;... if (internal_card_id > 0d939), r0 = 0x3B1 [0d945, Magical Hats]
08067D4E 4281     cmp     r1,r0                                   ;
08067D50 D100     bne     8067D54h                                ;if (internal_card_id ≠ 0d945 [Magical Hats]), branch to 08067D54
08067D52 E18D     b       8068070h                                ;else branch to 08068070
08067D54 300F     add     r0,0Fh                                  ;r0 = 0x3C0 [0d960, Negate Attack]
08067D56 E067     b       8067E28h                                ;branch to 08067E28
08067D58 03B1     lsl     r1,r6,0Eh                               ;
08067D5A 0000     lsl     r0,r0,0h                                ;
08067D5C 4806     ldr     r0,=3FBh                                ;... if (internal_card_id > 0d969), r0 = 0x3FB [0d1019, White Hole]
08067D5E 4281     cmp     r1,r0                                   ;
08067D60 D100     bne     8067D64h                                ;
08067D62 E185     b       8068070h                                ;
08067D64 4281     cmp     r1,r0                                   ;
08067D66 DC0D     bgt     8067D84h                                ;
08067D68 3811     sub     r0,11h                                  ;
08067D6A 4281     cmp     r1,r0                                   ;
08067D6C D100     bne     8067D70h                                ;
08067D6E E17F     b       8068070h                                ;
08067D70 4281     cmp     r1,r0                                   ;
08067D72 DC03     bgt     8067D7Ch                                ;
08067D74 380C     sub     r0,0Ch                                  ;
08067D76 E057     b       8067E28h                                ;
08067D78 03FB     lsl     r3,r7,0Fh                               ;
08067D7A 0000     lsl     r0,r0,0h                                ;
08067D7C 20FE     mov     r0,0FEh                                 ;
08067D7E 0080     lsl     r0,r0,2h                                ;
08067D80 F000FBCF bl      8068522h                                ;call 08068522
08067D84 4808     ldr     r0,=407h                                ;[0d1031, Horn of Heaven]
08067D86 4281     cmp     r1,r0                                   ;
08067D88 DC10     bgt     8067DACh                                ;
08067D8A 3803     sub     r0,3h                                   ;
08067D8C 4281     cmp     r1,r0                                   ;
08067D8E DB00     blt     8067D92h                                ;
08067D90 E16E     b       8068070h                                ;branch to 08068070
08067D92 3806     sub     r0,6h                                   ;
08067D94 4281     cmp     r1,r0                                   ;
08067D96 DD01     ble     8067D9Ch                                ;
08067D98 F000FC77 bl      806868Ah                                ;call 0806868A
08067D9C 3801     sub     r0,1h                                   ;
08067D9E 4281     cmp     r1,r0                                   ;
08067DA0 DA01     bge     8067DA6h                                ;
08067DA2 F000FC72 bl      806868Ah                                ;call 0806868A
08067DA6 E163     b       8068070h                                ;
08067DA8 0407     lsl     r7,r0,10h                               ;
08067DAA 0000     lsl     r0,r0,0h                                ;
08067DAC 4800     ldr     r0,=409h                                ;[0d1033, Royal Decree]
08067DAE E03B     b       8067E28h                                ;branch to 08067E28
08067DB0 0409     lsl     r1,r1,10h                               ;
08067DB2 0000     lsl     r0,r0,0h                                ;
08067DB4 480A     ldr     r0,=49Ah                                ;[0d1178, Aqua Chorus]
08067DB6 4281     cmp     r1,r0                                   ;
08067DB8 D101     bne     8067DBEh                                ;
08067DBA F000FC40 bl      806863Eh                                ;
08067DBE 4281     cmp     r1,r0                                   ;
08067DC0 DC3A     bgt     8067E38h                                ;
08067DC2 3853     sub     r0,53h                                  ;
08067DC4 4281     cmp     r1,r0                                   ;
08067DC6 D101     bne     8067DCCh                                ;
08067DC8 F000FC50 bl      806866Ch                                ;
08067DCC 4281     cmp     r1,r0                                   ;
08067DCE DC13     bgt     8067DF8h                                ;
08067DD0 3821     sub     r0,21h                                  ;
08067DD2 4281     cmp     r1,r0                                   ;
08067DD4 D100     bne     8067DD8h                                ;
08067DD6 E14B     b       8068070h                                ;
08067DD8 4281     cmp     r1,r0                                   ;
08067DDA DC03     bgt     8067DE4h                                ;
08067DDC 3806     sub     r0,6h                                   ;
08067DDE E023     b       8067E28h                                ;
08067DE0 049A     lsl     r2,r3,12h                               ;
08067DE2 0000     lsl     r0,r0,0h                                ;
08067DE4 4803     ldr     r0,=43Ah                                ;[0d1082, Snake Fang]
08067DE6 4281     cmp     r1,r0                                   ;
08067DE8 D101     bne     8067DEEh                                ;
08067DEA F000FC28 bl      806863Eh                                ;
08067DEE 300A     add     r0,0Ah                                  ;
08067DF0 F000FC06 bl      8068600h                                ;
08067DF4 043A     lsl     r2,r7,10h                               ;
08067DF6 0000     lsl     r0,r0,0h                                ;
08067DF8 4807     ldr     r0,=475h                                ;[0d1141, Appropriate]
08067DFA 4281     cmp     r1,r0                                   ;
08067DFC D101     bne     8067E02h                                ;
08067DFE F000FC39 bl      8068674h                                ;
08067E02 4281     cmp     r1,r0                                   ;
08067E04 DC0A     bgt     8067E1Ch                                ;
08067E06 382B     sub     r0,2Bh                                  ;
08067E08 4281     cmp     r1,r0                                   ;
08067E0A D101     bne     8067E10h                                ;
08067E0C F000FC1E bl      806864Ch                                ;
08067E10 302A     add     r0,2Ah                                  ;
08067E12 F000FBF5 bl      8068600h                                ;
08067E16 0000     lsl     r0,r0,0h                                ;
08067E18 0475     lsl     r5,r6,11h                               ;
08067E1A 0000     lsl     r0,r0,0h                                ;
08067E1C 4805     ldr     r0,=47Bh                                ;[0d1147, Backup Soldier]
08067E1E 4281     cmp     r1,r0                                   ;
08067E20 D101     bne     8067E26h                                ;
08067E22 F000FC23 bl      806866Ch                                ;
08067E26 3007     add     r0,7h                                   ;
08067E28 4281     cmp     r1,r0                                   ;
08067E2A D100     bne     8067E2Eh                                ;
08067E2C E120     b       8068070h                                ;
08067E2E F000FC2C bl      806868Ah                                ;call 0806868A
08067E32 0000     lsl     r0,r0,0h                                ;
08067E34 047B     lsl     r3,r7,11h                               ;
08067E36 0000     lsl     r0,r0,0h                                ;
08067E38 4807     ldr     r0,=519h                                ;[0d1305, Solemn Wishes]
08067E3A 4281     cmp     r1,r0                                   ;
08067E3C D101     bne     8067E42h                                ;
08067E3E F000FC05 bl      806864Ch                                ;
08067E42 4281     cmp     r1,r0                                   ;
08067E44 DC14     bgt     8067E70h                                ;
08067E46 3804     sub     r0,4h                                   ;
08067E48 4281     cmp     r1,r0                                   ;
08067E4A D100     bne     8067E4Eh                                ;
08067E4C E110     b       8068070h                                ;
08067E4E 4281     cmp     r1,r0                                   ;
08067E50 DC04     bgt     8067E5Ch                                ;
08067E52 3857     sub     r0,57h                                  ;
08067E54 F000FBCB bl      80685EEh                                ;
08067E58 0519     lsl     r1,r3,14h                               ;
08067E5A 0000     lsl     r0,r0,0h                                ;
08067E5C 4803     ldr     r0,=516h                                ;[0d1302, Minor Goblin Official]
08067E5E 4281     cmp     r1,r0                                   ;
08067E60 D101     bne     8067E66h                                ;
08067E62 F000FBF7 bl      8068654h                                ;
08067E66 3002     add     r0,2h                                   ;
08067E68 E3C1     b       80685EEh                                ;
08067E6A 0000     lsl     r0,r0,0h                                ;
08067E6C 0516     lsl     r6,r2,14h                               ;
08067E6E 0000     lsl     r0,r0,0h                                ;
08067E70 4806     ldr     r0,=5A7h                                ;[0d1447, Jar of Greed]
08067E72 4281     cmp     r1,r0                                   ;
08067E74 D101     bne     8067E7Ah                                ;
08067E76 F000FBFD bl      8068674h                                ;
08067E7A 4281     cmp     r1,r0                                   ;
08067E7C DC08     bgt     8067E90h                                ;
08067E7E 388D     sub     r0,8Dh                                  ;
08067E80 4281     cmp     r1,r0                                   ;
08067E82 D101     bne     8067E88h                                ;
08067E84 F000FBE6 bl      8068654h                                ;
08067E88 3012     add     r0,12h                                  ;
08067E8A E3B0     b       80685EEh                                ;
08067E8C 05A7     lsl     r7,r4,16h                               ;
08067E8E 0000     lsl     r0,r0,0h                                ;
08067E90 20BF     mov     r0,0BFh                                 ;
08067E92 00C0     lsl     r0,r0,3h                                ;
08067E94 4281     cmp     r1,r0                                   ;
08067E96 D100     bne     8067E9Ah                                ;
08067E98 E0EE     b       8068078h                                ;
08067E9A 3003     add     r0,3h                                   ;
08067E9C 4281     cmp     r1,r0                                   ;
08067E9E D001     beq     8067EA4h                                ;
08067EA0 F000FBF3 bl      806868Ah                                ;call 0806868A
08067EA4 E0E4     b       8068070h                                ;branch to 08068070
08067EA6 6928     ldr     r0,[r5,10h]                             ;...if (card_type == MAGIC)
08067EA8 3001     add     r0,1h                                   ;
08067EAA 6128     str     r0,[r5,10h]                             ;increment number of Magic cards in the deck stored in IWRAM
08067EAC 6811     ldr     r1,[r2]                                 ;
08067EAE 1C08     mov     r0,r1                                   ;
08067EB0 4018     and     r0,r3                                   ;
08067EB2 0D00     lsr     r0,r0,14h                               ;
08067EB4 2816     cmp     r0,16h                                  ;
08067EB6 DC06     bgt     8067EC6h                                ;
08067EB8 2815     cmp     r0,15h                                  ;
08067EBA DB04     blt     8067EC6h                                ;
08067EBC 20E0     mov     r0,0E0h                                 ;
08067EBE 0300     lsl     r0,r0,0Ch                               ;
08067EC0 4001     and     r1,r0                                   ;
08067EC2 0C48     lsr     r0,r1,11h                               ;
08067EC4 E000     b       8067EC8h                                ;
08067EC6 2000     mov     r0,0h                                   ;
08067EC8 2803     cmp     r0,3h                                   ;
08067ECA D009     beq     8067EE0h                                ;
08067ECC 2803     cmp     r0,3h                                   ;
08067ECE DC02     bgt     8067ED6h                                ;
08067ED0 2802     cmp     r0,2h                                   ;
08067ED2 D00D     beq     8067EF0h                                ;
08067ED4 E013     b       8067EFEh                                ;
08067ED6 2804     cmp     r0,4h                                   ;
08067ED8 D006     beq     8067EE8h                                ;
08067EDA 2805     cmp     r0,5h                                   ;
08067EDC D00C     beq     8067EF8h                                ;
08067EDE E00E     b       8067EFEh                                ;
08067EE0 6A28     ldr     r0,[r5,20h]                             ;
08067EE2 3001     add     r0,1h                                   ;
08067EE4 6228     str     r0,[r5,20h]                             ;
08067EE6 E00A     b       8067EFEh                                ;
08067EE8 69E8     ldr     r0,[r5,1Ch]                             ;
08067EEA 3001     add     r0,1h                                   ;
08067EEC 61E8     str     r0,[r5,1Ch]                             ;
08067EEE E006     b       8067EFEh                                ;
08067EF0 6A68     ldr     r0,[r5,24h]                             ;
08067EF2 3001     add     r0,1h                                   ;
08067EF4 6268     str     r0,[r5,24h]                             ;
08067EF6 E002     b       8067EFEh                                ;
08067EF8 6AA8     ldr     r0,[r5,28h]                             ;
08067EFA 3001     add     r0,1h                                   ;
08067EFC 62A8     str     r0,[r5,28h]                             ;
08067EFE 403E     and     r6,r7                                   ;
08067F00 0070     lsl     r0,r6,1h                                ;
08067F02 4C11     ldr     r4,=8833C80h                            ;r4 = pointer_to_internal_cards_ids_array
08067F04 1900     add     r0,r0,r4                                ;
08067F06 8801     ldrh    r1,[r0]                                 ;
08067F08 4810     ldr     r0,=40Dh                                ;[0d1037, Exile of the Wicked]
08067F0A 4281     cmp     r1,r0                                   ;
08067F0C DC5F     bgt     8067FCEh                                ;
08067F0E 3801     sub     r0,1h                                   ;
08067F10 4281     cmp     r1,r0                                   ;
08067F12 DB00     blt     8067F16h                                ;
08067F14 E3A2     b       806865Ch                                ;
08067F16 480E     ldr     r0,=297h                                ;[0d663, Eternal Draught]
08067F18 4281     cmp     r1,r0                                   ;
08067F1A DC29     bgt     8067F70h                                ;
08067F1C 3802     sub     r0,2h                                   ;
08067F1E 4281     cmp     r1,r0                                   ;
08067F20 DB00     blt     8067F24h                                ;
08067F22 E39B     b       806865Ch                                ;
08067F24 20AD     mov     r0,0ADh                                 ;
08067F26 0040     lsl     r0,r0,1h                                ;
08067F28 4281     cmp     r1,r0                                   ;
08067F2A DC13     bgt     8067F54h                                ;
08067F2C 3804     sub     r0,4h                                   ;
08067F2E 4281     cmp     r1,r0                                   ;
08067F30 DB00     blt     8067F34h                                ;
08067F32 E38F     b       8068654h                                ;
08067F34 3807     sub     r0,7h                                   ;
08067F36 4281     cmp     r1,r0                                   ;
08067F38 DA00     bge     8067F3Ch                                ;
08067F3A E3A6     b       806868Ah                                ;branch to 0806868A
08067F3C 3001     add     r0,1h                                   ;
08067F3E 4281     cmp     r1,r0                                   ;
08067F40 DC00     bgt     8067F44h                                ;
08067F42 E38B     b       806865Ch                                ;
08067F44 E382     b       806864Ch                                ;
08067F46 0000     lsl     r0,r0,0h                                ;
08067F48 3C80     sub     r4,80h                                  ;
08067F4A 0883     lsr     r3,r0,2h                                ;
08067F4C 040D     lsl     r5,r1,10h                               ;
08067F4E 0000     lsl     r0,r0,0h                                ;
08067F50 0297     lsl     r7,r2,0Ah                               ;
08067F52 0000     lsl     r0,r0,0h                                ;
08067F54 4803     ldr     r0,=28Fh                                ;[0d655, Eternal Rest]
08067F56 4281     cmp     r1,r0                                   ;
08067F58 D100     bne     8067F5Ch                                ;
08067F5A E37F     b       806865Ch                                ;
08067F5C 4281     cmp     r1,r0                                   ;
08067F5E DC03     bgt     8067F68h                                ;
08067F60 3803     sub     r0,3h                                   ;[0d652, Warrior Elimination]
08067F62 E32A     b       80685BAh                                ;
08067F64 028F     lsl     r7,r1,0Ah                               ;
08067F66 0000     lsl     r0,r0,0h                                ;
08067F68 4800     ldr     r0,=293h                                ;[0d659, Stain Storm]
08067F6A E326     b       80685BAh                                ;
08067F6C 0293     lsl     r3,r2,0Ah                               ;
08067F6E 0000     lsl     r0,r0,0h                                ;
08067F70 4806     ldr     r0,=3EEh                                ;[0d1006, Blue Medicine]
08067F72 4281     cmp     r1,r0                                   ;
08067F74 D100     bne     8067F78h                                ;
08067F76 E369     b       806864Ch                                ;
08067F78 4281     cmp     r1,r0                                   ;
08067F7A DC17     bgt     8067FACh                                ;
08067F7C 3826     sub     r0,26h                                  ;[0d968, Graceful Charity]
08067F7E 4281     cmp     r1,r0                                   ;
08067F80 D100     bne     8067F84h                                ;
08067F82 E377     b       8068674h                                ;
08067F84 4281     cmp     r1,r0                                   ;
08067F86 DC05     bgt     8067F94h                                ;
08067F88 4801     ldr     r0,=29Fh                                ;[0d671, Harpie's Feather Duster]
08067F8A E008     b       8067F9Eh                                ;
08067F8C 03EE     lsl     r6,r5,0Fh                               ;
08067F8E 0000     lsl     r0,r0,0h                                ;
08067F90 029F     lsl     r7,r3,0Ah                               ;
08067F92 0000     lsl     r0,r0,0h                                ;
08067F94 4804     ldr     r0,=3E9h                                ;[0d1001, Fissure]
08067F96 4281     cmp     r1,r0                                   ;
08067F98 D100     bne     8067F9Ch                                ;
08067F9A E35F     b       806865Ch                                ;
08067F9C 3003     add     r0,3h                                   ;
08067F9E 4281     cmp     r1,r0                                   ;
08067FA0 D100     bne     8067FA4h                                ;
08067FA2 E35F     b       8068664h                                ;
08067FA4 E371     b       806868Ah                                ;branch to 0806868A
08067FA6 0000     lsl     r0,r0,0h                                ;
08067FA8 03E9     lsl     r1,r5,0Fh                               ;
08067FAA 0000     lsl     r0,r0,0h                                ;
08067FAC 20FC     mov     r0,0FCh                                 ;
08067FAE 0080     lsl     r0,r0,2h                                ;
08067FB0 4281     cmp     r1,r0                                   ;
08067FB2 D100     bne     8067FB6h                                ;
08067FB4 E35A     b       806866Ch                                ;
08067FB6 4281     cmp     r1,r0                                   ;
08067FB8 DA00     bge     8067FBCh                                ;
08067FBA E34B     b       8068654h                                ;
08067FBC 3001     add     r0,1h                                   ;
08067FBE 4281     cmp     r1,r0                                   ;
08067FC0 D100     bne     8067FC4h                                ;
08067FC2 E34F     b       8068664h                                ;
08067FC4 3001     add     r0,1h                                   ;
08067FC6 4281     cmp     r1,r0                                   ;
08067FC8 D100     bne     8067FCCh                                ;
08067FCA E353     b       8068674h                                ;
08067FCC E35D     b       806868Ah                                ;branch to 0806868A
08067FCE 2091     mov     r0,91h                                  ;
08067FD0 00C0     lsl     r0,r0,3h                                ;
08067FD2 4281     cmp     r1,r0                                   ;
08067FD4 DC28     bgt     8068028h                                ;
08067FD6 3801     sub     r0,1h                                   ;
08067FD8 4281     cmp     r1,r0                                   ;
08067FDA DB00     blt     8067FDEh                                ;
08067FDC E346     b       806866Ch                                ;
08067FDE 3855     sub     r0,55h                                  ;
08067FE0 4281     cmp     r1,r0                                   ;
08067FE2 D045     beq     8068070h                                ;
08067FE4 4281     cmp     r1,r0                                   ;
08067FE6 DC0F     bgt     8068008h                                ;
08067FE8 380D     sub     r0,0Dh                                  ;
08067FEA 4281     cmp     r1,r0                                   ;
08067FEC D100     bne     8067FF0h                                ;
08067FEE E339     b       8068664h                                ;
08067FF0 4281     cmp     r1,r0                                   ;
08067FF2 DC01     bgt     8067FF8h                                ;
08067FF4 3816     sub     r0,16h                                  ;
08067FF6 E2FA     b       80685EEh                                ;
08067FF8 4802     ldr     r0,=42Bh                                ;[0d1067, Final Destiny]
08067FFA 4281     cmp     r1,r0                                   ;
08067FFC D100     bne     8068000h                                ;
08067FFE E32D     b       806865Ch                                ;
08068000 3002     add     r0,2h                                   ;
08068002 E2E0     b       80685C6h                                ;
08068004 042B     lsl     r3,r5,10h                               ;
08068006 0000     lsl     r0,r0,0h                                ;
08068008 4806     ldr     r0,=434h                                ;[0d1076, The Reliable Guardian]
0806800A 4281     cmp     r1,r0                                   ;
0806800C DC00     bgt     8068010h                                ;
0806800E E316     b       806863Eh                                ;
08068010 3004     add     r0,4h                                   ;
08068012 4281     cmp     r1,r0                                   ;
08068014 DD00     ble     8068018h                                ;
08068016 E338     b       806868Ah                                ;branch to 0806868A
08068018 3801     sub     r0,1h                                   ;
0806801A 4281     cmp     r1,r0                                   ;
0806801C DA00     bge     8068020h                                ;
0806801E E334     b       806868Ah                                ;branch to 0806868A
08068020 E320     b       8068664h                                ;
08068022 0000     lsl     r0,r0,0h                                ;
08068024 0434     lsl     r4,r6,10h                               ;
08068026 0000     lsl     r0,r0,0h                                ;
08068028 4806     ldr     r0,=522h                                ;[0d1314, Limiter Removal]
0806802A 4281     cmp     r1,r0                                   ;
0806802C D100     bne     8068030h                                ;
0806802E E306     b       806863Eh                                ;
08068030 4281     cmp     r1,r0                                   ;
08068032 DC0D     bgt     8068050h                                ;
08068034 386F     sub     r0,6Fh                                  ;
08068036 4281     cmp     r1,r0                                   ;
08068038 D100     bne     806803Ch                                ;
0806803A E300     b       806863Eh                                ;
0806803C 4281     cmp     r1,r0                                   ;
0806803E DC03     bgt     8068048h                                ;
08068040 3818     sub     r0,18h                                  ;
08068042 E2DD     b       8068600h                                ;
08068044 0522     lsl     r2,r4,14h                               ;
08068046 0000     lsl     r0,r0,0h                                ;
08068048 4800     ldr     r0,=4BBh                                ;[0d1211, Thousand Knives]
0806804A E2B6     b       80685BAh                                ;branch to 080685BA
0806804C 04BB     lsl     r3,r7,12h                               ;
0806804E 0000     lsl     r0,r0,0h                                ;
08068050 20C1     mov     r0,0C1h                                 ;
08068052 00C0     lsl     r0,r0,3h                                ;
08068054 4281     cmp     r1,r0                                   ;
08068056 DC04     bgt     8068062h                                ;
08068058 3803     sub     r0,3h                                   ;
0806805A 4281     cmp     r1,r0                                   ;
0806805C DA0C     bge     8068078h                                ;
0806805E 385A     sub     r0,5Ah                                  ;
08068060 E2AB     b       80685BAh                                ;
08068062 4802     ldr     r0,=60Ah                                ;[0d1546, De-Fusion]
08068064 4281     cmp     r1,r0                                   ;
08068066 D100     bne     806806Ah                                ;if (internal_card_id ≠ DE_FUSION), branch to 0806806A (branch to 0806868A)
08068068 E300     b       806866Ch                                ;else, branch to 0806866C
0806806A E30E     b       806868Ah                                ;branch to 0806868A
0806806C 060A     lsl     r2,r1,18h                               ;
0806806E 0000     lsl     r0,r0,0h                                ;
08068070 6AE8     ldr     r0,[r5,2Ch]                             ;
08068072 3001     add     r0,1h                                   ;
08068074 62E8     str     r0,[r5,2Ch]                             ;increment [r5 + 0x2C]
08068076 E308     b       806868Ah                                ;branch to 0806868A
08068078 6E28     ldr     r0,[r5,60h]                             ;
0806807A 3001     add     r0,1h                                   ;
0806807C 6628     str     r0,[r5,60h]                             ;increment [r5 + 0x60]
0806807E E304     b       806868Ah                                ;branch to 0806868A
08068080 4281     cmp     r1,r0                                   ;
08068082 DB05     blt     8068090h                                ;
08068084 20EF     mov     r0,0EFh                                 ;
08068086 00C0     lsl     r0,r0,3h                                ;r0 = [0d1912, The Winged Dragon of Ra in DM6, unused]
08068088 4281     cmp     r1,r0                                   ;
0806808A DC01     bgt     8068090h                                ;if (r1 > 0d1912 [The Winged Dragon of Ra in DM6, unused]), branch to 08068090
0806808C 2001     mov     r0,1h                                   ;r0 = 1
0806808E E024     b       80680DAh                                ;branch to 080680DA
08068090 1C30     mov     r0,r6                                   ;... That's Token monsters, they shouldn't be in the deck
08068092 4038     and     r0,r7                                   ;
08068094 0080     lsl     r0,r0,2h                                ;
08068096 4906     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
08068098 1840     add     r0,r0,r1                                ;
0806809A 6800     ldr     r0,[r0]                                 ;r0 = current_card_stats
0806809C 4018     and     r0,r3                                   ;
0806809E 0D00     lsr     r0,r0,14h                               ;
080680A0 2816     cmp     r0,16h                                  ;
080680A2 D00A     beq     80680BAh                                ;if (card_type == MAGIC), branch to 080680BA
080680A4 2816     cmp     r0,16h                                  ;
080680A6 DC05     bgt     80680B4h                                ;if (card_type == TICKET  || card_type == DIVINE_BEAST), branch to 080680B4
080680A8 2815     cmp     r0,15h                                  ;
080680AA D008     beq     80680BEh                                ;if (card_type == TRAP), branch to 080680BE
080680AC E00B     b       80680C6h                                ;else branch to 080680C6
080680AE 0000     lsl     r0,r0,0h                                ;
080680B0 2B84     cmp     r3,84h                                  ;
080680B2 0883     lsr     r3,r0,2h                                ;
080680B4 2817     cmp     r0,17h                                  ;
080680B6 D004     beq     80680C2h                                ;if (card_type == TICKET), branch to 080680C2
080680B8 E005     b       80680C6h                                ;else branch to 080680C6
080680BA 2007     mov     r0,7h                                   ;...if (card_type == MAGIC), r0 = 7
080680BC E00D     b       80680DAh                                ;branch to 080680DA
080680BE 2008     mov     r0,8h                                   ;...if (card_type == TRAP), r0 = 8
080680C0 E00B     b       80680DAh                                ;branch to 080680DA
080680C2 2009     mov     r0,9h                                   ;...if (card_type == TICKET), r0 = 9
080680C4 E009     b       80680DAh                                ;branch to 080680DA
080680C6 1C30     mov     r0,r6                                   ;...if it is a Monster card
080680C8 4038     and     r0,r7                                   ;
080680CA 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
080680CC 4A06     ldr     r2,=8832B84h                            ;
080680CE 1880     add     r0,r0,r2                                ;r0 = pointer_to_card_stats_array + ((r6 & r7) << 2)
080680D0 6800     ldr     r0,[r0]                                 ;r0 = current_card_stats
080680D2 21C0     mov     r1,0C0h                                 ;
080680D4 0309     lsl     r1,r1,0Ch                               ;
080680D6 4008     and     r0,r1                                   ;r0 & 0xC0000
080680D8 0C80     lsr     r0,r0,12h                               ;r0 >> 18
080680DA 2801     cmp     r0,1h                                   ;
080680DC D011     beq     8068102h                                ;if (monster_category == EFFECT_MONSTER), branch to 08068102
080680DE 2801     cmp     r0,1h                                   ;
080680E0 DC04     bgt     80680ECh                                ;if (monster_category > 1), branch to 080680EC
080680E2 2800     cmp     r0,0h                                   ;
080680E4 D005     beq     80680F2h                                ;if (monster_category == NORMAL_MONSTER), branch to 080680F2
080680E6 E00F     b       8068108h                                ;else branch to 8068108
080680E8 2B84     cmp     r3,84h                                  ;-
080680EA 0883     lsr     r3,r0,2h                                ;-
080680EC 2803     cmp     r0,3h                                   ;
080680EE D004     beq     80680FAh                                ;if (monster_category == RITUAL_MONSTER), branch to 080680FA
080680F0 E00A     b       8068108h                                ;else if (monster_category == FUSION_MONSTER), branch to 8068108
080680F2 6828     ldr     r0,[r5]                                 ;...if (monster_category == NORMAL_MONSTER)
080680F4 3001     add     r0,1h                                   ;
080680F6 6028     str     r0,[r5]                                 ;increment number of Normal Monster cards in the deck stored in IWRAM
080680F8 E006     b       8068108h                                ;branch to 08068108
080680FA 68A8     ldr     r0,[r5,8h]                              ;if (monster_category == RITUAL_MONSTER)
080680FC 3001     add     r0,1h                                   ;
080680FE 60A8     str     r0,[r5,8h]                              ;increments number of Ritual Monster cards in the deck stored in IWRAM
08068100 E002     b       8068108h                                ;branch to 08068108
08068102 6868     ldr     r0,[r5,4h]                              ;...if (monster_category == EFFECT_MONSTER)
08068104 3001     add     r0,1h                                   ;
08068106 6068     str     r0,[r5,4h]                              ;increments number of Effect Monster cards in the deck stored in IWRAM
08068108 1C30     mov     r0,r6                                   ;
0806810A 4038     and     r0,r7                                   ;
0806810C 0040     lsl     r0,r0,1h                                ;r0 = (current_card_id & 0x7FF) << 1
0806810E 4C04     ldr     r4,=8833C80h                            ;r4 = pointer_to_internal_cards_ids_array
08068110 1900     add     r0,r0,r4                                ;r0 = pointer_to_internal_cards_ids_array + ((current_card_id & 0x7FF) << 1)
08068112 8801     ldrh    r1,[r0]                                 ;r1 = internal_card_id 
08068114 4803     ldr     r0,=776h                                ;
08068116 4281     cmp     r1,r0                                   ;
08068118 D106     bne     8068128h                                ;if (internal_card_id ≠ OBELISK_THE_TOURMENTOR), branch to 08068128
0806811A 2003     mov     r0,3h                                   ;r0 = 3
0806811C E031     b       8068182h                                ;branch to 08068182
0806811E 0000     lsl     r0,r0,0h                                ;-
08068120 3C80     sub     r4,80h                                  ;-
08068122 0883     lsr     r3,r0,2h                                ;-
08068124 0776     lsl     r6,r6,1Dh                               ;-
08068126 0000     lsl     r0,r0,0h                                ;-
08068128 4281     cmp     r1,r0                                   ;...if (internal_card_id ≠ OBELISK_THE_TOURMENTOR)
0806812A DB05     blt     8068138h                                ;if (internal_card_id < 1910) [not a God card, not a Token, not an alternate illustration card], branch to 08068138
0806812C 20EF     mov     r0,0EFh                                 ;
0806812E 00C0     lsl     r0,r0,3h                                ;
08068130 4281     cmp     r1,r0                                   ;
08068132 DC01     bgt     8068138h                                ;if (internal_card_id > 1912) [not a God card], branch to 08068138
08068134 2001     mov     r0,1h                                   ;r0 = 1
08068136 E024     b       8068182h                                ;branch to 08068182
08068138 1C30     mov     r0,r6                                   ;...if (internal_card_id < 1910 || internal_card_id > 1912) [not a God card]
0806813A 4038     and     r0,r7                                   ;
0806813C 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
0806813E 4906     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
08068140 1840     add     r0,r0,r1                                ;
08068142 6800     ldr     r0,[r0]                                 ;r0 = card_stats
08068144 4018     and     r0,r3                                   ;
08068146 0D00     lsr     r0,r0,14h                               ;
08068148 2816     cmp     r0,16h                                  ;
0806814A D00A     beq     8068162h                                ;if (card_type == MAGIC), branch to 08068162
0806814C 2816     cmp     r0,16h                                  ;
0806814E DC05     bgt     806815Ch                                ;if (card_type == TICKET  || card_type == DIVINE_BEAST), branch to 0806815C
08068150 2815     cmp     r0,15h                                  ;
08068152 D008     beq     8068166h                                ;if (card_type == TRAP), branch to 08068166
08068154 E00B     b       806816Eh                                ;else branch to 0806816E
08068156 0000     lsl     r0,r0,0h                                ;
08068158 2B84     cmp     r3,84h                                  ;
0806815A 0883     lsr     r3,r0,2h                                ;
0806815C 2817     cmp     r0,17h                                  ;
0806815E D004     beq     806816Ah                                ;if (card_type == TICKET), branch to 0806816A
08068160 E005     b       806816Eh                                ;if (card_type == DIVINE_BEAST), branch to 0806816E
08068162 2007     mov     r0,7h                                   ;...if (card_type == MAGIC), r0 = 7
08068164 E00D     b       8068182h                                ;branch to 08068182
08068166 2008     mov     r0,8h                                   ;...if (card_type == TRAP), r0 = 8
08068168 E00B     b       8068182h                                ;branch to 08068182
0806816A 2009     mov     r0,9h                                   ;...if (card_type == TICKET), r0 = 9
0806816C E009     b       8068182h                                ;branch to 08068182
0806816E 1C30     mov     r0,r6                                   ;...if (card_type == DIVINE_BEAST)
08068170 4038     and     r0,r7                                   ;
08068172 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
08068174 4A0C     ldr     r2,=8832B84h                            ;r1 = pointer_to_card_stats_array
08068176 1880     add     r0,r0,r2                                ;
08068178 6800     ldr     r0,[r0]                                 ;r0 = card_stats
0806817A 21C0     mov     r1,0C0h                                 ;
0806817C 0309     lsl     r1,r1,0Ch                               ;
0806817E 4008     and     r0,r1                                   ;
08068180 0C80     lsr     r0,r0,12h                               ;r0 = monster_category
08068182 2803     cmp     r0,3h                                   ;
08068184 D100     bne     8068188h                                ;if (monster_category ≠ RITUAL_MONSTER) [not Obelisk the Tourmentor], branch to 08068188
08068186 E0C8     b       806831Ah                                ;else branch to 0806831A
08068188 1C30     mov     r0,r6                                   ;...if (monster_category ≠ RITUAL_MONSTER) [not Obelisk the Tourmentor]
0806818A 4038     and     r0,r7                                   ;
0806818C 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
0806818E 4C06     ldr     r4,=8832B84h                            ;r1 = pointer_to_card_stats_array
08068190 1900     add     r0,r0,r4                                ;
08068192 6800     ldr     r0,[r0]                                 ;r0 = card_stats
08068194 4018     and     r0,r3                                   ;
08068196 0D00     lsr     r0,r0,14h                               ;r0 = card_type
08068198 2815     cmp     r0,15h                                  ;
0806819A DB0B     blt     80681B4h                                ;if (card_type < 0x15) [is a non-Divine-Beast Monster card], branch to 080681B4
0806819C 2817     cmp     r0,17h                                  ;
0806819E DD05     ble     80681ACh                                ;if (card_type ≤ 0x17) [is a Trap, Magic, or Ticket card], branch to 080681AC
080681A0 2818     cmp     r0,18h                                  ;
080681A2 D005     beq     80681B0h                                ;if (card_type == DIVINE_BEAST), branch to 080681B0
080681A4 E006     b       80681B4h                                ;else branch to 080681B4
080681A6 0000     lsl     r0,r0,0h                                ;
080681A8 2B84     cmp     r3,84h                                  ;
080681AA 0883     lsr     r3,r0,2h                                ;
080681AC 2000     mov     r0,0h                                   ;...if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), r0 = 0
080681AE E00B     b       80681C8h                                ;branch to 080681C8
080681B0 200A     mov     r0,0Ah                                  ;...if (card_type == DIVINE_BEAST), r0 = 0xA
080681B2 E009     b       80681C8h                                ;branch to 080681C8
080681B4 1C30     mov     r0,r6                                   ;...if (card_type < 0x15 || card_type > 0x18) [is a non-Divine-Beast Monster card, or is a glitch card]
080681B6 4038     and     r0,r7                                   ;
080681B8 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
080681BA 4909     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
080681BC 1840     add     r0,r0,r1                                ;
080681BE 6800     ldr     r0,[r0]                                 ;r0 = card_stats
080681C0 21F0     mov     r1,0F0h                                 ;
080681C2 0549     lsl     r1,r1,15h                               ;
080681C4 4008     and     r0,r1                                   ;
080681C6 0E40     lsr     r0,r0,19h                               ;r0 = monster_level
080681C8 2800     cmp     r0,0h                                   ;
080681CA DA00     bge     80681CEh                                ;if (monster_level > 0), branch to 080681CE
080681CC E0A2     b       8068314h                                ;else branch to 08068314
080681CE 2804     cmp     r0,4h                                   ;...if (monster_level > 0)
080681D0 DD08     ble     80681E4h                                ;if (monster_level ≤ 4), branch to 080681E4
080681D2 2806     cmp     r0,6h                                   ;
080681D4 DD00     ble     80681D8h                                ;else if (monster_level ≤ 6), branch to 080681D8
080681D6 E09D     b       8068314h                                ;else branch to 08068314
080681D8 6D68     ldr     r0,[r5,54h]                             ;...if (monster_level == 5 || monster_level == 6)
080681DA 3001     add     r0,1h                                   ;
080681DC 6568     str     r0,[r5,54h]                             ;increment number of Level 5 and 6 Monster cards in the deck stored in IWRAM
080681DE E09C     b       806831Ah                                ;branch to 0806831A
080681E0 2B84     cmp     r3,84h                                  ;-
080681E2 0883     lsr     r3,r0,2h                                ;-
080681E4 1C30     mov     r0,r6                                   ;...if (monster_level ≤ 4)
080681E6 4038     and     r0,r7                                   ;
080681E8 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
080681EA 4A06     ldr     r2,=8832B84h                            ;r1 = pointer_to_card_stats_array
080681EC 1880     add     r0,r0,r2                                ;
080681EE 6800     ldr     r0,[r0]                                 ;r0 = card_stats
080681F0 4018     and     r0,r3                                   ;
080681F2 0D00     lsr     r0,r0,14h                               ;
080681F4 2815     cmp     r0,15h                                  ;
080681F6 DB0C     blt     8068212h                                ;if (card_type < 0x15) [is a non-Divine-Beast Monster card], branch to 08068212
080681F8 2817     cmp     r0,17h                                  ;
080681FA DD05     ble     8068208h                                ;if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), branch to 08068208
080681FC 2818     cmp     r0,18h                                  ;
080681FE D005     beq     806820Ch                                ;if (card_type == DIVINE_BEAST), branch to 0806820C
08068200 E007     b       8068212h                                ;else branch to 08068212
08068202 0000     lsl     r0,r0,0h                                ;-
08068204 2B84     cmp     r3,84h                                  ;-
08068206 0883     lsr     r3,r0,2h                                ;-
08068208 2100     mov     r1,0h                                   ;...if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), r1 = 0
0806820A E00D     b       8068228h                                ;branch to 08068228
0806820C 21FA     mov     r1,0FAh                                 ;...if (card_type == DIVINE_BEAST)
0806820E 0109     lsl     r1,r1,4h                                ;card_ATK = 4000
08068210 E00A     b       8068228h                                ;branch to 08068228
08068212 1C30     mov     r0,r6                                   ;...if (card_type < 0x15) [is a non-Divine-Beast Monster card]
08068214 4038     and     r0,r7                                   ;
08068216 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
08068218 4C0C     ldr     r4,=8832B84h                            ;r1 = pointer_to_card_stats_array
0806821A 1900     add     r0,r0,r4                                ;
0806821C 6801     ldr     r1,[r0]                                 ;r0 = card_stats
0806821E 0389     lsl     r1,r1,0Eh                               ;
08068220 0DC9     lsr     r1,r1,17h                               ;
08068222 0088     lsl     r0,r1,2h                                ;
08068224 1840     add     r0,r0,r1                                ;
08068226 0041     lsl     r1,r0,1h                                ;r1 = DWORD(((r1 << 14 >> 23 << 2) + (r1 << 14 >> 23)) << 1) [card_ATK]
08068228 6E68     ldr     r0,[r5,64h]                             ;r0 = [r5 + 0x64]
0806822A 4288     cmp     r0,r1                                   ;
0806822C DA21     bge     8068272h                                ;if ([r5 + 0x64] ≥ card_ATK), branch to 08068272
0806822E 1C30     mov     r0,r6                                   ;
08068230 4038     and     r0,r7                                   ;
08068232 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
08068234 4905     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
08068236 1840     add     r0,r0,r1                                ;
08068238 6800     ldr     r0,[r0]                                 ;r0 = card_stats
0806823A 4018     and     r0,r3                                   ;
0806823C 0D00     lsr     r0,r0,14h                               ;r0 = card_type 
0806823E 2815     cmp     r0,15h                                  ;
08068240 DB0B     blt     806825Ah                                ;if (card_type < 0x15) [is a non-Divine-Beast Monster card], branch to 0806825A
08068242 2817     cmp     r0,17h                                  ;
08068244 DD04     ble     8068250h                                ;if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), branch to 08068250
08068246 2818     cmp     r0,18h                                  ;
08068248 D004     beq     8068254h                                ;if (card_type == DIVINE_BEAST), branch to 08068254
0806824A E006     b       806825Ah                                ;else branch to 0806825A
0806824C 2B84     cmp     r3,84h                                  ;
0806824E 0883     lsr     r3,r0,2h                                ;
08068250 2000     mov     r0,0h                                   ;...if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), r0 = 0
08068252 E00D     b       8068270h                                ;branch to 08068270
08068254 20FA     mov     r0,0FAh                                 ;
08068256 0100     lsl     r0,r0,4h                                ;card_ATK = 4000
08068258 E00A     b       8068270h                                ;branch to 08068270
0806825A 1C30     mov     r0,r6                                   ;
0806825C 4038     and     r0,r7                                   ;
0806825E 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
08068260 4A0B     ldr     r2,=8832B84h                            ;r1 = pointer_to_card_stats_array
08068262 1880     add     r0,r0,r2                                ;
08068264 6801     ldr     r1,[r0]                                 ;r0 = card_stats
08068266 0389     lsl     r1,r1,0Eh                               ;
08068268 0DC9     lsr     r1,r1,17h                               ;
0806826A 0088     lsl     r0,r1,2h                                ;
0806826C 1840     add     r0,r0,r1                                ;
0806826E 0040     lsl     r0,r0,1h                                ;r0 = DWORD(((r1 << 14 >> 23 << 2) + (r1 << 14 >> 23)) << 1) [card_ATK]
08068270 6668     str     r0,[r5,64h]                             ;store card_ATK into [r5 + 0x64]
08068272 1C30     mov     r0,r6                                   ;
08068274 4038     and     r0,r7                                   ;
08068276 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
08068278 4C05     ldr     r4,=8832B84h                            ;r4 = pointer_to_card_stats_array
0806827A 1900     add     r0,r0,r4                                ;
0806827C 6800     ldr     r0,[r0]                                 ;r0 = card_stats
0806827E 4018     and     r0,r3                                   ;
08068280 0D00     lsr     r0,r0,14h                               ;
08068282 2815     cmp     r0,15h                                  ;
08068284 DB0B     blt     806829Eh                                ;if (card_type < 0x15) [is a non-Divine-Beast Monster card], branch to 0806829E
08068286 2817     cmp     r0,17h                                  ;
08068288 DD04     ble     8068294h                                ;if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), branch to 08068294
0806828A 2818     cmp     r0,18h                                  ;
0806828C D004     beq     8068298h                                ;if (card_type == DIVINE_BEAST), branch to 08068298
0806828E E006     b       806829Eh                                ;else branch to 0806829E
08068290 2B84     cmp     r3,84h                                  ;
08068292 0883     lsr     r3,r0,2h                                ;
08068294 2100     mov     r1,0h                                   ;...if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), card_DEF = 0
08068296 E00E     b       80682B6h                                ;branch to 080682B6
08068298 21FA     mov     r1,0FAh                                 ;...if (card_type == DIVINE_BEAST)
0806829A 0109     lsl     r1,r1,4h                                ;card_DEF = 4000
0806829C E00B     b       80682B6h                                ;branch to 080682B6
0806829E 1C30     mov     r0,r6                                   ;...if (card_type < 0x15) [is a non-Divine-Beast Monster card]
080682A0 4038     and     r0,r7                                   ;
080682A2 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
080682A4 490D     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
080682A6 1840     add     r0,r0,r1                                ;
080682A8 6801     ldr     r1,[r0]                                 ;r1 = card_stats
080682AA 4A0D     ldr     r2,=1FFh                                ;
080682AC 1C10     mov     r0,r2                                   ;
080682AE 4001     and     r1,r0                                   ;
080682B0 0088     lsl     r0,r1,2h                                ;
080682B2 1840     add     r0,r0,r1                                ;
080682B4 0041     lsl     r1,r0,1h                                ;r1 = (card_stats & 511 × 10) [card_DEF]
080682B6 6EA8     ldr     r0,[r5,68h]                             ;
080682B8 4288     cmp     r0,r1                                   ;
080682BA DA2E     bge     806831Ah                                ;if ([r5 + 0x68] > card_DEF), branch to 0806831A
080682BC 1C30     mov     r0,r6                                   ;
080682BE 4038     and     r0,r7                                   ;
080682C0 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
080682C2 4C06     ldr     r4,=8832B84h                            ;r4 = pointer_to_card_stats_array
080682C4 1900     add     r0,r0,r4                                ;
080682C6 6800     ldr     r0,[r0]                                 ;r0 = card_stats
080682C8 4018     and     r0,r3                                   ;
080682CA 0D00     lsr     r0,r0,14h                               ;
080682CC 2815     cmp     r0,15h                                  ;
080682CE DB0E     blt     80682EEh                                ;if (card_type < 0x15) [is a non-Divine-Beast Monster card], branch to 080682EE
080682D0 2817     cmp     r0,17h                                  ;
080682D2 DD07     ble     80682E4h                                ;if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), branch to 080682E4
080682D4 2818     cmp     r0,18h                                  ;
080682D6 D007     beq     80682E8h                                ;if (card_type == DIVINE_BEAST), branch to 080682E8
080682D8 E009     b       80682EEh                                ;else branch to 080682EE
080682DA 0000     lsl     r0,r0,0h                                ;-
080682DC 2B84     cmp     r3,84h                                  ;-
080682DE 0883     lsr     r3,r0,2h                                ;-
080682E0 01FF     lsl     r7,r7,7h                                ;-
080682E2 0000     lsl     r0,r0,0h                                ;-
080682E4 2000     mov     r0,0h                                   ;...if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), card_DEF = 0
080682E6 E00E     b       8068306h                                ;branch to 08068306
080682E8 20FA     mov     r0,0FAh                                 ;...if (card_type == DIVINE_BEAST)
080682EA 0100     lsl     r0,r0,4h                                ;card_DEF = 4000
080682EC E00B     b       8068306h                                ;branch to 08068306
080682EE 1C30     mov     r0,r6                                   ;...if (card_type < 0x15) [is a non-Divine-Beast Monster card]
080682F0 4038     and     r0,r7                                   ;
080682F2 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
080682F4 4905     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
080682F6 1840     add     r0,r0,r1                                ;
080682F8 6801     ldr     r1,[r0]                                 ;r1 = card_stats
080682FA 4A05     ldr     r2,=1FFh                                ;
080682FC 1C10     mov     r0,r2                                   ;
080682FE 4001     and     r1,r0                                   ;
08068300 0088     lsl     r0,r1,2h                                ;
08068302 1840     add     r0,r0,r1                                ;
08068304 0040     lsl     r0,r0,1h                                ;r1 = (card_stats & 511 × 10) [card_DEF]
08068306 66A8     str     r0,[r5,68h]                             ;store card_DEF into [r5 + 0x68]
08068308 E007     b       806831Ah                                ;branch to 0806831A
0806830A 0000     lsl     r0,r0,0h                                ;-
0806830C 2B84     cmp     r3,84h                                  ;-
0806830E 0883     lsr     r3,r0,2h                                ;-
08068310 01FF     lsl     r7,r7,7h                                ;-
08068312 0000     lsl     r0,r0,0h                                ;-
08068314 6DA8     ldr     r0,[r5,58h]                             ;
08068316 3001     add     r0,1h                                   ;
08068318 65A8     str     r0,[r5,58h]                             ;increment [r5 + 0x58]
0806831A 1C30     mov     r0,r6                                   ;
0806831C 4038     and     r0,r7                                   ;
0806831E 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
08068320 4C05     ldr     r4,=8832B84h                            ;r4 = pointer_to_card_stats_array
08068322 1900     add     r0,r0,r4                                ;
08068324 6800     ldr     r0,[r0]                                 ;r0 = card_stats
08068326 4018     and     r0,r3                                   ;
08068328 0D00     lsr     r0,r0,14h                               ;
0806832A 2815     cmp     r0,15h                                  ;
0806832C DB0B     blt     8068346h                                ;if (card_type < 0x15) [is a non-Divine-Beast Monster card], branch to 08068346
0806832E 2817     cmp     r0,17h                                  ;
08068330 DD04     ble     806833Ch                                ;if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), branch to 0806833C
08068332 2818     cmp     r0,18h                                  ;
08068334 D004     beq     8068340h                                ;if (card_type == DIVINE_BEAST), branch to 08068340
08068336 E006     b       8068346h                                ;else branch to 08068346
08068338 2B84     cmp     r3,84h                                  ;
0806833A 0883     lsr     r3,r0,2h                                ;
0806833C 2100     mov     r1,0h                                   ;...if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), card_DEF = 0
0806833E E00D     b       806835Ch                                ;branch to 0806835C
08068340 21FA     mov     r1,0FAh                                 ;...if (card_type == DIVINE_BEAST)
08068342 0109     lsl     r1,r1,4h                                ;card_DEF = 4000
08068344 E00A     b       806835Ch                                ;branch to 0806835C
08068346 1C30     mov     r0,r6                                   ;...if (card_type < 0x15) [is a non-Divine-Beast Monster card]
08068348 4038     and     r0,r7                                   ;
0806834A 0080     lsl     r0,r0,2h                                ;r0 = (card_id & 0x7FF) << 2
0806834C 490C     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
0806834E 1840     add     r0,r0,r1                                ;
08068350 6801     ldr     r1,[r0]                                 ;r1 = card_stats
08068352 0389     lsl     r1,r1,0Eh                               ;
08068354 0DC9     lsr     r1,r1,17h                               ;
08068356 0088     lsl     r0,r1,2h                                ;
08068358 1840     add     r0,r0,r1                                ;
0806835A 0041     lsl     r1,r0,1h                                ;
0806835C 6EE8     ldr     r0,[r5,6Ch]                             ;
0806835E 4288     cmp     r0,r1                                   ;
08068360 DA21     bge     80683A6h                                ;
08068362 1C30     mov     r0,r6                                   ;
08068364 4038     and     r0,r7                                   ;
08068366 0080     lsl     r0,r0,2h                                ;
08068368 4A05     ldr     r2,=8832B84h                            ;r2 = pointer_to_card_stats_array
0806836A 1880     add     r0,r0,r2                                ;
0806836C 6800     ldr     r0,[r0]                                 ;
0806836E 4018     and     r0,r3                                   ;
08068370 0D00     lsr     r0,r0,14h                               ;
08068372 2815     cmp     r0,15h                                  ;
08068374 DB0B     blt     806838Eh                                ;if (card_type < 0x15) [is a non-Divine-Beast Monster card], branch to 0806838E
08068376 2817     cmp     r0,17h                                  ;
08068378 DD04     ble     8068384h                                ;if (card_type == TRAP || card_type == MAGIC || card_type == TICKET), branch to 08068384
0806837A 2818     cmp     r0,18h                                  ;
0806837C D004     beq     8068388h                                ;if (card_type == DIVINE_BEAST), branch to 08068388
0806837E E006     b       806838Eh                                ;else branch to 0806838E
08068380 2B84     cmp     r3,84h                                  ;
08068382 0883     lsr     r3,r0,2h                                ;
08068384 2000     mov     r0,0h                                   ;
08068386 E00D     b       80683A4h                                ;
08068388 20FA     mov     r0,0FAh                                 ;
0806838A 0100     lsl     r0,r0,4h                                ;
0806838C E00A     b       80683A4h                                ;
0806838E 1C30     mov     r0,r6                                   ;
08068390 4038     and     r0,r7                                   ;
08068392 0080     lsl     r0,r0,2h                                ;
08068394 4C0B     ldr     r4,=8832B84h                            ;r4 = pointer_to_card_stats_array
08068396 1900     add     r0,r0,r4                                ;
08068398 6801     ldr     r1,[r0]                                 ;
0806839A 0389     lsl     r1,r1,0Eh                               ;
0806839C 0DC9     lsr     r1,r1,17h                               ;
0806839E 0088     lsl     r0,r1,2h                                ;
080683A0 1840     add     r0,r0,r1                                ;
080683A2 0040     lsl     r0,r0,1h                                ;
080683A4 66E8     str     r0,[r5,6Ch]                             ;
080683A6 1C30     mov     r0,r6                                   ;
080683A8 4038     and     r0,r7                                   ;
080683AA 0080     lsl     r0,r0,2h                                ;
080683AC 4905     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
080683AE 1840     add     r0,r0,r1                                ;
080683B0 6800     ldr     r0,[r0]                                 ;
080683B2 4018     and     r0,r3                                   ;
080683B4 0D00     lsr     r0,r0,14h                               ;
080683B6 2815     cmp     r0,15h                                  ;
080683B8 DB0B     blt     80683D2h                                ;
080683BA 2817     cmp     r0,17h                                  ;
080683BC DD04     ble     80683C8h                                ;
080683BE 2818     cmp     r0,18h                                  ;
080683C0 D004     beq     80683CCh                                ;
080683C2 E006     b       80683D2h                                ;
080683C4 2B84     cmp     r3,84h                                  ;
080683C6 0883     lsr     r3,r0,2h                                ;
080683C8 2100     mov     r1,0h                                   ;
080683CA E00E     b       80683EAh                                ;
080683CC 21FA     mov     r1,0FAh                                 ;
080683CE 0109     lsl     r1,r1,4h                                ;
080683D0 E00B     b       80683EAh                                ;
080683D2 1C30     mov     r0,r6                                   ;
080683D4 4038     and     r0,r7                                   ;
080683D6 0080     lsl     r0,r0,2h                                ;
080683D8 4A0D     ldr     r2,=8832B84h                            ;r2 = pointer_to_card_stats_array
080683DA 1880     add     r0,r0,r2                                ;
080683DC 6801     ldr     r1,[r0]                                 ;
080683DE 4C0D     ldr     r4,=1FFh                                ;
080683E0 1C20     mov     r0,r4                                   ;
080683E2 4001     and     r1,r0                                   ;
080683E4 0088     lsl     r0,r1,2h                                ;
080683E6 1840     add     r0,r0,r1                                ;
080683E8 0041     lsl     r1,r0,1h                                ;r1 = card_DEF
080683EA 6F28     ldr     r0,[r5,70h]                             ;
080683EC 4288     cmp     r0,r1                                   ;
080683EE DA25     bge     806843Ch                                ;if ([r5,70h] > card_DEF), branch to 006843C
080683F0 1C30     mov     r0,r6                                   ;
080683F2 4038     and     r0,r7                                   ;
080683F4 0080     lsl     r0,r0,2h                                ;
080683F6 4906     ldr     r1,=8832B84h                            ;r1 = pointer_to_card_stats_array
080683F8 1840     add     r0,r0,r1                                ;
080683FA 6800     ldr     r0,[r0]                                 ;
080683FC 4018     and     r0,r3                                   ;
080683FE 0D00     lsr     r0,r0,14h                               ;
08068400 2815     cmp     r0,15h                                  ;
08068402 DB0E     blt     8068422h                                ;
08068404 2817     cmp     r0,17h                                  ;
08068406 DD07     ble     8068418h                                ;
08068408 2818     cmp     r0,18h                                  ;
0806840A D007     beq     806841Ch                                ;
0806840C E009     b       8068422h                                ;
0806840E 0000     lsl     r0,r0,0h                                ;-
08068410 2B84     cmp     r3,84h                                  ;-
08068412 0883     lsr     r3,r0,2h                                ;-
08068414 01FF     lsl     r7,r7,7h                                ;-
08068416 0000     lsl     r0,r0,0h                                ;-
08068418 2000     mov     r0,0h                                   ;
0806841A E00E     b       806843Ah                                ;
0806841C 20FA     mov     r0,0FAh                                 ;
0806841E 0100     lsl     r0,r0,4h                                ;
08068420 E00B     b       806843Ah                                ;
08068422 1C30     mov     r0,r6                                   ;
08068424 4038     and     r0,r7                                   ;
08068426 0080     lsl     r0,r0,2h                                ;
08068428 4A21     ldr     r2,=8832B84h                            ;r2 = pointer_to_card_stats_array
0806842A 1880     add     r0,r0,r2                                ;
0806842C 6801     ldr     r1,[r0]                                 ;
0806842E 4C21     ldr     r4,=1FFh                                ;
08068430 1C20     mov     r0,r4                                   ;
08068432 4001     and     r1,r0                                   ;
08068434 0088     lsl     r0,r1,2h                                ;
08068436 1840     add     r0,r0,r1                                ;
08068438 0040     lsl     r0,r0,1h                                ;r0 = card_DEF
0806843A 6728     str     r0,[r5,70h]                             ;store card_DEF into [r5 + 0x70]
0806843C 1C30     mov     r0,r6                                   ;
0806843E 4038     and     r0,r7                                   ;
08068440 0040     lsl     r0,r0,1h                                ;
08068442 491D     ldr     r1,=8833C80h                            ;r1 = pointer_to_internal_cards_ids_array
08068444 1844     add     r4,r0,r1                                ;
08068446 8820     ldrh    r0,[r4]                                 ;r0 = internal_card_id
08068448 2101     mov     r1,1h                                   ;r1 = 1
0806844A 9300     str     r3,[sp]                                 ;
0806844C F7A8FB38 bl      8010AC0h                                ;call 08010AC0
08068450 9B00     ldr     r3,[sp]                                 ;
08068452 2800     cmp     r0,0h                                   ;
08068454 D106     bne     8068464h                                ;
08068456 8820     ldrh    r0,[r4]                                 ;
08068458 2100     mov     r1,0h                                   ;
0806845A F7A8FB31 bl      8010AC0h                                ;call 08010AC0
0806845E 9B00     ldr     r3,[sp]                                 ;
08068460 2800     cmp     r0,0h                                   ;
08068462 D002     beq     806846Ah                                ;
08068464 6D28     ldr     r0,[r5,50h]                             ;
08068466 3001     add     r0,1h                                   ;
08068468 6528     str     r0,[r5,50h]                             ;increment [r5 + 0x50]
0806846A 403E     and     r6,r7                                   ;
0806846C 0070     lsl     r0,r6,1h                                ;
0806846E 4A12     ldr     r2,=8833C80h                            ;r2 = pointer_to_internal_cards_ids_array
08068470 1880     add     r0,r0,r2                                ;
08068472 8801     ldrh    r1,[r0]                                 ;r1 = internal_card_id
08068474 4811     ldr     r0,=229h                                ;r0 = 553 [Lava Battleguard]
08068476 4281     cmp     r1,r0                                   ;
08068478 D100     bne     806847Ch                                ;if (internal_card_id ≠ Lava Battleguard), branch to 0806847C
0806847A E0E0     b       806863Eh                                ;else branch to 0806863E
0806847C 4281     cmp     r1,r0                                   ;
0806847E DC6F     bgt     8068560h                                ;if (internal_card_id > 553), branch to 08068560
08068480 389C     sub     r0,9Ch                                  ;r0 = 397 [Ooguchi]
08068482 4281     cmp     r1,r0                                   ;
08068484 DC38     bgt     80684F8h                                ;
08068486 3801     sub     r0,1h                                   ;r0 = 396 [Leghul]
08068488 4281     cmp     r1,r0                                   ;
0806848A DB00     blt     806848Eh                                ;
0806848C E0E2     b       8068654h                                ;
0806848E 2953     cmp     r1,53h                                  ;83 [Reaper of the Cards]
08068490 D100     bne     8068494h                                ;
08068492 E0E7     b       8068664h                                ;
08068494 2953     cmp     r1,53h                                  ;
08068496 DC17     bgt     80684C8h                                ;
08068498 2914     cmp     r1,14h                                  ;20 [Exodia the Forbidden One]
0806849A DC11     bgt     80684C0h                                ;
0806849C 2910     cmp     r1,10h                                  ;16 [Right Leg of the Forbidden One]
0806849E DB00     blt     80684A2h                                ;
080684A0 E0F0     b       8068684h                                ;
080684A2 290B     cmp     r1,0Bh                                  ;11 [Swamp Battleguard]
080684A4 D100     bne     80684A8h                                ;
080684A6 E0CA     b       806863Eh                                ;
080684A8 290F     cmp     r1,0Fh                                  ;15 [Time Wizard]
080684AA D100     bne     80684AEh                                ;
080684AC E0D6     b       806865Ch                                ;
080684AE E0EC     b       806868Ah                                ;branch to 0806868A
080684B0 2B84     cmp     r3,84h                                  ;-
080684B2 0883     lsr     r3,r0,2h                                ;-
080684B4 01FF     lsl     r7,r7,7h                                ;-
080684B6 0000     lsl     r0,r0,0h                                ;-
080684B8 3C80     sub     r4,80h                                  ;
080684BA 0883     lsr     r3,r0,2h                                ;
080684BC 0229     lsl     r1,r5,8h                                ;
080684BE 0000     lsl     r0,r0,0h                                ;
080684C0 292F     cmp     r1,2Fh                                  ;47 [Sangan]
080684C2 D100     bne     80684C6h                                ;
080684C4 E0DA     b       806867Ch                                ;
080684C6 E0E0     b       806868Ah                                ;branch to 0806868A
080684C8 4806     ldr     r0,=16Fh                                ;r0 = 367 [Shadow Ghoul]
080684CA 4281     cmp     r1,r0                                   ;
080684CC D100     bne     80684D0h                                ;
080684CE E0B6     b       806863Eh                                ;
080684D0 4281     cmp     r1,r0                                   ;
080684D2 DC09     bgt     80684E8h                                ;
080684D4 29DF     cmp     r1,0DFh                                 ;223 [Trap Master]
080684D6 D100     bne     80684DAh                                ;
080684D8 E0C4     b       8068664h                                ;
080684DA 29EA     cmp     r1,0EAh                                 ;234 [Wodan the Resident of the Forest]
080684DC D100     bne     80684E0h                                ;
080684DE E0AE     b       806863Eh                                ;
080684E0 E0D3     b       806868Ah                                ;branch to 0806868A
080684E2 0000     lsl     r0,r0,0h                                ;
080684E4 016F     lsl     r7,r5,5h                                ;
080684E6 0000     lsl     r0,r0,0h                                ;
080684E8 4802     ldr     r0,=181h                                ;r0 = 385 [Harpie's Pet Dragon]
080684EA 4281     cmp     r1,r0                                   ;
080684EC D100     bne     80684F0h                                ;
080684EE E0A6     b       806863Eh                                ;
080684F0 3001     add     r0,1h                                   ;
080684F2 E07C     b       80685EEh                                ;
080684F4 0181     lsl     r1,r0,6h                                ;
080684F6 0000     lsl     r0,r0,0h                                ;
080684F8 20FA     mov     r0,0FAh                                 ;
080684FA 0040     lsl     r0,r0,1h                                ;r0 = 500 [Man-Eater Bug]
080684FC 4281     cmp     r1,r0                                   ;
080684FE D100     bne     8068502h                                ;
08068500 E0AC     b       806865Ch                                ;
08068502 4281     cmp     r1,r0                                   ;
08068504 DC15     bgt     8068532h                                ;
08068506 380D     sub     r0,0Dh                                  ;r0 = 487 [Rainbow Flower]
08068508 4281     cmp     r1,r0                                   ;
0806850A D100     bne     806850Eh                                ;
0806850C E0A2     b       8068654h                                ;
0806850E 4281     cmp     r1,r0                                   ;
08068510 DC05     bgt     806851Eh                                ;
08068512 3851     sub     r0,51h                                  ;r0 = 406 [Machine King]
08068514 4281     cmp     r1,r0                                   ;
08068516 D100     bne     806851Ah                                ;
08068518 E091     b       806863Eh                                ;
0806851A 300F     add     r0,0Fh                                  ;r0 = 421 [Jinzo #7]
0806851C E067     b       80685EEh                                ;
0806851E 20F6     mov     r0,0F6h                                 ;
08068520 0040     lsl     r0,r0,1h                                ;r0 = 492 [Maha Vailo]
08068522 4281     cmp     r1,r0                                   ;
08068524 DD00     ble     8068528h                                ;
08068526 E0B0     b       806868Ah                                ;branch to 0806868A
08068528 3801     sub     r0,1h                                   ;
0806852A 4281     cmp     r1,r0                                   ;
0806852C DA00     bge     8068530h                                ;
0806852E E0AC     b       806868Ah                                ;branch to 0806868A
08068530 E085     b       806863Eh                                ;
08068532 4806     ldr     r0,=20Eh                                ;r0 = 526 [Milus Radiant]
08068534 4281     cmp     r1,r0                                   ;
08068536 D100     bne     806853Ah                                ;
08068538 E081     b       806863Eh                                ;
0806853A 4281     cmp     r1,r0                                   ;
0806853C DC08     bgt     8068550h                                ;
0806853E 380B     sub     r0,0Bh                                  ;r0 = 515 [Muka Muka]
08068540 4281     cmp     r1,r0                                   ;
08068542 D100     bne     8068546h                                ;
08068544 E07B     b       806863Eh                                ;
08068546 3008     add     r0,8h                                   ;r0 = 523 [Star Boy]
08068548 E03D     b       80685C6h                                ;
0806854A 0000     lsl     r0,r0,0h                                ;-
0806854C 020E     lsl     r6,r1,8h                                ;-
0806854E 0000     lsl     r0,r0,0h                                ;-
08068550 4802     ldr     r0,=21Bh                                ;r0 = 539 [Skelengel]
08068552 4281     cmp     r1,r0                                   ;
08068554 D100     bne     8068558h                                ;
08068556 E08D     b       8068674h                                ;
08068558 3001     add     r0,1h                                   ;r0 = 540 [Hane-Hane]
0806855A E02E     b       80685BAh                                ;
0806855C 021B     lsl     r3,r3,8h                                ;
0806855E 0000     lsl     r0,r0,0h                                ;
08068560 480A     ldr     r0,=2FEh                                ;r0 = 766 [Blue-Eyes Toon Dragon]
08068562 4281     cmp     r1,r0                                   ;
08068564 D100     bne     8068568h                                ;
08068566 E075     b       8068654h                                ;
08068568 4281     cmp     r1,r0                                   ;
0806856A DC31     bgt     80685D0h                                ;
0806856C 388B     sub     r0,8Bh                                  ;
0806856E 4281     cmp     r1,r0                                   ;
08068570 D065     beq     806863Eh                                ;
08068572 4281     cmp     r1,r0                                   ;
08068574 DC12     bgt     806859Ch                                ;
08068576 381A     sub     r0,1Ah                                  ;
08068578 4281     cmp     r1,r0                                   ;
0806857A D06F     beq     806865Ch                                ;
0806857C 4281     cmp     r1,r0                                   ;
0806857E DC07     bgt     8068590h                                ;
08068580 381C     sub     r0,1Ch                                  ;
08068582 4281     cmp     r1,r0                                   ;
08068584 D100     bne     8068588h                                ;
08068586 E079     b       806867Ch                                ;
08068588 3018     add     r0,18h                                  ;
0806858A E01C     b       80685C6h                                ;
0806858C 02FE     lsl     r6,r7,0Bh                               ;
0806858E 0000     lsl     r0,r0,0h                                ;
08068590 2098     mov     r0,98h                                  ;
08068592 0080     lsl     r0,r0,2h                                ;
08068594 4281     cmp     r1,r0                                   ;
08068596 D052     beq     806863Eh                                ;
08068598 3007     add     r0,7h                                   ;
0806859A E014     b       80685C6h                                ;
0806859C 20B6     mov     r0,0B6h                                 ;
0806859E 0080     lsl     r0,r0,2h                                ;
080685A0 4281     cmp     r1,r0                                   ;
080685A2 DC04     bgt     80685AEh                                ;
080685A4 3802     sub     r0,2h                                   ;
080685A6 4281     cmp     r1,r0                                   ;
080685A8 DA54     bge     8068654h                                ;
080685AA 385C     sub     r0,5Ch                                  ;
080685AC E01F     b       80685EEh                                ;
080685AE 4804     ldr     r0,=2F7h                                ;r0 = 759 [Dark Magician Girl]
080685B0 4281     cmp     r1,r0                                   ;
080685B2 D044     beq     806863Eh                                ;
080685B4 4281     cmp     r1,r0                                   ;
080685B6 DC05     bgt     80685C4h                                ;
080685B8 3811     sub     r0,11h                                  ;
080685BA 4281     cmp     r1,r0                                   ;
080685BC D04E     beq     806865Ch                                ;
080685BE E064     b       806868Ah                                ;branch to 0806868A
080685C0 02F7     lsl     r7,r6,0Bh                               ;
080685C2 0000     lsl     r0,r0,0h                                ;
080685C4 4801     ldr     r0,=2F9h                                ;r0 = 761 [Insect Queen]
080685C6 4281     cmp     r1,r0                                   ;
080685C8 D039     beq     806863Eh                                ;
080685CA E05E     b       806868Ah                                ;branch to 0806868A
080685CC 02F9     lsl     r1,r7,0Bh                               ;
080685CE 0000     lsl     r0,r0,0h                                ;
080685D0 4808     ldr     r0,=45Ch                                ;r0 = 1116 [Spear Cretin]
080685D2 4281     cmp     r1,r0                                   ;
080685D4 D04A     beq     806866Ch                                ;
080685D6 4281     cmp     r1,r0                                   ;
080685D8 DC18     bgt     806860Ch                                ;
080685DA 3808     sub     r0,8h                                   ;
080685DC 4281     cmp     r1,r0                                   ;
080685DE D04D     beq     806867Ch                                ;
080685E0 4281     cmp     r1,r0                                   ;
080685E2 DC09     bgt     80685F8h                                ;
080685E4 20CA     mov     r0,0CAh                                 ;
080685E6 0080     lsl     r0,r0,2h                                ;
080685E8 4281     cmp     r1,r0                                   ;
080685EA D028     beq     806863Eh                                ;
080685EC 3004     add     r0,4h                                   ;
080685EE 4281     cmp     r1,r0                                   ;
080685F0 D030     beq     8068654h                                ;
080685F2 E04A     b       806868Ah                                ;branch to 0806868A
080685F4 045C     lsl     r4,r3,11h                               ;
080685F6 0000     lsl     r0,r0,0h                                ;
080685F8 4803     ldr     r0,=456h                                ;r0 = 1110 [UFO Turtle]
080685FA 4281     cmp     r1,r0                                   ;
080685FC D03E     beq     806867Ch                                ;
080685FE 3005     add     r0,5h                                   ;
08068600 4281     cmp     r1,r0                                   ;
08068602 D023     beq     806864Ch                                ;
08068604 E041     b       806868Ah                                ;branch to 0806868A
08068606 0000     lsl     r0,r0,0h                                ;
08068608 0456     lsl     r6,r2,11h                               ;
0806860A 0000     lsl     r0,r0,0h                                ;
0806860C 208C     mov     r0,8Ch                                  ;
0806860E 00C0     lsl     r0,r0,3h                                ;
08068610 4281     cmp     r1,r0                                   ;
08068612 DC04     bgt     806861Eh                                ;
08068614 3801     sub     r0,1h                                   ;
08068616 4281     cmp     r1,r0                                   ;
08068618 DA30     bge     806867Ch                                ;
0806861A 3802     sub     r0,2h                                   ;
0806861C E005     b       806862Ah                                ;
0806861E 4804     ldr     r0,=5ECh                                ;r0 = 1516 [Spirit of Flames]
08068620 4281     cmp     r1,r0                                   ;
08068622 D00C     beq     806863Eh                                ;
08068624 4281     cmp     r1,r0                                   ;
08068626 DC07     bgt     8068638h                                ;
08068628 4802     ldr     r0,=463h                                ;r0 = 1123 [Mystic Tomato]
0806862A 4281     cmp     r1,r0                                   ;
0806862C D026     beq     806867Ch                                ;
0806862E E02C     b       806868Ah                                ;branch to 0806868A
08068630 05EC     lsl     r4,r5,17h                               ;
08068632 0000     lsl     r0,r0,0h                                ;
08068634 0463     lsl     r3,r4,11h                               ;
08068636 0000     lsl     r0,r0,0h                                ;
08068638 4803     ldr     r0,=5EEh                                ;r0 = 1518 [The Rock Spirit]
0806863A 4281     cmp     r1,r0                                   ;
0806863C D125     bne     806868Ah                                ;if (internal_card_id ≠ The Rock Spirit), branch to 0806868A
0806863E 6B28     ldr     r0,[r5,30h]                             ;
08068640 3001     add     r0,1h                                   ;
08068642 6328     str     r0,[r5,30h]                             ;increment [r5 + 0x30]
08068644 E021     b       806868Ah                                ;branch to 0806868A
08068646 0000     lsl     r0,r0,0h                                ;-
08068648 05EE     lsl     r6,r5,17h                               ;-
0806864A 0000     lsl     r0,r0,0h                                ;-
0806864C 6B68     ldr     r0,[r5,34h]                             ;
0806864E 3001     add     r0,1h                                   ;
08068650 6368     str     r0,[r5,34h]                             ;increment [r5 + 0x34]
08068652 E01A     b       806868Ah                                ;branch to 0806868A
08068654 6BA8     ldr     r0,[r5,38h]                             ;
08068656 3001     add     r0,1h                                   ;
08068658 63A8     str     r0,[r5,38h]                             ;increment [r5 + 0x38]
0806865A E016     b       806868Ah                                ;branch to 0806868A
0806865C 6BE8     ldr     r0,[r5,3Ch]                             ;
0806865E 3001     add     r0,1h                                   ;
08068660 63E8     str     r0,[r5,3Ch]                             ;increment [r5 + 0x3C]
08068662 E012     b       806868Ah                                ;branch to 0806868A
08068664 6C28     ldr     r0,[r5,40h]                             ;
08068666 3001     add     r0,1h                                   ;
08068668 6428     str     r0,[r5,40h]                             ;increment [r5 + 0x40]
0806866A E00E     b       806868Ah                                ;branch to 0806868A
0806866C 6C68     ldr     r0,[r5,44h]                             ;
0806866E 3001     add     r0,1h                                   ;
08068670 6468     str     r0,[r5,44h]                             ;increment [r5 + 0x44]
08068672 E00A     b       806868Ah                                ;branch to 0806868A
08068674 6CA8     ldr     r0,[r5,48h]                             ;
08068676 3001     add     r0,1h                                   ;
08068678 64A8     str     r0,[r5,48h]                             ;increment [r5 + 0x48]
0806867A E006     b       806868Ah                                ;branch to 0806868A
0806867C 6CE8     ldr     r0,[r5,4Ch]                             ;
0806867E 3001     add     r0,1h                                   ;
08068680 64E8     str     r0,[r5,4Ch]                             ;increment [r5 + 0x4C]
08068682 E002     b       806868Ah                                ;branch to 0806868A
08068684 6DE8     ldr     r0,[r5,5Ch]                             ;
08068686 3001     add     r0,1h                                   ;
08068688 65E8     str     r0,[r5,5Ch]                             ;increment [r5 + 0x5C]
0806868A 2401     mov     r4,1h                                   ;
0806868C 44A0     add     r8,r4                                   ;r8++ /*(the most inefficient increment in the world)*/
0806868E 4913     ldr     r1,=2018FE4h                            ;
08068690 2001     mov     r0,1h                                   ;
08068692 464A     mov     r2,r9                                   ;
08068694 4010     and     r0,r2                                   ;
08068696 4A12     ldr     r2,=0D64h                               ;
08068698 4350     mul     r0,r2                                   ;
0806869A 1840     add     r0,r0,r1                                ;
0806869C 78C0     ldrb    r0,[r0,3h]                              ;
0806869E 4580     cmp     r8,r0                                   ;
080686A0 DA01     bge     80686A6h                                ;
080686A2 F7FFFABE bl      8067C22h                                ;
080686A6 4A0D     ldr     r2,=2018FE4h                            ;
080686A8 2001     mov     r0,1h                                   ;
080686AA 464C     mov     r4,r9                                   ;
080686AC 4020     and     r0,r4                                   ;
080686AE 490C     ldr     r1,=0D64h                               ;
080686B0 4348     mul     r0,r1                                   ;
080686B2 1880     add     r0,r0,r2                                ;
080686B4 7940     ldrb    r0,[r0,5h]                              ;
080686B6 60E8     str     r0,[r5,0Ch]                             ;
080686B8 6828     ldr     r0,[r5]                                 ;
080686BA 6869     ldr     r1,[r5,4h]                              ;
080686BC 1840     add     r0,r0,r1                                ;
080686BE 68A9     ldr     r1,[r5,8h]                              ;
080686C0 1840     add     r0,r0,r1                                ;
080686C2 6929     ldr     r1,[r5,10h]                             ;
080686C4 1840     add     r0,r0,r1                                ;
080686C6 6969     ldr     r1,[r5,14h]                             ;
080686C8 1840     add     r0,r0,r1                                ;
080686CA 61A8     str     r0,[r5,18h]                             ;
080686CC B001     add     sp,4h                                   ;
080686CE BC18     pop     r3,r4                                   ;
080686D0 4698     mov     r8,r3                                   ;
080686D2 46A1     mov     r9,r4                                   ;
080686D4 BCF0     pop     r4-r7                                   ;
080686D6 BC01     pop     r0                                      ;
080686D8 4700     bx      r0                                      ;

Trunk management

Count quantity of cards in Player's Trunk, Deck and Sideboard

0x8AA94 - Loops through Player's inventory to count cards in Player's Trunk, Deck, and Sideboard

0808AA94 21D4     mov     r1,0D4h                                 ;
0808AA96 0000     lsl     r0,r0,0h                                ;
0808AA98 FBC1     bl      lr+782h                                 ;
0808AA9A 0000     lsl     r0,r0,0h                                ;
0808AA9C 10ED     asr     r5,r5,3h                                ;
0808AA9E 0000     lsl     r0,r0,0h                                ;
0808AAA0 21DE     mov     r1,0DEh                                 ;
0808AAA2 0000     lsl     r0,r0,0h                                ;
0808AAA4 2000     mov     r0,0h                                   ;
0808AAA6 BC70     pop     r4-r6                                   ;
0808AAA8 BC02     pop     r1                                      ;
0808AAAA 4708     bx      r1                                      ;
0808AAAC B570     push    r4-r6,r14                               ;
0808AAAE 2300     mov     r3,0h                                   ;
0808AAB0 490C     ldr     r1,=2011C20h                            ;r1 = pointer to Player's Trunk
0808AAB2 2200     mov     r2,0h                                   ;r2 = 0
0808AAB4 1C0D     mov     r5,r1                                   ;r5 = pointer to Player's Trunk
0808AAB6 4C0C     ldr     r4,=10EDh                               ;r4 = 4333
0808AAB8 880E     ldrh    r6,[r1]                                 ;start of the loop, load card_quantity for current card pointed by r1 in r6
0808AABA 18F0     add     r0,r6,r3                                ;r0 = card_quantity + r3
0808AABC 0400     lsl     r0,r0,10h                               ;
0808AABE 0C03     lsr     r3,r0,10h                               ;r3 = current_card_quantity & 0xFFFF
0808AAC0 3102     add     r1,2h                                   ;pointer_to_card_trunk += 2
0808AAC2 1C50     add     r0,r2,1                                 ;r0 = current_card_id
0808AAC4 0400     lsl     r0,r0,10h                               ;r0 << 16
0808AAC6 0C02     lsr     r2,r0,10h                               ;r2 = r0 & 0xFFFF
0808AAC8 42A2     cmp     r2,r4                                   ;
0808AACA D9F5     bls     808AAB8h                                ;if (r2 ≤ 4333 [it's the 1082 valid cards + card_id #0 multiplied by 4 + 1]), loop to 0x808AAB8
0808AACC 43D8     mvn     r0,r3                                   ;r0 = !r3
0808AACE 3001     add     r0,1h                                   ;r0++
0808AAD0 4A06     ldr     r2,=21DEh                               ;r2 = 8670 [it's the 1082 valid cards + card_id #0 multiplied by 8 + an offset of 6 for idk which reason yet]
0808AAD2 18A9     add     r1,r5,r2                                ;r1 = pointer to Player's Trunk + 8670
0808AAD4 8008     strh    r0,[r1]                                 ;r0 = [r1]
0808AAD6 4E06     ldr     r6,=21D4h                               ;
0808AAD8 19A9     add     r1,r5,r6                                ;
0808AADA 4806     ldr     r0,=0FBC1h                              ;
0808AADC 8008     strh    r0,[r1]                                 ;
0808AADE BC70     pop     r4-r6                                   ;
0808AAE0 BC01     pop     r0                                      ;
0808AAE2 4700     bx      r0                                      ;

Add card to Trunk

0808AF0C 3C80     sub     r4,80h                                  ;
0808AF0E 0883     lsr     r3,r0,2h                                ;
0808AF10 F893     bl      lr+126h                                 ;
0808AF12 FFFF     bl      lr+0FFEh                                ;
0808AF14 6070     str     r0,[r6,4h]                              ;
0808AF16 0817     lsr     r7,r2,20h                               ;
0808AF18 B530     push    r4,r5,r14                               ;
0808AF1A 1C04     mov     r4,r0                                   ;
0808AF1C 0424     lsl     r4,r4,10h                               ;
0808AF1E 0C24     lsr     r4,r4,10h                               ;
0808AF20 1C20     mov     r0,r4                                   ;
0808AF22 F7FFFFDF bl      808AEE4h                                ;
0808AF26 4B0C     ldr     r3,=2011C20h                            ;
0808AF28 00A4     lsl     r4,r4,2h                                ;
0808AF2A 18E4     add     r4,r4,r3                                ;r4 = 0x2011C20 + (card_id << 2)
0808AF2C 8922     ldrh    r2,[r4,8h]                              ;r2 = old card quantity
0808AF2E 0591     lsl     r1,r2,16h                               ;
0808AF30 480A     ldr     r0,=0FF800000h                          ;
0808AF32 4281     cmp     r1,r0                                   ;
0808AF34 D80D     bhi     808AF52h                                ;
0808AF36 0D89     lsr     r1,r1,16h                               ;
0808AF38 3101     add     r1,1h                                   ;
0808AF3A 4D09     ldr     r5,=3FFh                                ;
0808AF3C 1C28     mov     r0,r5                                   ;
0808AF3E 4001     and     r1,r0                                   ;
0808AF40 4808     ldr     r0,=0FFFFFC00h                          ;1024 is the maximum quantity for a given card
0808AF42 4010     and     r0,r2                                   ;r2 is old card quantity
0808AF44 4308     orr     r0,r1                                   ;r1 is new card quantity
0808AF46 8120     strh    r0,[r4,8h]                              ;Store new card quantity in [r4 + 8]
0808AF48 4807     ldr     r0,=20C6h                               ;
0808AF4A 1819     add     r1,r3,r0                                ;
0808AF4C 8808     ldrh    r0,[r1]                                 ;
0808AF4E 3001     add     r0,1h                                   ;
0808AF50 8008     strh    r0,[r1]                                 ;
0808AF52 BC30     pop     r4,r5                                   ;
0808AF54 BC01     pop     r0                                      ;
0808AF56 4700     bx      r0                                      ;
0808AF58 1C20     mov     r0,r4                                   ;

0x6B20C

0806B20C 5BE8     ldrh    r0,[r5,r7]                              ;
0806B20E 0201     lsl     r1,r0,8h                                ;
0806B210 F01FFBD0 bl      808A9B4h                                ;
0806B214 1C01     mov     r1,r0                                   ;
0806B216 2900     cmp     r1,0h                                   ;
0806B218 DA00     bge     806B21Ch                                ;
0806B21A 1CC8     add     r0,r1,3                                 ;
0806B21C 1080     asr     r0,r0,2h                                ;
0806B21E 0080     lsl     r0,r0,2h                                ;
0806B220 1A08     sub     r0,r1,r0                                ;
0806B222 2801     cmp     r0,1h                                   ;
0806B224 D00D     beq     806B242h                                ;
0806B226 2801     cmp     r0,1h                                   ;
0806B228 DC02     bgt     806B230h                                ;
0806B22A 2800     cmp     r0,0h                                   ;
0806B22C D005     beq     806B23Ah                                ;
0806B22E E013     b       806B258h                                ;
0806B230 2802     cmp     r0,2h                                   ;
0806B232 D00A     beq     806B24Ah                                ;
0806B234 2803     cmp     r0,3h                                   ;
0806B236 D00C     beq     806B252h                                ;
0806B238 E00E     b       806B258h                                ;
0806B23A 2016     mov     r0,16h                                  ;
0806B23C F7FDFF2E bl      806909Ch                                ;
0806B240 E00A     b       806B258h                                ;
0806B242 2017     mov     r0,17h                                  ;
0806B244 F7FDFF2A bl      806909Ch                                ;
0806B248 E006     b       806B258h                                ;
0806B24A 2014     mov     r0,14h                                  ;
0806B24C F7FDFF26 bl      806909Ch                                ;
0806B250 E002     b       806B258h                                ;
0806B252 201A     mov     r0,1Ah                                  ;
0806B254 F7FDFF22 bl      806909Ch                                ;
0806B258 BC30     pop     r4,r5                                   ;
0806B25A BC01     pop     r0                                      ;
0806B25C 4700     bx      r0                                      ;

0x6B25E

0806B25E 0000     lsl     r0,r0,0h                                ;
0806B260 B530     push    r4,r5,r14                               ;
0806B262 B09D     add     sp,-74h                                 ;
0806B264 2000     mov     r0,0h                                   ;
0806B266 4669     mov     r1,r13                                  ;
0806B268 F7FCFCBA bl      8067BE0h                                ;Check cards in Player's Deck
0806B26C 4CBF     ldr     r4,=201A50Ch                            ;
0806B26E 25A0     mov     r5,0A0h                                 ;
0806B270 006D     lsl     r5,r5,1h                                ;r5 = 0d320
0806B272 1C20     mov     r0,r4                                   ;
0806B274 1C29     mov     r1,r5                                   ;r1 = 0d320
0806B276 F01DFCEF bl      8088C58h                                ;call 0x8088C58
0806B27A 21A0     mov     r1,0A0h                                 ;
0806B27C 0089     lsl     r1,r1,2h                                ;r1 = 0d640
0806B27E 1860     add     r0,r4,r1                                ;r0 = 0d640 + r4
0806B280 1C29     mov     r1,r5                                   ;
0806B282 F01DFCE9 bl      8088C58h                                ;call 0x8088C58
0806B286 48BA     ldr     r0,=0FFFFF83Fh                          ;
0806B288 1825     add     r5,r4,r0                                ;
0806B28A 2000     mov     r0,0h                                   ;
0806B28C 7028     strb    r0,[r5]                                 ;
0806B28E 49B9     ldr     r1,=0FFFFF841h                          ;
0806B290 1864     add     r4,r4,r1                                ;
0806B292 7020     strb    r0,[r4]                                 ;
0806B294 48B8     ldr     r0,=3000040h                            ;
0806B296 49B9     ldr     r1,=4870h                               ;
0806B298 1840     add     r0,r0,r1                                ;
0806B29A 7800     ldrb    r0,[r0]                                 ;
0806B29C 0680     lsl     r0,r0,1Ah                               ;
0806B29E 0EC0     lsr     r0,r0,1Bh                               ;
0806B2A0 F7FDFEFC bl      806909Ch                                ;
0806B2A4 782D     ldrb    r5,[r5]                                 ;
0806B2A6 2D27     cmp     r5,27h                                  ;
0806B2A8 D900     bls     806B2ACh                                ;
0806B2AA E0C2     b       806B432h                                ;

0x088C58

08088C58 1C02     mov     r2,r0                                   ;
08088C5A 1C48     add     r0,r1,1                                 ;r0 = r1 + 1
08088C5C 0FC1     lsr     r1,r0,1Fh                               ;
08088C5E 1840     add     r0,r0,r1                                ;
08088C60 1041     asr     r1,r0,1h                                ;
08088C62 2900     cmp     r1,0h                                   ;
08088C64 D005     beq     8088C72h                                ;if (r1 == 0), branch to 08088C72 (exit the function)
08088C66 2000     mov     r0,0h                                   ;r0 = 0
08088C68 8010     strh    r0,[r2]                                 ;store r0 into [r2]
08088C6A 3202     add     r2,2h                                   ;r2 += 2
08088C6C 3901     sub     r1,1h                                   ;r1--
08088C6E 2900     cmp     r1,0h                                   ;
08088C70 D1FA     bne     8088C68h                                ;if (r1 == 0), loop to 08088C68
08088C72 4770     bx      r14                                     ;

Cards data

Cards stats array

0x832B84 to 0x833C7F - Cards stats array, containing Attribute, Type, ATK and DEF

bitmap:
AAAB BBBC CCCC DDEE EEEE EEEF FFFF FFFF
A - Attribute
    If card_type ≤ 0x14
     0 - No Attribute
     1 - LIGHT
     2 - DARK
     3 - WATER
     4 - FIRE
     5 - EARTH
     6 - WIND
     7 - ---
    If card_type ≥ 0x15
     0 - MAGIC
     1 - TRAP
B - Level
C - Card Type
    0 - [] (Monster)
    1 - Dragon
    2 - Zombie
    3 - Fiend
    4 - Pyro
    5 - Sea Serpent
    6 - Rock
    7 - Machine
    8 - Fish
    9 - Dinosaur
    A - Insect
    B - Beast
    C - Beast-Warrior
    D - Plant
    E - Aqua
    F - Warrior
   10 - Winged-Beast
   11 - Fairy
   12 - Spellcaster
   13 - Thunder
   14 - Reptile
   15 - Trap
   16 - Magic
   17 - Ticket ("Cannot be used in duel")
   18 - Divine-Beast ("Cannot be used in duel", displays the unused Divine Attribute, sets the card Level to 10, and displays blank values as the ATK/DEF stats - there's a workaround to display the 4000/4000 stats from the Display ATK and DEF subroutines)
D - Monster category
   If card_type ≤ 0x14
    0 - Normal Monster
    1 - Effect Monster
    2 - Fusion Monster
    3 - Ritual Monster
   If card_type = 0x15, a 3rd bit is used
    0 - Normal
    1 - Counter
    2 - Field
    3 - Equip
    4 - Continuous
    5 - Quick
    6 - Ritual
    7 - [Unknown]
E - ATK ÷ 10
F - DEF ÷ 10

Take this example with Earthbound Spirit (ID #0001).

C8 64 30 A8 => 0xA83064C8
Card ATK :
=> DWORD(((0xA83064C8 << 14 >> 23 << 2) + (0xA83064C8 << 14 >> 23)) << 1) = 0d500
Or :
xxxx xxxx xxxx xxCC CCCC CCCx xxxx xxxx
0b000110010 = 0d50
50 × 10 = 500

Cards internal IDs

  • 0x833C80 to 0x8344FD - List of cards internal IDs, used for example for the CPU deck loading subroutine at 0x67CE0 (to be documented).

Cards names

  • 0x83663C - Card names in 6 languages : Japanese, English, German, French, Italian, Spanish