Mercurial > molko
annotate examples/example-action/main.c @ 260:60a214ec1ab4
adventure: change the way states are stored
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 06 Dec 2020 22:50:48 +0100 |
parents | 76afe639fd72 |
children | cd5bdb995052 |
rev | line source |
---|---|
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
2 * example-action.c -- example on how to use automatic actions |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <core/action.h> |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
22 #include <core/core.h> |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <core/event.h> |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
24 #include <core/game.h> |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <core/image.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <core/maths.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <core/painter.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <core/panic.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <core/script.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include <core/sprite.h> |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
31 #include <core/state.h> |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include <core/sys.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include <core/texture.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include <core/util.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include <core/window.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
141
diff
changeset
|
37 #include <ui/theme.h> |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
38 #include <ui/ui.h> |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
141
diff
changeset
|
39 |
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
141
diff
changeset
|
40 #include <rpg/message.h> |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
41 #include <rpg/rpg.h> |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
141
diff
changeset
|
42 |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 #include <assets/sprites/chest.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 #include <assets/sprites/people.h> |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
140
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
46 #define W (1280) |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
47 #define H (720) |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
48 |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
49 #define MW (W * 0.75) |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
50 #define MX ((W / 2) - (MW / 2)) |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
51 #define MY (100) |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
53 /* This is a stack of "parallel" events. */ |
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
54 static struct action_stack events; |
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
55 |
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
56 /* This is a stack of modal events. */ |
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
57 static struct action_stack modal; |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 /* |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * Event object for the chest to click on. |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 static struct { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 struct message msg; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 struct action msg_act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 int x; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 int y; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 bool opened; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 struct texture image; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 struct sprite sprite; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 struct action event; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 } chest = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 .msg = { |
140
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
73 .x = MX, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
74 .y = MY, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
75 .w = MW, |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 .text = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 "100000 pièces.", |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 "Te voilà riche sale file de crevette." |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 }; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 /* |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 * Event object for the guide who ask dialog with you. |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 * |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * It is a script spawned upon click like this. |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 * |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 * [guide.event] |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 * | spawn |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 * (on click)------------------->[message 1] |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 * v |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 * [message 2] |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 * v |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 * [question 3] |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 * spawn v |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 * [response]<---------------------[check result] |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 * v |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 * [message 4/5] |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 static struct { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 struct { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 struct message msg; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 struct action act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 } msgs[5]; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 /* This is the sprite and action to click on. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 int x; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 int y; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 struct texture image; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 struct sprite sprite; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 struct action event; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 /* This is the event for the response. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 struct action response; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 struct script script; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 struct action script_act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 } guide = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 .msgs = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 .msg = { |
140
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
122 .x = MX, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
123 .y = MY, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
124 .w = MW, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
125 .delay = MESSAGE_DELAY_DEFAULT, |
141
4eeeccf2b732
core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
140
diff
changeset
|
126 .flags = MESSAGE_FLAGS_FADEIN, |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 .text = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 "Bienvenue dans ce monde Molko." |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 }, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 }, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 .msg = { |
140
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
134 .x = MX, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
135 .y = MY, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
136 .w = MW, |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 .text = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 "Penses tu vraiment pouvoir me battre ?" |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 }, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 .msg = { |
140
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
144 .x = MX, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
145 .y = MY, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
146 .w = MW, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
147 .flags = MESSAGE_FLAGS_QUESTION, |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 .text = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 "Non j'ai la trouille.", |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 "Bien sûr, je suis la légende." |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 }, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 /* In case of NO. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 .msg = { |
140
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
158 .x = MX, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
159 .y = MY, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
160 .w = MW, |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 .text = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 "Poule mouillée." |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 }, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 /* In case of YES. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 .msg = { |
140
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
170 .x = MX, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
171 .y = MY, |
453651d76f7c
core: upgrade message in terms of customization
David Demelier <markand@malikania.fr>
parents:
139
diff
changeset
|
172 .w = MW, |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 .text = { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 "Prépare toi à souffrir." |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 }; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 static bool |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 guide_response_update(struct action *act, unsigned int ticks) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 /* Immediately return to get access to end. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 (void)act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 (void)ticks; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 return true; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 guide_response_end(struct action *act) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 (void)act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 /* We add a final response depending on the result. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 const int index = guide.msgs[2].msg.index + 3; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 message_action(&guide.msgs[index].msg, &guide.msgs[index].act); |
161
31d7f23c0588
ui: label no longer has w, h fields
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
200 message_query(&guide.msgs[index].msg, NULL, &guide.msgs[index].msg.h); |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
201 action_stack_add(&modal, &guide.msgs[index].act); |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 guide_popup(void) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 /* Prepare the script with first 3 messages. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 for (size_t i = 0; i < 3; ++i) { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 message_action(&guide.msgs[i].msg, &guide.msgs[i].act); |
161
31d7f23c0588
ui: label no longer has w, h fields
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
210 message_query(&guide.msgs[i].msg, NULL, &guide.msgs[i].msg.h); |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 script_append(&guide.script, &guide.msgs[i].act); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 /* Reset the message index. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 guide.msgs[2].msg.index = 0; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 /* This is final action that analyze user input. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 guide.response.update = guide_response_update; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 guide.response.end = guide_response_end; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 script_append(&guide.script, &guide.response); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 script_action(&guide.script, &guide.script_act); |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
223 action_stack_add(&modal, &guide.script_act); |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 guide_handle(struct action *act, const union event *ev) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 (void)act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
231 if (!action_stack_completed(&modal)) |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 return; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 switch (ev->type) { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 case EVENT_CLICKDOWN: |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 if (maths_is_boxed(guide.x, guide.y, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 guide.sprite.cellw, guide.sprite.cellh, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 ev->click.x, ev->click.y)) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 guide_popup(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 break; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 default: |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 break; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 guide_draw(struct action *act) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 (void)act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 sprite_draw(&guide.sprite, 0, 0, guide.x, guide.y); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 guide_init(void) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 if (!image_openmem(&guide.image, sprites_people, sizeof (sprites_people))) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 panic(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 sprite_init(&guide.sprite, &guide.image, 48, 48); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 /* This is the global guide action. */ |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 guide.event.handle = guide_handle; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 guide.event.draw = guide_draw; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 guide.x = 200; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 guide.y = 200; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 chest_handle(struct action *act, const union event *ev) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 (void)act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
274 if (chest.opened || !action_stack_completed(&modal)) |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 return; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 switch (ev->type) { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 case EVENT_CLICKDOWN: |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 if (maths_is_boxed(chest.x, chest.y, chest.sprite.cellw, chest.sprite.cellh, |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 ev->click.x, ev->click.y)) { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 chest.opened = true; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 message_action(&chest.msg, &chest.msg_act); |
161
31d7f23c0588
ui: label no longer has w, h fields
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
283 message_query(&chest.msg, NULL, &chest.msg.h); |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
284 action_stack_add(&modal, &chest.msg_act); |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 default: |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 break; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 chest_draw(struct action *act) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 (void)act; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 const int row = chest.opened ? 3 : 0; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 sprite_draw(&chest.sprite, row, 0, chest.x, chest.y); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 chest_init(void) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 if (!image_openmem(&chest.image, sprites_chest, sizeof (sprites_chest))) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 panic(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 sprite_init(&chest.sprite, &chest.image, 32, 32); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 chest.x = 100; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 chest.y = 100; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 chest.event.handle = chest_handle; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 chest.event.draw = chest_draw; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 init(void) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 { |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
209
diff
changeset
|
318 if (!core_init("fr.malikania", "actions") || !ui_init() || !rpg_init()) |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
319 panic(); |
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
320 if (!window_open("Example - Action", W, H)) |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 panic(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 guide_init(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 chest_init(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 static void |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
328 handle(struct state *st, const union event *ev) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
329 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
330 (void)st; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
331 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
332 switch (ev->type) { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
333 case EVENT_QUIT: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
334 game_quit(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
335 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
336 default: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
337 action_stack_handle(&events, ev); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
338 action_stack_handle(&modal, ev); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
339 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
340 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
341 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
342 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
343 static void |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
344 update(struct state *st, unsigned int ticks) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
345 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
346 (void)st; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
347 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
348 action_stack_update(&events, ticks); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
349 action_stack_update(&modal, ticks); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
350 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
351 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
352 static void |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
353 draw(struct state *st) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
354 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
355 (void)st; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
356 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
357 painter_set_color(0xffffffff); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
358 painter_clear(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
359 action_stack_draw(&events); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
360 action_stack_draw(&modal); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
361 painter_present(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
362 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
363 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
364 static void |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 run(void) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 { |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
367 struct state state = { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
368 .handle = handle, |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
369 .update = update, |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
370 .draw = draw |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
371 }; |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 |
139
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
373 action_stack_add(&events, &chest.event); |
8b035f7f978a
core: add action_stack_completed function
David Demelier <markand@malikania.fr>
parents:
136
diff
changeset
|
374 action_stack_add(&events, &guide.event); |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
375 |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
376 game_switch(&state, true); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
161
diff
changeset
|
377 game_loop(); |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
380 static void |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
381 quit(void) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
382 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
383 window_finish(); |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
384 rpg_finish(); |
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
385 ui_finish(); |
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
386 core_finish(); |
136
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
387 } |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
388 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 int |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
390 main(int argc, char **argv) |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
391 { |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 (void)argc; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 (void)argv; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 init(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
396 run(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
397 quit(); |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
398 |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
399 return 0; |
30b68089ae70
core: rework actions and a bit of drawables, closes #2492
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 } |