summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-06-28 14:28:21 -0500
committerSeth Barberee <seth.barberee@gmail.com>2021-06-28 14:28:21 -0500
commitf308c79eba1ba8e6bc2134529a2e4f4f21c9c2c2 (patch)
tree8cda9e14196a74c54e10db503bb494b14d7c32d2 /src
parent7d9a587432ca4cc608b3fa4ddd060ad7c37fbf8b (diff)
15% pog
Diffstat (limited to 'src')
-rw-r--r--src/code_800C9CC.c10
-rw-r--r--src/code_80869E4.c498
-rw-r--r--src/items.c72
-rw-r--r--src/kangaskhan_storage_2.c303
-rw-r--r--src/music_pre.c4
-rw-r--r--src/pokemon_3.c261
-rw-r--r--src/pokemon_mid.c1
7 files changed, 1094 insertions, 55 deletions
diff --git a/src/code_800C9CC.c b/src/code_800C9CC.c
index cbd2ede..20d54e7 100644
--- a/src/code_800C9CC.c
+++ b/src/code_800C9CC.c
@@ -3,16 +3,18 @@
#include "bg.h"
extern u16 gRawKeyInput;
-extern u8 gBldAlpha_CoeffA;
-extern u8 gBldAlpha_CoeffB;
-extern u16 gBldAlpha;
-extern u8 gUnknown_202D7FE;
extern struct BGControlStruct gBG0Control;
extern struct BGControlStruct gBG1Control;
extern struct BGControlStruct gBG2Control;
extern struct BGControlStruct gBG3Control;
+extern u8 gBldAlpha_CoeffA;
+extern u8 gBldAlpha_CoeffB;
+extern u16 gBldAlpha;
+extern u8 gUnknown_202D7FE;
+
+
void ReadKeyInput(struct Inputs *r0)
{
u16 keyInput = REG_KEYINPUT ^ KEYS_MASK;
diff --git a/src/code_80869E4.c b/src/code_80869E4.c
new file mode 100644
index 0000000..07c657f
--- /dev/null
+++ b/src/code_80869E4.c
@@ -0,0 +1,498 @@
+#include "global.h"
+#include "code_8041D5C.h"
+#include "gUnknown_203B418.h"
+#include "random.h"
+
+struct unkStruct_202F3D0
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u8 unk4;
+ u8 unk5;
+};
+
+EWRAM_DATA struct unkStruct_202F3D0 gUnknown_202F3D0;
+extern struct unkStruct_203B418 *gUnknown_203B418;
+
+s8 sub_8002984(s8, u8);
+void sub_803E708(u32, u32);
+void sub_80869E4(struct unkDungeon_8041D5C *r0, u32, u8, s8);
+extern void sub_80859F0(u32);
+extern void sub_803E46C(u32);
+extern void sub_803E9D0(void);
+extern void sub_8085C54(u32, u32, u32, u32, u32);
+extern void PlaySoundEffect(u32);
+extern struct unkDungeon_8041D5C *sub_8085480(void);
+void SpriteLookAroundEffect(struct unkDungeon_8041D5C *r0);
+extern void sub_8052910(u32);
+void sub_8086494();
+
+extern u32 gUnknown_8107314[];
+extern u32 gUnknown_202EDC8;
+
+
+extern void sub_8085EB0(void);
+extern void sub_803E748(void);
+extern void sub_80855E4(void *);
+extern u32 sub_803F994(void);
+extern u32 sub_803F9B0(void);
+extern void sub_803F878(u32, u32);
+extern void sub_8086384(struct unkDungeon_8041D5C *r0);
+extern void sub_8085930(u32);
+extern void sub_804539C(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_806CE68(struct unkDungeon_8041D5C *, u32);
+extern void sub_806CDD4(struct unkDungeon_8041D5C *, u8, u32);
+extern void sub_804535C(struct unkDungeon_8041D5C *, u32 *);
+extern void sub_8086A54(struct unkDungeon_8041D5C *);
+extern void sub_8086A3C(struct unkDungeon_8041D5C *);
+extern void PlaySoundEffect(u32);
+extern void sub_80861F8(u32, struct unkDungeon_8041D5C *, u32);
+
+void sub_80862BC(struct unkDungeon_8041D5C *r0)
+{
+ PlaySoundEffect(0xE8 << 1);
+ sub_80861F8(0x143, r0, 0);
+}
+
+void sub_80862DC(struct unkDungeon_8041D5C *r0)
+{
+ u32 array[2];
+ array[0] = r0->unkC;
+ array[1] = r0->unk10 + (0xE0 << 6);
+
+ sub_804535C(r0, array);
+ sub_806CDD4(r0, 0, 4);
+ sub_8086A54(r0);
+}
+
+void sub_8086310(struct unkDungeon_8041D5C *r0)
+{
+ u32 array[2];
+ array[0] = r0->unkC;
+ array[1] = r0->unk10 + (0x90 << 8);
+
+ sub_804535C(r0, array);
+ sub_806CE68(r0, 0);
+ sub_8086A3C(r0);
+ r0->unk20 = 0;
+}
+
+void sub_8086348(struct unkDungeon_8041D5C *r0)
+{
+ u32 array[2];
+ array[0] = r0->unkC + (0xF0 << 7);
+ array[1] = r0->unk10 + 0xffffe000;
+
+ sub_804535C(r0, array);
+ sub_806CDD4(r0, 0, 6);
+ sub_8086A54(r0);
+}
+
+void sub_8086384(struct unkDungeon_8041D5C *r0)
+{
+ u32 array[2];
+ array[0] = r0->unkC + (0xF0 << 7);
+ array[1] = r0->unk10;
+
+ sub_804535C(r0, array);
+ sub_806CDD4(r0, 0, 6);
+ sub_8086A54(r0);
+}
+
+void sub_80863B8(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CDD4(r0, 0, 4);
+}
+
+void sub_80863C8(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CDD4(r0, 0, 0);
+}
+
+void sub_80863D8(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CDD4(r0, 0, 6);
+}
+
+void sub_80863E8(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CDD4(r0, 6, 4);
+}
+
+void sub_80863F8(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CE68(r0, 4);
+}
+
+void sub_8086404(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CE68(r0, 6);
+}
+
+void sub_8086410(struct unkDungeon_8041D5C *r0)
+{
+ sub_804539C(r0, 0, 0xffffff00);
+}
+
+void sub_8086424(struct unkDungeon_8041D5C *r0)
+{
+ sub_804539C(r0, 0, 0x80 << 1);
+}
+
+void sub_8086434(struct unkDungeon_8041D5C *r0)
+{
+ sub_804539C(r0, 0xffffff00, 0);
+}
+
+void sub_8086448(void)
+{
+ s32 iVar1;
+ u32 retVar;
+ u32 retVar2;
+
+ sub_80855E4(sub_80862DC);
+
+ for(iVar1 = 0; iVar1 < 0x38; iVar1++)
+ {
+ retVar = sub_803F994();
+ retVar2 = sub_803F9B0();
+ retVar2 += (0x80 << 1);
+ sub_803F878(retVar, retVar2);
+ sub_80855E4(sub_8086410);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_80863F8);
+}
+
+void sub_8086494(void)
+{
+ s32 iVar1;
+
+ sub_8085930(3);
+ sub_803E708(4, 0x46);
+
+ sub_8085930(2);
+ sub_803E708(4, 0x46);
+
+ sub_8085930(1);
+ sub_803E708(4, 0x46);
+
+ sub_8085930(0);
+ sub_803E708(4, 0x46);
+
+ sub_80855E4(sub_80863C8);
+ for(iVar1 = 0; iVar1 < 0x90; iVar1++)
+ {
+ sub_80855E4(sub_8086424);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_8086310);
+}
+
+void sub_8086500(void)
+{
+ s32 iVar1;
+ u32 retVar;
+ u32 retVar2;
+
+ sub_80855E4(sub_8086348);
+
+ for(iVar1 = 0; iVar1 < 0x48; iVar1++)
+ {
+ retVar = sub_803F994();
+ retVar += (0x80 << 1);
+ retVar2 = sub_803F9B0();
+ sub_803F878(retVar, retVar2);
+ sub_80855E4(sub_8086434);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_8086404);
+}
+
+void sub_808654C(void)
+{
+ s32 iVar1;
+ u32 retVar;
+ u32 retVar2;
+
+ sub_80855E4(sub_8086384);
+
+ for(iVar1 = 0; iVar1 < 0x78; iVar1++)
+ {
+ retVar = sub_803F994();
+ retVar += (0x80 << 1);
+ retVar2 = sub_803F9B0();
+ sub_803F878(retVar, retVar2);
+ sub_80855E4(sub_8086434);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_8086404);
+}
+
+void sub_8086598(void)
+{
+ s32 iVar1;
+ u32 retVar;
+ u32 retVar2;
+
+ sub_80855E4(sub_80863B8);
+
+ for(iVar1 = 0; iVar1 < 0x18; iVar1++)
+ {
+ retVar = sub_803F994();
+ retVar2 = sub_803F9B0();
+ sub_803F878(retVar, retVar2 + (0xffffff00));
+ sub_80855E4(sub_8086410);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_80863F8);
+}
+
+void sub_80865E8(void)
+{
+ s32 iVar1;
+ u32 retVar;
+ u32 retVar2;
+
+ sub_80855E4(sub_80863E8);
+
+ for(iVar1 = 0; iVar1 < 0xC; iVar1++)
+ {
+ retVar = sub_803F994();
+ retVar2 = sub_803F9B0();
+ sub_803F878(retVar, retVar2 + (0x80 << 2));
+ sub_80855E4(sub_8086424);
+ sub_80855E4(sub_8086424);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_80863F8);
+}
+
+void sub_808663C(void)
+{
+ s32 iVar1;
+ u32 retVar;
+ u32 retVar2;
+
+ sub_80855E4(sub_80863E8);
+
+ for(iVar1 = 0; iVar1 < 0x10; iVar1++)
+ {
+ retVar = sub_803F994();
+ retVar2 = sub_803F9B0();
+ sub_803F878(retVar, retVar2 + (0x80 << 2));
+ sub_80855E4(sub_8086424);
+ sub_80855E4(sub_8086424);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_80863F8);
+}
+
+
+void sub_8086690(void)
+{
+ s32 iVar1;
+
+ sub_80855E4(sub_80863D8);
+
+ for(iVar1 = 0; iVar1 < 0x30; iVar1++)
+ {
+ sub_80855E4(sub_8086434);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_8086404);
+}
+
+
+void sub_80866C4(u32 r0)
+{
+
+ SpriteLookAroundEffect(sub_8085480());
+ sub_803E708(0xA, 0x46);
+ sub_8052910(r0);
+ sub_803E708(0xA, 0x46);
+ sub_8086494();
+ gUnknown_203B418->unk2 = 1;
+}
+
+void sub_80866FC(void)
+{
+ s32 iVar1;
+
+ for(iVar1 = 0; iVar1 >= -0xFA; iVar1 -= 0xA)
+ {
+ sub_8085C54(iVar1, iVar1, iVar1, 1, 0);
+ sub_803E46C(0x46);
+ }
+}
+
+void sub_808627C(void)
+{
+ sub_803E748();
+}
+
+void sub_8086738(void)
+{
+ s32 iVar1;
+
+ for(iVar1 = 0; iVar1 < 0xFA; iVar1 += 0xA)
+ {
+ sub_8085C54(iVar1, iVar1, iVar1, 1, 0);
+ sub_803E46C(0x46);
+ }
+}
+
+void sub_8086764(void)
+{
+ s32 iVar1;
+
+ for(iVar1 = 0xFA; iVar1 >= 0; iVar1 -= 5)
+ {
+ sub_8085C54(iVar1, iVar1, iVar1, 1, 0);
+ sub_803E46C(0x46);
+ }
+ sub_8085EB0();
+}
+
+void sub_8086794(void)
+{
+ s32 iVar1;
+
+ gUnknown_202EDC8 = 0;
+
+ for(iVar1 = 0; iVar1 < 0xC8; iVar1++)
+ {
+ sub_8085C54(0, 0, 0, 1, 0);
+ sub_803E9D0();
+ sub_803E46C(0x46);
+ if((iVar1 & 3) == 0)
+ {
+ gUnknown_202EDC8++;
+ if(gUnknown_202EDC8 == 0x1F)
+ break;
+ }
+ }
+ sub_803E46C(0x46);
+ gUnknown_203B418->unk7 = 0;
+}
+
+void sub_80867F4(void)
+{
+ gUnknown_202F3D0.unk0 = 0;
+ gUnknown_202F3D0.unk1 = 0;
+ gUnknown_202F3D0.unk2 = 0;
+ gUnknown_202F3D0.unk3 = 0;
+ gUnknown_202F3D0.unk4 = 0;
+ gUnknown_202F3D0.unk5 = 0;
+}
+
+void sub_808680C(void)
+{
+ gUnknown_202F3D0.unk0 = 1;
+ if(gUnknown_202F3D0.unk3 != 0)
+ PlaySoundEffect(0x1F9);
+}
+
+void sub_808682C(u8 r0)
+{
+ gUnknown_202F3D0.unk0 = 0;
+}
+
+void sub_8086838(u8 r0, u8 r1, u8 r2)
+{
+ gUnknown_202F3D0.unk1 = r0;
+ gUnknown_202F3D0.unk2 = r1;
+ gUnknown_202F3D0.unk3 = r2;
+}
+
+void sub_8086848(u8 r0, u8 r1)
+{
+ gUnknown_202F3D0.unk4 = r0;
+ gUnknown_202F3D0.unk5 = r1;
+}
+
+void sub_8086854(void)
+{
+ if(gUnknown_202F3D0.unk0 != 0)
+ {
+ if(gUnknown_202F3D0.unk4 == 0)
+ {
+ if(gUnknown_202F3D0.unk1 != 0)
+ {
+ gUnknown_202F3D0.unk4 = 0x50;
+ gUnknown_202F3D0.unk5 = 0x10;
+ }
+ else
+ {
+ gUnknown_202F3D0.unk4 = RandomCapped(0x6) + 2;
+ gUnknown_202F3D0.unk5 = RandomCapped(0x6) + 2;
+ }
+ if(gUnknown_202F3D0.unk3 != 0)
+ PlaySoundEffect(0x1F9);
+ }
+ else
+ {
+ gUnknown_202F3D0.unk4--;
+ }
+ if(gUnknown_202F3D0.unk5 != 0)
+ gUnknown_202F3D0.unk5--;
+ gUnknown_203B418->unk181FC = gUnknown_8107314[gUnknown_202F3D0.unk5];
+ }
+ else
+ {
+ gUnknown_203B418->unk181FC = 0;
+ }
+}
+
+void sub_80868F4(struct unkDungeon_8041D5C *r0)
+{
+ r0->unk70->unk15C = 1;
+ r0->unk70->unk15D = 1;
+}
+
+void sub_8086910(struct unkDungeon_8041D5C *r0)
+{
+ r0->unk70->unk15C = 0;
+ r0->unk70->unk15D = 0;
+}
+
+void sub_808692C(void)
+{
+ sub_80859F0(5);
+ sub_803E708(0x4, 0x46);
+
+ sub_80859F0(6);
+ sub_803E708(0x4, 0x46);
+
+ sub_80859F0(7);
+ sub_803E708(0x4, 0x46);
+
+ sub_80859F0(0);
+ sub_803E708(0x4, 0x46);
+}
+
+void SpriteLookAroundEffect(struct unkDungeon_8041D5C *r0)
+{
+ s8 r4;
+ s8 r3;
+
+ r4 = sub_8002984(r0->unk70->unk46, 4);
+
+ sub_80869E4(r0, 4, 2, r4);
+
+ sub_803E708(0xF, 0x46);
+
+ r4 = sub_8002984(r4, 5);
+
+ sub_80869E4(r0, 4, 1, r4);
+
+ sub_803E708(0xF, 0x46);
+
+ r3 = sub_8002984(r4, 4);
+
+ sub_80869E4(r0, 4, 2, r3);
+
+ sub_803E708(0xF, 0x46);
+}
diff --git a/src/items.c b/src/items.c
index 2c7dd90..22aa62b 100644
--- a/src/items.c
+++ b/src/items.c
@@ -137,49 +137,37 @@ void sub_8090B08(struct ItemStruct_203B460 *param_1,u8 itemIndex)
}
}
-NAKED
-void sub_8090B64(u32 r0, u32 r1)
+void sub_8090B64(struct ItemStruct_203B460 *param_1,struct ItemStruct_203B460 *param_2)
{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tadds r5, r1, 0\n"
- "\tldrb r1, [r5]\n"
- "\tadds r0, r1, 0\n"
- "\tcmp r0, 0\n"
- "\tbeq _08090BA4\n"
- "\tmovs r0, 0x1\n"
- "\tstrb r0, [r4]\n"
- "\tstrb r1, [r4, 0x2]\n"
- "\tldrb r0, [r4, 0x2]\n"
- "\tbl sub_8090A60\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tcmp r6, 0\n"
- "\tbne _08090B9A\n"
- "\tldrb r0, [r4, 0x2]\n"
- "\tbl GetItemType\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x6\n"
- "\tbeq _08090B9A\n"
- "\tldrb r0, [r4, 0x2]\n"
- "\tcmp r0, 0x7C\n"
- "\tbne _08090BA0\n"
-"_08090B9A:\n"
- "\tldrb r0, [r5, 0x1]\n"
- "\tstrb r0, [r4, 0x1]\n"
- "\tb _08090BAA\n"
-"_08090BA0:\n"
- "\tstrb r6, [r4, 0x1]\n"
- "\tb _08090BAA\n"
-"_08090BA4:\n"
- "\tstrb r0, [r4, 0x2]\n"
- "\tstrb r0, [r4, 0x1]\n"
- "\tstrb r0, [r4]\n"
-"_08090BAA:\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0");
+ u8 r6;
+
+ if(param_2->unk0 != 0)
+ {
+ param_1->unk0 = 1;
+ param_1->itemIndex = param_2->unk0;
+ r6 = sub_8090A60(param_1->itemIndex);
+ if(r6 != 0 || GetItemType(param_1->itemIndex) == ITEM_TYPE_MONEY)
+ {
+ param_1->numItems = param_2->numItems;
+ }
+ else
+ {
+ if(param_1->itemIndex == 0x7C)
+ {
+ param_1->numItems = param_2->numItems;
+ }
+ else
+ {
+ param_1->numItems = r6;
+ }
+ }
+ }
+ else
+ {
+ param_1->itemIndex = 0;
+ param_1->numItems = 0;
+ param_1->unk0 = 0;
+ }
}
void sub_8090BB0(struct ItemStruct_203B460 *param_1,struct ItemStruct_203B460 *param_2)
diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c
index d9d253c..e3dcd70 100644
--- a/src/kangaskhan_storage_2.c
+++ b/src/kangaskhan_storage_2.c
@@ -3,17 +3,42 @@
#include "memory.h"
#include "text.h"
#include "item.h"
+#include "input.h"
#include "kangaskhan_storage.h"
+#include "gUnknown_203B460.h"
extern struct unkStruct_203B208 *gUnknown_203B208;
+extern struct unkStruct_203B460 *gUnknown_203B460;
struct unkStruct_203B20C
{
u32 state;
- u8 unk4[0x10];
+ u8 unk4[4];
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u8 fillC[0x14 - 0xC];
u32 unk14;
u32 unk18;
u32 unk1C;
+ u32 unk20;
+ u8 fill24[0x60 - 0x24];
+ u32 unk60;
+ u8 fill64[0x70 - 0x64];
+ u32 unk70;
+ u8 fill74[0xC0 - 0x74];
+ u32 unkC0;
+ u32 unkC4;
+ u32 unkC8;
+ u32 unkCC;
+ u32 unkD0;
+ u32 unkD4;
+ struct UnkTextStruct2 *unkD8;
+ u32 unkDC;
+ u32 unkE0;
+ u8 fillE4[0xF0 - 0xE4];
+ struct UnkTextStruct2 unkF0[4];
};
extern struct unkStruct_203B20C *gUnknown_203B20C;
@@ -38,13 +63,172 @@ extern u32 sub_801B410(void);
extern u8 sub_8012FD8(u32 *r0);
extern void sub_8013114(u32 *, s32 *);
extern void sub_801CBB8();
-extern void sub_801CA08();
+
+extern u8 sub_8091524(u8);
+extern u8 sub_801ADA0(u32);
+extern void sub_8099690(u32);
+extern u32 sub_8013BBC(u32 *);
+extern void sub_8017598(void);
+
+extern u32 sub_801CA08(u32);
+extern u32 sub_801CFB8(void);
+extern u8 sub_801CB24();
+extern void sub_8090A8C(struct ItemStruct_203B460 *, u8, u32);
+extern void sub_801AD34(u32);
+extern u32 sub_801A6E8(u32);
+extern u32 sub_801AEA8(void);
+extern u32 sub_801A8AC(void);
+extern void sub_801A928(void);
+extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *);
+extern void sub_80182E4(void);
+
+extern void sub_801A9E0();
+extern void sub_801841C();
+extern void sub_801CCD8();
+extern void sub_80184D4();
+extern void sub_8018280();
+extern void sub_8013AA0(u32 *);
+extern void sub_801B3C0(u8 *);
+extern void sub_801A5D8(u32, u32, u32, u32);
+extern void sub_801C8C4(u32, u32, u32, u32);
+extern void sub_8012D60(u32 *, u32 *, u32, u32 *, u32, u32);
+extern void sub_801CB5C(u32);
+extern void sub_801A8D0(u32);
+
+extern struct UnkTextStruct2 gUnknown_80DB7B8;
+extern struct UnkTextStruct2 gUnknown_80DB7E8;
+extern struct UnkTextStruct2 gUnknown_80DB7D0;
+extern struct UnkTextStruct2 gUnknown_80DB800;
+extern struct UnkTextStruct2 gUnknown_80DB818;
+
+void sub_8017AF8(void)
+{
+ switch(sub_801A6E8(1))
+ {
+ case 3:
+ if(sub_801AEA8() != 0)
+ {
+ sub_8099690(0);
+ UpdateKangaskhanStorageState(0x12);
+ }
+ else
+ {
+ gUnknown_203B208->unk10 = sub_801A8AC();
+ gUnknown_203B208->unkC = gUnknown_203B460->fill0[gUnknown_203B208->unk10];
+ UpdateKangaskhanStorageState(0xF);
+ }
+ break;
+ case 4:
+ gUnknown_203B208->unk10 = sub_801A8AC();
+ gUnknown_203B208->unkC = gUnknown_203B460->fill0[gUnknown_203B208->unk10];
+ UpdateKangaskhanStorageState(0x10);
+ break;
+ case 2:
+ sub_801A928();
+ UpdateKangaskhanStorageState(1);
+ break;
+ }
+}
+
+void sub_8017B88(void)
+{
+ switch(sub_801CA08(1))
+ {
+ case 3:
+ if(sub_801CFB8() != 0){
+ UpdateKangaskhanStorageState(0x1C);
+ }
+ else
+ {
+ gUnknown_203B208->unk14 = sub_801CB24();
+ sub_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->unk14, 0);
+ gUnknown_203B208->unkC.numItems = 1;
+ UpdateKangaskhanStorageState(0x19);
+ }
+ break;
+ case 4:
+ gUnknown_203B208->unk14 = sub_801CB24();
+ sub_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->unk14, 0);
+ gUnknown_203B208->unkC.numItems = 1;
+ UpdateKangaskhanStorageState(0x1A);
+ break;
+ case 2:
+ sub_801CBB8();
+ UpdateKangaskhanStorageState(1);
+ break;
+ case 1:
+ sub_801AD34(0);
+ break;
+ }
+}
+
+void sub_8017C28(void)
+{
+ sub_801CA08(0);
+ sub_8012FD8(&gUnknown_203B208->unk58);
+ switch(sub_8013BBC(&gUnknown_203B208->unkA8))
+ {
+ case 1:
+ sub_8017598();
+ break;
+ case 3:
+ gUnknown_203B208->unkC.numItems = gUnknown_203B208->unkA8;
+ UpdateKangaskhanStorageState(0x1B);
+ break;
+ case 2:
+ UpdateKangaskhanStorageState(0x17);
+ break;
+ case 0:
+ default:
+ break;
+ }
+}
+
+void sub_8017C7C(void)
+{
+ s32 menuAction;
+ menuAction = 0;
+ sub_801A6E8(0);
+ if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) {
+ sub_8013114(&gUnknown_203B208->unk58, &menuAction);
+ if(menuAction != 1) gUnknown_203B208->unk1C = menuAction;
+ }
+
+ switch(menuAction)
+ {
+ case 2:
+ sub_8099690(0);
+ if(sub_8091524(gUnknown_203B208->unkC.itemIndex) == 0)
+ {
+ UpdateKangaskhanStorageState(9);
+ }
+ else
+ {
+ if(sub_801ADA0(gUnknown_203B208->unk10) == 0)
+ {
+ UpdateKangaskhanStorageState(0xA);
+ }
+ else
+ {
+ UpdateKangaskhanStorageState(0x11);
+ }
+ }
+ break;
+ case 6:
+ sub_8099690(0);
+ UpdateKangaskhanStorageState(0x10);
+ break;
+ case 1:
+ UpdateKangaskhanStorageState(0xE);
+ break;
+ }
+}
void sub_8017D24(void)
{
s32 menuAction;
menuAction = 0;
- sub_801CA08();
+ sub_801CA08(0);
if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) {
sub_8013114(&gUnknown_203B208->unk58, &menuAction);
if(menuAction != 1) gUnknown_203B208->unk20 = menuAction;
@@ -56,11 +240,11 @@ void sub_8017D24(void)
if (sub_8090A34() > 0x13)
{
sub_801CBB8();
- UpdateKangaskhanStorageState(0x6);
+ UpdateKangaskhanStorageState(6);
}
else
{
- if(sub_8090A60(gUnknown_203B208->itemIndex))
+ if(sub_8090A60(gUnknown_203B208->unkC.itemIndex))
UpdateKangaskhanStorageState(0x18);
else
UpdateKangaskhanStorageState(0x1B);
@@ -182,3 +366,112 @@ void sub_8017F10(u32 newState)
sub_8017F28();
sub_8018100();
}
+
+void sub_8017F28(void)
+{
+ s32 iVar2;
+
+ sub_8006518(gUnknown_203B20C->unkF0);
+
+ switch(gUnknown_203B20C->state)
+ {
+ case 1:
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ sub_80182E4();
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7D0;
+ sub_8012CAC(&gUnknown_203B20C->unkF0[2], &gUnknown_203B20C->unk20);
+ break;
+ case 4:
+ case 5:
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ break;
+ case 10:
+ case 11:
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB800;
+ break;
+ case 12:
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB818;
+ break;
+ case 6:
+ case 13:
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7E8;
+ break;
+ default:
+ case 0:
+ for(iVar2 = 0; iVar2 < 4; iVar2++)
+ {
+ gUnknown_203B20C->unkF0[iVar2] = gUnknown_80DB7B8;
+ }
+ break;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B20C->unkF0, 1, 1);
+}
+
+void sub_8018100(void)
+{
+
+ switch(gUnknown_203B20C->state)
+ {
+ case 1:
+ sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk14, 2);
+ break;
+ case 4:
+ sub_801A5D8(3, 3, 0, 0xA);
+ break;
+ case 5:
+ sub_801A8D0(1);
+ break;
+ case 6:
+ sub_801A9E0();
+ sub_801841C();
+ sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk18, 2);
+ break;
+ case 7:
+ sub_801B3C0(&gUnknown_203B20C->unk8);
+ break;
+ case 10:
+ sub_801C8C4(1, 3, 0, 0xA);
+ sub_801AD34(0);
+ break;
+ case 11:
+ sub_801CB5C(1);
+ sub_801AD34(0);
+ break;
+ case 12:
+ gUnknown_203B20C->unkD0 = 2;
+ gUnknown_203B20C->unkC8 = 1;
+ if(gUnknown_203B460->unk50[gUnknown_203B20C->unkA] > 0x63)
+ gUnknown_203B20C->unkCC = 0x63;
+ else
+ gUnknown_203B20C->unkCC = gUnknown_203B460->unk50[gUnknown_203B20C->unkA];
+ gUnknown_203B20C->unkC4 = gUnknown_203B20C->unkCC;
+ gUnknown_203B20C->unkD4 = 1;
+ gUnknown_203B20C->unkD8 = &gUnknown_203B20C->unkF0[1];
+ gUnknown_203B20C->unkDC = 0x28;
+ gUnknown_203B20C->unkE0 = 0x12;
+ sub_8013AA0(&gUnknown_203B20C->unkC0);
+ sub_8018280();
+ break;
+ case 13:
+ sub_801CCD8();
+ sub_801AD34(0);
+ sub_80184D4();
+ sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk1C, 2);
+ break;
+ case 14:
+ sub_801B3C0(&gUnknown_203B20C->unk8);
+ break;
+ case 0:
+ default:
+ break;
+ }
+}
diff --git a/src/music_pre.c b/src/music_pre.c
index 410c923..80968a6 100644
--- a/src/music_pre.c
+++ b/src/music_pre.c
@@ -447,7 +447,6 @@ void sub_800BDDC(void)
void StartNewBGM(u16 songIndex)
{
bool8 interrupt_flag;
- u16 temp_store;
if(!IsBGSong(songIndex))
return;
@@ -455,8 +454,7 @@ void StartNewBGM(u16 songIndex)
return;
if(songIndex == gCurrentBGSong)
{
- temp_store = gBGMusicPlayerState - 1;
- if(temp_store <= 1)
+ if((u16)(gBGMusicPlayerState - 1) <= 1)
return;
}
if(sub_800CAE0(songIndex))
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index fd03834..62e60d8 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "pokemon.h"
extern u32 gIQSkillNames[];
extern u32 gIQSkillDescriptions[];
@@ -10,9 +11,269 @@ extern s16 gUnknown_810A378[];
extern s32 gUnknown_810A390[];
extern u32 gUnknown_81076E4[];
+struct unkStruct_808E9EC
+{
+ u32 unk0;
+ u32 unk4;
+ u32 unk8;
+ u32 unkC;
+ u8 unk10;
+ u8 unk11;
+ u8 unk12;
+ u8 unk13;
+};
+
+extern s16 gUnknown_810AC60; // 0xC
+extern s16 gUnknown_810AC62; // 0xC
+extern s16 gUnknown_810AC68; // 0x8
+extern s16 gUnknown_810AC64; // 0x8
+extern s16 gUnknown_810AC66; // 0x8
+
extern bool8 sub_808ECD0(u8 *, u32);
extern void sub_808EC30(u8 *, u32);
+s32 GetUnownIndex(s16 index)
+{
+ if(index == SPECIES_UNOWN_B)
+ return 1;
+ if(index == SPECIES_UNOWN_C)
+ return 2;
+ if(index == SPECIES_UNOWN_D)
+ return 3;
+ if(index == SPECIES_UNOWN_E)
+ return 4;
+ if(index == SPECIES_UNOWN_F)
+ return 5;
+ if(index == SPECIES_UNOWN_G)
+ return 6;
+ if(index == SPECIES_UNOWN_H)
+ return 7;
+ if(index == SPECIES_UNOWN_I)
+ return 8;
+ if(index == SPECIES_UNOWN_J)
+ return 9;
+ if(index == SPECIES_UNOWN_K)
+ return 10;
+ if(index == SPECIES_UNOWN_L)
+ return 11;
+ if(index == SPECIES_UNOWN_M)
+ return 12;
+ if(index == SPECIES_UNOWN_N)
+ return 13;
+ if(index == SPECIES_UNOWN_O)
+ return 14;
+ if(index == SPECIES_UNOWN_P)
+ return 15;
+ if(index == SPECIES_UNOWN_Q)
+ return 16;
+ if(index == SPECIES_UNOWN_R)
+ return 17;
+ if(index == SPECIES_UNOWN_S)
+ return 18;
+ if(index == SPECIES_UNOWN_T)
+ return 19;
+ if(index == SPECIES_UNOWN_U)
+ return 20;
+ if(index == SPECIES_UNOWN_V)
+ return 21;
+ if(index == SPECIES_UNOWN_W)
+ return 22;
+ if(index == SPECIES_UNOWN_X)
+ return 23;
+ if(index == SPECIES_UNOWN_Y)
+ return 24;
+ if(index == SPECIES_UNOWN_Z)
+ return 25;
+ if(index == SPECIES_UNOWN_EMARK)
+ return 26;
+ if(index == SPECIES_UNOWN_QMARK)
+ return 27;
+ return 0;
+}
+
+u32 sub_808E9B8(struct PokemonStruct *r0)
+{
+ return r0->unk0 & 0x000001ff;
+}
+
+void sub_808E9C4(struct PokemonStruct *r0, s16 r1)
+{
+ s32 r1_s32 = r1; // cast needed to match
+ r0->unk0 = ((0xFE << 8) & r0->unk0) | r1_s32 ;
+}
+
+void sub_808E9D8(struct PokemonStruct *r0, s32 r1, s16 r2)
+{
+ s32 r2_32 = r2; // dumb cast to match
+ r0->unk0 = r2_32 | (r1 << 9) ;
+}
+
+u32 sub_808E9E4(struct PokemonStruct *r0)
+{
+ return (r0->unk0 >> 9);
+}
+
+// Unused
+#ifdef NONMATCHING
+void sub_808E9EC(struct PokemonStruct *r0, struct unkStruct_808E9EC *r1)
+{
+ u8 pokeAtt;
+ u8 r4;
+ u32 reg1_8;
+ s16 reg1;
+
+ pokeAtt = r0->pokeAtt;
+
+ r1->unk0 = pokeAtt;
+ r1->unk4 = r0->pokeSPAtt;
+ r1->unk8 = r0->pokeDef;
+ r1->unkC = r0->pokeSPDef;
+ r1->unk10 = 0;
+ r1->unk11 = 0;
+ r1->unk12 = 0;
+ r1->unk13 = 0;
+ if(r0->unk28 != 0)
+ {
+ r4 = r0->unk28;
+ if(r4 == 0x13)
+ {
+ r1->unk10 = gUnknown_810AC60;
+ r1->unk0 = pokeAtt + gUnknown_810AC60;
+ }
+ if(r4 == 0x21)
+ {
+ r1->unk11 += gUnknown_810AC62;
+ r1->unk4 += gUnknown_810AC62;
+ }
+ if(r4 == 0x2B)
+ {
+ // TODO: regs get a little f**ked
+ reg1_8 = (u8)gUnknown_810AC68;
+ r1->unk10 += reg1_8;
+ r1->unk11 += reg1_8;
+
+ reg1 = gUnknown_810AC68;
+ r1->unk0 += reg1;
+ r1->unk4 += reg1;
+ }
+ if(r4 == 0x1E)
+ {
+ r1->unk12 += gUnknown_810AC64;
+ r1->unk8 += gUnknown_810AC64;
+ }
+ if(r4 == 0x22)
+ {
+ r1->unk13 += gUnknown_810AC66;
+ r1->unkC += gUnknown_810AC66;
+ }
+ }
+}
+#else
+NAKED
+void sub_808E9EC(struct PokemonStruct *r0, struct unkStruct_808E9EC *r1)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tadds r3, r1, 0\n"
+ "\tldrb r2, [r0, 0x18]\n"
+ "\tstr r2, [r3]\n"
+ "\tldrb r1, [r0, 0x19]\n"
+ "\tstr r1, [r3, 0x4]\n"
+ "\tldrb r1, [r0, 0x1A]\n"
+ "\tstr r1, [r3, 0x8]\n"
+ "\tldrb r1, [r0, 0x1B]\n"
+ "\tstr r1, [r3, 0xC]\n"
+ "\tmovs r1, 0\n"
+ "\tstrb r1, [r3, 0x10]\n"
+ "\tstrb r1, [r3, 0x11]\n"
+ "\tstrb r1, [r3, 0x12]\n"
+ "\tstrb r1, [r3, 0x13]\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r1, 0x28\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0808EA96\n"
+ "\tadds r4, r0, 0\n"
+ "\tadds r5, r4, 0\n"
+ "\tcmp r4, 0x13\n"
+ "\tbne _0808EA2A\n"
+ "\tldr r1, _0808EA9C\n"
+ "\tldrh r0, [r1]\n"
+ "\tstrb r0, [r3, 0x10]\n"
+ "\tmovs r6, 0\n"
+ "\tldrsh r0, [r1, r6]\n"
+ "\tadds r0, r2, r0\n"
+ "\tstr r0, [r3]\n"
+"_0808EA2A:\n"
+ "\tcmp r4, 0x21\n"
+ "\tbne _0808EA42\n"
+ "\tldr r1, _0808EAA0\n"
+ "\tldrb r0, [r1]\n"
+ "\tldrb r2, [r3, 0x11]\n"
+ "\tadds r0, r2\n"
+ "\tstrb r0, [r3, 0x11]\n"
+ "\tmovs r6, 0\n"
+ "\tldrsh r1, [r1, r6]\n"
+ "\tldr r0, [r3, 0x4]\n"
+ "\tadds r0, r1\n"
+ "\tstr r0, [r3, 0x4]\n"
+"_0808EA42:\n"
+ "\tcmp r4, 0x2B\n"
+ "\tbne _0808EA66\n"
+ "\tldr r2, _0808EAA4\n"
+ "\tldrb r0, [r2]\n"
+ "\tldrb r6, [r3, 0x10]\n"
+ "\tadds r1, r0, r6\n"
+ "\tstrb r1, [r3, 0x10]\n"
+ "\tldrb r1, [r3, 0x11]\n"
+ "\tadds r0, r1\n"
+ "\tstrb r0, [r3, 0x11]\n"
+ "\tmovs r6, 0\n"
+ "\tldrsh r1, [r2, r6]\n"
+ "\tldr r0, [r3]\n"
+ "\tadds r0, r1\n"
+ "\tstr r0, [r3]\n"
+ "\tldr r0, [r3, 0x4]\n"
+ "\tadds r0, r1\n"
+ "\tstr r0, [r3, 0x4]\n"
+"_0808EA66:\n"
+ "\tcmp r4, 0x1E\n"
+ "\tbne _0808EA7E\n"
+ "\tldr r1, _0808EAA8\n"
+ "\tldrb r0, [r1]\n"
+ "\tldrb r2, [r3, 0x12]\n"
+ "\tadds r0, r2\n"
+ "\tstrb r0, [r3, 0x12]\n"
+ "\tmovs r6, 0\n"
+ "\tldrsh r1, [r1, r6]\n"
+ "\tldr r0, [r3, 0x8]\n"
+ "\tadds r0, r1\n"
+ "\tstr r0, [r3, 0x8]\n"
+"_0808EA7E:\n"
+ "\tcmp r5, 0x22\n"
+ "\tbne _0808EA96\n"
+ "\tldr r1, _0808EAAC\n"
+ "\tldrb r0, [r1]\n"
+ "\tldrb r2, [r3, 0x13]\n"
+ "\tadds r0, r2\n"
+ "\tstrb r0, [r3, 0x13]\n"
+ "\tmovs r6, 0\n"
+ "\tldrsh r1, [r1, r6]\n"
+ "\tldr r0, [r3, 0xC]\n"
+ "\tadds r0, r1\n"
+ "\tstr r0, [r3, 0xC]\n"
+"_0808EA96:\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_0808EA9C: .4byte gUnknown_810AC60\n"
+"_0808EAA0: .4byte gUnknown_810AC62\n"
+"_0808EAA4: .4byte gUnknown_810AC68\n"
+"_0808EAA8: .4byte gUnknown_810AC64\n"
+"_0808EAAC: .4byte gUnknown_810AC66");
+}
+#endif
+
u32 GetIQSkillName(u8 r0)
{
return gIQSkillNames[r0];
diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c
index d5ae74a..d297ca0 100644
--- a/src/pokemon_mid.c
+++ b/src/pokemon_mid.c
@@ -11,7 +11,6 @@ extern const char gUnknown_810763C[];
extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *r2, ...);
extern s16 sub_808E770(u32);
-extern s32 GetUnownIndex(s32);
extern void sub_80922B4(u8 *, u8 *, s32);
extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *r2, ...);