diff --git a/asm/include/overlay_11_02308D1C.inc b/asm/include/overlay_11_023090DC.inc similarity index 96% rename from asm/include/overlay_11_02308D1C.inc rename to asm/include/overlay_11_023090DC.inc index 5c42fc68..1eafb560 100644 --- a/asm/include/overlay_11_02308D1C.inc +++ b/asm/include/overlay_11_023090DC.inc @@ -4,17 +4,13 @@ .public CheckTeamMemberIdx .public CloseAdvancedTextBox .public CloseCollectionMenu -.public CloseDialogueBox -.public CloseInventoryMenu .public CloseParentMenu .public CloseScrollBox .public CloseSynthBin -.public CloseTextBox2 .public CountNbItemsOfTypeInBag .public CountNbItemsOfTypeInStorage .public CreateAdvancedTextBox .public CreateCollectionMenu -.public CreateDialogueBox .public CreateMonsterSummaryFromTeamMember .public CreateParentMenu .public CreateParentMenuFromStringIds @@ -85,7 +81,6 @@ .public ov11_0230D220 .public ov11_0230D92C .public ov11_02310BDC -.public ov11_02322DB8 .public ov11_02322DC8 .public ov11_02322DD0 .public ov11_02322DE0 @@ -110,7 +105,6 @@ .public ov11_02322FD4 .public ov11_02322FE4 .public ov11_02322FF4 -.public ov11_02324D8C .public ov11_02324D90 .public ov11_02324D94 .public ov11_02324D98 @@ -186,4 +180,3 @@ .public sub_020564B0 .public sub_020586F0 .public sub_02058794 -.public vsprintf diff --git a/asm/overlay_11_02308D1C.s b/asm/overlay_11_023090DC.s similarity index 93% rename from asm/overlay_11_02308D1C.s rename to asm/overlay_11_023090DC.s index 5c13f0b1..3ce49cb5 100644 --- a/asm/overlay_11_02308D1C.s +++ b/asm/overlay_11_023090DC.s @@ -1,329 +1,13 @@ .include "asm/macros.inc" - .include "overlay_11_02308D1C.inc" + .include "overlay_11_023090DC.inc" - .text - - arm_func_start ov11_02308D1C -ov11_02308D1C: ; 0x02308D1C - stmdb sp!, {r3, lr} - ldr r0, _02308D44 ; =ov11_02324D8C - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _02308D44 ; =ov11_02324D8C - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02308D44: .word ov11_02324D8C - arm_func_end ov11_02308D1C - - arm_func_start ov11_02308D48 -ov11_02308D48: ; 0x02308D48 - stmdb sp!, {r3, lr} - ldr r0, _02308DD4 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #6] - cmp r0, r1 - beq _02308D78 - bl CloseParentMenu - ldr r0, _02308DD4 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #6] -_02308D78: - ldr r0, _02308DD4 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #5] - cmp r0, r1 - beq _02308DA4 - bl CloseTextBox2 - ldr r0, _02308DD4 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #5] -_02308DA4: - ldr r0, _02308DD4 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #4] - cmp r0, r1 - ldmeqia sp!, {r3, pc} - bl CloseInventoryMenu - ldr r0, _02308DD4 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #4] - ldmia sp!, {r3, pc} - .align 2, 0 -_02308DD4: .word ov11_02324D8C - arm_func_end ov11_02308D48 - - arm_func_start ov11_02308DD8 -ov11_02308DD8: ; 0x02308DD8 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0xc - ldr r1, [r0] - cmp r1, #0 - bne _02308E20 - ldrsh r0, [r0, #4] - bl GetTeamMember - mov r4, r0 - bl sub_02055894 - bl sub_020564B0 - ldr r1, _02308EAC ; =ov11_02324D8C - mov r2, r0 - ldr r0, [r1] - mov r1, r4 - add r0, r0, #0x36 - add r0, r0, #0x100 - bl sub_02056094 - b _02308E94 -_02308E20: - cmp r1, #1 - bne _02308E94 - ldrsh r0, [r0, #4] - bl GetActiveTeamMember - mov r4, r0 - add r0, sp, #0 - add r1, r4, #0x5e - mov r2, #0xa - bl StrncpySimpleNoPadSafe - ldrb r0, [r4] - mov r2, #0x44 - ldr r1, _02308EB0 ; =ov11_02322DB8 - tst r0, #2 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - ldrb r0, [r4, #1] - movne r2, #0x46 - add r3, sp, #0 - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - ldr r0, _02308EAC ; =ov11_02324D8C - movne r2, #0x59 - ldr r0, [r0] - add r0, r0, #0x36 - add r0, r0, #0x100 - bl ov11_02308EB4 -_02308E94: - ldr r0, _02308EAC ; =ov11_02324D8C - ldr r0, [r0] - add r0, r0, #0x36 - add r0, r0, #0x100 - add sp, sp, #0xc - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_02308EAC: .word ov11_02324D8C -_02308EB0: .word ov11_02322DB8 - arm_func_end ov11_02308DD8 - - arm_func_start ov11_02308EB4 -ov11_02308EB4: ; 0x02308EB4 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r2, sp, #0xc - bic r2, r2, #3 - ldr r1, [sp, #0xc] - add r2, r2, #4 - bl vsprintf - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end ov11_02308EB4 - - arm_func_start ov11_02308EDC -ov11_02308EDC: ; 0x02308EDC - stmdb sp!, {r3, lr} - ldr r1, _02308F10 ; =ov11_02324D8C - mvn r0, #1 - ldr r1, [r1] - ldrsb r1, [r1, #8] - cmp r1, r0 - ldmneia sp!, {r3, pc} - mov r0, #0 - bl CreateDialogueBox - ldr r1, _02308F10 ; =ov11_02324D8C - ldr r1, [r1] - strb r0, [r1, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02308F10: .word ov11_02324D8C - arm_func_end ov11_02308EDC - - arm_func_start ov11_02308F14 -ov11_02308F14: ; 0x02308F14 - stmdb sp!, {r3, lr} - ldr r0, _02308F48 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - ldrsb r0, [r0, #8] - cmp r0, r1 - ldmeqia sp!, {r3, pc} - bl CloseDialogueBox - ldr r0, _02308F48 ; =ov11_02324D8C - mvn r1, #1 - ldr r0, [r0] - strb r1, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02308F48: .word ov11_02324D8C - arm_func_end ov11_02308F14 - - arm_func_start ov11_02308F4C -ov11_02308F4C: ; 0x02308F4C - stmdb sp!, {r4, lr} - ldr r2, [r1] - ldr r1, [r1, #4] - mov r4, r0 - str r2, [r4] - str r1, [r4, #4] - ldr r0, [r4] - cmp r0, #0 - bne _02308F9C - ldrsh r0, [r4, #4] - bl GetTeamMember - ldrsh r3, [r0, #4] - add r2, r0, #0x14 - add r1, r0, #8 - strh r3, [r4, #8] - ldrb r0, [r0, #2] - strb r0, [r4, #0xa] - str r2, [r4, #0xc] - str r1, [r4, #0x10] - ldmia sp!, {r4, pc} -_02308F9C: - cmp r0, #1 - ldmneia sp!, {r4, pc} - ldrsh r0, [r4, #4] - bl GetActiveTeamMember - ldrsh r3, [r0, #0xc] - add r2, r0, #0x4c - add r1, r0, #6 - strh r3, [r4, #8] - ldrb r0, [r0, #3] - strb r0, [r4, #0xa] - str r2, [r4, #0xc] - str r1, [r4, #0x10] - ldmia sp!, {r4, pc} - arm_func_end ov11_02308F4C - - arm_func_start ov11_02308FD0 -ov11_02308FD0: ; 0x02308FD0 - stmdb sp!, {r3, lr} - ldr r1, [r0] - cmp r1, #1 - ldmneia sp!, {r3, pc} - ldrsh r0, [r0, #4] - bl sub_02058794 - ldmia sp!, {r3, pc} - arm_func_end ov11_02308FD0 - - arm_func_start ov11_02308FEC -ov11_02308FEC: ; 0x02308FEC - stmdb sp!, {r3, lr} - ldr r1, [r0] - cmp r1, #0 - bne _02309008 - ldrsh r0, [r0, #4] - bl sub_0203FA64 - ldmia sp!, {r3, pc} -_02309008: - cmp r1, #1 - ldmneia sp!, {r3, pc} - ldrsh r0, [r0, #4] - bl sub_0203FBD4 - ldmia sp!, {r3, pc} - arm_func_end ov11_02308FEC - - arm_func_start ov11_0230901C -ov11_0230901C: ; 0x0230901C - ldr r1, [r0] - cmp r1, #0 - ldreqsh r0, [r0, #4] - orreq r0, r0, #0x20000 - bxeq lr - cmp r1, #1 - ldreqsh r0, [r0, #4] - orreq r0, r0, #0x30000 - bx lr - arm_func_end ov11_0230901C - - arm_func_start ov11_02309040 -ov11_02309040: ; 0x02309040 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _0230907C ; =0x00000794 - mov r1, #8 - bl MemAlloc - ldr r1, _02309080 ; =ov11_02324D90 - cmp r0, #0 - str r0, [r1] - moveq r0, #0 -#ifdef JAPAN - strne r4, [r0, #0xf4] -#else - strne r4, [r0, #0x114] -#endif - ldrne r0, [r1] - movne r1, #0 - strne r1, [r0] - movne r0, #1 - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -_0230907C: .word 0x00000774 -#else -_0230907C: .word 0x00000794 -#endif -_02309080: .word ov11_02324D90 - arm_func_end ov11_02309040 - - arm_func_start ov11_02309084 -ov11_02309084: ; 0x02309084 #ifdef JAPAN #define OV11_02309084_OFFSET -0x20 #else #define OV11_02309084_OFFSET 0 #endif - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, _023090D4 ; =0x00000794 - mov r1, #8 - bl MemAlloc - ldr r1, _023090D8 ; =ov11_02324D90 - cmp r0, #0 - str r0, [r1] - moveq r0, #0 - ldmeqia sp!, {r4, pc} - mov r2, #2 - str r2, [r0, #0x114 + OV11_02309084_OFFSET] - ldr r0, [r1] - mov r2, #0 - str r2, [r0] - ldr r1, [r1] - mov r0, #1 -#ifdef JAPAN - strh r4, [r1, #0xf8] -#else - add r1, r1, #0x100 - strh r4, [r1, #0x18] -#endif - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -_023090D4: .word 0x00000774 -#else -_023090D4: .word 0x00000794 -#endif -_023090D8: .word ov11_02324D90 - arm_func_end ov11_02309084 + + .text arm_func_start ov11_023090DC ov11_023090DC: ; 0x023090DC diff --git a/include/overlay_11_02307334.h b/include/overlay_11_02307334.h index f8280731..f1187aa4 100644 --- a/include/overlay_11_02307334.h +++ b/include/overlay_11_02307334.h @@ -1,6 +1,36 @@ #ifndef PMDSKY_OVERLAY_11_02307334_H #define PMDSKY_OVERLAY_11_02307334_H +#include "common.h" + +struct unk_02309DAC { + s32 field_0x0; + s16 field_0x4; +}; + +struct unk_02308F4C { + s32 field_0x0; + s16 field_0x4; + u8 field_0x6[2]; + s16 field_0x8; + u8 field_0xa; + u8 field_0xb; + u32 *field_0xc; + s16 *field_0x10; +}; + s32 ov11_02307334(void); +void ov11_02308D1C(void); +void ov11_02308D48(void); +char* ov11_02308DD8(struct unk_02308F4C *a); +void ov11_02308EB4(char *str, const char *format, ...); +void ov11_02308EDC(void); +void ov11_02308F14(void); +void ov11_02308F4C(struct unk_02308F4C *dst, const struct unk_02309DAC *src); +void ov11_02308FD0(struct unk_02308F4C *a); +void ov11_02308FEC(struct unk_02308F4C *a); +s32 ov11_0230901C(struct unk_02308F4C *a); +int ov11_02309040(s32 param_1); +int ov11_02309084(s16 param_1); #endif diff --git a/main.lsf b/main.lsf index 5d341b07..0106c954 100644 --- a/main.lsf +++ b/main.lsf @@ -661,7 +661,7 @@ Overlay OVY_11 Object src/overlay_11_022FE58C.o Object asm/overlay_11_022FE5F8.o Object src/overlay_11_02307334.o - Object asm/overlay_11_02308D1C.o + Object asm/overlay_11_023090DC.o Object src/overlay_11_0230CB88.o Object src/overlay_11_0230CD48.o Object asm/overlay_11_0230CE30.o diff --git a/src/overlay_11_02307334.c b/src/overlay_11_02307334.c index 6dcc3aa9..2e9a1b4d 100644 --- a/src/overlay_11_02307334.c +++ b/src/overlay_11_02307334.c @@ -20,22 +20,34 @@ #include "overlay_31_02382820.h" #include "main_020114F8.h" #include "main_0203088C.h" +#include "main_02001188.h" +#include "common.h" +#include +extern void sub_02056094(char *dst, struct ground_monster *ground_monster, + bool8 is_leader); -struct unk_02309DAC { +struct unk_02324D90 { s32 field_0x0; - s16 field_0x4; +#ifdef JAPAN + u8 field_0x4[0xF0]; +#else + u8 field_0x4[0x110]; +#endif + s32 field_0x114; + s16 field_0x118; + u8 field_0x11a[0x67A]; }; -struct unk_02308F4C { - s32 field_0x0; - s16 field_0x4; - u8 field_0x6[2]; - s16 field_0x8; - u8 field_0xa; - u8 field_0xb; - u32 *field_0xc; - s16 *field_0x10; -}; +extern struct unk_02324D90 *ov11_02324D90; +extern char ov11_02322DB8[]; +extern void StrncpySimpleNoPadSafe(u8 *dest, const u8 *src, u32 n); +extern s32 sub_02055894(struct ground_monster *member); +extern bool8 sub_020564B0(int idx); +extern s32 vsprintf(u8 *str, const u8 *format, va_list ap); +extern s8 CreateDialogueBox(s8); +extern void CloseDialogueBox(s8); +extern void sub_0203FA64(s16 idx); +extern void sub_0203FBD4(s16 idx); struct unk_02324D8C { s32 field_0x0; s8 field_0x4; @@ -51,7 +63,8 @@ struct unk_02324D8C { s32 field_0x10; s32 field_0x14; s32 field_0x18; - struct struct_2 field_0x1c; struct preprocessor_args field_0xb4; u8 field_0x104[0x134]; + struct struct_2 field_0x1c; struct preprocessor_args field_0xb4; u8 field_0x104[0x32]; + char field_0x136[0x102]; struct unk_02308F4C field_0x238; s16 field_0x24c; s16 field_0x24e; s16 field_0x250; @@ -108,16 +121,6 @@ extern u8 PopInventoryMenuField0x1A3(s32 window_id); extern void SetItemAcquired(struct item *); extern void SortItemsInBag(void); extern void *memcpy(void *, const void *, u32); -extern void ov11_02308D48(void); -extern void *ov11_02308DD8(void *); -extern void ov11_02308EDC(void); -extern void ov11_02308F14(void); -extern void ov11_02308F4C(void *dst, const void *src); -extern void ov11_02308FD0(void *); -extern void ov11_02308FEC(void *); -extern s32 ov11_0230901C(void *); -extern int ov11_02309040(s32); -extern int ov11_02309084(s16); extern int ov11_023090DC(void); extern void ov11_02309DAC(void *out); extern void ov11_02309DF8(void); @@ -894,3 +897,148 @@ s32 ov11_02307334(void) return 0; } + +void ov11_02308D1C(void) +{ + if (ov11_02324D8C != 0) { + MemFree(ov11_02324D8C); + ov11_02324D8C = 0; + } +} + +void ov11_02308D48(void) +{ + if (ov11_02324D8C->field_0x6 != -2) { + CloseParentMenu(ov11_02324D8C->field_0x6); + ov11_02324D8C->field_0x6 = -2; + } + if (ov11_02324D8C->field_0x5 != -2) { + CloseTextBox2(ov11_02324D8C->field_0x5); + ov11_02324D8C->field_0x5 = -2; + } + if (ov11_02324D8C->field_0x4 != -2) { + CloseInventoryMenu(ov11_02324D8C->field_0x4); + ov11_02324D8C->field_0x4 = -2; + } +} + +char* ov11_02308DD8(struct unk_02308F4C *a) +{ + u8 name[12]; + struct ground_monster *ground_monster; + struct team_member *team_member; + u32 color; + bool8 f; + bool8 leader; + + if (a->field_0x0 == 0) { + ground_monster = GetTeamMember(a->field_0x4); + sub_02056094(ov11_02324D8C->field_0x136, ground_monster, + sub_020564B0(sub_02055894(ground_monster))); + } else if (a->field_0x0 == 1) { + team_member = GetActiveTeamMember(a->field_0x4); + StrncpySimpleNoPadSafe(name, (const u8 *)team_member->name, 10); + color = 0x44; + f = (*(u8 *)team_member & 2) != 0; + if (f) { + color = 0x46; + } + leader = team_member->is_leader != 0; + if (leader) { + color = 0x59; + } + ov11_02308EB4(ov11_02324D8C->field_0x136, ov11_02322DB8, color, name); + } + return ov11_02324D8C->field_0x136; +} + +void ov11_02308EB4(char *str, const char *format, ...) +{ + va_list args; + va_start(args, format); + vsprintf(str, format, args); +} + +void ov11_02308EDC(void) +{ + if (ov11_02324D8C->field_0x8 == -2) { + ov11_02324D8C->field_0x8 = CreateDialogueBox(0); + } +} + +void ov11_02308F14(void) +{ + if (ov11_02324D8C->field_0x8 != -2) { + CloseDialogueBox(ov11_02324D8C->field_0x8); + ov11_02324D8C->field_0x8 = -2; + } +} + +void ov11_02308F4C(struct unk_02308F4C *dst, const struct unk_02309DAC *src) +{ + *(struct unk_02309DAC *)dst = *src; + if (dst->field_0x0 == 0) { + struct ground_monster *mon = GetTeamMember(dst->field_0x4); + + dst->field_0x8 = mon->id; + dst->field_0xa = mon->joined_at; + dst->field_0xc = mon->iq_skill_flags; + dst->field_0x10 = (s16 *)&mon->iq; + } else if (dst->field_0x0 == 1) { + struct team_member *mem = GetActiveTeamMember(dst->field_0x4); + + dst->field_0x8 = *(s16 *)&mem->id; + dst->field_0xa = mem->joined_at; + dst->field_0xc = mem->iq_skill_flags; + dst->field_0x10 = (s16 *)&mem->iq; + } +} + +void ov11_02308FD0(struct unk_02308F4C *a) +{ + if (a->field_0x0 == 1) { + sub_02058794(a->field_0x4); + } +} + +void ov11_02308FEC(struct unk_02308F4C *a) +{ + if (a->field_0x0 == 0) { + sub_0203FA64(a->field_0x4); + } else if (a->field_0x0 == 1) { + sub_0203FBD4(a->field_0x4); + } +} + +s32 ov11_0230901C(struct unk_02308F4C *a) +{ + if (a->field_0x0 == 0) { + return a->field_0x4 | 0x20000; + } + if (a->field_0x0 == 1) { + return a->field_0x4 | 0x30000; + } +} + +int ov11_02309040(s32 param_1) +{ + ov11_02324D90 = MemAlloc(sizeof(struct unk_02324D90), 8); + if (ov11_02324D90 == 0) { + return 0; + } + ov11_02324D90->field_0x114 = param_1; + ov11_02324D90->field_0x0 = 0; + return 1; +} + +int ov11_02309084(s16 param_1) +{ + ov11_02324D90 = MemAlloc(sizeof(struct unk_02324D90), 8); + if (ov11_02324D90 == NULL) { + return 0; + } + ov11_02324D90->field_0x114 = 2; + ov11_02324D90->field_0x0 = 0; + ov11_02324D90->field_0x118 = param_1; + return 1; +}