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