From b33d4e9ae51f7b5fcd4add3f9e7a6fb966f67d76 Mon Sep 17 00:00:00 2001 From: Sebastian Leonhardt Date: Fri, 8 Jan 2016 01:05:36 +0100 Subject: added xrick game original xrick code by 'BigOrno' at: http://www.bigorno.net/xrick/ Rockbox port, plus bugfixes at: https://github.com/pierluigi-vicinanza/xrick Change-Id: Id83928bc2539901b0221692f65cbca41389c58e7 --- apps/plugins/xrick/devtools.c | 248 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 apps/plugins/xrick/devtools.c (limited to 'apps/plugins/xrick/devtools.c') diff --git a/apps/plugins/xrick/devtools.c b/apps/plugins/xrick/devtools.c new file mode 100644 index 0000000..f33e118 --- /dev/null +++ b/apps/plugins/xrick/devtools.c @@ -0,0 +1,248 @@ +/* + * xrick/devtools.c + * + * Copyright (C) 1998-2002 BigOrno (bigorno@bigorno.net). + * Copyright (C) 2008-2014 Pierluigi Vicinanza. + * All rights reserved. + * + * The use and distribution terms for this software are contained in the file + * named README, which can be found in the root of this distribution. By + * using this software in any fashion, you are agreeing to be bound by the + * terms of this license. + * + * You must not remove this notice, or any other, from this software. + */ + +#include "xrick/config.h" + +#ifdef ENABLE_DEVTOOLS + +#include "xrick/devtools.h" +#include "xrick/game.h" +#include "xrick/control.h" +#include "xrick/screens.h" +#include "xrick/draw.h" +#include "xrick/data/sprites.h" +#include "xrick/maps.h" +#include "xrick/system/system.h" + +/* + * DevTools + */ + +U8 +devtools_run(void) +{ + static U8 seq = 0; + static U8 pos = 0; + static U8 pos2 = 0; + U8 i, j, k, l; + U8 s[128]; + + if (seq == 0) { + sysvid_clear(); + game_rects = &draw_SCREENRECT; +#ifdef GFXPC + draw_filter = 0xffff; +#endif + seq = 1; + } + + switch (seq) { + case 1: /* draw tiles */ + sysvid_clear(); + draw_tilesBank = 0; + sys_snprintf(s, sizeof(s), "TILES@BANK@%d\376", pos); + draw_setfb(4, 4); + draw_tilesListImm(s); + k = 0; + for (i = 0; i < 0x10; i++) { + draw_setfb(80 + i * 0x0a, 14); + draw_tile((i<10?0x30:'A'-10) + i); + draw_setfb(64, 30 + i * 0x0a); + draw_tile((i<10?0x30:'A'-10) + i); + } + draw_tilesBank = pos; + for (i = 0; i < 0x10; i++) + for (j = 0; j < 0x10; j++) { + draw_setfb(80 + j * 0x0a, 30 + i * 0x0a); + draw_tile(k++); + } + seq = 10; + break; + case 10: /* wait for key pressed */ + if (control_test(Control_FIRE)) + seq = 98; + if (control_test(Control_UP)) + seq = 12; + if (control_test(Control_DOWN)) + seq = 13; + if (control_test(Control_RIGHT)) + seq = 11; + break; + case 11: /* wait for key released */ + if (!(control_test(Control_RIGHT))) { + pos = 0; + seq = 21; + } + break; + case 12: /* wait for key released */ + if (!(control_test(Control_UP))) { + if (pos < 4) pos++; + seq = 1; + } + break; + case 13: /* wait for key released */ + if (!(control_test(Control_DOWN))) { + if (pos > 0) pos--; + seq = 1; + } + break; + case 21: /* draw sprites */ + sysvid_clear(); + draw_tilesBank = 0; + sys_snprintf(s, sizeof(s), "SPRITES\376"); + draw_setfb(4, 4); + draw_tilesListImm(s); + for (i = 0; i < 8; i++) { + draw_setfb(0x08 + 0x20 + i * 0x20, 0x30 - 26); + draw_tile((i<10?0x30:'A'-10) + i); + draw_setfb(0x08 + 0x20 + i * 0x20, 0x30 - 16); + draw_tile((i+8<10?0x30:'A'-10) + i+8); + } + for (i = 0; i < 4; i++) { + k = pos + i * 8; + draw_setfb(0x20 - 16, 0x08 + 0x30 + i * 0x20); + j = k%16; + k /= 16; + draw_tile((j<10?0x30:'A'-10) + j); + draw_setfb(0x20 - 26, 0x08 + 0x30 + i * 0x20); + j = k%16; + draw_tile((j<10?0x30:'A'-10) + j); + } + k = pos; + for (i = 0; i < 4; i++) + for (j = 0; j < 8; j++) { + draw_sprite(k++, 0x20 + j * 0x20, 0x30 + i * 0x20); + } + seq = 30; + break; + case 30: /* wait for key pressed */ + if (control_test(Control_FIRE)) + seq = 98; + if (control_test(Control_UP)) + seq = 32; + if (control_test(Control_DOWN)) + seq = 33; + if (control_test(Control_LEFT)) + seq = 31; + if (control_test(Control_RIGHT)) + seq = 40; + break; + case 31: /* wait for key released */ + if (!(control_test(Control_LEFT))) { + pos = 0; + seq = 1; + } + break; + case 32: /* wait for key released */ + if (!(control_test(Control_UP))) { + if (pos < sprites_nbr_sprites - 32) pos += 32; + seq = 21; + } + break; + case 33: /* wait for key released */ + if (!(control_test(Control_DOWN))) { + if (pos > 0) pos -= 32; + seq = 21; + } + break; + case 40: + sysvid_clear(); +#ifdef GFXPC + if (pos2 == 0) pos2 = 2; +#endif +#ifdef GFXST + if (pos2 == 0) pos2 = 1; +#endif + sys_snprintf(s, sizeof(s), "BLOCKS@%#04X@TO@%#04X@WITH@BANK@%d\376", + pos, pos + 4*8-1, pos2); + draw_setfb(4, 4); + draw_tilesBank = 0; + draw_tilesListImm(s); + draw_tilesBank = pos2; + for (l = 0; l < 8; l++) + for (k = 0; k < 4; k++) + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) { + draw_setfb(20 + j * 8 + l * 36, 30 + i * 8 + k * 36); + draw_tile(map_blocks[pos + l + k * 8][i * 4 + j]); + } + seq = 41; + break; + case 41: + if (control_test(Control_FIRE)) + seq = 98; + if (control_test(Control_UP)) + seq = 42; + if (control_test(Control_DOWN)) + seq = 43; + if (control_test(Control_LEFT)) + seq = 44; + if (control_test(Control_PAUSE)) + seq = 45; + break; + case 42: + if (!(control_test(Control_UP))) { + if (pos < map_nbr_blocks - 8*4) pos += 8 * 4; + seq = 40; + } + break; + case 43: + if (!(control_test(Control_DOWN))) { + if (pos > 0) pos -= 8 * 4; + seq = 40; + } + break; + case 44: + if (!(control_test(Control_LEFT))) { + pos = 0; + pos2 = 0; + seq = 21; + } + break; + case 45: + if (!(control_test(Control_PAUSE))) { +#ifdef GFXPC + if (pos2 == 2) pos2 = 3; + else pos2 = 2; +#endif +#ifdef GFXST + if (pos2 == 1) pos2 = 2; + else pos2 = 1; +#endif + seq = 40; + } + break; + case 98: /* wait for key released */ + if (!(control_test(Control_FIRE))) + seq = 99; + break; + } + + if (control_test(Control_EXIT)) /* check for exit request */ + return SCREEN_EXIT; + + if (seq == 99) { /* we're done */ + sysvid_clear(); + seq = 0; + return SCREEN_DONE; + } + + return SCREEN_RUNNING; +} + +#endif /* ENABLE_DEVTOOLS */ + +/* eof */ + -- cgit v1.1