* New upstream release, whivh includes hack, back fron bsdgames-nonfree.

* Conflict and replace with old versions of bsdgames-nonfree that include
     hack.
   * Add hack to package description and menu file.
   * Add in hack's two READ_ME files to binay package.
   * Patched hack config.h as it is patched in bsdgames-nonfree.
   * Unlike bsdgames-nonfree, put the help, hh, rumors, and data files in
     /usr/share/games/bsdgames/hack, as the patched config.h makes it look
     there.
   * postinst moves over hack state files to new directory
   * Patched phantasia to use strerror and not segfault if it cannot open the
     var files. Closes: #187251 (patch sent upstream)


git-svn-id: file:///srv/svn/joey/bsdgames-trunk@5206 a4a2c43b-8ac3-0310-8836-e0e880c912e2
This commit is contained in:
joey
2003-04-03 02:10:44 +00:00
parent 0e204a0ae1
commit e5b45776e7
42 changed files with 504 additions and 2553 deletions

20
NEWS
View File

@@ -11,6 +11,26 @@ changes in installation instructions. Packagers should also reread
the PACKAGING file each version (or do a diff between the old and new
versions of the package and read that).
Version 2.14 (2003-04-01)
============
* Hack is now BSD-licensed
<http://www.cwi.nl/~aeb/games/hack/hack.html>, so moves from
bsd-games-non-free to bsd-games.
* Updated from NetBSD CVS of 2003-03-29. This includes:
+ Security fix for rogue (in bsd-games-non-free); see NetBSD
Security Advisory 2002-021.
+ Optional support for large numbers in factor using libcrypto from
OpenSSL. This can handle larger numbers than GNU factor (which is
limited to 64-bit numbers) but not that much larger efficiently, as
the algorithm used (Pollard rho) is O(n^{1/4}) in the number
factored.
* Some bugs fixed, though a backlog of bug reports remains.
Version 2.13 (2001-08-30)
============

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: atc.6,v 1.11 2001/06/05 11:14:30 wiz Exp $
.\" $NetBSD: atc.6,v 1.16 2003/02/25 10:34:44 wiz Exp $
.\"
.\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -52,8 +52,7 @@
.Sh DESCRIPTION
.Nm
lets you try your hand at the nerve wracking duties of the air traffic
controller without endangering the lives of millions of
travelers each year.
controller without endangering the lives of millions of travelers each year.
Your responsibilities require you to direct the flight of jets
and prop planes into and out of the flight arena and airports.
The speed (update time) and frequency of the planes depend on the
@@ -62,7 +61,7 @@ difficulty of the chosen arena.
.Bl -tag -width flag
.It Fl u
Print the usage line and exit.
.It Fl ?
.It Fl \&?
Same as
.Fl u .
.It Fl l
@@ -76,18 +75,19 @@ Same as
.It Fl p
Print the path to the special directory where
.Nm
expects to find its private files. This is used during the
installation of the program.
expects to find its private files.
This is used during the installation of the program.
.It Fl g Ar game
Play the named game. If the game listed is not one of the
ones printed from the
Play the named game.
If the game listed is not one of the ones printed from the
.Fl l
option, the default game is played.
.It Fl f Ar game
Same as
.Fl g .
.It Fl r Ar seed
Set the random seed. The purpose of this flag is questionable.
Set the random seed.
The purpose of this flag is questionable.
.El
.Sh GOALS
Your goal in
@@ -102,28 +102,29 @@ out of exit points.
Several things will cause the end of the game.
Each plane has a destination (see information area), and
sending a plane to the wrong destination is an error.
Planes can run out of fuel, or can collide. Collision is defined as
adjacency in all three dimensions. A plane leaving the arena
Planes can run out of fuel, or can collide.
Collision is defined as adjacency in all three dimensions.
A plane leaving the arena
in any other way than through its destination exit is an error as well.
.Pp
Scores are sorted in order of the number of planes safe. The other
statistics are provided merely for fun. There is no penalty for
Scores are sorted in order of the number of planes safe.
The other statistics are provided merely for fun.
There is no penalty for
taking longer than another player (except in the case of ties).
.Pp
Suspending a game is not permitted. If you get a talk message, tough.
When was the last time an Air Traffic Controller got called away to
the phone?
.Sh "THE DISPLAY"
Suspending a game is not permitted.
If you get a talk message, tough.
When was the last time an Air Traffic Controller got called away to the phone?
.Sh THE DISPLAY
.Pp
Depending on the terminal you run
.Nm
on, the screen will be divided into 4 areas.
It should be stressed that the terminal driver portion of the
game was designed to be reconfigurable, so the display format can vary
depending the version you are playing. The descriptions here are based
on the ascii version
of the game. The game rules and input format, however,
should remain consistent.
depending the version you are playing.
The descriptions here are based on the ascii version of the game.
The game rules and input format, however, should remain consistent.
Control-L redraws the screen, should it become muddled.
.Ss RADAR
The first screen area is the radar display, showing the relative locations
@@ -131,39 +132,41 @@ of the planes, airports, standard entry/exit points, radar
beacons, and ``lines'' which simply serve to aid you in guiding
the planes.
.Pp
Planes are shown as a single letter with an altitude. If
the numerical altitude is a single digit, then it represents
Planes are shown as a single letter with an altitude.
If the numerical altitude is a single digit, then it represents
thousands of feet.
Some distinction is made between the prop
planes and the jets. On ascii terminals, prop planes are
Some distinction is made between the prop planes and the jets.
On ascii terminals, prop planes are
represented by a upper case letter, jets by a lower case letter.
.Pp
Airports are shown as a number and some indication of the direction
planes must be going to land at the airport.
On ascii terminals, this is one of `^', `>', `<', and `v', to indicate
On ascii terminals, this is one of `^', `\*[Gt]', `\*[Lt]', and `v', to indicate
north (0 degrees), east (90), west (270) and south (180), respectively.
The planes will also
take off in this direction.
The planes will also take off in this direction.
.Pp
Beacons are represented as circles or asterisks and a number.
Their purpose is to offer a place of easy reference to the plane pilots.
See ``the delay command'' under the input section of this manual.
See
.Sx THE DELAY COMMAND
section below.
.Pp
Entry/exit points are displayed as numbers along the border of the
radar screen. Planes will enter the arena from these points without
warning. These points have a direction associated with them, and
planes will always enter the arena from this direction. On the
ascii version of
.Nm "" ,
this direction is not displayed. It will become apparent
what this direction is as the game progresses.
radar screen.
Planes will enter the arena from these points without warning.
These points have a direction associated with them, and
planes will always enter the arena from this direction.
On the ascii version of
.Nm ,
this direction is not displayed.
It will become apparent what this direction is as the game progresses.
.Pp
Incoming planes will always enter at the same altitude: 7000 feet.
For a plane to successfully depart through an entry/exit point,
it must be flying at 9000 feet.
It is not necessary for the planes to be flying in any particular
direction when they leave the arena (yet).
.Ss "INFORMATION AREA"
.Ss INFORMATION AREA
The second area of the display is the information area, which lists
the time (number of updates since start), and the number of planes you
have directed safely out of the arena.
@@ -171,46 +174,50 @@ Below this is a list of planes currently in the air, followed by a
blank line, and then a list of planes on the ground (at airports).
Each line lists the plane name and its current altitude,
an optional asterisk indicating low fuel, the plane's destination,
and the plane's current command. Changing altitude is not considered
to be a command and is therefore not displayed. The following are
some possible information lines:
and the plane's current command.
Changing altitude is not considered
to be a command and is therefore not displayed.
The following are some possible information lines:
.Pp
.Bd -literal -offset indent
B4*A0: Circle @ b1
g7 E4: 225
.Ed
.Pp
The first example shows a prop plane named `B' that is flying at 4000
feet. It is low on fuel (note the `*'). Its destination is
Airport #0.
The next command it expects
to do is circle when it reaches Beacon #1.
The first example shows a prop plane named `B' that is flying at 4000 feet.
It is low on fuel (note the `*').
Its destination is Airport #0.
The next command it expects to do is circle when it reaches Beacon #1.
The second example shows a jet named `g' at 7000 feet, destined for
Exit #4. It is just now executing a turn to 225 degrees (South-West).
.Ss "INPUT AREA"
The third area of the display is the input area. It is here that
your input is reflected. See the INPUT heading of this manual
for more details.
.Ss "AUTHOR AREA"
Exit #4.
It is just now executing a turn to 225 degrees (South-West).
.Ss INPUT AREA
The third area of the display is the input area.
It is here that your input is reflected.
See the
.Sx INPUT
heading of this manual for more details.
.Ss AUTHOR AREA
This area is used simply to give credit where credit is due. :-)
.Sh INPUT
A command completion interface is built into
the game. At any time, typing `?' will list possible input characters.
A command completion interface is built into the game.
At any time, typing `?' will list possible input characters.
Typing a backspace (your erase character) backs up, erasing the last part
of the command. When a command is complete, a return enters it, and
any semantic checking is done at that time. If no errors are detected,
the command is sent to the appropriate plane. If an error is discovered
of the command.
When a command is complete, a return enters it, and
any semantic checking is done at that time.
If no errors are detected, the command is sent to the appropriate plane.
If an error is discovered
during the check, the offending statement will be underscored and a
(hopefully) descriptive message will be printed under it.
.Pp
The command syntax is broken into two parts:
.Em "Immediate Only"
.Em Immediate Only
and
.Em Delayable
commands.
.Em "Immediate Only"
commands happen on the next
update.
.Em Immediate Only
commands happen on the next update.
.Em Delayable
commands also happen on the next update unless they
are followed by an optional predicate called the
@@ -220,16 +227,17 @@ command.
In the following tables, the syntax
.Em [0\-9]
means any single digit, and
.Em <dir>
.Aq Em dir
refers to a direction, given by the keys around the `s' key: ``wedcxzaq''.
In absolute references, `q' refers to North-West or 315 degrees, and `w'
refers to North, or 0 degrees.
In relative references, `q' refers to -45 degrees or 45 degrees left, and `w'
In relative references, `q' refers to \-45 degrees or 45 degrees left, and `w'
refers to 0 degrees, or no change in direction.
.Pp
All commands start with a plane letter. This indicates the recipient
of the command. Case is ignored.
.Ss "IMMEDIATE ONLY COMMANDS"
All commands start with a plane letter.
This indicates the recipient of the command.
Case is ignored.
.Ss IMMEDIATE ONLY COMMANDS
.Bl -tag -width "aaaa"
.It "a [ cd+- ]" Em number
Altitude: Change a plane's altitude, possibly requesting takeoff.
@@ -243,18 +251,18 @@ Climb: relative altitude change.
Descend: relative altitude change.
.El
.It m
Mark: Display in highlighted mode. Plane and command information
is displayed normally.
Mark: Display in highlighted mode.
Plane and command information is displayed normally.
.It i
Ignore: Do not display highlighted. Command is displayed as a
line of dashes if there is no command.
Ignore: Do not display highlighted.
Command is displayed as a line of dashes if there is no command.
.It u
Unmark: Same as ignore, but if a delayed command is processed,
the plane will become marked. This is useful if you want
to forget about a plane during part, but not all, of its
journey.
the plane will become marked.
This is useful if you want to forget about a plane during part,
but not all, of its journey.
.El
.Ss "DELAYABLE COMMANDS"
.Ss DELAYABLE COMMANDS
.Bl -tag -width "aaaa"
.It "c [ lr ]"
Circle: Have the plane circle.
@@ -267,20 +275,24 @@ Right: Circle clockwise (default).
.It "t [ l-r+LR ] [ dir ] or tt [ abe* ]" Em number
Turn: Change direction.
.Bl -tag -width "aaaaaaaaaa" -compact
.It "t<dir>"
.It "t\*[Lt]dir\*[Gt]"
Turn to direction: Turn to the absolute compass heading given.
The shortest turn will be taken.
.It "tl [ dir ]"
Left: Turn counterclockwise: 45 degrees by default, or the amount
specified in <dir> (not
specified in
.Aq dir
(not
.Em to
<dir>.) `w' (0 degrees) is no turn. `e' is 45 degrees; `q' gives -45
degrees counterclockwise, that is, 45 degrees clockwise.
.Aq dir . )
`w' (0 degrees) is no turn.
`e' is 45 degrees; `q' gives \-45 degrees counterclockwise, that is,
45 degrees clockwise.
.It "t- [ dir ]"
Same as left.
.It "tr [ dir ]"
Right: Turn clockwise, 45 degrees by default, or the amount specified
in <dir>.
Right: Turn clockwise, 45 degrees by default, or the amount specified in
.Aq dir .
.It "t+ [ dir ]"
Same as right.
.It tL
@@ -288,8 +300,8 @@ Hard left: Turn counterclockwise 90 degrees.
.It tR
Hard right: Turn clockwise 90 degrees.
.It "tt [abe*]"
Towards: Turn towards a beacon, airport or exit. The turn is
just an estimate.
Towards: Turn towards a beacon, airport or exit.
The turn is just an estimate.
.It "tta" Em number
Turn towards the given airport.
.It "ttb" Em number
@@ -303,33 +315,33 @@ Same as ttb.
.Ss THE DELAY COMMAND
The
.Em Delay
(a/@)
command may be appended to any
(a/@) command may be appended to any
.Em Delayable
command. It allows the controller to instruct a plane to do an action
when the plane reaches a particular beacon (or other objects in future
versions).
command.
It allows the controller to instruct a plane to do an action when the
plane reaches a particular beacon (or other objects in future versions).
.Bl -tag -width "aaaa"
.It ab Em number
Do the delayable command when the plane reaches the specified
beacon. The `b' for ``beacon'' is redundant to allow for expansion.
Do the delayable command when the plane reaches the specified beacon.
The `b' for ``beacon'' is redundant to allow for expansion.
`@' can be used instead of `a'.
.El
.Ss "MARKING, UNMARKING AND IGNORING"
.Ss MARKING, UNMARKING AND IGNORING
Planes are
.Em marked
by default when they enter the arena. This means they are displayed
in highlighted mode on the radar display. A plane may also be either
by default when they enter the arena.
This means they are displayed in highlighted mode on the radar display.
A plane may also be either
.Em unmarked
or
.Em ignored .
An
.Em ignored
plane is drawn in unhighlighted mode, and a line of dashes is displayed in
the command field of the information area. The plane will remain this
way until a mark command has been issued. Any other command will be issued,
but the command line will return to a line of dashes when the command
is completed.
the command field of the information area.
The plane will remain this way until a mark command has been issued.
Any other command will be issued, but the command line will return to a
line of dashes when the command is completed.
.Pp
An
.Em unmarked
@@ -337,12 +349,13 @@ plane is treated the same as an
.Em ignored
plane, except that it will automatically switch to
.Em marked
status when a delayed command has been processed. This is useful if
you want to forget about a plane for a while, but its flight path has
not yet been completely set.
status when a delayed command has been processed.
This is useful if you want to forget about a plane for a while, but its
flight path has not yet been completely set.
.Pp
As with all of the commands, marking, unmarking and ignoring will take effect
at the beginning of the next update. Do not be surprised if the plane does
at the beginning of the next update.
Do not be surprised if the plane does
not immediately switch to unhighlighted mode.
.Ss EXAMPLES
.Bl -tag -width gtte4ab2 -offset indent
@@ -359,7 +372,7 @@ Plane S: turn to 315
.It xi
Plane X: ignore
.El
.Sh "OTHER INFORMATION"
.Sh OTHER INFORMATION
.Bl -bullet
.It
Jets move every update; prop planes move every other update.
@@ -372,16 +385,17 @@ Planes flying at an altitude of 0 crash if they are not over an airport.
.It
Planes waiting at airports can only be told to take off (climb in altitude).
.El
.Sh "NEW GAMES"
.Sh NEW GAMES
The
.Pa Game_List
file lists the currently available play fields. New field description
file names must be placed in this file to be playable. If a player
specifies a game not in this file, his score will not be logged.
file lists the currently available play fields.
New field description file names must be placed in this file to be playable.
If a player specifies a game not in this file, his score will not be logged.
.Pp
The game field description files are broken into two parts. The first
part is the definition section. Here, the four tunable game parameters
must be set. These variables are set with the syntax:
The game field description files are broken into two parts.
The first part is the definition section.
Here, the four tunable game parameters must be set.
These variables are set with the syntax:
.Pp
.Dl "variable = number;"
.Pp
@@ -412,32 +426,32 @@ The syntax is as follows:
.El
.Ed
.Pp
For beacons, a simple x, y coordinate pair is used (enclosed in
parenthesis). Airports and exits require a third value, which is one
of the directions
For beacons, a simple x, y coordinate pair is used (enclosed in parenthesis).
Airports and exits require a third value, which is one of the directions
.Em wedcxzaq .
For airports, this is the direction that planes must be going to take
off and land, and for exits, this is the direction that planes will going
when they
.Em enter
the arena. This may not seem intuitive, but as there is no restriction on
the arena.
This may not seem intuitive, but as there is no restriction on
direction of exit, this is appropriate.
Lines are slightly different, since they need two coordinate pairs to
specify the line endpoints. These endpoints must be enclosed in
square brackets.
specify the line endpoints.
These endpoints must be enclosed in square brackets.
.Pp
All statements are semi-colon (;) terminated. Multiple item statements
accumulate. Each definition must occur exactly once, before any
item statements. Comments begin with a hash (#) symbol
and terminate with a newline.
The coordinates are between zero and width-1 and height-1
inclusive. All of the exit coordinates must lie on the borders, and
All statements are semi-colon (;) terminated.
Multiple item statements accumulate.
Each definition must occur exactly once, before any item statements.
Comments begin with a hash (#) symbol and terminate with a newline.
The coordinates are between zero and width-1 and height-1 inclusive.
All of the exit coordinates must lie on the borders, and
all of the beacons and airports must lie inside of the borders.
Line endpoints may be anywhere within the field, so long as
the lines are horizontal, vertical or
.Em exactly
diagonal.
.Ss "FIELD FILE EXAMPLE"
.Ss FIELD FILE EXAMPLE
.Bd -literal
# This is the default game.
@@ -465,14 +479,16 @@ line: [ ( 1 1 ) ( 6 6 ) ]
.Ed
.Sh FILES
Files are kept in a special directory. See the OPTIONS for a way to
print this path out. It is normally
Files are kept in a special directory.
See the
.Sx OPTIONS
section for a way to print this path out.
It is normally
.Pa @atc_dir@ .
.Pp
This directory contains the file
.Pa Game_List ,
which holds the list of playable games, as well as the games
themselves.
which holds the list of playable games, as well as the games themselves.
.Pp
The scores are kept in
.Pa @atc_scorefile@ .
@@ -483,8 +499,3 @@ This game is based on someone's description of the overall flavor
of a game written for some unknown PC many years ago, maybe.
.Sh BUGS
The screen sometimes refreshes after you have quit.
.Pp
Yet Another Curses Bug was discovered during the development of this game.
If your curses library clrtobot.o is version 5.1 or earlier,
you will have erase problems with the backspace operator in the input
window.

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.16 2000/05/08 07:56:01 mycroft Exp $ */
/* $NetBSD: main.c,v 1.17 2001/09/18 18:15:49 wiz Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
#if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: main.c,v 1.16 2000/05/08 07:56:01 mycroft Exp $");
__RCSID("$NetBSD: main.c,v 1.17 2001/09/18 18:15:49 wiz Exp $");
#endif
#endif /* not lint */
@@ -270,7 +270,7 @@ main(argc, argv)
cturn = -1;
}
}
/* initalize variables according to whose turn it is */
/* initialize variables according to whose turn it is */
if (cturn == 1) { /* red */
home = 25;

View File

@@ -1,266 +0,0 @@
/* $NetBSD: com1.c,v 1.6 1997/10/11 02:06:58 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com1.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com1.c,v 1.6 1997/10/11 02:06:58 lukem Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
move(thataway, token)
int thataway, token;
{
wordnumber++;
if ((!notes[CANTMOVE] && !notes[LAUNCHED]) ||
testbit(location[position].objects, LAND) ||
(fuel > 0 && notes[LAUNCHED]))
if (thataway) {
position = thataway;
newway(token);
ourtime++;
} else {
puts("You can't go this way.");
newway(token);
whichway(location[position]);
return (0);
}
else
if (notes[CANTMOVE] && !notes[LAUNCHED])
puts("You aren't able to move; you better drop something.");
else
puts("You are out of fuel; now you will rot in space forever!");
return (1);
}
void
convert(tothis) /* Converts day to night and vice versa. */
int tothis; /* Day objects are permanent. Night objects
* are added */
{ /* at dusk, and subtracted at dawn. */
const struct objs *p;
unsigned int i, j;
if (tothis == TONIGHT) {
for (i = 1; i <= NUMOFROOMS; i++)
for (j = 0; j < NUMOFWORDS; j++)
nightfile[i].objects[j] = dayfile[i].objects[j];
for (p = nightobjs; p->room != 0; p++)
setbit(nightfile[p->room].objects, p->obj);
location = nightfile;
} else {
for (i = 1; i <= NUMOFROOMS; i++)
for (j = 0; j < NUMOFWORDS; j++)
dayfile[i].objects[j] = nightfile[i].objects[j];
for (p = nightobjs; p->room != 0; p++)
clearbit(dayfile[p->room].objects, p->obj);
location = dayfile;
}
}
void
news()
{
int n;
int hurt;
if (ourtime > 30 && position < 32) {
puts("An explosion of shuddering magnitude splinters bulkheads and");
puts("ruptures the battlestar's hull. You are sucked out into the");
puts("frozen void of space and killed.");
die();
}
if (ourtime > 20 && position < 32)
puts("Explosions rock the battlestar.");
if (ourtime > snooze) {
puts("You drop from exhaustion...");
zzz();
}
if (ourtime > snooze - 5)
puts("You're getting tired.");
if (ourtime > (rythmn + CYCLE)) {
if (location == nightfile) {
convert(TODAY);
if (OUTSIDE && ourtime - rythmn - CYCLE < 10) {
puts("Dew lit sunbeams stretch out from a watery sunrise and herald the dawn.");
puts("You awake from a misty dream-world into stark reality.");
puts("It is day.");
}
} else {
convert(TONIGHT);
clearbit(location[POOLS].objects, BATHGOD);
if (OUTSIDE && ourtime - rythmn - CYCLE < 10) {
puts("The dying sun sinks into the ocean, leaving a blood stained sunset.");
puts("The sky slowly fades from orange to violet to black. A few stars");
puts("flicker on, and it is night.");
puts("The world seems completly different at night.");
}
}
rythmn = ourtime - ourtime % CYCLE;
}
if (!wiz && !tempwiz)
if ((testbit(inven, TALISMAN) || testbit(wear, TALISMAN)) && (testbit(inven, MEDALION) || testbit(wear, MEDALION)) && (testbit(inven, AMULET) || testbit(wear, AMULET))) {
tempwiz = 1;
puts("The three amulets glow and reenforce each other in power.\nYou are now a wizard.");
}
if (testbit(location[position].objects, ELF)) {
printf("%s\n", objdes[ELF]);
fight(ELF, rnd(30));
}
if (testbit(location[position].objects, DARK)) {
printf("%s\n", objdes[DARK]);
fight(DARK, 100);
}
if (testbit(location[position].objects, WOODSMAN)) {
printf("%s\n", objdes[WOODSMAN]);
fight(WOODSMAN, 50);
}
switch (position) {
case 267:
case 257: /* entering a cave */
case 274:
case 246:
notes[CANTSEE] = 1;
break;
case 160:
case 216: /* leaving a cave */
case 230:
case 231:
case 232:
notes[CANTSEE] = 0;
break;
}
if (testbit(location[position].objects, GIRL))
meetgirl = 1;
if (meetgirl && CYCLE * 1.5 - ourtime < 10) {
setbit(location[GARDEN].objects, GIRLTALK);
setbit(location[GARDEN].objects, LAMPON);
setbit(location[GARDEN].objects, ROPE);
}
if (position == DOCK && (beenthere[position] || ourtime > CYCLE)) {
clearbit(location[DOCK].objects, GIRL);
clearbit(location[DOCK].objects, MAN);
}
if (meetgirl && ourtime - CYCLE * 1.5 > 10) {
clearbit(location[GARDEN].objects, GIRLTALK);
clearbit(location[GARDEN].objects, LAMPON);
clearbit(location[GARDEN].objects, ROPE);
meetgirl = 0;
}
if (testbit(location[position].objects, CYLON)) {
puts("Oh my God, you're being shot at by an alien spacecraft!");
printf("The targeting computer says we have %d seconds to attack!\n",
ourclock);
fflush(stdout);
sleep(1);
if (!visual()) {
hurt = rnd(NUMOFINJURIES);
injuries[hurt] = 1;
puts("Laser blasts sear the cockpit, and the alien veers off in a victory roll.");
puts("The viper shudders under a terrible explosion.");
printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
} else
clearbit(location[position].objects, CYLON);
}
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]) {
puts("I'm afraid you have suffered fatal injuries.");
die();
}
for (n = 0; n < NUMOFINJURIES; n++)
if (injuries[n] == 1) {
injuries[n] = 2;
if (WEIGHT > 5)
WEIGHT -= 5;
else
WEIGHT = 0;
}
if (injuries[ARM] == 2) {
CUMBER -= 5;
injuries[ARM]++;
}
if (injuries[RIBS] == 2) {
CUMBER -= 2;
injuries[RIBS]++;
}
if (injuries[SPINE] == 2) {
WEIGHT = 0;
injuries[SPINE]++;
}
if (carrying > WEIGHT || encumber > CUMBER)
notes[CANTMOVE] = 1;
else
notes[CANTMOVE] = 0;
}
void
crash()
{
int hurt1, hurt2;
fuel--;
if (!location[position].flyhere ||
(testbit(location[position].objects, LAND) && fuel <= 0)) {
if (!location[position].flyhere)
puts("You're flying too low. We're going to crash!");
else {
puts("You're out of fuel. We'll have to crash land!");
if (!location[position].down) {
puts("Your viper strikes the ground and explodes into firey fragments.");
puts("Thick black smoke billows up from the wreckage.");
die();
}
position = location[position].down;
}
notes[LAUNCHED] = 0;
setbit(location[position].objects, CRASH);
ourtime += rnd(CYCLE / 4);
puts("The viper explodes into the ground and you lose consciousness...");
zzz();
hurt1 = rnd(NUMOFINJURIES - 2) + 2;
hurt2 = rnd(NUMOFINJURIES - 2) + 2;
injuries[hurt1] = 1;
injuries[hurt2] = 1;
injuries[0] = 1;/* abrasions */
injuries[1] = 1;/* lacerations */
printf("I'm afraid you have suffered %s and %s.\n",
ouch[hurt1], ouch[hurt2]);
}
}

