+ remove_me();
+}
+
+#define FADING_TIME 350
+
+void
+FloatingText::draw(DrawingContext& context)
+{
+ // make an alpha animation when disapearing
+ int alpha;
+ if(timer.get_left() < FADING_TIME)
+ alpha = timer.get_left() * 255 / FADING_TIME;
+ else
+ alpha = 255;
+
+ context.push_transform();
+ context.set_alpha(alpha);
+
+ context.draw_text(gold_text, text, position, LEFT_ALLIGN, LAYER_OBJECTS+1);
+
+ context.pop_transform();
+}
+
+/* Trampoline */
+
+Sprite *img_trampoline;
+
+Trampoline::Trampoline(LispReader& reader)
+{
+ reader.read_float("x", base.x);
+ reader.read_float("y", base.y);
+ base.width = 32;
+ base.height = 32;
+ power = 7.5;
+ reader.read_float("power", power);
+
+ frame = 0;
+ mode = M_NORMAL;
+ physic.reset();
+}
+
+Trampoline::Trampoline(float x, float y)
+{
+ base.x = x;
+ base.y = y;
+ base.width = 32;
+ base.height = 32;
+ power = 7.5;
+
+ frame = 0;
+ mode = M_NORMAL;
+ physic.reset();
+}
+
+void
+Trampoline::write(LispWriter& writer)
+{
+ writer.start_list("trampoline");
+
+ writer.write_float("x", base.x);
+ writer.write_float("y", base.y);
+ writer.write_float("power", power);
+
+ writer.end_list("trampoline");
+}
+
+void
+Trampoline::draw(DrawingContext& context)
+{
+ img_trampoline->set_frame(frame);
+ img_trampoline->draw(context, base, LAYER_OBJECTS);
+ frame = 0;
+}
+
+void
+Trampoline::action(float frame_ratio)
+{
+ // TODO: Remove if we're too far off the screen
+
+ // Falling
+ if (mode != M_HELD)
+ {
+ if (issolid(base.x + base.width/2, base.y + base.height))
+ {
+ base.y = int((base.y + base.height)/32) * 32 - base.height;
+
+ physic.enable_gravity(false);
+ physic.set_velocity_y(0.0f);
+
+ physic.set_velocity_x(0);
+ }
+ else
+ {
+ physic.enable_gravity(true);
+ }
+ }
+ else // Player is carrying us around
+ {
+ /* FIXME: The trampoline object shouldn't know about pplayer objects. */
+ /* If we're holding the iceblock */
+ Player& tux = *Sector::current()->player;
+ Direction dir = tux.dir;
+
+ if(dir == RIGHT)
+ {
+ base.x = tux.base.x + 16;
+ base.y = tux.base.y + tux.base.height/1.5 - base.height;
+ }
+ else /* facing left */
+ {
+ base.x = tux.base.x - 16;
+ base.y = tux.base.y + tux.base.height/1.5 - base.height;
+ }
+
+ if(collision_object_map(base))