diff --git a/asm/non_matching/manager12/Manager12_Main.inc b/asm/non_matching/manager12/Manager12_Main.inc deleted file mode 100644 index 27e66c32..00000000 --- a/asm/non_matching/manager12/Manager12_Main.inc +++ /dev/null @@ -1,32 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08059A20 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #0xff - strb r0, [r1] - subs r1, #1 - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - ldr r1, _08059A28 @ =sub_08059A2C - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 -_08059A20: - adds r0, r4, #0 - bl sub_08059A58 - pop {r4, pc} - .align 2, 0 -_08059A28: .4byte sub_08059A2C - .syntax divided diff --git a/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc b/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc deleted file mode 100644 index 366a47e2..00000000 --- a/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc +++ /dev/null @@ -1,65 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r0, _08059D68 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059D78 - ldr r0, _08059D6C @ =gUnk_08108398 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D36 - movs r0, #0 - adds r1, r4, #0 - bl sub_08059CC0 -_08059D36: - ldr r0, _08059D70 @ =gUnk_081083AE - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D52 - movs r0, #1 - adds r1, r4, #0 - bl sub_08059CC0 - cmp r4, #2 - bne _08059D52 - bl sub_08059B18 -_08059D52: - ldr r0, _08059D74 @ =gUnk_081083C4 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059DA0 - movs r0, #2 - adds r1, r4, #0 - bl sub_08059CC0 - b _08059DA0 - .align 2, 0 -_08059D68: .4byte gRoomControls -_08059D6C: .4byte gUnk_08108398 -_08059D70: .4byte gUnk_081083AE -_08059D74: .4byte gUnk_081083C4 -_08059D78: - ldr r0, _08059DA4 @ =gUnk_081083DA - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D8C - movs r0, #0 - adds r1, r4, #0 - bl sub_08059CC0 -_08059D8C: - ldr r0, _08059DA8 @ =gUnk_081083F2 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059DA0 - movs r0, #2 - adds r1, r4, #0 - bl sub_08059CC0 -_08059DA0: - pop {r4, pc} - .align 2, 0 -_08059DA4: .4byte gUnk_081083DA -_08059DA8: .4byte gUnk_081083F2 - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059A2C.inc b/asm/non_matching/manager12/sub_08059A2C.inc deleted file mode 100644 index 3288c841..00000000 --- a/asm/non_matching/manager12/sub_08059A2C.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - ldr r1, _08059A54 @ =gRoomVars - movs r0, #0xff - strb r0, [r1, #0x12] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1, #0x11] - strb r0, [r1, #0x10] - adds r1, r2, #0 - adds r1, #0x22 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - adds r0, r2, #0 - bl sub_08059A58 - pop {pc} - .align 2, 0 -_08059A54: .4byte gRoomVars - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059A58.inc b/asm/non_matching/manager12/sub_08059A58.inc deleted file mode 100644 index 52e7b5e5..00000000 --- a/asm/non_matching/manager12/sub_08059A58.inc +++ /dev/null @@ -1,87 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _08059AC4 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059AD4 - adds r4, r5, #0 - adds r4, #0x20 - ldr r3, _08059AC8 @ =gUnk_08108398 - adds r0, r5, #0 - movs r1, #0 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059A80 - ldrb r1, [r4] - movs r0, #0 - bl sub_08059CC0 -_08059A80: - adds r4, r5, #0 - adds r4, #0x21 - ldr r3, _08059ACC @ =gUnk_081083AE - adds r0, r5, #0 - movs r1, #1 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059AA6 - ldrb r1, [r4] - movs r0, #1 - bl sub_08059CC0 - ldrb r0, [r4] - cmp r0, #2 - bne _08059AA6 - bl sub_08059B18 -_08059AA6: - adds r4, r5, #0 - adds r4, #0x22 - ldr r3, _08059AD0 @ =gUnk_081083C4 - adds r0, r5, #0 - movs r1, #2 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059B0C - ldrb r1, [r4] - movs r0, #2 - bl sub_08059CC0 - b _08059B0C - .align 2, 0 -_08059AC4: .4byte gRoomControls -_08059AC8: .4byte gUnk_08108398 -_08059ACC: .4byte gUnk_081083AE -_08059AD0: .4byte gUnk_081083C4 -_08059AD4: - adds r4, r5, #0 - adds r4, #0x20 - ldr r3, _08059B10 @ =gUnk_081083DA - adds r0, r5, #0 - movs r1, #0 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059AF0 - ldrb r1, [r4] - movs r0, #0 - bl sub_08059CC0 -_08059AF0: - adds r4, r5, #0 - adds r4, #0x22 - ldr r3, _08059B14 @ =gUnk_081083F2 - adds r0, r5, #0 - movs r1, #2 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059B0C - ldrb r1, [r4] - movs r0, #2 - bl sub_08059CC0 -_08059B0C: - pop {r4, r5, pc} - .align 2, 0 -_08059B10: .4byte gUnk_081083DA -_08059B14: .4byte gUnk_081083F2 - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059B18.inc b/asm/non_matching/manager12/sub_08059B18.inc deleted file mode 100644 index ba1c74d4..00000000 --- a/asm/non_matching/manager12/sub_08059B18.inc +++ /dev/null @@ -1,172 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - movs r0, #0x18 - bl CheckGlobalFlag - cmp r0, #0 - beq _08059BEC - movs r6, #0 - movs r0, #0x3f - mov sb, r0 - movs r2, #0xc4 - lsls r2, r2, #1 - mov r8, r2 -_08059B38: - movs r5, #0 - lsls r1, r6, #4 - mov r2, r8 - lsrs r0, r2, #4 - mov r2, sb - ands r0, r2 - lsls r3, r0, #6 - movs r7, #0x28 - ldr r0, _08059BD8 @ =0x000004AB - adds r4, r1, r0 -_08059B4C: - lsrs r1, r7, #4 - mov r2, sb - ands r1, r2 - orrs r1, r3 - adds r0, r4, #0 - movs r2, #1 - str r3, [sp] - bl sub_0807B9B8 - adds r7, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059B4C - movs r0, #0x10 - add r8, r0 - adds r6, #1 - cmp r6, #3 - bls _08059B38 - movs r6, #0 - movs r3, #0x3f -_08059B78: - movs r5, #0 - lsls r1, r6, #4 - adds r6, #1 - mov r8, r6 - movs r2, #0xc4 - lsls r2, r2, #1 - adds r0, r1, r2 - lsrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - movs r6, #0x28 - movs r0, #0x88 - lsls r0, r0, #3 - adds r4, r1, r0 -_08059B94: - lsrs r1, r6, #4 - ands r1, r3 - orrs r1, r7 - adds r0, r4, #0 - movs r2, #2 - str r3, [sp] - bl sub_0807B9B8 - adds r6, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059B94 - mov r6, r8 - cmp r6, #2 - bls _08059B78 - ldr r1, _08059BDC @ =0x000005C2 - movs r0, #0xd6 - movs r2, #2 - bl sub_0807B9B8 - ldr r1, _08059BE0 @ =0x000005C3 - movs r0, #0xd7 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059BE4 @ =gUnk_086E8460 - ldr r1, _08059BE8 @ =0x06001800 - movs r2, #0x80 - lsls r2, r2, #4 - bl LoadResourceAsync - b _08059C5E - .align 2, 0 -_08059BD8: .4byte 0x000004AB -_08059BDC: .4byte 0x000005C2 -_08059BE0: .4byte 0x000005C3 -_08059BE4: .4byte gUnk_086E8460 -_08059BE8: .4byte 0x06001800 -_08059BEC: - movs r0, #0x19 - bl CheckGlobalFlag - cmp r0, #0 - beq _08059C5E - movs r6, #0 - movs r3, #0x3f -_08059BFA: - movs r5, #0 - lsls r1, r6, #4 - adds r6, #1 - mov r8, r6 - movs r2, #0xc4 - lsls r2, r2, #1 - adds r0, r1, r2 - lsrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - movs r6, #0x28 - ldr r0, _08059C68 @ =0x000004A6 - adds r4, r1, r0 -_08059C14: - lsrs r1, r6, #4 - ands r1, r3 - orrs r1, r7 - adds r0, r4, #0 - movs r2, #1 - str r3, [sp] - bl sub_0807B9B8 - adds r6, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059C14 - mov r6, r8 - cmp r6, #4 - bls _08059BFA - ldr r0, _08059C6C @ =0x00000444 - ldr r1, _08059C70 @ =0x00000602 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C74 @ =0x00000445 - ldr r1, _08059C78 @ =0x00000605 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C7C @ =0x00000454 - ldr r1, _08059C80 @ =0x00000642 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C84 @ =0x00000455 - ldr r1, _08059C88 @ =0x00000645 - movs r2, #2 - bl sub_0807B9B8 -_08059C5E: - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08059C68: .4byte 0x000004A6 -_08059C6C: .4byte 0x00000444 -_08059C70: .4byte 0x00000602 -_08059C74: .4byte 0x00000445 -_08059C78: .4byte 0x00000605 -_08059C7C: .4byte 0x00000454 -_08059C80: .4byte 0x00000642 -_08059C84: .4byte 0x00000455 -_08059C88: .4byte 0x00000645 - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059CC0.inc b/asm/non_matching/manager12/sub_08059CC0.inc deleted file mode 100644 index e0d66ece..00000000 --- a/asm/non_matching/manager12/sub_08059CC0.inc +++ /dev/null @@ -1,41 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r2, r1, #0 - ldr r1, _08059CDC @ =gRoomVars - adds r1, #0x10 - adds r0, r0, r1 - strb r2, [r0] - ldr r0, _08059CE0 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059CE8 - lsls r1, r2, #4 - ldr r0, _08059CE4 @ =gUnk_08108408 - b _08059CEC - .align 2, 0 -_08059CDC: .4byte gRoomVars -_08059CE0: .4byte gRoomControls -_08059CE4: .4byte gUnk_08108408 -_08059CE8: - lsls r1, r2, #4 - ldr r0, _08059D10 @ =gUnk_08108468 -_08059CEC: - adds r6, r1, r0 - ldr r0, [r6] - ldr r4, _08059D14 @ =gGlobalGfxAndPalettes - adds r0, r0, r4 - ldr r1, [r6, #4] - movs r5, #0x80 - lsls r5, r5, #5 - adds r2, r5, #0 - bl LoadResourceAsync - ldr r0, [r6, #8] - adds r0, r0, r4 - ldr r1, [r6, #0xc] - adds r2, r5, #0 - bl LoadResourceAsync - pop {r4, r5, r6, pc} - .align 2, 0 -_08059D10: .4byte gUnk_08108468 -_08059D14: .4byte gGlobalGfxAndPalettes - .syntax divided diff --git a/include/room.h b/include/room.h index f192c164..c26c9ed3 100644 --- a/include/room.h +++ b/include/room.h @@ -46,8 +46,7 @@ typedef struct { u8 field_0x9; u8 unk2; u8 filler2[5]; - u8 unk_10; - u8 filler6[3]; + u8 unk_10[4]; u32 roomFlags; u32 unk3; u8 filler4[48]; diff --git a/include/save.h b/include/save.h index 65258dee..dbb2b6b3 100644 --- a/include/save.h +++ b/include/save.h @@ -41,7 +41,8 @@ typedef struct { /*0x141*/ u8 unk141[0x34f]; /*0x490*/ u32 unk490; /*0x494*/ u32 unk494; - /*0x498*/ u8 filler498[0x1C]; + /*0x498*/ u32 unk498; + /*0x49C*/ u8 filler49C[0x18]; } SaveFile; extern SaveFile gSave; diff --git a/src/manager/manager12.c b/src/manager/manager12.c index 15759fdd..35d431d2 100644 --- a/src/manager/manager12.c +++ b/src/manager/manager12.c @@ -1,15 +1,178 @@ #include "manager.h" +#include "room.h" +#include "functions.h" +#include "flags.h" -ASM_FUNC("asm/non_matching/manager12/Manager12_Main.inc", void Manager12_Main()) +typedef struct { + Manager manager; + u8 field_0x20; + u8 field_0x21; + u8 field_0x22; +} Manager12; -ASM_FUNC("asm/non_matching/manager12/sub_08059A2C.inc", void sub_08059A2C()) +void sub_08059A58(Manager12*); -ASM_FUNC("asm/non_matching/manager12/sub_08059A58.inc", void sub_08059A58()) +void sub_08059A2C(Manager12*); -ASM_FUNC("asm/non_matching/manager12/sub_08059B18.inc", void sub_08059B18()) +u32 sub_08056300(u16* arr); +extern u16 gUnk_081083DA; +extern u16 gUnk_081083F2; +extern u16 gUnk_08108398; +extern u16 gUnk_081083AE; +extern u16 gUnk_081083C4; -ASM_FUNC("asm/non_matching/manager12/sub_08059C8C.inc", void sub_08059C8C()) +void sub_08059CC0(u32, u32); +void sub_08059B18(); -ASM_FUNC("asm/non_matching/manager12/sub_08059CC0.inc", void sub_08059CC0()) +bool32 sub_08059C8C(Manager12*, u32, u8*, u16*); -ASM_FUNC("asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc", void TryLoadPrologueHyruleTown()) +extern void sub_0807B9B8(s32, s32, s32); +extern u32 gUnk_086E8460; + +typedef struct { + u32 field_0x0; + u32 field_0x4; + u32 field_0x8; + u32 field_0xc; +} Unknown; + +extern Unknown gUnk_08108468[]; +extern Unknown gUnk_08108408[]; +extern const u8 gGlobalGfxAndPalettes[]; + + +void Manager12_Main(Manager12* this) { + if (this->manager.action == 0) { + this->manager.action = 1; + this->field_0x22 = 0xff; + this->field_0x21 = 0xff; + this->field_0x20 = 0xff; + sub_08052D74(this, sub_08059A2C, NULL); + sub_0805E3A0(this, 6); + } + sub_08059A58(this); +} + +void sub_08059A2C(Manager12* this) { + gRoomVars.unk_10[2] = 0xff; + gRoomVars.unk_10[1] = 0xff; + gRoomVars.unk_10[0] = 0xff; + this->field_0x22 = 0xff; + this->field_0x21 = 0xff; + this->field_0x20 = 0xff; + sub_08059A58(this); +} + +void sub_08059A58(Manager12* this) { + if (gRoomControls.areaID != 0x15) { + if (sub_08059C8C(this, 0, &this->field_0x20, &gUnk_08108398) != 0) { + sub_08059CC0(0, (u32)this->field_0x20); + } + if (sub_08059C8C(this, 1, &this->field_0x21, &gUnk_081083AE) != 0) { + sub_08059CC0(1, this->field_0x21); + if (this->field_0x21 == 2) { + sub_08059B18(); + } + } + if (sub_08059C8C(this, 2, &this->field_0x22, &gUnk_081083C4) != 0) { + sub_08059CC0(2, (u32)this->field_0x22); + } + } else { + if (sub_08059C8C(this, 0, &this->field_0x20, &gUnk_081083DA) != 0) { + sub_08059CC0(0, (u32)this->field_0x20); + } + if (sub_08059C8C(this, 2, &this->field_0x22, &gUnk_081083F2) != 0) { + sub_08059CC0(2, (u32)this->field_0x22); + } + } +} + + +#define COMMON(tmp2, tmp1) ((tmp2) >> 4 & 0x3f) | (((tmp1)+0x188U) >> 4 & 0x3f) << 6 +void sub_08059B18(void) { + u32 loopVar; + u32 innerLoopVar; + + if (CheckGlobalFlag(TATEKAKE_HOUSE) != 0) { + for(loopVar = 0; loopVar < 4; ++loopVar) { + for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x4ab + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1); + } + } + + for(loopVar = 0; loopVar < 3; ++loopVar) { + for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x440 + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 2); + } + } + sub_0807B9B8(0xd6, 0x5c2, 2); + sub_0807B9B8(0xd7, 0x5c3, 2); + LoadResourceAsync(&gUnk_086E8460, 0x6001800, 0x800); + } else { + if (CheckGlobalFlag(TATEKAKE_TOCHU) != 0) { + for(loopVar = 0; loopVar < 5; ++loopVar) { + for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x4a6 + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1); + } + } + sub_0807B9B8(0x444, 0x602, 2); + sub_0807B9B8(0x445, 0x605, 2); + sub_0807B9B8(0x454, 0x642, 2); + sub_0807B9B8(0x455, 0x645, 2); + } + } +} + +bool32 sub_08059C8C(Manager12* this, u32 param_2, u8* param_3, u16* param_4) { + bool32 bVar2; + + *param_3 = sub_08056300(param_4); + if ((*param_3 != 0xff) && (gRoomVars.unk_10[param_2] != *param_3)) { + gRoomVars.unk_10[param_2] = *param_3; + return TRUE; + } else { + return FALSE; + } +} + + +void sub_08059CC0(u32 param_1, u32 param_2) { + Unknown* unknown; + + gRoomVars.unk_10[param_1] = param_2; + if (gRoomControls.areaID != 0x15) { + unknown = &gUnk_08108408[param_2]; + } else { + unknown = &gUnk_08108468[param_2]; + } + LoadResourceAsync((void*)&gGlobalGfxAndPalettes + unknown->field_0x0, unknown->field_0x4, 0x1000); + LoadResourceAsync((void*)&gGlobalGfxAndPalettes + unknown->field_0x8, unknown->field_0xc, 0x1000); +} + +void TryLoadPrologueHyruleTown(void) { + u32 tmp; + + if (gRoomControls.areaID != 0x15) { + tmp = sub_08056300(&gUnk_08108398); + if (tmp != 0xff) { + sub_08059CC0(0, tmp); + } + tmp = sub_08056300(&gUnk_081083AE); + if ((tmp != 0xff) && (sub_08059CC0(1, tmp), tmp == 2)) { + sub_08059B18(); + } + tmp = sub_08056300(&gUnk_081083C4); + if (tmp != 0xff) { + sub_08059CC0(2, tmp); + } + } else { + tmp = sub_08056300(&gUnk_081083DA); + if (tmp != 0xff) { + sub_08059CC0(0, tmp); + } + tmp = sub_08056300(&gUnk_081083F2); + if (tmp != 0xff) { + sub_08059CC0(2, tmp); + } + } +}