Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
build/
lib/
.vs/
.idea/
.idea/
CMakeSettings.json
CMakeUserPresets.json
cmake-build-*
out/
154 changes: 154 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
cmake_minimum_required(VERSION 3.24)

project(ja2)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# lua51.lib and lua51.vc9.lib have been built with /MTx, so we must as well
# TODO: build our own Lua 5.1.2 from source so we can use whichever
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

add_compile_definitions(CINTERFACE XML_STATIC VFS_STATIC VFS_WITH_SLF VFS_WITH_7ZIP USE_VFS _CRT_SECURE_NO_DEPRECATE)
include_directories(${CMAKE_SOURCE_DIR} "ext/VFS/include" Utils TileEngine TacticalAI ModularizedTacticalAI Tactical Strategic "Standard Gaming Platform" Res Lua Laptop Multiplayer "Multiplayer/raknet" Editor Console)

# external libraries
add_subdirectory("ext/libpng")
add_subdirectory("ext/zlib")
add_subdirectory("ext/VFS")
target_link_libraries(bfVFS PRIVATE 7z)

# internal libraries that are Good
add_subdirectory(Lua)

# internal libraries that live in Preprocessor Hell, because they are Bad
add_subdirectory(TileEngine)
add_subdirectory(TacticalAI)
add_subdirectory(Utils)
add_subdirectory(Strategic)
add_subdirectory("Standard Gaming Platform")
add_subdirectory(Laptop)
add_subdirectory(Editor)
add_subdirectory(Console)
add_subdirectory(Tactical)
add_subdirectory(ModularizedTacticalAI)
# TODO: Rename 'Standard Gaming Platform' directory to 'SGP' so this can be refactored away
set(Ja2_Libs
TileEngine
TacticalAI
Utils
Strategic
SGP
Laptop
Editor
Console
Tactical
ModularizedTacticalAI
)

# TODO: Move these units into their own directory to declutter the root dir and CMakeLists.txt file
set(Ja2Src
"aniviewscreen.cpp"
"Credits.cpp"
"Fade Screen.cpp"
"FeaturesScreen.cpp"
"GameInitOptionsScreen.cpp"
"gameloop.cpp"
"gamescreen.cpp"
"GameSettings.cpp"
"GameVersion.cpp"
"HelpScreen.cpp"
"Init.cpp"
"Intro.cpp"
"JA2 Splash.cpp"
"Ja25Update.cpp"
"jascreens.cpp"
"Language Defines.cpp"
"Loading Screen.cpp"
"MainMenuScreen.cpp"
"MessageBoxScreen.cpp"
"MPChatScreen.cpp"
"MPConnectScreen.cpp"
"MPHostScreen.cpp"
"MPJoinScreen.cpp"
"MPScoreScreen.cpp"
"MPXmlTeams.cpp"
"Multiplayer/client.cpp"
"Multiplayer/server.cpp"
"Multiplayer/transfer_rules.cpp"
"Options Screen.cpp"
"profiler.cpp"
"SaveLoadGame.cpp"
"SaveLoadScreen.cpp"
"SCREENS.cpp"
"Sys Globals.cpp"
"ub_config.cpp"
"XML_DifficultySettings.cpp"
"XML_IntroFiles.cpp"
"XML_Layout_MainMenu.cpp"
Res/ja2.rc
)

set(Ja2_Libraries
"${PROJECT_SOURCE_DIR}/libexpatMT.lib"
"Dbghelp.lib"
Lua
"${PROJECT_SOURCE_DIR}/lua51.lib"
"${PROJECT_SOURCE_DIR}/lua51.vc9.lib"
"Winmm.lib"
"${PROJECT_SOURCE_DIR}/SMACKW32.LIB"
"${PROJECT_SOURCE_DIR}/binkw32.lib"
bfVFS
"${PROJECT_SOURCE_DIR}/Multiplayer/raknet/RakNetLibStatic.lib"
"ws2_32.lib"
)

include(cmake/ValidateOptions.cmake)

set(ValidLanguages CHINESE DUTCH ENGLISH FRENCH GERMAN ITALIAN POLISH RUSSIAN)
ValidateOptions("${ValidLanguages}" "Languages" "ENGLISH" "${Languages}" "LangTargets")

set(ValidApplications JA2 JA2MAPEDITOR JA2UB JA2UBMAPEDITOR)
ValidateOptions("${ValidApplications}" "Applications" "JA2" "${Applications}" "ApplicationTargets")


# Due to widespread preprocessor definition abuse in the codebase, practically
# every library-language-executable combination is its own compilation target
# TODO: refactor preprocessor usage onto, ideally, a single translation unit
foreach(lang IN LISTS LangTargets)
foreach(exe IN LISTS ApplicationTargets)
set(targPrefix ${exe}_${lang})

# make a copy of the library list for each language/library combination
list(SUBLIST Ja2_Libs 0 -1 ${targPrefix}_Targets)

add_executable(${targPrefix} WIN32)
target_sources(${targPrefix} PRIVATE ${Ja2Src})
target_link_libraries(${targPrefix} PRIVATE ${Ja2_Libraries})

foreach(lib IN LISTS ${targPrefix}_Targets)
set(tgt ${targPrefix}_${lib})

add_library(${tgt})
target_sources(${tgt} PRIVATE ${${lib}Src})

set(isEditor $<STREQUAL:${exe},JA2MAPEDITOR>)
set(isUb $<STREQUAL:${exe},JA2UB>)
set(isUbEditor $<STREQUAL:${exe},JA2UBMAPEDITOR>)

