intr_disable();
REG_DISPCNT = 4 | DISPCNT_BG2;
+ glyphcolor = 0xff;
+ glyphfb = (void*)VRAM_LFB_FB0_ADDR;
+
set_bg_color(0, 31, 0, 0);
set_bg_color(0xff, 31, 31, 31);
{
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;
+int glyphbg = 0;
+void *glyphfb = (void*)VRAM_LFB_FB0_ADDR;
void dbg_drawglyph(int x, int y, int c)
{
for(i=0; i<8; i++) {
row = *fnt++;
- 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);
+ pp = row & 0x80 ? glyphcolor : glyphbg;
+ *ptr++ = pp | ((row & 0x40 ? glyphcolor : glyphbg) << 8);
+ pp = row & 0x20 ? glyphcolor : glyphbg;
+ *ptr++ = pp | ((row & 0x10 ? glyphcolor : glyphbg) << 8);
+ pp = row & 0x08 ? glyphcolor : glyphbg;
+ *ptr++ = pp | ((row & 0x04 ? glyphcolor : glyphbg) << 8);
+ pp = row & 0x02 ? glyphcolor : glyphbg;
+ *ptr++ = pp | ((row & 0x01 ? glyphcolor : glyphbg) << 8);
ptr += 120 - 4;
}
}
#define vblperf_end()
#endif
-extern int glyphcolor;
+extern int glyphcolor, glyphbg;
extern void *glyphfb;
void panic(void *pc, const char *fmt, ...) __attribute__((noreturn));
#define COLOR_HORIZON 192
#define COLOR_ZENITH 255
-#define MAX_SPR 32
+#define MAX_SPR 40
static uint16_t oam[4 * MAX_SPR];
static int dynspr_base, dynspr_count;
static int score;
static unsigned long total_time, start_time;
+static int running;
#define XFORM_PIXEL_X(x, y) (xform_ca * (x) - xform_sa * (y) + (120 << 8))
#define XFORM_PIXEL_Y(x, y) (xform_sa * (x) + xform_ca * (y) + (80 << 8))
total_time = 0;
start_time = timer_msec;
+ hitfrm = 0;
+
vblcount = 0;
nframes = 0;
+
+ running = 1;
return 0;
}
static void gamescr_stop(void)
{
+ running = 0;
+
iwram_brk(prev_iwram_top);
wait_vblank();
//vox_sky_solid(COLOR_ZENITH);
if(score >= 0) {
- glyphcolor = 200;
+ int sec = total_time / 1000;
+
+ fillblock_16byte(framebuf + 8 * 240 / 2, 199 | (199 << 8) | (199 << 16) | (199 << 24), 40 * 240 / 16);
+
glyphfb = framebuf;
+ glyphbg = 199;
+ glyphcolor = 197;
dbg_drawstr(80, 10, "Victory!");
- dbg_drawstr(60, 20, "Score: %d", score);
- dbg_drawstr(59, 30, "Completed in: %lus", total_time);
+ glyphcolor = 200;
+ dbg_drawstr(30, 20, " Score: %d", score);
+ dbg_drawstr(30, 28, "Completed in: %lum.%lus", sec / 60, sec % 60);
+ glyphcolor = 198;
+ dbg_drawstr(85, 40, "Press start to exit");
}
}
static int bank, bankdir, theta;
int32_t sa, ca;
+ if(!running) return;
+
vblcount++;
/* TODO: pre-arrange sprite tiles in gba-native format, so that I can just