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