From 064f0ef1f2b95d1c600f07b26dad60ae21d30dad Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 25 Feb 2004 20:18:18 +0000 Subject: [PATCH] Close #803753: (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. --- src/lib/common/maps.c | 78 +++++++++++++++++-------------------------- src/lib/subs/radmap.c | 8 +++-- src/lib/subs/satmap.c | 24 ++++++------- 3 files changed, 47 insertions(+), 63 deletions(-) diff --git a/src/lib/common/maps.c b/src/lib/common/maps.c index ceaf3c82..c1aae032 100644 --- a/src/lib/common/maps.c +++ b/src/lib/common/maps.c @@ -50,6 +50,7 @@ #include "optlist.h" static int bmnxtsct(register struct nstr_sect *); +static s_char map_char(u_char type, natid own, int owner_or_god); int 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); break; case EF_NMAP: - do { - register s_char *ptr; + { struct sctstr sect; 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) continue; } - ptr = &wmap[nsp->dy][nsp->dx]; - if (sect.sct_newtype > SCT_MAXDEF) { - *ptr = '?'; - } 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; - } - } + wmap[nsp->dy][nsp->dx] + = map_char(sect.sct_newtype, sect.sct_own, + sect.sct_own == country || player->god); } - } while (0); - break; + break; + } } } else { - register s_char *ptr; struct sctstr sect; + s_char mapch; int changed = 0; 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) continue; } - ptr = &wmap[nsp->dy][nsp->dx]; - if (sect.sct_type > SCT_MAXDEF) { - *ptr = '?'; - } else { - *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); - } + mapch = map_char(sect.sct_type, sect.sct_own, + sect.sct_own == country || player->god); + wmap[nsp->dy][nsp->dx] = mapch; + changed |= map_set(player->cnum, nsp->x, nsp->y, mapch, 0); } if (changed) writemap(player->cnum); @@ -326,6 +290,24 @@ bmnxtsct(register struct nstr_sect *np) /*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 unit_map(int unit_type, int i, struct nstr_sect *nsp, s_char *originp) { diff --git a/src/lib/subs/radmap.c b/src/lib/subs/radmap.c index 0254fdca..ed8d4330 100644 --- a/src/lib/subs/radmap.c +++ b/src/lib/subs/radmap.c @@ -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 - * 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. */ static s_char **rad; static s_char *radbuf; @@ -121,8 +121,10 @@ radmap2(int owner, snxtsct_dist(&ns, cx, cy, range); blankfill((s_char *)radbuf, &ns.range, 1); while (nxtsct(&ns, §)) { - if (sect.sct_own == owner || - (sect.sct_type <= SCT_RURAL && sect.sct_type != SCT_SANCT) + if (sect.sct_own == owner + || sect.sct_type == SCT_WATER + || sect.sct_type == SCT_MOUNT + || sect.sct_type == SCT_WASTE || ns.curdist <= range / 3) rad[ns.dy][ns.dx] = dchr[sect.sct_type].d_mnem; else diff --git a/src/lib/subs/satmap.c b/src/lib/subs/satmap.c index 7c58342a..2112b51f 100644 --- a/src/lib/subs/satmap.c +++ b/src/lib/subs/satmap.c @@ -120,7 +120,7 @@ satmap(int x, int y, int eff, int range, int flags, int type) if (noise[crackle]) continue; if (flags & P_S) { - if (sect.sct_type > SCT_RURAL) { + if (sect.sct_own && sect.sct_own != player->cnum) { satdisp(§, acc, 0); ++count; } @@ -290,17 +290,17 @@ satdisp(struct sctstr *sp, int acc, int showstuff) if (getvec(VT_ITEM, vec, (caddr_t)sp, EF_SECTOR) < 0) return; - 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", - dchr[sp->sct_type].d_mnem, - sp->sct_own, roundintby((int)sp->sct_effic, acc / 2), - roundintby((int)sp->sct_road, acc / 2), - roundintby((int)sp->sct_rail, acc / 2), - roundintby((int)sp->sct_defense, acc / 2), - roundintby(vec[I_CIVIL], acc), roundintby(vec[I_MILIT], acc), - roundintby(vec[I_SHELL], acc), roundintby(vec[I_GUN], acc), - roundintby(vec[I_IRON], acc), roundintby(vec[I_PETROL], acc), - roundintby(vec[I_FOOD], acc)); + 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", + dchr[sp->sct_type].d_mnem, + sp->sct_own, roundintby((int)sp->sct_effic, acc / 2), + roundintby((int)sp->sct_road, acc / 2), + roundintby((int)sp->sct_rail, acc / 2), + roundintby((int)sp->sct_defense, acc / 2), + roundintby(vec[I_CIVIL], acc), roundintby(vec[I_MILIT], acc), + roundintby(vec[I_SHELL], acc), roundintby(vec[I_GUN], acc), + roundintby(vec[I_IRON], acc), roundintby(vec[I_PETROL], acc), + roundintby(vec[I_FOOD], acc)); map_set(player->cnum, sp->sct_x, sp->sct_y, dchr[sp->sct_type].d_mnem, 0); if (!showstuff)