home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / elisp / games / dunnet / dun-save.el < prev    next >
Encoding:
Text File  |  1993-06-27  |  3.4 KB  |  142 lines

  1.  
  2. ;;;;;;;;;;;;;;;;;;;
  3. ;
  4. ;
  5. ;  Save and restore
  6. ;
  7. ;
  8. ;;;;;;;;;;;;;;;;;;;
  9.  
  10. (if nil
  11.     (eval-and-compile (setq byte-compile-warnings nil)))
  12.  
  13. (defun save-game (filename)
  14.   (if (not (setq filename (car filename)))
  15.       (mprincl "You must supply a filename for the save.")
  16.     (if (file-exists-p filename)
  17.     (delete-file filename))
  18.     (setq numsaves (1+ numsaves))
  19.     (make-save-buffer)
  20.     (save-val "current-room")
  21.     (save-val "computer")
  22.     (save-val "door1")
  23.     (save-val "combination")
  24.     (save-val "visited")
  25.     (save-val "diggables")
  26.     (save-val "key-level")
  27.     (save-val "floppy")
  28.     (save-val "numsaves")
  29.     (save-val "numcmds")
  30.     (save-val "logged-in")
  31.     (save-val "dungeon-mode")
  32.     (save-val "jar")
  33.     (save-val "lastdir")
  34.     (save-val "black")
  35.     (save-val "nomail")
  36.     (save-val "unix-verbs")
  37.     (save-val "hole")
  38.     (save-val "uncompressed")
  39.     (save-val "ethernet")
  40.     (save-val "sauna-level")
  41.     (save-val "room-objects")
  42.     (save-val "room-silents")
  43.     (save-val "inventory")
  44.     (save-val "endgame-question")
  45.     (save-val "endgame")
  46.     (save-val "endgame-questions")
  47.     (save-val "cdroom")
  48.     (save-val "cdpath")
  49.     (save-val "correct-answer")
  50.     (save-val "inbus")
  51.     (if (compile-save-out filename)
  52.     (mprincl "Error saving to file.")
  53.       (do-logfile 'save nil)
  54.       (switch-to-buffer "*dungeon*")
  55.       (princ "")
  56.       (mprincl "Done."))))
  57.  
  58. (defun make-save-buffer ()
  59.   (switch-to-buffer (get-buffer-create "*save-dungeon*"))
  60.   (erase-buffer))
  61.  
  62. (defun compile-save-out (filename)
  63.   (let (ferror)
  64.     (setq ferror nil)
  65.     (condition-case nil
  66.     (dun-rot13)
  67.       (error (setq ferror t)))
  68.     (if (not ferror)
  69.     (progn
  70.       (goto-char (point-min))))
  71.     (condition-case nil
  72.         (write-region 1 (point-max) filename nil 1)
  73.         (error (setq ferror t)))
  74.     (kill-buffer (current-buffer))
  75.     ferror))
  76.     
  77.  
  78. (defun save-val (varname)
  79.   (let (value)
  80.     (setq varname (intern varname))
  81.     (setq value (eval varname))
  82.     (minsert "(setq ")
  83.     (minsert varname)
  84.     (minsert " ")
  85.     (if (or (listp value)
  86.         (symbolp value))
  87.     (minsert "'"))
  88.     (if (stringp value)
  89.     (minsert "\""))
  90.     (minsert value)
  91.     (if (stringp value)
  92.     (minsert "\""))
  93.     (minsertl ")")))
  94.  
  95.  
  96. (defun restore (args)
  97.   (let (file)
  98.     (if (not (setq file (car args)))
  99.     (mprincl "You must supply a filename.")
  100.       (if (not (load-d file))
  101.       (mprincl "Could not load restore file.")
  102.     (mprincl "Done.")
  103.     (setq room 0)))))
  104.  
  105.  
  106. (defun do-logfile (type how)
  107.   (let (ferror newscore)
  108.     (setq ferror nil)
  109.     (switch-to-buffer (get-buffer-create "*score*"))
  110.     (erase-buffer)
  111.     (condition-case nil
  112.     (insert-file-contents log-file)
  113.       (error (setq ferror t)))
  114.     (unless ferror
  115.         (goto-char (point-max))
  116.         (minsert (current-time-string))
  117.         (minsert " ")
  118.         (minsert (user-login-name))
  119.         (minsert " ")
  120.         (if (eq type 'save)
  121.         (minsert "saved ")
  122.           (if (= (endgame-score) 110)
  123.           (minsert "won ")
  124.         (if (not how)
  125.             (minsert "quit ")
  126.           (minsert "killed by ")
  127.           (minsert how)
  128.           (minsert " "))))
  129.         (minsert "at ")
  130.         (minsert (cadr (nth (abs room) rooms)))
  131.         (minsert ". score: ")
  132.         (if (> (endgame-score) 0)
  133.         (minsert (setq newscore (+ 90 (endgame-score))))
  134.           (minsert (setq newscore (reg-score))))
  135.         (minsert " saves: ")
  136.         (minsert numsaves)
  137.         (minsert " commands: ")
  138.         (minsert numcmds)
  139.         (minsert "\n")
  140.         (write-region 1 (point-max) log-file nil 1))
  141.     (kill-buffer (current-buffer))))
  142.