summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-06-13 14:51:06 -0700
committerGitHub <noreply@github.com>2020-06-13 14:51:06 -0700
commitf4d8c90e9d06c6969a67bf97dadfceb2ce65fa68 (patch)
treeed52c8201df2bcede89fbf32c2369b26d10433e6
parenta3be2626358e15dc89a31027113e8995fbf7eade (diff)
parent23dfe5affad47ee0ca27c1210e37fb8fe0cfc748 (diff)
Merge pull request #6 from gamestabled/zelda
zelda OK
-rw-r--r--asm/zelda.s430
-rw-r--r--include/entity.h11
-rw-r--r--linker.ld2
-rw-r--r--src/zelda.c237
4 files changed, 245 insertions, 435 deletions
diff --git a/asm/zelda.s b/asm/zelda.s
deleted file mode 100644
index 136b33b7..00000000
--- a/asm/zelda.s
+++ /dev/null
@@ -1,430 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start sub_08066CB4
-sub_08066CB4: @ 0x08066CB4
- push {lr}
- ldr r2, _08066CC8 @ =gUnk_08110BD8
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08066CC8: .4byte gUnk_08110BD8
-
- thumb_func_start sub_08066CCC
-sub_08066CCC: @ 0x08066CCC
- 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, #7
- bl sub_0805EA78
- adds r0, r4, #0
- movs r1, #2
- bl sub_0805E3A0
- adds r0, r4, #0
- bl sub_0807DD50
- pop {r4, pc}
-
- thumb_func_start sub_08066CF8
-sub_08066CF8: @ 0x08066CF8
- push {lr}
- movs r1, #0
- bl sub_0807DD94
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_08066D04
-sub_08066D04: @ 0x08066D04
- push {r4, lr}
- adds r4, r0, #0
- movs r0, #7
- movs r1, #0x2e
- bl sub_0805EB9C
- str r0, [r4, #0x50]
- pop {r4, pc}
-
- thumb_func_start sub_08066D14
-sub_08066D14: @ 0x08066D14
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- ldr r2, [r4, #0x50]
- cmp r2, #0
- beq _08066D48
- ldrb r0, [r2, #0x14]
- strb r0, [r4, #0x14]
- 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, r2, #0
- adds r1, r4, #0
- bl CopyPosition
- ldr r1, [r4, #0x50]
- adds r0, r4, #0
- bl sub_08068680
- movs r0, #1
- str r0, [r5, #0x14]
- b _08066D4A
-_08066D48:
- str r2, [r5, #0x14]
-_08066D4A:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08066D4C
-sub_08066D4C: @ 0x08066D4C
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- ldr r1, [r4, #0x50]
- cmp r1, #0
- beq _08066D90
- bl CopyPosition
- ldr r3, [r4, #0x50]
- ldrb r1, [r3, #0x18]
- movs r2, #4
- rsbs r2, r2, #0
- adds r0, r2, #0
- ands r0, r1
- movs r1, #1
- orrs r0, r1
- strb r0, [r3, #0x18]
- ldr r1, [r4, #0x50]
- ldrb r0, [r4, #0x14]
- strb r0, [r1, #0x14]
- ldrb r0, [r4, #0x18]
- ands r2, r0
- strb r2, [r4, #0x18]
- ldrb r1, [r4, #0x17]
- movs r0, #0xfe
- ands r0, r1
- strb r0, [r4, #0x17]
- ldr r1, [r4, #0x50]
- adds r0, r4, #0
- bl sub_08068694
- movs r0, #1
- str r0, [r5, #0x14]
- b _08066D92
-_08066D90:
- str r1, [r5, #0x14]
-_08066D92:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08066D94
-sub_08066D94: @ 0x08066D94
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r0, #0x1c
- bl SetGlobalFlag
- movs r0, #0x2e
- movs r1, #0
- movs r2, #0
- bl CreateNPC
- adds r4, r0, #0
- cmp r4, #0
- beq _08066DD6
- ldr r0, _08066DDC @ =gLinkEntity
- ldrb r0, [r0, #0x14]
- strb r0, [r4, #0x14]
- ldrb r1, [r4, #0x10]
- movs r0, #0x20
- orrs r0, r1
- strb r0, [r4, #0x10]
- adds r0, r5, #0
- bl sub_0806EDC4
- strb r0, [r4, #0x14]
- ldr r0, _08066DE0 @ =gRoomControls
- ldrb r1, [r0, #5]
- adds r0, r4, #0
- adds r0, #0x74
- strh r1, [r0]
- adds r0, r5, #0
- adds r1, r4, #0
- bl CopyPosition
-_08066DD6:
- bl DeleteThisEntity
- pop {r4, r5, pc}
- .align 2, 0
-_08066DDC: .4byte gLinkEntity
-_08066DE0: .4byte gRoomControls
-
- thumb_func_start sub_08066DE4
-sub_08066DE4: @ 0x08066DE4
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r0, #7
- movs r1, #0x2e
- bl sub_0805EB9C
- adds r4, r0, #0
- cmp r4, #0
- beq _08066E06
- adds r0, r5, #0
- adds r1, r4, #0
- bl CopyPosition
- adds r0, r5, #0
- adds r1, r4, #0
- bl sub_080686C4
-_08066E06:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08066E08
-sub_08066E08: @ 0x08066E08
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0x50
- bl LoadAnimation
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- adds r4, #0x80
- strh r0, [r4]
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08066E20
-sub_08066E20: @ 0x08066E20
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0x44
- bl LoadAnimation
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- adds r4, #0x80
- strh r0, [r4]
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08066E38
-sub_08066E38: @ 0x08066E38
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0x48
- bl LoadAnimation
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- adds r4, #0x80
- strh r0, [r4]
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08066E50
-sub_08066E50: @ 0x08066E50
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0x4c
- bl LoadAnimation
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- adds r4, #0x80
- strh r0, [r4]
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08066E68
-sub_08066E68: @ 0x08066E68
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0x54
- bl LoadAnimation
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- adds r4, #0x80
- strh r0, [r4]
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08066E80
-sub_08066E80: @ 0x08066E80
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- ldrb r0, [r5, #0x18]
- cmp r0, #4
- bhi _08066F7C
- lsls r0, r0, #2
- ldr r1, _08066E98 @ =_08066E9C
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08066E98: .4byte _08066E9C
-_08066E9C: @ jump table
- .4byte _08066EB0 @ case 0
- .4byte _08066EC0 @ case 1
- .4byte _08066EF0 @ case 2
- .4byte _08066F28 @ case 3
- .4byte _08066F58 @ case 4
-_08066EB0:
- ldrb r0, [r5, #0x18]
- adds r0, #1
- strb r0, [r5, #0x18]
- adds r0, r4, #0
- movs r1, #0x16
- bl LoadAnimation
- b _08066F7C
-_08066EC0:
- adds r0, r4, #0
- bl sub_080042B8
- adds r2, r4, #0
- adds r2, #0x5a
- ldrb r1, [r2]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _08066F7C
- ldrb r0, [r5, #0x18]
- adds r0, #1
- strb r0, [r5, #0x18]
- movs r0, #0x80
- lsls r0, r0, #0xa
- str r0, [r4, #0x20]
- ldrb r1, [r2]
- movs r0, #0xfe
- ands r0, r1
- strb r0, [r2]
- movs r0, #0x7c
- bl PlaySFX
- b _08066F7C
-_08066EF0:
- movs r1, #0x80
- lsls r1, r1, #1
- adds r0, r4, #0
- movs r2, #0x80
- bl sub_0806F62C
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_08003FC4
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _08066F1A
- adds r0, r4, #0
- bl sub_080042B8
-_08066F1A:
- ldr r0, [r4, #0x20]
- cmp r0, #0
- bge _08066F7C
- ldrb r0, [r5, #0x18]
- adds r0, #1
- strb r0, [r5, #0x18]
- b _08066F7C
-_08066F28:
- movs r1, #0x80
- lsls r1, r1, #1
- adds r0, r4, #0
- movs r2, #0x80
- bl sub_0806F62C
- adds r0, r4, #0
- bl sub_080042B8
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_08003FC4
- cmp r0, #0
- bne _08066F7C
- ldrb r0, [r5, #0x18]
- adds r0, #1
- strb r0, [r5, #0x18]
- adds r0, r4, #0
- movs r1, #0x1e
- bl LoadAnimation
- b _08066F7C
-_08066F58:
- adds r0, r4, #0
- bl sub_080042B8
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08066F7C
- ldr r2, _08066F78 @ =gUnk_02033280
- ldrb r1, [r2, #7]
- movs r0, #1
- orrs r0, r1
- strb r0, [r2, #7]
- b _08066F8C
- .align 2, 0
-_08066F78: .4byte gUnk_02033280
-_08066F7C:
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r1, [r0]
- adds r0, #0x28
- movs r2, #0
- strh r1, [r0]
- ldr r0, _08066F90 @ =gUnk_02033280
- strb r2, [r0, #6]
-_08066F8C:
- pop {r4, r5, pc}
- .align 2, 0
-_08066F90: .4byte gUnk_02033280
-
- thumb_func_start sub_08066F94
-sub_08066F94: @ 0x08066F94
- push {r4, lr}
- ldr r4, _08066F9C @ =gUnk_08110BE0
- b _08066FAC
- .align 2, 0
-_08066F9C: .4byte gUnk_08110BE0
-_08066FA0:
- ldrh r1, [r4]
- adds r4, #2
- ldr r0, _08066FB4 @ =0x00004072
- movs r2, #1
- bl SetTileType
-_08066FAC:
- ldrh r0, [r4]
- cmp r0, #0
- bne _08066FA0
- pop {r4, pc}
- .align 2, 0
-_08066FB4: .4byte 0x00004072
-
- thumb_func_start sub_08066FB8
-sub_08066FB8: @ 0x08066FB8
- push {r4, lr}
- ldr r4, _08066FC0 @ =gUnk_08110BE0
- b _08066FCE
- .align 2, 0
-_08066FC0: .4byte gUnk_08110BE0
-_08066FC4:
- ldrh r0, [r4]
- adds r4, #2
- movs r1, #1
- bl sub_0807BA8C
-_08066FCE:
- ldrh r0, [r4]
- cmp r0, #0
- bne _08066FC4
- pop {r4, pc}
- .align 2, 0
diff --git a/include/entity.h b/include/entity.h
index 30dd6d97..a3c17714 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -77,7 +77,7 @@ typedef struct Entity
u8 filler[2];
u8 animationList;
u8 field_1f;
- u32 field_0x20;
+ s32 field_0x20;
s16 nonPlanarMovement;
u8 spriteAnimation[3];
struct {
@@ -114,9 +114,12 @@ typedef struct Entity
u8 field_0x59;
union {
u8 all;
- u8 f0:6;
- u8 f1:1;
- u8 f2:1;
+ struct {
+ u8 f0:1;
+ u8 f1:5;
+ u8 f2:1;
+ u8 f3:1;
+ } PACKED b;
} PACKED frames;
u8 gfx;
u8 field_0x5c;
diff --git a/linker.ld b/linker.ld
index d3d04cff..089c725e 100644
--- a/linker.ld
+++ b/linker.ld
@@ -499,7 +499,7 @@ SECTIONS {
asm/ministerPotho.o(.text);
asm/npc26.o(.text);
asm/vaati.o(.text);
- asm/zelda.o(.text);
+ src/zelda.o(.text);
asm/mutoh.o(.text);
asm/carpenter.o(.text);
asm/castorWildsStatue.o(.text);
diff --git a/src/zelda.c b/src/zelda.c
new file mode 100644
index 00000000..4400351d
--- /dev/null
+++ b/src/zelda.c
@@ -0,0 +1,237 @@
+#include "global.h"
+#include "entity.h"
+#include "room.h"
+
+extern void sub_0805EA78(Entity*, u32);
+extern void sub_0805E3A0(Entity*, u32);
+extern void sub_0807DD50(Entity*);
+extern void sub_0807DD94(Entity*, u32);
+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 parameter1,u32 parameter2);
+u32 sub_0806EDC4(Entity* ent);
+void DeleteThisEntity(void);
+extern Entity* GetEntityByType(u32, u32);
+extern void sub_080686C4(Entity*, Entity*);
+extern void LoadAnimation(Entity*, u32);
+extern void sub_080042B8(Entity*);
+extern void sub_0806F62C(Entity*, u32, u32);
+extern u32 sub_08003FC4(Entity*, u32);
+extern void PlaySFX(u32);
+extern void SetTileType(u32, u32, u32);
+extern void sub_0807BA8C(u16, u32);
+
+extern Entity gLinkEntity;
+extern RoomControls gRoomControls;
+
+extern void (*gUnk_08110BD8[])(Entity* ent);
+extern u8 gUnk_02033280[];
+extern u16 gUnk_08110BE0[];
+
+
+void sub_08066CB4(Entity* ent)
+{
+ gUnk_08110BD8[ent->action](ent);
+}
+
+void sub_08066CCC(Entity *ent)
+{
+ ent->action = 1;
+ ent->spriteSettings.b.ss0 = 1;
+ sub_0805EA78(ent, 7);
+ sub_0805E3A0(ent, 2);
+ sub_0807DD50(ent);
+}
+
+void sub_08066CF8(Entity* ent)
+{
+ sub_0807DD94(ent, 0);
+}
+
+void sub_08066D04(Entity* ent)
+{
+ ent->parent = sub_0805EB9C(7, 0x2E);
+}
+
+void sub_08066D14(Entity* ent, u32* param_2)
+{
+ Entity* parent;
+
+ parent = ent->parent;
+ if (parent != NULL)
+ {
+ ent->animationState = parent->animationState;
+ ent->spriteSettings.b.ss0 = 1;
+ CopyPosition(parent, ent);
+ sub_08068680(ent, ent->parent);
+ param_2[5] = 1;
+ }
+ else
+ {
+ param_2[5] = 0;
+ }
+}
+
+void sub_08066D4C(Entity* ent, u32* param_2)
+{
+ Entity* parent;
+
+ parent = ent->parent;
+ if (ent->parent != NULL)
+ {
+ CopyPosition(ent, parent);
+ ent->parent->spriteSettings.b.ss0 = 1;
+ ent->parent->animationState = ent->animationState;
+ ent->spriteSettings.b.ss0 = 0;
+ ent->field_0x17 &= 0xFE;
+ sub_08068694(ent, ent->parent);
+ param_2[5] = 1;
+ }
+ else
+ {
+ param_2[5] = 0;
+ }
+}
+
+void sub_08066D94(Entity* ent)
+{
+ u32 roomID;
+ Entity* npc;
+
+ SetGlobalFlag(0x1C);
+ npc = CreateNPC(0x2E, 0, 0);
+ if (npc != NULL)
+ {
+ npc->animationState = gLinkEntity.animationState;
+ npc->flags |= 0x20;
+ npc->animationState = sub_0806EDC4(ent);
+ roomID = gRoomControls.roomID;
+ *(u16*)&npc->heldObjectPtr = roomID;
+ CopyPosition(ent, npc);
+ }
+ DeleteThisEntity();
+}
+
+void sub_08066DE4(Entity* ent)
+{
+ Entity* pEVar1;
+
+ pEVar1 = sub_0805EB9C(7, 0x2E);
+ if (pEVar1 != NULL)
+ {
+ CopyPosition(ent, pEVar1);
+ sub_080686C4(ent, pEVar1);
+ }
+}
+
+void sub_08066E08(Entity* ent)
+{
+ LoadAnimation(ent, 0x50);
+ ent->field_0x80 = ent->field_0x58;
+}
+
+void sub_08066E20(Entity* ent)
+{
+ LoadAnimation(ent, 0x44);
+ ent->field_0x80 = ent->field_0x58;
+}
+
+void sub_08066E38(Entity* ent)
+{
+ LoadAnimation(ent, 0x48);
+ ent->field_0x80 = ent->field_0x58;
+}
+
+void sub_08066E50(Entity* ent)
+{
+ LoadAnimation(ent, 0x4C);
+ ent->field_0x80 = ent->field_0x58;
+}
+
+void sub_08066E68(Entity* ent)
+{
+ LoadAnimation(ent, 0x54);
+ ent->field_0x80 = ent->field_0x58;
+}
+
+void sub_08066E80(Entity* ent, u8* param_2)
+{
+ switch(param_2[0x18])
+ {
+ case 0:
+ param_2[0x18]++;
+ LoadAnimation(ent, 0x16);
+ break;
+ case 1:
+ sub_080042B8(ent);
+ if (ent->frames.all & 1)
+ {
+ param_2[0x18]++;
+ ent->field_0x20 = 0x20000;
+ ent->frames.all &= 0xFE;
+ PlaySFX(0x7C);
+ }
+ break;
+ case 2:
+ sub_0806F62C(ent, 0x100, 0x80);
+ sub_08003FC4(ent, 0x2000);
+ if (!(ent->frames.all & 1))
+ {
+ sub_080042B8(ent);
+ }
+ if (ent->field_0x20 < 0)
+ {
+ param_2[0x18]++;
+ }
+ break;
+ case 3:
+ sub_0806F62C(ent, 0x100, 0x80);
+ sub_080042B8(ent);
+ if (sub_08003FC4(ent, 0x2000) == 0)
+ {
+ param_2[0x18]++;
+ LoadAnimation(ent, 0x1E);
+ }
+ break;
+ case 4:
+ sub_080042B8(ent);
+ if (ent->frames.b.f3)
+ {
+ gUnk_02033280[7] |= 1;
+ return;
+ }
+ }
+ ent->field_0x80 = ent->field_0x58;
+ gUnk_02033280[6] = 0;
+}
+
+void sub_08066F94(void)
+{
+ u16 uVar1;
+ u16* puVar2;
+
+ puVar2 = gUnk_08110BE0;
+ while (*puVar2 != 0)
+ {
+ uVar1 = *puVar2;
+ puVar2++;
+ SetTileType(16498, uVar1, 1);
+ }
+}
+
+void sub_08066FB8(void)
+{
+ u16 uVar1;
+ u16* puVar2;
+
+ puVar2 = gUnk_08110BE0;
+ while (*puVar2 != 0)
+ {
+ uVar1 = *puVar2;
+ puVar2++;
+ sub_0807BA8C(uVar1, 1);
+ }
+}