diff options
author | markm <markm@FreeBSD.org> | 2002-10-21 07:40:27 +0000 |
---|---|---|
committer | markm <markm@FreeBSD.org> | 2002-10-21 07:40:27 +0000 |
commit | e41bd31debce476e2f6ae864651c7380bea2cdbb (patch) | |
tree | b90261e8ce260fee190d0f359aa2884ddf2510de /games/sail | |
parent | 1cdc4d3dd3997f7f78a4a0ff9c52006837b0b5c4 (diff) | |
download | FreeBSD-src-e41bd31debce476e2f6ae864651c7380bea2cdbb.zip FreeBSD-src-e41bd31debce476e2f6ae864651c7380bea2cdbb.tar.gz |
Deorbit complete. We dont build these anymore, so into the attic they go.
Diffstat (limited to 'games/sail')
-rw-r--r-- | games/sail/Makefile | 19 | ||||
-rw-r--r-- | games/sail/assorted.c | 278 | ||||
-rw-r--r-- | games/sail/dr_1.c | 468 | ||||
-rw-r--r-- | games/sail/dr_2.c | 280 | ||||
-rw-r--r-- | games/sail/dr_3.c | 350 | ||||
-rw-r--r-- | games/sail/dr_4.c | 69 | ||||
-rw-r--r-- | games/sail/dr_5.c | 97 | ||||
-rw-r--r-- | games/sail/dr_main.c | 112 | ||||
-rw-r--r-- | games/sail/driver.h | 38 | ||||
-rw-r--r-- | games/sail/externs.h | 310 | ||||
-rw-r--r-- | games/sail/game.c | 91 | ||||
-rw-r--r-- | games/sail/globals.c | 511 | ||||
-rw-r--r-- | games/sail/lo_main.c | 95 | ||||
-rw-r--r-- | games/sail/machdep.h | 46 | ||||
-rw-r--r-- | games/sail/main.c | 112 | ||||
-rw-r--r-- | games/sail/misc.c | 237 | ||||
-rw-r--r-- | games/sail/parties.c | 80 | ||||
-rw-r--r-- | games/sail/pathnames.h | 36 | ||||
-rw-r--r-- | games/sail/pl_1.c | 139 | ||||
-rw-r--r-- | games/sail/pl_2.c | 158 | ||||
-rw-r--r-- | games/sail/pl_3.c | 280 | ||||
-rw-r--r-- | games/sail/pl_4.c | 133 | ||||
-rw-r--r-- | games/sail/pl_5.c | 259 | ||||
-rw-r--r-- | games/sail/pl_6.c | 200 | ||||
-rw-r--r-- | games/sail/pl_7.c | 473 | ||||
-rw-r--r-- | games/sail/pl_main.c | 249 | ||||
-rw-r--r-- | games/sail/player.h | 123 | ||||
-rw-r--r-- | games/sail/sail.6 | 897 | ||||
-rw-r--r-- | games/sail/sync.c | 429 | ||||
-rw-r--r-- | games/sail/version.c | 42 |
30 files changed, 0 insertions, 6611 deletions
diff --git a/games/sail/Makefile b/games/sail/Makefile deleted file mode 100644 index 1a2a278..0000000 --- a/games/sail/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $FreeBSD$ - -PROG= sail -SRCS= main.c pl_main.c pl_1.c pl_2.c pl_3.c pl_4.c pl_5.c pl_6.c pl_7.c \ - dr_main.c dr_1.c dr_2.c dr_3.c dr_4.c dr_5.c lo_main.c \ - assorted.c game.c globals.c misc.c parties.c sync.c version.c -MAN= sail.6 -DPADD= ${LIBCURSES} ${LIBCOMPAT} -LDADD= -lcurses -lcompat -HIDEGAME=hidegame - -beforeinstall: -.if !exists(${DESTDIR}/var/games/saillog) - ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 664 /dev/null \ - ${DESTDIR}/var/games/saillog -.endif - -.include <bsd.prog.mk> diff --git a/games/sail/assorted.c b/games/sail/assorted.c deleted file mode 100644 index 390f28f..0000000 --- a/games/sail/assorted.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)assorted.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" - -table(rig, shot, hittable, on, from, roll) -struct ship *on, *from; -int rig, shot, hittable, roll; -{ - int hhits = 0, chits = 0, ghits = 0, rhits = 0; - int Ghit = 0, Hhit = 0, Rhit = 0, Chit = 0; - int guns, car, pc, hull; - int crew[3]; - int n; - int rigg[4]; - char *message; - struct Tables *tp; - - pc = on->file->pcrew; - hull = on->specs->hull; - crew[0] = on->specs->crew1; - crew[1] = on->specs->crew2; - crew[2] = on->specs->crew3; - rigg[0] = on->specs->rig1; - rigg[1] = on->specs->rig2; - rigg[2] = on->specs->rig3; - rigg[3] = on->specs->rig4; - if (shot == L_GRAPE) - Chit = chits = hittable; - else { - tp = &(rig ? RigTable : HullTable)[hittable][roll-1]; - Chit = chits = tp->C; - Rhit = rhits = tp->R; - Hhit = hhits = tp->H; - Ghit = ghits = tp->G; - if (on->file->FS) - rhits *= 2; - if (shot == L_CHAIN) { - Ghit = ghits = 0; - Hhit = hhits = 0; - } - } - if (on->file->captured != 0) { - pc -= (chits + 1) / 2; - chits /= 2; - } - for (n = 0; n < 3; n++) - if (chits > crew[n]) { - chits -= crew[n]; - crew[n] = 0; - } else { - crew[n] -= chits; - chits = 0; - } - for (n = 0; n < 3; n++) - if (rhits > rigg[n]){ - rhits -= rigg[n]; - rigg[n] = 0; - } else { - rigg[n] -= rhits; - rhits = 0; - } - if (rigg[3] != -1 && rhits > rigg[3]) { - rhits -= rigg[3]; - rigg[3] = 0; - } else if (rigg[3] != -1) { - rigg[3] -= rhits; - } - if (rig && !rigg[2] && (!rigg[3] || rigg[3] == -1)) - makesignal(on, "dismasted!", (struct ship *)0); - if (portside(from, on, 0)) { - guns = on->specs->gunR; - car = on->specs->carR; - } else { - guns = on->specs->gunL; - car = on->specs->carL; - } - if (ghits > car) { - ghits -= car; - car = 0; - } else { - car -= ghits; - ghits = 0; - } - if (ghits > guns){ - ghits -= guns; - guns = 0; - } else { - guns -= ghits; - ghits = 0; - } - hull -= ghits; - if (Ghit) - Write(portside(from, on, 0) ? W_GUNR : W_GUNL, - on, 0, guns, car, 0, 0); - hull -= hhits; - hull = hull < 0 ? 0 : hull; - if (on->file->captured != 0 && Chit) - Write(W_PCREW, on, 0, pc, 0, 0, 0); - if (Hhit) - Write(W_HULL, on, 0, hull, 0, 0, 0); - if (Chit) - Write(W_CREW, on, 0, crew[0], crew[1], crew[2], 0); - if (Rhit) - Write(W_RIGG, on, 0, rigg[0], rigg[1], rigg[2], rigg[3]); - switch (shot) { - case L_ROUND: - message = "firing round shot on %s (%c%c)"; - break; - case L_GRAPE: - message = "firing grape shot on %s (%c%c)"; - break; - case L_CHAIN: - message = "firing chain shot on %s (%c%c)"; - break; - case L_DOUBLE: - message = "firing double shot on %s (%c%c)"; - break; - case L_EXPLODE: - message = "exploding shot on %s (%c%c)"; - } - makesignal(from, message, on); - if (roll == 6 && rig) { - switch(Rhit) { - case 0: - message = "fore topsail sheets parted"; - break; - case 1: - message = "mizzen shrouds parted"; - break; - case 2: - message = "main topsail yard shot away"; - break; - case 4: - message = "fore topmast and foremast shrouds shot away"; - break; - case 5: - message = "mizzen mast and yard shot through"; - break; - case 6: - message = "foremast and spritsail yard shattered"; - break; - case 7: - message = "main topmast and mizzen mast shattered"; - break; - } - makesignal(on, message, (struct ship *)0); - } else if (roll == 6) { - switch (Hhit) { - case 0: - message = "anchor cables severed"; - break; - case 1: - message = "two anchor stocks shot away"; - break; - case 2: - message = "quarterdeck bulwarks damaged"; - break; - case 3: - message = "three gun ports shot away"; - break; - case 4: - message = "four guns dismounted"; - break; - case 5: - message = "rudder cables shot through"; - Write(W_TA, on, 0, 0, 0, 0, 0); - break; - case 6: - message = "shot holes below the water line"; - break; - } - makesignal(on, message, (struct ship *)0); - } - /* - if (Chit > 1 && on->file->readyL&R_INITIAL && on->file->readyR&R_INITIAL) { - on->specs->qual--; - if (on->specs->qual <= 0) { - makesignal(on, "crew mutinying!", (struct ship *)0); - on->specs->qual = 5; - Write(W_CAPTURED, on, 0, on->file->index, 0, 0, 0); - } else - makesignal(on, "crew demoralized", (struct ship *)0); - Write(W_QUAL, on, 0, on->specs->qual, 0, 0, 0); - } - */ - if (!hull) - strike(on, from); -} - -Cleansnag(from, to, all, flag) -struct ship *from, *to; -char all, flag; -{ - if (flag & 1) { - Write(W_UNGRAP, from, 0, to->file->index, all, 0, 0); - Write(W_UNGRAP, to, 0, from->file->index, all, 0, 0); - } - if (flag & 2) { - Write(W_UNFOUL, from, 0, to->file->index, all, 0, 0); - Write(W_UNFOUL, to, 0, from->file->index, all, 0, 0); - } - if (!snagged2(from, to)) { - if (!snagged(from)) { - unboard(from, from, 1); /* defense */ - unboard(from, from, 0); /* defense */ - } else - unboard(from, to, 0); /* offense */ - if (!snagged(to)) { - unboard(to, to, 1); /* defense */ - unboard(to, to, 0); /* defense */ - } else - unboard(to, from, 0); /* offense */ - } -} - -strike(ship, from) -struct ship *ship, *from; -{ - int points; - - if (ship->file->struck) - return; - Write(W_STRUCK, ship, 0, 1, 0, 0, 0); - points = ship->specs->pts + from->file->points; - Write(W_POINTS, from, 0, points, 0, 0, 0); - unboard(ship, ship, 0); /* all offense */ - unboard(ship, ship, 1); /* all defense */ - switch (die()) { - case 3: - case 4: /* ship may sink */ - Write(W_SINK, ship, 0, 1, 0, 0, 0); - break; - case 5: - case 6: /* ship may explode */ - Write(W_EXPLODE, ship, 0, 1, 0, 0, 0); - break; - } - Write(W_SIGNAL, ship, 1, (int) "striking her colours!", 0, 0, 0); -} diff --git a/games/sail/dr_1.c b/games/sail/dr_1.c deleted file mode 100644 index 02551f9..0000000 --- a/games/sail/dr_1.c +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)dr_1.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "driver.h" - -unfoul() -{ - struct ship *sp; - struct ship *to; - int nat; - int i; - - foreachship(sp) { - if (sp->file->captain[0]) - continue; - nat = capship(sp)->nationality; - foreachship(to) { - if (nat != capship(to)->nationality && - !toughmelee(sp, to, 0, 0)) - continue; - for (i = fouled2(sp, to); --i >= 0;) - if (die() <= 2) - cleanfoul(sp, to, 0); - } - } -} - -boardcomp() -{ - int crew[3]; - struct ship *sp, *sq; - - foreachship(sp) { - if (*sp->file->captain) - continue; - if (sp->file->dir == 0) - continue; - if (sp->file->struck || sp->file->captured != 0) - continue; - if (!snagged(sp)) - continue; - crew[0] = sp->specs->crew1 != 0; - crew[1] = sp->specs->crew2 != 0; - crew[2] = sp->specs->crew3 != 0; - foreachship(sq) { - if (!Xsnagged2(sp, sq)) - continue; - if (meleeing(sp, sq)) - continue; - if (!sq->file->dir - || sp->nationality == capship(sq)->nationality) - continue; - switch (sp->specs->class - sq->specs->class) { - case -3: case -4: case -5: - if (crew[0]) { - /* OBP */ - sendbp(sp, sq, crew[0]*100, 0); - crew[0] = 0; - } else if (crew[1]){ - /* OBP */ - sendbp(sp, sq, crew[1]*10, 0); - crew[1] = 0; - } - break; - case -2: - if (crew[0] || crew[1]) { - /* OBP */ - sendbp(sp, sq, crew[0]*100+crew[1]*10, - 0); - crew[0] = crew[1] = 0; - } - break; - case -1: case 0: case 1: - if (crew[0]) { - /* OBP */ - sendbp(sp, sq, crew[0]*100+crew[1]*10, - 0); - crew[0] = crew[1] = 0; - } - break; - case 2: case 3: case 4: case 5: - /* OBP */ - sendbp(sp, sq, crew[0]*100+crew[1]*10+crew[2], - 0); - crew[0] = crew[1] = crew[2] = 0; - break; - } - } - } -} - -fightitout(from, to, key) -struct ship *from, *to; -int key; -{ - struct ship *fromcap, *tocap; - int crewfrom[3], crewto[3], menfrom, mento; - int pcto, pcfrom, fromstrength, strengthto, frominjured, toinjured; - int topoints; - int index, totalfrom = 0, totalto = 0; - int count; - char message[60]; - - menfrom = mensent(from, to, crewfrom, &fromcap, &pcfrom, key); - mento = mensent(to, from, crewto, &tocap, &pcto, 0); - if (fromcap == 0) - fromcap = from; - if (tocap == 0) - tocap = to; - if (key) { - if (!menfrom) { /* if crew surprised */ - if (fromcap == from) - menfrom = from->specs->crew1 - + from->specs->crew2 - + from->specs->crew3; - else - menfrom = from->file->pcrew; - } else { - menfrom *= 2; /* DBP's fight at an advantage */ - } - } - fromstrength = menfrom * fromcap->specs->qual; - strengthto = mento * tocap->specs->qual; - for (count = 0; - (fromstrength < strengthto * 3 && strengthto < fromstrength * 3 - || fromstrength == -1) && count < 4; - count++) { - index = fromstrength/10; - if (index > 8) - index = 8; - toinjured = MT[index][2 - die() / 3]; - totalto += toinjured; - index = strengthto/10; - if (index > 8) - index = 8; - frominjured = MT[index][2 - die() / 3]; - totalfrom += frominjured; - menfrom -= frominjured; - mento -= toinjured; - fromstrength = menfrom * fromcap->specs->qual; - strengthto = mento * tocap->specs->qual; - } - if (fromstrength >= strengthto * 3 || count == 4) { - unboard(to, from, 0); - subtract(from, totalfrom, crewfrom, fromcap, pcfrom); - subtract(to, totalto, crewto, tocap, pcto); - makesignal(from, "boarders from %s repelled", to); - (void) sprintf(message, "killed in melee: %d. %s: %d", - totalto, from->shipname, totalfrom); - Write(W_SIGNAL, to, 1, (long) message, 0, 0, 0); - if (key) - return 1; - } else if (strengthto >= fromstrength * 3) { - unboard(from, to, 0); - subtract(from, totalfrom, crewfrom, fromcap, pcfrom); - subtract(to, totalto, crewto, tocap, pcto); - if (key) { - if (fromcap != from) - Write(W_POINTS, fromcap, 0, - fromcap->file->points - - from->file->struck - ? from->specs->pts - : 2 * from->specs->pts, - 0, 0, 0); - -/* ptr1 points to the shipspec for the ship that was just unboarded. - I guess that what is going on here is that the pointer is multiplied - or something. */ - - Write(W_CAPTURED, from, 0, to->file->index, 0, 0, 0); - topoints = 2 * from->specs->pts + to->file->points; - if (from->file->struck) - topoints -= from->specs->pts; - Write(W_POINTS, to, 0, topoints, 0, 0, 0); - mento = crewto[0] ? crewto[0] : crewto[1]; - if (mento) { - subtract(to, mento, crewto, tocap, pcto); - subtract(from, - mento, crewfrom, to, 0); - } - (void) sprintf(message, "captured by the %s!", - to->shipname); - Write(W_SIGNAL, from, 1, (long) message, 0, 0, 0); - (void) sprintf(message, "killed in melee: %d. %s: %d", - totalto, from->shipname, totalfrom); - Write(W_SIGNAL, to, 1, (long) message, 0, 0, 0); - mento = 0; - return 0; - } - } - return 0; -} - -resolve() -{ - int thwart; - struct ship *sp, *sq; - - foreachship(sp) { - if (sp->file->dir == 0) - continue; - for (sq = sp + 1; sq < ls; sq++) - if (sq->file->dir && meleeing(sp, sq) && meleeing(sq, sp)) - (void) fightitout(sp, sq, 0); - thwart = 2; - foreachship(sq) { - if (sq->file->dir && meleeing(sq, sp)) - thwart = fightitout(sp, sq, 1); - if (!thwart) - break; - } - if (!thwart) { - foreachship(sq) { - if (sq->file->dir && meleeing(sq, sp)) - unboard(sq, sp, 0); - unboard(sp, sq, 0); - } - unboard(sp, sp, 1); - } else if (thwart == 2) - unboard(sp, sp, 1); - } -} - -compcombat() -{ - int n; - struct ship *sp; - struct ship *closest; - int crew[3], men = 0, target, temp; - int r, guns, ready, load, car; - int index, rakehim, sternrake; - int shootat, hit; - - foreachship(sp) { - if (sp->file->captain[0] || sp->file->dir == 0) - continue; - crew[0] = sp->specs->crew1; - crew[1] = sp->specs->crew2; - crew[2] = sp->specs->crew3; - for (n = 0; n < 3; n++) { - if (sp->file->OBP[n].turnsent) - men += sp->file->OBP[n].mensent; - } - for (n = 0; n < 3; n++) { - if (sp->file->DBP[n].turnsent) - men += sp->file->DBP[n].mensent; - } - if (men){ - crew[0] = men/100 ? 0 : crew[0] != 0; - crew[1] = (men%100)/10 ? 0 : crew[1] != 0; - crew[2] = men%10 ? 0 : crew[2] != 0; - } - for (r = 0; r < 2; r++) { - if (!crew[2]) - continue; - if (sp->file->struck) - continue; - if (r) { - ready = sp->file->readyR; - guns = sp->specs->gunR; - car = sp->specs->carR; - } else { - ready = sp->file->readyL; - guns = sp->specs->gunL; - car = sp->specs->carL; - } - if (!guns && !car) - continue; - if ((ready & R_LOADED) == 0) - continue; - closest = closestenemy(sp, r ? 'r' : 'l', 0); - if (closest == 0) - continue; - if (range(closest, sp) > range(sp, closestenemy(sp, r ? 'r' : 'l', 1))) - continue; - if (closest->file->struck) - continue; - target = range(sp, closest); - if (target > 10) - continue; - if (!guns && target >= 3) - continue; - load = L_ROUND; - if (target == 1 && sp->file->loadwith == L_GRAPE) - load = L_GRAPE; - if (target <= 3 && closest->file->FS) - load = L_CHAIN; - if (target == 1 && load != L_GRAPE) - load = L_DOUBLE; - if (load > L_CHAIN && target < 6) - shootat = HULL; - else - shootat = RIGGING; - rakehim = gunsbear(sp, closest) - && !gunsbear(closest, sp); - temp = portside(closest, sp, 1) - - closest->file->dir + 1; - if (temp < 1) - temp += 8; - if (temp > 8) - temp -= 8; - sternrake = temp > 4 && temp < 6; - index = guns; - if (target < 3) - index += car; - index = (index - 1) / 3; - index = index > 8 ? 8 : index; - if (!rakehim) - hit = HDT[index][target-1]; - else - hit = HDTrake[index][target-1]; - if (rakehim && sternrake) - hit++; - hit += QUAL[index][capship(sp)->specs->qual - 1]; - for (n = 0; n < 3 && sp->file->captured == 0; n++) - if (!crew[n]) { - if (index <= 5) - hit--; - else - hit -= 2; - } - if (ready & R_INITIAL) { - if (!r) - sp->file->readyL &= ~R_INITIAL; - else - sp->file->readyR &= ~R_INITIAL; - if (index <= 3) - hit++; - else - hit += 2; - } - if (sp->file->captured != 0) { - if (index <= 1) - hit--; - else - hit -= 2; - } - hit += AMMO[index][load - 1]; - temp = sp->specs->class; - if ((temp >= 5 || temp == 1) && windspeed == 5) - hit--; - if (windspeed == 6 && temp == 4) - hit -= 2; - if (windspeed == 6 && temp <= 3) - hit--; - if (hit >= 0) { - if (load != L_GRAPE) - hit = hit > 10 ? 10 : hit; - table(shootat, load, hit, closest, sp, die()); - } - } - } -} - -next() -{ - if (++turn % 55 == 0) { - if (alive) - alive = 0; - else - people = 0; - } - if (people <= 0 || windspeed == 7) { - struct ship *s; - struct ship *bestship; - float net, best = 0.0; - foreachship(s) { - if (*s->file->captain) - continue; - net = (float)s->file->points / s->specs->pts; - if (net > best) { - best = net; - bestship = s; - } - } - if (best > 0.0) { - char *p = getenv("WOTD"); - if (p == 0) - p = "Driver"; - if (islower(*p)) - *p = toupper(*p); - (void) strncpy(bestship->file->captain, p, - sizeof bestship->file->captain); - bestship->file->captain - [sizeof bestship->file->captain - 1] = 0; - log(bestship); - } - return -1; - } - Write(W_TURN, SHIP(0), 0, turn, 0, 0, 0); - if (turn % 7 == 0 && (die() >= cc->windchange || !windspeed)) { - switch (die()) { - case 1: - winddir = 1; - break; - case 2: - break; - case 3: - winddir++; - break; - case 4: - winddir--; - break; - case 5: - winddir += 2; - break; - case 6: - winddir -= 2; - break; - } - if (winddir > 8) - winddir -= 8; - if (winddir < 1) - winddir += 8; - if (windspeed) - switch (die()) { - case 1: - case 2: - windspeed--; - break; - case 5: - case 6: - windspeed++; - break; - } - else - windspeed++; - Write(W_WIND, SHIP(0), 0, winddir, windspeed, 0, 0); - } - return 0; -} diff --git a/games/sail/dr_2.c b/games/sail/dr_2.c deleted file mode 100644 index 942b768..0000000 --- a/games/sail/dr_2.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)dr_2.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <string.h> -#include "driver.h" - -#define couldwin(f,t) (f->specs->crew2 > t->specs->crew2 * 1.5) - -thinkofgrapples() -{ - struct ship *sp, *sq; - char friendly; - - foreachship(sp) { - if (sp->file->captain[0] || sp->file->dir == 0) - continue; - foreachship(sq) { - friendly = sp->nationality == capship(sq)->nationality; - if (!friendly) { - if (sp->file->struck || sp->file->captured != 0) - continue; - if (range(sp, sq) != 1) - continue; - if (grappled2(sp, sq)) - if (toughmelee(sp, sq, 0, 0)) - ungrap(sp, sq); - else - grap(sp, sq); - else if (couldwin(sp, sq)) { - grap(sp, sq); - sp->file->loadwith = L_GRAPE; - } - } else - ungrap(sp, sq); - } - } -} - -checkup() -{ - struct ship *sp, *sq; - char explode, sink; - - foreachship(sp) { - if (sp->file->dir == 0) - continue; - explode = sp->file->explode; - sink = sp->file->sink; - if (explode != 1 && sink != 1) - continue; - if (die() < 5) - continue; - Write(sink == 1 ? W_SINK : W_EXPLODE, sp, 0, 2, 0, 0, 0); - Write(W_DIR, sp, 0, 0, 0, 0, 0); - if (snagged(sp)) - foreachship(sq) - cleansnag(sp, sq, 1); - if (sink != 1) { - makesignal(sp, "exploding!", (struct ship *)0); - foreachship(sq) { - if (sp != sq && sq->file->dir && range(sp, sq) < 4) - table(RIGGING, L_EXPLODE, sp->specs->guns/13, sq, sp, 6); - } - } else - makesignal(sp, "sinking!", (struct ship *)0); - } -} - -prizecheck() -{ - struct ship *sp; - - foreachship(sp) { - if (sp->file->captured == 0) - continue; - if (sp->file->struck || sp->file->dir == 0) - continue; - if (sp->specs->crew1 + sp->specs->crew2 + sp->specs->crew3 > sp->file->pcrew * 6) { - Write(W_SIGNAL, sp, 1, - (int)"prize crew overthrown", 0, 0, 0); - Write(W_POINTS, sp->file->captured, 0, sp->file->captured->file->points - 2 * sp->specs->pts, 0, 0, 0); - Write(W_CAPTURED, sp, 0, -1, 0, 0, 0); - } - } -} - -strend(str) -char *str; -{ - char *p; - - for (p = str; *p; p++) - ; - return p == str ? 0 : p[-1]; -} - -closeon(from, to, command, ta, ma, af) -struct ship *from, *to; -char command[]; -int ma, ta, af; -{ - int high; - char temp[10]; - - temp[0] = command[0] = '\0'; - high = -30000; - try(command, temp, ma, ta, af, ma, from->file->dir, from, to, &high, 0); -} - -int dtab[] = {0,1,1,2,3,4,4,5}; /* diagonal distances in x==y */ - -score(movement, ship, to, onlytemp) -char movement[]; -struct ship *ship, *to; -char onlytemp; -{ - char drift; - int row, col, dir, total, ran; - struct File *fp = ship->file; - - if ((dir = fp->dir) == 0) - return 0; - row = fp->row; - col = fp->col; - drift = fp->drift; - sail_move(movement, ship, &fp->dir, &fp->row, &fp->col, &drift); - if (!*movement) - (void) strcpy(movement, "d"); - - ran = range(ship, to); - total = -50 * ran; - if (ran < 4 && gunsbear(ship, to)) - total += 60; - if ((ran = portside(ship, to, 1) - fp->dir) == 4 || ran == -4) - total = -30000; - - if (!onlytemp) { - fp->row = row; - fp->col = col; - fp->dir = dir; - } - return total; -} - -sail_move(p, ship, dir, row, col, drift) -char *p; -struct ship *ship; -char *dir; -short *row, *col; -char *drift; -{ - int dist; - char moved = 0; - - for (; *p; p++) { - switch (*p) { - case 'r': - if (++*dir == 9) - *dir = 1; - break; - case 'l': - if (--*dir == 0) - *dir = 8; - break; - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': - moved++; - if (*dir % 2 == 0) - dist = dtab[*p - '0']; - else - dist = *p - '0'; - *row -= dr[*dir] * dist; - *col -= dc[*dir] * dist; - break; - } - } - if (!moved) { - if (windspeed != 0 && ++*drift > 2) { - if (ship->specs->class >= 3 && !snagged(ship) - || (turn & 1) == 0) { - *row -= dr[winddir]; - *col -= dc[winddir]; - } - } - } else - *drift = 0; -} - -try(command, temp, ma, ta, af, vma, dir, f, t, high, rakeme) -struct ship *f, *t; -int ma, ta, af, vma, dir, *high, rakeme; -char command[], temp[]; -{ - int new, n; - char st[4]; -#define rakeyou (gunsbear(f, t) && !gunsbear(t, f)) - - if ((n = strend(temp)) < '1' || n > '9') - for (n = 1; vma - n >= 0; n++) { - (void) sprintf(st, "%d", n); - (void) strcat(temp, st); - new = score(temp, f, t, rakeme); - if (new > *high && (!rakeme || rakeyou)) { - *high = new; - (void) strcpy(command, temp); - } - try(command, temp, ma-n, ta, af, vma-n, - dir, f, t, high, rakeme); - rmend(temp); - } - if (ma > 0 && ta > 0 && (n = strend(temp)) != 'l' && n != 'r' || !strlen(temp)) { - (void) strcat(temp, "r"); - new = score(temp, f, t, rakeme); - if (new > *high && (!rakeme || gunsbear(f, t) && !gunsbear(t, f))) { - *high = new; - (void) strcpy(command, temp); - } - try(command, temp, ma-1, ta-1, af, min(ma-1, maxmove(f, (dir == 8 ? 1 : dir+1), 0)), (dir == 8 ? 1 : dir+1),f,t,high,rakeme); - rmend(temp); - } - if ((ma > 0 && ta > 0 && (n = strend(temp)) != 'l' && n != 'r') || !strlen(temp)){ - (void) strcat(temp, "l"); - new = score(temp, f, t, rakeme); - if (new > *high && (!rakeme || (gunsbear(f, t) && !gunsbear(t, f)))){ - *high = new; - (void) strcpy(command, temp); - } - try(command, temp, ma-1, ta-1, af, (min(ma-1,maxmove(f, (dir-1 ? dir-1 : 8), 0))), (dir-1 ? dir -1 : 8), f, t, high, rakeme); - rmend(temp); - } -} - -rmend(str) -char *str; -{ - char *p; - - for (p = str; *p; p++) - ; - if (p != str) - *--p = 0; -} diff --git a/games/sail/dr_3.c b/games/sail/dr_3.c deleted file mode 100644 index 845a707..0000000 --- a/games/sail/dr_3.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)dr_3.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "driver.h" - -moveall() /* move all comp ships */ -{ - struct ship *sp, *sq; /* r11, r10 */ - int n; /* r9 */ - int k, l; /* r8, r7 */ - int row[NSHIP], col[NSHIP], dir[NSHIP], drift[NSHIP]; - char moved[NSHIP]; - - /* - * first try to create moves for OUR ships - */ - foreachship(sp) { - struct ship *closest; - int ma, ta; - char af; - - if (sp->file->captain[0] || sp->file->dir == 0) - continue; - if (!sp->file->struck && windspeed && !snagged(sp) - && sp->specs->crew3) { - ta = maxturns(sp, &af); - ma = maxmove(sp, sp->file->dir, 0); - closest = closestenemy(sp, 0, 0); - if (closest == 0) - *sp->file->movebuf = '\0'; - else - closeon(sp, closest, sp->file->movebuf, - ta, ma, af); - } else - *sp->file->movebuf = '\0'; - } - /* - * Then execute the moves for ALL ships (dead ones too), - * checking for collisions and snags at each step. - * The old positions are saved in row[], col[], dir[]. - * At the end, we compare and write out the changes. - */ - n = 0; - foreachship(sp) { - if (snagged(sp)) - (void) strcpy(sp->file->movebuf, "d"); - else - if (*sp->file->movebuf != 'd') - (void) strcat(sp->file->movebuf, "d"); - row[n] = sp->file->row; - col[n] = sp->file->col; - dir[n] = sp->file->dir; - drift[n] = sp->file->drift; - moved[n] = 0; - n++; - } - /* - * Now resolve collisions. - * This is the tough part. - */ - for (k = 0; stillmoving(k); k++) { - /* - * Step once. - * And propagate the nulls at the end of sp->file->movebuf. - */ - n = 0; - foreachship(sp) { - if (!sp->file->movebuf[k]) - sp->file->movebuf[k+1] = '\0'; - else if (sp->file->dir) - step(sp->file->movebuf[k], sp, &moved[n]); - n++; - } - /* - * The real stuff. - */ - n = 0; - foreachship(sp) { - if (sp->file->dir == 0 || isolated(sp)) - goto cont1; - l = 0; - foreachship(sq) { - char snap = 0; - - if (sp == sq) - goto cont2; - if (sq->file->dir == 0) - goto cont2; - if (!push(sp, sq)) - goto cont2; - if (snagged2(sp, sq) && range(sp, sq) > 1) - snap++; - if (!range(sp, sq) && !fouled2(sp, sq)) { - makesignal(sp, - "collision with %s (%c%c)", sq); - if (die() < 4) { - makesignal(sp, - "fouled with %s (%c%c)", - sq); - Write(W_FOUL, sp, 0, l, 0, 0, 0); - Write(W_FOUL, sq, 0, n, 0, 0, 0); - } - snap++; - } - if (snap) { - sp->file->movebuf[k + 1] = 0; - sq->file->movebuf[k + 1] = 0; - sq->file->row = sp->file->row - 1; - if (sp->file->dir == 1 - || sp->file->dir == 5) - sq->file->col = - sp->file->col - 1; - else - sq->file->col = sp->file->col; - sq->file->dir = sp->file->dir; - } - cont2: - l++; - } - cont1: - n++; - } - } - /* - * Clear old moves. And write out new pos. - */ - n = 0; - foreachship(sp) { - if (sp->file->dir != 0) { - *sp->file->movebuf = 0; - if (row[n] != sp->file->row) - Write(W_ROW, sp, 0, sp->file->row, 0, 0, 0); - if (col[n] != sp->file->col) - Write(W_COL, sp, 0, sp->file->col, 0, 0, 0); - if (dir[n] != sp->file->dir) - Write(W_DIR, sp, 0, sp->file->dir, 0, 0, 0); - if (drift[n] != sp->file->drift) - Write(W_DRIFT, sp, 0, sp->file->drift, 0, 0, 0); - } - n++; - } -} - -stillmoving(k) -int k; -{ - struct ship *sp; - - foreachship(sp) - if (sp->file->movebuf[k]) - return 1; - return 0; -} - -isolated(ship) -struct ship *ship; -{ - struct ship *sp; - - foreachship(sp) { - if (ship != sp && range(ship, sp) <= 10) - return 0; - } - return 1; -} - -push(from, to) -struct ship *from, *to; -{ - int bs, sb; - - sb = to->specs->guns; - bs = from->specs->guns; - if (sb > bs) - return 1; - if (sb < bs) - return 0; - return from < to; -} - -step(com, sp, moved) -char com; -struct ship *sp; -char *moved; -{ - int dist; - - switch (com) { - case 'r': - if (++sp->file->dir == 9) - sp->file->dir = 1; - break; - case 'l': - if (--sp->file->dir == 0) - sp->file->dir = 8; - break; - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - if (sp->file->dir % 2 == 0) - dist = dtab[com - '0']; - else - dist = com - '0'; - sp->file->row -= dr[sp->file->dir] * dist; - sp->file->col -= dc[sp->file->dir] * dist; - *moved = 1; - break; - case 'b': - break; - case 'd': - if (!*moved) { - if (windspeed != 0 && ++sp->file->drift > 2 && - (sp->specs->class >= 3 && !snagged(sp) - || (turn & 1) == 0)) { - sp->file->row -= dr[winddir]; - sp->file->col -= dc[winddir]; - } - } else - sp->file->drift = 0; - break; - } -} - -sendbp(from, to, sections, isdefense) -struct ship *from, *to; -int sections; -char isdefense; -{ - int n; - struct BP *bp; - - bp = isdefense ? from->file->DBP : from->file->OBP; - for (n = 0; n < NBP && bp[n].turnsent; n++) - ; - if (n < NBP && sections) { - Write(isdefense ? W_DBP : W_OBP, from, 0, - n, turn, to->file->index, sections); - if (isdefense) - makesignal(from, "repelling boarders", - (struct ship *)0); - else - makesignal(from, "boarding the %s (%c%c)", to); - } -} - -toughmelee(ship, to, isdefense, count) -struct ship *ship, *to; -int isdefense, count; -{ - struct BP *bp; - int obp = 0; - int n, OBP = 0, DBP = 0, dbp = 0; - int qual; - - qual = ship->specs->qual; - bp = isdefense ? ship->file->DBP : ship->file->OBP; - for (n = 0; n < NBP; n++, bp++) { - if (bp->turnsent && (to == bp->toship || isdefense)) { - obp += bp->mensent / 100 - ? ship->specs->crew1 * qual : 0; - obp += (bp->mensent % 100)/10 - ? ship->specs->crew2 * qual : 0; - obp += bp->mensent % 10 - ? ship->specs->crew3 * qual : 0; - } - } - if (count || isdefense) - return obp; - OBP = toughmelee(to, ship, 0, count + 1); - dbp = toughmelee(ship, to, 1, count + 1); - DBP = toughmelee(to, ship, 1, count + 1); - if (OBP > obp + 10 || OBP + DBP >= obp + dbp + 10) - return 1; - else - return 0; -} - -reload() -{ - struct ship *sp; - - foreachship(sp) { - sp->file->loadwith = 0; - } -} - -checksails() -{ - struct ship *sp; - int rig, full; - struct ship *close; - - foreachship(sp) { - if (sp->file->captain[0] != 0) - continue; - rig = sp->specs->rig1; - if (windspeed == 6 || windspeed == 5 && sp->specs->class > 4) - rig = 0; - if (rig && sp->specs->crew3) { - close = closestenemy(sp, 0, 0); - if (close != 0) { - if (range(sp, close) > 9) - full = 1; - else - full = 0; - } else - full = 0; - } else - full = 0; - if ((sp->file->FS != 0) != full) - Write(W_FS, sp, 0, full, 0, 0, 0); - } -} diff --git a/games/sail/dr_4.c b/games/sail/dr_4.c deleted file mode 100644 index e75d6b4..0000000 --- a/games/sail/dr_4.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)dr_4.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" - -ungrap(from, to) -struct ship *from, *to; -{ - int k; - char friend; - - if ((k = grappled2(from, to)) == 0) - return; - friend = capship(from)->nationality == capship(to)->nationality; - while (--k >= 0) { - if (friend || die() < 3) { - cleangrapple(from, to, 0); - makesignal(from, "ungrappling %s (%c%c)", to); - } - } -} - -grap(from, to) -struct ship *from, *to; -{ - if (capship(from)->nationality != capship(to)->nationality && die() > 2) - return; - Write(W_GRAP, from, 0, to->file->index, 0, 0, 0); - Write(W_GRAP, to, 0, from->file->index, 0, 0, 0); - makesignal(from, "grappled with %s (%c%c)", to); -} diff --git a/games/sail/dr_5.c b/games/sail/dr_5.c deleted file mode 100644 index a801dbd..0000000 --- a/games/sail/dr_5.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)dr_5.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" - -subtract(from, totalfrom, crewfrom, fromcap, pcfrom) -struct ship *from, *fromcap; -int pcfrom; -int totalfrom, crewfrom[3]; -{ - int n; - - if (fromcap == from && totalfrom) { /* if not captured */ - for (n = 0; n < 3; n++) { - if (totalfrom > crewfrom[n]) { - totalfrom -= crewfrom[n]; - crewfrom[n] = 0; - } else { - crewfrom[n] -= totalfrom; - totalfrom = 0; - } - } - Write(W_CREW, from, 0, crewfrom[0], crewfrom[1], crewfrom[2], 0); - } else if (totalfrom) { - pcfrom -= totalfrom; - pcfrom = pcfrom < 0 ? 0 : pcfrom; - Write(W_PCREW, from, 0, pcfrom, 0, 0, 0); - } -} - -mensent(from, to, crew, captured, pc, isdefense) -struct ship *from, *to, **captured; -int crew[3], *pc; -char isdefense; -{ /* returns # of crew squares sent */ - int men = 0; - int n; - int c1, c2, c3; - struct BP *bp; - - *pc = from->file->pcrew; - *captured = from->file->captured; - crew[0] = from->specs->crew1; - crew[1] = from->specs->crew2; - crew[2] = from->specs->crew3; - bp = isdefense ? from->file->DBP : from->file->OBP; - for (n=0; n < NBP; n++, bp++) { - if (bp->turnsent && bp->toship == to) - men += bp->mensent; - } - if (men) { - c1 = men/100 ? crew[0] : 0; - c2 = (men%100)/10 ? crew[1] : 0; - c3 = men/10 ? crew[2] : 0; - c3 = *captured == 0 ? crew[2] : *pc; - } else - c1 = c2 = c3 = 0; - return(c1 + c2 + c3); -} diff --git a/games/sail/dr_main.c b/games/sail/dr_main.c deleted file mode 100644 index 6ada54f..0000000 --- a/games/sail/dr_main.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)dr_main.c 8.2 (Berkeley) 4/16/94"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "driver.h" - -dr_main() -{ - int n; - struct ship *sp; - int nat[NNATION]; - int value = 0; - - (void) signal(SIGINT, SIG_IGN); - (void) signal(SIGQUIT, SIG_IGN); - (void) signal(SIGTSTP, SIG_IGN); - if (issetuid) - (void) setuid(geteuid()); - if (game < 0 || game >= NSCENE) { - fprintf(stderr, "DRIVER: Bad game number %d\n", game); - exit(1); - } - cc = &scene[game]; - ls = SHIP(cc->vessels); - if (sync_open() < 0) { - perror("driver: syncfile"); - exit(1); - } - for (n = 0; n < NNATION; n++) - nat[n] = 0; - foreachship(sp) { - if (sp->file == NULL && - (sp->file = (struct File *)calloc(1, sizeof (struct File))) == NULL) { - (void) fprintf(stderr, "DRIVER: Out of memory.\n"); - exit(1); - } - sp->file->index = sp - SHIP(0); - sp->file->loadL = L_ROUND; - sp->file->loadR = L_ROUND; - sp->file->readyR = R_LOADED|R_INITIAL; - sp->file->readyL = R_LOADED|R_INITIAL; - sp->file->stern = nat[sp->nationality]++; - sp->file->dir = sp->shipdir; - sp->file->row = sp->shiprow; - sp->file->col = sp->shipcol; - } - windspeed = cc->windspeed; - winddir = cc->winddir; - people = 0; - for (;;) { - sleep(7); - if (Sync() < 0) { - value = 1; - break; - } - if (next() < 0) - break; - unfoul(); - checkup(); - prizecheck(); - moveall(); - thinkofgrapples(); - boardcomp(); - compcombat(); - resolve(); - reload(); - checksails(); - if (Sync() < 0) { - value = 1; - break; - } - } - sync_close(1); - return value; -} diff --git a/games/sail/driver.h b/games/sail/driver.h deleted file mode 100644 index 84faf24..0000000 --- a/games/sail/driver.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)driver.h 8.1 (Berkeley) 5/31/93 - */ - -#include "externs.h" - -extern int dtab[]; diff --git a/games/sail/externs.h b/games/sail/externs.h deleted file mode 100644 index 89decdd..0000000 --- a/games/sail/externs.h +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)externs.h 8.1 (Berkeley) 5/31/93 - */ - -#include <stdio.h> -#include <signal.h> -#include <ctype.h> -#include <setjmp.h> -#include <stdlib.h> -#include "machdep.h" - - /* program mode */ -int mode; -jmp_buf restart; -#define MODE_PLAYER 1 -#define MODE_DRIVER 2 -#define MODE_LOGGER 3 - - /* command line flags */ -char debug; /* -D */ -char randomize; /* -x, give first available ship */ -char longfmt; /* -l, print score in long format */ -char nobells; /* -b, don't ring bell before Signal */ - - /* other initial modes */ -char issetuid; /* running setuid */ - -#define die() (random() % 6 + 1) -#define sqr(a) ((a) * (a)) -#define abs(a) ((a) > 0 ? (a) : -(a)) -#define min(a,b) ((a) < (b) ? (a) : (b)) - -#define grappled(a) ((a)->file->ngrap) -#define fouled(a) ((a)->file->nfoul) -#define snagged(a) (grappled(a) + fouled(a)) - -#define grappled2(a, b) ((a)->file->grap[(b)->file->index].sn_count) -#define fouled2(a, b) ((a)->file->foul[(b)->file->index].sn_count) -#define snagged2(a, b) (grappled2(a, b) + fouled2(a, b)) - -#define Xgrappled2(a, b) ((a)->file->grap[(b)->file->index].sn_turn < turn-1 ? grappled2(a, b) : 0) -#define Xfouled2(a, b) ((a)->file->foul[(b)->file->index].sn_turn < turn-1 ? fouled2(a, b) : 0) -#define Xsnagged2(a, b) (Xgrappled2(a, b) + Xfouled2(a, b)) - -#define cleangrapple(a, b, c) Cleansnag(a, b, c, 1) -#define cleanfoul(a, b, c) Cleansnag(a, b, c, 2) -#define cleansnag(a, b, c) Cleansnag(a, b, c, 3) - -#define sterncolour(sp) ((sp)->file->stern+'0'-((sp)->file->captured?10:0)) -#define sternrow(sp) ((sp)->file->row + dr[(sp)->file->dir]) -#define sterncol(sp) ((sp)->file->col + dc[(sp)->file->dir]) - -#define capship(sp) ((sp)->file->captured?(sp)->file->captured:(sp)) - -#define readyname(r) ((r) & R_LOADING ? '*' : ((r) & R_INITIAL ? '!' : ' ')) - -/* loadL and loadR, should match loadname[] */ -#define L_EMPTY 0 /* should be 0, don't change */ -#define L_GRAPE 1 -#define L_CHAIN 2 -#define L_ROUND 3 -#define L_DOUBLE 4 -#define L_EXPLODE 5 - -/* - * readyL and readyR, these are bits, except R_EMPTY - */ -#define R_EMPTY 0 /* not loaded and not loading */ -#define R_LOADING 1 /* loading */ -#define R_DOUBLE 2 /* loading double */ -#define R_LOADED 4 /* loaded */ -#define R_INITIAL 8 /* loaded initial */ - -#define HULL 0 -#define RIGGING 1 - -#define W_CAPTAIN 1 -#define W_CAPTURED 2 -#define W_CLASS 3 -#define W_CREW 4 -#define W_DBP 5 -#define W_DRIFT 6 -#define W_EXPLODE 7 -#define W_FILE 8 -#define W_FOUL 9 -#define W_GUNL 10 -#define W_GUNR 11 -#define W_HULL 12 -#define W_MOVE 13 -#define W_OBP 14 -#define W_PCREW 15 -#define W_UNFOUL 16 -#define W_POINTS 17 -#define W_QUAL 18 -#define W_UNGRAP 19 -#define W_RIGG 20 -#define W_COL 21 -#define W_DIR 22 -#define W_ROW 23 -#define W_SIGNAL 24 -#define W_SINK 25 -#define W_STRUCK 26 -#define W_TA 27 -#define W_ALIVE 28 -#define W_TURN 29 -#define W_WIND 30 -#define W_FS 31 -#define W_GRAP 32 -#define W_RIG1 33 -#define W_RIG2 34 -#define W_RIG3 35 -#define W_RIG4 36 -#define W_BEGIN 37 -#define W_END 38 -#define W_DDEAD 39 - -#define NLOG 10 -struct logs { - char l_name[20]; - int l_uid; - int l_shipnum; - int l_gamenum; - int l_netpoints; -}; - -struct BP { - short turnsent; - struct ship *toship; - short mensent; -}; - -struct snag { - short sn_count; - short sn_turn; -}; - -#define NSCENE nscene -#define NSHIP 10 -#define NBP 3 - -#define NNATION 8 -#define N_A 0 -#define N_B 1 -#define N_S 2 -#define N_F 3 -#define N_J 4 -#define N_D 5 -#define N_K 6 -#define N_O 7 - -struct File { - int index; - char captain[20]; /* 0 */ - short points; /* 20 */ - char loadL; /* 22 */ - char loadR; /* 24 */ - char readyL; /* 26 */ - char readyR; /* 28 */ - struct BP OBP[NBP]; /* 30 */ - struct BP DBP[NBP]; /* 48 */ - char struck; /* 66 */ - struct ship *captured; /* 68 */ - short pcrew; /* 70 */ - char movebuf[60]; /* 72 */ - char drift; /* 132 */ - short nfoul; - short ngrap; - struct snag foul[NSHIP]; /* 134 */ - struct snag grap[NSHIP]; /* 144 */ - char RH; /* 274 */ - char RG; /* 276 */ - char RR; /* 278 */ - char FS; /* 280 */ - char explode; /* 282 */ - char sink; /* 284 */ - char dir; - short col; - short row; - char loadwith; - char stern; -}; - -struct ship { - char *shipname; /* 0 */ - struct shipspecs *specs; /* 2 */ - char nationality; /* 4 */ - short shiprow; /* 6 */ - short shipcol; /* 8 */ - char shipdir; /* 10 */ - struct File *file; /* 12 */ -}; - -struct scenario { - char winddir; /* 0 */ - char windspeed; /* 2 */ - char windchange; /* 4 */ - char vessels; /* 12 */ - char *name; /* 14 */ - struct ship ship[NSHIP]; /* 16 */ -}; -extern struct scenario scene[]; -int nscene; - -struct shipspecs { - char bs; - char fs; - char ta; - short guns; - char class; - char hull; - char qual; - char crew1; - char crew2; - char crew3; - char gunL; - char gunR; - char carL; - char carR; - char rig1; - char rig2; - char rig3; - char rig4; - short pts; -}; -extern struct shipspecs specs[]; - -struct scenario *cc; /* the current scenario */ -struct ship *ls; /* &cc->ship[cc->vessels] */ - -#define SHIP(s) (&cc->ship[s]) -#define foreachship(sp) for ((sp) = cc->ship; (sp) < ls; (sp)++) - -struct windeffects { - char A, B, C, D; -}; -struct windeffects WET[7][6]; - -struct Tables { - char H, G, C, R; -}; -struct Tables RigTable[11][6]; -struct Tables HullTable[11][6]; - -char AMMO[9][4]; -char HDT[9][10]; -char HDTrake[9][10]; -char QUAL[9][5]; -char MT[9][3]; - -extern char *countryname[]; -extern char *classname[]; -extern char *directionname[]; -extern char *qualname[]; -extern char loadname[]; - -extern char rangeofshot[]; - -extern char dr[], dc[]; - -int winddir; -int windspeed; -int turn; -int game; -int alive; -int people; -char hasdriver; - -char *info(); -char *quality(); -double arctan(); -char *saywhat(); -struct ship *closestenemy(); - -char *rindex(); -char *strcpy(); -char *strcat(); -char *strncpy(); -char *getenv(); -char *gets(); diff --git a/games/sail/game.c b/games/sail/game.c deleted file mode 100644 index 8ff3c90..0000000 --- a/games/sail/game.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)game.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" - -maxturns(ship, af) -struct ship *ship; -char *af; -{ - int turns; - - turns = ship->specs->ta; - if (*af = (ship->file->drift > 1 && turns)) { - turns--; - if (ship->file->FS == 1) - turns = 0; - } - return turns; -} - -maxmove(ship, dir, fs) -struct ship *ship; -int dir, fs; -{ - int riggone = 0, Move, flank = 0; - - Move = ship->specs->bs; - if (!ship->specs->rig1) - riggone++; - if (!ship->specs->rig2) - riggone++; - if (!ship->specs->rig3) - riggone++; - if (!ship->specs->rig4) - riggone++; - if ((ship->file->FS || fs) && fs != -1) { - flank = 1; - Move = ship->specs->fs; - } - if (dir == winddir) - Move -= 1 + WET[windspeed][ship->specs->class-1].B; - else if (dir == winddir + 2 || dir == winddir - 2 || dir == winddir - 6 || dir == winddir + 6) - Move -= 1 + WET[windspeed][ship->specs->class-1].C; - else if (dir == winddir + 3 || dir == winddir - 3 || dir == winddir - 5 || dir == winddir + 5) - Move = (flank ? 2 : 1) - WET[windspeed][ship->specs->class-1].D; - else if (dir == winddir + 4 || dir == winddir - 4) - Move = 0; - else - Move -= WET[windspeed][ship->specs->class-1].A; - Move -= riggone; - Move = Move < 0 ? 0 : Move; - return(Move); -} diff --git a/games/sail/globals.c b/games/sail/globals.c deleted file mode 100644 index e9ccc07..0000000 --- a/games/sail/globals.c +++ /dev/null @@ -1,511 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)globals.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" - -struct scenario scene[] = { - /* - * int winddir; - * int windspeed; - * int windchange; - * int vessels; - * char *name; - * struct ship ship[NSHIP]; - */ - 5, 3, 5, 2, "Ranger vs. Drake", - { - { "Ranger", specs+0, N_A, 7, 20, 4, 0 }, - { "Drake", specs+1, N_B, 7, 31, 5, 0 } - }, - 1, 3, 6, 2, "The Battle of Flamborough Head", - { - { "Bonhomme Rich", specs+2, N_A, 13, 40, 2, 0 }, - { "Serapis", specs+3, N_B, 2, 42, 2, 0 } - }, - 5, 5, 5, 10, "Arbuthnot and Des Touches", - { - { "America", specs+4, N_B, 7, 37, 4, 0 }, - { "Befford", specs+5, N_B, 5, 35, 4, 0 }, - { "Adamant", specs+6, N_B, 3, 33, 4, 0 }, - { "London", specs+7, N_B, 1, 31, 4, 0 }, - { "Royal Oak", specs+8, N_B, -1, 29, 4, 0 }, - { "Neptune", specs+9, N_F, 6, 44, 4, 0 }, - { "Duc Bougogne", specs+10, N_F, 8, 46, 4, 0 }, - { "Conquerant", specs+48, N_F, 10, 48, 4, 0 }, - { "Provence", specs+11, N_F, 12, 50, 4, 0 }, - { "Romulus", specs+12, N_F, 20, 58, 4, 0 } - }, - 1, 3, 5, 10, "Suffren and Hughes", - { - { "Monmouth", specs+52, N_B, 9, 45, 2, 0 }, - { "Hero", specs+5, N_B, 13, 49, 2, 0 }, - { "Isis", specs+6, N_B, 12, 48, 2, 0 }, - { "Superb", specs+50, N_B, 10, 46, 2, 0 }, - { "Burford", specs+48, N_B, 11, 47, 2, 0 }, - { "Flamband", specs+13, N_F, 7, 59, 4, 0 }, - { "Annibal", specs+9, N_F, 4, 56, 4, 0 }, - { "Severe", specs+11, N_F, 2, 54, 4, 0 }, - { "Brilliant", specs+49, N_F, -1, 51, 4, 0 }, - { "Sphinx", specs+51, N_F, -5, 47, 4, 0 } - }, - 1, 3, 4, 2, "Nymphe vs. Cleopatre", - { - { "Nymphe", specs+14, N_B, 13, 30, 2, 0 }, - { "Cleopatre", specs+15, N_F, 3, 41, 2, 0 } - }, - 1, 3, 5, 2, "Mars vs. Hercule", - { - { "Mars", specs+16, N_B, 13, 30, 2, 0 }, - { "Hercule", specs+17, N_F, 3, 41, 2, 0 } - }, - 5, 3, 5, 2, "Ambuscade vs. Baionnaise", - { - { "Ambuscade", specs+18, N_B, 13, 30, 2, 0 }, - { "Baionnaise", specs+19, N_F, 3, 41, 2, 0 } - }, - 1, 5, 6, 2, "Constellation vs. Insurgent", - { - { "Constellation", specs+20, N_A, 9, 50, 8, 0 }, - { "Insurgent", specs+22, N_F, 4, 24, 2, 0 } - }, - 1, 3, 5, 2, "Constellation vs. Vengeance", - { - { "Constellation", specs+20, N_A, 12, 40, 2, 0 }, - { "Vengeance", specs+21, N_F, 1, 43, 2, 0 } - }, - 1, 3, 6, 10, "The Battle of Lissa", - { - { "Amphion", specs+23, N_B, 8, 50, 4, 0 }, - { "Active", specs+24, N_B, 6, 48, 4, 0 }, - { "Volage", specs+25, N_B, 4, 46, 4, 0 }, - { "Cerberus", specs+26, N_B, 2, 44, 4, 0 }, - { "Favorite", specs+27, N_F, 9, 34, 2, 0 }, - { "Flore", specs+21, N_F, 13, 39, 2, 0 }, - { "Danae", specs+64, N_F, 15, 37, 2, 0 }, - { "Bellona", specs+28, N_F, 17, 35, 2, 0 }, - { "Corona", specs+29, N_F, 12, 31, 2, 0 }, - { "Carolina", specs+30, N_F, 15, 28, 2, 0 } - }, - 2, 5, 6, 2, "Constitution vs. Guerriere", - { - { "Constitution", specs+31, N_A, 7, 35, 1, 0 }, - { "Guerriere", specs+32, N_B, 7, 47, 4, 0 } - }, - 1, 3, 5, 2, "United States vs. Macedonian", - { - { "United States", specs+33, N_A, 1, 52, 6, 0 }, - { "Macedonian", specs+34, N_B, 14, 40, 1, 0 } - }, - 1, 3, 6, 2, "Constitution vs. Java", - { - { "Constitution", specs+31, N_A, 1, 40, 2, 0 }, - { "Java", specs+35, N_B, 11, 40, 2, 0 } - }, - 1, 3, 5, 2, "Chesapeake vs. Shannon", - { - { "Chesapeake", specs+36, N_A, 13, 40, 2, 0 }, - { "Shannon", specs+37, N_B, 1, 42, 2, 0 } - }, - 1, 1, 6, 5, "The Battle of Lake Erie", - { - { "Lawrence", specs+38, N_A, 4, 55, 8, 0 }, - { "Niagara", specs+42, N_A, 7, 61, 8, 0 }, - { "Lady Prevost", specs+39, N_B, 4, 25, 2, 0 }, - { "Detroit", specs+40, N_B, 7, 22, 2, 0 }, - { "Q. Charlotte", specs+41, N_B, 10, 19, 2, 0 } - }, - 1, 1, 5, 2, "Wasp vs. Reindeer", - { - { "Wasp", specs+42, N_A, 3, 41, 2, 0 }, - { "Reindeer", specs+43, N_B, 10, 48, 2, 0 } - }, - 1, 2, 5, 3, "Constitution vs. Cyane and Levant", - { - { "Constitution", specs+31, N_A, 10, 45, 2, 0 }, - { "Cyane", specs+44, N_B, 3, 37, 2, 0 }, - { "Levant", specs+45, N_B, 5, 35, 2, 0 } - }, - 5, 5, 5, 3, "Pellew vs. Droits de L'Homme", - { - { "Indefatigable", specs+46, N_B, 12, 45, 6, 0 }, - { "Amazon", specs+47, N_B, 9, 48, 6, 0 }, - { "Droits L'Hom", specs+48, N_F, 3, 28, 5, 0 } - }, - 2, 2, 3, 10, "Algeciras", - { - { "Caesar", specs+49, N_B, 7, 70, 6, 0 }, - { "Pompee", specs+50, N_B, 5, 72, 6, 0 }, - { "Spencer", specs+5, N_B, 3, 74, 6, 0 }, - { "Hannibal", specs+7, N_B, 1, 76, 6, 0 }, - { "Real-Carlos", specs+53, N_S, 9, 20, 3, 0 }, - { "San Fernando", specs+54, N_S, 11, 16, 3, 0 }, - { "Argonauta", specs+55, N_S, 10, 14, 4, 0 }, - { "San Augustine", specs+56, N_S, 6, 22, 4, 0 }, - { "Indomptable", specs+51, N_F, 7, 23, 5, 0 }, - { "Desaix", specs+52, N_F, 7, 27, 7, 0 } - }, - 5, 3, 6, 7, "Lake Champlain", - { - { "Saratoga", specs+60, N_A, 8, 10, 1, 0 }, - { "Eagle", specs+61, N_A, 9, 13, 2, 0 }, - { "Ticonderoga", specs+62, N_A, 12, 17, 3, 0 }, - { "Preble", specs+63, N_A, 14, 20, 2, 0 }, - { "Confiance", specs+57, N_B, 4, 70, 6, 0 }, - { "Linnet", specs+58, N_B, 7, 68, 6, 0 }, - { "Chubb", specs+59, N_B, 10, 65, 6, 0 } - }, - 5, 3, 6, 4, "Last Voyage of the USS President", - { - { "President", specs+67, N_A, 12, 42, 5, 0 }, - { "Endymion", specs+64, N_B, 5, 42, 5, 0 }, - { "Pomone", specs+65, N_B, 7, 82, 6, 0 }, - { "Tenedos", specs+66, N_B, 7, -1, 4, 0 } - }, - 7, 5, 5, 2, "Hornblower and the Natividad", - { - { "Lydia", specs+68, N_B, 12, 40, 2, 0 }, - { "Natividad", specs+69, N_S, 2, 40, 4, 0 } - }, - 1, 3, 6, 2, "Curse of the Flying Dutchman", - { - { "Piece of Cake", specs+19, N_S, 7, 40, 2, 0 }, - { "Flying Dutchy", specs+71, N_F, 7, 41, 1, 0 } - }, - 1, 4, 1, 4, "The South Pacific", - { - { "USS Scurvy", specs+70, N_A, 7, 40, 1, 0 }, - { "HMS Tahiti", specs+71, N_B, 12, 60, 1, 0 }, - { "Australian", specs+18, N_S, 5, 20, 8, 0 }, - { "Bikini Atoll", specs+63, N_F, 2, 60, 4, 0 } - }, - 7, 3, 6, 5, "Hornblower and the battle of Rosas bay", - { - { "Sutherland", specs+5, N_B, 13, 30, 2, 0 }, - { "Turenne", specs+10, N_F, 9, 35, 6, 0 }, - { "Nightmare", specs+9, N_F, 7, 37, 6, 0 }, - { "Paris", specs+53, N_F, 3, 45, 4, 0 }, - { "Napolean", specs+56, N_F, 1, 40, 6, 0 } - }, - 6, 4, 7, 5, "Cape Horn", - { - { "Concord", specs+51, N_A, 3, 20, 4, 0 }, - { "Berkeley", specs+7, N_A, 5, 50, 5, 0 }, - { "Thames", specs+71, N_B, 10, 40, 1, 0 }, - { "Madrid", specs+53, N_S, 13, 60, 8, 0 }, - { "Musket", specs+10, N_F, 10, 60, 7, 0 } - }, - 8, 3, 7, 3, "New Orleans", - { - { "Alligator", specs+71, N_A, 13, 5, 1, 0 }, - { "Firefly", specs+50, N_B, 10, 20, 8, 0 }, - { "Cypress", specs+46, N_B, 5, 10, 6, 0 } - }, - 5, 3, 7, 3, "Botany Bay", - { - { "Shark", specs+11, N_B, 6, 15, 4, 0 }, - { "Coral Snake", specs+31, N_F, 3, 30, 6, 0 }, - { "Sea Lion", specs+33, N_F, 13, 50, 8, 0 } - }, - 4, 3, 6, 4, "Voyage to the Bottom of the Sea", - { - { "Seaview", specs+71, N_A, 6, 3, 3, 0 }, - { "Flying Sub", specs+64, N_A, 8, 3, 3, 0 }, - { "Mermaid", specs+70, N_B, 2, 5, 5, 0 }, - { "Giant Squid", specs+53, N_S, 10, 30, 8, 0 } - }, - 7, 3, 6, 3, "Frigate Action", - { - { "Killdeer", specs+21, N_A, 7, 20, 8, 0 }, - { "Sandpiper", specs+27, N_B, 5, 40, 8, 0 }, - { "Curlew", specs+34, N_S, 10, 60, 8, 0 } - }, - 7, 2, 5, 6, "The Battle of Midway", - { - { "Enterprise", specs+49, N_A, 10, 70, 8, 0 }, - { "Yorktown", specs+51, N_A, 3, 70, 7, 0 }, - { "Hornet", specs+52, N_A, 6, 70, 7, 0 }, - { "Akagi", specs+53, N_J, 6, 10, 4, 0 }, - { "Kaga", specs+54, N_J, 4, 12, 4, 0 }, - { "Soryu", specs+55, N_J, 2, 14, 4, 0 } - }, - 1, 3, 4, 8, "Star Trek", - { - { "Enterprise", specs+76, N_D,-10, 60, 7, 0 }, - { "Yorktown", specs+77, N_D, 0, 70, 7, 0 }, - { "Reliant", specs+78, N_D, 10, 70, 7, 0 }, - { "Galileo", specs+79, N_D, 20, 60, 7, 0 }, - { "Kobayashi Maru", specs+80, N_K, 0,120, 7, 0 }, - { "Klingon II", specs+81, N_K, 10,120, 7, 0 }, - { "Red Orion", specs+82, N_O, 0, 0, 3, 0 }, - { "Blue Orion", specs+83, N_O, 10, 0, 3, 0 } - } -}; -int nscene = sizeof scene / sizeof (struct scenario); - -struct shipspecs specs[] = { -/* bs fs ta guns hull crew1 crew3 gunR carR rig2 rig4 pts */ -/* class qual crew2 gunL carL rig1 rig3 */ -/*00*/ 4, 7, 3, 19, 5, 5, 4, 2, 2, 2, 2, 2, 0, 0, 4, 4, 4, 4, 7, -/*01*/ 4, 7, 3, 17, 5, 5, 4, 2, 2, 2, 0, 0, 4, 4, 3, 3, 3, 3, 6, -/*02*/ 3, 5, 2, 42, 4, 7, 4, 2, 2, 2, 2, 2, 0, 0, 5, 5, 5, -1, 11, -/*03*/ 4, 6, 3, 44, 3, 7, 4, 2, 2, 2, 3, 3, 0, 0, 5, 5, 5, 5, 12, -/*04*/ 3, 5, 2, 64, 2, 17, 4, 8, 6, 6, 12, 12, 2, 2, 7, 7, 7, -1, 20, -/*05*/ 3, 5, 2, 74, 2, 20, 4, 8, 8, 8, 16, 16, 2, 2, 7, 7, 7, -1, 26, -/*06*/ 3, 5, 2, 50, 2, 12, 4, 6, 4, 4, 8, 8, 2, 2, 6, 6, 6, -1, 17, -/*07*/ 3, 5, 1, 98, 1, 23, 4, 10, 10, 10, 18, 18, 2, 2, 8, 8, 8, -1, 28, -/*08*/ 3, 5, 2, 74, 2, 20, 4, 8, 8, 8, 16, 16, 2, 2, 7, 7, 7, -1, 26, -/*09*/ 3, 5, 2, 74, 2, 21, 3, 10, 10, 8, 20, 20, 0, 0, 7, 7, 7, -1, 24, -/*10*/ 3, 5, 1, 80, 1, 23, 3, 12, 12, 10, 22, 22, 0, 0, 7, 7, 7, -1, 27, -/*11*/ 3, 5, 2, 64, 2, 18, 3, 8, 8, 6, 12, 12, 0, 0, 7, 7, 7, -1, 18, -/*12*/ 3, 5, 2, 44, 2, 11, 3, 4, 4, 4, 6, 6, 2, 2, 5, 5, 5, -1, 10, -/*13*/ 3, 5, 2, 50, 2, 14, 3, 6, 6, 4, 8, 8, 0, 0, 6, 6, 6, -1, 14, -/*14*/ 4, 6, 3, 36, 3, 11, 4, 4, 4, 2, 4, 4, 2, 2, 5, 5, 5, 5, 11, -/*15*/ 4, 6, 3, 36, 3, 11, 3, 4, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 10, -/*16*/ 3, 5, 2, 74, 2, 21, 4, 10, 8, 8, 18, 18, 2, 2, 7, 7, 7, -1, 26, -/*17*/ 3, 5, 2, 74, 2, 21, 3, 10, 10, 8, 20, 20, 2, 2, 7, 7, 7, -1, 23, -/*18*/ 4, 6, 3, 32, 3, 8, 3, 4, 2, 2, 4, 4, 2, 2, 5, 5, 5, 5, 9, -/*19*/ 4, 6, 3, 24, 4, 6, 3, 4, 4, 4, 2, 2, 0, 0, 4, 4, 4, 4, 9, -/*20*/ 4, 7, 3, 38, 4, 14, 5, 6, 4, 4, 4, 4, 6, 6, 5, 5, 5, 5, 17, -/*21*/ 4, 6, 3, 40, 3, 15, 3, 8, 6, 6, 6, 6, 4, 4, 5, 5, 5, 5, 15, -/*22*/ 4, 7, 3, 36, 4, 11, 3, 6, 6, 4, 4, 4, 2, 2, 5, 5, 5, 5, 11, -/*23*/ 4, 6, 3, 32, 3, 11, 5, 4, 4, 2, 4, 4, 2, 2, 5, 5, 5, 5, 13, -/*24*/ 4, 6, 3, 38, 3, 14, 5, 4, 4, 4, 6, 6, 4, 4, 5, 5, 5, 5, 18, -/*25*/ 4, 6, 3, 22, 3, 6, 5, 2, 2, 2, 0, 0, 8, 8, 4, 4, 4, 4, 11, -/*26*/ 4, 6, 3, 32, 3, 11, 5, 4, 4, 2, 4, 4, 2, 2, 5, 5, 5, 5, 13, -/*27*/ 4, 6, 3, 40, 3, 14, 3, 6, 6, 4, 6, 6, 4, 4, 5, 5, 5, 5, 15, -/*28*/ 4, 6, 3, 32, 3, 11, 2, 4, 4, 4, 4, 4, 0, 0, 5, 5, 5, 5, 9, -/*29*/ 4, 6, 3, 40, 3, 14, 2, 6, 6, 4, 6, 6, 4, 4, 5, 5, 5, 5, 12, -/*30*/ 4, 6, 3, 32, 3, 8, 2, 4, 4, 1, 2, 2, 0, 0, 4, 4, 4, 4, 7, -/*31*/ 4, 7, 3, 44, 4, 18, 5, 6, 6, 6, 8, 8, 6, 6, 6, 6, 6, 6, 24, -/*32*/ 4, 6, 3, 38, 3, 14, 4, 4, 4, 2, 6, 6, 4, 4, 5, 5, 5, 5, 15, -/*33*/ 4, 5, 3, 44, 3, 18, 5, 8, 6, 6, 8, 8, 8, 8, 6, 6, 6, 6, 24, -/*34*/ 4, 6, 3, 38, 3, 14, 4, 4, 4, 4, 6, 6, 4, 4, 5, 5, 5, 5, 16, -/*35*/ 4, 7, 3, 38, 4, 14, 4, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 19, -/*36*/ 4, 6, 3, 38, 3, 14, 3, 6, 6, 4, 6, 6, 6, 6, 5, 5, 5, 5, 14, -/*37*/ 4, 6, 3, 38, 3, 14, 5, 6, 4, 4, 6, 6, 6, 6, 5, 5, 5, 5, 17, -/*38*/ 4, 7, 3, 20, 5, 6, 4, 4, 2, 2, 0, 0, 6, 6, 4, 4, 4, 4, 9, -/*39*/ 4, 7, 3, 13, 6, 3, 4, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 5, -/*40*/ 4, 7, 3, 19, 5, 5, 4, 2, 2, 2, 2, 2, 0, 0, 4, 4, 4, 4, 7, -/*41*/ 4, 7, 3, 17, 5, 5, 4, 2, 2, 2, 2, 2, 0, 0, 3, 3, 3, 3, 6, -/*42*/ 4, 7, 3, 20, 5, 6, 5, 4, 2, 2, 0, 0, 6, 6, 4, 4, 4, 4, 12, -/*43*/ 4, 7, 3, 18, 5, 5, 5, 2, 2, 2, 0, 0, 6, 6, 4, 4, 4, 4, 9, -/*44*/ 4, 7, 3, 24, 5, 6, 4, 4, 2, 2, 0, 0,10,10, 4, 4, 4, 4, 11, -/*45*/ 4, 7, 3, 20, 5, 6, 4, 2, 2, 2, 0, 0, 8, 8, 4, 4, 4, 4, 10, -/*46*/ 4, 6, 3, 44, 3, 11, 5, 4, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 14, -/*47*/ 4, 6, 3, 36, 3, 12, 4, 4, 4, 4, 6, 6, 2, 2, 5, 5, 5, 5, 14, -/*48*/ 3, 5, 2, 74, 2, 21, 3, 10, 8, 8, 20, 20, 2, 2, 4, 4, 7, -1, 24, -/*49*/ 3, 5, 2, 80, 2, 24, 4, 10, 8, 8, 20, 20, 2, 2, 8, 8, 8, -1, 31, -/*50*/ 3, 5, 2, 74, 2, 21, 4, 8, 8, 6, 16, 16, 4, 4, 7, 7, 7, -1, 27, -/*51*/ 3, 5, 2, 80, 2, 24, 3, 12, 12, 10, 22, 22, 2, 2, 7, 7, 7, -1, 27, -/*52*/ 3, 5, 2, 74, 2, 21, 3, 10, 10, 8, 20, 20, 2, 2, 7, 7, 7, -1, 24, -/*53*/ 3, 5, 1, 112, 1, 27, 2, 12, 12, 12, 24, 24, 0, 0, 9, 9, 9, -1, 27, -/*54*/ 3, 5, 1, 96, 1, 24, 2, 12, 12, 10, 20, 20, 0, 0, 8, 8, 8, -1, 24, -/*55*/ 3, 5, 2, 80, 2, 23, 2, 10, 10, 8, 20, 20, 0, 0, 7, 7, 7, -1, 23, -/*56*/ 3, 5, 2, 74, 2, 21, 2, 10, 8, 8, 16, 16, 4, 4, 7, 7, 7, -1, 20, -/*57*/ 4, 6, 3, 37, 3, 12, 4, 4, 4, 2, 6, 6, 4, 4, 5, 5, 5, 5, 14, -/*58*/ 4, 7, 3, 16, 5, 5, 5, 2, 2, 2, 0, 0, 4, 4, 4, 4, 4, 4, 10, -/*59*/ 4, 7, 3, 11, 6, 3, 4, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 5, -/*60*/ 4, 7, 3, 26, 5, 6, 4, 4, 2, 2, 2, 2, 6, 6, 4, 4, 4, 4, 12, -/*61*/ 4, 7, 3, 20, 5, 6, 4, 4, 2, 2, 0, 0, 6, 6, 4, 4, 4, 4, 11, -/*62*/ 4, 7, 3, 17, 5, 5, 4, 2, 2, 2, 0, 0, 6, 6, 4, 4, 4, 4, 9, -/*63*/ 4, 7, 3, 7, 6, 3, 4, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 4, -/*64*/ 4, 6, 3, 40, 3, 15, 4, 4, 4, 4, 8, 8, 6, 6, 5, 5, 5, 5, 17, -/*65*/ 4, 6, 3, 44, 3, 15, 4, 8, 8, 6, 10, 10, 2, 2, 6, 6, 6, 6, 20, -/*66*/ 4, 6, 3, 38, 3, 14, 4, 4, 4, 4, 6, 6, 6, 6, 5, 5, 5, 5, 15, -/*67*/ 4, 5, 3, 44, 3, 18, 5, 8, 6, 6, 8, 8, 8, 8, 6, 6, 6, 6, 24, -/*68*/ 4, 6, 3, 36, 3, 9, 5, 4, 4, 2, 4, 4, 2, 2, 5, 5, 5, 5, 13, -/*69*/ 3, 5, 2, 50, 2, 14, 2, 6, 6, 6, 8, 8, 0, 0, 6, 6, 6, -1, 14, -/*70*/ 3, 5, 1, 136, 1, 30, 1, 8, 14, 14, 28, 28, 0, 0, 9, 9, 9, -1, 27, -/*71*/ 3, 5, 1, 120, 1, 27, 5, 16, 14, 14, 28, 28, 2, 2, 9, 9, 9, -1, 43, -/*72*/ 3, 5, 1, 120, 2, 21, 5, 15, 17, 15, 25, 25, 7, 7, 9, 9, 9, -1, 36, -/*73*/ 3, 5, 1, 90, 3, 18, 4, 13, 15, 13, 20, 20, 6, 6, 5, 5, 5, 5, 28, -/*74*/ 4, 7, 3, 6, 6, 3, 4, 2, 2, 2, 20, 20, 6, 6, 2, 2, 3, 3, 5, -/*75*/ 3, 5, 1, 110, 2, 20, 4, 14, 15, 11, 26, 26, 8, 8, 7, 8, 9, -1, 34, -/*76*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/*77*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/*78*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/*79*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/*80*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/*81*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/*82*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/*83*/ 4, 7, 3, 450, 1, 99, 5, 50, 40, 40, 50, 50,25,25, 9, 9, 9, -1, 75, -/* bs fs ta guns hull crew1 crew3 gunR carR rig2 rig4 pts */ -/* class qual crew2 gunL carL rig1 rig3 */ -}; - -struct windeffects WET[7][6] = { - { {9,9,9,9}, {9,9,9,9}, {9,9,9,9}, {9,9,9,9}, {9,9,9,9}, {9,9,9,9} }, - { {3,2,2,0}, {3,2,1,0}, {3,2,1,0}, {3,2,1,0}, {2,1,0,0}, {2,1,0,0} }, - { {1,1,1,0}, {1,1,0,0}, {1,0,0,0}, {1,0,0,0}, {1,0,0,0}, {1,0,0,0} }, - { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0} }, - { {0,0,0,0}, {1,0,0,0}, {1,1,0,0}, {1,1,0,0}, {2,2,1,0}, {2,2,1,0} }, - { {1,0,0,0}, {1,1,0,0}, {1,1,1,0}, {1,1,1,0}, {3,2,2,0}, {3,2,2,0} }, - { {2,1,1,0}, {3,2,1,0}, {3,2,1,0}, {3,2,1,0}, {3,3,2,0}, {3,3,2,0} } -}; - -struct Tables RigTable[11][6] = { - { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,1}, {0,0,1,0} }, - { {0,0,0,0}, {0,0,0,0}, {0,0,0,1}, {0,0,1,0}, {1,0,0,1}, {0,1,1,1} }, - { {0,0,0,0}, {0,0,0,1}, {0,0,1,1}, {0,1,0,1}, {0,1,0,1}, {1,0,1,2} }, - { {0,0,0,0}, {0,0,1,1}, {0,1,0,1}, {0,0,0,2}, {0,1,0,2}, {1,0,1,2} }, - { {0,1,0,1}, {1,0,0,1}, {0,1,1,2}, {0,1,0,2}, {0,0,1,3}, {1,0,1,4} }, - { {0,0,1,1}, {0,1,0,2}, {1,0,0,3}, {0,1,1,3}, {1,0,0,4}, {1,1,1,4} }, - { {0,0,1,2}, {0,1,1,2}, {1,1,0,3}, {0,1,0,4}, {1,0,0,4}, {1,0,1,5} }, - { {0,0,1,2}, {0,1,0,3}, {1,1,0,3}, {1,0,2,4}, {0,2,1,5}, {2,1,0,5} }, - { {0,2,1,3}, {1,0,0,3}, {2,1,0,4}, {0,1,1,4}, {0,1,0,5}, {1,0,2,6} }, - { {1,1,0,4}, {1,0,1,4}, {2,0,0,5}, {0,2,1,5}, {0,1,2,6}, {0,2,0,7} }, - { {1,0,1,5}, {0,2,0,6}, {1,2,0,6}, {1,1,1,6}, {2,0,2,6}, {1,1,2,7} } -}; -struct Tables HullTable[11][6] = { - { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {1,0,0,0}, {0,1,0,0} }, - { {0,0,0,0}, {0,0,0,0}, {0,1,0,0}, {1,1,0,0}, {1,0,1,0}, {1,0,1,1} }, - { {0,1,0,0}, {1,0,0,0}, {1,1,0,0}, {1,0,1,0}, {1,0,1,1}, {2,1,0,0} }, - { {0,1,1,0}, {1,0,0,0}, {1,1,1,0}, {2,0,0,1}, {2,0,1,0}, {2,2,0,0} }, - { {0,1,1,0}, {1,0,0,1}, {2,1,0,1}, {2,2,1,0}, {3,0,1,0}, {3,1,0,0} }, - { {1,1,1,0}, {2,0,2,1}, {2,1,1,0}, {2,2,0,0}, {3,1,0,1}, {3,1,1,0} }, - { {1,2,2,0}, {2,0,2,1}, {2,1,0,1}, {2,2,0,0}, {3,1,1,0}, {4,2,1,0} }, - { {2,1,1,0}, {2,0,1,1}, {3,2,2,0}, {3,2,0,0}, {4,2,1,0}, {4,2,1,1} }, - { {2,1,2,0}, {3,1,1,1}, {3,2,2,0}, {4,2,1,0}, {4,1,0,2}, {4,2,2,0} }, - { {2,3,1,0}, {3,2,2,0}, {3,2,2,1}, {4,2,2,0}, {4,1,0,3}, {5,1,2,0} }, - { {2,2,4,0}, {3,3,1,1}, {4,2,1,1}, {5,1,0,2}, {5,1,2,1}, {6,2,2,0} }, -}; - -char AMMO[9][4] = { - { -1, 1, 0, 1 }, - { -1, 1, 0, 1 }, - { -1, 1, 0, 1 }, - { -2, 1, 0, 2 }, - { -2, 2, 0, 2 }, - { -2, 2, 0, 2 }, - { -3, 2, 0, 2 }, - { -3, 2, 0, 3 }, - { -3, 2, 0, 3 } -}; - -char HDT[9][10] = { - { 1, 0,-1,-2,-3,-3,-4,-4,-4,-4 }, - { 1, 1, 0,-1,-2,-2,-3,-3,-3,-3 }, - { 2, 1, 0,-1,-2,-2,-3,-3,-3,-3 }, - { 2, 2, 1, 0,-1,-1,-2,-2,-2,-2 }, - { 3, 2, 1, 0,-1,-1,-2,-2,-2,-2 }, - { 3, 3, 2, 1, 0, 0,-1,-1,-1,-1 }, - { 4, 3, 2, 1, 0, 0,-1,-1,-1,-1 }, - { 4, 4, 3, 2, 1, 1, 0, 0, 0, 0 }, - { 5, 4, 3, 2, 1, 1, 0, 0, 0, 0 } -}; - -char HDTrake[9][10] = { - { 2, 1, 0,-1,-2,-2,-3,-3,-3,-3 }, - { 2, 2, 1, 0,-1,-1,-2,-2,-2,-2 }, - { 3, 2, 1, 0,-1,-1,-2,-2,-2,-2 }, - { 4, 3, 2, 1, 0, 0,-1,-1,-1,-1 }, - { 5, 4, 3, 2, 1, 1, 0, 0, 0, 0 }, - { 6, 5, 4, 3, 2, 2, 1, 1, 1, 1 }, - { 7, 6, 5, 4, 3, 3, 2, 2, 2, 2 }, - { 8, 7, 6, 5, 4, 4, 3, 3, 3, 3 }, - { 9, 8, 7, 6, 5, 5, 4, 4, 4, 4 } -}; - -char QUAL[9][5] = { - { -1, 0, 0, 1, 1 }, - { -1, 0, 0, 1, 1 }, - { -1, 0, 0, 1, 2 }, - { -1, 0, 0, 1, 2 }, - { -1, 0, 0, 2, 2 }, - { -1,-1, 0, 2, 2 }, - { -2,-1, 0, 2, 2 }, - { -2,-1, 0, 2, 2 }, - { -2,-1, 0, 2, 3 } -}; - -char MT[9][3] = { - { 1, 0, 0 }, - { 1, 1, 0 }, - { 2, 1, 0 }, - { 2, 1, 1 }, - { 2, 2, 1 }, - { 3, 2, 1 }, - { 3, 2, 2 }, - { 4, 3, 2 }, - { 4, 4, 2 } -}; - -char rangeofshot[] = { - 0, - 1, /* grape */ - 3, /* chain */ - 10, /* round */ - 1 /* double */ -}; - -char *countryname[] = { - "American", "British", "Spanish", "French", "Japanese", - "Federation", "Klingon", "Orion" -}; - -char *classname[] = { - "Drift wood", - "Ship of the Line", - "Ship of the Line", - "Frigate", - "Corvette", - "Sloop", - "Brig" -}; - -char *directionname[] = { - "dead ahead", - "off the starboard bow", - "off the starboard beam", - "off the starboard quarter", - "dead astern", - "off the port quarter", - "off the port beam", - "off the port bow", - "dead ahead" -}; - -char *qualname[] = { "dead", "mutinous", "green", "mundane", "crack", "elite" }; - -char loadname[] = { '-', 'G', 'C', 'R', 'D', 'E' }; - -char dr[] = { 0, 1, 1, 0, -1, -1, -1, 0, 1 }; -char dc[] = { 0, 0, -1, -1, -1, 0, 1, 1, 1 }; diff --git a/games/sail/lo_main.c b/games/sail/lo_main.c deleted file mode 100644 index 0615bcc..0000000 --- a/games/sail/lo_main.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)lo_main.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -/* - * Print out the top ten SAILors - * - * -l force a long listing (print out real usernames) - */ -#include <sys/types.h> -#include <pwd.h> -#include "externs.h" -#include "pathnames.h" - -char *title[] = { - "Admiral", "Commodore", "Captain", "Captain", - "Captain", "Captain", "Captain", "Commander", - "Commander", "Lieutenant" -}; - -lo_main() -{ - FILE *fp; - char sbuf[32]; - int n = 0, people; - struct passwd *pass; - struct logs log; - struct ship *ship; - - if ((fp = fopen(_PATH_LOGFILE, "r")) == 0) { - perror(_PATH_LOGFILE); - exit(1); - } - switch (fread((char *)&people, sizeof people, 1, fp)) { - case 0: - printf("Nobody has sailed yet.\n"); - exit(0); - case 1: - break; - default: - perror(_PATH_LOGFILE); - exit(1); - } - while (fread((char *)&log, sizeof log, 1, fp) == 1 && - log.l_name[0] != '\0') { - if (longfmt && (pass = getpwuid(log.l_uid)) != NULL) - (void) sprintf(sbuf, "%10.10s (%s)", - log.l_name, pass->pw_name); - else - (void) sprintf(sbuf, "%20.20s", log.l_name); - ship = &scene[log.l_gamenum].ship[log.l_shipnum]; - printf("%-10s %21s of the %15s %3d points, %5.2f equiv\n", - title[n++], sbuf, ship->shipname, log.l_netpoints, - (float) log.l_netpoints / ship->specs->pts); - } - printf("\n%d people have played.\n", people); - return 0; -} diff --git a/games/sail/machdep.h b/games/sail/machdep.h deleted file mode 100644 index 148da5d..0000000 --- a/games/sail/machdep.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)machdep.h 8.1 (Berkeley) 5/31/93 - */ - -#define TIMEOUT 300 /* Sync() timeout in seconds */ - -/* for 4.2bsd machines */ -#define blockalarm() ((void) sigblock(1 << SIGALRM-1)) -#define unblockalarm() ((void) sigsetmask(sigblock(0) & ~(1 << SIGALRM-1))) - -/* for 2.9bsd machines (onyx) -typedef int void; -#define blockalarm() ((void) sighold(SIGALRM)) -#define unblockalarm() ((void) sigrelse(SIGALRM)) -*/ diff --git a/games/sail/main.c b/games/sail/main.c deleted file mode 100644 index e5deb9b..0000000 --- a/games/sail/main.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1983, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" - -/*ARGSUSED*/ -main(argc, argv) - int argc; - char **argv; -{ - char *p; - int i; - - srandomdev(); - issetuid = getuid() != geteuid(); - if (p = rindex(*argv, '/')) - p++; - else - p = *argv; - if (strcmp(p, "driver") == 0 || strcmp(p, "saildriver") == 0) - mode = MODE_DRIVER; - else if (strcmp(p, "sail.log") == 0) - mode = MODE_LOGGER; - else - mode = MODE_PLAYER; - while ((p = *++argv) && *p == '-') - switch (p[1]) { - case 'd': - mode = MODE_DRIVER; - break; - case 's': - mode = MODE_LOGGER; - break; - case 'D': - debug++; - break; - case 'x': - randomize; - break; - case 'l': - longfmt++; - break; - case 'b': - nobells++; - break; - default: - fprintf(stderr, "SAIL: Unknown flag %s.\n", p); - exit(1); - } - if (*argv) - game = atoi(*argv); - else - game = -1; - if (i = setjmp(restart)) - mode = i; - switch (mode) { - case MODE_PLAYER: - return pl_main(); - case MODE_DRIVER: - return dr_main(); - case MODE_LOGGER: - return lo_main(); - default: - fprintf(stderr, "SAIL: Unknown mode %d.\n", mode); - abort(); - } - /*NOTREACHED*/ -} diff --git a/games/sail/misc.c b/games/sail/misc.c deleted file mode 100644 index 4808f84..0000000 --- a/games/sail/misc.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" -#include "pathnames.h" - -#define distance(x,y) (abs(x) >= abs(y) ? abs(x) + abs(y)/2 : abs(y) + abs(x)/2) - -/* XXX */ -range(from, to) -struct ship *from, *to; -{ - int bow1r, bow1c, bow2r, bow2c; - int stern1r, stern1c, stern2c, stern2r; - int bb, bs, sb, ss, result; - - if (!to->file->dir) - return -1; - stern1r = bow1r = from->file->row; - stern1c = bow1c = from->file->col; - stern2r = bow2r = to->file->row; - stern2c = bow2c = to->file->col; - result = bb = distance(bow2r - bow1r, bow2c - bow1c); - if (bb < 5) { - stern2r += dr[to->file->dir]; - stern2c += dc[to->file->dir]; - stern1r += dr[from->file->dir]; - stern1c += dc[from->file->dir]; - bs = distance((bow2r - stern1r), (bow2c - stern1c)); - sb = distance((bow1r - stern2r), (bow1c - stern2c)); - ss = distance((stern2r - stern1r) ,(stern2c - stern1c)); - result = min(bb, min(bs, min(sb, ss))); - } - return result; -} - -struct ship * -closestenemy(from, side, anyship) -struct ship *from; -char side, anyship; -{ - struct ship *sp; - char a; - int olddist = 30000, dist; - struct ship *closest = 0; - - a = capship(from)->nationality; - foreachship(sp) { - if (sp == from) - continue; - if (sp->file->dir == 0) - continue; - if (a == capship(sp)->nationality && !anyship) - continue; - if (side && gunsbear(from, sp) != side) - continue; - dist = range(from, sp); - if (dist < olddist) { - closest = sp; - olddist = dist; - } - } - return closest; -} - -angle(dr, dc) -int dr, dc; -{ - int i; - - if (dc >= 0 && dr > 0) - i = 0; - else if (dr <= 0 && dc > 0) - i = 2; - else if (dc <= 0 && dr < 0) - i = 4; - else - i = 6; - dr = abs(dr); - dc = abs(dc); - if ((i == 0 || i == 4) && dc * 2.4 > dr) { - i++; - if (dc > dr * 2.4) - i++; - } else if ((i == 2 || i == 6) && dr * 2.4 > dc) { - i++; - if (dr > dc * 2.4) - i++; - } - return i % 8 + 1; -} - -gunsbear(from, to) /* checks for target bow or stern */ -struct ship *from, *to; -{ - int Dr, Dc, i; - int ang; - - Dr = from->file->row - to->file->row; - Dc = to->file->col - from->file->col; - for (i = 2; i; i--) { - if ((ang = angle(Dr, Dc) - from->file->dir + 1) < 1) - ang += 8; - if (ang >= 2 && ang <= 4) - return 'r'; - if (ang >= 6 && ang <= 7) - return 'l'; - Dr += dr[to->file->dir]; - Dc += dc[to->file->dir]; - } - return 0; -} - -portside(from, on, quick) -struct ship *from, *on; -int quick; /* returns true if fromship is */ -{ /* shooting at onship's starboard side */ - int ang; - int Dr, Dc; - - Dr = from->file->row - on->file->row; - Dc = on->file->col - from->file->col; - if (quick == -1) { - Dr += dr[on->file->dir]; - Dc += dc[on->file->dir]; - } - ang = angle(Dr, Dc); - if (quick != 0) - return ang; - ang = (ang + 4 - on->file->dir - 1) % 8 + 1; - return ang < 5; -} - -colours(sp) -struct ship *sp; -{ - char flag; - - if (sp->file->struck) - flag = '!'; - if (sp->file->explode) - flag = '#'; - if (sp->file->sink) - flag = '~'; - if (sp->file->struck) - return flag; - flag = *countryname[capship(sp)->nationality]; - return sp->file->FS ? flag : tolower(flag); -} - -#include <sys/file.h> -log(s) -struct ship *s; -{ - FILE *fp; - int persons; - int n; - struct logs log[NLOG]; - float net; - struct logs *lp; - - if ((fp = fopen(_PATH_LOGFILE, "r+")) == NULL) - return; -#ifdef LOCK_EX - if (flock(fileno(fp), LOCK_EX) < 0) - return; -#endif - net = (float)s->file->points / s->specs->pts; - persons = getw(fp); - n = fread((char *)log, sizeof(struct logs), NLOG, fp); - for (lp = &log[n]; lp < &log[NLOG]; lp++) - lp->l_name[0] = lp->l_uid = lp->l_shipnum - = lp->l_gamenum = lp->l_netpoints = 0; - rewind(fp); - if (persons < 0) - (void) putw(1, fp); - else - (void) putw(persons + 1, fp); - for (lp = log; lp < &log[NLOG]; lp++) - if (net > (float)lp->l_netpoints - / scene[lp->l_gamenum].ship[lp->l_shipnum].specs->pts) { - (void) fwrite((char *)log, - sizeof (struct logs), lp - log, fp); - (void) strcpy(log[NLOG-1].l_name, s->file->captain); - log[NLOG-1].l_uid = getuid(); - log[NLOG-1].l_shipnum = s->file->index; - log[NLOG-1].l_gamenum = game; - log[NLOG-1].l_netpoints = s->file->points; - (void) fwrite((char *)&log[NLOG-1], - sizeof (struct logs), 1, fp); - (void) fwrite((char *)lp, - sizeof (struct logs), &log[NLOG-1] - lp, fp); - break; - } -#ifdef LOCK_EX - (void) flock(fileno(fp), LOCK_UN); -#endif - (void) fclose(fp); -} diff --git a/games/sail/parties.c b/games/sail/parties.c deleted file mode 100644 index 5fe0538..0000000 --- a/games/sail/parties.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)parties.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" - -meleeing(from, to) -struct ship *from; -struct ship *to; -{ - struct BP *p = from->file->OBP; - struct BP *q = p + NBP; - - for (; p < q; p++) - if (p->turnsent && p->toship == to) - return 1; - return 0; -} - -boarding(from, isdefense) -struct ship *from; -char isdefense; -{ - struct BP *p = isdefense ? from->file->DBP : from->file->OBP; - struct BP *q = p + NBP; - - for (; p < q; p++) - if (p->turnsent) - return 1; - return 0; -} - -unboard(ship, to, isdefense) -struct ship *ship, *to; -char isdefense; -{ - struct BP *p = isdefense ? ship->file->DBP : ship->file->OBP; - int n; - - for (n = 0; n < NBP; p++, n++) - if (p->turnsent && (p->toship == to || isdefense || ship == to)) - Write(isdefense ? W_DBP : W_OBP, ship, 0, n, 0, 0, 0); -} diff --git a/games/sail/pathnames.h b/games/sail/pathnames.h deleted file mode 100644 index 03a1dc7..0000000 --- a/games/sail/pathnames.h +++ /dev/null @@ -1,36 +0,0 @@ -/*- - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)pathnames.h 8.1 (Berkeley) 5/31/93 - */ - -#define _PATH_LOGFILE "/var/games/saillog" diff --git a/games/sail/pl_1.c b/games/sail/pl_1.c deleted file mode 100644 index ee12e7f..0000000 --- a/games/sail/pl_1.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_1.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "player.h" -#include <sys/types.h> -#include <sys/wait.h> - -/* - * If we get here before a ship is chosen, then ms == 0 and - * we don't want to update the score file, or do any Write's either. - * We can assume the sync file is already created and may need - * to be removed. - * Of course, we don't do any more Sync()'s if we got here - * because of a Sync() failure. - */ -leave(conditions) -int conditions; -{ - (void) signal(SIGHUP, SIG_IGN); - (void) signal(SIGINT, SIG_IGN); - (void) signal(SIGQUIT, SIG_IGN); - (void) signal(SIGALRM, SIG_IGN); - (void) signal(SIGCHLD, SIG_IGN); - - if (done_curses) { - Signal("It looks like you've had it!", - (struct ship *)0); - switch (conditions) { - case LEAVE_QUIT: - break; - case LEAVE_CAPTURED: - Signal("Your ship was captured.", - (struct ship *)0); - break; - case LEAVE_HURRICAN: - Signal("Hurricane! All ships destroyed.", - (struct ship *)0); - break; - case LEAVE_DRIVER: - Signal("The driver died.", (struct ship *)0); - break; - case LEAVE_SYNC: - Signal("Synchronization error.", (struct ship *)0); - break; - default: - Signal("A funny thing happened (%d).", - (struct ship *)0, conditions); - } - } else { - switch (conditions) { - case LEAVE_QUIT: - break; - case LEAVE_DRIVER: - printf("The driver died.\n"); - break; - case LEAVE_FORK: - perror("fork"); - break; - case LEAVE_SYNC: - printf("Synchronization error\n."); - break; - default: - printf("A funny thing happened (%d).\n", - conditions); - } - } - - if (ms != 0) { - log(ms); - if (conditions != LEAVE_SYNC) { - makesignal(ms, "Captain %s relinquishing.", - (struct ship *)0, mf->captain); - Write(W_END, ms, 0, 0, 0, 0, 0); - (void) Sync(); - } - } - sync_close(!hasdriver); - cleanupscreen(); - exit(0); -} - -void -choke() -{ - leave(LEAVE_QUIT); -} - -void -child() -{ - pid_t pid; - int status; - - (void) signal(SIGCHLD, SIG_IGN); - do { - pid = wait3((int *)&status, WNOHANG, (struct rusage *)0); - if (pid < 0 || pid > 0 && !WIFSTOPPED(status)) - hasdriver = 0; - } while (pid > 0); - (void) signal(SIGCHLD, child); -} diff --git a/games/sail/pl_2.c b/games/sail/pl_2.c deleted file mode 100644 index 529b527..0000000 --- a/games/sail/pl_2.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_2.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "player.h" - -play() -{ - struct ship *sp; - - for (;;) { - switch (sgetch("~\b", (struct ship *)0, 0)) { - case 'm': - acceptmove(); - break; - case 's': - acceptsignal(); - break; - case 'g': - grapungrap(); - break; - case 'u': - unfoulplayer(); - break; - case 'v': - Signal("%s", (struct ship *)0, version); - break; - case 'b': - acceptboard(); - break; - case 'f': - acceptcombat(); - break; - case 'l': - loadplayer(); - break; - case 'c': - changesail(); - break; - case 'r': - repair(); - break; - case 'B': - Signal("'Hands to stations!'", (struct ship *)0); - unboard(ms, ms, 1); /* cancel DBP's */ - unboard(ms, ms, 0); /* cancel offense */ - break; - case '\f': - centerview(); - blockalarm(); - draw_board(); - draw_screen(); - unblockalarm(); - break; - case 'L': - mf->loadL = L_EMPTY; - mf->loadR = L_EMPTY; - mf->readyL = R_EMPTY; - mf->readyR = R_EMPTY; - Signal("Broadsides unloaded", (struct ship *)0); - break; - case 'q': - Signal("Type 'Q' to quit", (struct ship *)0); - break; - case 'Q': - leave(LEAVE_QUIT); - break; - case 'I': - foreachship(sp) - if (sp != ms) - eyeball(sp); - break; - case 'i': - if ((sp = closestenemy(ms, 0, 1)) == 0) - Signal("No more ships left."); - else - eyeball(sp); - break; - case 'C': - centerview(); - blockalarm(); - draw_view(); - unblockalarm(); - break; - case 'U': - upview(); - blockalarm(); - draw_view(); - unblockalarm(); - break; - case 'D': - case 'N': - downview(); - blockalarm(); - draw_view(); - unblockalarm(); - break; - case 'H': - leftview(); - blockalarm(); - draw_view(); - unblockalarm(); - break; - case 'J': - rightview(); - blockalarm(); - draw_view(); - unblockalarm(); - break; - case 'F': - lookout(); - break; - case 'S': - dont_adjust = !dont_adjust; - blockalarm(); - draw_turn(); - unblockalarm(); - break; - } - } -} diff --git a/games/sail/pl_3.c b/games/sail/pl_3.c deleted file mode 100644 index 83486be..0000000 --- a/games/sail/pl_3.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_3.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "player.h" - -acceptcombat() -{ - int men = 0; - int target, temp; - int n, r; - int index, rakehim, sternrake; - int hhits = 0, ghits = 0, rhits = 0, chits = 0; - int crew[3]; - int load; - int guns, car, ready, shootat, hit; - int roll; - struct ship *closest; - - crew[0] = mc->crew1; - crew[1] = mc->crew2; - crew[2] = mc->crew3; - for (n = 0; n < 3; n++) { - if (mf->OBP[n].turnsent) - men += mf->OBP[n].mensent; - } - for (n = 0; n < 3; n++) { - if (mf->DBP[n].turnsent) - men += mf->DBP[n].mensent; - } - if (men) { - crew[0] = men/100 ? 0 : crew[0] != 0; - crew[1] = (men%100)/10 ? 0 : crew[1] != 0; - crew[2] = men%10 ? 0 : crew[2] != 0; - } - for (r = 0; r < 2; r++) { - if (r) { - ready = mf->readyR; - load = mf->loadR; - guns = mc->gunR; - car = mc->carR; - } else { - ready = mf->readyL; - load = mf->loadL; - guns = mc->gunL; - car = mc->carL; - } - if (!guns && !car || load == L_EMPTY || (ready & R_LOADED) == 0) - goto cant; - if (mf->struck || !crew[2]) - goto cant; - closest = closestenemy(ms, (r ? 'r' : 'l'), 1); - if (closest == 0) - goto cant; - if (closest->file->struck) - goto cant; - target = range(ms, closest); - if (target > rangeofshot[load] || !guns && target >= 3) - goto cant; - Signal("%s (%c%c) within range of %s broadside.", - closest, r ? "right" : "left"); - if (load > L_CHAIN && target < 6) { - switch (sgetch("Aim for hull or rigging? ", - (struct ship *)0, 1)) { - case 'r': - shootat = RIGGING; - break; - case 'h': - shootat = HULL; - break; - default: - shootat = -1; - Signal("'Avast there! Hold your fire.'", - (struct ship *)0); - } - } else { - if (sgetch("Fire? ", (struct ship *)0, 1) == 'n') { - shootat = -1; - Signal("Belay that! Hold your fire.", - (struct ship *)0); - } else - shootat = RIGGING; - } - if (shootat == -1) - continue; - fired = 1; - rakehim = gunsbear(ms, closest) && !gunsbear(closest, ms); - temp = portside(closest, ms, 1) - closest->file->dir + 1; - if (temp < 1) - temp += 8; - else if (temp > 8) - temp -= 8; - sternrake = temp > 4 && temp < 6; - if (rakehim) { - if (!sternrake) - Signal("Raking the %s!", closest); - else - Signal("Stern Rake! %s splintering!", closest); - } - index = guns; - if (target < 3) - index += car; - index = (index - 1)/3; - index = index > 8 ? 8 : index; - if (!rakehim) - hit = HDT[index][target-1]; - else - hit = HDTrake[index][target-1]; - if (rakehim && sternrake) - hit++; - hit += QUAL[index][mc->qual-1]; - for (n = 0; n < 3 && mf->captured == 0; n++) - if (!crew[n]) { - if (index <= 5) - hit--; - else - hit -= 2; - } - if (ready & R_INITIAL) { - if (index <= 3) - hit++; - else - hit += 2; - } - if (mf->captured != 0) { - if (index <= 1) - hit--; - else - hit -= 2; - } - hit += AMMO[index][load - 1]; - if (((temp = mc->class) >= 5 || temp == 1) && windspeed == 5) - hit--; - if (windspeed == 6 && temp == 4) - hit -= 2; - if (windspeed == 6 && temp <= 3) - hit--; - if (hit >= 0) { - roll = die(); - if (load == L_GRAPE) - chits = hit; - else { - struct Tables *t; - if (hit > 10) - hit = 10; - t = &(shootat == RIGGING ? RigTable : HullTable) - [hit][roll-1]; - chits = t->C; - rhits = t->R; - hhits = t->H; - ghits = t->G; - if (closest->file->FS) - rhits *= 2; - if (load == L_CHAIN) { - ghits = 0; - hhits = 0; - } - } - table(shootat, load, hit, closest, ms, roll); - } - Signal("Damage inflicted on the %s:", - (struct ship *)0, closest->shipname); - Signal("\t%d HULL, %d GUNS, %d CREW, %d RIGGING", - (struct ship *)0, hhits, ghits, chits, rhits); - if (!r) { - mf->loadL = L_EMPTY; - mf->readyL = R_EMPTY; - } else { - mf->loadR = L_EMPTY; - mf->readyR = R_EMPTY; - } - continue; - cant: - Signal("Unable to fire %s broadside", - (struct ship *)0, r ? "right" : "left"); - } - blockalarm(); - draw_stat(); - unblockalarm(); -} - -grapungrap() -{ - struct ship *sp; - int i; - - foreachship(sp) { - if (sp == ms || sp->file->dir == 0) - continue; - if (range(ms, sp) > 1 && !grappled2(ms, sp)) - continue; - switch (sgetch("Attempt to grapple or ungrapple %s (%c%c): ", - sp, 1)) { - case 'g': - if (die() < 3 - || ms->nationality == capship(sp)->nationality) { - Write(W_GRAP, ms, 0, sp->file->index, 0, 0, 0); - Write(W_GRAP, sp, 0, player, 0, 0, 0); - Signal("Attempt succeeds!", (struct ship *)0); - makesignal(ms, "grappled with %s (%c%c)", sp); - } else - Signal("Attempt fails.", (struct ship *)0); - break; - case 'u': - for (i = grappled2(ms, sp); --i >= 0;) { - if (ms->nationality - == capship(sp)->nationality - || die() < 3) { - cleangrapple(ms, sp, 0); - Signal("Attempt succeeds!", - (struct ship *)0); - makesignal(ms, - "ungrappling with %s (%c%c)", - sp); - } else - Signal("Attempt fails.", - (struct ship *)0); - } - break; - } - } -} - -unfoulplayer() -{ - struct ship *to; - int i; - - foreachship(to) { - if (fouled2(ms, to) == 0) - continue; - if (sgetch("Attempt to unfoul with the %s (%c%c)? ", to, 1) != 'y') - continue; - for (i = fouled2(ms, to); --i >= 0;) { - if (die() <= 2) { - cleanfoul(ms, to, 0); - Signal("Attempt succeeds!", (struct ship *)0); - makesignal(ms, "Unfouling %s (%c%c)", to); - } else - Signal("Attempt fails.", (struct ship *)0); - } - } -} diff --git a/games/sail/pl_4.c b/games/sail/pl_4.c deleted file mode 100644 index 6e78b44..0000000 --- a/games/sail/pl_4.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_4.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "player.h" - -changesail() -{ - int rig, full; - - rig = mc->rig1; - full = mf->FS; - if (windspeed == 6 || windspeed == 5 && mc->class > 4) - rig = 0; - if (mc->crew3 && rig) { - if (!full) { - if (sgetch("Increase to Full sails? ", - (struct ship *)0, 1) == 'y') { - changed = 1; - Write(W_FS, ms, 0, 1, 0, 0, 0); - } - } else { - if (sgetch("Reduce to Battle sails? ", - (struct ship *)0, 1) == 'y') { - Write(W_FS, ms, 0, 0, 0, 0, 0); - changed = 1; - } - } - } else if (!rig) - Signal("Sails rent to pieces", (struct ship *)0); -} - -acceptsignal() -{ - char buf[60]; - char *p = buf; - - *p++ = '"'; - sgetstr("Message? ", p, sizeof buf - 2); - while (*p++) - ; - p[-1] = '"'; - *p = 0; - Write(W_SIGNAL, ms, 1, (long)buf, 0, 0, 0); -} - -lookout() -{ - struct ship *sp; - char buf[3]; - char c; - - sgetstr("What ship? ", buf, sizeof buf); - foreachship(sp) { - c = *countryname[sp->nationality]; - if ((c == *buf || tolower(c) == *buf || colours(sp) == *buf) - && (sp->file->stern == buf[1] || sterncolour(sp) == buf[1] - || buf[1] == '?')) { - eyeball(sp); - } - } -} - -char * -saywhat(sp, flag) -struct ship *sp; -char flag; -{ - if (sp->file->captain[0]) - return sp->file->captain; - else if (sp->file->struck) - return "(struck)"; - else if (sp->file->captured != 0) - return "(captured)"; - else if (flag) - return "(available)"; - else - return "(computer)"; -} - -eyeball(ship) -struct ship *ship; -{ - int i; - - if (ship->file->dir != 0) { - Signal("Sail ho! (range %d, %s)", - (struct ship *)0, range(ms, ship), saywhat(ship, 0)); - i = portside(ms, ship, 1) - mf->dir; - if (i <= 0) - i += 8; - Signal("%s (%c%c) %s %s %s.", - ship, countryname[ship->nationality], - classname[ship->specs->class], directionname[i]); - } -} diff --git a/games/sail/pl_5.c b/games/sail/pl_5.c deleted file mode 100644 index 19876d1..0000000 --- a/games/sail/pl_5.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_5.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <string.h> -#include "player.h" - -#define turnfirst(x) (*x == 'r' || *x == 'l') - -acceptmove() -{ - int ta; - int ma; - char af; - int moved = 0; - int vma, dir; - char prompt[60]; - char buf[60], last = '\0'; - char *p; - - if (!mc->crew3 || snagged(ms) || !windspeed) { - Signal("Unable to move", (struct ship *)0); - return; - } - - ta = maxturns(ms, &af); - ma = maxmove(ms, mf->dir, 0); - (void) sprintf(prompt, "move (%d,%c%d): ", ma, af ? '\'' : ' ', ta); - sgetstr(prompt, buf, sizeof buf); - dir = mf->dir; - vma = ma; - for (p = buf; *p; p++) - switch (*p) { - case 'l': - dir -= 2; - case 'r': - if (++dir == 0) - dir = 8; - else if (dir == 9) - dir = 1; - if (last == 't') { - Signal("Ship can't turn that fast.", - (struct ship *)0); - *p-- = '\0'; - } - last = 't'; - ma--; - ta--; - vma = min(ma, maxmove(ms, dir, 0)); - if (ta < 0 && moved || vma < 0 && moved) - *p-- = '\0'; - break; - case 'b': - ma--; - vma--; - last = 'b'; - if (ta < 0 && moved || vma < 0 && moved) - *p-- = '\0'; - break; - case '0': - case 'd': - *p-- = '\0'; - break; - case '\n': - *p-- = '\0'; - break; - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': - if (last == '0') { - Signal("Can't move that fast.", - (struct ship *)0); - *p-- = '\0'; - } - last = '0'; - moved = 1; - ma -= *p - '0'; - vma -= *p - '0'; - if (ta < 0 && moved || vma < 0 && moved) - *p-- = '\0'; - break; - default: - if (!isspace(*p)) { - Signal("Input error.", (struct ship *)0); - *p-- = '\0'; - } - } - if (ta < 0 && moved || vma < 0 && moved - || af && turnfirst(buf) && moved) { - Signal("Movement error.", (struct ship *)0); - if (ta < 0 && moved) { - if (mf->FS == 1) { - Write(W_FS, ms, 0, 0, 0, 0, 0); - Signal("No hands to set full sails.", - (struct ship *)0); - } - } else if (ma >= 0) - buf[1] = '\0'; - } - if (af && !moved) { - if (mf->FS == 1) { - Write(W_FS, ms, 0, 0, 0, 0, 0); - Signal("No hands to set full sails.", - (struct ship *)0); - } - } - if (*buf) - (void) strcpy(movebuf, buf); - else - (void) strcpy(movebuf, "d"); - Write(W_MOVE, ms, 1, (int)movebuf, 0, 0, 0); - Signal("Helm: %s.", (struct ship *)0, movebuf); -} - -acceptboard() -{ - struct ship *sp; - int n; - int crew[3]; - int men = 0; - char c; - - crew[0] = mc->crew1; - crew[1] = mc->crew2; - crew[2] = mc->crew3; - for (n = 0; n < NBP; n++) { - if (mf->OBP[n].turnsent) - men += mf->OBP[n].mensent; - } - for (n = 0; n < NBP; n++) { - if (mf->DBP[n].turnsent) - men += mf->DBP[n].mensent; - } - if (men) { - crew[0] = men/100 ? 0 : crew[0] != 0; - crew[1] = (men%100)/10 ? 0 : crew[1] != 0; - crew[2] = men%10 ? 0 : crew[2] != 0; - } else { - crew[0] = crew[0] != 0; - crew[1] = crew[1] != 0; - crew[2] = crew[2] != 0; - } - foreachship(sp) { - if (sp == ms || sp->file->dir == 0 || range(ms, sp) > 1) - continue; - if (ms->nationality == capship(sp)->nationality) - continue; - if (meleeing(ms, sp) && crew[2]) { - c = sgetch("How many more to board the %s (%c%c)? ", - sp, 1); - parties(crew, sp, 0, c); - } else if ((fouled2(ms, sp) || grappled2(ms, sp)) && crew[2]) { - c = sgetch("Crew sections to board the %s (%c%c) (3 max) ?", sp, 1); - parties(crew, sp, 0, c); - } - } - if (crew[2]) { - c = sgetch("How many sections to repel boarders? ", - (struct ship *)0, 1); - parties(crew, ms, 1, c); - } - blockalarm(); - draw_slot(); - unblockalarm(); -} - -parties(crew, to, isdefense, buf) -struct ship *to; -int crew[3]; -char isdefense; -char buf; -{ - int k, j, men; - struct BP *ptr; - int temp[3]; - - for (k = 0; k < 3; k++) - temp[k] = crew[k]; - if (isdigit(buf)) { - ptr = isdefense ? to->file->DBP : to->file->OBP; - for (j = 0; j < NBP && ptr[j].turnsent; j++) - ; - if (!ptr[j].turnsent && buf > '0') { - men = 0; - for (k = 0; k < 3 && buf > '0'; k++) { - men += crew[k] - * (k == 0 ? 100 : (k == 1 ? 10 : 1)); - crew[k] = 0; - if (men) - buf--; - } - if (buf > '0') - Signal("Sending all crew sections.", - (struct ship *)0); - Write(isdefense ? W_DBP : W_OBP, ms, 0, - j, turn, to->file->index, men); - if (isdefense) { - (void) wmove(slot_w, 2, 0); - for (k=0; k < NBP; k++) - if (temp[k] && !crew[k]) - (void) waddch(slot_w, k + '1'); - else - (void) wmove(slot_w, 2, 1 + k); - (void) mvwaddstr(slot_w, 3, 0, "DBP"); - makesignal(ms, "repelling boarders", - (struct ship *)0); - } else { - (void) wmove(slot_w, 0, 0); - for (k=0; k < NBP; k++) - if (temp[k] && !crew[k]) - (void) waddch(slot_w, k + '1'); - else - (void) wmove(slot_w, 0, 1 + k); - (void) mvwaddstr(slot_w, 1, 0, "OBP"); - makesignal(ms, "boarding the %s (%c%c)", to); - } - blockalarm(); - (void) wrefresh(slot_w); - unblockalarm(); - } else - Signal("Sending no crew sections.", (struct ship *)0); - } -} diff --git a/games/sail/pl_6.c b/games/sail/pl_6.c deleted file mode 100644 index b91589f..0000000 --- a/games/sail/pl_6.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_6.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "player.h" - -repair() -{ - char c; - char *repairs; - struct shipspecs *ptr = mc; - int count; - -#define FIX(x, m) (m - ptr->x > count \ - ? (ptr->x += count, count = 0) : (count -= m - ptr->x, ptr->x = m)) - - if (repaired || loaded || fired || changed || turned()) { - Signal("No hands free to repair", (struct ship *)0); - return; - } - c = sgetch("Repair (hull, guns, rigging)? ", (struct ship *)0, 1); - switch (c) { - case 'h': - repairs = &mf->RH; - break; - case 'g': - repairs = &mf->RG; - break; - case 'r': - repairs = &mf->RR; - break; - default: - Signal("Avast heaving!", (struct ship *)0); - return; - } - if (++*repairs >= 3) { - count = 2; - switch (c) { - case 'h': { - int max = ptr->guns/4; - if (ptr->hull < max) { - FIX(hull, max); - Write(W_HULL, ms, 0, ptr->hull, 0, 0, 0); - } - break; - } - case 'g': - if (ptr->gunL < ptr->gunR) { - int max = ptr->guns/5 - ptr->carL; - if (ptr->gunL < max) { - FIX(gunL, max); - Write(W_GUNL, ms, 0, ptr->gunL, - ptr->carL, 0, 0); - } - } else { - int max = ptr->guns/5 - ptr->carR; - if (ptr->gunR < max) { - FIX(gunR, max); - Write(W_GUNR, ms, 0, ptr->gunR, - ptr->carR, 0, 0); - } - } - break; - case 'r': -#define X 2 - if (ptr->rig4 >= 0 && ptr->rig4 < X) { - FIX(rig4, X); - Write(W_RIG4, ms, 0, ptr->rig4, 0, 0, 0); - } - if (count && ptr->rig3 < X) { - FIX(rig3, X); - Write(W_RIG3, ms, 0, ptr->rig3, 0, 0, 0); - } - if (count && ptr->rig2 < X) { - FIX(rig2, X); - Write(W_RIG2, ms, 0, ptr->rig2, 0, 0, 0); - } - if (count && ptr->rig1 < X) { - FIX(rig1, X); - Write(W_RIG1, ms, 0, ptr->rig1, 0, 0, 0); - } - break; - } - if (count == 2) { - Signal("Repairs completed.", (struct ship *)0); - *repairs = 2; - } else { - *repairs = 0; - blockalarm(); - draw_stat(); - unblockalarm(); - } - } - blockalarm(); - draw_slot(); - unblockalarm(); - repaired = 1; -} - -turned() -{ - char *p; - - for (p = movebuf; *p; p++) - if (*p == 'r' || *p == 'l') - return 1; - return 0; -} - -loadplayer() -{ - char c; - int loadL, loadR, ready, load; - - if (!mc->crew3) { - Signal("Out of crew", (struct ship *)0); - return; - } - loadL = mf->loadL; - loadR = mf->loadR; - if (!loadL && !loadR) { - c = sgetch("Load which broadside (left or right)? ", - (struct ship *)0, 1); - if (c == 'r') - loadL = 1; - else - loadR = 1; - } - if (!loadL && loadR || loadL && !loadR) { - c = sgetch("Reload with (round, double, chain, grape)? ", - (struct ship *)0, 1); - switch (c) { - case 'r': - load = L_ROUND; - ready = 0; - break; - case 'd': - load = L_DOUBLE; - ready = R_DOUBLE; - break; - case 'c': - load = L_CHAIN; - ready = 0; - break; - case 'g': - load = L_GRAPE; - ready = 0; - break; - default: - Signal("Broadside not loaded.", - (struct ship *)0); - return; - } - if (!loadR) { - mf->loadR = load; - mf->readyR = ready|R_LOADING; - } else { - mf->loadL = load; - mf->readyL = ready|R_LOADING; - } - loaded = 1; - } -} diff --git a/games/sail/pl_7.c b/games/sail/pl_7.c deleted file mode 100644 index 02cd5f2..0000000 --- a/games/sail/pl_7.c +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_7.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <sys/ttydefaults.h> -#include <string.h> -#include "player.h" - - -/* - * Display interface - */ - -static char sc_hasprompt; -static char *sc_prompt; -static char *sc_buf; -static int sc_line; - -initscreen() -{ - /* initscr() already done in SCREENTEST() */ - view_w = newwin(VIEW_Y, VIEW_X, VIEW_T, VIEW_L); - slot_w = newwin(SLOT_Y, SLOT_X, SLOT_T, SLOT_L); - scroll_w = newwin(SCROLL_Y, SCROLL_X, SCROLL_T, SCROLL_L); - stat_w = newwin(STAT_Y, STAT_X, STAT_T, STAT_L); - turn_w = newwin(TURN_Y, TURN_X, TURN_T, TURN_L); - done_curses++; - (void) leaveok(view_w, 1); - (void) leaveok(slot_w, 1); - (void) leaveok(stat_w, 1); - (void) leaveok(turn_w, 1); - noecho(); - crmode(); -} - -cleanupscreen() -{ - /* alarm already turned off */ - if (done_curses) { - (void) wmove(scroll_w, SCROLL_Y - 1, 0); - (void) wclrtoeol(scroll_w); - draw_screen(); - endwin(); - } -} - -void -newturn() -{ - repaired = loaded = fired = changed = 0; - movebuf[0] = '\0'; - - (void) alarm(0); - if (mf->readyL & R_LOADING) { - if (mf->readyL & R_DOUBLE) - mf->readyL = R_LOADING; - else - mf->readyL = R_LOADED; - } - if (mf->readyR & R_LOADING) { - if (mf->readyR & R_DOUBLE) - mf->readyR = R_LOADING; - else - mf->readyR = R_LOADED; - } - if (!hasdriver) - Write(W_DDEAD, SHIP(0), 0, 0, 0, 0, 0); - - if (sc_hasprompt) { - (void) wmove(scroll_w, sc_line, 0); - (void) wclrtoeol(scroll_w); - } - if (Sync() < 0) - leave(LEAVE_SYNC); - if (!hasdriver) - leave(LEAVE_DRIVER); - if (sc_hasprompt) - (void) wprintw(scroll_w, "%s%s", sc_prompt, sc_buf); - - if (turn % 50 == 0) - Write(W_ALIVE, SHIP(0), 0, 0, 0, 0, 0); - if (mf->FS && (!mc->rig1 || windspeed == 6)) - Write(W_FS, ms, 0, 0, 0, 0, 0); - if (mf->FS == 1) - Write(W_FS, ms, 0, 2, 0, 0, 0); - - if (mf->struck) - leave(LEAVE_QUIT); - if (mf->captured != 0) - leave(LEAVE_CAPTURED); - if (windspeed == 7) - leave(LEAVE_HURRICAN); - - adjustview(); - draw_screen(); - - (void) signal(SIGALRM, newturn); - (void) alarm(7); -} - -/*VARARGS2*/ -Signal(fmt, ship, a, b, c, d) -char *fmt; -struct ship *ship; -int a, b, c, d; -{ - if (!done_curses) - return; - if (*fmt == '\7') - putchar(*fmt++); - if (ship == 0) - (void) wprintw(scroll_w, fmt, a, b, c, d); - else - (void) wprintw(scroll_w, fmt, ship->shipname, - colours(ship), sterncolour(ship), a, b, c, d); - Scroll(); -} - -Scroll() -{ - if (++sc_line >= SCROLL_Y) - sc_line = 0; - (void) wmove(scroll_w, sc_line, 0); - (void) wclrtoeol(scroll_w); -} - -prompt(p, ship) -char *p; -struct ship *ship; -{ - static char buf[60]; - - if (ship != 0) { - (void)sprintf(buf, p, ship->shipname, colours(ship), - sterncolour(ship)); - p = buf; - } - sc_prompt = p; - sc_buf = ""; - sc_hasprompt = 1; - (void) waddstr(scroll_w, p); -} - -endprompt(flag) -char flag; -{ - sc_hasprompt = 0; - if (flag) - Scroll(); -} - -sgetch(p, ship, flag) -char *p; -struct ship *ship; -char flag; -{ - int c; - - prompt(p, ship); - blockalarm(); - (void) wrefresh(scroll_w); - unblockalarm(); - while ((c = wgetch(scroll_w)) == EOF) - ; - if (flag && c >= ' ' && c < 0x7f) - (void) waddch(scroll_w, c); - endprompt(flag); - return c; -} - -sgetstr(pr, buf, n) -char *pr; -char *buf; -int n; -{ - int c; - char *p = buf; - - prompt(pr, (struct ship *)0); - sc_buf = buf; - for (;;) { - *p = 0; - blockalarm(); - (void) wrefresh(scroll_w); - unblockalarm(); - while ((c = wgetch(scroll_w)) == EOF) - ; - switch (c) { - case '\n': - case '\r': - endprompt(1); - return; - case '\b': - if (p > buf) { - (void) waddstr(scroll_w, "\b \b"); - p--; - } - break; - default: - if (c >= ' ' && c < 0x7f && p < buf + n - 1) { - *p++ = c; - (void) waddch(scroll_w, c); - } else - (void) putchar(CTRL('g')); - } - } -} - -draw_screen() -{ - draw_view(); - draw_turn(); - draw_stat(); - draw_slot(); - (void) wrefresh(scroll_w); /* move the cursor */ -} - -draw_view() -{ - struct ship *sp; - - (void) werase(view_w); - foreachship(sp) { - if (sp->file->dir - && sp->file->row > viewrow - && sp->file->row < viewrow + VIEW_Y - && sp->file->col > viewcol - && sp->file->col < viewcol + VIEW_X) { - (void) wmove(view_w, sp->file->row - viewrow, - sp->file->col - viewcol); - (void) waddch(view_w, colours(sp)); - (void) wmove(view_w, - sternrow(sp) - viewrow, - sterncol(sp) - viewcol); - (void) waddch(view_w, sterncolour(sp)); - } - } - (void) wrefresh(view_w); -} - -draw_turn() -{ - (void) wmove(turn_w, 0, 0); - (void) wprintw(turn_w, "%cTurn %d", dont_adjust?'*':'-', turn); - (void) wrefresh(turn_w); -} - -draw_stat() -{ - (void) wmove(stat_w, STAT_1, 0); - (void) wprintw(stat_w, "Points %3d\n", mf->points); - (void) wprintw(stat_w, "Fouls %2d\n", fouled(ms)); - (void) wprintw(stat_w, "Grapples %2d\n", grappled(ms)); - - (void) wmove(stat_w, STAT_2, 0); - (void) wprintw(stat_w, " 0 %c(%c)\n", - maxmove(ms, winddir + 3, -1) + '0', - maxmove(ms, winddir + 3, 1) + '0'); - (void) waddstr(stat_w, " \\|/\n"); - (void) wprintw(stat_w, " -^-%c(%c)\n", - maxmove(ms, winddir + 2, -1) + '0', - maxmove(ms, winddir + 2, 1) + '0'); - (void) waddstr(stat_w, " /|\\\n"); - (void) wprintw(stat_w, " | %c(%c)\n", - maxmove(ms, winddir + 1, -1) + '0', - maxmove(ms, winddir + 1, 1) + '0'); - (void) wprintw(stat_w, " %c(%c)\n", - maxmove(ms, winddir, -1) + '0', - maxmove(ms, winddir, 1) + '0'); - - (void) wmove(stat_w, STAT_3, 0); - (void) wprintw(stat_w, "Load %c%c %c%c\n", - loadname[mf->loadL], readyname(mf->readyL), - loadname[mf->loadR], readyname(mf->readyR)); - (void) wprintw(stat_w, "Hull %2d\n", mc->hull); - (void) wprintw(stat_w, "Crew %2d %2d %2d\n", - mc->crew1, mc->crew2, mc->crew3); - (void) wprintw(stat_w, "Guns %2d %2d\n", mc->gunL, mc->gunR); - (void) wprintw(stat_w, "Carr %2d %2d\n", mc->carL, mc->carR); - (void) wprintw(stat_w, "Rigg %d %d %d ", mc->rig1, mc->rig2, mc->rig3); - if (mc->rig4 < 0) - (void) waddch(stat_w, '-'); - else - (void) wprintw(stat_w, "%d", mc->rig4); - (void) wrefresh(stat_w); -} - -draw_slot() -{ - if (!boarding(ms, 0)) { - (void) mvwaddstr(slot_w, 0, 0, " "); - (void) mvwaddstr(slot_w, 1, 0, " "); - } else - (void) mvwaddstr(slot_w, 1, 0, "OBP"); - if (!boarding(ms, 1)) { - (void) mvwaddstr(slot_w, 2, 0, " "); - (void) mvwaddstr(slot_w, 3, 0, " "); - } else - (void) mvwaddstr(slot_w, 3, 0, "DBP"); - - (void) wmove(slot_w, SLOT_Y-4, 0); - if (mf->RH) - (void) wprintw(slot_w, "%dRH", mf->RH); - else - (void) waddstr(slot_w, " "); - (void) wmove(slot_w, SLOT_Y-3, 0); - if (mf->RG) - (void) wprintw(slot_w, "%dRG", mf->RG); - else - (void) waddstr(slot_w, " "); - (void) wmove(slot_w, SLOT_Y-2, 0); - if (mf->RR) - (void) wprintw(slot_w, "%dRR", mf->RR); - else - (void) waddstr(slot_w, " "); - -#define Y (SLOT_Y/2) - (void) wmove(slot_w, 7, 1); - (void) wprintw(slot_w,"%d", windspeed); - (void) mvwaddch(slot_w, Y, 0, ' '); - (void) mvwaddch(slot_w, Y, 2, ' '); - (void) mvwaddch(slot_w, Y-1, 0, ' '); - (void) mvwaddch(slot_w, Y-1, 1, ' '); - (void) mvwaddch(slot_w, Y-1, 2, ' '); - (void) mvwaddch(slot_w, Y+1, 0, ' '); - (void) mvwaddch(slot_w, Y+1, 1, ' '); - (void) mvwaddch(slot_w, Y+1, 2, ' '); - (void) wmove(slot_w, Y - dr[winddir], 1 - dc[winddir]); - switch (winddir) { - case 1: - case 5: - (void) waddch(slot_w, '|'); - break; - case 2: - case 6: - (void) waddch(slot_w, '/'); - break; - case 3: - case 7: - (void) waddch(slot_w, '-'); - break; - case 4: - case 8: - (void) waddch(slot_w, '\\'); - break; - } - (void) mvwaddch(slot_w, Y + dr[winddir], 1 + dc[winddir], '+'); - (void) wrefresh(slot_w); -} - -draw_board() -{ - int n; - - (void) clear(); - (void) werase(view_w); - (void) werase(slot_w); - (void) werase(scroll_w); - (void) werase(stat_w); - (void) werase(turn_w); - - sc_line = 0; - - (void) move(BOX_T, BOX_L); - for (n = 0; n < BOX_X; n++) - (void) addch('-'); - (void) move(BOX_B, BOX_L); - for (n = 0; n < BOX_X; n++) - (void) addch('-'); - for (n = BOX_T+1; n < BOX_B; n++) { - (void) mvaddch(n, BOX_L, '|'); - (void) mvaddch(n, BOX_R, '|'); - } - (void) mvaddch(BOX_T, BOX_L, '+'); - (void) mvaddch(BOX_T, BOX_R, '+'); - (void) mvaddch(BOX_B, BOX_L, '+'); - (void) mvaddch(BOX_B, BOX_R, '+'); - (void) refresh(); - -#define WSaIM "Wooden Ships & Iron Men" - (void) wmove(view_w, 2, (VIEW_X - sizeof WSaIM - 1) / 2); - (void) waddstr(view_w, WSaIM); - (void) wmove(view_w, 4, (VIEW_X - strlen(cc->name)) / 2); - (void) waddstr(view_w, cc->name); - (void) wrefresh(view_w); - - (void) move(LINE_T, LINE_L); - (void) printw("Class %d %s (%d guns) '%s' (%c%c)", - mc->class, - classname[mc->class], - mc->guns, - ms->shipname, - colours(ms), - sterncolour(ms)); - (void) refresh(); -} - -centerview() -{ - viewrow = mf->row - VIEW_Y / 2; - viewcol = mf->col - VIEW_X / 2; -} - -upview() -{ - viewrow -= VIEW_Y / 3; -} - -downview() -{ - viewrow += VIEW_Y / 3; -} - -leftview() -{ - viewcol -= VIEW_X / 5; -} - -rightview() -{ - viewcol += VIEW_X / 5; -} - -adjustview() -{ - if (dont_adjust) - return; - if (mf->row < viewrow + VIEW_Y/4) - viewrow = mf->row - (VIEW_Y - VIEW_Y/4); - else if (mf->row > viewrow + (VIEW_Y - VIEW_Y/4)) - viewrow = mf->row - VIEW_Y/4; - if (mf->col < viewcol + VIEW_X/8) - viewcol = mf->col - (VIEW_X - VIEW_X/8); - else if (mf->col > viewcol + (VIEW_X - VIEW_X/8)) - viewcol = mf->col - VIEW_X/8; -} diff --git a/games/sail/pl_main.c b/games/sail/pl_main.c deleted file mode 100644 index fe7ba0e..0000000 --- a/games/sail/pl_main.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pl_main.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "player.h" -#include <sys/types.h> -#include <sys/wait.h> - -void choke(), child(); - -/*ARGSUSED*/ -pl_main() -{ - - if (!SCREENTEST()) { - printf("Can't sail on this terminal.\n"); - exit(1); - } - initialize(); - Signal("Aye aye, Sir", (struct ship *)0); - play(); - return 0; /* for lint, play() never returns */ -} - -initialize() -{ - struct File *fp; - struct ship *sp; - char captain[80]; - char message[60]; - int load; - int n; - char *nameptr; - int nat[NNATION]; - - if (game < 0) { - (void) puts("Choose a scenario:\n"); - (void) puts("\n\tNUMBER\tSHIPS\tIN PLAY\tTITLE"); - for (n = 0; n < NSCENE; n++) { - /* ( */ - printf("\t%d):\t%d\t%s\t%s\n", n, scene[n].vessels, - sync_exists(n) ? "YES" : "no", - scene[n].name); - } -reprint: - printf("\nScenario number? "); - (void) fflush(stdout); - (void) scanf("%d", &game); - while (getchar() != '\n') - ; - } - if (game < 0 || game >= NSCENE) { - (void) puts("Very funny."); - exit(1); - } - cc = &scene[game]; - ls = SHIP(cc->vessels); - - for (n = 0; n < NNATION; n++) - nat[n] = 0; - foreachship(sp) { - if (sp->file == NULL && - (sp->file = (struct File *)calloc(1, sizeof (struct File))) == NULL) { - (void) puts("OUT OF MEMORY"); - exit(1); - } - sp->file->index = sp - SHIP(0); - sp->file->stern = nat[sp->nationality]++; - sp->file->dir = sp->shipdir; - sp->file->row = sp->shiprow; - sp->file->col = sp->shipcol; - } - windspeed = cc->windspeed; - winddir = cc->winddir; - - (void) signal(SIGHUP, choke); - (void) signal(SIGINT, choke); - - hasdriver = sync_exists(game); - if (sync_open() < 0) { - perror("sail: syncfile"); - exit(1); - } - - if (hasdriver) { - (void) puts("Synchronizing with the other players..."); - (void) fflush(stdout); - if (Sync() < 0) - leave(LEAVE_SYNC); - } - for (;;) { - foreachship(sp) - if (sp->file->captain[0] == 0 && !sp->file->struck - && sp->file->captured == 0) - break; - if (sp >= ls) { - (void) puts("All ships taken in that scenario."); - foreachship(sp) - free((char *)sp->file); - sync_close(0); - people = 0; - goto reprint; - } - if (randomize) { - player = sp - SHIP(0); - } else { - printf("%s\n\n", cc->name); - foreachship(sp) - printf(" %2d: %-10s %-15s (%-2d pts) %s\n", - sp->file->index, - countryname[sp->nationality], - sp->shipname, - sp->specs->pts, - saywhat(sp, 1)); - printf("\nWhich ship (0-%d)? ", cc->vessels-1); - (void) fflush(stdout); - if (scanf("%d", &player) != 1 || player < 0 - || player >= cc->vessels) { - while (getchar() != '\n') - ; - (void) puts("Say what?"); - player = -1; - } else - while (getchar() != '\n') - ; - } - if (player < 0) - continue; - if (Sync() < 0) - leave(LEAVE_SYNC); - fp = SHIP(player)->file; - if (fp->captain[0] || fp->struck || fp->captured != 0) - (void) puts("That ship is taken."); - else - break; - } - - ms = SHIP(player); - mf = ms->file; - mc = ms->specs; - - Write(W_BEGIN, ms, 0, 0, 0, 0, 0); - if (Sync() < 0) - leave(LEAVE_SYNC); - - (void) signal(SIGCHLD, child); - if (!hasdriver) - switch (fork()) { - case 0: - longjmp(restart, MODE_DRIVER); - /*NOTREACHED*/ - case -1: - perror("fork"); - leave(LEAVE_FORK); - break; - default: - hasdriver++; - } - - printf("Your ship is the %s, a %d gun %s (%s crew).\n", - ms->shipname, mc->guns, classname[mc->class], - qualname[mc->qual]); - if ((nameptr = (char *) getenv("SAILNAME")) && *nameptr) - (void) strncpy(captain, nameptr, sizeof captain); - else { - (void) printf("Your name, Captain? "); - (void) fflush(stdout); - (void) fgets(captain, sizeof captain, stdin); - if (!*captain) - (void) strcpy(captain, "no name"); - else - captain[sizeof(captain) - 1] = '\0'; - } - Write(W_CAPTAIN, ms, 1, (long)captain, 0, 0, 0); - for (n = 0; n < 2; n++) { - char buf[10]; - - printf("\nInitial broadside %s (grape, chain, round, double): ", - n ? "right" : "left"); - (void) fflush(stdout); - (void) scanf("%9s", buf); - switch (*buf) { - case 'g': - load = L_GRAPE; - break; - case 'c': - load = L_CHAIN; - break; - case 'r': - load = L_ROUND; - break; - case 'd': - load = L_DOUBLE; - break; - default: - load = L_ROUND; - } - if (n) { - mf->loadR = load; - mf->readyR = R_LOADED|R_INITIAL; - } else { - mf->loadL = load; - mf->readyL = R_LOADED|R_INITIAL; - } - } - - initscreen(); - draw_board(); - (void) sprintf(message, "Captain %s assuming command", captain); - Write(W_SIGNAL, ms, 1, (long)message, 0, 0, 0); - newturn(); -} diff --git a/games/sail/player.h b/games/sail/player.h deleted file mode 100644 index 76c91ab..0000000 --- a/games/sail/player.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)player.h 8.1 (Berkeley) 5/31/93 - * $FreeBSD$ - */ - -#include <curses.h> -#include "externs.h" - -/* sizes and coordinates for the screen */ - -#define LINE_T 0 -#define LINE_L 0 -#define LINE_X COLS -#define LINE_Y 1 -#define LINE_B (LINE_T+LINE_Y-1) -#define LINE_R (LINE_L+LINE_X-1) - -#define BOX_T 1 -#define BOX_L 0 -#define BOX_X 65 -#define BOX_Y 16 -#define BOX_B (BOX_T+BOX_Y-1) -#define BOX_R (BOX_L+BOX_X-1) - -#define TURN_T BOX_B -#define TURN_Y 1 -#define TURN_L ((BOX_L+BOX_R-TURN_X)/2) -#define TURN_X 9 -#define TURN_B (TURN_T+TURN_Y+1) -#define TURN_R (TURN_L+TURN_X+1) - -#define STAT_T 0 -#define STAT_B BOX_B -#define STAT_L (BOX_R+2) -#define STAT_X 14 -#define STAT_Y (STAT_B-STAT_T+1) -#define STAT_R (STAT_L+STAT_X-1) -#define STAT_1 0 -#define STAT_2 (STAT_1+4) -#define STAT_3 (STAT_2+7) - -#define SCROLL_T (BOX_B+1) -#define SCROLL_L 0 -#define SCROLL_B (LINES-1) -#define SCROLL_R (COLS-1) -#define SCROLL_X (SCROLL_R-SCROLL_L+1) -#define SCROLL_Y (SCROLL_B-SCROLL_T+1) - -#define VIEW_T (BOX_T+1) -#define VIEW_L (BOX_L+1) -#define VIEW_X (BOX_X-5) -#define VIEW_Y (BOX_Y-2) -#define VIEW_B (VIEW_T+VIEW_Y-1) -#define VIEW_R (VIEW_L+VIEW_X-1) - -#define SLOT_T VIEW_T -#define SLOT_L (VIEW_R+1) -#define SLOT_X 3 -#define SLOT_Y VIEW_Y -#define SLOT_B VIEW_B -#define SLOT_R (SLOT_L+SLOT_X-1) - -#ifdef SIGTSTP -#define SCREENTEST() (initscr() != NULL && signal(SIGTSTP, SIG_DFL) != BADSIG && STAT_R < COLS && SCROLL_Y > 0) -#else -#define SCREENTEST() (initscr() != NULL && STAT_R < COLS && SCROLL_Y > 0) -#endif - -WINDOW *view_w; -WINDOW *slot_w; -WINDOW *scroll_w; -WINDOW *stat_w; -WINDOW *turn_w; - -char done_curses; -char loaded, fired, changed, repaired; -char dont_adjust; -int viewrow, viewcol; -char movebuf[sizeof SHIP(0)->file->movebuf]; -extern char version[]; -int player; -struct ship *ms; /* memorial structure, &cc->ship[player] */ -struct File *mf; /* ms->file */ -struct shipspecs *mc; /* ms->specs */ - -/* condition codes for leave() */ -#define LEAVE_QUIT 0 -#define LEAVE_CAPTURED 1 -#define LEAVE_HURRICAN 2 -#define LEAVE_DRIVER 3 -#define LEAVE_FORK 4 -#define LEAVE_SYNC 5 diff --git a/games/sail/sail.6 b/games/sail/sail.6 deleted file mode 100644 index 14e71de..0000000 --- a/games/sail/sail.6 +++ /dev/null @@ -1,897 +0,0 @@ -.\" Copyright (c) 1988, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" @(#)sail.6 8.2 (Berkeley) 12/30/93 -.\" $FreeBSD$ -.\" -.TH SAIL 6 "December 30, 1993" -.UC 4 -.SH NAME -sail \- multi-user wooden ships and iron men -.SH SYNOPSIS -.B sail -[ -.B \-s -[ -.B \-l -] ] [ -.B \-x -] [ -.B \-b -] [ -.B num -] -.br -.fi -.SH DESCRIPTION -.I Sail -is a computer version of Avalon Hill's game of fighting sail -originally developed by S. Craig Taylor. -.PP -Players of -.I Sail -take command of an old fashioned Man of War and fight other -players or the computer. They may re-enact one of the many -historical sea battles recorded in the game, or they can choose -a fictional battle. -.PP -As a sea captain in the -.I Sail -Navy, the player has complete control over the workings of his ship. -He must order every maneuver, change the set of his sails, and judge the -right moment to let loose the terrible destruction of his broadsides. -In addition to fighting the enemy, he must harness the powers of the wind -and sea to make them work for him. The outcome of many battles during the -age of sail was decided by the ability of one captain to hold the `weather -gage.' -.PP -The flags are: -.TP -.B \-s -Print the names and ships of the top ten sailors. -.TP -.B \-l -Show the login name. Only effective with \fB-s\fP. -.TP -.B \-x -Play the first available ship instead of prompting for a choice. -.TP -.B \-b -No bells. -.SH IMPLEMENTATION -.I Sail -is really two programs in one. Each player starts up a process which -runs his own ship. In addition, a -.I driver -process is forked (by the first player) to run the computer ships -and take care of global bookkeeping. -.PP -Because the -.I driver -must calculate moves for each ship it controls, the -more ships the computer is playing, the slower the game will appear. -.PP -If a player joins a game in progress, he will synchronize -with the other players (a rather slow process for everyone), and -then he may play along with the rest. -.PP -To implement a multi-user game in Version 7 UNIX, which was the operating -system -.I Sail -was first written under, the communicating processes must use a common -temporary file as a place to read and write messages. In addition, a -locking mechanism must be provided to ensure exclusive access to the -shared file. For example, -.I Sail -uses a temporary file named /tmp/#sailsink.21 for scenario 21, and -corresponding file names for the other scenarios. To provide exclusive -access to the temporary file, -.I Sail -uses a technique stolen from an old game called "pubcaves" by Jeff Cohen. -Processes do a busy wait in the loop -.br -.sp -.ce 2 - for (n = 0; link(sync_file, sync_lock) < 0 && n < 30; n++) - sleep(2); -.br -.sp -until they are able to create a link to a file named "/tmp/#saillock.??". -The "??" correspond to the scenario number of the game. Since UNIX -guarantees that a link will point to only one file, the process that succeeds -in linking will have exclusive access to the temporary file. -.PP -Whether or not this really works is open to speculation. When ucbmiro -was rebooted after a crash, the file system check program found 3 links -between the -.I Sail -temporary file and its link file. -.SH CONSEQUENCES OF SEPARATE PLAYER AND DRIVER PROCESSES -When players do something of global interest, such as moving or firing, -the driver must coordinate the action with the other ships in the game. -For example, if a player wants to move in a certain direction, he writes a -message into the temporary file requesting the driver to move his ship. -Each ``turn,'' the driver reads all the messages sent from the players and -decides what happened. It then writes back into the temporary file new -values of variables, etc. -.PP -The most noticeable effect this communication has on the game is the -delay in moving. Suppose a player types a move for his ship and hits -return. What happens then? The player process saves up messages to -be written to the temporary file in a buffer. Every 7 seconds or so, the -player process gets exclusive access to the temporary file and writes -out its buffer to the file. The driver, running asynchronously, must -read in the movement command, process it, and write out the results. This -takes two exclusive accesses to the temporary file. Finally, when the player -process gets around to doing another 7 second update, the results of the -move are displayed on the screen. Hence, every movement requires four -exclusive accesses to the temporary file (anywhere from 7 to 21 seconds -depending upon asynchrony) before the player sees the results of his moves. -.PP -In practice, the delays are not as annoying as they would appear. There -is room for "pipelining" in the movement. After the player writes out -a first movement message, a second movement command can then be issued. -The first message will be in the temporary file waiting for the driver, and -the second will be in the file buffer waiting to be written to the file. -Thus, by always typing moves a turn ahead of the time, the player can -sail around quite quickly. -.PP -If the player types several movement commands between two 7 second updates, -only the last movement command typed will be seen by the driver. Movement -commands within the same update "overwrite" each other, in a sense. -.SH THE HISTORY OF SAIL -I wrote the first version of -.I Sail -on a PDP 11/70 in the fall of 1980. Needless to say, the code was horrendous, -not portable in any sense of the word, and didn't work. The program was not -very modular and had fseeks() and fwrites() every few lines. After a -tremendous rewrite from the top down, I got the first working version up by -1981. There were several annoying bugs concerning firing broadsides and -finding angles. -.I Sail -uses no floating point, by the way, so the direction routines are rather -tricky. -Ed Wang rewrote my angle() routine in 1981 to be more correct (although -it still doesn't work perfectly), and he added code to let a player select -which ship he wanted at the start of the game (instead of the first one -available). -.PP -Captain Happy (Craig Leres) is responsible for making -.I Sail -portable for the first time. This was no easy task, by the way. Constants -like 2 and 10 were very frequent in the code. I also became famous for -using "Riggle Memorial Structures" in -.I Sail. -Many of my structure references are so long that they run off the line -printer page. Here is an example, if you promise not to laugh. -.br -.sp -.ce -specs[scene[flog.fgamenum].ship[flog.fshipnum].shipnum].pts -.br -.sp -.PP -.I Sail -received its fourth and most thorough rewrite in the summer and fall -of 1983. Ed Wang rewrote and modularized the code (a monumental feat) -almost from scratch. Although he introduced many new bugs, the final -result was very much cleaner and (?) faster. He added window movement -commands and find ship commands. -.SH HISTORICAL INFO -Old Square Riggers were very maneuverable ships capable of intricate -sailing. Their only disadvantage was an inability to sail very -close to the wind. The design of a wooden ship allowed only for the -guns to bear to the left and right sides. A few guns of small -aspect (usually 6 or 9 pounders) could point forward, but their -effect was small compared to a 68 gun broadside of 24 or 32 pounders. -The guns bear approximately like so: -.nf - - \\ - b---------------- - ---0 - \\ - \\ - \\ up to a range of ten (for round shot) - \\ - \\ - \\ - -.fi -An interesting phenomenon occurred when a broadside was fired -down the length of an enemy ship. The shot tended to bounce along -the deck and did several times more damage. This phenomenon was called -a rake. Because the bows of a ship are very strong and present a smaller -target than the stern, a stern rake (firing from the stern to the bow) causes -more damage than a bow rake. -.nf - - b - 00 ---- Stern rake! - a - -.fi -Most ships were equipped with carronades, which were very large, close -range cannons. American ships from the revolution until the War of 1812 -were almost entirely armed with carronades. -.PP -The period of history covered in -.I Sail -is approximately from the 1770's until the end of Napoleonic France in 1815. -There are many excellent books about the age of sail. My favorite author -is Captain Frederick Marryat. More contemporary authors include C.S. Forester -and Alexander Kent. -.PP -Fighting ships came in several sizes classed by armament. The mainstays of -any fleet were its "Ships of the Line", or "Line of Battle Ships". They -were so named because these ships fought together in great lines. They were -close enough for mutual support, yet every ship could fire both its broadsides. -We get the modern words "ocean liner," or "liner," and "battleship" from -"ship of the line." The most common size was the 74 gun two decked -ship of the line. The two gun decks usually mounted 18 and 24 pounder guns. -.PP -The pride of the fleet were the first rates. These were huge three decked -ships of the line mounting 80 to 136 guns. The guns in the three tiers -were usually 18, 24, and 32 pounders in that order from top to bottom. -.PP -Various other ships came next. They were almost all "razees," or ships -of the line with one deck sawed off. They mounted 40-64 guns and were -a poor cross between a frigate and a line of battle ship. They neither -had the speed of the former nor the firepower of the latter. -.PP -Next came the "eyes of the fleet." Frigates came in many sizes mounting -anywhere from 32 to 44 guns. They were very handy vessels. They could -outsail anything bigger and outshoot anything smaller. Frigates didn't -fight in lines of battle as the much bigger 74's did. Instead, they -harassed the enemy's rear or captured crippled ships. They were much -more useful in missions away from the fleet, such as cutting out expeditions -or boat actions. They could hit hard and get away fast. -.PP -Lastly, there were the corvettes, sloops, and brigs. These were smaller -ships mounting typically fewer than 20 guns. A corvette was only slightly -smaller than a frigate, so one might have up to 30 guns. Sloops were used -for carrying dispatches or passengers. Brigs were something you built for -land-locked lakes. -.SH SAIL PARTICULARS -Ships in -.I Sail -are represented by two characters. One character represents the bow of -the ship, and the other represents the stern. Ships have nationalities -and numbers. The first ship of a nationality is number 0, the second -number 1, etc. Therefore, the first British ship in a game would be -printed as "b0". The second Brit would be "b1", and the fifth Don -would be "s4". -.PP -Ships can set normal sails, called Battle Sails, or bend on extra canvas -called Full Sails. A ship under full sail is a beautiful sight indeed, -and it can move much faster than a ship under Battle Sails. The only -trouble is, with full sails set, there is so much tension on sail and -rigging that a well aimed round shot can burst a sail into ribbons where -it would only cause a little hole in a loose sail. For this reason, -rigging damage is doubled on a ship with full sails set. Don't let -that discourage you from using full sails. I like to keep them up -right into the heat of battle. A ship -with full sails set has a capital letter for its nationality. E.g., -a Frog, "f0", with full sails set would be printed as "F0". -.PP -When a ship is battered into a listing hulk, the last man aboard "strikes -the colors." This ceremony is the ship's formal surrender. The nationality -character -of a surrendered ship is printed as "!". E.g., the Frog of our last example -would soon be "!0". -.PP -A ship has a random chance of catching fire or sinking when it reaches the -stage of listing hulk. A sinking ship has a "~" printed for its nationality, -and a ship on fire and about to explode has a "#" printed. -.PP -Captured ships become the nationality of the prize crew. Therefore, if -an American ship captures a British ship, the British ship will have an -"a" printed for its nationality. In addition, the ship number is changed -to "&","'", "(", ,")", "*", or "+" depending upon the original number, -be it 0,1,2,3,4, or 5. E.g., the "b0" captured by an American becomes the -"a&". The "s4" captured by a Frog becomes the "f*". -.PP -The ultimate example is, of course, an exploding Brit captured by an -American: "#&". -.SH MOVEMENT -Movement is the most confusing part of -.I Sail -to many. Ships can head in 8 directions: -.nf - - 0 0 0 - b b b0 b b b 0b b - 0 0 0 - -.fi -The stern of a ship moves when it turns. The bow remains stationary. -Ships can always turn, regardless of the wind (unless they are becalmed). -All ships drift when they lose headway. If a ship doesn't move forward -at all for two turns, it will begin to drift. If a ship has begun to -drift, then it must move forward before it turns, if it plans to do -more than make a right or left turn, which is always possible. -.PP -Movement commands to -.I Sail -are a string of forward moves and turns. An example is "l3". It will -turn a ship left and then move it ahead 3 spaces. In the drawing above, -the "b0" made 7 successive left turns. When -.I Sail -prompts you for a move, it prints three characters of import. E.g., -.nf - move (7, 4): -.fi -The first number is the maximum number of moves you can make, -including turns. The second number is the maximum number of turns -you can make. Between the numbers is sometimes printed a quote "'". -If the quote is present, it means that your ship has been drifting, and -you must move ahead to regain headway before you turn (see note above). -Some of the possible moves for the example above are as follows: -.nf - - move (7, 4): 7 - move (7, 4): 1 - move (7, 4): d /* drift, or do nothing */ - move (7, 4): 6r - move (7, 4): 5r1 - move (7, 4): 4r1r - move (7, 4): l1r1r2 - move (7, 4): 1r1r1r1 - -.fi -Because square riggers performed so poorly sailing into the wind, if at -any point in a movement command you turn into the wind, the movement stops -there. E.g., -.nf - - move (7, 4): l1l4 - Movement Error; - Helm: l1l - -.fi -Moreover, whenever you make a turn, your movement allowance drops to -min(what's left, what you would have at the new attitude). In short, -if you turn closer to the wind, you most likely won't be able to sail the -full allowance printed in the "move" prompt. -.PP -Old sailing captains had to keep an eye constantly on the wind. Captains -in -.I Sail -are no different. A ship's ability to move depends on its attitude to the -wind. The best angle possible is to have the wind off your quarter, that is, -just off the stern. The direction rose on the side of the screen gives the -possible movements for your ship at all positions to the wind. Battle -sail speeds are given first, and full sail speeds are given in parenthesis. -.nf - - 0 1(2) - \\|/ - -^-3(6) - /|\\ - | 4(7) - 3(6) - -.fi -Pretend the bow of your ship (the "^") is pointing upward and the wind is -blowing from the bottom to the top of the page. The -numbers at the bottom "3(6)" will be your speed under battle or full -sails in such a situation. If the wind is off your quarter, then you -can move "4(7)". If the wind is off your beam, "3(6)". If the wind is -off your bow, then you can only move "1(2)". Facing into the wind, you -can't move at all. Ships facing into the wind were said to be "in irons". -.SH WINDSPEED AND DIRECTION -The windspeed and direction is displayed as a little weather vane on the -side of the screen. The number in the middle of the vane indicates the wind -speed, and the + to - indicates the wind direction. The wind blows from -the + sign (high pressure) to the - sign (low pressure). E.g., -.nf - - | - 3 - + - -.fi -.PP -The wind speeds are 0 = becalmed, 1 = light breeze, 2 = moderate breeze, -3 = fresh breeze, 4 = strong breeze, 5 = gale, 6 = full gale, 7 = hurricane. -If a hurricane shows up, all ships are destroyed. -.SH GRAPPLING AND FOULING -If two ships collide, they run the risk of becoming tangled together. This -is called "fouling." Fouled ships are stuck together, and neither can move. -They can unfoul each other if they want to. Boarding parties can only be -sent across to ships when the antagonists are either fouled or grappled. -.PP -Ships can grapple each other by throwing grapnels into the rigging of -the other. -.PP -The number of fouls and grapples you have are displayed on the upper -right of the screen. -.SH BOARDING -Boarding was a very costly venture in terms of human life. Boarding parties -may be formed in -.I Sail -to either board an enemy ship or to defend your own ship against attack. -Men organized as Defensive Boarding Parties fight twice as hard to save -their ship as men left unorganized. -.PP -The boarding strength of a crew depends upon its quality and upon the -number of men sent. -.SH CREW QUALITY -The British seaman was world renowned for his sailing abilities. American -sailors, however, were actually the best seamen in the world. Because the -American Navy offered twice the wages of the Royal Navy, British seamen -who liked the sea defected to America by the thousands. -.PP -In -.I Sail, -crew quality is quantized into 5 energy levels. "Elite" crews can outshoot -and outfight all other sailors. "Crack" crews are next. "Mundane" crews -are average, and "Green" and "Mutinous" crews are below average. A good -rule of thumb is that "Crack" or "Elite" crews get one extra hit -per broadside compared to "Mundane" crews. Don't expect too much from -"Green" crews. -.SH BROADSIDES -Your two broadsides may be loaded with four kinds of shot: grape, chain, -round, and double. You have guns and carronades in both the port and starboard -batteries. Carronades only have a range of two, so you have to get in -close to be able to fire them. You have the choice of firing at the hull -or rigging of another ship. If the range of the ship is greater than 6, -then you may only shoot at the rigging. -.PP -The types of shot and their advantages are: -.SH ROUND -Range of 10. Good for hull or rigging hits. -.SH DOUBLE -Range of 1. Extra good for hull or rigging hits. -Double takes two turns to load. -.SH CHAIN -Range of 3. Excellent for tearing down rigging. -Cannot damage hull or guns, though. -.SH GRAPE -Range of 1. Sometimes devastating against enemy crews. -.PP -On the side of the screen is displayed some vital information about your -ship: -.nf - - Load D! R! - Hull 9 - Crew 4 4 2 - Guns 4 4 - Carr 2 2 - Rigg 5 5 5 5 - -.fi -"Load" shows what your port (left) and starboard (right) broadsides are -loaded with. A "!" after the type of shot indicates that it is an initial -broadside. Initial broadside were loaded with care before battle and before -the decks ran red with blood. As a consequence, initial broadsides are a -little more effective than broadsides loaded later. A "*" after the type of -shot indicates that the gun -crews are still loading it, and you cannot fire yet. "Hull" shows how much -hull you have left. "Crew" shows your three sections of crew. As your -crew dies off, your ability to fire decreases. "Guns" and "Carr" show -your port and starboard guns. As you lose guns, your ability to fire -decreases. "Rigg" shows how much rigging you have on your 3 or 4 masts. -As rigging is shot away, you lose mobility. -.SH EFFECTIVENESS OF FIRE -It is very dramatic when a ship fires its thunderous broadsides, but the -mere opportunity to fire them does not guarantee any hits. Many factors -influence the destructive force of a broadside. First of all, and the chief -factor, is distance. It is harder to hit a ship at range ten than it is -to hit one sloshing alongside. Next is raking. Raking fire, as -mentioned before, -can sometimes dismast a ship at range ten. Next, crew size and quality affects -the damage done by a broadside. The number of guns firing also bears on the -point, -so to speak. Lastly, weather affects the accuracy of a broadside. If the -seas are high (5 or 6), then the lower gunports of ships of the line can't -even be opened to run out the guns. This gives frigates and other flush -decked vessels an advantage in a storm. The scenario -.I Pellew vs. The Droits de L'Homme -takes advantage of this peculiar circumstance. -.SH REPAIRS -Repairs may be made to your Hull, Guns, and Rigging at the slow rate of -two points per three turns. The message "Repairs Completed" will be -printed if no more repairs can be made. -.SH PECULIARITIES OF COMPUTER SHIPS -Computer ships in -.I Sail -follow all the rules above with a few exceptions. Computer ships never -repair damage. If they did, the players could never beat them. They -play well enough as it is. As a consolation, the computer ships can fire double -shot every turn. That fluke is a good reason to keep your distance. The -.I -Driver -figures out the moves of the computer ships. It computes them with a typical -A.I. distance function and a depth first search to find the maximum "score." -It seems to work fairly well, although I'll be the first to admit it isn't -perfect. -.SH HOW TO PLAY -Commands are given to -.I Sail -by typing a single character. You will then be prompted for further -input. A brief summary of the commands follows. -.br -.SH COMMAND SUMMARY -.nf - - 'f' Fire broadsides if they bear - 'l' Reload - 'L' Unload broadsides (to change ammo) - 'm' Move - 'i' Print the closest ship - 'I' Print all ships - 'F' Find a particular ship or ships (e.g. "a?" for all Americans) - 's' Send a message around the fleet - 'b' Attempt to board an enemy ship - 'B' Recall boarding parties - 'c' Change set of sail - 'r' Repair - 'u' Attempt to unfoul - 'g' Grapple/ungrapple - 'v' Print version number of game - '^L' Redraw screen - 'Q' Quit - - 'C' Center your ship in the window - 'U' Move window up - 'D','N' Move window down - 'H' Move window left - 'J' Move window right - 'S' Toggle window to follow your ship or stay where it is - -.fi -.br -.SH SCENARIOS -Here is a summary of the scenarios in -.I Sail: - -.br -.SH Ranger vs. Drake: -.nf -Wind from the N, blowing a fresh breeze. - -(a) Ranger 19 gun Sloop (crack crew) (7 pts) -(b) Drake 17 gun Sloop (crack crew) (6 pts) -.SH The Battle of Flamborough Head: -.nf -Wind from the S, blowing a fresh breeze. - -.fi -This is John Paul Jones' first famous battle. Aboard the Bonhomme -Richard, he was able to overcome the Serapis's greater firepower -by quickly boarding her. -.nf - -(a) Bonhomme Rich 42 gun Corvette (crack crew) (11 pts) -(b) Serapis 44 gun Frigate (crack crew) (12 pts) -.SH Arbuthnot and Des Touches: -.nf -Wind from the N, blowing a gale. - -(b) America 64 gun Ship of the Line (crack crew) (20 pts) -(b) Befford 74 gun Ship of the Line (crack crew) (26 pts) -(b) Adamant 50 gun Ship of the Line (crack crew) (17 pts) -(b) London 98 gun 3 Decker SOL (crack crew) (28 pts) -(b) Royal Oak 74 gun Ship of the Line (crack crew) (26 pts) -(f) Neptune 74 gun Ship of the Line (average crew) (24 pts) -(f) Duc de Bourgogne 80 gun 3 Decker SOL (average crew) (27 pts) -(f) Conquerant 74 gun Ship of the Line (average crew) (24 pts) -(f) Provence 64 gun Ship of the Line (average crew) (18 pts) -(f) Romulus 44 gun Ship of the Line (average crew) (10 pts) -.SH Suffren and Hughes: -.nf - -Wind from the S, blowing a fresh breeze. - -(b) Monmouth 74 gun Ship of the Line (average crew) (24 pts) -(b) Hero 74 gun Ship of the Line (crack crew) (26 pts) -(b) Isis 50 gun Ship of the Line (crack crew) (17 pts) -(b) Superb 74 gun Ship of the Line (crack crew) (27 pts) -(b) Burford 74 gun Ship of the Line (average crew) (24 pts) -(f) Flamband 50 gun Ship of the Line (average crew) (14 pts) -(f) Annibal 74 gun Ship of the Line (average crew) (24 pts) -(f) Severe 64 gun Ship of the Line (average crew) (18 pts) -(f) Brilliant 80 gun Ship of the Line (crack crew) (31 pts) -(f) Sphinx 80 gun Ship of the Line (average crew) (27 pts) -.SH Nymphe vs. Cleopatre: -.nf -Wind from the S, blowing a fresh breeze. - -(b) Nymphe 36 gun Frigate (crack crew) (11 pts) -(f) Cleopatre 36 gun Frigate (average crew) (10 pts) -.SH Mars vs. Hercule: -Wind from the S, blowing a fresh breeze. -.nf -(b) Mars 74 gun Ship of the Line (crack crew) (26 pts) -(f) Hercule 74 gun Ship of the Line (average crew) (23 pts) -.SH Ambuscade vs. Baionnaise: -.nf -Wind from the N, blowing a fresh breeze. - -(b) Ambuscade 32 gun Frigate (average crew) (9 pts) -(f) Baionnaise 24 gun Corvette (average crew) (9 pts) -.SH Constellation vs. Insurgent: -.nf -Wind from the S, blowing a gale. - -(a) Constellation 38 gun Corvette (elite crew) (17 pts) -(f) Insurgent 36 gun Corvette (average crew) (11 pts) -.SH Constellation vs. Vengeance: -.nf -Wind from the S, blowing a fresh breeze. - -(a) Constellation 38 gun Corvette (elite crew) (17 pts) -(f) Vengeance 40 gun Frigate (average crew) (15 pts) -.SH The Battle of Lissa: -.nf -Wind from the S, blowing a fresh breeze. - -(b) Amphion 32 gun Frigate (elite crew) (13 pts) -(b) Active 38 gun Frigate (elite crew) (18 pts) -(b) Volage 22 gun Frigate (elite crew) (11 pts) -(b) Cerberus 32 gun Frigate (elite crew) (13 pts) -(f) Favorite 40 gun Frigate (average crew) (15 pts) -(f) Flore 40 gun Frigate (average crew) (15 pts) -(f) Danae 40 gun Frigate (crack crew) (17 pts) -(f) Bellona 32 gun Frigate (green crew) (9 pts) -(f) Corona 40 gun Frigate (green crew) (12 pts) -(f) Carolina 32 gun Frigate (green crew) (7 pts) -.SH Constitution vs. Guerriere: -.nf -Wind from the SW, blowing a gale. - -(a) Constitution 44 gun Corvette (elite crew) (24 pts) -(b) Guerriere 38 gun Frigate (crack crew) (15 pts) -.SH United States vs. Macedonian: -.nf -Wind from the S, blowing a fresh breeze. - -(a) United States 44 gun Frigate (elite crew) (24 pts) -(b) Macedonian 38 gun Frigate (crack crew) (16 pts) -.SH Constitution vs. Java: -.nf -Wind from the S, blowing a fresh breeze. - -(a) Constitution 44 gun Corvette (elite crew) (24 pts) -(b) Java 38 gun Corvette (crack crew) (19 pts) -.SH Chesapeake vs. Shannon: -.nf -Wind from the S, blowing a fresh breeze. - -(a) Chesapeake 38 gun Frigate (average crew) (14 pts) -(b) Shannon 38 gun Frigate (elite crew) (17 pts) -.SH The Battle of Lake Erie: -.nf -Wind from the S, blowing a light breeze. - -(a) Lawrence 20 gun Sloop (crack crew) (9 pts) -(a) Niagara 20 gun Sloop (elite crew) (12 pts) -(b) Lady Prevost 13 gun Brig (crack crew) (5 pts) -(b) Detroit 19 gun Sloop (crack crew) (7 pts) -(b) Q. Charlotte 17 gun Sloop (crack crew) (6 pts) -.SH Wasp vs. Reindeer: -.nf -Wind from the S, blowing a light breeze. - -(a) Wasp 20 gun Sloop (elite crew) (12 pts) -(b) Reindeer 18 gun Sloop (elite crew) (9 pts) -.SH Constitution vs. Cyane and Levant: -.br -Wind from the S, blowing a moderate breeze. - -(a) Constitution 44 gun Corvette (elite crew) (24 pts) -(b) Cyane 24 gun Sloop (crack crew) (11 pts) -(b) Levant 20 gun Sloop (crack crew) (10 pts) -.br -.SH Pellew vs. Droits de L'Homme: -.nf -Wind from the N, blowing a gale. - -(b) Indefatigable 44 gun Frigate (elite crew) (14 pts) -(b) Amazon 36 gun Frigate (crack crew) (14 pts) -(f) Droits L'Hom 74 gun Ship of the Line (average crew) (24 pts) -.SH Algeciras: -.nf -Wind from the SW, blowing a moderate breeze. - -(b) Caesar 80 gun Ship of the Line (crack crew) (31 pts) -(b) Pompee 74 gun Ship of the Line (crack crew) (27 pts) -(b) Spencer 74 gun Ship of the Line (crack crew) (26 pts) -(b) Hannibal 98 gun 3 Decker SOL (crack crew) (28 pts) -(s) Real-Carlos 112 gun 3 Decker SOL (green crew) (27 pts) -(s) San Fernando 96 gun 3 Decker SOL (green crew) (24 pts) -(s) Argonauta 80 gun Ship of the Line (green crew) (23 pts) -(s) San Augustine 74 gun Ship of the Line (green crew) (20 pts) -(f) Indomptable 80 gun Ship of the Line (average crew) (27 pts) -(f) Desaix 74 gun Ship of the Line (average crew) (24 pts) -.SH Lake Champlain: -.nf -Wind from the N, blowing a fresh breeze. - -(a) Saratoga 26 gun Sloop (crack crew) (12 pts) -(a) Eagle 20 gun Sloop (crack crew) (11 pts) -(a) Ticonderoga 17 gun Sloop (crack crew) (9 pts) -(a) Preble 7 gun Brig (crack crew) (4 pts) -(b) Confiance 37 gun Frigate (crack crew) (14 pts) -(b) Linnet 16 gun Sloop (elite crew) (10 pts) -(b) Chubb 11 gun Brig (crack crew) (5 pts) -.SH Last Voyage of the USS President: -.nf -Wind from the N, blowing a fresh breeze. - -(a) President 44 gun Frigate (elite crew) (24 pts) -(b) Endymion 40 gun Frigate (crack crew) (17 pts) -(b) Pomone 44 gun Frigate (crack crew) (20 pts) -(b) Tenedos 38 gun Frigate (crack crew) (15 pts) -.SH Hornblower and the Natividad: -.nf -Wind from the E, blowing a gale. - -.fi -A scenario for you Horny fans. Remember, he sank the Natividad -against heavy odds and winds. Hint: don't try to board the Natividad, -her crew is much bigger, albeit green. -.nf - -(b) Lydia 36 gun Frigate (elite crew) (13 pts) -(s) Natividad 50 gun Ship of the Line (green crew) (14 pts) -.SH Curse of the Flying Dutchman: -.nf -Wind from the S, blowing a fresh breeze. - -Just for fun, take the Piece of cake. - -(s) Piece of Cake 24 gun Corvette (average crew) (9 pts) -(f) Flying Dutchy 120 gun 3 Decker SOL (elite crew) (43 pts) -.SH The South Pacific: -.nf -Wind from the S, blowing a strong breeze. - -(a) USS Scurvy 136 gun 3 Decker SOL (mutinous crew) (27 pts) -(b) HMS Tahiti 120 gun 3 Decker SOL (elite crew) (43 pts) -(s) Australian 32 gun Frigate (average crew) (9 pts) -(f) Bikini Atoll 7 gun Brig (crack crew) (4 pts) -.SH Hornblower and the battle of Rosas bay: -.nf -Wind from the E, blowing a fresh breeze. - -The only battle Hornblower ever lost. He was able to dismast one -ship and stern rake the others though. See if you can do as well. -.nf - -(b) Sutherland 74 gun Ship of the Line (crack crew) (26 pts) -(f) Turenne 80 gun 3 Decker SOL (average crew) (27 pts) -(f) Nightmare 74 gun Ship of the Line (average crew) (24 pts) -(f) Paris 112 gun 3 Decker SOL (green crew) (27 pts) -(f) Napoleon 74 gun Ship of the Line (green crew) (20 pts) -.SH Cape Horn: -.nf -Wind from the NE, blowing a strong breeze. - -(a) Concord 80 gun Ship of the Line (average crew) (27 pts) -(a) Berkeley 98 gun 3 Decker SOL (crack crew) (28 pts) -(b) Thames 120 gun 3 Decker SOL (elite crew) (43 pts) -(s) Madrid 112 gun 3 Decker SOL (green crew) (27 pts) -(f) Musket 80 gun 3 Decker SOL (average crew) (27 pts) -.SH New Orleans: -.nf -Wind from the SE, blowing a fresh breeze. - -Watch that little Cypress go! - -(a) Alligator 120 gun 3 Decker SOL (elite crew) (43 pts) -(b) Firefly 74 gun Ship of the Line (crack crew) (27 pts) -(b) Cypress 44 gun Frigate (elite crew) (14 pts) -.SH Botany Bay: -.nf -Wind from the N, blowing a fresh breeze. - -(b) Shark 64 gun Ship of the Line (average crew) (18 pts) -(f) Coral Snake 44 gun Corvette (elite crew) (24 pts) -(f) Sea Lion 44 gun Frigate (elite crew) (24 pts) -.SH Voyage to the Bottom of the Sea: -.nf -Wind from the NW, blowing a fresh breeze. - -This one is dedicated to Richard Basehart and David Hedison. - -(a) Seaview 120 gun 3 Decker SOL (elite crew) (43 pts) -(a) Flying Sub 40 gun Frigate (crack crew) (17 pts) -(b) Mermaid 136 gun 3 Decker SOL (mutinous crew) (27 pts) -(s) Giant Squid 112 gun 3 Decker SOL (green crew) (27 pts) -.SH Frigate Action: -.nf -Wind from the E, blowing a fresh breeze. - -(a) Killdeer 40 gun Frigate (average crew) (15 pts) -(b) Sandpiper 40 gun Frigate (average crew) (15 pts) -(s) Curlew 38 gun Frigate (crack crew) (16 pts) -.SH The Battle of Midway: -.nf -Wind from the E, blowing a moderate breeze. - -(a) Enterprise 80 gun Ship of the Line (crack crew) (31 pts) -(a) Yorktown 80 gun Ship of the Line (average crew) (27 pts) -(a) Hornet 74 gun Ship of the Line (average crew) (24 pts) -(j) Akagi 112 gun 3 Decker SOL (green crew) (27 pts) -(j) Kaga 96 gun 3 Decker SOL (green crew) (24 pts) -(j) Soryu 80 gun Ship of the Line (green crew) (23 pts) - -.SH Star Trek: -.nf -Wind from the S, blowing a fresh breeze. - -(a) Enterprise 450 gun Ship of the Line (elite crew) (75 pts) -(a) Yorktown 450 gun Ship of the Line (elite crew) (75 pts) -(a) Reliant 450 gun Ship of the Line (elite crew) (75 pts) -(a) Galileo 450 gun Ship of the Line (elite crew) (75 pts) -(k) Kobayashi Maru 450 gun Ship of the Line (elite crew) (75 pts) -(k) Klingon II 450 gun Ship of the Line (elite crew) (75 pts) -(o) Red Orion 450 gun Ship of the Line (elite crew) (75 pts) -(o) Blue Orion 450 gun Ship of the Line (elite crew) (75 pts) - -.SH CONCLUSION - -.I Sail -has been a group effort. - -.SH AUTHOR -Dave Riggle -.SH CO-AUTHOR -Ed Wang -.SH REFITTING -Craig Leres -.SH CONSULTANTS -.nf -Chris Guthrie -Captain Happy -Horatio Nelson - and many valiant others... -.fi -.SH "REFERENCES" -.nf -Wooden Ships & Iron Men, by Avalon Hill -Captain Horatio Hornblower Novels, (13 of them) by C.S. Forester -Captain Richard Bolitho Novels, (12 of them) by Alexander Kent -The Complete Works of Captain Frederick Marryat, (about 20) especially -.in +6n -Mr. Midshipman Easy -Peter Simple -Jacob Faithful -Japhet in Search of a Father -Snarleyyow, or The Dog Fiend -Frank Mildmay, or The Naval Officer -.in -6n -.SH BUGS -Probably a few, and please report them to "riggle@ernie.berkeley.edu" and -"edward@ucbarpa.berkeley.edu" diff --git a/games/sail/sync.c b/games/sail/sync.c deleted file mode 100644 index 46f93ce..0000000 --- a/games/sail/sync.c +++ /dev/null @@ -1,429 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)sync.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include "externs.h" -#include <sys/file.h> -#include <sys/errno.h> - -#define BUFSIZE 4096 - -static char sync_buf[BUFSIZE]; -static char *sync_bp = sync_buf; -static char sync_lock[25]; -static char sync_file[25]; -static long sync_seek; -static FILE *sync_fp; -#define SF "/tmp/#sailsink.%d" -#define LF "/tmp/#saillock.%d" - -/*VARARGS3*/ -makesignal(from, fmt, ship, a, b, c) - struct ship *from; - char *fmt; - struct ship *ship; -{ - char message[80]; - - if (ship == 0) - (void) sprintf(message, fmt, a, b, c); - else - (void) sprintf(message, fmt, - ship->shipname, colours(ship), - sterncolour(ship), a, b, c); - Write(W_SIGNAL, from, 1, (long)message, 0, 0, 0); -} - -#include <sys/types.h> -#include <sys/stat.h> -sync_exists(game) -int game; -{ - char buf[sizeof sync_file]; - struct stat s; - time_t t; - - (void) sprintf(buf, SF, game); - (void) time(&t); - if (stat(buf, &s) < 0) - return 0; - if (s.st_mtime < t - 60*60*2) { /* 2 hours */ - (void) unlink(buf); - (void) sprintf(buf, LF, game); - (void) unlink(buf); - return 0; - } else - return 1; -} - -sync_open() -{ - if (sync_fp != NULL) - (void) fclose(sync_fp); - (void) sprintf(sync_lock, LF, game); - (void) sprintf(sync_file, SF, game); - if (access(sync_file, 0) < 0) { - int omask = umask(issetuid ? 077 : 011); - sync_fp = fopen(sync_file, "w+"); - (void) umask(omask); - } else - sync_fp = fopen(sync_file, "r+"); - if (sync_fp == NULL) - return -1; - sync_seek = 0; - return 0; -} - -sync_close(remove) - char remove; -{ - if (sync_fp != 0) - (void) fclose(sync_fp); - if (remove) - (void) unlink(sync_file); -} - -Write(type, ship, isstr, a, b, c, d) - int type; - struct ship *ship; - char isstr; - int a, b, c, d; -{ - if (isstr) - (void) sprintf(sync_bp, "%d %d %d %s\n", - type, ship->file->index, isstr, (char *)a); - else - (void) sprintf(sync_bp, "%d %d %d %d %d %d %d\n", - type, ship->file->index, isstr, a, b, c, d); - while (*sync_bp++) - ; - sync_bp--; - if (sync_bp >= &sync_buf[sizeof sync_buf]) - abort(); - (void) sync_update(type, ship, a, b, c, d); -} - -Sync() -{ - sig_t sighup, sigint; - int n; - int type, shipnum, isstr, a, b, c, d; - char buf[80]; - char erred = 0; - extern errno; - - sighup = signal(SIGHUP, SIG_IGN); - sigint = signal(SIGINT, SIG_IGN); - for (n = TIMEOUT; --n >= 0;) { -#ifdef LOCK_EX - if (flock(fileno(sync_fp), LOCK_EX|LOCK_NB) >= 0) - break; - if (errno != EWOULDBLOCK) - return -1; -#else - if (link(sync_file, sync_lock) >= 0) - break; - if (errno != EEXIST) - return -1; -#endif - sleep(1); - } - if (n <= 0) - return -1; - (void) fseek(sync_fp, sync_seek, 0); - for (;;) { - switch (fscanf(sync_fp, "%d%d%d", &type, &shipnum, &isstr)) { - case 3: - break; - case EOF: - goto out; - default: - goto bad; - } - if (shipnum < 0 || shipnum >= cc->vessels) - goto bad; - if (isstr != 0 && isstr != 1) - goto bad; - if (isstr) { - char *p; - for (p = buf;;) { - switch (*p++ = getc(sync_fp)) { - case '\n': - p--; - case EOF: - break; - default: - if (p >= buf + sizeof buf) - p--; - continue; - } - break; - } - *p = 0; - for (p = buf; *p == ' '; p++) - ; - a = (long)p; - b = c = d = 0; - } else - if (fscanf(sync_fp, "%d%d%d%d", &a, &b, &c, &d) != 4) - goto bad; - if (sync_update(type, SHIP(shipnum), a, b, c, d) < 0) - goto bad; - } -bad: - erred++; -out: - if (!erred && sync_bp != sync_buf) { - (void) fseek(sync_fp, 0L, 2); - (void) fwrite(sync_buf, sizeof *sync_buf, sync_bp - sync_buf, - sync_fp); - (void) fflush(sync_fp); - sync_bp = sync_buf; - } - sync_seek = ftell(sync_fp); -#ifdef LOCK_EX - (void) flock(fileno(sync_fp), LOCK_UN); -#else - (void) unlink(sync_lock); -#endif - (void) signal(SIGHUP, sighup); - (void) signal(SIGINT, sigint); - return erred ? -1 : 0; -} - -sync_update(type, ship, a, b, c, d) - int type; - struct ship *ship; - long a, b, c, d; -{ - switch (type) { - case W_DBP: { - struct BP *p = &ship->file->DBP[a]; - p->turnsent = b; - p->toship = SHIP(c); - p->mensent = d; - break; - } - case W_OBP: { - struct BP *p = &ship->file->OBP[a]; - p->turnsent = b; - p->toship = SHIP(c); - p->mensent = d; - break; - } - case W_FOUL: { - struct snag *p = &ship->file->foul[a]; - if (SHIP(a)->file->dir == 0) - break; - if (p->sn_count++ == 0) - p->sn_turn = turn; - ship->file->nfoul++; - break; - } - case W_GRAP: { - struct snag *p = &ship->file->grap[a]; - if (SHIP(a)->file->dir == 0) - break; - if (p->sn_count++ == 0) - p->sn_turn = turn; - ship->file->ngrap++; - break; - } - case W_UNFOUL: { - struct snag *p = &ship->file->foul[a]; - if (p->sn_count > 0) { - if (b) { - ship->file->nfoul -= p->sn_count; - p->sn_count = 0; - } else { - ship->file->nfoul--; - p->sn_count--; - } - } - break; - } - case W_UNGRAP: { - struct snag *p = &ship->file->grap[a]; - if (p->sn_count > 0) { - if (b) { - ship->file->ngrap -= p->sn_count; - p->sn_count = 0; - } else { - ship->file->ngrap--; - p->sn_count--; - } - } - break; - } - case W_SIGNAL: - if (mode == MODE_PLAYER) { - if (nobells) - Signal("%s (%c%c): %s", ship, a); - else - Signal("\7%s (%c%c): %s", ship, a); - } - break; - case W_CREW: { - struct shipspecs *s = ship->specs; - s->crew1 = a; - s->crew2 = b; - s->crew3 = c; - break; - } - case W_CAPTAIN: - (void) strncpy(ship->file->captain, (char *)a, - sizeof ship->file->captain - 1); - ship->file->captain[sizeof ship->file->captain - 1] = 0; - break; - case W_CAPTURED: - if (a < 0) - ship->file->captured = 0; - else - ship->file->captured = SHIP(a); - break; - case W_CLASS: - ship->specs->class = a; - break; - case W_DRIFT: - ship->file->drift = a; - break; - case W_EXPLODE: - if ((ship->file->explode = a) == 2) - ship->file->dir = 0; - break; - case W_FS: - ship->file->FS = a; - break; - case W_GUNL: { - struct shipspecs *s = ship->specs; - s->gunL = a; - s->carL = b; - break; - } - case W_GUNR: { - struct shipspecs *s = ship->specs; - s->gunR = a; - s->carR = b; - break; - } - case W_HULL: - ship->specs->hull = a; - break; - case W_MOVE: - (void) strncpy(ship->file->movebuf, (char *)a, - sizeof ship->file->movebuf - 1); - ship->file->movebuf[sizeof ship->file->movebuf - 1] = 0; - break; - case W_PCREW: - ship->file->pcrew = a; - break; - case W_POINTS: - ship->file->points = a; - break; - case W_QUAL: - ship->specs->qual = a; - break; - case W_RIGG: { - struct shipspecs *s = ship->specs; - s->rig1 = a; - s->rig2 = b; - s->rig3 = c; - s->rig4 = d; - break; - } - case W_RIG1: - ship->specs->rig1 = a; - break; - case W_RIG2: - ship->specs->rig2 = a; - break; - case W_RIG3: - ship->specs->rig3 = a; - break; - case W_RIG4: - ship->specs->rig4 = a; - break; - case W_COL: - ship->file->col = a; - break; - case W_DIR: - ship->file->dir = a; - break; - case W_ROW: - ship->file->row = a; - break; - case W_SINK: - if ((ship->file->sink = a) == 2) - ship->file->dir = 0; - break; - case W_STRUCK: - ship->file->struck = a; - break; - case W_TA: - ship->specs->ta = a; - break; - case W_ALIVE: - alive = 1; - break; - case W_TURN: - turn = a; - break; - case W_WIND: - winddir = a; - windspeed = b; - break; - case W_BEGIN: - (void) strcpy(ship->file->captain, "begin"); - people++; - break; - case W_END: - *ship->file->captain = 0; - ship->file->points = 0; - people--; - break; - case W_DDEAD: - hasdriver = 0; - break; - default: - fprintf(stderr, "sync_update: unknown type %d\r\n", type); - return -1; - } - return 0; -} diff --git a/games/sail/version.c b/games/sail/version.c deleted file mode 100644 index ceb59df..0000000 --- a/games/sail/version.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)version.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -char version[] = "Wooden Ships and Iron Men, Version 8.1 (93/05/31)"; |