map.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #include <os.h>
  2. #include "n2DLib/n2DLib.h"
  3. #include "map.h"
  4. #if INTERFACE
  5. typedef struct
  6. {
  7. unsigned w;
  8. unsigned h;
  9. unsigned *layer0;
  10. unsigned *layer1;
  11. } Map;
  12. #endif
  13. void map_draw(unsigned x, unsigned y, const Map map)
  14. {
  15. x += 20;
  16. y += 12;
  17. unsigned offset_x = x % 24 * -1;
  18. unsigned offset_y = y % 24 * -1;
  19. unsigned i, j, tile_offset;
  20. Rect sprite;
  21. sprite.y = 0;
  22. sprite.w = 24;
  23. sprite.h = 24;
  24. tile_offset = x / 24 - 7 + (y / 24 - 5) * map.w;
  25. for (j = 0; j < 11; j++)
  26. {
  27. for (i = 0; i < 15; i++)
  28. {
  29. sprite.x = map.layer0[tile_offset] * 24;
  30. drawSpritePart(tiles, offset_x, offset_y, &sprite);
  31. tile_offset++;
  32. offset_x += 24;
  33. }
  34. tile_offset += map.w - 15;
  35. offset_x -= 24 * 15;
  36. offset_y += 24;
  37. }
  38. }
  39. unsigned map_collide(unsigned x, unsigned y, const Map map)
  40. {
  41. return 0;
  42. }
  43. static void map_walk_speed_load(unsigned time)
  44. {
  45. timer_load(0, time);
  46. while (timer_read(0) != time);
  47. }
  48. static unsigned map_walk_speed_read(unsigned time, unsigned div)
  49. {
  50. return (time - timer_read(0)) / div;
  51. }
  52. void map_walk(unsigned x, unsigned y, Map map)
  53. {
  54. unsigned i, walk_time, walk_div;
  55. while (!isKeyPressed(KEY_NSPIRE_ESC))
  56. {
  57. if (isKeyPressed(KEY_NSPIRE_VAR))
  58. {
  59. walk_time = 6554;
  60. walk_div = 273;
  61. }
  62. else
  63. {
  64. walk_time = 13107;
  65. walk_div = 546;
  66. }
  67. if (isKeyPressed(KEY_NSPIRE_5) && !map_collide(x, y + 1, map))
  68. {
  69. map_walk_speed_load(walk_time);
  70. for (i = 1; i < 24; i++)
  71. {
  72. if (i >= map_walk_speed_read(walk_time, walk_div))
  73. {
  74. while (i > map_walk_speed_read(walk_time, walk_div));
  75. map_draw(x * 24, y * 24 + i, map);
  76. bufferSwap();
  77. }
  78. }
  79. y++;
  80. }
  81. else if (isKeyPressed(KEY_NSPIRE_8) && !map_collide(x, y - 1, map))
  82. {
  83. map_walk_speed_load(walk_time);
  84. for (i = 1; i < 24; i++)
  85. {
  86. if (i >= map_walk_speed_read(walk_time, walk_div))
  87. {
  88. while (i > map_walk_speed_read(walk_time, walk_div));
  89. map_draw(x * 24, y * 24 - i, map);
  90. bufferSwap();
  91. }
  92. }
  93. y--;
  94. }
  95. else if (isKeyPressed(KEY_NSPIRE_4) && !map_collide(x - 1, y, map))
  96. {
  97. map_walk_speed_load(walk_time);
  98. for (i = 1; i < 24; i++)
  99. {
  100. if (i >= map_walk_speed_read(walk_time, walk_div))
  101. {
  102. while (i > map_walk_speed_read(walk_time, walk_div));
  103. map_draw(x * 24 - i, y * 24, map);
  104. bufferSwap();
  105. }
  106. }
  107. x--;
  108. }
  109. else if (isKeyPressed(KEY_NSPIRE_6) && !map_collide(x + 1, y, map))
  110. {
  111. map_walk_speed_load(walk_time);
  112. for (i = 1; i < 24; i++)
  113. {
  114. if (i >= map_walk_speed_read(walk_time, walk_div))
  115. {
  116. while (i > map_walk_speed_read(walk_time, walk_div));
  117. map_draw(x * 24 + i, y * 24, map);
  118. bufferSwap();
  119. }
  120. }
  121. x++;
  122. }
  123. map_draw(x * 24, y * 24, map);
  124. bufferSwap();
  125. }
  126. }