From 45298f8a96317df8563d4a2b3a7fd6d7a8d421f4 Mon Sep 17 00:00:00 2001 From: theo3 Date: Thu, 23 Jul 2020 23:50:37 -0700 Subject: [PATCH 1/3] librari.c OK --- asm/librari.s | 246 ---------------------------------------------- linker.ld | 2 +- src/npc/librari.c | 107 ++++++++++++++++++++ 3 files changed, 108 insertions(+), 247 deletions(-) delete mode 100644 asm/librari.s create mode 100644 src/npc/librari.c diff --git a/asm/librari.s b/asm/librari.s deleted file mode 100644 index ae1576bd..00000000 --- a/asm/librari.s +++ /dev/null @@ -1,246 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Librari -Librari: @ 0x0806B1CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0806B21E - cmp r0, #1 - bgt _0806B1E0 - cmp r0, #0 - beq _0806B1E6 - b _0806B25C -_0806B1E0: - cmp r0, #2 - beq _0806B24E - b _0806B25C -_0806B1E6: - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0xe] - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD50 - b _0806B25C -_0806B21E: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806B238 - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - adds r0, r4, #0 - bl sub_0806F118 - b _0806B25C -_0806B238: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _0806B25C -_0806B24E: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806B25C - movs r0, #1 - strb r0, [r4, #0xc] -_0806B25C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0806B260 -sub_0806B260: @ 0x0806B260 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - movs r0, #0 - str r0, [r5, #0x14] - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _0806B29E - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - beq _0806B286 - movs r4, #2 - movs r0, #1 - str r0, [r5, #0x14] - b _0806B2A0 -_0806B286: - movs r0, #0x7a - bl CheckLocalFlag - cmp r0, #0 - bne _0806B29A - movs r4, #0 - movs r0, #0x7a - bl SetLocalFlag - b _0806B2A0 -_0806B29A: - movs r4, #1 - b _0806B2A0 -_0806B29E: - movs r4, #3 -_0806B2A0: - ldr r0, _0806B2B0 @ =gUnk_08112D48 - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r6, #0 - bl TextboxNoOverlap - pop {r4, r5, r6, pc} - .align 2, 0 -_0806B2B0: .4byte gUnk_08112D48 - - thumb_func_start sub_0806B2B4 -sub_0806B2B4: @ 0x0806B2B4 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0xb3 - bl CheckLocalFlag - cmp r0, #0 - beq _0806B314 - movs r0, #0 - bl CheckRoomFlag - cmp r0, #0 - bne _0806B2D6 - movs r4, #1 - movs r0, #0 - bl SetRoomFlag - b _0806B316 -_0806B2D6: - movs r0, #1 - bl CheckRoomFlag - cmp r0, #0 - bne _0806B2EA - movs r4, #2 - movs r0, #1 - bl SetRoomFlag - b _0806B316 -_0806B2EA: - movs r0, #2 - bl CheckRoomFlag - cmp r0, #0 - bne _0806B2FE - movs r4, #3 - movs r0, #2 - bl SetRoomFlag - b _0806B316 -_0806B2FE: - movs r4, #4 - movs r0, #0 - bl ClearRoomFlag - movs r0, #1 - bl ClearRoomFlag - movs r0, #2 - bl ClearRoomFlag - b _0806B316 -_0806B314: - movs r4, #0 -_0806B316: - ldr r0, _0806B328 @ =gUnk_08112D50 - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_0806B328: .4byte gUnk_08112D50 - - thumb_func_start Librari_Fusion -Librari_Fusion: @ 0x0806B32C - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _0806B352 - adds r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - movs r1, #9 - bl InitAnimationForceUpdate - b _0806B358 -_0806B352: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_0806B358: - pop {pc} - .align 2, 0 - - thumb_func_start Percy_Head -Percy_Head: @ 0x0806B35C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5b - ldrb r0, [r0] - movs r2, #0x3f - ands r2, r0 - adds r2, #0x13 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #0x7f - ands r2, r0 - adds r2, #0xb - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #2 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #2 - movs r2, #1 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl SetSpriteSubEntryOffsetData2 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, pc} diff --git a/linker.ld b/linker.ld index 7714d9f2..02534b85 100644 --- a/linker.ld +++ b/linker.ld @@ -595,7 +595,7 @@ SECTIONS { asm/rem.o(.text); src/npc/townMinish.o(.text); asm/townMinish.o(.text); - asm/librari.o(.text); + src/npc/librari.o(.text); asm/percy.o(.text); asm/vaatiReborn.o(.text); src/npc/moblinLady.o(.text); diff --git a/src/npc/librari.c b/src/npc/librari.c new file mode 100644 index 00000000..77b48bb6 --- /dev/null +++ b/src/npc/librari.c @@ -0,0 +1,107 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "flags.h" +#include "textbox.h" +#include "functions.h" + +extern u16 gUnk_08112D48[]; + +void Librari(Entity* this) { + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->animationState = this->actionDelay; + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); + sub_0805E3A0(this, 2); + sub_0807DD50(this); + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + sub_0806F118(this); + } else { + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + UpdateAnimationSingleFrame(this); + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + } +} + +void sub_0806B260(Entity* this, u32 arg1) { + u32 index; + + *(u32*)(arg1 + 0x14) = 0; + // flippers + if (!GetInventoryValue(0x46)) { + if (CheckGlobalFlag(0x29)) { + index = 2; + *(u32*)(arg1 + 0x14) = 1; + } else if (!CheckLocalFlag(0x7a)) { + index = 0; + SetLocalFlag(0x7a); + } else { + index = 1; + } + } else { + index = 3; + } + TextboxNoOverlap(gUnk_08112D48[index], this); +} + +extern u16 gUnk_08112D50[]; + +void sub_0806b2b4(Entity* this) { + u32 index; + + if (CheckLocalFlag(0xb3)) { + if (!CheckRoomFlag(0)) { + index = 1; + SetRoomFlag(0); + } else if (!CheckRoomFlag(1)) { + index = 2; + SetRoomFlag(1); + } else if (!CheckRoomFlag(2)) { + index = 3; + SetRoomFlag(2); + } else { + index = 4; + ClearRoomFlag(0); + ClearRoomFlag(1); + ClearRoomFlag(2); + } + } else { + index = 0; + } + TextboxNoOverlap(gUnk_08112D50[index], this); +} + +void Librari_Fusion(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->spriteSettings.b.draw = TRUE; + InitAnimationForceUpdate(this, 9); + } + else { + UpdateAnimationSingleFrame(this); + } +} + +void Percy_Head(Entity *this) // ??? +{ + SetExtraSpriteFrame(this, 0, (this->frameSpriteSettings & 0x3f) + 0x13); + SetExtraSpriteFrame(this, 1, (this->frames.all & 0x7f) + 0xb); + SetExtraSpriteFrame(this, 2, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 2, 1); + SetSpriteSubEntryOffsetData2(this, 2, 0); + sub_0807000C(this); +} \ No newline at end of file From 0d39bb7f11112a13b2e2df975570672a304ea819 Mon Sep 17 00:00:00 2001 From: theo3 Date: Fri, 24 Jul 2020 14:18:58 -0700 Subject: [PATCH 2/3] goronMerchant.c --- asm/goronMerchant.s | 256 ---------------------------------------- asm/percy.s | 59 --------- include/functions.h | 2 + include/room.h | 4 +- include/textbox.h | 3 + linker.ld | 2 + src/npc/goronMerchant.c | 143 ++++++++++++++++++++++ src/npc/percy.c | 36 ++++++ 8 files changed, 189 insertions(+), 316 deletions(-) create mode 100644 src/npc/goronMerchant.c create mode 100644 src/npc/percy.c diff --git a/asm/goronMerchant.s b/asm/goronMerchant.s index ed3220cd..dcde5693 100644 --- a/asm/goronMerchant.s +++ b/asm/goronMerchant.s @@ -6,262 +6,6 @@ .text - - thumb_func_start GoronMerchant -GoronMerchant: @ 0x08069544 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08069568 - ldr r0, _08069564 @ =gUnk_08111B98 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0806957E - .align 2, 0 -_08069564: .4byte gUnk_08111B98 -_08069568: - ldr r0, _08069580 @ =gUnk_08111B88 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0806ED78 -_0806957E: - pop {r4, pc} - .align 2, 0 -_08069580: .4byte gUnk_08111B88 - - thumb_func_start sub_08069584 -sub_08069584: @ 0x08069584 - push {lr} - adds r1, r0, #0 - ldr r0, _08069598 @ =gUnk_030010A0 - adds r0, #0x2c - ldrb r0, [r0] - cmp r0, #0 - beq _0806959C - movs r0, #3 - b _0806959E - .align 2, 0 -_08069598: .4byte gUnk_030010A0 -_0806959C: - movs r0, #1 -_0806959E: - strb r0, [r1, #0xc] - adds r0, r1, #0 - movs r1, #2 - bl InitAnimationForceUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_080695AC -sub_080695AC: @ 0x080695AC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x10 - bls _080695D2 - movs r0, #0 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x28 - movs r2, #0x28 - bl sub_0806ED9C - cmp r0, #0 - blt _080695D2 - strb r0, [r4, #0x14] -_080695D2: - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - ldrb r1, [r4, #0x14] - cmp r0, r1 - beq _080695E6 - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_080695E6: - pop {r4, pc} - - thumb_func_start sub_080695E8 -sub_080695E8: @ 0x080695E8 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldr r0, _08069618 @ =gTextBox - ldrb r0, [r0] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0 - bne _08069614 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x39 - strb r1, [r0] - adds r0, r4, #0 - bl sub_0805E584 - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_08069614: - pop {r4, pc} - .align 2, 0 -_08069618: .4byte gTextBox - - thumb_func_start sub_0806961C -sub_0806961C: @ 0x0806961C - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08069638 @ =gUnk_030010A0 - adds r0, #0x2c - ldrb r0, [r0] - cmp r0, #2 - bne _08069630 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08069630: - adds r0, r4, #0 - bl sub_0806FD3C - pop {r4, pc} - .align 2, 0 -_08069638: .4byte gUnk_030010A0 - - thumb_func_start sub_0806963C -sub_0806963C: @ 0x0806963C - push {lr} - movs r3, #1 - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x18] - subs r1, #5 - ands r1, r2 - orrs r1, r3 - strb r1, [r0, #0x18] - bl sub_0807DD50 - pop {pc} - - thumb_func_start sub_08069654 -sub_08069654: @ 0x08069654 - push {lr} - movs r1, #0 - bl sub_0807DD94 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08069660 -sub_08069660: @ 0x08069660 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0806967C @ =0x00002C1C - adds r1, r4, #0 - bl TextboxNoOverlap - adds r0, r4, #0 - bl sub_080696BC - ldr r1, _08069680 @ =gTextBox - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [r1, #0x10] - pop {r4, pc} - .align 2, 0 -_0806967C: .4byte 0x00002C1C -_08069680: .4byte gTextBox - - thumb_func_start sub_08069684 -sub_08069684: @ 0x08069684 - push {lr} - movs r0, #9 - movs r1, #0x31 - movs r2, #8 - bl sub_0805EB00 - cmp r0, #0 - bne _080696AE - bl sub_0805E8D4 - adds r1, r0, #0 - cmp r1, #0 - beq _080696AE - movs r0, #9 - strb r0, [r1, #8] - movs r0, #0x31 - strb r0, [r1, #9] - adds r0, r1, #0 - movs r1, #8 - bl sub_0805EA2C -_080696AE: - pop {pc} - - thumb_func_start sub_080696B0 -sub_080696B0: @ 0x080696B0 - ldr r1, _080696B8 @ =gRoomVars - movs r0, #0 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_080696B8: .4byte gRoomVars - - thumb_func_start sub_080696BC -sub_080696BC: @ 0x080696BC - push {r4, r5, lr} - ldr r0, _08069710 @ =gRoomVars - ldrb r0, [r0, #7] - movs r5, #0 - cmp r0, #0x70 - ble _080696CA - movs r5, #1 -_080696CA: - cmp r0, #0x72 - ble _080696D0 - movs r5, #2 -_080696D0: - movs r0, #0x3e - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f - movs r0, #0x3f - bl CheckGlobalFlag - cmp r0, #0 - beq _080696E8 - movs r4, #2 -_080696E8: - movs r0, #0x40 - bl CheckGlobalFlag - cmp r0, #0 - beq _080696F4 - movs r4, #3 -_080696F4: - movs r0, #0x41 - bl CheckGlobalFlag - cmp r0, #0 - beq _08069700 - movs r4, #4 -_08069700: - ldr r0, _08069714 @ =gUnk_08111BA0 - lsls r1, r4, #1 - adds r1, r1, r4 - adds r1, r1, r5 - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - pop {r4, r5, pc} - .align 2, 0 -_08069710: .4byte gRoomVars -_08069714: .4byte gUnk_08111BA0 - thumb_func_start sub_08069718 sub_08069718: @ 0x08069718 push {r4, r5, r6, r7, lr} diff --git a/asm/percy.s b/asm/percy.s index a48c9a2c..7cd6c8a0 100644 --- a/asm/percy.s +++ b/asm/percy.s @@ -6,65 +6,6 @@ .text - - thumb_func_start Percy -Percy: @ 0x0806B3AC - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0806B3C2 - adds r0, r2, #0 - bl sub_0806B41C - b _0806B3C8 -_0806B3C2: - adds r0, r2, #0 - bl sub_0806B3CC -_0806B3C8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0806B3CC -sub_0806B3CC: @ 0x0806B3CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806B3F4 - ldr r1, _0806B418 @ =gUnk_08112E1C - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806B414 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08078778 -_0806B3F4: - adds r0, r4, #0 - bl GetNextFrame - adds r1, r4, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _0806B40E - movs r0, #0 - strb r0, [r1] - bl TextboxNoOverlapFollow -_0806B40E: - adds r0, r4, #0 - bl sub_0806ED78 -_0806B414: - pop {r4, pc} - .align 2, 0 -_0806B418: .4byte gUnk_08112E1C - thumb_func_start sub_0806B41C sub_0806B41C: @ 0x0806B41C push {r4, lr} diff --git a/include/functions.h b/include/functions.h index 352cc973..00a7e4a6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -198,4 +198,6 @@ extern u32 sub_0807953C(void); extern void sub_08077B2C(void); extern void sub_080A29BC(Entity*); extern void sub_080AE068(Entity*); +extern Entity* sub_0805E8D4(void); +extern void sub_0805EA2C(Entity*, u32); #endif diff --git a/include/room.h b/include/room.h index d6bc4a80..8170da5f 100644 --- a/include/room.h +++ b/include/room.h @@ -36,7 +36,9 @@ typedef struct { typedef struct { u8 filler[6]; u8 itemForSaleIndex; - u16 unk; + u8 field_0x7; + u8 field_0x8; + u8 field_0x9; u8 unk2; u16 filler2[3]; u32 roomFlags; diff --git a/include/textbox.h b/include/textbox.h index 82d7e818..77c45f59 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -14,6 +14,9 @@ typedef struct { u8 textWindowPosY; u16 textIndex; u16 unk2; // HI? + u16 field_0xc; + u16 field_0xe; + u32 field_0x10; } TextBox; extern TextBox gTextBox; diff --git a/linker.ld b/linker.ld index 02534b85..c47ce28d 100644 --- a/linker.ld +++ b/linker.ld @@ -586,6 +586,7 @@ SECTIONS { src/npc/bladeBrothers.o(.text); src/npc/cow.o(.text); src/npc/goron.o(.text); + src/npc/goronMerchant.o(.text); asm/goronMerchant.o(.text); asm/gorman.o(.text); asm/dog.o(.text); @@ -596,6 +597,7 @@ SECTIONS { src/npc/townMinish.o(.text); asm/townMinish.o(.text); src/npc/librari.o(.text); + src/npc/percy.o(.text); asm/percy.o(.text); asm/vaatiReborn.o(.text); src/npc/moblinLady.o(.text); diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c new file mode 100644 index 00000000..8cda93ec --- /dev/null +++ b/src/npc/goronMerchant.c @@ -0,0 +1,143 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "structures.h" +#include "textbox.h" +#include "room.h" +#include "flags.h" + +extern u32 sub_080696BC(Entity*); + +extern void (*const gUnk_08111B88[])(Entity*); +extern void (*const gUnk_08111B98[])(Entity*); + +extern u16 gUnk_08111BA0[]; + + +void GoronMerchant(Entity *this) +{ + if ((this->flags & 2) != 0) { + gUnk_08111B98[this->action](this); + } + else { + gUnk_08111B88[this->action](this); + sub_0806ED78(this); + } +} + +void sub_08069584(Entity *this) +{ + if (gUnk_030010A0.field_0x24[8] != 0) { + this->action = 3; + } + else { + this->action = 1; + } + InitAnimationForceUpdate(this, 2); +} + +void sub_080695AC(Entity *this) +{ + s32 iVar2; + + if (++this->field_0xf > 0x10) { + this->field_0xf = 0; + iVar2 = sub_0806ED9C(this, 0x28, 0x28); + if (iVar2 > -1) { + this->animationState = iVar2; + } + } + if (this->animIndex != this->animationState) { + InitAnimationForceUpdate(this, this->animationState); + } +} + +void sub_080695E8(Entity *this) +{ + UpdateAnimationSingleFrame(this); + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->action = 1; + this->interactType = gTextBox.doTextBox & 0x7f; + sub_0805E584(this); + InitAnimationForceUpdate(this, this->animationState); + } +} + +void sub_0806961C(Entity *this) +{ + if (gUnk_030010A0.field_0x24[8] == 2) { + UpdateAnimationSingleFrame(this); + } + sub_0806FD3C(this); +} + +void sub_0806963C(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.draw = TRUE; + sub_0807DD50(this); +} + +void sub_08069654(Entity* this) { + sub_0807DD94(this, 0); +} + +void sub_08069660(Entity *this) +{ + u32 uVar1; + + TextboxNoOverlap(0x2c1c, this); + gTextBox.field_0x10 = (u16)sub_080696BC(this); +} + +void sub_08069684(void) +{ + Entity *mgr; + + if (sub_0805EB00(9, 0x31, 8) == NULL) { + mgr = sub_0805E8D4(); + if (mgr != NULL) { + mgr->entityType.type = 9; + mgr->entityType.subtype = 0x31; + sub_0805EA2C(mgr, 8); + } + } +} + +void sub_080696B0(void) +{ + gRoomVars.itemForSaleIndex = 0; +} + +u32 sub_080696BC(Entity* this) +{ + u32 uVar1; + u32 temp; + u32 iVar3; + s32 temp2; + + temp2 = gRoomVars.field_0x7; + if (temp2 > 0x70) { + iVar3 = 1; + } + else { + iVar3 = 0; + } + if (temp2 > 0x72) { + iVar3 = 2; + } + + temp = CheckGlobalFlag(0x3e); + uVar1 = (-temp | temp) >> 0x1f; + + if (CheckGlobalFlag(0x3f)) { + uVar1 = 2; + } + if (CheckGlobalFlag(0x40)) { + uVar1 = 3; + } + if (CheckGlobalFlag(0x41)) { + uVar1 = 4; + } + return gUnk_08111BA0[uVar1 * 3 + iVar3]; +} \ No newline at end of file diff --git a/src/npc/percy.c b/src/npc/percy.c new file mode 100644 index 00000000..759b94d3 --- /dev/null +++ b/src/npc/percy.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "textbox.h" +#include "functions.h" + +extern void sub_0806B41C(Entity*); +void sub_0806B3CC(Entity*); + +extern SpriteLoadData gUnk_08112E1C; + +void Percy(Entity* this) { + if ((this->flags & 2) != 0) { + sub_0806B41C(this); + } else { + sub_0806B3CC(this); + } +} + +void sub_0806B3CC(Entity *this) +{ + if (this->action == 0) { + if (!LoadExtraSpriteData(this, &gUnk_08112E1C)) { + return; + } + this->action = 1; + InitializeAnimation(this, 0); + sub_08078778(this); + } + GetNextFrame(this); + if (this->interactType != 0) { + this->interactType = 0; + TextboxNoOverlapFollow(0); + } + sub_0806ED78(this); +} From b4a34e01bfee05b081f35844b08c9abb2e5ef9a4 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 3 Aug 2020 12:15:05 -0700 Subject: [PATCH 3/3] object2A.c ok --- asm/code_08016DF8.s | 6 +- asm/code_08070698.s | 32 +- asm/code_080732D0.s | 16 +- asm/code_08076C80.s | 2 +- asm/code_08078778.s | 2 +- asm/code_0807CC3C.s | 2 +- asm/code_080A5574.s | 4 +- asm/ghini.s | 2 +- asm/gibdo.s | 2 +- asm/itemForSale.s | 2 +- asm/likeLike.s | 2 +- asm/lilypadLarge.s | 2 +- asm/mazaalBracelet.s | 2 +- asm/minecart.s | 644 --------------------- asm/non_matching/minecart/sub_080919AC.inc | 287 +++++++++ asm/object2A.s | 87 --- asm/pesto.s | 2 +- asm/respawnLink.s | 4 +- asm/stairsInteract.s | 2 +- asm/vaatiProjectile.s | 2 +- include/functions.h | 8 +- linker.ld | 2 + src/enemy/rupeeLike.c | 2 +- src/object/minecart.c | 225 +++++++ src/object/object2A.c | 40 ++ 25 files changed, 604 insertions(+), 777 deletions(-) create mode 100644 asm/non_matching/minecart/sub_080919AC.inc create mode 100644 src/object/minecart.c create mode 100644 src/object/object2A.c diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index 7b4a1a12..d630fab9 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -296,7 +296,7 @@ _0801702E: ands r0, r1 cmp r0, #0 beq _08017046 - bl sub_08077B2C + bl ResetLink _08017046: ldr r0, [r4, #0x30] movs r1, #0x80 @@ -521,7 +521,7 @@ sub_080171F0: @ 0x080171F0 ldrb r0, [r4, #0x1a] cmp r0, #0 beq _08017202 - bl sub_08077B2C + bl ResetLink _08017202: ldrb r0, [r4, #0x14] cmp r0, #0 @@ -2415,7 +2415,7 @@ _08017FC2: adds r1, #0x3d movs r0, #0xf8 strb r0, [r1] - bl sub_08077B2C + bl ResetLink movs r0, #1 b _08018020 _08018002: diff --git a/asm/code_08070698.s b/asm/code_08070698.s index 2e64ca42..eabdd297 100644 --- a/asm/code_08070698.s +++ b/asm/code_08070698.s @@ -178,7 +178,7 @@ _080707F8: _08070800: ldr r0, _08070814 @ =gLinkEntity bl sub_0806F948 - bl sub_08077B2C + bl ResetLink adds r0, r5, #0 bl sub_08077698 b _08070BE4 @@ -307,7 +307,7 @@ _080708E4: ldrb r0, [r0, #6] cmp r0, #0 bne _08070902 - bl sub_08077B2C + bl ResetLink _08070902: ldr r0, [r4, #0x30] ands r0, r6 @@ -757,7 +757,7 @@ _08070C7E: rsbs r0, r0, #0 ands r0, r1 strb r0, [r2] - bl sub_08077B2C + bl ResetLink bl sub_0807A108 movs r0, #0x7b bl PlaySFX @@ -896,7 +896,7 @@ _08070DA2: movs r0, #0xa6 lsls r0, r0, #1 bl PlaySFX - bl sub_08077B2C + bl ResetLink bl sub_08078F60 pop {r4, pc} .align 2, 0 @@ -1200,7 +1200,7 @@ _08071004: _08071008: movs r0, #1 strb r0, [r4, #0xd] - bl sub_08077B2C + bl ResetLink bl sub_08078F60 pop {r4, pc} .align 2, 0 @@ -1303,7 +1303,7 @@ sub_080710A8: @ 0x080710A8 ands r3, r0 cmp r3, #0 bne _080710FA - bl sub_08077B2C + bl ResetLink ldr r0, [r5, #0x30] movs r1, #8 ands r0, r1 @@ -1567,7 +1567,7 @@ _080712E0: _080712E2: strh r0, [r5, #8] _080712E4: - bl sub_08077B2C + bl ResetLink pop {r4, r5, pc} .align 2, 0 _080712EC: .4byte 0x0000044C @@ -2329,7 +2329,7 @@ _0807189C: .4byte gUnk_0811BAD4 sub_080718A0: @ 0x080718A0 push {r4, r5, lr} adds r4, r0, #0 - bl sub_08077B2C + bl ResetLink ldr r0, _080718EC @ =gUnk_03000B80 adds r0, #0x63 movs r1, #0 @@ -2846,7 +2846,7 @@ _08071C5A: strb r3, [r2, #6] adds r0, r4, #0 bl sub_0800451C - bl sub_08077B2C + bl ResetLink movs r0, #0x87 bl PlaySFX _08071C9C: @@ -3127,7 +3127,7 @@ _08071EAC: .4byte gUnk_0811BB48 sub_08071EB0: @ 0x08071EB0 push {r4, lr} adds r4, r0, #0 - bl sub_08077B2C + bl ResetLink adds r0, r4, #0 movs r1, #0xe bl CreatePlayerBomb @@ -3367,7 +3367,7 @@ sub_08072064: @ 0x08072064 lsls r0, r0, #8 orrs r1, r0 strh r1, [r2, #8] - bl sub_08077B2C + bl ResetLink pop {pc} .align 2, 0 _08072094: .4byte gLinkState @@ -3478,7 +3478,7 @@ _08072154: lsls r0, r0, #1 _08072158: strh r0, [r2, #8] - bl sub_08077B2C + bl ResetLink adds r0, r4, #0 bl sub_08072168 pop {r4, pc} @@ -3723,7 +3723,7 @@ _08072332: ldr r1, _08072350 @ =0x00000401 orrs r0, r1 str r0, [r5, #0x30] - bl sub_08077B2C + bl ResetLink movs r0, #0x92 lsls r0, r0, #1 bl PlaySFX @@ -4132,7 +4132,7 @@ _0807266E: movs r0, #1 strb r0, [r4, #0xd] strb r1, [r4, #0xe] - bl sub_08077B2C + bl ResetLink ldr r3, [r5, #0x30] movs r0, #0x80 ands r0, r3 @@ -4626,7 +4626,7 @@ _08072A14: orrs r1, r2 ldrb r2, [r6] bl SetTile - bl sub_08077B2C + bl ResetLink adds r0, r5, #0 bl sub_08072A60 movs r0, #0x81 @@ -5015,7 +5015,7 @@ _08072D30: movs r0, #5 strb r0, [r4, #0xe] strb r1, [r4, #0xf] - bl sub_08077B2C + bl ResetLink _08072D4E: pop {r4, pc} .align 2, 0 diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s index 77d8d944..dc1ead63 100644 --- a/asm/code_080732D0.s +++ b/asm/code_080732D0.s @@ -247,7 +247,7 @@ sub_08073468: @ 0x08073468 movs r3, #0 bl CreateObjectWithParent _080734AC: - bl sub_08077B2C + bl ResetLink ldr r0, [r4, #0x20] cmp r0, #0 bgt _080734C0 @@ -1639,7 +1639,7 @@ sub_08073F04: @ 0x08073F04 rsbs r1, r1, #0 ands r0, r1 str r0, [r2, #0x30] - bl sub_08077B2C + bl ResetLink pop {pc} .align 2, 0 _08073F48: .4byte gLinkState @@ -2025,7 +2025,7 @@ sub_08074200: @ 0x08074200 ldrb r0, [r4, #0xc] cmp r0, #3 beq _08074226 - bl sub_08077B2C + bl ResetLink ldr r1, _08074228 @ =gLinkState movs r0, #3 strb r0, [r1, #0xc] @@ -2270,7 +2270,7 @@ sub_080743A4: @ 0x080743A4 strb r1, [r0, #0x10] adds r0, #0x42 strb r3, [r0] - bl sub_08077B2C + bl ResetLink pop {pc} .align 2, 0 _080743D0: .4byte gLinkState @@ -2873,7 +2873,7 @@ _08074840: _08074862: ldr r0, _080748B0 @ =0x000001A5 bl PlaySFX - bl sub_08077B2C + bl ResetLink _0807486C: ldr r5, _080748AC @ =gLinkState adds r4, r5, #0 @@ -3040,7 +3040,7 @@ sub_0807496C: @ 0x0807496C adds r1, #0x38 movs r0, #3 strb r0, [r1] - bl sub_08077B2C + bl ResetLink _080749A2: pop {r4, pc} .align 2, 0 @@ -3124,7 +3124,7 @@ _08074A34: strh r0, [r5, #8] strb r1, [r4, #0x15] _08074A3C: - bl sub_08077B2C + bl ResetLink _08074A40: pop {r4, r5, pc} .align 2, 0 @@ -3367,7 +3367,7 @@ _08074BF4: .4byte gLinkState sub_08074BF8: @ 0x08074BF8 push {r4, lr} adds r4, r0, #0 - bl sub_08077B2C + bl ResetLink adds r2, r4, #0 adds r2, #0x29 ldrb r1, [r2] diff --git a/asm/code_08076C80.s b/asm/code_08076C80.s index cf1c87bf..2b1a0501 100644 --- a/asm/code_08076C80.s +++ b/asm/code_08076C80.s @@ -1716,6 +1716,6 @@ _08077B1C: .4byte 0xFF7FFFFF thumb_func_start sub_08077B20 sub_08077B20: @ 0x08077B20 push {lr} - bl sub_08077B2C + bl ResetLink bl sub_08077AEC pop {pc} \ No newline at end of file diff --git a/asm/code_08078778.s b/asm/code_08078778.s index 56747830..5475dc74 100644 --- a/asm/code_08078778.s +++ b/asm/code_08078778.s @@ -1497,7 +1497,7 @@ _08079374: ldrb r0, [r4, #2] cmp r0, #0 bne _080793CA - bl sub_08077B2C + bl ResetLink ldr r0, [r4, #0x30] movs r1, #8 ands r0, r1 diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 7c2185ce..6732a77c 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -7062,7 +7062,7 @@ sub_0807FF6C: @ 0x0807FF6C strh r1, [r0] adds r0, #4 strh r1, [r0] - bl sub_08077B2C + bl ResetLink bl sub_080791D0 ldr r0, _0807FFCC @ =gUnk_03004030 ldrb r0, [r0, #8] diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 1655baf1..6b4f2d40 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -11392,7 +11392,7 @@ _080AAC84: adds r1, r4, #0 bl ResolveEntityOnTop _080AAC8C: - bl sub_08077B2C + bl ResetLink ldr r2, _080AACB4 @ =gLinkState ldrb r1, [r2, #0x1a] movs r0, #0x80 @@ -11863,7 +11863,7 @@ _080AAFE0: _080AAFFC: .4byte gLinkEntity _080AB000: .4byte gLinkState _080AB004: - bl sub_08077B2C + bl ResetLink ldr r2, _080AB02C @ =gLinkState ldrb r1, [r2, #0x1a] movs r0, #0x80 diff --git a/asm/ghini.s b/asm/ghini.s index ee0c58bc..f8dd37b6 100644 --- a/asm/ghini.s +++ b/asm/ghini.s @@ -986,7 +986,7 @@ _0803F734: .4byte 0x0000FFFE sub_0803F738: @ 0x0803F738 push {r4, lr} adds r4, r0, #0 - bl sub_08077B2C + bl ResetLink ldr r2, _0803F768 @ =gLinkState ldrb r1, [r2, #0x1a] movs r0, #0x80 diff --git a/asm/gibdo.s b/asm/gibdo.s index f74e786a..7581fab4 100644 --- a/asm/gibdo.s +++ b/asm/gibdo.s @@ -328,7 +328,7 @@ sub_080376D0: @ 0x080376D0 bl sub_080379EC cmp r0, #0 bne _0803773A - bl sub_08077B2C + bl ResetLink ldr r2, _08037724 @ =gLinkState ldrb r1, [r2, #0x1a] movs r0, #0x80 diff --git a/asm/itemForSale.s b/asm/itemForSale.s index 6c82a3af..52c82031 100644 --- a/asm/itemForSale.s +++ b/asm/itemForSale.s @@ -133,7 +133,7 @@ _080818F0: movs r0, #1 strb r0, [r4, #0xd] bl sub_08078B48 - bl sub_08077B2C + bl ResetLink ldr r1, _08081924 @ =gLinkState movs r0, #4 strb r0, [r1, #5] diff --git a/asm/likeLike.s b/asm/likeLike.s index cd07a3ec..81490b51 100644 --- a/asm/likeLike.s +++ b/asm/likeLike.s @@ -439,7 +439,7 @@ _0802808E: .align 2, 0 _08028098: .4byte gUnk_02002A40 _0802809C: - bl sub_08077B2C + bl ResetLink ldr r2, _08028104 @ =gLinkState ldrb r1, [r2, #0x1a] movs r0, #0x80 diff --git a/asm/lilypadLarge.s b/asm/lilypadLarge.s index 5bda9660..86828bd3 100644 --- a/asm/lilypadLarge.s +++ b/asm/lilypadLarge.s @@ -1317,7 +1317,7 @@ _08085EBE: beq _08085EE8 bl DeleteEntity _08085EE8: - bl sub_08077B2C + bl ResetLink pop {pc} .align 2, 0 _08085EF0: .4byte gLinkEntity diff --git a/asm/mazaalBracelet.s b/asm/mazaalBracelet.s index 26460b6b..04664b4f 100644 --- a/asm/mazaalBracelet.s +++ b/asm/mazaalBracelet.s @@ -3046,7 +3046,7 @@ _0803B820: .4byte gLinkEntity sub_0803B824: @ 0x0803B824 push {r4, r5, lr} adds r5, r0, #0 - bl sub_08077B2C + bl ResetLink ldr r2, _0803B864 @ =gLinkState ldrb r1, [r2, #0x1a] movs r0, #0x80 diff --git a/asm/minecart.s b/asm/minecart.s index 1075a035..f06f5240 100644 --- a/asm/minecart.s +++ b/asm/minecart.s @@ -6,650 +6,6 @@ .text - - thumb_func_start Minecart -Minecart: @ 0x080916CC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080916E8 @ =gUnk_081223A8 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r4, #0x41 - movs r0, #0 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 -_080916E8: .4byte gUnk_081223A8 - - thumb_func_start sub_080916EC -sub_080916EC: @ 0x080916EC - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0xe] - lsls r0, r0, #3 - ldr r1, _080917C8 @ =gUnk_030010EC - adds r7, r0, r1 - adds r0, r6, #0 - adds r0, #0x84 - str r7, [r0] - ldr r0, _080917CC @ =gRoomControls - ldrb r0, [r0, #5] - ldrb r1, [r7, #4] - cmp r0, r1 - bne _08091716 - ldr r0, _080917D0 @ =gLinkState - ldr r0, [r0, #0x30] - movs r1, #0x80 - lsls r1, r1, #5 - ands r0, r1 - cmp r0, #0 - beq _0809171A -_08091716: - bl DeleteThisEntity -_0809171A: - ldr r4, _080917CC @ =gRoomControls - ldrh r1, [r7] - movs r5, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - ldrh r2, [r4, #6] - adds r0, r0, r2 - adds r0, #8 - strh r0, [r6, #0x2e] - ldrh r1, [r7] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r1 - lsrs r0, r0, #2 - ldrh r3, [r4, #8] - adds r0, r0, r3 - adds r0, #8 - strh r0, [r6, #0x32] - ldrb r0, [r7, #5] - strb r0, [r6, #0x14] - ldrb r0, [r7, #6] - strb r0, [r6, #0xb] - movs r2, #1 - strb r2, [r6, #0xc] - ldr r0, _080917D4 @ =gUnk_080FD310 - str r0, [r6, #0x48] - ldrb r1, [r6, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r6, #0x10] - adds r0, r6, #0 - adds r0, #0x3f - strb r2, [r0] - adds r1, r6, #0 - adds r1, #0x3c - movs r0, #0x47 - strb r0, [r1] - adds r1, #4 - movs r0, #0x44 - strb r0, [r1] - subs r1, #5 - movs r0, #0x80 - strb r0, [r1] - ldrb r0, [r6, #0x14] - lsls r0, r0, #3 - strb r0, [r6, #0x15] - movs r0, #0xe0 - lsls r0, r0, #3 - strh r0, [r6, #0x24] - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r6, #0x14] - adds r1, #4 - ldrb r0, [r6, #0xb] - adds r1, r1, r0 - adds r0, r6, #0 - bl InitAnimationForceUpdate - ldr r0, _080917D8 @ =0x00004022 - movs r2, #0x2e - ldrsh r1, [r6, r2] - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r5 - movs r3, #0x32 - ldrsh r2, [r6, r3] - ldrh r3, [r4, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r5 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r6, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080917C8: .4byte gUnk_030010EC -_080917CC: .4byte gRoomControls -_080917D0: .4byte gLinkState -_080917D4: .4byte gUnk_080FD310 -_080917D8: .4byte 0x00004022 - - thumb_func_start sub_080917DC -sub_080917DC: @ 0x080917DC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x1d - bne _08091810 - movs r0, #0xa8 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - movs r0, #7 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x14] - adds r1, #4 - ldrb r0, [r4, #0xb] - adds r1, r1, r0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - ldr r0, _0809180C @ =0x0000013B - bl PlaySFX - b _080918A0 - .align 2, 0 -_0809180C: .4byte 0x0000013B -_08091810: - adds r0, r4, #0 - bl sub_0800445C - cmp r0, #0 - beq _0809184A - ldr r2, _08091840 @ =gLinkState - ldr r0, [r2, #0x30] - ldr r1, _08091844 @ =0x00040080 - ands r0, r1 - cmp r0, #0 - bne _08091848 - ldrb r0, [r2, #0x1c] - cmp r0, #0 - bne _08091848 - ldrb r0, [r2, #5] - cmp r0, #0 - bne _08091848 - ldrb r0, [r2, #2] - cmp r0, #0 - bne _08091848 - ldrb r0, [r4, #0xe] - adds r0, #1 - b _0809184A - .align 2, 0 -_08091840: .4byte gLinkState -_08091844: .4byte 0x00040080 -_08091848: - movs r0, #0 -_0809184A: - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0809189C - ldrb r0, [r4, #0xe] - cmp r0, #8 - bls _080918A0 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldr r2, _08091894 @ =gLinkState - movs r0, #0x81 - strb r0, [r2, #2] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x13 - orrs r0, r1 - str r0, [r2, #0x30] - ldr r1, _08091898 @ =gLinkEntity - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r1, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1, #0x24] - ldrb r2, [r1, #0x10] - movs r0, #0x7f - ands r0, r2 - strb r0, [r1, #0x10] - bl sub_08077B2C - bl sub_0807A108 - movs r0, #0x7c - bl PlaySFX - b _080918A0 - .align 2, 0 -_08091894: .4byte gLinkState -_08091898: .4byte gLinkEntity -_0809189C: - movs r0, #0 - strb r0, [r4, #0xe] -_080918A0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080918A4 -sub_080918A4: @ 0x080918A4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08091964 @ =gLinkEntity - adds r1, r5, #0 - movs r2, #2 - movs r3, #2 - bl sub_080041A0 - cmp r0, #0 - beq _08091974 - ldrh r0, [r4, #0x2e] - strh r0, [r5, #0x2e] - ldrh r0, [r4, #0x32] - strh r0, [r5, #0x32] - movs r0, #0x36 - ldrsh r1, [r5, r0] - movs r0, #0x10 - rsbs r0, r0, #0 - cmp r1, r0 - ble _0809197E - ldr r0, [r5, #0x20] - cmp r0, #0 - bge _080919A4 - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - strb r0, [r5, #0x14] - ldr r2, _08091968 @ =gLinkState - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x13 - eors r0, r1 - movs r1, #0x80 - lsls r1, r1, #5 - orrs r0, r1 - str r0, [r2, #0x30] - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xf] - ldrb r0, [r4, #0x10] - movs r2, #0x20 - orrs r0, r2 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x97 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x3c - ldrb r0, [r0] - adds r0, #1 - subs r1, #3 - orrs r0, r2 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x3b - ldrb r0, [r0] - adds r2, r4, #0 - adds r2, #0x3b - strb r0, [r2] - adds r1, #4 - movs r0, #0x18 - strb r0, [r1] - adds r1, #4 - movs r0, #8 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0801766C - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _0809196C @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r4, r5] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - ldr r0, _08091970 @ =0x00000137 - bl PlaySFX - b _0809197E - .align 2, 0 -_08091964: .4byte gLinkEntity -_08091968: .4byte gLinkState -_0809196C: .4byte gRoomControls -_08091970: .4byte 0x00000137 -_08091974: - adds r0, r5, #0 - adds r1, r4, #0 - bl GetFacingDirection - strb r0, [r5, #0x15] -_0809197E: - ldr r3, _080919A8 @ =gLinkEntity - ldr r0, [r3, #0x20] - cmp r0, #0 - bge _080919A4 - adds r0, r4, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080919A4: - pop {r4, r5, pc} - .align 2, 0 -_080919A8: .4byte gLinkEntity - - thumb_func_start sub_080919AC -sub_080919AC: @ 0x080919AC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldr r1, _080919D4 @ =gRoomControls - movs r0, #0 - mov r8, r0 - movs r0, #7 - strb r0, [r1, #0xe] - ldr r0, _080919D8 @ =gLinkState - ldr r0, [r0, #0x30] - movs r1, #0x80 - lsls r1, r1, #5 - ands r0, r1 - cmp r0, #0 - bne _080919DC - movs r0, #1 - strb r0, [r5, #0xc] - b _08091C04 - .align 2, 0 -_080919D4: .4byte gRoomControls -_080919D8: .4byte gLinkState -_080919DC: - ldr r4, _08091A14 @ =gLinkEntity - adds r6, r4, #0 - adds r6, #0x5a - ldrb r1, [r6] - movs r7, #0xf - adds r0, r7, #0 - ands r0, r1 - cmp r0, #0 - bne _08091A22 - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldrb r1, [r6] - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0x10 - bne _08091A18 - adds r1, r5, #0 - adds r1, #0x63 - movs r0, #1 - strb r0, [r1] - b _08091C04 - .align 2, 0 -_08091A14: .4byte gLinkEntity -_08091A18: - adds r0, r5, #0 - adds r0, #0x63 - mov r1, r8 - strb r1, [r0] - b _08091C04 -_08091A22: - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - mov r0, r8 - strh r0, [r4, #0x24] - adds r0, r5, #0 - bl sub_0806F69C - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - adds r3, r4, #0 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - adds r0, r5, #0 - bl sub_08091DDC - cmp r0, #0 - beq _08091A68 - b _08091C04 -_08091A68: - ldr r0, _08091AD8 @ =gUnk_030010A0 - ldr r0, [r0] - ands r0, r7 - cmp r0, #0 - bne _08091A7A - movs r0, #0x9c - lsls r0, r0, #1 - bl PlaySFX -_08091A7A: - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08091A92 - movs r0, #0x7b - bl PlaySFX - movs r0, #0x3c - strb r0, [r5, #0xf] -_08091A92: - ldr r2, _08091ADC @ =gUnk_081223C8 - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - adds r1, r0, r2 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, #1 - adds r0, r0, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - adds r0, r5, #0 - bl sub_080002B4 - adds r4, r0, #0 - ldr r1, _08091AE0 @ =gUnk_081223D8 - ldrb r0, [r5, #0x14] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl sub_08007DD6 - cmp r0, #0 - bne _08091AE4 - ldrb r0, [r5, #0x15] - movs r1, #0x10 - eors r0, r1 - strb r0, [r5, #0x15] - ldrb r0, [r5, #0x14] - movs r1, #2 - eors r0, r1 - strb r0, [r5, #0x14] - b _08091BD8 - .align 2, 0 -_08091AD8: .4byte gUnk_030010A0 -_08091ADC: .4byte gUnk_081223C8 -_08091AE0: .4byte gUnk_081223D8 -_08091AE4: - adds r0, r4, #0 - subs r0, #0x64 - cmp r0, #0xb - bhi _08091BD8 - lsls r0, r0, #2 - ldr r1, _08091AF8 @ =_08091AFC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08091AF8: .4byte _08091AFC -_08091AFC: @ jump table - .4byte _08091B2C @ case 0 - .4byte _08091BD8 @ case 1 - .4byte _08091BD8 @ case 2 - .4byte _08091BB8 @ case 3 - .4byte _08091BB8 @ case 4 - .4byte _08091BB8 @ case 5 - .4byte _08091BB8 @ case 6 - .4byte _08091BD8 @ case 7 - .4byte _08091BB8 @ case 8 - .4byte _08091BB8 @ case 9 - .4byte _08091BB8 @ case 10 - .4byte _08091BB8 @ case 11 -_08091B2C: - ldrb r1, [r5, #0x10] - movs r0, #0xdf - ands r0, r1 - strb r0, [r5, #0x10] - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #1 - strb r0, [r1] - subs r1, #3 - movs r0, #0x47 - strb r0, [r1] - adds r1, #4 - movs r0, #0x44 - strb r0, [r1] - subs r1, #5 - movs r4, #0x80 - movs r0, #0x80 - strb r0, [r1] - movs r0, #6 - strb r0, [r5, #0xc] - adds r0, r5, #0 - bl sub_08017744 - ldr r2, _08091BAC @ =gLinkState - movs r0, #0x41 - strb r0, [r2, #2] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #5 - eors r0, r1 - movs r1, #0x80 - lsls r1, r1, #0x13 - orrs r0, r1 - str r0, [r2, #0x30] - ldr r1, _08091BB0 @ =gLinkEntity - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r1, #0x20] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r1, #0x24] - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - strb r0, [r1, #0x14] - ldrb r0, [r5, #0x15] - strb r0, [r1, #0x15] - ldrb r0, [r1, #0x10] - orrs r4, r0 - strb r4, [r1, #0x10] - adds r0, r5, #0 - bl sub_08004168 - ldrb r1, [r5, #0x14] - adds r1, #0xc - adds r0, r5, #0 - bl InitAnimationForceUpdate - movs r0, #0x78 - bl PlaySFX - ldr r0, _08091BB4 @ =0x00000139 - bl PlaySFX - b _08091C04 - .align 2, 0 -_08091BAC: .4byte gLinkState -_08091BB0: .4byte gLinkEntity -_08091BB4: .4byte 0x00000139 -_08091BB8: - adds r0, r5, #0 - bl sub_080002B8 - cmp r4, r0 - bne _08091BD8 - adds r0, r5, #0 - bl sub_08091C0C - ldr r1, _08091BD4 @ =gLinkEntity - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - strb r0, [r1, #0x14] - b _08091C04 - .align 2, 0 -_08091BD4: .4byte gLinkEntity -_08091BD8: - ldr r2, _08091BF8 @ =gLinkEntity - ldrb r0, [r5, #0x14] - lsls r1, r0, #1 - strb r1, [r2, #0x14] - adds r1, r5, #0 - adds r1, #0x58 - ldrb r1, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r1, r0 - bne _08091BFC - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - b _08091C04 - .align 2, 0 -_08091BF8: .4byte gLinkEntity -_08091BFC: - ldrb r1, [r5, #0x14] - adds r0, r5, #0 - bl InitAnimationForceUpdate -_08091C04: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_start sub_08091C0C sub_08091C0C: @ 0x08091C0C push {r4, lr} diff --git a/asm/non_matching/minecart/sub_080919AC.inc b/asm/non_matching/minecart/sub_080919AC.inc new file mode 100644 index 00000000..e7c12d24 --- /dev/null +++ b/asm/non_matching/minecart/sub_080919AC.inc @@ -0,0 +1,287 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r5, r0, #0 + ldr r1, _080919D4 @ =gRoomControls + movs r0, #0 + mov r8, r0 + movs r0, #7 + strb r0, [r1, #0xe] + ldr r0, _080919D8 @ =gLinkState + ldr r0, [r0, #0x30] + movs r1, #0x80 + lsls r1, r1, #5 + ands r0, r1 + cmp r0, #0 + bne _080919DC + movs r0, #1 + strb r0, [r5, #0xc] + b _08091C04 + .align 2, 0 +_080919D4: .4byte gRoomControls +_080919D8: .4byte gLinkState +_080919DC: + ldr r4, _08091A14 @ =gLinkEntity + adds r6, r4, #0 + adds r6, #0x5a + ldrb r1, [r6] + movs r7, #0xf + adds r0, r7, #0 + ands r0, r1 + cmp r0, #0 + bne _08091A22 + ldrb r1, [r5, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r5, #0x10] + adds r0, r5, #0 + adds r1, r4, #0 + bl CopyPosition + ldrb r1, [r6] + movs r0, #0xf0 + ands r0, r1 + cmp r0, #0x10 + bne _08091A18 + adds r1, r5, #0 + adds r1, #0x63 + movs r0, #1 + strb r0, [r1] + b _08091C04 + .align 2, 0 +_08091A14: .4byte gLinkEntity +_08091A18: + adds r0, r5, #0 + adds r0, #0x63 + mov r1, r8 + strb r1, [r0] + b _08091C04 +_08091A22: + ldrb r0, [r5, #0x10] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r5, #0x10] + mov r0, r8 + strh r0, [r4, #0x24] + adds r0, r5, #0 + bl sub_0806F69C + adds r0, r5, #0 + adds r1, r4, #0 + bl CopyPosition + adds r0, r5, #0 + adds r0, #0x29 + ldrb r1, [r0] + lsls r1, r1, #0x1d + lsrs r1, r1, #0x1d + subs r1, #1 + adds r3, r4, #0 + adds r3, #0x29 + movs r0, #7 + ands r1, r0 + ldrb r2, [r3] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3] + adds r0, r5, #0 + bl sub_08091DDC + cmp r0, #0 + beq _08091A68 + b _08091C04 +_08091A68: + ldr r0, _08091AD8 @ =gUnk_030010A0 + ldr r0, [r0] + ands r0, r7 + cmp r0, #0 + bne _08091A7A + movs r0, #0x9c + lsls r0, r0, #1 + bl PlaySFX +_08091A7A: + ldrb r0, [r5, #0xf] + subs r0, #1 + strb r0, [r5, #0xf] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xff + bne _08091A92 + movs r0, #0x7b + bl PlaySFX + movs r0, #0x3c + strb r0, [r5, #0xf] +_08091A92: + ldr r2, _08091ADC @ =gUnk_081223C8 + ldrb r0, [r5, #0x14] + lsls r0, r0, #1 + adds r1, r0, r2 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, #1 + adds r0, r0, r2 + movs r2, #0 + ldrsb r2, [r0, r2] + adds r0, r5, #0 + bl sub_080002B4 + adds r4, r0, #0 + ldr r1, _08091AE0 @ =gUnk_081223D8 + ldrb r0, [r5, #0x14] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r4, #0 + bl sub_08007DD6 + cmp r0, #0 + bne _08091AE4 + ldrb r0, [r5, #0x15] + movs r1, #0x10 + eors r0, r1 + strb r0, [r5, #0x15] + ldrb r0, [r5, #0x14] + movs r1, #2 + eors r0, r1 + strb r0, [r5, #0x14] + b _08091BD8 + .align 2, 0 +_08091AD8: .4byte gUnk_030010A0 +_08091ADC: .4byte gUnk_081223C8 +_08091AE0: .4byte gUnk_081223D8 +_08091AE4: + adds r0, r4, #0 + subs r0, #0x64 + cmp r0, #0xb + bhi _08091BD8 + lsls r0, r0, #2 + ldr r1, _08091AF8 @ =_08091AFC + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08091AF8: .4byte _08091AFC +_08091AFC: @ jump table + .4byte _08091B2C @ case 0 + .4byte _08091BD8 @ case 1 + .4byte _08091BD8 @ case 2 + .4byte _08091BB8 @ case 3 + .4byte _08091BB8 @ case 4 + .4byte _08091BB8 @ case 5 + .4byte _08091BB8 @ case 6 + .4byte _08091BD8 @ case 7 + .4byte _08091BB8 @ case 8 + .4byte _08091BB8 @ case 9 + .4byte _08091BB8 @ case 10 + .4byte _08091BB8 @ case 11 +_08091B2C: + ldrb r1, [r5, #0x10] + movs r0, #0xdf + ands r0, r1 + strb r0, [r5, #0x10] + adds r1, r5, #0 + adds r1, #0x3f + movs r0, #1 + strb r0, [r1] + subs r1, #3 + movs r0, #0x47 + strb r0, [r1] + adds r1, #4 + movs r0, #0x44 + strb r0, [r1] + subs r1, #5 + movs r4, #0x80 + movs r0, #0x80 + strb r0, [r1] + movs r0, #6 + strb r0, [r5, #0xc] + adds r0, r5, #0 + bl sub_08017744 + ldr r2, _08091BAC @ =gLinkState + movs r0, #0x41 + strb r0, [r2, #2] + ldr r0, [r2, #0x30] + movs r1, #0x80 + lsls r1, r1, #5 + eors r0, r1 + movs r1, #0x80 + lsls r1, r1, #0x13 + orrs r0, r1 + str r0, [r2, #0x30] + ldr r1, _08091BB0 @ =gLinkEntity + movs r0, #0x80 + lsls r0, r0, #0xa + str r0, [r1, #0x20] + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r1, #0x24] + ldrb r0, [r5, #0x14] + lsls r0, r0, #1 + strb r0, [r1, #0x14] + ldrb r0, [r5, #0x15] + strb r0, [r1, #0x15] + ldrb r0, [r1, #0x10] + orrs r4, r0 + strb r4, [r1, #0x10] + adds r0, r5, #0 + bl sub_08004168 + ldrb r1, [r5, #0x14] + adds r1, #0xc + adds r0, r5, #0 + bl InitAnimationForceUpdate + movs r0, #0x78 + bl PlaySFX + ldr r0, _08091BB4 @ =0x00000139 + bl PlaySFX + b _08091C04 + .align 2, 0 +_08091BAC: .4byte gLinkState +_08091BB0: .4byte gLinkEntity +_08091BB4: .4byte 0x00000139 +_08091BB8: + adds r0, r5, #0 + bl sub_080002B8 + cmp r4, r0 + bne _08091BD8 + adds r0, r5, #0 + bl sub_08091C0C + ldr r1, _08091BD4 @ =gLinkEntity + ldrb r0, [r5, #0x14] + lsls r0, r0, #1 + strb r0, [r1, #0x14] + b _08091C04 + .align 2, 0 +_08091BD4: .4byte gLinkEntity +_08091BD8: + ldr r2, _08091BF8 @ =gLinkEntity + ldrb r0, [r5, #0x14] + lsls r1, r0, #1 + strb r1, [r2, #0x14] + adds r1, r5, #0 + adds r1, #0x58 + ldrb r1, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r1, r0 + bne _08091BFC + adds r0, r5, #0 + bl UpdateAnimationSingleFrame + b _08091C04 + .align 2, 0 +_08091BF8: .4byte gLinkEntity +_08091BFC: + ldrb r1, [r5, #0x14] + adds r0, r5, #0 + bl InitAnimationForceUpdate +_08091C04: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided \ No newline at end of file diff --git a/asm/object2A.s b/asm/object2A.s index 8376c2d4..d9d563b0 100644 --- a/asm/object2A.s +++ b/asm/object2A.s @@ -7,93 +7,6 @@ .text - thumb_func_start Object2A -Object2A: @ 0x08089B00 - push {lr} - ldr r2, _08089B14 @ =gUnk_08120DD0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08089B14: .4byte gUnk_08120DD0 - - thumb_func_start sub_08089B18 -sub_08089B18: @ 0x08089B18 - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r2, #1 - movs r6, #1 - strb r6, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r5, #4 - rsbs r5, r5, #0 - adds r0, r5, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _08089B38 - strb r0, [r4, #0xe] -_08089B38: - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - ldrb r0, [r4, #0xa] - cmp r0, #2 - beq _08089B66 - cmp r0, #2 - bgt _08089B50 - cmp r0, #1 - beq _08089B5A - b _08089B96 -_08089B50: - cmp r0, #3 - beq _08089B72 - cmp r0, #4 - beq _08089B7C - b _08089B96 -_08089B5A: - ldrh r0, [r4, #0x32] - subs r0, #8 - strh r0, [r4, #0x32] - movs r0, #0x28 - strb r0, [r4, #0xe] - b _08089B96 -_08089B66: - movs r0, #0xf - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_08004168 - b _08089B96 -_08089B72: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - b _08089B96 -_08089B7C: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _08089B96 - ldrb r1, [r4, #0x18] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r4, #0x18] - strb r6, [r4, #0xd] - b _08089B9E -_08089B96: - movs r0, #0x92 - lsls r0, r0, #1 - bl sub_08004488 -_08089B9E: - pop {r4, r5, r6, pc} - thumb_func_start sub_08089BA0 sub_08089BA0: @ 0x08089BA0 push {r4, r5, r6, lr} diff --git a/asm/pesto.s b/asm/pesto.s index 5e5b2c14..0ca10a24 100644 --- a/asm/pesto.s +++ b/asm/pesto.s @@ -2096,7 +2096,7 @@ _08024E9A: _08024EC8: .4byte gUnk_02002A40 _08024ECC: ldr r6, _08024F48 @ =gLinkEntity - bl sub_08077B2C + bl ResetLink ldr r2, _08024F4C @ =gLinkState ldr r0, [r2, #0x30] movs r1, #0x80 diff --git a/asm/respawnLink.s b/asm/respawnLink.s index 75e1650b..92951a5e 100644 --- a/asm/respawnLink.s +++ b/asm/respawnLink.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_08077B2C -sub_08077B2C: @ 0x08077B2C + thumb_func_start ResetLink +ResetLink: @ 0x08077B2C push {r4, r5, lr} movs r4, #0 ldr r5, _08077B88 @ =gUnk_03000B80 diff --git a/asm/stairsInteract.s b/asm/stairsInteract.s index 4d78fe0e..5c7e720c 100644 --- a/asm/stairsInteract.s +++ b/asm/stairsInteract.s @@ -123,7 +123,7 @@ _080732B8: movs r0, #0 str r0, [r1, #0x30] bl sub_0807A108 - bl sub_08077B2C + bl ResetLink pop {r4, r5, r6, r7, pc} .align 2, 0 _080732CC: .4byte gRoomControls diff --git a/asm/vaatiProjectile.s b/asm/vaatiProjectile.s index 7f6c4e80..3a23e2f8 100644 --- a/asm/vaatiProjectile.s +++ b/asm/vaatiProjectile.s @@ -507,7 +507,7 @@ _0803E442: sub_0803E444: @ 0x0803E444 push {r4, lr} adds r4, r0, #0 - bl sub_08077B2C + bl ResetLink ldr r2, _0803E478 @ =gLinkState ldrb r1, [r2, #0x1a] movs r0, #0x80 diff --git a/include/functions.h b/include/functions.h index 00a7e4a6..40ebac66 100644 --- a/include/functions.h +++ b/include/functions.h @@ -195,9 +195,13 @@ extern void sub_08001290(Entity*, u32); extern void sub_08004488(u32); extern void sub_08004596(Entity*, u32); extern u32 sub_0807953C(void); -extern void sub_08077B2C(void); +extern void ResetLink(void); extern void sub_080A29BC(Entity*); extern void sub_080AE068(Entity*); extern Entity* sub_0805E8D4(void); extern void sub_0805EA2C(Entity*, u32); -#endif +extern u32 sub_0800445C(Entity*); +extern void sub_0807A108(void); +extern void sub_0801766C(Entity*); +extern void sub_08004168(Entity*); +#endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index c47ce28d..22b50e7c 100644 --- a/linker.ld +++ b/linker.ld @@ -710,6 +710,7 @@ SECTIONS { asm/pushableStatue.o(.text); asm/object28.o(.text); asm/object29.o(.text); + src/object/object2A.o(.text); asm/object2A.o(.text); asm/object2B.o(.text); asm/beanstalk.o(.text); @@ -759,6 +760,7 @@ SECTIONS { asm/object52.o(.text); asm/object53.o(.text); asm/pullableLever.o(.text); + src/object/minecart.o(.text); asm/minecart.o(.text); src/object/thoughtBubble.o(.text); asm/hiddenLadderDown.o(.text); diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c index 5b6bd3e5..009b8789 100644 --- a/src/enemy/rupeeLike.c +++ b/src/enemy/rupeeLike.c @@ -161,7 +161,7 @@ void sub_0802953C(Entity* this) { if (((this->field_0xf > 0x2d) || (gUnk_02002A40.stats.rupees == 0)) && (this->actionDelay == 0)) { sub_080296D8(this); } else { - sub_08077B2C(); + ResetLink(); gLinkState.field_0x1a[0] |= 0x80; PositionRelative(this, &gLinkEntity, 0, 0x10000); pbVar3 = GetSpriteSubEntryOffsetDataPointer((u16)this->spriteIndex, this->frameIndex); diff --git a/src/object/minecart.c b/src/object/minecart.c new file mode 100644 index 00000000..eff15d3a --- /dev/null +++ b/src/object/minecart.c @@ -0,0 +1,225 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "room.h" + +typedef struct { + u16 field_0x0; + u16 field_0x2; + u8 field_0x4; + u8 field_0x5; + u8 field_0x6; + u8 field_0x7; +} struct_030010EC; + +extern void (*const gUnk_081223A8[])(Entity*); + +extern struct_030010EC gUnk_030010EC[]; +extern BoundingBox gUnk_080FD310; + +void Minecart(Entity* this) { + gUnk_081223A8[this->action](this); + this->bitfield = 0; +} + +void sub_080916EC(Entity* this) { + struct_030010EC* unk = &gUnk_030010EC[this->actionDelay]; + + *(struct_030010EC**)&this->cutsceneBeh.HWORD = unk; + if ((gRoomControls.roomID != unk->field_0x4) || (gLinkState.flags.all & 0x1000) != 0) { + DeleteThisEntity(); + } + this->x.HALF.HI = gRoomControls.roomOriginX + ((unk->field_0x0 & 0x3f) << 4) + 8; + this->y.HALF.HI = gRoomControls.roomOriginY + ((unk->field_0x0 & 0xfc << 4) >> 2) + 8; + this->animationState = unk->field_0x5; + this->entityType.parameter = unk->field_0x6; + this->action = 1; + this->boundingBox = &gUnk_080FD310; + this->flags |= 0x80; + this->damageType = 1; + this->field_0x3c = 0x47; + this->field_0x40 = 0x44; + this->flags2 = 0x80; + this->direction = this->animationState << 3; + this->nonPlanarMovement = 0x700; + this->spritePriority.b1 = 3; + InitAnimationForceUpdate(this, this->entityType.parameter + 4 + this->animationState); + SetTile(0x4022, COORD_TO_TILE(this), this->collisionLayer); +} + +void sub_080917DC(Entity* this) { + + if ((this->bitfield & 0x7f) == 0x1d) { + this->field_0x20 = 0x2a000; + this->action = 7; + InitAnimationForceUpdate(this, this->entityType.parameter + 4 + this->animationState); + PlaySFX(0x13b); + } else { + if (sub_0800445C(this) != 0) { + if (((gLinkState.flags.all & 0x40080) == 0) && (gLinkState.field_0x1c == 0) && + (gLinkState.heldObject == 0) && (gLinkState.jumpStatus == 0)) { + this->actionDelay++; + } else { + this->actionDelay = 0; + } + } else { + this->actionDelay = 0; + } + if ((this->entityType).parameter == 0) { + if (8 < this->actionDelay) { + this->action = this->action + 1; + gLinkState.jumpStatus = 0x81; + gLinkState.flags.all |= 0x4000000; + gLinkEntity.field_0x20 = 0x20000; + gLinkEntity.nonPlanarMovement = 0x100; + gLinkEntity.flags &= 0x7f; + ResetLink(); + sub_0807A108(); + PlaySFX(0x7c); + } + } else { + this->actionDelay = 0; + } + } +} + +void sub_080918A4(Entity *this) +{ + if (sub_080041A0(this, &gLinkEntity, 2, 2) != 0) { + gLinkEntity.x.HALF.HI = this->x.HALF.HI; + gLinkEntity.y.HALF.HI = this->y.HALF.HI; + if (gLinkEntity.height.HALF.HI > -0x10) { + if ((s32)gLinkEntity.field_0x20 > -1) { + return; + } + gLinkEntity.animationState = this->animationState << 1; + gLinkState.flags.all = (gLinkState.flags.all ^ 0x4000000) | 0x1000; + this->action++; + this->field_0xf = 1; + this->flags |= 0x20; + this->damageType = 0x97; + this->field_0x3c = (gLinkEntity.field_0x3c + 1) | 0x20; + this->flags2 = gLinkEntity.flags2; + this->field_0x40 = 0x18; + this->field_0x44 = 8; + sub_0801766C(this); + sub_0807BA8C(COORD_TO_TILE(this), this->collisionLayer); + PlaySFX(0x137); + } + } + else { + gLinkEntity.direction = GetFacingDirection(&gLinkEntity, this); + } + if (gLinkEntity.field_0x20 < 0) { + gLinkEntity.spritePriority.b0 = this->spritePriority.b0 - 1; + } +} + +#if 0 + +typedef struct { + u8 field_0x0; + u8 field_0x1; +} struct_081223C8; + +extern struct_081223C8 gUnk_081223C8[]; + +extern u32 gUnk_081223D8[]; + +void sub_080919AC(Entity *this) +{ + u32 iVar2; + u32 uVar3; + u32 uVar4; + struct_081223C8* temp; + + gRoomControls.unk5 = 7; + if ((gLinkState.flags.all & 0x1000) == 0) { + this->action = 1; + } + else { + if ((gLinkEntity.frames.all & 0xf) == 0) { + this->flags = this->flags & 0x7f; + CopyPosition(this,&gLinkEntity); + if ((gLinkEntity.frames.all & 0xf0) == 0x10) { + this->spriteOffsetY = 1; + } + else { + this->spriteOffsetY = 0; + } + } + else { + this->flags = this->flags | 0x80; + gLinkEntity.nonPlanarMovement = 0; + sub_0806F69C(this); + CopyPosition(this,&gLinkEntity); + gLinkEntity.spritePriority.b0 = this->spritePriority.b0 - 1; + if (!sub_08091DDC(this)) { + if ((gUnk_030010A0.field_0x0 & 0xf) == 0) { + PlaySFX(0x138); + } + + if (--this->field_0xf == 0xff) { + PlaySFX(0x7b); + this->field_0xf = 0x3c; + } + uVar3 = sub_03005800(this, gUnk_081223C8[this->animationState].field_0x0, gUnk_081223C8[this->animationState].field_0x1); + iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]); + if (iVar2 == 0) { + this->direction = this->direction ^ 0x10; + this->animationState = this->animationState ^ 2; + } + else { + switch(uVar3) { + case 100: + this->flags = this->flags & 0xdf; + this->damageType = 1; + this->field_0x3c = 0x47; + this->field_0x40 = 0x44; + this->flags2 = 0x80; + this->action = 6; + sub_08017744(this); + gLinkState.jumpStatus = 0x41; + gLinkState.flags.all = (gLinkState.flags.all ^ 0x1000) | 0x4000000; + gLinkEntity.field_0x20 = 0x20000; + gLinkEntity.nonPlanarMovement = 0x200; + gLinkEntity.animationState = this->animationState << 1; + gLinkEntity.direction = this->direction; + gLinkEntity.flags |= 0x80; + sub_08004168(this); + InitAnimationForceUpdate(this, this->animationState + 0xc); + PlaySFX(0x78); + PlaySFX(0x139); + return; + case 0x67: + case 0x68: + case 0x69: + case 0x6a: + case 0x6c: + case 0x6d: + case 0x6e: + case 0x6f: + if (uVar3 == sub_080002B8()) { + sub_08091C0C(this); + gLinkEntity.animationState *= 2; + return; + } + } + } + gLinkEntity.animationState *= 2; + if (this->animIndex == this->animationState) { + UpdateAnimationSingleFrame(this); + } + else { + InitAnimationForceUpdate(this, this->animationState); + } + } + } + } +} +#else +NAKED +void sub_080919AC(Entity *this) { + asm(".include \"asm/non_matching/minecart/sub_080919AC.inc\""); +} +#endif \ No newline at end of file diff --git a/src/object/object2A.c b/src/object/object2A.c new file mode 100644 index 00000000..d8f30b54 --- /dev/null +++ b/src/object/object2A.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "flags.h" + +extern void (*const gUnk_08120DD0[])(Entity*); + +void Object2A(Entity* this) { + gUnk_08120DD0[this->action](this); +} + +void sub_08089B18(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.draw = TRUE; + if (this->entityType.parameter != 0) { + this->actionDelay = this->entityType.parameter; + } + InitializeAnimation(this, 0); + switch (this->entityType.form) { + case 1: + this->y.HALF.HI -= 8; + this->actionDelay = 0x28; + break; + case 2: + this->actionDelay = 0xf; + sub_08004168(this); + break; + case 3: + CopyPosition(this->parent, this); + break; + case 4: + if (!CheckFlags(this->field_0x86)) { + this->spriteSettings.b.draw = FALSE; + this->previousActionFlag = 1; + return; + } + } + sub_08004488(0x124); +} \ No newline at end of file