Merge pull request #360 from hatal175/tingleSiblings

This commit is contained in:
notyourav 2022-02-06 02:08:35 -08:00 committed by GitHub
commit a6c141a78e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 124 additions and 311 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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