r2953 - in packages/trunk/sauerbraten/debian: . patches

Bruno Fuddl-guestquot; Fuddl" Kleinert fuddl-guest at alioth.debian.org
Sat Jun 16 22:34:40 UTC 2007


Author: fuddl-guest
Date: 2007-06-16 22:34:39 +0000 (Sat, 16 Jun 2007)
New Revision: 2953

Added:
   packages/trunk/sauerbraten/debian/patches/10_save_and_load_maps_from_home_directory.dpatch
Modified:
   packages/trunk/sauerbraten/debian/changelog
   packages/trunk/sauerbraten/debian/patches/00list
Log:
add dpatch to save/load maps to/from '/home/fuddl/.sauerbraten'

Modified: packages/trunk/sauerbraten/debian/changelog
===================================================================
--- packages/trunk/sauerbraten/debian/changelog	2007-06-16 20:18:03 UTC (rev 2952)
+++ packages/trunk/sauerbraten/debian/changelog	2007-06-16 22:34:39 UTC (rev 2953)
@@ -1,3 +1,10 @@
+sauerbraten (0.0.20070413.dfsg-2) UNRELEASED; urgency=low
+
+  * Add patch to make in-game commands /savemap and /map save/load maps
+    to/from a user's home directory
+
+ -- Bruno "Fuddl" Kleinert <fuddl at gmx.de>  Sun, 17 Jun 2007 00:32:34 +0200
+
 sauerbraten (0.0.20070413.dfsg-1) unstable; urgency=low
 
   * New upstream release (Closes: #420086)

Modified: packages/trunk/sauerbraten/debian/patches/00list
===================================================================
--- packages/trunk/sauerbraten/debian/patches/00list	2007-06-16 20:18:03 UTC (rev 2952)
+++ packages/trunk/sauerbraten/debian/patches/00list	2007-06-16 22:34:39 UTC (rev 2953)
@@ -1 +1,2 @@
 10_search_home_for_config.dpatch
+10_save_and_load_maps_from_home_directory.dpatch

Added: packages/trunk/sauerbraten/debian/patches/10_save_and_load_maps_from_home_directory.dpatch
===================================================================
--- packages/trunk/sauerbraten/debian/patches/10_save_and_load_maps_from_home_directory.dpatch	                        (rev 0)
+++ packages/trunk/sauerbraten/debian/patches/10_save_and_load_maps_from_home_directory.dpatch	2007-06-16 22:34:39 UTC (rev 2953)
@@ -0,0 +1,118 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 10_save_and_load_maps_from_home_directory.dpatch by Bruno "Fuddl" Kleinert  <fuddl at gmx.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Save maps in $HOME/.sauerbraten and read them from there
+
+ at DPATCH@
+diff -urNad sauerbraten-0.0.20070413.dfsg~/engine/worldio.cpp sauerbraten-0.0.20070413.dfsg/engine/worldio.cpp
+--- sauerbraten-0.0.20070413.dfsg~/engine/worldio.cpp	2007-04-05 02:40:00.000000000 +0000
++++ sauerbraten-0.0.20070413.dfsg/engine/worldio.cpp	2007-06-16 14:20:51.442424828 +0000
+@@ -2,6 +2,10 @@
+ 
+ #include "pch.h"
+ #include "engine.h"
++#include <libgen.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <unistd.h>
+ 
+ void backup(char *name, char *backupname)
+ {
+@@ -235,9 +239,28 @@
+ {
+     if(!*mname) mname = cl->getclientmap();
+     setnames(mname);
+-    if(savebak) backup(cgzname, bakname);
+-    gzFile f = gzopen(cgzname, "wb9");
+-    if(!f) { conoutf("could not write map to %s", cgzname); return; }
++
++    // Save maps in $HOME/.sauerbraten
++    char *sauerdir = ".sauerbraten";
++    char *userhome = getenv("HOME");
++    char *savecgz;
++    if(!userhome) { // bahave as usual, but probably fail
++	    conoutf("$HOME not set, cannot save map");
++	    savecgz = strdup(cgzname);
++    } else {
++	    savecgz = (char *) malloc(strlen(userhome) + strlen(sauerdir) + 2);
++	    sprintf(savecgz, "%s/%s", userhome, sauerdir);
++	    mkdir(savecgz, 0755); // mkdir $HOME/.sauerbraten
++	    savecgz = (char *) realloc(savecgz, strlen(userhome) + strlen(sauerdir) + strlen(basename(cgzname)) + 3);
++	    sprintf(savecgz, "%s/%s/%s", userhome, sauerdir, basename(cgzname));
++    }
++
++    //if(savebak) backup(cgzname, bakname);
++    if(savebak) backup(savecgz, bakname);
++    //gzFile f = gzopen(cgzname, "wb9");
++    gzFile f = gzopen(savecgz, "wb9");
++    //if(!f) { conoutf("could not write map to %s", cgzname); return; }
++    if(!f) { conoutf("could not write map to %s", savecgz); free(savecgz); return; }
+     hdr.version = MAPVERSION;
+     hdr.numents = 0;
+     const vector<extentity *> &ents = et->getents();
+@@ -287,7 +310,9 @@
+     }
+ 
+     gzclose(f);
+-    conoutf("wrote map file %s", cgzname);
++    conoutf("wrote map file %s", savecgz);
++    
++    free(savecgz);
+ }
+ 
+ void swapXZ(cube *c)
+@@ -310,13 +335,31 @@
+ {
+     int loadingstart = SDL_GetTicks();
+     setnames(mname, cname);
+-    gzFile f = gzopen(cgzname, "rb9");
+-    if(!f) { conoutf("could not read map %s", cgzname); return; }
++    
++    // Load map from $HOME/.sauerbraten, then from system dir
++    char *sauerdir = ".sauerbraten";
++    char *userhome = getenv("HOME");
++    char *loadcgz;
++    struct stat statbuf;
++    if(stat(cgzname, &statbuf) < 0) { // no such map installed system wide => try in home
++	    if(!userhome) { // bahave as usual, but probably fail
++		    conoutf("$HOME not set, cannot load user's map");
++		    return;
++	    } else {
++		    loadcgz = (char *) malloc(strlen(userhome) + strlen(sauerdir) + strlen(basename(cgzname)) + 3);
++		    sprintf(loadcgz, "%s/%s/%s", userhome, sauerdir, basename(cgzname));
++	    }
++    } else { // system wide installed map exists => use it
++	    loadcgz = strdup(cgzname);
++    }
++
++    gzFile f = gzopen(loadcgz, "rb9");
++    if(!f) { conoutf("could not read map %s", loadcgz); free(loadcgz); return; }
+     header newhdr;
+     gzread(f, &newhdr, sizeof(header));
+     endianswap(&newhdr.version, sizeof(int), 9);
+-    if(strncmp(newhdr.head, "OCTA", 4)!=0) { conoutf("map %s has malformatted header", cgzname); gzclose(f); return; }
+-    if(newhdr.version>MAPVERSION) { conoutf("map %s requires a newer version of cube 2", cgzname); gzclose(f); return; }
++    if(strncmp(newhdr.head, "OCTA", 4)!=0) { conoutf("map %s has malformatted header", loadcgz); gzclose(f); free(loadcgz); return; }
++    if(newhdr.version>MAPVERSION) { conoutf("map %s requires a newer version of cube 2", loadcgz); gzclose(f); free(loadcgz); return; }
+     hdr = newhdr;
+     resetmap();
+     computescreen(mname);
+@@ -475,7 +518,7 @@
+ // FIXME: need to load texture slots before VAs can be properly sorted    
+ //    allchanged();
+ 
+-    conoutf("read map %s (%.1f seconds)", cgzname, (SDL_GetTicks()-loadingstart)/1000.0f);
++    conoutf("read map %s (%.1f seconds)", loadcgz, (SDL_GetTicks()-loadingstart)/1000.0f);
+     conoutf("%s", hdr.maptitle);
+ 
+     overrideidents = true;
+@@ -497,6 +540,8 @@
+         }
+     }
+ 
++    free(loadcgz);
++
+     startmap(cname ? cname : mname);
+ }
+ 


Property changes on: packages/trunk/sauerbraten/debian/patches/10_save_and_load_maps_from_home_directory.dpatch
___________________________________________________________________
Name: svn:executable
   + *




More information about the Pkg-games-commits mailing list