Freeciv-3.2
Loading...
Searching...
No Matches
unit.h
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
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#ifndef FC__UNIT_H
14#define FC__UNIT_H
15
16#ifdef __cplusplus
17extern "C" {
18#endif /* __cplusplus */
19
20/* utility */
21#include "bitvector.h"
22
23/* common */
24#include "base.h"
25#include "fc_interface.h"
26#include "fc_types.h"
27#include "map_types.h"
28#include "unittype.h"
29#include "vision.h"
30
31struct road_type;
32struct unit_move_data; /* Actually defined in "server/unittools.c". */
33
34/* Changing this enum will break network compatibility.
35 * Different orders take different parameters; see struct unit_order. */
37 /* Move without performing any action (dir) */
39 /* Perform activity (activity, extra) */
41 /* Pause to regain movement points (no parameters) */
43 /* Move; if necessary prompt for action/target when order executed (dir) */
45 /* Perform pre-specified action (action, target tile, sub target) */
47 /* and plenty more for later... */
49};
50
54
58
66 UU_NOT_TERRAIN, /* The upgraded unit could not survive. */
67 UU_UNSUITABLE_TRANSPORT, /* Can't upgrade inside current transport. */
68 UU_NOT_ACTIVITY /* Can't upgrade during this activity (e.g., CONVERT) */
69};
70
72 /* Codes treated as success: */
73 AR_OK, /* This will definitely work */
74 AR_OK_SRC_UNKNOWN, /* Source city's airlift capability is unknown */
75 AR_OK_DST_UNKNOWN, /* Dest city's airlift capability is unknown */
76 /* Codes treated as failure: */
77 AR_NO_MOVES, /* Unit has no moves left */
78 AR_WRONG_UNITTYPE, /* Can't airlift this type of unit */
79 AR_OCCUPIED, /* Can't airlift units with passengers */
80 AR_NOT_IN_CITY, /* Unit not in a city */
81 AR_BAD_SRC_CITY, /* Can't airlift from this src city */
82 AR_BAD_DST_CITY, /* Can't airlift to this dst city */
83 AR_SRC_NO_FLIGHTS, /* No flights available from src */
84 AR_DST_NO_FLIGHTS /* No flights available to dst */
85};
86
87struct unit_adv {
89};
90
91struct unit_order {
93 enum unit_activity activity; /* Only valid for ORDER_ACTIVITY. */
94 /* Only valid for ORDER_PERFORM_ACTION. Validity and meaning depend on
95 * 'action'. See action_target_kind and action_sub_target_kind */
96 int target;
98 /* Only valid for ORDER_PERFORM_ACTION */
99 int action;
100 /* Valid for ORDER_MOVE and ORDER_ACTION_MOVE. */
102};
103
104/* Used in the network protocol */
105#define SPECENUM_NAME unit_ss_data_type
106/* The player wants to be reminded to ask what actions the unit can perform
107 * to a certain target tile. */
108#define SPECENUM_VALUE0 USSDT_QUEUE
109/* The player no longer wants the reminder to ask what actions the unit can
110 * perform to a certain target tile. */
111#define SPECENUM_VALUE1 USSDT_UNQUEUE
112/* The player wants to record that the unit now belongs to the specified
113 * battle group. */
114#define SPECENUM_VALUE2 USSDT_BATTLE_GROUP
115/* The player wants the unit to stop bothering them unless:
116 * - a hostile units comes within 3 tiles
117 * - the unit has its hitpoints restored
118 * - the unit is bounced
119 * if 1, 0 to still be bothered. */
120#define SPECENUM_VALUE3 USSDT_SENTRY
121#include "specenum_gen.h"
122
123/* Used in the network protocol */
124#define SPECENUM_NAME server_side_agent
125#define SPECENUM_VALUE0 SSA_NONE
126#define SPECENUM_VALUE0NAME N_("?serveragent:None")
127#define SPECENUM_VALUE1 SSA_AUTOSETTLER
128#define SPECENUM_VALUE1NAME N_("Autosettlers")
129#define SPECENUM_VALUE2 SSA_AUTOEXPLORE
130#define SPECENUM_VALUE2NAME N_("Autoexplore")
131#define SPECENUM_COUNT SSA_COUNT
132#include "specenum_gen.h"
133
134struct unit;
135struct unit_list;
136
137struct unit {
138 const struct unit_type *utype; /* Cannot be NULL. */
139 struct tile *tile;
142 struct player *owner; /* Cannot be NULL. */
144 int id;
146
147 int upkeep[O_LAST]; /* unit upkeep with regards to the homecity */
148
150 int hp;
152 int fuel;
153
154 struct tile *goto_tile; /* May be NULL. */
155
157
158 /* The amount of work that has been done on the current activity. This
159 * is counted in turns but is multiplied by ACTIVITY_FACTOR (which allows
160 * fractional values in some cases). */
162
164
165 /* Previous activity, so it can be resumed without loss of progress
166 * if the user changes their mind during a turn. */
170
172 bool moved;
174
175 /* This value is set if the unit is done moving for this turn. This
176 * information is used by the client. The invariant is:
177 * - If the unit has no more moves, it's done moving.
178 * - If the unit is on a goto but is waiting, it's done moving.
179 * - Otherwise the unit is not done moving. */
181
182 struct unit *transporter; /* This unit is transported by ... */
183 struct unit_list *transporting; /* This unit transports ... */
184
186
187 /* The battlegroup ID: defined by the client but stored by the server. */
188#define MAX_NUM_BATTLEGROUPS (4)
189#define BATTLEGROUP_NONE (-1)
191
193 struct {
194 int length, index;
195 bool repeat; /* The path is to be repeated on completion. */
196 bool vigilant; /* Orders should be cleared if an enemy is met. */
199
200 /* The unit may want the player to choose an action. */
203
204 bool stay; /* Unit is prohibited from moving */
205
208
209 union {
210 struct {
211 /* Only used at the client (the server is omniscient; ./client/). */
212
214
215 int transported_by; /* Used for unit_short_info packets where we can't
216 * be sure that the information about the
217 * transporter is known. */
218 bool occupied; /* TRUE if at least one cargo on the transporter. */
219
220 /* Equivalent to pcity->client.color. Only for cityfounder units. */
223
225
226 /* Used in a follow up question about a selected action. */
229
230 struct {
231 /* Only used in the server (./ai/ and ./server/). */
232
233 bool debug;
234
235 struct unit_adv *adv;
237
238 /* ord_map and ord_city are the order index of this unit in tile.units
239 * and city.units_supported; they are only used for save/reload */
242
243 struct vision *vision;
247
248 /* The unit is in the process of dying. */
249 bool dying;
250
251 /* Call back to run on unit removal. */
252 void (*removal_callback)(struct unit *punit);
253
254 /* The upkeep that actually was paid. */
255 int upkeep_paid[O_LAST];
257 };
258};
259
260#ifdef FREECIV_DEBUG
261#define CHECK_UNIT(punit) \
262 (fc_assert(punit != NULL), \
263 fc_assert(unit_type_get(punit) != NULL), \
264 fc_assert(unit_owner(punit) != NULL), \
265 fc_assert(player_by_number(player_index(unit_owner(punit))) \
266 == unit_owner(punit)), \
267 fc_assert(game_unit_by_number(punit->id) != NULL))
268#else /* FREECIV_DEBUG */
269#define CHECK_UNIT(punit) /* Do nothing */
270#endif /* FREECIV_DEBUG */
271
272#define activity_type_list_iterate(_act_list_, _act_) \
273{ \
274 int _act_i_; \
275 for (_act_i_ = 0; _act_list_[_act_i_] != ACTIVITY_LAST; _act_i_++) { \
276 Activity_type_id _act_ = _act_list_[_act_i_];
277
278#define activity_type_list_iterate_end \
279 } \
280}
281
282/* Iterates over the types of unit activity. */
283#define activity_type_iterate(_act_) \
284{ \
285 Activity_type_id _act_; \
286 for (_act_ = 0; _act_ != ACTIVITY_LAST; _act_++) { \
287
288#define activity_type_iterate_end \
289 } \
290}
291
293
294#define tile_changing_activities_iterate(_act_) \
295{ \
296 activity_type_list_iterate(tile_changing_activities, _act_)
297
298#define tile_changing_activities_iterate_end \
299 activity_type_list_iterate_end \
300}
301
302bool are_unit_orders_equal(const struct unit_order *order1,
303 const struct unit_order *order2);
304
305int unit_shield_value(const struct unit *punit,
306 const struct unit_type *punittype,
307 const struct action *paction);
309 const struct unit *punit);
310bool unit_can_est_trade_route_here(const struct unit *punit);
313 const struct player *restriction,
314 const struct unit *punit,
315 const struct city *pdest_city);
316bool unit_can_airlift_to(const struct civ_map *nmap,
317 const struct unit *punit, const struct city *pcity)
318 fc__attribute((nonnull (3)));
319bool unit_has_orders(const struct unit *punit);
320
321bool could_unit_be_in_transport(const struct unit *pcargo,
322 const struct unit *ptrans);
323bool could_unit_load(const struct unit *pcargo, const struct unit *ptrans);
324bool can_unit_load(const struct unit *punit, const struct unit *ptrans);
325bool can_unit_unload(const struct unit *punit, const struct unit *ptrans);
327 const struct unit *pcargo,
328 const struct unit *ptrans);
329bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit);
330bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit);
331bool can_unit_change_homecity_to(const struct civ_map *nmap,
332 const struct unit *punit,
333 const struct city *pcity);
334bool can_unit_change_homecity(const struct civ_map *nmap,
335 const struct unit *punit);
338 struct unit *punit);
339bool can_unit_do_activity(const struct civ_map *nmap,
340 const struct unit *punit,
343 const struct unit *punit,
345 struct extra_type *target);
347 const struct unit *punit,
349 struct extra_type *target,
350 const struct tile *ptile);
354 struct extra_type *new_target);
355int get_activity_rate(const struct unit *punit);
356int get_activity_rate_this_turn(const struct unit *punit);
357int get_turns_for_activity_at(const struct unit *punit,
359 const struct tile *ptile,
360 struct extra_type *tgt);
362bool can_unit_do_autosettlers(const struct unit *punit);
364 const struct tile *ptile);
365bv_extras get_unit_tile_pillage_set(const struct tile *ptile);
366bool is_attack_unit(const struct unit *punit);
367bool is_martial_law_unit(const struct unit *punit);
368bool is_occupying_unit(const struct unit *punit);
369bool is_enter_borders_unit(const struct unit *punit);
370bool is_guard_unit(const struct unit *punit);
371bool is_special_unit(const struct unit *punit);
372bool unit_can_do_action(const struct unit *punit,
373 const action_id act_id);
374bool unit_can_do_action_result(const struct unit *punit,
375 enum action_result result);
376bool unit_can_do_action_sub_result(const struct unit *punit,
378bool is_square_threatened(const struct civ_map *nmap,
379 const struct player *pplayer,
380 const struct tile *ptile, bool omniscient);
381bool is_field_unit(const struct unit *punit);
382bool is_hiding_unit(const struct unit *punit);
383bool unit_can_add_or_build_city(const struct civ_map *nmap,
384 const struct unit *punit);
385
386struct astring; /* Forward declaration. */
387
388void unit_activity_astr(const struct unit *punit, struct astring *astr);
389void unit_upkeep_astr(const struct unit *punit, struct astring *astr);
390
391int get_transporter_capacity(const struct unit *punit);
392
393#define unit_home(_pu_) (game_city_by_number((_pu_)->homecity))
394#define is_unit_homeless(_pu_) (punit->homecity == IDENTITY_NUMBER_ZERO)
395#define unit_owner(_pu) ((_pu)->owner)
396#define unit_tile(_pu) ((_pu)->tile)
397struct player *unit_nationality(const struct unit *punit);
398void unit_tile_set(struct unit *punit, struct tile *ptile);
399
400
401struct unit *tile_allied_unit(const struct tile *ptile,
402 const struct player *pplayer);
403
404/**********************************************************************/
407static inline bool is_allied_unit_tile(const struct tile *ptile,
408 const struct player *pplayer)
409{
410 return NULL != tile_allied_unit(ptile, pplayer);
411}
412
413struct unit *tile_enemy_unit(const struct tile *ptile,
414 const struct player *pplayer);
415
416/**********************************************************************/
419static inline bool is_enemy_unit_tile(const struct tile *ptile,
420 const struct player *pplayer)
421{
422 return NULL != tile_enemy_unit(ptile, pplayer);
423}
424
425struct unit *tile_non_allied_unit(const struct tile *ptile,
426 const struct player *pplayer);
427
428/**********************************************************************/
431static inline bool is_non_allied_unit_tile(const struct tile *ptile,
432 const struct player *pplayer)
433{
434 return NULL != tile_non_allied_unit(ptile, pplayer);
435}
436
437struct unit *tile_other_players_unit(const struct tile *ptile,
438 const struct player *pplayer);
439
440/**********************************************************************/
443static inline bool is_other_players_unit_tile(const struct tile *ptile,
444 const struct player *pplayer)
445{
446 return NULL != tile_other_players_unit(ptile, pplayer);
447}
448
449struct unit *tile_non_attack_unit(const struct tile *ptile,
450 const struct player *pplayer);
451
452/**********************************************************************/
456static inline bool is_non_attack_unit_tile(const struct tile *ptile,
457 const struct player *pplayer)
458{
459 return NULL != tile_non_attack_unit(ptile, pplayer);
460}
461
462struct unit *unit_occupies_tile(const struct tile *ptile,
463 const struct player *pplayer);
464
465bool is_plr_zoc_srv(const struct player *unit_owner, const struct tile *ptile,
466 const struct civ_map *zmap);
467bool is_plr_zoc_client(const struct player *unit_owner, const struct tile *ptile,
468 const struct civ_map *zmap);
469
470/**********************************************************************/
477static inline bool is_my_zoc(const struct player *unit_owner, const struct tile *ptile,
478 const struct civ_map *zmap)
479{
480 return is_server()
482}
483
484bool unit_being_aggressive(const struct civ_map *nmap,
485 const struct unit *punit);
487
493
494struct unit *unit_virtual_create(struct player *pplayer, struct city *pcity,
495 const struct unit_type *punittype,
496 int veteran_level);
497void unit_virtual_destroy(struct unit *punit);
498bool unit_is_virtual(const struct unit *punit);
499void free_unit_orders(struct unit *punit);
500
501int get_transporter_occupancy(const struct unit *ptrans);
502struct unit *transporter_for_unit(const struct unit *pcargo);
503struct unit *transporter_for_unit_at(const struct unit *pcargo,
504 const struct tile *ptile);
505
508 const struct unit *punit,
509 const struct unit_type *to_unittype);
511 const struct unit *punit,
512 bool is_free);
514 const struct unit *punit,
515 char *buf, size_t bufsz);
516bool unit_can_convert(const struct civ_map *nmap, const struct unit *punit);
517
518int unit_pays_mp_for_action(const struct action *paction,
519 const struct unit *punit);
520
521int hp_gain_coord(const struct unit *punit);
522int unit_gain_hitpoints(const struct unit *punit);
523bool is_losing_hp(const struct unit *punit);
524bool unit_type_is_losing_hp(const struct player *pplayer,
525 const struct unit_type *punittype);
526
527bool unit_is_alive(int id);
528
529void *unit_ai_data(const struct unit *punit, const struct ai_type *ai);
530void unit_set_ai_data(struct unit *punit, const struct ai_type *ai,
531 void *data);
532
533int unit_bribe_cost(struct unit *punit, struct player *briber);
534
535bool unit_transport_load(struct unit *pcargo, struct unit *ptrans,
536 bool force);
537bool unit_transport_unload(struct unit *pcargo);
538struct unit *unit_transport_get(const struct unit *pcargo);
539
540#define unit_transported_server(_pcargo_) ((_pcargo_)->transporter != NULL)
541
542/* Evaluates parameter twice! */
543#define unit_transported_client(_pcargo_) \
544 ((_pcargo_)->client.transported_by != -1 \
545 || (_pcargo_)->transporter != NULL)
546
547bool unit_transported(const struct unit *pcargo);
548struct unit_list *unit_transport_cargo(const struct unit *ptrans);
549bool unit_transport_check(const struct unit *pcargo,
550 const struct unit *ptrans);
551bool unit_contained_in(const struct unit *pcargo, const struct unit *ptrans);
552int unit_cargo_depth(const struct unit *pcargo);
553int unit_transport_depth(const struct unit *ptrans);
554
555bool unit_is_cityfounder(const struct unit *punit);
556
557/* Iterate all transporters carrying '_pcargo', directly or indirectly. */
558#define unit_transports_iterate(_pcargo, _ptrans) { \
559 struct unit *_ptrans; \
560 for (_ptrans = unit_transport_get(_pcargo); NULL != _ptrans; \
561 _ptrans = unit_transport_get(_ptrans)) {
562#define unit_transports_iterate_end }}
563
564struct cargo_iter;
565size_t cargo_iter_sizeof(void) fc__attribute((const));
566
568 const struct unit *ptrans);
569#define unit_cargo_iterate(_ptrans, _pcargo) \
570 generic_iterate(struct cargo_iter, struct unit *, _pcargo, \
571 cargo_iter_sizeof, cargo_iter_init, _ptrans)
572#define unit_cargo_iterate_end generic_iterate_end
573
574bool unit_order_list_is_sane(const struct civ_map *nmap,
575 int length, const struct unit_order *orders);
576struct unit_order *create_unit_orders(const struct civ_map *nmap,
577 int length,
578 const struct unit_order *orders);
579
580#ifdef __cplusplus
581}
582#endif /* __cplusplus */
583
584#endif /* FC__UNIT_H */
char * incite_cost
Definition comments.c:75
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:73
static bool is_server(void)
enum unit_activity Activity_type_id
Definition fc_types.h:379
adv_unit_task
Definition fc_types.h:370
int action_id
Definition fc_types.h:389
@ O_LAST
Definition fc_types.h:101
static const int bufsz
Definition helpdlg.c:70
Definition ai.h:50
Definition city.h:320
Definition tile.h:50
enum adv_unit_task task
Definition unit.h:88
enum unit_activity activity
Definition unit.h:93
enum unit_orders order
Definition unit.h:92
int action
Definition unit.h:99
enum direction8 dir
Definition unit.h:101
int target
Definition unit.h:96
int sub_target
Definition unit.h:97
Definition unit.h:137
time_t action_timestamp
Definition unit.h:244
int upkeep[O_LAST]
Definition unit.h:147
bool has_orders
Definition unit.h:192
struct unit::@80 orders
bool occupied
Definition unit.h:218
enum action_decision action_decision_want
Definition unit.h:201
int battlegroup
Definition unit.h:190
enum unit_activity activity
Definition unit.h:156
int moves_left
Definition unit.h:149
int refcount
Definition unit.h:140
struct unit::@81::@83 client
int id
Definition unit.h:144
struct unit_list * transporting
Definition unit.h:183
int ord_city
Definition unit.h:241
bool moved
Definition unit.h:172
int ord_map
Definition unit.h:240
bool debug
Definition unit.h:233
int index
Definition unit.h:194
struct vision * vision
Definition unit.h:243
bool vigilant
Definition unit.h:196
int hp
Definition unit.h:150
int fuel
Definition unit.h:152
struct extra_type * changed_from_target
Definition unit.h:169
int current_form_turn
Definition unit.h:207
bool stay
Definition unit.h:204
bool colored
Definition unit.h:221
enum direction8 facing
Definition unit.h:141
struct unit::@81::@84 server
bool asking_city_name
Definition unit.h:224
struct tile * tile
Definition unit.h:139
struct extra_type * activity_target
Definition unit.h:163
struct act_prob * act_prob_cache
Definition unit.h:227
int activity_count
Definition unit.h:161
struct unit_order * list
Definition unit.h:197
enum unit_activity changed_from
Definition unit.h:167
struct unit_adv * adv
Definition unit.h:235
struct player * nationality
Definition unit.h:143
int transported_by
Definition unit.h:215
bool repeat
Definition unit.h:195
int color_index
Definition unit.h:222
struct unit_move_data * moving
Definition unit.h:246
int action_turn
Definition unit.h:245
int homecity
Definition unit.h:145
bool paradropped
Definition unit.h:173
bool done_moving
Definition unit.h:180
struct unit * transporter
Definition unit.h:182
int birth_turn
Definition unit.h:206
struct goods_type * carrying
Definition unit.h:185
struct tile * goto_tile
Definition unit.h:154
struct tile * action_decision_tile
Definition unit.h:202
const struct unit_type * utype
Definition unit.h:138
int veteran
Definition unit.h:151
int changed_from_count
Definition unit.h:168
struct player * owner
Definition unit.h:142
bool dying
Definition unit.h:249
enum unit_focus_status focus_status
Definition unit.h:213
enum server_side_agent ssa_controller
Definition unit.h:171
#define fc__attribute(x)
Definition support.h:99
size_t cargo_iter_sizeof(void) fc__attribute((const))
bool unit_can_do_action_sub_result(const struct unit *punit, enum action_sub_result sub_result)
Definition unit.c:387
static bool is_other_players_unit_tile(const struct tile *ptile, const struct player *pplayer)
Definition unit.h:443
bool can_unit_do_activity_targeted_at(const struct civ_map *nmap, const struct unit *punit, enum unit_activity activity, struct extra_type *target, const struct tile *ptile)
Definition unit.c:928
bool is_tile_activity(enum unit_activity activity)
Definition unit.c:1612
struct unit_order * create_unit_orders(const struct civ_map *nmap, int length, const struct unit_order *orders)
Definition unit.c:2842
enum unit_upgrade_result unit_transform_result(const struct civ_map *nmap, const struct unit *punit, const struct unit_type *to_unittype)
Definition unit.c:1964
bool unit_type_really_ignores_zoc(const struct unit_type *punittype)
Definition unit.c:1512
bool unit_type_is_losing_hp(const struct player *pplayer, const struct unit_type *punittype)
Definition unit.c:2248
bool is_terrain_change_activity(enum unit_activity activity)
Definition unit.c:1597
struct unit * tile_non_allied_unit(const struct tile *ptile, const struct player *pplayer)
Definition unit.c:1314
int unit_shield_value(const struct unit *punit, const struct unit_type *punittype, const struct action *paction)
Definition unit.c:222
int get_transporter_occupancy(const struct unit *ptrans)
Definition unit.c:1791
goto_route_type
Definition unit.h:55
@ ROUTE_GOTO
Definition unit.h:56
@ ROUTE_PATROL
Definition unit.h:56
bool can_unit_change_homecity_to(const struct civ_map *nmap, const struct unit *punit, const struct city *pcity)
Definition unit.c:473
void free_unit_orders(struct unit *punit)
Definition unit.c:1777
void unit_set_ai_data(struct unit *punit, const struct ai_type *ai, void *data)
Definition unit.c:2298
bool unit_is_alive(int id)
Definition unit.c:2261
bool unit_can_est_trade_route_here(const struct unit *punit)
Definition unit.c:292
bool is_occupying_unit(const struct unit *punit)
Definition unit.c:332
bool is_hiding_unit(const struct unit *punit)
Definition unit.c:434
int get_activity_rate_this_turn(const struct unit *punit)
Definition unit.c:534
int unit_pays_mp_for_action(const struct action *paction, const struct unit *punit)
Definition unit.c:2143
int get_turns_for_activity_at(const struct unit *punit, enum unit_activity activity, const struct tile *ptile, struct extra_type *tgt)
Definition unit.c:550
static bool is_enemy_unit_tile(const struct tile *ptile, const struct player *pplayer)
Definition unit.h:419
unit_focus_status
Definition unit.h:51
@ FOCUS_AVAIL
Definition unit.h:52
@ FOCUS_DONE
Definition unit.h:52
@ FOCUS_WAIT
Definition unit.h:52
bool unit_transport_load(struct unit *pcargo, struct unit *ptrans, bool force)
Definition unit.c:2378
struct unit * transporter_for_unit_at(const struct unit *pcargo, const struct tile *ptile)
Definition unit.c:1930
struct iterator * cargo_iter_init(struct cargo_iter *iter, const struct unit *ptrans)
Definition unit.c:2632
int unit_cargo_depth(const struct unit *pcargo)
Definition unit.c:2541
static bool is_non_attack_unit_tile(const struct tile *ptile, const struct player *pplayer)
Definition unit.h:456
enum unit_upgrade_result unit_upgrade_info(const struct civ_map *nmap, const struct unit *punit, char *buf, size_t bufsz)
Definition unit.c:2059
unit_orders
Definition unit.h:36
@ ORDER_ACTION_MOVE
Definition unit.h:44
@ ORDER_ACTIVITY
Definition unit.h:40
@ ORDER_FULL_MP
Definition unit.h:42
@ ORDER_MOVE
Definition unit.h:38
@ ORDER_LAST
Definition unit.h:48
@ ORDER_PERFORM_ACTION
Definition unit.h:46
void set_unit_activity(struct unit *punit, enum unit_activity new_activity)
Definition unit.c:1096
bool is_losing_hp(const struct unit *punit)
Definition unit.c:2236
bool is_targeted_activity(enum unit_activity activity)
Definition unit.c:1622
bool unit_can_add_or_build_city(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:456
struct unit * tile_non_attack_unit(const struct tile *ptile, const struct player *pplayer)
Definition unit.c:1347
int hp_gain_coord(const struct unit *punit)
Definition unit.c:2170
bool can_unit_change_homecity(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:489
bool is_plr_zoc_client(const struct player *unit_owner, const struct tile *ptile, const struct civ_map *zmap)
Definition unit.c:1464
struct player * unit_nationality(const struct unit *punit)
Definition unit.c:1253
bool unit_being_aggressive(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:1526
int get_activity_rate(const struct unit *punit)
Definition unit.c:503
bool can_unit_deboard_or_be_unloaded(const struct civ_map *nmap, const struct unit *pcargo, const struct unit *ptrans)
Definition unit.c:785
bool unit_transport_check(const struct unit *pcargo, const struct unit *ptrans)
Definition unit.c:2487
bool is_attack_unit(const struct unit *punit)
Definition unit.c:313
static bool is_allied_unit_tile(const struct tile *ptile, const struct player *pplayer)
Definition unit.h:407
const Activity_type_id tile_changing_activities[]
Definition unit.c:44
struct unit * unit_transport_get(const struct unit *pcargo)
Definition unit.c:2449
bool unit_transport_unload(struct unit *pcargo)
Definition unit.c:2398
bool is_build_activity(enum unit_activity activity)
Definition unit.c:1567
bool unit_contained_in(const struct unit *pcargo, const struct unit *ptrans)
Definition unit.c:2528
#define unit_owner(_pu)
Definition unit.h:395
int unit_gain_hitpoints(const struct unit *punit)
Definition unit.c:2191
enum unit_airlift_result test_unit_can_airlift_to(const struct civ_map *nmap, const struct player *restriction, const struct unit *punit, const struct city *pdest_city)
Definition unit.c:85
bool is_plr_zoc_srv(const struct player *unit_owner, const struct tile *ptile, const struct civ_map *zmap)
Definition unit.c:1395
bool can_unit_continue_current_activity(const struct civ_map *nmap, struct unit *punit)
Definition unit.c:849
int unit_bribe_cost(struct unit *punit, struct player *briber)
Definition unit.c:2312
void unit_upkeep_astr(const struct unit *punit, struct astring *astr)
Definition unit.c:1239
bool could_unit_load(const struct unit *pcargo, const struct unit *ptrans)
Definition unit.c:708
bool unit_is_cityfounder(const struct unit *punit)
Definition unit.c:2649
bool is_unit_activity_on_tile(enum unit_activity activity, const struct tile *ptile)
Definition unit.c:1131
bool can_unit_do_autosettlers(const struct unit *punit)
Definition unit.c:614
unit_upgrade_result
Definition unit.h:59
@ UU_NO_MONEY
Definition unit.h:62
@ UU_NOT_IN_CITY
Definition unit.h:63
@ UU_NO_UNITTYPE
Definition unit.h:61
@ UU_NOT_TERRAIN
Definition unit.h:66
@ UU_UNSUITABLE_TRANSPORT
Definition unit.h:67
@ UU_NOT_CITY_OWNER
Definition unit.h:64
@ UU_NOT_ENOUGH_ROOM
Definition unit.h:65
@ UU_OK
Definition unit.h:60
@ UU_NOT_ACTIVITY
Definition unit.h:68
bool is_field_unit(const struct unit *punit)
Definition unit.c:422
bool unit_can_do_action(const struct unit *punit, const action_id act_id)
Definition unit.c:367
bool unit_can_do_action_result(const struct unit *punit, enum action_result result)
Definition unit.c:377
bool is_martial_law_unit(const struct unit *punit)
Definition unit.c:324
void set_unit_activity_targeted(struct unit *punit, enum unit_activity new_activity, struct extra_type *new_target)
Definition unit.c:1113
struct unit * unit_virtual_create(struct player *pplayer, struct city *pcity, const struct unit_type *punittype, int veteran_level)
Definition unit.c:1632
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:814
bool unit_order_list_is_sane(const struct civ_map *nmap, int length, const struct unit_order *orders)
Definition unit.c:2657
const char * get_activity_text(enum unit_activity activity)
Definition unit.c:622
bv_extras get_unit_tile_pillage_set(const struct tile *ptile)
Definition unit.c:1146
int get_transporter_capacity(const struct unit *punit)
Definition unit.c:305
bool can_unit_unload(const struct unit *punit, const struct unit *ptrans)
Definition unit.c:760
bool is_enter_borders_unit(const struct unit *punit)
Definition unit.c:340
bool is_clean_activity(enum unit_activity activity)
Definition unit.c:1583
int unit_transport_depth(const struct unit *ptrans)
Definition unit.c:2559
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:830
void unit_activity_astr(const struct unit *punit, struct astring *astr)
Definition unit.c:1163
bool unit_can_help_build_wonder_here(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:266
bool can_unit_do_activity(const struct civ_map *nmap, const struct unit *punit, enum unit_activity activity)
Definition unit.c:876
struct unit * tile_other_players_unit(const struct tile *ptile, const struct player *pplayer)
Definition unit.c:1331
bool is_special_unit(const struct unit *punit)
Definition unit.c:358
void unit_virtual_destroy(struct unit *punit)
Definition unit.c:1737
struct unit * tile_enemy_unit(const struct tile *ptile, const struct player *pplayer)
Definition unit.c:1299
void unit_tile_set(struct unit *punit, struct tile *ptile)
Definition unit.c:1263
enum unit_upgrade_result unit_upgrade_test(const struct civ_map *nmap, const struct unit *punit, bool is_free)
Definition unit.c:1996
bool unit_can_airlift_to(const struct civ_map *nmap, const struct unit *punit, const struct city *pcity) fc__attribute((nonnull(3)))
Definition unit.c:194
bool can_unit_load(const struct unit *punit, const struct unit *ptrans)
Definition unit.c:733
bool unit_transported(const struct unit *pcargo)
Definition unit.c:2433
bool are_unit_orders_equal(const struct unit_order *order1, const struct unit_order *order2)
Definition unit.c:59
bool unit_is_virtual(const struct unit *punit)
Definition unit.c:2278
bool is_square_threatened(const struct civ_map *nmap, const struct player *pplayer, const struct tile *ptile, bool omniscient)
Definition unit.c:396
bool is_guard_unit(const struct unit *punit)
Definition unit.c:348
struct unit * unit_occupies_tile(const struct tile *ptile, const struct player *pplayer)
Definition unit.c:1368
struct unit_list * unit_transport_cargo(const struct unit *ptrans)
Definition unit.c:2459
void * unit_ai_data(const struct unit *punit, const struct ai_type *ai)
Definition unit.c:2290
bool unit_has_orders(const struct unit *punit)
Definition unit.c:210
struct unit * tile_allied_unit(const struct tile *ptile, const struct player *pplayer)
Definition unit.c:1276
struct unit * transporter_for_unit(const struct unit *pcargo)
Definition unit.c:1920
static bool is_non_allied_unit_tile(const struct tile *ptile, const struct player *pplayer)
Definition unit.h:431
unit_airlift_result
Definition unit.h:71
@ AR_SRC_NO_FLIGHTS
Definition unit.h:83
@ AR_OK_SRC_UNKNOWN
Definition unit.h:74
@ AR_OK_DST_UNKNOWN
Definition unit.h:75
@ AR_NO_MOVES
Definition unit.h:77
@ AR_BAD_DST_CITY
Definition unit.h:82
@ AR_NOT_IN_CITY
Definition unit.h:80
@ AR_OCCUPIED
Definition unit.h:79
@ AR_OK
Definition unit.h:73
@ AR_DST_NO_FLIGHTS
Definition unit.h:84
@ AR_WRONG_UNITTYPE
Definition unit.h:78
@ AR_BAD_SRC_CITY
Definition unit.h:81
static bool is_my_zoc(const struct player *unit_owner, const struct tile *ptile, const struct civ_map *zmap)
Definition unit.h:477
bool unit_can_convert(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:2043
bool activity_requires_target(enum unit_activity activity)
Definition unit.c:574
bool could_unit_be_in_transport(const struct unit *pcargo, const struct unit *ptrans)
Definition unit.c:676
bool can_unit_do_activity_targeted(const struct civ_map *nmap, const struct unit *punit, enum unit_activity activity, struct extra_type *target)
Definition unit.c:915