Index: code/mission/missioncampaign.cpp
===================================================================
RCS file: /home/fs2source/cvsroot/fs2_open/code/mission/missioncampaign.cpp,v
retrieving revision 2.51
diff -u -p -r2.51 missioncampaign.cpp
--- code/mission/missioncampaign.cpp	21 Mar 2007 21:06:54 -0000	2.51
+++ code/mission/missioncampaign.cpp	24 Mar 2007 23:18:48 -0000
@@ -477,7 +477,8 @@ campaign Campaign;
 // bumped to 13 by Goober5000 for persistent variables
 // bumped to 14 by taylor for ship/weapon table handling
 // bumped to 15 by taylor to move stuff from pilot file
-#define CAMPAIGN_FILE_VERSION							15
+// bumped to 16 by cmb for SUBSYSTEM_MAX increment
+#define CAMPAIGN_FILE_VERSION							16
 //#define CAMPAIGN_FILE_COMPATIBLE_VERSION		CAMPAIGN_INITIAL_RELEASE_FILE_VERSION
 #define CAMPAIGN_FILE_COMPATIBLE_VERSION				12  // 12 is the version of the original FS2
 #define CAMPAIGN_FILE_ID								0xbeefcafe
@@ -1752,7 +1753,7 @@ int mission_campaign_savefile_load( char
 		pl->main_hall = cfread_ubyte(fp);
 	
 		// red-alert wingman status
-		red_alert_read_wingman_status_campaign(fp, s_name, w_name);
+		red_alert_read_wingman_status_campaign(fp, s_name, w_name, version);
 
 		// begin techroom data -------------------------------------------------
 		int intel_count;
Index: code/missionui/redalert.cpp
===================================================================
RCS file: /home/fs2source/cvsroot/fs2_open/code/missionui/redalert.cpp,v
retrieving revision 2.24
diff -u -p -r2.24 redalert.cpp
--- code/missionui/redalert.cpp	22 Mar 2007 20:47:33 -0000	2.24
+++ code/missionui/redalert.cpp	24 Mar 2007 23:18:48 -0000
@@ -1001,7 +1001,7 @@ void red_alert_bash_wingman_status()
 }
 
 // write wingman status out to the specified file
