From 1e50eed7a5243f03095868083c916de1037116d7 Mon Sep 17 00:00:00 2001 From: macrepeh Date: Sun, 16 Aug 2020 22:13:59 -0400 Subject: [PATCH 1/7] Carlov --- src/npc/carlov.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/npc/carlov.c diff --git a/src/npc/carlov.c b/src/npc/carlov.c new file mode 100644 index 00000000..aaa447d0 --- /dev/null +++ b/src/npc/carlov.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "entity.h" +#include "player.h" +#include "room.h" +#include "flags.h" +#include "sprite.h" +#include "textbox.h" +#include "npc.h" +#include "structures.h" + +extern void sub_0807DD50(Entity *); +extern void sub_0807DD94(Entity *,u32); +extern void sub_08004488(u32); +extern void sub_08080964(u32,u32); + + +void Carlov(Entity *this) +{ + if (this->action == 0) { + this->action++; + sub_0807DD50(this); + } + else { + sub_0807DD94(this,0); + } + if ((this->frames.all & 0x10) != 0) { + this->frames.all = this->frames.all & 0xef; + sub_08004488(0x104); + sub_08080964(0x10,0); + } + if ((this->frames.all & 0x20) != 0) { + this->frames.all = this->frames.all & 0xdf; + sub_08004488(0x7c); + } +} \ No newline at end of file From 6f1ffdc024ab26cf455a5f0aae9fea8fa0e8f892 Mon Sep 17 00:00:00 2001 From: macrepeh Date: Sun, 16 Aug 2020 22:14:47 -0400 Subject: [PATCH 2/7] Carlov --- asm/carlov.s | 53 ---------------------------------------------------- linker.ld | 2 +- 2 files changed, 1 insertion(+), 54 deletions(-) delete mode 100644 asm/carlov.s diff --git a/asm/carlov.s b/asm/carlov.s deleted file mode 100644 index d076b873..00000000 --- a/asm/carlov.s +++ /dev/null @@ -1,53 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Carlov -Carlov: @ 0x0806BD54 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806BD6A - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD50 - b _0806BD72 -_0806BD6A: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 -_0806BD72: - adds r4, #0x5a - ldrb r1, [r4] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0806BD94 - movs r0, #0xef - ands r0, r1 - strb r0, [r4] - movs r0, #0x82 - lsls r0, r0, #1 - bl sub_08004488 - movs r0, #0x10 - movs r1, #0 - bl sub_08080964 -_0806BD94: - ldrb r1, [r4] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _0806BDAA - movs r0, #0xdf - ands r0, r1 - strb r0, [r4] - movs r0, #0x7c - bl sub_08004488 -_0806BDAA: - pop {r4, pc} \ No newline at end of file diff --git a/linker.ld b/linker.ld index 56aabb33..e12d18f3 100644 --- a/linker.ld +++ b/linker.ld @@ -607,7 +607,7 @@ SECTIONS { src/npc/moblinLady.o(.text); asm/librarians.o(.text); asm/farmers.o(.text); - asm/carlov.o(.text); + src/npc/carlov.o(.text); src/npc/dampe.o(.text); asm/drLeft.o(.text); asm/kingGustaf.o(.text); From cfaba92b8492a9894a1b0fdbdf2429eaafbbdc58 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Mon, 17 Aug 2020 13:57:58 +0200 Subject: [PATCH 3/7] 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 4/7] 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; + } +} From debf6b20957027e122aed600937a69b5e8fd2b76 Mon Sep 17 00:00:00 2001 From: Behemoth Date: Tue, 18 Aug 2020 01:43:09 +0200 Subject: [PATCH 5/7] Decompile Acro-Bandits --- asm/acroBandits.s | 1482 ----------------- asm/non_matching/acroBandits/sub_08031C58.inc | 136 ++ asm/non_matching/acroBandits/sub_08031E04.inc | 41 + asm/non_matching/acroBandits/sub_080322E8.inc | 48 + include/entity.h | 8 +- include/functions.h | 2 +- linker.ld | 2 +- src/enemy/acroBandits.c | 572 +++++++ src/enemy/bladeTrap.c | 2 +- src/enemy/keaton.c | 12 +- src/enemy/keese.c | 8 +- src/enemy/lakitu.c | 8 +- src/enemy/lakituCloud.c | 8 +- src/enemy/leever.c | 10 +- src/npc/zelda.c | 2 +- src/object/fan.c | 8 +- src/object/lightableSwitch.c | 4 +- src/object/mask.c | 4 +- src/object/metalDoor.c | 20 +- src/object/railtrack.c | 10 +- 20 files changed, 851 insertions(+), 1536 deletions(-) delete mode 100644 asm/acroBandits.s create mode 100644 asm/non_matching/acroBandits/sub_08031C58.inc create mode 100644 asm/non_matching/acroBandits/sub_08031E04.inc create mode 100644 asm/non_matching/acroBandits/sub_080322E8.inc create mode 100644 src/enemy/acroBandits.c diff --git a/asm/acroBandits.s b/asm/acroBandits.s deleted file mode 100644 index 1473c5cb..00000000 --- a/asm/acroBandits.s +++ /dev/null @@ -1,1482 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start AcroBandit -AcroBandit: @ 0x08031864 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080012DC - adds r4, r0, #0 - cmp r4, #0 - beq _0803189C - adds r0, r5, #0 - adds r0, #0x3a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08031886 - adds r0, r5, #0 - bl sub_08032338 -_08031886: - ldr r0, _08031898 @ =gUnk_080012C8 - lsls r1, r4, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r5, #0 - bl _call_via_r1 - b _080318BE - .align 2, 0 -_08031898: .4byte gUnk_080012C8 -_0803189C: - ldr r4, _080318C0 @ =gUnk_080CE56C - adds r0, r5, #0 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r5, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset -_080318BE: - pop {r4, r5, pc} - .align 2, 0 -_080318C0: .4byte gUnk_080CE56C - - thumb_func_start sub_080318C4 -sub_080318C4: @ 0x080318C4 - push {lr} - ldr r2, _080318D8 @ =gUnk_080CE584 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080318D8: .4byte gUnk_080CE584 - - thumb_func_start sub_080318DC -sub_080318DC: @ 0x080318DC - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r4, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - adds r0, #0x80 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bhi _080318FA - b _08031A36 -_080318FA: - ldrb r0, [r4, #0xa] - adds r5, r4, #0 - adds r5, #0x42 - cmp r0, #1 - bne _080319DE - ldrb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x45 - str r1, [sp] - cmp r0, #6 - bhi _080319AC - ldrb r0, [r5] - cmp r0, #0 - beq _080319AC - ldr r3, [r4, #0x54] - movs r0, #0x29 - adds r0, r0, r4 - mov sb, r0 - movs r1, #0x3e - adds r1, r1, r4 - mov sl, r1 - cmp r3, #0 - beq _08031960 - ldr r0, [r4, #0x50] - str r0, [r3, #0x50] - movs r0, #5 - mov ip, r0 - movs r1, #0x39 - rsbs r1, r1, #0 - mov r8, r1 - movs r7, #8 - movs r6, #0xf4 -_0803193A: - mov r0, ip - strb r0, [r3, #0xc] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r0, [r2] - mov r1, r8 - ands r1, r0 - orrs r1, r7 - strb r1, [r2] - adds r1, r3, #0 - adds r1, #0x3d - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - bne _0803195A - strb r6, [r1] -_0803195A: - ldr r3, [r3, #0x54] - cmp r3, #0 - bne _0803193A -_08031960: - ldr r1, [r4, #0x50] - cmp r1, #0 - beq _0803196C - ldr r0, [r4, #0x54] - str r0, [r1, #0x54] - b _08031974 -_0803196C: - ldr r0, [r4, #0x54] - cmp r0, #0 - beq _08031974 - str r4, [r4, #0x50] -_08031974: - movs r0, #9 - strb r0, [r4, #0xc] - mov r0, sb - ldrb r1, [r0] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - mov r1, sb - strb r0, [r1] - mov r1, sl - ldrb r0, [r1] - cmp r0, #0xf - bhi _0803199C - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - b _080319A2 -_0803199C: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 -_080319A2: - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0xe - bl InitializeAnimation -_080319AC: - ldr r1, [sp] - ldrb r0, [r1] - cmp r0, #0 - bne _080319DE - bl Random - adds r2, r4, #0 - adds r2, #0x3e - movs r1, #7 - ands r0, r1 - ldrb r1, [r2] - adds r0, r0, r1 - subs r0, #4 - movs r1, #0x1f - ands r0, r1 - strb r0, [r2] - ldrb r1, [r4, #0xb] - lsls r0, r1, #1 - adds r0, r0, r1 - ldrb r1, [r5] - adds r0, r0, r1 - strb r0, [r5] - adds r0, r4, #0 - bl sub_08032338 -_080319DE: - ldrb r0, [r5] - cmp r0, #0 - beq _08031A36 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08031A36 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _080319FC - movs r0, #8 - b _080319FE -_080319FC: - movs r0, #9 -_080319FE: - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - cmp r0, #0xf - bhi _08031A14 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - b _08031A1A -_08031A14: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 -_08031A1A: - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #8 - orrs r1, r0 - strb r1, [r2] - adds r0, r4, #0 - movs r1, #0xe - bl InitializeAnimation -_08031A36: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _08031A48 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_08031A48: - ldr r1, _08031A5C @ =gUnk_080CE56C - adds r0, r4, #0 - bl sub_0804AA30 - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08031A5C: .4byte gUnk_080CE56C - - thumb_func_start sub_08031A60 -sub_08031A60: @ 0x08031A60 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _08031A7A - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 -_08031A7A: - adds r0, r4, #0 - bl sub_08001324 - - thumb_func_start nullsub_153 -nullsub_153: @ 0x08031A80 - pop {r4, pc} - .align 2, 0 - - thumb_func_start nullsub_154 -nullsub_154: @ 0x08031A84 - bx lr - .align 2, 0 - - thumb_func_start sub_08031A88 -sub_08031A88: @ 0x08031A88 - push {lr} - ldr r2, _08031A9C @ =gUnk_080CE58C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08031A9C: .4byte gUnk_080CE58C - - thumb_func_start sub_08031AA0 -sub_08031AA0: @ 0x08031AA0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x74 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x76 - strh r0, [r1] - bl Random - adds r4, #0x79 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08031AC8 -sub_08031AC8: @ 0x08031AC8 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0xe] - cmp r0, #0 - beq _08031AD8 - subs r0, #1 - strb r0, [r6, #0xe] - b _08031B44 -_08031AD8: - adds r0, r6, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _08031B44 - bl Random - adds r5, r0, #0 - adds r0, r6, #0 - adds r0, #0x74 - ldrh r4, [r0] - adds r0, r5, #0 - movs r1, #5 - bl __modsi3 - lsls r0, r0, #4 - adds r4, r4, r0 - adds r7, r4, #0 - subs r7, #0x20 - adds r0, r6, #0 - adds r0, #0x76 - ldrh r4, [r0] - lsrs r5, r5, #4 - adds r0, r5, #0 - movs r1, #5 - bl __modsi3 - lsls r0, r0, #4 - adds r4, r4, r0 - subs r4, #0x20 - adds r0, r6, #0 - adds r0, #0x38 - ldrb r2, [r0] - adds r0, r7, #0 - adds r1, r4, #0 - bl sub_080002D4 - cmp r0, #0 - bne _08031B44 - movs r0, #2 - strb r0, [r6, #0xc] - ldrb r1, [r6, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r6, #0x18] - strh r7, [r6, #0x2e] - strh r4, [r6, #0x32] - adds r0, r6, #0 - movs r1, #0 - bl InitializeAnimation -_08031B44: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08031B48 -sub_08031B48: @ 0x08031B48 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08031B6C - movs r0, #0 - strb r0, [r2] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - b _08031B90 -_08031B6C: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08031B90 - movs r0, #3 - strb r0, [r4, #0xc] - bl Random - ldr r2, _08031B94 @ =gUnk_080CE5B0 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08031B90: - pop {r4, pc} - .align 2, 0 -_08031B94: .4byte gUnk_080CE5B0 - - thumb_func_start sub_08031B98 -sub_08031B98: @ 0x08031B98 - push {r4, lr} - adds r4, r0, #0 - bl sub_08031E04 - cmp r0, #0 - beq _08031BDA - movs r0, #5 - strb r0, [r4, #0xc] - ldr r0, _08031BC4 @ =gUnk_020000B0 - ldr r0, [r0] - movs r2, #0x2e - ldrsh r1, [r4, r2] - movs r2, #0x2e - ldrsh r0, [r0, r2] - cmp r1, r0 - ble _08031BC8 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - b _08031BCE - .align 2, 0 -_08031BC4: .4byte gUnk_020000B0 -_08031BC8: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 -_08031BCE: - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - b _08031C1A -_08031BDA: - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08031BFA - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08031BFA - movs r0, #0xfe - ands r0, r1 - strb r0, [r2] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] -_08031BFA: - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _08031C1A - movs r0, #4 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation -_08031C1A: - pop {r4, pc} - - thumb_func_start sub_08031C1C -sub_08031C1C: @ 0x08031C1C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08031C50 - movs r0, #1 - strb r0, [r4, #0xc] - bl Random - ldr r2, _08031C54 @ =gUnk_080CE5B8 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_08031C50: - pop {r4, pc} - .align 2, 0 -_08031C54: .4byte gUnk_080CE5B8 - - thumb_func_start sub_08031C58 -sub_08031C58: @ 0x08031C58 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r7, r0, #0 - bl GetNextFrame - adds r3, r7, #0 - adds r3, #0x5a - ldrb r1, [r3] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - beq _08031D54 - ldr r0, _08031D50 @ =gUnk_03003DBC - ldrb r0, [r0] - cmp r0, #0x42 - bhi _08031D66 - bl Random - adds r6, r0, #0 - movs r0, #3 - mov sb, r0 - ands r6, r0 - movs r0, #0x2e - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - movs r0, #0 - mov r8, r0 - mov r0, r8 - strb r0, [r4, #0xb] - mov r0, r8 - str r0, [r4, #0x50] - adds r0, r4, #0 - adds r0, #0x74 - strb r6, [r0] - adds r0, r7, #0 - adds r1, r4, #0 - bl sub_08031E48 - movs r0, #0x2e - movs r1, #1 - bl CreateEnemy - adds r5, r0, #0 - str r5, [r4, #0x54] - movs r0, #1 - strb r0, [r5, #0xb] - str r4, [r5, #0x50] - adds r0, r5, #0 - adds r0, #0x74 - strb r6, [r0] - adds r0, r7, #0 - adds r1, r5, #0 - bl sub_08031E48 - movs r0, #0x2e - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - str r4, [r5, #0x54] - movs r0, #2 - strb r0, [r4, #0xb] - str r5, [r4, #0x50] - adds r0, r4, #0 - adds r0, #0x74 - strb r6, [r0] - adds r0, r7, #0 - adds r1, r4, #0 - bl sub_08031E48 - movs r0, #0x2e - movs r1, #1 - bl CreateEnemy - adds r5, r0, #0 - str r5, [r4, #0x54] - mov r0, sb - strb r0, [r5, #0xb] - str r4, [r5, #0x50] - adds r0, r5, #0 - adds r0, #0x74 - strb r6, [r0] - adds r0, r7, #0 - adds r1, r5, #0 - bl sub_08031E48 - movs r0, #0x2e - movs r1, #1 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r5, #0x54] - movs r0, #4 - strb r0, [r1, #0xb] - str r5, [r1, #0x50] - mov r0, r8 - str r0, [r1, #0x54] - adds r0, r1, #0 - adds r0, #0x74 - strb r6, [r0] - adds r0, r7, #0 - bl sub_08031E48 - movs r0, #6 - strb r0, [r7, #0xc] - movs r0, #0x14 - strb r0, [r7, #0xe] - adds r2, r7, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - adds r0, r7, #0 - movs r1, #7 - bl InitializeAnimation - b _08031D66 - .align 2, 0 -_08031D50: .4byte gUnk_03003DBC -_08031D54: - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08031D66 - strb r2, [r3] - ldrb r1, [r7, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r7, #0x10] -_08031D66: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08031D70 -sub_08031D70: @ 0x08031D70 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08031D9C - movs r0, #7 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #5 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #9 - ands r0, r1 - strb r0, [r4, #0x18] -_08031D9C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08031DA0 -sub_08031DA0: @ 0x08031DA0 - push {lr} - adds r1, r0, #0 - ldrb r2, [r1, #0xe] - movs r0, #0xf - ands r0, r2 - cmp r0, #0 - bne _08031DC2 - cmp r2, #0x50 - bne _08031DBA - adds r0, r1, #0 - bl DeleteEntity - b _08031DC2 -_08031DBA: - movs r0, #1 - strb r0, [r1, #0xc] - movs r0, #0xb4 - strb r0, [r1, #0xe] -_08031DC2: - pop {pc} - - thumb_func_start sub_08031DC4 -sub_08031DC4: @ 0x08031DC4 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x5a - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08031DE8 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0xb4 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #0xb8 - ands r0, r1 - strb r0, [r4, #0x18] - b _08031E00 -_08031DE8: - adds r0, r4, #0 - bl GetNextFrame - ldrb r1, [r5] - movs r0, #0xf - ands r0, r1 - cmp r0, #2 - bne _08031E00 - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] -_08031E00: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08031E04 -sub_08031E04: @ 0x08031E04 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - bl sub_08049DF4 - adds r2, r0, #0 - cmp r2, #0 - beq _08031E44 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r3, #6 - ands r3, r0 - ldr r0, _08031E40 @ =gUnk_080CE5C0 - adds r3, r3, r0 - movs r0, #0x2e - ldrsh r1, [r2, r0] - movs r0, #0 - ldrsb r0, [r3, r0] - adds r1, r1, r0 - movs r0, #0x32 - ldrsh r2, [r2, r0] - movs r0, #1 - ldrsb r0, [r3, r0] - adds r2, r2, r0 - adds r0, r4, #0 - movs r3, #0x50 - bl sub_0806FCB8 - b _08031E46 - .align 2, 0 -_08031E40: .4byte gUnk_080CE5C0 -_08031E44: - movs r0, #0 -_08031E46: - pop {r4, pc} - - thumb_func_start sub_08031E48 -sub_08031E48: @ 0x08031E48 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - bl CopyPosition - adds r0, r5, #0 - adds r0, #0x6c - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x6c - strb r1, [r0] - adds r0, r5, #0 - adds r0, #0x70 - ldrh r1, [r0] - adds r0, r4, #0 - adds r0, #0x70 - strh r1, [r0] - adds r0, r5, #0 - adds r0, #0x72 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x72 - strh r0, [r1] - adds r0, r5, #0 - adds r0, #0x6e - ldrb r0, [r0] - subs r1, #4 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x6f - ldrb r0, [r0] - adds r1, #1 - strb r0, [r1] - str r5, [r4, #0x7c] - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08031E90 -sub_08031E90: @ 0x08031E90 - push {lr} - ldr r2, _08031EA4 @ =gUnk_080CE5C8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08031EA4: .4byte gUnk_080CE5C8 - - thumb_func_start sub_08031EA8 -sub_08031EA8: @ 0x08031EA8 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x3a - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - movs r0, #0x80 - lsls r0, r0, #0xb - str r0, [r4, #0x20] - ldrb r0, [r4, #0xb] - movs r1, #4 - subs r1, r1, r0 - lsls r0, r1, #3 - subs r0, r0, r1 - lsls r0, r0, #1 - strh r0, [r4, #0x36] - bl Random - adds r1, r4, #0 - adds r1, #0x79 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_08031EE8 -sub_08031EE8: @ 0x08031EE8 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x34] - ldr r1, [r4, #0x20] - subs r0, r0, r1 - str r0, [r4, #0x34] - ldr r0, _08031F4C @ =0xFFFFE800 - adds r1, r1, r0 - str r1, [r4, #0x20] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - bgt _08031F1E - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _08031F10 - ldr r0, _08031F50 @ =0x0000012B - bl sub_08004488 -_08031F10: - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r4, #0x18] -_08031F1E: - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _08031F2E - adds r0, r4, #0 - bl GetNextFrame -_08031F2E: - ldr r0, [r4, #0x20] - cmp r0, #0 - bgt _08031F48 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #5 - bl InitializeAnimation -_08031F48: - pop {r4, pc} - .align 2, 0 -_08031F4C: .4byte 0xFFFFE800 -_08031F50: .4byte 0x0000012B - - thumb_func_start sub_08031F54 -sub_08031F54: @ 0x08031F54 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08031FAC @ =gUnk_080CE5F0 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - adds r0, r4, #0 - bl sub_08003FC4 - ldrb r1, [r4, #0xb] - lsls r0, r1, #3 - subs r0, r0, r1 - lsls r0, r0, #1 - rsbs r0, r0, #0 - movs r2, #0x36 - ldrsh r1, [r4, r2] - cmp r0, r1 - bgt _08031FAA - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x14 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0xb] - lsls r0, r1, #3 - subs r0, r0, r1 - lsls r0, r0, #1 - rsbs r0, r0, #0 - strh r0, [r4, #0x36] - ldr r0, [r4, #0x50] - cmp r0, #0 - beq _08031FA2 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] -_08031FA2: - adds r0, r4, #0 - movs r1, #6 - bl InitializeAnimation -_08031FAA: - pop {r4, pc} - .align 2, 0 -_08031FAC: .4byte gUnk_080CE5F0 - - thumb_func_start sub_08031FB0 -sub_08031FB0: @ 0x08031FB0 - push {r4, r5, lr} - adds r5, r0, #0 - bl GetNextFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08032006 - ldr r0, [r5, #0x50] - cmp r0, #0 - bne _08031FD8 - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08032006 -_08031FD8: - movs r4, #0 - movs r0, #4 - strb r0, [r5, #0xc] - adds r0, r5, #0 - movs r1, #1 - bl sub_08049F84 - strb r0, [r5, #0x15] - adds r0, r5, #0 - adds r0, #0x76 - strb r4, [r0] - ldr r0, [r5, #0x54] - cmp r0, #0 - beq _08031FFE - adds r0, r5, #0 - movs r1, #9 - bl InitializeAnimation - b _08032006 -_08031FFE: - adds r0, r5, #0 - movs r1, #8 - bl InitializeAnimation -_08032006: - pop {r4, r5, pc} - - thumb_func_start sub_08032008 -sub_08032008: @ 0x08032008 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - bl sub_080322A4 - adds r7, r0, #0 - cmp r7, #0 - beq _08032018 - b _08032144 -_08032018: - ldr r5, [r4, #0x50] - cmp r5, #0 - bne _080320D4 - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _08032060 - adds r1, r4, #0 - adds r1, #0x79 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - movs r1, #0xff - ands r0, r1 - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _08032052 - ldr r0, _0803205C @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 -_08032052: - adds r0, r4, #0 - adds r0, #0x76 - strb r7, [r0] - b _080320AC - .align 2, 0 -_0803205C: .4byte gUnk_020000B0 -_08032060: - adds r1, r4, #0 - adds r1, #0x76 - ldrb r0, [r1] - cmp r0, #0 - beq _0803207C - subs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x7a - ldrb r1, [r0] - adds r0, r4, #0 - bl sub_08004596 - b _080320AC -_0803207C: - movs r0, #0x10 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _0803209E - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _0803209E - adds r0, r4, #0 - bl sub_08049EE4 - b _080320A6 -_0803209E: - bl Random - movs r1, #0x1e - ands r0, r1 -_080320A6: - adds r1, r4, #0 - adds r1, #0x7a - strb r0, [r1] -_080320AC: - ldrb r1, [r4, #0x15] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - beq _080320CC - lsrs r1, r1, #4 - movs r0, #1 - eors r1, r0 - ands r1, r0 - lsls r1, r1, #6 - ldrb r2, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] -_080320CC: - adds r0, r4, #0 - bl sub_080AEF88 - b _0803213E -_080320D4: - adds r6, r4, #0 - adds r6, #0x77 - ldrb r0, [r6] - cmp r0, #0 - bne _0803210E - movs r0, #0x2e - ldrsh r1, [r5, r0] - movs r0, #0x32 - ldrsh r2, [r5, r0] - adds r0, r4, #0 - movs r3, #1 - bl sub_0806FCB8 - cmp r0, #0 - bne _0803213E - movs r0, #1 - strb r0, [r6] - adds r0, r4, #0 - adds r1, r5, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_080322E8 - adds r0, r4, #0 - bl sub_0806F69C - b _0803213E -_0803210E: - adds r0, r4, #0 - adds r1, r5, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_080322E8 - adds r0, r4, #0 - bl sub_0806F69C - movs r2, #0x2e - ldrsh r1, [r4, r2] - movs r2, #0x2e - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _0803213E - movs r0, #0x32 - ldrsh r1, [r4, r0] - movs r2, #0x32 - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _0803213E - strb r7, [r6] -_0803213E: - adds r0, r4, #0 - bl GetNextFrame -_08032144: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08032148 -sub_08032148: @ 0x08032148 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x80 - lsls r1, r1, #6 - bl sub_08003FC4 - cmp r0, #0 - bne _0803215E - adds r0, r4, #0 - bl sub_08032290 -_0803215E: - pop {r4, pc} - - thumb_func_start sub_08032160 -sub_08032160: @ 0x08032160 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _080321C2 - movs r0, #7 - strb r0, [r4, #0xc] - ldr r2, _08032190 @ =gUnk_080CE5FA - adds r0, r4, #0 - adds r0, #0x74 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - ldrb r1, [r4, #0xb] - adds r0, r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r4, #0x15] - cmp r0, #0xf - bls _08032194 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - b _0803219C - .align 2, 0 -_08032190: .4byte gUnk_080CE5FA -_08032194: - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 -_0803219C: - strb r0, [r4, #0x18] - movs r0, #0xf0 - strh r0, [r4, #0x24] - movs r0, #0x90 - lsls r0, r0, #9 - str r0, [r4, #0x20] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0xc - bl InitializeAnimation -_080321C2: - ldr r0, [r4, #0x54] - cmp r0, #0 - bne _080321E6 - ldr r1, [r4, #0x50] - cmp r1, #0 - beq _080321E2 - movs r2, #0 -_080321D0: - adds r0, r1, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _080321DC - strb r2, [r1, #0xe] -_080321DC: - ldr r1, [r1, #0x50] - cmp r1, #0 - bne _080321D0 -_080321E2: - movs r0, #0 - strb r0, [r4, #0xe] -_080321E6: - pop {r4, pc} - - thumb_func_start sub_080321E8 -sub_080321E8: @ 0x080321E8 - push {r4, lr} - adds r4, r0, #0 - bl sub_080AEFE0 - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_080044EC - cmp r0, #0 - bne _08032202 - movs r0, #8 - strb r0, [r4, #0xc] -_08032202: - pop {r4, pc} - - thumb_func_start sub_08032204 -sub_08032204: @ 0x08032204 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08032230 - movs r0, #0 - strb r0, [r2] - bl Random - movs r1, #0x30 - ands r0, r1 - adds r0, #0x1e - adds r1, r4, #0 - adds r1, #0x59 - strb r0, [r1] - b _08032244 -_08032230: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08032244 - movs r0, #9 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0xd - bl InitializeAnimation -_08032244: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08032248 -sub_08032248: @ 0x08032248 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0xc0 - lsls r1, r1, #5 - bl sub_08003FC4 - cmp r0, #0 - bne _0803228E - adds r5, r4, #0 - adds r5, #0x5a - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08032276 - ldr r1, [r4, #0x7c] - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - adds r0, r4, #0 - bl DeleteEntity - b _0803228E -_08032276: - adds r0, r4, #0 - bl GetNextFrame - ldrb r1, [r5] - movs r0, #0xf - ands r0, r1 - cmp r0, #2 - bne _0803228E - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] -_0803228E: - pop {r4, r5, pc} - - thumb_func_start sub_08032290 -sub_08032290: @ 0x08032290 - push {lr} - movs r1, #6 - strb r1, [r0, #0xc] - movs r1, #0xc - strb r1, [r0, #0xe] - movs r1, #0xb - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_080322A4 -sub_080322A4: @ 0x080322A4 - push {r4, lr} - adds r2, r0, #0 - ldr r3, [r2, #0x54] - cmp r3, #0 - beq _080322E2 - movs r1, #0x36 - ldrsh r0, [r3, r1] - adds r0, #8 - movs r4, #0x36 - ldrsh r1, [r2, r4] - cmp r0, r1 - blt _080322E2 - adds r0, r1, #0 - cmp r0, #0 - beq _080322D8 - movs r0, #5 - strb r0, [r2, #0xc] - ldrh r0, [r3, #0x36] - adds r0, #8 - strh r0, [r2, #0x36] - adds r0, r2, #0 - movs r1, #0xb - bl InitializeAnimation - movs r0, #1 - b _080322E4 -_080322D8: - adds r0, r2, #0 - bl sub_08032290 - movs r0, #1 - b _080322E4 -_080322E2: - movs r0, #0 -_080322E4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080322E8 -sub_080322E8: @ 0x080322E8 - push {lr} - adds r3, r0, #0 - adds r2, r3, #0 - adds r2, #0x78 - ldrb r0, [r2] - cmp r0, #0 - beq _08032316 - subs r0, #1 - strb r0, [r2] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08032334 - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x19 - lsrs r1, r1, #0x1f - movs r0, #1 - eors r1, r0 - lsls r1, r1, #6 - subs r0, #0x42 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - b _08032334 -_08032316: - ldrb r1, [r3, #0x15] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - beq _08032334 - lsrs r1, r1, #4 - movs r0, #1 - eors r1, r0 - ldrb r0, [r3, #0x18] - lsls r0, r0, #0x19 - lsrs r0, r0, #0x1f - cmp r1, r0 - beq _08032334 - movs r0, #6 - strb r0, [r2] -_08032334: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08032338 -sub_08032338: @ 0x08032338 - push {lr} - adds r2, r0, #0 - ldr r1, [r2, #0x7c] - ldrb r0, [r1, #0xe] - adds r0, #0xf - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x50 - beq _08032354 - adds r1, r2, #0 - adds r1, #0x6c - movs r0, #0 - strb r0, [r1] -_08032354: - pop {pc} - .align 2, 0 diff --git a/asm/non_matching/acroBandits/sub_08031C58.inc b/asm/non_matching/acroBandits/sub_08031C58.inc new file mode 100644 index 00000000..1c641ec3 --- /dev/null +++ b/asm/non_matching/acroBandits/sub_08031C58.inc @@ -0,0 +1,136 @@ + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r7, r0, #0 + bl GetNextFrame + adds r3, r7, #0 + adds r3, #0x5a + ldrb r1, [r3] + movs r0, #0x80 + ands r0, r1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #0 + beq _08031D54 + ldr r0, _08031D50 @ =gUnk_03003DBC + ldrb r0, [r0] + cmp r0, #0x42 + bhi _08031D66 + bl Random + adds r6, r0, #0 + movs r0, #3 + mov sb, r0 + ands r6, r0 + movs r0, #0x2e + movs r1, #1 + bl CreateEnemy + adds r4, r0, #0 + movs r0, #0 + mov r8, r0 + mov r0, r8 + strb r0, [r4, #0xb] + mov r0, r8 + str r0, [r4, #0x50] + adds r0, r4, #0 + adds r0, #0x74 + strb r6, [r0] + adds r0, r7, #0 + adds r1, r4, #0 + bl sub_08031E48 + movs r0, #0x2e + movs r1, #1 + bl CreateEnemy + adds r5, r0, #0 + str r5, [r4, #0x54] + movs r0, #1 + strb r0, [r5, #0xb] + str r4, [r5, #0x50] + adds r0, r5, #0 + adds r0, #0x74 + strb r6, [r0] + adds r0, r7, #0 + adds r1, r5, #0 + bl sub_08031E48 + movs r0, #0x2e + movs r1, #1 + bl CreateEnemy + adds r4, r0, #0 + str r4, [r5, #0x54] + movs r0, #2 + strb r0, [r4, #0xb] + str r5, [r4, #0x50] + adds r0, r4, #0 + adds r0, #0x74 + strb r6, [r0] + adds r0, r7, #0 + adds r1, r4, #0 + bl sub_08031E48 + movs r0, #0x2e + movs r1, #1 + bl CreateEnemy + adds r5, r0, #0 + str r5, [r4, #0x54] + mov r0, sb + strb r0, [r5, #0xb] + str r4, [r5, #0x50] + adds r0, r5, #0 + adds r0, #0x74 + strb r6, [r0] + adds r0, r7, #0 + adds r1, r5, #0 + bl sub_08031E48 + movs r0, #0x2e + movs r1, #1 + bl CreateEnemy + adds r1, r0, #0 + str r1, [r5, #0x54] + movs r0, #4 + strb r0, [r1, #0xb] + str r5, [r1, #0x50] + mov r0, r8 + str r0, [r1, #0x54] + adds r0, r1, #0 + adds r0, #0x74 + strb r6, [r0] + adds r0, r7, #0 + bl sub_08031E48 + movs r0, #6 + strb r0, [r7, #0xc] + movs r0, #0x14 + strb r0, [r7, #0xe] + adds r2, r7, #0 + adds r2, #0x29 + ldrb r0, [r2] + movs r1, #7 + orrs r0, r1 + strb r0, [r2] + adds r0, r7, #0 + movs r1, #7 + bl InitializeAnimation + b _08031D66 + .align 2, 0 +_08031D50: .4byte gUnk_03003DBC +_08031D54: + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08031D66 + strb r2, [r3] + ldrb r1, [r7, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r7, #0x10] +_08031D66: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided + \ No newline at end of file diff --git a/asm/non_matching/acroBandits/sub_08031E04.inc b/asm/non_matching/acroBandits/sub_08031E04.inc new file mode 100644 index 00000000..464f2572 --- /dev/null +++ b/asm/non_matching/acroBandits/sub_08031E04.inc @@ -0,0 +1,41 @@ + + .syntax unified + + .text + + push {r4, lr} + adds r4, r0, #0 + movs r0, #1 + bl sub_08049DF4 + adds r2, r0, #0 + cmp r2, #0 + beq _08031E44 + adds r0, r4, #0 + adds r0, #0x5a + ldrb r0, [r0] + movs r3, #6 + ands r3, r0 + ldr r0, _08031E40 @ =gUnk_080CE5C0 + adds r3, r3, r0 + movs r0, #0x2e + ldrsh r1, [r2, r0] + movs r0, #0 + ldrsb r0, [r3, r0] + adds r1, r1, r0 + movs r0, #0x32 + ldrsh r2, [r2, r0] + movs r0, #1 + ldrsb r0, [r3, r0] + adds r2, r2, r0 + adds r0, r4, #0 + movs r3, #0x50 + bl sub_0806FCB8 + b _08031E46 + .align 2, 0 +_08031E40: .4byte gUnk_080CE5C0 +_08031E44: + movs r0, #0 +_08031E46: + pop {r4, pc} + .syntax divided + \ No newline at end of file diff --git a/asm/non_matching/acroBandits/sub_080322E8.inc b/asm/non_matching/acroBandits/sub_080322E8.inc new file mode 100644 index 00000000..6c4a775b --- /dev/null +++ b/asm/non_matching/acroBandits/sub_080322E8.inc @@ -0,0 +1,48 @@ + + .syntax unified + + .text + + push {lr} + adds r3, r0, #0 + adds r2, r3, #0 + adds r2, #0x78 + ldrb r0, [r2] + cmp r0, #0 + beq _08032316 + subs r0, #1 + strb r0, [r2] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _08032334 + ldrb r2, [r3, #0x18] + lsls r1, r2, #0x19 + lsrs r1, r1, #0x1f + movs r0, #1 + eors r1, r0 + lsls r1, r1, #6 + subs r0, #0x42 + ands r0, r2 + orrs r0, r1 + strb r0, [r3, #0x18] + b _08032334 +_08032316: + ldrb r1, [r3, #0x15] + movs r0, #0xf + ands r0, r1 + cmp r0, #0 + beq _08032334 + lsrs r1, r1, #4 + movs r0, #1 + eors r1, r0 + ldrb r0, [r3, #0x18] + lsls r0, r0, #0x19 + lsrs r0, r0, #0x1f + cmp r1, r0 + beq _08032334 + movs r0, #6 + strb r0, [r2] +_08032334: + pop {pc} + .align 2, 0 + .syntax divided diff --git a/include/entity.h b/include/entity.h index cf31480e..5eaa1f2f 100644 --- a/include/entity.h +++ b/include/entity.h @@ -91,7 +91,7 @@ typedef struct Entity { /*0x3a*/ u8 field_0x3a; /*0x3b*/ u8 flags2; /*0x3c*/ u8 field_0x3c; - /*0x3d*/ u8 hurtBlinkTime; + /*0x3d*/ s8 hurtBlinkTime; /*0x3e*/ u8 field_0x3e; /*0x3f*/ u8 damageType; /*0x40*/ u8 field_0x40; @@ -130,10 +130,10 @@ typedef struct Entity { /*0x6c*/ union SplitHWord field_0x6c; /*0x6e*/ u8 filler4[2]; /*0x70*/ union SplitWord field_0x70; - /*0x74*/ u16 field_0x74; - /*0x76*/ u16 field_0x76; + /*0x74*/ union SplitHWord field_0x74; + /*0x76*/ union SplitHWord field_0x76; /*0x78*/ union SplitHWord field_0x78; - /*0x7a*/ u16 field_0x7a; + /*0x7a*/ union SplitHWord field_0x7a; /*0x7c*/ union SplitWord field_0x7c; /*0x80*/ union SplitHWord field_0x80; /*0x82*/ union SplitHWord field_0x82; diff --git a/include/functions.h b/include/functions.h index dadc6846..d69f9cb5 100644 --- a/include/functions.h +++ b/include/functions.h @@ -60,7 +60,7 @@ extern void sub_0805EC9C(); extern void sub_0805EC60(); extern void sub_080873D0(); extern u8 sub_080045D4(s16, s16, u16, u16); -extern void sub_0806F69C(); +extern void sub_0806F69C(Entity*); extern void sub_0805E3A0(Entity*, u32); extern void sub_0806D0B0(Entity*); extern void sub_0807DD64(Entity*); diff --git a/linker.ld b/linker.ld index cceaae18..271c1f98 100644 --- a/linker.ld +++ b/linker.ld @@ -374,7 +374,7 @@ SECTIONS { asm/rope.o(.text); src/enemy/smallPesto.o(.text); asm/smallPesto.o(.text); - asm/acroBandits.o(.text); + src/enemy/acroBandits.o(.text); src/enemy/bladeTrap.o(.text); src/enemy/keaton.o(.text); asm/crow.o(.text); diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c new file mode 100644 index 00000000..da3b7923 --- /dev/null +++ b/src/enemy/acroBandits.c @@ -0,0 +1,572 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" + +extern u32 sub_080002D4(s32, s32, u32); +extern s32 sub_080012DC(Entity*); +extern void sub_08001324(Entity*); +extern u32 sub_080044EC(Entity*, u32); +extern u32 sub_08031E04(Entity*); +extern void sub_08031E48(Entity*, Entity*); +extern void sub_08032290(Entity*); +extern u32 sub_080322A4(Entity*); +void sub_080322E8(Entity*); +extern void sub_08032338(Entity*); +extern Entity* sub_08049DF4(u32); +extern u8 sub_08049F84(Entity*, u32); +extern void sub_0804A9FC(Entity*, u32); +extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*)); +extern u32 sub_0806FCB8(Entity*, u32, u32, u32); +extern u32 GetNextFunction(Entity*); +extern void SetChildOffset(Entity*, s32, s32, s32); +extern u32 Random(void); + +extern Entity* gUnk_020000B0; +extern u8 gUnk_03003DBC; +extern void (*const gUnk_080012C8[])(Entity*); +extern void (*const gUnk_080CE56C[])(Entity*); +extern void (*const gUnk_080CE584[])(Entity*); +extern void (*const gUnk_080CE58C[])(Entity*); +extern void (*const gUnk_080CE5C8[])(Entity*); +extern u8 gUnk_080CE5B0[8]; +extern u8 gUnk_080CE5B8[8]; +extern union SplitHWord gUnk_080CE5C0[4]; +extern u16 gUnk_080CE5F0[5]; +extern u8 gUnk_080CE5FA[20]; // Directions + +void AcroBandit(Entity* this) { + s32 index; + + index = sub_080012DC(this); + + if (index) { + if ((this->field_0x3a & 1) == 0) + sub_08032338(this); + + gUnk_080012C8[index](this); + } else { + gUnk_080CE56C[GetNextFunction(this)](this); + SetChildOffset(this, 0, 1, -0x10); + } +} + +void sub_080318C4(Entity* this) { + gUnk_080CE584[this->entityType.form](this); +} + +void sub_080318DC(Entity* this) { + Entity* brother; + + if (this->bitfield != 0x80 && this->bitfield != 0x81) { + if (this->entityType.form == 1) { + if (this->action < 7 && this->field_0x42) { + brother = this->attachedEntity; + if (brother) { + brother->parent = this->parent; + do { + brother->action = 5; + brother->spritePriority.b1 = 1; + if (brother->hurtBlinkTime == 0) + brother->hurtBlinkTime = -12; + } while (brother = brother->attachedEntity, brother != NULL); + } + if (this->parent) { + this->parent->attachedEntity = this->attachedEntity; + } else { + if (this->attachedEntity) + this->parent = this; + } + + this->action = 9; + this->spritePriority.b1 = 1; + if (this->field_0x3e < 0x10) { + this->spriteSettings.b.flipX = 0; + } else { + this->spriteSettings.b.flipX = 1; + } + InitializeAnimation(this, 14); + } + + if (this->currentHealth == 0) { + this->field_0x3e = ((this->field_0x3e + (7 & Random())) - 4) & 0x1f; + this->field_0x42 += this->entityType.parameter * 3; + sub_08032338(this); + } + } + + if (this->field_0x42 && this->frames.all & 0x10) { + if (this->entityType.form == 0) { + this->action = 8; + } else { + this->action = 9; + } + if (this->field_0x3e < 0x10) { + this->spriteSettings.b.flipX = 0; + } else { + this->spriteSettings.b.flipX = 1; + } + this->spritePriority.b1 = 1; + InitializeAnimation(this, 14); + } + } + + if (this->field_0x43) + sub_0804A9FC(this, 0x1c); + + sub_0804AA30(this, gUnk_080CE56C); +} + +void sub_08031A60(Entity* this) { + if (this->hurtBlinkTime > 0) + sub_08003FC4(this, 0x1800); + + sub_08001324(this); +} + +void nullsub_154(void) { + /* ... */ +} + +void sub_08031A88(Entity* this) { + gUnk_080CE58C[this->action](this); +} + +void sub_08031AA0(Entity* this) { + sub_0804A720(this); + this->action = '\x01'; + this->field_0x74.HWORD = this->x.HALF.HI; + this->field_0x76.HWORD = this->y.HALF.HI; + this->field_0x78.HALF.HI = Random(); +} + +void sub_08031AC8(Entity* this) + +{ + u32 rand; + s32 x, y; + + if (this->actionDelay) { + this->actionDelay--; + } else { + if (sub_08049FDC(this, 1)) { + rand = Random(); + x = this->field_0x74.HWORD + ((s32)rand % 5) * 0x10 - 0x20; + y = this->field_0x76.HWORD + ((s32)(rand >> 4) % 5) * 0x10 - 0x20; + if (sub_080002D4(x, y, this->collisionLayer) == 0) { + this->action = 2; + this->spriteSettings.b.draw = 1; + this->x.HALF.HI = x; + this->y.HALF.HI = y; + InitializeAnimation(this, 0); + } + } + } +} + +void sub_08031B48(Entity* this) { + GetNextFrame(this); + if (this->frames.b.f0) { + this->frames.all = 0; + this->flags |= 0x80; + } else { + if (this->frames.b.f3) { + this->action = 0x3; + this->actionDelay = gUnk_080CE5B0[Random() & 7]; + InitializeAnimation(this, 1); + } + } +} + +void sub_08031B98(Entity* this) { + if (sub_08031E04(this)) { + this->action = 5; + if (this->x.HALF.HI > gUnk_020000B0->x.HALF.HI) { + this->spriteSettings.b.flipX = 0; + } else { + this->spriteSettings.b.flipX = 1; + } + InitializeAnimation(this, 3); + } else { + if (this->frames.b.f0 && this->actionDelay) { + // this->frames.b.f0 = 0; + this->frames.all &= 0xfe; + this->actionDelay--; + } + GetNextFrame(this); + if (this->actionDelay == 0) { + this->action = 4; + this->flags &= 0x7f; + InitializeAnimation(this, 2); + } + } +} + +void sub_08031C1C(Entity* this) { + GetNextFrame(this); + if (this->frames.b.f3) { + this->action = '\x01'; + this->actionDelay = gUnk_080CE5B8[Random() & 7]; + this->spriteSettings.b.draw = 0; + } +} + +#if NON_MATCHING +void sub_08031C58(Entity* this) { + u8 tmp; + Entity *a, *b; + + GetNextFrame(this); + if (this->frames.b.f3) { + if (gUnk_03003DBC < 0x43) { + tmp = Random(); + tmp &= 3; + + a = CreateEnemy(0x2e, 1); + a->entityType.parameter = 0; + a->parent = NULL; + a->field_0x74.HALF.LO = tmp; + sub_08031E48(this, a); + + b = CreateEnemy(0x2e, 1); + a->attachedEntity = b; + b->entityType.parameter = 1; + b->parent = a; + b->field_0x74.HALF.LO = tmp; + sub_08031E48(this, b); + + a = CreateEnemy(0x2e, 1); + b->attachedEntity = a; + a->entityType.parameter = 2; + a->parent = b; + a->field_0x74.HALF.LO = tmp; + sub_08031E48(this, a); + + b = CreateEnemy(0x2e, 1); + a->attachedEntity = b; + b->entityType.parameter = 3; + b->parent = a; + b->field_0x74.HALF.LO = tmp; + sub_08031E48(this, b); + + a = CreateEnemy(0x2e, 1); + b->attachedEntity = a; + a->entityType.parameter = 4; + a->parent = b; + a->attachedEntity = NULL; + a->field_0x74.HALF.LO = tmp; + sub_08031E48(this, a); + + this->action = 6; + this->actionDelay = 20; + this->spritePriority.b0 = 7; + InitializeAnimation(this, 7); + } + } else { + if (this->frames.b.f0) { + this->frames.all = 0; + this->flags &= 0x7f; + } + } +} +#else +NAKED +void sub_08031C58(Entity* this) { + asm(".include \"asm/non_matching/acroBandits/sub_08031C58.inc\""); +} +#endif + +void sub_08031D70(Entity* this) { + GetNextFrame(this); + if (--this->actionDelay == '\0') { + this->action = 7; + this->flags &= 0x7f; + this->actionDelay = 5; + this->spriteSettings.b.draw = 0; + } +} + +void sub_08031DA0(Entity* this) { + if ((this->actionDelay & 0xf) == 0) { + if (this->actionDelay == 0x50) { + DeleteEntity(this); + } else { + this->action = 1; + this->actionDelay = 0xb4; + } + } +} + +void sub_08031DC4(Entity* this) { + if (this->frames.b.f3) { + this->action = 1; + this->actionDelay = 0xb4; + this->spriteSettings.b.draw = 0; + } else { + GetNextFrame(this); + if ((this->frames.all & 0xf) == 2) { + this->flags &= 0x7f; + } + } +} + +#if NON_MATCHING +u32 sub_08031E04(Entity* this) { + Entity* ent; + union SplitHWord* tmp; + int x, y; + + ent = sub_08049DF4(1); + if (ent == NULL) + return 0; + + tmp = &gUnk_080CE5C0[this->frames.all & 6]; + x = ent->x.HALF.HI + tmp->HALF.LO; + y = ent->y.HALF.HI + tmp->HALF.HI; + return sub_0806FCB8(this, x, y, 0x50); +} +#else +NAKED +u32 sub_08031E04(Entity* this) { + asm(".include \"asm/non_matching/acroBandits/sub_08031E04.inc\""); +} +#endif + +void sub_08031E48(Entity* this, Entity* child) { + CopyPosition(this, child); + child->field_0x6c.HALF.LO = this->field_0x6c.HALF.LO; + child->field_0x70.HALF.LO = this->field_0x70.HALF.LO; + child->field_0x70.HALF.HI = this->field_0x70.HALF.HI; + child->filler4[0] = this->filler4[0]; + child->filler4[1] = this->filler4[1]; + child->field_0x7c.WORD = (s32)this; +} + +void sub_08031E90(Entity* this) { + gUnk_080CE5C8[this->action](this); +} + +void sub_08031EA8(Entity* this) { + this->action = 1; + this->spritePriority.b1 = 1; + this->field_0x20 = 0x40000; + this->height.HALF.HI = (4 - this->entityType.parameter) * 0xe; + this->field_0x78.HALF.HI = Random(); + InitializeAnimation(this, 4); +} + +void sub_08031EE8(Entity* this) { + int draw; + + this->height.WORD -= this->field_0x20; + this->field_0x20 -= 0x1800; + + if (this->height.HALF.HI < 1) { + draw = this->spriteSettings.b.draw; + if (!draw) + sub_08004488(299); + + this->spriteSettings.b.draw = 1; + } + + draw = this->spriteSettings.b.draw; + if (draw == 1) + GetNextFrame(this); + + if (this->field_0x20 < 1) { + this->action = 2; + this->flags |= 0x80; + InitializeAnimation(this, 5); + } +} + +void sub_08031F54(Entity* this) { + sub_08003FC4(this, gUnk_080CE5F0[this->entityType.parameter]); + if (this->entityType.parameter * -0xe <= this->height.HALF.HI) { + this->action = 3; + this->actionDelay = 20; + this->height.HALF.HI = this->entityType.parameter * -0xe; + if (this->parent != NULL) + this->spritePriority.b1 = 0; + InitializeAnimation(this, 6); + } +} + +void sub_08031FB0(Entity* this) { + GetNextFrame(this); + if (this->frames.b.f3 && (this->parent || --this->actionDelay == 0)) { + this->action = 4; + this->direction = sub_08049F84(this, 1); + *(u8*)&this->field_0x76 = 0; + if (this->attachedEntity) { + InitializeAnimation(this, 9); + } else { + InitializeAnimation(this, 8); + } + } +} + +void sub_08032008(Entity* this) { + Entity* parent; + + if (sub_080322A4(this) == 0) { + parent = this->parent; + if (parent == 0) { + if (sub_08049FDC(this, 1)) { + if ((++this->field_0x78.HALF.HI & 7) == 0) { + sub_08004596(this, GetFacingDirection(this, gUnk_020000B0)); + } + this->field_0x76.HALF.LO = 0; + } else { + if (this->field_0x76.HALF.LO) { + (this->field_0x76.HALF.LO)--; + sub_08004596(this, this->field_0x7a.HALF.LO); + } else { + this->field_0x76.HALF.LO = 0x10; + if (sub_08049FA0(this) == 0 && (Random() & 1)) { + this->field_0x7a.HALF.LO = sub_08049EE4(this); + } else { + this->field_0x7a.HALF.LO = Random() & 30; + } + } + } + + if (this->direction & 0xf) { + this->spriteSettings.b.flipX = !(!(this->direction & 0x10) ^ 1); + } + + sub_080AEF88(this); + } else { + if (this->field_0x76.HALF.HI == 0) { + if (sub_0806FCB8(this, parent->x.HALF.HI, parent->y.HALF.HI, 1) == 0) { + this->field_0x76.HALF.HI = 1; + this->direction = GetFacingDirection(this, parent); + sub_080322E8(this); + sub_0806F69C(this); + } + } else { + this->direction = GetFacingDirection(this, parent); + sub_080322E8(this); + sub_0806F69C(this); + if (this->x.HALF.HI == parent->x.HALF.HI && this->y.HALF.HI == parent->y.HALF.HI) + this->field_0x76.HALF.HI = 0; + } + } + GetNextFrame(this); + } +} + +void sub_08032148(Entity* this) { + if (sub_08003FC4(this, 0x2000)) + return; + + sub_08032290(this); +} + +void sub_08032160(Entity* this) { + Entity* tmp; + u32 dir; + + if (this->actionDelay == 0) { + this->action = 7; + dir = gUnk_080CE5FA[this->field_0x74.HALF.LO * 5 + this->entityType.parameter]; + this->direction = dir; + if (dir >= 0x10) { + this->spriteSettings.b.flipX = 1; + } else { + this->spriteSettings.b.flipX = 0; + } + this->nonPlanarMovement = 0xf0; + this->field_0x20 = 0x12000; + this->spritePriority.b1 = 1; + InitializeAnimation(this, 12); + } + + if (this->attachedEntity == NULL) { + for (tmp = this->parent; tmp != NULL; tmp = tmp->parent) { + if (tmp->currentHealth != 0) + tmp->actionDelay = 0; + } + this->actionDelay = 0; + } +} + +void sub_080321E8(Entity* this) { + sub_080AEFE0(this); + + if (sub_080044EC(this, 0x2000) == 0) + this->action = 8; +} + +void sub_08032204(Entity* this) { + GetNextFrame(this); + if (this->frames.all & 1) { + this->frames.all = 0; + this->frameDuration = (Random() & 0x30) + 30; + } else { + if (this->frames.all & 0x80) { + this->action = 9; + InitializeAnimation(this, 13); + } + } +} + +void sub_08032248(Entity* this) { + if (sub_08003FC4(this, 0x1800) == 0) { + if (this->frames.all & 0x80) { + ((Entity*)this->field_0x7c.WORD)->actionDelay--; + + DeleteEntity(this); + } else { + GetNextFrame(this); + + if ((this->frames.all & 0xf) == 2) + this->flags &= 0x7f; + } + } +} + +void sub_08032290(Entity* this) { + this->action = 6; + this->actionDelay = 12; + InitializeAnimation(this, 11); +} + +u32 sub_080322A4(Entity* this) { + if (this->attachedEntity != NULL && (this->attachedEntity->height.HALF.HI + 8) >= this->height.HALF.HI) { + if (this->height.HALF.HI) { + this->action = 5; + this->height.HALF.HI = this->attachedEntity->height.HALF.HI + 8; + InitializeAnimation(this, 11); + return 1; + } else { + sub_08032290(this); + return 1; + } + } + return 0; +} + +#if NON_MATCHING +void sub_080322E8(Entity* this) { + if (this->field_0x78.HALF.LO) { + if (--this->field_0x78.HALF.LO == 0) { + this->spriteSettings.b.flipX = this->spriteOrientation.flipX; + } + } else { + if ((this->direction & 0xf) && + ((this->direction >> 4 ^ 1) != -((int)((u32)this->spriteSettings.raw << 0x19) >> 0x1f))) { + this->field_0x78.HALF.LO = 6; + } + } +} +#else +NAKED +void sub_080322E8(Entity* this) { + asm(".include \"asm/non_matching/acroBandits/sub_080322E8.inc\""); +} +#endif + +void sub_08032338(Entity *this) { + if ((((Entity*)this->field_0x7c.WORD)->actionDelay += 15) != 80) + this->field_0x6c.HALF.LO = 0; +} diff --git a/src/enemy/bladeTrap.c b/src/enemy/bladeTrap.c index 3c37d08a..7f77861c 100644 --- a/src/enemy/bladeTrap.c +++ b/src/enemy/bladeTrap.c @@ -22,7 +22,7 @@ void BladeTrap(Entity* ent) { - puVar3 = &(ent->field_0x74); + puVar3 = &(ent->field_0x74.HWORD); uVar1 = *puVar3; *puVar3 = uVar1 - 1; if ((*puVar3) == 0) { diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c index b30c65df..94c2ab33 100644 --- a/src/enemy/keaton.c +++ b/src/enemy/keaton.c @@ -104,7 +104,7 @@ void sub_080324FC(Entity* this) { if (this->field_0xf == 0) { this->action = 4; this->nonPlanarMovement = 0x1E0; - this->field_0x76 = 0x46; + this->field_0x76.HWORD = 0x46; this->field_0x78.HWORD = 0; *(((u8*)&this->field_0x7a) + 1) = 0; sub_080327C8(this); @@ -121,13 +121,13 @@ void sub_08032574(Entity* this) { return; } - if (--this->field_0x76 == 0 || !sub_080AEFE0(this)) { + if (--this->field_0x76.HWORD == 0 || !sub_080AEFE0(this)) { sub_0803275C(this); return; } UpdateAnimationSingleFrame(this); - if ((this->field_0x76 & 0x7) == 0) { + if ((this->field_0x76.HWORD & 0x7) == 0) { sub_08032794(this); } } @@ -184,12 +184,12 @@ void sub_0803269C(Entity* this, u32 param_2) { } void sub_080326FC(Entity* this) { - this->field_0x74 = gUnk_080CE7F0[Random() & 0xF]; + this->field_0x74.HWORD = gUnk_080CE7F0[Random() & 0xF]; } u32 sub_0803271C(Entity* this) { - this->field_0x74--; - if (this->field_0x74 == 0) { + this->field_0x74.HWORD--; + if (this->field_0x74.HWORD == 0) { sub_08032784(this); return 1; } diff --git a/src/enemy/keese.c b/src/enemy/keese.c index 980237ef..0083bbf3 100644 --- a/src/enemy/keese.c +++ b/src/enemy/keese.c @@ -85,8 +85,8 @@ void sub_08021E4C(Entity *this) if (this->field_0x78.HWORD != 0) { this->field_0x78.HWORD--; } - if (this->field_0x7a != 0) { - (this->field_0x7a)--; + if (this->field_0x7a.HWORD != 0) { + (this->field_0x7a.HWORD)--; } GetNextFrame(this); if ((this->frames.b.f3) != 0) { @@ -126,7 +126,7 @@ void sub_08021EF0(Entity *this) this->action = 1; this->field_0x78.HWORD = gUnk_080CB6D6[Random() & 0xf]; - this->field_0x7a = 0x3c; + this->field_0x7a.HWORD = 0x3c; InitializeAnimation(this, 0); } @@ -139,7 +139,7 @@ void sub_08021F24(Entity *this) this->actionDelay = gUnk_080CB6F6[Random() & 0xf]; InitializeAnimation(this, 1); } - else if (!this->field_0x7a && !(sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x70))) { + else if (!this->field_0x7a.HWORD && !(sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x70))) { this->action = 3; this->actionDelay = 0x1e; InitializeAnimation(this, 1); diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index a6d32f1c..038f7ff7 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -161,8 +161,8 @@ void sub_0803C87C(Entity *this) { this->spriteOffsetY = 0xff; - this->field_0x74 = this->x.HALF.HI; - this->field_0x76 = this->y.HALF.HI; + this->field_0x74.HWORD = this->x.HALF.HI; + this->field_0x76.HWORD = this->y.HALF.HI; } void sub_0803C8BC(Entity *this) { @@ -294,8 +294,8 @@ void sub_0803CA84(Entity *this, u32 unkParameter) { } void sub_0803CAD0(Entity *this) { - if (sub_0806FCB8(this, this->field_0x74, this->field_0x76, 1) == 0) { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74, this->field_0x76); + if (sub_0806FCB8(this, this->field_0x74.HWORD, this->field_0x76.HWORD, 1) == 0) { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74.HWORD, this->field_0x76.HWORD); sub_080AEFE0(this); } diff --git a/src/enemy/lakituCloud.c b/src/enemy/lakituCloud.c index 241c8f68..c15d1682 100644 --- a/src/enemy/lakituCloud.c +++ b/src/enemy/lakituCloud.c @@ -78,7 +78,7 @@ void sub_0803CD6C(Entity *this) { this->parent = lakitu; this->field_0x78.HWORD = this->x.HALF.HI; - this->field_0x7a = this->y.HALF.HI; + this->field_0x7a.HWORD = this->y.HALF.HI; InitAnimationForceUpdate(this, 4); @@ -92,7 +92,7 @@ void sub_0803CDA8(Entity *this) { sub_0806F69C(this); } - if (--this->field_0x74 << 0x10 == 0) { + if (--this->field_0x74.HWORD << 0x10 == 0) { sub_0803CE14(this); } } @@ -119,7 +119,7 @@ void sub_0803CDD8(Entity *this) { void sub_0803CE14(Entity *this) { u8 direction; - sub_080A2CC0(this, &this->attachedEntity, &this->field_0x74); + sub_080A2CC0(this, &this->attachedEntity, &this->field_0x74.HWORD); direction = this->direction; if (direction & 0x80) { @@ -142,7 +142,7 @@ void sub_0803CE3C(Entity *this) { this->field_0x3a &= 0xfb; this->x.HALF.HI = this->field_0x78.HWORD; - this->y.HALF.HI = this->field_0x7a; + this->y.HALF.HI = this->field_0x7a.HWORD; this->attachedEntity = this->parent; diff --git a/src/enemy/leever.c b/src/enemy/leever.c index 93db5f00..5c06ce5f 100644 --- a/src/enemy/leever.c +++ b/src/enemy/leever.c @@ -34,7 +34,7 @@ void sub_0801FC28(Entity* this) { void sub_0801FC40(Entity* this) { if (this->bitfield == 0x80) { if (this->action == 3) { - this->field_0x74 = 1; + this->field_0x74.HWORD = 1; } } else { if (this->field_0x43 != 0) { @@ -79,9 +79,9 @@ void sub_0801FD2C(Entity* this) { if (this->frames.b.f3 != 0) { this->action = 3; if (this->entityType.form == 0) { - this->field_0x74 = 0xb4; + this->field_0x74.HWORD = 0xb4; } else { - this->field_0x74 = 0x6e; + this->field_0x74.HWORD = 0x6e; } InitializeAnimation(this, 2); } else if (this->frames.b.f0 != 0) { @@ -95,7 +95,7 @@ void sub_0801FD80(Entity* this) { sub_0801FED4(this); GetNextFrame(this); - if (--this->field_0x74 == 0) { + if (--this->field_0x74.HWORD == 0) { this->action = 4; this->flags &= 0x7f; InitializeAnimation(this, 1); @@ -161,7 +161,7 @@ void sub_0801FED4(Entity* this) { s16 sVar2; if (sub_08049FDC(this, 1) == 0) { - this->field_0x74 = 1; + this->field_0x74.HWORD = 1; } sVar2 = (this->frames.all & 0xf) * 0x20; this->nonPlanarMovement = sVar2; diff --git a/src/npc/zelda.c b/src/npc/zelda.c index 4516b40e..03764a5e 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -90,7 +90,7 @@ void sub_08066D94(Entity* ent) { npc->flags |= 0x20; npc->animationState = GetAnimationState(ent); roomID = gRoomControls.roomID; - npc->field_0x74 = roomID; + npc->field_0x74.HWORD = roomID; CopyPosition(ent, npc); } DeleteThisEntity(); diff --git a/src/object/fan.c b/src/object/fan.c index 481e3887..c73cec9b 100644 --- a/src/object/fan.c +++ b/src/object/fan.c @@ -31,7 +31,7 @@ void sub_0809ED54(Entity *this) if (((this->cutsceneBeh.HWORD == 0) || CheckFlags(this->cutsceneBeh.HWORD)) && ((this->entityType.parameter != 1 || - (--this->field_0x74 == 0)))) { + (--this->field_0x74.HWORD == 0)))) { sub_0809EE08(this); } } @@ -52,7 +52,7 @@ void sub_0809ED88(Entity *this) sub_0809EE24(this); } else if (((this->entityType).parameter == 1) && - (--this->field_0x74 == 0)) { + (--this->field_0x74.HWORD == 0)) { sub_0809EE24(this); } } @@ -69,7 +69,7 @@ void sub_0809EDE4(Entity *this) void sub_0809EE08(Entity *this) { this->action = 2; - this->field_0x74 = *((u8 *)&this->field_0x7c + 3) << 2; + this->field_0x74.HWORD = *((u8 *)&this->field_0x7c + 3) << 2; InitializeAnimation(this, this->entityType.form); } @@ -82,5 +82,5 @@ void sub_0809EE24(Entity *this) void sub_0809EE34(Entity *this) { this->action = 1; - this->field_0x74 = this->actionDelay << 2; + this->field_0x74.HWORD = this->actionDelay << 2; } \ No newline at end of file diff --git a/src/object/lightableSwitch.c b/src/object/lightableSwitch.c index 2368da04..e9a1e8e0 100644 --- a/src/object/lightableSwitch.c +++ b/src/object/lightableSwitch.c @@ -73,7 +73,7 @@ void sub_0809EAD8(Entity* this) { if (this->entityType.parameter != 0) { this->attachedEntity = GetCurrentRoomProperty(this->entityType.parameter); - sub_080A2CC0(this, &this->attachedEntity, &this->field_0x74); + sub_080A2CC0(this, &this->attachedEntity, &this->field_0x74.HWORD); } else { SetTile(0x4050, COORD_TO_TILE(this), this->collisionLayer); @@ -88,7 +88,7 @@ void sub_0809EB30(Entity* this) { if ((this->direction & 0x80) == 0) { sub_0806F69C(this); } - puVar2 = &this->field_0x74; + puVar2 = &this->field_0x74.HWORD; if (!--*puVar2) { sub_080A2CC0(this, &this->attachedEntity, puVar2); } diff --git a/src/object/mask.c b/src/object/mask.c index dfabc160..675805b8 100644 --- a/src/object/mask.c +++ b/src/object/mask.c @@ -68,7 +68,7 @@ void sub_080929A4(Entity *this) { this->field_0x7c.HALF.HI = COORD_TO_TILE(this); this->field_0x7c.HALF.LO = sub_080001DA(this->field_0x7c.HALF.HI, 1); - this->field_0x7a = sub_080002E0(this->field_0x7c.HALF.HI, 1); + this->field_0x7a.HWORD = sub_080002E0(this->field_0x7c.HALF.HI, 1); SetTile(0x4022, this->field_0x7c.HALF.HI, 1); } @@ -96,7 +96,7 @@ void sub_08092A94(Entity *this) { // Presumably, make the mask fall SetTile((u16)this->field_0x7c.HALF.LO, this->field_0x7c.HALF.HI, 1); - sub_08000148(this->field_0x7a, this->field_0x7c.HALF.HI, 1); + sub_08000148(this->field_0x7a.HWORD, this->field_0x7c.HALF.HI, 1); this->action = 2; diff --git a/src/object/metalDoor.c b/src/object/metalDoor.c index 1f18a272..381bf0d8 100644 --- a/src/object/metalDoor.c +++ b/src/object/metalDoor.c @@ -34,7 +34,7 @@ void sub_080A0684(Entity *this) this->spritePriority.b0 = 5; this->field_0x70.HALF.LO = this->x.HALF.HI; this->field_0x70.HALF.HI = this->y.HALF.HI; - this->field_0x74 = COORD_TO_TILE(this); + this->field_0x74.HWORD = COORD_TO_TILE(this); } void sub_080A0718(Entity *this) @@ -99,17 +99,17 @@ void sub_080A07F0(Entity *this) void sub_080A080C(Entity *this) { - this->field_0x76 = sub_080001DA(this->field_0x74 - 1, this->collisionLayer); - this->field_0x78.HWORD = sub_080001DA(this->field_0x74, this->collisionLayer); - this->field_0x7a = sub_080001DA(this->field_0x74 + 1, this->collisionLayer); - SetTile(0x4022, this->field_0x74 - 1, this->collisionLayer); - SetTile(0x4022, this->field_0x74, this->collisionLayer); - SetTile(0x4022, this->field_0x74 + 1, this->collisionLayer); + this->field_0x76.HWORD = sub_080001DA(this->field_0x74.HWORD - 1, this->collisionLayer); + this->field_0x78.HWORD = sub_080001DA(this->field_0x74.HWORD, this->collisionLayer); + this->field_0x7a.HWORD = sub_080001DA(this->field_0x74.HWORD + 1, this->collisionLayer); + SetTile(0x4022, this->field_0x74.HWORD - 1, this->collisionLayer); + SetTile(0x4022, this->field_0x74.HWORD, this->collisionLayer); + SetTile(0x4022, this->field_0x74.HWORD + 1, this->collisionLayer); } void sub_080A0870(Entity *this) { - SetTile(this->field_0x76, this->field_0x74 - 1, this->collisionLayer); - SetTile(this->field_0x78.HWORD, this->field_0x74, this->collisionLayer); - SetTile(this->field_0x7a, this->field_0x74 + 1, this->collisionLayer); + SetTile(this->field_0x76.HWORD, this->field_0x74.HWORD - 1, this->collisionLayer); + SetTile(this->field_0x78.HWORD, this->field_0x74.HWORD, this->collisionLayer); + SetTile(this->field_0x7a.HWORD, this->field_0x74.HWORD + 1, this->collisionLayer); } \ No newline at end of file diff --git a/src/object/railtrack.c b/src/object/railtrack.c index f2e9a10a..05b8a2aa 100644 --- a/src/object/railtrack.c +++ b/src/object/railtrack.c @@ -33,7 +33,7 @@ void sub_080851AC(Entity* this) { this->animationState = this->entityType.parameter & 2; if ((this->entityType).form == 3) { uVar1 = CheckFlags(this->field_0x86); - this->field_0x7a = uVar1; + this->field_0x7a.HWORD = uVar1; if ((u16)(uVar1 & -1) != 0) { this->animationState = (this->animationState + 2) & 3; this->action = 3; @@ -62,7 +62,7 @@ void sub_080852B4(Entity* this) { if (--this->field_0xf == 0) { this->action = 3; this->field_0xf = this->actionDelay; - this->field_0x7a = CheckFlags(this->field_0x86); + this->field_0x7a.HWORD = CheckFlags(this->field_0x86); this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3; InitializeAnimation(this, this->animationState); sub_08085394(this); @@ -114,7 +114,7 @@ void sub_08085394(Entity *this) iVar3 = this->animationState / 2; layerData = *(u16 **)&this->field_0x70; uVar4 = COORD_TO_TILE(this); - this->field_0x74 = layerData[gUnk_080B4488[iVar3]]; + this->field_0x74.HWORD = layerData[gUnk_080B4488[iVar3]]; pbVar5 = &this->collisionLayer; SetTile(uVar1, uVar4 - iVar3, *pbVar5); this->field_0x76 = layerData[0]; @@ -137,8 +137,8 @@ void sub_0808543C(Entity *this) temp = gUnk_080B4488[this->animationState / 2][0]; uVar2 = COORD_TO_TILE(this); - SetTile(this->field_0x74, uVar2 - temp, this->collisionLayer); - SetTile(this->field_0x76, uVar2, this->collisionLayer); + SetTile(this->field_0x74.HWORD, uVar2 - temp, this->collisionLayer); + SetTile(this->field_0x76.HWORD, uVar2, this->collisionLayer); SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer); } From eed9d1fe6bb80a1c50f30974ba906ad97ba657d3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 17 Aug 2020 18:55:37 -0500 Subject: [PATCH 6/7] Decompile more chooseFile.c --- asm/chooseFile.s | 292 ------------------------------------------- include/structures.h | 10 +- src/chooseFile.c | 146 +++++++++++++++++++++- 3 files changed, 151 insertions(+), 297 deletions(-) diff --git a/asm/chooseFile.s b/asm/chooseFile.s index 3acaceed..d23c0314 100755 --- a/asm/chooseFile.s +++ b/asm/chooseFile.s @@ -5,298 +5,6 @@ .text - thumb_func_start sub_0805070C -sub_0805070C: @ 0x0805070C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - bl sub_0805F2C8 - adds r5, r0, #0 - cmp r5, #0 - beq _0805077A - movs r0, #0 - strb r0, [r5, #2] - movs r0, #5 - strb r0, [r5, #3] - movs r0, #1 - strb r0, [r5, #1] - movs r0, #0x30 - strh r0, [r5, #4] - ldr r0, _08050780 @ =gUnk_02000D00 - str r0, [r5, #8] - movs r6, #0 -_08050732: - movs r0, #0 - strh r0, [r5, #6] - ldr r0, [r5, #8] - movs r1, #0x80 - lsls r1, r1, #2 - bl _DmaZero - ldr r0, _08050784 @ =0x000004B4 - adds r1, r6, #0 - muls r1, r0, r1 - ldr r0, _08050788 @ =gUnk_02019F6C - adds r7, r1, r0 - movs r4, #0 - lsls r0, r6, #9 - mov r8, r0 - adds r6, #1 -_08050752: - adds r0, r7, r4 - ldrb r0, [r0] - adds r1, r5, #0 - bl sub_0805F7DC - adds r4, #1 - cmp r4, #5 - ble _08050752 - ldr r0, [r5, #8] - ldr r1, _0805078C @ =0x06014000 - add r1, r8 - movs r2, #0x80 - lsls r2, r2, #2 - bl sub_0801D66C - cmp r6, #2 - bls _08050732 - adds r0, r5, #0 - bl sub_0805F300 -_0805077A: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08050780: .4byte gUnk_02000D00 -_08050784: .4byte 0x000004B4 -_08050788: .4byte gUnk_02019F6C -_0805078C: .4byte 0x06014000 - - thumb_func_start sub_08050790 -sub_08050790: @ 0x08050790 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - bl sub_0805F2C8 - adds r6, r0, #0 - cmp r6, #0 - beq _080507F0 - movs r0, #0 - strb r0, [r6, #2] - movs r0, #5 - strb r0, [r6, #3] - movs r0, #1 - strb r0, [r6, #1] - movs r0, #0x80 - strh r0, [r6, #4] - ldr r0, _080507F8 @ =gUnk_02000D00 - str r0, [r6, #8] - movs r1, #0 -_080507B6: - movs r0, #0 - strh r0, [r6, #6] - lsls r4, r1, #4 - movs r5, #0 - lsls r7, r1, #0xa - adds r1, #1 - mov r8, r1 -_080507C4: - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_0805F7DC - adds r4, #1 - adds r5, #1 - cmp r5, #0xf - bls _080507C4 - movs r0, #0xc0 - lsls r0, r0, #0x13 - adds r1, r7, r0 - ldr r0, _080507F8 @ =gUnk_02000D00 - movs r2, #0x80 - lsls r2, r2, #3 - bl sub_0801D66C - mov r1, r8 - cmp r1, #0xf - bls _080507B6 - adds r0, r6, #0 - bl sub_0805F300 -_080507F0: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080507F8: .4byte gUnk_02000D00 - - thumb_func_start sub_080507FC -sub_080507FC: @ 0x080507FC - ldr r0, _0805080C @ =gUnk_0200AF00 - movs r1, #0xa0 - lsls r1, r1, #1 - strh r1, [r0, #0x1a] - movs r1, #0x24 - strh r1, [r0, #0x20] - bx lr - .align 2, 0 -_0805080C: .4byte gUnk_0200AF00 - - thumb_func_start sub_08050810 -sub_08050810: @ 0x08050810 - ldr r0, _0805081C @ =gUnk_0200AF00 - movs r1, #0xd0 - strh r1, [r0, #0x1a] - movs r1, #0x24 - strh r1, [r0, #0x20] - bx lr - .align 2, 0 -_0805081C: .4byte gUnk_0200AF00 - - thumb_func_start sub_08050820 -sub_08050820: @ 0x08050820 - push {lr} - ldr r1, _0805083C @ =gUnk_080FC8FC - ldr r0, _08050840 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _08050844 @ =gUnk_02019EE0 - ldrb r0, [r0, #6] - bl sub_08050A64 - pop {pc} - .align 2, 0 -_0805083C: .4byte gUnk_080FC8FC -_08050840: .4byte gMenu -_08050844: .4byte gUnk_02019EE0 - - thumb_func_start sub_08050848 -sub_08050848: @ 0x08050848 - push {lr} - movs r0, #7 - bl sub_080503A8 - bl sub_0805070C - ldr r0, _08050868 @ =gUnk_02019EE0 - movs r1, #0 - strb r1, [r0, #7] - ldrb r0, [r0, #6] - bl sub_08050AFC - movs r0, #1 - bl sub_080A7114 - pop {pc} - .align 2, 0 -_08050868: .4byte gUnk_02019EE0 - - thumb_func_start sub_0805086C -sub_0805086C: @ 0x0805086C - push {lr} - ldr r1, _08050880 @ =gUnk_080FC908 - ldr r0, _08050884 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08050880: .4byte gUnk_080FC908 -_08050884: .4byte gMenu - - thumb_func_start sub_08050888 -sub_08050888: @ 0x08050888 - push {r4, lr} - ldr r0, _080508C4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080508DC - ldr r4, _080508C8 @ =gUnk_02019EE0 - ldrb r1, [r4, #7] - adds r0, r4, #0 - adds r0, #8 - adds r0, r1, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _080508D0 - cmp r0, #1 - beq _080508D6 - adds r0, r1, #0 - bl sub_0805194C - ldrb r1, [r4, #7] - adds r1, #1 - movs r0, #0 - bl sub_08050318 - ldr r1, _080508CC @ =gMenu - movs r0, #0x1e - strh r0, [r1, #8] - movs r0, #1 - b _080508DA - .align 2, 0 -_080508C4: .4byte gFadeControl -_080508C8: .4byte gUnk_02019EE0 -_080508CC: .4byte gMenu -_080508D0: - adds r0, r1, #0 - bl sub_0805194C -_080508D6: - ldr r1, _080508E0 @ =gMenu - movs r0, #2 -_080508DA: - strb r0, [r1, #6] -_080508DC: - pop {r4, pc} - .align 2, 0 -_080508E0: .4byte gMenu - - thumb_func_start sub_080508E4 -sub_080508E4: @ 0x080508E4 - push {lr} - ldr r2, _08050900 @ =gMenu - ldrh r0, [r2, #8] - cmp r0, #0 - bne _08050908 - ldr r0, _08050904 @ =gUnk_03000FF0 - ldrh r1, [r0, #2] - movs r0, #9 - ands r0, r1 - cmp r0, #0 - beq _0805090C - movs r0, #2 - strb r0, [r2, #6] - b _0805090C - .align 2, 0 -_08050900: .4byte gMenu -_08050904: .4byte gUnk_03000FF0 -_08050908: - subs r0, #1 - strh r0, [r2, #8] -_0805090C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08050910 -sub_08050910: @ 0x08050910 - push {lr} - bl sub_08050384 - ldr r1, _08050930 @ =gUnk_02019EE0 - ldrb r0, [r1, #7] - adds r0, #1 - strb r0, [r1, #7] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bls _08050934 - movs r0, #2 - bl sub_080A7114 - b _0805093A - .align 2, 0 -_08050930: .4byte gUnk_02019EE0 -_08050934: - ldr r1, _0805093C @ =gMenu - movs r0, #0 - strb r0, [r1, #6] -_0805093A: - pop {pc} - .align 2, 0 -_0805093C: .4byte gMenu - thumb_func_start sub_08050940 sub_08050940: @ 0x08050940 push {r4, r5, r6, lr} diff --git a/include/structures.h b/include/structures.h index 32ae8d74..bc07b4e8 100644 --- a/include/structures.h +++ b/include/structures.h @@ -45,7 +45,9 @@ typedef struct { /*0x040*/ u32 windcrests; /*0x044*/ u8 filler44[0xC]; /*0x050*/ u32 unk50; - /*0x054*/ u8 filler54[0x54]; + /*0x054*/ u8 filler54[0x2C]; + /*0x080*/ u8 playerName[6]; + /*0x086*/ u8 filler86[0x22]; /*0x0A8*/ Stats stats; /*0x0D0*/ u8 fillerD0[0x3c0]; /*0x490*/ u32 unk490; @@ -134,7 +136,11 @@ typedef struct { extern struct_03000FD0 gFadeControl; typedef struct { - u8 unk0[0x24]; + u8 filler0[0x1A]; + u16 unk1A; + u8 filler1C[0x4]; + u16 unk20; + u8 filler22[0x2]; u8 ezloNagFuncIndex; u8 filler25[0x30F]; } struct_0200AF00; diff --git a/src/chooseFile.c b/src/chooseFile.c index 6df4fec6..256e0da5 100755 --- a/src/chooseFile.c +++ b/src/chooseFile.c @@ -1,15 +1,30 @@ #include "global.h" #include "functions.h" #include "main.h" +#include "readKeyInput.h" #include "screen.h" typedef struct { - u8 filler0[0x30]; + u8 filler0[0x5]; + u8 state; + u8 subState; + u16 timer; + u8 fillerA[0x26]; } ChooseFileState; // TODO: This occupies the same memory region as gMenu extern ChooseFileState gChooseFileState; +typedef struct { + u8 filler0[0x1]; + u8 unk1; + u8 unk2; + u8 unk3; + u16 unk4; + u16 unk6; + u8* unk8; +} struct_02036540; + typedef struct { u8 filler0[0x10]; u16 unk10; @@ -30,24 +45,31 @@ extern struct_02034CB0 gUnk_02034CB0; extern struct_02034CB0 gUnk_02021F30; extern SaveFile gSaveFiles[]; extern u32 gUsedPalettes; +extern u8 gUnk_02000D00[]; static void sub_08050624(u32); static void sub_0805066C(void); +static void sub_080507FC(void); extern void sub_0801D66C(const void* src, void* dest, u32 size); extern void sub_08056FEC(u32, struct_020227E8*); extern void sub_0805F46C(u32, struct_080FC844*); extern void sub_0801C4A0(u32, u32); -extern void sub_0801D66C(const void* src, void* dest, u32 size); -extern void sub_080507FC(void); extern void sub_08080668(void); extern void sub_0805194C(u32); extern void LoadPalettes(const u8*, int, int); +extern struct_02036540* sub_0805F2C8(void); +extern void sub_0805F7DC(u32, struct_02036540*); +extern void sub_0805F300(struct_02036540*); +extern void sub_08050A64(u32); +extern void sub_08050AFC(u32); extern const struct_080FC844 gUnk_080FC844; extern const u16 gUnk_080FC85C[][3]; extern void (*const gUnk_080FC8A4[])(void); extern void (*const gUnk_080FC8B0[])(void); +extern void (*const gUnk_080FC8FC[])(void); +extern void (*const gUnk_080FC908[])(void); extern const u8 gUnk_080FC8D0[]; extern const u16 gUnk_080FC8DE[]; extern const u8 gGlobalGfxAndPalettes[]; @@ -234,3 +256,121 @@ static void sub_0805066C(void) { LoadPalettes(&paletteOffset[0x11DA0], 14, 1); } } + +void sub_0805070C(void) { + u32 i; + int j; + struct_02036540* var0; + u8* playerName; + + var0 = sub_0805F2C8(); + if (var0) { + var0->unk2 = 0; + var0->unk3 = 5; + var0->unk1 = 1; + var0->unk4 = 0x30; + var0->unk8 = gUnk_02000D00; + for (i = 0; i < 3; i++) { + var0->unk6 = 0; + _DmaZero(var0->unk8, 0x200); + playerName = gSaveFiles[i].playerName; + for (j = 0; j < 6; j++) { + sub_0805F7DC(playerName[j], var0); + } + sub_0801D66C(var0->unk8, (void*)(OBJ_VRAM0 + 0x4000 + i * 0x200), 0x200); + } + sub_0805F300(var0); + } + +} + +void sub_08050790(void) { + u32 i, j; + struct_02036540* var0; + u32 var1; + + var0 = sub_0805F2C8(); + if (var0) { + var0->unk2 = 0; + var0->unk3 = 5; + var0->unk1 = 1; + var0->unk4 = 0x80; + var0->unk8 = gUnk_02000D00; + for (i = 0; i < 16; i++) { + var0->unk6 = 0; + var1 = i * 16; + for (j = 0; j < 16; j++) { + sub_0805F7DC(var1, var0); + var1++; + } + sub_0801D66C(gUnk_02000D00, (void*)(BG_VRAM + i * 0x400), 0x400); + } + sub_0805F300(var0); + } +} + +static void sub_080507FC(void) { + gUnk_0200AF00.unk1A = 0x140; + gUnk_0200AF00.unk20 = 0x24; +} + +void sub_08050810(void) { + gUnk_0200AF00.unk1A = 0xD0; + gUnk_0200AF00.unk20 = 0x24; +} + +void sub_08050820(void) { + gUnk_080FC8FC[gChooseFileState.state](); + sub_08050A64(gUnk_02019EE0.unk6); +} + +void sub_08050848(void) { + sub_080503A8(0x7); + sub_0805070C(); + gUnk_02019EE0.unk7 = 0; + sub_08050AFC(gUnk_02019EE0.unk6); + sub_080A7114(1); +} + +void sub_0805086C(void) { + gUnk_080FC908[gChooseFileState.subState](); +} + +void sub_08050888(void) { + if (!gFadeControl.active) { + switch (gUnk_02019EE0.unk8[gUnk_02019EE0.unk7]) { + case 0: + sub_0805194C(gUnk_02019EE0.unk7); + gChooseFileState.subState = 2; + break; + case 1: + gChooseFileState.subState = 2; + break; + default: + sub_0805194C(gUnk_02019EE0.unk7); + sub_08050318(0, gUnk_02019EE0.unk7 + 1); + gChooseFileState.timer = 30; + gChooseFileState.subState = 1; + break; + } + } +} + +void sub_080508E4(void) { + if (gChooseFileState.timer == 0) { + if (gUnk_03000FF0.newKeys & (A_BUTTON | START_BUTTON)) { + gChooseFileState.subState = 2; + } + } else { + gChooseFileState.timer--; + } +} + +void sub_08050910(void) { + sub_08050384(); + if (++gUnk_02019EE0.unk7 > 2) { + sub_080A7114(2); + } else { + gChooseFileState.subState = 0; + } +} From 624dfdb282a7c3dead17da04b5b527e0cc8cc85a Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 17 Aug 2020 21:38:36 -0700 Subject: [PATCH 7/7] function collision --- src/enemy/acroBandits.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c index da3b7923..b183b93f 100644 --- a/src/enemy/acroBandits.c +++ b/src/enemy/acroBandits.c @@ -13,7 +13,6 @@ extern u32 sub_080322A4(Entity*); void sub_080322E8(Entity*); extern void sub_08032338(Entity*); extern Entity* sub_08049DF4(u32); -extern u8 sub_08049F84(Entity*, u32); extern void sub_0804A9FC(Entity*, u32); extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*)); extern u32 sub_0806FCB8(Entity*, u32, u32, u32);