<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1 +1,2 @@
 .irb_history
+savegames/*.yaml</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,9 @@
 require 'curses'
 
+Dir['app/*.rb'].each do |f|
+  require f
+end
+
 include Curses
 
 class CursesUI
@@ -11,8 +15,12 @@ class CursesUI
     init_actions
     @offset = {:x =&gt; 0, :y =&gt; 0}
 
-    # Init game
-    @game = Game.new(filename)
+    if /savegames\/.+\.yaml/ === filename
+      @game = Game.restore(filename)
+    else
+      # Init game
+      @game = Game.new(filename)
+    end
     @game.ui = self
   end
 
@@ -158,6 +166,9 @@ class CursesUI
           game.go_stairs(false)
         when 'c'[0]
           game.output(&quot;%s is at %d, %d&quot; % [game.player.fullname, game.player.x, game.player.y])
+        when 'S'[0]
+          game.save(game.player.fullname)
+          keep_playing = false
         else
           @game.output((key.is_a?(Fixnum) ? keyname(key) : key.to_s) || key.to_s)
         end</diff>
      <filename>app/curses_ui.rb</filename>
    </modified>
    <modified>
      <diff>@@ -128,4 +128,13 @@ class Game
       monster.wait
     end
   end
+
+  def save(name)
+    #Dir.mkdir('games/' + name)
+    File.open(&quot;savegames/#{name}.yaml&quot;, 'w') {|f| f.write self.to_yaml}
+  end
+
+  def self.restore(filename)
+    File.open(filename, 'r'){|f| YAML.load(f)}
+  end
 end</diff>
      <filename>app/game.rb</filename>
    </modified>
    <modified>
      <diff>@@ -221,6 +221,16 @@ describe CursesUI, &quot;handle_input&quot; do
 
     @ui.handle_input(scr)
   end
+
+  it &quot;should save game when clicked 'S'&quot; do
+    @ui = CursesUI.new(TESTGAME)
+    scr = mock('scr', :getch =&gt; 'S'[0])
+
+    @ui.game.should_receive(:save).with('Kudlius')
+
+    @ui.handle_input(scr).should be_false
+
+  end
 end
 
 describe CursesUI, &quot;show_inventory&quot; do
@@ -313,3 +323,15 @@ describe CursesUI, &quot;draw_attributes&quot; do
     @ui.draw_attributes
   end
 end
+
+describe CursesUI, &quot;restore game&quot; do
+  it &quot;should load game using YAML if it is savegame&quot; do
+    @old_game = testgame
+    @old_game.save 'test_for_curses_ui'
+    
+    @ui = CursesUI.new('savegames/test_for_curses_ui.yaml')
+    @ui.game.class.should == Game
+    @ui.game.map.name.should == 'cave-1'
+    @ui.game.ui.should == @ui
+  end
+end</diff>
      <filename>spec/models/curses_ui_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -289,3 +289,16 @@ describe Game, &quot;move_monster (just move)&quot; do
     @monster.energy.should == -100
   end
 end
+
+describe Game, &quot;save &amp; restore&quot; do
+  it &quot;should save game so that after loading it would be identic&quot; do
+    @old_game = testgame
+    @old_game.save('test_fork')
+    @new_game = Game.restore('savegames/test_fork.yaml')
+    @new_game.class.should == Game
+  end
+
+  after(:each) do
+    system 'rm savegames/test_fork.yaml'
+  end
+end</diff>
      <filename>spec/models/game_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4d82cb12884a4d61ea9b9548cd0077c5b92f405a</id>
    </parent>
  </parents>
  <author>
    <name>laurynasl</name>
    <email>laurynasl@gmail.com</email>
  </author>
  <url>http://github.com/laurynasl/rubyrogue/commit/7df9dacfb74b2150f1b832e1c8733796552b51a0</url>
  <id>7df9dacfb74b2150f1b832e1c8733796552b51a0</id>
  <committed-date>2008-06-20T09:07:55-07:00</committed-date>
  <authored-date>2008-06-20T09:07:55-07:00</authored-date>
  <message>save game and exit using 'S'</message>
  <tree>faa5b07bab18f234ebd1b4e12d2ae460eaa7f80b</tree>
  <committer>
    <name>laurynasl</name>
    <email>laurynasl@gmail.com</email>
  </committer>
</commit>
