diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2008-09-25 22:55:25 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2008-09-25 22:55:25 +0000 |
| commit | 64730b32e2c595469eb23e9cd40332b4a80e3e27 (patch) | |
| tree | a75a17a7c7ac78e2e323e1cdecef8f6a3939f844 /sigbattle | |
| parent | 4c4fdc8d4540bd1bd52021b502f05f27a8ef98e1 (diff) | |
| download | sigen-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.cpp | 2 | ||||
| -rw-r--r-- | sigbattle/TeamMember.cpp | 31 | ||||
| -rw-r--r-- | sigbattle/TeamMember.h | 6 |
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; |
