Get rid of the fakematch in the Windows struct

This commit is contained in:
DizzyEggg
2025-02-28 21:56:14 +01:00
parent ee9401e833
commit 05a1d0aec8
4 changed files with 257 additions and 598 deletions

View File

@@ -5,540 +5,6 @@
.text
thumb_func_start sub_806285C
sub_806285C:
push {r4-r6,lr}
mov r6, r10
mov r5, r9
mov r4, r8
push {r4-r6}
sub sp, 0xD4
mov r10, r0
add r0, sp, 0x10
mov r8, r0
add r5, sp, 0x70
adds r0, r5, 0
movs r1, 0
movs r2, 0x60
bl memset
movs r0, 0x6
str r0, [sp, 0x74]
add r1, sp, 0x78
movs r6, 0
movs r0, 0
mov r9, r0
movs r0, 0x2
strh r0, [r1]
strh r0, [r1, 0x2]
add r1, sp, 0x7C
movs r0, 0x1A
strh r0, [r1]
mov r0, sp
adds r0, 0x7E
movs r1, 0xC
strh r1, [r0]
add r0, sp, 0x80
strh r1, [r0]
add r0, sp, 0x84
add r4, sp, 0xD0
str r4, [r0]
add r0, sp, 0x88
movs r1, 0x3
str r1, [r0, 0x4]
add r0, sp, 0xA0
str r1, [r0, 0x4]
add r0, sp, 0xB8
str r1, [r0, 0x4]
mov r0, r8
adds r1, r5, 0
movs r2, 0x60
bl memcpy
add r0, sp, 0x4
bl sub_801317C
movs r0, 0x1
strb r0, [r4]
strb r6, [r4, 0x1]
movs r0, 0x10
strb r0, [r4, 0x2]
strb r6, [r4, 0x3]
mov r0, r8
movs r1, 0x1
bl sub_803ECB4
movs r0, 0
bl sub_80073B8
mov r0, r10
bl sub_808E4FC
adds r1, r0, 0
ldr r0, _0806291C
bl strcpy
ldr r0, _08062920
ldr r2, [r0]
mov r0, r9
str r0, [sp]
movs r0, 0x10
movs r1, 0
movs r3, 0
bl PrintFormattedStringOnWindow
mov r0, r10
bl sub_808E51C
adds r2, r0, 0
mov r0, r9
str r0, [sp]
movs r0, 0x8
movs r1, 0x10
movs r3, 0
bl PrintFormattedStringOnWindow
movs r0, 0
bl sub_80073E0
add r4, sp, 0x4
b _08062938
.align 2, 0
_0806291C: .4byte gFormatBuffer_Items
_08062920: .4byte gUnknown_80FE964
_08062924:
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _08062932
ldrb r0, [r4, 0x2]
cmp r0, 0
beq _08062938
_08062932:
bl sub_8083D30
b _0806295C
_08062938:
add r0, sp, 0x4
movs r1, 0
bl nullsub_34
movs r0, 0x16
bl sub_803E46C
ldr r0, _08062974
ldrh r1, [r0, 0x2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
bne _08062958
ldrb r0, [r4, 0x1]
cmp r0, 0
beq _08062924
_08062958:
bl sub_8083D08
_0806295C:
movs r0, 0x4
movs r1, 0x3E
bl sub_803E708
add sp, 0xD4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08062974: .4byte gRealInputs
thumb_func_end sub_806285C
thumb_func_start DrawFieldGiveItemMenu
DrawFieldGiveItemMenu:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x80
mov r8, r0
adds r6, r1, 0
add r4, sp, 0x1C
ldr r1, _080629AC
adds r0, r4, 0
movs r2, 0x60
bl memcpy
movs r0, 0
str r0, [sp, 0x7C]
mov r1, r8
cmp r1, 0
beq _080629A2
subs r0, 0x1
str r0, [r1]
_080629A2:
cmp r6, 0x1
bne _080629BA
add r1, sp, 0x4C
ldr r0, _080629B0
b _080629C2
.align 2, 0
_080629AC: .4byte gUnknown_8106C30
_080629B0: .4byte gUnknown_8106C00
_080629B4:
bl sub_8083D08
b _08062AF4
_080629BA:
cmp r6, 0x2
bne _080629CA
add r1, sp, 0x4C
ldr r0, _08062A38
_080629C2:
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
_080629CA:
add r0, sp, 0x4
adds r1, r4, 0
movs r2, 0
bl DrawFieldTeamMenu
movs r0, 0x1
bl sub_80073B8
ldr r0, _08062A3C
ldr r2, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0x4
movs r1, 0x3
movs r3, 0x1
bl PrintStringOnWindow
movs r0, 0x1
bl sub_80073E0
ldr r0, _08062A40
mov r9, r0
add r7, sp, 0x8
ldr r1, _08062A44
mov r10, r1
_080629FC:
mov r2, r10
movs r3, 0x18
ldrsh r0, [r2, r3]
lsls r0, 2
adds r0, r7, r0
ldr r5, [r0]
cmp r5, 0
blt _08062A70
ldr r0, _08062A48
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _08062A4C
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityIsValid
lsls r0, 24
cmp r0, 0
beq _08062A5A
cmp r9, r5
beq _08062A5A
cmp r6, 0x1
bne _08062A50
adds r0, r4, 0
bl sub_8062B74
b _08062A5A
.align 2, 0
_08062A38: .4byte gUnknown_8106C18
_08062A3C: .4byte gWhichTextPtr2
_08062A40: .4byte 0xfffffc27
_08062A44: .4byte gUnknown_202EE10
_08062A48: .4byte gDungeon
_08062A4C: .4byte 0x0001357c
_08062A50:
cmp r6, 0x2
bne _08062A5A
adds r0, r4, 0
bl sub_8062CA8
_08062A5A:
mov r9, r5
adds r0, r4, 0
movs r1, 0
bl sub_806A2BC
adds r0, r4, 0x4
movs r1, 0
movs r2, 0x1
movs r3, 0x1
bl sub_804A728
_08062A70:
ldr r5, _08062B40
adds r0, r5, 0
bl AddMenuCursorSprite
movs r0, 0x1B
bl sub_803E46C
ldr r4, _08062B44
ldrh r1, [r4, 0x4]
movs r0, 0x80
ands r0, r1
cmp r0, 0
beq _08062A98
movs r0, 0x1
bl sub_8083CE0
adds r0, r5, 0
movs r1, 0x1
bl sub_80136E0
_08062A98:
ldrh r1, [r4, 0x4]
movs r0, 0x40
ands r0, r1
cmp r0, 0
beq _08062AB0
movs r0, 0x1
bl sub_8083CE0
adds r0, r5, 0
movs r1, 0x1
bl sub_8013744
_08062AB0:
ldrh r1, [r4, 0x2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
bne _08062AC4
adds r0, r5, 0
adds r0, 0x29
ldrb r0, [r0]
cmp r0, 0
beq _08062AD8
_08062AC4:
movs r3, 0x18
ldrsh r0, [r5, r3]
add r1, sp, 0x18
adds r1, r0
ldrb r0, [r1]
cmp r0, 0
beq _08062AD4
b _080629B4
_08062AD4:
bl sub_8083D30
_08062AD8:
ldr r0, _08062B44
ldrh r1, [r0, 0x2]
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _08062AEC
ldr r5, _08062B48
ldrb r0, [r5]
cmp r0, 0
beq _080629FC
_08062AEC:
bl sub_8083D30
movs r0, 0x1
str r0, [sp, 0x7C]
_08062AF4:
ldr r4, _08062B40
adds r0, r4, 0
bl AddMenuCursorSprite
movs r0, 0x1B
bl sub_803E46C
bl sub_804AA60
bl GetLeader
movs r1, 0
bl sub_806A2BC
movs r0, 0
movs r1, 0
bl sub_803EAF0
movs r0, 0x4
movs r1, 0x3E
bl sub_803E708
ldr r1, [sp, 0x7C]
cmp r1, 0
bne _08062B3C
movs r2, 0x18
ldrsh r0, [r4, r2]
lsls r0, 2
adds r0, r7, r0
ldr r5, [r0]
mov r3, r8
cmp r3, 0
beq _08062B38
str r5, [r3]
_08062B38:
cmp r5, 0
bge _08062B4C
_08062B3C:
movs r0, 0
b _08062B5A
.align 2, 0
_08062B40: .4byte gUnknown_202EE10
_08062B44: .4byte gRealInputs
_08062B48: .4byte gUnknown_202EE3A
_08062B4C:
ldr r0, _08062B6C
ldr r0, [r0]
lsls r1, r5, 2
ldr r5, _08062B70
adds r0, r5
adds r0, r1
ldr r0, [r0]
_08062B5A:
add sp, 0x80
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08062B6C: .4byte gDungeon
_08062B70: .4byte 0x0001357c
thumb_func_end DrawFieldGiveItemMenu
thumb_func_start sub_8062B74
sub_8062B74:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x10
mov r10, r0
ldr r0, [r0, 0x70]
mov r9, r0
movs r0, 0x2
bl CallPrepareTextbox_8008C54
movs r0, 0x2
bl sub_80073B8
ldr r0, _08062BD0
mov r1, r10
movs r2, 0
bl SubstitutePlaceholderStringTags
ldr r0, _08062BD4
ldr r2, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0xC
movs r1, 0
movs r3, 0x2
bl PrintFormattedStringOnWindow
movs r1, 0x10
mov r8, r1
mov r0, r9
adds r0, 0xA4
ldrb r0, [r0]
cmp r0, 0x1
beq _08062BDE
mov r0, r9
adds r0, 0x40
ldrb r0, [r0]
cmp r0, 0x4A
beq _08062BCA
cmp r0, 0x47
bne _08062BD8
_08062BCA:
movs r0, 0x1
b _08062BDA
.align 2, 0
_08062BD0: .4byte gFormatBuffer_Monsters
_08062BD4: .4byte gUnknown_80FE978
_08062BD8:
movs r0, 0
_08062BDA:
cmp r0, 0
beq _08062BF4
_08062BDE:
ldr r2, _08062BF0
movs r0, 0
str r0, [sp]
movs r0, 0xC
mov r1, r8
movs r3, 0x2
bl PrintFormattedStringOnWindow
b _08062C8A
.align 2, 0
_08062BF0: .4byte gUnknown_8106C90
_08062BF4:
movs r7, 0
movs r4, 0x8C
lsls r4, 1
add r4, r9
adds r5, r4, 0
_08062BFE:
add r0, sp, 0x4
movs r1, 0
movs r2, 0xC
bl memset
movs r0, 0x6A
str r0, [sp, 0x8]
ldrb r1, [r4]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08062C80
mov r1, r9
ldrb r0, [r1, 0x7]
cmp r0, 0
beq _08062C22
movs r0, 0x2
b _08062C24
_08062C22:
movs r0, 0x4
_08062C24:
str r0, [sp, 0x4]
mov r0, r10
adds r1, r5, 0
movs r2, 0x1
bl CanMonsterUseMove
add r1, sp, 0x4
movs r2, 0
lsls r0, 24
cmp r0, 0
bne _08062C3C
movs r2, 0x1
_08062C3C:
strb r2, [r1, 0x8]
ldr r0, _08062CA0
adds r1, r5, 0
add r2, sp, 0x4
bl BufferMoveName
ldrb r1, [r4]
movs r0, 0x2
ands r0, r1
movs r6, 0xD
cmp r0, 0
bne _08062C6C
movs r6, 0x8
cmp r7, 0
beq _08062C6C
mov r2, r8
subs r2, 0x2
movs r0, 0x7
str r0, [sp]
movs r0, 0x2
movs r1, 0xC
movs r3, 0x78
bl sub_80078A4
_08062C6C:
movs r0, 0
str r0, [sp]
adds r0, r6, 0
mov r1, r8
ldr r2, _08062CA4
movs r3, 0x2
bl PrintFormattedStringOnWindow
movs r0, 0xC
add r8, r0
_08062C80:
adds r4, 0x8
adds r5, 0x8
adds r7, 0x1
cmp r7, 0x3
ble _08062BFE
_08062C8A:
movs r0, 0x2
bl sub_80073E0
add sp, 0x10
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08062CA0: .4byte gFormatBuffer_Items
_08062CA4: .4byte gUnknown_8106C98
thumb_func_end sub_8062B74
thumb_func_start sub_8062CA8
sub_8062CA8:
push {r4-r7,lr}

View File

@@ -51,7 +51,8 @@ typedef struct Window
const WindowHeader *unk14;
} Window;
#define WINDOW_DUMMY (Window) {.type = WINDOW_TYPE_NORMAL, .width = 0}
// All fields are zeroed out except for type which is set to WINDOW_TYPE_NORMAL.
#define WINDOW_DUMMY (Window) {.unk0 = 0, .type = WINDOW_TYPE_NORMAL, .width = 0, .pos = {0, 0}, .height = 0, .unk10 = 0, .unk12 = 0, .unk14 = NULL}
#define WINDOW_TYPE_0 0
#define WINDOW_TYPE_WITHOUT_BORDER 1
@@ -64,10 +65,6 @@ typedef struct Window
typedef struct Windows {
Window id[MAX_WINDOWS];
// Something ugly, so that sub_805FD74 could match weird compiler memcpy/stack initialization
#ifndef NONMATCHING
u8 fakeMatch[0];
#endif // NONMATCHING
} Windows;
#endif // GUARD_STR_TEXT_H

View File

@@ -1678,29 +1678,26 @@ extern const u8 gUnknown_8106B50[];
extern void sub_803ECB4(Windows *a0, u8 a1);
static void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5);
// Inline needed to (fake?)match.
static inline void sub_805FC30_SetUpTxtStruct(Windows *src)
{
memset(src, 0, sizeof(*src));
src->id[0].type = WINDOW_TYPE_NORMAL;
src->id[1].type = WINDOW_TYPE_NORMAL;
src->id[1].pos.x = 0x16;
src->id[1].pos.y = 4;
src->id[1].width = 6;
src->id[1].height = 4;
src->id[1].unk10 = 4;
src->id[2].type = WINDOW_TYPE_NORMAL;
src->id[3].type = WINDOW_TYPE_NORMAL;
}
void sub_805FC30(Windows *a0, s32 a1)
{
s32 i;
Windows sp;
Windows windows = {
.id = {
[0] = WINDOW_DUMMY,
[1] = {
.type = WINDOW_TYPE_NORMAL,
.pos = {22, 4},
.width = 6,
.height = 4,
.unk10 = 4,
},
[2] = WINDOW_DUMMY,
[3] = WINDOW_DUMMY,
}
};
sub_805FC30_SetUpTxtStruct(&sp);
sp.id[0] = a0->id[0];
sp.id[0].unk0 = 0x80;
windows.id[0] = a0->id[0];
windows.id[0].unk0 = 0x80;
gUnknown_202EE10.menuIndex = 0;
gUnknown_202EE10.unk1C = gUnknown_202EE6C;
@@ -1716,11 +1713,11 @@ void sub_805FC30(Windows *a0, s32 a1)
sub_801317C(&gUnknown_202EE10.unk28);
sp.id[1].pos.x = a1;
sp.id[1].width = 28 - a1;
sp.id[1].height = sp.id[1].unk10 = sub_80095E4(gUnknown_202EE10.unk1C, 0);
sub_803ECB4(&sp, 0);
sub_80137B0(&gUnknown_202EE10, sp.id[1].height * 8);
windows.id[1].pos.x = a1;
windows.id[1].width = 28 - a1;
windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gUnknown_202EE10.unk1C, 0);
sub_803ECB4(&windows, 0);
sub_80137B0(&gUnknown_202EE10, windows.id[1].height * 8);
sub_80073B8(1);
for (i = 0; i < gUnknown_202EE6C; i++) {
@@ -1762,7 +1759,7 @@ bool8 sub_8060860(s32 a0);
void sub_8060900(Entity *a0);
s32 sub_8060800(WindowHeader *a0, s32 a1);
void sub_8060CE8(ActionContainer *a0);
extern Entity *DrawFieldGiveItemMenu(u8 *a0, s32 a1);
Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1);
bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1)
{
@@ -2010,9 +2007,9 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1)
break;
}
else if (a0Info->action.action == 0x36) {
u32 var_38;
if (DrawFieldGiveItemMenu((void*)&var_38, 2) != NULL) {
a0Info->action.actionParameters[1].actionUseIndex = var_38;
s32 teamId;
if (DrawFieldGiveItemMenu(&teamId, 2) != NULL) {
a0Info->action.actionParameters[1].actionUseIndex = teamId;
sub_803EAF0(0, 0);
r9 = 0;
break;
@@ -2872,32 +2869,30 @@ void sub_8062D68(void);
void sub_8062230(void);
void sub_8062748(u8 a0);
static inline void SetTxtStruct(Windows *sp)
{
memset(sp, 0, sizeof(*sp));
sp->id[0].type = WINDOW_TYPE_WITH_HEADER;
sp->id[0].pos.x = 2;
sp->id[0].pos.y = 2;
sp->id[0].width = 0x12;
sp->id[0].height = 0xE;
sp->id[0].unk10 = 0x12;
sp->id[0].unk12 = 2;
sp->id[0].unk14 = &gUnknown_202F270;
sp->id[1].type = WINDOW_TYPE_NORMAL;
sp->id[2].type = WINDOW_TYPE_NORMAL;
sp->id[3].type = WINDOW_TYPE_NORMAL;
}
void ShowTacticsMenu(ActionContainer *a0)
{
Windows sp;
Windows windows = {
.id = {
[0] = {
.type = WINDOW_TYPE_WITH_HEADER,
.pos = {2, 2},
.width = 18,
.height = 14,
.unk10 = 18,
.unk12 = 2,
.unk14 = &gUnknown_202F270,
},
[1] = WINDOW_DUMMY,
[2] = WINDOW_DUMMY,
[3] = WINDOW_DUMMY,
}
};
EntityInfo *monInfo;
u8 tacticIds[NUM_TACTICS];
s32 scrollFirstId;
s32 menuIndex;
Entity *teamMon;
SetTxtStruct(&sp);
teamMon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex];
monInfo = GetEntInfo(teamMon);
menuIndex = 0;
@@ -2911,7 +2906,7 @@ void ShowTacticsMenu(ActionContainer *a0)
gUnknown_202F270.f1 = 0;
gUnknown_202F270.f2 = 10;
gUnknown_202F270.f3 = 0;
sub_803ECB4(&sp, 1);
sub_803ECB4(&windows, 1);
PrintMonTactics(scrollFirstId, tacticIds, monInfo, 0);
for (i = 0; i < 8; i++) {
if (tacticIds[i] == TACTIC_UNUSED)
@@ -2992,7 +2987,7 @@ void ShowTacticsMenu(ActionContainer *a0)
if (CheckVariousStatuses2(teamMon, TRUE)) {
sub_8044FF0(0x2F);
}
sub_805FC30(&sp, 0x16);
sub_805FC30(&windows, 0x16);
while (1) {
changed = FALSE;
AddMenuCursorSprite(&gUnknown_202EE10);
@@ -3101,7 +3096,7 @@ EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better fi
extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target);
extern u32 sub_8014140(s32 a0, const void *a1);
extern void sub_806285C(s32 a0);
void sub_806285C(s32 a0);
void sub_806262C(u8 iqSkillId);
extern const u8 gUnknown_8106B8C[];
@@ -3111,12 +3106,11 @@ void sub_8061A38(ActionContainer *a0, bool8 a1)
s32 spArr[6];
struct unkStruct_808FF20 unkMonStruct;
struct UnkInfoTabStruct unkInfoTabStruct;
const s32 winX = 2;
Windows windows = {
.id = {
[0] = {
.type = WINDOW_TYPE_WITH_HEADER,
.pos = {winX, 2},
.pos = {2, 2},
.width = 18,
.height = 14,
.unk10 = 18,
@@ -3128,7 +3122,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1)
[3] = WINDOW_DUMMY,
}
};
register s32 r8;
s32 r8;
Entity *entity;
s32 var_3C;
s32 var_38;
@@ -3664,9 +3658,20 @@ void sub_80625A4(s32 count, struct subStruct_203B240 **strings)
}
#include "code_8097DD0.h"
#include "move_util.h"
#include "move_util.h"
extern const u8 *const gUnknown_80FE95C;
extern const u8 *const gUnknown_80FE960;
extern const u8 *const gUnknown_80FE964;
extern const u8 *const gUnknown_80FE978;
extern const u8 gUnknown_8106C90[];
extern const u8 gUnknown_8106C98[];
extern const u8 *const gWhichTextPtr2;
extern char* sub_808E4FC(s32 a1);
extern char* sub_808E51C(s32 a1);
extern void sub_8062B74(Entity *entity);
extern void sub_8062CA8(Entity *entity);
void sub_806262C(u8 iqSkillId)
{
@@ -3774,5 +3779,197 @@ void sub_8062748(u8 tacticId)
sub_803E708(4, 0x3E);
}
void sub_806285C(s32 a0)
{
const u8 *str;
MenuInputStructSub menuSub;
WindowHeader header;
Windows windows = {
.id = {
[0] = {
.type = WINDOW_TYPE_WITH_HEADER,
.pos = {2, 2},
.width = 26,
.height = 12,
.unk10 = 12,
.unk12 = 0,
.unk14 = &header,
},
[1] = WINDOW_DUMMY,
[2] = WINDOW_DUMMY,
[3] = WINDOW_DUMMY,
}
};
sub_801317C(&menuSub);
header.f0 = 1;
header.f1 = 0;
header.f2 = 16;
header.f3 = 0;
sub_803ECB4(&windows, TRUE);
sub_80073B8(0);
str = sub_808E4FC(a0);
strcpy(gFormatBuffer_Items[0], str);
PrintFormattedStringOnWindow(16, 0, gUnknown_80FE964, 0, '\0');
PrintFormattedStringOnWindow(8, 16, sub_808E51C(a0), 0, '\0');
sub_80073E0(0);
while (1) {
nullsub_34(&menuSub, 0);
sub_803E46C(22);
if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) {
sub_8083D08();
break;
}
if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) {
sub_8083D30();
break;
}
}
sub_803E708(4, 0x3E);
}
extern const Windows gUnknown_8106C30;
extern const Window gUnknown_8106C00;
extern const Window gUnknown_8106C18;
Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1)
{
struct UnkFieldTeamMenuStruct unkStruct;
Windows windows = gUnknown_8106C30;
bool8 bPress = FALSE;
s32 prevId, currId;
if (teamId != NULL) {
*teamId = -1;
}
if (a1 == 1) {
windows.id[2] = gUnknown_8106C00;
}
else if (a1 == 2) {
windows.id[2] = gUnknown_8106C18;
}
DrawFieldTeamMenu(&unkStruct, &windows, FALSE);
sub_80073B8(1);
PrintStringOnWindow(4, 3, gWhichTextPtr2, 1, '\0');
sub_80073E0(1);
prevId = -985; // Magic number or does it actually mean anything?
while (1) {
currId = unkStruct.unk4[gUnknown_202EE10.menuIndex];
if (currId >= 0) {
Entity *entity = gDungeon->teamPokemon[currId];
if (EntityIsValid(entity) && prevId != currId) {
if (a1 == 1) {
sub_8062B74(entity);
}
else if (a1 == 2) {
sub_8062CA8(entity);
}
}
prevId = currId;
sub_806A2BC(entity, 0);
sub_804A728(&entity->pos, 0, 1, 1);
}
AddMenuCursorSprite(&gUnknown_202EE10);
sub_803E46C(0x1B);
if (gRealInputs.repeated & DPAD_DOWN) {
sub_8083CE0(1);
sub_80136E0(&gUnknown_202EE10, 1);
}
if (gRealInputs.repeated & DPAD_UP) {
sub_8083CE0(1);
sub_8013744(&gUnknown_202EE10, 1);
}
if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) {
if (unkStruct.unk14[gUnknown_202EE10.menuIndex] != 0) {
sub_8083D08();
break;
}
sub_8083D30();
}
if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) {
sub_8083D30();
bPress = TRUE;
break;
}
}
AddMenuCursorSprite(&gUnknown_202EE10);
sub_803E46C(0x1B);
sub_804AA60();
sub_806A2BC(GetLeader(), 0);
sub_803EAF0(0, 0);
sub_803E708(4, 0x3E);
if (bPress) {
return NULL;
}
currId = unkStruct.unk4[gUnknown_202EE10.menuIndex];
if (teamId != NULL) {
*teamId = currId;
}
if (currId >= 0) {
return gDungeon->teamPokemon[currId];
}
return NULL;
}
void sub_8062B74(Entity *entity)
{
s32 x, y;
EntityInfo *entInfo = GetEntInfo(entity);
CallPrepareTextbox_8008C54(2);
sub_80073B8(2);
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0);
PrintFormattedStringOnWindow(12, 0, gUnknown_80FE978, 2, '\0');
y = 16;
if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) {
PrintFormattedStringOnWindow(12, y, gUnknown_8106C90, 2, '\0');
}
else {
s32 i;
for (i = 0; i < MAX_MON_MOVES; i++) {
unkStruct_80928C0 movStruct = {0, 106, 0, 0};
Move *move = &entInfo->moves.moves[i];
if (MoveFlagExists(move)) {
if (entInfo->isTeamLeader) {
movStruct.unk0 = 2;
}
else {
movStruct.unk0 = 4;
}
movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE);
BufferMoveName(gFormatBuffer_Items[0], move, &movStruct);
if (MoveFlagLinkChain(move)) {
x = 13;
}
else {
x = 8;
if (i != 0) {
sub_80078A4(2, 12, y - 2, 120, 7);
}
}
PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0');
y += 12;
}
}
}
sub_80073E0(2);
}
//

View File

@@ -54,8 +54,8 @@ static EWRAM_INIT Windows sWorldMapWindows = {
.height = 3,
.unk10 = 3,
},
[2] = { .type = WINDOW_TYPE_NORMAL,},
[3] = { .type = WINDOW_TYPE_NORMAL,},
[2] = WINDOW_DUMMY,
[3] = WINDOW_DUMMY,
}
};
@@ -483,19 +483,18 @@ static void AnimateSprites(bool8 a0)
static void PrintDungeonName(DungeonLocation *dungLocation)
{
const s32 x = 12;
Windows windows = {
.id = {
[0] = {
.type = WINDOW_TYPE_NORMAL,
.pos = {x, 2},
.pos = {12, 2},
.width = 16,
.height = 2,
.unk10 = 2,
},
[1] = {.type = WINDOW_TYPE_NORMAL},
[2] = {.type = WINDOW_TYPE_NORMAL},
[3] = {.type = WINDOW_TYPE_NORMAL},
[1] = WINDOW_DUMMY,
[2] = WINDOW_DUMMY,
[3] = WINDOW_DUMMY,
}
};