@DATABASE Tangle.guide
@MASTER Tangle.guide
@$VER: Tangle 2.0 Documentation  (95.08.13)
@AUTHOR "Ola Lundkvist & Len Trigg"
@(C) "Wizo"
@INDEX "Index"

@NODE "Main" "The Tangle 2.0"
               @{BG Fill}                                            @{BG Back}
      @{BG Shine} @{BG Fill}    @{BG Back}    @{BG Fill} @{BG Back}   @{B}The Tangle@{UB} version 2.0
          @{BG Fill}      @{BG Back}   ======================

                   @{"     Introduction      " LINK "Introduction"}
                   @{"      Disclaimer       " LINK "Disclaimer"}
                   @{"     Distribution      " LINK "Distribution"}
                   @{"       Shareware       " LINK "Shareware"}
                   @{"     Requirements      " LINK "Requirements"}
                   @{"     Installation      " LINK "Installation"}
                   @{"      Main Screen      " LINK "Main Screen"}
                   @{"       ToolTypes       " LINK "ToolTypes"}
                   @{"     CLI Arguments     " LINK "CLI Arguments"}
                   @{"       Playing         " LINK "Playing"}
                   @{"       Comments        " LINK "Comments"}
                   @{"        History        " LINK "History"}
                   @{"        Future         " LINK "Future"}
                   @{"        Thanks         " LINK "Thanks"}
                   @{" Contacting the Author " LINK "Author"}
                   @{"         Index         " LINK "Index"}
@ENDNODE
@NODE "Introduction"
This is a tron like game for up to four players. The object of the game is
to survive as long as possible without running into anything. What makes
Tangle go beyond other tron like games are:

    * Very configurable (variable speed, point size, and other options)

    * Allows from 0 to 4 human players (with configurable control)

    * Allows from 0 to 4 computer controlled players

    * Several (4) algorithms for the computer players to choose from

    * Will run in any screen resolution (3 bitplanes required)

    * Will use your favourite font

    * Is a @{I}lot@{UI} of fun

    * 100% fair play (simultanous death = equal points)

    * Take tooltypes or CLI arguments for your prefered settings

    * Is a @{B}lot@{UB} of fun
@ENDNODE
@NODE "Disclaimer"

<std.disclaimer>
----------------

This software is provided as is, and the author cannot be held responsible
for any damage caused by this program.


However this does not mean that this software is not carefully written and
tested. It's systemfriendly and stable, with no known bugs. If you anyhow
find a bug, please tell me about it so I can fix it.
@ENDNODE
@NODE "Distribution"
The Tangle is shareware and is Copyright © 1992-95 Wizo. This means that
you are allowed to spread this or include it on PD-series provided that you
don't charge more than a small copy fee of maximum $5 / DM 6 / SEK 25. It's
absolutely forbidden to charge more for a disk with this program on it
without my personal permission.

This may also be included on CD-ROM (for example AmiNet CD-releases) as
long as it's not part of a commercial release, ie contains only
Shareware/PD/Freeware etc.

Magazines with cover-disks/CDs may include this on their disk/CD provided
they send me a copy of the magazine (and disk/CD) in question.

Other sorts of distribution is not allowed without my personal permission.

The program may not be distributed without it's icon and this
documentation.

Modified versions of the program, it's icon, or this documentation may not
be distributed. You may however include extra icon's (which may be modified
versions of the original icon) in the distribution. Distribution of the
files in packed or archived form is of course also allowed.


That should cover it all, if it doesn't @{" contact me " LINK "Author"} for clarification.
@ENDNODE
@NODE "Shareware"
If you after trying this game out (for no longer than two weeks) find that
you wish to keep it you should do as follows to become a registered user:


1   If you have written any useful program(s) / fun game, wether it's PD,
    shareware or commercial, you should send @{" me " LINK "Author"} a copy of it (fully
    feautured). Then you will become a registered user of all my software
    as well.


2   If you haven't written any software of your own either:

  a   You're a student or don't have a job so you can't afford to pay
      anything for this. Therefor you are allowed to use it absolutely
      free, but please take a hint from paragraph 3 below.

  b   You have some kind of job and therefor you can afford to pay for
      this. You can decide how much it's worth. I would suggest $5 - $10.
      Cash in US$, DM, £ and SEK (Swedish crowns) accepted.
      Cheques only in SEK. Gifts instead of money are also welcome.


3   Not doing anything of the above, but sending bug reports, nice ideas
    for improvements, or in other ways helping me out in developing my
    programs may also gain you the title of registered user.


