home *** CD-ROM | disk | FTP | other *** search
/ Chip Hitware 6 B / CHIP_HITWARE6_B.iso / gry / wkiss / doc / fkiss.txt < prev    next >
Text File  |  1999-02-19  |  12KB  |  356 lines

  1.  
  2. FKISS Specifications
  3.  
  4. Last updated 3-1-97
  5.  
  6. This document explains the syntax for FKISS extension format.
  7. This document written by Dov Sherman with a lot of help from Yav.
  8.  
  9. FKISS extension format is an extension to the existing KISS configuration
  10. format.  FKISS code appears as comment lines at the end of KISS .CNF
  11. file.  Usually, the code appears at the end of the file but this is
  12. not a requirement.
  13.  
  14.  
  15.  
  16.  
  17.  
  18. General format
  19.    All lines containing FKISS statements must begin with ;@ but more than one
  20.    statement can appear on a line.  For example:
  21.  
  22.                  ;@map(#1) unmap("hat.cel")
  23.                  ...and...
  24.                  ;@map(#1)
  25.                  ;@unmap("hat.cel")
  26.                  ...would have the same effect
  27.  
  28.    After the ;@ any amount of spaces or tabs may appear before statements:
  29.  
  30.                  ;@map(#1)
  31.                  ...and...
  32.                  ;@            map(#1)
  33.                  ...are equivalent
  34.  
  35.    FKISS Code is made up by an Identifier followed by a series of Events which
  36.    each control series of Actions.
  37.  
  38.  
  39.  
  40.  
  41.  
  42. Identifier
  43.  
  44.    ;@EventHandler
  45.       This is the first line of the FKISS animation/sound code.  It alerts
  46.       FKISS that following lines should be read as FKISS commands.  Only lines
  47.       appearing after this statement are treated as FKISS code.
  48.  
  49.  
  50.  
  51. Actions
  52.    An Action is a command which is immediately executed. The sequence of
  53.    actions in a given event is not defined.  In an ideal implementation, all
  54.    actions defined for a given event would have parallel execution (occur at
  55.    the exact same time).  Usual implementation executes action in listed order.
  56.  
  57.  
  58.  
  59.  
  60.    ;@map(item or cel)
  61.       This event takes one argument as an item number defining a group of
  62.       cels or a filename defining a single cel.
  63.       It causes the relevant cel or cels to become visible on any pages
  64.       they are defined on.
  65.  
  66.  
  67.  
  68.  
  69.    ;@unmap(item or cel)
  70.       This event takes one argument as an item number defining a group of
  71.       cels or a filename defining a single cel.
  72.       It causes the relevant cel or cels to become invisible on any pages
  73.       they are defined on.
  74.  
  75.  
  76.  
  77.  
  78.    ;@altmap(item or cel)
  79.       This event takes one argument as an item number defining a group of
  80.       cels or a filename defining a single cel.
  81.       It causes the relevant cel or cels to become visible if currently
  82.       invisible and invisible if currently visible.
  83.  
  84.  
  85.  
  86.  
  87.    ;@sound(WAV or AU file)
  88.       This event takes one argument as the filename for a WAV or AU format
  89.       sound sample.
  90.       It causes the given sound sample to be played.  It is recommended
  91.       that alternate CNF files using each format be available since
  92.       different viewers may be capable of only one format or the other.
  93.  
  94.  
  95.  
  96.  
  97.    ;@move(item, x, y)
  98.       This event takes three arguments.
  99.       The first argument is an item number for a group of cels.
  100.       The second and third arguments are x and y offsets.
  101.       This action causes the given item to move relative to its current
  102.       position.
  103.       Example:
  104.          ;@move(#5, 10, -3) ; Causes item #5 to move 10 pixels to the
  105.                               right and 3 pixels up
  106.  
  107.  
  108.  
  109.    ;@changeset(number)
  110.       This event takes one argument as a set/page number.
  111.       It causes the viewer to switch to the given set/page as long as the
  112.       given set/page is defined.
  113.  
  114.  
  115.  
  116.  
  117.    ;@changecol(number)
  118.       This event takes one argument as a palette number.
  119.       It causes the viewer to switch to the given palette.  Only relevant
  120.       if the KISS data set is of the customizable palette style.
  121.  
  122.  
  123.  
  124.  
  125.    ;@timer(alarm, delay)
  126.       This event takes two arguments.
  127.       The first argument is an alarm number.
  128.       The second argument is a delay time in milli-seconds.
  129.       It causes the given alarm to be activated after the given delay
  130.       time. If a timer is already active for the given alarm, the new
  131.       delay value take precedence.
  132.       Setting the delay time to zero will cancel any timers for that
  133.       alarm.
  134.  
  135.  
  136.  
  137.  
  138.    ;@randomtimer(alarm, delay, variance)
  139.       This event takes three arguments.
  140.       The first argument is an alarm number.
  141.       The second argument is a delay time in milli-seconds.
  142.       The third argument is a variance range.
  143.       It causes the given alarm to be activated after the given delay time
  144.       plus a random amount of time less than or equal to the variance
  145.       range. If a timer is already active for the given alarm, the new
  146.       delay value take precedence.
  147.  
  148.  
  149.  
  150.  
  151.    ;@nop()
  152.       Perform no action.
  153.  
  154.  
  155.  
  156.  
  157.    ;@quit()
  158.       Exits the KISS viewer entirely.
  159.  
  160.  
  161.  
  162.  
  163. Events
  164.    An Event is an Event command followed by a series of Actions which are
  165.    executed when the given Event is called.  All Actions listed after an Event
  166.    command are considered part of the Event until another Event commands is
  167.    encountered.
  168.  
  169.  
  170.  
  171.  
  172.    ;@initialize()
  173.       This event signifies that the following actions should be executed
  174.       immediately when the data set is loaded.  This is useful for unmapping
  175.       cels or items that should be invisible at start up or for starting timers
  176.       which begin from start up.
  177.       Initialization takes place before the data set becomes visible.
  178.       Example:
  179.                  ;@initialize()
  180.                  ;@  unmap(#5)
  181.                  ;@  sound("welcome.wav")
  182.  
  183.  
  184.  
  185.    ;@begin()
  186.       This event signifies that the following actions should be executed
  187.       immediately after the data set first becomes visible.
  188.       Example:
  189.                  ;@begin()
  190.                  ;@  timer(15,3000)
  191.  
  192.  
  193.  
  194.    ;@end()
  195.       This event signifies that the following actions should be executed
  196.       immediately when the data set is being unloaded at the end of use.
  197.       Example:
  198.                  ;@end()
  199.                  ;@  sound("byebye.wav")
  200.       This would cause the sound file "byebye.wav" to be played when the
  201.       user stops using the data set by loading a new set or quitting KISS.        
  202.  
  203.  
  204.  
  205.  
  206.    ;@alarm(number)
  207.       This event takes one argument identifying it as a given alarm number.
  208.       Alarm number need not be listed in numerical order and there may be gaps
  209.       between alarm numbers.  (In other words, if the only alarms defined are
  210.       6, 3, 17, and 54, that's okay.)  Alarm numbers must range from 0 to 63.
  211.       This event should be followed by a series of actions to be executed
  212.       when the alarm is called.  Alarms can only be called by timer() commands.
  213.       Example:
  214.                  ;@alarm(15) map(#5) unmap(#6) timer(16, 6000)
  215.                  ;@alarm(16)
  216.                  ;@  map(#6) unmap(#5)
  217.                  ;@  timer(15, 6000)
  218.       In our begin() example, alarm 15 was called at start up to begin
  219.       after three seconds.  Here we define alarm 15 as making item 5 visible
  220.       again, making item 6 invisible, and starting a timer for alarm 16 after 6
  221.       second.
  222.       Alarm 16 we defined as putting item 6 back on-screen, clearing item 5
  223.       again, and starting a timer for alarm 15.  In this way, you can create
  224.       endlessly looping cycles for things like eyes that blink every 10 seconds
  225.       or a neon sign that flickers on the backdrop.
  226.  
  227.  
  228.  
  229.  
  230.    ;@press(item or cel)
  231.       This event takes one argument as an item number defining a group of
  232.       cels or a filename defining a single cel.
  233.       It causes any following actions to be executed when the user clicks on
  234.       the given item or cel.
  235.       This applies whether the item is moveable or not.
  236.  
  237.  
  238.  
  239.  
  240.    ;@catch(item or cel)
  241.       This event takes one argument as an item number defining a group of
  242.       cels or a filename defining a single cel.
  243.       It causes any following actions to be executed when the user clicks on
  244.       the given item or cel.
  245.       This applies only to moveable items.
  246.  
  247.  
  248.  
  249.  
  250.    ;@fixcatch(item or cel)
  251.       This event takes one argument as an item number defining a group of
  252.       cels or a filename defining a single cel.
  253.       It causes any following actions to be executed when the user clicks on
  254.       the given item or cel.
  255.       This applies only to non-moveable items but not maximum non-moveable
  256.       items.
  257.  
  258.  
  259.  
  260.  
  261.  
  262.    ;@release(item or cel)
  263.       This event takes one argument as an item number defining a group of
  264.       cels or a filename defining a single cel.
  265.       It causes any following actions to be executed when the user has clicked
  266.       on the given item or cel and now releases it.
  267.       You can use this in tandem with the catch() event to have an item of
  268.       clothing change shape as if being opened to put over the doll and then go
  269.       back to normal when the user releases it, presumably on the doll.
  270.       This applies whether the item is moveable or not.
  271.  
  272.  
  273.  
  274.  
  275.    ;@drop(item or cel)
  276.       This event takes one argument as an item number defining a group of
  277.       cels or a filename defining a single cel.
  278.       It causes any following actions to be executed when the user has clicked
  279.       on the given item or cel and now releases it.
  280.       You can use this in tandem with the catch() event to have an item of
  281.       clothing change shape as if being opened to put over the doll and then go
  282.       back to normal when the user releases it, presumably on the doll.
  283.       This can only be used on moveable items.
  284.  
  285.  
  286.  
  287.  
  288.  
  289.    ;@fixdrop(item or cel)
  290.       This event takes one argument as an item number defining a group of
  291.       cels or a filename defining a single cel.
  292.       It causes any following actions to be executed when the user has clicked
  293.       on the given item or cel and it now snaps back to starting position.
  294.       You can use this in tandem with the fixcatch() event to have an item of
  295.       clothing change shape as if being opened to put over the doll and then go
  296.       back to normal when the user releases it, presumably on the doll.
  297.       This applies only to non-moveable items but not maximum non-moveable
  298.       items.
  299.  
  300.  
  301.  
  302.  
  303.    ;@unfix(item or cel)
  304.       This event takes one argument as an item number defining a group of
  305.       cels or a filename defining a single cel.
  306.       It causes any following actions to be executed when the user has clicked
  307.       on the item or cel enough times that the item's fixedness has counted
  308.       down.  This can only be used once from start up.
  309.       Example:
  310.                  #12.20 hat.cel  ; Defining an object with fixedness of 20
  311.                  [...intervening stuff omitted...]
  312.                  ;@unfix(#12) sound("hatsoff.wav")
  313.                  In this example, when the user has clicked on the hat 20 times
  314.                  so that it now becomes moveable, the sound "hatsoff.wav" will
  315.                  be played.
  316.  
  317.  
  318.  
  319.  
  320.    ;@set(page number)
  321.       This event takes one argument as a page number defined in the data set.
  322.       It causes any following events to be executed when the user switches to
  323.       that page.
  324.  
  325.  
  326.  
  327.    ;@col(x)
  328.       This event takes one argument as a palette number defined in the data
  329.       set.  It causes any following events to be executed when the user
  330.       switches to that palette.
  331.  
  332.  
  333.    ;@never()
  334.       This event never happens and following actions are not processed.  This
  335.       is mainly useful for hiding actions while debugging FKISS code.
  336.  
  337.  
  338.  
  339. Future Additions?
  340.    Here are a few events that might added at some time in the future.
  341.  
  342.    ;@in(cel, cel)
  343.       This event takes two arguments as a filenames defining cels.
  344.       It causes any following actions to be executed when one or more
  345.       non-transparent pixels in the first cel touch non-transparent pixels in
  346.       the second cel.
  347.       This event is not yet supported.
  348.  
  349.  
  350.    ;@out(cel, cel)
  351.       This event takes two arguments as a filenames defining cels.
  352.       It causes any following actions to be executed when pixels in
  353.       the first cel stop touching pixels in the second cel.
  354.       This event is not yet supported.
  355.  
  356.