Skip to content

Commit

Permalink
API|Game: Games can now be attributed with a MAPINFO data path
Browse files Browse the repository at this point in the history
Any definition data on this path will be translated to DED during
game init.
  • Loading branch information
danij-deng committed Sep 28, 2014
1 parent 1a40c7b commit 597cc9f
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 24 deletions.
3 changes: 3 additions & 0 deletions doomsday/api/api_base.h
Expand Up @@ -57,6 +57,9 @@ typedef struct gamedef_s {
*/
char const *legacySavegameNameExp;
char const *legacySavegameSubfolder;

/// Primary MAPINFO definition dat, if any (translated during game init).
char const *mainMapInfo;
} GameDef;

/**
Expand Down
18 changes: 13 additions & 5 deletions doomsday/client/include/game.h
Expand Up @@ -55,17 +55,20 @@ class Game : public de::game::Game

public:
/**
* @param identityKey Unique game mode key/identifier, 16 chars max (e.g., "doom1-ultimate").
* @param configDir Name of the config directory.
*
* @param legacySavegameNameExp Regular expression used for matching legacy savegame names.
* @param identityKey Unique game mode key/identifier, 16 chars max (e.g., "doom1-ultimate").
* @param configDir Name of the config directory.
* @param title Textual title for the game mode (intended for humans).
* @param author Textual author for the game mode (intended for humans).
* @param legacySavegameNameExp Regular expression used for matching legacy savegame names.
* @param legacySavegameSubfoler Game-specific subdirectory of /home for legacy savegames.
* @param mapMapInfo Base relative path to the main MAPINFO definition data.
*/
Game(String const &identityKey, Path const &configDir,
String const &title = "Unnamed",
String const &author = "Unknown",
String const &legacySavegameNameExp = "",
String const &legacySavegameSubfolder = "");
String const &legacySavegameSubfolder = "",
String const &mainMapInfo = "");

virtual ~Game();

Expand Down Expand Up @@ -125,6 +128,11 @@ class Game : public de::game::Game
*/
de::Path const &bindingConfig() const;

/**
* Returns the base relative path of the main MAPINFO definition data for the game (if any).
*/
de::Path const &mainMapInfo() const;

/**
* Returns the identifier of the Style logo image to represent this game.
*/
Expand Down
14 changes: 11 additions & 3 deletions doomsday/client/src/game.cpp
Expand Up @@ -44,6 +44,7 @@ DENG2_PIMPL(Game)

Path mainConfig; ///< Config file name (e.g., "configs/doom/game.cfg").
Path bindingConfig; ///< Control binding file name (set automatically).
Path mainMapInfo; ///< Base relative path to the main MAPINFO definition data.

String legacySavegameNameExp;
String legacySavegameSubfolder;
Expand All @@ -66,12 +67,13 @@ DENG2_PIMPL(Game)
};

Game::Game(String const &identityKey, Path const &configDir, String const &title, String const &author,
String const &legacySavegameNameExp_, String const &legacySavegameSubfolder)
String const &legacySavegameNameExp_, String const &legacySavegameSubfolder, String const &mainMapInfo)
: game::Game(identityKey)
, d(new Instance(*this, identityKey, configDir, title, author))
{
d->legacySavegameNameExp = legacySavegameNameExp_;
d->legacySavegameSubfolder = legacySavegameSubfolder;
d->mainMapInfo = mainMapInfo;
}

Game::~Game()
Expand Down Expand Up @@ -213,6 +215,11 @@ Path const &Game::bindingConfig() const
return d->bindingConfig;
}

Path const &Game::mainMapInfo() const
{
return d->mainMapInfo;
}

String Game::title() const
{
return d->title;
Expand Down Expand Up @@ -258,8 +265,9 @@ bool Game::isRequiredFile(File1 &file)
Game *Game::fromDef(GameDef const &def)
{
return new Game(def.identityKey, NativePath(def.configDir).expand().withSeparators('/'),
def.defaultTitle, def.defaultAuthor, def.legacySavegameNameExp,
def.legacySavegameSubfolder);
def.defaultTitle, def.defaultAuthor,
def.legacySavegameNameExp, def.legacySavegameSubfolder,
def.mainMapInfo);
}

