diff --git a/asm/windTribeFlag.s b/asm/windTribeFlag.s deleted file mode 100644 index cbe72d63..00000000 --- a/asm/windTribeFlag.s +++ /dev/null @@ -1,58 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start WindTribeFlag -WindTribeFlag: @ 0x0809CEC8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0809CF06 - adds r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0809CEEE - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - b _0809CEF4 -_0809CEEE: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 -_0809CEF4: - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl UpdateSpriteOrderAndFlip - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - b _0809CF0C -_0809CF06: - adds r0, r4, #0 - bl sub_08004274 -_0809CF0C: - adds r4, #0x59 - ldrb r0, [r4] - cmp r0, #0xff - bne _0809CF20 - bl Random - movs r1, #0xf - ands r0, r1 - adds r0, #0x10 - strb r0, [r4] -_0809CF20: - pop {r4, pc} - .align 2, 0 diff --git a/asm/windcrest.s b/asm/windcrest.s deleted file mode 100644 index 676ef449..00000000 --- a/asm/windcrest.s +++ /dev/null @@ -1,62 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Windcrest -Windcrest: @ 0x080A20FC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - adds r1, r0, #0 - cmp r1, #0 - bne _080A2114 - adds r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0x1e] - adds r0, r4, #0 - bl sub_0807DD64 -_080A2114: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - pop {r4, pc} - - thumb_func_start sub_080A2124 -sub_080A2124: @ 0x080A2124 - push {lr} - ldr r3, _080A2134 @ =gUnk_08125010 - movs r1, #1 - movs r2, #0xe - bl sub_08078850 - pop {pc} - .align 2, 0 -_080A2134: .4byte gUnk_08125010 - - thumb_func_start sub_080A2138 -sub_080A2138: @ 0x080A2138 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x72 - bl PlaySFX - ldr r2, _080A2160 @ =gUnk_02002A40 - ldrb r0, [r4, #0xb] - adds r0, #0x18 - movs r1, #1 - lsls r1, r0 - ldr r0, [r2, #0x40] - orrs r0, r1 - str r0, [r2, #0x40] - adds r0, r4, #0 - movs r1, #0x46 - movs r2, #0 - bl CreateFx - pop {r4, pc} - .align 2, 0 -_080A2160: .4byte gUnk_02002A40 diff --git a/include/entity.h b/include/entity.h index 0edf7fa0..ba301aff 100644 --- a/include/entity.h +++ b/include/entity.h @@ -109,7 +109,7 @@ typedef struct Entity { struct Entity* parent; struct Entity* attachedEntity; u8 field_0x58; - u8 field_0x59; + u8 animTime; union { u8 all; struct { diff --git a/linker.ld b/linker.ld index d098dd09..368c9de5 100644 --- a/linker.ld +++ b/linker.ld @@ -737,7 +737,7 @@ SECTIONS { asm/object91.o(.text); asm/bakerOven.o(.text); asm/object93.o(.text); - asm/windTribeFlag.o(.text); + src/windTribeFlag.o(.text); asm/bird.o(.text); asm/object96.o(.text); asm/object97.o(.text); @@ -777,7 +777,7 @@ SECTIONS { asm/windTribeTeleporter.o(.text); asm/objectB9.o(.text); asm/objectBA.o(.text); - asm/windcrest.o(.text); + src/windcrest.o(.text); asm/litArea.o(.text); asm/objectBD.o(.text); asm/pinwheel.o(.text); diff --git a/src/windTribeFlag.c b/src/windTribeFlag.c new file mode 100644 index 00000000..f09b09c9 --- /dev/null +++ b/src/windTribeFlag.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" + +void WindTribeFlag(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->collisionLayer = 2; + if ((this->entityType).parameter1 == 0) { + this->spriteSettings.b.ss6 = 0; + } + else { + this->spriteSettings.b.ss6 = 1; + } + UpdateSpriteOrderAndFlip(this); + InitializeAnimation(this,0); + } + else { + sub_08004274(this); + } + if (this->animTime == 0xff) { + this->animTime = (Random() & 0xf) + 0x10; + } +} \ No newline at end of file diff --git a/src/windcrest.c b/src/windcrest.c new file mode 100644 index 00000000..90ecab1a --- /dev/null +++ b/src/windcrest.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" + +typedef struct { + u8 filler[64]; + u32 windcrests; +} struct_02002A40; + +extern void sub_0807DD64(Entity*); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern void sub_08078850(Entity*, u32, u32, u8*); +extern void PlaySFX(u32); +extern Entity* CreateFx (Entity*, u32, u32); + +extern u8 gUnk_08125010; +extern struct_02002A40 gUnk_02002A40; + +void Windcrest(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->animationList = 0; + sub_0807DD64(this); + } + sub_0807DDAC(this, 0); + sub_0807DDE4(this); +} + +void sub_080A2124(Entity *this) +{ + sub_08078850(this, 1, 0xe, &gUnk_08125010); +} + +void Windcrest_Unlock(Entity *this) +{ + PlaySFX(0x72); + gUnk_02002A40.windcrests = gUnk_02002A40.windcrests | 1 << (this->entityType.parameter2 + 0x18); + CreateFx(this, 0x46, 0); +} \ No newline at end of file