more decomp on code_801EE10

This commit is contained in:
Seth Barberee
2024-02-16 13:03:25 -08:00
parent 04efa8e29d
commit b27d18c7ce
6 changed files with 206 additions and 436 deletions

View File

@@ -5,424 +5,6 @@
.text
thumb_func_start sub_801EF38
sub_801EF38:
push {r4-r7,lr}
lsls r0, 24
movs r7, 0
cmp r0, 0
bne _0801EF54
ldr r0, _0801EF50
ldr r0, [r0]
adds r0, 0x1C
bl sub_8013660
b _0801F18C
.align 2, 0
_0801EF50: .4byte gUnknown_203B270
_0801EF54:
ldr r0, _0801EF70
ldr r0, [r0]
adds r0, 0x1C
bl GetKeyPress
subs r0, 0x1
cmp r0, 0xC
bls _0801EF66
b _0801F12E
_0801EF66:
lsls r0, 2
ldr r1, _0801EF74
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0801EF70: .4byte gUnknown_203B270
_0801EF74: .4byte _0801EF78
.align 2, 0
_0801EF78:
.4byte _0801EFB6
.4byte _0801EFAC
.4byte _0801F0E4
.4byte _0801EFC0
.4byte _0801F12E
.4byte _0801F12E
.4byte _0801EFE4
.4byte _0801EFCA
.4byte _0801F12E
.4byte _0801F12E
.4byte _0801F074
.4byte _0801F04C
.4byte _0801F018
_0801EFAC:
movs r0, 0x1
bl PlayMenuSoundEffect
movs r0, 0x2
b _0801F18E
_0801EFB6:
movs r0, 0
bl PlayMenuSoundEffect
movs r0, 0x3
b _0801F18E
_0801EFC0:
movs r0, 0x4
bl PlayMenuSoundEffect
movs r0, 0x4
b _0801F18E
_0801EFCA:
ldr r5, _0801EFE0
ldr r0, [r5]
movs r1, 0x34
ldrsh r6, [r0, r1]
adds r4, r0, 0
adds r4, 0x1C
ldr r0, [r0, 0x10]
adds r1, r6, 0
bl unk_FindMoveEnabledForAIAfter8_v2
b _0801EFF8
.align 2, 0
_0801EFE0: .4byte gUnknown_203B270
_0801EFE4:
ldr r5, _0801F014
ldr r0, [r5]
movs r1, 0x34
ldrsh r6, [r0, r1]
adds r4, r0, 0
adds r4, 0x1C
ldr r0, [r0, 0x10]
adds r1, r6, 0
bl unk_FindMoveEnabledForAIBefore8_v2
_0801EFF8:
adds r1, r0, 0
adds r0, r4, 0
bl sub_8013780
ldr r0, [r5]
movs r2, 0x34
ldrsh r0, [r0, r2]
cmp r6, r0
bne _0801F00C
b _0801F12E
_0801F00C:
movs r0, 0x3
bl PlayMenuSoundEffect
b _0801F12E
.align 2, 0
_0801F014: .4byte gUnknown_203B270
_0801F018:
ldr r0, _0801F048
ldr r2, [r0]
ldrb r1, [r2, 0x5]
adds r5, r0, 0
cmp r1, 0
bne _0801F026
b _0801F12E
_0801F026:
movs r0, 0x34
ldrsh r4, [r2, r0]
ldr r0, [r2, 0x10]
adds r1, r4, 0
bl unk_SetMoveToLastInLinkedSequence8_v2
_0801F032:
ldr r1, [r5]
strh r0, [r1, 0x34]
lsls r0, 16
asrs r0, 16
cmp r4, r0
beq _0801F06C
movs r0, 0x3
bl PlayMenuSoundEffect
b _0801F182
.align 2, 0
_0801F048: .4byte gUnknown_203B270
_0801F04C:
ldr r0, _0801F068
ldr r2, [r0]
ldrb r1, [r2, 0x5]
adds r5, r0, 0
cmp r1, 0
beq _0801F12E
movs r1, 0x34
ldrsh r4, [r2, r1]
ldr r0, [r2, 0x10]
adds r1, r4, 0
bl unk_SetMoveToFirstInLinkedSequence8_v2
b _0801F032
.align 2, 0
_0801F068: .4byte gUnknown_203B270
_0801F06C:
movs r0, 0x2
bl PlayMenuSoundEffect
b _0801F182
_0801F074:
ldr r0, _0801F0C8
ldr r2, [r0]
ldrb r1, [r2, 0x6]
adds r5, r0, 0
cmp r1, 0
beq _0801F12E
ldr r0, _0801F0CC
ldr r0, [r0]
movs r1, 0x98
lsls r1, 2
adds r0, r1
ldr r0, [r0]
cmp r0, 0x95
ble _0801F0D0
movs r1, 0x34
ldrsh r0, [r2, r1]
ldr r1, [r2, 0x10]
bl sub_8093318
lsls r0, 24
cmp r0, 0
beq _0801F0D0
ldr r1, [r5]
movs r2, 0x34
ldrsh r0, [r1, r2]
ldr r1, [r1, 0x10]
bl TryLinkMovesAfter
movs r0, 0x6
bl PlayMenuSoundEffect
movs r7, 0x1
ldr r1, [r5]
ldrb r0, [r1, 0x4]
cmp r0, 0
bne _0801F12E
strb r7, [r1, 0x4]
movs r0, 0xA6
lsls r0, 1
bl PlaySound
b _0801F12E
.align 2, 0
_0801F0C8: .4byte gUnknown_203B270
_0801F0CC: .4byte gTeamInventoryRef
_0801F0D0:
ldr r0, _0801F0E0
ldr r1, [r0]
movs r2, 0x34
ldrsh r0, [r1, r2]
ldr r1, [r1, 0x10]
bl UnlinkMovesAfter
b _0801F0FE
.align 2, 0
_0801F0E0: .4byte gUnknown_203B270
_0801F0E4:
ldr r0, _0801F10C
ldr r1, [r0]
ldrb r0, [r1, 0x7]
cmp r0, 0
beq _0801F12E
ldrb r0, [r1, 0xC]
cmp r0, 0
beq _0801F110
movs r2, 0x34
ldrsh r0, [r1, r2]
ldr r1, [r1, 0x10]
bl ToggleSetMove
_0801F0FE:
lsls r0, 24
cmp r0, 0
bne _0801F120
movs r0, 0x2
bl PlayMenuSoundEffect
b _0801F12E
.align 2, 0
_0801F10C: .4byte gUnknown_203B270
_0801F110:
movs r2, 0x34
ldrsh r0, [r1, r2]
ldr r1, [r1, 0x10]
bl ToggleMoveEnabled
lsls r0, 24
cmp r0, 0
beq _0801F128
_0801F120:
movs r0, 0x6
bl PlayMenuSoundEffect
b _0801F182
_0801F128:
movs r0, 0x2
bl PlayMenuSoundEffect
_0801F12E:
cmp r7, 0
bne _0801F182
movs r3, 0
ldr r5, _0801F160
movs r4, 0x1
_0801F138:
ldr r2, [r5]
lsls r0, r3, 3
ldr r1, [r2, 0x10]
adds r1, r0
ldrb r1, [r1]
adds r0, r4, 0
ands r0, r1
cmp r0, 0
beq _0801F16C
movs r0, 0x2
ands r0, r1
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
beq _0801F164
adds r0, r2, 0
adds r0, 0x14
adds r0, r3
strb r4, [r0]
b _0801F16C
.align 2, 0
_0801F160: .4byte gUnknown_203B270
_0801F164:
adds r0, r2, 0
adds r0, 0x14
adds r0, r3
strb r1, [r0]
_0801F16C:
adds r3, 0x1
cmp r3, 0x7
ble _0801F138
ldr r1, [r5]
adds r0, r1, 0
adds r0, 0x1C
adds r1, 0x14
bl AddMenuCursorSprite_
cmp r7, 0
beq _0801F18C
_0801F182:
movs r0, 0x1
bl sub_801F280
movs r0, 0x1
b _0801F18E
_0801F18C:
movs r0, 0
_0801F18E:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_801EF38
thumb_func_start sub_801F194
sub_801F194:
ldr r0, _0801F1A0
ldr r0, [r0]
movs r1, 0x34
ldrsh r0, [r0, r1]
bx lr
.align 2, 0
_0801F1A0: .4byte gUnknown_203B270
thumb_func_end sub_801F194
thumb_func_start sub_801F1A4
sub_801F1A4:
ldr r0, _0801F1AC
ldr r0, [r0]
ldrb r0, [r0, 0x4]
bx lr
.align 2, 0
_0801F1AC: .4byte gUnknown_203B270
thumb_func_end sub_801F1A4
thumb_func_start sub_801F1B0
sub_801F1B0:
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
lsls r1, 24
lsrs r1, 24
ldr r4, _0801F210
ldr r2, [r4]
ldrb r0, [r2, 0x4]
cmp r0, 0
bne _0801F1C6
strb r1, [r2, 0x4]
_0801F1C6:
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x58
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
bl sub_801F3F8
adds r1, r0, 0
ldr r0, [r4]
strh r1, [r0, 0x3E]
adds r0, 0x1C
bl sub_8013984
ldr r1, [r4]
ldr r0, [r1, 0x10]
movs r2, 0x34
ldrsh r1, [r1, r2]
bl sub_8092F4C
ldr r1, [r4]
strh r0, [r1, 0x34]
movs r0, 0x1
bl sub_801F280
cmp r5, 0
beq _0801F208
ldr r0, [r4]
adds r0, 0x1C
bl AddMenuCursorSprite
_0801F208:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0801F210: .4byte gUnknown_203B270
thumb_func_end sub_801F1B0
thumb_func_start sub_801F214
sub_801F214:
push {r4-r6,lr}
ldr r4, _0801F278
ldr r2, [r4]
cmp r2, 0
beq _0801F272
ldr r0, [r2, 0x50]
lsls r1, r0, 1
adds r1, r0
lsls r1, 3
adds r1, r2, r1
ldr r3, _0801F27C
adds r1, 0x58
adds r0, r3, 0
ldm r0!, {r2,r5,r6}
stm r1!, {r2,r5,r6}
ldm r0!, {r2,r5,r6}
stm r1!, {r2,r5,r6}
ldr r2, [r4]
adds r0, r2, 0
adds r0, 0xB8
ldr r0, [r0]
cmp r0, 0
beq _0801F258
ldr r0, [r2, 0x54]
lsls r1, r0, 1
adds r1, r0
lsls r1, 3
adds r1, r2, r1
adds r1, 0x58
adds r0, r3, 0
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r2,r3,r6}
stm r1!, {r2,r3,r6}
_0801F258:
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x58
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r0, [r4]
bl MemoryFree
movs r0, 0
str r0, [r4]
_0801F272:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0801F278: .4byte gUnknown_203B270
_0801F27C: .4byte gUnknown_80DC240
thumb_func_end sub_801F214
thumb_func_start sub_801F280
sub_801F280:
push {r4-r7,lr}

