From eae5cb65219bccac66baeb3f1c49b2242da64a88 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 16:46:56 -0500 Subject: [PATCH 1/4] Match asm/non_matching/postman/sub_08060700.inc --- asm/non_matching/postman/sub_08060700.inc | 51 ----------------------- src/npc/postman.c | 34 ++++++++------- 2 files changed, 19 insertions(+), 66 deletions(-) delete mode 100644 asm/non_matching/postman/sub_08060700.inc diff --git a/asm/non_matching/postman/sub_08060700.inc b/asm/non_matching/postman/sub_08060700.inc deleted file mode 100644 index 326e221b..00000000 --- a/asm/non_matching/postman/sub_08060700.inc +++ /dev/null @@ -1,51 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, lr} - ldr r3, _0806074C @ =gUnk_0810A918 - adds r2, r0, #0 - adds r2, #0x68 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - lsls r2, r2, #2 - adds r2, r2, r3 - ldr r2, [r2] - adds r3, r0, #0 - adds r3, #0x69 - ldrb r3, [r3] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - adds r2, r2, r3 - movs r3, #0 - ldrsb r3, [r2, r3] - lsls r3, r3, #2 - ldr r2, _08060750 @ =gUnk_0810A66C - adds r3, r3, r2 - ldr r4, _08060754 @ =gRoomControls - movs r5, #0 - ldrsh r2, [r3, r5] - ldrh r5, [r4, #6] - adds r2, r2, r5 - movs r5, #2 - ldrsh r3, [r3, r5] - ldrh r4, [r4, #8] - adds r3, r3, r4 - bl sub_0807DEDC - ldr r2, _08060758 @ =gUnk_02033280 - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, r5, pc} - .align 2, 0 -_0806074C: .4byte gUnk_0810A918 -_08060750: .4byte gUnk_0810A66C -_08060754: .4byte gRoomControls -_08060758: .4byte gUnk_02033280 - .syntax divided \ No newline at end of file diff --git a/src/npc/postman.c b/src/npc/postman.c index d920cba8..c26dc457 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -4,6 +4,7 @@ #include "npc.h" #include "textbox.h" #include "link.h" +#include "room.h" #include "structures.h" typedef struct { @@ -34,10 +35,16 @@ extern void sub_0800451C(Entity*); extern void sub_08078784(Entity*, u32); extern void sub_0807DEDC(Entity*, u32, u32, u32); +typedef struct { + s16 x; + s16 y; +} Coords16; + +extern Coords16 gUnk_0810A66C[]; +extern s8* gUnk_0810A918[]; + extern void (*const gUnk_0810AA24[])(Entity*); extern u32 gUnk_0810AA30[]; -extern u32** gUnk_0810A66C; -extern u32 gUnk_0810A918[]; extern struct_02033280 gUnk_02033280; void Postman(Entity* this) { @@ -208,21 +215,18 @@ void sub_080606D8(Entity* this) ShowNPCDialogue(this, &gUnk_0810AA30[iVar1 * 2]); } -#if 0 -void sub_08060700(Entity *arg0, u32 arg1) +void sub_08060700(Entity *entity, u32 arg1) { - sub_0807DEDC(arg0,arg1, - gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginX], - gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginY + 2]); - gUnk_02033280.unk |= 1; -} -#endif -NAKED void sub_08060700(Entity *arg0, u32 arg1) { - asm(".include \"asm/non_matching/postman/sub_08060700.inc\""); + s8* var0 = gUnk_0810A918[(s8)entity->field_0x68.HALF.LO]; + Coords16* coords = &gUnk_0810A66C[var0[(s8)entity->field_0x68.HALF.HI]]; + u32 x = coords->x + gRoomControls.roomOriginX; + u32 y = coords->y + gRoomControls.roomOriginY; + sub_0807DEDC(entity, arg1, x, y); + gUnk_02033280.unk |= 1; } void sub_0806075C(Entity *this) { - this->field_0x68.HALF.LO = 0xb; - this->field_0x68.HALF.HI = 0xff; -} \ No newline at end of file + this->field_0x68.HALF.LO = 0xb; + this->field_0x68.HALF.HI = 0xff; +} From 57198666432a4ab60588f7aed33cdd5f2b84ae93 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 17:33:23 -0500 Subject: [PATCH 2/4] Match bigGoron/sub_0806CF30 --- asm/non_matching/bigGoron/sub_0806CF30.inc | 115 --------------------- src/npc/bigGoron.c | 54 ++++------ 2 files changed, 21 insertions(+), 148 deletions(-) delete mode 100644 asm/non_matching/bigGoron/sub_0806CF30.inc diff --git a/asm/non_matching/bigGoron/sub_0806CF30.inc b/asm/non_matching/bigGoron/sub_0806CF30.inc deleted file mode 100644 index 49f33c3c..00000000 --- a/asm/non_matching/bigGoron/sub_0806CF30.inc +++ /dev/null @@ -1,115 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _0806CF5E - movs r0, #1 - strb r0, [r5, #0xc] - strb r0, [r5, #0xd] - ldrh r1, [r5, #0x2e] - adds r0, r5, #0 - adds r0, #0x68 - strh r1, [r0] - adds r0, r5, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r5, #0 - bl sub_0806D0B0 - adds r0, r5, #0 - bl sub_0807DD64 - b _0806CF6C -_0806CF5E: - adds r0, r5, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r5, #0 - bl sub_0807DDE4 -_0806CF6C: - ldrb r0, [r5, #0xd] - cmp r0, #2 - beq _0806CFD4 - cmp r0, #2 - bgt _0806D000 - cmp r0, #0 - blt _0806D000 - ldr r0, _0806CFCC @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0806D000 - ldr r0, _0806CFD0 @ =gLinkEntity - movs r1, #0x2e - ldrsh r2, [r0, r1] - ldrh r3, [r5, #0x2e] - movs r4, #0x2e - ldrsh r1, [r5, r4] - adds r4, r0, #0 - cmp r2, r1 - bge _0806CFA8 - adds r0, r5, #0 - adds r0, #0x68 - ldrh r0, [r0] - subs r0, #0x20 - cmp r0, r1 - bge _0806CFA8 - subs r0, r3, #1 - strh r0, [r5, #0x2e] -_0806CFA8: - movs r3, #0x2e - ldrsh r1, [r4, r3] - ldrh r2, [r5, #0x2e] - movs r4, #0x2e - ldrsh r0, [r5, r4] - cmp r1, r0 - ble _0806D000 - adds r0, r5, #0 - adds r0, #0x68 - ldrh r0, [r0] - adds r0, #0x20 - movs r3, #0x2e - ldrsh r1, [r5, r3] - cmp r0, r1 - ble _0806D000 - adds r0, r2, #1 - strh r0, [r5, #0x2e] - b _0806D000 - .align 2, 0 -_0806CFCC: .4byte gScreenTransition -_0806CFD0: .4byte gLinkEntity -_0806CFD4: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0806D000 - bl Random - adds r4, r0, #0 - ldr r1, _0806D008 @ =gUnk_081140CC - movs r0, #3 - ands r0, r4 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - bl PlaySFX - movs r0, #7 - ands r4, r0 - lsls r4, r4, #4 - adds r4, #0x80 - strb r4, [r5, #0xe] -_0806D000: - adds r0, r5, #0 - bl sub_0806D02C - pop {r4, r5, pc} - .align 2, 0 -_0806D008: .4byte gUnk_081140CC - .syntax divided \ No newline at end of file diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index 5096dfa0..3b3a5101 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -1,11 +1,11 @@ #include "global.h" #include "entity.h" #include "link.h" +#include "structures.h" extern void (*gUnk_081140D4[])(Entity*); extern u16 gUnk_081140CC[]; -extern u32 gScreenTransition; extern void sub_0805E3A0(Entity*, u32); extern void sub_0806D0B0(Entity*); extern void sub_0807DD64(Entity*); @@ -20,16 +20,11 @@ void BigGoron(Entity* this) { gUnk_081140D4[this->entityType.form](this); } -#ifdef NON_MATCHING void sub_0806CF30(Entity* this) { - u8 bVar1; - u32 uVar2; - int iVar3; - if (this->action == 0) { this->action = 1; this->previousActionFlag = 1; - this->field_0x68 = (this->x).HALF.HI; + this->field_0x68.HWORD = this->x.HALF.HI; sub_0805E3A0(this, 2); sub_0806D0B0(this); sub_0807DD64(this); @@ -37,39 +32,32 @@ void sub_0806CF30(Entity* this) { sub_0807DDAC(this, 0); sub_0807DDE4(this); } - if (this->previousActionFlag != 2) { - if (this->previousActionFlag < 3) { - if ((gScreenTransition & 3) == 0) { - iVar3 = this->x.HALF.HI; - if (gLinkEntity.x.HALF.HI < iVar3) { - if ((this->field_0x68 - 32) < iVar3) { - this->x.HALF.HI = -1; - } + switch (this->previousActionFlag) { + case 0: + case 1: + if (gScreenTransition.frameCount % 4 == 0) { + if (gLinkEntity.x.HALF.HI < this->x.HALF.HI && this->field_0x68.HWORD - 32 < this->x.HALF.HI) { + this->x.HALF.HI--; } - if (this->x.HALF.HI > gLinkEntity.x.HALF.HI) { - if (this->x.HALF.HI < (this->field_0x68 + 32)) { - this->x.HALF.HI += 1; - } + if (gLinkEntity.x.HALF.HI > this->x.HALF.HI && this->field_0x68.HWORD + 32 > this->x.HALF.HI) { + this->x.HALF.HI++; } } - } - } else { - bVar1 = this->actionDelay -= 1; - if (bVar1 == 0) { - uVar2 = Random(); - PlaySFX(gUnk_081140CC[uVar2 & 3]); - this->actionDelay = ((u8)uVar2 & 7) * 10 + 128; - } + break; + case 2: + if (--this->actionDelay == 0) { + u32 uVar2 = Random(); + PlaySFX(gUnk_081140CC[uVar2 % 4]); + this->actionDelay = ((u8)uVar2 & 7) * 16; + this->actionDelay += 128; + } + break; + case 3: + break; } sub_0806D02C(this); } -#else -NAKED -void sub_0806CF30(Entity* this) { - asm(".include \"asm/non_matching/bigGoron/sub_0806CF30.inc\""); -} -#endif void sub_0806D00C(Entity* this) { Entity* pEVar1; From 5963472d01c0789b3c4b85c7a62a8643cd19fdca Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 17:38:08 -0500 Subject: [PATCH 3/4] Match cloud/sub_0809F770 --- asm/non_matching/cloud/sub_0809F770.inc | 45 ------------------------- src/object/cloud.c | 19 ++++------- 2 files changed, 6 insertions(+), 58 deletions(-) delete mode 100644 asm/non_matching/cloud/sub_0809F770.inc diff --git a/asm/non_matching/cloud/sub_0809F770.inc b/asm/non_matching/cloud/sub_0809F770.inc deleted file mode 100644 index a2c06235..00000000 --- a/asm/non_matching/cloud/sub_0809F770.inc +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0xa3 - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809F7B6 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionEntityOnTop - bl Random - ldrh r2, [r4, #0x2e] - subs r2, #0x10 - movs r3, #0x1f - adds r1, r0, #0 - ands r1, r3 - adds r2, r2, r1 - strh r2, [r4, #0x2e] - ldrh r2, [r4, #0x32] - subs r2, #0x10 - asrs r1, r0, #8 - ands r1, r3 - adds r2, r2, r1 - strh r2, [r4, #0x32] - asrs r0, r0, #0x10 - movs r1, #3 - ands r0, r1 - strb r0, [r4, #0x1e] - movs r0, #0xff - strb r0, [r4, #0x15] -_0809F7B6: - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 - .syntax divided \ No newline at end of file diff --git a/src/object/cloud.c b/src/object/cloud.c index 96ffc659..54fa6621 100644 --- a/src/object/cloud.c +++ b/src/object/cloud.c @@ -156,28 +156,21 @@ void sub_0809F700(Entity* this) { } } -#ifdef NON_MATCHING Entity* sub_0809F770(Entity* this) { Entity* cloud; - s32 uVar1; + int uVar1; cloud = CreateObject(163, 1, 0); - if (cloud != NULL) { + if (cloud) { PositionEntityOnTop(this, cloud); uVar1 = Random(); - cloud->x.HALF.HI = ((cloud->x.HALF.HI - 16) + (uVar1 >> 0)) & 31; - cloud->y.HALF.HI = ((cloud->y.HALF.HI - 16) + (uVar1 >> 8)) & 31; - cloud->animationList = (u8)(uVar1 >> 16) & 3; - cloud->direction = 255; + cloud->x.HALF.HI += ((uVar1 >> 0) & 31) - 16; + cloud->y.HALF.HI += ((uVar1 >> 8) & 31) - 16; + cloud->frameIndex = (uVar1 >> 16) & 3; + cloud->direction = 0xFF; } return cloud; } -#else -NAKED -Entity* sub_0809F770(Entity* this) { - asm(".include \"asm/non_matching/cloud/sub_0809F770.inc\""); -} -#endif void sub_0809F7BC(Entity* this) { Entity* cloud; From 122084a78eb0a1e474fc791153f054529eebb606 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 7 Aug 2020 17:45:48 -0500 Subject: [PATCH 4/4] Match festari/sub_0805FE48 --- asm/non_matching/festari/sub_0805FE48.inc | 110 ---------------------- src/npc/festari.c | 84 ++++++++--------- 2 files changed, 40 insertions(+), 154 deletions(-) delete mode 100644 asm/non_matching/festari/sub_0805FE48.inc diff --git a/asm/non_matching/festari/sub_0805FE48.inc b/asm/non_matching/festari/sub_0805FE48.inc deleted file mode 100644 index 0f7ff560..00000000 --- a/asm/non_matching/festari/sub_0805FE48.inc +++ /dev/null @@ -1,110 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0805FE80 - movs r0, #0 - strb r1, [r5, #0xc] - strb r0, [r2] - ldr r1, _0805FE7C @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r5, #0 - bl InitAnimationForceUpdate - adds r0, r5, #0 - bl sub_0806F118 - b _0805FF14 - .align 2, 0 -_0805FE7C: .4byte gLinkEntity -_0805FE80: - adds r4, r5, #0 - adds r4, #0x84 - ldr r1, [r4] - adds r0, r5, #0 - bl ExecuteScriptCommandSet - ldr r1, [r4] - adds r0, r5, #0 - bl sub_0805FF2C - adds r0, r5, #0 - adds r0, #0x80 - ldrh r3, [r0] - adds r7, r0, #0 - adds r6, r5, #0 - adds r6, #0x82 - cmp r3, #7 - bhi _0805FEC6 - ldrh r1, [r6] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805FEBA - movs r1, #0xfc - ands r1, r3 - ldrb r0, [r5, #0xf] - lsrs r0, r0, #1 - adds r3, r1, r0 - b _0805FEC6 -_0805FEBA: - movs r0, #0xfc - ands r0, r3 - ldrb r2, [r5, #0x14] - lsrs r1, r2, #1 - adds r3, r0, r1 - strb r2, [r5, #0xf] -_0805FEC6: - adds r4, r5, #0 - adds r4, #0x58 - ldrb r0, [r4] - cmp r3, r0 - beq _0805FED8 - adds r0, r5, #0 - adds r1, r3, #0 - bl InitAnimationForceUpdate -_0805FED8: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0805FF02 - ldrb r0, [r4] - cmp r0, #8 - beq _0805FEFE - cmp r0, #8 - blt _0805FF02 - cmp r0, #0xc - bgt _0805FF02 - cmp r0, #0xa - blt _0805FF02 -_0805FEFE: - movs r0, #0 - strh r0, [r7] -_0805FF02: - ldrh r1, [r6] - mvns r0, r1 - adds r0, #1 - ands r1, r0 - cmp r1, #2 - bne _0805FF14 - adds r0, r5, #0 - bl sub_0806ED78 -_0805FF14: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided \ No newline at end of file diff --git a/src/npc/festari.c b/src/npc/festari.c index b362359e..310db3fa 100644 --- a/src/npc/festari.c +++ b/src/npc/festari.c @@ -1,5 +1,6 @@ #include "global.h" #include "entity.h" +#include "functions.h" #include "npc.h" #include "link.h" @@ -30,58 +31,53 @@ void sub_0805FE10(Entity *this) sub_0807DD50(this); } -#if NON_MATCHING void sub_0805FE48(Entity *this) { - u8 bVar1; - u16 uVar2; - u32 uVar3; - u32 uVar4; + u8 bVar1; + u16 uVar2; + u32 uVar3; + u32 uVar4; - if (this->interactType == 2) { - this->action = 2; - this->interactType = 0; - InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); - sub_0806F118(this); - } - else { - ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh); - sub_0805FF2C(this, *(void **)&this->cutsceneBeh); - if (this->field_0x80 < 8) { - if ((this->field_0x82 & 1) != 0) { - uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1); - } - else { - uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1); - this->field_0xf = this->animationState; - } + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_0806F118(this); } - if (uVar4 != this->animIndex) { - InitAnimationForceUpdate(this, uVar4); - } - UpdateAnimationSingleFrame(this); + else { + ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh); + sub_0805FF2C(this, *(void **)&this->cutsceneBeh); + uVar4 = this->field_0x80.HWORD; + if (uVar4 < 8) { + if ((this->field_0x82.HWORD & 1) != 0) { + uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1); + } + else { + uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1); + this->field_0xf = this->animationState; + } + } + if (uVar4 != this->animIndex) { + InitAnimationForceUpdate(this, uVar4); + } + UpdateAnimationSingleFrame(this); - if (this->frames.b.f3) - { - switch (this->animIndex) { - case 8: - case 10: - case 11: - case 12: - this->field_0x80 = 0; + if (this->frames.b.f3) + { + switch (this->animIndex) { + case 8: + case 10: + case 11: + case 12: + this->field_0x80.HWORD = 0; + break; + } + } + if ((this->field_0x82.HWORD & (~this->field_0x82.HWORD + 1)) == 2) { + sub_0806ED78(this); } } - if ((this->field_0x82 & (~this->field_0x82 + 1)) == 2) { - sub_0806ED78(this); - } - } } -#else -NAKED -void sub_0805FE48(Entity *this) { - asm(".include \"asm/non_matching/festari/sub_0805FE48.inc\""); -} -#endif void sub_0805FF18(Entity *this) {