moved some sprites to separate files
authorMatthias Braun <matze@braunis.de>
Mon, 3 Oct 2005 00:09:17 +0000 (00:09 +0000)
committerMatthias Braun <matze@braunis.de>
Mon, 3 Oct 2005 00:09:17 +0000 (00:09 +0000)
SVN-Revision: 2801

20 files changed:
data/images/creatures/dummyguy/dummyguy.sprite [new file with mode: 0644]
data/images/creatures/yeti/yeti.sprite [new file with mode: 0644]
data/images/powerups/potions/blue-potion.sprite [new file with mode: 0644]
data/images/powerups/potions/red-potion.sprite [new file with mode: 0644]
data/images/sprites.strf
data/levels/test/bonusblock.stl
data/levels/test/enemy3.stl
data/levels/test/intro.stl
data/levels/test/raintest.stl
data/levels/test/script.stl
data/levels/test/wansti-level4.stl
data/levels/test/yeti.stl
src/badguy/yeti.cpp
src/object/gameobjs.cpp
src/scripting/script_interpreter.cpp
src/sprite/sprite_data.cpp
src/sprite/sprite_data.hpp
src/sprite/sprite_manager.cpp
src/sprite/sprite_manager.hpp
src/worldmap.cpp

diff --git a/data/images/creatures/dummyguy/dummyguy.sprite b/data/images/creatures/dummyguy/dummyguy.sprite
new file mode 100644 (file)
index 0000000..ec40147
--- /dev/null
@@ -0,0 +1,44 @@
+(supertux-sprite
+ (action
+  (name "left")
+  (fps 6)
+  (x-offset 0)
+  (y-offset 40)
+  (images "walk-1.png" "walk-2.png")
+ )
+
+ (action
+  (name "right")
+  (fps 6)
+  (x-offset 0)
+  (y-offset 40)
+  (mirror-action "left")
+ )
+
+ (action
+  (name "stand")
+  (x-offset 0)
+  (y-offset 40)
+  (images "stand.png"))
+
+ (action
+  (name "throw")
+  (fps 6)
+  (x-offset 0)
+  (y-offset 40)
+  (images "throw.png"))
+
+ (action
+  (name "jump")
+  (x-offset 0)
+  (y-offset 40)
+  (images "jump.png"))
+
+ (action
+  (name "dead")
+  (x-offset 0)
+  (y-offset 0)
+  (images "dead.png")
+ )
+)
+
diff --git a/data/images/creatures/yeti/yeti.sprite b/data/images/creatures/yeti/yeti.sprite
new file mode 100644 (file)
index 0000000..5ed8094
--- /dev/null
@@ -0,0 +1,11 @@
+(supertux-sprite
+  (action
+    (name "right")
+    (images "yeti_b.png")
+  )
+  (action
+    (name "left")
+    (mirror-action "right")
+  )
+)
+  
diff --git a/data/images/powerups/potions/blue-potion.sprite b/data/images/powerups/potions/blue-potion.sprite
new file mode 100644 (file)
index 0000000..9c9d94f
--- /dev/null
@@ -0,0 +1,6 @@
+(supertux-sprite
+ (action
+  (name "default")
+  (images "blue-potion.png")
+ )
+)  
diff --git a/data/images/powerups/potions/red-potion.sprite b/data/images/powerups/potions/red-potion.sprite
new file mode 100644 (file)
index 0000000..2274dad
--- /dev/null
@@ -0,0 +1,6 @@
+(supertux-sprite
+ (action
+  (name "default")
+  (images "red-potion.png")
+ )
+)  
index 1e44e8d..d43a742 100644 (file)
          (y-offset 32)
          (mirror-action "explosion-left")))
    
-   ; Dummyguy
-   (sprite (name "dummyguy")
-       (action
-         (name "left")
-        (fps 6)
-         (x-offset 0)
-         (y-offset 40)
-         (images "creatures/dummyguy/walk-1.png"
-                          "creatures/dummyguy/walk-2.png"))
-
-       (action
-         (name "right")
-        (fps 6)
-         (x-offset 0)
-         (y-offset 40)
-         (mirror-action "left"))
-         
-       (action
-         (name "stand")
-         (x-offset 0)
-         (y-offset 40)
-         (images "creatures/dummyguy/stand.png"))
-         
-       (action
-         (name "throw")
-        (fps 6)
-         (x-offset 0)
-         (y-offset 40)
-         (images "creatures/dummyguy/throw.png"))
-
-       (action
-         (name "jump")
-         (x-offset 0)
-         (y-offset 40)
-         (images "creatures/dummyguy/jump.png"))
-         
-       (action
-         (name "dead")
-         (x-offset 0)
-         (y-offset 0)
-         (images "creatures/dummyguy/dead.png")))
-
-
   ; MrTree  
   (sprite (name "mrtree")
       (action
                   "objects/hatch/hatch-5.png"))
   )
 
