diff options
author | Sebastian Leonhardt <sebastian.leonhardt@web.de> | 2016-01-08 01:05:36 +0100 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2024-06-30 17:24:16 -0400 |
commit | 102c3742487dba76ec72d5f56a2c3041344b2d68 (patch) | |
tree | 4931ad34d2cc0bac56d9984b9ead355d012ad63a /apps/plugins/xrick/devtools.c | |
parent | 6f1e67e5e318ba2fd0f5ec1892c7b6633ec6521c (diff) | |
download | rockbox-102c3742487dba76ec72d5f56a2c3041344b2d68.tar.gz rockbox-102c3742487dba76ec72d5f56a2c3041344b2d68.zip |
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
Further changes:
* Additonal fixes from g#3026
* Port to modern plugin API
* Add Pluginlib keymap fallback
* Support all >1bpp screens
* Fix build warnings in miniz
* Better error message when resources are missing
Change-Id: Id83928bc2539901b0221692f65cbca41389c58e7
Diffstat (limited to 'apps/plugins/xrick/devtools.c')
-rw-r--r-- | apps/plugins/xrick/devtools.c | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/apps/plugins/xrick/devtools.c b/apps/plugins/xrick/devtools.c new file mode 100644 index 0000000000..56fd5a7106 --- /dev/null +++ b/apps/plugins/xrick/devtools.c | |||
@@ -0,0 +1,247 @@ | |||
1 | /* | ||
2 | * xrick/devtools.c | ||
3 | * | ||
4 | * Copyright (C) 1998-2002 BigOrno (bigorno@bigorno.net). | ||
5 | * Copyright (C) 2008-2014 Pierluigi Vicinanza. | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * The use and distribution terms for this software are contained in the file | ||
9 | * named README, which can be found in the root of this distribution. By | ||
10 | * using this software in any fashion, you are agreeing to be bound by the | ||
11 | * terms of this license. | ||
12 | * | ||
13 | * You must not remove this notice, or any other, from this software. | ||
14 | */ | ||
15 | |||
16 | #include "xrick/config.h" | ||
17 | |||
18 | #ifdef ENABLE_DEVTOOLS | ||
19 | |||
20 | #include "xrick/devtools.h" | ||
21 | #include "xrick/game.h" | ||
22 | #include "xrick/control.h" | ||
23 | #include "xrick/screens.h" | ||
24 | #include "xrick/draw.h" | ||
25 | #include "xrick/data/sprites.h" | ||
26 | #include "xrick/maps.h" | ||
27 | #include "xrick/system/system.h" | ||
28 | |||
29 | /* | ||
30 | * DevTools | ||
31 | */ | ||
32 | |||
33 | U8 | ||
34 | devtools_run(void) | ||
35 | { | ||
36 | static U8 seq = 0; | ||
37 | static U8 pos = 0; | ||
38 | static U8 pos2 = 0; | ||
39 | U8 i, j, k, l; | ||
40 | U8 s[128]; | ||
41 | |||
42 | if (seq == 0) { | ||
43 | sysvid_clear(); | ||
44 | game_rects = &draw_SCREENRECT; | ||
45 | #ifdef GFXPC | ||
46 | draw_filter = 0xffff; | ||
47 | #endif | ||
48 | seq = 1; | ||
49 | } | ||
50 | |||
51 | switch (seq) { | ||
52 | case 1: /* draw tiles */ | ||
53 | sysvid_clear(); | ||
54 | draw_tilesBank = 0; | ||
55 | sys_snprintf(s, sizeof(s), "TILES@BANK@%d\376", pos); | ||
56 | draw_setfb(4, 4); | ||
57 | draw_tilesListImm(s); | ||
58 | k = 0; | ||
59 | for (i = 0; i < 0x10; i++) { | ||
60 | draw_setfb(80 + i * 0x0a, 14); | ||
61 | draw_tile((i<10?0x30:'A'-10) + i); | ||
62 | draw_setfb(64, 30 + i * 0x0a); | ||
63 | draw_tile((i<10?0x30:'A'-10) + i); | ||
64 | } | ||
65 | draw_tilesBank = pos; | ||
66 | for (i = 0; i < 0x10; i++) | ||
67 | for (j = 0; j < 0x10; j++) { | ||
68 | draw_setfb(80 + j * 0x0a, 30 + i * 0x0a); | ||
69 | draw_tile(k++); | ||
70 | } | ||
71 | seq = 10; | ||
72 | break; | ||
73 | case 10: /* wait for key pressed */ | ||
74 | if (control_test(Control_FIRE)) | ||
75 | seq = 98; | ||
76 | if (control_test(Control_UP)) | ||
77 | seq = 12; | ||
78 | if (control_test(Control_DOWN)) | ||
79 | seq = 13; | ||
80 | if (control_test(Control_RIGHT)) | ||
81 | seq = 11; | ||
82 | break; | ||
83 | case 11: /* wait for key released */ | ||
84 | if (!(control_test(Control_RIGHT))) { | ||
85 | pos = 0; | ||
86 | seq = 21; | ||
87 | } | ||
88 | break; | ||
89 | case 12: /* wait for key released */ | ||
90 | if (!(control_test(Control_UP))) { | ||
91 | if (pos < 4) pos++; | ||
92 | seq = 1; | ||
93 | } | ||
94 | break; | ||
95 | case 13: /* wait for key released */ | ||
96 | if (!(control_test(Control_DOWN))) { | ||
97 | if (pos > 0) pos--; | ||
98 | seq = 1; | ||
99 | } | ||
100 | break; | ||
101 | case 21: /* draw sprites */ | ||
102 | sysvid_clear(); | ||
103 | draw_tilesBank = 0; | ||
104 | sys_snprintf(s, sizeof(s), "SPRITES\376"); | ||
105 | draw_setfb(4, 4); | ||
106 | draw_tilesListImm(s); | ||
107 | for (i = 0; i < 8; i++) { | ||
108 | draw_setfb(0x08 + 0x20 + i * 0x20, 0x30 - 26); | ||
109 | draw_tile((i<10?0x30:'A'-10) + i); | ||
110 | draw_setfb(0x08 + 0x20 + i * 0x20, 0x30 - 16); | ||
111 | draw_tile((i+8<10?0x30:'A'-10) + i+8); | ||
112 | } | ||
113 | for (i = 0; i < 4; i++) { | ||
114 | k = pos + i * 8; | ||
115 | draw_setfb(0x20 - 16, 0x08 + 0x30 + i * 0x20); | ||
116 | j = k%16; | ||
117 | k /= 16; | ||
118 | draw_tile((j<10?0x30:'A'-10) + j); | ||
119 | draw_setfb(0x20 - 26, 0x08 + 0x30 + i * 0x20); | ||
120 | j = k%16; | ||
121 | draw_tile((j<10?0x30:'A'-10) + j); | ||
122 | } | ||
123 | k = pos; | ||
124 | for (i = 0; i < 4; i++) | ||
125 | for (j = 0; j < 8; j++) { | ||
126 | draw_sprite(k++, 0x20 + j * 0x20, 0x30 + i * 0x20); | ||
127 | } | ||
128 | seq = 30; | ||
129 | break; | ||
130 | case 30: /* wait for key pressed */ | ||
131 | if (control_test(Control_FIRE)) | ||
132 | seq = 98; | ||
133 | if (control_test(Control_UP)) | ||
134 | seq = 32; | ||
135 | if (control_test(Control_DOWN)) | ||
136 | seq = 33; | ||
137 | if (control_test(Control_LEFT)) | ||
138 | seq = 31; | ||
139 | if (control_test(Control_RIGHT)) | ||
140 | seq = 40; | ||
141 | break; | ||
142 | case 31: /* wait for key released */ | ||
143 | if (!(control_test(Control_LEFT))) { | ||
144 | pos = 0; | ||
145 | seq = 1; | ||
146 | } | ||
147 | break; | ||
148 | case 32: /* wait for key released */ | ||
149 | if (!(control_test(Control_UP))) { | ||
150 | if (pos < sprites_nbr_sprites - 32) pos += 32; | ||
151 | seq = 21; | ||
152 | } | ||
153 | break; | ||
154 | case 33: /* wait for key released */ | ||
155 | if (!(control_test(Control_DOWN))) { | ||
156 | if (pos > 0) pos -= 32; | ||
157 | seq = 21; | ||
158 | } | ||
159 | break; | ||
160 | case 40: | ||
161 | sysvid_clear(); | ||
162 | #ifdef GFXPC | ||
163 | if (pos2 == 0) pos2 = 2; | ||
164 | #endif | ||
165 | #ifdef GFXST | ||
166 | if (pos2 == 0) pos2 = 1; | ||
167 | #endif | ||
168 | sys_snprintf(s, sizeof(s), "BLOCKS@%#04X@TO@%#04X@WITH@BANK@%d\376", | ||
169 | pos, pos + 4*8-1, pos2); | ||
170 | draw_setfb(4, 4); | ||
171 | draw_tilesBank = 0; | ||
172 | draw_tilesListImm(s); | ||
173 | draw_tilesBank = pos2; | ||
174 | for (l = 0; l < 8; l++) | ||
175 | for (k = 0; k < 4; k++) | ||
176 | for (i = 0; i < 4; i++) | ||
177 | for (j = 0; j < 4; j++) { | ||
178 | draw_setfb(20 + j * 8 + l * 36, 30 + i * 8 + k * 36); | ||
179 | draw_tile(map_blocks[pos + l + k * 8][i * 4 + j]); | ||
180 | } | ||
181 | seq = 41; | ||
182 | break; | ||
183 | case 41: | ||
184 | if (control_test(Control_FIRE)) | ||
185 | seq = 98; | ||
186 | if (control_test(Control_UP)) | ||
187 | seq = 42; | ||
188 | if (control_test(Control_DOWN)) | ||
189 | seq = 43; | ||
190 | if (control_test(Control_LEFT)) | ||
191 | seq = 44; | ||
192 | if (control_test(Control_PAUSE)) | ||
193 | seq = 45; | ||
194 | break; | ||
195 | case 42: | ||
196 | if (!(control_test(Control_UP))) { | ||
197 | if (pos < map_nbr_blocks - 8*4) pos += 8 * 4; | ||
198 | seq = 40; | ||
199 | } | ||
200 | break; | ||
201 | case 43: | ||
202 | if (!(control_test(Control_DOWN))) { | ||
203 | if (pos > 0) pos -= 8 * 4; | ||
204 | seq = 40; | ||
205 | } | ||
206 | break; | ||
207 | case 44: | ||
208 | if (!(control_test(Control_LEFT))) { | ||
209 | pos = 0; | ||
210 | pos2 = 0; | ||
211 | seq = 21; | ||
212 | } | ||
213 | break; | ||
214 | case 45: | ||
215 | if (!(control_test(Control_PAUSE))) { | ||
216 | #ifdef GFXPC | ||
217 | if (pos2 == 2) pos2 = 3; | ||
218 | else pos2 = 2; | ||
219 | #endif | ||
220 | #ifdef GFXST | ||
221 | if (pos2 == 1) pos2 = 2; | ||
222 | else pos2 = 1; | ||
223 | #endif | ||
224 | seq = 40; | ||
225 | } | ||
226 | break; | ||
227 | case 98: /* wait for key released */ | ||
228 | if (!(control_test(Control_FIRE))) | ||
229 | seq = 99; | ||
230 | break; | ||
231 | } | ||
232 | |||
233 | if (control_test(Control_EXIT)) /* check for exit request */ | ||
234 | return SCREEN_EXIT; | ||
235 | |||
236 | if (seq == 99) { /* we're done */ | ||
237 | sysvid_clear(); | ||
238 | seq = 0; | ||
239 | return SCREEN_DONE; | ||
240 | } | ||
241 | |||
242 | return SCREEN_RUNNING; | ||
243 | } | ||
244 | |||
245 | #endif /* ENABLE_DEVTOOLS */ | ||
246 | |||
247 | /* eof */ | ||