/** * @brief Determine what action should be performed when a Terror attack mission stage ends. * @param[in] mission Pointer to the mission which stage ended. */ void CP_TerrorMissionNextStage (mission_t *mission) { switch (mission->stage) { case STAGE_NOT_ACTIVE: /* Create Terror attack mission */ CP_MissionBegin(mission); break; case STAGE_COME_FROM_ORBIT: /* Go to mission */ CP_TerrorMissionGo(mission); break; case STAGE_MISSION_GOTO: /* just arrived on a new Terror attack mission: start it */ CP_TerrorMissionStart(mission); break; case STAGE_TERROR_MISSION: /* Leave earth */ CP_ReconMissionLeave(mission); break; case STAGE_RETURN_TO_ORBIT: /* mission is over, remove mission */ CP_TerrorMissionIsSuccess(mission); break; default: Com_Printf("CP_TerrorMissionNextStage: Unknown stage: %i, removing mission.\n", mission->stage); CP_MissionRemove(mission); break; } }
static void SCP_CampaignAddMission (setState_t *set) { actMis_t *mis; mission_t * mission; const nation_t *nation; /* add mission */ if (scd->numActiveMissions >= MAX_ACTMISSIONS) { return; } mis = &scd->activeMissions[scd->numActiveMissions]; OBJZERO(*mis); /* set relevant info */ mis->def = SCP_GetMission(set); if (mis->def == NULL) { return; } mis->cause = set; if (set->def->expire.day) mis->expire = Date_Add(ccs.date, set->def->expire); /* prepare next event (if any) */ set->num++; if (set->def->number && set->num >= set->def->number) { set->active = false; } else { const date_t minTime = {0, 0}; set->event = Date_Add(ccs.date, Date_Random(minTime, set->def->frame)); } mission = CP_CreateNewMission(INTERESTCATEGORY_TERROR_ATTACK, true); mission->mapDef = cgi->Com_GetMapDefinitionByID(mis->def->id); if (!mission->mapDef) { Com_Printf("SCP_CampaignAddMission: Could not get the mapdef '%s'\n", mis->def->id); CP_MissionRemove(mission); return; } Vector2Copy(mis->def->pos, mission->pos); mission->posAssigned = true; nation = MAP_GetNation(mission->pos); if (nation) { Com_sprintf(mission->location, sizeof(mission->location), "%s", _(nation->name)); } else { Com_sprintf(mission->location, sizeof(mission->location), "%s", _("No nation")); } CP_TerrorMissionStart(mission); mission->finalDate = mis->expire; mis->mission = mission; Com_Printf("spawned map '%s'\n", mis->def->id); scd->numActiveMissions++; }