From 4f20b61b70c667d27e4330c5e7200d9f9649a8fd Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 17:14:46 -0700 Subject: [PATCH] smoke.c, teachers.c OK --- asm/smoke.s | 142 ----------------------------- asm/teachers.s | 240 ------------------------------------------------- linker.ld | 4 +- src/smoke.c | 60 +++++++++++++ src/teachers.c | 113 +++++++++++++++++++++++ 5 files changed, 175 insertions(+), 384 deletions(-) delete mode 100644 asm/smoke.s delete mode 100644 asm/teachers.s create mode 100644 src/smoke.c create mode 100644 src/teachers.c diff --git a/asm/smoke.s b/asm/smoke.s deleted file mode 100644 index 072966fe..00000000 --- a/asm/smoke.s +++ /dev/null @@ -1,142 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Smoke -Smoke: @ 0x0808A3F4 - push {lr} - ldr r2, _0808A408 @ =gUnk_08121060 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808A408: .4byte gUnk_08121060 - - thumb_func_start sub_0808A40C -sub_0808A40C: @ 0x0808A40C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0808A41E - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x28 - strb r0, [r4, #0xe] -_0808A41E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808A466 - bl Random - movs r1, #0x1f - ands r0, r1 - movs r1, #0x40 - subs r1, r1, r0 - strb r1, [r4, #0xe] - movs r0, #0x2d - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - beq _0808A466 - adds r0, r4, #0 - adds r1, r5, #0 - bl CopyPosition - bl Random - ldr r2, _0808A468 @ =gUnk_08121068 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r1, [r5, #0x2e] - adds r0, r0, r1 - strh r0, [r5, #0x2e] -_0808A466: - pop {r4, r5, pc} - .align 2, 0 -_0808A468: .4byte gUnk_08121068 - - thumb_func_start sub_0808A46C -sub_0808A46C: @ 0x0808A46C - push {lr} - ldr r2, _0808A480 @ =gUnk_08121070 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808A480: .4byte gUnk_08121070 - - thumb_func_start sub_0808A484 -sub_0808A484: @ 0x0808A484 - push {r4, lr} - movs r3, #1 - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x18] - subs r1, #5 - ands r1, r2 - orrs r1, r3 - strb r1, [r0, #0x18] - movs r1, #0x40 - strh r1, [r0, #0x24] - movs r1, #6 - strb r1, [r0, #0x15] - ldrb r3, [r0, #0x19] - movs r2, #0x3f - adds r1, r2, #0 - ands r1, r3 - movs r4, #0x40 - orrs r1, r4 - strb r1, [r0, #0x19] - movs r1, #0x29 - adds r1, r1, r0 - mov ip, r1 - ldrb r3, [r1] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r3 - mov r3, ip - strb r1, [r3] - ldrb r1, [r0, #0x1b] - ands r2, r1 - orrs r2, r4 - strb r2, [r0, #0x1b] - movs r1, #0x28 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808A4D0 -sub_0808A4D0: @ 0x0808A4D0 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808A4F2 - adds r0, r4, #0 - bl DeleteEntity -_0808A4F2: - pop {r4, pc} diff --git a/asm/teachers.s b/asm/teachers.s deleted file mode 100644 index 72c9381d..00000000 --- a/asm/teachers.s +++ /dev/null @@ -1,240 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Teachers -Teachers: @ 0x0806C5A8 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r4, [r5, #0xc] - cmp r4, #1 - beq _0806C604 - cmp r4, #1 - bgt _0806C5BC - cmp r4, #0 - beq _0806C5C2 - b _0806C670 -_0806C5BC: - cmp r4, #2 - beq _0806C656 - b _0806C670 -_0806C5C2: - ldrb r1, [r5, #0xa] - lsls r1, r1, #4 - ldr r0, _0806C600 @ =gUnk_08113910 - adds r1, r1, r0 - adds r0, r5, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806C670 - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldrb r0, [r5, #0xe] - strb r0, [r5, #0x14] - adds r0, r5, #0 - adds r0, #0x69 - strb r4, [r0] - adds r0, r5, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r5, #0 - bl sub_0807DD50 - b _0806C670 - .align 2, 0 -_0806C600: .4byte gUnk_08113910 -_0806C604: - adds r2, r5, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806C64C - movs r0, #0 - strb r1, [r5, #0xc] - strb r0, [r2] - adds r4, r5, #0 - adds r4, #0x58 - ldrb r0, [r4] - adds r1, r5, #0 - adds r1, #0x69 - strb r0, [r1] - ldr r1, _0806C648 @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - ldrb r1, [r4] - movs r2, #4 - rsbs r2, r2, #0 - ands r1, r2 - adds r1, r1, r0 - adds r0, r5, #0 - bl InitializeAnimation - adds r0, r5, #0 - bl sub_0806F118 - b _0806C670 - .align 2, 0 -_0806C648: .4byte gLinkEntity -_0806C64C: - adds r0, r5, #0 - movs r1, #0 - bl sub_0807DD94 - b _0806C670 -_0806C656: - adds r0, r5, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806C670 - movs r0, #1 - strb r0, [r5, #0xc] - adds r0, r5, #0 - adds r0, #0x69 - ldrb r1, [r0] - adds r0, r5, #0 - bl InitializeAnimation -_0806C670: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0806C674 -sub_0806C674: @ 0x0806C674 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start Teachers_Head -Teachers_Head: @ 0x0806C68C - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - ldrb r6, [r4, #0x1e] - adds r0, r4, #0 - adds r0, #0x5b - ldrb r0, [r0] - movs r5, #0x3f - ands r5, r0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0806C6D2 - adds r2, #3 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - adds r2, r6, #0 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - b _0806C70A -_0806C6D2: - adds r2, #6 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - adds r2, r5, #3 - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #2 - adds r2, r6, #0 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #2 - movs r2, #1 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl SetSpriteSubEntryOffsetData2 - adds r0, r4, #0 - bl sub_0807000C -_0806C70A: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0806C70C -sub_0806C70C: @ 0x0806C70C - push {lr} - adds r3, r0, #0 - ldr r0, _0806C730 @ =gUnk_02002A40 - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _0806C71C - movs r0, #0 -_0806C71C: - ldrb r1, [r3, #0xa] - lsls r1, r1, #6 - lsls r0, r0, #3 - ldr r2, _0806C734 @ =gUnk_08113930 - adds r0, r0, r2 - adds r1, r1, r0 - adds r0, r3, #0 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806C730: .4byte gUnk_02002A40 -_0806C734: .4byte gUnk_08113930 - - thumb_func_start Teachers_Fusion -Teachers_Fusion: @ 0x0806C738 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806C778 - ldrb r1, [r4, #0xa] - lsls r1, r1, #4 - ldr r0, _0806C774 @ =gUnk_08113910 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806C77E - ldrb r0, [r4, #0xc] - 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 InitializeAnimation - b _0806C77E - .align 2, 0 -_0806C774: .4byte gUnk_08113910 -_0806C778: - adds r0, r4, #0 - bl GetNextFrame -_0806C77E: - pop {r4, pc} diff --git a/linker.ld b/linker.ld index b48e5643..a9eca411 100644 --- a/linker.ld +++ b/linker.ld @@ -608,7 +608,7 @@ SECTIONS { asm/anju.o(.text); asm/mama.o(.text); src/emma.o(.text); - asm/teachers.o(.text); + src/teachers.o(.text); src/windTribespeople.o(.text); asm/windTribespeople.o(.text); asm/gregal.o(.text); @@ -704,7 +704,7 @@ SECTIONS { asm/object2A.o(.text); asm/object2B.o(.text); asm/beanstalk.o(.text); - asm/smoke.o(.text); + src/smoke.o(.text); asm/pushableRock.o(.text); asm/hittableLever.o(.text); asm/object30.o(.text); diff --git a/src/smoke.c b/src/smoke.c new file mode 100644 index 00000000..b4c83115 --- /dev/null +++ b/src/smoke.c @@ -0,0 +1,60 @@ +#include "global.h" +#include "entity.h" + +extern u32 Random(void); +extern void CopyPosition(Entity*, Entity*); +extern void sub_0806F69C(Entity*); +extern void DeleteEntity(Entity*); + +extern void (*const gUnk_08121060[])(Entity*); +extern void (*const gUnk_08121070[])(Entity*); + +extern s8 gUnk_08121068[]; + +void Smoke(Entity* this) { + gUnk_08121060[this->entityType.form](this); +} + +void sub_0808A40C(Entity *this) +{ + Entity *ent; + + if (this->action == 0) { + this->action = 1; + this->actionDelay = 0x28; + } + if (--this->actionDelay == 0) { + this->actionDelay = 0x40 - (Random() & 0x1f); + ent = CreateObject(0x2d, 1, 0); + if (ent != NULL) { + CopyPosition(this,ent); + ent->x.HALF.HI += gUnk_08121068[(Random() & 7)]; + } + } +} + +void sub_0808A46C(Entity *this) +{ + gUnk_08121070[this->action](this); +} + +void sub_0808A484(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->nonPlanarMovement = 0x40; + this->direction = 6; + this->spriteRendering.b3 = 1; + this->spritePriority.b0 = 0; + this->spriteOrientation.flipY = 1; + InitializeAnimation(this, 0x28); +} + +void sub_0808A4D0(Entity *this) +{ + GetNextFrame(this); + sub_0806F69C(this); + if (this->frames.b.f3) { + DeleteEntity(this); + } +} \ No newline at end of file diff --git a/src/teachers.c b/src/teachers.c new file mode 100644 index 00000000..a82bdadd --- /dev/null +++ b/src/teachers.c @@ -0,0 +1,113 @@ +#include "global.h" +#include "entity.h" +#include "link.h" + +typedef struct { + u8 filler[8]; + u8 unk; +} struct_02002A40; + +extern SpriteLoadData gUnk_08113910[]; +extern void sub_0805E3A0(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806F118(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern u32 sub_0801E99C(); +extern void sub_08078784(Entity*, u32); +extern u32 UpdateFuseInteraction(Entity*); +extern void sub_0807000C(Entity*); +extern void ShowNPCDialogue(Entity*, u16*); + +extern struct_02002A40 gUnk_02002A40; +extern u16 gUnk_08113930[]; + +void Teachers(Entity* this) { + switch (this->action) { + case 0: + if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) { + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->animationState = this->actionDelay; + this->field_0x69 = 0; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + } + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + this->field_0x69 = this->animIndex; + InitializeAnimation(this, + (this->animIndex & -4) + sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + InitializeAnimation(this, this->field_0x69); + } + } +} + +void sub_0806C674(Entity *this) +{ + this->field_0x68 = sub_0801E99C(); + sub_08078784(this, this->field_0x68); +} + +void Teachers_Head(Entity *this) +{ + u8 bVar1; + u8 bVar2; + u32 uVar3; + + + uVar3 = this->frames.all & -0x81; + bVar1 = this->frameIndex; + bVar2 = this->frameSpriteSettings & 0x3f; + if ((this->entityType).form == 0) { + SetExtraSpriteFrame(this,0, (uVar3 + 3)); + SetExtraSpriteFrame(this,1, bVar1); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); + } + else { + SetExtraSpriteFrame(this, 0, (uVar3 + 6)); + SetExtraSpriteFrame(this, 1, ((bVar2) + 3)); + SetExtraSpriteFrame(this, 2, bVar1); + SetSpriteSubEntryOffsetData1(this, 2, 1); + SetSpriteSubEntryOffsetData2(this, 2, 0); + sub_0807000C(this); + } +} + +void sub_0806C70C(Entity *this) +{ + int offset; + + offset = gUnk_02002A40.unk - 2; + if (offset < 0) { + offset = 0; + } + ShowNPCDialogue(this, gUnk_08113930 + this->entityType.form * 0x20 + offset * 4); +} + +void Teachers_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) { + this->action++; + this->spriteSettings.b.draw = TRUE; + InitializeAnimation(this, 2); + } + } + else { + GetNextFrame(this); + } +} \ No newline at end of file