add level component saving functions which use PhysicsFS
authorChris Taylor <chris@icculus.org>
Wed, 22 Jun 2005 09:09:46 +0000 (09:09 +0000)
committerChris Taylor <chris@icculus.org>
Wed, 22 Jun 2005 09:09:46 +0000 (09:09 +0000)
13 files changed:
ChangeLog
main/cntrlcen.c
main/cntrlcen.h
main/fuelcen.c
main/fuelcen.h
main/game.c
main/game.h
main/segment.c
main/segment.h
main/switch.c
main/switch.h
main/wall.c
main/wall.h

index 8fcde9a..ed44c64 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,12 @@
        * main/editor/kgame.c: load .rl2 files instead of .lvl files
        (some editor info could be stored in .rdl / .rl2 files)
 
+       * include/nocfile.h, main/cntrlcen.c, main/cntrlcen.h,
+       main/fuelcen.c, main/fuelcen.h, main/game.c, main/game.h,
+       main/segment.c, main/segment.h, main/switch.c, main/switch.h,
+       main/wall.c, main/wall.h: add level component saving functions,
+       which use PhysicsFS and are endian friendly
+
 2005-06-14  Chris Taylor  <chris@icculus.org>
 
        * main/mission.c: make sure there is a path to free for D2 Demo/OEM
index e36bdc7..2505c5e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: cntrlcen.c,v 1.18 2004-12-01 12:48:13 btb Exp $ */
+/* $Id: cntrlcen.c,v 1.19 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -23,7 +23,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-static char rcsid[] = "$Id: cntrlcen.c,v 1.18 2004-12-01 12:48:13 btb Exp $";
+static char rcsid[] = "$Id: cntrlcen.c,v 1.19 2005-06-22 09:08:21 chris Exp $";
 #endif
 
 #ifdef WINDOWS
@@ -554,3 +554,16 @@ extern int control_center_triggers_read_n(control_center_triggers *cct, int n, C
        return i;
 }
 #endif
+
+int control_center_triggers_write(control_center_triggers *cct, PHYSFS_file *fp)
+{
+       int j;
+
+       PHYSFS_writeSLE16(fp, cct->num_links);
+       for (j = 0; j < MAX_CONTROLCEN_LINKS; j++)
+               PHYSFS_writeSLE16(fp, cct->seg[j]);
+       for (j = 0; j < MAX_CONTROLCEN_LINKS; j++)
+               PHYSFS_writeSLE16(fp, cct->side[j]);
+
+       return 1;
+}
index 60ae16d..7783c8c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: cntrlcen.h,v 1.7 2004-08-28 23:17:45 schaffner Exp $ */
+/* $Id: cntrlcen.h,v 1.8 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -96,4 +96,6 @@ extern int reactor_read_n(reactor *r, int n, CFILE *fp);
 extern int control_center_triggers_read_n(control_center_triggers *cct, int n, CFILE *fp);
 #endif
 
+extern int control_center_triggers_write(control_center_triggers *cct, PHYSFS_file *fp);
+
 #endif /* _CNTRLCEN_H */
