/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
- * Ken Stevens, Steve McClure
+ * Copyright (C) 1986-2013, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
*
- * This program is free software; you can redistribute it and/or modify
+ * Empire 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ---
*
*
* Known contributors to this file:
* Steve McClure, 2000
+ * Markus Armbruster, 2004-2011
*/
#include <config.h>
#include <stdlib.h>
+#include "chance.h"
#include "file.h"
#include "land.h"
#include "map.h"
static char **rad;
static char *radbuf;
-void
+int
satmap(int x, int y, int eff, int range, int flags, int type)
{
struct sctstr sect;
int changed = 0;
long crackle;
signed char noise[100];
- char selection[1024];
if (!eff)
- return;
+ return RET_OK;
if (!radbuf)
radbuf = malloc(WORLD_Y * MAPWIDTH(1));
if (!radbuf || !rad) {
pr("Memory error in satmap, tell the deity.\n");
- return;
+ return RET_FAIL;
}
range = range * (eff / 100.0);
noise[100 * n / (100 - eff)] = 1;
}
- /* Have to convert to player coords, since it gets converted
- back from there */
- sprintf(selection, "@%s:%d", xyas(x, y, player->cnum), range);
-
if (type == EF_BAD || type == EF_SECTOR) {
- if (type == EF_SECTOR) /* Use ?conditionals */
- snxtsct(&ns, selection);
- else
- snxtsct_dist(&ns, x, y, range);
+ snxtsct_dist(&ns, x, y, range);
+ if (type == EF_SECTOR && !snxtsct_use_condarg(&ns))
+ return RET_SYN;
+
blankfill(radbuf, &ns.range, 1);
if (flags & P_S) {
if (flags & P_S) {
if (sect.sct_own && sect.sct_own != player->cnum) {
satdisp_sect(§, (flags & P_I) ? 5 : 50);
+ changed += map_set(player->cnum, sect.sct_x, sect.sct_y,
+ dchr[sect.sct_type].d_mnem, 0);
++count;
if (opt_HIDDEN)
setcont(player->cnum, sect.sct_own, FOUND_FLY);
if ((type == EF_BAD || type == EF_SHIP) &&
(flags & P_S || flags & P_I)) {
- if (type == EF_SHIP)
- snxtitem(&ni, EF_SHIP, selection, NULL);
- else
- snxtitem_dist(&ni, EF_SHIP, x, y, range);
+ snxtitem_dist(&ni, EF_SHIP, x, y, range);
+ if (type == EF_SHIP && !snxtitem_use_condarg(&ni))
+ return RET_SYN;
crackle = count = 0;
if (flags & P_S) {
pr("%4d %4d %-16.16s %-25.25s ",
ship.shp_own, ship.shp_uid,
mchr[(int)ship.shp_type].m_name, ship.shp_name);
- prxy("%4d,%-4d ", ship.shp_x, ship.shp_y, player->cnum);
+ prxy("%4d,%-4d ", ship.shp_x, ship.shp_y);
pr("%3d%%\n", ship.shp_effic);
++count;
if (opt_HIDDEN)
if ((type == EF_BAD || type == EF_LAND) &&
(flags & P_S || flags & P_I)) {
- if (type == EF_LAND)
- snxtitem(&ni, EF_LAND, selection, NULL);
- else
- snxtitem_dist(&ni, EF_LAND, x, y, range);
+ snxtitem_dist(&ni, EF_LAND, x, y, range);
+ if (type == EF_LAND && !snxtitem_use_condarg(&ni))
+ return RET_SYN;
crackle = count = 0;
if (flags & P_S) {
pr("%4d %4d %-16.16s ",
land.lnd_own, land.lnd_uid,
lchr[(int)land.lnd_type].l_name);
- prxy("%4d,%-4d", land.lnd_x, land.lnd_y, player->cnum);
+ prxy("%4d,%-4d", land.lnd_x, land.lnd_y);
pr("%3d%%\n", land.lnd_effic);
++count;
if (opt_HIDDEN)
pr("%s\n", rad[row]);
pr("\n(c) 1989 Imaginative Images Inc.\n");
}
+ return RET_OK;
}
void
void
satdisp_sect(struct sctstr *sp, int acc)
{
- prxy("%4d,%-4d ", sp->sct_x, sp->sct_y, player->cnum);
+ prxy("%4d,%-4d ", sp->sct_x, sp->sct_y);
pr("%c %3d %3d %3d %3d %3d %4d %4d %4d %4d %4d %4d %5d\n",
dchr[sp->sct_type].d_mnem,
sp->sct_own, roundintby((int)sp->sct_effic, acc / 2),
roundintby(sp->sct_item[I_IRON], acc),
roundintby(sp->sct_item[I_PETROL], acc),
roundintby(sp->sct_item[I_FOOD], acc));
- map_set(player->cnum, sp->sct_x, sp->sct_y, dchr[sp->sct_type].d_mnem,
- 0);
}
void
pr("\t%4d %4d %-16.16s %-25.25s ",
ship.shp_own, ship.shp_uid,
mchr[(int)ship.shp_type].m_name, ship.shp_name);
- prxy("%4d,%-4d ", ship.shp_x, ship.shp_y, player->cnum);
+ prxy("%4d,%-4d ", ship.shp_x, ship.shp_y);
pr("%3d%%\n", ship.shp_effic);
}
pr("\t%4d %4d %-16.16s ",
land.lnd_own, land.lnd_uid, lchr[(int)land.lnd_type].l_name);
- prxy("%4d,%-4d ", land.lnd_x, land.lnd_y, player->cnum);
+ prxy("%4d,%-4d ", land.lnd_x, land.lnd_y);
pr("%3d%%\n", land.lnd_effic);
}