summaryrefslogtreecommitdiff
path: root/apps/plugins/xrick/devtools.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/xrick/devtools.c')
-rw-r--r--apps/plugins/xrick/devtools.c247
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
33U8
34devtools_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 */