Freeciv-3.4
Loading...
Searching...
No Matches
animals.c
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - 2004 The Freeciv Project Team
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18/* utility */
19#include "rand.h" /* fc_rand() */
20
21/* common */
22#include "ai.h"
23#include "game.h"
24#include "map.h"
25#include "movement.h"
26#include "player.h"
27#include "research.h"
28#include "tech.h"
29#include "tile.h"
30
31/* server */
32#include "aiiface.h"
33#include "barbarian.h"
34#include "nation.h"
35#include "plrhand.h"
36#include "srv_main.h"
37#include "stdinhand.h"
38#include "techtools.h"
39#include "unittools.h"
40
41/* ai */
42#include "difficulty.h"
43
44#include "animals.h"
45
46/************************************************************************/
49static const struct unit_type *animal_for_terrain(struct terrain *pterr)
50{
51 if (pterr->num_animals == 0) {
52 return nullptr;
53 } else {
54 return pterr->animals[fc_rand(pterr->num_animals)];
55 }
56}
57
58/************************************************************************/
61static void place_animal(struct player *plr, int sqrdist)
62{
63 struct tile *ptile = rand_map_pos(&(wld.map));
64 const struct unit_type *ptype;
65
67 if (tile_has_extra(ptile, pextra)) {
68 /* Animals should not displace huts */
69 /* FIXME: could animals not entering nor frightening huts appear here? */
70 return;
71 }
73
74 if (unit_list_size(ptile->units) > 0) {
75 /* Below we check against enemy units nearby. Here we make sure
76 * there's no multiple animals in the very same tile. */
77 return;
78 }
79
80 circle_iterate(&(wld.map), ptile, sqrdist, check) {
81 if (tile_city(check) != NULL
83 return;
84 }
86
88
90 struct unit *punit;
91
93
94 punit = create_unit(plr, ptile, ptype, 0, 0, -1);
95
97 }
98}
99
100/************************************************************************/
104{
105 struct nation_type *anination;
106 struct player *plr;
107 struct research *presearch;
108 int i;
109
110 if (wld.map.server.animals <= 0) {
111 return;
112 }
113
115
117 return;
118 }
119
121 if (plr == NULL) {
122 return;
123 }
124 /* Freeciv-web depends on AI-status being set already before server_player_init() */
125 set_as_ai(plr);
127
130
132
133 server.nbarbarians++;
134
136 plr->unassigned_user = TRUE;
137 plr->is_connected = FALSE;
139 plr->economic.gold = 100;
140
141 plr->phase_done = TRUE;
142
145
146 presearch = research_get(plr);
149
150 /* Ensure that we are at war with everyone else */
152
153 CALL_PLR_AI_FUNC(gained_control, plr, plr);
154
156 /* Send research info after player info, else the client will complain
157 * about invalid team. */
159
160 for (i = 0;
162 i++) {
163 place_animal(plr, 2 * 2 + 1 * 1);
164 }
165}
#define CALL_PLR_AI_FUNC(_func, _player,...)
Definition ai.h:377
const char * default_ai_type_name(void)
Definition aiiface.c:249
static const struct unit_type * animal_for_terrain(struct terrain *pterr)
Definition animals.c:49
void create_animals(void)
Definition animals.c:103
static void place_animal(struct player *plr, int sqrdist)
Definition animals.c:61
void barbarian_initial_wars(struct player *barbarians)
Definition barbarian.c:765
char * incite_cost
Definition comments.c:77
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
Definition dialogs_g.h:74
void set_ai_level_directer(struct player *pplayer, enum ai_level level)
Definition difficulty.c:39
#define extra_type_by_rmcause_iterate_end
Definition extras.h:358
#define extra_type_by_rmcause_iterate(_rmcause, _extra)
Definition extras.h:353
#define _(String)
Definition fcintl.h:67
struct civ_game game
Definition game.c:62
struct world wld
Definition game.c:63
#define fc_assert_ret(condition)
Definition log.h:192
struct tile * rand_map_pos(const struct civ_map *nmap)
Definition map.c:1228
#define circle_iterate(nmap, center_tile, sq_radius, tile_itr)
Definition map.h:398
#define circle_iterate_end
Definition map.h:401
bool can_exist_at_tile(const struct civ_map *nmap, const struct unit_type *utype, const struct tile *ptile)
Definition movement.c:278
struct government * init_government_of_nation(const struct nation_type *pnation)
Definition nation.c:657
#define NO_NATION_SELECTED
Definition nation.h:30
bool player_set_nation(struct player *pplayer, struct nation_type *pnation)
Definition player.c:849
#define ANON_USER_NAME
Definition player.h:48
#define set_as_ai(plr)
Definition player.h:234
void send_player_all_c(struct player *src, struct conn_list *dest)
Definition plrhand.c:1131
struct player * server_create_player(int player_id, const char *ai_tname, struct rgbcolor *prgbcolor, bool allow_ai_type_fallbacking)
Definition plrhand.c:1896
struct nation_type * pick_a_nation(const struct nation_list *choices, bool ignore_conflicts, bool needs_startpos, enum barbarian_type barb_type)
Definition plrhand.c:2458
void server_player_init(struct player *pplayer, bool initmap, bool needs_team)
Definition plrhand.c:1620
void assign_player_colors(void)
Definition plrhand.c:1736
#define fc_rand(_size)
Definition rand.h:56
struct research * research_get(const struct player *pplayer)
Definition research.c:130
void player_nation_defaults(struct player *pplayer, struct nation_type *pnation, bool set_name)
Definition srv_main.c:2625
struct packet_game_info info
Definition game.h:89
int animals
Definition map_types.h:109
struct civ_map::@44::@46 server
enum ai_level skill_level
enum barbarian_type barbarian_type
Definition player.h:122
struct player_ai ai_common
Definition player.h:288
char username[MAX_LEN_NAME]
Definition player.h:252
bool is_connected
Definition player.h:296
struct government * government
Definition player.h:258
struct player_economic economic
Definition player.h:284
bool phase_done
Definition player.h:263
bool unassigned_user
Definition player.h:253
Definition tile.h:50
struct unit_list * units
Definition tile.h:58
Definition unit.h:140
struct civ_map map
#define sz_strlcpy(dest, src)
Definition support.h:195
#define TRUE
Definition support.h:46
#define FALSE
Definition support.h:47
void init_tech(struct research *research, bool update)
Definition techtools.c:1094
void send_research_info(const struct research *presearch, const struct conn_list *dest)
Definition techtools.c:293
void give_initial_techs(struct research *presearch, int num_random_techs)
Definition techtools.c:1188
struct city * tile_city(const struct tile *ptile)
Definition tile.c:83
#define tile_terrain(_tile)
Definition tile.h:115
#define tile_has_extra(ptile, pextra)
Definition tile.h:152
static bool is_non_allied_unit_tile(const struct tile *ptile, const struct player *pplayer, bool everyone_non_allied)
Definition unit.h:443
void send_unit_info(struct conn_list *dest, struct unit *punit)
Definition unittools.c:2882
struct unit * create_unit(struct player *pplayer, struct tile *ptile, const struct unit_type *type, int veteran_level, int homecity_id, int moves_left)
Definition unittools.c:1610
bool utype_player_already_has_this_unique(const struct player *pplayer, const struct unit_type *putype)
Definition unittype.c:1953
#define MAP_NATIVE_WIDTH
#define MAP_NATIVE_HEIGHT