mirror of https://github.com/zeldaret/tmc.git
Merge pull request #560 from hatal175/sub_080A2FD0
This commit is contained in:
commit
373ab92156
|
@ -1,111 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
ldr r0, _080A2FF4 @ =gFadeControl
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _080A30A8
|
||||
movs r5, #0
|
||||
ldr r0, _080A2FF8 @ =gInput
|
||||
ldrh r0, [r0]
|
||||
cmp r0, #0x10
|
||||
beq _080A3020
|
||||
cmp r0, #0x10
|
||||
bgt _080A2FFC
|
||||
cmp r0, #1
|
||||
beq _080A303C
|
||||
cmp r0, #8
|
||||
beq _080A303C
|
||||
b _080A3052
|
||||
.align 2, 0
|
||||
_080A2FF4: .4byte gFadeControl
|
||||
_080A2FF8: .4byte gInput
|
||||
_080A2FFC:
|
||||
cmp r0, #0x40
|
||||
beq _080A3052
|
||||
cmp r0, #0x40
|
||||
bgt _080A3052
|
||||
cmp r0, #0x20
|
||||
bne _080A3052
|
||||
ldr r1, _080A301C @ =gMenu
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
bne _080A3052
|
||||
movs r5, #1
|
||||
rsbs r5, r5, #0
|
||||
adds r1, #0x20
|
||||
movs r0, #0xfc
|
||||
b _080A302E
|
||||
.align 2, 0
|
||||
_080A301C: .4byte gMenu
|
||||
_080A3020:
|
||||
ldr r1, _080A3038 @ =gMenu
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #0
|
||||
bne _080A3052
|
||||
movs r5, #1
|
||||
adds r1, #0x20
|
||||
movs r0, #4
|
||||
_080A302E:
|
||||
strb r0, [r1]
|
||||
movs r0, #0x69
|
||||
bl SoundReq
|
||||
b _080A3052
|
||||
.align 2, 0
|
||||
_080A3038: .4byte gMenu
|
||||
_080A303C:
|
||||
ldr r0, _080A3090 @ =gMenu
|
||||
ldrb r2, [r0]
|
||||
cmp r2, #0
|
||||
bne _080A3052
|
||||
ldr r1, _080A3094 @ =gMain
|
||||
movs r0, #2
|
||||
strb r0, [r1, #3]
|
||||
strb r2, [r1, #4]
|
||||
movs r0, #0x6a
|
||||
bl SoundReq
|
||||
_080A3052:
|
||||
movs r4, #0x80
|
||||
lsls r4, r4, #0x12
|
||||
ldrb r0, [r4, #4]
|
||||
adds r1, r5, #3
|
||||
adds r0, r0, r1
|
||||
movs r1, #3
|
||||
bl __modsi3
|
||||
strb r0, [r4, #4]
|
||||
ldr r5, _080A3090 @ =gMenu
|
||||
movs r0, #0x10
|
||||
ldrsh r2, [r5, r0]
|
||||
ldrb r1, [r4, #4]
|
||||
movs r0, #0x68
|
||||
muls r0, r1, r0
|
||||
cmp r0, r2
|
||||
beq _080A3098
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x20
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
adds r0, r2, r0
|
||||
movs r1, #0x9c
|
||||
lsls r1, r1, #1
|
||||
adds r0, r0, r1
|
||||
bl __modsi3
|
||||
strh r0, [r5, #0x10]
|
||||
movs r0, #1
|
||||
b _080A309A
|
||||
.align 2, 0
|
||||
_080A3090: .4byte gMenu
|
||||
_080A3094: .4byte gMain
|
||||
_080A3098:
|
||||
movs r0, #0
|
||||
_080A309A:
|
||||
strb r0, [r5]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x12
|
||||
ldrb r0, [r0, #4]
|
||||
movs r1, #0
|
||||
bl sub_080A3198
|
||||
_080A30A8:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
|
@ -15,7 +15,7 @@ typedef struct {
|
|||
/*0x10*/ s16 unk_0x10;
|
||||
/*0x12*/ u16 unk_0x12;
|
||||
/*0x14*/ u8 fillerB[0xC];
|
||||
/*0x20*/ u8 unk_0x20;
|
||||
/*0x20*/ s8 unk_0x20;
|
||||
/*0x21*/ u8 fillerC[0xF];
|
||||
} ChooseFileState;
|
||||
static_assert(sizeof(ChooseFileState) == 0x30);
|
||||
|
|
63
src/demo.c
63
src/demo.c
|
@ -106,70 +106,53 @@ void sub_080A2F8C(void) {
|
|||
}
|
||||
}
|
||||
|
||||
// The condition on the left dpad is very convuluted for some reason (instead oj just an equality check).
|
||||
// This causes the entire function heirarchy to change on a whim and I couldn't quite figure out
|
||||
// the correct conditions/code to make it like the original function.
|
||||
NONMATCH("asm/non_matching/demoScreen/sub_080A2FD0.inc", void sub_080A2FD0(void)) {
|
||||
s32 tmp;
|
||||
u32 tmp2;
|
||||
void sub_080A2FD0(void) {
|
||||
u32 val;
|
||||
s32 tmp3;
|
||||
u32 unk_0x0;
|
||||
u32 tmp4;
|
||||
s32 tmp5;
|
||||
u32 keys;
|
||||
|
||||
if (gFadeControl.active == 0) {
|
||||
val = 0;
|
||||
keys = gInput.heldKeys;
|
||||
switch (keys) {
|
||||
case DPAD_RIGHT: {
|
||||
switch (gInput.heldKeys) {
|
||||
case DPAD_LEFT:
|
||||
if (gChooseFileState.unk_0x0 == 0) {
|
||||
val = -1;
|
||||
gChooseFileState.unk_0x20 = -4;
|
||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||
}
|
||||
break;
|
||||
case DPAD_RIGHT:
|
||||
if (gChooseFileState.unk_0x0 == 0) {
|
||||
val = 1;
|
||||
gChooseFileState.unk_0x20 = 4;
|
||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||
}
|
||||
}
|
||||
case DPAD_LEFT: {
|
||||
if (gChooseFileState.unk_0x0 == 0) {
|
||||
val = -1;
|
||||
gChooseFileState.unk_0x20 = 0xfc;
|
||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case START_BUTTON:
|
||||
case A_BUTTON: {
|
||||
case A_BUTTON:
|
||||
if (gChooseFileState.unk_0x0 == 0) {
|
||||
gMain.task = 2;
|
||||
gMain.state = gChooseFileState.unk_0x0;
|
||||
gMain.state = 2;
|
||||
gMain.substate = gChooseFileState.unk_0x0;
|
||||
SoundReq(SFX_TEXTBOX_SELECT);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DPAD_UP:
|
||||
case DPAD_DOWN:
|
||||
break;
|
||||
}
|
||||
tmp = gSaveHeader->saveFileId;
|
||||
tmp2 = val + 3;
|
||||
tmp += tmp2;
|
||||
gSaveHeader->saveFileId = tmp % 3;
|
||||
gSaveHeader->saveFileId = (int)(gSaveHeader->saveFileId + 3 + val) % 3;
|
||||
|
||||
tmp3 = gChooseFileState.unk_0x10;
|
||||
|
||||
tmp = gSaveHeader->saveFileId;
|
||||
tmp *= 0x68;
|
||||
|
||||
if (tmp != tmp3) {
|
||||
tmp5 = gChooseFileState.unk_0x20;
|
||||
tmp5 += tmp3;
|
||||
gChooseFileState.unk_0x10 = (tmp5 + (0x9c << 1)) % (0x9c << 1);
|
||||
unk_0x0 = 1;
|
||||
if (gSaveHeader->saveFileId * 0x68 != tmp3) {
|
||||
gChooseFileState.unk_0x10 = (tmp3 + gChooseFileState.unk_0x20 + 0x138) % 0x138;
|
||||
gChooseFileState.unk_0x0 = 1;
|
||||
} else {
|
||||
unk_0x0 = 0;
|
||||
gChooseFileState.unk_0x0 = 0;
|
||||
}
|
||||
|
||||
gChooseFileState.unk_0x0 = unk_0x0;
|
||||
sub_080A3198(gSaveHeader->saveFileId, 0);
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
NONMATCH("asm/non_matching/demoScreen/sub_080A30AC.inc", void sub_080A30AC(void)) {
|
||||
u32 unk_0x10;
|
||||
|
|
Loading…
Reference in New Issue