controls help screen
[gbajam22] / src / ctrlscr.c
diff --git a/src/ctrlscr.c b/src/ctrlscr.c
new file mode 100644 (file)
index 0000000..72aeeec
--- /dev/null
@@ -0,0 +1,68 @@
+#include "game.h"
+#include "data.h"
+#include "gba.h"
+#include "util.h"
+#include "dma.h"
+#include "input.h"
+#include "debug.h"
+
+static int ctrlscr_start(void);
+static void ctrlscr_stop(void);
+static void ctrlscr_frame(void);
+static void ctrlscr_vblank(void);
+
+static struct screen ctrlscr = {
+       "controls",
+       ctrlscr_start,
+       ctrlscr_stop,
+       ctrlscr_frame,
+       ctrlscr_vblank
+};
+
+struct screen *init_controls_screen(void)
+{
+       return &ctrlscr;
+}
+
+static void setup_palette(void)
+{
+       int i;
+       unsigned char *cmap = gba_colors ? controls_gba_cmap : controls_cmap;
+
+       for(i=0; i<256; i++) {
+               int r = cmap[i * 3];
+               int g = cmap[i * 3 + 1];
+               int b = cmap[i * 3 + 2];
+               gba_bgpal[i] = RGB555(r, g, b);
+       }
+}
+
+static int ctrlscr_start(void)
+{
+       gba_setmode(4, DISPCNT_BG2 | DISPCNT_OBJ);
+       dma_copy16(3, gba_vram_lfb0, controls_pixels, 240 * 160 / 2, 0);
+
+       setup_palette();
+       return 0;
+}
+
+static void ctrlscr_stop(void)
+{
+       wait_vblank();
+}
+
+static void ctrlscr_frame(void)
+{
+       update_keyb();
+
+       if(KEYPRESS(BN_START) || KEYPRESS(BN_A) || KEYPRESS(BN_B)) {
+               change_screen(find_screen("menu"));
+               return;
+       }
+
+       wait_vblank();
+}
+
+static void ctrlscr_vblank(void)
+{
+}