<!-- ---- $Id: freecraft.html,v 1.64 2001/04/23 22:12:49 johns Exp $ --> <HTML><HEAD> <TITLE>The FreeCraft (fka ALE Clone) Version 1.17</TITLE> </HEAD> <BODY> <H1>FreeCraft (fka ALE Clone) Version 1.17</H1> <HR><PRE WIDTH=80> ___________ _________ _____ __ \_ _____/______ ____ ____ \_ ___ \____________ _/ ____\/ |_ | __) \_ __ \_/ __ \_/ __ \/ \ \/\_ __ \__ \\ __\\ __\ | \ | | \/\ ___/\ ___/\ \____| | \// __ \| | | | \___ / |__| \___ >\___ >\______ /|__| (____ /__| |__| \/ \/ \/ \/ \/ ______________________ ______________________ T H E W A R B E G I N S FreeCraft - A free fantasy real time strategy game engine </PRE> <P><B>(C) Copyright 1998-2001 by The FreeCraft Project. Distributed under the <A HREF="artistic-license.html">"Artistic License"</A></B> <HR> <A HREF="#contents">Contents</A> <H2><A NAME="copyright">Copyrights</A></H2> Please refer to the <A HREF="artistic-license.html">LICENSE</A> document provided with this distribution. To proceed beyond this point, is to agree with the license agreement. <P>The self extracting archive contains ZIP code, read the <A HREF="ZIP-LICENSE">ZIP-LICENSE</A>. <P>The binaries could contain SDL code, read the <A HREF="../README-SDL.txt">README-SDL.txt</A> and the <A HREF="http://www.gnu.org/copyleft/lesser.html"> GNU LGPL license.</A> <P>The source and binaries contains SIOD code, read <A HREF="../src/siod/siod.html"> siod.html</A> for copyright and informations. <H2><A NAME="disclaimer">DISCLAIMER</A></H2> This software is provided as-is. The author(s) can not be held liable for any damage that might arise from the use of this software.<P> <B>Use it at your own risk</B>. <H2><A NAME="introduction">Introduction</A></H2> Read this for the introduction: <A HREF="readme.html">readme.html</A> <H2><A NAME="install">Install</A></H2> Read this how to install FreeCraft: <A HREF="install.html">install.html</A> <H2><A NAME="upgrade">Upgrade</A></H2> If you upgrade from an older beta version to a new one, please <B>always</B> run build.sh. Some graphics or formats may have been changed. <B>Don't forget</B> to backup your modified files.<P> Read this how to upgrade FreeCraft: <A HREF="install.html">install.html</A> <H2><A NAME="changes">Changes</A></H2> Read this for the history of FreeCraft: <A HREF="ChangeLog.html">ChangeLog.html</A> <H2><A NAME="todo">To-do and known bugs</A></H2> This file contains the known bugs and what we plan in the future: <A HREF="todo.html">todo.html</A> <P>A more up to date list of known bugs are here: <A HREF="http://sourceforge.net/tracker/?group_id=1965&atid=101965"> SourceForge: FreeCraft real-time strategy game engine - Tracker - Bugs</A> <P>A more up to date list of planned tasks are here: <A HREF="http://sourceforge.net/pm/?group_id=1965"> SourceForge: FreeCraft real-time strategy game engine - Tasks</A> <H2><A NAME="faq">Problems</A></H2> Read this, if you have problems compiling, installing or playing FreeCraft <A HREF="faq.html">faq.html</A> <H2><A NAME="features">Features</A></H2> <UL> <LI>Health and mana could be shown on the map. <LI>Better path finder routines. <LI>Loading of compressed (gzip) puds. <LI>Configuration language. <LI>Easy replace of unit graphics and sounds. <LI>64 times greater maps. <LI>Training queues. <LI>Way-points. <LI>Correct fog of war (terrain changes are not shown). <LI>Nice looking fog of war (alpha-gray-scale) <LI>More resolutions 640x480, 800x600, 1024x768 and 1600x1200. <LI>Scripting language. <LI>Support for up to 6 resources. <LI>Internet play. </UL> <H2><A NAME="open-projects">Open projects</A></H2> Following projects are not assigned: (Please ask before start working) <UL> <LI>Write a map editor. (with support of greater maps) <LI>Write a AI editor. <LI>Write front end to FreeCraft. (Scenarios, puds, videos...) <LI>Write a video player. (fli or own format) <LI>Create own tilesets and unit graphics. <LI>Create own sounds, voices, videos and campaigns. <LI>Create an icon for window-manager. <LI>Create a jingle for startup and home-page. <LI>Write better documentation. (correct my English :-) <LI>Improved network support (viewer, proxy, automatic lag detection) <LI>Write better sound routines. (with mp3 or ogg and midi or xmi support) <LI>Write "build.sh" for demo-version. <LI>Port to X11 8bpp or 32bpp, full-screen and DGA support. <LI>Port to ggi. <LI>Port to msdos/djgpp. <LI>Write clone of the new game from the same company. (Graphic and sound formats are mostly the same.) <LI>Multi-language support <LI>And any other help is welcome. </UL> If you want to help, please join the FreeCraft mailing list and check if not already somebody is working on your project. Than tell what you want to make. <H2><A NAME="documentation">Documentation</A></H2> Look into the original game documentation for playing instructions. Look into the sources for more informations. <H3><A NAME="commandline">Command line options</A></H3> freecraft [OPTIONS] [map.pud|map.pud.gz] <UL> <LI>OPTIONS<BR> You can currently give following command line options. Use "freecraft -h" to get an up to date information. <UL> <LI>-c "file.ccl"<BR> Load FreeCraft config file <VAR>"file.ccl"</VAR> instead of the default "<VAR>librarypath/</VAR>ccl/freecraft.ccl". <LI>-d "path"<BR> Change the FreeCraft library path to <VAR>"path"</VAR> instead of the default "./data" or "/usr/share/games/freecraft/default". <LI>-f factor<BR> Adjust the build costs of units for the computer players by factor. <LI>-h<BR> Show command line help. <LI>-l<BR> Enable command log to <VAR>"command.log"</VAR> <LI>-p players<BR> Number of network <VAR>players</VAR> to connect. This computer be comes the game server. <LI>-n [localport:]serverhost[:port]<BR> Connect to FreeCraft server <VAR>serverhost</VAR>. <VAR>serverhost</VAR> is the name of the server like "freecraft.org" or the IP number like "192.168.1.1". <VAR>localport</VAR> is the port number on the local computer, <VAR>port</VAR> is the port on the game server. The default ports are 6660. If you have a firewall please let the port 6660/UDP through. <LI>-s frames<BR> The AI sleeps 'frames' before it starts working. <LI>-t factor<BR> Adjust the build time of units for the computer players by factor. <LI>-D<BR> Video depth = pixel pro point. Only useful if not automatic detected. <LI>-F<BR> Full-screen video-mode. <LI>-W<BR> Windowed video-mode. </UL> <LI>map.pud<BR> Load the map "map.pud" instead of the default "<VAR>librarypath/</VAR>default.cm". <LI>map.pud.gz<BR> Load the compressed map "map.pud.gz" instead of the default "<VAR>librarypath/</VAR>default.cm". <LI>map.cm<BR> Load the FreeCraft map "map.cm" instead of the default. <LI>map.cm.gz<BR> Load the compressed FreeCraft map "map.cm.gz" instead of the default. <LI><BR> If no file is given the default map "<VAR>librarypath/</VAR>default.cm" will be loaded. </UL> <H3>Keyboard commands</H3> <UL> <LI><KBD>cursor-left</KBD><BR> Scroll map left. With control scroll faster. <LI><KBD>cursor-right</KBD><BR> Scroll map right. With control scroll faster. <LI><KBD>cursor-up</KBD><BR> Scroll map up. With control scroll faster. <LI><KBD>cursor-down</KBD><BR> Scroll map down. With control scroll faster. <LI><KBD>RETURN</KBD><BR> Enter command line. <LI><KBD>TAB</KBD><BR> Toggle mini-map mode, with/without terrain. <LI><KBD>+</KBD><BR> Increase game speed. <LI><KBD>-</KBD><BR> Decrease game speed. <LI><KBD>ALT+C, CTRL+C, c (if unused)</KBD><BR> Center on selected units. <LI><KBD>ALT+X, CTRL+X</KBD><BR> Exit program. <LI><KBD>ALT+Q, CTRL+Q</KBD><BR> Quit level. <LI><KBD>^</KBD><BR> Unselect all units. <LI><KBD># (1-9,0)</KBD><BR> Recall unit group. All units in the group becomes the current selection. If unit group is already selected, center on group. <LI><KBD>SHIFT + # (1-9,0)</KBD><BR> Add the units of the group to the current selection. <LI><KBD>CTRL + # (1-9,0)</KBD><BR> Define unit group. All currently selected units become the new group. <LI><KBD>SHIFT+CTRL + # (1-9,0)</KBD><BR> Add to unit group. All currently selected units are added to the group. <LI><KBD>ALT + # (1-9,0)</KBD><BR> Alternate unit group. All currently selected units are also added to the new group. <LI><KBD>SHIFT+ALT + # (1-9,0)</KBD><BR> Add to alternate unit group. All currently selected units are also added to the group. <LI><KBD>F1,F2,F3,F4</KBD><BR> Recall saved map position. <LI><KBD>SHIFT+F1,SHIFT+F2,SHIFT+F3,SHIFT+F4</KBD><BR> Save current map position for later recall. <LI><KBD>ALT+G, CTRL+G</KBD><BR> Toggle mouse grab mode. <LI><KBD>ALT+F, CTRL+F</KBD><BR> Toggle fullscreen mode. (only with SDL supported) <LI><KBD>ALT+P, CTRL+P</KBD> or <KBD>pause</KBD><BR> Toggle pause mode. <LI><KBD>CTRL+S</KBD><BR> Toggle sound on/off. <LI><KBD>ALT+S, F11</KBD><BR> Save complete state. <LI><KBD>ALT+L, F12</KBD><BR> Load complete state. <LI><KBD>ALT+M, F10</KBD><BR> Enter game menu. <LI><KBD>SPACE</KBD><BR> Center on last message. </UL> <H3>Mouse commands</H3> <H4>Clicking on minimap</H4> <H4>Clicking on map</H4> <UL> <LI>Single click with left mouse button<BR> <LI>SHIFT Single click with left mouse button<BR> <LI>CTRL Single click with left mouse button<BR> <LI>ALT Single click with left mouse button<BR> <LI>Double click with left mouse button<BR> <LI>Click & Hold with left mouse button<BR> </UL> <H2><A NAME="ccl">CCL: FreeCraft Configuration Language</A></H2> The CCL is scheme. I use SIOD for this. (The most recent release is available from <a href="http://people.delphi.com/gjc/siod.html">this web page</a>) .<P> You can also enter CCL commands at the message prompt. Each line starting with "(" is taken as CCL command. <H3>New documentation</H3> <A HREF="ccl/ccl.html"> Here I have started a new documentation. </A> <P> Please help me writing it. <H3>Files</H3> <UL> <LI><VAR>librarypath</VAR>/ccl/freecraft.ccl is loaded before any initialization. Contains general configuration. <LI><VAR>librarypath</VAR>/ccl/missile.ccl is loaded from freecraft.ccl. Contains missile configuration. <LI><VAR></VAR>/ccl/sound.ccl is loaded from freecraft.ccl. Contains sound configuration. <LI><VAR>librarypath</VAR>/ccl/tilesets.ccl is loaded from freecraft.ccl. Contains tileset configuration. <LI><VAR>librarypath</VAR>/ccl/units.ccl is loaded from freecraft.ccl. Contains units configuration. </UL> <H3>Functions</H3> Without any order: <H2>Map CCL functions/variables</H2> <DL> <DT><VAR>reveal-map</VAR> <DD>Reveal the complete map. <DT><VAR>set-fog-of-war!</VAR><BR> <DD>Enable or disable the fog of war. <DT><VAR>fog-of-war</VAR><BR> <DD>Enable the fog of war. <DT><VAR>no-fog-of-war</VAR><BR> <DD>Disable the fog of war. <DT><VAR>minimap-terrain</VAR><BR> <DD>Enable display of terrain in the minimap window. <DT><VAR>no-minimap-terrain</VAR><BR> <DD>Disable display of terrain in the minimap window. <DT><VAR>original-fog-of-war</VAR> <DD>Enable original like fog of war style. <DT><VAR>gray-fog-of-war</VAR> <DD>Enable gray fog of war style. <DT><VAR>fog-of-war-contrast contrast</VAR> <DD>Set the gray style fog of war contrast. Contrast could be from 0 to OO. A contrast of 100 didn't change anything. <DT><VAR>fog-of-war-brightness brightness</VAR> <DD>Set the gray style fog of war brightness. Brightness could be from -100 to 100. A brightness of 0 didn't change anything. <DT><VAR>fog-of-war-saturation saturation</VAR> <DD>Set the gray style fog of war saturation. Saturation could be from -100 to 200. A saturation of 100 didn't change anything. </DL> <H2>Unsorted CCL functions/variables</H2> <UL> <LI><VAR>title-screen</VAR><BR> Change the default title screen ("graphics/ui/title.png").<P> (title-screen title)<P> <UL> <LI>title<BR> The title graphic file. </UL> <H4>Example:</H4> (title-screen "graphics/ui/ale-title.png")<P> Change the title to "graphics/ui/ale-title.png".<P> <LI><VAR>show-health-bar</VAR><BR> Show the health as bar on the map.<P> <LI><VAR>show-health-dot</VAR><BR> Show the health as dot on the map.<P> <LI><VAR>show-mana-bar</VAR><BR> Show the mana as bar on the map.<P> <LI><VAR>show-mana-dot</VAR><BR> Show the mana as dot on the map.<P> <LI><VAR>show-full</VAR><BR> Show full health or mana on the map.<P> <LI><VAR>show-no-full</VAR><BR> Show no full health or mana on the map.<P> <LI><VAR>show-sight-range</VAR><BR> Show the sight range of the selected unit on map.<P> <LI><VAR>show-react-range</VAR><BR> Show the react range of the selected unit on map.<P> <LI><VAR>show-attack-range</VAR><BR> Show the attack range of the selected unit on map.<P> <LI><VAR>speed-mine</VAR><BR> Decrease the mining time by this factor. <LI><VAR>speed-gold</VAR><BR> Decrease the time in a gold deposit by this factor. <LI><VAR>speed-chop</VAR><BR> Decrease the time for chopping a tree by this factor. <LI><VAR>speed-wood</VAR><BR> Decrease the time in a wood deposit by this factor. <LI><VAR>speed-haul</VAR><BR> Decrease the time for haul oil by this factor. <LI><VAR>speed-oil</VAR><BR> Decrease the time in an oil deposit by this factor. <LI><VAR>speed-build</VAR><BR> Decrease the time to build a unit by this factor. <LI><VAR>speed-train</VAR><BR> Decrease the time to train a unit by this factor. <LI><VAR>speed-upgrade</VAR><BR> Decrease the time to upgrade a unit by this factor. <LI><VAR>speed-research</VAR><BR> Decrease the time to research by this factor. <LI><VAR>speeds</VAR><BR> Decrease the time off all by this factor. <LI><VAR>tileset</VAR><BR> Defines a tileset.<P> (tileset slot-name name file table)<P> <UL> <LI>slot-name<BR> The tileset slot name. <LI>name<BR> The tileset name. <LI>file<BR> The tileset graphic file. <LI>table<BR> The conversion table from pud tile number (0 - 0x9DF) into internal tile number. </UL> <H4>Example:</H4> (tileset 'tileset-summer "summer" "summer.png" #( ... ) )<P> Define the tileset slot 0 as summer with the graphics in summer.png. #( ... ) is the conversion table of 2528 entries. <LI><VAR>missile-type</VAR><BR> Defines the missile types.<P> (missile-type slot name file width height)<P> <UL> <LI>slot<BR> The missile slot number. <LI>name<BR> The missile name. <LI>file<BR> The graphic sprites file. <LI>width<BR> The width of a sprite. <LI>height<BR> The height of a sprite. </UL> <H4>Example:</H4> (missile-type MissileLightning "Lightning" "lightning.png" 32 32)<P> Define the missile slot 0 as "Lightning".<P> <LI><VAR>define-unit-type</VAR><BR> <A HREF="ccl/unittype.html">unittype.html</A> <LI><VAR>print-unit-type-table</VAR><BR> <A HREF="ccl/unittype.html">unittype.html</A> <LI><VAR>unit-type</VAR><BR> Get the pointer to the unit type structure.<P> (unit-type ident) <DL> <DT>ident</DT> <DD>The unit-type unique identifier.</DD> </DL> <P> <H4>Example:</H4> (unit-type "unit-peon")<P> Get the unit type structure of the peon. #<UnitType 0x80ac350 unit-peon><P> <LI><VAR>unit-type-array</VAR><BR> Get an array of all currently defined unit type structures.<P> (unit-type-array) <P> <LI><VAR>get-unit-type-ident</VAR><BR> Get the unique identifier of the unit type structure.<P> (get-unit-type-ident type) <DL> <DT>type</DT> <DD>Unit type pointer</DD> </DL> <P> <H4>Example:</H4> (get-unit-type-ident (unit-type "unit-peon"))<P> Get the identifier of the unit type peon.<P> <LI><VAR>define-map</VAR><BR> Define the size of a new map.<P> (define-map width height) <UL> <LI>width<BR> The width of the new map. <LI>height<BR> The height of the new map. </UL> <H4>Example:</H4> (define-map 256 256) Define a new map of the size 256 x 256.<P> <LI><VAR>load-pud</VAR><BR> Load a map in pud format.<P> (load-pud name) <UL> <LI>name<BR> The file name. </UL> <H4>Example:</H4> (load-pud "data/default.pud.gz") Load "default.pud.gz".<P> <LI><VAR>freecraft-map</VAR><BR> Define a map in FreeCraft own format.<P> (freecraft-map ...) <P>FIXME: Must write docu<P> <LI><VAR>key-scroll-speed</VAR><BR> Set the speed of keyboard scrolling. <P> (key-scroll-speed speed) <UL> <LI>speed<BR> Number frames to wait between scrolls. </UL> <H4>Example:</H4> (key-scroll-speed 1) Sets keyboard scrolling speed to fastest.<P> <LI><VAR>mouse-scroll-speed</VAR><BR> Set the speed of mouse scrolling. <P> (mouse-scroll-speed speed) <UL> <LI>speed<BR> Number frames to wait between scrolls. </UL> <H4>Example:</H4> (mouse-scroll-speed 10) Sets mouse scrolling speed to pretty slow ( 3 times / second.)<P> <LI>Sound part <UL> <LI><VAR>sound-thread</VAR><BR> Tells FreeCraft engine to use a threaded sound server. MUST be used in the sound.ccl file, BEFORE the game fully starts. As no effect during the game. <LI><VAR>sound-volume</VAR><BR> Set global volume.<P> (set-sound-volume volume)<P> <UL> <LI>volume<BR> The volume from 0 (min=quiet) to 255 (max). </UL> <H4>Example:</H4> (set-sound-volume 128)<p> Set volume to 1/2. <LI><VAR>sound-off</VAR><BR> Turn sound off. Can be later turned on by sound-on. <LI><VAR>sound-on</VAR><BR> Turn sound on. <LI><VAR>sound-for-name</VAR><BR> Return a SIOD sound id to be used in other functions.<P> (sound-for-name name)<p> <UL> <LI>name<BR> The name of the sound (a string). </UL> <H4>Example:</H4> (sound-for-name "tree chopping")<p> Returns the sound id of the tree chopping sound. <LI><VAR>set-global-sound-range</VAR><BR> Set the cut off distance.<P> (set-global-sound-range distance)<p> <UL> <LI>distance<BR> The maximum range of a sound in tiles. </UL> <H4>Example:</H4> (set-global-sound-range 64)<p> Set the maximal sound range to 64 tiles. Sound events happening more than 64 tiles away from the viewpoint won't be eared. <LI><VAR>set-sound-range</VAR><BR> Set the cut off distance for a given sound.<P> (set-sound-range sound ratio)<p> <UL> <LI>sound<BR> The sound either described by its name (a string) or by its SIOD sound id. <LI>ratio<BR> This value (between 0 and 255) allows to compute the range of the sound. 255 means an infinite range. Any number strictly below 255 is a coefficient that will be applied to the cut off distance: the cut off distance for this sound is ratio/254*cut off distance. </UL> <H4>Example:</H4> (set-sound-range "tree chopping" 50)<p> Set the sound range for "tree chopping" to 50/254 times the cut off distance. <LI><VAR>define-game-sounds</VAR><BR> Allows to define what sounds are going to be used for some game level events (such as the click sound). <P>FIXME: Must write docu<P> <LI><VAR>display-sounds</VAR><BR> Test function. Dump on stdio all the client side mappings between sound names and sound ids. <LI><VAR>map-sound</VAR><BR> Defines a new mapping between a sound name (a string) and a sound id. <P>FIXME: Must write docu<P> <LI><VAR>make-sound</VAR><BR> Ask the sound server to register a new sound. Ask the sound client to store the mapping between the obtained sound id and the given sound name. <P>FIXME: Must write docu<P> <LI><VAR>play-sound</VAR><BR> Ask the sound server to play a sound. <P>FIXME: Must write docu<P> </UL> <UL> </UL> </UL> <H2><A NAME="internal">Internal Formats</A></H2> <H3><A NAME="internal-tileset">Tileset</A></H3> The tileset graphic is loaded from 'png'-files. Only files with 256 indexed colors are currently supported.<P> The format of the tileset graphic is:<P> 32x32 pixels of a tile.<P> 16 tiles are stored per row.<P> The pixels (7,6),(7,14),(7,22),(7,30), (15,6),(15,14),(15,22),(15,30), (23,6),(23,14),(23,22),(23,30) and (31,6),(31,14),(31,22),(31,30) are used for the minimap picture. For a 32x32 map all 16 Pixels are used. For a 128x128 map only the first one.<P> The colors of the palette reserved for the tileset:<BR> HELPME: I don't know!<P> The conversion table from pud file to the internal format could be changed with ccl. <A HREF="graphic/tileset.html">More tileset informations</A> <H3><A NAME="internal-ui">User Interface</A></H3> <A HREF="graphic/ui.html">More user interface informations</A> <H3><A NAME="internal-sprites">Sprites</A></H3> The graphics are loaded from 'png'-files. Only files with 256 indexed colors are currently supported.<P> The format of an unit sprite is:<P> FIXME: more to come <H3><A NAME="internal-palette">Palette</A></H3> Look into tileset documentation, what I have found. <H3><A NAME="internal-sounds">Sounds</A></H3> The sounds are loaded from 'wav'-files. Files with 8 or 16 bit, mono and 11025hz sample frequency are currently supported.<P> <H3><A NAME="utilities">Utilities</A></H3> <H4>extract</H4> Extract a compressed entry out of the original game data file.<P> Read the knowledge bases which entry contains what. <H5>Usage: extract data-file entry output</H5> <UL> <LI>data-file<BR> Compressed input data file. (normally maindat.war) <LI>entry<BR> Entry number of the data-file. <LI>output<BR> Output file for the uncompressed entry. </UL> <H4>gfx2png</H4> Convert compressed graphic (unit sprites) to png graphic file. <H5>Usage: gfx2png palette file.gfx</H5> <UL> <LI>palette<BR> Use palette in png file. "palette" is a raw file containing 768 bytes for 256 colors of r g b. <LI>file.gfx<BR> File.gfx contains the graphics of the sprites. The output file is file.png. </UL> <H4>gfu2png</H4> FIXME: must write docu. <H4>img2png</H4> FIXME: must write docu. <H4>cur2png</H4> FIXME: must write docu. <H4>fnt2png</H4> FIXME: must write docu. <H4>tile2png</H4> FIXME: must write docu. <H4>aledoc</H4> FIXME: must write docu. <H2><A NAME="arts">Arts</A></H2> Following things are used from other peoples. If not other mentioned, protected by the following license <A HREF="opl.html">"OpenContent License" </A></B> <DL> <DT>cross.png, health.png, mana.png. <DD>(c) Copyright 1998-2001 by Johns. <DT>food.png <DD>Food resource icon (c) Copyright 2000 by the Guardian. <DT>score.png <DD>Score icon in resource (c) Copyright 2000 by the Guardian. <DT>ore,stone,coal.png <DD>Orc, Stone and coal icon in resource (c) Copyright 2000 by the Guardian. <DT>freecraft.bmp, freecraft.ico <DD>The FreeCraft icon (c) Copyright 2000 by Kyle. </DL> <H2><A NAME="thanks">Thanks</A></H2> Thanks to following people for helping me develop FreeCraft: <UL> <LI>Ari <LI>Edgar <LI>Valery Shchedrin <LI>Iftikhar Rathore <LI>Charles K Hardin <LI>Fabrice Rossi <LI>DigiCat <LI>Josh Cogliati <LI>Patrick Mullen <LI>Vladi Shabanski <LI>Cris Daniluk <LI>Patrice Fortier <LI>FT Rathore <LI>Trent Piepho <LI>Josh Cogliati <LI>Jon Gabrielson <LI>Lukas Hejtmanek <LI>Steinar Hamre <LI>Ian Farmer <LI>Sebastian Drews <LI>Jarek Sobieszek <LI>Anthony Towns <LI>Stefan Dirsch <LI>Al Koskelin <LI>George J. Carrette <LI>Guardian <LI>Michael O'Reilly <LI>Dan Hensley <LI>Sean McMillian <LI>Mike Earl <LI>Ian Turner <LI>David Slimp <LI>Iuri Fiedoruk <LI>Luke Mauldin <LI>Natan Adams <LI>Stephan Rasenbergver <LI>Dave Reed <LI>Josef Spillner <LI>James Dessart <LI>Jimmy Salmon <LI>Jan Uerpmann <LI>Aaron Berger <LI>Latimerius </UL> <P><EM>And to all I have forgot to write up!</EM><BR> Please drop me an email, if I forgot you. <H2><A NAME="contents">Contents</A></H2> <UL> <LI><A HREF="#copyright">Copyright</A> <LI><A HREF="#disclaimer">Disclaimer</A> <LI><A HREF="#introduction">Introduction</A> <LI><A HREF="#install">Install</A> <LI><A HREF="#upgrade">Upgrade</A> <LI><A HREF="#changes">Changes</A> <LI><A HREF="#todo">To-do</A> <LI><A HREF="#faq">FAQ</A> <LI><A HREF="#features">Features</A> <LI><A HREF="#open-projects">Open projects</A> <LI><A HREF="#documentation">Documentation</A> <UL> <LI><A HREF="#commandline">Command line options</A> <LI><A HREF="#ccl">CCL: FreeCraft Configuration language</A> <LI><A HREF="#internal">Internal Formats</A> <UL> <LI><A HREF="#internal-tileset">Tileset</A> <LI><A HREF="#internal-ui">User interface</A> <LI><A HREF="#internal-sprites">Sprites</A> <LI><A HREF="#internal-sounds">Sounds</A> <LI><A HREF="#internal-palette">Palette</A> </UL> </UL> <LI><A HREF="#utilities">Utilities</A> <UL> </UL> <LI><A HREF="#arts">Arts</A> <LI><A HREF="#thanks">Thanks</A> <LI><A HREF="#contents">Contents</A> </UL> <HR> All trademarks and copyrights on this page are owned by their respective owners. <ADDRESS><A HREF="mailto:aleclone@FreeCraft.org">The FreeCraft Project</A> </ADDRESS></BODY></HTML>