Becoming a registered user means registered for all my other released
shareware software as well (currently @{" BlackBox " LINK "BlackBox.guide/main"} and @{" FourInaRow " LINK "FourInaRow.guide/main"}).
So far none of my software is crippled, since I personally don't believe
in crippleware. Therefor registered users will receive no new version if it
doesn't exist. As soon as they will be available however, registered users
will be notified or receive updates by email (If you want me to mail you a
disk, you either need to register by method 1, or donate at least $10).
New versions will probably be uploaded to AmiNet as well.

If you feel you can't afford to pay for this you need not feel lousy, but
sending a simple comment by @{" email " LINK "Author"} you could afford, right?
@ENDNODE
@NODE "Requirements"
Requirements:

    Tangle 2.0 requires Kickstart 2.04 or later.
    To be able to use different fonts you, of course, need to have
    diskfont.library in libs:.


Note to Kickstart 1.x users:
    You can still try @{" Tangle 1.1 " LINK "History"}, though it has a lot less feautures.
@ENDNODE
@NODE "Installation"
Installation:

No installation needed really.  Just put the executable, the icon and this
documentation with icon anywhere you like.

There might be some extra icons supplied. If you like any of those better
you could replace the original icon with that one. You have to do that
manually though, but that shouldn't be any problem.

Tangle will run from Workbench as well as from CLI/Shell. You can set your
favourite program options using icon @{" tooltypes " LINK "ToolTypes"} or @{" CLI arguments " LINK "CLI Arguments"}.
@ENDNODE
@NODE "Main Screen"
@NEXT "Advanced Options"
When you start Tangle, you will see the main screen, which is shown below:


       The Tangle

       @{" Help.  " LINK "About"}  About
       @{" F1.    " LINK "Name Screen"}  Names
       @{" F2.    " LINK "Key Screen"}  Keys                    Currently:
       @{" F3.    " LINK "HumanPlayers"}  Human players (0-4)       4
       @{" F4.    " LINK "AmigaPlayers"}  Amiga players (0-4)       4
       @{" F5.    " LINK "MatchLength"}  MatchLength (1-99)        10
       @{" F6.    " LINK "Speed"}  Speed (1-9)               5
       @{" F7.    " LINK "Accelleration"}  Acceleration (0-9)        0
       @{" F8.    " LINK "Size"}  Size (1,2,3,4,6,12)       4
       @{" F9.    " LINK "Grid"}  Grid (ON/OFF)             OFF
       @{" F10.   " LINK "Border"}  Border (ON/OFF)           OFF
       @{" Del.   " LINK "KillTail"}  KillTail (OFF,2-9)        2
       @{" BkSpc. " LINK "KillDead"}  KillDead (ON/OFF)         ON
       @{" Tab.   " LINK "Advanced Options"}  Advanced Options
       @{" Space. " LINK "Playing"}  Play
       @{" Esc.   " LINK "Quit"}  Quit

The values that are shown below 'Currently:' will depend on the values
specified as @{" tooltypes " LINK "ToolTypes"} or @{" CLI arguments " LINK "CLI Arguments"}. To change any of the settings
just press the corresponding key and enter the new value within the
displayed range. For ON/OFF options you don't need to input any value,
since they work like toggles. To start playing you can also press a
joystick button.
@ENDNODE
@NODE "About"
@TOC "Main Screen"
@PREV "Main Screen"
About:

Pressing help in the main menu will display brief version information etc.

@ENDNODE
@NODE "Name Screen"
@TOC "Main Screen"
The Name Screen:

From here you can change the names of the human players. Pressing F1
through F4 will select which player's name to change. Pressing Esc
returns to the @{" main screen " LINK "Main Screen"}. A name can be up to 12 characters long.
@ENDNODE
@NODE "Key Screen"
@TOC "Main Screen"
The Key Control Screen:

From here you can set the @{" type of control " LINK "Control Type"} for each of the human players.
You can deside which keys or joystick to use.
Pressing space will display the current settings.
Pressing Esc will return to the @{" main screen " LINK "Main Screen"}.
Pressing F1 - F4 will select which of the player's controls to adjust.
@ENDNODE
@NODE "Control Type"
@TOC "Main Screen"
You can control your snake in three different ways:

Absolute keys, which means that you use one key for each of the four
directions (up, down, left, right).

Relative keys, which means that you have one key for turning to the left
and for turning to the right.

Joystick, works as absolute keys but with the joystick instead. The fire-
button has no function in the game. You can use joysticks in both ports.

You can use any keys except esc, but it is not advisable to use capslock
since you need to press it twice for it to take action. And do not use too
many ctrl and amigakeys... :-).
@ENDNODE
@NODE "HumanPlayers" "Human Players"
@TOC "Main Screen"
HumanPlayers:

This is the number of human players that will be playing.


Valid values are from 0 to 4.
@ENDNODE
@NODE "AmigaPlayers" "Amiga Players"
@TOC "Main Screen"
AmigaPlayers:

