diff --git a/asm/include/main_020018A4.inc b/asm/include/main_020018A4.inc deleted file mode 100644 index 3f59c932..00000000 --- a/asm/include/main_020018A4.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once - diff --git a/asm/include/main_02009DCC.inc b/asm/include/main_02009DCC.inc deleted file mode 100644 index 00572095..00000000 --- a/asm/include/main_02009DCC.inc +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once -.public _022A37AC -.public _022A37AD -.public _022A37AE -.public _022A37AF -.public _022A37B0 diff --git a/asm/include/main_0200C4CC.inc b/asm/include/main_0200C4CC.inc deleted file mode 100644 index c84678ad..00000000 --- a/asm/include/main_0200C4CC.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -.public _02094C18 diff --git a/asm/include/main_0204317C.inc b/asm/include/main_0204317C.inc deleted file mode 100644 index 30956175..00000000 --- a/asm/include/main_0204317C.inc +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once -.public CloseCollectionMenu -.public CloseTextBox -.public MemFree -.public UNK_STORAGE_STRUCT_0X14 -.public sub_020442CC -.public sub_02044474 -.public sub_020445C8 diff --git a/asm/include/overlay_29_0232E400.inc b/asm/include/overlay_29_0232E400.inc deleted file mode 100644 index 4fde3b4c..00000000 --- a/asm/include/overlay_29_0232E400.inc +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once -.public DealDamage -.public EndSleepClassStatus diff --git a/asm/main_020018A4.s b/asm/main_020018A4.s deleted file mode 100644 index 1f44e692..00000000 --- a/asm/main_020018A4.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - .include "main_020018A4.inc" - - .text - - arm_func_start sub_020018A4 -sub_020018A4: ; 0x020018A4 - and r2, r1, #0 - and r3, r0, #0xff - cmp r2, #0 - cmpeq r3, #0 - mov r2, #0 - beq _020018C4 - adds r0, r0, #0x100 - adc r1, r1, r2 -_020018C4: - mov r0, r0, lsr #8 - orr r0, r0, r1, lsl #24 - bx lr - arm_func_end sub_020018A4 diff --git a/asm/main_02009DCC.s b/asm/main_02009DCC.s deleted file mode 100644 index 3ae078f5..00000000 --- a/asm/main_02009DCC.s +++ /dev/null @@ -1,50 +0,0 @@ - .include "asm/macros.inc" - .include "main_02009DCC.inc" - - .text - - arm_func_start sub_02009DCC -sub_02009DCC: ; 0x02009DCC - ldr r1, _02009E58 ; =_022A37AC - add r3, r0, r0, lsl #2 - ldrb r2, [r1, r3] - mov r1, #0x1f - cmp r2, #0 - ldr r2, _02009E5C ; =_022A37AD - bicne r1, r1, #1 - ldrb r2, [r2, r3] - cmp r2, #0 - ldr r2, _02009E60 ; =_022A37AE - bicne r1, r1, #2 - ldrb r2, [r2, r3] - cmp r2, #0 - ldr r2, _02009E64 ; =_022A37AF - bicne r1, r1, #4 - ldrb r2, [r2, r3] - cmp r2, #0 - ldr r2, _02009E68 ; =_022A37B0 - bicne r1, r1, #8 - ldrb r2, [r2, r3] - cmp r2, #0 - bicne r1, r1, #0x10 - cmp r0, #0 - ldrne r2, _02009E6C ; =0x04001000 - ldrne r0, [r2] - bicne r0, r0, #0x1f00 - orrne r0, r0, r1, lsl #8 - strne r0, [r2] - bxne lr - mov r2, #0x4000000 - ldr r0, [r2] - bic r0, r0, #0x1f00 - orr r0, r0, r1, lsl #8 - str r0, [r2] - bx lr - .align 2, 0 -_02009E58: .word _022A37AC -_02009E5C: .word _022A37AD -_02009E60: .word _022A37AE -_02009E64: .word _022A37AF -_02009E68: .word _022A37B0 -_02009E6C: .word 0x04001000 - arm_func_end sub_02009DCC diff --git a/asm/main_0200C4CC.s b/asm/main_0200C4CC.s deleted file mode 100644 index 17d5177f..00000000 --- a/asm/main_0200C4CC.s +++ /dev/null @@ -1,22 +0,0 @@ - .include "asm/macros.inc" - .include "main_0200C4CC.inc" - - .text - - arm_func_start sub_0200C4CC -sub_0200C4CC: ; 0x0200C4CC - stmdb sp!, {r4, lr} - ldr lr, _0200C4F8 ; =_02094C18 - mov r4, r0 - mov ip, #0xe -_0200C4DC: - ldmia lr!, {r0, r1, r2, r3} - stmia r4!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _0200C4DC - ldmia lr, {r0, r1} - stmia r4, {r0, r1} - ldmia sp!, {r4, pc} - .align 2, 0 -_0200C4F8: .word _02094C18 - arm_func_end sub_0200C4CC diff --git a/asm/main_0204317C.s b/asm/main_0204317C.s deleted file mode 100644 index d2a7cc23..00000000 --- a/asm/main_0204317C.s +++ /dev/null @@ -1,50 +0,0 @@ - .include "asm/macros.inc" - .include "main_0204317C.inc" - - .text - - arm_func_start FreeUnkStorageStruct0x18c0 -FreeUnkStorageStruct0x18c0: ; 0x0204317C - stmdb sp!, {r3, lr} - ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14 - ldr r0, [r0, #4] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_02044474 - bl sub_020442CC - bl sub_020445C8 - ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14 - ldr r1, [r0, #4] - ldr r0, [r1] - cmp r0, #6 - bne _020431BC - add r0, r1, #0x700 - ldrsb r0, [r0, #0xd5] - bl CloseTextBox -_020431BC: - ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14 - mvn r1, #1 - ldr r0, [r0, #4] - add r0, r0, #0x700 - ldrsb r0, [r0, #0xd6] - cmp r0, r1 - beq _020431DC - bl CloseTextBox -_020431DC: - ldr r1, _02043214 ; =UNK_STORAGE_STRUCT_0X14 - ldr r0, [r1, #4] - ldr r2, [r0] - add r0, r0, #0x700 - str r2, [r1, #0xc] - ldrsb r0, [r0, #0xd4] - bl CloseCollectionMenu - ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14 - ldr r0, [r0, #4] - bl MemFree - ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14 - mov r1, #0 - str r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02043214: .word UNK_STORAGE_STRUCT_0X14 - arm_func_end FreeUnkStorageStruct0x18c0 diff --git a/asm/overlay_29_0232E400.s b/asm/overlay_29_0232E400.s deleted file mode 100644 index 136ca6d8..00000000 --- a/asm/overlay_29_0232E400.s +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_29_0232E400.inc" - - .text - - arm_func_start DoMoveWakeUpSlap -DoMoveWakeUpSlap: ; 0x0232E400 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r5, r1 - ldr ip, [r5, #0xb4] - mov r6, r0 - ldrb ip, [ip, #0xbd] - cmp ip, #1 - cmpne ip, #3 - cmpne ip, #5 - str r3, [sp] - bne _0232E468 - mov r0, r6 - mov r1, r5 - mov r3, #0x200 - bl DealDamage - cmp r0, #0 - movne r4, #1 - moveq r4, #0 - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, #1 - str r2, [sp] - and r4, r4, #0xff - bl EndSleepClassStatus - b _0232E480 -_0232E468: - mov r3, #0x100 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r4, r0, #0xff -_0232E480: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - arm_func_end DoMoveWakeUpSlap diff --git a/include/directory_file.h b/include/directory_file.h index c8c77452..9d1e9422 100644 --- a/include/directory_file.h +++ b/include/directory_file.h @@ -1,8 +1,14 @@ #ifndef PMDSKY_DIRECTORY_FILE_H #define PMDSKY_DIRECTORY_FILE_H +#include "util.h" + #include +struct unk_02094C18 { + u32 field_0x0[0x3A]; +}; + struct directory_entry { u32 offset; // The offset of the file relative to the start of the Pack file u32 length; // The size of the file @@ -38,5 +44,6 @@ u32 DirectoryFile_GetDirectoryFileSize(struct directory* pack_file, u32 file_ind // file_index: file index // return: number of read bytes (identical to the length of the pack from the Table of Content) u32 DirectoryFile_LoadDirectoryFile(struct directory *pack_file, void *output_buffer,u32 file_index); +void sub_0200C4CC(struct unk_02094C18* dst); #endif //PMDSKY_DIRECTORY_FILE_H diff --git a/include/main_02001894.h b/include/main_02001894.h index a40da254..2d75e428 100644 --- a/include/main_02001894.h +++ b/include/main_02001894.h @@ -1,6 +1,9 @@ #ifndef PMDSKY_MAIN_02001894_H #define PMDSKY_MAIN_02001894_H +#include "util.h" + s32 RoundUpDiv256(s32 x); +u32 sub_020018A4(u64 x); #endif //PMDSKY_MAIN_02001894_H diff --git a/include/main_02009D48.h b/include/main_02009D48.h index 23ae13b2..455820c3 100644 --- a/include/main_02009D48.h +++ b/include/main_02009D48.h @@ -1,6 +1,8 @@ #ifndef PMDSKY_MAIN_02009D48_H #define PMDSKY_MAIN_02009D48_H +#include "util.h" + typedef struct { s32 val; @@ -8,5 +10,6 @@ typedef struct } unkStruct_02009D48; void sub_02009D48(s32 arg0); +void sub_02009DCC(s32 engine); #endif //PMDSKY_MAIN_02009D48_H diff --git a/include/main_02042AF8.h b/include/main_02042AF8.h index d854f5ec..e5bbc067 100644 --- a/include/main_02042AF8.h +++ b/include/main_02042AF8.h @@ -9,10 +9,12 @@ struct unk_020AFED4 { }; struct unk_02043148 { - u8 field_0x0[4]; + s32 field_0x0; s16 field_0x4[1000]; s8 field_0x7D4; - u8 field_0x7D5[0x13B]; + s8 field_0x7D5; + s8 field_0x7D6; + u8 field_0x7D7[0x139]; s16 field_0x910; u8 field_0x912[0xFAA]; u32 field_0x18BC; @@ -23,7 +25,7 @@ struct unk_020AFEE0 { u16 field_0x2; struct unk_02043148 *field_0x4; u8 *field_0x8; - u8 field_0xC[4]; + s32 field_0xC; u32 field_0x10; }; diff --git a/include/main_02043148.h b/include/main_02043148.h index 2282bfcd..7ba25921 100644 --- a/include/main_02043148.h +++ b/include/main_02043148.h @@ -6,5 +6,6 @@ void sub_02043148(s32 index); s32 sub_0204316C(s32 a); +void FreeUnkStorageStruct0x18c0(void); #endif diff --git a/include/overlay_29_0232E3D0.h b/include/overlay_29_0232E3D0.h index 8d7efb45..04606111 100644 --- a/include/overlay_29_0232E3D0.h +++ b/include/overlay_29_0232E3D0.h @@ -1,10 +1,13 @@ #ifndef PMDSKY_OVERLAY_29_0232E3D0_H #define PMDSKY_OVERLAY_29_0232E3D0_H +#include "util.h" + #include "dungeon_mode.h" #include "item.h" #include "move.h" bool8 DoMoveMiracleEye(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveWakeUpSlap(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/main.lsf b/main.lsf index 62c9c5d4..5ac70795 100644 --- a/main.lsf +++ b/main.lsf @@ -15,7 +15,6 @@ Static main Object src/main_02001188.o Object asm/main_0200119C.o Object src/main_02001894.o - Object asm/main_020018A4.o Object src/main_020018D0.o Object src/main_02001A54.o Object asm/main_02001B0C.o @@ -46,7 +45,6 @@ Static main Object src/main_0200961C.o Object asm/main_02009648.o Object src/main_02009D48.o - Object asm/main_02009DCC.o Object src/main_02009F9C.o Object asm/main_0200A124.o Object src/main_0200B330.o @@ -58,7 +56,6 @@ Static main Object src/debug.o Object src/directory_file_mngr.o Object src/directory_file.o - Object asm/main_0200C4CC.o Object src/main_0200C4FC.o Object asm/main_0200C5B4.o Object src/item_util.o @@ -209,7 +206,6 @@ Static main Object src/main_02042B84.o Object asm/main_02042BE0.o Object src/main_02043148.o - Object asm/main_0204317C.o Object src/main_02043218.o Object asm/main_020432B4.o Object src/main_02043380.o @@ -1159,7 +1155,6 @@ Overlay OVY_29 Object src/overlay_29_0232E250.o Object asm/overlay_29_0232E2B8.o Object src/overlay_29_0232E3D0.o - Object asm/overlay_29_0232E400.o Object src/overlay_29_0232E48C.o Object asm/overlay_29_0232E4A0.o Object src/overlay_29_0232E734.o diff --git a/src/directory_file.c b/src/directory_file.c index 695d74ec..9088da44 100644 --- a/src/directory_file.c +++ b/src/directory_file.c @@ -1,5 +1,7 @@ #include "directory_file.h" +extern const struct unk_02094C18 _02094C18; + #include "file_rom.h" #include "debug.h" @@ -37,3 +39,8 @@ u32 DirectoryFile_LoadDirectoryFile(struct directory *pack_file,void *output_buf FileRom_StopDataTransfer(); return toc_entry->length; } + +void sub_0200C4CC(struct unk_02094C18* dst) +{ + *dst = _02094C18; +} diff --git a/src/main_02001894.c b/src/main_02001894.c index aa6931a1..e9a8547b 100644 --- a/src/main_02001894.c +++ b/src/main_02001894.c @@ -5,3 +5,12 @@ s32 RoundUpDiv256(s32 x) { if (x & 0xFF) x += 0x100; return x >> 8; } + +u32 sub_020018A4(u64 x) +{ + if ((x & 0xFF) != 0) { + x += 0x100; + } + + return x >> 8; +} diff --git a/src/main_02009D48.c b/src/main_02009D48.c index 0b743414..e53c1f90 100644 --- a/src/main_02009D48.c +++ b/src/main_02009D48.c @@ -1,5 +1,15 @@ #include "main_02009D48.h" +extern u8 _022A37AC[]; + +extern u8 _022A37AD[]; + +extern u8 _022A37AE[]; + +extern u8 _022A37AF[]; + +extern u8 _022A37B0[]; + void sub_02009C54(s32); void sub_02009C38(s32); void sub_02009C70(s32); @@ -28,3 +38,35 @@ void sub_02009D48(s32 arg0) sub_020095E4(_022A37D4[arg0].val); sub_02009600(_022A37D8[arg0].val); } + +void sub_02009DCC(s32 engine) +{ + s32 idx = engine * 5; + u32 mask = 0x1F; + + if (_022A37AC[idx] != 0) { + mask &= ~1; + } + + if (_022A37AD[idx] != 0) { + mask &= ~2; + } + + if (_022A37AE[idx] != 0) { + mask &= ~4; + } + + if (_022A37AF[idx] != 0) { + mask &= ~8; + } + + if (_022A37B0[idx] != 0) { + mask &= ~0x10; + } + + if (engine == 0) { + *(vu32 *) 0x04000000 = (*(vu32 *) 0x04000000 & ~0x1F00) | (mask << 8); + } else { + *(vu32 *) 0x04001000 = (*(vu32 *) 0x04001000 & ~0x1F00) | (mask << 8); + } +} diff --git a/src/main_02043148.c b/src/main_02043148.c index 03d3f24a..64de7aca 100644 --- a/src/main_02043148.c +++ b/src/main_02043148.c @@ -1,4 +1,16 @@ #include "main_02043148.h" + +extern void sub_02044474(void); + +extern void sub_020442CC(void); + +extern void sub_020445C8(void); + +extern void CloseTextBox(s32 id); + +extern void CloseCollectionMenu(s32 id); + +extern void MemFree(void *ptr); #include "main_02042AF8.h" void sub_02043148(s32 index) @@ -11,3 +23,30 @@ s32 sub_0204316C(s32 a) { return a != 0 ? 5 : 7; } + +void FreeUnkStorageStruct0x18c0(void) +{ + struct unk_02043148 *s = UNK_STORAGE_STRUCT_0X14.field_0x4; + + if (s == NULL) { + return; + } + + sub_02044474(); + sub_020442CC(); + sub_020445C8(); + + s = UNK_STORAGE_STRUCT_0X14.field_0x4; + if (s->field_0x0 == 6) { + CloseTextBox(s->field_0x7D5); + } + + if (UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x7D6 != -2) { + CloseTextBox(UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x7D6); + } + + UNK_STORAGE_STRUCT_0X14.field_0xC = UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x0; + CloseCollectionMenu(UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x7D4); + MemFree(UNK_STORAGE_STRUCT_0X14.field_0x4); + UNK_STORAGE_STRUCT_0X14.field_0x4 = NULL; +} diff --git a/src/overlay_29_0232E3D0.c b/src/overlay_29_0232E3D0.c index f692f123..6d1aedfb 100644 --- a/src/overlay_29_0232E3D0.c +++ b/src/overlay_29_0232E3D0.c @@ -1,4 +1,9 @@ #include "overlay_29_0232E3D0.h" +#include "dungeon_util_static.h" + +extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id); + +extern void EndSleepClassStatus(struct entity *user, struct entity *target, bool8 a, bool8 b, bool8 c); extern void TryInflictMiracleEyeStatus(struct entity *user, struct entity *target, s32 a); @@ -11,3 +16,18 @@ bool8 DoMoveMiracleEye(struct entity* attacker, struct entity* defender, struct return TRUE; } + +bool8 DoMoveWakeUpSlap(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + bool8 result; + enum status_sleep_id sleep = GetEntInfo(defender)->sleep_class_status.sleep; + + if (sleep == STATUS_SLEEP || sleep == STATUS_NIGHTMARE || sleep == STATUS_NAPPING) { + result = DealDamage(attacker, defender, move, 0x200, item_id) != 0; + EndSleepClassStatus(attacker, defender, FALSE, TRUE, FALSE); + } else { + result = DealDamage(attacker, defender, move, 0x100, item_id) != 0; + } + + return result; +}