Final sprint: Submitting the PR

I am sorry for not writing in a while, but as the finish date for GSoC comes closer, everything has to be ready for the end. My mentor and I agreed that the PR sould be submitted around August 14th, so these last days my intention was to have as much functionality as possible in before the PR came, as I was sure that after that I would have to spend all the time I had fixing things that I either forgot or didn’t know were broken in the first place.

Features over features

It has been too long, and I apologize for that, but like a Protoss player taking a base, many things got ready at once in a short short time (I just bought Starcraft II). So, without further ado, here are the occurrences and features of this past week.

Please ignore the graphical noise in the following screenshots, since it’s due to an issue with my display, not the rendering.

Thou hath defeated thy enemy

At last, the game of Shadowgate is winnable in the ScummVM platform!

There is a screenshot of the final battle with the wizard at the end (spoiler warning).

Time to bring up the GameFAQ!

This last week has been, for the most part, incredibly frustrating. The inventory system had so many little bugs in it that it seemed that when I fixed something (often after most of the day looking), something else broke. However, somehow I managed to get it working, and thus, with the skeleton key in hand, I can go on to the fun part of the project: QA! In all seriousness, in the upcoming week I will be focusing on just following a walkthrough of the game to detect and solve the little bugs in the way of winnability. I had a milestone in my planning to have Shadowgate winnable for today, with which I meant a much more polished state that it currently is in. However, several factors and my frustration (no-one but me to blame here) have made it impossible to acomplish.

Clicks clicking, testing texts

This week has been rather weak on progress, due to various factors but one of the biggest was that I got stuck trying to make the drag work. I’m still stuck on that, but trying to fix it I have made several small pieces of progress, and I have something to show.

The two main pieces of progress are that I revamped the click detection system, and now the double click is working, and that the text output system (or a prototype, lacking scroll). Here is a brief walftough of the latest state of the game:

I’m sorry that I don’t have much more to show, but I feel closer to something playable.

The door does not catch on fire

These were the words that made the engine start to come to life, sice it meant that you can now select commands, objects, apply commands to those objects, the script engine is capable of running the door’s script and the text can be decoded. The engine is far from complete, and there is still a long long way to go, but I’m grateful that I can continue (as of yesterday, without university work) working on this piece of sorftware. It’s great to see such a big project (for me, at least) come to be.

Main loop… done. Script engine… online. Asset loading… almost there.

As the title says, I feel that the engine is starting to take shape at an exponential rate. As I get intimately familiar with the engine and it’s inner workings, the cycle of adding functionality becomes shorter and shorter. The experience I have aquired with GDB helps a lot, too.

For now, the big components I feel I have ready are:

The engine work begins

Ever since classes ended and I started my exam period (until June 25th), I have been dividing my time between working on the project and studying for exams. It’s been really exhausting, but totally worth it!

Here is a recap of what I’ve done:

9 Patches to my heart

For the better part of this week and past weekend, I have been learing a whole lot about surfaces in ScummVM, in order to implement beautiful 9patch borders in the MacGUI code.

As I delved deeper and deeper into the graphics code, I found out that a lot of steps had to be made in order for the 9patch to initialize and blit correctly:

Refactoring

This week, I’m working on extracting the components of the WAGE engine that are reusable to other engines (such as… you guessed it, MacVenture), specifically that old and lovely black and white Macintosh GUI.

This, in addition to easing the burden of having to create these components myself, has served to give me insight about how an engine is structured. After this, I have a much clearer idea of how I should implement MacVenture. It mught be worth to revisit the order in which I planned to write the components.