void Game::printBanner(Game const &game)
Expand Down
22 changes: 15 additions & 7 deletions doomsday/plugins/doom/src/d_api.c
Expand Up @@ -72,42 +72,50 @@ int G_RegisterGames(int hookType, int param, void *data)
GameDef const hacxDef = {
"hacx", "hacx",
"HACX - Twitch 'n Kill", "Banjo Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/hacx.mapinfo"
};
GameDef const chexDef = {
"chex", "chex",
"Chex(R) Quest", "Digital Cafe",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/chex.mapinfo"
};
GameDef const doom2TntDef = {
"doom2-tnt", "doom",
"Final DOOM: TNT: Evilution", "Team TNT",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/doom2-tnt.mapinfo"
};
GameDef const doom2PlutDef = {
"doom2-plut", "doom",
"Final DOOM: The Plutonia Experiment", "Dario Casali and Milo Casali",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/doom2-plut.mapinfo"
};
GameDef const doom2Def = {
"doom2", "doom",
"DOOM 2: Hell on Earth", "id Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/doom2.mapinfo"
};
GameDef const doomUltimateDef = {
"doom1-ultimate", "doom",
"Ultimate DOOM", "id Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/doom1-ultimate.mapinfo"
};
GameDef const doomDef = {
"doom1", "doom",
"DOOM Registered", "id Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/doom1.mapinfo"
};
GameDef const doomShareDef = {
"doom1-share", "doom",
"DOOM Shareware", "id Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
"$(App.DataPath)/$(GamePlugin.Name)/doom1-share.mapinfo"
};

DENG_UNUSED(hookType); DENG_UNUSED(param); DENG_UNUSED(data);
Expand Down
3 changes: 2 additions & 1 deletion doomsday/plugins/doom64/src/d_api.c
Expand Up @@ -69,7 +69,8 @@ int G_RegisterGames(int hookType, int param, void* data)
GameDef const doom64Def = {
"doom64", CONFIGDIR,
"Doom 64", "Midway Software",
"", ""
"", "",
"$(App.DataPath)/$(GamePlugin.Name)/doom64.mapinfo"
};

DENG_UNUSED(hookType); DENG_UNUSED(param); DENG_UNUSED(data);
Expand Down
9 changes: 6 additions & 3 deletions doomsday/plugins/heretic/src/h_api.c
Expand Up @@ -71,17 +71,20 @@ int G_RegisterGames(int hookType, int param, void* data)
GameDef const hereticExtDef = {
"heretic-ext", CONFIGDIR,
"Heretic: Shadow of the Serpent Riders", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/heretic-ext.mapinfo"
};
GameDef const hereticDef = {
"heretic", CONFIGDIR,
"Heretic Registered", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/heretic.mapinfo"
};
GameDef const hereticShareDef = {
"heretic-share", CONFIGDIR,
"Heretic Shareware", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name).heretic-share.mapinfo"
};

DENG_UNUSED(hookType); DENG_UNUSED(param); DENG_UNUSED(data);
Expand Down
15 changes: 10 additions & 5 deletions doomsday/plugins/hexen/src/x_api.c
Expand Up @@ -71,27 +71,32 @@ int G_RegisterGames(int hookType, int param, void* data)
GameDef const deathkingsDef = {
"hexen-dk", CONFIGDIR,
"Hexen: Deathkings of the Dark Citadel", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/hexen-dk.mapinfo"
};
GameDef const hexenDef = {
"hexen", CONFIGDIR,
"Hexen", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/hexen.mapinfo"
};
GameDef const hexenDemoDef = {
"hexen-demo", CONFIGDIR,
"Hexen 4-map Demo", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/hexen.mapinfo"
};
GameDef const hexenBetaDemoDef = {
"hexen-betademo", CONFIGDIR,
"Hexen 4-map Beta Demo", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/hexen.mapinfo"
};
GameDef const hexenV10Def = {
"hexen-v10", CONFIGDIR,
"Hexen v1.0", "Raven Software",
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER
LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
"$(App.DataPath)/$(GamePlugin.Name)/hexen.mapinfo"
};

DENG_UNUSED(hookType); DENG_UNUSED(param); DENG_UNUSED(data);
Expand Down

0 comments on commit 597cc9f

Please sign in to comment.