For 4.0, my plans now are much more ambitious, including a cutscene language (composing scenes directly in JS is awkward, the queuing behavior makes it so there's a lot of things you can't do the "natural" way) and the ability to load scenelets from other JS files.
I'd be more than happy to help you with this, given that I actually have written a cutscene language for Scenario. It probably still needs a bit of work before it's more useful than JS for cutscenes though. Additionally, I don't think it works in Sphere 1.5 (it uses some SpiderMonkey 1.8+ specific syntax) although that should be easy to fix.
Anyway, I'm happy to talk about this in this thread or over PM if you have suggestions for syntax or whatever.
You can see the source for it
here. There's no documentation, but you should be able to figure out the syntax from the parser which is easy enough to read (I can't say the same about the compiler).
Warning: if you do choose to go this route, it's a
lot of code. IMO it's worth it, but it will at least double if not triple the size of Scenario. You'll be requiring prospective users to learn a whole new language as well - although if the cutscene language is well-designed this may be easier than learning how to use Scenario through JS.
Regarding Scenario 3.7, I can't really see how Scenario variables are more useful than JS ones since they're set before the scene is run instead of during, which makes them equivalent to regular variables, no? Wouldn't
scene.movePerson('hero', 'north', 5 * GetTileHeight(), 1, true)
.set('heroX', GetPersonX('hero'))
.set('heroY', GetPersonY('hero'))
.panTo(scene.variables.heroX, scene.variables.heroY, 1)
.run();
move to the location of 'hero'
before the
movePerson()?
If
set() accepted a function instead of a value, then it could call the function at scene run time to produce the value.
scene.variables could be a function that accepts the name of a variable and returns a function that returns the value of the variable. Other scenelets could then accept that function and get the variable's value. In code,
scene.movePerson('hero', 'north', 5 * GetTileHeight(), 1, true)
.set('heroX', function () { return GetPersonX('hero'); })
.set('heroY', function () { return GetPersonY('hero'); })
.panTo(scene.variables('heroX'), scene.variables('heroY'), 1)
.run();