Mercurial > molko
annotate src/adventure/panic_state.c @ 91:8bfb90e85b28
adventure: add more details in panic
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 21 Mar 2020 14:39:43 +0100 |
parents | 30baadb6f6a2 |
children | ed72843a7194 |
rev | line source |
---|---|
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * panic_state.c -- panic state |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
19 #include <assert.h> |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
20 #include <stdio.h> |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
21 #include <stdlib.h> |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
22 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <error.h> |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
24 #include <event.h> |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <font.h> |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
26 #include <game.h> |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <painter.h> |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <sys.h> |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <texture.h> |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include <util.h> |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include <window.h> |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
32 #include <map_state.h> |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include "panic_state.h" |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 #define BACKGROUND 0x4f5070ff |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #define FOREGROUND 0xffffffff |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 #define FONT "fonts/Lato-Regular.ttf" |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 #define FONT_SZ 16 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
42 #define PADDING 20 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
43 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
44 #define OUT "molko-adventure.txt" |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
45 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 struct label { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 const char *text; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 struct texture *texture; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 }; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 static struct { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 struct font *font; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 } data; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 static struct label headers[] = { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 { "An unrecoverable error occured and the game cannot continue.", NULL }, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 { "Please report the detailed error as provided below.", NULL }, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 }; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 static struct label bottom[] = { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 { "Press <s> to save information and generate a core dump.", NULL }, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 { "Press <q> to quit without saving information.", NULL } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 }; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
65 static struct label lerror; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
66 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 enter(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 static void |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
73 dump(void) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
74 { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
75 FILE *fp; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
76 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
77 if (!(fp = fopen(OUT, "w"))) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
78 goto dump; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
79 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
80 /* Print various information. */ |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
81 fprintf(fp, "Molko's Adventure crash dump report\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
82 fprintf(fp, "== state map dump ==\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
83 fprintf(fp, "map:\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
84 fprintf(fp, " w %u\n", map_state_data.map.w); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
85 fprintf(fp, " h %u\n", map_state_data.map.h); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
86 fprintf(fp, "player:\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
87 fprintf(fp, " x: %u\n", map_state_data.player.x); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
88 fprintf(fp, " y: %u\n", map_state_data.player.y); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
89 fprintf(fp, "view:\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
90 fprintf(fp, " w: %u\n", map_state_data.view.w); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
91 fprintf(fp, " h: %u\n", map_state_data.view.h); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
92 fprintf(fp, " x: %u\n", map_state_data.view.x); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
93 fprintf(fp, " y: %u\n", map_state_data.view.y); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
94 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
95 dump: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
96 if (fp) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
97 fclose(fp); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
98 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
99 abort(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
100 } |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
101 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
102 static void |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
103 handle_keydown(const struct event_key *ev) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
104 { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
105 assert(ev); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
106 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
107 switch (ev->key) { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
108 case KEY_q: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
109 game_quit(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
110 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
111 case KEY_s: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
112 dump(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
113 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
114 default: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
115 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
116 } |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
117 } |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
118 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
119 static void |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 handle(const union event *ev) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
122 assert(ev); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
123 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
124 switch (ev->type) { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
125 case EVENT_KEYDOWN: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
126 handle_keydown(&ev->key); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
127 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
128 default: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
129 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
130 } |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 generate(struct label labels[], size_t labelsz) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
136 assert(labels); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
138 for (size_t i = 0; i < labelsz; ++i) { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
139 if (labels[i].texture) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
140 continue; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
141 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
142 labels[i].texture = font_render(data.font, labels[i].text, FOREGROUND); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
143 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
144 if (!labels[i].texture) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
145 error_fatal(); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 update(unsigned int ticks) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 (void)ticks; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
154 lerror.text = error(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
155 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 generate(headers, NELEM(headers)); |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
157 generate(&lerror, 1); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 generate(bottom, NELEM(bottom)); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 draw(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
164 int y = PADDING; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 painter_set_target(NULL); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 painter_set_color(BACKGROUND); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 painter_clear(); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 /* Header. */ |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 for (size_t i = 0; i < NELEM(headers); ++i) { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
172 texture_draw(headers[i].texture, PADDING, y); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 y += texture_height(headers[i].texture) + 2; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
176 /* Error message. */ |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
177 texture_draw(lerror.texture, PADDING, y + PADDING); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
178 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 /* Bottom. */ |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
180 y = window_height() - PADDING; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 y -= texture_height(bottom[0].texture); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 for (size_t i = 0; i < NELEM(bottom); ++i) { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
184 texture_draw(bottom[i].texture, PADDING, y); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 y -= texture_height(bottom[i].texture) + 2; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 leave(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 struct state panic_state = { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 .enter = enter, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 .handle = handle, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 .update = update, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 .draw = draw, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 .leave = leave |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 }; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 panic_state_init(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 /* |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 * If the panic state can not be loaded we're unable to show any |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 * useful information to the screen so as last resort print them |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 * on the console. |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 */ |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 if (!(data.font = font_openf(sys_datapath(FONT), FONT_SZ))) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 error_fatal(); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 } |