View File

@@ -1,353 +0,0 @@
/* $NetBSD: com2.c,v 1.22 2001/06/02 17:30:28 christos Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com2.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com2.c,v 1.22 2001/06/02 17:30:28 christos Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
wearit()
{ /* synonyms = {sheathe, sheath} */
int firstnumber, value;
firstnumber = wordnumber;
wordnumber++;
while (wordnumber <= wordcount && (wordtype[wordnumber] == OBJECT ||
wordtype[wordnumber] == NOUNS) && wordvalue[wordnumber] != DOOR) {
value = wordvalue[wordnumber];
if (value >= 0 && objsht[value] == NULL)
break;
switch (value) {
case -1:
puts("Wear what?");
return (firstnumber);
default:
printf("You can't wear %s%s!\n",
A_OR_AN_OR_BLANK(value), objsht[value]);
return (firstnumber);
case KNIFE:
/* case SHIRT: */
case ROBE:
case LEVIS: /* wearable things */
case SWORD:
case MAIL:
case HELM:
case SHOES:
case PAJAMAS:
case COMPASS:
case LASER:
case AMULET:
case TALISMAN:
case MEDALION:
case ROPE:
case RING:
case BRACELET:
case GRENADE:
if (testbit(inven, value)) {
clearbit(inven, value);
setbit(wear, value);
carrying -= objwt[value];
encumber -= objcumber[value];
ourtime++;
printf("You are now wearing %s%s.\n",
A_OR_AN_OR_THE(value), objsht[value]);
} else
if (testbit(wear, value))
printf("You are already wearing the %s.\n",
objsht[value]);
else
printf("You aren't holding the %s.\n",
objsht[value]);
if (wordnumber < wordcount - 1 &&
wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
} /* end switch */
} /* end while */
puts("Don't be ridiculous.");
return (firstnumber);
}
int
put()
{ /* synonyms = {buckle, strap, tie} */
if (wordvalue[wordnumber + 1] == ON) {
wordvalue[++wordnumber] = PUTON;
wordtype[wordnumber] = VERB;
return (cypher());
}
if (wordvalue[wordnumber + 1] == DOWN) {
wordvalue[++wordnumber] = DROP;
wordtype[wordnumber] = VERB;
return (cypher());
}
puts("I don't understand what you want to put.");
return (-1);
}
int
draw()
{ /* synonyms = {pull, carry} */
return (take(wear));
}
int
use()
{
wordnumber++;
if (wordvalue[wordnumber] == AMULET && testbit(inven, AMULET) &&
position != FINAL) {
puts("The amulet begins to glow.");
if (testbit(inven, MEDALION)) {
puts("The medallion comes to life too.");
if (position == 114) {
location[position].down = 160;
whichway(location[position]);
puts("The waves subside and it is possible to descend to the sea cave now.");
ourtime++;
return (-1);
}
}
puts("A light mist falls over your eyes and the sound of purling water trickles in");
puts("your ears. When the mist lifts you are standing beside a cool stream.");
if (position == 229)
position = 224;
else
position = 229;
ourtime++;
notes[CANTSEE] = 0;
return (0);
} else if (position == FINAL)
puts("The amulet won't work in here.");
else if (wordvalue[wordnumber] == COMPASS && testbit(inven, COMPASS))
printf("Your compass points %s.\n", truedirec(NORTH, '-'));
else if (wordvalue[wordnumber] == COMPASS)
puts("You aren't holding the compass.");
else if (wordvalue[wordnumber] == AMULET)
puts("You aren't holding the amulet.");
else
puts("There is no apparent use.");
return (-1);
}
void
murder()
{
int n;
for (n = 0; !((n == SWORD || n == KNIFE || n == TWO_HANDED || n == MACE || n == CLEAVER || n == BROAD || n == CHAIN || n == SHOVEL || n == HALBERD) && testbit(inven, n)) && n < NUMOFOBJECTS; n++);
if (n == NUMOFOBJECTS) {
if (testbit(inven, LASER)) {
printf("Your laser should do the trick.\n");
wordnumber++;
switch(wordvalue[wordnumber]) {
case NORMGOD:
case TIMER:
case NATIVE:
case MAN:
wordvalue[--wordnumber] = SHOOT;
cypher();
break;
case -1:
puts("Kill what?");
break;
default:
if (wordtype[wordnumber] != OBJECT ||
wordvalue[wordnumber] == EVERYTHING)
puts("You can't kill that!");
else
printf("You can't kill %s%s!\n",
A_OR_AN_OR_BLANK(wordvalue[wordnumber]),
objsht[wordvalue[wordnumber]]);
break;
}
} else
puts("You don't have suitable weapons to kill.");
} else {
printf("Your %s should do the trick.\n", objsht[n]);
wordnumber++;
switch (wordvalue[wordnumber]) {
case NORMGOD:
if (testbit(location[position].objects, BATHGOD)) {
puts("The goddess's head slices off. Her corpse floats in the water.");
clearbit(location[position].objects, BATHGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
notes[JINXED]++;
} else
if (testbit(location[position].objects, NORMGOD)) {
puts("The goddess pleads but you strike her mercilessly. Her broken body lies in a\npool of blood.");
clearbit(location[position].objects, NORMGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
notes[JINXED]++;
if (wintime)
live();
} else
puts("I don't see her anywhere.");
break;
case TIMER:
if (testbit(location[position].objects, TIMER)) {
puts("The old man offers no resistance.");
clearbit(location[position].objects, TIMER);
setbit(location[position].objects, DEADTIME);
power++;
notes[JINXED]++;
} else
puts("Who?");
break;
case NATIVE:
if (testbit(location[position].objects, NATIVE)) {
puts("The girl screams as you cut her body to shreds. She is dead.");
clearbit(location[position].objects, NATIVE);
setbit(location[position].objects, DEADNATIVE);
power += 5;
notes[JINXED]++;
} else
puts("What girl?");
break;
case MAN:
if (testbit(location[position].objects, MAN)) {
puts("You strike him to the ground, and he coughs up blood.");
puts("Your fantasy is over.");
die();
}
case -1:
puts("Kill what?");
break;
default:
if (wordtype[wordnumber] != OBJECT ||
wordvalue[wordnumber] == EVERYTHING)
puts("You can't kill that!");
else
printf("You can't kill the %s!\n",
objsht[wordvalue[wordnumber]]);
}
}
}
void
ravage()
{
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount)
continue;
if (wordtype[wordnumber] == NOUNS && (testbit(location[position].objects, wordvalue[wordnumber])
|| (wordvalue[wordnumber] == NORMGOD && testbit(location[position].objects, BATHGOD)))) {
ourtime++;
switch (wordvalue[wordnumber]) {
case NORMGOD:
puts("You attack the goddess, and she screams as you beat her. She falls down");
if (testbit(location[position].objects, BATHGOD))
puts("crying and tries to cover her nakedness.");
else
puts("crying and tries to hold her torn and bloodied dress around her.");
power += 5;
pleasure += 8;
ego -= 10;
wordnumber--;
godready = -30000;
murder();
win = -30000;
break;
case NATIVE:
puts("The girl tries to run, but you catch her and throw her down. Her face is");
puts("bleeding, and she screams as you tear off her clothes.");
power += 3;
pleasure += 5;
ego -= 10;
wordnumber--;
murder();
if (rnd(100) < 50) {
puts("Her screams have attracted attention. I think we are surrounded.");
setbit(location[ahead].objects, WOODSMAN);
setbit(location[ahead].objects, DEADWOOD);
setbit(location[ahead].objects, MALLET);
setbit(location[back].objects, WOODSMAN);
setbit(location[back].objects, DEADWOOD);
setbit(location[back].objects, MALLET);
setbit(location[left].objects, WOODSMAN);
setbit(location[left].objects, DEADWOOD);
setbit(location[left].objects, MALLET);
setbit(location[right].objects, WOODSMAN);
setbit(location[right].objects, DEADWOOD);
setbit(location[right].objects, MALLET);
}
break;
default:
puts("You are perverted.");
}
} else
puts("Who?");
}
int
follow()
{
if (followfight == ourtime) {
puts("The Dark Lord leaps away and runs down secret tunnels and corridors.");
puts("You chase him through the darkness and splash in pools of water.");
puts("You have cornered him. His laser sword extends as he steps forward.");
position = FINAL;
fight(DARK, 75);
setbit(location[position].objects, TALISMAN);
setbit(location[position].objects, AMULET);
return (0);
} else
if (followgod == ourtime) {
puts("The goddess leads you down a steamy tunnel and into a high, wide chamber.");
puts("She sits down on a throne.");
position = 268;
setbit(location[position].objects, NORMGOD);
notes[CANTSEE] = 1;
return (0);
} else
puts("There is no one to follow.");
return (-1);
}

View File

@@ -1,321 +0,0 @@
/* $NetBSD: com3.c,v 1.7 1998/08/24 00:19:25 hubertf Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com3.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com3.c,v 1.7 1998/08/24 00:19:25 hubertf Exp $");
#endif
#endif /* not lint */
#include "extern.h"
void
dig()
{
if (testbit(inven, SHOVEL)) {
puts("OK");
ourtime++;
switch (position) {
case 144: /* copse near beach */
if (!notes[DUG]) {
setbit(location[position].objects, DEADWOOD);
setbit(location[position].objects, COMPASS);
setbit(location[position].objects, KNIFE);
setbit(location[position].objects, MACE);
notes[DUG] = 1;
}
break;
default:
puts("Nothing happens.");
}
} else
puts("You don't have a shovel.");
}
int
jump()
{
int n;
switch (position) {
default:
puts("Nothing happens.");
return (-1);
case 242:
position = 133;
break;
case 214:
case 215:
case 162:
case 159:
position = 145;
break;
case 232:
position = 275;
break;
case 3:
position = 1;
break;
case 172:
position = 201;
}
puts("Ahhhhhhh...");
injuries[12] = injuries[8] = injuries[7] = injuries[6] = 1;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
clearbit(inven, n);
setbit(location[position].objects, n);
}
carrying = 0;
encumber = 0;
return (0);
}
void
bury()
{
int value;
if (testbit(inven, SHOVEL)) {
while (wordtype[++wordnumber] != OBJECT && wordtype[wordnumber] != NOUNS && wordnumber < wordcount);
value = wordvalue[wordnumber];
if (wordtype[wordnumber] == NOUNS && (testbit(location[position].objects, value) || value == BODY))
switch (value) {
case BODY:
wordtype[wordnumber] = OBJECT;
if (testbit(inven, MAID) || testbit(location[position].objects, MAID))
value = MAID;
if (testbit(inven, DEADWOOD) || testbit(location[position].objects, DEADWOOD))
value = DEADWOOD;
if (testbit(inven, DEADGOD) || testbit(location[position].objects, DEADGOD))
value = DEADGOD;
if (testbit(inven, DEADTIME) || testbit(location[position].objects, DEADTIME))
value = DEADTIME;
if (testbit(inven, DEADNATIVE) || testbit(location[position].objects, DEADNATIVE))
value = DEADNATIVE;
break;
case NATIVE:
case NORMGOD:
puts("She screams as you wrestle her into the hole.");
case TIMER:
power += 7;
ego -= 10;
case AMULET:
case MEDALION:
case TALISMAN:
wordtype[wordnumber] = OBJECT;
break;
default:
puts("Wha..?");
}
if (wordtype[wordnumber] == OBJECT && position > 88 && (testbit(inven, value) || testbit(location[position].objects, value))) {
puts("Buried.");
if (testbit(inven, value)) {
clearbit(inven, value);
carrying -= objwt[value];
encumber -= objcumber[value];
}
clearbit(location[position].objects, value);
switch (value) {
case MAID:
case DEADWOOD:
case DEADNATIVE:
case DEADTIME:
case DEADGOD:
ego += 2;
printf("The %s should rest easier now.\n", objsht[value]);
}
} else
puts("It doesn't seem to work.");
} else
puts("You aren't holding a shovel.");
}
void
drink()
{
int n;
if (testbit(inven, POTION)) {
puts("The cool liquid runs down your throat but turns to fire and you choke.");
puts("The heat reaches your limbs and tingles your spirit. You feel like falling");
puts("asleep.");
clearbit(inven, POTION);
WEIGHT = MAXWEIGHT;
CUMBER = MAXCUMBER;
for (n = 0; n < NUMOFINJURIES; n++)
injuries[n] = 0;
ourtime++;
zzz();
} else
puts("I'm not thirsty.");
}
int
shoot()
{
int firstnumber, value;
int n;
firstnumber = wordnumber;
if (!testbit(inven, LASER))
puts("You aren't holding a blaster.");
else {
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) {
value = wordvalue[wordnumber];
printf("%s:\n", objsht[value]);
for (n = 0; objsht[value][n]; n++);
if (testbit(location[position].objects, value)) {
clearbit(location[position].objects, value);
ourtime++;
printf("The %s explode%s\n", objsht[value], (objsht[value][n - 1] == 's' ? (objsht[value][n - 2] == 's' ? "s." : ".") : "s."));
if (value == BOMB)
die();
} else
printf("I dont see any %s around here.\n", objsht[value]);
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
}
/* special cases with their own return()'s */
if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS) {
ourtime++;
switch (wordvalue[wordnumber]) {
case DOOR:
switch (position) {
case 189:
case 231:
puts("The door is unhinged.");
location[189].north = 231;
location[231].south = 189;
whichway(location[position]);
break;
case 30:
puts("The wooden door splinters.");
location[30].west = 25;
whichway(location[position]);
break;
case 31:
puts("The laser blast has no effect on the door.");
break;
case 20:
puts("The blast hits the door and it explodes into flame. The magnesium burns");
puts("so rapidly that we have no chance to escape.");
die();
default:
puts("Nothing happens.");
}
break;
case NORMGOD:
if (testbit(location[position].objects, BATHGOD)) {
puts("The goddess is hit in the chest and splashes back against the rocks.");
puts("Dark blood oozes from the charred blast hole. Her naked body floats in the");
puts("pools and then off downstream.");
clearbit(location[position].objects, BATHGOD);
setbit(location[180].objects, DEADGOD);
power += 5;
ego -= 10;
notes[JINXED]++;
} else
if (testbit(location[position].objects, NORMGOD)) {
puts("The blast catches the goddess in the stomach, knocking her to the ground.");
puts("She writhes in the dirt as the agony of death taunts her.");
puts("She has stopped moving.");
clearbit(location[position].objects, NORMGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
ego -= 10;
notes[JINXED]++;
if (wintime)
live();
break;
} else
puts("I don't see any goddess around here.");
break;
case TIMER:
if (testbit(location[position].objects, TIMER)) {
puts("The old man slumps over the bar.");
power++;
ego -= 2;
notes[JINXED]++;
clearbit(location[position].objects, TIMER);
setbit(location[position].objects, DEADTIME);
} else
puts("What old timer?");
break;
case MAN:
if (testbit(location[position].objects, MAN)) {
puts("The man falls to the ground with blood pouring all over his white suit.");
puts("Your fantasy is over.");
die();
} else
puts("What man?");
break;
case NATIVE:
if (testbit(location[position].objects, NATIVE)) {
puts("The girl is blown backwards several feet and lies in a pool of blood.");
clearbit(location[position].objects, NATIVE);
setbit(location[position].objects, DEADNATIVE);
power += 5;
ego -= 2;
notes[JINXED]++;
} else
puts("There is no girl here.");
break;
case -1:
puts("Shoot what?");
break;
default:
printf("You can't shoot the %s.\n", objsht[wordvalue[wordnumber]]);
}
} else
puts("You must be a looney.");
}
return (firstnumber);
}

