/* radmap.c */
extern int deltx(struct range *, coord);
extern int delty(struct range *, coord);
-extern void radmap(int, int, int, int, double);
-extern void rad_map_set(natid, int, int, int, int);
+extern void radmap(int, int, int, double, int, double);
+extern void rad_map_set(natid, int, int, int, double, int);
/* rej.c */
extern int setrel(natid, natid, int);
extern int setcont(natid, natid, int);
}
if (type == EF_SHIP) {
rad_map_set(player->cnum, leader->x, leader->y, leader->effic,
- (int)techfact(leader->tech,
- mchr[leader->type].m_vrnge));
+ leader->tech, mchr[leader->type].m_vrnge);
}
if (cp == NULL || *cp == '\0')
cp = &dirch[DIR_STOP];
{
char *cp;
double tf;
- double tech;
+ double tlev;
+ int spy;
struct nstr_item ni;
struct nstr_sect ns;
union empobj_storage item;
case NS_AREA:
if (!snxtsct(&ns, cp))
return RET_SYN;
- tech = tfact(player->cnum, 8.0);
+ tlev = getnatp(player->cnum)->nat_level[NAT_TLEV];
while (nxtsct(&ns, &item.sect)) {
if (item.sect.sct_type != SCT_RADAR)
continue;
if (!player->owner)
continue;
radmap(item.sect.sct_x, item.sect.sct_y, item.sect.sct_effic,
- (int)(tech * 2.0), 0.0);
+ tlev, 16, 0.0);
}
break;
case NS_LIST:
if (type == EF_SHIP) {
if (mchr[(int)item.ship.shp_type].m_flags & M_SONAR)
tf = techfact(item.ship.shp_tech, 1.0);
- tech = techfact(item.ship.shp_tech,
- mchr[(int)item.ship.shp_type].m_vrnge);
+ spy = mchr[item.ship.shp_type].m_vrnge;
} else {
if (!(lchr[(int)item.land.lnd_type].l_flags & L_RADAR)) {
pr("%s can't use radar!\n", prland(&item.land));
pr("Units on ships can't use radar!\n");
continue;
}
- tech = techfact(item.land.lnd_tech,
- lchr[item.land.lnd_type].l_spy);
+ spy = lchr[item.land.lnd_type].l_spy;
}
pr("%s at ", obj_nameof(&item.gen));
- radmap(item.gen.x, item.gen.y, item.gen.effic, (int)tech, tf);
+ radmap(item.gen.x, item.gen.y, item.gen.effic,
+ item.gen.tech, spy, tf);
}
break;
default:
#include "ship.h"
#include "xy.h"
+static int rad_range(int, double, int);
+
/* More dynamic world sized buffers. We create 'em once, and then
* never again. No need to keep creating/tearing apart. We may
* want to do this in other places too where it doesn't matter. */
/*
* Draw a radar map for radar at CX,CY.
- * EFF is the radar's efficiency, and RANGE its range at 100%
- * efficiency.
+ * EFF is the radar's efficiency, TLEV its tech level, SPY its power.
* Submarines are detected at fraction SEESUB of the range.
*/
void
-radmap(int cx, int cy, int eff, int range, double seesub)
+radmap(int cx, int cy, int eff, double tlev, int spy, double seesub)
{
int visib, rng;
struct sctstr sect;
int x, y;
int row;
int n;
+ int range = rad_range(eff, tlev, spy);
int changed = 0;
if (!radbuf)
}
memset(visbuf, 0, (WORLD_Y * (WORLD_X + 1)));
- range = (int)(range * (eff / 100.0));
- if (range < 1)
- range = 1;
pr("%s efficiency %d%%, max range %d\n",
xyas(cx, cy, player->cnum), eff, range);
snxtsct_dist(&ns, cx, cy, range);
/*
* Update OWNER's bmap for radar at CX,CY.
- * EFF is the radar's efficiency, and RANGE its range at 100%
- * efficiency.
+ * EFF is the radar's efficiency, TLEV its tech level, SPY its power.
*/
void
-rad_map_set(natid owner, int cx, int cy, int eff, int range)
+rad_map_set(natid owner, int cx, int cy, int eff, double tlev, int spy)
{
struct nstr_sect ns;
struct sctstr sect;
+ int range = rad_range(eff, tlev, spy);
int changed = 0;
char ch;
- range = (int)(range * (eff / 100.0));
- if (range < 1)
- range = 1;
snxtsct_dist(&ns, cx, cy, range);
while (nxtsct(&ns, §)) {
if (sect.sct_own == owner
if (changed)
writemap(owner);
}
+
+/*
+ * Range of a radar with EFF efficiency, TLEV tech, and SPY power.
+ */
+static int
+rad_range(int eff, double tlev, int spy)
+{
+ int range;
+
+ range = (int)techfact(tlev, spy);
+ range = (int)(range * (eff / 100.0));
+ if (range < 1)
+ range = 1;
+ return range;
+}
coord newy;
int stopping = 0;
double mobcost;
- double tech; /* for mapping */
char dp[80];
int navigate;
putship(mlp->unit.ship.shp_uid, &mlp->unit.ship);
/* Now update the map for this ship */
- tech = techfact(mlp->unit.ship.shp_tech,
- ((struct mchrstr *)mlp->chrp)->m_vrnge);
rad_map_set(mlp->unit.ship.shp_own,
mlp->unit.ship.shp_x, mlp->unit.ship.shp_y,
- mlp->unit.ship.shp_effic, (int)tech);
+ mlp->unit.ship.shp_effic, mlp->unit.ship.shp_tech,
+ ((struct mchrstr *)mlp->chrp)->m_vrnge);
}
if (QEMPTY(list))
return stopping;