mirror of
https://github.com/zeldaret/tmc
synced 2026-06-03 18:36:43 -04:00
Match diagonal move functions
This commit is contained in:
@@ -1,129 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
mov r8, r2
|
||||
mov sb, r3
|
||||
movs r7, #0
|
||||
movs r6, #0
|
||||
ldrh r0, [r4, #0x2a]
|
||||
movs r1, #0xe
|
||||
ands r1, r0
|
||||
mov ip, r1
|
||||
movs r2, #0xe0
|
||||
lsls r2, r2, #8
|
||||
ands r2, r0
|
||||
adds r3, r2, #0
|
||||
cmp r1, #0
|
||||
beq _080AE904
|
||||
cmp r2, #0
|
||||
bne _080AE99E
|
||||
_080AE904:
|
||||
orrs r1, r2
|
||||
cmp r1, #0
|
||||
bne _080AE928
|
||||
ldr r1, _080AE924 @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r2, #0
|
||||
ldrsh r0, [r0, r2]
|
||||
adds r7, r0, #0
|
||||
muls r7, r5, r7
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
b _080AE98A
|
||||
.align 2, 0
|
||||
_080AE924: .4byte gSineTable
|
||||
_080AE928:
|
||||
mov r2, ip
|
||||
cmp r2, #2
|
||||
bne _080AE942
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x2c]
|
||||
adds r0, r0, r7
|
||||
str r0, [r4, #0x2c]
|
||||
adds r0, r4, #0
|
||||
movs r1, #4
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
b _080AE95C
|
||||
_080AE942:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #7
|
||||
cmp r3, r0
|
||||
bne _080AE95C
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
adds r0, r4, #0
|
||||
movs r1, #4
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
_080AE95C:
|
||||
ldrh r2, [r4, #0x2a]
|
||||
movs r0, #0xe
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AE97E
|
||||
ldr r1, _080AE9B4 @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r6
|
||||
str r0, [r4, #0x30]
|
||||
_080AE97E:
|
||||
movs r0, #0xe0
|
||||
lsls r0, r0, #8
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AE99E
|
||||
ldr r1, _080AE9B4 @ =gSineTable
|
||||
_080AE98A:
|
||||
mov r2, r8
|
||||
lsls r0, r2, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x2c]
|
||||
adds r0, r0, r6
|
||||
str r0, [r4, #0x2c]
|
||||
_080AE99E:
|
||||
ldr r2, _080AE9B8 @ =0x00003333
|
||||
adds r0, r7, r2
|
||||
ldr r1, _080AE9BC @ =0x00006665
|
||||
cmp r0, r1
|
||||
bhi _080AE9C0
|
||||
ldr r2, _080AE9B8 @ =0x00003333
|
||||
adds r0, r6, r2
|
||||
cmp r0, r1
|
||||
bhi _080AE9C0
|
||||
movs r0, #0
|
||||
b _080AE9C2
|
||||
.align 2, 0
|
||||
_080AE9B4: .4byte gSineTable
|
||||
_080AE9B8: .4byte 0x00003333
|
||||
_080AE9BC: .4byte 0x00006665
|
||||
_080AE9C0:
|
||||
movs r0, #1
|
||||
_080AE9C2:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,129 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
mov r8, r2
|
||||
mov sb, r3
|
||||
movs r7, #0
|
||||
movs r6, #0
|
||||
ldrh r0, [r4, #0x2a]
|
||||
movs r1, #0xe
|
||||
ands r1, r0
|
||||
mov ip, r1
|
||||
movs r2, #0xe0
|
||||
lsls r2, r2, #4
|
||||
ands r2, r0
|
||||
adds r3, r2, #0
|
||||
cmp r1, #0
|
||||
beq _080AEEC0
|
||||
cmp r2, #0
|
||||
bne _080AEF5A
|
||||
_080AEEC0:
|
||||
orrs r1, r2
|
||||
cmp r1, #0
|
||||
bne _080AEEE4
|
||||
ldr r1, _080AEEE0 @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r2, #0
|
||||
ldrsh r0, [r0, r2]
|
||||
adds r7, r0, #0
|
||||
muls r7, r5, r7
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
b _080AEF46
|
||||
.align 2, 0
|
||||
_080AEEE0: .4byte gSineTable
|
||||
_080AEEE4:
|
||||
mov r2, ip
|
||||
cmp r2, #4
|
||||
bne _080AEEFE
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x2c]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x2c]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1c
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
b _080AEF18
|
||||
_080AEEFE:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
cmp r3, r0
|
||||
bne _080AEF18
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x1c
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
_080AEF18:
|
||||
ldrh r2, [r4, #0x2a]
|
||||
movs r0, #0xe
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AEF3A
|
||||
ldr r1, _080AEF70 @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r6
|
||||
str r0, [r4, #0x30]
|
||||
_080AEF3A:
|
||||
movs r0, #0xe0
|
||||
lsls r0, r0, #4
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AEF5A
|
||||
ldr r1, _080AEF70 @ =gSineTable
|
||||
_080AEF46:
|
||||
mov r2, r8
|
||||
lsls r0, r2, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x2c]
|
||||
adds r0, r0, r6
|
||||
str r0, [r4, #0x2c]
|
||||
_080AEF5A:
|
||||
ldr r2, _080AEF74 @ =0x00003333
|
||||
adds r0, r7, r2
|
||||
ldr r1, _080AEF78 @ =0x00006665
|
||||
cmp r0, r1
|
||||
bhi _080AEF7C
|
||||
ldr r2, _080AEF74 @ =0x00003333
|
||||
adds r0, r6, r2
|
||||
cmp r0, r1
|
||||
bhi _080AEF7C
|
||||
movs r0, #0
|
||||
b _080AEF7E
|
||||
.align 2, 0
|
||||
_080AEF70: .4byte gSineTable
|
||||
_080AEF74: .4byte 0x00003333
|
||||
_080AEF78: .4byte 0x00006665
|
||||
_080AEF7C:
|
||||
movs r0, #1
|
||||
_080AEF7E:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,129 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
mov r8, r2
|
||||
mov sb, r3
|
||||
movs r7, #0
|
||||
movs r6, #0
|
||||
ldrh r0, [r4, #0x2a]
|
||||
movs r1, #0xe0
|
||||
ands r1, r0
|
||||
mov ip, r1
|
||||
movs r2, #0xe0
|
||||
lsls r2, r2, #8
|
||||
ands r2, r0
|
||||
adds r3, r2, #0
|
||||
cmp r1, #0
|
||||
beq _080AEAEC
|
||||
cmp r2, #0
|
||||
bne _080AEB86
|
||||
_080AEAEC:
|
||||
orrs r1, r2
|
||||
cmp r1, #0
|
||||
bne _080AEB10
|
||||
ldr r1, _080AEB0C @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r2, #0
|
||||
ldrsh r0, [r0, r2]
|
||||
adds r7, r0, #0
|
||||
muls r7, r5, r7
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
b _080AEB72
|
||||
.align 2, 0
|
||||
_080AEB0C: .4byte gSineTable
|
||||
_080AEB10:
|
||||
mov r2, ip
|
||||
cmp r2, #0x20
|
||||
bne _080AEB2A
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x2c]
|
||||
adds r0, r0, r7
|
||||
str r0, [r4, #0x2c]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xc
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
b _080AEB44
|
||||
_080AEB2A:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #6
|
||||
cmp r3, r0
|
||||
bne _080AEB44
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x30]
|
||||
adds r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xc
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
_080AEB44:
|
||||
ldrh r2, [r4, #0x2a]
|
||||
movs r0, #0xe0
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AEB66
|
||||
ldr r1, _080AEB9C @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r6
|
||||
str r0, [r4, #0x30]
|
||||
_080AEB66:
|
||||
movs r0, #0xe0
|
||||
lsls r0, r0, #8
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AEB86
|
||||
ldr r1, _080AEB9C @ =gSineTable
|
||||
_080AEB72:
|
||||
mov r2, r8
|
||||
lsls r0, r2, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x2c]
|
||||
adds r0, r0, r6
|
||||
str r0, [r4, #0x2c]
|
||||
_080AEB86:
|
||||
ldr r2, _080AEBA0 @ =0x00003333
|
||||
adds r0, r7, r2
|
||||
ldr r1, _080AEBA4 @ =0x00006665
|
||||
cmp r0, r1
|
||||
bhi _080AEBA8
|
||||
ldr r2, _080AEBA0 @ =0x00003333
|
||||
adds r0, r6, r2
|
||||
cmp r0, r1
|
||||
bhi _080AEBA8
|
||||
movs r0, #0
|
||||
b _080AEBAA
|
||||
.align 2, 0
|
||||
_080AEB9C: .4byte gSineTable
|
||||
_080AEBA0: .4byte 0x00003333
|
||||
_080AEBA4: .4byte 0x00006665
|
||||
_080AEBA8:
|
||||
movs r0, #1
|
||||
_080AEBAA:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,129 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
mov r8, r2
|
||||
mov sb, r3
|
||||
movs r7, #0
|
||||
movs r6, #0
|
||||
ldrh r0, [r4, #0x2a]
|
||||
movs r1, #0xe0
|
||||
ands r1, r0
|
||||
mov ip, r1
|
||||
movs r2, #0xe0
|
||||
lsls r2, r2, #4
|
||||
ands r2, r0
|
||||
adds r3, r2, #0
|
||||
cmp r1, #0
|
||||
beq _080AECD8
|
||||
cmp r2, #0
|
||||
bne _080AED72
|
||||
_080AECD8:
|
||||
orrs r1, r2
|
||||
cmp r1, #0
|
||||
bne _080AECFC
|
||||
ldr r1, _080AECF8 @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r2, #0
|
||||
ldrsh r0, [r0, r2]
|
||||
adds r7, r0, #0
|
||||
muls r7, r5, r7
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
b _080AED5E
|
||||
.align 2, 0
|
||||
_080AECF8: .4byte gSineTable
|
||||
_080AECFC:
|
||||
mov r2, ip
|
||||
cmp r2, #0x40
|
||||
bne _080AED16
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x2c]
|
||||
subs r0, r0, r7
|
||||
str r0, [r4, #0x2c]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x14
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
b _080AED30
|
||||
_080AED16:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #2
|
||||
cmp r3, r0
|
||||
bne _080AED30
|
||||
lsls r7, r5, #8
|
||||
ldr r0, [r4, #0x30]
|
||||
adds r0, r0, r7
|
||||
str r0, [r4, #0x30]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x14
|
||||
mov r2, sb
|
||||
bl CalculateEntityTileCollisions
|
||||
_080AED30:
|
||||
ldrh r2, [r4, #0x2a]
|
||||
movs r0, #0xe0
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AED52
|
||||
ldr r1, _080AED88 @ =gSineTable
|
||||
mov r0, r8
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x30]
|
||||
subs r0, r0, r6
|
||||
str r0, [r4, #0x30]
|
||||
_080AED52:
|
||||
movs r0, #0xe0
|
||||
lsls r0, r0, #4
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
bne _080AED72
|
||||
ldr r1, _080AED88 @ =gSineTable
|
||||
_080AED5E:
|
||||
mov r2, r8
|
||||
lsls r0, r2, #1
|
||||
adds r0, r0, r1
|
||||
movs r1, #0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r6, r0, #0
|
||||
muls r6, r5, r6
|
||||
ldr r0, [r4, #0x2c]
|
||||
adds r0, r0, r6
|
||||
str r0, [r4, #0x2c]
|
||||
_080AED72:
|
||||
ldr r2, _080AED8C @ =0x00003333
|
||||
adds r0, r7, r2
|
||||
ldr r1, _080AED90 @ =0x00006665
|
||||
cmp r0, r1
|
||||
bhi _080AED94
|
||||
ldr r2, _080AED8C @ =0x00003333
|
||||
adds r0, r6, r2
|
||||
cmp r0, r1
|
||||
bhi _080AED94
|
||||
movs r0, #0
|
||||
b _080AED96
|
||||
.align 2, 0
|
||||
_080AED88: .4byte gSineTable
|
||||
_080AED8C: .4byte 0x00003333
|
||||
_080AED90: .4byte 0x00006665
|
||||
_080AED94:
|
||||
movs r0, #1
|
||||
_080AED96:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
+73
-63
@@ -1775,25 +1775,26 @@ bool32 MoveNorth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/movement/MoveNorthEast.inc",
|
||||
bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType))
|
||||
/*NONMATCH("asm/non_matching/movement/MoveNorthEast.inc",
|
||||
bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
|
||||
bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
s32 moveA = 0;
|
||||
s32 moveB = 0;
|
||||
if (((this->collisions & COL_NORTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) {
|
||||
if ((this->collisions & (COL_NORTH_ANY | COL_EAST_ANY)) == COL_NONE) {
|
||||
moveA = radius * gSineTable[angle + 0x40];
|
||||
s32 northCollision = (this->collisions & COL_NORTH_ANY);
|
||||
u32 northCollision2 = northCollision;
|
||||
s32 eastCollision = (this->collisions & COL_EAST_ANY);
|
||||
u32 eastCollision2 = eastCollision;
|
||||
if ((northCollision == COL_NONE) || (eastCollision == COL_NONE)) {
|
||||
if ((northCollision | eastCollision) == COL_NONE) {
|
||||
moveA = gSineTable[angle + 0x40] * radius;
|
||||
this->y.WORD -= moveA;
|
||||
moveB = radius * gSineTable[angle];
|
||||
moveB = gSineTable[angle] * radius;
|
||||
this->x.WORD += moveB;
|
||||
} else {
|
||||
if ((this->collisions & COL_NORTH_ANY) == COL_NORTH_WEST) {
|
||||
if (northCollision2 == COL_NORTH_WEST) {
|
||||
moveA = radius * 0x100;
|
||||
this->x.WORD += moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
|
||||
} else {
|
||||
if ((this->collisions & COL_EAST_ANY) == COL_EAST_NORTH) {
|
||||
if (eastCollision2 == COL_EAST_NORTH) {
|
||||
moveA = radius * 0x100;
|
||||
this->y.WORD -= moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
|
||||
@@ -1809,13 +1810,14 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthEast.inc",
|
||||
}
|
||||
}
|
||||
}
|
||||
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
|
||||
return FALSE;
|
||||
} else {
|
||||
if (((moveA < -0x3333) || (moveA >= 0x3333))) {
|
||||
return TRUE;
|
||||
} else if ((moveB < -0x3333) || (moveB >= 0x3333)) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
END_NONMATCH*/
|
||||
|
||||
bool32 MoveEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
s32 moveA = 0;
|
||||
@@ -1855,24 +1857,25 @@ bool32 MoveEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/movement/MoveSouthEast.inc",
|
||||
bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType))
|
||||
/*NONMATCH("asm/non_matching/movement/MoveSouthEast.inc",
|
||||
bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
|
||||
bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
s32 moveA = 0;
|
||||
s32 moveB = 0;
|
||||
if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) {
|
||||
if ((this->collisions & (COL_SOUTH_ANY | COL_EAST_ANY)) == COL_NONE) {
|
||||
s32 anySouth = this->collisions & COL_SOUTH_ANY;
|
||||
s32 anySouth2 = anySouth;
|
||||
s32 anyEast = this->collisions & COL_EAST_ANY;
|
||||
s32 anyEast2 = anyEast;
|
||||
if ((anySouth == COL_NONE) || (anyEast == COL_NONE)) {
|
||||
if ((anySouth | anyEast) == COL_NONE) {
|
||||
moveA = gSineTable[angle + 0x40] * radius;
|
||||
this->y.WORD -= moveA;
|
||||
moveB = gSineTable[angle] * radius;
|
||||
this->x.WORD += moveB;
|
||||
} else {
|
||||
if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_WEST) {
|
||||
if (anySouth2 == COL_SOUTH_WEST) {
|
||||
moveA = radius * 0x100;
|
||||
this->x.WORD += moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
|
||||
} else if ((this->collisions & COL_EAST_ANY) == COL_EAST_SOUTH) {
|
||||
} else if (anyEast2 == COL_EAST_SOUTH) {
|
||||
moveA = radius * 0x100;
|
||||
this->y.WORD += moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
|
||||
@@ -1887,13 +1890,16 @@ ASM_FUNC("asm/non_matching/movement/MoveSouthEast.inc",
|
||||
}
|
||||
}
|
||||
}
|
||||
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
|
||||
return FALSE;
|
||||
} else {
|
||||
if (moveA < -0x3333 || moveA >= 0x3333) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (moveB < -0x3333 || moveB >= 0x3333) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
END_NONMATCH*/
|
||||
|
||||
bool32 MoveSouth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
s32 moveA = 0;
|
||||
@@ -1934,47 +1940,49 @@ bool32 MoveSouth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/movement/MoveSouthWest.inc",
|
||||
bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType))
|
||||
/*NONMATCH("asm/non_matching/movement/MoveSouthWest.inc",
|
||||
bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
|
||||
bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
s32 moveA = 0;
|
||||
s32 moveB = 0;
|
||||
if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_WEST_ANY) == COL_NONE)) {
|
||||
if ((this->collisions & (COL_SOUTH_ANY | COL_WEST_ANY)) == COL_NONE) {
|
||||
moveB = gSineTable[angle + 0x40] * radius;
|
||||
this->y.WORD -= moveB;
|
||||
moveA = gSineTable[angle] * radius;
|
||||
this->x.WORD += moveA;
|
||||
s32 anySouth = this->collisions & COL_SOUTH_ANY;
|
||||
s32 anySouth2 = anySouth;
|
||||
s32 anyWest = this->collisions & COL_WEST_ANY;
|
||||
s32 anyWest2 = anyWest;
|
||||
if ((anySouth == COL_NONE) || (anyWest == COL_NONE)) {
|
||||
if ((anySouth | anyWest) == COL_NONE) {
|
||||
moveA = gSineTable[angle + 0x40] * radius;
|
||||
this->y.WORD -= moveA;
|
||||
moveB = gSineTable[angle] * radius;
|
||||
this->x.WORD += moveB;
|
||||
} else {
|
||||
if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_EAST) {
|
||||
moveB = radius * 0x100;
|
||||
this->x.WORD -= moveB;
|
||||
if (anySouth2 == COL_SOUTH_EAST) {
|
||||
moveA = radius * 0x100;
|
||||
this->x.WORD -= moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
|
||||
} else if (anyWest2 == COL_WEST_SOUTH) {
|
||||
moveA = radius * 0x100;
|
||||
this->y.WORD += moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
|
||||
} else {
|
||||
if ((this->collisions & COL_WEST_ANY) == COL_WEST_SOUTH) {
|
||||
moveB = radius * 0x100;
|
||||
this->y.WORD += moveB;
|
||||
CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
|
||||
}
|
||||
}
|
||||
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
|
||||
moveA = gSineTable[angle + 0x40] * radius;
|
||||
this->y.WORD -= moveA;
|
||||
moveB = gSineTable[angle + 0x40] * radius;
|
||||
this->y.WORD -= moveB;
|
||||
}
|
||||
if ((this->collisions & COL_WEST_ANY) == COL_NONE) {
|
||||
moveA = gSineTable[angle] * radius;
|
||||
this->x.WORD += moveA;
|
||||
moveB = gSineTable[angle] * radius;
|
||||
this->x.WORD += moveB;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
|
||||
return FALSE;
|
||||
} else {
|
||||
if (moveA < -0x3333 || moveA >= 0x3333) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (moveB < -0x3333 || moveB >= 0x3333) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
END_NONMATCH*/
|
||||
|
||||
bool32 MoveWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
s32 moveA = 0;
|
||||
@@ -2018,14 +2026,13 @@ bool32 MoveWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc",
|
||||
bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType))
|
||||
/*NONMATCH("asm/non_matching/movement/MoveNorthWest.inc",
|
||||
bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
|
||||
bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
|
||||
s32 moveA = 0;
|
||||
s32 moveB = 0;
|
||||
u32 colNorthAny = (this->collisions & COL_NORTH_ANY);
|
||||
u32 colNorthAny2 = colNorthAny;
|
||||
u32 colWestAny = (this->collisions & COL_WEST_ANY);
|
||||
u32 colWestAny2 = colWestAny;
|
||||
if ((colNorthAny == COL_NONE) || (colWestAny == COL_NONE)) {
|
||||
if ((colNorthAny | colWestAny) == COL_NONE) {
|
||||
moveA = gSineTable[angle + 0x40] * radius;
|
||||
@@ -2033,12 +2040,12 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc",
|
||||
moveB = gSineTable[angle] * radius;
|
||||
this->x.WORD += moveB;
|
||||
} else {
|
||||
if (colNorthAny == COL_NORTH_EAST) {
|
||||
if (colNorthAny2 == COL_NORTH_EAST) {
|
||||
moveA = radius * 0x100;
|
||||
this->x.WORD -= moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
|
||||
} else {
|
||||
if (colWestAny == COL_WEST_NORTH) {
|
||||
if (colWestAny2 == COL_WEST_NORTH) {
|
||||
moveA = radius * 0x100;
|
||||
this->y.WORD -= moveA;
|
||||
CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
|
||||
@@ -2054,13 +2061,16 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc",
|
||||
}
|
||||
}
|
||||
}
|
||||
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
|
||||
return FALSE;
|
||||
} else {
|
||||
if (moveA < -0x3333 || moveA >= 0x3333) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (moveB < -0x3333 || moveB >= 0x3333) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
END_NONMATCH*/
|
||||
|
||||
bool32 ProcessMovement0(Entity* this) {
|
||||
bool32 result;
|
||||
|
||||
Reference in New Issue
Block a user