X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworld.c;h=7e7c4e6eaa7fc0b6a5ba9df63cfb5478409ba9d8;hb=416e3a38d49f534ba8b65a63723bdb33ec018c68;hp=ad2724c48d7bc68668d42b9cd5ceece4a9abed08;hpb=db698e9e08314ed253b608e0d0d4fc714329f126;p=supertux.git diff --git a/src/world.c b/src/world.c index ad2724c48..7e7c4e6ea 100644 --- a/src/world.c +++ b/src/world.c @@ -1,7 +1,7 @@ // // C Implementation: world // -// Description: +// Description: // // // Author: Tobias Glaesser , (C) 2004 @@ -18,160 +18,175 @@ #include "defines.h" #include "world.h" +texture_type img_distro[4]; void bouncy_distro_init(bouncy_distro_type* pbouncy_distro, float x, float y) { - pbouncy_distro->base.alive = YES; - pbouncy_distro->base.x = x; - pbouncy_distro->base.y = y; - pbouncy_distro->base.ym = -6; + pbouncy_distro->base.alive = YES; + pbouncy_distro->base.x = x; + pbouncy_distro->base.y = y; + pbouncy_distro->base.ym = -2; } - + void bouncy_distro_action(bouncy_distro_type* pbouncy_distro) { - if (pbouncy_distro->base.alive) - { - pbouncy_distro->base.y = pbouncy_distro->base.y + pbouncy_distro->base.ym; + if (pbouncy_distro->base.alive) + { + pbouncy_distro->base.y = pbouncy_distro->base.y + pbouncy_distro->base.ym * frame_ratio; - pbouncy_distro->base.ym++; + pbouncy_distro->base.ym += 0.1 * frame_ratio; - if (pbouncy_distro->base.ym >= 0) - pbouncy_distro->base.alive = NO; - } + if (pbouncy_distro->base.ym >= 0) + pbouncy_distro->base.alive = NO; + } } void bouncy_distro_draw(bouncy_distro_type* pbouncy_distro) { - if (pbouncy_distro->base.alive) - { - texture_draw(&img_distro[0], - pbouncy_distro->base.x - scroll_x, - pbouncy_distro->base.y, - NO_UPDATE); - } + if (pbouncy_distro->base.alive) + { + texture_draw(&img_distro[0], + pbouncy_distro->base.x - scroll_x, + pbouncy_distro->base.y, + NO_UPDATE); + } } void broken_brick_init(broken_brick_type* pbroken_brick, float x, float y, float xm, float ym) { - pbroken_brick->base.alive = YES; - pbroken_brick->base.x = x; - pbroken_brick->base.y = y; - pbroken_brick->base.xm = xm; - pbroken_brick->base.ym = ym; - timer_start(&pbroken_brick->timer,200); + pbroken_brick->base.alive = YES; + pbroken_brick->base.x = x; + pbroken_brick->base.y = y; + pbroken_brick->base.xm = xm; + pbroken_brick->base.ym = ym; + timer_init(&pbroken_brick->timer,YES); + timer_start(&pbroken_brick->timer,200); } void broken_brick_action(broken_brick_type* pbroken_brick) { - if (pbroken_brick->base.alive) - { - pbroken_brick->base.x = pbroken_brick->base.x + pbroken_brick->base.xm * frame_ratio; - pbroken_brick->base.y = pbroken_brick->base.y + pbroken_brick->base.ym * frame_ratio; - - if (!timer_check(&pbroken_brick->timer)) - pbroken_brick->base.alive = NO; - } + if (pbroken_brick->base.alive) + { + pbroken_brick->base.x = pbroken_brick->base.x + pbroken_brick->base.xm * frame_ratio; + pbroken_brick->base.y = pbroken_brick->base.y + pbroken_brick->base.ym * frame_ratio; + + if (!timer_check(&pbroken_brick->timer)) + pbroken_brick->base.alive = NO; + } } void broken_brick_draw(broken_brick_type* pbroken_brick) { - if (pbroken_brick->base.alive) - { - src.x = rand() % 16; - src.y = rand() % 16; - src.w = 16; - src.h = 16; - - dest.x = pbroken_brick->base.x - scroll_x; - dest.y = pbroken_brick->base.y; - dest.w = 16; - dest.h = 16; - - texture_draw_part(&img_brick[0],src.x,src.y,dest.x,dest.y,dest.w,dest.h,NO_UPDATE); - } +SDL_Rect src, dest; + if (pbroken_brick->base.alive) + { + src.x = rand() % 16; + src.y = rand() % 16; + src.w = 16; + src.h = 16; + + dest.x = (int)(pbroken_brick->base.x - scroll_x); + dest.y = (int)pbroken_brick->base.y; + dest.w = 16; + dest.h = 16; + + texture_draw_part(&img_brick[0],src.x,src.y,dest.x,dest.y,dest.w,dest.h,NO_UPDATE); + } } void bouncy_brick_init(bouncy_brick_type* pbouncy_brick, float x, float y) { - pbouncy_brick->base.alive = YES; - pbouncy_brick->base.x = x; - pbouncy_brick->base.y = y; - pbouncy_brick->offset = 0; - pbouncy_brick->offset_m = -BOUNCY_BRICK_SPEED; - pbouncy_brick->shape = shape(x, y); + pbouncy_brick->base.alive = YES; + pbouncy_brick->base.x = x; + pbouncy_brick->base.y = y; + pbouncy_brick->offset = 0; + pbouncy_brick->offset_m = -BOUNCY_BRICK_SPEED; + pbouncy_brick->shape = shape(x, y); } void bouncy_brick_action(bouncy_brick_type* pbouncy_brick) { - if (pbouncy_brick->base.alive) - { - - pbouncy_brick->offset = (pbouncy_brick->offset + - pbouncy_brick->offset_m * frame_ratio); + if (pbouncy_brick->base.alive) + { - /* Go back down? */ + pbouncy_brick->offset = (pbouncy_brick->offset + + pbouncy_brick->offset_m * frame_ratio); - if (pbouncy_brick->offset < -BOUNCY_BRICK_MAX_OFFSET) - pbouncy_brick->offset_m = BOUNCY_BRICK_SPEED; + /* Go back down? */ + if (pbouncy_brick->offset < -BOUNCY_BRICK_MAX_OFFSET) + pbouncy_brick->offset_m = BOUNCY_BRICK_SPEED; - /* Stop bouncing? */ - if (pbouncy_brick->offset >= 0) - pbouncy_brick->base.alive = NO; - } + /* Stop bouncing? */ + + if (pbouncy_brick->offset >= 0) + pbouncy_brick->base.alive = NO; + } } void bouncy_brick_draw(bouncy_brick_type* pbouncy_brick) { - if (pbouncy_brick->base.alive) + int s; + SDL_Rect dest; + + if (pbouncy_brick->base.alive) + { + if (pbouncy_brick->base.x >= scroll_x - 32 && + pbouncy_brick->base.x <= scroll_x + screen->w) { - if (pbouncy_brick->base.x >= scroll_x - 32 && - pbouncy_brick->base.x <= scroll_x + screen->w) - { - dest.x = pbouncy_brick->base.x - scroll_x; - dest.y = pbouncy_brick->base.y; - dest.w = 32; - dest.h = 32; + dest.x = (int)(pbouncy_brick->base.x - scroll_x); + dest.y = (int)pbouncy_brick->base.y; + dest.w = 32; + dest.h = 32; - fillrect(pbouncy_brick->base.x - scroll_x,pbouncy_brick->base.y,32,32,current_level.bkgd_red,current_level.bkgd_green, - current_level.bkgd_blue); - - drawshape(pbouncy_brick->base.x - scroll_x, - pbouncy_brick->base.y + pbouncy_brick->offset, - pbouncy_brick->shape); + if(current_level.bkgd_image[0] == '\0') + { + fillrect(pbouncy_brick->base.x - scroll_x,pbouncy_brick->base.y,32,32,current_level.bkgd_red,current_level.bkgd_green, + current_level.bkgd_blue,0); + } + else + { + s = (int)scroll_x / 30; + texture_draw_part(&img_bkgd,dest.x + s,dest.y,dest.x,dest.y,dest.w,dest.h,NO_UPDATE); } + + drawshape(pbouncy_brick->base.x - scroll_x, + pbouncy_brick->base.y + pbouncy_brick->offset, + pbouncy_brick->shape); } + } } void floating_score_init(floating_score_type* pfloating_score, float x, float y, int s) { - pfloating_score->base.alive = YES; - pfloating_score->base.x = x; - pfloating_score->base.y = y - 16; - timer_start(&pfloating_score->timer,1000); - pfloating_score->value = s; + pfloating_score->base.alive = YES; + pfloating_score->base.x = x; + pfloating_score->base.y = y - 16; + timer_init(&pfloating_score->timer,YES); + timer_start(&pfloating_score->timer,1000); + pfloating_score->value = s; } void floating_score_action(floating_score_type* pfloating_score) { - if (pfloating_score->base.alive) - { - pfloating_score->base.y = pfloating_score->base.y - 2 * frame_ratio; + if (pfloating_score->base.alive) + { + pfloating_score->base.y = pfloating_score->base.y - 2 * frame_ratio; if(!timer_check(&pfloating_score->timer)) - pfloating_score->base.alive = NO; - } + pfloating_score->base.alive = NO; + } } void floating_score_draw(floating_score_type* pfloating_score) { - if (pfloating_score->base.alive) - { - char str[10]; - sprintf(str, "%d", pfloating_score->value); - text_draw(&gold_text, str, pfloating_score->base.x + 16 - strlen(str) * 8, pfloating_score->base.y, 1, NO_UPDATE); - } + if (pfloating_score->base.alive) + { + char str[10]; + sprintf(str, "%d", pfloating_score->value); + text_draw(&gold_text, str, (int)pfloating_score->base.x + 16 - strlen(str) * 8, (int)pfloating_score->base.y, 1, NO_UPDATE); + } }