annotate libmlk-rpg/mlk/rpg/battle.c @ 546:b7da58230a66

cmake: fix for RHEL
author David Demelier <markand@malikania.fr>
date Mon, 06 Mar 2023 20:01:00 +0100
parents 6100c643dba0
children
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.c -- battles
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
445
773a082f0b91 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 442
diff changeset
4 * Copyright (c) 2020-2023 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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdio.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdlib.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <string.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
431
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
24 #include <mlk/core/alloc.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
25 #include <mlk/core/event.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
26 #include <mlk/core/font.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
27 #include <mlk/core/music.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
28 #include <mlk/core/sprite.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
29 #include <mlk/core/texture.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
30 #include <mlk/core/trace.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
31 #include <mlk/core/util.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
32 #include <mlk/core/window.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
433
862b15c3a3ae ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
34 #include <mlk/ui/align.h>
862b15c3a3ae ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
35 #include <mlk/ui/frame.h>
862b15c3a3ae ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 431
diff changeset
36 #include <mlk/ui/label.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
385
3f13dc6c0e37 rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
38 #include "battle-bar.h"
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include "battle-indicator.h"
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
40 #include "battle-state-ai.h"
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
41 #include "battle-state-attacking.h"
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
42 #include "battle-state-check.h"
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
43 #include "battle-state-menu.h"
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
44 #include "battle-state-opening.h"
385
3f13dc6c0e37 rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
45 #include "battle-state.h"
3f13dc6c0e37 rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
46 #include "battle.h"
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 #include "character.h"
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
48 #include "inventory.h"
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
49 #include "item.h"
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 #include "spell.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 struct indicator {
449
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
53 struct mlk_drawable dw;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 struct battle_indicator bti;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 };
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
57 static int
449
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
58 indicator_update(struct mlk_drawable *dw, unsigned int ticks)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 struct indicator *id = dw->data;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 return battle_indicator_update(&id->bti, ticks);
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 static void
449
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
66 indicator_draw(struct mlk_drawable *dw)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 const struct indicator *id = dw->data;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 battle_indicator_draw(&id->bti, dw->x, dw->y);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 static void
449
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
74 indicator_free(struct mlk_drawable *dw)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 struct indicator *id = dw->data;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 battle_indicator_finish(&id->bti);
460
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
79 mlk_alloc_free(id);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 static struct battle_entity *
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 find(struct battle *bt, const struct character *ch)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 struct battle_entity *et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 BATTLE_TEAM_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 if (et->ch == ch)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 return et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 BATTLE_ENEMY_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 if (et->ch == ch)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 return et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 return NULL;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
97 static struct battle_entity *
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
98 random_select(struct battle_entity **group, size_t groupsz)
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
99 {
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
100 struct battle_entity *ret = NULL, *et = NULL;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
101
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
102 do {
474
ca30ff96bbe0 core: util -> mlk_util
David Demelier <markand@malikania.fr>
parents: 473
diff changeset
103 et = group[mlk_util_nrand(0, groupsz - 1)];
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
104
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
105 if (et && et->ch)
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
106 ret = et;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
107 } while (!ret);
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
108
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
109 return ret;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
110 }
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
111
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 static int
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 cmp_order(const void *d1, const void *d2)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 const struct battle_entity *et1 = *(const struct battle_entity **)d1;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 const struct battle_entity *et2 = *(const struct battle_entity **)d2;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
118 return et2->ch->agt < et1->ch->agt;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
120
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
121 static int
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
122 is_team(const struct battle *bt, const struct character *ch)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
124 for (size_t i = 0; i < bt->teamsz; ++i)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
125 if (bt->team[i] && bt->team[i]->ch == ch)
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
126 return 1;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
128 return 0;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
130
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 positionate_name(struct battle_entity *et, const struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 {
505
6100c643dba0 ui: finally ditch theme
David Demelier <markand@malikania.fr>
parents: 493
diff changeset
134 #if 0
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 unsigned int lw;
468
91ce23a36143 core: sprite -> mlk_sprite
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
136 struct mlk_sprite *sprite;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 /* Show the character name below its sprite. */
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
139 sprite = et->ch->sprites[CHARACTER_SPRITE_NORMAL];
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
140
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 et->name.text = et->ch->name;
493
fce3b3c4b496 ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
142 mlk_label_query(&et->name, &lw, NULL);
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
143 et->name.y = et->y + sprite->cellh + BATTLE_THEME(bt)->padding;
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
144 et->name.x = et->x + (sprite->cellw / 2) - (lw / 2);
505
6100c643dba0 ui: finally ditch theme
David Demelier <markand@malikania.fr>
parents: 493
diff changeset
145 #endif
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 positionate_names(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 struct battle_entity *et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
152
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 BATTLE_TEAM_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 if (character_ok(et->ch))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 positionate_name(et, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 BATTLE_ENEMY_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 if (character_ok(et->ch))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 positionate_name(et, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 positionate_team(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 struct battle_entity *et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 unsigned int requirement = 0, nmemb = 0, spacing;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 int x, y;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
167
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 BATTLE_TEAM_FOREACH(bt, et) {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 /* Stop in case any member of the team has been positionated. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 if (et->x != 0 || et->y != 0)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 return;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
172
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
173 if (battle_entity_ok(bt->team[i])) {
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 nmemb++;
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
175 requirement += et->ch->sprites[CHARACTER_SPRITE_NORMAL]->cellh;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 /* TODO: compute a correct x placement. */
485
3ff1fe64d0cd core: window -> mlk_window
David Demelier <markand@malikania.fr>
parents: 474
diff changeset
180 spacing = (mlk_window.h - requirement) / (nmemb + 1);
3ff1fe64d0cd core: window -> mlk_window
David Demelier <markand@malikania.fr>
parents: 474
diff changeset
181 x = mlk_window.w - 200;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 y = spacing;
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
183
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 BATTLE_TEAM_FOREACH(bt, et) {
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
185 if (battle_entity_ok(et)) {
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 et->x = x;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 et->y = y;
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
188 y += et->ch->sprites[CHARACTER_SPRITE_NORMAL]->cellh + spacing;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 static void
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
194 draw_entities(const struct battle *bt, struct battle_entity **entities, size_t entitiesz)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 {
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
196 for (size_t i = 0; i < entitiesz; ++i) {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
197 if (battle_entity_ok(entities[i]))
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
198 battle_entity_draw(entities[i], bt);
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
199 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
201
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 static void
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
203 update_entities(struct battle_entity **entities, size_t entitiesz, unsigned int ticks)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 for (size_t i = 0; i < entitiesz; ++i) {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
206 if (battle_entity_ok(entities[i]))
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
207 battle_entity_update(entities[i], ticks);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
210
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 void
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
212 battle_init(struct battle *bt)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
213 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
214 assert(bt);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
215
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
216 memset(bt, 0, sizeof (*bt));
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
217 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
218
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
219 int
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
220 battle_ok(const struct battle *bt)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
221 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
222 return bt && bt->state && bt->bar && bt->enemiesz && bt->team;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
223 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
224
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
225 void
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 battle_start(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
228 assert(bt);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
229
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 struct battle_entity *et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
231
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
232 BATTLE_TEAM_FOREACH(bt, et)
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
233 if (battle_entity_ok(et))
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
234 battle_entity_init(et);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
235 BATTLE_ENEMY_FOREACH(bt, et)
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
236 if (battle_entity_ok(et))
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
237 battle_entity_init(et);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
238
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 positionate_team(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 positionate_names(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
241
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 /* Start the state "opening" animation. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 battle_state_opening(bt);
208
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
244
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
245 /* Play music if present. */
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
246 if (bt->music[0])
464
b6b1162dafa3 core: forgot to refactor music enum
David Demelier <markand@malikania.fr>
parents: 460
diff changeset
247 mlk_music_play(bt->music[0], MLK_MUSIC_LOOP);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
248
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
249 battle_order(bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 battle_switch(struct battle *bt, struct battle_state *st)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 assert(st);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
257
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 if (bt->state)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 battle_state_finish(bt->state, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
260
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 bt->state = st;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
263
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 battle_order(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
267 struct battle_entity **porder;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
268
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
269 /* Create a pointer list to every entity. */
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
270 bt->ordersz = bt->teamsz + bt->enemiesz;
460
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
271
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
272 if (!bt->order)
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
273 bt->order = mlk_alloc_new0(bt->ordersz, sizeof (*bt->order));
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
274 else
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
275 bt->order = mlk_alloc_renew0(bt->order, bt->ordersz);
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
276
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
277 bt->ordercur = porder = bt->order;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
278
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
279 for (size_t i = 0; i < bt->teamsz; ++i)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
280 if (bt->team[i] && character_ok(bt->team[i]->ch))
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
281 *porder++ = bt->team[i];
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
282 for (size_t i = 0; i < bt->enemiesz; ++i)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
283 if (bt->enemies[i] && character_ok(bt->enemies[i]->ch))
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
284 *porder++ = bt->enemies[i];
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
285
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 /* Now sort. */
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
287 qsort(bt->order, bt->ordersz, sizeof (*bt->order), cmp_order);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
288 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
289
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
290 struct battle_entity *
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
291 battle_current(const struct battle *bt)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
292 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
293 assert(bt);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
294
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
295 return *bt->ordercur;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
296 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
297
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
298 size_t
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
299 battle_index(const struct battle *bt)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
300 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
301 assert(bt);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
302
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
303 return bt->ordercur - bt->order;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
305
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 void
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
307 battle_attack(struct battle *bt,
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
308 struct character *source,
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
309 struct character *target)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 assert(character_ok(source));
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
313
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
314 /* Target is empty? select randomly. */
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
315 if (!target) {
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
316 if (is_team(bt, source))
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
317 target = random_select(bt->enemies, bt->enemiesz)->ch;
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
318 else
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
319 target = random_select(bt->team, bt->teamsz)->ch;
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
320 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
321
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
322 battle_state_attacking(battle_find(bt, source), battle_find(bt, target), bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
324
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 battle_cast(struct battle *bt,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 struct character *source,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 const struct spell *spell,
289
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
329 const struct selection *selection)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
330 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
331 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 assert(source);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
333 assert(spell);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
334 assert((unsigned int)source->mp >= spell->mp);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
335
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
336 /* TODO: animate. */
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
337 source->mp -= spell->mp;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 spell_action(spell, bt, source, selection);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
340
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
342 battle_use(struct battle *bt, const struct item *item, struct character *owner, struct character *target)
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
343 {
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
344 assert(bt);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
345 assert(item);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
346 assert(owner);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
347 assert(target);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
348
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
349 /*
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
350 * Change the state to check prior to execute the item so it can change to something else
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
351 * if needed.
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
352 */
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
353 battle_state_check(bt);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
354
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
355 inventory_consume(bt->inventory, item, 1);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
356 item_exec_battle(item, bt, owner, target);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
357 }
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
358
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
359 void
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
360 battle_next(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
361 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
363
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
364 if (!bt->ordercur)
232
085c2a02a93f rpg: some cleanups in battle
David Demelier <markand@malikania.fr>
parents: 230
diff changeset
365 battle_order(bt);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
366 else {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
367 if (bt->ordercur - bt->order + (size_t)1U >= bt->ordersz)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
368 battle_order(bt);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
369 else
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
370 bt->ordercur++;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
371 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
372
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
373 if (is_team(bt, battle_current(bt)->ch)) {
385
3f13dc6c0e37 rpg: separate battle and the bar, closes #2522
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
374 battle_bar_start(bt->bar, bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
375 battle_state_menu(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
376 } else
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
377 battle_state_ai(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
378 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
379
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
380 struct battle_entity *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
381 battle_find(struct battle *bt, const struct character *ch)
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
382 {
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
383 assert(bt);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
384
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
385 return find(bt, ch);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
386 }
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
387
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
388 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
389 battle_indicator_hp(struct battle *bt, const struct character *target, long amount)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
392 assert(target);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
393
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
394 const struct battle_entity *et = find(bt, target);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
395 struct indicator *id;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
396
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
397 if (!(bt->effects)) {
473
02b16dd49b54 core: trace -> mlk_trace
David Demelier <markand@malikania.fr>
parents: 472
diff changeset
398 mlk_tracef("unable to add id without a drawable_stack");
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
399 return;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
400 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
401
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 434
diff changeset
402 id = mlk_alloc_new0(1, sizeof (*id));
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
403 id->bti.color = BATTLE_INDICATOR_HP_COLOR;
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
404 id->bti.amount = labs(amount);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
405
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
406 /* TODO: positionate better. */
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
407 id->dw.x = et->x + target->sprites[CHARACTER_SPRITE_NORMAL]->cellw;
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
408 id->dw.y = et->y + target->sprites[CHARACTER_SPRITE_NORMAL]->cellh;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
409 id->dw.data = id;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 id->dw.update = indicator_update;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
411 id->dw.draw = indicator_draw;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
412 id->dw.finish = indicator_free;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
413
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 battle_indicator_start(&id->bti);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
415
449
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
416 if (mlk_drawable_stack_add(bt->effects, &id->dw) < 0)
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
417 mlk_drawable_finish(&id->dw);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
418 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
419
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
420 void
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 449
diff changeset
421 battle_handle_component(struct battle *bt, const union mlk_event *ev, enum battle_component comp)
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
422 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
423 assert(bt);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
424 assert(ev);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
425
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
426 if (comp & BATTLE_COMPONENT_BAR)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
427 battle_bar_handle(bt->bar, bt, ev);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
428 if ((comp & BATTLE_COMPONENT_ACTIONS) && bt->actions)
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 434
diff changeset
429 mlk_action_stack_handle(bt->actions, ev);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
430 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
431
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
432 void
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 449
diff changeset
433 battle_handle(struct battle *bt, const union mlk_event *ev)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
434 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
435 assert(bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
436 assert(ev);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
437
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
438 battle_state_handle(bt->state, bt, ev);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
439 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
440
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
441 void
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
442 battle_update_component(struct battle *bt, unsigned int ticks, enum battle_component comp)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
443 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
444 assert(bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
445
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
446 if (comp & BATTLE_COMPONENT_ENTITIES) {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
447 update_entities(bt->team, bt->teamsz, ticks);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
448 update_entities(bt->enemies, bt->enemiesz, ticks);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
449 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
450 if (comp & BATTLE_COMPONENT_BAR)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
451 battle_bar_update(bt->bar, bt, ticks);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
452 if ((comp & BATTLE_COMPONENT_ACTIONS) && bt->actions)
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 434
diff changeset
453 mlk_action_stack_update(bt->actions, ticks);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
454 if ((comp & BATTLE_COMPONENT_DRAWABLES) && bt->effects)
449
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
455 mlk_drawable_stack_update(bt->effects, ticks);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
456 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
457
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
458 int
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
459 battle_update(struct battle *bt, unsigned int ticks)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
460 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
461 assert(bt && bt->state);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
462
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
463 return battle_state_update(bt->state, bt, ticks);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
464 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
465
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
466 void
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
467 battle_draw_component(const struct battle *bt, enum battle_component comp)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
468 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
469 assert(bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
470
472
bc5483849614 core: texture -> mlk_texture
David Demelier <markand@malikania.fr>
parents: 468
diff changeset
471 if ((comp & BATTLE_COMPONENT_BACKGROUND) && mlk_texture_ok(bt->background))
bc5483849614 core: texture -> mlk_texture
David Demelier <markand@malikania.fr>
parents: 468
diff changeset
472 mlk_texture_scale(bt->background,
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
473 0, 0, bt->background->w, bt->background->h,
485
3ff1fe64d0cd core: window -> mlk_window
David Demelier <markand@malikania.fr>
parents: 474
diff changeset
474 0, 0, mlk_window.w, mlk_window.h,
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
475 0.f);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
476 if (comp & BATTLE_COMPONENT_ENTITIES) {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
477 draw_entities(bt, bt->team, bt->teamsz);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
478 draw_entities(bt, bt->enemies, bt->enemiesz);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
479 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
480 if (comp & BATTLE_COMPONENT_BAR)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
481 battle_bar_draw(bt->bar, bt);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
482 if ((comp & BATTLE_COMPONENT_ACTIONS) && bt->actions)
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 434
diff changeset
483 mlk_action_stack_draw(bt->actions);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
484 if ((comp & BATTLE_COMPONENT_DRAWABLES) && bt->effects)
449
f2f0e73ea9da core: drawable -> mlk_drawable
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
485 mlk_drawable_stack_draw(bt->effects);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
486 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
487
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
488 void
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
489 battle_draw(const struct battle *bt)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
490 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 385
diff changeset
491 assert(battle_ok(bt));
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
492
315
3bfaaf5342a9 cmake: add support for Visual Studio 2019
David Demelier <markand@malikania.fr>
parents: 314
diff changeset
493 battle_state_draw(bt->state, bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
494 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
495
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
496 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
497 battle_finish(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
498 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
499 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
500
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
501 if (bt->state)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
502 battle_state_finish(bt->state, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
503
460
8fa69c770569 examples: fix
David Demelier <markand@malikania.fr>
parents: 456
diff changeset
504 mlk_alloc_free(bt->order);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
505 memset(bt, 0, sizeof (*bt));
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
506 }