Index: code/pilotfile/csg.cpp
===================================================================
--- code/pilotfile/csg.cpp	(revision 9657)
+++ code/pilotfile/csg.cpp	(working copy)
@@ -1328,6 +1328,13 @@
 
 	filename = buf.str().c_str();
 
+	// if campaign file doesn't exist, abort so we don't load irrelevant data
+	buf.str(std::string());
+	buf << base << FS_CAMPAIGN_FILE_EXT;
+	if ( !cf_exists_full((char*)buf.str().c_str(), CF_TYPE_MISSIONS) ) {
+		mprintf(("CSG => Unable to find campaign file '%s'!\n", buf.str().c_str()));
+		return false;
+	}
 
 	// we need to reset this early, in case open fails and we need to create
 	m_data_invalid = false;
Index: code/mission/missioncampaign.cpp
===================================================================
--- code/mission/missioncampaign.cpp	(revision 9657)
+++ code/mission/missioncampaign.cpp	(working copy)
@@ -655,6 +655,7 @@
 	Campaign.prev_mission = -1;
 	Campaign.current_mission = -1;
 	Campaign.loop_mission = CAMPAIGN_LOOP_MISSION_UNINITIALIZED;
+	Campaign.num_missions_completed = 0;
 
 	// loading the campaign will get us to the current and next mission that the player must fly
 	// plus load all of the old goals that future missions might rely on.
