summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/pokemon_s.s677
-rw-r--r--arm9/asm/unk_020842DC.s2
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/11/asm/module_11.s8
-rw-r--r--arm9/src/pokemon.c341
-rw-r--r--include/move_data.h2
-rw-r--r--include/pokemon.h5
7 files changed, 351 insertions, 686 deletions
diff --git a/arm9/asm/pokemon_s.s b/arm9/asm/pokemon_s.s
index c901ba32..d88114bc 100644
--- a/arm9/asm/pokemon_s.s
+++ b/arm9/asm/pokemon_s.s
@@ -24,683 +24,6 @@ UNK_021C5AC0: ; 0x021C5AC0
.text
- thumb_func_start AddMonPartyStatEncrypted
-AddMonPartyStatEncrypted: ; 0x02068018
- push {r4-r6, lr}
- add r5, r0, #0x0
- ldrh r0, [r5, #0x4]
- add r4, r1, #0x0
- add r6, r2, #0x0
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- bne _02068066
- add r0, r5, #0x0
- ldr r2, [r5, #0x0]
- add r0, #0x88
- mov r1, #0x64
- bl MonDecryptSegment
- add r0, r5, #0x0
- ldrh r2, [r5, #0x6]
- add r0, #0x8
- mov r1, #0x80
- bl MonDecryptSegment
- add r0, r5, #0x0
- add r0, #0x8
- mov r1, #0x80
- bl CalcMonChecksum
- ldrh r1, [r5, #0x6]
- cmp r0, r1
- beq _02068066
- cmp r0, r1
- beq _02068058
- bl ErrorHandling
-_02068058:
- ldrh r2, [r5, #0x6]
- add r0, r5, #0x0
- add r0, #0x8
- mov r1, #0x80
- bl MonEncryptSegment
- pop {r4-r6, pc}
-_02068066:
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl AddMonData
- ldrh r0, [r5, #0x4]
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- bne _0206809C
- add r0, r5, #0x0
- ldr r2, [r5, #0x0]
- add r0, #0x88
- mov r1, #0x64
- bl MonEncryptSegment
- add r0, r5, #0x0
- add r0, #0x8
- mov r1, #0x80
- bl CalcMonChecksum
- strh r0, [r5, #0x6]
- add r0, r5, #0x0
- ldrh r2, [r5, #0x6]
- add r0, #0x8
- mov r1, #0x80
- bl MonEncryptSegment
-_0206809C:
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start AddMonData
-AddMonData: ; 0x020680A0
- push {r3, lr}
- add r3, r1, #0x0
- sub r3, #0x9f
- cmp r3, #0xa
- bhi _020680F8
- add r3, r3, r3
- add r3, pc
- ldrh r3, [r3, #0x6]
- lsl r3, r3, #0x10
- asr r3, r3, #0x10
- add pc, r3
-_020680B6: ; jump table (using 16-bit offset)
- .short _020680F2 - _020680B6 - 2; case 0
- .short _020680F2 - _020680B6 - 2; case 1
- .short _020680F2 - _020680B6 - 2; case 2
- .short _020680CC - _020680B6 - 2; case 3
- .short _020680F2 - _020680B6 - 2; case 4
- .short _020680F2 - _020680B6 - 2; case 5
- .short _020680F2 - _020680B6 - 2; case 6
- .short _020680F2 - _020680B6 - 2; case 7
- .short _020680F2 - _020680B6 - 2; case 8
- .short _020680F2 - _020680B6 - 2; case 9
- .short _020680F2 - _020680B6 - 2; case 10
-_020680CC:
- add r1, r0, #0x0
- add r1, #0x90
- ldrh r3, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x8e
- ldrh r1, [r1, #0x0]
- add r1, r1, r2
- cmp r1, r3
- ble _020680E4
- add r0, #0x8e
- strh r3, [r0, #0x0]
- pop {r3, pc}
-_020680E4:
- add r1, r0, #0x0
- add r1, #0x8e
- ldrh r1, [r1, #0x0]
- add r0, #0x8e
- add r1, r1, r2
- strh r1, [r0, #0x0]
- pop {r3, pc}
-_020680F2:
- bl ErrorHandling
- pop {r3, pc}
-_020680F8:
- bl AddBoxMonData
- pop {r3, pc}
- .balign 4
-
- thumb_func_start AddBoxMonData
-AddBoxMonData: ; 0x02068100
- push {r4-r7, lr}
- sub sp, #0xc
- add r7, r1, #0x0
- add r1, r0, #0x0
- add r6, r2, #0x0
- ldr r1, [r1, #0x0]
- str r0, [sp, #0x0]
- mov r2, #0x0
- bl GetSubstruct
- add r4, r0, #0x0
- ldr r0, [sp, #0x0]
- mov r2, #0x1
- add r1, r0, #0x0
- ldr r1, [r1, #0x0]
- bl GetSubstruct
- add r5, r0, #0x0
- ldr r0, [sp, #0x0]
- mov r2, #0x2
- add r1, r0, #0x0
- ldr r1, [r1, #0x0]
- bl GetSubstruct
- ldr r0, [sp, #0x0]
- mov r2, #0x3
- add r1, r0, #0x0
- ldr r1, [r1, #0x0]
- bl GetSubstruct
- cmp r7, #0xb2
- bls _02068142
- b _02068500
-_02068142:
- add r0, r7, r7
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_0206814E: ; jump table (using 16-bit offset)
- .short _02068500 - _0206814E - 2; case 0
- .short _02068500 - _0206814E - 2; case 1
- .short _02068500 - _0206814E - 2; case 2
- .short _02068500 - _0206814E - 2; case 3
- .short _02068500 - _0206814E - 2; case 4
- .short _02068500 - _0206814E - 2; case 5
- .short _02068500 - _0206814E - 2; case 6
- .short _02068500 - _0206814E - 2; case 7
- .short _020682B4 - _0206814E - 2; case 8
- .short _020682D8 - _0206814E - 2; case 9
- .short _02068500 - _0206814E - 2; case 10
- .short _02068500 - _0206814E - 2; case 11
- .short _02068500 - _0206814E - 2; case 12
- .short _020682EE - _0206814E - 2; case 13
- .short _020682F8 - _0206814E - 2; case 14
- .short _02068302 - _0206814E - 2; case 15
- .short _0206830C - _0206814E - 2; case 16
- .short _02068316 - _0206814E - 2; case 17
- .short _02068320 - _0206814E - 2; case 18
- .short _0206832A - _0206814E - 2; case 19
- .short _02068340 - _0206814E - 2; case 20
- .short _02068356 - _0206814E - 2; case 21
- .short _0206836C - _0206814E - 2; case 22
- .short _02068382 - _0206814E - 2; case 23
- .short _02068398 - _0206814E - 2; case 24
- .short _02068500 - _0206814E - 2; case 25
- .short _02068500 - _0206814E - 2; case 26
- .short _02068500 - _0206814E - 2; case 27
- .short _02068500 - _0206814E - 2; case 28
- .short _02068500 - _0206814E - 2; case 29
- .short _02068500 - _0206814E - 2; case 30
- .short _02068500 - _0206814E - 2; case 31
- .short _02068500 - _0206814E - 2; case 32
- .short _02068500 - _0206814E - 2; case 33
- .short _02068500 - _0206814E - 2; case 34
- .short _02068500 - _0206814E - 2; case 35
- .short _02068500 - _0206814E - 2; case 36
- .short _02068500 - _0206814E - 2; case 37
- .short _02068500 - _0206814E - 2; case 38
- .short _02068500 - _0206814E - 2; case 39
- .short _02068500 - _0206814E - 2; case 40
- .short _02068500 - _0206814E - 2; case 41
- .short _02068500 - _0206814E - 2; case 42
- .short _02068500 - _0206814E - 2; case 43
- .short _02068500 - _0206814E - 2; case 44
- .short _02068500 - _0206814E - 2; case 45
- .short _02068500 - _0206814E - 2; case 46
- .short _02068500 - _0206814E - 2; case 47
- .short _02068500 - _0206814E - 2; case 48
- .short _02068500 - _0206814E - 2; case 49
- .short _02068500 - _0206814E - 2; case 50
- .short _02068500 - _0206814E - 2; case 51
- .short _02068500 - _0206814E - 2; case 52
- .short _02068500 - _0206814E - 2; case 53
- .short _02068500 - _0206814E - 2; case 54
- .short _02068500 - _0206814E - 2; case 55
- .short _02068500 - _0206814E - 2; case 56
- .short _02068500 - _0206814E - 2; case 57
- .short _020683AE - _0206814E - 2; case 58
- .short _020683AE - _0206814E - 2; case 59
- .short _020683AE - _0206814E - 2; case 60
- .short _020683AE - _0206814E - 2; case 61
- .short _020683EA - _0206814E - 2; case 62
- .short _020683EA - _0206814E - 2; case 63
- .short _020683EA - _0206814E - 2; case 64
- .short _020683EA - _0206814E - 2; case 65
- .short _02068504 - _0206814E - 2; case 66
- .short _02068504 - _0206814E - 2; case 67
- .short _02068504 - _0206814E - 2; case 68
- .short _02068504 - _0206814E - 2; case 69
- .short _02068404 - _0206814E - 2; case 70
- .short _0206842E - _0206814E - 2; case 71
- .short _02068458 - _0206814E - 2; case 72
- .short _02068482 - _0206814E - 2; case 73
- .short _020684AC - _0206814E - 2; case 74
- .short _020684D6 - _0206814E - 2; case 75
- .short _02068500 - _0206814E - 2; case 76
- .short _02068500 - _0206814E - 2; case 77
- .short _02068500 - _0206814E - 2; case 78
- .short _02068500 - _0206814E - 2; case 79
- .short _02068500 - _0206814E - 2; case 80
- .short _02068500 - _0206814E - 2; case 81
- .short _02068500 - _0206814E - 2; case 82
- .short _02068500 - _0206814E - 2; case 83
- .short _02068500 - _0206814E - 2; case 84
- .short _02068500 - _0206814E - 2; case 85
- .short _02068500 - _0206814E - 2; case 86
- .short _02068500 - _0206814E - 2; case 87
- .short _02068500 - _0206814E - 2; case 88
- .short _02068500 - _0206814E - 2; case 89
- .short _02068500 - _0206814E - 2; case 90
- .short _02068500 - _0206814E - 2; case 91
- .short _02068500 - _0206814E - 2; case 92
- .short _02068500 - _0206814E - 2; case 93
- .short _02068500 - _0206814E - 2; case 94
- .short _02068500 - _0206814E - 2; case 95
- .short _02068500 - _0206814E - 2; case 96
- .short _02068500 - _0206814E - 2; case 97
- .short _02068500 - _0206814E - 2; case 98
- .short _02068500 - _0206814E - 2; case 99
- .short _02068500 - _0206814E - 2; case 100
- .short _02068500 - _0206814E - 2; case 101
- .short _02068500 - _0206814E - 2; case 102
- .short _02068500 - _0206814E - 2; case 103
- .short _02068500 - _0206814E - 2; case 104
- .short _02068500 - _0206814E - 2; case 105
- .short _02068500 - _0206814E - 2; case 106
- .short _02068500 - _0206814E - 2; case 107
- .short _02068500 - _0206814E - 2; case 108
- .short _02068500 - _0206814E - 2; case 109
- .short _02068500 - _0206814E - 2; case 110
- .short _02068500 - _0206814E - 2; case 111
- .short _02068500 - _0206814E - 2; case 112
- .short _02068500 - _0206814E - 2; case 113
- .short _02068500 - _0206814E - 2; case 114
- .short _02068500 - _0206814E - 2; case 115
- .short _02068500 - _0206814E - 2; case 116
- .short _02068500 - _0206814E - 2; case 117
- .short _02068500 - _0206814E - 2; case 118
- .short _02068500 - _0206814E - 2; case 119
- .short _02068500 - _0206814E - 2; case 120
- .short _02068500 - _0206814E - 2; case 121
- .short _02068500 - _0206814E - 2; case 122
- .short _02068500 - _0206814E - 2; case 123
- .short _02068500 - _0206814E - 2; case 124
- .short _02068500 - _0206814E - 2; case 125
- .short _02068500 - _0206814E - 2; case 126
- .short _02068500 - _0206814E - 2; case 127
- .short _02068500 - _0206814E - 2; case 128
- .short _02068500 - _0206814E - 2; case 129
- .short _02068500 - _0206814E - 2; case 130
- .short _02068500 - _0206814E - 2; case 131
- .short _02068500 - _0206814E - 2; case 132
- .short _02068500 - _0206814E - 2; case 133
- .short _02068500 - _0206814E - 2; case 134
- .short _02068500 - _0206814E - 2; case 135
- .short _02068500 - _0206814E - 2; case 136
- .short _02068500 - _0206814E - 2; case 137
- .short _02068500 - _0206814E - 2; case 138
- .short _02068500 - _0206814E - 2; case 139
- .short _02068500 - _0206814E - 2; case 140
- .short _02068500 - _0206814E - 2; case 141
- .short _02068500 - _0206814E - 2; case 142
- .short _02068500 - _0206814E - 2; case 143
- .short _02068500 - _0206814E - 2; case 144
- .short _02068500 - _0206814E - 2; case 145
- .short _02068500 - _0206814E - 2; case 146
- .short _02068500 - _0206814E - 2; case 147
- .short _02068500 - _0206814E - 2; case 148
- .short _02068500 - _0206814E - 2; case 149
- .short _02068500 - _0206814E - 2; case 150
- .short _02068500 - _0206814E - 2; case 151
- .short _02068500 - _0206814E - 2; case 152
- .short _02068500 - _0206814E - 2; case 153
- .short _02068500 - _0206814E - 2; case 154
- .short _02068500 - _0206814E - 2; case 155
- .short _02068500 - _0206814E - 2; case 156
- .short _02068500 - _0206814E - 2; case 157
- .short _02068500 - _0206814E - 2; case 158
- .short _02068500 - _0206814E - 2; case 159
- .short _02068500 - _0206814E - 2; case 160
- .short _02068500 - _0206814E - 2; case 161
- .short _02068500 - _0206814E - 2; case 162
- .short _02068500 - _0206814E - 2; case 163
- .short _02068500 - _0206814E - 2; case 164
- .short _02068500 - _0206814E - 2; case 165
- .short _02068500 - _0206814E - 2; case 166
- .short _02068500 - _0206814E - 2; case 167
- .short _02068500 - _0206814E - 2; case 168
- .short _02068500 - _0206814E - 2; case 169
- .short _02068500 - _0206814E - 2; case 170
- .short _02068500 - _0206814E - 2; case 171
- .short _02068500 - _0206814E - 2; case 172
- .short _02068500 - _0206814E - 2; case 173
- .short _02068500 - _0206814E - 2; case 174
- .short _02068500 - _0206814E - 2; case 175
- .short _02068500 - _0206814E - 2; case 176
- .short _02068500 - _0206814E - 2; case 177
- .short _02068500 - _0206814E - 2; case 178
-_020682B4:
- ldrh r0, [r4, #0x0]
- mov r1, #0x64
- bl GetMonExpBySpeciesAndLevel
- ldr r1, [r4, #0x8]
- add r1, r1, r6
- cmp r1, r0
- bls _020682D2
- ldrh r0, [r4, #0x0]
- mov r1, #0x64
- bl GetMonExpBySpeciesAndLevel
- add sp, #0xc
- str r0, [r4, #0x8]
- pop {r4-r7, pc}
-_020682D2:
- add sp, #0xc
- str r1, [r4, #0x8]
- pop {r4-r7, pc}
-_020682D8:
- ldrb r0, [r4, #0xc]
- add r0, r0, r6
- cmp r0, #0xff
- ble _020682E8
- mov r0, #0xff
- add sp, #0xc
- strb r0, [r4, #0xc]
- pop {r4-r7, pc}
-_020682E8:
- add sp, #0xc
- strb r0, [r4, #0xc]
- pop {r4-r7, pc}
-_020682EE:
- ldrb r0, [r4, #0x10]
- add sp, #0xc
- add r0, r0, r6
- strb r0, [r4, #0x10]
- pop {r4-r7, pc}
-_020682F8:
- ldrb r0, [r4, #0x11]
- add sp, #0xc
- add r0, r0, r6
- strb r0, [r4, #0x11]
- pop {r4-r7, pc}
-_02068302:
- ldrb r0, [r4, #0x12]
- add sp, #0xc
- add r0, r0, r6
- strb r0, [r4, #0x12]
- pop {r4-r7, pc}
-_0206830C:
- ldrb r0, [r4, #0x13]
- add sp, #0xc
- add r0, r0, r6
- strb r0, [r4, #0x13]
- pop {r4-r7, pc}
-_02068316:
- ldrb r0, [r4, #0x14]
- add sp, #0xc
- add r0, r0, r6
- strb r0, [r4, #0x14]
- pop {r4-r7, pc}
-_02068320:
- ldrb r0, [r4, #0x15]
- add sp, #0xc
- add r0, r0, r6
- strb r0, [r4, #0x15]
- pop {r4-r7, pc}
-_0206832A:
- ldrb r0, [r4, #0x16]
- add r0, r0, r6
- cmp r0, #0xff
- ble _0206833A
- mov r0, #0xff
- add sp, #0xc
- strb r0, [r4, #0x16]
- pop {r4-r7, pc}
-_0206833A:
- add sp, #0xc
- strb r0, [r4, #0x16]
- pop {r4-r7, pc}
-_02068340:
- ldrb r0, [r4, #0x17]
- add r0, r0, r6
- cmp r0, #0xff
- ble _02068350
- mov r0, #0xff
- add sp, #0xc
- strb r0, [r4, #0x17]
- pop {r4-r7, pc}
-_02068350:
- add sp, #0xc
- strb r0, [r4, #0x17]
- pop {r4-r7, pc}
-_02068356:
- ldrb r0, [r4, #0x18]
- add r0, r0, r6
- cmp r0, #0xff
- ble _02068366
- mov r0, #0xff
- add sp, #0xc
- strb r0, [r4, #0x18]
- pop {r4-r7, pc}
-_02068366:
- add sp, #0xc
- strb r0, [r4, #0x18]
- pop {r4-r7, pc}
-_0206836C:
- ldrb r0, [r4, #0x19]
- add r0, r0, r6
- cmp r0, #0xff
- ble _0206837C
- mov r0, #0xff
- add sp, #0xc
- strb r0, [r4, #0x19]
- pop {r4-r7, pc}
-_0206837C:
- add sp, #0xc
- strb r0, [r4, #0x19]
- pop {r4-r7, pc}
-_02068382:
- ldrb r0, [r4, #0x1a]
- add r0, r0, r6
- cmp r0, #0xff
- ble _02068392
- mov r0, #0xff
- add sp, #0xc
- strb r0, [r4, #0x1a]
- pop {r4-r7, pc}
-_02068392:
- add sp, #0xc
- strb r0, [r4, #0x1a]
- pop {r4-r7, pc}
-_02068398:
- ldrb r0, [r4, #0x1b]
- add r0, r0, r6
- cmp r0, #0xff
- ble _020683A8
- mov r0, #0xff
- add sp, #0xc
- strb r0, [r4, #0x1b]
- pop {r4-r7, pc}
-_020683A8:
- add sp, #0xc
- strb r0, [r4, #0x1b]
- pop {r4-r7, pc}
-_020683AE:
- add r0, r5, #0x0
- str r0, [sp, #0x4]
- add r0, #0xc
- str r0, [sp, #0x4]
- sub r7, #0x3a
- ldr r1, [sp, #0x4]
- lsl r0, r7, #0x1
- str r0, [sp, #0x8]
- add r4, r5, #0x0
- ldrh r0, [r5, r0]
- ldrb r1, [r1, r7]
- add r4, #0x8
- bl FUN_0206AB30
- ldrb r1, [r4, r7]
- add r1, r6, r1
- cmp r1, r0
- ble _020683E4
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0x4]
- ldrh r0, [r5, r0]
- ldrb r1, [r1, r7]
- bl FUN_0206AB30
- add sp, #0xc
- strb r0, [r4, r7]
- pop {r4-r7, pc}
-_020683E4:
- add sp, #0xc
- strb r1, [r4, r7]
- pop {r4-r7, pc}
-_020683EA:
- add r5, #0xc
- sub r7, #0x3e
- ldrb r0, [r5, r7]
- add r0, r6, r0
- cmp r0, #0x3
- ble _020683FE
- mov r0, #0x3
- add sp, #0xc
- strb r0, [r5, r7]
- pop {r4-r7, pc}
-_020683FE:
- add sp, #0xc
- strb r0, [r5, r7]
- pop {r4-r7, pc}
-_02068404:
- ldr r1, [r5, #0x10]
- lsl r0, r1, #0x1b
- lsr r0, r0, #0x1b
- add r2, r0, r6
- cmp r2, #0x1f
- bls _0206841E
- mov r0, #0x1f
- bic r1, r0
- mov r0, #0x1f
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_0206841E:
- mov r0, #0x1f
- bic r1, r0
- mov r0, #0x1f
- and r0, r2
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_0206842E:
- ldr r1, [r5, #0x10]
- lsl r0, r1, #0x16
- lsr r0, r0, #0x1b
- add r2, r0, r6
- cmp r2, #0x1f
- ldr r0, _02068508 ; =0xFFFFFC1F
- bls _0206844A
- and r1, r0
- mov r0, #0x3e
- lsl r0, r0, #0x4
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_0206844A:
- and r1, r0
- lsl r0, r2, #0x1b
- lsr r0, r0, #0x16
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_02068458:
- ldr r1, [r5, #0x10]
- lsl r0, r1, #0x11
- lsr r0, r0, #0x1b
- add r2, r0, r6
- cmp r2, #0x1f
- ldr r0, _0206850C ; =0xFFFF83FF
- bls _02068474
- and r1, r0
- mov r0, #0x1f
- lsl r0, r0, #0xa
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_02068474:
- and r1, r0
- lsl r0, r2, #0x1b
- lsr r0, r0, #0x11
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_02068482:
- ldr r1, [r5, #0x10]
- lsl r0, r1, #0xc
- lsr r0, r0, #0x1b
- add r2, r0, r6
- cmp r2, #0x1f
- ldr r0, _02068510 ; =0xFFF07FFF
- bls _0206849E
- and r1, r0
- mov r0, #0x3e
- lsl r0, r0, #0xe
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_0206849E:
- and r1, r0
- lsl r0, r2, #0x1b
- lsr r0, r0, #0xc
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_020684AC:
- ldr r1, [r5, #0x10]
- lsl r0, r1, #0x7
- lsr r0, r0, #0x1b
- add r2, r0, r6
- cmp r2, #0x1f
- ldr r0, _02068514 ; =0xFE0FFFFF
- bls _020684C8
- and r1, r0
- mov r0, #0x1f
- lsl r0, r0, #0x14
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_020684C8:
- and r1, r0
- lsl r0, r2, #0x1b
- lsr r0, r0, #0x7
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_020684D6:
- ldr r1, [r5, #0x10]
- lsl r0, r1, #0x2
- lsr r0, r0, #0x1b
- add r2, r0, r6
- cmp r2, #0x1f
- ldr r0, _02068518 ; =0xC1FFFFFF
- bls _020684F2
- and r1, r0
- mov r0, #0x3e
- lsl r0, r0, #0x18
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_020684F2:
- and r1, r0
- lsl r0, r2, #0x1b
- lsr r0, r0, #0x2
- orr r0, r1
- add sp, #0xc
- str r0, [r5, #0x10]
- pop {r4-r7, pc}
-_02068500:
- bl ErrorHandling
-_02068504:
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-_02068508: .word 0xFFFFFC1F
-_0206850C: .word 0xFFFF83FF
-_02068510: .word 0xFFF07FFF
-_02068514: .word 0xFE0FFFFF
-_02068518: .word 0xC1FFFFFF
-
thumb_func_start AllocAndLoadMonPersonal
AllocAndLoadMonPersonal: ; 0x0206851C
push {r3-r5, lr}
diff --git a/arm9/asm/unk_020842DC.s b/arm9/asm/unk_020842DC.s
index f57fe7e9..f06037c2 100644
--- a/arm9/asm/unk_020842DC.s
+++ b/arm9/asm/unk_020842DC.s
@@ -801,7 +801,7 @@ _0208495C:
add r2, r0, #0x0
add r0, r5, #0x0
mov r1, #0x8
- bl AddMonPartyStatEncrypted
+ bl AddMonData
add r0, r5, #0x0
bl CalcMonLevelAndStats
ldr r0, [sp, #0x50]
diff --git a/arm9/global.inc b/arm9/global.inc
index f7346352..21cfb40c 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -4723,7 +4723,7 @@
.extern GetBoxMonData
.extern SetMonData
.extern SetBoxMonData
-.extern AddMonPartyStatEncrypted
+.extern AddMonData
.extern AllocAndLoadMonPersonal
.extern GetPersonalAttr
.extern FreeMonPersonal
diff --git a/arm9/modules/11/asm/module_11.s b/arm9/modules/11/asm/module_11.s
index ab76b727..2e80cbba 100644
--- a/arm9/modules/11/asm/module_11.s
+++ b/arm9/modules/11/asm/module_11.s
@@ -6313,7 +6313,7 @@ _022308C4:
ldr r0, [sp, #0x18]
ldr r2, [sp, #0x20]
add r1, #0x3a
- bl AddMonPartyStatEncrypted
+ bl AddMonData
ldr r0, [sp, #0x10]
cmp r0, r5
beq _0223091C
@@ -6384,7 +6384,7 @@ _0223097E:
ldr r0, [sp, #0x18]
ldr r2, [sp, #0x20]
add r1, #0x3a
- bl AddMonPartyStatEncrypted
+ bl AddMonData
ldr r0, [sp, #0x10]
cmp r0, r5
beq _022309B4
@@ -6524,7 +6524,7 @@ _02230AC2:
ldr r0, [sp, #0x18]
ldr r2, [sp, #0x20]
mov r1, #0xa2
- bl AddMonPartyStatEncrypted
+ bl AddMonData
ldr r0, [sp, #0x38]
mov r1, #0x17
lsl r0, r0, #0x10
@@ -6692,7 +6692,7 @@ _02230C28:
ldr r0, [sp, #0x18]
ldr r2, [sp, #8]
mov r1, #9
- bl AddMonPartyStatEncrypted
+ bl AddMonData
ldr r0, [sp, #0x10]
cmp r0, r5
beq _02230C3E
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index c1f69ded..4e673496 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -1393,3 +1393,344 @@ void SetBoxMonDataInternal(struct BoxPokemon * boxmon, int attr, void * value)
}
#undef VALUE
}
+
+void AddMonData(struct Pokemon * pokemon, int attr, int value)
+{
+ u16 checksum;
+ if (!pokemon->box.party_lock)
+ {
+ DECRYPT_PTY(pokemon);
+ DECRYPT_BOX(&pokemon->box);
+ checksum = CHECKSUM(&pokemon->box);
+ if (checksum != pokemon->box.checksum)
+ {
+ GF_ASSERT(checksum == pokemon->box.checksum);
+ ENCRYPT_BOX(&pokemon->box);
+ return;
+ }
+ }
+ AddMonDataInternal(pokemon, attr, value);
+ if (!pokemon->box.party_lock)
+ {
+ ENCRYPT_PTY(pokemon);
+ pokemon->box.checksum = CHECKSUM(&pokemon->box);
+ ENCRYPT_BOX(&pokemon->box);
+ }
+}
+
+void AddMonDataInternal(struct Pokemon * pokemon, int attr, int value)
+{
+ s32 maxHp;
+ switch (attr)
+ {
+ case MON_DATA_HP:
+ maxHp = pokemon->party.maxHp;
+ if ((s32)(pokemon->party.hp + value) > maxHp)
+ pokemon->party.hp = maxHp;
+ else
+ pokemon->party.hp += value;
+ break;
+ case MON_DATA_STATUS:
+ case MON_DATA_LEVEL:
+ case MON_DATA_CAPSULE:
+ case MON_DATA_MAXHP:
+ case MON_DATA_ATK:
+ case MON_DATA_DEF:
+ case MON_DATA_SPEED:
+ case MON_DATA_SPATK:
+ case MON_DATA_SPDEF:
+ case MON_DATA_SEAL_STRUCT:
+ // case MON_DATA_SEAL_COORDS:
+ GF_ASSERT(0);
+ break;
+ default:
+ AddBoxMonData(&pokemon->box, attr, value);
+ break;
+ }
+}
+
+void AddBoxMonData(struct BoxPokemon * boxmon, int attr, int value)
+{
+ PokemonDataBlockA *blockA = &GetSubstruct(boxmon, boxmon->pid, 0)->blockA;
+ PokemonDataBlockB *blockB = &GetSubstruct(boxmon, boxmon->pid, 1)->blockB;
+ PokemonDataBlockC *blockC = &GetSubstruct(boxmon, boxmon->pid, 2)->blockC;
+ PokemonDataBlockD *blockD = &GetSubstruct(boxmon, boxmon->pid, 3)->blockD;
+
+ switch (attr)
+ {
+ case MON_DATA_EXPERIENCE:
+ if (blockA->exp + value > GetMonExpBySpeciesAndLevel(blockA->species, 100))
+ blockA->exp = GetMonExpBySpeciesAndLevel(blockA->species, 100);
+ else
+ blockA->exp += value;
+ break;
+ case MON_DATA_FRIENDSHIP:
+ if (blockA->friendship + value > 255)
+ blockA->friendship = 255;
+ else
+ blockA->friendship += value;
+ break;
+ case MON_DATA_HP_EV:
+ blockA->hpEV += value;
+ break;
+ case MON_DATA_ATK_EV:
+ blockA->atkEV += value;
+ break;
+ case MON_DATA_DEF_EV:
+ blockA->defEV += value;
+ break;
+ case MON_DATA_SPEED_EV:
+ blockA->spdEV += value;
+ break;
+ case MON_DATA_SPATK_EV:
+ blockA->spatkEV += value;
+ break;
+ case MON_DATA_SPDEF_EV:
+ blockA->spdefEV += value;
+ break;
+ case MON_DATA_COOL:
+ if (blockA->coolStat + value > 255)
+ blockA->coolStat = 255;
+ else
+ blockA->coolStat += value;
+ break;
+ case MON_DATA_BEAUTY:
+ if (blockA->beautyStat + value > 255)
+ blockA->beautyStat = 255;
+ else
+ blockA->beautyStat += value;
+ break;
+ case MON_DATA_CUTE:
+ if (blockA->cuteStat + value > 255)
+ blockA->cuteStat = 255;
+ else
+ blockA->cuteStat += value;
+ break;
+ case MON_DATA_SMART:
+ if (blockA->smartStat + value > 255)
+ blockA->smartStat = 255;
+ else
+ blockA->smartStat += value;
+ break;
+ case MON_DATA_TOUGH:
+ if (blockA->toughStat + value > 255)
+ blockA->toughStat = 255;
+ else
+ blockA->toughStat += value;
+ break;
+ case MON_DATA_SHEEN:
+ if (blockA->sheen + value > 255)
+ blockA->sheen = 255;
+ else
+ blockA->sheen += value;
+ break;
+ case MON_DATA_MOVE1PP:
+ case MON_DATA_MOVE2PP:
+ case MON_DATA_MOVE3PP:
+ case MON_DATA_MOVE4PP:
+ if (blockB->movePP[attr - MON_DATA_MOVE1PP] + value > FUN_0206AB30(blockB->moves[attr - MON_DATA_MOVE1PP], blockB->movePpUps[attr - MON_DATA_MOVE1PP]))
+ blockB->movePP[attr - MON_DATA_MOVE1PP] = FUN_0206AB30(blockB->moves[attr - MON_DATA_MOVE1PP], blockB->movePpUps[attr - MON_DATA_MOVE1PP]);
+ else
+ blockB->movePP[attr - MON_DATA_MOVE1PP] += value;
+ break;
+ case MON_DATA_MOVE1PPUP:
+ case MON_DATA_MOVE2PPUP:
+ case MON_DATA_MOVE3PPUP:
+ case MON_DATA_MOVE4PPUP:
+ if (blockB->movePpUps[attr - MON_DATA_MOVE1PPUP] + value > 3)
+ blockB->movePpUps[attr - MON_DATA_MOVE1PPUP] = 3;
+ else
+ blockB->movePpUps[attr - MON_DATA_MOVE1PPUP] += value;
+ break;
+ case MON_DATA_MOVE1MAXPP:
+ case MON_DATA_MOVE2MAXPP:
+ case MON_DATA_MOVE3MAXPP:
+ case MON_DATA_MOVE4MAXPP:
+ break;
+ case MON_DATA_HP_IV:
+ if (blockB->hpIV + value > 31)
+ blockB->hpIV = 31;
+ else
+ blockB->hpIV += value;
+ break;
+ case MON_DATA_ATK_IV:
+ if (blockB->atkIV + value > 31)
+ blockB->atkIV = 31;
+ else
+ blockB->atkIV += value;
+ break;
+ case MON_DATA_DEF_IV:
+ if (blockB->defIV + value > 31)
+ blockB->defIV = 31;
+ else
+ blockB->defIV += value;
+ break;
+ case MON_DATA_SPEED_IV:
+ if (blockB->spdIV + value > 31)
+ blockB->spdIV = 31;
+ else
+ blockB->spdIV += value;
+ break;
+ case MON_DATA_SPATK_IV:
+ if (blockB->spatkIV + value > 31)
+ blockB->spatkIV = 31;
+ else
+ blockB->spatkIV += value;
+ break;
+ case MON_DATA_SPDEF_IV:
+ if (blockB->spdefIV + value > 31)
+ blockB->spdefIV = 31;
+ else
+ blockB->spdefIV += value;
+ break;
+ case MON_DATA_PERSONALITY:
+ case MON_DATA_PARTY_LOCK:
+ case MON_DATA_BOX_LOCK:
+ case MON_DATA_CHECKSUM_FAILED:
+ case MON_DATA_CHECKSUM:
+ case MON_DATA_SPECIES:
+ case MON_DATA_HELD_ITEM:
+ case MON_DATA_OTID:
+ case MON_DATA_ABILITY:
+ case MON_DATA_MARKINGS:
+ case MON_DATA_GAME_LANGUAGE:
+ case MON_DATA_SINNOH_CHAMP_RIBBON:
+ case MON_DATA_SINNOH_RIBBON_26:
+ case MON_DATA_SINNOH_RIBBON_27:
+ case MON_DATA_SINNOH_RIBBON_28:
+ case MON_DATA_SINNOH_RIBBON_29:
+ case MON_DATA_SINNOH_RIBBON_30:
+ case MON_DATA_SINNOH_RIBBON_31:
+ case MON_DATA_SINNOH_RIBBON_32:
+ case MON_DATA_SINNOH_RIBBON_33:
+ case MON_DATA_SINNOH_RIBBON_34:
+ case MON_DATA_SINNOH_RIBBON_35:
+ case MON_DATA_SINNOH_RIBBON_36:
+ case MON_DATA_SINNOH_RIBBON_37:
+ case MON_DATA_SINNOH_RIBBON_38:
+ case MON_DATA_SINNOH_RIBBON_39:
+ case MON_DATA_SINNOH_RIBBON_40:
+ case MON_DATA_SINNOH_RIBBON_41:
+ case MON_DATA_SINNOH_RIBBON_42:
+ case MON_DATA_SINNOH_RIBBON_43:
+ case MON_DATA_SINNOH_RIBBON_44:
+ case MON_DATA_SINNOH_RIBBON_45:
+ case MON_DATA_SINNOH_RIBBON_46:
+ case MON_DATA_SINNOH_RIBBON_47:
+ case MON_DATA_SINNOH_RIBBON_48:
+ case MON_DATA_SINNOH_RIBBON_49:
+ case MON_DATA_SINNOH_RIBBON_50:
+ case MON_DATA_SINNOH_RIBBON_51:
+ case MON_DATA_SINNOH_RIBBON_52:
+ case MON_DATA_SINNOH_RIBBON_53:
+ case MON_DATA_MOVE1:
+ case MON_DATA_MOVE2:
+ case MON_DATA_MOVE3:
+ case MON_DATA_MOVE4:
+ case MON_DATA_IS_EGG:
+ case MON_DATA_HAS_NICKNAME:
+ case MON_DATA_COOL_RIBBON:
+ case MON_DATA_HOENN_RIBBON_79:
+ case MON_DATA_HOENN_RIBBON_80:
+ case MON_DATA_HOENN_RIBBON_81:
+ case MON_DATA_HOENN_RIBBON_82:
+ case MON_DATA_HOENN_RIBBON_83:
+ case MON_DATA_HOENN_RIBBON_84:
+ case MON_DATA_HOENN_RIBBON_85:
+ case MON_DATA_HOENN_RIBBON_86:
+ case MON_DATA_HOENN_RIBBON_87:
+ case MON_DATA_HOENN_RIBBON_88:
+ case MON_DATA_HOENN_RIBBON_89:
+ case MON_DATA_HOENN_RIBBON_90:
+ case MON_DATA_HOENN_RIBBON_91:
+ case MON_DATA_HOENN_RIBBON_92:
+ case MON_DATA_HOENN_RIBBON_93:
+ case MON_DATA_HOENN_RIBBON_94:
+ case MON_DATA_HOENN_RIBBON_95:
+ case MON_DATA_HOENN_RIBBON_96:
+ case MON_DATA_HOENN_RIBBON_97:
+ case MON_DATA_HOENN_RIBBON_98:
+ case MON_DATA_HOENN_RIBBON_99:
+ case MON_DATA_HOENN_RIBBON_100:
+ case MON_DATA_HOENN_RIBBON_101:
+ case MON_DATA_HOENN_RIBBON_102:
+ case MON_DATA_HOENN_RIBBON_103:
+ case MON_DATA_HOENN_RIBBON_104:
+ case MON_DATA_HOENN_RIBBON_105:
+ case MON_DATA_HOENN_RIBBON_106:
+ case MON_DATA_HOENN_RIBBON_107:
+ case MON_DATA_HOENN_RIBBON_108:
+ case MON_DATA_HOENN_RIBBON_109:
+ case MON_DATA_FATEFUL_ENCOUNTER:
+ case MON_DATA_GENDER:
+ case MON_DATA_FORME:
+ case MON_DATA_RESERVED_113:
+ case MON_DATA_RESERVED_114:
+ case MON_DATA_UNUSED_115:
+ case MON_DATA_NICKNAME:
+ case MON_DATA_NICKNAME_2:
+ case MON_DATA_NICKNAME_3:
+ case MON_DATA_NICKNAME_4:
+ case MON_DATA_UNK_120:
+ case MON_DATA_GAME_VERSION:
+ case MON_DATA_SINNOH_RIBBON_122:
+ case MON_DATA_SINNOH_RIBBON_123:
+ case MON_DATA_SINNOH_RIBBON_124:
+ case MON_DATA_SINNOH_RIBBON_125:
+ case MON_DATA_SINNOH_RIBBON_126:
+ case MON_DATA_SINNOH_RIBBON_127:
+ case MON_DATA_SINNOH_RIBBON_128:
+ case MON_DATA_SINNOH_RIBBON_129:
+ case MON_DATA_SINNOH_RIBBON_130:
+ case MON_DATA_SINNOH_RIBBON_131:
+ case MON_DATA_SINNOH_RIBBON_132:
+ case MON_DATA_SINNOH_RIBBON_133:
+ case MON_DATA_SINNOH_RIBBON_134:
+ case MON_DATA_SINNOH_RIBBON_135:
+ case MON_DATA_SINNOH_RIBBON_136:
+ case MON_DATA_SINNOH_RIBBON_137:
+ case MON_DATA_SINNOH_RIBBON_138:
+ case MON_DATA_SINNOH_RIBBON_139:
+ case MON_DATA_SINNOH_RIBBON_140:
+ case MON_DATA_SINNOH_RIBBON_141:
+ case MON_DATA_SINNOH_RIBBON_142:
+ case MON_DATA_OT_NAME:
+ case MON_DATA_OT_NAME_2:
+ case MON_DATA_EGG_MET_YEAR:
+ case MON_DATA_EGG_MET_MONTH:
+ case MON_DATA_EGG_MET_DAY:
+ case MON_DATA_MET_YEAR:
+ case MON_DATA_MET_MONTH:
+ case MON_DATA_MET_DAY:
+ case MON_DATA_EGG_MET_LOCATION:
+ case MON_DATA_MET_LOCATION:
+ case MON_DATA_POKERUS:
+ case MON_DATA_POKEBALL:
+ case MON_DATA_MET_LEVEL:
+ case MON_DATA_MET_GENDER:
+ case MON_DATA_ENCOUNTER_TYPE:
+ case MON_DATA_RESERVED_158:
+ case MON_DATA_STATUS:
+ case MON_DATA_LEVEL:
+ case MON_DATA_CAPSULE:
+ case MON_DATA_HP:
+ case MON_DATA_MAXHP:
+ case MON_DATA_ATK:
+ case MON_DATA_DEF:
+ case MON_DATA_SPEED:
+ case MON_DATA_SPATK:
+ case MON_DATA_SPDEF:
+ case MON_DATA_SEAL_STRUCT:
+ case MON_DATA_SEAL_COORDS:
+ case MON_DATA_SPECIES_EXISTS:
+ case MON_DATA_SANITY_IS_EGG:
+ case MON_DATA_SPECIES2:
+ case MON_DATA_IVS_WORD:
+ case MON_DATA_UNK_175:
+ case MON_DATA_TYPE_1:
+ case MON_DATA_TYPE_2:
+ case MON_DATA_SPECIES_NAME:
+ default:
+ GF_ASSERT(0);
+ }
+}
diff --git a/include/move_data.h b/include/move_data.h
index d4e3c128..975bcf8d 100644
--- a/include/move_data.h
+++ b/include/move_data.h
@@ -1,6 +1,6 @@
#ifndef POKEDIAMOND_MOVE_DATA_H
#define POKEDIAMOND_MOVE_DATA_H
-u32 FUN_0206AB30(u16 move, u8 ppUp);
+int FUN_0206AB30(u16 move, u8 ppUp);
#endif //POKEDIAMOND_MOVE_DATA_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 451c7d1b..d2166c22 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -504,7 +504,8 @@ void SetMonDataInternal(struct Pokemon * pokemon, int attr, void * ptr);
void SetMonData(struct Pokemon * pokemon, int attr, void * ptr);
void SetBoxMonDataInternal(struct BoxPokemon * pokemon, int attr, void * ptr);
void SetBoxMonData(struct BoxPokemon * pokemon, int attr, void * ptr);
-void AddMonData(struct Pokemon * pokemon, int attr, u32 amount);
-void AddBoxMonData(struct Pokemon * pokemon, int attr, u32 amount);
+void AddMonData(struct Pokemon * pokemon, int attr, int amount);
+void AddMonDataInternal(struct Pokemon * pokemon, int attr, int amount);
+void AddBoxMonData(struct BoxPokemon * pokemon, int attr, int amount);
#endif //POKEDIAMOND_POKEMON_H