diff --git a/asm/include/main_0205B0B8.inc b/asm/include/main_0205B0B8.inc new file mode 100644 index 00000000..2b7543cf --- /dev/null +++ b/asm/include/main_0205B0B8.inc @@ -0,0 +1,14 @@ +#pragma once +.public AURA_BOW_STAT_BOOST +.public DEF_SCARF_STAT_BOOST +.public EnableAllLearnableIqSkills +.public GetHpBoostFromExclusiveItems +.public GetType +.public IqSkillFlagTest +.public IsAuraBow +.public MUNCH_BELT_STAT_BOOST +.public POWER_BAND_STAT_BOOST +.public SPECIAL_BAND_STAT_BOOST +.public ZINC_BAND_STAT_BOOST +.public _020A1870 +.public sub_02011220 diff --git a/asm/include/main_0205B0A0.inc b/asm/include/main_0205B39C.inc similarity index 96% rename from asm/include/main_0205B0A0.inc rename to asm/include/main_0205B39C.inc index 42d742d5..6071b1bc 100644 --- a/asm/include/main_0205B0A0.inc +++ b/asm/include/main_0205B39C.inc @@ -1,6 +1,5 @@ #pragma once .public ARM9_UNKNOWN_TABLE__NA_20A68BC -.public AURA_BOW_STAT_BOOST .public AllocateTemp1024ByteBufferFromPool .public BulkItemToItem .public CAFE_MISSION_REWARD_TYPE_WEIGHTS @@ -16,7 +15,6 @@ .public CreateCollectionMenu .public CreatePortraitBox .public DEFAULT_MISSION_REWARD_TYPE_WEIGHTS -.public DEF_SCARF_STAT_BOOST .public DEMO_TEAMS .public Debug_GetDebugFlag .public Debug_Print0 @@ -28,7 +26,6 @@ .public DungeonSwapIdToIdx .public ENTITIES .public EVENTS -.public EnableAllLearnableIqSkills .public EnqueueRender3dTiling .public ExplorersOfSkyMain .public FemaleToMaleForm @@ -42,7 +39,6 @@ .public GetFirstMatchingMemberIdx .public GetHero .public GetHeroMemberIdx -.public GetHpBoostFromExclusiveItems .public GetLanguageType .public GetMainCharacter1 .public GetMainCharacter1MemberIdx @@ -77,8 +73,6 @@ .public InitScriptVariableValues .public InitSpecialEpisodeHero .public InitWanTable -.public IqSkillFlagTest -.public IsAuraBow .public IsCollectionMenuActive .public IsForbiddenFloor .public IsInvalidForMission @@ -126,7 +120,6 @@ .public MISSION_RANK_POINTS .public MISSION_STRING_IDS .public MISSION_VALIDATION_FUNCTION_LIST -.public MUNCH_BELT_STAT_BOOST .public MainGame .public MemAlloc .public MemFree @@ -140,7 +133,6 @@ .public NoteSaveBase .public OUTLAW_MISSION_REWARD_TYPE_WEIGHTS .public OverlayIsLoaded -.public POWER_BAND_STAT_BOOST .public PlaySeVolumeWrapper .public PreprocessString .public PreprocessStringFromId @@ -153,7 +145,6 @@ .public ReadSaveHeader .public RemoveFirstUnequippedItemOfType .public RetrieveFromItemList2 -.public SPECIAL_BAND_STAT_BOOST .public SaveScriptVariableValue .public SetAdventureLogStructLocation .public SetBothScreensWindowsColor @@ -173,13 +164,10 @@ .public UnloadOverlay .public UpdateWindow .public WAN_TABLE -.public ZINC_BAND_STAT_BOOST .public ZeroInitScriptVariable -.public _020A1870 .public _020A18FC .public _020A1904 .public _020A1958 -.public _020A34D2 .public _020A353C .public _020A3544 .public _020A354C @@ -327,7 +315,6 @@ .public sub_0200C020 .public sub_0200CA8C .public sub_0200D310 -.public sub_02011220 .public sub_0201BB3C .public sub_0201D7A8 .public sub_0201DD90 diff --git a/asm/main_0205B0B8.s b/asm/main_0205B0B8.s new file mode 100644 index 00000000..20f86439 --- /dev/null +++ b/asm/main_0205B0B8.s @@ -0,0 +1,185 @@ + .include "asm/macros.inc" + .include "main_0205B0B8.inc" + + .text + + arm_func_start sub_0205B0B8 +sub_0205B0B8: ; 0x0205B0B8 + stmdb sp!, {r3, lr} + ldrsh r1, [r0, #0x56] + mov r2, #0x10 + mov lr, #0 + mov r3, lr + sub ip, r1, #1 + sub r2, r2, #0xc + b _0205B110 +_0205B0D8: + cmp ip, #0 + cmpge r2, #0x10 + blt _0205B104 + cmp ip, #0x1e + bge _0205B118 + add r1, r0, ip + ldrb r1, [r1, #0x58] + cmp r1, #0 + beq _0205B104 + cmp r3, #1 + addge lr, lr, #1 +_0205B104: + add r3, r3, #1 + add ip, ip, #1 + add r2, r2, #0xc +_0205B110: + cmp r3, #0xa + blt _0205B0D8 +_0205B118: + mov r0, lr + ldmia sp!, {r3, pc} + arm_func_end sub_0205B0B8 + + arm_func_start sub_0205B120 +sub_0205B120: ; 0x0205B120 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x24 + mov r5, r0 + mov r6, #0 + strh r6, [r5] + strh r6, [r5, #2] + strh r6, [r5, #4] + mov r4, r2 + strh r6, [r5, #6] + add r0, sp, #0 + mov r7, r1 + mov r2, r3 + strh r6, [r5, #8] + bl EnableAllLearnableIqSkills + mov r0, r7 + mov r1, r6 + bl GetType + mov r6, r0 + mov r0, r7 + mov r1, #1 + bl GetType + mov r3, r0 + mov r1, r7 + mov r2, r6 + add r0, sp, #0xc + bl sub_02011220 + add r0, sp, #0xc + bl GetHpBoostFromExclusiveItems + ldrsh r2, [r5] + ldrb r1, [sp, #0x38] + add r0, r2, r0 + strh r0, [r5] + cmp r1, #0 + ldrsh r1, [r5, #2] + ldrb r0, [sp, #0xc] + add r0, r1, r0 + strh r0, [r5, #2] + ldrsh r1, [r5, #4] + ldrb r0, [sp, #0xd] + add r0, r1, r0 + strh r0, [r5, #4] + ldrsh r1, [r5, #6] + ldrb r0, [sp, #0xe] + add r0, r1, r0 + strh r0, [r5, #6] + ldrsh r1, [r5, #8] + ldrb r0, [sp, #0xf] + add r0, r1, r0 + strh r0, [r5, #8] + bne _0205B30C + cmp r4, #0 + beq _0205B30C + ldrb r0, [r4] + tst r0, #1 + movne r1, #1 + moveq r1, #0 + tst r1, #0xff + beq _0205B30C + tst r0, #8 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + bne _0205B30C + ldrsh r0, [r4, #4] + cmp r0, #0x1a + ldreq r0, _0205B338 ; =POWER_BAND_STAT_BOOST + ldreqsh r1, [r5, #2] + ldreqsh r0, [r0] + addeq r0, r1, r0 + streqh r0, [r5, #2] + ldrsh r0, [r4, #4] + cmp r0, #0x32 + ldreq r0, _0205B33C ; =MUNCH_BELT_STAT_BOOST + ldreqsh r1, [r5, #2] + ldreqsh r0, [r0] + addeq r0, r1, r0 + streqh r0, [r5, #2] + ldrsh r0, [r4, #4] + cmp r0, #0x28 + ldreq r0, _0205B340 ; =SPECIAL_BAND_STAT_BOOST + ldreqsh r1, [r5, #4] + ldreqsh r0, [r0] + addeq r0, r1, r0 + streqh r0, [r5, #4] + ldrsh r0, [r4, #4] + cmp r0, #0x32 + ldreq r0, _0205B33C ; =MUNCH_BELT_STAT_BOOST + ldreqsh r1, [r5, #4] + ldreqsh r0, [r0] + addeq r0, r1, r0 + streqh r0, [r5, #4] + ldrsh r0, [r4, #4] + cmp r0, #0x25 + ldreq r0, _0205B344 ; =DEF_SCARF_STAT_BOOST + ldreqsh r1, [r5, #6] + ldreqsh r0, [r0] + addeq r0, r1, r0 + streqh r0, [r5, #6] + ldrsh r0, [r4, #4] + cmp r0, #0x29 + ldreq r0, _0205B348 ; =ZINC_BAND_STAT_BOOST + ldreqsh r1, [r5, #8] + ldreqsh r0, [r0] + addeq r0, r1, r0 + streqh r0, [r5, #8] + ldrsh r0, [r4, #4] + bl IsAuraBow + cmp r0, #0 + beq _0205B30C + ldr r0, _0205B34C ; =AURA_BOW_STAT_BOOST + ldrsh r1, [r5, #2] + ldrsh r2, [r0] + add r0, r1, r2 + strh r0, [r5, #2] + ldrsh r0, [r5, #4] + add r0, r0, r2 + strh r0, [r5, #4] + ldrsh r0, [r5, #6] + add r0, r0, r2 + strh r0, [r5, #6] + ldrsh r0, [r5, #8] + add r0, r0, r2 + strh r0, [r5, #8] +_0205B30C: + add r0, sp, #0 + mov r1, #0x38 + bl IqSkillFlagTest + cmp r0, #0 + ldrne r0, _0205B350 ; =_020A1870 + ldrnesh r1, [r5] + ldrnesh r0, [r0] + addne r0, r1, r0 + strneh r0, [r5] + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_0205B338: .word POWER_BAND_STAT_BOOST +_0205B33C: .word MUNCH_BELT_STAT_BOOST +_0205B340: .word SPECIAL_BAND_STAT_BOOST +_0205B344: .word DEF_SCARF_STAT_BOOST +_0205B348: .word ZINC_BAND_STAT_BOOST +_0205B34C: .word AURA_BOW_STAT_BOOST +_0205B350: .word _020A1870 + arm_func_end sub_0205B120 diff --git a/asm/main_0205B0A0.s b/asm/main_0205B39C.s similarity index 98% rename from asm/main_0205B0A0.s rename to asm/main_0205B39C.s index 6388b2e7..0dd04bb4 100644 --- a/asm/main_0205B0A0.s +++ b/asm/main_0205B39C.s @@ -1,224 +1,8 @@ .include "asm/macros.inc" - .include "main_0205B0A0.inc" + .include "main_0205B39C.inc" .text - arm_func_start sub_0205B0A0 -sub_0205B0A0: ; 0x0205B0A0 - ldr ip, _0205B0B0 ; =sub_0205B39C - mov r1, r0 - ldr r0, _0205B0B4 ; =_020A34D2 - bx ip - .align 2, 0 -_0205B0B0: .word sub_0205B39C -_0205B0B4: .word _020A34D2 - arm_func_end sub_0205B0A0 - - arm_func_start sub_0205B0B8 -sub_0205B0B8: ; 0x0205B0B8 - stmdb sp!, {r3, lr} - ldrsh r1, [r0, #0x56] - mov r2, #0x10 - mov lr, #0 - mov r3, lr - sub ip, r1, #1 - sub r2, r2, #0xc - b _0205B110 -_0205B0D8: - cmp ip, #0 - cmpge r2, #0x10 - blt _0205B104 - cmp ip, #0x1e - bge _0205B118 - add r1, r0, ip - ldrb r1, [r1, #0x58] - cmp r1, #0 - beq _0205B104 - cmp r3, #1 - addge lr, lr, #1 -_0205B104: - add r3, r3, #1 - add ip, ip, #1 - add r2, r2, #0xc -_0205B110: - cmp r3, #0xa - blt _0205B0D8 -_0205B118: - mov r0, lr - ldmia sp!, {r3, pc} - arm_func_end sub_0205B0B8 - - arm_func_start sub_0205B120 -sub_0205B120: ; 0x0205B120 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x24 - mov r5, r0 - mov r6, #0 - strh r6, [r5] - strh r6, [r5, #2] - strh r6, [r5, #4] - mov r4, r2 - strh r6, [r5, #6] - add r0, sp, #0 - mov r7, r1 - mov r2, r3 - strh r6, [r5, #8] - bl EnableAllLearnableIqSkills - mov r0, r7 - mov r1, r6 - bl GetType - mov r6, r0 - mov r0, r7 - mov r1, #1 - bl GetType - mov r3, r0 - mov r1, r7 - mov r2, r6 - add r0, sp, #0xc - bl sub_02011220 - add r0, sp, #0xc - bl GetHpBoostFromExclusiveItems - ldrsh r2, [r5] - ldrb r1, [sp, #0x38] - add r0, r2, r0 - strh r0, [r5] - cmp r1, #0 - ldrsh r1, [r5, #2] - ldrb r0, [sp, #0xc] - add r0, r1, r0 - strh r0, [r5, #2] - ldrsh r1, [r5, #4] - ldrb r0, [sp, #0xd] - add r0, r1, r0 - strh r0, [r5, #4] - ldrsh r1, [r5, #6] - ldrb r0, [sp, #0xe] - add r0, r1, r0 - strh r0, [r5, #6] - ldrsh r1, [r5, #8] - ldrb r0, [sp, #0xf] - add r0, r1, r0 - strh r0, [r5, #8] - bne _0205B30C - cmp r4, #0 - beq _0205B30C - ldrb r0, [r4] - tst r0, #1 - movne r1, #1 - moveq r1, #0 - tst r1, #0xff - beq _0205B30C - tst r0, #8 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - bne _0205B30C - ldrsh r0, [r4, #4] - cmp r0, #0x1a - ldreq r0, _0205B338 ; =POWER_BAND_STAT_BOOST - ldreqsh r1, [r5, #2] - ldreqsh r0, [r0] - addeq r0, r1, r0 - streqh r0, [r5, #2] - ldrsh r0, [r4, #4] - cmp r0, #0x32 - ldreq r0, _0205B33C ; =MUNCH_BELT_STAT_BOOST - ldreqsh r1, [r5, #2] - ldreqsh r0, [r0] - addeq r0, r1, r0 - streqh r0, [r5, #2] - ldrsh r0, [r4, #4] - cmp r0, #0x28 - ldreq r0, _0205B340 ; =SPECIAL_BAND_STAT_BOOST - ldreqsh r1, [r5, #4] - ldreqsh r0, [r0] - addeq r0, r1, r0 - streqh r0, [r5, #4] - ldrsh r0, [r4, #4] - cmp r0, #0x32 - ldreq r0, _0205B33C ; =MUNCH_BELT_STAT_BOOST - ldreqsh r1, [r5, #4] - ldreqsh r0, [r0] - addeq r0, r1, r0 - streqh r0, [r5, #4] - ldrsh r0, [r4, #4] - cmp r0, #0x25 - ldreq r0, _0205B344 ; =DEF_SCARF_STAT_BOOST - ldreqsh r1, [r5, #6] - ldreqsh r0, [r0] - addeq r0, r1, r0 - streqh r0, [r5, #6] - ldrsh r0, [r4, #4] - cmp r0, #0x29 - ldreq r0, _0205B348 ; =ZINC_BAND_STAT_BOOST - ldreqsh r1, [r5, #8] - ldreqsh r0, [r0] - addeq r0, r1, r0 - streqh r0, [r5, #8] - ldrsh r0, [r4, #4] - bl IsAuraBow - cmp r0, #0 - beq _0205B30C - ldr r0, _0205B34C ; =AURA_BOW_STAT_BOOST - ldrsh r1, [r5, #2] - ldrsh r2, [r0] - add r0, r1, r2 - strh r0, [r5, #2] - ldrsh r0, [r5, #4] - add r0, r0, r2 - strh r0, [r5, #4] - ldrsh r0, [r5, #6] - add r0, r0, r2 - strh r0, [r5, #6] - ldrsh r0, [r5, #8] - add r0, r0, r2 - strh r0, [r5, #8] -_0205B30C: - add r0, sp, #0 - mov r1, #0x38 - bl IqSkillFlagTest - cmp r0, #0 - ldrne r0, _0205B350 ; =_020A1870 - ldrnesh r1, [r5] - ldrnesh r0, [r0] - addne r0, r1, r0 - strneh r0, [r5] - add sp, sp, #0x24 - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 -_0205B338: .word POWER_BAND_STAT_BOOST -_0205B33C: .word MUNCH_BELT_STAT_BOOST -_0205B340: .word SPECIAL_BAND_STAT_BOOST -_0205B344: .word DEF_SCARF_STAT_BOOST -_0205B348: .word ZINC_BAND_STAT_BOOST -_0205B34C: .word AURA_BOW_STAT_BOOST -_0205B350: .word _020A1870 - arm_func_end sub_0205B120 - - arm_func_start sub_0205B354 -sub_0205B354: ; 0x0205B354 - ldrb r1, [r0, #0x45] - cmp r1, #0 - movne r0, #0 - bxne lr - mov r2, #0 - b _0205B38C -_0205B36C: - add r1, r0, r2 - ldrb r1, [r1, #0x18] - cmp r1, #0x6f - moveq r0, #1 - bxeq lr - add r1, r2, #1 - mov r1, r1, lsl #0x10 - mov r2, r1, asr #0x10 -_0205B38C: - cmp r2, #2 - blt _0205B36C - mov r0, #0 - bx lr - arm_func_end sub_0205B354 - arm_func_start sub_0205B39C sub_0205B39C: ; 0x0205B39C stmdb sp!, {r3, r4, r5, r6, r7, lr} diff --git a/include/main_0205B008.h b/include/main_0205B008.h index 80fcabdf..afa43a32 100644 --- a/include/main_0205B008.h +++ b/include/main_0205B008.h @@ -5,5 +5,6 @@ void sub_0205B008(struct monster_summary *monster_summary, u32 b); void sub_0205B028(struct monster_summary *monster_summary, s32 member_idx); +void sub_0205B0A0(void *p1); #endif //PMDSKY_MAIN_0205B008_H diff --git a/include/main_0205B354.h b/include/main_0205B354.h new file mode 100644 index 00000000..052f42b9 --- /dev/null +++ b/include/main_0205B354.h @@ -0,0 +1,15 @@ +#ifndef PMDSKY_MAIN_0205B354_H +#define PMDSKY_MAIN_0205B354_H + +#include "util.h" + +struct unkStruct_sub_0205B354 { + u8 fill0[0x18]; + u8 unk18[2]; + u8 fill1A[0x45 - 0x1A]; + u8 unk45; +}; + +bool8 sub_0205B354(struct unkStruct_sub_0205B354 *ptr); + +#endif //PMDSKY_MAIN_0205B354_H diff --git a/main.lsf b/main.lsf index 45257ff6..732f7565 100644 --- a/main.lsf +++ b/main.lsf @@ -140,7 +140,9 @@ Static main Object src/main_0205A430.o Object asm/main_0205A4B4.o Object src/main_0205B008.o - Object asm/main_0205B0A0.o + Object asm/main_0205B0B8.o + Object src/main_0205B354.o + Object asm/main_0205B39C.o Object src/dungeon_init_2.o Object asm/main_0206A750.o Object src/main_0206C98C.o diff --git a/src/main_0205B008.c b/src/main_0205B008.c index a89451cb..26f5358c 100644 --- a/src/main_0205B008.c +++ b/src/main_0205B008.c @@ -1,12 +1,15 @@ #include "main_0205B008.h" #include "common.h" +extern u8 _020A34D2; + extern s32 sub_02055894(u32 b); extern s32 GetActiveRosterIndex(s32 member_idx); extern void sub_02053224(struct team_member *team_member, s32 member_idx, s32 arg2); extern bool8 sub_020564B0(s32 member_idx); extern struct team_member* GetActiveTeamMember(s32 roster_idx); extern void CreateMonsterSummaryFromTeamMember(struct monster_summary *monster_summary, struct team_member *team_member, bool8 is_leader); +extern void sub_0205B39C(void *p0, void *p1); void sub_0205B008(struct monster_summary *monster_summary, u32 b) { @@ -29,3 +32,8 @@ void sub_0205B028(struct monster_summary *monster_summary, s32 member_idx) CreateMonsterSummaryFromTeamMember(monster_summary, active_team_member, sub_020564B0(member_idx)); } } + +void sub_0205B0A0(void *p1) +{ + sub_0205B39C(&_020A34D2, p1); +} diff --git a/src/main_0205B354.c b/src/main_0205B354.c new file mode 100644 index 00000000..82944b47 --- /dev/null +++ b/src/main_0205B354.c @@ -0,0 +1,19 @@ +#include "main_0205B354.h" + +bool8 sub_0205B354(struct unkStruct_sub_0205B354 *ptr) +{ + if (ptr->unk45 != 0) + { + return FALSE; + } + + for (s16 i = 0; i < 2; i++) + { + if (ptr->unk18[i] == 111) + { + return TRUE; + } + } + + return FALSE; +}