home *** CD-ROM | disk | FTP | other *** search
/ ISV Strong Games / ISV_STRONG_GAMES.iso / desktop / spatience / !Help next >
Text File  |  1992-11-09  |  11KB  |  286 lines

  1.  
  2.                  Program : SPatience
  3.                  Purpose : To (re)play patience?
  4.                  Author  : J.Horsnell BSc(Hons) MSc
  5.                  Date    : Oct 1992 (from June '92)
  6.  
  7.   To play the game use the left button on the mouse.
  8.   Place the pointer over a card you wish to move and press the
  9.   button.  Now move the card to its new position, if it's a
  10.   valid move the card will stay there, if not it will return
  11.   home.  If you're not sure whether or not a card can go anywhere,
  12.   click on it (if the click-fly option is set, see the menu).
  13.  
  14.   There are a few things about the application it may be good to know.
  15.   A: Auto fly off is temporarily suspended after an UNDO.
  16.   B: You may 'tweek' SPatience in a few ways using the environment variable
  17.      'SPatience$Options'.
  18.    : The automatic moving of cards is 'tweek'able to one of three states.
  19.      All:  allows all windows to move cards around regardless of mouse.
  20.      Pref: as 'All' but if mouse is over one, only that game will progress.
  21.      Only: Only the window in which the mouse is will progress.
  22.      This is done via the !Run file or via the menu entry 'state'.
  23.    : The speed of the animation of the cards is alterable.
  24.   C: A resignation is irreversible.  This includes the UNDO feature (etc).
  25.   D: You may 'Deal' several times before deciding to play without fear of
  26.      that deal being recognised as a 'Played' game.
  27.   E: UNDO will not return the game to a 'fresh deal' position.  Thus a 
  28.      subsequent 'Deal' will increment the 'Played' counter.
  29.  
  30.  
  31.   The end of this file includes:
  32.       Defining card stacks
  33.       Other information
  34.       Error reporting
  35.  
  36.  
  37.              SPatience game description language
  38.              ***********************************
  39.  
  40. The script files are used to describe the format of patience stacks on
  41. screen and their operation during game play.
  42.  
  43.   Before we start here are a few notes:
  44.       
  45.     The character '|' is used to denote a comment line.
  46.     The whole script file is case in-sensitive
  47.     Items shown here in square braces '[]' are optional.
  48.     '[]' followed by *n, means it my be repeated up to n times.
  49.     Each file can be used to describe only one game (currently).
  50.     Most errors in the file will cause the script to be abandoned.
  51.     Card indices start at zero.
  52.     The game area origin is at the top left of the window.
  53.     <exp> denotes an expression that will be evaluated using
  54.        the function Evaluate_Expression in RISC OS.
  55.     <str> denotes a character string with optional enclosing 
  56.        double quotes.  If included, the string will be used as-is,
  57.        If excluded, the string will be converted to lower case.
  58.     <f> denotes a flag. 
  59.     <f>* denotes a sequence of flags.
  60.     Two identifiers have been defined (CW & CH) denoting recommended
  61.     stack separation in the x (CW) and y (CH) directions.  They are
  62.     mnemonics for 'Card Width' and 'Card Height'.
  63.     Any text following the keyword END will be ignored, meaning lines like
  64.     'END STACK' and 'END DEFINE' are possible should you want to use them.
  65.  
  66.  
  67.   In the beginning there were three possible commands:
  68.  
  69.   - SCRIPT_TYPE <exp>
  70.         Only one script type is defined currently - 1.
  71.         All others will be prosecuted.
  72.  
  73.   - DATA_BLOCK_TYPE <exp>
  74.         Only one data block type is defined currently - 1.
  75.         This is used to identify a saved game format.
  76.  
  77.   - BEGIN <str>
  78.         Begins the definition of a patience window.
  79.         <str> is used as the window title.
  80.         This alters the command set being used to that following.
  81.  
  82.   Across the face of the commands moved, THE GAME.
  83.  
  84.   - FLAGS <f>*
  85.         The flags possible here are:
  86.  
  87.         - ClickFly (off by default)
  88.               Activates a game toggle that allows the user to click on a
  89.               stack to initiate a search for somewhere else to put the 
  90.               chosen card(s).
  91.  
  92.         - AutoFly (off by default)
  93.               Another toggle to allow cards to search for new homes
  94.               without the user clicking first.
  95.  
  96.         - AnimateFly (off by default)
  97.               When cards are travelling to a new home and this flag has
  98.               been used, the cards will travel in a series of step
  99.               giving the illusion of animation.
  100.  
  101.   - Packs <exp> (1 by default)
  102.         How many card packs can be used. (1 to 6 inclusive).
  103.  
  104.   - Width <exp> (1200 by default)
  105.         Total width of the playing area. (window width)
  106.  
  107.   - Height <exp> (1800 by default)
  108.         Total height of the playing area. (window height)
  109.  
  110.   - ZeroToWin <exp>
  111.         Defines an expression (up to 100 characters long) that 
  112.         will be evaluated after a players move to indicate the
  113.         winning of the game by the player.  Evaluation of zero
  114.         indicates a win.  To aid this there are two tokens that
  115.         may be used:
  116.         EMPTY$<exp>   - the number of empty stacks that have an
  117.                         ID of <exp>
  118.         CARDSIN$<exp> - the total number of cards in stacks that
  119.                         have an ID of <exp>
  120.  
  121.   - Score <exp> , <exp>
  122.         Places in the window a box containing four values:
  123.         Played: total number of these games played so far
  124.         Won:    total number of these games won so far
  125.         Lost:   total number of these games lost so far
  126.         Streak: number of games played since the last game lost
  127.  
  128.   - STACK
  129.         Used to begin the definition of a card stack.
  130.         See later 'Defining card stacks'.
  131.  
  132.   - FOUNDATION (a typical patience stack type)
  133.         Same as a stack but with various flags etc overridden:
  134.         DeepCheck, JoinSS__, PaintLast,
  135.         AppendOneOnly, AutoClick, AutoFly
  136.         FIRST 1, MAX 13, DragUpTo 0, JoinOffset 1
  137.         The stack is also marked as a foundation meaning they
  138.         will get preference when cards are click-flown.
  139.  
  140.   - FOR <identifier> = <int> TO <int>
  141.         A simple loop definition.
  142.         Must be incrementative.
  143.         Nesting up to ten levels is possible.
  144.         <identifier>'s can be up to 19 characters long.
  145.         Any longer will cause a lot of 'Unkown operand' errors.
  146.  
  147.   - END
  148.         Ends a FOR loop.
  149.  
  150.   And THE GAME said "Let there be stacks".
  151.  
  152.  
  153.                        Defining card stacks
  154.                        ********************
  155.  
  156.    This is effectively another command set and includes:
  157.  
  158.    X <exp>
  159.      the X coordinate of the stack origin
  160.  
  161.    Y <exp>
  162.      the Y coordinate of the stack origin
  163.  
  164.    First <exp> [ , <exp> ]
  165.      defines a range of card numbers that can be put on an empty stack
  166.      1-13 denote Ace to King
  167.      0 denotes any cards
  168.  
  169.    MAX <exp>
  170.      the maximum number of cards a player may put on this stack
  171.      This has a upper-bound of 208 cards (4 packs).
  172.  
  173.    ID <exp>
  174.      an identifier used to identify a group of stacks.
  175.      NB: this must not be zero.
  176.  
  177.    DragUpTo <exp>
  178.      defines an expression similar to that of 'ZeroToWin' above but
  179.      indicates the maximum number of cards a player may drag from this
  180.      stack
  181.  
  182.    JoinOffset <exp>
  183.      an integer indicating what cards may be added together to form a
  184.      stack (see also the RotateJoin flag later).
  185.      EG.
  186.         1 means a TWO may be placed on an ACE
  187.         -1 means the opposite.
  188.  
  189.    DealTo <exp1> , <exp2>
  190.      if this stack is clicked by the player, <exp2> cards will be dealt
  191.      to all stacks with an ID of <exp1> unless this stack is empty, in 
  192.      which case the reverse will be true (ie, <exp2> will be taken
  193.      from..)
  194.  
  195.    TakeFrom <exp>
  196.      overrides the 'taking from' part of 'DealTo' to take cards from 
  197.      stacks with an ID of <exp> instead
  198.  
  199.    Deal <exp> [ , <exp1> ]*8
  200.      Deal <exp> cards to this stack for a new game.
  201.      Cards with an index value of <exp1> etc. will be toggled from face
  202.      down to face up etc.
  203.  
  204.      For example:
  205.         Deal 10 , 2 , 4 , 8
  206.         means deal ten cards,
  207.           cards 0 & 1 will be face down
  208.           cards 2 & 3 will be face up
  209.           cards 4...7 will be face down
  210.           cards 8 & 9 will be face up
  211.  
  212.    Flags <f>*
  213.      Defines a number of stack flags.
  214.      Where flags of conflicting types are used, the last used wins.
  215.      - ShallowCheck (default)
  216.           when joining two stacks, only check cards at the intersection
  217.      - DeepCheck
  218.           check all cards being appended with their neighbours
  219.      - RotateJoin (off by default)
  220.           Kings and Aces may be appended if allowed by other rules above.
  221.           (depends also on the value of JoinOffset)
  222.      - JoinSS__
  223.           only cards with the same suit may be appended
  224.      - JoinDS__
  225.           only cards with a different suit....
  226.      - JoinDSSC
  227.           cards with a different suit but the same colour....
  228.      - Join__DC (default)
  229.           cards with a different colour....
  230.      - Join__SC
  231.           cards with the same colour....
  232.      - PaintLast
  233.           when painting the stack on screen only paint the last card
  234.      - PaintDown (default)
  235.           paint all cards downwards from the stack origin
  236.      - PaintLeft
  237.           paint all cards left towards the origin
  238.      - PaintRight
  239.           paint right from the origin
  240.      - PaintBack
  241.           paint only one card back (if any)
  242.      - PaintCount
  243.           as PaintBack but indicates how many cards are remaining
  244.      - AutoFly (off by default)
  245.           when auto fly is initiated, this stack can accept the cards
  246.      - ClickFly (off by default)
  247.           when click fly is initiated, this stack can accept the cards
  248.      - AppendOneOnly (off by default)
  249.           only allows one card at a time to be appended to a stack
  250.           - useful for foundations where only one card is normally added.
  251.      - NoAutoFly,NoClickFly,AppendAny
  252.           reverses the above
  253.  
  254.  
  255.                        Other useful information
  256.                        ************************
  257.  
  258.   When using click or auto fly off routines, note that the destination
  259.   is chosen with a preference for those stacks that were defined first.
  260.   Excluding the current home of the selected cards.
  261.  
  262.   PI to sixteen decimal places is: 3.1415926535897932
  263.  
  264.   When declaring a stack as being able to receive AutoFly cards, it
  265.   is a good idea to also ensure that the DragUpTo total is zero.
  266.   I won't tell you why, find out for yourself.
  267.  
  268.   Don't admit a thing, there's nothing they can do.
  269.  
  270.   When storing the current game state, don't save it over the original
  271.   script file, that can be a realy stupid thing to do.
  272.  
  273.   Games load faster if they are stored as a saved game instead of scripts
  274.   but they use around 5-20 times the average 1k file size of script files.
  275.  
  276.   An ARM3 is realy useful. (Cache that ram!)
  277.  
  278.  
  279.                             Error reporting
  280.                             ***************
  281.  
  282.   Just in case there are one or two things i've overlooked...
  283.   1..Create a saved game before the offending operation if possible.
  284.   2..Write down what you do to cause the error to happen.
  285.   3..Place both in an envelope, seal it and burn it....
  286.