This is the number of computer controlled players that will be in the game.


Valid values are from 0 to 4.
@ENDNODE
@NODE "MatchLength" "Match Length"
@TOC "Main Screen"
MatchLength:

This is the number of points that must be reached in order to win the game.

@{" Info about scoring. " LINK "Playing" 21}


Valid values are from 1 to 99.
@ENDNODE
@NODE "Speed"
@TOC "Main Screen"
Speed:

This is the speed at which the snakes move. The higher the number, the
faster they move.

All speed choices except the highest are timed for constant speed, so it
should work with correct speed on accelerated Amigas as well as Amigas
slowed down by other programs running at the same time. 68000-based Amigas
will be somewhat slow with @{" high resolutions " LINK "DisplayID"} and small @{" sizes " LINK "Size"}.


Valid values are from 1 to 9.
@ENDNODE
@NODE "Accelleration"
@TOC "Main Screen"
Acceleration:

With no acceleration the @{" speed " LINK "Speed"} is constant. With acceleration the speed
will increase as the round goes on, making the snakes move faster and
faster. 


Valid values are from 0 (no acceleration) to 9 (highest acceleration).
@ENDNODE
@NODE "Size"
@TOC "Main Screen"
Size:

This controls how large each block of the snake is. A size of 1 means each
block consists of one screen pixel. A size of 4 means each block is 4x4
pixels. Try playing with a size of 1 on a @{" high resolution screen " LINK "DisplayID"} -
"hairline mode" :-).


Valid values are 1, 2, 3, 4, 6, 12
@ENDNODE
@NODE "Grid"
@TOC "Main Screen"
Grid:

This controls whether a grid will be drawn on the playfield. Purely for
aesthetic reasons. Turning on the grid option will force the @{" size " LINK "Size"} to be
at least 3. Setting the size to 2 or 1 will turn off the grid. The grid
looks best on larger sizes (6 or 12).


Valid values are On, Off.
@ENDNODE
@NODE "Border"
@TOC "Main Screen"
Border:

With the border off you can exit the screen to the left just to enter it to
the right etc.


Valid values are On, Off.
@ENDNODE
@NODE "KillTail"
@TOC "Main Screen"
KillTail:

With this setting, you can set whether your tail follows you around or just
grows longer. The rate at which your tail grows can be controlled.

The value specified means that every x moves a block of your tail will
disappear, thus a KillTail value of 2 will have your tail lengthening as
slowly as possible.


Valid values are OFF, 2 to 9
@ENDNODE
@NODE "KillDead"
@TOC "Main Screen"
KillDead:

This option allows the battlefield to be cleared of the corpses of dead
snakes :-). Having this turned on means that the tail of the dead snake
will disappear until there is nothing left. When turned off, the dead
snakes stay there. This option works independently of @{" KillTail " LINK "KillTail"} ie. you
can have KillTail off and KillDead on.


Valid values are On, Off.
@ENDNODE
@NODE "Quit"
@TOC "Main Screen"
@NEXT "Advanced Options"

Quit:

Pressing esc in the main menu will quit the game (after confirmation).

@ENDNODE
@NODE "Advanced Options" "Advanced Options"
@NEXT "ToolTypes"
@PREV "Main Screen"
The Advanced Options screen looks like this:

     @{" F1.    " LINK "Friends"}  All the human players are:
     @{" F2.    " LINK "Algorithms"}  Amiga 1 Algorithm:
     @{" F3.    " LINK "Algorithms"}  Amiga 2 Algorithm:
     @{" F4.    " LINK "Algorithms"}  Amiga 3 Algorithm:
     @{" F5.    " LINK "Algorithms"}  Amiga 4 Algorithm:
     @{" F6.    " LINK "Computer Skill"}  Computer Skill (1-9):
     @{" F7.    " LINK "Quick Computer End"}  Quick Computer End:
     @{" F8.    " LINK "Paus Between Rounds"}  Pause Between Rounds
     @{" Space. " LINK "Main Screen"}  Return To Main Menu
@ENDNODE
@NODE "Friends" "Friends or Enemies"
@TOC "Advanced Options"
@PREV "Advanced Options"
This is whether the human players are working as friends or enemies.

If the humans are friends all their points are pooled. And all computer
players scores are also pooled. The first team to reach @{" MatchLength " LINK "MatchLength"}
points wins. Currently there are no modifications if there are different
number of human players and computer players (which is good since it makes
easy and hard games possible :-)).
@ENDNODE
@NODE "Algorithms" "Algorithms"
@TOC "Advanced Options"
@NEXT "Computer Skill"
These settings controls which algorithm should be used for the computer
controlled players. Currently there exists four algorithms: SIMPLE,
IMPROVED, DIAGONAL & SPIRAL.

