|
|
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[] = "@(#)com1.c 5.2 (Berkeley) 6/19/88";
20: #endif /* not lint */
21:
22: #include "externs.h"
23:
24: move(thataway, token)
25: int thataway, token;
26: {
27: wordnumber++;
28: if ((!notes[CANTMOVE] && !notes[LAUNCHED]) || testbit(location[position].objects, LAND) || fuel > 0 && notes[LAUNCHED])
29: if (thataway) {
30: position = thataway;
31: newway(token);
32: time++;
33: }
34: else {
35: puts("You can't go this way.");
36: newway(token);
37: whichway(location[position]);
38: return(0);
39: }
40: else if (notes[CANTMOVE] && !notes[LAUNCHED])
41: puts("You aren't able to move; you better drop something.");
42: else
43: puts("You are out of fuel; now you will rot in space forever!");
44: return(1);
45: }
46:
47: convert(tothis) /* Converts day to night and vice versa. */
48: int tothis; /* Day objects are permanent. Night objects are added*/
49: { /* at dusk, and subtracted at dawn. */
50: register struct objs *p;
51: register i, j;
52:
53: if (tothis == TONIGHT) {
54: for (i = 1; i <= NUMOFROOMS; i++)
55: for (j = 0; j < NUMOFWORDS; j++)
56: nightfile[i].objects[j] = dayfile[i].objects[j];
57: for (p = nightobjs; p->room != 0; p++)
58: setbit(nightfile[p->room].objects, p->obj);
59: location = nightfile;
60: } else {
61: for (i = 1; i <= NUMOFROOMS; i++)
62: for (j = 0; j < NUMOFWORDS; j++)
63: dayfile[i].objects[j] = nightfile[i].objects[j];
64: for (p = nightobjs; p->room != 0; p++)
65: clearbit(dayfile[p->room].objects, p->obj);
66: location = dayfile;
67: }
68: }
69:
70: news()
71: {
72: register int n;
73: int hurt;
74:
75: if (time > 30 && position < 32){
76: puts("An explosion of shuddering magnitude splinters bulkheads and");
77: puts("ruptures the battlestar's hull. You are sucked out into the");
78: puts("frozen void of space and killed.");
79: die();
80: }
81: if (time > 20 && position < 32)
82: puts("Explosions rock the battlestar.");
83: if (time > snooze){
84: puts("You drop from exhaustion...");
85: zzz();
86: }
87: if (time > snooze - 5)
88: puts("You're getting tired.");
89: if (time > (rythmn + CYCLE)) {
90: if (location == nightfile) {
91: convert(TODAY);
92: if (OUTSIDE && time - rythmn - CYCLE < 10) {
93: puts("Dew lit sunbeams stretch out from a watery sunrise and herald the dawn.");
94: puts("You awake from a misty dream-world into stark reality.");
95: puts("It is day.");
96: }
97: } else {
98: convert(TONIGHT);
99: clearbit(location[POOLS].objects, BATHGOD);
100: if (OUTSIDE && time - rythmn - CYCLE < 10) {
101: puts("The dying sun sinks into the ocean, leaving a blood stained sunset.");
102: puts("The sky slowly fades from orange to violet to black. A few stars");
103: puts("flicker on, and it is night.");
104: puts("The world seems completly different at night.");
105: }
106: }
107: rythmn = time - time % CYCLE;
108: }
109: if (!wiz && !tempwiz)
110: if ((testbit(inven,TALISMAN) || testbit(wear,TALISMAN)) && (testbit(inven,MEDALION) || testbit(wear,MEDALION)) && (testbit(inven,AMULET) || testbit(wear,AMULET))){
111: tempwiz = 1;
112: puts("The three amulets glow and reenforce each other in power.\nYou are now a wizard.");
113: }
114: if (testbit(location[position].objects,ELF)){
115: printf("%s\n",objdes[ELF]);
116: fight(ELF,rnd(30));
117: }
118: if (testbit(location[position].objects,DARK)){
119: printf("%s\n",objdes[DARK]);
120: fight(DARK,100);
121: }
122: if (testbit(location[position].objects,WOODSMAN)){
123: printf("%s\n",objdes[WOODSMAN]);
124: fight(WOODSMAN,50);
125: }
126: switch(position){
127:
128: case 267:
129: case 257: /* entering a cave */
130: case 274:
131: case 246:
132: notes[CANTSEE] = 1;
133: break;
134: case 160:
135: case 216: /* leaving a cave */
136: case 230:
137: case 231:
138: case 232:
139: notes[CANTSEE] = 0;
140: break;
141: }
142: if (testbit(location[position].objects, GIRL))
143: meetgirl = 1;
144: if (meetgirl && CYCLE * 1.5 - time < 10){
145: setbit(location[GARDEN].objects,GIRLTALK);
146: setbit(location[GARDEN].objects,LAMPON);
147: setbit(location[GARDEN].objects,ROPE);
148: }
149: if (position == DOCK && (beenthere[position] || time > CYCLE)){
150: clearbit(location[DOCK].objects, GIRL);
151: clearbit(location[DOCK].objects,MAN);
152: }
153: if (meetgirl && time - CYCLE * 1.5 > 10){
154: clearbit(location[GARDEN].objects,GIRLTALK);
155: clearbit(location[GARDEN].objects,LAMPON);
156: clearbit(location[GARDEN].objects,ROPE);
157: meetgirl = 0;
158: }
159: if (testbit(location[position].objects,CYLON)){
160: puts("Oh my God, you're being shot at by an alien spacecraft!");
161: printf("The targeting computer says we have %d seconds to attack!\n",clock);
162: fflush(stdout);
163: sleep(1);
164: if (!visual()){
165: hurt = rnd(NUMOFINJURIES);
166: injuries[hurt] = 1;
167: puts("Laser blasts sear the cockpit, and the alien veers off in a victory roll.");
168: puts("The viper shudders under a terrible explosion.");
169: printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
170: }
171: else
172: clearbit(location[position].objects,CYLON);
173: }
174: if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]){
175: puts("I'm afraid you have suffered fatal injuries.");
176: die();
177: }
178: for (n=0; n < NUMOFINJURIES; n++)
179: if (injuries[n] == 1){
180: injuries[n] = 2;
181: if (WEIGHT > 5)
182: WEIGHT -= 5;
183: else
184: WEIGHT = 0;
185: }
186: if (injuries[ARM] == 2){
187: CUMBER -= 5;
188: injuries[ARM]++;
189: }
190: if (injuries[RIBS] == 2){
191: CUMBER -= 2;
192: injuries[RIBS]++;
193: }
194: if (injuries[SPINE] == 2){
195: WEIGHT = 0;
196: injuries[SPINE]++;
197: }
198: if (carrying > WEIGHT || encumber > CUMBER)
199: notes[CANTMOVE] = 1;
200: else
201: notes[CANTMOVE] = 0;
202: }
203:
204: crash()
205: {
206: int hurt1,hurt2;
207:
208: fuel--;
209: if (!location[position].flyhere || (testbit(location[position].objects,LAND) && fuel <= 0)){
210: if (!location[position].flyhere)
211: puts("You're flying too low. We're going to crash!");
212: else{
213: puts("You're out of fuel. We'll have to crash land!");
214: if (!location[position].down){
215: puts("Your viper strikes the ground and explodes into firey fragments.");
216: puts("Thick black smoke billows up from the wreckage.");
217: die();
218: }
219: position = location[position].down;
220: }
221: notes[LAUNCHED] = 0;
222: setbit(location[position].objects,CRASH);
223: time += rnd(CYCLE/4);
224: puts("The viper explodes into the ground and you lose consciousness...");
225: zzz();
226: hurt1 = rnd(NUMOFINJURIES - 2) + 2;
227: hurt2 = rnd(NUMOFINJURIES - 2) + 2;
228: injuries[hurt1] = 1;
229: injuries[hurt2] = 1;
230: injuries[0] = 1; /* abrasions */
231: injuries[1] = 1; /* lacerations */
232: printf("I'm afraid you have suffered %s and %s.\n",ouch[hurt1],ouch[hurt2]);
233: }
234: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.