summaryrefslogtreecommitdiffstats
path: root/sigbattle
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-09-25 22:55:25 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-09-25 22:55:25 +0000
commit64730b32e2c595469eb23e9cd40332b4a80e3e27 (patch)
treea75a17a7c7ac78e2e323e1cdecef8f6a3939f844 /sigbattle
parent4c4fdc8d4540bd1bd52021b502f05f27a8ef98e1 (diff)
downloadsigen-64730b32e2c595469eb23e9cd40332b4a80e3e27.tar.gz
sigen-64730b32e2c595469eb23e9cd40332b4a80e3e27.tar.xz
sigen-64730b32e2c595469eb23e9cd40332b4a80e3e27.zip
[FIX] Removed *_End defines
[FIX] Added weights to items and associated fields [FIX] Option for pausing during ATB battles when choosing moves added git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@267 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'sigbattle')
-rw-r--r--sigbattle/ATBTimer.cpp2
-rw-r--r--sigbattle/TeamMember.cpp31
-rw-r--r--sigbattle/TeamMember.h6
3 files changed, 27 insertions, 12 deletions
diff --git a/sigbattle/ATBTimer.cpp b/sigbattle/ATBTimer.cpp
index ad00e2d3..d4d6ac02 100644
--- a/sigbattle/ATBTimer.cpp
+++ b/sigbattle/ATBTimer.cpp
@@ -32,6 +32,8 @@
// STL includes
#include <functional>
+// TODO: Obey the options about pausing
+
bool Sigbattle::compareTimers(TeamMember* const & member1, TeamMember* const & member2)
{
return member1->timer() < member2->timer();
diff --git a/sigbattle/TeamMember.cpp b/sigbattle/TeamMember.cpp
index 2210d7c1..b0742380 100644
--- a/sigbattle/TeamMember.cpp
+++ b/sigbattle/TeamMember.cpp
@@ -105,7 +105,7 @@ Sigbattle::TeamMember::TeamMember(const int speciesId, const QString& name, cons
m_gender = (m_species->genderFactor().poll() ? Male : Female);
else
m_gender = Genderless;
- for (int i = 0; i < Sigmod::ST_End_GSC; ++i)
+ for (int i = 0; i <= Sigmod::ST_SpecialDefense; ++i)
m_statExp[i] = 0;
if (m_containment->isMutable())
{
@@ -140,7 +140,7 @@ Sigbattle::TeamMember::TeamMember(Sigscript::MapTrainerTeamMemberWrapper* teamMe
m_gender = (m_species->genderFactor().poll() ? Male : Female);
else
m_gender = Genderless;
- for (int i = 0; i < Sigmod::ST_End_GSC; ++i)
+ for (int i = 0; i <= Sigmod::ST_SpecialDefense; ++i)
m_statExp[i] = 0;
m_currentHp = statValue(Sigmod::ST_HP);
}
@@ -330,8 +330,8 @@ void Sigbattle::TeamMember::boostLevels(const int levels)
void Sigbattle::TeamMember::evolveInto(Sigscript::SpeciesWrapper* newSpecies)
{
emit(evolveStart());
- int oldStats[Sigmod::ST_End_GSC] = {};
- int newStats[Sigmod::ST_End_GSC] = {};
+ int oldStats[Sigmod::ST_SpecialDefense - Sigmod::ST_HP + 1] = {};
+ int newStats[Sigmod::ST_SpecialDefense - Sigmod::ST_HP + 1] = {};
oldStats[Sigmod::ST_Attack] = statValue(Sigmod::ST_Attack);
oldStats[Sigmod::ST_Defense] = statValue(Sigmod::ST_Defense);
oldStats[Sigmod::ST_Speed] = statValue(Sigmod::ST_Speed);
@@ -433,13 +433,12 @@ void Sigbattle::TeamMember::giveLevelExp(const int exp)
void Sigbattle::TeamMember::giveStatExp(const Sigmod::Stat stat, const int exp)
{
- Q_ASSERT(stat < (sigmod()->rules()->specialSplit() ? Sigmod::ST_End_GSC : Sigmod::ST_End_RBY));
const int oldStat = statValue(stat);
int expToGive = exp;
if (sigmod()->rules()->effortValuesAllowed())
{
int totalEV = 0;
- for (int i = 0; i < Sigmod::ST_End_GSC; ++i)
+ for (int i = 0; i <= Sigmod::ST_SpecialDefense; ++i)
totalEV += m_statExp[i];
while (expToGive && (totalEV < sigmod()->rules()->maxTotalEV()) && (m_statExp[stat] < sigmod()->rules()->maxEVPerStat()))
{
@@ -472,7 +471,7 @@ void Sigbattle::TeamMember::takeItem(Sigscript::ItemWrapper* item)
void Sigbattle::TeamMember::giveItem(Sigscript::ItemWrapper* item)
{
- if (m_items.size() < sigmod()->rules()->maxHeldItems())
+ if ((m_items.size() < sigmod()->rules()->maxHeldItems()) && checkWeight(item))
{
m_items.append(item);
emit(itemGiven(item));
@@ -602,6 +601,14 @@ void Sigbattle::TeamMember::levelGrown()
}
}
+bool Sigbattle::TeamMember::checkWeight(const Sigscript::ItemWrapper* item)
+{
+ int totalWeight = item->weight();
+ foreach (Sigscript::ItemWrapper* item, m_items)
+ totalWeight += item->weight();
+ return (totalWeight <= species()->maxHoldWeight());
+}
+
void Sigbattle::TeamMember::makeConnections()
{
// TODO: make connections that are necessary (watching Config changes mainly)
@@ -627,7 +634,11 @@ void Sigbattle::TeamMember::initItems()
for (int i = 0; i < sigmod()->rules()->maxHeldItems(); ++i)
{
if (m_species->itemChance().poll())
- m_items.append(hat.pick());
+ {
+ Sigscript::ItemWrapper* item = hat.pick();
+ if (checkWeight(item))
+ m_items.append(item);
+ }
}
}
@@ -671,12 +682,12 @@ void Sigbattle::TeamMember::initStats()
{
if (sigmod()->rules()->specialDVSplit())
{
- for (int i = 0; i < Sigmod::ST_End_GSC; ++i)
+ for (int i = Sigmod::ST_HP; i <= Sigmod::ST_SpecialDefense; ++i)
m_dv[i] = qrand() & 31;
}
else
{
- for (int i = Sigmod::ST_No_HP_Start; i < Sigmod::ST_End_RBY; ++i)
+ for (int i = Sigmod::ST_Attack; i <= Sigmod::ST_Special; ++i)
m_dv[i] = qrand() & 15;
m_dv[Sigmod::ST_HP] = ((m_dv[Sigmod::ST_Attack] & 1) << 3) + ((m_dv[Sigmod::ST_Defense] & 1) << 2) + ((m_dv[Sigmod::ST_Speed] & 1) << 1) + (m_dv[Sigmod::ST_Special] & 1);
}
diff --git a/sigbattle/TeamMember.h b/sigbattle/TeamMember.h
index f0416460..2104bc2f 100644
--- a/sigbattle/TeamMember.h
+++ b/sigbattle/TeamMember.h
@@ -169,6 +169,8 @@ class SIGBATTLE_EXPORT TeamMember : public Sigscript::Config
private slots:
void levelGrown();
protected:
+ bool checkWeight(const Sigscript::ItemWrapper* item);
+
Containment* m_containment;
const QUuid m_id;
@@ -179,8 +181,8 @@ class SIGBATTLE_EXPORT TeamMember : public Sigscript::Config
Gender m_gender;
long long m_levelExp;
int m_level;
- long long m_statExp[Sigmod::ST_End_GSC];
- int m_dv[Sigmod::ST_End_GSC];
+ long long m_statExp[Sigmod::ST_SpecialDefense - Sigmod::ST_HP + 1];
+ int m_dv[Sigmod::ST_SpecialDefense - Sigmod::ST_HP + 1];
QMultiMap<Sigscript::StatusWrapper*, Kross::Action*> m_status;
QMap<Sigscript::AbilityWrapper*, Kross::Action*> m_abilities;
QList<Sigscript::ItemWrapper*> m_items;