diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_800C9CC.c | 10 | ||||
-rw-r--r-- | src/code_80869E4.c | 498 | ||||
-rw-r--r-- | src/items.c | 72 | ||||
-rw-r--r-- | src/kangaskhan_storage_2.c | 303 | ||||
-rw-r--r-- | src/music_pre.c | 4 | ||||
-rw-r--r-- | src/pokemon_3.c | 261 | ||||
-rw-r--r-- | src/pokemon_mid.c | 1 |
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, ...); |