SIMPLE
This is a simple algorithm that gives the snakes completely random
direction. A snake will however not die if it does not reach a dead end.

IMPROVED
Same as simple but the snake will try to turn to their last direction every
time they turn to avoid @{" boxing themself in " LINK "Boxed in"}.

DIAGONAL
A method which estimates areas by measuring diagonals to decide which
direction is best. This is too slow to be good on my (68000) Amiga but it
might be usable on 68040 Amigas. This algorithm uses the @{" Computer Skill " LINK "Computer Skill"}
setting to decide how long diagonals should followed as maximum. The higher
the Computer Skill the better and slower will this algorithm be. I would
recommend not to use this algorithm since my tests have showed that it's
not better than the SPIRAL or IMPROVED algorithms, which are much faster.

SPIRAL
This is the BEST algorithm at the movement. It works just like SIMPLE but
it checks an extra block ahead and always leave an empty space if possible.
This will lead to that it will not easily @{" box itself in " LINK "Boxed in"}, try it and see
for yourself.

BEST
BEST is a synonym to the best algorithm implemented. Currently SPIRAL.


Valid values are SIMPLE, IMPROVED, DIAGONAL, SPIRAL & BEST.
@ENDNODE
@NODE "Boxed in"
@TOC "Algorithms"
@NEXT "Computer Skill"
@PREV "Algorithms"
Boxed in? What are you talking about?

With boxed in I mean situations like this:
(+ is the body of the snake, * is the head)


   ++++++++++++++++++
         +++*       +
         +          +
         +          +
         ++++++++++++
@ENDNODE
@NODE "Computer Skill"
@TOC "Advanced Options"
@PREV "Algorithms"
Computer Skill:

This option may be used by some of the algorithms (currently only
@{" DIAGONAL " LINK "Algorithms" 12}). The higher the value the better the computer players will be
(if this value is used that is). The drawback is (of course) that it will
also slow the game down.


Valid Values are 1-9
@ENDNODE
@NODE "Quick Computer End"
@TOC "Advanced Options"
QuickComputerEnd:

