summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2020-07-12 22:58:48 -0700
committertheo3 <arisstephenson2@gmail.com>2020-07-12 22:58:48 -0700
commit6aba97697bcf1c970de2d53bc3485f711b0a17db (patch)
tree4a5654ae704f5dccabe4967df4cbfff8e6614729
parentd429f7f9cbe2a5c1d90139d9459fcd899b390fbc (diff)
gentari.c OK
-rw-r--r--asm/gentari.s108
-rw-r--r--include/entity.h12
-rw-r--r--linker.ld1
-rw-r--r--src/dampe.c6
-rw-r--r--src/gentari.c53
5 files changed, 63 insertions, 117 deletions
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