diff --git a/asm/non_matching/postman/sub_080608E4.inc b/asm/non_matching/postman/sub_080608E4.inc deleted file mode 100644 index 52c2bf03..00000000 --- a/asm/non_matching/postman/sub_080608E4.inc +++ /dev/null @@ -1,79 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r0, #0 - str r0, [r5, #0x14] - ldr r0, [r4, #0x34] - cmp r0, #0 - blt _08060970 - adds r0, r4, #0 - adds r0, #0x38 - ldrb r1, [r0] - ldr r6, _08060974 @ =gPlayerEntity - cmp r1, #1 - bne _0806090A - adds r0, r6, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #2 - beq _08060970 -_0806090A: - cmp r1, #2 - bne _08060918 - adds r0, r6, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - beq _08060970 -_08060918: - ldr r2, [r5, #4] - lsls r2, r2, #4 - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - ldr r1, _08060978 @ =gUnk_0810AA70 - adds r0, r0, r1 - adds r2, r2, r0 - movs r0, #0x2e - ldrsh r1, [r4, r0] - movs r0, #0 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - movs r7, #0x32 - ldrsh r3, [r4, r7] - movs r0, #1 - ldrsb r0, [r2, r0] - adds r3, r3, r0 - movs r7, #0x2e - ldrsh r0, [r6, r7] - subs r1, r0, r1 - movs r7, #0x32 - ldrsh r0, [r6, r7] - subs r3, r0, r3 - movs r0, #2 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - ldrb r2, [r2, #3] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r3, r3, r2 - lsls r0, r0, #1 - cmp r0, r1 - bls _08060970 - lsls r0, r2, #1 - cmp r0, r3 - bls _08060970 - movs r0, #1 - str r0, [r5, #0x14] - adds r1, r4, #0 - adds r1, #0x6a - ldrh r0, [r1] - adds r0, #2 - strh r0, [r1] -_08060970: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08060974: .4byte gPlayerEntity -_08060978: .4byte gUnk_0810AA70 - .syntax divided diff --git a/src/npc/postman.c b/src/npc/postman.c index d80f92c4..37d8cf43 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -9,7 +9,7 @@ extern void sub_080604DC(Entity*); extern void sub_080606D8(Entity*); extern void sub_080606C0(Entity*); -extern const s8 gUnk_0810AA70[]; +extern const s8 gUnk_0810AA70[][4][4]; typedef struct { s16 x; @@ -253,22 +253,25 @@ NONMATCH("asm/non_matching/postman/sub_0806076C.inc", } END_NONMATCH -NONMATCH("asm/non_matching/postman/sub_080608E4.inc", - void sub_080608E4(Entity* this, ScriptExecutionContext* context)) { +void sub_080608E4(Entity* this, ScriptExecutionContext* context) { context->condition = 0; if (this->z.WORD >= 0) { if ((this->collisionLayer != 1 || gPlayerEntity.collisionLayer != 2) && (this->collisionLayer != 2 || gPlayerEntity.collisionLayer != 1)) { - const s8* ptr = &gUnk_0810AA70[context->intVariable * 16 + (this->animationState >> 1) * 4]; - if (ptr[0] + gPlayerEntity.x.HALF.HI + ptr[2] - this->x.HALF.HI < ptr[2] * 2 && - ptr[1] + gPlayerEntity.y.HALF.HI + ptr[3] - this->y.HALF.HI < ptr[3] * 2) { + const s8* ptr = gUnk_0810AA70[context->intVariable][this->animationState >> 1]; + u32 x = this->x.HALF.HI + ptr[0]; + u32 y = this->y.HALF.HI + ptr[1]; + x = gPlayerEntity.x.HALF.HI - x; + y = gPlayerEntity.y.HALF.HI - y; + x += ptr[2]; + y += ptr[3]; + if (ptr[2] * 2 > x && ptr[3] * 2 > y) { context->condition = 1; this->field_0x6a.HWORD += 2; } } } } -END_NONMATCH void Postman_Fusion(Entity* this) { if (this->action == 0) {