

   ^   |    sssss p   ddddd  fff  ggggg hhhh   iii  j   j    |   ^
  /|\  |    s     p   d     f   f   g   h   h i   i jj  j    |  /|\
   |   |    sss   p   ddd   f       g   hhhh  i   i j j j    |   |
   |  \|/   s     p   d     f   f   g   h   h i   i j  jj   \|/  |
   |   v    sssss ppp ddddd  fff    g   h   h  iii  j   j    v   |

                        copyright 1999-2000
                  Martijn Versteegh & Hein Zelle



********************* Intro ***************************************

Somewhere around Oktober 1999 we (Hein Zelle & Martijn Versteegh)
decided it would be fun to write a game together.
To make sure we would really get on with it we planned to
pick one evening in the week, and reserve that for programming on
our projects.

We started by thinking of things to make, both Hein & Martijn
had both more than enough ideas for games.

We decided it had to be simple, so we could actually try to finish
it (phew, we're glad we took a 'simple' game, since a complex game
would have been even more complex ;-) ).

After some discussion we decided the world needed a graphical
overhead networked multiplayer running/shooting/tagging game.
We decided it would be loosely based on the game 'Tron'
a fast paced MUD (multi user dungeon) Hein knew.
(which is in turn loosely based on the movie of the same name).

Ok, we started out with a few evenings designing a global setup and
a communication protocol (yes, we really designed this thing ;-) )
and started programming.

We needed a name, since Hein had been doing an Applied Quantum Mechanics
exam and we really were in a bit of a corny mood all our variable
names became references to solid state physics  (we did not have
a grid: we had a lattice etc). in the same mood we christened the 
project 'Electron'.

******************** Building & Running******************************

at the moments it only builds on linux/fbcon or X , sorry for that,
we eventually plan to do a windows release as well. perhaps a
DOS release if we can get the networking working there.

you need the allegro library for this to  build
you can find that at
http://www.talula.demon.co.uk/allegro/

ok... unzip the thing including directories
(you probably did that already if you're reading this)

go into the electron directory and run './configure'
followed by 'make'
optionally you can edit makefile.def in that directory before running make,
to turn on debugging options etc. (if we didn't forget to do it, we turned
all debugging options off before releasing)

this should produce 2 executables named 'st' and 'ct'
(short for servertest and clienttest)
if it doesn't you have found a bug already and we hope you'd be
so very kind to tell us about it.

'make install' (as superuser) will install both executables
under the names electronserver and electronclient in the directory
selected with configure (default /usr/local/bin)
and it will create a data directory /usr/local/share/electron
with datafiles and maps


the client (ct) supports some commandline options,
run 'ct -help' to get a list

all options except '-st' are remembered in the configfile, so if you specify '-l 1' once
it will use lighting method 1 until you specify '-l 0'

also the server has some commandline options, use 'st -help' to get a list

if you have a network, you could try to run it over that, it supports
normal internet adresses. [31-05-2000] The game now runs properly over
a modem connection.

at the moment a maximum of 16 connections to the server can be made at
the same time. 

************************* The Game ********************************

The game is actually playable (though a bit boring due to lack of
variation/possibilities)

You can pick up keys. You need them to ride the vehicles.
At the moment you cannot really see which key fits which vehicle, you'll have to try.

You can walk around and pick up or ride the motorcycle.

You can enter the tank, ride it, and shoot grenades.
You can turn the tank: required for driving.

You can shoot balls with a launcher, and pick them up to reload the thing.

Keys in the client:

arrows: walk
F1/F2 enter/exit a vehicle
F3/F4 pickup /drop a key
F5/F6 zoom out/zoom in map.
F7 print fps count
F8 dump lots of debug stats to stdout
F9 kill server from a client
F10 send turn command (the first time it sends a turn north, the
second time a turn east, etc)
F12 abort (coredump)
ESC exit game
PRTSCRN screenshot

PGUP/PGDOWN scroll in the console

ALT 1-4  show different console-streams (1-everything, 2-warnings, 3=severe warnings
     4=server output (when -st is used))

when the console is translucent it can be resized with

CTRL-PGUP/CTRL-PGDN


the client now also understands some commands typed in from the
console. Type 'help' in the game to get a list of commands

the 'd' command can be used to send command packets to the server that
are not under a specific key yet.

nice are the following tricks

d 9 x y - shoot at (x,y) , only works when you have the tank key
d 8 0 - turn tank north  , only works when you have the tank key
d 8 1 - turn tank east   , only works when you have the tank key
d 8 2 - turn tank south  , only works when you have the tank key
d 8 3 - turn tank west   , only works when you have the tank key

you can use 'alias' to set these to something more convenient:
alias tw "d 8 3"
the tw command then does a turn west.

you could make a fire alias like this:
alias fire "d 9 %0 %1"


symbolic names:
the parser understands some symbolic names,
for example the command 'look me' displays info about yourself, and 'enter tank'
enters the tank.

You can use the 'set' command to add your own.

Keys can be bound to command, for example you can bind 'alt-l' to 'look',
to save some typing during playing.


Keys in the server:

^C  ( :-) )
The server can either be killed, aborted, or stopped with a shutdown
command from the client. (F9)


********** the source **********************************************

The source is organised in several subdirectories:

 ./common - code common between the server & client programs
 ./common/actors - all entities in the game
                   (rooms/players/monsters etc)
 ./net - networking code
 ./server - server program code
 ./server/actors - server versions of all actors (derived from the
                   common ones)
 ./client -client program code
 ./client/renderer - displaying code base class
 ./client/renderer/renderer_ppe - client displaying code
 ./client/renderer/renderer_ppe/ppe - library for the above display code

 ./client/parser - the client commnd parser
 ./data          - datafile with graphics 
 ./mapedit       - a simple utility to convert a simple ascill file to a mapfile
                   some day our mapeditor will reside in this directory

 to keep it a bit organised, the contents of each directory's
 objectfiles are gathered in a library before linking the whole thing
 together
                     


********** other non-program files in this directory ***************

damage.txt DUMMIES.TXT, FUTURE.txt  older design documents, now
obsolete probably, also they're in dutch ;-)

new_actor.txt how to add a new actor type

TODO.txt - our todo file. Mainly in dutch with some programmer
'dunglish' inbetween, sorry for that ;-)

TAGS - emacs tagsfile

KNOWNBUGS.txt - mysterious features

*.epr - setedit project files
                                                                    
*********************** Copyright & licence ************************

Copyright

all code in this poject is:
Copyright Hein Zelle & Martijn versteegh 1999 - 2000.

Licence & Distributions:

Eventually it will probably be Giftware, Freeware or GPL or something
but until it's a bit more stabilised we'd prefer other people
not to re-use our code, so:

You may freely distribute this code as long as you do not
modify it and leave this message in a file README.txt in the archive.
You may ofcourse use any ideas in the code, but you are not
(yet) allowed to re-use the code itself.


********************** Contact Info *********************************

email:

hein@icce.rug.nl
or
m.versteegh@hccnet.nl

The Electron web site is at

http://www.icce.rug.nl/~hein/electron.html

