|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 3945 (0xf69)
Types: TextFile
Names: »rada.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Empire.V/V1.1/COMMANDS/rada.c«
#define D_UPDATE
#define D_SECTDES
#define D_SHIPTYP
#define D_SCTSTR
#define D_SHPSTR
#define D_DCHRSTR
#define D_MCHRSTR
#define D_NSCSTR
#define D_FILES
#include "empdef.h"
rada()
{
char *cp, *getstar();
double sonar;
struct nstr nsct;
struct nbstr nb;
cp = getstar(argp[1], "From? ");
if( landorsea(cp) != LAND ) goto X226;
if( snxtsct(&nsct, cp) < 0 ) return(SYN_RETURN);
X100:
if( nxtsct(&nsct, UP_OWN) != 0 ) goto X130;
goto X514;
X130:
if( sect.sct_desig != S_RADAR ) goto X100;
if( owner != 0 ) goto X162;
if( chkok("") != 0 ) goto X100;
X162:
printf("radar at %d, %d\n", nsct.n_x, nsct.n_y);
radmap(nsct.n_x, nsct.n_y, sect.sct_effic, .061, 0.);
goto X100;
X226:
if( snxtshp(&nb, cp, cnum, "from ship(s)? ") != -1 ) goto X470;
printf("Specify at least one ship");
return(SYN_RETURN);
X300:
if( ship.shp_type == S_DES ) {
sonar = .5;
} else {
sonar = 0.;
}
printf("%s %d at %d, %d\n", mchr[ship.shp_type].m_name, nb.nb_sno, ship.shp_xp, ship.shp_yp);
radmap(ship.shp_xp, ship.shp_yp, ship.shp_effc, mchr[ship.shp_type].m_vrnge / 100., sonar);
X470:
if( nxtshp(&nb, &ship) != 0 ) goto X300;
X514:
return(NORM_RETURN);
}
radmap(rx, ry, eff, range, sonarang)
int rx, ry, eff;
double range, sonarang;
{
register i, j;
char screen[30][32];
char *cp;
double rangesq, q, bad_vis;
bad_vis = 684.;
range *= (float)eff;
rangesq = range * range;
sonarang *= rangesq;
printf("Efficiency %d%%, barometer at %d, max range %.1f\n", eff, wethr(rx, ry, 0), range);
lx = rx - range;
ly = ry - range;
hx = rx + range;
hy = ry + range;
j = ly;
goto X624;
X232:
i = lx;
goto X614;
X242:
screen[j - ly][i - lx] = ' ';
q = idsq(xwrap(i - rx), ywrap(j - ry));
if( q > rangesq ) goto X612;
if( bad_vis <= wethr(i, j, 0) ) goto X434;
screen[j - ly][i - lx] = '/';
goto X612;
X434:
if( getsect(i, j, UP_NONE) == -1 ) goto X612;
if( owner != 0 ) goto X514;
if( sect.sct_desig <= S_RURAL ) goto X514;
if( q >= rangesq / 8. ) goto X560;
X514:
screen[j - ly][i - lx] = dchr[sect.sct_desig].d_mnem;
goto X612;
X560:
screen[j - ly][i - lx] = '?';
X612:
i++;
X614:
if( i <= hx ) goto X242;
j++;
X624:
if( j <= hy ) goto X232;
i = 0;
goto X1166;
X640:
if( ship.shp_own == 0 ) goto X1164;
if( lx > ship.shp_xp ) goto X1164;
if( ly > ship.shp_yp ) goto X1164;
if( hx < ship.shp_xp ) goto X1164;
if( hy < ship.shp_yp ) goto X1164;
if( screen[ship.shp_yp - ly][ship.shp_xp - lx] == '/' ) goto X1164;
rangesq = mchr[ship.shp_type].m_visib * range / 20.;
rangesq *= rangesq;
q = idsq(ship.shp_xp - rx, ship.shp_yp - ry);
if( q > rangesq ) goto X1164;
if( ship.shp_type != S_SUB ) goto X1110;
if( q > sonarang ) goto X1164;
X1110:
screen[ship.shp_yp - ly][ship.shp_xp -lx] = *mchr[ship.shp_type].m_name & ~040;
X1164:
i++;
X1166:
if( getship(i, &ship) != -1 ) goto X640;
j = 0;
goto X1364;
X1214:
cp = junk;
i = 0;
goto X1312;
X1226:
*cp = screen[j][i];
cp++;
if( *(cp-1) != '/' ) goto X1276;
*cp = '/';
goto X1304;
X1276:
*cp = ' ';
X1304:
cp++;
i++;
X1312:
if( i <= hx - lx ) goto X1226;
cp--;
*cp = '\0';
printf("%s\n", junk);
j++;
X1364:
if( j <= hy - ly ) goto X1214;
}