From f3f7b518cbb96f95ce3e111ea13d4a9f8ca9682e Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 15 Jun 2020 13:57:09 -0700 Subject: [PATCH] bladeBrothers.c OK --- asm/bladeBrothers.s | 204 ------------------------------------------ asm/code_08000F10.s | 4 +- asm/code_08016DF8.s | 2 +- asm/code_0801C85C.s | 4 +- asm/code_0801D79C.s | 4 +- asm/code_080526F8.s | 2 +- asm/code_0807CAA0.s | 2 +- asm/code_0807CC3C.s | 14 +-- asm/code_080A3BD0.s | 2 +- asm/figurineDevice.s | 4 +- asm/object6A.s | 2 +- asm/pinwheel.s | 2 +- asm/sittingPerson.s | 2 +- asm/whirlwind.s | 2 +- include/link.h | 2 +- include/room.h | 19 ++-- linker.ld | 2 +- src/bladeBrothers.c | 118 ++++++++++++++++++++++++ src/flags.c | 15 ++++ src/getProgressFlag.c | 7 -- 20 files changed, 163 insertions(+), 250 deletions(-) create mode 100644 src/flags.c delete mode 100644 src/getProgressFlag.c diff --git a/asm/bladeBrothers.s b/asm/bladeBrothers.s index 2af68092..449120eb 100644 --- a/asm/bladeBrothers.s +++ b/asm/bladeBrothers.s @@ -6,210 +6,6 @@ .text - thumb_func_start sub_08068B84 -sub_08068B84: @ 0x08068B84 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08068BAC @ =gUnk_08111618 - ldrb r0, [r4, #0xe] - adds r0, r0, r1 - ldrb r0, [r0] - cmp r0, #0 - beq _08068B9A - movs r1, #0 - bl ForceEquipItem -_08068B9A: - ldr r0, _08068BB0 @ =gUnk_081115EC - ldrb r1, [r4, #0xe] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - bl sub_0805ED14 - pop {r4, pc} - .align 2, 0 -_08068BAC: .4byte gUnk_08111618 -_08068BB0: .4byte gUnk_081115EC - - thumb_func_start sub_08068BB4 -sub_08068BB4: @ 0x08068BB4 - ldr r2, _08068BCC @ =gUnk_02002A40 - adds r1, r2, #0 - adds r1, #0xb4 - ldrb r1, [r1] - adds r3, r0, #0 - adds r3, #0x69 - strb r1, [r3] - adds r2, #0xb5 - ldrb r1, [r2] - adds r0, #0x6a - strb r1, [r0] - bx lr - .align 2, 0 -_08068BCC: .4byte gUnk_02002A40 - - thumb_func_start sub_08068BD0 -sub_08068BD0: @ 0x08068BD0 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x69 - ldrb r0, [r0] - movs r1, #0 - bl ForceEquipItem - adds r4, #0x6a - ldrb r0, [r4] - movs r1, #1 - bl ForceEquipItem - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08068BEC -sub_08068BEC: @ 0x08068BEC - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x44 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _08068C22 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r3] - ldr r3, _08068C24 @ =0xFFF00000 - adds r0, r4, #0 - adds r1, r2, #0 - movs r2, #0 - bl PositionRelative - movs r0, #0xfa - bl PlaySFX -_08068C22: - pop {r4, pc} - .align 2, 0 -_08068C24: .4byte 0xFFF00000 - - thumb_func_start sub_08068C28 -sub_08068C28: @ 0x08068C28 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08068C54 @ =gUnk_08111623 - ldrb r1, [r4, #0xa] - adds r1, r1, r0 - ldrb r0, [r1] - strb r0, [r4, #0xe] - ldrb r5, [r4, #0xa] - cmp r5, #1 - bne _08068C6A - movs r0, #0x48 - bl GetInventoryValue - cmp r0, #0 - beq _08068C6A - movs r0, #0x4b - bl GetInventoryValue - cmp r0, #0 - bne _08068C58 - strb r5, [r4, #0xe] - b _08068C6A - .align 2, 0 -_08068C54: .4byte gUnk_08111623 -_08068C58: - movs r0, #0x4a - bl GetInventoryValue - cmp r0, #0 - bne _08068C66 - movs r0, #2 - b _08068C68 -_08068C66: - movs r0, #3 -_08068C68: - strb r0, [r4, #0xe] -_08068C6A: - pop {r4, r5, pc} - - thumb_func_start sub_08068C6C -sub_08068C6C: @ 0x08068C6C - push {lr} - ldr r1, _08068C88 @ =gUnk_0811162B - ldrb r0, [r0, #0xe] - adds r0, r0, r1 - ldrb r0, [r0] - movs r1, #0x81 - rsbs r1, r1, #0 - ands r0, r1 - movs r1, #0 - movs r2, #0 - bl sub_080A7C18 - pop {pc} - .align 2, 0 -_08068C88: .4byte gUnk_0811162B - - thumb_func_start sub_08068C8C -sub_08068C8C: @ 0x08068C8C - ldr r2, _08068C9C @ =gUnk_08111638 - ldrb r0, [r0, #0xe] - lsls r0, r0, #2 - adds r0, r0, r2 - ldr r0, [r0] - str r0, [r1, #0x14] - bx lr - .align 2, 0 -_08068C9C: .4byte gUnk_08111638 - - thumb_func_start sub_08068CA0 -sub_08068CA0: @ 0x08068CA0 - push {r4, lr} - adds r4, r1, #0 - ldrb r1, [r0, #0xa] - cmp r1, #1 - bne _08068CDC - str r1, [r4, #0x14] - movs r0, #0x48 - bl GetInventoryValue - cmp r0, #0 - bne _08068CB8 - str r0, [r4, #0x14] -_08068CB8: - movs r0, #0x4b - bl GetInventoryValue - cmp r0, #0 - bne _08068CC4 - str r0, [r4, #0x14] -_08068CC4: - movs r0, #0x4a - bl GetInventoryValue - cmp r0, #0 - bne _08068CD0 - str r0, [r4, #0x14] -_08068CD0: - movs r0, #0x4e - bl GetInventoryValue - cmp r0, #0 - bne _08068CF6 - b _08068CF4 -_08068CDC: - ldr r1, _08068CF8 @ =gUnk_0811162B - ldrb r0, [r0, #0xe] - adds r0, r0, r1 - ldrb r0, [r0] - movs r1, #0x81 - rsbs r1, r1, #0 - ands r0, r1 - bl GetInventoryValue - cmp r0, #0 - beq _08068CF4 - movs r0, #1 -_08068CF4: - str r0, [r4, #0x14] -_08068CF6: - pop {r4, pc} - .align 2, 0 -_08068CF8: .4byte gUnk_0811162B - thumb_func_start sub_08068CFC sub_08068CFC: @ 0x08068CFC push {r4, lr} diff --git a/asm/code_08000F10.s b/asm/code_08000F10.s index a279cad6..335c75a1 100644 --- a/asm/code_08000F10.s +++ b/asm/code_08000F10.s @@ -5,8 +5,8 @@ .text - thumb_func_start sub_08000F10 -sub_08000F10: @ 0x08000F10 + thumb_func_start CheckBits +CheckBits: @ 0x08000F10 ldr r3, _08000F50 @ =gUnk_03005E60 bx r3 diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index b93e91a5..0258a3c9 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -946,7 +946,7 @@ sub_08017530: @ 0x08017530 beq _08017550 ldr r0, _080175D8 @ =gUnk_020342F8 subs r1, #1 - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 bne _08017550 bl DeleteThisEntity diff --git a/asm/code_0801C85C.s b/asm/code_0801C85C.s index f3b0f813..78250eb1 100644 --- a/asm/code_0801C85C.s +++ b/asm/code_0801C85C.s @@ -1803,8 +1803,8 @@ _0801D5A2: .align 2, 0 _0801D5A4: .4byte 0x99999999 - thumb_func_start sub_0801D5A8 -sub_0801D5A8: @ 0x0801D5A8 + thumb_func_start ReadBit +ReadBit: @ 0x0801D5A8 lsrs r2, r1, #3 adds r0, r0, r2 ldrb r0, [r0] diff --git a/asm/code_0801D79C.s b/asm/code_0801D79C.s index aadd1127..55670c4f 100644 --- a/asm/code_0801D79C.s +++ b/asm/code_0801D79C.s @@ -2204,7 +2204,7 @@ CheckKinstoneFused: @ 0x0801E7F4 cmp r0, #0x63 bhi _0801E80C ldr r0, _0801E808 @ =gUnk_02002C81 - bl sub_0801D5A8 + bl ReadBit b _0801E80E .align 2, 0 _0801E808: .4byte gUnk_02002C81 @@ -2221,7 +2221,7 @@ sub_0801E810: @ 0x0801E810 cmp r0, #0x63 bhi _0801E828 ldr r0, _0801E824 @ =gUnk_02002C8E - bl sub_0801D5A8 + bl ReadBit b _0801E82A .align 2, 0 _0801E824: .4byte gUnk_02002C8E diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s index 34e11b06..2d7d6d94 100644 --- a/asm/code_080526F8.s +++ b/asm/code_080526F8.s @@ -1394,7 +1394,7 @@ sub_08053178: @ 0x08053178 bne _080531DC ldr r0, _080531F4 @ =gUnk_02002AA0 ldrb r1, [r5, #1] - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 bne _080531DC movs r0, #1 diff --git a/asm/code_0807CAA0.s b/asm/code_0807CAA0.s index 8704b9ff..ba8681cf 100644 --- a/asm/code_0807CAA0.s +++ b/asm/code_0807CAA0.s @@ -72,7 +72,7 @@ CheckLocalFlagByOffset: @ 0x0807CB10 ldr r0, _0807CB20 @ =gGlobalFlags adds r2, r2, r1 adds r1, r2, #0 - bl sub_0801D5A8 + bl ReadBit pop {pc} .align 2, 0 _0807CB20: .4byte gGlobalFlags diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 7e85306b..85f36bd1 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -4,16 +4,6 @@ .syntax unified .text - - thumb_func_start CheckRoomFlag -CheckRoomFlag: @ 0x0807CC3C - push {lr} - adds r1, r0, #0 - ldr r0, _0807CC48 @ =gUnk_02034364 - bl sub_0801D5A8 - pop {pc} - .align 2, 0 -_0807CC48: .4byte gUnk_02034364 thumb_func_start CheckLocalFlagsByOffset CheckLocalFlagsByOffset: @ 0x0807CC4C @@ -22,7 +12,7 @@ CheckLocalFlagsByOffset: @ 0x0807CC4C ldr r0, _0807CC5C @ =gGlobalFlags adds r3, r3, r1 adds r1, r3, #0 - bl sub_08000F10 + bl CheckBits pop {pc} .align 2, 0 _0807CC5C: .4byte gGlobalFlags @@ -57,7 +47,7 @@ CheckRoomFlags: @ 0x0807CC88 adds r2, r1, #0 ldr r0, _0807CC98 @ =gUnk_02034364 adds r1, r3, #0 - bl sub_08000F10 + bl CheckBits pop {pc} .align 2, 0 _0807CC98: .4byte gUnk_02034364 diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s index a97a51ad..ca0d4828 100644 --- a/asm/code_080A3BD0.s +++ b/asm/code_080A3BD0.s @@ -1758,7 +1758,7 @@ _080A495A: _080A4962: adds r0, r3, #0 adds r0, #0xce - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 beq _080A4970 movs r4, #1 diff --git a/asm/figurineDevice.s b/asm/figurineDevice.s index cc17c5a3..7b102d02 100644 --- a/asm/figurineDevice.s +++ b/asm/figurineDevice.s @@ -1027,7 +1027,7 @@ _0808837C: beq _0808839C ldr r0, _08088398 @ =gUnk_02002B0E adds r1, r4, #0 - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 bne _0808839C movs r5, #1 @@ -1059,7 +1059,7 @@ _080883B6: beq _080883D8 ldr r0, _080883D4 @ =gUnk_02002B0E adds r1, r4, #0 - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 beq _080883D8 movs r5, #0 diff --git a/asm/object6A.s b/asm/object6A.s index f9105e1a..89d4825b 100644 --- a/asm/object6A.s +++ b/asm/object6A.s @@ -1844,7 +1844,7 @@ sub_0809584C: @ 0x0809584C beq _0809586C ldr r0, _080958D0 @ =gUnk_020342F8 subs r1, #1 - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 bne _0809586C bl DeleteThisEntity diff --git a/asm/pinwheel.s b/asm/pinwheel.s index d761c29d..35ddc17d 100644 --- a/asm/pinwheel.s +++ b/asm/pinwheel.s @@ -19,7 +19,7 @@ Pinwheel: @ 0x080A23A0 beq _080A23C0 ldr r0, _080A23D4 @ =gUnk_020342F8 subs r1, #1 - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 bne _080A23C0 bl DeleteThisEntity diff --git a/asm/sittingPerson.s b/asm/sittingPerson.s index e7902c50..5436cbbb 100644 --- a/asm/sittingPerson.s +++ b/asm/sittingPerson.s @@ -197,7 +197,7 @@ _08063896: _080638A4: ldr r0, _080638F8 @ =gUnk_02002B0E adds r1, r4, #0 - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 beq _080638B2 adds r5, #1 diff --git a/asm/whirlwind.s b/asm/whirlwind.s index 938f1f02..8b5aa475 100644 --- a/asm/whirlwind.s +++ b/asm/whirlwind.s @@ -19,7 +19,7 @@ Whirlwind: @ 0x08092CA0 beq _08092CC0 ldr r0, _08092CD4 @ =gUnk_020342F8 subs r1, #1 - bl sub_0801D5A8 + bl ReadBit cmp r0, #0 bne _08092CC0 bl DeleteThisEntity diff --git a/include/link.h b/include/link.h index a8a02bdf..4f85e340 100644 --- a/include/link.h +++ b/include/link.h @@ -59,7 +59,7 @@ typedef struct { u8 quiverType; u8 filler[4]; u8 itemOnA; - u8 itemonB; + u8 itemOnB; u8 filler2[10]; u16 rupees; u8 filler3[12]; diff --git a/include/room.h b/include/room.h index 6345e352..669b1f5a 100644 --- a/include/room.h +++ b/include/room.h @@ -34,15 +34,16 @@ typedef struct { } RoomControls; typedef struct { - u8 filler[6]; - u8 itemForSaleIndex; - u16 unk; - u8 unk2; - u16 filler2[3]; - u8 filler3[4]; - u8 filler4[52]; - u8 filler5[28]; - u32 greatFairyState; + u8 filler[6]; + u8 itemForSaleIndex; + u16 unk; + u8 unk2; + u16 filler2[3]; + u32 roomFlags; + u32 unk3; + u8 filler4[48]; + u8 filler5[28]; + u32 greatFairyState; } RoomVars; extern RoomControls gRoomControls; diff --git a/linker.ld b/linker.ld index fbfed575..e6d6d60c 100644 --- a/linker.ld +++ b/linker.ld @@ -581,7 +581,7 @@ SECTIONS { asm/sub_0807CA18.o(.text); asm/getInventoryValue.o(.text); asm/code_0807CAA0.o(.text); - src/getProgressFlag.o(.text); + src/flags.o(.text); asm/code_0807CC3C.o(.text); src/room.o(.text); /* objects */ diff --git a/src/bladeBrothers.c b/src/bladeBrothers.c index db07d9b1..dcc807b5 100644 --- a/src/bladeBrothers.c +++ b/src/bladeBrothers.c @@ -1,11 +1,17 @@ #include "global.h" #include "entity.h" +#include "link.h" typedef struct { /*0x00*/ u8 filler[0x2C]; /*0x2C*/ u8 unk; } struct_030010A0; +typedef struct { + u8 filler[0xa8]; + Stats stats; +} struct_02002A40; + extern void sub_0806ED78(Entity*); extern void sub_08068BEC(Entity*, u32); extern void sub_08078778(Entity*); @@ -25,6 +31,13 @@ extern void InitAnimationForceUpdate(Entity*, u32); extern void sub_0806F118(Entity*); extern void sub_0807DD94(Entity*, u32); extern u32 UpdateFuseInteraction(); +extern void ForceEquipItem(u8, u8); +extern void sub_0805ED14(u32*); +extern Entity* CreateFx(Entity*, u32, u32); +extern void PositionRelative(Entity*, Entity*, u32, u32); +extern void PlaySFX(u32); +extern u32 GetInventoryValue(u32); +extern void sub_080A7C18(u32, u32, u32); extern void (*gUnk_081115C0[])(Entity*); extern void (*gUnk_081115D0[])(Entity*); @@ -32,6 +45,11 @@ extern void (*gUnk_081115D0[])(Entity*); extern struct_030010A0 gUnk_030010A0; extern u16 gUnk_081115DC[]; extern Entity gLinkEntity; +extern u8 gUnk_08111618[]; +extern u32* gUnk_081115EC[]; +extern struct_02002A40 gUnk_02002A40; +extern u8 gUnk_08111623[]; +extern u8 gUnk_0811162B[]; void sub_080689C0(Entity* this) { @@ -140,3 +158,103 @@ void sub_08068B70(Entity* this) { this->action = 1; } } + +void sub_08068B84(Entity* this) { + u8 p; + + if (gUnk_08111618) {} + if (p = this->parameter3, gUnk_08111618[p]) { + ForceEquipItem(gUnk_08111618[this->parameter3], 0); + } + sub_0805ED14(gUnk_081115EC[this->parameter3]); +} + +void sub_08068BB4(Entity* this) { + u32 item = gUnk_02002A40.stats.itemOnA; + + this->field_0x69 = item; + item = gUnk_02002A40.stats.itemOnB; + *(&this->field_0x69 + 1) = item; +} + +void sub_08068BD0(Entity* this) { + ForceEquipItem(this->field_0x69, 0); + ForceEquipItem(*(u8*)(&this->field_0x69 + 1), 1); +} + +void sub_08068BEC(Entity* this, u32 unused) { + Entity* target; + + target = CreateFx(this, 0x44, 0); + if (target) { + target->ticks.b0 = 1; + PositionRelative(this, target, 0, -0x100000); + PlaySFX(0xfa); + } +} + +void sub_08068C28(Entity* this) { + u8 bVar1; + u32 uVar2; + + this->parameter3 = gUnk_08111623[(this->entityType).parameter1]; + if ((this->entityType).parameter1 == 1) { + if (GetInventoryValue(0x48)) { // spin attack + if (!GetInventoryValue(0x4b)) { // rock breaker + this->parameter3 = 1; + } else { + if (!GetInventoryValue(0x4a)) { // dash attack + this->parameter3 = 2; + } else { + this->parameter3 = 3; + } + } + } + } +} + +void sub_08068C6C(Entity *this) +{ + sub_080A7C18(gUnk_0811162B[this->parameter3] & 0xffffff7f,0,0); +} + +void sub_08068C8C(Entity *param_1,Entity *param_2) +{ + u8* arr = gUnk_0811162B + 0xd; + + *(u32*)¶m_2->animationState = *(u32*)(arr + param_1->parameter3 * 4); +} + +void sub_08068CA0(Entity *param_1,Entity *param_2) +{ + u8 bVar1; + u32 uVar2; + + bVar1 = (param_1->entityType).parameter1; + if (bVar1 == 1) { + *(u32 *)¶m_2->animationState = bVar1; + uVar2 = GetInventoryValue(0x48); //spin attack + if (uVar2 == 0) { + *(u32 *)¶m_2->animationState = 0; + } + uVar2 = GetInventoryValue(0x4b); //rock breaker + if (uVar2 == 0) { + *(u32 *)¶m_2->animationState = 0; + } + uVar2 = GetInventoryValue(0x4a); //dash attack + if (uVar2 == 0) { + *(u32 *)¶m_2->animationState = 0; + } + uVar2 = GetInventoryValue(0x4e); //down thrust + if (uVar2 != 0) { + return; + } + } + else { + uVar2 = GetInventoryValue(gUnk_0811162B[param_1->parameter3] & -0x81); + if (uVar2 != 0) { + uVar2 = 1; + } + } + *(u32*)¶m_2->animationState = uVar2; +} \ No newline at end of file diff --git a/src/flags.c b/src/flags.c new file mode 100644 index 00000000..2c8534db --- /dev/null +++ b/src/flags.c @@ -0,0 +1,15 @@ +#include "global.h" +#include "room.h" +#include "flags.h" + +u32 extern CheckLocalFlagByOffset(u32, u32); +extern u32 ReadBit(u32*, u32); + +u32 CheckGlobalFlag(u32 index) { + return CheckLocalFlagByOffset(0, index); +} + +u32 CheckRoomFlag(u32 index) +{ + return ReadBit(&gRoomVars.roomFlags, index); +} \ No newline at end of file diff --git a/src/getProgressFlag.c b/src/getProgressFlag.c deleted file mode 100644 index c2907340..00000000 --- a/src/getProgressFlag.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "global.h" - -u32 extern CheckLocalFlagByOffset(u32, u32); - -u32 CheckGlobalFlag(u32 index) { - return CheckLocalFlagByOffset(0, index); -}