Template:Outdated It would be very nice to have support for cutscenes to drive the story of the game forward and enhance athmosphere for the player. No details discussed yet. Some questions that should be answered:
These things should be supported by cutscenes:
This is how a scripted cutscene might look like. Please comment if you would like such a style/syntax of handling things:
(supertux-level
(version 2)
(name (_ "Intro"))
(author "Matthias Braun")
(sector
...
)
(scripted-object
(x 242)
(y 943)
(name "Tux")
(sprite "Tux")
)
(scripted-object
(name "Penny")
(sprite "Penny")
)
(scripted-object
(name "Nolok")
(sprite "Nolok")
(visible #f)
(solid #t)
)
(scripted-object
(x 1002)
(y 244)
(name "Bush")
(sprite "Bush")
(solid #f)
)
(scripted-object
(name "Message")
(sprite "Paper")
(solid #t)
(visible #f)
)
(script
// setup some things in the scene...
Sound.play_music("intro.ogg");
Tux.set_animation("sitting");
Penny.set_animation("sitting");
// display text and let tux/penny meep a bit
Display.show_text(
@"Tux and Penny were out having a nice
picnic on the ice fields of Antarctica.");
Sound.play_sound("meep.wav");
wait(0.3);
Sound.play_sound("penny_meep.wav");
wait(0.4);
Sound.play_sound("meep.wav");
// wait till user has read the message or until 5 secs are over...
Display.wait_for_message(5);
// the action starts...
Display.fade_text();
wait(0.3);
Display.show_text("When suddenly...");
Display.fade_text();
// the bush shakes...
Bush.set_animation("rustling");
Sound.play_sound("bush_rustling.wav");
wait(0.4);
// and Nolok is on the screen
Nolok.set_visible(true);
Bush.set_animation("default");
// jump up...
Nolok.set_velocity(15, 20);
wait(.5);
// jump up again
Nolok.set_velocity(-15, 20);
wait(.5);
// nolok casts spell
Nolok.set_animation("cast-spell");
wait(.3);
// enable lighting
Display.set_effect("lightning");
Sound.play_sound("lighting.wav");
wait(.1);
Display.set_effect("fade-black");
Display.wait_for_effect();
// now that everything is black we can hide penny, add the paper
// message and make tux lying
Penny.set_visible(false);
Tux.set_animation("lying");
Tux.move(20, 0);
Paper.set_visible(true);
wait(1.5);
// fade in again and let the message fall down
Paper.move(1250, 960);
Display.set_effect("fade-in");
wait(1.5);
// let tux stand up again and grab the message
Tux.set_animation("default");
Tux.set_velocity(10, 0);
wait(.3);
Message.set_visible(false);
Display.show_text("There was a message for Tux:...");
Display.wait_for_message();
// fade out
Display.set_effect("fade-out");
Display.wait_for_effect();
// Level is finished
Level.finished();
script)
)