X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fplayer.c;h=8b567cb72b2e3a11e2f9cf4766b1df1f21bcbcf9;hb=b9c029fdfbf54699ff0ebf2a64504ee40f6ec357;hp=919596c2e1bfac6f4d12121c55f800249d3cc44e;hpb=416e3a38d49f534ba8b65a63723bdb33ec018c68;p=supertux.git diff --git a/src/player.c b/src/player.c index 919596c2e..8b567cb72 100644 --- a/src/player.c +++ b/src/player.c @@ -71,6 +71,7 @@ void player_init(player_type* pplayer) timer_init(&pplayer->invincible_timer,YES); timer_init(&pplayer->skidding_timer,YES); timer_init(&pplayer->safe_timer,YES); + timer_init(&pplayer->frame_timer,YES); physic_init(&pplayer->hphysic); physic_init(&pplayer->vphysic); } @@ -123,6 +124,9 @@ void player_level_begin(player_type* pplayer) timer_init(&pplayer->invincible_timer,YES); timer_init(&pplayer->skidding_timer,YES); timer_init(&pplayer->safe_timer,YES); + timer_init(&pplayer->frame_timer,YES); + physic_init(&pplayer->hphysic); + physic_init(&pplayer->vphysic); } void player_action(player_type* pplayer) @@ -155,24 +159,22 @@ void player_action(player_type* pplayer) { physic_set_state(&pplayer->vphysic,PH_VT); physic_set_start_vy(&pplayer->vphysic,0.); - DEBUG_MSG("Ich bin jetzt ordentlich am Punkten"); } pplayer->base.ym = physic_get_velocity(&pplayer->vphysic); } else { - /* Land: */ + /* Land: */ if (pplayer->base.ym > 0) { pplayer->base.y = (int)(((int)(pplayer->base.y +1) / 32) * 32); - printf("%f",pplayer->base.y); pplayer->base.ym = 0; } physic_init(&pplayer->vphysic); } - while(issolid( pplayer->base.x + 16, pplayer->base.y + pplayer->base.height) && !issolid( pplayer->base.x + 16, pplayer->base.y)) + while(issolid( pplayer->base.x + 16, pplayer->base.y + pplayer->base.height) && !issolid( pplayer->base.x + 16, pplayer->base.y + 1)) { --pplayer->base.y; } @@ -189,13 +191,12 @@ void player_action(player_type* pplayer) --pplayer->base.x; } - if(pplayer->base.ym <= 0) + if(pplayer->base.ym < 0) { if (isbrick(pplayer->base.x, pplayer->base.y) || isfullbox(pplayer->base.x, pplayer->base.y)) { - DEBUG_MSG("My sear"); trygrabdistro(pplayer->base.x, pplayer->base.y - 32,BOUNCE); trybumpbadguy(pplayer->base.x, pplayer->base.y - 64); @@ -230,7 +231,6 @@ void player_action(player_type* pplayer) add_bouncy_distro((((int)pplayer->base.x) / 32) * 32, ((int)pplayer->base.y / 32) * 32); - DEBUG_MSG("should work"); if (counting_distros == NO) { counting_distros = YES; @@ -250,7 +250,6 @@ void player_action(player_type* pplayer) add_bouncy_distro((((int)pplayer->base.x + 31) / 32) * 32, ((int)pplayer->base.y / 32) * 32); - DEBUG_MSG("+31?"); if (counting_distros == NO) { counting_distros = YES; @@ -265,103 +264,260 @@ void player_action(player_type* pplayer) distros++; } } - } + } - player_grabdistros(pplayer); + player_grabdistros(pplayer); - /* FIXME: this code is COMPLETLY broken!!! */ - /* if (issolid(pplayer->base.x, pplayer->base.y + 31) && - !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y + 31)) + /* FIXME: this code is COMPLETLY broken!!! */ + /* if (issolid(pplayer->base.x, pplayer->base.y + 31) && + !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y + 31)) + { + while (issolid(pplayer->base.x, pplayer->base.y + 31)) { - while (issolid(pplayer->base.x, pplayer->base.y + 31)) - { - if (pplayer->base.xm < 0) - pplayer->base.x++; - else if (pplayer->base.xm > 0) - pplayer->base.x--; - } - - pplayer->base.xm = 0; - }*/ - - /*if (issolid(pplayer->base.x, pplayer->base.y) && - !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y)) - { - while (issolid(pplayer->base.x, (pplayer->base.y))) - { - if (pplayer->base.xm < 0) - pplayer->base.x++; - else if (pplayer->base.xm > 0) - pplayer->base.x--; - } + if (pplayer->base.xm < 0) + pplayer->base.x++; + else if (pplayer->base.xm > 0) + pplayer->base.x--; + } - pplayer->base.xm = 0; - }*/ + pplayer->base.xm = 0; + }*/ - /*if (issolid(pplayer->base.x, pplayer->base.y + 31)) + /*if (issolid(pplayer->base.x, pplayer->base.y) && + !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y)) + { + while (issolid(pplayer->base.x, (pplayer->base.y))) { - /* Set down properly: * / + if (pplayer->base.xm < 0) + pplayer->base.x++; + else if (pplayer->base.xm > 0) + pplayer->base.x--; + } + + pplayer->base.xm = 0; + }*/ + + /*if (issolid(pplayer->base.x, pplayer->base.y + 31)) + { + /* Set down properly: * / - int debug_int = 0; - while (issolid(pplayer->base.x, pplayer->base.y + 31)) + int debug_int = 0; + while (issolid(pplayer->base.x, pplayer->base.y + 31)) + { + ++debug_int; + if(debug_int > 32) { - ++debug_int; - if(debug_int > 32) - { - DEBUG_MSG("FIXME - UNDER certain circumstances I'm hanging in a loop here!"); - /*the circumstances are: - issolid() is true and base.ym == 0 - use of floating point varibles for base stuff* / - break; - } - if (pplayer->base.ym < 0) - pplayer->base.y++; - else if (pplayer->base.ym > 0) - pplayer->base.y--; + DEBUG_MSG("FIXME - UNDER certain circumstances I'm hanging in a loop here!"); + /*the circumstances are: + issolid() is true and base.ym == 0 + use of floating point varibles for base stuff* / + break; } + if (pplayer->base.ym < 0) + pplayer->base.y++; + else if (pplayer->base.ym > 0) + pplayer->base.y--; + } - /* Reset score multiplier (for multi-hits): */ + /* Reset score multiplier (for multi-hits): */ - if (pplayer->base.ym > 0) - score_multiplier = 1; + if (pplayer->base.ym > 2) + score_multiplier = 1; - /* Stop jumping! * / + /* Stop jumping! * / + pplayer->base.ym = 0; + pplayer->jumping = NO; + pplayer->input.up = UP; + } + /* FIXME: this code is COMPLETLY broken!!! */ + /*if (issolid(pplayer->base.x, pplayer->base.y) || + (pplayer->size == BIG && !pplayer->duck && + (issolid(pplayer->base.x, pplayer->base.y - 32)))) + {*/ + /*if (!issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y) && + (pplayer->size == SMALL || pplayer->duck || + !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y - 32)))* / + + if (((!issolid(pplayer->base.x, pplayer->base.y- pplayer->base.ym * frame_ratio) && (issolid(pplayer->base.x, pplayer->base.y) || issolid(pplayer->base.x, pplayer->base.y+31)))) + ||((!issolid(pplayer->base.x - pplayer->base.xm * frame_ratio, pplayer->base.y) && (issolid(pplayer->base.x, pplayer->base.y) || issolid(pplayer->base.x+32, pplayer->base.y))))) + /*(pplayer->size == SMALL || pplayer->duck || + !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y - 32))* / + { + pplayer->base.y = pplayer->base.y- pplayer->base.ym * frame_ratio; pplayer->base.ym = 0; - pplayer->jumping = NO; - pplayer->input.up = UP; - } - /* FIXME: this code is COMPLETLY broken!!! */ - /*if (issolid(pplayer->base.x, pplayer->base.y) || - (pplayer->size == BIG && !pplayer->duck && - (issolid(pplayer->base.x, pplayer->base.y - 32)))) - {*/ - /*if (!issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y) && - (pplayer->size == SMALL || pplayer->duck || - !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y - 32)))* / + } + + if (((issolid(pplayer->base.x, pplayer->base.y) || issolid(pplayer->base.x+32, pplayer->base.y)) && (!issolid(pplayer->base.x - pplayer->base.xm * frame_ratio, pplayer->base.y)) + /*(pplayer->size == SMALL || pplayer->duck || + !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y - 32))* /) || + (!issolid(pplayer->base.x - pplayer->base.xm * frame_ratio, pplayer->base.y+pplayer->base.height) && (issolid(pplayer->base.x, pplayer->base.y+pplayer->base.height) || issolid(pplayer->base.x +32, pplayer->base.y+pplayer->base.height)))) + { + pplayer->base.x = pplayer->base.x- pplayer->base.xm * frame_ratio; + pplayer->base.xm = 0; + } - if (((!issolid(pplayer->base.x, pplayer->base.y- pplayer->base.ym * frame_ratio) && (issolid(pplayer->base.x, pplayer->base.y) || issolid(pplayer->base.x, pplayer->base.y+31)))) - ||((!issolid(pplayer->base.x - pplayer->base.xm * frame_ratio, pplayer->base.y) && (issolid(pplayer->base.x, pplayer->base.y) || issolid(pplayer->base.x+32, pplayer->base.y))))) - /*(pplayer->size == SMALL || pplayer->duck || - !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y - 32))* / + if (pplayer->base.ym <= 0) { - pplayer->base.y = pplayer->base.y- pplayer->base.ym * frame_ratio; - pplayer->base.ym = 0; + if (isbrick(pplayer->base.x, pplayer->base.y) || + isfullbox(pplayer->base.x, pplayer->base.y)) + { + trygrabdistro(pplayer->base.x, pplayer->base.y - 32,BOUNCE); + trybumpbadguy(pplayer->base.x, pplayer->base.y - 64); + bumpbrick(pplayer->base.x, pplayer->base.y); + tryemptybox(pplayer->base.x, pplayer->base.y); + } + + if (isbrick(pplayer->base.x+ 31, pplayer->base.y) || + isfullbox(pplayer->base.x+ 31, pplayer->base.y)) + { + trygrabdistro(pplayer->base.x+ 31, pplayer->base.y - 32,BOUNCE); + trybumpbadguy(pplayer->base.x+ 31, pplayer->base.y - 64); + bumpbrick(pplayer->base.x+ 31, pplayer->base.y); + tryemptybox(pplayer->base.x+ 31, pplayer->base.y); + } + /* Get a distro from a brick? * / + + if (shape(pplayer->base.x, pplayer->base.y) == 'x' || + shape(pplayer->base.x, pplayer->base.y) == 'y') + { + add_bouncy_distro(((pplayer->base.x+ 1) + / 32) * 32, + (int)(pplayer->base.y / 32) * 32); + + if (counting_distros == NO) + { + counting_distros = YES; + distro_counter = 100; } - if (((issolid(pplayer->base.x, pplayer->base.y) || issolid(pplayer->base.x+32, pplayer->base.y)) && (!issolid(pplayer->base.x - pplayer->base.xm * frame_ratio, pplayer->base.y)) - /*(pplayer->size == SMALL || pplayer->duck || - !issolid(pplayer->base.x- pplayer->base.xm, pplayer->base.y - 32))* /) || - (!issolid(pplayer->base.x - pplayer->base.xm * frame_ratio, pplayer->base.y+pplayer->base.height) && (issolid(pplayer->base.x, pplayer->base.y+pplayer->base.height) || issolid(pplayer->base.x +32, pplayer->base.y+pplayer->base.height)))) + if (distro_counter <= 0) + level_change(¤t_level,pplayer->base.x,pplayer->base.y, 'a'); + + play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); + score = score + SCORE_DISTRO; + distros++; + } + else if (shape(pplayer->base.x+ 31, pplayer->base.y) == 'x' || + shape(pplayer->base.x+ 31, pplayer->base.y) == 'y') + { + add_bouncy_distro(((pplayer->base.x+ 1 + 31) + / 32) * 32, + (int)(pplayer->base.y / 32) * 32); + + if (counting_distros == NO) { - pplayer->base.x = pplayer->base.x- pplayer->base.xm * frame_ratio; - pplayer->base.xm = 0; + counting_distros = YES; + distro_counter = 100; } + if (distro_counter <= 0) + level_change(¤t_level,pplayer->base.x+ 31, pplayer->base.y, 'a'); + + play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); + score = score + SCORE_DISTRO; + distros++; + } + + } + else + { + pplayer->base.ym = 0; + pplayer->jumping = NO; + timer_start(&pplayer->jump_timer,MAX_JUMP_TIME); + } + /*}*/ + /* Bump into things: * / + + if (issolid(pplayer->base.x, pplayer->base.y) || + (pplayer->size == BIG && !pplayer->duck && + (issolid(pplayer->base.x, pplayer->base.y - 32)))) + { + + if (!issolid(pplayer->base.x, pplayer->base.y - pplayer->base.ym) && + (pplayer->size == SMALL || pplayer->duck || + !issolid(pplayer->base.x, pplayer->base.y - 32 - pplayer->base.ym))) + { if (pplayer->base.ym <= 0) { + /* Jumping up? */ + /* FIXME: this code is COMPLETLY broken!!! */ + if (pplayer->size == BIG) + { + /* Break bricks and empty boxes: * / + + if (!pplayer->duck) + { + if (isbrick(pplayer->base.x, pplayer->base.y - 32) || + isfullbox(pplayer->base.x, pplayer->base.y - 32)) + { + trygrabdistro(pplayer->base.x, pplayer->base.y - 64, BOUNCE); + trybumpbadguy(pplayer->base.x, pplayer->base.y - 96); + + if (isfullbox(pplayer->base.x, pplayer->base.y - 32)) + { + bumpbrick(pplayer->base.x, pplayer->base.y - 32); + } + + trybreakbrick(pplayer->base.x, pplayer->base.y - 32); + tryemptybox(pplayer->base.x, pplayer->base.y - 32); + } + + if (isbrick(pplayer->base.x+ 31, pplayer->base.y - 32) || + isfullbox(pplayer->base.x+ 31, pplayer->base.y - 32)) + { + trygrabdistro(pplayer->base.x+ 31, + pplayer->base.y - 64, + BOUNCE); + trybumpbadguy(pplayer->base.x+ 31, + pplayer->base.y - 96); + + if (isfullbox(pplayer->base.x+ 31, pplayer->base.y - 32)) + { + bumpbrick(pplayer->base.x+ 31, pplayer->base.y - 32); + } + + trybreakbrick(pplayer->base.x+ 31, + pplayer->base.y - 32); + tryemptybox(pplayer->base.x+ 31, + pplayer->base.y - 32); + } + } + else /* ducking * / + { + if (isbrick(pplayer->base.x, pplayer->base.y) || + isfullbox(pplayer->base.x, pplayer->base.y)) + { + trygrabdistro(pplayer->base.x, pplayer->base.y - 32,BOUNCE); + trybumpbadguy(pplayer->base.x, pplayer->base.y - 64); + if (isfullbox(pplayer->base.x, pplayer->base.y)) + bumpbrick(pplayer->base.x, pplayer->base.y); + trybreakbrick(pplayer->base.x, pplayer->base.y); + tryemptybox(pplayer->base.x, pplayer->base.y); + } + + if (isbrick(pplayer->base.x+ 31, pplayer->base.y) || + isfullbox(pplayer->base.x+ 31, pplayer->base.y)) + { + trygrabdistro(pplayer->base.x+ 31, + pplayer->base.y - 32, + BOUNCE); + trybumpbadguy(pplayer->base.x+ 31, + pplayer->base.y - 64); + if (isfullbox(pplayer->base.x+ 31, pplayer->base.y)) + bumpbrick(pplayer->base.x+ 31, pplayer->base.y); + trybreakbrick(pplayer->base.x+ 31, pplayer->base.y); + tryemptybox(pplayer->base.x+ 31, pplayer->base.y); + } + } + } + else + { + /* It's a brick and we're small, make the brick + bounce, and grab any distros above it: * / + if (isbrick(pplayer->base.x, pplayer->base.y) || isfullbox(pplayer->base.x, pplayer->base.y)) { @@ -379,6 +535,8 @@ void player_action(player_type* pplayer) bumpbrick(pplayer->base.x+ 31, pplayer->base.y); tryemptybox(pplayer->base.x+ 31, pplayer->base.y); } + + /* Get a distro from a brick? * / if (shape(pplayer->base.x, pplayer->base.y) == 'x' || @@ -421,184 +579,25 @@ void player_action(player_type* pplayer) score = score + SCORE_DISTRO; distros++; } + } + + /* Bump head: * / + + pplayer->base.y = (int)(pplayer->base.y / 32) * 32 + 30; } else { + /* Land on feet: * / + + pplayer->base.y = (int)(pplayer->base.y / 32) * 32 - 32; + } + pplayer->base.ym = 0; pplayer->jumping = NO; timer_start(&pplayer->jump_timer,MAX_JUMP_TIME); - } - /*}*/ - /* Bump into things: * / - - if (issolid(pplayer->base.x, pplayer->base.y) || - (pplayer->size == BIG && !pplayer->duck && - (issolid(pplayer->base.x, pplayer->base.y - 32)))) - { - - if (!issolid(pplayer->base.x, pplayer->base.y - pplayer->base.ym) && - (pplayer->size == SMALL || pplayer->duck || - !issolid(pplayer->base.x, pplayer->base.y - 32 - pplayer->base.ym))) - { - if (pplayer->base.ym <= 0) - { - /* Jumping up? */ - /* FIXME: this code is COMPLETLY broken!!! */ - if (pplayer->size == BIG) - { - /* Break bricks and empty boxes: * / - - if (!pplayer->duck) - { - if (isbrick(pplayer->base.x, pplayer->base.y - 32) || - isfullbox(pplayer->base.x, pplayer->base.y - 32)) - { - trygrabdistro(pplayer->base.x, pplayer->base.y - 64, BOUNCE); - trybumpbadguy(pplayer->base.x, pplayer->base.y - 96); - - if (isfullbox(pplayer->base.x, pplayer->base.y - 32)) - { - bumpbrick(pplayer->base.x, pplayer->base.y - 32); - } - - trybreakbrick(pplayer->base.x, pplayer->base.y - 32); - tryemptybox(pplayer->base.x, pplayer->base.y - 32); - } - - if (isbrick(pplayer->base.x+ 31, pplayer->base.y - 32) || - isfullbox(pplayer->base.x+ 31, pplayer->base.y - 32)) - { - trygrabdistro(pplayer->base.x+ 31, - pplayer->base.y - 64, - BOUNCE); - trybumpbadguy(pplayer->base.x+ 31, - pplayer->base.y - 96); - - if (isfullbox(pplayer->base.x+ 31, pplayer->base.y - 32)) - { - bumpbrick(pplayer->base.x+ 31, pplayer->base.y - 32); - } - - trybreakbrick(pplayer->base.x+ 31, - pplayer->base.y - 32); - tryemptybox(pplayer->base.x+ 31, - pplayer->base.y - 32); - } - } - else /* ducking * / - { - if (isbrick(pplayer->base.x, pplayer->base.y) || - isfullbox(pplayer->base.x, pplayer->base.y)) - { - trygrabdistro(pplayer->base.x, pplayer->base.y - 32,BOUNCE); - trybumpbadguy(pplayer->base.x, pplayer->base.y - 64); - if (isfullbox(pplayer->base.x, pplayer->base.y)) - bumpbrick(pplayer->base.x, pplayer->base.y); - trybreakbrick(pplayer->base.x, pplayer->base.y); - tryemptybox(pplayer->base.x, pplayer->base.y); - } - - if (isbrick(pplayer->base.x+ 31, pplayer->base.y) || - isfullbox(pplayer->base.x+ 31, pplayer->base.y)) - { - trygrabdistro(pplayer->base.x+ 31, - pplayer->base.y - 32, - BOUNCE); - trybumpbadguy(pplayer->base.x+ 31, - pplayer->base.y - 64); - if (isfullbox(pplayer->base.x+ 31, pplayer->base.y)) - bumpbrick(pplayer->base.x+ 31, pplayer->base.y); - trybreakbrick(pplayer->base.x+ 31, pplayer->base.y); - tryemptybox(pplayer->base.x+ 31, pplayer->base.y); - } - } - } - else - { - /* It's a brick and we're small, make the brick - bounce, and grab any distros above it: * / - - if (isbrick(pplayer->base.x, pplayer->base.y) || - isfullbox(pplayer->base.x, pplayer->base.y)) - { - trygrabdistro(pplayer->base.x, pplayer->base.y - 32,BOUNCE); - trybumpbadguy(pplayer->base.x, pplayer->base.y - 64); - bumpbrick(pplayer->base.x, pplayer->base.y); - tryemptybox(pplayer->base.x, pplayer->base.y); - } - - if (isbrick(pplayer->base.x+ 31, pplayer->base.y) || - isfullbox(pplayer->base.x+ 31, pplayer->base.y)) - { - trygrabdistro(pplayer->base.x+ 31, pplayer->base.y - 32,BOUNCE); - trybumpbadguy(pplayer->base.x+ 31, pplayer->base.y - 64); - bumpbrick(pplayer->base.x+ 31, pplayer->base.y); - tryemptybox(pplayer->base.x+ 31, pplayer->base.y); - } - - - /* Get a distro from a brick? * / - - if (shape(pplayer->base.x, pplayer->base.y) == 'x' || - shape(pplayer->base.x, pplayer->base.y) == 'y') - { - add_bouncy_distro(((pplayer->base.x+ 1) - / 32) * 32, - (int)(pplayer->base.y / 32) * 32); - - if (counting_distros == NO) - { - counting_distros = YES; - distro_counter = 100; - } - - if (distro_counter <= 0) - level_change(¤t_level,pplayer->base.x,pplayer->base.y, 'a'); - - play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); - score = score + SCORE_DISTRO; - distros++; - } - else if (shape(pplayer->base.x+ 31, pplayer->base.y) == 'x' || - shape(pplayer->base.x+ 31, pplayer->base.y) == 'y') - { - add_bouncy_distro(((pplayer->base.x+ 1 + 31) - / 32) * 32, - (int)(pplayer->base.y / 32) * 32); - - if (counting_distros == NO) - { - counting_distros = YES; - distro_counter = 100; - } - - if (distro_counter <= 0) - level_change(¤t_level,pplayer->base.x+ 31, pplayer->base.y, 'a'); - - play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); - score = score + SCORE_DISTRO; - distros++; - } - } - - - /* Bump head: * / - - pplayer->base.y = (int)(pplayer->base.y / 32) * 32 + 30; - } - else - { - /* Land on feet: * / - - pplayer->base.y = (int)(pplayer->base.y / 32) * 32 - 32; - } - - pplayer->base.ym = 0; - pplayer->jumping = NO; - timer_start(&pplayer->jump_timer,MAX_JUMP_TIME); - }*/ - } + }*/ + } } @@ -807,19 +806,6 @@ void player_handle_vertical_input(player_type *pplayer) } else if(pplayer->input.up == UP && pplayer->jumping == YES) { - /* Land: * / - DEBUG_MSG("Stop Jump"); - pplayer->jumping = NO; - - if (pplayer->base.ym > 0) - { - pplayer->base.y = (int)(pplayer->base.y / 32) * 32; - pplayer->base.ym = 0; - } - physic_init(&pplayer->vphysic); - } - else if(pplayer->input.up == UP) - {*/ if (issolid(pplayer->base.x + 16, pplayer->base.y + pplayer->base.height + 1)) { physic_init(&pplayer->vphysic); @@ -828,22 +814,18 @@ void player_handle_vertical_input(player_type *pplayer) else { pplayer->jumping = NO; - printf("%f",physic_get_velocity(&pplayer->vphysic)); if(physic_is_set(&pplayer->vphysic)) { - if(physic_get_velocity(&pplayer->vphysic) < 0.) - { - physic_set_state(&pplayer->vphysic,PH_VT); - DEBUG_MSG("DUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDE"); - physic_set_start_vy(&pplayer->vphysic,0); - } + if(physic_get_velocity(&pplayer->vphysic) < 0.) + { + physic_set_state(&pplayer->vphysic,PH_VT); + physic_set_start_vy(&pplayer->vphysic,0); + } } else { - DEBUG_MSG("CHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUHHHHAAA"); if(!physic_is_set(&pplayer->vphysic)) { - DEBUG_MSG("CHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUHHHHAAA"); physic_set_state(&pplayer->vphysic,PH_VT); } } @@ -903,9 +885,17 @@ void player_input(player_type *pplayer) else { if(pplayer->base.xm > 0) - pplayer->base.xm = (int)(pplayer->base.xm - frame_ratio); + { + pplayer->base.xm = (int)(pplayer->base.xm - frame_ratio); + if(pplayer->base.xm < 0) + pplayer->base.xm = 0; + } else if(pplayer->base.xm < 0) - pplayer->base.xm = (int)(pplayer->base.xm + frame_ratio); + { + pplayer->base.xm = (int)(pplayer->base.xm + frame_ratio); + if(pplayer->base.xm > 0) + pplayer->base.xm = 0; + } } /* Jump/jumping? */ @@ -945,21 +935,25 @@ void player_input(player_type *pplayer) /* (Tux): */ - if (pplayer->input.right == UP && pplayer->input.left == UP) + if(!timer_check(&pplayer->frame_timer)) { - pplayer->frame_main = 1; - pplayer->frame = 1; - } - else - { - if ((pplayer->input.fire == DOWN && (frame % 2) == 0) || - (frame % 4) == 0) - pplayer->frame_main = (pplayer->frame_main + 1) % 4; + timer_start(&pplayer->frame_timer,25); + if (pplayer->input.right == UP && pplayer->input.left == UP) + { + pplayer->frame_main = 1; + pplayer->frame = 1; + } + else + { + if ((pplayer->input.fire == DOWN && (frame % 2) == 0) || + (frame % 4) == 0) + pplayer->frame_main = (pplayer->frame_main + 1) % 4; - pplayer->frame = pplayer->frame_main; + pplayer->frame = pplayer->frame_main; - if (pplayer->frame == 3) - pplayer->frame = 1; + if (pplayer->frame == 3) + pplayer->frame = 1; + } } } @@ -1269,7 +1263,8 @@ void player_collision(player_type* pplayer, void* p_c_object, int c_object) else { pbad_c->dying = FALLING; - pbad_c->base.ym = -8; + physic_set_state(&pplayer->vphysic,PH_VT); + physic_set_start_vy(&pplayer->vphysic,-2.); play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER); } } @@ -1284,7 +1279,8 @@ void player_collision(player_type* pplayer, void* p_c_object, int c_object) else { pbad_c->dying = FALLING; - pbad_c->base.ym = -8; + physic_set_state(&pplayer->vphysic,PH_VT); + physic_set_start_vy(&pplayer->vphysic,-2.); play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER); } }