mirror of https://github.com/zeldaret/tmc.git
Merge pull request #360 from hatal175/tingleSiblings
This commit is contained in:
commit
a6c141a78e
|
@ -1,97 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #1
|
||||
beq _08064E1A
|
||||
cmp r0, #1
|
||||
bgt _08064DF8
|
||||
cmp r0, #0
|
||||
beq _08064DFE
|
||||
b _08064E6A
|
||||
_08064DF8:
|
||||
cmp r0, #2
|
||||
beq _08064E56
|
||||
b _08064E6A
|
||||
_08064DFE:
|
||||
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]
|
||||
movs r0, #4
|
||||
strb r0, [r4, #0x14]
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DD50
|
||||
b _08064E6A
|
||||
_08064E1A:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x39
|
||||
movs r1, #0
|
||||
ldrsb r1, [r2, r1]
|
||||
cmp r1, #2
|
||||
bne _08064E4C
|
||||
movs r0, #0
|
||||
strb r1, [r4, #0xc]
|
||||
strb r0, [r2]
|
||||
ldr r1, _08064E48 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
bl GetFacingDirection
|
||||
bl sub_0806F5A4
|
||||
adds r1, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
adds r0, r4, #0
|
||||
bl sub_0806F118
|
||||
b _08064E6A
|
||||
.align 2, 0
|
||||
_08064E48: .4byte gPlayerEntity
|
||||
_08064E4C:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_0807DD94
|
||||
b _08064E6A
|
||||
_08064E56:
|
||||
adds r0, r4, #0
|
||||
bl UpdateFuseInteraction
|
||||
cmp r0, #0
|
||||
beq _08064E6A
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
bl sub_0801E99C
|
||||
_08064E6A:
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x5a
|
||||
ldrb r1, [r2]
|
||||
movs r5, #0xf
|
||||
ands r5, r1
|
||||
adds r0, r5, #0
|
||||
eors r0, r1
|
||||
strb r0, [r2]
|
||||
cmp r5, #0
|
||||
beq _08064EA0
|
||||
movs r1, #0x29
|
||||
cmp r5, #3
|
||||
bne _08064E86
|
||||
movs r1, #0x2a
|
||||
_08064E86:
|
||||
adds r0, r4, #0
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _08064EA0
|
||||
cmp r5, #2
|
||||
bne _08064EA0
|
||||
ldrb r0, [r2, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
_08064EA0:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
|
@ -1,34 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x5a
|
||||
ldrb r1, [r2]
|
||||
movs r5, #0xf
|
||||
ands r5, r1
|
||||
adds r0, r5, #0
|
||||
eors r0, r1
|
||||
strb r0, [r2]
|
||||
cmp r5, #0
|
||||
beq _08064F26
|
||||
movs r1, #0x2a
|
||||
cmp r5, #3
|
||||
beq _08064F0C
|
||||
movs r1, #0x29
|
||||
_08064F0C:
|
||||
adds r0, r4, #0
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
beq _08064F26
|
||||
cmp r5, #2
|
||||
bne _08064F26
|
||||
ldrb r0, [r2, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0x18]
|
||||
_08064F26:
|
||||
pop {r4, r5, pc}
|
||||
.syntax divided
|
|
@ -1,121 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r6, r0, #0
|
||||
mov r8, r1
|
||||
movs r0, #0
|
||||
str r0, [r1, #0x14]
|
||||
ldr r1, _08064F60 @ =gUnk_0810FC50
|
||||
ldrb r0, [r6, #0xa]
|
||||
adds r0, r0, r1
|
||||
ldrb r7, [r0]
|
||||
adds r0, r7, #0
|
||||
bl CheckRoomFlag
|
||||
cmp r0, #0
|
||||
bne _08064F84
|
||||
ldr r4, _08064F64 @ =gSave
|
||||
adds r0, r6, #0
|
||||
bl sub_08002632
|
||||
ldr r1, _08064F68 @ =0x00000141
|
||||
adds r4, r4, r1
|
||||
adds r0, r0, r4
|
||||
ldrb r4, [r0]
|
||||
cmp r4, #1
|
||||
bls _08064F6C
|
||||
movs r5, #3
|
||||
b _08064F7E
|
||||
.align 2, 0
|
||||
_08064F60: .4byte gUnk_0810FC50
|
||||
_08064F64: .4byte gSave
|
||||
_08064F68: .4byte 0x00000141
|
||||
_08064F6C:
|
||||
movs r0, #0xc
|
||||
bl GetInventoryValue
|
||||
movs r5, #2
|
||||
cmp r0, #0
|
||||
bne _08064F7E
|
||||
rsbs r0, r4, #0
|
||||
orrs r0, r4
|
||||
lsrs r5, r0, #0x1f
|
||||
_08064F7E:
|
||||
movs r4, #1
|
||||
rsbs r4, r4, #0
|
||||
b _08064FD2
|
||||
_08064F84:
|
||||
movs r0, #0x3a
|
||||
bl CheckGlobalFlag
|
||||
cmp r0, #0
|
||||
bne _08064FCE
|
||||
ldr r0, _08064FB0 @ =gSave
|
||||
ldr r1, _08064FB4 @ =0x00000117
|
||||
adds r0, r0, r1
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x64
|
||||
subs r4, r0, r1
|
||||
cmp r4, #0
|
||||
bgt _08064FB8
|
||||
movs r5, #8
|
||||
movs r4, #0
|
||||
movs r0, #0x3a
|
||||
bl SetGlobalFlag
|
||||
movs r0, #1
|
||||
mov r1, r8
|
||||
str r0, [r1, #0x14]
|
||||
b _08064FD2
|
||||
.align 2, 0
|
||||
_08064FB0: .4byte gSave
|
||||
_08064FB4: .4byte 0x00000117
|
||||
_08064FB8:
|
||||
movs r5, #7
|
||||
cmp r4, #9
|
||||
ble _08064FC0
|
||||
movs r5, #6
|
||||
_08064FC0:
|
||||
cmp r4, #0x27
|
||||
ble _08064FC6
|
||||
movs r5, #5
|
||||
_08064FC6:
|
||||
cmp r4, #0x45
|
||||
ble _08064FD2
|
||||
movs r5, #4
|
||||
b _08064FD2
|
||||
_08064FCE:
|
||||
movs r5, #8
|
||||
movs r4, #0
|
||||
_08064FD2:
|
||||
ldr r2, _08065008 @ =gUnk_0810FC08
|
||||
ldrb r1, [r6, #0xa]
|
||||
lsls r0, r1, #3
|
||||
adds r0, r0, r1
|
||||
adds r0, r0, r5
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r2
|
||||
ldrh r0, [r0]
|
||||
adds r1, r6, #0
|
||||
bl MessageNoOverlap
|
||||
cmp r4, #0
|
||||
ble _08064FF4
|
||||
ldr r1, _0806500C @ =gMessage
|
||||
lsls r0, r4, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
str r0, [r1, #0x10]
|
||||
_08064FF4:
|
||||
adds r0, r7, #0
|
||||
bl CheckRoomFlag
|
||||
cmp r0, #0
|
||||
bne _08065010
|
||||
adds r0, r7, #0
|
||||
bl SetRoomFlag
|
||||
b _08065016
|
||||
.align 2, 0
|
||||
_08065008: .4byte gUnk_0810FC08
|
||||
_0806500C: .4byte gMessage
|
||||
_08065010:
|
||||
adds r0, r7, #0
|
||||
bl ClearRoomFlag
|
||||
_08065016:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.syntax divided
|
|
@ -37104,16 +37104,6 @@
|
|||
"size": 158,
|
||||
"type": "animation"
|
||||
},
|
||||
{
|
||||
"path": "tingleSiblings/gUnk_0810FC08.bin",
|
||||
"start": 1113096,
|
||||
"size": 72
|
||||
},
|
||||
{
|
||||
"path": "tingleSiblings/gUnk_0810FC50.bin",
|
||||
"start": 1113168,
|
||||
"size": 4
|
||||
},
|
||||
{
|
||||
"offsets": {
|
||||
"EU": -2224
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_0810FBFC:: @ 0810FBFC
|
||||
.4byte sub_08064D90
|
||||
.4byte sub_08064DA0
|
||||
.4byte sub_08064DCC
|
||||
|
||||
gUnk_0810FC08:: @ 0810FC08
|
||||
.incbin "tingleSiblings/gUnk_0810FC08.bin"
|
||||
|
||||
gUnk_0810FC50:: @ 0810FC50
|
||||
.incbin "tingleSiblings/gUnk_0810FC50.bin"
|
|
@ -1226,7 +1226,7 @@ SECTIONS {
|
|||
data/animations/npc/farore.o(.rodata);
|
||||
data/const/npc/sturgeon.o(.rodata);
|
||||
data/animations/npc/sturgeon.o(.rodata);
|
||||
data/const/npc/tingleSiblings.o(.rodata);
|
||||
src/npc/tingleSiblings.o(.rodata);
|
||||
data/animations/npc/tingleSiblings.o(.rodata);
|
||||
data/const/npc/stockwell.o(.rodata);
|
||||
data/animations/npc/stockwell.o(.rodata);
|
||||
|
|
|
@ -2,12 +2,15 @@
|
|||
#include "entity.h"
|
||||
#include "npc.h"
|
||||
#include "functions.h"
|
||||
#include "item.h"
|
||||
|
||||
extern void sub_08064DE4(Entity*);
|
||||
extern void sub_08064D78(Entity*);
|
||||
extern void sub_08064EE8(Entity*);
|
||||
|
||||
extern void (*const gUnk_0810FBFC[])(Entity*);
|
||||
void (*const TingleSiblings_Actions[])(Entity*);
|
||||
const u8 gUnk_0810FC50[];
|
||||
const u16 TingleSiblings_MessageIndices[][9];
|
||||
|
||||
void TingleSiblings(Entity* this) {
|
||||
if ((this->flags & ENT_SCRIPTED) != 0) {
|
||||
|
@ -18,7 +21,7 @@ void TingleSiblings(Entity* this) {
|
|||
}
|
||||
|
||||
void sub_08064D78(Entity* this) {
|
||||
gUnk_0810FBFC[this->action](this);
|
||||
TingleSiblings_Actions[this->action](this);
|
||||
}
|
||||
|
||||
void sub_08064D90(Entity* this) {
|
||||
|
@ -40,25 +43,26 @@ void sub_08064DCC(Entity* this) {
|
|||
InitAnimationForceUpdate(this, 2);
|
||||
this->action = 1;
|
||||
}
|
||||
/*
|
||||
|
||||
void sub_08064DE4(Entity* this) {
|
||||
u32 bVar1;
|
||||
|
||||
switch (this->action) {
|
||||
case 0:
|
||||
this->action = 1;
|
||||
this->spriteSettings = this->spriteSettings & 0xfc | 1;
|
||||
this->animationState = '\x04';
|
||||
sub_0807DD50(this);
|
||||
this->action = 1;
|
||||
this->spriteSettings.draw = 1;
|
||||
this->animationState = 4;
|
||||
sub_0807DD50(this);
|
||||
break;
|
||||
case 1:
|
||||
if (this->interactType == 2) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
GetFacingDirection(this, &gPlayerEntity);
|
||||
InitAnimationForceUpdate(this, sub_0806F5A4());
|
||||
sub_0806F118(this);
|
||||
} else {
|
||||
sub_0807DD94(this, 0);
|
||||
}
|
||||
if (this->interactType == 2) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)));
|
||||
sub_0806F118(this);
|
||||
} else {
|
||||
sub_0807DD94(this, 0);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (UpdateFuseInteraction(this)) {
|
||||
|
@ -67,30 +71,27 @@ void sub_08064DE4(Entity* this) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
{
|
||||
u8 bVar1 = this->frame;
|
||||
u8 bVar5 = bVar1 & 0xf;
|
||||
this->frame = bVar5 ^ bVar1;
|
||||
if (bVar1 & 0xf) {
|
||||
Entity* fx = CreateFx(this, bVar5 == 3 ? 0x2a : 0x29, 0);
|
||||
if (fx && bVar5 == 2) {
|
||||
fx->spriteSettings.flipX = 1;
|
||||
}
|
||||
|
||||
bVar1 = this->frame & 0xf;
|
||||
this->frame ^= bVar1;
|
||||
if (bVar1) {
|
||||
Entity* fx = CreateFx(this, bVar1 == 3 ? FX_CONFETTI_LARGE : FX_CONFETTI, 0);
|
||||
if (fx && bVar1 == 2) {
|
||||
fx->spriteSettings.flipX = 1;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
ASM_FUNC("asm/non_matching/tingleSiblings/sub_08064DE4.inc", void sub_08064DE4(Entity* this))
|
||||
}
|
||||
|
||||
void sub_08064EA4(Entity* this) {
|
||||
this->field_0x68.HALF.LO = sub_0801E99C(this);
|
||||
switch (this->type) {
|
||||
case 0:
|
||||
if ((CheckKinstoneFused(0x59) != 0) && (GetInventoryValue(0xc) == 0)) {
|
||||
if ((CheckKinstoneFused(0x59) != 0) && (GetInventoryValue(ITEM_MAGIC_BOOMERANG) == 0)) {
|
||||
this->field_0x68.HALF.LO = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if ((CheckKinstoneFused(0x5a) != 0) && (GetInventoryValue(0xc) == 0)) {
|
||||
if ((CheckKinstoneFused(0x5a) != 0) && (GetInventoryValue(ITEM_MAGIC_BOOMERANG) == 0)) {
|
||||
this->field_0x68.HALF.LO = 0;
|
||||
}
|
||||
break;
|
||||
|
@ -100,10 +101,85 @@ void sub_08064EA4(Entity* this) {
|
|||
sub_08078784(this, this->field_0x68.HALF.LO);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/tingleSiblings/sub_08064EE8.inc", void sub_08064EE8(Entity* this))
|
||||
void sub_08064EE8(Entity* this) {
|
||||
u32 bVar1;
|
||||
Entity* fxEnt;
|
||||
u32 confettiFx;
|
||||
|
||||
ASM_FUNC("asm/non_matching/tingleSiblings/sub_08064F28.inc",
|
||||
void sub_08064F28(Entity* this, ScriptExecutionContext* context))
|
||||
UpdateAnimationSingleFrame(this);
|
||||
bVar1 = this->frame & 0xf;
|
||||
this->frame ^= bVar1;
|
||||
if (bVar1) {
|
||||
if (bVar1 != 3) {
|
||||
confettiFx = FX_CONFETTI;
|
||||
} else {
|
||||
confettiFx = FX_CONFETTI_LARGE;
|
||||
}
|
||||
|
||||
fxEnt = CreateFx(this, confettiFx, 0);
|
||||
if (fxEnt && bVar1 == 2) {
|
||||
fxEnt->spriteSettings.flipX = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08064F28(Entity* this, ScriptExecutionContext* context) {
|
||||
u32 roomFlag;
|
||||
u32 bVar2;
|
||||
int iVar3;
|
||||
int iVar4;
|
||||
u32 uVar5;
|
||||
|
||||
context->condition = 0;
|
||||
roomFlag = gUnk_0810FC50[this->type];
|
||||
if (CheckRoomFlag(roomFlag) == 0) {
|
||||
bVar2 = gSave.unk141[sub_08002632(this)];
|
||||
if (bVar2 >= 2) {
|
||||
uVar5 = 3;
|
||||
} else {
|
||||
iVar3 = GetInventoryValue(ITEM_MAGIC_BOOMERANG);
|
||||
uVar5 = 2;
|
||||
if (iVar3 == 0) {
|
||||
uVar5 = (-bVar2 | bVar2) >> 0x1f;
|
||||
}
|
||||
}
|
||||
iVar4 = 0xffffffff;
|
||||
} else {
|
||||
if (CheckGlobalFlag(0x3a) == 0) {
|
||||
iVar4 = 100 - gSave.unk117;
|
||||
if (iVar4 < 1) {
|
||||
uVar5 = 8;
|
||||
iVar4 = 0;
|
||||
SetGlobalFlag(0x3a);
|
||||
context->condition = 1;
|
||||
} else {
|
||||
uVar5 = 7;
|
||||
if (9 < iVar4) {
|
||||
uVar5 = 6;
|
||||
}
|
||||
if (0x27 < iVar4) {
|
||||
uVar5 = 5;
|
||||
}
|
||||
if (0x45 < iVar4) {
|
||||
uVar5 = 4;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
uVar5 = 8;
|
||||
iVar4 = 0;
|
||||
}
|
||||
}
|
||||
MessageNoOverlap(TingleSiblings_MessageIndices[this->type][uVar5], this);
|
||||
if (iVar4 > 0) {
|
||||
gMessage.field_0x10 = (u16)iVar4;
|
||||
}
|
||||
|
||||
if (CheckRoomFlag(roomFlag) == 0) {
|
||||
SetRoomFlag(roomFlag);
|
||||
} else {
|
||||
ClearRoomFlag(roomFlag);
|
||||
}
|
||||
}
|
||||
|
||||
void TingleSiblings_Fusion(Entity* this) {
|
||||
u32 tmp;
|
||||
|
@ -119,3 +195,18 @@ void TingleSiblings_Fusion(Entity* this) {
|
|||
sub_08064EE8(this);
|
||||
}
|
||||
}
|
||||
|
||||
void (*const TingleSiblings_Actions[])(Entity*) = {
|
||||
sub_08064D90,
|
||||
sub_08064DA0,
|
||||
sub_08064DCC,
|
||||
};
|
||||
|
||||
const u16 TingleSiblings_MessageIndices[][9] = {
|
||||
{ 0x3f01, 0x3f02, 0x3f03, 0x3f04, 0x3f1b, 0x3f1c, 0x3f1d, 0x3f1e, 0x3f1f },
|
||||
{ 0x3f05, 0x3f06, 0x3f07, 0x3f07, 0x3f20, 0x3f21, 0x3f22, 0x3f23, 0x3f24 },
|
||||
{ 0x3f08, 0x3f09, 0x3f09, 0x3f09, 0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29 },
|
||||
{ 0x3f0a, 0x3f0b, 0x3f0c, 0x3f0d, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e },
|
||||
};
|
||||
|
||||
const u8 gUnk_0810FC50[] = { 0, 0, 0, 0 };
|
||||
|
|
Loading…
Reference in New Issue