finish out unk menus and move 203B364 to save_menu

This commit is contained in:
Seth Barberee 2023-02-12 11:48:16 -08:00
parent b361b8519a
commit 78d49f5ca6
6 changed files with 144 additions and 226 deletions

View File

@ -1,76 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8038440
sub_8038440:
push {r4,r5,lr}
movs r5, 0
ldr r0, _080384B0
ldr r0, [r0]
mov r12, r0
movs r3, 0xD4
lsls r3, 1
add r3, r12
ldrh r1, [r3]
ldr r0, _080384B4
ands r0, r1
ldr r1, _080384B8
ands r0, r1
ldr r4, _080384BC
ands r0, r4
ldr r1, _080384C0
ands r0, r1
ldr r1, _080384C4
ands r0, r1
movs r2, 0x80
lsls r2, 7
ldr r1, _080384C8
ands r0, r1
orrs r0, r2
strh r0, [r3]
movs r2, 0xFC
lsls r2, 2
ldrh r1, [r3, 0x4]
movs r0, 0xFC
lsls r0, 8
ands r0, r1
orrs r0, r2
ands r0, r4
movs r2, 0xF
movs r4, 0xF0
lsls r4, 8
ldr r1, _080384CC
ands r0, r1
orrs r0, r4
strh r0, [r3, 0x4]
movs r0, 0x70
strh r0, [r3, 0x2]
movs r1, 0xE0
lsls r1, 3
ldrh r0, [r3, 0x6]
ands r2, r0
orrs r2, r1
strh r2, [r3, 0x6]
movs r0, 0xD8
lsls r0, 1
add r0, r12
str r5, [r0]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080384B0: .4byte gUnknown_203B360
_080384B4: .4byte 0x0000feff
_080384B8: .4byte 0x0000fdff
_080384BC: .4byte 0x0000f3ff
_080384C0: .4byte 0x0000efff
_080384C4: .4byte 0x0000dfff
_080384C8: .4byte 0x00003fff
_080384CC: .4byte 0x00000fff
thumb_func_end sub_8038440
.align 2,0

View File

@ -1,111 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8038830
sub_8038830:
push {r4,r5,lr}
movs r5, 0
ldr r0, _080388A4
ldr r0, [r0]
mov r12, r0
movs r3, 0xD4
lsls r3, 1
add r3, r12
ldrh r1, [r3]
ldr r0, _080388A8
ands r0, r1
ldr r1, _080388AC
ands r0, r1
ldr r4, _080388B0
ands r0, r4
ldr r1, _080388B4
ands r0, r1
ldr r1, _080388B8
ands r0, r1
movs r2, 0x80
lsls r2, 7
ldr r1, _080388BC
ands r0, r1
orrs r0, r2
strh r0, [r3]
movs r2, 0xFC
lsls r2, 2
ldrh r1, [r3, 0x4]
movs r0, 0xFC
lsls r0, 8
ands r0, r1
orrs r0, r2
ands r0, r4
movs r2, 0xF
movs r4, 0xF0
lsls r4, 8
ldr r1, _080388C0
ands r0, r1
orrs r0, r4
strh r0, [r3, 0x4]
movs r0, 0x70
strh r0, [r3, 0x2]
movs r1, 0xD0
lsls r1, 3
ldrh r0, [r3, 0x6]
ands r2, r0
orrs r2, r1
strh r2, [r3, 0x6]
movs r0, 0xD8
lsls r0, 1
add r0, r12
str r5, [r0]
movs r0, 0
bl ResetSprites
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080388A4: .4byte gUnknown_203B364
_080388A8: .4byte 0x0000feff
_080388AC: .4byte 0x0000fdff
_080388B0: .4byte 0x0000f3ff
_080388B4: .4byte 0x0000efff
_080388B8: .4byte 0x0000dfff
_080388BC: .4byte 0x00003fff
_080388C0: .4byte 0x00000fff
thumb_func_end sub_8038830
thumb_func_start sub_80388C4
sub_80388C4:
push {r4,r5,lr}
ldr r5, _080388FC
ldr r2, [r5]
movs r4, 0xD8
lsls r4, 1
adds r0, r2, r4
ldr r0, [r0]
movs r1, 0x8
ands r0, r1
cmp r0, 0
beq _080388EA
movs r1, 0xD4
lsls r1, 1
adds r0, r2, r1
subs r1, 0xA8
movs r2, 0
movs r3, 0
bl AddSprite
_080388EA:
ldr r1, [r5]
adds r1, r4
ldr r0, [r1]
adds r0, 0x1
str r0, [r1]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080388FC: .4byte gUnknown_203B364
thumb_func_end sub_80388C4
.align 2,0

View File