View File

@@ -1,395 +0,0 @@
/* $NetBSD: com4.c,v 1.6 1997/10/11 02:07:04 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com4.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com4.c,v 1.6 1997/10/11 02:07:04 lukem Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
take(from)
unsigned int from[];
{
int firstnumber, heavy, bulky, value;
int n;
firstnumber = wordnumber;
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == OFF) {
wordnumber++;
wordvalue[wordnumber] = TAKEOFF;
return (cypher());
} else {
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) {
value = wordvalue[wordnumber];
printf("%s:\n", objsht[value]);
for (n = 0; objsht[value][n]; n++);
heavy = (carrying + objwt[value]) <= WEIGHT;
bulky = (encumber + objcumber[value]) <= CUMBER;
if ((testbit(from, value) || wiz || tempwiz) && heavy && bulky && !testbit(inven, value)) {
setbit(inven, value);
carrying += objwt[value];
encumber += objcumber[value];
ourtime++;
if (testbit(from, value))
printf("Taken.\n");
else
printf("Zap! Taken from thin air.\n");
clearbit(from, value);
if (value == MEDALION)
win--;
} else
if (testbit(inven, value))
printf("You're already holding%s%s.\n", (objsht[value][n - 1] == 's' ? " " : " a "), objsht[value]);
else
if (!heavy)
printf("The %s %s too heavy.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is"));
else
if (!bulky)
printf("The %s %s too cumbersome to hold.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is"));
else
printf("I dont see any %s around here.\n", objsht[value]);
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
}
}
/* special cases with their own return()'s */
if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS)
switch (wordvalue[wordnumber]) {
case SWORD:
if (testbit(from, SWORD)) {
wordtype[wordnumber--] = OBJECT;
return (take(from));
}
if (testbit(from, TWO_HANDED)) {
wordvalue[wordnumber] = TWO_HANDED;
wordtype[wordnumber--] = OBJECT;
return (take(from));
}
wordvalue[wordnumber] = BROAD;
wordtype[wordnumber--] = OBJECT;
return (take(from));
case BODY:
if (testbit(from, MAID)) {
wordvalue[wordnumber] = MAID;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else
if (testbit(from, DEADWOOD)) {
wordvalue[wordnumber] = DEADWOOD;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else
if (testbit(from, DEADNATIVE)) {
wordvalue[wordnumber] = DEADNATIVE;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else
if (testbit(from, DEADGOD)) {
wordvalue[wordnumber] = DEADGOD;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else {
wordvalue[wordnumber] = DEADTIME;
wordtype[wordnumber--] = OBJECT;
return (take(from));
}
break;
case AMULET:
if (testbit(location[position].objects, AMULET)) {
puts("The amulet is warm to the touch, and its beauty catches your breath.");
puts("A mist falls over your eyes, but then it is gone. Sounds seem clearer");
puts("and sharper but far away as if in a dream. The sound of purling water reaches");
puts("you from afar. The mist falls again, and your heart leaps in horror. The gold");
puts("freezes your hands and fathomless darkness engulfs your soul.");
}
wordtype[wordnumber--] = OBJECT;
return (take(from));
case MEDALION:
if (testbit(location[position].objects, MEDALION)) {
puts("The medallion is warm, and it rekindles your spirit with the warmth of life.");
puts("Your amulet begins to glow as the medallion is brought near to it, and together\nthey radiate.");
}
wordtype[wordnumber--] = OBJECT;
return (take(from));
case TALISMAN:
if (testbit(location[position].objects, TALISMAN)) {
puts("The talisman is cold to the touch, and it sends a chill down your spine.");
}
wordtype[wordnumber--] = OBJECT;
return (take(from));
case NORMGOD:
if (testbit(location[position].objects, BATHGOD) && (testbit(wear, AMULET) || testbit(inven, AMULET))) {
puts("She offers a delicate hand, and you help her out of the sparkling springs.");
puts("Water droplets like liquid silver bedew her golden skin, but when they part");
puts("from her, they fall as teardrops. She wraps a single cloth around her and");
puts("ties it at the waist. Around her neck hangs a golden amulet.");
puts("She bids you to follow her.");
pleasure++;
followgod = ourtime;
clearbit(location[position].objects, BATHGOD);
} else
if (!testbit(location[position].objects, BATHGOD))
puts("You're in no position to take her.");
else
puts("She moves away from you.");
break;
default:
puts("It doesn't seem to work.");
}
else
puts("You've got to be kidding.");
return (firstnumber);
}
int
throw(name)
const char *name;
{
unsigned int n;
int deposit = 0;
int first, value;
first = wordnumber;
if (drop(name) != -1) {
switch (wordvalue[wordnumber]) {
case AHEAD:
deposit = ahead;
break;
case BACK:
deposit = back;
break;
case LEFT:
deposit = left;
break;
case RIGHT:
deposit = right;
break;
case UP:
deposit = location[position].up * (location[position].access || position == FINAL);
break;
case DOWN:
deposit = location[position].down;
break;
}
wordnumber = first;
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount) {
value = wordvalue[wordnumber];
if (deposit && testbit(location[position].objects, value)) {
clearbit(location[position].objects, value);
if (value != GRENADE)
setbit(location[deposit].objects, value);
else {
puts("A thundering explosion nearby sends up a cloud of smoke and shrapnel.");
for (n = 0; n < NUMOFWORDS; n++)
location[deposit].objects[n] = 0;
setbit(location[deposit].objects, CHAR);
}
if (value == ROPE && position == FINAL)
location[position].access = 1;
switch (deposit) {
case 189:
case 231:
puts("The stone door is unhinged.");
location[189].north = 231;
location[231].south = 189;
break;
case 30:
puts("The wooden door is blown open.");
location[30].west = 25;
break;
case 31:
puts("The door is not damaged.");
}
} else
if (value == GRENADE && testbit(location[position].objects, value)) {
puts("You are blown into shreds when your grenade explodes.");
die();
}
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (first);
}
return (first);
}
return (first);
}
int
drop(name)
const char *name;
{
int firstnumber, value;
firstnumber = wordnumber;
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount && (wordtype[wordnumber] == OBJECT || wordtype[wordnumber] == NOUNS)) {
value = wordvalue[wordnumber];
printf("%s:\n", objsht[value]);
if (testbit(inven, value)) {
clearbit(inven, value);
carrying -= objwt[value];
encumber -= objcumber[value];
if (value == BOMB) {
puts("The bomb explodes. A blinding white light and immense concussion obliterate us.");
die();
}
if (value != AMULET && value != MEDALION && value != TALISMAN)
setbit(location[position].objects, value);
else
tempwiz = 0;
ourtime++;
if (*name == 'K')
puts("Drop kicked.");
else
printf("%s.\n", name);
} else {
if (*name != 'K') {
printf("You aren't holding the %s.\n", objsht[value]);
if (testbit(location[position].objects, value)) {
if (*name == 'T')
puts("Kicked instead.");
else
if (*name == 'G')
puts("Given anyway.");
}
} else
puts("Kicked.");
}
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
}
puts("Do what?");
return (-1);
}
int
takeoff()
{
wordnumber = take(wear);
return (drop("Dropped"));
}
int
puton()
{
wordnumber = take(location[position].objects);
return (wearit());
}
int
eat()
{
int firstnumber, value;
firstnumber = wordnumber;
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount) {
value = wordvalue[wordnumber];
switch (value) {
case -1:
puts("Eat what?");
return (firstnumber);
default:
printf("You can't eat%s%s!\n",
wordtype[wordnumber] == OBJECT &&
objsht[value]
[strlen(objsht[value]) - 1] == 's' ?
" " : " a ",
words[wordnumber]);
return (firstnumber);
case PAPAYAS:
case PINEAPPLE:
case KIWI:
case COCONUTS: /* eatable things */
case MANGO:
printf("%s:\n", objsht[value]);
if (testbit(inven, value) &&
ourtime > ate - CYCLE &&
testbit(inven, KNIFE)) {
clearbit(inven, value);
carrying -= objwt[value];
encumber -= objcumber[value];
ate = max(ourtime, ate) + CYCLE / 3;
snooze += CYCLE / 10;
ourtime++;
puts("Eaten. You can explore a little longer now.");
} else
if (ourtime < ate - CYCLE)
puts("You're stuffed.");
else
if (!testbit(inven, KNIFE))
puts("You need a knife.");
else
printf("You aren't holding the %s.\n", objsht[value]);
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
} /* end switch */
} /* end while */
return (firstnumber);
}

