match some player functions

This commit is contained in:
Tal Hayon
2022-02-19 06:12:56 +02:00
parent 75a8fd3925
commit 8a79ee79ca
4 changed files with 99 additions and 524 deletions
@@ -1,172 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
adds r0, #0x81
ldrb r0, [r0]
cmp r0, #0
beq _08071654
adds r1, r5, #0
adds r1, #0x80
ldr r0, [r1]
adds r0, #0x80
lsls r0, r0, #0x14
lsrs r7, r0, #0x17
adds r4, r1, #0
b _0807166A
_08071654:
adds r4, r5, #0
adds r4, #0x80
ldrb r1, [r4]
lsrs r1, r1, #6
movs r0, #3
eors r1, r0
adds r1, #1
movs r0, #0x10
bl __divsi3
asrs r7, r0, #1
_0807166A:
adds r0, r5, #0
adds r0, #0x84
ldr r3, [r0]
movs r1, #0x80
lsls r1, r1, #1
adds r2, r0, #0
cmp r3, r1
bls _08071684
adds r0, r3, #0
adds r0, #0x80
lsls r0, r0, #0x14
lsrs r3, r0, #0x17
b _08071694
_08071684:
cmp r3, r1
bne _0807168C
movs r3, #0x10
b _08071694
_0807168C:
ldr r1, _080716B0 @ =gUnk_0811BABC
lsrs r0, r3, #5
adds r0, r0, r1
ldrb r3, [r0]
_08071694:
movs r0, #0x80
lsls r0, r0, #9
mov r8, r0
adds r0, r5, #0
adds r0, #0x5a
ldrb r0, [r0]
cmp r0, #2
beq _080716EA
cmp r0, #2
bgt _080716B4
cmp r0, #1
beq _080716BA
b _08071754
.align 2, 0
_080716B0: .4byte gUnk_0811BABC
_080716B4:
cmp r0, #3
beq _0807171E
b _08071754
_080716BA:
movs r1, #0x29
adds r1, r1, r5
mov ip, r1
ldrb r1, [r1]
movs r0, #0x39
rsbs r0, r0, #0
ands r0, r1
mov r1, ip
strb r0, [r1]
ldr r0, [r4]
cmp r0, #0x80
bls _080716D6
subs r0, r0, r7
str r0, [r4]
_080716D6:
lsls r1, r3, #1
ldr r0, [r2]
adds r0, r0, r1
str r0, [r2]
mov r0, r8
lsls r1, r0, #1
ldr r0, [r5, #0x30]
adds r0, r0, r1
str r0, [r5, #0x30]
b _08071754
_080716EA:
ldr r0, [r4]
adds r0, r0, r7
str r0, [r4]
ldr r1, [r2]
movs r6, #0x80
lsls r6, r6, #1
cmp r1, r6
bls _08071710
ldr r0, _0807170C @ =0x0000017F
cmp r1, r0
bhi _08071702
lsrs r3, r3, #1
_08071702:
subs r0, r1, r3
cmp r0, #0xff
bhi _08071716
str r6, [r2]
b _08071718
.align 2, 0
_0807170C: .4byte 0x0000017F
_08071710:
cmp r1, #0x80
bls _08071718
subs r0, r1, r3
_08071716:
str r0, [r2]
_08071718:
ldr r0, [r5, #0x34]
mov r1, r8
b _08071750
_0807171E:
ldr r0, [r4]
ldr r6, _08071740 @ =0x0000033F
cmp r0, r6
bhi _0807172A
adds r0, r0, r7
str r0, [r4]
_0807172A:
ldr r1, [r2]
cmp r1, r6
bls _08071744
movs r0, #8
strb r0, [r5, #0xe]
movs r0, #0x1e
strb r0, [r5, #0xf]
movs r0, #6
strb r0, [r5, #0xd]
b _0807174A
.align 2, 0
_08071740: .4byte 0x0000033F
_08071744:
lsls r0, r3, #1
adds r0, r1, r0
str r0, [r2]
_0807174A:
mov r0, r8
lsls r1, r0, #1
ldr r0, [r5, #0x34]
_08071750:
subs r0, r0, r1
str r0, [r5, #0x34]
_08071754:
ldr r1, [r4]
ldr r2, [r2]
adds r0, r5, #0
movs r3, #0
bl sub_0805EC9C
adds r0, r5, #0
bl UpdateAnimationSingleFrame
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.syntax divided
-222
View File
@@ -1,222 +0,0 @@
.syntax unified
push {r4, r5, lr}
adds r4, r0, #0
bl UpdateAnimationSingleFrame
movs r2, #0xc
rsbs r2, r2, #0
adds r0, r4, #0
movs r1, #0
bl sub_0806F854
ldrb r0, [r4, #0xe]
cmp r0, #0
beq _08072D7A
adds r0, r4, #0
bl LinearMoveUpdate
ldrb r0, [r4, #0xe]
subs r0, #1
b _08072E80
_08072D7A:
adds r0, r4, #0
bl sub_0806F730
adds r1, r4, #0
adds r1, #0x38
ldrb r1, [r1]
bl GetTileType
adds r2, r0, #0
ldrb r5, [r4, #0xf]
cmp r5, #1
beq _08072DD0
cmp r5, #1
bgt _08072D9C
cmp r5, #0
beq _08072DA6
b _08072E6C
_08072D9C:
cmp r5, #2
beq _08072DFA
cmp r5, #3
beq _08072E30
b _08072E6C
_08072DA6:
ldr r1, _08072DC8 @ =sTileTable
ldr r0, _08072DCC @ =gPlayerEntity
ldrb r0, [r0, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r2, #0
bl sub_08007DD6
cmp r0, #0
beq _08072E6C
movs r0, #1
strb r0, [r4, #0xe]
strb r0, [r4, #0xf]
b _08072E6C
.align 2, 0
_08072DC8: .4byte sTileTable
_08072DCC: .4byte gPlayerEntity
_08072DD0:
ldr r1, _08072DEC @ =sTileTable
ldr r0, _08072DF0 @ =gPlayerEntity
ldrb r0, [r0, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r2, #0
bl sub_08007DD6
cmp r0, #0
beq _08072DF4
strb r5, [r4, #0xe]
b _08072E6C
.align 2, 0
_08072DEC: .4byte sTileTable
_08072DF0: .4byte gPlayerEntity
_08072DF4:
movs r0, #2
strb r0, [r4, #0xf]
b _08072E6C
_08072DFA:
ldrb r0, [r4, #0x14]
movs r5, #4
eors r0, r5
strb r0, [r4, #0x14]
ldr r1, _08072E28 @ =sTileTable
ldr r0, _08072E2C @ =gPlayerEntity
ldrb r0, [r0, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r2, #0
bl sub_08007DD6
cmp r0, #0
beq _08072E22
movs r0, #1
strb r0, [r4, #0xe]
movs r0, #3
strb r0, [r4, #0xf]
_08072E22:
ldrb r0, [r4, #0x14]
eors r0, r5
b _08072E6A
.align 2, 0
_08072E28: .4byte sTileTable
_08072E2C: .4byte gPlayerEntity
_08072E30:
ldrb r0, [r4, #0x14]
movs r1, #4
eors r0, r1
strb r0, [r4, #0x14]
ldr r1, _08072E58 @ =sTileTable
ldr r0, _08072E5C @ =gPlayerEntity
ldrb r0, [r0, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r2, #0
bl sub_08007DD6
cmp r0, #0
beq _08072E60
movs r0, #1
strb r0, [r4, #0xe]
b _08072E64
.align 2, 0
_08072E58: .4byte sTileTable
_08072E5C: .4byte gPlayerEntity
_08072E60:
movs r0, #4
strb r0, [r4, #0xf]
_08072E64:
ldrb r0, [r4, #0x14]
movs r1, #4
eors r0, r1
_08072E6A:
strb r0, [r4, #0x14]
_08072E6C:
ldrb r0, [r4, #0xe]
cmp r0, #0
beq _08072E7A
adds r0, r4, #0
bl LinearMoveUpdate
b _08072E7E
_08072E7A:
bl UpdatePlayerMovement
_08072E7E:
movs r0, #0
_08072E80:
strb r0, [r4, #0xe]
movs r1, #0x80
lsls r1, r1, #6
adds r0, r4, #0
bl GravityUpdate
cmp r0, #0
bne _08072F10
ldrb r1, [r4, #0x10]
movs r0, #0x80
orrs r0, r1
strb r0, [r4, #0x10]
adds r0, r4, #0
adds r0, #0x38
ldrb r0, [r0]
cmp r0, #1
bne _08072EAA
adds r0, r4, #0
bl ResetCollisionLayer
b _08072EB0
_08072EAA:
adds r0, r4, #0
bl sub_08004542
_08072EB0:
adds r0, r4, #0
movs r1, #7
bl sub_08008790
ldr r5, _08072EDC @ =gPlayerState
ldrb r0, [r5, #0x14]
cmp r0, #0
beq _08072EE0
bl sub_08008B22
cmp r0, #0
beq _08072F10
movs r0, #7
strb r0, [r5, #0x11]
ldr r0, [r5, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _08072F10
bl SetPlayerActionNormal
b _08072F10
.align 2, 0
_08072EDC: .4byte gPlayerState
_08072EE0:
ldr r0, [r5, #0x30]
movs r1, #8
ands r0, r1
cmp r0, #0
beq _08072EF4
ldr r0, _08072EF0 @ =0x00000424
b _08072EF8
.align 2, 0
_08072EF0: .4byte 0x00000424
_08072EF4:
movs r0, #0x82
lsls r0, r0, #4
_08072EF8:
strh r0, [r5, #8]
movs r1, #0
movs r0, #6
strb r0, [r4, #0xe]
movs r0, #3
strb r0, [r4, #0xd]
adds r0, r4, #0
adds r0, #0x42
strb r1, [r0]
movs r0, #0x7d
bl SoundReq
_08072F10:
pop {r4, r5, pc}
.align 2, 0
.syntax divided
@@ -1,94 +0,0 @@
.syntax unified
push {lr}
ldr r0, _08070614 @ =gInput
ldrh r1, [r0, #2]
movs r0, #8
ands r0, r1
cmp r0, #0
beq _08070674
ldr r0, _08070618 @ =gFadeControl
ldrb r0, [r0]
cmp r0, #0
bne _08070674
ldr r0, _0807061C @ =gUnk_02034490
ldrb r0, [r0]
cmp r0, #0
bne _08070674
ldr r0, _08070620 @ =gMessage
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
cmp r0, #0
bne _08070674
ldr r1, _08070624 @ =gSave
adds r0, r1, #0
adds r0, #0xaa
ldrb r0, [r0]
cmp r0, #0
beq _08070674
adds r0, r1, #0
adds r0, #0xf2
ldrb r0, [r0]
cmp r0, #0
beq _08070674
ldr r1, _08070628 @ =gPlayerState
adds r0, r1, #0
adds r0, #0x8b
ldrb r0, [r0]
cmp r0, #0
bne _08070674
ldr r0, _0807062C @ =gPriorityHandler
ldrh r0, [r0, #8]
cmp r0, #0
bne _08070674
adds r2, r1, #0
adds r2, #0xa8
ldrb r0, [r2]
cmp r0, #0
bne _08070630
adds r0, r1, #0
adds r0, #0xa9
ldrb r0, [r0]
b _08070632
.align 2, 0
_08070614: .4byte gInput
_08070618: .4byte gFadeControl
_0807061C: .4byte gUnk_02034490
_08070620: .4byte gMessage
_08070624: .4byte gSave
_08070628: .4byte gPlayerState
_0807062C: .4byte gPriorityHandler
_08070630:
ldrb r0, [r2]
_08070632:
subs r0, #0x12
cmp r0, #0xa
bhi _08070678
lsls r0, r0, #2
ldr r1, _08070644 @ =_08070648
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08070644: .4byte _08070648
_08070648: @ jump table
.4byte _08070674 @ case 0
.4byte _08070674 @ case 1
.4byte _08070678 @ case 2
.4byte _08070674 @ case 3
.4byte _08070674 @ case 4
.4byte _08070678 @ case 5
.4byte _08070678 @ case 6
.4byte _08070678 @ case 7
.4byte _08070678 @ case 8
.4byte _08070678 @ case 9
.4byte _08070674 @ case 10
_08070674:
movs r0, #0
b _0807067E
_08070678:
bl sub_080A4D88
movs r0, #1
_0807067E:
pop {pc}
.syntax divided
+99 -36
View File
@@ -322,25 +322,26 @@ extern u16 script_BedAtSimons;
extern ScriptExecutionContext gPlayerScriptExecutionContext;
NONMATCH("asm/non_matching/playerItemPacciCane/CheckPlayerInactive.inc", u32 CheckPlayerInactive(void)) {
if (!((gInput.newKeys & START_BUTTON) == 0 || gFadeControl.active || gUnk_02034490.unk0 ||
(gMessage.doTextBox & 0x7F) || gSave.stats.health == 0 || !gSave.fillerD0[34] ||
gPlayerState.controlMode != CONTROL_ENABLED || gPriorityHandler.priority_timer != 0)) {
u32 tmp = gPlayerState.framestate ? gPlayerState.framestate : gPlayerState.framestate_last;
switch (tmp) {
case PL_STATE_DIE:
case PL_STATE_TALKEZLO:
case PL_STATE_ITEMGET:
case PL_STATE_DROWN:
case PL_STATE_STAIRS:
return 0;
}
sub_080A4D88();
return 1;
u32 CheckPlayerInactive(void) {
u32 framestate;
if (((gInput.newKeys & START_BUTTON) == 0 || gFadeControl.active || gUnk_02034490.unk0 ||
(gMessage.doTextBox & 0x7F) || gSave.stats.health == 0 || !gSave.fillerD0[34] ||
gPlayerState.controlMode != 0 || gPriorityHandler.priority_timer != 0)) {
return 0;
}
return 0;
framestate = gPlayerState.framestate == 0 ? gPlayerState.framestate_last : gPlayerState.framestate;
switch (framestate) {
case PL_STATE_DIE:
case PL_STATE_TALKEZLO:
case PL_STATE_ITEMGET:
case PL_STATE_DROWN:
case PL_STATE_STAIRS:
return 0;
}
sub_080A4D88();
return 1;
}
END_NONMATCH
void DoPlayerAction(Entity* this) {
static void (*const sPlayerActions[])(Entity*) = {
@@ -1177,8 +1178,77 @@ static const u8 gUnk_0811BABC[] = {
1, 1, 1, 1, 2, 4, 8, 16,
};
// horrible
/*static*/ ASM_FUNC("asm/non_matching/player/PortalShrinkUpdate.inc", void PortalShrinkUpdate(Entity* this));
void PortalShrinkUpdate(Entity* this) {
int iVar3;
u32 uVar5;
u32 uVar7;
u32 uVar8;
if (this->field_0x80.HALF.HI) {
uVar7 = (u32)((*(int*)&this->field_0x80 + 0x80) * 0x100000) >> 0x17;
} else {
uVar7 = (0x10 / (((this->field_0x80.HALF.LO >> 6) ^ 3) + 1)) >> 1;
}
uVar5 = *(u32*)&this->cutsceneBeh;
if (uVar5 >= 0x101) {
uVar5 = (uVar5 + 0x80) * 0x100000 >> 0x17;
} else {
if (uVar5 == 0x100) {
uVar5 = 0x10;
} else {
uVar5 = gUnk_0811BABC[uVar5 >> 5];
}
}
iVar3 = 0x10000;
switch (this->frame) {
case 1:
this->spritePriority.b1 = 0;
if (0x80 < *(u32*)&this->field_0x80) {
*(u32*)&this->field_0x80 -= uVar7;
}
*(u32*)&this->cutsceneBeh += uVar5 * 2;
this->y.WORD += iVar3 * 2;
break;
case 2:
*(u32*)&this->field_0x80 += uVar7;
uVar8 = *(u32*)&this->cutsceneBeh;
if (uVar8 >= 0x101) {
if (uVar8 < 0x180) {
uVar5 = uVar5 >> 1;
}
if (uVar8 - uVar5 < 0x100) {
*(u32*)&this->cutsceneBeh = 0x100;
} else {
*(u32*)&this->cutsceneBeh = uVar8 - uVar5;
}
} else {
if (0x80 < uVar8) {
*(u32*)&this->cutsceneBeh = uVar8 - uVar5;
}
}
this->z.WORD = this->z.WORD - iVar3;
break;
case 3:
if (*(u32*)&this->field_0x80 < 0x340) {
*(u32*)&this->field_0x80 += uVar7;
}
if (*(u32*)&this->cutsceneBeh >= 0x340) {
this->actionDelay = 8;
this->field_0xf = 0x1e;
this->subAction = 6;
} else {
*(u32*)&this->cutsceneBeh += uVar5 * 2;
}
this->z.WORD = this->z.WORD - iVar3 * 2;
break;
}
sub_0805EC9C(this, *(u32*)&this->field_0x80, *(u32*)&this->cutsceneBeh, 0);
UpdateAnimationSingleFrame(this);
}
/*static*/ void PortalEnterUpdate(Entity* this) {
if (this->actionDelay == 0) {
@@ -2311,17 +2381,16 @@ static const u16* const sTileTable[] = {
sTiles + 9,
};
/*static*/ NONMATCH("asm/non_matching/player/sub_08072D54.inc", void sub_08072D54(Entity* this)) {
u32 bVar1;
void sub_08072D54(Entity* this) {
u32 uVar2;
UpdateAnimationSingleFrame(this);
sub_0806F854(this, 0, -12);
if (this->actionDelay != 0) {
LinearMoveUpdate(this);
this->actionDelay--;
} else {
uVar2 = sub_0806F730(this);
uVar2 = GetTileType(uVar2, this->collisionLayer);
uVar2 = GetTileType(sub_0806F730(this), this->collisionLayer);
switch (this->field_0xf) {
case 0:
if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) {
@@ -2332,14 +2401,8 @@ static const u16* const sTileTable[] = {
case 1:
if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) {
this->actionDelay = 1;
this->field_0xf = 1;
}
break;
case 3:
if (this->actionDelay == 0) {
UpdatePlayerMovement();
} else {
LinearMoveUpdate(this);
this->field_0xf = 2;
}
break;
case 2:
@@ -2348,14 +2411,16 @@ static const u16* const sTileTable[] = {
this->actionDelay = 1;
this->field_0xf = 3;
}
this->animationState ^= 4;
break;
default:
case 3:
this->animationState ^= 4;
if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) {
this->field_0xf = 4;
} else {
this->actionDelay = 1;
} else {
this->field_0xf = 4;
}
this->animationState ^= 4;
break;
}
@@ -2367,7 +2432,6 @@ static const u16* const sTileTable[] = {
this->actionDelay = 0;
}
this->actionDelay = bVar1;
if (!GravityUpdate(this, GRAVITY_RATE)) {
COLLISION_ON(this);
if (this->collisionLayer == 1) {
@@ -2377,7 +2441,7 @@ static const u16* const sTileTable[] = {
}
sub_08008790(this, 7);
if (gPlayerState.field_0x14 != 0) {
if (sub_08008B22() == 0) {
if (sub_08008B22()) {
gPlayerState.field_0x11 = 7;
if (!(gPlayerState.flags & PL_MINISH)) {
SetPlayerActionNormal();
@@ -2396,7 +2460,6 @@ static const u16* const sTileTable[] = {
}
}
}
END_NONMATCH
/*static*/ void sub_08072F14(Entity* this) {
if (--this->actionDelay != 0xff) {