With this option on, the game will speed up if there are only computer
controlled players left in the game (so you don't have to wait so long).
@ENDNODE
@NODE "Paus Between Rounds"
@TOC "Advanced Options"
@NEXT "ToolTypes"
PausBetweenRounds:

This option is mainly for my personal use, when I test @{" algorithms " LINK "Algorithms"}. With
this option off the game will not halt between rounds, but the new round
will start immidiately. Mostly useful with no human players and four
computer players with different algorithms to see which one is the best
(with @{" MatchLength " LINK "MatchLength"} 99).
@ENDNODE
@NODE "ToolTypes" "Icon Tooltypes"
@NEXT "CLI Arguments"
@PREV "Advanced Options"
The following Icon ToolTypes are valid:

    @{B}Player 1 Settings@{UB}           @{B}Player 2 Settings@{UB}
       @{"   Name1   " LINK "Names"}                 @{"   Name2   " LINK "Names"}
       @{"  Input1   " LINK "Input settings"}                 @{"  Input2   " LINK "Input settings"}
       @{" KeyLeft1  " LINK "Key Codes"}                 @{" KeyLeft2  " LINK "Key Codes"}
       @{" KeyRight1 " LINK "Key Codes"}                 @{" KeyRight2 " LINK "Key Codes"}
       @{"  KeyUp1   " LINK "Key Codes"}                 @{"  KeyUp2   " LINK "Key Codes"}
       @{" KeyDown1  " LINK "Key Codes"}                 @{" KeyDown2  " LINK "Key Codes"}

    @{B}Player 3 Settings@{UB}           @{B}Player 4 Settings@{UB}
       @{"   Name3   " LINK "Names"}                 @{"   Name4   " LINK "Names"}
       @{"  Input3   " LINK "Input settings"}                 @{"  Input4   " LINK "Input settings"}
       @{" KeyLeft3  " LINK "Key Codes"}                 @{" KeyLeft4  " LINK "Key Codes"}
       @{" KeyRight3 " LINK "Key Codes"}                 @{" KeyRight4 " LINK "Key Codes"}
       @{"  KeyUp1   " LINK "Key Codes"}                 @{"  KeyUp4   " LINK "Key Codes"}
       @{" KeyDown1  " LINK "Key Codes"}                 @{" KeyDown4  " LINK "Key Codes"}

              @{B}General Game Settings@{UB}
               @{"   HumanPlayers    " LINK "HumanPlayers"}
               @{"   AmigaPlayers    " LINK "AmigaPlayers"}
               @{"      Friends      " LINK "Friends"}
               @{"    MatchLength    " LINK "MatchLength"}
               @{"       Speed       " LINK "Speed"}
               @{"   Acceleration    " LINK "Accelleration"}
               @{"       Size        " LINK "Size"}
               @{"       Grid        " LINK "Grid"}
               @{"      Border       " LINK "Border"}
               @{"     KillTail      " LINK "KillTail"}
               @{"     KillDead      " LINK "KillDead"}
               @{"  Amiga1Algorithm  " LINK "Algorithms"}
               @{"  Amiga2Algorithm  " LINK "Algorithms"}
               @{"  Amiga3Algorithm  " LINK "Algorithms"}
               @{"  Amiga4Algorithm  " LINK "Algorithms"}
               @{"   ComputerSkill   " LINK "Computer Skill"}
               @{" QuickComputerEnd  " LINK "Quick Computer End"}
               @{" PausBetweenRounds " LINK "Paus Between Rounds"}
               @{"     DisplayID     " LINK "DisplayID"}
               @{"     FontName      " LINK "Font Name"}
               @{"     FontSize      " LINK "Font Size"}
               @{"      RGBBack      " LINK "Palette definition"}
               @{"      RGBGrid      " LINK "Palette definition"}
               @{"      RGBText      " LINK "Palette definition"}
               @{"      RGBColl      " LINK "Palette definition"}
               @{"    RGBPlayer1     " LINK "Palette definition"}
               @{"    RGBPlayer2     " LINK "Palette definition"}
               @{"    RGBPlayer3     " LINK "Palette definition"}
               @{"    RGBPlayer4     " LINK "Palette definition"}
@ENDNODE
@NODE "Names"
@TOC "ToolTypes"
@PREV "ToolTypes"
Names:

This is the name of the player. Only 12 characters may be used.
@ENDNODE
@NODE "Input settings"
@TOC "ToolTypes"
This decides which @{" type of control " LINK "Control Type"} that should be used. It can have one
of the following values:

    ABSOLUTE  (only first A relevant)
    RELATIVE  (only R relevant)
    JOY0
    JOY1
@ENDNODE
@NODE "Key Codes"
@TOC "ToolTypes"
Keycodes:

In order to specify the keys for controlling a snake from CLI or ToolTypes,
you must know the raw keycodes for the keys you wish to use. These are
hexadecimal numbers specifying the position on the keyboard of the key
being pressed.

Some examples:

    Cursor key up    = 0x4C
    Cursor key left  = 0x4D
    Cursor key down  = 0x4E
    Cursor key right = 0x4F
                Del  = 0x46
                Help = 0x5F

The following assume a standard QWERTY layout:

    1 = 0x01   2 = 0x02   3 = 0x03  ...
    Q = 0x10   W = 0x11   E = 0x12  ...
    A = 0x20   S = 0x21   D = 0x22  ...
    < = 0x30   Z = 0x31   X = 0x32  ...

and standard numeric keypad layout:

    Num-[ = 0x5A    Num-] = 0x5B    Num-/ = 0x5C    Num-* = 0x5D
    Num-7 = 0x3D    Num-8 = 0x3E    Num-9 = 0x3F    Num-- = 0x4A
    Num-4 = 0x2D    Num-5 = 0x2E    Num-6 = 0x2F    Num-+ = 0x5E
    Num-1 = 0x1D    Num-2 = 0x1E    Num-3 = 0x1F    Enter = 0x43
    Num-0 = 0x0F                    Num-. = 0x3C
@ENDNODE
@NODE "DisplayID"
@TOC "ToolTypes"
DisplayID:

This allows you to specify the type of screen that Tangle will attempt to
run on. Tangle can also be mode promoted (but this is of course not
necessary). When no screenmode is specified, Tangle will attempt to open a
Lores screen on your Default monitor (usually PAL or NTSC).

No checking if the mode is valid is done, the value is just supplied to the
OpenScreeen call (And it will nicely open a HAM screen with 3 bitplanes or
give you a SuperHires with only 2 bitplanes (max for ECS), which will get
you in trouble later.) The screen mode should be able to use 3 bitplanes
for it to work. Aspect ratio 1:1 should also be used since it will look
ugly otherwise.

Valid values are a DisplayID in hexdecimal form like in Mode_names.info.
(But I think that was only in the 2.0 release).

If you don't know what value to use, look in the list below, and take one
monitor number and OR it together with desired modes (all numbers are hex):
	
            Monitor:
 0x00000    Default
 0x11000    NTSC
 0x21000    PAL
 0x71000    Euro36
 0x81000    Super72
 0x91000    DblNTSC
 0xA1000    DblPAL

            Modes:
 0x00000    Lores
 0x08000    Hires
 0x08020    SuperHires
 0x00004    Interlace
 0x00008    Double Scan (PAL, NTSC & Super72)


 VGA & Euro72 are a little different:

            Monitor:
 0x31000    VGA
 0x61000    Euro72

            Modes:
 0x00000    Extra Lores Scan Doubled
 0x00004    Not Scan Doubled
 0x08000    Lores
 0x08020    Productivity


For example, 0x08004 is Hires-Interlaced
@ENDNODE
@NODE "Font Name"
@TOC "ToolTypes"
FontName:

This is the name of the font you want to use. Default is topaz. It doesn't
matter if you give this argument with or without the .font extension. For
this to work you need diskfont.library in LIBS:.
@ENDNODE
@NODE "Font Size"
@TOC "ToolTypes"
FontSize:

This is the size of the font you want to use. Default is 8. For this to
work you need diskfont.library in LIBS:. If you have a diskfont.library
capable of scaling that will done automatically if necessary.
@ENDNODE
@NODE "Palette definition"
@TOC "ToolTypes"
@NEXT "CLI Arguments"
You can change the default palette with @{" ToolTypes " LINK "ToolTypes"} or @{" CLI Arguments " LINK "CLI Arguments"}.

The format for the colors are: 0xRRGGBB

Where RR is the hex value for RED (0-F), GG and BB are the values for green
and blue respectively.

Here is a table of the ToolTypes / CLI Arguments, their default values and
what they are used for:

  Name        Default     color            Used for   
  ----        -----------------            --------
  RGBBack     0x000000    Black            background
  RGBGrid     0x030100    Dark brown       grid
  RGBText     0x0A0A07    White (dark)     text
  RGBColl     0x0F0F0F    White            collissions
  RGBPlayer1  0x00040F    Blue             player 1
  RGBPlayer2  0x0F0105    Red              player 2
  RGBPlayer3  0x000A00    Green            player 3
  RGBPlayer4  0x0E0C00    Yellow           player 4
@ENDNODE
@NODE "CLI Arguments"
@NEXT "Playing"
@PREV "ToolTypes"
The following command line arguments are valid:

      @{B}Player 1 Settings@{UB}              @{B}Player 2 Settings@{UB}
       @{"   N1=Name1/K   " LINK "Names"}               @{"   N2=Name2/K   " LINK "Names"}
       @{"  I1=Input1/K   " LINK "Input settings"}               @{"  I2=Input2/K   " LINK "Input settings"}
       @{" L1=KeyLeft1/K  " LINK "Key Codes"}               @{" L2=KeyLeft2/K  " LINK "Key Codes"}
       @{" R1=KeyRight1/K " LINK "Key Codes"}               @{" R2=KeyRight2/K " LINK "Key Codes"}
       @{"  U1=KeyUp1/K   " LINK "Key Codes"}               @{"  U2=KeyUp2/K   " LINK "Key Codes"}
       @{" D1=KeyDown1/K  " LINK "Key Codes"}               @{" D2=KeyDown2/K  " LINK "Key Codes"}

      @{B}Player 3 Settings@{UB}              @{B}Player 4 Settings@{UB}
       @{"   N3=Name3/K   " LINK "Names"}               @{"   N4=Name4/K   " LINK "Names"}
       @{"  I3=Input3/K   " LINK "Input settings"}               @{"  I4=Input4/K   " LINK "Input settings"}
       @{" L3=KeyLeft3/K  " LINK "Key Codes"}               @{" L4=KeyLeft4/K  " LINK "Key Codes"}
       @{" R3=KeyRight3/K " LINK "Key Codes"}               @{" R4=KeyRight4/K " LINK "Key Codes"}
       @{"  U3=KeyUp3/K   " LINK "Key Codes"}               @{"  U4=KeyUp4/K   " LINK "Key Codes"}
       @{" D3=KeyDown3/K  " LINK "Key Codes"}               @{" D4=KeyDown4/K  " LINK "Key Codes"}

              @{B}General Game Settings@{UB}
             @{"    HP=HumanPLayers/K    " LINK "HumanPlayers"}
             @{"    AP=AmigaPlayers/K    " LINK "AmigaPlayers"}
             @{"       Friends/K/S       " LINK "Friends"}
             @{"    ML=MatchLength/K     " LINK "MatchLength"}
             @{"         Speed/K         " LINK "Speed"}
             @{"   ACC=Acceleration/K    " LINK "Accelleration"}
             @{"         Size/K          " LINK "Size"}
             @{"        Grid/K/S         " LINK "Grid"}
             @{"      NoBorder/K/S       " LINK "No Border"}
             @{"      KT=KillTail/K      " LINK "KillTail"}
             @{"     KD=KillDead/K/S     " LINK "KillDead"}
             @{"         Alg1/K          " LINK "Algorithms"}
             @{"         Alg2/K          " LINK "Algorithms"}
             @{"         Alg3/K          " LINK "Algorithms"}
             @{"         Alg4/K          " LINK "Algorithms"}
             @{"   CS=ComputerSkill/K    " LINK "Computer Skill"}
             @{" SCE=SlowComputerEnd/K/S " LINK "Slow Computer End"}
             @{"       NoPaus/K/S        " LINK "No Paus"}
             @{"     DI=DisplayID/K      " LINK "DisplayID"}
             @{"      FN=FontName/K      " LINK "Font Name"}
             @{"      FS=FontSize/K      " LINK "Font Size"}
             @{"        RGBBack/K        " LINK "Palette definition"}
             @{"        RGBGrid/K        " LINK "Palette definition"}
             @{"        RGBText/K        " LINK "Palette definition"}
             @{"        RGBColl/K        " LINK "Palette definition"}
             @{"      RGBPlayer1/K       " LINK "Palette definition"}
             @{"      RGBPlayer2/K       " LINK "Palette definition"}
             @{"      RGBPlayer3/K       " LINK "Palette definition"}
             @{"      RGBPlayer4/K       " LINK "Palette definition"}
@ENDNODE
@NODE "No Border"
@TOC "CLI Arguments"
@PREV "CLI Arguments"
NoBorder:

This will turn the @{" Border " LINK "Border"} off. (Default On).
@ENDNODE
@NODE "Slow Computer End"
@TOC "CLI Arguments"
SlowComputerEnd:

This will turn the @{" QuickComputerEnd " LINK "Quick Computer End"} off. (Default On).
@ENDNODE
@NODE "No Paus"
@TOC "CLI Arguments"
@NEXT "Playing"
NoPaus:

This will turn the @{" PausBetweenRounds " LINK "Paus Between Rounds"} off. (Default On).
@ENDNODE
@NODE "Playing"
@PREV "CLI Arguments"
@{B}Start@{UB}

When you start the game all players starting positions will be displayed
with an arrow. You can now change your starting direction, and the arrow
will move to indicate this. You'll have about one second 'til the snakes
starts moving.


@{B}Control details@{UB}

It is not possible to run into yourself by moving the opposite direction
compared to your current direction. That is, if you are moving from left to
right and press the left key (for @{" absolute " LINK "Control Type"} keys) nothing will happen.
You can of course only move in one direction each time and if you press
two keys the last will be used if it isn't impossible as explained above.
If you for instance want to make a 180 degree turn by pressing up and left,
and you are too fast you will only turn left. The same happens with
@{" relative " LINK "Control Type"} keys if you press left twice before your snake has moved.
So be fast, but not too fast!


@{B}Scoring@{UB}

The player who win gets NumberOfPlayers-1 points, the second
NumberOfPlayers-2 points etc. The match continues until someone alone has
at least @{" MatchLength " LINK "MatchLength"} number of points. If two or more players have the
same number of points greater than MatchLength, the game will continue
until there is a single winner.


@{B}Fairness@{UB}

Notice that it is fully possible for two or more players to die at the same
time in one round. The program is absolutely 100% fair in all those
situations (which is not the case with most other games of this type,
including commercial ones). If two or more players share a place they get
the same points as the last of them would have got if they hadn't shared
the place. Therefore if two players share the second place they get third
place points and the program will print that they both got a third place.

Have fun!!
@ENDNODE
@NODE "Comments"
You can press any joystick button to start a game, or to start the next
round. Because of this some polling is done (which uses some cpu time).
Also the reading of the joysticks is rather dirty, so if you move another
screen to front to do something else there, a mousepress will start a game
(and slow your computer). If you don't want this, and don't want to exit
Tangle, you can enter the Advanced Options screen which could only be
exited by pressing space, ie the program is waiting and will not take any
cpu time at all.
@ENDNODE
@NODE "History"
History:

V1.0 - First general release. Written in Pascal. Released on AmiNet.

V1.1 - Small fixes to 1.0.

V1.2 - Internal Beta-versions of V2.0. Changed to 2.0 when I thought
       I had so many new features that it was almost a new game.

V2.0 - Translated to C
       Added computer controlled players
       Added Tooltype/Argument support
       Added screenmode support
       Added font support
       Now can have size 1
       Added accelleration option
       Added team play mode
       Added killdead option
       Added border option
@ENDNODE
@NODE "Future"
To do:

I have thought of making something like a turbo boost. This would allow
each player to move twice as fast for a limited number of moves, using a
third key for relative keys, a fifth key for absolute keys, and the
fire button for joysticks.

Adding some obstacles or other scenery could also be done, and maybe things
like teleporters etc.

Add some special objects that could be picked up, like: armour to make it
possible to run through one other player once, turbo boost fuel, teleport
pillers, bombs, screen clear etc.

Maybe I could add a few algorithms for the computer controlled players as
well (or improve the existing ones).

Make it possible to save current settings to icon tooltypes.

Add possibillity to use an joystick adapter for the parallellport so all 4
players can use joystick (if someone tells me how to do it...)

Make it possible to write for example PAL:Hires-Interlace instead of
0x08004 in DisplayID ToolType / CLI Argument. (If I find out how to do...)

More ideas? Feel free to contact me.
@ENDNODE
@NODE "Thanks"
Thanks goes to:

Len Trigg - which is my first registered user - for convincing me to make
this version, giving lots of ideas and bug-reports, helping me writing this
guide, supplying me with two extra icons and for his and his friends
extensive Beta-testing - hope you had some fun!

All of you out there that will @{" register " LINK "Shareware"}.
@ENDNODE
@NODE "Author"
If you wish to contact me here are a couple of addresses:

Email:      d1wizo@dtek.chalmers.se


URL:        http://www.dtek.chalmers.se/~d1wizo

            (Here you should be able to find my current address
             and of course the latest versions of my sotfware.)


Smail:      Ola Lundkvist
            Gibraltarg. 84:527
            S-412 79  GOTHENBURG
            SWEDEN

            (Above address is temporary and will change within a year.)


Alt Smail:  Ola Lundkvist
            Ekv. 8
            S-360 44  INGELSTAD
            SWEDEN

            (Will Always work, but it will mot reach me that fast.)

Comments, suggestions, contributions, bug-reports or whatever - please feel
free to send it to me!
@ENDNODE
@NODE "Index"
Index of Tangle.guide

@{" About " LINK "About"}
@{" Absolute keys " LINK "Control Type"}
@{" Accelleration " LINK "Accelleration"}
@{" Address " LINK "Author"}
@{" Advanced Options " LINK "Advanced Options"}
@{" Algorithms " LINK "Algorithms"}
@{" Amiga Players " LINK "AmigaPlayers"}
@{" Author " LINK "Author"}
@{" Best, algorithm " LINK "Algorithms" 28}
@{" Border " LINK "Border"}
@{" Boxed in " LINK "Boxed in"}
@{" CLI Arguments " LINK "CLI Arguments"}
@{" Comments " LINK "Comments"}
@{" Computer Skill " LINK "Computer Skill"}
@{" Contents " LINK "Main"}
@{" Control Type " LINK "Control Type"}
@{" Diagonal, algorithm " LINK "Algorithms" 12}
@{" Disclaimer " LINK "Disclaimer"}
@{" DisplayID " LINK "DisplayID"}
@{" Distribution " LINK "Distribution"}
@{" Email " LINK "Author"}
@{" Fair play " LINK "Playing" 30}
@{" Font Name " LINK "Font Name"}
@{" Font Size " LINK "Font Size"}
@{" Friends " LINK "Friends"}
@{" Future " LINK "Future"}
@{" Grid " LINK "Grid"}
@{" History " LINK "History"}
@{" Human Players " LINK "HumanPlayers"}
@{" Icon Tooltypes " LINK "ToolTypes"}
@{" Improved, algorithm " LINK "Algorithms" 8}
@{" Input settings " LINK "Input settings"}
@{" Installation " LINK "Installation"}
@{" Introduction " LINK "Introduction"}
@{" Joystick " LINK "Control Type"}
@{" Key Codes " LINK "Key Codes"}
@{" Key Screen " LINK "Key Screen"}
@{" KillDead " LINK "KillDead"}
@{" KillTail " LINK "KillTail"}
@{" Mail " LINK "Author"}
@{" Main Screen " LINK "Main Screen"}
@{" Match Length " LINK "MatchLength"}
@{" Name Screen " LINK "Name Screen"}
@{" Names " LINK "Names"}
@{" No Border " LINK "No Border"}
@{" No Paus " LINK "No Paus"}
@{" Palette definition " LINK "Palette definition"}
@{" Paus Between Rounds " LINK "Paus Between Rounds"}
@{" Playing " LINK "Playing"}
@{" Quick Computer End " LINK "Quick Computer End"}
@{" Relative keys " LINK "Control Type"}
@{" Register " LINK "Shareware"}
@{" Requirements " LINK "Requirements"}
@{" RGB " LINK "Palette definition"}
@{" Scoring " LINK "Playing" 21}
@{" Screen modes " LINK "DisplayID"}
@{" Shareware " LINK "Shareware"}
@{" Simple, algorithm " LINK "Algorithms" 4}
@{" Size " LINK "Size"}
@{" Slow Computer End " LINK "Slow Computer End"}
@{" Speed " LINK "Speed"}
@{" Spiral, algorithm " LINK "Algorithms" 21}
@{" Thanks " LINK "Thanks"}
@{" TODO " LINK "Future"}
@{" Tooltypes " LINK "ToolTypes"}
@{" WWW " LINK "Author"}
@ENDNODE
