Developer experiences from the trenches
Mon 28 April 2014 by Michael Labbe
tags code
So you’ve made a super fun multiplayer game and you want to expand it by adding game modes, tweaks and so forth. Here are some possible do’s and don’ts that allow for rapid expansion and moddability.
The approach of branching your game logic by game modes makes your code unexpandable. Consider:
if ( gamemode == MODE_DEATHMATCH ) {
DisplayFreeForAllScoreboard();
} else if ( gamemode == MODE_CTF || gamemode == MODE_TEAMDM ) {
DisplayTeamScoreboard();
}
This works with a finite number of game modes, but it makes modding hard. It also makes expanding the number of game modes difficult. A better approach is to create an abstract game rules base class which is derived for each game mode.
class IGameRules
{
public:
virtual int GetTeamCount( void ) const = 0;
};
class GameRulesDeathmatch : public IGameRules
{
public:
int GetTeamCount( void ) const {
return 1;
}
};
class GameRulesCTF : public IGameRules
{
public:
int GetTeamCount( void ) const {
return 2;
}
};
Now you can simply write the game logic as:
if ( gamemode.GetTeamCount() == 1 ) {
DisplayFreeForAllScoreboard();
} else if ( gamemode.GetTeamCount() == 2 ) {
DisplayTeamScoreboard();
}
This approach lets you easily extend your game code to new game mode variants by simply deriving from the IGameRules
hierarchy.
Unreal gets credit for being the first game to use modifiers. Modifiers are tweaks to tuning values — they are not holistic mods. This lets the player apply, for example, low gravity and instagib at the same time, by selecting two different mods. (Thereby ruining my vanilla experience, grr…)
This is pretty simple: apply modifiers from top-to-bottom order. Call out conflicts. Unreal did modifier selection with a complete UI in the late 90s.
Consider exposing game rules methods as modifier tunable values. For example, if you have a game rule bool IsElimination()
, which causes players to not respawn after they die, exposing this as a modifier value will allow a modder to go in and take an existing game mode, say, Team DM, and turn it into an elimination mode. Boom! A modder just recreated a simple Clan Arena mode with a text file and no need to learn a scripting language.