2 * Empire - A multi-player, client/server Internet based war game.
3 * Copyright (C) 1986-2015, Dave Pare, Jeff Bailey, Thomas Ruschak,
4 * Ken Stevens, Steve McClure, Markus Armbruster
6 * Empire is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 * See files README, COPYING and CREDITS in the root of the source
22 * tree for related information and legal notices. It is expected
23 * that future projects/authors will amend these files as needed.
27 * control.c: Military control functions
29 * Known contributors to this file:
31 * Markus Armbruster, 2014
40 #include "prototypes.h"
45 * Does the player->owner have military control of this sector?
48 military_control(struct sctstr *sp)
54 if (sp->sct_oldown != sp->sct_own) {
55 snxtitem_xy(&ni, EF_LAND, sp->sct_x, sp->sct_y);
56 while (nxtitem(&ni, &land)) {
57 if (land.lnd_own == sp->sct_own)
58 tot_mil += land.lnd_item[I_MILIT];
60 if ((sp->sct_item[I_MILIT] + tot_mil) * 10 < sp->sct_item[I_CIVIL])
68 * Ask user to confirm abandonment of sector SP, if any.
69 * If removing AMNT commodities of type VTYPE and the land units in
70 * LIST would abandon their sector, ask the user to confirm.
71 * All land units in LIST must be in this sector. LIST may be null.
72 * Return zero when abandonment was declined, else non-zero.
75 abandon_askyn(struct sctstr *sp, i_type vtype, int amnt,
76 struct ulist *land_list)
81 * First, would we be abandoning it? If not, just return that
82 * it's ok to move out.
84 if (!would_abandon(sp, vtype, amnt, land_list))
87 sprintf(prompt, "Do you really want to abandon %s [yn]? ",
88 xyas(sp->sct_x, sp->sct_y, player->cnum));
94 * Would removing this stuff from SP abandon it?
95 * Consider removal of AMNT commodities of type VTYPE and the land
97 * All land units in LIST must be in this sector. LIST may be null.
100 would_abandon(struct sctstr *sp, i_type vtype, int amnt,
101 struct ulist *land_list)
103 int mil, civs, nland;
105 if (vtype != I_CIVIL && vtype != I_MILIT)
108 mil = sp->sct_item[I_MILIT];
109 civs = sp->sct_item[I_CIVIL];
111 if (vtype == I_MILIT)
113 if (vtype == I_CIVIL)
116 if (!sp->sct_own || civs > 0 || mil > 0)
118 nland = unitsatxy(sp->sct_x, sp->sct_y, 0, 0, 1);
120 nland -= emp_quelen(&land_list->queue);