Example #1
0
/**
 * @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);
}
Example #2
0
/**
 * @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;
}
Example #3
0
/**
 * @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);
}
Example #4
0
/**
 * @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;
}
Example #5
0
/**
 * @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;
	}
}