shithub: choc

Download patch

ref: 7a3748fd12f76b2c84d087f4ccec7c281cb830cb
parent: eb1e33f9dbbce358b5de557e6d8c366a60de9866
author: James Haley <haleyjd@hotmail.com>
date: Sun Oct 3 12:45:53 EDT 2010

Added beginnings of Strife hub save code. ATTN fraggle: please add
m_saves.c to other platform builds. See also email regarding opendir
etc.

Subversion-branch: /branches/strife-branch
Subversion-revision: 2151

--- a/msvc/strife.vcproj
+++ b/msvc/strife.vcproj
@@ -497,6 +497,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\src\strife\m_saves.h"
+					>
+				</File>
+				<File
 					RelativePath="..\src\strife\p_dialog.h"
 					>
 				</File>
@@ -902,6 +906,10 @@
 				</File>
 				<File
 					RelativePath="..\src\strife\m_random.c"
+					>
+				</File>
+				<File
+					RelativePath="..\src\strife\m_saves.c"
 					>
 				</File>
 				<File
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -1198,7 +1198,7 @@
     // Key to send a message to player 8 during multiplayer games.
     //
 
-    CONFIG_VARIABLE_KEY(key_multi_msgplayer8)
+    CONFIG_VARIABLE_KEY(key_multi_msgplayer8),
 };
 
 static default_collection_t extra_defaults =
--- /dev/null
+++ b/src/strife/m_saves.c
@@ -1,0 +1,117 @@
+// Emacs style mode select   -*- C++ -*- 
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1996 Rogue Entertainment / Velocity, Inc.
+// Copyright(C) 2010 James Haley, Samuel Villareal
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+// DESCRIPTION:
+//
+// [STRIFE] New Module
+//
+// Strife Hub Saving Code
+//
+//-----------------------------------------------------------------------------
+
+#include "z_zone.h"
+#include "i_system.h"
+#include "d_player.h"
+#include "deh_str.h"
+#include "m_misc.h"
+#include "p_dialog.h"
+
+//
+// ClearTmp
+//
+// Clear the temporary save directory
+//
+void ClearTmp(void)
+{
+}
+
+//
+// ClearSlot
+//
+// Clear a single save slot folder
+//
+void ClearSlot(void)
+{
+}
+
+//
+// FromCurr
+//
+// Moving files from one directory to another...
+// STRIFE-TODO: figure out exactly what this is for.
+//
+void FromCurr(void)
+{
+}
+
+//
+// ?????
+//
+// More file moving; don't even know what to call it yet.
+//
+void sub_1B2F4(void)
+{
+}
+
+//
+// M_SaveMoveMapToHere
+//
+// Moves a map to the "HERE" save.
+//
+void M_SaveMoveMapToHere(void)
+{
+}
+
+//
+// M_SaveMoveHereToMap
+//
+// Moves the "HERE" save to a map.
+//
+void M_SaveMoveHereToMap(void)
+{
+}
+
+//
+// M_SaveMisObj
+//
+// Writes the mission objective into the MIS_OBJ file.
+//
+boolean M_SaveMisObj(const char *path)
+{
+    char destpath[100]; // WARNING: not large enough for modern file paths!
+
+    DEH_snprintf(destpath, sizeof(destpath), "%smis_obj", path);
+    return M_WriteFile(destpath, mission_objective, OBJECTIVE_LEN);
+}
+
+//
+// M_ReadMisObj
+//
+// Reads the mission objective from the MIS_OBJ file.
+//
+void M_ReadMisObj(void)
+{
+}
+
+// EOF
+
+
--- /dev/null
+++ b/src/strife/m_saves.h
@@ -1,0 +1,40 @@
+// Emacs style mode select   -*- C++ -*- 
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1996 Rogue Entertainment / Velocity, Inc.
+// Copyright(C) 2010 James Haley, Samuel Villareal
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+// DESCRIPTION:
+//
+// [STRIFE] New Module
+//
+// Strife Hub Saving Code
+//
+//-----------------------------------------------------------------------------
+
+#ifndef M_SAVES_H__
+#define M_SAVES_H__
+
+boolean M_SaveMisObj(const char *path);
+
+#endif
+
+// EOF
+
+
--- a/src/strife/p_saveg.c
+++ b/src/strife/p_saveg.c
@@ -1991,7 +1991,7 @@
 //
 // T_MoveCeiling, (ceiling_t: sector_t * swizzle), - active list
 // T_VerticalDoor, (vldoor_t: sector_t * swizzle),
