Subversion Repositories Kolibri OS

Rev

Rev 5291 | Rev 5302 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef RSGAME_H_INCLUDED
  2. #define RSGAME_H_INCLUDED
  3.  
  4. /*
  5.  
  6.     Heliothryx
  7.     Game by Roman Shuvalov
  8.  
  9. */
  10.  
  11. #ifndef RS_LINUX
  12.     #ifndef RS_WIN32
  13.         #ifndef RS_KOS
  14.             #error Please specify platform
  15.         #endif
  16.     #endif
  17. #endif
  18.  
  19.  
  20. #include "rskos.h"
  21. #include "rs/rsplatform.h"
  22.  
  23. #include "rs/rsdebug.h"
  24. #include "rs/rsbits.h"
  25.  
  26. #include "rsgamelogic.h"
  27.  
  28.  
  29. #include "rs/rsmx.h"
  30.  
  31.  
  32.  
  33.  
  34. #define GAME_LANG_EN    0
  35. #define GAME_LANG_RU    1
  36.  
  37. #define GAME_WIDTH  320
  38. #define GAME_HEIGHT 180
  39.  
  40.  
  41. typedef struct {
  42.     unsigned int status;
  43.     int w;
  44.     int h;
  45.     unsigned char *data; // BGRA BGRA
  46. } rs_texture_t;
  47.  
  48.  
  49. // for little-endian
  50. typedef union color_t {
  51.     int d;                 // 0x44332211 (ARGB)
  52.     struct {
  53.         unsigned char b; // 0x11
  54.         unsigned char g; // 0x22
  55.         unsigned char r; // 0x33
  56.         unsigned char a; // 0x44
  57.     };
  58. } color_t;
  59.  
  60. // for little-endian (ARGB)
  61. #define COLOR_BLACK     0xFF000000
  62. #define COLOR_TRANSPARENT   0x00000000
  63. #define COLOR_DARK_RED  0xFF401000
  64.  
  65.  
  66.  
  67. void texture_init(rs_texture_t *tex, int w, int h);
  68. void texture_free(rs_texture_t *tex);
  69. void texture_clear(rs_texture_t *tex, unsigned int color);
  70. void texture_draw(rs_texture_t *dest, rs_texture_t *src, int x, int y, int mode);
  71. void texture_draw_vline(rs_texture_t *tex, int x, int y, int l, unsigned int color);
  72. void texture_draw_hline(rs_texture_t *tex, int x, int y, int l, unsigned int color);
  73. void texture_set_pixel(rs_texture_t *tex, int x, int y, unsigned int color);
  74.  
  75. unsigned char clamp_byte(int value);
  76.  
  77. #define DRAW_MODE_REPLACE   0
  78. #define DRAW_MODE_ADDITIVE  1
  79. #define DRAW_MODE_ALPHA     2
  80.  
  81. #define DRAW_MODE_MASK      0x0000FFFF
  82. #define DRAW_TILED_FLAG     0x00010000
  83.  
  84.  
  85.  
  86. typedef struct {
  87.     unsigned int status;
  88.     int length_samples;
  89.     SNDBUF hbuf;
  90.     signed short *data;
  91. } rs_soundbuf_t;
  92.  
  93. void soundbuf_init(rs_soundbuf_t *snd, int length);
  94. void soundbuf_free(rs_soundbuf_t *snd);
  95. void soundbuf_fill(rs_soundbuf_t *snd, int amp, int freq_div);
  96. void soundbuf_sin(rs_soundbuf_t *snd, float freq);
  97. void soundbuf_sin_fade(rs_soundbuf_t *snd, float freq);
  98. void soundbuf_play(rs_soundbuf_t *snd);
  99. void soundbuf_stop(rs_soundbuf_t *snd);
  100.  
  101. // Game Objects
  102.  
  103. #define     GAME_OBJS_MAX_COUNT     1024
  104.  
  105. #define     OBJ_PLAYER      0
  106. #define     OBJ_BULLET      1
  107. #define     OBJ_EXPLOSION   2
  108. #define     OBJ_ROCK        3
  109. #define     OBJ_MINIROCK    4
  110. #define     OBJ_TURRET      5
  111. #define     OBJ_RED_BULLET  6
  112.  
  113. typedef struct game_obj_t {
  114.     int obj_type;
  115.     int flags;
  116.     int tag;
  117.     int radius;
  118.    
  119.     float x;
  120.     float y;
  121.     int t;
  122.     float f;
  123.    
  124. //    int health;
  125. //    int reserved0;
  126. //    int reserved1;
  127. //    int reserved2;
  128. } game_obj_t;
  129.  
  130. #define OBJ_FLAG_DESTROYED      0x01
  131. #define OBJ_FLAG_ENEMY          0x02
  132. #define OBJ_FLAG_SIN            0x04
  133. #define OBJ_FLAG_BOSS           0x08 // draw health-bar above
  134.  
  135. game_obj_t game_obj(int obj_type, int flags, int tag, int radius, float x, float y, int t, float f);
  136.  
  137. int game_obj_add(game_obj_t obj);
  138. void game_obj_remove(int index);
  139.  
  140.  
  141.  
  142. // Game Registry
  143.  
  144. #define ROCKS_COUNT 8
  145. #define MINIROCKS_COUNT ROCKS_COUNT // must equal
  146. #define FONTS_COUNT 4
  147. #define EXPLOSIONS_COUNT    8
  148. #define EXPLOSION_RADIUS    16
  149.  
  150. #define STATUS_MENU     0
  151. #define STATUS_PLAYING  1
  152. #define STATUS_PAUSED   2
  153.  
  154.  
  155. #define RS_ARROW_LEFT_MASK      0x01
  156. #define RS_ARROW_DOWN_MASK      0x02
  157. #define RS_ARROW_UP_MASK        0x04
  158. #define RS_ARROW_RIGHT_MASK     0x08
  159. #define RS_ATTACK_KEY_MASK  0x10
  160.  
  161. //#define BULLETS_COUNT   8
  162.  
  163. #define GAME_SHOOT_PERIOD   3
  164.  
  165. #define GAME_FLAG_BOSS_DESTROYED    0x01
  166.  
  167. #define SOUND_EXPLOSIONS_COUNT      8
  168.  
  169. typedef struct rs_game_t {
  170.     rs_texture_t framebuffer;
  171.     unsigned char *scaled_framebuffer; // 24-bit BGRBGRBGR... for direct drawing
  172.    
  173.     rs_texture_t tex;
  174.    
  175.     rs_texture_t tex_clouds;
  176.     rs_texture_t tex_ground;
  177.    
  178.     rs_texture_t tex_ship[4];
  179.     rs_texture_t tex_rocks[ROCKS_COUNT];
  180.     rs_texture_t tex_minirocks[MINIROCKS_COUNT];
  181.    
  182.     rs_texture_t tex_explosions[EXPLOSIONS_COUNT];
  183.    
  184.     rs_texture_t tex_font[64*FONTS_COUNT];
  185.    
  186.     rs_texture_t tex_gui_line;
  187.    
  188.     int bg_color;
  189.    
  190.     rs_soundbuf_t sound_test1;
  191.     rs_soundbuf_t sound_test2;
  192.     rs_soundbuf_t sound_test3;
  193.    
  194.     rs_soundbuf_t sound_explosions[SOUND_EXPLOSIONS_COUNT];
  195.     rs_soundbuf_t sound_hit;
  196.    
  197.     int status;
  198.     int flags;
  199.    
  200.     unsigned int keyboard_state;
  201.    
  202.     int menu_index;
  203.     int menu_item_index;
  204.    
  205.     int window_scale;
  206.    
  207. //    int tx1;
  208. //    int ty1;
  209.     int tz;
  210.    
  211.     int player_x;
  212.     int player_y;
  213. //    int player_z;
  214.    
  215. //    int bullet_x[BULLETS_COUNT];
  216. //    int bullet_y[BULLETS_COUNT];
  217. //    int bullet_index;
  218.     int shoot_delay;
  219.     int shoot_keypressed;
  220.     int shoot_restore_delay;
  221.    
  222.     int health;
  223.     int ammo;
  224.     int score;
  225.    
  226. //    int ammo_max;
  227.    
  228.     int stage;
  229.     int stage_timer;
  230.    
  231.     game_obj_t *objs;
  232.     int objs_count;
  233.    
  234. } rs_game_t;
  235.  
  236. #define GAME_HEALTH_MAX     8
  237. #define GAME_AMMO_MAX       24
  238.  
  239. extern rs_game_t game;
  240. void game_reg_init();
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250. /*  __
  251.    /cc\
  252.   /aaaa\
  253.  |kkkkkk|  <-- Easter Egg
  254.   \eeee/
  255. ------------------------------- */
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265. void game_ding(int i);
  266.  
  267. void GameInit();
  268. void GameTerm();
  269.  
  270. void GameKeyDown(int key);
  271. void GameKeyUp(int key);
  272.  
  273. void GameMouseDown(int x, int y);
  274. void GameMouseUp(int x, int y);
  275.  
  276. void game_change_window_scale(int d);
  277.  
  278. int is_key_pressed(int mask);
  279. unsigned short rs_rand();
  280.  
  281. #endif // RSGAME_H_INCLUDED
  282.