2 * Empire - A multi-player, client/server Internet based war game.
3 * Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
4 * Ken Stevens, Steve McClure
6 * This program 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 2 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, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
23 * related information and legal notices. It is expected that any future
24 * projects/authors will amend these files as needed.
28 * fort.c: Increase the fortification value of land units
30 * Known contributors to this file:
53 int fort_amt, hard_amt, mob_used;
56 extern int land_mob_max;
59 if (!snxtitem(&ni, EF_LAND, player->argp[1]))
61 p = getstarg(player->argp[2], "Amount: ", buf);
62 if (p == 0 || *p == 0)
65 if (fort_amt > land_mob_max)
66 fort_amt = land_mob_max;
68 while (nxtitem(&ni, (s_char *)&land)) {
69 if (!player->owner || land.lnd_own == 0)
71 if (land.lnd_type < 0 || land.lnd_type > lnd_maxno) {
72 pr("bad unit type %d (#%d)\n",
73 land.lnd_type, ni.cur);
77 getland(land.lnd_uid,&land);
78 if (land.lnd_mobil < 0)
80 if (land.lnd_ship >= 0) {
81 pr("%s is on a ship and can't be fortified\n",
88 /* This is use for things like "fort * -67" which will
89 use all mobility down to leaving 67 left. */
91 hard_amt = land.lnd_mobil + hard_amt;
98 hard_amt = min(land.lnd_mobil, hard_amt);
100 if ((land.lnd_harden + hard_amt) > land_mob_max)
101 hard_amt = land_mob_max - land.lnd_harden;
103 eng = is_engineer(land.lnd_x, land.lnd_y);
106 hard_amt = ((float)hard_amt * 1.5);
108 if ((land.lnd_harden + hard_amt) > land_mob_max)
109 hard_amt = land_mob_max - land.lnd_harden;
111 /* Ok, set the mobility used */
114 /* Now, if an engineer helped, it's really only 2/3rds of
117 mob_used = (int)((float)mob_used / 1.5);
119 /* If we increased it, but not much, we gotta take at least 1
121 if (mob_used <= 0 && hard_amt > 0)
124 land.lnd_mobil -= mob_used;
125 if (land.lnd_mobil < 0)
128 land.lnd_harden += hard_amt;
129 land.lnd_harden = min(land.lnd_harden, land_mob_max);
131 pr("%s hardened to %d\n", prland(&land),
134 putland(land.lnd_uid,&land);
138 pr("%s: No unit(s)\n", player->argp[1]);
140 pr("%s: No unit(s)\n", "");
143 pr("%d unit%s\n", nunits, splur(nunits));
148 is_engineer(int x, int y)
153 snxtitem_xy(&ni, EF_LAND, x,y);
154 while(nxtitem(&ni, (s_char *)&land)){
155 if (lchr[(int)land.lnd_type].l_flags & L_ENGINEER)