init_states.c 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. #include "init_states.h"
  2. #include "pattern.h"
  3. #include "fxlib.h"
  4. const unsigned char patternTest1[] = {
  5. 0x0F, 0x00, 0x60,
  6. 0x01, 0x00, 0x00, 0x00, 0x05,
  7. 0x02, 0x00, 0x00, 0x00, 0x05,
  8. 0x03, 0x00, 0x00, 0x00, 0x05,
  9. 0x04, 0x00, 0x00, 0x00, 0x05,
  10. 0x05, 0x00, 0x00, 0x00, 0x05,
  11. 0x04, 0x00, 0x20, 0x00, 0x05,
  12. 0x05, 0x00, 0x20, 0x00, 0x05,
  13. 0x00, 0x00, 0x20, 0x00, 0x05,
  14. 0x01, 0x00, 0x20, 0x00, 0x05,
  15. 0x02, 0x00, 0x20, 0x00, 0x05,
  16. 0x01, 0x00, 0x40, 0x00, 0x05,
  17. 0x02, 0x00, 0x40, 0x00, 0x05,
  18. 0x03, 0x00, 0x40, 0x00, 0x05,
  19. 0x04, 0x00, 0x40, 0x00, 0x05,
  20. 0x05, 0x00, 0x40, 0x00, 0x05,
  21. };
  22. const unsigned char patternTest2[] = {
  23. 0x0F, 0x00, 0x30,
  24. 0x00, 0x00, 0x00, 0x00, 0x03,
  25. 0x02, 0x00, 0x00, 0x00, 0x03,
  26. 0x04, 0x00, 0x00, 0x00, 0x03,
  27. 0x00, 0x00, 0x08, 0x00, 0x03,
  28. 0x02, 0x00, 0x08, 0x00, 0x03,
  29. 0x04, 0x00, 0x08, 0x00, 0x03,
  30. 0x00, 0x00, 0x10, 0x00, 0x03,
  31. 0x02, 0x00, 0x10, 0x00, 0x03,
  32. 0x04, 0x00, 0x10, 0x00, 0x03,
  33. 0x00, 0x00, 0x18, 0x00, 0x03,
  34. 0x02, 0x00, 0x18, 0x00, 0x03,
  35. 0x04, 0x00, 0x18, 0x00, 0x03,
  36. 0x00, 0x00, 0x20, 0x00, 0x03,
  37. 0x02, 0x00, 0x20, 0x00, 0x03,
  38. 0x04, 0x00, 0x20, 0x00, 0x03,
  39. };
  40. const unsigned char patternTest3[] = {
  41. 0x09, 0x00, 0x60,
  42. 0x00, 0x00, 0x00, 0x00, 0x04,
  43. 0x01, 0x00, 0x00, 0x00, 0x04,
  44. 0x02, 0x00, 0x00, 0x00, 0x04,
  45. 0x02, 0x00, 0x20, 0x00, 0x04,
  46. 0x03, 0x00, 0x20, 0x00, 0x04,
  47. 0x04, 0x00, 0x20, 0x00, 0x04,
  48. 0x04, 0x00, 0x40, 0x00, 0x04,
  49. 0x05, 0x00, 0x40, 0x00, 0x04,
  50. 0x00, 0x00, 0x40, 0x00, 0x04,
  51. };
  52. const unsigned char patternTest4[] = {
  53. 0x0E, 0x00, 0x80,
  54. 0x00, 0x00, 0x00, 0x00, 0x65,
  55. 0x03, 0x00, 0x00, 0x00, 0x65,
  56. 0x01, 0x00, 0x10, 0x00, 0x02,
  57. 0x04, 0x00, 0x10, 0x00, 0x02,
  58. 0x02, 0x00, 0x20, 0x00, 0x02,
  59. 0x05, 0x00, 0x20, 0x00, 0x02,
  60. 0x01, 0x00, 0x30, 0x00, 0x02,
  61. 0x04, 0x00, 0x30, 0x00, 0x02,
  62. 0x02, 0x00, 0x40, 0x00, 0x02,
  63. 0x05, 0x00, 0x40, 0x00, 0x02,
  64. 0x01, 0x00, 0x50, 0x00, 0x02,
  65. 0x04, 0x00, 0x50, 0x00, 0x02,
  66. 0x02, 0x00, 0x60, 0x00, 0x05,
  67. 0x05, 0x00, 0x60, 0x00, 0x05
  68. };
  69. const unsigned char patternTest5[] = {
  70. 0x04, 0x00, 0x20,
  71. 0x01, 0x00, 0x00, 0x00, 0x05,
  72. 0x02, 0x00, 0x00, 0x00, 0x05,
  73. 0x03, 0x00, 0x00, 0x00, 0x05,
  74. 0x05, 0x00, 0x00, 0x00, 0x05
  75. };
  76. const unsigned char patternTest6[] = {
  77. 0x09, 0x00, 0x40,
  78. 0x00, 0x00, 0x10, 0x00, 0x03,
  79. 0x02, 0x00, 0x10, 0x00, 0x03,
  80. 0x04, 0x00, 0x10, 0x00, 0x03,
  81. 0x01, 0x00, 0x20, 0x00, 0x03,
  82. 0x03, 0x00, 0x20, 0x00, 0x03,
  83. 0x05, 0x00, 0x20, 0x00, 0x03,
  84. 0x00, 0x00, 0x30, 0x00, 0x03,
  85. 0x02, 0x00, 0x30, 0x00, 0x03,
  86. 0x04, 0x00, 0x30, 0x00, 0x03
  87. };
  88. const unsigned char patternTest7[] = {
  89. 0x0C, 0x00, 0x70,
  90. 0x01, 0x00, 0x00, 0x00, 0x11,
  91. 0x02, 0x00, 0x10, 0x00, 0x11,
  92. 0x03, 0x00, 0x20, 0x00, 0x11,
  93. 0x04, 0x00, 0x30, 0x00, 0x11,
  94. 0x05, 0x00, 0x45, 0x00, 0x11,
  95. 0x00, 0x00, 0x50, 0x00, 0x11,
  96. 0x04, 0x00, 0x00, 0x00, 0x11,
  97. 0x05, 0x00, 0x10, 0x00, 0x11,
  98. 0x00, 0x00, 0x20, 0x00, 0x11,
  99. 0x01, 0x00, 0x30, 0x00, 0x11,
  100. 0x02, 0x00, 0x40, 0x00, 0x11,
  101. 0x03, 0x00, 0x50, 0x00, 0x11,
  102. };
  103. void init_game(Game_Data *data)
  104. {
  105. //TODO: init the level depending on the value of data->current_entry
  106. int i;
  107. data->level = NULL;
  108. data->level = malloc(sizeof(Level));
  109. if(data->level == NULL) {
  110. switch_to_state(data, OUT_OF_MEMORY);
  111. return;
  112. }
  113. data->level->id = 1;
  114. data->level->patterns = malloc(7*sizeof(Pattern));
  115. if(data->level->patterns == NULL) {
  116. free(data->level);
  117. switch_to_state(data, OUT_OF_MEMORY);
  118. return;
  119. }
  120. readPattern(&data->level->patterns[0], patternTest1);
  121. readPattern(&data->level->patterns[1], patternTest2);
  122. readPattern(&data->level->patterns[2], patternTest3);
  123. readPattern(&data->level->patterns[3], patternTest4);
  124. readPattern(&data->level->patterns[4], patternTest5);
  125. readPattern(&data->level->patterns[5], patternTest6);
  126. readPattern(&data->level->patterns[6], patternTest7);
  127. data->level->nb_patterns = 7;
  128. for(i = 0; i < data->level->nb_patterns; ++i) {
  129. if(&data->level->patterns[i] == NULL) {
  130. int j;
  131. for(j = 0; j < i; ++j) {
  132. free(&data->level->patterns[j]);
  133. }
  134. free(&data->level);
  135. switch_to_state(data, OUT_OF_MEMORY);
  136. return;
  137. }
  138. }
  139. data->level->player_rotation_speed = 60;
  140. data->level->cam_change_interval = 5;
  141. data->level->cam_change_precision = 1;
  142. data->level->cam_change_probability = 0.75;
  143. data->level->cam_max_speed = 5;
  144. data->level->cam_min_speed = 1;
  145. data->level->fast_spin_probability = 0.1;
  146. data->level->lc_min_score = 20;
  147. data->level->lc_probability = 0.05;
  148. data->level->lc_duration = 15;
  149. data->are_colors_reversed = 0;
  150. data->list = NULL;
  151. data->start_time = RTC_GetTicks(); // 1 tick == 1/128 second
  152. data->last_time = 0;
  153. data->current_time = RTC_GetTicks();
  154. data->chrono_time = 0;
  155. data->player_angle = 0;
  156. data->cam.cX = 64;
  157. data->cam.cY = 32;
  158. data->cam.angle = 0;
  159. data->cam.speed = 1.5;
  160. data->cam.zoom = 0.0;
  161. data->nb_lines = 6;
  162. data->line_transition.counter = 0;
  163. data->line_transition.counter_start = 0;
  164. data->line_transition.delta_nb_lines = 0;
  165. data->cooldown_timer = 16;
  166. data->it_s_a_highscore = 0;
  167. }
  168. void init_title(Game_Data *data)
  169. {
  170. data->start_time = RTC_GetTicks(); // 1 tick == 1/128 second
  171. data->last_time = 0;
  172. data->current_time = RTC_GetTicks();
  173. data->chrono_time = 0;
  174. data->are_colors_reversed = 0;
  175. data->cam.cX = 96;
  176. data->cam.cY = 32;
  177. data->cam.angle = 0;
  178. data->cam.speed = 1;
  179. data->cam.zoom = 24;
  180. data->nb_lines = 6;
  181. data->line_transition.counter = 0;
  182. data->line_transition.counter_start = 0;
  183. data->line_transition.delta_nb_lines = 0;
  184. }
  185. void init_menu(Game_Data *data)
  186. {
  187. int i;
  188. data->cam.cX = 64;
  189. data->cam.cY = 70;
  190. data->cam.angle = 0;
  191. data->cam.speed = 0;
  192. data->cam.zoom = 8.0;
  193. data->nb_lines = 6;
  194. data->line_transition.counter = 0;
  195. data->line_transition.counter_start = 0;
  196. data->line_transition.delta_nb_lines = 0;
  197. data->keypress_delay = 50;
  198. data->nb_entries = 6;
  199. data->current_entry = 1;
  200. data->current_entry_high_score = 0; //to load from a save file
  201. }
  202. void init_game_over(Game_Data *data)
  203. {
  204. data->cam.cX = 96;
  205. data->cam.cY = 32;
  206. data->cam.angle = 0;
  207. data->cam.speed = 1;
  208. data->cam.zoom = 12;
  209. data->nb_lines = 6;
  210. data->line_transition.counter = 0;
  211. data->line_transition.counter_start = 0;
  212. data->line_transition.delta_nb_lines = 0;
  213. if(data->chrono_time > data->entry_highscores[data->current_entry - 1]) {
  214. data->it_s_a_highscore = 1;
  215. data->entry_highscores[data->current_entry - 1] = data->chrono_time;
  216. }
  217. }
  218. void init_oom(Game_Data *data) {
  219. data->cam.cX = 0;
  220. data->cam.cY = 0;
  221. data->cam.speed = -1;
  222. data->cam.zoom = 25;
  223. data->nb_lines = 6;
  224. data->line_transition.counter = 0;
  225. data->line_transition.counter_start = 0;
  226. data->line_transition.delta_nb_lines = 0;
  227. if(data->chrono_time > data->entry_highscores[data->current_entry - 1]) {
  228. data->it_s_a_highscore = 1;
  229. data->entry_highscores[data->current_entry - 1] = data->chrono_time;
  230. }
  231. }