void Level4_Load(struct Game *game) { Moonwalk_Load(game); TM_AddAction(&DoMoonwalk, NULL, "moonwalk"); TM_AddAction(&PassLevel, NULL, "passlevel"); TM_AddBackgroundAction(&ShowMeter, NULL, 0, "showmeter"); FadeGameState(game, true); }
void UpdateRockets(struct Game *game, struct RocketsResources *data, struct Rocket* rockets) { struct Rocket *tmp = rockets; while (tmp) { tmp->dy+= tmp->modifier; if (!tmp->blown) { tmp->dx+= (tmp->dx > 0) ? (-tmp->modifier / 5 + 0.001) : (tmp->modifier / 5 - 0.001); } MoveCharacter(game, tmp->character, tmp->dx, tmp->dy, tmp->blown ? 0 : ((tmp->dx > 0) ? 0.0166 : -0.0166)); AnimateCharacter(game, tmp->character, 1); if (!tmp->blown) { if (((((GetCharacterY(game, tmp->character) > 90) && (rand() % 4 == 0) && (tmp->dy > 0)))) && (GetCharacterX(game, tmp->character) > -20 && GetCharacterX(game, tmp->character) < 320)) { tmp->blown = true; tmp->modifier = 0; tmp->character->angle = 0; tmp->dx = 0; tmp->dy = 0; SelectSpritesheet(game, tmp->character, "boom"); MoveCharacter(game, tmp->character, 5, 5, 0); if (!((GetCharacterX(game, tmp->character) > 140) && (GetCharacterX(game, tmp->character) < 180))) { if (!data->lost) { AdvanceLevel(game, false); data->lost = true; data->flash = 4; data->counter = 0; TM_AddDelay(data->timeline, 3500); if (game->data->mediator.lives > 0) { TM_AddAction(data->timeline, switchMinigame, NULL, "switchMinigame"); } else { TM_AddAction(data->timeline, theEnd, NULL, "theEnd"); } data->spawnspeed = 10; al_play_sample_instance(data->riot_sound); } al_play_sample_instance(data->boom_sound); } } else if (GetCharacterX(game, tmp->character) < -20 || GetCharacterX(game, tmp->character) > 320) { tmp->blown = true; tmp->modifier = 0; tmp->character->angle = 0; tmp->dx = 0; tmp->dy = 0; SelectSpritesheet(game, tmp->character, "blank"); al_play_sample_instance(data->boom_sound); } } tmp=tmp->next; } }
void Level6_Load(struct Game *game) { Moonwalk_Load(game); TM_AddAction(&DoMoonwalk, NULL, "moonwalk"); TM_AddBackgroundAction(&DoMoonwalk, NULL, 5000, "moonwalkDerp"); TM_AddBackgroundAction(&PassLevel, NULL, 10000, "passlevel"); FadeGameState(game, true); }
void Level1_Load(struct Game *game) { Dodger_Load(game); TM_AddBackgroundAction(&FadeIn, NULL, 0, "fadein"); TM_AddDelay(1000); TM_AddQueuedBackgroundAction(&Welcome, NULL, 0, "welcome"); TM_AddDelay(1000); TM_AddAction(&Walk, NULL, "walk"); TM_AddAction(&Move, NULL, "move"); TM_AddAction(&Stop, NULL, "stop"); TM_AddDelay(1000); TM_AddAction(&Letter, NULL, "letter"); TM_AddDelay(200); TM_AddQueuedBackgroundAction(&Accelerate, NULL, 0, "accelerate"); TM_AddAction(&Fly, NULL, "fly"); TM_AddDelay(500); /* first part gameplay goes here */ /* actions for generating obstacles should go here * probably as regular actions. When one ends, harder one * begins. After last one part with muffins starts. */ TM_AddAction(&GenerateObstacles, NULL, "obstacles"); TM_AddDelay(3*1000); /* wings disappear, deccelerate */ TM_AddAction(&Run, NULL, "run"); TM_AddDelay(3*1000); /* show Fluttershy's house // second part gameplay goes here // cutscene goes here */ TM_AddAction(&PassLevel, NULL, "passlevel"); // init level specific obstacle for Dodger module struct Obstacle *obst = malloc(sizeof(struct Obstacle)); obst->prev = NULL; obst->next = NULL; obst->x = 83.5; obst->y = 55; obst->speed = 1; obst->points = 0; obst->hit = false; obst->rows = 1; obst->cols = 1; obst->pos = 0; obst->blanks = 0; obst->anim_speed = 0; obst->tmp_pos = 0; obst->angle = 0; obst->callback = NULL; obst->data = NULL; obst->bitmap = &(game->level.level1.owl); game->level.dodger.obstacles = obst; }
void Gamestate_Start(struct Game *game, struct GamestateResources* data) { data->pos = 1; data->fade = 0; data->tan = 64; data->tick = 0; data->fadeout = false; data->underscore=true; strcpy(data->text, "#"); TM_AddDelay(data->timeline, 300); TM_AddQueuedBackgroundAction(data->timeline, FadeIn, TM_AddToArgs(NULL, 1, data), 0, "fadein"); TM_AddDelay(data->timeline, 1500); TM_AddAction(data->timeline, Play, TM_AddToArgs(NULL, 1, data->kbd), "playkbd"); TM_AddQueuedBackgroundAction(data->timeline, Type, TM_AddToArgs(NULL, 1, data), 0, "type"); TM_AddDelay(data->timeline, 3200); TM_AddAction(data->timeline, Play, TM_AddToArgs(NULL, 1, data->key), "playkey"); TM_AddDelay(data->timeline, 50); TM_AddAction(data->timeline, FadeOut, TM_AddToArgs(NULL, 1, data), "fadeout"); TM_AddDelay(data->timeline, 1000); TM_AddAction(data->timeline, End, NULL, "end"); al_play_sample_instance(data->sound); }
void Gamestate_Logic(struct Game *game, struct RocketsResources* data) { if ((data->spawncounter == data->currentspawn) && ((data->counter < data->timelimit) || (data->lost))) { if (rand() % 2 == 0) { data->rockets_left = CreateRocket(game, data, data->rockets_left, false); } else { data->rockets_right = CreateRocket(game, data, data->rockets_right, true); } data->spawncounter = 0; } if (!data->flash) { UpdateRockets(game, data, data->rockets_left); UpdateRockets(game, data, data->rockets_right); } else { data->flash--; } if (data->lost) { data->zadyma++; if (data->zadyma >= 255) { data->zadyma = 255; } } AnimateCharacter(game, data->usa_flag, 1); AnimateCharacter(game, data->ru_flag, 1); AnimateCharacter(game, data->riot, 1); if ((data->lost) && (data->hearts > 80)) { AnimateCharacter(game, game->data->mediator.heart, 1); if (game->data->mediator.heart->pos == 6) { al_play_sample_instance(data->boom_sound); } } if (data->lost) { data->hearts++; } if (data->won) { AnimateCharacter(game, data->euro, 1); } if ((data->counter >= data->timelimit) && (!data->lost) && (!data->won)) { bool stillthere = false; struct Rocket *tmp = data->rockets_left; while (tmp) { if (!tmp->blown) { stillthere = true; break; } tmp = tmp->next; } tmp = data->rockets_right; while (tmp) { if (!tmp->blown) { stillthere = true; break; } tmp = tmp->next; } if (!stillthere) { SelectSpritesheet(game, data->euro, "euro"); SetCharacterPosition(game, data->euro, 0, 0, 0); al_play_sample_instance(data->wuwu_sound); data->won = true; AdvanceLevel(game, true); SelectSpritesheet(game, data->usa_flag, "poland"); SelectSpritesheet(game, data->ru_flag, "poland"); TM_AddDelay(data->timeline, 2500); TM_AddAction(data->timeline, switchMinigame, NULL, "switchMinigame"); } } void iterate(struct Rocket *start) { struct Rocket *tmp1 = start; while (tmp1) { if (!tmp1->blown) { // if (CheckCollision(game, data, data->cursor, tmp1->character)) { if ( (abs(GetCharacterY(game, tmp1->character) - GetCharacterY(game, data->cursor)) <= 10) && (((GetCharacterX(game, tmp1->character) <= GetCharacterX(game, data->cursor) + al_get_bitmap_width(data->cursor->bitmap)) && (GetCharacterX(game, tmp1->character) + al_get_bitmap_width(tmp1->character->bitmap) >= GetCharacterX(game, data->cursor) + al_get_bitmap_width(data->cursor->bitmap))) || ((GetCharacterX(game, tmp1->character) + al_get_bitmap_width(tmp1->character->bitmap) >= GetCharacterX(game, data->cursor)) && (GetCharacterX(game, tmp1->character) + al_get_bitmap_width(tmp1->character->bitmap) <= GetCharacterX(game, data->cursor) + al_get_bitmap_width(data->cursor->bitmap))) )) { if (GetCharacterY(game, tmp1->character) < GetCharacterY(game, data->cursor)) { tmp1->dx = 0; tmp1->dy = 0; tmp1->modifier = 0; tmp1->blown = true; SelectSpritesheet(game, tmp1->character, "blank"); } else if (tmp1->dy < 0) { tmp1->dy *= -1; } al_play_sample_instance(data->rocket_sound); } } tmp1 = tmp1->next; } } iterate(data->rockets_left); iterate(data->rockets_right); data->counter++; data->spawncounter++; data->cloud_rotation += 0.002; TM_Process(data->timeline); }