* Tux can now move horizontally after flapping following a vertical jump
authorOndřej Hošek <ondra.hosek@gmail.com>
Tue, 17 May 2005 13:55:06 +0000 (13:55 +0000)
committerOndřej Hošek <ondra.hosek@gmail.com>
Tue, 17 May 2005 13:55:06 +0000 (13:55 +0000)
* Removed alpha setting from tiles again since fglrx was the culprit
* More work on docs

SVN-Revision: 2501

docs/fileformats/fileformats.xml
src/object/player.cpp
src/object/player.h
src/tile.cpp
src/tile.h

index f8d6e3a..9bc9b1f 100644 (file)
@@ -30,7 +30,7 @@ Suite 330, Boston, MA 02111-1307, USA.
 <title>SuperTux File Format Documentation</title>
 <author><firstname>Ondra</firstname><surname>Hosek</surname></author>
 </articleinfo>
-<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>
+<para>This document serves the simple purpose of a reference for the files specific to SuperTux (levels, worldmaps, ...). Some of these files can be modified using an editor such as </para>
 <sect1><title>Brackets, brackets, brackets (About the Language)</title>
 <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>
 <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>
@@ -55,7 +55,7 @@ Suite 330, Boston, MA 02111-1307, USA.
 </sect1>
 
 <sect1><title>Level Files</title>
-<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.
+<para>The level format is a bit complex, which is why <ulink url="http://flexlay.berlios.de/">Flexlay</ulink> can prove itself very useful as an editor. If you are interested in how the levels look like or want to edit them manually (and find some of the parameters not self-explanatory enough), then you may read or skim through this section.
 <programlisting>;; Generated by Flexlay Editor (or Emacs or Vi or whatever)
 (supertux-level                      ;; This initiates a level.
 
@@ -143,12 +143,117 @@ Suite 330, Boston, MA 02111-1307, USA.
     ;; A reference on badguy types and their parameters is a TODO.
     
     ;; Particle systems
-    ;; ditto
-  )
+    ;; It is advisable only to use one particle system at a time.
+    
+    (particles-&lt;type&gt;          ;; Valid values for &lt;type&gt; are rain, snow and clouds
+    
+      (layer 201)                    ;; -100 are background, 0 are interactive, 200 are foreground tiles.
+                                     ;; Choose a number to put the rain between two layers. In this case,
+                                     ;; the rain is in front of the foreground tiles. (see also src/video/drawing_context.h)
+    )
+  ) ;; End of sector
   
   ;; You can add other sectors here.
