(map_char): New.
(draw_map): Use it.  Wilderness and plains owned by other players are
now displayed as '?'.
(radmap2): Display wilderness and plains as '?'.
(satmap): Call satdisp() for all sectors owned by other players.
This commit is contained in:
Markus Armbruster 2004-02-25 20:18:18 +00:00
parent 57080e76f2
commit 064f0ef1f2
3 changed files with 47 additions and 63 deletions

View file

@ -50,6 +50,7 @@
#include "optlist.h" #include "optlist.h"
static int bmnxtsct(register struct nstr_sect *); static int bmnxtsct(register struct nstr_sect *);
static s_char map_char(u_char type, natid own, int owner_or_god);
int int
draw_map(int bmap, s_char origin, int map_flags, struct nstr_sect *nsp, draw_map(int bmap, s_char origin, int map_flags, struct nstr_sect *nsp,
@ -130,8 +131,7 @@ draw_map(int bmap, s_char origin, int map_flags, struct nstr_sect *nsp,
ef_write(EF_BMAP, player->cnum, player->bmap); ef_write(EF_BMAP, player->cnum, player->bmap);
break; break;
case EF_NMAP: case EF_NMAP:
do { {
register s_char *ptr;
struct sctstr sect; struct sctstr sect;
if ((!player->god || country)) { if ((!player->god || country)) {
@ -144,34 +144,16 @@ draw_map(int bmap, s_char origin, int map_flags, struct nstr_sect *nsp,
if (!player->god) if (!player->god)
continue; continue;
} }
ptr = &wmap[nsp->dy][nsp->dx]; wmap[nsp->dy][nsp->dx]
if (sect.sct_newtype > SCT_MAXDEF) { = map_char(sect.sct_newtype, sect.sct_own,
*ptr = '?'; sect.sct_own == country || player->god);
} else {
*ptr = dchr[sect.sct_newtype].d_mnem;
switch (sect.sct_newtype) {
case SCT_WATER:
case SCT_RURAL:
case SCT_MOUNT:
case SCT_WASTE:
case SCT_PLAINS:
break;
default:
if (sect.sct_own != country &&
(!player->god || country)) {
if (!player->god)
*ptr = '?';
}
break;
}
}
} }
} while (0); break;
break; }
} }
} else { } else {
register s_char *ptr;
struct sctstr sect; struct sctstr sect;
s_char mapch;
int changed = 0; int changed = 0;
if ((!player->god || country)) { if ((!player->god || country)) {
@ -184,28 +166,10 @@ draw_map(int bmap, s_char origin, int map_flags, struct nstr_sect *nsp,
if (!player->god) if (!player->god)
continue; continue;
} }
ptr = &wmap[nsp->dy][nsp->dx]; mapch = map_char(sect.sct_type, sect.sct_own,
if (sect.sct_type > SCT_MAXDEF) { sect.sct_own == country || player->god);
*ptr = '?'; wmap[nsp->dy][nsp->dx] = mapch;
} else { changed |= map_set(player->cnum, nsp->x, nsp->y, mapch, 0);
*ptr = dchr[sect.sct_type].d_mnem;
switch (sect.sct_type) {
case SCT_WATER:
case SCT_RURAL:
case SCT_MOUNT:
case SCT_WASTE:
case SCT_PLAINS:
break;
default:
if (sect.sct_own != country &&
(!player->god || country)) {
if (!player->god)
*ptr = '?';
}
break;
}
changed += map_set(player->cnum, nsp->x, nsp->y, *ptr, 0);
}
} }
if (changed) if (changed)
writemap(player->cnum); writemap(player->cnum);
@ -326,6 +290,24 @@ bmnxtsct(register struct nstr_sect *np)
/*NOTREACHED*/ /*NOTREACHED*/
} }
/*
* Return character to use in maps for sector type TYPE owned by OWN.
* If OWNER_OR_GOD, the map is for the sector's owner or a deity.
*/
static s_char
map_char(u_char type, natid own, int owner_or_god)
{
if (type > SCT_MAXDEF) {
logerror("bad sector type %d\n", type);
return '?';
}
if (owner_or_god
|| type == SCT_WATER || type == SCT_MOUNT || type == SCT_WASTE
|| (!own && (type == SCT_RURAL || type == SCT_PLAINS)))
return dchr[type].d_mnem;
return '?';
}
int int
unit_map(int unit_type, int i, struct nstr_sect *nsp, s_char *originp) unit_map(int unit_type, int i, struct nstr_sect *nsp, s_char *originp)
{ {

View file

@ -64,7 +64,7 @@ radmapupd(int own, int cx, int cy, int eff, int range, double seesub)
} }
/* More dynamic world sized buffers. We create 'em once, and then /* More dynamic world sized buffers. We create 'em once, and then
* never again. No need to keep creating/tearint apart. We may * never again. No need to keep creating/tearing apart. We may
* want to do this in other places too where it doesn't matter. */ * want to do this in other places too where it doesn't matter. */
static s_char **rad; static s_char **rad;
static s_char *radbuf; static s_char *radbuf;
@ -121,8 +121,10 @@ radmap2(int owner,
snxtsct_dist(&ns, cx, cy, range); snxtsct_dist(&ns, cx, cy, range);
blankfill((s_char *)radbuf, &ns.range, 1); blankfill((s_char *)radbuf, &ns.range, 1);
while (nxtsct(&ns, &sect)) { while (nxtsct(&ns, &sect)) {
if (sect.sct_own == owner || if (sect.sct_own == owner
(sect.sct_type <= SCT_RURAL && sect.sct_type != SCT_SANCT) || sect.sct_type == SCT_WATER
|| sect.sct_type == SCT_MOUNT
|| sect.sct_type == SCT_WASTE
|| ns.curdist <= range / 3) || ns.curdist <= range / 3)
rad[ns.dy][ns.dx] = dchr[sect.sct_type].d_mnem; rad[ns.dy][ns.dx] = dchr[sect.sct_type].d_mnem;
else else

View file

@ -120,7 +120,7 @@ satmap(int x, int y, int eff, int range, int flags, int type)
if (noise[crackle]) if (noise[crackle])
continue; continue;
if (flags & P_S) { if (flags & P_S) {
if (sect.sct_type > SCT_RURAL) { if (sect.sct_own && sect.sct_own != player->cnum) {
satdisp(&sect, acc, 0); satdisp(&sect, acc, 0);
++count; ++count;
} }
@ -290,17 +290,17 @@ satdisp(struct sctstr *sp, int acc, int showstuff)
if (getvec(VT_ITEM, vec, (caddr_t)sp, EF_SECTOR) < 0) if (getvec(VT_ITEM, vec, (caddr_t)sp, EF_SECTOR) < 0)
return; return;
prxy("%4d,%-4d ", sp->sct_x, sp->sct_y, player->cnum), prxy("%4d,%-4d ", sp->sct_x, sp->sct_y, player->cnum);
pr("%c %3d %3d %3d %3d %3d %4d %4d %4d %4d %4d %4d %5d\n", pr("%c %3d %3d %3d %3d %3d %4d %4d %4d %4d %4d %4d %5d\n",
dchr[sp->sct_type].d_mnem, dchr[sp->sct_type].d_mnem,
sp->sct_own, roundintby((int)sp->sct_effic, acc / 2), sp->sct_own, roundintby((int)sp->sct_effic, acc / 2),
roundintby((int)sp->sct_road, acc / 2), roundintby((int)sp->sct_road, acc / 2),
roundintby((int)sp->sct_rail, acc / 2), roundintby((int)sp->sct_rail, acc / 2),
roundintby((int)sp->sct_defense, acc / 2), roundintby((int)sp->sct_defense, acc / 2),
roundintby(vec[I_CIVIL], acc), roundintby(vec[I_MILIT], acc), roundintby(vec[I_CIVIL], acc), roundintby(vec[I_MILIT], acc),
roundintby(vec[I_SHELL], acc), roundintby(vec[I_GUN], acc), roundintby(vec[I_SHELL], acc), roundintby(vec[I_GUN], acc),
roundintby(vec[I_IRON], acc), roundintby(vec[I_PETROL], acc), roundintby(vec[I_IRON], acc), roundintby(vec[I_PETROL], acc),
roundintby(vec[I_FOOD], acc)); roundintby(vec[I_FOOD], acc));
map_set(player->cnum, sp->sct_x, sp->sct_y, dchr[sp->sct_type].d_mnem, map_set(player->cnum, sp->sct_x, sp->sct_y, dchr[sp->sct_type].d_mnem,
0); 0);
if (!showstuff) if (!showstuff)