My touch table conversion of Le Havre is complete. I am sure there are a few more bugs out there, and there might even be some enhancements I decide to add, but we have played several games and it is working well. We have particularly enjoyed the single player game. With one player, the game becomes an optimization puzzle since other players can’t disrupt your plans.
Unfortunately the owners of Le Havre (lookout-games), aren’t willing to give me permission to distribute the game. I had hoped that they would since there is already a free Java version available online. But it sounds like they may have given an exclusive electronic license to someone else.
Read on for a comparison of this project to some of our other games and a bit of a postmortem.
I have spent a bit more than 150 hours working on this game. I wrote the whole project in torque script and ended up with 5120 “raw” lines of code and 1160 lines of XML to define the buildings and ships. Here is a comparison of this project to some of our other games
Le Havre was a large project, but not as large as our other “big” games. Part of the reason is that Le Havre turned out to be simpler than I expected. Another part is that I didn’t write the game in C++. C++ is naturally a bit bigger than script code due to all the headers. Writing in a mix of C++ and script also has some overhead because there is code to pass data back and forth.
There were several things that went well in this project.
- Writing exclusively in script saved time and effort. I certainly missed C++ at times, and I spent some time debugging problems that would never have happened in a strongly typed language.
- The dialog system for player interaction worked well. The “standard” resource in/out dialog worked for 90% of the buildings and players don’t seem to have issues with using a dialog instead of elements on the table.
- The Save/load/undo capability saved a lot of testing by allowing me to get the game into the state I needed to develop or test, add or test the new feature, fix code and get right back to that state.
- I added functionality to our common GUI element grouping code that made it easier to make groups of elements move, hide/show, and be deleted together.
My only real failure when writing this game was not being strict enough about encapsulating code. The script language doesn’t protect member data, and I was too lazy about accessing that member data directly. By the end of the project, it would have saved me time to write the access functions.
I’ll be taking a break before I start my next project. I am leaning toward Puerto Rico as my next conversion, and I think that it will be fairly straight forward. More like Le Havre than Hansa Teutonica. I want to take a break to get the conventions I used in Le Havre out of my head. If I wrote Puerto Rico right now, I would end up doing a lot of things like I did in Le Havre, even if that isn’t really the best answer for Puerto Rico.