home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-03-03 | 54.3 KB | 1,595 lines |
- Subject: v17i038: napoleon - text adventure game, Part01/04
- Newsgroups: comp.sources.games
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: pc123@cus.cam.ac.uk (Pete Chown)
- Posting-number: Volume 17, Issue 38
- Archive-name: napoleon/Part01
- Environment: Unix, ASNI-C
-
- [From the author...]
- [[Napoleon is a text adventure game, in the long tradition of such
- games. It is reasonably modern, though, in that it recognises
- sentences of reasonable complexity. It uses the GNU history library
- to provide an editable command history.]]
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 4)."
- # Contents: README MANIFEST custom.c lang.y napoleon.0
- # Wrapped by billr@saab on Thu Mar 4 09:46:52 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(4561 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- XWelcome to Napoleon!
- X
- XCompiling the game shouldn't be too difficult. Here is how to set it
- Xup for your system:
- X
- X1. Configuring the Makefile:
- X=============================
- X
- XThe SYSTEM line in the Makefile may well need changing for your
- Xsystem. If you are not on Unix, it should contain simply -DPURE_ANSI.
- XOtherwise it should contain -DUNIX along with the following:
- X
- X-DHAS_UNISTD to tell it that it should include the header file
- Xunistd.h (not all systems have this file).
- X
- X-DHAS_STDLIB if your machine has stdlib.h.
- X
- X-DHAS_XMALLOC to tell it that your system has xmalloc() built into a
- Xlibrary, and it should not be redefined by the program. Most systems
- Xdo not have this, but there are a few that do.
- X
- X-DDAVID_PILLINGS_BISON must be defined if you are compiling on the
- XAcorn Archimedes using David Pilling's port of Bison. This port is a
- Xlittle strange, as there is no alloca() function available, and the
- Xcompilation must then proceed differently.
- X
- XYou will need bison or yacc - note that the line in the makefile
- Xgiving YACC=... must be set to
- X
- XYACC=bison -dy
- X
- Xor
- X
- XYACC=yacc -d
- X
- XNote the difference in arguments depending on which program you decide
- Xto use.
- X
- XIf you haven't got gcc, you will have to change the C compiler options
- Xto suit your compiler.
- X
- X2. Installing the readline library:
- X====================================
- X
- XIf you are building on Unix you must also have access to the GNU
- Xreadline library - your commands are stored in a history and can be
- Xrecalled in much the same way as under Bash. If you build with
- XPURE_ANSI defined, you will not need this, but if you build for Unix
- Xyou will. It should be installed the same directory as the Napoleon
- Xsource, so that when you are in that directory:
- X
- Xreadline/libreadline.a
- X
- Xis the built library. The current version of the readline library is
- Xreadline-1.1.tar.Z, available for FTP from the usual places that keep
- XGNU programs. Be careful with this tar file, because it has got
- Xmessed up somehow so that if you untar it naively it will splat loads
- Xof files into the current directory (most GNU tar files untar
- Xeverything into a subdirectory).
- X
- XYou should therefore create the directory
- X
- Xreadline
- X
- Xand untar readline-1.1.tar.Z into it. Then build the readline library
- Xas explained by its own documentation (usually just a case of typing
- X"make").
- X
- X3. Building:
- X=============
- X
- XNow type "make" in the Napoleon directory. It should be as easy as
- Xthat.
- X
- X4. Possible problems:
- X======================
- X
- XIf you don't have an ANSI conforming compiler you will find it
- Xvirtually impossible to build the game. It doesn't normally matter
- Xwhether you have ANSI header files - but the exception is stdarg.h.
- XIf you only have the old style varargs.h you will probably experience
- Xdifficulties.
- X
- XA lot of C compilers don't like having the GPL stored in one
- Xexceedingly long string. This is a problem - I want to keep all the
- Xdata in with the code, it makes it much easier to do things with the
- Xexecutable once you have it, and I can't think of any other way of
- Xincorporating the GPL than to put it in as a string.
- X
- XIf you are using a pure System V Unix, you may have problems with the
- Xtermios library. I can't really advise, since I don't have access to
- Xsuch a machine, but if you get it working I would be interested in
- Xhaving any patches that you needed to apply.
- X
- XSun OS seems to have a big problem. It is not supplied with a
- Xstdarg.h, so you have to use gcc rather than its built in cc. On the
- Xother hand, it doesn't have a difftime() function in its library. To
- Xget round this, I have included the GNU library's difftime.c in the
- Xdistribution; to use it, simply add difftime.o to the list of object
- Xfiles in the Makefile. Note that it might not work - ANSI doesn't
- Xspecify the format that times are stored in. I have not come across a
- Xmachine where it doesn't, however.
- X
- XSome machines don't have the tmac.andoc file used to compile the
- Xmanpage. If you are in this position, simply use napoleon.0, which is
- Xpre-compiled.
- X
- XSome machines have versions of yacc that produce output that conflicts
- Xwith the compiler. This is very boring, and there isn't much I can do
- Xabout it... just edit the output from yacc so it works. Or use bison
- Xif you have it.
- X
- X5. Other things:
- X=================
- X
- XNapoleon was written by Pete Chown; I can be contacted as:
- X
- Xpc123@phx.cam.ac.uk
- X...!uunet!uknet!camphx!pc123
- Xpc123@camphx.uucp
- X
- XI also have an account on the FSF machines:
- X
- Xpc@gnu.ai.mit.edu
- X
- XTry that if messages to the other addresses bounce.
- X
- XNapoleon is subject to the GNU General Public Licence.
- END_OF_FILE
- if test 4561 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- if test -f 'MANIFEST' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'MANIFEST'\"
- else
- echo shar: Extracting \"'MANIFEST'\" \(703 characters\)
- sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
- X File Name Archive # Description
- X-----------------------------------------------------------
- X MANIFEST 1 This shipping list
- X Makefile 2
- X README 1
- X adv.h 4
- X copyright 4
- X custom.c 1
- X describe.c 3
- X difftime.c 3
- X file.c 3
- X lang.y 1
- X lex.c 3
- X line.c 3
- X napoleon.0 1
- X napoleon.nr 3
- X noughts.c 3
- X objects.c 2
- X parse.c 3
- X quads.c 2
- X toplev.c 4
- END_OF_FILE
- if test 703 -ne `wc -c <'MANIFEST'`; then
- echo shar: \"'MANIFEST'\" unpacked with wrong size!
- fi
- # end of 'MANIFEST'
- fi
- if test -f 'custom.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'custom.c'\"
- else
- echo shar: Extracting \"'custom.c'\" \(25896 characters\)
- sed "s/^X//" >'custom.c' <<'END_OF_FILE'
- X/* Copyright (C) 1992 Pete Chown.
- X
- X Here is my latest adventure game, Napoleon (see the documentation
- X if you don't know why it's called that). Have fun... (don't cheat,
- X even though you've got the source :-) ).
- X
- X This game is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X The game is distributed in the hope that it will be useful, but
- X WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- X General Public License for more details.
- X
- X The GNU General Public License is often shipped with GNU software, and
- X is generally kept in a file called COPYING or LICENSE. If you do not
- X have a copy of the license, write to the Free Software Foundation,
- X 675 Mass Ave, Cambridge, MA 02139, USA. */
- X
- X#include "adv.h"
- X#include "lang.h"
- X
- X#define RESERVED_FOR_VERBOSITY_FLAG 0
- X#define RUSGREVE 1
- X#define PRENDERGAST 2
- X#define B_DOOR 3
- X#define S_DOOR 4
- X#define G_DOOR 5
- X#define GRANDMASTER 6
- X#define PRINCESS 7
- X#define MAGPIE 8
- X#define BUTLER 9
- X#define MOUSECOUNTER 10
- X#define ELEPHANTS 11
- X#define ELEPHANTFOLLOW 12
- X#define WAITCOUNT 13
- X#define WATERSPRITE 14
- X#define TENNIS 15
- X#define BIN 16
- X
- Xunsigned char flags [128];
- X
- Xstatic void remove_persons_objects(void)
- X{
- X while(objects [yaccplayer].inside != 0)
- X {
- X int obj = objects [yaccplayer].inside;
- X
- X detachfromchain(obj);
- X addtochain(obj,59,& objects [59].inside);
- X }
- X}
- X
- Xextern void twirl(void)
- X{
- X int i;
- X bool gotsomething = FALSE;
- X
- X if(all) addfirstdescendants(getroom(yaccplayer));
- X for(i = 0;i < listedobjects;i++)
- X {
- X if(objectlist [i] == 103) {
- X format("You twirl the chair round and round, but nothing happens.");
- X } else {
- X format("How ever could you turn that?");
- X }
- X }
- X listedobjects = 0;
- X if(all && ! gotsomething) format("There is nothing here that you can reall"
- X"y turn!");
- X}
- X
- Xextern void turn(void)
- X{
- X twirl();
- X}
- X
- Xextern int premove(int player,int dest)
- X{
- X switch(dest)
- X {
- X case 6: case 20: case 55: case 56: /* Leaving the rickety wooden rooms */
- X if(getroom(yaccplayer) < 6) {
- X format("\nYou are suspended for a moment in absolute darkness, then a "
- X"voice pipes up, 'Always keep tight hold of nurse, /For fear of finding somet"
- X"hing worse!'\n\nSuddenly you emerge into daylight:\n");
- X }
- X break;
- X case 15: /* poolside, going down */
- X if(flags [WATERSPRITE] < 2) {
- X format("You wisely decide not to go for a swim in the garden pond.\n");
- X return 0;
- X }
- X break;
- X case 18:
- X if(flags [GRANDMASTER] != 4) flags [GRANDMASTER] = 1;
- X break;
- X case 19:
- X if(flags [GRANDMASTER] == 4) format("You slip east while the Grandmaster"
- X" is still thinking over his recent failed match.");
- X if(flags [GRANDMASTER] == 3) {
- X format("The Grandmaster says, 'You won't get into there by buttering m"
- X"e up!'\n\nYou find that you are unable to go east. Looking round, you see t"
- X"he Grandmaster making a magic sign.");
- X return 0;
- X }
- X if(flags [GRANDMASTER] < 3) {
- X format("You find that you are unable to go east. Looking round, you s"
- X"ee the Grandmaster making a magic sign.");
- X return 0;
- X }
- X break;
- X case 17:
- X if(flags [GRANDMASTER] != 3) {
- X format("You find that you are unable to go south. Looking round, you "
- X"see the Grandmaster making a magic sign.");
- X return 0;
- X } else format("You slip south while the Grandmaster is basking in his vi"
- X"ctory.");
- X break;
- X case 37: /* Going up the tree */
- X if(flags [MAGPIE] == 0) {
- X format("As you start to climb the tree, the magpie flies full into you"
- X"r face, screeching angrily. You lose your footing and fall to the ground.");
- X return 0;
- X }
- X break;
- X case 45: /* Going through the bronze door */
- X if(flags [B_DOOR] == 0) {
- X format("But the door is closed and locked!\n");
- X return 0;
- X }
- X break;
- X case 46: /* Going through the silver door */
- X if(flags [S_DOOR] == 0) {
- X format("But the door is closed and locked!\n");
- X return 0;
- X }
- X break;
- X case 47: /* Going through the golden door */
- X if(flags [G_DOOR] == 0) {
- X format("But the door is closed and locked!\n");
- X return 0;
- X }
- X break;
- X case 51: /* Leaving the elephants */
- X if(getroom(player) == 52) {
- X if(flags [MOUSECOUNTER] != 0) {
- X format("You find that there is a step up, with a large overhang, which you "
- X"cannot negotiate while you are a mouse. Perhaps a real mouse could climb up"
- X", but you lack practice.\n");
- X return 0;
- X } else {
- X format("\nAs you leave one of the elephants starts following you.");
- X objects [160 /* elephant */].objtype.virtual = 0;
- X flags [ELEPHANTFOLLOW] = 1;
- X }
- X }
- X break;
- X case 99: /* One of the funny moves in the enchanted maze */
- X switch(getroom(player))
- X {
- X case 31:
- X dest = delay > 9 ? 29 : 32;
- X format("\nAs you move, you are startled by a number of green flashes!");
- X break;
- X case 32: dest = delay > 9 ? 33 : 27; break;
- X case 33: dest = delay > 9 ? 34 : 31; break;
- X case 34: dest = delay > 9 ? 29 : 35; break;
- X case 35: dest = delay > 9 ? 33 : 38; break;
- X default: fail();
- X }
- X break;
- X }
- X return dest;
- X}
- X
- Xextern void postmove(void)
- X{
- X switch(getroom(yaccplayer))
- X {
- X case 22: /* Rusgreve's room */
- X flags [RUSGREVE] |= 1;
- X break;
- X case 23: /* Prendergast's room */
- X flags [PRENDERGAST] |= 1;
- X break;
- X case 47: /* Princess' room */
- X flags [PRINCESS] |= 1;
- X break;
- X case 54: /* Lions' room */
- X if(flags [MOUSECOUNTER] == 0) {
- X format("As you enter the lions' den, they reveal that they are not onl"
- X"y ready for tummy tickles, and they gobble you up.\n");
- X dead = TRUE;
- X } else {
- X format("\nThe lions don't notice the little mouse scampering across th"
- X"e floor.");
- X }
- X break;
- X case 52: /* Elephants' room */
- X if(flags [MOUSECOUNTER] != 0) flags [ELEPHANTS] = 1; else {
- X if(flags [ELEPHANTS] == 1) {
- X format("\nAs you try to enter the elephants' room, one of them collides wit"
- X"h you, and tramples you underfoot.\n");
- X dead = TRUE;
- X }
- X }
- X break;
- X }
- X if(flags [ELEPHANTFOLLOW] == 1) {
- X detachfromchain(160 /* elephant */);
- X addtochain(160,getroom(yaccplayer),& objects [getroom(yaccplayer)].inside);
- X }
- X}
- X
- Xextern void postdescription(int player)
- X{
- X if(flags [GRANDMASTER] == 1) {
- X flags [GRANDMASTER] = 2;
- X format("The Grandmaster says, 'Will you do me the honour of joining me i"
- X"n a game of noughts and crosses, young adventurer?'\n");
- X }
- X
- X if(flags [RUSGREVE] == 1) {
- X format("Rusgreve says, 'I am not the leaker.'\n");
- X flags [RUSGREVE] = 2;
- X }
- X if(flags [RUSGREVE] == 3) {
- X format("Rusgreve says, 'Prendergast would say I was the leaker.'\n");
- X flags [RUSGREVE] = 4;
- X }
- X if(flags [RUSGREVE] == 5) {
- X format("Rusgreve says, 'Prendergast, I don't know how you put me up to t"
- X"his silly game, but I'm certainly not going on with it!'\n");
- X flags [RUSGREVE] = 6;
- X }
- X
- X if(flags [PRENDERGAST] == 1) {
- X format("Prendergast says, 'I am not the leaker.'\n");
- X flags [PRENDERGAST] = 2;
- X }
- X if(flags [PRENDERGAST] == 3) {
- X format("Prendergast says, 'Rusgreve would say I was the leaker.'\n");
- X flags [PRENDERGAST] = 4;
- X }
- X
- X if(flags [PRINCESS] == 1) {
- X flags [PRINCESS] = 2;
- X format("The Princess says, 'Excellent! I knew someone would come to res"
- X"cue me, it's part of being a princess really. Now, to make sure you are gen"
- X"uine, I will just ask you a little question: Who is it that has been leakin"
- X"g information from the Bureau?'\n");
- X }
- X
- X switch(getroom(player))
- X {
- X case 12: /* Tennis court */
- X if(flags [TENNIS] == 0) {
- X format("Suddenly two people enter the tennis courts. 'Ah, someone els"
- X"e. Let's have a game of quadruples,' exclaims one in a public school accent"
- X". The game begins...\n\n");
- X if(quadruples()) {
- X format("\n'Uuuh!' calls a linesman, which roughly translates to 'out'.\n'YO"
- X"U CANNOT BE SERIOUS!' yells one of the public schools, flinging down his rac"
- X"quet. However the public school pair are experienced at this, and manage to"
- X" leave the court with all their rackets (one broken) and the trophies, which"
- X" they grabbed before anyone could stop them.\n\nThe umpire then comes up to "
- X"you, and says, 'I'm most dreadfully sorry about this, but all the trophies s"
- X"eem to have gone. What can I give you?'\nHe casts his eyes around, and sees"
- X" something that looks like the Olympic torch. He gives it to you, 'I'm sorr"
- X"y but this is all that is left!'\n\nFinally he too leaves the court.\n");
- X detachfromchain(164);
- X addtochain(164,yaccplayer,& objects [yaccplayer].inside);
- X } else {
- X format("\n'Thanks for the game old boy,' says one of the other players, as "
- X"they walk off with the two trophies, for the game's two winners.\n");
- X }
- X flags [TENNIS] = 1;
- X }
- X break;
- X case 36: /* Climbable tree room */
- X if(flags [MAGPIE] == 0) format("In the tree, a magpie chirps noisily.\n");
- X break;
- X case 44: /* Bronze door room */
- X if(flags [B_DOOR] == 0) format("A heavy wooden door with a bronze lock b"
- X"locks progress to the south.\n");
- X break;
- X case 45: /* Silver door room */
- X if(flags [S_DOOR] == 0) format("A heavy wooden door with a silver lock b"
- X"locks progress to the south.\n");
- X break;
- X case 46: /* Golden door room */
- X if(flags [G_DOOR] == 0) format("A heavy wooden door with a golden lock b"
- X"locks progress to the south.\n");
- X break;
- X case 50: /* Bridge */
- X if(flags [ELEPHANTFOLLOW] == 1) {
- X format("The bridge holds up for a moment, and then collapses as a huge"
- X" elephant stamps onto it.\n");
- X dead = TRUE;
- X }
- X break;
- X case 52: /* Elephants' room */
- X if(flags [ELEPHANTS] == 1) format("The elephants are jumping around in a"
- X" violent frenzy.\n");
- X else format("The elephants watch you calmly.\n");
- X break;
- X }
- X}
- X
- Xextern bool dogreeting(int who)
- X{
- X switch(who)
- X {
- X case 104: /* The Grandmaster */
- X format("The Grandmaster says 'The compliments of the day to you, my youn"
- X"g friend.'");
- X return TRUE;
- X case 142: /* Rusgreve */
- X format("Rusgreve says, 'Good morning to you Sir.'");
- X return TRUE;
- X case 143: /* Prendergast */
- X format("Prendergast says, 'Mmmm. Morning.' and then busies himself with"
- X" what he was doing without appearing to notice you properly.");
- X return TRUE;
- X case 156: /* Princess */
- X format("The Princess says, 'Good morning.'");
- X }
- X
- X return FALSE;
- X}
- X
- Xextern bool dofarewell(int who)
- X{
- X return FALSE;
- X}
- X
- Xextern bool referred_to(int recipient)
- X{
- X if(recipient == 156 /* princess */)
- X {
- X if(subject == 140 /* butler */) {
- X format("The Princess says, 'Good. I'll allow you to rescue me.'\n\nPr"
- X"endergast's voice suddenly comes into your mind, 'Stand by. We're going to "
- X"get you out.'\n\nThe room suddenly swims about you, and you find yourself ba"
- X"ck in your office. The Princess isn't there, of course; she is waking up in"
- X" the room where she was asleep.\n\nCongratulations, you've completed Napoleo"
- X"n with a score of 99.5%% (as with all games of this type there is an impossi"
- X"ble puzzle that stops you getting a full score). Have a nice day, your prom"
- X"pt should be reappearing about now...\n\n");
- X finished = TRUE;
- X } else {
- X format("The Princess says, 'I don't think so.'");
- X }
- X
- X return TRUE;
- X }
- X
- X return FALSE;
- X}
- X
- Xextern void doyes(int who)
- X{
- X switch(who)
- X {
- X case 104: /* Grandmaster */
- X if(flags [GRANDMASTER] == 2) {
- X format("The Grandmaster says, 'Excellent! My friend, we shall begin a"
- X"t once. We will play best of three games. Now some have said that being \""
- X"X\" gives an advantage and they can then beat the best. I say let them play"
- X" against the best, and we shall see. So you may start in the first game.'");
- X switch(playnoughts()) {
- X case 0:
- X format("The Grandmaster looks a little bit surprised and irritated. He bow"
- X"s slightly, and says gruffly, 'Thank you for the game.'");
- X flags [GRANDMASTER] = 4;
- X break;
- X case 1:
- X format("The Grandmaster smiles and says, 'You are a promising young player."
- X" With a few more years practice you will be really quite good!'");
- X flags [GRANDMASTER] = 3;
- X break;
- X case 2:
- X format("The Grandmaster chuckles to himself, and says, 'I don't think you w"
- X"ere really playing very hard. Do you want to try again?'");
- X break;
- X }
- X } else format("The Grandmaster says, 'I didn't think I was offering a ga"
- X"me. I don't play with any riff-raff, you know!'");
- X break;
- X }
- X}
- X
- Xextern void dono(int who)
- X{
- X switch(who)
- X {
- X case 104: /* Grandmaster */
- X format("The Grandmaster says, 'I'm so sorry, I was looking forward to th"
- X"e game.'");
- X break;
- X }
- X}
- X
- Xextern void examineobject(int examiner,int this)
- X{
- X switch(examiner)
- X {
- X case 104: /* The Grandmaster */
- X format("The Grandmaster says, 'You are still young, and a pursuit of kno"
- X"wledge is a fine thing - but you cannot expect to acquire all the secrets of"
- X" the Universe in a single hour.'");
- X break;
- X case 125: /* The piano teacher */
- X format("Rather unsympathetically, the teacher says, 'If you put half as "
- X"much effort into the piano as you put into your wild daydreams you would be "
- X"playing in the orchestra by now.'");
- X break;
- X case 142: /* Rusgreve */
- X format("Rusgreve says, 'I don't know anything about that, sir.'");
- X break;
- X case 143: /* Prendergast */
- X format("Prendergast says, 'Intriguing. Hmm... no, no, I don't know.'");
- X break;
- X case 156: /* Princess */
- X format("The Princess says, 'You're supposed to be rescuing me, not invit"
- X"ing me to look at things you've collected up around this horrible place.'");
- X break;
- X }
- X}
- X
- Xextern void justput(int what,int destination,int *chain)
- X{
- X switch(destination)
- X {
- X case 108: /* Piano */
- X if(what == 123 /* Punch card */) {
- X destroy(123); /* Remove the punch card */
- X format("The piano starts playing itself - the resulting music is only "
- X"marred by a loud clunking sound as the card mechanism turns over.\n\nThe pia"
- X"no teacher says, 'So you did do your practice this week after all. In that "
- X"case, I can give you this - your parents asked me to give it to you when you"
- X" had achieved enough application not to do anything silly with it.'\n\nShe g"
- X"ives you a strange looking silver key.\n\n'And remember,' continues the teac"
- X"her, 'if you go looking for princesses firstly your piano playing will get n"
- X"o better, and secondly your quest is likely to be stopped by someone you kno"
- X"w very well.'\n");
- X detachfromchain(124);
- X addtochain(124,yaccplayer,& objects [yaccplayer].inside); /* Give you the key */
- X }
- X break;
- X case 161: case 162: /* Vending machine or its slot */
- X if(what == 145 /* 10p coin */) {
- X destroy(145);
- X detachfromchain(157 /* dictating machine */);
- X addtochain(157,yaccplayer,& objects [yaccplayer].inside);
- X format("The vending machine gives you a nice flashy new dictating mach"
- X"ine.\n");
- X } else {
- X format("You find that you can't get that into the slot.\n");
- X detachfromchain(what);
- X addtochain(what,yaccplayer,& objects [yaccplayer].inside);
- X }
- X break;
- X }
- X}
- X
- Xextern void play(int what)
- X{
- X switch(what)
- X {
- X case 108: /* Piano */
- X format("The piano makes a rather nasty donging sound, but nothing else h"
- X"appens.\n\nThe piano teacher says, 'What was that? Do you actually do the p"
- X"ractice I set you?'\n");
- X break;
- X default:
- X if(objects [what].objtype.alive) {
- X format("Rusgreve's voice suddenly intrudes on your mind: 'Oi! No hank"
- X"y panky, or we'll court martial you for breaching good order and military di"
- X"scipline!'\n\nYou wisely desist from whatever it was that you were thinking "
- X"of doing.\n");
- X } else {
- X format("You begin playing with %s. It takes you back to when you were"
- X" young.\n",quickname("the",what));
- X }
- X }
- X}
- X
- Xextern void playnandc(int who)
- X{
- X if(ispresent(who,yaccplayer)) {
- X if(objects [who].objtype.alive) {
- X if(who == 104 /* Grandmaster */) {
- X doyes(104);
- X } else {
- X format("I don't think %s will want to play.\n",objects [who].longname);
- X }
- X } else {
- X format("%s doesn't seem able to play, somehow.\n",quickname("The",who));
- X }
- X } else {
- X format("I can't see anyone like that here.");
- X }
- X}
- X
- Xextern bool wantsit(int destination,int what)
- X{
- X switch(destination)
- X {
- X case 143: /* Prendergast */
- X if(what == 144 /* coffee */) {
- X destroy(144);
- X format("Prendergast takes the coffee, and says distractedly, 'Mmm. Th"
- X"anks very much. Errm, here's 10p for the coffee machine.'");
- X detachfromchain(145);
- X addtochain(145,yaccplayer,& objects [yaccplayer].inside);
- X return TRUE;
- X }
- X break;
- X case 140: /* Butler */
- X if(what == 124 /* silver key */) {
- X detachfromchain(124);
- X addtochain(124,49,& objects [49].inside);
- X detachfromchain(159 /* potion */);
- X addtochain(159,yaccplayer,& objects [yaccplayer].inside);
- X format("The butler says, 'That's a very kind tip, Sir. Please have th"
- X"is little bottle as a thank you for your kindness. Being a butler never mak"
- X"es much to put on one side for retirement...'");
- X return TRUE;
- X }
- X }
- X
- X format("%s isn't wanted.",quickname("The",what));
- X
- X return FALSE;
- X}
- X
- Xextern void throw(int overwhat)
- X{
- X bool changingroom = getroom(yaccplayer) == 24 && overwhat == 24 /* balcony */,dontdrop = FALSE;
- X
- X if(getroom(yaccplayer) == 14 && flags [WATERSPRITE] == 1 &&
- X (overwhat == 163 /* sprite */ || overwhat == 0) && objectlist [0] == 164 /* torch */) {
- X format("The water sprite is hit by the torch, and a huge cloud of steam "
- X"is produced. When everything clears and you can see again, the torch and wa"
- X"ter sprite have both gone. The pond is now empty of water and a hole leads "
- X"down.\n");
- X destroy(163);
- X destroy(164);
- X dontdrop = TRUE;
- X flags [WATERSPRITE] = 2;
- X }
- X
- X if(changingroom) {
- X detachfromchain(yaccplayer);
- X addtochain(yaccplayer,55,& objects [55].inside);
- X }
- X
- X if(! dontdrop) drop();
- X
- X if(changingroom) {
- X detachfromchain(yaccplayer);
- X addtochain(yaccplayer,24,& objects [24].inside);
- X }
- X}
- X
- Xextern void jump(int whatover)
- X{
- X switch(getroom(yaccplayer))
- X {
- X case 24: /* Balcony */
- X if(whatover == 126 /* Balcony */ || whatover == 0) {
- X format("You panic horribly a moment before you would have jumped. The"
- X" shock causes you to partially awaken from your dream. But instead of findi"
- X"ng yourself in bed, you find that...\n");
- X detachfromchain(yaccplayer);
- X addtochain(yaccplayer,1,& objects [1].inside);
- X descr = TRUE;
- X /* Person's objects are taken away */
- X remove_persons_objects();
- X } else {
- X format("You jump around, and nearly go over the side in your excitemen"
- X"t!");
- X }
- X break;
- X case 50: /* Bridge */
- X if(whatover == 0) {
- X format("You dive over the side of the bridge, and into the cold water."
- X" The shock causes you to partially awaken from your dream. But instead of "
- X"finding yourself in bed, you find that...\n");
- X detachfromchain(yaccplayer);
- X addtochain(yaccplayer,1,& objects [1].inside);
- X descr = TRUE;
- X } else {
- X format("You jump around, and nearly go over the side in your excitemen"
- X"t!");
- X }
- X break;
- X case 37: /* Up the tree */
- X format("You jump out of the tree, and fall rather painfully onto the flo"
- X"or.");
- X detachfromchain(yaccplayer);
- X addtochain(yaccplayer,36,& objects [36].inside);
- X descr = TRUE;
- X break;
- X default:
- X format("You jump around for a bit, then you feel silly and stop.");
- X break;
- X }
- X}
- X
- Xextern void touch(int what)
- X{
- X if(what == 120 /* plate */) {
- X format("You get a small electric shock from the plate. Just enough to j"
- X"olt you some way towards waking up. For a moment the room swims about you, "
- X"then Prendergast's voice cuts into your mind, 'Ah, yes, let's see what of yo"
- X"ur kit we can salvage... oops... botheration, we can't get anything that was"
- X" in the lab now... let's see what's there...'");
- X detachfromchain(yaccplayer);
- X addtochain(yaccplayer,1,& objects [1].inside);
- X descr = TRUE;
- X /* Person's objects are taken away */
- X remove_persons_objects();
- X /* Objects are given to the person from the storeroom */
- X while(! objects [objects [17].inside].objtype.virtual)
- X {
- X int obj = objects [17].inside;
- X
- X detachfromchain(obj);
- X addtochain(obj,1,& objects [1].inside);
- X }
- X } else {
- X if(objects [what].objtype.alive) {
- X format("Rusgreve's voice suddenly intrudes on your mind: 'Oi! No hank"
- X"y panky, or we'll court martial you for breaching good order and military di"
- X"scipline!'\n\nYou wisely desist from whatever it was that you were thinking "
- X"of doing.\n");
- X } else {
- X format("You touch %s, but nothing happens.",quickname("the",what));
- X }
- X }
- X}
- X
- Xextern void unlock(int what,int whatwith)
- X{
- X if(what != 148 && what != 149 && what != 150) {
- X format("You can't unlock that!");
- X return;
- X }
- X if(whatwith != 124 && whatwith != 146 && whatwith != 147 && whatwith != 0) {
- X format("You won't unlock anything with that!");
- X return;
- X }
- X if(whatwith != 0) {
- X if((what == 148 && whatwith != 147) || (what == 149 && whatwith != 124)
- X || (what == 150 && whatwith != 146)) {
- X format("The key doesn't fit.\n");
- X return;
- X }
- X } else {
- X if((what == 148 && ! ispresent(yaccplayer,147)) || (what == 149 && ! ispresent(yaccplayer,124))
- X || (what == 150 && ! ispresent(yaccplayer,146))) {
- X format("You don't seem to have the appropriate key.\n");
- X return;
- X }
- X }
- X format("The door glides silently up and out of sight.\n");
- X switch(what)
- X {
- X case 148: flags [B_DOOR]++; destroy(148); break;
- X case 149: flags [S_DOOR]++; destroy(149); break;
- X case 150: flags [G_DOOR]++; destroy(150); break;
- X default: fail();
- X }
- X}
- X
- Xextern void record(int what,int whatwith)
- X{
- X if(whatwith == 0) whatwith = 157 /* dictating machine */ ;
- X if(whatwith != 157) {
- X format("You can't record anything on that!");
- X return;
- X }
- X
- X if(! ispresent(yaccplayer,157)) {
- X format("You don't seem to have access to one of those.");
- X return;
- X }
- X
- X if(what == 158 /* magpie */)
- X {
- X format("You start recording the magpie's squawks. After a while you get"
- X" bored and start to replay them; the magpie, hearing a rival goes flapping a"
- X"way in search of it. Finally you stop the tape and rejoice in the sudden si"
- X"lence.");
- X flags [MAGPIE] = 1;
- X } else {
- X format("You record %s.",quickname("the",what));
- X }
- X}
- X
- Xextern void drink(int what)
- X{
- X switch(what)
- X {
- X case 144: /* coffee */
- X format("You take a big swig of coffee.");
- X break;
- X case 159: /* potion */
- X format("You drink some of the potion. You immediately turn into a horri"
- X"ble smelly mouse! Your possessions shrink with you, so you can still manage"
- X" to carry them (just).");
- X flags [MOUSECOUNTER] = 10;
- X break;
- X default:
- X format("You wisely refrain from trying to drink that!");
- X break;
- X }
- X}
- X
- Xextern void precommand(void)
- X{
- X if(flags [MOUSECOUNTER] > 0) {
- X if(--flags [MOUSECOUNTER] == 0) {
- X format("You suddenly change back to human form.\n");
- X if(getroom(yaccplayer) == 52 /* elephants room */) {
- X format("During the transformation, one of the elephants collides with you, "
- X"squashing you almost without seeing you.\n");
- X dead = TRUE;
- X }
- X }
- X }
- X}
- X
- Xextern void do_wait(void)
- X{
- X format("You wait...");
- X switch(getroom(yaccplayer))
- X {
- X case 48: /* River bank */
- X if(++flags [WAITCOUNT] == 2) {
- X format("Suddenly one of the 'logs' opens its eyes. You realise with p"
- X"anic that it isn't a log at all, but a crocodile. However, the elephant mov"
- X"es towards the bank, extending its trunk. 'Another two feet, please,' it sa"
- X"ys, and the crocodile takes its trunk in capable jaws. The elephant has sto"
- X"pped following you.\n");
- X flags [ELEPHANTFOLLOW] = 0;
- X }
- X break;
- X case 14: /* poolside */
- X if(flags [WATERSPRITE] == 0) {
- X format("Suddenly the water forms itself into a ghastly, semi-human for"
- X"m: a water sprite. You recoil instinctively, avoiding being dragged under t"
- X"he water by its first attempt to grasp you, but it is rearing further out of"
- X" the water all the time...\n");
- X detachfromchain(163);
- X addtochain(163,14,& objects [14].inside);
- X objects [163].objtype.virtual = 0;
- X flags [WATERSPRITE] = 1;
- X }
- X break;
- X }
- X}
- X
- Xextern void kiss(int what)
- X{
- X if(what == 156 /* princess */) {
- X format("The Princess slaps your face. 'I know that's what you're suppos"
- X"ed to do in fairy stories, but I already know I'm not in one of them because"
- X" you're hardly Prince Charming, are you?'\n");
- X } else {
- X if(objects [what].objtype.alive) {
- X format("Rusgreve's voice suddenly intrudes on your mind: 'Oi! No hank"
- X"y panky, or we'll court martial you for breaching good order and military di"
- X"scipline!'\n\nYou wisely desist from whatever it was that you were thinking "
- X"of doing.\n");
- X } else {
- X format("You feel a bit silly, but you kiss %s just the same.\n",quickname("the",what));
- X }
- X }
- X}
- X
- Xextern void search(int what)
- X{
- X if(what == 136 /* Prendergast's bin */ && flags [BIN] == 0) {
- X format("Among lots of other funny stuff, you find a bronze key.");
- X flags [BIN] = 1;
- X detachfromchain(147); /* bronze key */
- X addtochain(147,yaccplayer,& objects [yaccplayer].inside);
- X } else {
- X format("You don't find anything.");
- X }
- X}
- X
- Xextern void climb(int what)
- X{
- X switch(what)
- X {
- X case 165: /* Tree, in the clearing */
- X direction = UP;
- X moveplayer();
- X break;
- X default:
- X format("You can't climb that!");
- X break;
- X }
- X}
- END_OF_FILE
- if test 25896 -ne `wc -c <'custom.c'`; then
- echo shar: \"'custom.c'\" unpacked with wrong size!
- fi
- # end of 'custom.c'
- fi
- if test -f 'lang.y' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lang.y'\"
- else
- echo shar: Extracting \"'lang.y'\" \(5597 characters\)
- sed "s/^X//" >'lang.y' <<'END_OF_FILE'
- X%{ /* Hey emacs, this file is in -*- Fundamental -*- mode */
- X
- X/* Copyright (C) 1992 Pete Chown.
- X
- X Here is my latest adventure game, Napoleon (see the documentation
- X if you don't know why it's called that). Have fun... (don't cheat,
- X even though you've got the source :-) ).
- X
- X This game is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X The game is distributed in the hope that it will be useful, but
- X WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- X General Public License for more details.
- X
- X The GNU General Public License is often shipped with GNU software, and
- X is generally kept in a file called COPYING or LICENSE. If you do not
- X have a copy of the license, write to the Free Software Foundation,
- X 675 Mass Ave, Cambridge, MA 02139, USA. */
- X
- X/* You should be editing lang.y. Do NOT EDIT lang.c as your edits will
- X just be thrown away. */
- X
- X#include "adv.h"
- X
- X%}
- X
- X%union {
- X char string [20];
- X int integer;
- X}
- X
- X%token NORTH SOUTH WEST EAST NORTHWEST NORTHEAST SOUTHWEST SOUTHEAST
- X%token UP DOWN INVENTORY LOAD LOOK QUIT SAVE SCORE GO EXAMINE ALL
- X%token EVERYTHING IN INTO ON OFF TO GET DROP TAKE PUT INV RESTORE
- X%token ONTO UNDER UNDERNEATH AT BELOW THE AND READ TWIRL TURN
- X%token SAY ASK ABOUT YES NO HELLO HI GOODBYE BYE HACK PLAY WITH
- X%token NOUGHTS CROSSES GIVE THROW OVER JUMP TOUCH UNLOCK OPEN BRIEF
- X%token VERBOSE NORMAL RECORD DRINK WAIT KISS SEARCH CLIMB
- X
- X%token QUOTE FULLSTOP COMMA SEMICOLON
- X
- X%token <string> NOUN ADJECTIVE
- X
- X%type <integer> object noun_group
- X
- X%start line
- X
- X%%
- X
- Xline: paragraph
- X | command
- X
- Xparagraph: sentence
- X | sentence separator paragraph
- X |
- X
- Xcommand: QUIT { dead = TRUE; }
- X | SAVE { savegame(); }
- X | load { loadgame(); }
- X | HACK { hack(); }
- X | BRIEF { flags [0] = 1; }
- X | VERBOSE { flags [0] = 2; }
- X | NORMAL { flags [0] = 0; }
- X
- Xload: LOAD
- X | RESTORE
- X
- Xsentence: GO direction { moveplayer(); }
- X | direction { moveplayer(); }
- X | special
- X | fullsentence
- X | direct_speech
- X
- Xdirection: NORTH { direction = NORTH; }
- X | SOUTH { direction = SOUTH; }
- X | WEST { direction = WEST; }
- X | EAST { direction = EAST; }
- X | NORTHWEST { direction = NORTHWEST; }
- X | NORTHEAST { direction = NORTHEAST; }
- X | SOUTHWEST { direction = SOUTHWEST; }
- X | SOUTHEAST { direction = SOUTHEAST; }
- X | UP { direction = UP; }
- X | DOWN { direction = DOWN; }
- X
- Xspecial: LOOK { descr = TRUE; looked = TRUE; }
- X | SCORE { format("You have visited %d%% of the game.",score); }
- X | inventory { inventory(yaccplayer); }
- X
- Xinventory: INVENTORY
- X | INV
- X
- Xseparator: FULLSTOP
- X | SEMICOLON
- X
- Xfullsentence: examine objects { examine(); }
- X | READ objects { do_read(); }
- X | get objects { get(); }
- X | DROP objects { drop(); }
- X | THROW objects { throw(0); }
- X | THROW objects OVER object { throw($4); }
- X | THROW objects DOWN { throw(0); }
- X | THROW objects AT object { throw($4); }
- X | PUT objects in object { put($4,& objects [$4].inside); }
- X | PUT objects on object { put($4,& objects [$4].above); }
- X | PUT objects under object { put($4,& objects [$4].below); }
- X | turn_variant
- X | play_variant
- X | GIVE objects TO object { give($4); }
- X | GIVE object objects { give($2); }
- X | JUMP { jump(0); }
- X | JUMP OVER object { jump($3); }
- X | TOUCH object { touch($2); }
- X | UNLOCK object { unlock($2,0); }
- X | OPEN object { unlock($2,0); }
- X | UNLOCK object WITH object { unlock($2,$4); }
- X | OPEN object WITH object { unlock($2,$4); }
- X | RECORD object { record($2,0); }
- X | RECORD object WITH object { record($2,$4); }
- X | RECORD object ON object { record($2,$4); }
- X | DRINK object { drink($2); }
- X | WAIT { do_wait(); }
- X | KISS object { kiss($2); }
- X | SEARCH object { search($2); }
- X | LOOK IN object { search($3); }
- X | CLIMB object { climb($2); }
- X
- Xexamine: EXAMINE
- X | LOOK AT
- X
- Xget: TAKE
- X | GET
- X
- Xin: IN
- X | INTO
- X
- Xon: ON
- X | ONTO
- X
- Xunder: UNDER
- X | UNDERNEATH
- X | BELOW
- X
- Xobjects: ALL { all = TRUE; }
- X | object { addobject($1); }
- X | object COMMA objects { addobject($1); }
- X | object AND objects { addobject($1); }
- X | object COMMA AND objects { addobject($1); }
- X
- Xobject: noun_group { $$ = $1; if($$ < 1) YYERROR; }
- X | THE noun_group { $$ = $2; if($$ < 1) YYERROR; }
- X
- Xnoun_group: NOUN { $$ = getobject($1); }
- X | adjective noun_group { $$ = $2; }
- X
- Xadjective: ADJECTIVE { addadjective($1); }
- X
- Xturn_variant: TWIRL objects { twirl(); }
- X | TWIRL ON objects { twirl(); }
- X | TURN objects { turn(); }
- X
- Xplay_variant: PLAY object { play($2); }
- X | PLAY WITH object { play($3); }
- X | PLAY NOUGHTS AND CROSSES { playnandc(104); }
- X | PLAY NOUGHTS AND CROSSES WITH object { playnandc($6); }
- X
- Xdirect_speech: SAY TO object quote speech quote { speech($3,0); }
- X | SAY quote speech quote TO object { speech($6,0); }
- X | SAY quote speech quote { speech(getbeastie(),0); }
- X | object COMMA speech { speech($1,0); }
- X | ASK object ABOUT ssf objects csf { speech($2,1); }
- X
- Xquote: QUOTE
- X |
- X
- Xspeech: ssf speech_text csf
- X
- Xssf: { speechflag = TRUE; }
- X
- Xcsf: { speechflag = FALSE; }
- X
- Xspeech_text: greeting { said = 0; }
- X | LOOK AT object { said = 1; subject = $3; }
- X | EXAMINE object { said = 1; subject = $2; }
- X | YES { said = 2; }
- X | NO { said = 3; }
- X | farewell { said = 4; }
- X | object { said = 5; subject = $1; }
- X
- Xgreeting: HELLO
- X | HI
- X
- Xfarewell: GOODBYE
- X | BYE
- X
- X%%
- X
- X#ifdef DAVID_PILLINGS_BISON
- X
- X#include "lex.c"
- X#include "parse.c"
- X
- X#endif
- END_OF_FILE
- if test 5597 -ne `wc -c <'lang.y'`; then
- echo shar: \"'lang.y'\" unpacked with wrong size!
- fi
- # end of 'lang.y'
- fi
- if test -f 'napoleon.0' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'napoleon.0'\"
- else
- echo shar: Extracting \"'napoleon.0'\" \(14166 characters\)
- sed "s/^X//" >'napoleon.0' <<'END_OF_FILE'
- XNAPOLEON(1) 386BSD Reference Manual NAPOLEON(1)
- X
- XNAME
- X napoleon - adventure game
- X
- XSYNOPSIS
- X napoleon
- X
- XDESCRIPTION
- X Napoleon is a traditional text adventure game. On the other hand it is
- X modern in the sense that it has a yacc/bison parser to allow you to type
- X more complex commands than the traditional two words.
- X
- X You already know what an adventure game is, I expect... so all that re-
- X mains is to set the scene for this particular one:
- X
- XINTRODUCTION
- X It was an alarmingly dark night. In Rusgreve's office, a solitary candle
- X burned, and spluttered fitfully in the slight breeze. The Council of War
- X began. Prendergast lit a smelly cigarette.
- X
- X Rusgreve began to explain the problem. 'The difficulty is,' he said,
- X 'someone is going to have to go in without us having first obtained prop-
- X er information. It isn't going to be me.'
- X
- X Many, many weeks previously, the investigation had begun. At first, Rus-
- X greve had claimed there was nothing to worry about. After a time, that
- X became a bigger worry than the things people might have worried about,
- X and so he rewrote history so that in fact he had been concerned all
- X along. The delay rather hindered the efforts to gain information about
- X the people involved prior to sending in an agent.
- X
- X Many, many years previously, the so-called Napoleon gang had been normal
- X criminals - yes, they did a bit of time here, and yes, there was the odd
- X bungled attack there. Then things changed for the better (although it
- X was worse for everyone else). The first and most important change was
- X that Rusgreve took over as director of the Criminal Re- education Bureau,
- X responsible for placing crooks in the nick for re-education.
- X
- X The second, and less important change was that the Napoleon gang were
- X joined by a fourth member. This member was known as Professor R. P. P.
- X Tinthywinkle-Croack. Rusgreve pointed out early on how surprising it was
- X that one of the Napoleon gang was using his real name. Unfortunately it
- X rapidly became obvious that this was not so. Information was passed out
- X to the Napoleons which was supposed to be top secret, for your eyes only,
- X printed on red paper. This led to the uncharitable starting to believe
- X that somewhere in the CRB, a leaker was at work. An immediate Public En-
- X quiry was set up, which served only to pass still more information into
- X the hands of Joe Public (who Rusgreve always suspected of being a secret
- X Communist - others only suspected Rusgreve of being a little simple).
- X
- X One particular piece of information which got into the hands of the
- X Napoleon gang was the knowledge of how to idea-flip. Prendergast was
- X originally employed to try to research this topic, in order that it could
- X be directed at miscreants, as part of the re-education programme. We
- X asked him to explain it to the Council of War so that it could be quoted
- X below:
- X
- X When you dream, you populate your dreams with other people. However
- X those people don't know that they were in your dream (unless you tell
- X them, yes, Rusgreve). Now if we can bring sufficient energy to bear on
- X the problem, we can arrange it so that people's dreams come true; they
- X don't know it, and neither does anyone else unless some action is taken
- X to transport people to them. But when this happens, two people can meet
- X in a dream, and both people will remember the same dream when they wake
- X up.
- X
- X Now this is not just of academic interest. Many people saw a lot of po-
- X tential in this system for creating everything from idyllic gardens to
- X death traps (the use the Napoleon gang were eventually to find).
- X
- X What was not appreciated was that people's dreams were not being realised
- X individually but instead everyone who placed their dreams at the disposal
- X of the idea-flipping machine had their dreams combined into a single very
- X large system. In the end portions of the system became quite well
- X ordered. In places this was because people deliberately dreamed in such
- X a way as to create improved order while in others it was due simply to
- X people with efficient minds dreaming.
- X
- X This caused the Napoleon gang a lot of problems. The point was that they
- X wanted to create death traps to which people could be whisked as soon as
- X they fell asleep. But the majority of the dreamland was neutral or good,
- X since wide publication of the invention had been prevented; apart from
- X the Napoleon gang, everyone who knew about the invention was concerned
- X with creating safe places for people to go.
- X
- X However there are nasty places. These, however, have been watered down
- X by the proximity of good areas. They are now much more what you make of
- X them than unreservedly bad. That is, you have to survive by your wits.
- X
- X Next Rusgreve himself gave a short briefing to the meeting, reading from
- X a large pad in front of him on the table:
- X
- X Now it wouldn't be so bad if the Napoleon gang hadn't managed to steer
- X anyone to the unpleasant areas, but they have. They created for them-
- X selves a complex of rooms with exits leading to all the bad places; then
- X they entered the dreamland looking for someone important who could be
- X kidnapped and held hostage there. And they found someone: the Princess
- X Caroline, who was dreaming naturally and was unaware that she had moved
- X from dream to semi reality.
- X
- X She has been asleep ever since, and cannot be woken. It has been put
- X about that she is ill, but those people knowing about the idea-flipping
- X secret know that she is not ill. So do the Napoleon gang, who have asked
- X for a large fee in return for releasing her. But someone's going to have
- X to go into the dreamland to let her out.
- X
- X 'Well volunteered,' said Rusgreve to you at about this point.
- X
- X 'Hmmm,' said Prendergast, 'I suppose we could easily put someone into the
- X Napoleon gang's rooms that lead to all the nasty bits. It's just if they
- X get killed, they won't come back, just like the Princess Caroline
- X didn't.'
- X
- X 'We won't get anywhere without taking a few risks,' said Rusgreve, kind-
- X ly.
- X
- X 'We don't know what unpleasant things the Napoleon gang might have put
- X there for unexpected visitors, though,' said Prendergast.
- X
- X The exchanges went on for quite some time. In the end Rusgreve, as di-
- X rector of the Bureau, overruled all objections and annouced that Some-
- X thing Must be Done. You are on your way.
- X
- X 'Alright then,' said Prendergast with a sigh. 'We'll be able to keep
- X watch over you until you leave the Napoleons' place for the various nasty
- X bits, and make sure nothing too nasty happens. But we won't be able to
- X help you operate whatever the Napoleons have put there, and we won't be
- X able to help you once you get past there into the rest of the dreamland.'
- X
- X
- X 'And good luck,' finished Rusgreve. 'We appreciate what you are doing.
- X We will give you the papers you need to carry out this mission to the
- X best of your ability - and remember the most important thing. Read the
- X scroll in the office at the centre of the Napoleons' headquarters.'
- X
- XSHEET 604
- X Target Information -- Napoleon Gang (sheet # 604)
- X
- X Up to date information on the Napoleons is difficult to come by. Over
- X the last few years they have moved from being really quite ordinary crim-
- X inals who we have been able to have a try at re-educating sometimes to
- X their present form.
- X
- X It is popularly believed that they 'hit the big time' as the leader liked
- X to put it, when the information on idea- flipping fell into their hands,
- X apparently leaked by someone at the Bureau. We would like to stress that
- X this is almost certainly not the case and it is thought to be highly un-
- X likely that anyone at the Bureau could have been responsible for the sud-
- X den rise to power that the Napoleon gang have experienced.
- X
- X The reason we haven't got much information to place in this report is
- X that the Napoleons have become very accustomed to secrecy. Last year one
- X of our operatives had to pretend to be a window-cleaner after he was seen
- X fixing an electronic device to their window frame. It is believed that
- X his cover may have been compromised by someone at the Bureau and everyone
- X is urged to be uncommonly vigilant to prevent unauthorised activities
- X such as leaking from being carried on. The attached device subsequently
- X only ever recorded people berating the Bureau for inefficiency in catch-
- X ing criminals.
- X
- X The Napoleon gang is, however, known to have three members, as well as
- X Professor R. P. P. Tinthywinkle-Croack. Apart from the Professor, all
- X the members use false names, and so the accuracy of what follows cannot
- X be guaranteed.
- X
- X Napoleon target # 1: Richard Entwhistle-SmytheCumbert
- X
- X Commonly uses the alias of Fred Smith.
- X
- X Served five years in jail for robbery with violence, while the Napoleons
- X were in a less subtle phase.
- X
- X Commonly believed to be the leader of the outfit, RESC seemed to be the
- X first to hear of the opportunity available with the idea-flipping ma-
- X chine. He approached Professor Tinthywinkle-Croack to bring him in on
- X the project. The meeting was monitored, but unfortunately took place in
- X a language for which a translator could not be found for another three
- X weeks, by which time it was, of course, far too late.
- X
- X If you see RESC, take great care. He may attack with a savagery learnt
- X during his days as a robber. He may try to trick you, using his undoubt-
- X ed verbal skill. He may ignore you and hope you go away. He might at-
- X tempt to recruit you, and we wouldn't want that, would we?
- X
- X RESC may be recognised in the dreamland by his tendency to end up leading
- X what ever bizarre operation someone has 'dreamed' up. One of nature's
- X leaders, he will lead you into compromising the Bureau if you are not
- X careful. Be warned. If you change sides, the whole arsenal of the Bu-
- X reau's sophisticated tools will be pointed at you.
- X
- X Napoleon target # 2: Charlie Zzzwocke
- X
- X Changed his name by Deed Poll in order that he could take part in a bank
- X fraud.
- X
- X
- X Commonly uses the alias of Uncle Z, which is not very convincing, but you
- X believe that that is his name when he is standing over you asking whether
- X you want to buy any insurance.
- X
- X A natural thug, he is available for any operation involving crimes of vi-
- X olence in a dark alley. He was brought into the fraud because someone
- X realised that the person most at risk was the one with the funny name -
- X and predictably Zzzwocke got caught. He served three months at an open
- X prison before absconding.
- X
- X While on the run, he took part in an attack on a bank. Unfortunately the
- X bank had folded several months previously and there was now nothing in
- X the branch except a pile of old paying-in slips. He took these, and
- X started to run out before falling over the doormat and letting his gun
- X off across the street. RESC saw him and thought him the ideal gang mem-
- X ber - frightening to anyone not wanting insurance, but not intelligent
- X enough to have leadership ambitions. RESC removed him from under the
- X noses of the police.
- X
- X Of all the gang members, Zzzwocke is the least at home in dreamland.
- X 'Namby-pamby' pursuits like dreaming are not for him, and a sudden shock
- X will sometimes cause him to wake up.
- X
- X Napoleon target # 3: Brian Turner
- X
- X [ Note: the above name is believed to be too ordinary to be correct.
- X Would anyone who would like to suggest an alternative name please contact
- X the information desk on the number shown below. ]
- X
- X Not using any aliases, Brian Turner is a supremely confident talker who
- X could sell double glazing to... well, anyone really. He has been in-
- X volved in organised crime ever since his childhood, when he 'organised'
- X people to distract the store detective while his friends helped them-
- X selves to chocolate bars. Predictably, he got caught, and was cautioned.
- X
- X Later he turned his attention to selling timeshare holidays. This ended
- X when he got so good at it that he sold himself one, forgetting all the
- X bad points, like that it was still just a hole in the ground.
- X
- X Later he turned his attention to getting people to put thousands of
- X pounds in brown envelopes and leave them in the hotel safe. One of the
- X people he did this to was our own Rusgreve, and this was the reason why
- X Rusgreve decided to go into crime prevention, in order to get his own
- X back. This particular misdeed therefore had repercussions for the crime
- X statistics far beyond its own ability to increment them.
- X
- X Finally, he joined the Napoleons when a man who had just been cheated
- X turned nasty. That man was Mr Zzzwocke.
- X
- X If you have any further information to add to this dossier, please ring
- X 4733 and ask for Peabody.
- X
- X If you believe that your cover may have been compromised, please ring
- X 8955 and ask to speak to the Editor.
- X
- XSHEET 904
- X Target Information -- Bureau Leaker (sheet # 904)
- X
- X (this page intentionally left blank)
- X
- X If you have any further information to add to this dossier, please ring
- X 4733 and ask for Peabody.
- X
- X If you believe that your cover may have been compromised, please ring
- X 8955 and ask to speak to the Editor.
- X
- X
- XDIAGNOSTICS
- X Exit status is always 0. All errors are reported interactively by the
- X program.
- X
- XBUGS
- X Surely not?
- X
- XHISTORY
- X This is the first version. History is just about to start... :-)
- X
- XBSD Experimental February 28, 1993 6
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- X
- END_OF_FILE
- if test 14166 -ne `wc -c <'napoleon.0'`; then
- echo shar: \"'napoleon.0'\" unpacked with wrong size!
- fi
- # end of 'napoleon.0'
- fi
- echo shar: End of archive 1 \(of 4\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 2 3 4 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 4 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-