-  (sprite (name "yeti")
-    (action
-      (name "right")
-      (images "creatures/yeti/yeti_b.png")
-    )
-    (action
-      (name "left")
-      (mirror-action "right")
-    )
-  )
-
-  (sprite
-    (name "red-potion")
-    (action
-      (name "default")
-      (images "powerups/potions/red-potion.png")
-    )
-  )
-
-  (sprite
-    (name "blue-potion")
-    (action
-      (name "default")
-      (images "powerups/potions/blue-potion.png")
-    )
-  )
-
   (sprite
     (name "lightmap_light")
     (action
       (images "objects/keys/outline_gold.png")
     )
   )
-  (sprite
-    (name "leveldot")
-    (action
-      (name "default")
-      (x-offset 16)
-      (y-offset 16)
-      (images "worldmap/common/leveldot_red.png")
-    )
-    (action
-      (name "solved")
-      (x-offset 16)
-      (y-offset 16)
-      (images "worldmap/common/leveldot_green.png")
-    )
-  )
 )
 
index fee19e0..33dcff6 100644 (file)
        (bonusblock (x 96) (y 800)
           (contents "custom")
           (powerup
-            (sprite "red-potion")
+            (sprite "images/powerups/potions/red-potion.sprite")
             (script "
-function wait(time) {
-  set_wakeup_time(time);
-  suspend();
-}
-
 DisplayEffect.set_black(true);
 wait(0.1);
 DisplayEffect.set_black(false);
@@ -170,12 +165,8 @@ DisplayEffect.fade_in(1);
       (bonusblock (x 470) (y 96)
         (contents "custom")
         (powerup
-          (sprite "blue-potion")
+          (sprite "images/powerups/potions/blue-potion.sprite")
           (script "
-function wait(time) {
-  set_wakeup_time(time);
-  suspend();
-}
 DisplayEffect.fade_out(1);
 wait(1);
 Level.flip_vertically();
index eecf978..66ea823 100644 (file)
@@ -84,7 +84,7 @@
     (powerup (x 980) (y 140) (sprite "egg"))
     (powerup (x 1020) (y 140) (sprite "1up"))
     (powerup (x 1400) (y 140)
-      (sprite "red-potion")
+      (sprite "images/powerups/potions/images/powerups/potions/red-potion.sprite.sprite")
       (contents "custom")
       (script "Level.flip_vertically();")
     )
index 5566b52..4a4f1f1 100644 (file)
          (name "PENNY")
          (x 390)
          (y 510)
-         (sprite "dummyguy")
+         (sprite "images/creatures/dummyguy/dummyguy.sprite")
        )
        (init-script "intro();")
    )
index 2d6b46c..97e7636 100644 (file)
      (bonusblock (x 160) (y 160)
           (contents "custom")
           (powerup
-            (sprite "red-potion")
+            (sprite "images/powerups/potions/images/powerups/potions/red-potion.sprite.sprite")
             (script "
 function wait(time) {
   set_wakeup_time(time);
index 6671923..0c79c34 100644 (file)
          (name "TUX")
          (x 160)
          (y 448)
-         (sprite "yeti")
+         (sprite "images/creatues/yeti/yeti.sprite")
        )
        (scriptedobject
          (name "PENNY")
          (x 390)
          (y 448)
-         (sprite "dummyguy")
+         (sprite "images/creatures/dummyguy/dummyguy.sprite")
        )
        (scriptedobject
          (name "NOLOK")
          (x 420)
          (y 94)
-         (sprite "dummyguy")
+         (sprite "images/creatures/dummyguy/dummyguy.sprite")
          (visible #f)
          (physic-enabled #f)
          (solid #f)
index 4b43abd..5f0d95b 100644 (file)
              (bonusblock (x 160) (y 288)
           (contents "custom")
           (powerup
-            (sprite "red-potion")
+            (sprite "images/powerups/potions/images/powerups/potions/red-potion.sprite.sprite")
             (script "
 DisplayEffect.set_black(true);
 wait(0.1);
index 24c2171..7b21213 100644 (file)
@@ -111,11 +111,9 @@ Sound.play(\"sounds/invincible.wav\");
 Text.set_text(\"You made it!\");
 Text.set_font(\"big\");
 Text.fade_in(1.5);
-set_wakeup_time(4);
-suspend();
+wait(4);
 DisplayEffect.fade_out(1.5);
-set_wakeup_time(1.5);
-suspend();
+wait(1.5);
 Level.finish();
 ")
         )
index 50aa888..8fb1a95 100644 (file)
@@ -43,7 +43,7 @@ Yeti::Yeti(const lisp::Lisp& reader)
   reader.get("x", start_position.x);
   reader.get("y", start_position.y);
   bbox.set_size(80, 120);
-  sprite = sprite_manager->create("yeti");
+  sprite = sprite_manager->create("images/creatures/yeti/yeti.sprite");
   sprite->set_action("right");
   state = INIT;
   side = LEFT;
index 777db2c..75c1096 100644 (file)
@@ -29,6 +29,7 @@
 #include "game_session.hpp"
 #include "gameobjs.hpp"
 #include "sprite/sprite_manager.hpp"
+#include "sprite/sprite.hpp"
 #include "resources.hpp"
 #include "sector.hpp"
 #include "tilemap.hpp"
index af17653..1047ed7 100644 (file)
@@ -123,8 +123,6 @@ void
 ScriptInterpreter::run_script(std::istream& in, const std::string& sourcename,
         bool remove_when_terminated)
 {
-  printf("Stackbefore:\n");
-  print_squirrel_stack(v);
   if(sq_compile(v, squirrel_read_char, &in, sourcename.c_str(), true) < 0)
     throw Scripting::SquirrelError(v, "Couldn't parse script");
  
@@ -137,12 +135,9 @@ ScriptInterpreter::run_script(std::istream& in, const std::string& sourcename,
     if(remove_when_terminated) {
       remove_me();
     }
-    printf("ended.\n");
     // remove closure from stack
     sq_pop(v, 1);
   }
-  printf("After:\n");
-  print_squirrel_stack(v);
 }
 
 void
index a4597e5..58d22cf 100644 (file)
@@ -43,20 +43,18 @@ SpriteData::Action::~Action()
     delete *i;
 }
 
-SpriteData::SpriteData(const lisp::Lisp* lisp)
+SpriteData::SpriteData(const lisp::Lisp* lisp, const std::string& basedir)
 {
   lisp::ListIterator iter(lisp);
   while(iter.next()) {
     if(iter.item() == "name") {
       iter.value()->get(name);
     } else if(iter.item() == "action") {
-      parse_action(iter.lisp());
+      parse_action(iter.lisp(), basedir);
     } else {
       std::cerr << "Unknown sprite field: " << iter.item() << "\n";
     }
   }
-  if(name.empty())
-    throw std::runtime_error("Error: Sprite wihtout name.");
   if(actions.empty())
     throw std::runtime_error("Error: Sprite wihtout actions.");
 }
@@ -68,7 +66,7 @@ SpriteData::~SpriteData()
 }
 
 void
-SpriteData::parse_action(const lisp::Lisp* lisp)
+SpriteData::parse_action(const lisp::Lisp* lisp, const std::string& basedir)
 {
   Action* action = new Action;
 
@@ -108,7 +106,7 @@ SpriteData::parse_action(const lisp::Lisp* lisp)
     }
 
     for(std::vector<std::string>::size_type i = 0; i < images.size(); i++) {
-      action->surfaces.push_back(new Surface("images/" + images[i], true));
+      action->surfaces.push_back(new Surface(basedir + images[i], true));
     }
   }
   actions[action->name] = action;
index 3850141..9b90338 100644 (file)
 class SpriteData
 {
 public:
-       /** cur has to be a pointer to data in the form of ((x-offset 5)
-         (y-offset 10) ...) */
-       SpriteData(const lisp::Lisp* cur);                                         
-       ~SpriteData();
+  /** cur has to be a pointer to data in the form of ((x-offset 5)
+    (y-offset 10) ...) */
+  SpriteData(const lisp::Lisp* cur, const std::string& basedir);
+  ~SpriteData();
 
-       const std::string& get_name() const
-       {
-         return name;
-       }
+  const std::string& get_name() const
+  {
+    return name;
+  }
 
 private:
-       friend class Sprite;
+  friend class Sprite;
 
-       struct Action
-       {
-         Action();
-         ~Action();
-         
-         std::string name;
+  struct Action
+  {
+    Action();
+    ~Action();
 
-         /** Position correction */
-         int x_offset;
-         int y_offset;
-         /** Drawing priority in queue */
-         int z_order;
+    std::string name;
 
-         /** Frames per second */
-         float fps;
+    /** Position correction */
+    int x_offset;
+    int y_offset;
+    /** Drawing priority in queue */
+    int z_order;
 
-         std::vector<Surface*> surfaces;
-       };
+    /** Frames per second */
+    float fps;
 
-       typedef std::map <std::string, Action*> Actions;
-       Actions actions;
+    std::vector<Surface*> surfaces;
+  };
 
-       void parse_action(const lisp::Lisp* lispreader);
-       /** Get an action */
-       Action* get_action(std::string act);
+  typedef std::map <std::string, Action*> Actions;
+  Actions actions;
 
-       std::string name;
+  void parse_action(const lisp::Lisp* lispreader, const std::string& basedir);
+  /** Get an action */
+  Action* get_action(std::string act);
+
+  std::string name;
 };
 
 #endif
index 212c64c..aea403c 100644 (file)
@@ -28,6 +28,7 @@
 #include "lisp/lisp.hpp"
 #include "lisp/parser.hpp"
 #include "lisp/list_iterator.hpp"
+#include "file_system.hpp"
 
 SpriteManager::SpriteManager(const std::string& filename)
 {
@@ -55,7 +56,7 @@ SpriteManager::load_resfile(const std::string& filename)
     lisp::ListIterator iter(resources);
     while(iter.next()) {
       if(iter.item() == "sprite") {
-        SpriteData* spritedata = new SpriteData(iter.lisp());
+        SpriteData* spritedata = new SpriteData(iter.lisp(), "images/");
 
         Sprites::iterator i = sprites.find(spritedata->get_name());
         if (i == sprites.end()) {
@@ -82,11 +83,39 @@ Sprite*
 SpriteManager::create(const std::string& name)
 {
   Sprites::iterator i = sprites.find(name);
+  SpriteData* data;
   if(i == sprites.end()) {
-    std::stringstream msg;
-    msg << "Sprite '" << name << "' not found.";
+    // try loading the spritefile
+    data = load(name);
+    if(data == NULL) {
+      std::stringstream msg;
+      msg << "Sprite '" << name << "' not found.";
+      throw std::runtime_error(msg.str());
+    }
+  } else {
+    data = i->second;
+  }
+  
+  return new Sprite(*data);
+}
+
+SpriteData*
+SpriteManager::load(const std::string& filename)
+{
+  lisp::Parser parser;
+  std::auto_ptr<lisp::Lisp> root (parser.parse(filename));
+
+  const lisp::Lisp* sprite = root->get_lisp("supertux-sprite");
+  if(!sprite) {
+    std::ostringstream msg;
+    msg << "'" << filename << "' is not a supertux-sprite file";
     throw std::runtime_error(msg.str());
   }
-  return new Sprite(*i->second);
+
+  std::auto_ptr<SpriteData> data (
+      new SpriteData(sprite, FileSystem::dirname(filename)) );
+  sprites[filename] = data.release();
+  
+  return sprites[filename];
 }
 
index dcdcbf9..01ec930 100644 (file)
 
 #include <map>
 
-#include "sprite.hpp"
+class SpriteData;
+class Sprite;
 
 class SpriteManager
 {
 private:
-       typedef std::map<std::string, SpriteData*> Sprites;
-       Sprites sprites;
+  typedef std::map<std::string, SpriteData*> Sprites;
+  Sprites sprites;
+  
 public:
-       SpriteManager(const std::string& filename);
-       ~SpriteManager();
+  SpriteManager(const std::string& filename);
+  ~SpriteManager();
 
-       void load_resfile(const std::string& filename);
-       /** loads a sprite.
-        * (contrary to the old api you have to delete the sprite!)
-        */
-       Sprite* create(const std::string& name);
+  void load_resfile(const std::string& filename);
+  /** loads a sprite. */
+  Sprite* create(const std::string& filename);
+
+private:
+  SpriteData* load(const std::string& filename);
 };
 
 #endif
index 37ef759..45cc1bd 100644 (file)
@@ -516,7 +516,7 @@ WorldMap::parse_level_tile(const lisp::Lisp* level_lisp)
   level.south = true;
   level.west  = true;
 
-  std::string sprite = "leveldot";
+  std::string sprite = "images/worldmap/common/leveldot.sprite";
   level_lisp->get("sprite", sprite);
   level.sprite = sprite_manager->create(sprite);