{
va_list ap;
+ glyphcolor = 0xff;
+ glyphfb = VRAM_LFB_FB0_ADDR;
+
fputs("~~~ PANIC ~~~\n", stderr);
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
#endif
+int glyphcolor = 0xff;
+void *glyphfb = VRAM_LFB_FB0_ADDR;
+
void dbg_drawglyph(int x, int y, int c)
{
int i;
uint16_t pp;
unsigned char row;
- uint16_t *ptr = (uint16_t*)VRAM_LFB_FB0_ADDR + (y << 7) - (y << 3) + (x >> 1);
+ uint16_t *ptr = (uint16_t*)glyphfb + (y << 7) - (y << 3) + (x >> 1);
unsigned char *fnt = font_8x8 + ((c & 0xff) << 3);
for(i=0; i<8; i++) {
row = *fnt++;
- pp = row & 0x80 ? 0xff : 0;
- *ptr++ = pp | (row & 0x40 ? 0xff00 : 0);
- pp = row & 0x20 ? 0xff : 0;
- *ptr++ = pp | (row & 0x10 ? 0xff00 : 0);
- pp = row & 0x08 ? 0xff : 0;
- *ptr++ = pp | (row & 0x04 ? 0xff00 : 0);
- pp = row & 0x02 ? 0xff : 0;
- *ptr++ = pp | (row & 0x01 ? 0xff00 : 0);
+ pp = row & 0x80 ? glyphcolor : 0;
+ *ptr++ = pp | (row & 0x40 ? (glyphcolor << 8) : 0);
+ pp = row & 0x20 ? glyphcolor : 0;
+ *ptr++ = pp | (row & 0x10 ? (glyphcolor << 8) : 0);
+ pp = row & 0x08 ? glyphcolor : 0;
+ *ptr++ = pp | (row & 0x04 ? (glyphcolor << 8) : 0);
+ pp = row & 0x02 ? glyphcolor : 0;
+ *ptr++ = pp | (row & 0x01 ? (glyphcolor << 8) : 0);
ptr += 120 - 4;
}
}
}
}
endspawn:
+ total_enemies = 1; /* XXX DBG */
/* check continuity */
for(i=0; i<total_enemies; i++) {
if(enemies[i].anm <= 0) {
vox_render();
//vox_sky_grad(COLOR_HORIZON, COLOR_ZENITH);
//vox_sky_solid(COLOR_ZENITH);
+
+ if(score >= 0) {
+ glyphcolor = 200;
+ glyphfb = framebuf;
+ dbg_drawstr(80, 10, "Victory!");
+ dbg_drawstr(60, 20, "Score: %d", score);
+ dbg_drawstr(59, 30, "Completed in: %lus", total_time);
+ }
}
static void victory(void)
panic(get_pc(), "failed to initialize screens");
}
- if(change_screen(find_screen("logo")) == -1) {
+ if(change_screen(find_screen("game")) == -1) {
panic(get_pc(), "failed to find starting screen");
}