From 597cc9fb7e3d412524883e8c070347e69875edc2 Mon Sep 17 00:00:00 2001 From: danij Date: Sun, 28 Sep 2014 09:49:49 +0100 Subject: [PATCH] API|Game: Games can now be attributed with a MAPINFO data path Any definition data on this path will be translated to DED during game init. --- doomsday/api/api_base.h | 3 +++ doomsday/client/include/game.h | 18 +++++++++++++----- doomsday/client/src/game.cpp | 14 +++++++++++--- doomsday/plugins/doom/src/d_api.c | 22 +++++++++++++++------- doomsday/plugins/doom64/src/d_api.c | 3 ++- doomsday/plugins/heretic/src/h_api.c | 9 ++++++--- doomsday/plugins/hexen/src/x_api.c | 15 ++++++++++----- 7 files changed, 60 insertions(+), 24 deletions(-) diff --git a/doomsday/api/api_base.h b/doomsday/api/api_base.h index c01bf14aeb..3c93393776 100644 --- a/doomsday/api/api_base.h +++ b/doomsday/api/api_base.h @@ -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; /** diff --git a/doomsday/client/include/game.h b/doomsday/client/include/game.h index 447aa343e5..620fb0e4d1 100644 --- a/doomsday/client/include/game.h +++ b/doomsday/client/include/game.h @@ -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(); @@ -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. */ diff --git a/doomsday/client/src/game.cpp b/doomsday/client/src/game.cpp index e7985c9a20..ce82cb0335 100644 --- a/doomsday/client/src/game.cpp +++ b/doomsday/client/src/game.cpp @@ -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; @@ -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() @@ -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; @@ -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) diff --git a/doomsday/plugins/doom/src/d_api.c b/doomsday/plugins/doom/src/d_api.c index 45bc250093..694a7ee8aa 100644 --- a/doomsday/plugins/doom/src/d_api.c +++ b/doomsday/plugins/doom/src/d_api.c @@ -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); diff --git a/doomsday/plugins/doom64/src/d_api.c b/doomsday/plugins/doom64/src/d_api.c index 4b07e37219..e19219f953 100644 --- a/doomsday/plugins/doom64/src/d_api.c +++ b/doomsday/plugins/doom64/src/d_api.c @@ -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); diff --git a/doomsday/plugins/heretic/src/h_api.c b/doomsday/plugins/heretic/src/h_api.c index 8fa6efd0f2..fdbaa4318c 100644 --- a/doomsday/plugins/heretic/src/h_api.c +++ b/doomsday/plugins/heretic/src/h_api.c @@ -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); diff --git a/doomsday/plugins/hexen/src/x_api.c b/doomsday/plugins/hexen/src/x_api.c index d3daad6265..d21cca93b9 100644 --- a/doomsday/plugins/hexen/src/x_api.c +++ b/doomsday/plugins/hexen/src/x_api.c @@ -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);