Monday, September 29, 2008

Speed

After some brutal days of code-scrobbling I have managed to get the average time-per-move down from the completely unacceptable 3.8 seconds to the only-moderately-annoying 1.1. This is still longer than I'd prefer, but my eyes will bleed if I try to find any more bits of inefficient code, so it'll have to do for now.

1. Finish the Epilogues
2. Rework "Staying With Rume" in Chapter 1
3. Finish Progue scenes for his "Uncertain" psyche.
4. Finish sketched-but-unwritten portions of The Confrontation.
5. Finish fleshing out and implementing "Forest" and its people.
6. Add support for Intelligent Hinting (half done)
7. Finish attitude-adjustment Progue mini-scenes. (a third done)
8. Go through whole game and solve any structural / derailing issues.
9. Optimise for speed as much as possible.

Wednesday, September 24, 2008

Progress...

-- Made a small but important speed breakthrough: certain puzzles involved changing the structure of the map to open or close various exits, but I discovered the new I7 pathfinding code caches map info only if the map never changes. Reworking this stuff improved speed in certain cases.

-- Wrote an extension called "Poor Man's Mistype" that somewhat replicates the spelling-correction functionality of "Mistype" of old (which no longer compiles on modern Inform). It's a pretty rough and lazy way to try to catch spelling errors, but hopefully it will be better than nothing.

-- Got a good deal into adding "Intelligent Hinting" support. (This is the code that allows the game to play itself; originally developed for BL, it was later spun off into its own extension, and now the original has been rooted out so the shiny plug-in could replace it. Actually much easier than I was expecting, although testing this fully will take a while longer.)

-- Took advantage of several bug fixes in the latest I7 build to restore several old bits of functionality which had been broken or commented out.

Monday, September 22, 2008

Rume

The intro of BL (the Prologue and Chapter One) has probably been subject to more revision and disproportionate attention than anything else. Which I suppose is appropriate, since that's the segment that determines whether people will stick around for the rest of the story.

A particularly vexing portion of this has been the character of Rume, and specifically the nature of the player's choice to leave or stay with them. Originally conceived of as a plot device to help explain Wayfaring and bits of backstory, Rume has slowly evolved from a quick cameo into a more and more complex character, who now, depending on the player's choices, can be one of the most important characters in the game.

Near the end of this sequence, the player must choose to stay with Rume, or answer the Call. I had always been aware this was sort of a false choice (since the body of the game occurs if you answer the Call) but conversations with various friends convinced me that giving the player a false choice so early in the game would undermine my whole philosophy that the player's intentionality was actually significant, not just illusional.

So what happens if you choose to stay with Rume has been through three complete iterations now. I think I've finally hit on something I'm happy with. Of course, the player still does end up on Lacuna, but hopefully with altered goals and a different perspective. And the choice has repercussions much later in the story, as well: among other things, it's a prime deciding factor in which epilogue you receive.

So:

1. Finish the Epilogues
2. Rework "Staying With Rume" in Chapter 1
3. Finish Progue scenes for his "Uncertain" psyche.
4. Finish sketched-but-unwritten portions of The Confrontation.
5. Finish fleshing out and implementing "Forest" and its people.
6. Add support for Intelligent Hinting
7. Finish attitude-adjustment Progue mini-scenes.
8. Go through whole game and solve any structural / derailing issues.
9. Optimise for speed as much as possible.

This is immensely encouraging. Almost done!!! Well, for certain values of almost.

Friday, September 19, 2008

Another one bites the dust

I'm finished enough with Forest to cross it off the list, which now stands thusly:

1. Finish the Epilogues
2. Rework "Staying With Rume" in Chapter 1
3. Finish Progue scenes for his "Uncertain" psyche.
4. Finish sketched-but-unwritten portions of The Confrontation.
5. Finish fleshing out and implementing "Forest" and its people.
6. Add support for Intelligent Hinting
7. Finish attitude-adjustment Progue mini-scenes.
8. Go through whole game and solve any structural / derailing issues.
9. Optimise for speed as much as possible.

To celebrate, I'm taking tomorrow off entirely for a much needed break.

One of the funnest things about interactive fiction is you get to design and "build" stuff that you could do in no other medium, including graphical computer games-- at least not as easily. If the standard screenplay advice is "show, don't tell" (meaning use the visual nature of the medium to its best advantage), a similar principle for IF should be "do, don't tell" -- I.e. if anything about the plot or characters can be presented in a way that allows the player to interact with something to uncover the information, that's probably better than just having them read about it.

With that in mind I removed an NPC from Forest, the Historian, and replaced him with a room-sized 3D map of the galaxy which the player can move on four axes: selection of objects, zoom, moving forwards and backwards in time, and changing the information shown. In addition, I was able to design and implement a gesture control system simple enough to require no instruction. This is something you don't get the opportunity to do every day.

