Subversion Repositories Kolibri OS

Rev

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