Secretchronicles / TSC

An open source two-dimensional platform game.
https://secretchronicles.org/
GNU General Public License v3.0
204 stars 50 forks source link

Cinematic scenes #111

Open datahead8888 opened 10 years ago

datahead8888 commented 10 years ago

This is a task to create a cinematic scene editor user interface that is integrated with the level editor.

Before you panic and say this is too complicated, keep in mind we could start with the raw basics and iteratively progress. I think it would be good to create a UI and not do it strictly through scripting so that non programmers can easily edit scenes and to allow easier visual placement.

Requirements (we can add to these as needed):

A good example of an interesting scene is a an army of furballs and Larries marching across the screen, with dark gray, ominous clouds moving in the background. Such scenes will really drive the plot and get the "button mashers" to actually see what's happening with the story.

Quintus commented 10 years ago

:+1: really good one. We will have to think about about how to integrate that properly, though. I think the cinematic scenes should always be a level on itself, incorporating them into a level you can play through afterwards would probably impose to much work. These levels will have an auto-finish property that will make them forward you to a real level after the scene has been completed.

Vale, Quintus

datahead8888 commented 10 years ago

For now that sounds like a good idea in order to get this prototyped and in front of users. Long term I think it would be good to get cinema scenes to work in the middle of levels (which would require scripting and/or game editor hooks). We'd just want to abstract the code well enough that it's not a royal pain to change this later. We'd also want to choose a format in the level files such that we can change this later without breaking all old levels.

Ultimately, cinema scenes may have to function differently than levels, though. We may want a "field" with different rows of enemies marching in the distance, each scaled to a different size for different depths. This is not something I'd suggest for the first version of the cinema editor, though.

datahead8888 commented 9 years ago

@Bugsbane - do you have any experience with animation software (whether it be Flash or some other product (web or non web based))? You might be able to provide some good input on this.

Early implementations will probably literally be hacks on the level engine, but we may eventually consider adding some traditional animation features such as key frames to this. If we can get a better idea as to what tools would be useful for creating cut scenes using game sprites, it would be helpful. See some of the "learning from videos" posts I made on the forum - they give links to a couple well known sprite movies made in Flash.

Bugsbane commented 9 years ago

do you have any experience with animation software

My masters degree is in computer animation, and I trained to work at Disney (although I ended up going into games / advertising instead), so yes, I'm familiar with 3DS MAX, Maya and Blender, all of which are way more complicated than what's needed.

What I would look for, would be the ability to select and move objects and / or groups of objects. Set position, rotation, scale, opacity keyframes at specific frames. Play sounds and adjust volume keyframes. Add text as an object. In terms of the gui, being able to select keyframes and move them, adjust interpolation curves (ie ease in, linear, ease out), and jump forward / backwards one keyframe or to the next keyframe. I would only show keyframes for currently selected objects.

Personally I would model the simple web based animation systems such as sprite based flash movies, more than the extremely complex ones found in most animation packages and even things like Unity. GooCreate has a nice system for this, but it's still way more than we need.

datahead8888 commented 9 years ago

I probably need to learn more about keyframes myself. What I know is that they deal with the timing of steps of animation and that everyone talks about them as being very foundational to any animation system.

Personally I would model the simple web based animation systems such as sprite based flash movies

This sounds like a good idea. We'd model the commonly used features. The advanced features would probably end up being specific to TSC, based on our level system, etc.

Quintus commented 6 years ago

There will not be an entire cinematic editor in TSC 2.1.0, it is just too much work. What I'm most likely going to do is to provide a special way to script level objects easily in a special mannor. That's better than nothing, and we need to go forward. A fully-featured cinematic editor can be implemented later on.

datahead8888 commented 6 years ago

It took me some minutes to realize this issue tracker is ONLY for the 2.X series. I think it'd make sense to consider filing the cinematic scene editor feature in the TSC 3 tracker. Otherwise we might consider having some sort of other tracker / list of items that are on the theoretical drawing board. It may be a long time (if ever honestly) for this feature to be implemented, but I don't want to lose sight of the idea.

datahead8888 commented 6 years ago

Also, it might make sense to talk a bit more before closing or changing many other features that won't get implemented in the 2.X series. What goes into the 3.X series is another debate, but having an easy way to browse the ideas would be useful. This tracker is going to become inactive after a few 2.X releases, anyways, likely.

Quintus commented 6 years ago

Maybe add a tag "TSC3 consideration" and tag the relevant issues?

Quintus commented 5 years ago

I have been thinking about this ticket. I think we can distinguish two kinds of scenes:

  1. In-level scenes, like Alex finding something and some smaller events happening around that.
  2. Large narrative scenes, like the prologue.

I propose the following.

I. In-level scenes

In level cinematic scenes can be implemented using a special DSL in the level script. In fact, I have already started implementing that. The level script could look something like this:

$Azdhor = UIDS[45]
$Alex   = UIDS[1]
$Alice  = UIDS[66]
$Book   = UIDS[100]

scene = CinematicScene.new do
  set_camera 100, -150

  warp $Alex, :to [100, -165]
  image $Alex 3, :set => "Alex.imgset"

  curtain # Show the scene

  walk $Alex, :to => $Book # Raises error if Y coord not the same

  # Have Alex take up the book
  hide $Book
  animate $Alex do
    image 1, :set => "Alex-Book.imgset"
    wait 0.2
    image 2, :set => "Alex-Book.imgset"
    wait 0.2
  end # Returns $Alex to original image

  # ...
end

# Play the scene once a certain point in the level is reached
UIDS[500].on_touch do
  scene.play
end

I'm not yet entirely content with this as it still requires too much manual typing. Given that our imageset files already contain the relevant timing information, I think it would be good to leverage that.

II. Large scenes

I suggest to add the concept of visual novel telling for these. For instance, the prologue features Alex investigating the eastern desert and finding the first book of the Chronicles. We can narrate this using full-screen pictures and some text. This would be much easier than trying to create a pseudo level for that and it gives room to show details that can't be reproduced in the level elements.

This is trivial to implement (I think). All it needs is a graphic artist willing to draw the scenes as full-screen pictures.

Quintus commented 5 years ago

I remove this from the 2.1.0 mile stone. We have the visual novel system now and we can supplement it with an in-level cinematic scene system in a later release. 2.1.0 is not going to have any story most likely (lack of artists).