+ update_keyb();
+
+ if(KEYPRESS(BN_START)) {
+ change_screen(find_screen("game"));
+ return;
+ }
+
+ if(KEYPRESS(BN_A)) {
+ switch(sel) {
+ case MENU_START:
+ change_screen(find_screen("game"));
+ return;
+ case MENU_CTRL:
+ change_screen(find_screen("controls"));
+ return;
+ default:
+ break;
+ }
+ }
+
+ if(KEYPRESS(BN_DOWN) && sel <= NUM_MENU_ITEMS) {
+ cur_x = pos[++sel][0] - CUR_XOFFS;
+ cur_y = pos[sel][1];
+ }
+ if(KEYPRESS(BN_UP) && sel > 0) {
+ cur_x = pos[--sel][0] - CUR_XOFFS;
+ cur_y = pos[sel][1];
+ }
+ if((KEYPRESS(BN_LEFT) || KEYPRESS(BN_RIGHT)) && sel == MENU_COLORS) {
+ gba_colors ^= 1;
+ setup_palette();
+ scores[10].score = (scores[10].score & ~1) | (gba_colors & 1);
+ save_scores();
+ }
+
+ wait_vblank();
+}
+
+static const int curspr[] = {
+ SPRID(0, 0), SPRID(32, 0), SPRID(64, 0), SPRID(96, 0),
+ SPRID(0, 16), SPRID(32, 16), SPRID(64, 16), SPRID(96, 16)
+};
+
+#define MENU_COLOR_FBPTR (void*)(VRAM_LFB_FB0_ADDR + 117 * 240)
+
+static void menuscr_vblank(void)
+{
+ int anm, frm;
+ unsigned int flags = SPR_SZ32 | SPR_HRECT | SPR_256COL;
+ void *src;
+
+ if(!running) return;
+
+ anm = (num_vbl++ >> 3) & 0xf;
+ frm = anm & 7;
+
+ if(anm >= 8) flags |= SPR_VFLIP;
+
+ spr_oam(0, 0, curspr[frm], cur_x - 16, cur_y - 8, flags);
+
+ src = menuscr_pixels + (gba_colors ? 160 : 117) * 240;
+ dma_copy32(3, MENU_COLOR_FBPTR, src, 16 * 240 / 4, 0);