diff --git a/asm/non_matching/postman/sub_0806076C.inc b/asm/non_matching/postman/sub_0806076C.inc deleted file mode 100644 index d82f1b9f..00000000 --- a/asm/non_matching/postman/sub_0806076C.inc +++ /dev/null @@ -1,186 +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, #8 - adds r7, r0, #0 - mov sb, r1 - ldr r0, [r7, #0x34] - cmp r0, #0 - bge _08060790 - ldr r1, _0806078C @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] - b _080608D8 - .align 2, 0 -_0806078C: .4byte gActiveScriptInfo -_08060790: - adds r4, r7, #0 - adds r4, #0x69 - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - adds r5, r7, #0 - adds r5, #0x38 - movs r0, #1 - strb r0, [r5] - adds r0, r7, #0 - bl sub_080606C0 - ldr r1, _080607DC @ =gUnk_0810A918 - adds r2, r7, #0 - adds r2, #0x68 - movs r0, #0 - ldrsb r0, [r2, r0] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r6, [r0] - movs r0, #0 - ldrsb r0, [r4, r0] - adds r6, r6, r0 - mov sl, r4 - mov r8, r2 -_080607C2: - ldrb r0, [r6] - adds r0, #5 - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #5 - bls _080607D0 - b _080608D8 -_080607D0: - lsls r0, r0, #2 - ldr r1, _080607E0 @ =_080607E4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080607DC: .4byte gUnk_0810A918 -_080607E0: .4byte _080607E4 -_080607E4: @ jump table - .4byte _08060846 @ case 0 - .4byte _08060836 @ case 1 - .4byte _08060830 @ case 2 - .4byte _0806082A @ case 3 - .4byte _0806081E @ case 4 - .4byte _080607FC @ case 5 -_080607FC: - adds r6, #1 - movs r5, #0 - ldrsb r5, [r6, r5] - adds r6, #1 - bl Random - adds r1, r5, #0 - bl __modsi3 - adds r0, r6, r0 - ldrb r0, [r0] - movs r1, #0 - mov r2, r8 - strb r0, [r2] - mov r3, sl - strb r1, [r3] - b _080608D8 -_0806081E: - adds r1, r7, #0 - adds r1, #0x6a - movs r0, #0x96 - lsls r0, r0, #1 - strh r0, [r1] - b _080608CC -_0806082A: - movs r0, #1 - strb r0, [r5] - b _080608CC -_08060830: - movs r0, #2 - strb r0, [r5] - b _080608CC -_08060836: - movs r0, #0x1e - mov r4, sb - strh r0, [r4, #0x10] - ldrb r1, [r7, #0x18] - subs r0, #0x22 - ands r0, r1 - strb r0, [r7, #0x18] - b _080608CC -_08060846: - adds r6, #1 - movs r5, #0 - ldrsb r5, [r6, r5] - adds r6, #1 - bl Random - adds r1, r5, #0 - bl __modsi3 - str r0, [sp, #4] - movs r2, #0 - cmp r2, r5 - bhs _080608B8 - ldr r0, _080608C0 @ =gRoomControls - mov sb, r0 -_08060864: - ldr r1, [sp, #4] - adds r0, r6, r1 - ldrb r0, [r0] - mov r3, r8 - strb r0, [r3] - movs r0, #0 - ldrsb r0, [r3, r0] - lsls r0, r0, #2 - ldr r4, _080608C4 @ =gUnk_0810A918 - adds r0, r0, r4 - ldr r0, [r0] - movs r1, #0 - ldrsb r1, [r0, r1] - lsls r1, r1, #2 - ldr r0, _080608C8 @ =gUnk_0810A66C - adds r1, r1, r0 - ldrh r0, [r1] - mov r3, sb - ldrh r3, [r3, #6] - adds r0, r0, r3 - strh r0, [r7, #0x2e] - ldrh r0, [r1, #2] - mov r4, sb - ldrh r4, [r4, #8] - adds r0, r0, r4 - strh r0, [r7, #0x32] - adds r0, r7, #0 - str r2, [sp] - bl CheckOnScreen - cmp r0, #0 - beq _080608B8 - ldr r0, [sp, #4] - adds r0, #1 - adds r1, r5, #0 - bl __modsi3 - str r0, [sp, #4] - ldr r2, [sp] - adds r2, #1 - cmp r2, r5 - blo _08060864 -_080608B8: - movs r0, #0 - mov r1, sl - strb r0, [r1] - b _080608D8 - .align 2, 0 -_080608C0: .4byte gRoomControls -_080608C4: .4byte gUnk_0810A918 -_080608C8: .4byte gUnk_0810A66C -_080608CC: - mov r2, sl - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r6, #1 - b _080607C2 -_080608D8: - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/src/npc/postman.c b/src/npc/postman.c index 37d8cf43..c966ff9d 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -194,25 +194,32 @@ void sub_0806075C(Entity* this) { this->field_0x68.HALF.HI = 0xff; } -NONMATCH("asm/non_matching/postman/sub_0806076C.inc", - void sub_0806076C(Entity* this, ScriptExecutionContext* context)) { - s8* p; - u32 tmp, size; - int i; +void sub_0806076C(Entity* this, ScriptExecutionContext* context) { + s32 cVar2; + int iVar4; + u32 uVar6; + s32 uVar9; + int local_24; + Coords16* ptr; + s8* pbVar10; if (this->z.WORD < 0) { gActiveScriptInfo.commandSize = 0; return; } - this->field_0x68.HALF.HI++; this->collisionLayer = 1; sub_080606C0(this); - p = &gUnk_0810A918[this->field_0x68.HALF.LO][this->field_0x68.HALF.HI]; + pbVar10 = gUnk_0810A918[(s8)this->field_0x68.HALF.LO]; + pbVar10 += (s8)this->field_0x68.HALF.HI; do { - switch (p[0] + 5) { + switch ((s8)(pbVar10[0] + 5)) { case 5: - this->field_0x68.HALF.LO = p[(s32)Random() % p[1] + 2]; + pbVar10++; + uVar9 = pbVar10[0]; + pbVar10++; + iVar4 = (s32)Random() % uVar9; + this->field_0x68.HALF.LO = pbVar10[iVar4]; this->field_0x68.HALF.HI = 0; return; case 4: @@ -225,33 +232,33 @@ NONMATCH("asm/non_matching/postman/sub_0806076C.inc", this->collisionLayer = 2; break; case 1: - context->wait = 30; + context->wait = 0x1e; this->spriteSettings.draw = 0; break; case 0: - size = p[1]; - tmp = Random() % size; - for (i = 0; i < size; ++i) { - this->field_0x68.HALF.HI = p[i + 2]; - this->x.HALF.HI = - gUnk_0810A66C[gUnk_0810A918[this->field_0x68.HALF.LO][0]].x + gRoomControls.origin_x; - this->y.HALF.HI = - gUnk_0810A66C[gUnk_0810A918[this->field_0x68.HALF.LO][0]].y + gRoomControls.origin_y; - if (!CheckOnScreen(this)) { + pbVar10++; + uVar9 = *pbVar10++; + local_24 = ((s32)Random()) % uVar9; + + for (uVar6 = 0; uVar6 < uVar9; uVar6++) { + this->field_0x68.HALF.LO = pbVar10[local_24]; + cVar2 = gUnk_0810A918[(s8)this->field_0x68.HALF.LO][0]; + ptr = &gUnk_0810A66C[cVar2]; + this->x.HALF_U.HI = gRoomControls.origin_x + ptr->x; + this->y.HALF_U.HI = gRoomControls.origin_y + ptr->y; + if (CheckOnScreen(this) == 0) break; - } - tmp = (tmp + 1) % size; + local_24 = (s32)(local_24 + 1) % uVar9; } - this->field_0x68.HALF.LO = 0; + this->field_0x68.HALF.HI = 0; return; default: return; } - this->field_0x68.HALF.LO++; - p++; - } while (1); + this->field_0x68.HALF.HI++; + pbVar10++; + } while (TRUE); } -END_NONMATCH void sub_080608E4(Entity* this, ScriptExecutionContext* context) { context->condition = 0;