View File

@@ -1,351 +0,0 @@
/* $NetBSD: com5.c,v 1.9 1998/08/30 09:19:36 veego Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com5.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com5.c,v 1.9 1998/08/30 09:19:36 veego Exp $");
#endif
#endif /* not lint */
#include "extern.h"
void
kiss()
{
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS &&
testbit(location[position].objects, wordvalue[wordnumber])) {
pleasure++;
printf("Kissed.\n");
switch (wordvalue[wordnumber]) {
case NORMGOD:
switch (godready++) {
case 0:
puts("She squirms and avoids your advances.");
break;
case 1:
puts("She is coming around; she didn't fight it as much.");
break;
case 2:
puts("She's begining to like it.");
break;
default:
puts("She's gone limp.");
}
break;
case NATIVE:
puts("The lips are warm and her body robust. She pulls you down to the ground.");
break;
case TIMER:
puts("The old man blushes.");
break;
case MAN:
puts("The dwarf punches you in the kneecap.");
break;
default:
pleasure--;
}
} else
puts("I'd prefer not to.");
}
void
love()
{
int n;
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects, wordvalue[wordnumber])) {
if (wordvalue[wordnumber] == NORMGOD && !loved) {
if (godready >= 2) {
puts("She cuddles up to you, and her mouth starts to work:\n'That was my sister's amulet. The lovely goddess, Purl, was she. The Empire\ncaptured her just after the Darkness came. My other sister, Vert, was killed\nby the Dark Lord himself. He took her amulet and warped its power.\nYour quest was foretold by my father before he died, but to get the Dark Lord's\namulet you must use cunning and skill. I will leave you my amulet.");
puts("which you may use as you wish. As for me, I am the last goddess of the\nwaters. My father was the Island King, and the rule is rightfully mine.'\n\nShe pulls the throne out into a large bed.");
power++;
pleasure += 15;
ego++;
if (card(injuries, NUMOFINJURIES)) {
puts("Her kisses revive you; your wounds are healed.\n");
for (n = 0; n < NUMOFINJURIES; n++)
injuries[n] = 0;
WEIGHT = MAXWEIGHT;
CUMBER = MAXCUMBER;
}
printf("Goddess:\n");
if (!loved)
setbit(location[position].objects, MEDALION);
loved = 1;
ourtime += 10;
zzz();
} else {
puts("You wish!");
return;
}
}
if (wordvalue[wordnumber] == NATIVE) {
puts("The girl is easy prey. She peals off her sarong and indulges you.");
power++;
pleasure += 5;
printf("Girl:\n");
ourtime += 10;
zzz();
}
printf("Loved.\n");
} else
puts("It doesn't seem to work.");
}
int
zzz()
{
int oldtime;
int n;
oldtime = ourtime;
if ((snooze - ourtime) < (0.75 * CYCLE)) {
ourtime += 0.75 * CYCLE - (snooze - ourtime);
printf("<zzz>");
for (n = 0; n < ourtime - oldtime; n++)
printf(".");
printf("\n");
snooze += 3 * (ourtime - oldtime);
if (notes[LAUNCHED]) {
fuel -= (ourtime - oldtime);
if (location[position].down) {
position = location[position].down;
crash();
} else
notes[LAUNCHED] = 0;
}
if (OUTSIDE && rnd(100) < 50) {
puts("You are awakened abruptly by the sound of someone nearby.");
switch (rnd(4)) {
case 0:
if (ucard(inven)) {
n = rnd(NUMOFOBJECTS);
while (!testbit(inven, n))
n = rnd(NUMOFOBJECTS);
clearbit(inven, n);
if (n != AMULET && n != MEDALION && n != TALISMAN)
setbit(location[position].objects, n);
carrying -= objwt[n];
encumber -= objcumber[n];
}
puts("A fiendish little Elf is stealing your treasures!");
fight(ELF, 10);
break;
case 1:
setbit(location[position].objects, DEADWOOD);
break;
case 2:
setbit(location[position].objects, HALBERD);
break;
default:
break;
}
}
} else
return (0);
return (1);
}
void
chime()
{
if ((ourtime / CYCLE + 1) % 2 && OUTSIDE)
switch ((ourtime % CYCLE) / (CYCLE / 7)) {
case 0:
puts("It is just after sunrise.");
break;
case 1:
puts("It is early morning.");
break;
case 2:
puts("It is late morning.");
break;
case 3:
puts("It is near noon.");
break;
case 4:
puts("It is early afternoon.");
break;
case 5:
puts("It is late afternoon.");
break;
case 6:
puts("It is near sunset.");
break;
}
else
if (OUTSIDE)
switch ((ourtime % CYCLE) / (CYCLE / 7)) {
case 0:
puts("It is just after sunset.");
break;
case 1:
puts("It is early evening.");
break;
case 2:
puts("The evening is getting old.");
break;
case 3:
puts("It is near midnight.");
break;
case 4:
puts("These are the wee hours of the morning.");
break;
case 5:
puts("The night is waning.");
break;
case 6:
puts("It is almost morning.");
break;
}
else
puts("I can't tell the time in here.");
}
int
give()
{
int obj = -1, result = -1, person = 0, firstnumber, last1, last2;
last1 = last2 = 0;
firstnumber = wordnumber;
while (wordtype[++wordnumber] != OBJECT && wordvalue[wordnumber] != AMULET && wordvalue[wordnumber] != MEDALION && wordvalue[wordnumber] != TALISMAN && wordnumber <= wordcount);
if (wordnumber <= wordcount) {
obj = wordvalue[wordnumber];
if (obj == EVERYTHING)
wordtype[wordnumber] = -1;
last1 = wordnumber;
}
wordnumber = firstnumber;
while ((wordtype[++wordnumber] != NOUNS || wordvalue[wordnumber] == obj) && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS) {
person = wordvalue[wordnumber];
last2 = wordnumber;
}
/* Setting wordnumber to last1 - 1 looks wrong if last1 is 0, e.g.,
* plain `give'. However, detecting this case is liable to detect
* `give foo' as well, which would give a confusing error. We
* need to make sure the -1 value can cause no problems if it arises.
* If in the below we get to the drop("Given") then drop will look
* at word 0 for an object to give, and fail, which is OK; then
* result will be -1 and we get to the end, where wordnumber gets
* set to something more sensible. If we get to "I don't think
* that is possible" then again wordnumber is set to something
* sensible. The wordnumber we leave with still isn't right if
* you include words the game doesn't know in your command, but
* that's no worse than what other commands than give do in
* the same place. */
wordnumber = last1 - 1;
if (person && testbit(location[position].objects, person))
if (person == NORMGOD && godready < 2 && !(obj == RING || obj == BRACELET))
puts("The goddess won't look at you.");
else
result = drop("Given");
else {
puts("I don't think that is possible.");
wordnumber = max(last1, last2) + 1;
return (0);
}
if (result != -1 && (testbit(location[position].objects, obj) || obj == AMULET || obj == MEDALION || obj == TALISMAN)) {
clearbit(location[position].objects, obj);
ourtime++;
ego++;
switch (person) {
case NATIVE:
puts("She accepts it shyly.");
ego += 2;
break;
case NORMGOD:
if (obj == RING || obj == BRACELET) {
puts("She takes the charm and puts it on. A little kiss on the cheek is");
puts("your reward.");
ego += 5;
godready += 3;
}
if (obj == AMULET || obj == MEDALION || obj == TALISMAN) {
win++;
ego += 5;
power -= 5;
if (win >= 3) {
puts("The powers of the earth are now legitimate. You have destroyed the Darkness");
puts("and restored the goddess to her thrown. The entire island celebrates with");
puts("dancing and spring feasts. As a measure of her gratitude, the goddess weds you");
puts("in the late summer and crowns you Prince Liverwort, Lord of Fungus.");
puts("\nBut, as the year wears on and autumn comes along, you become restless and");
puts("yearn for adventure. The goddess, too, realizes that the marriage can't last.");
puts("She becomes bored and takes several more natives as husbands. One evening,");
puts("after having been out drinking with the girls, she kicks the throne particulary");
puts("hard and wakes you up. (If you want to win this game, you're going to have to\nshoot her!)");
clearbit(location[position].objects, MEDALION);
wintime = ourtime;
}
}
break;
case TIMER:
if (obj == COINS) {
puts("He fingers the coins for a moment and then looks up agape. `Kind you are and");
puts("I mean to repay you as best I can.' Grabbing a pencil and cocktail napkin...\n");
printf("+-----------------------------------------------------------------------------+\n");
printf("| xxxxxxxx\\ |\n");
printf("| xxxxx\\ CLIFFS |\n");
printf("| FOREST xxx\\ |\n");
printf("| \\\\ x\\ OCEAN |\n");
printf("| || x\\ |\n");
printf("| || ROAD x\\ |\n");
printf("| || x\\ |\n");
printf("| SECRET || ......... |\n");
printf("| - + - || ........ |\n");
printf("| ENTRANCE || ... BEACH |\n");
printf("| || ... E |\n");
printf("| || ... | |\n");
printf("| // ... N <-- + --- S |\n");
printf("| PALM GROVE // ... | |\n");
printf("| // ... W |\n");
printf("+-----------------------------------------------------------------------------+\n");
puts("\n`This map shows a secret entrance to the catacombs.");
puts("You will know when you arrive because I left an old pair of shoes there.'");
}
break;
}
}
wordnumber = max(last1, last2) + 1;
return (firstnumber);
}

View File

