X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fyeti.cpp;fp=src%2Fbadguy%2Fyeti.cpp;h=7e6c83c5586ab3280bce68a1b60c65840d667214;hb=7becc3ff0c1c8b4c9a2bdb12bfc085925c8702f1;hp=6249ea9166a4001b15ef620bd1759c7a9581902b;hpb=d625a7bfb131e5e6c8061901c0d69352788820d8;p=supertux.git diff --git a/src/badguy/yeti.cpp b/src/badguy/yeti.cpp index 6249ea916..7e6c83c55 100644 --- a/src/badguy/yeti.cpp +++ b/src/badguy/yeti.cpp @@ -36,17 +36,17 @@ const float JUMP_DOWN_VY = -250; /**< vertical speed while jumping off the dais const float RUN_VX = 350; /**< horizontal speed while running */ const float JUMP_UP_VX = 350; /**< horizontal speed while jumping on the dais */ -const float JUMP_UP_VY = -800; /**< vertical speed while jumping on the dais */ +const float JUMP_UP_VY = -700; /**< vertical speed while jumping on the dais */ -const float STOMP_VY = -250; /** vertical speed while stomping on the dais */ +const float STOMP_VY = -300; /** vertical speed while stomping on the dais */ -const float LEFT_STAND_X = 16; /**< x-coordinate of left dais' end position */ -const float RIGHT_STAND_X = 800-60-16; /**< x-coordinate of right dais' end position */ -const float LEFT_JUMP_X = LEFT_STAND_X+224; /**< x-coordinate of from where to jump on the left dais */ -const float RIGHT_JUMP_X = RIGHT_STAND_X-224; /**< x-coordinate of from where to jump on the right dais */ +const float LEFT_STAND_X = 80; /**< x-coordinate of left dais' end position */ +const float RIGHT_STAND_X = 1280-LEFT_STAND_X-60; /**< x-coordinate of right dais' end position */ +const float LEFT_JUMP_X = LEFT_STAND_X+448; /**< x-coordinate of from where to jump on the left dais */ +const float RIGHT_JUMP_X = RIGHT_STAND_X-448; /**< x-coordinate of from where to jump on the right dais */ const float STOMP_WAIT = .5; /**< time we stay on the dais before jumping again */ const float SAFE_TIME = .5; /**< the time we are safe when tux just hit us */ -const int INITIAL_HITPOINTS = 3; /**< number of hits we can take */ +const int INITIAL_HITPOINTS = 9; /**< number of hits we can take */ const float YETI_SQUISH_TIME = 5; } @@ -172,23 +172,16 @@ void Yeti::be_angry() { //turn around - dir = (dir==RIGHT)?LEFT:RIGHT; + dir = (dir==RIGHT) ? LEFT : RIGHT; - sprite->set_action((dir==RIGHT)?"stand-right":"stand-left"); + sprite->set_action((dir==RIGHT) ? "stand-right" : "stand-left"); physic.set_velocity_x(0); physic.set_velocity_y(0); - if (hit_points < INITIAL_HITPOINTS) summon_snowball(); stomp_count = 0; state = BE_ANGRY; state_timer.start(STOMP_WAIT); } -void -Yeti::summon_snowball() -{ - Sector::current()->add_object(new BouncingSnowball(Vector(get_pos().x+(dir == RIGHT ? 64 : -64), get_pos().y), dir)); -} - bool Yeti::collision_squished(GameObject& object) { @@ -237,7 +230,6 @@ void Yeti::kill_fall() { // shooting bullets or being invincible won't work :) - //take_hit(*get_nearest_player()); // FIXME: debug only(?) } void @@ -246,9 +238,6 @@ Yeti::drop_stalactite() // make a stalactite falling down and shake camera a bit Sector::current()->camera->shake(.1f, 0, 10); - YetiStalactite* nearest = 0; - float dist = FLT_MAX; - Player* player = this->get_nearest_player(); if (!player) return; @@ -257,17 +246,31 @@ Yeti::drop_stalactite() i != sector->gameobjects.end(); ++i) { YetiStalactite* stalactite = dynamic_cast (*i); if(stalactite && stalactite->is_hanging()) { - float sdist - = fabsf(stalactite->get_pos().x - player->get_pos().x); - if(sdist < dist) { - nearest = stalactite; - dist = sdist; + float distancex; + switch (hit_points) { + case 9: + case 8: + case 7: + case 6: + // drop stalactites within 3 of player, going out with each jump + distancex = fabsf(stalactite->get_bbox().get_middle().x - player->get_bbox().get_middle().x); + if(distancex < stomp_count*32) { + stalactite->start_shaking(); + } + break; + case 5: + case 4: + case 3: + case 2: + case 1: + // drop every 3rd stalactite + if(((((int)stalactite->get_pos().x + 16) / 32) % 3) == (stomp_count % 3)) { + stalactite->start_shaking(); + } + break; } } } - - if(nearest) - nearest->start_shaking(); } void