mirror of
https://github.com/zeldaret/tmc
synced 2026-05-25 15:25:26 -04:00
Match CalculateEntityTileCollisions
This commit is contained in:
@@ -1,288 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #0x18
|
||||
str r0, [sp]
|
||||
str r1, [sp, #4]
|
||||
adds r4, r2, #0
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
bl GetLayerByIndex
|
||||
ldr r1, _080AE624 @ =0x00002004
|
||||
adds r5, r0, r1
|
||||
ldr r2, [sp]
|
||||
ldr r2, [r2, #0x48]
|
||||
str r2, [sp, #8]
|
||||
ldr r0, [sp]
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r0, r2]
|
||||
ldr r2, [sp, #8]
|
||||
movs r0, #0
|
||||
ldrsb r0, [r2, r0]
|
||||
adds r1, r1, r0
|
||||
str r1, [sp, #0xc]
|
||||
ldr r0, [sp]
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r0, r2]
|
||||
ldr r2, [sp, #8]
|
||||
movs r0, #1
|
||||
ldrsb r0, [r2, r0]
|
||||
adds r1, r1, r0
|
||||
mov sl, r1
|
||||
ldrb r0, [r2, #2]
|
||||
mov sb, r0
|
||||
ldrb r1, [r2, #3]
|
||||
mov r8, r1
|
||||
movs r0, #0xf
|
||||
ldr r2, [sp, #4]
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
beq _080AE65C
|
||||
cmp r2, #0xf
|
||||
bhi _080AE628
|
||||
ldr r7, [sp, #0xc]
|
||||
add r7, sb
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
mov r2, sl
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
adds r6, r0, #0
|
||||
lsls r6, r6, #1
|
||||
mov r2, sl
|
||||
add r2, r8
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
mov r0, sl
|
||||
mov r1, r8
|
||||
subs r2, r0, r1
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #6
|
||||
b _080AE6D2
|
||||
.align 2, 0
|
||||
_080AE624: .4byte 0x00002004
|
||||
_080AE628:
|
||||
ldr r2, [sp, #0xc]
|
||||
mov r0, sb
|
||||
subs r7, r2, r0
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
mov r2, sl
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
adds r6, r0, #0
|
||||
lsls r6, r6, #1
|
||||
mov r2, sl
|
||||
add r2, r8
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
mov r1, sl
|
||||
mov r0, r8
|
||||
subs r2, r1, r0
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
b _080AE6C8
|
||||
_080AE65C:
|
||||
ldr r7, [sp, #0xc]
|
||||
add r7, sb
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
mov r2, sl
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
adds r6, r0, #0
|
||||
lsls r6, r6, #1
|
||||
mov r1, sl
|
||||
add r1, r8
|
||||
str r1, [sp, #0x10]
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
ldr r2, [sp, #0x10]
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
mov r2, sl
|
||||
mov r0, r8
|
||||
subs r2, r2, r0
|
||||
mov r8, r2
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #2
|
||||
ldr r1, [sp, #0xc]
|
||||
mov r2, sb
|
||||
subs r7, r1, r2
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
mov r2, sl
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
ldr r2, [sp, #0x10]
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
mov r2, r8
|
||||
_080AE6C8:
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #2
|
||||
_080AE6D2:
|
||||
ldr r0, [sp, #8]
|
||||
ldrb r0, [r0, #4]
|
||||
mov sb, r0
|
||||
ldr r1, [sp, #8]
|
||||
ldrb r1, [r1, #5]
|
||||
mov r8, r1
|
||||
ldr r2, [sp, #4]
|
||||
subs r2, #8
|
||||
str r2, [sp, #4]
|
||||
movs r0, #0xf
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
beq _080AE760
|
||||
cmp r2, #0xf
|
||||
bhi _080AE72C
|
||||
mov r7, sl
|
||||
add r7, r8
|
||||
adds r0, r5, #0
|
||||
ldr r1, [sp, #0xc]
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
ldr r1, [sp, #0xc]
|
||||
add r1, sb
|
||||
adds r0, r5, #0
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
ldr r0, [sp, #0xc]
|
||||
mov r2, sb
|
||||
subs r1, r0, r2
|
||||
adds r0, r5, #0
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #5
|
||||
b _080AE7D6
|
||||
_080AE72C:
|
||||
mov r0, sl
|
||||
mov r1, r8
|
||||
subs r7, r0, r1
|
||||
lsls r6, r6, #4
|
||||
adds r0, r5, #0
|
||||
ldr r1, [sp, #0xc]
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
ldr r1, [sp, #0xc]
|
||||
add r1, sb
|
||||
adds r0, r5, #0
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
ldr r2, [sp, #0xc]
|
||||
mov r0, sb
|
||||
subs r1, r2, r0
|
||||
adds r0, r5, #0
|
||||
b _080AE7CA
|
||||
_080AE760:
|
||||
mov r7, sl
|
||||
add r7, r8
|
||||
adds r0, r5, #0
|
||||
ldr r1, [sp, #0xc]
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
ldr r1, [sp, #0xc]
|
||||
add r1, sb
|
||||
str r1, [sp, #0x14]
|
||||
adds r0, r5, #0
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
ldr r2, [sp, #0xc]
|
||||
mov r0, sb
|
||||
subs r2, r2, r0
|
||||
mov sb, r2
|
||||
adds r0, r5, #0
|
||||
mov r1, sb
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #2
|
||||
mov r1, sl
|
||||
mov r2, r8
|
||||
subs r7, r1, r2
|
||||
adds r0, r5, #0
|
||||
ldr r1, [sp, #0xc]
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
adds r0, r5, #0
|
||||
ldr r1, [sp, #0x14]
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
adds r0, r5, #0
|
||||
mov r1, sb
|
||||
_080AE7CA:
|
||||
adds r2, r7, #0
|
||||
adds r3, r4, #0
|
||||
bl IsTileCollision
|
||||
orrs r6, r0
|
||||
lsls r6, r6, #1
|
||||
_080AE7D6:
|
||||
ldr r0, [sp]
|
||||
strh r6, [r0, #0x2a]
|
||||
add sp, #0x18
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
+72
-66
@@ -1603,92 +1603,98 @@ bool32 IsTileCollision(const u8* collisionData, s32 x, s32 y, u32 collisionType)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/movement/CalculateEntityTileCollisions.inc",
|
||||
void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionType))
|
||||
/*NONMATCH("asm/non_matching/movement/CalculateEntityTileCollisions.inc",
|
||||
void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionType)) {
|
||||
void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionType) {
|
||||
u8* layer;
|
||||
|
||||
u32 colResult;
|
||||
|
||||
Hitbox* hb;
|
||||
s32 xMin;
|
||||
s32 xVar1;
|
||||
s32 xVar2;
|
||||
|
||||
s32 yMin;
|
||||
s32 yVar1;
|
||||
s32 yVar2;
|
||||
|
||||
bool32 col1;
|
||||
bool32 col2;
|
||||
bool32 col3;
|
||||
bool32 col4;
|
||||
bool32 col5;
|
||||
bool32 col6;
|
||||
|
||||
s32 temp;
|
||||
u32 hitboxUnkX;
|
||||
u32 hitboxUnkY;
|
||||
|
||||
layer = GetLayerByIndex(this->collisionLayer)->collisionData;
|
||||
xMin = this->x.HALF.HI + this->hitbox->offset_x;
|
||||
yMin = this->y.HALF.HI + this->hitbox->offset_y;
|
||||
hitboxUnkX = this->hitbox->unk2[0];
|
||||
hitboxUnkY = this->hitbox->unk2[1];
|
||||
hb = this->hitbox;
|
||||
xMin = this->x.HALF.HI + hb->offset_x;
|
||||
yMin = this->y.HALF.HI + hb->offset_y;
|
||||
hitboxUnkX = hb->unk2[0];
|
||||
hitboxUnkY = hb->unk2[1];
|
||||
if ((direction & 0xf) != 0) {
|
||||
if (0xf >= direction) {
|
||||
col1 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
|
||||
col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin + hitboxUnkY, collisionType);
|
||||
col3 = IsTileCollision(layer, xMin + hitboxUnkX, yMin - hitboxUnkY, collisionType);
|
||||
colResult = ((col1 << 1 | col2) << 1 | col3) << 6;
|
||||
temp = xMin + hitboxUnkX;
|
||||
colResult = IsTileCollision(layer, temp, yMin, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
|
||||
colResult <<= 6;
|
||||
} else {
|
||||
col1 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
|
||||
col2 = IsTileCollision(layer, xMin - hitboxUnkX, yMin + hitboxUnkY, collisionType);
|
||||
colResult = col1 << 1 | col2;
|
||||
col3 = IsTileCollision(layer, xMin - hitboxUnkX, yMin - hitboxUnkY, collisionType);
|
||||
colResult = (colResult << 1 | col3) << 2;
|
||||
temp = xMin - hitboxUnkX;
|
||||
colResult = IsTileCollision(layer, temp, yMin, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
|
||||
colResult <<= 2;
|
||||
}
|
||||
} else {
|
||||
col1 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
|
||||
col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin + hitboxUnkY, collisionType);
|
||||
col3 = IsTileCollision(layer, xMin + hitboxUnkX, yMin - hitboxUnkY, collisionType);
|
||||
col4 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
|
||||
col5 = IsTileCollision(layer, xMin - hitboxUnkX, yMin + hitboxUnkY, collisionType);
|
||||
colResult = (((col1 << 1 | col2) << 1 | col3) << 2 | col4) << 1 | col5;
|
||||
col6 = IsTileCollision(layer, xMin - hitboxUnkX, yMin - hitboxUnkY, collisionType);
|
||||
colResult = (colResult << 1 | col6) << 2;
|
||||
temp = xMin + hitboxUnkX;
|
||||
colResult = IsTileCollision(layer, temp, yMin, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
|
||||
colResult <<= 2;
|
||||
temp = xMin - hitboxUnkX;
|
||||
colResult |= IsTileCollision(layer, temp, yMin, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
|
||||
colResult <<= 2;
|
||||
}
|
||||
|
||||
hitboxUnkX = this->hitbox->unk2[2];
|
||||
hitboxUnkY = this->hitbox->unk2[3];
|
||||
hitboxUnkX = hb->unk2[2];
|
||||
hitboxUnkY = hb->unk2[3];
|
||||
|
||||
if (((direction - 8) & 0xf) == 0) {
|
||||
col1 = IsTileCollision(layer, xMin, yMin + hitboxUnkY, collisionType);
|
||||
col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin + hitboxUnkY, collisionType);
|
||||
col3 = IsTileCollision(layer, xMin - hitboxUnkX, yMin + hitboxUnkY, collisionType);
|
||||
yMin -= hitboxUnkY;
|
||||
col4 = IsTileCollision(layer, xMin, yMin, collisionType);
|
||||
col5 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
|
||||
colResult = ((((colResult | col1) << 1 | col2) << 1 | col3) << 2 | col4) << 1 | col5;
|
||||
col6 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
|
||||
this->collisions = ((colResult << 1 | col6) << 1);
|
||||
} else {
|
||||
if (direction - 8 < 0x10) {
|
||||
yMin += hitboxUnkY;
|
||||
col1 = IsTileCollision(layer, xMin, yMin, collisionType);
|
||||
col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
|
||||
col3 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
|
||||
this->collisions = ((((colResult | col1) << 1 | col2) << 1 | col3) << 5);
|
||||
direction -= 8;
|
||||
if (((direction)&0xf) != 0) {
|
||||
if (direction < 0x10) {
|
||||
temp = yMin + hitboxUnkY;
|
||||
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 5;
|
||||
} else {
|
||||
yMin -= hitboxUnkY;
|
||||
col1 = IsTileCollision(layer, xMin, yMin, collisionType);
|
||||
col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
|
||||
col6 = (colResult << 4 | col1) << 1 | col2;
|
||||
colResult = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
|
||||
this->collisions = ((col6 << 1 | colResult) << 1);
|
||||
temp = yMin - hitboxUnkY;
|
||||
colResult <<= 4;
|
||||
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
}
|
||||
} else {
|
||||
temp = yMin + hitboxUnkY;
|
||||
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 2;
|
||||
temp = yMin - hitboxUnkY;
|
||||
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
|
||||
colResult <<= 1;
|
||||
}
|
||||
this->collisions = colResult;
|
||||
}
|
||||
END_NONMATCH*/
|
||||
|
||||
bool32 ProcessMovementInternal(Entity* this, s32 radius, s32 direction, u32 collisionType) {
|
||||
static bool32 (*const gDirectionalMovementFunctions[])(Entity*, s32, s32, u32) = {
|
||||
|
||||
Reference in New Issue
Block a user