@@ -1,249 +0,0 @@
/* $NetBSD: com6.c,v 1.9 1997/10/13 21:05:36 cjs Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com6.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com6.c,v 1.9 1997/10/13 21:05:36 cjs Exp $");
#endif
#endif /* not lint */
#include <time.h>
#include "extern.h"
#include "pathnames.h"
int
launch()
{
if (testbit(location[position].objects, VIPER) && !notes[CANTLAUNCH]) {
if (fuel > 4) {
clearbit(location[position].objects, VIPER);
position = location[position].up;
notes[LAUNCHED] = 1;
ourtime++;
fuel -= 4;
puts("You climb into the viper and prepare for launch.");
puts("With a touch of your thumb the turbo engines ignite, thrusting you back into\nyour seat.");
return (1);
} else
puts("Not enough fuel to launch.");
} else
puts("Can't launch.");
return (0);
}
int
land()
{
if (notes[LAUNCHED] && testbit(location[position].objects, LAND) &&
location[position].down) {
notes[LAUNCHED] = 0;
position = location[position].down;
setbit(location[position].objects, VIPER);
fuel -= 2;
ourtime++;
puts("You are down.");
return (1);
} else
puts("You can't land here.");
return (0);
}
void
die()
{ /* endgame */
printf("bye.\nYour rating was %s.\n", rate());
post(' ');
exit(0);
}
void
diesig(dummy)
int dummy __attribute__((unused));
{
die();
}
void
live()
{
puts("\nYou win!");
post('!');
exit(0);
}
static FILE *score_fp;
void
open_score_file()
{
score_fp = fopen(_PATH_SCORE, "a");
if (score_fp == NULL)
warn("open %s for append", _PATH_SCORE);
}
void
post(ch)
char ch;
{
time_t tv;
char *date;
sigset_t sigset, osigset;
sigemptyset(&sigset);
sigaddset(&sigset, SIGINT);
sigprocmask(SIG_BLOCK, &sigset, &osigset);
tv = time(NULL);
date = ctime(&tv);
date[24] = '\0';
if (score_fp != NULL) {
fprintf(score_fp, "%s %8s %c%20s", date, username, ch, rate());
if (wiz)
fprintf(score_fp, " wizard\n");
else
if (tempwiz)
fprintf(score_fp, " WIZARD!\n");
else
fprintf(score_fp, "\n");
}
sigprocmask(SIG_SETMASK, &osigset, (sigset_t *) 0);
}
const char *
rate()
{
int score;
score = max(max(pleasure, power), ego);
if (score == pleasure) {
if (score < 5)
return ("novice");
else
if (score < 20)
return ("junior voyeur");
else
if (score < 35)
return ("Don Juan");
else
return ("Marquis De Sade");
} else
if (score == power) {
if (score < 5)
return ("serf");
else
if (score < 8)
return ("Samurai");
else
if (score < 13)
return ("Klingon");
else
if (score < 22)
return ("Darth Vader");
else
return ("Sauron the Great");
} else {
if (score < 5)
return ("Polyanna");
else
if (score < 10)
return ("philanthropist");
else
if (score < 20)
return ("Tattoo");
else
return ("Mr. Roarke");
}
}
int
drive()
{
if (testbit(location[position].objects, CAR)) {
puts("You hop in the car and turn the key. There is a perceptible grating noise,");
puts("and an explosion knocks you unconscious...");
clearbit(location[position].objects, CAR);
setbit(location[position].objects, CRASH);
injuries[5] = injuries[6] = injuries[7] = injuries[8] = 1;
ourtime += 15;
zzz();
return (0);
} else
puts("There is nothing to drive here.");
return (-1);
}
int
ride()
{
if (testbit(location[position].objects, HORSE)) {
puts("You climb onto the stallion and kick it in the guts. The stupid steed launches");
puts("forward through bush and fern. You are thrown and the horse gallups off.");
clearbit(location[position].objects, HORSE);
while (!(position = rnd(NUMOFROOMS + 1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere);
setbit(location[position].objects, HORSE);
if (location[position].north)
position = location[position].north;
else
if (location[position].south)
position = location[position].south;
else
if (location[position].east)
position = location[position].east;
else
position = location[position].west;
return (0);
} else
puts("There is no horse here.");
return (-1);
}
void
light()
{ /* synonyms = {strike, smoke} *//* for
* matches, cigars */
if (testbit(inven, MATCHES) && matchcount) {
puts("Your match splutters to life.");
ourtime++;
matchlight = 1;
matchcount--;
if (position == 217) {
puts("The whole bungalow explodes with an intense blast.");
die();
}
} else
puts("You're out of matches.");
}

View File

@@ -1,276 +0,0 @@
/* $NetBSD: com7.c,v 1.6 1997/10/11 02:07:10 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com7.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com7.c,v 1.6 1997/10/11 02:07:10 lukem Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
fight(enemy, strength)
int enemy, strength;
{
int lifeline = 0;
int hurt;
char auxbuf[LINELENGTH];
char *next;
int i;
int exhaustion;
exhaustion = 0;
fighton:
ourtime++;
snooze -= 5;
if (snooze > ourtime)
exhaustion = CYCLE / (snooze - ourtime);
else {
puts("You collapse exhausted, and he pulverizes your skull.");
die();
}
if (snooze - ourtime < 20)
puts("You look tired! I hope you're able to fight.");
next = getcom(auxbuf, LINELENGTH, "<fight!>-: ", 0);
for (i = 0; next && i < 10; i++)
next = getword(next, words[i], -1);
parse();
switch (wordvalue[wordnumber]) {
case KILL:
case SMITE:
if (testbit(inven, TWO_HANDED))
hurt = rnd(70) - 2 * card(injuries, NUMOFINJURIES) - ucard(wear) - exhaustion;
else
if (testbit(inven, SWORD) || testbit(inven, BROAD))
hurt = rnd(50) % (WEIGHT - carrying) - card(injuries, NUMOFINJURIES) - encumber - exhaustion;
else
if (testbit(inven, KNIFE) || testbit(inven, MALLET) || testbit(inven, CHAIN) || testbit(inven, MACE) || testbit(inven, HALBERD))
hurt = rnd(15) - card(injuries, NUMOFINJURIES) - exhaustion;
else
hurt = rnd(7) - encumber;
if (hurt < 5)
switch (rnd(3)) {
case 0:
puts("You swung wide and missed.");
break;
case 1:
puts("He checked your blow. CLASH! CLANG!");
break;
case 2:
puts("His filthy tunic hangs by one less thread.");
break;
}
else
if (hurt < 10) {
switch (rnd(3)) {
case 0:
puts("He's bleeding.");
break;
case 1:
puts("A trickle of blood runs down his face.");
break;
case 2:
puts("A huge purple bruise is forming on the side of his face.");
break;
}
lifeline++;
} else
if (hurt < 20) {
switch (rnd(3)) {
case 0:
puts("He staggers back quavering.");
break;
case 1:
puts("He jumps back with his hand over the wound.");
break;
case 2:
puts("His shirt falls open with a swath across the chest.");
break;
}
lifeline += 5;
} else
if (hurt < 30) {
switch (rnd(3)) {
case 0:
printf("A bloody gash opens up on his %s side.\n", (rnd(2) ? "left" : "right"));
break;
case 1:
puts("The steel bites home and scrapes along his ribs.");
break;
case 2:
puts("You pierce him, and his breath hisses through clenched teeth.");
break;
}
lifeline += 10;
} else
if (hurt < 40) {
switch (rnd(3)) {
case 0:
puts("You smite him to the ground.");
if (strength - lifeline > 20)
puts("But in a flurry of steel he regains his feet!");
break;
case 1:
puts("The force of your blow sends him to his knees.");
puts("His arm swings lifeless at his side.");
break;
case 2:
puts("Clutching his blood drenched shirt, he collapses stunned.");
break;
}
lifeline += 20;
} else {
switch (rnd(3)) {
case 0:
puts("His ribs crack under your powerful swing, flooding his lungs with blood.");
break;
case 1:
puts("You shatter his upheld arm in a spray of blood. The blade continues deep");
puts("into his back, severing the spinal cord.");
lifeline += 25;
break;
case 2:
puts("With a mighty lunge the steel slides in, and gasping, he falls to the ground.");
lifeline += 25;
break;
}
lifeline += 30;
}
break;
case BACK:
if (enemy == DARK && lifeline > strength * 0.33) {
puts("He throws you back against the rock and pummels your face.");
if (testbit(inven, AMULET) || testbit(wear, AMULET)) {
printf("Lifting the amulet from you, ");
if (testbit(inven, MEDALION) || testbit(wear, MEDALION)) {
puts("his power grows and the walls of\nthe earth tremble.");
puts("When he touches the medallion, your chest explodes and the foundations of the\nearth collapse.");
puts("The planet is consumed by darkness.");
die();
}
if (testbit(inven, AMULET)) {
clearbit(inven, AMULET);
carrying -= objwt[AMULET];
encumber -= objcumber[AMULET];
} else
clearbit(wear, AMULET);
puts("he flees down the dark caverns.");
clearbit(location[position].objects, DARK);
injuries[SKULL] = 1;
followfight = ourtime;
return (0);
} else {
puts("I'm afraid you have been killed.");
die();
}
} else {
puts("You escape stunned and disoriented from the fight.");
puts("A victorious bellow echoes from the battlescene.");
if (back && position != back)
move(back, BACK);
else
if (ahead && position != ahead)
move(ahead, AHEAD);
else
if (left && position != left)
move(left, LEFT);
else
if (right && position != right)
move(right, RIGHT);
else
move(location[position].down, AHEAD);
return (0);
}
case SHOOT:
if (testbit(inven, LASER)) {
if (strength - lifeline <= 50) {
printf("The %s took a direct hit!\n", objsht[enemy]);
lifeline += 50;
} else {
puts("With his bare hand he deflects the laser blast and whips the pistol from you!");
clearbit(inven, LASER);
setbit(location[position].objects, LASER);
carrying -= objwt[LASER];
encumber -= objcumber[LASER];
}
} else
puts("Unfortunately, you don't have a blaster handy.");
break;
case DROP:
case DRAW:
cypher();
ourtime--;
break;
default:
puts("You don't have a chance, he is too quick.");
break;
}
if (lifeline >= strength) {
printf("You have killed the %s.\n", objsht[enemy]);
if (enemy == ELF || enemy == DARK)
puts("A watery black smoke consumes his body and then vanishes with a peal of thunder!");
clearbit(location[position].objects, enemy);
power += 2;
notes[JINXED]++;
return (0);
}
puts("He attacks...");
/* some embellisments */
hurt = rnd(NUMOFINJURIES) - (testbit(inven, SHIELD) != 0) - (testbit(wear, MAIL) != 0) - (testbit(wear, HELM) != 0);
hurt += (testbit(wear, AMULET) != 0) + (testbit(wear, MEDALION) != 0) + (testbit(wear, TALISMAN) != 0);
hurt = hurt < 0 ? 0 : hurt;
hurt = hurt >= NUMOFINJURIES ? NUMOFINJURIES - 1 : hurt;
if (!injuries[hurt]) {
injuries[hurt] = 1;
printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
} else
puts("You emerge unscathed.");
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]) {
puts("I'm afraid you have suffered fatal injuries.");
die();
}
goto fighton;
}

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: bcd.6,v 1.12 2001/06/05 12:41:04 wiz Exp $
.\" $NetBSD: bcd.6,v 1.15 2003/02/25 10:34:45 wiz Exp $
.\"
.\" Copyright (c) 1988, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -33,7 +33,7 @@
.\"
.\" @(#)bcd.6 8.1 (Berkeley) 5/31/93
.\"
.Dd May 31, 1993
.Dd November 26, 2002
.Dt BCD 6
.Os
.Sh NAME
@@ -45,12 +45,13 @@
.Nm
.Op Ar string ...
.Nm ppt
.Op Ar string ...
.Op Fl d Ns \&| Ns Ar string ...
.Nm morse
.Op Fl ds Ar string ...
.Sh DESCRIPTION
The
.Nm bcd ,
.Nm ,
.Nm ppt
and
.Nm morse
@@ -65,10 +66,13 @@ The
.Fl s
option for morse produces dots and dashes rather than words.
.It Fl d
Decode morse output consisting of dots and slashes (as generated
by using the
Decode
.Nm ppt
output, or
.Nm morse
output consisting of dots and slashes (as generated by using the
.Fl s
option.
option).
.El
.Sh SEE ALSO
.Rs

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: boggle.6,v 1.3 2001/04/02 22:46:18 wiz Exp $
.\" $NetBSD: boggle.6,v 1.5 2002/09/26 18:31:59 wiz Exp $
.\"
.\" Copyright (c) 1993
.\" The Regents of the University of California. All rights reserved.
@@ -103,8 +103,8 @@ Help is available during play by typing
More detailed information on the game is given there.
.Sh BUGS
If there are a great many words in the cube the final display of the words
may scroll off of the screen. (On a 25 line screen about 130 words can be
displayed.)
may scroll off of the screen.
(On a 25 line screen about 130 words can be displayed.)
.Pp
No word can contain a
.Sq q
@@ -115,8 +115,7 @@ When using the
.Ar +
or
.Ar ++
options the display of words found in the board
doesn't indicate reused cubes.
options the display of words found in the board doesn't indicate reused cubes.
.Sh AUTHOR
Boggle is a trademark of Parker Brothers.
.Pp

41
configure vendored
View File

@@ -1,7 +1,7 @@
#!/bin/sh
# configure - home-grown configuration script for bsd-games.
#
# Copyright (c) 1997, 1998, 1999, 2000 Joseph Samuel Myers.
# Copyright (c) 1997, 1998, 1999, 2000, 2003 Joseph Samuel Myers.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -338,6 +338,28 @@ echo "this blank. Leave it blank if /usr/include/ncurses is a symbolic link"
echo "to /usr/include."
ask "Ncurses includes" ncurses_includes ''
openssl_lib=
openssl_includes=
if building_in factor; then
echo
echo "factor can use libcrypto from OpenSSL to handle large numbers."
ask_yn "Use libcrypto" use_libcrypto y
if [ $use_libcrypto = y ]; then
echo "If the OpenSSL includes (with files such as bn.h) are not in"
echo "/usr/include/openssl, then you will need to specify a -I option"
echo "here, naming a directory containing an \"openssl\" subdirectory"
echo "with the OpenSSL headers."
ask "OpenSSL includes" openssl_includes ''
echo "If the OpenSSL libcrypto library is not in a location searched"
echo "by the compiler by default, or has a strange name, you will"
echo "need to specify the appropriate options to find it here"
echo "(for example, -L/usr/ssl/lib -lcrypto); otherwise, leave the"
echo "default, which is probably correct."
ask "OpenSSL libcrypto library" openssl_lib -lcrypto
fi
fi
subst_vars="$subst_vars openssl_lib openssl_includes"
ask "Other CFLAGS" other_cflags ''
ask "Other LDFLAGS" other_ldflags ''
@@ -345,6 +367,10 @@ ask "Other LDFLAGS" other_ldflags ''
echo "#ifndef LINUX_BSD_GAMES_H" >include/bsd-games.h
echo "#define LINUX_BSD_GAMES_H 1" >>include/bsd-games.h
if [ "$use_libcrypto" = "y" ]; then
echo "#define HAVE_OPENSSL 1" >>include/bsd-games.h
fi
check_func getloadavg <<EOF
#include <stdlib.h>
@@ -370,6 +396,19 @@ main(void)
}
EOF
check_func strlcpy <<EOF
#include <string.h>
int
main(void)
{
char s[1] = "";
char d[1];
strlcpy(d, s, 1);
return 0;
}
EOF
echo "#endif /* !defined(LINUX_BSD_GAMES_H) */" >>include/bsd-games.h

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: countmail.6,v 1.5 1999/03/22 18:49:11 garbled Exp $
.\" $NetBSD: countmail.6,v 1.8 2002/09/26 18:32:00 wiz Exp $
.\"
.\" Copyright (c) 1997 Matthew R. Green
.\" All rights reserved.
@@ -44,8 +44,11 @@ The
program first appeared in
.Nx 1.3 .
.Nm
was first written by Noah Friedman <friedman@splode.com> in 1993.
This version was written by Charles M. Hannum <mycroft@netbsd.org>.
was first written by
.An Noah Friedman Aq friedman@splode.com
in 1993.
This version was written by Charles M. Hannum
.Aq mycroft@netbsd.org .
.Sh CAVEATS
The read loop is horrendously slow on every shell implementation tried.
.Nm

17
debian/changelog vendored
View File

@@ -1,3 +1,20 @@
bsdgames (2.14-1) unstable; urgency=low
* New upstream release, whivh includes hack, back fron bsdgames-nonfree.
* Conflict and replace with old versions of bsdgames-nonfree that include
hack.
* Add hack to package description and menu file.
* Add in hack's two READ_ME files to binay package.
* Patched hack config.h as it is patched in bsdgames-nonfree.
* Unlike bsdgames-nonfree, put the help, hh, rumors, and data files in
/usr/share/games/bsdgames/hack, as the patched config.h makes it look
there.
* postinst moves over hack state files to new directory
* Patched phantasia to use strerror and not segfault if it cannot open the
var files. Closes: #187251 (patch sent upstream)
-- Joey Hess <joeyh@debian.org> Wed, 2 Apr 2003 20:44:19 -0500
bsdgames (2.13-11) unstable; urgency=low
* Fixed silly typo in wargames man page. Closes: #169307

