mirror of https://github.com/zeldaret/tmc.git
melari.c OK
This commit is contained in:
parent
ed5c6d08dd
commit
f9bdae5fe6
386
asm/melari.s
386
asm/melari.s
|
@ -1,386 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Melari
|
||||
Melari: @ 0x080686D4
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #2
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08068700
|
||||
ldr r0, _080686FC @ =gUnk_08111530
|
||||
ldrb r1, [r4, #0xc]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
adds r0, r4, #0
|
||||
bl sub_0806ED78
|
||||
b _08068706
|
||||
.align 2, 0
|
||||
_080686FC: .4byte gUnk_08111530
|
||||
_08068700:
|
||||
adds r0, r4, #0
|
||||
bl sub_08068780
|
||||
_08068706:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08068708
|
||||
sub_08068708: @ 0x08068708
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _0806872C @ =gUnk_08111520
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _08068728
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl InitializeAnimation
|
||||
adds r0, r4, #0
|
||||
bl sub_08078778
|
||||
_08068728:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0806872C: .4byte gUnk_08111520
|
||||
|
||||
thumb_func_start sub_08068730
|
||||
sub_08068730: @ 0x08068730
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #0x20
|
||||
movs r2, #0x20
|
||||
bl sub_0806ED9C
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
blt _08068762
|
||||
ldrb r0, [r4, #0xf]
|
||||
cmp r0, #0
|
||||
bne _0806875E
|
||||
movs r0, #0x10
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r0, [r0]
|
||||
cmp r0, r1
|
||||
beq _08068762
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
b _08068762
|
||||
_0806875E:
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xf]
|
||||
_08068762:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x39
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
cmp r0, #0
|
||||
beq _0806877E
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
ldrb r0, [r4, #0xe]
|
||||
movs r1, #0x90
|
||||
lsls r1, r1, #5
|
||||
adds r0, r0, r1
|
||||
bl TextboxNoOverlapFollow
|
||||
_0806877E:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_08068780
|
||||
sub_08068780: @ 0x08068780
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r0, [r5, #0xc]
|
||||
cmp r0, #1
|
||||
beq _080687D0
|
||||
cmp r0, #1
|
||||
bgt _08068794
|
||||
cmp r0, #0
|
||||
beq _0806879A
|
||||
b _0806880E
|
||||
_08068794:
|
||||
cmp r0, #2
|
||||
beq _08068800
|
||||
b _0806880E
|
||||
_0806879A:
|
||||
ldr r1, _080687CC @ =gUnk_08111520
|
||||
adds r0, r5, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _0806887A
|
||||
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, #0xa]
|
||||
strb r0, [r5, #0x14]
|
||||
adds r0, r5, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
adds r0, r5, #0
|
||||
bl sub_0807DD50
|
||||
b _0806880E
|
||||
.align 2, 0
|
||||
_080687CC: .4byte gUnk_08111520
|
||||
_080687D0:
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x39
|
||||
movs r1, #0
|
||||
ldrsb r1, [r2, r1]
|
||||
cmp r1, #2
|
||||
bne _080687EA
|
||||
movs r0, #0
|
||||
strb r1, [r5, #0xc]
|
||||
strb r0, [r2]
|
||||
adds r0, r5, #0
|
||||
bl sub_0806F118
|
||||
b _0806880E
|
||||
_080687EA:
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl sub_0807DDAC
|
||||
adds r0, r5, #0
|
||||
bl sub_0807DDE4
|
||||
adds r0, r5, #0
|
||||
bl GetNextFrame
|
||||
b _0806880E
|
||||
_08068800:
|
||||
adds r0, r5, #0
|
||||
bl UpdateFuseInteraction
|
||||
cmp r0, #0
|
||||
beq _0806880E
|
||||
movs r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
_0806880E:
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x5a
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x40
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0806887A
|
||||
movs r0, #0xbf
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
adds r0, r5, #0
|
||||
bl sub_080040A8
|
||||
cmp r0, #0
|
||||
bne _08068848
|
||||
ldr r4, _08068844 @ =gUnk_0811153E
|
||||
bl Random
|
||||
movs r1, #3
|
||||
bl __modsi3
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r4
|
||||
ldrh r0, [r0]
|
||||
bl PlaySFX
|
||||
b _0806885E
|
||||
.align 2, 0
|
||||
_08068844: .4byte gUnk_0811153E
|
||||
_08068848:
|
||||
ldr r4, _0806887C @ =gUnk_08111538
|
||||
bl Random
|
||||
movs r1, #3
|
||||
bl __modsi3
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r4
|
||||
ldrh r0, [r0]
|
||||
bl sub_08004488
|
||||
_0806885E:
|
||||
adds r0, r5, #0
|
||||
movs r1, #0x3d
|
||||
movs r2, #0x20
|
||||
bl CreateFx
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _0806887A
|
||||
movs r2, #0xc0
|
||||
lsls r2, r2, #0xd
|
||||
ldr r3, _08068880 @ =0xFFF60000
|
||||
adds r0, r5, #0
|
||||
bl PositionRelative
|
||||
_0806887A:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0806887C: .4byte gUnk_08111538
|
||||
_08068880: .4byte 0xFFF60000
|
||||
|
||||
thumb_func_start sub_08068884
|
||||
sub_08068884: @ 0x08068884
|
||||
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 Melari_Head
|
||||
Melari_Head: @ 0x0806889C
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r4, [r0]
|
||||
movs r0, #0xc1
|
||||
rsbs r0, r0, #0
|
||||
ands r4, r0
|
||||
ldrb r2, [r5, #0x1e]
|
||||
adds r0, r5, #0
|
||||
movs r1, #1
|
||||
bl SetExtraSpriteFrame
|
||||
movs r0, #0x20
|
||||
ands r0, r4
|
||||
cmp r0, #0
|
||||
beq _080688E2
|
||||
movs r0, #0xe1
|
||||
rsbs r0, r0, #0
|
||||
ands r4, r0
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
adds r2, r4, #0
|
||||
bl SetExtraSpriteFrame
|
||||
adds r0, r5, #0
|
||||
movs r1, #2
|
||||
movs r2, #0xff
|
||||
bl SetExtraSpriteFrame
|
||||
adds r0, r5, #0
|
||||
movs r1, #1
|
||||
movs r2, #0
|
||||
bl SetSpriteSubEntryOffsetData1
|
||||
b _08068906
|
||||
_080688E2:
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
movs r2, #0xff
|
||||
bl SetExtraSpriteFrame
|
||||
movs r0, #0xe1
|
||||
rsbs r0, r0, #0
|
||||
ands r4, r0
|
||||
adds r0, r5, #0
|
||||
movs r1, #2
|
||||
adds r2, r4, #0
|
||||
bl SetExtraSpriteFrame
|
||||
adds r0, r5, #0
|
||||
movs r1, #1
|
||||
movs r2, #2
|
||||
bl SetSpriteSubEntryOffsetData2
|
||||
_08068906:
|
||||
adds r0, r5, #0
|
||||
bl sub_0807000C
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08068910
|
||||
sub_08068910: @ 0x08068910
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _08068920
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
b _08068960
|
||||
_08068920:
|
||||
movs r0, #0x10
|
||||
strb r0, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x20
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08068960
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x30
|
||||
movs r2, #0x30
|
||||
bl sub_0806EDD8
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
bge _08068944
|
||||
movs r2, #0x10
|
||||
_08068944:
|
||||
adds r0, r2, #0
|
||||
bl sub_0806F5A4
|
||||
adds r2, r0, #0
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x58
|
||||
ldrb r1, [r0]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r1, r0
|
||||
adds r1, r1, r2
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
_08068960:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08068964
|
||||
sub_08068964: @ 0x08068964
|
||||
push {lr}
|
||||
movs r0, #0x35
|
||||
movs r1, #0
|
||||
movs r2, #3
|
||||
bl sub_080A7C18
|
||||
movs r0, #0x35
|
||||
movs r1, #2
|
||||
bl sub_0807CAA0
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start Melari_Fusion
|
||||
Melari_Fusion: @ 0x0806897C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _080689B4
|
||||
ldr r1, _080689B0 @ =gUnk_08111520
|
||||
adds r0, r4, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _080689BA
|
||||
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, #6
|
||||
bl InitializeAnimation
|
||||
b _080689BA
|
||||
.align 2, 0
|
||||
_080689B0: .4byte gUnk_08111520
|
||||
_080689B4:
|
||||
adds r0, r4, #0
|
||||
bl GetNextFrame
|
||||
_080689BA:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start nullsub_502
|
||||
nullsub_502: @ 0x080689BC
|
||||
bx lr
|
||||
.align 2, 0
|
|
@ -582,7 +582,7 @@ SECTIONS {
|
|||
asm/cat.o(.text);
|
||||
asm/mountainMinish.o(.text);
|
||||
asm/zeldaFollower.o(.text);
|
||||
asm/melari.o(.text);
|
||||
src/npc/melari.o(.text);
|
||||
src/npc/bladeBrothers.o(.text);
|
||||
src/npc/cow.o(.text);
|
||||
src/npc/goron.o(.text);
|
||||
|
|
|
@ -0,0 +1,173 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "npc.h"
|
||||
#include "textbox.h"
|
||||
#include "functions.h"
|
||||
|
||||
extern void sub_0806ED78(Entity*);
|
||||
extern void sub_08068780(Entity*);
|
||||
extern void sub_08078778(Entity*);
|
||||
extern u32 Random(void);
|
||||
extern void sub_0805E3A0(Entity*, u32);
|
||||
extern void sub_0807DD50(Entity*);
|
||||
extern void sub_0806F118(Entity*);
|
||||
extern void sub_0807DDAC(Entity*, u32);
|
||||
extern void sub_0807DDE4(Entity*);
|
||||
extern u32 sub_080040A8(Entity*);
|
||||
extern void sub_08004488(u32);
|
||||
extern u32 sub_0801E99C(Entity*);
|
||||
extern void sub_08078784(Entity*, u32);
|
||||
extern void sub_0807000C(Entity*);
|
||||
extern s32 sub_0806EDD8(Entity*, u32, u32);
|
||||
extern void sub_080A7C18(u32, u32, u32);
|
||||
extern void sub_0807CAA0(u32, u32);
|
||||
|
||||
extern void (*const gUnk_08111530[])(Entity*);
|
||||
|
||||
extern SpriteLoadData gUnk_08111520;
|
||||
extern u16 gUnk_0811153E[];
|
||||
extern u16 gUnk_08111538[];
|
||||
|
||||
void Melari(Entity* this) {
|
||||
if ((this->flags & 2) == 0) {
|
||||
gUnk_08111530[this->action](this);
|
||||
sub_0806ED78(this);
|
||||
} else {
|
||||
sub_08068780(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08068708(Entity* this) {
|
||||
if (LoadExtraSpriteData(this, &gUnk_08111520) != 0) {
|
||||
this->action = 1;
|
||||
InitializeAnimation(this, 0);
|
||||
sub_08078778(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08068730(Entity* this) {
|
||||
s32 animIndex;
|
||||
|
||||
animIndex = sub_0806ED9C(this, 0x20, 0x20);
|
||||
if (-1 < animIndex) {
|
||||
if (this->field_0xf == 0) {
|
||||
this->field_0xf = 0x10;
|
||||
if (this->animIndex != animIndex) {
|
||||
InitializeAnimation(this, animIndex);
|
||||
}
|
||||
} else {
|
||||
this->field_0xf--;
|
||||
}
|
||||
}
|
||||
if (this->interactType != 0) {
|
||||
this->interactType = 0;
|
||||
TextboxNoOverlapFollow(this->actionDelay + 0x1200);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08068780(Entity* this) {
|
||||
Entity* ent;
|
||||
|
||||
switch (this->action) {
|
||||
case 0:
|
||||
if (LoadExtraSpriteData(this, &gUnk_08111520) == 0) {
|
||||
return;
|
||||
}
|
||||
this->action = 1;
|
||||
this->spriteSettings.b.draw = TRUE;
|
||||
this->animationState = this->entityType.form;
|
||||
sub_0805E3A0(this, 2);
|
||||
sub_0807DD50(this);
|
||||
break;
|
||||
case 1:
|
||||
if (this->interactType == 2) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
sub_0806F118(this);
|
||||
} else {
|
||||
sub_0807DDAC(this, 0);
|
||||
sub_0807DDE4(this);
|
||||
GetNextFrame(this);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (UpdateFuseInteraction(this)) {
|
||||
this->action = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((this->frames.b.f2) != 0) {
|
||||
this->frames.all &= 0xbf;
|
||||
if (sub_080040A8(this) == 0) {
|
||||
PlaySFX(gUnk_0811153E[(s32)Random() % 3]);
|
||||
} else {
|
||||
sub_08004488(gUnk_08111538[(s32)Random() % 3]);
|
||||
}
|
||||
ent = CreateFx(this, 0x3d, 0x20);
|
||||
if (ent != NULL) {
|
||||
PositionRelative(this, ent, 0x180000, -0xa0000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08068884(Entity* this) {
|
||||
this->field_0x68 = sub_0801E99C(this);
|
||||
sub_08078784(this, this->field_0x68);
|
||||
}
|
||||
|
||||
void Melari_Head(Entity* this) {
|
||||
u32 bVar1;
|
||||
|
||||
bVar1 = this->frames.all;
|
||||
bVar1 &= -0xc1;
|
||||
SetExtraSpriteFrame(this, 1, this->frameIndex);
|
||||
if ((bVar1 & 0x20) != 0) {
|
||||
SetExtraSpriteFrame(this, 0, bVar1 & -0xe1);
|
||||
SetExtraSpriteFrame(this, 2, 0xff);
|
||||
SetSpriteSubEntryOffsetData1(this, 1, 0);
|
||||
} else {
|
||||
SetExtraSpriteFrame(this, 0, 0xff);
|
||||
SetExtraSpriteFrame(this, 2, bVar1 & -0xe1);
|
||||
SetSpriteSubEntryOffsetData2(this, 1, 2);
|
||||
}
|
||||
sub_0807000C(this);
|
||||
}
|
||||
|
||||
void sub_08068910(Entity* this) {
|
||||
s32 iVar1;
|
||||
|
||||
if (this->actionDelay != 0) {
|
||||
this->actionDelay--;
|
||||
} else {
|
||||
this->actionDelay = 0x10;
|
||||
if ((this->frames.all & 0x20) != 0) {
|
||||
iVar1 = sub_0806EDD8(this, 0x30, 0x30);
|
||||
if (iVar1 < 0) {
|
||||
iVar1 = 0x10;
|
||||
} else {
|
||||
}
|
||||
iVar1 = sub_0806F5A4(iVar1);
|
||||
InitializeAnimation(this, (this->animIndex & -0x4) + iVar1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08068964(Entity* this) {
|
||||
sub_080A7C18(53, 0, 3);
|
||||
sub_0807CAA0(53, 2);
|
||||
}
|
||||
|
||||
void Melari_Fusion(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
if (LoadExtraSpriteData(this, &gUnk_08111520)) {
|
||||
this->action++;
|
||||
this->spriteSettings.b.draw = TRUE;
|
||||
InitializeAnimation(this, 6);
|
||||
}
|
||||
} else {
|
||||
GetNextFrame(this);
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_502(Entity* this) {
|
||||
}
|
Loading…
Reference in New Issue