Free visual novels on Steam [updated: 26 August 2016]

Sometimes you want to take off your gamedev hat and play something someone else has made. Sometimes your budget is tight.

Here’s a list of all of the Visual Novel/Kinetic Novel games that I could find on Steam (there’s also a couple not-quite-VN interactive fiction titles), not counting demos …

Continue reading Free visual novels on Steam [updated: 26 August 2016]

This is how I find bugs

I walked into the kitchen, and put the kettle on, and put the fixings for coffee into my mug. The cat was bugging me for milk, so I gave him some.

He wouldn’t touch it, but just stared at me.

I petted his head and rubbed his back. Then he got into the milk. He needs the full dining experience.

I went to the back door, started rolling a cigarette and half-way through a nagging something in my head tried to get my attention.

“Oh, bugger,” I said out loud.

I’d found a bug in my mouse-interaction code. It was code that I hadn’t touched, or even looked at since maybe August last-year, when I wrote it initially. A nine-line function that turned mouse-clicks into proper UI-widget interactions.

Suddenly, the shape of that code was floating in my head, and it was the wrong shape. It didn’t … fit.

The code had never misbehaved, or done anything wrong, but that wasn’t the point. I knew it was wrong, and I had a feel for how it would misbehave. Even if I couldn’t remember the exact lines of code.

My instinct was telling me that mouse-clicks might pass through non-reactive UI elements and trigger reactive elements underneath. That had never happened, to my knowledge, but I was suddenly certain that it would.

So, I aborted making coffee, and my cigarette and went and looked at the code.

I was right. It was wrong. It would behave in exactly the wrong way that I had envisioned, if the circumstances ever came to pass (and they would!).

So, I fixed it. New code. New shape. It settles in more comfortably now.

This, though, is how I find bugs. 90% of the bugs I find aren’t because something goes wrong. In fact, the game behaves perfectly. It does everything it should, exactly as it should. I’ve seen no sign that there’s an issue, and nothing’s been reported.

But I’m in the bathroom, or having a cigarette, or trying to sleep, and there it is. I suddenly know that a bit of the code isn’t right, and in what way it isn’t right. There’s a kind of synaesthesia at work – the codebase exists in my head as a collection of shapes that aren’t shapes, and colours that aren’t colours.

Whatever I’m doing, or wherever I am, some part of my brain is walking over that model, looking for anomalies. And finding them wherever they are.


It would, perhaps, be nice if it could announce them right away, while I am actually writing the code, for example, but no. It chugs away in its own good time doing a whole-program analysis, and then bugging me about it when my attention is on other things.

At four-thirty in the morning, some noise sets the dog barking, which wakes me up in turn, and then that synaesthestic model is hanging in my head, focused on a rendering function, or caching algorithm, that’s working but is invisibly buggy. And I know what’s wrong. I can fix it in five minutes. If I got up.

Getting back to sleep again – or maintaining any kind of task-focus on anything else – is pretty hard when you’ve got one of these things dangling in your forebrain, insisting on being fixed.

Finding bugs the way regular people do (when things just plain break or misbehave) seems like a lot less trouble.


Being great doesn’t mean you’ll always do great work

Last night, I tried to write a simple function. It should have taken me about a minute to write, and eight lines of code.

I got it wrong. Very wrong. Astonishingly wrong.

I got it wrong in every possible way you could get it wrong, and in a few entirely new impossible ways, apparently artisinally-crafted just for the occasion.

In short, I screwed it all sideways, and sixty seconds of code turned into somewhere North of two hours of swearing and debugging.

Today, it’s all genius again. Less than a dozen lines of code adds optional mouseover logic to my widgets, which gives them a delicious, customisable, tactile feedback. Great code. Elegant, concise, and correct.

I revisited last night’s code and fixing it was trivial and obvious.

Look, it doesn’t matter how good you are. You may be smart, skilled, and experienced. You can know your language inside-out. You can thrive on it like some cyborg supercomputer hybrid. You can be a genius among geniuses.

