Index: src/client/cl_campaign.c =================================================================== --- src/client/cl_campaign.c (Revision 7917) +++ src/client/cl_campaign.c (Arbeitskopie) @@ -1712,6 +1712,8 @@ for (i = 0, mis = ccs.mission; i < ccs.numMissions; i++, mis++) { /* get mission definition */ name = MSG_ReadString(sb); + mis->def = NULL; + mis->cause = NULL; for (j = 0; j < numMissions; j++) if (!Q_strncmp(name, missions[j].name, MAX_VAR)) { mis->def = &missions[j]; @@ -1720,6 +1722,16 @@ if (j >= numMissions) Com_Printf("......warning: Mission '%s' not found\n", name); + /* ignore incomplete info */ + if (!mis->def) { + memset(mis, 0, sizeof(actMis_t)); + mis--; + i--; + ccs.numMissions--; + Com_Printf("......warning: Incomplete mission info\n"); + return qfalse; + } + /* get mission type and location */ mis->def->missionType = MSG_ReadByte(sb); mis->def->storyRelated = MSG_ReadByte(sb); @@ -1736,21 +1748,23 @@ if (j >= numStageSets) Com_Printf("......warning: Stage set '%s' not found\n", name); + /* ignore incomplete info */ + if (!mis->cause) { + memset(mis, 0, sizeof(actMis_t)); + mis--; + i--; + ccs.numMissions--; + Com_Printf("......warning: Incomplete mission info\n"); + return qfalse; + } + /* read position and time */ mis->realPos[0] = MSG_ReadFloat(sb); mis->realPos[1] = MSG_ReadFloat(sb); mis->expire.day = MSG_ReadLong(sb); mis->expire.sec = MSG_ReadLong(sb); + mis->def->onGeoscape = qtrue; - - /* ignore incomplete info */ - if (!mis->def || !mis->cause) { - memset(mis, 0, sizeof(actMis_t)); - mis--; - i--; - ccs.numMissions--; - Com_Printf("......ignore incomplete mission info\n"); - } /* manually set mission data for a base-attack */ if (mis->def->missionType == MIS_BASEATTACK) { /* Load IDX of base under attack */ @@ -1766,9 +1780,13 @@ /* stores the select mission on geoscape */ selectedMission = MSG_ReadLong(sb); - if (selectedMission >= 0) + if (selectedMission >= 0 && selectedMission < ccs.numMissions) { selMis = ccs.mission + selectedMission; - else + if (!selMis->def) { + Com_Printf("......warning: incomplete mission data\n"); + return qfalse; + } + } else selMis = NULL; /* and now fix the mission pointers or let the aircraft return to base */