-)</programlisting>
+)
+;; End of level</programlisting>
+</para>
+
+<sect2><title>Badguys</title>
+<para>This section describes the various badguys and their parameters.</para>
+
+<sect3><title>Common parameters</title>
+<para><programlisting>(&lt;badguy-name&gt;
+  (x 270)                 ;; The badguy's X coordinate.
+  (y 126)                 ;; The badguy's Y coordinate. (Note that the origin is in the top-left corner!)
+  (stay-on-platform #f)   ;; Optional. Should the badguy do its best not to fall from the platform it's on? (NYI)
+)
+</programlisting></para>
+<para>Bouncing Snowballs, Flying Snowballs, Jumpies, Mr Bombs, Mr Iceblocks, Mr Rockets, Mr Trees, World 1 Noloks,
+Poison Ivies, Snowballs, Spikies, Stalactites, Yeti Stalactites and Zeeklings only require this list of
+parameters. Simply substitute <code>&lt;badguy-name&gt;</code> with one of the following:
+<itemizedlist>
+<listitem><code>bouncingsnowball</code></listitem>
+<listitem><code>flyingsnowball</code></listitem>
+<listitem><code>jumpy</code></listitem>
+<listitem><code>mrbomb</code></listitem>
+<listitem><code>mriceblock</code></listitem>
+<listitem><code>mrrocket</code></listitem>
+<listitem><code>mrtree</code></listitem>
+<listitem><code>nolok_01</code></listitem>
+<listitem><code>poisonivy</code></listitem>
+<listitem><code>snowball</code></listitem>
+<listitem><code>spiky</code></listitem>
+<listitem><code>stalactite</code></listitem>
+<listitem><code>yeti_stalactite</code></listitem>
+<listitem><code>zeekling</code></listitem>
+</itemizedlist></para>
+</sect3>
+
+<para>The next few sections describe the extra parameters for the other badguys.</para>
+
+<sect3><title>Dispenser</title>
+<para><programlisting>(dispenser
+  (cycle 3)               ;; How often should a badguy be dispensed?
+  
+  (badguy random)         ;; Valid values are "snowball", "bouncingsnowball", "mrbomb",
+                          ;; "mriceblock", "mrrocket", "poisonivy" or "random".
+)
+</programlisting></para>
+</sect3>
+
+<sect3><title>Flame</title>
+<para><programlisting>(flame
+  (radius 3)              ;; How big should the radius of the circle be that the flame
+                          ;; follows?
+  
+  (speed 10)              ;; How fast should the flame be?
+)
+</programlisting></para>
+</sect3>
+
+<sect3><title>Spike</title>
+<para>Don't mistake this badguy for Spiky! Spiky is the snowball-like creature with
+spikes, whilst a spike is an object serving the same purpose like the stalactite.</para>
+<para><programlisting>(spike
+  (direction 2)           ;; 0: north, 1: south, 2: west, 3: east
+)
+</programlisting></para>
+</sect3>
+
+<sect3><title>Yeti</title>
+<para><programlisting>(spike
+  (dead-script "
+// A squirrel script that is executed once the Yeti dies.
+")
+)</programlisting></para>
+</sect3>
+
+</sect2>
+
+</sect1>
+
+<sect1><title>Scrolling texts</title>
+<para>Scrolling texts are used for the credits and were used for the intro and extro in Milestone 1. The format is simple:
+<programlisting>(supertux-text
+  (background "extro.jpg") ; Background image (see data/images/background)
+  
+  (speed 1.5)             ;; Default speed of text
+  
+  ;; Here we demonstrate the formatting characters
+  (text _("
+
+-This is a heading
+&lt;tab&gt;This is a normal line.
+ This is a line in a small font.
+#This is a left-aligned line.
+*This should be printed in a blue font.
+
+")
+  )
+)
+</programlisting>
 </para>
+
 </sect1>
 
 <!--
@@ -156,9 +261,6 @@ Suite 330, Boston, MA 02111-1307, USA.
 TODO:
 * Worldmap
 * Level subset
-* Scrolling Text
-* Badguy types
-* Particle systems
 * Sprite definitions
 * Tile definitions
 
index f5821c0..9315412 100644 (file)
@@ -415,6 +415,14 @@ Player::handle_vertical_input()
         if (((dir == LEFT) && (cv > 0)) || (dir == RIGHT) && (cv < 0)) {
           cv *= (-1);
         }
+        else if (cv == 0) {
+          if (controller->hold(Controller::LEFT)) {
+               cv = -TUX_FLAPPING_LEAST_X;
+          }
+          else if (controller->hold(Controller::RIGHT)) {
+            cv = TUX_FLAPPING_LEAST_X;
+          }
+        }
         physic.set_velocity_x(cv);
         physic.set_velocity_y(flapping_timer.get_timegone()
             * TUX_FLAPPING_STRENGTH);
index 444dc52..e310cad 100644 (file)
@@ -39,7 +39,8 @@ static const float TUX_SAFE_TIME = 1.250;
 static const float TUX_INVINCIBLE_TIME = 10.0;
 static const float TUX_INVINCIBLE_TIME_WARNING = 2.0;
 static const float TUX_FLAPPING_TIME = 1; /* How long Tux can flap his wings to gain additional jump height */
-static const float TUX_FLAPPING_STRENGTH = 100; /* How much velocity Tux gains when flapping */
+static const float TUX_FLAPPING_STRENGTH = 100; /* How much Y velocity Tux gains when flapping */
+static const float TUX_FLAPPING_LEAST_X = 30; /* How much X velocity Tux gains when flapping from vertical jump */
 static const float GROWING_TIME = 1.0;
 static const int GROWING_FRAMES = 7;
 
index 2befbbf..7998892 100644 (file)
@@ -90,10 +90,6 @@ Tile::parse(const lisp::Lisp& reader)
     attributes |= SOLID | SLOPE;
   }
   
-  if (!reader.get("alpha", alpha)) {
-       alpha = 255;
-  }
-
   const lisp::Lisp* images = reader.get_lisp("images");
   if(images)
     parse_images(*images);
@@ -172,15 +168,11 @@ Tile::get_editor_image() const
 void
 Tile::draw(DrawingContext& context, const Vector& pos, int layer) const
 {
-  context.set_alpha(this->alpha);
-  
   if(images.size() > 1) {
     size_t frame = size_t(global_time * anim_fps) % images.size();
     context.draw_surface(images[frame], pos, layer);
   } else if (images.size() == 1) {
     context.draw_surface(images[0], pos, layer);
   }
-  
-  context.set_alpha(255);
 }
 
index c221003..8a0cf8d 100644 (file)
@@ -91,9 +91,6 @@ private:
   /** General purpose data attached to a tile (content of a box, type of coin)*/
   int data;
   
-  /** Alpha (opacity) of tile */
-  int alpha;
-
   float anim_fps;
 
 public: