Here's an idea I have for a simple interface for creating and playing cutscenes. I'm already fairly sure I'm going to create this for my current project, but I'm curious to gauge how interested anyone else might be in using it if I were to release it publicly. If there's any interest, I'll be willing to release it open-source as well (which would be my first open-source project in over half a decade, woohoo
The goal is a simple but flexible way of quickly and easily creating cutscenes, and then being able to load and play them in any Irrlicht game with ease.
Components
IrrCutscene would be comprised of three parts, shown in this diagram:

IrrCutscene Editor: an application that provides a visual interface for creating .cut scripts. Ideally, it will also allow you to "play" those scripts from within the application so that you can preview your cutscenes without having to run your actual game to test them out.
.cut files: the script files generated by the IrrCutscene Editor. These are text files, not binary, so you can open them up and edit them by hand if you want (and then even re-load them into the editor with no problems if you desire to do so).
IrrCutscenePlayer: a class that you copy into your game project. The code you use in your game to load a cutscene would be something like this:
Code: Select all
// the "start cutscene" code. place this whenever you want the cutscene to initialize
IrrCutscenePlayer * cutscene = new IrrCutscenePlayer("mycutscene.cut", sceneManager);
cutscene->startPlaying();
// the "tick" code. place this wherever your game logic goes
cutscene->tick(delta);
if (!cutscene->playing()) { // cutscene is over, so let your game know to load the next level or whatever }
The cutscene scripts will have a variety of functions available to them, and given the open-source nature of the IrrCutscenePlayer class, you'll be able to (fairly easily) add new functions if you wish.
The premade functions will be divided into five different components (maybe more):
- camera : controls the camera's position and target
- nodes : add/remove scene nodes, set their positions/animations/rotations, tell them to move to a point, etc.
- sound : play sound or music, optionally linked to a 3D position
- delay : delay the script from progressing to the next action until: specific time (ex: 3.5 seconds), node stops moving, camera stops moving, key is pressed, etc.
- message : something that not everyone will use. This will be for displaying RPG-like dialogue boxes (example).


