bool Game_Actor::UseItem(int item_id, const Game_Battler* source) { const RPG::Item* item = ReaderUtil::GetElement(Data::items, item_id); if (!item) { Output::Warning("UseItem: Can't use invalid item %d", item_id); return false; } if (IsDead() && item->type != RPG::Item::Type_medicine) { return false; } if (item->type == RPG::Item::Type_book) { return LearnSkill(item->skill_id); } if (item->type == RPG::Item::Type_material) { SetBaseMaxHp(GetBaseMaxHp() + item->max_hp_points); SetBaseMaxSp(GetBaseMaxSp() + item->max_sp_points); SetBaseAtk(GetBaseAtk() + item->atk_points2); SetBaseDef(GetBaseDef() + item->def_points2); SetBaseAgi(GetBaseAgi() + item->agi_points2); SetBaseSpi(GetBaseSpi() + item->spi_points2); return true; } return Game_Battler::UseItem(item_id, source); }
int Game_Battler::GetSpi() const { int base_spi = GetBaseSpi(); int n = min(max(base_spi, 1), 999); const std::vector<int16_t>& states = GetStates(); for (std::vector<int16_t>::const_iterator i = states.begin(); i != states.end(); i++) { if(Data::states[(*i)].affect_spirit) { n = AffectParameter(Data::states[(*i)].affect_type, base_spi); break; } } n = min(max(n, 1), 999); return n; }
int Game_Battler::GetSpi() const { int base_spi = GetBaseSpi(); int n = min(max(base_spi, 1), 999); for (int16_t i : GetInflictedStates()) { // States are guaranteed to be valid const RPG::State& state = *ReaderUtil::GetElement(Data::states, i); if (state.affect_spirit) { n = AffectParameter(state.affect_type, base_spi); break; } } n += spi_modifier; n = min(max(n, 1), 999); return n; }
void Game_Actor::SetBaseSpi(int spi) { data.spirit_mod += spi - GetBaseSpi(); }
int Game_Actor::GetBaseSpi() const { return GetBaseSpi(true, true); }
void Game_Actor::SetBaseSpi(int spi) { int new_spirit_mod = GetData().spirit_mod + (spi - GetBaseSpi()); GetData().spirit_mod = new_spirit_mod; }