annotate libmlk-rpg/mlk/rpg/battle-state-check.c @ 434:4e78f045e8c0

rpg: cleanup hierarchy
author David Demelier <markand@malikania.fr>
date Sat, 15 Oct 2022 21:24:17 +0200
parents src/libmlk-rpg/rpg/battle-state-check.c@8f59201dc76b
children 25a56ca53ac2
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-state-check.c -- battle state (check status)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
378
460c78706989 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 320
diff changeset
4 * Copyright (c) 2020-2022 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 <stdlib.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <string.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
431
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
23 #include <mlk/core/alloc.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
24 #include <mlk/core/panic.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
25 #include <mlk/core/sprite.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
26 #include <mlk/core/texture.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
27 #include <mlk/core/trace.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
29 #include "battle-state-check.h"
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
30 #include "battle-state-lost.h"
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
31 #include "battle-state-victory.h"
384
c458441ff472 rpg: more asserts, const and cleanups
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
32 #include "battle-state.h"
c458441ff472 rpg: more asserts, const and cleanups
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
33 #include "battle.h"
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include "character.h"
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 struct fadeout {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 struct character *ch;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 int x;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 int y;
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
40 struct drawable dw;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 unsigned int alpha;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 unsigned int elapsed;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 };
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
45 static int
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
46 fadeout_update(struct drawable *dw, unsigned int ticks)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
48 struct fadeout *fade = dw->data;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 fade->elapsed += ticks;
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 if (fade->elapsed >= 8) {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 fade->elapsed = 0;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
230
86b71e1f9dd5 rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents: 227
diff changeset
55 if (fade->alpha == 0)
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
56 return 1;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 fade->alpha -= 10;
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
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
61 return 0;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 static void
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
65 fadeout_draw(struct drawable *dw)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
67 const struct fadeout *fade = dw->data;
289
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
68 struct sprite *sprite = fade->ch->sprites[CHARACTER_SPRITE_NORMAL];
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
289
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
70 texture_set_alpha_mod(sprite->texture, fade->alpha);
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
71 sprite_draw(sprite, 0, 0, fade->x, fade->y);
63d9fb56c609 rpg: rework selection
David Demelier <markand@malikania.fr>
parents: 254
diff changeset
72 texture_set_alpha_mod(sprite->texture, 255);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 static void
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
76 fadeout_finish(struct drawable *dw)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
78 free(dw->data);
192
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 fadeout(struct battle *bt, struct battle_entity *et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 struct fadeout *fade;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
86 if (!bt->effects) {
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 398
diff changeset
87 tracef("can't create a fadeout effect without a drawable_stack");
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
88 return;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
89 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
91 fade = alloc_new0(sizeof (*fade));
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 fade->ch = et->ch;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 fade->x = et->x;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 fade->y = et->y;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 fade->alpha = 250;
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
96 fade->dw.data = fade;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
97 fade->dw.draw = fadeout_draw;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
98 fade->dw.update = fadeout_update;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
99 fade->dw.finish = fadeout_finish;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
101 if (drawable_stack_add(bt->effects, &fade->dw) < 0)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 free(fade);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
105 static int
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 is_dead(const struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 const struct battle_entity *et;
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 BATTLE_TEAM_FOREACH(bt, et) {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 if (!character_ok(et->ch))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 continue;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 if (et->ch->hp > 0)
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
114 return 0;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
116
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
117 return 1;
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
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
120 static int
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 is_won(const struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 const struct battle_entity *et;
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 BATTLE_ENEMY_FOREACH(bt, et)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 if (character_ok(et->ch))
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
127 return 0;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
128
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
129 return 1;
192
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 clean(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
135 for (size_t i = 0; i < bt->enemiesz; ++i) {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
136 if (bt->enemies[i] && character_ok(bt->enemies[i]->ch) && bt->enemies[i]->ch->hp == 0) {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
137 fadeout(bt, bt->enemies[i]);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
138 bt->enemies[i] = NULL;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
139 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
140 }
192
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
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 289
diff changeset
143 static int
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 update(struct battle_state *st, struct battle *bt, unsigned int ticks)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 (void)st;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 (void)ticks;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
149 battle_state_check_update(bt);
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
150
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
151 return 0;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
152 }
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
153
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
154 static void
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
155 draw(const struct battle_state *st, const struct battle *bt)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
156 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
157 (void)st;
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
158
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
159 battle_state_check_draw(bt);
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
160 }
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
161
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
162 static void
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
163 finish(struct battle_state *st, struct battle *bt)
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
164 {
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
165 (void)bt;
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
166
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
167 free(st);
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
168 }
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
169
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
170 void
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
171 battle_state_check_update(struct battle *bt)
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
172 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
173 assert(battle_ok(bt));
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
174
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 clean(bt);
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 if (is_dead(bt))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 battle_state_lost(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 else if (is_won(bt))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 battle_state_victory(bt);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 else
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 battle_next(bt);
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
183 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
185 void
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
186 battle_state_check_draw(const struct battle *bt)
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
187 {
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
188 assert(battle_ok(bt));
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
189
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
190 battle_draw_component(bt, BATTLE_COMPONENT_ALL);
192
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 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 battle_state_check(struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 {
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
196 assert(battle_ok(bt));
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
197
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
198 struct battle_state *self;
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
199
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
200 self = alloc_new0(sizeof (*self));
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
201 self->data = bt;
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
202 self->update = update;
398
14ce7c4871e3 rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents: 384
diff changeset
203 self->draw = draw;
382
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
204 self->finish = finish;
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
205
43d155668a55 rpg: expose battle state functions
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
206 battle_switch(bt, self);
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 }