#include "init_states.h" #include "pattern.h" #include "fxlib.h" const unsigned char patternTest1[] = { 0x0F, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x05, 0x04, 0x00, 0x20, 0x00, 0x05, 0x05, 0x00, 0x20, 0x00, 0x05, 0x00, 0x00, 0x20, 0x00, 0x05, 0x01, 0x00, 0x20, 0x00, 0x05, 0x02, 0x00, 0x20, 0x00, 0x05, 0x01, 0x00, 0x40, 0x00, 0x05, 0x02, 0x00, 0x40, 0x00, 0x05, 0x03, 0x00, 0x40, 0x00, 0x05, 0x04, 0x00, 0x40, 0x00, 0x05, 0x05, 0x00, 0x40, 0x00, 0x05, }; const unsigned char patternTest2[] = { 0x0F, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08, 0x00, 0x03, 0x02, 0x00, 0x08, 0x00, 0x03, 0x04, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, 0x10, 0x00, 0x03, 0x02, 0x00, 0x10, 0x00, 0x03, 0x04, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x03, 0x02, 0x00, 0x18, 0x00, 0x03, 0x04, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x03, 0x02, 0x00, 0x20, 0x00, 0x03, 0x04, 0x00, 0x20, 0x00, 0x03, }; const unsigned char patternTest3[] = { 0x09, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x20, 0x00, 0x04, 0x03, 0x00, 0x20, 0x00, 0x04, 0x04, 0x00, 0x20, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x04, 0x05, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x04, }; const unsigned char patternTest4[] = { 0x0E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x65, 0x03, 0x00, 0x00, 0x00, 0x65, 0x01, 0x00, 0x10, 0x00, 0x02, 0x04, 0x00, 0x10, 0x00, 0x02, 0x02, 0x00, 0x20, 0x00, 0x02, 0x05, 0x00, 0x20, 0x00, 0x02, 0x01, 0x00, 0x30, 0x00, 0x02, 0x04, 0x00, 0x30, 0x00, 0x02, 0x02, 0x00, 0x40, 0x00, 0x02, 0x05, 0x00, 0x40, 0x00, 0x02, 0x01, 0x00, 0x50, 0x00, 0x02, 0x04, 0x00, 0x50, 0x00, 0x02, 0x02, 0x00, 0x60, 0x00, 0x05, 0x05, 0x00, 0x60, 0x00, 0x05 }; const unsigned char patternTest5[] = { 0x04, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x05 }; const unsigned char patternTest6[] = { 0x09, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x03, 0x02, 0x00, 0x10, 0x00, 0x03, 0x04, 0x00, 0x10, 0x00, 0x03, 0x01, 0x00, 0x20, 0x00, 0x03, 0x03, 0x00, 0x20, 0x00, 0x03, 0x05, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x03, 0x02, 0x00, 0x30, 0x00, 0x03, 0x04, 0x00, 0x30, 0x00, 0x03 }; const unsigned char patternTest7[] = { 0x0C, 0x00, 0x70, 0x01, 0x00, 0x00, 0x00, 0x11, 0x02, 0x00, 0x10, 0x00, 0x11, 0x03, 0x00, 0x20, 0x00, 0x11, 0x04, 0x00, 0x30, 0x00, 0x11, 0x05, 0x00, 0x45, 0x00, 0x11, 0x00, 0x00, 0x50, 0x00, 0x11, 0x04, 0x00, 0x00, 0x00, 0x11, 0x05, 0x00, 0x10, 0x00, 0x11, 0x00, 0x00, 0x20, 0x00, 0x11, 0x01, 0x00, 0x30, 0x00, 0x11, 0x02, 0x00, 0x40, 0x00, 0x11, 0x03, 0x00, 0x50, 0x00, 0x11, }; void init_game(Game_Data *data) { //TODO: init the level depending on the value of data->current_entry int i; data->level = NULL; data->level = malloc(sizeof(Level)); if(data->level == NULL) { switch_to_state(data, OUT_OF_MEMORY); return; } data->level->id = 1; data->level->patterns = malloc(7*sizeof(Pattern)); if(data->level->patterns == NULL) { free(data->level); switch_to_state(data, OUT_OF_MEMORY); return; } readPattern(&data->level->patterns[0], patternTest1); readPattern(&data->level->patterns[1], patternTest2); readPattern(&data->level->patterns[2], patternTest3); readPattern(&data->level->patterns[3], patternTest4); readPattern(&data->level->patterns[4], patternTest5); readPattern(&data->level->patterns[5], patternTest6); readPattern(&data->level->patterns[6], patternTest7); data->level->nb_patterns = 7; for(i = 0; i < data->level->nb_patterns; ++i) { if(&data->level->patterns[i] == NULL) { int j; for(j = 0; j < i; ++j) { free(&data->level->patterns[j]); } free(&data->level); switch_to_state(data, OUT_OF_MEMORY); return; } } data->level->player_rotation_speed = 60; data->level->cam_change_interval = 5; data->level->cam_change_precision = 1; data->level->cam_change_probability = 0.75; data->level->cam_max_speed = 5; data->level->cam_min_speed = 1; data->level->fast_spin_probability = 0.1; data->level->lc_min_score = 20; data->level->lc_probability = 0.05; data->level->lc_duration = 15; data->are_colors_reversed = 0; data->list = NULL; data->start_time = RTC_GetTicks(); // 1 tick == 1/128 second data->last_time = 0; data->current_time = RTC_GetTicks(); data->chrono_time = 0; data->player_angle = 0; data->cam.cX = 64; data->cam.cY = 32; data->cam.angle = 0; data->cam.speed = 1.5; data->cam.zoom = 0.0; data->nb_lines = 6; data->line_transition.counter = 0; data->line_transition.counter_start = 0; data->line_transition.delta_nb_lines = 0; data->cooldown_timer = 16; data->it_s_a_highscore = 0; } void init_title(Game_Data *data) { data->start_time = RTC_GetTicks(); // 1 tick == 1/128 second data->last_time = 0; data->current_time = RTC_GetTicks(); data->chrono_time = 0; data->are_colors_reversed = 0; data->cam.cX = 96; data->cam.cY = 32; data->cam.angle = 0; data->cam.speed = 1; data->cam.zoom = 24; data->nb_lines = 6; data->line_transition.counter = 0; data->line_transition.counter_start = 0; data->line_transition.delta_nb_lines = 0; } void init_menu(Game_Data *data) { int i; data->cam.cX = 64; data->cam.cY = 70; data->cam.angle = 0; data->cam.speed = 0; data->cam.zoom = 8.0; data->nb_lines = 6; data->line_transition.counter = 0; data->line_transition.counter_start = 0; data->line_transition.delta_nb_lines = 0; data->keypress_delay = 50; data->nb_entries = 6; data->current_entry = 1; data->current_entry_high_score = 0; //to load from a save file } void init_game_over(Game_Data *data) { data->cam.cX = 96; data->cam.cY = 32; data->cam.angle = 0; data->cam.speed = 1; data->cam.zoom = 12; data->nb_lines = 6; data->line_transition.counter = 0; data->line_transition.counter_start = 0; data->line_transition.delta_nb_lines = 0; if(data->chrono_time > data->entry_highscores[data->current_entry - 1]) { data->it_s_a_highscore = 1; data->entry_highscores[data->current_entry - 1] = data->chrono_time; } } void init_oom(Game_Data *data) { data->cam.cX = 0; data->cam.cY = 0; data->cam.speed = -1; data->cam.zoom = 25; data->nb_lines = 6; data->line_transition.counter = 0; data->line_transition.counter_start = 0; data->line_transition.delta_nb_lines = 0; if(data->chrono_time > data->entry_highscores[data->current_entry - 1]) { data->it_s_a_highscore = 1; data->entry_highscores[data->current_entry - 1] = data->chrono_time; } }