Mercurial > molko
annotate libmlk-rpg/rpg/character.c @ 298:196264679079
misc: remove usage of bool
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 10 Mar 2021 18:49:08 +0100 |
parents | 3991779aaba9 |
children | f04b4ee04db3 |
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 * character.c -- character definition |
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 |
230
86b71e1f9dd5
rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
21 #include <core/sprite.h> |
86b71e1f9dd5
rpg: add movements in battle
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
22 |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
23 #include <assets/sql/character-save.h> |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
24 #include <assets/sql/character-load.h> |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
25 |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include "character.h" |
235
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
27 #include "equipment.h" |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
28 #include "save.h" |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
286
diff
changeset
|
30 int |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
31 character_ok(const struct character *ch) |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 { |
286
3991779aaba9
adventure: initial test of spawn
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
33 return ch && ch->name && ch->reset && sprite_ok(ch->sprites[CHARACTER_SPRITE_NORMAL]); |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 } |
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 const char * |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 character_status_string(enum character_status status) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 { |
235
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
39 /* |
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
40 * We expect the user to only specify one status as character_status |
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
41 * is a bitmask. |
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
42 */ |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 switch (status) { |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 case CHARACTER_STATUS_POISON: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 return "poison"; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 default: |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 return "normal"; |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 } |
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 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 character_reset(struct character *ch) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 { |
235
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
54 assert(character_ok(ch)); |
192
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 ch->reset(ch); |
235
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
57 |
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
58 /* For all equipments, apply its equip function. */ |
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
59 for (int i = 0; i < CHARACTER_EQUIPMENT_NUM; ++i) |
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
60 if (ch->equipments[i]) |
fb304a94a05c
rpg: prepare equipment
David Demelier <markand@malikania.fr>
parents:
230
diff
changeset
|
61 equipment_equip(ch->equipments[i], ch); |
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 void |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 character_exec(struct character *ch, struct battle *bt) |
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 assert(character_ok(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 if (ch->exec) |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 ch->exec(ch, bt); |
4ad7420ab678
rpg: add minimalist battle system, continue #2477 @60h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 } |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
72 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
286
diff
changeset
|
73 int |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
74 character_save(const struct character *ch, struct save *s) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
75 { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
76 assert(ch); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
77 assert(save_ok(s)); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
78 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
79 return save_exec(s, (const char *)sql_character_save, "s iii i iiiiii", |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
80 ch->name, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
81 ch->hp, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
82 ch->mp, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
83 ch->level, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
84 ch->team_order, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
85 ch->hpbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
86 ch->mpbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
87 ch->atkbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
88 ch->defbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
89 ch->agtbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
90 ch->luckbonus |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
91 ); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
92 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
93 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
286
diff
changeset
|
94 int |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
95 character_load(struct character *ch, struct save *s) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
96 { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
97 assert(ch); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
98 assert(save_ok(s)); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
99 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
100 struct save_stmt stmt; |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
286
diff
changeset
|
101 int ret; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
102 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
286
diff
changeset
|
103 if (save_stmt_init(s, &stmt, (const char *)sql_character_load, "s", ch->name) < 0) |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
286
diff
changeset
|
104 return -1; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
105 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
106 ret = save_stmt_next(&stmt, "iii i iiiiii", |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
107 &ch->hp, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
108 &ch->mp, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
109 &ch->level, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
110 &ch->team_order, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
111 &ch->hpbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
112 &ch->mpbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
113 &ch->atkbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
114 &ch->defbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
115 &ch->agtbonus, |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
116 &ch->luckbonus |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
117 ); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
118 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
119 save_stmt_finish(&stmt); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
120 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
286
diff
changeset
|
121 return 0; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
122 } |