From 604347808138a0514933b3b994ac0f4eb62237a8 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 29 Jul 2019 08:34:15 +0800 Subject: ported battle_util2 from pokeem --- src/battle_util2.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/battle_util2.c (limited to 'src/battle_util2.c') diff --git a/src/battle_util2.c b/src/battle_util2.c new file mode 100644 index 000000000..5254ab25b --- /dev/null +++ b/src/battle_util2.c @@ -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); + } +} -- cgit v1.2.3 From 1f986e65435c10f3d62b3777beb8acf712dcbbf2 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 30 Jul 2019 05:40:12 +0800 Subject: fixed incorrect comment --- src/battle_util2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle_util2.c') diff --git a/src/battle_util2.c b/src/battle_util2.c index 5254ab25b..83014a83b 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -19,7 +19,7 @@ void AllocateBattleResources(void) *ptr++ = AllocZeroed(8); while (--i >= 0); } - // TODO: Figure out whether 0x200 is really the size of *gBattleResources. + // TODO: Figure out whether 0x200 is really the size of *gBattleStruct. // The following works in pokeem: // gBattleStruct = AllocZeroed(sizeof(*gBattleStruct)); gBattleStruct = AllocZeroed(0x200); -- cgit v1.2.3 From c88c9c6edfb7122524b319e4601c5d2b97bf06ca Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 31 Jul 2019 07:57:24 +0800 Subject: progress #1 on porting battle_util --- src/battle_util2.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/battle_util2.c') diff --git a/src/battle_util2.c b/src/battle_util2.c index 83014a83b..6a3f3525b 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -19,10 +19,7 @@ void AllocateBattleResources(void) *ptr++ = AllocZeroed(8); while (--i >= 0); } - // TODO: Figure out whether 0x200 is really the size of *gBattleStruct. - // The following works in pokeem: - // gBattleStruct = AllocZeroed(sizeof(*gBattleStruct)); - gBattleStruct = AllocZeroed(0x200); + gBattleStruct = AllocZeroed(sizeof(*gBattleStruct)); gBattleResources = AllocZeroed(sizeof(*gBattleResources)); gBattleResources->secretBase = AllocZeroed(sizeof(*gBattleResources->secretBase)); gBattleResources->flags = AllocZeroed(sizeof(*gBattleResources->flags)); -- cgit v1.2.3 From 2599dac8ac8c12268fca902910bfe1aab40a68ca Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 29 Aug 2019 03:26:11 +0800 Subject: address review changes --- src/battle_util2.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'src/battle_util2.c') diff --git a/src/battle_util2.c b/src/battle_util2.c index 6a3f3525b..d940d8508 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -12,12 +12,10 @@ void AllocateBattleResources(void) InitTrainerTowerBattleStruct(); if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) { - void **ptr = gUnknown_3005EE0; - s32 i = 3; - - do - *ptr++ = AllocZeroed(8); - while (--i >= 0); + s32 i; + + for (i = 0; i < 4; ++i) + gUnknown_3005EE0[i] = AllocZeroed(8); } gBattleStruct = AllocZeroed(sizeof(*gBattleStruct)); gBattleResources = AllocZeroed(sizeof(*gBattleResources)); @@ -43,16 +41,12 @@ void FreeBattleResources(void) FreeTrainerTowerBattleStruct(); if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) { - void **ptr = gUnknown_3005EE0; - void *nullPtr = NULL; - s32 i = 3; - - do + s32 i; + + for (i = 0; i < 4; ++i) { - Free(*ptr); - *ptr++ = nullPtr; + FREE_AND_SET_NULL(gUnknown_3005EE0[i]); } - while (--i >= 0); } if (gBattleResources != NULL) { -- cgit v1.2.3