-// T_SlidingDoor, (slidedoor_t: sector_t *, line_t * x 2 swizzle)
+// T_SlidingDoor, (slidedoor_t: sector_t *, line_t * x 2 swizzle) [STRIFE]
 // T_MoveFloor, (floormove_t: sector_t * swizzle),
 // T_LightFlash, (lightflash_t: sector_t * swizzle),
 // T_StrobeFlash, (strobe_t: sector_t *),
@@ -2041,6 +2041,7 @@
         {
             saveg_write8(tc_slidingdoor);
             saveg_write_pad();
+            saveg_write_slidedoor_t((slidedoor_t *)th);
             continue;
         }
 
@@ -2095,100 +2096,109 @@
 //
 void P_UnArchiveSpecials (void)
 {
-    byte		tclass;
-    ceiling_t*		ceiling;
-    vldoor_t*		door;
-    floormove_t*	floor;
-    plat_t*		plat;
-    lightflash_t*	flash;
-    strobe_t*		strobe;
-    glow_t*		glow;
-	
-	
+    byte                tclass;
+    ceiling_t*          ceiling;
+    vldoor_t*           door;
+    slidedoor_t*        slidedoor; // haleyjd [STRIFE]
+    floormove_t*        floor;
+    plat_t*             plat;
+    lightflash_t*       flash;
+    strobe_t*           strobe;
+    glow_t*             glow;
+
+
     // read in saved thinkers
     while (1)
     {
-	tclass = saveg_read8();
+        tclass = saveg_read8();
 
-	switch (tclass)
-	{
-	  case tc_endspecials:
-	    return;	// end of list
-			
-	  case tc_ceiling:
-	    saveg_read_pad();
-	    ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVEL, NULL);
+        switch (tclass)
+        {
+        case tc_endspecials:
+            return;	// end of list
+
+        case tc_ceiling:
+            saveg_read_pad();
+            ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVEL, NULL);
             saveg_read_ceiling_t(ceiling);
-	    ceiling->sector->specialdata = ceiling;
+            ceiling->sector->specialdata = ceiling;
 
-	    if (ceiling->thinker.function.acp1)
-		ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling;
+            if (ceiling->thinker.function.acp1)
+                ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling;
 
-	    P_AddThinker (&ceiling->thinker);
-	    P_AddActiveCeiling(ceiling);
-	    break;
-				
-	  case tc_door:
-	    saveg_read_pad();
-	    door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL);
+            P_AddThinker (&ceiling->thinker);
+            P_AddActiveCeiling(ceiling);
+            break;
+
+        case tc_door:
+            saveg_read_pad();
+            door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL);
             saveg_read_vldoor_t(door);
-	    door->sector->specialdata = door;
-	    door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor;
-	    P_AddThinker (&door->thinker);
-	    break;
-				
-	  case tc_floor:
-	    saveg_read_pad();
-	    floor = Z_Malloc (sizeof(*floor), PU_LEVEL, NULL);
+            door->sector->specialdata = door;
+            door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor;
+            P_AddThinker (&door->thinker);
+            break;
+
+        case tc_slidingdoor:
+            // haleyjd 09/29/10: [STRIFE] New thinker type for sliding doors
+            saveg_read_pad();
+            slidedoor = Z_Malloc(sizeof(*slidedoor), PU_LEVEL, NULL);
+            saveg_read_slidedoor_t(slidedoor);
+            slidedoor->frontsector->specialdata = slidedoor;
+            slidedoor->thinker.function.acp1 = (actionf_p1)T_SlidingDoor;
+            P_AddThinker(&slidedoor->thinker);
+            break;
+
+        case tc_floor:
+            saveg_read_pad();
+            floor = Z_Malloc (sizeof(*floor), PU_LEVEL, NULL);
             saveg_read_floormove_t(floor);
