/data/eng/settings/menu.dat |
---|
36,6 → 36,7 |
Go-moku /sys/games/gomoku |
Reversi /sys/games/reversi |
Pharaoh's crypt /KolibriOS/games/fara/fara |
Marble Match-3 /KolibriOS/games/marblematch3/marblematch3 |
Sokoban /KolibriOS/games/soko/soko |
#3 **** ARCADES **** |
Tetris /sys/games/tetris |
/data/et/settings/menu.dat |
---|
36,6 → 36,7 |
Go-moku /sys/games/gomoku |
Reversi /sys/games/reversi |
Pharaoh's crypt /KolibriOS/games/fara/fara |
Marble Match-3 /KolibriOS/games/marblematch3/marblematch3 |
Sokoban /KolibriOS/games/soko/soko |
#3 **** ARCADES **** |
Tetris /sys/games/tetris |
/data/it/settings/menu.dat |
---|
36,6 → 36,7 |
Go-moku /sys/games/gomoku |
Reversi /sys/games/reversi |
Pharaoh's crypt /KolibriOS/games/fara/fara |
Marble Match-3 /KolibriOS/games/marblematch3/marblematch3 |
Sokoban /KolibriOS/games/soko/soko |
#3 **** ARCADES **** |
Tetris /sys/games/tetris |
/data/rus/settings/menu.dat |
---|
39,6 → 39,7 |
#3 **** £àë -> ઠ¤ë **** |
ArcanII /sys/games/arcanii |
Pharaoh's crypt /KolibriOS/games/fara/fara |
Marble Match-3 /KolibriOS/games/marblematch3/marblematch3 |
Sokoban /KolibriOS/games/soko/soko |
Red Square /sys/games/rsquare |
¤¥¨¥ /sys/games/padenie |
/data/sp/settings/menu.dat |
---|
36,6 → 36,7 |
Go-moku /sys/games/gomoku |
Reversi /sys/games/reversi |
Pharaoh's crypt /KolibriOS/games/fara/fara |
Marble Match-3 /KolibriOS/games/marblematch3/marblematch3 |
Sokoban /KolibriOS/games/soko/soko |
#3 **** ARCADES **** |
Tetris /sys/games/tetris |
/programs/games/marblematch3/Tupfile.lua |
---|
17,5 → 17,5 |
CFLAGS = CFLAGS .. " -DRS_KOS -D" .. C_LANG .. " " |
compile_gcc{ "system/kolibri.c", "game/rs/rsmicrolibc.c", "game/rs/rsplatform_kos.c", "game/rs/rsmx.c", "game/rsnoise.c", "game/rsgentex.c", "game/rsgame.c", "game/rsgamedraw.c", "game/rskos.c", "game/rsgametext.c", "game/rsgamemenu.c"} |
compile_gcc{ "system/kolibri.c", "game/rs/rsmicrolibc.c", "game/rs/rsplatform_kos.c", "game/rs/rsmx.c", "game/rsnoise.c", "game/rssoundgen.c", "game/rsgentex.c", "game/rsgame.c", "game/rsgamedraw.c", "game/rskos.c", "game/rsgametext.c", "game/rsgamemenu.c"} |
link_gcc ("marblematch3") |
/programs/games/marblematch3/game/rsgame.c |
---|
148,6 → 148,10 |
rskos_snd_create_buffer(&snd->hbuf, snd->data, length_samples); |
}; |
void soundbuf_update(rs_soundbuf_t *snd) { |
rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples); |
}; |
void soundbuf_free(rs_soundbuf_t *snd) { |
snd->status = 0; |
free(snd->data); |
217,21 → 221,27 |
game.loader_counter = 0; |
game.menu_replay_timeout = 0; |
game.process_timer = 0; |
game.sound_index = 0; |
game.need_redraw = 1; |
game.score = 0; |
game.time = 0; |
// game.game_mode = GAME_MODE_RAMPAGE; |
game.selected = 0; |
game.selected_x = game.selected_y = 0; |
game.explosions_count = 0; |
game.tx = 0; |
game.ty = 0; |
game.tz = 0; |
// game.tx = 0; |
// game.ty = 0; |
// game.tz = 0; |
// int i; |
// for (i = 0; i < BULLETS_COUNT; i++) { |
252,8 → 262,8 |
game.keyboard_state = 0; |
game.menu_index = 0; |
game.menu_item_index = 0; |
// game.menu_index = 0; |
// game.menu_item_index = 0; |
}; |
351,18 → 361,28 |
}; |
}; |
if (game.score > 99) { |
game.status = STATUS_MENU; |
game.need_redraw = 1; |
}; |
// if (game.score > 99) { |
// game.status = STATUS_MENU; |
// game.need_redraw = 1; |
// }; |
if (found) { |
game.need_redraw = 1; |
soundbuf_play(&game.sound_explosion[ game.sound_index ]); |
game.sound_index = (game.sound_index+1) % SOUND_EXPLOSION_COUNT; |
}; |
return found; |
}; |
//void game_check_and_explode_rampage() { |
// |
// |
// |
//}; |
void game_fall() { |
int x, y, fall; |
for (x = 0; x < FIELD_WIDTH; x++) { |
394,7 → 414,84 |
game_textures_init_stage2(); |
// Sounds... |
int soundlen = 40555; |
int freqs[SOUND_EXPLOSION_COUNT] = { 440, 523, 587, 698, 783, 880, 1046, 1174 }; |
int i; |
for (i = 0; i < SOUND_EXPLOSION_COUNT; i++) { |
soundbuf_init(&game.sound_explosion[i], soundlen); |
rs_sgen_init(3, soundlen); |
rs_sgen_func_noise(2, 1000); |
rs_sgen_func_phaser(0, 2, 0.9, 15.2 + 1.0*i/SOUND_EXPLOSION_COUNT, 6.0, 3.0, 2000.0, 1.73); |
rs_sgen_func_normalize(0, 1.0); |
rs_sgen_func_sin(1, freqs[i], 110.3); |
rs_sgen_func_sin(2, 1.5*freqs[i], 110.2); |
rs_sgen_func_add(0, 0, 1, 1.0, 0.2); |
rs_sgen_func_add(0, 0, 2, 1.0, 0.2); |
rs_sgen_func_lowpass(2, 0, 1.0, 0.0, 20.0); |
rs_sgen_func_normalize(2, 1.0); |
rs_sgen_wave_out(2); |
memcpy(game.sound_explosion[i].data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2); |
soundbuf_update(&game.sound_explosion[i]); |
rs_sgen_term(); |
}; |
soundlen = 1024; |
soundbuf_init(&game.sound_tick, soundlen); |
// soundbuf_init(&game.sound_tack, soundlen); |
rs_sgen_init(2, soundlen); |
rs_sgen_func_noise(1, 1000); |
rs_sgen_func_highpass(0, 1, 0.05, 0.0, 16.0); |
rs_sgen_func_normalize(0, 1.0); |
rs_sgen_wave_out(0); |
memcpy(game.sound_tick.data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2); |
soundbuf_update(&game.sound_tick); |
// rs_sgen_func_lowpass(0, 1, 0.5, 0.0, 22.0); |
// rs_sgen_func_normalize(0, 1.0); |
// rs_sgen_wave_out(0); |
// memcpy(game.sound_tack.data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2); |
// soundbuf_update(&game.sound_tack); |
rs_sgen_term(); |
soundlen = 123000; |
soundbuf_init(&game.sound_bang, soundlen); |
rs_sgen_init(2, soundlen); |
rs_sgen_func_pm(1, 220.0, 1.2, 1.0, 880.0*4, 1.0 ); |
rs_sgen_func_lowpass(0, 1, 1.0, 0.0, 15.0); |
rs_sgen_func_normalize(0, 1.0); |
rs_sgen_wave_out(0); |
memcpy(game.sound_bang.data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2); |
soundbuf_update(&game.sound_bang); |
soundbuf_init(&game.sound_click, 1024); |
soundbuf_sin(&game.sound_click, 0.25); |
soundbuf_play(&game.sound_bang); // <-- Loaded. Bang! |
game.status = STATUS_MENU; |
game.need_redraw = 1; |
421,16 → 518,39 |
}; |
}; |
if ((game.time+1)/25 != game.time/25) { |
if ((game.time-1)/25 != game.time/25) { |
game.need_redraw = 1; |
if (game.time < 10*25) { |
soundbuf_play(&game.sound_tick); |
}; |
game.time++; |
}; |
game.time--; |
if (game.time < 1) { |
// Game Over |
game.status = STATUS_MENU; |
game.need_redraw = 1; |
soundbuf_play(&game.sound_bang); |
game.menu_replay_timeout = 40; |
}; |
} |
else if (game.status == STATUS_MENU) { |
if (game.menu_replay_timeout > 0) { |
game.menu_replay_timeout--; |
if (game.menu_replay_timeout == 1) { |
game.menu_replay_timeout = 0; |
game.need_redraw = 1; |
}; |
}; |
}; |
game_draw(); |
463,17 → 583,8 |
rs_audio_init(RS_AUDIO_FMT_MONO16, RS_AUDIO_FREQ_16000, 0); |
#endif |
soundbuf_init(&game.sound_test1, 2048); |
// soundbuf_fill(&game.sound_test1, 2, 50); |
soundbuf_sin_fade(&game.sound_test1, 0.7); |
soundbuf_init(&game.sound_test2, 1024); |
//soundbuf_fill(&game.sound_test2, 8, 40); |
soundbuf_sin(&game.sound_test2, 0.48); |
soundbuf_init(&game.sound_test3, 1024); |
//soundbuf_fill(&game.sound_test3, 12, 60); |
soundbuf_sin(&game.sound_test3, 0.24); |
}; |
495,14 → 606,18 |
game_textures_free(); |
int i; |
for (i = 0; i < SOUND_EXPLOSION_COUNT; i++) { |
soundbuf_free(&game.sound_explosion[i]); |
}; |
soundbuf_free(&game.sound_click); |
soundbuf_free(&game.sound_tick); |
// soundbuf_free(&game.sound_tack); |
soundbuf_free(&game.sound_bang); |
soundbuf_free(&game.sound_test1); |
soundbuf_free(&game.sound_test2); |
soundbuf_free(&game.sound_test3); |
}; |
// ------------ #Event Functions ------------ |
540,36 → 655,36 |
}; |
if (game.status == STATUS_MENU) { |
// if (game.status == STATUS_MENU) { |
// |
// switch (key) { |
// case RS_KEY_LEFT: |
// BIT_SET(game.keyboard_state, RS_ARROW_LEFT_MASK); |
// //PlayBuffer(hBuff, 0); |
// break; |
// case RS_KEY_RIGHT: |
// BIT_SET(game.keyboard_state, RS_ARROW_RIGHT_MASK); |
// //StopBuffer(hBuff); |
// break; |
// case RS_KEY_UP: |
// BIT_SET(game.keyboard_state, RS_ARROW_UP_MASK); |
// menu_cursor_up(); |
// //ResetBuffer(hBuff, 0); |
// break; |
// case RS_KEY_DOWN: |
// BIT_SET(game.keyboard_state, RS_ARROW_DOWN_MASK); |
// menu_cursor_down(); |
// break; |
// case RS_KEY_RETURN: |
// menu_cursor_click(); |
// break; |
// case RS_KEY_ESCAPE: |
// menu_open(0); |
// break; |
// }; |
// |
// }; |
switch (key) { |
case RS_KEY_LEFT: |
BIT_SET(game.keyboard_state, RS_ARROW_LEFT_MASK); |
//PlayBuffer(hBuff, 0); |
break; |
case RS_KEY_RIGHT: |
BIT_SET(game.keyboard_state, RS_ARROW_RIGHT_MASK); |
//StopBuffer(hBuff); |
break; |
case RS_KEY_UP: |
BIT_SET(game.keyboard_state, RS_ARROW_UP_MASK); |
menu_cursor_up(); |
//ResetBuffer(hBuff, 0); |
break; |
case RS_KEY_DOWN: |
BIT_SET(game.keyboard_state, RS_ARROW_DOWN_MASK); |
menu_cursor_down(); |
break; |
case RS_KEY_RETURN: |
menu_cursor_click(); |
break; |
case RS_KEY_ESCAPE: |
menu_open(0); |
break; |
}; |
}; |
if (game.status == STATUS_PLAYING) { |
577,6 → 692,7 |
if (key == RS_KEY_SPACE) { |
game.score = 101; |
}; |
#endif |
if (key == RS_KEY_ESCAPE) { |
586,10 → 702,17 |
game.need_redraw = 1; |
}; |
if (key == RS_KEY_A) { |
soundbuf_play(&game.sound_bang); |
}; |
// if (key == RS_KEY_Z) { |
// soundbuf_play(&game.sound_tack); |
// }; |
}; |
}; |
void GameKeyUp(int key) { |
switch (key) { |
621,23 → 744,31 |
void GameMouseDown(int x, int y) { |
x = (signed short) x; |
y = (signed short) y; |
game.need_redraw = 1; |
game.tx = x; |
game.ty = y; |
// game.tx = x; |
// game.ty = y; |
if (game.status == STATUS_MENU) { |
if ( (!game.menu_replay_timeout) && (y > 0) ) { |
int i; |
for (i = 0; i < FIELD_LENGTH; i++) { |
game.field[i] = (unsigned char) (0.99 * fabs(rs_noise(i, seed*7 + 10)) * CRYSTALS_COUNT) | CRYSTAL_VISIBLE_BIT; |
}; |
game.sound_index = 0; |
game.selected = 0; |
game.time = 0; |
game.time = 25*60 - 1; |
game.score = 0; |
game.status = STATUS_PLAYING; |
}; |
return; |
}; |
655,11 → 786,15 |
//FIELD_ITEM(field_x, field_y) = 0; |
// if (game.game_mode == GAME_MODE_MATCH3) { |
if (!game.selected) { |
game.selected = 1; |
game.selected_x = field_x; |
game.selected_y = field_y; |
soundbuf_play(&game.sound_click); |
} |
else { |
682,6 → 817,7 |
} |
else { |
soundbuf_play(&game.sound_click); |
if ( (game.selected_x != field_x) && (game.selected_y != field_y) ) { |
game.selected_x = field_x; |
game.selected_y = field_y; |
688,16 → 824,21 |
} |
else { |
game.selected = 0; |
}; |
}; |
}; |
// int i; |
// for (i = field_y; i > 0; i--) { |
// FIELD_ITEM(field_x, i) = FIELD_ITEM(field_x, (i-1) ); |
// } else if (game.mode == GAME_MODE_RAMPAGE) { |
// |
// game.selected = 1; |
// game.selected_x = field_x; |
// game.selected_y = field_y; |
// |
// game_check_and_explode_rampage(); |
// |
// }; |
// FIELD_ITEM(field_x, 0) = 0; |
}; |
712,10 → 853,10 |
switch (i) { |
case 0: |
soundbuf_play(&game.sound_test2); |
// soundbuf_play(&game.sound_test2); |
break; |
case 1: |
soundbuf_play(&game.sound_test3); |
// soundbuf_play(&game.sound_test3); |
break; |
}; |
/programs/games/marblematch3/game/rsgame.h |
---|
116,11 → 116,11 |
#define GAME_SHOOT_PERIOD 3 |
#define FIELD_WIDTH 10 |
#define FIELD_WIDTH 11 |
#define FIELD_HEIGHT 8 |
#define FIELD_LENGTH (FIELD_WIDTH * FIELD_HEIGHT) |
#define CRYSTAL_SIZE 40 |
#define FIELD_X0 56 |
#define FIELD_X0 36 |
#define FIELD_Y0 128 |
#define FIELD_ITEM(x,y) (game.field[(y)*FIELD_WIDTH+(x)]) |
137,6 → 137,11 |
#define ANIMATION_PROCESS_TIMER_LIMIT 3 |
#define SOUND_EXPLOSION_COUNT 8 |
//#define GAME_MODE_MATCH3 0 |
//#define GAME_MODE_RAMPAGE 1 |
typedef struct rs_game_t { |
rs_texture_t framebuffer; |
unsigned char *bgr_framebuffer; // 24-bit BGRBGRBGR... for direct drawing |
156,24 → 161,27 |
rs_texture_t tex_font[64*FONTS_COUNT]; |
rs_soundbuf_t sound_test1; |
rs_soundbuf_t sound_test2; |
rs_soundbuf_t sound_test3; |
int sound_index; |
rs_soundbuf_t sound_explosion[SOUND_EXPLOSION_COUNT]; |
rs_soundbuf_t sound_tick; |
// rs_soundbuf_t sound_tack; |
rs_soundbuf_t sound_click; |
rs_soundbuf_t sound_bang; |
int status; |
// int game_mode; |
int menu_replay_timeout; |
unsigned int keyboard_state; |
int menu_index; |
int menu_item_index; |
// int menu_index; |
// int menu_item_index; |
// int window_scale; |
int process_timer; |
int tx; |
int ty; |
int tz; |
// int tx; |
// int ty; |
// int tz; |
unsigned char *field; |
/programs/games/marblematch3/game/rsgamedraw.c |
---|
28,7 → 28,6 |
texture_draw(&game.framebuffer, &game.tex_bg, 0, 0, DRAW_MODE_REPLACE); |
if (game.menu_index == MENU_MAIN) { |
if (game.status == STATUS_LOADING) { |
game_textout_at_center( 0, 240, 0, L_LOADING ); |
38,30 → 37,35 |
texture_draw( &game.framebuffer, &game.tex_logo, 0, 50, DRAW_MODE_ALPHA ); |
if (game.time) { |
if (game.score) { |
game_textout_at_center( 0, 230, 0, L_LEVEL_PASSED ); |
game_textout_at_center( -3, 230-2, 3, L_LEVEL_PASSED ); |
char s[] = L_TIME; |
int time_sec = game.time / 25; |
char *str_num = strchr(s, 'x'); |
str_num[0] = '0' + (( time_sec / 100 ) % 10); |
str_num[1] = '0' + (( time_sec / 10 ) % 10); |
str_num[2] = '0' + (( time_sec / 1 ) % 10); |
game_textout_at_center( 0, 230, 0, L_GAME_OVER ); |
game_textout_at_center( -3, 230-2, 3, L_GAME_OVER ); |
char s[] = L_SCORE; |
char *str_num; |
str_num = strchr(s, 'x'); |
str_num[0] = '0' + ( (game.score / 100) % 10); |
str_num[1] = '0' + ( (game.score / 10) % 10); |
str_num[2] = '0' + ( (game.score / 1) % 10); |
game_textout_at_center( 0, 260, 0, s ); |
game_textout_at_center( -3, 260-2, 3, s ); |
}; |
if (!game.menu_replay_timeout) { |
game_textout_at_center( 0, 300, 0, L_START ); |
game_textout_at_center( -3, 300-2, 3, L_START ); |
}; |
}; |
game_textout( 2, GAME_HEIGHT-10, 2, L_BOTTOM_LINE_DEVELOPER_INFO); |
}; |
} |
else { |
94,16 → 98,33 |
}; |
int blink_visible = 0; |
if (game.time > 10*25) { |
blink_visible = 1; |
} |
else if (game.time > 5*25) { |
blink_visible = (game.time / 8) & 1; |
continue_need_redraw = 1; |
} |
else { |
blink_visible = (game.time / 4) & 1; |
continue_need_redraw = 1; |
}; |
char *str_num; |
if (blink_visible) { |
char str[] = L_TIME; |
int time_sec = game.time / 25; |
char *str_num = strchr(str, 'x'); |
str_num[0] = '0' + ( (time_sec / 100) % 10); |
str_num[1] = '0' + ( (time_sec / 10) % 10); |
str_num[2] = '0' + ( (time_sec / 1) % 10); |
str_num = strchr(str, 'x'); |
str_num[0] = '0' + ( (time_sec / 10) % 10); |
str_num[1] = '0' + ( (time_sec / 1) % 10); |
// str_num[2] = '0' + ( (time_sec / 1) % 10); |
game_textout( 56+3, 32+2, 0, str ); |
// game_textout( 56-1, 32-1, 0, str ); |
game_textout( 56, 32, 3, str ); |
}; |
char sstr[] = L_SCORE; |
/programs/games/marblematch3/game/rsgamemenu.c |
---|
57,47 → 57,47 |
}; |
void menu_cursor_down() { |
int new_index = game.menu_item_index+1; |
while ( (menu_titles[game.menu_index][new_index]) ) { |
if ((menu_titles[game.menu_index][new_index][0] != ' ')) { |
game.menu_item_index = new_index; |
game_ding(1); |
return; |
}; |
new_index++; |
}; |
}; |
//void menu_cursor_down() { |
// int new_index = game.menu_item_index+1; |
// while ( (menu_titles[game.menu_index][new_index]) ) { |
// if ((menu_titles[game.menu_index][new_index][0] != ' ')) { |
// game.menu_item_index = new_index; |
// game_ding(1); |
// return; |
// }; |
// new_index++; |
// }; |
//}; |
// |
//void menu_cursor_up() { |
// int new_index = game.menu_item_index-1; |
// while ( new_index+1 ) { |
// if ((menu_titles[game.menu_index][new_index][0] != ' ')) { |
// game.menu_item_index = new_index; |
// game_ding(1); |
// return; |
// }; |
// new_index--; |
// }; |
//}; |
void menu_cursor_up() { |
int new_index = game.menu_item_index-1; |
while ( new_index+1 ) { |
if ((menu_titles[game.menu_index][new_index][0] != ' ')) { |
game.menu_item_index = new_index; |
game_ding(1); |
return; |
}; |
new_index--; |
}; |
}; |
//void menu_open(int i) { |
// |
// game.menu_index = i; |
// |
// game.menu_item_index = -1; |
// // (menu_cursor_down without sound) |
// int new_index = game.menu_item_index+1; |
// while ( (menu_titles[game.menu_index][new_index]) ) { |
// if ((menu_titles[game.menu_index][new_index][0] != ' ')) { |
// game.menu_item_index = new_index; |
// return; |
// }; |
// new_index++; |
// }; |
// |
//}; |
void menu_open(int i) { |
game.menu_index = i; |
game.menu_item_index = -1; |
// (menu_cursor_down without sound) |
int new_index = game.menu_item_index+1; |
while ( (menu_titles[game.menu_index][new_index]) ) { |
if ((menu_titles[game.menu_index][new_index][0] != ' ')) { |
game.menu_item_index = new_index; |
return; |
}; |
new_index++; |
}; |
}; |
void menu_cursor_click() { |
// |
107,8 → 107,8 |
void menu_action_start() { |
game.status = STATUS_PLAYING; |
game.tx = GAME_WIDTH/2 - 50; |
game.ty = GAME_HEIGHT/2 - 10; |
// game.tx = GAME_WIDTH/2 - 50; |
// game.ty = GAME_HEIGHT/2 - 10; |
}; |
/programs/games/marblematch3/game/rsgentex.c |
---|
285,7 → 285,7 |
////// }; |
////// }; |
DEBUG10f("\n\nmax val %.3f \nmin %.3f \n", max_val, min_val); |
// DEBUG10f("\n\nmax val %.3f \nmin %.3f \n", max_val, min_val); |
}; |
/programs/games/marblematch3/game/strings_en.h |
---|
12,10 → 12,10 |
#define L_START "CLICK T0 5TART" |
#define L_TIME "TIME: xxx" |
#define L_SCORE "5C0RE: xxx 0F 100" |
#define L_TIME "TIME: 0:xx" |
#define L_SCORE "5C0RE: xxx" |
#define L_LEVEL_PASSED "LEVEL PA55ED" |
#define L_GAME_OVER "GAME 0VER" |
#define L_BOTTOM_LINE_DEVELOPER_INFO "DEVELOPER: ROMAN SHUVALOV` TOGLIATTI_ 2014" |
/programs/games/marblematch3/game/strings_ru.h |
---|
12,10 → 12,10 |
#define L_START "HA4AT] igPY" |
#define L_TIME "BPEMa: xxx" |
#define L_SCORE "04Ki: xxx i3 100" |
#define L_TIME "BPEMa: 0:xx " |
#define L_SCORE "04Ki: xxx" |
#define L_LEVEL_PASSED "YP0BEH] nP0^dEH" |
#define L_GAME_OVER "igPA 0K0H4EHA" |
#define L_BOTTOM_LINE_DEVELOPER_INFO "PA3PAb0T4iK: P0MAH hYBAl0B` T0l]aTTi_ 2014" |