From 87038a31bfab54cc47ee1bc8ffd91a0f29b33a82 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 14:39:45 +0200 Subject: [PATCH] Decompile manager36 --- asm/manager36.s | 81 -------------------------------- asm/vaati.s | 4 +- data/scripts/script_0800AB08.inc | 2 +- data/scripts/script_0800AB6E.inc | 2 +- data/scripts/script_0800DB78.inc | 2 +- data/scripts/script_0800DC4C.inc | 2 +- data/scripts/script_08010BB4.inc | 2 +- data/scripts/script_08010E5A.inc | 4 +- data/scripts/script_08010F84.inc | 2 +- data/scripts/script_080134DC.inc | 6 +-- data/scripts/script_08013650.inc | 2 +- data/scripts/script_08013720.inc | 4 +- data/scripts/script_080138B4.inc | 6 +-- data/scripts/script_08013AA6.inc | 2 +- data/scripts/script_080153EC.inc | 2 +- data/scripts/script_0801548E.inc | 2 +- data/scripts/script_08015618.inc | 4 +- include/entity.h | 2 + include/manager.h | 2 +- linker.ld | 2 +- src/entity.c | 1 - src/manager/manager36.c | 44 +++++++++++++++++ 22 files changed, 72 insertions(+), 108 deletions(-) delete mode 100644 asm/manager36.s create mode 100644 src/manager/manager36.c diff --git a/asm/manager36.s b/asm/manager36.s deleted file mode 100644 index 1856842e..00000000 --- a/asm/manager36.s +++ /dev/null @@ -1,81 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager36_Main -Manager36_Main: @ 0x0805DDB4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xa] - lsls r0, r0, #2 - ldr r1, _0805DDE0 @ =gUnk_08108DA8 - adds r3, r0, r1 - ldrb r0, [r2, #0xc] - adds r1, r0, #0 - cmp r1, #0 - bne _0805DDCE - adds r0, #1 - strb r0, [r2, #0xc] - strb r1, [r2, #0xe] -_0805DDCE: - ldrb r0, [r2, #0xe] - cmp r0, #0 - bne _0805DDE4 - ldrh r0, [r3] - strb r0, [r2, #0xe] - ldrh r0, [r3, #2] - bl SoundReq - b _0805DDE8 - .align 2, 0 -_0805DDE0: .4byte gUnk_08108DA8 -_0805DDE4: - subs r0, #1 - strb r0, [r2, #0xe] -_0805DDE8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805DDEC -sub_0805DDEC: @ 0x0805DDEC - push {r4, r5, lr} - adds r5, r1, #0 - bl GetEmptyManager - adds r4, r0, #0 - cmp r4, #0 - beq _0805DE16 - movs r0, #9 - strb r0, [r4, #8] - movs r0, #0x36 - strb r0, [r4, #9] - ldr r0, [r5, #4] - strb r0, [r4, #0xa] - adds r0, r4, #0 - movs r1, #6 - bl AppendEntityToList - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 -_0805DE16: - pop {r4, r5, pc} - - thumb_func_start sub_0805DE18 -sub_0805DE18: @ 0x0805DE18 - push {lr} - sub sp, #4 - ldr r3, [r1, #4] - movs r0, #0 - str r0, [sp] - movs r0, #9 - movs r1, #0x36 - movs r2, #6 - bl FindEntity - cmp r0, #0 - beq _0805DE34 - bl DeleteEntityAny -_0805DE34: - add sp, #4 - pop {pc} diff --git a/asm/vaati.s b/asm/vaati.s index a9f5bf86..4fc88888 100644 --- a/asm/vaati.s +++ b/asm/vaati.s @@ -130,7 +130,7 @@ _08066B40: movs r0, #4 str r0, [r1, #4] adds r0, r4, #0 - bl sub_0805DDEC + bl CreateManager36 b _08066B66 _08066B52: adds r0, r4, #0 @@ -138,7 +138,7 @@ _08066B52: ldr r1, [r0] str r2, [r1, #4] adds r0, r4, #0 - bl sub_0805DE18 + bl DeleteManager36 ldr r0, _08066B70 @ =0x0000021D bl EnqueueSFX _08066B66: diff --git a/data/scripts/script_0800AB08.inc b/data/scripts/script_0800AB08.inc index d0cea700..3e39cd33 100644 --- a/data/scripts/script_0800AB08.inc +++ b/data/scripts/script_0800AB08.inc @@ -17,5 +17,5 @@ SCRIPT_START script_0800AB08 _0807EA94 TextboxNoOverlapFollowPos 0x165e, 0x000e _0807EA94 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_0800AB6E.inc b/data/scripts/script_0800AB6E.inc index 1f8e3217..93ddef40 100644 --- a/data/scripts/script_0800AB6E.inc +++ b/data/scripts/script_0800AB6E.inc @@ -8,7 +8,7 @@ SCRIPT_START script_0800AB6E SetEntityPosition 0x0000, 0xffe0 Call sub_0807F5C0 Wait 0x003c - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 Wait 0x003c _0807E5F8 0x00000002 diff --git a/data/scripts/script_0800DB78.inc b/data/scripts/script_0800DB78.inc index 829bc9d0..03052307 100644 --- a/data/scripts/script_0800DB78.inc +++ b/data/scripts/script_0800DB78.inc @@ -42,5 +42,5 @@ script_0800DBCA: _0807E5F8 0x00000001 StopBgm Call sub_08094F98 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_0800DC4C.inc b/data/scripts/script_0800DC4C.inc index 1c84c162..c08bc36d 100644 --- a/data/scripts/script_0800DC4C.inc +++ b/data/scripts/script_0800DC4C.inc @@ -11,7 +11,7 @@ SCRIPT_START script_0800DC4C _0807E778 0x0004 _0807E80C 0x00000000 WaitFor_2 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 SetLocalFlag 0x0079 CallWithArg sub_0806DA1C, 0x00000002 diff --git a/data/scripts/script_08010BB4.inc b/data/scripts/script_08010BB4.inc index 9bd7cb7f..6e912cff 100644 --- a/data/scripts/script_08010BB4.inc +++ b/data/scripts/script_08010BB4.inc @@ -135,5 +135,5 @@ SCRIPT_START script_08010BEC _0807E5F8 0x08000000 _0807E5F8 0x00800000 WaitForSomething2 0x01000000 - CallWithArg sub_0805DDEC, 0x00000002 + CallWithArg CreateManager36, 0x00000002 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08010E5A.inc b/data/scripts/script_08010E5A.inc index 2804a046..2ebf3a9e 100644 --- a/data/scripts/script_08010E5A.inc +++ b/data/scripts/script_08010E5A.inc @@ -24,7 +24,7 @@ SCRIPT_START script_08010E5A _0807E778 0x0002 DoFade6 WaitFor_2 - CallWithArg sub_0805DE18, 0x00000002 + CallWithArg DeleteManager36, 0x00000002 _0807F0C8 0x0000, 0x0000 Call sub_0806DC3C Call sub_080791BC @@ -51,5 +51,5 @@ SCRIPT_START script_08010E5A _0807EA94 TextboxNoOverlapFollowPos 0x1046, 0x0000 _0807EA94 - CallWithArg sub_0805DDEC, 0x00000002 + CallWithArg CreateManager36, 0x00000002 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08010F84.inc b/data/scripts/script_08010F84.inc index d10ec983..54feb621 100644 --- a/data/scripts/script_08010F84.inc +++ b/data/scripts/script_08010F84.inc @@ -22,7 +22,7 @@ SCRIPT_START script_08010F84 Wait 0x000f PlaySound SFX_125 CallWithArg sub_0807FB28, 0x00000003 - CallWithArg sub_0805DE18, 0x00000002 + CallWithArg DeleteManager36, 0x00000002 _0807F0C8 0x0000, 0x0000 _0807E5F8 0x00000010 WaitForSomething2 0x00000020 diff --git a/data/scripts/script_080134DC.inc b/data/scripts/script_080134DC.inc index 9431e96d..bdf9d90e 100644 --- a/data/scripts/script_080134DC.inc +++ b/data/scripts/script_080134DC.inc @@ -34,7 +34,7 @@ script_080134F8: CallWithArg sub_08095D8C, script_08014118 EndBlock Wait 0x003c - CallWithArg sub_0805DDEC, 0x00000000 + CallWithArg CreateManager36, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 PlaySound SFX_1D2 @@ -44,7 +44,7 @@ script_080134F8: WaitForSomething2 0x00004000 Wait 0x0078 _0807E5F8 0x00000060 - CallWithArg sub_0805DE18, 0x00000000 + CallWithArg DeleteManager36, 0x00000000 Wait 0x0078 _0807E5F8 0x00000080 WaitForSomething2 0x00000100 @@ -69,5 +69,5 @@ script_080134F8: TextboxNoOverlapFollowPos 0x0503, 0x000c _0807EA94 _0807E5F8 0x00040000 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08013650.inc b/data/scripts/script_08013650.inc index 0b142523..be9e61d7 100644 --- a/data/scripts/script_08013650.inc +++ b/data/scripts/script_08013650.inc @@ -7,7 +7,7 @@ SCRIPT_START script_08013650 Wait 0x003c _0807E5F8 0x00000004 Wait 0x0078 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 StartPlayerScript script_080136B4 WaitForSomething2 0x00000002 diff --git a/data/scripts/script_08013720.inc b/data/scripts/script_08013720.inc index b7718584..d669a6ce 100644 --- a/data/scripts/script_08013720.inc +++ b/data/scripts/script_08013720.inc @@ -35,7 +35,7 @@ script_0801373C: CallWithArg sub_08095D8C, script_08014154 EndBlock Wait 0x003c - CallWithArg sub_0805DDEC, 0x00000000 + CallWithArg CreateManager36, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 PlaySound SFX_1D2 @@ -47,7 +47,7 @@ script_0801373C: WaitForSomething2 0x00008000 Wait 0x0078 _0807E5F8 0x00000060 - CallWithArg sub_0805DE18, 0x00000000 + CallWithArg DeleteManager36, 0x00000000 Wait 0x0078 _0807E5F8 0x00000080 WaitForSomething2 0x00000100 diff --git a/data/scripts/script_080138B4.inc b/data/scripts/script_080138B4.inc index 206ac542..c2401d1d 100644 --- a/data/scripts/script_080138B4.inc +++ b/data/scripts/script_080138B4.inc @@ -37,7 +37,7 @@ script_080138D0: CallWithArg sub_08095D8C, script_08014198 EndBlock Wait 0x003c - CallWithArg sub_0805DDEC, 0x00000000 + CallWithArg CreateManager36, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 PlaySound SFX_1D2 @@ -51,7 +51,7 @@ script_080138D0: WaitForSomething2 0x00010000 Wait 0x0078 _0807E5F8 0x00000060 - CallWithArg sub_0805DE18, 0x00000000 + CallWithArg DeleteManager36, 0x00000000 Wait 0x0078 _0807E5F8 0x00000080 WaitForSomething2 0x00000100 @@ -93,5 +93,5 @@ script_08013A8E: CheckRoomFlag 0x0004 JumpIfNot script_08013A8E .endif - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08013AA6.inc b/data/scripts/script_08013AA6.inc index 37961ee2..704a94ee 100644 --- a/data/scripts/script_08013AA6.inc +++ b/data/scripts/script_08013AA6.inc @@ -9,7 +9,7 @@ SCRIPT_START script_08013AA6 .endif _0807E5F8 0x00000008 Wait 0x0078 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 Wait 0x003c _0807F0B4 0x0004 diff --git a/data/scripts/script_080153EC.inc b/data/scripts/script_080153EC.inc index 4b6215c6..e44e0e7a 100644 --- a/data/scripts/script_080153EC.inc +++ b/data/scripts/script_080153EC.inc @@ -32,5 +32,5 @@ SCRIPT_START script_080153EC _0807EA94 TextboxNoOverlapFollowPos 0x1310, 0x000c _0807EA94 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_0801548E.inc b/data/scripts/script_0801548E.inc index 4c3abbd4..28d145b7 100644 --- a/data/scripts/script_0801548E.inc +++ b/data/scripts/script_0801548E.inc @@ -11,7 +11,7 @@ SCRIPT_START script_0801548E WaitForSomething2 0x00010000 _0807E5F8 0x00048000 WaitForSomething2 0x00010000 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 TextboxNoOverlapFollowPos 0x1312, 0x000c _0807EA94 diff --git a/data/scripts/script_08015618.inc b/data/scripts/script_08015618.inc index 399b1b33..58bf24d6 100644 --- a/data/scripts/script_08015618.inc +++ b/data/scripts/script_08015618.inc @@ -5,13 +5,13 @@ SCRIPT_START script_08015618 Call sub_08094B80 EndBlock WaitForSomething2 0x00000080 - CallWithArg sub_0805DDEC, 0x00000003 + CallWithArg CreateManager36, 0x00000003 Call sub_08094B0C _0807EDD4 0x0078, 0x0068 _0807E5F8 0x00000100 WaitForSomething2 0x00000080 _0807EF3C 0xff80, 0x0000 - CallWithArg sub_0805DE18, 0x00000003 + CallWithArg DeleteManager36, 0x00000003 Wait 0x003c _0807E5F8 0x00000100 WaitForSomething2 0x00000080 diff --git a/include/entity.h b/include/entity.h index ca4bd10d..2109a212 100644 --- a/include/entity.h +++ b/include/entity.h @@ -265,4 +265,6 @@ Entity* FindNextDuplicateID(Entity* ent, int listIndex); */ Entity* FindEntity(u32 kind, u32 id, u32 listIndex, u32 type, u32 type2); +void DeleteEntityAny(Entity* ent); + #endif diff --git a/include/manager.h b/include/manager.h index 5facf6a0..f3a81b46 100644 --- a/include/manager.h +++ b/include/manager.h @@ -193,7 +193,7 @@ extern void Manager32_Main(Entity*); extern void Manager33_Main(Entity*); extern void Manager34_Main(Entity*); extern void Manager35_Main(Entity*); -extern void Manager36_Main(Entity*); +extern void Manager36_Main(Manager*); extern void Manager37_Main(Entity*); extern void Manager38_Main(Entity*); extern void Manager39_Main(); diff --git a/linker.ld b/linker.ld index 29c6a9f6..7c36ca52 100644 --- a/linker.ld +++ b/linker.ld @@ -555,7 +555,7 @@ SECTIONS { asm/manager33.o(.text); asm/manager34.o(.text); asm/manager35.o(.text); - asm/manager36.o(.text); + src/manager/manager36.o(.text); asm/manager37.o(.text); src/manager/manager38.o(.text); src/manager/manager39.o(.text); diff --git a/src/entity.c b/src/entity.c index f3fd7ca3..02230491 100644 --- a/src/entity.c +++ b/src/entity.c @@ -49,7 +49,6 @@ typedef struct { extern struct_03003DD0 gUnk_03003DD0; extern u32 _call_via_r0(u32*); extern u32 _EntUpdate; -void DeleteEntityAny(Entity*); void DeleteThisEntity(void) { DeleteEntityAny(gUnk_03003DD0.field_0x8); diff --git a/src/manager/manager36.c b/src/manager/manager36.c new file mode 100644 index 00000000..e7251db2 --- /dev/null +++ b/src/manager/manager36.c @@ -0,0 +1,44 @@ +#include "manager.h" +#include "audio.h" +#include "script.h" +#include "functions.h" + +typedef struct { + u16 waitTime; + u16 sound; +} Manager36_unk; + +extern Manager36_unk gUnk_08108DA8[]; + +// Repeatedly plays the same sound with a fixed wait time +void Manager36_Main(Manager* manager) { + Manager36_unk* unk = &gUnk_08108DA8[manager->unk_0a]; + if (manager->action == 0) { + manager->action += 1; + manager->unk_0e = 0; + } + if (manager->unk_0e == 0) { + manager->unk_0e = unk->waitTime; + SoundReq(unk->sound); + } else { + manager->unk_0e -= 1; + } +} + +void CreateManager36(Entity* entity, ScriptExecutionContext* context) { + Manager* manager = GetEmptyManager(); + if (manager != NULL) { + manager->type = 9; + manager->subtype = 0x36; + manager->unk_0a = context->intVariable; + AppendEntityToList((Entity*)manager, 6); + sub_0805E3A0(manager, 6); + } +} + +void DeleteManager36(Entity* entity, ScriptExecutionContext* context) { + Entity* manager = FindEntity(9, 0x36, 6, context->intVariable, 0); + if (manager != NULL) { + DeleteEntityAny(manager); + } +}