summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-11-04 21:39:05 -0700
committerYamaArashi <shadow962@live.com>2016-11-04 21:39:05 -0700
commit02d3a612870cc1d3e6fc68676301d80904f88fa4 (patch)
tree56217e9a4c914adb1591f1331c94d5db2cd9add8 /src
parentd40d2d9372bdd99ec8f0d8608da9c31d02472f87 (diff)
use correct trainer party member structs
Diffstat (limited to 'src')
-rw-r--r--src/battle_setup.c102
1 files changed, 64 insertions, 38 deletions
diff --git a/src/battle_setup.c b/src/battle_setup.c
index f23e6da5e..f69596a3d 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -41,7 +41,7 @@ extern bool32 FieldPoisonEffectIsRunning(void);
extern bool32 GetSafariZoneFlag(void);
extern void player_bitmagic(void);
-u8 GetHigherOrLowerLevelTransitionForWild(void);
+u8 GetWildBattleTransition(void);
u8 sub_8082080(void);
bool32 battle_exit_is_player_defeat(u32 a1);
u8 *sub_808281C(void);
@@ -61,16 +61,41 @@ struct Trainer
/* 0x18 */ bool8 doubleBattle;
/* 0x1C */ u32 aiFlags;
/* 0x20 */ u8 partySize;
-/* 0x24 */ struct TrainerPartyMember *party;
+/* 0x24 */ void *party;
};
-struct TrainerPartyMember
+struct TrainerPartyMember0
{
u16 iv;
u8 level;
u16 species;
};
+struct TrainerPartyMember1
+{
+ u16 iv;
+ u8 level;
+ u16 species;
+ u16 moves[4];
+};
+
+struct TrainerPartyMember2
+{
+ u16 iv;
+ u8 level;
+ u16 species;
+ u16 heldItem;
+};
+
+struct TrainerPartyMember3
+{
+ u16 iv;
+ u8 level;
+ u16 species;
+ u16 heldItem;
+ u16 moves[4];
+};
+
struct TrainerBattleSpec
{
void *ptr;
@@ -199,7 +224,7 @@ void sub_8081A18(void)
sub_80597F4();
gMain.field_8 = sub_8081C8C;
gUnknown_020239F8 = 0;
- transition = GetHigherOrLowerLevelTransitionForWild();
+ transition = GetWildBattleTransition();
task_add_01_battle_start(transition, 0);
sav12_xor_increment(7);
sav12_xor_increment(8);
@@ -214,7 +239,7 @@ void sub_8081A5C(void)
sub_80597F4();
gMain.field_8 = sub_8081C8C;
gUnknown_020239F8 = 1024;
- transition = GetHigherOrLowerLevelTransitionForWild();
+ transition = GetWildBattleTransition();
task_add_01_battle_start(transition, 0);
sav12_xor_increment(7);
sav12_xor_increment(8);
@@ -229,7 +254,7 @@ void sub_8081AA4(void)
sub_80597F4();
gMain.field_8 = sub_80C824C;
gUnknown_020239F8 = 128;
- transition = GetHigherOrLowerLevelTransitionForWild();
+ transition = GetWildBattleTransition();
task_add_01_battle_start(transition, 0);
}
@@ -259,7 +284,7 @@ void sub_8081B3C(void)
ScriptContext2_Enable();
gMain.field_8 = sub_8081CEC;
gUnknown_020239F8 = 0;
- transition = GetHigherOrLowerLevelTransitionForWild();
+ transition = GetWildBattleTransition();
task_add_01_battle_start(transition, 0);
sav12_xor_increment(7);
sav12_xor_increment(8);
@@ -272,7 +297,7 @@ void sub_8081B78(void)
ScriptContext2_Enable();
gMain.field_8 = sub_8081CEC;
gUnknown_020239F8 = 0x2000;
- transition = GetHigherOrLowerLevelTransitionForWild();
+ transition = GetWildBattleTransition();
task_add_01_battle_start(transition, 0);
sav12_xor_increment(7);
sav12_xor_increment(8);
@@ -422,70 +447,71 @@ s8 sub_8081E90(void)
return 3;
}
-u16 GetSumOfPartyMonLevel(u8 fixCount)
+u16 GetSumOfPartyMonLevel(u8 numMons)
{
u32 monData;
- u8 returnThis = 0;
- int loopCounter;
+ u8 sum = 0;
+ int i;
- for (loopCounter = 0; loopCounter <= 5; loopCounter++)
+ for (i = 0; i < 6; i++)
{
- monData = GetMonData(&gPlayerParty[loopCounter], MON_DATA_SPECIES2);
- if (monData != 412 && monData) // if the pokemon in question is either NOT Ten question marks or an egg, proceed
- // note that it actually considers the 26 glitch mons to be "valid".
+ monData = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ if (monData != 412 && monData)
{
- if (GetMonData(&gPlayerParty[loopCounter], MON_DATA_HP))
+ if (GetMonData(&gPlayerParty[i], MON_DATA_HP))
{
- returnThis += GetMonData(&gPlayerParty[loopCounter], MON_DATA_LEVEL);
+ sum += GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
- fixCount--;
- if (!fixCount) // has it reached 0?
+ numMons--;
+ if (numMons == 0)
break;
}
}
}
- return returnThis;
+
+ return sum;
}
-u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 partyCount)
+u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons)
{
- // TODO: Clean this up.
u8 i;
- u8 returnThis; // v4
- u32 _partyCount = partyCount;
- struct TrainerPartyMember *party;
+ u8 sum;
+ u32 count = numMons;
+ void *party;
- if (gTrainers[trainerNum].partySize < _partyCount) // is the actual party size smaller than the specified size?
- _partyCount = gTrainers[trainerNum].partySize; // if so, set the specified size to the actual size. seems to be error correction?
+ if (gTrainers[trainerNum].partySize < count)
+ count = gTrainers[trainerNum].partySize;
+
+ sum = 0;
- returnThis = 0;
switch (gTrainers[trainerNum].partyFlags)
{
case 0:
party = gTrainers[trainerNum].party;
- for(i = 0; i < _partyCount; i++)
- returnThis += party[i].level;
+ for(i = 0; i < count; i++)
+ sum += ((struct TrainerPartyMember0 *)party)[i].level;
break;
case 1:
party = gTrainers[trainerNum].party;
- for(i = 0; i < _partyCount; i++)
- returnThis += party[i * 2].level;
+ for(i = 0; i < count; i++)
+ sum += ((struct TrainerPartyMember1 *)party)[i].level;
break;
case 2:
party = gTrainers[trainerNum].party;
- for(i = 0; i < _partyCount; i++)
- returnThis += party[i].level;
+ for(i = 0; i < count; i++)
+ sum += ((struct TrainerPartyMember2 *)party)[i].level;
break;
case 3:
party = gTrainers[trainerNum].party;
- for(i = 0; i < _partyCount; i++)
- returnThis += party[i * 2].level;
+ for(i = 0; i < count; i++)
+ sum += ((struct TrainerPartyMember3 *)party)[i].level;
break;
}
- return returnThis;
+
+ return sum;
}
-u8 GetHigherOrLowerLevelTransitionForWild(void)
+u8 GetWildBattleTransition(void)
{
u8 flashVar = sub_8081E90();
u8 level = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);