From 6304bbc3f2ee116a54ce59dde6f822166e74ba4d Mon Sep 17 00:00:00 2001 From: 21aslade <21aslade@go.dsdmail.net> Date: Sun, 28 Jun 2020 22:05:36 -0600 Subject: [PATCH 01/25] lakituCloud.s OK Also edited a few names in the entity struct to match usage more. --- CONTRIBUTING.md | 4 +- asm/lakituCloud.s | 254 ---------------------------------------------- include/entity.h | 8 +- linker.ld | 2 +- src/bladeTrap.c | 11 +- src/keese.c | 6 +- src/lakituCloud.c | 155 ++++++++++++++++++++++++++++ src/mask.c | 4 +- src/ocarina.c | 4 +- src/zelda.c | 2 +- 10 files changed, 178 insertions(+), 272 deletions(-) delete mode 100644 asm/lakituCloud.s create mode 100644 src/lakituCloud.c diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9137e3aa..0a438e7d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -220,7 +220,7 @@ void sub_08086284(Entity *r4) { gUnk_08120668[r4->action](r4); r4->bitfield = 0; - sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->itemCooldown, 0); + sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->field_0x7a, 0); return; } ``` @@ -268,7 +268,7 @@ extern void (*gUnk_08120668[])(Entity *); void sub_08086284(Entity *r4) { gUnk_08120668[r4->action](r4); r4->bitfield = 0; - sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->itemCooldown, 0); + sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->field_0x7a, 0); return; } ``` diff --git a/asm/lakituCloud.s b/asm/lakituCloud.s deleted file mode 100644 index 69a60a52..00000000 --- a/asm/lakituCloud.s +++ /dev/null @@ -1,254 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LakituCloud -LakituCloud: @ 0x0803CCB8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0803CCD0 @ =gUnk_080D0418 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_0803CCD0: .4byte gUnk_080D0418 - - thumb_func_start sub_0803CCD4 -sub_0803CCD4: @ 0x0803CCD4 - push {lr} - ldr r2, _0803CCE8 @ =gUnk_080D0430 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0803CCE8: .4byte gUnk_080D0430 - - thumb_func_start sub_0803CCEC -sub_0803CCEC: @ 0x0803CCEC - push {lr} - adds r2, r0, #0 - adds r2, #0x42 - movs r1, #0 - strb r1, [r2] - bl sub_0803CCD4 - pop {pc} - - thumb_func_start sub_0803CCFC -sub_0803CCFC: @ 0x0803CCFC - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - bne _0803CD16 - ldrb r0, [r4, #0xd] - cmp r0, #2 - bne _0803CD26 - adds r0, r4, #0 - bl sub_0803CE3C - b _0803CD26 -_0803CD16: - ldr r0, _0803CD28 @ =gUnk_080D043C - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0803CD26: - pop {r4, pc} - .align 2, 0 -_0803CD28: .4byte gUnk_080D043C - - thumb_func_start sub_0803CD2C -sub_0803CD2C: @ 0x0803CD2C - movs r1, #1 - strb r1, [r0, #0xd] - movs r1, #0x3c - strb r1, [r0, #0x1d] - bx lr - .align 2, 0 - - thumb_func_start sub_0803CD38 -sub_0803CD38: @ 0x0803CD38 - push {lr} - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_0803CD40 -sub_0803CD40: @ 0x0803CD40 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _0803CD66 - movs r0, #2 - rsbs r0, r0, #0 - bl ModHealth - ldr r0, _0803CD68 @ =gLinkEntity - movs r1, #0x7a - bl sub_0800449C - bl sub_08079D84 - adds r0, r4, #0 - bl sub_0803CE3C -_0803CD66: - pop {r4, pc} - .align 2, 0 -_0803CD68: .4byte gLinkEntity - - thumb_func_start sub_0803CD6C -sub_0803CD6C: @ 0x0803CD6C - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0803CDA4 @ =0x0000FFFE - strh r0, [r4, #0x36] - ldrb r0, [r4, #0xa] - bl sub_0804B128 - str r0, [r4, #0x54] - str r0, [r4, #0x50] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x78 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x7a - strh r0, [r1] - adds r0, r4, #0 - movs r1, #4 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0803CE14 - pop {r4, pc} - .align 2, 0 -_0803CDA4: .4byte 0x0000FFFE - - thumb_func_start sub_0803CDA8 -sub_0803CDA8: @ 0x0803CDA8 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803CDC0 - adds r0, r4, #0 - bl sub_0806F69C -_0803CDC0: - adds r1, r4, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803CDD6 - adds r0, r4, #0 - bl sub_0803CE14 -_0803CDD6: - pop {r4, pc} - - thumb_func_start sub_0803CDD8 -sub_0803CDD8: @ 0x0803CDD8 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x1e - lsrs r0, r0, #0x1e - movs r2, #1 - eors r0, r2 - movs r5, #4 - rsbs r5, r5, #0 - adds r3, r5, #0 - ands r3, r1 - orrs r3, r0 - strb r3, [r4, #0x18] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803CE10 - movs r0, #1 - strb r2, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r2, #0x80 - orrs r1, r2 - strb r1, [r4, #0x10] - ands r3, r5 - orrs r3, r0 - strb r3, [r4, #0x18] -_0803CE10: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803CE14 -sub_0803CE14: @ 0x0803CE14 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x54 - adds r2, r4, #0 - adds r2, #0x74 - bl sub_080A2CC0 - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803CE38 - lsrs r1, r1, #3 - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0803CE38: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803CE3C -sub_0803CE3C: @ 0x0803CE3C - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r2, r4, #0 - adds r2, #0x3a - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x78 - ldrh r0, [r0] - strh r0, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x7a - ldrh r0, [r0] - strh r0, [r4, #0x32] - ldr r0, [r4, #0x50] - str r0, [r4, #0x54] - adds r0, r4, #0 - bl sub_0803CE14 - pop {r4, pc} diff --git a/include/entity.h b/include/entity.h index d9a60d30..ceab7355 100644 --- a/include/entity.h +++ b/include/entity.h @@ -80,7 +80,8 @@ typedef struct Entity { u8 b1 : 2; u8 b2 : 2; } PACKED spriteOrientation; - u8 filler[2]; + u8 filler[1]; + u8 field_0x1d; u8 frameIndex; u8 lastFrameIndex; s32 field_0x20; @@ -140,9 +141,10 @@ typedef struct Entity { u8 field_0x6c; u8 field_0x6d; u8 filler4[6]; - u32* heldObjectPtr; + u16 field_0x74; + u8 filler5[2]; u16 field_0x78; - u16 itemCooldown; + u16 field_0x7a; union SplitWord field_0x7c; u16 field_0x80; u16 field_0x82; diff --git a/linker.ld b/linker.ld index ea8515c4..bc802f75 100644 --- a/linker.ld +++ b/linker.ld @@ -395,7 +395,7 @@ SECTIONS { src/bowMoblin.o(.text); asm/bowMoblin.o(.text); asm/lakitu.o(.text); - asm/lakituCloud.o(.text); + src/lakituCloud.o(.text); asm/enemy49.o(.text); asm/vaatiRebornEnemy.o(.text); asm/vaatiProjectile.o(.text); diff --git a/src/bladeTrap.c b/src/bladeTrap.c index 58cff0c1..89d1663a 100644 --- a/src/bladeTrap.c +++ b/src/bladeTrap.c @@ -14,16 +14,19 @@ void BladeTrap(Entity* ent) { ent->action = 1; pEVar2 = sub_0804B128((u8)(ent->entityType).form); ent->attachedEntity = pEVar2; - sub_080A2CC0((EntityData*)ent, &ent->attachedEntity, &ent->heldObjectPtr); + sub_080A2CC0((EntityData*)ent, &ent->attachedEntity, &ent->field_0x74); } if ((ent->direction & 0x80) == 0) { sub_0806F69C(ent); } - puVar3 = (u16*)&(ent->heldObjectPtr); + + + + puVar3 = &(ent->field_0x74); uVar1 = *puVar3; *puVar3 = uVar1 - 1; - if ((u16)(*puVar3) == 0) { - if ((ent->direction & 0x80) == 0) { + if ((*puVar3) == 0) { + if ((u16)(ent->direction & 0x80) == 0) { sub_08004488(0x74); } sub_080A2CC0((EntityData*)ent, &ent->attachedEntity, puVar3); diff --git a/src/keese.c b/src/keese.c index b9914c2f..0c846a79 100644 --- a/src/keese.c +++ b/src/keese.c @@ -88,8 +88,8 @@ void sub_08021E4C(Entity *this) if (this->field_0x78 != 0) { this->field_0x78--; } - if (this->itemCooldown != 0) { - (this->itemCooldown)--; + if (this->field_0x7a != 0) { + (this->field_0x7a)--; } GetNextFrame(this); if ((this->frames.b.f3) != 0) { @@ -129,6 +129,6 @@ void sub_08021EF0(Entity *this) this->action = 1; this->field_0x78 = gUnk_080CB6D6[Random() & 0xf]; - this->itemCooldown = 0x3c; + this->field_0x7a = 0x3c; InitializeAnimation(this, 0); } diff --git a/src/lakituCloud.c b/src/lakituCloud.c new file mode 100644 index 00000000..36489ad5 --- /dev/null +++ b/src/lakituCloud.c @@ -0,0 +1,155 @@ +#include "global.h" +#include "entity.h" + +extern Entity gLinkEntity; + +extern void UpdateAnimationSingleFrame(Entity *); +extern void InitAnimationForceUpdate(Entity *, s32); +extern u32 GetNextFunction(Entity *); +extern void ModHealth(s32); +extern void CreateFx(Entity *, u16, u16); + +extern void (* const gUnk_080D0418[])(Entity *); +extern void (* const gUnk_080D0430[])(Entity *); +extern void (* const gUnk_080D043C[])(Entity *); + +extern bool32 sub_0806F3E4(Entity *); +extern bool32 sub_0806F520(Entity *); + +extern void sub_0800449C(Entity *, u32); +extern void sub_0803CE14(Entity *); +extern void sub_0803CE3C(Entity *); +extern Entity *sub_0804B128(u8); +extern void sub_0806F4E8(Entity *); +extern void sub_0806F69C(Entity *); +extern void sub_08079D84(void); +extern void sub_080A2CC0(Entity *, Entity **, u16 *); + +void LakituCloud(Entity *this) { + gUnk_080D0418[GetNextFunction(this)](this); +} + +void sub_0803CCD4(Entity *this) { + gUnk_080D0430[this->action](this); +} + +void sub_0803CCEC(Entity *this) { + this->field_0x42 = 0; + sub_0803CCD4(this); +} + +void sub_0803CCFC(Entity *this) { + if (sub_0806F520(this) == 0) { + if (this->previousActionFlag == 2) { + sub_0803CE3C(this); + } + } + else { + gUnk_080D043C[this->previousActionFlag](this); + } +} + +void sub_0803CD2C(Entity *this) { + this->previousActionFlag = 1; + this->field_0x1d = 0x3c; +} + +void sub_0803CD38(Entity *this) { + sub_0806F4E8(this); +} + +void sub_0803CD40(Entity *this) { + if (!sub_0806F3E4(this)) { + return; + } + + ModHealth(-2); + + sub_0800449C(&gLinkEntity, 122); + sub_08079D84(); + + sub_0803CE3C(this); +} + +void sub_0803CD6C(Entity *this) { + Entity *lakitu; + + this->action = 1; + this->height.HALF.HI = -2; + + // Set parent to lakitu + lakitu = sub_0804B128(this->entityType.form); + this->attachedEntity = lakitu; + this->parent = lakitu; + + this->field_0x78 = this->x.HALF.HI; + this->field_0x7a = this->y.HALF.HI; + + InitAnimationForceUpdate(this, 4); + + sub_0803CE14(this); +} + +void sub_0803CDA8(Entity *this) { + UpdateAnimationSingleFrame(this); + + if ((this->direction & 0x80) == 0) { + sub_0806F69C(this); + } + + if (--this->field_0x74 << 0x10 == 0) { + sub_0803CE14(this); + } +} + +void sub_0803CDD8(Entity *this) { + u8 one; + u8 ss0; + + ss0 = this->spriteSettings.b.ss0; + one = 1; + this->spriteSettings.b.ss0 = ss0 ^ one; + + this->actionDelay--; + + if (this->actionDelay == 0) { + this->action = 1; + + this->flags |= 0x80; + + this->spriteSettings.b.ss0 = one; + } +} + +void sub_0803CE14(Entity *this) { + u8 direction; + + sub_080A2CC0(this, &this->attachedEntity, &this->field_0x74); + + direction = this->direction; + if (direction & 0x80) { + return; + } + + direction = direction / 8 + 4; + + InitAnimationForceUpdate(this, direction); +} + +void sub_0803CE3C(Entity *this) { + CreateFx(this, 2, 0); + + this->action = 2; + this->actionDelay = 60; + + this->flags &= 0x7f; + + this->field_0x3a &= 0xfb; + + this->x.HALF.HI = this->field_0x78; + this->y.HALF.HI = this->field_0x7a; + + this->attachedEntity = this->parent; + + sub_0803CE14(this); +} diff --git a/src/mask.c b/src/mask.c index d33f3481..80b952ee 100644 --- a/src/mask.c +++ b/src/mask.c @@ -70,7 +70,7 @@ void sub_080929A4(Entity *this) { this->field_0x7c.HALF.HI = COORD_TO_TILE(this); this->field_0x7c.HALF.LO = sub_080001DA(this->field_0x7c.HALF.HI, 1); - this->itemCooldown = sub_080002E0(this->field_0x7c.HALF.HI, 1); + this->field_0x7a = sub_080002E0(this->field_0x7c.HALF.HI, 1); SetTile(0x4022, this->field_0x7c.HALF.HI, 1); } @@ -98,7 +98,7 @@ void sub_08092A94(Entity *this) { // Presumably, make the mask fall SetTile((u16)this->field_0x7c.HALF.LO, this->field_0x7c.HALF.HI, 1); - sub_08000148(this->itemCooldown, this->field_0x7c.HALF.HI, 1); + sub_08000148(this->field_0x7a, this->field_0x7c.HALF.HI, 1); this->action = 2; diff --git a/src/ocarina.c b/src/ocarina.c index 88fab47b..b4eddddc 100644 --- a/src/ocarina.c +++ b/src/ocarina.c @@ -24,7 +24,7 @@ void Ocarina(ItemBehavior* pItemBeh, u32 inputFlags) // u32 *ocarinaStates = &gOcarinaStates; //_call_via_r2(pItemBeh, inputFlags,(ocarinaStates)[pItemBeh->stateID]); gOcarinaStates[pItemBeh->stateID](pItemBeh, inputFlags); - gLinkEntity.itemCooldown = gLinkEntity.itemCooldown + 1; + gLinkEntity.field_0x7a = gLinkEntity.field_0x7a + 1; } void OcarinaUse(ItemBehavior* itemBeh, s32 inputFlags) { @@ -40,7 +40,7 @@ void OcarinaUse(ItemBehavior* itemBeh, s32 inputFlags) { gLinkEntity.spriteSettings.raw &= var; gLinkEntity.flags &= 127; - gLinkEntity.itemCooldown = 2; + gLinkEntity.field_0x7a = 2; gLinkState.flags.all |= 0x10000000; gLinkState.filler8[0] = 255; gUnk_02034490 = 1; diff --git a/src/zelda.c b/src/zelda.c index 830bbf3e..10cc79cc 100644 --- a/src/zelda.c +++ b/src/zelda.c @@ -94,7 +94,7 @@ void sub_08066D94(Entity* ent) { npc->flags |= 0x20; npc->animationState = sub_0806EDC4(ent); roomID = gRoomControls.roomID; - *(u16*)&npc->heldObjectPtr = roomID; + npc->field_0x74 = roomID; CopyPosition(ent, npc); } DeleteThisEntity(); From 607c32ac5e4164514b63dda5cc5c523a56546b35 Mon Sep 17 00:00:00 2001 From: 21aslade <21aslade@go.dsdmail.net> Date: Wed, 1 Jul 2020 12:03:23 -0600 Subject: [PATCH 02/25] lakitu.c OK Also changed some parts of the entity struct and created trig.h --- asm/lakitu.s | 748 ---------------------------------------------- include/entity.h | 4 +- include/trig.h | 7 + linker.ld | 2 +- src/keese.c | 14 +- src/lakitu.c | 429 ++++++++++++++++++++++++++ src/lakituCloud.c | 4 +- src/mask.c | 4 +- 8 files changed, 450 insertions(+), 762 deletions(-) delete mode 100644 asm/lakitu.s create mode 100644 include/trig.h create mode 100644 src/lakitu.c diff --git a/asm/lakitu.s b/asm/lakitu.s deleted file mode 100644 index 6faceee6..00000000 --- a/asm/lakitu.s +++ /dev/null @@ -1,748 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Lakitu -Lakitu: @ 0x0803C738 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0803C754 @ =gUnk_080D0110 - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_0803C754: .4byte gUnk_080D0110 - - thumb_func_start sub_0803C758 -sub_0803C758: @ 0x0803C758 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0803C76C - cmp r0, #7 - beq _0803C76C - adds r0, r4, #0 - bl sub_0803CAD0 -_0803C76C: - ldr r0, _0803C780 @ =gUnk_080D0128 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_0803C780: .4byte gUnk_080D0128 - - thumb_func_start sub_0803C784 -sub_0803C784: @ 0x0803C784 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x1d - bne _0803C7A2 - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - adds r0, r4, #0 - bl sub_0803CBAC - b _0803C7FA -_0803C7A2: - adds r0, r4, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x43 - bne _0803C7FA - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _0803C7FA - adds r0, r4, #0 - adds r0, #0x3e - ldrb r1, [r0] - movs r0, #0x10 - eors r0, r1 - lsls r1, r0, #3 - ldr r3, _0803C818 @ =gSineTable - lsls r0, r0, #4 - adds r0, r0, r3 - movs r5, #0 - ldrsh r0, [r0, r5] - cmp r0, #0 - bge _0803C7D8 - adds r0, #0x1f -_0803C7D8: - asrs r0, r0, #5 - ldrh r5, [r2, #0x2e] - adds r0, r0, r5 - strh r0, [r2, #0x2e] - adds r0, r1, #0 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r3 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - bge _0803C7F2 - adds r0, #0x1f -_0803C7F2: - asrs r1, r0, #5 - ldrh r0, [r2, #0x32] - subs r0, r0, r1 - strh r0, [r2, #0x32] -_0803C7FA: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0803C80C - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0803C80C: - ldr r1, _0803C81C @ =gUnk_080D0110 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_0803C818: .4byte gSineTable -_0803C81C: .4byte gUnk_080D0110 - - thumb_func_start sub_0803C820 -sub_0803C820: @ 0x0803C820 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - beq _0803C83C - ldr r0, _0803C840 @ =gUnk_080D0148 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0803C83C: - pop {r4, pc} - .align 2, 0 -_0803C840: .4byte gUnk_080D0148 - - thumb_func_start sub_0803C844 -sub_0803C844: @ 0x0803C844 - movs r1, #1 - strb r1, [r0, #0xd] - movs r1, #0x3c - strb r1, [r0, #0x1d] - bx lr - .align 2, 0 - - thumb_func_start sub_0803C850 -sub_0803C850: @ 0x0803C850 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x54] - cmp r0, #0 - beq _0803C864 - adds r1, r2, #0 - adds r1, #0x62 - ldrb r1, [r1] - adds r0, #0x62 - strb r1, [r0] -_0803C864: - adds r0, r2, #0 - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_0803C86C -sub_0803C86C: @ 0x0803C86C - push {r4, lr} - adds r4, r0, #0 - bl sub_0803CBAC - movs r0, #0 - str r0, [r4, #0x54] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803C87C -sub_0803C87C: @ 0x0803C87C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x11 - movs r2, #0 - bl sub_0804A98C - cmp r0, #0 - beq _0803C8B4 - str r4, [r0, #0x50] - str r0, [r4, #0x54] - adds r0, r4, #0 - bl sub_0804A720 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0803C8B8 @ =0x0000FFFE - strh r0, [r4, #0x36] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xff - strb r0, [r1] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x74 - strh r1, [r0] - ldrh r1, [r4, #0x32] - adds r0, #2 - strh r1, [r0] -_0803C8B4: - pop {r4, pc} - .align 2, 0 -_0803C8B8: .4byte 0x0000FFFE - - thumb_func_start sub_0803C8BC -sub_0803C8BC: @ 0x0803C8BC - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - bl sub_0803CA84 - adds r0, r4, #0 - bl sub_0803CA4C - cmp r0, #0 - beq _0803C8E0 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] -_0803C8E0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803C8E4 -sub_0803C8E4: @ 0x0803C8E4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803C914 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x42 - strb r0, [r1] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0803C914: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803C918 -sub_0803C918: @ 0x0803C918 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803CB04 - cmp r0, #0 - bne _0803C94E - adds r0, r4, #0 - bl sub_0803CA4C - cmp r0, #0 - bne _0803C946 - movs r0, #4 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x43 - strb r0, [r1] - ldrb r1, [r4, #0x14] - adds r1, #0xc - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803C94E -_0803C946: - adds r0, r4, #0 - movs r1, #4 - bl sub_0803CA84 -_0803C94E: - pop {r4, pc} - - thumb_func_start sub_0803C950 -sub_0803C950: @ 0x0803C950 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803C97A - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0803C97A: - pop {r4, pc} - - thumb_func_start sub_0803C97C -sub_0803C97C: @ 0x0803C97C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803C9D2 - adds r0, r4, #0 - bl sub_0803CB64 - movs r0, #6 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x42 - strb r0, [r1] - bl Random - movs r1, #1 - ands r0, r1 - adds r2, r4, #0 - adds r2, #0x79 - cmp r0, #0 - beq _0803C9C2 - ldrb r0, [r2] - cmp r0, #0 - bne _0803C9C2 - movs r0, #0xf - strb r0, [r4, #0xe] - strb r1, [r2] - b _0803C9D2 -_0803C9C2: - movs r1, #0 - movs r0, #0x1e - strb r0, [r4, #0xe] - strb r1, [r2] - ldr r0, [r4, #0x54] - ldrb r1, [r4, #0x14] - bl InitAnimationForceUpdate -_0803C9D2: - pop {r4, pc} - - thumb_func_start sub_0803C9D4 -sub_0803C9D4: @ 0x0803C9D4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803CA08 - adds r0, r2, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #1 - bne _0803C9F6 - adds r0, r2, #0 - bl sub_0803CB34 - b _0803CA08 -_0803C9F6: - movs r0, #3 - strb r0, [r2, #0xc] - movs r0, #0xb4 - strb r0, [r2, #0xe] - ldrb r1, [r2, #0x14] - adds r1, #4 - adds r0, r2, #0 - bl InitAnimationForceUpdate -_0803CA08: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803CA0C -sub_0803CA0C: @ 0x0803CA0C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0xc0 - lsls r1, r1, #5 - bl sub_08003FC4 - cmp r0, #0 - bne _0803CA3E - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0x13 - bhi _0803CA3E - ldrb r1, [r4, #0x14] - adds r1, #0x14 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] -_0803CA3E: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0803CC08 - pop {r4, pc} - - thumb_func_start sub_0803CA4C -sub_0803CA4C: @ 0x0803CA4C - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0803CA7C @ =gLinkEntity - movs r0, #0x2e - ldrsh r1, [r4, r0] - movs r0, #0x32 - ldrsh r2, [r4, r0] - adds r0, r5, #0 - movs r3, #0x28 - bl sub_0806FCB8 - cmp r0, #0 - bne _0803CA80 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0x70 - movs r3, #0x50 - bl sub_080041A0 - cmp r0, #0 - beq _0803CA80 - movs r0, #1 - b _0803CA82 - .align 2, 0 -_0803CA7C: .4byte gLinkEntity -_0803CA80: - movs r0, #0 -_0803CA82: - pop {r4, r5, pc} - - thumb_func_start sub_0803CA84 -sub_0803CA84: @ 0x0803CA84 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldr r1, _0803CACC @ =gLinkEntity - bl sub_080045C4 - adds r4, r0, #0 - subs r0, r4, #3 - movs r1, #7 - ands r0, r1 - cmp r0, #2 - bhi _0803CAAA - ldrb r0, [r5, #0x14] - lsrs r1, r4, #3 - subs r0, r0, r1 - movs r1, #3 - ands r0, r1 - cmp r0, #1 - bls _0803CACA -_0803CAAA: - adds r0, r4, #4 - movs r1, #0x18 - ands r0, r1 - lsrs r4, r0, #3 - ldrb r0, [r5, #0x14] - cmp r4, r0 - beq _0803CACA - strb r4, [r5, #0x14] - adds r1, r4, r6 - adds r0, r5, #0 - bl InitAnimationForceUpdate - ldr r0, [r5, #0x54] - adds r1, r4, #0 - bl InitAnimationForceUpdate -_0803CACA: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803CACC: .4byte gLinkEntity - - thumb_func_start sub_0803CAD0 -sub_0803CAD0: @ 0x0803CAD0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x74 - ldrh r1, [r6] - adds r5, r4, #0 - adds r5, #0x76 - ldrh r2, [r5] - movs r3, #1 - bl sub_0806FCB8 - cmp r0, #0 - bne _0803CB02 - movs r1, #0x2e - ldrsh r0, [r4, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r6] - ldrh r3, [r5] - bl sub_080045D4 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_080AEFE0 -_0803CB02: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0803CB04 -sub_0803CB04: @ 0x0803CB04 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - beq _0803CB1A - movs r0, #0 - b _0803CB32 -_0803CB1A: - adds r0, r4, #0 - bl sub_0803CB34 - adds r0, r4, #0 - adds r0, #0x79 - strb r5, [r0] - ldr r0, [r4, #0x54] - ldrb r1, [r4, #0x14] - adds r1, #4 - bl InitAnimationForceUpdate - movs r0, #1 -_0803CB32: - pop {r4, r5, pc} - - thumb_func_start sub_0803CB34 -sub_0803CB34: @ 0x0803CB34 - push {r4, lr} - adds r4, r0, #0 - movs r0, #5 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0xa6 - strb r0, [r1] - ldr r1, _0803CB60 @ =gLinkEntity - adds r0, r4, #0 - bl sub_080045C4 - adds r1, r4, #0 - adds r1, #0x78 - strb r0, [r1] - ldrb r1, [r4, #0x14] - adds r1, #8 - adds r0, r4, #0 - bl InitAnimationForceUpdate - pop {r4, pc} - .align 2, 0 -_0803CB60: .4byte gLinkEntity - - thumb_func_start sub_0803CB64 -sub_0803CB64: @ 0x0803CB64 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0x12 - movs r2, #0 - bl sub_0804A98C - adds r5, r0, #0 - cmp r5, #0 - beq _0803CBA0 - ldrb r1, [r4, #0x14] - lsls r1, r1, #1 - ldr r0, _0803CBA4 @ =gUnk_080D0154 - adds r1, r1, r0 - adds r0, r4, #0 - adds r0, #0x78 - ldrb r0, [r0] - strb r0, [r5, #0x15] - movs r2, #0 - ldrsb r2, [r1, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r1, r3] - lsls r3, r3, #0x10 - adds r0, r4, #0 - adds r1, r5, #0 - bl PositionRelative - ldr r0, _0803CBA8 @ =0x00000193 - bl sub_08004488 -_0803CBA0: - pop {r4, r5, pc} - .align 2, 0 -_0803CBA4: .4byte gUnk_080D0154 -_0803CBA8: .4byte 0x00000193 - - thumb_func_start sub_0803CBAC -sub_0803CBAC: @ 0x0803CBAC - push {lr} - adds r3, r0, #0 - ldr r2, [r3, #0x54] - cmp r2, #0 - beq _0803CBC6 - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x43 - strb r0, [r1] -_0803CBC6: - movs r0, #7 - strb r0, [r3, #0xc] - ldrb r1, [r3, #0x18] - subs r0, #0xb - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r3, #0x18] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r2, #0x12 - ldrb r1, [r2] - movs r0, #0x7b - ands r0, r1 - strb r0, [r2] - adds r1, r3, #0 - adds r1, #0x3f - movs r0, #0x42 - strb r0, [r1] - ldrb r1, [r3, #0x14] - adds r1, #0x10 - adds r0, r3, #0 - bl InitAnimationForceUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803CC08 -sub_0803CC08: @ 0x0803CC08 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x54] - cmp r5, #0 - beq _0803CCB4 - movs r1, #0x36 - ldrsh r0, [r5, r1] - movs r2, #0x36 - ldrsh r1, [r4, r2] - subs r0, r0, r1 - cmp r0, #2 - bhi _0803CCB4 - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _0803CCB4 - movs r0, #0x2e - ldrsh r1, [r5, r0] - movs r0, #0x32 - ldrsh r2, [r5, r0] - adds r0, r4, #0 - movs r3, #6 - bl sub_0806FCB8 - cmp r0, #0 - beq _0803CCB4 - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CC56 - ldrh r0, [r1, #0x2e] - adds r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - adds r0, #6 - strh r0, [r1, #0x32] -_0803CC56: - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CC72 - ldrh r0, [r1, #0x2e] - subs r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - adds r0, #6 - strh r0, [r1, #0x32] -_0803CC72: - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CC8E - ldrh r0, [r1, #0x2e] - adds r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - subs r0, #6 - strh r0, [r1, #0x32] -_0803CC8E: - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CCAA - ldrh r0, [r1, #0x2e] - subs r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - subs r0, #6 - strh r0, [r1, #0x32] -_0803CCAA: - movs r0, #0 - str r0, [r4, #0x54] - adds r0, r5, #0 - bl DeleteEntity -_0803CCB4: - pop {r4, r5, pc} - .align 2, 0 diff --git a/include/entity.h b/include/entity.h index ceab7355..c912c917 100644 --- a/include/entity.h +++ b/include/entity.h @@ -142,8 +142,8 @@ typedef struct Entity { u8 field_0x6d; u8 filler4[6]; u16 field_0x74; - u8 filler5[2]; - u16 field_0x78; + u16 field_0x76; + union SplitHWord field_0x78; u16 field_0x7a; union SplitWord field_0x7c; u16 field_0x80; diff --git a/include/trig.h b/include/trig.h new file mode 100644 index 00000000..0e6e44a9 --- /dev/null +++ b/include/trig.h @@ -0,0 +1,7 @@ +#ifndef TRIG_H +#define TRIG_H + +extern const s16 gSineTable[]; +extern const s16 gCosineTable[]; + +#endif diff --git a/linker.ld b/linker.ld index cab720d2..c8ecad9c 100644 --- a/linker.ld +++ b/linker.ld @@ -394,7 +394,7 @@ SECTIONS { asm/takkuri.o(.text); src/bowMoblin.o(.text); asm/bowMoblin.o(.text); - asm/lakitu.o(.text); + src/lakitu.o(.text); src/lakituCloud.o(.text); asm/enemy49.o(.text); asm/vaatiRebornEnemy.o(.text); diff --git a/src/keese.c b/src/keese.c index 0c846a79..a000ab80 100644 --- a/src/keese.c +++ b/src/keese.c @@ -4,9 +4,9 @@ #include "link.h" extern void sub_0804AA30(Entity*, void *); -extern u32 sub_0806F520(void); +extern u32 sub_0806F520(Entity*); extern void sub_0806F4E8(Entity*); -extern u32 sub_0806F3E4(void); +extern u32 sub_0806F3E4(Entity*); extern void sub_0804A7D4(Entity*); extern void sub_0804A720(Entity*); extern u32 Random(); @@ -45,7 +45,7 @@ void sub_08021d98(Entity *this) void sub_08021DA8(Entity *this) { - if (sub_0806F520()) { + if (sub_0806F520(this)) { gUnk_080CB6C4[this->previousActionFlag](this); } } @@ -62,7 +62,7 @@ void sub_08021DD4(Entity *this) void sub_08021DDC(Entity *this) { - if (sub_0806F3E4()) { + if (sub_0806F3E4(this)) { sub_0804A7D4(this); } } @@ -85,8 +85,8 @@ void sub_08021DF0(Entity *this) void sub_08021E4C(Entity *this) { - if (this->field_0x78 != 0) { - this->field_0x78--; + if (this->field_0x78.HWORD != 0) { + this->field_0x78.HWORD--; } if (this->field_0x7a != 0) { (this->field_0x7a)--; @@ -128,7 +128,7 @@ void sub_08021EF0(Entity *this) u32 uVar1; this->action = 1; - this->field_0x78 = gUnk_080CB6D6[Random() & 0xf]; + this->field_0x78.HWORD = gUnk_080CB6D6[Random() & 0xf]; this->field_0x7a = 0x3c; InitializeAnimation(this, 0); } diff --git a/src/lakitu.c b/src/lakitu.c new file mode 100644 index 00000000..9c7c41d6 --- /dev/null +++ b/src/lakitu.c @@ -0,0 +1,429 @@ +#include "global.h" +#include "entity.h" +#include "trig.h" +#include "random.h" +#include "link.h" + +// Lakitu +extern void EnemyFunctionHandler(Entity *, void (*const funcs[])(Entity*)); +extern void SetChildOffset(Entity *, u32, u32, u32); + +// sub_0803C758 +extern void sub_0803CAD0(Entity *); + +// sub_0803C784 +extern void sub_0803CBAC(Entity *); // Also used in sub_0803C86C +extern Entity *CreateFx(Entity*, u32, u32); +extern void sub_0804A9FC(Entity *, u32); +extern void sub_0804AA30(Entity *, void (*const funcs[])(Entity *)); + +// sub_0803C820 +extern u32 sub_0806F520(Entity *); + +// sub_0803C850 +extern void sub_0806F4E8(Entity *); + +// sub_0803C87C +extern Entity *sub_0804A98C(Entity *, u32, u32); +extern void sub_0804A720(Entity *); + +// sub_0803C8BC and sub_0803C918 +extern void sub_0803CA84(Entity *, u32); +extern bool32 sub_0803CA4C(Entity *); + +// Many functions +extern void UpdateAnimationSingleFrame(Entity *); +extern void InitAnimationForceUpdate(Entity *, u32); + +// sub_0803C918 +extern u32 sub_0803CB04(Entity *); + +// sub_0803C97C +extern void sub_0803CB64(Entity *); + +// sub_0803C9D4 and sub_0803CB04 +extern void sub_0803CB34(Entity *); + +// sub_0803CA0C +extern u32 sub_08003FC4(Entity *, u32); +extern void sub_0803CC08(Entity *this); + +// sub_0803CA4C +extern u32 sub_0806FCB8(Entity *, u32, u32, u32); +extern u32 sub_080041A0(Entity *, Entity *, u32, u32); + +// sub_0803CA84 +extern u32 sub_080045C4(Entity *, Entity *); + +// sub_0803CAD0 +extern u8 sub_080045D4(s16, s16, u16, u16); +extern void sub_080AEFE0(Entity *); + +// sub_0803CB64 +extern void PositionRelative(Entity *, Entity *, u32, u32); +extern void sub_08004488(u32); + +typedef struct { + s8 x; + s8 y; +} PACKED OffsetCoords; + +// sub_0803CC08 +extern void DeleteEntity(Entity *); + +// Variables +extern void (*const gUnk_080D0110[])(Entity *); +extern void (*const gUnk_080D0128[])(Entity *); +extern void (*const gUnk_080D0148[])(Entity *); +extern const OffsetCoords gUnk_080D0154[]; + +void Lakitu(Entity *this) { + EnemyFunctionHandler(this, gUnk_080D0110); + + SetChildOffset(this, 0, 1, -16); +} + +void sub_0803C758(Entity *this) { + if (this->action != 0 && this->action != 7) { + sub_0803CAD0(this); + } + + gUnk_080D0128[this->action](this); +} + +void sub_0803C784(Entity *this) { + if ((this->bitfield & 0x7f) == 0x1d) { + this->field_0x20 = 0x20000; + + sub_0803CBAC(this); + } + else { + if (this->damageType == 0x43) { + Entity *sound = CreateFx(this, 2, 0); + + if (sound != 0) { + u32 angle = (this->field_0x3e ^ 0x10) << 3; + s32 sine; + + sine = gSineTable[angle]; + if (sine < 0) { + sine += 0x1f; + } + + sound->x.HALF.HI += sine >> 5; + + sine = gSineTable[angle + 0x40]; + if (sine < 0) { + sine += 0x1f; + } + + sound->y.HALF.HI -= sine >> 5; + } + } + } + + if (this->field_0x43) { + sub_0804A9FC(this, 0x1c); + } + + sub_0804AA30(this, gUnk_080D0110); +} + +void sub_0803C820(Entity *this) { + if (sub_0806F520(this)) { + gUnk_080D0148[this->previousActionFlag](this); + } +} + +void sub_0803C844(Entity *this) { + this->previousActionFlag = 1; + this->field_0x1d = 0x3c; +} + +void sub_0803C850(Entity *this) { + Entity *cloud = this->attachedEntity; + if (cloud != 0) { + cloud->spriteOffsetX = this->spriteOffsetX; + } + + sub_0806F4E8(this); +} + +void sub_0803C86C(Entity *this) { + sub_0803CBAC(this); + this->attachedEntity = 0; +} + +void sub_0803C87C(Entity *this) { + Entity *cloud = sub_0804A98C(this, 17, 0); + if (cloud == 0) { + return; + } + + cloud->parent = this; + this->attachedEntity = cloud; + + sub_0804A720(this); + + this->action = 1; + + this->height.HALF.HI = -2; + + this->spriteOffsetY = 0xff; + + this->field_0x74 = this->x.HALF.HI; + this->field_0x76 = this->y.HALF.HI; +} + +void sub_0803C8BC(Entity *this) { + sub_0803CA84(this, 0); + + if (sub_0803CA4C(this)) { + this->action = 2; + this->spriteSettings.b.ss0 = 1; + } +} + +void sub_0803C8E4(Entity *this) { + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3) { + this->action = 3; + this->actionDelay = 0x3c; + + this->damageType = 0x42; + + InitAnimationForceUpdate(this, this->animationState + 4); + } +} + +void sub_0803C918(Entity *this) { + if (sub_0803CB04(this) != 0) { + return; + } + + if (sub_0803CA4C(this) == 0) { + this->action = 4; + + this->damageType = 0x43; + InitAnimationForceUpdate(this, this->animationState + 0xc); + } + else { + sub_0803CA84(this, 4); + } +} + +void sub_0803C950(Entity *this) { + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3 != 0) { + this->action = 1; + this->spriteSettings.b.ss0 = 0; + + InitAnimationForceUpdate(this, this->animationState); + } +} + +void sub_0803C97C(Entity *this) { + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3 == 0) { + return; + } + + sub_0803CB64(this); + this->action = 6; + this->damageType = 0x42; + + + if ((Random() & 1) && this->field_0x78.HALF.HI == 0) { + this->actionDelay = 0xf; + this->field_0x78.HALF.HI = 1; + } + else { + this->actionDelay = 0x1e; + this->field_0x78.HALF.HI = 0; + + InitAnimationForceUpdate(this->attachedEntity, this->animationState); + } +} + +void sub_0803C9D4(Entity *this) { + this->actionDelay--; + + if (this->actionDelay != 0) { + return; + } + + if (this->field_0x78.HALF.HI == 1) { + sub_0803CB34(this); + } + else { + this->action = 3; + this->actionDelay = 0xb4; + + InitAnimationForceUpdate(this, this->animationState + 4); + } +} + +void sub_0803CA0C(Entity *this) { + if (sub_08003FC4(this, 0x1800) == 0 && this->animIndex <= 19) { + InitAnimationForceUpdate(this, this->animationState + 20); + + this->ticks.b1 = 0; + } + + UpdateAnimationSingleFrame(this); + sub_0803CC08(this); +} + +bool32 sub_0803CA4C(Entity *this) { + if (sub_0806FCB8(this, gLinkEntity.x.HALF.HI, gLinkEntity.y.HALF.HI, 0x28) == 0) { + if (sub_080041A0(this, &gLinkEntity, 0x70, 0x50)) { + return 1; + } + } + + return 0; +} + +void sub_0803CA84(Entity *this, u32 unkParameter) { + u32 altAnimState = sub_080045C4(this, &gLinkEntity); + + if (((altAnimState - 3) & 7) > 2 || ((this->animationState - (altAnimState >> 3)) & 3) > 1) { + u32 intermediate = (altAnimState + 4) & 0x18; + altAnimState = intermediate >> 3; + + if (altAnimState != this->animationState) { + this->animationState = altAnimState; + + InitAnimationForceUpdate(this, altAnimState + unkParameter); + InitAnimationForceUpdate(this->attachedEntity, altAnimState); + } + } +} + +void sub_0803CAD0(Entity *this) { + if (sub_0806FCB8(this, this->field_0x74, this->field_0x76, 1) == 0) { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74, this->field_0x76); + + sub_080AEFE0(this); + } +} + +bool32 sub_0803CB04(Entity *this) { + bool32 returnValue; + u8 delay; + + delay = --this->actionDelay; + if (delay != 0) { + returnValue = 0; + } + else { + sub_0803CB34(this); + this->field_0x78.HALF.HI = delay; + + InitAnimationForceUpdate(this->attachedEntity, this->animationState + 4); + returnValue = 1; + } + + return returnValue; +} + +void sub_0803CB34(Entity *this) { + this->action = 5; + this->damageType = 0xa6; + + this->field_0x78.HALF.LO = sub_080045C4(this, &gLinkEntity); + + InitAnimationForceUpdate(this, this->animationState + 8); +} + +void sub_0803CB64(Entity *this) { + Entity *cloud; + const OffsetCoords *offset; + + cloud = sub_0804A98C(this, 18, 0); + + if (cloud == 0) { + return; + } + + offset = &gUnk_080D0154[this->animationState]; + + cloud->direction = this->field_0x78.HALF.LO; + + PositionRelative(this, cloud, offset->x << 16, offset->y << 16); + + sub_08004488(0x193); +} + +void sub_0803CBAC(Entity *this) { + Entity *cloud; + + cloud = this->attachedEntity; + if (cloud != 0) { + cloud->flags |= 0x80; + cloud->damageType = 0x43; + } + + this->action = 7; + this->spriteSettings.b.ss0 = 1; + + this->ticks.b1 = 1; + + this->flags2 &= 0x7b; + + this->damageType = 0x42; + + InitAnimationForceUpdate(this, this->animationState + 16); +} + +void sub_0803CC08(Entity *this) { + Entity *cloud; + Entity *sound; + + cloud = this->attachedEntity; + if (cloud == 0) { + return; + } + + if ((u32)(cloud->height.HALF.HI - this->height.HALF.HI) > 2) { + return; + } + + if (this->field_0x20 >= 0) { + return; + } + + if (!sub_0806FCB8(this, cloud->x.HALF.HI, cloud->y.HALF.HI, 6)) { + return; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI += 6; + sound->y.HALF.HI += 6; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI -= 6; + sound->y.HALF.HI += 6; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI += 6; + sound->y.HALF.HI -= 6; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI -= 6; + sound->y.HALF.HI -= 6; + } + + this->attachedEntity = 0; + DeleteEntity(cloud); +} \ No newline at end of file diff --git a/src/lakituCloud.c b/src/lakituCloud.c index 36489ad5..9932b662 100644 --- a/src/lakituCloud.c +++ b/src/lakituCloud.c @@ -82,7 +82,7 @@ void sub_0803CD6C(Entity *this) { this->attachedEntity = lakitu; this->parent = lakitu; - this->field_0x78 = this->x.HALF.HI; + this->field_0x78.HWORD = this->x.HALF.HI; this->field_0x7a = this->y.HALF.HI; InitAnimationForceUpdate(this, 4); @@ -146,7 +146,7 @@ void sub_0803CE3C(Entity *this) { this->field_0x3a &= 0xfb; - this->x.HALF.HI = this->field_0x78; + this->x.HALF.HI = this->field_0x78.HWORD; this->y.HALF.HI = this->field_0x7a; this->attachedEntity = this->parent; diff --git a/src/mask.c b/src/mask.c index 80b952ee..bb867761 100644 --- a/src/mask.c +++ b/src/mask.c @@ -60,7 +60,7 @@ void sub_080929A4(Entity *this) { this->action = 1; this->field_0x20 = 0x18000; - this->field_0x78 = ((Random() & 7) << 10) | 0x2000; + this->field_0x78.HWORD = ((Random() & 7) << 10) | 0x2000; this->field_0xf = this->actionDelay >> 1; this->actionDelay = 0; @@ -129,7 +129,7 @@ void sub_08092B0C(Entity *this) { sub_0805457C(this, 3); } else { - sub_080044EC(this, this->field_0x78); + sub_080044EC(this, this->field_0x78.HWORD); if (this->height.HALF.HI == 0) { this->actionDelay++; From d21a0afec2170f4dfd1e787c50018c6c20591b6e Mon Sep 17 00:00:00 2001 From: 21aslade <21aslade@go.dsdmail.net> Date: Wed, 1 Jul 2020 12:13:36 -0600 Subject: [PATCH 03/25] wheaton.c OK --- asm/wheaton.s | 38 -------------------------------------- linker.ld | 2 +- src/wheaton.c | 26 ++++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 39 deletions(-) delete mode 100644 asm/wheaton.s create mode 100644 src/wheaton.c diff --git a/asm/wheaton.s b/asm/wheaton.s deleted file mode 100644 index b19406ba..00000000 --- a/asm/wheaton.s +++ /dev/null @@ -1,38 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Wheaton -Wheaton: @ 0x08062E20 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08062E50 - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - adds r1, r4, #0 - bl ResolveEntityOnTop - ldr r0, _08062E5C @ =gUnk_0810C3C0 - str r0, [r4, #0x48] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xfe - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807DD64 -_08062E50: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - pop {r4, pc} - .align 2, 0 -_08062E5C: .4byte gUnk_0810C3C0 diff --git a/linker.ld b/linker.ld index c8ecad9c..6bf92f3e 100644 --- a/linker.ld +++ b/linker.ld @@ -535,7 +535,7 @@ SECTIONS { asm/npc9.o(.text); src/stamp.o(.text); asm/marcy.o(.text); - asm/wheaton.o(.text); + src/wheaton.o(.text); asm/pita.o(.text); asm/minishEzlo.o(.text); src/mailbox.o(.text); diff --git a/src/wheaton.c b/src/wheaton.c new file mode 100644 index 00000000..06285482 --- /dev/null +++ b/src/wheaton.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "entity.h" + +extern void sub_0805E3A0(Entity *, u32); +extern void ResolveEntityOnTop(Entity *, Entity *); +extern BoundingBox gUnk_0810C3C0; +extern void sub_0807DD64(Entity *); +extern void sub_0807DD94(Entity *, u32); + +void Wheaton(Entity *this) { + if (this->action == 0) { + this->action++; + + sub_0805E3A0(this, 2); + + ResolveEntityOnTop(this, this); + + this->boundingBox = &gUnk_0810C3C0; + + this->spriteOffsetY = 0xfe; + + sub_0807DD64(this); + } + + sub_0807DD94(this, 0); +} \ No newline at end of file From 05a5fa0a28b5d479902b658bd5b6c6c7fc01015b Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 1 Jul 2020 15:13:27 -0700 Subject: [PATCH 04/25] miniFireballGuy.c --- .gitignore | 9 +++ asm/blockPushed.s | 2 +- asm/businessScrub.s | 2 +- asm/castorWildsStatue.s | 2 +- asm/chuchuBoss.s | 4 +- asm/code_08049CD4.s | 2 +- asm/code_0806EC20.s | 2 +- asm/code_080A5574.s | 2 +- asm/code_080AD90C.s | 4 +- asm/lockedDoor.s | 2 +- asm/miniFireballGuy.s | 112 -------------------------------------- asm/minishSizedEntrance.s | 47 ---------------- asm/object3D.s | 2 +- asm/object91.s | 4 +- asm/octorokBoss.s | 4 +- asm/pushableStatue.s | 2 +- asm/rupeeLike.s | 2 +- asm/sub_080A285C.s | 2 +- asm/vaatiWrath.s | 2 +- asm/waterfallOpening.s | 4 +- linker.ld | 2 + src/miniFireballGuy.c | 63 +++++++++++++++++++++ src/minishSizedEntrance.c | 27 +++++++++ 23 files changed, 123 insertions(+), 181 deletions(-) create mode 100644 src/miniFireballGuy.c create mode 100644 src/minishSizedEntrance.c diff --git a/.gitignore b/.gitignore index 99612c35..babe0b21 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,15 @@ *.swp *.til *.code-workspace +*.ss1 +*.ss2 +*.ss3 +*.ss4 +*.ss5 +*.ss6 +*.ss7 +*.ss8 +*.ss9 .fuse_hidden* .idea/ Thumbs.db diff --git a/asm/blockPushed.s b/asm/blockPushed.s index a0bdb72d..35455994 100644 --- a/asm/blockPushed.s +++ b/asm/blockPushed.s @@ -33,7 +33,7 @@ sub_08082EB4: @ 0x08082EB4 bl sub_080AE068 ldr r1, _08082EE4 @ =0x000001C1 adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX cmp r0, #0 bne _08082EE8 ldrb r1, [r4, #0x18] diff --git a/asm/businessScrub.s b/asm/businessScrub.s index 52fb0065..097ed9f3 100644 --- a/asm/businessScrub.s +++ b/asm/businessScrub.s @@ -989,7 +989,7 @@ sub_08029078: @ 0x08029078 strb r0, [r2] adds r0, r4, #0 movs r1, #0x72 - bl sub_080ADF80 + bl LoadFixedGFX cmp r0, #0 bne _080290AE adds r0, r4, #0 diff --git a/asm/castorWildsStatue.s b/asm/castorWildsStatue.s index c8645281..a1e005b6 100644 --- a/asm/castorWildsStatue.s +++ b/asm/castorWildsStatue.s @@ -302,7 +302,7 @@ _080675BC: adds r1, r1, r0 ldr r1, [r1] adds r0, r2, #0 - bl sub_080ADF80 + bl LoadFixedGFX _080675CC: pop {pc} .align 2, 0 diff --git a/asm/chuchuBoss.s b/asm/chuchuBoss.s index 8313d95f..fca83811 100644 --- a/asm/chuchuBoss.s +++ b/asm/chuchuBoss.s @@ -1944,7 +1944,7 @@ _08026B2C: strh r0, [r4, #0x2e] adds r0, r4, #0 movs r1, #0x3e - bl sub_080ADF80 + bl LoadFixedGFX ldrb r0, [r6, #0xb] cmp r0, #0 bne _08026B46 @@ -4338,7 +4338,7 @@ sub_08027D20: @ 0x08027D20 strb r0, [r1] adds r0, r4, #0 movs r1, #0x3e - bl sub_080ADF80 + bl LoadFixedGFX ldrb r0, [r5, #0xb] cmp r0, #0 bne _08027D5E diff --git a/asm/code_08049CD4.s b/asm/code_08049CD4.s index a0177b4f..7322d820 100644 --- a/asm/code_08049CD4.s +++ b/asm/code_08049CD4.s @@ -1394,7 +1394,7 @@ _0804A6E8: _0804A702: ldrh r1, [r5] adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _0804A70A: cmp r0, #0 bne _0804A712 diff --git a/asm/code_0806EC20.s b/asm/code_0806EC20.s index d8923c6d..8e3fbf72 100644 --- a/asm/code_0806EC20.s +++ b/asm/code_0806EC20.s @@ -103,7 +103,7 @@ _0806ECC0: b _0806ECD0 _0806ECCA: adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _0806ECD0: ldrh r0, [r5, #4] lsls r0, r0, #0x16 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 9afcfc03..2d31c5f7 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -5247,7 +5247,7 @@ _080A7E78: _080A7E92: ldrh r1, [r5] adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _080A7E9A: cmp r0, #0 bne _080A7EA2 diff --git a/asm/code_080AD90C.s b/asm/code_080AD90C.s index bda412ec..194d7acc 100644 --- a/asm/code_080AD90C.s +++ b/asm/code_080AD90C.s @@ -867,8 +867,8 @@ _080ADF7C: pop {r4, r5, r6, pc} .align 2, 0 - thumb_func_start sub_080ADF80 -sub_080ADF80: @ 0x080ADF80 + thumb_func_start LoadFixedGFX +LoadFixedGFX: @ 0x080ADF80 push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} diff --git a/asm/lockedDoor.s b/asm/lockedDoor.s index 7ec6d88c..aad7a891 100644 --- a/asm/lockedDoor.s +++ b/asm/lockedDoor.s @@ -674,7 +674,7 @@ _080837FC: _08083808: adds r0, r4, #0 adds r1, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX pop {r4, r5, pc} .align 2, 0 diff --git a/asm/miniFireballGuy.s b/asm/miniFireballGuy.s index 2bd4a5ca..d72b24f6 100644 --- a/asm/miniFireballGuy.s +++ b/asm/miniFireballGuy.s @@ -6,118 +6,6 @@ .text - - thumb_func_start MiniFireballGuy -MiniFireballGuy: @ 0x080455AC - push {lr} - ldr r1, _080455B8 @ =gUnk_080D1868 - bl EnemyFunctionHandler - pop {pc} - .align 2, 0 -_080455B8: .4byte gUnk_080D1868 - - thumb_func_start sub_080455BC -sub_080455BC: @ 0x080455BC - push {lr} - ldr r2, _080455D0 @ =gUnk_080D1880 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080455D0: .4byte gUnk_080D1880 - - thumb_func_start sub_080455D4 -sub_080455D4: @ 0x080455D4 - push {lr} - ldr r1, _080455E0 @ =gUnk_080D1868 - bl sub_0804AA30 - pop {pc} - .align 2, 0 -_080455E0: .4byte gUnk_080D1868 - - thumb_func_start sub_080455E4 -sub_080455E4: @ 0x080455E4 - push {lr} - adds r3, r0, #0 - ldr r0, [r3, #0x50] - cmp r3, r0 - beq _0804560A - cmp r0, #0 - beq _0804560A - adds r2, r3, #0 - adds r2, #0x6c - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] - ldr r1, [r3, #0x50] - ldr r0, [r3, #0x54] - str r0, [r1, #0x54] - ldr r1, [r3, #0x54] - ldr r0, [r3, #0x50] - str r0, [r1, #0x50] -_0804560A: - adds r0, r3, #0 - bl sub_0804A7D4 - pop {pc} - .align 2, 0 - - thumb_func_start nullsub_23 -nullsub_23: @ 0x08045614 - bx lr - .align 2, 0 - - thumb_func_start sub_08045618 -sub_08045618: @ 0x08045618 - push {r4, lr} - adds r4, r0, #0 - 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] - movs r0, #0x80 - strh r0, [r4, #0x24] - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0x10 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_0804A720 - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08045678 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08045654 -sub_08045654: @ 0x08045654 - push {r4, lr} - adds r4, r0, #0 - bl sub_080AEFE0 - adds r0, r4, #0 - bl GetNextFrame - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08045676 - adds r0, r4, #0 - bl sub_08045678 -_08045676: - pop {r4, pc} - thumb_func_start sub_08045678 sub_08045678: @ 0x08045678 push {r4, r5, lr} diff --git a/asm/minishSizedEntrance.s b/asm/minishSizedEntrance.s index c6c4a2dd..c0c3e93d 100644 --- a/asm/minishSizedEntrance.s +++ b/asm/minishSizedEntrance.s @@ -6,53 +6,6 @@ .text - - thumb_func_start MinishSizedEntrance -MinishSizedEntrance: @ 0x08090EA8 - push {lr} - ldr r2, _08090EBC @ =gUnk_08122254 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08090EBC: .4byte gUnk_08122254 - - thumb_func_start sub_08090EC0 -sub_08090EC0: @ 0x08090EC0 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, #0xb] - strb r0, [r4, #0x1e] - bl CheckIsDungeon - cmp r0, #0 - beq _08090EFE - ldrb r0, [r4, #0x1e] - adds r0, #4 - strb r0, [r4, #0x1e] - adds r0, r4, #0 - bl sub_080AE068 - movs r1, #0xc2 - lsls r1, r1, #1 - adds r0, r4, #0 - bl sub_080ADF80 -_08090EFE: - pop {r4, pc} - thumb_func_start sub_08090F00 sub_08090F00: @ 0x08090F00 push {r4, r5, r6, lr} diff --git a/asm/object3D.s b/asm/object3D.s index 492dedef..d7a2278d 100644 --- a/asm/object3D.s +++ b/asm/object3D.s @@ -101,7 +101,7 @@ _0808CF82: adds r4, r4, r0 ldrh r1, [r4] adds r0, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX ldrh r1, [r4, #2] adds r0, r5, #0 bl sub_0801D040 diff --git a/asm/object91.s b/asm/object91.s index 008e64b7..bbd0f8a0 100644 --- a/asm/object91.s +++ b/asm/object91.s @@ -735,10 +735,10 @@ _0809C948: ldr r4, _0809C984 @ =0x00000115 adds r0, r5, #0 adds r1, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX ldr r0, [r5, #0x50] adds r1, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX adds r0, r5, #0 movs r1, #0xef bl sub_0801D2B4 diff --git a/asm/octorokBoss.s b/asm/octorokBoss.s index 71bfb19c..b62b5d36 100644 --- a/asm/octorokBoss.s +++ b/asm/octorokBoss.s @@ -373,7 +373,7 @@ _08035456: movs r1, #0x84 lsls r1, r1, #1 adds r0, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX adds r0, r5, #0 movs r1, #0xef bl sub_0801D2B4 @@ -395,7 +395,7 @@ _080354B0: strb r0, [r1] ldr r1, _080354F4 @ =0x00000109 adds r0, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX adds r0, r5, #0 movs r1, #0xf0 bl sub_0801D2B4 diff --git a/asm/pushableStatue.s b/asm/pushableStatue.s index 7eb66914..370a535f 100644 --- a/asm/pushableStatue.s +++ b/asm/pushableStatue.s @@ -619,7 +619,7 @@ _08089680: adds r0, r2, #0 movs r1, #0xe9 _08089684: - bl sub_080ADF80 + bl LoadFixedGFX pop {pc} .align 2, 0 diff --git a/asm/rupeeLike.s b/asm/rupeeLike.s index 7f5d113c..4375db40 100644 --- a/asm/rupeeLike.s +++ b/asm/rupeeLike.s @@ -644,7 +644,7 @@ sub_08029770: @ 0x08029770 push {r4, lr} adds r4, r0, #0 movs r1, #0x73 - bl sub_080ADF80 + bl LoadFixedGFX cmp r0, #0 beq _080297E8 movs r0, #2 diff --git a/asm/sub_080A285C.s b/asm/sub_080A285C.s index f9d7809d..f5c4e16c 100644 --- a/asm/sub_080A285C.s +++ b/asm/sub_080A285C.s @@ -65,7 +65,7 @@ _080A28BA: b _080A28CA _080A28C4: adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _080A28CA: cmp r0, #0 bne _080A28D2 diff --git a/asm/vaatiWrath.s b/asm/vaatiWrath.s index 33c203f7..ec525e45 100644 --- a/asm/vaatiWrath.s +++ b/asm/vaatiWrath.s @@ -1159,7 +1159,7 @@ sub_08041BE8: @ 0x08041BE8 bl sub_080AE068 ldr r1, _08041CC0 @ =0x000001F5 adds r0, r7, #0 - bl sub_080ADF80 + bl LoadFixedGFX ldr r1, _08041CC4 @ =0x0000016B adds r0, r7, #0 bl sub_0801D2B4 diff --git a/asm/waterfallOpening.s b/asm/waterfallOpening.s index 6d5447c9..c1743e43 100644 --- a/asm/waterfallOpening.s +++ b/asm/waterfallOpening.s @@ -82,7 +82,7 @@ _0809FFCE: movs r1, #0xc6 lsls r1, r1, #1 adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX movs r0, #0xf6 bl PlaySFX b _080A005A @@ -105,7 +105,7 @@ _080A0006: bl sub_080AE068 ldr r1, _080A0034 @ =0x0000018D adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX b _080A005A .align 2, 0 _080A0034: .4byte 0x0000018D diff --git a/linker.ld b/linker.ld index e667b817..d03fabb5 100644 --- a/linker.ld +++ b/linker.ld @@ -412,6 +412,7 @@ SECTIONS { asm/slime.o(.text); asm/miniSlime.o(.text); asm/fireballGuy.o(.text); + src/miniFireballGuy.o(.text); asm/miniFireballGuy.o(.text); asm/enemy5A.o(.text); asm/businessScrubPrologue.o(.text); @@ -731,6 +732,7 @@ SECTIONS { asm/object4B.o(.text); asm/pushableFurniture.o(.text); asm/furniture.o(.text); + src/minishSizedEntrance.o(.text); asm/minishSizedEntrance.o(.text); asm/archway.o(.text); asm/giantRock.o(.text); diff --git a/src/miniFireballGuy.c b/src/miniFireballGuy.c new file mode 100644 index 00000000..bb9ea593 --- /dev/null +++ b/src/miniFireballGuy.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "entity.h" + +extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*)); +extern void sub_0804AA30(Entity*, void (*const func[][])(Entity*)); +extern void sub_0804A7D4(Entity*); +extern void sub_0804A720(Entity*); +extern void InitializeAnimation(Entity*, u32); +extern void sub_08045678(Entity*); +extern void sub_080AEFE0(void); +extern void GetNextFrame(Entity*); +extern u32 sub_08003FC4(Entity*, u32); +extern void sub_08045678(Entity*); + +extern void (*const gUnk_080D1868[])(Entity*); +extern void (*const gUnk_080D1880[])(Entity*); + +void MiniFireballGuy(Entity *this) +{ + EnemyFunctionHandler(this, gUnk_080D1868); +} + +void sub_080455BC(Entity *this) +{ + gUnk_080D1880[this->action](this); +} + +void sub_080455D4(Entity *this) +{ + sub_0804AA30(this, &gUnk_080D1868); +} + +void sub_080455E4(Entity *this) +{ + if ((this != this->parent) && (this->parent != NULL)) { + this->field_0x6c = this->field_0x6c & 0x7f; + this->parent->attachedEntity = this->attachedEntity; + this->attachedEntity->parent = this->parent; + } + sub_0804A7D4(this); +} + +void nullsub_23(Entity* this) {} + +void sub_08045618(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.ss0 = 1; + this->nonPlanarMovement = 0x80; + this->field_0x3c = this->field_0x3c | 0x10; + sub_0804A720(this); + InitializeAnimation(this, 1); + sub_08045678(this); +} + +void sub_08045654(Entity *this) +{ + sub_080AEFE0(); + GetNextFrame(this); + if (sub_08003FC4(this, 0x1800) == 0) { + sub_08045678(this); + } +} \ No newline at end of file diff --git a/src/minishSizedEntrance.c b/src/minishSizedEntrance.c new file mode 100644 index 00000000..10ad0113 --- /dev/null +++ b/src/minishSizedEntrance.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "entity.h" + +extern u32 Random(); +extern bool32 CheckIsDungeon(); +extern void sub_080AE068(Entity*); +extern void LoadFixedGFX(Entity*, u32); + +extern void (*const gUnk_08122254[])(Entity*); + +void MinishSizedEntrance(Entity* this) +{ + gUnk_08122254[this->action](this); +} + +void sub_08090EC0(Entity *this) +{ + this->action = 1; + this->spriteOrder.b3 = 3; + this->ticks.b0 = 7; + this->frameIndex = (this->entityType).parameter; + if (CheckIsDungeon()) { + this->frameIndex += 4; + sub_080AE068(this); + LoadFixedGFX(this, 0x184); + } +} From c5897e647cd3a1591f495ff1b20ec5d711f63c12 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 6 Jul 2020 13:56:19 -0700 Subject: [PATCH 05/25] lightableSwitch OK --- asm/armos.s | 2 +- asm/bombarossa.s | 2 +- asm/chestSpawner.s | 2 +- asm/code_08019444.s | 2 +- asm/code_0804AEB0.s | 2 +- asm/code_0804B058.s | 4 +- asm/code_080A5574.s | 2 +- asm/enemy50.s | 2 +- asm/floatingPlatform.s | 2 +- asm/houseDoorExterior.s | 2 +- asm/lavaPlatform.s | 2 +- asm/lightableSwitch.s | 321 -------------------------------------- asm/lilypadSmall.s | 2 +- asm/manager1.s | 2 +- asm/manager16.s | 4 +- asm/manager21.s | 2 +- asm/manager26.s | 2 +- asm/manager28.s | 2 +- asm/manager2A.s | 2 +- asm/manager2B.s | 2 +- asm/manager38.s | 2 +- asm/manager6.s | 4 +- asm/managerB.s | 2 +- asm/managerD.s | 2 +- asm/managerE.s | 2 +- asm/minishSizedEntrance.s | 2 +- asm/object89.s | 4 +- asm/object98.s | 2 +- asm/postman.s | 2 +- asm/smallIceBlock.s | 2 +- asm/wizzrobeWind.s | 2 +- include/functions.h | 6 +- linker.ld | 2 +- src/bladeTrap.c | 4 +- src/lakituCloud.c | 4 +- src/lightableSwitch.c | 145 +++++++++++++++++ src/loadRoom.c | 10 +- src/sub_0804AFF4.c | 10 +- 38 files changed, 197 insertions(+), 373 deletions(-) delete mode 100644 asm/lightableSwitch.s create mode 100644 src/lightableSwitch.c diff --git a/asm/armos.s b/asm/armos.s index 7d5bd0fd..31a0c733 100644 --- a/asm/armos.s +++ b/asm/armos.s @@ -163,7 +163,7 @@ _080302BA: ldrb r0, [r4, #0xb] cmp r0, #0 beq _080302C6 - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r4, #0x7c] _080302C6: adds r0, r4, #0 diff --git a/asm/bombarossa.s b/asm/bombarossa.s index ac7c0f55..d368a07e 100644 --- a/asm/bombarossa.s +++ b/asm/bombarossa.s @@ -41,7 +41,7 @@ sub_080333D4: @ 0x080333D4 ldrb r0, [r4, #0xa] cmp r0, #0 beq _0803340E - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r4, #0x54] adds r1, r4, #0 adds r1, #0x54 diff --git a/asm/chestSpawner.s b/asm/chestSpawner.s index 8c30c704..bed7ffa9 100644 --- a/asm/chestSpawner.s +++ b/asm/chestSpawner.s @@ -291,7 +291,7 @@ sub_08084074: @ 0x08084074 push {r4, lr} adds r4, r0, #0 movs r0, #3 - bl sub_0804B128 + bl GetCurrentRoomProperty adds r1, r0, #0 cmp r1, #0 beq _080840A4 diff --git a/asm/code_08019444.s b/asm/code_08019444.s index 49dbad0a..9ea73655 100644 --- a/asm/code_08019444.s +++ b/asm/code_08019444.s @@ -3472,7 +3472,7 @@ _0801AE70: bl sub_0805BB74 _0801AE8C: movs r0, #5 - bl sub_0804B128 + bl GetCurrentRoomProperty cmp r0, #0 beq _0801AE9A bl _call_via_r0 diff --git a/asm/code_0804AEB0.s b/asm/code_0804AEB0.s index 420cc420..2c4fdb3b 100644 --- a/asm/code_0804AEB0.s +++ b/asm/code_0804AEB0.s @@ -169,7 +169,7 @@ sub_0804AFDC: @ 0x0804AFDC push {r4, lr} movs r4, #1 movs r0, #6 - bl sub_0804B128 + bl GetCurrentRoomProperty cmp r0, #0 beq _0804AFF0 bl _call_via_r0 diff --git a/asm/code_0804B058.s b/asm/code_0804B058.s index 008d524d..9df89063 100644 --- a/asm/code_0804B058.s +++ b/asm/code_0804B058.s @@ -120,8 +120,8 @@ _0804B120: .align 2, 0 _0804B124: .4byte gUnk_080D50FC - thumb_func_start sub_0804B128 -sub_0804B128: @ 0x0804B128 + thumb_func_start GetCurrentRoomProperty +GetCurrentRoomProperty: @ 0x0804B128 push {lr} adds r2, r0, #0 ldr r0, _0804B138 @ =gUnk_02017654 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 2d31c5f7..11d92150 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -5029,7 +5029,7 @@ sub_080A7CFC: @ 0x080A7CFC lsls r4, r4, #3 movs r6, #0 movs r0, #3 - bl sub_0804B128 + bl GetCurrentRoomProperty adds r1, r0, #0 cmp r1, #0 beq _080A7D38 diff --git a/asm/enemy50.s b/asm/enemy50.s index fa86ee59..74f04c95 100644 --- a/asm/enemy50.s +++ b/asm/enemy50.s @@ -440,7 +440,7 @@ sub_08040E3C: @ 0x08040E3C bne _08040E86 strb r5, [r4, #0xc] ldrb r0, [r4, #0xe] - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r4, #0x54] b _08040E8C _08040E86: diff --git a/asm/floatingPlatform.s b/asm/floatingPlatform.s index 398b9268..7d1c24eb 100644 --- a/asm/floatingPlatform.s +++ b/asm/floatingPlatform.s @@ -44,7 +44,7 @@ sub_080860D8: @ 0x080860D8 orrs r0, r1 strb r0, [r2] ldrb r0, [r4, #0xb] - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r4, #0x54] adds r1, r4, #0 adds r1, #0x54 diff --git a/asm/houseDoorExterior.s b/asm/houseDoorExterior.s index 8738f6ec..c05b8c50 100644 --- a/asm/houseDoorExterior.s +++ b/asm/houseDoorExterior.s @@ -43,7 +43,7 @@ _080866FE: adds r0, r6, #0 adds r0, #0x6c ldrb r0, [r0] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r5, r0, #0 movs r0, #0 mov r8, r0 diff --git a/asm/lavaPlatform.s b/asm/lavaPlatform.s index 0187280e..e505fa7a 100644 --- a/asm/lavaPlatform.s +++ b/asm/lavaPlatform.s @@ -460,7 +460,7 @@ sub_080925A4: @ 0x080925A4 push {r4, r5, r6, r7, lr} adds r6, r0, #0 ldrb r0, [r6, #0xb] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r5, r0, #0 ldrb r0, [r5, #9] cmp r0, #0xff diff --git a/asm/lightableSwitch.s b/asm/lightableSwitch.s deleted file mode 100644 index 5968aa6e..00000000 --- a/asm/lightableSwitch.s +++ /dev/null @@ -1,321 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LightableSwitch -LightableSwitch: @ 0x0809E9FC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0809EA18 @ =gUnk_081243B4 - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0809EB30 - pop {r4, pc} - .align 2, 0 -_0809EA18: .4byte gUnk_081243B4 - - thumb_func_start sub_0809EA1C -sub_0809EA1C: @ 0x0809EA1C - push {lr} - ldr r2, _0809EA30 @ =gUnk_081243BC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809EA30: .4byte gUnk_081243BC - - thumb_func_start sub_0809EA34 -sub_0809EA34: @ 0x0809EA34 - push {r4, lr} - adds r4, r0, #0 - movs r2, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - strb r2, [r4, #0x1e] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #4 - movs r0, #0x48 - strb r0, [r1] - subs r1, #1 - movs r0, #0x28 - strb r0, [r1] - subs r1, #4 - movs r0, #0xa - strb r0, [r1] - ldr r0, _0809EA7C @ =gUnk_080FD150 - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_0809EAD8 - adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip - adds r0, r4, #0 - bl sub_0809EABC - pop {r4, pc} - .align 2, 0 -_0809EA7C: .4byte gUnk_080FD150 - - thumb_func_start sub_0809EA80 -sub_0809EA80: @ 0x0809EA80 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809EAB4 - adds r4, r5, #0 - adds r4, #0x86 - ldrh r0, [r4] - bl CheckFlags - cmp r0, #0 - beq _0809EAA6 - ldrh r0, [r4] - bl ClearFlag - b _0809EAAC -_0809EAA6: - ldrh r0, [r4] - bl SetFlag -_0809EAAC: - movs r0, #0x88 - lsls r0, r0, #1 - bl sub_08004488 -_0809EAB4: - adds r0, r5, #0 - bl sub_0809EABC - pop {r4, r5, pc} - - thumb_func_start sub_0809EABC -sub_0809EABC: @ 0x0809EABC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f - ldrb r0, [r4, #0x1e] - cmp r0, r1 - beq _0809EAD6 - strb r1, [r4, #0x1e] -_0809EAD6: - pop {r4, pc} - - thumb_func_start sub_0809EAD8 -sub_0809EAD8: @ 0x0809EAD8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xb] - cmp r0, #0 - beq _0809EAF8 - bl sub_0804B128 - str r0, [r5, #0x54] - adds r1, r5, #0 - adds r1, #0x54 - adds r2, r5, #0 - adds r2, #0x74 - adds r0, r5, #0 - bl sub_080A2CC0 - b _0809EB24 -_0809EAF8: - ldr r0, _0809EB28 @ =0x00004050 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _0809EB2C @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_0809EB24: - pop {r4, r5, r6, pc} - .align 2, 0 -_0809EB28: .4byte 0x00004050 -_0809EB2C: .4byte gRoomControls - - thumb_func_start sub_0809EB30 -sub_0809EB30: @ 0x0809EB30 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _0809EB64 - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0809EB4A - adds r0, r4, #0 - bl sub_0806F69C -_0809EB4A: - adds r2, r4, #0 - adds r2, #0x74 - ldrh r0, [r2] - subs r0, #1 - strh r0, [r2] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0809EB64 - adds r1, r4, #0 - adds r1, #0x54 - adds r0, r4, #0 - bl sub_080A2CC0 -_0809EB64: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0809EB68 -sub_0809EB68: @ 0x0809EB68 - push {lr} - ldr r2, _0809EB7C @ =gUnk_081243C4 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809EB7C: .4byte gUnk_081243C4 - - thumb_func_start sub_0809EB80 -sub_0809EB80: @ 0x0809EB80 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - movs r5, #3 - strb r5, [r4, #0x1e] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #4 - movs r0, #0x48 - strb r0, [r1] - subs r1, #1 - movs r0, #0x28 - strb r0, [r1] - subs r1, #4 - movs r0, #0xa - strb r0, [r1] - ldr r0, _0809EBD4 @ =gUnk_080FD150 - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_0809EAD8 - adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip - adds r0, r4, #0 - adds r0, #0x84 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0809EBD2 - strb r5, [r4, #0xc] - movs r0, #2 - strb r0, [r4, #0x1e] -_0809EBD2: - pop {r4, r5, pc} - .align 2, 0 -_0809EBD4: .4byte gUnk_080FD150 - - thumb_func_start sub_0809EBD8 -sub_0809EBD8: @ 0x0809EBD8 - push {lr} - adds r2, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809EC04 - movs r1, #2 - strb r1, [r2, #0xc] - movs r0, #0x10 - strb r0, [r2, #0xe] - strb r1, [r2, #0x1e] - adds r0, r2, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - movs r0, #0x88 - lsls r0, r0, #1 - bl sub_08004488 -_0809EC04: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0809EC08 -sub_0809EC08: @ 0x0809EC08 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x84 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0809EC1E - movs r0, #3 - strb r0, [r4, #0xc] - b _0809EC44 -_0809EC1E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809EC44 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #3 - strb r0, [r4, #0x1e] - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl ClearFlag - movs r0, #0x88 - lsls r0, r0, #1 - bl sub_08004488 -_0809EC44: - pop {r4, pc} - .align 2, 0 - - thumb_func_start nullsub_126 -nullsub_126: @ 0x0809EC48 - bx lr - .align 2, 0 diff --git a/asm/lilypadSmall.s b/asm/lilypadSmall.s index 8a3a3f28..8d5da9c2 100644 --- a/asm/lilypadSmall.s +++ b/asm/lilypadSmall.s @@ -38,7 +38,7 @@ LilypadSmall: @ 0x08097A5C orrs r0, r1 strb r0, [r2] ldrb r0, [r5, #0xb] - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r5, #0x54] adds r1, r5, #0 adds r1, #0x54 diff --git a/asm/manager1.s b/asm/manager1.s index 54924177..500a5767 100644 --- a/asm/manager1.s +++ b/asm/manager1.s @@ -145,7 +145,7 @@ sub_08057174: @ 0x08057174 push {r4, r5, r6, r7, lr} adds r4, r0, #0 ldrb r0, [r4, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r3, r0, #0 ldrb r0, [r3] cmp r0, #0xff diff --git a/asm/manager16.s b/asm/manager16.s index 012e4045..58f8404c 100644 --- a/asm/manager16.s +++ b/asm/manager16.s @@ -15,7 +15,7 @@ sub_0805AB4C: @ 0x0805AB4C push {r5, r6, r7} adds r6, r0, #0 ldrb r0, [r6, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 cmp r4, #0 bne _0805AB68 @@ -245,7 +245,7 @@ _0805AD06: cmp r0, r5 ble _0805AD2C ldrb r0, [r4, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r3, r0, #0 cmp r3, #0 bne _0805ACD0 diff --git a/asm/manager21.s b/asm/manager21.s index 8fba93b5..8aa896bd 100644 --- a/asm/manager21.s +++ b/asm/manager21.s @@ -20,7 +20,7 @@ sub_0805B820: @ 0x0805B820 str r1, [r5, #0x20] _0805B834: ldrb r0, [r5, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 movs r7, #0 ldrh r0, [r4] diff --git a/asm/manager26.s b/asm/manager26.s index d25d83f4..0cda662e 100644 --- a/asm/manager26.s +++ b/asm/manager26.s @@ -25,7 +25,7 @@ sub_0805C6D0: @ 0x0805C6D0 sub sp, #4 adds r5, r0, #0 ldrb r0, [r5, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 cmp r4, #0 bne _0805C6EA diff --git a/asm/manager28.s b/asm/manager28.s index 2fab85b9..2c6d28e3 100644 --- a/asm/manager28.s +++ b/asm/manager28.s @@ -180,7 +180,7 @@ sub_0805CA6C: @ 0x0805CA6C adds r6, r0, #0 movs r5, #0 ldrb r0, [r6, #0xb] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 cmp r4, #0 bne _0805CACE diff --git a/asm/manager2A.s b/asm/manager2A.s index 2a7f9e27..840ddffa 100644 --- a/asm/manager2A.s +++ b/asm/manager2A.s @@ -17,7 +17,7 @@ sub_0805CFC0: @ 0x0805CFC0 strb r0, [r1, #0xc] _0805CFCE: movs r0, #3 - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 cmp r4, #0 beq _0805CFEE diff --git a/asm/manager2B.s b/asm/manager2B.s index 4263be0d..ed785d35 100644 --- a/asm/manager2B.s +++ b/asm/manager2B.s @@ -38,7 +38,7 @@ _0805D046: cmp r0, #0x43 bhi _0805D0B0 ldrb r0, [r6, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r5, r0, #0 movs r7, #0 movs r0, #0x36 diff --git a/asm/manager38.s b/asm/manager38.s index ab3e6bd3..20e701d6 100644 --- a/asm/manager38.s +++ b/asm/manager38.s @@ -28,7 +28,7 @@ sub_0805E0C0: @ 0x0805E0C0 strb r1, [r5, #0xc] strb r0, [r5, #0xe] ldrb r0, [r5, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 cmp r4, #0 bne _0805E0EC diff --git a/asm/manager6.s b/asm/manager6.s index 37065de0..34066ffa 100644 --- a/asm/manager6.s +++ b/asm/manager6.s @@ -16,7 +16,7 @@ sub_08057CB4: @ 0x08057CB4 movs r0, #1 strb r0, [r4, #0xc] ldrb r0, [r4, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r4, #0x20] cmp r0, #0 bne _08057CD6 @@ -72,7 +72,7 @@ _08057D18: cmp r0, #0 bne _08057D3A ldrb r0, [r4, #6] - bl sub_0804B128 + bl GetCurrentRoomProperty bl DoExitTransition _08057D3A: adds r4, #8 diff --git a/asm/managerB.s b/asm/managerB.s index 49e89618..13d574b2 100644 --- a/asm/managerB.s +++ b/asm/managerB.s @@ -152,7 +152,7 @@ sub_080586EC: @ 0x080586EC bl DeleteThisEntity _0805870A: ldrb r0, [r7, #0xb] - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 cmp r4, #0 beq _0805875C diff --git a/asm/managerD.s b/asm/managerD.s index 9cbc62a5..b8ce9ae1 100644 --- a/asm/managerD.s +++ b/asm/managerD.s @@ -78,7 +78,7 @@ sub_08058E34: @ 0x08058E34 ldrb r0, [r4, #0xa] cmp r0, #0 beq _08058E58 - bl sub_0804B128 + bl GetCurrentRoomProperty bl LoadRoomEntityList _08058E58: adds r0, r4, #0 diff --git a/asm/managerE.s b/asm/managerE.s index 560d6e1d..96fd526f 100644 --- a/asm/managerE.s +++ b/asm/managerE.s @@ -48,7 +48,7 @@ _08058E9E: bl PlaySFX _08058EB4: ldrb r0, [r4, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty bl LoadRoomEntityList bl DeleteThisEntity b _08058EC8 diff --git a/asm/minishSizedEntrance.s b/asm/minishSizedEntrance.s index c0c3e93d..f6b4ad3c 100644 --- a/asm/minishSizedEntrance.s +++ b/asm/minishSizedEntrance.s @@ -52,7 +52,7 @@ _08090F1C: cmp r0, #0 beq _08090F62 ldrb r0, [r4, #0xe] - bl sub_0804B128 + bl GetCurrentRoomProperty bl DoExitTransition _08090F62: pop {r4, r5, r6, pc} diff --git a/asm/object89.s b/asm/object89.s index 476e257f..92d513a3 100644 --- a/asm/object89.s +++ b/asm/object89.s @@ -349,14 +349,14 @@ sub_0809AD68: @ 0x0809AD68 push {r4, lr} adds r4, r0, #0 ldrb r0, [r4, #0xa] - bl sub_0804B128 + bl GetCurrentRoomProperty bl LoadRoomEntityList movs r0, #0x17 bl GetInventoryValue cmp r0, #0 beq _0809AD8A ldrb r0, [r4, #0xb] - bl sub_0804B128 + bl GetCurrentRoomProperty bl LoadRoomEntityList _0809AD8A: pop {r4, pc} diff --git a/asm/object98.s b/asm/object98.s index 878da9bf..99e1d8ab 100644 --- a/asm/object98.s +++ b/asm/object98.s @@ -73,7 +73,7 @@ _0809E3A6: ldrb r0, [r4, #0xa] cmp r0, #0 beq _0809E3D8 - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r4, #0x54] adds r1, r4, #0 adds r1, #0x54 diff --git a/asm/postman.s b/asm/postman.s index 75486be7..5393d0a9 100644 --- a/asm/postman.s +++ b/asm/postman.s @@ -44,7 +44,7 @@ sub_08060428: @ 0x08060428 ldrb r0, [r4, #0xb] cmp r0, #0 beq _08060444 - bl sub_0804B128 + bl GetCurrentRoomProperty adds r1, r0, #0 b _08060446 _08060444: diff --git a/asm/smallIceBlock.s b/asm/smallIceBlock.s index ef81550f..057ae10b 100644 --- a/asm/smallIceBlock.s +++ b/asm/smallIceBlock.s @@ -617,7 +617,7 @@ sub_0809963C: @ 0x0809963C ldrb r0, [r5, #0xb] cmp r0, #0 beq _08099684 - bl sub_0804B128 + bl GetCurrentRoomProperty adds r4, r0, #0 ldrh r0, [r4] bl CheckFlags diff --git a/asm/wizzrobeWind.s b/asm/wizzrobeWind.s index 46f4782c..55bd91a6 100644 --- a/asm/wizzrobeWind.s +++ b/asm/wizzrobeWind.s @@ -123,7 +123,7 @@ sub_0802F55C: @ 0x0802F55C adds r0, #0x80 strb r2, [r0] ldrb r0, [r4, #0xe] - bl sub_0804B128 + bl GetCurrentRoomProperty str r0, [r4, #0x54] adds r0, r4, #0 bl sub_0802FA48 diff --git a/include/functions.h b/include/functions.h index fabfcc43..454b8480 100644 --- a/include/functions.h +++ b/include/functions.h @@ -6,7 +6,7 @@ #include "entity.h" #include "position.h" -// Identified +// Identified - to be sorted into header files extern u32 Random(void); extern void PlaySFX(u32); extern void UpdateSpriteOrderAndFlip(Entity*); @@ -29,6 +29,8 @@ extern u32* StartCutscene(Entity*, u8*); extern void GetNextFrame(Entity*); extern u32 LoadExtraSpriteData(Entity*, u32*); extern void ResolveEntityOnTop(Entity*, Entity*); +extern void SetExtraSpriteFrame(Entity*, u32, u32); +extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); // Unidentified extern void sub_0806ED78(Entity*); @@ -60,8 +62,6 @@ extern void sub_0807DD94(Entity*, u32); extern Entity* sub_0805EB00(u32, u32, u32); extern Entity* sub_0805EB2C(u32, u32, u32, u32, u32); extern s32 sub_0806ED9C(Entity*, u32, u32); -extern void SetExtraSpriteFrame(Entity*, u32, u32); -extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); extern void sub_0807000C(Entity*); extern void sub_0805E47C(Entity*); extern void sub_0805E584(Entity*); diff --git a/linker.ld b/linker.ld index 3576b03d..d4f3553c 100644 --- a/linker.ld +++ b/linker.ld @@ -810,7 +810,7 @@ SECTIONS { asm/macroAcorn.o(.text); asm/object9B.o(.text); asm/treeHidingPortal.o(.text); - asm/lightableSwitch.o(.text); + src/lightableSwitch.o(.text); asm/object9E.o(.text); asm/fan.o(.text); asm/objectA0.o(.text); diff --git a/src/bladeTrap.c b/src/bladeTrap.c index 89d1663a..3c37d08a 100644 --- a/src/bladeTrap.c +++ b/src/bladeTrap.c @@ -4,7 +4,7 @@ extern void sub_080A2CC0(); extern void sub_0806F69C(); extern void sub_08004488(); -extern Entity* sub_0804B128(); +extern Entity* GetCurrentRoomProperty(); void BladeTrap(Entity* ent) { u16 uVar1; @@ -12,7 +12,7 @@ void BladeTrap(Entity* ent) { u16* puVar3; if (ent->action == 0) { ent->action = 1; - pEVar2 = sub_0804B128((u8)(ent->entityType).form); + pEVar2 = GetCurrentRoomProperty((u8)(ent->entityType).form); ent->attachedEntity = pEVar2; sub_080A2CC0((EntityData*)ent, &ent->attachedEntity, &ent->field_0x74); } diff --git a/src/lakituCloud.c b/src/lakituCloud.c index 9932b662..ab3e36cc 100644 --- a/src/lakituCloud.c +++ b/src/lakituCloud.c @@ -19,7 +19,7 @@ extern bool32 sub_0806F520(Entity *); extern void sub_0800449C(Entity *, u32); extern void sub_0803CE14(Entity *); extern void sub_0803CE3C(Entity *); -extern Entity *sub_0804B128(u8); +extern Entity *GetCurrentRoomProperty(u8); extern void sub_0806F4E8(Entity *); extern void sub_0806F69C(Entity *); extern void sub_08079D84(void); @@ -78,7 +78,7 @@ void sub_0803CD6C(Entity *this) { this->height.HALF.HI = -2; // Set parent to lakitu - lakitu = sub_0804B128(this->entityType.form); + lakitu = GetCurrentRoomProperty(this->entityType.form); this->attachedEntity = lakitu; this->parent = lakitu; diff --git a/src/lightableSwitch.c b/src/lightableSwitch.c new file mode 100644 index 00000000..a98a66ba --- /dev/null +++ b/src/lightableSwitch.c @@ -0,0 +1,145 @@ +#include "global.h" +#include "entity.h" +#include "room.h" +#include "flags.h" +#include "functions.h" + +extern void sub_0809EB30(Entity*); +extern void sub_0809EAD8(Entity*); +extern void sub_0809EABC(Entity*); +extern void sub_08004488(u32); +extern void sub_080A2CC0(Entity*, Entity**, u16*); +extern Entity* GetCurrentRoomProperty(u32); +extern void SetTile(u32, u32, u32); +extern void sub_0806F69C(Entity*); + +extern void (*const gUnk_081243B4[])(Entity*); +extern void (*const gUnk_081243BC[])(Entity*); +extern void (*const gUnk_081243C4[])(Entity*); + +extern BoundingBox gUnk_080FD150; + +void LightableSwitch(Entity* this) { + gUnk_081243B4[this->entityType.form](this); + sub_0809EB30(this); +} + +void sub_0809EA1C(Entity* this) { + gUnk_081243BC[this->action](this); +} + +void sub_0809EA34(Entity* this) { + this->action = 1; + this->flags = this->flags | 0x80; + this->frameIndex = 0; + this->field_0x3c = 7; + this->field_0x40 = 0x48; + this->damageType = 0x28; + this->flags2 = 10; + this->boundingBox = &gUnk_080FD150; + sub_0809EAD8(this); + UpdateSpriteOrderAndFlip(this); + sub_0809EABC(this); +} + +void sub_0809EA80(Entity* this) { + + if ((this->bitfield & 0x80) != 0) { + if (CheckFlags(this->field_0x86) != 0) { + ClearFlag(this->field_0x86); + } else { + SetFlag(this->field_0x86); + } + sub_08004488(0x110); + } + sub_0809EABC(this); +} + +void sub_0809EABC(Entity* this) { + bool32 anySet; + u32 f; + + f = CheckFlags(this->field_0x86); + anySet = (-f | f) >> 0x1F; + if (this->frameIndex != anySet) { + this->frameIndex = anySet; + } +} + +void sub_0809EAD8(Entity* this) { + u8 bVar1; + Entity* pEVar2; + + if (this->entityType.parameter != 0) { + + this->attachedEntity = GetCurrentRoomProperty(this->entityType.parameter); + sub_080A2CC0(this, &this->attachedEntity, &this->field_0x74); + + } else { + SetTile(0x4050, COORD_TO_TILE(this), this->collisionLayer); + } +} + +void sub_0809EB30(Entity* this) { + u16 uVar1; + u16* puVar2; + + if (this->entityType.parameter != 0) { + if ((this->direction & 0x80) == 0) { + sub_0806F69C(this); + } + puVar2 = &this->field_0x74; + if (!--*puVar2) { + sub_080A2CC0(this, &this->attachedEntity, puVar2); + } + } +} + +void sub_0809EB68(Entity* this) { + gUnk_081243C4[this->action](this); +} + +void sub_0809EB80(Entity* this) { + + this->action = 1; + this->flags = this->flags | 0x80; + this->frameIndex = 3; + this->field_0x3c = 7; + this->field_0x40 = 0x48; + this->damageType = 0x28; + this->flags2 = 10; + this->boundingBox = &gUnk_080FD150; + sub_0809EAD8(this); + UpdateSpriteOrderAndFlip(this); + if (CheckFlags(this->cutsceneBeh.HWORD) != 0) { + this->action = 3; + this->frameIndex = 2; + } +} + +void sub_0809EBD8(Entity* this) { + if ((this->bitfield & 0x80) != 0) { + this->action = 2; + this->actionDelay = 0x10; + this->frameIndex = 2; + SetFlag(this->field_0x86); + sub_08004488(0x110); + } +} + +void sub_0809EC08(Entity* this) { + + if (CheckFlags(this->cutsceneBeh.HWORD) != 0) { + this->action = 3; + + } else { + if (--this->actionDelay == 0) { + this->action = 1; + this->frameIndex = 3; + ClearFlag(this->field_0x86); + sub_08004488(0x110); + } + } +} + +void nullsub_126(Entity* this) { } \ No newline at end of file diff --git a/src/loadRoom.c b/src/loadRoom.c index 7acf18d1..c429264b 100644 --- a/src/loadRoom.c +++ b/src/loadRoom.c @@ -3,7 +3,7 @@ void LoadRoomEntityList(); s32 CheckGlobalFlag(u32 flag); -extern s32* sub_0804B128(u8 unk); +extern s32* GetCurrentRoomProperty(u8 unk); extern void sub_0804B058(s32* unk); extern void sub_0804B1AC(); extern void sub_0801AC98(); @@ -15,13 +15,13 @@ void LoadRoom(void) s32 iVar1; s32* dat; - sub_0804B128(1); + GetCurrentRoomProperty(1); LoadRoomEntityList(); - sub_0804B128(0); + GetCurrentRoomProperty(0); LoadRoomEntityList(); - if (CheckGlobalFlag(21)) sub_0804B058(sub_0804B128(2)); - sub_0804B128(3); + if (CheckGlobalFlag(21)) sub_0804B058(GetCurrentRoomProperty(2)); + GetCurrentRoomProperty(3); sub_0804B1AC(); sub_0801AC98(); } diff --git a/src/sub_0804AFF4.c b/src/sub_0804AFF4.c index a1a4731d..a7108fd6 100644 --- a/src/sub_0804AFF4.c +++ b/src/sub_0804AFF4.c @@ -1,7 +1,7 @@ #include "global.h" extern void sub_080186EC(); -extern u32* sub_0804B128(u8); +extern u32* GetCurrentRoomProperty(u8); extern u32 _call_via_r0(u32*); extern void sub_0804B16C(); @@ -9,11 +9,11 @@ void sub_0804AFF4(void) { u32* func; sub_080186EC(); - func = sub_0804B128(5); + func = GetCurrentRoomProperty(5); if (func != NULL) { _call_via_r0(func); } - func = sub_0804B128(7); + func = GetCurrentRoomProperty(7); if (func != NULL) { _call_via_r0(func); } @@ -27,13 +27,13 @@ sub_0804AFF4: @ 0x0804AFF4 push {lr} bl sub_080186EC movs r0, #5 - bl sub_0804B128 + bl GetCurrentRoomProperty cmp r0, #0 beq _0804B008 bl _call_via_r0 _0804B008: movs r0, #7 - bl sub_0804B128 + bl GetCurrentRoomProperty cmp r0, #0 beq _0804B016 bl _call_via_r0 From f9e9fe0141a39997ae85a9b45b6b1b0151fec5b5 Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 7 Jul 2020 15:32:27 -0700 Subject: [PATCH 06/25] dampe.c OK --- asm/cellOverwriteSet.s | 372 ++++++++++++++++++++++++ asm/code_08016DF8.s | 4 +- asm/code_08019444.s | 564 +------------------------------------ asm/code_0801C1D4.s | 196 +++++++++++++ asm/code_08055FF4.s | 4 +- asm/code_080732D0.s | 4 +- asm/dampe.s | 245 ---------------- data/data_080B2A70.s | 5 +- data/playerItemFunctions.s | 61 ++++ include/item.h | 10 +- linker.ld | 7 +- src/dampe.c | 132 +++++++++ src/item.c | 12 +- 13 files changed, 790 insertions(+), 826 deletions(-) create mode 100644 asm/cellOverwriteSet.s create mode 100644 asm/code_0801C1D4.s delete mode 100644 asm/dampe.s create mode 100644 data/playerItemFunctions.s create mode 100644 src/dampe.c diff --git a/asm/cellOverwriteSet.s b/asm/cellOverwriteSet.s new file mode 100644 index 00000000..9910455d --- /dev/null +++ b/asm/cellOverwriteSet.s @@ -0,0 +1,372 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start CellOverwriteSet +CellOverwriteSet: @ 0x0801BEF8 + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + mov r8, r0 + ldr r7, _0801BFF0 @ =gLinkEntity + ldrb r0, [r0, #0xc] + cmp r0, #0 + bne _0801BF62 + movs r1, #0x2e + ldrsh r0, [r7, r1] + ldr r5, _0801BFF4 @ =gUnk_080B7B6C + ldrb r1, [r7, #0x14] + movs r2, #0xe + ands r2, r1 + adds r1, r2, r5 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + ldr r4, _0801BFF8 @ =gRoomControls + ldrh r1, [r4, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r3, #0x3f + ands r0, r3 + movs r6, #0x32 + ldrsh r1, [r7, r6] + adds r2, #1 + adds r2, r2, r5 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + ldrh r2, [r4, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r3 + lsls r1, r1, #6 + orrs r0, r1 + mov r1, r8 + adds r1, #0x38 + ldrb r1, [r1] + bl GetTileType + mov r1, r8 + adds r1, #0x6c + strh r0, [r1] + mov r1, r8 + ldrb r0, [r1, #0xc] + adds r0, #1 + strb r0, [r1, #0xc] +_0801BF62: + ldr r2, _0801BFFC @ =gLinkState + mov sb, r2 + ldrb r1, [r2, #0x1a] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2, #0x1a] + ldr r6, _0801C000 @ =gUnk_03000FF0 + ldrh r1, [r6] + movs r3, #0x80 + lsls r3, r3, #1 + mov sl, r3 + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0801C074 + ldrh r1, [r6, #2] + mov r0, sl + ands r0, r1 + cmp r0, #0 + beq _0801BFDA + movs r4, #0x2e + ldrsh r0, [r7, r4] + ldr r5, _0801BFF4 @ =gUnk_080B7B6C + mov sb, r5 + ldrb r1, [r7, #0x14] + movs r2, #0xe + ands r2, r1 + adds r1, r2, r5 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + ldr r4, _0801BFF8 @ =gRoomControls + ldrh r1, [r4, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r3, #0x3f + ands r0, r3 + movs r5, #0x32 + ldrsh r1, [r7, r5] + adds r2, #1 + add r2, sb + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + ldrh r2, [r4, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r3 + lsls r1, r1, #6 + orrs r0, r1 + mov r1, r8 + adds r1, #0x38 + ldrb r1, [r1] + bl GetTileType + mov r1, r8 + adds r1, #0x6c + strh r0, [r1] +_0801BFDA: + ldrh r3, [r6] + mov r0, sl + ands r0, r3 + adds r4, r3, #0 + cmp r0, #0 + beq _0801C004 + adds r1, r7, #0 + adds r1, #0x3d + movs r0, #2 + strb r0, [r1] + b _0801C0D4 + .align 2, 0 +_0801BFF0: .4byte gLinkEntity +_0801BFF4: .4byte gUnk_080B7B6C +_0801BFF8: .4byte gRoomControls +_0801BFFC: .4byte gLinkState +_0801C000: .4byte gUnk_03000FF0 +_0801C004: + ldrh r2, [r6, #2] + movs r6, #0x10 + adds r0, r6, #0 + ands r0, r2 + cmp r0, #0 + beq _0801C01A + mov r1, r8 + adds r1, #0x6c + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] +_0801C01A: + movs r5, #0x20 + adds r0, r5, #0 + ands r0, r2 + cmp r0, #0 + beq _0801C02E + mov r1, r8 + adds r1, #0x6c + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] +_0801C02E: + movs r0, #0x30 + ands r0, r4 + cmp r0, #0 + beq _0801C06E + mov r1, r8 + ldrb r0, [r1, #0xf] + adds r0, #1 + strb r0, [r1, #0xf] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x1e + bls _0801C0D4 + movs r0, #0x1e + strb r0, [r1, #0xf] + adds r0, r6, #0 + ands r0, r4 + cmp r0, #0 + beq _0801C05A + adds r1, #0x6c + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] +_0801C05A: + adds r0, r5, #0 + ands r0, r3 + cmp r0, #0 + beq _0801C0D4 + mov r1, r8 + adds r1, #0x6c + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + b _0801C0D4 +_0801C06E: + mov r2, r8 + strb r0, [r2, #0xf] + b _0801C0D4 +_0801C074: + mov r0, r8 + adds r0, #0x6c + ldrh r0, [r0] + movs r3, #0x2e + ldrsh r1, [r7, r3] + ldr r4, _0801C1C8 @ =gUnk_080B7B6C + mov sl, r4 + ldrb r2, [r7, #0x14] + movs r3, #0xe + ands r3, r2 + adds r2, r3, r4 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + ldr r5, _0801C1CC @ =gRoomControls + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + movs r4, #0x3f + ands r1, r4 + movs r6, #0x32 + ldrsh r2, [r7, r6] + adds r3, #1 + add r3, sl + ldrb r3, [r3] + lsls r3, r3, #0x18 + asrs r3, r3, #0x18 + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r2, r8 + adds r2, #0x38 + ldrb r2, [r2] + bl sub_0807B7D8 + mov r0, sb + ldrb r1, [r0, #0x1a] + movs r0, #0x7f + ands r0, r1 + mov r1, sb + strb r0, [r1, #0x1a] + bl DeleteThisEntity +_0801C0D4: + ldr r0, _0801C1D0 @ =gUnk_03000FF0 + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0801C1BE + movs r2, #0x6c + add r2, r8 + mov sb, r2 + ldrh r0, [r2] + movs r3, #0x2e + ldrsh r1, [r7, r3] + ldr r6, _0801C1C8 @ =gUnk_080B7B6C + movs r2, #0 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldr r5, _0801C1CC @ =gRoomControls + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + movs r4, #0x3f + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #1 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + movs r2, #0x38 + add r8, r2 + mov r3, r8 + ldrb r2, [r3] + bl sub_0807B7D8 + mov r1, sb + ldrh r0, [r1] + movs r2, #0x2e + ldrsh r1, [r7, r2] + movs r2, #2 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #3 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r3, r8 + ldrb r2, [r3] + bl sub_0807B7D8 + mov r1, sb + ldrh r0, [r1] + movs r2, #0x2e + ldrsh r1, [r7, r2] + movs r2, #4 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #5 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r3, r8 + ldrb r2, [r3] + bl sub_0807B7D8 + mov r1, sb + ldrh r0, [r1] + movs r2, #0x2e + ldrsh r1, [r7, r2] + movs r2, #6 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #7 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r4, r8 + ldrb r2, [r4] + bl sub_0807B7D8 +_0801C1BE: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801C1C8: .4byte gUnk_080B7B6C +_0801C1CC: .4byte gRoomControls +_0801C1D0: .4byte gUnk_03000FF0 diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index 0258a3c9..d5b8213c 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -694,7 +694,7 @@ _08017352: bl sub_0805E3B0 cmp r0, #0 bne _08017398 - ldr r1, _08017390 @ =gUnk_080B2CE8 + ldr r1, _08017390 @ =gPlayerItemFunctions ldrb r0, [r4, #9] lsls r0, r0, #2 adds r0, r0, r1 @@ -719,7 +719,7 @@ _08017352: subs r0, #1 b _08017396 .align 2, 0 -_08017390: .4byte gUnk_080B2CE8 +_08017390: .4byte gPlayerItemFunctions _08017394: adds r0, #1 _08017396: diff --git a/asm/code_08019444.s b/asm/code_08019444.s index 9ea73655..aeba402d 100644 --- a/asm/code_08019444.s +++ b/asm/code_08019444.s @@ -39,8 +39,8 @@ sub_08019468: @ 0x08019468 _0801947E: pop {pc} - thumb_func_start sub_08019480 -sub_08019480: @ 0x08019480 + thumb_func_start SwordBeam +SwordBeam: @ 0x08019480 push {lr} ldr r2, _08019494 @ =gUnk_080B43F4 ldrb r1, [r0, #0xc] @@ -5027,8 +5027,8 @@ sub_0801B9F0: @ 0x0801B9F0 bl sub_08017744 pop {pc} - thumb_func_start sub_0801BA00 -sub_0801BA00: @ 0x0801BA00 + thumb_func_start SwordSpin +SwordSpin: @ 0x0801BA00 push {lr} ldr r2, _0801BA14 @ =gUnk_080B7870 ldrb r1, [r0, #0xc] @@ -5620,558 +5620,4 @@ _0801BEEE: pop {r4, pc} .align 2, 0 _0801BEF0: .4byte gLinkEntity -_0801BEF4: .4byte gUnk_080B7878 - - thumb_func_start sub_0801BEF8 -sub_0801BEF8: @ 0x0801BEF8 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov r8, r0 - ldr r7, _0801BFF0 @ =gLinkEntity - ldrb r0, [r0, #0xc] - cmp r0, #0 - bne _0801BF62 - movs r1, #0x2e - ldrsh r0, [r7, r1] - ldr r5, _0801BFF4 @ =gUnk_080B7B6C - ldrb r1, [r7, #0x14] - movs r2, #0xe - ands r2, r1 - adds r1, r2, r5 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, r0, r1 - ldr r4, _0801BFF8 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r6, #0x32 - ldrsh r1, [r7, r6] - adds r2, #1 - adds r2, r2, r5 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - mov r1, r8 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileType - mov r1, r8 - adds r1, #0x6c - strh r0, [r1] - mov r1, r8 - ldrb r0, [r1, #0xc] - adds r0, #1 - strb r0, [r1, #0xc] -_0801BF62: - ldr r2, _0801BFFC @ =gLinkState - mov sb, r2 - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1a] - ldr r6, _0801C000 @ =gUnk_03000FF0 - ldrh r1, [r6] - movs r3, #0x80 - lsls r3, r3, #1 - mov sl, r3 - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0801C074 - ldrh r1, [r6, #2] - mov r0, sl - ands r0, r1 - cmp r0, #0 - beq _0801BFDA - movs r4, #0x2e - ldrsh r0, [r7, r4] - ldr r5, _0801BFF4 @ =gUnk_080B7B6C - mov sb, r5 - ldrb r1, [r7, #0x14] - movs r2, #0xe - ands r2, r1 - adds r1, r2, r5 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, r0, r1 - ldr r4, _0801BFF8 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r7, r5] - adds r2, #1 - add r2, sb - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - mov r1, r8 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileType - mov r1, r8 - adds r1, #0x6c - strh r0, [r1] -_0801BFDA: - ldrh r3, [r6] - mov r0, sl - ands r0, r3 - adds r4, r3, #0 - cmp r0, #0 - beq _0801C004 - adds r1, r7, #0 - adds r1, #0x3d - movs r0, #2 - strb r0, [r1] - b _0801C0D4 - .align 2, 0 -_0801BFF0: .4byte gLinkEntity -_0801BFF4: .4byte gUnk_080B7B6C -_0801BFF8: .4byte gRoomControls -_0801BFFC: .4byte gLinkState -_0801C000: .4byte gUnk_03000FF0 -_0801C004: - ldrh r2, [r6, #2] - movs r6, #0x10 - adds r0, r6, #0 - ands r0, r2 - cmp r0, #0 - beq _0801C01A - mov r1, r8 - adds r1, #0x6c - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] -_0801C01A: - movs r5, #0x20 - adds r0, r5, #0 - ands r0, r2 - cmp r0, #0 - beq _0801C02E - mov r1, r8 - adds r1, #0x6c - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] -_0801C02E: - movs r0, #0x30 - ands r0, r4 - cmp r0, #0 - beq _0801C06E - mov r1, r8 - ldrb r0, [r1, #0xf] - adds r0, #1 - strb r0, [r1, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1e - bls _0801C0D4 - movs r0, #0x1e - strb r0, [r1, #0xf] - adds r0, r6, #0 - ands r0, r4 - cmp r0, #0 - beq _0801C05A - adds r1, #0x6c - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] -_0801C05A: - adds r0, r5, #0 - ands r0, r3 - cmp r0, #0 - beq _0801C0D4 - mov r1, r8 - adds r1, #0x6c - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - b _0801C0D4 -_0801C06E: - mov r2, r8 - strb r0, [r2, #0xf] - b _0801C0D4 -_0801C074: - mov r0, r8 - adds r0, #0x6c - ldrh r0, [r0] - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldr r4, _0801C1C8 @ =gUnk_080B7B6C - mov sl, r4 - ldrb r2, [r7, #0x14] - movs r3, #0xe - ands r3, r2 - adds r2, r3, r4 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldr r5, _0801C1CC @ =gRoomControls - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r7, r6] - adds r3, #1 - add r3, sl - ldrb r3, [r3] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r2, r8 - adds r2, #0x38 - ldrb r2, [r2] - bl sub_0807B7D8 - mov r0, sb - ldrb r1, [r0, #0x1a] - movs r0, #0x7f - ands r0, r1 - mov r1, sb - strb r0, [r1, #0x1a] - bl DeleteThisEntity -_0801C0D4: - ldr r0, _0801C1D0 @ =gUnk_03000FF0 - ldrh r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0801C1BE - movs r2, #0x6c - add r2, r8 - mov sb, r2 - ldrh r0, [r2] - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldr r6, _0801C1C8 @ =gUnk_080B7B6C - movs r2, #0 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldr r5, _0801C1CC @ =gRoomControls - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #1 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - movs r2, #0x38 - add r8, r2 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - mov r1, sb - ldrh r0, [r1] - movs r2, #0x2e - ldrsh r1, [r7, r2] - movs r2, #2 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #3 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - mov r1, sb - ldrh r0, [r1] - movs r2, #0x2e - ldrsh r1, [r7, r2] - movs r2, #4 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #5 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - mov r1, sb - ldrh r0, [r1] - movs r2, #0x2e - ldrsh r1, [r7, r2] - movs r2, #6 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #7 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r4, r8 - ldrb r2, [r4] - bl sub_0807B7D8 -_0801C1BE: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801C1C8: .4byte gUnk_080B7B6C -_0801C1CC: .4byte gRoomControls -_0801C1D0: .4byte gUnk_03000FF0 - - thumb_func_start sub_0801C1D4 -sub_0801C1D4: @ 0x0801C1D4 - push {r4, lr} - movs r4, #0 -_0801C1D8: - lsls r1, r4, #5 - ldr r0, _0801C200 @ =gUnk_0200AF34 - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0801C1F8 - ldrb r0, [r2, #1] - lsls r0, r0, #4 - ldr r1, _0801C204 @ =gUnk_080C8F8C - adds r0, r0, r1 - ldr r1, [r0, #8] - adds r0, r2, #0 - bl _call_via_r1 -_0801C1F8: - adds r4, #1 - cmp r4, #0x17 - bls _0801C1D8 - pop {r4, pc} - .align 2, 0 -_0801C200: .4byte gUnk_0200AF34 -_0801C204: .4byte gUnk_080C8F8C - - thumb_func_start sub_0801C208 -sub_0801C208: @ 0x0801C208 - push {r4, r5, lr} - movs r5, #0 - ldr r4, _0801C250 @ =gUnk_03001010 -_0801C20E: - lsls r1, r5, #5 - ldr r0, _0801C254 @ =gUnk_0200AF34 - adds r3, r1, r0 - ldrb r1, [r3] - movs r0, #3 - ands r0, r1 - cmp r0, #3 - bne _0801C248 - ldrh r0, [r3, #0xc] - strh r0, [r4] - ldrh r0, [r3, #0xe] - strh r0, [r4, #2] - ldrb r2, [r3, #1] - lsls r2, r2, #4 - ldr r0, _0801C258 @ =gUnk_080C8F8C - adds r2, r2, r0 - ldrh r0, [r2] - strh r0, [r4, #4] - ldrh r0, [r2, #2] - strh r0, [r4, #6] - ldrb r0, [r3, #0x18] - lsls r0, r0, #0xc - ldrh r1, [r3, #0x1a] - orrs r0, r1 - strh r0, [r4, #8] - ldrh r0, [r2, #6] - ldrb r1, [r3, #0x10] - bl sub_080ADA14 -_0801C248: - adds r5, #1 - cmp r5, #0x17 - bls _0801C20E - pop {r4, r5, pc} - .align 2, 0 -_0801C250: .4byte gUnk_03001010 -_0801C254: .4byte gUnk_0200AF34 -_0801C258: .4byte gUnk_080C8F8C - - thumb_func_start sub_0801C25C -sub_0801C25C: @ 0x0801C25C - push {r4, r5, r6, r7, lr} - movs r4, #0 - ldr r5, _0801C2E4 @ =gUnk_0200AF34 - adds r6, r5, #0 - subs r6, #0x34 - movs r7, #0xd - rsbs r7, r7, #0 - ldr r3, _0801C2E8 @ =0x040000D4 -_0801C26C: - lsls r0, r4, #5 - adds r2, r0, r5 - ldrb r1, [r2] - movs r0, #3 - ands r0, r1 - cmp r0, #3 - bne _0801C2A8 - lsls r0, r1, #0x1c - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _0801C2A8 - adds r0, r7, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r2, #0x1c] - str r0, [r3] - ldrh r0, [r2, #0x1a] - lsls r0, r0, #5 - ldr r1, _0801C2EC @ =0x06010000 - adds r0, r0, r1 - str r0, [r3, #4] - ldrb r0, [r2, #0x19] - lsls r0, r0, #3 - movs r1, #0x84 - lsls r1, r1, #0x18 - orrs r0, r1 - str r0, [r3, #8] - ldr r0, [r3, #8] -_0801C2A8: - adds r4, #1 - cmp r4, #0x17 - ble _0801C26C - adds r2, r6, #0 - ldrb r3, [r2, #0x13] - movs r0, #0x13 - ldrsb r0, [r2, r0] - cmp r0, #0 - bge _0801C2C8 - movs r1, #0x7f - ands r1, r3 - strb r1, [r2, #0x13] - movs r0, #0x8d - lsls r0, r0, #1 - bl sub_0801C2F0 -_0801C2C8: - ldrb r2, [r6, #0x14] - movs r0, #0x14 - ldrsb r0, [r6, r0] - cmp r0, #0 - bge _0801C2E0 - movs r1, #0x7f - ands r1, r2 - strb r1, [r6, #0x14] - movs r0, #0x93 - lsls r0, r0, #1 - bl sub_0801C2F0 -_0801C2E0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801C2E4: .4byte gUnk_0200AF34 -_0801C2E8: .4byte 0x040000D4 -_0801C2EC: .4byte 0x06010000 - - thumb_func_start sub_0801C2F0 -sub_0801C2F0: @ 0x0801C2F0 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, r1, #0 - lsls r5, r4, #5 - ldr r1, _0801C330 @ =0x06010000 - adds r4, r5, r1 - movs r1, #0xa - bl Div - cmp r0, #9 - bls _0801C308 - movs r0, #9 -_0801C308: - ldr r2, _0801C334 @ =0x040000D4 - lsls r0, r0, #5 - ldr r3, _0801C338 @ =gUnk_085C4620 - adds r0, r0, r3 - str r0, [r2] - str r4, [r2, #4] - ldr r4, _0801C33C @ =0x84000008 - str r4, [r2, #8] - ldr r0, [r2, #8] - adds r1, #0xa - lsls r1, r1, #5 - adds r1, r1, r3 - str r1, [r2] - ldr r1, _0801C340 @ =0x06010020 - adds r0, r5, r1 - str r0, [r2, #4] - str r4, [r2, #8] - ldr r0, [r2, #8] - pop {r4, r5, pc} - .align 2, 0 -_0801C330: .4byte 0x06010000 -_0801C334: .4byte 0x040000D4 -_0801C338: .4byte gUnk_085C4620 -_0801C33C: .4byte 0x84000008 -_0801C340: .4byte 0x06010020 +_0801BEF4: .4byte gUnk_080B7878 \ No newline at end of file diff --git a/asm/code_0801C1D4.s b/asm/code_0801C1D4.s new file mode 100644 index 00000000..4d052ca2 --- /dev/null +++ b/asm/code_0801C1D4.s @@ -0,0 +1,196 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_0801C1D4 +sub_0801C1D4: @ 0x0801C1D4 + push {r4, lr} + movs r4, #0 +_0801C1D8: + lsls r1, r4, #5 + ldr r0, _0801C200 @ =gUnk_0200AF34 + adds r2, r1, r0 + ldrb r1, [r2] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0801C1F8 + ldrb r0, [r2, #1] + lsls r0, r0, #4 + ldr r1, _0801C204 @ =gUnk_080C8F8C + adds r0, r0, r1 + ldr r1, [r0, #8] + adds r0, r2, #0 + bl _call_via_r1 +_0801C1F8: + adds r4, #1 + cmp r4, #0x17 + bls _0801C1D8 + pop {r4, pc} + .align 2, 0 +_0801C200: .4byte gUnk_0200AF34 +_0801C204: .4byte gUnk_080C8F8C + + thumb_func_start sub_0801C208 +sub_0801C208: @ 0x0801C208 + push {r4, r5, lr} + movs r5, #0 + ldr r4, _0801C250 @ =gUnk_03001010 +_0801C20E: + lsls r1, r5, #5 + ldr r0, _0801C254 @ =gUnk_0200AF34 + adds r3, r1, r0 + ldrb r1, [r3] + movs r0, #3 + ands r0, r1 + cmp r0, #3 + bne _0801C248 + ldrh r0, [r3, #0xc] + strh r0, [r4] + ldrh r0, [r3, #0xe] + strh r0, [r4, #2] + ldrb r2, [r3, #1] + lsls r2, r2, #4 + ldr r0, _0801C258 @ =gUnk_080C8F8C + adds r2, r2, r0 + ldrh r0, [r2] + strh r0, [r4, #4] + ldrh r0, [r2, #2] + strh r0, [r4, #6] + ldrb r0, [r3, #0x18] + lsls r0, r0, #0xc + ldrh r1, [r3, #0x1a] + orrs r0, r1 + strh r0, [r4, #8] + ldrh r0, [r2, #6] + ldrb r1, [r3, #0x10] + bl sub_080ADA14 +_0801C248: + adds r5, #1 + cmp r5, #0x17 + bls _0801C20E + pop {r4, r5, pc} + .align 2, 0 +_0801C250: .4byte gUnk_03001010 +_0801C254: .4byte gUnk_0200AF34 +_0801C258: .4byte gUnk_080C8F8C + + thumb_func_start sub_0801C25C +sub_0801C25C: @ 0x0801C25C + push {r4, r5, r6, r7, lr} + movs r4, #0 + ldr r5, _0801C2E4 @ =gUnk_0200AF34 + adds r6, r5, #0 + subs r6, #0x34 + movs r7, #0xd + rsbs r7, r7, #0 + ldr r3, _0801C2E8 @ =0x040000D4 +_0801C26C: + lsls r0, r4, #5 + adds r2, r0, r5 + ldrb r1, [r2] + movs r0, #3 + ands r0, r1 + cmp r0, #3 + bne _0801C2A8 + lsls r0, r1, #0x1c + lsrs r0, r0, #0x1e + cmp r0, #1 + bne _0801C2A8 + adds r0, r7, #0 + ands r0, r1 + movs r1, #8 + orrs r0, r1 + strb r0, [r2] + ldr r0, [r2, #0x1c] + str r0, [r3] + ldrh r0, [r2, #0x1a] + lsls r0, r0, #5 + ldr r1, _0801C2EC @ =0x06010000 + adds r0, r0, r1 + str r0, [r3, #4] + ldrb r0, [r2, #0x19] + lsls r0, r0, #3 + movs r1, #0x84 + lsls r1, r1, #0x18 + orrs r0, r1 + str r0, [r3, #8] + ldr r0, [r3, #8] +_0801C2A8: + adds r4, #1 + cmp r4, #0x17 + ble _0801C26C + adds r2, r6, #0 + ldrb r3, [r2, #0x13] + movs r0, #0x13 + ldrsb r0, [r2, r0] + cmp r0, #0 + bge _0801C2C8 + movs r1, #0x7f + ands r1, r3 + strb r1, [r2, #0x13] + movs r0, #0x8d + lsls r0, r0, #1 + bl sub_0801C2F0 +_0801C2C8: + ldrb r2, [r6, #0x14] + movs r0, #0x14 + ldrsb r0, [r6, r0] + cmp r0, #0 + bge _0801C2E0 + movs r1, #0x7f + ands r1, r2 + strb r1, [r6, #0x14] + movs r0, #0x93 + lsls r0, r0, #1 + bl sub_0801C2F0 +_0801C2E0: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801C2E4: .4byte gUnk_0200AF34 +_0801C2E8: .4byte 0x040000D4 +_0801C2EC: .4byte 0x06010000 + + thumb_func_start sub_0801C2F0 +sub_0801C2F0: @ 0x0801C2F0 + push {r4, r5, lr} + adds r4, r0, #0 + adds r0, r1, #0 + lsls r5, r4, #5 + ldr r1, _0801C330 @ =0x06010000 + adds r4, r5, r1 + movs r1, #0xa + bl Div + cmp r0, #9 + bls _0801C308 + movs r0, #9 +_0801C308: + ldr r2, _0801C334 @ =0x040000D4 + lsls r0, r0, #5 + ldr r3, _0801C338 @ =gUnk_085C4620 + adds r0, r0, r3 + str r0, [r2] + str r4, [r2, #4] + ldr r4, _0801C33C @ =0x84000008 + str r4, [r2, #8] + ldr r0, [r2, #8] + adds r1, #0xa + lsls r1, r1, #5 + adds r1, r1, r3 + str r1, [r2] + ldr r1, _0801C340 @ =0x06010020 + adds r0, r5, r1 + str r0, [r2, #4] + str r4, [r2, #8] + ldr r0, [r2, #8] + pop {r4, r5, pc} + .align 2, 0 +_0801C330: .4byte 0x06010000 +_0801C334: .4byte 0x040000D4 +_0801C338: .4byte gUnk_085C4620 +_0801C33C: .4byte 0x84000008 +_0801C340: .4byte 0x06010020 diff --git a/asm/code_08055FF4.s b/asm/code_08055FF4.s index 26340196..40a852d4 100644 --- a/asm/code_08055FF4.s +++ b/asm/code_08055FF4.s @@ -434,8 +434,8 @@ _08056324: pop {r4, pc} .align 2, 0 - thumb_func_start sub_08056328 -sub_08056328: @ 0x08056328 + thumb_func_start NulledItem +NulledItem: @ 0x08056328 push {lr} bl DeleteThisEntity pop {pc} diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s index 1dd3fb8b..1fe8ae46 100644 --- a/asm/code_080732D0.s +++ b/asm/code_080732D0.s @@ -4331,8 +4331,8 @@ sub_080752E8: @ 0x080752E8 .align 2, 0 _080752FC: .4byte gItemFunctions - thumb_func_start CellOverwriteSet -CellOverwriteSet: @ 0x08075300 + thumb_func_start DebugItem +DebugItem: @ 0x08075300 push {r4, r5, lr} adds r4, r0, #0 adds r5, r1, #0 diff --git a/asm/dampe.s b/asm/dampe.s deleted file mode 100644 index 697d35f8..00000000 --- a/asm/dampe.s +++ /dev/null @@ -1,245 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Dampe -Dampe: @ 0x0806BDAC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0806BDE6 - cmp r0, #1 - bgt _0806BDC0 - cmp r0, #0 - beq _0806BDC6 - b _0806BE3A -_0806BDC0: - cmp r0, #2 - beq _0806BE26 - b _0806BE3A -_0806BDC6: - 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] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD50 - b _0806BE3A -_0806BDE6: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806BE1C - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - ldr r1, _0806BE18 @ =gLinkEntity - adds r0, r4, #0 - bl sub_080045C4 - bl sub_0806F5A4 - adds r1, r0, #0 - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 - b _0806BE3A - .align 2, 0 -_0806BE18: .4byte gLinkEntity -_0806BE1C: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - b _0806BE3A -_0806BE26: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806BE3A - movs r0, #1 - strb r0, [r4, #0xc] -_0806BE3A: - pop {r4, pc} - - thumb_func_start sub_0806BE3C -sub_0806BE3C: @ 0x0806BE3C - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start Dampe_Fusion -Dampe_Fusion: @ 0x0806BE54 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _0806BE7A - 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, #2 - bl InitAnimationForceUpdate - b _0806BE80 -_0806BE7A: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_0806BE80: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0806BE84 -sub_0806BE84: @ 0x0806BE84 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r4, r1, #0 - movs r0, #0 - str r0, [r4, #0x14] - movs r5, #1 - movs r0, #0x69 - bl CheckLocalFlag - cmp r0, #0 - bne _0806BEA6 - movs r5, #0 - movs r0, #0x69 - bl SetLocalFlag - movs r0, #1 - str r0, [r4, #0x14] -_0806BEA6: - movs r0, #0x3c - bl GetInventoryValue - cmp r0, #1 - bls _0806BEB2 - movs r5, #2 -_0806BEB2: - ldr r0, _0806BEC4 @ =gUnk_08113344 - lsls r1, r5, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r6, #0 - bl TextboxNoOverlap - pop {r4, r5, r6, pc} - .align 2, 0 -_0806BEC4: .4byte gUnk_08113344 - - thumb_func_start sub_0806BEC8 -sub_0806BEC8: @ 0x0806BEC8 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - movs r4, #0 - str r4, [r5, #0x14] - movs r0, #0x3c - bl GetInventoryValue - cmp r0, #1 - bne _0806BEE2 - movs r4, #1 - str r4, [r5, #0x14] - b _0806BEE8 -_0806BEE2: - cmp r0, #1 - bls _0806BEE8 - movs r4, #2 -_0806BEE8: - ldr r0, _0806BEF8 @ =gUnk_0811334A - 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 -_0806BEF8: .4byte gUnk_0811334A - - thumb_func_start sub_0806BEFC -sub_0806BEFC: @ 0x0806BEFC - push {lr} - movs r0, #0xbf - lsls r0, r0, #1 - ldr r1, _0806BF2C @ =0x0000058E - movs r2, #1 - bl SetTileType - ldr r0, _0806BF30 @ =0x0000017F - ldr r1, _0806BF34 @ =0x0000058F - movs r2, #1 - bl SetTileType - movs r0, #0xc0 - lsls r0, r0, #1 - ldr r1, _0806BF38 @ =0x000005CE - movs r2, #1 - bl SetTileType - ldr r0, _0806BF3C @ =0x00000181 - ldr r1, _0806BF40 @ =0x000005CF - movs r2, #1 - bl SetTileType - pop {pc} - .align 2, 0 -_0806BF2C: .4byte 0x0000058E -_0806BF30: .4byte 0x0000017F -_0806BF34: .4byte 0x0000058F -_0806BF38: .4byte 0x000005CE -_0806BF3C: .4byte 0x00000181 -_0806BF40: .4byte 0x000005CF - - thumb_func_start sub_0806BF44 -sub_0806BF44: @ 0x0806BF44 - push {r4, r5, lr} - adds r2, r0, #0 - adds r4, r1, #0 - movs r0, #0 - str r0, [r4, #0x14] - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldr r3, _0806BF78 @ =gRoomControls - movs r5, #0xa - ldrsh r1, [r3, r5] - subs r0, r0, r1 - adds r0, #0x10 - ldr r1, _0806BF7C @ =0x0000010F - cmp r0, r1 - bhi _0806BF76 - movs r1, #0x32 - ldrsh r0, [r2, r1] - movs r2, #0xc - ldrsh r1, [r3, r2] - subs r0, r0, r1 - adds r0, #0x18 - cmp r0, #0xcf - bhi _0806BF76 - movs r0, #1 - str r0, [r4, #0x14] -_0806BF76: - pop {r4, r5, pc} - .align 2, 0 -_0806BF78: .4byte gRoomControls -_0806BF7C: .4byte 0x0000010F diff --git a/data/data_080B2A70.s b/data/data_080B2A70.s index c89057be..bee9d349 100644 --- a/data/data_080B2A70.s +++ b/data/data_080B2A70.s @@ -8,7 +8,4 @@ gUnk_080B2A70:: @ 080B2A70 .incbin "baserom.gba", 0x0B2A70, 0x0000268 gUnk_080B2CD8:: @ 080B2CD8 - .incbin "baserom.gba", 0x0B2CD8, 0x0000010 - -gUnk_080B2CE8:: @ 080B2CE8 - .incbin "baserom.gba", 0x0B2CE8, 0x0000064 + .incbin "baserom.gba", 0x0B2CD8, 0x0000010 \ No newline at end of file diff --git a/data/playerItemFunctions.s b/data/playerItemFunctions.s new file mode 100644 index 00000000..82723b78 --- /dev/null +++ b/data/playerItemFunctions.s @@ -0,0 +1,61 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + .align 2 + + gPlayerItemFunctions:: @ gPlayerItemFunctions +@ replacing .incbin "baserom.gba", 0x000b2ce8, 0x64 +/*0x00*/ .4byte DeleteEntity +/*0x01*/ .4byte sub_080A7544 +/*0x02*/ .4byte sub_0801B188 +/*0x03*/ .4byte sub_0801B45C +/*0x04*/ .4byte sub_08018FCC +/*0x05*/ .4byte sub_080A2D74 +/*0x06*/ .4byte sub_08054A40 +/*0x07*/ .4byte sub_08056330 +/*0x08*/ .4byte sub_080ADA30 +/*0x09*/ .4byte sub_080704BC +/*0x0a*/ .4byte DeleteEntity +/*0x0b*/ .4byte DeleteEntity +/*0x0c*/ .4byte sub_0801B898 +/*0x0d*/ .4byte CellOverwriteSet +/*0x0e*/ .4byte SwordSpin +/*0x0f*/ .4byte SwordBeam +/*0x10*/ .4byte sub_080ACBCC +/*0x11*/ .4byte sub_08018C88 +/*0x12*/ .4byte sub_080700E8 +/*0x13*/ .4byte sub_080ACF14 +/*0x14*/ .4byte sub_0805FBD0 +/*0x15*/ .4byte sub_080A306C +/*0x16*/ .4byte SwordBeam +/*0x17*/ .4byte NulledItem +/*0x18*/ .4byte CellOverwriteSet + +/* +.4byte DeleteEntity +.4byte sub_080A7544 +.4byte sub_0801B188 +.4byte sub_0801B45C +.4byte sub_08018FCC +.4byte sub_080A2D74 +.4byte sub_08054A40 +.4byte sub_08056330 +.4byte sub_080ADA30 +.4byte sub_080704BC +.4byte DeleteEntity +.4byte DeleteEntity +.4byte sub_0801B898 +.4byte CellOverwriteSet +.4byte SwordSpin +.4byte SwordBeam +.4byte sub_080ACBCC +.4byte sub_08018C88 +.4byte sub_080700E8 +.4byte sub_080ACF14 +.4byte sub_0805FBD0 +.4byte sub_080A306C +.4byte SwordBeam +.4byte NulledItem +.4byte CellOverwriteSet +*/ \ No newline at end of file diff --git a/include/item.h b/include/item.h index 18ba2620..86f82876 100644 --- a/include/item.h +++ b/include/item.h @@ -16,7 +16,7 @@ typedef struct { u8 unk5; } ItemBehavior; -void extern CellOverwriteSet(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); void extern Sword(ItemBehavior*, u32); void extern Sword(ItemBehavior*, u32); void extern Sword(ItemBehavior*, u32); @@ -38,11 +38,11 @@ void extern PacciCane(ItemBehavior*, u32); void extern MoleMitts(ItemBehavior*, u32); void extern RocsCape(ItemBehavior*, u32); void extern sub_08076800(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); void Ocarina(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); void extern TryPickupObject(ItemBehavior*, u32); void extern JarEmpty(ItemBehavior*, u32); void extern JarEmpty(ItemBehavior*, u32); diff --git a/linker.ld b/linker.ld index d4f3553c..9b77642b 100644 --- a/linker.ld +++ b/linker.ld @@ -303,6 +303,8 @@ SECTIONS { asm/bowUse.o(.text); asm/sub_08019410.o(.text); asm/code_08019444.o(.text); + asm/cellOverwriteSet.o(.text); + asm/code_0801C1D4.o(.text); asm/drawUI.o(.text); asm/code_0801C370.o(.text); asm/drawRupees.o(.text); @@ -591,7 +593,7 @@ SECTIONS { asm/librarians.o(.text); asm/farmers.o(.text); asm/carlov.o(.text); - asm/dampe.o(.text); + src/dampe.o(.text); asm/drLeft.o(.text); asm/kingGustaf.o(.text); asm/gina.o(.text); @@ -640,7 +642,7 @@ SECTIONS { src/sub_0807B930.o(.text); asm/code_0807B9B8.o(.text); src/sub_0807C998.o(.text); - src/sub_0801D754.o(.text); + src/sub_0801D754.o(.text); /* ??? */ asm/sub_0807CA18.o(.text); asm/getInventoryValue.o(.text); asm/code_0807CAA0.o(.text); @@ -886,6 +888,7 @@ SECTIONS { asm/intr.o(.text); /* data */ data/data_080B2A70.o(.rodata); + data/playerItemFunctions.o(.rodata); src/object.o(.rodata); data/data_080B3054.o(.rodata); src/npc.o(.rodata); diff --git a/src/dampe.c b/src/dampe.c new file mode 100644 index 00000000..511acd19 --- /dev/null +++ b/src/dampe.c @@ -0,0 +1,132 @@ +#include "global.h" +#include "entity.h" +#include "link.h" +#include "room.h" + +extern void sub_0805E3A0(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern void sub_080045C4(Entity*, Entity*); +extern void InitAnimationForceUpdate(Entity*, u32); +extern u32 sub_0806F5A4(void); +extern void sub_0806F118(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern void UpdateAnimationSingleFrame(Entity*); +extern u32 UpdateFuseInteraction(Entity*); +extern u32 sub_0801E99C(void); +extern void sub_08078784(Entity*, u32); +extern u32 CheckLocalFlag(u32); +extern void SetLocalFlag(u32); +extern u32 GetInventoryValue(u32); +extern void TextboxNoOverlap(u16, Entity*); +extern void SetTileType(u32, u32, u32); + +extern u16 gUnk_08113344[]; +extern u16 gUnk_0811334A[]; + +typedef struct { + u8 filler[18]; + u32 unk; +} struct_0806BE84; + +void Dampe(Entity* this) { + + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.b.ss0 = 1; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + return; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + sub_080045C4(this, &gLinkEntity); + InitAnimationForceUpdate(this, sub_0806F5A4() + 4); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } + return; + case 2: + UpdateAnimationSingleFrame(this); + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + default: + } +} + +void sub_0806BE3C(Entity *this) +{ + this->field_0x68 = sub_0801E99C(); + sub_08078784(this, this->field_0x68); +} + +void Dampe_Fusion(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->spriteSettings.b.ss0 = 1; + InitAnimationForceUpdate(this, 2); + } + else { + UpdateAnimationSingleFrame(this); + } +} + +void sub_0806BE84(Entity *this, struct_0806BE84* r1) +{ + u32 iVar3; + + r1->unk = 0; + iVar3 = 1; + if (!CheckLocalFlag(0x69)) { + iVar3 = 0; + SetLocalFlag(0x69); + r1->unk = 1; + } + // Graveyard key + if (2 <= GetInventoryValue(0x3C)) { + iVar3 = 2; + } + TextboxNoOverlap(gUnk_08113344[iVar3], this); +} + +void sub_0806BEC8(Entity *this, struct_0806BE84* r1) +{ + u32 uVar1; + u32 iVar2; + + iVar2 = 0; + r1->unk = 0; + uVar1 = GetInventoryValue(0x3C); + if (uVar1 == 1) { + iVar2 = 1; + r1->unk = 1; + } + else { + if (1 < uVar1) { + iVar2 = 2; + } + } + + TextboxNoOverlap(gUnk_0811334A[iVar2], this); +} + +void sub_0806BEFC(void) +{ + SetTileType(0x17E, 0x58E, 1); + SetTileType(0x17F, 0x58F, 1); + SetTileType(0x180, 0x5cE, 1); + SetTileType(0x181, 0x5cF, 1); +} + +void sub_0806BF44(Entity *this, struct_0806BE84 *r1) +{ + r1->unk = 0; + if (((this->x.HALF.HI - gRoomControls.roomScrollX) + 0x10U < 0x110) && + ((this->y.HALF.HI - gRoomControls.roomScrollY) + 0x18U < 0xd0)) { + r1->unk = 1; + } +} diff --git a/src/item.c b/src/item.c index 49afb9e6..b0386445 100644 --- a/src/item.c +++ b/src/item.c @@ -2,8 +2,10 @@ #include "entity.h" #include "item.h" + +// TODO - How does this relate to PlayerItemFunctions? Is this just a lookup table? void (*const gItemFunctions[])(ItemBehavior*, u32) = { - CellOverwriteSet, + DebugItem, Sword, Sword, Sword, @@ -25,11 +27,11 @@ void (*const gItemFunctions[])(ItemBehavior*, u32) = { MoleMitts, RocsCape, sub_08076800, - CellOverwriteSet, + DebugItem, Ocarina, - CellOverwriteSet, - CellOverwriteSet, - CellOverwriteSet, + DebugItem, + DebugItem, + DebugItem, TryPickupObject, JarEmpty, JarEmpty, From d49be370d4e156d430aa405d2d0f176dfc5f780a Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 7 Jul 2020 16:48:16 -0700 Subject: [PATCH 07/25] header clean up --- include/entity.h | 19 ++++- include/functions.h | 11 +-- include/link.h | 4 ++ include/npc.h | 9 +-- include/room.h | 3 + include/sprite.h | 8 +++ linker.ld | 2 +- src/archway.c | 2 +- src/{bitGetters.c => area.c} | 0 src/bell.c | 4 -- src/bigGoron.c | 2 +- src/bladeBrothers.c | 1 - src/bombPeahat.c | 1 - src/chestSpawner.c | 4 +- src/cloud.c | 3 +- src/cow.c | 2 - src/createEnemy.c | 4 +- src/createEntity.c | 1 - src/dampe.c | 132 ++++++++++++++++------------------- src/hangingSeed.c | 1 - src/heartContainer.c | 2 +- src/keese.c | 3 - src/lakituCloud.c | 7 +- src/mailbox.c | 9 +-- src/mask.c | 2 - src/milkCart.c | 5 +- src/miniFireballGuy.c | 2 - src/object1A.c | 1 - src/octorok.c | 2 - src/rem.c | 1 - src/simon.c | 1 - src/slime.c | 3 - src/smallPesto.c | 1 - src/stamp.c | 24 ------- src/syrup.c | 4 +- src/talon.c | 4 +- src/textbox.c | 2 - src/well.c | 3 +- src/windTribespeople.c | 9 +-- src/zelda.c | 5 +- 40 files changed, 115 insertions(+), 188 deletions(-) rename src/{bitGetters.c => area.c} (100%) diff --git a/include/entity.h b/include/entity.h index c912c917..a1dc11dd 100644 --- a/include/entity.h +++ b/include/entity.h @@ -153,6 +153,23 @@ typedef struct Entity { } Entity; -#define COORD_TO_TILE(entity) ((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | (((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) +#define COORD_TO_TILE(entity) \ + ((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ + (((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) + +extern void InitializeAnimation(Entity*, u32); +extern void InitAnimationForceUpdate(Entity*, u32); +extern void UpdateAnimationSingleFrame(Entity*); +extern void UpdateSpriteOrderAndFlip(Entity*); +extern void GetNextFrame(Entity*); +extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); +extern void SetExtraSpriteFrame(Entity*, u32, u32); +extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); + +extern Entity* CreateEnemy(u32 subtype, u32 form); +extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); +extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); +extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter); +extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter); #endif diff --git a/include/functions.h b/include/functions.h index 454b8480..c715694d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -9,28 +9,19 @@ // Identified - to be sorted into header files extern u32 Random(void); extern void PlaySFX(u32); -extern void UpdateSpriteOrderAndFlip(Entity*); -extern void InitAnimationForceUpdate(Entity*, u32); extern void ShowNPCDialogue(Entity*, u32*); extern u32 UpdateFuseInteraction(); -extern void InitializeAnimation(Entity*, u32); extern void DeleteEntity(Entity*); extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); -extern void UpdateAnimationSingleFrame(Entity*); extern u32 GetInventoryValue(u32); -extern Entity* CreateFx(Entity*, u32, u32); extern u32 CheckKinstoneFused(u32); extern void ForceEquipItem(u8, u8); extern void LoadRoomEntityList(); -void ModHealth(s32); void CopyPosition(Entity*, Entity*); extern u32* StartCutscene(Entity*, u8*); -extern void GetNextFrame(Entity*); -extern u32 LoadExtraSpriteData(Entity*, u32*); extern void ResolveEntityOnTop(Entity*, Entity*); -extern void SetExtraSpriteFrame(Entity*, u32, u32); -extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); + // Unidentified extern void sub_0806ED78(Entity*); diff --git a/include/link.h b/include/link.h index 8ec7259d..f6ce96be 100644 --- a/include/link.h +++ b/include/link.h @@ -76,4 +76,8 @@ extern LinkState gLinkState; extern Stats gStats; extern Entity gLinkEntity; + +extern u32 GetInventoryValue(u32); +extern s32 ModHealth(s32); + #endif \ No newline at end of file diff --git a/include/npc.h b/include/npc.h index 32b575c9..b1a7c2b5 100644 --- a/include/npc.h +++ b/include/npc.h @@ -4,12 +4,6 @@ #ifndef NPC_H #define NPC_H -typedef struct { - u16 palette; - u8 animIndex; - u8 unk; -} SpriteLoadData; - extern void Gentari(Entity*); extern void Gentari_Fusion(Entity*); extern void Festari(Entity*); @@ -175,4 +169,7 @@ extern void Phonograph(Entity*); extern void NPC58(Entity*); extern void NPC58_Head(Entity*); + +extern u32 UpdateFuseInteraction(Entity*); + #endif \ No newline at end of file diff --git a/include/room.h b/include/room.h index 7a55d58c..ccde88c8 100644 --- a/include/room.h +++ b/include/room.h @@ -60,4 +60,7 @@ typedef struct { extern RoomControls gRoomControls; extern RoomVars gRoomVars; + +extern void SetTileType(u32, u32, u32); + #endif \ No newline at end of file diff --git a/include/sprite.h b/include/sprite.h index 2132d98d..7d2507d7 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -2,6 +2,7 @@ #define SPRITE_H #include "global.h" +#include "entity.h" typedef struct { u8 index; @@ -28,4 +29,11 @@ typedef struct { u8 numGfxTiles; u16 gfxTileIndex; } FrameGfxData; + +typedef struct { + u16 palette; + u8 animIndex; + u8 unk; +} SpriteLoadData; + #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index 9b77642b..7586253b 100644 --- a/linker.ld +++ b/linker.ld @@ -450,7 +450,7 @@ SECTIONS { asm/initializeLink.o(.text); src/sub_08052620.o(.text); src/sub_08052638.o(.text); - src/bitGetters.o(.text); + src/area.o(.text); src/modHealth.o(.text); src/modRupees.o(.text); asm/code_080526F8.o(.text); diff --git a/src/archway.c b/src/archway.c index 4596b42c..af72be33 100644 --- a/src/archway.c +++ b/src/archway.c @@ -1,7 +1,7 @@ #include "global.h" #include "entity.h" +#include "sprite.h" -extern void UpdateSpriteOrderAndFlip(); extern u32 CheckIsDungeon(); void Archway(Entity *this) diff --git a/src/bitGetters.c b/src/area.c similarity index 100% rename from src/bitGetters.c rename to src/area.c diff --git a/src/bell.c b/src/bell.c index 5b21eaee..467a6977 100644 --- a/src/bell.c +++ b/src/bell.c @@ -1,12 +1,8 @@ #include "entity.h" #include "global.h" -extern void UpdateAnimationSingleFrame(); extern void (*gUnk_08123384[])(Entity*); -extern void UpdateSpriteOrderAndFlip(Entity*); -extern void InitAnimationForceUpdate(); - void Bell(Entity* ent) { gUnk_08123384[ent->action](ent); } diff --git a/src/bigGoron.c b/src/bigGoron.c index 28405514..0d6b9f3f 100644 --- a/src/bigGoron.c +++ b/src/bigGoron.c @@ -1,10 +1,10 @@ #include "global.h" #include "entity.h" +#include "link.h" extern void (*gUnk_081140D4[])(Entity*); extern u16 gUnk_081140CC[]; -extern Entity gLinkEntity; extern u32 gUnk_030010A0; extern void sub_0805E3A0(Entity*, u32); extern void sub_0806D0B0(Entity*); diff --git a/src/bladeBrothers.c b/src/bladeBrothers.c index 69a981f0..361eea9b 100644 --- a/src/bladeBrothers.c +++ b/src/bladeBrothers.c @@ -22,7 +22,6 @@ extern void (*gUnk_081115D0[])(Entity*); extern struct_030010A0 gUnk_030010A0; extern u16 gUnk_081115DC[]; -extern Entity gLinkEntity; extern u8 gUnk_08111618[]; extern u32* gUnk_081115EC[]; extern struct_02002A40 gUnk_02002A40; diff --git a/src/bombPeahat.c b/src/bombPeahat.c index b5dda939..3921737a 100644 --- a/src/bombPeahat.c +++ b/src/bombPeahat.c @@ -7,7 +7,6 @@ extern s32 sub_080012DC(Entity*); extern u32 GetNextFunction(Entity*); extern void sub_0802AD54(Entity*); extern void sub_0802B048(Entity*); -extern void InitializeAnimation(Entity*, u32); extern void sub_0806F4E8(Entity*); extern void sub_0806F3E4(Entity*); diff --git a/src/chestSpawner.c b/src/chestSpawner.c index ac50a692..b3dcfb4a 100644 --- a/src/chestSpawner.c +++ b/src/chestSpawner.c @@ -1,11 +1,9 @@ #include "global.h" #include "entity.h" +#include "flags.h" extern void sub_080842D8(Entity*); extern void sub_08078828(Entity*); -extern u32 CheckLocalFlag(u32); -extern void InitializeAnimation(Entity*, u32); -extern u32 CheckFlags(u32); extern void sub_08083E20(Entity*); extern void (*const gUnk_0811F7E8[])(Entity*); diff --git a/src/cloud.c b/src/cloud.c index 297fbbc5..6701cf13 100644 --- a/src/cloud.c +++ b/src/cloud.c @@ -2,18 +2,17 @@ #include "entity.h" #include "room.h" #include "link.h" +#include "flags.h" extern void sub_0809F7BC(Entity*); extern void PlaySFX(u32); extern void sub_0809F814(u32); extern void sub_0809F7F4(Entity*); -extern void SetGlobalFlag(u32); extern void LoadRoomEntityList(); extern void DeleteThisEntity(); extern u32 CheckRoomFlag(u32); extern void sub_08078A90(u32); extern void sub_08078B48(void); -extern u32 SetLocalFlag(u32); extern u32 Random(void); extern void sub_0806F69C(Entity*); extern void (*gUnk_08124798[])(Entity*); diff --git a/src/cow.c b/src/cow.c index 9a1ebba3..7422bd28 100644 --- a/src/cow.c +++ b/src/cow.c @@ -4,7 +4,6 @@ extern void sub_0806ED78(Entity*); extern void sub_0806920C(Entity*); -extern void UpdateAnimationSingleFrame(Entity*); extern u32 sub_0805ACC0(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_0806924C(Entity*); @@ -17,7 +16,6 @@ extern void sub_080791D0(); extern void (*gUnk_08111914[])(Entity*); extern void (*gUnk_08111928[])(Entity*); extern u32 gUnk_08111938[]; -extern void InitAnimationForceUpdate(); extern void PlaySFX(u32); extern u32 Random(); extern u32 UpdateFuseInteraction(Entity*); diff --git a/src/createEnemy.c b/src/createEnemy.c index 7dc492ff..6090da14 100644 --- a/src/createEnemy.c +++ b/src/createEnemy.c @@ -4,14 +4,14 @@ extern Entity* GetEmptyEntity(); extern void sub_0805EA2C(Entity*, u8); -Entity* CreateEnemy(u32 subtype, u32 param1) { +Entity* CreateEnemy(u32 subtype, u32 form) { Entity* enemy; enemy = GetEmptyEntity(); if (enemy != NULL) { (enemy->entityType).type = 3; (enemy->entityType).subtype = subtype; - (enemy->entityType).form = param1; + (enemy->entityType).form = form; sub_0805EA2C(enemy, 4); } return enemy; diff --git a/src/createEntity.c b/src/createEntity.c index 1119b4b7..9d597c4c 100644 --- a/src/createEntity.c +++ b/src/createEntity.c @@ -29,7 +29,6 @@ // sub_0804AEB0(entity,param_1); // if ((param_1->field_0x1 & 240) != 16) { // (entity->entityType).parameter = *(u8 *)¶m_1->entityparameter; -// /* i suspect this is where the entity's behavior is defined. Not sure. */ // entity->actionDelay = (u8)((u32)param_1->entityparameter >> 8); // if ((type != 9) && (sub_0804AF0C(entity,param_1), entity->field_0x4 != NULL)) { // if ((param_1->entityType & 16) == 0) { diff --git a/src/dampe.c b/src/dampe.c index 511acd19..983b030a 100644 --- a/src/dampe.c +++ b/src/dampe.c @@ -2,23 +2,19 @@ #include "entity.h" #include "link.h" #include "room.h" +#include "flags.h" +#include "sprite.h" +#include "textbox.h" +#include "npc.h" extern void sub_0805E3A0(Entity*, u32); extern void sub_0807DD50(Entity*); extern void sub_080045C4(Entity*, Entity*); -extern void InitAnimationForceUpdate(Entity*, u32); extern u32 sub_0806F5A4(void); extern void sub_0806F118(Entity*); extern void sub_0807DD94(Entity*, u32); -extern void UpdateAnimationSingleFrame(Entity*); -extern u32 UpdateFuseInteraction(Entity*); extern u32 sub_0801E99C(void); extern void sub_08078784(Entity*, u32); -extern u32 CheckLocalFlag(u32); -extern void SetLocalFlag(u32); -extern u32 GetInventoryValue(u32); -extern void TextboxNoOverlap(u16, Entity*); -extern void SetTileType(u32, u32, u32); extern u16 gUnk_08113344[]; extern u16 gUnk_0811334A[]; @@ -57,76 +53,66 @@ void Dampe(Entity* this) { } } -void sub_0806BE3C(Entity *this) -{ - this->field_0x68 = sub_0801E99C(); - sub_08078784(this, this->field_0x68); +void sub_0806BE3C(Entity* this) { + this->field_0x68 = sub_0801E99C(); + sub_08078784(this, this->field_0x68); } -void Dampe_Fusion(Entity *this) -{ - if (this->action == 0) { - this->action++; - this->spriteSettings.b.ss0 = 1; - InitAnimationForceUpdate(this, 2); - } - else { - UpdateAnimationSingleFrame(this); - } -} - -void sub_0806BE84(Entity *this, struct_0806BE84* r1) -{ - u32 iVar3; - - r1->unk = 0; - iVar3 = 1; - if (!CheckLocalFlag(0x69)) { - iVar3 = 0; - SetLocalFlag(0x69); - r1->unk = 1; - } - // Graveyard key - if (2 <= GetInventoryValue(0x3C)) { - iVar3 = 2; - } - TextboxNoOverlap(gUnk_08113344[iVar3], this); -} - -void sub_0806BEC8(Entity *this, struct_0806BE84* r1) -{ - u32 uVar1; - u32 iVar2; - - iVar2 = 0; - r1->unk = 0; - uVar1 = GetInventoryValue(0x3C); - if (uVar1 == 1) { - iVar2 = 1; - r1->unk = 1; - } - else { - if (1 < uVar1) { - iVar2 = 2; +void Dampe_Fusion(Entity* this) { + if (this->action == 0) { + this->action++; + this->spriteSettings.b.ss0 = 1; + InitAnimationForceUpdate(this, 2); + } else { + UpdateAnimationSingleFrame(this); } - } - - TextboxNoOverlap(gUnk_0811334A[iVar2], this); } -void sub_0806BEFC(void) -{ - SetTileType(0x17E, 0x58E, 1); - SetTileType(0x17F, 0x58F, 1); - SetTileType(0x180, 0x5cE, 1); - SetTileType(0x181, 0x5cF, 1); +void sub_0806BE84(Entity* this, struct_0806BE84* r1) { + u32 msgIndex; + + r1->unk = 0; + msgIndex = 1; + if (!CheckLocalFlag(0x69)) { + msgIndex = 0; + SetLocalFlag(0x69); + r1->unk = 1; + } + // Graveyard key + if (GetInventoryValue(0x3C) >= 2) { + msgIndex = 2; + } + TextboxNoOverlap(gUnk_08113344[msgIndex], this); } -void sub_0806BF44(Entity *this, struct_0806BE84 *r1) -{ - r1->unk = 0; - if (((this->x.HALF.HI - gRoomControls.roomScrollX) + 0x10U < 0x110) && - ((this->y.HALF.HI - gRoomControls.roomScrollY) + 0x18U < 0xd0)) { - r1->unk = 1; - } +void sub_0806BEC8(Entity* this, struct_0806BE84* r1) { + u32 hasGraveyardKey; + u32 msgIndex; + + msgIndex = 0; + r1->unk = 0; + hasGraveyardKey = GetInventoryValue(0x3C); + if (hasGraveyardKey == 1) { + msgIndex = 1; + r1->unk = 1; + } else if (hasGraveyardKey >= 2) { + msgIndex = 2; + } + + TextboxNoOverlap(gUnk_0811334A[msgIndex], this); +} + +void sub_0806BEFC() { + SetTileType(0x17E, 0x58E, 1); + SetTileType(0x17F, 0x58F, 1); + SetTileType(0x180, 0x5CE, 1); + SetTileType(0x181, 0x5CF, 1); +} + +void sub_0806BF44(Entity* this, struct_0806BE84* r1) { + r1->unk = 0; + if (((this->x.HALF.HI - gRoomControls.roomScrollX) + 0x10U < 0x110) && + ((this->y.HALF.HI - gRoomControls.roomScrollY) + 0x18U < 0xD0)) { + r1->unk = 1; + } } diff --git a/src/hangingSeed.c b/src/hangingSeed.c index 35653f43..ab302f19 100644 --- a/src/hangingSeed.c +++ b/src/hangingSeed.c @@ -2,7 +2,6 @@ #include "entity.h" extern void EnemyFunctionHandler(Entity*, void (*const funcs[])(Entity*)); -extern void CreateFx(Entity*, u32, u32); extern void DeleteThisEntity(); extern void (*const gUnk_080CB570[])(Entity*); diff --git a/src/heartContainer.c b/src/heartContainer.c index 643b87dd..04df84e9 100644 --- a/src/heartContainer.c +++ b/src/heartContainer.c @@ -1,7 +1,7 @@ #include "global.h" #include "entity.h" +#include "flags.h" -extern u32 CheckFlags(u32); extern void DeleteThisEntity(); extern void sub_0808E714(Entity*); diff --git a/src/keese.c b/src/keese.c index a000ab80..953f5b02 100644 --- a/src/keese.c +++ b/src/keese.c @@ -10,13 +10,10 @@ extern u32 sub_0806F3E4(Entity*); extern void sub_0804A7D4(Entity*); extern void sub_0804A720(Entity*); extern u32 Random(); -extern void UpdateSpriteOrderAndFlip(Entity*); extern void sub_08021EF0(Entity*); -extern void GetNextFrame(Entity*); extern void sub_080AEFB4(Entity*); extern void sub_08021F24(Entity*); extern u32 sub_0806FCB8(Entity*, s32, s32, u32); -extern void InitializeAnimation(Entity*, u32); extern void (*gUnk_080CB69C[])(Entity*); extern void (*gUnk_080CB6B4[])(Entity*); diff --git a/src/lakituCloud.c b/src/lakituCloud.c index ab3e36cc..5b5f9fff 100644 --- a/src/lakituCloud.c +++ b/src/lakituCloud.c @@ -1,13 +1,8 @@ #include "global.h" #include "entity.h" +#include "link.h" -extern Entity gLinkEntity; - -extern void UpdateAnimationSingleFrame(Entity *); -extern void InitAnimationForceUpdate(Entity *, s32); extern u32 GetNextFunction(Entity *); -extern void ModHealth(s32); -extern void CreateFx(Entity *, u16, u16); extern void (* const gUnk_080D0418[])(Entity *); extern void (* const gUnk_080D0430[])(Entity *); diff --git a/src/mailbox.c b/src/mailbox.c index c744cc4e..1aca5a34 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -1,12 +1,9 @@ #include "global.h" #include "entity.h" +#include "textbox.h" extern void sub_0806ED78(Entity*); -extern void InitAnimationForceUpdate(); extern void sub_08063280(); -extern void TextboxNoOverlapFollow(u32); -extern void UpdateAnimationSingleFrame(); -extern void CreateFx(); extern void (*gMailboxBehaviors[4])(Entity*); @@ -34,7 +31,7 @@ void sub_08063220(Entity* this) { } if (this->animIndex != bVar1) { - InitAnimationForceUpdate(this); + InitAnimationForceUpdate(this, bVar1); } else { sub_08063280(this, bVar1); } @@ -57,7 +54,7 @@ void sub_08063280(Entity* this, u32 unused) { u8 var; // r2@1 e = this; - UpdateAnimationSingleFrame(); + UpdateAnimationSingleFrame(e); var = e->frames.all & 0x7F; e->frames.all ^= var; if (var == 2) CreateFx(e, 49, 0); diff --git a/src/mask.c b/src/mask.c index bb867761..0d8712bb 100644 --- a/src/mask.c +++ b/src/mask.c @@ -16,8 +16,6 @@ extern void ClearFlag(u16); extern void SetTile(u32, u16, u32); -extern void CreateFx(Entity *, u16, u16); - extern void sub_08000148(u16, u16, u32); extern s16 sub_080001DA(u16, u32); extern u16 sub_080002E0(u16, u32); diff --git a/src/milkCart.c b/src/milkCart.c index 2c1bc52f..2e91ebf7 100644 --- a/src/milkCart.c +++ b/src/milkCart.c @@ -1,10 +1,7 @@ #include "global.h" #include "entity.h" -extern void _call_via_r1(Entity*, u32); extern void sub_0806ED78(); -extern void InitAnimationForceUpdate(); -extern void UpdateAnimationSingleFrame(); extern void (*gMilkCartBehaviors[2])(Entity*); @@ -16,7 +13,7 @@ void MilkCart(Entity* ent) { void sub_08065B6C(Entity* ent) { ent->action++; ent->spriteSettings.b.ss0 = 1; - (ent->y).HALF.LO += -0x8000; + ent->y.HALF.LO += -0x8000; ent->animationState = 6; InitAnimationForceUpdate(ent, 3); } diff --git a/src/miniFireballGuy.c b/src/miniFireballGuy.c index bb9ea593..e8c2744a 100644 --- a/src/miniFireballGuy.c +++ b/src/miniFireballGuy.c @@ -5,10 +5,8 @@ extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*)); extern void sub_0804AA30(Entity*, void (*const func[][])(Entity*)); extern void sub_0804A7D4(Entity*); extern void sub_0804A720(Entity*); -extern void InitializeAnimation(Entity*, u32); extern void sub_08045678(Entity*); extern void sub_080AEFE0(void); -extern void GetNextFrame(Entity*); extern u32 sub_08003FC4(Entity*, u32); extern void sub_08045678(Entity*); diff --git a/src/object1A.c b/src/object1A.c index 2cb9d9ff..54da11a9 100644 --- a/src/object1A.c +++ b/src/object1A.c @@ -1,7 +1,6 @@ #include "global.h" #include "entity.h" -extern Entity* CreateObject(); extern void CopyPosition(); extern void sub_08086A6C(); extern s32 sub_080044EC(); diff --git a/src/octorok.c b/src/octorok.c index 5c66b098..ff699ec0 100644 --- a/src/octorok.c +++ b/src/octorok.c @@ -9,14 +9,12 @@ extern void sub_0804A7D4(); extern void CreateDeathFx(); extern void sub_0801ECFC(); extern u32 sub_0806F520(); -extern void InitializeAnimation(); extern void sub_0806F4E8(); extern void sub_0806F3E4(); extern void InitializeAnimationAnimation(); extern void sub_0804A720(); extern u32 Random(); extern void sub_0801ED14(); -extern void GetNextFrame(); extern void(*gOctorok[2]); extern void (*gOctorokIdle[4])(Entity*); diff --git a/src/rem.c b/src/rem.c index 8e3fe38f..2edd917e 100644 --- a/src/rem.c +++ b/src/rem.c @@ -4,7 +4,6 @@ extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); -extern void UpdateAnimationSingleFrame(Entity*); extern void sub_0806ED78(Entity*); extern void PlaySFX(u32); extern void sub_0805E3A0(Entity*, u32); diff --git a/src/simon.c b/src/simon.c index 45046de5..4e01af67 100644 --- a/src/simon.c +++ b/src/simon.c @@ -16,7 +16,6 @@ typedef struct { extern void DoExitTransition(void *); extern void SetTileType(u32, u32, u32); -extern void CreateObjectWithParent(Entity*, u32, u32, u32); extern void DoExitTransition(void *); extern void DoFade(u32, u32); diff --git a/src/slime.c b/src/slime.c index 3738038f..3f2fdd4d 100644 --- a/src/slime.c +++ b/src/slime.c @@ -12,15 +12,12 @@ extern void SetChildOffset(Entity*, u32, u32, u32); extern void sub_0804AA30(Entity*, void*); extern void sub_0804A9FC(Entity*, u32); extern void sub_0804A720(Entity*); -extern void InitializeAnimation(Entity*, u32); extern void sub_08044FF8(Entity*); extern u32 Random(void); -extern void GetNextFrame(Entity*); extern u32 sub_0806FA04(u32, u32); extern u32 sub_08049FA0(Entity*); extern u32 sub_08049EE4(Entity*); extern u32 sub_080AEF88(void); -extern Entity* CreateEnemy(u32, u32); extern void (*gUnk_080D16BC[])(Entity*); extern void (*gUnk_080D16A4[])(Entity*); diff --git a/src/smallPesto.c b/src/smallPesto.c index 5069510c..c29fe80c 100644 --- a/src/smallPesto.c +++ b/src/smallPesto.c @@ -2,7 +2,6 @@ #include "entity.h" extern u32 GetNextFunction(Entity*); -extern u32 GetNextFrame(Entity*); extern u32 sub_0806F520(Entity*); extern void sub_0806F4E8(Entity*); extern u32 sub_0806F3E4(); diff --git a/src/stamp.c b/src/stamp.c index 656fb838..1ee9476b 100644 --- a/src/stamp.c +++ b/src/stamp.c @@ -2,15 +2,11 @@ #include "entity.h" #include "textbox.h" -extern void InitializeAnimation(Entity*, u32); extern void sub_08078778(Entity*); extern void sub_0805E47C(Entity*); -extern void GetNextFrame(Entity*); extern void sub_0806ED78(Entity*); -extern void TextboxNoOverlapFollow(u32); extern void sub_0805E584(); extern void sub_0807DD64(); -extern void CreateFx(); extern void sub_08062CA4(); extern void sub_0807DDAC(); extern void sub_0807DDE4(); @@ -20,29 +16,9 @@ extern void ShowNPCDialogue(); extern void (*gStampBehaviors1[4])(Entity*); extern void (*gStampBehaviors2[2])(Entity*); -extern TextBox gTextBox; extern u32 gUnk_0810C2E4; -extern void InitializeAnimation(Entity*, u32); -extern void sub_08078778(Entity*); -extern void sub_0805E47C(Entity*); -extern void GetNextFrame(Entity*); -extern void sub_0806ED78(Entity*); -extern void TextboxNoOverlapFollow(u32); -extern void sub_0805E584(); -extern void sub_0807DD64(); -extern void CreateFx(); -extern void sub_08062CA4(); -extern void sub_0807DDAC(); -extern void sub_0807DDE4(); -extern u32 CheckKinstoneFused(); -extern void ShowNPCDialogue(); -extern void (*gStampBehaviors1[4])(Entity*); -extern void (*gStampBehaviors2[2])(Entity*); - -extern TextBox gTextBox; -extern u32 gUnk_0810C2E4; void Stamp(Entity* ent) { if ((ent->flags & 2) != 0) { diff --git a/src/syrup.c b/src/syrup.c index 4f0badb4..341c60c8 100644 --- a/src/syrup.c +++ b/src/syrup.c @@ -4,10 +4,8 @@ extern void sub_0807DD50(Entity*); -extern Entity* LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void sub_0806ED78(Entity*); extern void sub_0805E3A0(Entity*, u32); -extern void InitializeAnimation(Entity*, u32); extern void (*gUnk_081121D4[])(Entity*); @@ -26,7 +24,7 @@ void Syrup(Entity *this) void sub_0806A1F8(Entity *this) { - Entity *iVar1; + u32 iVar1; SpriteLoadData *paVar2; (this->entityType).form == 0 ? (paVar2 = &gUnk_081121B4) : (paVar2 = &gUnk_081121C4); diff --git a/src/talon.c b/src/talon.c index 49b7de77..ab9d0b92 100644 --- a/src/talon.c +++ b/src/talon.c @@ -4,11 +4,9 @@ #include "functions.h" #include "link.h" -extern Entity gLinkEntity; - extern void (*gUnk_0810FEC4[])(Entity* this); extern void (*gUnk_0810FEBC[])(Entity* this); -extern u32 gUnk_0810FEB0; +extern SpriteLoadData gUnk_0810FEB0; extern u8 gUnk_0800B41C; extern u8 gUnk_0810FED8[]; diff --git a/src/textbox.c b/src/textbox.c index 1ec017d8..b8b82940 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -7,8 +7,6 @@ void sub_0801D630(); void ShowTextbox(); void TextboxAtPosition(); -extern TextBox gTextBox; -extern RoomControls gRoomControls; extern u32 gUnk_02022780; extern u32 gUnk_02036A40; extern u32 gUnk_02036A38; diff --git a/src/well.c b/src/well.c index fa387763..9efcd750 100644 --- a/src/well.c +++ b/src/well.c @@ -1,14 +1,13 @@ #include "global.h" #include "entity.h" #include "room.h" +#include "link.h" void SetTile(u32 tileIndex, s32 tilePosition, s32 layerIndex); s32 GetTileType(s32 tilePosition, s32 layerIndex); void sub_08078B48(); void DeleteThisEntity(); -extern Entity gLinkEntity; -extern RoomControls gRoomControls; extern void (*gUnk_08124C08[])(Entity*); void Well(Entity* ent) { diff --git a/src/windTribespeople.c b/src/windTribespeople.c index 9f176c47..01d243cd 100644 --- a/src/windTribespeople.c +++ b/src/windTribespeople.c @@ -2,6 +2,7 @@ #include "entity.h" #include "npc.h" #include "textbox.h" +#include "flags.h" typedef struct { u8 filler[8]; @@ -14,19 +15,13 @@ extern void sub_0806C7D4(Entity*); extern void sub_0806F118(Entity*); extern void sub_0807DD94(Entity*, u32); extern void sub_0807DD80(Entity*, u32*); -extern u32 CheckGlobalFlag(u32); -extern u32 CheckLocalFlag(u32); -extern u32 CheckRoomFlag(u32); extern u32 sub_0801E99C(); -extern void InitializeAnimation(Entity*, u32); -extern u32 UpdateFuseInteraction(); extern void sub_08078784(Entity*, u32); extern void SetExtraSpriteFrame(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); extern void sub_0807000C(Entity*); extern void ShowNPCDialogue(Entity*, u16*); -extern void TextboxNoOverlap(u32, Entity*); extern void (*const gUnk_08113A7C[])(Entity*); extern void (*const gUnk_08113A8C[])(Entity*, Entity*); @@ -80,7 +75,7 @@ void sub_0806C834(Entity* this) { } void sub_0806C85C(Entity* this) { - if (UpdateFuseInteraction() != 0) { + if (UpdateFuseInteraction(this) != 0) { this->action = 1; } } diff --git a/src/zelda.c b/src/zelda.c index 10cc79cc..a11e244b 100644 --- a/src/zelda.c +++ b/src/zelda.c @@ -1,6 +1,7 @@ #include "global.h" #include "entity.h" #include "room.h" +#include "flags.h" extern void sub_0805EA78(Entity*, u32); extern void sub_0805E3A0(Entity*, u32); @@ -10,14 +11,10 @@ extern Entity* sub_0805EB9C(u32, u32); void CopyPosition(Entity*, Entity*); void sub_08068680(Entity*, Entity*); void sub_08068694(Entity*, Entity*); -extern void SetGlobalFlag(u32); -extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); u32 sub_0806EDC4(Entity* ent); void DeleteThisEntity(void); extern Entity* GetEntityByType(u32, u32); extern void sub_080686C4(Entity*, Entity*); -extern void InitAnimationForceUpdate(Entity*, u32); -extern void UpdateAnimationSingleFrame(Entity*); extern void sub_0806F62C(Entity*, u32, u32); extern u32 sub_08003FC4(Entity*, u32); extern void PlaySFX(u32); From 6f08201b71315ad552ca5413e7e4e15e6873f65d Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 7 Jul 2020 19:19:42 -0700 Subject: [PATCH 08/25] treeHidingPortal.c --- asm/code_08018500.s | 4 +- asm/treeHidingPortal.s | 196 ----------------------------------------- include/entity.h | 5 ++ linker.ld | 1 + src/treeHidingPortal.c | 88 ++++++++++++++++++ 5 files changed, 96 insertions(+), 198 deletions(-) create mode 100644 src/treeHidingPortal.c diff --git a/asm/code_08018500.s b/asm/code_08018500.s index a730aedc..dd69e0da 100644 --- a/asm/code_08018500.s +++ b/asm/code_08018500.s @@ -925,8 +925,8 @@ _08018C10: _08018C14: .4byte gUnk_080FEAC8 _08018C18: .4byte gUnk_080FE320 - thumb_func_start sub_08018C1C -sub_08018C1C: @ 0x08018C1C + thumb_func_start CreateMinishEntrance +CreateMinishEntrance: @ 0x08018C1C push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} diff --git a/asm/treeHidingPortal.s b/asm/treeHidingPortal.s index fd37c842..e579293c 100644 --- a/asm/treeHidingPortal.s +++ b/asm/treeHidingPortal.s @@ -6,202 +6,6 @@ .text - - thumb_func_start TreeHidingPortal -TreeHidingPortal: @ 0x0809E824 - push {lr} - ldr r2, _0809E838 @ =gUnk_08124354 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809E838: .4byte gUnk_08124354 - - thumb_func_start sub_0809E83C -sub_0809E83C: @ 0x0809E83C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0809E856 - adds r0, r4, #0 - bl sub_0809E96C - bl DeleteThisEntity -_0809E856: - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0809E86C -sub_0809E86C: @ 0x0809E86C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0809E8B4 @ =gLinkEntity - movs r2, #0x30 - movs r3, #0x30 - bl sub_0800419C - cmp r0, #0 - beq _0809E89A - movs r0, #0x14 - bl CheckGlobalFlag - cmp r0, #0 - beq _0809E89A - ldr r0, _0809E8B8 @ =gUnk_030010A0 - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0809E89A - adds r0, r4, #0 - bl sub_080A2B80 -_0809E89A: - bl sub_0809E9A0 - cmp r0, #0x54 - bne _0809E8B0 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0xf - strb r0, [r4, #0xe] - movs r0, #1 - bl sub_08078A90 -_0809E8B0: - pop {r4, pc} - .align 2, 0 -_0809E8B4: .4byte gLinkEntity -_0809E8B8: .4byte gUnk_030010A0 - - thumb_func_start sub_0809E8BC -sub_0809E8BC: @ 0x0809E8BC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809E8E8 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #0x40 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl sub_0809E96C - adds r0, r4, #0 - bl sub_0809E918 -_0809E8E8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0809E8EC -sub_0809E8EC: @ 0x0809E8EC - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0809E916 - adds r0, r1, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - movs r0, #0 - bl sub_08078A90 - movs r0, #0x73 - bl PlaySFX - bl DeleteThisEntity -_0809E916: - pop {pc} - - thumb_func_start sub_0809E918 -sub_0809E918: @ 0x0809E918 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r4, _0809E964 @ =gUnk_08124364 - movs r1, #0 - ldrsh r0, [r4, r1] - ldr r1, _0809E968 @ =0xFFFFFC18 - cmp r0, r1 - beq _0809E962 - adds r6, r1, #0 -_0809E92A: - adds r0, r5, #0 - movs r1, #3 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _0809E958 - ldrh r0, [r4] - ldrh r1, [r2, #0x2e] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - ldrh r0, [r4, #2] - ldrh r1, [r2, #0x32] - adds r0, r0, r1 - strh r0, [r2, #0x32] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip -_0809E958: - adds r4, #4 - movs r1, #0 - ldrsh r0, [r4, r1] - cmp r0, r6 - bne _0809E92A -_0809E962: - pop {r4, r5, r6, pc} - .align 2, 0 -_0809E964: .4byte gUnk_08124364 -_0809E968: .4byte 0xFFFFFC18 - - thumb_func_start sub_0809E96C -sub_0809E96C: @ 0x0809E96C - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _0809E99C @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, #0x20 - 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] - adds r2, #8 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - bl sub_08018C1C - pop {r4, r5, pc} - .align 2, 0 -_0809E99C: .4byte gRoomControls - thumb_func_start sub_0809E9A0 sub_0809E9A0: @ 0x0809E9A0 push {r4, r5, r6, lr} diff --git a/include/entity.h b/include/entity.h index a1dc11dd..afa1cc24 100644 --- a/include/entity.h +++ b/include/entity.h @@ -157,6 +157,10 @@ typedef struct Entity { ((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ (((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) +#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \ + ((((entity->x.HALF.HI - xOff - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ + (((entity->y.HALF.HI - yOff - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) + extern void InitializeAnimation(Entity*, u32); extern void InitAnimationForceUpdate(Entity*, u32); extern void UpdateAnimationSingleFrame(Entity*); @@ -172,4 +176,5 @@ extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter); extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter); +extern void DeleteThisEntity(); #endif diff --git a/linker.ld b/linker.ld index 7586253b..4a36d0c4 100644 --- a/linker.ld +++ b/linker.ld @@ -811,6 +811,7 @@ SECTIONS { asm/object99.o(.text); asm/macroAcorn.o(.text); asm/object9B.o(.text); + src/treeHidingPortal.o(.text); asm/treeHidingPortal.o(.text); src/lightableSwitch.o(.text); asm/object9E.o(.text); diff --git a/src/treeHidingPortal.c b/src/treeHidingPortal.c new file mode 100644 index 00000000..39bc2128 --- /dev/null +++ b/src/treeHidingPortal.c @@ -0,0 +1,88 @@ +#include "global.h" +#include "entity.h" +#include "flags.h" +#include "link.h" +#include "room.h" + +extern void sub_0809E96C(Entity*); +extern u32 sub_0800419C(Entity*, Entity*, u32, u32); +extern void sub_080A2B80(Entity*); +extern u32 sub_0809E9A0(void); +extern void sub_08078A90(u32); +extern void sub_0809E918(Entity*); +extern void PlaySFX(u32); +extern void CreateMinishEntrance(u32 tile); + +extern void (*const gUnk_08124354[])(Entity*); + +extern u32 gUnk_030010A0; +extern s16 gUnk_08124364[]; + +void TreeHidingPortal(Entity* this) { + gUnk_08124354[this->action](this); +} + +void sub_0809E83C(Entity* this) { + if (CheckFlags(this->field_0x86)) { + sub_0809E96C(this); + DeleteThisEntity(); + } + this->action = 1; + this->collisionLayer = 2; + UpdateSpriteOrderAndFlip(this); +} + +void sub_0809E86C(Entity* this) { + + if (sub_0800419C(this, &gLinkEntity, 0x30, 0x30)) { + if (CheckGlobalFlag(0x14)) { + if (((gUnk_030010A0 & 3) == 0)) { + sub_080A2B80(this); + } + } + } + if (sub_0809E9A0() == 0x54) { + this->action = 2; + this->actionDelay = 0xf; + sub_08078A90(1); + } +} + +void sub_0809E8BC(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 3; + this->actionDelay = 0x3c; + this->spriteSettings.b.ss0 = 0; + sub_0809E96C(this); + sub_0809E918(this); + } +} + +void sub_0809E8EC(Entity* this) { + if (--this->actionDelay == 0) { + SetFlag(this->field_0x86); + sub_08078A90(0); + PlaySFX(0x73); + DeleteThisEntity(); + } +} + +void sub_0809E918(Entity* this) { + Entity* fx; + s16* i = gUnk_08124364; + while (*i != -1000) { + fx = CreateFx(this, 3, 0); + if (fx != NULL) { + fx->x.HALF.HI += i[0]; + fx->y.HALF.HI += i[1]; + fx->collisionLayer = 2; + UpdateSpriteOrderAndFlip(fx); + } + i += sizeof(s16); + } +} + +void sub_0809E96C(Entity *this) +{ + CreateMinishEntrance(COORD_TO_TILE_OFFSET(this, 0x20, 0x8)); +} \ No newline at end of file From bde7b45adbd3f395fd934211059022e6ee46a95d Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 8 Jul 2020 19:45:04 -0700 Subject: [PATCH 09/25] object86.c OK --- asm/code_080A29BC.s | 119 ------------------------ asm/object49.s | 217 ------------------------------------------- asm/object86.s | 181 ------------------------------------ include/entity.h | 222 ++++++++++++++++++++++---------------------- linker.ld | 4 +- src/code_080A29BC.c | 69 ++++++++++++++ src/object49.c | 102 ++++++++++++++++++++ src/object86.c | 81 ++++++++++++++++ 8 files changed, 365 insertions(+), 630 deletions(-) delete mode 100644 asm/object86.s create mode 100644 src/code_080A29BC.c create mode 100644 src/object49.c create mode 100644 src/object86.c diff --git a/asm/code_080A29BC.s b/asm/code_080A29BC.s index 37276f4b..928762f3 100644 --- a/asm/code_080A29BC.s +++ b/asm/code_080A29BC.s @@ -4,125 +4,6 @@ .syntax unified .text - - thumb_func_start sub_080A29BC -sub_080A29BC: @ 0x080A29BC - push {lr} - movs r1, #2 - movs r2, #0 - bl CreateFx - pop {pc} - - thumb_func_start sub_080A29C8 -sub_080A29C8: @ 0x080A29C8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - movs r0, #0xf - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _080A29F4 - ldr r1, _080A29F8 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, r0, r4 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - adds r0, r0, r5 - strh r0, [r2, #0x32] - adds r0, r2, #0 - adds r0, #0x38 - strb r6, [r0] -_080A29F4: - pop {r4, r5, r6, pc} - .align 2, 0 -_080A29F8: .4byte gRoomControls - - thumb_func_start sub_080A29FC -sub_080A29FC: @ 0x080A29FC - push {lr} - movs r1, #0x11 - movs r2, #0 - bl CreateFx - pop {pc} - - thumb_func_start sub_080A2A08 -sub_080A2A08: @ 0x080A2A08 - push {lr} - movs r1, #6 - movs r2, #0 - bl CreateFx - pop {pc} - - thumb_func_start sub_080A2A14 -sub_080A2A14: @ 0x080A2A14 - push {lr} - movs r1, #0xb - movs r2, #0 - bl CreateFx - pop {pc} - - thumb_func_start sub_080A2A20 -sub_080A2A20: @ 0x080A2A20 - push {r4, lr} - adds r4, r1, #0 - adds r3, r2, #0 - movs r1, #0 - adds r2, r4, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _080A2A38 - movs r0, #5 - strb r0, [r1, #0xe] -_080A2A38: - adds r0, r1, #0 - pop {r4, pc} - - thumb_func_start sub_080A2A3C -sub_080A2A3C: @ 0x080A2A3C - push {r4, r5, r6, lr} - adds r4, r1, #0 - adds r5, r2, #0 - adds r6, r3, #0 - movs r1, #0 - adds r2, r4, #0 - adds r3, r5, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _080A2A5E - movs r0, #5 - strb r0, [r1, #0xe] - adds r0, r1, #0 - adds r0, #0x86 - strh r6, [r0] -_080A2A5E: - adds r0, r1, #0 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080A2A64 -sub_080A2A64: @ 0x080A2A64 - push {lr} - movs r1, #0x20 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _080A2A80 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r0, [r3] - movs r1, #7 - orrs r0, r1 - strb r0, [r3] -_080A2A80: - adds r0, r2, #0 - pop {pc} thumb_func_start sub_080A2A84 sub_080A2A84: @ 0x080A2A84 diff --git a/asm/object49.s b/asm/object49.s index 4fa846a4..1fdfafa3 100644 --- a/asm/object49.s +++ b/asm/object49.s @@ -6,223 +6,6 @@ .text - - thumb_func_start Object49 -Object49: @ 0x0808F0A0 - push {lr} - ldr r2, _0808F0B4 @ =gUnk_08121E5C - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808F0B4: .4byte gUnk_08121E5C - - thumb_func_start sub_0808F0B8 -sub_0808F0B8: @ 0x0808F0B8 - push {lr} - ldr r2, _0808F0CC @ =gUnk_08121E88 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808F0CC: .4byte gUnk_08121E88 - - thumb_func_start sub_0808F0D0 -sub_0808F0D0: @ 0x0808F0D0 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r1, #0x49 - movs r2, #2 - movs r3, #0 - bl CreateObjectWithParent - str r0, [r5, #0x54] - cmp r0, #0 - bne _0808F0E8 - bl DeleteThisEntity -_0808F0E8: - movs r6, #1 - strb r6, [r5, #0xc] - ldr r0, _0808F148 @ =0x0000FF40 - strh r0, [r5, #0x36] - bl Random - adds r4, r0, #0 - movs r0, #0x3f - ands r4, r0 - bl Random - ands r0, r6 - cmp r0, #0 - beq _0808F106 - rsbs r4, r4, #0 -_0808F106: - ldr r0, [r5, #0x50] - ldrh r0, [r0, #0x2e] - adds r0, r0, r4 - strh r0, [r5, #0x2e] - bl Random - adds r4, r0, #0 - movs r0, #0x1f - ands r4, r0 - bl Random - ands r0, r6 - cmp r0, #0 - beq _0808F124 - rsbs r4, r4, #0 -_0808F124: - ldr r0, [r5, #0x50] - ldrh r0, [r0, #0x32] - adds r0, r0, r4 - strh r0, [r5, #0x32] - movs r0, #0x90 - lsls r0, r0, #2 - str r0, [r5, #0x74] - movs r0, #0xa0 - lsls r0, r0, #1 - str r0, [r5, #0x78] - adds r0, r5, #0 - movs r1, #3 - bl InitializeAnimation - adds r0, r5, #0 - bl sub_0808F14C - pop {r4, r5, r6, pc} - .align 2, 0 -_0808F148: .4byte 0x0000FF40 - - thumb_func_start sub_0808F14C -sub_0808F14C: @ 0x0808F14C - push {r4, lr} - adds r4, r0, #0 - bl sub_0808F2B0 - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _0808F16E - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x84 - bl PlaySFX -_0808F16E: - pop {r4, pc} - - thumb_func_start sub_0808F170 -sub_0808F170: @ 0x0808F170 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x74] - subs r0, #0x20 - str r0, [r4, #0x74] - ldr r1, [r4, #0x78] - adds r1, #0x20 - str r1, [r4, #0x78] - adds r0, r4, #0 - movs r2, #8 - movs r3, #2 - bl sub_0806FCF4 - ldr r1, [r4, #0x78] - ldr r0, _0808F1A0 @ =0x000001FF - cmp r1, r0 - bls _0808F198 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_0808F198: - adds r0, r4, #0 - bl sub_0808F2B0 - pop {r4, pc} - .align 2, 0 -_0808F1A0: .4byte 0x000001FF - - thumb_func_start sub_0808F1A4 -sub_0808F1A4: @ 0x0808F1A4 - push {r4, lr} - adds r4, r0, #0 - ldr r1, [r4, #0x78] - adds r1, #0x10 - str r1, [r4, #0x78] - ldr r0, [r4, #0x74] - adds r0, #0x10 - str r0, [r4, #0x74] - adds r0, r4, #0 - movs r2, #8 - movs r3, #2 - bl sub_0806FCF4 - ldr r1, [r4, #0x78] - ldr r0, _0808F1D4 @ =0x000003FF - cmp r1, r0 - bls _0808F1D8 - ldr r1, [r4, #0x54] - movs r0, #0xff - strb r0, [r1, #0xc] - bl DeleteThisEntity - b _0808F1DE - .align 2, 0 -_0808F1D4: .4byte 0x000003FF -_0808F1D8: - adds r0, r4, #0 - bl sub_0808F2B0 -_0808F1DE: - pop {r4, pc} - - thumb_func_start sub_0808F1E0 -sub_0808F1E0: @ 0x0808F1E0 - push {lr} - ldr r2, _0808F1F4 @ =gUnk_08121E98 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808F1F4: .4byte gUnk_08121E98 - - thumb_func_start sub_0808F1F8 -sub_0808F1F8: @ 0x0808F1F8 - push {r4, lr} - adds r4, r0, #0 - ldrb r2, [r4, #0x19] - movs r0, #3 - orrs r2, r0 - strb r2, [r4, #0x19] - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldr r3, [r4, #0x50] - ldrb r1, [r3, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - movs r0, #0x3f - ands r2, r0 - orrs r2, r1 - strb r2, [r4, #0x19] - ldrb r1, [r3, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x1b] - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1b] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0808F244 - pop {r4, pc} - thumb_func_start sub_0808F244 sub_0808F244: @ 0x0808F244 push {r4, lr} diff --git a/asm/object86.s b/asm/object86.s deleted file mode 100644 index cfa2b565..00000000 --- a/asm/object86.s +++ /dev/null @@ -1,181 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object86 -Object86: @ 0x08099DB8 - push {lr} - ldr r2, _08099DCC @ =gUnk_081237F8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08099DCC: .4byte gUnk_081237F8 - - thumb_func_start sub_08099DD0 -sub_08099DD0: @ 0x08099DD0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x38 - movs r6, #0 - movs r5, #1 - strb r5, [r0] - ldrb r0, [r4, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - strb r6, [r4, #0xd] - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - beq _08099E04 - movs r0, #4 - strb r0, [r4, #0xc] - strb r6, [r4, #0x1e] - b _08099E0E -_08099E04: - strb r5, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_08099E0E: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08099E10 -sub_08099E10: @ 0x08099E10 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #0x74 - bl CheckLocalFlag - cmp r0, #0 - beq _08099E54 - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #1 - bne _08099E3E - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _08099E3E - strb r0, [r5] - adds r0, r4, #0 - bl sub_08099ECC -_08099E3E: - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08099E54 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08099E54: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08099E58 -sub_08099E58: @ 0x08099E58 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08099E88 - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bne _08099E88 - strb r0, [r4, #0xc] - movs r0, #4 - strb r0, [r4, #0x1e] -_08099E88: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08099E8C -sub_08099E8C: @ 0x08099E8C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08099EC4 @ =gLinkEntity - movs r2, #0xc - movs r3, #0xc - bl sub_080041A0 - cmp r0, #0 - beq _08099EC2 - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _08099EB2 - adds r0, r4, #0 - bl sub_08099ECC - adds r0, r4, #0 - movs r1, #0x1e - bl sub_0805E4E0 -_08099EB2: - movs r0, #0x75 - bl CheckLocalFlag - cmp r0, #0 - beq _08099EC2 - movs r0, #7 - bl sub_0805B390 -_08099EC2: - pop {r4, pc} - .align 2, 0 -_08099EC4: .4byte gLinkEntity - - thumb_func_start nullsub_534 -nullsub_534: @ 0x08099EC8 - bx lr - .align 2, 0 - - thumb_func_start sub_08099ECC -sub_08099ECC: @ 0x08099ECC - push {r4, lr} - movs r4, #0 - movs r1, #1 - strb r1, [r0, #0xd] - ldr r1, _08099EF4 @ =gLinkEntity - bl CopyPosition - ldr r2, _08099EF8 @ =gLinkState - movs r0, #3 - strb r0, [r2, #0xc] - adds r0, r2, #0 - adds r0, #0x38 - strb r4, [r0] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #8 - orrs r0, r1 - str r0, [r2, #0x30] - pop {r4, pc} - .align 2, 0 -_08099EF4: .4byte gLinkEntity -_08099EF8: .4byte gLinkState diff --git a/include/entity.h b/include/entity.h index afa1cc24..677b7d6c 100644 --- a/include/entity.h +++ b/include/entity.h @@ -1,3 +1,4 @@ +// clang-format off #ifndef ENTITY_H #define ENTITY_H @@ -39,118 +40,115 @@ union SplitHWord { } PACKED; typedef struct Entity { - u32* field_0x0; - u32* field_0x4; - EntityType entityType; - u8 action; - u8 previousActionFlag; - u8 actionDelay; - u8 field_0xf; - u8 flags; - u8 scriptedScene : 4; - u8 scriptedScene2 : 4; - s16 spriteTileSize; - u8 animationState; - u8 direction; - u8 possibleBool; - u8 field_0x17; - union { - u8 raw; - struct { - u8 ss0 : 2; - u8 ss2 : 1; - u8 ss3 : 1; - u8 ss4 : 1; - u8 ss5 : 1; - u8 ss6 : 1; - u8 ss7 : 1; - } PACKED b; - } PACKED spriteSettings; - - struct { - u8 b0 : 2; - u8 b1 : 2; - u8 b2 : 2; - u8 b3 : 2; - } PACKED spriteOrder; - - u8 palette; - struct { - u8 b0 : 4; - u8 b1 : 2; - u8 b2 : 2; - } PACKED spriteOrientation; - u8 filler[1]; - u8 field_0x1d; - u8 frameIndex; - u8 lastFrameIndex; - s32 field_0x20; - s16 nonPlanarMovement; - u8 spriteAnimation[3]; - struct { - u8 b0 : 3; - u8 b1 : 3; - u8 b2 : 2; - } PACKED ticks; - u16 collisions; - union SplitWord x; - union SplitWord y; - union SplitWord height; // todo - u8 collisionLayer; - s8 interactType; - u8 field_0x3a; - u8 flags2; - u8 field_0x3c; - u8 field_0x3d; - u8 field_0x3e; - u8 damageType; - u8 field_0x40; - u8 bitfield; - u8 field_0x42; - u8 field_0x43; - u8 field_0x44; - u8 currentHealth; - s16 field_0x46; - BoundingBox* boundingBox; - u8 field_0x4c; - u8 field_0x4d; - u8 field_0x4e; - u8 field_0x4f; - struct Entity* parent; - struct Entity* attachedEntity; - u8 animIndex; - u8 frameDuration; - union { - u8 all; - struct { - u8 f0 : 1; - u8 f1 : 5; - u8 f2 : 1; - u8 f3 : 1; - } PACKED b; - } PACKED frames; - u8 frameSpriteSettings; - Frame* animPtr; - u16 spriteVramOffset; - u8 spriteOffsetX; - u8 spriteOffsetY; - u32* otherEntity; - u8 field_0x68; - u8 field_0x69; - union SplitHWord field_0x6a; - u8 field_0x6c; - u8 field_0x6d; - u8 filler4[6]; - u16 field_0x74; - u16 field_0x76; - union SplitHWord field_0x78; - u16 field_0x7a; - union SplitWord field_0x7c; - u16 field_0x80; - u16 field_0x82; - union SplitHWord cutsceneBeh; - u16 field_0x86; - + /*0x00*/ u32* field_0x0; + /*0x04*/ u32* field_0x4; + /*0x08*/ EntityType entityType; + /*0x0c*/ u8 action; + /*0x0d*/ u8 previousActionFlag; + /*0x0e*/ u8 actionDelay; + /*0x0f*/ u8 field_0xf; + /*0x10*/ u8 flags; + /*0x11*/ u8 scriptedScene : 4; + /* */ u8 scriptedScene2 : 4; + /*0x12*/ s16 spriteTileSize; + /*0x14*/ u8 animationState; + /*0x15*/ u8 direction; + /*0x16*/ u8 possibleBool; + /*0x17*/ u8 field_0x17; + /*0x18*/ union { + /* */ u8 raw; + /* */ struct { + /* */ u8 ss0 : 2; + /* */ u8 ss2 : 1; + /* */ u8 ss3 : 1; + /* */ u8 ss4 : 1; + /* */ u8 ss5 : 1; + /* */ u8 ss6 : 1; + /* */ u8 ss7 : 1; + /* */ } PACKED b; + /* */ } PACKED spriteSettings; + /*0x19*/ struct { + /* */ u8 b0 : 2; + /* */ u8 b1 : 2; + /* */ u8 b2 : 2; + /* */ u8 b3 : 2; + /* */ } PACKED spriteOrder; + /*0x1a*/ u8 palette; + /*0x1b*/ struct { + /* */ u8 b0 : 4; + /* */ u8 b1 : 2; + /* */ u8 b2 : 2; + /* */ } PACKED spriteOrientation; + /*0x1c*/ u8 filler[1]; + /*0x1d*/ u8 field_0x1d; + /*0x1e*/ u8 frameIndex; + /*0x1f*/ u8 lastFrameIndex; + /*0x20*/ s32 field_0x20; + /*0x24*/ s16 nonPlanarMovement; + /*0x26*/ u8 spriteAnimation[3]; + /*0x29*/ struct { + /* */ u8 b0 : 3; + /* */ u8 b1 : 3; + /* */ u8 b2 : 2; + /* */ } PACKED ticks; + /*0x2a*/ u16 collisions; + /*0x2c*/ union SplitWord x; + /*0x30*/ union SplitWord y; + /*0x34*/ union SplitWord height; // todo + /*0x38*/ u8 collisionLayer; + /*0x39*/ s8 interactType; + /*0x3a*/ u8 field_0x3a; + /*0x3b*/ u8 flags2; + /*0x3c*/ u8 field_0x3c; + /*0x3d*/ u8 hurtBlinkTime; + /*0x3e*/ u8 field_0x3e; + /*0x3f*/ u8 damageType; + /*0x40*/ u8 field_0x40; + /*0x41*/ u8 bitfield; + /*0x42*/ u8 field_0x42; + /*0x43*/ u8 field_0x43; + /*0x44*/ u8 field_0x44; + /*0x45*/ u8 currentHealth; + /*0x46*/ s16 field_0x46; + /*0x48*/ BoundingBox* boundingBox; + /*0x4c*/ u8 field_0x4c; + /*0x4d*/ u8 field_0x4d; + /*0x4e*/ u8 field_0x4e; + /*0x4f*/ u8 field_0x4f; + /*0x50*/ struct Entity* parent; + /*0x54*/ struct Entity* attachedEntity; + /*0x58*/ u8 animIndex; + /*0x59*/ u8 frameDuration; + /*0x5a*/ union { + /* */ u8 all; + /* */ struct { + /* */ u8 f0 : 1; + /* */ u8 f1 : 5; + /* */ u8 f2 : 1; + /* */ u8 f3 : 1; + /* */ } PACKED b; + /* */ } PACKED frames; + /*0x5b*/ u8 frameSpriteSettings; + /*0x5c*/ Frame* animPtr; + /*0x60*/ u16 spriteVramOffset; + /*0x62*/ u8 spriteOffsetX; + /*0x64*/ u8 spriteOffsetY; + /*0x64*/ u32* otherEntity; + /*0x68*/ u8 field_0x68; + /*0x69*/ u8 field_0x69; + /*0x6a*/ union SplitHWord field_0x6a; + /*0x6c*/ u8 field_0x6c; + /*0x6d*/ u8 field_0x6d; + /*0x6e*/ u8 filler4[6]; + /*0x74*/ u16 field_0x74; + /*0x76*/ u16 field_0x76; + /*0x78*/ union SplitHWord field_0x78; + /*0x7a*/ u16 field_0x7a; + /*0x7c*/ union SplitWord field_0x7c; + /*0x80*/ u16 field_0x80; + /*0x82*/ u16 field_0x82; + /*0x84*/ union SplitHWord cutsceneBeh; + /*0x86*/ u16 field_0x86; } Entity; #define COORD_TO_TILE(entity) \ diff --git a/linker.ld b/linker.ld index 4a36d0c4..a74be327 100644 --- a/linker.ld +++ b/linker.ld @@ -729,6 +729,7 @@ SECTIONS { src/heartContainer.o(.text); asm/heartContainer.o(.text); asm/object48.o(.text); + src/object49.o(.text); asm/object49.o(.text); asm/backgroundCloud.o(.text); asm/object4B.o(.text); @@ -789,7 +790,7 @@ SECTIONS { asm/bigPushableLever.o(.text); asm/smallIceBlock.o(.text); asm/bigIceBlock.o(.text); - asm/object86.o(.text); + src/object86.o(.text); asm/object87.o(.text); asm/macroBook.o(.text); asm/object89.o(.text); @@ -858,6 +859,7 @@ SECTIONS { src/createObject.o(.text); src/createObjectWithParent.o(.text); asm/createFx.o(.text); + src/code_080A29BC.o(.text); asm/code_080A29BC.o(.text); asm/playSFX.o(.text); asm/code_080A3480.o(.text); diff --git a/src/code_080A29BC.c b/src/code_080A29BC.c new file mode 100644 index 00000000..0e093ab3 --- /dev/null +++ b/src/code_080A29BC.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "entity.h" +#include "room.h" + +void sub_080A29BC(Entity *parent) +{ + CreateFx(parent, 2, 0); +} + +void sub_080A29C8(s32 xOff, s32 yOff, u32 layer) +{ + Entity *pEVar1; + + pEVar1 = CreateObject(0xf, 2, 0); + if (pEVar1 != NULL) { + pEVar1->x.HALF.HI = gRoomControls.roomOriginX + xOff; + pEVar1->y.HALF.HI = gRoomControls.roomOriginY + yOff; + pEVar1->collisionLayer = layer; + } +} + +void sub_080A29FC(Entity *parent) +{ + CreateFx(parent, 0x11, 0); +} + +void sub_080A2A08(Entity *parent) +{ + CreateFx(parent, 0x6, 0); +} + +void sub_080A2A14(Entity *parent) +{ + CreateFx(parent, 0xb, 0); +} + +Entity * sub_080A2A20(Entity *parent, u32 form, u32 parameter) +{ + Entity *pEVar1; + + pEVar1 = CreateObjectWithParent(parent, 0, form, parameter); + if (pEVar1 != NULL) { + pEVar1->actionDelay = 5; + } + return pEVar1; +} + +Entity * sub_080A2A3C(Entity *parent, u32 form, u32 subtype, u32 param_4) +{ + Entity *ent; + + ent = CreateObjectWithParent(parent, 0, form, subtype); + if (ent != NULL) { + ent->actionDelay = 5; + ent->field_0x86 = param_4; + } + return ent; +} + +Entity * sub_080A2A64(Entity *parent) +{ + Entity *pEVar1; + + pEVar1 = CreateFx(parent, 0x20, 0); + if (pEVar1 != NULL) { + pEVar1->ticks.b0 = 7; + } + return pEVar1; +} \ No newline at end of file diff --git a/src/object49.c b/src/object49.c new file mode 100644 index 00000000..3489f9e6 --- /dev/null +++ b/src/object49.c @@ -0,0 +1,102 @@ +#include "global.h" +#include "entity.h" + +extern u32 Random(void); +extern void sub_0808F2B0(Entity*); +extern u32 sub_08003FC4(Entity*, u32); +void sub_0808F14C(Entity*); +extern void PlaySFX(u32); +extern void sub_0806FCF4(Entity*, u32, u32, u32); +extern void sub_0808F244(Entity*); + +extern void (*const gUnk_08121E5C[])(Entity*); +extern void (*const gUnk_08121E88[])(Entity*); +extern void (*const gUnk_08121E98[])(Entity*); + +void Object49(Entity* this) { + gUnk_08121E5C[this->entityType.form](this); +} + +void sub_0808F0B8(Entity* this) { + gUnk_08121E88[this->action](this); +} + +void sub_0808F0D0(Entity* this) { + u32 offsetX; + u32 offsetY; + Entity* ent; + u32 uVar3; + + ent = CreateObjectWithParent(this, 0x49, 2, 0); + this->attachedEntity = ent; + if (ent == NULL) { + DeleteThisEntity(); + } + this->action = 1; + this->height.HALF.HI = -0xc0; + offsetX = Random() % 64; + if ((Random() & 1) != 0) { + offsetX = -offsetX; + } + this->x.HALF.HI = this->parent->x.HALF.HI + offsetX; + offsetY = Random() % 32; + if ((Random() & 1) != 0) { + offsetY = -offsetY; + } + this->y.HALF.HI = this->parent->y.HALF.HI + offsetY; + *(u32*)&this->field_0x74 = 0x240; + *(u32*)&this->field_0x78 = 0x140; + InitializeAnimation(this, 3); + sub_0808F14C(this); +} + +void sub_0808F14C(Entity* this) { + sub_0808F2B0(this); + if (sub_08003FC4(this, 0x2000) == 0) { + this->action++; + PlaySFX(0x84); + } +} + +void sub_0808F170(Entity *this) +{ + *(u32 *)&this->field_0x74 -= 0x20; + *(u32 *)&this->field_0x78 += 0x20; + sub_0806FCF4(this, *(u32 *)&this->field_0x78, 8, 2); + if (*(u32 *)&this->field_0x78 > 0x1ff) { + this->action++; + } + sub_0808F2B0(this); +} + +void sub_0808F1A4(Entity *this) +{ + *(u32 *)&this->field_0x78 += 0x10; + *(u32 *)&this->field_0x74 += 0x10; + sub_0806FCF4(this, *(u32 *)&this->field_0x78, 8, 2); + if (*(u32 *)&this->field_0x78 > 0x3ff) { + this->attachedEntity->action = 0xff; + DeleteThisEntity(); + } + else { + sub_0808F2B0(this); + } +} + +void sub_0808F1E0(Entity *this) +{ + gUnk_08121E98[this->action](this); +} + +void sub_0808F1F8(Entity *this) +{ + u8 bVar1; + + this->spriteOrder.b0 = 3; + this->action++; + this->spriteOrder.b3 = this->parent->spriteOrder.b3; + this->spriteOrientation.b2 = this->parent->spriteOrientation.b2; + this->ticks.b0 = 7; + InitializeAnimation(this, 1); + sub_0808F244(this); +} \ No newline at end of file diff --git a/src/object86.c b/src/object86.c new file mode 100644 index 00000000..78800531 --- /dev/null +++ b/src/object86.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "entity.h" +#include "link.h" +#include "flags.h" + +extern u32 sub_080041A0(Entity*, Entity*, u32, u32); +void sub_08099ECC(Entity*); +extern void sub_0805E4E0(Entity*, u32); +extern void sub_0805B390(u32); +extern void CopyPosition(Entity*, Entity*); + +extern void (*const gUnk_081237F8[])(Entity*); + +void Object86(Entity* this) { + gUnk_081237F8[this->action](this); +} + +void sub_08099DD0(Entity* this) { + this->collisionLayer = 1; + this->spriteOrder.b3 = 3; + this->ticks.b0 = 7; + this->previousActionFlag = 0; + if (GetInventoryValue(0x46)) { + this->action = 4; + this->frameIndex = 0; + } else { + this->action = 1; + InitializeAnimation(this, 0); + } +} + +void sub_08099E10(Entity* this) { + if (CheckLocalFlag(0x74)) { + GetNextFrame(this); + if ((this->frames.all == 1) && (this->previousActionFlag == 0)) { + this->frames.all = 0; + sub_08099ECC(this); + } + if (this->frames.b.f3) { + this->action = 2; + InitializeAnimation(this, 1); + } + } +} + +void sub_08099E58(Entity *this) +{ + GetNextFrame(this); + if (this->frames.b.f3) { + this->frames.b.f3 = 0; + this->actionDelay++; + if (this->actionDelay == 3) { + this->action = 3; + this->frameIndex = 4; + } + } +} + +void sub_08099E8C(Entity *this) +{ + if (sub_080041A0(this, &gLinkEntity, 0xc, 0xc)) { + if (this->previousActionFlag == 0) { + sub_08099ECC(this); + sub_0805E4E0(this, 0x1e); + } + if (CheckLocalFlag(0x75)) { + sub_0805B390(0x7); + } + } +} + +void nullsub_534(Entity* this) {} + +void sub_08099ECC(Entity *this) +{ + this->previousActionFlag = 1; + CopyPosition(this, &gLinkEntity); + gLinkState.linkAction = 3; + gLinkState.filler12[4] = 0; + gLinkState.flags.all |= 0x8000; +} From 03a8e052af277c60fae370df488a22c036263b7a Mon Sep 17 00:00:00 2001 From: theo3 Date: Thu, 9 Jul 2020 01:39:40 -0700 Subject: [PATCH 10/25] commented offsets in entity, linkState --- asm/acroBandits.s | 6 +- asm/anju.s | 2 +- asm/ballChainSoldier.s | 4 +- asm/bowMoblin.s | 2 +- asm/brocco.s | 2 +- asm/button.s | 2 +- asm/carpenter.s | 177 ------------- asm/castleMaid.s | 2 +- asm/chuchu.s | 2 +- asm/chuchuBoss.s | 6 +- asm/code_080011C4.s | 4 +- asm/code_080043E8.s | 4 +- asm/code_08018500.s | 498 ------------------------------------- asm/code_08019444.s | 2 +- asm/code_08049CD4.s | 2 +- asm/code_0806ED78.s | 8 +- asm/code_0806FA6C.s | 4 +- asm/code_0807CC3C.s | 8 +- asm/code_080A5574.s | 18 +- asm/createBowEntity.s | 13 + asm/cuccoAggr.s | 6 +- asm/cuccoChickAggr.s | 2 +- asm/darkNut.s | 8 +- asm/din.s | 2 +- asm/dog.s | 2 +- asm/enemy49.s | 2 +- asm/enemy4D.s | 4 +- asm/enemy50.s | 2 +- asm/farore.s | 2 +- asm/festari.s | 2 +- asm/flyingPot.s | 2 +- asm/flyingSkull.s | 2 +- asm/gentari.s | 2 +- asm/ghini.s | 4 +- asm/ghostBrothers.s | 2 +- asm/gibdo.s | 4 +- asm/gina.s | 2 +- asm/gleerok.s | 8 +- asm/gregal.s | 2 +- asm/guardWithSpear.s | 10 +- asm/hurdyGurdyMan.s | 2 +- asm/item11.s | 194 +++++++++++++++ asm/keaton.s | 2 +- asm/kid.s | 2 +- asm/kingDaltus.s | 2 +- asm/leever.s | 2 +- asm/lilypadLarge.s | 2 +- asm/mama.s | 2 +- asm/mayorHagen.s | 2 +- asm/mazaalBracelet.s | 4 +- asm/minecart.s | 2 +- asm/ministerPotho.s | 2 +- asm/moldworm.s | 2 +- asm/mountainMinish.s | 4 +- asm/mulldozer.s | 2 +- asm/mutoh.s | 2 +- asm/nayru.s | 2 +- asm/npc23.s | 2 +- asm/npc5.s | 6 +- asm/object21.s | 2 +- asm/object36.s | 2 +- asm/object97.s | 4 +- asm/octorok.s | 4 +- asm/octorokGolden.s | 4 +- asm/peahat.s | 4 +- asm/percy.s | 2 +- asm/pesto.s | 10 +- asm/pina.s | 2 +- asm/postman.s | 4 +- asm/puffstool.s | 4 +- asm/ropeGolden.s | 4 +- asm/rupeeLike.s | 4 +- asm/sittingPerson.s | 2 +- asm/sluggula.s | 2 +- asm/smith.s | 2 +- asm/spearMoblin.s | 4 +- asm/spikedBeetle.s | 2 +- asm/spinyChuchu.s | 2 +- asm/stalfos.s | 8 +- asm/sturgeon.s | 2 +- asm/teachers.s | 2 +- asm/tingleSiblings.s | 2 +- asm/townMinish.s | 4 +- asm/townsperson.s | 4 +- asm/vaatiEyesMacro.s | 4 +- asm/vaatiProjectile.s | 4 +- asm/vaatiRebornEnemy.s | 4 +- asm/vaatiTransfigured.s | 2 +- asm/vaatiWrath.s | 2 +- asm/wallMaster2.s | 4 +- data/playerItemFunctions.s | 4 +- include/entity.h | 3 +- include/functions.h | 4 +- include/link.h | 100 ++++---- linker.ld | 4 + src/bladeBrothers.c | 2 +- src/carpenter.c | 74 ++++++ src/code_08018C58.c | 29 +++ src/dampe.c | 4 +- src/epona.c | 2 +- src/item11.c | 99 ++++++++ src/lakitu.c | 6 +- src/malon.c | 2 +- src/talon.c | 2 +- src/townMinish.c | 2 +- 105 files changed, 630 insertions(+), 887 deletions(-) create mode 100644 asm/item11.s create mode 100644 src/carpenter.c create mode 100644 src/code_08018C58.c create mode 100644 src/item11.c diff --git a/asm/acroBandits.s b/asm/acroBandits.s index cf0ad0e7..1473c5cb 100644 --- a/asm/acroBandits.s +++ b/asm/acroBandits.s @@ -1061,7 +1061,7 @@ _08032018: ldr r0, _0803205C @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -1149,7 +1149,7 @@ _080320D4: strb r0, [r6] adds r0, r4, #0 adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 bl sub_080322E8 @@ -1159,7 +1159,7 @@ _080320D4: _0803210E: adds r0, r4, #0 adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 bl sub_080322E8 diff --git a/asm/anju.s b/asm/anju.s index 060d179d..e3412270 100644 --- a/asm/anju.s +++ b/asm/anju.s @@ -49,7 +49,7 @@ _0806C2FA: strb r0, [r2] ldr r1, _0806C334 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r4, #0 adds r1, #0x58 diff --git a/asm/ballChainSoldier.s b/asm/ballChainSoldier.s index 31cc525f..210d6ad8 100644 --- a/asm/ballChainSoldier.s +++ b/asm/ballChainSoldier.s @@ -479,7 +479,7 @@ sub_0803E86C: @ 0x0803E86C ldr r0, _0803E8C4 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 @@ -669,7 +669,7 @@ sub_0803E9D4: @ 0x0803E9D4 ldr r0, _0803EA0C @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 diff --git a/asm/bowMoblin.s b/asm/bowMoblin.s index 23c0f7a1..faaa78d4 100644 --- a/asm/bowMoblin.s +++ b/asm/bowMoblin.s @@ -498,7 +498,7 @@ _0803C598: beq _0803C5C0 adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 diff --git a/asm/brocco.s b/asm/brocco.s index 788c4ef3..29a04a7c 100644 --- a/asm/brocco.s +++ b/asm/brocco.s @@ -194,7 +194,7 @@ _08063662: strb r0, [r1] ldr r1, _080636A0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r1, #4 diff --git a/asm/button.s b/asm/button.s index 2f15c0ff..7271ac7c 100644 --- a/asm/button.s +++ b/asm/button.s @@ -716,7 +716,7 @@ sub_08081FF8: @ 0x08081FF8 bne _08082036 adds r0, r1, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r6, r0, #0 ldr r0, [r4, #0x54] movs r1, #0x80 diff --git a/asm/carpenter.s b/asm/carpenter.s index 837712f2..60e4a2c2 100644 --- a/asm/carpenter.s +++ b/asm/carpenter.s @@ -6,183 +6,6 @@ .text - - thumb_func_start Carpenter -Carpenter: @ 0x08067158 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x84 - ldr r0, [r0] - cmp r0, #0 - bne _08067168 - bl DeleteThisEntity -_08067168: - ldrb r5, [r4, #0xc] - cmp r5, #1 - beq _080671A8 - cmp r5, #1 - bgt _08067178 - cmp r5, #0 - beq _0806717E - b _08067224 -_08067178: - cmp r5, #2 - beq _0806720A - b _08067224 -_0806717E: - ldrb r1, [r4, #0xa] - lsls r1, r1, #4 - ldr r0, _080671EC @ =gUnk_08110CA8 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08067224 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x69 - strb r5, [r0] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD64 -_080671A8: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _080671F4 - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x69 - strb r0, [r1] - ldr r1, _080671F0 @ =gLinkEntity - adds r0, r4, #0 - bl sub_080045C4 - bl sub_0806F5A4 - adds r1, r0, #0 - ldrb r0, [r4, #0xa] - lsls r0, r0, #3 - adds r0, #4 - adds r1, r1, r0 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0806F118 - b _08067224 - .align 2, 0 -_080671EC: .4byte gUnk_08110CA8 -_080671F0: .4byte gLinkEntity -_080671F4: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - adds r0, r4, #0 - bl GetNextFrame - b _08067224 -_0806720A: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _08067224 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x69 - ldrb r1, [r0] - adds r0, r4, #0 - bl InitializeAnimation -_08067224: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start Carpenter_Head -Carpenter_Head: @ 0x08067228 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #1 - bhi _0806727E - adds r0, r4, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - adds r0, #0x5b - ldrb r0, [r0] - movs r2, #0x3f - ands r2, r0 - adds r0, r4, #0 - movs r1, #2 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - movs r1, #1 - movs r2, #2 - bl SetSpriteSubEntryOffsetData2 - adds r0, r4, #0 - bl sub_0807000C - b _080672AC -_0806727E: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C -_080672AC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080672B0 -sub_080672B0: @ 0x080672B0 - push {lr} - ldrb r2, [r0, #0x14] - lsrs r2, r2, #1 - ldr r1, [r1, #4] - adds r1, r1, r2 - ldrb r2, [r0, #0xa] - lsls r2, r2, #3 - adds r1, r1, r2 - bl InitializeAnimation - pop {pc} - .align 2, 0 - thumb_func_start sub_080672C8 sub_080672C8: @ 0x080672C8 push {r4, r5, lr} diff --git a/asm/castleMaid.s b/asm/castleMaid.s index be02bb6b..20c03bd5 100644 --- a/asm/castleMaid.s +++ b/asm/castleMaid.s @@ -144,7 +144,7 @@ _080645EA: strb r1, [r2] ldr r1, _08064628 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/chuchu.s b/asm/chuchu.s index 61647307..c1a41f0a 100644 --- a/asm/chuchu.s +++ b/asm/chuchu.s @@ -1475,7 +1475,7 @@ _0801F91C: ldr r0, _0801F93C @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] _0801F92C: adds r0, r4, #0 diff --git a/asm/chuchuBoss.s b/asm/chuchuBoss.s index fca83811..f9542429 100644 --- a/asm/chuchuBoss.s +++ b/asm/chuchuBoss.s @@ -1223,7 +1223,7 @@ _0802659C: strb r0, [r4] ldr r1, _080265E4 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] ldr r0, [r7] ldrb r0, [r0, #4] @@ -1374,7 +1374,7 @@ _080266D6: bne _080266EC ldr r1, _08026704 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] _080266EC: adds r0, r4, #0 @@ -1551,7 +1551,7 @@ _08026820: _08026830: ldr r1, _08026868 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] movs r0, #4 strb r0, [r4, #0xd] diff --git a/asm/code_080011C4.s b/asm/code_080011C4.s index cbea3d2c..3e1c1675 100644 --- a/asm/code_080011C4.s +++ b/asm/code_080011C4.s @@ -231,7 +231,7 @@ sub_0800132C: @ 0x0800132C cmp r2, #0x11 blo _08001352 _0800134E: - ldr r3, _08001378 @ =sub_080045C4 + ldr r3, _08001378 @ =GetFacingDirection bx r3 _08001352: movs r0, #0xff @@ -245,7 +245,7 @@ _08001368: .4byte gUnk_080012C8 _0800136C: .4byte gUnk_080012C8 _08001370: .4byte sub_080AF18C _08001374: .4byte sub_080AF1BC -_08001378: .4byte sub_080045C4 +_08001378: .4byte GetFacingDirection gUnk_0800137C:: @ 0800137C .incbin "baserom.gba", 0x00137C, 0x0000004 diff --git a/asm/code_080043E8.s b/asm/code_080043E8.s index d88ac0a6..b6284815 100644 --- a/asm/code_080043E8.s +++ b/asm/code_080043E8.s @@ -269,8 +269,8 @@ sub_080045B4: @ 0x080045B4 ldr r3, _08004690 @ =gUnk_030060F0 bx r3 - thumb_func_start sub_080045C4 -sub_080045C4: @ 0x080045C4 + thumb_func_start GetFacingDirection +GetFacingDirection: @ 0x080045C4 push {r4, r5} movs r4, #0x32 movs r5, #0x2e diff --git a/asm/code_08018500.s b/asm/code_08018500.s index dd69e0da..4d58f260 100644 --- a/asm/code_08018500.s +++ b/asm/code_08018500.s @@ -924,501 +924,3 @@ _08018C10: .align 2, 0 _08018C14: .4byte gUnk_080FEAC8 _08018C18: .4byte gUnk_080FE320 - - thumb_func_start CreateMinishEntrance -CreateMinishEntrance: @ 0x08018C1C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldr r6, _08018C54 @ =0x00000185 - movs r0, #0 -_08018C28: - movs r4, #0 - movs r1, #0x40 - adds r1, r1, r5 - mov r8, r1 - adds r7, r0, #1 -_08018C32: - adds r0, r6, #0 - adds r6, #1 - adds r1, r5, r4 - movs r2, #1 - bl SetTileType - adds r4, #1 - cmp r4, #4 - bls _08018C32 - mov r5, r8 - adds r0, r7, #0 - cmp r0, #3 - bls _08018C28 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08018C54: .4byte 0x00000185 - - thumb_func_start sub_08018C58 -sub_08018C58: @ 0x08018C58 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #0 -_08018C5E: - movs r1, #0x98 - lsls r1, r1, #2 - adds r0, r5, r1 - adds r1, r4, #0 - movs r2, #1 - bl SetTileType - ldr r1, _08018C84 @ =0x00000261 - adds r0, r5, r1 - adds r1, r4, #1 - movs r2, #1 - bl SetTileType - adds r5, #2 - adds r4, #0x40 - cmp r5, #5 - bls _08018C5E - pop {r4, r5, pc} - .align 2, 0 -_08018C84: .4byte 0x00000261 - - thumb_func_start sub_08018C88 -sub_08018C88: @ 0x08018C88 - push {lr} - adds r2, r0, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _08018CB4 - adds r1, r2, #0 - adds r1, #0x3d - movs r0, #0 - strb r0, [r1] - ldr r1, _08018CB0 @ =gUnk_080B3DD0 - ldrb r0, [r2, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl _call_via_r1 - b _08018CB8 - .align 2, 0 -_08018CB0: .4byte gUnk_080B3DD0 -_08018CB4: - bl DeleteThisEntity -_08018CB8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08018CBC -sub_08018CBC: @ 0x08018CBC - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x84 - ldr r5, _08018D50 @ =gLinkEntity - ldr r0, [r5, #0x2c] - str r0, [r4, #0x2c] - str r0, [r1] - subs r1, #4 - ldr r0, [r5, #0x30] - str r0, [r4, #0x30] - str r0, [r1] - ldrb r1, [r5, #0x14] - movs r0, #0xe - ands r0, r1 - strb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r4, #0x24] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x96 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x3c - ldrb r0, [r0] - adds r0, #1 - movs r2, #0x80 - rsbs r2, r2, #0 - adds r1, r2, #0 - adds r2, r4, #0 - adds r2, #0x3c - orrs r0, r1 - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x3b - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x3b - strb r0, [r1] - ldr r6, [r4, #0x54] - cmp r6, #0 - beq _08018D58 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #0x56 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x40 - movs r0, #0x1c - strb r0, [r1] - adds r1, #4 - movs r0, #6 - strb r0, [r1] - ldr r0, _08018D54 @ =gUnk_080B3E18 - str r0, [r4, #0x48] - ldr r0, [r4, #0x54] - adds r0, #0x62 - movs r1, #0 - strb r1, [r0] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - b _08018DD2 - .align 2, 0 -_08018D50: .4byte gLinkEntity -_08018D54: .4byte gUnk_080B3E18 -_08018D58: - ldr r7, _08018DDC @ =gLinkState - ldrb r0, [r7, #0x1c] - cmp r0, #0 - bne _08018D64 - bl DeleteThisEntity -_08018D64: - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0xa6 - strh r0, [r4, #0x12] - movs r0, #0x33 - strb r0, [r4, #0x1a] - adds r0, r4, #0 - adds r0, #0x60 - strh r6, [r0] - ldrb r0, [r7, #0x1d] - subs r0, #1 - strb r0, [r4, #0xa] - ldr r1, _08018DE0 @ =gUnk_080B3DE0 - ldrb r0, [r4, #0xa] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xa] - lsls r0, r0, #1 - adds r0, #1 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x44 - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x40 - movs r0, #0x1b - strb r0, [r1] - ldr r1, _08018DE4 @ =gUnk_080B3DE8 - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r4, #0x48] - str r4, [r5, #0x70] - adds r0, r5, #0 - bl sub_08078CD0 - str r6, [r5, #0x70] - ldrb r1, [r4, #0xa] - adds r1, #0xa - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08018FA0 -_08018DD2: - adds r0, r4, #0 - bl sub_0801766C - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08018DDC: .4byte gLinkState -_08018DE0: .4byte gUnk_080B3DE0 -_08018DE4: .4byte gUnk_080B3DE8 - - thumb_func_start sub_08018DE8 -sub_08018DE8: @ 0x08018DE8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - adds r0, #0x3a - ldrb r1, [r0] - movs r5, #4 - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08018E08 - ldr r0, _08018E18 @ =gLinkState - strb r1, [r0, #0x1c] - bl DeleteThisEntity -_08018E08: - ldr r0, _08018E18 @ =gLinkState - ldrb r0, [r0, #0x1c] - cmp r0, #0 - beq _08018E1C - cmp r0, #5 - beq _08018E24 - b _08018E5A - .align 2, 0 -_08018E18: .4byte gLinkState -_08018E1C: - adds r0, r4, #0 - bl sub_08018F6C - b _08018E5A -_08018E24: - ldr r0, [r4, #0x54] - strb r5, [r0, #0xd] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - movs r2, #2 - movs r0, #2 - strb r0, [r4, #0xc] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - subs r0, #0xa - ands r0, r1 - orrs r0, r2 - strb r0, [r3] - ldr r2, [r4, #0x54] - 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, r4, #0 - bl sub_08018FA0 -_08018E5A: - ldr r0, _08018E64 @ =gLinkEntity - bl sub_08078CD0 - pop {r4, r5, pc} - .align 2, 0 -_08018E64: .4byte gLinkEntity - - thumb_func_start sub_08018E68 -sub_08018E68: @ 0x08018E68 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - cmp r0, #0 - bne _08018E82 - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - movs r1, #5 - bl sub_08008790 - b _08018EA8 -_08018E82: - adds r0, #0x3a - ldrb r1, [r0] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _08018E92 - bl DeleteThisEntity -_08018E92: - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08018EA8 - adds r0, r4, #0 - bl sub_08018F6C - b _08018F62 -_08018EA8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _08018F46 - adds r0, r4, #0 - bl sub_0806F69C - ldrb r0, [r4, #0x15] - cmp r0, #8 - beq _08018EEA - cmp r0, #8 - bgt _08018ECC - cmp r0, #0 - beq _08018ED6 - b _08018EEE -_08018ECC: - cmp r0, #0x10 - beq _08018EDE - cmp r0, #0x18 - beq _08018EE4 - b _08018EEE -_08018ED6: - movs r6, #0 - movs r5, #4 - rsbs r5, r5, #0 - b _08018EEE -_08018EDE: - movs r6, #0 - movs r5, #4 - b _08018EEE -_08018EE4: - movs r6, #4 - rsbs r6, r6, #0 - b _08018EEC -_08018EEA: - movs r6, #4 -_08018EEC: - movs r5, #0 -_08018EEE: - ldr r1, [r4, #0x54] - cmp r1, #0 - beq _08018F00 - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x15] - ldr r1, [r4, #0x54] - adds r0, r4, #0 - bl CopyPosition -_08018F00: - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _08018F0C - adds r0, r4, #0 - bl sub_0800451C -_08018F0C: - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r5, #0 - bl sub_0800029C - ldr r1, _08018F64 @ =gUnk_080B3DF4 - bl sub_08007DD6 - cmp r0, #0 - bne _08018F62 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r5, #0 - bl sub_080002B4 - cmp r0, #0x74 - beq _08018F62 - ldr r1, _08018F68 @ =gUnk_08003E44 - movs r0, #0x2e - ldrsh r2, [r4, r0] - adds r2, r2, r6 - movs r0, #0x32 - ldrsh r3, [r4, r0] - adds r3, r3, r5 - adds r0, r4, #0 - bl sub_080040D8 - cmp r0, #0 - beq _08018F62 -_08018F46: - ldr r0, [r4, #0x54] - cmp r0, #0 - bne _08018F56 - ldrb r1, [r4, #0xa] - adds r1, #0xd - adds r0, r4, #0 - bl InitializeAnimation -_08018F56: - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_08018F6C -_08018F62: - pop {r4, r5, r6, pc} - .align 2, 0 -_08018F64: .4byte gUnk_080B3DF4 -_08018F68: .4byte gUnk_08003E44 - - thumb_func_start sub_08018F6C -sub_08018F6C: @ 0x08018F6C - push {r4, lr} - adds r4, r0, #0 - ldr r1, [r4, #0x54] - cmp r1, #0 - beq _08018F8A - movs r0, #5 - strb r0, [r1, #0xd] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - subs r0, #9 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - b _08018F9A -_08018F8A: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - beq _08018F9E -_08018F9A: - bl DeleteThisEntity -_08018F9E: - pop {r4, pc} - - thumb_func_start sub_08018FA0 -sub_08018FA0: @ 0x08018FA0 - push {lr} - adds r2, r0, #0 - ldr r0, _08018FC8 @ =gLinkEntity - adds r0, #0x38 - ldrb r0, [r0] - adds r1, r2, #0 - adds r1, #0x38 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bne _08018FBC - movs r0, #1 - strb r0, [r2, #0xb] -_08018FBC: - ldrb r0, [r2, #0xa] - adds r0, #0xea - bl PlaySFX - pop {pc} - .align 2, 0 -_08018FC8: .4byte gLinkEntity - - thumb_func_start sub_08018FCC -sub_08018FCC: @ 0x08018FCC - push {lr} - ldr r2, _08018FE0 @ =gUnk_080B3E30 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08018FE0: .4byte gUnk_080B3E30 diff --git a/asm/code_08019444.s b/asm/code_08019444.s index aeba402d..f544c3a3 100644 --- a/asm/code_08019444.s +++ b/asm/code_08019444.s @@ -4742,7 +4742,7 @@ _0801B7D4: ldr r4, _0801B800 @ =gLinkEntity adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] adds r0, r5, #0 bl sub_0806F69C diff --git a/asm/code_08049CD4.s b/asm/code_08049CD4.s index 7322d820..dcd0d0a1 100644 --- a/asm/code_08049CD4.s +++ b/asm/code_08049CD4.s @@ -393,7 +393,7 @@ sub_08049F84: @ 0x08049F84 cmp r1, #0 beq _08049F9C adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection b _08049F9E _08049F9C: movs r0, #0xff diff --git a/asm/code_0806ED78.s b/asm/code_0806ED78.s index 9adcfdc3..6b986255 100644 --- a/asm/code_0806ED78.s +++ b/asm/code_0806ED78.s @@ -52,7 +52,7 @@ _0806EDC0: .4byte gLinkEntity sub_0806EDC4: @ 0x0806EDC4 push {lr} ldr r1, _0806EDD4 @ =gLinkEntity - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 pop {pc} .align 2, 0 @@ -74,7 +74,7 @@ sub_0806EDD8: @ 0x0806EDD8 beq _0806EDFC adds r0, r5, #0 adds r1, r6, #0 - bl sub_080045C4 + bl GetFacingDirection adds r7, r0, #0 _0806EDFC: adds r0, r7, #0 @@ -129,7 +129,7 @@ _0806EE4C: strh r0, [r1] ldr r1, _0806EE6C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r4, #0 adds r1, #0x3e @@ -979,7 +979,7 @@ _0806F444: ldrh r4, [r3] adds r0, r5, #0 mov r1, sp - bl sub_080045C4 + bl GetFacingDirection adds r2, r0, #0 adds r0, r5, #0 adds r1, r4, #0 diff --git a/asm/code_0806FA6C.s b/asm/code_0806FA6C.s index 20060c2b..09bac7ac 100644 --- a/asm/code_0806FA6C.s +++ b/asm/code_0806FA6C.s @@ -242,14 +242,14 @@ _0806FC9C: thumb_func_start sub_0806FCA0 sub_0806FCA0: @ 0x0806FCA0 push {lr} - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 pop {pc} thumb_func_start sub_0806FCAC sub_0806FCAC: @ 0x0806FCAC push {lr} - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 pop {pc} diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 4d8b35ca..c1bff554 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -3013,7 +3013,7 @@ sub_0807E30C: @ 0x0807E30C beq _0807E348 adds r0, r5, #0 adds r1, r6, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 strb r0, [r5, #0x14] _0807E348: @@ -3032,7 +3032,7 @@ _0807E348: str r0, [r4, #0x14] ldr r1, _0807E378 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 strb r0, [r5, #0x14] b _0807E37E @@ -4213,7 +4213,7 @@ sub_0807EB74: @ 0x0807EB74 push {r4, lr} adds r4, r0, #0 ldr r1, _0807EB88 @ =gLinkEntity - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 strb r0, [r4, #0x14] pop {r4, pc} @@ -4226,7 +4226,7 @@ sub_0807EB8C: @ 0x0807EB8C adds r1, r0, #0 ldr r4, _0807EBA4 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 movs r1, #0xfe ands r0, r1 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 11d92150..bd86ceb8 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -7600,7 +7600,7 @@ _080A8FE8: strb r0, [r4, #0xf] ldr r1, _080A9048 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -10132,7 +10132,7 @@ sub_080AA2E0: @ 0x080AA2E0 beq _080AA31C adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection ldrb r1, [r5, #0x14] lsls r1, r1, #2 adds r0, #4 @@ -11638,7 +11638,7 @@ _080AADE0: strb r0, [r2] ldr r1, _080AAE60 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] adds r0, r5, #0 adds r0, #0x86 @@ -11706,7 +11706,7 @@ _080AAEA2: strb r0, [r4, #0xf] ldr r1, _080AAECC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -13924,7 +13924,7 @@ sub_080ABF40: @ 0x080ABF40 strb r0, [r4, #0xc] ldr r1, _080ABFA0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 movs r1, #0 @@ -14120,7 +14120,7 @@ _080AC0B2: strb r0, [r4, #0xc] ldr r1, _080AC0EC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] movs r0, #0xc0 lsls r0, r0, #1 @@ -14185,7 +14185,7 @@ _080AC13A: bne _080AC160 ldr r1, _080AC164 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -14223,7 +14223,7 @@ sub_080AC168: @ 0x080AC168 strb r0, [r4, #0xf] ldr r1, _080AC1C8 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 ldr r0, [r4, #0x50] adds r0, #0x84 @@ -15313,7 +15313,7 @@ _080AC964: strb r0, [r5, #0x10] ldr r1, _080AC9C8 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] movs r0, #0x97 lsls r0, r0, #1 diff --git a/asm/createBowEntity.s b/asm/createBowEntity.s index 050ae83a..e8f41fb8 100644 --- a/asm/createBowEntity.s +++ b/asm/createBowEntity.s @@ -5,6 +5,19 @@ .syntax unified .text + + thumb_func_start sub_08018FCC +sub_08018FCC: @ 0x08018FCC + push {lr} + ldr r2, _08018FE0 @ =gUnk_080B3E30 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_08018FE0: .4byte gUnk_080B3E30 thumb_func_start sub_08018FE4 sub_08018FE4: @ 0x08018FE4 diff --git a/asm/cuccoAggr.s b/asm/cuccoAggr.s index dd9d23d2..0329c554 100644 --- a/asm/cuccoAggr.s +++ b/asm/cuccoAggr.s @@ -357,7 +357,7 @@ sub_08038F44: @ 0x08038F44 adds r4, r0, #0 ldr r0, _08038F8C @ =gLinkEntity adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 bl sub_080390F8 @@ -422,7 +422,7 @@ _08038FB8: bne _08038FE0 ldr r1, _08038FF8 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -614,7 +614,7 @@ sub_08039140: @ 0x08039140 strb r0, [r4, #0xe] ldr r1, _08039174 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] ldr r0, _08039178 @ =0x0000FFFC strh r0, [r4, #0x36] diff --git a/asm/cuccoChickAggr.s b/asm/cuccoChickAggr.s index 5755667c..a581af08 100644 --- a/asm/cuccoChickAggr.s +++ b/asm/cuccoChickAggr.s @@ -319,7 +319,7 @@ sub_08022B44: @ 0x08022B44 str r0, [r4, #0x20] ldr r1, _08022B84 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 strb r1, [r4, #0x15] movs r0, #0xf diff --git a/asm/darkNut.s b/asm/darkNut.s index 2fb91aae..fd3af0e8 100644 --- a/asm/darkNut.s +++ b/asm/darkNut.s @@ -433,7 +433,7 @@ sub_08020E98: @ 0x08020E98 bne _08020ECA ldr r0, [r5] adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 bl sub_080AEF88 @@ -471,7 +471,7 @@ _08020EF6: _08020F08: .4byte gUnk_020000B0 _08020F0C: adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 bl sub_080AEF88 @@ -1177,7 +1177,7 @@ sub_08021424: @ 0x08021424 ldr r0, _08021450 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 ldrb r0, [r5, #0x14] bl sub_08021274 @@ -1293,7 +1293,7 @@ sub_080214FC: @ 0x080214FC ldr r0, _08021538 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r2, r0, #0 adds r0, r4, #0 adds r0, #0x5a diff --git a/asm/din.s b/asm/din.s index 547800e5..533ab213 100644 --- a/asm/din.s +++ b/asm/din.s @@ -54,7 +54,7 @@ _080647C2: strb r1, [r0] ldr r1, _080647FC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/dog.s b/asm/dog.s index ac332d83..17558ef6 100644 --- a/asm/dog.s +++ b/asm/dog.s @@ -212,7 +212,7 @@ sub_08069CB8: @ 0x08069CB8 push {r4, r5, lr} adds r4, r0, #0 ldr r1, _08069CF8 @ =gLinkEntity - bl sub_080045C4 + bl GetFacingDirection ldr r2, _08069CFC @ =gUnk_08111DB0 ldrb r1, [r4, #0x14] lsls r1, r1, #5 diff --git a/asm/enemy49.s b/asm/enemy49.s index 65e6d90b..771bfb54 100644 --- a/asm/enemy49.s +++ b/asm/enemy49.s @@ -291,7 +291,7 @@ _0803D08A: ldr r0, _0803D0A8 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] b _0803D0AE .align 2, 0 diff --git a/asm/enemy4D.s b/asm/enemy4D.s index 478b8ee5..196b629a 100644 --- a/asm/enemy4D.s +++ b/asm/enemy4D.s @@ -134,7 +134,7 @@ sub_0803EBB4: @ 0x0803EBB4 ldr r0, _0803EC10 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 @@ -649,7 +649,7 @@ sub_0803EF74: @ 0x0803EF74 beq _0803EFA8 adds r0, r4, #0 adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection ldrb r1, [r4, #0x15] subs r1, r1, r0 adds r1, #2 diff --git a/asm/enemy50.s b/asm/enemy50.s index 74f04c95..93b54bc7 100644 --- a/asm/enemy50.s +++ b/asm/enemy50.s @@ -627,7 +627,7 @@ _08040FB2: ldr r0, _08041008 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 diff --git a/asm/farore.s b/asm/farore.s index 002a469e..b543e4ea 100644 --- a/asm/farore.s +++ b/asm/farore.s @@ -54,7 +54,7 @@ _080649C2: strb r1, [r0] ldr r1, _080649FC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/festari.s b/asm/festari.s index f0f5e8ca..c4e935f9 100644 --- a/asm/festari.s +++ b/asm/festari.s @@ -48,7 +48,7 @@ sub_0805FE48: @ 0x0805FE48 strb r0, [r2] ldr r1, _0805FE7C @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r5, #0 diff --git a/asm/flyingPot.s b/asm/flyingPot.s index ebe75329..98601cbc 100644 --- a/asm/flyingPot.s +++ b/asm/flyingPot.s @@ -448,7 +448,7 @@ sub_0803737C: @ 0x0803737C strb r0, [r4, #0xe] ldr r1, _080373AC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] _080373A6: pop {r4, pc} diff --git a/asm/flyingSkull.s b/asm/flyingSkull.s index 1cc19610..3f75b1ca 100644 --- a/asm/flyingSkull.s +++ b/asm/flyingSkull.s @@ -639,7 +639,7 @@ sub_0803A048: @ 0x0803A048 strb r0, [r4, #0xe] ldr r1, _0803A07C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] _0803A076: pop {r4, pc} diff --git a/asm/gentari.s b/asm/gentari.s index dc9930bc..c18bbf27 100644 --- a/asm/gentari.s +++ b/asm/gentari.s @@ -58,7 +58,7 @@ _0805FD72: strb r0, [r2] ldr r1, _0805FDA0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/ghini.s b/asm/ghini.s index 9a1d26a5..ee0c58bc 100644 --- a/asm/ghini.s +++ b/asm/ghini.s @@ -414,7 +414,7 @@ _0803F2D8: ldr r0, _0803F304 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection b _0803F310 .align 2, 0 _0803F304: .4byte gUnk_020000B0 @@ -536,7 +536,7 @@ _0803F3C4: ldr r0, _0803F410 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 diff --git a/asm/ghostBrothers.s b/asm/ghostBrothers.s index 0cf03f99..0e393338 100644 --- a/asm/ghostBrothers.s +++ b/asm/ghostBrothers.s @@ -104,7 +104,7 @@ _08065C42: strb r0, [r2] ldr r1, _08065C70 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/gibdo.s b/asm/gibdo.s index ecc95e2d..f74e786a 100644 --- a/asm/gibdo.s +++ b/asm/gibdo.s @@ -511,7 +511,7 @@ sub_08037810: @ 0x08037810 beq _080378AC ldr r1, [r6] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection ldrb r1, [r5, #0x15] subs r0, r0, r1 adds r0, #6 @@ -530,7 +530,7 @@ sub_08037810: @ 0x08037810 strh r0, [r5, #0x24] ldr r1, [r6] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 ands r0, r4 strb r0, [r5, #0x15] diff --git a/asm/gina.s b/asm/gina.s index 4d2c851f..16be23ce 100644 --- a/asm/gina.s +++ b/asm/gina.s @@ -55,7 +55,7 @@ _0806C182: strb r0, [r2] ldr r1, _0806C1B0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/gleerok.s b/asm/gleerok.s index 3d164b61..82ff48dc 100644 --- a/asm/gleerok.s +++ b/asm/gleerok.s @@ -1478,7 +1478,7 @@ sub_0802DB84: @ 0x0802DB84 push {r4, r5, lr} adds r5, r0, #0 ldr r1, _0802DBB0 @ =gLinkEntity - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] adds r1, r5, #0 adds r1, #0x84 @@ -1561,7 +1561,7 @@ sub_0802DC1C: @ 0x0802DC1C push {r4, r5, r6, lr} adds r5, r0, #0 ldr r1, _0802DC40 @ =gLinkEntity - bl sub_080045C4 + bl GetFacingDirection adds r3, r0, #0 adds r1, r5, #0 adds r1, #0x84 @@ -1672,7 +1672,7 @@ sub_0802DCE0: @ 0x0802DCE0 beq _0802DD44 ldr r1, _0802DD1C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] ldr r2, [r5] ldrb r1, [r2, #0x15] @@ -2565,7 +2565,7 @@ _0802E3A4: ldr r5, [r0] ldr r1, _0802E408 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 lsls r0, r0, #3 movs r2, #0 diff --git a/asm/gregal.s b/asm/gregal.s index 52b97594..274d9323 100644 --- a/asm/gregal.s +++ b/asm/gregal.s @@ -205,7 +205,7 @@ _0806CC40: strb r0, [r1] ldr r1, _0806CC7C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r1, #8 diff --git a/asm/guardWithSpear.s b/asm/guardWithSpear.s index 2b935187..e520a382 100644 --- a/asm/guardWithSpear.s +++ b/asm/guardWithSpear.s @@ -125,7 +125,7 @@ sub_08063DC8: @ 0x08063DC8 strb r0, [r4, #0xe] ldr r1, _08063DF4 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 strb r0, [r4, #0x14] ldrb r1, [r4, #0x14] @@ -166,7 +166,7 @@ _08063E1E: strb r1, [r2] ldr r1, _08063E50 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 @@ -311,7 +311,7 @@ sub_08063F20: @ 0x08063F20 strb r1, [r2] ldr r1, _08063F74 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 @@ -737,7 +737,7 @@ _08064256: bne _0806428C ldr r1, _080642B0 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 strb r0, [r5, #0x14] lsls r0, r0, #0x18 @@ -882,7 +882,7 @@ _08064376: bne _080643AC ldr r1, _080643D0 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 strb r0, [r5, #0x14] lsls r0, r0, #0x18 diff --git a/asm/hurdyGurdyMan.s b/asm/hurdyGurdyMan.s index a9bce038..76e75707 100644 --- a/asm/hurdyGurdyMan.s +++ b/asm/hurdyGurdyMan.s @@ -59,7 +59,7 @@ _0806E34C: strb r0, [r1] ldr r1, _0806E3B0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/item11.s b/asm/item11.s new file mode 100644 index 00000000..8ea3fa78 --- /dev/null +++ b/asm/item11.s @@ -0,0 +1,194 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_08018E68 +sub_08018E68: @ 0x08018E68 + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldr r0, [r4, #0x54] + cmp r0, #0 + bne _08018E82 + adds r0, r4, #0 + bl GetNextFrame + adds r0, r4, #0 + movs r1, #5 + bl sub_08008790 + b _08018EA8 +_08018E82: + adds r0, #0x3a + ldrb r1, [r0] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + bne _08018E92 + bl DeleteThisEntity +_08018E92: + adds r0, r4, #0 + adds r0, #0x41 + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08018EA8 + adds r0, r4, #0 + bl sub_08018F6C + b _08018F62 +_08018EA8: + ldrb r0, [r4, #0xe] + subs r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xff + beq _08018F46 + adds r0, r4, #0 + bl sub_0806F69C + ldrb r0, [r4, #0x15] + cmp r0, #8 + beq _08018EEA + cmp r0, #8 + bgt _08018ECC + cmp r0, #0 + beq _08018ED6 + b _08018EEE +_08018ECC: + cmp r0, #0x10 + beq _08018EDE + cmp r0, #0x18 + beq _08018EE4 + b _08018EEE +_08018ED6: + movs r6, #0 + movs r5, #4 + rsbs r5, r5, #0 + b _08018EEE +_08018EDE: + movs r6, #0 + movs r5, #4 + b _08018EEE +_08018EE4: + movs r6, #4 + rsbs r6, r6, #0 + b _08018EEC +_08018EEA: + movs r6, #4 +_08018EEC: + movs r5, #0 +_08018EEE: + ldr r1, [r4, #0x54] + cmp r1, #0 + beq _08018F00 + ldrb r0, [r4, #0x15] + strb r0, [r1, #0x15] + ldr r1, [r4, #0x54] + adds r0, r4, #0 + bl CopyPosition +_08018F00: + ldrb r0, [r4, #0xb] + cmp r0, #0 + bne _08018F0C + adds r0, r4, #0 + bl sub_0800451C +_08018F0C: + adds r0, r4, #0 + adds r1, r6, #0 + adds r2, r5, #0 + bl sub_0800029C + ldr r1, _08018F64 @ =gUnk_080B3DF4 + bl sub_08007DD6 + cmp r0, #0 + bne _08018F62 + adds r0, r4, #0 + adds r1, r6, #0 + adds r2, r5, #0 + bl sub_080002B4 + cmp r0, #0x74 + beq _08018F62 + ldr r1, _08018F68 @ =gUnk_08003E44 + movs r0, #0x2e + ldrsh r2, [r4, r0] + adds r2, r2, r6 + movs r0, #0x32 + ldrsh r3, [r4, r0] + adds r3, r3, r5 + adds r0, r4, #0 + bl sub_080040D8 + cmp r0, #0 + beq _08018F62 +_08018F46: + ldr r0, [r4, #0x54] + cmp r0, #0 + bne _08018F56 + ldrb r1, [r4, #0xa] + adds r1, #0xd + adds r0, r4, #0 + bl InitializeAnimation +_08018F56: + ldrb r0, [r4, #0xc] + adds r0, #1 + strb r0, [r4, #0xc] + adds r0, r4, #0 + bl sub_08018F6C +_08018F62: + pop {r4, r5, r6, pc} + .align 2, 0 +_08018F64: .4byte gUnk_080B3DF4 +_08018F68: .4byte gUnk_08003E44 + + thumb_func_start sub_08018F6C +sub_08018F6C: @ 0x08018F6C + push {r4, lr} + adds r4, r0, #0 + ldr r1, [r4, #0x54] + cmp r1, #0 + beq _08018F8A + movs r0, #5 + strb r0, [r1, #0xd] + ldr r2, [r4, #0x54] + ldrb r1, [r2, #0x18] + subs r0, #9 + ands r0, r1 + movs r1, #1 + orrs r0, r1 + strb r0, [r2, #0x18] + b _08018F9A +_08018F8A: + adds r0, r4, #0 + bl GetNextFrame + adds r0, r4, #0 + adds r0, #0x5a + ldrb r0, [r0] + cmp r0, #0 + beq _08018F9E +_08018F9A: + bl DeleteThisEntity +_08018F9E: + pop {r4, pc} + + thumb_func_start sub_08018FA0 +sub_08018FA0: @ 0x08018FA0 + push {lr} + adds r2, r0, #0 + ldr r0, _08018FC8 @ =gLinkEntity + adds r0, #0x38 + ldrb r0, [r0] + adds r1, r2, #0 + adds r1, #0x38 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #2 + bne _08018FBC + movs r0, #1 + strb r0, [r2, #0xb] +_08018FBC: + ldrb r0, [r2, #0xa] + adds r0, #0xea + bl PlaySFX + pop {pc} + .align 2, 0 +_08018FC8: .4byte gLinkEntity \ No newline at end of file diff --git a/asm/keaton.s b/asm/keaton.s index 0f6090cf..9120cafa 100644 --- a/asm/keaton.s +++ b/asm/keaton.s @@ -319,7 +319,7 @@ sub_080325E8: @ 0x080325E8 beq _0803264C ldr r1, [r5] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r3, r4, #0 adds r3, #0x5a ldrb r2, [r3] diff --git a/asm/kid.s b/asm/kid.s index 8b504d15..8463cba2 100644 --- a/asm/kid.s +++ b/asm/kid.s @@ -265,7 +265,7 @@ _0806229A: bhi _080622F2 ldr r1, _080622C8 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 ldrb r1, [r5] movs r2, #4 diff --git a/asm/kingDaltus.s b/asm/kingDaltus.s index 313b64e9..9b6bb8c6 100644 --- a/asm/kingDaltus.s +++ b/asm/kingDaltus.s @@ -26,7 +26,7 @@ KingDaltus: @ 0x080665E4 strb r1, [r4, #0xc] ldr r1, _08066630 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/leever.s b/asm/leever.s index 3c36a26a..99c2e4da 100644 --- a/asm/leever.s +++ b/asm/leever.s @@ -127,7 +127,7 @@ sub_0801FCB0: @ 0x0801FCB0 ldr r0, _0801FD14 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r4, r0, #0 bl Random ldr r2, _0801FD18 @ =gUnk_080CA4C8 diff --git a/asm/lilypadLarge.s b/asm/lilypadLarge.s index 886a732b..5bda9660 100644 --- a/asm/lilypadLarge.s +++ b/asm/lilypadLarge.s @@ -913,7 +913,7 @@ _08085BB4: bl sub_08085CDC adds r0, r4, #0 adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] movs r1, #0x80 lsls r1, r1, #1 diff --git a/asm/mama.s b/asm/mama.s index d9b4ffcd..c1db8a76 100644 --- a/asm/mama.s +++ b/asm/mama.s @@ -62,7 +62,7 @@ _0806C3E2: strb r0, [r1] ldr r1, _0806C41C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/mayorHagen.s b/asm/mayorHagen.s index 8ad776f4..2deaf59a 100644 --- a/asm/mayorHagen.s +++ b/asm/mayorHagen.s @@ -58,7 +58,7 @@ _0806CDE8: strb r0, [r1] ldr r1, _0806CE24 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r1, #4 diff --git a/asm/mazaalBracelet.s b/asm/mazaalBracelet.s index f429ef30..26460b6b 100644 --- a/asm/mazaalBracelet.s +++ b/asm/mazaalBracelet.s @@ -682,7 +682,7 @@ _0803A688: strb r1, [r4, #0xe] ldr r1, _0803A6A4 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] movs r0, #0xa0 lsls r0, r0, #2 @@ -2719,7 +2719,7 @@ sub_0803B5C0: @ 0x0803B5C0 push {r4, lr} adds r4, r0, #0 ldr r1, _0803B5E8 @ =gLinkEntity - bl sub_080045C4 + bl GetFacingDirection adds r2, r0, #0 cmp r2, #9 bhi _0803B5D2 diff --git a/asm/minecart.s b/asm/minecart.s index 3b654127..1075a035 100644 --- a/asm/minecart.s +++ b/asm/minecart.s @@ -343,7 +343,7 @@ _08091970: .4byte 0x00000137 _08091974: adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] _0809197E: ldr r3, _080919A8 @ =gLinkEntity diff --git a/asm/ministerPotho.s b/asm/ministerPotho.s index 2c8a5fb7..cd793eb1 100644 --- a/asm/ministerPotho.s +++ b/asm/ministerPotho.s @@ -151,7 +151,7 @@ _080668A2: strb r0, [r2] ldr r1, _080668D0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/moldworm.s b/asm/moldworm.s index eb90aad2..5f88a6c9 100644 --- a/asm/moldworm.s +++ b/asm/moldworm.s @@ -1147,7 +1147,7 @@ sub_08023894: @ 0x08023894 strh r0, [r4, #0x32] ldr r0, [r5, #0x74] adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 diff --git a/asm/mountainMinish.s b/asm/mountainMinish.s index eb27eb01..ab2b9fc0 100644 --- a/asm/mountainMinish.s +++ b/asm/mountainMinish.s @@ -186,7 +186,7 @@ _08067F58: strb r0, [r1] ldr r1, _08067F94 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r5, #0 @@ -215,7 +215,7 @@ _08067F98: strb r1, [r4] ldr r1, _08067FD8 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r5, #0 diff --git a/asm/mulldozer.s b/asm/mulldozer.s index e3e32213..a9f8f0f0 100644 --- a/asm/mulldozer.s +++ b/asm/mulldozer.s @@ -987,7 +987,7 @@ _0803337E: ldr r0, _080333B0 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r1, #2 movs r0, #0x1c diff --git a/asm/mutoh.s b/asm/mutoh.s index 834b749f..75fe0c2c 100644 --- a/asm/mutoh.s +++ b/asm/mutoh.s @@ -63,7 +63,7 @@ _08067030: strb r0, [r2] ldr r1, _08067060 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r1, #4 diff --git a/asm/nayru.s b/asm/nayru.s index 5f89882b..dd6c6974 100644 --- a/asm/nayru.s +++ b/asm/nayru.s @@ -54,7 +54,7 @@ _080648C2: strb r1, [r0] ldr r1, _080648FC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/npc23.s b/asm/npc23.s index 319ea754..af5a0ba7 100644 --- a/asm/npc23.s +++ b/asm/npc23.s @@ -381,7 +381,7 @@ sub_08066570: @ 0x08066570 beq _080665DE adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r3, r0, #0 movs r6, #1 movs r1, #0x18 diff --git a/asm/npc5.s b/asm/npc5.s index 5b37e2ae..d0f70ed1 100644 --- a/asm/npc5.s +++ b/asm/npc5.s @@ -209,7 +209,7 @@ sub_08060B5C: @ 0x08060B5C bne _08060B98 ldr r1, _08060B94 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection ldrb r1, [r4, #0x14] lsls r1, r1, #2 subs r0, r0, r1 @@ -573,7 +573,7 @@ sub_08060E34: @ 0x08060E34 strb r0, [r4, #0xc] ldr r1, _08060E6C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 @@ -666,7 +666,7 @@ sub_08060EDC: @ 0x08060EDC _08060F00: ldr r1, _08060F30 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection ldrb r2, [r4, #0x14] lsls r1, r2, #2 subs r1, r0, r1 diff --git a/asm/object21.s b/asm/object21.s index c71cb1e9..0425edd8 100644 --- a/asm/object21.s +++ b/asm/object21.s @@ -222,7 +222,7 @@ _08087B1E: _08087B3C: ldr r0, [r4, #0x4c] adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection _08087B44: strb r0, [r4, #0x15] movs r0, #0x80 diff --git a/asm/object36.s b/asm/object36.s index b6feec33..4b9680e4 100644 --- a/asm/object36.s +++ b/asm/object36.s @@ -286,7 +286,7 @@ _0808BD34: ldr r4, _0808BD70 @ =gLinkEntity adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] adds r0, r5, #0 bl sub_0806F69C diff --git a/asm/object97.s b/asm/object97.s index da008362..c7072469 100644 --- a/asm/object97.s +++ b/asm/object97.s @@ -112,7 +112,7 @@ sub_0809DA64: @ 0x0809DA64 adds r5, r0, #0 ldr r4, [r5, #0x54] adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r5, #0 bl sub_0809E1C8 @@ -1108,7 +1108,7 @@ sub_0809E210: @ 0x0809E210 adds r1, r0, #0 ldr r4, _0809E230 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5B0 movs r1, #0xfe ands r0, r1 diff --git a/asm/octorok.s b/asm/octorok.s index 01f55afe..2a2de200 100644 --- a/asm/octorok.s +++ b/asm/octorok.s @@ -204,7 +204,7 @@ _0801EDC4: ldr r0, _0801EDE8 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 _0801EDD0: movs r1, #0x18 @@ -230,7 +230,7 @@ sub_0801EDEC: @ 0x0801EDEC cmp r1, #0 beq _0801EE12 adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 diff --git a/asm/octorokGolden.s b/asm/octorokGolden.s index 4908da57..3c805d39 100644 --- a/asm/octorokGolden.s +++ b/asm/octorokGolden.s @@ -230,7 +230,7 @@ _08037DC4: _08037DEE: ldr r1, _08037E10 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 @@ -254,7 +254,7 @@ sub_08037E14: @ 0x08037E14 strb r0, [r5, #0xe] ldr r1, _08037E6C @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r4, r0, #4 movs r0, #0x18 ands r4, r0 diff --git a/asm/peahat.s b/asm/peahat.s index ae6e6f2a..8e1cce5b 100644 --- a/asm/peahat.s +++ b/asm/peahat.s @@ -415,7 +415,7 @@ _0802024C: ldr r0, _0802027C @ =gUnk_020000B0 ldr r1, [r0] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r4, r0, #0 bl Random ldr r2, _08020280 @ =gUnk_080CA5D4 @@ -478,7 +478,7 @@ _080202C8: ldr r0, _080202F4 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 diff --git a/asm/percy.s b/asm/percy.s index d933c8c6..a48c9a2c 100644 --- a/asm/percy.s +++ b/asm/percy.s @@ -120,7 +120,7 @@ _0806B470: strb r0, [r2] ldr r1, _0806B4C8 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r1, #4 diff --git a/asm/pesto.s b/asm/pesto.s index d45826ba..d281d484 100644 --- a/asm/pesto.s +++ b/asm/pesto.s @@ -504,7 +504,7 @@ sub_080242A0: @ 0x080242A0 ldr r0, _080242E4 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 movs r1, #1 @@ -937,7 +937,7 @@ _0802460C: _08024612: ldr r1, [r5, #0x54] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r5, #0x15] adds r0, r5, #0 movs r1, #0 @@ -1493,7 +1493,7 @@ _08024A40: beq _08024A9E ldr r1, [r4, #0x54] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -1507,7 +1507,7 @@ _08024A5E: ldr r0, _08024A80 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -1523,7 +1523,7 @@ _08024A84: ldr r0, _08024AD4 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] _08024A9C: movs r6, #1 diff --git a/asm/pina.s b/asm/pina.s index 86e9f2cb..25fba55c 100644 --- a/asm/pina.s +++ b/asm/pina.s @@ -194,7 +194,7 @@ _08063B9E: strb r0, [r1] ldr r1, _08063BDC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r1, #4 diff --git a/asm/postman.s b/asm/postman.s index 5393d0a9..a08597ba 100644 --- a/asm/postman.s +++ b/asm/postman.s @@ -226,7 +226,7 @@ _08060582: bl sub_0806F118 ldr r1, _080605B4 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 @@ -245,7 +245,7 @@ _080605B8: bl sub_080606D8 ldr r1, _080605E0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/puffstool.s b/asm/puffstool.s index 83f2ba43..1e5a87d6 100644 --- a/asm/puffstool.s +++ b/asm/puffstool.s @@ -742,7 +742,7 @@ _0802556C: bne _08025580 adds r0, r2, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] _08025580: adds r0, r4, #0 @@ -809,7 +809,7 @@ _080255FA: subs r4, #7 adds r0, r6, #0 adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, r0, r4 movs r1, #0x1f ands r0, r1 diff --git a/asm/ropeGolden.s b/asm/ropeGolden.s index 33e71afb..7b6e7b10 100644 --- a/asm/ropeGolden.s +++ b/asm/ropeGolden.s @@ -285,7 +285,7 @@ sub_080383AC: @ 0x080383AC strh r0, [r4, #0x24] ldr r1, _080383E0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 @@ -315,7 +315,7 @@ sub_080383E4: @ 0x080383E4 strh r0, [r4, #0x24] ldr r1, _0803842C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 diff --git a/asm/rupeeLike.s b/asm/rupeeLike.s index 4375db40..72b5a3c8 100644 --- a/asm/rupeeLike.s +++ b/asm/rupeeLike.s @@ -268,7 +268,7 @@ sub_08029474: @ 0x08029474 strb r0, [r4, #0xe] ldr r1, _080294BC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] lsls r0, r0, #0x18 lsrs r0, r0, #0x1c @@ -314,7 +314,7 @@ sub_080294D4: @ 0x080294D4 strb r0, [r4, #0xe] ldr r1, _08029518 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 diff --git a/asm/sittingPerson.s b/asm/sittingPerson.s index ff2f6fc7..127bf469 100644 --- a/asm/sittingPerson.s +++ b/asm/sittingPerson.s @@ -91,7 +91,7 @@ sub_080637B8: @ 0x080637B8 strb r0, [r1] ldr r1, _08063800 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 ldrb r0, [r4, #0x18] diff --git a/asm/sluggula.s b/asm/sluggula.s index cd02e68c..b5914318 100644 --- a/asm/sluggula.s +++ b/asm/sluggula.s @@ -437,7 +437,7 @@ _08023EC2: ldr r0, _08023F00 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection ldrb r2, [r5, #0x15] subs r1, r0, r2 cmp r1, #0 diff --git a/asm/smith.s b/asm/smith.s index c859901c..79b10146 100644 --- a/asm/smith.s +++ b/asm/smith.s @@ -36,7 +36,7 @@ Smith: @ 0x08065FC0 _08065FF0: ldr r1, _08066020 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r5, r5, r0 adds r0, r4, #0 diff --git a/asm/spearMoblin.s b/asm/spearMoblin.s index 505c126e..78c68b1b 100644 --- a/asm/spearMoblin.s +++ b/asm/spearMoblin.s @@ -462,7 +462,7 @@ _08028594: strb r1, [r4, #0xe] adds r0, r4, #0 adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection adds r5, r0, #0 ldrb r0, [r4, #0x15] adds r1, r5, #0 @@ -641,7 +641,7 @@ _080286FC: beq _08028724 adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 diff --git a/asm/spikedBeetle.s b/asm/spikedBeetle.s index 3e4e18a6..1140c3d4 100644 --- a/asm/spikedBeetle.s +++ b/asm/spikedBeetle.s @@ -305,7 +305,7 @@ _0802B84A: ldr r0, _0802B874 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 diff --git a/asm/spinyChuchu.s b/asm/spinyChuchu.s index 9a108f72..ecc587b9 100644 --- a/asm/spinyChuchu.s +++ b/asm/spinyChuchu.s @@ -393,7 +393,7 @@ _0802271A: ldr r0, _08022754 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r1, r4, #0 adds r1, #0x3f diff --git a/asm/stalfos.s b/asm/stalfos.s index be8c30c7..0e0ed424 100644 --- a/asm/stalfos.s +++ b/asm/stalfos.s @@ -334,7 +334,7 @@ _0803950A: strb r0, [r4, #0x15] ldr r1, _0803952C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #4 movs r1, #0x18 ands r0, r1 @@ -681,7 +681,7 @@ _0803976A: strh r0, [r4, #0x24] ldr r1, [r5] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] ldrb r0, [r4, #0x15] adds r0, #4 @@ -722,7 +722,7 @@ _080397DC: strb r0, [r4, #0xe] ldr r1, [r5] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] ldrb r1, [r4, #0x14] adds r1, #0xc @@ -849,7 +849,7 @@ sub_080398C0: @ 0x080398C0 beq _08039908 ldr r1, _08039904 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection b _08039928 .align 2, 0 _08039900: .4byte gUnk_020000B0 diff --git a/asm/sturgeon.s b/asm/sturgeon.s index 696393f6..6bb91643 100644 --- a/asm/sturgeon.s +++ b/asm/sturgeon.s @@ -73,7 +73,7 @@ _08064B00: strb r3, [r2] ldr r1, _08064B30 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/teachers.s b/asm/teachers.s index c91bac97..72c9381d 100644 --- a/asm/teachers.s +++ b/asm/teachers.s @@ -71,7 +71,7 @@ _0806C604: strb r0, [r1] ldr r1, _0806C648 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 ldrb r1, [r4] movs r2, #4 diff --git a/asm/tingleSiblings.s b/asm/tingleSiblings.s index 08e3d38d..d4cb0bc2 100644 --- a/asm/tingleSiblings.s +++ b/asm/tingleSiblings.s @@ -127,7 +127,7 @@ _08064E1A: strb r0, [r2] ldr r1, _08064E48 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r0, r4, #0 diff --git a/asm/townMinish.s b/asm/townMinish.s index 60b238ad..c0c2d4ce 100644 --- a/asm/townMinish.s +++ b/asm/townMinish.s @@ -24,7 +24,7 @@ sub_0806AC3C: @ 0x0806AC3C beq _0806AC70 adds r0, r5, #0 adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r2, r0, #0 movs r0, #0x1e ands r2, r0 @@ -163,7 +163,7 @@ _0806AD44: strb r1, [r5] ldr r1, _0806ADAC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 adds r1, r0, #0 adds r1, #8 diff --git a/asm/townsperson.s b/asm/townsperson.s index 819d3c54..1993b4c6 100644 --- a/asm/townsperson.s +++ b/asm/townsperson.s @@ -273,7 +273,7 @@ sub_08061D64: @ 0x08061D64 strb r0, [r1] ldr r1, _08061DAC @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 ldrb r1, [r4] movs r2, #4 @@ -323,7 +323,7 @@ _08061DD4: strb r0, [r1] ldr r1, _08061E20 @ =gLinkEntity adds r0, r5, #0 - bl sub_080045C4 + bl GetFacingDirection bl sub_0806F5A4 ldrb r1, [r4] movs r2, #4 diff --git a/asm/vaatiEyesMacro.s b/asm/vaatiEyesMacro.s index b012d39f..623ce8a9 100644 --- a/asm/vaatiEyesMacro.s +++ b/asm/vaatiEyesMacro.s @@ -331,7 +331,7 @@ _0802EED6: bl CopyPositionAndSpriteOffset ldr r1, _0802EF14 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #1 movs r1, #0x1e ands r0, r1 @@ -461,7 +461,7 @@ sub_0802EFB8: @ 0x0802EFB8 _0802EFD2: ldr r0, _0802F01C @ =gLinkEntity adds r1, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r5, r0, #4 movs r0, #0x18 ands r5, r0 diff --git a/asm/vaatiProjectile.s b/asm/vaatiProjectile.s index 701a9a76..7f6c4e80 100644 --- a/asm/vaatiProjectile.s +++ b/asm/vaatiProjectile.s @@ -268,7 +268,7 @@ _0803E280: cmp r1, #0 beq _0803E29C adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -355,7 +355,7 @@ sub_0803E314: @ 0x0803E314 strb r0, [r4, #0xc] ldr r1, _0803E33C @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] _0803E332: adds r0, r4, #0 diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s index 3ee3acb0..4d9ee088 100644 --- a/asm/vaatiRebornEnemy.s +++ b/asm/vaatiRebornEnemy.s @@ -794,7 +794,7 @@ _0803D68E: bne _0803D6C8 ldr r1, _0803D6F8 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r0, #2 movs r1, #0x1c ands r0, r1 @@ -938,7 +938,7 @@ _0803D78E: strb r0, [r4, #0xf] ldr r1, _0803D7E0 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection movs r1, #0x10 ands r0, r1 movs r1, #8 diff --git a/asm/vaatiTransfigured.s b/asm/vaatiTransfigured.s index 8a7d4cab..66e1aec0 100644 --- a/asm/vaatiTransfigured.s +++ b/asm/vaatiTransfigured.s @@ -1488,7 +1488,7 @@ _0804029E: bne _08040382 ldr r1, _080402DC @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection lsls r0, r0, #1 ldr r1, _080402E0 @ =gUnk_080D0B18 adds r0, r0, r1 diff --git a/asm/vaatiWrath.s b/asm/vaatiWrath.s index ec525e45..f96d5d64 100644 --- a/asm/vaatiWrath.s +++ b/asm/vaatiWrath.s @@ -2297,7 +2297,7 @@ _080424C6: bne _08042502 ldr r1, _08042504 @ =gLinkEntity adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection ldr r1, _08042508 @ =gUnk_080D0EB0 adds r0, r0, r1 ldrb r0, [r0] diff --git a/asm/wallMaster2.s b/asm/wallMaster2.s index 485c035e..e426c3bd 100644 --- a/asm/wallMaster2.s +++ b/asm/wallMaster2.s @@ -248,7 +248,7 @@ sub_0802CDE8: @ 0x0802CDE8 ldr r0, _0802CE38 @ =gUnk_020000B0 ldr r1, [r0] adds r0, r4, #0 - bl sub_080045C4 + bl GetFacingDirection adds r1, r0, #0 adds r0, r4, #0 bl sub_08004596 @@ -311,7 +311,7 @@ sub_0802CE68: @ 0x0802CE68 bne _0802CEAC adds r0, r4, #0 adds r1, r5, #0 - bl sub_080045C4 + bl GetFacingDirection strb r0, [r4, #0x15] adds r0, r4, #0 bl sub_0806F69C diff --git a/data/playerItemFunctions.s b/data/playerItemFunctions.s index 82723b78..b0d09e36 100644 --- a/data/playerItemFunctions.s +++ b/data/playerItemFunctions.s @@ -23,7 +23,7 @@ /*0x0e*/ .4byte SwordSpin /*0x0f*/ .4byte SwordBeam /*0x10*/ .4byte sub_080ACBCC -/*0x11*/ .4byte sub_08018C88 +/*0x11*/ .4byte Item11 /*0x12*/ .4byte sub_080700E8 /*0x13*/ .4byte sub_080ACF14 /*0x14*/ .4byte sub_0805FBD0 @@ -50,7 +50,7 @@ .4byte SwordSpin .4byte SwordBeam .4byte sub_080ACBCC -.4byte sub_08018C88 +.4byte Item11 .4byte sub_080700E8 .4byte sub_080ACF14 .4byte sub_0805FBD0 diff --git a/include/entity.h b/include/entity.h index 677b7d6c..8de44506 100644 --- a/include/entity.h +++ b/include/entity.h @@ -139,7 +139,8 @@ typedef struct Entity { /*0x6a*/ union SplitHWord field_0x6a; /*0x6c*/ u8 field_0x6c; /*0x6d*/ u8 field_0x6d; - /*0x6e*/ u8 filler4[6]; + /*0x6e*/ u8 filler4[2]; + /*0x70*/ u32 field_0x70; /*0x74*/ u16 field_0x74; /*0x76*/ u16 field_0x76; /*0x78*/ union SplitHWord field_0x78; diff --git a/include/functions.h b/include/functions.h index c715694d..ffeeeb75 100644 --- a/include/functions.h +++ b/include/functions.h @@ -46,7 +46,7 @@ extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void sub_0806D02C(Entity*); extern u32 sub_0806F5A4(u32); -extern u32 sub_080045C4(Entity*, Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); extern void sub_08078784(Entity*, u32); extern void sub_0807DD50(Entity*); extern void sub_0807DD94(Entity*, u32); @@ -65,7 +65,7 @@ extern void sub_0801D2B4(Entity*, u32); extern void sub_0806FD3C(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_0807DD50(Entity*); -extern u32 sub_080045C4(Entity*, Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); extern void sub_0806F118(Entity*); extern void sub_0807DD94(Entity*, u32); extern void sub_0805ED14(u32*); diff --git a/include/link.h b/include/link.h index f6ce96be..fa4cec13 100644 --- a/include/link.h +++ b/include/link.h @@ -1,3 +1,5 @@ +// clang-format off + #ifndef LINK_H #define LINK_H @@ -5,53 +7,53 @@ #include "entity.h" typedef struct { - u8 filler[2]; - u8 jumpStatus; - u8 filler2[2]; - u8 heldObject; - u8 pushedObject; - u8 unk; - u16 unk2; - u8 unk3; - u8 keepFacing; - u8 linkAction; - u8 filler3[2]; - u8 hurtBlinkSpeed; - u8 filler4[4]; - u16 filler5[3]; - u8 filler6[2]; - u8 field_0x1c; - u8 filler9[2]; - u16 filler7[2]; - u8 swimState; - u8 filler8[5]; - u8* unk4; - union { - u32 all; - struct { - u32 filler9 : 3; - u32 noMinishCap : 1; - u32 pullingState : 1; - u32 windyState : 1; - u32 filler10 : 4; - u32 slipperyState : 1; - u32 filler11 : 5; - u32 filler11b : 16; - } PACKED b; - } flags; - u8 filler12[6]; - u16 unk5; - u8 filler13[2]; - u8 swordGoldParticle : 1; - u8 swordBlueParticle : 1; - u8 filler14 : 6; - u8 unk6; - u8 filler15[75]; - u8 unk7; - u32 filler16[7]; - u8 filler17[3]; - u8 unk71; - u32 unk8; + /*0x00*/ u8 filler[2]; + /*0x02*/ u8 jumpStatus; + /*0x03*/ u8 filler2[2]; + /*0x05*/ u8 heldObject; + /*0x06*/ u8 pushedObject; + /*0x07*/ u8 unk; + /*0x08*/ u16 unk2; + /*0x0a*/ u8 unk3; + /*0x0b*/ u8 keepFacing; + /*0x0c*/ u8 linkAction; + /*0x0d*/ u8 filler3[2]; + /*0x0f*/ u8 hurtBlinkSpeed; + /*0x10*/ u8 filler4[4]; + /*0x14*/ u16 filler5[3]; + /*0x1a*/ u8 filler6[2]; + /*0x1c*/ u8 field_0x1c; + /*0x1d*/ u8 filler9[5]; + /*0x22*/ u16 filler7[2]; + /*0x26*/ u8 swimState; + /*0x27*/ u8 filler8[5]; + /*0x2c*/ u8* unk4; + /*0x30*/ union { + /* */ u32 all; + /* */ struct { + /* */ u32 filler9 : 3; + /* */ u32 noMinishCap : 1; + /* */ u32 pullingState : 1; + /* */ u32 windyState : 1; + /* */ u32 filler10 : 4; + /* */ u32 slipperyState : 1; + /* */ u32 filler11 : 5; + /* */ u32 filler11b : 16; + /* */ } PACKED b; + /* */ } flags; + /*0x34*/ u8 filler12[6]; + /*0x3a*/ u16 unk5; + /*0x3c*/ u8 filler13[2]; + /*0x3e*/ u8 swordGoldParticle : 1; + /* */ u8 swordBlueParticle : 1; + /* */ u8 filler14 : 6; + /*0x3f*/ u8 unk6; + /*0x40*/ u8 filler15[75]; + /*0x8b*/ u8 unk7; + /*0x8c*/ u32 filler16[7]; + /*0xa8*/ u8 filler17[3]; + /*0xab*/ u8 unk71; + /*0xac*/ u32 unk8; } LinkState; @@ -80,4 +82,6 @@ extern Entity gLinkEntity; extern u32 GetInventoryValue(u32); extern s32 ModHealth(s32); -#endif \ No newline at end of file +#endif + +// clang-format on \ No newline at end of file diff --git a/linker.ld b/linker.ld index a74be327..db7c5346 100644 --- a/linker.ld +++ b/linker.ld @@ -299,6 +299,9 @@ SECTIONS { asm/code_08016DF8.o(.text); /* C source compiled without interworking */ asm/code_08018500.o(.text); + src/code_08018C58.o(.text); + src/item11.o(.text); + asm/item11.o(.text); asm/createBowEntity.o(.text); asm/bowUse.o(.text); asm/sub_08019410.o(.text); @@ -567,6 +570,7 @@ SECTIONS { asm/vaati.o(.text); src/zelda.o(.text); asm/mutoh.o(.text); + src/carpenter.o(.text); asm/carpenter.o(.text); asm/castorWildsStatue.o(.text); src/cat.o(.text); diff --git a/src/bladeBrothers.c b/src/bladeBrothers.c index 361eea9b..5f6e5d44 100644 --- a/src/bladeBrothers.c +++ b/src/bladeBrothers.c @@ -134,7 +134,7 @@ void FUN_08068b2c(Entity* this) { if (this->interactType == '\x02') { this->action = 2; this->interactType = '\0'; - uVar1 = sub_0806F5A4(sub_080045C4(this, &gLinkEntity)); + uVar1 = sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)); InitAnimationForceUpdate(this, uVar1); sub_0806F118(this); } else { diff --git a/src/carpenter.c b/src/carpenter.c new file mode 100644 index 00000000..b0608f6d --- /dev/null +++ b/src/carpenter.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "entity.h" +#include "sprite.h" +#include "link.h" + +extern void DeleteThisEntity(); +extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); +extern SpriteLoadData gUnk_08110CA8[]; +extern void sub_0805E3A0(Entity*, u32); +extern void sub_0807DD64(Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); +extern void sub_0806F118(Entity*); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern u32 UpdateFuseInteraction(Entity*); +extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); +extern void sub_0807000C(Entity*); +extern u32 sub_0806F5A4(); + +void Carpenter(Entity* this) { + if (*(u32*)&this->cutsceneBeh == 0) { + DeleteThisEntity(); + } + switch (this->action) { + case 0: + if (!LoadExtraSpriteData(this, gUnk_08110CA8 + this->entityType.form * 4)) + break; + this->action = 1; + this->field_0x69 = 0; + sub_0805E3A0(this, 2); + sub_0807DD64(this); + + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + this->field_0x69 = this->animIndex; + InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + 4 + (this->entityType.form * 8)); + sub_0806F118(this); + } else { + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + GetNextFrame(this); + } + break; + case 2: + if (!UpdateFuseInteraction(this)) + break; + this->action = 1; + InitializeAnimation(this, this->field_0x69); + break; + } +} + +void Carpenter_Head(Entity* this) { + if ((this->entityType).form < 2) { + SetExtraSpriteFrame(this, 0, this->frames.all & 0xffffff7f); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetExtraSpriteFrame(this, 2, this->frameSpriteSettings & 0x3f); + SetSpriteSubEntryOffsetData1(this, 1, 0); + SetSpriteSubEntryOffsetData2(this, 1, 2); + sub_0807000C(this); + } else { + SetExtraSpriteFrame(this, 0, this->frames.all & 0xffffff7f); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); + } +} + +void sub_080672b0(Entity *this, u32 param_2) +{ + InitializeAnimation(this,*(u32 *)(param_2 + 4) + (this->animationState >> 1) + this->entityType.form * 8); +} \ No newline at end of file diff --git a/src/code_08018C58.c b/src/code_08018C58.c new file mode 100644 index 00000000..23dd9fc6 --- /dev/null +++ b/src/code_08018C58.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "entity.h" + +extern u32 SetTileType(u32 tileID, u32 tilePos, u32 layerID); + +void CreateMinishEntrance(u32 tilePos) +{ + u32 x, y; + u32 tileID = 0x185; + + for (y = 0; y <= 3; y++) { + for (x = 0; x <= 4; x++) { + SetTileType(tileID++, tilePos + x, 1); + } + tilePos += 0x40; + } +} + +void sub_08018C58(u32 tilePos) +{ + u32 i = 0; + + for (;i < 6;) { + SetTileType(0x260 + i, tilePos, 1); + SetTileType(0x261 + i, tilePos + 1, 1); + i += 2; + tilePos += 0x40; + } +} \ No newline at end of file diff --git a/src/dampe.c b/src/dampe.c index 983b030a..f228f783 100644 --- a/src/dampe.c +++ b/src/dampe.c @@ -9,7 +9,7 @@ extern void sub_0805E3A0(Entity*, u32); extern void sub_0807DD50(Entity*); -extern void sub_080045C4(Entity*, Entity*); +extern void GetFacingDirection(Entity*, Entity*); extern u32 sub_0806F5A4(void); extern void sub_0806F118(Entity*); extern void sub_0807DD94(Entity*, u32); @@ -37,7 +37,7 @@ void Dampe(Entity* this) { if (this->interactType == 2) { this->action = 2; this->interactType = 0; - sub_080045C4(this, &gLinkEntity); + GetFacingDirection(this, &gLinkEntity); InitAnimationForceUpdate(this, sub_0806F5A4() + 4); sub_0806F118(this); } else { diff --git a/src/epona.c b/src/epona.c index 0d294408..c86ef2d7 100644 --- a/src/epona.c +++ b/src/epona.c @@ -78,7 +78,7 @@ void sub_08065AA4(Entity* this) { sub_0805E3A0(this, 2); sub_08065A50(this); } - InitAnimationForceUpdate(this, sub_0806F5A4(sub_080045C4(this, &gLinkEntity))); + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); } else { sub_08065A50(this); sub_080791D0(); diff --git a/src/item11.c b/src/item11.c new file mode 100644 index 00000000..cd515863 --- /dev/null +++ b/src/item11.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "entity.h" +#include "link.h" + +extern void DeleteThisEntity(); +extern void sub_08078CD0(Entity*); +extern void sub_08018FA0(Entity*); +extern void sub_0801766C(Entity*); +extern void sub_08018F6C(Entity*); + +extern void (*const gUnk_080B3DD0[])(Entity*); + +extern BoundingBox gUnk_080B3E18; +extern u8 gUnk_080B3DE0[]; +extern BoundingBox* gUnk_080B3DE8[]; + +void Item11(Entity *this) +{ + if (this->currentHealth) { + this->hurtBlinkTime = 0; + gUnk_080B3DD0[this->action](this); + } + else { + DeleteThisEntity(); + } +} + +void sub_08018CBC(Entity *this) +{ + u32 PVar1; + u8 uVar2; + Entity *pEVar3; + + *(u32 *)&this->cutsceneBeh = this->x.WORD = gLinkEntity.x.WORD; + *(u32 *)&this->field_0x80 = this->y.WORD = gLinkEntity.y.WORD; + uVar2 = this->animationState = gLinkEntity.animationState & 0xe; + this->direction = (u8)(uVar2 << 2); + this->nonPlanarMovement = 0x400; + this->damageType = 0x96; + this->field_0x3c = (gLinkEntity.field_0x3c + 1) | 0x80; + this->flags2 = gLinkEntity.flags2; + pEVar3 = this->attachedEntity; + if (pEVar3 != NULL) { + this->action = 1; + this->flags = this->flags & 0x7f; + this->actionDelay = 0x56; + this->field_0x40 = 0x1c; + this->field_0x44 = 6; + this->boundingBox = &gUnk_080B3E18; + this->attachedEntity->spriteOffsetX = 0; + this->attachedEntity->spriteSettings.b.ss0 = 0; + } + else { + if (gLinkState.field_0x1c == 0) { + DeleteThisEntity(); + } + this->action = 2; + this->spriteSettings.b.ss0 = 1; + this->spriteTileSize = 0xa6; + this->palette = 0x33; + this->spriteVramOffset = 0; + (this->entityType).form = gLinkState.filler9[0] - 1; + this->actionDelay = gUnk_080B3DE0[(this->entityType).form * 2]; + this->field_0x44 = gUnk_080B3DE0[(this->entityType).form * 2 + 1]; + this->field_0x40 = 0x1b; + this->boundingBox = gUnk_080B3DE8[(this->entityType).form]; + (u32 *)gLinkEntity.field_0x70 = this; + sub_08078CD0(&gLinkEntity); + (u32 *)gLinkEntity.field_0x70 = pEVar3; + InitializeAnimation(this, (this->entityType).form + 10); + sub_08018FA0(this); + } + sub_0801766C(this); +} + +void sub_08018DE8(Entity *this) +{ + u8 bVar1; + + bVar1 = this->attachedEntity->field_0x3a & 4; + if (bVar1 == 0) { + gLinkState.field_0x1c = bVar1; + DeleteThisEntity(); + } + switch (gLinkState.field_0x1c) { + case 0: + sub_08018F6C(this); + break; + case 5: + this->attachedEntity->previousActionFlag = 4; + this->flags = this->flags | 0x80; + this->action = 2; + this->ticks.b0 = 2; + this->attachedEntity->spriteSettings.b.ss0 = 1; + sub_08018FA0(this); + break; + } + sub_08078CD0(&gLinkEntity); +} \ No newline at end of file diff --git a/src/lakitu.c b/src/lakitu.c index 9c7c41d6..bd63a84a 100644 --- a/src/lakitu.c +++ b/src/lakitu.c @@ -53,7 +53,7 @@ extern u32 sub_0806FCB8(Entity *, u32, u32, u32); extern u32 sub_080041A0(Entity *, Entity *, u32, u32); // sub_0803CA84 -extern u32 sub_080045C4(Entity *, Entity *); +extern u32 GetFacingDirection(Entity *, Entity *); // sub_0803CAD0 extern u8 sub_080045D4(s16, s16, u16, u16); @@ -288,7 +288,7 @@ bool32 sub_0803CA4C(Entity *this) { } void sub_0803CA84(Entity *this, u32 unkParameter) { - u32 altAnimState = sub_080045C4(this, &gLinkEntity); + u32 altAnimState = GetFacingDirection(this, &gLinkEntity); if (((altAnimState - 3) & 7) > 2 || ((this->animationState - (altAnimState >> 3)) & 3) > 1) { u32 intermediate = (altAnimState + 4) & 0x18; @@ -334,7 +334,7 @@ void sub_0803CB34(Entity *this) { this->action = 5; this->damageType = 0xa6; - this->field_0x78.HALF.LO = sub_080045C4(this, &gLinkEntity); + this->field_0x78.HALF.LO = GetFacingDirection(this, &gLinkEntity); InitAnimationForceUpdate(this, this->animationState + 8); } diff --git a/src/malon.c b/src/malon.c index 3f9c4517..25140974 100644 --- a/src/malon.c +++ b/src/malon.c @@ -41,7 +41,7 @@ void sub_080658BC(Entity* this) { if (this->interactType == 2) { this->action = 2; this->interactType = 0; - InitAnimationForceUpdate(this, sub_0806F5A4(sub_080045C4(this, &gLinkEntity))); + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); sub_0806F118(this); } else { sub_0807DD94(this, 0); diff --git a/src/talon.c b/src/talon.c index ab9d0b92..0b8d396b 100644 --- a/src/talon.c +++ b/src/talon.c @@ -126,7 +126,7 @@ void sub_080656D4(Entity* this) { void sub_0806574C(Entity* this) { u32 j; - j = (this->animIndex & ~3) + sub_0806F5A4(sub_080045C4(this, &gLinkEntity)); + j = (this->animIndex & ~3) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)); if (this->animIndex != j) { InitAnimationForceUpdate(this, j); } diff --git a/src/townMinish.c b/src/townMinish.c index 73d19682..c47a2a3f 100644 --- a/src/townMinish.c +++ b/src/townMinish.c @@ -52,7 +52,7 @@ void sub_0806ABFC(Entity *this) Entity *link = &gLinkEntity; if (sub_080041A0(this, link, 0x18, 0x18)) { - unk = sub_080045C4(this, link) & (u8)0x1e; + unk = GetFacingDirection(this, link) & (u8)0x1e; } else { unk = this->animationState << 2; From cd25d3c120951bc5876d5bdc690978d35ba38ff5 Mon Sep 17 00:00:00 2001 From: theo3 Date: Thu, 9 Jul 2020 02:40:55 -0700 Subject: [PATCH 11/25] entity.h bitfields --- include/entity.h | 38 +++++++++++++++++++------------------- src/bell.c | 2 +- src/bladeBrothers.c | 6 +++--- src/chestSpawner.c | 4 ++-- src/cloud.c | 4 ++-- src/cow.c | 2 +- src/dampe.c | 4 ++-- src/epona.c | 4 ++-- src/giantLeaf.c | 2 +- src/goron.c | 2 +- src/greatFairy.c | 24 ++++++++++++------------ src/hangingSeed.c | 2 +- src/heartContainer.c | 4 ++-- src/item11.c | 6 +++--- src/lakitu.c | 6 +++--- src/lakituCloud.c | 8 ++++---- src/malon.c | 6 +++--- src/milkCart.c | 2 +- src/miniFireballGuy.c | 2 +- src/object1A.c | 2 +- src/object49.c | 2 +- src/slime.c | 2 +- src/stamp.c | 2 +- src/talon.c | 4 ++-- src/thoughtBubble.c | 4 ++-- src/treeHidingPortal.c | 2 +- src/windTribeFlag.c | 4 ++-- src/windTribespeople.c | 2 +- src/zelda.c | 8 ++++---- 29 files changed, 80 insertions(+), 80 deletions(-) diff --git a/include/entity.h b/include/entity.h index 8de44506..1b904c02 100644 --- a/include/entity.h +++ b/include/entity.h @@ -58,26 +58,26 @@ typedef struct Entity { /*0x18*/ union { /* */ u8 raw; /* */ struct { - /* */ u8 ss0 : 2; - /* */ u8 ss2 : 1; - /* */ u8 ss3 : 1; - /* */ u8 ss4 : 1; - /* */ u8 ss5 : 1; - /* */ u8 ss6 : 1; - /* */ u8 ss7 : 1; + /* */ u8 draw : 2; // 1-2 + /* */ u8 ss2 : 1; // 4 + /* */ u8 ss3 : 1; // 8 + /* */ u8 bigShadow : 1; //0x10 + /* */ u8 giantShadow : 1; //0x20 + /* */ u8 flipX : 1; //0x40 + /* */ u8 flipY : 1; //0x80 /* */ } PACKED b; /* */ } PACKED spriteSettings; /*0x19*/ struct { - /* */ u8 b0 : 2; - /* */ u8 b1 : 2; - /* */ u8 b2 : 2; - /* */ u8 b3 : 2; + /* */ u8 b0 : 2; // 1-2 + /* */ u8 alphaBlend : 2; // 4-8 + /* */ u8 b2 : 2; //0x10 + /* */ u8 b3 : 2; //0x40 /* */ } PACKED spriteOrder; /*0x1a*/ u8 palette; /*0x1b*/ struct { - /* */ u8 b0 : 4; - /* */ u8 b1 : 2; - /* */ u8 b2 : 2; + /* */ u8 b0 : 4; + /* */ u8 flipX : 2; //0x10 + /* */ u8 flipY : 2; //0x40 /* */ } PACKED spriteOrientation; /*0x1c*/ u8 filler[1]; /*0x1d*/ u8 field_0x1d; @@ -87,9 +87,9 @@ typedef struct Entity { /*0x24*/ s16 nonPlanarMovement; /*0x26*/ u8 spriteAnimation[3]; /*0x29*/ struct { - /* */ u8 b0 : 3; - /* */ u8 b1 : 3; - /* */ u8 b2 : 2; + /* */ u8 b0 : 3; // 1-4 + /* */ u8 b1 : 3; // 8 + /* */ u8 b2 : 2; //0x40 /* */ } PACKED ticks; /*0x2a*/ u16 collisions; /*0x2c*/ union SplitWord x; @@ -124,8 +124,8 @@ typedef struct Entity { /* */ struct { /* */ u8 f0 : 1; /* */ u8 f1 : 5; - /* */ u8 f2 : 1; - /* */ u8 f3 : 1; + /* */ u8 f2 : 1; //0x40 + /* */ u8 f3 : 1; //0x80 /* */ } PACKED b; /* */ } PACKED frames; /*0x5b*/ u8 frameSpriteSettings; diff --git a/src/bell.c b/src/bell.c index 467a6977..62f1a81b 100644 --- a/src/bell.c +++ b/src/bell.c @@ -9,7 +9,7 @@ void Bell(Entity* ent) { void sub_08097D90(Entity* ent) { ent->action = 1; - ent->spriteSettings.b.ss0 = 1; + ent->spriteSettings.b.draw = 1; ent->collisionLayer = 1; ent->ticks.b0 = 0; UpdateSpriteOrderAndFlip(ent); diff --git a/src/bladeBrothers.c b/src/bladeBrothers.c index 5f6e5d44..83ff32a2 100644 --- a/src/bladeBrothers.c +++ b/src/bladeBrothers.c @@ -122,7 +122,7 @@ void sub_08068ADC(Entity* this) { void sub_08068AFC(Entity* this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; *(u8*)&this->field_0x68 = sub_0801E99C(this); sub_08078784(this, *(u8*)&this->field_0x68); sub_0807DD50(this); @@ -400,8 +400,8 @@ void BladeBrothers_Fusion(Entity* this) { if (this->action == 0) { this->action += 1; - this->spriteSettings.b.ss0 = 0; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 0; + this->spriteSettings.b.draw = 1; InitAnimationForceUpdate(this, 4); } else { UpdateAnimationSingleFrame(this); diff --git a/src/chestSpawner.c b/src/chestSpawner.c index b3dcfb4a..43cb1c1a 100644 --- a/src/chestSpawner.c +++ b/src/chestSpawner.c @@ -28,8 +28,8 @@ void sub_08083E08(Entity *this) void sub_08083E20(Entity *this) { this->action = 3; - this->spriteSettings.b.ss0 = 1; - this->spriteOrder.b1 = 0; + this->spriteSettings.b.draw = 1; + this->spriteOrder.alphaBlend = 0; sub_080842D8(this); sub_08078828(this); } diff --git a/src/cloud.c b/src/cloud.c index 6701cf13..734559c4 100644 --- a/src/cloud.c +++ b/src/cloud.c @@ -46,7 +46,7 @@ void sub_0809F4DC(Entity* this) { void sub_0809F514(Entity* this) { this->action = 1; this->actionDelay = 120; - this->spriteSettings.b.ss0 = 0; + this->spriteSettings.b.draw = 0; *(u8*)&this->field_0x68 = 12; gRoomControls.cameraTarget = this; gUnk_02034490 = 255; @@ -80,7 +80,7 @@ void sub_0809F5B0(Entity* this) { void sub_0809F5DC(Entity* this) { this->action = 1; - this->spriteSettings.b.ss0 = 0; + this->spriteSettings.b.draw = 0; *(u8*)&this->field_0x68 = 12; } diff --git a/src/cow.c b/src/cow.c index 7422bd28..633334b1 100644 --- a/src/cow.c +++ b/src/cow.c @@ -229,7 +229,7 @@ void sub_0806924C(Entity* ent) { void Cow_Fusion(Entity* ent) { if (ent->action == 0) { ent->action++; - ent->spriteSettings.b.ss0 = 1; + ent->spriteSettings.b.draw = 1; InitAnimationForceUpdate(ent, 15); } else { UpdateAnimationSingleFrame(ent); diff --git a/src/dampe.c b/src/dampe.c index f228f783..822f6c2c 100644 --- a/src/dampe.c +++ b/src/dampe.c @@ -29,7 +29,7 @@ void Dampe(Entity* this) { switch (this->action) { case 0: this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; sub_0805E3A0(this, 2); sub_0807DD50(this); return; @@ -61,7 +61,7 @@ void sub_0806BE3C(Entity* this) { void Dampe_Fusion(Entity* this) { if (this->action == 0) { this->action++; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; InitAnimationForceUpdate(this, 2); } else { UpdateAnimationSingleFrame(this); diff --git a/src/epona.c b/src/epona.c index c86ef2d7..617867b6 100644 --- a/src/epona.c +++ b/src/epona.c @@ -18,7 +18,7 @@ void Epona(Entity* this) { void sub_080659B8(Entity* this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->animationState = 6; this->field_0x69 = -1; this->field_0x68 = sub_0801E99C(this); @@ -91,7 +91,7 @@ void sub_08065AA4(Entity* this) { void Epona_Fusion(Entity* this) { if (this->action == 0) { this->action += 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; InitAnimationForceUpdate(this, 7); } else { UpdateAnimationSingleFrame(this); diff --git a/src/giantLeaf.c b/src/giantLeaf.c index d34c1605..cf2ee5ec 100644 --- a/src/giantLeaf.c +++ b/src/giantLeaf.c @@ -12,7 +12,7 @@ extern s16 gUnk_0812176A[]; void GiantLeaf(Entity* ent) { if (ent->action == 0) { ent->action = 1; - ent->spriteSettings.b.ss0 = 1; + ent->spriteSettings.b.draw = 1; ent->spriteOrder.b3 = 3; ent->ticks.b0 = 7; ent->frameIndex = ent->entityType.form; diff --git a/src/goron.c b/src/goron.c index 42124144..b65e97ea 100644 --- a/src/goron.c +++ b/src/goron.c @@ -127,7 +127,7 @@ void sub_080694EC(Entity* this) { void Goron_Fusion(Entity* this) { if (this->action == 0) { this->action++; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; InitAnimationForceUpdate(this, 2); } else { UpdateAnimationSingleFrame(this); diff --git a/src/greatFairy.c b/src/greatFairy.c index 02b5268b..c2aa5e08 100644 --- a/src/greatFairy.c +++ b/src/greatFairy.c @@ -161,8 +161,8 @@ void GreatFairy_WingsCallBehavior(Entity* this) { void GreatFairy_WingsInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->ticks.b0 = 5; - this->spriteSettings.b.ss0 = 1; - this->spriteOrder.b1 = 1; + this->spriteSettings.b.draw = 1; + this->spriteOrder.alphaBlend = 1; gScreen.controls.windowOutsideControl = 3904; gScreen.controls.mosaicSize = 2057; this->nonPlanarMovement = 1024; @@ -192,7 +192,7 @@ void GreatFairy_WakeCallBehavior(Entity* this) { void GreatFairy_WakeInit(Entity* this) { GreatFairy_InitializeAnimation(this); - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->ticks.b0 = 6; } @@ -213,7 +213,7 @@ void GreatFairy_MiniInit(Entity* this) { CopyPosition(this, aff); aff->parent = this; GreatFairy_InitializeAnimation(this); - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->field_0xf = 0; } } @@ -253,7 +253,7 @@ void GreatFairy_MiniAffineCallBehavior(Entity* this) { void GreatFairy_MiniAffineInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->ticks.b0 = 6; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; } // Getting ready for affine transformation @@ -293,7 +293,7 @@ void GreatFairy_DropletCallBehavior(Entity* this) { void GreatFairy_DropletInit(Entity* this) { GreatFairy_InitializeAnimation(this); - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->height.HALF.HI = 0; this->ticks.b0 = 5; PlaySFX(320); @@ -313,7 +313,7 @@ void GreatFairy_RippleCallBehavior(Entity* this) { void GreatFairy_RippleInit(Entity* this) { GreatFairy_InitializeAnimation(this); - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->ticks.b0 = 6; } @@ -333,7 +333,7 @@ void GreatFairy_BigRippleCallBehavior(Entity* this) { void GreatFairy_BigRippleInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->actionDelay = 120; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->ticks.b0 = 5; PlaySFX(249); } @@ -361,7 +361,7 @@ void GreatFairy_EnergyCallBehavior(Entity* this) { void GreatFairy_EnergyInit(Entity* this) { GreatFairy_InitializeAnimation(this); - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->ticks.b0 = 5; } @@ -387,7 +387,7 @@ void sub_08087150(Entity* this) { u32 var2; GreatFairy_InitializeAnimation(this); - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->spriteOrientation &= 63; this->spriteOrder.b0 = 0; this->ticks.b0 = 3; @@ -472,8 +472,8 @@ void sub_08087294(Entity* this) { #ifdef NON_MATCHING void sub_080872AC(Entity* this) { - this->spriteSettings.b.ss0 = 1; - this->spriteOrientation.b2 = 1; + this->spriteSettings.b.draw = 1; + this->spriteOrientation.flipY = 1; this->spriteOrder.b0 = 0; this->field_0x68 = (u16)(this->x).HALF.HI; this->field_0x6a = (u16)(this->y).HALF.HI; diff --git a/src/hangingSeed.c b/src/hangingSeed.c index ab302f19..f823582a 100644 --- a/src/hangingSeed.c +++ b/src/hangingSeed.c @@ -30,7 +30,7 @@ void nullsub_7(Entity* this){} void sub_08021720(Entity *this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->frameIndex = (this->entityType).form; this->spriteOrder.b3 = 1; this->ticks.b0 = 3; diff --git a/src/heartContainer.c b/src/heartContainer.c index 04df84e9..1c58034b 100644 --- a/src/heartContainer.c +++ b/src/heartContainer.c @@ -20,7 +20,7 @@ void sub_0808E6A0(Entity* this) { } this->action = 1; this->entityType.form = 0x62; - this->spriteSettings.b.ss0 = 0; + this->spriteSettings.b.draw = 0; this->boundingBox = &gUnk_08121C58; this->collisionLayer = 3; this->scriptedScene = 3; @@ -29,7 +29,7 @@ void sub_0808E6A0(Entity* this) { void sub_0808E6E4(Entity* this) { if (CheckFlags(this->field_0x86)) { this->action = 2; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->spriteOrder.b0 = 3; sub_0808E714(this); } diff --git a/src/item11.c b/src/item11.c index cd515863..1396dbe0 100644 --- a/src/item11.c +++ b/src/item11.c @@ -48,14 +48,14 @@ void sub_08018CBC(Entity *this) this->field_0x44 = 6; this->boundingBox = &gUnk_080B3E18; this->attachedEntity->spriteOffsetX = 0; - this->attachedEntity->spriteSettings.b.ss0 = 0; + this->attachedEntity->spriteSettings.b.draw = 0; } else { if (gLinkState.field_0x1c == 0) { DeleteThisEntity(); } this->action = 2; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->spriteTileSize = 0xa6; this->palette = 0x33; this->spriteVramOffset = 0; @@ -91,7 +91,7 @@ void sub_08018DE8(Entity *this) this->flags = this->flags | 0x80; this->action = 2; this->ticks.b0 = 2; - this->attachedEntity->spriteSettings.b.ss0 = 1; + this->attachedEntity->spriteSettings.b.draw = 1; sub_08018FA0(this); break; } diff --git a/src/lakitu.c b/src/lakitu.c index bd63a84a..d813da9e 100644 --- a/src/lakitu.c +++ b/src/lakitu.c @@ -180,7 +180,7 @@ void sub_0803C8BC(Entity *this) { if (sub_0803CA4C(this)) { this->action = 2; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; } } @@ -218,7 +218,7 @@ void sub_0803C950(Entity *this) { if (this->frames.b.f3 != 0) { this->action = 1; - this->spriteSettings.b.ss0 = 0; + this->spriteSettings.b.draw = 0; InitAnimationForceUpdate(this, this->animationState); } @@ -368,7 +368,7 @@ void sub_0803CBAC(Entity *this) { } this->action = 7; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->ticks.b1 = 1; diff --git a/src/lakituCloud.c b/src/lakituCloud.c index 5b5f9fff..0dca3465 100644 --- a/src/lakituCloud.c +++ b/src/lakituCloud.c @@ -99,11 +99,11 @@ void sub_0803CDA8(Entity *this) { void sub_0803CDD8(Entity *this) { u8 one; - u8 ss0; + u8 draw; - ss0 = this->spriteSettings.b.ss0; + draw = this->spriteSettings.b.draw; one = 1; - this->spriteSettings.b.ss0 = ss0 ^ one; + this->spriteSettings.b.draw = draw ^ one; this->actionDelay--; @@ -112,7 +112,7 @@ void sub_0803CDD8(Entity *this) { this->flags |= 0x80; - this->spriteSettings.b.ss0 = one; + this->spriteSettings.b.draw = one; } } diff --git a/src/malon.c b/src/malon.c index 25140974..de484cc4 100644 --- a/src/malon.c +++ b/src/malon.c @@ -20,7 +20,7 @@ void Malon(Entity* this) { void sub_08065864(Entity* this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; InitAnimationForceUpdate(this, 0xC); } @@ -30,7 +30,7 @@ void sub_08065880(Entity* this) { void sub_08065888(Entity* this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->animationState = 4; this->field_0x68 = sub_0801E99C(this); sub_08078784(this, this->field_0x68); @@ -72,7 +72,7 @@ void sub_08065914(Entity* this) { void Malon_Fusion(Entity* this) { if (this->action == 0) { this->action++; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; InitAnimationForceUpdate(this, 0xC); } else { UpdateAnimationSingleFrame(this); diff --git a/src/milkCart.c b/src/milkCart.c index 2e91ebf7..b423dca7 100644 --- a/src/milkCart.c +++ b/src/milkCart.c @@ -12,7 +12,7 @@ void MilkCart(Entity* ent) { void sub_08065B6C(Entity* ent) { ent->action++; - ent->spriteSettings.b.ss0 = 1; + ent->spriteSettings.b.draw = 1; ent->y.HALF.LO += -0x8000; ent->animationState = 6; InitAnimationForceUpdate(ent, 3); diff --git a/src/miniFireballGuy.c b/src/miniFireballGuy.c index e8c2744a..d7bdc540 100644 --- a/src/miniFireballGuy.c +++ b/src/miniFireballGuy.c @@ -43,7 +43,7 @@ void nullsub_23(Entity* this) {} void sub_08045618(Entity *this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->nonPlanarMovement = 0x80; this->field_0x3c = this->field_0x3c | 0x10; sub_0804A720(this); diff --git a/src/object1A.c b/src/object1A.c index 54da11a9..f7d9e469 100644 --- a/src/object1A.c +++ b/src/object1A.c @@ -21,7 +21,7 @@ void sub_080869DC(Entity* ent) { Entity* itemEntity; ent->action = 1; - ent->spriteSettings.b.ss0 = 0; + ent->spriteSettings.b.draw = 0; ent->boundingBox = &gUnk_080FD1A8; ent->field_0x3c |= 16; itemEntity = CreateObject(0, ent->entityType.form, 0); diff --git a/src/object49.c b/src/object49.c index 3489f9e6..c00af534 100644 --- a/src/object49.c +++ b/src/object49.c @@ -95,7 +95,7 @@ void sub_0808F1F8(Entity *this) this->spriteOrder.b0 = 3; this->action++; this->spriteOrder.b3 = this->parent->spriteOrder.b3; - this->spriteOrientation.b2 = this->parent->spriteOrientation.b2; + this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY; this->ticks.b0 = 7; InitializeAnimation(this, 1); sub_0808F244(this); diff --git a/src/slime.c b/src/slime.c index 3f2fdd4d..42a5d952 100644 --- a/src/slime.c +++ b/src/slime.c @@ -53,7 +53,7 @@ void nullsub_171() { void sub_08044FC8(Entity* this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->nonPlanarMovement = 128; sub_0804A720(this); InitializeAnimation(this, 0); diff --git a/src/stamp.c b/src/stamp.c index 1ee9476b..db1d7310 100644 --- a/src/stamp.c +++ b/src/stamp.c @@ -30,7 +30,7 @@ void Stamp(Entity* ent) { void sub_08062BD4(Entity* ent) { ent->action = 1; - ent->spriteSettings.b.ss0 = 1; + ent->spriteSettings.b.draw = 1; InitializeAnimation(ent, 0); sub_08078778(ent); } diff --git a/src/talon.c b/src/talon.c index 0b8d396b..01449c06 100644 --- a/src/talon.c +++ b/src/talon.c @@ -63,7 +63,7 @@ void sub_0806559C(Entity* this) { void sub_08065608(Entity* this) { if (LoadExtraSpriteData(this, &gUnk_0810FEB0) != 0) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->field_0x68 = sub_0801E99C(this); sub_08078784(this, this->field_0x68); sub_0807DD50(this); @@ -152,7 +152,7 @@ void Talon_Fusion(Entity* this) { if (this->action == 0) { if (LoadExtraSpriteData(this, &gUnk_0810FEB0) != 0) { this->action++; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; InitializeAnimation(this, 6); } } else { diff --git a/src/thoughtBubble.c b/src/thoughtBubble.c index eebbba1b..73316eca 100644 --- a/src/thoughtBubble.c +++ b/src/thoughtBubble.c @@ -18,11 +18,11 @@ void ThoughtBubble(Entity* this) void ThoughtBubble_Init(Entity *this) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; if (this->actionDelay == 0) { this->actionDelay = 0x2d; } - this->spriteOrientation.b2 = 1; + this->spriteOrientation.flipY = 1; InitializeAnimation(this, this->entityType.parameter); PlaySFX(ThoughtBubble_SFX[this->entityType.parameter]); } diff --git a/src/treeHidingPortal.c b/src/treeHidingPortal.c index 39bc2128..5c7ef846 100644 --- a/src/treeHidingPortal.c +++ b/src/treeHidingPortal.c @@ -52,7 +52,7 @@ void sub_0809E8BC(Entity* this) { if (--this->actionDelay == 0) { this->action = 3; this->actionDelay = 0x3c; - this->spriteSettings.b.ss0 = 0; + this->spriteSettings.b.draw = 0; sub_0809E96C(this); sub_0809E918(this); } diff --git a/src/windTribeFlag.c b/src/windTribeFlag.c index b17e9e9e..1decf382 100644 --- a/src/windTribeFlag.c +++ b/src/windTribeFlag.c @@ -8,10 +8,10 @@ void WindTribeFlag(Entity *this) this->action++; this->collisionLayer = 2; if ((this->entityType).form == 0) { - this->spriteSettings.b.ss6 = 0; + this->spriteSettings.b.flipX = 0; } else { - this->spriteSettings.b.ss6 = 1; + this->spriteSettings.b.flipX = 1; } UpdateSpriteOrderAndFlip(this); InitializeAnimation(this,0); diff --git a/src/windTribespeople.c b/src/windTribespeople.c index 01d243cd..965a73ea 100644 --- a/src/windTribespeople.c +++ b/src/windTribespeople.c @@ -42,7 +42,7 @@ void sub_0806C798(Entity* this) { iVar1 = LoadExtraSpriteData(this, gUnk_08113A1C + (this->entityType.form * 4)); if (iVar1 != 0) { this->action = 1; - this->spriteSettings.b.ss0 = 1; + this->spriteSettings.b.draw = 1; this->animationState = this->actionDelay; sub_0807DD50(this); sub_0806C7D4(this); diff --git a/src/zelda.c b/src/zelda.c index a11e244b..8aa89a33 100644 --- a/src/zelda.c +++ b/src/zelda.c @@ -34,7 +34,7 @@ void Zelda(Entity* ent) { void sub_08066CCC(Entity* ent) { ent->action = 1; - ent->spriteSettings.b.ss0 = 1; + ent->spriteSettings.b.draw = 1; sub_0805EA78(ent, 7); sub_0805E3A0(ent, 2); sub_0807DD50(ent); @@ -54,7 +54,7 @@ void sub_08066D14(Entity* ent, u32* param_2) { parent = ent->parent; if (parent != NULL) { ent->animationState = parent->animationState; - ent->spriteSettings.b.ss0 = 1; + ent->spriteSettings.b.draw = 1; CopyPosition(parent, ent); sub_08068680(ent, ent->parent); param_2[5] = 1; @@ -69,9 +69,9 @@ void sub_08066D4C(Entity* ent, u32* param_2) { parent = ent->parent; if (ent->parent != NULL) { CopyPosition(ent, parent); - ent->parent->spriteSettings.b.ss0 = 1; + ent->parent->spriteSettings.b.draw = 1; ent->parent->animationState = ent->animationState; - ent->spriteSettings.b.ss0 = 0; + ent->spriteSettings.b.draw = 0; ent->field_0x17 &= 0xFE; sub_08068694(ent, ent->parent); param_2[5] = 1; From 1bd6c3b5a47e3b3ab3e6c21af6d786fd5ffc7a5f Mon Sep 17 00:00:00 2001 From: theo3 Date: Thu, 9 Jul 2020 12:04:14 -0700 Subject: [PATCH 12/25] entity.spriteOrder -> entity.spriteRendering --- asm/bakerOven.s | 2 +- asm/beetle.s | 2 +- asm/bell.s | 2 +- asm/bigBarrel.s | 2 +- asm/bird.s | 8 ++++---- asm/book.s | 2 +- asm/code_0800857C.s | 10 +++++----- asm/code_08016DF8.s | 2 +- asm/code_08049CD4.s | 2 +- asm/code_0805436C.s | 4 ++-- asm/code_0806EC20.s | 2 +- asm/code_08070698.s | 6 +++--- asm/code_080732D0.s | 2 +- asm/code_08077B98.s | 2 +- asm/code_0807B9B8.s | 2 +- asm/code_0807CC3C.s | 6 +++--- asm/code_080A5574.s | 8 ++++---- asm/crow.s | 4 ++-- asm/cuccoAggr.s | 2 +- asm/deathFx.s | 2 +- asm/enemy64.s | 4 ++-- asm/fallingBoulder.s | 2 +- asm/floatingBlock.s | 2 +- asm/furniture.s | 6 +++--- asm/gentariCurtains.s | 8 ++++---- asm/giantRock.s | 2 +- asm/guardWithSpear.s | 2 +- asm/gyorgChild.s | 2 +- asm/gyorgFemale.s | 4 ++-- asm/gyorgMale.s | 6 +++--- asm/houseDoorExterior.s | 2 +- asm/initializeLink.s | 2 +- asm/itemForSale.s | 2 +- asm/itemOnGround.s | 4 ++-- asm/jailBars.s | 2 +- asm/ladderHoleInBookshelf.s | 6 +++--- asm/lavaPlatform.s | 4 ++-- asm/leever.s | 2 +- asm/macroBook.s | 2 +- asm/macroDecorations.s | 2 +- asm/manager2D.s | 2 +- asm/manager3.s | 2 +- asm/manager37.s | 2 +- asm/mazaalMacro.s | 10 +++++----- asm/minishLight.s | 2 +- asm/minishSizedArchway.s | 2 +- asm/moldworm.s | 2 +- asm/npc5.s | 2 +- asm/object21.s | 2 +- asm/object35.s | 2 +- asm/object6A.s | 10 +++++----- asm/object80.s | 2 +- asm/object81.s | 2 +- asm/object8A.s | 2 +- asm/object8B.s | 2 +- asm/object93.s | 2 +- asm/object96.s | 4 ++-- asm/object97.s | 8 ++++---- asm/object9E.s | 4 ++-- asm/objectBA.s | 4 ++-- asm/objectOnPillar.s | 2 +- asm/pesto.s | 2 +- asm/picoBloom.s | 2 +- asm/pullableLever.s | 4 ++-- asm/rope.s | 2 +- asm/sluggula.s | 2 +- asm/spinyChuchu.s | 2 +- asm/stalfos.s | 2 +- asm/sub_080A2838.s | 2 +- asm/swordsmanNewsletter.s | 2 +- asm/takkuri.s | 4 ++-- asm/vaatiEyesMacro.s | 2 +- asm/wallMaster.s | 2 +- asm/wallMaster2.s | 2 +- asm/waterDrop.s | 4 ++-- include/entity.h | 6 +++--- include/main.h | 2 +- src/archway.c | 4 ++-- src/bell.c | 4 ++-- src/bladeBrothers.c | 2 +- src/chestSpawner.c | 2 +- src/code_080A29BC.c | 2 +- src/giantLeaf.c | 4 ++-- src/greatFairy.c | 24 ++++++++++++------------ src/hangingSeed.c | 4 ++-- src/heartContainer.c | 2 +- src/item11.c | 2 +- src/keese.c | 6 +++--- src/lakitu.c | 4 ++-- src/lightableSwitch.c | 4 ++-- src/mask.c | 2 +- src/minishSizedEntrance.c | 4 ++-- src/object49.c | 6 +++--- src/object86.c | 4 ++-- src/position.c | 6 +++--- src/treeHidingPortal.c | 4 ++-- src/windTribeFlag.c | 2 +- 97 files changed, 171 insertions(+), 171 deletions(-) diff --git a/asm/bakerOven.s b/asm/bakerOven.s index fb5b16e1..afb026d5 100644 --- a/asm/bakerOven.s +++ b/asm/bakerOven.s @@ -26,7 +26,7 @@ sub_0809CC74: @ 0x0809CC74 adds r5, r0, #0 movs r4, #1 strb r4, [r5, #0xc] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrb r0, [r5, #0xa] cmp r0, #0 bne _0809CCD4 diff --git a/asm/beetle.s b/asm/beetle.s index ea7afc04..a5215475 100644 --- a/asm/beetle.s +++ b/asm/beetle.s @@ -364,7 +364,7 @@ _080219C2: movs r1, #0 bl InitializeAnimation adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08021A04: pop {r4, pc} .align 2, 0 diff --git a/asm/bell.s b/asm/bell.s index 8454fb78..fdc37e1b 100644 --- a/asm/bell.s +++ b/asm/bell.s @@ -44,7 +44,7 @@ sub_08097D90: @ 0x08097D90 ands r0, r1 strb r0, [r2] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0 bl InitAnimationForceUpdate diff --git a/asm/bigBarrel.s b/asm/bigBarrel.s index a61d2dac..caa4d348 100644 --- a/asm/bigBarrel.s +++ b/asm/bigBarrel.s @@ -509,7 +509,7 @@ _08088DEC: _08088E1E: strb r1, [r4, #0xb] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer b _08088E6E _08088E28: ldrb r0, [r4, #0xb] diff --git a/asm/bird.s b/asm/bird.s index a2f52f0e..3ae45e1b 100644 --- a/asm/bird.s +++ b/asm/bird.s @@ -74,7 +74,7 @@ sub_0809CF54: @ 0x0809CF54 ldr r0, _0809CFE8 @ =0x00000123 bl PlaySFX adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0 bl InitAnimationForceUpdate @@ -162,7 +162,7 @@ sub_0809D048: @ 0x0809D048 movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0x17 bl InitAnimationForceUpdate @@ -266,7 +266,7 @@ sub_0809D10C: @ 0x0809D10C movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0x17 bl InitAnimationForceUpdate @@ -323,7 +323,7 @@ sub_0809D178: @ 0x0809D178 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r1, r4, #0 adds r1, #0x5a movs r0, #0x80 diff --git a/asm/book.s b/asm/book.s index 561f4120..07893253 100644 --- a/asm/book.s +++ b/asm/book.s @@ -71,7 +71,7 @@ _0809B420: strb r0, [r4, #0xb] _0809B424: adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrb r1, [r4, #0xa] adds r1, #0x39 adds r0, r4, #0 diff --git a/asm/code_0800857C.s b/asm/code_0800857C.s index 7d6edaf9..5d66e4b3 100644 --- a/asm/code_0800857C.s +++ b/asm/code_0800857C.s @@ -387,7 +387,7 @@ _0800882C: movs r3, #0x38 ldrb r1, [r4, r3] strb r1, [r0, r3] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0800883A: ldr r1, _080088E0 @ =gRoomControls ldrh r0, [r1, #6] @@ -4030,8 +4030,8 @@ gUnk_080169A4:: .byte 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00 .byte 0x00, 0x00, 0x01, 0x00 - thumb_func_start UpdateSpriteOrderAndFlip -UpdateSpriteOrderAndFlip: @ 0x08016A04 + thumb_func_start UpdateSpriteForCollisionLayer +UpdateSpriteForCollisionLayer: @ 0x08016A04 movs r1, #0x38 ldrb r1, [r0, r1] lsls r1, r1, #1 @@ -4083,7 +4083,7 @@ _08016A62: strb r3, [r4, r5] _08016A64: adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {r4, r5, pc} thumb_func_start sub_08016A6C @@ -4123,6 +4123,6 @@ sub_08016AD2: @ 0x08016AD2 bl sub_08016A6C push {r0} adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {r0, r4, pc} diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index d5b8213c..312d0bdd 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -1567,7 +1567,7 @@ sub_08017940: @ 0x08017940 adds r0, #0x38 strb r1, [r0] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080179CC: movs r1, #0 ldr r0, _080179E8 @ =gLinkEntity diff --git a/asm/code_08049CD4.s b/asm/code_08049CD4.s index dcd0d0a1..d415811d 100644 --- a/asm/code_08049CD4.s +++ b/asm/code_08049CD4.s @@ -1290,7 +1290,7 @@ _0804A612: strb r0, [r1] _0804A638: adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r5, r4, #0 adds r5, #0x6d ldrb r1, [r5] diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s index 592838bf..ee505e5d 100644 --- a/asm/code_0805436C.s +++ b/asm/code_0805436C.s @@ -685,7 +685,7 @@ _08054842: adds r0, #0x38 strb r1, [r0] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0805486A: adds r0, r4, #0 _0805486C: @@ -1551,7 +1551,7 @@ sub_08054EFC: @ 0x08054EFC movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0x35 movs r2, #0 diff --git a/asm/code_0806EC20.s b/asm/code_0806EC20.s index 8e3fbf72..7a47cab4 100644 --- a/asm/code_0806EC20.s +++ b/asm/code_0806EC20.s @@ -163,7 +163,7 @@ _0806ECD0: strb r1, [r0] strb r1, [r4, #0x1e] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0806ED4A: pop {r4, r5, pc} .align 2, 0 diff --git a/asm/code_08070698.s b/asm/code_08070698.s index 3ad8e6c2..ebe42a24 100644 --- a/asm/code_08070698.s +++ b/asm/code_08070698.s @@ -3241,7 +3241,7 @@ sub_08071F80: @ 0x08071F80 cmp r5, #0 bne _08071FB8 adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r0, _08071FB4 @ =gLinkState strb r5, [r0, #2] ldrb r0, [r0, #0x14] @@ -3537,7 +3537,7 @@ _080721AC: orrs r0, r1 strb r0, [r4, #0x10] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer bl sub_080791BC _080721DE: pop {r4, pc} @@ -3774,7 +3774,7 @@ sub_08072354: @ 0x08072354 ands r0, r1 str r0, [r2, #0x30] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0xc movs r2, #0 diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s index 1fe8ae46..0cce55f5 100644 --- a/asm/code_080732D0.s +++ b/asm/code_080732D0.s @@ -3153,7 +3153,7 @@ sub_08074A48: @ 0x08074A48 movs r0, #1 strb r0, [r1, #0xe] adds r0, r1, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrh r1, [r5, #0x22] adds r0, r4, #0 adds r0, #0x38 diff --git a/asm/code_08077B98.s b/asm/code_08077B98.s index 5b61adf0..8e3f6f87 100644 --- a/asm/code_08077B98.s +++ b/asm/code_08077B98.s @@ -3397,7 +3397,7 @@ _080794F4: bne _080794F4 _08079514: ldr r0, _0807951C @ =gLinkEntity - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {r4, r5, pc} .align 2, 0 _0807951C: .4byte gLinkEntity diff --git a/asm/code_0807B9B8.s b/asm/code_0807B9B8.s index 2360e828..9a17aa0a 100644 --- a/asm/code_0807B9B8.s +++ b/asm/code_0807B9B8.s @@ -1807,7 +1807,7 @@ _0807C7C2: movs r1, #1 strb r1, [r0] ldr r0, [r4, #0x30] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0807C7FC: ldrb r1, [r4, #0xf] movs r0, #0xfb diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index c1bff554..fa29b577 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -5065,7 +5065,7 @@ sub_0807F158: @ 0x0807F158 adds r2, #0x38 movs r1, #1 strb r1, [r2] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {pc} thumb_func_start sub_0807F168 @@ -5076,7 +5076,7 @@ sub_0807F168: @ 0x0807F168 adds r2, #0x38 movs r1, #1 strb r1, [r2] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {pc} .align 2, 0 _0807F17C: .4byte gLinkEntity @@ -5088,7 +5088,7 @@ sub_0807F180: @ 0x0807F180 adds r2, #0x38 movs r1, #2 strb r1, [r2] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {pc} thumb_func_start sub_0807F190 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index bd86ceb8..a9591b8c 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -5202,7 +5202,7 @@ _080A7E14: ldr r0, [r5, #4] str r0, [r4, #0x48] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080A7E4A: movs r0, #1 _080A7E4C: @@ -10441,7 +10441,7 @@ sub_080AA534: @ 0x080AA534 adds r2, #0x38 movs r1, #3 strb r1, [r2] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {pc} thumb_func_start sub_080AA544 @@ -15257,7 +15257,7 @@ sub_080AC928: @ 0x080AC928 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0 bl InitializeAnimation @@ -16380,7 +16380,7 @@ _080AD188: bl PlaySFX _080AD196: adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer movs r0, #3 strb r0, [r5, #0xd] ldrb r2, [r4, #0x19] diff --git a/asm/crow.s b/asm/crow.s index 4d1f98f3..4dca91a7 100644 --- a/asm/crow.s +++ b/asm/crow.s @@ -220,7 +220,7 @@ sub_08032928: @ 0x08032928 adds r1, #0x7a strh r0, [r1] adds r0, r6, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r6, #0 bl sub_08032AF4 pop {r4, r5, r6, pc} @@ -368,7 +368,7 @@ sub_08032A48: @ 0x08032A48 movs r0, #3 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 bl sub_08032AF4 _08032AAE: diff --git a/asm/cuccoAggr.s b/asm/cuccoAggr.s index 0329c554..d7161fa4 100644 --- a/asm/cuccoAggr.s +++ b/asm/cuccoAggr.s @@ -240,7 +240,7 @@ sub_08038E18: @ 0x08038E18 adds r0, r4, #0 bl sub_080AEF88 adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08038E70: ldrb r0, [r4, #0xe] subs r0, #1 diff --git a/asm/deathFx.s b/asm/deathFx.s index f74bd960..43281d5a 100644 --- a/asm/deathFx.s +++ b/asm/deathFx.s @@ -42,7 +42,7 @@ sub_08081634: @ 0x08081634 adds r0, #0x38 strb r1, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrb r0, [r4, #0x19] movs r1, #3 orrs r0, r1 diff --git a/asm/enemy64.s b/asm/enemy64.s index dd9105f2..5131a1fa 100644 --- a/asm/enemy64.s +++ b/asm/enemy64.s @@ -570,7 +570,7 @@ _0804948C: strb r0, [r1] str r4, [r2, #0x50] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080494B2: adds r0, r4, #0 bl sub_08049944 @@ -1414,7 +1414,7 @@ sub_08049AB0: @ 0x08049AB0 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08049B18: pop {r4, r5, pc} .align 2, 0 diff --git a/asm/fallingBoulder.s b/asm/fallingBoulder.s index 052f8a8e..78842d96 100644 --- a/asm/fallingBoulder.s +++ b/asm/fallingBoulder.s @@ -340,7 +340,7 @@ _0802C48C: orrs r0, r1 strb r0, [r2] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0802C4AA: pop {r4, r5, r6, r7, pc} diff --git a/asm/floatingBlock.s b/asm/floatingBlock.s index 22ab5a8b..af82890d 100644 --- a/asm/floatingBlock.s +++ b/asm/floatingBlock.s @@ -33,7 +33,7 @@ FloatingBlock: @ 0x080A0554 adds r0, #0x38 strb r2, [r0] adds r0, r3, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080A0588: pop {pc} .align 2, 0 diff --git a/asm/furniture.s b/asm/furniture.s index 81bed6a9..43187642 100644 --- a/asm/furniture.s +++ b/asm/furniture.s @@ -95,7 +95,7 @@ _08090640: movs r0, #2 strb r0, [r1] adds r0, r7, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer b _080906E6 _08090650: ldrh r1, [r7, #0x32] @@ -657,7 +657,7 @@ _08090B14: movs r0, #1 strb r0, [r3] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08090B2C: adds r0, r5, #0 bl GetTileTypeByEntity @@ -1095,7 +1095,7 @@ sub_08090E64: @ 0x08090E64 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08090EA0: pop {r4, r5, pc} .align 2, 0 diff --git a/asm/gentariCurtains.s b/asm/gentariCurtains.s index a281b998..5b249efb 100644 --- a/asm/gentariCurtains.s +++ b/asm/gentariCurtains.s @@ -62,7 +62,7 @@ _0809207A: adds r0, #2 strh r0, [r6, #0x2e] adds r0, r6, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer movs r0, #0x2e ldrsh r2, [r6, r0] ldr r3, _08092130 @ =gRoomControls @@ -248,7 +248,7 @@ sub_080921F0: @ 0x080921F0 orrs r0, r1 strb r0, [r3] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08092212: pop {pc} @@ -271,7 +271,7 @@ sub_08092214: @ 0x08092214 orrs r0, r1 strb r0, [r3] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0809223A: pop {pc} @@ -290,5 +290,5 @@ sub_0809223C: @ 0x0809223C movs r2, #3 orrs r1, r2 strb r1, [r3] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {pc} diff --git a/asm/giantRock.s b/asm/giantRock.s index e545cbcc..2a1786ca 100644 --- a/asm/giantRock.s +++ b/asm/giantRock.s @@ -27,7 +27,7 @@ GiantRock: @ 0x08090FB8 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r2, r4, #0 adds r2, #0x29 ldrb r1, [r2] diff --git a/asm/guardWithSpear.s b/asm/guardWithSpear.s index e520a382..e9456371 100644 --- a/asm/guardWithSpear.s +++ b/asm/guardWithSpear.s @@ -280,7 +280,7 @@ _08063EFE: movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 bl sub_0807DD64 adds r0, r4, #0 diff --git a/asm/gyorgChild.s b/asm/gyorgChild.s index 0cd568fa..54351bef 100644 --- a/asm/gyorgChild.s +++ b/asm/gyorgChild.s @@ -315,7 +315,7 @@ sub_0804882C: @ 0x0804882C movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 adds r0, #0x7a ldrb r0, [r0] diff --git a/asm/gyorgFemale.s b/asm/gyorgFemale.s index f2d87de7..20c48072 100644 --- a/asm/gyorgFemale.s +++ b/asm/gyorgFemale.s @@ -125,7 +125,7 @@ sub_0804614C: @ 0x0804614C adds r1, r0, #0 adds r1, #0x38 strb r5, [r1] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r1, _08046258 @ =sub_08046498 adds r0, r6, #0 movs r2, #0 @@ -846,7 +846,7 @@ _0804674C: movs r0, #1 strb r0, [r1] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080467CC: adds r1, r4, #0 adds r1, #0x7c diff --git a/asm/gyorgMale.s b/asm/gyorgMale.s index b4a99616..b629c4d4 100644 --- a/asm/gyorgMale.s +++ b/asm/gyorgMale.s @@ -997,7 +997,7 @@ _08046F12: strb r0, [r1] str r4, [r2, #0x50] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08046F58: adds r0, r4, #0 bl sub_08047E48 @@ -1052,7 +1052,7 @@ _08046F82: strb r0, [r1] str r4, [r2, #0x50] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08046FC8: ldr r0, [r4, #0x64] ldr r0, [r0] @@ -2751,7 +2751,7 @@ sub_08047BF0: @ 0x08047BF0 movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08047C74: adds r0, r5, #0 adds r0, #0x76 diff --git a/asm/houseDoorExterior.s b/asm/houseDoorExterior.s index c05b8c50..50b7a415 100644 --- a/asm/houseDoorExterior.s +++ b/asm/houseDoorExterior.s @@ -108,7 +108,7 @@ _08086718: ldrb r0, [r5, #5] strb r0, [r4, #0xd] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r0, [r6, #0x68] orrs r0, r7 str r0, [r6, #0x68] diff --git a/asm/initializeLink.s b/asm/initializeLink.s index 8968f0ef..ef69d458 100644 --- a/asm/initializeLink.s +++ b/asm/initializeLink.s @@ -162,7 +162,7 @@ _080525C2: adds r0, #0x38 strb r1, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #1 bl sub_0805EA2C diff --git a/asm/itemForSale.s b/asm/itemForSale.s index 4483e12e..6c82a3af 100644 --- a/asm/itemForSale.s +++ b/asm/itemForSale.s @@ -288,7 +288,7 @@ _080819D4: orrs r0, r1 strb r0, [r2] adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r5, #0 bl sub_08081A5C pop {r4, r5, r6, pc} diff --git a/asm/itemOnGround.s b/asm/itemOnGround.s index 32076405..835a13ca 100644 --- a/asm/itemOnGround.s +++ b/asm/itemOnGround.s @@ -1473,7 +1473,7 @@ _08081522: ldrb r0, [r4, #0xa] bl sub_0808148C adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08081532: adds r0, r4, #0 bl sub_080AEFE0 @@ -1510,7 +1510,7 @@ sub_0808153C: @ 0x0808153C ldrb r0, [r4, #0xa] bl sub_0808148C adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer b _08081596 _0808157E: movs r1, #0xa0 diff --git a/asm/jailBars.s b/asm/jailBars.s index 524ee493..2760cce6 100644 --- a/asm/jailBars.s +++ b/asm/jailBars.s @@ -54,7 +54,7 @@ _080A08F6: movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {r4, pc} .align 2, 0 diff --git a/asm/ladderHoleInBookshelf.s b/asm/ladderHoleInBookshelf.s index 71ba81cc..4f2b4648 100644 --- a/asm/ladderHoleInBookshelf.s +++ b/asm/ladderHoleInBookshelf.s @@ -29,7 +29,7 @@ sub_08093FCC: @ 0x08093FCC adds r2, #0x38 movs r1, #2 strb r1, [r2] - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {pc} thumb_func_start sub_08093FE0 @@ -54,7 +54,7 @@ _08094002: movs r0, #1 strb r0, [r3] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r2, r4, #0 adds r2, #0x29 ldrb r1, [r2] @@ -76,7 +76,7 @@ _08094024: movs r0, #2 strb r0, [r3] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r2, r4, #0 adds r2, #0x29 ldrb r1, [r2] diff --git a/asm/lavaPlatform.s b/asm/lavaPlatform.s index e505fa7a..ce50eb1b 100644 --- a/asm/lavaPlatform.s +++ b/asm/lavaPlatform.s @@ -66,7 +66,7 @@ sub_0809229C: @ 0x0809229C orrs r0, r1 strb r0, [r4, #0x18] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r0, [r4, #0x54] ldrb r1, [r0, #0x14] adds r0, r4, #0 @@ -502,7 +502,7 @@ _080925B8: ldr r0, [r5] str r0, [r4, #0x78] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r1, r4, #0 adds r1, #0x78 adds r2, r4, #0 diff --git a/asm/leever.s b/asm/leever.s index 99c2e4da..d20b77f3 100644 --- a/asm/leever.s +++ b/asm/leever.s @@ -143,7 +143,7 @@ sub_0801FCB0: @ 0x0801FCB0 movs r1, #0 bl InitializeAnimation adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer b _0801FD28 .align 2, 0 _0801FD14: .4byte gUnk_020000B0 diff --git a/asm/macroBook.s b/asm/macroBook.s index 5d6f901b..6ec09881 100644 --- a/asm/macroBook.s +++ b/asm/macroBook.s @@ -62,7 +62,7 @@ sub_0809A78C: @ 0x0809A78C adds r1, r2, #0 bl sub_0805EC9C adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrb r1, [r4, #0xf] adds r0, r4, #0 bl InitAnimationForceUpdate diff --git a/asm/macroDecorations.s b/asm/macroDecorations.s index 87347714..0d6cd142 100644 --- a/asm/macroDecorations.s +++ b/asm/macroDecorations.s @@ -27,7 +27,7 @@ sub_08097DEC: @ 0x08097DEC movs r0, #1 strb r0, [r4, #0xc] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrb r0, [r4, #0xa] cmp r0, #1 beq _08097E46 diff --git a/asm/manager2D.s b/asm/manager2D.s index a89e3807..c3129650 100644 --- a/asm/manager2D.s +++ b/asm/manager2D.s @@ -34,7 +34,7 @@ sub_0805D1FC: @ 0x0805D1FC movs r0, #3 strb r0, [r1] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0805D236: adds r0, r4, #0 bl sub_0805E900 diff --git a/asm/manager3.s b/asm/manager3.s index 0a084297..2f755748 100644 --- a/asm/manager3.s +++ b/asm/manager3.s @@ -170,7 +170,7 @@ _080577F2: mov r1, r8 strb r1, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08057808: pop {r3} mov r8, r3 diff --git a/asm/manager37.s b/asm/manager37.s index 3db0ff86..f9dca8f3 100644 --- a/asm/manager37.s +++ b/asm/manager37.s @@ -265,7 +265,7 @@ sub_0805E000: @ 0x0805E000 movs r5, #1 strb r5, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r0, _0805E068 @ =gUnk_030010A0 adds r0, #0x38 ldrb r1, [r0] diff --git a/asm/mazaalMacro.s b/asm/mazaalMacro.s index 8d91be75..d294485a 100644 --- a/asm/mazaalMacro.s +++ b/asm/mazaalMacro.s @@ -170,7 +170,7 @@ sub_08034D4C: @ 0x08034D4C strb r0, [r1] str r5, [r4, #0x50] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer movs r0, #0x96 lsls r0, r0, #2 strh r0, [r6] @@ -264,7 +264,7 @@ sub_08034E30: @ 0x08034E30 ands r0, r1 strb r0, [r2] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #2 bl InitializeAnimation @@ -385,7 +385,7 @@ sub_08034EE4: @ 0x08034EE4 movs r0, #2 strb r0, [r1] adds r0, r3, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08034F46: adds r0, r5, #0 movs r1, #0 @@ -553,7 +553,7 @@ sub_08035050: @ 0x08035050 strb r0, [r1] str r4, [r2, #0x50] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08035082: pop {r4, pc} @@ -625,7 +625,7 @@ _080350F2: movs r0, #1 strb r0, [r1] adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r5, #1 adds r4, #2 cmp r5, #5 diff --git a/asm/minishLight.s b/asm/minishLight.s index c437e8fe..f824b8a3 100644 --- a/asm/minishLight.s +++ b/asm/minishLight.s @@ -40,7 +40,7 @@ sub_0809F840: @ 0x0809F840 strb r0, [r2, #0x18] _0809F860: adds r0, r2, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {pc} thumb_func_start sub_0809F868 diff --git a/asm/minishSizedArchway.s b/asm/minishSizedArchway.s index 273bb726..cc3b1074 100644 --- a/asm/minishSizedArchway.s +++ b/asm/minishSizedArchway.s @@ -23,7 +23,7 @@ MinishSizedArchway: @ 0x080973E4 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer bl CheckIsDungeon cmp r0, #0 beq _0809741E diff --git a/asm/moldworm.s b/asm/moldworm.s index 5f88a6c9..3db9e88b 100644 --- a/asm/moldworm.s +++ b/asm/moldworm.s @@ -1275,7 +1275,7 @@ sub_08023990: @ 0x08023990 adds r0, #0x38 strb r1, [r0] adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r5, #0 movs r1, #0x16 bl InitializeAnimation diff --git a/asm/npc5.s b/asm/npc5.s index d0f70ed1..770ffb42 100644 --- a/asm/npc5.s +++ b/asm/npc5.s @@ -550,7 +550,7 @@ sub_08060DFC: @ 0x08060DFC movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0x1c bl sub_08060E70 diff --git a/asm/object21.s b/asm/object21.s index 0425edd8..8367e2d3 100644 --- a/asm/object21.s +++ b/asm/object21.s @@ -117,7 +117,7 @@ _08087A68: movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _08087A76: ldrb r1, [r4, #0x10] movs r0, #0x80 diff --git a/asm/object35.s b/asm/object35.s index c5943573..903fe6a1 100644 --- a/asm/object35.s +++ b/asm/object35.s @@ -44,7 +44,7 @@ sub_0808B89C: @ 0x0808B89C adds r1, #0x38 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r2, r4, #0 adds r2, #0x29 ldrb r1, [r2] diff --git a/asm/object6A.s b/asm/object6A.s index 93f54024..057c0c45 100644 --- a/asm/object6A.s +++ b/asm/object6A.s @@ -59,7 +59,7 @@ sub_08094A90: @ 0x08094A90 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r1, _08094AE4 @ =gUnk_08114F30 ldrb r2, [r4, #0x19] lsrs r0, r2, #6 @@ -252,7 +252,7 @@ sub_08094BE0: @ 0x08094BE0 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #1 bl InitAnimationForceUpdate @@ -1209,7 +1209,7 @@ sub_08095364: @ 0x08095364 movs r4, #1 strb r4, [r0] adds r0, r6, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer str r5, [r6, #0x54] strb r4, [r6, #0xd] ldr r0, _080953A0 @ =0x0000FFF0 @@ -1868,7 +1868,7 @@ _08095880: movs r0, #2 strb r0, [r1] adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r1, _080958D4 @ =gUnk_08114F30 ldrb r2, [r5, #0x19] lsrs r0, r2, #6 @@ -2225,7 +2225,7 @@ sub_08095B48: @ 0x08095B48 movs r0, #2 strb r0, [r1] adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r1, _08095BA8 @ =gUnk_08114F30 ldrb r2, [r5, #0x19] lsrs r0, r2, #6 diff --git a/asm/object80.s b/asm/object80.s index 1373da3e..14d17bd5 100644 --- a/asm/object80.s +++ b/asm/object80.s @@ -83,7 +83,7 @@ sub_08098B28: @ 0x08098B28 adds r7, #0x38 strb r4, [r7] adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r2, r5, #0 adds r2, #0x29 ldrb r1, [r2] diff --git a/asm/object81.s b/asm/object81.s index 134fa910..97108ec1 100644 --- a/asm/object81.s +++ b/asm/object81.s @@ -67,7 +67,7 @@ _08098CD0: strb r5, [r0] _08098CD6: adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 adds r0, #0x80 ldrh r1, [r0] diff --git a/asm/object8A.s b/asm/object8A.s index cd8584b3..b6f8f79f 100644 --- a/asm/object8A.s +++ b/asm/object8A.s @@ -47,7 +47,7 @@ sub_0809ADCC: @ 0x0809ADCC adds r0, #0x38 ldrb r7, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrb r0, [r4, #0xa] cmp r0, #1 beq _0809AEBC diff --git a/asm/object8B.s b/asm/object8B.s index eb3cd691..a81bd48e 100644 --- a/asm/object8B.s +++ b/asm/object8B.s @@ -72,7 +72,7 @@ _0809AFC4: adds r0, #0x84 strb r6, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer movs r0, #0x8b movs r1, #1 movs r2, #0 diff --git a/asm/object93.s b/asm/object93.s index 4dc6be8e..2862be71 100644 --- a/asm/object93.s +++ b/asm/object93.s @@ -26,7 +26,7 @@ sub_0809CEA8: @ 0x0809CEA8 movs r0, #1 strb r0, [r4, #0xc] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0 bl InitializeAnimation diff --git a/asm/object96.s b/asm/object96.s index dab90295..be3b6f07 100644 --- a/asm/object96.s +++ b/asm/object96.s @@ -78,7 +78,7 @@ sub_0809D7A8: @ 0x0809D7A8 strb r1, [r5, #0x15] _0809D80C: adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldrb r4, [r5, #0xa] adds r0, r5, #0 bl sub_08080CB4 @@ -151,7 +151,7 @@ _0809D888: adds r0, #0x38 strb r1, [r0] adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r1, [r6] cmp r1, #0 beq _0809D8AC diff --git a/asm/object97.s b/asm/object97.s index c7072469..0582a23e 100644 --- a/asm/object97.s +++ b/asm/object97.s @@ -243,7 +243,7 @@ sub_0809DB58: @ 0x0809DB58 orrs r0, r1 strb r0, [r4, #0x19] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0x3c bl InitAnimationForceUpdate @@ -357,7 +357,7 @@ _0809DC3C: adds r0, #0x38 strb r1, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0809DC54: movs r0, #0x6e bl PlaySFX @@ -430,7 +430,7 @@ sub_0809DC80: @ 0x0809DC80 adds r0, #2 strb r2, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #3 bl InitAnimationForceUpdate @@ -659,7 +659,7 @@ sub_0809DE50: @ 0x0809DE50 ldr r0, _0809DEF8 @ =0x0000FFC0 strh r0, [r4, #0x36] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r1, _0809DEFC @ =gUnk_08124128 ldrb r0, [r4, #0xb] adds r0, r0, r1 diff --git a/asm/object9E.s b/asm/object9E.s index aa3e2d94..8bffc8e2 100644 --- a/asm/object9E.s +++ b/asm/object9E.s @@ -76,7 +76,7 @@ Object9E: @ 0x0809EC4C adds r1, r4, #0 bl SetTile adds r0, r6, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer movs r0, #0x9e movs r1, #1 movs r2, #0 @@ -100,7 +100,7 @@ _0809ED04: movs r0, #2 strb r0, [r1] adds r0, r6, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0809ED14: pop {r4, r5, r6, pc} .align 2, 0 diff --git a/asm/objectBA.s b/asm/objectBA.s index 2497b2f6..e85896f3 100644 --- a/asm/objectBA.s +++ b/asm/objectBA.s @@ -1026,7 +1026,7 @@ sub_080A1E54: @ 0x080A1E54 movs r0, #2 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080A1ECA: pop {r4, r5, pc} .align 2, 0 @@ -1241,7 +1241,7 @@ sub_080A1FF0: @ 0x080A1FF0 movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080A2066: adds r4, r5, #0 adds r4, #0x7b diff --git a/asm/objectOnPillar.s b/asm/objectOnPillar.s index 7ed564f8..614b63e8 100644 --- a/asm/objectOnPillar.s +++ b/asm/objectOnPillar.s @@ -79,7 +79,7 @@ sub_08096E28: @ 0x08096E28 subs r1, #0x2b strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 bl sub_080970F4 ldr r1, _08096EB8 @ =gUnk_08123264 diff --git a/asm/pesto.s b/asm/pesto.s index d281d484..5e5b2c14 100644 --- a/asm/pesto.s +++ b/asm/pesto.s @@ -306,7 +306,7 @@ _08024132: strh r0, [r4, #0x36] _08024136: adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer bl CheckIsDungeon cmp r0, #0 beq _08024150 diff --git a/asm/picoBloom.s b/asm/picoBloom.s index bd66f005..9447336e 100644 --- a/asm/picoBloom.s +++ b/asm/picoBloom.s @@ -40,7 +40,7 @@ _08098A9C: movs r0, #1 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r1, _08098ACC @ =gUnk_08123574 ldrb r0, [r4, #0xa] adds r0, r0, r1 diff --git a/asm/pullableLever.s b/asm/pullableLever.s index 4c312107..538bbf7a 100644 --- a/asm/pullableLever.s +++ b/asm/pullableLever.s @@ -333,7 +333,7 @@ sub_08091444: @ 0x08091444 adds r0, r4, #0 bl InitializeAnimation adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {r4, pc} thumb_func_start sub_08091470 @@ -447,7 +447,7 @@ sub_08091504: @ 0x08091504 adds r0, r4, #0 bl InitializeAnimation adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {r4, pc} thumb_func_start sub_0809153C diff --git a/asm/rope.s b/asm/rope.s index 40d0aae0..f50525be 100644 --- a/asm/rope.s +++ b/asm/rope.s @@ -212,7 +212,7 @@ _080314CC: orrs r0, r1 strb r0, [r4, #0x18] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer movs r0, #0x84 bl sub_08004488 _080314FA: diff --git a/asm/sluggula.s b/asm/sluggula.s index b5914318..0b860cca 100644 --- a/asm/sluggula.s +++ b/asm/sluggula.s @@ -291,7 +291,7 @@ _08023D94: movs r0, #0x84 bl sub_08004488 adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer b _08023E0A _08023DC0: adds r0, r4, #0 diff --git a/asm/spinyChuchu.s b/asm/spinyChuchu.s index ecc587b9..8e2b6aba 100644 --- a/asm/spinyChuchu.s +++ b/asm/spinyChuchu.s @@ -331,7 +331,7 @@ _0802268C: movs r0, #0x7d bl sub_08004488 adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080226BE: adds r0, r4, #0 bl GetNextFrame diff --git a/asm/stalfos.s b/asm/stalfos.s index 0e0ed424..a751e19b 100644 --- a/asm/stalfos.s +++ b/asm/stalfos.s @@ -80,7 +80,7 @@ _0803930C: b _0803933A _08039334: adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _0803933A: pop {r4, pc} diff --git a/asm/sub_080A2838.s b/asm/sub_080A2838.s index d6c6f06c..57383f72 100644 --- a/asm/sub_080A2838.s +++ b/asm/sub_080A2838.s @@ -20,7 +20,7 @@ sub_080A2838: @ 0x080A2838 cmp r0, #2 bne _080A2856 adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer _080A2856: pop {r4, pc} .align 2, 0 diff --git a/asm/swordsmanNewsletter.s b/asm/swordsmanNewsletter.s index 1dc5c316..3ead564f 100644 --- a/asm/swordsmanNewsletter.s +++ b/asm/swordsmanNewsletter.s @@ -29,7 +29,7 @@ sub_080933D8: @ 0x080933D8 ldrb r0, [r4, #0xa] strb r0, [r4, #0x1e] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer ldr r0, _080933F8 @ =gUnk_081228A8 str r0, [r4, #0x48] adds r0, r4, #0 diff --git a/asm/takkuri.s b/asm/takkuri.s index 0d84a082..b382ddcb 100644 --- a/asm/takkuri.s +++ b/asm/takkuri.s @@ -213,7 +213,7 @@ sub_0803BCA4: @ 0x0803BCA4 adds r1, #0x7a strh r0, [r1] adds r0, r6, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r6, #0 bl sub_0803BF2C pop {r4, r5, r6, pc} @@ -459,7 +459,7 @@ sub_0803BE7C: @ 0x0803BE7C movs r0, #3 strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 bl sub_0803BF2C _0803BEE6: diff --git a/asm/vaatiEyesMacro.s b/asm/vaatiEyesMacro.s index 623ce8a9..ba21e690 100644 --- a/asm/vaatiEyesMacro.s +++ b/asm/vaatiEyesMacro.s @@ -411,7 +411,7 @@ _0802EF5E: strb r0, [r1] str r6, [r4, #0x50] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r6, #0 adds r1, r4, #0 bl CopyPosition diff --git a/asm/wallMaster.s b/asm/wallMaster.s index 7efe19a3..8a7f47f4 100644 --- a/asm/wallMaster.s +++ b/asm/wallMaster.s @@ -156,7 +156,7 @@ sub_0802A4E4: @ 0x0802A4E4 adds r1, #0x78 strh r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 bl sub_0802A7D0 pop {r4, pc} diff --git a/asm/wallMaster2.s b/asm/wallMaster2.s index e426c3bd..4113319c 100644 --- a/asm/wallMaster2.s +++ b/asm/wallMaster2.s @@ -135,7 +135,7 @@ sub_0802CCE0: @ 0x0802CCE0 adds r0, #0x7c strh r5, [r0] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer adds r0, r4, #0 movs r1, #0 bl InitializeAnimation diff --git a/asm/waterDrop.s b/asm/waterDrop.s index 19098e60..fe057fbd 100644 --- a/asm/waterDrop.s +++ b/asm/waterDrop.s @@ -52,7 +52,7 @@ sub_0802A250: @ 0x0802A250 movs r1, #0 bl InitializeAnimation adds r0, r5, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer movs r0, #0x66 movs r1, #0 movs r2, #0 @@ -186,7 +186,7 @@ _0802A38C: _0802A392: strb r0, [r1] adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip + bl UpdateSpriteForCollisionLayer pop {r4, r5, pc} thumb_func_start sub_0802A39C diff --git a/include/entity.h b/include/entity.h index 1b904c02..8a04bc42 100644 --- a/include/entity.h +++ b/include/entity.h @@ -72,7 +72,7 @@ typedef struct Entity { /* */ u8 alphaBlend : 2; // 4-8 /* */ u8 b2 : 2; //0x10 /* */ u8 b3 : 2; //0x40 - /* */ } PACKED spriteOrder; + /* */ } PACKED spriteRendering; /*0x1a*/ u8 palette; /*0x1b*/ struct { /* */ u8 b0 : 4; @@ -90,7 +90,7 @@ typedef struct Entity { /* */ u8 b0 : 3; // 1-4 /* */ u8 b1 : 3; // 8 /* */ u8 b2 : 2; //0x40 - /* */ } PACKED ticks; + /* */ } PACKED spritePriority; /*0x2a*/ u16 collisions; /*0x2c*/ union SplitWord x; /*0x30*/ union SplitWord y; @@ -163,7 +163,7 @@ typedef struct Entity { extern void InitializeAnimation(Entity*, u32); extern void InitAnimationForceUpdate(Entity*, u32); extern void UpdateAnimationSingleFrame(Entity*); -extern void UpdateSpriteOrderAndFlip(Entity*); +extern void UpdateSpriteForCollisionLayer(Entity*); extern void GetNextFrame(Entity*); extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void SetExtraSpriteFrame(Entity*, u32, u32); diff --git a/include/main.h b/include/main.h index 61c3f6ae..d9c8719c 100644 --- a/include/main.h +++ b/include/main.h @@ -11,7 +11,7 @@ typedef struct { // 0x03001000 u8 field_0x9; u8 field_0xa; u8 field_0xb; - u32 ticks; + u32 spritePriority; } MainStruct; extern s32 sub_08055F70(); diff --git a/src/archway.c b/src/archway.c index af72be33..ff6c7b14 100644 --- a/src/archway.c +++ b/src/archway.c @@ -18,10 +18,10 @@ void Archway(Entity *this) this->spriteSettings.raw = v1 | 1; this->frameIndex = this->entityType.parameter; this->collisionLayer = 2; - UpdateSpriteOrderAndFlip(this); + UpdateSpriteForCollisionLayer(this); v3 = CheckIsDungeon(); if (v3 != 0) { - this->ticks.b0 = (this->ticks.b0 & 0xf8) | 1; + this->spritePriority.b0 = (this->spritePriority.b0 & 0xf8) | 1; } } } \ No newline at end of file diff --git a/src/bell.c b/src/bell.c index 62f1a81b..072b0798 100644 --- a/src/bell.c +++ b/src/bell.c @@ -11,8 +11,8 @@ void sub_08097D90(Entity* ent) { ent->action = 1; ent->spriteSettings.b.draw = 1; ent->collisionLayer = 1; - ent->ticks.b0 = 0; - UpdateSpriteOrderAndFlip(ent); + ent->spritePriority.b0 = 0; + UpdateSpriteForCollisionLayer(ent); InitAnimationForceUpdate(ent, 0); } diff --git a/src/bladeBrothers.c b/src/bladeBrothers.c index 83ff32a2..68630e8e 100644 --- a/src/bladeBrothers.c +++ b/src/bladeBrothers.c @@ -176,7 +176,7 @@ void sub_08068BEC(Entity* this, u32 unused) { target = CreateFx(this, 0x44, 0); if (target) { - target->ticks.b0 = 1; + target->spritePriority.b0 = 1; PositionRelative(this, target, 0, -0x100000); PlaySFX(0xfa); } diff --git a/src/chestSpawner.c b/src/chestSpawner.c index 43cb1c1a..8af7769d 100644 --- a/src/chestSpawner.c +++ b/src/chestSpawner.c @@ -29,7 +29,7 @@ void sub_08083E20(Entity *this) { this->action = 3; this->spriteSettings.b.draw = 1; - this->spriteOrder.alphaBlend = 0; + this->spriteRendering.alphaBlend = 0; sub_080842D8(this); sub_08078828(this); } diff --git a/src/code_080A29BC.c b/src/code_080A29BC.c index 0e093ab3..7fa80ee2 100644 --- a/src/code_080A29BC.c +++ b/src/code_080A29BC.c @@ -63,7 +63,7 @@ Entity * sub_080A2A64(Entity *parent) pEVar1 = CreateFx(parent, 0x20, 0); if (pEVar1 != NULL) { - pEVar1->ticks.b0 = 7; + pEVar1->spritePriority.b0 = 7; } return pEVar1; } \ No newline at end of file diff --git a/src/giantLeaf.c b/src/giantLeaf.c index cf2ee5ec..9003f28b 100644 --- a/src/giantLeaf.c +++ b/src/giantLeaf.c @@ -13,8 +13,8 @@ void GiantLeaf(Entity* ent) { if (ent->action == 0) { ent->action = 1; ent->spriteSettings.b.draw = 1; - ent->spriteOrder.b3 = 3; - ent->ticks.b0 = 7; + ent->spriteRendering.b3 = 3; + ent->spritePriority.b0 = 7; ent->frameIndex = ent->entityType.form; sub_0808D618(ent); } diff --git a/src/greatFairy.c b/src/greatFairy.c index c2aa5e08..2f3276b9 100644 --- a/src/greatFairy.c +++ b/src/greatFairy.c @@ -160,9 +160,9 @@ void GreatFairy_WingsCallBehavior(Entity* this) { void GreatFairy_WingsInit(Entity* this) { GreatFairy_InitializeAnimation(this); - this->ticks.b0 = 5; + this->spritePriority.b0 = 5; this->spriteSettings.b.draw = 1; - this->spriteOrder.alphaBlend = 1; + this->spriteRendering.alphaBlend = 1; gScreen.controls.windowOutsideControl = 3904; gScreen.controls.mosaicSize = 2057; this->nonPlanarMovement = 1024; @@ -193,7 +193,7 @@ void GreatFairy_WakeCallBehavior(Entity* this) { void GreatFairy_WakeInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->spriteSettings.b.draw = 1; - this->ticks.b0 = 6; + this->spritePriority.b0 = 6; } void GreatFairy_WakeUpdate(Entity* this) { @@ -252,7 +252,7 @@ void GreatFairy_MiniAffineCallBehavior(Entity* this) { void GreatFairy_MiniAffineInit(Entity* this) { GreatFairy_InitializeAnimation(this); - this->ticks.b0 = 6; + this->spritePriority.b0 = 6; this->spriteSettings.b.draw = 1; } @@ -266,7 +266,7 @@ void GreatFairy_MiniAffineInit2(Entity* this) { this->action = 2; this->actionDelay = 90; this->nonPlanarMovement = 4096; - this->spriteOrder.b0 = 3; + this->spriteRendering.b0 = 3; sub_0805EC9C(this, 256, 256, 0); } } @@ -295,7 +295,7 @@ void GreatFairy_DropletInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->spriteSettings.b.draw = 1; this->height.HALF.HI = 0; - this->ticks.b0 = 5; + this->spritePriority.b0 = 5; PlaySFX(320); } @@ -314,7 +314,7 @@ void GreatFairy_RippleCallBehavior(Entity* this) { void GreatFairy_RippleInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->spriteSettings.b.draw = 1; - this->ticks.b0 = 6; + this->spritePriority.b0 = 6; } void GreatFairy_RippleUpdate(Entity* this) { @@ -334,7 +334,7 @@ void GreatFairy_BigRippleInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->actionDelay = 120; this->spriteSettings.b.draw = 1; - this->ticks.b0 = 5; + this->spritePriority.b0 = 5; PlaySFX(249); } @@ -362,7 +362,7 @@ void GreatFairy_EnergyCallBehavior(Entity* this) { void GreatFairy_EnergyInit(Entity* this) { GreatFairy_InitializeAnimation(this); this->spriteSettings.b.draw = 1; - this->ticks.b0 = 5; + this->spritePriority.b0 = 5; } void GreatFairy_EnergyUpdate(Entity* this) { @@ -389,8 +389,8 @@ void sub_08087150(Entity* this) { GreatFairy_InitializeAnimation(this); this->spriteSettings.b.draw = 1; this->spriteOrientation &= 63; - this->spriteOrder.b0 = 0; - this->ticks.b0 = 3; + this->spriteRendering.b0 = 0; + this->spritePriority.b0 = 3; this->nonPlanarMovement = 128; this->direction = 16; var = gUnk_0812079C[0]; @@ -474,7 +474,7 @@ void sub_08087294(Entity* this) { void sub_080872AC(Entity* this) { this->spriteSettings.b.draw = 1; this->spriteOrientation.flipY = 1; - this->spriteOrder.b0 = 0; + this->spriteRendering.b0 = 0; this->field_0x68 = (u16)(this->x).HALF.HI; this->field_0x6a = (u16)(this->y).HALF.HI; this->direction = (u8)Random() & 0x1F; diff --git a/src/hangingSeed.c b/src/hangingSeed.c index f823582a..7f0ba1dc 100644 --- a/src/hangingSeed.c +++ b/src/hangingSeed.c @@ -32,8 +32,8 @@ void sub_08021720(Entity *this) this->action = 1; this->spriteSettings.b.draw = 1; this->frameIndex = (this->entityType).form; - this->spriteOrder.b3 = 1; - this->ticks.b0 = 3; + this->spriteRendering.b3 = 1; + this->spritePriority.b0 = 3; } void nullsub_08(Entity* this){} \ No newline at end of file diff --git a/src/heartContainer.c b/src/heartContainer.c index 1c58034b..10714a8e 100644 --- a/src/heartContainer.c +++ b/src/heartContainer.c @@ -30,7 +30,7 @@ void sub_0808E6E4(Entity* this) { if (CheckFlags(this->field_0x86)) { this->action = 2; this->spriteSettings.b.draw = 1; - this->spriteOrder.b0 = 3; + this->spriteRendering.b0 = 3; sub_0808E714(this); } } diff --git a/src/item11.c b/src/item11.c index 1396dbe0..362ba771 100644 --- a/src/item11.c +++ b/src/item11.c @@ -90,7 +90,7 @@ void sub_08018DE8(Entity *this) this->attachedEntity->previousActionFlag = 4; this->flags = this->flags | 0x80; this->action = 2; - this->ticks.b0 = 2; + this->spritePriority.b0 = 2; this->attachedEntity->spriteSettings.b.draw = 1; sub_08018FA0(this); break; diff --git a/src/keese.c b/src/keese.c index 953f5b02..0cbc9acd 100644 --- a/src/keese.c +++ b/src/keese.c @@ -69,14 +69,14 @@ void sub_08021DF0(Entity *this) sub_0804A720(this); if ((this->entityType).form != 0) { - this->ticks.b1 = 1; + this->spritePriority.b1 = 1; this->height.HALF.HI = -0x10; } this->direction = Random() & 0x1f; this->filler[0] = 1; - this->ticks.b0 = 3; + this->spritePriority.b0 = 3; this->collisionLayer = 3; - UpdateSpriteOrderAndFlip(this); + UpdateSpriteForCollisionLayer(this); sub_08021EF0(this); } diff --git a/src/lakitu.c b/src/lakitu.c index d813da9e..9189c525 100644 --- a/src/lakitu.c +++ b/src/lakitu.c @@ -270,7 +270,7 @@ void sub_0803CA0C(Entity *this) { if (sub_08003FC4(this, 0x1800) == 0 && this->animIndex <= 19) { InitAnimationForceUpdate(this, this->animationState + 20); - this->ticks.b1 = 0; + this->spritePriority.b1 = 0; } UpdateAnimationSingleFrame(this); @@ -370,7 +370,7 @@ void sub_0803CBAC(Entity *this) { this->action = 7; this->spriteSettings.b.draw = 1; - this->ticks.b1 = 1; + this->spritePriority.b1 = 1; this->flags2 &= 0x7b; diff --git a/src/lightableSwitch.c b/src/lightableSwitch.c index a98a66ba..2368da04 100644 --- a/src/lightableSwitch.c +++ b/src/lightableSwitch.c @@ -38,7 +38,7 @@ void sub_0809EA34(Entity* this) { this->flags2 = 10; this->boundingBox = &gUnk_080FD150; sub_0809EAD8(this); - UpdateSpriteOrderAndFlip(this); + UpdateSpriteForCollisionLayer(this); sub_0809EABC(this); } @@ -110,7 +110,7 @@ void sub_0809EB80(Entity* this) { this->flags2 = 10; this->boundingBox = &gUnk_080FD150; sub_0809EAD8(this); - UpdateSpriteOrderAndFlip(this); + UpdateSpriteForCollisionLayer(this); if (CheckFlags(this->cutsceneBeh.HWORD) != 0) { this->action = 3; this->frameIndex = 2; diff --git a/src/mask.c b/src/mask.c index 0d8712bb..6dd866c9 100644 --- a/src/mask.c +++ b/src/mask.c @@ -103,7 +103,7 @@ void sub_08092A94(Entity *this) { this->height.HALF.HI -= 0x20; this->y.HALF.HI += 0x20; - this->spriteOrder.b3 = 2; + this->spriteRendering.b3 = 2; } // Probably falling down diff --git a/src/minishSizedEntrance.c b/src/minishSizedEntrance.c index 10ad0113..ca261d35 100644 --- a/src/minishSizedEntrance.c +++ b/src/minishSizedEntrance.c @@ -16,8 +16,8 @@ void MinishSizedEntrance(Entity* this) void sub_08090EC0(Entity *this) { this->action = 1; - this->spriteOrder.b3 = 3; - this->ticks.b0 = 7; + this->spriteRendering.b3 = 3; + this->spritePriority.b0 = 7; this->frameIndex = (this->entityType).parameter; if (CheckIsDungeon()) { this->frameIndex += 4; diff --git a/src/object49.c b/src/object49.c index c00af534..6a6d29b3 100644 --- a/src/object49.c +++ b/src/object49.c @@ -92,11 +92,11 @@ void sub_0808F1F8(Entity *this) { u8 bVar1; - this->spriteOrder.b0 = 3; + this->spriteRendering.b0 = 3; this->action++; - this->spriteOrder.b3 = this->parent->spriteOrder.b3; + this->spriteRendering.b3 = this->parent->spriteRendering.b3; this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY; - this->ticks.b0 = 7; + this->spritePriority.b0 = 7; InitializeAnimation(this, 1); sub_0808F244(this); } \ No newline at end of file diff --git a/src/object86.c b/src/object86.c index 78800531..979ab47a 100644 --- a/src/object86.c +++ b/src/object86.c @@ -17,8 +17,8 @@ void Object86(Entity* this) { void sub_08099DD0(Entity* this) { this->collisionLayer = 1; - this->spriteOrder.b3 = 3; - this->ticks.b0 = 7; + this->spriteRendering.b3 = 3; + this->spritePriority.b0 = 7; this->previousActionFlag = 0; if (GetInventoryValue(0x46)) { this->action = 4; diff --git a/src/position.c b/src/position.c index 1c96046f..50aa4c6f 100644 --- a/src/position.c +++ b/src/position.c @@ -28,7 +28,7 @@ void PositionRelative(Entity* source, Entity* target, s32 offsetX, s32 offsetY) target->height = source->height; // ldr target->collisionLayer = source->collisionLayer; - UpdateSpriteOrderAndFlip(target); + UpdateSpriteForCollisionLayer(target); } void CopyPositionAndSpriteOffset(Entity *param_1,Entity *param_2) @@ -47,10 +47,10 @@ void sub_0806FA90(Entity *param_1,Entity *param_2, s32 offsetX, s32 offsetY) void ResolveEntityOnTop(Entity *param_1,Entity *param_2) { - param_2->ticks.b0 = gUnk_08114F78[param_1->ticks.b0]; + param_2->spritePriority.b0 = gUnk_08114F78[param_1->spritePriority.b0]; } void sub_0806FAD8(Entity *param_1,Entity *param_2) { - param_2->ticks.b0 = gUnk_08114F80[param_1->ticks.b0]; + param_2->spritePriority.b0 = gUnk_08114F80[param_1->spritePriority.b0]; } diff --git a/src/treeHidingPortal.c b/src/treeHidingPortal.c index 5c7ef846..8ea54861 100644 --- a/src/treeHidingPortal.c +++ b/src/treeHidingPortal.c @@ -29,7 +29,7 @@ void sub_0809E83C(Entity* this) { } this->action = 1; this->collisionLayer = 2; - UpdateSpriteOrderAndFlip(this); + UpdateSpriteForCollisionLayer(this); } void sub_0809E86C(Entity* this) { @@ -76,7 +76,7 @@ void sub_0809E918(Entity* this) { fx->x.HALF.HI += i[0]; fx->y.HALF.HI += i[1]; fx->collisionLayer = 2; - UpdateSpriteOrderAndFlip(fx); + UpdateSpriteForCollisionLayer(fx); } i += sizeof(s16); } diff --git a/src/windTribeFlag.c b/src/windTribeFlag.c index 1decf382..f9c82da8 100644 --- a/src/windTribeFlag.c +++ b/src/windTribeFlag.c @@ -13,7 +13,7 @@ void WindTribeFlag(Entity *this) else { this->spriteSettings.b.flipX = 1; } - UpdateSpriteOrderAndFlip(this); + UpdateSpriteForCollisionLayer(this); InitializeAnimation(this,0); } else { From 02cb79b6c4b1fac62d4b834a604997d12ba35696 Mon Sep 17 00:00:00 2001 From: theo3 Date: Fri, 10 Jul 2020 22:34:55 -0700 Subject: [PATCH 13/25] swordsmanNewsletter.c OK --- asm/object49.s | 157 -------------------------------------- asm/swordsmanNewsletter.s | 63 --------------- linker.ld | 2 +- src/object49.c | 53 +++++++++++++ src/swordsmanNewsletter.c | 31 ++++++++ 5 files changed, 85 insertions(+), 221 deletions(-) delete mode 100644 asm/swordsmanNewsletter.s create mode 100644 src/swordsmanNewsletter.c diff --git a/asm/object49.s b/asm/object49.s index 1fdfafa3..ec40a8a9 100644 --- a/asm/object49.s +++ b/asm/object49.s @@ -6,163 +6,6 @@ .text - thumb_func_start sub_0808F244 -sub_0808F244: @ 0x0808F244 - push {r4, lr} - adds r4, r0, #0 - ldr r3, [r4, #0x50] - ldrb r1, [r3, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrh r0, [r3, #0x32] - adds r0, #3 - movs r2, #0 - strh r0, [r4, #0x32] - ldr r1, [r4, #0x54] - adds r0, r1, #0 - adds r0, #0x62 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r1, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - str r2, [r4, #0x34] - movs r0, #0x36 - ldrsh r1, [r3, r0] - movs r0, #0x80 - subs r0, r0, r1 - str r0, [r4, #0x74] - movs r0, #0x36 - ldrsh r1, [r3, r0] - movs r0, #0x80 - lsls r0, r0, #1 - subs r0, r0, r1 - str r0, [r4, #0x78] - adds r3, #0x7f - ldrb r0, [r3] - str r0, [r4, #0x70] - adds r0, r4, #0 - bl sub_0808F2B0 - ldr r0, [r4, #0x50] - adds r0, #0x6d - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0808F2AC - bl DeleteThisEntity -_0808F2AC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808F2B0 -sub_0808F2B0: @ 0x0808F2B0 - push {lr} - ldr r1, [r0, #0x74] - ldr r2, [r0, #0x78] - ldr r3, [r0, #0x70] - bl sub_0805EC9C - pop {pc} - .align 2, 0 - - thumb_func_start sub_0808F2C0 -sub_0808F2C0: @ 0x0808F2C0 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - adds r6, r0, #0 - cmp r6, #0 - bne _0808F322 - adds r0, #1 - strb r0, [r5, #0xc] - ldr r4, [r5, #0x50] - ldrb r2, [r4, #0x19] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r5, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r5, #0x19] - ldrb r0, [r4, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r5, #0x1b] - ands r1, r2 - orrs r1, r0 - strb r1, [r5, #0x1b] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - str r6, [r5, #0x34] - ldr r1, [r5, #0x50] - ldrh r0, [r1, #0x32] - adds r0, #3 - strh r0, [r5, #0x32] - ldrh r0, [r1, #0x2e] - strh r0, [r5, #0x2e] - adds r0, r5, #0 - movs r1, #3 - bl InitializeAnimation -_0808F322: - ldr r2, [r5, #0x50] - movs r1, #0x36 - ldrsh r0, [r2, r1] - cmp r0, #0 - bne _0808F334 - ldr r0, [r2, #0x74] - str r0, [r5, #0x74] - ldr r0, [r2, #0x78] - b _0808F34C -_0808F334: - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #0x80 - lsls r0, r0, #2 - subs r0, r0, r1 - str r0, [r5, #0x74] - movs r0, #0x36 - ldrsh r1, [r2, r0] - lsls r1, r1, #1 - movs r0, #0xc0 - lsls r0, r0, #2 - subs r0, r0, r1 -_0808F34C: - str r0, [r5, #0x78] - movs r0, #0 - str r0, [r5, #0x70] - adds r0, r5, #0 - bl sub_0808F2B0 - ldr r1, [r5, #0x78] - adds r0, r5, #0 - movs r2, #8 - movs r3, #2 - bl sub_0806FCF4 - ldrb r0, [r5, #0xc] - cmp r0, #0xff - bne _0808F36E - bl DeleteThisEntity -_0808F36E: - pop {r4, r5, r6, pc} - thumb_func_start sub_0808F370 sub_0808F370: @ 0x0808F370 push {r4, lr} diff --git a/asm/swordsmanNewsletter.s b/asm/swordsmanNewsletter.s deleted file mode 100644 index 3ead564f..00000000 --- a/asm/swordsmanNewsletter.s +++ /dev/null @@ -1,63 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start SwordsmanNewsletter -SwordsmanNewsletter: @ 0x080933C0 - push {lr} - ldr r2, _080933D4 @ =gUnk_081228B0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080933D4: .4byte gUnk_081228B0 - - thumb_func_start sub_080933D8 -sub_080933D8: @ 0x080933D8 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - strb r0, [r4, #0x1e] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r0, _080933F8 @ =gUnk_081228A8 - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_080787B4 - pop {r4, pc} - .align 2, 0 -_080933F8: .4byte gUnk_081228A8 - - thumb_func_start sub_080933FC -sub_080933FC: @ 0x080933FC - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08093420 - movs r0, #0 - strb r0, [r1] - ldr r1, _08093424 @ =gUnk_081228B8 - ldrb r0, [r2, #0xa] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - adds r1, r2, #0 - bl TextboxNoOverlap -_08093420: - pop {pc} - .align 2, 0 -_08093424: .4byte gUnk_081228B8 diff --git a/linker.ld b/linker.ld index db7c5346..08978b8b 100644 --- a/linker.ld +++ b/linker.ld @@ -758,7 +758,7 @@ SECTIONS { asm/houseDoorInterior.o(.text); asm/whirlwind.o(.text); asm/objectBlockingStairs.o(.text); - asm/swordsmanNewsletter.o(.text); + src/swordsmanNewsletter.o(.text); asm/object61.o(.text); asm/giantTwig.o(.text); asm/object63.o(.text); diff --git a/src/object49.c b/src/object49.c index 6a6d29b3..68527a76 100644 --- a/src/object49.c +++ b/src/object49.c @@ -8,11 +8,13 @@ void sub_0808F14C(Entity*); extern void PlaySFX(u32); extern void sub_0806FCF4(Entity*, u32, u32, u32); extern void sub_0808F244(Entity*); +extern void sub_0805EC9C(Entity*, u32, u32, u32); extern void (*const gUnk_08121E5C[])(Entity*); extern void (*const gUnk_08121E88[])(Entity*); extern void (*const gUnk_08121E98[])(Entity*); + void Object49(Entity* this) { gUnk_08121E5C[this->entityType.form](this); } @@ -99,4 +101,55 @@ void sub_0808F1F8(Entity *this) this->spritePriority.b0 = 7; InitializeAnimation(this, 1); sub_0808F244(this); +} + +void sub_0808F244(Entity *this) +{ + + this->spriteSettings.b.draw = this->parent->spriteSettings.b.draw; + this->y.HALF.HI = this->parent->y.HALF.HI + 3; + this->x.HALF.HI = (*(s8*)&this->attachedEntity->spriteOffsetX + this->attachedEntity->x.HALF.HI); + this->height.WORD = 0; + *(u32 *)&this->field_0x74 = 0x80 - this->parent->height.HALF.HI; + *(u32 *)&this->field_0x78 = 0x100 - this->parent->height.HALF.HI; + *(u32 *)&this->field_0x70 = *((u8 *)&this->parent->field_0x7c + 3); + sub_0808F2B0(this); + if ((this->parent->field_0x6d & 2) != 0) { + DeleteThisEntity(); + } +} + +void sub_0808F2B0(Entity *this) +{ + sub_0805EC9C(this, *(u32 *)&this->field_0x74, *(u32 *)&this->field_0x78, this->field_0x70); +} + +void sub_0808F2C0(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->spriteRendering.b3 = this->parent->spriteRendering.b3; + this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY; + this->spriteSettings.b.draw = 1; + this->spritePriority.b0 = 7; + this->height.WORD = 0; + + this->y.HALF.HI = this->parent->y.HALF.HI + 3; + this->x.HALF.HI = this->parent->x.HALF.HI; + InitializeAnimation(this,3); + } + if (this->parent->height.HALF.HI == 0) { + *(u32 *)&this->field_0x74 = *(u32 *)&this->parent->field_0x74; + *(u32 *)&this->field_0x78 = *(u32 *)&this->parent->field_0x78; + } + else { + *(u32 *)&this->field_0x74 = 0x200 - this->parent->height.HALF.HI; + *(u32 *)&this->field_0x78 = this->parent->height.HALF.HI * -2 + 0x300; + } + *(u32 *)&this->field_0x70 = 0; + sub_0808F2B0(this); + sub_0806FCF4(this,*(u32 *)&this->field_0x78,8,2); + if (this->action == 0xff) { + DeleteThisEntity(); + } } \ No newline at end of file diff --git a/src/swordsmanNewsletter.c b/src/swordsmanNewsletter.c new file mode 100644 index 00000000..414ac180 --- /dev/null +++ b/src/swordsmanNewsletter.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "entity.h" +#include "textbox.h" + +extern void sub_080787B4(Entity*); + +extern void (*const gUnk_081228B0[])(Entity*); + +extern BoundingBox gUnk_081228A8; +extern u16 gUnk_081228B8[]; + +void SwordsmanNewsletter(Entity* this) { + gUnk_081228B0[this->action](this); +} + +void sub_080933D8(Entity *this) +{ + this->action = 1; + this->frameIndex = this->entityType.form; + UpdateSpriteForCollisionLayer(this); + this->boundingBox = &gUnk_081228A8; + sub_080787B4(this); +} + +void sub_080933FC(Entity *this) +{ + if (this->interactType != 0) { + this->interactType = 0; + TextboxNoOverlap(gUnk_081228B8[this->entityType.form], this); + } +} \ No newline at end of file From 9753a51b924dc60697d74dd116da5e169dbc05a7 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sat, 11 Jul 2020 01:59:40 -0700 Subject: [PATCH 14/25] object9E.c OK --- asm/fan.s | 14 ------- asm/object9E.s | 106 ------------------------------------------------- linker.ld | 3 +- src/fan.c | 9 +++++ src/object9E.c | 45 +++++++++++++++++++++ 5 files changed, 56 insertions(+), 121 deletions(-) delete mode 100644 asm/object9E.s create mode 100644 src/fan.c create mode 100644 src/object9E.c diff --git a/asm/fan.s b/asm/fan.s index bd87bb89..0ccbd9d2 100644 --- a/asm/fan.s +++ b/asm/fan.s @@ -6,20 +6,6 @@ .text - - thumb_func_start Fan -Fan: @ 0x0809ED18 - push {lr} - ldr r2, _0809ED2C @ =gUnk_081243D4 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809ED2C: .4byte gUnk_081243D4 - thumb_func_start sub_0809ED30 sub_0809ED30: @ 0x0809ED30 push {r4, lr} diff --git a/asm/object9E.s b/asm/object9E.s deleted file mode 100644 index 8bffc8e2..00000000 --- a/asm/object9E.s +++ /dev/null @@ -1,106 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object9E -Object9E: @ 0x0809EC4C - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldrb r3, [r6, #0xc] - cmp r3, #0 - bne _0809ED14 - movs r4, #1 - strb r4, [r6, #0xc] - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r6, #0xa] - cmp r0, #0 - bne _0809ED04 - ldrb r0, [r6, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r6, #0x10] - strb r4, [r6, #0x1e] - adds r5, r6, #0 - adds r5, #0x38 - strb r4, [r5] - adds r1, r6, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #4 - movs r0, #0x48 - strb r0, [r1] - subs r1, #1 - movs r0, #0x7a - strb r0, [r1] - adds r0, r6, #0 - adds r0, #0x3b - strb r4, [r0] - ldr r0, _0809ECF4 @ =gUnk_080FD168 - str r0, [r6, #0x48] - movs r0, #0x2e - ldrsh r4, [r6, r0] - ldr r1, _0809ECF8 @ =gRoomControls - ldrh r0, [r1, #6] - subs r4, r4, r0 - asrs r4, r4, #4 - movs r2, #0x3f - ands r4, r2 - movs r3, #0x32 - ldrsh r0, [r6, r3] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - ldr r0, _0809ECFC @ =0x00004066 - subs r1, r4, #1 - ldrb r2, [r5] - bl SetTile - ldr r0, _0809ED00 @ =0x00004065 - ldrb r2, [r5] - adds r1, r4, #0 - bl SetTile - adds r0, r6, #0 - bl UpdateSpriteForCollisionLayer - movs r0, #0x9e - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0809ED14 - str r1, [r6, #0x54] - adds r0, r6, #0 - bl CopyPosition - b _0809ED14 - .align 2, 0 -_0809ECF4: .4byte gUnk_080FD168 -_0809ECF8: .4byte gRoomControls -_0809ECFC: .4byte 0x00004066 -_0809ED00: .4byte 0x00004065 -_0809ED04: - strb r3, [r6, #0x1e] - adds r1, r6, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r6, #0 - bl UpdateSpriteForCollisionLayer -_0809ED14: - pop {r4, r5, r6, pc} - .align 2, 0 diff --git a/linker.ld b/linker.ld index 08978b8b..af8b84aa 100644 --- a/linker.ld +++ b/linker.ld @@ -819,7 +819,8 @@ SECTIONS { src/treeHidingPortal.o(.text); asm/treeHidingPortal.o(.text); src/lightableSwitch.o(.text); - asm/object9E.o(.text); + src/object9E.o(.text); + src/fan.o(.text); asm/fan.o(.text); asm/objectA0.o(.text); asm/palaceArchway.o(.text); diff --git a/src/fan.c b/src/fan.c new file mode 100644 index 00000000..93910dc7 --- /dev/null +++ b/src/fan.c @@ -0,0 +1,9 @@ +#include "global.h" +#include "entity.h" + +extern void (*const gUnk_081243D4[])(Entity*); + +void Fan(Entity *this) +{ + gUnk_081243D4[this->action](this); +} \ No newline at end of file diff --git a/src/object9E.c b/src/object9E.c new file mode 100644 index 00000000..4c770e82 --- /dev/null +++ b/src/object9E.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "entity.h" +#include "room.h" + +extern BoundingBox gUnk_080FD168; + +extern void SetTile(u32, u32, u32); +extern void CopyPosition(Entity*, Entity*); + +void Object9E(Entity *this) +{ + Entity *ent; + u32 tilePos; + u8 *layer; + + if (this->action == 0) { + this->action = 1; + this->spritePriority.b0 = 6; + if ((this->entityType).form == 0) { + this->flags = this->flags | 0x80; + this->frameIndex = 1; + layer = &this->collisionLayer; + *layer = 1; + this->field_0x3c = 7; + this->field_0x40 = 0x48; + this->damageType = 0x7a; + this->flags2 = 1; + this->boundingBox = &gUnk_080FD168; + tilePos = COORD_TO_TILE(this); + SetTile(0x4066, tilePos - 1, *layer); + SetTile(0x4065, tilePos, *layer); + UpdateSpriteForCollisionLayer(this); + ent = CreateObject(0x9e,1,0); + if (ent != NULL) { + this->attachedEntity = ent; + CopyPosition(this, ent); + } + } + else { + this->frameIndex = 0; + this->collisionLayer = 2; + UpdateSpriteForCollisionLayer(this); + } + } +} \ No newline at end of file From cdeae36d0979cb025262d6d85e45f7bf7b9bbae5 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sat, 11 Jul 2020 22:13:00 -0700 Subject: [PATCH 15/25] smith.c OK --- asm/beedle.s | 2 +- asm/brocco.s | 2 +- asm/businessScrub.s | 2 +- asm/code_0806ED78.s | 6 +- asm/dog.s | 4 +- asm/fan.s | 151 ----------- asm/kid.s | 2 +- asm/mama.s | 2 +- asm/manager1.s | 134 ---------- asm/manager2.s | 24 -- asm/non_matching/smith/smith.inc | 119 +++++++++ asm/pina.s | 2 +- asm/postman.s | 2 +- asm/rem.s | 4 +- asm/smith.s | 425 ------------------------------- asm/sturgeon.s | 4 +- include/screen.h | 5 +- linker.ld | 4 +- src/fan.c | 77 ++++++ src/manager1.c | 64 +++++ src/manager2.c | 18 ++ src/smith.c | 225 ++++++++++++++++ src/zelda.c | 4 +- 23 files changed, 528 insertions(+), 754 deletions(-) create mode 100644 asm/non_matching/smith/smith.inc delete mode 100644 asm/smith.s create mode 100644 src/manager1.c create mode 100644 src/manager2.c create mode 100644 src/smith.c diff --git a/asm/beedle.s b/asm/beedle.s index ce6dcb63..7881f69a 100644 --- a/asm/beedle.s +++ b/asm/beedle.s @@ -147,7 +147,7 @@ sub_08063390: @ 0x08063390 movs r0, #1 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitializeAnimation diff --git a/asm/brocco.s b/asm/brocco.s index 29a04a7c..34dc7917 100644 --- a/asm/brocco.s +++ b/asm/brocco.s @@ -109,7 +109,7 @@ _080635D0: movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r1, #4 adds r0, r4, #0 diff --git a/asm/businessScrub.s b/asm/businessScrub.s index 097ed9f3..1a681b03 100644 --- a/asm/businessScrub.s +++ b/asm/businessScrub.s @@ -805,7 +805,7 @@ _08028F2C: adds r0, r5, #0 bl sub_0804AA1C adds r0, r5, #0 - bl sub_0806EDC4 + bl GetAnimationState lsls r0, r0, #3 strb r0, [r5, #0x15] adds r0, r5, #0 diff --git a/asm/code_0806ED78.s b/asm/code_0806ED78.s index 6b986255..736b901a 100644 --- a/asm/code_0806ED78.s +++ b/asm/code_0806ED78.s @@ -40,7 +40,7 @@ sub_0806ED9C: @ 0x0806ED9C cmp r0, #0 beq _0806EDBC adds r0, r5, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r6, r0, #0 _0806EDBC: adds r0, r6, #0 @@ -48,8 +48,8 @@ _0806EDBC: .align 2, 0 _0806EDC0: .4byte gLinkEntity - thumb_func_start sub_0806EDC4 -sub_0806EDC4: @ 0x0806EDC4 + thumb_func_start GetAnimationState +GetAnimationState: @ 0x0806EDC4 push {lr} ldr r1, _0806EDD4 @ =gLinkEntity bl GetFacingDirection diff --git a/asm/dog.s b/asm/dog.s index 17558ef6..7afc6af2 100644 --- a/asm/dog.s +++ b/asm/dog.s @@ -171,7 +171,7 @@ sub_08069C40: @ 0x08069C40 _08069C68: .4byte gLinkState _08069C6C: adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState strb r0, [r4, #0x14] adds r0, r4, #0 bl sub_08069D00 @@ -426,7 +426,7 @@ sub_08069E44: @ 0x08069E44 sub_08069E50: @ 0x08069E50 push {r4, r5, r6, r7, lr} adds r4, r0, #0 - bl sub_0806EDC4 + bl GetAnimationState strb r0, [r4, #0x14] adds r5, r4, #0 adds r5, #0x6b diff --git a/asm/fan.s b/asm/fan.s index 0ccbd9d2..a3db90a6 100644 --- a/asm/fan.s +++ b/asm/fan.s @@ -6,157 +6,6 @@ .text - thumb_func_start sub_0809ED30 -sub_0809ED30: @ 0x0809ED30 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - movs r1, #2 - eors r0, r1 - lsls r0, r0, #3 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_0809EE34 - adds r0, r4, #0 - bl sub_0809EFB0 - ldrb r1, [r4, #0xa] - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_0809ED54 -sub_0809ED54: @ 0x0809ED54 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x84 - ldrh r0, [r1] - cmp r0, #0 - beq _0809ED6A - bl CheckFlags - cmp r0, #0 - beq _0809ED86 -_0809ED6A: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0809ED80 - adds r1, r4, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0809ED86 -_0809ED80: - adds r0, r4, #0 - bl sub_0809EE08 -_0809ED86: - pop {r4, pc} - - thumb_func_start sub_0809ED88 -sub_0809ED88: @ 0x0809ED88 - push {r4, lr} - adds r4, r0, #0 - bl sub_0809F08C - adds r0, r4, #0 - bl sub_0809EE44 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r2, [r0] - cmp r2, #0 - beq _0809EDC6 - adds r1, r4, #0 - adds r1, #0x84 - ldrh r0, [r1] - cmp r0, r2 - bne _0809EDB4 - bl CheckFlags - cmp r0, #0 - bne _0809EDE2 - b _0809EDBE -_0809EDB4: - ldrh r0, [r1] - bl CheckFlags - cmp r0, #0 - beq _0809EDE2 -_0809EDBE: - adds r0, r4, #0 - bl sub_0809EE24 - b _0809EDE2 -_0809EDC6: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0809EDE2 - adds r1, r4, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0809EDE2 - adds r0, r4, #0 - bl sub_0809EE24 -_0809EDE2: - pop {r4, pc} - - thumb_func_start sub_0809EDE4 -sub_0809EDE4: @ 0x0809EDE4 - push {r4, lr} - adds r4, r0, #0 - bl sub_0809F08C - adds r0, r4, #0 - bl sub_0809EE44 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809EE06 - adds r0, r4, #0 - bl sub_0809EE34 -_0809EE06: - pop {r4, pc} - - thumb_func_start sub_0809EE08 -sub_0809EE08: @ 0x0809EE08 - push {lr} - movs r1, #2 - strb r1, [r0, #0xc] - adds r1, r0, #0 - adds r1, #0x7f - ldrb r1, [r1] - lsls r1, r1, #2 - adds r2, r0, #0 - adds r2, #0x74 - strh r1, [r2] - ldrb r1, [r0, #0xa] - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0809EE24 -sub_0809EE24: @ 0x0809EE24 - push {lr} - movs r1, #3 - strb r1, [r0, #0xc] - ldrb r1, [r0, #0xa] - adds r1, #4 - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0809EE34 -sub_0809EE34: @ 0x0809EE34 - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r1, [r0, #0xe] - lsls r1, r1, #2 - adds r0, #0x74 - strh r1, [r0] - bx lr - .align 2, 0 - thumb_func_start sub_0809EE44 sub_0809EE44: @ 0x0809EE44 push {r4, r5, r6, r7, lr} diff --git a/asm/kid.s b/asm/kid.s index 8463cba2..3aa4ff7d 100644 --- a/asm/kid.s +++ b/asm/kid.s @@ -76,7 +76,7 @@ sub_08062130: @ 0x08062130 movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitAnimationForceUpdate diff --git a/asm/mama.s b/asm/mama.s index c1db8a76..e23cb932 100644 --- a/asm/mama.s +++ b/asm/mama.s @@ -154,7 +154,7 @@ sub_0806C4A8: @ 0x0806C4A8 cmp r0, #0 beq _0806C4D8 adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 cmp r1, #0 bge _0806C4CC diff --git a/asm/manager1.s b/asm/manager1.s index 500a5767..435e67ad 100644 --- a/asm/manager1.s +++ b/asm/manager1.s @@ -6,140 +6,6 @@ .text - thumb_func_start sub_08057064 -sub_08057064: @ 0x08057064 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _080570AC @ =gUnk_08107C5C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r1, _080570B0 @ =gUnk_08107C48 - adds r5, r4, #0 - adds r5, #0x21 - ldrb r0, [r5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r1, _080570B4 @ =gUnk_08107C40 - ldrb r0, [r5] - adds r0, r0, r1 - ldrb r1, [r0] - cmp r1, #0 - beq _080570AA - adds r2, r4, #0 - adds r2, #0x20 - ldrb r0, [r2] - cmp r0, r1 - beq _080570AA - strb r1, [r2] - adds r0, r1, #0 - bl sub_0801D7EC -_080570AA: - pop {r4, r5, pc} - .align 2, 0 -_080570AC: .4byte gUnk_08107C5C -_080570B0: .4byte gUnk_08107C48 -_080570B4: .4byte gUnk_08107C40 - - thumb_func_start sub_080570B8 -sub_080570B8: @ 0x080570B8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x20 - ldrb r0, [r0] - bl sub_0801D7EC - movs r0, #0 - str r0, [r4, #0x34] - adds r1, r4, #0 - adds r1, #0x21 - ldrb r0, [r1] - cmp r0, #3 - bne _080570E0 - ldr r1, _080570DC @ =gScreen - movs r0, #1 - strh r0, [r1, #0x32] - b _080570F0 - .align 2, 0 -_080570DC: .4byte gScreen -_080570E0: - ldr r0, _080570F4 @ =gUnk_08107C48 - ldrb r1, [r1] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_080570F0: - pop {r4, pc} - .align 2, 0 -_080570F4: .4byte gUnk_08107C48 - - thumb_func_start sub_080570F8 -sub_080570F8: @ 0x080570F8 - push {lr} - ldr r1, _08057110 @ =gScreen - ldrh r2, [r1] - ldr r0, _08057114 @ =0x0000F7FF - ands r0, r2 - movs r2, #0 - strh r0, [r1] - adds r1, #0x66 - strh r2, [r1] - bl sub_08056250 - pop {pc} - .align 2, 0 -_08057110: .4byte gScreen -_08057114: .4byte 0x0000F7FF - - thumb_func_start sub_08057118 -sub_08057118: @ 0x08057118 - push {r4, lr} - adds r3, r0, #0 - movs r1, #0 - strb r1, [r3, #0xe] - adds r0, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - movs r0, #1 - strb r0, [r3, #0xc] - ldr r1, _08057160 @ =gScreen - ldr r0, _08057164 @ =0x00001E04 - strh r0, [r1, #0x2c] - ldrh r0, [r1] - movs r4, #0x80 - lsls r4, r4, #4 - adds r2, r4, #0 - orrs r0, r2 - strh r0, [r1] - adds r2, r1, #0 - adds r2, #0x66 - ldr r0, _08057168 @ =0x00003648 - strh r0, [r2] - adds r1, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - ldr r1, _0805716C @ =sub_080570B8 - ldr r2, _08057170 @ =sub_080570F8 - adds r0, r3, #0 - bl sub_08052D74 - pop {r4, pc} - .align 2, 0 -_08057160: .4byte gScreen -_08057164: .4byte 0x00001E04 -_08057168: .4byte 0x00003648 -_0805716C: .4byte sub_080570B8 -_08057170: .4byte sub_080570F8 - thumb_func_start sub_08057174 sub_08057174: @ 0x08057174 push {r4, r5, r6, r7, lr} diff --git a/asm/manager2.s b/asm/manager2.s index 0fc1f04d..71e90095 100644 --- a/asm/manager2.s +++ b/asm/manager2.s @@ -6,30 +6,6 @@ .text - thumb_func_start sub_0805751C -sub_0805751C: @ 0x0805751C - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xc] - cmp r1, #0 - bne _0805753A - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _08057544 @ =gScreen - strh r1, [r0, #0x32] - strh r1, [r0, #0x1a] - ldr r1, _08057548 @ =sub_080576A0 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_0805753A: - adds r0, r4, #0 - bl sub_0805754C - pop {r4, pc} - .align 2, 0 -_08057544: .4byte gScreen -_08057548: .4byte sub_080576A0 - thumb_func_start sub_0805754C sub_0805754C: @ 0x0805754C push {r4, r5, r6, lr} diff --git a/asm/non_matching/smith/smith.inc b/asm/non_matching/smith/smith.inc new file mode 100644 index 00000000..27a834f7 --- /dev/null +++ b/asm/non_matching/smith/smith.inc @@ -0,0 +1,119 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldrb r1, [r4, #0x10] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08066028 + adds r2, r4, #0 + adds r2, #0x39 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r6, r4, #0 + adds r6, #0x58 + cmp r0, #2 + bne _0806600C + movs r0, #0 + movs r1, #4 + strb r1, [r4, #0xc] + strb r0, [r2] + ldrb r0, [r6] + movs r5, #0 + cmp r0, #0xc + bne _08065FF0 + movs r5, #8 +_08065FF0: + ldr r1, _08066020 @ =gLinkEntity + adds r0, r4, #0 + bl GetFacingDirection + bl sub_0806F5A4 + adds r5, r5, r0 + adds r0, r4, #0 + adds r1, r5, #0 + bl InitAnimationForceUpdate + adds r0, r4, #0 + bl sub_0806F118 +_0806600C: + ldr r0, _08066024 @ =gUnk_0811036C + ldrb r1, [r4, #0xc] + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r1, [r1] + adds r0, r4, #0 + bl _call_via_r1 + b _08066042 + .align 2, 0 +_08066020: .4byte gLinkEntity +_08066024: .4byte gUnk_0811036C +_08066028: + ldr r0, _08066058 @ =gUnk_08110360 + 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 + adds r6, r4, #0 + adds r6, #0x58 +_08066042: + ldrb r0, [r6] + cmp r0, #0xc + bne _0806605C + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #0x39 + rsbs r0, r0, #0 + ands r0, r1 + strb r0, [r2] + b _0806606E + .align 2, 0 +_08066058: .4byte gUnk_08110360 +_0806605C: + adds r2, r4, #0 + adds r2, #0x29 + ldrb r0, [r2] + movs r1, #0x39 + rsbs r1, r1, #0 + ands r1, r0 + movs r0, #8 + orrs r1, r0 + strb r1, [r2] +_0806606E: + adds r2, r4, #0 + adds r2, #0x5a + ldrb r1, [r2] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080660A0 + movs r0, #0xfe + ands r0, r1 + strb r0, [r2] + adds r0, r4, #0 + movs r1, #0x3d + movs r2, #0x20 + bl CreateFx + ldr r4, _080660A4 @ =gUnk_08110380 + bl Random + movs r1, #7 + ands r1, r0 + lsls r1, r1, #1 + adds r1, r1, r4 + ldrh r0, [r1] + bl PlaySFX +_080660A0: + pop {r4, r5, r6, pc} + .align 2, 0 +_080660A4: .4byte gUnk_08110380 + .syntax divided \ No newline at end of file diff --git a/asm/pina.s b/asm/pina.s index 25fba55c..8d869270 100644 --- a/asm/pina.s +++ b/asm/pina.s @@ -109,7 +109,7 @@ _08063B0C: movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r1, #4 adds r0, r4, #0 diff --git a/asm/postman.s b/asm/postman.s index a08597ba..66761797 100644 --- a/asm/postman.s +++ b/asm/postman.s @@ -769,7 +769,7 @@ CreateZeldaFollower: @ 0x080609AC orrs r0, r1 strb r0, [r4, #0x10] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState strb r0, [r4, #0x14] _080609E0: pop {r4, pc} diff --git a/asm/rem.s b/asm/rem.s index 52147a70..c52753d1 100644 --- a/asm/rem.s +++ b/asm/rem.s @@ -153,7 +153,7 @@ _0806A512: adds r0, #0x6a strh r2, [r0] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitializeAnimation @@ -169,7 +169,7 @@ _0806A52C: movs r0, #2 strb r0, [r4, #0xd] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitializeAnimation diff --git a/asm/smith.s b/asm/smith.s deleted file mode 100644 index 79b10146..00000000 --- a/asm/smith.s +++ /dev/null @@ -1,425 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Smith -Smith: @ 0x08065FC0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08066028 - adds r2, r4, #0 - adds r2, #0x39 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r6, r4, #0 - adds r6, #0x58 - cmp r0, #2 - bne _0806600C - movs r0, #0 - movs r1, #4 - strb r1, [r4, #0xc] - strb r0, [r2] - ldrb r0, [r6] - movs r5, #0 - cmp r0, #0xc - bne _08065FF0 - movs r5, #8 -_08065FF0: - ldr r1, _08066020 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r5, r5, r0 - adds r0, r4, #0 - adds r1, r5, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 -_0806600C: - ldr r0, _08066024 @ =gUnk_0811036C - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _08066042 - .align 2, 0 -_08066020: .4byte gLinkEntity -_08066024: .4byte gUnk_0811036C -_08066028: - ldr r0, _08066058 @ =gUnk_08110360 - 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 - adds r6, r4, #0 - adds r6, #0x58 -_08066042: - ldrb r0, [r6] - cmp r0, #0xc - bne _0806605C - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - b _0806606E - .align 2, 0 -_08066058: .4byte gUnk_08110360 -_0806605C: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #8 - orrs r1, r0 - strb r1, [r2] -_0806606E: - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080660A0 - movs r0, #0xfe - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0x3d - movs r2, #0x20 - bl CreateFx - ldr r4, _080660A4 @ =gUnk_08110380 - bl Random - movs r1, #7 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - bl PlaySFX -_080660A0: - pop {r4, r5, r6, pc} - .align 2, 0 -_080660A4: .4byte gUnk_08110380 - - thumb_func_start Smith_Head -Smith_Head: @ 0x080660A8 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x5a - ldrb r4, [r0] - ldrb r2, [r5, #0x1e] - adds r0, r5, #0 - movs r1, #0 - bl SetExtraSpriteFrame - movs r0, #0x40 - ands r4, r0 - cmp r4, #0 - beq _080660CE - adds r0, r5, #0 - movs r1, #1 - movs r2, #0x16 - bl SetExtraSpriteFrame - b _080660D8 -_080660CE: - adds r0, r5, #0 - movs r1, #1 - movs r2, #0xff - bl SetExtraSpriteFrame -_080660D8: - adds r0, r5, #0 - movs r1, #0 - movs r2, #1 - bl SetSpriteSubEntryOffsetData1 - adds r0, r5, #0 - bl sub_0807000C - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080660EC -sub_080660EC: @ 0x080660EC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08066114 @ =gUnk_08110354 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08066112 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_08066112: - pop {r4, pc} - .align 2, 0 -_08066114: .4byte gUnk_08110354 - - thumb_func_start sub_08066118 -sub_08066118: @ 0x08066118 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x28 - movs r2, #0x28 - bl sub_0806ED9C - adds r1, r0, #0 - cmp r1, #0 - bge _0806612E - movs r1, #2 - b _08066144 -_0806612E: - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _0806613A - movs r0, #0x10 - strb r0, [r4, #0xf] - b _08066144 -_0806613A: - subs r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x58 - ldrb r1, [r0] -_08066144: - adds r0, r4, #0 - bl sub_0806F078 - cmp r0, #0 - bne _08066154 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08066154: - adds r0, r4, #0 - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0806616C - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0 - bl TextboxNoOverlapFollow -_0806616C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08066170 -sub_08066170: @ 0x08066170 - movs r1, #1 - strb r1, [r0, #0xc] - bx lr - .align 2, 0 - - thumb_func_start sub_08066178 -sub_08066178: @ 0x08066178 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080661AC @ =gUnk_08110354 - bl LoadExtraSpriteData - cmp r0, #0 - beq _080661A8 - 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] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807DD50 -_080661A8: - pop {r4, pc} - .align 2, 0 -_080661AC: .4byte gUnk_08110354 - - thumb_func_start sub_080661B0 -sub_080661B0: @ 0x080661B0 - push {lr} - movs r1, #0 - bl sub_0807DD94 - pop {pc} - .align 2, 0 - - thumb_func_start sub_080661BC -sub_080661BC: @ 0x080661BC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xc - bne _080661F4 - 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 - beq _080661FC - adds r0, r4, #0 - bl sub_0806EDC4 - adds r0, #8 - adds r1, r4, #0 - adds r1, #0x80 - strh r0, [r1] - ldrh r1, [r1] - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _080661FC -_080661F4: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 -_080661FC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08066200 -sub_08066200: @ 0x08066200 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - - thumb_func_start sub_08066218 -sub_08066218: @ 0x08066218 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _08066228 - movs r0, #1 - strb r0, [r4, #0xc] -_08066228: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0806622C -sub_0806622C: @ 0x0806622C - push {lr} - adds r2, r0, #0 - ldr r0, _0806624C @ =gUnk_02002A40 - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _0806623C - movs r0, #0 -_0806623C: - lsls r1, r0, #3 - ldr r0, _08066250 @ =gUnk_08110390 - adds r1, r1, r0 - adds r0, r2, #0 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806624C: .4byte gUnk_02002A40 -_08066250: .4byte gUnk_08110390 - - thumb_func_start nullsub_501 -nullsub_501: @ 0x08066254 - bx lr - .align 2, 0 - - thumb_func_start sub_08066258 -sub_08066258: @ 0x08066258 - push {r4, lr} - ldr r4, _08066270 @ =gUnk_081103D0 - bl Random - movs r1, #7 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - bl PlaySFX - pop {r4, pc} - .align 2, 0 -_08066270: .4byte gUnk_081103D0 - - thumb_func_start sub_08066274 -sub_08066274: @ 0x08066274 - push {lr} - ldr r3, _08066284 @ =gUnk_081103E0 - movs r1, #1 - movs r2, #0 - bl sub_08078850 - pop {pc} - .align 2, 0 -_08066284: .4byte gUnk_081103E0 - - thumb_func_start sub_08066288 -sub_08066288: @ 0x08066288 - push {lr} - adds r1, r0, #0 - adds r1, #0x68 - ldrb r1, [r1] - bl sub_08078784 - pop {pc} - .align 2, 0 - - thumb_func_start Smith_Fusion -Smith_Fusion: @ 0x08066298 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080662D0 - ldr r1, _080662CC @ =gUnk_08110354 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _080662D6 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #6 - bl InitAnimationForceUpdate - b _080662D6 - .align 2, 0 -_080662CC: .4byte gUnk_08110354 -_080662D0: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_080662D6: - pop {r4, pc} diff --git a/asm/sturgeon.s b/asm/sturgeon.s index 6bb91643..34a9e992 100644 --- a/asm/sturgeon.s +++ b/asm/sturgeon.s @@ -166,7 +166,7 @@ _08064BCE: movs r0, #3 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 cmp r1, #0 bge _08064BE0 @@ -187,7 +187,7 @@ _08064BFA: movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 cmp r1, #0 bge _08064C0C diff --git a/include/screen.h b/include/screen.h index 3c732093..fd61b5f5 100644 --- a/include/screen.h +++ b/include/screen.h @@ -22,7 +22,8 @@ typedef struct { u16 bg2xOffset; u16 bg2yOffset; u16 unk; - u32 unk2; + u16 unk2; + u16 unk3; u16 bg3Control; u16 bg3xOffset; u16 bg3yOffset; @@ -67,4 +68,6 @@ typedef struct { BgControls controls; } Screen; +extern Screen gScreen; + #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index af8b84aa..032b66c1 100644 --- a/linker.ld +++ b/linker.ld @@ -467,7 +467,9 @@ SECTIONS { asm/code_08055FF4.o(.text); src/textbox.o(.text); asm/code_08056418.o(.text); + src/manager1.o(.text); asm/manager1.o(.text); + src/manager2.o(.text); asm/manager2.o(.text); asm/manager3.o(.text); asm/manager4.o(.text); @@ -562,7 +564,7 @@ SECTIONS { src/epona.o(.text); src/milkCart.o(.text); asm/ghostBrothers.o(.text); - asm/smith.o(.text); + src/smith.o(.text); asm/npc23.o(.text); asm/kingDaltus.o(.text); asm/ministerPotho.o(.text); diff --git a/src/fan.c b/src/fan.c index 93910dc7..481e3887 100644 --- a/src/fan.c +++ b/src/fan.c @@ -1,9 +1,86 @@ #include "global.h" #include "entity.h" +#include "flags.h" + +extern void sub_0809EE34(Entity*); +extern void sub_0809EFB0(Entity*); +extern void sub_0809EE08(Entity*); +extern void sub_0809F08C(void); +extern void sub_0809EE44(Entity*); +extern void sub_0809EE24(Entity*); extern void (*const gUnk_081243D4[])(Entity*); void Fan(Entity *this) { gUnk_081243D4[this->action](this); +} + +void sub_0809ED30(Entity *this) +{ + this->direction = (this->entityType.form ^ 2) << 3; + sub_0809EE34(this); + sub_0809EFB0(this); + InitializeAnimation(this, this->entityType.form); +} + +void sub_0809ED54(Entity *this) +{ + u16 uVar1; + u32 iVar2; + + if (((this->cutsceneBeh.HWORD == 0) || CheckFlags(this->cutsceneBeh.HWORD)) && + ((this->entityType.parameter != 1 || + (--this->field_0x74 == 0)))) { + sub_0809EE08(this); + } +} + +void sub_0809ED88(Entity *this) +{ + sub_0809F08C(); + sub_0809EE44(this); + if (this->field_0x86 != 0) { + if (this->cutsceneBeh.HWORD == this->field_0x86) { + if (CheckFlags(this->cutsceneBeh.HWORD)) { + return; + } + } + else if (!CheckFlags(this->cutsceneBeh.HWORD)) { + return; + } + sub_0809EE24(this); + } + else if (((this->entityType).parameter == 1) && + (--this->field_0x74 == 0)) { + sub_0809EE24(this); + } +} + +void sub_0809EDE4(Entity *this) +{ + sub_0809F08C(); + sub_0809EE44(this); + if (this->frames.b.f3) { + sub_0809EE34(this); + } +} + +void sub_0809EE08(Entity *this) +{ + this->action = 2; + this->field_0x74 = *((u8 *)&this->field_0x7c + 3) << 2; + InitializeAnimation(this, this->entityType.form); +} + +void sub_0809EE24(Entity *this) +{ + this->action = 3; + InitializeAnimation(this, this->entityType.form + 4); +} + +void sub_0809EE34(Entity *this) +{ + this->action = 1; + this->field_0x74 = this->actionDelay << 2; } \ No newline at end of file diff --git a/src/manager1.c b/src/manager1.c new file mode 100644 index 00000000..ba556db0 --- /dev/null +++ b/src/manager1.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "entity.h" +#include "screen.h" + +extern void sub_0801D7EC(u32); +extern void sub_08056250(void); +extern void sub_080570B8(Entity*); +void sub_080570F8(void); +extern void sub_08052D74(void*, void*, void*); + +extern void (*const gUnk_08107C5C[])(Entity*); +extern void (*const gUnk_08107C48[])(Entity*); + +extern u8 gUnk_08107C40[]; + +void Manager1(Entity *this) +{ + u8 bVar1; + u8 *pbVar2; + + gUnk_08107C5C[this->action](this); + gUnk_08107C48[((u8*)&this->field_0x20)[1]](this); + bVar1 = gUnk_08107C40[((u8*)&this->field_0x20)[1]]; + if ((bVar1 != 0) && (*(u8 *)&this->field_0x20 != bVar1)) { + ((u8*)&this->field_0x20)[0] = bVar1; + sub_0801D7EC(bVar1); + } +} + +void sub_080570B8(Entity *this) +{ + u8 *pbVar1; + + sub_0801D7EC(((u8 *)&this->field_0x20)[0]); + this->height.WORD = 0; + pbVar1 = ((u8 *)&this->field_0x20 + 1); + if (*pbVar1 == 3) { + gScreen.affine.bg3xOffset = 1; + } + else { + gUnk_08107C48[*pbVar1](this); + } +} + +void sub_080570F8(void) +{ + gScreen.lcd.lcdControl2 &= 0xf7ff; + gScreen.controls.windowOutsideControl = 0; + sub_08056250(); +} + +void sub_08057118(Entity *this) +{ + this->actionDelay = 0; + *(u8 *)&this->field_0x20 = 0; + ((u8 *)&this->field_0x20)[1] = 0; + ((u8 *)&this->field_0x20)[2] = 0; + this->action = 1; + gScreen.affine.unk2 = 0x1e04; + *(u16 *)&gScreen.lcd.lcdControl2 |= 0x800; + gScreen.controls.windowOutsideControl = 0x3648; + gScreen.controls.mosaicSize = 0x1000; + sub_08052D74(this, sub_080570B8, sub_080570F8); +} \ No newline at end of file diff --git a/src/manager2.c b/src/manager2.c new file mode 100644 index 00000000..707c13d1 --- /dev/null +++ b/src/manager2.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "entity.h" +#include "screen.h" + +extern void sub_080576A0(); +extern void sub_08052D74(); +extern void sub_0805754C(Entity*); + +void Manager2(Entity *this) +{ + if (this->action == 0) { + this->action = 1; + gScreen.affine.bg3xOffset = 0; + gScreen.bg2.bg0xOffset = 0; + sub_08052D74(this, sub_080576A0, 0); + } + sub_0805754C(this); +} \ No newline at end of file diff --git a/src/smith.c b/src/smith.c new file mode 100644 index 00000000..061d3c40 --- /dev/null +++ b/src/smith.c @@ -0,0 +1,225 @@ +#include "global.h" +#include "entity.h" +#include "textbox.h" + +typedef struct { + u8 filler[8]; + u8 unk; +} struct_02002A40; + +extern u32 GetFacingDirection(Entity*, Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806F118(Entity*); +extern void sub_0806ED78(Entity*); +extern Entity* CreateFx(Entity*, u32, u32); +extern void PlaySFX(u32); +extern u32 Random(void); +extern void sub_0807000C(Entity*); +extern u32 sub_0801E99C(Entity*); +extern u32 sub_0806ED9C(Entity*, u32, u32); +extern u32 sub_0806F078(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern u32 UpdateFuseInteraction(Entity*); +extern u32 GetAnimationState(Entity*); +extern void ShowNPCDialogue(Entity*, u32*); +extern void sub_08078850(u32, u32, u32, u32*); +extern void sub_08078784(Entity*, u32); + +extern void (*const gUnk_08110360[])(Entity*); +extern void (*const gUnk_0811036C[])(Entity*); + +extern u16 gUnk_08110380[]; +extern SpriteLoadData gUnk_08110354; +extern struct_02002A40 gUnk_02002A40; +extern u32 gUnk_08110390[]; +extern u16 gUnk_081103D0[]; +extern u32 gUnk_081103E0; + +#if NON_MATCHING //reg-alloc +void Smith(Entity *this) +{ + u32 iVar2; + u32 iVar4; + + if ((this->flags & 2) != 0) { + if (this->interactType == 2) { + this->action = 4; + this->interactType = 0; + iVar4 = (this->animIndex == 0xc) ? 8 : 0; + iVar2 = sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)); + InitAnimationForceUpdate(this, iVar2 + iVar4); + sub_0806F118(this); + } + gUnk_0811036C[this->action](this); + } + else { + gUnk_08110360[this->action](this); + sub_0806ED78(this); + } + if (this->animIndex == 0xc) { + this->spritePriority.b1 = 0; + } + else { + this->spritePriority.b1 = 1; + } + if ((this->frames.all & 1) != 0) { + this->frames.all &= 0xfe; + CreateFx(this, 0x3d, 0x20); + PlaySFX(gUnk_08110380[(Random() & 7)]); + } +} +#else +NAKED +void Smith(Entity *this) { + asm(".include \"asm/non_matching/smith/smith.inc\""); +} +#endif + +void Smith_Head(Entity *this) +{ + u8 bVar1; + + bVar1 = this->frames.all; + SetExtraSpriteFrame(this, 0, this->frameIndex); + if ((bVar1 & 0x40) != 0) { + SetExtraSpriteFrame(this, 1, 0x16); + } + else { + SetExtraSpriteFrame(this, 1, 0xff); + } + SetSpriteSubEntryOffsetData1(this,0,1); + sub_0807000C(this); +} + +void sub_080660EC(Entity *this) +{ + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action = 1; + this->field_0x68 = sub_0801E99C(this); + InitAnimationForceUpdate(this, 2); + } +} + +void sub_08066118(Entity *this) +{ + s32 uVar1; + u32 iVar2; + + uVar1 = sub_0806ED9C(this, 0x28, 0x28); + if (uVar1 < 0) { + uVar1 = 2; + } + else { + if (this->field_0xf == 0) { + this->field_0xf = 0x10; + } + else { + --this->field_0xf; + uVar1 = this->animIndex; + } + } + if (sub_0806F078(this, uVar1) == 0) { + UpdateAnimationSingleFrame(this); + } + if (this->interactType != 0) { + this->action = 2; + TextboxNoOverlapFollow(0); + } +} + +void sub_08066170(Entity *this) +{ + this->action = 1; +} + +void sub_08066178(Entity *this) +{ + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action = 1; + this->spriteSettings.b.draw = 1; + this->field_0x68 = sub_0801E99C(this); + sub_0807DD50(this); + } +} + +void sub_080661B0(Entity *this) +{ + sub_0807DD94(this, 0); +} + +void sub_080661BC(Entity *this) +{ + u32 sVar1; + + if (this->animIndex == 0xc) { + UpdateAnimationSingleFrame(this); + if ((this->frames.b.f3) != 0) { + this->field_0x80 = GetAnimationState(this) + 8; + InitAnimationForceUpdate(this, this->field_0x80); + } + } + else { + sub_0807DD94(this,0); + } +} + +void sub_08066200(Entity *this) +{ + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + UpdateAnimationSingleFrame(this); +} + +void sub_08066218(Entity *this) +{ + if (UpdateFuseInteraction(this) != 0) { + this->action = 1; + } +} + +void sub_0806622C(Entity *this) +{ + u32 iVar1; + + if (gUnk_02002A40.unk - 2 < 0) { + iVar1 = 0; + } + else { + iVar1 = gUnk_02002A40.unk - 2; + } + ShowNPCDialogue(this, &gUnk_08110390[iVar1 * 2]); +} + +void nullsub_501(Entity* this) {} + +void sub_08066258(void) +{ + PlaySFX(gUnk_081103D0[Random() & 7]); +} + +void sub_08066274(u32 arg0) +{ + sub_08078850(arg0, 1, 0, &gUnk_081103E0); +} + +void sub_08066288(Entity *arg0) +{ + sub_08078784(arg0, arg0->field_0x68); +} + +void Smith_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action++; + this->spriteSettings.b.draw = 1; + InitAnimationForceUpdate(this, 6); + } + } + else { + UpdateAnimationSingleFrame(this); + } +} \ No newline at end of file diff --git a/src/zelda.c b/src/zelda.c index 8aa89a33..2ba8bf28 100644 --- a/src/zelda.c +++ b/src/zelda.c @@ -11,7 +11,7 @@ extern Entity* sub_0805EB9C(u32, u32); void CopyPosition(Entity*, Entity*); void sub_08068680(Entity*, Entity*); void sub_08068694(Entity*, Entity*); -u32 sub_0806EDC4(Entity* ent); +u32 GetAnimationState(Entity* ent); void DeleteThisEntity(void); extern Entity* GetEntityByType(u32, u32); extern void sub_080686C4(Entity*, Entity*); @@ -89,7 +89,7 @@ void sub_08066D94(Entity* ent) { if (npc != NULL) { npc->animationState = gLinkEntity.animationState; npc->flags |= 0x20; - npc->animationState = sub_0806EDC4(ent); + npc->animationState = GetAnimationState(ent); roomID = gRoomControls.roomID; npc->field_0x74 = roomID; CopyPosition(ent, npc); From 4cffc35604b55f1bdd8cbecbc52cdd65532c1a63 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 15:54:01 -0700 Subject: [PATCH 16/25] railtrack.c --- asm/guardWithSpear.s | 470 -------------------- asm/non_matching/guard/sub_08063D44.inc | 69 +++ asm/non_matching/guard/sub_08063E90.inc | 73 +++ asm/non_matching/railtrack/sub_08085394.inc | 87 ++++ asm/non_matching/railtrack/sub_080854A8.inc | 36 ++ asm/railtrack.s | 438 ------------------ include/entity.h | 1 + linker.ld | 3 +- src/guard.c | 196 ++++++++ src/railtrack.c | 148 ++++++ 10 files changed, 612 insertions(+), 909 deletions(-) create mode 100644 asm/non_matching/guard/sub_08063D44.inc create mode 100644 asm/non_matching/guard/sub_08063E90.inc create mode 100644 asm/non_matching/railtrack/sub_08085394.inc create mode 100644 asm/non_matching/railtrack/sub_080854A8.inc delete mode 100644 asm/railtrack.s create mode 100644 src/guard.c create mode 100644 src/railtrack.c diff --git a/asm/guardWithSpear.s b/asm/guardWithSpear.s index e9456371..745374ba 100644 --- a/asm/guardWithSpear.s +++ b/asm/guardWithSpear.s @@ -6,476 +6,6 @@ .text - - thumb_func_start Guard -Guard: @ 0x08063CF8 - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08063D1C - ldr r0, _08063D18 @ =gUnk_0810F544 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - b _08063D22 - .align 2, 0 -_08063D18: .4byte gUnk_0810F544 -_08063D1C: - adds r0, r2, #0 - bl sub_08063D24 -_08063D22: - pop {pc} - - thumb_func_start sub_08063D24 -sub_08063D24: @ 0x08063D24 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08063D40 @ =gUnk_0810F550 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0806ED78 - pop {r4, pc} - .align 2, 0 -_08063D40: .4byte gUnk_0810F550 - - thumb_func_start sub_08063D44 -sub_08063D44: @ 0x08063D44 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08063DA0 @ =gUnk_03003DBC - ldrb r0, [r0] - cmp r0, #0x46 - bhi _08063DC6 - ldrb r0, [r4, #9] - movs r1, #0x15 - eors r0, r1 - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f - lsls r1, r1, #4 - ldr r0, _08063DA4 @ =gUnk_0810F524 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08063DC6 - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - ldr r0, _08063DA8 @ =gUnk_0810F6BC - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - movs r2, #0 - bl sub_0806EE04 - ldrb r0, [r4, #0xa] - cmp r0, #0 - blt _08063DB6 - cmp r0, #3 - bgt _08063DAC - movs r0, #0xc - bl sub_080A7EE0 - str r4, [r0, #0x50] - movs r1, #0x3c - strb r1, [r0, #0xf] - b _08063DB6 - .align 2, 0 -_08063DA0: .4byte gUnk_03003DBC -_08063DA4: .4byte gUnk_0810F524 -_08063DA8: .4byte gUnk_0810F6BC -_08063DAC: - cmp r0, #5 - bgt _08063DB6 - adds r0, r4, #0 - bl sub_08078778 -_08063DB6: - ldrb r0, [r4, #0xc] - adds r0, #1 - movs r1, #0 - strb r0, [r4, #0xc] - strb r1, [r4, #0xa] - adds r0, r4, #0 - bl sub_08063DC8 -_08063DC6: - pop {r4, pc} - - thumb_func_start sub_08063DC8 -sub_08063DC8: @ 0x08063DC8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0xff - bne _08063DF8 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - ldr r1, _08063DF4 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _08063E4C - .align 2, 0 -_08063DF4: .4byte gLinkEntity -_08063DF8: - adds r0, r4, #0 - bl sub_0806EE20 - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - ldrb r1, [r4, #0x14] - cmp r0, r1 - beq _08063E18 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation - b _08063E1E -_08063E18: - adds r0, r4, #0 - bl GetNextFrame -_08063E1E: - adds r2, r4, #0 - adds r2, #0x39 - movs r0, #0 - ldrsb r0, [r2, r0] - cmp r0, #0 - beq _08063E4C - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xc] - strb r1, [r2] - ldr r1, _08063E50 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08064428 -_08063E4C: - pop {r4, pc} - .align 2, 0 -_08063E50: .4byte gLinkEntity - - thumb_func_start sub_08063E54 -sub_08063E54: @ 0x08063E54 - push {lr} - ldrb r1, [r0, #0xe] - subs r1, #1 - strb r1, [r0, #0xe] - lsls r1, r1, #0x18 - cmp r1, #0 - bne _08063E68 - movs r0, #0xf - bl SetRoomFlag -_08063E68: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08063E6C -sub_08063E6C: @ 0x08063E6C - push {lr} - adds r2, r0, #0 - ldr r0, _08063E8C @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08063E8A - movs r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x14] - adds r1, #4 - adds r0, r2, #0 - bl InitializeAnimation -_08063E8A: - pop {pc} - .align 2, 0 -_08063E8C: .4byte gTextBox - - thumb_func_start sub_08063E90 -sub_08063E90: @ 0x08063E90 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #9] - movs r1, #0x15 - eors r0, r1 - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f - lsls r1, r1, #4 - ldr r0, _08063EC8 @ =gUnk_0810F524 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08063F1E - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0xe] - cmp r1, #0 - beq _08063ECC - adds r1, r4, #0 - adds r1, #0x70 - movs r0, #8 - strb r0, [r1] - b _08063ED2 - .align 2, 0 -_08063EC8: .4byte gUnk_0810F524 -_08063ECC: - adds r0, r4, #0 - adds r0, #0x70 - strb r1, [r0] -_08063ED2: - movs r0, #0 - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_0805ACC0 - adds r2, r0, #0 - cmp r2, #0 - bne _08063EF2 - ldrh r0, [r4, #0x2e] - adds r1, r4, #0 - adds r1, #0x68 - strh r0, [r1] - ldrh r0, [r4, #0x32] - adds r1, #2 - strh r0, [r1] - b _08063EFE -_08063EF2: - lsrs r1, r2, #0x10 - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - adds r0, #2 - strh r2, [r0] -_08063EFE: - adds r1, r4, #0 - adds r1, #0x71 - movs r0, #0 - strb r0, [r1] - subs r1, #0x39 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - bl sub_08063F20 -_08063F1E: - pop {r4, pc} - - thumb_func_start sub_08063F20 -sub_08063F20: @ 0x08063F20 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - adds r0, r4, #0 - bl GetNextFrame - adds r2, r4, #0 - adds r2, #0x39 - movs r0, #0 - ldrsb r0, [r2, r0] - cmp r0, #0 - beq _08063F72 - ldrb r0, [r4, #0xc] - adds r0, #1 - movs r1, #0 - strb r0, [r4, #0xc] - strb r1, [r2] - ldr r1, _08063F74 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r4, #0 - adds r0, #0x70 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r1, r1, r0 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08064428 -_08063F72: - pop {r4, pc} - .align 2, 0 -_08063F74: .4byte gLinkEntity - - thumb_func_start sub_08063F78 -sub_08063F78: @ 0x08063F78 - push {lr} - adds r2, r0, #0 - ldr r0, _08063FA8 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08063FA6 - ldrb r0, [r2, #0xc] - subs r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x14] - lsrs r1, r1, #1 - adds r0, r2, #0 - adds r0, #0x70 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - adds r1, r1, r0 - adds r0, r2, #0 - bl InitializeAnimation -_08063FA6: - pop {pc} - .align 2, 0 -_08063FA8: .4byte gTextBox - - thumb_func_start Guard_Head -Guard_Head: @ 0x08063FAC - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x3f - adds r2, r0, #0 - ands r2, r1 - ldrb r3, [r6, #0x1e] - adds r5, r0, #0 - ands r5, r3 - adds r1, r6, #0 - adds r1, #0x5b - ldrb r1, [r1] - adds r4, r0, #0 - ands r4, r1 - ldrb r0, [r6, #9] - cmp r0, #0x15 - bne _08063FEC - movs r0, #0x40 - ands r0, r3 - cmp r0, #0 - beq _08063FE2 - adds r5, #0x21 - movs r2, #1 - rsbs r2, r2, #0 - movs r4, #0 - b _08063FF6 -_08063FE2: - adds r2, #0x19 - cmp r4, #0 - beq _08063FF6 - adds r4, #0x1f - b _08063FF6 -_08063FEC: - adds r2, #0x46 - adds r5, #0x2d - cmp r4, #0 - beq _08063FF6 - adds r4, #0x4c -_08063FF6: - subs r4, #1 - adds r0, r6, #0 - movs r1, #0 - bl SetExtraSpriteFrame - adds r0, r6, #0 - movs r1, #1 - adds r2, r5, #0 - bl SetExtraSpriteFrame - adds r0, r6, #0 - movs r1, #2 - adds r2, r4, #0 - bl SetExtraSpriteFrame - adds r0, r6, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r6, #0 - movs r1, #1 - movs r2, #2 - bl SetSpriteSubEntryOffsetData2 - adds r0, r6, #0 - bl sub_0807000C - pop {r4, r5, r6, pc} - - thumb_func_start sub_08064030 -sub_08064030: @ 0x08064030 - ldr r0, _08064040 @ =gRoomVars - ldr r2, [r0, #0x68] - rsbs r0, r2, #0 - orrs r0, r2 - lsrs r0, r0, #0x1f - str r0, [r1, #0x14] - bx lr - .align 2, 0 -_08064040: .4byte gRoomVars - - thumb_func_start sub_08064044 -sub_08064044: @ 0x08064044 - ldr r1, _0806404C @ =gUnk_030010A0 - movs r0, #1 - strb r0, [r1, #8] - bx lr - .align 2, 0 -_0806404C: .4byte gUnk_030010A0 - - thumb_func_start sub_08064050 -sub_08064050: @ 0x08064050 - push {lr} - adds r2, r1, #0 - movs r1, #0 - str r1, [r2, #4] - ldrb r0, [r0, #0xb] - cmp r0, #0x12 - beq _08064072 - cmp r0, #0x12 - bgt _08064068 - cmp r0, #0x11 - beq _0806406E - b _0806407A -_08064068: - cmp r0, #0x13 - beq _08064076 - b _0806407A -_0806406E: - movs r0, #1 - b _08064078 -_08064072: - movs r0, #2 - b _08064078 -_08064076: - movs r0, #3 -_08064078: - str r0, [r2, #4] -_0806407A: - pop {pc} - thumb_func_start sub_0806407C sub_0806407C: @ 0x0806407C push {r4, r5, r6, lr} diff --git a/asm/non_matching/guard/sub_08063D44.inc b/asm/non_matching/guard/sub_08063D44.inc new file mode 100644 index 00000000..201f79c0 --- /dev/null +++ b/asm/non_matching/guard/sub_08063D44.inc @@ -0,0 +1,69 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, lr} + adds r4, r0, #0 + ldr r0, _08063DA0 @ =gUnk_03003DBC + ldrb r0, [r0] + cmp r0, #0x46 + bhi _08063DC6 + ldrb r0, [r4, #9] + movs r1, #0x15 + eors r0, r1 + rsbs r1, r0, #0 + orrs r1, r0 + lsrs r1, r1, #0x1f + lsls r1, r1, #4 + ldr r0, _08063DA4 @ =gUnk_0810F524 + adds r1, r1, r0 + adds r0, r4, #0 + bl LoadExtraSpriteData + cmp r0, #0 + beq _08063DC6 + adds r0, r4, #0 + movs r1, #4 + bl InitializeAnimation + ldr r0, _08063DA8 @ =gUnk_0810F6BC + ldrb r1, [r4, #0xa] + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r1, [r1] + adds r0, r4, #0 + movs r2, #0 + bl sub_0806EE04 + ldrb r0, [r4, #0xa] + cmp r0, #0 + blt _08063DB6 + cmp r0, #3 + bgt _08063DAC + movs r0, #0xc + bl sub_080A7EE0 + str r4, [r0, #0x50] + movs r1, #0x3c + strb r1, [r0, #0xf] + b _08063DB6 + .align 2, 0 +_08063DA0: .4byte gUnk_03003DBC +_08063DA4: .4byte gUnk_0810F524 +_08063DA8: .4byte gUnk_0810F6BC +_08063DAC: + cmp r0, #5 + bgt _08063DB6 + adds r0, r4, #0 + bl sub_08078778 +_08063DB6: + ldrb r0, [r4, #0xc] + adds r0, #1 + movs r1, #0 + strb r0, [r4, #0xc] + strb r1, [r4, #0xa] + adds r0, r4, #0 + bl sub_08063DC8 +_08063DC6: + pop {r4, pc} + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/guard/sub_08063E90.inc b/asm/non_matching/guard/sub_08063E90.inc new file mode 100644 index 00000000..76e3d4a5 --- /dev/null +++ b/asm/non_matching/guard/sub_08063E90.inc @@ -0,0 +1,73 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #9] + movs r1, #0x15 + eors r0, r1 + rsbs r1, r0, #0 + orrs r1, r0 + lsrs r1, r1, #0x1f + lsls r1, r1, #4 + ldr r0, _08063EC8 @ =gUnk_0810F524 + adds r1, r1, r0 + adds r0, r4, #0 + bl LoadExtraSpriteData + cmp r0, #0 + beq _08063F1E + ldrb r0, [r4, #0xc] + adds r0, #1 + strb r0, [r4, #0xc] + ldrb r1, [r4, #0xe] + cmp r1, #0 + beq _08063ECC + adds r1, r4, #0 + adds r1, #0x70 + movs r0, #8 + strb r0, [r1] + b _08063ED2 + .align 2, 0 +_08063EC8: .4byte gUnk_0810F524 +_08063ECC: + adds r0, r4, #0 + adds r0, #0x70 + strb r1, [r0] +_08063ED2: + movs r0, #0 + strb r0, [r4, #0xe] + adds r0, r4, #0 + bl sub_0805ACC0 + adds r2, r0, #0 + cmp r2, #0 + bne _08063EF2 + ldrh r0, [r4, #0x2e] + adds r1, r4, #0 + adds r1, #0x68 + strh r0, [r1] + ldrh r0, [r4, #0x32] + adds r1, #2 + strh r0, [r1] + b _08063EFE +_08063EF2: + lsrs r1, r2, #0x10 + adds r0, r4, #0 + adds r0, #0x68 + strh r1, [r0] + adds r0, #2 + strh r2, [r0] +_08063EFE: + adds r1, r4, #0 + adds r1, #0x71 + movs r0, #0 + strb r0, [r1] + subs r1, #0x39 + movs r0, #1 + strb r0, [r1] + adds r0, r4, #0 + bl UpdateSpriteForCollisionLayer + adds r0, r4, #0 + bl sub_0807DD64 + adds r0, r4, #0 + bl sub_08063F20 +_08063F1E: + pop {r4, pc} + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/railtrack/sub_08085394.inc b/asm/non_matching/railtrack/sub_08085394.inc new file mode 100644 index 00000000..9a2ba760 --- /dev/null +++ b/asm/non_matching/railtrack/sub_08085394.inc @@ -0,0 +1,87 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + adds r7, r0, #0 + ldr r0, _08085430 @ =gUnk_081205E0 + ldrb r2, [r7, #0x14] + lsrs r2, r2, #1 + lsls r2, r2, #1 + adds r0, r2, r0 + ldrh r0, [r0] + mov sl, r0 + ldr r0, _08085434 @ =gUnk_080B4488 + adds r2, r2, r0 + ldr r0, [r7, #0x70] + mov sb, r0 + movs r1, #0x2e + ldrsh r4, [r7, r1] + ldr r1, _08085438 @ =gRoomControls + ldrh r0, [r1, #6] + subs r4, r4, r0 + asrs r4, r4, #4 + movs r3, #0x3f + ands r4, r3 + movs r5, #0x32 + ldrsh r0, [r7, r5] + ldrh r1, [r1, #8] + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r3 + lsls r0, r0, #6 + orrs r4, r0 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + mov r8, r2 + lsls r5, r2, #1 + mov r1, sb + subs r0, r1, r5 + ldrh r1, [r0] + adds r0, r7, #0 + adds r0, #0x74 + strh r1, [r0] + subs r1, r4, r2 + adds r6, r7, #0 + adds r6, #0x38 + ldrb r2, [r6] + mov r0, sl + bl SetTile + mov r1, sb + ldrh r0, [r1] + adds r1, r7, #0 + adds r1, #0x76 + strh r0, [r1] + ldrb r2, [r6] + mov r0, sl + adds r1, r4, #0 + bl SetTile + add r5, sb + ldrh r1, [r5] + adds r0, r7, #0 + adds r0, #0x78 + strh r1, [r0] + add r4, r8 + ldrb r2, [r6] + mov r0, sl + adds r1, r4, #0 + bl SetTile + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08085430: .4byte gUnk_081205E0 +_08085434: .4byte gUnk_080B4488 +_08085438: .4byte gRoomControls + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/railtrack/sub_080854A8.inc b/asm/non_matching/railtrack/sub_080854A8.inc new file mode 100644 index 00000000..aa5bed89 --- /dev/null +++ b/asm/non_matching/railtrack/sub_080854A8.inc @@ -0,0 +1,36 @@ + .syntax unified + push {r4, lr} + ldr r2, _080854E0 @ =gUnk_081205E0 + ldrb r1, [r0, #0x14] + lsrs r1, r1, #1 + lsls r1, r1, #1 + adds r2, r1, r2 + ldrh r3, [r2] + adds r4, r3, #0 + ldr r2, _080854E4 @ =gUnk_080B4488 + adds r1, r1, r2 + ldr r2, [r0, #0x70] + movs r0, #0 + ldrsb r0, [r1, r0] + lsls r1, r0, #1 + subs r0, r2, r1 + ldrh r0, [r0] + cmp r3, r0 + bne _080854E8 + ldrh r0, [r2] + cmp r3, r0 + bne _080854E8 + adds r0, r1, r2 + ldrh r0, [r0] + cmp r4, r0 + bne _080854E8 + movs r0, #0 + b _080854EA + .align 2, 0 +_080854E0: .4byte gUnk_081205E0 +_080854E4: .4byte gUnk_080B4488 +_080854E8: + movs r0, #1 +_080854EA: + pop {r4, pc} + .syntax divided \ No newline at end of file diff --git a/asm/railtrack.s b/asm/railtrack.s deleted file mode 100644 index 6fa8b595..00000000 --- a/asm/railtrack.s +++ /dev/null @@ -1,438 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Railtrack -Railtrack: @ 0x08085194 - push {lr} - ldr r2, _080851A8 @ =gUnk_081205D0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080851A8: .4byte gUnk_081205D0 - - thumb_func_start sub_080851AC -sub_080851AC: @ 0x080851AC - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r2, #1 - movs r3, #1 - strb r3, [r5, #0xc] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r5, #0xb] - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - beq _080851E8 - adds r1, r5, #0 - adds r1, #0x7c - ldr r0, _080851E4 @ =0x0000FFFF - strh r0, [r1] - b _080851EE - .align 2, 0 -_080851E4: .4byte 0x0000FFFF -_080851E8: - adds r0, r5, #0 - adds r0, #0x7c - strh r3, [r0] -_080851EE: - ldrb r1, [r5, #0xb] - movs r0, #2 - ands r0, r1 - strb r0, [r5, #0x14] - ldrb r4, [r5, #0xa] - cmp r4, #3 - bne _0808521E - adds r0, r5, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - adds r1, r5, #0 - adds r1, #0x7a - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _0808521E - ldrb r0, [r5, #0x14] - adds r0, #2 - movs r1, #3 - ands r0, r1 - strb r0, [r5, #0x14] - strb r4, [r5, #0xc] -_0808521E: - ldrb r1, [r5, #0x14] - adds r0, r5, #0 - bl InitializeAnimation - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - bl GetLayerByIndex - movs r1, #0x2e - ldrsh r2, [r5, r1] - ldr r3, _08085260 @ =gRoomControls - ldrh r1, [r3, #6] - subs r2, r2, r1 - asrs r2, r2, #4 - movs r4, #0x3f - ands r2, r4 - movs r6, #0x32 - ldrsh r1, [r5, r6] - ldrh r3, [r3, #8] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r4 - lsls r1, r1, #6 - orrs r2, r1 - lsls r2, r2, #1 - adds r2, #4 - adds r0, r0, r2 - str r0, [r5, #0x70] - adds r0, r5, #0 - bl sub_08085394 - pop {r4, r5, r6, pc} - .align 2, 0 -_08085260: .4byte gRoomControls - - thumb_func_start sub_08085264 -sub_08085264: @ 0x08085264 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x86 - ldrh r0, [r5] - bl CheckFlags - cmp r0, #0 - beq _080852AE - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xf] - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _0808528A - ldrh r0, [r5] - bl ClearFlag -_0808528A: - adds r0, r4, #0 - adds r0, #0x7c - ldrb r0, [r0] - ldrb r1, [r4, #0x14] - adds r0, r0, r1 - movs r1, #3 - ands r0, r1 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0808543C - ldr r0, _080852B0 @ =0x00000151 - bl sub_08004488 -_080852AE: - pop {r4, r5, pc} - .align 2, 0 -_080852B0: .4byte 0x00000151 - - thumb_func_start sub_080852B4 -sub_080852B4: @ 0x080852B4 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08085300 - movs r4, #3 - movs r0, #3 - strb r0, [r5, #0xc] - ldrb r0, [r5, #0xe] - strb r0, [r5, #0xf] - adds r0, r5, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - adds r1, r5, #0 - adds r1, #0x7a - strh r0, [r1] - adds r0, r5, #0 - adds r0, #0x7c - ldrb r0, [r0] - ldrb r1, [r5, #0x14] - adds r0, r0, r1 - ands r0, r4 - strb r0, [r5, #0x14] - ldrb r1, [r5, #0x14] - adds r0, r5, #0 - bl InitializeAnimation - adds r0, r5, #0 - bl sub_08085394 - ldr r0, _08085304 @ =0x00000151 - bl sub_08004488 -_08085300: - pop {r4, r5, pc} - .align 2, 0 -_08085304: .4byte 0x00000151 - - thumb_func_start sub_08085308 -sub_08085308: @ 0x08085308 - push {r4, lr} - adds r4, r0, #0 - bl sub_080854A8 - cmp r0, #0 - bne _0808538C - ldrb r0, [r4, #0xa] - cmp r0, #2 - beq _08085324 - cmp r0, #2 - ble _08085354 - cmp r0, #3 - beq _08085338 - b _08085354 -_08085324: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _08085354 - movs r0, #1 - strb r0, [r4, #0xc] - b _0808538C -_08085338: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - adds r1, r4, #0 - adds r1, #0x7a - ldrh r1, [r1] - cmp r0, r1 - bne _08085350 - movs r0, #0xff - b _08085352 -_08085350: - movs r0, #1 -_08085352: - strb r0, [r4, #0xf] -_08085354: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808538C - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x7c - ldrb r0, [r0] - ldrb r1, [r4, #0x14] - adds r0, r0, r1 - movs r1, #3 - ands r0, r1 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0808543C - ldr r0, _08085390 @ =0x00000151 - bl sub_08004488 -_0808538C: - pop {r4, pc} - .align 2, 0 -_08085390: .4byte 0x00000151 - - thumb_func_start sub_08085394 -sub_08085394: @ 0x08085394 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r7, r0, #0 - ldr r0, _08085430 @ =gUnk_081205E0 - ldrb r2, [r7, #0x14] - lsrs r2, r2, #1 - lsls r2, r2, #1 - adds r0, r2, r0 - ldrh r0, [r0] - mov sl, r0 - ldr r0, _08085434 @ =gUnk_080B4488 - adds r2, r2, r0 - ldr r0, [r7, #0x70] - mov sb, r0 - movs r1, #0x2e - ldrsh r4, [r7, r1] - ldr r1, _08085438 @ =gRoomControls - ldrh r0, [r1, #6] - subs r4, r4, r0 - asrs r4, r4, #4 - movs r3, #0x3f - ands r4, r3 - movs r5, #0x32 - ldrsh r0, [r7, r5] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r4, r0 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - mov r8, r2 - lsls r5, r2, #1 - mov r1, sb - subs r0, r1, r5 - ldrh r1, [r0] - adds r0, r7, #0 - adds r0, #0x74 - strh r1, [r0] - subs r1, r4, r2 - adds r6, r7, #0 - adds r6, #0x38 - ldrb r2, [r6] - mov r0, sl - bl SetTile - mov r1, sb - ldrh r0, [r1] - adds r1, r7, #0 - adds r1, #0x76 - strh r0, [r1] - ldrb r2, [r6] - mov r0, sl - adds r1, r4, #0 - bl SetTile - add r5, sb - ldrh r1, [r5] - adds r0, r7, #0 - adds r0, #0x78 - strh r1, [r0] - add r4, r8 - ldrb r2, [r6] - mov r0, sl - adds r1, r4, #0 - bl SetTile - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08085430: .4byte gUnk_081205E0 -_08085434: .4byte gUnk_080B4488 -_08085438: .4byte gRoomControls - - thumb_func_start sub_0808543C -sub_0808543C: @ 0x0808543C - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldr r0, _080854A0 @ =gUnk_080B4488 - ldrb r2, [r7, #0x14] - lsrs r2, r2, #1 - lsls r2, r2, #1 - adds r2, r2, r0 - movs r0, #0x2e - ldrsh r4, [r7, r0] - ldr r1, _080854A4 @ =gRoomControls - ldrh r0, [r1, #6] - subs r4, r4, r0 - asrs r4, r4, #4 - movs r3, #0x3f - ands r4, r3 - movs r5, #0x32 - ldrsh r0, [r7, r5] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r4, r0 - adds r0, r7, #0 - adds r0, #0x74 - ldrh r0, [r0] - movs r6, #0 - ldrsb r6, [r2, r6] - subs r1, r4, r6 - adds r5, r7, #0 - adds r5, #0x38 - ldrb r2, [r5] - bl SetTile - adds r0, r7, #0 - adds r0, #0x76 - ldrh r0, [r0] - ldrb r2, [r5] - adds r1, r4, #0 - bl SetTile - adds r0, r7, #0 - adds r0, #0x78 - ldrh r0, [r0] - adds r4, r4, r6 - ldrb r2, [r5] - adds r1, r4, #0 - bl SetTile - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080854A0: .4byte gUnk_080B4488 -_080854A4: .4byte gRoomControls - - thumb_func_start sub_080854A8 -sub_080854A8: @ 0x080854A8 - push {r4, lr} - ldr r2, _080854E0 @ =gUnk_081205E0 - ldrb r1, [r0, #0x14] - lsrs r1, r1, #1 - lsls r1, r1, #1 - adds r2, r1, r2 - ldrh r3, [r2] - adds r4, r3, #0 - ldr r2, _080854E4 @ =gUnk_080B4488 - adds r1, r1, r2 - ldr r2, [r0, #0x70] - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r1, r0, #1 - subs r0, r2, r1 - ldrh r0, [r0] - cmp r3, r0 - bne _080854E8 - ldrh r0, [r2] - cmp r3, r0 - bne _080854E8 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r4, r0 - bne _080854E8 - movs r0, #0 - b _080854EA - .align 2, 0 -_080854E0: .4byte gUnk_081205E0 -_080854E4: .4byte gUnk_080B4488 -_080854E8: - movs r0, #1 -_080854EA: - pop {r4, pc} diff --git a/include/entity.h b/include/entity.h index 8a04bc42..fb7f68a3 100644 --- a/include/entity.h +++ b/include/entity.h @@ -168,6 +168,7 @@ extern void GetNextFrame(Entity*); extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void SetExtraSpriteFrame(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); +extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern Entity* CreateEnemy(u32 subtype, u32 form); extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); diff --git a/linker.ld b/linker.ld index 032b66c1..479604b6 100644 --- a/linker.ld +++ b/linker.ld @@ -551,6 +551,7 @@ SECTIONS { asm/brocco.o(.text); asm/sittingPerson.o(.text); asm/pina.o(.text); + src/guard.o(.text); asm/guardWithSpear.o(.text); asm/castleMaid.o(.text); asm/din.o(.text); @@ -676,7 +677,7 @@ SECTIONS { asm/object10.o(.text); asm/object11.o(.text); asm/object12.o(.text); - asm/railtrack.o(.text); + src/railtrack.o(.text); asm/lilypadLarge.o(.text); asm/object15.o(.text); asm/floatingPlatform.o(.text); diff --git a/src/guard.c b/src/guard.c new file mode 100644 index 00000000..765a89dd --- /dev/null +++ b/src/guard.c @@ -0,0 +1,196 @@ +#include "global.h" +#include "entity.h" +#include "link.h" +#include "flags.h" +#include "textbox.h" +#include "room.h" + +typedef struct { + u32 unk; + u32 entityCount; +} struct_03003DB8; + +typedef struct { + u8 filler[8]; + u8 unk; +} struct_030010A0; + +typedef struct { + u32 unk; + u32 unk2; +} struct_08064050; + +extern void sub_08063D24(Entity*); +extern void sub_0806ED78(Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806EE20(Entity*); +extern void sub_08064428(Entity*); +extern u32 sub_0805ACC0(Entity*); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern void sub_0807000C(Entity*); + +extern void (*const gUnk_0810F544[])(Entity*); +extern void (*const gUnk_0810F550[])(Entity*); + +// entity count +extern u8 gUnk_03003DBC; +extern SpriteLoadData gUnk_0810F524[]; +extern void* gUnk_0810F6BC[]; +extern struct_030010A0 gUnk_030010A0; + +void Guard(Entity *this) +{ + if ((this->flags & 2) != 0) { + gUnk_0810F544[this->action](this); + } + else { + sub_08063D24(this); + } +} + +void sub_08063D24(Entity *this) +{ + gUnk_0810F550[this->action](this); + sub_0806ED78(this); +} + +NAKED +void sub_08063D44(Entity* this) { + asm(".include \"asm/non_matching/guard/sub_08063D44.inc\""); +} + +void sub_08063DC8(Entity *this) +{ + if ((this->entityType).form == 0xff) { + this->action = 2; + this->actionDelay = 0x1e; + this->animationState = sub_0806F5A4(GetFacingDirection(this,&gLinkEntity)); + InitAnimationForceUpdate(this, this->animationState + 4); + } + else { + sub_0806EE20(this); + if (this->field_0x3e != this->animationState) { + this->animationState = this->field_0x3e; + InitializeAnimation(this, this->animationState + 4); + } + else { + GetNextFrame(this); + } + if (this->interactType != 0) { + this->action = 3; + this->interactType = 0; + InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this,&gLinkEntity))); + sub_08064428(this); + } + } +} + +void sub_08063E54(Entity *this) +{ + if (--this->actionDelay == 0) { + SetRoomFlag(0xf); + } +} + +void sub_08063E6C(Entity *this) +{ + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->action = 1; + InitializeAnimation(this, this->animationState + 4); + } +} + +NAKED +void sub_08063E90(Entity* this) { + asm(".include \"asm/non_matching/guard/sub_08063E90.inc\""); +} + +void sub_08063F20(Entity *this) +{ + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + GetNextFrame(this); + if (this->interactType != 0) { + this->action++; + this->interactType = 0; + InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + *(s8 *)&this->field_0x70); + sub_08064428(this); + } +} + +void sub_08063F78(Entity *this) +{ + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->action = this->action - 1; + InitializeAnimation(this,(this->animationState >> 1) + 4 + *(s8 *)&this->field_0x70); + } +} + +void Guard_Head(Entity *this) +{ + u8 bVar1; + u32 uVar2; + u32 pbVar3; + u32 uVar4; + u32 pbVar5; + + uVar2 = this->frames.all & 0x3f; + pbVar5 = (this->frameIndex & 0x3f); + uVar4 = this->frameSpriteSettings & 0x3f; + if ((this->entityType).subtype == 0x15) { + if ((this->frameIndex & 0x40) != 0) { + pbVar5 = pbVar5 + 0x21; + pbVar3 = 0xffffffff; + uVar4 = 0; + } + else { + pbVar3 = (uVar2 + 0x19); + if ((this->frameSpriteSettings & 0x3f) != 0) { + uVar4 += 0x1f; + } + } + } + else { + pbVar3 = (uVar2 + 0x46); + pbVar5 = pbVar5 + 0x2d; + if ((this->frameSpriteSettings & 0x3f) != 0) { + uVar4 += 0x4c; + } + } + uVar4--; + SetExtraSpriteFrame(this, 0, pbVar3); + SetExtraSpriteFrame(this, 1, pbVar5); + SetExtraSpriteFrame(this, 2, uVar4); + SetSpriteSubEntryOffsetData1(this, 1, 0); + SetSpriteSubEntryOffsetData2(this, 1, 2); + sub_0807000C(this); +} + +void sub_08064030(Entity *arg0,Entity *arg1) +{ + *(u32*)&arg1->animationState = (-gRoomVars.greatFairyState | gRoomVars.greatFairyState) >> 0x1f; +} + +void sub_08064044(void) +{ + gUnk_030010A0.unk = 1; +} + +void sub_08064050(Entity *arg0, struct_08064050 *arg1) +{ + u32 unk; + + arg1->unk2 = 0; + switch (arg0->entityType.parameter) { + case 0x11: + arg1->unk2 = 1; + break; + case 0x12: + arg1->unk2 = 2; + break; + case 0x13: + arg1->unk2 = 3; + } +} \ No newline at end of file diff --git a/src/railtrack.c b/src/railtrack.c new file mode 100644 index 00000000..3d18f068 --- /dev/null +++ b/src/railtrack.c @@ -0,0 +1,148 @@ +#include "global.h" +#include "entity.h" +#include "room.h" +#include "flags.h" + +extern u32* GetLayerByIndex(u32); +extern void sub_08085394(Entity*); +extern void sub_0808543C(Entity*); +extern void sub_08004488(u32); +extern u32 sub_080854A8(Entity*); +extern void SetTile(u32, u32, u32); + +extern void (*const gUnk_081205D0[])(Entity*); + +extern u16 gUnk_081205E0[]; +extern s8 gUnk_080B4488[]; + +void Railtrack(Entity* this) { + gUnk_081205D0[this->action](this); +} + +void sub_080851AC(Entity* this) { + u32 uVar1; + + this->action = 1; + this->spriteSettings.b.draw = 1; + this->spritePriority.b0 = 7; + if ((this->entityType.parameter & 1) != 0) { + this->field_0x7c.HALF.LO = -1; + } else { + this->field_0x7c.HALF.LO = 1; + } + this->animationState = this->entityType.parameter & 2; + if ((this->entityType).form == 3) { + uVar1 = CheckFlags(this->field_0x86); + this->field_0x7a = uVar1; + if ((u16)(uVar1 & -1) != 0) { + this->animationState = (this->animationState + 2) & 3; + this->action = 3; + } + } + InitializeAnimation(this, this->animationState); + this->field_0x70 = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2); + sub_08085394(this); +} + +void sub_08085264(Entity* this) { + if (CheckFlags(this->field_0x86)) { + this->action = 2; + this->field_0xf = 8; + if (this->entityType.form == 1) { + ClearFlag(this->field_0x86); + } + this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3; + InitializeAnimation(this, this->animationState); + sub_0808543C(this); + sub_08004488(0x151); + } +} + +void sub_080852B4(Entity* this) { + if (--this->field_0xf == 0) { + this->action = 3; + this->field_0xf = this->actionDelay; + this->field_0x7a = CheckFlags(this->field_0x86); + this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3; + InitializeAnimation(this, this->animationState); + sub_08085394(this); + sub_08004488(0x151); + } +} + +void sub_08085308(Entity* this) { + if (sub_080854A8(this) == 0) { + switch (this->entityType.form) { + case 0: + case 1: + break; + case 2: + if (CheckFlags(this->field_0x86) == 0) { + this->action = 1; + return; + } + break; + case 3: + if (CheckFlags(this->field_0x86) == *(u16*)&this->field_0x7a) { + this->field_0xf = 0xff; + } else { + this->field_0xf = 1; + } + } + + if (--this->field_0xf == 0) { + this->action = 2; + this->field_0xf = 8; + this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3; + InitializeAnimation(this, this->animationState); + sub_0808543C(this); + sub_08004488(0x151); + } + } +} + +#if 0 +void sub_08085394(Entity *this) +{ + u32 uVar1; + u16 *layerData; + u32 iVar3; + u32 uVar4; + u8 *pbVar5; + + uVar1 = gUnk_081205E0[this->animationState / 2]; + iVar3 = this->animationState / 2; + layerData = *(u16 **)&this->field_0x70; + uVar4 = COORD_TO_TILE(this); + this->field_0x74 = layerData[gUnk_080B4488[iVar3]]; + pbVar5 = &this->collisionLayer; + SetTile(uVar1, uVar4 - iVar3, *pbVar5); + this->field_0x76 = layerData[0]; + SetTile(uVar1,uVar4, *pbVar5); + *(u16 *)&this->field_0x78 = layerData[iVar3]; + SetTile(uVar1,uVar4 + iVar3, *pbVar5); +} +#endif + +NAKED +void sub_08085394(Entity* this) { + asm(".include \"asm/non_matching/railtrack/sub_08085394.inc\""); +} + +void sub_0808543C(Entity *this) +{ + s8 *cVar1; + u32 uVar2; + s8 temp; + + temp = gUnk_080B4488[(this->animationState >> 1) << 1]; + uVar2 = COORD_TO_TILE(this); + SetTile(this->field_0x74, uVar2 - temp, this->collisionLayer); + SetTile(this->field_0x76, uVar2, this->collisionLayer); + SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer); +} + +NAKED +u32 sub_080854A8(Entity *this) { + asm(".include \"asm/non_matching/railtrack/sub_080854A8.inc\""); +} \ No newline at end of file From 370c63e21e6f12457f98bf8dbe9085553f2dd6a5 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 16:28:53 -0700 Subject: [PATCH 17/25] metalDoor.c OK --- asm/metalDoor.s | 301 ----------------------------------------------- include/entity.h | 2 +- linker.ld | 2 +- src/item11.c | 4 +- src/metalDoor.c | 115 ++++++++++++++++++ src/object49.c | 4 +- src/railtrack.c | 2 +- 7 files changed, 122 insertions(+), 308 deletions(-) delete mode 100644 asm/metalDoor.s create mode 100644 src/metalDoor.c diff --git a/asm/metalDoor.s b/asm/metalDoor.s deleted file mode 100644 index 9a8adb58..00000000 --- a/asm/metalDoor.s +++ /dev/null @@ -1,301 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MetalDoor -MetalDoor: @ 0x080A066C - push {lr} - ldr r2, _080A0680 @ =gUnk_0812493C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080A0680: .4byte gUnk_0812493C - - thumb_func_start sub_080A0684 -sub_080A0684: @ 0x080A0684 - push {r4, r5, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x84 - ldrh r1, [r2] - ldr r0, _080A070C @ =0x0000FFFF - cmp r1, r0 - beq _080A06A2 - adds r0, r1, #0 - bl CheckFlags - cmp r0, #0 - beq _080A06A2 - bl DeleteThisEntity -_080A06A2: - movs r0, #1 - strb r0, [r4, #0xc] - movs r2, #0 - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r2, [r4, #0x1e] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r0, _080A0710 @ =gUnk_080FD180 - str r0, [r4, #0x48] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r2] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x70 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x72 - strh r0, [r1] - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, _080A0714 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r5, #0x32 - ldrsh r0, [r4, r5] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r4, #0 - adds r0, #0x74 - strh r1, [r0] - pop {r4, r5, pc} - .align 2, 0 -_080A070C: .4byte 0x0000FFFF -_080A0710: .4byte gUnk_080FD180 -_080A0714: .4byte gRoomControls - - thumb_func_start sub_080A0718 -sub_080A0718: @ 0x080A0718 - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - bl sub_08083734 - cmp r0, #0 - beq _080A074A - movs r2, #0 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0xc - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #0x10 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - strb r2, [r4, #0x15] - ldrh r0, [r4, #0x32] - adds r0, #0x24 - strh r0, [r4, #0x32] - adds r0, r4, #0 - bl sub_080A080C -_080A074A: - pop {r4, pc} - - thumb_func_start sub_080A074C -sub_080A074C: @ 0x080A074C - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F69C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _080A07B6 - movs r0, #3 - strb r0, [r4, #0xc] - strh r1, [r4, #0x36] - adds r0, r4, #0 - adds r0, #0x70 - ldrh r0, [r0] - strh r0, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x72 - ldrh r0, [r0] - strh r0, [r4, #0x32] - adds r0, r4, #0 - movs r1, #0x11 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _080A0794 - ldrh r0, [r1, #0x2e] - adds r0, #0xc - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - subs r0, #0xc - strh r0, [r1, #0x32] -_080A0794: - adds r0, r4, #0 - movs r1, #0x11 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _080A07B0 - ldrh r0, [r1, #0x2e] - subs r0, #0xc - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - subs r0, #0xc - strh r0, [r1, #0x32] -_080A07B0: - ldr r0, _080A07B8 @ =0x0000010B - bl sub_08004488 -_080A07B6: - pop {r4, pc} - .align 2, 0 -_080A07B8: .4byte 0x0000010B - - thumb_func_start sub_080A07BC -sub_080A07BC: @ 0x080A07BC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _080A07EA - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0xc - strb r0, [r4, #0xe] - movs r0, #0x10 - strb r0, [r4, #0x15] - ldrh r0, [r4, #0x32] - adds r0, #2 - strh r0, [r4, #0x32] - adds r0, r4, #0 - bl sub_080A0870 - ldr r0, _080A07EC @ =0x0000010B - bl PlaySFX -_080A07EA: - pop {r4, pc} - .align 2, 0 -_080A07EC: .4byte 0x0000010B - - thumb_func_start sub_080A07F0 -sub_080A07F0: @ 0x080A07F0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F69C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080A0808 - bl DeleteThisEntity -_080A0808: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A080C -sub_080A080C: @ 0x080A080C - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x74 - ldrh r0, [r6] - subs r0, #1 - adds r5, r4, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl sub_080001DA - adds r1, r4, #0 - adds r1, #0x76 - strh r0, [r1] - ldrh r0, [r6] - ldrb r1, [r5] - bl sub_080001DA - adds r1, r4, #0 - adds r1, #0x78 - strh r0, [r1] - ldrh r0, [r6] - adds r0, #1 - ldrb r1, [r5] - bl sub_080001DA - adds r1, r4, #0 - adds r1, #0x7a - strh r0, [r1] - ldr r4, _080A086C @ =0x00004022 - ldrh r1, [r6] - subs r1, #1 - ldrb r2, [r5] - adds r0, r4, #0 - bl SetTile - ldrh r1, [r6] - ldrb r2, [r5] - adds r0, r4, #0 - bl SetTile - ldrh r1, [r6] - adds r1, #1 - ldrb r2, [r5] - adds r0, r4, #0 - bl SetTile - pop {r4, r5, r6, pc} - .align 2, 0 -_080A086C: .4byte 0x00004022 - - thumb_func_start sub_080A0870 -sub_080A0870: @ 0x080A0870 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r0, #0x76 - ldrh r0, [r0] - adds r5, r6, #0 - adds r5, #0x74 - ldrh r1, [r5] - subs r1, #1 - adds r4, r6, #0 - adds r4, #0x38 - ldrb r2, [r4] - bl SetTile - adds r0, r6, #0 - adds r0, #0x78 - ldrh r0, [r0] - ldrh r1, [r5] - ldrb r2, [r4] - bl SetTile - adds r0, r6, #0 - adds r0, #0x7a - ldrh r0, [r0] - ldrh r1, [r5] - adds r1, #1 - ldrb r2, [r4] - bl SetTile - pop {r4, r5, r6, pc} - .align 2, 0 diff --git a/include/entity.h b/include/entity.h index fb7f68a3..661e8343 100644 --- a/include/entity.h +++ b/include/entity.h @@ -140,7 +140,7 @@ typedef struct Entity { /*0x6c*/ u8 field_0x6c; /*0x6d*/ u8 field_0x6d; /*0x6e*/ u8 filler4[2]; - /*0x70*/ u32 field_0x70; + /*0x70*/ union SplitWord field_0x70; /*0x74*/ u16 field_0x74; /*0x76*/ u16 field_0x76; /*0x78*/ union SplitHWord field_0x78; diff --git a/linker.ld b/linker.ld index 479604b6..b48e5643 100644 --- a/linker.ld +++ b/linker.ld @@ -842,7 +842,7 @@ SECTIONS { asm/objectAD.o(.text); asm/floatingBlock.o(.text); asm/objectAF.o(.text); - asm/metalDoor.o(.text); + src/metalDoor.o(.text); asm/jailBars.o(.text); asm/objectB2.o(.text); asm/objectB3.o(.text); diff --git a/src/item11.c b/src/item11.c index 362ba771..0af53106 100644 --- a/src/item11.c +++ b/src/item11.c @@ -64,9 +64,9 @@ void sub_08018CBC(Entity *this) this->field_0x44 = gUnk_080B3DE0[(this->entityType).form * 2 + 1]; this->field_0x40 = 0x1b; this->boundingBox = gUnk_080B3DE8[(this->entityType).form]; - (u32 *)gLinkEntity.field_0x70 = this; + (u32 *)gLinkEntity.field_0x70.WORD = this; sub_08078CD0(&gLinkEntity); - (u32 *)gLinkEntity.field_0x70 = pEVar3; + (u32 *)gLinkEntity.field_0x70.WORD = pEVar3; InitializeAnimation(this, (this->entityType).form + 10); sub_08018FA0(this); } diff --git a/src/metalDoor.c b/src/metalDoor.c new file mode 100644 index 00000000..1f18a272 --- /dev/null +++ b/src/metalDoor.c @@ -0,0 +1,115 @@ +#include "global.h" +#include "entity.h" +#include "room.h" +#include "flags.h" + +extern u32 sub_08083734(Entity*, u32); +extern void sub_080A080C(Entity*); +extern void sub_0806F69C(Entity*); +extern void sub_08004488(u32); +extern void sub_080A0870(Entity*); +extern void PlaySFX(u32); +extern u32 sub_080001DA(u32, u32); +extern void SetTile(u32, u32, u32); + +extern void (*const gUnk_0812493C[])(Entity*); + +extern BoundingBox gUnk_080FD180; + +void MetalDoor(Entity* this) { + gUnk_0812493C[this->action](this); +} + +void sub_080A0684(Entity *this) +{ + if ((this->cutsceneBeh.HWORD != 0xffff) && CheckFlags(this->cutsceneBeh.HWORD)) { + DeleteThisEntity(); + } + this->action = 1; + this->nonPlanarMovement = 0x300; + this->spriteSettings.b.draw = 0; + this->frameIndex = 0; + this->spriteSettings.b.flipY = 1; + this->boundingBox = &gUnk_080FD180; + this->spritePriority.b0 = 5; + this->field_0x70.HALF.LO = this->x.HALF.HI; + this->field_0x70.HALF.HI = this->y.HALF.HI; + this->field_0x74 = COORD_TO_TILE(this); +} + +void sub_080A0718(Entity *this) +{ + if (sub_08083734(this, 2) != 0) { + this->action = 2; + this->actionDelay = 0xc; + this->spriteSettings.b.draw = TRUE; + this->direction = 0; + this->y.HALF.HI += 0x24; + sub_080A080C(this); + } +} + +void sub_080A074C(Entity *this) +{ + u8 bVar1; + Entity *ent; + + sub_0806F69C(this); + + if (--this->actionDelay == 0) { + this->action = 3; + this->height.HALF.HI = 0; + this->x.HALF.HI = this->field_0x70.HALF.LO; + this->y.HALF.HI = this->field_0x70.HALF.HI; + ent = CreateFx(this, 0x11, 0x40); + if (ent != NULL) { + ent->x.HALF.HI += 0xc; + ent->y.HALF.HI -= 0xc; + } + ent = CreateFx(this, 0x11, 0x40); + if (ent != NULL) { + ent->x.HALF.HI -= 0xc; + ent->y.HALF.HI -= 0xc; + } + sub_08004488(0x10b); + } +} + +void sub_080A07BC(Entity *this) +{ + if (CheckFlags(this->field_0x86)) { + this->action = 4; + this->actionDelay = 0xc; + this->direction = 0x10; + this->y.HALF.HI += 2; + sub_080A0870(this); + PlaySFX(0x10b); + } +} + +void sub_080A07F0(Entity *this) +{ + + sub_0806F69C(this); + + if (--this->actionDelay == 0) { + DeleteThisEntity(); + } +} + +void sub_080A080C(Entity *this) +{ + this->field_0x76 = sub_080001DA(this->field_0x74 - 1, this->collisionLayer); + this->field_0x78.HWORD = sub_080001DA(this->field_0x74, this->collisionLayer); + this->field_0x7a = sub_080001DA(this->field_0x74 + 1, this->collisionLayer); + SetTile(0x4022, this->field_0x74 - 1, this->collisionLayer); + SetTile(0x4022, this->field_0x74, this->collisionLayer); + SetTile(0x4022, this->field_0x74 + 1, this->collisionLayer); +} + +void sub_080A0870(Entity *this) +{ + SetTile(this->field_0x76, this->field_0x74 - 1, this->collisionLayer); + SetTile(this->field_0x78.HWORD, this->field_0x74, this->collisionLayer); + SetTile(this->field_0x7a, this->field_0x74 + 1, this->collisionLayer); +} \ No newline at end of file diff --git a/src/object49.c b/src/object49.c index 68527a76..d9551953 100644 --- a/src/object49.c +++ b/src/object49.c @@ -112,7 +112,7 @@ void sub_0808F244(Entity *this) this->height.WORD = 0; *(u32 *)&this->field_0x74 = 0x80 - this->parent->height.HALF.HI; *(u32 *)&this->field_0x78 = 0x100 - this->parent->height.HALF.HI; - *(u32 *)&this->field_0x70 = *((u8 *)&this->parent->field_0x7c + 3); + *(u32 *)&this->field_0x70.WORD = *((u8 *)&this->parent->field_0x7c + 3); sub_0808F2B0(this); if ((this->parent->field_0x6d & 2) != 0) { DeleteThisEntity(); @@ -121,7 +121,7 @@ void sub_0808F244(Entity *this) void sub_0808F2B0(Entity *this) { - sub_0805EC9C(this, *(u32 *)&this->field_0x74, *(u32 *)&this->field_0x78, this->field_0x70); + sub_0805EC9C(this, *(u32 *)&this->field_0x74, *(u32 *)&this->field_0x78, this->field_0x70.WORD); } void sub_0808F2C0(Entity *this) diff --git a/src/railtrack.c b/src/railtrack.c index 3d18f068..95c418f4 100644 --- a/src/railtrack.c +++ b/src/railtrack.c @@ -40,7 +40,7 @@ void sub_080851AC(Entity* this) { } } InitializeAnimation(this, this->animationState); - this->field_0x70 = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2); + this->field_0x70.WORD = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2); sub_08085394(this); } From 4f20b61b70c667d27e4330c5e7200d9f9649a8fd Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 17:14:46 -0700 Subject: [PATCH 18/25] smoke.c, teachers.c OK --- asm/smoke.s | 142 ----------------------------- asm/teachers.s | 240 ------------------------------------------------- linker.ld | 4 +- src/smoke.c | 60 +++++++++++++ src/teachers.c | 113 +++++++++++++++++++++++ 5 files changed, 175 insertions(+), 384 deletions(-) delete mode 100644 asm/smoke.s delete mode 100644 asm/teachers.s create mode 100644 src/smoke.c create mode 100644 src/teachers.c diff --git a/asm/smoke.s b/asm/smoke.s deleted file mode 100644 index 072966fe..00000000 --- a/asm/smoke.s +++ /dev/null @@ -1,142 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Smoke -Smoke: @ 0x0808A3F4 - push {lr} - ldr r2, _0808A408 @ =gUnk_08121060 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808A408: .4byte gUnk_08121060 - - thumb_func_start sub_0808A40C -sub_0808A40C: @ 0x0808A40C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0808A41E - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x28 - strb r0, [r4, #0xe] -_0808A41E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808A466 - bl Random - movs r1, #0x1f - ands r0, r1 - movs r1, #0x40 - subs r1, r1, r0 - strb r1, [r4, #0xe] - movs r0, #0x2d - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - beq _0808A466 - adds r0, r4, #0 - adds r1, r5, #0 - bl CopyPosition - bl Random - ldr r2, _0808A468 @ =gUnk_08121068 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r1, [r5, #0x2e] - adds r0, r0, r1 - strh r0, [r5, #0x2e] -_0808A466: - pop {r4, r5, pc} - .align 2, 0 -_0808A468: .4byte gUnk_08121068 - - thumb_func_start sub_0808A46C -sub_0808A46C: @ 0x0808A46C - push {lr} - ldr r2, _0808A480 @ =gUnk_08121070 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808A480: .4byte gUnk_08121070 - - thumb_func_start sub_0808A484 -sub_0808A484: @ 0x0808A484 - push {r4, 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] - movs r1, #0x40 - strh r1, [r0, #0x24] - movs r1, #6 - strb r1, [r0, #0x15] - ldrb r3, [r0, #0x19] - movs r2, #0x3f - adds r1, r2, #0 - ands r1, r3 - movs r4, #0x40 - orrs r1, r4 - strb r1, [r0, #0x19] - movs r1, #0x29 - adds r1, r1, r0 - mov ip, r1 - ldrb r3, [r1] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r3 - mov r3, ip - strb r1, [r3] - ldrb r1, [r0, #0x1b] - ands r2, r1 - orrs r2, r4 - strb r2, [r0, #0x1b] - movs r1, #0x28 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808A4D0 -sub_0808A4D0: @ 0x0808A4D0 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808A4F2 - adds r0, r4, #0 - bl DeleteEntity -_0808A4F2: - pop {r4, pc} diff --git a/asm/teachers.s b/asm/teachers.s deleted file mode 100644 index 72c9381d..00000000 --- a/asm/teachers.s +++ /dev/null @@ -1,240 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Teachers -Teachers: @ 0x0806C5A8 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r4, [r5, #0xc] - cmp r4, #1 - beq _0806C604 - cmp r4, #1 - bgt _0806C5BC - cmp r4, #0 - beq _0806C5C2 - b _0806C670 -_0806C5BC: - cmp r4, #2 - beq _0806C656 - b _0806C670 -_0806C5C2: - ldrb r1, [r5, #0xa] - lsls r1, r1, #4 - ldr r0, _0806C600 @ =gUnk_08113910 - adds r1, r1, r0 - adds r0, r5, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806C670 - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldrb r0, [r5, #0xe] - strb r0, [r5, #0x14] - adds r0, r5, #0 - adds r0, #0x69 - strb r4, [r0] - adds r0, r5, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r5, #0 - bl sub_0807DD50 - b _0806C670 - .align 2, 0 -_0806C600: .4byte gUnk_08113910 -_0806C604: - adds r2, r5, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806C64C - movs r0, #0 - strb r1, [r5, #0xc] - strb r0, [r2] - adds r4, r5, #0 - adds r4, #0x58 - ldrb r0, [r4] - adds r1, r5, #0 - adds r1, #0x69 - strb r0, [r1] - ldr r1, _0806C648 @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - ldrb r1, [r4] - movs r2, #4 - rsbs r2, r2, #0 - ands r1, r2 - adds r1, r1, r0 - adds r0, r5, #0 - bl InitializeAnimation - adds r0, r5, #0 - bl sub_0806F118 - b _0806C670 - .align 2, 0 -_0806C648: .4byte gLinkEntity -_0806C64C: - adds r0, r5, #0 - movs r1, #0 - bl sub_0807DD94 - b _0806C670 -_0806C656: - adds r0, r5, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806C670 - movs r0, #1 - strb r0, [r5, #0xc] - adds r0, r5, #0 - adds r0, #0x69 - ldrb r1, [r0] - adds r0, r5, #0 - bl InitializeAnimation -_0806C670: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0806C674 -sub_0806C674: @ 0x0806C674 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start Teachers_Head -Teachers_Head: @ 0x0806C68C - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - ldrb r6, [r4, #0x1e] - adds r0, r4, #0 - adds r0, #0x5b - ldrb r0, [r0] - movs r5, #0x3f - ands r5, r0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0806C6D2 - adds r2, #3 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - adds r2, r6, #0 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - b _0806C70A -_0806C6D2: - adds r2, #6 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - adds r2, r5, #3 - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #2 - adds r2, r6, #0 - 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 -_0806C70A: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0806C70C -sub_0806C70C: @ 0x0806C70C - push {lr} - adds r3, r0, #0 - ldr r0, _0806C730 @ =gUnk_02002A40 - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _0806C71C - movs r0, #0 -_0806C71C: - ldrb r1, [r3, #0xa] - lsls r1, r1, #6 - lsls r0, r0, #3 - ldr r2, _0806C734 @ =gUnk_08113930 - adds r0, r0, r2 - adds r1, r1, r0 - adds r0, r3, #0 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806C730: .4byte gUnk_02002A40 -_0806C734: .4byte gUnk_08113930 - - thumb_func_start Teachers_Fusion -Teachers_Fusion: @ 0x0806C738 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806C778 - ldrb r1, [r4, #0xa] - lsls r1, r1, #4 - ldr r0, _0806C774 @ =gUnk_08113910 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806C77E - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _0806C77E - .align 2, 0 -_0806C774: .4byte gUnk_08113910 -_0806C778: - adds r0, r4, #0 - bl GetNextFrame -_0806C77E: - pop {r4, pc} diff --git a/linker.ld b/linker.ld index b48e5643..a9eca411 100644 --- a/linker.ld +++ b/linker.ld @@ -608,7 +608,7 @@ SECTIONS { asm/anju.o(.text); asm/mama.o(.text); src/emma.o(.text); - asm/teachers.o(.text); + src/teachers.o(.text); src/windTribespeople.o(.text); asm/windTribespeople.o(.text); asm/gregal.o(.text); @@ -704,7 +704,7 @@ SECTIONS { asm/object2A.o(.text); asm/object2B.o(.text); asm/beanstalk.o(.text); - asm/smoke.o(.text); + src/smoke.o(.text); asm/pushableRock.o(.text); asm/hittableLever.o(.text); asm/object30.o(.text); diff --git a/src/smoke.c b/src/smoke.c new file mode 100644 index 00000000..b4c83115 --- /dev/null +++ b/src/smoke.c @@ -0,0 +1,60 @@ +#include "global.h" +#include "entity.h" + +extern u32 Random(void); +extern void CopyPosition(Entity*, Entity*); +extern void sub_0806F69C(Entity*); +extern void DeleteEntity(Entity*); + +extern void (*const gUnk_08121060[])(Entity*); +extern void (*const gUnk_08121070[])(Entity*); + +extern s8 gUnk_08121068[]; + +void Smoke(Entity* this) { + gUnk_08121060[this->entityType.form](this); +} + +void sub_0808A40C(Entity *this) +{ + Entity *ent; + + if (this->action == 0) { + this->action = 1; + this->actionDelay = 0x28; + } + if (--this->actionDelay == 0) { + this->actionDelay = 0x40 - (Random() & 0x1f); + ent = CreateObject(0x2d, 1, 0); + if (ent != NULL) { + CopyPosition(this,ent); + ent->x.HALF.HI += gUnk_08121068[(Random() & 7)]; + } + } +} + +void sub_0808A46C(Entity *this) +{ + gUnk_08121070[this->action](this); +} + +void sub_0808A484(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->nonPlanarMovement = 0x40; + this->direction = 6; + this->spriteRendering.b3 = 1; + this->spritePriority.b0 = 0; + this->spriteOrientation.flipY = 1; + InitializeAnimation(this, 0x28); +} + +void sub_0808A4D0(Entity *this) +{ + GetNextFrame(this); + sub_0806F69C(this); + if (this->frames.b.f3) { + DeleteEntity(this); + } +} \ No newline at end of file diff --git a/src/teachers.c b/src/teachers.c new file mode 100644 index 00000000..a82bdadd --- /dev/null +++ b/src/teachers.c @@ -0,0 +1,113 @@ +#include "global.h" +#include "entity.h" +#include "link.h" + +typedef struct { + u8 filler[8]; + u8 unk; +} struct_02002A40; + +extern SpriteLoadData gUnk_08113910[]; +extern void sub_0805E3A0(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806F118(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern u32 sub_0801E99C(); +extern void sub_08078784(Entity*, u32); +extern u32 UpdateFuseInteraction(Entity*); +extern void sub_0807000C(Entity*); +extern void ShowNPCDialogue(Entity*, u16*); + +extern struct_02002A40 gUnk_02002A40; +extern u16 gUnk_08113930[]; + +void Teachers(Entity* this) { + switch (this->action) { + case 0: + if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) { + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->animationState = this->actionDelay; + this->field_0x69 = 0; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + } + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + this->field_0x69 = this->animIndex; + InitializeAnimation(this, + (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + InitializeAnimation(this, this->field_0x69); + } + } +} + +void sub_0806C674(Entity *this) +{ + this->field_0x68 = sub_0801E99C(); + sub_08078784(this, this->field_0x68); +} + +void Teachers_Head(Entity *this) +{ + u8 bVar1; + u8 bVar2; + u32 uVar3; + + + uVar3 = this->frames.all & -0x81; + bVar1 = this->frameIndex; + bVar2 = this->frameSpriteSettings & 0x3f; + if ((this->entityType).form == 0) { + SetExtraSpriteFrame(this,0, (uVar3 + 3)); + SetExtraSpriteFrame(this,1, bVar1); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); + } + else { + SetExtraSpriteFrame(this, 0, (uVar3 + 6)); + SetExtraSpriteFrame(this, 1, ((bVar2) + 3)); + SetExtraSpriteFrame(this, 2, bVar1); + SetSpriteSubEntryOffsetData1(this, 2, 1); + SetSpriteSubEntryOffsetData2(this, 2, 0); + sub_0807000C(this); + } +} + +void sub_0806C70C(Entity *this) +{ + int offset; + + offset = gUnk_02002A40.unk - 2; + if (offset < 0) { + offset = 0; + } + ShowNPCDialogue(this, gUnk_08113930 + this->entityType.form * 0x20 + offset * 4); +} + +void Teachers_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) { + this->action++; + this->spriteSettings.b.draw = TRUE; + InitializeAnimation(this, 2); + } + } + else { + GetNextFrame(this); + } +} \ No newline at end of file From d429f7f9cbe2a5c1d90139d9459fcd899b390fbc Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 22:27:28 -0700 Subject: [PATCH 19/25] mutoh.c OK --- asm/mutoh.s | 202 ----------------------------------------- include/npc.h | 9 ++ linker.ld | 2 +- src/mainLoop.c | 40 ++++---- src/mutoh.c | 99 ++++++++++++++++++++ src/windTribespeople.c | 11 +-- 6 files changed, 130 insertions(+), 233 deletions(-) delete mode 100644 asm/mutoh.s create mode 100644 src/mutoh.c diff --git a/asm/mutoh.s b/asm/mutoh.s deleted file mode 100644 index 75fe0c2c..00000000 --- a/asm/mutoh.s +++ /dev/null @@ -1,202 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Mutoh -Mutoh: @ 0x08066FD8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x84 - ldr r0, [r0] - cmp r0, #0 - bne _08066FE8 - bl DeleteThisEntity -_08066FE8: - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08067030 - cmp r0, #1 - bgt _08066FF8 - cmp r0, #0 - beq _08066FFE - b _0806707C -_08066FF8: - cmp r0, #2 - beq _0806706E - b _0806707C -_08066FFE: - ldr r1, _0806702C @ =gUnk_08110C00 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806707C - 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] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD50 - b _0806707C - .align 2, 0 -_0806702C: .4byte gUnk_08110C00 -_08067030: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _08067064 - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - ldr r1, _08067060 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 - b _0806707C - .align 2, 0 -_08067060: .4byte gLinkEntity -_08067064: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - b _0806707C -_0806706E: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806707C - movs r0, #1 - strb r0, [r4, #0xc] -_0806707C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start Mutoh_Head -Mutoh_Head: @ 0x08067080 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080670B4 -sub_080670B4: @ 0x080670B4 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - movs r0, #0x11 - bl GetInventoryValue - cmp r0, #0 - bne _080670D0 - movs r0, #0x15 - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f -_080670D0: - ldr r0, _080670E0 @ =gUnk_08110C0C - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_080670E0: .4byte gUnk_08110C0C - - thumb_func_start sub_080670E4 -sub_080670E4: @ 0x080670E4 - push {lr} - ldr r1, _080670F8 @ =gUnk_02002A40 - ldrb r1, [r1, #8] - lsls r1, r1, #3 - ldr r2, _080670FC @ =gUnk_08110C10 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_080670F8: .4byte gUnk_02002A40 -_080670FC: .4byte gUnk_08110C10 - - thumb_func_start sub_08067100 -sub_08067100: @ 0x08067100 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start Mutoh_Fusion -Mutoh_Fusion: @ 0x08067118 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08067150 - ldr r1, _0806714C @ =gUnk_08110C00 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08067156 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _08067156 - .align 2, 0 -_0806714C: .4byte gUnk_08110C00 -_08067150: - adds r0, r4, #0 - bl GetNextFrame -_08067156: - pop {r4, pc} diff --git a/include/npc.h b/include/npc.h index b1a7c2b5..fff3334a 100644 --- a/include/npc.h +++ b/include/npc.h @@ -171,5 +171,14 @@ extern void NPC58_Head(Entity*); extern u32 UpdateFuseInteraction(Entity*); +extern void ShowNPCDialogue(Entity*, u32*); + +typedef struct { + u8 filler[8]; + u8 unk; +} struct_02002A40; + +extern struct_02002A40 gUnk_02002A40; + #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index a9eca411..27d898bc 100644 --- a/linker.ld +++ b/linker.ld @@ -572,7 +572,7 @@ SECTIONS { asm/npc26.o(.text); asm/vaati.o(.text); src/zelda.o(.text); - asm/mutoh.o(.text); + src/mutoh.o(.text); src/carpenter.o(.text); asm/carpenter.o(.text); asm/castorWildsStatue.o(.text); diff --git a/src/mainLoop.c b/src/mainLoop.c index a9bf0d32..dcc0ebbf 100644 --- a/src/mainLoop.c +++ b/src/mainLoop.c @@ -1,7 +1,7 @@ #include "global.h" #include "main.h" -#ifdef NON_MATCHING +#if 0 typedef struct { u8 interruptFlag; @@ -52,6 +52,7 @@ void MainLoop(void) { bool32 codeInputted; u8 cVar1; u32 uVar2; + MainStruct *s; sub_08055F70(); sub_080A3204(); @@ -66,45 +67,42 @@ void MainLoop(void) { sub_08056418(); sub_080ADD30(); gRand = 0x1234567; - sub_0801D630(&gUnk_03001000, 16); + s = &gUnk_03001000; + sub_0801D630(s, 16); sub_08056010(0); - do { + while (1) { ReadKeyInput(); codeInputted = sub_08055FF4(); if (codeInputted) { sub_080560A8(); } - if ((gUnk_03001000.field_0x1 == 0) || (gUnk_03001000.field_0x1 != 1)) { - if (gUnk_03001000.field_0x8 != '\0') { - while (codeInputted) { + if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) { + sub_08056260(); + } else if (s->field_0x8 != 0) { + while (--s->field_0x8) { VBlankInterruptWait(); - cVar1 = gUnk_03001000.field_0x8 + -1; - codeInputted = gUnk_03001000.field_0x8 != '\x01'; - gUnk_03001000.field_0x8 = cVar1; } } - if (gUnk_03001000.countdown != '\0') { - gUnk_03001000.countdown = gUnk_03001000.countdown + -1; - uVar2 = gUnk_03001000.field_0xa; - while (0 < uVar2) { + if (s->countdown != 0) { + s->countdown--; + uVar2 = s->field_0xa; + while (uVar2 > 0) { VBlankIntrWait(); - uVar2 = uVar2 - 1; + uVar2--; } } - gUnk_03001000.ticks = gUnk_03001000.ticks + 1; - gUnk_08100CBC[gUnk_03001000.loadType](); + s->ticks++; + gUnk_08100CBC[s->loadType](); sub_08056458(); sub_08050154(); sub_080A3480(); - } else { - sub_08056260(); } sub_08016E78(); - } while (TRUE); } -#else + +#endif + NAKED void MainLoop(void) { asm(".include \"asm/non_matching/mainLoop.inc\""); } -#endif diff --git a/src/mutoh.c b/src/mutoh.c new file mode 100644 index 00000000..b50ff552 --- /dev/null +++ b/src/mutoh.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "entity.h" +#include "link.h" +#include "flags.h" +#include "textbox.h" +#include "npc.h" + +extern void sub_0805E3A0(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806F118(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern u32 UpdateFuseInteraction(Entity*); +extern void sub_0807000C(Entity*); +extern u32 sub_0801E99C(Entity*); +extern void sub_08078784(Entity*, u32); + +extern SpriteLoadData gUnk_08110C00; +extern u16 gUnk_08110C0C[]; +extern u32 gUnk_08110C10[]; + +void Mutoh(Entity* this) +{ + if (*(u32*)&this->cutsceneBeh == 0) { + DeleteThisEntity(); + } + + switch (this->action) { + case 0: + if (LoadExtraSpriteData(this, &gUnk_08110C00)) { + this->action = 1; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + } + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + 4); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + } +} + +void Mutoh_Head(Entity *this) +{ + SetExtraSpriteFrame(this, 0, (this->frames.all & -0x81)); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this,1,0); + sub_0807000C(this); +} + +void sub_080670B4(Entity *this) +{ + u32 uVar1; + u32 uVar2; + + uVar2 = 0; + if (GetInventoryValue(0x11) == 0) { + uVar1 = CheckGlobalFlag(0x15); + uVar2 = (-uVar1 | uVar1) >> 0x1f; + } + TextboxNoOverlap(gUnk_08110C0C[uVar2],this); +} + +void sub_080670E4(Entity *this) +{ + ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk * 2]); +} + +void sub_08067100(Entity *this) +{ + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); +} + +void Mutoh_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110C00) != 0) { + this->action++; + this->spriteSettings.b.draw = TRUE; + InitializeAnimation(this, 2); + } + } + else { + GetNextFrame(this); + } +} \ No newline at end of file diff --git a/src/windTribespeople.c b/src/windTribespeople.c index 965a73ea..d01f22d4 100644 --- a/src/windTribespeople.c +++ b/src/windTribespeople.c @@ -4,11 +4,6 @@ #include "textbox.h" #include "flags.h" -typedef struct { - u8 filler[8]; - u8 unk; -} struct_02002A40; - extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void sub_0807DD50(Entity*); extern void sub_0806C7D4(Entity*); @@ -21,15 +16,13 @@ extern void SetExtraSpriteFrame(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); extern void sub_0807000C(Entity*); -extern void ShowNPCDialogue(Entity*, u16*); extern void (*const gUnk_08113A7C[])(Entity*); extern void (*const gUnk_08113A8C[])(Entity*, Entity*); extern SpriteLoadData gUnk_08113A1C[]; extern u32 gUnk_08014A80; -extern u16 gUnk_08113ABC[]; -extern struct_02002A40 gUnk_02002A40; +extern u32 gUnk_08113ABC[]; extern u16 gUnk_08113B0C[]; void WindTribespeople(Entity* this) { @@ -129,7 +122,7 @@ void sub_0806C90C(Entity *param_1,Entity *param_2) void sub_0806C928(Entity *this) { - ShowNPCDialogue(this, gUnk_08113ABC + (gUnk_02002A40.unk * 4)); + ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk * 2]); } void sub_0806C944(Entity *this) From 6aba97697bcf1c970de2d53bc3485f711b0a17db Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 22:58:48 -0700 Subject: [PATCH 20/25] gentari.c OK --- asm/gentari.s | 108 ----------------------------------------------- include/entity.h | 12 +++--- linker.ld | 1 + src/dampe.c | 6 +-- src/gentari.c | 53 +++++++++++++++++++++++ 5 files changed, 63 insertions(+), 117 deletions(-) create mode 100644 src/gentari.c diff --git a/asm/gentari.s b/asm/gentari.s index c18bbf27..4cfbf586 100644 --- a/asm/gentari.s +++ b/asm/gentari.s @@ -6,114 +6,6 @@ .text - - thumb_func_start Gentari -Gentari: @ 0x0805FD24 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0805FD72 - cmp r0, #1 - bgt _0805FD38 - cmp r0, #0 - beq _0805FD3E - b _0805FDBC -_0805FD38: - cmp r0, #2 - beq _0805FDAE - b _0805FDBC -_0805FD3E: - 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] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - 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 - bl sub_0807DD50 - b _0805FDBC -_0805FD72: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0805FDA4 - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - ldr r1, _0805FDA0 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 - b _0805FDBC - .align 2, 0 -_0805FDA0: .4byte gLinkEntity -_0805FDA4: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - b _0805FDBC -_0805FDAE: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0805FDBC - movs r0, #1 - strb r0, [r4, #0xc] -_0805FDBC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start Gentari_Fusion -Gentari_Fusion: @ 0x0805FDC0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805FDEE - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - movs r1, #0xa - bl InitAnimationForceUpdate - b _0805FDF4 -_0805FDEE: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_0805FDF4: - pop {r4, pc} - .align 2, 0 - thumb_func_start Festari Festari: @ 0x0805FDF8 push {lr} diff --git a/include/entity.h b/include/entity.h index 661e8343..b79d1d5a 100644 --- a/include/entity.h +++ b/include/entity.h @@ -160,6 +160,12 @@ typedef struct Entity { ((((entity->x.HALF.HI - xOff - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ (((entity->y.HALF.HI - yOff - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) +extern Entity* CreateEnemy(u32 subtype, u32 form); +extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); +extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); +extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter); +extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter); + extern void InitializeAnimation(Entity*, u32); extern void InitAnimationForceUpdate(Entity*, u32); extern void UpdateAnimationSingleFrame(Entity*); @@ -170,11 +176,7 @@ extern void SetExtraSpriteFrame(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); -extern Entity* CreateEnemy(u32 subtype, u32 form); -extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); -extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter); -extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter); -extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter); +extern u32 GetFacingDirection(Entity*, Entity*); extern void DeleteThisEntity(); #endif diff --git a/linker.ld b/linker.ld index 27d898bc..8024ecfc 100644 --- a/linker.ld +++ b/linker.ld @@ -533,6 +533,7 @@ SECTIONS { asm/getEmptyEntity.o(.text); asm/code_0805E744.o(.text); /* npcs */ + src/gentari.o(.text); asm/gentari.o(.text); asm/festari.o(.text); asm/forestMinish.o(.text); diff --git a/src/dampe.c b/src/dampe.c index 822f6c2c..b7947c32 100644 --- a/src/dampe.c +++ b/src/dampe.c @@ -9,8 +9,7 @@ extern void sub_0805E3A0(Entity*, u32); extern void sub_0807DD50(Entity*); -extern void GetFacingDirection(Entity*, Entity*); -extern u32 sub_0806F5A4(void); +extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); extern void sub_0807DD94(Entity*, u32); extern u32 sub_0801E99C(void); @@ -37,8 +36,7 @@ void Dampe(Entity* this) { if (this->interactType == 2) { this->action = 2; this->interactType = 0; - GetFacingDirection(this, &gLinkEntity); - InitAnimationForceUpdate(this, sub_0806F5A4() + 4); + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + 4); sub_0806F118(this); } else { sub_0807DD94(this, 0); diff --git a/src/gentari.c b/src/gentari.c new file mode 100644 index 00000000..f41a7438 --- /dev/null +++ b/src/gentari.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "link.h" + +extern void sub_0805E3A0(Entity*, u32); +extern u32 sub_0801E99C(Entity*); +extern void sub_08078784(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806F118(Entity*); +extern void sub_0807DD94(Entity*, u32); + +void Gentari(Entity *this) +{ + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); + sub_0807DD50(this); + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + } +} + +void Gentari_Fusion(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + InitAnimationForceUpdate(this, 10); + } + else { + UpdateAnimationSingleFrame(this); + } +} \ No newline at end of file From 73b72d6696c3d32a4deaa09ad923f7729c6ca610 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 13 Jul 2020 01:31:58 -0700 Subject: [PATCH 21/25] forestMinish.c 1 nonmatching --- asm/festari.s | 144 ----- asm/forestMinish.s | 561 ------------------ asm/gentari.s | 20 - asm/non_matching/festari/sub_0805FE48.inc | 110 ++++ .../forestMinish/sub_08060158.inc | 72 +++ include/link.h | 2 + include/npc.h | 11 +- linker.ld | 4 +- src/festari.c | 91 +++ src/forestMinish.c | 304 ++++++++++ 10 files changed, 590 insertions(+), 729 deletions(-) delete mode 100644 asm/forestMinish.s delete mode 100644 asm/gentari.s create mode 100644 asm/non_matching/festari/sub_0805FE48.inc create mode 100644 asm/non_matching/forestMinish/sub_08060158.inc create mode 100644 src/festari.c create mode 100644 src/forestMinish.c diff --git a/asm/festari.s b/asm/festari.s index c4e935f9..b3bf6c9a 100644 --- a/asm/festari.s +++ b/asm/festari.s @@ -6,150 +6,6 @@ .text - thumb_func_start sub_0805FE10 -sub_0805FE10: @ 0x0805FE10 - push {r4, lr} - adds r4, r0, #0 - 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] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - 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 - bl sub_0807DD50 - pop {r4, pc} - - thumb_func_start sub_0805FE48 -sub_0805FE48: @ 0x0805FE48 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0805FE80 - movs r0, #0 - strb r1, [r5, #0xc] - strb r0, [r2] - ldr r1, _0805FE7C @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r5, #0 - bl InitAnimationForceUpdate - adds r0, r5, #0 - bl sub_0806F118 - b _0805FF14 - .align 2, 0 -_0805FE7C: .4byte gLinkEntity -_0805FE80: - adds r4, r5, #0 - adds r4, #0x84 - ldr r1, [r4] - adds r0, r5, #0 - bl ExecuteScriptCommandSet - ldr r1, [r4] - adds r0, r5, #0 - bl sub_0805FF2C - adds r0, r5, #0 - adds r0, #0x80 - ldrh r3, [r0] - adds r7, r0, #0 - adds r6, r5, #0 - adds r6, #0x82 - cmp r3, #7 - bhi _0805FEC6 - ldrh r1, [r6] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805FEBA - movs r1, #0xfc - ands r1, r3 - ldrb r0, [r5, #0xf] - lsrs r0, r0, #1 - adds r3, r1, r0 - b _0805FEC6 -_0805FEBA: - movs r0, #0xfc - ands r0, r3 - ldrb r2, [r5, #0x14] - lsrs r1, r2, #1 - adds r3, r0, r1 - strb r2, [r5, #0xf] -_0805FEC6: - adds r4, r5, #0 - adds r4, #0x58 - ldrb r0, [r4] - cmp r3, r0 - beq _0805FED8 - adds r0, r5, #0 - adds r1, r3, #0 - bl InitAnimationForceUpdate -_0805FED8: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0805FF02 - ldrb r0, [r4] - cmp r0, #8 - beq _0805FEFE - cmp r0, #8 - blt _0805FF02 - cmp r0, #0xc - bgt _0805FF02 - cmp r0, #0xa - blt _0805FF02 -_0805FEFE: - movs r0, #0 - strh r0, [r7] -_0805FF02: - ldrh r1, [r6] - mvns r0, r1 - adds r0, #1 - ands r1, r0 - cmp r1, #2 - bne _0805FF14 - adds r0, r5, #0 - bl sub_0806ED78 -_0805FF14: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0805FF18 -sub_0805FF18: @ 0x0805FF18 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0805FF28 - movs r0, #1 - strb r0, [r4, #0xc] -_0805FF28: - pop {r4, pc} - .align 2, 0 - thumb_func_start sub_0805FF2C sub_0805FF2C: @ 0x0805FF2C push {r4, r5, r6, lr} diff --git a/asm/forestMinish.s b/asm/forestMinish.s deleted file mode 100644 index 5946d0fc..00000000 --- a/asm/forestMinish.s +++ /dev/null @@ -1,561 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ForestMinish -ForestMinish: @ 0x0805FFD8 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r5, [r4, #0xc] - cmp r5, #1 - beq _08060044 - cmp r5, #1 - bgt _0805FFEC - cmp r5, #0 - beq _0805FFF2 - b _0806008C -_0805FFEC: - cmp r5, #2 - beq _0806007E - b _0806008C -_0805FFF2: - ldr r1, _0806003C @ =gUnk_0810A348 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806008C - 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] - lsls r0, r0, #1 - strb r0, [r4, #0x14] - adds r1, r4, #0 - adds r1, #0x69 - strb r0, [r1] - strb r5, [r4, #0xe] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - ldr r1, _08060040 @ =gUnk_08109D18 - ldrb r0, [r4, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl StartCutscene - adds r0, r4, #0 - bl sub_0807DD50 - b _0806008C - .align 2, 0 -_0806003C: .4byte gUnk_0810A348 -_08060040: .4byte gUnk_08109D18 -_08060044: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806005E - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - adds r0, r4, #0 - bl sub_0806F118 - b _0806008C -_0806005E: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - adds r0, r4, #0 - adds r0, #0x59 - ldrb r0, [r0] - cmp r0, #0xf0 - beq _0806008C - adds r0, r4, #0 - bl sub_080600F0 - b _0806008C -_0806007E: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806008C - movs r0, #1 - strb r0, [r4, #0xc] -_0806008C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08060090 -sub_08060090: @ 0x08060090 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start ForestMinish_Head -ForestMinish_Head: @ 0x080600A8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r2, [r0] - cmp r2, #0xff - beq _080600BA - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 -_080600BA: - adds r0, r4, #0 - adds r0, #0x5b - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _080600CA - movs r2, #0xff -_080600CA: - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080600F0 -sub_080600F0: @ 0x080600F0 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x80 - ldrh r3, [r0] - cmp r3, #7 - bhi _08060120 - adds r0, #2 - ldrh r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08060114 - movs r1, #0xfc - ands r1, r3 - ldrb r0, [r4, #0xf] - lsrs r0, r0, #1 - adds r3, r1, r0 - b _08060120 -_08060114: - movs r0, #0xfc - ands r0, r3 - ldrb r2, [r4, #0x14] - lsrs r1, r2, #1 - adds r3, r0, r1 - strb r2, [r4, #0xf] -_08060120: - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r3, r0 - beq _08060132 - adds r0, r4, #0 - adds r1, r3, #0 - bl InitAnimationForceUpdate -_08060132: - adds r0, r4, #0 - adds r0, #0x82 - ldrh r1, [r0] - movs r0, #4 - ands r0, r1 - movs r1, #1 - cmp r0, #0 - beq _08060144 - movs r1, #2 -_08060144: - adds r0, r4, #0 - bl sub_080042BA - pop {r4, pc} - - thumb_func_start sub_0806014C -sub_0806014C: @ 0x0806014C - push {lr} - movs r1, #0 - strb r1, [r0, #0xe] - bl sub_08060158 - pop {pc} - - thumb_func_start sub_08060158 -sub_08060158: @ 0x08060158 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - adds r7, r0, #0 - cmp r7, #0 - beq _0806016A - subs r0, #1 - strb r0, [r4, #0xe] - b _080601CC -_0806016A: - movs r0, #2 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0x20 - movs r2, #0x20 - bl sub_0806EDD8 - adds r3, r0, #0 - cmp r3, #0 - bge _08060188 - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - strb r0, [r4, #0x14] - lsls r3, r0, #2 -_08060188: - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #5 - asrs r1, r3, #1 - lsls r1, r1, #1 - ldr r2, _080601D0 @ =gUnk_08109C98 - adds r1, r1, r2 - adds r0, r0, r1 - ldrb r6, [r0] - ldrb r5, [r0, #1] - movs r0, #0x80 - ands r0, r5 - cmp r0, #0 - beq _080601AC - adds r0, r3, #0 - bl sub_0806F5B0 - strb r0, [r4, #0x14] -_080601AC: - movs r0, #0x7f - ands r5, r0 - adds r0, r4, #0 - adds r0, #0x5a - strb r6, [r0] - strb r5, [r4, #0x1e] - adds r1, r4, #0 - adds r1, #0x5b - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x58 - strb r7, [r0] - subs r1, #2 - movs r0, #0xf0 - strb r0, [r1] -_080601CC: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080601D0: .4byte gUnk_08109C98 - - thumb_func_start sub_080601D4 -sub_080601D4: @ 0x080601D4 - push {r4, lr} - adds r4, r0, #0 - movs r0, #4 - bl CheckGlobalFlag - cmp r0, #0 - bne _080601E6 - movs r1, #2 - b _080601F2 -_080601E6: - movs r0, #0x17 - bl CheckKinstoneFused - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f -_080601F2: - ldr r0, _08060204 @ =gUnk_0810A354 - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r4, #0 - bl TextboxNoOverlap - pop {r4, pc} - .align 2, 0 -_08060204: .4byte gUnk_0810A354 - - thumb_func_start sub_08060208 -sub_08060208: @ 0x08060208 - push {lr} - ldrb r1, [r0, #0xb] - lsls r1, r1, #5 - ldr r2, _08060218 @ =gUnk_08109DC8 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_08060218: .4byte gUnk_08109DC8 - - thumb_func_start sub_0806021C -sub_0806021C: @ 0x0806021C - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x5b - bl GetInventoryValue - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f - movs r0, #0x40 - bl GetInventoryValue - cmp r0, #0 - beq _08060238 - movs r4, #2 -_08060238: - movs r0, #0x13 - bl GetInventoryValue - cmp r0, #0 - beq _08060244 - movs r4, #3 -_08060244: - ldrb r1, [r5, #0xb] - lsls r1, r1, #5 - lsls r0, r4, #3 - ldr r2, _08060258 @ =gUnk_08109DC8 - adds r0, r0, r2 - adds r1, r1, r0 - adds r0, r5, #0 - bl ShowNPCDialogue - pop {r4, r5, pc} - .align 2, 0 -_08060258: .4byte gUnk_08109DC8 - - thumb_func_start sub_0806025C -sub_0806025C: @ 0x0806025C - push {lr} - ldrb r1, [r0, #0xb] - lsls r1, r1, #5 - ldr r2, _0806026C @ =gUnk_08109DC8 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806026C: .4byte gUnk_08109DC8 - - thumb_func_start sub_08060270 -sub_08060270: @ 0x08060270 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _08060294 - movs r4, #1 - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - bne _080602A8 - movs r4, #0 - movs r0, #0x29 - bl SetGlobalFlag - b _080602A8 -_08060294: - movs r4, #3 - movs r0, #0x76 - bl CheckLocalFlag - cmp r0, #0 - bne _080602A8 - movs r4, #2 - movs r0, #0x76 - bl SetLocalFlag -_080602A8: - ldr r0, _080602B8 @ =gUnk_0810A35A - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_080602B8: .4byte gUnk_0810A35A - - thumb_func_start sub_080602BC -sub_080602BC: @ 0x080602BC - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x48 - bl GetInventoryValue - cmp r0, #0 - beq _080602D6 - bl Random - movs r1, #1 - ands r1, r0 - adds r2, r1, #2 - b _080602F0 -_080602D6: - ldr r0, _08060300 @ =gUnk_02002A40 - adds r2, r0, #0 - adds r2, #0xac - ldr r1, _08060304 @ =gBombBagSizes - adds r0, #0xae - ldrb r0, [r0] - adds r0, r0, r1 - ldrb r1, [r2] - movs r2, #0 - ldrb r0, [r0] - cmp r1, r0 - bhs _080602F0 - movs r2, #1 -_080602F0: - ldr r0, _08060308 @ =gUnk_0810A362 - lsls r1, r2, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r4, #0 - bl TextboxNoOverlap - pop {r4, pc} - .align 2, 0 -_08060300: .4byte gUnk_02002A40 -_08060304: .4byte gBombBagSizes -_08060308: .4byte gUnk_0810A362 - - thumb_func_start sub_0806030C -sub_0806030C: @ 0x0806030C - push {lr} - ldr r0, [r1, #4] - bl ModBombs - pop {pc} - .align 2, 0 - - thumb_func_start sub_08060318 -sub_08060318: @ 0x08060318 - push {r4, r5, lr} - movs r5, #2 -_0806031C: - movs r0, #8 - movs r1, #2 - movs r2, #2 - bl sub_0805EB00 - adds r4, r0, #0 - cmp r4, #0 - beq _08060336 - bl sub_080A29BC - adds r0, r4, #0 - bl DeleteEntity -_08060336: - subs r5, #1 - cmp r5, #0 - bge _0806031C - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08060340 -sub_08060340: @ 0x08060340 - ldr r0, _08060350 @ =gUnk_02002A40 - movs r2, #0x92 - lsls r2, r2, #3 - adds r1, r0, r2 - ldr r0, [r0, #0x50] - str r0, [r1] - bx lr - .align 2, 0 -_08060350: .4byte gUnk_02002A40 - - thumb_func_start sub_08060354 -sub_08060354: @ 0x08060354 - push {r4, lr} - ldr r0, _08060378 @ =gUnk_02002A40 - movs r2, #0x92 - lsls r2, r2, #3 - adds r1, r0, r2 - ldr r2, [r0, #0x50] - ldr r0, [r1] - subs r4, r2, r0 - movs r0, #0x3b - bl CheckGlobalFlag - cmp r0, #0 - bne _08060380 - cmp r4, #4 - ble _080603B0 - ldr r0, _0806037C @ =0x00008444 - b _080603B2 - .align 2, 0 -_08060378: .4byte gUnk_02002A40 -_0806037C: .4byte 0x00008444 -_08060380: - movs r0, #0x3c - bl CheckGlobalFlag - cmp r0, #0 - bne _08060398 - cmp r4, #9 - ble _080603B0 - ldr r0, _08060394 @ =0x00008444 - b _080603B2 - .align 2, 0 -_08060394: .4byte 0x00008444 -_08060398: - movs r0, #0x3d - bl CheckGlobalFlag - cmp r0, #0 - bne _080603B0 - cmp r4, #0xe - ble _080603B0 - ldr r0, _080603AC @ =0x00008444 - b _080603B2 - .align 2, 0 -_080603AC: .4byte 0x00008444 -_080603B0: - movs r0, #0 -_080603B2: - pop {r4, pc} - - thumb_func_start ForestMinish_Fusion -ForestMinish_Fusion: @ 0x080603B4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080603F4 - ldr r1, _080603F0 @ =gUnk_0810A348 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _080603FA - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - movs r1, #6 - bl InitializeAnimation - b _080603FA - .align 2, 0 -_080603F0: .4byte gUnk_0810A348 -_080603F4: - adds r0, r4, #0 - bl GetNextFrame -_080603FA: - pop {r4, pc} diff --git a/asm/gentari.s b/asm/gentari.s deleted file mode 100644 index 4cfbf586..00000000 --- a/asm/gentari.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Festari -Festari: @ 0x0805FDF8 - push {lr} - ldr r2, _0805FE0C @ =gUnk_08109BBC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805FE0C: .4byte gUnk_08109BBC diff --git a/asm/non_matching/festari/sub_0805FE48.inc b/asm/non_matching/festari/sub_0805FE48.inc new file mode 100644 index 00000000..0f7ff560 --- /dev/null +++ b/asm/non_matching/festari/sub_0805FE48.inc @@ -0,0 +1,110 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + adds r2, r5, #0 + adds r2, #0x39 + movs r1, #0 + ldrsb r1, [r2, r1] + cmp r1, #2 + bne _0805FE80 + movs r0, #0 + strb r1, [r5, #0xc] + strb r0, [r2] + ldr r1, _0805FE7C @ =gLinkEntity + adds r0, r5, #0 + bl GetFacingDirection + bl sub_0806F5A4 + adds r1, r0, #0 + adds r0, r5, #0 + bl InitAnimationForceUpdate + adds r0, r5, #0 + bl sub_0806F118 + b _0805FF14 + .align 2, 0 +_0805FE7C: .4byte gLinkEntity +_0805FE80: + adds r4, r5, #0 + adds r4, #0x84 + ldr r1, [r4] + adds r0, r5, #0 + bl ExecuteScriptCommandSet + ldr r1, [r4] + adds r0, r5, #0 + bl sub_0805FF2C + adds r0, r5, #0 + adds r0, #0x80 + ldrh r3, [r0] + adds r7, r0, #0 + adds r6, r5, #0 + adds r6, #0x82 + cmp r3, #7 + bhi _0805FEC6 + ldrh r1, [r6] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0805FEBA + movs r1, #0xfc + ands r1, r3 + ldrb r0, [r5, #0xf] + lsrs r0, r0, #1 + adds r3, r1, r0 + b _0805FEC6 +_0805FEBA: + movs r0, #0xfc + ands r0, r3 + ldrb r2, [r5, #0x14] + lsrs r1, r2, #1 + adds r3, r0, r1 + strb r2, [r5, #0xf] +_0805FEC6: + adds r4, r5, #0 + adds r4, #0x58 + ldrb r0, [r4] + cmp r3, r0 + beq _0805FED8 + adds r0, r5, #0 + adds r1, r3, #0 + bl InitAnimationForceUpdate +_0805FED8: + adds r0, r5, #0 + bl UpdateAnimationSingleFrame + adds r0, r5, #0 + adds r0, #0x5a + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0805FF02 + ldrb r0, [r4] + cmp r0, #8 + beq _0805FEFE + cmp r0, #8 + blt _0805FF02 + cmp r0, #0xc + bgt _0805FF02 + cmp r0, #0xa + blt _0805FF02 +_0805FEFE: + movs r0, #0 + strh r0, [r7] +_0805FF02: + ldrh r1, [r6] + mvns r0, r1 + adds r0, #1 + ands r1, r0 + cmp r1, #2 + bne _0805FF14 + adds r0, r5, #0 + bl sub_0806ED78 +_0805FF14: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/forestMinish/sub_08060158.inc b/asm/non_matching/forestMinish/sub_08060158.inc new file mode 100644 index 00000000..92ec5d85 --- /dev/null +++ b/asm/non_matching/forestMinish/sub_08060158.inc @@ -0,0 +1,72 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xe] + adds r7, r0, #0 + cmp r7, #0 + beq _0806016A + subs r0, #1 + strb r0, [r4, #0xe] + b _080601CC +_0806016A: + movs r0, #2 + strb r0, [r4, #0xe] + adds r0, r4, #0 + movs r1, #0x20 + movs r2, #0x20 + bl sub_0806EDD8 + adds r3, r0, #0 + cmp r3, #0 + bge _08060188 + adds r0, r4, #0 + adds r0, #0x69 + ldrb r0, [r0] + strb r0, [r4, #0x14] + lsls r3, r0, #2 +_08060188: + ldrb r0, [r4, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #5 + asrs r1, r3, #1 + lsls r1, r1, #1 + ldr r2, _080601D0 @ =gUnk_08109C98 + adds r1, r1, r2 + adds r0, r0, r1 + ldrb r6, [r0] + ldrb r5, [r0, #1] + movs r0, #0x80 + ands r0, r5 + cmp r0, #0 + beq _080601AC + adds r0, r3, #0 + bl sub_0806F5B0 + strb r0, [r4, #0x14] +_080601AC: + movs r0, #0x7f + ands r5, r0 + adds r0, r4, #0 + adds r0, #0x5a + strb r6, [r0] + strb r5, [r4, #0x1e] + adds r1, r4, #0 + adds r1, #0x5b + movs r0, #1 + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x58 + strb r7, [r0] + subs r1, #2 + movs r0, #0xf0 + strb r0, [r1] +_080601CC: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080601D0: .4byte gUnk_08109C98 + .syntax divided \ No newline at end of file diff --git a/include/link.h b/include/link.h index fa4cec13..76f4206d 100644 --- a/include/link.h +++ b/include/link.h @@ -74,6 +74,8 @@ typedef struct { u8 filler3[12]; } Stats; +extern u8 gBombBagSizes[]; + extern LinkState gLinkState; extern Stats gStats; extern Entity gLinkEntity; diff --git a/include/npc.h b/include/npc.h index fff3334a..314a5869 100644 --- a/include/npc.h +++ b/include/npc.h @@ -1,5 +1,6 @@ #include "global.h" #include "entity.h" +#include "link.h" #ifndef NPC_H #define NPC_H @@ -174,8 +175,14 @@ extern u32 UpdateFuseInteraction(Entity*); extern void ShowNPCDialogue(Entity*, u32*); typedef struct { - u8 filler[8]; - u8 unk; + /*0x000*/ u8 filler[8]; + /*0x008*/ u8 unk; + /*0x009*/ u8 filler2[0x47]; + /*0x050*/ u32 unk2; + /*0x051*/ u8 filler3[0x54]; + /*0x0a8*/ Stats stats; + /*0x0d0*/ u8 filler4[0x3c0]; + /*0x490*/ u32 unk3; } struct_02002A40; extern struct_02002A40 gUnk_02002A40; diff --git a/linker.ld b/linker.ld index 8024ecfc..1ad87c17 100644 --- a/linker.ld +++ b/linker.ld @@ -534,9 +534,9 @@ SECTIONS { asm/code_0805E744.o(.text); /* npcs */ src/gentari.o(.text); - asm/gentari.o(.text); + src/festari.o(.text); asm/festari.o(.text); - asm/forestMinish.o(.text); + src/forestMinish.o(.text); asm/postman.o(.text); asm/npc5.o(.text); asm/townsperson.o(.text); diff --git a/src/festari.c b/src/festari.c new file mode 100644 index 00000000..ff64ccd6 --- /dev/null +++ b/src/festari.c @@ -0,0 +1,91 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "link.h" + +extern void sub_0805E3A0(Entity*, u32); +extern u32 sub_0801E99C(Entity*); +extern void sub_08078784(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern void sub_0806F118(Entity*); +extern void ExecuteScriptCommandSet(Entity*, void *); +extern void sub_0805FF2C(Entity*, void*); +extern void sub_0806ED78(Entity*); + +extern void (*const gUnk_08109BBC[])(Entity*); + + +void Festari(Entity *this) +{ + gUnk_08109BBC[this->action](this); +} + +void sub_0805FE10(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); + sub_0807DD50(this); +} + +#if NON_MATCHING +void sub_0805FE48(Entity *this) +{ + u8 bVar1; + u16 uVar2; + u32 uVar3; + u32 uVar4; + + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_0806F118(this); + } + else { + ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh); + sub_0805FF2C(this, *(void **)&this->cutsceneBeh); + if (this->field_0x80 < 8) { + if ((this->field_0x82 & 1) != 0) { + uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1); + } + else { + uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1); + this->field_0xf = this->animationState; + } + } + if (uVar4 != this->animIndex) { + InitAnimationForceUpdate(this, uVar4); + } + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3) + { + switch (this->animIndex) { + case 8: + case 10: + case 11: + case 12: + this->field_0x80 = 0; + } + } + if ((this->field_0x82 & (~this->field_0x82 + 1)) == 2) { + sub_0806ED78(this); + } + } +} +#else +NAKED +void sub_0805FE48(Entity *this) { + asm(".include \"asm/non_matching/festari/sub_0805FE48.inc\""); +} +#endif + +void sub_0805FF18(Entity *this) +{ + if (UpdateFuseInteraction(this)) { + this->action = 1; + } +} \ No newline at end of file diff --git a/src/forestMinish.c b/src/forestMinish.c new file mode 100644 index 00000000..29a4ea6a --- /dev/null +++ b/src/forestMinish.c @@ -0,0 +1,304 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "flags.h" +#include "textbox.h" +#include "link.h" + +extern void sub_0805E3A0(Entity*, u32); +extern void StartCutscene(Entity*, void*); +extern void sub_0807DD50(Entity*); +extern void sub_0806F118(Entity*); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern void sub_080600F0(Entity*); +extern u32 sub_0801E99C(Entity*); +extern void sub_08078784(Entity*, u32); +extern void sub_0807000C(Entity*); +extern void sub_080042BA(Entity*, u32); +extern void sub_08060158(Entity*); +extern u32 CheckKinstoneFused(u32); +extern Entity* sub_0805EB00(u32, u32, u32); +extern void sub_080A29BC(Entity* parent); +extern void DeleteEntity(Entity*); +extern u32 Random(void); +extern void ModBombs(s32); + +extern SpriteLoadData gUnk_0810A348; +extern void* gUnk_08109D18[]; +extern u8 gUnk_08109C98[]; +extern u16 gUnk_0810A354[]; +extern u32 gUnk_08109DC8[]; +extern u16 gUnk_0810A35A[]; +extern u16 gUnk_0810A362[]; + +void ForestMinish(Entity* this) { + switch (this->action) { + case 0: + if (LoadExtraSpriteData(this, &gUnk_0810A348)) { + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->field_0x69 = this->animationState = this->actionDelay << 1; + this->actionDelay = 0; + sub_0805E3A0(this, 2); + StartCutscene(this, gUnk_08109D18[this->entityType.parameter]); + 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); + if (this->frameDuration != 0xf0) { + sub_080600F0(this); + } + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + } +} + +void sub_08060090(Entity* this) { + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); +} + +void ForestMinish_Head(Entity* this) { + u32 pbVar1; + + pbVar1 = this->frames.all; + if (this->frames.all != 0xff) { + pbVar1 &= -0x81; + } + if ((this->frameSpriteSettings & 1) == 0) { + pbVar1 = 0xff; + } + SetExtraSpriteFrame(this, 0, pbVar1); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); +} + +void sub_080600F0(Entity* this) { + u32 uVar1; + u32 uVar2; + + uVar2 = this->field_0x80; + if (this->field_0x80 < 8) { + if ((this->field_0x82 & 1) != 0) { + uVar2 = (uVar2 & 0xfc) + (this->field_0xf >> 1); + } else { + uVar2 = (uVar2 & 0xfc) + (this->animationState >> 1); + this->field_0xf = this->animationState; + } + } + if (uVar2 != this->animIndex) { + InitAnimationForceUpdate(this, uVar2); + } + if ((this->field_0x82 & 4) != 0) { + uVar1 = 2; + } else { + uVar1 = 1; + } + sub_080042BA(this, uVar1); +} + +void sub_0806014C(Entity* this) { + this->actionDelay = 0; + sub_08060158(this); +} + +#if 0 +void sub_08060158(Entity *this) +{ + u8 bVar1; + u8 bVar2; + s32 iVar4; + u32 temp; + if (this->actionDelay != 0) { + this->actionDelay--; + } + else { + this->actionDelay = 2; + iVar4 = sub_0806EDD8(this, 0x20, 0x20); + if (iVar4 < 0) { + this->animationState = this->field_0x69; + iVar4 = this->field_0x69 << 2; + } + temp = (this->animationState >> 1) * 0x20 + (iVar4 >> 1) * 2; + bVar1 = gUnk_08109C98[temp]; + bVar2 = gUnk_08109C98[temp + 1]; + if ((bVar2 & 0x80) != 0) { + this->animationState = sub_0806F5B0(iVar4); + } + this->frames.all = bVar1; + this->frameIndex = bVar2 & 0x7f; + this->frameSpriteSettings = 1; + this->animIndex = 0; + this->frameDuration = 0xf0; + } +} +#endif +NAKED +void sub_08060158(Entity* this) { + asm(".include \"asm/non_matching/forestMinish/sub_08060158.inc\""); +} + +void sub_080601D4(Entity* this) { + u32 temp; + u32 uVar2; + + if (CheckGlobalFlag(4) == 0) { + uVar2 = 2; + } else { + temp = CheckKinstoneFused(0x17); + uVar2 = (-temp | temp) >> 0x1f; + } + TextboxNoOverlap(gUnk_0810A354[uVar2], this); +} + +void sub_08060208(Entity *this) +{ + ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]); +} + +void sub_0806021C(Entity *this) +{ + u32 uVar1; + u32 uVar2; + + //jabber nut + uVar1 = GetInventoryValue(0x5B); + uVar2 = (-uVar1 | uVar1) >> 0x1f; + + //earth element + if (GetInventoryValue(0x40)) { + uVar2 = 2; + } + + //mole mitts + if (GetInventoryValue(0x13)) { + uVar2 = 3; + } + ShowNPCDialogue(this, gUnk_08109DC8 + this->entityType.parameter * 0x8 + uVar2 * 2); +} + +void sub_0806025C(Entity *this) +{ + ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]); +} + +void sub_08060270(Entity *this) +{ + u32 index; + + //flippers + if (GetInventoryValue(0x46) == 0) { + index = 1; + if (CheckGlobalFlag(0x29) == 0) { + index = 0; + SetGlobalFlag(0x29); + } + } + else { + index = 3; + if (CheckLocalFlag(0x76) == 0) { + index = 2; + SetLocalFlag(0x76); + } + } + TextboxNoOverlap(gUnk_0810A35A[index], this); +} + +void sub_080602BC(Entity *this) +{ + u32 index; + + //spin attack + if (GetInventoryValue(0x48) != 0) { + index = (Random() & 1) + 2; + } + else { + if (gUnk_02002A40.stats.bombCount < gBombBagSizes[gUnk_02002A40.stats.bombBagType]) { + index = 1; + } + else { + index = 0; + } + } + TextboxNoOverlap(gUnk_0810A362[index], this); +} + +void sub_0806030C(Entity* this, u32 *arg1) +{ + ModBombs(*(arg1 + 1)); +} + +void sub_08060318(void) +{ + Entity *ent; + int i; + + for (i = 2; i >= 0; i--) { + ent = sub_0805EB00(8, 2, 2); + if (ent != NULL) { + sub_080A29BC(ent); + DeleteEntity(ent); + } + } +} + +void sub_08060340(void) +{ + gUnk_02002A40.unk3 = gUnk_02002A40.unk2; +} + +u32 sub_08060354(void) +{ + u32 iVar1; + s32 iVar2; + + iVar2 = gUnk_02002A40.unk2 - gUnk_02002A40.unk3; + if (CheckGlobalFlag(0x3b) == 0) { + if (4 < iVar2) { + return 0x8444; + } + } + else { + if (CheckGlobalFlag(0x3c) == 0) { + if (iVar2 > 9) { + return 0x8444; + } + } + else { + if (CheckGlobalFlag(0x3d) == 0) { + if (iVar2 > 14) { + return 0x8444; + } + } + } + } + return 0; +} + +void ForestMinish_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_0810A348)) { + this->action++; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + InitializeAnimation(this, 6); + } + } + else { + GetNextFrame(this); + } +} \ No newline at end of file From c47f16e5e7b0abb010133b3ee1a58099d8b8915d Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 13 Jul 2020 13:44:50 -0700 Subject: [PATCH 22/25] postman.c --- Makefile | 2 +- asm/non_matching/postman/sub_08060700.inc | 51 +++ asm/postman.s | 447 ---------------------- linker.ld | 1 + src/postman.c | 227 +++++++++++ 5 files changed, 280 insertions(+), 448 deletions(-) create mode 100644 asm/non_matching/postman/sub_08060700.inc create mode 100644 src/postman.c diff --git a/Makefile b/Makefile index 8159581a..0735bd2a 100644 --- a/Makefile +++ b/Makefile @@ -83,7 +83,7 @@ endif #$(C_BUILDDIR)/need_interworking_file_name.o: CFLAGS += -mthumb-interwork -C_SRCS := $(wildcard $(C_SUBDIR)/*.c) +C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) diff --git a/asm/non_matching/postman/sub_08060700.inc b/asm/non_matching/postman/sub_08060700.inc new file mode 100644 index 00000000..326e221b --- /dev/null +++ b/asm/non_matching/postman/sub_08060700.inc @@ -0,0 +1,51 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, lr} + ldr r3, _0806074C @ =gUnk_0810A918 + adds r2, r0, #0 + adds r2, #0x68 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + lsls r2, r2, #2 + adds r2, r2, r3 + ldr r2, [r2] + adds r3, r0, #0 + adds r3, #0x69 + ldrb r3, [r3] + lsls r3, r3, #0x18 + asrs r3, r3, #0x18 + adds r2, r2, r3 + movs r3, #0 + ldrsb r3, [r2, r3] + lsls r3, r3, #2 + ldr r2, _08060750 @ =gUnk_0810A66C + adds r3, r3, r2 + ldr r4, _08060754 @ =gRoomControls + movs r5, #0 + ldrsh r2, [r3, r5] + ldrh r5, [r4, #6] + adds r2, r2, r5 + movs r5, #2 + ldrsh r3, [r3, r5] + ldrh r4, [r4, #8] + adds r3, r3, r4 + bl sub_0807DEDC + ldr r2, _08060758 @ =gUnk_02033280 + ldrb r1, [r2, #7] + movs r0, #1 + orrs r0, r1 + strb r0, [r2, #7] + pop {r4, r5, pc} + .align 2, 0 +_0806074C: .4byte gUnk_0810A918 +_08060750: .4byte gUnk_0810A66C +_08060754: .4byte gRoomControls +_08060758: .4byte gUnk_02033280 + .syntax divided \ No newline at end of file diff --git a/asm/postman.s b/asm/postman.s index 66761797..3bb384b7 100644 --- a/asm/postman.s +++ b/asm/postman.s @@ -6,453 +6,6 @@ .text - - thumb_func_start Postman -Postman: @ 0x080603FC - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08060412 - adds r0, r2, #0 - bl sub_08060528 - b _08060422 -_08060412: - ldr r0, _08060424 @ =gUnk_0810AA24 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 -_08060422: - pop {pc} - .align 2, 0 -_08060424: .4byte gUnk_0810AA24 - - thumb_func_start sub_08060428 -sub_08060428: @ 0x08060428 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x5a - strb r0, [r4, #0xe] - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _08060444 - bl GetCurrentRoomProperty - adds r1, r0, #0 - b _08060446 -_08060444: - movs r1, #0 -_08060446: - adds r0, r4, #0 - movs r2, #0 - bl sub_0806EE04 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #4 - bl InitAnimationForceUpdate - pop {r4, pc} - - thumb_func_start sub_0806045C -sub_0806045C: @ 0x0806045C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_080604DC - adds r0, r4, #0 - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - bgt _08060488 - cmp r0, #1 - blt _08060488 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0 - bl TextboxNoOverlapFollow - b _080604C0 -_08060488: - adds r0, r4, #0 - adds r0, #0x3e - ldrb r1, [r0] - ldrb r0, [r4, #0x14] - cmp r1, r0 - beq _0806049E - strb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0806049E: - adds r0, r4, #0 - movs r1, #0x18 - movs r2, #0x18 - bl sub_0806ED9C - movs r1, #0 - cmp r0, #0 - blt _080604B6 - ldrb r2, [r4, #0x14] - cmp r0, r2 - bne _080604B6 - movs r1, #1 -_080604B6: - cmp r1, #0 - bne _080604C0 - adds r0, r4, #0 - bl sub_0806EE20 -_080604C0: - adds r0, r4, #0 - bl sub_0806ED78 - pop {r4, pc} - - thumb_func_start sub_080604C8 -sub_080604C8: @ 0x080604C8 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_080604DC - movs r0, #1 - strb r0, [r4, #0xc] - pop {r4, pc} - - thumb_func_start sub_080604DC -sub_080604DC: @ 0x080604DC - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0x18] - lsls r0, r0, #0x1e - lsrs r4, r0, #0x1e - cmp r4, #1 - bne _08060524 - adds r0, r5, #0 - bl sub_080040A8 - cmp r0, #0 - beq _08060524 - adds r2, r5, #0 - adds r2, #0x5a - ldrb r1, [r2] - ands r4, r1 - cmp r4, #0 - beq _08060524 - movs r0, #0xfe - ands r0, r1 - strb r0, [r2] - adds r0, r5, #0 - movs r1, #0x11 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08060524 - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] - adds r0, r1, #0 - movs r1, #3 - bl sub_0805E3A0 -_08060524: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08060528 -sub_08060528: @ 0x08060528 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r3, [r4, #0xc] - cmp r3, #1 - beq _08060582 - cmp r3, #1 - bgt _0806053C - cmp r3, #0 - beq _08060546 - b _080605EC -_0806053C: - cmp r3, #2 - beq _080605F6 - cmp r3, #3 - beq _08060618 - b _080605EC -_08060546: - 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] - adds r0, r4, #0 - adds r0, #0x68 - strb r3, [r0] - adds r0, #1 - strb r3, [r0] - adds r5, r4, #0 - adds r5, #0x6a - movs r0, #0 - strh r3, [r5] - adds r6, r4, #0 - adds r6, #0x6d - strb r0, [r6] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x6c - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807DD50 - b _08060634 -_08060582: - adds r2, r4, #0 - adds r2, #0x39 - movs r0, #0 - ldrsb r0, [r2, r0] - cmp r0, #2 - bne _080605B8 - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xc] - strb r1, [r2] - adds r0, r4, #0 - bl sub_0806F118 - ldr r1, _080605B4 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _080605EC - .align 2, 0 -_080605B4: .4byte gLinkEntity -_080605B8: - cmp r0, #0 - beq _080605E4 - movs r1, #0 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r2] - adds r0, r4, #0 - bl sub_080606D8 - ldr r1, _080605E0 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _080605EC - .align 2, 0 -_080605E0: .4byte gLinkEntity -_080605E4: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 -_080605EC: - adds r5, r4, #0 - adds r5, #0x6a - adds r6, r4, #0 - adds r6, #0x6d - b _08060634 -_080605F6: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r0, _08060614 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - adds r5, r4, #0 - adds r5, #0x6a - adds r6, r4, #0 - adds r6, #0x6d - cmp r0, #0 - bne _08060634 - b _08060630 - .align 2, 0 -_08060614: .4byte gTextBox -_08060618: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl UpdateFuseInteraction - adds r5, r4, #0 - adds r5, #0x6a - adds r6, r4, #0 - adds r6, #0x6d - cmp r0, #0 - beq _08060634 -_08060630: - movs r0, #1 - strb r0, [r4, #0xc] -_08060634: - adds r0, r4, #0 - bl sub_080604DC - adds r1, r5, #0 - ldrh r3, [r1] - movs r0, #0 - ldrsh r2, [r1, r0] - cmp r2, #0 - ble _08060670 - ldr r0, _08060668 @ =0x0000012B - cmp r2, r0 - ble _0806066C - movs r0, #0 - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - movs r0, #1 - strb r0, [r6] - adds r0, r4, #0 - bl sub_080788E0 - movs r0, #0x7c - bl sub_08004488 - b _08060670 - .align 2, 0 -_08060668: .4byte 0x0000012B -_0806066C: - subs r0, r3, #1 - strh r0, [r5] -_08060670: - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 - ldrb r0, [r6] - cmp r0, #0 - beq _08060694 - ldr r0, [r4, #0x20] - cmp r0, #0 - bne _08060694 - ldr r0, [r4, #0x34] - cmp r0, #0 - bne _08060694 - strb r0, [r6] - adds r0, r4, #0 - bl sub_080606C0 -_08060694: - ldr r0, [r4, #0x34] - cmp r0, #0 - blt _080606B4 - ldr r0, _080606BC @ =gLinkEntity - adds r0, #0x38 - ldrb r1, [r0] - cmp r1, #0 - beq _080606AE - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, r1 - bne _080606B4 -_080606AE: - adds r0, r4, #0 - bl sub_0806ED78 -_080606B4: - adds r0, r4, #0 - bl sub_0800451C - pop {r4, r5, r6, pc} - .align 2, 0 -_080606BC: .4byte gLinkEntity - - thumb_func_start sub_080606C0 -sub_080606C0: @ 0x080606C0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x6c - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start sub_080606D8 -sub_080606D8: @ 0x080606D8 - push {lr} - adds r2, r0, #0 - ldr r0, _080606F8 @ =gUnk_02002A40 - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _080606E8 - movs r0, #0 -_080606E8: - lsls r1, r0, #3 - ldr r0, _080606FC @ =gUnk_0810AA30 - adds r1, r1, r0 - adds r0, r2, #0 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_080606F8: .4byte gUnk_02002A40 -_080606FC: .4byte gUnk_0810AA30 - - thumb_func_start sub_08060700 -sub_08060700: @ 0x08060700 - push {r4, r5, lr} - ldr r3, _0806074C @ =gUnk_0810A918 - adds r2, r0, #0 - adds r2, #0x68 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - lsls r2, r2, #2 - adds r2, r2, r3 - ldr r2, [r2] - adds r3, r0, #0 - adds r3, #0x69 - ldrb r3, [r3] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - adds r2, r2, r3 - movs r3, #0 - ldrsb r3, [r2, r3] - lsls r3, r3, #2 - ldr r2, _08060750 @ =gUnk_0810A66C - adds r3, r3, r2 - ldr r4, _08060754 @ =gRoomControls - movs r5, #0 - ldrsh r2, [r3, r5] - ldrh r5, [r4, #6] - adds r2, r2, r5 - movs r5, #2 - ldrsh r3, [r3, r5] - ldrh r4, [r4, #8] - adds r3, r3, r4 - bl sub_0807DEDC - ldr r2, _08060758 @ =gUnk_02033280 - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, r5, pc} - .align 2, 0 -_0806074C: .4byte gUnk_0810A918 -_08060750: .4byte gUnk_0810A66C -_08060754: .4byte gRoomControls -_08060758: .4byte gUnk_02033280 - - thumb_func_start sub_0806075C -sub_0806075C: @ 0x0806075C - adds r2, r0, #0 - adds r2, #0x68 - movs r1, #0xb - strb r1, [r2] - adds r0, #0x69 - movs r1, #0xff - strb r1, [r0] - bx lr - thumb_func_start sub_0806076C sub_0806076C: @ 0x0806076C push {r4, r5, r6, r7, lr} diff --git a/linker.ld b/linker.ld index 1ad87c17..cca61b62 100644 --- a/linker.ld +++ b/linker.ld @@ -537,6 +537,7 @@ SECTIONS { src/festari.o(.text); asm/festari.o(.text); src/forestMinish.o(.text); + src/postman.o(.text); asm/postman.o(.text); asm/npc5.o(.text); asm/townsperson.o(.text); diff --git a/src/postman.c b/src/postman.c new file mode 100644 index 00000000..b3a51dba --- /dev/null +++ b/src/postman.c @@ -0,0 +1,227 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "textbox.h" +#include "link.h" + +typedef struct { + u8 filler[7]; + u8 unk; +} struct_02033280; + +extern void sub_08060528(Entity*); +extern void* GetCurrentRoomProperty(u32); +extern void sub_0806EE04(Entity*, void*, u32); +extern void sub_080604DC(Entity*); +extern s32 sub_0806ED9C(Entity*, u32, u32); +extern void sub_0806EE20(Entity*); +extern void sub_0806ED78(Entity*); +extern u32 sub_080040A8(Entity*); +extern void sub_0805E3A0(Entity*, u32); +extern u32 sub_0801E99C(Entity*); +extern void sub_0807DD50(Entity*); +extern void sub_0806F118(Entity*); +extern u32 sub_0806F5A4(u32); +extern u32 GetFacingDirection(Entity*, Entity*); +extern void sub_080606D8(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern void sub_080788E0(Entity*); +extern void sub_08004488(u32); +extern void sub_08003FC4(Entity*, u32); +extern void sub_080606C0(Entity*); +extern void sub_0800451C(Entity*); +extern void sub_08078784(Entity*, u32); +extern void sub_0807DEDC(Entity*, u32, u32, u32); + +extern void (*const gUnk_0810AA24[])(Entity*); +extern u32 gUnk_0810AA30[]; +extern u32** gUnk_0810A66C; +extern u32 gUnk_0810A918[]; +extern struct_02033280 gUnk_02033280; + +void Postman(Entity* this) { + if ((this->flags & 2) != 0) { + sub_08060528(this); + } else { + gUnk_0810AA24[this->action](this); + } +} + +void sub_08060428(Entity* this) { + u8 bVar1; + void* data; + + this->actionDelay = 0x5a; + this->nonPlanarMovement = 0x180; + if (this->entityType.parameter != 0) { + data = GetCurrentRoomProperty(this->entityType.parameter); + } else { + data = NULL; + } + sub_0806EE04(this, data, 0); + this->action = 1; + InitAnimationForceUpdate(this, 4); +} + +void sub_0806045C(Entity* this) { + u8 bVar1; + u32 uVar2; + u32 bVar3; + s32 temp; + + UpdateAnimationSingleFrame(this); + sub_080604DC(this); + switch (this->interactType) { + case 1: + case 2: + this->action = 2; + TextboxNoOverlapFollow(0); + break; + default: + bVar1 = this->field_0x3e; + if (bVar1 != this->animationState) { + this->animationState = bVar1; + InitAnimationForceUpdate(this, 4 + bVar1); + } + temp = sub_0806ED9C(this, 0x18, 0x18); + if ((temp > -1) && (temp == this->animationState)) { + bVar3 = 1; + } else { + bVar3 = 0; + } + if (!bVar3) { + sub_0806EE20(this); + } + } + sub_0806ED78(this); +} + +void sub_080604C8(Entity* this) { + UpdateAnimationSingleFrame(this); + sub_080604DC(this); + this->action = 1; +} + +void sub_080604DC(Entity* this) { + u8 bVar1; + int iVar2; + Entity* ent; + + if (((u32)(this->spriteSettings.raw << 0x1e) >> 0x1e == 1) && sub_080040A8(this)) { + if ((this->frames.all & 1) != 0) { + this->frames.all &= 0xfe; + ent = CreateFx(this, 0x11, 0x40); + if (ent != NULL) { + ent->y.HALF.HI++; + sub_0805E3A0(ent, 3); + } + } + } +} + +void sub_08060528(Entity *this) +{ + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->field_0x68 = 0; + this->field_0x69 = 0; + this->field_0x6a.HWORD = 0; + this->field_0x6d = 0; + this->field_0x6c = sub_0801E99C(this); + sub_0807DD50(this); + break; + case 1: + if (this->interactType == 2) { + this->action = 3; + this->interactType = 0; + sub_0806F118(this); + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + } + else { + if (this->interactType != 0) { + this->action = 2; + this->interactType = 0; + sub_080606D8(this); + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + } + else { + sub_0807DD94(this, 0); + } + } + break; + case 2: + UpdateAnimationSingleFrame(this); + if ((gTextBox.doTextBox & 0x7f) != 0) { + break; + } + this->action = 1; + break; + case 3: + UpdateAnimationSingleFrame(this); + if (!UpdateFuseInteraction(this)) { + break; + } + this->action = 1; + } + sub_080604DC(this); + if (0 < (s16)this->field_0x6a.HWORD) { + if ((s16)this->field_0x6a.HWORD > 0x12b) { + this->field_0x6a.HWORD = 0; + this->field_0x20 = 0x20000; + this->field_0x6d = 1; + sub_080788E0(this); + sub_08004488(0x7c); + } + else { + this->field_0x6a.HWORD -= 1; + } + } + sub_08003FC4(this, 0x1800); + if (((this->field_0x6d != 0) && (this->field_0x20 == 0)) && this->height.WORD == 0) { + this->field_0x6d = 0; + sub_080606C0(this); + } + if ((-1 < this->height.WORD) && + ((gLinkEntity.collisionLayer == 0 || (this->collisionLayer == gLinkEntity.collisionLayer)))) { + sub_0806ED78(this); + } + sub_0800451C(this); +} + +void sub_080606C0(Entity *this) +{ + this->field_0x6c = sub_0801E99C(this); + sub_08078784(this, this->field_0x6c); +} + +void sub_080606D8(Entity* this) +{ + s32 iVar1; + + iVar1 = gUnk_02002A40.unk - 2; + if (iVar1 < 0) { + iVar1 = 0; + } + ShowNPCDialogue(this, &gUnk_0810AA30[iVar1 * 2]); +} + +#if 0 +void sub_08060700(Entity *arg0, u32 arg1) +{ + sub_0807DEDC(arg0,arg1, + gUnk_0810A918[gUnk_0810A66C[arg0->field_0x69][arg0->field_0x68] * 4 + gRoomControls.roomOriginX], + gUnk_0810A918[gUnk_0810A66C[arg0->field_0x69][arg0->field_0x68] * 4 + gRoomControls.roomOriginY + 2]); + gUnk_02033280.unk |= 1; +} +#endif +NAKED void sub_08060700(Entity *arg0, u32 arg1) { + asm(".include \"asm/non_matching/postman/sub_08060700.inc\""); +} + +void sub_0806075C(Entity *this) +{ + this->field_0x68 = 0xb; + this->field_0x69 = 0xff; +} \ No newline at end of file From 62ddaaa5f6fe2dc2aaa2dd002d4ce0b1d61a3cc9 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 13 Jul 2020 15:27:20 -0700 Subject: [PATCH 23/25] add subdirs --- Makefile | 5 + asm/townsperson.s | 112 ------------------- linker.ld | 149 +++++++++++++------------ src/{ => enemy}/bladeTrap.c | 0 src/{ => enemy}/bombPeahat.c | 0 src/{ => enemy}/bowMoblin.c | 0 src/{ => enemy}/hangingSeed.c | 0 src/{ => enemy}/keese.c | 0 src/{ => enemy}/lakitu.c | 0 src/{ => enemy}/lakituCloud.c | 0 src/{ => enemy}/miniFireballGuy.c | 0 src/{ => enemy}/octorok.c | 0 src/{ => enemy}/slime.c | 0 src/{ => enemy}/smallPesto.c | 0 src/{ => manager}/manager1.c | 0 src/{ => manager}/manager2.c | 0 src/{ => manager}/manager27.c | 0 src/{ => manager}/manager2E.c | 0 src/{ => npc}/bigGoron.c | 0 src/{ => npc}/bladeBrothers.c | 0 src/{ => npc}/carpenter.c | 0 src/{ => npc}/cat.c | 0 src/{ => npc}/clothesRack.c | 0 src/{ => npc}/cow.c | 0 src/{ => npc}/dampe.c | 0 src/{ => npc}/emma.c | 0 src/{ => npc}/epona.c | 0 src/{ => npc}/festari.c | 0 src/{ => npc}/forestMinish.c | 0 src/{ => npc}/gentari.c | 0 src/{ => npc}/goron.c | 0 src/{ => npc}/guard.c | 0 src/{ => npc}/mailbox.c | 0 src/{ => npc}/malon.c | 0 src/{ => npc}/milkCart.c | 0 src/{ => npc}/mutoh.c | 0 src/{ => npc}/postman.c | 0 src/{ => npc}/rem.c | 0 src/{ => npc}/simon.c | 0 src/{ => npc}/smith.c | 0 src/{ => npc}/stamp.c | 0 src/{ => npc}/syrup.c | 0 src/{ => npc}/talon.c | 0 src/{ => npc}/teachers.c | 0 src/{ => npc}/townMinish.c | 0 src/npc/townsperson.c | 58 ++++++++++ src/{ => npc}/wheaton.c | 0 src/{ => npc}/windTribespeople.c | 0 src/{ => npc}/zelda.c | 0 src/{ => object}/archway.c | 0 src/{ => object}/bell.c | 0 src/{ => object}/chestSpawner.c | 0 src/{ => object}/cloud.c | 0 src/{ => object}/fan.c | 0 src/{ => object}/giantLeaf.c | 0 src/{ => object}/greatFairy.c | 0 src/{ => object}/heartContainer.c | 0 src/{ => object}/lightableSwitch.c | 0 src/{ => object}/mask.c | 0 src/{ => object}/metalDoor.c | 0 src/{ => object}/mineralWaterSource.c | 0 src/{ => object}/minishSizedEntrance.c | 0 src/{ => object}/object1A.c | 0 src/{ => object}/object1C.c | 0 src/{ => object}/object1D.c | 0 src/{ => object}/object49.c | 0 src/{ => object}/object86.c | 0 src/{ => object}/object9E.c | 0 src/{ => object}/objectA8.c | 0 src/{ => object}/railtrack.c | 0 src/{ => object}/smoke.c | 0 src/{ => object}/swordsmanNewsletter.c | 0 src/{ => object}/thoughtBubble.c | 0 src/{ => object}/treeHidingPortal.c | 0 src/{ => object}/well.c | 0 src/{ => object}/windTribeFlag.c | 0 src/{ => object}/windcrest.c | 0 77 files changed, 138 insertions(+), 186 deletions(-) rename src/{ => enemy}/bladeTrap.c (100%) rename src/{ => enemy}/bombPeahat.c (100%) rename src/{ => enemy}/bowMoblin.c (100%) rename src/{ => enemy}/hangingSeed.c (100%) rename src/{ => enemy}/keese.c (100%) rename src/{ => enemy}/lakitu.c (100%) rename src/{ => enemy}/lakituCloud.c (100%) rename src/{ => enemy}/miniFireballGuy.c (100%) rename src/{ => enemy}/octorok.c (100%) rename src/{ => enemy}/slime.c (100%) rename src/{ => enemy}/smallPesto.c (100%) rename src/{ => manager}/manager1.c (100%) rename src/{ => manager}/manager2.c (100%) rename src/{ => manager}/manager27.c (100%) rename src/{ => manager}/manager2E.c (100%) rename src/{ => npc}/bigGoron.c (100%) rename src/{ => npc}/bladeBrothers.c (100%) rename src/{ => npc}/carpenter.c (100%) rename src/{ => npc}/cat.c (100%) rename src/{ => npc}/clothesRack.c (100%) rename src/{ => npc}/cow.c (100%) rename src/{ => npc}/dampe.c (100%) rename src/{ => npc}/emma.c (100%) rename src/{ => npc}/epona.c (100%) rename src/{ => npc}/festari.c (100%) rename src/{ => npc}/forestMinish.c (100%) rename src/{ => npc}/gentari.c (100%) rename src/{ => npc}/goron.c (100%) rename src/{ => npc}/guard.c (100%) rename src/{ => npc}/mailbox.c (100%) rename src/{ => npc}/malon.c (100%) rename src/{ => npc}/milkCart.c (100%) rename src/{ => npc}/mutoh.c (100%) rename src/{ => npc}/postman.c (100%) rename src/{ => npc}/rem.c (100%) rename src/{ => npc}/simon.c (100%) rename src/{ => npc}/smith.c (100%) rename src/{ => npc}/stamp.c (100%) rename src/{ => npc}/syrup.c (100%) rename src/{ => npc}/talon.c (100%) rename src/{ => npc}/teachers.c (100%) rename src/{ => npc}/townMinish.c (100%) create mode 100644 src/npc/townsperson.c rename src/{ => npc}/wheaton.c (100%) rename src/{ => npc}/windTribespeople.c (100%) rename src/{ => npc}/zelda.c (100%) rename src/{ => object}/archway.c (100%) rename src/{ => object}/bell.c (100%) rename src/{ => object}/chestSpawner.c (100%) rename src/{ => object}/cloud.c (100%) rename src/{ => object}/fan.c (100%) rename src/{ => object}/giantLeaf.c (100%) rename src/{ => object}/greatFairy.c (100%) rename src/{ => object}/heartContainer.c (100%) rename src/{ => object}/lightableSwitch.c (100%) rename src/{ => object}/mask.c (100%) rename src/{ => object}/metalDoor.c (100%) rename src/{ => object}/mineralWaterSource.c (100%) rename src/{ => object}/minishSizedEntrance.c (100%) rename src/{ => object}/object1A.c (100%) rename src/{ => object}/object1C.c (100%) rename src/{ => object}/object1D.c (100%) rename src/{ => object}/object49.c (100%) rename src/{ => object}/object86.c (100%) rename src/{ => object}/object9E.c (100%) rename src/{ => object}/objectA8.c (100%) rename src/{ => object}/railtrack.c (100%) rename src/{ => object}/smoke.c (100%) rename src/{ => object}/swordsmanNewsletter.c (100%) rename src/{ => object}/thoughtBubble.c (100%) rename src/{ => object}/treeHidingPortal.c (100%) rename src/{ => object}/well.c (100%) rename src/{ => object}/windTribeFlag.c (100%) rename src/{ => object}/windcrest.c (100%) diff --git a/Makefile b/Makefile index 0735bd2a..90bf1ca4 100644 --- a/Makefile +++ b/Makefile @@ -69,6 +69,7 @@ FIX := tools/gbafix/gbafix # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: + $(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR) $(SONG_BUILDDIR) $(MID_BUILDDIR)) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -101,6 +102,10 @@ MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) +SUBDIRS := $(sort $(dir $(OBJS))) + +$(shell mkdir -p $(SUBDIRS)) + TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) TOOLBASE = $(TOOLDIRS:tools/%=%) TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE)) diff --git a/asm/townsperson.s b/asm/townsperson.s index 1993b4c6..32bf8e55 100644 --- a/asm/townsperson.s +++ b/asm/townsperson.s @@ -6,118 +6,6 @@ .text - - thumb_func_start Townsperson -Townsperson: @ 0x08061B8C - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08061BB0 - ldr r0, _08061BAC @ =gUnk_0810B77C - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - b _08061BC0 - .align 2, 0 -_08061BAC: .4byte gUnk_0810B77C -_08061BB0: - ldr r0, _08061BC4 @ =gUnk_0810B774 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 -_08061BC0: - pop {pc} - .align 2, 0 -_08061BC4: .4byte gUnk_0810B774 - - thumb_func_start sub_08061BC8 -sub_08061BC8: @ 0x08061BC8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08061BFC @ =gUnk_0810B6EC - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08061BF8 - movs r0, #2 - strb r0, [r4, #0x14] - ldrb r0, [r4, #0xa] - adds r0, #1 - strb r0, [r4, #0xf] - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl sub_08061CB4 -_08061BF8: - pop {r4, pc} - .align 2, 0 -_08061BFC: .4byte gUnk_0810B6EC - - thumb_func_start sub_08061C00 -sub_08061C00: @ 0x08061C00 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x20 - movs r2, #0x20 - bl sub_0806ED9C - adds r1, r0, #0 - cmp r1, #0 - bge _08061C18 - ldrb r0, [r4, #0x14] - adds r1, r0, #4 - b _08061C32 -_08061C18: - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _08061C24 - movs r0, #0x10 - strb r0, [r4, #0xf] - b _08061C32 -_08061C24: - subs r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - movs r1, #3 - ands r1, r0 -_08061C32: - adds r0, r4, #0 - bl sub_08061CB4 - adds r0, r4, #0 - bl sub_0806ED78 - adds r1, r4, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08061C58 - movs r0, #0 - strb r0, [r1] - ldrb r0, [r4, #0xb] - ldr r1, _08061C5C @ =0x00000A01 - adds r0, r0, r1 - bl TextboxNoOverlapFollow -_08061C58: - pop {r4, pc} - .align 2, 0 -_08061C5C: .4byte 0x00000A01 - thumb_func_start Townsperson_Head Townsperson_Head: @ 0x08061C60 push {r4, r5, lr} diff --git a/linker.ld b/linker.ld index cca61b62..70de38a4 100644 --- a/linker.ld +++ b/linker.ld @@ -323,16 +323,16 @@ SECTIONS { asm/code_0801D714.o(.text); asm/code_0801D79C.o(.text); /* enemies */ - src/octorok.o(.text); + src/enemy/octorok.o(.text); asm/octorok.o(.text); asm/chuchu.o(.text); asm/leever.o(.text); asm/peahat.o(.text); asm/rollobite.o(.text); asm/darkNut.o(.text); - src/hangingSeed.o(.text); + src/enemy/hangingSeed.o(.text); asm/beetle.o(.text); - src/keese.o(.text); + src/enemy/keese.o(.text); asm/keese.o(.text); asm/doorMimic.o(.text); asm/rockChuchu.o(.text); @@ -352,7 +352,7 @@ SECTIONS { asm/madderpillar.o(.text); asm/waterDrop.o(.text); asm/wallMaster.o(.text); - src/bombPeahat.o(.text); + src/enemy/bombPeahat.o(.text); asm/bombPeahat.o(.text); asm/spark.o(.text); asm/chaser.o(.text); @@ -371,10 +371,10 @@ SECTIONS { asm/armos.o(.text); asm/eyegore.o(.text); asm/rope.o(.text); - src/smallPesto.o(.text); + src/enemy/smallPesto.o(.text); asm/smallPesto.o(.text); asm/acroBandits.o(.text); - src/bladeTrap.o(.text); + src/enemy/bladeTrap.o(.text); asm/keaton.o(.text); asm/crow.o(.text); asm/mulldozer.o(.text); @@ -397,10 +397,10 @@ SECTIONS { asm/flyingSkull.o(.text); asm/mazaalBracelet.o(.text); asm/takkuri.o(.text); - src/bowMoblin.o(.text); + src/enemy/bowMoblin.o(.text); asm/bowMoblin.o(.text); - src/lakitu.o(.text); - src/lakituCloud.o(.text); + src/enemy/lakitu.o(.text); + src/enemy/lakituCloud.o(.text); asm/enemy49.o(.text); asm/vaatiRebornEnemy.o(.text); asm/vaatiProjectile.o(.text); @@ -413,11 +413,11 @@ SECTIONS { asm/vaatiArm.o(.text); asm/dust.o(.text); asm/vaatiBall.o(.text); - src/slime.o(.text); + src/enemy/slime.o(.text); asm/slime.o(.text); asm/miniSlime.o(.text); asm/fireballGuy.o(.text); - src/miniFireballGuy.o(.text); + src/enemy/miniFireballGuy.o(.text); asm/miniFireballGuy.o(.text); asm/enemy5A.o(.text); asm/businessScrubPrologue.o(.text); @@ -467,9 +467,9 @@ SECTIONS { asm/code_08055FF4.o(.text); src/textbox.o(.text); asm/code_08056418.o(.text); - src/manager1.o(.text); + src/manager/manager1.o(.text); asm/manager1.o(.text); - src/manager2.o(.text); + src/manager/manager2.o(.text); asm/manager2.o(.text); asm/manager3.o(.text); asm/manager4.o(.text); @@ -507,14 +507,14 @@ SECTIONS { asm/manager24.o(.text); asm/manager25.o(.text); asm/manager26.o(.text); - src/manager27.o(.text); + src/manager/manager27.o(.text); asm/manager28.o(.text); asm/manager29.o(.text); asm/manager2A.o(.text); asm/manager2B.o(.text); asm/manager2C.o(.text); asm/manager2D.o(.text); - src/manager2E.o(.text); + src/manager/manager2E.o(.text); asm/manager2E.o(.text); asm/manager2F.o(.text); asm/manager30.o(.text); @@ -533,27 +533,28 @@ SECTIONS { asm/getEmptyEntity.o(.text); asm/code_0805E744.o(.text); /* npcs */ - src/gentari.o(.text); - src/festari.o(.text); + src/npc/gentari.o(.text); + src/npc/festari.o(.text); asm/festari.o(.text); - src/forestMinish.o(.text); - src/postman.o(.text); + src/npc/forestMinish.o(.text); + src/npc/postman.o(.text); asm/postman.o(.text); asm/npc5.o(.text); + src/npc/townsperson.o(.text); asm/townsperson.o(.text); asm/kid.o(.text); asm/npc9.o(.text); - src/stamp.o(.text); + src/npc/stamp.o(.text); asm/marcy.o(.text); - src/wheaton.o(.text); + src/npc/wheaton.o(.text); asm/pita.o(.text); asm/minishEzlo.o(.text); - src/mailbox.o(.text); + src/npc/mailbox.o(.text); asm/beedle.o(.text); asm/brocco.o(.text); asm/sittingPerson.o(.text); asm/pina.o(.text); - src/guard.o(.text); + src/npc/guard.o(.text); asm/guardWithSpear.o(.text); asm/castleMaid.o(.text); asm/din.o(.text); @@ -562,38 +563,38 @@ SECTIONS { asm/sturgeon.o(.text); asm/tingleSiblings.o(.text); asm/stockwell.o(.text); - src/talon.o(.text); - src/malon.o(.text); - src/epona.o(.text); - src/milkCart.o(.text); + src/npc/talon.o(.text); + src/npc/malon.o(.text); + src/npc/epona.o(.text); + src/npc/milkCart.o(.text); asm/ghostBrothers.o(.text); - src/smith.o(.text); + src/npc/smith.o(.text); asm/npc23.o(.text); asm/kingDaltus.o(.text); asm/ministerPotho.o(.text); asm/npc26.o(.text); asm/vaati.o(.text); - src/zelda.o(.text); - src/mutoh.o(.text); - src/carpenter.o(.text); + src/npc/zelda.o(.text); + src/npc/mutoh.o(.text); + src/npc/carpenter.o(.text); asm/carpenter.o(.text); asm/castorWildsStatue.o(.text); - src/cat.o(.text); + src/npc/cat.o(.text); asm/cat.o(.text); asm/mountainMinish.o(.text); asm/zeldaFollower.o(.text); asm/melari.o(.text); - src/bladeBrothers.o(.text); - src/cow.o(.text); - src/goron.o(.text); + src/npc/bladeBrothers.o(.text); + src/npc/cow.o(.text); + src/npc/goron.o(.text); asm/goronMerchant.o(.text); asm/gorman.o(.text); asm/dog.o(.text); - src/syrup.o(.text); + src/npc/syrup.o(.text); asm/syrup.o(.text); - src/rem.o(.text); + src/npc/rem.o(.text); asm/rem.o(.text); - src/townMinish.o(.text); + src/npc/townMinish.o(.text); asm/townMinish.o(.text); asm/librari.o(.text); asm/percy.o(.text); @@ -602,24 +603,24 @@ SECTIONS { asm/librarians.o(.text); asm/farmers.o(.text); asm/carlov.o(.text); - src/dampe.o(.text); + src/npc/dampe.o(.text); asm/drLeft.o(.text); asm/kingGustaf.o(.text); asm/gina.o(.text); - src/simon.o(.text); + src/npc/simon.o(.text); asm/anju.o(.text); asm/mama.o(.text); - src/emma.o(.text); - src/teachers.o(.text); - src/windTribespeople.o(.text); + src/npc/emma.o(.text); + src/npc/teachers.o(.text); + src/npc/windTribespeople.o(.text); asm/windTribespeople.o(.text); asm/gregal.o(.text); asm/mayorHagen.o(.text); - src/bigGoron.o(.text); + src/npc/bigGoron.o(.text); asm/bigGoron.o(.text); asm/ezloCap.o(.text); asm/npc4E.o(.text); - src/clothesRack.o(.text); + src/npc/clothesRack.o(.text); asm/clothesRack.o(.text); asm/picolyteBottles.o(.text); asm/smallTownMinish.o(.text); @@ -671,7 +672,7 @@ SECTIONS { asm/object9.o(.text); asm/objectA.o(.text); asm/objectB.o(.text); - src/chestSpawner.o(.text); + src/object/chestSpawner.o(.text); asm/chestSpawner.o(.text); asm/objectD.o(.text); asm/objectE.o(.text); @@ -679,18 +680,18 @@ SECTIONS { asm/object10.o(.text); asm/object11.o(.text); asm/object12.o(.text); - src/railtrack.o(.text); + src/object/railtrack.o(.text); asm/lilypadLarge.o(.text); asm/object15.o(.text); asm/floatingPlatform.o(.text); asm/object17.o(.text); asm/evilSpirit.o(.text); asm/houseDoorExterior.o(.text); - src/object1A.o(.text); - src/greatFairy.o(.text); + src/object/object1A.o(.text); + src/object/greatFairy.o(.text); asm/greatFairy.o(.text); - src/object1C.o(.text); - src/object1D.o(.text); + src/object/object1C.o(.text); + src/object/object1D.o(.text); asm/object1E.o(.text); asm/object1F.o(.text); asm/object20.o(.text); @@ -706,7 +707,7 @@ SECTIONS { asm/object2A.o(.text); asm/object2B.o(.text); asm/beanstalk.o(.text); - src/smoke.o(.text); + src/object/smoke.o(.text); asm/pushableRock.o(.text); asm/hittableLever.o(.text); asm/object30.o(.text); @@ -727,7 +728,7 @@ SECTIONS { asm/macroLink.o(.text); asm/object3D.o(.text); asm/object3E.o(.text); - src/giantLeaf.o(.text); + src/object/giantLeaf.o(.text); asm/fairy.o(.text); asm/ladderUp.o(.text); asm/object42.o(.text); @@ -735,35 +736,35 @@ SECTIONS { asm/object44.o(.text); asm/object45.o(.text); asm/giantBookLadder.o(.text); - src/heartContainer.o(.text); + src/object/heartContainer.o(.text); asm/heartContainer.o(.text); asm/object48.o(.text); - src/object49.o(.text); + src/object/object49.o(.text); asm/object49.o(.text); asm/backgroundCloud.o(.text); asm/object4B.o(.text); asm/pushableFurniture.o(.text); asm/furniture.o(.text); - src/minishSizedEntrance.o(.text); + src/object/minishSizedEntrance.o(.text); asm/minishSizedEntrance.o(.text); - src/archway.o(.text); + src/object/archway.o(.text); asm/giantRock.o(.text); asm/object51.o(.text); asm/object52.o(.text); asm/object53.o(.text); asm/pullableLever.o(.text); asm/minecart.o(.text); - src/thoughtBubble.o(.text); + src/object/thoughtBubble.o(.text); asm/hiddenLadderDown.o(.text); asm/gentariCurtains.o(.text); asm/lavaPlatform.o(.text); asm/object5A.o(.text); asm/object5B.o(.text); - src/mask.o(.text); + src/object/mask.o(.text); asm/houseDoorInterior.o(.text); asm/whirlwind.o(.text); asm/objectBlockingStairs.o(.text); - src/swordsmanNewsletter.o(.text); + src/object/swordsmanNewsletter.o(.text); asm/object61.o(.text); asm/giantTwig.o(.text); asm/object63.o(.text); @@ -777,14 +778,14 @@ SECTIONS { asm/crenalBeanSprout.o(.text); asm/minecartDoor.o(.text); asm/objectOnPillar.o(.text); - src/mineralWaterSource.o(.text); + src/object/mineralWaterSource.o(.text); asm/minishSizedArchway.o(.text); asm/object70.o(.text); asm/pushableGrave.o(.text); asm/object72.o(.text); asm/lilypadSmall.o(.text); asm/object74.o(.text); - src/bell.o(.text); + src/object/bell.o(.text); asm/macroDecorations.o(.text); asm/object79.o(.text); asm/steam.o(.text); @@ -799,7 +800,7 @@ SECTIONS { asm/bigPushableLever.o(.text); asm/smallIceBlock.o(.text); asm/bigIceBlock.o(.text); - src/object86.o(.text); + src/object/object86.o(.text); asm/object87.o(.text); asm/macroBook.o(.text); asm/object89.o(.text); @@ -813,7 +814,7 @@ SECTIONS { asm/object91.o(.text); asm/bakerOven.o(.text); asm/object93.o(.text); - src/windTribeFlag.o(.text); + src/object/windTribeFlag.o(.text); asm/bird.o(.text); asm/object96.o(.text); asm/object97.o(.text); @@ -821,21 +822,21 @@ SECTIONS { asm/object99.o(.text); asm/macroAcorn.o(.text); asm/object9B.o(.text); - src/treeHidingPortal.o(.text); + src/object/treeHidingPortal.o(.text); asm/treeHidingPortal.o(.text); - src/lightableSwitch.o(.text); - src/object9E.o(.text); - src/fan.o(.text); + src/object/lightableSwitch.o(.text); + src/object/object9E.o(.text); + src/object/fan.o(.text); asm/fan.o(.text); asm/objectA0.o(.text); asm/palaceArchway.o(.text); asm/objectA2.o(.text); - src/cloud.o(.text); + src/object/cloud.o(.text); asm/minishLight.o(.text); asm/objectA5.o(.text); asm/objectA6.o(.text); asm/objectA7.o(.text); - src/objectA8.o(.text); + src/object/objectA8.o(.text); asm/objectA8.o(.text); asm/objectA9.o(.text); asm/waterfallOpening.o(.text); @@ -844,18 +845,18 @@ SECTIONS { asm/objectAD.o(.text); asm/floatingBlock.o(.text); asm/objectAF.o(.text); - src/metalDoor.o(.text); + src/object/metalDoor.o(.text); asm/jailBars.o(.text); asm/objectB2.o(.text); asm/objectB3.o(.text); asm/objectB4.o(.text); asm/objectB5.o(.text); asm/objectB6.o(.text); - src/well.o(.text); + src/object/well.o(.text); asm/windTribeTeleporter.o(.text); asm/objectB9.o(.text); asm/objectBA.o(.text); - src/windcrest.o(.text); + src/object/windcrest.o(.text); asm/litArea.o(.text); asm/objectBD.o(.text); asm/pinwheel.o(.text); @@ -914,7 +915,7 @@ SECTIONS { data/data_080D5360.o(.rodata); src/item.o(.rodata); data/data_0811BD44.o(.rodata); - src/greatFairy.o(.rodata); + src/object/greatFairy.o(.rodata); data/greatFairyAnimations.o(.rodata); data/data_081208A0.o(.rodata); data/strings.o(.rodata); diff --git a/src/bladeTrap.c b/src/enemy/bladeTrap.c similarity index 100% rename from src/bladeTrap.c rename to src/enemy/bladeTrap.c diff --git a/src/bombPeahat.c b/src/enemy/bombPeahat.c similarity index 100% rename from src/bombPeahat.c rename to src/enemy/bombPeahat.c diff --git a/src/bowMoblin.c b/src/enemy/bowMoblin.c similarity index 100% rename from src/bowMoblin.c rename to src/enemy/bowMoblin.c diff --git a/src/hangingSeed.c b/src/enemy/hangingSeed.c similarity index 100% rename from src/hangingSeed.c rename to src/enemy/hangingSeed.c diff --git a/src/keese.c b/src/enemy/keese.c similarity index 100% rename from src/keese.c rename to src/enemy/keese.c diff --git a/src/lakitu.c b/src/enemy/lakitu.c similarity index 100% rename from src/lakitu.c rename to src/enemy/lakitu.c diff --git a/src/lakituCloud.c b/src/enemy/lakituCloud.c similarity index 100% rename from src/lakituCloud.c rename to src/enemy/lakituCloud.c diff --git a/src/miniFireballGuy.c b/src/enemy/miniFireballGuy.c similarity index 100% rename from src/miniFireballGuy.c rename to src/enemy/miniFireballGuy.c diff --git a/src/octorok.c b/src/enemy/octorok.c similarity index 100% rename from src/octorok.c rename to src/enemy/octorok.c diff --git a/src/slime.c b/src/enemy/slime.c similarity index 100% rename from src/slime.c rename to src/enemy/slime.c diff --git a/src/smallPesto.c b/src/enemy/smallPesto.c similarity index 100% rename from src/smallPesto.c rename to src/enemy/smallPesto.c diff --git a/src/manager1.c b/src/manager/manager1.c similarity index 100% rename from src/manager1.c rename to src/manager/manager1.c diff --git a/src/manager2.c b/src/manager/manager2.c similarity index 100% rename from src/manager2.c rename to src/manager/manager2.c diff --git a/src/manager27.c b/src/manager/manager27.c similarity index 100% rename from src/manager27.c rename to src/manager/manager27.c diff --git a/src/manager2E.c b/src/manager/manager2E.c similarity index 100% rename from src/manager2E.c rename to src/manager/manager2E.c diff --git a/src/bigGoron.c b/src/npc/bigGoron.c similarity index 100% rename from src/bigGoron.c rename to src/npc/bigGoron.c diff --git a/src/bladeBrothers.c b/src/npc/bladeBrothers.c similarity index 100% rename from src/bladeBrothers.c rename to src/npc/bladeBrothers.c diff --git a/src/carpenter.c b/src/npc/carpenter.c similarity index 100% rename from src/carpenter.c rename to src/npc/carpenter.c diff --git a/src/cat.c b/src/npc/cat.c similarity index 100% rename from src/cat.c rename to src/npc/cat.c diff --git a/src/clothesRack.c b/src/npc/clothesRack.c similarity index 100% rename from src/clothesRack.c rename to src/npc/clothesRack.c diff --git a/src/cow.c b/src/npc/cow.c similarity index 100% rename from src/cow.c rename to src/npc/cow.c diff --git a/src/dampe.c b/src/npc/dampe.c similarity index 100% rename from src/dampe.c rename to src/npc/dampe.c diff --git a/src/emma.c b/src/npc/emma.c similarity index 100% rename from src/emma.c rename to src/npc/emma.c diff --git a/src/epona.c b/src/npc/epona.c similarity index 100% rename from src/epona.c rename to src/npc/epona.c diff --git a/src/festari.c b/src/npc/festari.c similarity index 100% rename from src/festari.c rename to src/npc/festari.c diff --git a/src/forestMinish.c b/src/npc/forestMinish.c similarity index 100% rename from src/forestMinish.c rename to src/npc/forestMinish.c diff --git a/src/gentari.c b/src/npc/gentari.c similarity index 100% rename from src/gentari.c rename to src/npc/gentari.c diff --git a/src/goron.c b/src/npc/goron.c similarity index 100% rename from src/goron.c rename to src/npc/goron.c diff --git a/src/guard.c b/src/npc/guard.c similarity index 100% rename from src/guard.c rename to src/npc/guard.c diff --git a/src/mailbox.c b/src/npc/mailbox.c similarity index 100% rename from src/mailbox.c rename to src/npc/mailbox.c diff --git a/src/malon.c b/src/npc/malon.c similarity index 100% rename from src/malon.c rename to src/npc/malon.c diff --git a/src/milkCart.c b/src/npc/milkCart.c similarity index 100% rename from src/milkCart.c rename to src/npc/milkCart.c diff --git a/src/mutoh.c b/src/npc/mutoh.c similarity index 100% rename from src/mutoh.c rename to src/npc/mutoh.c diff --git a/src/postman.c b/src/npc/postman.c similarity index 100% rename from src/postman.c rename to src/npc/postman.c diff --git a/src/rem.c b/src/npc/rem.c similarity index 100% rename from src/rem.c rename to src/npc/rem.c diff --git a/src/simon.c b/src/npc/simon.c similarity index 100% rename from src/simon.c rename to src/npc/simon.c diff --git a/src/smith.c b/src/npc/smith.c similarity index 100% rename from src/smith.c rename to src/npc/smith.c diff --git a/src/stamp.c b/src/npc/stamp.c similarity index 100% rename from src/stamp.c rename to src/npc/stamp.c diff --git a/src/syrup.c b/src/npc/syrup.c similarity index 100% rename from src/syrup.c rename to src/npc/syrup.c diff --git a/src/talon.c b/src/npc/talon.c similarity index 100% rename from src/talon.c rename to src/npc/talon.c diff --git a/src/teachers.c b/src/npc/teachers.c similarity index 100% rename from src/teachers.c rename to src/npc/teachers.c diff --git a/src/townMinish.c b/src/npc/townMinish.c similarity index 100% rename from src/townMinish.c rename to src/npc/townMinish.c diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c new file mode 100644 index 00000000..454474cb --- /dev/null +++ b/src/npc/townsperson.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "link.h" +#include "textbox.h" + +extern void (*const gUnk_0810B774[])(Entity*); +extern void (*const gUnk_0810B77C[])(Entity*); +extern void sub_08061CB4(Entity*, u32); +extern u32 sub_0806ED9C(Entity*, u32, u32); +extern void sub_0806ED78(Entity*); + +extern SpriteLoadData* gUnk_0810B6EC[]; + +void Townsperson(Entity *this) +{ + if ((this->flags & 2) != 0) { + gUnk_0810B77C[this->action](this); + } + else { + gUnk_0810B774[this->action](this); + } +} + +void sub_08061BC8(Entity *this) +{ + if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form])) { + this->animationState = 2; + this->field_0xf = this->entityType.form + 1; + this->action++; + sub_08061CB4(this, 2); + } +} + +void sub_08061C00(Entity *this) +{ + s32 uVar1; + + uVar1 = sub_0806ED9C(this, 0x20, 0x20); + if (uVar1 < 0) { + uVar1 = this->animationState + 4; + } + else { + if (this->field_0xf == 0) { + this->field_0xf = 0x10; + } + else { + this->field_0xf--; + uVar1 = this->animIndex & 3; + } + } + sub_08061CB4(this, uVar1); + sub_0806ED78(this); + if (this->interactType != 0) { + this->interactType = 0; + TextboxNoOverlapFollow(this->entityType.parameter + 0xa01); + } +} \ No newline at end of file diff --git a/src/wheaton.c b/src/npc/wheaton.c similarity index 100% rename from src/wheaton.c rename to src/npc/wheaton.c diff --git a/src/windTribespeople.c b/src/npc/windTribespeople.c similarity index 100% rename from src/windTribespeople.c rename to src/npc/windTribespeople.c diff --git a/src/zelda.c b/src/npc/zelda.c similarity index 100% rename from src/zelda.c rename to src/npc/zelda.c diff --git a/src/archway.c b/src/object/archway.c similarity index 100% rename from src/archway.c rename to src/object/archway.c diff --git a/src/bell.c b/src/object/bell.c similarity index 100% rename from src/bell.c rename to src/object/bell.c diff --git a/src/chestSpawner.c b/src/object/chestSpawner.c similarity index 100% rename from src/chestSpawner.c rename to src/object/chestSpawner.c diff --git a/src/cloud.c b/src/object/cloud.c similarity index 100% rename from src/cloud.c rename to src/object/cloud.c diff --git a/src/fan.c b/src/object/fan.c similarity index 100% rename from src/fan.c rename to src/object/fan.c diff --git a/src/giantLeaf.c b/src/object/giantLeaf.c similarity index 100% rename from src/giantLeaf.c rename to src/object/giantLeaf.c diff --git a/src/greatFairy.c b/src/object/greatFairy.c similarity index 100% rename from src/greatFairy.c rename to src/object/greatFairy.c diff --git a/src/heartContainer.c b/src/object/heartContainer.c similarity index 100% rename from src/heartContainer.c rename to src/object/heartContainer.c diff --git a/src/lightableSwitch.c b/src/object/lightableSwitch.c similarity index 100% rename from src/lightableSwitch.c rename to src/object/lightableSwitch.c diff --git a/src/mask.c b/src/object/mask.c similarity index 100% rename from src/mask.c rename to src/object/mask.c diff --git a/src/metalDoor.c b/src/object/metalDoor.c similarity index 100% rename from src/metalDoor.c rename to src/object/metalDoor.c diff --git a/src/mineralWaterSource.c b/src/object/mineralWaterSource.c similarity index 100% rename from src/mineralWaterSource.c rename to src/object/mineralWaterSource.c diff --git a/src/minishSizedEntrance.c b/src/object/minishSizedEntrance.c similarity index 100% rename from src/minishSizedEntrance.c rename to src/object/minishSizedEntrance.c diff --git a/src/object1A.c b/src/object/object1A.c similarity index 100% rename from src/object1A.c rename to src/object/object1A.c diff --git a/src/object1C.c b/src/object/object1C.c similarity index 100% rename from src/object1C.c rename to src/object/object1C.c diff --git a/src/object1D.c b/src/object/object1D.c similarity index 100% rename from src/object1D.c rename to src/object/object1D.c diff --git a/src/object49.c b/src/object/object49.c similarity index 100% rename from src/object49.c rename to src/object/object49.c diff --git a/src/object86.c b/src/object/object86.c similarity index 100% rename from src/object86.c rename to src/object/object86.c diff --git a/src/object9E.c b/src/object/object9E.c similarity index 100% rename from src/object9E.c rename to src/object/object9E.c diff --git a/src/objectA8.c b/src/object/objectA8.c similarity index 100% rename from src/objectA8.c rename to src/object/objectA8.c diff --git a/src/railtrack.c b/src/object/railtrack.c similarity index 100% rename from src/railtrack.c rename to src/object/railtrack.c diff --git a/src/smoke.c b/src/object/smoke.c similarity index 100% rename from src/smoke.c rename to src/object/smoke.c diff --git a/src/swordsmanNewsletter.c b/src/object/swordsmanNewsletter.c similarity index 100% rename from src/swordsmanNewsletter.c rename to src/object/swordsmanNewsletter.c diff --git a/src/thoughtBubble.c b/src/object/thoughtBubble.c similarity index 100% rename from src/thoughtBubble.c rename to src/object/thoughtBubble.c diff --git a/src/treeHidingPortal.c b/src/object/treeHidingPortal.c similarity index 100% rename from src/treeHidingPortal.c rename to src/object/treeHidingPortal.c diff --git a/src/well.c b/src/object/well.c similarity index 100% rename from src/well.c rename to src/object/well.c diff --git a/src/windTribeFlag.c b/src/object/windTribeFlag.c similarity index 100% rename from src/windTribeFlag.c rename to src/object/windTribeFlag.c diff --git a/src/windcrest.c b/src/object/windcrest.c similarity index 100% rename from src/windcrest.c rename to src/object/windcrest.c From 94b6040d7d1455e26372b91b01a20dd1c6bec3e7 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 13 Jul 2020 19:49:27 -0700 Subject: [PATCH 24/25] townsperson.c 1 nonmatching --- asm/non_matching/townsperson/sub_08061C60.inc | 46 ++ asm/townsperson.s | 598 ------------------ linker.ld | 1 - src/npc/townsperson.c | 332 +++++++++- 4 files changed, 345 insertions(+), 632 deletions(-) create mode 100644 asm/non_matching/townsperson/sub_08061C60.inc delete mode 100644 asm/townsperson.s diff --git a/asm/non_matching/townsperson/sub_08061C60.inc b/asm/non_matching/townsperson/sub_08061C60.inc new file mode 100644 index 00000000..d1064414 --- /dev/null +++ b/asm/non_matching/townsperson/sub_08061C60.inc @@ -0,0 +1,46 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, lr} + adds r4, r0, #0 + adds r0, #0x58 + ldrb r1, [r0] + movs r0, #3 + ands r0, r1 + ldr r1, _08061CAC @ =gUnk_0810B78C + adds r0, r0, r1 + ldrb r1, [r0] + ldr r5, _08061CB0 @ =gUnk_0810B680 + ldrb r0, [r4, #0xa] + lsls r0, r0, #2 + adds r0, r0, r5 + ldrb r2, [r0] + adds r2, r1, r2 + adds r0, r4, #0 + movs r1, #0 + bl SetExtraSpriteFrame + ldrb r2, [r4, #0x1e] + ldrb r0, [r4, #0xa] + lsls r0, r0, #2 + adds r0, r0, r5 + ldrb r0, [r0, #1] + adds r2, r2, r0 + adds r0, r4, #0 + movs r1, #1 + bl SetExtraSpriteFrame + adds r0, r4, #0 + movs r1, #1 + movs r2, #0 + bl SetSpriteSubEntryOffsetData1 + adds r0, r4, #0 + bl sub_0807000C + pop {r4, r5, pc} + .align 2, 0 +_08061CAC: .4byte gUnk_0810B78C +_08061CB0: .4byte gUnk_0810B680 + .syntax divided \ No newline at end of file diff --git a/asm/townsperson.s b/asm/townsperson.s deleted file mode 100644 index 32bf8e55..00000000 --- a/asm/townsperson.s +++ /dev/null @@ -1,598 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Townsperson_Head -Townsperson_Head: @ 0x08061C60 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x58 - ldrb r1, [r0] - movs r0, #3 - ands r0, r1 - ldr r1, _08061CAC @ =gUnk_0810B78C - adds r0, r0, r1 - ldrb r1, [r0] - ldr r5, _08061CB0 @ =gUnk_0810B680 - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r5 - ldrb r2, [r0] - adds r2, r1, r2 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r5 - ldrb r0, [r0, #1] - adds r2, r2, r0 - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, r5, pc} - .align 2, 0 -_08061CAC: .4byte gUnk_0810B78C -_08061CB0: .4byte gUnk_0810B680 - - thumb_func_start sub_08061CB4 -sub_08061CB4: @ 0x08061CB4 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, r1 - beq _08061CC8 - adds r0, r4, #0 - bl InitializeAnimation - b _08061CCE -_08061CC8: - adds r0, r4, #0 - bl GetNextFrame -_08061CCE: - adds r2, r4, #0 - adds r2, #0x59 - ldrb r0, [r2] - cmp r0, #0xff - bne _08061CE4 - ldr r0, _08061CE8 @ =gUnk_0810B680 - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r0, [r1, #2] - strb r0, [r2] -_08061CE4: - pop {r4, pc} - .align 2, 0 -_08061CE8: .4byte gUnk_0810B680 - - thumb_func_start sub_08061CEC -sub_08061CEC: @ 0x08061CEC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08061D38 @ =gUnk_0810B6EC - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08061D62 - 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 r1, r4, #0 - adds r1, #0x69 - movs r0, #0xff - strb r0, [r1] - adds r0, r4, #0 - bl sub_0805ACC0 - adds r1, r0, #0 - cmp r1, #0 - bne _08061D3C - ldrh r0, [r4, #0x2e] - adds r1, r4, #0 - adds r1, #0x6a - strh r0, [r1] - ldrh r1, [r4, #0x32] - b _08061D44 - .align 2, 0 -_08061D38: .4byte gUnk_0810B6EC -_08061D3C: - lsrs r0, r1, #0x10 - adds r2, r4, #0 - adds r2, #0x6a - strh r0, [r2] -_08061D44: - adds r0, r4, #0 - adds r0, #0x6c - strh r1, [r0] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - bl sub_08061D64 -_08061D62: - pop {r4, pc} - - thumb_func_start sub_08061D64 -sub_08061D64: @ 0x08061D64 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r5, #0 - adds r4, #0x39 - movs r0, #0 - ldrsb r0, [r4, r0] - cmp r0, #2 - bne _08061DB0 - movs r1, #0 - movs r0, #3 - strb r0, [r5, #0xc] - strb r1, [r4] - adds r0, r5, #0 - bl sub_0806F118 - adds r4, #0x1f - ldrb r0, [r4] - adds r1, r5, #0 - adds r1, #0x69 - strb r0, [r1] - ldr r1, _08061DAC @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - ldrb r1, [r4] - movs r2, #4 - rsbs r2, r2, #0 - ands r1, r2 - adds r1, r1, r0 - adds r0, r5, #0 - bl InitializeAnimation - b _08061E18 - .align 2, 0 -_08061DAC: .4byte gLinkEntity -_08061DB0: - adds r0, r5, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r5, #0 - bl sub_0807DDE4 - adds r2, r5, #0 - adds r2, #0x59 - ldrb r0, [r2] - cmp r0, #0xff - bne _08061DD4 - ldr r0, _08061E1C @ =gUnk_0810B680 - ldrb r1, [r5, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r0, [r1, #2] - strb r0, [r2] -_08061DD4: - adds r0, r5, #0 - bl GetNextFrame - movs r0, #0 - ldrsb r0, [r4, r0] - cmp r0, #0 - beq _08061E18 - movs r1, #0 - movs r0, #2 - strb r0, [r5, #0xc] - strb r1, [r4] - adds r0, r5, #0 - bl sub_08062048 - adds r4, r5, #0 - adds r4, #0x58 - ldrb r0, [r4] - adds r1, r5, #0 - adds r1, #0x69 - strb r0, [r1] - ldr r1, _08061E20 @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - ldrb r1, [r4] - movs r2, #4 - rsbs r2, r2, #0 - ands r1, r2 - adds r1, r1, r0 - adds r0, r5, #0 - bl InitializeAnimation -_08061E18: - pop {r4, r5, pc} - .align 2, 0 -_08061E1C: .4byte gUnk_0810B680 -_08061E20: .4byte gLinkEntity - - thumb_func_start sub_08061E24 -sub_08061E24: @ 0x08061E24 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - ldr r0, _08061E4C @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08061E48 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x69 - ldrb r1, [r0] - adds r0, r4, #0 - bl InitializeAnimation -_08061E48: - pop {r4, pc} - .align 2, 0 -_08061E4C: .4byte gTextBox - - thumb_func_start sub_08061E50 -sub_08061E50: @ 0x08061E50 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _08061E6C - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x69 - ldrb r1, [r0] - adds r0, r4, #0 - bl InitializeAnimation -_08061E6C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08061E70 -sub_08061E70: @ 0x08061E70 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #9] - cmp r0, #6 - bne _08061E88 - adds r0, r2, #0 - adds r0, #0x68 - ldrb r1, [r0] - adds r0, r2, #0 - bl sub_08078784 - b _08061E8E -_08061E88: - adds r0, r2, #0 - bl sub_08078778 -_08061E8E: - pop {pc} - - thumb_func_start sub_08061E90 -sub_08061E90: @ 0x08061E90 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldrb r0, [r5, #0x18] - cmp r0, #0 - bne _08061F04 - adds r0, #1 - strb r0, [r5, #0x18] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x20 - strh r0, [r5, #0x12] - bl Random - adds r1, r0, #0 - movs r0, #0x18 - ands r1, r0 - ldrb r0, [r4, #0x15] - cmp r0, #8 - beq _08061ED8 - cmp r0, #8 - bgt _08061EC6 - cmp r0, #0 - beq _08061ED0 - b _08061EEE -_08061EC6: - cmp r0, #0x10 - beq _08061EE0 - cmp r0, #0x18 - beq _08061EE8 - b _08061EEE -_08061ED0: - cmp r1, #0x10 - bne _08061EEE - movs r1, #8 - b _08061EEE -_08061ED8: - cmp r1, #0x18 - bne _08061EEE - movs r1, #0x10 - b _08061EEE -_08061EE0: - cmp r1, #0 - bne _08061EEE - movs r1, #0x18 - b _08061EEE -_08061EE8: - cmp r1, #8 - bne _08061EEE - movs r1, #0 -_08061EEE: - strb r1, [r4, #0x15] - adds r0, r1, #0 - bl sub_0806F5B0 - strb r0, [r4, #0x14] - ldr r1, _08061F8C @ =gUnk_0810B74A - ldrb r0, [r4, #0xa] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r4, #0x24] -_08061F04: - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - adds r1, r0, #4 - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r1, r0 - beq _08061F1A - adds r0, r4, #0 - bl InitializeAnimation -_08061F1A: - adds r0, r4, #0 - bl sub_080AEF88 - movs r0, #0x2e - ldrsh r1, [r4, r0] - adds r2, r4, #0 - adds r2, #0x6a - movs r3, #0 - ldrsh r0, [r2, r3] - subs r1, r1, r0 - cmp r1, #0x10 - ble _08061F3C - ldrh r0, [r2] - adds r0, #0x10 - strh r0, [r4, #0x2e] - movs r0, #1 - strh r0, [r5, #0x12] -_08061F3C: - movs r3, #0x10 - rsbs r3, r3, #0 - cmp r1, r3 - bge _08061F4E - ldrh r0, [r2] - subs r0, #0x10 - strh r0, [r4, #0x2e] - movs r0, #1 - strh r0, [r5, #0x12] -_08061F4E: - movs r6, #0x32 - ldrsh r1, [r4, r6] - adds r2, r4, #0 - adds r2, #0x6c - movs r6, #0 - ldrsh r0, [r2, r6] - subs r1, r1, r0 - cmp r1, #0x10 - ble _08061F6A - ldrh r0, [r2] - adds r0, #0x10 - strh r0, [r4, #0x32] - movs r0, #1 - strh r0, [r5, #0x12] -_08061F6A: - cmp r1, r3 - bge _08061F78 - ldrh r0, [r2] - subs r0, #0x10 - strh r0, [r4, #0x32] - movs r0, #1 - strh r0, [r5, #0x12] -_08061F78: - ldrh r0, [r5, #0x12] - subs r0, #1 - strh r0, [r5, #0x12] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _08061F8A - ldr r1, _08061F90 @ =gUnk_02033280 - movs r0, #0 - strb r0, [r1, #6] -_08061F8A: - pop {r4, r5, r6, pc} - .align 2, 0 -_08061F8C: .4byte gUnk_0810B74A -_08061F90: .4byte gUnk_02033280 - - thumb_func_start sub_08061F94 -sub_08061F94: @ 0x08061F94 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x35 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08061FAC - adds r0, r4, #0 - bl ResolveEntityOnTop -_08061FAC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08061FB0 -sub_08061FB0: @ 0x08061FB0 - movs r1, #0 - str r1, [r0, #0x48] - bx lr - .align 2, 0 - - thumb_func_start sub_08061FB8 -sub_08061FB8: @ 0x08061FB8 - push {lr} - ldr r2, _08061FD0 @ =gUnk_0810B748 - ldr r3, [r1, #4] - adds r2, r3, r2 - ldrb r2, [r2] - lsls r3, r3, #2 - ldr r1, _08061FD4 @ =gUnk_0810B740 - adds r3, r3, r1 - movs r1, #1 - bl sub_08078850 - pop {pc} - .align 2, 0 -_08061FD0: .4byte gUnk_0810B748 -_08061FD4: .4byte gUnk_0810B740 - - thumb_func_start sub_08061FD8 -sub_08061FD8: @ 0x08061FD8 - push {lr} - ldrb r1, [r0, #0x14] - lsrs r1, r1, #1 - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_08061FE4 -sub_08061FE4: @ 0x08061FE4 - push {lr} - ldrb r1, [r0, #0x14] - lsrs r1, r1, #1 - adds r1, #4 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_08061FF4 -sub_08061FF4: @ 0x08061FF4 - push {lr} - adds r1, r0, #0 - ldr r2, _08062008 @ =gUnk_0810B790 - ldrb r0, [r1, #0xa] - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - bl TextboxNoOverlap - pop {pc} - .align 2, 0 -_08062008: .4byte gUnk_0810B790 - - thumb_func_start sub_0806200C -sub_0806200C: @ 0x0806200C - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - beq _08062034 - movs r0, #0x6b - bl CheckLocalFlag - cmp r0, #0 - beq _08062034 - movs r0, #0x39 - bl GetInventoryValue - movs r4, #1 - cmp r0, #2 - bne _08062034 - movs r4, #2 -_08062034: - ldr r0, _08062044 @ =gUnk_0810B7BA - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_08062044: .4byte gUnk_0810B7BA - - thumb_func_start sub_08062048 -sub_08062048: @ 0x08062048 - push {lr} - adds r3, r0, #0 - ldrb r0, [r3, #9] - cmp r0, #6 - bne _0806207C - ldr r0, _08062074 @ =gUnk_02002A40 - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _0806205E - movs r0, #0 -_0806205E: - ldrb r1, [r3, #0xa] - lsls r1, r1, #6 - lsls r0, r0, #3 - ldr r2, _08062078 @ =gUnk_0810B7C0 - adds r0, r0, r2 - adds r1, r1, r0 - adds r0, r3, #0 - bl ShowNPCDialogue - b _08062084 - .align 2, 0 -_08062074: .4byte gUnk_02002A40 -_08062078: .4byte gUnk_0810B7C0 -_0806207C: - movs r0, #0 - adds r1, r3, #0 - bl TextboxNoOverlap -_08062084: - pop {pc} - .align 2, 0 - - thumb_func_start Townsperson_Fusion -Townsperson_Fusion: @ 0x08062088 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080620BA - ldr r1, _080620C4 @ =gUnk_0810B6EC - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _080620C2 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] -_080620BA: - adds r0, r4, #0 - movs r1, #6 - bl sub_08061CB4 -_080620C2: - pop {r4, pc} - .align 2, 0 -_080620C4: .4byte gUnk_0810B6EC diff --git a/linker.ld b/linker.ld index 70de38a4..8710c675 100644 --- a/linker.ld +++ b/linker.ld @@ -541,7 +541,6 @@ SECTIONS { asm/postman.o(.text); asm/npc5.o(.text); src/npc/townsperson.o(.text); - asm/townsperson.o(.text); asm/kid.o(.text); asm/npc9.o(.text); src/npc/stamp.o(.text); diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c index 454474cb..7c4bf877 100644 --- a/src/npc/townsperson.c +++ b/src/npc/townsperson.c @@ -3,56 +3,322 @@ #include "npc.h" #include "link.h" #include "textbox.h" +#include "flags.h" + +typedef struct { + u8 frame1; + u8 frame2; + u8 unk2; + u8 unk3; +} struct_0810B680; + +typedef struct { + u32 unk; + u32 unk2; +} struct_08061FB8; extern void (*const gUnk_0810B774[])(Entity*); extern void (*const gUnk_0810B77C[])(Entity*); extern void sub_08061CB4(Entity*, u32); extern u32 sub_0806ED9C(Entity*, u32, u32); extern void sub_0806ED78(Entity*); +extern u32 sub_0805ACC0(Entity*); +extern u32 sub_0801E99C(Entity*); +extern void sub_0807DD64(Entity*); +extern void sub_08061D64(Entity*); +extern void sub_0806F118(Entity*); +extern u32 sub_0806F5A4(u32); +extern u32 GetFacingDirection(Entity*, Entity*); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern void sub_08062048(Entity*); +extern void sub_08078784(Entity*, u32); +extern void sub_08078778(Entity*); +extern u32 sub_0806F5B0(u32); +extern void sub_080AEF88(Entity*); +extern u32 Random(void); +extern void ResolveEntityOnTop(Entity*, Entity*); +extern void sub_08078850(Entity*, u32, u8, u32*); extern SpriteLoadData* gUnk_0810B6EC[]; +extern u8 gUnk_0810B78C[]; +extern struct_0810B680 gUnk_0810B680[]; +extern u16 gUnk_0810B74A[]; +extern u8 gUnk_02033280[]; +extern u8 gUnk_0810B748[]; +extern u32 gUnk_0810B740[]; +extern u16 gUnk_0810B790[]; +extern u16 gUnk_0810B7BA[]; +extern u32 gUnk_0810B7C0[]; -void Townsperson(Entity *this) -{ - if ((this->flags & 2) != 0) { - gUnk_0810B77C[this->action](this); - } - else { - gUnk_0810B774[this->action](this); - } +void Townsperson(Entity* this) { + if ((this->flags & 2) != 0) { + gUnk_0810B77C[this->action](this); + } else { + gUnk_0810B774[this->action](this); + } } -void sub_08061BC8(Entity *this) -{ - if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form])) { - this->animationState = 2; - this->field_0xf = this->entityType.form + 1; - this->action++; - sub_08061CB4(this, 2); - } +void sub_08061BC8(Entity* this) { + if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form])) { + this->animationState = 2; + this->field_0xf = this->entityType.form + 1; + this->action++; + sub_08061CB4(this, 2); + } } -void sub_08061C00(Entity *this) +void sub_08061C00(Entity* this) { + s32 uVar1; + + uVar1 = sub_0806ED9C(this, 0x20, 0x20); + if (uVar1 < 0) { + uVar1 = this->animationState + 4; + } else { + if (this->field_0xf == 0) { + this->field_0xf = 0x10; + } else { + this->field_0xf--; + uVar1 = this->animIndex & 3; + } + } + sub_08061CB4(this, uVar1); + sub_0806ED78(this); + if (this->interactType != 0) { + this->interactType = 0; + TextboxNoOverlapFollow(this->entityType.parameter + 0xa01); + } +} + +#if NON_MATCHING +void Townsperson_Head(Entity* this) { + SetExtraSpriteFrame(this, 0, + *(gUnk_0810B78C + (this->animIndex & 3)) + gUnk_0810B680[this->entityType.form].frame1); + SetExtraSpriteFrame(this, 1, this->frameIndex + gUnk_0810B680[this->entityType.form].frame2); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); +} +#else +NAKED +void Townsperson_Head(Entity* this) { + asm(".include \"asm/non_matching/townsperson/sub_08061C60.inc\""); +} +#endif + +void sub_08061CB4(Entity* this, u32 arg1) { + if (this->animIndex != arg1) { + InitializeAnimation(this, arg1); + } else { + GetNextFrame(this); + } + if (this->frameDuration == 0xff) { + this->frameDuration = gUnk_0810B680[this->entityType.form].unk2; + } +} + +void sub_08061CEC(Entity* this) { + u32 uVar2; + + if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form])) { + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->animationState = this->actionDelay; + this->field_0x69 = 0xff; + uVar2 = sub_0805ACC0(this); + if (uVar2 == 0) { + this->field_0x6a.HWORD = this->x.HALF.HI; + uVar2 = (u16)this->y.HALF.HI; + } else { + this->field_0x6a.HWORD = (uVar2 >> 0x10); + } + *(u16*)&this->field_0x6c = uVar2; + this->field_0x68 = sub_0801E99C(this); + sub_0807DD64(this); + sub_08061D64(this); + } +} + +void sub_08061D64(Entity* this) { + if (this->interactType == 2) { + this->action = 3; + this->interactType = 0; + sub_0806F118(this); + this->field_0x69 = this->animIndex; + InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + } else { + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + if (this->frameDuration == 0xff) { + this->frameDuration = gUnk_0810B680[this->entityType.form].unk2; + } + GetNextFrame(this); + if (this->interactType != 0) { + this->action = 2; + this->interactType = 0; + sub_08062048(this); + this->field_0x69 = this->animIndex; + InitializeAnimation(this, (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + } + } +} + +void sub_08061E24(Entity* this) { + GetNextFrame(this); + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->action = 1; + InitializeAnimation(this, this->field_0x69); + } +} + +void sub_08061E50(Entity* this) { + + if (UpdateFuseInteraction(this) != 0) { + this->action = 1; + InitializeAnimation(this, this->field_0x69); + } +} + +void sub_08061E70(Entity* this) { + if ((this->entityType).subtype == 6) { + sub_08078784(this, this->field_0x68); + } else { + sub_08078778(this); + } +} + +void sub_08061E90(Entity* this, Entity* arg1) { + u32 animIndex; + s32 iVar4; + + if (arg1->spriteSettings.raw == 0) { + arg1->spriteSettings.raw++; + arg1->spriteTileSize = (Random() & 0x3f) + 0x20; + animIndex = Random() & 0x18; + switch (this->direction) { + case 0x0: + if (animIndex == 0x10) { + animIndex = 0x8; + } + break; + case 0x8: + if (animIndex == 0x18) { + animIndex = 0x10; + } + break; + case 0x10: + if (animIndex == 0x0) { + animIndex = 0x18; + } + break; + case 0x18: + if (animIndex == 0x8) { + animIndex = 0; + } + } + this->direction = (u8)animIndex; + this->animationState = sub_0806F5B0(animIndex); + this->nonPlanarMovement = gUnk_0810B74A[this->entityType.form]; + } + animIndex = (this->animationState >> 1) + 4; + if (animIndex != this->animIndex) { + InitializeAnimation(this, animIndex); + } + sub_080AEF88(this); + iVar4 = this->x.HALF.HI - *(s16*)&this->field_0x6a.HWORD; + if (0x10 < iVar4) { + this->x.HALF.HI = this->field_0x6a.HWORD + 0x10; + arg1->spriteTileSize = 1; + } + if (iVar4 < -0x10) { + this->x.HALF.HI = *(s16*)&this->field_0x6a.HWORD - 0x10; + arg1->spriteTileSize = 1; + } + + iVar4 = this->y.HALF.HI - *(s16*)&this->field_0x6c; + if (0x10 < iVar4) { + this->y.HALF.HI = *(s16*)&this->field_0x6c + 0x10; + arg1->spriteTileSize = 1; + } + if (iVar4 < -0x10) { + this->y.HALF.HI = *(s16*)&this->field_0x6c - 0x10; + arg1->spriteTileSize = 1; + } + if (--arg1->spriteTileSize != 0) { + gUnk_02033280[6] = 0; + } +} + +void sub_08061F94(Entity* this) { + Entity* ent; + + ent = CreateFx(this, 0x35, 0); + if (ent != NULL) { + ResolveEntityOnTop(this, ent); + } +} + +void sub_08061FB0(Entity* this) { + this->boundingBox = NULL; +} + +void sub_08061FB8(Entity* this, struct_08061FB8* arg1) { + u8* temp = gUnk_0810B748; + + sub_08078850(this, 1, temp[arg1->unk2], &gUnk_0810B740[arg1->unk2]); +} + +void sub_08061FD8(Entity* this) { + InitializeAnimation(this, this->animationState >> 1); +} + +void sub_08061FE4(Entity* this) { + InitializeAnimation(this, (this->animationState >> 1) + 4); +} + +void sub_08061FF4(Entity* this) { + TextboxNoOverlap(gUnk_0810B790[this->entityType.form], this); +} + +void sub_0806200C(Entity* this) { + u32 index; + + index = 0; + if ((CheckGlobalFlag(0x29) != 0) && (CheckLocalFlag(0x6b))) { + + // hyrule bestiary + if (GetInventoryValue(0x39) == 2) { + index = 2; + } else { + index = 1; + } + } + TextboxNoOverlap(gUnk_0810B7BA[index], this); +} + +void sub_08062048(Entity *this) { - s32 uVar1; + int iVar1; - uVar1 = sub_0806ED9C(this, 0x20, 0x20); - if (uVar1 < 0) { - uVar1 = this->animationState + 4; + if ((this->entityType).subtype == 6) { + iVar1 = gUnk_02002A40.unk - 2; + if (iVar1 < 0) { + iVar1 = 0; + } + ShowNPCDialogue(this, gUnk_0810B7C0 + this->entityType.form * 0x10 + iVar1 * 2); } else { - if (this->field_0xf == 0) { - this->field_0xf = 0x10; - } - else { - this->field_0xf--; - uVar1 = this->animIndex & 3; - } + TextboxNoOverlap(0, this); } - sub_08061CB4(this, uVar1); - sub_0806ED78(this); - if (this->interactType != 0) { - this->interactType = 0; - TextboxNoOverlapFollow(this->entityType.parameter + 0xa01); +} + +void Townsperson_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form]) == 0) { + return; + } + this->action++; + this->spriteSettings.b.draw = TRUE; } + sub_08061CB4(this, 6); } \ No newline at end of file From ed5c6d08dd012b1f5cd7c441b8b52169bb3ba6df Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 13 Jul 2020 19:57:32 -0700 Subject: [PATCH 25/25] npc9.c OK --- asm/npc9.s | 110 ------------------------------------------------- linker.ld | 2 +- src/npc/npc9.c | 53 ++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 111 deletions(-) delete mode 100644 asm/npc9.s create mode 100644 src/npc/npc9.c diff --git a/asm/npc9.s b/asm/npc9.s deleted file mode 100644 index d5abafe8..00000000 --- a/asm/npc9.s +++ /dev/null @@ -1,110 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start NPC9 -NPC9: @ 0x08062AD8 - push {lr} - ldr r2, _08062AEC @ =gUnk_0810C290 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08062AEC: .4byte gUnk_0810C290 - - thumb_func_start sub_08062AF0 -sub_08062AF0: @ 0x08062AF0 - push {r4, lr} - adds r4, r0, #0 - 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] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08078778 - pop {r4, pc} - - thumb_func_start sub_08062B14 -sub_08062B14: @ 0x08062B14 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r1, r4, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08062B40 - movs r0, #0 - strb r0, [r1] - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0805E47C -_08062B40: - adds r0, r4, #0 - bl sub_0806ED78 - pop {r4, pc} - - thumb_func_start sub_08062B48 -sub_08062B48: @ 0x08062B48 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08062B6A - ldr r0, _08062B6C @ =0x00000A01 - bl TextboxNoOverlapFollow - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_08062B6A: - pop {r4, pc} - .align 2, 0 -_08062B6C: .4byte 0x00000A01 - - thumb_func_start sub_08062B70 -sub_08062B70: @ 0x08062B70 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08062B94 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08062B92 - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0805E584 -_08062B92: - pop {r4, pc} - .align 2, 0 -_08062B94: .4byte gTextBox diff --git a/linker.ld b/linker.ld index 8710c675..248f0b65 100644 --- a/linker.ld +++ b/linker.ld @@ -542,7 +542,7 @@ SECTIONS { asm/npc5.o(.text); src/npc/townsperson.o(.text); asm/kid.o(.text); - asm/npc9.o(.text); + src/npc/npc9.o(.text); src/npc/stamp.o(.text); asm/marcy.o(.text); src/npc/wheaton.o(.text); diff --git a/src/npc/npc9.c b/src/npc/npc9.c new file mode 100644 index 00000000..3954ed8f --- /dev/null +++ b/src/npc/npc9.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "entity.h" +#include "textbox.h" + +extern void sub_08078778(Entity*); +extern void sub_0805E47C(Entity*); +extern void sub_0806ED78(Entity*); +extern void sub_0805E584(Entity*); + +extern void (*const gUnk_0810C290[])(Entity*); + +void NPC9(Entity *this) +{ + gUnk_0810C290[this->action](this); +} + +void sub_08062AF0(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.draw = TRUE; + InitializeAnimation(this, 0); + sub_08078778(this); +} + +void sub_08062B14(Entity *this) +{ + GetNextFrame(this); + if (this->interactType != 0) { + this->interactType = 0; + this->action++; + InitializeAnimation(this, 1); + sub_0805E47C(this); + } + sub_0806ED78(this); +} + +void sub_08062B48(Entity *this) +{ + GetNextFrame(this); + if ((this->frames.b.f3) != 0) { + TextboxNoOverlapFollow(0xa01); + this->action++; + } +} + +void sub_08062B70(Entity *this) +{ + if ((gTextBox.doTextBox & 0x7f) == 0) { + InitializeAnimation(this, 2); + this->action = 1; + sub_0805E584(this); + } +} \ No newline at end of file