View File

@@ -10,7 +10,7 @@
typedef struct unkStruct_203B270
{
u32 unk0;
u8 unk4;
bool8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
@@ -18,7 +18,7 @@ typedef struct unkStruct_203B270
/* 0xC */ u8 isTeamLeader;
/* 0x10 */ Move *moves;
u8 fill14[0x1C - 0x14];
MenuInputStruct input;
/* 0x1C */ MenuInputStruct input;
u32 unk50;
u32 unk54;
UnkTextStruct2 unk58[4];
@@ -26,13 +26,13 @@ typedef struct unkStruct_203B270
} unkStruct_203B270;
u8 sub_801EE10(u32, s16 species, Move *moves, u32, const u8 *text, u32);
u32 sub_801EF38(char);
s32 sub_801F194(void);
bool8 sub_801F1A4(void);
void sub_801F1B0(bool8, bool8);
void sub_801F214(void);
// code_801EE10.s
extern u32 sub_801EF38(u32);
extern u32 sub_801F194(void);
extern bool8 sub_801F1A4(void);
extern void sub_801F1B0(bool8, bool8);
extern void sub_801F214(void);
extern void sub_801F280(u32); // Probably bool
#endif // CODE_801EE10_H
#endif // CODE_801EE10_H

View File

@@ -40,7 +40,7 @@ bool8 sub_8013938(MenuInputStruct *param_1);
void sub_8013984(MenuInputStruct * param_1);
void sub_8013A54(MenuInputStruct *param_1);
void sub_8013A7C(MenuInputStruct *param_1);
void AddMenuCursorSprite_(MenuInputStruct *, u32);
void AddMenuCursorSprite_(MenuInputStruct *, u8 *);
void nullsub_34(MenuInputStructSub *);
void sub_8013AA0(unkStructFor8013AA0 *);
@@ -48,4 +48,4 @@ u32 sub_8013BBC(unkStructFor8013AA0 *);
void sub_8013C68(unkStructFor8013AA0 *);
void sub_8013D10(unkStructFor8013AA0 *);
#endif // GUARD_MENU_INPUT_H
#endif // GUARD_MENU_INPUT_H

