summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2020-06-15 13:57:09 -0700
committertheo3 <arisstephenson2@gmail.com>2020-06-15 13:57:09 -0700
commitf3f7b518cbb96f95ce3e111ea13d4a9f8ca9682e (patch)
tree298363f6ad282453cd43fe713de27e3261778339
parenta99313e537ac4298eed0b27472f5fae66d98e857 (diff)
bladeBrothers.c OK
-rw-r--r--asm/bladeBrothers.s204
-rw-r--r--asm/code_08000F10.s4
-rw-r--r--asm/code_08016DF8.s2
-rw-r--r--asm/code_0801C85C.s4
-rw-r--r--asm/code_0801D79C.s4
-rw-r--r--asm/code_080526F8.s2
-rw-r--r--asm/code_0807CAA0.s2
-rw-r--r--asm/code_0807CC3C.s14
-rw-r--r--asm/code_080A3BD0.s2
-rw-r--r--asm/figurineDevice.s4
-rw-r--r--asm/object6A.s2
-rw-r--r--asm/pinwheel.s2
-rw-r--r--asm/sittingPerson.s2
-rw-r--r--asm/whirlwind.s2
-rw-r--r--include/link.h2
-rw-r--r--include/room.h19
-rw-r--r--linker.ld2
-rw-r--r--src/bladeBrothers.c118
-rw-r--r--src/flags.c15
-rw-r--r--src/getProgressFlag.c7
20 files changed, 163 insertions, 250 deletions
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*)&param_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 *)&param_2->animationState = bVar1;
+ uVar2 = GetInventoryValue(0x48); //spin attack
+ if (uVar2 == 0) {
+ *(u32 *)&param_2->animationState = 0;
+ }
+ uVar2 = GetInventoryValue(0x4b); //rock breaker
+ if (uVar2 == 0) {
+ *(u32 *)&param_2->animationState = 0;
+ }
+ uVar2 = GetInventoryValue(0x4a); //dash attack
+ if (uVar2 == 0) {
+ *(u32 *)&param_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*)&param_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);
-}