From 02cb79b6c4b1fac62d4b834a604997d12ba35696 Mon Sep 17 00:00:00 2001 From: theo3 Date: Fri, 10 Jul 2020 22:34:55 -0700 Subject: [PATCH] swordsmanNewsletter.c OK --- asm/object49.s | 157 -------------------------------------- asm/swordsmanNewsletter.s | 63 --------------- linker.ld | 2 +- src/object49.c | 53 +++++++++++++ src/swordsmanNewsletter.c | 31 ++++++++ 5 files changed, 85 insertions(+), 221 deletions(-) delete mode 100644 asm/swordsmanNewsletter.s create mode 100644 src/swordsmanNewsletter.c diff --git a/asm/object49.s b/asm/object49.s index 1fdfafa3..ec40a8a9 100644 --- a/asm/object49.s +++ b/asm/object49.s @@ -6,163 +6,6 @@ .text - thumb_func_start sub_0808F244 -sub_0808F244: @ 0x0808F244 - push {r4, lr} - adds r4, r0, #0 - ldr r3, [r4, #0x50] - ldrb r1, [r3, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrh r0, [r3, #0x32] - adds r0, #3 - movs r2, #0 - strh r0, [r4, #0x32] - ldr r1, [r4, #0x54] - adds r0, r1, #0 - adds r0, #0x62 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r1, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - str r2, [r4, #0x34] - movs r0, #0x36 - ldrsh r1, [r3, r0] - movs r0, #0x80 - subs r0, r0, r1 - str r0, [r4, #0x74] - movs r0, #0x36 - ldrsh r1, [r3, r0] - movs r0, #0x80 - lsls r0, r0, #1 - subs r0, r0, r1 - str r0, [r4, #0x78] - adds r3, #0x7f - ldrb r0, [r3] - str r0, [r4, #0x70] - adds r0, r4, #0 - bl sub_0808F2B0 - ldr r0, [r4, #0x50] - adds r0, #0x6d - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0808F2AC - bl DeleteThisEntity -_0808F2AC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808F2B0 -sub_0808F2B0: @ 0x0808F2B0 - push {lr} - ldr r1, [r0, #0x74] - ldr r2, [r0, #0x78] - ldr r3, [r0, #0x70] - bl sub_0805EC9C - pop {pc} - .align 2, 0 - - thumb_func_start sub_0808F2C0 -sub_0808F2C0: @ 0x0808F2C0 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - adds r6, r0, #0 - cmp r6, #0 - bne _0808F322 - adds r0, #1 - strb r0, [r5, #0xc] - ldr r4, [r5, #0x50] - ldrb r2, [r4, #0x19] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r5, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r5, #0x19] - ldrb r0, [r4, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r5, #0x1b] - ands r1, r2 - orrs r1, r0 - strb r1, [r5, #0x1b] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - str r6, [r5, #0x34] - ldr r1, [r5, #0x50] - ldrh r0, [r1, #0x32] - adds r0, #3 - strh r0, [r5, #0x32] - ldrh r0, [r1, #0x2e] - strh r0, [r5, #0x2e] - adds r0, r5, #0 - movs r1, #3 - bl InitializeAnimation -_0808F322: - ldr r2, [r5, #0x50] - movs r1, #0x36 - ldrsh r0, [r2, r1] - cmp r0, #0 - bne _0808F334 - ldr r0, [r2, #0x74] - str r0, [r5, #0x74] - ldr r0, [r2, #0x78] - b _0808F34C -_0808F334: - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #0x80 - lsls r0, r0, #2 - subs r0, r0, r1 - str r0, [r5, #0x74] - movs r0, #0x36 - ldrsh r1, [r2, r0] - lsls r1, r1, #1 - movs r0, #0xc0 - lsls r0, r0, #2 - subs r0, r0, r1 -_0808F34C: - str r0, [r5, #0x78] - movs r0, #0 - str r0, [r5, #0x70] - adds r0, r5, #0 - bl sub_0808F2B0 - ldr r1, [r5, #0x78] - adds r0, r5, #0 - movs r2, #8 - movs r3, #2 - bl sub_0806FCF4 - ldrb r0, [r5, #0xc] - cmp r0, #0xff - bne _0808F36E - bl DeleteThisEntity -_0808F36E: - pop {r4, r5, r6, pc} - thumb_func_start sub_0808F370 sub_0808F370: @ 0x0808F370 push {r4, lr} diff --git a/asm/swordsmanNewsletter.s b/asm/swordsmanNewsletter.s deleted file mode 100644 index 3ead564f..00000000 --- a/asm/swordsmanNewsletter.s +++ /dev/null @@ -1,63 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start SwordsmanNewsletter -SwordsmanNewsletter: @ 0x080933C0 - push {lr} - ldr r2, _080933D4 @ =gUnk_081228B0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080933D4: .4byte gUnk_081228B0 - - thumb_func_start sub_080933D8 -sub_080933D8: @ 0x080933D8 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - strb r0, [r4, #0x1e] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r0, _080933F8 @ =gUnk_081228A8 - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_080787B4 - pop {r4, pc} - .align 2, 0 -_080933F8: .4byte gUnk_081228A8 - - thumb_func_start sub_080933FC -sub_080933FC: @ 0x080933FC - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08093420 - movs r0, #0 - strb r0, [r1] - ldr r1, _08093424 @ =gUnk_081228B8 - ldrb r0, [r2, #0xa] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - adds r1, r2, #0 - bl TextboxNoOverlap -_08093420: - pop {pc} - .align 2, 0 -_08093424: .4byte gUnk_081228B8 diff --git a/linker.ld b/linker.ld index db7c5346..08978b8b 100644 --- a/linker.ld +++ b/linker.ld @@ -758,7 +758,7 @@ SECTIONS { asm/houseDoorInterior.o(.text); asm/whirlwind.o(.text); asm/objectBlockingStairs.o(.text); - asm/swordsmanNewsletter.o(.text); + src/swordsmanNewsletter.o(.text); asm/object61.o(.text); asm/giantTwig.o(.text); asm/object63.o(.text); diff --git a/src/object49.c b/src/object49.c index 6a6d29b3..68527a76 100644 --- a/src/object49.c +++ b/src/object49.c @@ -8,11 +8,13 @@ void sub_0808F14C(Entity*); extern void PlaySFX(u32); extern void sub_0806FCF4(Entity*, u32, u32, u32); extern void sub_0808F244(Entity*); +extern void sub_0805EC9C(Entity*, u32, u32, u32); extern void (*const gUnk_08121E5C[])(Entity*); extern void (*const gUnk_08121E88[])(Entity*); extern void (*const gUnk_08121E98[])(Entity*); + void Object49(Entity* this) { gUnk_08121E5C[this->entityType.form](this); } @@ -99,4 +101,55 @@ void sub_0808F1F8(Entity *this) this->spritePriority.b0 = 7; InitializeAnimation(this, 1); sub_0808F244(this); +} + +void sub_0808F244(Entity *this) +{ + + this->spriteSettings.b.draw = this->parent->spriteSettings.b.draw; + this->y.HALF.HI = this->parent->y.HALF.HI + 3; + this->x.HALF.HI = (*(s8*)&this->attachedEntity->spriteOffsetX + this->attachedEntity->x.HALF.HI); + this->height.WORD = 0; + *(u32 *)&this->field_0x74 = 0x80 - this->parent->height.HALF.HI; + *(u32 *)&this->field_0x78 = 0x100 - this->parent->height.HALF.HI; + *(u32 *)&this->field_0x70 = *((u8 *)&this->parent->field_0x7c + 3); + sub_0808F2B0(this); + if ((this->parent->field_0x6d & 2) != 0) { + DeleteThisEntity(); + } +} + +void sub_0808F2B0(Entity *this) +{ + sub_0805EC9C(this, *(u32 *)&this->field_0x74, *(u32 *)&this->field_0x78, this->field_0x70); +} + +void sub_0808F2C0(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->spriteRendering.b3 = this->parent->spriteRendering.b3; + this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY; + this->spriteSettings.b.draw = 1; + this->spritePriority.b0 = 7; + this->height.WORD = 0; + + this->y.HALF.HI = this->parent->y.HALF.HI + 3; + this->x.HALF.HI = this->parent->x.HALF.HI; + InitializeAnimation(this,3); + } + if (this->parent->height.HALF.HI == 0) { + *(u32 *)&this->field_0x74 = *(u32 *)&this->parent->field_0x74; + *(u32 *)&this->field_0x78 = *(u32 *)&this->parent->field_0x78; + } + else { + *(u32 *)&this->field_0x74 = 0x200 - this->parent->height.HALF.HI; + *(u32 *)&this->field_0x78 = this->parent->height.HALF.HI * -2 + 0x300; + } + *(u32 *)&this->field_0x70 = 0; + sub_0808F2B0(this); + sub_0806FCF4(this,*(u32 *)&this->field_0x78,8,2); + if (this->action == 0xff) { + DeleteThisEntity(); + } } \ No newline at end of file diff --git a/src/swordsmanNewsletter.c b/src/swordsmanNewsletter.c new file mode 100644 index 00000000..414ac180 --- /dev/null +++ b/src/swordsmanNewsletter.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "entity.h" +#include "textbox.h" + +extern void sub_080787B4(Entity*); + +extern void (*const gUnk_081228B0[])(Entity*); + +extern BoundingBox gUnk_081228A8; +extern u16 gUnk_081228B8[]; + +void SwordsmanNewsletter(Entity* this) { + gUnk_081228B0[this->action](this); +} + +void sub_080933D8(Entity *this) +{ + this->action = 1; + this->frameIndex = this->entityType.form; + UpdateSpriteForCollisionLayer(this); + this->boundingBox = &gUnk_081228A8; + sub_080787B4(this); +} + +void sub_080933FC(Entity *this) +{ + if (this->interactType != 0) { + this->interactType = 0; + TextboxNoOverlap(gUnk_081228B8[this->entityType.form], this); + } +} \ No newline at end of file