* Tiles now have an alpha parameter for semi-transparency (useful in levels like...
[supertux.git] / docs / fileformats / fileformats.xml
1 <?xml version='1.0' ?>
2 <!--
3 $Id$
4
5 SuperTux Documentation
6 Copyright (C) 2005 Ondra Hosek <ondra.hosek@gmail.com>
7
8 This document is free; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as
10 published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
12
13 This document is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program (see the file named 'COPYING'); if not,
20 write to the Free Software Foundation, Inc., 59 Temple Place -
21 Suite 330, Boston, MA 02111-1307, USA.
22
23 -->
24 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.3//EN"
25 "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
26
27 <article xml:lang="en">
28
29 <articleinfo>
30 <title>SuperTux File Format Documentation</title>
31 <author><firstname>Ondra</firstname><surname>Hosek</surname></author>
32 </articleinfo>
33 <para>So you've got a text editor and want to play around with the SuperTux files, eh? Then I suppose you'll find this reference informative. (At least I hope so.) Toying around with SuperTux files using nothing but a text editor is not everyone's hobby... and writing documentation for toying around with a text editor is a sign of masochism. ;-)</para>
34 <sect1><title>Brackets, brackets, brackets (About the Language)</title>
35 <para>As you might have already noticed, the SuperTux definition files (just about for everything) are full of brackets ('(' and ')'). I know that <acronym>BASIC</acronym> programmers already freak out when seeing the vast amount of brackets used in C. The truth is that you can never have too many brackets. (Okay, that's a lie, but I don't know how lenient your compiler is.)</para>
36 <para>&quot;That Crazy File Format&quot; used by SuperTux is Lisp. In most of its implementations, it is used as a programming language, but the devs simply thought why not to implement it as a data storage language. And so, the SuperTux data language, nearly fully based on Lisp, was born.</para>
37
38 <sect2><title>Basic Syntax</title>
39 <para>So now you expect me to teach you Lisp. &quot;You'd like that, wouldn't ya?&quot; Okay, okay, let me teach you a bit.</para>
40 <para>Language syntax is (nearly) always best consumable when demonstrated on an example, like so:
41 <programlisting>(supertux-lisp-example
42     ; This is a comment. It is initiated by a semi-colon. (Yes, you un-believer.)
43     (some-integer 120)      ; Integer values are simple to input and to understand.
44     (floaty-float 58.5)     ; Floating-point numbers should be self-explanatory too.
45     (string-thong "omg")    ; Strings are simple and C-like.
46     (intl-string _("wtf"))  ; Internationalised strings are implemented not unlike in C.
47     (boo-bool #t)           ; That's a "true"...
48     (second-bool #f)        ; ... and that's a "false". (Well duh.)
49     (integer-list 10 20 30) ; A list of integers, much like an array.
50 )  ; Don't forget the closing bracket!!!
51 </programlisting>
52 </para>
53 </sect2>
54
55 </sect1>
56
57 <sect1><title>Level Files</title>
58 <para>The level format is a bit complex, so unless you really want to write a level using a text editor, get <ulink url="http://flexlay.berlios.de/">Flexlay</ulink> and don't strain yourself too much.
59 <programlisting>;; Generated by Flexlay Editor (or Emacs or Vi or whatever)
60 (supertux-level                      ;; This initiates a level.
61
62   (version 2)                        ;; This document only describes version 2. Version 1 is deprecated
63                                      ;; and I'm not going to teach it since it lacks a lot of features.
64
65   (name _("Some demo level"))        ;; Name of the level. Call it a nice name. Note that this should be
66                                      ;; internationalised (that's why the extra underscore and brackets).
67
68   (author "Ondra Hosek")             ;; Put your name here unless you are me (very improbable)
69
70   (sector                            ;; A level is divided into independent sectors that can be connected
71                                      ;; by doors.
72
73     (name "main")                    ;; Tux begins in the sector named &quot;main&quot;.
74
75     (music "Ondras_chipdisko.mod")   ;; Name of the music file. See the data/music/ directory.
76     
77     (gravity 10.0)                   ;; Gravity of Tux. 10.0 is the default and sanest value (unless you
78                                      ;; apply the level design correctly).
79     
80     (tilemap                         ;; Here come the files.
81       (layer  "background"           ;; Currently, there are three layer types: &quot;background&quot;,
82                                      ;; &quot;interactive&quot; and &quot;foreground&quot;.
83
84       (solid  #f)                    ;; Will Tux collide with tiles in this tilemap?
85       
86       (speed  1.0)                   ;; If the tilemap is solid, this has to be 1. Basically sets how
87                                      ;; fast the tilemap scrolls.
88       
89       (width  5)                     ;; Number of tiles you plan to put in a row...
90       (height 5)                     ;; ... and in a column. (5x5 is pretty tiny; small Tux
91                                      ;; takes up 1x1 tiles, big Tux 1x2 tiles).
92       
93       (tiles                         ;; Integer lists of which tiles you want to use.
94         0 0 0 0 0                    ;; The tiles and their numbers are defined in
95         0 0 0 0 0                    ;; data/images/tiles.strf.
96         0 0 0 0 0
97         0 0 0 0 0
98         0 0 0 0 0
99       )
100     )
101     (tilemap
102       (layer  "interactive")
103       ;; See the bacgkround layer definition.
104     )
105     (tilemap
106       (layer  "foreground")
107       ;; ...
108     )
109     
110     (camera                          ;; Definitions of the camera paths
111
112       (mode "autoscroll")            ;; This can be set to "normal" to deactivate
113                                      ;; forced scrolling. Then you can omit the
114                                      ;; "path" directive.
115       
116       (path                          ;; Forced scrolling path
117         
118         (point (x 2) (y 3) (speed 2) ;; Point to where camera will scroll.
119           )
120         
121         (point
122           ;; ...
123         )
124       )
125     )
126     
127     (background
128       (image "ocean.jpg")            ;; Background from data/images/background
129       (speed 0.5)                    ;; Scrolling speed
130     )
131     
132     (spawnpoint (name "main") (x 0)  ;; A spawning point for Tux. By default, he is
133       (y 0)                          ;; spawned at spawnpoint named "main".
134     )
135     
136     ;; THE FOLLOWING OBJECTS ARE OPTIONAL.
137     (init-script "
138 // A Squirrel script
139 // See the scripting reference for more information.
140 ")
141
142     ;; Here you can add badguys of your choice.
143     ;; A reference on badguy types and their parameters is a TODO.
144     
145     ;; Particle systems
146     ;; ditto
147   )
148   
149   ;; You can add other sectors here.
150 )</programlisting>
151 </para>
152 </sect1>
153
154 <!--
155
156 TODO:
157 * Worldmap
158 * Level subset
159 * Scrolling Text
160 * Badguy types
161 * Particle systems
162 * Sprite definitions
163 * Tile definitions
164
165 -->
166
167 </article>