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

unix.superglobalmegacorp.com

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