summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-05-10 00:54:02 -0500
committercamthesaxman <cameronghall@cox.net>2017-05-10 00:54:02 -0500
commitb2218c7d2ba5a2a2b9ff1258dfb454479241c3b6 (patch)
tree8c38eae426a73f13aa2f0d31a683d8d3afe2aaa3
parent165b7cb375376cbb35c646e6f4cc12d0a6bec86b (diff)
tired. finish later
-rw-r--r--asm/battle_2.s203
-rw-r--r--include/global.berry.h8
-rw-r--r--src/battle_2.c121
3 files changed, 124 insertions, 208 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index eba0c2c9b..322c1f9a1 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -6,209 +6,6 @@
.text
- thumb_func_start sub_800EB08
-sub_800EB08: @ 800EB08
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0800EB84 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0800EBA4
- movs r3, 0
- ldr r5, _0800EB88 @ =gEnigmaBerries
- ldr r0, _0800EB8C @ =gSaveBlock1
- mov r12, r0
- adds r7, r5, 0
- ldr r6, _0800EB90 @ =0x00003160
- add r6, r12
- adds r4, r5, 0
- adds r4, 0x38
-_0800EB30:
- adds r1, r3, r7
- adds r2, r3, r6
- ldrb r0, [r2]
- strb r0, [r1]
- adds r1, r3, r4
- ldrb r0, [r2]
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0x6
- ble _0800EB30
- movs r3, 0
- ldr r4, _0800EB94 @ =gUnknown_02024DF8
- ldr r7, _0800EB98 @ =gSaveBlock1 + 0x3676
- adds r6, r4, 0
- adds r6, 0x38
-_0800EB4E:
- adds r1, r3, r4
- adds r2, r3, r7
- ldrb r0, [r2]
- strb r0, [r1]
- adds r1, r3, r6
- ldrb r0, [r2]
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0x11
- ble _0800EB4E
- ldr r1, _0800EB9C @ =0x00003688
- add r1, r12
- ldrb r0, [r1]
- strb r0, [r5, 0x7]
- ldrb r0, [r1]
- adds r1, r5, 0
- adds r1, 0x3F
- strb r0, [r1]
- ldr r1, _0800EBA0 @ =0x00003689
- add r1, r12
- ldrb r0, [r1]
- strb r0, [r5, 0x1A]
- ldrb r1, [r1]
- adds r0, r5, 0
- adds r0, 0x52
- strb r1, [r0]
- b _0800EC28
- .align 2, 0
-_0800EB84: .4byte gBattleTypeFlags
-_0800EB88: .4byte gEnigmaBerries
-_0800EB8C: .4byte gSaveBlock1
-_0800EB90: .4byte 0x00003160
-_0800EB94: .4byte gUnknown_02024DF8
-_0800EB98: .4byte gSaveBlock1 + 0x3676
-_0800EB9C: .4byte 0x00003688
-_0800EBA0: .4byte 0x00003689
-_0800EBA4:
- movs r0, 0x40
- ands r0, r1
- movs r1, 0x2
- mov r8, r1
- cmp r0, 0
- beq _0800EBB4
- movs r0, 0x4
- mov r8, r0
-_0800EBB4:
- movs r3, 0
- cmp r3, r8
- bge _0800EC28
- ldr r1, _0800EC38 @ =gEnigmaBerries
- mov r12, r1
- ldr r0, _0800EC3C @ =gBlockRecvBuffer + 0x4
- mov r10, r0
- movs r1, 0x8
- add r1, r12
- mov r9, r1
-_0800EBC8:
- lsls r0, r3, 8
- mov r1, r10
- adds r5, r0, r1
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- ldr r1, _0800EC40 @ =gLinkPlayers
- adds r0, r1
- ldrb r4, [r0, 0x18]
- movs r2, 0
- adds r7, r3, 0x1
- lsls r1, r4, 3
- subs r0, r1, r4
- adds r6, r1, 0
- lsls r0, 2
- mov r1, r12
- adds r3, r0, r1
-_0800EBEA:
- adds r0, r5, r2
- ldrb r0, [r0]
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x6
- ble _0800EBEA
- movs r2, 0
- subs r0, r6, r4
- lsls r0, 2
- mov r1, r9
- adds r3, r0, r1
- adds r1, r5, 0
- adds r1, 0x8
-_0800EC06:
- adds r0, r1, r2
- ldrb r0, [r0]
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x11
- ble _0800EC06
- subs r0, r6, r4
- lsls r0, 2
- add r0, r12
- ldrb r1, [r5, 0x7]
- strb r1, [r0, 0x7]
- ldrb r1, [r5, 0x1A]
- strb r1, [r0, 0x1A]
- adds r3, r7, 0
- cmp r3, r8
- blt _0800EBC8
-_0800EC28:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EC38: .4byte gEnigmaBerries
-_0800EC3C: .4byte gBlockRecvBuffer + 0x4
-_0800EC40: .4byte gLinkPlayers
- thumb_func_end sub_800EB08
-
- thumb_func_start shedinja_something
-shedinja_something: @ 800EC44
- push {r4,r5,lr}
- sub sp, 0x10
- adds r4, r0, 0
- add r5, sp, 0xC
- movs r0, 0x1
- strb r0, [r5]
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldr r1, _0800EC94 @ =0x0000012f
- cmp r0, r1
- bne _0800EC8C
- adds r0, r4, 0
- movs r1, 0x3
- bl GetMonData
- ldrb r1, [r5]
- cmp r0, r1
- beq _0800EC8C
- adds r0, r4, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- ldr r1, _0800EC98 @ =gUnknown_081F96C8
- mov r0, sp
- bl StringCompareWithoutExtCtrlCodes
- cmp r0, 0
- bne _0800EC8C
- adds r0, r4, 0
- movs r1, 0x3
- adds r2, r5, 0
- bl SetMonData
-_0800EC8C:
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EC94: .4byte 0x0000012f
-_0800EC98: .4byte gUnknown_081F96C8
- thumb_func_end shedinja_something
-
thumb_func_start sub_800EC9C
sub_800EC9C: @ 800EC9C
push {r4-r7,lr}
diff --git a/include/global.berry.h b/include/global.berry.h
index b7938868d..3f835f075 100644
--- a/include/global.berry.h
+++ b/include/global.berry.h
@@ -34,10 +34,10 @@ struct EnigmaBerry
struct BattleEnigmaBerry
{
- u8 name[7];
- u8 holdEffect;
- u8 itemEffect[18];
- u8 holdEffectParam;
+ /*0x00*/ u8 name[7];
+ /*0x07*/ u8 holdEffect;
+ /*0x08*/ u8 itemEffect[18];
+ /*0x1A*/ u8 holdEffectParam;
};
struct BerryTree
diff --git a/src/battle_2.c b/src/battle_2.c
index 81317c477..d15e10f2f 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -7,6 +7,7 @@
#include "task.h"
#include "pokemon.h"
#include "species.h"
+#include "link.h"
struct UnknownStruct5
{
@@ -24,7 +25,8 @@ struct UnknownStruct6
struct UnknownStruct7
{
- u8 filler0[2];
+ u8 unk0;
+ u8 unk1;
u8 unk2;
u8 unk3;
};
@@ -38,6 +40,7 @@ struct UnknownStruct8
};
extern const struct UnknownStruct5 gUnknown_081F9674;
+extern const u8 gUnknown_081F96C8[];
extern u8 ewram[];
#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0))
@@ -62,6 +65,8 @@ extern u16 gBattleTypeFlags;
extern u8 gBattleTerrain;
extern u8 gReservedSpritePaletteCount;
extern u16 gTrainerBattleOpponent;
+extern struct BattleEnigmaBerry gEnigmaBerries[];
+extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2];
extern void sub_800B858(void);
extern void dp12_8087EA4(void);
@@ -209,3 +214,117 @@ void sub_800EAAC(void)
_ewram4->unk7 = gSaveBlock1.enigmaBerry.holdEffect;
_ewram4->unk1A = gSaveBlock1.enigmaBerry.holdEffectParam;
}
+
+void sub_800EB08(void)
+{
+ s32 i;
+ s32 j;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ for (i = 0; i < 7; i++)
+ {
+ gEnigmaBerries[0].name[i] = gSaveBlock1.enigmaBerry.berry.name[i];
+ gEnigmaBerries[2].name[i] = gSaveBlock1.enigmaBerry.berry.name[i];
+ }
+ for (i = 0; i < 18; i++)
+ {
+ gEnigmaBerries[0].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i];
+ gEnigmaBerries[2].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i];
+ }
+ gEnigmaBerries[0].holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
+ gEnigmaBerries[2].holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
+ gEnigmaBerries[0].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam;
+ gEnigmaBerries[2].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam;
+ }
+ else
+ {
+ s32 r8;
+ struct BattleEnigmaBerry *src;
+ u8 r4;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_40)
+ r8 = 4;
+ else
+ r8 = 2;
+ for (i = 0; i < r8; i++)
+ {
+ src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
+ r4 = gLinkPlayers[i].lp_field_18;
+
+ for (j = 0; j < 7; j++)
+ gEnigmaBerries[r4].name[j] = src->name[j];
+ for (j = 0; j < 18; j++)
+ gEnigmaBerries[r4].itemEffect[j] = src->itemEffect[j];
+ gEnigmaBerries[r4].holdEffect = src->holdEffect;
+ gEnigmaBerries[r4].holdEffectParam = src->holdEffectParam;
+ }
+ }
+}
+
+void shedinja_something(struct Pokemon *pkmn)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 language = 1;
+
+ if (GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA
+ && GetMonData(pkmn, MON_DATA_LANGUAGE) != language)
+ {
+ GetMonData(pkmn, MON_DATA_NICKNAME, nickname);
+ if (StringCompareWithoutExtCtrlCodes(nickname, gUnknown_081F96C8) == 0)
+ SetMonData(pkmn, MON_DATA_LANGUAGE, &language);
+ }
+}
+
+void sub_800EC9C(void)
+{
+ u8 r4;
+ u8 r5;
+
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ r4 = GetMultiplayerId();
+ ewram[0x160CB] = r4;
+ r5 = r4 ^ 1;
+ switch (gUnknown_02024D1E)
+ {
+ case 0:
+ //_0800ED0C
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
+ {
+ ewram0.unk0 = 1;
+ ewram0.unk1 = 1;
+ sub_800E9EC();
+ sub_800EAAC();
+ SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32);
+ gUnknown_02024D1E = 1;
+ }
+ }
+ //_0800ED64
+ else
+ {
+ gBattleTypeFlags |= BATTLE_TYPE_WILD;
+ gUnknown_02024D1E = 8;
+ sub_800EB08();
+ }
+ break;
+ case 1:
+ //_0800ED7C
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ ResetBlockReceivedFlags();
+ if (gBlockRecvBuffer[0][0] == 0x100)
+ {
+ if (r4 == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ }
+ //_0800EDBC
+ }
+ break;
+ }
+} \ No newline at end of file