diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2019-09-25 13:49:34 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-25 13:49:34 -0400 |
commit | 44f8d694ce5760fba5272936cfe3ab1fe48537a8 (patch) | |
tree | 59ef21892a02c9d266f5cac36872458bdbe0de61 /src/battle_util2.c | |
parent | 6539884c8850aca6c2057017dba9c3d78ca15784 (diff) | |
parent | 0e217e22d8fa3e075416cb332435c3756548357e (diff) |
Merge pull request #86 from jiangzhengwenjz/battle
battle
Diffstat (limited to 'src/battle_util2.c')
-rw-r--r-- | src/battle_util2.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/battle_util2.c b/src/battle_util2.c new file mode 100644 index 000000000..d940d8508 --- /dev/null +++ b/src/battle_util2.c @@ -0,0 +1,96 @@ +#include "global.h" +#include "bg.h" +#include "battle.h" +#include "pokemon.h" +#include "malloc.h" +#include "trainer_tower.h" +#include "battle_util2.h" + +void AllocateBattleResources(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER) + InitTrainerTowerBattleStruct(); + if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) + { + s32 i; + + for (i = 0; i < 4; ++i) + gUnknown_3005EE0[i] = AllocZeroed(8); + } + gBattleStruct = AllocZeroed(sizeof(*gBattleStruct)); + gBattleResources = AllocZeroed(sizeof(*gBattleResources)); + gBattleResources->secretBase = AllocZeroed(sizeof(*gBattleResources->secretBase)); + gBattleResources->flags = AllocZeroed(sizeof(*gBattleResources->flags)); + gBattleResources->battleScriptsStack = AllocZeroed(sizeof(*gBattleResources->battleScriptsStack)); + gBattleResources->battleCallbackStack = AllocZeroed(sizeof(*gBattleResources->battleCallbackStack)); + gBattleResources->beforeLvlUp = AllocZeroed(sizeof(*gBattleResources->beforeLvlUp)); + gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai)); + gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory)); + gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack)); + gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE); + gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE); + gUnknown_2022BB8 = AllocZeroed(0x2000); + gUnknown_2022BBC = AllocZeroed(0x1000); + SetBgTilemapBuffer(1, gUnknown_2022BBC); + SetBgTilemapBuffer(2, gUnknown_2022BBC); +} + +void FreeBattleResources(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER) + FreeTrainerTowerBattleStruct(); + if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) + { + s32 i; + + for (i = 0; i < 4; ++i) + { + FREE_AND_SET_NULL(gUnknown_3005EE0[i]); + } + } + if (gBattleResources != NULL) + { + FREE_AND_SET_NULL(gBattleStruct); + FREE_AND_SET_NULL(gBattleResources->secretBase); + FREE_AND_SET_NULL(gBattleResources->flags); + FREE_AND_SET_NULL(gBattleResources->battleScriptsStack); + FREE_AND_SET_NULL(gBattleResources->battleCallbackStack); + FREE_AND_SET_NULL(gBattleResources->beforeLvlUp); + FREE_AND_SET_NULL(gBattleResources->ai); + FREE_AND_SET_NULL(gBattleResources->battleHistory); + FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack); + FREE_AND_SET_NULL(gBattleResources); + FREE_AND_SET_NULL(gLinkBattleSendBuffer); + FREE_AND_SET_NULL(gLinkBattleRecvBuffer); + FREE_AND_SET_NULL(gUnknown_2022BB8); + FREE_AND_SET_NULL(gUnknown_2022BBC); + } +} + +void AdjustFriendshipOnBattleFaint(u8 battlerId) +{ + u8 opposingBattlerId, opposingBattlerId2; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + opposingBattlerId2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + if (gBattleMons[opposingBattlerId2].level > gBattleMons[opposingBattlerId].level) + opposingBattlerId = opposingBattlerId2; + } + else + { + opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + } + if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level) + { + if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29) + AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 9); + else + AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 7); + } + else + { + AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 7); + } +} |