menu main func OK

This commit is contained in:
theo3 2020-07-21 23:02:19 -07:00
parent 98f96793a9
commit 2555185721
10 changed files with 236 additions and 399 deletions

View File

@ -1,65 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_080AD380
sub_080AD380: @ 0x080AD380
push {r4, lr}
bl sub_080AD90C
ldr r4, _080AD398 @ =gUnk_03001000
ldrb r0, [r4, #3]
cmp r0, #1
beq _080AD3BC
cmp r0, #1
bgt _080AD39C
cmp r0, #0
beq _080AD3A2
b _080AD3EA
.align 2, 0
_080AD398: .4byte gUnk_03001000
_080AD39C:
cmp r0, #2
beq _080AD3D8
b _080AD3EA
_080AD3A2:
bl sub_08056418
ldr r0, _080AD3B8 @ =gUnk_02032EC0
movs r1, #0xed
lsls r1, r1, #2
bl _DmaZero
movs r0, #0
bl IntroSetTransition
b _080AD3EA
.align 2, 0
_080AD3B8: .4byte gUnk_02032EC0
_080AD3BC:
ldr r1, _080AD3D0 @ =gUnk_081320F0
ldr r0, _080AD3D4 @ =gUnk_02032EC0
ldrb r0, [r0, #2]
lsls r0, r0, #2
adds r0, r0, r1
ldr r0, [r0]
bl _call_via_r0
b _080AD3EA
.align 2, 0
_080AD3D0: .4byte gUnk_081320F0
_080AD3D4: .4byte gUnk_02032EC0
_080AD3D8:
ldr r0, _080AD3F0 @ =gUnk_03000FD0
ldrb r0, [r0]
cmp r0, #0
bne _080AD3EE
movs r0, #1
bl sub_0801DA90
movs r0, #1
strb r0, [r4, #3]
_080AD3EA:
bl sub_080AD918
_080AD3EE:
pop {r4, pc}
.align 2, 0
_080AD3F0: .4byte gUnk_03000FD0

View File

@ -1,68 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_080AD3F4
sub_080AD3F4: @ 0x080AD3F4
push {r4, r5, lr}
bl sub_080AD84C
adds r1, r0, #0
ldr r4, _080AD450 @ =gMenu
ldrb r0, [r4, #5]
cmp r0, #0
bne _080AD458
movs r0, #1
bl sub_0801DA90
movs r5, #1
strb r5, [r4, #5]
movs r0, #0x78
strh r0, [r4, #8]
movs r0, #0x10
bl sub_0801D7EC
movs r0, #1
bl sub_0801D7EC
movs r0, #0x80
lsls r0, r0, #0x12
ldrb r0, [r0, #7]
movs r1, #2
cmp r0, #0
bne _080AD42C
movs r1, #1
_080AD42C:
adds r0, r1, #0
bl LoadPalettesByPaletteGroupIndex
ldr r0, _080AD454 @ =gScreen
ldrh r1, [r0]
movs r3, #0x80
lsls r3, r3, #3
adds r2, r3, #0
orrs r1, r2
strh r1, [r0]
strh r5, [r0, #0x1a]
movs r0, #6
movs r1, #8
bl DoFade
movs r1, #0
b _080AD45E
.align 2, 0
_080AD450: .4byte gMenu
_080AD454: .4byte gScreen
_080AD458:
cmp r1, #1
bne _080AD45E
movs r1, #2
_080AD45E:
cmp r1, #2
bne _080AD46C
ldr r1, _080AD470 @ =gUnk_02000010
movs r0, #1
strb r0, [r1, #5]
bl IntroSetTransition
_080AD46C:
pop {r4, r5, pc}
.align 2, 0
_080AD470: .4byte gUnk_02000010

View File

@ -1,224 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_080AD474
sub_080AD474: @ 0x080AD474
push {r4, r5, r6, lr}
ldr r5, _080AD490 @ =gMenu
ldrb r0, [r5, #0x12]
adds r0, #1
strb r0, [r5, #0x12]
ldrb r0, [r5, #5]
cmp r0, #1
bne _080AD486
b _080AD588
_080AD486:
cmp r0, #1
bgt _080AD494
cmp r0, #0
beq _080AD49C
b _080AD5C8
.align 2, 0
_080AD490: .4byte gMenu
_080AD494:
cmp r0, #2
bne _080AD49A
b _080AD5AA
_080AD49A:
b _080AD5C8
_080AD49C:
movs r4, #1
strb r4, [r5, #5]
strb r0, [r5, #6]
movs r6, #0
movs r0, #0x1e
strh r0, [r5, #8]
movs r0, #7
strb r0, [r5, #4]
bl EraseAllEntities
movs r0, #0
bl sub_0801CFA8
bl sub_080ADD30
ldr r0, _080AD50C @ =gUnk_02024490
strb r4, [r0]
movs r0, #2
bl sub_0801D7EC
movs r4, #0x80
lsls r4, r4, #0x12
ldrb r0, [r4, #7]
movs r1, #4
cmp r0, #0
bne _080AD4D2
movs r1, #3
_080AD4D2:
adds r0, r1, #0
bl LoadPalettesByPaletteGroupIndex
ldrb r0, [r4, #7]
cmp r0, #0
bne _080AD524
ldr r2, _080AD510 @ =gScreen
adds r1, r2, #0
adds r1, #0x66
ldr r0, _080AD514 @ =0x00000844
strh r0, [r1]
adds r1, #2
adds r0, #0xc5
strh r0, [r1]
ldr r0, _080AD518 @ =0x00001C09
strh r0, [r2, #0x14]
adds r0, #0xf9
strh r0, [r2, #0x20]
ldr r0, _080AD51C @ =0x00001E03
strh r0, [r2, #0x2c]
ldrh r0, [r2]
movs r3, #0xf0
lsls r3, r3, #5
adds r1, r3, #0
orrs r0, r1
strh r0, [r2]
ldr r0, _080AD520 @ =0x0000FF60
strh r0, [r2, #0x18]
b _080AD55A
.align 2, 0
_080AD50C: .4byte gUnk_02024490
_080AD510: .4byte gScreen
_080AD514: .4byte 0x00000844
_080AD518: .4byte 0x00001C09
_080AD51C: .4byte 0x00001E03
_080AD520: .4byte 0x0000FF60
_080AD524:
ldr r2, _080AD570 @ =gScreen
adds r1, r2, #0
adds r1, #0x66
ldr r0, _080AD574 @ =0x00000241
strh r0, [r1]
adds r1, #2
ldr r0, _080AD578 @ =0x00000909
strh r0, [r1]
ldr r0, _080AD57C @ =0x00001D02
strh r0, [r2, #8]
ldr r0, _080AD580 @ =0x00001E03
strh r0, [r2, #0x14]
ldr r0, _080AD584 @ =0x00007C89
strh r0, [r2, #0x20]
ldrh r0, [r2]
movs r1, #1
orrs r0, r1
orrs r0, r6
movs r3, #0x98
lsls r3, r3, #5
adds r1, r3, #0
orrs r0, r1
strh r0, [r2]
movs r0, #0x10
str r0, [r5, #0x2c]
bl sub_080AD670
_080AD55A:
bl sub_080A3210
movs r0, #3
bl PlaySFX
movs r0, #6
movs r1, #8
bl DoFade
b _080AD610
.align 2, 0
_080AD570: .4byte gScreen
_080AD574: .4byte 0x00000241
_080AD578: .4byte 0x00000909
_080AD57C: .4byte 0x00001D02
_080AD580: .4byte 0x00001E03
_080AD584: .4byte 0x00007C89
_080AD588:
ldr r0, _080AD5A0 @ =gUnk_03000FD0
ldrb r0, [r0]
cmp r0, #0
bne _080AD632
movs r0, #0x80
lsls r0, r0, #0x12
ldrb r0, [r0, #7]
cmp r0, #0
bne _080AD5A4
bl sub_080AD6AC
b _080AD610
.align 2, 0
_080AD5A0: .4byte gUnk_03000FD0
_080AD5A4:
bl sub_080AD76C
b _080AD610
_080AD5AA:
ldrh r0, [r5, #8]
subs r0, #1
strh r0, [r5, #8]
lsls r0, r0, #0x10
cmp r0, #0
bne _080AD5C2
movs r0, #0xe1
lsls r0, r0, #4
strh r0, [r5, #8]
ldrb r0, [r5, #5]
adds r0, #1
strb r0, [r5, #5]
_080AD5C2:
bl sub_080AD644
b _080AD610
_080AD5C8:
bl sub_080AD84C
adds r4, r0, #0
cmp r4, #0
beq _080AD5EC
cmp r4, #2
bne _080AD5DE
movs r0, #0x6a
bl PlaySFX
b _080AD5E0
_080AD5DE:
movs r4, #0
_080AD5E0:
adds r0, r4, #0
bl IntroSetTransition
ldr r0, _080AD634 @ =0x80080000
bl PlaySFX
_080AD5EC:
bl sub_080AD644
ldr r0, _080AD638 @ =gMenu
ldrh r1, [r0, #8]
movs r0, #0x20
ands r0, r1
cmp r0, #0
bne _080AD610
ldr r1, _080AD63C @ =gUnk_03001010
movs r0, #0xe0
lsls r0, r0, #8
strh r0, [r1, #8]
movs r0, #0x84
strh r0, [r1, #2]
ldr r0, _080AD640 @ =0x000001FF
movs r1, #0
bl sub_080ADA14
_080AD610:
ldr r2, _080AD638 @ =gMenu
movs r0, #0x80
lsls r0, r0, #0x12
ldrb r1, [r0, #7]
ldrb r0, [r2, #4]
cmp r0, r1
beq _080AD626
strb r1, [r2, #4]
movs r0, #3
bl sub_0801D7EC
_080AD626:
bl sub_080AD89C
bl sub_0805E5C0
bl sub_080AD9B0
_080AD632:
pop {r4, r5, r6, pc}
.align 2, 0
_080AD634: .4byte 0x80080000
_080AD638: .4byte gMenu
_080AD63C: .4byte gUnk_03001010
_080AD640: .4byte 0x000001FF

View File

@ -159,4 +159,14 @@ extern void sub_080AF2E4(void);
extern void sub_0805ADD8(u32);
extern void sub_0804F578(void);
extern void sub_08059994(void);
extern u32 sub_080AD84C();
extern void sub_0801D7EC(u32);
extern s32 sub_0801CFA8(u32);
extern void sub_080AD670();
extern void sub_080A3210();
extern void sub_080AD6AC();
extern void sub_080AD76C();
extern void sub_080AD644();
extern void sub_080ADA14(u32, u32);
extern void sub_080AD89C();
#endif

View File

@ -14,6 +14,35 @@ typedef struct { // 0x03001000
u32 spritePriority;
} MainStruct;
typedef struct {
u8 interruptFlag;
u8 field_0x1;
u8 funcIndex;
u8 field_0x3;
u8 transition;
u8 field_0x5;
u8 muteAudio;
u8 field_0x8;
u8 countdown;
} Main;
typedef struct {
u16 nextToLoad;
u8 transitionType;
u8 field_0x3;
u8 state;
u8 field_0x5;
u8 field_0x6;
u8 pauseFadeIn;
u16 isLoading;
u16 fadeInTime;
} UI;
extern Main gUnk_03001000;
extern UI gUnk_02032EC0;
extern s32 sub_08055F70();
extern s32 sub_080A3204(s32);
extern s32 sub_0805616C(s32);
@ -21,10 +50,9 @@ extern s32 sub_0807CE90(s32);
extern s32 sub_080560B8(s32);
extern void sub_08056208(s32);
extern void sub_0804FFE4();
extern s32 sub_0804FF84(s32);
extern s32 sub_08056418(s32);
extern s32 sub_08056418();
extern void sub_080ADD30(s32);
extern s32 _DmaZero(s32, u32, u32);
extern s32 sub_08056010(s32);
extern s32 sub_08016E78(s32);
extern s32 ReadKeyInput();
@ -37,8 +65,6 @@ extern s32 sub_08056458(s32);
extern s32 sub_08050154(s32);
extern s32 sub_080A3480(s32);
extern s32 gUnk_02000010;
extern s32 gRand;
extern MainStruct gUnk_03001000;
extern s32 gUnk_08100CBC;
#endif

View File

@ -24,10 +24,12 @@ typedef struct {
u8 secret;
u8 overlayType;
u8 storyPanelIndex;
u8 field_0x7;
u8 transitionTimer;
u16 transitionTimer;
u8 field_0xa[8];
u8 field_0x12;
u8 field_0x13[22];
u32 field_0x2c;
} Menu;
extern Menu gMenu;
#endif

View File

@ -15,7 +15,8 @@ typedef struct {
u16 bg0xOffset;
u16 bg0yOffset;
u16 bg0Updated;
u32 unk;
u16 unk;
u16 unk2;
} BgSettings;
typedef struct {

View File

@ -883,9 +883,6 @@ SECTIONS {
src/sub_080A554C.o(.text);
asm/code_080A5574.o(.text);
src/introSetTransition.o(.text);
asm/sub_080AD380.o(.text);
asm/sub_080AD3F4.o(.text);
asm/sub_080AD474.o(.text);
src/sub_080AD644.o(.text);
asm/sub_080AD670.o(.text);
asm/sub_080AD6Ac.o(.text);

View File

@ -1,27 +1,197 @@
#include "global.h"
#include "menu.h"
#include "main.h"
#include "entity.h"
#include "functions.h"
#include "screen.h"
extern void (*const gUnk_081320F0[])();
extern u8 gUnk_03000FD0;
typedef struct {
char header[4];
u8 saveFile;
u8 field_0x5;
u8 brightnessPref;
u8 gameLanguage;
} struct_02000000;
typedef struct {
u8 unk;
u8 unk2;
u8 unk3;
u8 functionIndex;
u16 unk6;
u8 filler[5];
u32 ticks;
u16 unk7;
} TransitionStruct;
u8 field_0x5;
} struct_02000010;
extern u32 DoFade(u32, u32);
extern void _DmaZero(u32*, u32, u32);
extern TransitionStruct gUnk_03001000;
extern MenuControls gUnk_02032EC0;
u32 IntroSetTransition(u8 transition, u32 param_2, u32 param_3)
extern struct_02000010 gUnk_02000010;
u32 IntroSetTransition(u32 transition)
{
gUnk_02032EC0.transitionType = transition;
gUnk_03001000.functionIndex = 2;
_DmaZero((u32 *)&gMenu, 48, param_3);
return DoFade(7, 8);
gUnk_03001000.field_0x3 = 2;
_DmaZero((u32 *)&gMenu, 48);
DoFade(7, 8);
}
void sub_080AD380()
{
sub_080AD90C();
switch (gUnk_03001000.field_0x3) {
case 0:
sub_08056418();
_DmaZero(&gUnk_02032EC0, 0x3b4);
IntroSetTransition(0);
break;
case 1:
gUnk_081320F0[gUnk_02032EC0.transitionType]();
break;
case 2:
if (gUnk_03000FD0 != 0) {
return;
}
sub_0801DA90(1);
gUnk_03001000.field_0x3 = 1;
break;
}
sub_080AD918();
}
void sub_080AD3F4(void)
{
u32 iVar1;
u32 uVar2;
iVar1 = sub_080AD84C();
if (gMenu.secret == 0) {
sub_0801DA90(1);
gMenu.secret = 1;
gMenu.transitionTimer = 0x78;
sub_0801D7EC(0x10);
sub_0801D7EC(1);
if (((struct_02000000 *)0x2000000)->gameLanguage == 0) {
uVar2 = 1;
}
else {
uVar2 = 2;
}
LoadPalettesByPaletteGroupIndex(uVar2);
gScreen.lcd.lcdControl2 |= 0x400;
gScreen.bg2.bg0xOffset = 1;
DoFade(6, 8);
iVar1 = 0;
}
else {
if (iVar1 == 1) {
iVar1 = 2;
}
}
if (iVar1 == 2) {
gUnk_02000010.field_0x5 = 1;
IntroSetTransition(1);
}
}
typedef struct {
u16 field_0x0;
u16 field_0x2;
u16 field_0x4[2];
u16 field_0x8;
} struct_03001010;
extern struct_03001010 gUnk_03001010;
extern u8 gUnk_02024490;
extern u8 gUnk_03000FD0;
void sub_080AD474(void)
{
int iVar2;
u32 uVar3;
gMenu.field_0x12++;
switch (gMenu.secret) {
case 0:
gMenu.secret = 1;
gMenu.overlayType = 0;
gMenu.transitionTimer = 0x1e;
gMenu.field_0x2 = 7;
EraseAllEntities();
sub_080ADD30(sub_0801CFA8(0));
gUnk_02024490 = 1;
sub_0801D7EC(2);
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
uVar3 = 3;
}
else {
uVar3 = 4;
}
LoadPalettesByPaletteGroupIndex(uVar3);
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
gScreen.controls.windowOutsideControl = 0x844;
gScreen.controls.mosaicSize = 0x909;
gScreen.bg1.unk = 0x1c09;
gScreen.bg2.unk = 0x1d02;
gScreen.affine.unk2 = 0x1e03;
gScreen.lcd.lcdControl2 |= 0x1e00;
gScreen.bg2.bg0Control = 0xff60;
}
else {
gScreen.controls.windowOutsideControl = 0x241;
gScreen.controls.mosaicSize = 0x909;
gScreen.lcd.lcdControl1 = 0x1d02;
gScreen.bg1.unk = 0x1E03;
gScreen.bg2.unk = 0x7C89;
gScreen.lcd.lcdControl2 |= 1;
gScreen.lcd.lcdControl2 |= 0x1300;
gMenu.field_0x2c = 0x10;
sub_080AD670();
}
sub_080A3210();
PlaySFX(3);
DoFade(6, 8);
break;
case 1:
if (gUnk_03000FD0 != 0) {
return;
}
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
sub_080AD6AC();
}
else {
sub_080AD76C();
}
break;
case 2:
gMenu.transitionTimer--;
if (gMenu.transitionTimer == 0) {
gMenu.transitionTimer = 0xe10;
gMenu.secret++;
}
sub_080AD644();
break;
default:
iVar2 = sub_080AD84C();
if (iVar2 != 0) {
if (iVar2 == 2) {
PlaySFX(0x6a);
}
else {
iVar2 = 0;
}
IntroSetTransition(iVar2);
PlaySFX(0x80080000);
}
sub_080AD644();
if ((gMenu.transitionTimer & 0x20) == 0) {
gUnk_03001010.field_0x8 = 0xe000;
gUnk_03001010.field_0x2 = 0x84;
sub_080ADA14(0x1ff,0);
}
}
if (gMenu.field_0x2 != ((struct_02000000*)0x2000000)->gameLanguage) {
gMenu.field_0x2 = ((struct_02000000*)0x2000000)->gameLanguage;
sub_0801D7EC(3);
}
sub_080AD89C();
sub_0805E5C0();
sub_080AD9B0();
}

View File

@ -6,6 +6,7 @@
#include "flags.h"
#include "link.h"
#include "screen.h"
#include "main.h"
typedef struct {
u8 field_0x0[8];
@ -37,21 +38,8 @@ typedef struct {
Stats stats;
} struct_02002A40;
typedef struct {
u8 interruptFlag;
u8 field_0x1;
u8 funcIndex;
u8 field_0x3;
u8 transition;
u8 field_0x5;
u8 muteAudio;
u8 field_0x8;
u8 countdown;
} Main;
extern struct_030010A0 gUnk_030010A0;
extern struct_02002A40 gUnk_02002A40;
extern Main gUnk_03001000;
void sub_0804B3C4(u32 arg0) {
sub_0804B29C(arg0);