From 9c1a23867586a18ead7b7fb6bb5f17c4b71ee766 Mon Sep 17 00:00:00 2001 From: Behemoth Date: Tue, 25 Aug 2020 20:03:07 +0200 Subject: [PATCH] match non-matching railtrack function --- asm/non_matching/railtrack/sub_08085394.inc | 87 --------------------- src/object/railtrack.c | 60 ++++++-------- 2 files changed, 26 insertions(+), 121 deletions(-) delete mode 100644 asm/non_matching/railtrack/sub_08085394.inc diff --git a/asm/non_matching/railtrack/sub_08085394.inc b/asm/non_matching/railtrack/sub_08085394.inc deleted file mode 100644 index 9a2ba760..00000000 --- a/asm/non_matching/railtrack/sub_08085394.inc +++ /dev/null @@ -1,87 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r7, r0, #0 - ldr r0, _08085430 @ =gUnk_081205E0 - ldrb r2, [r7, #0x14] - lsrs r2, r2, #1 - lsls r2, r2, #1 - adds r0, r2, r0 - ldrh r0, [r0] - mov sl, r0 - ldr r0, _08085434 @ =gUnk_080B4488 - adds r2, r2, r0 - ldr r0, [r7, #0x70] - mov sb, r0 - movs r1, #0x2e - ldrsh r4, [r7, r1] - ldr r1, _08085438 @ =gRoomControls - ldrh r0, [r1, #6] - subs r4, r4, r0 - asrs r4, r4, #4 - movs r3, #0x3f - ands r4, r3 - movs r5, #0x32 - ldrsh r0, [r7, r5] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r4, r0 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - mov r8, r2 - lsls r5, r2, #1 - mov r1, sb - subs r0, r1, r5 - ldrh r1, [r0] - adds r0, r7, #0 - adds r0, #0x74 - strh r1, [r0] - subs r1, r4, r2 - adds r6, r7, #0 - adds r6, #0x38 - ldrb r2, [r6] - mov r0, sl - bl SetTile - mov r1, sb - ldrh r0, [r1] - adds r1, r7, #0 - adds r1, #0x76 - strh r0, [r1] - ldrb r2, [r6] - mov r0, sl - adds r1, r4, #0 - bl SetTile - add r5, sb - ldrh r1, [r5] - adds r0, r7, #0 - adds r0, #0x78 - strh r1, [r0] - add r4, r8 - ldrb r2, [r6] - mov r0, sl - adds r1, r4, #0 - bl SetTile - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08085430: .4byte gUnk_081205E0 -_08085434: .4byte gUnk_080B4488 -_08085438: .4byte gRoomControls - .syntax divided \ No newline at end of file diff --git a/src/object/railtrack.c b/src/object/railtrack.c index 05b8a2aa..3cf693d2 100644 --- a/src/object/railtrack.c +++ b/src/object/railtrack.c @@ -101,55 +101,47 @@ void sub_08085308(Entity* this) { } } -#if 0 -void sub_08085394(Entity *this) -{ +void sub_08085394(Entity* this) { u32 uVar1; - u16 *layerData; - u32 iVar3; - u32 uVar4; - u8 *pbVar5; + u16* layerData; + u32 tile; + s8 off; uVar1 = gUnk_081205E0[this->animationState / 2]; - iVar3 = this->animationState / 2; - layerData = *(u16 **)&this->field_0x70; - uVar4 = COORD_TO_TILE(this); - this->field_0x74.HWORD = layerData[gUnk_080B4488[iVar3]]; - pbVar5 = &this->collisionLayer; - SetTile(uVar1, uVar4 - iVar3, *pbVar5); - this->field_0x76 = layerData[0]; - SetTile(uVar1,uVar4, *pbVar5); - *(u16 *)&this->field_0x78 = layerData[iVar3]; - SetTile(uVar1,uVar4 + iVar3, *pbVar5); -} -#endif + off = gUnk_080B4488[this->animationState / 2][0]; + layerData = (u16*)this->field_0x70.WORD; + tile = COORD_TO_TILE(this); -NAKED -void sub_08085394(Entity* this) { - asm(".include \"asm/non_matching/railtrack/sub_08085394.inc\""); + this->field_0x74.HWORD = *(layerData - off); + SetTile(uVar1, tile - off, this->collisionLayer); + + this->field_0x76.HWORD = layerData[0x0]; + SetTile(uVar1, tile - 0x0, this->collisionLayer); + + this->field_0x78.HWORD = layerData[off]; + SetTile(uVar1, tile + off, this->collisionLayer); } -void sub_0808543C(Entity *this) -{ - s8 *cVar1; - u32 uVar2; - s8 temp; +void sub_0808543C(Entity* this) { + s8* cVar1; + u32 uVar2; + s8 temp; - temp = gUnk_080B4488[this->animationState / 2][0]; - uVar2 = COORD_TO_TILE(this); - SetTile(this->field_0x74.HWORD, uVar2 - temp, this->collisionLayer); - SetTile(this->field_0x76.HWORD, uVar2, this->collisionLayer); - SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer); + temp = gUnk_080B4488[this->animationState / 2][0]; + uVar2 = COORD_TO_TILE(this); + SetTile(this->field_0x74.HWORD, uVar2 - temp, this->collisionLayer); + SetTile(this->field_0x76.HWORD, uVar2, this->collisionLayer); + SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer); } -u32 sub_080854A8(Entity *this) { +u32 sub_080854A8(Entity* this) { u16 var0; u16* var1; s8* var2; var0 = gUnk_081205E0[this->animationState / 2]; var2 = gUnk_080B4488[this->animationState / 2]; - var1 = (u16 *)this->field_0x70.WORD; + var1 = (u16*)this->field_0x70.WORD; if (var0 != *(var1 - var2[0])) { return TRUE; }