Annotation of 42BSD/games/sail/assorted.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char *sccsid = "@(#)assorted.c  1.1 83/03/17";
                      3: #endif
                      4: #define EXPLODE 5
                      5: #include "externs.h"
                      6: 
                      7: table(rig, shot, hittable, onship, fromship, roll)
                      8: int rig, shot, hittable, onship, fromship, roll;
                      9: {
                     10:        register int hhits = 0, chits = 0, ghits = 0, rhits = 0;
                     11:        int Ghit = 0, Hhit = 0, Rhit = 0, Chit = 0;
                     12:        int guns, car, pc, hull;
                     13:        int crew[3];
                     14:        register int n;
                     15:        int rigg[4];
                     16:        char message[60];
                     17:        struct shipspecs *ptr;
                     18:        struct File *ptr1;
                     19: 
                     20:        ptr = &specs[scene[game].ship[onship].shipnum];
                     21:        ptr1 = scene[game].ship[onship].file;
                     22:        pc = ptr1 -> pcrew;
                     23:        hull = ptr -> hull;
                     24:        crew[0] = ptr -> crew1;
                     25:        crew[1] = ptr -> crew2;
                     26:        crew[2] = ptr -> crew3;
                     27:        rigg[0] = ptr -> rig1;
                     28:        rigg[1] = ptr -> rig2;
                     29:        rigg[2] = ptr -> rig3;
                     30:        rigg[3] = ptr -> rig4;
                     31:        if (shot == GRAPE)
                     32:                Chit = chits = hittable;
                     33:        else {
                     34:                Chit = chits = rig ? RigTable[hittable][roll-1].C : HullTable[hittable][roll-1].C;
                     35:                Rhit = rhits = rig ? RigTable[hittable][roll-1].R : HullTable[hittable][roll-1].R;
                     36:                Hhit = hhits = rig ? RigTable[hittable][roll-1].H : HullTable[hittable][roll-1].H;
                     37:                Ghit = ghits = rig ? RigTable[hittable][roll-1].G : HullTable[hittable][roll-1].G;
                     38:                if (ptr1 -> FS)
                     39:                        rhits *= 2;
                     40:                if (shot == CHAIN){
                     41:                        Ghit = ghits = 0;
                     42:                        Hhit = hhits = 0;
                     43:                }
                     44:        }
                     45:        if (ptr1 -> captured > -1){
                     46:                pc -= (chits + 1)/2;
                     47:                chits /= 2;
                     48:        }
                     49:        for (n=0; n < 3; n++)
                     50:                if (chits > crew[n]){
                     51:                        chits -= crew[n];
                     52:                        crew[n] = 0;
                     53:                }
                     54:                else {
                     55:                        crew[n] -= chits;
                     56:                        chits = 0;
                     57:                }
                     58:        for (n=0; n < 3; n++)
                     59:                if (rhits > rigg[n]){
                     60:                        rhits -= rigg[n];
                     61:                        rigg[n] = 0;
                     62:                }
                     63:                else {
                     64:                        rigg[n] -= rhits;
                     65:                        rhits = 0;
                     66:                }
                     67:        if (rigg[3] != -1 && rhits > rigg[3]){
                     68:                rhits -= rigg[3];
                     69:                rigg[3] = 0;
                     70:        } else if (rigg[3] != -1){
                     71:                rigg[3] -= rhits;
                     72:        }
                     73:        if (rig && !rigg[2] && (!rigg[3] || rigg[3] == -1))
                     74:                makesignal("dismasted!", 0, onship);
                     75:        if (portside(fromship, onship, 0)){
                     76:                guns = ptr -> gunL;
                     77:                car = ptr -> carL;
                     78:        } else {
                     79:                guns = ptr -> gunR;
                     80:                car = ptr -> carR;
                     81:        }
                     82:        if (ghits > car){
                     83:                ghits -= car;
                     84:                car = 0;
                     85:        }
                     86:        else {
                     87:                car -= ghits;
                     88:                ghits = 0;
                     89:        }
                     90:        if (ghits > guns){
                     91:                ghits -= guns;
                     92:                guns = 0;
                     93:        }
                     94:        else {
                     95:                guns -= ghits;
                     96:                ghits = 0;
                     97:        }
                     98:        hull -= ghits;
                     99:        if (portside(fromship, onship, 0) && Ghit){
                    100:                Write(SPECS + onship, 0, 20, guns);
                    101:                Write(SPECS + onship, 0, 24, car);
                    102:        }
                    103:        else if (Ghit){
                    104:                Write(SPECS + onship, 0, 22, guns);
                    105:                Write(SPECS + onship, 0, 26, car);
                    106:        }
                    107:        hull -= hhits;
                    108:        hull = hull < 0 ? 0 : hull;
                    109:        if (ptr1 -> captured > -1 && Chit){
                    110:                Write(FILES + onship, 0, 70, pc);
                    111:        }
                    112:        if (Hhit)
                    113:                Write(SPECS + onship, 0, 10, hull);
                    114:        if (Chit)
                    115:                for (n=0; n < 3; n++)
                    116:                        Write(SPECS + onship, 0, 14 + 2*n, crew[n]);
                    117:        if (Rhit)
                    118:                for (n=0; n < 4; n++)
                    119:                        Write(SPECS + onship, 0, 28 + 2*n, rigg[n]);
                    120:        switch(shot){
                    121:                case ROUND:
                    122:                        strcpy(message, "firing round");
                    123:                        break;
                    124:                case GRAPE:
                    125:                        strcpy(message, "firing grape");
                    126:                        break;
                    127:                case CHAIN:
                    128:                        strcpy(message, "firing chain");
                    129:                        break;
                    130:                case DOUBLE:
                    131:                        strcpy(message, "firing double");
                    132:                        break;
                    133:                case EXPLODE:
                    134:                        strcpy(message, "exploding");
                    135:        }
                    136:        strcat(message, " shot on %s (%c%c)");
                    137:        makesignal(message, onship, fromship);
                    138:        if (roll == 6 && rig){
                    139:                switch(Rhit){
                    140:                        case 0:
                    141:                                strcpy(message, "fore topsail sheets parted");
                    142:                                break;
                    143:                        case 1:
                    144:                                strcpy(message, "mizzen shrouds parted");
                    145:                                break;
                    146:                        case 2:
                    147:                                strcpy(message, "main topsail yard shot away");
                    148:                                break;
                    149:                        case 4:
                    150:                                strcpy(message, "fore topmast and foremast shrouds shot away");
                    151:                                break;
                    152:                        case 5:
                    153:                                strcpy(message, "mizzen mast and yard shot through");
                    154:                                break;
                    155:                        case 6:
                    156:                                strcpy(message, "foremast and spritsail yard shattered");
                    157:                                break;
                    158:                        case 7:
                    159:                                strcpy(message, "main topmast and mizzen mast shattered");
                    160:                                break;
                    161:                }
                    162:                makesignal(message, 0, onship);
                    163:        }
                    164:        else if (roll == 6) {
                    165:                switch(Hhit){
                    166:                        case 0:
                    167:                                strcpy(message, "anchor cables severed");
                    168:                                break;
                    169:                        case 1:
                    170:                                strcpy(message, "two anchor stocks shot away");
                    171:                                break;
                    172:                        case 2:
                    173:                                strcpy(message, "quarterdeck bulwarks damaged");
                    174:                                break;
                    175:                        case 3:
                    176:                                strcpy(message, "three gun ports shot away");
                    177:                                break;
                    178:                        case 4:
                    179:                                strcpy(message, "four guns dismounted");
                    180:                                break;
                    181:                        case 5:
                    182:                                strcpy(message, "rudder cables shot through");
                    183:                                Write(SPECS + onship, 0, 4, 0);
                    184:                                break;
                    185:                        case 6:
                    186:                                strcpy(message, "shot holes below the water line");
                    187:                                break;
                    188:                }
                    189:                makesignal(message, 0, onship);
                    190:        }
                    191:        if ((Chit > 1 && ptr1 -> readyL <= -30000 && ptr1 -> readyR <= -30000) || Chit == 4){
                    192:                ptr -> qual--;
                    193:                if (ptr -> qual <= 0){
                    194:                        makesignal("crew mutinying!", 0, onship);
                    195:                        ptr -> qual = 5;
                    196:                        Write(FILES + onship, 0, 68, onship);
                    197:                } else 
                    198:                        makesignal("crew demoralized", 0, onship);
                    199:                Write(SPECS + onship, 0, 12, ptr -> qual);
                    200:        }
                    201:        if (!hull)
                    202:                strike(onship, fromship);
                    203: }
                    204: 
                    205: 
                    206: cleanfoul(fromship, toship, offset)
                    207: int fromship, toship, offset;
                    208: {
                    209:        register int n = -1;
                    210: 
                    211:        Write(FILES + fromship, 0, 84 + offset*4, 0);
                    212:        do {
                    213:                n++;
                    214:        } while ((!scene[game].ship[toship].file -> fouls[n].turnfoul || scene[game].ship[toship].file -> fouls[n].toship != fromship) && n < 10);
                    215:        if (n < 10)
                    216:                Write(FILES + toship, 0, 84 + 4*n, 0);
                    217:        if (!grapple(fromship, toship) && !foul(fromship,toship)){
                    218:                if (!fouled(fromship) && !grappled(fromship)){
                    219:                        unboard(fromship,fromship, 1);          /* defense */
                    220:                        unboard(fromship,fromship, 0);          /* defense */
                    221:                } else
                    222:                        unboard(fromship,toship, 0);            /* defense */
                    223:                if (!fouled(toship) && !grappled(toship)){      /* defense */
                    224:                        unboard(toship,toship, 1);
                    225:                        unboard(toship,toship, 0);
                    226:                } else
                    227:                        unboard(toship, fromship, 0);                   /* offense */
                    228:        }
                    229: }
                    230: 
                    231: 
                    232: cleangrapple(fromship, toship, offset)
                    233: int fromship, toship, offset;
                    234: {
                    235:        register int n = -1;
                    236: 
                    237:        Write(FILES + fromship, 0, 124 + offset*4, 0);
                    238:        do {
                    239:                n++;
                    240:        } while ((!scene[game].ship[toship].file -> grapples[n].turnfoul || scene[game].ship[toship].file -> grapples[n].toship != fromship) && n < 10);
                    241:        if (n < 10)
                    242:                Write(FILES + toship, 0, 124 + 4*n, 0);
                    243:        if (!grapple(fromship, toship) && !foul(fromship,toship)){
                    244:                if (!fouled(fromship) && !grappled(fromship)){
                    245:                        unboard(fromship,fromship, 1);          /* defense */
                    246:                        unboard(fromship,fromship, 0);          /* defense */
                    247:                } else
                    248:                        unboard(fromship,toship, 0);            /* defense */
                    249:                if (!fouled(toship) && !grappled(toship)){      /* defense */
                    250:                        unboard(toship,toship, 1);
                    251:                        unboard(toship,toship, 0);
                    252:                } else
                    253:                        unboard(toship, fromship, 0);                   /* offense */
                    254:        }
                    255: }
                    256: 
                    257: 
                    258: strike(shipnum, fromship)
                    259: int shipnum, fromship;
                    260: {
                    261:        int points;
                    262: 
                    263:        if (!scene[game].ship[shipnum].file -> struck){
                    264:                Write(FILES + shipnum, 0, 66, 1);
                    265:                points = specs[scene[game].ship[shipnum].shipnum].pts + scene[game].ship[fromship].file -> points;
                    266:                Write(FILES + fromship, 0, 20, points);
                    267:                unboard(shipnum, shipnum, 0);           /* all offense */
                    268:                unboard(shipnum, shipnum, 1);           /* all defense */
                    269:                switch(die()){
                    270: 
                    271:                        case 3:
                    272:                        case 4:         /* ship may sink */
                    273:                                Write(FILES + shipnum, 0, 234, 1);
                    274:                                break;
                    275:                        case 5:
                    276:                        case 6:         /* ship may explode */
                    277:                                Write(FILES + shipnum, 0, 232, 1);
                    278:                                break;
                    279:                }
                    280:                Write(FILES + shipnum, 1, 164, "striking her colours!");
                    281:        }
                    282: }
                    283: 
                    284: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.