Annotation of 43BSDTahoe/games/battlestar/com7.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms are permitted
                      6:  * provided that the above copyright notice and this paragraph are
                      7:  * duplicated in all such forms and that any documentation,
                      8:  * advertising materials, and other materials related to such
                      9:  * distribution and use acknowledge that the software was developed
                     10:  * by the University of California, Berkeley.  The name of the
                     11:  * University may not be used to endorse or promote products derived
                     12:  * from this software without specific prior written permission.
                     13:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     14:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     15:  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     16:  */
                     17: 
                     18: #ifndef lint
                     19: static char sccsid[] = "@(#)com7.c     5.2 (Berkeley) 6/19/88";
                     20: #endif /* not lint */
                     21: 
                     22: #include "externs.h"
                     23: 
                     24: fight(enemy,strength)
                     25: int enemy,strength;
                     26: {
                     27:        int lifeline = 0;
                     28:        int hurt;
                     29:        char auxbuf[LINELENGTH];
                     30:        char *next;
                     31:        int i;
                     32:        int exhaustion;
                     33: 
                     34: fighton:
                     35:        time++;
                     36:        snooze -= 5;
                     37:        if (snooze > time)
                     38:                exhaustion = CYCLE/(snooze - time);
                     39:        else {
                     40:                puts("You collapse exhausted, and he pulverizes your skull.");
                     41:                die();
                     42:        }
                     43:        if (snooze - time < 20)
                     44:                puts("You look tired! I hope you're able to fight.");
                     45:        next = getcom(auxbuf, LINELENGTH, "<fight!>-: ", 0);
                     46:        for (i=0; next && i < 10; i++)
                     47:                next = getword(next, words[i], -1);
                     48:        parse();
                     49:        switch(wordvalue[wordnumber]){
                     50: 
                     51:                case KILL:
                     52:                case SMITE:
                     53:                        if (testbit(inven,TWO_HANDED))
                     54:                                hurt = rnd(70) - 2 * card(injuries,NUMOFINJURIES) - ucard(wear) - exhaustion;
                     55:                        else if (testbit(inven,SWORD) || testbit(inven, BROAD))
                     56:                                hurt = rnd(50)%(WEIGHT-carrying)-card(injuries,NUMOFINJURIES)-encumber - exhaustion;
                     57:                        else if (testbit(inven,KNIFE) || testbit(inven,MALLET) || testbit(inven,CHAIN) || testbit(inven,MACE) || testbit(inven,HALBERD))
                     58:                                hurt = rnd(15) - card(injuries,NUMOFINJURIES) - exhaustion;
                     59:                        else 
                     60:                                hurt = rnd(7) - encumber;
                     61:                        if (hurt < 5)
                     62:                                switch(rnd(3)){
                     63: 
                     64:                                        case 0:
                     65:                                                puts("You swung wide and missed.");
                     66:                                                break;
                     67:                                        case 1:
                     68:                                                puts("He checked your blow. CLASH! CLANG!");
                     69:                                                break;
                     70:                                        case 2:
                     71:                                                puts("His filthy tunic hangs by one less thread.");
                     72:                                                break;
                     73:                                }
                     74:                        else if (hurt < 10){
                     75:                                switch(rnd(3)){
                     76:                                        case 0:
                     77:                                                puts("He's bleeding.");
                     78:                                                break;
                     79:                                        case 1:
                     80:                                                puts("A trickle of blood runs down his face.");
                     81:                                                break;
                     82:                                        case 2:
                     83:                                                puts("A huge purple bruise is forming on the side of his face.");
                     84:                                                break;
                     85:                                }
                     86:                                lifeline++;
                     87:                        }
                     88:                        else if (hurt < 20){
                     89:                                switch(rnd(3)){
                     90:                                        case 0:
                     91:                                                puts("He staggers back quavering.");
                     92:                                                break;
                     93:                                        case 1:
                     94:                                                puts("He jumps back with his hand over the wound.");
                     95:                                                break;
                     96:                                        case 2:
                     97:                                                puts("His shirt falls open with a swath across the chest.");
                     98:                                                break;
                     99:                                }
                    100:                                lifeline += 5;
                    101:                        }
                    102:                        else if (hurt < 30){
                    103:                                switch(rnd(3)){
                    104:                                        case 0:
                    105:                                                printf("A bloody gash opens up on his %s side.\n",(rnd(2) ? "left" : "right"));
                    106:                                                break;
                    107:                                        case 1:
                    108:                                                puts("The steel bites home and scrapes along his ribs.");
                    109:                                                break;
                    110:                                        case 2:
                    111:                                                puts("You pierce him, and his breath hisses through clenched teeth.");
                    112:                                                break;
                    113:                                }
                    114:                                lifeline += 10;
                    115:                        }
                    116:                        else if (hurt < 40){
                    117:                                switch(rnd(3)){
                    118:                                        case 0:
                    119:                                                puts("You smite him to the ground.");
                    120:                                                if (strength - lifeline > 20)
                    121:                                                        puts("But in a flurry of steel he regains his feet!");
                    122:                                                break;
                    123:                                        case 1:
                    124:                                                puts("The force of your blow sends him to his knees.");
                    125:                                                puts("His arm swings lifeless at his side.");
                    126:                                                break;
                    127:                                        case 2:
                    128:                                                puts("Clutching his blood drenched shirt, he collapses stunned.");
                    129:                                                break;
                    130:                                }
                    131:                                lifeline += 20;
                    132:                        }
                    133:                        else {
                    134:                                switch(rnd(3)){
                    135:                                        case 0:
                    136:                                                puts("His ribs crack under your powerful swing, flooding his lungs with blood.");
                    137:                                                break;
                    138:                                        case 1:
                    139:                                                puts("You shatter his upheld arm in a spray of blood.  The blade continues deep");
                    140:                                                puts("into his back, severing the spinal cord.");
                    141:                                                lifeline += 25;
                    142:                                                break;
                    143:                                        case 2:
                    144:                                                puts("With a mighty lunge the steel slides in, and gasping, he falls to the ground.");
                    145:                                                lifeline += 25;
                    146:                                                break;
                    147:                                }
                    148:                                lifeline += 30;
                    149:                        }
                    150:                        break;
                    151: 
                    152:                case BACK:
                    153:                        if (enemy == DARK && lifeline > strength * 0.33){
                    154:                                puts("He throws you back against the rock and pummels your face.");
                    155:                                if (testbit(inven,AMULET) || testbit(wear,AMULET)){
                    156:                                        printf("Lifting the amulet from you, ");
                    157:                                        if (testbit(inven,MEDALION) || testbit(wear,MEDALION)){
                    158:                                                puts("his power grows and the walls of\nthe earth tremble.");
                    159:                                                puts("When he touches the medallion, your chest explodes and the foundations of the\nearth collapse.");
                    160:                                                puts("The planet is consumed by darkness.");
                    161:                                                die();
                    162:                                        }
                    163:                                        if (testbit(inven,AMULET)){
                    164:                                                clearbit(inven,AMULET);
                    165:                                                carrying -= objwt[AMULET];
                    166:                                                encumber -= objcumber[AMULET];
                    167:                                        }
                    168:                                        else
                    169:                                                clearbit(wear,AMULET);
                    170:                                        puts("he flees down the dark caverns.");
                    171:                                        clearbit(location[position].objects,DARK);
                    172:                                        injuries[SKULL] = 1;
                    173:                                        followfight = time;
                    174:                                        return (0);
                    175:                                }
                    176:                                else{
                    177:                                        puts("I'm afraid you have been killed.");
                    178:                                        die();
                    179:                                }
                    180:                        }
                    181:                        else{
                    182:                                puts("You escape stunned and disoriented from the fight.");
                    183:                                puts("A victorious bellow echoes from the battlescene.");
                    184:                                if (back && position != back)
                    185:                                        move(back,BACK);
                    186:                                else if (ahead &&position != ahead)
                    187:                                        move(ahead,AHEAD);
                    188:                                else if (left && position != left)
                    189:                                        move(left,LEFT);
                    190:                                else if (right && position != right)
                    191:                                        move(right,RIGHT);
                    192:                                else
                    193:                                        move(location[position].down,AHEAD);
                    194:                                return(0);
                    195:                        }
                    196: 
                    197:                case SHOOT:
                    198:                        if (testbit(inven,LASER)){
                    199:                                if (strength - lifeline <= 50){
                    200:                                        printf("The %s took a direct hit!\n",objsht[enemy]);
                    201:                                        lifeline += 50;
                    202:                                }
                    203:                                else {
                    204:                                        puts("With his bare hand he deflects the laser blast and whips the pistol from you!");
                    205:                                        clearbit(inven,LASER);
                    206:                                        setbit(location[position].objects,LASER);
                    207:                                        carrying -= objwt[LASER];
                    208:                                        encumber -= objcumber[LASER];
                    209:                                }
                    210:                        }
                    211:                        else
                    212:                                puts("Unfortunately, you don't have a blaster handy.");
                    213:                        break;
                    214: 
                    215:                case DROP:
                    216:                case DRAW:
                    217:                        cypher();
                    218:                        time--;
                    219:                        break;
                    220:                
                    221:                default:
                    222:                        puts("You don't have a chance, he is too quick.");
                    223:                        break;
                    224: 
                    225:        }
                    226:        if (lifeline >= strength){
                    227:                printf("You have killed the %s.\n", objsht[enemy]);
                    228:                if (enemy == ELF || enemy == DARK)
                    229:                        puts("A watery black smoke consumes his body and then vanishes with a peal of thunder!");
                    230:                clearbit(location[position].objects,enemy);
                    231:                power += 2;
                    232:                notes[JINXED]++;
                    233:                return(0);
                    234:        }
                    235:        puts("He attacks...");
                    236:        /* some embellisments */
                    237:        hurt = rnd(NUMOFINJURIES) - (testbit(inven,SHIELD) != 0) - (testbit(wear,MAIL) != 0) - (testbit(wear,HELM) != 0);
                    238:        hurt += (testbit(wear,AMULET) != 0) + (testbit(wear,MEDALION) != 0) + (testbit(wear,TALISMAN) != 0);
                    239:        hurt = hurt < 0 ? 0 : hurt;
                    240:        hurt =  hurt >= NUMOFINJURIES ? NUMOFINJURIES -1 : hurt;
                    241:        if (!injuries[hurt]){
                    242:                injuries[hurt] = 1;
                    243:                printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
                    244:        }
                    245:        else
                    246:                puts("You emerge unscathed.");
                    247:        if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]){
                    248:                puts("I'm afraid you have suffered fatal injuries.");
                    249:                die();
                    250:        }
                    251:        goto fighton;
                    252: }

unix.superglobalmegacorp.com

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