diff --git a/asm/non_matching/railtrack/sub_080854A8.inc b/asm/non_matching/railtrack/sub_080854A8.inc deleted file mode 100644 index aa5bed89..00000000 --- a/asm/non_matching/railtrack/sub_080854A8.inc +++ /dev/null @@ -1,36 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r2, _080854E0 @ =gUnk_081205E0 - ldrb r1, [r0, #0x14] - lsrs r1, r1, #1 - lsls r1, r1, #1 - adds r2, r1, r2 - ldrh r3, [r2] - adds r4, r3, #0 - ldr r2, _080854E4 @ =gUnk_080B4488 - adds r1, r1, r2 - ldr r2, [r0, #0x70] - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r1, r0, #1 - subs r0, r2, r1 - ldrh r0, [r0] - cmp r3, r0 - bne _080854E8 - ldrh r0, [r2] - cmp r3, r0 - bne _080854E8 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r4, r0 - bne _080854E8 - movs r0, #0 - b _080854EA - .align 2, 0 -_080854E0: .4byte gUnk_081205E0 -_080854E4: .4byte gUnk_080B4488 -_080854E8: - movs r0, #1 -_080854EA: - pop {r4, pc} - .syntax divided \ No newline at end of file diff --git a/src/object/railtrack.c b/src/object/railtrack.c index 95c418f4..f2e9a10a 100644 --- a/src/object/railtrack.c +++ b/src/object/railtrack.c @@ -12,8 +12,8 @@ extern void SetTile(u32, u32, u32); extern void (*const gUnk_081205D0[])(Entity*); +extern s8 gUnk_080B4488[][2]; extern u16 gUnk_081205E0[]; -extern s8 gUnk_080B4488[]; void Railtrack(Entity* this) { gUnk_081205D0[this->action](this); @@ -135,14 +135,30 @@ void sub_0808543C(Entity *this) u32 uVar2; s8 temp; - temp = gUnk_080B4488[(this->animationState >> 1) << 1]; + temp = gUnk_080B4488[this->animationState / 2][0]; uVar2 = COORD_TO_TILE(this); SetTile(this->field_0x74, uVar2 - temp, this->collisionLayer); SetTile(this->field_0x76, uVar2, this->collisionLayer); SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer); } -NAKED u32 sub_080854A8(Entity *this) { - asm(".include \"asm/non_matching/railtrack/sub_080854A8.inc\""); + u16 var0; + u16* var1; + s8* var2; + + var0 = gUnk_081205E0[this->animationState / 2]; + var2 = gUnk_080B4488[this->animationState / 2]; + var1 = (u16 *)this->field_0x70.WORD; + if (var0 != *(var1 - var2[0])) { + return TRUE; + } + if (var0 != *var1) { + return TRUE; + } + if (var0 != *(var1 + var2[0])) { + return TRUE; + } + + return FALSE; } \ No newline at end of file