What Went Right
1. Choosing to use a web interface embedded in the native code and lightweight client. In designing the game's user interface and client, we had two specific goals in mind: create a lightweight client that could be easily downloaded, and allow it to access game data on the website in the same format as players see it in the game. We ultimately chose to use a skeleton of native code embedded within web-based components constructed from HTML and ASP.
In a data-heavy game like Legacy Online, it's important for players to access key information easily, so that an unexpected turn of the economy doesn't bring down your accounts. To facilitate this, at any moment a player can go to www.legacyonline.net, and with just a few clicks, monitor their account and make sure everything is OK without actually connecting to the game. The player profile page displayed on the website is exactly the same as a player sees in the real game.
This solution gives players an instant snapshot of how they are performing in the game. All planet rankings, covering every possible aspect of the economy, are computed in real time. On the website you can review rankings planet by planet, or consult the general ranking across all of the planets. Not many MMOGs can, at any given time, show who is the "best player" and fuel competition in such a direct fashion.
A modern capitalist empire competing against others on the planet -- and on other planets.
Notwithstanding some early criticisms from beta testers about slow loading web pages (prior to launch, testers reported that slower Internet connections caused some web page display problems), this strategy has proven to be a winning one. Relying on a proven platform like HTML and ASP has simplified code maintenance and debugging. Add the increased speed and reliability of the Internet, and this approach has contributed to making Legacy a practically flawless gaming experience -- even with a slow connection. Moreover, updating the web-based part of the client is very easy, and large changes can be made and new features added without the need to deploy new code to the users.
a business perspective, Legacy can take advantage of online distribution
due to its lightweight client. Nobody likes to wait hours (even on a broadband
connection) to try a game.
2. The Directory server. One of the main components of a MMOG is the database that stores the game information. When we were developing Legacy Online we found that using traditional database applications (with a set of tables and store procedures with fixed functionality to access the database) was not a good idea. We needed the ability to access and modify data in our application, but those requirements couldn't be met at the time using "Views" and "Stored Procedures" on a fixed data model.
The idea was to make the game as extensible as possible, and ultimately we achieved that. Had we taken a traditional approach, we would have had to constantly make changes to our database application, which we wanted to avoid. Instead, we came up with the idea of implementing the database application as a huge registry file, not very different from the Windows registry.
The registry is a very flexible way to store information. In Windows it cannot grow too much because there is a space limit to contend with. But by implementing a registry-like layer over a SQL Server database, we could store practically unlimited amounts of information. There is another factor prompted this decision: we did not plan to do database-like queries on the game information. Information in our game is accessed using an absolute path in the directory. For example to find a user profile, we would locate it using a path instead of using a key in the database -- in other words, table.route/users/p/peter would be the key to find all the values related to Peter's profile.
The Directory Server also plays a major role in the game's server farm -- it is the center all the servers because it handles all the servers' configuration data. The Directory Server also stores a lot of information that is shared by the game's other servers. This information can be access concurrently. Legacy Online servers depend on each other, and it's the Directory Server that coordinates their interactions. Another nice thing about this approach is that we can move a server from one computer to another, or replace a server experiencing problems. Before a server is taken offline, it can store its entire configuration on other servers until it's up and running on the network again. That permits smooth hardware modifications.
Thanks to this approach, we could connect the Legacy Online website directly to the Directory server, saving us a lot of time maintaining and developing the website. The game information that is of interest to the player community is rendered to the Directory and the website pulls that information in automatically. This data includes player profiles, game rankings (across all the categories), the different worlds' status and stats, in-game news, and so on.
3. Low bandwidth requirements and good response with high latency users. For an MMOG, one of the major issues to deal with is the bandwidth requirement per player. Once there are thousands of players connected to the game, it can crumble if players use more bandwidth than the game can support. Another issue to resolve was what to do with users with poor connections, and those with very high latencies.
To implement Legacy Online, we carefully decided how information would flow between the client and the servers, and among the servers. We studied many of the available distributed-object computing standards at the time, and while many were good candidates (for example DCOM and CORBA), in the end we decided to create our own object request broker (ORB) because we wanted to control every byte that was transmitted.
In particular, we needed to have special control over disconnections, timeouts and error handling. We created an ORB named RemDO (Remote Delphi Object). This protocol was specifically designed for Internet applications developed with Borland Delphi, because that was our main development platform. RemDO is also available through OLE automation. Having our homemade protocol enabled us to optimize our servers' functionality, interoperation and communication with game clients.
Another technique we used to minimize the transmission of information was to implement several layers of cache, in the servers and in the game client. The game client is in part web-based, so we were very careful to exploit the use of the Internet Explorer cache. We do not abuse the use of images, but the images we have are immediately cached after visiting the game's different interface pages. Nearly 60% of the game's interface is implemented using simple web pages (ASP pages), effectively reducing traffic.
Legacy Online follows a classic client/server approach so users with very high latency do not affect the functionality of other players. The game has proven to be playable even on computers with very slow connections. Our current lowest Internet connection requirement for players is a 33Kbps modem.
Another factor that works in favor of players with high latencies is the game design. Because the game is a massively multiplayer strategy game, there is no shooting or actions that require an immediate response. So latency is not a big problem. Most of a player's actions take effect a few seconds later, so the game still behaves well even with latencies as high as two seconds.
4. Multilanguage support. When Legacy was first released as Star Peace by Montecristo Games, part of the publishing agreement entailed providing the game in three different languages: French, English and German.
Legacy Online originally came in three flavors: French, English, and German.
In a very text-oriented game like Legacy, achieving this wasn't straightforward. We proceeded to strip the embedded English terms shown in the game from all the code and develop a special component that would automatically find any string in the game and save it separately into a text file. We divided the language files into three categories: Server, Client and Web pages, and we created a tool that put all the text to be translated into a single file that was given to the translator. The same tool would reverse the process, deploying the translated text back into the game.
When the agreement with Montecristo came to an end, we continued running and updating the game, but only in English, as we were unable to provide support for French and German players. Later we added Spanish (the native tongue of many of our developers) and Italian (since for a brief period the Legacy client was offered for free with the Italian version of PC Gamer magazine).
Adding support for Spanish and Italian was made easy by the same translation utility that we originally built to support French and German. But a new challenge came up a few months ago when we had to support French again, to take full advantage of the Telefilm Canada New Media Fund that Legacy qualified for. (Telefilm Canada is a Canadian cultural agency that supports the development and promotion of Canadian new media industries.) Since the moment we dropped French from the game, the text hadn't been updated. English strings were used creating a hybrid version of the client, mostly in French but with a significant part of English strings popping up here and there. We got around this problem by updating the tool we were using to integrate the missing French.
It's now very easy for us to add a new language to Legacy and we can use the same tool to offer multilanguage support on any other game Oceanus will develop in the future. In addition, thanks to this built-in multilanguage structure, Legacy can also easily be converted into non-western script with a minimal amount of development work.
5. Easy modification of the game to add new features and sub-games. In any online game, a significant part of the appeal is the constant flow of new expansions and features the user can expect from the developers. In a game like Legacy Online, given the amount of details and depth, it was natural to set up a system in which small adds-on and tweaking of the economic parameters could be easily implemented.
In the four-year history of Legacy, a constant flux of changes and new features have been added, varying from very small tune-ups to full-fledged new lines of business and buildings types. Every time this has happened, players experienced minimal downloading wait or none at all, if the changes were related to the web interface of the game.
In terms of full-fledged sub-games, we have some currently in development that will dramatically expand the Legacy Online universe -- so much so that they could be stand-alone games. Once again, these additions merely entail the deployment of a small update that our client automatically downloads.
Given the nature of Legacy, where players sometimes have to wait to accumulate money to advance to the next level, we've decided to add the possibility of adding independent sub-games with which players could kill time. At this moment no games have been added, but the supporting code is already in place and we are working with Sega.com about the addition of these games. (There's nothing like playing a good-old 2D side-scrolling Sonic game while waiting for those dollars to pile up!)