From cfaba92b8492a9894a1b0fdbdf2429eaafbbdc58 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Mon, 17 Aug 2020 13:57:58 +0200 Subject: [PATCH 1/2] manager4.c: ok except that one function I gave up on, maybe someone else has an idea on how to make that work. --- asm/manager4.s | 334 --------------------- asm/non_matching/manager4/sub_0805795C.inc | 95 ++++++ include/manager.h | 21 ++ include/structures.h | 8 +- linker.ld | 2 +- src/manager/manager4.c | 132 ++++++++ 6 files changed, 256 insertions(+), 336 deletions(-) delete mode 100644 asm/manager4.s create mode 100644 asm/non_matching/manager4/sub_0805795C.inc create mode 100644 src/manager/manager4.c diff --git a/asm/manager4.s b/asm/manager4.s deleted file mode 100644 index 9daea0ca..00000000 --- a/asm/manager4.s +++ /dev/null @@ -1,334 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08057854 -sub_08057854: @ 0x08057854 - push {lr} - ldr r2, _08057868 @ =gUnk_08107C70 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08057868: .4byte gUnk_08107C70 - - thumb_func_start sub_0805786C -sub_0805786C: @ 0x0805786C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - mov r8, r0 - bl sub_080805F8 - ldr r6, _080578D4 @ =gUnk_03004030 - ldrb r0, [r6, #8] - cmp r0, #0 - beq _08057914 - ldr r0, [r6] - cmp r0, #0 - bne _080578C0 - movs r0, #0xff - strb r0, [r6, #0xa] - ldr r0, _080578D8 @ =gRoomControls - ldrb r5, [r0, #5] - ldr r7, _080578DC @ =gUnk_08107DC0 - ldrb r0, [r0, #4] - lsls r0, r0, #2 - adds r0, r0, r7 - ldr r4, [r0] - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08057AA8 - adds r4, r0, #0 - cmp r4, #0 - beq _080578C0 - ldrb r5, [r4, #5] - ldrb r0, [r4, #4] - lsls r0, r0, #2 - adds r0, r0, r7 - ldr r4, [r0] - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08057AA8 - adds r4, r0, #0 - cmp r4, #0 - beq _080578C0 - str r4, [r6] -_080578C0: - ldr r0, _080578D8 @ =gRoomControls - ldrb r5, [r0, #5] - ldr r1, _080578DC @ =gUnk_08107DC0 - ldrb r0, [r0, #4] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r4, [r0] - movs r6, #0x81 - lsls r6, r6, #7 - b _08057906 - .align 2, 0 -_080578D4: .4byte gUnk_03004030 -_080578D8: .4byte gRoomControls -_080578DC: .4byte gUnk_08107DC0 -_080578E0: - ldrh r1, [r4] - adds r1, #0x3f - adds r0, r6, #0 - movs r2, #1 - bl SetTile - ldrh r1, [r4] - adds r1, #0x40 - adds r0, r6, #0 - movs r2, #1 - bl SetTile - ldrh r1, [r4] - adds r1, #0x41 - adds r0, r6, #0 - movs r2, #1 - bl SetTile - adds r4, #8 -_08057906: - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08057AA8 - adds r4, r0, #0 - cmp r4, #0 - bne _080578E0 -_08057914: - movs r0, #1 - mov r1, r8 - strb r0, [r1, #0xc] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08057920 -sub_08057920: @ 0x08057920 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r0, _08057934 @ =gRoomControls - ldrb r5, [r0, #5] - ldr r1, _08057938 @ =gUnk_08107DC0 - ldrb r0, [r0, #4] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r4, [r0] - b _0805793E - .align 2, 0 -_08057934: .4byte gRoomControls -_08057938: .4byte gUnk_08107DC0 -_0805793C: - adds r4, #8 -_0805793E: - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08057AA8 - adds r4, r0, #0 - cmp r4, #0 - beq _08057958 - adds r0, r6, #0 - adds r1, r4, #0 - bl sub_0805795C - cmp r0, #0 - beq _0805793C -_08057958: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0805795C -sub_0805795C: @ 0x0805795C - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r6, r1, #0 - ldr r0, _080579BC @ =gUnk_03004030 - ldrb r0, [r0, #8] - cmp r0, #0 - beq _080579C8 - ldr r1, _080579C0 @ =gPlayerEntity - ldr r3, _080579C4 @ =gRoomControls - ldrh r2, [r1, #0x2e] - ldrh r0, [r3, #6] - subs r2, r2, r0 - lsls r2, r2, #0x10 - lsrs r2, r2, #0x10 - ldrh r0, [r1, #0x32] - ldrh r1, [r3, #8] - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 - ldrh r3, [r6] - movs r1, #0x3f - ands r1, r3 - lsls r1, r1, #4 - adds r1, #8 - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r3 - lsls r0, r0, #0xe - movs r3, #0xc0 - lsls r3, r3, #0xd - adds r0, r0, r3 - lsrs r3, r0, #0x10 - subs r2, r2, r1 - adds r0, r2, #0 - adds r0, #0x18 - cmp r0, #0x30 - bhi _08057A14 - subs r0, r4, r3 - adds r0, #8 - cmp r0, #0x10 - bhi _08057A14 - cmp r4, r3 - bhs _08057A00 - adds r0, r2, #0 - adds r0, #0xc - cmp r0, #0x18 - bls _08057A14 - b _08057A00 - .align 2, 0 -_080579BC: .4byte gUnk_03004030 -_080579C0: .4byte gPlayerEntity -_080579C4: .4byte gRoomControls -_080579C8: - ldr r3, _08057A0C @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r3, r1] - ldr r2, _08057A10 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r4, r0, #4 - movs r1, #0x3f - ands r4, r1 - movs r0, #0x32 - ldrsh r5, [r3, r0] - ldrh r2, [r2, #8] - subs r0, r5, r2 - asrs r0, r0, #4 - ands r0, r1 - lsls r0, r0, #6 - orrs r4, r0 - ldrh r1, [r6] - cmp r4, r1 - bne _08057A14 - lsrs r0, r4, #6 - lsls r0, r0, #4 - adds r0, r2, r0 - adds r0, #6 - lsls r0, r0, #0x10 - lsrs r3, r0, #0x10 - cmp r5, r3 - bge _08057A14 -_08057A00: - adds r0, r7, #0 - adds r1, r6, #0 - bl sub_08057A18 - movs r0, #1 - b _08057A16 - .align 2, 0 -_08057A0C: .4byte gPlayerEntity -_08057A10: .4byte gRoomControls -_08057A14: - movs r0, #0 -_08057A16: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08057A18 -sub_08057A18: @ 0x08057A18 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r5, r1, #0 - bl sub_0805E5A8 - ldr r6, _08057A94 @ =gUnk_03004030 - ldrb r0, [r6, #9] - strb r0, [r6, #0xa] - ldr r3, _08057A98 @ =gRoomControls - ldrb r0, [r3, #4] - strb r0, [r6, #9] - ldr r1, _08057A9C @ =gScreenTransition - ldrb r0, [r5, #4] - strb r0, [r1, #0xc] - ldrb r0, [r5, #5] - strb r0, [r1, #0xd] - ldrb r0, [r5, #4] - strb r0, [r3, #4] - ldrb r0, [r5, #5] - strb r0, [r3, #5] - str r5, [r6] - ldr r4, _08057AA0 @ =gPlayerEntity - ldrh r1, [r4, #0x2e] - ldrh r0, [r3, #6] - subs r1, r1, r0 - ldrh r2, [r5] - movs r0, #0x3f - ands r0, r2 - lsls r0, r0, #4 - subs r1, r1, r0 - strh r1, [r6, #4] - ldrh r1, [r4, #0x32] - ldrh r0, [r3, #8] - subs r1, r1, r0 - ldrh r2, [r5] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r2 - lsrs r0, r0, #2 - subs r1, r1, r0 - strh r1, [r6, #6] - ldrb r1, [r6, #8] - cmp r1, #0 - bne _08057A86 - ldrb r0, [r5, #5] - movs r2, #0x80 - orrs r0, r2 - ldrb r3, [r6, #0xb] - cmp r0, r3 - beq _08057A80 - ldr r0, _08057AA4 @ =gUnk_02034480 - strh r1, [r0] -_08057A80: - ldrb r0, [r5, #5] - orrs r0, r2 - strb r0, [r6, #0xb] -_08057A86: - ldrb r0, [r5, #3] - bl sub_08080930 - adds r0, r7, #0 - bl sub_0805E900 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08057A94: .4byte gUnk_03004030 -_08057A98: .4byte gRoomControls -_08057A9C: .4byte gScreenTransition -_08057AA0: .4byte gPlayerEntity -_08057AA4: .4byte gUnk_02034480 - - thumb_func_start sub_08057AA8 -sub_08057AA8: @ 0x08057AA8 - push {lr} - adds r2, r0, #0 - ldrh r0, [r2] - ldr r3, _08057AC0 @ =0x0000FFFF - cmp r0, r3 - beq _08057ACC -_08057AB4: - ldrb r0, [r2, #2] - cmp r0, r1 - bne _08057AC4 - adds r0, r2, #0 - b _08057ACE - .align 2, 0 -_08057AC0: .4byte 0x0000FFFF -_08057AC4: - adds r2, #8 - ldrh r0, [r2] - cmp r0, r3 - bne _08057AB4 -_08057ACC: - movs r0, #0 -_08057ACE: - pop {pc} diff --git a/asm/non_matching/manager4/sub_0805795C.inc b/asm/non_matching/manager4/sub_0805795C.inc new file mode 100644 index 00000000..4f6c20b0 --- /dev/null +++ b/asm/non_matching/manager4/sub_0805795C.inc @@ -0,0 +1,95 @@ +sub_0805795C: @ 0x0805795C + push {r4, r5, r6, r7, lr} + add r7, r0, #0 + add r6, r1, #0 + ldr r0, _080579BC @ =gUnk_03004030 + ldrb r0, [r0, #8] + cmp r0, #0 + beq _080579C8 + ldr r1, _080579C0 @ =gPlayerEntity + ldr r3, _080579C4 @ =gRoomControls + ldrh r2, [r1, #0x2e] + ldrh r0, [r3, #6] + sub r2, r2, r0 + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + ldrh r0, [r1, #0x32] + ldrh r1, [r3, #8] + sub r0, r0, r1 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 + ldrh r3, [r6] + mov r1, #0x3f + and r1, r3 + lsl r1, r1, #4 + add r1, #8 + mov r0, #0xfc + lsl r0, r0, #4 + and r0, r3 + lsl r0, r0, #0xe + mov r3, #0xc0 + lsl r3, r3, #0xd + add r0, r0, r3 + lsr r3, r0, #0x10 + sub r2, r2, r1 + add r0, r2, #0 + add r0, #0x18 + cmp r0, #0x30 + bhi _08057A14 + sub r0, r4, r3 + add r0, #8 + cmp r0, #0x10 + bhi _08057A14 + cmp r4, r3 + bhs _08057A00 + add r0, r2, #0 + add r0, #0xc + cmp r0, #0x18 + bls _08057A14 + b _08057A00 + .align 2, 0 +_080579BC: .4byte gUnk_03004030 +_080579C0: .4byte gPlayerEntity +_080579C4: .4byte gRoomControls +_080579C8: + ldr r3, _08057A0C @ =gPlayerEntity + mov r1, #0x2e + ldrsh r0, [r3, r1] + ldr r2, _08057A10 @ =gRoomControls + ldrh r1, [r2, #6] + sub r0, r0, r1 + asr r4, r0, #4 + mov r1, #0x3f + and r4, r1 + mov r0, #0x32 + ldrsh r5, [r3, r0] + ldrh r2, [r2, #8] + sub r0, r5, r2 + asr r0, r0, #4 + and r0, r1 + lsl r0, r0, #6 + orr r4, r0 + ldrh r1, [r6] + cmp r4, r1 + bne _08057A14 + lsr r0, r4, #6 + lsl r0, r0, #4 + add r0, r2, r0 + add r0, #6 + lsl r0, r0, #0x10 + lsr r3, r0, #0x10 + cmp r5, r3 + bge _08057A14 +_08057A00: + add r0, r7, #0 + add r1, r6, #0 + bl sub_08057A18 + mov r0, #1 + b _08057A16 + .align 2, 0 +_08057A0C: .4byte gPlayerEntity +_08057A10: .4byte gRoomControls +_08057A14: + mov r0, #0 +_08057A16: + pop {r4, r5, r6, r7, pc} diff --git a/include/manager.h b/include/manager.h index dfb5f1ff..6faf4baa 100644 --- a/include/manager.h +++ b/include/manager.h @@ -43,4 +43,25 @@ typedef struct { } PACKED field_0x07; } UnkManagerHelperStruct; +typedef struct { + u16 unk_00; + u8 source_roomID; + u8 unk_03; + u8 target_areaID; + u8 target_roomID; + u16 unk_06; +} DiggingCaveEntrance; + +extern struct { + DiggingCaveEntrance* unk_00; + u16 unk_04; + u16 unk_06; + u8 unk_08; + u8 unk_09; + u8 unk_0a; + u8 unk_0b; +} gUnk_03004030; + +extern DiggingCaveEntrance* gUnk_08107DC0[]; + #endif diff --git a/include/structures.h b/include/structures.h index 32ae8d74..a558fd70 100644 --- a/include/structures.h +++ b/include/structures.h @@ -147,4 +147,10 @@ typedef struct { extern struct_02024490 gUnk_02024490; -#endif \ No newline at end of file +typedef struct { + u16 unk_00; + u8 unk_02[0xE]; +} struct_02034480; +extern struct_02034480 gUnk_02034480; + +#endif diff --git a/linker.ld b/linker.ld index 56aabb33..cb7b6844 100644 --- a/linker.ld +++ b/linker.ld @@ -473,7 +473,7 @@ SECTIONS { src/manager/manager2.o(.text); asm/manager2.o(.text); asm/manager3.o(.text); - asm/manager4.o(.text); + src/manager/manager4.o(.text); asm/manager5.o(.text); src/manager/manager6.o(.text); asm/manager7.o(.text); diff --git a/src/manager/manager4.c b/src/manager/manager4.c new file mode 100644 index 00000000..1473aa61 --- /dev/null +++ b/src/manager/manager4.c @@ -0,0 +1,132 @@ +#include "global.h" +#include "player.h" +#include "room.h" +#include "manager.h" +#include "structures.h" + +extern void (*gUnk_08107C70[])(Manager*); + +void sub_08057854(Manager* this) { + gUnk_08107C70[this->unk_0c](this); +} + +extern void sub_080805F8(void); + +extern void SetTile(u32, u32, u32); + +extern DiggingCaveEntrance* sub_08057AA8(DiggingCaveEntrance*, int); + +void sub_0805786C(Manager* this) { + DiggingCaveEntrance* tmp; + u8 roomID; + u8 areaID; + u16 uVar = 0x81<<7; + sub_080805F8(); + if (gUnk_03004030.unk_08 != 0) { + if (gUnk_03004030.unk_00 == 0) { + gUnk_03004030.unk_0a = 0xFF; + roomID = gRoomControls.roomID; + tmp = gUnk_08107DC0[gRoomControls.areaID]; + tmp = sub_08057AA8(tmp, roomID); + if (tmp != 0) { + roomID = tmp->target_roomID; + tmp = gUnk_08107DC0[tmp->target_areaID]; + tmp = sub_08057AA8(tmp, roomID); + if (tmp != 0) { + gUnk_03004030.unk_00 = tmp; + } + } + } + roomID = gRoomControls.roomID; + tmp = gUnk_08107DC0[gRoomControls.areaID]; + uVar = 0x81<<7; + for (tmp = sub_08057AA8(tmp, roomID); tmp != 0; tmp = sub_08057AA8(tmp, roomID)){ + SetTile(uVar, tmp->unk_00 + 0x3F, 1); + SetTile(uVar, tmp->unk_00 + 0x40, 1); + SetTile(uVar, tmp->unk_00 + 0x41, 1); + tmp++; + } + } + this->unk_0c = 1; +} + +extern u32 sub_0805795C(Manager*, DiggingCaveEntrance*); + +void sub_08057920(Manager* this) { + DiggingCaveEntrance* tmp; + u8 roomID; + roomID = gRoomControls.roomID; + for (tmp = gUnk_08107DC0[gRoomControls.areaID];(tmp = sub_08057AA8(tmp, roomID)) != 0 && !sub_0805795C(this, tmp);tmp++); +} + +void sub_08057A18(Manager*, DiggingCaveEntrance*); + +#ifdef NON_MATCHING +u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) { + u16 offsetX, offsetY, offsetX2, offsetY2; + u32 tmp; + if (gUnk_03004030.unk_08) { + offsetX = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX; + offsetY = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY; + offsetX2 = (entr->unk_00 & 0x3F) * 16 + 8; + offsetY2 = ((entr->unk_00 & 0xFC0)>> 6) * 16 + 0x18; + if ((u32)(offsetX - offsetX2) + 0x18 > 0x30) return 0; + if ( + (u32)(offsetY - offsetY2) + 8 > 0x10) return 0; + if ( + ((offsetY < offsetY2))) + if ( + (u32)(offsetX - offsetX2) + 0xC <= 0x18) return 0; + + } else { + //offsetX = ((gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3F; + //offsetY = ((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3F; + //tmp = offsetX | (offsetY << 6); + tmp = COORD_TO_TILE((&gPlayerEntity)); + if (tmp != entr->unk_00) return 0; + offsetY = gRoomControls.roomOriginY + ((tmp>>6) * 16) + 6; + if (gPlayerEntity.y.HALF.HI >= offsetY) return 0; + } + sub_08057A18(this, entr); + return 1; +} +#else +NAKED +u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) { + asm(".include \"asm/non_matching/manager4/sub_0805795C.inc\""); +} +#endif + +extern void sub_0805E5A8(void); +extern void sub_0805E900(Manager*); +extern void sub_08080930(); + +void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) { + u16 tmp; + sub_0805E5A8(); + gUnk_03004030.unk_0a = gUnk_03004030.unk_09; + gUnk_03004030.unk_09 = gRoomControls.areaID; + gScreenTransition.areaID = entr->target_areaID; + gScreenTransition.roomID = entr->target_roomID; + gRoomControls.areaID = entr->target_areaID; + gRoomControls.roomID = entr->target_roomID; + gUnk_03004030.unk_00 = entr; + gUnk_03004030.unk_04 = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX - ((entr->unk_00 & 0x3F)*16); + gUnk_03004030.unk_06 = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY - ((entr->unk_00 & 0xFC0) >> 2); + tmp = gUnk_03004030.unk_08; + if (!tmp) { + if ((entr->target_roomID | 0x80) != gUnk_03004030.unk_0b) { + gUnk_02034480.unk_00 = gUnk_03004030.unk_08; + } + gUnk_03004030.unk_0b = entr->target_roomID | 0x80; + } + sub_08080930(entr->unk_03); + sub_0805E900(this); +} + +DiggingCaveEntrance* sub_08057AA8(DiggingCaveEntrance* entr, int roomID){ + for (;entr->unk_00 != 0xFFFF;entr++) { + if (entr->source_roomID == roomID) return entr; + } + return 0; +} From 8186e1ed0d21a21d4b69f68b101f66bc6990e3cf Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Mon, 17 Aug 2020 18:34:03 +0200 Subject: [PATCH 2/2] managerE.c: ok --- asm/managerE.s | 60 ------------------------------------------ include/manager.h | 13 ++++++--- linker.ld | 2 +- src/manager/managerA.c | 8 +++--- src/manager/managerE.c | 39 +++++++++++++++++++++++++++ 5 files changed, 53 insertions(+), 69 deletions(-) delete mode 100644 asm/managerE.s create mode 100644 src/manager/managerE.c diff --git a/asm/managerE.s b/asm/managerE.s deleted file mode 100644 index 96fd526f..00000000 --- a/asm/managerE.s +++ /dev/null @@ -1,60 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08058E60 -sub_08058E60: @ 0x08058E60 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08058E80 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08058E80 - adds r0, r4, #0 - bl sub_0805E900 - b _08058EC8 -_08058E80: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08058EC8 - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _08058E9E - movs r0, #0 - strb r0, [r4, #0xb] - movs r0, #0xff - bl sub_08078A90 - bl sub_08078B48 -_08058E9E: - ldrh r1, [r4, #0x3a] - movs r2, #0x3a - ldrsh r0, [r4, r2] - cmp r0, #0 - bne _08058EC4 - movs r1, #0x38 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _08058EB4 - bl PlaySFX -_08058EB4: - ldrb r0, [r4, #0xa] - bl GetCurrentRoomProperty - bl LoadRoomEntityList - bl DeleteThisEntity - b _08058EC8 -_08058EC4: - subs r0, r1, #1 - strh r0, [r4, #0x3a] -_08058EC8: - pop {r4, pc} - .align 2, 0 diff --git a/include/manager.h b/include/manager.h index 6faf4baa..278a199a 100644 --- a/include/manager.h +++ b/include/manager.h @@ -3,6 +3,13 @@ #include "global.h" +union SplitSHWord { + s16 SHWORD; + struct { + u8 LO, HI; + } PACKED HALF; +} PACKED; + typedef struct { u8 unk_00[0x0a]; u8 unk_0a; @@ -18,10 +25,8 @@ typedef struct { u8 unk_28[0x0D]; u8 unk_35; u16 unk_36; - u8 unk_38; - u8 unk_39; - u8 unk_3a; - u8 unk_3b; + union SplitSHWord unk_38; + union SplitSHWord unk_3a; u16 unk_3c; u16 unk_3e; } Manager; diff --git a/linker.ld b/linker.ld index cb7b6844..b5d13579 100644 --- a/linker.ld +++ b/linker.ld @@ -483,7 +483,7 @@ SECTIONS { asm/managerB.o(.text); asm/managerC.o(.text); asm/managerD.o(.text); - asm/managerE.o(.text); + src/manager/managerE.o(.text); asm/managerF.o(.text); asm/manager10.o(.text); asm/manager11.o(.text); diff --git a/src/manager/managerA.c b/src/manager/managerA.c index 699c5634..1d94bde1 100644 --- a/src/manager/managerA.c +++ b/src/manager/managerA.c @@ -21,10 +21,10 @@ void sub_08058398(Manager* this) { if (CheckFlags(this->unk_3c) != 0) { DeleteThisEntity(); } - this->unk_24 = this->unk_3a<<3; - this->unk_26 = this->unk_3b<<3; - this->unk_20 = this->unk_24 + (this->unk_38<<4); - this->unk_22 = this->unk_26 + (this->unk_39<<4); + this->unk_24 = this->unk_3a.HALF.LO<<3; + this->unk_26 = this->unk_3a.HALF.HI<<3; + this->unk_20 = this->unk_24 + (this->unk_38.HALF.LO<<4); + this->unk_22 = this->unk_26 + (this->unk_38.HALF.HI<<4); sub_0805E3A0(this, 0x06); if (this->unk_3e == 0) { this->unk_0c = 2; diff --git a/src/manager/managerE.c b/src/manager/managerE.c new file mode 100644 index 00000000..52402c22 --- /dev/null +++ b/src/manager/managerE.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "entity.h" +#include "manager.h" +#include "flags.h" +#include "room.h" + +extern Entity* GetCurrentRoomProperty(u8); +extern void LoadRoomEntityList(Entity*); +extern void DeleteThisEntity(void); +extern void sub_0805E900(Manager*); +extern void sub_08078A90(u32); +extern void sub_08078B48(void); +extern void PlaySFX(u32); + +void sub_08058E60(Manager* this) { + if (!this->unk_0c) { + this->unk_0c = 1; + if (CheckFlags(this->unk_3e)) { + sub_0805E900(this); + return; + } + } + if (!CheckFlags(this->unk_3e)) + return; + if (this->unk_0b != 0) { + this->unk_0b = 0; + sub_08078A90(0xff); + sub_08078B48(); + } + if (this->unk_3a.SHWORD == 0){ + if (this->unk_38.SHWORD != 0) { + PlaySFX(this->unk_38.SHWORD); + } + LoadRoomEntityList(GetCurrentRoomProperty(this->unk_0a)); + DeleteThisEntity(); + } else { + this->unk_3a.SHWORD -= 1; + } +}