PlayFKiSS (versions 0.81, 0.83b, 0.84) by Chad Randall
(playfkis.zip, pfks083b.zip, pfks084.zip)
Most PC owners will have used some version of this viewer, which wants slightly
more than a 486, and runs comfortably on a 586-233Mhz with a hicolor
display. Although all Windows viewers can also be used as editors,
PlayFKiSS has an actual editor mode, and will display cel and
object characteristics in the status bar - very convenient!
Three features of the editor mode are:
- the importing of cels and writing of the cnf file (warning: when saving to
an existing file, that file is wiped and a new one is generated, so any
comments in the cnf are lost)
- the "right-click" cel box that allows objects to be unfixed, positioned and
refixed, and adds snap-to code for objects
- the saving of a cnf plus palette and cel files to a lzh file, with no need
of external compression programs.
The first version contains pkfs081x.exe, two demo sets, documentation and
oadist.exe, a system files update that shouldn't be installed
without making a backup first. The second version contains playfkis.exe
another impressive demo set (balls.lzh) and FKiSS documentation,
and the third only PlayFKiSS_084.exe. All three versions can
be downloaded from Chad Randall's PlayFKiSS page
(click on "Downloads").
Archive support: internal
Enhanced palette: yes (0.83b upwards)
Bugs and idiosyncrasies:
Only the later two versions support enhanced palette; version 0.81 doesn't
support it but doesn't crash either, instead rendering everything in the
colours of the first palette. EP support is more reliable in 0.84, as 0.83
may not work with all video adapters. Version 0.81 also doesn't recognize
variables A0-9 to Z0-9; it will only work with variables A-Z.
Common to all versions:
- Does not recognize ifmoved().
- Will accept the version() event only once, so it's not possible to check
the viewer for compatibility with more than one FKiSS level.
- Implements the syntax of ghost() in the reverse way: ghost(cel,0)
ghosts a cel, ghost(cel,1) unghosts a cel. An easy workaround if the
cel (this also applies to objects) only has to be ghosted once is the following:
;@  ghost(cel,1) ; the correct way to ghost a cel
;@press(cel) ; can the cel still be pressed?
;@  ghost(cel,0) ; the PlayFKiSS 0.8x way to ghost a cel
- Forces the palette to the page's initial palette group each time the
user changes page.
- Will not detect collision if only one pixel overlaps; hence, it will never
detect collision for a cel which is only 1 pixel in size.
- Will not visibly render a cel which is only two or less than two pixels in size.
The cel can be dragged and will react to events, though.
- Doesn't loop midi files, which is good, but when the music() command is issued
while a midi plays, an error message appears that system resource such-and-such
is in use, as opposed to older viewers which simply stop playing the first midi
and start playing the second one. To prevent this error message appearing,
use music("") before every music("midifile.mid") to free this
- Rewrites the cnf when saving it, which is not a bug, but in doing so, erases
all comments, puts each action or event on a separate line (which really expands
the cnf file) and changes any %tn tag to transparent(n), which is
what supposedly makes the viewer crash when saving for the second time
(PlayFKiSS's transparency bug). This also supposedly doesn't happen in version
0.84, but I've found all versions have trouble with the %t tag and may crash during
the first save, or save several times without crashing. If the viewer does crash,
the cnf is lost or cut off somewhere in the middle. It's a
good idea to keep a backup, and/or add the transparency tags manually afterwards.
- Considers cel overlaps just before a set change a collision; a set change may
therefore trigger collide(). This is not typical viewer behaviour and was
implemented specifically at the request of one user; so, it's not a bug, but it's
something that won't work in every viewer and shouldn't be relied on to make a
- Produces a list of missing cels/palettes, if any, at set load, but is extremely
permissive about syntax mistakes, allowing things like "collideo()", "ghosted()"
and if-statements without a closing endif(). Sets written on PlayFKiSS
should be tested by a cnf checker. (A number of viewers have built-in cnf-checking:
PlayKISS, GnomeKiSS, UltraKiSS, and for anything lower than FKiSS3, KiSSLD.)
- Ambiguous cels are dealt with inconsistently; it seems actions have an effect on
all instances of a cel, and events only on the first one.
- When a notify() event pops up just before a release() should have been triggered,
then due to the shift of focus (excuse the programmerese) the release() event will
- When you import a 16-colour cel and try to save the offset, the cel may be wiped.
(This I only know from hearsay.)
- Not a bug, but non-standard; the viewer has a default palette which
it applies to any cels that need a kcf but haven't been assigned one.
- Rather important when coding a set meant to be portable but tested only with
PlayFKiSS: this viewer can handle astoundingly big sets and short alarms. This
means that a set which runs well under PlayFKiSS can run out of memory and crash
in a different viewer, or that animation effects may not be as smooth.
Click here for a screenshot of version 0.84.