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