|
|
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 b
Length: 4454 (0x1166)
Types: TextFile
Names: »boar.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Empire.V/V1.1/COMMANDS/boar.c«
#define D_NEWSVERBS
#define D_TRTYCLAUSE
#define D_SHPSTR
#define D_MCHRSTR
#define D_FILES
#include "empdef.h"
#include <stdio.h>
boar()
{
register i;
char *splur();
int vship, aship, at, vt, vnum;
int dx, dy, adef, dam, n;
double d, tfact(), seagun();
struct shpstr as, vs;
vship = getshno(argp[1], "Victim ship? ", &vs);
if( vship == -1 ) {
printf("No such ship");
return(SYN_RETURN);
}
vnum = vs.shp_own;
if( trechk(cnum, vnum, SEAATT) == -1 ) return(FAIL_RETURN);
aship = getshno(argp[2], "Boarding party from ship #", &as);
if( aship == -1 ||
cnum != as.shp_own ) {
printf("Not yours");
return(SYN_RETURN);
}
if( as.shp_xp != vs.shp_xp ||
as.shp_yp != vs.shp_yp ) {
printf("Not adjacent");
return(SYN_RETURN);
}
at = (as.shp_crew > mchr[as.shp_type].m_milit) ? mchr[as.shp_type].m_milit : as.shp_crew;
if( at != 0 ) goto X350;
printf("No military on %s #%d", mchr[as.shp_type].m_name, aship);
return(FAIL_RETURN);
X350:
i = wethr(vs.shp_xp, vs.shp_yp, 0);
if( i >= 700 ) goto X426;
printf("Barometer @%.0f; Seas too rough to board...", i);
return(SYN_RETURN);
X426:
adef = seadef(as.shp_type);
i = 0;
goto X1276;
X452:
if( vnum == ship.shp_own ) goto X470;
goto X1274;
X470:
if( ship.shp_fleet == vs.shp_fleet ) goto X504;
goto X1274;
X504:
if( ship.shp_shels != 0 ) goto X516;
goto X1274;
X516:
if( ship.shp_gun != 0 ) goto X530;
goto X1274;
X530:
d = (mchr[ship.shp_type].m_frnge * ship.shp_effc) / 200.;
if( (d = tfact(vnum, d)) != 0 ) goto X622;
goto X1274;
X622:
dx = xwrap(ship.shp_xp - vs.shp_xp);
dy = ywrap(ship.shp_yp - vs.shp_yp);
if( d*d < dx*dx + dy*dy ) goto X1274;
n = (ship.shp_gun < ship.shp_shels) ? ship.shp_gun : ship.shp_shels;
printf("▶07◀Incoming shell%s!\n", splur(n));
nreport(vnum, N_FIRE_BACK, cnum);
dam = shelldam(seagun(ship.shp_type, ship.shp_effc, n), adef);
shipdam(&as, dam);
putship(aship, &as);
if( as.shp_own != 0 ) goto X1274;
sprintf(fmtbuf,"Country #%d lost %s #%d trying to board %s #%d", cnum, mchr[as.shp_type].m_name, aship, mchr[vs.shp_type].m_name, vship);
wu(0, vnum, fmtbuf);
nreport(cnum, N_SHP_LOSE, vnum);
return(NORM_RETURN);
X1274:
i++;
X1276:
if( getship(i, &ship) == -1 ) goto X1324;
goto X452;
X1324:
sigsave();
getship(aship, &as);
getship(vship, &vs);
at = (as.shp_crew > mchr[as.shp_type].m_milit) ? mchr[as.shp_type].m_milit : as.shp_crew;
vt = (vs.shp_crew > mchr[vs.shp_type].m_milit) ? mchr[vs.shp_type].m_milit : vs.shp_crew;
as.shp_crew -= at;
vs.shp_crew -= vt;
putship(aship, &as);
putship(vship, &vs);
goto X1646;
X1606:
printf("@");
if( --at <= 0 ) goto X1704;
X1624:
if( (01010 & rand()) != 0 ) goto X1646;
fflush(stdout);
sleep(1);
X1646:
if( rand() % 32768 > 20000 ) goto X1666;
if( vt > 0 ) goto X1606;
X1666:
printf("!");
if( --vt > 0 ) goto X1624;
X1704:
getship(aship, &as);
getship(vship, &vs);
if( at <= vt ) goto X2170;
printf("\nBoarding sucessful\n");
sprintf(fmtbuf,"Country #%d boarded %s #%d", cnum, mchr[vs.shp_type].m_name, vship);
wu(0, vnum, fmtbuf);
nreport(cnum, N_BOARD_SHIP, vnum);
vs.shp_own = cnum;
vs.shp_fleet = ' ';
vs.shp_spric = 0;
vt = ((at>>1) < mchr[vs.shp_type].m_milit) ? (at>>1) : mchr[vs.shp_type].m_milit;
at -= vt;
goto X2326;
X2170:
printf("\nYou have been repelled...\n");
sprintf(fmtbuf,"Country #%d %s #%d tried to board %s #%d", cnum, mchr[as.shp_type].m_name, aship, mchr[vs.shp_type].m_name, vship);
wu(0, vnum, fmtbuf);
nreport(cnum, N_SHP_LOSE, vnum);
X2326:
as.shp_crew = at;
vs.shp_crew = vt;
putship(aship, &as);
putship(vship, &vs);
return(NORM_RETURN);
}