Monday, September 15, 2008

319,000

I'm now crossing #4 off my list-- some of the prose for Confrontation needs work, but at least none of it is meta-prose. ("This scene happens here.")

For the end of October deadline, things now stand thusly:

1. Finish the Epilogues
2. Rework "Staying With Rume" in Chapter 1
3. Finish Progue scenes for his "Uncertain" psyche.
4. Finish sketched-but-unwritten portions of The Confrontation.
5. Finish fleshing out and implementing "Forest" and its people.
6. Add support for Intelligent Hinting
7. Finish attitude-adjustment Progue mini-scenes.
8. Go through whole game and solve any structural / derailing issues.
9. Optimise for speed as much as possible.

I've dabbled a bit with 9, but it may be a lost cause. There are just no tools to optimize the speed of large IF projects, simply because there are so few of them. A few hours of painstaking testing shows that my before, instead, after, and every turn rules combined are responsible for about 35% of the runtime, but I have no way of knowing whether that's just the amount of time it takes to check all 450+ of them, or whether 449 of them go by in a flash and the 450th is causing a slowdown.

I will probably turn to #5 next, since it's about the only piece left that still has bits to be designed. (There are a few rooms here which do not yet exist.) I'm guessing this will be about a 2-3 day project.

In other news, the new build of Inform is markedly faster and I only needed to adjust one bit of code to get it to compile. Presumably there are a few more subtle things that are broken now. Hopefully there are no major bugs and I can make this the final version of Inform that BL will be released in.

Friday, September 12, 2008

Thursday

Productive day. Tweaked and finalized the spaghetti-like logic of the Confrontation, which involved cutting a number of the endpoints that were unsatisfactory or never reached. Now have a precise and well-defined number of states going into Epilogue. Also got about 1/3 of the way into revising the prose. There are still some major paragraphs of Confrontation that need to be converted from outline to Progue dialogue, maybe 6-8 thousand words, but if I can get in another day this productive I could be done with this by tomorrow or Saturday, and that's another thing to check off my list of 9. Huzzah!

Thursday, September 11, 2008

epilogue c

Got most of Epilogue C written. Ran into some complications where the preceding sequence, Confrontation, is not 100% locked down, so I'm a little unsure exactly what states certain things can and cannot be in by Epilogue. This is actually a little messy since parts of Confrontation appear to be written using an older model. This will probably be next on my list.

In short, I can't quite honestly say I finished the Epilogues but I'm going to check them off the list anyway. Woohoo!

Wednesday, September 10, 2008

Epilogues

There are three Epilogues in Blue Lacuna (different from the various "endings" which occur beforehand) which represent the very last things a player sees on a navigation of the story. The Epilogue attempts to make meaning of the player's decisions throughout the story and provide a satisfactory coda. The sequence runs only about 10 to 15 moves for any given playthrough, but is about 16,000 words of code and prose, almost to novella length.

Which Epilogue a player gets depends on which of three principal characters the game has determined you care most about by the end: yourself, Rume, or Progue. Each is completely different from the others, but all are split into two parts: a dream-conversation with a character, during which certain past actions are explored and commented on, and a final coda, where the player takes action to conclude the story. Part of the reason so much text is required is because of all the possible decisions and combinations thereof the player might have made, but also because even for these last few moves of the game the player is still being asked to make choices, which affect the nature and flavor of the story's resolution. Giving the player meaningful choices even when the plot has largely come to an end has been a difficult but ultimately worthwhile design process.

The Progue and Rume codas were finalized tonight, although they still need testing and rewrites. Each of these dream-conversations are also written. Tomorrow I hope to finish the convo and coda for the "yourself" epilogue, which will let me cross off one of the "9 Final Steps" on my list to "complete" Blue Lacuna. (By complete I mean have nothing left to design, plan, or implement; theoretically all that should be left after that point is rewrites, bug fixes, and any changes that arise from further testing.)

My recently-acquired goal is to get through this list by the end of October:

THE 9

1. Finish the Epilogues
2. Rework "Staying With Rume" in Chapter 1
3. Finish Progue scenes for his "Uncertain" psyche.
4. Finish sketched-but-unwritten portions of The Confrontation.
5. Finish fleshing out and implementing "Forest" and its people (one of the two endgame worlds).
6. Add support for Intelligent Hinting
7. Finish attitude-adjustment Progue mini-scenes.
8. Go through whole game and solve any structural / derailing issues. (Ensure it's not possible to get in a broken or unwinnable state, that all conversations have emergency exit points, that all dramatic scenes can't be broken by a player taking an unexpected action, etc.)
9. Optimise for speed as much as possible.