diff options
| author | Tannin <sherb@gmx.net> | 2015-11-19 19:05:50 +0100 |
|---|---|---|
| committer | Tannin <sherb@gmx.net> | 2015-11-19 19:05:50 +0100 |
| commit | a4b69c9ed8ba44aab26ff567e0f0eaf390e29cee (patch) | |
| tree | 1bd3b1c30a8e82809558d9c93c8d3747d7edb4a4 /src/shared | |
| parent | 053ebc898f6e1eb16ea9366ab21796004d2347da (diff) | |
added fallout 4 support
Diffstat (limited to 'src/shared')
| -rw-r--r-- | src/shared/fallout4info.cpp | 117 | ||||
| -rw-r--r-- | src/shared/fallout4info.h | 80 | ||||
| -rw-r--r-- | src/shared/gameinfo.cpp | 3 | ||||
| -rw-r--r-- | src/shared/gameinfo.h | 1 |
4 files changed, 201 insertions, 0 deletions
diff --git a/src/shared/fallout4info.cpp b/src/shared/fallout4info.cpp new file mode 100644 index 00000000..81143731 --- /dev/null +++ b/src/shared/fallout4info.cpp @@ -0,0 +1,117 @@ +/* +Copyright (C) 2012 Sebastian Herbord. All rights reserved. + +This file is part of Mod Organizer. + +Mod Organizer is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Mod Organizer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "fallout4info.h" +#include "util.h" +#include <tchar.h> +#include <ShlObj.h> +#include <sstream> +#include "windows_error.h" +#include "error_report.h" +#define WIN32_LEAN_AND_MEAN +#include <Windows.h> +#include <boost/assign.hpp> + +namespace MOShared { + +Fallout4Info::Fallout4Info(const std::wstring &moDirectory, const std::wstring &moDataDirectory, const std::wstring &gameDirectory) + : GameInfo(moDirectory, moDataDirectory, gameDirectory) +{ + identifyMyGamesDirectory(L"fallout4"); +} + +bool Fallout4Info::identifyGame(const std::wstring &searchPath) +{ + return FileExists(searchPath, L"Fallout4.exe") && + FileExists(searchPath, L"Fallout4Launcher.exe"); +} + +std::wstring Fallout4Info::getRegPathStatic() +{ + HKEY key; + LONG errorcode = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Bethesda Softworks\\Fallout4", + 0, KEY_QUERY_VALUE, &key); + + if (errorcode != ERROR_SUCCESS) { + return std::wstring(); + } + + WCHAR temp[MAX_PATH]; + DWORD bufferSize = MAX_PATH; + + if (::RegQueryValueExW(key, L"Installed Path", nullptr, nullptr, (LPBYTE)temp, &bufferSize) == ERROR_SUCCESS) { + return std::wstring(temp); + } else { + return std::wstring(); + } +} + + +std::vector<std::wstring> Fallout4Info::getDLCPlugins() +{ + return std::vector<std::wstring>(); +} + +std::vector<std::wstring> Fallout4Info::getSavegameAttachmentExtensions() +{ + return std::vector<std::wstring>(); +} + +std::vector<std::wstring> Fallout4Info::getIniFileNames() +{ + return boost::assign::list_of(L"fallout4.ini")(L"fallout4prefs.ini"); +} + +std::wstring Fallout4Info::getReferenceDataFile() +{ + return L"Fallout - Meshes.bsa"; +} + +std::wstring Fallout4Info::getNexusPage(bool nmmScheme) +{ + if (nmmScheme) { + return L"http://nmm.nexusmods.com/fallout4"; + } else { + return L"http://www.nexusmods.com/fallout4"; + } +} + +std::wstring Fallout4Info::getNexusInfoUrlStatic() +{ + return L"http://nmm.nexusmods.com/fallout4"; +} + +int Fallout4Info::getNexusModIDStatic() +{ + return 377160; +} + +bool Fallout4Info::rerouteToProfile(const wchar_t *fileName, const wchar_t*) +{ + static LPCWSTR profileFiles[] = { L"fallout4.ini", L"fallout4prefs.ini", L"plugins.txt", nullptr }; + + for (int i = 0; profileFiles[i] != nullptr; ++i) { + if (_wcsicmp(fileName, profileFiles[i]) == 0) { + return true; + } + } + return false; +} + +} // namespace MOShared diff --git a/src/shared/fallout4info.h b/src/shared/fallout4info.h new file mode 100644 index 00000000..98ce4092 --- /dev/null +++ b/src/shared/fallout4info.h @@ -0,0 +1,80 @@ +/* +Copyright (C) 2012 Sebastian Herbord. All rights reserved. + +This file is part of Mod Organizer. + +Mod Organizer is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Mod Organizer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef FALLOUT4INFO_H +#define FALLOUT4INFO_H + + +#include "gameinfo.h" + +namespace MOShared { + + +class Fallout4Info : public GameInfo +{ + + friend class GameInfo; + +public: + + virtual ~Fallout4Info() {} + + static std::wstring getRegPathStatic(); + virtual std::wstring getRegPath() { return getRegPathStatic(); } + virtual std::wstring getBinaryName() { return L"Fallout4.exe"; } + + virtual GameInfo::Type getType() { return TYPE_FALLOUT4; } + + virtual std::wstring getGameName() const { return L"Fallout 4"; } + virtual std::wstring getGameShortName() const { return L"Fallout4"; } + + virtual std::vector<std::wstring> getDLCPlugins(); + virtual std::vector<std::wstring> getSavegameAttachmentExtensions(); + + // file name of this games ini (no path) + virtual std::vector<std::wstring> getIniFileNames(); + + virtual std::wstring getReferenceDataFile(); + + virtual std::wstring getNexusPage(bool nmmScheme = true); + static std::wstring getNexusInfoUrlStatic(); + virtual std::wstring getNexusInfoUrl() { return getNexusInfoUrlStatic(); } + static int getNexusModIDStatic(); + virtual int getNexusModID() { return getNexusModIDStatic(); } + virtual int getNexusGameID() { return 1151; } + + virtual bool rerouteToProfile(const wchar_t *fileName, const wchar_t *fullPath); + + // get a list of executables (game binary and known-to-work 3rd party tools). All of these are relative to + // the game directory + //virtual std::vector<ExecutableInfo> getExecutables(); + + virtual std::wstring archiveListKey() { return L"SArchiveList"; } + +private: + + Fallout4Info(const std::wstring &moDirectory, const std::wstring &moDataDirectory, const std::wstring &gameDirectory); + + static bool identifyGame(const std::wstring &searchPath); + +}; + +} // namespace MOShared + +#endif // FALLOUT3INFO_H diff --git a/src/shared/gameinfo.cpp b/src/shared/gameinfo.cpp index 1f25cec1..db72653e 100644 --- a/src/shared/gameinfo.cpp +++ b/src/shared/gameinfo.cpp @@ -23,6 +23,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "oblivioninfo.h"
#include "fallout3info.h"
+#include "fallout4info.h"
#include "falloutnvinfo.h"
#include "skyriminfo.h"
#include "util.h"
@@ -97,6 +98,8 @@ bool GameInfo::identifyGame(const std::wstring &moDirectory, const std::wstring s_Instance = new FalloutNVInfo(moDirectory, moDataDirectory, searchPath);
} else if (SkyrimInfo::identifyGame(searchPath)) {
s_Instance = new SkyrimInfo(moDirectory, moDataDirectory, searchPath);
+ } else if (Fallout4Info::identifyGame(searchPath)) {
+ s_Instance = new Fallout4Info(moDirectory, moDataDirectory, searchPath);
}
return s_Instance != nullptr;
diff --git a/src/shared/gameinfo.h b/src/shared/gameinfo.h index a32b6b82..8ee8a8de 100644 --- a/src/shared/gameinfo.h +++ b/src/shared/gameinfo.h @@ -43,6 +43,7 @@ public: enum Type {
TYPE_OBLIVION,
TYPE_FALLOUT3,
+ TYPE_FALLOUT4,
TYPE_FALLOUTNV,
TYPE_SKYRIM
};
|
