From e4898c53d486bb4aa16dcbda74b310f18c39e02a Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:17:10 +0000 Subject: [PATCH 01/13] Match CreateUIElement --- asm/non_matching/ui/CreateUIElement.inc | 41 ------------------------- src/ui.c | 22 +++++++------ 2 files changed, 12 insertions(+), 51 deletions(-) delete mode 100644 asm/non_matching/ui/CreateUIElement.inc diff --git a/asm/non_matching/ui/CreateUIElement.inc b/asm/non_matching/ui/CreateUIElement.inc deleted file mode 100644 index 590a1e16..00000000 --- a/asm/non_matching/ui/CreateUIElement.inc +++ /dev/null @@ -1,41 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r6, r1, #0 - movs r3, #0 - ldr r7, _0801CAA8 @ =gUnk_0200AF34 - movs r0, #1 - mov ip, r0 - ldr r1, _0801CAAC @ =gUIElementDefinitions - lsls r0, r5, #4 - adds r4, r0, r1 -_0801CA80: - lsls r0, r3, #5 - adds r1, r0, r7 - ldrb r2, [r1] - movs r0, #1 - ands r0, r2 - cmp r0, #0 - bne _0801CAB0 - strb r5, [r1, #1] - strb r6, [r1, #2] - movs r0, #0xff - strb r0, [r1, #0x10] - mov r0, ip - orrs r0, r2 - strb r0, [r1] - ldrh r0, [r4, #4] - strh r0, [r1, #0x1a] - ldrb r0, [r4, #0xc] - strb r0, [r1, #3] - b _0801CAB6 - .align 2, 0 -_0801CAA8: .4byte gUnk_0200AF34 -_0801CAAC: .4byte gUIElementDefinitions -_0801CAB0: - adds r3, #1 - cmp r3, #0x17 - bls _0801CA80 -_0801CAB6: - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/src/ui.c b/src/ui.c index 6388e564..f412560d 100644 --- a/src/ui.c +++ b/src/ui.c @@ -592,27 +592,29 @@ void DrawKeys(void) { } } -NONMATCH("asm/non_matching/ui/CreateUIElement.inc", void CreateUIElement(u32 type, u32 type2)) { - u8 bVar1; +void CreateUIElement(u32 type, u32 type2) { u32 index; + UIElement* new_var; UIElement* element; - UIElementDefinition* definition; for (index = 0; index < MAX_UI_ELEMENTS; index++) { - element = &gUnk_0200AF00.elements[index]; - if (element->used == 0) { - definition = &gUIElementDefinitions[type]; - element->type = (u8)type; + + element = gUnk_0200AF00.elements; + element += index; + + if (!element->used) { + element->type = type; element->type2 = type2; element->frameIndex = 0xff; element->used = 1; - element->unk_1a = definition->unk_4; - element->buttonElementId = definition->buttonElementId; + element->unk_1a = gUIElementDefinitions[type].unk_4; + // Permuter trickery. TODO find something more senseful? + index = type; + element->buttonElementId = gUIElementDefinitions[index].buttonElementId; return; } } } -END_NONMATCH void sub_0801CAB8(UIElement* element, Frame* frame) { element->framePtr = frame; From c495247e06f9da2aefcdb04d96b6857532feb3f8 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:17:28 +0000 Subject: [PATCH 02/13] Match FrozenOctorok_Action1 --- .../frozenOctorok/FrozenOctorok_Action1.inc | 267 ------------------ src/object/frozenOctorok.c | 85 +++++- 2 files changed, 83 insertions(+), 269 deletions(-) delete mode 100644 asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc diff --git a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc deleted file mode 100644 index 4eb27cb8..00000000 --- a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc +++ /dev/null @@ -1,267 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #7 - bls _0809C5D0 - b _0809C7DE -_0809C5D0: - lsls r0, r0, #2 - ldr r1, _0809C5DC @ =_0809C5E0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809C5DC: .4byte _0809C5E0 -_0809C5E0: @ jump table - .4byte _0809C738 @ case 0 - .4byte _0809C600 @ case 1 - .4byte _0809C600 @ case 2 - .4byte _0809C600 @ case 3 - .4byte _0809C600 @ case 4 - .4byte _0809C6B8 @ case 5 - .4byte _0809C7B4 @ case 6 - .4byte _0809C7D2 @ case 7 -_0809C600: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl SortEntityBelow - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xd] - adds r6, r5, #0 - adds r6, #0x84 - cmp r0, #6 - bne _0809C630 - movs r0, #0xf - ldrsb r0, [r5, r0] - cmp r0, #0 - bge _0809C624 - ldr r0, [r6] - ldrb r0, [r0] - rsbs r0, r0, #0 - b _0809C628 -_0809C624: - ldr r0, [r6] - ldrb r0, [r0] -_0809C628: - strb r0, [r5, #0xf] - adds r0, r5, #0 - bl sub_0809CBE4 -_0809C630: - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x76 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - adds r3, r0, #0 - lsls r0, r3, #0xd - lsrs r3, r0, #8 - ldr r0, _0809C660 @ =0xFFFFE000 - adds r3, r3, r0 - ldr r0, [r6] - ldr r0, [r0, #8] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #1 - bne _0809C664 - movs r1, #0x88 - lsls r1, r1, #6 - adds r3, r3, r1 - b _0809C66C - .align 2, 0 -_0809C660: .4byte 0xFFFFE000 -_0809C664: - lsrs r0, r3, #1 - movs r1, #0x88 - lsls r1, r1, #6 - adds r3, r0, r1 -_0809C66C: - adds r2, r4, #0 - adds r2, #0x7b - ldr r1, _0809C6B0 @ =gUnk_08123E18 - ldrb r0, [r5, #0xa] - subs r0, #1 - adds r0, r0, r1 - ldrb r0, [r0] - ldrb r2, [r2] - adds r0, r0, r2 - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r0, r5, #0 - adds r2, r3, #0 - bl sub_0809CB70 - ldr r2, [r5, #0x50] - adds r2, #0x7b - ldr r1, _0809C6B4 @ =gUnk_08123E1C - ldrb r0, [r5, #0xa] - subs r0, #1 - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r2, [r2] - adds r1, r1, r2 - adds r0, r5, #0 - adds r0, #0x79 - ldrb r0, [r0] - adds r0, r0, r1 - adds r1, r5, #0 - adds r1, #0x7b - strb r0, [r1] - b _0809C7BC - .align 2, 0 -_0809C6B0: .4byte gUnk_08123E18 -_0809C6B4: .4byte gUnk_08123E1C -_0809C6B8: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl SortEntityBelow - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xd] - adds r6, r5, #0 - adds r6, #0x79 - adds r7, r5, #0 - adds r7, #0x76 - cmp r0, #4 - beq _0809C6F6 - adds r0, r5, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #1 - beq _0809C6F6 - ldrb r0, [r6] - cmp r0, #0x1c - bls _0809C6E4 - subs r0, #1 - strb r0, [r6] -_0809C6E4: - ldrh r0, [r7] - movs r1, #0x80 - lsls r1, r1, #1 - cmp r0, r1 - bls _0809C6F4 - subs r0, #1 - strh r0, [r7] - b _0809C6F6 -_0809C6F4: - strh r1, [r7] -_0809C6F6: - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x74 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - adds r3, r0, #0 - ldrb r0, [r6] - lsls r0, r0, #8 - muls r0, r3, r0 - lsrs r3, r0, #8 - adds r4, #0x7b - ldrb r0, [r4] - adds r0, #0x80 - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r0, r5, #0 - adds r2, r3, #0 - bl sub_0809CB70 - ldr r0, [r5, #0x50] - adds r0, #0x7b - ldrb r0, [r0] - adds r1, r5, #0 - adds r1, #0x7b - strb r0, [r1] - ldrh r1, [r7] - adds r0, r5, #0 - adds r0, #0x74 - b _0809C7C4 -_0809C738: - movs r0, #0x37 - bl CheckFlags - cmp r0, #0 - beq _0809C74A - adds r0, r5, #0 - movs r1, #0x1e - bl RequestPriorityDuration -_0809C74A: - ldr r1, _0809C7A8 @ =FrozenOctorok_Action1SubActions - ldrb r0, [r5, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - ldrb r0, [r5, #0xf] - cmp r0, #0 - beq _0809C7BC - ldr r0, _0809C7AC @ =gRoomTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _0809C772 - ldr r0, [r5, #0x54] - bl CreateSparkle -_0809C772: - adds r3, r5, #0 - adds r3, #0x7e - ldrh r0, [r3] - cmp r0, #0 - beq _0809C7BC - ldr r2, [r5, #0x54] - movs r1, #0 - ldrsh r0, [r3, r1] - ldr r1, [r2, #0x20] - subs r1, r1, r0 - str r1, [r2, #0x20] - ldr r0, [r2, #0x34] - adds r0, r0, r1 - str r0, [r2, #0x34] - ldr r0, [r5, #0x54] - ldr r1, [r0, #0x20] - movs r0, #0xc0 - lsls r0, r0, #6 - cmp r1, r0 - beq _0809C7A0 - ldr r0, _0809C7B0 @ =0xFFFFD000 - cmp r1, r0 - bne _0809C7BC -_0809C7A0: - ldrh r0, [r3] - rsbs r0, r0, #0 - strh r0, [r3] - b _0809C7BC - .align 2, 0 -_0809C7A8: .4byte FrozenOctorok_Action1SubActions -_0809C7AC: .4byte gRoomTransition -_0809C7B0: .4byte 0xFFFFD000 -_0809C7B4: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl CopyPosition -_0809C7BC: - adds r0, r5, #0 - adds r0, #0x76 - ldrh r1, [r0] - subs r0, #2 -_0809C7C4: - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - adds r0, r5, #0 - bl SetAffineInfo - b _0809C7DE -_0809C7D2: - ldr r0, _0809C7E0 @ =gRoomControls - ldr r0, [r0, #0x30] - cmp r0, r5 - beq _0809C7DE - bl DeleteThisEntity -_0809C7DE: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809C7E0: .4byte gRoomControls - .syntax divided diff --git a/src/object/frozenOctorok.c b/src/object/frozenOctorok.c index fe537c4b..7805839c 100644 --- a/src/object/frozenOctorok.c +++ b/src/object/frozenOctorok.c @@ -40,6 +40,8 @@ void FrozenOctorok_ChangeObjPaletteOfChildren(FrozenOctorokEntity*, u32); void sub_0809CBE4(FrozenOctorokEntity*); void sub_0809CB70(FrozenOctorokEntity*, s32, s32); +extern const u8 gUnk_08123E1C[]; + void FrozenOctorok(FrozenOctorokEntity* this) { static void (*const FrozenOctorok_Actions[])(FrozenOctorokEntity*) = { FrozenOctorok_Init, @@ -162,8 +164,87 @@ const u8 gUnk_08123E1C[] = { 128, }; -ASM_FUNC("asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc", - void FrozenOctorok_Action1(FrozenOctorokEntity* this)) +void FrozenOctorok_Action1(FrozenOctorokEntity* this) { + u32 tmp1; + u32 tmp2; + + switch (super->type) { + case 1: + case 2: + case 3: + case 4: + SortEntityBelow(super->parent, super); + if (super->parent->subAction == 6) { + if ((s8)super->subtimer < 0) { + super->subtimer = -this->heap->unk_0; + } else { + super->subtimer = this->heap->unk_0; + } + sub_0809CBE4(this); + } + tmp1 = 0x10000 / (((FrozenOctorokEntity*)super->parent)->unk_76); + tmp1 = ((tmp1 << 0xd) >> 8); + tmp1 -= 0x2000; + if (this->heap->mouthObject->base.health == 1) { + tmp1 = 0x2200 + tmp1; + } else { + tmp1 = (tmp1 >> 1) + 0x2200; + } + tmp2 = (u8) - (((FrozenOctorokEntity*)super->parent)->unk_7b + gUnk_08123E18[super->type - 1]); + sub_0809CB70(this, tmp2, tmp1); + this->unk_7b = + ((FrozenOctorokEntity*)super->parent)->unk_7b + gUnk_08123E1C[super->type - 1] + this->unk_79; + SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a); + break; + case 5: + SortEntityBelow(super->parent, super); + if ((super->parent->subAction != 4) && (super->health != 1)) { + if (0x1c < this->unk_79) { + this->unk_79--; + } + if (this->unk_76 > 0x100) { + this->unk_76--; + } else { + this->unk_76 = 0x100; + } + } + tmp1 = (0x10000 / ((FrozenOctorokEntity*)super->parent)->unk_74); + tmp1 = ((this->unk_79 << 8) * tmp1 >> 8); + tmp2 = (u8) - (((FrozenOctorokEntity*)super->parent)->unk_7b + 0x80); + sub_0809CB70(this, tmp2, tmp1); + this->unk_7b = ((FrozenOctorokEntity*)super->parent)->unk_7b; + SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a); + return; + case 0: + if (CheckFlags(OUGONTEKI_G)) { + RequestPriorityDuration(super, 0x1e); + } + FrozenOctorok_Action1SubActions[super->subAction](this); + if (super->subtimer != 0) { + if ((gRoomTransition.frameCount & 7) == 0) { + CreateSparkle(super->child); + } + if (this->unk_7e != 0) { + super->child->zVelocity = super->child->zVelocity - (s16)this->unk_7e; + super->child->z.WORD += super->child->zVelocity; + if (((super->child)->zVelocity == 0x3000) || ((super->child)->zVelocity == -0x3000)) { + this->unk_7e = -this->unk_7e; + } + } + } + SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a); + break; + case 6: + CopyPosition(super->parent, super); + SetAffineInfo(super, this->unk_76, this->unk_74, *(u16*)&this->unk_7a); + break; + case 7: + if (gRoomControls.camera_target != super) { + DeleteThisEntity(); + } + break; + } +} void FrozenOctorok_Action1SubAction0(FrozenOctorokEntity* this) { Entity* child; From ec1329847139914a7530c46cd9d0a250157ac42d Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:17:45 +0000 Subject: [PATCH 03/13] Match OctorokBossObject_Action1 --- .../OctorokBossObject_Action1.inc | 579 ------------------ src/object/octorokBossObject.c | 8 +- 2 files changed, 4 insertions(+), 583 deletions(-) delete mode 100644 asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc diff --git a/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc b/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc deleted file mode 100644 index 5a9cc660..00000000 --- a/asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc +++ /dev/null @@ -1,579 +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, #0x38 - adds r7, r0, #0 - bl GetNextFrame - ldrb r0, [r7, #0xa] - cmp r0, #9 - bls _0809A1D2 - b _0809A632 -_0809A1D2: - lsls r0, r0, #2 - ldr r1, _0809A1DC @ =_0809A1E0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809A1DC: .4byte _0809A1E0 -_0809A1E0: @ jump table - .4byte _0809A208 @ case 0 - .4byte _0809A25C @ case 1 - .4byte _0809A33E @ case 2 - .4byte _0809A378 @ case 3 - .4byte _0809A394 @ case 4 - .4byte _0809A3E0 @ case 5 - .4byte _0809A378 @ case 6 - .4byte _0809A46C @ case 7 - .4byte _0809A47C @ case 8 - .4byte _0809A616 @ case 9 -_0809A208: - adds r1, r7, #0 - adds r1, #0x79 - ldrb r0, [r1] - cmp r0, #0 - beq _0809A25C - subs r0, #1 - strb r0, [r1] - ldrb r0, [r7, #0xf] - subs r0, #1 - strb r0, [r7, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - adds r1, #0xb - str r1, [sp, #0x20] - cmp r0, #0xff - bne _0809A254 - movs r0, #5 - strb r0, [r7, #0xf] - ldrb r3, [r7, #0xb] - adds r0, r7, #0 - movs r1, #0x87 - movs r2, #1 - bl CreateObjectWithParent - adds r1, r0, #0 - str r1, [r7, #0x54] - cmp r1, #0 - beq _0809A24E - ldr r0, [r7, #0x50] - str r0, [r1, #0x50] - ldr r0, [r7, #0x54] - adds r0, #0x84 - ldr r2, [sp, #0x20] - ldr r1, [r2] - str r1, [r0] -_0809A24E: - ldrb r0, [r7, #0xb] - adds r0, #1 - strb r0, [r7, #0xb] -_0809A254: - ldr r1, [sp, #0x20] - ldr r0, [r1] - ldr r0, [r0, #0xc] - b _0809A474 -_0809A25C: - adds r4, r7, #0 - adds r4, #0x84 - ldr r1, [r4] - ldrb r0, [r7, #0xe] - lsls r0, r0, #2 - adds r1, #0xc - adds r1, r1, r0 - ldr r2, [r1] - ldr r0, [r2, #0x2c] - ldr r1, [r7, #0x2c] - subs r0, r0, r1 - ldr r1, [r2, #0x30] - ldr r2, [r7, #0x30] - subs r1, r1, r2 - bl sub_080045DA - strb r0, [r7, #0x15] - movs r2, #0x24 - ldrsh r1, [r7, r2] - ldrb r2, [r7, #0x15] - adds r0, r7, #0 - bl LinearMoveAngle - ldr r1, [r4] - ldrb r0, [r7, #0xe] - lsls r0, r0, #2 - adds r1, #0xc - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r7, #0 - movs r2, #2 - movs r3, #2 - bl EntityInRectRadius - cmp r0, #0 - bne _0809A2A6 - b _0809A632 -_0809A2A6: - ldrb r0, [r7, #0xa] - cmp r0, #0 - bne _0809A2CC - ldr r1, [r4] - ldrb r0, [r7, #0xe] - lsls r0, r0, #2 - adds r1, #0xc - adds r1, r1, r0 - ldr r3, [r1] - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - movs r0, #2 - rsbs r0, r0, #0 - ands r1, r0 - subs r0, #2 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] -_0809A2CC: - ldrb r1, [r7, #0xe] - ldr r0, [r4] - ldrb r0, [r0, #1] - subs r0, #1 - cmp r1, r0 - bne _0809A338 - movs r0, #2 - strb r0, [r7, #0xc] - movs r0, #0xf0 - strb r0, [r7, #0xe] - bl Random - ldr r6, _0809A330 @ =gUnk_0812384C - ldrb r2, [r7, #0xb] - movs r3, #0xf - movs r4, #0xf - adds r1, r4, #0 - ands r1, r2 - lsls r1, r1, #2 - adds r1, r1, r6 - ands r0, r3 - ldrb r1, [r1] - adds r0, r0, r1 - strb r0, [r7, #0x15] - bl Random - ldrb r1, [r7, #0xb] - ands r4, r1 - lsls r4, r4, #1 - adds r4, #1 - lsls r4, r4, #1 - adds r4, r4, r6 - ldr r2, _0809A334 @ =0x000001FF - adds r1, r2, #0 - ands r0, r1 - ldrh r4, [r4] - adds r0, r0, r4 - strh r0, [r7, #0x24] - ldrb r0, [r7, #0xa] - cmp r0, #0 - beq _0809A320 - b _0809A632 -_0809A320: - ldr r1, [r7, #0x50] - movs r0, #4 - strb r0, [r1, #0xc] - ldr r1, [r7, #0x50] - movs r0, #0 - strb r0, [r1, #0xd] - b _0809A632 - .align 2, 0 -_0809A330: .4byte gUnk_0812384C -_0809A334: .4byte 0x000001FF -_0809A338: - adds r0, r1, #1 - strb r0, [r7, #0xe] - b _0809A632 -_0809A33E: - ldr r1, [r7, #0x50] - ldrb r0, [r1, #0xb] - cmp r0, #3 - bne _0809A38E - adds r0, r1, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r2, [r0, #8] - ldr r0, [r2, #0x2c] - ldr r1, [r7, #0x2c] - subs r0, r0, r1 - ldr r1, [r2, #0x30] - ldr r2, [r7, #0x30] - subs r1, r1, r2 - bl sub_080045DA - strb r0, [r7, #0x15] - movs r1, #0xa0 - lsls r1, r1, #2 - ldrb r2, [r7, #0x15] - adds r0, r7, #0 - bl LinearMoveAngle - ldr r1, [r7, #0x50] - adds r0, r7, #0 - movs r2, #0x48 - bl sub_0806FC80 - b _0809A388 -_0809A378: - ldrb r2, [r7, #0x15] - adds r0, r7, #0 - movs r1, #0x80 - bl LinearMoveAngle - adds r0, r7, #0 - adds r0, #0x5a - ldrb r0, [r0] -_0809A388: - cmp r0, #0 - bne _0809A38E - b _0809A632 -_0809A38E: - bl DeleteThisEntity - b _0809A632 -_0809A394: - ldr r3, [r7, #0x78] - cmp r3, #0 - bne _0809A3B4 - ldr r0, _0809A3B0 @ =gRoomVars - movs r2, #0xc - ldrsh r1, [r0, r2] - movs r0, #0x80 - lsls r0, r0, #1 - cmp r1, r0 - beq _0809A38E - movs r0, #8 - bl ChangeLightLevel - b _0809A632 - .align 2, 0 -_0809A3B0: .4byte gRoomVars -_0809A3B4: - ldr r2, [r7, #0x50] - adds r0, r2, #0 - adds r0, #0x45 - ldrb r1, [r0] - cmp r1, #0 - bne _0809A3C8 - movs r0, #1 - strb r0, [r7, #0xd] - str r1, [r7, #0x78] - b _0809A632 -_0809A3C8: - ldrb r0, [r7, #0xd] - cmp r0, #0 - bne _0809A3D6 - ldrb r0, [r2, #0xb] - cmp r0, #0 - beq _0809A3D6 - b _0809A632 -_0809A3D6: - movs r0, #1 - strb r0, [r7, #0xd] - subs r0, r3, #1 - str r0, [r7, #0x78] - b _0809A632 -_0809A3E0: - ldr r0, [r7, #0x78] - cmp r0, #0 - bne _0809A432 - adds r0, r7, #0 - adds r0, #0x76 - ldrh r2, [r0] - movs r1, #0x80 - lsls r1, r1, #1 - adds r5, r0, #0 - cmp r2, r1 - bne _0809A40E - ldr r0, [r7, #0x50] - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - adds r4, r7, #0 - adds r4, #0x74 - cmp r0, #0 - beq _0809A420 - bl DeleteThisEntity - b _0809A420 -_0809A40E: - adds r0, r2, #0 - subs r0, #0x20 - strh r0, [r5] - adds r1, r7, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #0x20 - strh r0, [r1] - adds r4, r1, #0 -_0809A420: - ldrh r1, [r5] - ldrh r2, [r4] - adds r0, r7, #0 - adds r0, #0x7a - ldrh r3, [r0] - adds r0, r7, #0 - bl SetAffineInfo - b _0809A436 -_0809A432: - subs r0, #1 - str r0, [r7, #0x78] -_0809A436: - ldr r0, [r7, #0x50] - adds r1, r7, #0 - bl CopyPosition - ldr r4, _0809A468 @ =gUnk_0812388C - ldrb r3, [r7, #0xb] - lsls r0, r3, #1 - adds r0, #1 - lsls r0, r0, #1 - adds r0, r0, r4 - ldrh r1, [r0] - ldr r0, [r7, #0x50] - adds r0, #0x7b - ldrb r2, [r0] - rsbs r2, r2, #0 - lsls r2, r2, #0x18 - lsls r3, r3, #2 - adds r3, r3, r4 - lsrs r2, r2, #0x18 - ldrh r3, [r3] - adds r2, r2, r3 - adds r0, r7, #0 - bl LinearMoveAngle - b _0809A632 - .align 2, 0 -_0809A468: .4byte gUnk_0812388C -_0809A46C: - ldrb r0, [r7, #0xe] - cmp r0, #0 - bne _0809A38E - ldr r0, [r7, #0x50] -_0809A474: - adds r1, r7, #0 - bl CopyPosition - b _0809A632 -_0809A47C: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _0809A48C - b _0809A632 -_0809A48C: - movs r0, #4 - strb r0, [r7, #0xe] - ldrb r0, [r7, #0xf] - adds r0, #1 - strb r0, [r7, #0xf] - adds r0, r7, #0 - adds r0, #0x84 - str r0, [sp, #4] - ldrb r1, [r7, #0xf] - lsls r0, r1, #5 - subs r0, r0, r1 - ldr r2, [sp, #4] - ldr r1, [r2] - subs r1, r1, r0 - mov sl, r1 - mov r0, sl - str r0, [sp] - adds r1, r7, #0 - adds r1, #0x82 - str r1, [sp, #8] - ldrh r0, [r1] - adds r2, r7, #0 - adds r2, #0x7e - str r2, [sp, #0xc] - strh r0, [r2] - ldrh r0, [r1] - subs r1, #8 - str r1, [sp, #0x10] - strh r0, [r1] - movs r2, #0x80 - adds r2, r2, r7 - mov sb, r2 - ldrb r0, [r7, #0xf] - lsls r0, r0, #4 - ldrh r1, [r2] - subs r1, r1, r0 - movs r0, #0x7c - adds r0, r0, r7 - mov r8, r0 - strh r1, [r0] - adds r4, r7, #0 - adds r4, #0x78 - strh r1, [r4] - ldr r1, [sp, #0x10] - ldrh r0, [r1] - ldrh r1, [r4] - ldrb r3, [r7, #0xb] - mov r2, sl - bl sub_0809A6F8 - adds r5, r0, #0 - ldrb r6, [r7, #0xf] - ldr r2, [sp, #4] - str r2, [sp, #0x20] - ldr r0, [sp, #0x10] - str r0, [sp, #0x28] - ldr r1, [sp, #8] - str r1, [sp, #0x1c] - ldr r2, [sp, #0xc] - str r2, [sp, #0x30] - mov r0, sb - str r0, [sp, #0x34] - mov r1, r8 - str r1, [sp, #0x2c] - str r4, [sp, #0x24] - cmp r6, #0 - beq _0809A568 - ldr r2, [sp, #0x28] - str r2, [sp, #0x14] - mov sb, r4 - ldr r0, [sp, #0x30] - mov r8, r0 - adds r4, r1, #0 -_0809A51E: - ldr r1, [sp, #0x14] - ldrh r0, [r1] - subs r0, #0x10 - strh r0, [r1] - mov r2, sb - ldrh r0, [r2] - adds r0, #0x10 - strh r0, [r2] - ldr r0, [sp] - adds r0, #0x1e - str r0, [sp] - ldrh r0, [r1] - ldrh r1, [r2] - ldrb r3, [r7, #0xb] - ldr r2, [sp] - bl sub_0809A6F8 - adds r5, r5, r0 - mov r1, r8 - ldrh r0, [r1] - adds r0, #0x10 - strh r0, [r1] - ldrh r0, [r4] - adds r0, #0x10 - strh r0, [r4] - movs r2, #0x20 - add sl, r2 - ldrh r0, [r1] - ldrh r1, [r4] - ldrb r3, [r7, #0xb] - mov r2, sl - bl sub_0809A6F8 - adds r5, r5, r0 - subs r6, #1 - cmp r6, #0 - bne _0809A51E -_0809A568: - ldrb r1, [r7, #0xf] - lsls r0, r1, #5 - subs r0, r0, r1 - ldr r2, [sp, #0x20] - ldr r1, [r2] - adds r1, r1, r0 - mov sl, r1 - mov r0, sl - str r0, [sp] - ldr r1, [sp, #0x1c] - ldrh r0, [r1] - ldr r2, [sp, #0x30] - strh r0, [r2] - ldrh r0, [r1] - ldr r1, [sp, #0x28] - strh r0, [r1] - ldrb r0, [r7, #0xf] - lsls r0, r0, #4 - ldr r2, [sp, #0x34] - ldrh r2, [r2] - adds r0, r0, r2 - ldr r1, [sp, #0x2c] - strh r0, [r1] - ldr r2, [sp, #0x24] - strh r0, [r2] - ldr r1, [sp, #0x28] - ldrh r0, [r1] - ldrh r1, [r2] - ldrb r3, [r7, #0xb] - mov r2, sl - bl sub_0809A6F8 - adds r5, r5, r0 - ldrb r0, [r7, #0xf] - subs r6, r0, #1 - cmp r6, #0 - beq _0809A610 - ldr r2, [sp, #0x28] - str r2, [sp, #0x18] - ldr r0, [sp, #0x24] - mov sb, r0 - ldr r1, [sp, #0x30] - mov r8, r1 - ldr r4, [sp, #0x2c] -_0809A5C0: - ldr r2, [sp, #0x18] - ldrh r0, [r2] - subs r0, #0x10 - strh r0, [r2] - mov r1, sb - ldrh r0, [r1] - subs r0, #0x10 - strh r0, [r1] - ldr r2, [sp] - subs r2, #0x20 - str r2, [sp] - ldr r1, [sp, #0x18] - ldrh r0, [r1] - mov r2, sb - ldrh r1, [r2] - ldrb r3, [r7, #0xb] - ldr r2, [sp] - bl sub_0809A6F8 - adds r5, r5, r0 - mov r1, r8 - ldrh r0, [r1] - adds r0, #0x10 - strh r0, [r1] - ldrh r0, [r4] - subs r0, #0x10 - strh r0, [r4] - movs r2, #0x1e - rsbs r2, r2, #0 - add sl, r2 - ldrh r0, [r1] - ldrh r1, [r4] - ldrb r3, [r7, #0xb] - mov r2, sl - bl sub_0809A6F8 - adds r5, r5, r0 - subs r6, #1 - cmp r6, #0 - bne _0809A5C0 -_0809A610: - cmp r5, #0 - bne _0809A632 - b _0809A38E -_0809A616: - bl sub_08078B48 - ldr r0, [r7, #0x78] - subs r0, #1 - str r0, [r7, #0x78] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _0809A632 - ldr r1, _0809A640 @ =gRoomControls - ldr r0, _0809A644 @ =gPlayerEntity - str r0, [r1, #0x30] - bl DeleteThisEntity -_0809A632: - add sp, #0x38 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809A640: .4byte gRoomControls -_0809A644: .4byte gPlayerEntity - .syntax divided diff --git a/src/object/octorokBossObject.c b/src/object/octorokBossObject.c index eb1a2f1e..22e3561e 100644 --- a/src/object/octorokBossObject.c +++ b/src/object/octorokBossObject.c @@ -146,8 +146,7 @@ void OctorokBossObject_Init(Entity* this) { } } -NONMATCH("asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc", - void OctorokBossObject_Action1(Entity* this)) { +void OctorokBossObject_Action1(Entity* this) { s32 tmp_c; u32 loop_var; @@ -184,7 +183,7 @@ NONMATCH("asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc", if ((u32)this->timer == GET_HELPER(this)->tailCount - 1) { this->action = 2; this->timer = 240; - this->direction = gUnk_0812384C[(this->type2 & 0xf) * 2] + ((u8)Random() & 0xf); + this->direction = gUnk_0812384C[(u8)((this->type2 & 0xf) * 2)] + ((u8)Random() & 0xf); this->speed = gUnk_0812384C[(this->type2 & 0xf) * 2 + 1] + ((u16)Random() & 0x1ff); if (this->type != 0) { return; @@ -233,6 +232,7 @@ NONMATCH("asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc", *(int*)&this->field_0x78 += -1; return; } + GET_HELPER(this)->tailObjects[this->timer]->x = GET_HELPER(this)->tailObjects[this->timer]->x; DeleteThisEntity(); break; case 5: @@ -245,6 +245,7 @@ NONMATCH("asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc", this->field_0x76.HWORD -= 0x20; this->field_0x74.HWORD -= 0x20; } + SetAffineInfo(this, (u32)this->field_0x76.HWORD, (u32)(u16)this->field_0x74.HWORD, (u32)(u16)this->field_0x7a.HWORD); } else { @@ -313,7 +314,6 @@ NONMATCH("asm/non_matching/octorokBossObject/OctorokBossObject_Action1.inc", break; } } -END_NONMATCH void OctorokBossObject_Action2(Entity* this) { s32 tmp; From 521bb8250bc20a8c198ff96ab8dce8f01c16950f Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:18:02 +0000 Subject: [PATCH 04/13] Match sub_0801E82C --- asm/non_matching/common/sub_0801E82C.inc | 69 ----------------------- src/common.c | 72 +++++++++++++++++++++--- 2 files changed, 64 insertions(+), 77 deletions(-) delete mode 100644 asm/non_matching/common/sub_0801E82C.inc diff --git a/asm/non_matching/common/sub_0801E82C.inc b/asm/non_matching/common/sub_0801E82C.inc deleted file mode 100644 index 661d31ca..00000000 --- a/asm/non_matching/common/sub_0801E82C.inc +++ /dev/null @@ -1,69 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r1, _0801E8AC @ =gSave+0x114 - movs r5, #0 - adds r2, r1, #4 -_0801E83C: - ldrb r0, [r2, #0x13] - adds r3, r1, #4 - mov sl, r3 - cmp r0, #0 - bne _0801E848 - strb r0, [r2] -_0801E848: - adds r2, #1 - adds r5, #1 - cmp r5, #0x12 - bls _0801E83C - movs r0, #0 - strb r0, [r1, #0x16] - adds r2, r1, #0 - adds r2, #0x29 - strb r0, [r2] - movs r5, #0 - movs r0, #0x17 - adds r0, r0, r1 - mov sb, r0 - movs r3, #0x18 - adds r3, r3, r1 - mov r8, r3 - adds r7, r1, #4 - adds r6, r1, #5 -_0801E86C: - mov r1, sl - adds r0, r1, r5 - ldrb r0, [r0] - subs r0, #0x65 - cmp r0, #0x10 - bls _0801E890 - movs r4, #0x12 - subs r4, r4, r5 - adds r0, r6, #0 - adds r1, r7, #0 - adds r2, r4, #0 - bl MemCopy - mov r0, r8 - mov r1, sb - adds r2, r4, #0 - bl MemCopy -_0801E890: - movs r3, #1 - add sb, r3 - add r8, r3 - adds r7, #1 - adds r6, #1 - adds r5, #1 - cmp r5, #0x11 - bls _0801E86C - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E8AC: .4byte gSave+0x114 - .syntax divided diff --git a/src/common.c b/src/common.c index 8cbddd2b..e343aa98 100644 --- a/src/common.c +++ b/src/common.c @@ -824,16 +824,72 @@ bool32 sub_0801E810(u32 kinstoneId) { return ReadBit(&gSave.unk24E, kinstoneId); } -ASM_FUNC("asm/non_matching/common/sub_0801E82C.inc", void sub_0801E82C(void)); +void sub_0801E82C(void) { +#ifdef NON_MATCHING + u32 r5; -s32 sub_0801E8B0(u32 idx) { - u32 i; - - for (i = 0; i < 18; ++i) { - if (idx == gSave.unk118[i]) - return i; + for (r5 = 0; r5 < 0x13; r5++) { + if (gSave.unk12B[r5] == 0) { + gSave.unk118[r5] = gSave.unk12B[r5]; + } } - return -1; + + gSave.unk118[0x12] = 0; + gSave.unk12B[0x12] = 0; + + for (r5 = 0; r5 < 0x12; r5++) { + if ((gSave.unk118[r5] - 0x65) > 0x10) { + MemCopy(&gSave.unk118[r5 + 1], &gSave.unk118[r5], 0x12 - r5); + MemCopy(&gSave.unk12B[r5 + 1], &gSave.unk12B[r5], 0x12 - r5); + } + } +#else + u32 r0, r4, r5; + u32 new_var; + u8 *r1, *r2, *r3, *r6, *r7, *r8, *r9, *r10; + + new_var = 4; + r1 = &gSave.inventory[34]; + r5 = 0; + r2 = gSave.unk118; +code0_0: + r0 = r2[0x13]; + r3 = &r1[4]; + r10 = r3; + if (r0 == 0) { + *r2 = r0; + } + r2++; + r5++; + if (r5 <= 0x12) + goto code0_0; + + r1[0x16] = 0; + r1[0x29] = 0; + r5 = 0; + r9 = &r1[0x17]; + r3 = &r1[0x18]; + r8 = r3; + r7 = &r1[new_var]; + r6 = &r1[5]; +code0_2: + r0 = r10[r5] - 0x65; + if (r0 > 0x10) { + MemCopy(r6, r7, 0x12 - r5); + MemCopy(r8, r9, 0x12 - r5); + } + r9++; + r8++; + r7++; + r6++; + r5++; + if (r5 <= 0x11) + goto code0_2; +#endif +} +return i; +} +return -1; } // Check conditions, something with kinstones From a37cfe64cf25185ee0285562527059bf8ea524f2 Mon Sep 17 00:00:00 2001 From: anonymous <> Date: Sun, 6 Nov 2022 10:18:19 +0000 Subject: [PATCH 05/13] Match sub_0802D86C --- asm/non_matching/gleerok/sub_0802D86C.inc | 401 ---------------------- src/enemy/gleerok.c | 21 +- 2 files changed, 9 insertions(+), 413 deletions(-) delete mode 100644 asm/non_matching/gleerok/sub_0802D86C.inc diff --git a/asm/non_matching/gleerok/sub_0802D86C.inc b/asm/non_matching/gleerok/sub_0802D86C.inc deleted file mode 100644 index 316bb818..00000000 --- a/asm/non_matching/gleerok/sub_0802D86C.inc +++ /dev/null @@ -1,401 +0,0 @@ - .syntax unified - - .text - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #6 - bls _0802D878 - b _0802DB7E -_0802D878: - lsls r0, r0, #2 - ldr r1, _0802D884 @ =_0802D888 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802D884: .4byte _0802D888 -_0802D888: @ jump table - .4byte _0802DB64 @ case 0 - .4byte _0802D8A4 @ case 1 - .4byte _0802D8CE @ case 2 - .4byte _0802DA54 @ case 3 - .4byte _0802D94C @ case 4 - .4byte _0802D9A2 @ case 5 - .4byte _0802D9F8 @ case 6 -_0802D8A4: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0802D8CE - ldr r0, [r4, #0x50] - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0802D8BE - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - beq _0802D8C6 -_0802D8BE: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - b _0802D8CC -_0802D8C6: - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 -_0802D8CC: - strb r0, [r4, #0x10] -_0802D8CE: - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _0802D8DE - b _0802DB7E -_0802D8DE: - ldr r0, [r4, #0x50] - adds r0, #0x3d - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x3d - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802D918 - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _0802D906 - adds r0, r4, #0 - bl UnloadOBJPalette - adds r0, r4, #0 - movs r1, #0xc9 - bl LoadObjPalette - b _0802D918 -_0802D906: - subs r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl UnloadOBJPalette - adds r0, r4, #0 - movs r1, #0xca - bl LoadObjPalette -_0802D918: - ldr r0, [r4, #0x50] - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0802D924 - b _0802DB7E -_0802D924: - ldr r1, _0802D944 @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #8 - movs r3, #8 - bl EntityInRectRadius - cmp r0, #0 - bne _0802D936 - b _0802DB7E -_0802D936: - ldr r0, _0802D948 @ =gPlayerState - movs r1, #1 - strb r1, [r0, #0x14] - adds r0, #0x3f - movs r1, #0xfc - strb r1, [r0] - b _0802DB7E - .align 2, 0 -_0802D944: .4byte gPlayerEntity -_0802D948: .4byte gPlayerState -_0802D94C: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - bne _0802D95E - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _0802DB7E -_0802D95E: - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl GravityUpdate - adds r2, r0, #0 - cmp r2, #0 - beq _0802D970 - b _0802DB7E -_0802D970: - ldr r0, [r4, #0x50] - adds r0, #0x7b - movs r1, #1 - strb r1, [r0] - strb r2, [r4, #0xe] -_0802D97A: - ldrb r3, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0x67 - movs r2, #0 - bl CreateObjectWithParent - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #7 - bls _0802D97A - movs r0, #0xa8 - lsls r0, r0, #1 - bl SoundReq -_0802D99C: - bl DeleteThisEntity - b _0802DB7E -_0802D9A2: - ldr r0, _0802D9F4 @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _0802D9B8 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #2 - bne _0802D9B8 - b _0802DB7E -_0802D9B8: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0802D9CE - b _0802DB7E -_0802D9CE: - movs r0, #0x24 - movs r1, #6 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0802D99C - ldr r0, [r4, #0x50] - str r0, [r1, #0x50] - adds r2, r4, #0 - adds r2, #0x84 - ldr r1, [r2] - ldr r0, [r4, #0x54] - str r0, [r1, #0x38] - adds r0, #0x84 - ldr r1, [r2] - str r1, [r0] - b _0802D99C - .align 2, 0 -_0802D9F4: .4byte gRoomTransition -_0802D9F8: - ldr r0, _0802DA50 @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _0802DA0E - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #2 - bne _0802DA0E - b _0802DB7E -_0802DA0E: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0802DA24 - b _0802DB7E -_0802DA24: - movs r0, #0x24 - movs r1, #3 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0802D99C - ldr r0, [r4, #0x50] - str r0, [r1, #0x50] - adds r1, r4, #0 - adds r1, #0x84 - ldr r0, [r1] - ldrb r0, [r0, #1] - strb r0, [r4, #0xe] - ldr r2, [r1] - ldr r0, [r4, #0x54] - str r0, [r2, #0x38] - adds r0, #0x84 - ldr r1, [r1] - str r1, [r0] - b _0802D99C - .align 2, 0 -_0802DA50: .4byte gRoomTransition -_0802DA54: - adds r0, r4, #0 - adds r0, #0x74 - ldrb r1, [r0] - adds r6, r0, #0 - cmp r1, #0 - beq _0802DA96 - subs r0, r1, #1 - strb r0, [r6] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802DA96 - adds r5, r4, #0 - adds r5, #0x75 - ldrb r0, [r5] - adds r0, #2 - strb r0, [r5] - ldr r7, _0802DAD4 @ =gUnk_080CD884 - ldrb r0, [r5] - adds r0, r0, r7 - ldrb r0, [r0] - strb r0, [r6] - cmp r0, #0 - beq _0802DA96 - adds r0, r4, #0 - bl UnloadOBJPalette - ldrb r0, [r5] - adds r0, #1 - adds r0, r0, r7 - ldrb r1, [r0] - adds r0, r4, #0 - bl LoadObjPalette -_0802DA96: - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802DAD8 - ldrb r2, [r6] - cmp r2, #0 - bne _0802DAD8 - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x1d - bne _0802DB20 - movs r0, #0xc0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldr r1, [r4, #0x50] - movs r0, #4 - strb r0, [r1, #0xd] - ldr r0, [r4, #0x50] - strb r2, [r0, #0xb] - ldr r0, [r4, #0x50] - adds r0, #0x7b - strb r2, [r0] - movs r0, #0x86 - lsls r0, r0, #1 - bl SoundReq - b _0802DB20 - .align 2, 0 -_0802DAD4: .4byte gUnk_080CD884 -_0802DAD8: - adds r0, r4, #0 - adds r0, #0x84 - ldr r2, [r0] - ldrb r1, [r4, #0xe] - adds r3, r0, #0 - ldrb r0, [r2, #1] - cmp r1, r0 - beq _0802DB20 - adds r0, r1, #0 - ldrb r1, [r2, #1] - subs r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - cmp r0, #0x10 - ble _0802DB08 - ldrb r0, [r4, #0x1e] - adds r0, #1 - strb r0, [r4, #0x1e] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x30 - bls _0802DB1A - movs r0, #0x28 - b _0802DB18 -_0802DB08: - ldrb r0, [r4, #0x1e] - subs r0, #1 - strb r0, [r4, #0x1e] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x27 - bhi _0802DB1A - movs r0, #0x30 -_0802DB18: - strb r0, [r4, #0x1e] -_0802DB1A: - ldr r0, [r3] - ldrb r0, [r0, #1] - strb r0, [r4, #0xe] -_0802DB20: - ldr r0, [r4, #0x20] - cmp r0, #0 - ble _0802DB7E - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl GravityUpdate - ldr r0, [r4, #0x20] - cmp r0, #0 - bgt _0802DB7E - movs r0, #0x24 - movs r1, #4 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0802DB7E - ldr r0, [r4, #0x50] - str r0, [r1, #0x50] - adds r2, r4, #0 - adds r2, #0x84 - ldr r1, [r2] - ldr r0, [r4, #0x54] - str r0, [r1, #0x38] - adds r0, #0x84 - ldr r1, [r2] - str r1, [r0] - ldr r1, [r4, #0x54] - adds r0, r4, #0 - bl CopyPosition - b _0802D99C -_0802DB64: - ldr r1, _0802DB80 @ =gUnk_080CD810 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - bl sub_0802E7E4 -_0802DB7E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0802DB80: .4byte gUnk_080CD810 - - .syntax divided diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c index c7391702..948ba8dd 100644 --- a/src/enemy/gleerok.c +++ b/src/enemy/gleerok.c @@ -548,7 +548,7 @@ void sub_0802D7B4(GleerokEntity* this) { sub_0802E518(this); } -NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokEntity* this)) { +void sub_0802D86C(GleerokEntity* this) { Entity* enemy; Entity* enemy2; switch (super->type) { @@ -638,7 +638,7 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokE super->child = enemy; if (enemy) { enemy->parent = super->parent; - super->timer = this->unk_84->filler[0].unk0.HALF.HI; + super->timer = this->unk_84->filler[0].unk1; this->unk_84->ent = super->child; ((GleerokEntity*)super->child)->unk_84 = this->unk_84; } @@ -669,8 +669,8 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokE SoundReq(SFX_BUTTON_PRESS); } } else { - if (super->timer != this->unk_84->filler[0].unk0.HALF.HI) { - if (((super->timer - this->unk_84->filler[0].unk0.HALF.HI) & 0x1f) > 0x10) { + if (super->timer != this->unk_84->filler[0].unk1) { + if (((super->timer - this->unk_84->filler[0].unk1) & 0x1f) > 0x10) { if (++super->frameIndex >= 0x31) { super->frameIndex = 0x28; } @@ -680,7 +680,7 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokE } } - super->timer = this->unk_84->filler[0].unk0.HALF.HI; + super->timer = this->unk_84->filler[0].unk1; } } @@ -692,14 +692,12 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokE if (super->zVelocity > 0) return; - enemy = CreateEnemy(GLEEROK, 4); - super->child = enemy; - if (enemy) { - enemy->parent = super->parent; + super->child = CreateEnemy(GLEEROK, 4); + if (super->child) { + super->child->parent = super->parent; this->unk_84->ent = super->child; ((GleerokEntity*)super->child)->unk_84 = this->unk_84; - // Making super in super->child volatile solves this but ugly - CopyPosition(super, super->child); + CopyPosition(super, ((volatile Entity*)super)->child); DeleteThisEntity(); } @@ -710,7 +708,6 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokE break; } } -END_NONMATCH void sub_0802DB84(GleerokEntity* this) { u32 timer; From ae84570668cc8b31718836113aef0e87d7ab5bf0 Mon Sep 17 00:00:00 2001 From: anonymous <> Date: Sun, 6 Nov 2022 10:18:36 +0000 Subject: [PATCH 06/13] Match sub_0802E768 --- asm/non_matching/gleerok/sub_0802E768.inc | 61 ----------------------- src/enemy/gleerok.c | 21 ++++---- 2 files changed, 9 insertions(+), 73 deletions(-) delete mode 100644 asm/non_matching/gleerok/sub_0802E768.inc diff --git a/asm/non_matching/gleerok/sub_0802E768.inc b/asm/non_matching/gleerok/sub_0802E768.inc deleted file mode 100644 index 0a99cd88..00000000 --- a/asm/non_matching/gleerok/sub_0802E768.inc +++ /dev/null @@ -1,61 +0,0 @@ - .syntax unified - - .text - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r2, #0 - movs r6, #0x1f -_0802E770: - lsls r3, r2, #2 - adds r0, r4, r3 - ldrb r1, [r0, #1] - adds r2, #1 - lsls r0, r2, #2 - adds r0, r4, r0 - ldrb r0, [r0, #1] - subs r0, r1, r0 - ands r0, r6 - adds r5, r2, #0 - cmp r0, #0x10 - ble _0802E790 - cmp r0, #0x1e - bgt _0802E798 - adds r1, #1 - b _0802E796 -_0802E790: - cmp r0, #1 - ble _0802E798 - subs r1, #1 -_0802E796: - ands r1, r6 -_0802E798: - adds r0, r4, r3 - strb r1, [r0, #1] - ldrb r1, [r0, #0x19] - lsls r0, r5, #2 - adds r0, r4, r0 - ldrb r0, [r0, #0x19] - subs r0, r1, r0 - movs r2, #0x1f - ands r0, r2 - cmp r0, #0x10 - ble _0802E7B6 - cmp r0, #0x1d - bgt _0802E7BE - adds r1, #1 - b _0802E7BC -_0802E7B6: - cmp r0, #2 - ble _0802E7BE - subs r1, #1 -_0802E7BC: - ands r1, r2 -_0802E7BE: - adds r0, r4, r3 - strb r1, [r0, #0x19] - adds r2, r5, #0 - cmp r2, #4 - bls _0802E770 - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c index 948ba8dd..f5afc6c3 100644 --- a/src/enemy/gleerok.c +++ b/src/enemy/gleerok.c @@ -1316,20 +1316,18 @@ NONMATCH("asm/non_matching/gleerok/sub_0802E518.inc", void sub_0802E518(GleerokE } END_NONMATCH -NONMATCH("asm/non_matching/gleerok/sub_0802E768.inc", bool32 sub_0802E768(Gleerok_HeapStruct* param_1)) { +void sub_0802E768(Gleerok_HeapStruct* param_1) { + u32 cVar1; s32 bVar2; s32 bVar2a; - u32 bVar3; - - // solves regalloc - // register u32 bVar3 asm("r1"); + FORCE_REGISTER(u32 bVar3, r1); u32 bVar3a; u32 uVar4; s32 iVar5; for (uVar4 = 0; uVar4 <= 4; uVar4++) { - bVar3 = param_1->filler[uVar4].unk0.HALF.HI; - bVar2 = (bVar3 - param_1->filler[uVar4 + 1].unk0.HALF.HI) & 0x1f; + bVar3 = param_1->filler[uVar4].unk1; + bVar2 = (bVar3 - param_1->filler[uVar4 + 1].unk1) & 0x1f; if (bVar2 > 0x10) { if (bVar2 <= 0x1e) { @@ -1339,9 +1337,9 @@ NONMATCH("asm/non_matching/gleerok/sub_0802E768.inc", bool32 sub_0802E768(Gleero bVar3 = (bVar3 - 1) & 0x1f; } - param_1->filler[uVar4].unk0.HALF.HI = bVar3; - bVar3 = param_1->filler2[uVar4].unk0.HALF.HI; - bVar2 = (bVar3 - param_1->filler2[uVar4 + 1].unk0.HALF.HI) & 0x1f; + param_1->filler[uVar4].unk1 = bVar3; + bVar3 = param_1->filler2[(uVar4)].unk1; + bVar2 = (bVar3 - param_1->filler2[(uVar4 + 1)].unk1) & 0x1f; if (bVar2 > 0x10) { if (bVar2 <= 0x1d) { @@ -1351,10 +1349,9 @@ NONMATCH("asm/non_matching/gleerok/sub_0802E768.inc", bool32 sub_0802E768(Gleero bVar3 = (bVar3 - 1) & 0x1f; } - param_1->filler2[uVar4].unk0.HALF.HI = bVar3; + param_1->filler2[(uVar4)].unk1 = bVar3; } } -END_NONMATCH u32 sub_0802E7CC(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4) { param_1->entities[(u8)param_2]->animationState = param_1->filler[(u8)param_2].unk0.HALF.HI; From dde3fa8d1b3783810f1ead021745fbef1c88a423 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:18:52 +0000 Subject: [PATCH 07/13] Match sub_08036AF0 --- asm/non_matching/octorokBoss/sub_08036AF0.inc | 210 ------------------ src/enemy/octorokBoss.c | 48 +++- 2 files changed, 46 insertions(+), 212 deletions(-) delete mode 100644 asm/non_matching/octorokBoss/sub_08036AF0.inc diff --git a/asm/non_matching/octorokBoss/sub_08036AF0.inc b/asm/non_matching/octorokBoss/sub_08036AF0.inc deleted file mode 100644 index c8749e0f..00000000 --- a/asm/non_matching/octorokBoss/sub_08036AF0.inc +++ /dev/null @@ -1,210 +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, #0xc - str r1, [sp] - mov r8, r2 - adds r0, #0x84 - ldr r0, [r0] - str r0, [sp, #4] - ldrb r0, [r0, #1] - subs r4, r0, #1 - cmp r4, #0 - bne _08036B10 - b _08036C80 -_08036B10: - ldr r0, [sp, #4] - adds r0, #0xc - str r0, [sp, #8] - lsls r0, r1, #0x14 - asrs r0, r0, #0x10 - mov sl, r0 -_08036B1C: - mov r1, r8 - cmp r1, #0 - bne _08036BC0 - lsls r0, r4, #2 - ldr r2, [sp, #8] - adds r6, r2, r0 - ldr r0, [r6] - subs r4, #1 - lsls r1, r4, #2 - adds r5, r2, r1 - ldr r2, [r5] - movs r3, #0x2e - ldrsh r1, [r2, r3] - movs r3, #0x32 - ldrsh r2, [r2, r3] - bl sub_080041DC - mov sb, r4 - ldr r1, [sp] - cmp r1, r0 - blo _08036B48 - b _08036C78 -_08036B48: - ldr r2, [r5] - ldr r3, [r6] - ldr r0, [r2, #0x2c] - ldr r1, [r3, #0x2c] - subs r0, r0, r1 - ldr r1, [r2, #0x30] - ldr r2, [r3, #0x30] - subs r1, r1, r2 - bl sub_080045DA - ldr r1, [r5] - adds r1, #0x7b - strb r0, [r1] - ldr r0, [r5] - adds r0, #0x7b - ldrb r0, [r0] - lsls r0, r0, #1 - ldr r2, _08036BBC @ =gSineTable - adds r0, r0, r2 - movs r3, #0 - ldrsh r0, [r0, r3] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r5] - ldr r1, [r6] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r2, #0x2c] - ldr r0, [r5] - adds r0, #0x7b - ldrb r0, [r0] - adds r0, #0x40 - lsls r0, r0, #1 - ldr r1, _08036BBC @ =gSineTable - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r5] - ldr r1, [r6] - b _08036C6E - .align 2, 0 -_08036BBC: .4byte gSineTable -_08036BC0: - subs r2, r4, #1 - lsls r0, r2, #2 - ldr r3, [sp, #8] - adds r0, r3, r0 - ldr r0, [r0] - adds r5, r0, #0 - adds r5, #0x7b - lsls r1, r4, #2 - adds r0, r3, r1 - ldr r0, [r0] - adds r0, #0x7b - ldrb r4, [r5] - ldrb r3, [r0] - adds r7, r1, #0 - ldr r6, [sp, #4] - adds r6, #0xc - mov sb, r2 - cmp r4, r3 - beq _08036C0E - subs r0, r3, r4 - lsls r0, r0, #0x18 - asrs r1, r0, #0x18 - cmp r1, #0 - ble _08036BFE - mov r2, r8 - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r1, r0 - ble _08036C0E - subs r0, r3, r2 - b _08036C0C -_08036BFE: - mov r2, r8 - rsbs r0, r2, #0 - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r1, r0 - bge _08036C0E - adds r0, r3, r2 -_08036C0C: - strb r0, [r5] -_08036C0E: - mov r3, sb - lsls r4, r3, #2 - adds r4, r6, r4 - ldr r0, [r4] - adds r0, #0x7b - ldrb r0, [r0] - lsls r0, r0, #1 - ldr r1, _08036C8C @ =gSineTable - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r4] - adds r5, r6, r7 - ldr r1, [r5] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r2, #0x2c] - ldr r0, [r4] - adds r0, #0x7b - ldrb r0, [r0] - adds r0, #0x40 - lsls r0, r0, #1 - ldr r3, _08036C8C @ =gSineTable - adds r0, r0, r3 - movs r1, #0 - ldrsh r0, [r0, r1] - mov r1, sl - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - bl FixedDiv - ldr r2, [r4] - ldr r1, [r5] -_08036C6E: - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x30] - subs r1, r1, r0 - str r1, [r2, #0x30] -_08036C78: - mov r4, sb - cmp r4, #0 - beq _08036C80 - b _08036B1C -_08036C80: - add sp, #0xc - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08036C8C: .4byte gSineTable - .syntax divided diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c index 8b248fa4..e4a9ca68 100644 --- a/src/enemy/octorokBoss.c +++ b/src/enemy/octorokBoss.c @@ -1048,8 +1048,52 @@ void sub_080369D0(OctorokBossEntity* this, s32 radius, s32 angleSpeed) { } /** Calculate tail angles frozen sub_08036AF0 */ -ASM_FUNC("asm/non_matching/octorokBoss/sub_08036AF0.inc", - void sub_08036AF0(OctorokBossEntity* this, s32 radius, s32 angleSpeed)) +void sub_08036AF0(OctorokBossEntity* this, s32 radius, s32 angleSpeed) { + s16 tmp; + OctorokBossHeap* heap; + u32 index; + heap = this->heap; + for (index = heap->tailCount - 1; index != 0; index--) { + if (angleSpeed == 0) { + if (radius >= sub_080041DC(&heap->tailObjects[index]->base, heap->tailObjects[index - 1]->base.x.HALF.HI, + heap->tailObjects[index - 1]->base.y.HALF.HI)) { + continue; + } else { + heap->tailObjects[index - 1]->angle.HALF.HI = + sub_080045DA(heap->tailObjects[index - 1]->base.x.WORD - heap->tailObjects[index]->base.x.WORD, + heap->tailObjects[index - 1]->base.y.WORD - heap->tailObjects[index]->base.y.WORD); + tmp = FixedMul(gSineTable[heap->tailObjects[index - 1]->angle.HALF.HI], radius << 4); + tmp = FixedDiv(tmp, 0x100); + heap->tailObjects[index - 1]->base.x.WORD = heap->tailObjects[index]->base.x.WORD + ((s32)tmp << 8); + tmp = FixedMul(gSineTable[heap->tailObjects[index - 1]->angle.HALF.HI + 0x40], radius << 4); + heap->tailObjects[index - 1]->base.y.WORD = + heap->tailObjects[index]->base.y.WORD - (FixedDiv(tmp, 0x100) << 8); + } + } else { + if (heap->tailObjects[index - 1]->angle.HALF.HI != heap->tailObjects[index]->angle.HALF.HI) { + if ((s8)(heap->tailObjects[index]->angle.HALF.HI - heap->tailObjects[index - 1]->angle.HALF.HI) >= 1) { + if ((s8)(heap->tailObjects[index]->angle.HALF.HI - heap->tailObjects[index - 1]->angle.HALF.HI) > + (u8)angleSpeed) { + heap->tailObjects[index - 1]->angle.HALF.HI = + heap->tailObjects[index]->angle.HALF.HI - angleSpeed; + } + } else { + if ((s8)(heap->tailObjects[index]->angle.HALF.HI - heap->tailObjects[index - 1]->angle.HALF.HI) < + (s8)-angleSpeed) { + heap->tailObjects[index - 1]->angle.HALF.HI = + heap->tailObjects[index]->angle.HALF.HI + angleSpeed; + } + } + } + tmp = FixedMul(gSineTable[heap->tailObjects[index - 1]->angle.HALF.HI], radius << 4); + heap->tailObjects[index - 1]->base.x.WORD = + heap->tailObjects[index]->base.x.WORD + (FixedDiv(tmp, 0x100) << 8); + tmp = FixedMul(gSineTable[heap->tailObjects[index - 1]->angle.HALF.HI + 0x40], radius << 4); + heap->tailObjects[index - 1]->base.y.WORD = + heap->tailObjects[index]->base.y.WORD - (FixedDiv(tmp, 0x100) << 8); + } + } +} void OctorokBoss_SetAttackTimer(OctorokBossEntity* this) { // These attack timers are only used if the boss isn't frozen and gRoomVars.field_0xc != 0x100 From 582831dac29aa6fdf896bd26cb70afdc15e1f0f5 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:19:09 +0000 Subject: [PATCH 08/13] Match sub_08080CB4 --- asm/non_matching/scroll/sub_08080CB4.inc | 136 ----------------------- src/scroll.c | 11 +- 2 files changed, 6 insertions(+), 141 deletions(-) delete mode 100644 asm/non_matching/scroll/sub_08080CB4.inc diff --git a/asm/non_matching/scroll/sub_08080CB4.inc b/asm/non_matching/scroll/sub_08080CB4.inc deleted file mode 100644 index 2a2d3e17..00000000 --- a/asm/non_matching/scroll/sub_08080CB4.inc +++ /dev/null @@ -1,136 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x58 - ldrb r0, [r4, #0xa] - ldrb r1, [r1] - cmp r0, r1 - beq _08080CF0 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - ldrb r0, [r4, #0xa] - cmp r0, #0x5c - beq _08080CD4 - b _08080E00 -_08080CD4: - ldrb r0, [r4, #0xb] - lsls r0, r0, #3 - ldr r1, _08080CEC @ =gKinstoneWorldEvents - adds r0, r0, r1 - ldrb r0, [r0] - movs r1, #0xf - ands r1, r0 - lsls r0, r0, #4 - orrs r0, r1 - strb r0, [r4, #0x1a] - b _08080E00 - .align 2, 0 -_08080CEC: .4byte gKinstoneWorldEvents -_08080CF0: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _08080D00 - b _08080E00 -_08080D00: - ldrb r0, [r4, #0xa] - subs r0, #0x40 - cmp r0, #0x22 - bhi _08080E00 - lsls r0, r0, #2 - ldr r1, _08080D14 @ =_08080D18 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080D14: .4byte _08080D18 -_08080D18: @ jump table - .4byte _08080DEE @ case 0 - .4byte _08080DEE @ case 1 - .4byte _08080DEE @ case 2 - .4byte _08080DEE @ case 3 - .4byte _08080E00 @ case 4 - .4byte _08080E00 @ case 5 - .4byte _08080E00 @ case 6 - .4byte _08080E00 @ case 7 - .4byte _08080E00 @ case 8 - .4byte _08080E00 @ case 9 - .4byte _08080E00 @ case 10 - .4byte _08080E00 @ case 11 - .4byte _08080E00 @ case 12 - .4byte _08080E00 @ case 13 - .4byte _08080E00 @ case 14 - .4byte _08080E00 @ case 15 - .4byte _08080E00 @ case 16 - .4byte _08080E00 @ case 17 - .4byte _08080E00 @ case 18 - .4byte _08080E00 @ case 19 - .4byte _08080E00 @ case 20 - .4byte _08080E00 @ case 21 - .4byte _08080E00 @ case 22 - .4byte _08080E00 @ case 23 - .4byte _08080E00 @ case 24 - .4byte _08080E00 @ case 25 - .4byte _08080E00 @ case 26 - .4byte _08080E00 @ case 27 - .4byte _08080DEE @ case 28 - .4byte _08080E00 @ case 29 - .4byte _08080E00 @ case 30 - .4byte _08080E00 @ case 31 - .4byte _08080DA4 @ case 32 - .4byte _08080E00 @ case 33 - .4byte _08080DEE @ case 34 -_08080DA4: - adds r5, r4, #0 - adds r5, #0x6a - ldrb r0, [r5] - cmp r0, #0 - beq _08080DB4 - subs r0, #1 - strb r0, [r5] - b _08080E00 -_08080DB4: - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0xa - strb r0, [r5] - adds r0, r4, #0 - movs r1, #7 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08080E00 - adds r0, r4, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r2, r1, #0 - adds r2, #0x62 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x63 - ldrb r0, [r0] - adds r2, #1 - strb r0, [r2] - adds r0, r4, #0 - bl SortEntityAbove - b _08080E00 -_08080DEE: - ldr r0, _08080E04 @ =gRoomTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _08080E00 - adds r0, r4, #0 - bl CreateSparkle -_08080E00: - pop {r4, r5, pc} - .align 2, 0 -_08080E04: .4byte gRoomTransition - .syntax divided diff --git a/src/scroll.c b/src/scroll.c index c4c73049..2d9c85bd 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -813,20 +813,22 @@ void sub_08080C80(u32* param_1) { sub_0807C8B0(gMapTop.mapData, gRoomControls.width >> 4, gRoomControls.height >> 4); } -NONMATCH("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* this)) { +void sub_08080CB4(Entity* this) { Entity* effect; u32 tmp; u32 tmp2; + u32 tmp3; + u32 mask; if (this->type != this->animIndex) { InitAnimationForceUpdate(this, this->type); if (this->type == 0x5c) { const KinstoneWorldEvent* ptr = &gKinstoneWorldEvents[this->type2]; - this->palette.raw = ((ptr->objPalette & 0xf) << 4) | ptr->objPalette; + tmp = ptr->objPalette; + tmp2 = tmp & 0xf; + this->palette.raw = (tmp << 4) | tmp2; } - } else { - UpdateAnimationSingleFrame(this); if (this->spriteSettings.draw != 0) { switch (this->type) { @@ -857,4 +859,3 @@ NONMATCH("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* t } } } -END_NONMATCH From 4f1f2f280e6df4a469e1b066d73ea827be33dc05 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:19:26 +0000 Subject: [PATCH 09/13] Match sub_0803086C --- asm/non_matching/armos/sub_0803086C.inc | 154 ------------------------ src/enemy/armos.c | 38 +++++- 2 files changed, 37 insertions(+), 155 deletions(-) delete mode 100644 asm/non_matching/armos/sub_0803086C.inc diff --git a/asm/non_matching/armos/sub_0803086C.inc b/asm/non_matching/armos/sub_0803086C.inc deleted file mode 100644 index 311d5097..00000000 --- a/asm/non_matching/armos/sub_0803086C.inc +++ /dev/null @@ -1,154 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - ldr r0, [r5, #0x7c] - cmp r0, #0 - bne _08030880 - b _0803099C -_08030880: - ldr r0, _08030928 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803088E - b _0803098A -_0803088E: - ldr r0, _0803092C @ =gRoomControls - mov sb, r0 - ldrh r0, [r5, #0x2e] - mov r2, sb - ldrh r1, [r2, #6] - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r7, r0, #0x10 - ldrh r0, [r5, #0x32] - ldrh r1, [r2, #8] - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r6, r0, #0x10 - movs r3, #0x2e - ldrsh r0, [r5, r3] - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r4, r0, #4 - movs r2, #0x3f - ands r4, r2 - movs r1, #0x32 - ldrsh r0, [r5, r1] - mov r3, sb - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - movs r0, #0x38 - adds r0, r0, r5 - mov r8, r0 - ldrb r1, [r0] - adds r0, r4, #0 - bl GetTileType - ldr r1, _08030930 @ =0x00004049 - mov sl, r1 - cmp r0, sl - bne _08030950 - adds r0, r7, #0 - adds r1, r6, #0 - movs r2, #2 - movs r3, #0xc - bl CheckPlayerInRegion - cmp r0, #0 - beq _0803093C - subs r1, r6, #4 - adds r0, r7, #0 - movs r2, #2 - movs r3, #4 - bl CheckPlayerInRegion - cmp r0, #0 - beq _0803098A - ldr r2, _08030934 @ =gPlayerEntity - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r5, #0x7c] - bl DoExitTransition - ldr r0, _08030938 @ =gRoomTransition - adds r1, r5, #0 - adds r1, #0x80 - ldrb r1, [r1] - adds r0, #0xae - strh r1, [r0] - movs r0, #1 - b _0803099E - .align 2, 0 -_08030928: .4byte gPlayerState -_0803092C: .4byte gRoomControls -_08030930: .4byte 0x00004049 -_08030934: .4byte gPlayerEntity -_08030938: .4byte gRoomTransition -_0803093C: - ldr r0, _0803094C @ =0x00004022 - mov r3, r8 - ldrb r2, [r3] - adds r1, r4, #0 - bl SetTile - b _0803098A - .align 2, 0 -_0803094C: .4byte 0x00004022 -_08030950: - adds r1, r6, #6 - adds r0, r7, #0 - movs r2, #2 - movs r3, #5 - bl CheckPlayerInRegion - cmp r0, #0 - beq _0803098A - movs r4, #0x2e - ldrsh r1, [r5, r4] - mov r2, sb - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r4, #0x32 - ldrsh r0, [r5, r4] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - mov r0, r8 - ldrb r2, [r0] - mov r0, sl - bl SetTile -_0803098A: - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] -_0803099C: - movs r0, #0 -_0803099E: - 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/enemy/armos.c b/src/enemy/armos.c index 7e0c3b7a..38a30371 100644 --- a/src/enemy/armos.c +++ b/src/enemy/armos.c @@ -413,7 +413,43 @@ void sub_08030834(ArmosEntity* this) { SetTile(this->unk_78, COORD_TO_TILE(super), super->collisionLayer); } -ASM_FUNC("asm/non_matching/armos/sub_0803086C.inc", bool32 sub_0803086C(ArmosEntity* this)) +bool32 sub_0803086C(ArmosEntity* this) { + u32 uVar2; + u32 pos; + u32 pos2; + u16 centerY; + u16 centerX; + FORCE_REGISTER(u32 r2, r2); + + if (this->unk_7c != NULL) { + if ((gPlayerState.flags & 0x80) != 0) { + centerX = super->x.HALF_U.HI - gRoomControls.origin_x; + centerY = super->y.HALF_U.HI - gRoomControls.origin_y; + // TODO for some reason the 0x3f of COORD_TO_TILE(super) needs to be forced to r2 here. + pos = ((((((super)->x.HALF.HI) - gRoomControls.origin_x) >> 4) & (r2 = 0x3f)) | + (((((super)->y.HALF.HI) - gRoomControls.origin_y) >> 4) & r2) << 6); + + if (GetTileType(pos, super->collisionLayer) == 0x4049) { + if (CheckPlayerInRegion(centerX, centerY, 2, 0xc) != 0) { + if (CheckPlayerInRegion(centerX, centerY - 4, 2, 4) != 0) { + gPlayerEntity.spritePriority.b0 = 3; + DoExitTransition(this->unk_7c); + gRoomTransition.armos_data.field_0xae = this->unk_80; + return TRUE; + } + } else { + SetTile(0x4022, pos, super->collisionLayer); + } + } else { + if (CheckPlayerInRegion(centerX, centerY + 6, 2, 5) != 0) { + SetTile(0x4049, COORD_TO_TILE(super), super->collisionLayer); + } + } + } + super->spritePriority.b0 = 4; + } + return FALSE; +} void sub_080309A8(ArmosEntity* this) { GetNextFrame(super); From 2fd31d25bc2abd3a9a98a40cf8d6a2f7dd15ff2a Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:19:43 +0000 Subject: [PATCH 10/13] Match sub_0803933C --- asm/non_matching/stalfos/sub_0803933C.inc | 111 ---------------------- src/enemy/stalfos.c | 23 +++-- 2 files changed, 14 insertions(+), 120 deletions(-) delete mode 100644 asm/non_matching/stalfos/sub_0803933C.inc diff --git a/asm/non_matching/stalfos/sub_0803933C.inc b/asm/non_matching/stalfos/sub_0803933C.inc deleted file mode 100644 index b92cc3bb..00000000 --- a/asm/non_matching/stalfos/sub_0803933C.inc +++ /dev/null @@ -1,111 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x44 - bne _08039390 - adds r0, r5, #0 - adds r0, #0x41 - ldrb r0, [r0] - movs r1, #0x7f - ands r1, r0 - cmp r1, #6 - bgt _08039390 - cmp r1, #4 - blt _08039390 - adds r0, r5, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bgt _08039390 - movs r0, #4 - strb r0, [r5, #0xc] - adds r0, r5, #0 - adds r0, #0x3e - ldrb r0, [r0] - strb r0, [r5, #0x15] - ldrb r0, [r5, #0x15] - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - movs r1, #0x10 - eors r0, r1 - asrs r0, r0, #3 - strb r0, [r5, #0x14] - movs r0, #0x90 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - adds r0, r5, #0 - bl sub_0803981C -_08039390: - adds r0, r5, #0 - adds r0, #0x41 - ldrb r2, [r0] - cmp r2, #0x9d - bne _080393F8 - ldr r1, [r5, #0x54] - cmp r1, #0 - bne _080393CA - ldrb r0, [r5, #0xc] - cmp r0, #8 - bhi _080393EC - adds r0, r5, #0 - movs r1, #0x10 - movs r2, #1 - bl CreateProjectileWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _080393DC - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - strb r0, [r1, #0x1e] - movs r0, #2 - strb r0, [r1, #0xb] - movs r0, #0xc3 - lsls r0, r0, #1 - bl EnqueueSFX - b _080393DC -_080393CA: - adds r0, r1, #0 - adds r0, #0x41 - movs r4, #0 - strb r2, [r0] - movs r0, #0xc3 - lsls r0, r0, #1 - bl EnqueueSFX - str r4, [r5, #0x54] -_080393DC: - adds r0, r5, #0 - bl sub_08039A48 - adds r1, r5, #0 - adds r1, #0x78 - ldrh r0, [r1] - adds r0, #0x5a - strh r0, [r1] -_080393EC: - adds r2, r5, #0 - adds r2, #0x3b - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] -_080393F8: - adds r0, r5, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0803940A - adds r0, r5, #0 - movs r1, #0x1c - bl Create0x68FX -_0803940A: - ldr r1, _08039414 @ =Stalfos_Functions - adds r0, r5, #0 - bl EnemyFunctionHandlerAfterCollision - pop {r4, r5, pc} - .align 2, 0 -_08039414: .4byte Stalfos_Functions - .syntax divided diff --git a/src/enemy/stalfos.c b/src/enemy/stalfos.c index c966d468..91ca9530 100644 --- a/src/enemy/stalfos.c +++ b/src/enemy/stalfos.c @@ -73,7 +73,10 @@ void Stalfos_OnTick(StalfosEntity* this) { } } -NONMATCH("asm/non_matching/stalfos/sub_0803933C.inc", void sub_0803933C(StalfosEntity* this)) { +void sub_0803933C(StalfosEntity* this) { + Entity* r0; + Entity* r1; + u32 r2; if (super->hitType == 0x44) { switch (super->contactFlags & 0x7f) { case 4 ... 6: @@ -87,20 +90,23 @@ NONMATCH("asm/non_matching/stalfos/sub_0803933C.inc", void sub_0803933C(StalfosE break; } } - if (super->contactFlags == 0x9d) { - if (super->child == NULL) { + r2 = super->contactFlags; + if (r2 == 0x9d) { + r1 = super->child; + if (r1 == NULL) { if (super->action < 9) { - Entity* projectile = CreateProjectileWithParent(super, STALFOS_PROJECTILE, 1); - if (projectile != NULL) { - projectile->frameIndex = super->animationState << 1; - projectile->type2 = 2; + r1 = CreateProjectileWithParent(super, STALFOS_PROJECTILE, 1); + if (r1 != NULL) { + r1->frameIndex = super->animationState << 1; + r1->type2 = 2; EnqueueSFX(SFX_186); } sub_08039A48(this); this->unk_78 += 0x5a; } } else { - super->child->contactFlags = 0x9d; + r0 = r1; + r0->contactFlags = r2; EnqueueSFX(SFX_186); super->child = NULL; sub_08039A48(this); @@ -113,7 +119,6 @@ NONMATCH("asm/non_matching/stalfos/sub_0803933C.inc", void sub_0803933C(StalfosE } EnemyFunctionHandlerAfterCollision(super, Stalfos_Functions); } -END_NONMATCH void sub_08039418(StalfosEntity* this) { if (super->type == 0) { From 4ec85404c0272c29152848d8bfc67ba6bb87d668 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:20:00 +0000 Subject: [PATCH 11/13] Match sub_08066570 --- asm/non_matching/npc23/sub_08066570.inc | 59 ------------------------- src/npc/npc23.c | 7 +-- 2 files changed, 4 insertions(+), 62 deletions(-) delete mode 100644 asm/non_matching/npc23/sub_08066570.inc diff --git a/asm/non_matching/npc23/sub_08066570.inc b/asm/non_matching/npc23/sub_08066570.inc deleted file mode 100644 index 00dc26d9..00000000 --- a/asm/non_matching/npc23/sub_08066570.inc +++ /dev/null @@ -1,59 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080665DE - ldrb r0, [r5, #0xc] - cmp r0, #3 - beq _080665DE - ldr r4, _080665E0 @ =gPlayerEntity - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0x50 - bl sub_0806FC80 - cmp r0, #0 - beq _080665DE - adds r0, r5, #0 - adds r1, r4, #0 - bl GetFacingDirection - adds r3, r0, #0 - movs r6, #1 - movs r1, #0x18 - adds r4, r3, #0 - ands r4, r1 - ldrb r0, [r5, #0x15] - adds r2, r1, #0 - ands r2, r0 - cmp r2, r4 - bne _080665C8 - adds r2, r3, #5 - movs r1, #7 - ands r2, r1 - ldrb r0, [r5, #0x15] - adds r0, #5 - ands r0, r1 - cmp r0, #2 - bhi _080665C8 - cmp r2, #2 - bhi _080665C8 - movs r6, #0 -_080665C8: - cmp r6, #0 - beq _080665DE - strb r3, [r5, #0x15] - adds r3, #4 - movs r0, #0x18 - ands r3, r0 - lsrs r3, r3, #3 - adds r0, r5, #0 - adds r1, r3, #0 - bl InitializeAnimation -_080665DE: - pop {r4, r5, r6, pc} - .align 2, 0 -_080665E0: .4byte gPlayerEntity - .syntax divided diff --git a/src/npc/npc23.c b/src/npc/npc23.c index 6879c6a9..eccd933c 100644 --- a/src/npc/npc23.c +++ b/src/npc/npc23.c @@ -174,8 +174,9 @@ bool32 sub_0806650C(Entity* this) { return 1; } -NONMATCH("asm/non_matching/npc23/sub_08066570.inc", void sub_08066570(Entity* this)) { +void sub_08066570(Entity* this) { u32 direction; + s32 tmp; u32 dir1, dir2; bool32 cond; if ((this->frame & ANIM_DONE) == 0) { @@ -191,6 +192,7 @@ NONMATCH("asm/non_matching/npc23/sub_08066570.inc", void sub_08066570(Entity* th dir2 = (direction & 0x18); dir1 = (this->direction & 0x18); + tmp = 0x18; if (dir1 == dir2) { dir1 = (direction + 5) & 7; dir2 = (this->direction + 5) & 7; @@ -201,9 +203,8 @@ NONMATCH("asm/non_matching/npc23/sub_08066570.inc", void sub_08066570(Entity* th if (cond) { this->direction = direction; direction += 4; - direction &= 0x18; + direction &= tmp; direction >>= 3; InitializeAnimation(this, direction); } } -END_NONMATCH From 2ddfdc3e4f1ac9cfb414592b66c9e39931a57e2b Mon Sep 17 00:00:00 2001 From: anonymous <> Date: Sun, 6 Nov 2022 10:20:17 +0000 Subject: [PATCH 12/13] Match SyncPlayerToPlatform --- .../objectUtils/SyncPlayerToPlatform.inc | 109 ------------------ src/objectUtils.c | 43 +++---- 2 files changed, 22 insertions(+), 130 deletions(-) delete mode 100644 asm/non_matching/objectUtils/SyncPlayerToPlatform.inc diff --git a/asm/non_matching/objectUtils/SyncPlayerToPlatform.inc b/asm/non_matching/objectUtils/SyncPlayerToPlatform.inc deleted file mode 100644 index ac068ae2..00000000 --- a/asm/non_matching/objectUtils/SyncPlayerToPlatform.inc +++ /dev/null @@ -1,109 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080A2CBA - lsrs r0, r1, #3 - cmp r0, #1 - beq _080A2C3C - cmp r0, #1 - bgt _080A2C04 - cmp r0, #0 - beq _080A2C0E - b _080A2CBA -_080A2C04: - cmp r0, #2 - beq _080A2C68 - cmp r0, #3 - beq _080A2C94 - b _080A2CBA -_080A2C0E: - ldrh r5, [r4, #0x32] - adds r0, r4, #0 - bl LinearMoveUpdate - ldrh r1, [r4, #0x32] - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - subs r0, r0, r1 - lsls r0, r0, #0x10 - asrs r1, r0, #0x10 - cmp r1, #0 - beq _080A2CBA - cmp r6, #0 - beq _080A2CBA - ldr r0, _080A2C38 @ =gPlayerEntity - lsls r1, r1, #8 - movs r2, #0 - bl sub_080044AE - b _080A2CBA - .align 2, 0 -_080A2C38: .4byte gPlayerEntity -_080A2C3C: - ldrh r5, [r4, #0x2e] - adds r0, r4, #0 - bl LinearMoveUpdate - ldrh r1, [r4, #0x2e] - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - subs r1, r1, r0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - cmp r1, #0 - beq _080A2CBA - cmp r6, #0 - beq _080A2CBA - ldr r0, _080A2C64 @ =gPlayerEntity - lsls r1, r1, #8 - movs r2, #8 - bl sub_080044AE - b _080A2CBA - .align 2, 0 -_080A2C64: .4byte gPlayerEntity -_080A2C68: - ldrh r5, [r4, #0x32] - adds r0, r4, #0 - bl LinearMoveUpdate - ldrh r1, [r4, #0x32] - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - subs r1, r1, r0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - cmp r1, #0 - beq _080A2CBA - cmp r6, #0 - beq _080A2CBA - ldr r0, _080A2C90 @ =gPlayerEntity - lsls r1, r1, #8 - movs r2, #0x10 - bl sub_080044AE - b _080A2CBA - .align 2, 0 -_080A2C90: .4byte gPlayerEntity -_080A2C94: - ldrh r5, [r4, #0x2e] - adds r0, r4, #0 - bl LinearMoveUpdate - ldrh r1, [r4, #0x2e] - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - subs r0, r0, r1 - lsls r0, r0, #0x10 - asrs r1, r0, #0x10 - cmp r1, #0 - beq _080A2CBA - cmp r6, #0 - beq _080A2CBA - ldr r0, _080A2CBC @ =gPlayerEntity - lsls r1, r1, #8 - movs r2, #0x18 - bl sub_080044AE -_080A2CBA: - pop {r4, r5, r6, pc} - .align 2, 0 -_080A2CBC: .4byte gPlayerEntity - .syntax divided diff --git a/src/objectUtils.c b/src/objectUtils.c index 1c78c451..a97cdbfb 100644 --- a/src/objectUtils.c +++ b/src/objectUtils.c @@ -266,52 +266,53 @@ void CreateSparkle(Entity* entity) { } } -NONMATCH("asm/non_matching/objectUtils/SyncPlayerToPlatform.inc", - void SyncPlayerToPlatform(Entity* this, bool32 param_2)) { +void SyncPlayerToPlatform(Entity* this, bool32 param_2) { s16 oldValue; s32 diff; u16 newValue; + FORCE_REGISTER(Entity * that, r4) = this; + FORCE_REGISTER(bool32 p2, r6) = param_2; + u16 dir = that->direction; - if ((this->direction & 0x80) == 0) { - switch (this->direction >> 3) { + if ((dir & 0x80) == 0) { + switch (dir >> 3) { case 0: - oldValue = this->y.HALF_U.HI; - LinearMoveUpdate(this); - newValue = this->y.HALF_U.HI; + oldValue = that->y.HALF_U.HI; + LinearMoveUpdate(that); + newValue = that->y.HALF_U.HI; diff = ((oldValue - newValue) << 0x10) >> 0x10; - if ((diff != 0) && (param_2 != 0)) { + if ((diff != 0) && (p2 != 0)) { sub_080044AE(&gPlayerEntity, diff << 8, 0); } break; case 1: - oldValue = this->x.HALF_U.HI; - LinearMoveUpdate(this); - diff = ((this->x.HALF_U.HI - oldValue) * 0x10000) >> 0x10; - if ((diff != 0) && (param_2 != 0)) { + oldValue = that->x.HALF_U.HI; + LinearMoveUpdate(that); + diff = ((that->x.HALF_U.HI - oldValue) * 0x10000) >> 0x10; + if ((diff != 0) && (p2 != 0)) { sub_080044AE(&gPlayerEntity, diff << 8, 8); } break; case 2: - oldValue = this->y.HALF_U.HI; - LinearMoveUpdate(this); - diff = ((this->y.HALF_U.HI - oldValue) * 0x10000) >> 0x10; - if ((diff != 0) && (param_2 != 0)) { + oldValue = that->y.HALF_U.HI; + LinearMoveUpdate(that); + diff = ((that->y.HALF_U.HI - oldValue) * 0x10000) >> 0x10; + if ((diff != 0) && (p2 != 0)) { sub_080044AE(&gPlayerEntity, diff << 8, 0x10); } break; case 3: - oldValue = this->x.HALF_U.HI; - LinearMoveUpdate(this); - newValue = this->x.HALF_U.HI; + oldValue = that->x.HALF_U.HI; + LinearMoveUpdate(that); + newValue = that->x.HALF_U.HI; diff = ((oldValue - newValue) << 0x10) >> 0x10; - if ((diff != 0) && (param_2 != 0)) { + if ((diff != 0) && (p2 != 0)) { sub_080044AE(&gPlayerEntity, diff << 8, 0x18); } break; } } } -END_NONMATCH void UpdateRailMovement(Entity* this, u16** param_2, u16* param_3) { u16* ptr = *param_2; From 6531b8828535d6cb347a6d008feb7b1fcfdd4f9a Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 6 Nov 2022 10:20:34 +0000 Subject: [PATCH 13/13] Match UpdatePlayerCollision --- .../UpdatePlayerCollision.inc | 1394 ----------------- src/beanstalkSubtask.c | 449 +++++- src/common.c | 12 +- src/enemy/gleerok.c | 22 +- 4 files changed, 467 insertions(+), 1410 deletions(-) delete mode 100644 asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc diff --git a/asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc b/asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc deleted file mode 100644 index 656fd19c..00000000 --- a/asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc +++ /dev/null @@ -1,1394 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - ldr r0, _0801985C @ =gPlayerState - adds r2, r0, #0 - adds r2, #0xa8 - ldrb r1, [r2] - adds r7, r0, #0 - cmp r1, #0 - bne _08019860 - adds r0, #0xa9 - ldrb r0, [r0] - b _08019862 - .align 2, 0 -_0801985C: .4byte gPlayerState -_08019860: - ldrb r0, [r2] -_08019862: - cmp r0, #0x12 - bne _0801986A - bl _0801A2A4 -_0801986A: - cmp r0, #0x12 - bgt _08019878 - cmp r0, #3 - bne _08019876 - bl _0801A2A4 -_08019876: - b _08019880 -_08019878: - cmp r0, #0x16 - bne _08019880 - bl _0801A2A4 -_08019880: - ldrb r0, [r7, #0x1e] - ldr r1, _08019898 @ =gPlayerEntity - mov sb, r1 - cmp r0, #0 - bne _08019890 - ldrb r0, [r1, #0xc] - cmp r0, #0x1d - bne _0801989C -_08019890: - mov r2, sb - ldrb r4, [r2, #0x15] - b _0801989E - .align 2, 0 -_08019898: .4byte gPlayerEntity -_0801989C: - ldrb r4, [r7, #0xd] -_0801989E: - movs r0, #0x83 - ands r0, r4 - cmp r0, #0 - bne _0801997C - ldrb r0, [r7, #0xa] - cmp r0, #0 - bne _0801997C - lsrs r1, r4, #2 - mov r0, sb - bl sub_0807BDB8 - adds r4, r0, #0 - cmp r4, #0xff - beq _0801997C - ldr r5, _08019960 @ =gRoomControls - ldrb r1, [r5, #0xf] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _0801997C - lsls r1, r4, #2 - ldr r0, _08019964 @ =gUnk_080B4490 - adds r6, r1, r0 - mov r3, sb - movs r1, #0x2e - ldrsh r0, [r3, r1] - movs r2, #0 - ldrsh r1, [r6, r2] - adds r0, r0, r1 - ldrh r1, [r5, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - mov r1, sb - movs r2, #0x32 - ldrsh r1, [r1, r2] - mov r8, r1 - movs r1, #2 - ldrsh r6, [r6, r1] - mov r2, r8 - adds r1, r2, r6 - ldrh r2, [r5, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - mov r1, sb - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080B1B44 - cmp r0, #0xff - bne _0801997C - ldr r0, [r7, #0x30] - ldr r1, _08019968 @ =0x00010002 - ands r0, r1 - cmp r0, #0 - bne _0801995A - ldrb r1, [r7, #0x1b] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - bne _0801995A - mov r3, sb - movs r1, #0x2e - ldrsh r0, [r3, r1] - ldrh r1, [r5, #6] - subs r0, r0, r1 - movs r2, #0x32 - ldrsh r1, [r3, r2] - ldrh r2, [r5, #8] - subs r1, r1, r2 - adds r2, r4, #0 - movs r3, #5 - bl sub_080806BC - cmp r0, #0 - bne _0801996C - ldrb r0, [r7, #5] - cmp r0, #0 - bne _0801995A - ldrb r1, [r7, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - bne _0801995A - mov r0, sb - adds r1, r4, #0 - bl sub_0807BD14 - cmp r0, #0 - bne _0801996C -_0801995A: - movs r0, #3 - bl _0801A2A6 - .align 2, 0 -_08019960: .4byte gRoomControls -_08019964: .4byte gUnk_080B4490 -_08019968: .4byte 0x00010002 -_0801996C: - ldr r1, _08019978 @ =gPlayerEntity - lsls r0, r4, #3 - strb r0, [r1, #0x15] - movs r0, #0xf - bl _0801A2A6 - .align 2, 0 -_08019978: .4byte gPlayerEntity -_0801997C: - ldr r4, _080199DC @ =gPlayerEntity - adds r5, r4, #0 - adds r5, #0x38 - ldrb r0, [r5] - bl GetLayerByIndex - mov r8, r0 - ldrb r1, [r4, #0x14] - movs r0, #6 - ands r0, r1 - lsls r0, r0, #1 - ldr r1, _080199E0 @ =gUnk_080B4468 - adds r6, r0, r1 - movs r3, #0x2e - ldrsh r0, [r4, r3] - movs r2, #0 - ldrsh r1, [r6, r2] - adds r0, r0, r1 - ldr r3, _080199E4 @ =gRoomControls - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r7, r0, #4 - movs r2, #0x3f - ands r7, r2 - movs r1, #0x32 - ldrsh r0, [r4, r1] - movs r4, #2 - ldrsh r1, [r6, r4] - adds r0, r0, r1 - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r7, r0 - ldrb r1, [r5] - adds r0, r7, #0 - bl GetTileType - adds r6, r0, #0 - ldr r0, _080199E8 @ =0x00003FFF - cmp r6, r0 - bhi _080199EC - adds r0, r6, #0 - bl sub_080B1B54 - adds r4, r0, #0 - b _080199EE - .align 2, 0 -_080199DC: .4byte gPlayerEntity -_080199E0: .4byte gUnk_080B4468 -_080199E4: .4byte gRoomControls -_080199E8: .4byte 0x00003FFF -_080199EC: - adds r4, r6, #0 -_080199EE: - ldr r5, _08019A28 @ =gPlayerEntity - ldrb r1, [r5, #0x14] - adds r3, r1, #0 - ldr r0, _08019A2C @ =0x00004036 - mov sb, r5 - cmp r4, r0 - bne _080199FE - b _08019F0C -_080199FE: - cmp r4, r0 - bhi _08019AE0 - cmp r4, #0x71 - bne _08019A08 - b _08019D94 -_08019A08: - cmp r4, #0x71 - bhi _08019A4E - cmp r4, #0x3a - bne _08019A12 - b _08019CFC -_08019A12: - cmp r4, #0x3a - bhi _08019A30 - cmp r4, #0x1a - bne _08019A1C - b _08019D48 -_08019A1C: - cmp r4, #0x28 - bne _08019A22 - b _08019BB8 -_08019A22: - bl _0801A2A4 - .align 2, 0 -_08019A28: .4byte gPlayerEntity -_08019A2C: .4byte 0x00004036 -_08019A30: - cmp r4, #0x5b - bne _08019A36 - b _08019CFC -_08019A36: - cmp r4, #0x5b - bhi _08019A44 - cmp r4, #0x3d - bne _08019A40 - b _08019DD4 -_08019A40: - bl _0801A2A4 -_08019A44: - cmp r4, #0x70 - bne _08019A4A - b _08019CC0 -_08019A4A: - bl _0801A2A4 -_08019A4E: - ldr r0, _08019A6C @ =0x0000400B - cmp r4, r0 - bne _08019A56 - b _08019E44 -_08019A56: - cmp r4, r0 - bhi _08019A70 - cmp r4, #0x72 - bne _08019A60 - b _08019FA8 -_08019A60: - subs r0, #0xb - cmp r4, r0 - bne _08019A68 - b _08019B78 -_08019A68: - bl _0801A2A4 - .align 2, 0 -_08019A6C: .4byte 0x0000400B -_08019A70: - ldr r0, _08019AD4 @ =0x0000401B - cmp r4, r0 - bne _08019A78 - b _08019C70 -_08019A78: - cmp r4, r0 - bhs _08019A80 - bl _0801A2A4 -_08019A80: - adds r0, #0x12 - cmp r4, r0 - bls _08019A8A - bl _0801A2A4 -_08019A8A: - subs r0, #2 - cmp r4, r0 - bhs _08019A94 - bl _0801A2A4 -_08019A94: - mov r0, r8 - adds r1, r7, #0 - bl sub_0801A370 - cmp r0, #0 - bne _08019AA4 - bl _0801A2A4 -_08019AA4: - lsls r0, r7, #1 - mov r2, r8 - adds r2, #4 - adds r2, r2, r0 - ldrb r1, [r5, #0x14] - movs r0, #4 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1a - ldr r3, _08019AD8 @ =0x00004030 - adds r1, r3, #0 - adds r0, r0, r1 - strh r0, [r2] - ldr r2, _08019ADC @ =gPlayerState - ldr r1, [r2, #0x30] - movs r0, #0x80 - ands r1, r0 - adds r7, r2, #0 - mov sb, r5 - cmp r1, #0 - bne _08019AD0 - b _0801A09A -_08019AD0: - b _0801A094 - .align 2, 0 -_08019AD4: .4byte 0x0000401B -_08019AD8: .4byte 0x00004030 -_08019ADC: .4byte gPlayerState -_08019AE0: - ldr r0, _08019B04 @ =0x00004053 - cmp r4, r0 - bne _08019AE8 - b _0801A13C -_08019AE8: - cmp r4, r0 - bhi _08019B24 - subs r0, #0xb - cmp r4, r0 - bhi _08019B08 - subs r0, #8 - cmp r4, r0 - blo _08019AFA - b _08019DD4 -_08019AFA: - subs r0, #2 - cmp r4, r0 - bne _08019B02 - b _08019F50 -_08019B02: - b _0801A2A4 - .align 2, 0 -_08019B04: .4byte 0x00004053 -_08019B08: - ldr r0, _08019B20 @ =0x00004051 - cmp r4, r0 - bne _08019B10 - b _08019CFC -_08019B10: - cmp r4, r0 - bls _08019B16 - b _0801A120 -_08019B16: - subs r0, #7 - cmp r4, r0 - bne _08019B1E - b _0801A0BC -_08019B1E: - b _0801A2A4 - .align 2, 0 -_08019B20: .4byte 0x00004051 -_08019B24: - ldr r0, _08019B48 @ =0x00004058 - cmp r4, r0 - bne _08019B2C - b _0801A19A -_08019B2C: - cmp r4, r0 - bhi _08019B4C - subs r0, #2 - cmp r4, r0 - bne _08019B38 - b _0801A15A -_08019B38: - cmp r4, r0 - bls _08019B3E - b _0801A198 -_08019B3E: - subs r0, #1 - cmp r4, r0 - bne _08019B46 - b _0801A158 -_08019B46: - b _0801A2A4 - .align 2, 0 -_08019B48: .4byte 0x00004058 -_08019B4C: - ldr r0, _08019B64 @ =0x0000405F - cmp r4, r0 - bne _08019B54 - b _0801A1D4 -_08019B54: - cmp r4, r0 - bhi _08019B68 - subs r0, #5 - cmp r4, r0 - bne _08019B60 - b _08019EC8 -_08019B60: - b _0801A2A4 - .align 2, 0 -_08019B64: .4byte 0x0000405F -_08019B68: - ldr r0, _08019B74 @ =0x0000407D - cmp r4, r0 - bne _08019B70 - b _0801A23C -_08019B70: - b _0801A2A4 - .align 2, 0 -_08019B74: .4byte 0x0000407D -_08019B78: - mov r0, r8 - adds r1, r7, #0 - movs r2, #2 - bl sub_0801A458 - cmp r0, #0 - bne _08019B88 - b _0801A2A4 -_08019B88: - lsls r0, r7, #1 - mov r1, r8 - adds r1, #4 - adds r1, r1, r0 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - ldr r4, _08019BB0 @ =0x00004001 - adds r0, r0, r4 - strh r0, [r1] - ldr r2, _08019BB4 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - adds r7, r2, #0 - cmp r0, #0 - bne _08019BAA - b _0801A0F8 -_08019BAA: - movs r0, #0xc0 - b _0801A0FA - .align 2, 0 -_08019BB0: .4byte 0x00004001 -_08019BB4: .4byte gPlayerState -_08019BB8: - ldr r1, _08019C50 @ =gPlayerState - ldr r0, [r1, #0x30] - movs r2, #0x80 - ands r0, r2 - cmp r0, #0 - beq _08019BC6 - b _0801A2A4 -_08019BC6: - ldrb r0, [r1, #0xa] - cmp r0, #0 - beq _08019BCE - b _0801A2A4 -_08019BCE: - ldrb r0, [r5, #0x14] - lsls r0, r0, #2 - ldrb r1, [r1, #0xd] - cmp r0, r1 - beq _08019BDA - b _0801A2A4 -_08019BDA: - ldrb r1, [r5, #0x15] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _08019BE6 - b _0801A2A4 -_08019BE6: - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r7, #0 - bl sub_080B1B44 - cmp r0, #0xf - beq _08019BF8 - b _0801A2A4 -_08019BF8: - bl sub_08079778 - cmp r0, #0 - bne _08019C02 - b _0801A2A4 -_08019C02: - ldrb r1, [r5, #0x14] - movs r0, #6 - ands r0, r1 - lsls r0, r0, #1 - ldr r1, _08019C54 @ =gUnk_080B4478 - adds r6, r0, r1 - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r4, _08019C58 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - movs r2, #0 - ldrsh r1, [r6, r2] - adds r0, r0, r1 - movs r3, #0x32 - ldrsh r1, [r5, r3] - ldrh r2, [r4, #8] - subs r1, r1, r2 - movs r3, #2 - ldrsh r2, [r6, r3] - adds r1, r1, r2 - bl sub_08080734 - adds r2, r0, #0 - cmp r2, #0 - bne _08019C38 - b _0801A2A4 -_08019C38: - ldrb r1, [r5, #0x14] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08019C5C - ldrh r0, [r2, #4] - ldrh r4, [r4, #8] - adds r0, r0, r4 - adds r0, #6 - strh r0, [r5, #0x32] - b _08019C64 - .align 2, 0 -_08019C50: .4byte gPlayerState -_08019C54: .4byte gUnk_080B4478 -_08019C58: .4byte gRoomControls -_08019C5C: - ldrh r0, [r2, #2] - ldrh r4, [r4, #6] - adds r0, r0, r4 - strh r0, [r5, #0x2e] -_08019C64: - movs r0, #4 - movs r1, #0 - movs r2, #1 - bl sub_08078AC0 - b _0801A2A4 -_08019C70: - mov r0, r8 - adds r1, r7, #0 - movs r2, #0xb - bl sub_0801A2B0 - cmp r0, #0 - bne _08019C80 - b _0801A2A4 -_08019C80: - lsls r0, r7, #1 - mov r1, r8 - adds r1, #4 - adds r1, r1, r0 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - ldr r4, _08019CB8 @ =0x0000401C - adds r0, r0, r4 - movs r3, #0 - strh r0, [r1] - ldr r1, _08019CBC @ =gPlayerState - movs r0, #0xa0 - strb r0, [r1, #6] - movs r0, #5 - strb r0, [r1, #0xc] - ldr r0, [r1, #0x30] - movs r2, #1 - orrs r0, r2 - str r0, [r1, #0x30] - strh r3, [r5, #0x2c] - strh r3, [r5, #0x30] - ldrb r0, [r5, #0x14] - lsls r0, r0, #2 - strb r0, [r5, #0x15] - strb r2, [r5, #0xa] - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_08019CB8: .4byte 0x0000401C -_08019CBC: .4byte gPlayerState -_08019CC0: - ldr r0, _08019CF8 @ =gPlayerState - adds r2, r0, #0 - adds r2, #0x35 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08019CD2 - b _0801A2A4 -_08019CD2: - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08019CE2 - b _0801A2A4 -_08019CE2: - ldrb r0, [r2] - lsls r0, r0, #2 - adds r1, r6, #0 - adds r2, r7, #0 - bl sub_0801A9F0 - cmp r0, #0 - bne _08019CF4 - b _0801A2A4 -_08019CF4: - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_08019CF8: .4byte gPlayerState -_08019CFC: - ldr r2, _08019D40 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08019D0A - b _0801A2A4 -_08019D0A: - mov r1, sb - ldrb r0, [r1, #0x14] - cmp r0, #0 - beq _08019D14 - b _0801A2A4 -_08019D14: - ldr r0, _08019D44 @ =gUnk_0200AF00 - adds r0, #0x2d - movs r1, #4 - strb r1, [r0] - adds r0, r2, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0xc0 - ands r0, r1 - cmp r0, #0 - bne _08019D2C - b _0801A2A4 -_08019D2C: - movs r0, #1 - strb r0, [r2, #0x1a] - mov r0, sb - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r7, #0 - bl sub_080A7CFC - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_08019D40: .4byte gPlayerState -_08019D44: .4byte gUnk_0200AF00 -_08019D48: - cmp r3, #0 - beq _08019D4E - b _0801A2A4 -_08019D4E: - ldr r2, _08019D8C @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x81 - lsls r1, r1, #7 - ands r0, r1 - cmp r0, #0 - beq _08019D5E - b _0801A2A4 -_08019D5E: - ldr r0, _08019D90 @ =gUnk_0200AF00 - adds r0, #0x2d - movs r1, #6 - strb r1, [r0] - adds r0, r2, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0x88 - ands r0, r1 - cmp r0, #0 - bne _08019D76 - b _0801A2A4 -_08019D76: - movs r0, #1 - strb r0, [r2, #0x1a] - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r7, #0 - bl OpenSmallChest - movs r0, #2 - b _0801A2A6 - .align 2, 0 -_08019D8C: .4byte gPlayerState -_08019D90: .4byte gUnk_0200AF00 -_08019D94: - bl HasDungeonMap - cmp r0, #0 - bne _08019D9E - b _0801A2A4 -_08019D9E: - ldr r0, _08019DCC @ =gUnk_0200AF00 - adds r0, #0x2d - movs r1, #6 - strb r1, [r0] - ldr r2, _08019DD0 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0x88 - ands r0, r1 - cmp r0, #0 - bne _08019DB8 - b _0801A2A4 -_08019DB8: - movs r0, #1 - strb r0, [r2, #0x1a] - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r7, #0 - bl sub_0804B388 - movs r0, #2 - b _0801A2A6 - .align 2, 0 -_08019DCC: .4byte gUnk_0200AF00 -_08019DD0: .4byte gPlayerState -_08019DD4: - ldr r4, _08019E3C @ =gPlayerState - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #7 - ands r0, r1 - cmp r0, #0 - beq _08019DE4 - b _0801A2A4 -_08019DE4: - bl sub_08079778 - cmp r0, #0 - bne _08019DEE - b _0801A2A4 -_08019DEE: -.ifdef USA - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _08019DF6 - b _0801A2A4 -.else -.ifdef DEMO_USA - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _08019DF6 - b _0801A2A4 -.else -.ifdef DEMO_JP @ TODO deduplicate - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _08019DF6 - b _0801A2A4 -.endif -.endif -.endif -_08019DF6: - ldr r2, _08019E40 @ =gPlayerEntity - ldrb r0, [r2, #0x14] - lsls r0, r0, #2 - ldrb r3, [r4, #0xd] - cmp r0, r3 - beq _08019E04 - b _0801A2A4 -_08019E04: - ldrb r1, [r2, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08019E10 - b _0801A2A4 -_08019E10: - ldrb r0, [r2, #0xf] - cmp r0, #5 - bhi _08019E18 - b _0801A2A4 -_08019E18: - movs r0, #0x81 - strb r0, [r4, #2] - ldr r0, [r4, #0x30] - movs r1, #0x20 - orrs r0, r1 - str r0, [r4, #0x30] - movs r0, #0x15 - strb r0, [r4, #0xc] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r2, #0x20] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_08019E3C: .4byte gPlayerState -_08019E40: .4byte gPlayerEntity -_08019E44: - mov r0, r8 - adds r1, r7, #0 - movs r2, #8 - bl sub_0801A2B0 - cmp r0, #0 - bne _08019E54 - b _0801A2A4 -_08019E54: - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - lsls r1, r7, #1 - cmp r0, #3 - bne _08019E84 - ldr r0, _08019E7C @ =gMapTop - adds r0, #4 - adds r2, r1, r0 - ldrh r0, [r2] - cmp r0, r4 - bne _08019E84 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - ldr r4, _08019E80 @ =0x0000400C - adds r0, r0, r4 - strh r0, [r2] - mov sb, r5 - b _08019E98 - .align 2, 0 -_08019E7C: .4byte gMapTop -_08019E80: .4byte 0x0000400C -_08019E84: - mov r0, r8 - adds r0, #4 - adds r0, r0, r1 - ldr r2, _08019EBC @ =gPlayerEntity - ldrb r1, [r2, #0x14] - lsrs r1, r1, #1 - ldr r3, _08019EC0 @ =0x0000400C - adds r1, r1, r3 - strh r1, [r0] - mov sb, r2 -_08019E98: - ldr r2, _08019EC4 @ =gPlayerState - movs r3, #0 - movs r0, #0xa0 - strb r0, [r2, #6] - movs r0, #5 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - mov r4, sb - strh r3, [r4, #0x2c] - strh r3, [r4, #0x30] - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_08019EBC: .4byte gPlayerEntity -_08019EC0: .4byte 0x0000400C -_08019EC4: .4byte gPlayerState -_08019EC8: - mov r0, r8 - adds r1, r7, #0 - movs r2, #2 - bl sub_0801A2B0 - cmp r0, #0 - bne _08019ED8 - b _0801A2A4 -_08019ED8: - lsls r0, r7, #1 - mov r1, r8 - adds r1, #4 - adds r1, r1, r0 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - ldr r2, _08019F04 @ =0x0000405B - adds r0, r0, r2 - movs r3, #0 - strh r0, [r1] - ldr r2, _08019F08 @ =gPlayerState - movs r0, #0x98 - strb r0, [r2, #6] - movs r0, #5 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - strh r3, [r5, #0x2c] - strh r3, [r5, #0x30] - b _0801A228 - .align 2, 0 -_08019F04: .4byte 0x0000405B -_08019F08: .4byte gPlayerState -_08019F0C: - mov r0, r8 - adds r1, r7, #0 - movs r2, #0xb - bl sub_0801A2B0 - cmp r0, #0 - bne _08019F1C - b _0801A2A4 -_08019F1C: - lsls r0, r7, #1 - mov r1, r8 - adds r1, #4 - adds r1, r1, r0 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - ldr r3, _08019F48 @ =0x00004037 - adds r0, r0, r3 - movs r3, #0 - strh r0, [r1] - ldr r2, _08019F4C @ =gPlayerState - movs r0, #0xa0 - strb r0, [r2, #6] - movs r0, #5 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - strh r3, [r5, #0x2c] - strh r3, [r5, #0x30] - b _0801A228 - .align 2, 0 -_08019F48: .4byte 0x00004037 -_08019F4C: .4byte gPlayerState -_08019F50: - cmp r3, #0 - beq _08019F56 - b _0801A2A4 -_08019F56: - ldr r2, _08019FA0 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x35 - ldrb r0, [r0] - ldrb r1, [r2, #0xd] - orrs r0, r1 - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08019F6C - b _0801A2A4 -_08019F6C: - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08019F7C - b _0801A2A4 -_08019F7C: - lsls r1, r7, #1 - mov r0, r8 - adds r0, #4 - adds r0, r0, r1 - ldr r1, _08019FA4 @ =0x0000403F - strh r1, [r0] - movs r0, #0x82 - strb r0, [r2, #6] - movs r0, #5 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - strh r3, [r5, #0x2c] - strh r3, [r5, #0x30] - b _0801A228 - .align 2, 0 -_08019FA0: .4byte gPlayerState -_08019FA4: .4byte 0x0000403F -_08019FA8: - ldr r0, _0801A07C @ =gPlayerState - adds r0, #0x35 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08019FB8 - b _0801A2A4 -_08019FB8: - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08019FC8 - b _0801A2A4 -_08019FC8: - adds r0, r5, #0 - movs r1, #1 - bl sub_0801A570 - adds r7, r0, #0 - ldr r0, _0801A080 @ =0x0000FFFF - cmp r7, r0 - bne _08019FDA - b _0801A2A4 -_08019FDA: - lsrs r0, r7, #0xc - subs r0, #1 - mov r8, r0 - ldr r0, _0801A084 @ =0x00000FFF - ands r7, r0 - movs r4, #0 - movs r6, #0 - ldr r5, _0801A088 @ =gPlayerClones - mov sb, r5 -_08019FEC: - mov r1, sb - ldr r0, [r1] - movs r1, #1 - lsls r1, r4 - ldr r0, [r0, #0x6c] - ands r0, r1 - cmp r0, #0 - beq _0801A00A - ldr r0, [r5] - movs r1, #0 - bl sub_0801A570 - cmp r0, r7 - bne _0801A00A - adds r6, #1 -_0801A00A: - adds r5, #4 - adds r4, #1 - cmp r4, #2 - bls _08019FEC - cmp r6, r8 - bhs _0801A018 - b _0801A2A4 -_0801A018: - movs r0, #7 - mov r1, r8 - movs r2, #0 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - bne _0801A02A - b _0801A2A4 -_0801A02A: - ldr r3, _0801A08C @ =gPlayerEntity - ldrb r0, [r3, #0x14] - lsls r0, r0, #2 - movs r4, #0 - strb r0, [r5, #0x15] - movs r1, #0x3f - adds r0, r7, #0 - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - ldr r2, _0801A090 @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r5, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r7 - lsrs r0, r0, #2 - adds r0, #8 - ldrh r1, [r2, #8] - adds r1, r1, r0 - strh r1, [r5, #0x32] - adds r0, r3, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x38 - strb r1, [r0] - ldr r2, _0801A07C @ =gPlayerState - movs r0, #0xa0 - strb r0, [r2, #6] - movs r0, #5 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - strh r4, [r3, #0x2c] - strh r4, [r3, #0x30] - ldrb r0, [r5, #0x15] - b _0801A0B6 - .align 2, 0 -_0801A07C: .4byte gPlayerState -_0801A080: .4byte 0x0000FFFF -_0801A084: .4byte 0x00000FFF -_0801A088: .4byte gPlayerClones -_0801A08C: .4byte gPlayerEntity -_0801A090: .4byte gRoomControls -_0801A094: - movs r0, #0xa0 - strb r0, [r2, #6] - b _0801A09E -_0801A09A: - movs r0, #0x90 - strb r0, [r7, #6] -_0801A09E: - movs r2, #0 - movs r0, #5 - strb r0, [r7, #0xc] - ldr r0, [r7, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r7, #0x30] - mov r3, sb - strh r2, [r3, #0x2c] - strh r2, [r3, #0x30] - ldrb r0, [r3, #0x14] - lsls r0, r0, #2 -_0801A0B6: - strb r0, [r3, #0x15] - movs r0, #1 - b _0801A2A6 -_0801A0BC: - mov r0, r8 - adds r1, r7, #0 - movs r2, #8 - bl sub_0801A458 - cmp r0, #0 - bne _0801A0CC - b _0801A2A4 -_0801A0CC: - lsls r0, r7, #1 - mov r1, r8 - adds r1, #4 - adds r1, r1, r0 - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - ldr r4, _0801A0F0 @ =0x0000404B - adds r0, r0, r4 - strh r0, [r1] - ldr r2, _0801A0F4 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - adds r7, r2, #0 - cmp r0, #0 - beq _0801A0F8 - movs r0, #0xc0 - b _0801A0FA - .align 2, 0 -_0801A0F0: .4byte 0x0000404B -_0801A0F4: .4byte gPlayerState -_0801A0F8: - movs r0, #0xa0 -_0801A0FA: - strb r0, [r7, #6] - movs r2, #0 - movs r0, #5 - strb r0, [r7, #0xc] - ldr r0, [r7, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r7, #0x30] - ldr r1, _0801A11C @ =gPlayerEntity - strh r2, [r1, #0x2c] - strh r2, [r1, #0x30] - ldrb r0, [r1, #0x14] - lsls r0, r0, #2 - strb r0, [r1, #0x15] - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_0801A11C: .4byte gPlayerEntity -_0801A120: - ldr r0, _0801A134 @ =gPlayerState - adds r0, #0x35 - ldrb r0, [r0] - cmp r0, #0 - beq _0801A12C - b _0801A2A4 -_0801A12C: - ldr r0, _0801A138 @ =0x00004054 - adds r1, r5, #0 - b _0801A28C - .align 2, 0 -_0801A134: .4byte gPlayerState -_0801A138: .4byte 0x00004054 -_0801A13C: - ldr r0, _0801A150 @ =gPlayerState - adds r0, #0x35 - ldrb r0, [r0] - cmp r0, #6 - beq _0801A148 - b _0801A2A4 -_0801A148: - ldr r0, _0801A154 @ =0x00004054 - adds r1, r5, #0 - b _0801A28C - .align 2, 0 -_0801A150: .4byte gPlayerState -_0801A154: .4byte 0x00004054 -_0801A158: - subs r7, #1 -_0801A15A: - ldr r0, _0801A190 @ =gPlayerState - adds r0, #0x35 - ldrb r0, [r0] - cmp r0, #0 - beq _0801A166 - b _0801A2A4 -_0801A166: - mov r0, sb - ldrh r1, [r0, #0x32] - movs r0, #0xf - ands r0, r1 - cmp r0, #9 - bgt _0801A174 - b _0801A2A4 -_0801A174: - movs r4, #0 - ldr r5, _0801A194 @ =gPlayerClones -_0801A178: - ldr r0, [r5] - movs r1, #0 - bl sub_0801A8D0 - cmp r0, r7 - bne _0801A186 - b _0801A288 -_0801A186: - adds r5, #4 - adds r4, #1 - cmp r4, #2 - bls _0801A178 - b _0801A2A4 - .align 2, 0 -_0801A190: .4byte gPlayerState -_0801A194: .4byte gPlayerClones -_0801A198: - subs r7, #0x40 -_0801A19A: - ldr r0, _0801A1CC @ =gPlayerState - adds r0, #0x35 - ldrb r0, [r0] - cmp r0, #6 - beq _0801A1A6 - b _0801A2A4 -_0801A1A6: - mov r2, sb - ldrh r1, [r2, #0x2e] - movs r0, #0xf - ands r0, r1 - cmp r0, #9 - ble _0801A2A4 - movs r4, #0 - ldr r5, _0801A1D0 @ =gPlayerClones -_0801A1B6: - ldr r0, [r5] - movs r1, #6 - bl sub_0801A8D0 - cmp r0, r7 - beq _0801A288 - adds r5, #4 - adds r4, #1 - cmp r4, #2 - bls _0801A1B6 - b _0801A2A4 - .align 2, 0 -_0801A1CC: .4byte gPlayerState -_0801A1D0: .4byte gPlayerClones -_0801A1D4: - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0801A2A4 - ldr r6, _0801A234 @ =gPlayerState - adds r0, r6, #0 - adds r0, #0x35 - ldrb r0, [r0] - ldrb r1, [r6, #0xd] - orrs r0, r1 - movs r1, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - bne _0801A2A4 - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r3, #1 - mov r8, r3 - mov r0, r8 - ands r0, r1 - cmp r0, #0 - beq _0801A2A4 - ldr r0, _0801A238 @ =0x00004074 - adds r1, r5, #0 - adds r1, #0x38 - ldrb r2, [r1] - adds r1, r7, #0 - bl SetTile - movs r0, #0xa0 - strb r0, [r6, #6] - movs r0, #5 - strb r0, [r6, #0xc] - ldr r0, [r6, #0x30] - mov r1, r8 - orrs r0, r1 - str r0, [r6, #0x30] - strh r4, [r5, #0x2c] - strh r4, [r5, #0x30] -_0801A228: - ldrb r0, [r5, #0x14] - lsls r0, r0, #2 - strb r0, [r5, #0x15] - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_0801A234: .4byte gPlayerState -_0801A238: .4byte 0x00004074 -_0801A23C: - cmp r3, #4 - bne _0801A2A4 - ldr r1, _0801A280 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x35 - ldrb r0, [r0] - ldrb r1, [r1, #0xd] - orrs r0, r1 - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0801A2A4 - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0801A2A4 - ldr r0, _0801A284 @ =0x00004074 - adds r4, r5, #0 - adds r4, #0x38 - ldrb r2, [r4] - adds r1, r7, #0 - bl SetTile - ldrb r2, [r4] - movs r0, #0xd - adds r1, r7, #0 - bl sub_080001D0 - movs r0, #1 - b _0801A2A6 - .align 2, 0 -_0801A280: .4byte gPlayerState -_0801A284: .4byte 0x00004074 -_0801A288: - ldr r0, _0801A29C @ =0x00004059 - ldr r1, _0801A2A0 @ =gPlayerEntity -_0801A28C: - adds r1, #0x38 - ldrb r2, [r1] - adds r1, r7, #0 - bl SetTile - movs r0, #4 - b _0801A2A6 - .align 2, 0 -_0801A29C: .4byte 0x00004059 -_0801A2A0: .4byte gPlayerEntity -_0801A2A4: - movs r0, #0 -_0801A2A6: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/src/beanstalkSubtask.c b/src/beanstalkSubtask.c index ceb5a7c3..d09ea3cd 100644 --- a/src/beanstalkSubtask.c +++ b/src/beanstalkSubtask.c @@ -57,6 +57,25 @@ void sub_0801AB08(u16*, LayerStruct*); u32 sub_0801AC68(u32 position, u32 data); +extern u32 sub_0807BDB8(Entity* this, u32 param_2); +extern void sub_0804B388(u32 a1, u32 a2); +extern u32 sub_080A7CFC(u32 a1, u32 tmp); // TODO does this really have a second param? +extern void OpenSmallChest(u32 pos, u32 layer); +extern bool32 sub_08079778(); +extern Transition* sub_08080734(u32, u32); + +extern const s16 gUnk_080B4490[]; +extern const s16 gUnk_080B4468[]; +extern const s16 gUnk_080B4478[]; + +bool32 sub_0801A2B0(LayerStruct* layer, u32 position, u32 collisionType); +bool32 sub_0801A9F0(u32 param_1, u32 param_2, u32 param_3); +u32 sub_0801A570(Entity*, u32); +bool32 sub_0801A458(LayerStruct* layer, u32 position, u32 collisionType); +bool32 sub_0801A370(LayerStruct* layer, u32 position); +u32 sub_0801A8D0(Entity* this, u32 param_2); +extern void sub_080001D0(u32, u32, u32); + void sub_0801967C(void) { gUnk_080B4458[gMenu.overlayType](); } @@ -140,7 +159,433 @@ void sub_080197D4(struct_08109194* param_1) { } // Has ifdefs for other variants -ASM_FUNC("asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc", void UpdatePlayerCollision()) +u32 UpdatePlayerCollision(void) { + u32 direction; + u32 tileType; + LayerStruct* layer; + Transition* transition; + Entity* pushedBlock; + Entity* player; + u32 position; + u32 index; + const s16* ptr1; + const s16* ptr2; + s32 tmp1; + u32 tmp2; + u32 tmp3; + // There are some weird assignment necessary to access gPlayerEntity.animationState correctly. + u32 animationState1; + u32 animationState2; + u32 animationState3; + + if (gPlayerState.framestate == 0) { + tmp1 = gPlayerState.framestate_last; + } else { + tmp1 = gPlayerState.framestate; + } + + switch (tmp1) { + case 3: + return 0; + case 0x12: + return 0; + case 0x16: + return 0; + } + + if (gPlayerState.dash_state != 0 || gPlayerEntity.action == PLAYER_CLIMB) { + direction = gPlayerEntity.direction; + } else { + direction = gPlayerState.direction; + } + if (((direction & 0x83) == 0) && (gPlayerState.field_0xa == 0)) { + index = sub_0807BDB8(&gPlayerEntity, direction >> 2); + if (index != 0xff && (gRoomControls.scroll_flags & 4) == 0) { + ptr1 = &gUnk_080B4490[index * 2]; + if (sub_080B1B44(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr1[0], -ptr1[1]), gPlayerEntity.collisionLayer) == + 0xff) { + if ((((gPlayerState.flags & 0x10002) != 0) || ((gPlayerState.sword_state & 0x10) != 0)) || + ((sub_080806BC(gPlayerEntity.x.HALF.HI - gRoomControls.origin_x, + gPlayerEntity.y.HALF.HI - gRoomControls.origin_y, index, 5) == 0 && + (((gPlayerState.heldObject != 0 || ((gPlayerState.field_0x1c & 0xf) != 0)) || + (sub_0807BD14(&gPlayerEntity, index) == 0)))))) { + return 3; + } + gPlayerEntity.direction = (index << 3); + return 0xf; + } + } + } + layer = GetLayerByIndex(gPlayerEntity.collisionLayer); + ptr1 = &gUnk_080B4468[gPlayerEntity.animationState & 6]; + position = COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr1[0], -ptr1[1]); + tileType = GetTileType(position, gPlayerEntity.collisionLayer); + if (tileType < 0x4000) { + direction = sub_080B1B54(tileType); + } else { + direction = tileType; + } + animationState1 = gPlayerEntity.animationState; + animationState2 = animationState1 & 0xff; + + switch (direction) { + case 0x4000: + if (sub_0801A458(layer, position, 2) == 0) { + return 0; + } + layer->mapData[position] = 0x4001 + (gPlayerEntity.animationState >> 1); + if ((gPlayerState.flags & 0x80) != 0) { + gPlayerState.pushedObject = 0xc0; + } else { + gPlayerState.pushedObject = 0xa0; + } + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + case 0x28: + if ((gPlayerState.flags & 0x80) != 0) { + return 0; + } + gPlayerEntity.action = gPlayerEntity.action; + if (gPlayerState.field_0xa != 0) { + return 0; + } + if ((Direction8FromAnimationState(gPlayerEntity.animationState)) - gPlayerState.direction != 0) { + return 0; + } + if ((gPlayerEntity.direction & 0x80) != 0) { + return 0; + } + if (sub_080B1B44(position, gPlayerEntity.collisionLayer) != 0xf) { + return 0; + } + if (sub_08079778() == 0) { + return 0; + } + + ptr1 = &gUnk_080B4478[gPlayerEntity.animationState & 6]; + transition = sub_08080734((gPlayerEntity.x.HALF.HI - gRoomControls.origin_x) + ptr1[0], + (gPlayerEntity.y.HALF.HI - gRoomControls.origin_y) + ptr1[1]); + if (transition == NULL) { + return 0; + } + if ((gPlayerEntity.animationState & 2) != 0) { + gPlayerEntity.y.HALF.HI = gRoomControls.origin_y + transition->startY + 6; + } else { + gPlayerEntity.x.HALF.HI = gRoomControls.origin_x + transition->startX; + } + sub_08078AC0(4, 0, 1); + return 0; + case 0x401b: + if (sub_0801A2B0(layer, position, 0xb) == 0) { + return 0; + } + layer->mapData[position] = 0x401c + (gPlayerEntity.animationState >> 1); + gPlayerState.pushedObject = 0xa0; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + gPlayerEntity.type = 1; + return 1; + case 0x70: + if ((gPlayerState.field_0x35 & 0x80) == 0) { + if ((gPlayerEntity.frame & 1) != 0) { + if (sub_0801A9F0(gPlayerState.field_0x35 << 2, tileType, position) != 0) { + return 1; + } + } + } + return 0; + case 0x3a: + case 0x5b: + case 0x4051: + if ((gPlayerState.flags & 0x80) != 0) { + return 0; + } + if (gPlayerEntity.animationState != 0) { + return 0; + } + gUnk_0200AF00.unk_2d = 4; + if ((gPlayerState.playerInput.newInput & (PLAYER_INPUT_80 | PLAYER_INPUT_40)) == 0) { + return 0; + } + gPlayerState.mobility = 1; + sub_080A7CFC(position, gPlayerEntity.collisionLayer); + return 1; + case 0x1a: + if ((animationState1 & 0xff) != 0) { + return 0; + } + if ((gPlayerState.flags & 0x4080) != 0) { + return 0; + } + gUnk_0200AF00.unk_2d = 6; + if ((gPlayerState.playerInput.newInput & (PLAYER_INPUT_80 | PLAYER_INPUT_8)) == 0) { + return 0; + } + gPlayerState.mobility = 1; + OpenSmallChest(position, gPlayerEntity.collisionLayer); + return 2; + case 0x71: + if (HasDungeonMap() == 0) { + return 0; + } + gUnk_0200AF00.unk_2d = 6; + if ((gPlayerState.playerInput.newInput & (PLAYER_INPUT_80 | PLAYER_INPUT_8)) == 0) { + return 0; + } + gPlayerState.mobility = 1; + sub_0804B388(position, gPlayerEntity.collisionLayer); + return 2; + case 0x3d: + case 0x4040 ... 0x4048: + if ((gPlayerState.flags & 0x4000) != 0) { + return 0; + } + if (sub_08079778() == 0) { + return 0; + } +#if !(defined(EU) || defined(JP)) + if (gPlayerState.field_0xa != 0) { + return 0; + } +#endif + if ((Direction8FromAnimationState(gPlayerEntity.animationState)) - gPlayerState.direction != 0) { + return 0; + } + if ((gPlayerEntity.direction & 0x80) != 0) { + return 0; + } + if (gPlayerEntity.subtimer < 6) { + return 0; + } + gPlayerState.jump_status = 0x81; + gPlayerState.flags |= 0x20; + gPlayerState.queued_action = PLAYER_USEPORTAL; + gPlayerEntity.zVelocity = 0x20000; + COLLISION_OFF(&gPlayerEntity); + return 1; + case 0x400b: + if (sub_0801A2B0(layer, position, 8) == 0) { + return 0; + } + if ((gPlayerEntity.collisionLayer == 3) && (gMapTop.mapData[position] == 0x400b)) { + gMapTop.mapData[position] = 0x400c + (gPlayerEntity.animationState >> 1); + } else { + layer->mapData[position] = 0x400c + (gPlayerEntity.animationState >> 1); + } + gPlayerState.pushedObject = 0xa0; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + case 0x405a: + if (sub_0801A2B0(layer, position, 2) == 0) { + return 0; + } + layer->mapData[position] = 0x405b + (gPlayerEntity.animationState >> 1); + gPlayerState.pushedObject = 0x98; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + case 0x4036: + if (sub_0801A2B0(layer, position, 0xb) == 0) { + return 0; + } + layer->mapData[position] = 0x4037 + (gPlayerEntity.animationState >> 1); + gPlayerState.pushedObject = 0xa0; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + case 0x403e: + if ((animationState1 & 0xff) != 0) { + return 0; + } + if (((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) != 0) { + return 0; + } + if ((gPlayerEntity.frame & 2) == 0) { + return 0; + } + layer->mapData[position] = 0x403f; + gPlayerState.pushedObject = 0x82; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + case 0x72: + if ((gPlayerState.field_0x35 & 0x80) != 0) { + return 0; + } + if ((gPlayerEntity.frame & 1) == 0) { + return 0; + } + position = sub_0801A570(&gPlayerEntity, 1); + if (position == 0xffff) { + return 0; + } + tmp2 = (position >> 0xc) - 1; + position &= 0xfff; + // TODO convert to for loop? + index = 0; + tmp3 = 0; + while (index < 3) { + if ((((*(u32*)(&(gPlayerClones[0])->field_0x6c)) & (1 << index)) != 0) && + (sub_0801A570(gPlayerClones[index], 0) == position)) { + tmp3++; + } + index++; + } + if (tmp3 < tmp2) { + return 0; + } + pushedBlock = CreateObject(PUSHED_BLOCK, tmp2, 0); + if (pushedBlock == NULL) { + return 0; + } + pushedBlock->direction = Direction8FromAnimationState(gPlayerEntity.animationState); + pushedBlock->x.HALF.HI = ((position & 0xfff & 0x3f) << 4) + 8 + gRoomControls.origin_x; + pushedBlock->y.HALF.HI = ((position & 0xfc0) >> 2) + 8 + gRoomControls.origin_y; + pushedBlock->collisionLayer = gPlayerEntity.collisionLayer; + gPlayerState.pushedObject = 0xa0; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = pushedBlock->direction; + return 1; + case 0x402b ... 0x402d: + if (sub_0801A370(layer, position) != 0) { + layer->mapData[position] = 0x4030 + ((gPlayerEntity.animationState & 4) >> 2); + if ((gPlayerState.flags & 0x80) != 0) { + gPlayerState.pushedObject = 0xa0; + } else { + gPlayerState.pushedObject = 0x90; + } + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + } else { + return 0; + } + case 0x404a: + if (sub_0801A458(layer, position, 8) == 0) { + return 0; + } + layer->mapData[position] = 0x404b + (gPlayerEntity.animationState >> 1); + if ((gPlayerState.flags & 0x80) != 0) { + gPlayerState.pushedObject = 0xc0; + } else { + gPlayerState.pushedObject = 0xa0; + } + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + case 0x4052: + if (gPlayerState.field_0x35 != 0) { + return 0; + } + SetTile(0x4054, position, gPlayerEntity.collisionLayer); + return 4; + case 0x4053: + if (gPlayerState.field_0x35 != 6) { + return 0; + } + SetTile(0x4054, position, gPlayerEntity.collisionLayer); + return 4; + case 0x4055: + position--; + // fallthrough + case 0x4056: + if (gPlayerState.field_0x35 != 0) { + return 0; + } + if ((gPlayerEntity.y.HALF.HI & 0xf) < 10) { + return 0; + } + for (index = 0; index < 3; index++) { + if (sub_0801A8D0(gPlayerClones[index], 0) == position) { + SetTile(0x4059, position, gPlayerEntity.collisionLayer); + return 4; + } + } + return 0; + case 0x4057: + position -= 0x40; + // fallthrough + case 0x4058: + if (gPlayerState.field_0x35 != 6) { + return 0; + } + if ((gPlayerEntity.x.HALF.HI & 0xf) < 10) { + return 0; + } + for (index = 0; index < 3; index++) { + if (sub_0801A8D0(gPlayerClones[index], 6) == position) { + SetTile(0x4059, position, gPlayerEntity.collisionLayer); + return 4; + } + } + return 0; + case 0x405f: + animationState3 = 2; + animationState3 &= animationState1; + if (animationState3 == 0) { + return 0; + } + if (((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) != 0) { + return 0; + } + if ((gPlayerEntity.frame & 1) == 0) { + return 0; + } + SetTile(0x4074, position, gPlayerEntity.collisionLayer); + gPlayerState.pushedObject = 0xa0; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState); + return 1; + case 0x407d: + animationState3 = gPlayerEntity.animationState; + if ((animationState2) != 4) { + return 0; + } + if (((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) != 0) { + return 0; + } + if ((gPlayerEntity.frame & 1) == 0) { + return 0; + } + SetTile(0x4074, position, gPlayerEntity.collisionLayer); + sub_080001D0(0xd, position, gPlayerEntity.collisionLayer); + return 1; + default: + return 0; + } +} bool32 sub_0801A2B0(LayerStruct* layer, u32 position, u32 collisionType) { u16 uVar1; @@ -287,7 +732,7 @@ bool32 sub_0801A4F8(void) { return TRUE; } -ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570()) +ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", u32 sub_0801A570(Entity* a, u32 b)) u32 sub_0801A8D0(Entity* this, u32 param_2) { u16* mapData; diff --git a/src/common.c b/src/common.c index e343aa98..0ad58ee5 100644 --- a/src/common.c +++ b/src/common.c @@ -887,9 +887,15 @@ code0_2: goto code0_2; #endif } -return i; -} -return -1; + +s32 sub_0801E8B0(u32 idx) { + u32 i; + + for (i = 0; i < 18; ++i) { + if (idx == gSave.unk118[i]) + return i; + } + return -1; } // Check conditions, something with kinstones diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c index f5afc6c3..3921b18f 100644 --- a/src/enemy/gleerok.c +++ b/src/enemy/gleerok.c @@ -78,7 +78,7 @@ extern void sub_0802EA48(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, extern void sub_0802EA68(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4); extern bool32 sub_0802E7CC(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4); extern bool32 sub_0802EA88(Gleerok_HeapStruct* param_1); -extern bool32 sub_0802E768(Gleerok_HeapStruct* param_1); +extern void sub_0802E768(Gleerok_HeapStruct* param_1); void Gleerok_OnTick(GleerokEntity* this); void Gleerok_OnDeath(GleerokEntity* this); @@ -638,7 +638,7 @@ void sub_0802D86C(GleerokEntity* this) { super->child = enemy; if (enemy) { enemy->parent = super->parent; - super->timer = this->unk_84->filler[0].unk1; + super->timer = this->unk_84->filler[0].unk0.HALF.HI; this->unk_84->ent = super->child; ((GleerokEntity*)super->child)->unk_84 = this->unk_84; } @@ -669,8 +669,8 @@ void sub_0802D86C(GleerokEntity* this) { SoundReq(SFX_BUTTON_PRESS); } } else { - if (super->timer != this->unk_84->filler[0].unk1) { - if (((super->timer - this->unk_84->filler[0].unk1) & 0x1f) > 0x10) { + if (super->timer != this->unk_84->filler[0].unk0.HALF.HI) { + if (((super->timer - this->unk_84->filler[0].unk0.HALF.HI) & 0x1f) > 0x10) { if (++super->frameIndex >= 0x31) { super->frameIndex = 0x28; } @@ -680,7 +680,7 @@ void sub_0802D86C(GleerokEntity* this) { } } - super->timer = this->unk_84->filler[0].unk1; + super->timer = this->unk_84->filler[0].unk0.HALF.HI; } } @@ -1326,8 +1326,8 @@ void sub_0802E768(Gleerok_HeapStruct* param_1) { s32 iVar5; for (uVar4 = 0; uVar4 <= 4; uVar4++) { - bVar3 = param_1->filler[uVar4].unk1; - bVar2 = (bVar3 - param_1->filler[uVar4 + 1].unk1) & 0x1f; + bVar3 = param_1->filler[uVar4].unk0.HALF.HI; + bVar2 = (bVar3 - param_1->filler[uVar4 + 1].unk0.HALF.HI) & 0x1f; if (bVar2 > 0x10) { if (bVar2 <= 0x1e) { @@ -1337,9 +1337,9 @@ void sub_0802E768(Gleerok_HeapStruct* param_1) { bVar3 = (bVar3 - 1) & 0x1f; } - param_1->filler[uVar4].unk1 = bVar3; - bVar3 = param_1->filler2[(uVar4)].unk1; - bVar2 = (bVar3 - param_1->filler2[(uVar4 + 1)].unk1) & 0x1f; + param_1->filler[uVar4].unk0.HALF.HI = bVar3; + bVar3 = param_1->filler2[(uVar4)].unk0.HALF.HI; + bVar2 = (bVar3 - param_1->filler2[(uVar4 + 1)].unk0.HALF.HI) & 0x1f; if (bVar2 > 0x10) { if (bVar2 <= 0x1d) { @@ -1349,7 +1349,7 @@ void sub_0802E768(Gleerok_HeapStruct* param_1) { bVar3 = (bVar3 - 1) & 0x1f; } - param_1->filler2[(uVar4)].unk1 = bVar3; + param_1->filler2[(uVar4)].unk0.HALF.HI = bVar3; } }