-/* if (power)
- rangeofshot = 20; */
- if ((target = range(player, closest[r])) <= rangeofshot &&
- !scene[game].ship[closest[r]].file -> struck &&
- (guns[r] || (car[r] && target < 3))) {
- Signal("%s (%c%c) within range of %s broadside.", closest[r], (r?"right":"left"));
- if (load[r] > CHAIN && target < 6) {
- Signal("Aim for hull or rigging? ", -1, 0);
- while ((buf = getch()) == EOF);
- addch(buf);
- if(buf == 'r')
- shootat[r] = RIGGING;
- else if (buf == 'h')
- shootat[r] = HULL;
- else {
- shootat[r] = -1;
- Signal("'Avast there! Hold your fire.'", -1, 0);
- }
- } else {
- shootat[r] = RIGGING;
- Signal("Fire? ", -1, 0);
- while((buf = getch()) == EOF);
- addch(buf);
- if (buf == 'n') {
- shootat[r] = -1;
- Signal("Belay that! Hold your fire.", -1, 0);
- }
- }
- if (shootat[r] != -1) {
- fired = 1;
- rakehim = gunsbear(player, closest[r]) && !gunsbear(closest[r], player);
- temp = portside(closest[r], player, 1) - pos[closest[r]].dir + 1;
- if (temp < 1)
- temp += 8;
- if (temp > 8)
- temp -= 8;
- sternrake = temp > 4 && temp < 6;
-/* if (power) {
- sternrake = 1;
- rakehim = 1;
- } */
- if (rakehim && !sternrake)
- Signal("Raking the %s!", closest[r], 0);
- else if (rakehim && sternrake)
- Signal("Stern Rake! %s splintering!", closest[r], 0);
- index = guns[r];
- if (target < 3)
- index += car[r];
- index = (index - 1)/3;
- index = index > 8 ? 8 : index;
- if (!rakehim)
- hit[r] = HDT[index][target-1];
- else
- hit[r] = HDTrake[index][target-1];
- if (rakehim && sternrake)
- hit[r]++;
- hit[r] += QUAL[index][ptr -> qual-1];
- for (n=0; n < 3 && ptr1 -> captured < 0; n++)
- if (!crew[n])
- if (index <= 5)
- hit[r]--;
- else
- hit[r] -= 2;
- if (ready[r] <= -30000)
- if (index <= 3)
- hit[r]++;
- else
- hit[r] += 2;
- if (ptr1 -> captured > -1)
- if (index <= 1)
- hit[r]--;
- else
- hit[r] -= 2;
- hit[r] += AMMO[index][load[r] - 1];
- if (((temp = ptr -> class) >= 5 || temp == 1) && windspeed == 5)
- hit[r]--;
- if (windspeed == 6 && temp == 4)
- hit[r] -= 2;
- if (windspeed == 6 && temp <= 3)
- hit[r]--;
- if (hit[r] >= 0) {
- roll[r] = die();
- if (load[r] == GRAPE)
- chits = hit[r];
- else {
- hit[r] = hit[r] > 10 ? 10 : hit[r];
- chits = shootat[r] ? RigTable[hit[r]][roll[r]-1].C : HullTable[hit[r]][roll[r]-1].C;
- rhits = shootat[r] ? RigTable[hit[r]][roll[r]-1].R : HullTable[hit[r]][roll[r]-1].R;
-/* if (devestate && power) {
- hhits = 10;
- devestate = 0;
- }
- else */
- hhits = shootat[r] ? RigTable[hit[r]][roll[r]-1].H : HullTable[hit[r]][roll[r]-1].H;
- ghits = shootat[r] ? RigTable[hit[r]][roll[r]-1].G : HullTable[hit[r]][roll[r]-1].G;
- if (scene[game].ship[closest[r]].file -> FS)
- rhits *= 2;
- if (load[r] == CHAIN) {
- ghits = 0;
- hhits = 0;
- }
- }
-/* if (power)
- table(shootat[r], load[r], 10, closest[r], player, 6);
- else */
- table(shootat[r], load[r], hit[r], closest[r], player, roll[r]);
- }
- scroll = 18;
- move(scroll++, 0);
- clearline();
- printw("Damage inflicted on the %s:", scene[game].ship[closest[r]].shipname);
- move(scroll++, 0);
- clearline();
- printw("\t%d HULL, %d GUNS, %d CREW, %d RIGGING", hhits, ghits, chits, rhits);
- load[r] = 0;
- if (!r) {
- ptr1 -> loadL = 0;
- ptr1 -> readyL = 0;
- } else {
- ptr1 -> loadR = 0;
- ptr1 -> readyR = 0;
- }
- }
- } else {
- load[r] = 0;
- Signal("Unable to fire %s broadside", -1, (r?"right":"left"));
+ if (*argv)
+ game = atoi(*argv);
+ else
+ game = -1;
+ initialize(nodrive, randomize, debug);
+ Signal("Aye aye, Sir", (struct ship *)0);
+ for (;;) {
+ prompt();
+ switch (sgetch(0)) {
+ case 'm':
+ if (mc->crew3 && !snagged(ms)
+ && windspeed != 0) {
+ ta = maxturns(ms, &aheadfirst);
+ ma = maxmove(ms, mf->dir, 0);
+ acceptmove(ma, ta, aheadfirst);
+ } else
+ Signal("Unable to move", (struct ship *)0);
+ break;
+ case 's':
+ acceptsignal();
+ break;
+ case 'g':
+ grapungrap();
+ break;
+ case 'u':
+ unfoulplayer();
+ break;
+ case 'v':
+ Signal("%s", (struct ship *)0, version);
+ break;
+ case 'b':
+ doboarding();
+ 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();
+ board();
+ screen();
+ 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)
+ eyeball(sp);
+ break;
+ case 'i':
+ eyeball(closestenemy(ms, 0, 1));
+ break;
+ case 'C':
+ centerview();
+ draw_view();
+ break;
+ case 'U':
+ upview();
+ draw_view();
+ break;
+ case 'D':
+ case 'N':
+ downview();
+ draw_view();
+ break;
+ case 'H':
+ leftview();
+ draw_view();
+ break;
+ case 'J':
+ rightview();
+ draw_view();
+ break;
+ case 'F':
+ lookout();
+ break;
+ case 'S':
+ dont_adjust = !dont_adjust;
+ break;