Patchs by Matt McCutche to fix Treeboss related Bugs 469 and 504.
authorWolfgang Becker <uafr@gmx.de>
Sun, 30 Aug 2009 15:41:51 +0000 (15:41 +0000)
committerWolfgang Becker <uafr@gmx.de>
Sun, 30 Aug 2009 15:41:51 +0000 (15:41 +0000)
* Tree willowisps should start at tree boss, not (0, 0)
* Crash if tree boss creates root while player is dying

SVN-Revision: 5911

src/badguy/ghosttree.cpp
src/badguy/treewillowisp.cpp
src/badguy/treewillowisp.hpp

index e349f6d..c00538e 100644 (file)
@@ -158,8 +158,10 @@ GhostTree::active_update(float elapsed_time)
     if(root_timer.check()) {
       /* TODO indicate root with an animation */
       Player* player = get_nearest_player();
-      Root* root = new Root(Vector(player->get_bbox().get_left(), get_bbox().get_bottom()+ROOT_TOP_OFFSET));
-      Sector::current()->add_object(root);
+      if (player) {
+        Root* root = new Root(Vector(player->get_bbox().get_left(), get_bbox().get_bottom()+ROOT_TOP_OFFSET));
+        Sector::current()->add_object(root);
+      }
     }
   } else if (mystate == STATE_SWALLOWING) {
     if (suck_lantern) {
index a1a6343..f25ea53 100644 (file)
@@ -37,16 +37,14 @@ static const float       SUCKSPEED = 25;
 
 TreeWillOWisp::TreeWillOWisp(GhostTree* tree, const Vector& pos,
                              float radius, float speed)
-  : BadGuy(Vector(0, 0), "images/creatures/willowisp/willowisp.sprite",
+  : BadGuy(tree->get_pos() + pos, "images/creatures/willowisp/willowisp.sprite",
            LAYER_OBJECTS - 20), was_sucked(false), mystate(STATE_DEFAULT), tree(tree)
 {
-  treepos_delta = pos;
   sound_manager->preload(SOUNDFILE);
 
   this->radius = radius;
   this->angle  = 0;
   this->speed  = speed;
-  start_position = tree->get_pos() + treepos_delta;
 
   set_colgroup_active(COLGROUP_MOVING);
 }
@@ -137,7 +135,7 @@ TreeWillOWisp::active_update(float elapsed_time)
   }
 
   angle = fmodf(angle + elapsed_time * speed, (float) (2*M_PI));
-  Vector newpos(tree->get_pos() + treepos_delta + Vector(sin(angle) * radius, 0));
+  Vector newpos(start_position + Vector(sin(angle) * radius, 0));
   movement = newpos - get_pos();
   float sizemod = cos(angle) * 0.8f;
   /* TODO: modify sprite size */
index b452e3f..facd07a 100644 (file)
@@ -67,7 +67,6 @@ private:
   float speed;
 
   std::auto_ptr<SoundSource> sound_source;
-  Vector     treepos_delta;
   GhostTree* tree;
 
   Vector suck_target;