drive scene

I honestly think the worst message the Harry Potter series gave is when in the Philsopher’s Stone Dumbledore changes the House’s banners  from Slytherin green to Gryffindor red and everybody cheers. Like yeah, who the fuck cares if first years Slytherin worked hard to reach that, they’re bad. Good work Dumbledore, you’re first in the ranking of people giving unhealthy examples.

So Sherlock deduced that Faith is suicidal because she’s walking around with a cane, no coat on, a gun, and no plan to get home. Which we are then, on camera, explicitly told parallels ASIP John Watson.

So he comes up with a reason to have Faith by his side so he can help her through her danger night.

Which is not at all dissimilar to having John tag along to angelo’s, go on a chase, and spark a joy for life again.

Sherlock knew. When he summoned John across London on that fateful first night “just to send a text”, it wasn’t because he was being a prat, he was trying to save John’s life.

2

Fenris: I saw you casting spells inside. I should have
realized sooner what you really were.

Headcanon for while Hughes was trying to catch Scar: every time he got a phone call from the MPs saying “we got another dead State Alchemist,” he’d be so afraid that their next words would be “looks like it’s Roy Mustang.” A couple times, the MPs weren’t able to identify the body right away (they just found a pocket watch on them). Even though Hughes knew Roy was all the way in East City, he spent the entire drive to the crime scene silently pleading “please don’t be Roy. Please don’t let me pull back that sheet and find my best friend in a pool of blood”

3

Satine Kryze in 3.05

Every time I watch that scene where Regina walks across the room to Emma and holds onto her shoulders and tells her she is GOOD I honest to god think they are going to kiss. Like it doesn’t matter how many times I’ve seen it and how much I know that they aren’t in fact going to kiss, I still instinctively just feel like it’s about to happen when I watch the scene. It drives me insane.

How Cutscenes Work in Wandersong

Wandersong’s a musical adventure game about a bard, where you use singing to solve the world’s problems. It’s made in GameMaker Studio. And it has a big emphasis on story, with a lot of characters and unique scenes. People often ask me how I implement all that behind the scenes, so I figured I’d share my tools a bit.

(Above: a typical conversation, and some of the code that drives the scene)

The basics are pretty straightforward. There’s a cutscene manager objects who hangs out invisibly in every screen of the game. When one of the special cutscene scripts is called, it passes instructions to the cutscene manager, who always keeps a list of instructions running. And whenever the cutscene instruction list has anything in it, the cutscene manager broadcasts that a cutscene is happening, and processes the instructions in its list one by one, until they’re done.

The most important detail of this implementation, I think, is that it lets me write cutscenes inline with the rest of the game logic, and it’s all very natural and fluid, so I can focus on being creative and making it as I go. Other games will often separate the writing and scene stuff into separate files or systems, like an XML data file or a LUA interpreter or something, so that it’s easy to collaborate with a writer without them having to deal with programming, and it can be exchanged later with translated versions. But since I’m also doing all the programming and animation anyway, it’s easier for me to put it together all at once. I’m pretty far along on a solution for translations, too, but that’s for another time…

I’ll share some nitty-gritty on how I make it work specifically in game maker below.

Here’s a typical cutscene script, marked up a bit. All of them follow this structure, which, right out of the gate, is pretty hacky, heh heh. There’s actually two completely different uses for each script, one for when it’s used by the scene manager (red), and one for when it’s used by anything else (blue). The blue part is the one that happens first, so I’ll start there.

The blue part is basically identical in every cutscene script, actually, and I always make a new scene script by duplicating an old one because of this. First, it adds the name of the current script to the objSceneManager’s “scene” list. In Game Maker the name of resources like scripts, sprites, sounds etc. are automatically special words that let you point to them (for example, when you want to play a sound file, typically you’ll tell it the name of the sound so it knows which one to play). So the script basically adds itself to a list somewhere.

Second, it makes a new list that contains all of the “arguments” passed to it. This script is for setting the position of an object during a cutscene, and I give it the name of an object, an x position and a y position… so all those values are stored into a list, and then it adds that list to objSceneManager’s “scene_args” list. Lists of lists might sound kind of silly, but this game is full of them behind the scenes, and they also excite me in ways I don’t fully understand.

This little pile of code is the key that makes the rest of it run, basically. The line underlined in red is the big one. The scene manager tracks where it is in the cutscene with a variable called “scene_moment,” and every frame it looks at that spot in the scene and scene_args lists and runs all the instructions left there. The arguments we passed to the scene initially are stored in lists, and we pass those lists back to the script when we run it from the scene manager. Scene scripts when run from the scene manager always return a true or false, to let it know if they finished their job or not. The scene manager runs them from a “while” loop, which goes forever until it gets a “false” from one of these or runs out of them. The blue section shows what happens when it runs dry… basically it just clears and resets everything.

Back to here, now, looking at the red section… this is how it runs from the scene manager. Instead of looking at arguments, we look at the list passed to us in argument[0], and evaluate the contents of that list like arguments instead. Then we do a little code and return true. Actions that take time or need input, like a textbox or a “Wait for x amount of time” command, will return false until their conditions are all met, at which point they return true. This way I can have many actions parsed in the same frame, like a camera movement and a sound being played, and other times I can create timings by adding in pauses and stuff.

Ta-da! That’s it. I hope it wasn’t too hard to follow. I’ve done a number of games with lots of text and scenes before, but this basic system was a new idea for this game and it’s been by far the most useful and flexible system I’ve been able to work with. Feel free to lift the structure wholesale and make sweet cutscene-filled games with it. And also, feel free to send me questions if I wasn’t clear enough about something.