diff --git a/asm/main_02054E4C.s b/asm/main_02054E4C.s index f6d083b6..47a8a77f 100644 --- a/asm/main_02054E4C.s +++ b/asm/main_02054E4C.s @@ -616,100 +616,3 @@ _02055638: _02055648: .word TEAM_MEMBER_TABLE_PTR _0205564C: .word 0x0000022B arm_func_end GetRecruitMentryIdBySpecies - - arm_func_start GetHeroMemberIdx -GetHeroMemberIdx: ; 0x02055650 - ldr r0, _02055678 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r0, [r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r0, #0 - mvneq r0, #0 - bx lr - .align 2, 0 -_02055678: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetHeroMemberIdx - - arm_func_start GetPartnerMemberIdx -GetPartnerMemberIdx: ; 0x0205567C - ldr r0, _020556A4 ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x44] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r0, #1 - mvneq r0, #0 - bx lr - .align 2, 0 -_020556A4: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetPartnerMemberIdx - - arm_func_start GetMainCharacter1MemberIdx -GetMainCharacter1MemberIdx: ; 0x020556A8 - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - moveq r0, #2 - ldr r2, _020556E8 ; =TEAM_MEMBER_TABLE_PTR - movne r0, #0 - mov r1, #0x44 - smulbb r1, r0, r1 - ldr r2, [r2] - ldrb r1, [r2, r1] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - mvneq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_020556E8: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter1MemberIdx - - arm_func_start GetMainCharacter2MemberIdx -GetMainCharacter2MemberIdx: ; 0x020556EC - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - moveq r0, #3 - ldr r2, _0205572C ; =TEAM_MEMBER_TABLE_PTR - movne r0, #1 - mov r1, #0x44 - smulbb r1, r0, r1 - ldr r2, [r2] - ldrb r1, [r2, r1] - tst r1, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - mvneq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0205572C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter2MemberIdx - - arm_func_start GetMainCharacter3MemberIdx -GetMainCharacter3MemberIdx: ; 0x02055730 - stmdb sp!, {r3, lr} - bl GetGameMode - cmp r0, #3 - mvnne r0, #0 - ldmneia sp!, {r3, pc} - ldr r0, _0205576C ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x110] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - movne r0, #4 - mvneq r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0205576C: .word TEAM_MEMBER_TABLE_PTR - arm_func_end GetMainCharacter3MemberIdx diff --git a/include/main_0205567C.h b/include/main_0205567C.h new file mode 100644 index 00000000..187f7e60 --- /dev/null +++ b/include/main_0205567C.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_MAIN_0205567C_H +#define PMDSKY_MAIN_0205567C_H + +u32 GetHeroMemberIdx(void); +u32 GetPartnerMemberIdx(void); +u32 GetMainCharacter1MemberIdx(void); +u32 GetMainCharacter2MemberIdx(void); +u32 GetMainCharacter3MemberIdx(void); + +#endif diff --git a/include/main_02064FFC.h b/include/main_02064FFC.h index 43e6c684..e225c058 100644 --- a/include/main_02064FFC.h +++ b/include/main_02064FFC.h @@ -3,6 +3,7 @@ #include "common.h" #include "main_02055770.h" +#include "main_0205567C.h" struct unk_02064F94 { u8 field_0x0[8]; @@ -31,8 +32,6 @@ extern struct team_member_table *TEAM_MEMBER_TABLE_PTR; void sub_0201E380(u8* a, u32* b, s16 c, s16 d); int GetAppointedLeaderMemberIdx(void); -int GetMainCharacter1MemberIdx(void); -int GetMainCharacter2MemberIdx(void); int OverlayIsLoaded(s32 overlay_id); int ov11_022E96E4(void); int GetUnitNpcIds(void* buf); diff --git a/main.lsf b/main.lsf index af7f90b9..a545d1ae 100644 --- a/main.lsf +++ b/main.lsf @@ -152,6 +152,7 @@ Static main Object src/main_02054C24.o Object src/main_02054DC4.o Object asm/main_02054E4C.o + Object src/main_0205567C.o Object src/main_02055770.o Object asm/main_02055894.o Object src/main_02058C3C.o diff --git a/src/main_0205567C.c b/src/main_0205567C.c new file mode 100644 index 00000000..ff55fbcb --- /dev/null +++ b/src/main_0205567C.c @@ -0,0 +1,61 @@ +#include "main_0205567C.h" +#include "common.h" +#include "game_mode.h" + +extern struct team_member_table *TEAM_MEMBER_TABLE_PTR; + +u32 GetHeroMemberIdx(void) +{ + bool8 valid = (TEAM_MEMBER_TABLE_PTR->members[0].is_valid & 1) != 0; + if (valid) { + return 0; + } else { + return -1; + } +} + +u32 GetPartnerMemberIdx(void) +{ + bool8 valid = (TEAM_MEMBER_TABLE_PTR->members[1].is_valid & 1) != 0; + if (valid) { + return 1; + } else { + return -1; + } +} + +u32 GetMainCharacter1MemberIdx(void) +{ + int idx = (GetGameMode() == GAME_MODE_SPECIAL_EPISODE) ? 2 : 0; + bool8 valid = (TEAM_MEMBER_TABLE_PTR->members[(s16)idx].is_valid & 1) != 0; + if (valid) { + return idx; + } else { + return -1; + } +} + +u32 GetMainCharacter2MemberIdx(void) +{ + int idx = (GetGameMode() == GAME_MODE_SPECIAL_EPISODE) ? 3 : 1; + bool8 valid = (TEAM_MEMBER_TABLE_PTR->members[(s16)idx].is_valid & 1) != 0; + if (valid) { + return idx; + } else { + return -1; + } +} + +u32 GetMainCharacter3MemberIdx(void) +{ + bool8 valid; + if (GetGameMode() != GAME_MODE_SPECIAL_EPISODE) { + return -1; + } + valid = (TEAM_MEMBER_TABLE_PTR->members[4].is_valid & 1) != 0; + if (valid) { + return 4; + } else { + return -1; + } +}