summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-09-10 12:26:47 -0700
committerYamaArashi <shadow962@live.com>2016-09-10 12:26:47 -0700
commit61e860247e5489e6d7dec67176ec52ef86b7869f (patch)
treea2102440e7dd90c6bcba2c13790d5f0529c9ed6e
parent8765b09e09dfaf271b0ae4974f615f43486bd7e2 (diff)
decompile functions for setting pokemon data
-rw-r--r--asm/rom_803D1FC.s900
-rw-r--r--include/pokemon.h6
-rw-r--r--src/pokemon_2.c324
3 files changed, 321 insertions, 909 deletions
diff --git a/asm/rom_803D1FC.s b/asm/rom_803D1FC.s
index e25cf776f..ed89d9d89 100644
--- a/asm/rom_803D1FC.s
+++ b/asm/rom_803D1FC.s
@@ -6,906 +6,6 @@
.text
- thumb_func_start SetMonData
-SetMonData: @ 803D1FC
- push {lr}
- adds r3, r0, 0
- adds r0, r1, 0
- subs r0, 0x37
- cmp r0, 0xA
- bhi _0803D2E0
- lsls r0, 2
- ldr r1, _0803D214
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803D214: .4byte _0803D218
- .align 2, 0
-_0803D218:
- .4byte _0803D244
- .4byte _0803D25C
- .4byte _0803D266
- .4byte _0803D276
- .4byte _0803D286
- .4byte _0803D296
- .4byte _0803D2A6
- .4byte _0803D2B6
- .4byte _0803D2C6
- .4byte _0803D2D6
- .4byte _0803D2E6
-_0803D244:
- ldrb r1, [r2]
- ldrb r0, [r2, 0x1]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x2]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 24
- adds r1, r0
- str r1, [r3, 0x50]
- b _0803D2E6
-_0803D25C:
- ldrb r1, [r2]
- adds r0, r3, 0
- adds r0, 0x54
- strb r1, [r0]
- b _0803D2E6
-_0803D266:
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x56
- strh r0, [r1]
- b _0803D2E6
-_0803D276:
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x58
- strh r0, [r1]
- b _0803D2E6
-_0803D286:
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x5A
- strh r0, [r1]
- b _0803D2E6
-_0803D296:
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x5C
- strh r0, [r1]
- b _0803D2E6
-_0803D2A6:
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x5E
- strh r0, [r1]
- b _0803D2E6
-_0803D2B6:
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x60
- strh r0, [r1]
- b _0803D2E6
-_0803D2C6:
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- adds r1, r3, 0
- adds r1, 0x62
- strh r0, [r1]
- b _0803D2E6
-_0803D2D6:
- ldrb r1, [r2]
- adds r0, r3, 0
- adds r0, 0x55
- strb r1, [r0]
- b _0803D2E6
-_0803D2E0:
- adds r0, r3, 0
- bl SetBoxMonData
-_0803D2E6:
- pop {r0}
- bx r0
- thumb_func_end SetMonData
-
- thumb_func_start SetBoxMonData
-SetBoxMonData: @ 803D2EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r7, r0, 0
- mov r10, r1
- adds r4, r2, 0
- movs r0, 0
- mov r8, r0
- mov r9, r0
- movs r6, 0
- movs r5, 0
- cmp r1, 0xA
- ble _0803D36C
- ldr r1, [r7]
- adds r0, r7, 0
- movs r2, 0
- bl GetSubstruct
- mov r8, r0
- ldr r1, [r7]
- adds r0, r7, 0
- movs r2, 0x1
- bl GetSubstruct
- mov r9, r0
- ldr r1, [r7]
- adds r0, r7, 0
- movs r2, 0x2
- bl GetSubstruct
- adds r6, r0, 0
- ldr r1, [r7]
- adds r0, r7, 0
- movs r2, 0x3
- bl GetSubstruct
- adds r5, r0, 0
- adds r0, r7, 0
- bl DecryptBoxMon
- adds r0, r7, 0
- bl CalculateBoxMonChecksum
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r7, 0x1C]
- cmp r0, r1
- beq _0803D36C
- ldrb r0, [r7, 0x13]
- movs r1, 0x1
- orrs r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r7, 0x13]
- ldrb r0, [r5, 0x7]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r5, 0x7]
- adds r0, r7, 0
- bl EncryptBoxMon
- b _0803D8F6
-_0803D36C:
- mov r0, r10
- cmp r0, 0x4F
- bls _0803D374
- b _0803D8E2
-_0803D374:
- lsls r0, 2
- ldr r1, _0803D380
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803D380: .4byte _0803D384
- .align 2, 0
-_0803D384:
- .4byte _0803D4C4
- .4byte _0803D4DC
- .4byte _0803D4F4
- .4byte _0803D50A
- .4byte _0803D510
- .4byte _0803D520
- .4byte _0803D532
- .4byte _0803D544
- .4byte _0803D55A
- .4byte _0803D560
- .4byte _0803D56C
- .4byte _0803D578
- .4byte _0803D598
- .4byte _0803D5D0
- .4byte _0803D5D0
- .4byte _0803D5D0
- .4byte _0803D5D0
- .4byte _0803D5E4
- .4byte _0803D5E4
- .4byte _0803D5E4
- .4byte _0803D5E4
- .4byte _0803D5C0
- .4byte _0803D614
- .4byte _0803D61A
- .4byte _0803D620
- .4byte _0803D5A6
- .4byte _0803D5F0
- .4byte _0803D5F6
- .4byte _0803D5FC
- .4byte _0803D602
- .4byte _0803D608
- .4byte _0803D60E
- .4byte _0803D5C8
- .4byte _0803D626
- .4byte _0803D638
- .4byte _0803D63E
- .4byte _0803D644
- .4byte _0803D658
- .4byte _0803D670
- .4byte _0803D696
- .4byte _0803D6AA
- .4byte _0803D6C4
- .4byte _0803D6DA
- .4byte _0803D6F4
- .4byte _0803D70C
- .4byte _0803D720
- .4byte _0803D750
- .4byte _0803D62C
- .4byte _0803D632
- .4byte _0803D686
- .4byte _0803D760
- .4byte _0803D76E
- .4byte _0803D784
- .4byte _0803D79C
- .4byte _0803D7AC
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D8E2
- .4byte _0803D89A
- .4byte _0803D7C2
- .4byte _0803D7D2
- .4byte _0803D7E0
- .4byte _0803D7F0
- .4byte _0803D800
- .4byte _0803D810
- .4byte _0803D820
- .4byte _0803D830
- .4byte _0803D846
- .4byte _0803D856
- .4byte _0803D864
- .4byte _0803D874
- .4byte _0803D88A
-_0803D4C4:
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r4, 0x2]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r4, 0x3]
- lsls r0, 24
- adds r1, r0
- str r1, [r7]
- b _0803D8E2
-_0803D4DC:
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r4, 0x2]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r4, 0x3]
- lsls r0, 24
- adds r1, r0
- str r1, [r7, 0x4]
- b _0803D8E2
-_0803D4F4:
- movs r2, 0
- adds r3, r7, 0
- adds r3, 0x8
-_0803D4FA:
- adds r0, r3, r2
- adds r1, r4, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x9
- ble _0803D4FA
- b _0803D8E2
-_0803D50A:
- ldrb r0, [r4]
- strb r0, [r7, 0x12]
- b _0803D8E2
-_0803D510:
- ldrb r0, [r4]
- movs r1, 0x1
- ands r1, r0
- ldrb r2, [r7, 0x13]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- b _0803D73E
-_0803D520:
- ldrb r0, [r4]
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r7, 0x13]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- b _0803D73E
-_0803D532:
- ldrb r0, [r4]
- movs r1, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r7, 0x13]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- b _0803D73E
-_0803D544:
- movs r2, 0
- adds r3, r7, 0
- adds r3, 0x14
-_0803D54A:
- adds r0, r3, r2
- adds r1, r4, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x6
- ble _0803D54A
- b _0803D8E2
-_0803D55A:
- ldrb r0, [r4]
- strb r0, [r7, 0x1B]
- b _0803D8E2
-_0803D560:
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- strh r1, [r7, 0x1C]
- b _0803D8E2
-_0803D56C:
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- strh r1, [r7, 0x1E]
- b _0803D8E2
-_0803D578:
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- mov r0, r8
- strh r1, [r0]
- lsls r1, 16
- cmp r1, 0
- beq _0803D590
- ldrb r0, [r7, 0x13]
- movs r1, 0x2
- b _0803D73E
-_0803D590:
- ldrb r1, [r7, 0x13]
- movs r0, 0x3
- negs r0, r0
- b _0803D74A
-_0803D598:
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- mov r0, r8
- strh r1, [r0, 0x2]
- b _0803D8E2
-_0803D5A6:
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r4, 0x2]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r4, 0x3]
- lsls r0, 24
- adds r1, r0
- mov r0, r8
- str r1, [r0, 0x4]
- b _0803D8E2
-_0803D5C0:
- ldrb r0, [r4]
- mov r1, r8
- strb r0, [r1, 0x8]
- b _0803D8E2
-_0803D5C8:
- ldrb r0, [r4]
- mov r1, r8
- strb r0, [r1, 0x9]
- b _0803D8E2
-_0803D5D0:
- mov r2, r10
- subs r2, 0xD
- lsls r2, 1
- add r2, r9
- ldrb r1, [r4]
- ldrb r0, [r4, 0x1]
- lsls r0, 8
- adds r1, r0
- strh r1, [r2]
- b _0803D8E2
-_0803D5E4:
- mov r0, r9
- add r0, r10
- subs r0, 0x9
- ldrb r1, [r4]
- strb r1, [r0]
- b _0803D8E2
-_0803D5F0:
- ldrb r0, [r4]
- strb r0, [r6]
- b _0803D8E2
-_0803D5F6:
- ldrb r0, [r4]
- strb r0, [r6, 0x1]
- b _0803D8E2
-_0803D5FC:
- ldrb r0, [r4]
- strb r0, [r6, 0x2]
- b _0803D8E2
-_0803D602:
- ldrb r0, [r4]
- strb r0, [r6, 0x3]
- b _0803D8E2
-_0803D608:
- ldrb r0, [r4]
- strb r0, [r6, 0x4]
- b _0803D8E2
-_0803D60E:
- ldrb r0, [r4]
- strb r0, [r6, 0x5]
- b _0803D8E2
-_0803D614:
- ldrb r0, [r4]
- strb r0, [r6, 0x6]
- b _0803D8E2
-_0803D61A:
- ldrb r0, [r4]
- strb r0, [r6, 0x7]
- b _0803D8E2
-_0803D620:
- ldrb r0, [r4]
- strb r0, [r6, 0x8]
- b _0803D8E2
-_0803D626:
- ldrb r0, [r4]
- strb r0, [r6, 0x9]
- b _0803D8E2
-_0803D62C:
- ldrb r0, [r4]
- strb r0, [r6, 0xA]
- b _0803D8E2
-_0803D632:
- ldrb r0, [r4]
- strb r0, [r6, 0xB]
- b _0803D8E2
-_0803D638:
- ldrb r0, [r4]
- strb r0, [r5]
- b _0803D8E2
-_0803D63E:
- ldrb r0, [r4]
- strb r0, [r5, 0x1]
- b _0803D8E2
-_0803D644:
- ldrb r1, [r4]
- movs r0, 0x7F
- ands r1, r0
- ldrb r2, [r5, 0x2]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x2]
- b _0803D8E2
-_0803D658:
- ldrb r1, [r4]
- movs r0, 0xF
- ands r1, r0
- lsls r1, 7
- ldrh r2, [r5, 0x2]
- ldr r0, _0803D66C
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x2]
- b _0803D8E2
- .align 2, 0
-_0803D66C: .4byte 0xfffff87f
-_0803D670:
- ldrb r1, [r4]
- movs r0, 0xF
- ands r1, r0
- lsls r1, 3
- ldrb r2, [r5, 0x3]
- movs r0, 0x79
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x3]
- b _0803D8E2
-_0803D686:
- ldrb r0, [r4]
- lsls r0, 7
- ldrb r2, [r5, 0x3]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x3]
- b _0803D8E2
-_0803D696:
- ldrb r1, [r4]
- movs r0, 0x1F
- ands r1, r0
- ldrb r2, [r5, 0x4]
- movs r0, 0x20
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x4]
- b _0803D8E2
-_0803D6AA:
- ldrb r1, [r4]
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 5
- ldrh r2, [r5, 0x4]
- ldr r0, _0803D6C0
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- b _0803D8E2
- .align 2, 0
-_0803D6C0: .4byte 0xfffffc1f
-_0803D6C4:
- ldrb r1, [r4]
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0x7D
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- b _0803D8E2
-_0803D6DA:
- ldrb r2, [r4]
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 15
- ldr r0, [r5, 0x4]
- ldr r1, _0803D6F0
- ands r0, r1
- orrs r0, r2
- str r0, [r5, 0x4]
- b _0803D8E2
- .align 2, 0
-_0803D6F0: .4byte 0xfff07fff
-_0803D6F4:
- ldrb r1, [r4]
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 4
- ldrh r2, [r5, 0x6]
- ldr r0, _0803D708
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x6]
- b _0803D8E2
- .align 2, 0
-_0803D708: .4byte 0xfffffe0f
-_0803D70C:
- ldrb r1, [r4]
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r5, 0x7]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- b _0803D8E0
-_0803D720:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 6
- ldrb r2, [r5, 0x7]
- movs r0, 0x41
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x7]
- lsls r0, 25
- cmp r0, 0
- bge _0803D744
- ldrb r0, [r7, 0x13]
- movs r1, 0x4
-_0803D73E:
- orrs r0, r1
- strb r0, [r7, 0x13]
- b _0803D8E2
-_0803D744:
- ldrb r1, [r7, 0x13]
- movs r0, 0x5
- negs r0, r0
-_0803D74A:
- ands r0, r1
- strb r0, [r7, 0x13]
- b _0803D8E2
-_0803D750:
- ldrb r0, [r4]
- lsls r0, 7
- ldrb r2, [r5, 0x7]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x7]
- b _0803D8E2
-_0803D760:
- ldrb r1, [r4]
- movs r0, 0x7
- ands r1, r0
- ldrb r2, [r5, 0x8]
- movs r0, 0x8
- negs r0, r0
- b _0803D77C
-_0803D76E:
- ldrb r1, [r4]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r2, [r5, 0x8]
- movs r0, 0x39
- negs r0, r0
-_0803D77C:
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x8]
- b _0803D8E2
-_0803D784:
- ldrb r1, [r4]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r2, [r5, 0x8]
- ldr r0, _0803D798
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x8]
- b _0803D8E2
- .align 2, 0
-_0803D798: .4byte 0xfffffe3f
-_0803D79C:
- ldrb r1, [r4]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r5, 0x9]
- movs r0, 0xF
- negs r0, r0
- b _0803D7BA
-_0803D7AC:
- ldrb r1, [r4]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r2, [r5, 0x9]
- movs r0, 0x71
- negs r0, r0
-_0803D7BA:
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x9]
- b _0803D8E2
-_0803D7C2:
- ldrb r0, [r4]
- lsls r0, 7
- ldrb r2, [r5, 0x9]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x9]
- b _0803D8E2
-_0803D7D2:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- ldrb r2, [r5, 0xA]
- movs r0, 0x2
- negs r0, r0
- b _0803D83E
-_0803D7E0:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r5, 0xA]
- movs r0, 0x3
- negs r0, r0
- b _0803D83E
-_0803D7F0:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0xA]
- movs r0, 0x5
- negs r0, r0
- b _0803D83E
-_0803D800:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 3
- ldrb r2, [r5, 0xA]
- movs r0, 0x9
- negs r0, r0
- b _0803D83E
-_0803D810:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 4
- ldrb r2, [r5, 0xA]
- movs r0, 0x11
- negs r0, r0
- b _0803D83E
-_0803D820:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 5
- ldrb r2, [r5, 0xA]
- movs r0, 0x21
- negs r0, r0
- b _0803D83E
-_0803D830:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 6
- ldrb r2, [r5, 0xA]
- movs r0, 0x41
- negs r0, r0
-_0803D83E:
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0xA]
- b _0803D8E2
-_0803D846:
- ldrb r0, [r4]
- lsls r0, 7
- ldrb r2, [r5, 0xA]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0xA]
- b _0803D8E2
-_0803D856:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- ldrb r2, [r5, 0xB]
- movs r0, 0x2
- negs r0, r0
- b _0803D882
-_0803D864:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r5, 0xB]
- movs r0, 0x3
- negs r0, r0
- b _0803D882
-_0803D874:
- ldrb r1, [r4]
- movs r0, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0xB]
- movs r0, 0x5
- negs r0, r0
-_0803D882:
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0xB]
- b _0803D8E2
-_0803D88A:
- ldrb r0, [r4]
- lsls r0, 3
- ldrb r2, [r5, 0xB]
- movs r1, 0x7
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0xB]
- b _0803D8E2
-_0803D89A:
- ldrb r1, [r4]
- movs r4, 0x1F
- adds r2, r1, 0
- ands r2, r4
- ldrb r3, [r5, 0x4]
- movs r0, 0x20
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r5, 0x4]
- lsrs r1, 5
- ands r1, r4
- lsls r1, 5
- ldrh r2, [r5, 0x4]
- ldr r0, _0803D904
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- ldrb r1, [r5, 0x5]
- movs r0, 0x7D
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x5]
- ldr r0, [r5, 0x4]
- ldr r1, _0803D908
- ands r0, r1
- str r0, [r5, 0x4]
- ldrh r1, [r5, 0x6]
- ldr r0, _0803D90C
- ands r0, r1
- strh r0, [r5, 0x6]
- ldrb r1, [r5, 0x7]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
-_0803D8E0:
- strb r0, [r5, 0x7]
-_0803D8E2:
- mov r0, r10
- cmp r0, 0xA
- ble _0803D8F6
- adds r0, r7, 0
- bl CalculateBoxMonChecksum
- strh r0, [r7, 0x1C]
- adds r0, r7, 0
- bl EncryptBoxMon
-_0803D8F6:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803D904: .4byte 0xfffffc1f
-_0803D908: .4byte 0xfff07fff
-_0803D90C: .4byte 0xfffffe0f
- thumb_func_end SetBoxMonData
-
thumb_func_start CopyMon
CopyMon: @ 803D910
push {lr}
diff --git a/include/pokemon.h b/include/pokemon.h
index a0b1d3126..11de26acc 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -183,8 +183,8 @@ struct BoxPokemon
u8 nickname[POKEMON_NAME_LENGTH];
u8 language;
u8 isBadEgg:1;
- u8 sanity2:1;
- u8 sanity3:1;
+ u8 hasSpecies:1;
+ u8 isEgg:1;
u8 unused:5;
u8 otName[OT_NAME_LENGTH];
u8 markings;
@@ -376,7 +376,7 @@ void DecryptBoxMon(struct BoxPokemon *boxMon);
union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType);
u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data);
u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data);
-void SetMonData(struct Pokemon *mon, s32 field, u8 *data);
+void SetMonData(struct Pokemon *mon, s32 field, const u8 *data);
void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data);
u8 GetNature(struct Pokemon *mon);
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 647808d14..0f3fc73c5 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -222,7 +222,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
{
boxMon->isBadEgg = 1;
- boxMon->sanity3 = 1;
+ boxMon->isEgg = 1;
substruct3->isEgg = 1;
}
}
@@ -242,7 +242,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
StringCopy(data, gBadEggNickname);
retVal = StringLength(data);
}
- else if (boxMon->sanity3)
+ else if (boxMon->isEgg)
{
StringCopy(data, gEggNickname);
retVal = StringLength(data);
@@ -251,7 +251,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
{
retVal = 0;
- while (retVal < 10 && boxMon->nickname[retVal] != EOS)
+ while (retVal < POKEMON_NAME_LENGTH && boxMon->nickname[retVal] != EOS)
{
data[retVal] = boxMon->nickname[retVal];
retVal++;
@@ -270,16 +270,16 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
retVal = boxMon->isBadEgg;
break;
case MON_DATA_SANITY_BIT2:
- retVal = boxMon->sanity2;
+ retVal = boxMon->hasSpecies;
break;
case MON_DATA_SANITY_BIT3:
- retVal = boxMon->sanity3;
+ retVal = boxMon->isEgg;
break;
case MON_DATA_OT_NAME:
{
retVal = 0;
- while (retVal < 7 && boxMon->otName[retVal] != EOS)
+ while (retVal < OT_NAME_LENGTH && boxMon->otName[retVal] != EOS)
{
data[retVal] = boxMon->otName[retVal];
retVal++;
@@ -537,3 +537,315 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
return retVal;
}
+
+#define SET8(lhs) (lhs) = *data
+#define SET16(lhs) (lhs) = data[0] + (data[1] << 8)
+#define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
+
+void SetMonData(struct Pokemon *mon, s32 field, const u8 *data)
+{
+ switch (field)
+ {
+ case MON_DATA_STATUS:
+ SET32(mon->status);
+ break;
+ case MON_DATA_LEVEL:
+ SET8(mon->level);
+ break;
+ case MON_DATA_HP:
+ SET16(mon->hp);
+ break;
+ case MON_DATA_MAX_HP:
+ SET16(mon->maxHP);
+ break;
+ case MON_DATA_ATK:
+ SET16(mon->attack);
+ break;
+ case MON_DATA_DEF:
+ SET16(mon->defense);
+ break;
+ case MON_DATA_SPD:
+ SET16(mon->speed);
+ break;
+ case MON_DATA_SPATK:
+ SET16(mon->spAttack);
+ break;
+ case MON_DATA_SPDEF:
+ SET16(mon->spDefense);
+ break;
+ case MON_DATA_64:
+ SET8(mon->pokerus);
+ break;
+ case MON_DATA_SPECIES2:
+ break;
+ default:
+ SetBoxMonData(&mon->box, field, data);
+ break;
+ }
+}
+
+void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data)
+{
+ struct PokemonSubstruct0 *substruct0 = NULL;
+ struct PokemonSubstruct1 *substruct1 = NULL;
+ struct PokemonSubstruct2 *substruct2 = NULL;
+ struct PokemonSubstruct3 *substruct3 = NULL;
+
+ if (field > MON_DATA_10)
+ {
+ substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
+ substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
+ substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2);
+ substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3);
+
+ DecryptBoxMon(boxMon);
+
+ if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
+ {
+ boxMon->isBadEgg = 1;
+ boxMon->isEgg = 1;
+ substruct3->isEgg = 1;
+ EncryptBoxMon(boxMon);
+ return;
+ }
+ }
+
+ switch (field)
+ {
+ case MON_DATA_PERSONALITY:
+ SET32(boxMon->personality);
+ break;
+ case MON_DATA_OT_ID:
+ SET32(boxMon->otId);
+ break;
+ case MON_DATA_NICKNAME:
+ {
+ s32 i;
+ for (i = 0; i < POKEMON_NAME_LENGTH; i++)
+ boxMon->nickname[i] = data[i];
+ break;
+ }
+ case MON_DATA_LANGUAGE:
+ SET8(boxMon->language);
+ break;
+ case MON_DATA_SANITY_BIT1:
+ SET8(boxMon->isBadEgg);
+ break;
+ case MON_DATA_SANITY_BIT2:
+ SET8(boxMon->hasSpecies);
+ break;
+ case MON_DATA_SANITY_BIT3:
+ SET8(boxMon->isEgg);
+ break;
+ case MON_DATA_OT_NAME:
+ {
+ s32 i;
+ for (i = 0; i < OT_NAME_LENGTH; i++)
+ boxMon->otName[i] = data[i];
+ break;
+ }
+ case MON_DATA_MARKINGS:
+ SET8(boxMon->markings);
+ break;
+ case MON_DATA_CHECKSUM:
+ SET16(boxMon->checksum);
+ break;
+ case MON_DATA_10:
+ SET16(boxMon->unknown);
+ break;
+ case MON_DATA_SPECIES:
+ {
+ SET16(substruct0->species);
+ if (substruct0->species)
+ boxMon->hasSpecies = 1;
+ else
+ boxMon->hasSpecies = 0;
+ break;
+ }
+ case MON_DATA_HELD_ITEM:
+ SET16(substruct0->heldItem);
+ break;
+ case MON_DATA_EXP:
+ SET32(substruct0->experience);
+ break;
+ case MON_DATA_PP_BONUSES:
+ SET8(substruct0->ppBonuses);
+ break;
+ case MON_DATA_FRIENDSHIP:
+ SET8(substruct0->friendship);
+ break;
+ case MON_DATA_MOVE1:
+ case MON_DATA_MOVE2:
+ case MON_DATA_MOVE3:
+ case MON_DATA_MOVE4:
+ SET16(substruct1->moves[field - MON_DATA_MOVE1]);
+ break;
+ case MON_DATA_PP1:
+ case MON_DATA_PP2:
+ case MON_DATA_PP3:
+ case MON_DATA_PP4:
+ SET8(substruct1->pp[field - MON_DATA_PP1]);
+ break;
+ case MON_DATA_HP_EV:
+ SET8(substruct2->hpEV);
+ break;
+ case MON_DATA_ATK_EV:
+ SET8(substruct2->attackEV);
+ break;
+ case MON_DATA_DEF_EV:
+ SET8(substruct2->defenseEV);
+ break;
+ case MON_DATA_SPD_EV:
+ SET8(substruct2->speedEV);
+ break;
+ case MON_DATA_SPATK_EV:
+ SET8(substruct2->spAttackEV);
+ break;
+ case MON_DATA_SPDEF_EV:
+ SET8(substruct2->spDefenseEV);
+ break;
+ case MON_DATA_COOL:
+ SET8(substruct2->cool);
+ break;
+ case MON_DATA_BEAUTY:
+ SET8(substruct2->beauty);
+ break;
+ case MON_DATA_CUTE:
+ SET8(substruct2->cute);
+ break;
+ case MON_DATA_SMART:
+ SET8(substruct2->smart);
+ break;
+ case MON_DATA_TOUGH:
+ SET8(substruct2->tough);
+ break;
+ case MON_DATA_SHEEN:
+ SET8(substruct2->sheen);
+ break;
+ case MON_DATA_POKERUS:
+ SET8(substruct3->pokerus);
+ break;
+ case MON_DATA_MET_LOCATION:
+ SET8(substruct3->metLocation);
+ break;
+ case MON_DATA_MET_LEVEL:
+ {
+ u8 metLevel = *data;
+ substruct3->metLevel = metLevel;
+ break;
+ }
+ case MON_DATA_MET_GAME:
+ SET8(substruct3->metGame);
+ break;
+ case MON_DATA_POKEBALL:
+ {
+ u8 pokeball = *data;
+ substruct3->pokeball = pokeball;
+ break;
+ }
+ case MON_DATA_OT_GENDER:
+ SET8(substruct3->otGender);
+ break;
+ case MON_DATA_HP_IV:
+ SET8(substruct3->hpIV);
+ break;
+ case MON_DATA_ATK_IV:
+ SET8(substruct3->attackIV);
+ break;
+ case MON_DATA_DEF_IV:
+ SET8(substruct3->defenseIV);
+ break;
+ case MON_DATA_SPD_IV:
+ SET8(substruct3->speedIV);
+ break;
+ case MON_DATA_SPATK_IV:
+ SET8(substruct3->spAttackIV);
+ break;
+ case MON_DATA_SPDEF_IV:
+ SET8(substruct3->spDefenseIV);
+ break;
+ case MON_DATA_IS_EGG:
+ SET8(substruct3->isEgg);
+ if (substruct3->isEgg)
+ boxMon->isEgg = 1;
+ else
+ boxMon->isEgg = 0;
+ break;
+ case MON_DATA_ALT_ABILITY:
+ SET8(substruct3->altAbility);
+ break;
+ case MON_DATA_COOL_RIBBON:
+ SET8(substruct3->coolRibbon);
+ break;
+ case MON_DATA_BEAUTY_RIBBON:
+ SET8(substruct3->beautyRibbon);
+ break;
+ case MON_DATA_CUTE_RIBBON:
+ SET8(substruct3->cuteRibbon);
+ break;
+ case MON_DATA_SMART_RIBBON:
+ SET8(substruct3->smartRibbon);
+ break;
+ case MON_DATA_TOUGH_RIBBON:
+ SET8(substruct3->toughRibbon);
+ break;
+ case MON_DATA_CHAMPION_RIBBON:
+ SET8(substruct3->championRibbon);
+ break;
+ case MON_DATA_WINNING_RIBBON:
+ SET8(substruct3->winningRibbon);
+ break;
+ case MON_DATA_VICTORY_RIBBON:
+ SET8(substruct3->victoryRibbon);
+ break;
+ case MON_DATA_ARTIST_RIBBON:
+ SET8(substruct3->artistRibbon);
+ break;
+ case MON_DATA_EFFORT_RIBBON:
+ SET8(substruct3->effortRibbon);
+ break;
+ case MON_DATA_GIFT_RIBBON_1:
+ SET8(substruct3->giftRibbon1);
+ break;
+ case MON_DATA_GIFT_RIBBON_2:
+ SET8(substruct3->giftRibbon2);
+ break;
+ case MON_DATA_GIFT_RIBBON_3:
+ SET8(substruct3->giftRibbon3);
+ break;
+ case MON_DATA_GIFT_RIBBON_4:
+ SET8(substruct3->giftRibbon4);
+ break;
+ case MON_DATA_GIFT_RIBBON_5:
+ SET8(substruct3->giftRibbon5);
+ break;
+ case MON_DATA_GIFT_RIBBON_6:
+ SET8(substruct3->giftRibbon6);
+ break;
+ case MON_DATA_GIFT_RIBBON_7:
+ SET8(substruct3->giftRibbon7);
+ break;
+ case MON_DATA_FATEFUL_ENCOUNTER:
+ SET8(substruct3->fatefulEncounter);
+ break;
+ case MON_DATA_IVS:
+ {
+ u32 ivs = *data; // Bug: Only the HP / Attack IVs are read. The rest become 0.
+ substruct3->hpIV = ivs & 0x1F;
+ substruct3->attackIV = (ivs >> 5) & 0x1F;
+ substruct3->defenseIV = (ivs >> 10) & 0x1F;
+ substruct3->speedIV = (ivs >> 15) & 0x1F;
+ substruct3->spAttackIV = (ivs >> 20) & 0x1F;
+ substruct3->spDefenseIV = (ivs >> 25) & 0x1F;
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (field > MON_DATA_10)
+ {
+ boxMon->checksum = CalculateBoxMonChecksum(boxMon);
+ EncryptBoxMon(boxMon);
+ }
+}