* Copyright (c) 1983 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
static char sccsid
[] = "@(#)cypher.c 5.3 (Berkeley) 6/1/90";
while (wordtype
[wordnumber
] == ADJS
)
while (wordnumber
<= wordcount
) {
switch(wordvalue
[wordnumber
]) {
if (location
[position
].access
|| wiz
|| tempwiz
) {
if (!location
[position
].access
)
puts("Zap! A gust of wind lifts you up.");
if (!move(location
[position
].up
, AHEAD
))
puts("There is no way up");
if (!move(location
[position
].down
, AHEAD
))
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
if (testbit(location
[position
].objects
,n
) && *objsht
[n
]){
wordvalue
[wordnumber
+1] = n
;
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
if (testbit(location
[position
].objects
,n
) && *objsht
[n
]){
wordvalue
[wordnumber
+1] = n
;
wordnumber
= take(location
[position
].objects
);
take(location
[position
].objects
);
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
wordvalue
[wordnumber
+1] = n
;
wordnumber
= drop("Dropped");
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
testbit(location
[position
].objects
, n
) && *objsht
[n
]){
wordvalue
[wordnumber
+1] = n
;
wordnumber
= throw(wordvalue
[wordnumber
] == KICK
? "Kicked" : "Thrown");
throw(wordvalue
[wordnumber
] == KICK
? "Kicked" : "Thrown");
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
wordvalue
[wordnumber
+1] = n
;
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
wordvalue
[wordnumber
+1] = n
;
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
if (testbit(location
[position
].objects
,n
) && *objsht
[n
]){
wordvalue
[wordnumber
+1] = n
;
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
wordvalue
[wordnumber
+1] = n
;
if (wordnumber
< wordcount
&& wordvalue
[wordnumber
+1] == EVERYTHING
){
for (n
=0; n
< NUMOFOBJECTS
; n
++)
wordvalue
[wordnumber
+1] = n
;
puts("You are holding:\n");
for (n
=0; n
< NUMOFOBJECTS
; n
++)
printf("\t%s\n", objsht
[n
]);
printf("\n= %d kilogram%s (%d%%)\n", carrying
, (carrying
== 1 ? "." : "s."),(WEIGHT
? carrying
*100/WEIGHT
: -1));
printf("Your arms are %d%% full.\n",encumber
*100/CUMBER
);
puts("You aren't carrying anything.");
puts("\nYou are wearing:\n");
for (n
=0; n
< NUMOFOBJECTS
; n
++)
printf("\t%s\n", objsht
[n
]);
puts("\nYou are stark naked.");
if (card(injuries
,NUMOFINJURIES
)){
puts("\nYou have suffered:\n");
for (n
=0; n
< NUMOFINJURIES
; n
++)
printf("\t%s\n",ouch
[n
]);
printf("\nYou can still carry up to %d kilogram%s\n",WEIGHT
,(WEIGHT
== 1 ? "." : "s."));
puts("\nYou are in perfect health.");
if (!notes
[CANTSEE
] || testbit(inven
,LAMPON
) || testbit(location
[position
].objects
,LAMPON
) || matchlight
){
puts("\nYour match splutters out.");
puts("I can't see anything.");
printf("\nRoom (was %d) = ", position
);
sscanf(buffer
,"%d", &position
);
printf("Time (was %d) = ",time
);
sscanf(buffer
,"%d", &time
);
printf("Fuel (was %d) = ",fuel
);
sscanf(buffer
,"%d", &fuel
);
printf("Torps (was %d) = ",torps
);
sscanf(buffer
,"%d", &torps
);
printf("CUMBER (was %d) = ",CUMBER
);
sscanf(buffer
,"%d", &CUMBER
);
printf("WEIGHT (was %d) = ",WEIGHT
);
sscanf(buffer
,"%d",&WEIGHT
);
printf("Clock (was %d) = ",clock
);
sscanf(buffer
,"%d",&clock
);
printf("Wizard (was %d, %d) = ",wiz
, tempwiz
);
sscanf(buffer
,"%d",&junk
);
puts("You aren't a wizard.");
printf("\tPLEASURE\tPOWER\t\tEGO\n");
printf("\t%3d\t\t%3d\t\t%3d\n\n",pleasure
,power
,ego
);
printf("This gives you the rating of %s in %d turns.\n",rate(),time
);
printf("You have visited %d out of %d rooms this run (%d%%).\n",card(beenthere
,NUMOFROOMS
),NUMOFROOMS
,card(beenthere
,NUMOFROOMS
)*100/NUMOFROOMS
);
if (wordnumber
< wordcount
&& *words
[wordnumber
++] == ',')