bladeBrothers.c OK

This commit is contained in:
theo3 2020-06-15 13:57:09 -07:00
parent a99313e537
commit f3f7b518cb
20 changed files with 163 additions and 250 deletions

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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];

View File

@ -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;

View File

@ -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 */

View File

@ -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;
}

15
src/flags.c Normal file
View File

@ -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);
}

View File

@ -1,7 +0,0 @@
#include "global.h"
u32 extern CheckLocalFlagByOffset(u32, u32);
u32 CheckGlobalFlag(u32 index) {
return CheckLocalFlagByOffset(0, index);
}