-	    floor->sector->specialdata = floor;
-	    floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor;
-	    P_AddThinker (&floor->thinker);
-	    break;
-				
-	  case tc_plat:
-	    saveg_read_pad();
-	    plat = Z_Malloc (sizeof(*plat), PU_LEVEL, NULL);
+            floor->sector->specialdata = floor;
+            floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor;
+            P_AddThinker (&floor->thinker);
+            break;
+
+        case tc_plat:
+            saveg_read_pad();
+            plat = Z_Malloc (sizeof(*plat), PU_LEVEL, NULL);
             saveg_read_plat_t(plat);
-	    plat->sector->specialdata = plat;
+            plat->sector->specialdata = plat;
 
-	    if (plat->thinker.function.acp1)
-		plat->thinker.function.acp1 = (actionf_p1)T_PlatRaise;
+            if (plat->thinker.function.acp1)
+                plat->thinker.function.acp1 = (actionf_p1)T_PlatRaise;
 
-	    P_AddThinker (&plat->thinker);
-	    P_AddActivePlat(plat);
-	    break;
-				
-	  case tc_flash:
-	    saveg_read_pad();
-	    flash = Z_Malloc (sizeof(*flash), PU_LEVEL, NULL);
+            P_AddThinker (&plat->thinker);
+            P_AddActivePlat(plat);
+            break;
+
+        case tc_flash:
+            saveg_read_pad();
+            flash = Z_Malloc (sizeof(*flash), PU_LEVEL, NULL);
             saveg_read_lightflash_t(flash);
-	    flash->thinker.function.acp1 = (actionf_p1)T_LightFlash;
-	    P_AddThinker (&flash->thinker);
-	    break;
-				
-	  case tc_strobe:
-	    saveg_read_pad();
-	    strobe = Z_Malloc (sizeof(*strobe), PU_LEVEL, NULL);
+            flash->thinker.function.acp1 = (actionf_p1)T_LightFlash;
+            P_AddThinker (&flash->thinker);
+            break;
+
+        case tc_strobe:
+            saveg_read_pad();
+            strobe = Z_Malloc (sizeof(*strobe), PU_LEVEL, NULL);
             saveg_read_strobe_t(strobe);
-	    strobe->thinker.function.acp1 = (actionf_p1)T_StrobeFlash;
-	    P_AddThinker (&strobe->thinker);
-	    break;
-				
-	  case tc_glow:
-	    saveg_read_pad();
-	    glow = Z_Malloc (sizeof(*glow), PU_LEVEL, NULL);
+            strobe->thinker.function.acp1 = (actionf_p1)T_StrobeFlash;
+            P_AddThinker (&strobe->thinker);
+            break;
+
+        case tc_glow:
+            saveg_read_pad();
+            glow = Z_Malloc (sizeof(*glow), PU_LEVEL, NULL);
             saveg_read_glow_t(glow);
-	    glow->thinker.function.acp1 = (actionf_p1)T_Glow;
-	    P_AddThinker (&glow->thinker);
-	    break;
-				
-	  default:
-	    I_Error ("P_UnarchiveSpecials:Unknown tclass %i "
-		     "in savegame",tclass);
-	}
-	
-    }
+            glow->thinker.function.acp1 = (actionf_p1)T_Glow;
+            P_AddThinker (&glow->thinker);
+            break;
 
+        default:
+            I_Error ("P_UnarchiveSpecials:Unknown tclass %i "
+                     "in savegame",tclass);
+        }
+    }
 }
 
--- a/src/strife/r_draw.c
+++ b/src/strife/r_draw.c
@@ -458,13 +458,9 @@
     //   LOWORD(v8) = 0; // aligning to a 64K boundary, as if this is Wolf3D.
     //   xlatab = v8;
     //   memcpy(v8, v7, 65536);
-    //   memcpy(v8+65536, v7+65536, 0); // 0 bytes, does nothing!
     // As you can see, they copypasta'd id's unnecessary 64K boundary alignment
-    // from the colormap code, and then evidently at some point dropped the high
-    // side of the presumably 128KB lump (because it is redundant data), but 
-    // just set the 2nd memset call's length to 0 bytes... Terrible. Since none
-    // of this accomplishes anything, and isn't strictly portable, all we need
-    // to do is this:
+    // from the colormap code. Since this doesn't accomplish anything, and isn't
+    // strictly portable, all we need to do is this:
 
     // villsa [STRIFE] 09/26/10: load table through this function instead
     V_LoadXlaTable();