From: Ryan Flegel Date: Tue, 25 May 2004 21:21:22 +0000 (+0000) Subject: - added walking tree enemy. still needs some work X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=14e4df62c7a65ee97ee922c460b066225dd3db72;p=supertux.git - added walking tree enemy. still needs some work SVN-Revision: 1328 --- diff --git a/data/images/shared/walkingtree-left-1.png b/data/images/shared/walkingtree-left-1.png new file mode 100644 index 000000000..606ecc278 Binary files /dev/null and b/data/images/shared/walkingtree-left-1.png differ diff --git a/data/images/shared/walkingtree-left-small-1.png b/data/images/shared/walkingtree-left-small-1.png new file mode 100644 index 000000000..dc41ff53c Binary files /dev/null and b/data/images/shared/walkingtree-left-small-1.png differ diff --git a/data/supertux.strf b/data/supertux.strf index 75375daee..9bab02831 100644 --- a/data/supertux.strf +++ b/data/supertux.strf @@ -644,6 +644,15 @@ (y-hotspot 0) (images "shared/wingling-1.png")) + ; Walkingtree + (sprite (name "walkingtree-left") + (x-hotspot 0) + (y-hotspot 0) + (images "shared/walkingtree-left-1.png")) + (sprite (name "walkingtree-left-small") + (x-hotspot 0) + (y-hotspot 0) + (images "shared/walkingtree-left-small-1.png")) ) ;; EOF ;; diff --git a/src/badguy.cpp b/src/badguy.cpp index 0866f2269..b7879b56f 100644 --- a/src/badguy.cpp +++ b/src/badguy.cpp @@ -75,6 +75,8 @@ Sprite* img_snowball_right; Sprite* img_snowball_squished_left; Sprite* img_snowball_squished_right; Sprite* img_wingling_left; +Sprite* img_walkingtree_left; +Sprite* img_walkingtree_left_small; #define BADGUY_WALK_SPEED .8f #define WINGLING_FLY_SPEED 1.6f @@ -103,6 +105,8 @@ BadGuyKind badguykind_from_string(const std::string& str) return BAD_SNOWBALL; else if (str == "wingling") return BAD_WINGLING; + else if (str == "walkingtree") + return BAD_WALKINGTREE; else { printf("Couldn't convert badguy: '%s'\n", str.c_str()); @@ -147,6 +151,8 @@ std::string badguykind_to_string(BadGuyKind kind) case BAD_WINGLING: return "wingling"; break; + case BAD_WALKINGTREE: + return "walkingtree"; default: return "snowball"; } @@ -291,6 +297,13 @@ BadGuy::activate(Direction activation_dir) physic.set_velocity(dirsign * WINGLING_FLY_SPEED, 0); physic.enable_gravity(false); set_sprite(img_wingling_left, img_wingling_left); + } else if (kind == BAD_WALKINGTREE) { + // TODO: why isn't the height/width being set properly in set_sprite? + physic.set_velocity(dirsign * BADGUY_WALK_SPEED, 0); + mode = BGM_BIG; + set_sprite(img_walkingtree_left, img_walkingtree_left); + base.width = 66; + base.height = 66; } base.x = start_position.x; @@ -818,6 +831,23 @@ BadGuy::action_wingling(double elapsed_time) // TODO: Winglings should be removed after flying off the screen } +void +BadGuy::action_walkingtree(double elapsed_time) +{ + if (dying == DYING_NOT) + check_horizontal_bump(); + + fall(); + + physic.apply(elapsed_time, base.x, base.y); + if (dying != DYING_FALLING) + collision_swept_object_map(&old_base,&base); + + // Handle dying timer: + if (dying == DYING_SQUISHED && !timer.check()) + remove_me(); +} + void BadGuy::action(float elapsed_time) @@ -923,6 +953,10 @@ BadGuy::action(float elapsed_time) action_wingling(elapsed_time); break; + case BAD_WALKINGTREE: + action_walkingtree(elapsed_time); + break; + default: break; } @@ -1102,6 +1136,25 @@ BadGuy::squish(Player* player) } else if(kind == BAD_WINGLING) { squish_me(player); set_sprite(img_wingling_left, img_wingling_left); + } else if(kind == BAD_WALKINGTREE) { + if (mode == BGM_BIG) + { + set_sprite(img_walkingtree_left_small, img_walkingtree_left_small); + physic.set_velocity_x(physic.get_velocity_x() * 1.1); + // XXX magic number: 66 is BGM_BIG height + base.y += 66 - base.height; + + player->base.y = base.y - player->base.height - 2; + make_player_jump(player); + + World::current()->add_score(Vector(base.x, base.y), + 25 * player_status.score_multiplier); + player_status.score_multiplier++; + + mode = BGM_SMALL; + } + else + squish_me(player); } @@ -1353,6 +1406,8 @@ void load_badguy_gfx() img_snowball_squished_left = sprite_manager->load("snowball-squished-left"); img_snowball_squished_right = sprite_manager->load("snowball-squished-right"); img_wingling_left = sprite_manager->load("wingling-left"); + img_walkingtree_left = sprite_manager->load("walkingtree-left"); + img_walkingtree_left_small = sprite_manager->load("walkingtree-left-small"); } void free_badguy_gfx() diff --git a/src/badguy.h b/src/badguy.h index 0d8006a93..7b607e113 100644 --- a/src/badguy.h +++ b/src/badguy.h @@ -50,6 +50,7 @@ enum BadGuyKind { BAD_SPIKY, BAD_SNOWBALL, BAD_WINGLING, + BAD_WALKINGTREE, NUM_BadGuyKinds }; @@ -82,7 +83,10 @@ public: FISH_WAIT, FLY_UP, - FLY_DOWN + FLY_DOWN, + + BGM_BIG, + BGM_SMALL }; public: DyingType dying; @@ -147,6 +151,7 @@ private: void action_spiky(double frame_ratio); void action_snowball(double frame_ratio); void action_wingling(double frame_ratio); + void action_walkingtree(double frame_ratio); /** initializes the badguy (when he appears on screen) */ void activate(Direction direction);