Decompile 12 more callees; clear the head of overlay_11_02308D1C

Twelve contiguous functions from the head of asm/overlay_11_02308D1C.s,
merged into src/overlay_11_02307334.c so the .s splits rather than the
source file:

    ov11_02308D1C  ov11_02308D48  ov11_02308DD8  ov11_02308EB4
    ov11_02308EDC  ov11_02308F14  ov11_02308F4C  ov11_02308FD0
    ov11_02308FEC  ov11_0230901C  ov11_02309040  ov11_02309084

Ten are callees of ov11_02307334; ov11_02308D1C and ov11_02308D48 are the
head neighbours that had to clear first for the run to reach a file
boundary. The remainder of the file becomes asm/overlay_11_023090DC.s,
which keeps the OV11_02309084_OFFSET definition its 24 users need.

include/overlay_11_02307334.h gains struct unk_02309DAC, struct
unk_02308F4C and the twelve prototypes; nine superseded void*-typed
forward declarations in src/overlay_11_02307334.c are removed.

Two file-local types in src/overlay_11_02307334.c change. struct
unk_02324D90 is added, its second member region-split (JP 0xF0 against
0x110 elsewhere). struct unk_02324D8C's u8 field_0x104[0x134] splits into
u8 field_0x104[0x32] plus char field_0x136[0x102] -- same size, same
layout, naming the offset ov11_02308DD8 writes through. Neither type
appears outside this file.

Authored by Claude (Opus 5) under human direction. Confirmed by matching
builds of all three regions: build/pmdsky.us/pmdsky.us.nds: OK,
build/pmdsky.eu/pmdsky.eu.nds: OK, build/pmdsky.jp/pmdsky.jp.nds: OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-09-13 05:34:39 -07:00
parent 7f1656cfc9
commit 49da4ee98e
5 changed files with 205 additions and 350 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 <stdarg.h>
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;
}