forked from KolibriOS/kolibrios
188 lines
3.7 KiB
C
188 lines
3.7 KiB
C
|
#ifndef RSGAME_H_INCLUDED
|
||
|
#define RSGAME_H_INCLUDED
|
||
|
|
||
|
/*
|
||
|
|
||
|
Heliothryx
|
||
|
Game by Roman Shuvalov
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "rskos.h"
|
||
|
#include "rs/rsplatform.h"
|
||
|
//#include "rs/rstexture.h"
|
||
|
//#include "rs/rsshader.h"
|
||
|
//#include "rs/rsgl.h"
|
||
|
#include "rs/rsdebug.h"
|
||
|
#include "rs/rsbits.h"
|
||
|
|
||
|
//#include "rs/rskeyboard.h"
|
||
|
|
||
|
//#include "rs/rsaudio.h"
|
||
|
|
||
|
//#include "rs/rsfile.h"
|
||
|
|
||
|
//#include "rs/rsvbo.h"
|
||
|
//#include "rs/rsfbo.h"
|
||
|
|
||
|
//#include "rs/rsthread.h"
|
||
|
|
||
|
#include "rs/rsmx.h"
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define GAME_LANG_EN 0
|
||
|
#define GAME_LANG_RU 1
|
||
|
|
||
|
#define GAME_WIDTH 320
|
||
|
#define GAME_HEIGHT 180
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
unsigned int status;
|
||
|
int w;
|
||
|
int h;
|
||
|
unsigned char *data; // BGRA BGRA
|
||
|
} rs_texture_t;
|
||
|
|
||
|
|
||
|
// for little-endian
|
||
|
typedef union color_t {
|
||
|
int d; // 0x44332211 (ARGB)
|
||
|
struct {
|
||
|
unsigned char b; // 0x11
|
||
|
unsigned char g; // 0x22
|
||
|
unsigned char r; // 0x33
|
||
|
unsigned char a; // 0x44
|
||
|
};
|
||
|
} color_t;
|
||
|
|
||
|
// for little-endian (ARGB)
|
||
|
#define COLOR_BLACK 0xFF000000
|
||
|
#define COLOR_TRANSPARENT 0x00000000
|
||
|
#define COLOR_DARK_RED 0xFF660000
|
||
|
|
||
|
|
||
|
|
||
|
void texture_init(rs_texture_t *tex, int w, int h);
|
||
|
void texture_free(rs_texture_t *tex);
|
||
|
void texture_clear(rs_texture_t *tex, unsigned int color);
|
||
|
void texture_draw(rs_texture_t *dest, rs_texture_t *src, int x, int y, int mode);
|
||
|
void texture_draw_vline(rs_texture_t *tex, int x, int y, int l, unsigned int color);
|
||
|
void texture_draw_hline(rs_texture_t *tex, int x, int y, int l, unsigned int color);
|
||
|
void texture_set_pixel(rs_texture_t *tex, int x, int y, unsigned int color);
|
||
|
|
||
|
unsigned char clamp_byte(int value);
|
||
|
|
||
|
#define DRAW_MODE_REPLACE 0
|
||
|
#define DRAW_MODE_ADDITIVE 1
|
||
|
#define DRAW_MODE_ALPHA 2
|
||
|
|
||
|
#define DRAW_MODE_MASK 0x0000FFFF
|
||
|
#define DRAW_TILED_FLAG 0x00010000
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
unsigned int status;
|
||
|
int length_samples;
|
||
|
SNDBUF hbuf;
|
||
|
signed short *data;
|
||
|
} rs_soundbuf_t;
|
||
|
|
||
|
void soundbuf_init(rs_soundbuf_t *snd, int length);
|
||
|
void soundbuf_free(rs_soundbuf_t *snd);
|
||
|
void soundbuf_fill(rs_soundbuf_t *snd, int amp, int freq_div);
|
||
|
void soundbuf_sin(rs_soundbuf_t *snd, float freq);
|
||
|
void soundbuf_sin_fade(rs_soundbuf_t *snd, float freq);
|
||
|
void soundbuf_play(rs_soundbuf_t *snd);
|
||
|
void soundbuf_stop(rs_soundbuf_t *snd);
|
||
|
|
||
|
// Game Registry
|
||
|
|
||
|
#define ROCKS_COUNT 3
|
||
|
#define FONTS_COUNT 4
|
||
|
|
||
|
#define STATUS_MENU 0
|
||
|
#define STATUS_PLAYING 1
|
||
|
#define STATUS_PAUSED 2
|
||
|
|
||
|
|
||
|
#define RS_ARROW_LEFT_MASK 0x01
|
||
|
#define RS_ARROW_DOWN_MASK 0x02
|
||
|
#define RS_ARROW_UP_MASK 0x04
|
||
|
#define RS_ARROW_RIGHT_MASK 0x08
|
||
|
#define RS_ATTACK_KEY_MASK 0x10
|
||
|
|
||
|
#define BULLETS_COUNT 8
|
||
|
|
||
|
#define GAME_SHOOT_PERIOD 3
|
||
|
|
||
|
typedef struct rs_game_t {
|
||
|
rs_texture_t framebuffer;
|
||
|
unsigned char *scaled_framebuffer; // 24-bit BGRBGRBGR... for direct drawing
|
||
|
|
||
|
rs_texture_t tex;
|
||
|
|
||
|
rs_texture_t tex_clouds;
|
||
|
rs_texture_t tex_ground;
|
||
|
|
||
|
rs_texture_t tex_ship[4];
|
||
|
rs_texture_t tex_rocks[ROCKS_COUNT];
|
||
|
|
||
|
rs_texture_t tex_font[64*FONTS_COUNT];
|
||
|
|
||
|
rs_texture_t tex_gui_line;
|
||
|
|
||
|
|
||
|
rs_soundbuf_t sound_test1;
|
||
|
rs_soundbuf_t sound_test2;
|
||
|
rs_soundbuf_t sound_test3;
|
||
|
|
||
|
int status;
|
||
|
|
||
|
unsigned int keyboard_state;
|
||
|
|
||
|
int menu_index;
|
||
|
int menu_item_index;
|
||
|
|
||
|
int window_scale;
|
||
|
|
||
|
int tx;
|
||
|
int ty;
|
||
|
int tz;
|
||
|
|
||
|
int bullet_x[BULLETS_COUNT];
|
||
|
int bullet_y[BULLETS_COUNT];
|
||
|
int bullet_index;
|
||
|
int shoot_delay;
|
||
|
int shoot_keypressed;
|
||
|
|
||
|
} rs_game_t;
|
||
|
|
||
|
extern rs_game_t game;
|
||
|
void game_reg_init();
|
||
|
|
||
|
/* __
|
||
|
/cc\
|
||
|
/aaaa\
|
||
|
|kkkkkk| <-- Easter Egg
|
||
|
\eeee/
|
||
|
------------------------------- */
|
||
|
|
||
|
void GameProcess();
|
||
|
|
||
|
void game_ding(int i);
|
||
|
|
||
|
void GameInit();
|
||
|
void GameTerm();
|
||
|
|
||
|
void GameKeyDown(int key, int first);
|
||
|
void GameKeyUp(int key);
|
||
|
|
||
|
void game_change_window_scale(int d);
|
||
|
|
||
|
#endif // RSGAME_H_INCLUDED
|