New SMAC quizzes available.Test your Alpha Centauri knowledge! Chess is back.Challenge someone!
0 Members and 1 Guest are viewing this topic.
Calculate specified faction's best available weapon and armor ratings as well as the fastest moving ground Veh chassis. Compare these capabilities to faction's best opponent capabilities based on current diplomacy.
void __cdecl enemy_capabilities(int factionID) { BOOL hasWorms = veh_avail(BSC_MIND_WORMS, factionID, -1); PlayersData[factionID].bestPsiAtkVal = hasWorms ? weap_strat(WPN_PSI_ATTACK, factionID) : 0; PlayersData[factionID].bestWeaponVal = 1; for (int i = 0; i < MaxWeaponNum; i++) { if (has_tech(Weapon.preqTech, factionID) && Weapon.offenseRating < 99) { int weapVal = weap_strat(i, factionID); if (Weapon.offenseRating < 0 && weapVal > PlayersData[factionID].bestPsiAtkVal) { PlayersData[factionID].bestPsiAtkVal = weapVal; } if (weapVal > PlayersData[factionID].bestWeaponVal) { PlayersData[factionID].bestWeaponVal = weapVal; } } } PlayersData[factionID].bestPsiDefVal = hasWorms ? arm_strat(ARM_PSI_DEFENSE, factionID) : 0; PlayersData[factionID].bestArmorVal = 1; for (int i = 0; i < MaxArmorNum; i++) { if (has_tech(Armor.preqTech, factionID)) { int armVal = arm_strat(i, factionID); if (Armor.defenseRating < 0 && armVal > PlayersData[factionID].bestPsiDefVal) { PlayersData[factionID].bestPsiDefVal = armVal; } if (armVal > PlayersData[factionID].bestArmorVal) { PlayersData[factionID].bestArmorVal = armVal; } } } PlayersData[factionID].bestLandSpeed = 1; for (int i = 0; i < MaxChassisNum; i++) { if (has_tech(Chassis.preqTech, factionID) && Chassis.triad == TRIAD_LAND) { if (Chassis.speed > PlayersData[factionID].bestLandSpeed) { PlayersData[factionID].bestLandSpeed = Chassis.speed; } } } PlayersData[factionID].enemyBestWeaponVal = 0; PlayersData[factionID].enemyBestArmorVal = 0; PlayersData[factionID].enemyBestLandSpeed = 0; PlayersData[factionID].enemyBestPsiAtkVal = 0; PlayersData[factionID].enemyBestPsiDefVal = 0; for (int i = 0; i < 4 && !PlayersData[factionID].enemyBestWeaponVal; i++) { // 1st pass: vendetta, no treaty, has commlink // 2nd pass: no treaty, has commlink // 3rd pass: has commlink // 4th pass: any non-pact faction for (int j = 1, diploStat; j < MaxPlayerNum; j++) { if (j != factionID && (diploStat = PlayersData.diploStatus[j], !(diploStat & DSTATUS_PACT)) && ((!i && diploStat & DSTATUS_VENDETTA && !(diploStat & DSTATUS_TREATY) && diploStat & DSTATUS_COMMLINK) || (i == 1 && !(diploStat & DSTATUS_TREATY) && diploStat & DSTATUS_COMMLINK) || (i == 2 && diploStat & DSTATUS_COMMLINK) || (i == 3))) { if (PlayersData[factionID].enemyBestWeaponVal < PlayersData[j].bestWeaponVal) { PlayersData[factionID].enemyBestWeaponVal = PlayersData[j].bestWeaponVal; } if (PlayersData[factionID].enemyBestArmorVal < PlayersData[j].bestArmorVal) { PlayersData[factionID].enemyBestArmorVal = PlayersData[j].bestArmorVal; } if (PlayersData[factionID].enemyBestLandSpeed < PlayersData[j].bestLandSpeed) { PlayersData[factionID].enemyBestLandSpeed = PlayersData[j].bestLandSpeed; } if (PlayersData[factionID].enemyBestPsiAtkVal < PlayersData[j].bestPsiAtkVal) { PlayersData[factionID].enemyBestPsiAtkVal = PlayersData[j].bestPsiAtkVal; } if (PlayersData[factionID].enemyBestPsiDefVal < PlayersData[j].bestPsiDefVal) { PlayersData[factionID].enemyBestPsiDefVal = PlayersData[j].bestPsiDefVal; } } } }}
Can this explain the AI's completely useless fixation on designing many kinds of units with Empath Song? There's generally no value in it. A simple Scout will defeat a mindworm, at the cost of wounding itself some maybe. If I were hitting the AI with 3 billion mindworms and they thought they were going to get to counterattack me, then maybe I could see the point. That's not generally been my force mix and yet, so many anti-mindworm units.Hypnotic Trance makes a lot more sense. If it's mindworm combat, it's going to be a mindworm attacking, because that's how the game is designed.