diff options
-rw-r--r-- | arm9/arm9.lsf | 3 | ||||
-rw-r--r-- | arm9/asm/scrcmd_18.s | 1801 | ||||
-rw-r--r-- | arm9/asm/unk_02038C78.s | 48 | ||||
-rw-r--r-- | arm9/global.inc | 48 | ||||
-rw-r--r-- | arm9/src/scrcmd_18_c.c | 22 | ||||
-rw-r--r-- | arm9/src/scrcmd_party.c | 815 | ||||
-rw-r--r-- | include/scrcmd.h | 36 |
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); |