diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..1d358f39 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,216 @@ +cmake_minimum_required(VERSION 3.12) + +set(ASSETS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/assets") + +option(JAPANESE "Enable the Japanese-language build" OFF) +option(FIX_BUGS "Fix various bugs in the game" ON) +option(DEBUG_SAVE "Re-enable the ability to drag-and-drop save files onto the window" OFF) + +project(CSE2 LANGUAGES C CXX) + +#if(MSVC) + # Statically-link the CRT (vcpkg static libs do this) +# foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) +# if(${flag_var} MATCHES "/MD") +# string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") +# endif() +# endforeach() +#endif() + +## +# CSE2 +## + +add_executable(CSE2 + "src/ArmsItem.cpp" + "src/ArmsItem.h" + "src/Back.cpp" + "src/Back.h" + "src/Boss.cpp" + "src/Boss.h" + "src/BossAlmo1.cpp" + "src/BossAlmo1.h" + "src/BossAlmo2.cpp" + "src/BossAlmo2.h" + "src/BossBallos.cpp" + "src/BossBallos.h" + "src/BossFrog.cpp" + "src/BossFrog.h" + "src/BossIronH.cpp" + "src/BossIronH.h" + "src/BossLife.cpp" + "src/BossLife.h" + "src/BossOhm.cpp" + "src/BossOhm.h" + "src/BossPress.cpp" + "src/BossPress.h" + "src/BossTwinD.cpp" + "src/BossTwinD.h" + "src/BossX.cpp" + "src/BossX.h" + "src/BulHit.cpp" + "src/BulHit.h" + "src/Bullet.cpp" + "src/Bullet.h" + "src/Caret.cpp" + "src/Caret.h" + "src/CommonDefines.h" + "src/Config.cpp" + "src/Config.h" + "src/Dialog.cpp" + "src/Dialog.h" + "src/Draw.cpp" + "src/Draw.h" + "src/Ending.cpp" + "src/Ending.h" + "src/Escape.cpp" + "src/Escape.h" + "src/Fade.cpp" + "src/Fade.h" + "src/Flags.cpp" + "src/Flags.h" + "src/Flash.cpp" + "src/Flash.h" + "src/Frame.cpp" + "src/Frame.h" + "src/Game.cpp" + "src/Game.h" + "src/Generic.cpp" + "src/Generic.h" + "src/GenericLoad.cpp" + "src/GenericLoad.h" + "src/Input.cpp" + "src/Input.h" + "src/KeyControl.cpp" + "src/KeyControl.h" + "src/Main.cpp" + "src/Main.h" + "src/Map.cpp" + "src/Map.h" + "src/MapName.cpp" + "src/MapName.h" + "src/MiniMap.cpp" + "src/MiniMap.h" + "src/MyChar.cpp" + "src/MyChar.h" + "src/MycHit.cpp" + "src/MycHit.h" + "src/MycParam.cpp" + "src/MycParam.h" + "src/NpcAct.h" + "src/NpcAct000.cpp" + "src/NpcAct020.cpp" + "src/NpcAct040.cpp" + "src/NpcAct060.cpp" + "src/NpcAct080.cpp" + "src/NpcAct100.cpp" + "src/NpcAct120.cpp" + "src/NpcAct140.cpp" + "src/NpcAct160.cpp" + "src/NpcAct180.cpp" + "src/NpcAct200.cpp" + "src/NpcAct220.cpp" + "src/NpcAct240.cpp" + "src/NpcAct260.cpp" + "src/NpcAct280.cpp" + "src/NpcAct300.cpp" + "src/NpcAct320.cpp" + "src/NpcAct340.cpp" + "src/NpChar.cpp" + "src/NpChar.h" + "src/NpcHit.cpp" + "src/NpcHit.h" + "src/NpcTbl.cpp" + "src/NpcTbl.h" + "src/Organya.cpp" + "src/Organya.h" + "src/PixTone.cpp" + "src/PixTone.h" + "src/Profile.cpp" + "src/Profile.h" + "src/SelStage.cpp" + "src/SelStage.h" + "src/Shoot.cpp" + "src/Shoot.h" + "src/Sound.cpp" + "src/Sound.h" + "src/Stage.cpp" + "src/Stage.h" + "src/Star.cpp" + "src/Star.h" + "src/TextScr.cpp" + "src/TextScr.h" + "src/Triangle.cpp" + "src/Triangle.h" + "src/ValueView.cpp" + "src/ValueView.h" + "src/WindowsWrapper.h" +) + +# Handle options +if(JAPANESE) + set(BUILD_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/game_japanese") + target_compile_definitions(CSE2 PRIVATE JAPANESE) +else() + set(BUILD_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/game_english") +endif() + +if(FIX_BUGS) + target_compile_definitions(CSE2 PRIVATE FIX_BUGS) +endif() + +if(DEBUG_SAVE) + target_compile_definitions(CSE2 PRIVATE DEBUG_SAVE) +endif() + +# Make some tweaks if we're targetting Windows +#if(WIN32) + target_sources(CSE2 PRIVATE "${ASSETS_DIRECTORY}/resources/CSE2.rc") + set_target_properties(CSE2 PROPERTIES WIN32_EXECUTABLE YES) # Disable the console window +#endif() + +# Make some tweaks if we're using MSVC +if(MSVC) + target_compile_definitions(CSE2 PRIVATE _CRT_SECURE_NO_WARNINGS) # Disable warnings that normally fire up on MSVC when using "unsafe" functions instead of using MSVC's "safe" _s functions +endif() + +# Make it so source files are recognized as UTF-8 by MSVC +if(MSVC) + target_compile_options(CSE2 PRIVATE "/utf-8") +endif() + +# Force strict C90 +set_target_properties(CSE2 PROPERTIES + C_STANDARD 90 + C_STANDARD_REQUIRED ON + C_EXTENSIONS OFF +) + +# Force strict C++98 +set_target_properties(CSE2 PROPERTIES + CXX_STANDARD 98 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF +) + +# Name debug builds "CSE2_debug", to distinguish them +set_target_properties(CSE2 PROPERTIES DEBUG_OUTPUT_NAME "CSE2_debug") + +# Send executable to the build_en/build_jp directory +set_target_properties(CSE2 PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${BUILD_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BUILD_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BUILD_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIRECTORY} +) + +# Link libraries +target_link_libraries(CSE2 PRIVATE ddraw.lib dsound.lib Version.lib ShLwApi.Lib Imm32.lib WinMM.lib dxguid.lib) + +# Newer MSVC is missing `dinput.lib` +if(MSVC AND MSVC_VERSION GREATER_EQUAL 1500) + target_link_libraries(CSE2 PRIVATE dinput8.lib) +else() + target_link_libraries(CSE2 PRIVATE dinput.lib) +endif() diff --git a/src/Main.cpp b/src/Main.cpp index e3995642..b68eeff0 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -22,6 +22,23 @@ #include "Sound.h" #include "Triangle.h" +// Visual Studio 6 is missing these, so define them here just in case +#ifndef VK_OEM_PLUS +#define VK_OEM_PLUS 0xBB +#endif + +#ifndef VK_OEM_COMMA +#define VK_OEM_COMMA 0xBC +#endif + +#ifndef VK_OEM_PERIOD +#define VK_OEM_PERIOD 0xBE +#endif + +#ifndef VK_OEM_2 +#define VK_OEM_2 0xBF +#endif + LRESULT __stdcall WindowProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); char gModulePath[MAX_PATH]; @@ -676,12 +693,12 @@ LRESULT __stdcall WindowProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPa switch (LOWORD(wParam)) { case 40001: - if (DialogBoxParamA(ghInstance, "DLG_YESNO", hWnd, QuitDialog, (LPARAM)"Quit?") == 1) + if (DialogBoxParamA(ghInstance, "DLG_YESNO", hWnd, (DLGPROC)QuitDialog, (LPARAM)"Quit?") == 1) PostMessageA(hWnd, WM_CLOSE, 0, 0); break; case 40002: - DialogBoxParamA(ghInstance, "DLG_ABOUT", hWnd, VersionDialog, 0); + DialogBoxParamA(ghInstance, "DLG_ABOUT", hWnd, (DLGPROC)VersionDialog, 0); break; case 40004: @@ -690,11 +707,11 @@ LRESULT __stdcall WindowProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPa break; case 40005: - DialogBoxParamA(ghInstance, "DLG_SAVE", hWnd, DebugSaveDialog, 0); + DialogBoxParamA(ghInstance, "DLG_SAVE", hWnd, (DLGPROC)DebugSaveDialog, 0); break; case 40007: - DialogBoxParamA(ghInstance, "DLG_MUTE", hWnd, DebugMuteDialog, 0); + DialogBoxParamA(ghInstance, "DLG_MUTE", hWnd, (DLGPROC)DebugMuteDialog, 0); break; } diff --git a/src/Organya.cpp b/src/Organya.cpp index 51070b16..341c039c 100644 --- a/src/Organya.cpp +++ b/src/Organya.cpp @@ -22,6 +22,11 @@ #include "Sound.h" +// Visual Studio 6 is missing this +#ifndef DWORD_PTR +#define DWORD_PTR DWORD +#endif + #define PANDUMMY 0xFF #define VOLDUMMY 0xFF #define KEYDUMMY 0xFF