Subversion Repositories Kolibri OS

Rev

Rev 5243 | 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.  
  12. #include "rskos.h"
  13. #include "rs/rsplatform.h"
  14. //#include "rs/rstexture.h"
  15. //#include "rs/rsshader.h"
  16. //#include "rs/rsgl.h"
  17. #include "rs/rsdebug.h"
  18. #include "rs/rsbits.h"
  19.  
  20. //#include "rs/rskeyboard.h"
  21.  
  22. //#include "rs/rsaudio.h"
  23.  
  24. //#include "rs/rsfile.h"
  25.  
  26. //#include "rs/rsvbo.h"
  27. //#include "rs/rsfbo.h"
  28.  
  29. //#include "rs/rsthread.h"
  30.  
  31. #include "rs/rsmx.h"
  32.  
  33.  
  34.  
  35.  
  36. #define GAME_LANG_EN    0
  37. #define GAME_LANG_RU    1
  38.  
  39. #define GAME_WIDTH  320
  40. #define GAME_HEIGHT 180
  41.  
  42.  
  43. typedef struct {
  44.     unsigned int status;
  45.     int w;
  46.     int h;
  47.     unsigned char *data; // BGRA BGRA
  48. } rs_texture_t;
  49.  
  50.  
  51. // for little-endian
  52. typedef union color_t {
  53.     int d;                 // 0x44332211 (ARGB)
  54.     struct {
  55.         unsigned char b; // 0x11
  56.         unsigned char g; // 0x22
  57.         unsigned char r; // 0x33
  58.         unsigned char a; // 0x44
  59.     };
  60. } color_t;
  61.  
  62. // for little-endian (ARGB)
  63. #define COLOR_BLACK     0xFF000000
  64. #define COLOR_TRANSPARENT   0x00000000
  65. #define COLOR_DARK_RED  0xFF660000
  66.  
  67.  
  68.  
  69. void texture_init(rs_texture_t *tex, int w, int h);
  70. void texture_free(rs_texture_t *tex);
  71. void texture_clear(rs_texture_t *tex, unsigned int color);
  72. void texture_draw(rs_texture_t *dest, rs_texture_t *src, int x, int y, int mode);
  73. void texture_draw_vline(rs_texture_t *tex, int x, int y, int l, unsigned int color);
  74. void texture_draw_hline(rs_texture_t *tex, int x, int y, int l, unsigned int color);
  75. void texture_set_pixel(rs_texture_t *tex, int x, int y, unsigned int color);
  76.  
  77. unsigned char clamp_byte(int value);
  78.  
  79. #define DRAW_MODE_REPLACE   0
  80. #define DRAW_MODE_ADDITIVE  1
  81. #define DRAW_MODE_ALPHA     2
  82.  
  83. #define DRAW_MODE_MASK      0x0000FFFF
  84. #define DRAW_TILED_FLAG     0x00010000
  85.  
  86.  
  87.  
  88. typedef struct {
  89.     unsigned int status;
  90.     int length_samples;
  91.     SNDBUF hbuf;
  92.     signed short *data;
  93. } rs_soundbuf_t;
  94.  
  95. void soundbuf_init(rs_soundbuf_t *snd, int length);
  96. void soundbuf_free(rs_soundbuf_t *snd);
  97. void soundbuf_fill(rs_soundbuf_t *snd, int amp, int freq_div);
  98. void soundbuf_sin(rs_soundbuf_t *snd, float freq);
  99. void soundbuf_sin_fade(rs_soundbuf_t *snd, float freq);
  100. void soundbuf_play(rs_soundbuf_t *snd);
  101. void soundbuf_stop(rs_soundbuf_t *snd);
  102.  
  103. // Game Registry
  104.  
  105. #define ROCKS_COUNT 3
  106. #define FONTS_COUNT 4
  107.  
  108. #define STATUS_MENU     0
  109. #define STATUS_PLAYING  1
  110. #define STATUS_PAUSED   2
  111.  
  112.  
  113. #define RS_ARROW_LEFT_MASK      0x01
  114. #define RS_ARROW_DOWN_MASK      0x02
  115. #define RS_ARROW_UP_MASK        0x04
  116. #define RS_ARROW_RIGHT_MASK     0x08
  117. #define RS_ATTACK_KEY_MASK  0x10
  118.  
  119. #define BULLETS_COUNT   8
  120.  
  121. #define GAME_SHOOT_PERIOD   3
  122.  
  123. typedef struct rs_game_t {
  124.     rs_texture_t framebuffer;
  125.     unsigned char *scaled_framebuffer; // 24-bit BGRBGRBGR... for direct drawing
  126.    
  127.     rs_texture_t tex;
  128.    
  129.     rs_texture_t tex_clouds;
  130.     rs_texture_t tex_ground;
  131.    
  132.     rs_texture_t tex_ship[4];
  133.     rs_texture_t tex_rocks[ROCKS_COUNT];
  134.    
  135.     rs_texture_t tex_font[64*FONTS_COUNT];
  136.    
  137.     rs_texture_t tex_gui_line;
  138.    
  139.    
  140.     rs_soundbuf_t sound_test1;
  141.     rs_soundbuf_t sound_test2;
  142.     rs_soundbuf_t sound_test3;
  143.    
  144.     int status;
  145.    
  146.     unsigned int keyboard_state;
  147.    
  148.     int menu_index;
  149.     int menu_item_index;
  150.    
  151.     int window_scale;
  152.    
  153.     int tx;
  154.     int ty;
  155.     int tz;
  156.    
  157.     int bullet_x[BULLETS_COUNT];
  158.     int bullet_y[BULLETS_COUNT];
  159.     int bullet_index;
  160.     int shoot_delay;
  161.     int shoot_keypressed;
  162.    
  163. } rs_game_t;
  164.  
  165. extern rs_game_t game;
  166. void game_reg_init();
  167.  
  168. /*  __
  169.    /cc\
  170.   /aaaa\
  171.  |kkkkkk|  <-- Easter Egg
  172.   \eeee/
  173. ------------------------------- */
  174.  
  175. void GameProcess();
  176.  
  177. void game_ding(int i);
  178.  
  179. void GameInit();
  180. void GameTerm();
  181.  
  182. void GameKeyDown(int key, int first);
  183. void GameKeyUp(int key);
  184.  
  185. void game_change_window_scale(int d);
  186.  
  187. #endif // RSGAME_H_INCLUDED
  188.