From 4636831cdbc52997b0c20baa30944b6d66ae64a5 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 6 Feb 2022 05:21:52 +0200 Subject: [PATCH] Decompile the rest of tingleSiblings --- .../tingleSiblings/sub_08064DE4.inc | 97 ----------- .../tingleSiblings/sub_08064EE8.inc | 34 ---- .../tingleSiblings/sub_08064F28.inc | 121 -------------- assets/assets.json | 10 -- data/const/npc/tingleSiblings.s | 16 -- linker.ld | 2 +- src/npc/tingleSiblings.c | 155 ++++++++++++++---- 7 files changed, 124 insertions(+), 311 deletions(-) delete mode 100644 asm/non_matching/tingleSiblings/sub_08064DE4.inc delete mode 100644 asm/non_matching/tingleSiblings/sub_08064EE8.inc delete mode 100644 asm/non_matching/tingleSiblings/sub_08064F28.inc delete mode 100644 data/const/npc/tingleSiblings.s diff --git a/asm/non_matching/tingleSiblings/sub_08064DE4.inc b/asm/non_matching/tingleSiblings/sub_08064DE4.inc deleted file mode 100644 index d6ca6b67..00000000 --- a/asm/non_matching/tingleSiblings/sub_08064DE4.inc +++ /dev/null @@ -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 diff --git a/asm/non_matching/tingleSiblings/sub_08064EE8.inc b/asm/non_matching/tingleSiblings/sub_08064EE8.inc deleted file mode 100644 index f5ac250c..00000000 --- a/asm/non_matching/tingleSiblings/sub_08064EE8.inc +++ /dev/null @@ -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 diff --git a/asm/non_matching/tingleSiblings/sub_08064F28.inc b/asm/non_matching/tingleSiblings/sub_08064F28.inc deleted file mode 100644 index aa6af2fd..00000000 --- a/asm/non_matching/tingleSiblings/sub_08064F28.inc +++ /dev/null @@ -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 diff --git a/assets/assets.json b/assets/assets.json index 706dcd76..37cac3ba 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -37144,16 +37144,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 diff --git a/data/const/npc/tingleSiblings.s b/data/const/npc/tingleSiblings.s deleted file mode 100644 index 73fcdcc5..00000000 --- a/data/const/npc/tingleSiblings.s +++ /dev/null @@ -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" diff --git a/linker.ld b/linker.ld index d1126618..ed4a8cb9 100644 --- a/linker.ld +++ b/linker.ld @@ -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); diff --git a/src/npc/tingleSiblings.c b/src/npc/tingleSiblings.c index 48c46b6c..82eb9ee2 100644 --- a/src/npc/tingleSiblings.c +++ b/src/npc/tingleSiblings.c @@ -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 };