diff options
author | camthesaxman <cameronghall@cox.net> | 2017-05-10 00:54:02 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-05-10 00:54:02 -0500 |
commit | b2218c7d2ba5a2a2b9ff1258dfb454479241c3b6 (patch) | |
tree | 8c38eae426a73f13aa2f0d31a683d8d3afe2aaa3 | |
parent | 165b7cb375376cbb35c646e6f4cc12d0a6bec86b (diff) |
tired. finish later
-rw-r--r-- | asm/battle_2.s | 203 | ||||
-rw-r--r-- | include/global.berry.h | 8 | ||||
-rw-r--r-- | src/battle_2.c | 121 |
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 |