ported battle_util2 from pokeem
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
#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)
|
||||
{
|
||||
void **ptr = gUnknown_3005EE0;
|
||||
s32 i = 3;
|
||||
|
||||
do
|
||||
*ptr++ = AllocZeroed(8);
|
||||
while (--i >= 0);
|
||||
}
|
||||
// TODO: Figure out whether 0x200 is really the size of *gBattleResources.
|
||||
// The following works in pokeem:
|
||||
// gBattleStruct = AllocZeroed(sizeof(*gBattleStruct));
|
||||
gBattleStruct = AllocZeroed(0x200);
|
||||
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)
|
||||
{
|
||||
void **ptr = gUnknown_3005EE0;
|
||||
void *nullPtr = NULL;
|
||||
s32 i = 3;
|
||||
|
||||
do
|
||||
{
|
||||
Free(*ptr);
|
||||
*ptr++ = nullPtr;
|
||||
}
|
||||
while (--i >= 0);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -631,7 +631,7 @@ u8 sub_815DA3C(void)
|
||||
return gFacilityClassToPicIndex[gUnknown_203F45C->unk_3D];
|
||||
}
|
||||
|
||||
void sub_815DA54(void)
|
||||
void InitTrainerTowerBattleStruct(void)
|
||||
{
|
||||
u16 r10;
|
||||
s32 r9;
|
||||
@@ -660,7 +660,7 @@ void sub_815DA54(void)
|
||||
sub_815DD2C();
|
||||
}
|
||||
|
||||
void sub_815DBDC(void)
|
||||
void FreeTrainerTowerBattleStruct(void)
|
||||
{
|
||||
Free(gUnknown_203F45C);
|
||||
gUnknown_203F45C = NULL;
|
||||
@@ -1122,7 +1122,7 @@ void sub_815E124(u8 taskId)
|
||||
|
||||
void sub_815E160(void)
|
||||
{
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY;
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_TRAINER_TOWER;
|
||||
if (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002 == 1)
|
||||
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
|
||||
gTrainerBattleOpponent_A = 0;
|
||||
|
||||
Reference in New Issue
Block a user