From 29ec866f6472779b2559f23f969b0317e348beb8 Mon Sep 17 00:00:00 2001 From: LMH Date: Tue, 16 Jul 2013 05:16:05 -1000 Subject: [PATCH] New BadGuy: GoldBomb - a bomb that throws a bunch of coins when exploding. Note: these coins are currently counted in level statistics. Also goldbomb is not allowed to be dispensed at this time. --- .../creatures/gold_bomb/exploding-left-0.png | Bin 0 -> 2780 bytes .../creatures/gold_bomb/exploding-left-1.png | Bin 0 -> 2772 bytes .../creatures/gold_bomb/exploding-left-2.png | Bin 0 -> 2761 bytes .../creatures/gold_bomb/exploding-left-3.png | Bin 0 -> 2757 bytes .../creatures/gold_bomb/exploding-left-4.png | Bin 0 -> 2751 bytes data/images/creatures/gold_bomb/gold_bomb.sprite | 68 ++++++ data/images/creatures/gold_bomb/iced-left.png | Bin 0 -> 3968 bytes data/images/creatures/gold_bomb/left-0.png | Bin 0 -> 2954 bytes data/images/creatures/gold_bomb/left-1.png | Bin 0 -> 3024 bytes data/images/creatures/gold_bomb/left-2.png | Bin 0 -> 3135 bytes src/badguy/bomb.cpp | 1 + src/badguy/dispenser.cpp | 4 + src/badguy/goldbomb.cpp | 240 +++++++++++++++++++++ src/badguy/goldbomb.hpp | 67 ++++++ src/supertux/level.cpp | 12 +- src/supertux/object_factory.cpp | 2 + 16 files changed, 386 insertions(+), 8 deletions(-) create mode 100644 data/images/creatures/gold_bomb/exploding-left-0.png create mode 100644 data/images/creatures/gold_bomb/exploding-left-1.png create mode 100644 data/images/creatures/gold_bomb/exploding-left-2.png create mode 100644 data/images/creatures/gold_bomb/exploding-left-3.png create mode 100644 data/images/creatures/gold_bomb/exploding-left-4.png create mode 100644 data/images/creatures/gold_bomb/gold_bomb.sprite create mode 100644 data/images/creatures/gold_bomb/iced-left.png create mode 100644 data/images/creatures/gold_bomb/left-0.png create mode 100644 data/images/creatures/gold_bomb/left-1.png create mode 100644 data/images/creatures/gold_bomb/left-2.png create mode 100644 src/badguy/goldbomb.cpp create mode 100644 src/badguy/goldbomb.hpp diff --git a/data/images/creatures/gold_bomb/exploding-left-0.png b/data/images/creatures/gold_bomb/exploding-left-0.png new file mode 100644 index 0000000000000000000000000000000000000000..943315f69cf1e3045768349de47c38542c3a538f GIT binary patch literal 2780 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 P00000NkvXXu0mjf73U<} literal 0 HcmV?d00001 diff --git a/data/images/creatures/gold_bomb/exploding-left-3.png b/data/images/creatures/gold_bomb/exploding-left-3.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0477bcfbeaede6e96b8d9cada9689481327537 GIT binary patch literal 2757 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 FV1i-?4(I>? literal 0 HcmV?d00001 diff --git a/data/images/creatures/gold_bomb/gold_bomb.sprite b/data/images/creatures/gold_bomb/gold_bomb.sprite new file mode 100644 index 000000000..df1ed18cd --- /dev/null +++ b/data/images/creatures/gold_bomb/gold_bomb.sprite @@ -0,0 +1,68 @@ +(supertux-sprite + (action + (name "left") + (fps 10.0) + (hitbox 5 8 32 32) + (images "left-0.png" + "left-1.png" + "left-2.png" + "left-1.png")) + + (action + (name "right") + (fps 10.0) + (hitbox 5 8 32 32) + (mirror-action "left")) + + (action + (name "iced-left") + (hitbox 5 8 31.8 31.8) + (images "iced-left.png")) + + (action + (name "iced-right") + (hitbox 5 8 31.8 31.8) + (mirror-action "iced-left")) + + (action + (name "ticking-left") + (fps 10.0) + (hitbox 5 8 32 32) + (images "exploding-left-0.png" + "exploding-left-1.png" + "exploding-left-2.png" + "exploding-left-3.png" + "exploding-left-4.png" + "exploding-left-3.png" + "exploding-left-2.png" + "exploding-left-1.png" + "exploding-left-0.png" + "exploding-left-1.png" + "exploding-left-2.png" + "exploding-left-3.png" + "exploding-left-4.png" + "exploding-left-3.png" + "exploding-left-2.png" + "exploding-left-1.png" + "exploding-left-0.png" + "exploding-left-2.png" + "exploding-left-4.png" + "exploding-left-2.png" + "exploding-left-0.png" + "exploding-left-2.png" + "exploding-left-4.png" + "exploding-left-2.png" + "exploding-left-0.png" + "exploding-left-4.png" + "exploding-left-0.png" + "exploding-left-4.png" + )) + + + (action + (name "ticking-right") + (fps 10.0) + (hitbox 5 8 32 32) + (mirror-action "ticking-left")) + +) diff --git a/data/images/creatures/gold_bomb/iced-left.png b/data/images/creatures/gold_bomb/iced-left.png new file mode 100644 index 0000000000000000000000000000000000000000..22f5afa1c68cbad7689406636d68e0c3a43ec4cb GIT binary patch literal 3968 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 a@%V32Mn@Yf02<){0000?00006VoOIv0RI60 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/data/images/creatures/gold_bomb/left-1.png b/data/images/creatures/gold_bomb/left-1.png new file mode 100644 index 0000000000000000000000000000000000000000..58f39f3c644208706844d87c5b934db10c4b2a2b GIT binary patch literal 3024 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 SW%;fE0000?00006VoOIv0RI60 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 = dir; // portable objects are usually pushed away from Tux when dropped, but we // don't want that, so we set the position + //FIXME: why don't we want that? shouldn't behavior be consistent? set_pos(object.get_pos() + Vector(dir == LEFT ? -16 : 16, get_bbox().get_height()*0.66666 - 32)); set_colgroup_active(COLGROUP_MOVING); grabbed = false; diff --git a/src/badguy/dispenser.cpp b/src/badguy/dispenser.cpp index da9514b51..cb4a923fa 100644 --- a/src/badguy/dispenser.cpp +++ b/src/badguy/dispenser.cpp @@ -199,6 +199,10 @@ Dispenser::launch_badguy() log_warning << "random is outdated; use a list of badguys to select from." << std::endl; return; } + if(badguy == "goldbomb") { + log_warning << "goldbomb is not allowed to be dispensed" << std::endl; + return; + } try { GameObject *game_object; diff --git a/src/badguy/goldbomb.cpp b/src/badguy/goldbomb.cpp new file mode 100644 index 000000000..f87f6059b --- /dev/null +++ b/src/badguy/goldbomb.cpp @@ -0,0 +1,240 @@ +// SuperTux BadGuy GoldBomb - a bomb that throws up coins when exploding +// Copyright (C) 2006 Matthias Braun +// Copyright (C) 2013 LMH +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include "audio/sound_manager.hpp" +#include "badguy/goldbomb.hpp" +#include "object/coin_explode.hpp" +#include "object/explosion.hpp" +#include "object/player.hpp" +#include "object/portable.hpp" +#include "sprite/sprite.hpp" +#include "sprite/sprite_manager.hpp" +#include "supertux/object_factory.hpp" +#include "supertux/sector.hpp" +#include "util/reader.hpp" + +GoldBomb::GoldBomb(const Reader& reader) : + WalkingBadguy(reader, "images/creatures/gold_bomb/gold_bomb.sprite", "left", "right"), + tstate(STATE_NORMAL), + grabbed(false), + grabber(NULL) +{ + walk_speed = 80; + max_drop_height = 16; + + //Prevent stutter when Tux jumps on Gold Bomb + sound_manager->preload("sounds/explosion.wav"); + + //Check if we need another sprite + if( !reader.get( "sprite", sprite_name ) ){ + return; + } + if( sprite_name == "" ){ + sprite_name = "images/creatures/gold_bomb/gold_bomb.sprite"; + return; + } + //Replace sprite + sprite = sprite_manager->create( sprite_name ); +} + +void +GoldBomb::collision_solid(const CollisionHit& hit) +{ + if(tstate == STATE_TICKING) { + if(hit.bottom) { + physic.set_velocity_y(0); + physic.set_velocity_x(0); + }else if (hit.left || hit.right) + physic.set_velocity_x(-physic.get_velocity_x()); + else if (hit.top) + physic.set_velocity_y(0); + return; + } + WalkingBadguy::collision_solid(hit); +} + +HitResponse +GoldBomb::collision(GameObject& object, const CollisionHit& hit) +{ + if(tstate == STATE_TICKING) + return ABORT_MOVE; + if(grabbed) + return FORCE_MOVE; + return WalkingBadguy::collision(object, hit); +} + +HitResponse +GoldBomb::collision_player(Player& player, const CollisionHit& hit) +{ + if(tstate == STATE_TICKING) + return ABORT_MOVE; + if(grabbed) + return FORCE_MOVE; + return WalkingBadguy::collision_player(player, hit); +} + +HitResponse +GoldBomb::collision_badguy(BadGuy& badguy, const CollisionHit& hit) +{ + if(tstate == STATE_TICKING) + return ABORT_MOVE; + return WalkingBadguy::collision_badguy(badguy, hit); +} + +bool +GoldBomb::collision_squished(GameObject& object) +{ + Player* player = dynamic_cast(&object); + if(player && player->is_invincible()) { + player->bounce(*this); + kill_fall(); + return true; + } + if(is_valid() && tstate == STATE_NORMAL) { + tstate = STATE_TICKING; + frozen = false; + set_action(dir == LEFT ? "ticking-left" : "ticking-right", 1); + physic.set_velocity_x(0); + + if (player) + player->bounce(*this); + + ticking.reset(sound_manager->create_sound_source("sounds/fizz.wav")); + ticking->set_position(get_pos()); + ticking->set_looping(true); + ticking->set_gain(2.0); + ticking->set_reference_distance(32); + ticking->play(); + } + return true; +} + +void +GoldBomb::active_update(float elapsed_time) +{ + if(tstate == STATE_TICKING) { + ticking->set_position(get_pos()); + if(sprite->animation_done()) { + kill_fall(); + } + else if (!grabbed) { + movement = physic.get_movement(elapsed_time); + } + return; + } + if(grabbed) + return; + WalkingBadguy::active_update(elapsed_time); +} + +void +GoldBomb::kill_fall() +{ + if(tstate == STATE_TICKING) + ticking->stop(); + + // Make the player let go before we explode, otherwise the player is holding + // an invalid object. There's probably a better way to do this than in the + // GoldBomb class. + if (grabber != NULL) { + Player* player = dynamic_cast(grabber); + + if (player) + player->stop_grabbing(); + } + + if(is_valid()) { + remove_me(); + Sector::current()->add_object(new Explosion(get_bbox().get_middle())); + Sector::current()->add_object(new CoinExplode(get_pos() + Vector (0, -40), 1)); + } + + run_dead_script(); +} + +void +GoldBomb::grab(MovingObject& object, const Vector& pos, Direction dir) +{ + if(tstate == STATE_TICKING){ + movement = pos - get_pos(); + this->dir = dir; + + // We actually face the opposite direction of Tux here to make the fuse more + // visible instead of hiding it behind Tux + sprite->set_action_continued(dir == LEFT ? "ticking-right" : "ticking-left"); + set_colgroup_active(COLGROUP_DISABLED); + grabbed = true; + grabber = &object; + } + else if(frozen){ + movement = pos - get_pos(); + this->dir = dir; + sprite->set_action(dir == LEFT ? "iced-left" : "iced-right"); + set_colgroup_active(COLGROUP_DISABLED); + grabbed = true; + } +} + +void +GoldBomb::ungrab(MovingObject& object, Direction dir) +{ + int toss_velocity_x = 0; + int toss_velocity_y = 0; + Player* player = dynamic_cast (&object); + + // toss upwards + if(dir == UP) + toss_velocity_y += -500; + + // toss to the side when moving sideways + if(player && player->physic.get_velocity_x()*(dir == LEFT ? -1 : 1) > 1) { + toss_velocity_x += (dir == LEFT) ? -200 : 200; + toss_velocity_y = (toss_velocity_y < -200) ? toss_velocity_y : -200; + // toss farther when running + if(player && player->physic.get_velocity_x()*(dir == LEFT ? -1 : 1) > 200) + toss_velocity_x += player->physic.get_velocity_x()-(190*(dir == LEFT ? -1 : 1)); + } + log_warning << toss_velocity_x << toss_velocity_y << std::endl;//// + + //set_pos(object.get_pos() + Vector((dir == LEFT ? -33 : 33), get_bbox().get_height()*0.66666 - 32)); + physic.set_velocity(toss_velocity_x, toss_velocity_y); + set_colgroup_active(COLGROUP_MOVING); + grabbed = false; +} + +void +GoldBomb::freeze() +{ + if(tstate == STATE_NORMAL){ + WalkingBadguy::freeze(); + sprite->set_action(dir == LEFT ? "iced-left" : "iced-right"); + } +} + +bool +GoldBomb::is_freezable() const +{ + return true; +} + +bool +GoldBomb::is_portable() const +{ + return (frozen || (tstate == STATE_TICKING)); +} + +/* EOF */ diff --git a/src/badguy/goldbomb.hpp b/src/badguy/goldbomb.hpp new file mode 100644 index 000000000..d82d28e5a --- /dev/null +++ b/src/badguy/goldbomb.hpp @@ -0,0 +1,67 @@ +// SuperTux BadGuy GoldBomb - a bomb that throws up coins when exploding +// Copyright (C) 2006 Matthias Braun +// Copyright (C) 2013 LMH +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + + +#ifndef HEADER_SUPERTUX_BADGUY_GOLDBOMB_HPP +#define HEADER_SUPERTUX_BADGUY_GOLDBOMB_HPP + +#include "audio/sound_source.hpp" +#include "badguy/walking_badguy.hpp" +#include "object/portable.hpp" + +class GoldBomb : public WalkingBadguy, public Portable +{ +public: + GoldBomb(const Reader& reader); + + void collision_solid(const CollisionHit& hit); + HitResponse collision(GameObject& object, const CollisionHit& hit); + HitResponse collision_player(Player& player, const CollisionHit& hit); + HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit); + + void active_update(float elapsed_time); + + void grab(MovingObject& object, const Vector& pos, Direction dir); + void ungrab(MovingObject& object, Direction dir); + bool is_portable() const; + + void freeze(); + bool is_freezable() const; + + void kill_fall(); + +protected: + bool collision_squished(GameObject& object); + +private: + GoldBomb(const GoldBomb&); + GoldBomb& operator=(const GoldBomb&); + enum Ticking_State { + STATE_NORMAL, + STATE_TICKING + }; + + Ticking_State tstate; + bool grabbed; + MovingObject* grabber; + + std::auto_ptr ticking; +}; + +#endif + +/* EOF */ diff --git a/src/supertux/level.cpp b/src/supertux/level.cpp index fbd16c3bb..0d78d531d 100644 --- a/src/supertux/level.cpp +++ b/src/supertux/level.cpp @@ -16,6 +16,7 @@ #include "supertux/level.hpp" +#include "badguy/goldbomb.hpp" #include "lisp/list_iterator.hpp" #include "lisp/parser.hpp" #include "object/bonus_block.hpp" @@ -210,15 +211,10 @@ Level::get_total_coins() total_coins += 10; continue; } -#if 0 - // FIXME: do we want this? q.v. src/object/oneup.cpp - else if (block->contents == BonusBlock::CONTENT_1UP) - { - total_coins += 100; - continue; - } -#endif } + GoldBomb *goldbomb = dynamic_cast (*o); + if(goldbomb) + total_coins += 10; } } return total_coins; diff --git a/src/supertux/object_factory.cpp b/src/supertux/object_factory.cpp index 42fe3445a..d08e1f768 100644 --- a/src/supertux/object_factory.cpp +++ b/src/supertux/object_factory.cpp @@ -37,6 +37,7 @@ #include "badguy/flame.hpp" #include "badguy/flyingsnowball.hpp" #include "badguy/ghosttree.hpp" +#include "badguy/goldbomb.hpp" #include "badguy/haywire.hpp" #include "badguy/igel.hpp" #include "badguy/jumpy.hpp" @@ -189,6 +190,7 @@ ObjectFactory::init_factories() add_factory("flame"); add_factory("flyingsnowball"); add_factory("ghosttree"); + add_factory("goldbomb"); add_factory("haywire"); add_factory("igel"); add_factory("jumpy"); -- 2.11.0