index 018c303..01df3a3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fuelcen.c,v 1.10 2004-08-28 23:17:45 schaffner Exp $ */
+/* $Id: fuelcen.c,v 1.11 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -23,7 +23,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-static char rcsid[] = "$Id: fuelcen.c,v 1.10 2004-08-28 23:17:45 schaffner Exp $";
+static char rcsid[] = "$Id: fuelcen.c,v 1.11 2005-06-22 09:08:21 chris Exp $";
 #endif
 
 #include <stdio.h>
@@ -1215,3 +1215,14 @@ void matcen_info_read(matcen_info *mi, CFILE *fp)
        mi->fuelcen_num = cfile_read_short(fp);
 }
 #endif
+
+void matcen_info_write(matcen_info *mi, short version, PHYSFS_file *fp)
+{
+       PHYSFS_writeSLE32(fp, mi->robot_flags[0]);
+       if (version >= 27)
+               PHYSFS_writeSLE32(fp, mi->robot_flags[1]);
+       PHYSFSX_writeFix(fp, mi->hit_points);
+       PHYSFSX_writeFix(fp, mi->interval);
+       PHYSFS_writeSLE16(fp, mi->segnum);
+       PHYSFS_writeSLE16(fp, mi->fuelcen_num);
+}
index 4c82e4b..c1c8587 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fuelcen.h,v 1.8 2004-08-28 23:17:45 schaffner Exp $ */
+/* $Id: fuelcen.h,v 1.9 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -165,4 +165,6 @@ void old_matcen_info_read(old_matcen_info *mi, CFILE *fp);
 void matcen_info_read(matcen_info *ps, CFILE *fp);
 #endif
 
+void matcen_info_write(matcen_info *mi, short version, PHYSFS_file *fp);
+
 #endif
index 1b74bd5..d293fce 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: game.c,v 1.36 2005-04-01 03:21:32 chris Exp $ */
+/* $Id: game.c,v 1.37 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -23,7 +23,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-char game_rcsid[] = "$Id: game.c,v 1.36 2005-04-01 03:21:32 chris Exp $";
+char game_rcsid[] = "$Id: game.c,v 1.37 2005-06-22 09:08:21 chris Exp $";
 #endif
 
 #ifdef WINDOWS
@@ -3390,3 +3390,12 @@ void flickering_light_read(flickering_light *fl, CFILE *fp)
        fl->timer = cfile_read_fix(fp);
        fl->delay = cfile_read_fix(fp);
 }
+
+void flickering_light_write(flickering_light *fl, PHYSFS_file *fp)
+{
+       PHYSFS_writeSLE16(fp, fl->segnum);
+       PHYSFS_writeSLE16(fp, fl->sidenum);
+       PHYSFS_writeULE32(fp, fl->mask);
+       PHYSFSX_writeFix(fp, fl->timer);
+       PHYSFSX_writeFix(fp, fl->delay);
+}
index 6b2e397..14fa36f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: game.h,v 1.10 2005-03-20 12:53:33 btb Exp $ */
+/* $Id: game.h,v 1.11 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -271,6 +271,8 @@ int gr_toggle_fullscreen_game(void);
  */
 void flickering_light_read(flickering_light *fl, CFILE *fp);
 
+void flickering_light_write(flickering_light *fl, PHYSFS_file *fp);
+
 #define MAX_FPS 80
 extern int maxfps;
 
