some work on levels

This commit is contained in:
Sebastian Krzyszkowiak 2012-05-01 22:52:30 +02:00
parent a5e0be5434
commit 07ac5294d5
3 changed files with 73 additions and 6 deletions

View file

@ -72,6 +72,48 @@ bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state)
return true; return true;
} }
bool GenerateObstracles(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
/*float* tmp; bool* in;*/
int* count;
if (!action->arguments) {
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(int)));
/* action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(bool))); */
}
count = (int*)action->arguments->value;
/*tmp = (float*)action->arguments->value;
in = (bool*)action->arguments->next->value;*/
if (state == TM_ACTIONSTATE_INIT) {
*count = 0;
/* *tmp = 0;
*in = true;*/
}
else if (state == TM_ACTIONSTATE_RUNNING) {
if (rand()%100<=2) {
PrintConsole(game, "OBSTRACLE %d", *count);
(*count)++;
struct Obstracle *obst = malloc(sizeof(struct Obstracle));
obst->prev = NULL;
obst->x = 100;
obst->y = (rand()%91)-1;
obst->speed = 0;
obst->bitmap = game->level.obst_bmps.pie;
obst->callback = NULL;
if (game->level.obstracles) {
game->level.obstracles->prev = obst;
obst->next = game->level.obstracles;
} else {
obst->next = NULL;
}
game->level.obstracles = obst;
if (*count > 64) return true;
}
} else {
free(action->arguments->value);
TM_DestroyArgs(action->arguments);
action->arguments = NULL;
}
return false;
}
bool Stop(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { bool Stop(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
if (state != TM_ACTIONSTATE_RUNNING) return false; if (state != TM_ACTIONSTATE_RUNNING) return false;
@ -124,6 +166,18 @@ void Level_Draw(struct Game *game) {
al_draw_bitmap(game->level.stage, (-game->level.st_pos)*al_get_bitmap_width(game->level.stage), 0 ,0); al_draw_bitmap(game->level.stage, (-game->level.st_pos)*al_get_bitmap_width(game->level.stage), 0 ,0);
al_draw_bitmap(game->level.stage, (1+(-game->level.st_pos))*al_get_bitmap_width(game->level.stage), 0 ,0); al_draw_bitmap(game->level.stage, (1+(-game->level.st_pos))*al_get_bitmap_width(game->level.stage), 0 ,0);
struct Obstracle *tmp = game->level.obstracles;
while (tmp) {
/*PrintConsole(game, "DRAWING %f %f", tmp->x, tmp->y);*/
if (tmp->x > -10) {
al_draw_bitmap(tmp->bitmap, (tmp->x/100.0)*al_get_display_width(game->display), (tmp->y/100.0)*al_get_display_height(game->display), 0);
tmp->x -= game->level.speed*310;
} else {
/* Delete from queue... */
}
tmp = tmp->next;
}
al_set_target_bitmap(game->level.derpy); al_set_target_bitmap(game->level.derpy);
al_clear_to_color(al_map_rgba(0,0,0,0)); al_clear_to_color(al_map_rgba(0,0,0,0));
al_draw_bitmap_region(game->level.derpy_walkcycle,al_get_bitmap_width(game->level.derpy)*(game->level.sheet_pos%game->level.sheet_cols),al_get_bitmap_height(game->level.derpy)*(game->level.sheet_pos/game->level.sheet_cols),al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy),0,0,0); al_draw_bitmap_region(game->level.derpy_walkcycle,al_get_bitmap_width(game->level.derpy)*(game->level.sheet_pos%game->level.sheet_cols),al_get_bitmap_height(game->level.derpy)*(game->level.sheet_pos/game->level.sheet_cols),al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy),0,0,0);
@ -270,6 +324,7 @@ void Level_Load(struct Game *game) {
game->level.sheet_speed = 2.4; game->level.sheet_speed = 2.4;
game->level.sheet_tmp = 0; game->level.sheet_tmp = 0;
game->level.handle_input = false; game->level.handle_input = false;
game->level.obstracles = NULL;
al_clear_to_color(al_map_rgb(0,0,0)); al_clear_to_color(al_map_rgb(0,0,0));
if (game->level.current_level!=1) Moonwalk_Load(game); if (game->level.current_level!=1) Moonwalk_Load(game);
else { else {
@ -286,7 +341,7 @@ void Level_Load(struct Game *game) {
TM_AddDelay(500); TM_AddDelay(500);
TM_AddQueuedBackgroundAction(&Accelerate, NULL, 0, "accelerate"); TM_AddQueuedBackgroundAction(&Accelerate, NULL, 0, "accelerate");
TM_AddAction(&Fly, NULL, "fly"); TM_AddAction(&Fly, NULL, "fly");
TM_AddDelay(5*1000);
/* first part gameplay goes here */ /* first part gameplay goes here */
/* actions for generating obstracles should go here /* actions for generating obstracles should go here
@ -294,8 +349,8 @@ void Level_Load(struct Game *game) {
* begins. After last one part with muffins starts. * begins. After last one part with muffins starts.
* Should obstracles themselves be handled as objects * Should obstracles themselves be handled as objects
* on timeline? (probably not). Hmm... */ * on timeline? (probably not). Hmm... */
TM_AddAction(&GenerateObstracles, NULL, "obstracles");
TM_AddDelay(60*1000); TM_AddDelay(5*1000);
/* /*
// wings disappear, deccelerate, fall down // wings disappear, deccelerate, fall down
@ -357,6 +412,13 @@ void Level_Unload(struct Game *game) {
else { else {
TM_Destroy(); TM_Destroy();
} }
struct Obstracle *tmp, *t = game->level.obstracles;
if (t) tmp = t->prev;
while (t) {
if (tmp) free(tmp);
tmp = t;
t = t->next;
}
Level_UnloadBitmaps(game); Level_UnloadBitmaps(game);
} }
@ -370,6 +432,7 @@ void Level_UnloadBitmaps(struct Game *game) {
al_destroy_bitmap(game->level.stage); al_destroy_bitmap(game->level.stage);
al_destroy_bitmap(game->level.clouds); al_destroy_bitmap(game->level.clouds);
al_destroy_bitmap(game->level.welcome); al_destroy_bitmap(game->level.welcome);
al_destroy_bitmap(game->level.obst_bmps.pie);
} }
} }
@ -383,6 +446,7 @@ void Level_PreloadBitmaps(struct Game *game) {
game->level.foreground = LoadScaledBitmap("levels/1/foreground.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display)); game->level.foreground = LoadScaledBitmap("levels/1/foreground.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display));
game->level.background = LoadScaledBitmap("levels/1/background.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display)); game->level.background = LoadScaledBitmap("levels/1/background.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display));
game->level.stage = LoadScaledBitmap("levels/1/stage.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display)); game->level.stage = LoadScaledBitmap("levels/1/stage.png", al_get_display_height(game->display)*4.73307291666666666667, al_get_display_height(game->display));
game->level.obst_bmps.pie = LoadScaledBitmap("menu/pie.png", al_get_display_width(game->display)*0.1, al_get_display_height(game->display)*0.1);
game->level.welcome = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); game->level.welcome = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
al_set_target_bitmap(game->level.welcome); al_set_target_bitmap(game->level.welcome);
al_clear_to_color(al_map_rgba(0,0,0,0)); al_clear_to_color(al_map_rgba(0,0,0,0));

View file

@ -74,6 +74,9 @@ struct Level {
ALLEGRO_BITMAP *welcome; ALLEGRO_BITMAP *welcome;
ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */ ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */
ALLEGRO_BITMAP *derpy; /*!< Derpy sprite. */ ALLEGRO_BITMAP *derpy; /*!< Derpy sprite. */
struct {
ALLEGRO_BITMAP *pie;
} obst_bmps;
struct Obstracle *obstracles; struct Obstracle *obstracles;
struct Moonwalk moonwalk; struct Moonwalk moonwalk;
}; };

View file

@ -51,7 +51,7 @@ void Moonwalk_Draw(struct Game *game) {
} }
} }
al_draw_scaled_bitmap(game->level.moonwalk.image,0,0,al_get_bitmap_width(game->level.moonwalk.image),al_get_bitmap_height(game->level.moonwalk.image),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0); al_draw_scaled_bitmap(game->level.moonwalk.image,0,0,al_get_bitmap_width(game->level.moonwalk.image),al_get_bitmap_height(game->level.moonwalk.image),0,0,al_get_display_width(game->display), al_get_display_height(game->display),0);
al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL); al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)*0.95-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL);
al_draw_textf(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/2.2, ALLEGRO_ALIGN_CENTRE, "Level %d: Not implemented yet!", game->level.current_level); al_draw_textf(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/2.2, ALLEGRO_ALIGN_CENTRE, "Level %d: Not implemented yet!", game->level.current_level);
al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/1.8, ALLEGRO_ALIGN_CENTRE, "Have some moonwalk instead."); al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/1.8, ALLEGRO_ALIGN_CENTRE, "Have some moonwalk instead.");
} }
@ -78,7 +78,7 @@ int Moonwalk_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
} }
void Moonwalk_PreloadBitmaps(struct Game *game) { void Moonwalk_PreloadBitmaps(struct Game *game) {
game->level.moonwalk.image =LoadScaledBitmap("table.png", al_get_display_width(game->display), al_get_display_height(game->display)); game->level.moonwalk.image =LoadScaledBitmap("levels/disco.jpg", al_get_display_width(game->display), al_get_display_height(game->display));
game->level.derpy_walkcycle = LoadScaledBitmap("levels/derpcycle.png", al_get_display_width(game->display)*0.1953125*6, al_get_display_height(game->display)*0.25*4); game->level.derpy_walkcycle = LoadScaledBitmap("levels/derpcycle.png", al_get_display_width(game->display)*0.1953125*6, al_get_display_height(game->display)*0.25*4);
game->level.derpy = al_create_bitmap(al_get_display_width(game->display)*0.1953125, al_get_display_height(game->display)*0.25); game->level.derpy = al_create_bitmap(al_get_display_width(game->display)*0.1953125, al_get_display_height(game->display)*0.25);
@ -113,7 +113,7 @@ void Moonwalk_Unload(struct Game *game) {
game->level.moonwalk.fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); game->level.moonwalk.fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
al_set_target_bitmap(game->level.moonwalk.fade_bitmap); al_set_target_bitmap(game->level.moonwalk.fade_bitmap);
al_draw_bitmap(game->level.moonwalk.image,0,0,0); al_draw_bitmap(game->level.moonwalk.image,0,0,0);
al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL); al_draw_bitmap(game->level.derpy, game->level.moonwalk.derpy_pos*al_get_display_width(game->display), al_get_display_height(game->display)*0.95-al_get_bitmap_height(game->level.derpy), ALLEGRO_FLIP_HORIZONTAL);
al_draw_textf(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/2.2, ALLEGRO_ALIGN_CENTRE, "Level %d: Not implemented yet!", game->level.current_level); al_draw_textf(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/2.2, ALLEGRO_ALIGN_CENTRE, "Level %d: Not implemented yet!", game->level.current_level);
al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/1.8, ALLEGRO_ALIGN_CENTRE, "Have some moonwalk instead."); al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)/1.8, ALLEGRO_ALIGN_CENTRE, "Have some moonwalk instead.");
al_set_target_bitmap(al_get_backbuffer(game->display)); al_set_target_bitmap(al_get_backbuffer(game->display));