TODO update
[supertux.git] / LEVELDESIGN
index fe94ea0..030d190 100644 (file)
@@ -9,68 +9,146 @@ the level editor.
 
 = LEVEL FORMAT =
 
 
 = 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!
 
 ; This is a comment!
+; Level made using SuperTux's built-in Level Editor
 (supertux-level
 (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")
   (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 =
 
 
 = 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.
 
 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:
 --------------
 
 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.
 
 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,
 
 The only cons it has is that you have to have an accelerated
 videocard (with the drivers working, obviously). For linux,