From 1d613f782e21f55f915b6e5fa808e7435896461a Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 6 Apr 2005 23:00:16 +0000 Subject: [PATCH] Started some work on the yeti boss SVN-Revision: 2353 --- data/images/editor/stalactite_yeti.png | Bin 0 -> 1836 bytes data/images/supertux.strf | 7 + data/levels/test/yeti.stl | 319 +++++++++++++++++++++++++++++++++ data/sounds/yeti_gna.wav | Bin 0 -> 50466 bytes Doxyfile => docs/Doxyfile | 0 intl/.cvsignore | 2 - lib/app/setup.cpp | 3 - lib/audio/sound_manager.h | 2 +- src/badguy/jumpy.cpp | 1 + src/badguy/mrrocket.cpp | 1 + src/badguy/stalactite.h | 2 +- src/badguy/yeti.cpp | 163 +++++++++++++++++ src/badguy/yeti.h | 42 +++++ src/badguy/yeti_stalactite.cpp | 36 ++++ src/badguy/yeti_stalactite.h | 18 ++ src/object/camera.cpp | 22 +++ src/object/camera.h | 11 ++ 17 files changed, 622 insertions(+), 7 deletions(-) create mode 100644 data/images/editor/stalactite_yeti.png create mode 100644 data/levels/test/yeti.stl create mode 100644 data/sounds/yeti_gna.wav rename Doxyfile => docs/Doxyfile (100%) delete mode 100644 intl/.cvsignore create mode 100644 src/badguy/yeti.cpp create mode 100644 src/badguy/yeti.h create mode 100644 src/badguy/yeti_stalactite.cpp create mode 100644 src/badguy/yeti_stalactite.h diff --git a/data/images/editor/stalactite_yeti.png b/data/images/editor/stalactite_yeti.png new file mode 100644 index 0000000000000000000000000000000000000000..c8ea821a27e6aa7a29ab3ef0fabac37bea9ebdd9 GIT binary patch literal 1836 zcmV+{2h;e8P)6FGQ|$anw%2DwQ@ zK~z}7?UYN599I>F|8whBRabSjXS(NQJ08b2F)=X_EC910NW3;Eplm!m#49YaLc$Uf zTgws=5(ouFpg16b1CotqWD8;0fKVbrB&-An5^!P}HY;Y#Ej7?=x0UL)wKcROS57%|f`&7;bB9$M97Gr=`oi==`|L|EkNEA* zM7}tWSI+!$3IOD-09W3)Jhh9=!}mS(FoZXNR1!*-K~fRbED|d3nvqjtBBDZRu+r31 zfEcWy>Qb(= zl)li2#A*t8-++lxvxGzn*p(_eIj|7cQFc6(2L!S!*I-r#v60>eKui7r5QYxBh-uz8Awedi&zwUEfzb=CAzW_y;UY~8E z*$%N%Z=kPCG<{#!>kWjRHm*JQ6m6;k05CQ-HsOIMT?2pyqEz8QhsYC#@JN+1&b7`9 zS3=vDR&%=U_fZiAe72D|1{f*gb`y=|dEvJ^Tx9u%<{MT303Lnxb5qC?j2Rk5p%4~~ z=^({!Wa1G!w?A7^1BV955=2H3cHpW62^-ks00-=ZJ8_0i7{Lz$6nP54{QQ;x0H9i} zqS4PW-A>>)TM)WHR4^<!ZT$Yz!{M)6ttn|*hr=X6;5QJt9?Y_bhzv->pnWwDSA21ECdXX!k>-8Y*5~w)$Q??OU*>EX$CEeXz3)^)Nx#a8L$=G@+>k_w91wXMq$& z!i6YkIVJA1L{@UCh_kQXEk9usnw_2H1$zMJx)L16IOrKj$-t}+{_j+Z?43 z>dfiWs8}ZY1*6CcWVyoA@3HXB-@S@n(8fxXLo>t6`e^#Tb(g`TEzJM`tghbZY0V@E zFk}=10E&JWzxwhg)*Ixvo^F4-6&z_uI``)PBcZzLFYXCofv&{_fk@J6J2Ke(o{{w&Zhd(^!h#8v>5Rud>P0Khg$F!hc1&zyJ(j~#sq1kl>rY)-iqfU@gOU7Nms zW6)HFUN-~){OKEyyk)YtGGt<_ZK&7l0Dy|h5Ov!4*wLTfG+kTk&DXc(9Rb8q|FC8!aQs>5Vrl(pZf0ir*2pNjpFxo53K3Xp^r|SJ$F7+UX@Vf6Ycua>DMNYYy4mL aChxy`jhk(u+i%PO0000{19u4d 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 } else if(chit.normal.y < .5) { // bumped on roof physic.set_velocity_y(0); } diff --git a/src/badguy/mrrocket.cpp b/src/badguy/mrrocket.cpp index 035bb64ea..641448441 100644 --- a/src/badguy/mrrocket.cpp +++ b/src/badguy/mrrocket.cpp @@ -61,6 +61,7 @@ MrRocket::collision_squished(Player& player) { sprite->set_action(dir == LEFT ? "squished-left" : "squished-right"); kill_squished(player); + kill_fall(); return true; } diff --git a/src/badguy/stalactite.h b/src/badguy/stalactite.h index 6fc8078db..68cdac57b 100644 --- a/src/badguy/stalactite.h +++ b/src/badguy/stalactite.h @@ -17,7 +17,7 @@ public: void draw(DrawingContext& context); void deactivate(); -private: +protected: Timer2 timer; enum StalactiteState { diff --git a/src/badguy/yeti.cpp b/src/badguy/yeti.cpp new file mode 100644 index 000000000..6e57c7b69 --- /dev/null +++ b/src/badguy/yeti.cpp @@ -0,0 +1,163 @@ +#include + +#include +#include "yeti.h" +#include "object/camera.h" +#include "yeti_stalactite.h" + +static const float JUMP_VEL1 = 250; +static const float JUMP_VEL2 = 700; +static const float RUN_SPEED = 350; +static const float JUMP_TIME = 1.6; +static const float ANGRY_JUMP_WAIT = .5; + +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"); + state = INIT; + side = LEFT; + sound_gna = SoundManager::get()->load_sound( + get_resource_filename("sounds/yeti_gna.wav")); +} + +Yeti::~Yeti() +{ + Mix_FreeChunk(sound_gna); +} + +void +Yeti::active_action(float elapsed_time) +{ + switch(state) { + case INIT: + break; + case GO_RIGHT: + physic.set_velocity_x(RUN_SPEED); + if(timer.check()) + physic.set_velocity_y(JUMP_VEL2); + break; + case GO_LEFT: + physic.set_velocity_x(-RUN_SPEED); + if(timer.check()) + physic.set_velocity_y(JUMP_VEL2); + break; + case ANGRY_JUMPING: + if(timer.check()) { + // jump + SoundManager::get()->play_sound(sound_gna); + physic.set_velocity_y(JUMP_VEL1); + } + break; + default: + break; + } + + movement = physic.get_movement(elapsed_time); +} + +void +Yeti::go_right() +{ + // jump and move right + physic.set_velocity_y(JUMP_VEL1); + physic.set_velocity_x(RUN_SPEED); + state = GO_RIGHT; + timer.start(JUMP_TIME); +} + +void +Yeti::go_left() +{ + physic.set_velocity_y(JUMP_VEL1); + physic.set_velocity_x(-RUN_SPEED); + state = GO_LEFT; + timer.start(JUMP_TIME); +} + +void +Yeti::angry_jumping() +{ + jumpcount = 0; + timer.start(ANGRY_JUMP_WAIT); + state = ANGRY_JUMPING; + physic.set_velocity_x(0); +} + +bool +Yeti::collision_squished(Player& player) +{ + kill_squished(player); + return true; +} + +void +Yeti::write(lisp::Writer& ) +{ +} + +void +Yeti::drop_stalactite() +{ + YetiStalactite* nearest = 0; + float dist = FLT_MAX; + + Sector* sector = Sector::current(); + for(Sector::GameObjects::iterator i = sector->gameobjects.begin(); + i != sector->gameobjects.end(); ++i) { + YetiStalactite* stalactite = dynamic_cast (*i); + if(stalactite && stalactite->is_hanging()) { + float sdist + = fabsf(stalactite->get_pos().x - sector->player->get_pos().x); + if(sdist < dist) { + nearest = stalactite; + dist = sdist; + } + } + } + + if(nearest) + nearest->start_shaking(); +} + +HitResponse +Yeti::collision_solid(GameObject& , const CollisionHit& hit) +{ + if(fabsf(hit.normal.y) > .5) { // hit floor or roof? + physic.set_velocity_y(0); + if(state == INIT) { + go_right(); + } else if(state == GO_LEFT && !timer.started()) { + side = LEFT; + angry_jumping(); + } else if(state == GO_RIGHT && !timer.started()) { + side = RIGHT; + angry_jumping(); + } else if(state == ANGRY_JUMPING) { + if(!timer.started()) { + // we just landed + jumpcount++; + // make a stalactite falling down and shake camera a bit + Sector::current()->camera->shake(.1, 0, 10); + drop_stalactite(); + + // go to other side after 3 jumps + if(jumpcount == 3) { + if(side == LEFT) + go_right(); + else + go_left(); + } else { + // jump again + timer.start(ANGRY_JUMP_WAIT); + } + } + } + } + + return CONTINUE; +} + +IMPLEMENT_FACTORY(Yeti, "yeti") diff --git a/src/badguy/yeti.h b/src/badguy/yeti.h new file mode 100644 index 000000000..3910097aa --- /dev/null +++ b/src/badguy/yeti.h @@ -0,0 +1,42 @@ +#ifndef __YETI_H__ +#define __YETI_H__ + +#include "badguy.h" + +class Yeti : public BadGuy +{ +public: + Yeti(const lisp::Lisp& lisp); + ~Yeti(); + + void write(lisp::Writer& writer); + void active_action(float elapsed_time); + HitResponse collision_solid(GameObject& other, const CollisionHit& hit); + bool collision_squished(Player& player); + +private: + void go_right(); + void go_left(); + void angry_jumping(); + void drop_stalactite(); + + enum YetiState { + INIT, + ANGRY_JUMPING, + THROW_SNOWBALL, + GO_RIGHT, + GO_LEFT + }; + enum Side { + LEFT, + RIGHT + }; + Side side; + YetiState state; + Timer2 timer; + int jumpcount; + Mix_Chunk* sound_gna; +}; + +#endif + diff --git a/src/badguy/yeti_stalactite.cpp b/src/badguy/yeti_stalactite.cpp new file mode 100644 index 000000000..86e1f9188 --- /dev/null +++ b/src/badguy/yeti_stalactite.cpp @@ -0,0 +1,36 @@ +#include "yeti_stalactite.h" + +static const float SHAKE_TIME = .8; + +YetiStalactite::YetiStalactite(const lisp::Lisp& lisp) + : Stalactite(lisp) +{ +} + +YetiStalactite::~YetiStalactite() +{ +} + +void +YetiStalactite::start_shaking() +{ + timer.start(SHAKE_TIME); + state = STALACTITE_SHAKING; +} + +bool +YetiStalactite::is_hanging() +{ + return state == STALACTITE_HANGING; +} + +void +YetiStalactite::active_action(float elapsed_time) +{ + if(state == STALACTITE_HANGING) + return; + + Stalactite::active_action(elapsed_time); +} + +IMPLEMENT_FACTORY(YetiStalactite, "yeti_stalactite") diff --git a/src/badguy/yeti_stalactite.h b/src/badguy/yeti_stalactite.h new file mode 100644 index 000000000..2f1faa88f --- /dev/null +++ b/src/badguy/yeti_stalactite.h @@ -0,0 +1,18 @@ +#ifndef __YETI_STALACTITE_H__ +#define __YETI_STALACTITE_H__ + +#include "stalactite.h" + +class YetiStalactite : public Stalactite +{ +public: + YetiStalactite(const lisp::Lisp& lisp); + virtual ~YetiStalactite(); + + void active_action(float elapsed_time); + void start_shaking(); + bool is_hanging(); +}; + +#endif + diff --git a/src/object/camera.cpp b/src/object/camera.cpp index 8aa8d428d..1286db967 100644 --- a/src/object/camera.cpp +++ b/src/object/camera.cpp @@ -133,9 +133,20 @@ Camera::reset(const Vector& tuxpos) { translation.x = tuxpos.x - SCREEN_WIDTH/3 * 2; translation.y = tuxpos.y - SCREEN_HEIGHT/2; + shakespeed = 0; + shaketimer.stop(); keep_in_bounds(); } +void +Camera::shake(float time, float x, float y) +{ + shaketimer.start(time); + shakedepth_x = x; + shakedepth_y = y; + shakespeed = M_PI/2 / time; +} + static const float EPSILON = .00001; static const float max_speed_y = 140; @@ -166,6 +177,15 @@ Camera::keep_in_bounds() } void +Camera::shake() +{ + if(shaketimer.started()) { + translation.x -= sin(shaketimer.get_timegone() * shakespeed) * shakedepth_x; + translation.y -= sin(shaketimer.get_timegone() * shakespeed) * shakedepth_y; + } +} + +void Camera::scroll_normal(float elapsed_time) { assert(sector != 0); @@ -253,6 +273,7 @@ Camera::scroll_normal(float elapsed_time) translation.x -= speed_x * elapsed_time; keep_in_bounds(); + shake(); } void @@ -289,5 +310,6 @@ Camera::scroll_autoscroll(float elapsed_time) } keep_in_bounds(); + shake(); } diff --git a/src/object/camera.h b/src/object/camera.h index 028671add..b913ead73 100644 --- a/src/object/camera.h +++ b/src/object/camera.h @@ -27,6 +27,7 @@ #include "special/game_object.h" #include "video/drawing_context.h" #include "serializable.h" +#include "timer.h" using namespace SuperTux; namespace lisp { @@ -58,6 +59,9 @@ public: { } + // shake camera in a direction 1 time + void shake(float speed, float x, float y); + void set_scrolling(int scroll_x, int scroll_y) { translation.x = scroll_x; @@ -74,6 +78,7 @@ private: void scroll_normal(float elapsed_time); void scroll_autoscroll(float elapsed_time); void keep_in_bounds(); + void shake(); enum LeftRightScrollChange { @@ -98,6 +103,12 @@ private: size_t auto_idx; float auto_t; Vector current_dir; + + // shaking + Timer2 shaketimer; + float shakespeed; + float shakedepth_x; + float shakedepth_y; }; #endif /*SUPERTUX_CAMERA_H*/ -- 2.11.0