enable_hover = false;
butt_jump = false;
+ flapping_velocity = 0;
+
+ // temporary to help player's choosing a flapping
+ flapping_mode = MAREK_FLAP;
+
+ // Ricardo's flapping
+ flaps_nb = 0;
+
frame_main = 0;
frame_ = 0;
/* Reset score multiplier (for multi-hits): */
if (!invincible_timer.started())
{
- /*if(player_status.score_multiplier > 2)
- { // show a message
+ if(player_status.score_multiplier > player_status.max_score_multiplier)
+ {
+ player_status.max_score_multiplier = player_status.score_multiplier;
+
+ // show a message
char str[124];
- sprintf(str, _("%d bad guys in a row!"), player_status.score_multiplier-1);
+ sprintf(str, _("New max combo: %d"), player_status.max_score_multiplier-1);
Sector::current()->add_floating_text(base, str);
- }*/
+ }
player_status.score_multiplier = 1;
}
}
}
// changing directions?
- if(on_ground() && ((vx < 0 && dirsign >0) || (vx>0 && dirsign<0))) {
- if(fabs(vx)>SKID_XM && !skidding_timer.check()) {
+ if(on_ground() && ((vx < 0 && dirsign >0) || (vx>0 && dirsign<0)))
+ {
+ // let's skid!
+ if(fabs(vx)>SKID_XM && !skidding_timer.check())
+ {
skidding_timer.start(SKID_TIME);
SoundManager::get()->play_sound(IDToSound(SND_SKID));
+ // dust some partcles
+ Sector::current()->add_particles(
+ Vector(base.x + (dir == RIGHT ? base.width : 0), base.y+base.height),
+ dir == RIGHT ? 270+20 : 90-40, dir == RIGHT ? 270+40 : 90-20,
+ Vector(2.8,-2.6), Vector(0,0.030), 3, Color(100,100,100), 3, 800,
+ LAYER_OBJECTS+1);
+
ax *= 2.5;
- } else {
+ }
+ else
+ {
ax *= 2;
- }
- }
+ }
+ }
// we get slower when not pressing any keys
if(dirsign == 0) {
flapping = false;
can_jump = false;
can_flap = false;
+ flaps_nb = 0; // Ricardo's flapping
if (size == SMALL)
SoundManager::get()->play_sound(IDToSound(SND_JUMP));
else
}
}
-
+ // temporary to help player's choosing a flapping
+ if(flapping_mode == RICARDO_FLAP)
+ {
+ // Flapping, Ricardo's version
+ // similar to SM3 Fox
+ if(input.jump == DOWN && input.old_jump == UP && can_flap &&
+ flaps_nb < 3)
+ {
+ physic.set_velocity_y(3.5);
+ physic.set_velocity_x(physic.get_velocity_x() * 0.35);
+ flaps_nb++;
+ }
+ }
+ else if(flapping_mode == MAREK_FLAP)
+ {
// Flapping, Marek's version
if (input.jump == DOWN && can_flap)
{
if (!flapping_timer.started())
{
flapping_timer.start(TUX_FLAPPING_TIME);
+ flapping_velocity = physic.get_velocity_x();
}
if (!flapping_timer.check())
{
}
jumping = true;
flapping = true;
- float iv = physic.get_velocity_x();
- float fv = 1.2;
- float cv = 0;
- if (iv < 0) {fv *= (-1);}
if (flapping_timer.get_gone() <= TUX_FLAPPING_TIME)
{
- //FIXME: Changing directions while flapping doesn't work yet
- if (iv == 0) {cv = 0;}
- else {cv = (iv-((iv-fv)*(float)flapping_timer.get_gone()/TUX_FLAPPING_TIME));}
+ float cv;
+ if (flapping_velocity == 0) {cv = 0;}
+ else {cv = flapping_velocity*(sqrt(TUX_FLAPPING_TIME-(float)flapping_timer.get_gone()))/sqrt(TUX_FLAPPING_TIME);}
+ //Handle change of direction while flapping
+ if (((dir == LEFT) && (cv > 0)) || (dir == RIGHT) && (cv < 0)) {cv *= (-1);}
physic.set_velocity_x(cv);
- physic.set_velocity_y((float)flapping_timer.get_gone()/700);
+ physic.set_velocity_y((float)flapping_timer.get_gone()/850);
}
}
-
- /* // Flapping, Ryan's version
+ }
+ else if(flapping_mode == RYAN_FLAP)
+ {
+ // Flapping, Ryan's version
if (input.jump == DOWN && can_flap)
{
if (!flapping_timer.started())
&& physic.get_velocity_y() < 0)
{
float gravity = Sector::current()->gravity;
+ (void)gravity;
float xr = (fabsf(physic.get_velocity_x()) / MAX_RUN_XM);
// XXX: magic numbers. should be a percent of gravity
{
physic.set_acceleration_y(0);
}
- */
+ }
+
// Hover
//(disabled by default, use cheat code "hover" to toggle on/off)
if(badguy->dying == DYING_NOT && badguy->mode != BadGuy::BOMB_TICKING &&
badguy->mode != BadGuy::BOMB_EXPLODE)
{
- if (fabsf(base.x - badguy->base.x) < 150 &&
- fabsf(base.y - badguy->base.y) < 60 &&
- (issolid(badguy->base.x + 1, badguy->base.y + badguy->base.height) ||
- issolid(badguy->base.x + badguy->base.width - 1, badguy->base.y + badguy->base.height)))
+ if (fabsf(base.x - badguy->base.x) < 96 &&
+ fabsf(base.y - badguy->base.y) < 64)
badguy->kill_me(25);
}
}
else // dir == RIGHT
tux_body->set_action("kick-right");
}
- else if (butt_jump)
+ else if (butt_jump && size == BIG)
{
if(dir == LEFT)
tux_body->set_action("buttjump-left");
else if (safe_timer.started() && global_frame_counter%2)
; // don't draw Tux
else
- tux_body->draw(context, pos, layer, dir == LEFT ? HORIZONTAL_FLIP : NONE_EFFECT);
+ tux_body->draw(context, pos, layer);
// Draw blinking star overlay
if (invincible_timer.started() &&
flapping = false;
falling_from_flap = false;
- if(player_status.score_multiplier >= 5)
- { // show a message
- char str[124];
-// if (player_status.score_multiplier <= 4) {sprintf(str, _("Combo x%d"), player_status.score_multiplier);}
- if (player_status.score_multiplier == 5)
- sprintf(str, _("Good! x%d"), player_status.score_multiplier);
- else if (player_status.score_multiplier == 6)
- sprintf(str, _("Great! x%d"), player_status.score_multiplier);
- else if (player_status.score_multiplier == 7)
- sprintf(str, _("Awesome! x%d"), player_status.score_multiplier);
- else if (player_status.score_multiplier == 8)
- sprintf(str, _("Incredible! x%d"), player_status.score_multiplier);
- else if (player_status.score_multiplier == 9)
- sprintf(str, _("Godlike! ;-) x%d"), player_status.score_multiplier);
- else
- sprintf(str, _("Unbelievable!! x%d"), player_status.score_multiplier);
- Sector::current()->add_floating_text(base, str);
- }
-
if (input.jump)
physic.set_velocity_y(5.2);
else