Sometimes you are just going to be unable to sit down and do the thing without completely bollixing the whole thing up, and bollixing it worse when you try to fix it.

You will have times like this. Fifteen minutes. An hour. Two hours. Maybe a whole day. It will happen.

Own it, because it’s going to get you now and again. Sometimes you will screw up the simplest arithmetic. Sometimes you can’t get something right even though you’ve done it a thousand times, like a champ.

If you can’t do the thing, do something else. Have coffee. Play a game. Help another team-member. Get lunch. Take a nap. Ask someone else to do it. Sit in the garden and sob inconsolably – whatever works for you. Just walk the hell away from what you’re screwing up and come back to it when your head is back in order.

An even more important lesson here is to help others deal with it when it happens to them, too. Because it will, and dissing them about it makes you an arse.

Screwing up is less important than properly dealing with it.

I should have closed my editor at least an hour sooner than I did, and done something else. Instead, I kept burning time in The Pit of Fail.

Don’t do that. Do something else. Do anything else.


Romance without routes. Breaking the CYOA/VN formula

Choice-based interactive-fiction comes in a whole bunch of narrative models. If you haven’t read the These Heterogenous Tasks article, Standard Patterns in Choice-Based Games, you should run right out and do that. It’s excellent, and I’ll be making some references to it. I’ll wait. Promise.

Done that? Good, let’s move along.

Continue reading Romance without routes. Breaking the CYOA/VN formula

Kinetic Narrative vs Kinetic Novels: Exploring Kinetic Narrative

Kinetic novels mostly (though not entirely) derive from Japanese publisher VisualArt’s[sic], and its brand キネティックノベル (kineticnovel – smart money says it’s a trademark, so insert usual trademarks blahblah, and let’s move on). The thing that distinguishes kinetic novels as a subclass of visual novels is that they are not choice-based.

However, visual novels (whether kinetic novels or not) use a particular narrative presentation that is best described as “kinetic narrative”.

Kinetic narrative is an interesting beast. The user/reader clicks through the story a bit at a time, which reveals more. Choices that alter the story may or may not be a feature. The important part is the that the user interacts with the novel to reveal the next line, chunk or paragraph.

This brings some interesting features to the table. It allows for a kind of narrative that regular novels don’t, and might be actually a touch more reminiscent of the narrative style in comic-books and graphic novels.

Kinetic narrative allows interesting alterations in tense (permitting occasional graceful changes between past-tense and present-tense), since the user has become directly involved in the motion of the story, and the author can control what sized bites or chunks of text are revealed each time the user steps forward.

Since the user’s gaze can’t arbitrarily skip down the page or onto the next, kinetic narrative has more opportunity to generate surprises or suspense in less space, without having to more laboriously build up over time as you would in a format where the users gaze is uncontrolled.

Oddly, this seems to allow for a more natural form of writing, where you can avoid traditional gimmicks like a comic-book’s habit of placing punch-lines at the end of a page, and surprises or reveals on the next non-facing page. Consider also how traditional novel writers build suspense and perform reveals in relation to the way chapters in a book are laid out.

Kinetic narrative allows us to divest ourselves of a lot of traditional cruft that are associated with the inability to control the reader’s gaze. The reader’s gaze isn’t a problem for kinetic narrative. It sees exactly as much as we wish it to see, and no more. That allows us to create more natural flow in narrative, generate short-term suspense, surprises, create more immediacy, and handle reveals without having to resort to more cumbersome narrative forms.

As a bonus, kinetic narrative doesn’t let the reader’s eye get lost on the page (you know that bit where you accidentally wind up losing your place, on the page often due to external distractions, and have to pick it up again)?

I’m very much starting to warm to kinetic narrative over traditional narrative as a style. It’s not that I don’t appreciate both forms, but that I’m starting to see advantages to the kinetic form that were not initially apparent.