The completely unique marvel of Dwarf Fortress, while being completely singe-player oriented, in my mind has a lot of potential to grow into quite successful multiuser experience. I have done some reading on mupltiplayer subject within the forum (have not bothered with all topics but got the gist of general approach) and seen that he th idea is mentioned quite often, however not going as far as detailing possible design and/or implementation of it.
I'd like to propose something (mostly for Toady's eye actually) which might evolve into adding some MP capabilities to DF. Being software engineer, even though I am unaware of game internals, I can predict some design aspects and try to go from that, trying to produce something as low taxing on re-doing existing features and concepts as possible, while also reusing already programmed functionality. Also, separate project/goal mentioned bellow is mostly based on their design principles from programming side of things, rather than player experience.
Communication Basic start for any multiplayer venture is a necessity to communicate with other players. Even while being completely secluded in single player game, especially being it as complex and sophisticated as DF, it is often important to find information and answers to one's questions. The current way of doing so would be IRC. Personally I am grateful for the support I have been given by other players in overcoming challenges of the game, aside of that just being able to share your game experiences with others as well as seeing challenges of others is quite rewarding by itself. Integrating ability to chat with other player into a game is a first step on a road to full blown MMO solution. Different channels for local events, help and support, in- and out-of character chat and perhaps many other may come in handy... but just being a part of large and growing community is something very important on a social level.
From technology point of view – integrating IRC client and adding options for controlling it's functionality is a relatively minor challenge .I'm sure it is possible to find suitable library set for extending DF that way and getting rid of necessity for external client and constant switching between them. Being able to separate players by their races, geographical location or current actions is just as important as bringing them together, and that's where in-game IRC-like implementation has a real chance to shine in full glory. Running and administrating server side can completely offloaded on one of existing networks geared for similar projects or hosted as dedicated somewhere if there is a need for more control.
World sharing and Economics One of greatest and unique features that captivates many souls and increases replayability of the game is the persistent game world, which treats player as a part of game universe, and reacts to ones actions, while not being completely controlled by them as a whole. Such approach grants a base for support of more than one player's action to be accounted for, game world scale also play along with this idea, making it possible to have a huge realm with many player-developed settlements (past as well as present!). The currently approach used for internal fortress economic model can be extended for global as well, where the price of things is controlled by supply and demand aspects of open market. To make it more fluid and real life like, such factors as distance and accessibility, as well as safety, can be great factors in considering trading opportunities.
Going from how current trade works – seasonal and race based, it is possible to collect information about players actions and especially interaction with NPC caravans on per-season basis. At first, it will require players choosing same world as the starting point, which can be done by syncing worldgen parameters and random seed, not sure how exactly history is done, but I presume locations and events are data-wise separated from geographical information. Based on that – each following participating player – adds records to “history” part, thus claiming some location. After that seasonal updates in form of internal settlement history (same fashion as it is used for engravings?) can be thrown at server side. This obviously requires some server side counterpart, which at that stage should be data storage (some text based some database driven) and probably http-like interface. Economical data for trade interactions is to be collected on client side (since caravans are single player functionality and server is not aware of that) and then shared with server in form of type:amount:price:in/out. Data model for this is very simple and server interactivity, limited on per-caravan (per-season?) per player are rare occasions – hence makes very low demands on hardware part.
This not only allows to host multiple fortresses on same world map at same time, with players being aware of state of things external to their world, but also leads to calculated prices for sold and bought goods (as well as desired quantities of them) based on client sending request to server at point of caravan arriving and leaving just once per season (perhaps extendable to be per request if necessary for calculating settlement value?)
With that concept in mind:
- good value (started at fixed rates based at worldgen params) are controlled by players actions and supply/demand rules
- players can use their own timescales and are not limited in any way by other players actions
world history on top of generated content predating first player also grows based on on player actions (and possibly visible via engravings?) - few none-existing concepts can become powerful factors in appealing caravans (such as presence of roads and relative location) and therefor to be considered
Trading Since DF is at least to some degree an involves economical strategy gameplay elements it would be a good idea to introduce multiplayer item trading facility. By that I imply something similar to Auction in World of Worldcraft (e-bay for dwarfs). There a player can offer some goods to another player in exchange for some other goods. This can be done via following procedure:
- Offering player reserves some goods as “to be trade” and for duration of trade session can not use them. These goods are offered as an item with exchange rate to some other item/itemclass (sort of similar to how liaison trade planing works)
- Game client forms a request that is sent to server side auction database where it is kept for fixed real world time or until the deal comes through
- On a buyer side of things one can browse auction listing (search even better) and upon seeing promising offer one may agree on proceeding with a deal given that one has in possession requested items in desired quantity. It is possible that buyer might like the deal but not have enough of requested goods, and delay the response until one have (which also assumes that some other buyer might snatch the deal)
- At the end of each season offering player client performs a check on whether any of deals went through and if they did – a caravan arrives shortly after taking goods and going to potential buyer. In same fashion at the end of a season for buyer a caravan might come and take the goods from his side
- At following season for each player caravan from opposite side arrives.
- Force-major kind of events MIGHT and SHOULD happen resulting in a loss of either or both side goods (fate is determined by arriving side), some factor like having roads and countermeasures in form of military play in favor of preserving the goods.
There might be some fee (percentage of trade goods amount) and minimal trade volume required to start the process.
While this sounds as complex and multistage process not much work or data transmissions are actually happening, server side also just tracks state of trade deal with a flag, updates of which are quite rare. To facilitate both economical and trading aspect of multiuser solution I would suggest a webserver with some middleware interface based on PERL/PHP/Ruby/Python/etc. and a mysql/msql/postgres database. Client side would need to gain a communication layer in form of HTTP over TCP implementation and be able to send GET requests.
Combat On top of being dwarf life simulator with deep economical angle, the game also have military system and PvE combat. Easiest and IMHO fun extension to that would be cooperative-attack-something game. What I have in mind that for players who are seen as online and made their forces available for war-like events, these event should occasionally occur. Once in a blue moon a messenger comes with a black arrow in his back and dies after passing the message implying that the leader needs to get arm some folks and send them to help for some greater good (Good can be rare stolen artifact, kill an enemy leader, attack a caravan, deal with a siege or something of that nature). Essentially same kind of events that happen in game right now, but in reverse. Combine forces of few players are attacking something that is AI controlled and scale of action is proportional to amount. The battle can also last a while and it is possible to get more players involved if needed (i.e. reinforcements). Each player would control in same fashion as it is done within single player DF a squad or a few, the goal being to explore some area and clear hostiles, there collaboration and cooperation can be enforced via overwhelming amounts of adversaries.
From a technical standpoint, based on player confirming desire to participate in the event – all interested parties are connected to a multiuser environment of a shape of “broadcasting server”; There many ways how can one be implemented starting from abusing same IRC protocol as mentioned for chat – latency can hardly be an issue in indirect control/command driven environment. Game engine rendering will have to be turned into server responsive way (reacting to what comes from server side rather than to keystrokes), but again with a current state of things, where all actions are happening via commands and none via direct control, it is quite possible without major changes to the code.
Given that, it would be possible for some arbitrary number of players to participate in a single event. With some tricks it is also possibly to achieve resynchronization (depending on how game works no, which I have very little idea about) thus allowing for players to join as the game goes.
Money Concept of in-game currency in many MMO-games has similar issues as virtual funds in real life and hardly simplifies anything if not making them actually worse, while barter based commerce with real time calculated market value of goods would deter players from abusing the system and creating virtual stock market. Buy low/sell high concept simply does not work if no money is involved. Accumulating rare raw goods is, of course, still possible, but would not serve any purpose in reality.
Security I intentionally avoided subject of data security, validation, user identity and authentication related subject simple because I lack familiarity with how game works now, and out of that context threat prevention systems have very limited sense. But I'm sure it is possible to built relatively simple mechanisms to grant some level of sanity in client-server information exchange realm.
With all that being mentioned, I'm sure it is possible to greatly enhance and expand every single idea, but my goal was just to show how much (or little) needed to be done to achieve multiuser effect, without disturbing game much as it is now.