From 6aba97697bcf1c970de2d53bc3485f711b0a17db Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 22:58:48 -0700 Subject: [PATCH] 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