annotate examples/example-battle/main.c @ 227:befa2e855d3b

core: reinterface the alloc module
author David Demelier <markand@malikania.fr>
date Thu, 19 Nov 2020 10:48:46 +0100
parents 23a844fdc911
children 86b71e1f9dd5
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 * example-battle.c -- show how to use battle
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>
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
21 #include <stdlib.h>
192
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
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
24 #include <core/alloc.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <core/core.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <core/event.h>
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
27 #include <core/game.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <core/image.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <core/painter.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <core/panic.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <core/sprite.h>
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
32 #include <core/state.h>
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #include <core/sys.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include <core/texture.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #include <core/util.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #include <core/window.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #include <ui/align.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include <ui/label.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 #include <ui/theme.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 #include <ui/ui.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 #include <rpg/character.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #include <rpg/battle.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 #include <rpg/rpg.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 #include <rpg/spell.h>
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
209
23a844fdc911 examples: move all into subdirectories, closes #2513
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
48 #include "registry.h"
23a844fdc911 examples: move all into subdirectories, closes #2513
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
49 #include "spell-fire.h"
192
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 #define W 1280
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 #define H 720
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 adventurer_reset(struct character *ch)
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 /* TODO: this function should compute the attack thanks to the level. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 ch->hpmax = 120;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 ch->mpmax = 50;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 ch->atk = 50;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 ch->def = 50;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 ch->agt = 50;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 ch->luck = 50;
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 haunted_wood_reset(struct character *ch)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 ch->hpmax = ch->hp = 2000;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 ch->mpmax = ch->mp = 250;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 ch->atk = 178;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 ch->def = 80;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 ch->agt = 80;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 ch->luck = 100;
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 void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 black_cat_reset(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 ch->hpmax = ch->hp = 126;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 ch->mpmax = ch->mp = 38;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 ch->atk = 22;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 ch->def = 19;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 ch->agt = 21;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 ch->luck = 14;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 static struct character team[] = {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 .name = "Molko",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 .type = "Adventurer",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 .level = 1,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 .hp = 120,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 .mp = 50,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 .reset = adventurer_reset,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 .sprite = &registry_sprites[REGISTRY_TEXTURE_JOHN],
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 .spells = {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 &spell_fire
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 },
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 .name = "Fake Molko",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 .type = "Adventurer",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 .level = 1,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 .hp = 120,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 .mp = 50,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 .reset = adventurer_reset,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 .sprite = &registry_sprites[REGISTRY_TEXTURE_JOHN],
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 .spells = {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 &spell_fire
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 }
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 };
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 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 haunted_wood_strat(struct character *ch, struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 (void)ch;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
119
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 /* TODO: Select randomly. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 battle_attack(bt, bt->order_cur->ch, bt->team[0].ch);
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 black_cat_strat(struct character *ch, struct battle *bt)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 (void)ch;
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 /* TODO: Select randomly. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 battle_attack(bt, bt->order_cur->ch, bt->team[0].ch);
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
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 static struct character haunted_wood = {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 .name = "Haunted Wood",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 .type = "Wood",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 .level = 30,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 .reset = haunted_wood_reset,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 .sprite = &registry_sprites[REGISTRY_TEXTURE_HAUNTED_WOOD],
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 .exec = haunted_wood_strat
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 struct character black_cat = {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 .name = "Black Cat",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 .type = "Cat",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 .level = 6,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 .reset = black_cat_reset,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 .sprite = &registry_sprites[REGISTRY_TEXTURE_BLACK_CAT],
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 .exec = black_cat_strat
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 };
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
150
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 init(void)
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 if (!core_init() || !ui_init() || !rpg_init())
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 panic();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 if (!window_open("Example - Battle", W, H))
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 panic();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 registry_init();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 /* Set cursor in default theme. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 theme_default()->sprites[THEME_SPRITE_CURSOR] = &registry_sprites[REGISTRY_TEXTURE_CURSOR];
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
164
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
165 static struct state fight_state;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
166
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 static void
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
168 prepare_to_fight(void)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 {
227
befa2e855d3b core: reinterface the alloc module
David Demelier <markand@malikania.fr>
parents: 209
diff changeset
170 struct battle *bt = alloc_new0(sizeof (*bt));
192
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 // bt->enemies[0].ch = &haunted_wood;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 bt->team[0].ch = &team[0];
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 bt->team[1].ch = &team[1];
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
175
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 /* Positionate the single ennemy to the left. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 align(ALIGN_LEFT,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 &bt->enemies[0].x, &bt->enemies[0].y, haunted_wood.sprite->cellw, haunted_wood.sprite->cellh,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 0, 0, window.w, window.h);
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 /* Black cat is near the previous monster. */
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 bt->enemies[1].ch = &black_cat;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 bt->enemies[1].x = 500;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 bt->enemies[1].y = 100;
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 battle_start(bt);
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
187
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
188 fight_state.data = bt;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
189 game_switch(&fight_state, false);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
190 }
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
191
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
192
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
193 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
194 empty_handle(struct state *st, const union event *ev)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
195 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
196 (void)st;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
197
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
198 switch (ev->type) {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
199 case EVENT_QUIT:
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
200 game_quit();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
201 break;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
202 case EVENT_KEYDOWN:
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
203 if (ev->key.key == KEY_SPACE)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
204 prepare_to_fight();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
205 break;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
206 default:
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
207 break;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
208 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
210
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 static void
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
212 empty_draw(struct state *st)
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 {
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
214 (void)st;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
215
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
216 static const struct label info = {
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 .text = "Press <Space> to start a battle.",
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 .x = 10,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 .y = 10,
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 .flags = LABEL_FLAGS_SHADOW
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 };
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
222
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
223 painter_set_color(0x4f8fbaff);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
224 painter_clear();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
225 label_draw(&info);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
226 painter_present();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
227 }
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
228
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
229 static struct state empty_state = {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
230 .handle = empty_handle,
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
231 .draw = empty_draw
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
232 };
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
233
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
234 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
235 fight_handle(struct state *st, const union event *ev)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
236 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
237 battle_handle(st->data, ev);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
238 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
239
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
240 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
241 fight_update(struct state *st, unsigned int ticks)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
242 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
243 struct battle *bt = st->data;
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
244
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
245 if (battle_update(bt, ticks))
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
246 game_switch(&empty_state, false);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
247 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
248
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
249 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
250 fight_draw(struct state *st)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
251 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
252 painter_set_color(0x000000ff);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
253 painter_clear();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
254 battle_draw(st->data);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
255 painter_present();
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
256 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
257
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
258 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
259 fight_finish(struct state *st)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
260 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
261 battle_finish(st->data);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
262 free(st->data);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
263 }
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
264
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
265 static struct state fight_state = {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
266 .handle = fight_handle,
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
267 .update = fight_update,
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
268 .draw = fight_draw,
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
269 .finish = fight_finish,
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
270 };
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
271
207
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
272 static void
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
273 run(void)
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
274 {
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
275 game_switch(&empty_state, true);
133926e08d6e examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
276 game_loop();
192
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
278
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 static void
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 quit(void)
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 {
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 registry_finish();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 theme_finish();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 window_finish();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 sys_finish();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 }
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
287
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 int
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 main(int argc, char **argv)
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 --argc;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 ++argv;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
293
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 init();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 run();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 quit();
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
297
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 return 0;
4ad7420ab678 rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 }