author | Wuzzy <Wuzzy2@mail.ru> |
Sun, 22 Oct 2017 00:48:38 +0200 | |
changeset 12736 | 7cbb0241d31c |
parent 10017 | de822cd3df3a |
permissions | -rw-r--r-- |
/* * Hedgewars, a free turn based strategy game * Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** * This file defines a data structure for a hedgewars team. * * Teams are used in several different contexts in Hedgewars, and some of these require * extra information about teams. For example, the weaponset is important * to the engine, but not for ini reading/writing, and with the team statistics it is the * other way around. To keep things simple, the data structure can hold all information * used in any context. On the downside, that means we can't use static typing to ensure * that team information is "complete" for a particular purpose. */ #ifndef TEAM_H_ #define TEAM_H_ #include "weapon.h" #include "../hwconsts.h" #include <stdbool.h> #include <stdint.h> #define TEAM_DEFAULT_HEALTH 100 /** * Struct representing a single keybinding. */ typedef struct { char *action; char *binding; } flib_binding; typedef struct { char *name; char *hat; //!< e.g. hair_yellow; References a .png file in Data/Graphics/Hats //! Statistics. They are irrelevant for the engine or server, //! but provided for ini reading/writing by the frontend. int rounds; int kills; int deaths; int suicides; int difficulty; //!< 0 = human, 1 = most difficult bot ... 5 = least difficult bot (somewhat counterintuitive) //! Transient setting used in game setup int initialHealth; flib_weaponset *weaponset; } flib_hog; typedef struct { flib_hog hogs[HEDGEHOGS_PER_TEAM]; char *name; char *grave; //!< e.g. "Bone"; References a .png file in Data/Graphics/Graves char *fort; //!< e.g. "Castle"; References a series of files in Data/Forts char *voicepack; //!< e.g. "Classic"; References a directory in Data/Sounds/voices char *flag; //!< e.g. "hedgewars"; References a .png file in Data/Graphics/Flags flib_binding *bindings; int bindingCount; //! Statistics. They are irrelevant for the engine or server, //! but provided for ini reading/writing by the frontend. int rounds; int wins; int campaignProgress; //! Transient settings used in game setup int colorIndex; //!< Index into a color table int hogsInGame; //!< The number of hogs that will actually play bool remoteDriven; //!< true for non-local teams in a network game char *ownerName; //!< Username of the owner of a team in a network game } flib_team; /** * Free all memory associated with the team */ void flib_team_destroy(flib_team *team); /** * Loads a team, returns NULL on error. Destroy this team using flib_team_destroy. * This will not fill in the fields marked as "transient" in the structs above. */ flib_team *flib_team_from_ini(const char *filename); /** * Write the team to an ini file. Attempts to retain extra ini settings * that were already present. Note that not all fields of a team struct * are stored in the ini, some are only used intermittently to store * information about a team in the context of a game. * * The flib_team can handle "difficulty" on a per-hog basis, but it * is only written per-team in the team file. The difficulty of the * first hog is used for the entire team when writing. */ int flib_team_to_ini(const char *filename, const flib_team *team); /** * Set the same weaponset for every hog in the team */ int flib_team_set_weaponset(flib_team *team, const flib_weaponset *set); /** * Set the same initial health for every hog. */ void flib_team_set_health(flib_team *team, int health); /** * Create a deep copy of a team. Returns NULL on failure. */ flib_team *flib_team_copy(const flib_team *team); #endif /* TEAM_H_ */