From 7b70f03be7271c1aef374b928ac7ef2942ca7bfd Mon Sep 17 00:00:00 2001 From: bhvNT Date: Sat, 29 Mar 2025 19:17:08 +0100 Subject: [PATCH 1/2] scrcmd_7 OK --- arm9/asm/scrcmd_7.s | 674 -------------------------------------------- arm9/src/scrcmd_7.c | 335 ++++++++++++++++++++++ 2 files changed, 335 insertions(+), 674 deletions(-) delete mode 100644 arm9/asm/scrcmd_7.s create mode 100644 arm9/src/scrcmd_7.c diff --git a/arm9/asm/scrcmd_7.s b/arm9/asm/scrcmd_7.s deleted file mode 100644 index 4275c07bc..000000000 --- a/arm9/asm/scrcmd_7.s +++ /dev/null @@ -1,674 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start ScrCmd_Unk00B6 -ScrCmd_Unk00B6: ; 0x020416A8 - push {r3-r7, lr} - sub sp, #0x18 - 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 FieldSystem_VarGet - add r5, r0, #0x0 - bne _02041708 - add r0, r4, #0x0 - mov r1, #0x18 - bl FieldSysGetAttrAddr - str r0, [sp, #0x14] - add r0, r4, #0x0 - mov r1, #0x19 - bl FieldSysGetAttrAddr - str r0, [sp, #0xc] - add r0, r4, #0x0 - mov r1, #0x1a - bl FieldSysGetAttrAddr - add r0, r4, #0x0 - mov r1, #0x1b - bl FieldSysGetAttrAddr - add r0, r4, #0x0 - mov r1, #0x1c - bl FieldSysGetAttrAddr - str r0, [sp, #0x10] - add r0, r4, #0x0 - mov r1, #0x1d - bl FieldSysGetAttrAddr - add r6, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x1e - bl FieldSysGetAttrAddr - b _02041748 -_02041708: - add r0, r4, #0x0 - mov r1, #0x1f - bl FieldSysGetAttrAddr - str r0, [sp, #0x14] - add r0, r4, #0x0 - mov r1, #0x20 - bl FieldSysGetAttrAddr - str r0, [sp, #0xc] - add r0, r4, #0x0 - mov r1, #0x21 - bl FieldSysGetAttrAddr - add r0, r4, #0x0 - mov r1, #0x22 - bl FieldSysGetAttrAddr - add r0, r4, #0x0 - mov r1, #0x23 - bl FieldSysGetAttrAddr - str r0, [sp, #0x10] - add r0, r4, #0x0 - mov r1, #0x24 - bl FieldSysGetAttrAddr - add r6, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x25 - bl FieldSysGetAttrAddr -_02041748: - add r7, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0x0] - ldr r0, [sp, #0x10] - ldr r2, [sp, #0xc] - ldr r0, [r0, #0x0] - ldr r3, [sp, #0x14] - str r0, [sp, #0x4] - str r5, [sp, #0x8] - ldr r0, [r6, #0x0] - ldr r1, [r4, #0x38] - ldr r2, [r2, #0x0] - ldr r3, [r3, #0x0] - bl sub_0205CA4C - str r0, [r7, #0x0] - mov r0, #0x0 - add sp, #0x18 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00B7 -ScrCmd_Unk00B7: ; 0x02041770 - 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 FieldSystem_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 r4, r0, #0x0 - mov r0, #0x0 - strh r0, [r4, #0x0] - cmp r6, #0x0 - bne _020417AE - add r5, #0x80 - ldr r0, [r5, #0x0] - mov r1, #0x1e - bl FieldSysGetAttrAddr - b _020417B8 -_020417AE: - add r5, #0x80 - ldr r0, [r5, #0x0] - mov r1, #0x25 - bl FieldSysGetAttrAddr -_020417B8: - add r5, r0, #0x0 - ldr r0, [r5, #0x0] - cmp r0, #0x0 - bne _020417C6 - mov r0, #0x1 - strh r0, [r4, #0x0] - pop {r4-r6, pc} -_020417C6: - bl sub_0205CA64 - cmp r0, #0x1 - bne _020417DC - ldr r0, [r5, #0x0] - bl sub_0205CA78 - mov r0, #0x0 - str r0, [r5, #0x0] - mov r0, #0x1 - strh r0, [r4, #0x0] -_020417DC: - mov r0, #0x1 - pop {r4-r6, pc} - - thumb_func_start ScrCmd_Unk00B8 -ScrCmd_Unk00B8: ; 0x020417E0 - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1c - bl FieldSysGetAttrAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - ldrh r1, [r5, #0x0] - strh r1, [r0, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_Unk00B9 -ScrCmd_Unk00B9: ; 0x02041808 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1b - bl FieldSysGetAttrAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x22 - bl FieldSysGetAttrAddr - 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 FieldSystem_VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - cmp r7, #0x0 - bne _02041852 - ldrh r1, [r4, #0x0] - b _02041854 -_02041852: - ldrh r1, [r6, #0x0] -_02041854: - strh r1, [r0, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00E4 -ScrCmd_Unk00E4: ; 0x0204185C - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x8 - bl FieldSysGetAttrAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - ldrh r0, [r4, #0x0] - bl sub_020395F4 - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00E5 -ScrCmd_Unk00E5: ; 0x0204188C - push {r3-r7, lr} - sub sp, #0x10 - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x8 - add r0, r4, #0x0 - bl FieldSysGetAttrAddr - add r0, r4, #0x0 - mov r1, #0x17 - bl FieldSysGetAttrAddr - 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 FieldSystem_VarGet - str r0, [sp, #0xc] - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl FieldSystem_VarGet - str r0, [sp, #0x8] - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r6, #0x0 - ldr r0, [r0, #0xc] - bl Save_VarsFlags_Get - bl Save_VarsFlags_CheckHaveFollower - cmp r0, #0x1 - bne _020418F2 - ldr r0, [r4, #0xc] - bl Save_VarsFlags_Get - bl sub_0205F368 - add r6, r0, #0x0 -_020418F2: - mov r0, #0xb - str r0, [sp, #0x0] - str r7, [sp, #0x4] - ldr r0, [r5, #0x74] - ldr r1, [sp, #0xc] - ldr r2, [sp, #0x8] - add r3, r6, #0x0 - bl SetupAndStartTrainerBattle - mov r0, #0x1 - add sp, #0x10 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk02A0 -ScrCmd_Unk02A0: ; 0x0204190C - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x17 - bl FieldSysGetAttrAddr - 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 FieldSystem_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 FieldSystem_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 FieldSystem_VarGet - add r2, r0, #0x0 - mov r0, #0xb - str r0, [sp, #0x0] - str r4, [sp, #0x4] - ldr r0, [r5, #0x74] - add r1, r7, #0x0 - add r3, r6, #0x0 - bl SetupAndStartTrainerBattle - mov r0, #0x1 - add sp, #0x8 - pop {r3-r7, pc} - - thumb_func_start ScrCmd_Unk00E7 -ScrCmd_Unk00E7: ; 0x02041970 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x8 - bl FieldSysGetAttrAddr - 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 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 GetVarPointer - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - ldrh r0, [r4, #0x0] - bl sub_020395F4 - bl TrainerIsDoubleBattle - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bne _020419D2 - mov r0, #0x0 - mov r1, #0x2 - add r2, r0, #0x0 - b _020419EC -_020419D2: - ldrh r0, [r4, #0x0] - bl sub_02039618 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bne _020419E6 - mov r0, #0x3 - mov r1, #0x5 - mov r2, #0x6 - b _020419EC -_020419E6: - mov r0, #0x7 - mov r1, #0x9 - mov r2, #0xa -_020419EC: - strh r0, [r7, #0x0] - strh r1, [r6, #0x0] - strh r2, [r5, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00E8 -ScrCmd_Unk00E8: ; 0x020419F8 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x8 - bl FieldSysGetAttrAddr - 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 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 GetVarPointer - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - ldrh r0, [r4, #0x0] - bl sub_020395F4 - bl TrainerIsDoubleBattle - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bne _02041A5A - mov r1, #0x0 - mov r0, #0x11 - add r2, r1, #0x0 - b _02041A74 -_02041A5A: - ldrh r0, [r4, #0x0] - bl sub_02039618 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bne _02041A6E - mov r0, #0x12 - mov r1, #0x0 - mov r2, #0x6 - b _02041A74 -_02041A6E: - mov r0, #0x13 - mov r1, #0x0 - mov r2, #0xa -_02041A74: - strh r0, [r7, #0x0] - strh r1, [r6, #0x0] - strh r2, [r5, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00E9 -ScrCmd_Unk00E9: ; 0x02041A80 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x8 - bl FieldSysGetAttrAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - ldrh r0, [r4, #0x0] - bl sub_020395F4 - bl TrainerIsDoubleBattle - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00EA -ScrCmd_Unk00EA: ; 0x02041AB4 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl FieldSystem_VarGet - bl sub_0204AD0C - bl sub_02004724 - mov r0, #0x1 - pop {r4, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00EB -ScrCmd_Unk00EB: ; 0x02041AD4 - push {r3, lr} - ldr r0, [r0, #0x74] - bl CallTask_Blackout - mov r0, #0x1 - pop {r3, pc} - - thumb_func_start ScrCmd_Unk00EC -ScrCmd_Unk00EC: ; 0x02041AE0 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x17 - bl FieldSysGetAttrAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - bl IsBattleResultWin - strh r0, [r5, #0x0] - mov r0, #0x1 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00ED -ScrCmd_Unk00ED: ; 0x02041B10 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x17 - bl FieldSysGetAttrAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - bl sub_020480C8 - strh r0, [r5, #0x0] - mov r0, #0x1 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk02BC -ScrCmd_Unk02BC: ; 0x02041B40 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x17 - bl FieldSysGetAttrAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - bl sub_020480D8 - strh r0, [r5, #0x0] - mov r0, #0x1 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00EE -ScrCmd_Unk00EE: ; 0x02041B70 - 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 SaveArray_Party_Get - bl HasEnoughAlivePokemonForDoubleBattle - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk00EF -ScrCmd_Unk00EF: ; 0x02041B9C - push {r4, lr} - sub sp, #0x8 - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x17 - bl FieldSysGetAttrAddr - mov r1, #0xb - str r1, [sp, #0x0] - str r0, [sp, #0x4] - mov r2, #0x0 - ldr r0, [r4, #0x74] - mov r1, #0x1 - add r3, r2, #0x0 - bl SetupAndStartTrainerBattle - mov r0, #0x1 - add sp, #0x8 - pop {r4, pc} - - thumb_func_start ScrCmd_Unk00F0 -ScrCmd_Unk00F0: ; 0x02041BC4 - push {r3-r5, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FieldSysGetAttrAddr - add r5, r0, #0x0 - ldr r0, [r5, #0x0] - bl MapObject_GetFieldSystem - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - bl MapObject_GetID - add r1, r0, #0x0 - lsl r1, r1, #0x10 - add r0, r4, #0x0 - lsr r1, r1, #0x10 - bl TrainerFieldSystem_FlagSet - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_Unk00F1 -ScrCmd_Unk00F1: ; 0x02041BF0 - push {r3-r7, lr} - add r6, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FieldSysGetAttrAddr - add r5, r0, #0x0 - add r0, r6, #0x0 - bl ScriptReadWord - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - bl MapObject_GetFieldSystem - add r7, r0, #0x0 - ldr r0, [r5, #0x0] - bl MapObject_GetID - add r1, r0, #0x0 - lsl r1, r1, #0x10 - add r0, r7, #0x0 - lsr r1, r1, #0x10 - bl TrainerFieldSystem_FlagCheck - cmp r0, #0x1 - bne _02041C34 - ldr r1, [r6, #0x8] - add r0, r6, #0x0 - add r1, r1, r4 - bl ScriptJump - mov r0, #0x1 - pop {r3-r7, pc} -_02041C34: - mov r0, #0x0 - pop {r3-r7, pc} diff --git a/arm9/src/scrcmd_7.c b/arm9/src/scrcmd_7.c new file mode 100644 index 000000000..23a5d5b0a --- /dev/null +++ b/arm9/src/scrcmd_7.c @@ -0,0 +1,335 @@ +#include "global.h" + +#include "blackout.h" +#include "encounter.h" +#include "scrcmd.h" +#include "script_pokemon_util.h" +#include "unk_0205EC84.h" + +extern void *FieldSysGetAttrAddr(FieldSystem *fieldSystem, u8 idx); +extern SaveFashionData *Save_FashionData_Get(SaveData *save); +extern void TrainerFieldSystem_FlagSet(FieldSystem *fieldSystem, u16 flag); +extern u8 TrainerFieldSystem_FlagCheck(FieldSystem *fieldSystem, u16 flag); + +extern void *sub_0205CA4C(void *event, PlayerAvatar *playerAvatar, void *param3, void *param4, int param5, void *encounterType, u16 param7); +extern int sub_0205CA64(void); +extern void sub_0205CA78(void *param1); +extern u16 sub_020395F4(u16 scriptNumber); +extern int sub_0205F368(SaveVarsFlags *saveVarFlags); +extern BOOL TrainerIsDoubleBattle(u16 param1); +extern BOOL sub_02039618(u16 scriptNumber); +extern BOOL IsBattleResultWin(u32 winFlag); +extern int sub_0204AD0C(u16 param1); +extern void sub_02004724(int param1); +extern int sub_020480C8(int param1); +extern int sub_020480D8(int param1); + +BOOL ScrCmd_Unk00B6(ScriptContext *ctx); +BOOL ScrCmd_Unk00B7(ScriptContext *ctx); +BOOL ScrCmd_Unk00B8(ScriptContext *ctx); +BOOL ScrCmd_Unk00B9(ScriptContext *ctx); +BOOL ScrCmd_Unk00E4(ScriptContext *ctx); +BOOL ScrCmd_Unk00E5(ScriptContext *ctx); +BOOL ScrCmd_Unk02A0(ScriptContext *ctx); +BOOL ScrCmd_Unk00E7(ScriptContext *ctx); +BOOL ScrCmd_Unk00E8(ScriptContext *ctx); +BOOL ScrCmd_Unk00E9(ScriptContext *ctx); +BOOL ScrCmd_Unk00EA(ScriptContext *ctx); +BOOL ScrCmd_Unk00EB(ScriptContext *ctx); +BOOL ScrCmd_Unk00EC(ScriptContext *ctx); +BOOL ScrCmd_Unk00ED(ScriptContext *ctx); +BOOL ScrCmd_Unk02BC(ScriptContext *ctx); +BOOL ScrCmd_Unk00EE(ScriptContext *ctx); +BOOL ScrCmd_Unk00EF(ScriptContext *ctx); +BOOL ScrCmd_Unk00F0(ScriptContext *ctx); +BOOL ScrCmd_Unk00F1(ScriptContext *ctx); + +BOOL ScrCmd_Unk00B6(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + void **trainer0; + void **trainer8; + void **trainerId; + void **trainerEncounterType; + void **trainer4; + void **trainer18; + u16 var = ScriptGetVar(ctx); + void **trainerEvent; + + if (var == 0) { + trainer0 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_00); + trainer4 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_04); + trainer8 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_08); + trainerId = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_0_ID); + trainerEncounterType = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_0_ENCOUNTER_TYPE); + trainerEvent = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_0_EVENT); + trainer18 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18); + } else { + trainer0 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_00); + trainer4 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_04); + trainer8 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_08); + trainerId = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_1_ID); + trainerEncounterType = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_1_ENCOUNTER_TYPE); + trainerEvent = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_1_EVENT); + trainer18 = FieldSysGetAttrAddr(field, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18); + } + + *trainer18 = sub_0205CA4C(*trainerEvent, field->playerAvatar, *trainer4, *trainer0, 0, *trainerEncounterType, var); + + return FALSE; +} + +BOOL ScrCmd_Unk00B7(ScriptContext *ctx) { + u16 var1 = ScriptGetVar(ctx); + u16 *var2 = ScriptGetVarPointer(ctx); + void **trainer18; + + *var2 = 0; + + if (var1 == 0) { + trainer18 = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18); + } else { + trainer18 = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18); + } + + if (*trainer18 == NULL) { + *var2 = 1; + + return TRUE; + } else { + if (sub_0205CA64() == 1) { + sub_0205CA78(*trainer18); + *trainer18 = NULL; + *var2 = 1; + } + } + + return TRUE; +} + +BOOL ScrCmd_Unk00B8(ScriptContext *ctx) { + u16 *trainerEncounterType = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_0_ENCOUNTER_TYPE); + u16 *encounterTypePtr = ScriptGetVarPointer(ctx); + + *encounterTypePtr = *trainerEncounterType; + + return FALSE; +} + +BOOL ScrCmd_Unk00B9(ScriptContext *ctx) { + u16 *trainer0Id = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_0_ID); + u16 *trainer1Id = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_1_ID); + u16 id; + u16 var1 = ScriptGetVar(ctx); + u16 *trainerId = ScriptGetVarPointer(ctx); + + if (var1 == 0) { + id = *trainer0Id; + } else { + id = *trainer1Id; + } + + *trainerId = id; + + return FALSE; +} + +BOOL ScrCmd_Unk00E4(ScriptContext *ctx) { + u16 *scriptNumber = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ACTIVE_SCRIPT_NUMBER); + u16 *var = ScriptGetVarPointer(ctx); + + *var = sub_020395F4(*scriptNumber); + + return FALSE; +} + +BOOL ScrCmd_Unk00E5(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u16 *scriptNumber = FieldSysGetAttrAddr(field, SCRIPTENV_ACTIVE_SCRIPT_NUMBER); + u32 *winFlag = FieldSysGetAttrAddr(field, SCRIPTENV_BATTLE_WIN_FLAG); + u16 opponentTrainer1 = ScriptGetVar(ctx); + u16 opponentTrainer2 = ScriptGetVar(ctx); + u32 followerTrainerNum = 0; + + if (Save_VarsFlags_CheckHaveFollower(Save_VarsFlags_Get(ctx->fieldSystem->saveData)) == TRUE) { + followerTrainerNum = sub_0205F368(Save_VarsFlags_Get(field->saveData)); + } + + SetupAndStartTrainerBattle(ctx->taskManager, opponentTrainer1, opponentTrainer2, followerTrainerNum, HEAP_ID_FIELD, winFlag); + + return TRUE; +} + +BOOL ScrCmd_Unk02A0(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u32 *winFlag = FieldSysGetAttrAddr(field, SCRIPTENV_BATTLE_WIN_FLAG); + u16 followerTrainerNum = ScriptGetVar(ctx); + u16 opponentTrainer1 = ScriptGetVar(ctx); + u16 opponentTrainer2 = ScriptGetVar(ctx); + + SetupAndStartTrainerBattle(ctx->taskManager, opponentTrainer1, opponentTrainer2, followerTrainerNum, HEAP_ID_FIELD, winFlag); + + return TRUE; +} + +BOOL ScrCmd_Unk00E7(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u16 *scriptNumber = FieldSysGetAttrAddr(field, SCRIPTENV_ACTIVE_SCRIPT_NUMBER); + u16 *var1 = ScriptGetVarPointer(ctx); + u16 *var2 = ScriptGetVarPointer(ctx); + u16 *var3 = ScriptGetVarPointer(ctx); + int var4; + int var5; + int var6; + + if ((u16)TrainerIsDoubleBattle(sub_020395F4(*scriptNumber)) == FALSE) { + var4 = 0; + var5 = 2; + var6 = 0; + } else { + if ((u16)sub_02039618(*scriptNumber) == FALSE) { + var4 = 3; + var5 = 5; + var6 = 6; + } else { + var4 = 7; + var5 = 9; + var6 = 10; + } + } + + *var1 = var4; + *var2 = var5; + *var3 = var6; + + return FALSE; +} + +BOOL ScrCmd_Unk00E8(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u16 *scriptNumber = FieldSysGetAttrAddr(field, SCRIPTENV_ACTIVE_SCRIPT_NUMBER); + u16 *var1 = ScriptGetVarPointer(ctx); + u16 *var2 = ScriptGetVarPointer(ctx); + u16 *var3 = ScriptGetVarPointer(ctx); + int var4; + int var5; + int var6; + + if ((u16)TrainerIsDoubleBattle(sub_020395F4(*scriptNumber)) == FALSE) { + var4 = 17; + var5 = 0; + var6 = 0; + } else { + if ((u16)sub_02039618(*scriptNumber) == FALSE) { + var4 = 18; + var5 = 0; + var6 = 6; + } else { + var4 = 19; + var5 = 0; + var6 = 10; + } + } + + *var1 = var4; + *var2 = var5; + *var3 = var6; + + return FALSE; +} + +BOOL ScrCmd_Unk00E9(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u16 *scriptNumber = FieldSysGetAttrAddr(field, SCRIPTENV_ACTIVE_SCRIPT_NUMBER); + u16 *var1 = ScriptGetVarPointer(ctx); + + *var1 = TrainerIsDoubleBattle(sub_020395F4(*scriptNumber)); + + return FALSE; +} + +BOOL ScrCmd_Unk00EA(ScriptContext *ctx) { + sub_02004724(sub_0204AD0C(ScriptGetVar(ctx))); + + return TRUE; +} + +BOOL ScrCmd_Unk00EB(ScriptContext *ctx) { + CallTask_Blackout(ctx->taskManager); + + return TRUE; +} + +BOOL ScrCmd_Unk00EC(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u32 *winFlag = FieldSysGetAttrAddr(field, SCRIPTENV_BATTLE_WIN_FLAG); + u16 *var1 = ScriptGetVarPointer(ctx); + + *var1 = IsBattleResultWin(*winFlag); + + return TRUE; +} + +BOOL ScrCmd_Unk00ED(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u32 *var1 = FieldSysGetAttrAddr(field, SCRIPTENV_BATTLE_WIN_FLAG); + u16 *var2 = ScriptGetVarPointer(ctx); + + *var2 = sub_020480C8(*var1); + + return TRUE; +} + +BOOL ScrCmd_Unk02BC(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u32 *var1 = FieldSysGetAttrAddr(field, SCRIPTENV_BATTLE_WIN_FLAG); + u16 *var2 = ScriptGetVarPointer(ctx); + + *var2 = sub_020480D8(*var1); + + return TRUE; +} + +BOOL ScrCmd_Unk00EE(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u16 *var2 = ScriptGetVarPointer(ctx); + + *var2 = HasEnoughAlivePokemonForDoubleBattle(SaveArray_Party_Get(ctx->fieldSystem->saveData)); + + return FALSE; +} + +BOOL ScrCmd_Unk00EF(ScriptContext *ctx) { + FieldSystem *field = ctx->fieldSystem; + u32 *winFlag = FieldSysGetAttrAddr(field, SCRIPTENV_BATTLE_WIN_FLAG); + + SetupAndStartTrainerBattle(ctx->taskManager, 1, 0, 0, HEAP_ID_FIELD, winFlag); + + return TRUE; +} + +BOOL ScrCmd_Unk00F0(ScriptContext *ctx) { + LocalMapObject **lastInteracted = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_LAST_INTERACTED); + FieldSystem *field = MapObject_GetFieldSystem(*lastInteracted); + + TrainerFieldSystem_FlagSet(field, MapObject_GetID(*lastInteracted)); + + return FALSE; +} + +BOOL ScrCmd_Unk00F1(ScriptContext *ctx) { + LocalMapObject **lastInteracted = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_LAST_INTERACTED); + u32 ptr = ScriptReadWord(ctx); + FieldSystem *field = MapObject_GetFieldSystem(*lastInteracted); + + if (TrainerFieldSystem_FlagCheck(field, MapObject_GetID(*lastInteracted)) == TRUE) { + u8 *scriptPtr = (u8 *)ctx->scriptPtr; + + scriptPtr += ptr; + + ScriptJump(ctx, scriptPtr); + + return TRUE; + } + + return FALSE; +} From 471b14b435ed344da811557e484fd79afaa1bf39 Mon Sep 17 00:00:00 2001 From: bhvNT Date: Sun, 13 Apr 2025 19:19:10 +0200 Subject: [PATCH 2/2] review --- arm9/src/scrcmd_7.c | 76 ++++++++++++--------------------------------- include/scrcmd.h | 21 +++++++++++++ 2 files changed, 41 insertions(+), 56 deletions(-) diff --git a/arm9/src/scrcmd_7.c b/arm9/src/scrcmd_7.c index 23a5d5b0a..3414d6409 100644 --- a/arm9/src/scrcmd_7.c +++ b/arm9/src/scrcmd_7.c @@ -24,26 +24,6 @@ extern void sub_02004724(int param1); extern int sub_020480C8(int param1); extern int sub_020480D8(int param1); -BOOL ScrCmd_Unk00B6(ScriptContext *ctx); -BOOL ScrCmd_Unk00B7(ScriptContext *ctx); -BOOL ScrCmd_Unk00B8(ScriptContext *ctx); -BOOL ScrCmd_Unk00B9(ScriptContext *ctx); -BOOL ScrCmd_Unk00E4(ScriptContext *ctx); -BOOL ScrCmd_Unk00E5(ScriptContext *ctx); -BOOL ScrCmd_Unk02A0(ScriptContext *ctx); -BOOL ScrCmd_Unk00E7(ScriptContext *ctx); -BOOL ScrCmd_Unk00E8(ScriptContext *ctx); -BOOL ScrCmd_Unk00E9(ScriptContext *ctx); -BOOL ScrCmd_Unk00EA(ScriptContext *ctx); -BOOL ScrCmd_Unk00EB(ScriptContext *ctx); -BOOL ScrCmd_Unk00EC(ScriptContext *ctx); -BOOL ScrCmd_Unk00ED(ScriptContext *ctx); -BOOL ScrCmd_Unk02BC(ScriptContext *ctx); -BOOL ScrCmd_Unk00EE(ScriptContext *ctx); -BOOL ScrCmd_Unk00EF(ScriptContext *ctx); -BOOL ScrCmd_Unk00F0(ScriptContext *ctx); -BOOL ScrCmd_Unk00F1(ScriptContext *ctx); - BOOL ScrCmd_Unk00B6(ScriptContext *ctx) { FieldSystem *field = ctx->fieldSystem; void **trainer0; @@ -85,22 +65,16 @@ BOOL ScrCmd_Unk00B7(ScriptContext *ctx) { *var2 = 0; - if (var1 == 0) { - trainer18 = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18); - } else { - trainer18 = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18); - } + trainer18 = var1 == 0 ? FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18) : FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18); if (*trainer18 == NULL) { *var2 = 1; return TRUE; - } else { - if (sub_0205CA64() == 1) { - sub_0205CA78(*trainer18); - *trainer18 = NULL; - *var2 = 1; - } + } else if (sub_0205CA64() == 1) { + sub_0205CA78(*trainer18); + *trainer18 = NULL; + *var2 = 1; } return TRUE; @@ -118,15 +92,9 @@ BOOL ScrCmd_Unk00B8(ScriptContext *ctx) { BOOL ScrCmd_Unk00B9(ScriptContext *ctx) { u16 *trainer0Id = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_0_ID); u16 *trainer1Id = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_ENGAGED_TRAINER_1_ID); - u16 id; u16 var1 = ScriptGetVar(ctx); u16 *trainerId = ScriptGetVarPointer(ctx); - - if (var1 == 0) { - id = *trainer0Id; - } else { - id = *trainer1Id; - } + u16 id = var1 == 0 ? *trainer0Id : *trainer1Id; *trainerId = id; @@ -185,16 +153,14 @@ BOOL ScrCmd_Unk00E7(ScriptContext *ctx) { var4 = 0; var5 = 2; var6 = 0; + } else if ((u16)sub_02039618(*scriptNumber) == FALSE) { + var4 = 3; + var5 = 5; + var6 = 6; } else { - if ((u16)sub_02039618(*scriptNumber) == FALSE) { - var4 = 3; - var5 = 5; - var6 = 6; - } else { - var4 = 7; - var5 = 9; - var6 = 10; - } + var4 = 7; + var5 = 9; + var6 = 10; } *var1 = var4; @@ -218,16 +184,14 @@ BOOL ScrCmd_Unk00E8(ScriptContext *ctx) { var4 = 17; var5 = 0; var6 = 0; + } else if ((u16)sub_02039618(*scriptNumber) == FALSE) { + var4 = 18; + var5 = 0; + var6 = 6; } else { - if ((u16)sub_02039618(*scriptNumber) == FALSE) { - var4 = 18; - var5 = 0; - var6 = 6; - } else { - var4 = 19; - var5 = 0; - var6 = 10; - } + var4 = 19; + var5 = 0; + var6 = 10; } *var1 = var4; diff --git a/include/scrcmd.h b/include/scrcmd.h index 586db185e..74b8a4b4e 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -584,6 +584,27 @@ BOOL ScrCmd_SaveChatotCry(struct ScriptContext *ctx); BOOL ScrCmd_Unk005D(struct ScriptContext *ctx); BOOL ScrCmd_SetVolume(struct ScriptContext *ctx); +// scrcmd_7.c +BOOL ScrCmd_Unk00B6(ScriptContext *ctx); +BOOL ScrCmd_Unk00B7(ScriptContext *ctx); +BOOL ScrCmd_Unk00B8(ScriptContext *ctx); +BOOL ScrCmd_Unk00B9(ScriptContext *ctx); +BOOL ScrCmd_Unk00E4(ScriptContext *ctx); +BOOL ScrCmd_Unk00E5(ScriptContext *ctx); +BOOL ScrCmd_Unk02A0(ScriptContext *ctx); +BOOL ScrCmd_Unk00E7(ScriptContext *ctx); +BOOL ScrCmd_Unk00E8(ScriptContext *ctx); +BOOL ScrCmd_Unk00E9(ScriptContext *ctx); +BOOL ScrCmd_Unk00EA(ScriptContext *ctx); +BOOL ScrCmd_Unk00EB(ScriptContext *ctx); +BOOL ScrCmd_Unk00EC(ScriptContext *ctx); +BOOL ScrCmd_Unk00ED(ScriptContext *ctx); +BOOL ScrCmd_Unk02BC(ScriptContext *ctx); +BOOL ScrCmd_Unk00EE(ScriptContext *ctx); +BOOL ScrCmd_Unk00EF(ScriptContext *ctx); +BOOL ScrCmd_Unk00F0(ScriptContext *ctx); +BOOL ScrCmd_Unk00F1(ScriptContext *ctx); + // scrcmd_union.c BOOL ScrCmd_UnionGroup(struct ScriptContext *ctx);