summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-10-11 16:13:46 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-10-11 16:13:46 -0400
commit3310b1445ac759a042776d8931cfe8d7dec46bd5 (patch)
treeba8d045c1c921dc4824734e3affe379d8fc3ff8b
parent1fd187fb57a8b588f68455366d81f4b839939cb5 (diff)
sub_8111438
-rw-r--r--asm/quest_log.s215
-rw-r--r--include/pokemon_storage_system.h5
-rw-r--r--src/quest_log.c84
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);
+}