mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-06-29 10:35:23 +00:00
Added stormlib and command line parser. Added initial mpq file check on startup.
This commit is contained in:
parent
0f601cb024
commit
f46542a05f
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,4 @@
|
||||||
cmake-build-*
|
cmake-build-*
|
||||||
.idea
|
.idea
|
||||||
|
.vscode
|
||||||
|
build/
|
||||||
|
|
6
.gitmodules
vendored
6
.gitmodules
vendored
|
@ -4,3 +4,9 @@
|
||||||
[submodule "3rdparty/spdlog"]
|
[submodule "3rdparty/spdlog"]
|
||||||
path = 3rdparty/spdlog
|
path = 3rdparty/spdlog
|
||||||
url = git@github.com:gabime/spdlog.git
|
url = git@github.com:gabime/spdlog.git
|
||||||
|
[submodule "3rdparty/stormlib"]
|
||||||
|
path = 3rdparty/stormlib
|
||||||
|
url = git@github.com:ladislav-zezula/StormLib.git
|
||||||
|
[submodule "3rdparty/cli11"]
|
||||||
|
path = 3rdparty/cli11
|
||||||
|
url = git@github.com:CLIUtils/CLI11.git
|
||||||
|
|
4
3rdparty/CMakeLists.txt
vendored
4
3rdparty/CMakeLists.txt
vendored
|
@ -2,3 +2,7 @@ set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
||||||
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||||||
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||||||
add_subdirectory(glfw)
|
add_subdirectory(glfw)
|
||||||
|
|
||||||
|
add_subdirectory(stormlib)
|
||||||
|
|
||||||
|
add_subdirectory(cli11)
|
||||||
|
|
1
3rdparty/cli11
vendored
Submodule
1
3rdparty/cli11
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 1a1cde98f5e8868ca2f17707ab84dcae5718110e
|
1
3rdparty/stormlib
vendored
Submodule
1
3rdparty/stormlib
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit f2c8d249607009a282904a43a4c4ba60922a92bb
|
|
@ -10,12 +10,13 @@ include(CTest)
|
||||||
include(CMakeDependentOption)
|
include(CMakeDependentOption)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CXX_STANDARD 17)
|
||||||
set(OpenGL_GL_PREFERENCE "GLVND")
|
set(OpenGL_GL_PREFERENCE "GLVND")
|
||||||
|
|
||||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
|
||||||
add_subdirectory(3rdparty)
|
add_subdirectory(3rdparty)
|
||||||
|
|
||||||
add_subdirectory(OpenDiablo2.OS)
|
add_subdirectory(src/OpenDiablo2.OS)
|
||||||
add_subdirectory(OpenDiablo2.Graphics)
|
add_subdirectory(src/OpenDiablo2.Graphics)
|
||||||
add_subdirectory(OpenDiablo2.Game)
|
add_subdirectory(src/OpenDiablo2.Game)
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
#include <memory>
|
|
||||||
#include <spdlog/spdlog.h>
|
|
||||||
#include <spdlog/sinks/stdout_color_sinks.h>
|
|
||||||
#include <OpenDiablo2.Game/D2Engine.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main() {
|
|
||||||
spdlog::set_level(spdlog::level::trace);
|
|
||||||
spdlog::set_pattern("[%^%l%$] %v");
|
|
||||||
|
|
||||||
spdlog::info("OpenDiablo 2 has started");
|
|
||||||
|
|
||||||
auto engine = std::make_unique<OpenDiablo2::Game::D2Engine>();
|
|
||||||
engine->Run();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
project(libOpenDiablo2.Graphics VERSION 0.1 LANGUAGES CXX)
|
|
||||||
|
|
||||||
find_package(OpenGL)
|
|
||||||
|
|
||||||
include_directories(
|
|
||||||
include
|
|
||||||
../3rdparty/bgfx/include
|
|
||||||
../3rdparty/spdlog/include
|
|
||||||
${OPENGL_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(OpenDiablo2.Graphics SHARED
|
|
||||||
src/D2Graphics.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
target_link_libraries(OpenDiablo2.Graphics ${OPENGL_LIBRARIES})
|
|
||||||
|
|
||||||
if(MSVC)
|
|
||||||
target_compile_options(OpenDiablo2.Graphics PRIVATE /W4 /WX)
|
|
||||||
else(MSVC)
|
|
||||||
target_compile_options(OpenDiablo2.Graphics PRIVATE -Wall -Wextra -pedantic -Werror)
|
|
||||||
endif(MSVC)
|
|
|
@ -4,19 +4,26 @@ add_executable(OpenDiablo2
|
||||||
src/D2Engine.cpp
|
src/D2Engine.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
include_directories(OpenDiablo2
|
|
||||||
include
|
|
||||||
../OpenDiablo2.OS/include
|
|
||||||
../OpenDiablo2.Graphics/include
|
|
||||||
../3rdparty/spdlog/include
|
|
||||||
)
|
|
||||||
target_link_libraries(OpenDiablo2
|
target_link_libraries(OpenDiablo2
|
||||||
PUBLIC
|
PRIVATE
|
||||||
OpenDiablo2.OS
|
OpenDiablo2.OS
|
||||||
OpenDiablo2.Graphics
|
OpenDiablo2.Graphics
|
||||||
|
storm
|
||||||
|
CLI11
|
||||||
|
stdc++fs
|
||||||
)
|
)
|
||||||
|
|
||||||
target_compile_features(OpenDiablo2 PRIVATE cxx_std_17)
|
target_include_directories(OpenDiablo2
|
||||||
|
PUBLIC
|
||||||
|
include
|
||||||
|
PRIVATE
|
||||||
|
include
|
||||||
|
../OpenDiablo2.OS/include
|
||||||
|
../OpenDiablo2.Graphics/include
|
||||||
|
../../3rdparty/spdlog/include
|
||||||
|
../../3rdparty/stormlib/src
|
||||||
|
../../3rdparty/cli11/include
|
||||||
|
)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
target_compile_options(OpenDiablo2 PRIVATE /W4 /WX)
|
target_compile_options(OpenDiablo2 PRIVATE /W4 /WX)
|
42
src/OpenDiablo2.Game/src/main.cpp
Normal file
42
src/OpenDiablo2.Game/src/main.cpp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#include <memory>
|
||||||
|
#include <experimental/filesystem>
|
||||||
|
#include <spdlog/spdlog.h>
|
||||||
|
#include <spdlog/sinks/stdout_color_sinks.h>
|
||||||
|
#include <OpenDiablo2.Game/D2Engine.h>
|
||||||
|
#include <CLI/CLI.hpp>
|
||||||
|
#include <StormLib.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char** argv) {
|
||||||
|
spdlog::set_level(spdlog::level::trace);
|
||||||
|
spdlog::set_pattern("[%^%l%$] %v");
|
||||||
|
spdlog::info("OpenDiablo 2 has started");
|
||||||
|
|
||||||
|
CLI::App app{"OpenDiablo2 - An open source re-implementation of Diablo 2."};
|
||||||
|
|
||||||
|
std::string basePath = std::experimental::filesystem::current_path();
|
||||||
|
app.add_option("-p,--path", basePath, "The base path for Diablo 2");
|
||||||
|
|
||||||
|
CLI11_PARSE(app, argc, argv);
|
||||||
|
|
||||||
|
spdlog::info("Base file path is '" + basePath + "'");
|
||||||
|
|
||||||
|
// Sanity-check that files are where we expect them to be...
|
||||||
|
auto testArchivePath = basePath + std::experimental::filesystem::path::preferred_separator + "d2data.mpq";
|
||||||
|
|
||||||
|
HANDLE mpq = nullptr;
|
||||||
|
|
||||||
|
if (!SFileOpenArchive(("flat-file:" + testArchivePath).c_str(), 0, STREAM_FLAG_READ_ONLY, &mpq)) {
|
||||||
|
spdlog::error("Diablo 2 content files were not detected. Please make sure the base path is properly set!");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
SFileCloseFile(mpq);
|
||||||
|
spdlog::info("Content files were located, starting engine.");
|
||||||
|
|
||||||
|
auto engine = std::make_unique<OpenDiablo2::Game::D2Engine>();
|
||||||
|
engine->Run();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
28
src/OpenDiablo2.Graphics/CMakeLists.txt
Normal file
28
src/OpenDiablo2.Graphics/CMakeLists.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
project(OpenDiablo2.Graphics VERSION 0.1 LANGUAGES CXX)
|
||||||
|
|
||||||
|
find_package(OpenGL)
|
||||||
|
|
||||||
|
add_library(OpenDiablo2.Graphics SHARED
|
||||||
|
src/D2Graphics.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(OpenDiablo2.Graphics
|
||||||
|
PUBLIC
|
||||||
|
include
|
||||||
|
PRIVATE
|
||||||
|
include
|
||||||
|
../../3rdparty/bgfx/include
|
||||||
|
../../3rdparty/spdlog/include
|
||||||
|
${OPENGL_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(OpenDiablo2.Graphics
|
||||||
|
PRIVATE
|
||||||
|
${OPENGL_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
target_compile_options(OpenDiablo2.Graphics PRIVATE /W4 /WX)
|
||||||
|
else(MSVC)
|
||||||
|
target_compile_options(OpenDiablo2.Graphics PRIVATE -Wall -Wextra -pedantic -Werror)
|
||||||
|
endif(MSVC)
|
|
@ -1,16 +1,22 @@
|
||||||
project(libOpenDiablo2.OS VERSION 0.1 LANGUAGES CXX)
|
project(libOpenDiablo2.OS VERSION 0.1 LANGUAGES CXX)
|
||||||
|
|
||||||
include_directories(
|
|
||||||
include
|
|
||||||
../3rdparty/glfw/include
|
|
||||||
../3rdparty/spdlog/include
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(OpenDiablo2.OS SHARED
|
add_library(OpenDiablo2.OS SHARED
|
||||||
src/D2Window.cpp
|
src/D2Window.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(OpenDiablo2.OS glfw)
|
target_include_directories(OpenDiablo2.OS
|
||||||
|
PUBLIC
|
||||||
|
include
|
||||||
|
PRIVATE
|
||||||
|
include
|
||||||
|
../../3rdparty/glfw/include
|
||||||
|
../../3rdparty/spdlog/include
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(OpenDiablo2.OS
|
||||||
|
PRIVATE
|
||||||
|
glfw
|
||||||
|
)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
target_compile_options(OpenDiablo2.OS PRIVATE /W4 /WX)
|
target_compile_options(OpenDiablo2.OS PRIVATE /W4 /WX)
|
|
@ -21,7 +21,7 @@ namespace OpenDiablo2 {
|
||||||
spdlog::debug("Creating GLFW window");
|
spdlog::debug("Creating GLFW window");
|
||||||
glfwWindowHint(GLFW_RESIZABLE, 0);
|
glfwWindowHint(GLFW_RESIZABLE, 0);
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
|
||||||
glfwWindow = glfwCreateWindow(800, 600, "OpenDiablo 2", nullptr, nullptr);
|
glfwWindow = glfwCreateWindow(800, 600, "OpenDiablo 2", nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user