Match sub_080630A4

This commit is contained in:
Tal Hayon 2022-04-14 13:33:26 +03:00
parent 57886f751b
commit 912a7a563f
5 changed files with 96 additions and 209 deletions

View File

@ -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

View File

@ -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,

View File

@ -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"

View File

@ -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);

View File

@ -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;
}