diff --git a/asm/non_matching/minishEzlo/sub_080630A4.inc b/asm/non_matching/minishEzlo/sub_080630A4.inc deleted file mode 100644 index 269de92b..00000000 --- a/asm/non_matching/minishEzlo/sub_080630A4.inc +++ /dev/null @@ -1,175 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x6d - ldrb r0, [r0] - cmp r0, #0 - beq _080630BA - ldr r0, [r4, #0x6c] - adds r0, #0x80 - lsls r0, r0, #0x14 - lsrs r5, r0, #0x17 - b _080630D0 -_080630BA: - adds r0, r4, #0 - adds r0, #0x6c - ldrb r1, [r0] - lsrs r1, r1, #6 - movs r0, #3 - eors r1, r0 - adds r1, #1 - movs r0, #0x10 - bl __divsi3 - asrs r5, r0, #1 -_080630D0: - movs r0, #0x80 - lsls r0, r0, #1 - ldr r2, [r4, #0x70] - cmp r2, r0 - bls _080630E4 - adds r0, r2, #0 - adds r0, #0x80 - lsls r0, r0, #0x14 - lsrs r3, r0, #0x17 - b _080630F4 -_080630E4: - cmp r2, r0 - bne _080630EC - movs r3, #0x10 - b _080630F4 -_080630EC: - ldr r1, _08063110 @ =gUnk_0810C498 - lsrs r0, r2, #5 - adds r0, r0, r1 - ldrb r3, [r0] -_080630F4: - movs r6, #0x80 - lsls r6, r6, #9 - adds r0, r4, #0 - adds r0, #0x5b - ldrb r0, [r0] - movs r1, #3 - ands r1, r0 - cmp r1, #2 - beq _08063144 - cmp r1, #2 - bgt _08063114 - cmp r1, #1 - beq _0806311A - b _080631CA - .align 2, 0 -_08063110: .4byte gUnk_0810C498 -_08063114: - cmp r1, #3 - beq _0806317A - b _080631CA -_0806311A: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - ldr r0, [r4, #0x6c] - cmp r0, #0x80 - bls _08063132 - subs r0, r0, r5 - str r0, [r4, #0x6c] -_08063132: - lsls r1, r3, #1 - ldr r0, [r4, #0x70] - adds r0, r0, r1 - str r0, [r4, #0x70] - lsls r1, r6, #1 - ldr r0, [r4, #0x30] - adds r0, r0, r1 - str r0, [r4, #0x30] - b _080631CA -_08063144: - ldr r0, [r4, #0x6c] - adds r0, r0, r5 - str r0, [r4, #0x6c] - ldr r1, [r4, #0x70] - movs r2, #0x80 - lsls r2, r2, #1 - cmp r1, r2 - bls _0806316C - ldr r0, _08063168 @ =0x0000017F - cmp r1, r0 - bhi _0806315C - lsrs r3, r3, #1 -_0806315C: - subs r0, r1, r3 - cmp r0, #0xff - bhi _08063172 - str r2, [r4, #0x70] - b _08063174 - .align 2, 0 -_08063168: .4byte 0x0000017F -_0806316C: - cmp r1, #0x80 - bls _08063174 - subs r0, r1, r3 -_08063172: - str r0, [r4, #0x70] -_08063174: - ldr r0, [r4, #0x34] - subs r0, r0, r6 - b _080631C8 -_0806317A: - ldr r0, [r4, #0x6c] - ldr r1, _080631B4 @ =0x0000033F - cmp r0, r1 - bhi _08063186 - adds r0, r0, r5 - str r0, [r4, #0x6c] -_08063186: - cmp r2, r1 - bls _080631BC - movs r2, #0x80 - lsls r2, r2, #1 - adds r0, r4, #0 - adds r1, r2, #0 - movs r3, #0 - bl SetAffineInfo - adds r0, r4, #0 - movs r1, #0x11 - bl InitAnimationForceUpdate - adds r1, r4, #0 - adds r1, #0x80 - movs r0, #0x11 - strh r0, [r1] - ldr r2, _080631B8 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _080631DC - .align 2, 0 -_080631B4: .4byte 0x0000033F -_080631B8: .4byte gActiveScriptInfo -_080631BC: - lsls r0, r3, #1 - adds r0, r2, r0 - str r0, [r4, #0x70] - ldr r0, [r4, #0x34] - ldr r1, _080631E0 @ =0xFFFE0000 - adds r0, r0, r1 -_080631C8: - str r0, [r4, #0x34] -_080631CA: - ldr r1, [r4, #0x6c] - ldr r2, [r4, #0x70] - adds r0, r4, #0 - movs r3, #0 - bl SetAffineInfo - ldr r1, _080631E4 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_080631DC: - pop {r4, r5, r6, pc} - .align 2, 0 -_080631E0: .4byte 0xFFFE0000 -_080631E4: .4byte gActiveScriptInfo - .syntax divided diff --git a/assets/assets.json b/assets/assets.json index e3c57a2e..ce16dc72 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -35916,16 +35916,6 @@ "size": 8, "type": "animation" }, - { - "path": "minishEzlo/gUnk_0810C48C.bin", - "start": 1098892, - "size": 12 - }, - { - "path": "minishEzlo/gUnk_0810C498.bin", - "start": 1098904, - "size": 8 - }, { "path": "animations/gSpriteAnimations_Mailbox_0.bin", "start": 1099796, diff --git a/data/const/npc/minishEzlo.s b/data/const/npc/minishEzlo.s deleted file mode 100644 index 526b8b38..00000000 --- a/data/const/npc/minishEzlo.s +++ /dev/null @@ -1,11 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0810C48C:: @ 0810C48C - .incbin "minishEzlo/gUnk_0810C48C.bin" - -gUnk_0810C498:: @ 0810C498 - .incbin "minishEzlo/gUnk_0810C498.bin" diff --git a/linker.ld b/linker.ld index e1ab765c..51e46ad6 100644 --- a/linker.ld +++ b/linker.ld @@ -1173,7 +1173,7 @@ SECTIONS { data/animations/npc/wheaton.o(.rodata); src/npc/pita.o(.rodata); data/animations/npc/pita.o(.rodata); - data/const/npc/minishEzlo.o(.rodata); + src/npc/minishEzlo.o(.rodata); data/animations/npc/minishEzlo.o(.rodata); data/const/npc/mailbox.o(.rodata); data/animations/npc/mailbox.o(.rodata); diff --git a/src/npc/minishEzlo.c b/src/npc/minishEzlo.c index 561ac4d6..ff6742ed 100644 --- a/src/npc/minishEzlo.c +++ b/src/npc/minishEzlo.c @@ -1,15 +1,28 @@ +#define NENT_DEPRECATED #include "entity.h" #include "sound.h" #include "script.h" #include "npc.h" -extern SpriteLoadData gUnk_0810C48C; +typedef struct { + Entity base; + u32 filler; + union SplitWord field_0x6c; + u32 field_0x70; + u8 filler2[0xC]; + s16 field_0x80; +} MinishEzloEntity; extern void sub_0806FF10(Entity* this, u32 param_2, u32 param_3); void MinishEzlo(Entity* this) { + static const SpriteLoadData gUnk_0810C48C[] = { + { 0x411c, 0x25, 0x4 }, + { 0x11c, 0x25, 0x4 }, + { 0x0, 0x0, 0x0 }, + }; if (this->action == 0) { - if (LoadExtraSpriteData(this, &gUnk_0810C48C) == 0) { + if (LoadExtraSpriteData(this, gUnk_0810C48C) == 0) { return; } this->action += 1; @@ -47,22 +60,92 @@ void MinishEzlo_Head(Entity* this) { } else { uVar3 = 0x11c; } - SetExtraSpriteFrame(this, uVar2, (this->frame & 0xffffff7f) - 1); + SetExtraSpriteFrame(this, uVar2, (this->frame & ~ANIM_DONE) - 1); SetExtraSpriteFrame(this, uVar1, this->frameIndex); sub_0806FF10(this, uVar1, uVar3); SetSpriteSubEntryOffsetData1(this, uVar1, uVar2); sub_0807000C(this); } -void sub_0806305C(Entity* this) { - this->spritePriority.b1 = 0; - this->spriteRendering.b0 = 3; - *(u32*)&this->field_0x6c = 0x100; - this->field_0x70.WORD = 0x100; - SetAffineInfo(this, 0x100, 0x100, 0x0); - InitAnimationForceUpdate(this, 0x10); - this->field_0x80.HWORD = 0x10; +void sub_0806305C(MinishEzloEntity* this) { + super->spritePriority.b1 = 0; + super->spriteRendering.b0 = 3; + this->field_0x6c.WORD_U = 0x100; + this->field_0x70 = 0x100; + SetAffineInfo(super, 0x100, 0x100, 0x0); + InitAnimationForceUpdate(super, 0x10); + this->field_0x80 = 0x10; SoundReq(SFX_PLY_SHRINKING); } -ASM_FUNC("asm/non_matching/minishEzlo/sub_080630A4.inc", void sub_080630A4(Entity* this)) +void sub_080630A4(MinishEzloEntity* this) { + static const u8 gUnk_0810C498[] = { 1, 1, 1, 1, 2, 4, 8, 16 }; + u32 uVar4; + u32 uVar5; + u32 uVar6; + u32 uVar7; + + if (this->field_0x6c.BYTES.byte1 != 0) { + uVar5 = ((this->field_0x6c.WORD_U + 0x80) * 0x100000) >> 0x17; + } else { + uVar5 = (0x10 / ((this->field_0x6c.BYTES.byte0 >> 6 ^ 3) + 1)) >> 1; + } + + if (this->field_0x70 >= 0x101) { + uVar4 = (this->field_0x70 + 0x80) * 0x100000 >> 0x17; + } else { + if (this->field_0x70 == 0x100) { + uVar4 = 0x10; + } else { + uVar4 = gUnk_0810C498[this->field_0x70 >> 5]; + } + } + + uVar6 = Q_16_16(1); + switch (super->frameSpriteSettings & 3) { + case 1: + super->spritePriority.b1 = 0; + if (0x80 < this->field_0x6c.WORD_U) { + this->field_0x6c.WORD_U -= uVar5; + } + this->field_0x70 += uVar4 * 2; + super->y.WORD += uVar6 * 2; + break; + case 2: + this->field_0x6c.WORD_U += uVar5; + uVar7 = this->field_0x70; + if (uVar7 >= 0x101) { + if (uVar7 < 0x180) { + uVar4 = uVar4 >> 1; + } + if (uVar7 - uVar4 < 0x100) { + this->field_0x70 = 0x100; + } else { + this->field_0x70 = uVar7 - uVar4; + } + } else { + if (0x80 < uVar7) { + this->field_0x70 = uVar7 - uVar4; + } + } + super->z.WORD -= uVar6; + break; + case 3: + if (this->field_0x6c.WORD_U < 0x340) { + this->field_0x6c.WORD_U += uVar5; + } + if (0x33f < this->field_0x70) { + SetAffineInfo(super, 0x100, 0x100, 0); + InitAnimationForceUpdate(super, 0x11); + this->field_0x80 = 0x11; + gActiveScriptInfo.flags |= 1; + return; + } + this->field_0x70 += uVar4 * 2; + super->z.WORD -= uVar6 * 2; + break; + } + + SetAffineInfo(super, this->field_0x6c.WORD_U, this->field_0x70, 0); + gActiveScriptInfo.commandSize = 0; +}