diff --git a/.gitignore b/.gitignore index 5704a6f3..f7c4e9e2 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,4 @@ _Deparsed_XSubs.pm *.py *.sna __pycache__ +.vscode/settings.json diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index 060a891d..12971065 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -920,7 +920,7 @@ sub_08017508: @ 0x08017508 bl sub_0805E3B0 cmp r0, #0 bne _08017524 - ldr r0, _0801752C @ =gUnk_080B3054 + ldr r0, _0801752C @ =gManagerFunctions ldrb r1, [r4, #9] lsls r1, r1, #2 adds r1, r1, r0 @@ -932,7 +932,7 @@ _08017524: pop {r0} bx r0 .align 2, 0 -_0801752C: .4byte gUnk_080B3054 +_0801752C: .4byte gManagerFunctions thumb_func_start sub_08017530 sub_08017530: @ 0x08017530 diff --git a/data/data_080B3054.s b/data/data_080B3054.s deleted file mode 100644 index f45126bd..00000000 --- a/data/data_080B3054.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080B3054:: @ 080B3054 - .incbin "baserom.gba", 0x0B3054, 0x00000E8 diff --git a/include/manager.h b/include/manager.h index 18850056..7830adc4 100644 --- a/include/manager.h +++ b/include/manager.h @@ -133,4 +133,62 @@ typedef struct { u16 unk_06; } UnkManager26HelperStruct; +extern void Manager1(); +extern void Manager2(); +extern void sub_080576C0(); +extern void sub_08057854(); +extern void sub_08057AD0(); +extern void sub_08057CB4(); +extern void Manager7_Main(); +extern void sub_08057ED0(); +extern void sub_080581D8(); +extern void sub_08058380(); +extern void sub_080585F0(); +extern void sub_0805884C(); +extern void sub_08058DD0(Entity*); +extern void sub_08058E60(); +extern void sub_08058ECC(Entity*); +extern void sub_08059570(Entity*); +extern void sub_080599B8(Entity*); +extern void sub_080599EC(Entity*); +extern void sub_08059DAC(Entity*); +extern void sub_08059E58(Entity*); +extern void sub_0805A280(); +extern void sub_0805AB4C(Entity*); +extern void sub_0805AD48(Entity*); +extern void sub_0805ADD8(); +extern void sub_0805AF60(Entity*); +extern void sub_0805B030(); +extern void sub_0805B3B4(Entity*); +extern void sub_0805B53C(Entity*); +extern void sub_0805B5C8(Entity*); +extern void Manager1E_Handler(); +extern void sub_0805B6F4(Entity*); +extern void sub_0805B7A0(); +extern void sub_0805B820(Entity*); +extern void sub_0805B8EC(Entity*); +extern void sub_0805BC74(Entity*); +extern void sub_0805BF18(Entity*); +extern void sub_0805C61C(Entity*); +extern void sub_0805C6B8(); +extern void Manager27(); +extern void Manager28_Entry(); +extern void sub_0805CB90(Entity*); +extern void sub_0805CFC0(Entity*); +extern void sub_0805D014(Entity*); +extern void sub_0805D174(Entity*); +extern void sub_0805D1FC(Entity*); +extern void sub_0805D250(); +extern void sub_0805D3C8(); +extern void Manager30_Main(); +extern void sub_0805D630(Entity*); +extern void sub_0805D7A4(Entity*); +extern void sub_0805DAE8(Entity*); +extern void sub_0805DB94(Entity*); +extern void sub_0805DC84(Entity*); +extern void sub_0805DDB4(Entity*); +extern void sub_0805DE38(Entity*); +extern void sub_0805E0A8(Entity*); +extern void sub_0805E0FC(); + #endif diff --git a/linker.ld b/linker.ld index 39154469..3c359d8e 100644 --- a/linker.ld +++ b/linker.ld @@ -908,7 +908,7 @@ SECTIONS { data/data_080B2A70.o(.rodata); data/playerItemFunctions.o(.rodata); src/object.o(.rodata); - data/data_080B3054.o(.rodata); + src/manager.o(.rodata); src/npc.o(.rodata); data/data_080B3740.o(.rodata); src/trig.o(.rodata); diff --git a/src/manager.c b/src/manager.c new file mode 100644 index 00000000..a57bbae4 --- /dev/null +++ b/src/manager.c @@ -0,0 +1,63 @@ +#include "manager.h" + +// TODO: change all manager arguments to be Entity* and cast to specific type later. +void (*const gManagerFunctions[])() = { + NULL, + Manager1, + Manager2, + sub_080576C0, + sub_08057854, + sub_08057AD0, + sub_08057CB4, + Manager7_Main, + sub_08057ED0, + sub_080581D8, + sub_08058380, + sub_080585F0, + sub_0805884C, + sub_08058DD0, + sub_08058E60, + sub_08058ECC, + sub_08059570, + sub_080599B8, + sub_080599EC, + sub_08059DAC, + sub_08059E58, + sub_0805A280, + sub_0805AB4C, + sub_0805AD48, + sub_0805ADD8, + sub_0805AF60, + sub_0805B030, + sub_0805B3B4, + sub_0805B53C, + sub_0805B5C8, + Manager1E_Handler, + sub_0805B6F4, + sub_0805B7A0, + sub_0805B820, + sub_0805B8EC, + sub_0805BC74, + sub_0805BF18, + sub_0805C61C, + sub_0805C6B8, + Manager27, + Manager28_Entry, + sub_0805CB90, + sub_0805CFC0, + sub_0805D014, + sub_0805D174, + sub_0805D1FC, + sub_0805D250, + sub_0805D3C8, + Manager30_Main, + sub_0805D630, + sub_0805D7A4, + sub_0805DAE8, + sub_0805DB94, + sub_0805DC84, + sub_0805DDB4, + sub_0805DE38, + sub_0805E0A8, + sub_0805E0FC +}; diff --git a/src/object.c b/src/object.c index 4fd93b40..e27e6cf2 100644 --- a/src/object.c +++ b/src/object.c @@ -1,7 +1,6 @@ #include "global.h" #include "entity.h" #include "object.h" -//clang-format off void (*const gObjectFunctions[])(Entity*) = { /*0x00*/ ItemOnGround, @@ -197,6 +196,5 @@ void (*const gObjectFunctions[])(Entity*) = { /*0xbe*/ Pinwheel, /*0xbf*/ ObjectBF, /*0xc0*/ EnemyItem, - /*0xc1*/ ObjectC1, + /*0xc1*/ ObjectC1 }; -//clang-format on