View File

@@ -1,14 +1,18 @@
#include "global.h"
#include "input.h"
#include "items.h"
#include "text1.h"
#include "text2.h"
#include "memory.h"
#include "moves.h"
#include "code_801EE10.h"
#include "code_80118A4.h"
#include "menu_input.h"
extern unkStruct_203B270 *gUnknown_203B270;
extern UnkTextStruct2 gUnknown_80DC25C;
extern UnkTextStruct2 gUnknown_80DC274;
extern UnkTextStruct2 gUnknown_80DC240;
u32 sub_8006544(u32 index);
s32 sub_801F3F8(void);
@@ -65,3 +69,190 @@ u8 sub_801EE10(u32 param_1, s16 species, Move *moves, u32 param_4, const u8 *tex
sub_801F280(1);
return 1;
}
u32 sub_801EF38(char param_1)
{
bool8 bVar2;
s32 index;
s32 index2;
s32 moveIndex;
s32 newIndex;
struct Move *move;
bVar2 = 0;
if (param_1 == 0) {
sub_8013660(&gUnknown_203B270->input);
return 0;
}
switch(GetKeyPress(&gUnknown_203B270->input)) {
// B_BUTTON
case 2:
PlayMenuSoundEffect(1);
return 2;
// A_BUTTON
case 1:
PlayMenuSoundEffect(0);
return 3;
// START_BUTTON
case 4:
PlayMenuSoundEffect(4);
return 4;
// DPAD_DOWN
case 8:
index = gUnknown_203B270->input.menuIndex;
sub_8013780(&gUnknown_203B270->input, unk_FindMoveEnabledForAIAfter8_v2(gUnknown_203B270->moves, index));
if (index != gUnknown_203B270->input.menuIndex) {
PlayMenuSoundEffect(3);
}
break;
// DPAD_UP
case 7:
index = gUnknown_203B270->input.menuIndex;
sub_8013780(&gUnknown_203B270->input,unk_FindMoveEnabledForAIBefore8_v2(gUnknown_203B270->moves,index));
if (index != gUnknown_203B270->input.menuIndex) {
PlayMenuSoundEffect(3);
}
break;
// R_PAD_DOWN_BUTTONS
case 0xd:
if (gUnknown_203B270->unk5 == 0) break;
moveIndex = gUnknown_203B270->input.menuIndex;
newIndex = gUnknown_203B270->input.menuIndex = unk_SetMoveToLastInLinkedSequence8_v2(gUnknown_203B270->moves, moveIndex);
if (moveIndex != newIndex) {
PlayMenuSoundEffect(3);
}
else {
goto _134;
}
sub_801F280(1);
return 1;
// R_PAD_UP_BUTTONS
case 0xc:
if (gUnknown_203B270->unk5 == 0) break;
moveIndex = gUnknown_203B270->input.menuIndex;
newIndex = gUnknown_203B270->input.menuIndex = unk_SetMoveToFirstInLinkedSequence8_v2(gUnknown_203B270->moves,moveIndex);
if (moveIndex != newIndex) {
PlayMenuSoundEffect(3);
}
else {
_134:
PlayMenuSoundEffect(2);
}
sub_801F280(1);
return 1;
// R_A_BUTTONS
case 0xb:
if (gUnknown_203B270->unk6 != 0) {
if ((gTeamInventoryRef->teamMoney > 0x95) && (sub_8093318(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) != 0))
{
TryLinkMovesAfter(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves);
PlayMenuSoundEffect(6);
bVar2 = 1;
if (gUnknown_203B270->unk4 == 0) {
gUnknown_203B270->unk4 = 1;
PlaySound(0x14c);
}
break;
}
else if (UnlinkMovesAfter(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) != 0) {
PlayMenuSoundEffect(6);
goto _ret;
}
else {
PlayMenuSoundEffect(2);
break;
}
}
break;
// SELECT_BUTTON
case 3:
if (gUnknown_203B270->unk7 != 0) {
if (gUnknown_203B270->isTeamLeader) {
if (ToggleSetMove(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) == 0) {
PlayMenuSoundEffect(2);
break;
}
else {
PlayMenuSoundEffect(6);
goto _ret;
}
}
else
{
if (ToggleMoveEnabled(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) != 0) {
PlayMenuSoundEffect(6);
goto _ret;
}
else {
PlayMenuSoundEffect(2);
break;
}
}
}
break;
}
if (!bVar2) {
for(index2 = 0; index2 < 8; index2++)
{
move = &gUnknown_203B270->moves[index2];
if ((move->moveFlags & 1)) {
if ((move->moveFlags & 2)) {
gUnknown_203B270->fill14[index2] = 1;
}
else {
gUnknown_203B270->fill14[index2] = 0;
}
}
}
AddMenuCursorSprite_(&gUnknown_203B270->input, gUnknown_203B270->fill14);
}
if (bVar2) {
_ret:
sub_801F280(1);
return 1;
}
else
{
return 0;
}
}
s32 sub_801F194 (void)
{
return gUnknown_203B270->input.menuIndex;
}
u8 sub_801F1A4(void)
{
return gUnknown_203B270->unk4;
}
void sub_801F1B0(bool8 param_1, bool8 param_2)
{
if(!gUnknown_203B270->unk4)
gUnknown_203B270->unk4 = param_2;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B270->unk58, TRUE, TRUE);
gUnknown_203B270->input.unk22 = sub_801F3F8();
sub_8013984(&gUnknown_203B270->input);
gUnknown_203B270->input.menuIndex = sub_8092F4C(gUnknown_203B270->moves, gUnknown_203B270->input.menuIndex);
sub_801F280(1);
if(param_1)
AddMenuCursorSprite(&gUnknown_203B270->input);
}
void sub_801F214(void)
{
if(gUnknown_203B270)
{
gUnknown_203B270->unk58[gUnknown_203B270->unk50] = gUnknown_80DC240;
if(gUnknown_203B270->text)
{
gUnknown_203B270->unk58[gUnknown_203B270->unk54] = gUnknown_80DC240;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B270->unk58, TRUE, TRUE);
MemoryFree(gUnknown_203B270);
gUnknown_203B270 = NULL;
}
}

