annotate libmlk-rpg/rpg/battle.c @ 298:196264679079

misc: remove usage of bool
author David Demelier <markand@malikania.fr>
date Wed, 10 Mar 2021 18:49:08 +0100
parents 9948e288925b
children d01e83210ca2
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 *
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <core/alloc.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <core/event.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <core/font.h>
208
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
27 #include <core/music.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <core/painter.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <core/sprite.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <core/texture.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <core/util.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include <core/window.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include <ui/align.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #include <ui/frame.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #include <ui/label.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #include <ui/theme.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include "battle.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 #include "battle-indicator.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 #include "battle-state.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 #include "character.h"
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
43 #include "inventory.h"
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
44 #include "item.h"
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 #include "spell.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 struct indicator {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 struct drawable dw;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 struct battle_indicator bti;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 };
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
52 static int
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 indicator_update(struct drawable *dw, unsigned int ticks)
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 struct indicator *id = dw->data;
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 return battle_indicator_update(&id->bti, ticks);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 }
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 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 indicator_draw(struct drawable *dw)
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 const struct indicator *id = dw->data;
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 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
66 }
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 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 indicator_free(struct drawable *dw)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 struct indicator *id = dw->data;
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 battle_indicator_finish(&id->bti);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 free(id);
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 static struct battle_entity *
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 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
79 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 struct battle_entity *et;
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 BATTLE_TEAM_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 if (et->ch == ch)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 return et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 BATTLE_ENEMY_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 if (et->ch == ch)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 return et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 return NULL;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
91
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
92 static struct battle_entity *
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
93 random_select(struct battle_entity *group, size_t groupsz)
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
94 {
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
95 struct battle_entity *ret = NULL, *et = NULL;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
96
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
97 do {
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
98 et = &group[util_nrand(0, groupsz - 1)];
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 if (et->ch)
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
101 ret = et;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
102 } while (!ret);
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
103
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
104 return ret;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
105 }
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
106
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 static int
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 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
109 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 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
111 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
112
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 return et1->ch->agt < et2->ch->agt;
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
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
116 static int
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
117 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
118 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 for (size_t i = 0; i < BATTLE_TEAM_MAX; ++i)
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
120 if (bt->team[i].ch == ch)
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
121 return 1;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
123 return 0;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 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
128 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 unsigned int lw;
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
130 struct sprite *sprite;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
131
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 /* Show the character name below its sprite. */
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
133 sprite = et->ch->sprites[CHARACTER_SPRITE_NORMAL];
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
134
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 et->name.text = et->ch->name;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 et->name.flags = LABEL_FLAGS_SHADOW;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 label_query(&et->name, &lw, NULL);
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
138 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
139 et->name.x = et->x + (sprite->cellw / 2) - (lw / 2);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
141
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 positionate_names(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 struct battle_entity *et;
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 BATTLE_TEAM_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 if (character_ok(et->ch))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 positionate_name(et, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 BATTLE_ENEMY_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 if (character_ok(et->ch))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 positionate_name(et, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 positionate_team(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 struct battle_entity *et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 unsigned int requirement = 0, nmemb = 0, spacing;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 int x, y;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 BATTLE_TEAM_FOREACH(bt, et) {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 /* 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
164 if (et->x != 0 || et->y != 0)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 return;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
167 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
168 nmemb++;
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
169 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
170 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
172
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 /* TODO: compute a correct x placement. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 spacing = (window.h - requirement) / (nmemb + 1);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 x = window.w - 200;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 y = spacing;
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 BATTLE_TEAM_FOREACH(bt, et) {
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
179 if (battle_entity_ok(et)) {
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 et->x = x;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 et->y = y;
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
182 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
183 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
186
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 positionate_bar(struct battle *bt)
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 /* Bar is located at bottom. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 bt->bar.w = window.w;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 bt->bar.h = window.h * 0.12;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 bt->bar.x = 0;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 bt->bar.y = window.h - bt->bar.h;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 battle_bar_positionate(&bt->bar, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 static void
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
200 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
201 {
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
202 for (size_t i = 0; i < entitiesz; ++i) {
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
203 if (battle_entity_ok(&entities[i]))
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
204 battle_entity_draw(&entities[i], bt);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
205 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
207
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 static void
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
209 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
210 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 for (size_t i = 0; i < entitiesz; ++i) {
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
212 if (battle_entity_ok(&entities[i]))
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
213 battle_entity_update(&entities[i], ticks);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 battle_start(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 struct battle_entity *et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
221
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
222 BATTLE_TEAM_FOREACH(bt, et)
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
223 if (battle_entity_ok(et))
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
224 battle_entity_init(et);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
225 BATTLE_ENEMY_FOREACH(bt, et)
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
226 if (battle_entity_ok(et))
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
227 battle_entity_init(et);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
228
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 positionate_team(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 positionate_bar(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 positionate_names(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
232
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 /* Start the state "opening" animation. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 battle_state_opening(bt);
208
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
235
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
236 /* Play music if present. */
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
237 if (bt->music[0])
c0e0d4accae8 rpg: add music support in battle
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
238 music_play(bt->music[0], MUSIC_LOOP, 0);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
240
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 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
243 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 assert(st);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
246
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 if (bt->state)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 battle_state_finish(bt->state, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
249
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 bt->state = st;
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 battle_order(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 struct battle_entity *et, **porder;
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 /* First, put a pointer for every enemy/team member. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 porder = &bt->order[0];
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 BATTLE_TEAM_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 if (character_ok(et->ch))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 *porder++ = et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 BATTLE_ENEMY_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 if (character_ok(et->ch))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 *porder++ = et;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
267
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 /* Now sort. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 qsort(bt->order, porder - bt->order, sizeof (*porder), cmp_order);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
271
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 void
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
273 battle_attack(struct battle *bt,
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
274 struct character *source,
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
275 struct character *target)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 assert(character_ok(source));
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
279
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
280 /* Target is empty? select randomly. */
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
281 if (!target) {
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
282 if (is_team(bt, source))
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
283 target = random_select(bt->enemies, BATTLE_ENEMY_MAX)->ch;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
284 else
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
285 target = random_select(bt->team, BATTLE_TEAM_MAX)->ch;
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
286 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
287
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
288 battle_state_attacking(bt, source, target);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
290
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 battle_cast(struct battle *bt,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 struct character *source,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 const struct spell *spell,
289
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
295 const struct selection *selection)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 assert(source);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 assert(spell);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 assert((unsigned int)source->mp >= spell->mp);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
301
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
302 /* TODO: animate. */
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 source->mp -= spell->mp;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 spell_action(spell, bt, source, selection);
232
085c2a02a93f rpg: some cleanups in battle
David Demelier <markand@malikania.fr>
parents: 230
diff changeset
305 battle_state_check(bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
307
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
309 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
310 {
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
311 assert(bt);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
312 assert(item);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
313 assert(owner);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
314 assert(target);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
315
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
316 /*
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
317 * 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
318 * if needed.
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
319 */
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
320 battle_state_check(bt);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
321
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
322 inventory_consume(bt->inventory, item, 1);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
323 item_exec_battle(item, bt, owner, target);
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
324 }
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
325
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
326 void
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 battle_next(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 assert(bt);
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 battle_bar_reset(&bt->bar);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
332
232
085c2a02a93f rpg: some cleanups in battle
David Demelier <markand@malikania.fr>
parents: 230
diff changeset
333 if (!bt->order_cur) {
085c2a02a93f rpg: some cleanups in battle
David Demelier <markand@malikania.fr>
parents: 230
diff changeset
334 battle_order(bt);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 bt->order_cur = bt->order[bt->order_curindex = 0];
232
085c2a02a93f rpg: some cleanups in battle
David Demelier <markand@malikania.fr>
parents: 230
diff changeset
336 } else {
289
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
337 for (++bt->order_curindex; bt->order_curindex < BATTLE_ENTITY_MAX; ++bt->order_curindex) {
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
338 if (battle_entity_ok(bt->order[bt->order_curindex])) {
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
339 bt->order_cur = bt->order[bt->order_curindex];
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
340 break;
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
341 }
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
342 }
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
343
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
344 /* End of "turn". */
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
345 if (bt->order_curindex >= BATTLE_ENTITY_MAX) {
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
346 battle_order(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 bt->order_cur = bt->order[bt->order_curindex = 0];
289
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
348 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
350
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 /* Change state depending on the kind of entity. */
286
3991779aaba9 adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents: 261
diff changeset
352 if (is_team(bt, bt->order_cur->ch)) {
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 battle_bar_open_menu(&bt->bar);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 battle_state_menu(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 } else
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 battle_state_ai(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
358
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
359 struct battle_entity *
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
360 battle_find(struct battle *bt, const struct character *ch)
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
361 {
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
362 assert(bt);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
363
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
364 return find(bt, ch);
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
365 }
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
366
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 void
290
9948e288925b rpg: add support for items in battle
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
368 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
369 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
371 assert(target);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
372
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 const struct battle_entity *et = find(bt, target);
227
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
374 struct indicator *id = alloc_new0(sizeof (*id));
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
375
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
376 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
377 id->bti.amount = labs(amount);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
378
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
379 /* TODO: positionate better. */
235
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
380 id->dw.x = et->x + target->sprites[CHARACTER_SPRITE_NORMAL]->cellw;
fb304a94a05c rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents: 232
diff changeset
381 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
382 id->dw.data = id;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 id->dw.update = indicator_update;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
384 id->dw.draw = indicator_draw;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
385 id->dw.finish = indicator_free;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
386
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
387 battle_indicator_start(&id->bti);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
388
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
389 if (drawable_stack_add(&bt->effects, &id->dw) < 0)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 drawable_finish(&id->dw);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
392
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
393 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
394 battle_handle(struct battle *bt, const union event *ev)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
395 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
396 assert(bt && bt->state);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
397 assert(ev);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
398
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
399 /* Handle actions. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
400 action_stack_handle(&bt->actions[0], ev);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
401 action_stack_handle(&bt->actions[1], ev);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
402
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
403 /* Handling of action is disallowed if there are pending actions. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
404 if (action_stack_completed(&bt->actions[0]))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
405 battle_state_handle(bt->state, bt, ev);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
406 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
407
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
408 int
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
409 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
410 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
411 assert(bt && bt->state);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
412
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
413 action_stack_update(&bt->actions[0], ticks);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 action_stack_update(&bt->actions[1], ticks);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
415 drawable_stack_update(&bt->effects, ticks);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
416
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
417 update_entities(bt->team, UTIL_SIZE(bt->team), ticks);
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
418 update_entities(bt->enemies, UTIL_SIZE(bt->enemies), ticks);
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
419
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
420 /* Game cannot update if the actions[0] stack isn't completed. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
421 if (!action_stack_completed(&bt->actions[0]))
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 290
diff changeset
422 return 0;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
423
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
424 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
425 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
426
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
427 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
428 battle_draw(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
429 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
430 assert(bt && bt->state);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
431
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
432 painter_set_color(0xffffffff);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
433 painter_clear();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
434
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
435 if (bt->background && texture_ok(bt->background))
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
436 texture_scale(bt->background,
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
437 0, 0, bt->background->w, bt->background->h,
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
438 0, 0, window.w, window.h,
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
439 0.f);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
440
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
441 /* Draw entities. */
261
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
442 draw_entities(bt, bt->team, UTIL_SIZE(bt->team));
bfde372bf152 core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
443 draw_entities(bt, bt->enemies, UTIL_SIZE(bt->enemies));
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
444
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
445 battle_bar_draw(&bt->bar, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
446
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
447 action_stack_draw(&bt->actions[0]);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
448 action_stack_draw(&bt->actions[1]);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
449
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
450 drawable_stack_draw(&bt->effects);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
451
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
452 return battle_state_draw(bt->state, bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
453 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
454
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
455 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
456 battle_finish(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
457 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
458 assert(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
459
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
460 if (bt->state)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
461 battle_state_finish(bt->state, bt);
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 drawable_stack_finish(&bt->effects);
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 action_stack_finish(&bt->actions[0]);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
466 action_stack_finish(&bt->actions[1]);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
467
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
468 memset(bt, 0, sizeof (*bt));
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
469 }