ArticleStateTFTDArmor::ArticleStateTFTDArmor(ArticleDefinitionTFTD *defs) : ArticleStateTFTD(defs), _row(0) { Armor *armor = _game->getMod()->getArmor(defs->id); _lstInfo = new TextList(150, 64, 168, 110); add(_lstInfo); _lstInfo->setColor(Palette::blockOffset(0)+2); _lstInfo->setColumns(2, 125, 25); _lstInfo->setDot(true); // Add armor values addStat("STR_FRONT_ARMOR", armor->getFrontArmor()); addStat("STR_LEFT_ARMOR", armor->getSideArmor()); addStat("STR_RIGHT_ARMOR", armor->getSideArmor()); addStat("STR_REAR_ARMOR", armor->getRearArmor()); addStat("STR_UNDER_ARMOR", armor->getUnderArmor()); _lstInfo->addRow(0); ++_row; // Add damage modifiers for (int i = 0; i < DAMAGE_TYPES; ++i) { ItemDamageType dt = (ItemDamageType)i; int percentage = (int)Round(armor->getDamageModifier(dt) * 100.0f); std::string damage = getDamageTypeText(dt); if (percentage != 100 && damage != "STR_UNKNOWN") { addStat(damage, Text::formatPercentage(percentage)); } } _lstInfo->addRow(0); ++_row; // Add unit stats addStat("STR_TIME_UNITS", armor->getStats()->tu, true); addStat("STR_STAMINA", armor->getStats()->stamina, true); addStat("STR_HEALTH", armor->getStats()->health, true); addStat("STR_BRAVERY", armor->getStats()->bravery, true); addStat("STR_REACTIONS", armor->getStats()->reactions, true); addStat("STR_FIRING_ACCURACY", armor->getStats()->firing, true); addStat("STR_THROWING_ACCURACY", armor->getStats()->throwing, true); addStat("STR_MELEE_ACCURACY", armor->getStats()->melee, true); addStat("STR_STRENGTH", armor->getStats()->strength, true); addStat("STR_PSIONIC_STRENGTH", armor->getStats()->psiStrength, true); addStat("STR_PSIONIC_SKILL", armor->getStats()->psiSkill, true); centerAllSurfaces(); }
ArticleStateArmor::ArticleStateArmor(Game *game, ArticleDefinitionArmor *defs, int palSwitch) : ArticleState(game, defs->id, palSwitch) { Armor *armor = _game->getRuleset()->getArmor(defs->id); // add screen elements _txtTitle = new Text(300, 16, 5, 24); // Set palette _game->setPalette(_game->getResourcePack()->getPalette("PALETTES.DAT_4")->getColors()); ArticleState::initLayout(); // add other elements add(_txtTitle); // Set up objects _btnOk->setColor(Palette::blockOffset(0)+15); _btnPrev->setColor(Palette::blockOffset(0)+15); _btnNext->setColor(Palette::blockOffset(0)+15); _txtTitle->setColor(Palette::blockOffset(14)+15); _txtTitle->setBig(); _txtTitle->setText(Ufopaedia::buildText(_game, defs->title)); _image = new Surface(320, 200, 0, 0); add(_image); std::string look = armor->getSpriteInventory(); look += "M0.SPK"; if (!CrossPlatform::fileExists(CrossPlatform::getDataFile("UFOGRAPH/" + look))) { look = armor->getSpriteInventory() + ".SPK"; } _game->getResourcePack()->getSurface(look)->blit(_image); _lstInfo = new TextList(150, 60, 150, 69); add(_lstInfo); _lstInfo->setColor(Palette::blockOffset(14)+15); _lstInfo->setColumns(2, 125, 25); _lstInfo->setDot(true); std::wstringstream ss; ss.str(L"");ss.clear(); ss << armor->getFrontArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_FRONT_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(0, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getSideArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_LEFT_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(1, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getSideArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_RIGHT_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(2, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getRearArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_REAR_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(3, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getUnderArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_UNDER_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(4, 1, Palette::blockOffset(15)+4); _lstInfo->draw(); }
ArticleStateArmor::ArticleStateArmor(ArticleDefinitionArmor *defs) : ArticleState(defs->id), _row(0) { Armor *armor = _game->getMod()->getArmor(defs->id); // add screen elements _txtTitle = new Text(300, 17, 5, 24); // Set palette setPalette("PAL_BATTLEPEDIA"); ArticleState::initLayout(); // add other elements add(_txtTitle); // Set up objects _btnOk->setColor(Palette::blockOffset(0)+15); _btnPrev->setColor(Palette::blockOffset(0)+15); _btnNext->setColor(Palette::blockOffset(0)+15); _txtTitle->setColor(Palette::blockOffset(14)+15); _txtTitle->setBig(); _txtTitle->setText(tr(defs->title)); _image = new Surface(320, 200, 0, 0); add(_image); std::string look = armor->getSpriteInventory(); look += "M0.SPK"; if (!CrossPlatform::fileExists(FileMap::getFilePath("UFOGRAPH/" + look)) && !_game->getMod()->getSurface(look)) { look = armor->getSpriteInventory() + ".SPK"; } _game->getMod()->getSurface(look)->blit(_image); _lstInfo = new TextList(150, 96, 150, 46); add(_lstInfo); _lstInfo->setColor(Palette::blockOffset(14)+15); _lstInfo->setColumns(2, 125, 25); _lstInfo->setDot(true); _txtInfo = new Text(300, 56, 8, 150); add(_txtInfo); _txtInfo->setColor(Palette::blockOffset(14)+15); _txtInfo->setWordWrap(true); _txtInfo->setText(tr(defs->text)); // Add armor values addStat("STR_FRONT_ARMOR", armor->getFrontArmor()); addStat("STR_LEFT_ARMOR", armor->getSideArmor()); addStat("STR_RIGHT_ARMOR", armor->getSideArmor()); addStat("STR_REAR_ARMOR", armor->getRearArmor()); addStat("STR_UNDER_ARMOR", armor->getUnderArmor()); _lstInfo->addRow(0); ++_row; // Add damage modifiers for (int i = 0; i < Armor::DAMAGE_TYPES; ++i) { ItemDamageType dt = (ItemDamageType)i; int percentage = (int)Round(armor->getDamageModifier(dt) * 100.0f); std::string damage = getDamageTypeText(dt); if (percentage != 100 && damage != "STR_UNKNOWN") { addStat(damage, Text::formatPercentage(percentage)); } } _lstInfo->addRow(0); ++_row; // Add unit stats addStat("STR_TIME_UNITS", armor->getStats()->tu, true); addStat("STR_STAMINA", armor->getStats()->stamina, true); addStat("STR_HEALTH", armor->getStats()->health, true); addStat("STR_BRAVERY", armor->getStats()->bravery, true); addStat("STR_REACTIONS", armor->getStats()->reactions, true); addStat("STR_FIRING_ACCURACY", armor->getStats()->firing, true); addStat("STR_THROWING_ACCURACY", armor->getStats()->throwing, true); addStat("STR_MELEE_ACCURACY", armor->getStats()->melee, true); addStat("STR_STRENGTH", armor->getStats()->strength, true); addStat("STR_PSIONIC_STRENGTH", armor->getStats()->psiStrength, true); addStat("STR_PSIONIC_SKILL", armor->getStats()->psiSkill, true); centerAllSurfaces(); }
ArticleStateVehicle::ArticleStateVehicle(ArticleDefinitionVehicle *defs) : ArticleState(defs->id) { Unit *unit = _game->getMod()->getUnit(defs->id); Armor *armor = _game->getMod()->getArmor(unit->getArmor()); RuleItem *item = _game->getMod()->getItem(defs->id); // add screen elements _txtTitle = new Text(310, 17, 5, 23); _txtInfo = new Text(300, 150, 10, 122); _lstStats = new TextList(300, 89, 10, 48); // Set palette setPalette("PAL_UFOPAEDIA"); ArticleState::initLayout(); // add other elements add(_txtTitle); add(_txtInfo); add(_lstStats); // Set up objects _game->getMod()->getSurface("BACK10.SCR")->blit(_bg); _btnOk->setColor(Palette::blockOffset(5)); _btnPrev->setColor(Palette::blockOffset(5)); _btnNext->setColor(Palette::blockOffset(5)); _txtTitle->setColor(Palette::blockOffset(15)+4); _txtTitle->setBig(); _txtTitle->setText(tr(defs->title)); _txtInfo->setColor(Palette::blockOffset(15)-1); _txtInfo->setWordWrap(true); _txtInfo->setText(tr(defs->text)); _lstStats->setColor(Palette::blockOffset(15)+4); _lstStats->setColumns(2, 175, 145); _lstStats->setDot(true); std::wostringstream ss; ss << unit->getStats()->tu; _lstStats->addRow(2, tr("STR_TIME_UNITS").c_str(), ss.str().c_str()); std::wostringstream ss2; ss2 << unit->getStats()->health; _lstStats->addRow(2, tr("STR_HEALTH").c_str(), ss2.str().c_str()); std::wostringstream ss3; ss3 << armor->getFrontArmor(); _lstStats->addRow(2, tr("STR_FRONT_ARMOR").c_str(), ss3.str().c_str()); std::wostringstream ss4; ss4 << armor->getSideArmor(); _lstStats->addRow(2, tr("STR_LEFT_ARMOR").c_str(), ss4.str().c_str()); std::wostringstream ss5; ss5 << armor->getSideArmor(); _lstStats->addRow(2, tr("STR_RIGHT_ARMOR").c_str(), ss5.str().c_str()); std::wostringstream ss6; ss6 << armor->getRearArmor(); _lstStats->addRow(2, tr("STR_REAR_ARMOR").c_str(), ss6.str().c_str()); std::wostringstream ss7; ss7 << armor->getUnderArmor(); _lstStats->addRow(2, tr("STR_UNDER_ARMOR").c_str(), ss7.str().c_str()); _lstStats->addRow(2, tr("STR_WEAPON").c_str(), tr(defs->weapon).c_str()); if (!item->getCompatibleAmmo()->empty()) { RuleItem *ammo = _game->getMod()->getItem(item->getCompatibleAmmo()->front()); std::wostringstream ss8; ss8 << ammo->getPower(); _lstStats->addRow(2, tr("STR_WEAPON_POWER").c_str(), ss8.str().c_str()); _lstStats->addRow(2, tr("STR_AMMUNITION").c_str(), tr(ammo->getName()).c_str()); std::wostringstream ss9; if (item->getClipSize() > 0) { ss9 << item->getClipSize(); } else { ss9 << ammo->getClipSize(); } _lstStats->addRow(2, tr("STR_ROUNDS").c_str(), ss9.str().c_str()); _txtInfo->setY(138); } else { std::wostringstream ss8; ss8 << item->getPower(); _lstStats->addRow(2, tr("STR_WEAPON_POWER").c_str(), ss8.str().c_str()); } centerAllSurfaces(); }
ArticleStateVehicle::ArticleStateVehicle(Game *game, ArticleDefinitionVehicle *defs, int palSwitch) : ArticleState(game, defs->id, palSwitch) { Unit *unit = _game->getRuleset()->getUnit(defs->id); Armor *armor = _game->getRuleset()->getArmor(unit->getArmor()); RuleItem *item = _game->getRuleset()->getItem(defs->id); // add screen elements _txtTitle = new Text(310, 16, 5, 23); _txtInfo = new Text(300, 150, 10, 122); _lstStats = new TextList(300, 89, 10, 48); // Set palette _game->setPalette(_game->getResourcePack()->getPalette("PALETTES.DAT_3")->getColors()); // _game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(7)), Palette::backPos, 16); ArticleState::initLayout(); // add other elements add(_txtTitle); add(_txtInfo); add(_lstStats); // Set up objects _game->getResourcePack()->getSurface("BACK10.SCR")->blit(_bg); _btnOk->setColor(Palette::blockOffset(5)); _btnPrev->setColor(Palette::blockOffset(5)); _btnNext->setColor(Palette::blockOffset(5)); _txtTitle->setColor(Palette::blockOffset(15)+4); _txtTitle->setBig(); _txtTitle->setText(Ufopaedia::buildText(_game, defs->title)); _txtInfo->setColor(Palette::blockOffset(15)-1); _txtInfo->setWordWrap(true); _txtInfo->setText(Ufopaedia::buildText(_game, defs->text)); _lstStats->setColor(Palette::blockOffset(15)+4); _lstStats->setColumns(2, 175, 145); _lstStats->setDot(true); std::wstringstream ss; ss << unit->getStats()->tu; _lstStats->addRow(2, _game->getLanguage()->getString("STR_TIME_UNITS").c_str(), ss.str().c_str()); std::wstringstream ss2; ss2 << unit->getStats()->health; _lstStats->addRow(2, _game->getLanguage()->getString("STR_HEALTH").c_str(), ss2.str().c_str()); std::wstringstream ss3; ss3 << armor->getFrontArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_FRONT_ARMOR").c_str(), ss3.str().c_str()); std::wstringstream ss4; ss4 << armor->getSideArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_LEFT_ARMOR").c_str(), ss4.str().c_str()); std::wstringstream ss5; ss5 << armor->getSideArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_RIGHT_ARMOR").c_str(), ss5.str().c_str()); std::wstringstream ss6; ss6 << armor->getRearArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_REAR_ARMOR").c_str(), ss6.str().c_str()); std::wstringstream ss7; ss7 << armor->getUnderArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_UNDER_ARMOR").c_str(), ss7.str().c_str()); _lstStats->addRow(2, _game->getLanguage()->getString("STR_WEAPON").c_str(), _game->getLanguage()->getString(item->getName()).c_str()); std::wstringstream ss8; ss8 << unit->getStats()->tu; _lstStats->addRow(2, _game->getLanguage()->getString("STR_WEAPON_POWER").c_str(), ss8.str().c_str()); if (item->getClipSize() != -1) { RuleItem *ammo = _game->getRuleset()->getItem(item->getCompatibleAmmo()->front()); _lstStats->addRow(2, _game->getLanguage()->getString("STR_AMMUNITION").c_str(), _game->getLanguage()->getString(ammo->getName()).c_str()); std::wstringstream ss9; ss9 << ammo->getClipSize(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_ROUNDS").c_str(), ss9.str().c_str()); _txtInfo->setY(138); } }