diff options
-rw-r--r-- | asm/quest_log.s | 215 | ||||
-rw-r--r-- | include/pokemon_storage_system.h | 5 | ||||
-rw-r--r-- | src/quest_log.c | 84 |
3 files changed, 87 insertions, 217 deletions
diff --git a/asm/quest_log.s b/asm/quest_log.s index f2da90afc..5c965a4f1 100644 --- a/asm/quest_log.s +++ b/asm/quest_log.s @@ -5,221 +5,6 @@ .text - thumb_func_start sub_8111438 -sub_8111438: @ 8111438 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - movs r0, 0x68 - bl AllocZeroed - mov r9, r0 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - mov r0, r9 - movs r1, 0x13 - movs r2, 0x1 - movs r3, 0x20 - bl CreateMon - ldr r0, _081114BC @ =0x00004027 - bl VarGet - lsls r0, 16 - lsrs r1, r0, 28 - mov r6, r9 - adds r6, 0x64 - strh r1, [r6] - lsls r0, 4 - lsrs r0, 20 - mov r4, r9 - adds r4, 0x66 - strh r0, [r4] - bl sub_8111618 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r6] - cmp r5, r0 - bls _081114C4 - movs r3, 0 - subs r0, r5, r0 - mov r8, r4 - cmp r3, r0 - bge _0811150E -_08111492: - movs r0, 0x5 - subs r0, r3 - movs r1, 0x64 - muls r0, r1 - ldr r1, _081114C0 @ =gPlayerParty - adds r0, r1 - str r3, [sp, 0x10] - bl ZeroMonData - ldr r3, [sp, 0x10] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - mov r0, r9 - adds r0, 0x64 - ldrh r0, [r0] - subs r0, r5, r0 - cmp r3, r0 - blt _08111492 - b _0811150E - .align 2, 0 -_081114BC: .4byte 0x00004027 -_081114C0: .4byte gPlayerParty -_081114C4: - mov r8, r4 - cmp r5, r0 - bcs _0811150E - movs r3, 0 - adds r4, r6, 0 -_081114CE: - lsls r1, r3, 24 - lsrs r1, 24 - movs r0, 0 - str r3, [sp, 0x10] - bl sub_808BCB4 - ldr r3, [sp, 0x10] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x4 - bls _081114CE - adds r3, r5, 0 - ldrh r0, [r4] - cmp r3, r0 - bcs _0811150E -_081114EE: - movs r0, 0x64 - muls r0, r3 - ldr r1, _08111574 @ =gPlayerParty - adds r0, r1 - mov r1, r9 - movs r2, 0x64 - str r3, [sp, 0x10] - bl CopyMon - ldr r3, [sp, 0x10] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - ldrh r1, [r4] - cmp r3, r1 - bcc _081114EE -_0811150E: - bl sub_811164C - lsls r0, 16 - lsrs r5, r0, 16 - mov r1, r8 - ldrh r0, [r1] - cmp r5, r0 - bls _08111578 - movs r3, 0 -_08111520: - movs r6, 0 - lsls r7, r3, 24 - lsrs r7, 24 -_08111526: - lsls r0, r6, 24 - lsrs r4, r0, 24 - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0x5 - str r3, [sp, 0x10] - bl GetBoxMonDataFromAnyBox - ldr r3, [sp, 0x10] - cmp r0, 0 - beq _08111554 - adds r0, r7, 0 - adds r1, r4, 0 - bl sub_808BCB4 - subs r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r3, [sp, 0x10] - mov r0, r8 - ldrh r0, [r0] - cmp r5, r0 - beq _081115D2 -_08111554: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x1D - bls _08111526 - mov r1, r8 - ldrh r1, [r1] - cmp r5, r1 - beq _081115D2 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0xD - bls _08111520 - b _081115D2 - .align 2, 0 -_08111574: .4byte gPlayerParty -_08111578: - cmp r5, r0 - bcs _081115D2 - movs r3, 0 -_0811157E: - movs r6, 0 - lsls r7, r3, 24 -_08111582: - lsls r1, r6, 24 - lsrs r1, 24 - lsrs r0, r7, 24 - str r3, [sp, 0x10] - bl GetBoxedMonPtr - adds r4, r0, 0 - movs r1, 0x5 - bl GetBoxMonData - ldr r3, [sp, 0x10] - cmp r0, 0 - bne _081115B6 - adds r0, r4, 0 - mov r1, r9 - movs r2, 0x50 - bl CopyMon - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r3, [sp, 0x10] - mov r0, r8 - ldrh r0, [r0] - cmp r5, r0 - beq _081115D2 -_081115B6: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x1D - bls _08111582 - mov r1, r8 - ldrh r1, [r1] - cmp r5, r1 - beq _081115D2 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0xD - bls _0811157E -_081115D2: - mov r0, r9 - bl Free - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8111438 - thumb_func_start sub_81115E8 sub_81115E8: @ 81115E8 push {r4,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 9fcfdba96..04d739314 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -5,9 +5,10 @@ #define IN_BOX_COUNT 30 u8* GetBoxNamePtr(u8 boxNumber); -struct BoxPokemon *GetBoxedMonPtr(u8, u8); -void SetBoxMonNickFromAnyBox(u8, u8, u8 *); +struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition); +void SetBoxMonNickFromAnyBox(u8 boxId, u8 monPosition, u8 * newNick); void CompactPartySlots(void); u32 GetBoxMonDataFromAnyBox(u8 boxId, u8 monPosition, u32 request); +void sub_808BCB4(u8 boxId, u8 monPosition); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/src/quest_log.c b/src/quest_log.c index d03319434..b1f1dc870 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -1,4 +1,6 @@ #include "global.h" +#include "constants/species.h" +#include "malloc.h" #include "main.h" #include "task.h" #include "palette.h" @@ -14,6 +16,7 @@ #include "wild_encounter.h" #include "help_system.h" #include "unk_8159F40.h" +#include "pokemon_storage_system.h" #include "quest_log.h" u8 gUnknown_3005E88; @@ -58,6 +61,8 @@ void sub_8110F90(u8); void sub_8111150(u8); void sub_8111368(void); void sub_81115E8(void); +u16 sub_8111618(void); +u16 sub_811164C(void); void sub_8111688(void); void sub_811175C(u8, struct UnkStruct_203AE98 *); void sub_81118F4(s8); @@ -676,3 +681,82 @@ void sub_81113E4(void) CpuCopy16(questLog->unk_268, gSaveBlock1Ptr->vars, VARS_COUNT * sizeof(u16)); sub_8111688(); } + +struct PokemonAndSomethingElse +{ + struct Pokemon mon; + u16 unk_64; + u16 unk_66; +}; + +void sub_8111438(void) +{ + struct PokemonAndSomethingElse *r9 = AllocZeroed(sizeof(struct PokemonAndSomethingElse)); + u16 r0, r3, r5, r6; + + CreateMon(&r9->mon, SPECIES_RATTATA, 1, 0x20, FALSE, 0, 0, 0); + r0 = VarGet(VAR_0x4027); + r9->unk_64 = r0 >> 12; + r9->unk_66 = r0 % 0x1000; + + r5 = sub_8111618(); + if (r5 > r9->unk_64) + { + for (r3 = 0; r3 < r5 - r9->unk_64; r3++) + { + ZeroMonData(&gPlayerParty[5 - r3]); + } + } + else if (r5 < r9->unk_64) + { + for (r3 = 0; r3 < 5; r3++) + { + sub_808BCB4(0, r3); + } + for (r3 = r5; r3 < r9->unk_64; r3++) + { + CopyMon(&gPlayerParty[r3], &r9->mon, sizeof(struct Pokemon)); + } + } + + r5 = sub_811164C(); + if (r5 > r9->unk_66) + { + for (r3 = 0; r3 < 14; r3++) + { + for (r6 = 0; r6 < 30; r6++) + { + if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_BIT2)) + { + sub_808BCB4(r3, r6); + r5--; + if (r5 == r9->unk_66) + break; + } + } + if (r5 == r9->unk_66) + break; + } + } + else if (r5 < r9->unk_66) + { + for (r3 = 0; r3 < 14; r3++) + { + for (r6 = 0; r6 < 30; r6++) + { + struct BoxPokemon * boxMon = GetBoxedMonPtr(r3, r6); + if (!GetBoxMonData(boxMon, MON_DATA_SANITY_BIT2)) + { + CopyMon(boxMon, &r9->mon.box, sizeof(struct BoxPokemon)); + r5++; + if (r5 == r9->unk_66) + break; + } + } + if (r5 == r9->unk_66) + break; + } + } + + Free(r9); +} |