index bf38836..7dfd63e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: segment.c,v 1.3 2003-10-10 09:36:35 btb Exp $ */
+/* $Id: segment.c,v 1.4 2005-06-22 09:08:21 chris Exp $ */
 
 /*
  *
@@ -15,7 +15,7 @@
 #include "cfile.h"
 
 #ifdef RCS
-static char rcsid[] = "$Id: segment.c,v 1.3 2003-10-10 09:36:35 btb Exp $";
+static char rcsid[] = "$Id: segment.c,v 1.4 2005-06-22 09:08:21 chris Exp $";
 #endif
 
 #ifndef FAST_FILE_IO
@@ -57,3 +57,31 @@ void dl_index_read(dl_index *di, CFILE *fp)
        di->index = cfile_read_short(fp);
 }
 #endif
+
+void segment2_write(segment2 *s2, PHYSFS_file *fp)
+{
+       PHYSFSX_writeU8(fp, s2->special);
+       PHYSFSX_writeU8(fp, s2->matcen_num);
+       PHYSFSX_writeU8(fp, s2->value);
+       PHYSFSX_writeU8(fp, s2->s2_flags);
+       PHYSFSX_writeFix(fp, s2->static_light);
+}
+
+void delta_light_write(delta_light *dl, PHYSFS_file *fp)
+{
+       PHYSFS_writeSLE16(fp, dl->segnum);
+       PHYSFSX_writeU8(fp, dl->sidenum);
+       PHYSFSX_writeU8(fp, dl->dummy);
+       PHYSFSX_writeU8(fp, dl->vert_light[0]);
+       PHYSFSX_writeU8(fp, dl->vert_light[1]);
+       PHYSFSX_writeU8(fp, dl->vert_light[2]);
+       PHYSFSX_writeU8(fp, dl->vert_light[3]);
+}
+
+void dl_index_write(dl_index *di, PHYSFS_file *fp)
+{
+       PHYSFS_writeSLE16(fp, di->segnum);
+       PHYSFSX_writeU8(fp, di->sidenum);
+       PHYSFSX_writeU8(fp, di->count);
+       PHYSFS_writeSLE16(fp, di->index);
+}
index 560847f..ddd2b52 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: segment.h,v 1.6 2004-12-24 05:17:09 btb Exp $ */
+/* $Id: segment.h,v 1.7 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -269,4 +269,8 @@ void delta_light_read(delta_light *dl, CFILE *fp);
 void dl_index_read(dl_index *di, CFILE *fp);
 #endif
 
+void segment2_write(segment2 *s2, PHYSFS_file *fp);
+void delta_light_write(delta_light *dl, PHYSFS_file *fp);
+void dl_index_write(dl_index *di, PHYSFS_file *fp);
+
 #endif
index dd95e16..29d3d44 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: switch.c,v 1.11 2004-08-28 23:17:45 schaffner Exp $ */
+/* $Id: switch.c,v 1.12 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -23,7 +23,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-static char rcsid[] = "$Id: switch.c,v 1.11 2004-08-28 23:17:45 schaffner Exp $";
+static char rcsid[] = "$Id: switch.c,v 1.12 2005-06-22 09:08:21 chris Exp $";
 #endif
 
 #include <stdio.h>
@@ -725,3 +725,82 @@ extern void trigger_read(trigger *t, CFILE *fp)
                t->side[i] = cfile_read_short(fp);
 }
 #endif
+
+void trigger_write(trigger *t, short version, PHYSFS_file *fp)
+{
+       int i;
+
+       if (version != 30)
+               PHYSFSX_writeU8(fp, t->type);
+
+       if (version <= 29)
+               switch (t->type)
+               {
+                       case TT_OPEN_DOOR:
+                               PHYSFS_writeSLE16(fp, TRIGGER_CONTROL_DOORS);
+                               break;
+
+                       case TT_EXIT:
+                               PHYSFS_writeSLE16(fp, TRIGGER_EXIT);
+                               break;
+
+                       case TT_MATCEN:
+                               PHYSFS_writeSLE16(fp, TRIGGER_MATCEN);
+                               break;
+                               
+                       case TT_ILLUSION_OFF:
+                               PHYSFS_writeSLE16(fp, TRIGGER_ILLUSION_OFF);
+                               break;
+                               
+                       case TT_SECRET_EXIT:
+                               PHYSFS_writeSLE16(fp, TRIGGER_SECRET_EXIT);
+                               break;
+                               
+                       case TT_ILLUSION_ON:
+                               PHYSFS_writeSLE16(fp, TRIGGER_ILLUSION_ON);
+                               break;
+                               
+                       case TT_UNLOCK_DOOR:
+                               PHYSFS_writeSLE16(fp, TRIGGER_UNLOCK_DOORS);
+                               break;
+                               
+                       case TT_OPEN_WALL:
+                               PHYSFS_writeSLE16(fp, TRIGGER_OPEN_WALL);
+                               break;
+                               
+                       case TT_CLOSE_WALL:
+                               PHYSFS_writeSLE16(fp, TRIGGER_CLOSE_WALL);
+                               break;
+                               
+                       case TT_ILLUSORY_WALL:
+                               PHYSFS_writeSLE16(fp, TRIGGER_ILLUSORY_WALL);
+                               break;
+                               
+                       default:
+                               Int3();
+                               PHYSFS_writeSLE16(fp, 0);
+                               break;
+               }
+       else
+               PHYSFSX_writeU8(fp, t->flags);
+
+       if (version >= 30)
+       {
+               PHYSFSX_writeU8(fp, t->num_links);
+               PHYSFSX_writeU8(fp, t->pad);
+       }
+
+       PHYSFSX_writeFix(fp, t->value);
+       PHYSFSX_writeFix(fp, t->time);
+
+       if (version <= 29)
+       {
+               PHYSFSX_writeU8(fp, -1);        //t->link_num
+               PHYSFS_writeSLE16(fp, t->num_links);
+       }
+
+       for (i = 0; i < MAX_WALLS_PER_LINK; i++)
+               PHYSFS_writeSLE16(fp, t->seg[i]);
+       for (i = 0; i < MAX_WALLS_PER_LINK; i++)
+               PHYSFS_writeSLE16(fp, t->side[i]);
+}
index 70b16e3..8c67f1a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: switch.h,v 1.5 2004-08-28 23:17:45 schaffner Exp $ */
+/* $Id: switch.h,v 1.6 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -135,4 +135,6 @@ extern void v30_trigger_read(v30_trigger *t, CFILE *fp);
 extern void trigger_read(trigger *t, CFILE *fp);
 #endif
 
+extern void trigger_write(trigger *t, short version, PHYSFS_file *fp);
+
 #endif
index 61fd9c4..74515e3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: wall.c,v 1.14 2005-01-24 21:41:35 schaffner Exp $ */
+/* $Id: wall.c,v 1.15 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -23,7 +23,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-static char rcsid[] = "$Id: wall.c,v 1.14 2005-01-24 21:41:35 schaffner Exp $";
+static char rcsid[] = "$Id: wall.c,v 1.15 2005-06-22 09:08:21 chris Exp $";
 #endif
 
 #include <stdio.h>
@@ -1703,3 +1703,38 @@ extern void active_door_read(active_door *ad, CFILE *fp)
        ad->time = cfile_read_fix(fp);
 }
 #endif
+
+void wall_write(wall *w, short version, CFILE *fp)
+{
+       if (version >= 17)
+       {
+               PHYSFS_writeSLE32(fp, w->segnum);
+               PHYSFS_writeSLE32(fp, w->sidenum);
+       }
+
+       if (version >= 20)
+       {
+               PHYSFSX_writeFix(fp, w->hps);
+               PHYSFS_writeSLE32(fp, w->linked_wall);
+       }
+       
+       PHYSFSX_writeU8(fp, w->type);
+       PHYSFSX_writeU8(fp, w->flags);
+       
+       if (version < 20)
+               PHYSFSX_writeFix(fp, w->hps);
+       else
+               PHYSFSX_writeU8(fp, w->state);
+       
+       PHYSFSX_writeU8(fp, w->trigger);
+       PHYSFSX_writeU8(fp, w->clip_num);
+       PHYSFSX_writeU8(fp, w->keys);
+       
+       if (version >= 20)
+       {
+               PHYSFSX_writeU8(fp, w->controlling_trigger);
+               PHYSFSX_writeU8(fp, w->cloak_value);
+       }
+       else if (version >= 17)
+               PHYSFS_writeSLE32(fp, w->linked_wall);
+}
index c36210d..a85e6a4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: wall.h,v 1.9 2005-01-24 21:41:35 schaffner Exp $ */
+/* $Id: wall.h,v 1.10 2005-06-22 09:08:21 chris Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -302,4 +302,6 @@ extern void v19_door_read(v19_door *d, CFILE *fp);
 extern void active_door_read(active_door *ad, CFILE *fp);
 #endif
 
+extern void wall_write(wall *w, short version, PHYSFS_file *fp);
+
 #endif