summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-06-12 02:52:59 -0700
committerGitHub <noreply@github.com>2020-06-12 02:52:59 -0700
commit4dbaee3bb4a7b1874192ba7bfdb4e8bd6e4c53d2 (patch)
tree3989728d32497b21ff0b0c8a39e8c6c3cedb37e1
parent27d389e50adc502b6259bad07a9684a02da0a13c (diff)
parentfb42854fa73906b18ce16bae348533fad22708c0 (diff)
Merge pull request #3 from gamestabled/giantLeaf
giantLeaf matching
-rw-r--r--asm/giantLeaf.s87
-rw-r--r--include/entity.h3
-rw-r--r--linker.ld2
-rw-r--r--src/giantLeaf.c38
4 files changed, 41 insertions, 89 deletions
diff --git a/asm/giantLeaf.s b/asm/giantLeaf.s
deleted file mode 100644
index d6810508..00000000
--- a/asm/giantLeaf.s
+++ /dev/null
@@ -1,87 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start sub_0808D5DC
-sub_0808D5DC: @ 0x0808D5DC
- push {lr}
- adds r3, r0, #0
- ldrb r0, [r3, #0xc]
- cmp r0, #0
- bne _0808D614
- movs r2, #1
- movs r0, #1
- strb r0, [r3, #0xc]
- ldrb r1, [r3, #0x18]
- subs r0, #5
- ands r0, r1
- orrs r0, r2
- strb r0, [r3, #0x18]
- ldrb r0, [r3, #0x19]
- movs r1, #0xc0
- orrs r0, r1
- strb r0, [r3, #0x19]
- adds r2, r3, #0
- adds r2, #0x29
- ldrb r0, [r2]
- movs r1, #7
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r3, #0xa]
- strb r0, [r3, #0x1e]
- adds r0, r3, #0
- bl sub_0808D618
-_0808D614:
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_0808D618
-sub_0808D618: @ 0x0808D618
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xa]
- ldr r7, _0808D664 @ =gUnk_08121750
- cmp r0, #0
- beq _0808D626
- ldr r7, _0808D668 @ =gUnk_0812176A
-_0808D626:
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- ldr r3, _0808D66C @ =gRoomControls
- ldrh r1, [r3, #6]
- subs r0, r0, r1
- asrs r5, r0, #4
- movs r2, #0x3f
- ands r5, r2
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- ldrh r1, [r3, #8]
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r2
- lsls r0, r0, #6
- orrs r5, r0
- movs r6, #0
- adds r4, r7, #0
-_0808D64A:
- movs r0, #0
- ldrsh r1, [r4, r0]
- adds r1, r5, r1
- ldr r0, _0808D670 @ =0x00004074
- movs r2, #1
- bl SetTile
- adds r4, #2
- adds r6, #1
- cmp r6, #0xc
- bls _0808D64A
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0808D664: .4byte gUnk_08121750
-_0808D668: .4byte gUnk_0812176A
-_0808D66C: .4byte gRoomControls
-_0808D670: .4byte 0x00004074
diff --git a/include/entity.h b/include/entity.h
index 72e7ad59..31f73666 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -57,7 +57,8 @@ typedef struct Entity
struct {
u8 b0:2;
u8 b1:2;
- u8 b2:4;
+ u8 b2:2;
+ u8 b3:2;
} __attribute__((packed)) spriteOrder;
u8 palette;
struct {
diff --git a/linker.ld b/linker.ld
index 3ad8b8e3..fb587734 100644
--- a/linker.ld
+++ b/linker.ld
@@ -643,7 +643,7 @@ SECTIONS {
asm/macroLink.o(.text);
asm/object3D.o(.text);
asm/object3E.o(.text);
- asm/giantLeaf.o(.text);
+ src/giantLeaf.o(.text);
asm/fairy.o(.text);
asm/ladderUp.o(.text);
asm/object42.o(.text);
diff --git a/src/giantLeaf.c b/src/giantLeaf.c
new file mode 100644
index 00000000..6c6b4d47
--- /dev/null
+++ b/src/giantLeaf.c
@@ -0,0 +1,38 @@
+#include "global.h"
+#include "entity.h"
+#include "room.h"
+
+void SetTile(u32 tileIndex, s32 tilePosition, s32 layerIndex);
+void sub_0808D618(Entity* ent);
+
+extern RoomControls gRoomControls;
+extern s16 gUnk_08121750[];
+extern s16 gUnk_0812176A[];
+
+void sub_0808D5DC(Entity* ent)
+{
+ if (ent->action == 0)
+ {
+ ent->action = 1;
+ ent->spriteSettings.b.ss0 = 1;
+ ent->spriteOrder.b3 = 3;
+ ent->ticks.b0 = 7;
+ ent->animationList = ent->entityType.parameter1;
+ sub_0808D618(ent);
+ }
+}
+
+void sub_0808D618(Entity *ent)
+{
+ u32 tilePos;
+ s16 *arr;
+ u32 i;
+
+ arr = (ent->entityType.parameter1 != 0) ? gUnk_0812176A : gUnk_08121750;
+ tilePos = (((ent->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3F) | ((((ent->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3F) * 64);
+
+ for (i = 0; i < 13; i++)
+ {
+ SetTile(16500, tilePos + arr[i], 1);
+ }
+}