Just checking in to say that progress is coming along just fine on character encounters. These will take us one level above interrogations – character encounters account for a full session with another character at a given location, which can include multiple questions and interrogations.
I’m still working on them, but a gameplay video should be out in the near future. Here are some screenshots to tide you over until then! (Click for full size.)
Dear Princess Celestia,
Today I learned an important lesson on the value of good coding design. If you’re writing a piece of software that you intend to be modular, it’s always a good idea to plan out the design to actually function this way before you start writing any code. Otherwise, a sudden realization of a fundamental design flaw might require you to rewrite the whole content storage system in your application. And that wouldn’t be so good.
Your faithful student,
OK, so I know that I said in my last blog entry that the next thing I’d be working on was character encounters, but as you probably gleaned from the above, I suddenly realized shortly after writing that that there was a fundamental design flaw in the way in which content was stored in my application that made it impossible to load content (images, audio, etc.) from an external source. This was a Very Bad Thing, because that obviously meant that the entire idea I had behind cases being modular and separate from the executable was not going to work. So unfortunately I had to spent the last two days effectively tearing down and rewriting the content storage system in the game to properly accommodate the loading of external content.
However, I’m pleased to report that that speed bump is now behind us, and the game is now looking better than ever. I’ve now broken off the case source compiler from the executable itself, and have gotten it to successfully compile all the case data plus all required images into a single binary file that can then be loaded into the executable. In other words, I’ve already got a very, very rudimentary version of a case editor up and running. <fluttershy>yay!</fluttershy>
As such, now I can finally begin work on character encounters. Sorry to anyone who was expecting that work sooner. I promise that when that’s done, I’ll finally actually have some more gameplay footage for you to look at, rather than just this technical mumbo jumbo. 🙂
More details for those interested after the break.
I unfortunately don’t have much to actually show for this bit of work that I just completed, but it’s important all the same. Essentially, as I alluded to in my last post, I’ve been building a rudimentary parser for a conversation declaration language that I’ve put together, which allows me to quickly define conversations in an intuitive and sequential fashion. That parser is now complete – I’ve successfully gotten a text file to compile into a conversation object that can then be loaded into the game engine and interacted with. As work progresses and I implement other aspects of the game engine, this parser will need to be upgraded to also compile text files into objects for those parts as well, but this is a good start.
If you’re currently wondering why you would care about this – isn’t this just an internal implementation detail? – enabling the ability to define the case data in this fashion separates the game data from the game engine, which carries with it a number of tangible benefits:
- It enables cases to be defined in a modular fashion – in other words, cases aren’t built directly into the executable file. This makes it so that players will be able to install the executable file once, and then just download and open separate case files to play future cases, instead of requiring an update to the executable file itself.
- It enables the creation of a case editor separate from the game itself, which can be used to create, edit, and save these case source files, which can then be compiled and loaded into the game itself.
- It enables cases to be defined in a platform-agnostic fashion – the game I’m implementing is built in XNA, meaning that it won’t run within the context of an operating system other than Windows, but because the cases are defined in this fashion, porting the game to another operating system would only require the re-implementation of the game engine and the case source parser, not a re-implementation of the actual cases themselves.
For those who are really interested, the definition of the conversation seen in the video in the last post, along with an explanation of the different actions defined within it, appear after the break.
The very first part of the game that I decided to start working on, since I had a feeling it would be the most involved, was the interrogations – the portions of the game where you listen to a character talk about a subject, press them for more details or to get a reaction from them, and then present them with evidence to expose a lie if they’re making one. That portion of the game engine is more or less complete at this point, and I’ve put up a video demonstrating the gameplay for this part of the game after the break.
More info after the break.
If you’re reading this, you’re probably here to check out the My Little Investigations project. So, let me begin first by describing the project.
What is My Little Investigations?
My Little Investigations (working title) is a video game that I got the inspiration for and decided to start work on a little while ago. It’s a MLP:FiM video game with gameplay quite similar to that appearing in the game Ace Attorney Investigations: Miles Edgeworth, although it the gameplay won’t be completely copied feature-for-feature. In short, the game will be split up into separate cases, each of which begins with a crime being committed, and each of which requires Twilight Sparkle to investigate, to talk to and confront various characters from the MLP:FiM universe, and to ultimately solve the puzzle and unravel the case.
If that sounds like a very vague description, don’t worry – I plan to periodically post gameplay videos as I work on the game, which should hopefully serve to fill in viewers regarding the specific gameplay mechanics underlying the game. So all should become clear in due time.
(More questions after the break.)