diff --git a/BUILDING.md b/BUILDING.md index 22b128397..fd7cfd0a8 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -31,6 +31,8 @@ cd Shipwright # Setup cmake project & 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v142 -A x64 # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging) +# or for VS2019 +& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 16 2019" -T v142 -A x64 # Extract assets & generate OTR (run this anytime you need to regenerate OTR) & 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target ExtractAssets # --config Release (if you're packaging) # Compile project diff --git a/libultraship/libultraship/Window.cpp b/libultraship/libultraship/Window.cpp index ec97a71ad..43e7eacce 100644 --- a/libultraship/libultraship/Window.cpp +++ b/libultraship/libultraship/Window.cpp @@ -13,6 +13,7 @@ #include "Blob.h" #include "Matrix.h" #include "Hooks.h" +#include #include "Lib/Fast3D/gfx_pc.h" #include "Lib/Fast3D/gfx_sdl.h" #include "Lib/Fast3D/gfx_dxgi.h" @@ -500,12 +501,38 @@ namespace Ship { std::vector Sinks; auto SohConsoleSink = std::make_shared(); - SohConsoleSink->set_level(spdlog::level::trace); + //SohConsoleSink->set_level(spdlog::level::trace); Sinks.push_back(SohConsoleSink); #if (!defined(_WIN32) && !defined(__WIIU__)) || defined(_DEBUG) +#if defined(_DEBUG) && defined(_WIN32) + if (AllocConsole() == 0) { + throw std::system_error(GetLastError(), std::generic_category(), "Failed to create debug console"); + } + + SetConsoleOutputCP(CP_UTF8); + + FILE* fDummy; + freopen_s(&fDummy, "CONOUT$", "w", stdout); + freopen_s(&fDummy, "CONOUT$", "w", stderr); + freopen_s(&fDummy, "CONIN$", "r", stdin); + std::cout.clear(); + std::clog.clear(); + std::cerr.clear(); + std::cin.clear(); + + HANDLE hConOut = CreateFile(_T("CONOUT$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE hConIn = CreateFile(_T("CONIN$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + SetStdHandle(STD_OUTPUT_HANDLE, hConOut); + SetStdHandle(STD_ERROR_HANDLE, hConOut); + SetStdHandle(STD_INPUT_HANDLE, hConIn); + std::wcout.clear(); + std::wclog.clear(); + std::wcerr.clear(); + std::wcin.clear(); +#endif auto ConsoleSink = std::make_shared(); - ConsoleSink->set_level(spdlog::level::trace); + //ConsoleSink->set_level(spdlog::level::trace); Sinks.push_back(ConsoleSink); #endif diff --git a/soh/CMakeLists.txt b/soh/CMakeLists.txt index 6dbc70bbb..204664e17 100644 --- a/soh/CMakeLists.txt +++ b/soh/CMakeLists.txt @@ -1695,7 +1695,6 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") "NDEBUG" ">" "INCLUDE_GAME_PRINTF;" - "_CONSOLE;" "UNICODE;" "_UNICODE" STORMLIB_NO_AUTO_LINK @@ -1710,11 +1709,10 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") "ENABLE_OPENGL" ">" "$<$:" - "INCLUDE_GAME_PRINTF;" "NDEBUG;" ">" + "INCLUDE_GAME_PRINTF;" "WIN32;" - "_CONSOLE;" "UNICODE;" "_UNICODE" STORMLIB_NO_AUTO_LINK @@ -1723,7 +1721,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS") target_compile_definitions(${PROJECT_NAME} PRIVATE "$<$:" - "_DEBUG" + "_DEBUG" ">" "$<$:" "NDEBUG" @@ -1736,7 +1734,7 @@ elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS") elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang") target_compile_definitions(${PROJECT_NAME} PRIVATE "$<$:" - "_DEBUG" + "_DEBUG" ">" "$<$:" "NDEBUG" @@ -1799,7 +1797,7 @@ if(MSVC) /INCREMENTAL:NO > /DEBUG; - /SUBSYSTEM:CONSOLE; + /SUBSYSTEM:WINDOWS; /FORCE:MULTIPLE ) elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32") @@ -1814,7 +1812,7 @@ if(MSVC) /FORCE:MULTIPLE > /DEBUG; - /SUBSYSTEM:CONSOLE + /SUBSYSTEM:WINDOWS ) endif() endif() diff --git a/soh/include/functions.h b/soh/include/functions.h index 94c07b5d1..146aeeb4c 100644 --- a/soh/include/functions.h +++ b/soh/include/functions.h @@ -12,7 +12,7 @@ extern "C" #include "../../libultraship/libultraship/luslog.h" #include -#if defined(INCLUDE_GAME_PRINTF) && !defined(NDEBUG) +#if defined(INCLUDE_GAME_PRINTF) && defined(_DEBUG) #define osSyncPrintf(fmt, ...) lusprintf(__FILE__, __LINE__, 0, fmt, __VA_ARGS__) #else #define osSyncPrintf(fmt, ...) osSyncPrintfUnused(fmt, ##__VA_ARGS__) diff --git a/soh/src/code/main.c b/soh/src/code/main.c index 7a6d6c6d9..9a81ac884 100644 --- a/soh/src/code/main.c +++ b/soh/src/code/main.c @@ -38,7 +38,11 @@ void Main_LogSystemHeap(void) { osSyncPrintf(VT_RST); } +#ifdef _WIN32 +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) +#else int main(int argc, char** argv) +#endif { #ifdef __linux__ SetupHandlerLinux(); @@ -49,6 +53,7 @@ int main(int argc, char** argv) GameConsole_Init(); InitOTR(); BootCommands_Init(); + Main(0); DeinitOTR(); return 0;