diff --git a/asm/code_8085EB0.s b/asm/code_8085EB0.s deleted file mode 100644 index efd4ee11f..000000000 --- a/asm/code_8085EB0.s +++ /dev/null @@ -1,331 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8085EB0 -sub_8085EB0: - ldr r0, _08085EC0 - ldr r0, [r0] - ldr r1, _08085EC4 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - bx lr - .align 2, 0 -_08085EC0: .4byte gDungeon -_08085EC4: .4byte 0x00018215 - thumb_func_end sub_8085EB0 - - thumb_func_start sub_8085EC8 -sub_8085EC8: - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x28 - adds r4, r0, 0 - mov r8, r1 - mov r9, r2 - adds r6, r3, 0 - ldr r5, [sp, 0x40] - lsls r4, 16 - asrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - adds r0, r4, 0 - bl sub_800EE5C - bl sub_800EF64 - movs r0, 0x46 - bl sub_803E46C - str r4, [sp] - mov r0, r8 - str r0, [sp, 0x4] - mov r2, r9 - str r2, [sp, 0x8] - mov r1, sp - ldrh r0, [r6] - movs r2, 0 - strh r0, [r1, 0xC] - ldrh r0, [r6, 0x2] - strh r0, [r1, 0xE] - mov r0, sp - strh r2, [r0, 0x10] - strh r2, [r0, 0x12] - ldr r0, _08085F3C - str r0, [sp, 0x18] - add r1, sp, 0x1C - ldr r0, _08085F40 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - mov r0, sp - bl sub_800E890 - cmp r5, 0 - beq _08085F2E - bl sub_8085F44 - movs r0, 0x1 - negs r0, r0 -_08085F2E: - add sp, 0x28 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08085F3C: .4byte 0x0000ffff -_08085F40: .4byte gUnknown_8107374 - thumb_func_end sub_8085EC8 - - thumb_func_start sub_8085F44 -sub_8085F44: - push {r4,lr} - adds r4, r0, 0 - b _08085F5C -_08085F4A: - ldr r0, _08085F70 - ldr r0, [r0] - ldr r1, _08085F74 - adds r0, r1 - bl sub_800E90C - movs r0, 0x46 - bl sub_803E46C -_08085F5C: - adds r0, r4, 0 - bl sub_800E9A8 - lsls r0, 24 - cmp r0, 0 - bne _08085F4A - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08085F70: .4byte gDungeon -_08085F74: .4byte 0x000181f0 - thumb_func_end sub_8085F44 - - thumb_func_start sub_8085F78 -sub_8085F78: - push {lr} - ldr r0, _08085F94 - ldr r0, [r0] - ldr r1, _08085F98 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x3C - bls _08085F8A - b _080860A4 -_08085F8A: - lsls r0, 2 - ldr r1, _08085F9C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08085F94: .4byte gDungeon -_08085F98: .4byte 0x00003a0d -_08085F9C: .4byte _08085FA0 - .align 2, 0 -_08085FA0: - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _08086094 - .4byte _08086094 - .4byte _08086094 - .4byte _0808609A - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A0 - .4byte _080860A0 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 - .4byte _080860A4 -_08086094: - bl sub_8088848 - b _080860A4 -_0808609A: - bl sub_8088EE8 - b _080860A4 -_080860A0: - bl sub_808A718 -_080860A4: - pop {r0} - bx r0 - thumb_func_end sub_8085F78 - - thumb_func_start sub_80860A8 -sub_80860A8: - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - ldr r0, _08086108 - ldr r2, [r0] - movs r3, 0x1 -_080860B6: - ldrb r1, [r2] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080860C6 - ldrb r0, [r2, 0x2] - cmp r0, r6 - beq _08086104 -_080860C6: - adds r2, 0x4 - adds r5, 0x1 - cmp r5, 0x13 - ble _080860B6 - movs r5, 0 -_080860D0: - ldr r0, _0808610C - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08086110 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08086114 - ldr r2, [r4, 0x70] - adds r0, r2, 0 - adds r0, 0x60 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08086114 - adds r0, r2, 0 - adds r0, 0x62 - ldrb r0, [r0] - cmp r0, r6 - bne _08086114 -_08086104: - movs r0, 0x1 - b _0808611C - .align 2, 0 -_08086108: .4byte gTeamInventoryRef -_0808610C: .4byte gDungeon -_08086110: .4byte 0x0001357c -_08086114: - adds r5, 0x1 - cmp r5, 0x3 - ble _080860D0 - movs r0, 0 -_0808611C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80860A8 - - thumb_func_start sub_8086124 -sub_8086124: - ldr r0, [r0, 0x70] - movs r2, 0xB0 - lsls r2, 1 - adds r0, r2 - strb r1, [r0] - bx lr - thumb_func_end sub_8086124 - - thumb_func_start sub_8086130 -sub_8086130: - push {lr} - movs r0, 0x3C - bl DungeonFadeOutBGM - movs r0, 0x3C - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086194 - ldr r0, [r0] - bl sub_8052FB8 - movs r0, 0x1E - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086198 - ldr r0, [r0] - bl sub_8052FB8 - movs r0, 0x1E - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808619C - ldr r0, [r0] - bl sub_8052FB8 - movs r0, 0x1E - movs r1, 0x46 - bl sub_803E708 - ldr r0, _080861A0 - ldr r0, [r0] - bl sub_8052FB8 - movs r0, 0x1E - movs r1, 0x46 - bl sub_803E708 - ldr r0, _080861A4 - ldr r0, [r0] - bl sub_8052FB8 - movs r0, 0x1E - movs r1, 0x46 - bl sub_803E708 - pop {r0} - bx r0 - .align 2, 0 -_08086194: .4byte gUnknown_810665C -_08086198: .4byte gUnknown_810668C -_0808619C: .4byte gUnknown_81066D4 -_080861A0: .4byte gUnknown_81066F0 -_080861A4: .4byte gUnknown_810671C - thumb_func_end sub_8086130 diff --git a/include/structs/dungeon_entity.h b/include/structs/dungeon_entity.h index c9b508785..8b1a1b8dc 100644 --- a/include/structs/dungeon_entity.h +++ b/include/structs/dungeon_entity.h @@ -290,7 +290,8 @@ typedef struct EntityInfo u8 unk15D; u8 unk15E; u8 unk15F; - u8 fill160[0x164 - 0x160]; + u8 unk160; + u8 fill161[3]; /* 0x164 */ u8 unk164; /* 0x165 */ u8 unk165; /* 0x166 */ u8 unk166; diff --git a/ld_script.txt b/ld_script.txt index ac18fa622..3259972e3 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -302,7 +302,6 @@ SECTIONS { src/dungeon_util_1.o(.text); asm/code_8085B80.o(.text); src/code_8085E98.o(.text); - asm/code_8085EB0.o(.text); src/code_80861A8.o(.text); asm/code_80861B8.o(.text); src/code_80869E4.o(.text); diff --git a/src/code_803D0D8.c b/src/code_803D0D8.c index 805939c6d..2e01b9199 100644 --- a/src/code_803D0D8.c +++ b/src/code_803D0D8.c @@ -101,14 +101,14 @@ void sub_803D1A8(u8 *param_1, u8 *param_2, s32 size) bool8 sub_803D204(u8 *buffer,unkStruct_203B480 *param_2) { s32 innerIndex; - u8 uVar3; + u8 checksum; u8 local_c4 [34]; u8 translateBuffer [PASSWORD_BUFFER_SIZE]; u8 localBuffer [PASSWORD_BUFFER_SIZE]; unkStruct_8094924 uStack_30; s32 index; - uVar3 = 0; + checksum = 0; MemoryCopy8(localBuffer,buffer,sizeof(localBuffer)); for(index = 0; index < PASSWORD_BUFFER_SIZE; index++) { @@ -124,9 +124,9 @@ bool8 sub_803D204(u8 *buffer,unkStruct_203B480 *param_2) for(index = 1; index < 34; index++) { - uVar3 += local_c4[index] + index; + checksum += local_c4[index] + index; } - if (local_c4[0] == uVar3) { + if (local_c4[0] == checksum) { xxx_init_struct_8094924_restore_809485C(&uStack_30,&local_c4[1],33); sub_8095774(&uStack_30,param_2); nullsub_102(&uStack_30); @@ -138,14 +138,14 @@ bool8 sub_803D204(u8 *buffer,unkStruct_203B480 *param_2) void sub_803D2C0(u8 *buffer, unkStruct_203B480 *mail) { - u8 uVar2; + u8 checksum; int index; u8 local_c0 [34]; u8 buffer1 [PASSWORD_BUFFER_SIZE]; u8 buffer2 [PASSWORD_BUFFER_SIZE]; unkStruct_8094924 auStack_2c; - uVar2 = 0; + checksum = 0; for(index = 0; index < 34; index++) { @@ -157,9 +157,9 @@ void sub_803D2C0(u8 *buffer, unkStruct_203B480 *mail) nullsub_102(&auStack_2c); for(index = 1; index < 34; index++) { - uVar2 += + local_c0[index] + index; + checksum += + local_c0[index] + index; } - local_c0[0] = uVar2; + local_c0[0] = checksum; sub_803D1A8(buffer1,local_c0,sizeof(buffer1)); for(index = 0; index < PASSWORD_BUFFER_SIZE; index++) { @@ -172,13 +172,13 @@ bool8 DecodeWonderMailPassword(u8* buffer, WonderMail *mail) { s32 innerIndex; int index; - u8 uVar5; + u8 checksum; u8 local_70 [16]; u8 local_60 [24]; u8 password [24]; unkStruct_8094924 puVar1; - uVar5 = 0; + checksum = 0; MemoryCopy8(password,buffer,24); for(index = 0; index < 24; index++) @@ -196,9 +196,9 @@ bool8 DecodeWonderMailPassword(u8* buffer, WonderMail *mail) for(index = 1; index < 0xF; index++) { - uVar5 += (local_70[index] + index); + checksum += (local_70[index] + index); } - if (local_70[0] == uVar5) { + if (local_70[0] == checksum) { xxx_init_struct_8094924_restore_809485C(&puVar1,&local_70[1],0xc); RestoreWonderMail(&puVar1,mail); nullsub_102(&puVar1); @@ -210,14 +210,14 @@ bool8 DecodeWonderMailPassword(u8* buffer, WonderMail *mail) void sub_803D414(u8 *buffer,WonderMail *mail) { - u8 uVar2; + u8 checksum; s32 index; u8 local_6c [15]; u8 local_5c [24]; u8 auStack_44 [24]; unkStruct_8094924 uStack_2c; - uVar2 = 0; + checksum = 0; for(index = 0; index < 0xF; index++) { local_6c[index] = 0; @@ -229,9 +229,9 @@ void sub_803D414(u8 *buffer,WonderMail *mail) for(index = 1; index < 0xF; index++) { - uVar2 += local_6c[index] + index; + checksum += local_6c[index] + index; } - local_6c[0] = uVar2; + local_6c[0] = checksum; sub_803D1A8(local_5c,local_6c, sizeof(local_5c)); for(index = 0; index < 0x18; index++) { diff --git a/src/code_8085E98.c b/src/code_8085E98.c index 71e07df56..acf8d936c 100644 --- a/src/code_8085E98.c +++ b/src/code_8085E98.c @@ -1,9 +1,141 @@ #include "global.h" #include "code_8085E98.h" +#include "code_800E9A8.h" +#include "code_803E46C.h" +#include "dungeon_util.h" +#include "items.h" #include "structs/str_dungeon.h" +struct unkStruct_80420E8 +{ + u32 unk0; + u32 unk4; + u32 unk8; +}; +extern const struct unkStruct_80420E8 gUnknown_8107374; + +typedef struct unkStruct_80416E0 +{ + s32 unk0; + s32 unk4; + s32 unk8; + u16 x; + u16 y; + u16 unk10; + u16 unk12; + s32 unk14; + u32 unk18; +} unkStruct_80416E0; + +extern u32 sub_800E890(unkStruct_80416E0 *); +void sub_800EF64(void); +void sub_800EE5C(s32); +void sub_8085F44(s32); +void sub_800E90C(Position *); +void sub_8088EE8(void); +void sub_8088848(void); +void sub_808A718(void); + + void sub_8085E98(void) { gDungeon->unk181e8.unk18215 = 0; } + +void sub_8085EB0(void) +{ + gDungeon->unk181e8.unk18215 = 1; +} + +u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,Position *param_4,bool32 param_5) +{ + u32 uVar1; + unkStruct_80416E0 local_40; + struct unkStruct_80420E8 local; + + bool8 param_5_bool8; + s32 param_1_s32 = param_1; + + + param_5_bool8 = param_5; + + sub_800EE5C(param_1_s32); + sub_800EF64(); + sub_803E46C(0x46); + local_40.unk0 = param_1; + local_40.unk4 = param_2; + local_40.unk8 = param_3; + local_40.x = param_4->x; + local_40.y = param_4->y; + local_40.unk10 = 0; + local_40.unk12 = 0; + local_40.unk18 = 0xffff; + local = gUnknown_8107374; + + + uVar1 = sub_800E890(&local_40); + if (param_5_bool8) { + sub_8085F44(uVar1); + uVar1 = -1; + } + return uVar1; +} + +void sub_8085F44(s32 param_1) +{ + while (sub_800E9A8(param_1)) { + sub_800E90C(&gDungeon->unk181e8.cameraPixelPos); + sub_803E46C(0x46); + } +} + +void sub_8085F78(void) +{ + switch(gDungeon->unk3A0D) { + case 0x12: + case 0x13: + case 0x14: + sub_8088848(); + break; + case 0x15: + sub_8088EE8(); + break; + case 0x29: + case 0x2A: + sub_808A718(); + break; + + case 0: + case 0x3C: + default: + break; + } + return; +} + +bool8 sub_80860A8(u8 id) +{ + + Item *item; + EntityInfo *info; + Entity *entity; + int index; + + + for(index = 0; index < INVENTORY_SIZE; index++) + { + item = &gTeamInventoryRef->teamItems[index]; + if((item->flags & 1) != 0) + { + if((item->id) == id) return TRUE; + } + } + + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity = gDungeon->teamPokemon[index]; + if (((EntityExists(entity)) && (info = entity->info, ((info->heldItem).flags & 1))) && ((info->heldItem).id == id)) return TRUE; + } + return FALSE; +} diff --git a/src/code_80861A8.c b/src/code_80861A8.c index 417b11cb3..93d70bf63 100644 --- a/src/code_80861A8.c +++ b/src/code_80861A8.c @@ -2,10 +2,42 @@ #include "constants/direction.h" #include "code_80861A8.h" +#include "code_803E668.h" #include "code_806CD90.h" +#include "dungeon_music.h" + +extern const u8 *gUnknown_810665C[]; +extern const u8 *gUnknown_810668C[]; +extern const u8 *gUnknown_81066D4[]; +extern const u8 *gUnknown_81066F0[]; +extern const u8 *gUnknown_810671C[]; + static void sub_80861EC(Entity *); +void sub_8052FB8(const u8 *); + +void sub_8086124(Entity *entity, u8 param_2) +{ + entity->info->unk160 = param_2; +} + +void sub_8086130(void) +{ + DungeonFadeOutBGM(0x3c); + sub_803E708(0x3c,0x46); + sub_8052FB8(*gUnknown_810665C); + sub_803E708(0x1e,0x46); + sub_8052FB8(*gUnknown_810668C); + sub_803E708(0x1e,0x46); + sub_8052FB8(*gUnknown_81066D4); + sub_803E708(0x1e,0x46); + sub_8052FB8(*gUnknown_81066F0); + sub_803E708(0x1e,0x46); + sub_8052FB8(*gUnknown_810671C); + sub_803E708(0x1e,0x46); +} + void sub_80861A8(Entity *a0) { sub_806CDD4(a0, 0, NUM_DIRECTIONS);