Another try at Phantasia (part 1)
8-01-83"Edward E 9723i
estes at tty3b.UUCP
Sat Sep 8 08:12:42 AEST 1984
-----
Ok, gang. Let's try again. 'xstr' has been taken out of the Makefile.
(The original stuff is left in as comments.)
Also, the source has been split up into smaller pieces. This is to
accomodate all you fans of notesfiles. Everything is around 50K bytes
now.
Sorry for all the problems. I never imagined such a furor over a
dumb game.
Anyway, hopefully, this stuff will run with little problem. I don't
appreciate the flame(s), so don't bother sending/posting any more.
Ted Estes
...!ihnp4!tty3b!estes
----------CUT----------CUT------------CUT----------CUT------------CUT--------
: This is a shar archieve. Extract with sh, not csh.
: The rest of this file will extract:
: Makefile phant.h phant.nr setfiles.c monsters
echo extracting - Makefile
sed 's/^X//' > Makefile << '!EOR!'
X# Makefile for Phantasia 3.2
X#
X# To create game:
X#
X# 1) Set up a directory where the game and its support files will live.
X# (It is suggested that the source be kept somewhere else.)
X# 2) Set up the variables in Makefile to reflect your particular situation.
X# 3) Check out ok_to_play() at the end of main.c if you want to include
X# code to restrict access at certain times.
X# 4) 'make install' and watch it fly.
X#
X# NOTE: If you have 'xstr' you may use it to create a smaller resulting
X# binary. Simply uncomment the lines starting with '#---'. In
X# some cases, the line following the commented one must be deleted.
X
X#---XSTR = /t2/estes/bin/xstr
XRM = -rm
X
X# Add '-ljobs' to LIBS if 4.1bsd
XLIBS = -lm -lcurses -ltermlib
X# May need '-I/usr/include/sys' for 4.2bsd
XCFLAGS = -O -I.
X
X# DEST is where the program and its support files reside
XDEST = /t2/estes/phantsrc
X
X# The following are program constants which are implementation dependent.
X#
X# PATH is the same as $DEST.
X# Note that there is no trailing '"' for PATH.
X# WIZARD is the login of the one who will clean up things.
X# UID is the uid of game wizard.
X# RAND is one more than the largest number generated by rand().
X# Possible values for this are:
X# 32768.0 (for 15 bit rand())
X# 65536.0 (for 16 bit rand())
X# 2147483648.0 (for 31 bit rand())
X# ACCESS is fopen() access to open a file for writing, but no
X# clearing the file, e.g. "a", or "r+". (Use "r+" if you have it.)
X# define OK_TO_PLAY to restrict playing access. Also see function ok_to_play()
X# in main.c, and tailor to your own needs.
X# define ENEMY to include code for checking of a 'hit list' of resricted
X# accounts. The list of logins goes in the file 'enemy'.
X# define BSD41 for 4.1bsd
X# define BSD42 for 4.2bsd
X# define USG3 for System III, or similar
X# define USG5 for System V
XFLAGS = -DPATH=\"${DEST} \
X -DWIZARD=\"estes\" \
X -DUID=419 \
X -DRAND=32767.0 \
X -DACCESS=\"r+\" \
X -DOK_TO_PLAY \
X -DENEMY \
X -DUSG5
X
XOFILES = main.o fight.o func0.o func1.o func2.o
X
Xall: phantasia setfiles phant.help
X
X# need separate i/d space on small machines
X#---phantasia: ${OFILES} strings.o
Xphantasia: ${OFILES}
X# ${CC} ${OFILES} strings.o ${LIBS} -o phantasia
X ${CC} ${OFILES} ${LIBS} -o phantasia
X
X${OFILES}: phant.h
X#--- ${CC} -E ${CFLAGS} ${FLAGS} $*.c | ${XSTR} -c -
X ${CC} -c ${CFLAGS} ${FLAGS} $*.c
X#--- ${CC} -c ${CFLAGS} x.c
X#--- mv x.o $*.o
X
X#---strings.o: ${OFILES} strings
X#--- ${XSTR}
X#--- ${CC} -c xs.c
X#--- mv xs.o strings.o
X
Xsetfiles: phant.h setfiles.c
X ${CC} ${CFLAGS} ${FLAGS} setfiles.c -o setfiles -lm
X
X# the flags below on tbl and nroff are to make a line printable version
Xphant.help: phant.nr
X tbl -TX phant.nr | nroff -man -Ttn300 > phant.help
X
Xinstall: all
X cp phantasia monsters phant.help ${DEST}
X chmod 755 ${DEST}
X chmod 4711 ${DEST}/phantasia
X chmod 644 ${DEST}/phant.help
X setfiles
X
Xclean:
X#--- ${RM} -f *.o strings x.c xs.c
X ${RM} -f *.o
!EOR!
echo extracting - phant.h
sed 's/^X//' > phant.h << '!EOR!'
X/*
X * phant.h Include file for Phantasia
X */
X
X#include <setjmp.h>
X#include <curses.h>
X#include <time.h>
X#include <pwd.h>
X#include <signal.h>
X#include <math.h>
X
X/* ring constants */
X#define NONE 0
X#define NAZBAD 1
X#define NAZREG 2
X#define DLREG 3
X#define DLBAD 4
X#define SPOILED 5
X
X/* some functions and pseudo-functions */
X#define toupper(CH) ((CH) > 96 ? (CH) ^ 32 : (CH)) /* may be upper or lower */
X#define tolower(CH) ((CH) | 32) /* must be upper */
X#define rnd() (((double) rand()) / RAND)
X#define roll(BASE,INTERVAL) floor((BASE) + (INTERVAL) * rnd())
X#define sgn(x) (-(x < 0) + (x > 0))
X#define abs(x) ((x) < 0 ? -(x) : (x))
X#define circ(x,y) floor(sqrt((double) ((x) * (x) + (y) * (y))) / 125 + 1)
X#define max(A,B) ((A) > (B) ? (A) : (B))
X#define min(A,B) ((A) < (B) ? (A) : (B))
X#define valarstuff(ARG) decree(ARG)
X#define illcmd() mvaddstr(6,0,"Illegal command.\n")
X#define maxmove floor(charac.lvl * 1.5 + 1)
X#define illmove() mvaddstr(6,0,"Too far.\n")
X#define rndattack() if (rnd() < 0.2 && charac.status == PLAYING && !throne) \
X fight(&charac,-1)
X#define strcalc(STR,SICK) max(0,min(0.9 * STR, SICK * STR/20))
X#define spdcalc(LVL,GLD,GEM) max(0,((GLD + GEM/2) - 1000)/200.0 - LVL)
X#define illspell() mvaddstr(6,0,"Illegal spell.\n")
X#define nomanna() mvaddstr(6,0,"Not enough manna for that spell.\n")
X#define somebetter() addstr("But you already have something better.\n")
X
X/* status constants */
X#define OFF 0
X#define PLAYING 1
X#define CLOAKED 2
X#define INBATTLE 3
X#define DIE 4
X#define QUIT 5
X
X/* tampered constants */
X#define NRGVOID 1
X#define GRAIL 2
X#define TRANSPORT 3
X#define GOLD 4
X#define CURSED 5
X#define MONSTER 6
X#define BLESS 7
X#define MOVED 8
X#define HEAL 9
X#define VAPORIZED 10
X#define STOLEN 11
X
X/* structure definitions */
Xstruct stats /* player stats */
X {
X char name[21]; /* name */
X char pswd[9]; /* password */
X char login[10]; /* login */
X double x; /* x coord */
X double y; /* y coord */
X double exp; /* experience */
X int lvl; /* level */
X short quk; /* quick */
X double str; /* strength */
X double sin; /* sin */
X double man; /* manna */
X double gld; /* gold */
X double nrg; /* energy */
X double mxn; /* max. energy */
X double mag; /* magic level */
X double brn; /* brains */
X short crn; /* crowns */
X struct
X {
X short type;
X short duration;
X } rng; /* ring stuff */
X bool pal; /* palantir */
X double psn; /* poison */
X short hw; /* holy water */
X short amu; /* amulets */
X bool bls; /* blessing */
X short chm; /* charms */
X double gem; /* gems */
X short quks; /* quicksilver */
X double swd; /* sword */
X double shd; /* shield */
X short typ; /* character type */
X bool vrg; /* virgin */
X short lastused; /* day of year last used */
X short status; /* playing, cloaked, etc. */
X short tampered; /* decree'd, etc. flag */
X double scratch1, scratch2; /* var's for above */
X bool blind; /* blindness */
X int wormhole; /* # of wormhole, 0 = none */
X long age; /* age in seconds */
X short degen; /* age/2500 last degenerated */
X };
X
Xstruct mstats /* monster stats */
X {
X char name[26]; /* name */
X double str; /* strength */
X double brn; /* brains */
X double spd; /* speed */
X double hit; /* hits (energy) */
X double exp; /* experience */
X int trs; /* treasure type */
X int typ; /* special type */
X int flk; /* % flock */
X };
X
Xstruct nrgvoid /* energy void */
X {
X bool active; /* active or not */
X double x,y; /* coordinates */
X };
X
Xstruct worm_hole /* worm hole */
X {
X char f, b, l, r; /* forward, back, left, right */
X };
X
X/* files */
X#define monsterfile PATH/monsters"
X#define peoplefile PATH/characs"
X#define gameprog PATH/phantasia"
X#define messfile PATH/mess"
X#define lastdead PATH/lastdead"
X#define helpfile PATH/phant.help"
X#define motd PATH/motd"
X#define goldfile PATH/gold"
X#define voidfile PATH/void"
X#define enemyfile PATH/enemy"
X
X/* library functions and system calls */
Xunsigned sleep();
Xlong time(), ftell();
Xchar *getlogin(), *getpass(), *ctime();
Xstruct passwd *getpwuid();
Xchar *strcpy(), *strncpy();
X
X/* function and global variable declarations */
Xvoid adjuststats(), callmonster(), checkinterm(), checkmov(), checktampered(),
X cstat(), death(), decree(), exit1(), fight(), genchar(), getstring(), init1(),
X initchar(), interm(), kingstuff(), leave(), movelvl(), neatstuf(),
X paws(), printhelp(), printmonster(), printplayers(), printstats(), purge(),
X showall(), showusers(), statread(), talk(), tampered(), titlestuff(),
X trade(), treasure(), trunc(), update(), voidupdate();
Xint allocvoid(), findchar(), findspace(), gch(), interrupt(), rgetch(), rngcalc();
Xunsigned level();
Xdouble inflt();
Xchar *printloc();
Xbool findname();
X#ifdef OK_TO_PLAY
Xbool ok_to_play();
X#endif
X
Xextern jmp_buf fightenv, mainenv;
Xextern double strength, speed;
Xextern bool beyond, marsh, throne, valhala, changed, fghting, su, wmhl;
Xextern struct worm_hole w_h[];
Xextern long secs;
Xextern int fileloc, users;
!EOR!
echo extracting - phant.nr
sed 's/^X//' > phant.nr << '!EOR!'
X.de sh
X.br
X.ne 5
X.PP
X\fB\\$1\fR
X.PP
X..
X.TH PHANTASIA 6 GAMES
X.UC 4
X.SH NAME
Xphantasia \- an interterminal fantasy game
X.SH SYNOPSIS
X.B phantasia
X[
X.B \-s
X] [
X.B \-m
X] [
X.B \-a
X] [
X.B \-x
X] [
X.B \-h
X] [
X.B \-H
X] [
X.B \-p
X]
X.SH DESCRIPTION
X.I Phantasia
Xis a role playing game vaguely similar to dungeons and dragons.
XIt allows players to roll up characters of various types to fight
Xmonsters and other players.
XProgression of characters is based upon gaining experience from fighting
Xmonsters (and other players).
X.PP
XMost of the game is menu driven and self-explanatory (more or less).
XThe screen is cursor updated, so be sure to set up the
X.B TERM
Xvariable in your environment.
X.PP
XThe options provide for a variety of functions to support the game.
XThey are:
X.PP
X.TP .5i
X.B \-s
XInvokes
X.I phantasia
Xwithout header information.
X.TP .5i
X.B \-m
XGet a monster listing.
X.TP .5i
X.B \-a
XGet a listing of all character names on file.
X.TP .5i
X.B \-x
XExamine/change a particular character on file.
X.TP .5i
X.B \-h
XGet a help listing (this message).
X.TP .5i
X.B \-H
XGet header listing only.
X.TP .5i
X.B \-p
XPurge old characters.
X.PP
XThe characters are saved on a common file, in order to make the game
Xinteractive between players. The characters are given a password
Xin order to retrieve them later. Only characters above
X.B level
Xzero are saved. Characters unused for more than nine days will be
Xpurged.
X.SH AUTHOR
XEdward Estes, AT&T Teletype Corp.
X.SH PARTICULARS
X.sh "Playing in General"
XCertain of the player's more important statistics are almost always
Xdisplyed on the screen, with maximums (where applicable) in
Xparentheses.
X.PP
XThe character is placed randomly near the center of a cartesian
Xsystem. One may move by hitting
X.B E, W, N,
Xor
X.B S
X(lower case may also be used, at no time is the game case dependent).
XTo move to a particular (x,y) coordinate, use the
X.B move
X('1') command. The distance a character can move is calculated by
X1 plus 1.5 per
X.B level.
XMoving in a particular compass direction will move the player the maximum
Xallowed distance in that direction.
X.PP
XA player may at any time see who else is playing with a
X.B players
X('2') option. One may see only those who are the same distance or closer
Xto the origin as he/she.
X.B Kings,
Xand
X.B council of the wise
Xcan see and can be seen by everyone. A
X.B palantir
Xremoves these retrictions.
X.PP
XOne can talk to other players with the
X.B talk
X('3') option. In general, this is a line or so of text. To remove a current
Xmessage, just type <return> when prompted for a message.
X.PP
XThe
X.B stats
X('4') option shows a players characteristics in more detail.
X.PP
XOne may leave the game either with the
X.B quit
X('5') option, or by hitting interrupt. Quitting during battle results
Xin death for obvious reasons.
X.PP
XOne may rest by default. Resting lets one regain maximum
X.B energy level,
Xand also lets one find
X.B manna
X(more is found for larger levels and further distances from the origin).
X.PP
XOne may call a monster by hitting '9'.
X.PP
XSeveral other options become available as the player progress in
X.B level
Xand
X.B magic,
Xor to other positions in the game (
X.B valar, council of the wise, king
X).
XThese are described elsewhere.
XIn general, a control-L will force the redrawing of the screen.
X.PP
XOther things which may happen are more or less self-explanatory.
X.sh "Fighting Monsters"
XA player has several options while fighting monsters. They are as follows:
X.TP 1.5i
X.B melee
XInflicts damage on the monster, based upon
X.B strength.
XAlso decreases the monster's
X.B strength
Xsome.
X.TP 1.5i
X.B skirmish
XInflicts a little less damage than
X.B melee,
Xbut decreases the monster's
X.B quickness
Xinstead.
X.TP 1.5i
X.B evade
XAttempt to run away. Success is based upon both the player's and
Xthe monster's
X.B brains
Xand
X.B quickness.
X.TP 1.5i
X.B spell
XSeveral options for throwing spells (described elsewhere).
X.TP 1.5i
X.B nick
XHits the monster one plus the player's
X.B sword,
Xand gives the player 10% of the monster's
X.B experience.
XDecreases the monster's
X.B experience
Xan amount proportional to the amount granted.
XThis also increases the monster's quickness.
XParalyzed monsters wake up very fast when nicked.
X.TP 1.5i
X.B luckout
XThis is essentially a battle of wits with the monster. Success is based
Xupon the player's and the monster's
X.B brains.
XThe player gets credit for slaying the monster if he/she succeeds.
XOtherwise, nothing happens, and the chance to
X.B luckout
Xis lost.
X.sh "Character Statistics"
X.TP 1.5i
X.B strength
Xdetermines how much damage a character can inflict.
X.TP 1.5i
X.B quickness
Xdetermines how many chances a character gets to make decisions while
Xfighting.
X.TP 1.5i
X.B energy level
Xspecifies how much damage a character may endure before dying.
X.TP 1.5i
X.B magic level
Xdetermines which spells a character may throw, and how effective those
Xspells will be.
X.TP 1.5i
X.B brains
Xbasically, the character's intelligence; used for various fighting options
Xand spells.
X.TP 1.5i
X.B manna
Xused as a power source for throwing spells.
X.TP 1.5i
X.B experience
Xgained by fighting monsters and other characters.
X.TP 1.5i
X.B level
Xindicative of how much experience a character has accumulated; progresses
Xgeometrically as
X.B experience
Xincreases.
X.TP 1.5i
X.B poison
Xsickness which degrades a character's performance (affects
X.B energy level
Xand
X.B strength
X).
X.TP 1.5i
X.B sin
Xaccumulated as a character does certain nasty things; used only rarely
Xin normal play of the game.
X.TP 1.5i
X.B age
Xnumber of seconds of playing time for the character.
XAs
X.B age
Xincreases, many personal statistics degenerate.
X.sh "Character Types"
XCharacter statistics are rolled randomly from the above list, according
Xto character type. The types are as follows:
X.TP 1.5i
X.B magic user
Xstrong in
X.B magic level
Xand
X.B brains
X, weak in other areas. Must rely on wits and magic to survive.
X.TP 1.5i
X.B fighter
Xgood in
X.B strength
Xand
X.B energy level
X, fairly good in other areas. This adds up to a well-equipped fighter.
X.TP 1.5i
X.B elf
Xvery high
X.B quickness
Xand above average
X.B magic level
Xare
X.B elves
Xselling points.
X.TP 1.5i
X.B dwarf
Xvery high
X.B strength
Xand
X.B energy level
X, but with a tendency to be rather slow and not too bright.
X.TP 1.5i
X.B halfling
Xrather quick and smart, with high
X.B energy level
X, but poor in
X.B magic
Xand
X.B strength.
XBorn with some
X.B experience.
X.TP 1.5i
X.B experimento
Xvery mediocre in all areas. However, the
X.B experimento
Xmay be placed almost anywhere within the playing grid.
X.PP
XThe possible ranges for starting statistics are summarized in
Xthe following table.
X.PP
X.TS
Xl c c c c c c
Xl c c c c c c.
XType Strength Quick Manna Energy Brains Magic
X_
XMag. User 20-25 30-35 50-100 30-45 60-85 5-9
XFighter 40-55 30-35 30-50 45-70 25-45 3-6
XElf 35-45 28-38 45-90 30-50 40-65 4-7
XDwarf 50-70 25-30 25-45 60-100 20-40 2-5
XHalfling 20-25 34 25-45 55-90 40-75 1-4
XExperimento 25 27 100 35 25 2
X.TE
X.PP
XNot only are the starting characteristics different for the different
Xcharacter types, the characteristics progress at different rates for the
Xdifferent types as the character goes up in
X.B level. Experimentoes'
Xcharacteristics progress randomly as one of the other types.
XThe progression as characters increase in
X.B level
Xis summarized in the following table.
X.PP
X.TS
Xl c c c c c
Xl n n n n n.
XType Strength Manna Energy Brains Magic
X_
XMag. User 2.0 75 20 6 2.75
XFighter 3.0 40 30 3.0 1.5
XElf 2.5 65 25 4.0 2.0
XDwarf 5 30 35 2.5 1
XHalfling 2.0 30 30 4.5 1
X.TE
X.PP
XCharacter types are identified by certain numeric values as follows:
X.br
X1:
X.B Magic User
X2:
X.B Fighter
X3:
X.B Elf
X4:
X.B Dwarf
X5:
X.B Halfling
X6:
X.B Experimento
X.PP
XCharacters with one or more
X.B crowns
Xare designated as a negative type.
X.B Kings
Xhave ten added to their type; members of the
X.B council of the wise
Xhave twenty added to their type.
X.B Valar
Xare type 99, and
X.B ex-valar
Xare type 90.
X.sh "Spells"
XDuring the course of the game, the player may exercise his/her particular
Xmagic powers. These cases are described below.
X.TP 1.5i
X.B cloak
X.I magic level necessary:
X15 (plus level 5)
X.br
X.I manna used:
X35 plus 3 per rest period
X.br
XUsed during normal play. Prevents monsters from finding the character,
Xas well as hiding the player from other players. His/her coordinates
Xshow up as '?' in the
X.B players
Xoption. Players cannot collect
X.B manna,
Xfind trading posts, or discover the
X.B grail
Xwhile cloaked. Calling a monster uncloaks, as well as choosing
Xthis option while cloaked.
X.br
X.TP 1.5i
X.B teleport
X.I magic level necessary:
X25 (plus level 10)
X.br
X.I manna used:
X20 per 75 moved
X.br
XUsed during normal play. Allows the player too move with much more freedom
Xthan with the
X.B move
Xoption, at the price of expending manna. The maximum distance possible
Xto move is based upon
X.B level
Xand
X.B magic level.
X.TP 1.5i
X.B power blast
X.I magic level necessary:
Xnone
X.br
X.I manna used:
X5 times
X.B level
X.br
XUsed during inter-terminal battle. Damage is based upon
X.B magic level
Xand
X.B strength.
XHits much harder than a normal hit.
X.TP 1.5i
X.B all or nothing
X.I magic level necessary:
Xnone
X.br
X.I manna used:
X1
X.br
XUsed while combatting monsters.
XHas a 25% chance of working. If it works it hits the monster just enough
Xto kill it. If it fails, it doesn't hit the monster, and doubles the
Xmonster's
X.B quickness
Xand
X.B strength.
XParalyzed monsters wake up much quicker as a result of this spell.
X.TP 1.5i
X.B magic bolt
X.I magic level necessary:
X3
X.br
X.I manna used:
Xvariable
X.br
XUsed while combatting monsters. Hits the monster based upon the amount
Xof
X.B manna
Xexpended and
X.B magic level.
XGuaranteed to hit at least 10 per
X.B manna.
X.TP 1.5i
X.B force field
X.I magic level necessary:
X7
X.br
X.I manna used:
X20
X.br
XUsed during monster combat. Throws up a shield to protect from damage.
XThe shield is added to actual energy level, and is a fixed number, based
Xupon maximum energy. Normally, damage occurs first to the shield, and
Xthen to the players actual
X.B energy level.
X.TP 1.5i
X.B transform
X.I magic level necessary:
X10
X.br
X.I manna used:
X35
X.br
XUsed during monster combat. Transforms the monster randomly into one
Xof the other 100 monsters from the monster file.
X.TP 1.5i
X.B increase might
X.I magic level necessary:
X15
X.br
X.I manna used:
X55
X.br
XUsed during combat with monsters. Increases strength up to a certain maximum.
X.TP 1.5i
X.B invisibility
X.I magic level necessary:
X20
X.br
X.I manna used:
X45
X.br
XUsed while fighting monsters. Makes it harder for the monster to hit,
Xby temporarily increasing the player's
X.B quickness.
XThis spell may be thrown several times, but a maximum level will be reached.
X.TP 1.5i
X.B transport
X.I magic level necessary:
X25
X.br
X.I manna used:
X50
X.br
XUsed during monster combat. Transports the monster away from the
Xplayer. Success is base upon player's
X.B magic
Xand
X.B brains,
Xand the monster's
X.B experience.
XIf it fails the player is transported instead. 60% of the time, the monster
Xwill drop any treasure it was carrying.
X.TP 1.5i
X.B paralyze
X.I magic level necessary:
X30
X.br
X.I manna used:
X60
X.br
XUsed during monster combat. "Freezes" the monster by putting its
X.B quickness
Xslightly negative. The monster will slowly wake up. Success is based
Xupon player's
X.B magic
Xand the monster's
X.B experience.
XIf it fails, nothing happens.
X.TP 1.5i
X.B specify
X.I magic level necessary:
Xnone
X.br
X.I manna used:
X1000
X.br
XUsed during monster combat only by
X.B valar
Xor
X.B council of the wise.
XAllows the player to pick which monster to fight.
X.sh "Monsters"
XMonsters get bigger as one moves farther from the origin (0,0). Rings of
Xdistance 125 from the origin determine the size. A monster's
X.B experience, energy level,
Xand
X.B brains
Xare multiplied by the size.
X.B Strength
Xis increase 50% per size over one, and
X.B quickness
Xremains the same, regardless of size.
X.PP
XAlso, meaner monsters are to be found as one progress farther out
Xfrom the origin. Monsters also may flock. The percent chance of that
Xhappening is designated as
X.B flock%
Xin the monster listing. Monsters outside the first ring
Xmay carry treasure, as determined by their treasure type.
XFlocking monsters, and bigger monsters increase the chances of treasure.
X.PP
XCertain monsters have special abilities; they are as follows:
X.TP 1.5i
X.B Unicorn
Xcan only be subdued if the player is in possession of a
X.B virgin.
X.TP 1.5i
X.B Modnar
Xhas random characteristics, including treasure type.
X.TP 1.5i
X.B Mimic
Xwill pick another name from the list of monsters in order to
Xconfuse.
X.TP 1.5i
X.B Dark Lord
Xvery nasty person. Does not like to be hit (especially nicked),
Xand many spells do not work well against him.
XOne can always
X.B evade
Xfrom the
X.B Dark Lord.
X.TP 1.5i
X.B Leanan-Sidhe
Xalso a very nasty person. She will permanently sap
X.B strength
Xfrom someone.
X.TP 1.5i
X.B Saruman
Xwanders around with
X.B Wormtongue
X, who can steal a
X.B palantir.
XAlso,
X.B Saruman
Xmay turn a player's gems into gold pieces,
Xor scramble her/his stats.
X.TP 1.5i
X.B Thaumaturgist
Xcan transport a player.
X.TP 1.5i
X.B Balrog
Xinflicts damage by taking away
X.B experience
X, not
X.B energy.
X.TP 1.5i
X.B Vortex
Xmay take some
X.B manna.
X.TP 1.5i
X.B Nazgul
Xmay try to steal a
X.B ring
Xor neutralize part of one's
X.B brains.
X.TP 1.5i
X.B Tiamat
Xmay take half a players
X.B gold
Xand
X.B gems
Xand escape.
X.TP 1.5i
X.B Kobold
Xmay get nasty and steal one gold piece and run away.
X.TP 1.5i
X.B Shelob
Xmay bite, inflicting the equivalent of one
X.B poison.
X.TP 1.5i
X.B Assorted Faeries
XThese are killed if attacking someone carrying
X.B holy water.
XThese are
X.B Cluricaun, Fir Darrig, Fachan,
X.B Ghille Dhu, Bogle, Killmoulis,
Xand
X.B Bwca.
X.TP 1.5i
X.B Lamprey
Xmay bite, inflicting 1/2 of a
X.B poison.
X.TP 1.5i
X.B Shrieker
Xwill call one of its (much bigger) buddies if picked upon.
X.TP 1.5i
X.B Bonnacon
Xwill become bored with battle, fart, and run off.
X.TP 1.5i
X.B Smeagol
Xwill try to steal a
X.B ring
Xfrom a player, if given the chance.
X.TP 1.5i
X.B Succubus
Xmay inflict damage through a
X.B force field.
XThis subtracts from
X.B energy level
Xinstead of any shield the player may have thrown up.
XThis is a very easy way to die.
X.TP 1.5i
X.B Cerberus
Xloves metal and will steal all the metal treasures from
Xa player if able.
X.TP 1.5i
X.B Ungoliant
Xcan bite and poison. This inflicts five
X.B poisons
X, and also takes one from the player's
X.B quickness.
X.TP 1.5i
X.B Jabberwock
Xmay tire of battle, and leave after calling one of his friends
X(
X.B Jubjub Bird
Xor
X.B Bandersnatch
X).
X.TP 1.5i
X.B Morgoth
Xactually
X.B Modnar
X, but reserved for
X.B council of the wise, valar,
Xand
X.B ex-valar.
XFights with
X.B Morgoth
Xend when either he or the player dies. His characteristics
Xare calculated based upon the player's. The player is given
Xthe chance to ally with him. No magic, except
X.B force field
Xworks when battling
X.B Morgoth.
X.TP 1.5i
X.B Troll
Xmay regenerate its
X.B energy
Xand
X.B strength
Xwhile in battle.
X.TP 1.5i
X.B Wraith
Xmay make a player blind.
X.sh "Treasures"
XVarious treasure types are as follows:
X.TP 1.5i
X.B Type zero
X.I none
X.TP 1.5i
X.B Type one
X.I power booster
X\- adds manna.
X.br
X.I druid
X\- adds experience.
X.br
X.I holy orb
X\- subtracts 0.25 sin.
X.TP 1.5i
X.B Type two
X.I amulet
X\- protects from cursed treasure.
X.br
X.I holy water
X\- kills
X.B assorted faeries.
X.br
X.I hermit
X\- reduces sin by 25% and adds some manna.
X.TP 1.5i
X.B Type three
X.I shield
X\- adds to maximum
X.B energy level
X.br
X.I virgin
X\- used to subdue a
X.B unicorn
X, or to give much
X.B experience
X(and some
X.B sin
X).
X.br
X.I athelas
X\- subtracts one
X.B poison.
X.TP 1.5i
X.B Type four (scrolls)
X.I shield
X* \- throws a bigger than normal
X.B force field.
X.br
X.I invisible
X* \- puts the finder's
X.B quickness
Xto one million.
X.br
X.I ten fold strength
X* \- multiplies finder's strength by ten.
X.br
X.I pick monster
X\- allows finder to pick next monster to battle.
X.br
X.I general knowledge
X\- adds to finder's
X.B brains
Xand
X.B magic level.
X.PP
XAll the scrolls except
X.B general knowledge
Xautomatically call a monster. Those that are marked with a * preserve any
Xspells that were already in effect. Those that call monsters are only in
Xeffect while in battle.
X.TP 1.5i
X.B Type five
X.I dagger
X\- adds to
X.B strength.
X.br
X.I armour
X\- same as a
X.B shield,
Xbut bigger.
X.br
X.I tablet
X\- adds brains.
X.TP 1.5i
X.B Type six
X.I priest
X\- rests to maximum; adds
X.B manna, brains;
Xand halves
X.B sin.
X.br
X.I Robin Hood
X\- increases
X.B shield
Xand adds permanently to
X.B strength.
X.br
X.I axe
X\- like
X.B dagger,
Xbut bigger.
X.TP 1.5i
X.B Type seven
X.I charm
X\- protects from cursed treasure (used before
X.B amulet
X); used in conjunction with
X.B blessing
Xto battle
X.B Dark Lord.
X.br
X.I Merlyn
X\- adds
X.B brains, magic,
Xand
X.B manna.
X.br
X.I war hammer
X\- like an
X.B axe,
Xbut bigger.
X.TP 1.5i
X.B Type eight
X.I healing potion
X\- sets
X.B poison
Xto -2, or subtracts two from
X.B poison,
Xwhichever is better.
X.br
X.I transporter
X\- allows finder to move anywhere.
X.br
X.I sword
X\- like a
X.B war hammer
X, but bigger.
X.TP 1.5i
X.B Type nine
X.I golden crown
X\- allows the player to become
X.B king,
Xby going to (0,0).
X.br
X.I blessing
X\- cuts
X.B sin
Xto 1/3, adds
X.B manna,
Xrests to max., and kills
X.B Dark Lord
Xwith a
X.B charm.
X.br
X.I quicksilver
X\- adds to
X.B quickness.
X.TP 1.5i
X.B Type ten
X.I elven boots
X\- adds permanently to
X.B quickness.
X.TP 1.5i
X.B Type eleven
X.I palantir
X\- allows one to see all the other players; used by
X.B council of the wise
Xto seek the
X.B grail.
X.TP 1.5i
X.B Type twelve/thirteen
X.I ring
X\- allows one to hit much harder in battle, etc.
X.PP
XAny treasure type 10-13 monsters may instead carry a type nine treasure.
X.PP
XA monster may also be carrying
X.B gold
Xor
X.B gems.
XThese are used at
X.B trading posts
Xto buy things. A
X.B gem
Xis worth 1000 gold pieces. Too much
X.B gold
Xwill slow a player down. One may carry 1000 plus 200 per
X.B level
Xof
X.B gold.
XA
X.B gem
Xweighs one half a gold piece.
XMonsters of treasure type 7 or higher may carry
X.B gems.
X.PP
XThe chance of a cursed treasure is based upon treasure type.
XThe more valuable treasures have a greater chance of being cursed.
XA cursed treasure knocks
X.B energy level
Xvery low, and adds 0.25
X.B poison.
X.sh "Rings"
X.B Rings
Xare only carried by
X.B nazguls
Xand
X.B Dark Lord.
XThey come in four different flavors.
XAll
X.B rings
Xrest the player to maximum and cause him/her to hit much harder
Xin battle with monsters (assuming one has chosen to use the
X.B ring
Xfor battle.)
X.PP
XTwo types of
X.B rings
Xare cursed and come either from
X.B nazguls
Xor
X.B Dark Lord.
XAfter a few times of using these types, the player falls
Xunder the control of the
X.B ring,
Xand strange, random things will occur.
XEventually, the player dies, and gives his/her name to a monster
Xon the file.
XDying before the
X.B ring
Xis used up also renames the monster.
X.PP
XThe two remaining types of
X.B rings
Xare much more benign.
XThe one from a
X.B nazgul
Xis good for a limited number of battle rounds, and will save
Xthe player from death if it was being used when he/she died.
XThe one from
X.B Dark Lord
Xis the same, except that it never is used up.
X.B rings
Xdisappear after saving someone from death.
XIn general, cursed
X.B rings
Xoccur much more often than normal ones.
XIt is usually not a good idea to pick one up.
XThe only way to get rid of a
X.B ring
Xis to have a monster steal it.
X.sh "King"
XA player may become
X.B king by finding a
X.I crown
Xand going to (0,0). Players must have a
X.B level
Xin the range of 10 to 1000 to be able to find a
X.I crown.
X.PP
XOnce a player is king, he/she may do certain things while in
Xthe Lord's Chamber (0,0). These fall under the
X.B decree
X('0') option.
X.TP 1.5i
X.I transport
XThis is done to another player. It randomly moves the affected
Xplayer about. A
X.B charm
Xprotects from transports.
X.TP 1.5i
X.I curse
XThis is done to another player. It is analogous to cursed treasure,
Xbut worse. It inflicts two
X.B poison,
Xknocks
X.B energy level
Xvery low, and degrades the maximum energy. It also
Xremoves a
X.B cloak.
XA
X.B blessing
Xprotects from king's curses.
X.TP 1.5i
X.I energy void
XThe king may put as many of these (within reason) scattered about
Xhis/her kingdom as he/she pleases.
XIf a player hits one, he/she loses
X.B manna, energy,
Xand
X.B gold.
XThe energy void disappears after being hit.
X.TP 1.5i
X.I bestow
XThis is also done to another player. The king may
Xwish to reward one or more loyal subjects by sharing his/her
Xriches (
X.B gold
X). Or it is a convenient way to dispose of some unwanted
Xdeadweight.
X.TP 1.5i
X.I collect taxes
XEveryone pays 10% tax on all
X.B gold
Xcollected, regardless of the existence of a
X.B king.
XThe king may collect this amount with this option.
X.PP
XThe
X.B king
Xmay also
X.B teleport
Xanywhere for free by using the origin as a starting place.
X.sh "Special Places"
XCertain regions of the playing grid have different names.
XIn general, this is only to give the player some idea of
Xhis/her present location. Some special places do exist.
X.TP 1.5i
X.I Trading Posts
XThese are located at |x| == |y| == n*n*100 for n = 1, 2...1000.
XTrading posts farther out have more things for sale.
XBe careful about cheating merchants there, as they have short
Xtempers.
XMerchants are dishonest about 5% of the time.
X.TP 1.5i
X.I Lord's Chamber
XThis is located at (0,0). Only players with
X.B crowns
Xmay enter.
X.TP 1.5i
X.I Point of No Return
XThis is located beyond 1.2e+6 in any direction.
XThe only way to return from here is a
X.B transporter
Xor to have a
X.B valar
Xrelocate the player.
X.TP 1.5i
X.I Dead Marshes
XThis is a band located fairly distant from the origin. The first
Xfourteen monsters (water monsters) can normally only be found here.
X.TP 1.5i
X.I Valhala
XThis place is where the
X.B valar
Xresides. It is associated with no particular coordinate on the
Xplaying grid.
X.TP 1.5i
X.I Wormholes
XAt fixed locations on the grid are several holes to underground
Xdefects in the playing area.
XSixty-four chambers exist; sixteen of which open to the outside
Xworld.
XWhile in the wormholes, one move by going forward, backward,
Xleft, or right.
XOne can always undo a move by going in the opposite direction.
XThe wormholes are mappable.
XFor example, to move from the first wormhole {at (-400,0)} to
Xthe second wormhole, type 'LL'.
X.sh "Miscellaneous"
XThere are several bits of trivial knowledge which fall under this category.
X.PP
XA
X.I guru
Xwill never be disgusted with your
X.B sins
Xif they are less than one.
X.PP
XA
X.I medic
Xwants half of a player's
X.B gold
Xto be happy. Offering more than one has, or a negative amount
Xwill anger the
X.I medic,
Xwho will make the player worse (add one
X.B poison
X).
X.PP
XThe
X.B Holy Grail
Xdoes little for those who are not ready to behold it.
XWhenever anyone finds it, it moves.
XIt is always located within 1e+6 in any compass direction of the origin.
X.PP
XThere is a maximum amount of
X.B manna
Xand
X.B charms
Xa player may posses, based upon
X.B level.
X.I Quicksilver
Xis always limited to to a maximum of 99.
X.PP
X.I Books
Xbought at a
X.B trading post
Xincrease
X.B brains,
Xbased upon the number bought.
XIt is unwise, however to buy more than 1/10 of one's
X.B level
Xin books at a time.
X.PP
XPlayers over level 10000 are automatically retired.
X.PP
XA
X.I blindness
Xgoes away in random time.
X.sh "Inter-terminal Battle"
XWhen two player's coordinates correspond, they may engage in battle.
XIn general, the player with the highest
X.B quickness
Xgets the first hit.
XIf the two players are severely mis-matched, the stronger player
Xis drastically handicapped for the battle.
XIn order to protect from being stuck in an infinite loop,
Xthe player waiting for response may time out. Options for battle are:
X.TP 1.5i
X.I fight
XInflicts damage upon other person.
X.TP 1.5i
X.I run away
XEscape from battle. Has a 75% chance of working.
X.TP 1.5i
X.I power blast
XBattle spell.
X.TP 1.5i
X.I luckout
XOne-time chance to try to win against the foe. Has a 10% chance of working.
X.PP
XSometimes waits for the other player may be excessive, because
Xhe/she may be battling a monster. Upon slaying a player in battle
Xthe winner gets the other's
X.B experience
Xand treasures.
X.B Rings
Xdo not work for inter-terminal battle.
X.sh "Council of the Wise, Valar"
XA player automatically becomes a member of the
X.B council of the wise
Xupon reaching level 3000. Members of the council cannot have
X.B rings.
XMembers of the council have a few extra options which they can exercise.
XThese fall under the
X.B intervention
X('8') option.
XOne is to
X.I heal
Xanother player. This is just a quick way for that player to be rested
Xto maximum and lose a little
X.B poison.
XThe main purpose in life for members of the council is to seek the
X.B Holy Grail.
XThis is done with a
X.B palantir
Xunder the
X.I seek grail
Xoption. The distance cited by the seek is accurate within 10%, in order
Xnot to make it too easy to find the grail. Seeking costs 1000
X.B manna.
XA player must have infintesimally small
X.B sin,
Xor else it's all over upon finding the grail.
XIn order to help members of the council on their quest, they
Xmay
X.I teleport
Xwith greater ease.
X.PP
XUpon finding the grail, the player advance to position of
X.B valar.
XHe/she may then exercise more and niftier options under
X.I intervention.
XThese include all of the council members' option plus the
Xability to move other players about, bless them, and throw monsters at
Xthem.
X.B Valar
Xare essentially immortal, but are actually given five lives.
XIf these are used up, the player is left to die, and becomes an
X.B ex-valar.
X.B Valar
Xcannot
X.I move, teleport,
Xor call monsters.
XAny monsters which a
X.B valar
Xencounters are based upon his/her size.
XOnly one valar may exists at a time.
XA player replaces the exiting valar upon finding the grail.
XThe valar is then bumped back to the council of the wise.
X.SH BUGS
XMany. The whole program is a hack. The handling of incorrectly
Xexitted characters is a kludge. The screen is set up assuming a 24 by 80
Xcharacter screen; no attempt was made to provide otherwise.
XIf the program is not set uid, it crashes on the first attempt to open a
Xdata file.
XIf any of the data items get too big for the allotted space on the screen,
Xno guarantees are made about what will happen.
XThere should be a way to change a character's name.
!EOR!
echo extracting - setfiles.c
sed 's/^X//' > setfiles.c << '!EOR!'
X/*
X * setfiles.c Program to set up all files for Phantasia
X */
X
X#include "phant.h"
X
Xmain(argc,argv) /* program to init. files for Phantasia */
Xint argc;
Xchar **argv;
X{
XFILE *fp;
Xstruct stats sbuf;
Xstruct nrgvoid grail;
Xint ch;
X
X umask(077);
X srand((int) time(NULL));
X fp = fopen(goldfile,"w");
X fclose(fp);
X fp = fopen(motd,"w");
X fclose(fp);
X fp = fopen(messfile,"w");
X fclose(fp);
X printf("Do you want to reset the character file (necessary for startup) ? ");
X ch = getchar();
X if (toupper(ch) == 'Y')
X {
X buildchar(&sbuf);
X strcpy(sbuf.name,"<null>");
X fp = fopen(peoplefile,"w");
X fwrite(&sbuf,sizeof(sbuf),1,fp);
X fclose(fp);
X }
X grail.active = TRUE;
X grail.x = roll(-1.0e6,2.0e6);
X grail.y = roll(-1.0e6,2.0e6);
X fp = fopen(voidfile,"w");
X fwrite(&grail,sizeof(grail),1,fp);
X fclose(fp);
X fp = fopen(lastdead,"w");
X fputs(" ",fp);
X fclose(fp);
X}
X
Xbuildchar(stat) /* put in some default values */
X/* Note that this function is almost the same as initchar().
X It is used to insure that unexpected values will not be found in a
X new character file. */
Xstruct stats *stat;
X{
X stat->x = roll(-125,251);
X stat->y = roll(-125,251);
X stat->exp = stat->lvl = stat->sin = 0;
X stat->crn = stat->psn = 0;
X stat->rng.type = NONE;
X stat->rng.duration = 0;
X stat->pal = FALSE;
X stat->hw = stat->amu = stat->bls = 0;
X stat->chm = 0;
X stat->gem = 0.1;
X stat->gld = roll(25,50) + roll(0,25) + 0.1;
X stat->quks = stat->swd = stat->shd = 0;
X stat->vrg = FALSE;
X stat->typ = 0;
X}
!EOR!
echo extracting - monsters
sed 's/^X//' > monsters << '!EOR!'
Xa Water Leaper 12 14 16 24 59 0 0 62
Xa Leech 4 19 29 30 66 0 0 73
Xa Urisk 13 30 15 46 127 1 0 3
XShellycoat 28 21 18 63 226 2 0 0
Xa Naiad 21 62 27 58 378 2 0 11
Xa Nixie 22 58 28 108 604 3 0 6
Xa Glaistig 21 106 25 127 1002 3 0 0
Xa Mermaid 18 116 22 108 809 3 0 0
Xa Merman 24 115 23 109 808 4 0 0
Xa Siren 22 128 31 89 915 4 0 24
Xa Lamprey 14 67 33 156 1562 4 15 37
Xa Kopoacinth 26 36 26 206 2006 5 0 20
Xa Kelpie 61 25 24 223 4025 5 0 0
Xan Aspidchelone 114 104 19 898 10041 7 0 2
Xan Idiot 13 14 16 28 49 0 0 0
Xsome Green Slime 1 5 45 100 57 0 0 26
Xa Pixie 11 29 23 26 64 0 0 32
Xa Serpent 10 18 25 25 79 0 0 10
Xa Cluricaun 12 27 20 30 81 0 14 5
Xan Imp 22 30 14 40 92 0 0 1
Xa Centipede 3 8 18 15 33 0 0 61
Xa Beetle 2 11 21 26 44 0 0 48
Xa Fir Darrig 18 22 17 35 107 0 14 1
XModnar 15 23 20 40 101 7 2 12
Xa Gnome 7 45 26 23 111 0 0 21
Xa Sprite 9 37 25 31 132 1 0 43
Xa Mimic 11 55 29 47 213 1 3 2
Xa Kobold 13 10 14 21 121 1 12 68
Xa Spider 6 11 28 28 124 1 0 57
Xan Uldra 14 37 21 32 93 1 0 6
Xa Gnoll 20 25 15 40 166 1 0 61
Xa Bogie 23 28 19 57 189 1 0 57
Xa Fachan 9 40 15 45 139 1 14 10
Xa Moron 3 1 10 10 28 0 0 100
Xan Orc 25 13 16 26 141 1 0 92
Xa Ghillie Dhu 12 16 13 28 104 2 14 2
Xa Bogle 19 15 16 35 157 2 14 15
Xa Shrieker 2 62 27 9 213 2 16 0
Xa Carrion Crawler 12 20 20 65 142 2 0 42
Xa Trow 15 17 23 51 136 2 0 36
Xa Warg 20 10 17 45 152 2 0 88
Xa Stirge 2 6 35 25 153 2 0 95
Xa Crebain 5 11 31 31 82 2 0 81
Xa Killmoulis 30 19 8 75 175 3 14 22
Xa Hob-goblin 35 20 15 72 246 3 0 18
Xa Unicorn 27 57 27 57 627 3 1 0
Xa Fenoderee 16 6 21 65 222 3 0 42
Xan Ogre 42 14 16 115 409 3 0 19
Xa Dodo 62 12 11 76 563 3 0 3
Xa Hydra 14 27 33 99 599 3 0 27
Xa Hamadryad 23 47 26 62 426 3 0 12
Xa Bwca 21 17 19 55 387 3 14 1
Xan Owlbear 35 16 18 100 623 4 0 22
XBlack Annis 37 52 15 65 786 4 0 2
Xa Jello Blob 45 23 12 114 1191 4 0 0
Xa Wichtlein 13 40 25 61 800 4 0 8
Xa Cocodrill 39 28 24 206 1438 4 0 38
Xa Troll 75 12 20 185 1013 4 24 29
Xa Bonnacon 89 26 9 255 1661 4 17 14
Xa Gargoyle 22 21 29 200 1753 5 0 7
Xa Chaladrius 8 49 37 172 1929 5 0 20
Xa Gwyllion 27 73 20 65 1888 5 0 4
Xa Cinomulgus 23 2 10 199 263 5 0 18
Xa Peridexion 26 32 24 98 1300 5 0 2
XSmeagol 41 33 27 373 2487 5 18 0
Xa Wraith 52 102 22 200 3112 5 25 13
Xa Snotgurgle 143 19 26 525 4752 6 0 3
Xa Phooka 42 63 21 300 4125 5 0 12
Xa Vortex 101 30 31 500 6992 6 9 4
XShelob 147 64 28 628 5003 7 13 0
Xa Thaumaturgist 35 200 23 400 7628 6 7 0
XSmaug 251 76 26 1022 9877 7 0 0
Xa Cold-drake 301 102 24 1222 10888 7 0 0
Xa Red Dragon 342 141 23 1299 11649 8 0 0
XScatha the Worm 406 208 20 1790 11999 8 0 0
XTiamat 506 381 29 2000 13001 9 11 0
Xa Bandersnatch 105 98 22 450 7981 6 0 3
Xa Harpy 103 49 24 263 7582 6 0 2
Xa Tigris 182 38 17 809 7777 6 0 3
Xa Gryphon 201 45 19 813 8888 7 0 1
Xa Coblynau 205 46 18 585 8333 6 0 2
Xa Chimaera 173 109 28 947 12006 7 0 0
Xa Jack-in-Irons 222 36 12 1000 9119 7 0 0
XSaruman 55 373 17 1500 17101 11 6 0
Xa Balrog 500 100 25 705 8103 7 8 0
XArgus 201 87 14 1500 10010 8 0 0
Xa Titan 302 1483 12 1625 11011 8 0 0
XCacus 256 43 19 1750 12012 8 0 0
XBegion 403 154 10 1875 13013 8 0 0
XGrendel 197 262 23 2000 14014 8 0 0
Xa Nazgul 250 251 26 1011 9988 12 10 9
Xa Succubus 186 1049 27 2007 19984 9 19 0
XRed Cap 143 50 35 1965 23456 9 0 0
Xa Nuckelavee 300 75 20 2185 11111 8 0 0
XCerberus 236 96 29 2600 25862 9 20 0
Xa Jabberwock 185 136 25 2265 23256 9 22 0
XUngoliant 399 2398 37 2784 27849 10 21 0
XLeanan-Sidhe 486 5432 46 3000 30004 9 5 0
Xthe Dark Lord 9999 9999 31 19999 30005 13 4 0
!EOR!
More information about the Comp.sources.unix
mailing list