14
debian/control vendored
View File

@@ -3,19 +3,19 @@ Section: games
Priority: optional
Build-Depends: debhelper (>= 4), libncurses5-dev, flex, bison, wenglish, wbritish, dpkg-dev (>= 1.9.0)
Maintainer: Joey Hess <joeyh@debian.org>
Standards-Version: 3.5.7.1
Standards-Version: 3.5.9.0
Package: bsdgames
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, wenglish | wordlist
Conflicts: bsdgames-nonfree (<< 2.5), suidmanager (<< 0.50)
Replaces: bsdgames-nonfree (<< 2.5)
Description: collection of text games from BSD systems
Conflicts: bsdgames-nonfree (<< 2.14), suidmanager (<< 0.50)
Replaces: bsdgames-nonfree (<< 2.14)
Description: a collection of classic textual unix games
This is a collection of some of the text-based games and amusements that have
been enjoyed for decades on unix systems.
.
Includes these programs: adventure, arithmetic, atc, backgammon, battlestar,
bcd, boggle, caesar, canfield, countmail, cribbage, fish, gomoku, hangman,
hunt, mille, monop, morse, number, pig, phantasia, pom, ppt, primes, quiz,
random, rain, robots, sail, snake, tetris, trek, wargames, worm, worms,
bcd, boggle, caesar, canfield, countmail, cribbage, fish, gomoku, hack,
hangman, hunt, mille, monop, morse, number, pig, phantasia, pom, ppt, primes,
quiz, random, rain, robots, sail, snake, tetris, trek, wargames, worm, worms,
wump, wtf

2
debian/menu vendored
View File

@@ -5,6 +5,8 @@
command="sh -c '/usr/games/atc ; echo;echo PRESS ENTER;read line'"
?package(bsdgames):needs="text" section="Games/Adventure" \
title="Battlestar" command="sh -c '/usr/games/battlestar;echo PRESS ENTER;read line'"
?package(bsdgames):needs="text" section="Games/Adventure" \
title="Hack" command=/usr/games/hack
?package(bsdgames):needs="text" section="Games/Card" \
title="Canfield" command="/usr/games/canfield"
?package(bsdgames):needs="text" section="Games/Card" \

18
debian/postinst vendored
View File

@@ -17,7 +17,23 @@ SCOREFILES="
/var/games/bsdgames/phantasia/motd
/var/games/bsdgames/phantasia/scoreboard
/var/games/bsdgames/phantasia/void
/var/games/bsdgames/phantasia/monsters"
/var/games/bsdgames/phantasia/monsters
/var/games/bsdgames/hack/perm
/var/games/bsdgames/hack/record"
# Hack moved over from bsdgames-nonfree.
if [ -d /var/games/bsdgames-nonfree ]; then
for file in perm record; do
if [ -e /var/games/bsdgames-nonfree/hack/$file ]; then
mv -f /var/games/bsdgames-nonfree/hack/$file \
/var/games/bsdgames/hack/$file
fi
done
cp -a -f /var/games/bsdgames-nonfree/hack/save/* \
/var/games/bsdgames/hack/save/ 2>/dev/null || true
rm -f /var/games/bsdgames-nonfree/hack/save/* 2>/dev/null || true
rmdir -p /var/games/bsdgames-nonfree/hack/save 2>/dev/null || true
fi
# These files cannot just be zero-byte files:
if [ ! -e /var/games/bsdgames/phantasia/void ]; then

6
debian/postrm vendored
View File

@@ -17,13 +17,17 @@ SCOREFILES="
/var/games/bsdgames/phantasia/motd
/var/games/bsdgames/phantasia/scoreboard
/var/games/bsdgames/phantasia/void
/var/games/bsdgames/phantasia/monsters"
/var/games/bsdgames/phantasia/monsters
/var/games/bsdgames/hack/perm
/var/games/bsdgames/hack/record"
# Remove high score files on purge.
if [ "$1" = "purge" ]; then
rm -f $SCOREFILES
rmdir /var/games/bsdgames/phantasia /var/games/bsdgames/sail \
/var/games/bsdgames /var/games 2>/dev/null || true
rm -f /var/games/bsdgames/hack/save/* 2>/dev/null || true
rmdir -p /var/games/bsdgames/hack/save 2>/dev/null || true
fi
#DEBHELPER#

19
debian/rules vendored
View File

@@ -27,7 +27,8 @@ binary-arch: build
dh_testroot
dh_clean
dh_installdirs usr/share/doc/bsdgames \
usr/share/games/bsdgames/phantasia
usr/share/games/bsdgames/phantasia \
var/games/bsdgames/hack/save
$(MAKE) install
cp atc/BUGS debian/bsdgames/usr/share/doc/bsdgames/BUGS.atc
@@ -36,6 +37,8 @@ binary-arch: build
cp phantasia/README debian/bsdgames/usr/share/doc/bsdgames/README.phantasia
cp boggle/README debian/bsdgames/usr/share/doc/bsdgames/README.boggle
cp boggle/README.linux debian/bsdgames/usr/share/doc/bsdgames/README.linux.boggle
cp hack/Original_READ_ME debian/bsdgames/usr/share/doc/bsdgames/Original_READ_ME.hack
cp hack/READ_ME debian/bsdgames/usr/share/doc/bsdgames/READ_ME.hack
# Since factor is not installed, and primes.6 is a symlink to
# factor.6, I need to change that to the actual man page.
-rm -f debian/bsdgames/usr/share/man/man6/factor.6.gz \
@@ -68,7 +71,8 @@ binary-arch: build
debian/bsdgames/usr/games/snake \
debian/bsdgames/usr/games/tetris-bsd \
debian/bsdgames/usr/games/phantasia \
debian/bsdgames/usr/games/sail
debian/bsdgames/usr/games/sail \
debian/bsdgames/usr/games/hack
chmod g+s debian/bsdgames/usr/games/atc \
debian/bsdgames/usr/games/battlestar \
debian/bsdgames/usr/games/canfield \
@@ -77,15 +81,20 @@ binary-arch: build
debian/bsdgames/usr/games/snake \
debian/bsdgames/usr/games/tetris-bsd \
debian/bsdgames/usr/games/phantasia \
debian/bsdgames/usr/games/sail
debian/bsdgames/usr/games/sail \
debian/bsdgames/usr/games/hack
# The game directories need to be sgid too, and let's
# remove all the zero byte score files in them.
chown root.games debian/bsdgames/var/games/bsdgames/ \
debian/bsdgames/var/games/bsdgames/sail \
debian/bsdgames/var/games/bsdgames/phantasia
debian/bsdgames/var/games/bsdgames/phantasia \
debian/bsdgames/var/games/bsdgames/hack \
debian/bsdgames/var/games/bsdgames/hack/save
chmod g+rws debian/bsdgames/var/games/bsdgames/ \
debian/bsdgames/var/games/bsdgames/sail \
debian/bsdgames/var/games/bsdgames/phantasia
debian/bsdgames/var/games/bsdgames/phantasia \
debian/bsdgames/var/games/bsdgames/hack \
debian/bsdgames/var/games/bsdgames/hack/save
find debian/bsdgames/var/games/bsdgames -size 0 -exec rm {} \;
dh_installdeb

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: factor.6,v 1.5 1997/10/10 12:51:27 lukem Exp $
.\" $NetBSD: factor.6,v 1.7 2002/09/26 18:32:01 wiz Exp $
.\"
.\" Copyright (c) 1989, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -46,8 +46,7 @@
.Os
.Sh NAME
.Nm primes
.Nd
generate primes
.Nd generate primes
.Sh SYNOPSIS
.Nm
.Op Ar number ...
@@ -86,6 +85,10 @@ The
.Ar start
value is terminated by a non-digit character (such as a newline).
The input line must not be longer than 255 characters.
.Sh DIAGNOSTICS
Out of range or invalid input results in
.Sq ouch
being written to standard error.
.Sh BUGS
.Nm primes
won't get you a world record.

View File

@@ -56,7 +56,8 @@ hack_install: hack_all
$(INSTALL_SCORE_GAME) hack/hack $(INSTALL_PREFIX)$(GAMESDIR)/hack
$(HIDE_GAME) hack
$(INSTALL_HACK_DIR) $(INSTALL_PREFIX)$(HACK_DIR)
set -e; for f in data help hh rumors; do $(INSTALL_DATA) hack/$$f $(INSTALL_PREFIX)$(HACK_DIR)/$$f; done
install -d $(INSTALL_PREFIX)/usr/share/games/bsdgames/hack
set -e; for f in data help hh rumors; do $(INSTALL_DATA) hack/$$f $(INSTALL_PREFIX)/usr/share/games/bsdgames/hack/$$f; done
$(INSTALL_SCORE_FILE) $(HACK_DIR)/perm
$(INSTALL_SCORE_FILE) $(HACK_DIR)/record
$(INSTALL_MANUAL) hack/hack.6

View File

@@ -88,13 +88,19 @@
/* #define PYRAMID_BUG */ /* avoid a bug on the Pyramid */
/* #define NOWAITINCLUDE */ /* neither <wait.h> nor <sys/wait.h> exists */
#define WIZARD "bruno" /* the person allowed to use the -D option */
//#define WIZARD "bruno" /* the person allowed to use the -D option */
/*
* Debian mods: use root for WIZARD, and move files that are static to
* /usr/share/ -- JEH
*/
#define WIZARD "root" /* the person allowed to use the -D option */
#define SHAREDIR "/usr/share/games/bsdgames/hack/"
#define RECORD "record"/* the file containing the list of topscorers */
#define NEWS "news" /* the file containing the latest hack news */
#define HELP "help" /* the file containing a description of the commands */
#define SHELP "hh" /* abbreviated form of the same */
#define RUMORFILE "rumors" /* a file with fortune cookies */
#define DATAFILE "data" /* a file giving the meaning of symbols used */
#define HELP SHAREDIR "help" /* the file containing a description of the commands */
#define SHELP SHAREDIR "hh" /* abbreviated form of the same */
#define RUMORFILE SHAREDIR "rumors" /* a file with fortune cookies */
#define DATAFILE SHAREDIR "data" /* a file giving the meaning of symbols used */
#define FMASK 0660 /* file creation mask */
#define HLOCK "perm" /* an empty file used for locking purposes */
#define LLOCK "safelock" /* link to previous */

View File

@@ -1,4 +1,4 @@
/* $NetBSD: extern.c,v 1.6 1999/09/17 20:45:48 jsm Exp $ */
/* $NetBSD: extern.c,v 1.7 2002/01/20 00:42:51 jsm Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)extern.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: extern.c,v 1.6 1999/09/17 20:45:48 jsm Exp $");
__RCSID("$NetBSD: extern.c,v 1.7 2002/01/20 00:42:51 jsm Exp $");
#endif
#endif /* not lint */

View File

@@ -1,4 +1,4 @@
/* $NetBSD: getword.c,v 1.6 1999/09/08 21:57:17 jsm Exp $ */
/* $NetBSD: getword.c,v 1.7 2002/01/20 00:42:51 jsm Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)getword.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: getword.c,v 1.6 1999/09/08 21:57:17 jsm Exp $");
__RCSID("$NetBSD: getword.c,v 1.7 2002/01/20 00:42:51 jsm Exp $");
#endif
#endif /* not lint */

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: hangman.6,v 1.7 1999/09/17 20:45:49 jsm Exp $
.\" $NetBSD: hangman.6,v 1.11 2003/02/25 10:34:46 wiz Exp $
.\"
.\" Copyright (c) 1983, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -38,14 +38,14 @@
.Os
.Sh NAME
.Nm hangman
.Nd Computer version of the game hangman
.Nd computer version of the game hangman
.Sh SYNOPSIS
.Nm
.Op Fl d Ar wordlist
.Op Fl m Ar minlen
.Sh DESCRIPTION
In
.Nm "" ,
.Nm ,
the computer picks a word from the on-line word list
and you must try to guess it.
The computer keeps track of which letters have been guessed
@@ -57,12 +57,13 @@ Use the specified
.Ar wordlist
instead of the default one named below.
.It Fl m
Set the minimum word length to use. The default is 6 letters.
Set the minimum word length to use.
The default is 6 letters.
.El
.Sh FILES
.Bl -tag -width @hangman_wordsfile@ -compact
.It Pa @hangman_wordsfile@
On-line word list
.El
.Sh AUTHOR
Ken Arnold
.Sh AUTHORS
.An Ken Arnold

View File

