A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 247 lines 5.7 kB view raw
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 */