mutoh.c OK

This commit is contained in:
theo3 2020-07-12 22:27:28 -07:00
parent 4f20b61b70
commit d429f7f9cb
6 changed files with 130 additions and 233 deletions

View File

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

View File

@ -171,5 +171,14 @@ extern void NPC58_Head(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

View File

@ -572,7 +572,7 @@ SECTIONS {
asm/npc26.o(.text);
asm/vaati.o(.text);
src/zelda.o(.text);
asm/mutoh.o(.text);
src/mutoh.o(.text);
src/carpenter.o(.text);
asm/carpenter.o(.text);
asm/castorWildsStatue.o(.text);

View File

@ -1,7 +1,7 @@
#include "global.h"
#include "main.h"
#ifdef NON_MATCHING
#if 0
typedef struct {
u8 interruptFlag;
@ -52,6 +52,7 @@ void MainLoop(void) {
bool32 codeInputted;
u8 cVar1;
u32 uVar2;
MainStruct *s;
sub_08055F70();
sub_080A3204();
@ -66,45 +67,42 @@ void MainLoop(void) {
sub_08056418();
sub_080ADD30();
gRand = 0x1234567;
sub_0801D630(&gUnk_03001000, 16);
s = &gUnk_03001000;
sub_0801D630(s, 16);
sub_08056010(0);
do {
while (1) {
ReadKeyInput();
codeInputted = sub_08055FF4();
if (codeInputted) {
sub_080560A8();
}
if ((gUnk_03001000.field_0x1 == 0) || (gUnk_03001000.field_0x1 != 1)) {
if (gUnk_03001000.field_0x8 != '\0') {
while (codeInputted) {
if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) {
sub_08056260();
} else if (s->field_0x8 != 0) {
while (--s->field_0x8) {
VBlankInterruptWait();
cVar1 = gUnk_03001000.field_0x8 + -1;
codeInputted = gUnk_03001000.field_0x8 != '\x01';
gUnk_03001000.field_0x8 = cVar1;
}
}
if (gUnk_03001000.countdown != '\0') {
gUnk_03001000.countdown = gUnk_03001000.countdown + -1;
uVar2 = gUnk_03001000.field_0xa;
while (0 < uVar2) {
if (s->countdown != 0) {
s->countdown--;
uVar2 = s->field_0xa;
while (uVar2 > 0) {
VBlankIntrWait();
uVar2 = uVar2 - 1;
uVar2--;
}
}
gUnk_03001000.ticks = gUnk_03001000.ticks + 1;
gUnk_08100CBC[gUnk_03001000.loadType]();
s->ticks++;
gUnk_08100CBC[s->loadType]();
sub_08056458();
sub_08050154();
sub_080A3480();
} else {
sub_08056260();
}
sub_08016E78();
} while (TRUE);
}
#else
#endif
NAKED
void MainLoop(void) {
asm(".include \"asm/non_matching/mainLoop.inc\"");
}
#endif

99
src/mutoh.c Normal file
View File

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

View File

@ -4,11 +4,6 @@
#include "textbox.h"
#include "flags.h"
typedef struct {
u8 filler[8];
u8 unk;
} struct_02002A40;
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
extern void sub_0807DD50(Entity*);
extern void sub_0806C7D4(Entity*);
@ -21,15 +16,13 @@ extern void SetExtraSpriteFrame(Entity*, u32, u32);
extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
extern void sub_0807000C(Entity*);
extern void ShowNPCDialogue(Entity*, u16*);
extern void (*const gUnk_08113A7C[])(Entity*);
extern void (*const gUnk_08113A8C[])(Entity*, Entity*);
extern SpriteLoadData gUnk_08113A1C[];
extern u32 gUnk_08014A80;
extern u16 gUnk_08113ABC[];
extern struct_02002A40 gUnk_02002A40;
extern u32 gUnk_08113ABC[];
extern u16 gUnk_08113B0C[];
void WindTribespeople(Entity* this) {
@ -129,7 +122,7 @@ void sub_0806C90C(Entity *param_1,Entity *param_2)
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)