@ -166,10 +166,7 @@ SECTIONS {
asm/other_menus.o(.text);
src/adventure_log_menu.o(.text);
src/unk_menu_203B360.o(.text);
asm/unk_menu_203B360.o(.text);
src/unk_menu_203B360_1.o(.text);
src/unk_menu_203B364.o(.text);
asm/unk_menu_203B364.o(.text);
src/save_menu.o(.text);
src/rescue_password_menu.o(.text);
asm/rescue_password_menu.o(.text);
src/rescue_password_menu_1.o(.text);

View File

@ -6,6 +6,14 @@
#include "text.h"
#include "save.h"
struct unkSprite
{
u16 unk0;
u16 unk2;
u16 unk4;
u16 unk6;
};
struct unkStruct_203B360
{
// size: 0x1b4
@ -14,10 +22,7 @@ struct unkStruct_203B360
u32 unk8;
u8 fill8[0x148 - 0xC];
struct UnkTextStruct2 unk148[4];
u16 unk1A8;
u16 unk1AA;
u16 unk1AC;
u16 unk1AE;
struct unkSprite unk1A8;
u32 unk1B0; // Sprite count?
};
@ -31,7 +36,7 @@ extern struct MenuItem gUnknown_80E6FBC;
extern struct MenuItem gUnknown_80E7114;
extern struct MenuItem gUnknown_80E701C;
extern u8 gUnknown_80E7178[];
extern void ResetSprites(u32);
extern void sub_8038440();
extern void sub_8035CF4(u32 *, u32, u32);
extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32);
@ -45,6 +50,7 @@ extern void sub_8014114();
extern void sub_80140F8(void);
extern void sub_8035CC0(struct UnkTextStruct2 *, u32);
extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
extern void AddSprite(struct unkSprite *, u32, u32, u32);
void CreateSaveMenu(s32 currMenu)
{
@ -188,3 +194,63 @@ s32 UpdateSaveMenu(void)
}
return menu;
}
void sub_8038830(void)
{
#ifdef NONMATCHING
u32 r0;
u32 r2;
#else
register u32 r0 asm("r0");
register u32 r2 asm("r2");
#endif
u32 r1;
u32 r4;
u32 r5;
struct unkSprite *sprite;
r5 = 0;
sprite = &gUnknown_203B364->unk1A8;
r1 = sprite->unk0;
r0 = 0xfeff;
r0 &= r1;
r0 &= 0xfdff;
r0 &= 0xf3ff;
r0 &= 0xefff;
r0 &= 0xdfff;
r2 = 0x4000;
r0 &= 0x3fff;
r0 |= r2;
sprite->unk0 = r0;
r2 = 0x3F0;
r1 = sprite->unk4;
r0 = 0xFC00;
r0 &= r1;
r0 |= r2;
r0 &= 0xf3ff;
r2 = 0xF;
r4 = 0xF000;
r0 &= 0xfff;
r0 |= r4;
sprite->unk4 = r0;
sprite->unk2 = 0x70;
r1 = 0x680;
r2 &= sprite->unk6;
r2 |= r1;
sprite->unk6 = r2;
gUnknown_203B364->unk1B0 = r5;
ResetSprites(0);
}
void sub_80388C4(void) {
if ((gUnknown_203B364->unk1B0 & 8) != 0) {
AddSprite(&gUnknown_203B364->unk1A8, 0x100, 0, 0);
}
gUnknown_203B364->unk1B0++;
}

View File

@ -4,6 +4,14 @@
#include "memory.h"
#include "text.h"
struct unkSprite
{
u16 unk0;
u16 unk2;
u16 unk4;
u16 unk6;
};
struct unkStruct_203B360
{
// size: 0x1b4
@ -12,8 +20,7 @@ struct unkStruct_203B360
u32 unk8;
u8 fill8[0x148 - 0xC];
struct UnkTextStruct2 unk148[4];
u32 unk1A8;
u32 unk1AC;
struct unkSprite unk1A8;
u32 unk1B0; // sprite count?
};
@ -22,6 +29,7 @@ extern struct UnkTextStruct2 gUnknown_80E6E7C;
extern struct UnkTextStruct2 gUnknown_80E6E94;
extern struct MenuItem gUnknown_80E6EAC[];
extern void AddSprite(struct unkSprite *, u32, u32, u32);
extern void sub_8038440();
extern void sub_8035CF4(u32 *, u32, u32);
extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32);
@ -94,3 +102,65 @@ u32 sub_80383D4(void)
return nextMenu;
}
void sub_8038440(void)
{
#ifdef NONMATCHING
u32 r0;
u32 r2;
#else
register u32 r0 asm("r0");
register u32 r2 asm("r2");
#endif
u32 r1;
u32 r4;
u32 r5;
struct unkSprite *sprite;
r5 = 0;
sprite = &gUnknown_203B360->unk1A8;
r1 = sprite->unk0;
r0 = 0xfeff;
r0 &= r1;
r0 &= 0xfdff;
r0 &= 0xf3ff;
r0 &= 0xefff;
r0 &= 0xdfff;
r2 = 0x4000;
r0 &= 0x3fff;
r0 |= r2;
sprite->unk0 = r0;
r2 = 0x3F0;
r1 = sprite->unk4;
r0 = 0xFC00;
r0 &= r1;
r0 |= r2;
r0 &= 0xf3ff;
r2 = 0xF;
r4 = 0xF000;
r0 &= 0xfff;
r0 |= r4;
sprite->unk4 = r0;
sprite->unk2 = 0x70;
r1 = 0x700;
r2 &= sprite->unk6;
r2 |= r1;
sprite->unk6 = r2;
gUnknown_203B360->unk1B0 = r5;
}
void sub_80384D0(void)
{
if ((gUnknown_203B360->unk1B0 & 8) != 0) {
AddSprite(&gUnknown_203B360->unk1A8, 0x100, 0, 0);
}
gUnknown_203B360->unk1B0++;
}

View File

@ -1,28 +0,0 @@
#include "global.h"
#include "text.h"
struct unkStruct_203B360
{
// size: 0x1b4
u32 currMenu;
u32 unk4;
u32 unk8;
u8 fill8[0x148 - 0xC];
struct UnkTextStruct2 unk148[4];
u16 unk1A8;
u16 unk1AA;
u16 unk1AC;
u16 unk1AE;
u32 unk1B0; // Sprite count?
};
extern struct unkStruct_203B360 *gUnknown_203B360;
extern void AddSprite(u16 *, u32, u32, u32);
void sub_80384D0(void)
{
if ((gUnknown_203B360->unk1B0 & 8) != 0) {
AddSprite(&gUnknown_203B360->unk1A8, 0x100, 0, 0);
}
gUnknown_203B360->unk1B0++;
}