target_compile_definitions(${tgt} PUBLIC
$<IF:${isEditor},JA2EDITOR;JA2BETAVERSION,>
$<IF:${isUb},JA2UB;JA2UBMAPS,>
$<IF:${isUbEditor},JA2UB;JA2UBMAPS;JA2EDITOR;JA2BETAVERSION,>
$<IF:$<CONFIG:Debug>,JA2BETAVERSION;JA2TESTVERSION;DEBUG_ATTACKBUSY,>
${lang}
)
target_link_libraries(${targPrefix} PUBLIC ${tgt})
endforeach()

# SGP is the only one calling these, so they can go here
target_link_libraries(${targPrefix}_SGP PRIVATE "ddraw.lib" "${PROJECT_SOURCE_DIR}/fmodvc.lib")
target_link_libraries(${targPrefix}_SGP PUBLIC libpng)
endforeach()
endforeach()
43 changes: 43 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"version": 3,
"configurePresets": [
{
"name": "default",
"hidden": true,
"generator": "Ninja",
"cacheVariables": {
"Languages": "CHINESE;DUTCH;ENGLISH;FRENCH;GERMAN;ITALIAN;POLISH;RUSSIAN",
"Applications": "JA2;JA2MAPEDITOR;JA2UB;JA2UBMAPEDITOR",
"CMAKE_RUNTIME_OUTPUT_DIRECTORY": "."
},
"architecture": {
"value": "x86",
"strategy": "external"
}
},
{
"name": "Debug",
"displayName": "Debug",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "RelWithDebInfo",
"displayName": "RelWithDebInfo",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
},
{
"name": "Release",
"displayName": "Release",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
]
}
6 changes: 6 additions & 0 deletions Console/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
set(ConsoleSrc
"${CMAKE_CURRENT_SOURCE_DIR}/Console.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Cursors.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Dialogs.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/FileStream.cpp"
PARENT_SCOPE)
27 changes: 27 additions & 0 deletions Editor/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
set(EditorSrc
"${CMAKE_CURRENT_SOURCE_DIR}/Cursor Modes.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Editor Callbacks.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Editor Modes.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Editor Taskbar Creation.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Editor Taskbar Utils.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Editor Undo.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/EditorBuildings.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/EditorItems.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/EditorMapInfo.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/EditorMercs.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/EditorTerrain.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/editscreen.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/edit_sys.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Item Statistics.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/LoadScreen.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/messagebox.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/newsmooth.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/popupmenu.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Road Smoothing.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Sector Summary.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/selectwin.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/SmartMethod.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/smooth.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Smoothing Utils.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_ActionItems.cpp"
PARENT_SCOPE)
101 changes: 101 additions & 0 deletions Laptop/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
set(LaptopSrc
"${CMAKE_CURRENT_SOURCE_DIR}/aim.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AimArchives.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AimFacialIndex.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AimHistory.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AimLinks.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AimMembers.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AimPolicies.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AimSort.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BaseTable.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyR.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyRAmmo.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyRArmour.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyRGuns.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyRMailOrder.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyRMisc.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyRShipments.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BobbyRUsed.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BriefingRoom.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BriefingRoomM.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BriefingRoom_Data.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BrokenLink.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/CampaignHistoryMain.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/CampaignHistory_Summary.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/CampaignStats.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/CharProfile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DropDown.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DynamicDialogueWidget.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/email.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Encyclopedia_Data_new.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Encyclopedia_new.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/FacilityProduction.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/files.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/finances.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/florist Cards.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/florist Gallery.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/florist Order Form.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/florist.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/funeral.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/GunEmporium.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/history.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP AboutUs.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Attribute Entrance.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Attribute Finish.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Attribute Selection.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Background.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Begin Screen.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Character and Disability Entrance.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Character Trait.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Color Choosing.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Compile Character.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Confirm.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Disability Trait.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Finish.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Gear Entrance.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Gear.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP HomePage.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP MainPage.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Minor Trait.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Personality Entrance.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Personality Finish.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Personality Quiz.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Portraits.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Prejudice.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Skill Trait.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Text System.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMP Voices.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/IMPVideoObjects.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/insurance Comments.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/insurance Contract.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/insurance Info.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/insurance.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Intelmarket.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/laptop.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/merccompare.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/mercs Account.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/mercs Files.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/mercs No Account.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/mercs.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/MilitiaInterface.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/MilitiaWebsite.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/personnel.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/PMC.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/PostalService.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/sirtech.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Store Inventory.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/WHO.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_AIMAvailability.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_BriefingRoom.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_CampaignStatsEvents.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_ConditionsForMercAvailability.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_DeliveryMethods.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_Email.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_EmailMercAvailable.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_EmailMercLevelUp.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_History.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_IMPPortraits.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_IMPVoices.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_OldAIMArchive.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/XML_ShippingDestinations.cpp"
PARENT_SCOPE)
14 changes: 14 additions & 0 deletions ModularizedTacticalAI/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
set(ModularizedTacticalAISrc
"${CMAKE_CURRENT_SOURCE_DIR}/src/LegacyArmedVehiclePlan.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/AbstractPlanFactory.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/CrowPlan.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/LegacyAIPlan.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/LegacyAIPlanFactory.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/LegacyCreaturePlan.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/LegacyZombiePlan.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/NullPlan.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/NullPlanFactory.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Plan.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/PlanFactoryLibrary.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/PlanList.cpp"
PARENT_SCOPE)
Loading