main.c 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include <tice.h>
  2. #include <graphx.h>
  3. #include <keypadc.h>
  4. #include <debug.h>
  5. #include <compression.h>
  6. #include "gfx/main_gfx.h"
  7. #include "lib/vector.h"
  8. #include "lib/sprite.h"
  9. #include "lib/object.h"
  10. float scale = 3.0;
  11. int frameskip = 10;
  12. #define init_Sprites() \
  13. Vector* sprites = new_Vector(22, sizeof(Sprite), &free_Sprite); \
  14. sprites->consume(sprites, new_Sprite(bm1_width, bm1_height, bm1_compressed)); \
  15. sprites->consume(sprites, new_Sprite(bm2_width, bm2_height, bm2_compressed)); \
  16. sprites->consume(sprites, new_Sprite(bm3_width, bm3_height, bm3_compressed)); \
  17. sprites->consume(sprites, new_Sprite(bm4_width, bm4_height, bm4_compressed)); \
  18. sprites->consume(sprites, new_Sprite(bm5_width, bm5_height, bm5_compressed)); \
  19. sprites->consume(sprites, new_Sprite(bm6_width, bm6_height, bm6_compressed)); \
  20. sprites->consume(sprites, new_Sprite(bm7_width, bm7_height, bm7_compressed)); \
  21. sprites->consume(sprites, new_Sprite(bm8_width, bm8_height, bm8_compressed)); \
  22. sprites->consume(sprites, new_Sprite(bm9_width, bm9_height, bm9_compressed)); \
  23. sprites->consume(sprites, new_Sprite(bm10_width, bm10_height, bm10_compressed)); \
  24. sprites->consume(sprites, new_Sprite(bm11_width, bm11_height, bm11_compressed)); \
  25. sprites->consume(sprites, new_Sprite(bm12_width, bm12_height, bm12_compressed)); \
  26. sprites->consume(sprites, new_Sprite(bm13_width, bm13_height, bm13_compressed)); \
  27. sprites->consume(sprites, new_Sprite(bm14_width, bm14_height, bm14_compressed)); \
  28. sprites->consume(sprites, new_Sprite(bm15_width, bm15_height, bm15_compressed)); \
  29. sprites->consume(sprites, new_Sprite(bm16_width, bm16_height, bm16_compressed)); \
  30. sprites->consume(sprites, new_Sprite(bm17_width, bm17_height, bm17_compressed)); \
  31. sprites->consume(sprites, new_Sprite(bm18_width, bm18_height, bm18_compressed)); \
  32. sprites->consume(sprites, new_Sprite(bm19_width, bm19_height, bm19_compressed)); \
  33. sprites->consume(sprites, new_Sprite(bm20_width, bm20_height, bm20_compressed)); \
  34. sprites->consume(sprites, new_Sprite(bm21_width, bm21_height, bm21_compressed)); \
  35. sprites->consume(sprites, new_Sprite(bm22_width, bm22_height, bm22_compressed))
  36. void log(char* msg){
  37. dbg_sprintf(dbgout, "[TBP] %s\n", msg);
  38. }
  39. int main(void){
  40. kb_key_t arrows;
  41. int max_width = LCD_WIDTH;
  42. int max_height = LCD_HEIGHT;
  43. int frame = 0;
  44. size_t i;
  45. Object* object;
  46. Object* player = new_Object(0, 0);
  47. Vector* objects = new_Vector(1, sizeof(Object), &free_Object);
  48. init_Sprites();
  49. if(!objects->push(objects, player)){
  50. log("Unable to add player to stack");
  51. free_Vector(objects);
  52. free_Object(player);
  53. return 1;
  54. }
  55. free_Object(player);
  56. player = objects->get(objects, 0);
  57. player->sprite = sprites->get(sprites, 0);
  58. log("Get max sizes");
  59. max_width -= player->sprite->data->width * scale;
  60. max_height -= player->sprite->data->height * scale;
  61. log("Set scale");
  62. player->scale.x = scale;
  63. player->scale.y = scale;
  64. log("Start graphics");
  65. gfx_Begin();
  66. gfx_SetPalette(main_palette, sizeof_main_palette, 0);
  67. gfx_SetDrawBuffer();
  68. log("Main loop");
  69. do{
  70. player->sprite = sprites->get(sprites, 0);
  71. kb_Scan();
  72. arrows = kb_Data[7];
  73. if(arrows & kb_Down){
  74. if(player->y < max_height){
  75. player->y++;
  76. if(frame > 2){
  77. player->sprite = sprites->get(sprites, 2);
  78. }else{
  79. player->sprite = sprites->get(sprites, 4);
  80. }
  81. }
  82. }else if(arrows & kb_Up){
  83. if(player->y > 0){
  84. player->y--;
  85. if(frame > 2){
  86. player->sprite = sprites->get(sprites, 18);
  87. }else{
  88. player->sprite = sprites->get(sprites, 20);
  89. }
  90. }
  91. }
  92. if(arrows & kb_Right){
  93. if(player->x < max_width){
  94. player->x++;
  95. if(frame > 2){
  96. player->sprite = sprites->get(sprites, 10);
  97. }else{
  98. player->sprite = sprites->get(sprites, 12);
  99. }
  100. }
  101. }else if(arrows & kb_Left){
  102. if(player->x > 0){
  103. player->x--;
  104. if(frame > 2){
  105. player->sprite = sprites->get(sprites, 6);
  106. }else{
  107. player->sprite = sprites->get(sprites, 8);
  108. }
  109. }
  110. }
  111. gfx_FillScreen(0);
  112. for(i = 0; i < objects->count(objects); i++){
  113. object = objects->get(objects, i);
  114. object->draw(object);
  115. }
  116. gfx_BlitBuffer();
  117. frame++;
  118. if(frame > frameskip){
  119. frame = 0;
  120. }
  121. }while (! (kb_Data[6] & kb_Clear));
  122. log("Freeing sprites stack");
  123. free_Vector(sprites);
  124. player->sprite = NULL;
  125. log("Freeing objects stack");
  126. free_Vector(objects);
  127. log("End graphics");
  128. gfx_End();
  129. log("Done");
  130. return 0;
  131. }