-void red_alert_write_wingman_status(CFILE *fp)
+void red_alert_write_wingman_status(CFILE *fp, ubyte is_multi)
 {
 	int				i, j;
 	red_alert_ship_status *ras;
@@ -1025,7 +1025,7 @@ void red_alert_write_wingman_status(CFIL
 			cfwrite_float(ras->subsys_current_hits[j], fp);
 		}
 
-		for ( j = 0; j < SUBSYSTEM_MAX; j++ ) {
+		for ( j = 0; j < (is_multi ? 12 : SUBSYSTEM_MAX); j++ ) {
 			cfwrite_float(ras->subsys_aggregate_current_hits[j], fp);
 		}
 
@@ -1078,6 +1078,8 @@ void red_alert_read_wingman_status(CFILE
 	int				i, j;
 	red_alert_ship_status *ras;
 	char tname[NAME_LENGTH];
+	int				s = ( version < 243 ) ? 12
+						: SUBSYSTEM_MAX;
 
 	Red_alert_num_slots_used = cfread_int(fp);
 
@@ -1102,9 +1104,12 @@ void red_alert_read_wingman_status(CFILE
 			ras->subsys_current_hits[j] = cfread_float(fp);
 		}
 
-		for ( j = 0; j < SUBSYSTEM_MAX; j++ ) {
+		for ( j = 0; j < s; j++ ) {
 			ras->subsys_aggregate_current_hits[j] = cfread_float(fp);
 		}
+		for ( j = s; j < SUBSYSTEM_MAX; j++ ) {
+			ras->subsys_aggregate_current_hits[j] = 0.0f;
+		}
 
 		for ( j = 0; j < MAX_SHIP_WEAPONS; j++ ) {
 			if (version >= 142) {
@@ -1119,11 +1124,13 @@ void red_alert_read_wingman_status(CFILE
 }
 
 // same basic thing as the above but for read from the campaign file - taylor
-void red_alert_read_wingman_status_campaign(CFILE *fp, char ships[][NAME_LENGTH], char weapons[][NAME_LENGTH])
+void red_alert_read_wingman_status_campaign(CFILE *fp, char ships[][NAME_LENGTH], char weapons[][NAME_LENGTH], int version)
 {
 	int				i, j;
 	red_alert_ship_status *ras;
 	int ras_tmp = -1;
+	int				s = ( version < 16 ) ? 12
+						: SUBSYSTEM_MAX;
 
 	Red_alert_num_slots_used = cfread_int(fp);
 
@@ -1150,9 +1157,12 @@ void red_alert_read_wingman_status_campa
 			ras->subsys_current_hits[j] = cfread_float(fp);
 		}
 
-		for ( j = 0; j < SUBSYSTEM_MAX; j++ ) {
+		for ( j = 0; j < s; j++ ) {
 			ras->subsys_aggregate_current_hits[j] = cfread_float(fp);
 		}
+		for ( j = s; j < SUBSYSTEM_MAX; j++ ) {
+			ras->subsys_aggregate_current_hits[j] = 0.0f;
+		}
 
 		for ( j = 0; j < MAX_SHIP_WEAPONS; j++ ) {
 			ras_tmp = cfread_int(fp) ;
Index: code/missionui/redalert.h
===================================================================
RCS file: /home/fs2source/cvsroot/fs2_open/code/missionui/redalert.h,v
retrieving revision 2.7
diff -u -p -r2.7 redalert.h
--- code/missionui/redalert.h	25 Jul 2005 05:24:16 -0000	2.7
+++ code/missionui/redalert.h	24 Mar 2007 23:18:48 -0000
@@ -83,6 +83,7 @@
 #define __REDALERT_H__
 
 #include "globalincs/globals.h"
+#include "globalincs/pstypes.h"
 
 struct CFILE;
 
@@ -97,12 +98,12 @@ int	red_alert_check_status();
 
 void red_alert_store_wingman_status();
 void red_alert_bash_wingman_status();
-void red_alert_write_wingman_status(CFILE *fp);
+void red_alert_write_wingman_status(CFILE *fp, ubyte is_multi = 0);
 void red_alert_read_wingman_status(CFILE *fp, int version);
 
 // campaign savefile versions
 void red_alert_write_wingman_status_campaign(CFILE *fp);
-void red_alert_read_wingman_status_campaign(CFILE *fp, char ships[][NAME_LENGTH], char weapons[][NAME_LENGTH]);
+void red_alert_read_wingman_status_campaign(CFILE *fp, char ships[][NAME_LENGTH], char weapons[][NAME_LENGTH], int version);
 
 void red_alert_voice_pause();
 void red_alert_voice_unpause();
Index: code/playerman/managepilot.cpp
===================================================================
RCS file: /home/fs2source/cvsroot/fs2_open/code/playerman/managepilot.cpp,v
retrieving revision 2.28
diff -u -p -r2.28 managepilot.cpp
--- code/playerman/managepilot.cpp	11 Feb 2007 09:31:12 -0000	2.28
+++ code/playerman/managepilot.cpp	24 Mar 2007 23:18:49 -0000
@@ -365,7 +365,7 @@
 
 
 // update this when altering data that is read/written to .PLR file
-#define CURRENT_PLAYER_FILE_VERSION					242
+#define CURRENT_PLAYER_FILE_VERSION					243
 #define CURRENT_MULTI_PLAYER_FILE_VERSION			142
 #define FS2_DEMO_PLAYER_FILE_VERSION				135
 #define LOWEST_COMPATIBLE_PLAYER_FILE_VERSION		140	// compatible with release - Goober5000
@@ -1399,7 +1399,7 @@ int write_pilot_file_core(player *p)
 	}	
 
 	if ( is_multi ) {
-		red_alert_write_wingman_status(file);
+		red_alert_write_wingman_status(file, is_multi);
 	}
 
 	pilot_write_techroom_data(file, is_multi);
