mirror of https://github.com/zeldaret/tmc.git
mutoh.c OK
This commit is contained in:
parent
4f20b61b70
commit
d429f7f9cb
202
asm/mutoh.s
202
asm/mutoh.s
|
@ -1,202 +0,0 @@
|
||||||
.include "asm/macros.inc"
|
|
||||||
|
|
||||||
.include "constants/constants.inc"
|
|
||||||
|
|
||||||
.syntax unified
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
|
|
||||||
thumb_func_start Mutoh
|
|
||||||
Mutoh: @ 0x08066FD8
|
|
||||||
push {r4, lr}
|
|
||||||
adds r4, r0, #0
|
|
||||||
adds r0, #0x84
|
|
||||||
ldr r0, [r0]
|
|
||||||
cmp r0, #0
|
|
||||||
bne _08066FE8
|
|
||||||
bl DeleteThisEntity
|
|
||||||
_08066FE8:
|
|
||||||
ldrb r0, [r4, #0xc]
|
|
||||||
cmp r0, #1
|
|
||||||
beq _08067030
|
|
||||||
cmp r0, #1
|
|
||||||
bgt _08066FF8
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08066FFE
|
|
||||||
b _0806707C
|
|
||||||
_08066FF8:
|
|
||||||
cmp r0, #2
|
|
||||||
beq _0806706E
|
|
||||||
b _0806707C
|
|
||||||
_08066FFE:
|
|
||||||
ldr r1, _0806702C @ =gUnk_08110C00
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl LoadExtraSpriteData
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0806707C
|
|
||||||
movs r2, #1
|
|
||||||
movs r0, #1
|
|
||||||
strb r0, [r4, #0xc]
|
|
||||||
ldrb r1, [r4, #0x18]
|
|
||||||
subs r0, #5
|
|
||||||
ands r0, r1
|
|
||||||
orrs r0, r2
|
|
||||||
strb r0, [r4, #0x18]
|
|
||||||
adds r0, r4, #0
|
|
||||||
movs r1, #2
|
|
||||||
bl sub_0805E3A0
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0807DD50
|
|
||||||
b _0806707C
|
|
||||||
.align 2, 0
|
|
||||||
_0806702C: .4byte gUnk_08110C00
|
|
||||||
_08067030:
|
|
||||||
adds r2, r4, #0
|
|
||||||
adds r2, #0x39
|
|
||||||
movs r1, #0
|
|
||||||
ldrsb r1, [r2, r1]
|
|
||||||
cmp r1, #2
|
|
||||||
bne _08067064
|
|
||||||
movs r0, #0
|
|
||||||
strb r1, [r4, #0xc]
|
|
||||||
strb r0, [r2]
|
|
||||||
ldr r1, _08067060 @ =gLinkEntity
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl GetFacingDirection
|
|
||||||
bl sub_0806F5A4
|
|
||||||
adds r1, r0, #0
|
|
||||||
adds r1, #4
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl InitAnimationForceUpdate
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0806F118
|
|
||||||
b _0806707C
|
|
||||||
.align 2, 0
|
|
||||||
_08067060: .4byte gLinkEntity
|
|
||||||
_08067064:
|
|
||||||
adds r0, r4, #0
|
|
||||||
movs r1, #0
|
|
||||||
bl sub_0807DD94
|
|
||||||
b _0806707C
|
|
||||||
_0806706E:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl UpdateFuseInteraction
|
|
||||||
cmp r0, #0
|
|
||||||
beq _0806707C
|
|
||||||
movs r0, #1
|
|
||||||
strb r0, [r4, #0xc]
|
|
||||||
_0806707C:
|
|
||||||
pop {r4, pc}
|
|
||||||
.align 2, 0
|
|
||||||
|
|
||||||
thumb_func_start Mutoh_Head
|
|
||||||
Mutoh_Head: @ 0x08067080
|
|
||||||
push {r4, lr}
|
|
||||||
adds r4, r0, #0
|
|
||||||
adds r0, #0x5a
|
|
||||||
ldrb r2, [r0]
|
|
||||||
movs r0, #0x81
|
|
||||||
rsbs r0, r0, #0
|
|
||||||
ands r2, r0
|
|
||||||
adds r0, r4, #0
|
|
||||||
movs r1, #0
|
|
||||||
bl SetExtraSpriteFrame
|
|
||||||
ldrb r2, [r4, #0x1e]
|
|
||||||
adds r0, r4, #0
|
|
||||||
movs r1, #1
|
|
||||||
bl SetExtraSpriteFrame
|
|
||||||
adds r0, r4, #0
|
|
||||||
movs r1, #1
|
|
||||||
movs r2, #0
|
|
||||||
bl SetSpriteSubEntryOffsetData1
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl sub_0807000C
|
|
||||||
pop {r4, pc}
|
|
||||||
.align 2, 0
|
|
||||||
|
|
||||||
thumb_func_start sub_080670B4
|
|
||||||
sub_080670B4: @ 0x080670B4
|
|
||||||
push {r4, r5, lr}
|
|
||||||
adds r5, r0, #0
|
|
||||||
movs r4, #0
|
|
||||||
movs r0, #0x11
|
|
||||||
bl GetInventoryValue
|
|
||||||
cmp r0, #0
|
|
||||||
bne _080670D0
|
|
||||||
movs r0, #0x15
|
|
||||||
bl CheckGlobalFlag
|
|
||||||
rsbs r1, r0, #0
|
|
||||||
orrs r1, r0
|
|
||||||
lsrs r4, r1, #0x1f
|
|
||||||
_080670D0:
|
|
||||||
ldr r0, _080670E0 @ =gUnk_08110C0C
|
|
||||||
lsls r1, r4, #1
|
|
||||||
adds r1, r1, r0
|
|
||||||
ldrh r0, [r1]
|
|
||||||
adds r1, r5, #0
|
|
||||||
bl TextboxNoOverlap
|
|
||||||
pop {r4, r5, pc}
|
|
||||||
.align 2, 0
|
|
||||||
_080670E0: .4byte gUnk_08110C0C
|
|
||||||
|
|
||||||
thumb_func_start sub_080670E4
|
|
||||||
sub_080670E4: @ 0x080670E4
|
|
||||||
push {lr}
|
|
||||||
ldr r1, _080670F8 @ =gUnk_02002A40
|
|
||||||
ldrb r1, [r1, #8]
|
|
||||||
lsls r1, r1, #3
|
|
||||||
ldr r2, _080670FC @ =gUnk_08110C10
|
|
||||||
adds r1, r1, r2
|
|
||||||
bl ShowNPCDialogue
|
|
||||||
pop {pc}
|
|
||||||
.align 2, 0
|
|
||||||
_080670F8: .4byte gUnk_02002A40
|
|
||||||
_080670FC: .4byte gUnk_08110C10
|
|
||||||
|
|
||||||
thumb_func_start sub_08067100
|
|
||||||
sub_08067100: @ 0x08067100
|
|
||||||
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 Mutoh_Fusion
|
|
||||||
Mutoh_Fusion: @ 0x08067118
|
|
||||||
push {r4, lr}
|
|
||||||
adds r4, r0, #0
|
|
||||||
ldrb r0, [r4, #0xc]
|
|
||||||
cmp r0, #0
|
|
||||||
bne _08067150
|
|
||||||
ldr r1, _0806714C @ =gUnk_08110C00
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl LoadExtraSpriteData
|
|
||||||
cmp r0, #0
|
|
||||||
beq _08067156
|
|
||||||
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 _08067156
|
|
||||||
.align 2, 0
|
|
||||||
_0806714C: .4byte gUnk_08110C00
|
|
||||||
_08067150:
|
|
||||||
adds r0, r4, #0
|
|
||||||
bl GetNextFrame
|
|
||||||
_08067156:
|
|
||||||
pop {r4, pc}
|
|
|
@ -171,5 +171,14 @@ extern void NPC58_Head(Entity*);
|
||||||
|
|
||||||
|
|
||||||
extern u32 UpdateFuseInteraction(Entity*);
|
extern u32 UpdateFuseInteraction(Entity*);
|
||||||
|
extern void ShowNPCDialogue(Entity*, u32*);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
u8 filler[8];
|
||||||
|
u8 unk;
|
||||||
|
} struct_02002A40;
|
||||||
|
|
||||||
|
extern struct_02002A40 gUnk_02002A40;
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -572,7 +572,7 @@ SECTIONS {
|
||||||
asm/npc26.o(.text);
|
asm/npc26.o(.text);
|
||||||
asm/vaati.o(.text);
|
asm/vaati.o(.text);
|
||||||
src/zelda.o(.text);
|
src/zelda.o(.text);
|
||||||
asm/mutoh.o(.text);
|
src/mutoh.o(.text);
|
||||||
src/carpenter.o(.text);
|
src/carpenter.o(.text);
|
||||||
asm/carpenter.o(.text);
|
asm/carpenter.o(.text);
|
||||||
asm/castorWildsStatue.o(.text);
|
asm/castorWildsStatue.o(.text);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#ifdef NON_MATCHING
|
#if 0
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 interruptFlag;
|
u8 interruptFlag;
|
||||||
|
@ -52,6 +52,7 @@ void MainLoop(void) {
|
||||||
bool32 codeInputted;
|
bool32 codeInputted;
|
||||||
u8 cVar1;
|
u8 cVar1;
|
||||||
u32 uVar2;
|
u32 uVar2;
|
||||||
|
MainStruct *s;
|
||||||
|
|
||||||
sub_08055F70();
|
sub_08055F70();
|
||||||
sub_080A3204();
|
sub_080A3204();
|
||||||
|
@ -66,45 +67,42 @@ void MainLoop(void) {
|
||||||
sub_08056418();
|
sub_08056418();
|
||||||
sub_080ADD30();
|
sub_080ADD30();
|
||||||
gRand = 0x1234567;
|
gRand = 0x1234567;
|
||||||
sub_0801D630(&gUnk_03001000, 16);
|
s = &gUnk_03001000;
|
||||||
|
sub_0801D630(s, 16);
|
||||||
sub_08056010(0);
|
sub_08056010(0);
|
||||||
do {
|
while (1) {
|
||||||
ReadKeyInput();
|
ReadKeyInput();
|
||||||
codeInputted = sub_08055FF4();
|
codeInputted = sub_08055FF4();
|
||||||
if (codeInputted) {
|
if (codeInputted) {
|
||||||
sub_080560A8();
|
sub_080560A8();
|
||||||
}
|
}
|
||||||
if ((gUnk_03001000.field_0x1 == 0) || (gUnk_03001000.field_0x1 != 1)) {
|
if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) {
|
||||||
if (gUnk_03001000.field_0x8 != '\0') {
|
sub_08056260();
|
||||||
while (codeInputted) {
|
} else if (s->field_0x8 != 0) {
|
||||||
|
while (--s->field_0x8) {
|
||||||
VBlankInterruptWait();
|
VBlankInterruptWait();
|
||||||
cVar1 = gUnk_03001000.field_0x8 + -1;
|
|
||||||
codeInputted = gUnk_03001000.field_0x8 != '\x01';
|
|
||||||
gUnk_03001000.field_0x8 = cVar1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (gUnk_03001000.countdown != '\0') {
|
if (s->countdown != 0) {
|
||||||
gUnk_03001000.countdown = gUnk_03001000.countdown + -1;
|
s->countdown--;
|
||||||
uVar2 = gUnk_03001000.field_0xa;
|
uVar2 = s->field_0xa;
|
||||||
while (0 < uVar2) {
|
while (uVar2 > 0) {
|
||||||
VBlankIntrWait();
|
VBlankIntrWait();
|
||||||
uVar2 = uVar2 - 1;
|
uVar2--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gUnk_03001000.ticks = gUnk_03001000.ticks + 1;
|
s->ticks++;
|
||||||
gUnk_08100CBC[gUnk_03001000.loadType]();
|
gUnk_08100CBC[s->loadType]();
|
||||||
sub_08056458();
|
sub_08056458();
|
||||||
sub_08050154();
|
sub_08050154();
|
||||||
sub_080A3480();
|
sub_080A3480();
|
||||||
} else {
|
|
||||||
sub_08056260();
|
|
||||||
}
|
}
|
||||||
sub_08016E78();
|
sub_08016E78();
|
||||||
} while (TRUE);
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
|
#endif
|
||||||
|
|
||||||
NAKED
|
NAKED
|
||||||
void MainLoop(void) {
|
void MainLoop(void) {
|
||||||
asm(".include \"asm/non_matching/mainLoop.inc\"");
|
asm(".include \"asm/non_matching/mainLoop.inc\"");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
#include "global.h"
|
||||||
|
#include "entity.h"
|
||||||
|
#include "link.h"
|
||||||
|
#include "flags.h"
|
||||||
|
#include "textbox.h"
|
||||||
|
#include "npc.h"
|
||||||
|
|
||||||
|
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 UpdateFuseInteraction(Entity*);
|
||||||
|
extern void sub_0807000C(Entity*);
|
||||||
|
extern u32 sub_0801E99C(Entity*);
|
||||||
|
extern void sub_08078784(Entity*, u32);
|
||||||
|
|
||||||
|
extern SpriteLoadData gUnk_08110C00;
|
||||||
|
extern u16 gUnk_08110C0C[];
|
||||||
|
extern u32 gUnk_08110C10[];
|
||||||
|
|
||||||
|
void Mutoh(Entity* this)
|
||||||
|
{
|
||||||
|
if (*(u32*)&this->cutsceneBeh == 0) {
|
||||||
|
DeleteThisEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (this->action) {
|
||||||
|
case 0:
|
||||||
|
if (LoadExtraSpriteData(this, &gUnk_08110C00)) {
|
||||||
|
this->action = 1;
|
||||||
|
this->spriteSettings.b.draw = TRUE;
|
||||||
|
sub_0805E3A0(this, 2);
|
||||||
|
sub_0807DD50(this);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (this->interactType == 2) {
|
||||||
|
this->action = 2;
|
||||||
|
this->interactType = 0;
|
||||||
|
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + 4);
|
||||||
|
sub_0806F118(this);
|
||||||
|
} else {
|
||||||
|
sub_0807DD94(this, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (UpdateFuseInteraction(this)) {
|
||||||
|
this->action = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mutoh_Head(Entity *this)
|
||||||
|
{
|
||||||
|
SetExtraSpriteFrame(this, 0, (this->frames.all & -0x81));
|
||||||
|
SetExtraSpriteFrame(this, 1, this->frameIndex);
|
||||||
|
SetSpriteSubEntryOffsetData1(this,1,0);
|
||||||
|
sub_0807000C(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_080670B4(Entity *this)
|
||||||
|
{
|
||||||
|
u32 uVar1;
|
||||||
|
u32 uVar2;
|
||||||
|
|
||||||
|
uVar2 = 0;
|
||||||
|
if (GetInventoryValue(0x11) == 0) {
|
||||||
|
uVar1 = CheckGlobalFlag(0x15);
|
||||||
|
uVar2 = (-uVar1 | uVar1) >> 0x1f;
|
||||||
|
}
|
||||||
|
TextboxNoOverlap(gUnk_08110C0C[uVar2],this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_080670E4(Entity *this)
|
||||||
|
{
|
||||||
|
ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk * 2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_08067100(Entity *this)
|
||||||
|
{
|
||||||
|
this->field_0x68 = sub_0801E99C(this);
|
||||||
|
sub_08078784(this, this->field_0x68);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mutoh_Fusion(Entity *this)
|
||||||
|
{
|
||||||
|
if (this->action == 0) {
|
||||||
|
if (LoadExtraSpriteData(this, &gUnk_08110C00) != 0) {
|
||||||
|
this->action++;
|
||||||
|
this->spriteSettings.b.draw = TRUE;
|
||||||
|
InitializeAnimation(this, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GetNextFrame(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,11 +4,6 @@
|
||||||
#include "textbox.h"
|
#include "textbox.h"
|
||||||
#include "flags.h"
|
#include "flags.h"
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
u8 filler[8];
|
|
||||||
u8 unk;
|
|
||||||
} struct_02002A40;
|
|
||||||
|
|
||||||
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
||||||
extern void sub_0807DD50(Entity*);
|
extern void sub_0807DD50(Entity*);
|
||||||
extern void sub_0806C7D4(Entity*);
|
extern void sub_0806C7D4(Entity*);
|
||||||
|
@ -21,15 +16,13 @@ extern void SetExtraSpriteFrame(Entity*, u32, u32);
|
||||||
extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
||||||
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
||||||
extern void sub_0807000C(Entity*);
|
extern void sub_0807000C(Entity*);
|
||||||
extern void ShowNPCDialogue(Entity*, u16*);
|
|
||||||
|
|
||||||
extern void (*const gUnk_08113A7C[])(Entity*);
|
extern void (*const gUnk_08113A7C[])(Entity*);
|
||||||
extern void (*const gUnk_08113A8C[])(Entity*, Entity*);
|
extern void (*const gUnk_08113A8C[])(Entity*, Entity*);
|
||||||
|
|
||||||
extern SpriteLoadData gUnk_08113A1C[];
|
extern SpriteLoadData gUnk_08113A1C[];
|
||||||
extern u32 gUnk_08014A80;
|
extern u32 gUnk_08014A80;
|
||||||
extern u16 gUnk_08113ABC[];
|
extern u32 gUnk_08113ABC[];
|
||||||
extern struct_02002A40 gUnk_02002A40;
|
|
||||||
extern u16 gUnk_08113B0C[];
|
extern u16 gUnk_08113B0C[];
|
||||||
|
|
||||||
void WindTribespeople(Entity* this) {
|
void WindTribespeople(Entity* this) {
|
||||||
|
@ -129,7 +122,7 @@ void sub_0806C90C(Entity *param_1,Entity *param_2)
|
||||||
|
|
||||||
void sub_0806C928(Entity *this)
|
void sub_0806C928(Entity *this)
|
||||||
{
|
{
|
||||||
ShowNPCDialogue(this, gUnk_08113ABC + (gUnk_02002A40.unk * 4));
|
ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk * 2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_0806C944(Entity *this)
|
void sub_0806C944(Entity *this)
|
||||||
|
|
Loading…
Reference in New Issue