10015
|
1 |
/*
|
|
2 |
* Hedgewars, a free turn based strategy game
|
|
3 |
* Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com>
|
|
4 |
*
|
|
5 |
* This program is free software; you can redistribute it and/or
|
|
6 |
* modify it under the terms of the GNU General Public License
|
|
7 |
* as published by the Free Software Foundation; either version 2
|
|
8 |
* of the License, or (at your option) any later version.
|
|
9 |
*
|
|
10 |
* This program is distributed in the hope that it will be useful,
|
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13 |
* GNU General Public License for more details.
|
|
14 |
*
|
|
15 |
* You should have received a copy of the GNU General Public License
|
|
16 |
* along with this program; if not, write to the Free Software
|
|
17 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
18 |
*/
|
|
19 |
|
|
20 |
/**
|
|
21 |
* This file defines a data structure for a hedgewars team.
|
|
22 |
*
|
|
23 |
* Teams are used in several different contexts in Hedgewars, and some of these require
|
|
24 |
* extra information about teams. For example, the weaponset is important
|
|
25 |
* to the engine, but not for ini reading/writing, and with the team statistics it is the
|
|
26 |
* other way around. To keep things simple, the data structure can hold all information
|
|
27 |
* used in any context. On the downside, that means we can't use static typing to ensure
|
|
28 |
* that team information is "complete" for a particular purpose.
|
|
29 |
*/
|
|
30 |
#ifndef TEAM_H_
|
|
31 |
#define TEAM_H_
|
|
32 |
|
|
33 |
|
|
34 |
#include "weapon.h"
|
|
35 |
#include "../hwconsts.h"
|
|
36 |
|
|
37 |
#include <stdbool.h>
|
|
38 |
#include <stdint.h>
|
|
39 |
|
|
40 |
#define TEAM_DEFAULT_HEALTH 100
|
|
41 |
|
|
42 |
/**
|
|
43 |
* Struct representing a single keybinding.
|
|
44 |
*/
|
|
45 |
typedef struct {
|
|
46 |
char *action;
|
|
47 |
char *binding;
|
|
48 |
} flib_binding;
|
|
49 |
|
|
50 |
typedef struct {
|
|
51 |
char *name;
|
|
52 |
char *hat; //!< e.g. hair_yellow; References a .png file in Data/Graphics/Hats
|
|
53 |
|
|
54 |
//! Statistics. They are irrelevant for the engine or server,
|
|
55 |
//! but provided for ini reading/writing by the frontend.
|
|
56 |
int rounds;
|
|
57 |
int kills;
|
|
58 |
int deaths;
|
|
59 |
int suicides;
|
|
60 |
|
|
61 |
int difficulty; //!< 0 = human, 1 = most difficult bot ... 5 = least difficult bot (somewhat counterintuitive)
|
|
62 |
|
|
63 |
//! Transient setting used in game setup
|
|
64 |
int initialHealth;
|
|
65 |
flib_weaponset *weaponset;
|
|
66 |
} flib_hog;
|
|
67 |
|
|
68 |
typedef struct {
|
|
69 |
flib_hog hogs[HEDGEHOGS_PER_TEAM];
|
|
70 |
char *name;
|
|
71 |
char *grave; //!< e.g. "Bone"; References a .png file in Data/Graphics/Graves
|
|
72 |
char *fort; //!< e.g. "Castle"; References a series of files in Data/Forts
|
|
73 |
char *voicepack; //!< e.g. "Classic"; References a directory in Data/Sounds/voices
|
|
74 |
char *flag; //!< e.g. "hedgewars"; References a .png file in Data/Graphics/Flags
|
|
75 |
|
|
76 |
flib_binding *bindings;
|
|
77 |
int bindingCount;
|
|
78 |
|
|
79 |
//! Statistics. They are irrelevant for the engine or server,
|
|
80 |
//! but provided for ini reading/writing by the frontend.
|
|
81 |
int rounds;
|
|
82 |
int wins;
|
|
83 |
int campaignProgress;
|
|
84 |
|
|
85 |
//! Transient settings used in game setup
|
|
86 |
int colorIndex; //!< Index into a color table
|
|
87 |
int hogsInGame; //!< The number of hogs that will actually play
|
|
88 |
bool remoteDriven; //!< true for non-local teams in a network game
|
|
89 |
char *ownerName; //!< Username of the owner of a team in a network game
|
|
90 |
} flib_team;
|
|
91 |
|
|
92 |
/**
|
|
93 |
* Free all memory associated with the team
|
|
94 |
*/
|
|
95 |
void flib_team_destroy(flib_team *team);
|
|
96 |
|
|
97 |
/**
|
|
98 |
* Loads a team, returns NULL on error. Destroy this team using flib_team_destroy.
|
|
99 |
* This will not fill in the fields marked as "transient" in the structs above.
|
|
100 |
*/
|
|
101 |
flib_team *flib_team_from_ini(const char *filename);
|
|
102 |
|
|
103 |
/**
|
|
104 |
* Write the team to an ini file. Attempts to retain extra ini settings
|
|
105 |
* that were already present. Note that not all fields of a team struct
|
|
106 |
* are stored in the ini, some are only used intermittently to store
|
|
107 |
* information about a team in the context of a game.
|
|
108 |
*
|
|
109 |
* The flib_team can handle "difficulty" on a per-hog basis, but it
|
|
110 |
* is only written per-team in the team file. The difficulty of the
|
|
111 |
* first hog is used for the entire team when writing.
|
|
112 |
*/
|
|
113 |
int flib_team_to_ini(const char *filename, const flib_team *team);
|
|
114 |
|
|
115 |
/**
|
|
116 |
* Set the same weaponset for every hog in the team
|
|
117 |
*/
|
|
118 |
int flib_team_set_weaponset(flib_team *team, const flib_weaponset *set);
|
|
119 |
|
|
120 |
/**
|
|
121 |
* Set the same initial health for every hog.
|
|
122 |
*/
|
|
123 |
void flib_team_set_health(flib_team *team, int health);
|
|
124 |
|
|
125 |
/**
|
|
126 |
* Create a deep copy of a team. Returns NULL on failure.
|
|
127 |
*/
|
|
128 |
flib_team *flib_team_copy(const flib_team *team);
|
|
129 |
|
|
130 |
#endif /* TEAM_H_ */
|