@@ -1,4 +1,4 @@
/* $NetBSD: hangman.h,v 1.10 1999/09/17 20:45:49 jsm Exp $ */
/* $NetBSD: hangman.h,v 1.11 2002/01/20 00:42:51 jsm Exp $ */
/*
* Copyright (c) 1983, 1993

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.9 2000/05/08 07:56:04 mycroft Exp $ */
/* $NetBSD: main.c,v 1.10 2002/01/20 00:42:51 jsm Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -43,10 +43,11 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
#if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: main.c,v 1.9 2000/05/08 07:56:04 mycroft Exp $");
__RCSID("$NetBSD: main.c,v 1.10 2002/01/20 00:42:51 jsm Exp $");
#endif
#endif /* not lint */
#include <err.h>
#include "hangman.h"
/*
@@ -62,17 +63,15 @@ main(argc, argv)
/* Revoke setgid privileges */
setregid(getgid(), getgid());
while ((ch = getopt(argc, argv, "m:d:")) != -1) {
while ((ch = getopt(argc, argv, "d:m:")) != -1) {
switch (ch) {
case 'd':
Dict_name = optarg;
break;
case 'm':
Minlen = atoi(optarg);
if (Minlen < 2) {
fprintf(stderr, "minlen too short\n");
exit(1);
}
if (Minlen < 2)
errx(1, "minimum word length too short");
break;
case '?':
default:

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: hunt.6,v 1.4 2001/04/04 11:41:01 wiz Exp $
.\" $NetBSD: hunt.6,v 1.9 2003/02/25 10:34:46 wiz Exp $
.\"
.\" hunt
.\" Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold
@@ -31,8 +31,7 @@ walls and players.
The more players you kill before you die, the better your score is.
If the
.Fl m
flag is given,
you enter the game as a monitor
flag is given, you enter the game as a monitor
(you can see the action but you cannot play).
.Pp
.Nm
@@ -44,8 +43,7 @@ argument.
This presupposes that a hunt game is already running on that host, see
.Xr huntd 6
for details on how to setup a game on a specific host.
If more than one game if found,
you may pick which game to play in.
If more than one game if found, you may pick which game to play in.
.Pp
If the
.Fl q
@@ -53,8 +51,9 @@ flag is given,
.Nm
queries the local network (or specific host)
and reports on all active games found.
This is useful for shell startup scripts, e.g.\&
.Xr csh 1 Ns 's No .login .
This is useful for shell startup scripts, e.g.,
.Xr csh 1 Ns 's
.Pa .login .
.Pp
The player name may be specified on the command line by using the
.Fl n
@@ -107,23 +106,18 @@ mailing list (see
.Xr huntd 6 ) .
.Sh PLAYING HINTS
.Nm
only works on crt (vdt) terminals with at least 24 lines, 80 columns, and
only works on CRT (vdt) terminals with at least 24 lines, 80 columns, and
cursor addressing.
The screen is divided in to 3 areas.
On the right hand side is the status area.
It shows damage sustained,
charges remaining,
who's in the game,
It shows damage sustained, charges remaining, who's in the game,
who's scanning (the
.Dq *
in front of the name),
who's cloaked (the
in front of the name), who's cloaked (the
.Dq +
in front of the name),
and other players' scores.
in front of the name), and other players' scores.
The rest of the screen is taken up by your map of the maze.
The 24th line
is used for longer messages that don't fit in the status area.
The 24th line is used for longer messages that don't fit in the status area.
.Pp
.Nm
uses the same keys to move as
@@ -205,7 +199,7 @@ bomb
small slime
.It $
big slime
.It ><^v
.It \*[Gt]\*[Lt]^v
you facing right, left, up, or down
.It }{i!
other players facing right, left, up, or down
@@ -226,8 +220,7 @@ You can only fire three shots in a row, then the gun must cool off.
.It
Shots move 5 times faster than you do.
.It
To stab someone,
you face that player and move at them.
To stab someone, you face that player and move at them.
.It
Stabbing does 2 points worth of damage and shooting does 5 points.
.It
@@ -246,8 +239,7 @@ The number of squares is equal to the number of charges used.
.It
One small mine and one large mine is placed in the maze for every new player.
A mine has a 2% probability of tripping when you walk forward on to it;
50% when going sideways;
95% when backing up.
50% when going sideways; 95% when backing up.
Tripping a mine costs you 5 points or 10 points respectively.
Defusing a mine is worth 1 charge or 9 charges respectively.
.It
@@ -280,17 +272,16 @@ Slime goes around walls, not through them.
Walls regenerate, reappearing in the order they were destroyed.
One percent of the regenerated walls will be diagonal walls or doors.
When a wall is generated directly beneath a player, he is thrown in
a random direction for a random period of time. When he lands, he
sustains damage (up to 20 percent of the amount of damage already
sustained); i.e.,
the less damage he had, the more nimble he is and
therefore less likely to hurt himself on landing.
a random direction for a random period of time.
When he lands, he sustains damage (up to 20 percent of the amount of
damage already sustained); i.e., the less damage he had, the more nimble
he is and therefore less likely to hurt himself on landing.
.\"MP
.\"There is a volcano close to the center of the maze which goes off
.\"close to every 30 deaths.
.It
Every 30 deaths or so, a
.Dq ?
.Dq \&?
will appear.
It is a wandering bomb which will explode when it hits someone, or
when it is slimed.
@@ -306,10 +297,8 @@ will ask you what name you want to play under.
If you wish to set other options than just your name,
you can enumerate the options as follows:
.Dl setenv HUNT "name=Sneaky,team=1,cloak,mapkey=zoFfGg1f2g3F4G"
sets the player name to Sneaky,
sets the team to one,
sets the enter game attribute to cloaked,
and the maps
sets the player name to Sneaky, sets the team to one,
sets the enter game attribute to cloaked, and the maps
.Ic z
to
.Ic o , F
@@ -333,8 +322,8 @@ option must be last.
Other options are:
.Ar scan , fly , nobeep , port=string , host=string ,
and
.Ar message=string
\(em which correspond to the command line options.
.Ar message=string ,
which correspond to the command line options.
String options cannot contain commas since commas
are used to separate options.
.It
@@ -396,7 +385,6 @@ We thank Don Kneller,
John Thomason, Eric Pettersen, Mark Day,
and Scott Weiner for providing
endless hours of play-testing to improve the character of the game.
We hope their significant others will forgive them;
we certainly don't.
We hope their significant others will forgive them; we certainly don't.
.Sh BUGS
To keep up the pace, not everything is as realistic as possible.

View File

@@ -1,4 +1,4 @@
/* $NetBSD: hunt.c,v 1.12 2001/02/05 00:40:45 christos Exp $ */
/* $NetBSD: hunt.c,v 1.16 2002/12/06 01:50:56 thorpej Exp $ */
/*
* Hunt
* Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold
@@ -7,12 +7,13 @@
#include <sys/cdefs.h>
#ifndef lint
__RCSID("$NetBSD: hunt.c,v 1.12 2001/02/05 00:40:45 christos Exp $");
__RCSID("$NetBSD: hunt.c,v 1.16 2002/12/06 01:50:56 thorpej Exp $");
#endif /* not lint */
# include <sys/param.h>
# include <sys/stat.h>
# include <sys/time.h>
# include <sys/poll.h>
# include <ctype.h>
# include <err.h>
# include <errno.h>
@@ -48,10 +49,6 @@ static struct termios saved_tty;
# define put_str addstr
# endif
#if !defined(BSD_RELEASE) || BSD_RELEASE < 44
extern int _putchar();
#endif
#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 256
#endif
@@ -411,8 +408,7 @@ list_drivers()
static SOCKET *listv;
static unsigned int listmax;
unsigned int listc;
fd_set mask;
struct timeval wait;
struct pollfd set[1];
if (initial) { /* do one time initialization */
# ifndef BROADCAST
@@ -465,13 +461,7 @@ list_drivers()
# ifdef BROADCAST
if (initial)
brdc = broadcast_vec(test_socket, (struct sockaddr **) &brdv);
if (brdc <= 0) {
initial = FALSE;
test.sin_addr = local_address;
goto test_one_host;
}
brdc = broadcast_vec(test_socket, (void *) &brdv);
# ifdef SO_BROADCAST
/* Sun's will broadcast even though this option can't be set */
@@ -495,6 +485,13 @@ list_drivers()
/* NOTREACHED */
}
}
test.sin_addr = local_address;
if (sendto(test_socket, (char *) &msg, sizeof msg, 0,
(struct sockaddr *) &test, DAEMON_SIZE) < 0) {
warn("sendto");
leave(1, "sendto");
/* NOTREACHED */
}
# else /* !BROADCAST */
/* loop thru all hosts on local net and send msg to them. */
msg = htons(C_TESTMSG());
@@ -512,9 +509,9 @@ list_drivers()
get_response:
namelen = DAEMON_SIZE;
errno = 0;
set[0].fd = test_socket;
set[0].events = POLLIN;
for (;;) {
wait.tv_sec = 1;
wait.tv_usec = 0;
if (listc + 1 >= listmax) {
listmax += 20;
listv = (SOCKET *) realloc((char *) listv,
@@ -523,9 +520,7 @@ get_response:
leave(1, "Out of memory!");
}
FD_ZERO(&mask);
FD_SET(test_socket, &mask);
if (select(test_socket + 1, &mask, NULL, NULL, &wait) == 1 &&
if (poll(set, 1, 1000) == 1 &&
recvfrom(test_socket, (char *) &port_num, sizeof(port_num),
0, (struct sockaddr *) &listv[listc], &namelen) > 0) {
/*
@@ -543,8 +538,8 @@ get_response:
}
if (errno != 0 && errno != EINTR) {
warn("select/recvfrom");
leave(1, "select/recvfrom");
warn("poll/recvfrom");
leave(1, "poll/recvfrom");
/* NOTREACHED */
}

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.5 1998/08/30 09:19:39 veego Exp $ */
/* $NetBSD: main.c,v 1.10 2001/12/06 12:15:37 blymn Exp $ */
/*
* Phantasia 3.3.2 -- Interterminal fantasy game
@@ -288,6 +288,8 @@ initialstate()
if ((Playersfp = fopen(_PATH_PEOPLE, "r+")) == NULL)
error(_PATH_PEOPLE);
/* NOTREACHED */
if (fileno(Playersfp) < 3)
exit(1);
if ((Monstfp = fopen(_PATH_MONST, "r+")) == NULL)
error(_PATH_MONST);
@@ -384,7 +386,7 @@ rollnewplayer()
do {
mvaddstr(20, 0, "Give your character a password [up to 8 characters] ? ");
getstring(Player.p_password, SZ_PASSWORD);
mvaddstr(21, 0, "One more time to verify ? ");
mvaddstr(21, 0, "Enter again to verify: ");
getstring(Databuf, SZ_PASSWORD);
}
while (strcmp(Player.p_password, Databuf) != 0);
@@ -627,7 +629,7 @@ titlelist()
fclose(fp);
}
/* search for king */
fseek(Playersfp, 0L, 0);
fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_KING &&
Other.p_status != S_NOTUSED)
@@ -643,7 +645,7 @@ titlelist()
mvaddstr(4, 24, "There is no ruler at this time.");
/* search for valar */
fseek(Playersfp, 0L, 0);
fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_VALAR && Other.p_status != S_NOTUSED)
/* found the valar */
@@ -653,7 +655,7 @@ titlelist()
break;
}
/* search for council of the wise */
fseek(Playersfp, 0L, 0);
fseek(Playersfp, 0L, SEEK_SET);
Lines = 10;
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_COUNCIL && Other.p_status != S_NOTUSED)
@@ -672,7 +674,7 @@ titlelist()
hiexp = 0.0;
nxtlvl = hilvl = 0;
fseek(Playersfp, 0L, 0);
fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_experience > hiexp && Other.p_specialtype <= SC_KING && Other.p_status != S_NOTUSED)
/* highest found so far */
@@ -874,7 +876,7 @@ genchar(type)
int type;
{
int subscript; /* used for subscripting into Stattable */
struct charstats *statptr; /* for pointing into Stattable */
const struct charstats *statptr; /* for pointing into Stattable */
subscript = type - '1';
@@ -983,7 +985,7 @@ playinit()
initscr(); /* turn on curses */
noecho(); /* do not echo input */
crmode(); /* do not process erase, kill */
cbreak(); /* do not process erase, kill */
#ifdef NCURSES_VERSION /* Ncurses needs some terminal mode fiddling */
tcgetattr(0, &tty);
tty.c_iflag |= ICRNL;
@@ -1001,13 +1003,17 @@ cleanup(doexit)
if (Windows) {
move(LINES - 2, 0);
refresh();
nocrmode();
nocbreak();
endwin();
}
fclose(Playersfp);
fclose(Monstfp);
fclose(Messagefp);
fclose(Energyvoidfp);
if (Playersfp)
fclose(Playersfp);
if (Monstfp)
fclose(Monstfp);
if (Messagefp)
fclose(Messagefp);
if (Energyvoidfp)
fclose(Energyvoidfp);
if (doexit)
exit(0);

View File

@@ -1,16 +1,16 @@
/* $NetBSD: misc.c,v 1.4 1998/08/30 09:19:39 veego Exp $ */
/* $NetBSD: misc.c,v 1.8 2003/01/20 05:29:55 simonb Exp $ */
/*
* misc.c Phantasia miscellaneous support routines
*/
#include "include.h"
#include <string.h>
void
movelevel()
{
struct charstats *statptr; /* for pointing into Stattable */
const struct charstats *statptr; /* for pointing into Stattable */
double new; /* new level */
double inc; /* increment between new and old levels */
@@ -60,15 +60,15 @@ movelevel()
death("Old age");
}
char *
const char *
descrlocation(playerp, shortflag)
struct player *playerp;
bool shortflag;
{
double circle; /* corresponding circle for coordinates */
int quadrant; /* quandrant of grid */
char *label; /* pointer to place name */
static char *nametable[4][4] = /* names of places */
const char *label; /* pointer to place name */
static const char *const nametable[4][4] = /* names of places */
{
{"Anorien", "Ithilien", "Rohan", "Lorien"},
{"Gondor", "Mordor", "Dunland", "Rovanion"},
@@ -412,7 +412,7 @@ displaystats()
void
allstatslist()
{
static char *flags[] = /* to print value of some bools */
static const char *const flags[] = /* to print value of some bools */
{
"False",
" True"
@@ -426,7 +426,7 @@ allstatslist()
mvprintw(13, 0, "Sin : %9.5f", Player.p_sin);
mvprintw(14, 0, "Poison : %9.5f", Player.p_poison);
mvprintw(15, 0, "Gems : %9.0f", Player.p_gems);
mvprintw(16, 0, "Age : %9d", Player.p_age);
mvprintw(16, 0, "Age : %9ld", Player.p_age);
mvprintw(10, 40, "Holy Water: %9d", Player.p_holywater);
mvprintw(11, 40, "Amulets : %9d", Player.p_amulets);
mvprintw(12, 40, "Charms : %9d", Player.p_charms);
@@ -442,13 +442,13 @@ allstatslist()
flags[(int)Player.p_palantir]);
}
char *
const char *
descrtype(playerp, shortflag)
struct player *playerp;
bool shortflag;
{
int type; /* for caluculating result subscript */
static char *results[] =/* description table */
static const char *const results[] =/* description table */
{
" Magic User", " MU",
" Fighter", " F ",
@@ -508,12 +508,12 @@ descrtype(playerp, shortflag)
long
findname(name, playerp)
char *name;
const char *name;
struct player *playerp;
{
long loc = 0; /* location in the file */
fseek(Playersfp, 0L, 0);
fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) {
if (strcmp(playerp->p_name, name) == 0) {
if (playerp->p_status != S_NOTUSED || Wizard)
@@ -531,7 +531,7 @@ allocrecord()
{
long loc = 0L; /* location in file */
fseek(Playersfp, 0L, 0);
fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) {
if (Other.p_status == S_NOTUSED)
/* found an empty record */
@@ -576,11 +576,11 @@ leavegame()
void
death(how)
char *how;
const char *how;
{
FILE *fp; /* for updating various files */
int ch; /* input */
static char *deathmesg[] =
static const char *const deathmesg[] =
/* add more messages here, if desired */
{
"You have been wounded beyond repair. ",
@@ -638,10 +638,10 @@ death(how)
{
mvaddstr(4, 0,
"Your ring has taken control of you and turned you into a monster!\n");
fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, 0);
fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, SEEK_SET);
fread((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp);
strcpy(Curmonster.m_name, Player.p_name);
fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, 0);
fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, SEEK_SET);
fwrite((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp);
fflush(Monstfp);
}
@@ -684,7 +684,7 @@ writerecord(playerp, place)
struct player *playerp;
long place;
{
fseek(Playersfp, place, 0);
fseek(Playersfp, place, SEEK_SET);
fwrite((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp);
fflush(Playersfp);
}
@@ -768,7 +768,7 @@ readrecord(playerp, loc)
struct player *playerp;
long loc;
{
fseek(Playersfp, loc, 0);
fseek(Playersfp, loc, SEEK_SET);
fread((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp);
}
@@ -790,7 +790,7 @@ adjuststats()
/* calculate effective quickness */
dtemp = ((Player.p_gold + Player.p_gems / 2.0) - 1000.0) / Statptr->c_goldtote
- Player.p_level;;
- Player.p_level;
dtemp = MAX(0.0, dtemp);/* gold slows player down */
Player.p_speed = Player.p_quickness + Player.p_quksilver - dtemp;
@@ -928,14 +928,14 @@ readmessage()
{
move(3, 0);
clrtoeol();
fseek(Messagefp, 0L, 0);
fseek(Messagefp, 0L, SEEK_SET);
if (fgets(Databuf, SZ_DATABUF, Messagefp) != NULL)
addstr(Databuf);
}
void
error(whichfile)
char *whichfile;
const char *whichfile;
{
int (*funcp) __P((const char *,...));
@@ -945,7 +945,7 @@ error(whichfile)
} else
funcp = printf;
(*funcp) ("An unrecoverable error has occurred reading %s. (errno = %d)\n", whichfile, errno);
(*funcp) ("An unrecoverable error has occurred reading %s. (%s)\n", whichfile, strerror(errno));
(*funcp) ("Please run 'setup' to determine the problem.\n");
cleanup(TRUE);
/* NOTREACHED */
@@ -973,7 +973,7 @@ ill_sig(whichsig)
/* NOTREACHED */
}
char *
const char *
descrstatus(playerp)
struct player *playerp;
{
@@ -1064,7 +1064,7 @@ collecttaxes(gold, gems)
dtemp = 0.0;
fread((char *) &dtemp, sizeof(double), 1, fp);
dtemp += floor(taxes);
fseek(fp, 0L, 0);
fseek(fp, 0L, SEEK_SET);
fwrite((char *) &dtemp, sizeof(double), 1, fp);
fclose(fp);
}

View File

@@ -27,13 +27,14 @@ Luxembourg:Luxembourg
Malta:Valletta
Moldova:Chisinau|Kishinev
Monaco:Monaco
Netherlands|Holland:The Hague|'sGravenhage|den Haag|Amsterdam
Netherlands|Holland:Amsterdam
Norway:Oslo
Poland:Wars[aw|zawa]
Portugal:Lisbo[n|a]
R[u|o]mania:Bucharest|Bucuresti
Russia:Mos[cow|kva]
San Marino:San Marino
Serbia and Montenegro:Belgrade|Beograd
Slovakia|Slovak Republic:Bratislava
Slovenia:Ljubljana
Spain:Madrid
@@ -41,4 +42,3 @@ Sweden:Stockholm
Switzerland:Bern{e}
Turkey:Ankara
Ukraine:Kiev|Kyiv
Yugoslavia:Belgrade|Beograd

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.17 2001/02/05 01:02:45 christos Exp $ */
/* $NetBSD: main.c,v 1.18 2001/12/06 12:17:57 blymn Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
#if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: main.c,v 1.17 2001/02/05 01:02:45 christos Exp $");
__RCSID("$NetBSD: main.c,v 1.18 2001/12/06 12:17:57 blymn Exp $");
#endif
#endif /* not lint */
@@ -152,7 +152,7 @@ main(ac, av)
initscr();
signal(SIGINT, quit);
crmode();
cbreak();
noecho();
nonl();
if (LINES != Y_SIZE || COLS != X_SIZE) {

View File

@@ -1,4 +1,4 @@
/* $NetBSD: snake.c,v 1.16 2000/05/08 07:56:05 mycroft Exp $ */
/* $NetBSD: snake.c,v 1.17 2001/08/31 07:17:02 jsm Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
#if 0
static char sccsid[] = "@(#)snake.c 8.2 (Berkeley) 1/7/94";
#else
__RCSID("$NetBSD: snake.c,v 1.16 2000/05/08 07:56:05 mycroft Exp $");
__RCSID("$NetBSD: snake.c,v 1.17 2001/08/31 07:17:02 jsm Exp $");
#endif
#endif /* not lint */

View File

@@ -1,4 +1,4 @@
/* $NetBSD: scores.c,v 1.10 2000/01/21 02:10:56 jsm Exp $ */
/* $NetBSD: scores.c,v 1.11 2002/06/02 22:17:38 wiz Exp $ */
/*-
* Copyright (c) 1992, 1993
@@ -153,8 +153,8 @@ void
savescore(level)
int level;
{
register struct highscore *sp;
register int i;
struct highscore *sp;
int i;
int change;
FILE *sf;
const char *me;
@@ -219,9 +219,9 @@ savescore(level)
static char *
thisuser()
{
register const char *p;
register struct passwd *pw;
register size_t l;
const char *p;
struct passwd *pw;
size_t l;
static char u[sizeof(scores[0].hs_name)];
if (u[0])
@@ -252,8 +252,8 @@ static int
cmpscores(x, y)
const void *x, *y;
{
register const struct highscore *a, *b;
register long l;
const struct highscore *a, *b;
long l;
a = x;
b = y;
@@ -280,17 +280,17 @@ cmpscores(x, y)
*/
static int
checkscores(hs, num)
register struct highscore *hs;
struct highscore *hs;
int num;
{
register struct highscore *sp;
register int i, j, k, numnames;
struct highscore *sp;
int i, j, k, numnames;
int levelfound[NLEVELS];
struct peruser {
char *name;
int times;
} count[NUMSPOTS];
register struct peruser *pu;
struct peruser *pu;
/*
* Sort so that highest totals come first.
@@ -356,8 +356,8 @@ void
showscores(level)
int level;
{
register struct highscore *sp;
register int i, n, c;
struct highscore *sp;
int i, n, c;
const char *me;
int levelfound[NLEVELS];
@@ -408,11 +408,11 @@ showscores(level)
static void
printem(level, offset, hs, n, me)
int level, offset;
register struct highscore *hs;
register int n;
struct highscore *hs;
int n;
const char *me;
{
register struct highscore *sp;
struct highscore *sp;
int nrows, row, col, item, i, highlight;
char buf[100];
#define TITLE "Rank Score Name (points/level)"

View File

@@ -1,4 +1,4 @@
/* $NetBSD: screen.c,v 1.15 2000/05/24 14:43:00 blymn Exp $ */
/* $NetBSD: screen.c,v 1.16 2001/11/02 18:27:00 christos Exp $ */
/* For Linux: still using old termcap interface from version 1.13. */
/*-
@@ -182,13 +182,13 @@ scr_init()
stop("cannot find your termcap");
fill = combuf;
{
register struct tcsinfo *p;
struct tcsinfo *p;
for (p = tcstrings; p->tcaddr; p++)
*p->tcaddr = tgetstr(p->tcname, &fill);
}
{
register struct tcninfo *p;
struct tcninfo *p;
for (p = tcflags; p->tcaddr; p++)
*p->tcaddr = tgetflag(p->tcname);
@@ -292,8 +292,8 @@ scr_set()
newtt = oldtt;
newtt.c_lflag &= ~(ICANON|ECHO);
newtt.c_oflag &= ~OXTABS;
newtt.c_cc[VMIN] = 1; /* don't lag behind 3 keystrokes on sun */
newtt.c_cc[VTIME] = 0; /* systems -- JEH */
newtt.c_cc[VMIN] = 1;
newtt.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSADRAIN, &newtt) < 0)
stop("tcsetattr() fails");
ospeed = cfgetospeed(&newtt);
@@ -378,9 +378,9 @@ typedef cell regcell;
void
scr_update()
{
register cell *bp, *sp;
register regcell so, cur_so = 0;
register int i, ccol, j;
cell *bp, *sp;
regcell so, cur_so = 0;
int i, ccol, j;
sigset_t sigset, osigset;
static const struct shape *lastshape;
@@ -490,12 +490,12 @@ scr_update()
*/
void
scr_msg(s, set)
register char *s;
char *s;
int set;
{
if (set || CEstr == NULL) {
register int l = strlen(s);
int l = strlen(s);
moveto(Rows - 2, ((Cols - l) >> 1) - 1);
if (set)

View File

@@ -1,4 +1,4 @@
/* $NetBSD: tetris.c,v 1.14 2000/01/21 02:10:57 jsm Exp $ */
/* $NetBSD: tetris.c,v 1.15 2002/06/02 22:17:38 wiz Exp $ */
/*-
* Copyright (c) 1992, 1993
@@ -92,8 +92,8 @@ static void setup_board __P((void));
static void
setup_board()
{
register int i;
register cell *p;
int i;
cell *p;
p = board;
for (i = B_SIZE; i; i--)
@@ -106,8 +106,8 @@ setup_board()
static void
elide()
{
register int i, j, base;
register cell *p;
int i, j, base;
cell *p;
for (i = A_FIRST; i < A_LAST; i++) {
base = i * B_COLS + 1;
@@ -133,9 +133,9 @@ main(argc, argv)
int argc;
char *argv[];
{
register int pos, c;
register const char *keys;
register int level = 2;
int pos, c;
const char *keys;
int level = 2;
char key_write[6][10];
int ch, i, j;
int fd;

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: trek.6,v 1.8 2001/04/02 22:42:39 wiz Exp $
.\" $NetBSD: trek.6,v 1.10 2002/09/26 18:32:05 wiz Exp $
.\"
.\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -40,14 +40,15 @@
.Nm trek
.Nd trekkie game
.Sh SYNOPSIS
.Nm @gamesdir@/trek
.Nm
.Oo
.Op Fl a
.Ar file
.Oc
.Sh DESCRIPTION
.Nm
is a game of space glory and war. Below is a summary of commands.
is a game of space glory and war.
Below is a summary of commands.
For complete documentation, see
.Em Trek
by Eric Allman.
@@ -79,9 +80,9 @@ You should normally start out with a novice and work up.
In general, throughout the game, if you forget what is appropriate
the game will tell you what it expects if you just type in a question mark.
.Sh AUTHOR
Eric Allman
.An Eric Allman
.Sh SEE ALSO
.Pa /usr/share/doc/bsdgames/trek.me.gz
.Pa /usr/share/doc/usd/31.trek
.Sh COMMAND SUMMARY
.Bl -item -compact
.It

View File

@@ -1,5 +1,5 @@
#!/bin/sh -
# $NetBSD: wargames.sh,v 1.3 1999/11/16 17:27:14 abs Exp $
# $NetBSD: wargames.sh,v 1.4 2001/09/19 04:54:06 lukem Exp $
#
# Copyright (c) 1985, 1993
# The Regents of the University of California. All rights reserved.
@@ -43,7 +43,10 @@ if [ -f /usr/games/$x ] ; then
tput clear
exec /usr/games/$x
else
# Original quote "Strange game, the only winning move is not to play."
echo "Strange, the only winning move is not to play."
exec cat <<QUOTE
A strange game.
The only winning move is
not to play.
QUOTE
fi
exit 0

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: wargames.6,v 1.1 2000/01/23 21:04:56 jsm Exp $
.\" $NetBSD: wargames.6,v 1.4 2002/09/26 18:32:05 wiz Exp $
.\"
.\" Copyright (c) 1998 Joey Hess
.\" All rights reserved.
@@ -39,11 +39,11 @@
-- computer,
.Nm wargames
.Pp
Just like in the movie, the computer will happily play a
game with you. The likelihood of Global Thermonuclear Warfare
resulting is much smaller....
Just like in the movie, the computer will happily play a game with you.
The likelihood of Global Thermonuclear Warfare resulting is much smaller....
.Sh SEE ALSO
.Sy Wargames ,
the movie (an MGM production, PG 13, directed by John Badham, 1983).
.Sh AUTHOR
This manual page was written by Joey Hess <joeyh@kitenet.net>.
This manual page was written by Joey Hess
.Aq joeyh@kitenet.net .

View File

@@ -1,10 +1,14 @@
$NetBSD: acronyms,v 1.89 2001/08/11 11:57:35 wennmach Exp $
$NetBSD: acronyms,v 1.113 2003/02/05 20:11:04 mason Exp $
AFAICR as far as I can recall
AFAICT as far as I can tell
AFAIK as far as I know
AFAIR as far as I recall
AFAIU as far as I understand
AFD away from desktop
AFK away from keyboard
AFW away from window
AIU as I understand
AIUI as I understand it
AKA also known as
ASAP as soon as possible
@@ -20,34 +24,43 @@ BIALW back in a little while
BIAS back in a second
BIAW back in a while
BOFH bastard operator from hell
BOGAHICA bend over, grab ankles, here it comes again
BOHICA bend over here it comes again
BRB [I'll] be right back
BTDT been there, done that
BTTH butt to the head
BTTH boot to the head
BTW by the way
CMIIW correct me if I'm wrong
CNP continued [in my] next post
COB close of business [day]
CYA see you around
DNDK don't know, don't care
DKDC don't know, don't care
DSTM don't shoot the messenger
DTRT do the right thing
DTWT do the wrong thing
DWIM do what I mean
EG evil grin
EMSG email message
EOB end of business [day]
EOL end of life
ETLA extended three letter acronym
EWAG experienced wild-ass guess
FAQ frequently asked question
FIIK fuck[ed] if I know
FIIR fuck[ed] if I remember
FM fucking magic
FOAD fall over and die
FSDO for some definition of
FSVO for some value of
FTFM fuck the fuckin' manual!
FUBAR fucked up beyond all recognition
FUD fear, uncertainty and doubt
FWIW for what it's worth
FYI for your information
G grin
GIGO garbage in, garbage out
GMTA great minds think alike
GTFO get the fuck out
HAND have a nice day
HHIS hanging head in shame
HTH hope this helps
@@ -56,15 +69,18 @@ IHAFC I haven't a fucking clue
IHNFC I have no fucking clue
IIANM if I am not mistaken
IIRC if I recall correctly
IMAO in my arrogant opinion
IMCO in my considered opinion
IMHO in my humble opinion
IMNSHO in my not so humble opinion
IMO in my opinion
IOW in other words
IRL in real life
ISAGN I see a great need
ISTM it seems to me
ISTR I seem to recall
ITYM I think you mean
IYSS If you say so
JIC just in case
JK just kidding
JMO just my opinion
@@ -75,9 +91,11 @@ KNF kernel normal form
L8R later
LART luser attitude readjustment tool (ie, hammer)
LJBF let's just be friends
LMAO laughing my ass off
LMSO laughing my socks off
LOL laughing out loud
LTNS long time no see
MMU memory management unit
MOTAS member of the appropriate sex
MOTOS member of the opposite sex
MOTSS member of the same sex
@@ -94,17 +112,25 @@ NRN no reply necessary
OIC oh, I see
OTL out to lunch
OTOH on the other hand
OTT over the top
OTTOMH off the top of my head
PFO please fuck off
PFY pimply faced youth
PITA pain in the ass
PKSP pound keys and spew profanity
PNG persona non grata
PNP plug and pray
POC point of contact
POLA principle of least astonishment
POS piece of shit
PPL pretty please
PTV parental tunnel vision
QED quod erat demonstrandum
RFC request for comments
RL real life
RLC rod length check
ROFL rolling on floor laughing
ROFLMAO rolling on floor laughing my ass off
ROTFL rolling on the floor laughing
RP responsible person
RSN real soon now
@@ -116,6 +142,7 @@ SCNR sorry, could not resist
SEP someone else's problem
SFA sweet fuck all
SHID slaps head in disgust
SIMCA sitting in my chair amused
SMLSFB so many losers, so few bullets
SMOP simple matter of programming
SNAFU situation normal, all fucked up
@@ -123,17 +150,23 @@ SNERT snot-nosed egotistical rude teenager
SO significant other
SOB son of [a] bitch
SOL shit out [of] luck
SOP standard operating procedure
SSIA subject says it all
SUS stupid user syndrome
SWAG silly, wild-assed guess
SWAHBI silly, wild-assed hare-brained idea
SWMBO she who must be obeyed
TANSTAAFL there ain't no such thing as a free lunch
TBD to be {decided,determined,done}
TIA thanks in advance
TLA three letter acronym
TLB translation lookaside buffer
TMA too many abbreviations
TMI too much information
TOEFL test of english as a foreign language
TTFN ta ta for now
TTYL talk to you later
TWIAVBP the world is a very big place
TYVM thank you very much
UTSL use the source, Luke
VEG very evil grin
@@ -141,8 +174,10 @@ WAG wild-ass guess
WIBNI wouldn't it be nice if
WOFTAM waste of fucking time and money
WOMBAT waste of money, brain, and time
WRT with respect to
WTF {what,where,who,why} the fuck
WTH {what,where,who,why} the hell
WYSIWYG what you see is what you get
YKWIM you know what I mean
YMA yo momma's ass
YMMV your mileage may vary