annotate src/libmlk-rpg/rpg/battle.h @ 368:15bdac29ba4b

core: split drawable and drawable_stack
author David Demelier <markand@malikania.fr>
date Sun, 24 Oct 2021 17:07:20 +0200
parents 19782ea1cf4a
children 1e06f871dc63
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * battle.h -- battles
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
314
d01e83210ca2 misc: update years
David Demelier <markand@malikania.fr>
parents: 298
diff changeset
4 * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
366
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
19 #ifndef MLK_RPG_BATTLE_H
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
20 #define MLK_RPG_BATTLE_H
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <core/action.h>
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
23 #include <core/core.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <core/drawable.h>
368
15bdac29ba4b core: split drawable and drawable_stack
David Demelier <markand@malikania.fr>
parents: 366
diff changeset
25 #include <core/drawable-stack.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <ui/frame.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <ui/gridmenu.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include "battle-bar.h"
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 229
diff changeset
31 #include "battle-entity.h"
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include "battle-state.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #include "selection.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include "spell.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 union event;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 struct character;
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
39 struct inventory;
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
40 struct item;
208
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
41 struct music;
289
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
42 struct selection;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 struct spell;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 struct theme;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
46 #define BATTLE_TEAM_MAX (4)
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
47 #define BATTLE_ENEMY_MAX (8)
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
48 #define BATTLE_ENTITY_MAX (BATTLE_TEAM_MAX + BATTLE_ENEMY_MAX)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 #define BATTLE_TEAM_FOREACH(bt, iter) \
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 for (size_t i = 0; i < BATTLE_TEAM_MAX && ((iter) = &(bt)->team[i]); ++i)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 #define BATTLE_ENEMY_FOREACH(bt, iter) \
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 for (size_t i = 0; i < BATTLE_ENEMY_MAX && ((iter) = &(bt)->enemies[i]); ++i)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 #define BATTLE_THEME(bt) ((bt)->theme ? (bt)->theme : theme_default())
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 enum battle_status {
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
58 BATTLE_STATUS_NONE,
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
59 BATTLE_STATUS_RUNNING,
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
60 BATTLE_STATUS_WON,
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
61 BATTLE_STATUS_LOST,
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 };
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 struct battle {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 struct battle_state *state;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 enum battle_status status;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 struct battle_entity team[BATTLE_TEAM_MAX];
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 struct battle_entity enemies[BATTLE_ENEMY_MAX];
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 struct battle_entity *order[BATTLE_ENTITY_MAX];
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 struct battle_entity *order_cur;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 size_t order_curindex;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 struct texture *background;
208
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
73 struct music *music[3];
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 struct theme *theme;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 struct drawable_stack effects;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 struct action_stack actions[2];
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
77 struct inventory *inventory;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 struct battle_bar bar;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 };
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
81 CORE_BEGIN_DECLS
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
82
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
84 battle_start(struct battle *);
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 229
diff changeset
85
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
87 battle_next(struct battle *);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
88
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
89 struct battle_entity *
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
90 battle_find(struct battle *, const struct character *);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
91
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
93 battle_switch(struct battle *, struct battle_state *);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
96 battle_order(struct battle *);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
97
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
98 void
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
99 battle_attack(struct battle *, struct character *, struct character *);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
102 battle_cast(struct battle *, struct character *, const struct spell *, const struct selection *);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
105 battle_use(struct battle *, const struct item *, struct character *, struct character *);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
106
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
107 void
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
108 battle_indicator_hp(struct battle *, const struct character *, long);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
109
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
111 battle_handle(struct battle *, const union event *);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 292
diff changeset
113 int
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
114 battle_update(struct battle *, unsigned int);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
115
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
117 battle_draw(struct battle *);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
118
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
120 battle_finish(struct battle *);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
292
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
122 CORE_END_DECLS
08ab73b32832 misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
123
366
19782ea1cf4a misc: start rebranding
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
124 #endif /* MLK_RPG_BATTLE_H */