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;
|
/*0x10*/ s16 unk_0x10;
|
||||||
/*0x12*/ u16 unk_0x12;
|
/*0x12*/ u16 unk_0x12;
|
||||||
/*0x14*/ u8 fillerB[0xC];
|
/*0x14*/ u8 fillerB[0xC];
|
||||||
/*0x20*/ u8 unk_0x20;
|
/*0x20*/ s8 unk_0x20;
|
||||||
/*0x21*/ u8 fillerC[0xF];
|
/*0x21*/ u8 fillerC[0xF];
|
||||||
} ChooseFileState;
|
} ChooseFileState;
|
||||||
static_assert(sizeof(ChooseFileState) == 0x30);
|
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).
|
void sub_080A2FD0(void) {
|
||||||
// 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;
|
|
||||||
u32 val;
|
u32 val;
|
||||||
s32 tmp3;
|
s32 tmp3;
|
||||||
u32 unk_0x0;
|
|
||||||
u32 tmp4;
|
|
||||||
s32 tmp5;
|
|
||||||
u32 keys;
|
|
||||||
|
|
||||||
if (gFadeControl.active == 0) {
|
if (gFadeControl.active == 0) {
|
||||||
val = 0;
|
val = 0;
|
||||||
keys = gInput.heldKeys;
|
switch (gInput.heldKeys) {
|
||||||
switch (keys) {
|
case DPAD_LEFT:
|
||||||
case DPAD_RIGHT: {
|
if (gChooseFileState.unk_0x0 == 0) {
|
||||||
|
val = -1;
|
||||||
|
gChooseFileState.unk_0x20 = -4;
|
||||||
|
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DPAD_RIGHT:
|
||||||
if (gChooseFileState.unk_0x0 == 0) {
|
if (gChooseFileState.unk_0x0 == 0) {
|
||||||
val = 1;
|
val = 1;
|
||||||
gChooseFileState.unk_0x20 = 4;
|
gChooseFileState.unk_0x20 = 4;
|
||||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
SoundReq(SFX_TEXTBOX_CHOICE);
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case DPAD_LEFT: {
|
|
||||||
if (gChooseFileState.unk_0x0 == 0) {
|
|
||||||
val = -1;
|
|
||||||
gChooseFileState.unk_0x20 = 0xfc;
|
|
||||||
SoundReq(SFX_TEXTBOX_CHOICE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case START_BUTTON:
|
case START_BUTTON:
|
||||||
case A_BUTTON: {
|
case A_BUTTON:
|
||||||
if (gChooseFileState.unk_0x0 == 0) {
|
if (gChooseFileState.unk_0x0 == 0) {
|
||||||
gMain.task = 2;
|
gMain.state = 2;
|
||||||
gMain.state = gChooseFileState.unk_0x0;
|
gMain.substate = gChooseFileState.unk_0x0;
|
||||||
SoundReq(SFX_TEXTBOX_SELECT);
|
SoundReq(SFX_TEXTBOX_SELECT);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case DPAD_UP:
|
||||||
|
case DPAD_DOWN:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
gSaveHeader->saveFileId = (int)(gSaveHeader->saveFileId + 3 + val) % 3;
|
||||||
tmp = gSaveHeader->saveFileId;
|
|
||||||
tmp2 = val + 3;
|
|
||||||
tmp += tmp2;
|
|
||||||
gSaveHeader->saveFileId = tmp % 3;
|
|
||||||
|
|
||||||
tmp3 = gChooseFileState.unk_0x10;
|
tmp3 = gChooseFileState.unk_0x10;
|
||||||
|
|
||||||
tmp = gSaveHeader->saveFileId;
|
if (gSaveHeader->saveFileId * 0x68 != tmp3) {
|
||||||
tmp *= 0x68;
|
gChooseFileState.unk_0x10 = (tmp3 + gChooseFileState.unk_0x20 + 0x138) % 0x138;
|
||||||
|
gChooseFileState.unk_0x0 = 1;
|
||||||
if (tmp != tmp3) {
|
|
||||||
tmp5 = gChooseFileState.unk_0x20;
|
|
||||||
tmp5 += tmp3;
|
|
||||||
gChooseFileState.unk_0x10 = (tmp5 + (0x9c << 1)) % (0x9c << 1);
|
|
||||||
unk_0x0 = 1;
|
|
||||||
} else {
|
} else {
|
||||||
unk_0x0 = 0;
|
gChooseFileState.unk_0x0 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gChooseFileState.unk_0x0 = unk_0x0;
|
|
||||||
sub_080A3198(gSaveHeader->saveFileId, 0);
|
sub_080A3198(gSaveHeader->saveFileId, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END_NONMATCH
|
|
||||||
|
|
||||||
NONMATCH("asm/non_matching/demoScreen/sub_080A30AC.inc", void sub_080A30AC(void)) {
|
NONMATCH("asm/non_matching/demoScreen/sub_080A30AC.inc", void sub_080A30AC(void)) {
|
||||||
u32 unk_0x10;
|
u32 unk_0x10;
|
||||||
|
|
Loading…
Reference in New Issue