/** * @brief Choose if the mission should be an alien infiltration or a build base mission. * @note Build Base mission -- Stage 1 */ static void CP_BuildBaseChooseMission (mission_t* mission) { if (CP_BasemissionIsSubvertingGovernmentMission(mission)) CP_ReconMissionGroundGo(mission); else CP_BuildBaseGoToBase(mission); }
/** * @brief Fill an array with available UFOs for build base mission type. * @param[in] mission Pointer to the mission we are currently creating. * @param[out] ufoTypes Array of ufoType_t that may be used for this mission. * @note Base Attack mission -- Stage 0 * @return number of elements written in @c ufoTypes */ int CP_BuildBaseMissionAvailableUFOs (const mission_t const *mission, ufoType_t *ufoTypes) { int num = 0; if (CP_BasemissionIsSubvertingGovernmentMission(mission)) { /* This is a subverting government mission */ ufoTypes[num++] = UFO_SCOUT; } else { /* This is a Building base mission */ ufoTypes[num++] = UFO_SUPPLY; } return num; }
/** * @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 */ CL_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); CL_ChangeIndividualInterest(0.4f, INTERESTCATEGORY_XVI); CL_ChangeIndividualInterest(0.4f, INTERESTCATEGORY_SUPPLY); CL_ChangeIndividualInterest(0.1f, INTERESTCATEGORY_HARVEST); } CP_MissionRemove(mission); }
/** * @brief Fill an array with available UFOs for build base mission type. * @param[in] mission Pointer to the mission we are currently creating. * @param[out] ufoTypes Array of ufoType_t that may be used for this mission. * @note Base Attack mission -- Stage 0 * @return number of elements written in @c ufoTypes */ int CP_BuildBaseMissionAvailableUFOs (const mission_t *mission, ufoType_t *ufoTypes) { int num = 0; if (CP_BasemissionIsSubvertingGovernmentMission(mission)) { /* This is a subverting government mission */ if (UFO_ShouldAppearOnGeoscape(UFO_SCOUT)) ufoTypes[num++] = UFO_SCOUT; if (UFO_ShouldAppearOnGeoscape(UFO_HARVESTER)) ufoTypes[num++] = UFO_HARVESTER; if (UFO_ShouldAppearOnGeoscape(UFO_CORRUPTER)) ufoTypes[num++] = UFO_CORRUPTER; } else { /* This is a Building base mission */ if (UFO_ShouldAppearOnGeoscape(UFO_SUPPLY)) ufoTypes[num++] = UFO_SUPPLY; } return num; }
/** * @brief Determine what action should be performed when a Build Base mission stage ends. * @param[in] campaign The campaign data structure * @param[in] mission Pointer to the mission which stage ended. */ void CP_BuildBaseMissionNextStage (const campaign_t* campaign, mission_t* mission) { switch (mission->stage) { case STAGE_NOT_ACTIVE: /* Create mission */ CP_MissionBegin(mission); break; case STAGE_COME_FROM_ORBIT: /* Choose type of mission */ CP_BuildBaseChooseMission(mission); break; case STAGE_MISSION_GOTO: if (CP_BasemissionIsSubvertingGovernmentMission(mission)) /* subverting mission */ CP_BuildBaseSubvertGovernment(mission); else /* just arrived on base location: build base */ CP_BuildBaseSetUpBase(mission); break; case STAGE_BUILD_BASE: /* Leave earth */ CP_BuildBaseMissionLeave(mission); break; case STAGE_SUBVERT_GOV: /* Leave earth */ CP_BuildBaseGovernmentLeave(campaign, mission); break; case STAGE_RETURN_TO_ORBIT: /* mission is over, remove mission */ CP_BuildBaseMissionIsSuccess(mission); break; default: Com_Printf("CP_BuildBaseMissionNextStage: Unknown stage: %i, removing mission.\n", mission->stage); CP_MissionRemove(mission); break; } }