- fix pointed out by Matt Mets
[supertux.git] / LEVELDESIGN
index fe94ea0..030d190 100644 (file)
@@ -9,68 +9,146 @@ the level editor.
 
 = LEVEL FORMAT =
 
-The level format used to be pretty easy to understand, but it
-is now more complex. Anyway, should be pretty useful to know
-a bit of it, when you want to do stuff just as to just change
-the author's name or something small.
+Since the level editor does not support anything, you might have
+to edit a couple of things directly from the level file, so it
+might be a better idea to read this.
 
-It uses the Lisp syntax and is pretty intuitive. Here have a
-look at a quotation:
-(Comments can be made using ';')
+Level format should be pretty straight forward. The syntax is the
+Scheme one. But even if you have no idea about it, no worry,
+it is pretty intuitive.
+
+Attention: this describes the new level format. But current levels
+still use the old one, since the engine still supports it and also
+level editors still use it.
+
+To explain a bit of the level format, there is nothing better than
+really looking at it. So here goes a quote of it. The comments
+prefix-ed by a ';', describe what everything is about.
 
 ; This is a comment!
+; Level made using SuperTux's built-in Level Editor
 (supertux-level
-; some level info: version, author and the level's name
-  (version 1)
+; version higher than 1 means that it follows the new level format (CVS)
+  (version 2)
+; Level's title and author name
+  (name "The Castle of Nolok")
   (author "Ingo Ruhnke")
-  (name "Night Chill")
-; number of tiles used (currently the height has to be 15)
-  (width  515)
-  (height 15)
-; Tux's start position
-  (start_pos_x    100)
-  (start_pos_y    170)
-; Background image; if none is specified, the color below will be used
-  (background "")
-; Music file
-  (music "Mortimers_chipdisko.mod")
-; Colors, as you can see you can have different colors in the top
-; and in the bottom, thus creating a gradient
-  (bkgd_red_top    0)
-  (bkgd_green_top  0)
-  (bkgd_blue_top   0)
-  (bkgd_red_bottom    120)
-  (bkgd_green_bottom  120)
-  (bkgd_blue_bottom   0)
-; Time (it is not in seconds!)
-  (time  300)
-; Gravity to be used (you should let it stay in 10 for ordinary levels)
-  (gravity  10)
-; The particle system draws images that simulate weather effects
-; As of the writing of this text, both "snow" and "clouds" are supported
-  (particle_system "snow")
-; Theme is the tileset that is used
-  (theme "antarctica")
-  (interactive-tm
-    ; here goes a lot of numbers that are the tiles places
+; Time the player has to finish the level (it is not in seconds!)
+  (time 300)
+; Each level has one or more sectors. Sectors can be seen as levels inside this
+; level. Their use is for swapping.
+  (sector
+; Naming sectors is usefull to for swapping
+; "main" sectors are the ones that the player will start in
+    (name "main")
+; Setup an end sequence animation (blank for nothing).
+; Currently supported is fireworks that displays fireworks on exit.
+    (end-sequence-animation "fireworks")
+; Level's gravity (better let it 10)
+    (gravity 10)
+; We can have one or more playerspawn that can be used by doors.
+; "main" is the default one for this sector.
+  (playerspawn
+    (name "main")
+    (x 100)
+    (y 170)
   )
-; Reset points; there can be more than one
-; Reset points are positions where the player passes through and
-; if he dies, he will be back to there. They are invisible
-  (reset-points
-    (point (x 6988) (y 222))
-   )
-; Objects include enemies, may include more stuff in the future
-; just as moving plataforms...
-  (objects
-    (mriceblock  (x 13919) (y 384))
-    (mriceblock  (x 14258) (y 366))
-    (mriceblock  (x 12996) (y 248))
-    (mriceblock  (x 13058) (y 250))
-    (mriceblock  (x 12933) (y 245))
+; Level's music file from data/music
+    (music "fortress.mod")
+; This level will use a vertical background
+; You can also set a background image by using:
+; (background "arctis.jpg")
+    (background
+      (top_red 0)
+      (top_green 0)
+      (top_blue 0)
+      (bottom_red 150)
+      (bottom_green 0)
+      (bottom_blue 0)
+    )
+; Now let's go for tilemaps. Tilemaps are the tiles field. We can have more
+; than one. Each one has the following properites:
+; layer - can be foreground (drawn above player), interactive (interacts with player,
+; (solid #t) has to be set, as well), background (drawn below the player).
+; speed - this can be used for parallax effects. Better use a level editor (though
+; there is not yet one that supports it) to edit this.
+    (tilemap
+      (layer "interactive")
+      (solid #t)
+      (speed 1)
+; width and height of the tilemap. Has to be specified.
+      (width 525)
+      (height 15)
+; Here goes the tilemap :
+      (tiles 64 64 69 68 68 ...
+       ....
+       ....)
+    )
+; Another tilemap, this is the background one
+    (tilemap
+      (layer "background")
+      (solid #f)
+      (speed 1)
+      (width 525)
+      (height 15)
+      (tiles 0 0 ...
+       ... )
+    )
+; Yet another one. Normally there are only three.
+    (tilemap
+      (layer "foreground")
+      (solid #f)
+      (speed 1)
+      (width 525)
+      (height 15)
+      (tiles 0 0 0 0 ...
+       ...)
+    )
+; Let's setup a few bad guys.
+    (jumpy
+      (x 1277)
+      (y 388)
+; stay-on-platform is a flag to tell them not to fall from
+; their platforms.
+      (stay-on-platform #f)
+    )
+    (mriceblock
+      (x 4345)
+      (y 380)
+      (stay-on-platform #f)
+    )
+    (stalactite
+      (x 790)
+      (y 96)
+      (stay-on-platform #f)
+    )
+; At last, but not least, the camera:
+; (Order doesn't matter for Lisp, so camera could be on top or the middle)
+    (camera
+; This is the ordinary mode, but we can also have an auto one.
+; "auto" can be used to create a path to the camera.
+; Here is an example of an auto camera:
+;  (camera
+;    (mode "autoscroll")
+;    (path
+;      (point (x 0) (y 0) (speed 0.5))
+;      (point (x 500) (y 0) (speed 2))
+;      (point (x 1200) (y 0) (speed 1))
+;      (point (x 3000) (y 0) (speed 1))
+;      (point (x 1500) (y 0) (speed 1.4))
+;      (point (x 99999) (y 0))
+;    )
+;  )
+      (mode "normal")
+; backscrolling is only set for normal. It says if player can back
+; scroll or not (just go to the front).
+      (backscrolling #t)
+    )
+; We could also setup other objects, like trampolins, doors (to swap),
+; and moving platform. Please check another level (ie. in test/) that
+; uses them to learn more about them.
   )
-   )
-
+)
 
 = LEVEL EDITORS =
 
@@ -108,8 +186,6 @@ To go back to the menu, just press Esc.
 The levels are saved under a .supertux/levels directory in
 your home directory.
 
-FIXME: this description of the built-in level editor are
-out dated. Anyway, it is yet being developed.
 
 USING FLEXLAY:
 --------------
@@ -122,12 +198,11 @@ Anyway, it is pretty easy to use and is a lot more advanced than
 the internal one. So, if you are considering doing a few levels
 for us, it would be a good idea to check this out.
 
-There isn't currently any webpage for it, just go to our webpage and
-you should find a download of this program.
+Its webpage is located at:
+http://pingus.seul.org/~grumbel/flexlay/
 
-You can also get the latest development copy from the Subversion
-source tree:
-    svn co "svn://clanlib.org/Games/Windstille/trunk/flexlay/"
+It needs ClanLib and a few odd libraries... Anyway, it worths
+it ;)
 
 The only cons it has is that you have to have an accelerated
 videocard (with the drivers working, obviously). For linux,