# HG changeset patch # User David Demelier # Date 1601744602 -7200 # Node ID 445035ace8401029ec914531843fa47ad4d8ab5c # Parent 0a6683615c732002ced3627130354a1cb01a3208 core: fix panic handling early diff -r 0a6683615c73 -r 445035ace840 src/adventure/panic_state.c --- a/src/adventure/panic_state.c Sat Oct 03 18:32:01 2020 +0200 +++ b/src/adventure/panic_state.c Sat Oct 03 19:03:22 2020 +0200 @@ -31,14 +31,14 @@ #include #include +#include + #include "panic_state.h" #define BACKGROUND 0x4f5070ff #define FOREGROUND 0xffffffff -#define FONT "fonts/Lato-Regular.ttf" -#define FONT_SZ 16 - +#define SIZE 16 #define PADDING 20 #define OUT "molko-adventure.txt" @@ -222,6 +222,6 @@ * useful information to the screen so as last resort print them * on the console. */ - if (!(font_open(&data.font, sys_datapath(FONT), FONT_SZ))) + if (!(font_openmem(&data.font, Lato_Regular, sizeof (Lato_Regular), SIZE))) die("%s", error()); } diff -r 0a6683615c73 -r 445035ace840 src/core/game.c --- a/src/core/game.c Sat Oct 03 18:32:01 2020 +0200 +++ b/src/core/game.c Sat Oct 03 19:03:22 2020 +0200 @@ -88,7 +88,6 @@ game.actions[i].draw(&game.actions[i]); } - void game_switch(struct state *state, bool quick) { diff -r 0a6683615c73 -r 445035ace840 src/core/panic.c --- a/src/core/panic.c Sat Oct 03 18:32:01 2020 +0200 +++ b/src/core/panic.c Sat Oct 03 19:03:22 2020 +0200 @@ -26,7 +26,7 @@ static noreturn void terminate(void) { - fprintf(stderr, "%s", error()); + fprintf(stderr, "abort: %s", error()); exit(1); } diff -r 0a6683615c73 -r 445035ace840 src/molko/main.c --- a/src/molko/main.c Sat Oct 03 18:32:01 2020 +0200 +++ b/src/molko/main.c Sat Oct 03 19:03:22 2020 +0200 @@ -17,44 +17,24 @@ */ #include -#include -#include #include -#include -#include -#include #include -#include -#include #include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include #include #include #include -#include #include +#include +#include + #define WINDOW_WIDTH 1280 #define WINDOW_HEIGHT 720 static jmp_buf panic_buf; -static struct font debug_font; static noreturn void unrecoverable(void) @@ -69,13 +49,19 @@ panic(); if (!window_init("Molko's Adventure", WINDOW_WIDTH, WINDOW_HEIGHT)) panic(); - if (!theme_init()) - panic(); + + /* + * From here, we can setup our panic state which requires a window + * to be running. + */ /* Init unrecoverable panic state. */ panic_state_init(); panic_handler = unrecoverable; + if (!theme_init()) + panic(); + /* Default state is splash screen */ game_switch(&splashscreen_state, true); } @@ -84,21 +70,8 @@ run(void) { struct clock clock = { 0 }; - struct frame mainmenu = { - .x = 10, - .y = 10, - .w = 200, - .h = 64 - }; - struct checkbox cb = { - .label = "Play hard mode", - .x = 20, - .y = 20, - .w = 200, - .h = 16 - }; - for (;;) { + while (game.state) { unsigned int elapsed = clock_elapsed(&clock); clock_start(&clock); @@ -108,18 +81,13 @@ case EVENT_QUIT: return; default: - checkbox_handle(&cb, &ev); + game_handle(&ev); break; } } - painter_set_color(0xffffffff); - painter_clear(); - - theme_draw_frame(NULL, &(const struct frame){ .x=10, .y=10, .w=500, .h=500 }); - checkbox_draw(&cb); - - painter_present(); + game_update(elapsed); + game_draw(); if ((elapsed = clock_elapsed(&clock)) < 20) delay(20 - elapsed); @@ -139,12 +107,11 @@ (void)argc; (void)argv; - init(); - - if (setjmp(panic_buf) == 0) + if (setjmp(panic_buf) == 0) { /* Initial game run. */ + init(); run(); - else { + } else { /* Clear event queue to avoid accidental key presses. */ for (union event ev; event_poll(&ev); ) continue;