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.
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
Jump to navigation
Jump to search
Mantidactyle (talk | contribs) |
Mantidactyle (talk | contribs) |
||
Line 451: | Line 451: | ||
08067F12 DB00 blt 8067F16h ; | 08067F12 DB00 blt 8067F16h ; | ||
08067F14 E3A2 b 806865Ch ; | 08067F14 E3A2 b 806865Ch ; | ||
08067F16 480E ldr r0,=297h ; | 08067F16 480E ldr r0,=297h ;[0d663, Eternal Draught] | ||
08067F18 4281 cmp r1,r0 ; | 08067F18 4281 cmp r1,r0 ; | ||
08067F1A DC29 bgt 8067F70h ; | 08067F1A DC29 bgt 8067F70h ; | ||
Line 482: | Line 482: | ||
08067F50 0297 lsl r7,r2,0Ah ; | 08067F50 0297 lsl r7,r2,0Ah ; | ||
08067F52 0000 lsl r0,r0,0h ; | 08067F52 0000 lsl r0,r0,0h ; | ||
08067F54 4803 ldr r0,=28Fh ; | 08067F54 4803 ldr r0,=28Fh ;[0d655, Eternal Rest] | ||
08067F56 4281 cmp r1,r0 ; | 08067F56 4281 cmp r1,r0 ; | ||
08067F58 D100 bne 8067F5Ch ; | 08067F58 D100 bne 8067F5Ch ; | ||
Line 492: | Line 492: | ||
08067F64 028F lsl r7,r1,0Ah ; | 08067F64 028F lsl r7,r1,0Ah ; | ||
08067F66 0000 lsl r0,r0,0h ; | 08067F66 0000 lsl r0,r0,0h ; | ||
08067F68 4800 ldr r0,=293h ; | 08067F68 4800 ldr r0,=293h ;[0d659, Stain Storm] | ||
08067F6A E326 b 80685BAh ; | 08067F6A E326 b 80685BAh ; | ||
08067F6C 0293 lsl r3,r2,0Ah ; | 08067F6C 0293 lsl r3,r2,0Ah ; | ||
08067F6E 0000 lsl r0,r0,0h ; | 08067F6E 0000 lsl r0,r0,0h ; | ||
08067F70 4806 ldr r0,=3EEh ; | 08067F70 4806 ldr r0,=3EEh ;[0d1006, ] | ||
08067F72 4281 cmp r1,r0 ; | 08067F72 4281 cmp r1,r0 ; | ||
08067F74 D100 bne 8067F78h ; | 08067F74 D100 bne 8067F78h ; | ||
Line 508: | Line 508: | ||
08067F84 4281 cmp r1,r0 ; | 08067F84 4281 cmp r1,r0 ; | ||
08067F86 DC05 bgt 8067F94h ; | 08067F86 DC05 bgt 8067F94h ; | ||
08067F88 4801 ldr r0,=29Fh ; | 08067F88 4801 ldr r0,=29Fh ;[0d671, Harpie's Feather Duster] | ||
08067F8A E008 b 8067F9Eh ; | 08067F8A E008 b 8067F9Eh ; | ||
08067F8C 03EE lsl r6,r5,0Fh ; | 08067F8C 03EE lsl r6,r5,0Fh ; | ||
Line 514: | Line 514: | ||
08067F90 029F lsl r7,r3,0Ah ; | 08067F90 029F lsl r7,r3,0Ah ; | ||
08067F92 0000 lsl r0,r0,0h ; | 08067F92 0000 lsl r0,r0,0h ; | ||
08067F94 4804 ldr r0,=3E9h ; | 08067F94 4804 ldr r0,=3E9h ;[0d1001, Fissure] | ||
08067F96 4281 cmp r1,r0 ; | 08067F96 4281 cmp r1,r0 ; | ||
08067F98 D100 bne 8067F9Ch ; | 08067F98 D100 bne 8067F9Ch ; | ||
Line 564: | Line 564: | ||
08067FF4 3816 sub r0,16h ; | 08067FF4 3816 sub r0,16h ; | ||
08067FF6 E2FA b 80685EEh ; | 08067FF6 E2FA b 80685EEh ; | ||
08067FF8 4802 ldr r0,=42Bh ; | 08067FF8 4802 ldr r0,=42Bh ;[0d1067, Final Destiny] | ||
08067FFA 4281 cmp r1,r0 ; | 08067FFA 4281 cmp r1,r0 ; | ||
08067FFC D100 bne 8068000h ; | 08067FFC D100 bne 8068000h ; | ||
Line 572: | Line 572: | ||
08068004 042B lsl r3,r5,10h ; | 08068004 042B lsl r3,r5,10h ; | ||
08068006 0000 lsl r0,r0,0h ; | 08068006 0000 lsl r0,r0,0h ; | ||
08068008 4806 ldr r0,=434h ; | 08068008 4806 ldr r0,=434h ;[0d1076, The Reliable Guardian] | ||
0806800A 4281 cmp r1,r0 ; | 0806800A 4281 cmp r1,r0 ; | ||
0806800C DC00 bgt 8068010h ; | 0806800C DC00 bgt 8068010h ; | ||
Line 588: | Line 588: | ||
08068024 0434 lsl r4,r6,10h ; | 08068024 0434 lsl r4,r6,10h ; | ||
08068026 0000 lsl r0,r0,0h ; | 08068026 0000 lsl r0,r0,0h ; | ||
08068028 4806 ldr r0,=522h ; | 08068028 4806 ldr r0,=522h ;[0d1314, Limiter Removal] | ||
0806802A 4281 cmp r1,r0 ; | 0806802A 4281 cmp r1,r0 ; | ||
0806802C D100 bne 8068030h ; | 0806802C D100 bne 8068030h ; | ||
Line 604: | Line 604: | ||
08068044 0522 lsl r2,r4,14h ; | 08068044 0522 lsl r2,r4,14h ; | ||
08068046 0000 lsl r0,r0,0h ; | 08068046 0000 lsl r0,r0,0h ; | ||
08068048 4800 ldr r0,=4BBh ; | 08068048 4800 ldr r0,=4BBh ;[0d1211, Thousand Knives] | ||
0806804A E2B6 b 80685BAh ; | 0806804A E2B6 b 80685BAh ;branch to 080685BA | ||
0806804C 04BB lsl r3,r7,12h ; | 0806804C 04BB lsl r3,r7,12h ; | ||
0806804E 0000 lsl r0,r0,0h ; | 0806804E 0000 lsl r0,r0,0h ; | ||
Line 617: | Line 617: | ||
0806805E 385A sub r0,5Ah ; | 0806805E 385A sub r0,5Ah ; | ||
08068060 E2AB b 80685BAh ; | 08068060 E2AB b 80685BAh ; | ||
08068062 4802 ldr r0,=60Ah ; | 08068062 4802 ldr r0,=60Ah ;[0d1546, De-Fusion] | ||
08068064 4281 cmp r1,r0 ; | 08068064 4281 cmp r1,r0 ; | ||
08068066 D100 bne 806806Ah ; | 08068066 D100 bne 806806Ah ;if (internal_card_id ≠ DE_FUSION), branch to 0806806A (branch to 0806868A) | ||
08068068 E300 b 806866Ch ; | 08068068 E300 b 806866Ch ;else, branch to 0806866C | ||
0806806A E30E b 806868Ah ; | 0806806A E30E b 806868Ah ;branch to 0806868A | ||
0806806C 060A lsl r2,r1,18h ; | 0806806C 060A lsl r2,r1,18h ; | ||
0806806E 0000 lsl r0,r0,0h ; | 0806806E 0000 lsl r0,r0,0h ; | ||
Line 724: | Line 724: | ||
08068134 2001 mov r0,1h ;r0 = 1 | 08068134 2001 mov r0,1h ;r0 = 1 | ||
08068136 E024 b 8068182h ;branch to 08068182 | 08068136 E024 b 8068182h ;branch to 08068182 | ||
08068138 1C30 mov r0,r6 ; | 08068138 1C30 mov r0,r6 ;...if (internal_card_id < 1910 || internal_card_id > 1912) [not a God card] | ||
0806813A 4038 and r0,r7 ; | 0806813A 4038 and r0,r7 ; | ||
0806813C 0080 lsl r0,r0,2h ; | 0806813C 0080 lsl r0,r0,2h ;r0 = (card_id & 0x7FF) << 2 | ||
0806813E 4906 ldr r1,=8832B84h ;r1 = pointer_to_card_stats_array | 0806813E 4906 ldr r1,=8832B84h ;r1 = pointer_to_card_stats_array | ||
08068140 1840 add r0,r0,r1 ; | 08068140 1840 add r0,r0,r1 ; | ||
08068142 6800 ldr r0,[r0] ; | 08068142 6800 ldr r0,[r0] ;r0 = card_stats | ||
08068144 4018 and r0,r3 ; | 08068144 4018 and r0,r3 ; | ||
08068146 0D00 lsr r0,r0,14h ; | 08068146 0D00 lsr r0,r0,14h ; |
Revision as of 00:13, 27 August 2022
The following article is a ROM map for Yu-Gi-Oh! Worldwide Edition: Stairway to the Destined Duel.
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 a lot of card IDs 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] ; 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 ; 08067D9C 3801 sub r0,1h ; 08067D9E 4281 cmp r1,r0 ; 08067DA0 DA01 bge 8067DA6h ; 08067DA2 F000FC72 bl 806868Ah ; 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 ; 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 ; 08067EA4 E0E4 b 8068070h ; 08067EA6 6928 ldr r0,[r5,10h] ;...if (card_type == MAGIC) 08067EA8 3001 add r0,1h ; 08067EAA 6128 str r0,[r5,10h] ; 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 ; 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 ; 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 ; 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, ] 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 ; 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 ; 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 ; 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 ; 08068018 3801 sub r0,1h ; 0806801A 4281 cmp r1,r0 ; 0806801C DA00 bge 8068020h ; 0806801E E334 b 806868Ah ; 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] ; 08068076 E308 b 806868Ah ; 08068078 6E28 ldr r0,[r5,60h] ; 0806807A 3001 add r0,1h ; 0806807C 6628 str r0,[r5,60h] ; 0806807E E304 b 806868Ah ; 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] ;[r5]++ 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] ;[r5+0x8]++ 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] ;[r5+0x4]++ 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 ; 0806814C 2816 cmp r0,16h ; 0806814E DC05 bgt 806815Ch ; 08068150 2815 cmp r0,15h ; 08068152 D008 beq 8068166h ; 08068154 E00B b 806816Eh ; 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 ; 08068160 E005 b 806816Eh ; 08068162 2007 mov r0,7h ;r0 = 7 08068164 E00D b 8068182h ;branch to 08068182 08068166 2008 mov r0,8h ;r0 = 8 08068168 E00B b 8068182h ;branch to 08068182 0806816A 2009 mov r0,9h ;r0 = 9 0806816C E009 b 8068182h ;branch to 08068182 0806816E 1C30 mov r0,r6 ; 08068170 4038 and r0,r7 ; 08068172 0080 lsl r0,r0,2h ; 08068174 4A0C ldr r2,=8832B84h ; 08068176 1880 add r0,r0,r2 ; 08068178 6800 ldr r0,[r0] ; 0806817A 21C0 mov r1,0C0h ; 0806817C 0309 lsl r1,r1,0Ch ; 0806817E 4008 and r0,r1 ; 08068180 0C80 lsr r0,r0,12h ; 08068182 2803 cmp r0,3h ; 08068184 D100 bne 8068188h ;if (r0 ≠ 3) [not Obelisk the Tourmentor], branch to 08068188 08068186 E0C8 b 806831Ah ;else branch to 0806831A 08068188 1C30 mov r0,r6 ; 0806818A 4038 and r0,r7 ; 0806818C 0080 lsl r0,r0,2h ; 0806818E 4C06 ldr r4,=8832B84h ; 08068190 1900 add r0,r0,r4 ; 08068192 6800 ldr r0,[r0] ; 08068194 4018 and r0,r3 ; 08068196 0D00 lsr r0,r0,14h ; 08068198 2815 cmp r0,15h ; 0806819A DB0B blt 80681B4h ; 0806819C 2817 cmp r0,17h ; 0806819E DD05 ble 80681ACh ; 080681A0 2818 cmp r0,18h ; 080681A2 D005 beq 80681B0h ; 080681A4 E006 b 80681B4h ; 080681A6 0000 lsl r0,r0,0h ; 080681A8 2B84 cmp r3,84h ; 080681AA 0883 lsr r3,r0,2h ; 080681AC 2000 mov r0,0h ;r0 = 0 080681AE E00B b 80681C8h ;branch to 080681C8 080681B0 200A mov r0,0Ah ;r0 = 0xA 080681B2 E009 b 80681C8h ;branch to 080681C8 080681B4 1C30 mov r0,r6 ; 080681B6 4038 and r0,r7 ; 080681B8 0080 lsl r0,r0,2h ; 080681BA 4909 ldr r1,=8832B84h ; 080681BC 1840 add r0,r0,r1 ; 080681BE 6800 ldr r0,[r0] ; 080681C0 21F0 mov r1,0F0h ; 080681C2 0549 lsl r1,r1,15h ; 080681C4 4008 and r0,r1 ; 080681C6 0E40 lsr r0,r0,19h ; 080681C8 2800 cmp r0,0h ; 080681CA DA00 bge 80681CEh ; 080681CC E0A2 b 8068314h ; 080681CE 2804 cmp r0,4h ; 080681D0 DD08 ble 80681E4h ; 080681D2 2806 cmp r0,6h ; 080681D4 DD00 ble 80681D8h ; 080681D6 E09D b 8068314h ; 080681D8 6D68 ldr r0,[r5,54h] ; 080681DA 3001 add r0,1h ; 080681DC 6568 str r0,[r5,54h] ; 080681DE E09C b 806831Ah ;branch to 0806831A
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 ;
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
Internal Data for Yu-Gi-Oh! Worldwide Edition: Stairway to the Destined Duel
| |
---|---|