summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf3
-rw-r--r--arm9/asm/scrcmd_18.s1801
-rw-r--r--arm9/asm/unk_02038C78.s48
-rw-r--r--arm9/global.inc48
-rw-r--r--arm9/src/scrcmd_18_c.c22
-rw-r--r--arm9/src/scrcmd_party.c815
-rw-r--r--include/scrcmd.h36
7 files changed, 900 insertions, 1873 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 6b0a49a7..40ec9abf 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -173,8 +173,7 @@ Static arm9
Object scrcmd_money.o
Object scrcmd_daycare.o
Object scrcmd_17.o
- Object scrcmd_18_c.o
- Object scrcmd_18.o
+ Object scrcmd_party.o
Object scrcmd_fossils.o
Object scrcmd_prizes.o
Object scrcmd_flags.o
diff --git a/arm9/asm/scrcmd_18.s b/arm9/asm/scrcmd_18.s
deleted file mode 100644
index 0101d717..00000000
--- a/arm9/asm/scrcmd_18.s
+++ /dev/null
@@ -1,1801 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start ScrCmd_GetPartySpecies
-ScrCmd_GetPartySpecies: ; 0x0204434C
- ; getpartyspecies XXXX, YYYY
- ; Sets var YYYY to species of mon in party slot XXXX.
- ; If mon is an egg, the value is SPECIES_NONE.
- push {r4-r6, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r5, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r6, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl GetVarPointer
- add r4, r0, #0x0
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- ldrh r1, [r6, #0x0]
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r5, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _020443A0
- add r0, r5, #0x0
- mov r1, #0x5
- mov r2, #0x0
- bl GetMonData
- b _020443A2
-_020443A0:
- mov r0, #0x0
-_020443A2:
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start ScrCmd_CheckPartyMonOTID
-ScrCmd_CheckPartyMonOTID: ; 0x020443A8
- push {r3-r7, lr}
- add r4, r0, #0x0
- add r0, #0x80
- ldr r5, [r0, #0x0]
- add r0, r5, #0x0
- bl ScriptEnvironment_GetSav2Ptr
- bl Sav2_PlayerData_GetProfileAddr
- add r7, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r6, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl GetVarPointer
- add r4, r0, #0x0
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- ldrh r1, [r6, #0x0]
- bl GetPartyMonByIndex
- mov r1, #0x7
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- add r0, r7, #0x0
- bl PlayerProfile_GetTrainerID
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r5, r0
- bne _0204440C
- mov r0, #0x0
- b _0204440E
-_0204440C:
- mov r0, #0x1
-_0204440E:
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
-
- thumb_func_start ScrCmd_GiveEgg
-ScrCmd_GiveEgg: ; 0x02044414
- push {r4-r7, lr}
- sub sp, #0xc
- add r5, r0, #0x0
- add r0, #0x80
- ldr r4, [r0, #0x0]
- ldr r0, [r4, #0xc]
- bl Sav2_PlayerData_GetProfileAddr
- add r7, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- str r0, [sp, #0x8]
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [r4, #0xc]
- bl SavArray_PlayerParty_get
- add r6, r0, #0x0
- bl GetPartyCount
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x6
- bhs _02044494
- mov r0, #0xb
- bl AllocMonZeroed
- add r4, r0, #0x0
- bl ZeroMonData
- mov r0, #0x1
- add r1, r5, #0x0
- bl FUN_02015CF8
- mov r1, #0x3
- str r1, [sp, #0x0]
- str r0, [sp, #0x4]
- ldr r1, [sp, #0x8]
- add r0, r4, #0x0
- mov r2, #0x1
- add r3, r7, #0x0
- bl MOD05_SetEggStats
- add r0, r6, #0x0
- add r1, r4, #0x0
- bl AddMonToParty
- add r0, r4, #0x0
- bl FreeToHeap
-_02044494:
- mov r0, #0x0
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_SetPartyMonMove
-ScrCmd_SetPartyMonMove: ; 0x0204449C
- push {r3-r7, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r6, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r5, #0x80
- add r7, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r4, #0x0
- add r2, r6, #0x0
- add r3, r7, #0x0
- bl PartyMonSetMoveInSlot
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_PartyMonHasMove
-ScrCmd_PartyMonHasMove: ; 0x020444F4
- push {r3-r7, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r7, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r6, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r5, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- add r4, r0, #0x0
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- mov r2, #0x0
- mov r1, #0x4c
- add r4, r0, #0x0
- strh r2, [r6, #0x0]
- bl GetMonData
- cmp r0, #0x0
- beq _02044556
- mov r0, #0x0
- pop {r3-r7, pc}
-_02044556:
- add r0, r4, #0x0
- mov r1, #0x36
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _0204458E
- add r0, r4, #0x0
- mov r1, #0x37
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _0204458E
- add r0, r4, #0x0
- mov r1, #0x38
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _0204458E
- add r0, r4, #0x0
- mov r1, #0x39
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- bne _02044592
-_0204458E:
- mov r0, #0x1
- strh r0, [r6, #0x0]
-_02044592:
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_FindPartyMonWithMove
-ScrCmd_FindPartyMonWithMove: ; 0x02044598
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r1, [r1, #0x0]
- str r1, [sp, #0x4]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [sp, #0x4]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x18
- lsr r7, r0, #0x18
- ldr r1, _02044650 ; =0x00000006
- ldr r0, [sp, #0x0]
- ldr r6, _02044654 ; =0x00000000
- strh r1, [r0, #0x0]
- beq _02044648
-_020445E4:
- ldr r0, [sp, #0x4]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r6, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _0204463E
- add r0, r4, #0x0
- mov r1, #0x36
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _02044638
- add r0, r4, #0x0
- mov r1, #0x37
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _02044638
- add r0, r4, #0x0
- mov r1, #0x38
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _02044638
- add r0, r4, #0x0
- mov r1, #0x39
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- bne _0204463E
-_02044638:
- ldr r0, [sp, #0x0]
- strh r6, [r0, #0x0]
- b _02044648
-_0204463E:
- add r0, r6, #0x1
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- cmp r6, r7
- blo _020445E4
-_02044648:
- mov r0, #0x0
- add sp, #0x8
- pop {r3-r7, pc}
- nop
-_02044650: .word 0x00000006
-_02044654: .word 0x00000000
-
- thumb_func_start ScrCmd_SurvivePsn
-ScrCmd_SurvivePsn: ; 0x02044658
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r5, #0x80
- add r6, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r6, #0x0
- bl GetPartyMonByIndex
- bl SurvivePoisoning
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start ScrCmd_CountPartyMonsAtOrBelowLevel
-ScrCmd_CountPartyMonsAtOrBelowLevel: ; 0x0204469C
- push {r4-r7, lr}
- sub sp, #0xc
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r7, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x4]
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- str r0, [sp, #0x0]
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #0x8]
- mov r4, #0x0
- ldr r0, [sp, #0x4]
- add r5, r4, #0x0
- strh r4, [r0, #0x0]
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- bls _02044726
-_020446EA:
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r6, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _0204471A
- add r0, r6, #0x0
- mov r1, #0xa0
- mov r2, #0x0
- bl GetMonData
- ldr r1, [sp, #0x0]
- cmp r0, r1
- bhi _0204471A
- add r0, r5, #0x1
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
-_0204471A:
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- ldr r0, [sp, #0x8]
- cmp r4, r0
- blo _020446EA
-_02044726:
- ldr r0, [sp, #0x4]
- strh r5, [r0, #0x0]
- mov r0, #0x0
- add sp, #0xc
- pop {r4-r7, pc}
-
- thumb_func_start ScrCmd_GetPartyMonLevel
-ScrCmd_GetPartyMonLevel: ; 0x02044730
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r6, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r2, #0x0
- mov r1, #0x4c
- add r5, r0, #0x0
- strh r2, [r4, #0x0]
- bl GetMonData
- cmp r0, #0x0
- bne _02044786
- add r0, r5, #0x0
- mov r1, #0xa0
- mov r2, #0x0
- bl GetMonData
- strh r0, [r4, #0x0]
-_02044786:
- mov r0, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start ScrCmd_GetPartyMonNature
-ScrCmd_GetPartyMonNature: ; 0x0204478C
- push {r4-r6, lr}
- add r6, r0, #0x0
- add r1, r6, #0x0
- add r1, #0x80
- ldr r5, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r6, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r4, r0, #0x0
- add r0, r6, #0x0
- bl ScriptReadHalfword
- add r6, #0x80
- add r1, r0, #0x0
- ldr r0, [r6, #0x0]
- bl VarGet
- add r6, r0, #0x0
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r6, r0
- blt _020447D2
- mov r0, #0x0
- strh r0, [r4, #0x0]
- pop {r4-r6, pc}
-_020447D2:
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r6, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r5, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _020447F2
- mov r0, #0x0
- strh r0, [r4, #0x0]
- pop {r4-r6, pc}
-_020447F2:
- add r0, r5, #0x0
- bl GetMonNature
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start ScrCmd_FindPartyMonWithNature
-ScrCmd_FindPartyMonWithNature: ; 0x02044800
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r7, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x4]
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- str r0, [sp, #0x0]
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- ldr r1, _02044884 ; =0x000000FF
- ldr r0, [sp, #0x4]
- ldr r5, _02044888 ; =0x00000000
- strh r1, [r0, #0x0]
- beq _0204487E
-_02044848:
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _02044874
- add r0, r4, #0x0
- bl GetMonNature
- ldr r1, [sp, #0x0]
- cmp r1, r0
- bne _02044874
- ldr r0, [sp, #0x4]
- strh r5, [r0, #0x0]
- b _0204487E
-_02044874:
- add r0, r5, #0x1
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- cmp r5, r6
- blo _02044848
-_0204487E:
- mov r0, #0x0
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_02044884: .word 0x000000FF
-_02044888: .word 0x00000000
-
- thumb_func_start ScrCmd_GetPartyMonFriendship
-ScrCmd_GetPartyMonFriendship: ; 0x0204488C
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r4, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r6, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [r4, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x9
- mov r2, #0x0
- bl GetMonData
- strh r0, [r6, #0x0]
- mov r0, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start ScrCmd_Unk01BA
-ScrCmd_Unk01BA: ; 0x020448D4
- push {r3-r7, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r6, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r5, #0x80
- str r0, [sp, #0x0]
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0x1c]
- ldr r0, [r0, #0x0]
- bl MapHeader_GetMapSec
- add r7, r0, #0x0
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- ldr r1, [sp, #0x0]
- bl GetPartyMonByIndex
- mov r1, #0x9
- mov r2, #0x0
- add r5, r0, #0x0
- bl GetMonData
- add r1, sp, #0x4
- strh r0, [r1, #0x0]
- cmp r4, #0x0
- beq _02044982
- add r0, r5, #0x0
- mov r1, #0x6
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r1, #0x1
- mov r2, #0xb
- bl GetItemAttr
- cmp r0, #0x34
- bne _0204495A
- mov r0, #0x96
- mul r0, r4
- mov r1, #0x64
- bl _s32_div_f
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
-_0204495A:
- add r0, r5, #0x0
- mov r1, #0x9a
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0xb
- bne _0204496E
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
-_0204496E:
- add r0, r5, #0x0
- mov r1, #0x97
- mov r2, #0x0
- bl GetMonData
- cmp r7, r0
- bne _02044982
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
-_02044982:
- add r0, sp, #0x4
- ldrh r1, [r0, #0x0]
- add r1, r1, r4
- strh r1, [r0, #0x0]
- ldrh r1, [r0, #0x0]
- cmp r1, #0xff
- bls _02044994
- mov r1, #0xff
- strh r1, [r0, #0x0]
-_02044994:
- add r0, r5, #0x0
- mov r1, #0x9
- add r2, sp, #0x4
- bl SetMonData
- mov r0, #0x0
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start ScrCmd_Unk01BB
-ScrCmd_Unk01BB: ; 0x020449A4
- push {r3-r6, lr}
- sub sp, #0x4
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r6, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x9
- mov r2, #0x0
- add r5, r0, #0x0
- bl GetMonData
- add r1, sp, #0x0
- strh r0, [r1, #0x0]
- ldrh r0, [r1, #0x0]
- cmp r4, r0
- bls _020449F8
- mov r0, #0x0
- b _020449FA
-_020449F8:
- sub r0, r0, r4
-_020449FA:
- strh r0, [r1, #0x0]
- add r0, r5, #0x0
- mov r1, #0x9
- add r2, sp, #0x0
- bl SetMonData
- mov r0, #0x0
- add sp, #0x4
- pop {r3-r6, pc}
-
- thumb_func_start ScrCmd_Unk0281
-ScrCmd_Unk0281: ; 0x02044A0C
- push {r3-r7, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r7, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r5, #0x80
- add r6, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r7, #0x0
- bl GetPartyMonByIndex
- add r4, #0x13
- add r1, r4, #0x0
- mov r2, #0x0
- bl GetMonData
- strh r0, [r6, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk0247
-ScrCmd_Unk0247: ; 0x02044A6C
- push {r3-r5, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r5, #0x80
- add r4, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl FUN_02054DEC
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk0248
-ScrCmd_Unk0248: ; 0x02044A94
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r4, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r6, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r7, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [r4, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- add r4, r0, #0x0
- mov r1, #0xb0
- mov r2, #0x0
- bl GetMonData
- strh r0, [r6, #0x0]
- add r0, r4, #0x0
- mov r1, #0xb1
- mov r2, #0x0
- bl GetMonData
- strh r0, [r7, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk0177
-ScrCmd_Unk0177: ; 0x02044B00
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r4, [r1, #0x0]
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl GetVarPointer
- add r5, r0, #0x0
- ldr r0, [r4, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- strh r0, [r5, #0x0]
- mov r0, #0x0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk019A
-ScrCmd_Unk019A: ; 0x02044B2C
- push {r3-r7, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r6, [r1, #0x0]
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- mov r5, #0x0
- add r7, r0, #0x0
- add r4, r5, #0x0
- cmp r7, #0x0
- ble _02044B7A
-_02044B5A:
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _02044B74
- add r4, r4, #0x1
-_02044B74:
- add r5, r5, #0x1
- cmp r5, r7
- blt _02044B5A
-_02044B7A:
- ldr r0, [sp, #0x0]
- strh r4, [r0, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk019B
-ScrCmd_Unk019B: ; 0x02044B84
- push {r4-r7, lr}
- sub sp, #0xc
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r7, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x4]
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- str r0, [sp, #0x0]
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- mov r5, #0x0
- add r4, r5, #0x0
- str r0, [sp, #0x8]
- cmp r0, #0x0
- ble _02044C00
-_02044BC8:
- ldr r0, [sp, #0x0]
- cmp r5, r0
- beq _02044BF8
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r6, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _02044BF8
- add r0, r6, #0x0
- mov r1, #0xa2
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044BF8
- add r4, r4, #0x1
-_02044BF8:
- ldr r0, [sp, #0x8]
- add r5, r5, #0x1
- cmp r5, r0
- blt _02044BC8
-_02044C00:
- ldr r0, [sp, #0x4]
- strh r4, [r0, #0x0]
- mov r0, #0x0
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk019C
-ScrCmd_Unk019C: ; 0x02044C0C
- push {r4-r7, lr}
- sub sp, #0xc
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r7, [r1, #0x0]
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- ldr r0, [r7, #0xc]
- bl GetStoragePCPointer
- str r0, [sp, #0x4]
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- mov r5, #0x0
- add r4, r5, #0x0
- str r0, [sp, #0x8]
- cmp r0, #0x0
- ble _02044C76
-_02044C44:
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r6, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _02044C6E
- add r0, r6, #0x0
- mov r1, #0xa2
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044C6E
- add r4, r4, #0x1
-_02044C6E:
- ldr r0, [sp, #0x8]
- add r5, r5, #0x1
- cmp r5, r0
- blt _02044C44
-_02044C76:
- ldr r0, [sp, #0x4]
- bl PCStorage_CountMonsInAllBoxes
- add r1, r4, r0
- ldr r0, [sp, #0x0]
- strh r1, [r0, #0x0]
- mov r0, #0x0
- add sp, #0xc
- pop {r4-r7, pc}
-
- thumb_func_start ScrCmd_Unk019D
-ScrCmd_Unk019D: ; 0x02044C88
- push {r3-r7, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r6, [r1, #0x0]
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- mov r5, #0x0
- add r7, r0, #0x0
- add r4, r5, #0x0
- cmp r7, #0x0
- ble _02044CD6
-_02044CB6:
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044CD0
- add r4, r4, #0x1
-_02044CD0:
- add r5, r5, #0x1
- cmp r5, r7
- blt _02044CB6
-_02044CD6:
- ldr r0, [sp, #0x0]
- strh r4, [r0, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk0119
-ScrCmd_Unk0119: ; 0x02044CE0
- push {r3-r7, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r5, [r1, #0x0]
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x10
- lsr r6, r0, #0x10
- ldr r4, _02044D40 ; =0x00000000
- ldr r0, [sp, #0x0]
- strh r4, [r0, #0x0]
- beq _02044D3C
- mov r7, #0x99
-_02044D12:
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- add r1, r7, #0x0
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044D32
- ldr r0, [sp, #0x0]
- mov r1, #0x1
- strh r1, [r0, #0x0]
- b _02044D3C
-_02044D32:
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- cmp r4, r6
- blo _02044D12
-_02044D3C:
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-_02044D40: .word 0x00000000
-
- thumb_func_start ScrCmd_Unk011A
-ScrCmd_Unk011A: ; 0x02044D44
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r6, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r5, #0x80
- add r4, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r6, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x6f
- mov r2, #0x0
- bl GetMonData
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start ScrCmd_Unk01C8
-ScrCmd_Unk01C8: ; 0x02044D8C
- push {r4-r6, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r6, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r5, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- add r4, r0, #0x0
- ldr r0, [r6, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r6, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044DDA
- mov r0, #0x0
- strh r0, [r5, #0x0]
- pop {r4-r6, pc}
-_02044DDA:
- mov r4, #0x0
- add r0, r6, #0x0
- mov r1, #0x36
- add r2, r4, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044DF0
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
-_02044DF0:
- add r0, r6, #0x0
- mov r1, #0x37
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044E04
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
-_02044E04:
- add r0, r6, #0x0
- mov r1, #0x38
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044E18
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
-_02044E18:
- add r0, r6, #0x0
- mov r1, #0x39
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02044E2C
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
-_02044E2C:
- strh r4, [r5, #0x0]
- mov r0, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk01C9
-ScrCmd_Unk01C9: ; 0x02044E34
- push {r4-r6, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r5, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r6, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- add r4, r0, #0x0
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r6, #0x0
- bl GetPartyMonByIndex
- add r1, r4, #0x0
- bl FUN_020699A4
- mov r0, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start ScrCmd_Unk01CA
-ScrCmd_Unk01CA: ; 0x02044E78
- push {r3-r7, lr}
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r5, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r6, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r7, r0, #0x0
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- add r4, r0, #0x0
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r7, #0x0
- bl GetPartyMonByIndex
- add r4, #0x36
- add r1, r4, #0x0
- mov r2, #0x0
- bl GetMonData
- strh r0, [r6, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk01EE
-ScrCmd_Unk01EE: ; 0x02044ED8
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r4, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r6, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [r4, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x6
- mov r2, #0x0
- bl GetMonData
- strh r0, [r6, #0x0]
- mov r0, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start ScrCmd_Unk01F0
-ScrCmd_Unk01F0: ; 0x02044F20
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r1, r5, #0x0
- add r1, #0x80
- ldr r4, [r1, #0x0]
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- ldr r0, [r4, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r2, #0x0
- add r1, sp, #0x0
- strh r2, [r1, #0x0]
- mov r1, #0x6
- add r2, sp, #0x0
- bl SetMonData
- mov r0, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start ScrCmd_Unk01C0
-ScrCmd_Unk01C0: ; 0x02044F58
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x80
- ldr r7, [r1, #0x0]
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x4]
- add r0, r4, #0x0
- bl ScriptReadHalfword
- add r4, #0x80
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl VarGet
- str r0, [sp, #0x0]
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- ldr r5, _02044FE4 ; =0x00000000
- ldr r0, [sp, #0x4]
- strh r5, [r0, #0x0]
- beq _02044FDE
-_02044F9E:
- ldr r0, [r7, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _02044FD4
- add r0, r4, #0x0
- mov r1, #0x5
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- ldr r0, [sp, #0x0]
- cmp r0, r1
- bne _02044FD4
- ldr r0, [sp, #0x4]
- mov r1, #0x1
- strh r1, [r0, #0x0]
- b _02044FDE
-_02044FD4:
- add r0, r5, #0x1
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- cmp r5, r6
- blo _02044F9E
-_02044FDE:
- mov r0, #0x0
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_02044FE4: .word 0x00000000
-
- thumb_func_start ScrCmd_Unk022E
-ScrCmd_Unk022E: ; 0x02044FE8
- push {r3-r7, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r5, #0x80
- add r4, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- mov r4, #0x0
- add r6, r0, #0x0
- add r5, r4, #0x0
- add r7, r4, #0x0
-_0204502A:
- lsl r0, r4, #0x18
- lsr r0, r0, #0x18
- add r1, r7, #0x0
- bl FUN_0207FC5C
- add r1, r0, #0x0
- add r0, r6, #0x0
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02045048
- add r0, r5, #0x1
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
-_02045048:
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- cmp r4, #0x50
- blo _0204502A
- ldr r0, [sp, #0x0]
- strh r5, [r0, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk022F
-ScrCmd_Unk022F: ; 0x0204505C
- push {r3-r7, lr}
- sub sp, #0x10
- add r4, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x10
- add r4, #0x80
- lsr r6, r0, #0x10
- ldr r0, [r4, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- str r0, [sp, #0xc]
- mov r0, #0x0
- str r0, [sp, #0x8]
- str r0, [sp, #0x4]
-_0204509A:
- mov r5, #0x0
- cmp r6, #0x0
- bls _020450E8
- ldr r0, [sp, #0x8]
- lsl r0, r0, #0x18
- lsr r7, r0, #0x18
-_020450A6:
- ldr r0, [sp, #0xc]
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _020450E8
- add r0, r7, #0x0
- mov r1, #0x0
- bl FUN_0207FC5C
- add r1, r0, #0x0
- add r0, r4, #0x0
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _020450DE
- ldr r0, [sp, #0x4]
- add r0, r0, #0x1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x4]
- b _020450E8
-_020450DE:
- add r0, r5, #0x1
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- cmp r5, r6
- blo _020450A6
-_020450E8:
- ldr r0, [sp, #0x8]
- add r0, r0, #0x1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x8]
- cmp r0, #0x50
- blo _0204509A
- ldr r1, [sp, #0x4]
- ldr r0, [sp, #0x0]
- strh r1, [r0, #0x0]
- mov r0, #0x0
- add sp, #0x10
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk0230
-ScrCmd_Unk0230: ; 0x02045104
- push {r3-r7, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r7, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r5, #0x80
- add r6, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r7, #0x0
- bl GetPartyMonByIndex
- add r5, r0, #0x0
- lsl r0, r6, #0x18
- lsr r0, r0, #0x18
- mov r1, #0x0
- bl FUN_0207FC5C
- add r1, r0, #0x0
- add r0, r5, #0x0
- mov r2, #0x0
- bl GetMonData
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk0231
-ScrCmd_Unk0231: ; 0x02045170
- push {r3-r6, lr}
- sub sp, #0x4
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r6, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl VarGet
- add r4, r0, #0x0
- mov r1, #0x1
- add r0, sp, #0x0
- add r5, #0x80
- strb r1, [r0, #0x0]
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r6, #0x0
- bl GetPartyMonByIndex
- add r5, r0, #0x0
- lsl r0, r4, #0x18
- lsr r0, r0, #0x18
- mov r1, #0x0
- bl FUN_0207FC5C
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r2, sp, #0x0
- bl SetMonData
- mov r0, #0x0
- add sp, #0x4
- pop {r3-r6, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk02B7
-ScrCmd_Unk02B7: ; 0x020451D0
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- str r0, [sp, #0x0]
- add r0, r4, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- bl GetPartyCount
- lsl r0, r0, #0x10
- add r4, #0x80
- lsr r6, r0, #0x10
- ldr r0, [r4, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_PlayerParty_get
- add r7, r0, #0x0
- mov r0, #0x0
- str r0, [sp, #0x4]
-_0204520C:
- mov r5, #0x0
- cmp r6, #0x0
- bls _0204524C
-_02045212:
- 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
- beq _02045242
- add r0, r4, #0x0
- mov r1, #0x3
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x0
- beq _02045242
- ldr r0, [sp, #0x0]
- mov r1, #0x1
- strh r1, [r0, #0x0]
- add sp, #0x8
- mov r0, #0x0
- pop {r3-r7, pc}
-_02045242:
- add r0, r5, #0x1
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- cmp r5, r6
- blo _02045212
-_0204524C:
- ldr r0, [sp, #0x4]
- add r0, r0, #0x1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x4]
- cmp r0, #0x50
- blo _0204520C
- ldr r1, [sp, #0x0]
- mov r0, #0x0
- strh r0, [r1, #0x0]
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start ScrCmd_Unk00A0
-ScrCmd_Unk00A0: ; 0x02045264
- mov r0, #0x0
- bx lr
diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s
index a2718433..e40bd803 100644
--- a/arm9/asm/unk_02038C78.s
+++ b/arm9/asm/unk_02038C78.s
@@ -430,8 +430,8 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk0116
.word ScrCmd_Unk0117
.word ScrCmd_Unk0118
- .word ScrCmd_Unk0119
- .word ScrCmd_Unk011A
+ .word ScrCmd_CheckPartyForPokerus
+ .word ScrCmd_GetPartyMonGender
.word ScrCmd_Unk011B
.word ScrCmd_Unk011C
.word ScrCmd_Unk011D
@@ -524,7 +524,7 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk0174
.word ScrCmd_Unk0175
.word ScrCmd_Unk0176
- .word ScrCmd_Unk0177
+ .word ScrCmd_CountPartyMons
.word ScrCmd_Unk0178
.word ScrCmd_Unk0179
.word ScrCmd_Unk017A
@@ -557,12 +557,12 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk0195
.word ScrCmd_Unk0196
.word ScrCmd_Unk0197
- .word ScrCmd_GetPartySpecies
+ .word ScrCmd_GetPartyMonSpecies
.word ScrCmd_CheckPartyMonOTID
- .word ScrCmd_Unk019A
- .word ScrCmd_Unk019B
- .word ScrCmd_Unk019C
- .word ScrCmd_Unk019D
+ .word ScrCmd_CountPartyMons_OmitEggs
+ .word ScrCmd_CountAvailablePartyMons_IgnoreSlot
+ .word ScrCmd_CountAvailablePartyAndPCMons
+ .word ScrCmd_GetPartyEggCount
.word ScrCmd_Unk019E
.word ScrCmd_Unk019F
.word ScrCmd_Unk01A0
@@ -591,13 +591,13 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk01B7
.word ScrCmd_Unk01B8
.word ScrCmd_GetPartyMonFriendship
- .word ScrCmd_Unk01BA
- .word ScrCmd_Unk01BB
+ .word ScrCmd_AddPartyMonFriendship
+ .word ScrCmd_SubtractPartyMonFriendship
.word ScrCmd_Unk01BC
.word ScrCmd_Unk01BD
.word ScrCmd_Unk01BE
.word ScrCmd_Unk01BF
- .word ScrCmd_Unk01C0
+ .word ScrCmd_CheckPartyForSpecies
.word ScrCmd_Unk01C1
.word ScrCmd_Unk01C2
.word ScrCmd_Unk01C3
@@ -605,9 +605,9 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk01C5
.word ScrCmd_Unk01C6
.word ScrCmd_Unk01C7
- .word ScrCmd_Unk01C8
- .word ScrCmd_Unk01C9
- .word ScrCmd_Unk01CA
+ .word ScrCmd_CountPartyMonMoves
+ .word ScrCmd_ForgetPartyMonMove
+ .word ScrCmd_GetPartyMonMove
.word ScrCmd_GetPokemonMoveName
.word ScrCmd_Unk01CC
.word ScrCmd_Unk01CD
@@ -643,9 +643,9 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk01EB
.word ScrCmd_Unk01EC
.word ScrCmd_Unk01ED
- .word ScrCmd_Unk01EE
+ .word ScrCmd_GetPartyMonHeldItem
.word ScrCmd_Unk01EF
- .word ScrCmd_Unk01F0
+ .word ScrCmd_ResetPartyMonHeldItem
.word ScrCmd_CountFossils
.word ScrCmd_Unk01F2
.word ScrCmd_Unk01F3
@@ -707,10 +707,10 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk022B
.word ScrCmd_Unk022C
.word ScrCmd_Unk022D
- .word ScrCmd_Unk022E
- .word ScrCmd_Unk022F
- .word ScrCmd_Unk0230
- .word ScrCmd_Unk0231
+ .word ScrCmd_CountPartyMonRibbons
+ .word ScrCmd_CountTotalPartyRibbons
+ .word ScrCmd_PartyMonHasRibbon
+ .word ScrCmd_GivePartyMonRibbon
.word ScrCmd_GetRibbonName
.word ScrCmd_Unk0233
.word ScrCmd_Unk0234
@@ -732,8 +732,8 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk0244
.word ScrCmd_Unk0245
.word ScrCmd_GameVersion
- .word ScrCmd_Unk0247
- .word ScrCmd_Unk0248
+ .word ScrCmd_GetLeadingPartyMonSlot
+ .word ScrCmd_GetPartyMonTypes
.word ScrCmd_GiveWallpaper
.word ScrCmd_Unk024A
.word ScrCmd_Unk024B
@@ -790,7 +790,7 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk027E
.word ScrCmd_Unk027F
.word ScrCmd_Unk0280
- .word ScrCmd_Unk0281
+ .word ScrCmd_GetPartyMonContestCondition
.word ScrCmd_Unk0282
.word ScrCmd_SetVolume
.word ScrCmd_Unk0284
@@ -844,7 +844,7 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk02B4
.word ScrCmd_Unk02B5
.word ScrCmd_Unk02B6
- .word ScrCmd_Unk02B7
+ .word ScrCmd_CheckPartyForBadEgg
.word ScrCmd_Unk02B8
.word ScrCmd_Unk02B9
.word ScrCmd_Unk02BA
diff --git a/arm9/global.inc b/arm9/global.inc
index 325ba1ec..adcc0e36 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -3316,7 +3316,7 @@
.extern ScrCmd_Unk0216
.extern ScrCmd_Unk0217
.extern ScrCmd_GiveMon
-.extern ScrCmd_GetPartySpecies
+.extern ScrCmd_GetPartyMonSpecies
.extern ScrCmd_CheckPartyMonOTID
.extern ScrCmd_GiveEgg
.extern ScrCmd_SetPartyMonMove
@@ -3328,29 +3328,29 @@
.extern ScrCmd_GetPartyMonNature
.extern ScrCmd_FindPartyMonWithNature
.extern ScrCmd_GetPartyMonFriendship
-.extern ScrCmd_Unk01BA
-.extern ScrCmd_Unk01BB
-.extern ScrCmd_Unk0281
-.extern ScrCmd_Unk0247
-.extern ScrCmd_Unk0248
-.extern ScrCmd_Unk0177
-.extern ScrCmd_Unk019A
-.extern ScrCmd_Unk019B
-.extern ScrCmd_Unk019C
-.extern ScrCmd_Unk019D
-.extern ScrCmd_Unk0119
-.extern ScrCmd_Unk011A
-.extern ScrCmd_Unk01C8
-.extern ScrCmd_Unk01C9
-.extern ScrCmd_Unk01CA
-.extern ScrCmd_Unk01EE
-.extern ScrCmd_Unk01F0
-.extern ScrCmd_Unk01C0
-.extern ScrCmd_Unk022E
-.extern ScrCmd_Unk022F
-.extern ScrCmd_Unk0230
-.extern ScrCmd_Unk0231
-.extern ScrCmd_Unk02B7
+.extern ScrCmd_AddPartyMonFriendship
+.extern ScrCmd_SubtractPartyMonFriendship
+.extern ScrCmd_GetPartyMonContestCondition
+.extern ScrCmd_GetLeadingPartyMonSlot
+.extern ScrCmd_GetPartyMonTypes
+.extern ScrCmd_CountPartyMons
+.extern ScrCmd_CountPartyMons_OmitEggs
+.extern ScrCmd_CountAvailablePartyMons_IgnoreSlot
+.extern ScrCmd_CountAvailablePartyAndPCMons
+.extern ScrCmd_GetPartyEggCount
+.extern ScrCmd_CheckPartyForPokerus
+.extern ScrCmd_GetPartyMonGender
+.extern ScrCmd_CountPartyMonMoves
+.extern ScrCmd_ForgetPartyMonMove
+.extern ScrCmd_GetPartyMonMove
+.extern ScrCmd_GetPartyMonHeldItem
+.extern ScrCmd_ResetPartyMonHeldItem
+.extern ScrCmd_CheckPartyForSpecies
+.extern ScrCmd_CountPartyMonRibbons
+.extern ScrCmd_CountTotalPartyRibbons
+.extern ScrCmd_PartyMonHasRibbon
+.extern ScrCmd_GivePartyMonRibbon
+.extern ScrCmd_CheckPartyForBadEgg
.extern ScrCmd_Unk00A0
.extern ScrCmd_CountFossils
.extern ScrCmd_GetFossilPokemon
diff --git a/arm9/src/scrcmd_18_c.c b/arm9/src/scrcmd_18_c.c
deleted file mode 100644
index d4437c5f..00000000
--- a/arm9/src/scrcmd_18_c.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "global.h"
-#include "script.h"
-#include "party.h"
-#include "save_block_2.h"
-#include "unk_0204639C.h"
-#include "map_header.h"
-#include "scrcmd.h"
-
-extern BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u8 encounterType);
-
-THUMB_FUNC BOOL ScrCmd_GiveMon(struct ScriptContext* ctx)
-{
- u32 mapSec = MapHeader_GetMapSec(*(ctx->unk80->mapId));
- struct UnkSavStruct80 *savePtr = ctx->unk80;
- u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
- u16 level = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
- u16 item = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
- u16 * varPtr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
- struct PlayerParty * party = SavArray_PlayerParty_get(savePtr->saveBlock2);
- *varPtr = (u16)GiveMon(11, savePtr->saveBlock2, species, (u8)level, item, mapSec, 12);
- return FALSE;
-}
diff --git a/arm9/src/scrcmd_party.c b/arm9/src/scrcmd_party.c
new file mode 100644
index 00000000..48d558c9
--- /dev/null
+++ b/arm9/src/scrcmd_party.c
@@ -0,0 +1,815 @@
+#include "scrcmd.h"
+#include "constants/moves.h"
+#include "itemtool.h"
+#include "map_header.h"
+#include "module_05.h"
+#include "party.h"
+#include "save_block_2.h"
+#include "script_pokemon_util.h"
+#include "unk_02015CC0.h"
+#include "unk_02022504.h"
+#include "unk_0204639C.h"
+#include "unk_0207FC5C.h"
+
+extern u16 FUN_02054DEC(struct SaveBlock2* sav2);
+
+THUMB_FUNC BOOL ScrCmd_GiveMon(struct ScriptContext* ctx)
+{
+ u32 mapSec = MapHeader_GetMapSec(*(ctx->unk80->mapId));
+ struct UnkSavStruct80 *savePtr = ctx->unk80;
+ u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 level = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 item = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 * varPtr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty * party = SavArray_PlayerParty_get(savePtr->saveBlock2);
+ *varPtr = (u16)GiveMon(11, savePtr->saveBlock2, species, (u8)level, item, mapSec, 12);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonSpecies(struct ScriptContext* ctx)
+{
+ u32 species;
+ u16* ret_ptr;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* mon_slot = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, *mon_slot);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ species = GetMonData(party_mon, MON_DATA_SPECIES, NULL);
+ }
+ else
+ {
+ species = SPECIES_NONE;
+ }
+
+ *ret_ptr = (u16)species;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CheckPartyMonOTID(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(sav_ptr);
+ struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(sav2);
+
+ u16* mon_slot = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, *mon_slot);
+
+ u16 party_mon_otid = (u16)GetMonData(party_mon, MON_DATA_OTID, NULL);
+ u16 player_otid = (u16)PlayerProfile_GetTrainerID(player);
+ if (party_mon_otid == player_otid)
+ {
+ *ret_ptr = 0;
+ }
+ else
+ {
+ *ret_ptr = 1;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GiveEgg(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(sav_ptr->saveBlock2);
+ u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ u8 party_count = (u8)GetPartyCount(party);
+
+ if (party_count < PARTY_SIZE)
+ {
+ struct Pokemon* egg = AllocMonZeroed(11);
+ ZeroMonData(egg);
+
+ s32 met_loc = FUN_02015CF8(1, unk);
+ MOD05_SetEggStats(egg, species, 1, player, 3, met_loc);
+
+ AddMonToParty(party, egg);
+ FreeToHeap(egg);
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_SetPartyMonMove(struct ScriptContext* ctx)
+{
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 move_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 move = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+
+ PartyMonSetMoveInSlot(party, mon_slot, move_slot, move);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_PartyMonHasMove(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 required_move = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = 0;
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg)
+ {
+ return FALSE;
+ }
+
+ if (required_move == GetMonData(party_mon, MON_DATA_MOVE1, NULL) ||
+ required_move == GetMonData(party_mon, MON_DATA_MOVE2, NULL) ||
+ required_move == GetMonData(party_mon, MON_DATA_MOVE3, NULL) ||
+ required_move == GetMonData(party_mon, MON_DATA_MOVE4, NULL))
+ {
+ *ret_ptr = 1;
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_FindPartyMonWithMove(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 required_move = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ u8 i;
+ for (i = 0, *ret_ptr = PARTY_SIZE; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ if (required_move == GetMonData(party_mon, MON_DATA_MOVE1, NULL) ||
+ required_move == GetMonData(party_mon, MON_DATA_MOVE2, NULL) ||
+ required_move == GetMonData(party_mon, MON_DATA_MOVE3, NULL) ||
+ required_move == GetMonData(party_mon, MON_DATA_MOVE4, NULL))
+ {
+ *ret_ptr = i;
+ break;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_SurvivePsn(struct ScriptContext* ctx)
+{
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = (u16)SurvivePoisoning(party_mon);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountPartyMonsAtOrBelowLevel(struct ScriptContext* ctx)
+{
+ u8 party_count;
+ u8 i;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 highest_level = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ u8 mons;
+ for (i = 0, mons = 0, *ret_ptr = 0; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ u32 party_mon_level = GetMonData(party_mon, MON_DATA_LEVEL, NULL);
+ if (party_mon_level <= highest_level)
+ {
+ mons++;
+ }
+ }
+ }
+
+ *ret_ptr = mons;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonLevel(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = 0;
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_LEVEL, NULL);
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonNature(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ if (mon_slot >= party_count)
+ {
+ *ret_ptr = 0;
+ return FALSE;
+ }
+
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg)
+ {
+ *ret_ptr = 0;
+ return FALSE;
+ }
+
+ *ret_ptr = GetMonNature(party_mon);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_FindPartyMonWithNature(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 required_nature = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ u8 i;
+ for (i = 0, *ret_ptr = 0xFF; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ u8 party_mon_nature = GetMonNature(party_mon);
+ if (required_nature == party_mon_nature)
+ {
+ *ret_ptr = i;
+ break;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonFriendship(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_AddPartyMonFriendship(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16 friendship_to_add = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 map_sec = MapHeader_GetMapSec(*ctx->unk80->mapId);
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ u16 friendship = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL);
+
+ if (friendship_to_add != 0)
+ {
+ u16 party_mon_held_item = (u16)GetMonData(party_mon, MON_DATA_HELD_ITEM, NULL);
+ u32 held_item_hold_effect = GetItemAttr(party_mon_held_item, ITEMATTR_HOLD_EFFECT, 11);
+ if (held_item_hold_effect == HOLD_EFFECT_FRIENDSHIP_UP)
+ {
+ friendship_to_add = (u16)((friendship_to_add * 150) / 100);
+ }
+
+ u32 party_mon_pokeball = GetMonData(party_mon, MON_DATA_POKEBALL, NULL);
+ if (party_mon_pokeball == ITEM_LUXURY_BALL)
+ {
+ friendship_to_add++;
+ }
+
+ u32 party_mon_egg_met_location = GetMonData(party_mon, MON_DATA_EGG_MET_LOCATION, NULL);
+ if (map_sec == party_mon_egg_met_location)
+ {
+ friendship_to_add++;
+ }
+ }
+
+ friendship += friendship_to_add;
+ if (friendship > 0xFF)
+ {
+ friendship = 0xFF;
+ }
+
+ SetMonData(party_mon, MON_DATA_FRIENDSHIP, &friendship);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_SubtractPartyMonFriendship(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16 friendship_to_deplete = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ u16 friendship = (u16)GetMonData(party_mon, MON_DATA_FRIENDSHIP, NULL);
+ if (friendship_to_deplete > friendship)
+ {
+ friendship = 0;
+ }
+ else
+ {
+ friendship -= friendship_to_deplete;
+ }
+
+ SetMonData(party_mon, MON_DATA_FRIENDSHIP, &friendship);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonContestCondition(struct ScriptContext* ctx)
+{
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 contest_condition_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_COOL + contest_condition_id, NULL);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetLeadingPartyMonSlot(struct ScriptContext* ctx)
+{
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+
+ *ret_ptr = FUN_02054DEC(ctx->unk80->saveBlock2);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonTypes(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* type1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* type2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *type1 = (u16)GetMonData(party_mon, MON_DATA_TYPE_1, NULL);
+ *type2 = (u16)GetMonData(party_mon, MON_DATA_TYPE_2, NULL);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountPartyMons(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+
+ *ret_ptr = (u16)GetPartyCount(party);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountPartyMons_OmitEggs(struct ScriptContext* ctx)
+{
+ u32 non_egg_mons;
+ s32 i;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ s32 party_count = GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ for (i = 0, non_egg_mons = 0; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ non_egg_mons++;
+ }
+
+ }
+
+ *ret_ptr = (u16)non_egg_mons;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountAvailablePartyMons_IgnoreSlot(struct ScriptContext* ctx)
+{
+ u16 slot_to_ignore;
+ s32 party_count;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ slot_to_ignore = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ party_count = GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ u32 available_mons;
+ s32 i;
+ for (i = 0, available_mons = 0; i < party_count; i++)
+ {
+ if (i != slot_to_ignore)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ u32 party_mon_hp = GetMonData(party_mon, MON_DATA_HP, NULL);
+ if (party_mon_hp != 0)
+ {
+ available_mons++;
+ }
+ }
+ }
+ }
+
+ *ret_ptr = (u16)available_mons;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountAvailablePartyAndPCMons(struct ScriptContext* ctx)
+{
+ s32 party_count;
+ struct PCStorage* pc;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ pc = GetStoragePCPointer(sav_ptr->saveBlock2);
+ party_count = GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ u32 mons;
+ s32 i;
+ for (i = 0, mons = 0; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ u32 party_mon_hp = GetMonData(party_mon, MON_DATA_HP, NULL);
+ if (party_mon_hp != 0)
+ {
+ mons++;
+ }
+ }
+ }
+
+ *ret_ptr = (u16)(mons + PCStorage_CountMonsInAllBoxes(pc));
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyEggCount(struct ScriptContext* ctx)
+{
+ s32 party_count;
+ u32 eggs_in_party;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ party_count = GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ s32 i;
+ for (i = 0, eggs_in_party = 0; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg)
+ {
+ eggs_in_party++;
+ }
+ }
+
+ *ret_ptr = (u16)eggs_in_party;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CheckPartyForPokerus(struct ScriptContext* ctx)
+{
+ u16 party_count;
+ u16 i;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ for (i = 0, *ret_ptr = 0; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_has_pokerus = (BOOL)GetMonData(party_mon, MON_DATA_POKERUS, NULL);
+ if (party_mon_has_pokerus)
+ {
+ *ret_ptr = 1;
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonGender(struct ScriptContext* ctx)
+{
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_GENDER, NULL);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountPartyMonMoves(struct ScriptContext* ctx)
+{
+ struct Pokemon* party_mon;
+ u8 moves;
+
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg)
+ {
+ *ret_ptr = 0;
+ return FALSE;
+ }
+
+ moves = 0;
+
+ u32 move1 = GetMonData(party_mon, MON_DATA_MOVE1, NULL);
+ if (move1 != MOVE_NONE)
+ {
+ moves++;
+ }
+
+ u32 move2 = GetMonData(party_mon, MON_DATA_MOVE2, NULL);
+ if (move2 != MOVE_NONE)
+ {
+ moves++;
+ }
+
+ u32 move3 = GetMonData(party_mon, MON_DATA_MOVE3, NULL);
+ if (move3 != MOVE_NONE)
+ {
+ moves++;
+ }
+
+ u32 move4 = GetMonData(party_mon, MON_DATA_MOVE4, NULL);
+ if (move4 != MOVE_NONE)
+ {
+ moves++;
+ }
+
+ *ret_ptr = moves;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_ForgetPartyMonMove(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 move_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ FUN_020699A4(party_mon, move_slot);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonMove(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 move_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_MOVE1 + move_slot, NULL);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetPartyMonHeldItem(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = (u16)GetMonData(party_mon, MON_DATA_HELD_ITEM, NULL);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_ResetPartyMonHeldItem(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ u16 party_mon_held_item = ITEM_NONE;
+ SetMonData(party_mon, MON_DATA_HELD_ITEM, &party_mon_held_item);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CheckPartyForSpecies(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u8 party_count = (u8)GetPartyCount(SavArray_PlayerParty_get(sav_ptr->saveBlock2));
+
+ u8 i;
+ for (i = 0, *ret_ptr = 0; i < party_count; i++)
+ {
+ struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg == FALSE)
+ {
+ u16 party_mon_species = (u16)GetMonData(party_mon, MON_DATA_SPECIES, NULL);
+ if (species == party_mon_species)
+ {
+ *ret_ptr = 1;
+ break;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountPartyMonRibbons(struct ScriptContext* ctx)
+{
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ u16 ribbon_idx;
+ u16 ribbons;
+ for (ribbon_idx = 0, ribbons = 0; ribbon_idx < 80; ribbon_idx++)
+ {
+ BOOL party_mon_has_ribbon = (BOOL)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL);
+ if (party_mon_has_ribbon)
+ {
+ ribbons++;
+ }
+ }
+
+ *ret_ptr = ribbons;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CountTotalPartyRibbons(struct ScriptContext* ctx)
+{
+ struct PlayerParty* party;
+ u16 ribbon_idx;
+ u16 ribbons;
+
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(ctx->unk80->saveBlock2));
+ party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+
+ for (ribbon_idx = 0, ribbons = 0; ribbon_idx < 80; ribbon_idx++)
+ {
+ for (u16 i = 0; i < party_count; i++)
+ {
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg)
+ {
+ // BUG: This `break` should be a `continue`, as any party mons after a detected
+ // egg would have their ribbons ignored.
+ break;
+ }
+
+ BOOL party_mon_has_ribbon = (BOOL)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL);
+ if (party_mon_has_ribbon)
+ {
+ ribbons++;
+ break;
+ }
+ }
+ }
+
+ *ret_ptr = ribbons;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_PartyMonHasRibbon(struct ScriptContext* ctx)
+{
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 ribbon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ *ret_ptr = (u16)GetMonData(party_mon, FUN_0207FC5C((u8)ribbon_idx, 0), NULL);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GivePartyMonRibbon(struct ScriptContext* ctx)
+{
+ u16 mon_slot = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 ribbon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u8 mon_has_ribbon = TRUE;
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, mon_slot);
+
+ SetMonData(party_mon, (s32)FUN_0207FC5C((u8)ribbon_idx, 0), &mon_has_ribbon);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CheckPartyForBadEgg(struct ScriptContext* ctx)
+{
+ u16 ribbon_idx;
+
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 party_count = (u16)GetPartyCount(SavArray_PlayerParty_get(ctx->unk80->saveBlock2));
+ struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2);
+
+ // BUG: Probably a copy-paste fail. Checks if your party has a Bad Egg in it,
+ // 80 times.
+ for (ribbon_idx = 0; ribbon_idx < 80; ribbon_idx++)
+ {
+ for (u16 i = 0; i < party_count; i++)
+ {
+ struct Pokemon* party_mon = GetPartyMonByIndex(party, i);
+ BOOL party_mon_is_egg = (BOOL)GetMonData(party_mon, MON_DATA_IS_EGG, NULL);
+ if (party_mon_is_egg)
+ {
+ BOOL party_mon_is_bad_egg = (BOOL)GetMonData(party_mon, MON_DATA_CHECKSUM_FAILED, NULL);
+ if (party_mon_is_bad_egg)
+ {
+ *ret_ptr = 1;
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ *ret_ptr = 0;
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk00A0(struct ScriptContext* ctx)
+{
+#pragma unused(ctx)
+ return FALSE;
+}
diff --git a/include/scrcmd.h b/include/scrcmd.h
index 91cb306c..826b74d3 100644
--- a/include/scrcmd.h
+++ b/include/scrcmd.h
@@ -249,6 +249,42 @@ BOOL ScrCmd_Unk01AD(struct ScriptContext* ctx);
//scrcmd_18.c
BOOL ScrCmd_GiveMon(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonSpecies(struct ScriptContext* ctx);
+BOOL ScrCmd_CheckPartyMonOTID(struct ScriptContext* ctx);
+BOOL ScrCmd_GiveEgg(struct ScriptContext* ctx);
+BOOL ScrCmd_SetPartyMonMove(struct ScriptContext* ctx);
+BOOL ScrCmd_PartyMonHasMove(struct ScriptContext* ctx);
+BOOL ScrCmd_FindPartyMonWithMove(struct ScriptContext* ctx);
+BOOL ScrCmd_SurvivePsn(struct ScriptContext* ctx);
+BOOL ScrCmd_CountPartyMonsAtOrBelowLevel(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonLevel(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonNature(struct ScriptContext* ctx);
+BOOL ScrCmd_FindPartyMonWithNature(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonFriendship(struct ScriptContext* ctx);
+BOOL ScrCmd_AddPartyMonFriendship(struct ScriptContext* ctx);
+BOOL ScrCmd_SubtractPartyMonFriendship(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonContestCondition(struct ScriptContext* ctx);
+BOOL ScrCmd_GetLeadingPartyMonSlot(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonTypes(struct ScriptContext* ctx);
+BOOL ScrCmd_CountPartyMons(struct ScriptContext* ctx);
+BOOL ScrCmd_CountPartyMons_OmitEggs(struct ScriptContext* ctx);
+BOOL ScrCmd_CountAvailablePartyMons_IgnoreSlot(struct ScriptContext* ctx);
+BOOL ScrCmd_CountAvailablePartyAndPCMons(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyEggCount(struct ScriptContext* ctx);
+BOOL ScrCmd_CheckPartyForPokerus(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonGender(struct ScriptContext* ctx);
+BOOL ScrCmd_CountPartyMonMoves(struct ScriptContext* ctx);
+BOOL ScrCmd_ForgetPartyMonMove(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonMove(struct ScriptContext* ctx);
+BOOL ScrCmd_GetPartyMonHeldItem(struct ScriptContext* ctx);
+BOOL ScrCmd_ResetPartyMonHeldItem(struct ScriptContext* ctx);
+BOOL ScrCmd_CheckPartyForSpecies(struct ScriptContext* ctx);
+BOOL ScrCmd_CountPartyMonRibbons(struct ScriptContext* ctx);
+BOOL ScrCmd_CountTotalPartyRibbons(struct ScriptContext* ctx);
+BOOL ScrCmd_PartyMonHasRibbon(struct ScriptContext* ctx);
+BOOL ScrCmd_GivePartyMonRibbon(struct ScriptContext* ctx);
+BOOL ScrCmd_CheckPartyForBadEgg(struct ScriptContext* ctx);
+BOOL ScrCmd_Unk00A0(struct ScriptContext* ctx);
//scrcmd_fossils.c
BOOL ScrCmd_CountFossils(struct ScriptContext* ctx);