summaryrefslogtreecommitdiff
path: root/arm9/asm/script_pokemon_util.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/script_pokemon_util.s')
-rw-r--r--arm9/asm/script_pokemon_util.s436
1 files changed, 436 insertions, 0 deletions
diff --git a/arm9/asm/script_pokemon_util.s b/arm9/asm/script_pokemon_util.s
new file mode 100644
index 00000000..49ac1fa6
--- /dev/null
+++ b/arm9/asm/script_pokemon_util.s
@@ -0,0 +1,436 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ thumb_func_start MonNotFaintedOrEgg
+MonNotFaintedOrEgg: ; 0x0204A01C
+ push {r4, lr}
+ mov r1, #0xa2
+ mov r2, #0x0
+ add r4, r0, #0x0
+ bl GetMonData
+ cmp r0, #0x0
+ bne _0204A030
+ mov r0, #0x0
+ pop {r4, pc}
+_0204A030:
+ add r0, r4, #0x0
+ mov r1, #0x4c
+ mov r2, #0x0
+ bl GetMonData
+ cmp r0, #0x0
+ bne _0204A042
+ mov r0, #0x1
+ pop {r4, pc}
+_0204A042:
+ mov r0, #0x0
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start GiveMon
+GiveMon: ; 0x0204A048
+ push {r3-r7, lr}
+ sub sp, #0x20
+ add r6, r1, #0x0
+ add r5, r0, #0x0
+ add r0, r6, #0x0
+ add r7, r2, #0x0
+ str r3, [sp, #0x10]
+ bl Sav2_PlayerData_GetProfileAddr
+ str r0, [sp, #0x14]
+ add r0, r6, #0x0
+ bl SavArray_PlayerParty_get
+ str r0, [sp, #0x18]
+ add r0, r5, #0x0
+ bl AllocMonZeroed
+ add r4, r0, #0x0
+ bl ZeroMonData
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ str r0, [sp, #0xc]
+ ldr r2, [sp, #0x10]
+ add r0, r4, #0x0
+ add r1, r7, #0x0
+ mov r3, #0x20
+ bl CreateMon
+ ldr r0, [sp, #0x40]
+ ldr r1, [sp, #0x14]
+ str r0, [sp, #0x0]
+ ldr r3, [sp, #0x3c]
+ add r0, r4, #0x0
+ mov r2, #0x4
+ str r5, [sp, #0x4]
+ bl FUN_0206A014
+ add r0, sp, #0x28
+ ldrh r0, [r0, #0x10]
+ mov r1, #0x6
+ add r2, sp, #0x1c
+ str r0, [sp, #0x1c]
+ add r0, r4, #0x0
+ bl SetMonData
+ ldr r0, [sp, #0x18]
+ add r1, r4, #0x0
+ bl AddMonToParty
+ add r5, r0, #0x0
+ beq _0204A0BC
+ add r0, r6, #0x0
+ add r1, r4, #0x0
+ bl FUN_0202C144
+_0204A0BC:
+ add r0, r4, #0x0
+ bl FreeToHeap
+ add r0, r5, #0x0
+ add sp, #0x20
+ pop {r3-r7, pc}
+
+ thumb_func_start GiveEgg
+GiveEgg: ; 0x0204A0C8
+ push {r4-r7, lr}
+ sub sp, #0xc
+ add r4, r1, #0x0
+ add r0, r4, #0x0
+ add r5, r2, #0x0
+ add r7, r3, #0x0
+ bl Sav2_PlayerData_GetProfileAddr
+ str r0, [sp, #0x8]
+ add r0, r4, #0x0
+ bl SavArray_PlayerParty_get
+ add r6, r0, #0x0
+ mov r0, #0x20
+ bl AllocMonZeroed
+ add r4, r0, #0x0
+ bl ZeroMonData
+ ldr r0, [sp, #0x20]
+ ldr r1, [sp, #0x24]
+ bl FUN_02015CF8
+ mov r1, #0x4
+ str r1, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r3, [sp, #0x8]
+ add r0, r4, #0x0
+ add r1, r5, #0x0
+ add r2, r7, #0x0
+ bl MOD05_SetEggStats
+ add r0, r6, #0x0
+ add r1, r4, #0x0
+ bl AddMonToParty
+ add r5, r0, #0x0
+ add r0, r4, #0x0
+ bl FreeToHeap
+ add r0, r5, #0x0
+ add sp, #0xc
+ pop {r4-r7, pc}
+ .balign 4
+
+ thumb_func_start PartyMonSetMoveInSlot
+PartyMonSetMoveInSlot: ; 0x0204A120
+ push {r3-r5, lr}
+ add r5, r2, #0x0
+ add r4, r3, #0x0
+ bl GetPartyMonByIndex
+ lsl r2, r5, #0x18
+ add r1, r4, #0x0
+ lsr r2, r2, #0x18
+ bl MonSetMoveInSlot
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start GetIdxOfFirstPartyMonWithMove
+GetIdxOfFirstPartyMonWithMove: ; 0x0204A138
+ push {r3-r7, lr}
+ str r0, [sp, #0x0]
+ add r5, r1, #0x0
+ bl GetPartyCount
+ add r7, r0, #0x0
+ mov r6, #0x0
+ cmp r7, #0x0
+ ble _0204A1A2
+_0204A14A:
+ ldr r0, [sp, #0x0]
+ add r1, r6, #0x0
+ bl GetPartyMonByIndex
+ mov r1, #0x4c
+ mov r2, #0x0
+ add r4, r0, #0x0
+ bl GetMonData
+ cmp r0, #0x0
+ bne _0204A19C
+ add r0, r4, #0x0
+ mov r1, #0x36
+ mov r2, #0x0
+ bl GetMonData
+ cmp r5, r0
+ beq _0204A198
+ add r0, r4, #0x0
+ mov r1, #0x37
+ mov r2, #0x0
+ bl GetMonData
+ cmp r5, r0
+ beq _0204A198
+ add r0, r4, #0x0
+ mov r1, #0x38
+ mov r2, #0x0
+ bl GetMonData
+ cmp r5, r0
+ beq _0204A198
+ add r0, r4, #0x0
+ mov r1, #0x39
+ mov r2, #0x0
+ bl GetMonData
+ cmp r5, r0
+ bne _0204A19C
+_0204A198:
+ add r0, r6, #0x0
+ pop {r3-r7, pc}
+_0204A19C:
+ add r6, r6, #0x1
+ cmp r6, r7
+ blt _0204A14A
+_0204A1A2:
+ mov r0, #0xff
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start CountAlivePokemon
+CountAlivePokemon: ; 0x0204A1A8
+ push {r3-r7, lr}
+ add r7, r0, #0x0
+ bl GetPartyCount
+ mov r5, #0x0
+ add r6, r0, #0x0
+ add r4, r5, #0x0
+ cmp r6, #0x0
+ ble _0204A1D2
+_0204A1BA:
+ add r0, r7, #0x0
+ add r1, r4, #0x0
+ bl GetPartyMonByIndex
+ bl MonNotFaintedOrEgg
+ cmp r0, #0x0
+ beq _0204A1CC
+ add r5, r5, #0x1
+_0204A1CC:
+ add r4, r4, #0x1
+ cmp r4, r6
+ blt _0204A1BA
+_0204A1D2:
+ add r0, r5, #0x0
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start GetFirstAliveMonInParty_CrashIfNone
+GetFirstAliveMonInParty_CrashIfNone: ; 0x0204A1D8
+ push {r3-r7, lr}
+ add r6, r0, #0x0
+ bl GetPartyCount
+ add r5, r0, #0x0
+ mov r4, #0x0
+ cmp r5, #0x0
+ ble _0204A204
+_0204A1E8:
+ add r0, r6, #0x0
+ add r1, r4, #0x0
+ bl GetPartyMonByIndex
+ add r7, r0, #0x0
+ bl MonNotFaintedOrEgg
+ cmp r0, #0x0
+ beq _0204A1FE
+ add r0, r7, #0x0
+ pop {r3-r7, pc}
+_0204A1FE:
+ add r4, r4, #0x1
+ cmp r4, r5
+ blt _0204A1E8
+_0204A204:
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r7, pc}
+
+ thumb_func_start GetFirstNonEggInParty
+GetFirstNonEggInParty: ; 0x0204A20C
+ push {r3-r7, lr}
+ add r6, r0, #0x0
+ bl GetPartyCount
+ lsl r0, r0, #0x10
+ lsr r5, r0, #0x10
+ ldr r4, _0204A244 ; =0x00000000
+ beq _0204A240
+_0204A21C:
+ add r0, r6, #0x0
+ add r1, r4, #0x0
+ bl GetPartyMonByIndex
+ mov r1, #0x4c
+ mov r2, #0x0
+ add r7, r0, #0x0
+ bl GetMonData
+ cmp r0, #0x0
+ bne _0204A236
+ add r0, r7, #0x0
+ pop {r3-r7, pc}
+_0204A236:
+ add r0, r4, #0x1
+ lsl r0, r0, #0x10
+ lsr r4, r0, #0x10
+ cmp r4, r5
+ blo _0204A21C
+_0204A240:
+ mov r0, #0x0
+ pop {r3-r7, pc}
+ .balign 4
+_0204A244: .word 0x00000000
+
+ thumb_func_start HasEnoughAlivePokemonForDoubleBattle
+HasEnoughAlivePokemonForDoubleBattle: ; 0x0204A248
+ push {r3, lr}
+ bl CountAlivePokemon
+ cmp r0, #0x2
+ blt _0204A256
+ mov r0, #0x1
+ pop {r3, pc}
+_0204A256:
+ mov r0, #0x0
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start GiveAllMonsTheSinnohChampRibbon
+GiveAllMonsTheSinnohChampRibbon: ; 0x0204A25C
+ push {r3-r7, lr}
+ mov r2, #0x1
+ add r1, sp, #0x0
+ add r7, r0, #0x0
+ strb r2, [r1, #0x0]
+ bl GetPartyCount
+ add r6, r0, #0x0
+ mov r5, #0x0
+ cmp r6, #0x0
+ ble _0204A298
+_0204A272:
+ add r0, r7, #0x0
+ add r1, r5, #0x0
+ bl GetPartyMonByIndex
+ mov r1, #0x4c
+ mov r2, #0x0
+ add r4, r0, #0x0
+ bl GetMonData
+ cmp r0, #0x0
+ bne _0204A292
+ add r0, r4, #0x0
+ mov r1, #0x19
+ add r2, sp, #0x0
+ bl SetMonData
+_0204A292:
+ add r5, r5, #0x1
+ cmp r5, r6
+ blt _0204A272
+_0204A298:
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start ApplyPoisonStep
+ApplyPoisonStep: ; 0x0204A29C
+ push {r3-r7, lr}
+ sub sp, #0x10
+ mov r7, #0x0
+ str r0, [sp, #0x0]
+ str r1, [sp, #0x4]
+ add r6, r7, #0x0
+ bl GetPartyCount
+ add r4, r7, #0x0
+ str r0, [sp, #0x8]
+ cmp r0, #0x0
+ ble _0204A310
+_0204A2B4:
+ ldr r0, [sp, #0x0]
+ add r1, r4, #0x0
+ bl GetPartyMonByIndex
+ add r5, r0, #0x0
+ bl MonNotFaintedOrEgg
+ cmp r0, #0x0
+ beq _0204A308
+ add r0, r5, #0x0
+ mov r1, #0x9f
+ mov r2, #0x0
+ bl GetMonData
+ mov r1, #0x88
+ tst r0, r1
+ beq _0204A308
+ add r0, r5, #0x0
+ mov r1, #0xa2
+ mov r2, #0x0
+ bl GetMonData
+ str r0, [sp, #0xc]
+ cmp r0, #0x1
+ bls _0204A2EA
+ sub r0, r0, #0x1
+ str r0, [sp, #0xc]
+_0204A2EA:
+ add r0, r5, #0x0
+ mov r1, #0xa2
+ add r2, sp, #0xc
+ bl SetMonData
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x1
+ bne _0204A306
+ ldr r2, [sp, #0x4]
+ add r0, r5, #0x0
+ mov r1, #0x7
+ add r6, r6, #0x1
+ bl MonApplyFriendshipMod
+_0204A306:
+ add r7, r7, #0x1
+_0204A308:
+ ldr r0, [sp, #0x8]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blt _0204A2B4
+_0204A310:
+ cmp r6, #0x0
+ beq _0204A31A
+ add sp, #0x10
+ mov r0, #0x2
+ pop {r3-r7, pc}
+_0204A31A:
+ cmp r7, #0x0
+ beq _0204A324
+ add sp, #0x10
+ mov r0, #0x1
+ pop {r3-r7, pc}
+_0204A324:
+ mov r0, #0x0
+ add sp, #0x10
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start SurvivePoisoning
+SurvivePoisoning: ; 0x0204A32C
+ push {r3-r4, lr}
+ sub sp, #0x4
+ mov r1, #0x9f
+ mov r2, #0x0
+ add r4, r0, #0x0
+ bl GetMonData
+ mov r1, #0x88
+ tst r0, r1
+ beq _0204A362
+ add r0, r4, #0x0
+ mov r1, #0xa2
+ mov r2, #0x0
+ bl GetMonData
+ cmp r0, #0x1
+ bne _0204A362
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ add r0, r4, #0x0
+ mov r1, #0x9f
+ add r2, sp, #0x0
+ bl SetMonData
+ add sp, #0x4
+ mov r0, #0x1
+ pop {r3-r4, pc}
+_0204A362:
+ mov r0, #0x0
+ add sp, #0x4
+ pop {r3-r4, pc}