summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2017-08-07 17:39:49 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2017-08-07 17:39:49 +0200
commitf72d61c18c8e1d476c305bee4fded8923ff1278e (patch)
tree1aaae232693c7894ca751f4500587b619765b404
parentf7c33068ff9eafaf111985dc934e83d773183ba9 (diff)
more stuff done
-rw-r--r--asm/berry_blender.s257
-rw-r--r--src/berry_blender.c124
2 files changed, 105 insertions, 276 deletions
diff --git a/asm/berry_blender.s b/asm/berry_blender.s
index f23057db6..2eff9bd94 100644
--- a/asm/berry_blender.s
+++ b/asm/berry_blender.s
@@ -8,263 +8,6 @@
- thumb_func_start sub_804FC48
-sub_804FC48: @ 804FC48
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 16
- lsrs r7, r0, 16
- mov r8, r7
- lsls r1, 24
- ldr r0, _0804FCBC @ =gSpriteTemplate_821645C
- ldr r4, _0804FCC0 @ =sBlenderSyncArrowsPos
- lsrs r1, 23
- adds r2, r1, r4
- ldrb r6, [r2]
- ldr r5, _0804FCC4 @ =gUnknown_082162CC
- adds r2, r1, r5
- movs r3, 0
- ldrsb r3, [r2, r3]
- lsls r2, r3, 2
- adds r2, r3
- lsls r2, 1
- subs r6, r2
- adds r4, 0x1
- adds r4, r1, r4
- ldrb r2, [r4]
- adds r5, 0x1
- adds r1, r5
- movs r3, 0
- ldrsb r3, [r1, r3]
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 1
- subs r2, r1
- adds r1, r6, 0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- ldr r0, _0804FCC8 @ =0x00004523
- cmp r7, r0
- bne _0804FCD4
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- ldr r5, _0804FCCC @ =gSprites
- adds r0, r4, r5
- movs r1, 0x2
- bl StartSpriteAnim
- adds r5, 0x1C
- adds r4, r5
- ldr r0, _0804FCD0 @ =sub_8051684
- str r0, [r4]
- movs r0, 0x28
- bl PlaySE
- b _0804FD18
- .align 2, 0
-_0804FCBC: .4byte gSpriteTemplate_821645C
-_0804FCC0: .4byte sBlenderSyncArrowsPos
-_0804FCC4: .4byte gUnknown_082162CC
-_0804FCC8: .4byte 0x00004523
-_0804FCCC: .4byte gSprites
-_0804FCD0: .4byte sub_8051684
-_0804FCD4:
- ldr r0, _0804FCF4 @ =0x00005432
- cmp r7, r0
- bne _0804FCFC
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0804FCF8 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- movs r0, 0x1F
- bl PlaySE
- b _0804FD18
- .align 2, 0
-_0804FCF4: .4byte 0x00005432
-_0804FCF8: .4byte gSprites
-_0804FCFC:
- ldr r0, _0804FD28 @ =0x00002345
- cmp r8, r0
- bne _0804FD18
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r1, _0804FD2C @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAnim
- movs r0, 0x20
- bl PlaySE
-_0804FD18:
- bl sub_805156C
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804FD28: .4byte 0x00002345
-_0804FD2C: .4byte gSprites
- thumb_func_end sub_804FC48
-
- thumb_func_start sub_804FD30
-sub_804FD30: @ 804FD30
- push {r4-r7,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- adds r5, r4, 0
- bl Blender_ControlHitPitch
- ldr r0, _0804FD50 @ =0x00004523
- cmp r4, r0
- beq _0804FD64
- cmp r4, r0
- bgt _0804FD58
- ldr r0, _0804FD54 @ =0x00002345
- cmp r4, r0
- beq _0804FE34
- b _0804FE60
- .align 2, 0
-_0804FD50: .4byte 0x00004523
-_0804FD54: .4byte 0x00002345
-_0804FD58:
- ldr r0, _0804FD60 @ =0x00005432
- cmp r5, r0
- beq _0804FDFC
- b _0804FE60
- .align 2, 0
-_0804FD60: .4byte 0x00005432
-_0804FD64:
- ldr r7, _0804FD94 @ =sBerryBlenderData
- ldr r4, [r7]
- adds r5, r4, 0
- adds r5, 0x56
- ldrh r6, [r5]
- movs r0, 0
- ldrsh r1, [r5, r0]
- ldr r0, _0804FD98 @ =0x000005db
- cmp r1, r0
- bgt _0804FDA0
- ldr r1, _0804FD9C @ =gUnknown_082165DA
- adds r0, r4, 0
- adds r0, 0x88
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xC0
- lsls r0, 1
- bl __divsi3
- adds r0, r6, r0
- strh r0, [r5]
- b _0804FE60
- .align 2, 0
-_0804FD94: .4byte sBerryBlenderData
-_0804FD98: .4byte 0x000005db
-_0804FD9C: .4byte gUnknown_082165DA
-_0804FDA0:
- ldr r1, _0804FDF8 @ =gUnknown_082165DA
- adds r0, r4, 0
- adds r0, 0x88
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x80
- bl __divsi3
- adds r0, r6, r0
- strh r0, [r5]
- movs r1, 0xA2
- lsls r1, 1
- adds r4, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- movs r1, 0x64
- bl __divsi3
- adds r1, r0, 0
- subs r1, 0xA
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8051AC8
- ldr r0, [r7]
- movs r1, 0xA3
- lsls r1, 1
- adds r4, r0, r1
- adds r0, 0x56
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r1, 0x64
- bl __divsi3
- adds r1, r0, 0
- subs r1, 0xA
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8051AC8
- b _0804FE60
- .align 2, 0
-_0804FDF8: .4byte gUnknown_082165DA
-_0804FDFC:
- ldr r0, _0804FE28 @ =sBerryBlenderData
- ldr r2, [r0]
- adds r4, r2, 0
- adds r4, 0x56
- ldrh r5, [r4]
- movs r0, 0
- ldrsh r1, [r4, r0]
- ldr r0, _0804FE2C @ =0x000005db
- cmp r1, r0
- bgt _0804FE60
- ldr r1, _0804FE30 @ =gUnknown_082165DA
- adds r0, r2, 0
- adds r0, 0x88
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- bl __divsi3
- adds r0, r5, r0
- b _0804FE5E
- .align 2, 0
-_0804FE28: .4byte sBerryBlenderData
-_0804FE2C: .4byte 0x000005db
-_0804FE30: .4byte gUnknown_082165DA
-_0804FE34:
- ldr r0, _0804FE68 @ =sBerryBlenderData
- ldr r0, [r0]
- adds r4, r0, 0
- adds r4, 0x56
- ldr r1, _0804FE6C @ =gUnknown_082165DA
- adds r0, 0x88
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- bl __divsi3
- ldrh r1, [r4]
- subs r1, r0
- strh r1, [r4]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x7F
- bgt _0804FE60
- movs r0, 0x80
-_0804FE5E:
- strh r0, [r4]
-_0804FE60:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804FE68: .4byte sBerryBlenderData
-_0804FE6C: .4byte gUnknown_082165DA
- thumb_func_end sub_804FD30
thumb_func_start sub_804FE70
sub_804FE70: @ 804FE70
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 47aebf513..62264f76e 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -148,7 +148,7 @@ struct BerryBlenderData
u8 field_52;
u8 field_53;
u16 arrowPos;
- s16 hitPitch; //56
+ s16 field_56;
u8 field_58;
u8 field_59;
u16 field_5A;
@@ -337,8 +337,8 @@ struct BerryBlenderData
u16 field_13E;
u16 field_140;
u16 field_142;
- u16 field_144;
- u16 field_146;
+ s16 field_144;
+ s16 field_146;
u8 field_148[3];
u8 field_14B;
u16 field_14C[BLENDER_MAX_PLAYERS][3];
@@ -388,10 +388,13 @@ bool8 sub_8051B8C(void);
void sub_80516C4(u8 a0, u16 itemID);
void sub_804F2A8(void);
void sub_804F81C(void);
+void sub_805156C(void);
+void sub_8051684(struct Sprite* sprite);
+void sub_8051AC8(s16* a0, u16 a1);
void Blender_ControlHitPitch(void)
{
- m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (sBerryBlenderData->hitPitch - 128) * 2);
+ m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (sBerryBlenderData->field_56 - 128) * 2);
}
void VBlankCB0_BerryBlender(void)
@@ -769,7 +772,7 @@ void sub_804E9F8(void)
}
}
sBerryBlenderData->field_7C = 0;
- sBerryBlenderData->hitPitch = 0;
+ sBerryBlenderData->field_56 = 0;
sBerryBlenderData->arrowPos = 0;
sBerryBlenderData->field_5A = 0;
sBerryBlenderData->field_1 = 0;
@@ -916,7 +919,7 @@ void sub_804E9F8(void)
}
break;
case 21:
- sBerryBlenderData->hitPitch = 128;
+ sBerryBlenderData->field_56 = 128;
sBerryBlenderData->field_12C = 0;
SetMainCallback2(sub_80501FC);
if (GetCurrentMapMusic() != 403)
@@ -961,7 +964,7 @@ void sub_804F0F4(void)
gLinkType = 0x4422;
sBerryBlenderData->field_4E = 0;
- sBerryBlenderData->hitPitch = 0;
+ sBerryBlenderData->field_56 = 0;
sBerryBlenderData->arrowPos = 0;
sBerryBlenderData->field_5A = 0;
sBerryBlenderData->field_144 = 0;
@@ -1179,7 +1182,7 @@ void sub_804F378(void)
break;
case 21:
sub_804F81C();
- sBerryBlenderData->hitPitch = 128;
+ sBerryBlenderData->field_56 = 128;
sBerryBlenderData->field_12C = 0;
sBerryBlenderData->field_14B = 0;
sBerryBlenderData->field_7E = 0;
@@ -1242,7 +1245,7 @@ void sub_804F8C8(u8 taskID)
if (sBerryBlenderData->field_14B == 0)
{
u8 rand = Random() / 655;
- if (sBerryBlenderData->hitPitch < 500)
+ if (sBerryBlenderData->field_56 < 500)
{
if (rand > 75)
gRecvCmds[2][1] = 0x4523;
@@ -1250,7 +1253,7 @@ void sub_804F8C8(u8 taskID)
gRecvCmds[2][1] = 0x5432;
gRecvCmds[2][1] = 0x5432; // ???
}
- else if (sBerryBlenderData->hitPitch < 1500)
+ else if (sBerryBlenderData->field_56 < 1500)
{
if (rand > 80)
gRecvCmds[2][1] = 0x4523;
@@ -1295,7 +1298,7 @@ void sub_804F9F4(u8 taskID)
if (sBerryBlenderData->field_14B == 0)
{
u8 rand = Random() / 655;
- if (sBerryBlenderData->hitPitch < 500)
+ if (sBerryBlenderData->field_56 < 500)
{
if (rand > 66)
gRecvCmds[2][2] = 0x4523;
@@ -1331,10 +1334,6 @@ void sub_804FB1C(u8 taskID)
{
u32 var1, var2;
- #ifndef FAKEMATCHING
- asm("":::"r6");
- #endif // FAKEMATCHING
-
var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF;
var2 = sBerryBlenderData->field_A2[3] & 0xFF;
if ((var1 >> 8) > gUnknown_08216303[var2] + 20 && (var1 >> 8) < gUnknown_08216303[var2] + 40)
@@ -1344,7 +1343,7 @@ void sub_804FB1C(u8 taskID)
if (sBerryBlenderData->field_14B == 0)
{
u8 rand = (Random() / 655);
- if (sBerryBlenderData->hitPitch < 500)
+ if (sBerryBlenderData->field_56 < 500)
{
if (rand > 88)
gRecvCmds[2][3] = 0x4523;
@@ -1353,11 +1352,15 @@ void sub_804FB1C(u8 taskID)
}
else
{
- u8 value;
if (rand > 60)
gRecvCmds[2][3] = 0x4523;
- else if ((value = rand - 56) < 5)
- gRecvCmds[2][3] = 0x5432;
+ else
+ {
+ s8 value = rand - 56; // makes me wonder what the original code was
+ u8 value2 = value;
+ if (value2 < 5)
+ gRecvCmds[2][3] = 0x5432;
+ }
if (rand < 5)
sub_804F890(3, 5);
}
@@ -1373,3 +1376,86 @@ void sub_804FB1C(u8 taskID)
else
gTasks[taskID].data[0] = 0;
}
+
+extern const s8 gUnknown_082162CC[][2];
+extern const struct SpriteTemplate gSpriteTemplate_821645C;
+
+void sub_804FC48(u16 a0, u8 a1)
+{
+ u8 spriteID;
+
+ spriteID = CreateSprite(&gSpriteTemplate_821645C,
+ sBlenderSyncArrowsPos[a1][0] - (10 * gUnknown_082162CC[a1][0]),
+ sBlenderSyncArrowsPos[a1][1] - (10 * gUnknown_082162CC[a1][1]),
+ 1);
+ if (a0 == 0x4523)
+ {
+ StartSpriteAnim(&gSprites[spriteID], 2);
+ gSprites[spriteID].callback = sub_8051684;
+ PlaySE(40);
+ }
+ else if (a0 == 0x5432)
+ {
+ StartSpriteAnim(&gSprites[spriteID], 0);
+ PlaySE(31);
+ }
+ else if (a0 == 0x2345)
+ {
+ StartSpriteAnim(&gSprites[spriteID], 1);
+ PlaySE(32);
+ }
+ sub_805156C();
+}
+
+extern const u8 gUnknown_082165DA[];
+
+void sub_804FD30(u16 a0)
+{
+ Blender_ControlHitPitch();
+ switch (a0)
+ {
+ case 0x4523:
+ if (sBerryBlenderData->field_56 < 1500)
+ sBerryBlenderData->field_56 += (384 / gUnknown_082165DA[sBerryBlenderData->field_88]);
+ else
+ {
+ sBerryBlenderData->field_56 += (128 / gUnknown_082165DA[sBerryBlenderData->field_88]);
+ sub_8051AC8(&sBerryBlenderData->field_144, (sBerryBlenderData->field_56 / 100) - 10);
+ sub_8051AC8(&sBerryBlenderData->field_146, (sBerryBlenderData->field_56 / 100) - 10);
+ }
+ break;
+ case 0x5432:
+ if (sBerryBlenderData->field_56 < 1500)
+ sBerryBlenderData->field_56 += (256 / gUnknown_082165DA[sBerryBlenderData->field_88]);
+ break;
+ case 0x2345:
+ sBerryBlenderData->field_56 -= (256 / gUnknown_082165DA[sBerryBlenderData->field_88]);
+ if (sBerryBlenderData->field_56 < 128)
+ sBerryBlenderData->field_56 = 128;
+ break;
+ }
+}
+
+void sub_804FE70(void)
+{
+ s32 i;
+
+ if (gSpecialVar_0x8004 != 0)
+ {
+ if (gSendCmd[2] != 0)
+ {
+ gRecvCmds[2][0] = 0;
+ gRecvCmds[0][0] = 0x4444;
+ gSendCmd[2] = 0;
+ }
+ for (i = 0; i < 3; i++)
+ {
+ if (gRecvCmds[2][i] != 0)
+ gRecvCmds[0][i] = 0x4444;
+ }
+ }
+ for (i = 0; i < gUnknown_082165DA[sBerryBlenderData->field_88]; i++)
+ {
+ if (gRecvCmds[0])
+ }
+}