View File

@@ -587,7 +587,7 @@ void AddMenuCursorSprite(MenuInputStruct *param_1)
AddMenuCursorSprite_(param_1, 0);
}
void AddMenuCursorSprite_(MenuInputStruct *a0, u32 a1)
void AddMenuCursorSprite_(MenuInputStruct *a0, u8 *a1)
{
SpriteOAM sp = {};
SpriteOAM* ptr;

View File

@@ -20,8 +20,9 @@
#include "dungeon_visibility.h"
#include "structs/map.h"
#include "moves.h"
#include "move_util.h"
#include "number_util.h"
//#include "pokemon.h" // NOTE: overriding some of the funcs below... when fixed, uncomment this
#include "pokemon.h"
#include "status.h"
#include "status_checks_1.h"
@@ -31,7 +32,6 @@
#include "weather.h"
extern void sub_807F43C(Entity *, Entity *);
extern void MobileStatusTarget(Entity *, Entity *);
extern void sub_807DC68(Entity *, Entity *);
extern void sub_8078A58(Entity *, Entity *, s16, u32);
extern u32 sub_803D73C(u32);
@@ -59,16 +59,12 @@ extern void sub_807DA14(Entity *, Entity *, s32);
extern s16 sub_803D970(u32);
extern u8 sub_806AA0C(s32, u32);
extern void sub_806BB6C(Entity *, s32);
extern void sub_8075C58(Entity *, Entity *, s32, s32);
extern void sub_807E254(Entity *, Entity *, u32);
extern bool8 sub_805727C(Entity * pokemon, Entity * target, s32 chance);
extern u32 sub_8055640(Entity *, Entity *, Move *, u32, u32);
extern void sub_806A6E8(Entity *);
extern void sub_807D3CC(Entity *, Entity *);
extern u8 sub_8069D18(Position *);
extern u8 sub_804AD34(Position *);
extern u8 sub_8057308(Entity *, u32);
// TODO include dungeon_ai.h when SqueezedStatusTarget is figured out
extern void LowerDefenseStageTarget(Entity *, Entity *, s32, s32, u8, bool8);
@@ -80,8 +76,9 @@ extern void LowerAttackStageTarget(Entity *, Entity *, s32, s32, u8, bool8);
extern void PetrifiedStatusTarget(Entity *, Entity *);
extern void WrapTarget(Entity *, Entity *);
// TODO having matching issues when this isn't s32..
// TODO having matching issues when this isn't s32.. (move_effects_target.h)
extern void SqueezedStatusTarget(Entity *, Entity *, s32, bool32);
extern void sub_8075C58(Entity *, Entity *, s32, s32);
extern void sub_806F324(Entity *, s32, u32, u32);
extern bool8 sub_805755C(Entity* pokemon,u16 moveID);