/** * @brief Spread XVI at a given position. * @param[in] pos Position where XVI should be spread. */ void CP_SpreadXVIAtPos (const vec2_t pos) { if (!CP_IsXVIStarted()) return; CP_ChangeXVILevel(pos, XVI_FACTOR); xviNationInfectionNeedsUpdate = true; }
/** * @brief Intercept mission is over and is a success: change interest values. * @note Intercept mission */ void CP_InterceptMissionIsSuccess (mission_t* mission) { INT_ChangeIndividualInterest(0.3f, INTERESTCATEGORY_RECON); INT_ChangeIndividualInterest(-0.3f, INTERESTCATEGORY_INTERCEPT); INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_HARVEST); if (CP_IsXVIStarted()) INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_XVI); CP_MissionRemove(mission); }
/** * @brief Harvesting mission is over and is a success: change interest values. * @note Harvesting mission */ static void CP_HarvestMissionIsSuccess (mission_t* mission) { INT_ChangeIndividualInterest(-0.3f, INTERESTCATEGORY_HARVEST); INT_ChangeIndividualInterest(0.2f, INTERESTCATEGORY_RECON); INT_ChangeIndividualInterest(0.05f, INTERESTCATEGORY_BUILDING); if (CP_IsXVIStarted()) INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_XVI); CP_MissionRemove(mission); }
/** * @brief Recon mission is over and is a success: change interest values. * @note Recon mission */ static void CP_ReconMissionIsSuccess (mission_t *mission) { INT_ChangeIndividualInterest(-0.2f, INTERESTCATEGORY_RECON); INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_HARVEST); if (AB_GetAlienBaseNumber()) INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_SUPPLY); if (CP_IsXVIStarted()) INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_XVI); CP_MissionRemove(mission); }
/** * @brief Spread XVI for each mission that needs to be daily spread. * @note Daily called */ void CP_SpreadXVI (void) { /* don't check if XVI spreading didn't start yet */ if (!CP_IsXVIStarted()) return; MIS_Foreach(mission) { if (mission->stage == STAGE_SPREAD_XVI) CP_SpreadXVIAtPos(mission->pos); } }
/** * @brief Reduce XVI everywhere. * @note This is called daily. */ void CP_ReduceXVIEverywhere (void) { if (!CP_IsXVIStarted()) return; /* Only decrease XVI if given days has passed */ if (ccs.date.day % XVI_DECREASE_DAYS) return; CP_DecreaseXVILevelEverywhere(); xviNationInfectionNeedsUpdate = true; }
/** * @brief Build Base mission is over and is a success (from an alien point of view): change interest values. * @note Build Base mission */ void CP_BuildBaseMissionIsSuccess (mission_t* mission) { if (CP_BasemissionIsSubvertingGovernmentMission(mission)) { /* This is a subverting government mission */ INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_TERROR_ATTACK); } else { /* An alien base has been built */ const alienBase_t* base = mission->data.alienBase; assert(base); CP_SpreadXVIAtPos(base->pos); if (CP_IsXVIStarted()) INT_ChangeIndividualInterest(0.4f, INTERESTCATEGORY_XVI); INT_ChangeIndividualInterest(0.4f, INTERESTCATEGORY_SUPPLY); INT_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_HARVEST); } CP_MissionRemove(mission); }