diff --git a/.clang-tidy b/.clang-tidy index ef0f6fde7..0b57ab8ea 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,282 +1,18 @@ --- -Checks: 'clang-diagnostic-*,clang-analyzer-*,misc-static-assert,modernize-use-auto,modernize-use-default,modernize-usenullptr,modernize-use-override,performance-*,readability-non-const-parameter,readability-redundant-*,readability-simplify-*,bugprone-*' +Checks: 'clang-diagnostic-*,clang-analyzer-*,readability-non-const-parameter' +WarningsAsErrors: '' +HeaderFileExtensions: + - '' + - h + - hh + - hpp + - hxx +ImplementationFileExtensions: + - c + - cc + - cpp + - cxx HeaderFilterRegex: 'forms/.*|framework/.*|game/.*|library/.*|tests/.*|tools/.*' -AnalyzeTemporaryDtors: false -User: jonny -CheckOptions: - - key: google-readability-braces-around-statements.ShortStatementLines - value: '1' - - key: google-readability-function-size.StatementThreshold - value: '800' - - key: google-readability-namespace-comments.ShortNamespaceLines - value: '10' - - key: google-readability-namespace-comments.SpacesBeforeComments - value: '2' - - key: modernize-loop-convert.MaxCopySize - value: '16' - - key: modernize-loop-convert.MinConfidence - value: reasonable - - key: modernize-loop-convert.NamingStyle - value: CamelCase - - key: modernize-pass-by-value.IncludeStyle - value: llvm - - key: modernize-replace-auto-ptr.IncludeStyle - value: llvm - - key: modernize-use-nullptr.NullMacros - value: 'NULL' - - key: readability-identifier-naming.AbstractClassCase - value: CamelCase - - key: readability-identifier-naming.AbstractClassPrefix - value: '' - - key: readability-identifier-naming.AbstractClassSuffix - value: '' - - key: readability-identifier-naming.ClassCase - value: CamelCase - - key: readability-identifier-naming.ClassConstantCase - value: aNy_CasE - - key: readability-identifier-naming.ClassConstantPrefix - value: '' - - key: readability-identifier-naming.ClassConstantSuffix - value: '' - - key: readability-identifier-naming.ClassMemberCase - value: aNy_CasE - - key: readability-identifier-naming.ClassMemberPrefix - value: '' - - key: readability-identifier-naming.ClassMemberSuffix - value: '' - - key: readability-identifier-naming.ClassMethodCase - value: camelBack - - key: readability-identifier-naming.ClassMethodPrefix - value: '' - - key: readability-identifier-naming.ClassMethodSuffix - value: '' - - key: readability-identifier-naming.ClassPrefix - value: '' - - key: readability-identifier-naming.ClassSuffix - value: '' - - key: readability-identifier-naming.ConstantCase - value: aNy_CasE - - key: readability-identifier-naming.ConstantMemberCase - value: aNy_CasE - - key: readability-identifier-naming.ConstantMemberPrefix - value: '' - - key: readability-identifier-naming.ConstantMemberSuffix - value: '' - - key: readability-identifier-naming.ConstantParameterCase - value: aNy_CasE - - key: readability-identifier-naming.ConstantParameterPrefix - value: '' - - key: readability-identifier-naming.ConstantParameterSuffix - value: '' - - key: readability-identifier-naming.ConstantPrefix - value: '' - - key: readability-identifier-naming.ConstantSuffix - value: '' - - key: readability-identifier-naming.ConstexprFunctionCase - value: aNy_CasE - - key: readability-identifier-naming.ConstexprFunctionPrefix - value: '' - - key: readability-identifier-naming.ConstexprFunctionSuffix - value: '' - - key: readability-identifier-naming.ConstexprMethodCase - value: camelBack - - key: readability-identifier-naming.ConstexprMethodPrefix - value: '' - - key: readability-identifier-naming.ConstexprMethodSuffix - value: '' - - key: readability-identifier-naming.ConstexprVariableCase - value: aNy_CasE - - key: readability-identifier-naming.ConstexprVariablePrefix - value: '' - - key: readability-identifier-naming.ConstexprVariableSuffix - value: '' - - key: readability-identifier-naming.EnumCase - value: CamelCase - - key: readability-identifier-naming.EnumConstantCase - value: aNy_CasE - - key: readability-identifier-naming.EnumConstantPrefix - value: '' - - key: readability-identifier-naming.EnumConstantSuffix - value: '' - - key: readability-identifier-naming.EnumPrefix - value: '' - - key: readability-identifier-naming.EnumSuffix - value: '' - - key: readability-identifier-naming.FunctionCase - value: aNy_CasE - - key: readability-identifier-naming.FunctionPrefix - value: '' - - key: readability-identifier-naming.FunctionSuffix - value: '' - - key: readability-identifier-naming.GlobalConstantCase - value: aNy_CasE - - key: readability-identifier-naming.GlobalConstantPrefix - value: '' - - key: readability-identifier-naming.GlobalConstantSuffix - value: '' - - key: readability-identifier-naming.GlobalFunctionCase - value: aNy_CasE - - key: readability-identifier-naming.GlobalFunctionPrefix - value: '' - - key: readability-identifier-naming.GlobalFunctionSuffix - value: '' - - key: readability-identifier-naming.GlobalVariableCase - value: aNy_CasE - - key: readability-identifier-naming.GlobalVariablePrefix - value: '' - - key: readability-identifier-naming.GlobalVariableSuffix - value: '' - - key: readability-identifier-naming.IgnoreFailedSplit - value: '0' - - key: readability-identifier-naming.InlineNamespaceCase - value: aNy_CasE - - key: readability-identifier-naming.InlineNamespacePrefix - value: '' - - key: readability-identifier-naming.InlineNamespaceSuffix - value: '' - - key: readability-identifier-naming.LocalConstantCase - value: aNy_CasE - - key: readability-identifier-naming.LocalConstantPrefix - value: '' - - key: readability-identifier-naming.LocalConstantSuffix - value: '' - - key: readability-identifier-naming.LocalVariableCase - value: aNy_CasE - - key: readability-identifier-naming.LocalVariablePrefix - value: '' - - key: readability-identifier-naming.LocalVariableSuffix - value: '' - - key: readability-identifier-naming.MemberCase - value: aNy_CasE - - key: readability-identifier-naming.MemberPrefix - value: '' - - key: readability-identifier-naming.MemberSuffix - value: '' - - key: readability-identifier-naming.MethodCase - value: camelBack - - key: readability-identifier-naming.MethodPrefix - value: '' - - key: readability-identifier-naming.MethodSuffix - value: '' - - key: readability-identifier-naming.NamespaceCase - value: aNy_CasE - - key: readability-identifier-naming.NamespacePrefix - value: '' - - key: readability-identifier-naming.NamespaceSuffix - value: '' - - key: readability-identifier-naming.ParameterCase - value: aNy_CasE - - key: readability-identifier-naming.ParameterPackCase - value: aNy_CasE - - key: readability-identifier-naming.ParameterPackPrefix - value: '' - - key: readability-identifier-naming.ParameterPackSuffix - value: '' - - key: readability-identifier-naming.ParameterPrefix - value: '' - - key: readability-identifier-naming.ParameterSuffix - value: '' - - key: readability-identifier-naming.PrivateMemberCase - value: aNy_CasE - - key: readability-identifier-naming.PrivateMemberPrefix - value: '' - - key: readability-identifier-naming.PrivateMemberSuffix - value: '' - - key: readability-identifier-naming.PrivateMethodCase - value: camelBack - - key: readability-identifier-naming.PrivateMethodPrefix - value: '' - - key: readability-identifier-naming.PrivateMethodSuffix - value: '' - - key: readability-identifier-naming.ProtectedMemberCase - value: aNy_CasE - - key: readability-identifier-naming.ProtectedMemberPrefix - value: '' - - key: readability-identifier-naming.ProtectedMemberSuffix - value: '' - - key: readability-identifier-naming.ProtectedMethodCase - value: camelBack - - key: readability-identifier-naming.ProtectedMethodPrefix - value: '' - - key: readability-identifier-naming.ProtectedMethodSuffix - value: '' - - key: readability-identifier-naming.PublicMemberCase - value: aNy_CasE - - key: readability-identifier-naming.PublicMemberPrefix - value: '' - - key: readability-identifier-naming.PublicMemberSuffix - value: '' - - key: readability-identifier-naming.PublicMethodCase - value: camelBack - - key: readability-identifier-naming.PublicMethodPrefix - value: '' - - key: readability-identifier-naming.PublicMethodSuffix - value: '' - - key: readability-identifier-naming.StaticConstantCase - value: aNy_CasE - - key: readability-identifier-naming.StaticConstantPrefix - value: '' - - key: readability-identifier-naming.StaticConstantSuffix - value: '' - - key: readability-identifier-naming.StaticVariableCase - value: aNy_CasE - - key: readability-identifier-naming.StaticVariablePrefix - value: '' - - key: readability-identifier-naming.StaticVariableSuffix - value: '' - - key: readability-identifier-naming.StructCase - value: CamelCase - - key: readability-identifier-naming.StructPrefix - value: '' - - key: readability-identifier-naming.StructSuffix - value: '' - - key: readability-identifier-naming.TemplateParameterCase - value: aNy_CasE - - key: readability-identifier-naming.TemplateParameterPrefix - value: '' - - key: readability-identifier-naming.TemplateParameterSuffix - value: '' - - key: readability-identifier-naming.TemplateTemplateParameterCase - value: aNy_CasE - - key: readability-identifier-naming.TemplateTemplateParameterPrefix - value: '' - - key: readability-identifier-naming.TemplateTemplateParameterSuffix - value: '' - - key: readability-identifier-naming.TypeTemplateParameterCase - value: aNy_CasE - - key: readability-identifier-naming.TypeTemplateParameterPrefix - value: '' - - key: readability-identifier-naming.TypeTemplateParameterSuffix - value: '' - - key: readability-identifier-naming.TypedefCase - value: aNy_CasE - - key: readability-identifier-naming.TypedefPrefix - value: '' - - key: readability-identifier-naming.TypedefSuffix - value: '' - - key: readability-identifier-naming.UnionCase - value: CamelCase - - key: readability-identifier-naming.UnionPrefix - value: '' - - key: readability-identifier-naming.UnionSuffix - value: '' - - key: readability-identifier-naming.ValueTemplateParameterCase - value: aNy_CasE - - key: readability-identifier-naming.ValueTemplateParameterPrefix - value: '' - - key: readability-identifier-naming.ValueTemplateParameterSuffix - value: '' - - key: readability-identifier-naming.VariableCase - value: aNy_CasE - - key: readability-identifier-naming.VariablePrefix - value: '' - - key: readability-identifier-naming.VariableSuffix - value: '' - - key: readability-identifier-naming.VirtualMethodCase - value: camelBack - - key: readability-identifier-naming.VirtualMethodPrefix - value: '' - - key: readability-identifier-naming.VirtualMethodSuffix - value: '' +SystemHeaders: false ... diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index e6fd7b204..a63846350 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -12,7 +12,7 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v2 @@ -34,7 +34,13 @@ jobs: run: sudo apt-get update - name: Install dependencies - run: sudo apt-get install libsdl2-dev cmake build-essential git libunwind8-dev libboost-locale-dev libboost-filesystem-dev libboost-program-options-dev qtbase5-dev libvorbis-dev ninja-build g++-13 + run: sudo apt-get install libsdl2-dev cmake build-essential git libunwind8-dev libboost-locale-dev libboost-filesystem-dev libboost-program-options-dev qtbase5-dev libvorbis-dev ninja-build + + - name: Install gcc-14 + run: sudo apt install gcc-14 g++-14 + + - name: GCC 14 version check + run: echo "GCC-14:"; which gcc-14;gcc-14 --version; - name: Configure CMake # Use a bash shell so we can use the same syntax for environment variable @@ -44,7 +50,7 @@ jobs: # Note the current convention is to use the -S and -B options here to specify source # and build directories, but this is only available with CMake 3.13 and higher. # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 - run: CC=gcc-13 CXX=g++-13 cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -GNinja + run: CC=gcc-14 CXX=g++-14 cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -GNinja -DUSE_PCH=ON - name: Build working-directory: ${{runner.workspace}}/build diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3041d03a5..c5c817577 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -5,6 +5,8 @@ on: [push, pull_request] env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release + CLANG_FORMAT: clang-format-18 + CLANG_TIDY: clang-tidy-18 jobs: build: @@ -35,7 +37,7 @@ jobs: run: sudo apt-get update - name: Install dependencies - run: sudo apt-get install libsdl2-dev cmake build-essential git libunwind8-dev libboost-locale-dev libboost-filesystem-dev libboost-program-options-dev qtbase5-dev libvorbis-dev ninja-build clang-format-15 clang-tidy-15 + run: sudo apt-get install libsdl2-dev cmake build-essential git libunwind8-dev libboost-locale-dev libboost-filesystem-dev libboost-program-options-dev qtbase5-dev libvorbis-dev ninja-build ${CLANG_FORMAT} ${CLANG_TIDY} - name: Configure CMake # Use a bash shell so we can use the same syntax for environment variable @@ -45,7 +47,7 @@ jobs: # Note the current convention is to use the -S and -B options here to specify source # and build directories, but this is only available with CMake 3.13 and higher. # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 - run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -GNinja -DCLANG_FORMAT=clang-format-15 -DCLANG_TIDY=clang-tidy-15 + run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -GNinja -DCLANG_FORMAT=${CLANG_FORMAT} -DCLANG_TIDY=${CLANG_TIDY} - name: Setup Environment (PR) if: ${{ github.event_name == 'pull_request' }} @@ -65,14 +67,11 @@ jobs: working-directory: ${{runner.workspace}} shell: bash run: | - cd $GITHUB_WORKSPACE - if [ "${{env.BEFORE_COMMIT_SHA}}" == "0000000000000000000000000000000000000000" ] - then - echo '$GITHUB_WORKSPACE/tools/lint.sh ${{env.AFTER_COMMIT_SHA}}' - $GITHUB_WORKSPACE/tools/lint.sh ${{env.AFTER_COMMIT_SHA}} - else - echo '$GITHUB_WORKSPACE/tools/lint.sh ${{env.BEFORE_COMMIT_SHA}}..${{env.AFTER_COMMIT_SHA}}' - $GITHUB_WORKSPACE/tools/lint.sh ${{env.BEFORE_COMMIT_SHA}}..${{env.AFTER_COMMIT_SHA}} + cmake --build ${{runner.workspace}}/build -t format-sources + if [[ `git -C $GITHUB_WORKSPACE status --porcelain` ]]; then + echo "Format mismatch:"; + git -C $GITHUB_WORKSPACE diff; + exit 1; fi @@ -83,10 +82,10 @@ jobs: cd $GITHUB_WORKSPACE if [ "${{env.BEFORE_COMMIT_SHA}}" == "0000000000000000000000000000000000000000" ] then - echo 'CLANG_TIDY=clang-tidy-15 BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.AFTER_COMMIT_SHA}} || true;' - CLANG_TIDY=clang-tidy-15 BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.AFTER_COMMIT_SHA}} || true; + echo 'BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.AFTER_COMMIT_SHA}} || true;' + BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.AFTER_COMMIT_SHA}} || true; else - echo 'CLANG_TIDY=clang-tidy-15 BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.BEFORE_COMMIT_SHA}}..${{env.AFTER_COMMIT_SHA}} || true;' - CLANG_TIDY=clang-tidy-15 BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.BEFORE_COMMIT_SHA}}..${{env.AFTER_COMMIT_SHA}} || true; + echo 'BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.BEFORE_COMMIT_SHA}}..${{env.AFTER_COMMIT_SHA}} || true;' + BUILD_DIR=${{runner.workspace}}/build $GITHUB_WORKSPACE/tools/lint-tidy.sh ${{env.BEFORE_COMMIT_SHA}}..${{env.AFTER_COMMIT_SHA}} || true; fi diff --git a/.gitmodules b/.gitmodules index cdae4ef5a..73205b622 100644 --- a/.gitmodules +++ b/.gitmodules @@ -23,3 +23,6 @@ [submodule "dependencies/fmt"] path = dependencies/fmt url = https://github.com/fmtlib/fmt.git +[submodule "dependencies/magic_enum"] + path = dependencies/magic_enum + url = https://github.com/Neargye/magic_enum.git \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index ee6b7d33a..222234ba6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,7 @@ string(TOLOWER "${CMAKE_BUILD_TYPE}" lower_build_type) option(LTO "Build using link-time-optimisations" OFF) option(MSVC_PDB "Always generate PDB files" OFF) option(ENABLE_TESTS "Build some unit tests" ON) +option(USE_PCH "Enable precompiled header use during build" OFF) option(EXTRACT_DATA "Run the data extractor as part of the default target" ON) set(CD_PATH ${CMAKE_SOURCE_DIR}/data/cd.iso CACHE STRING "Path to cd.iso (used @@ -76,6 +77,8 @@ endif(LTO) # MSVC has default flags that CMake doesn't set if (MSVC) add_definitions(-DUNICODE -D_UNICODE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8") if (MSVC_VERSION GREATER_EQUAL 1910) if (MSVC_VERSION EQUAL 1928) diff --git a/CODE_STYLE.md b/CODE_STYLE.md index ac62d02ab..bfac4af08 100644 --- a/CODE_STYLE.md +++ b/CODE_STYLE.md @@ -15,7 +15,7 @@ GCCIsntMuchBetter C++11 features are heavily encouraged - patterns from 'older' c++ versions that have been superceded should be avoided. -The formatting sections of this document are enforced by the [clang-format tool](http://llvm.org/releases/15.0.0/tools/clang/docs/ClangFormat.html). Currently, version '15.0' of ``clang-format`` is to be used. The configuration file ``.clang-format`` in the root of the OpenApoc source repository should match the formatting guidelines specified below. +The formatting sections of this document are enforced by the [clang-format tool](https://releases.llvm.org/18.1.1/tools/clang/docs/ClangFormat.html). Currently, version '18.0' of ``clang-format`` is to be used. The configuration file ``.clang-format`` in the root of the OpenApoc source repository should match the formatting guidelines specified below. With this, it is highly recommended to run ``clang-format`` on all modified files before check-in. This can be run on source files with the following command: diff --git a/README.md b/README.md index 1aead7d8f..545f3273f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # OpenApocalypse [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Are%20you%20a%20fan%20of%20X-Com%20Apocalypse?%20OpenApoc%20is%20a%20clone%20of%20this%20great%20game%20-%20contribute!%20https://github.com/OpenApoc/OpenApoc&hashtags=games,openapoc,xcom) -> OpenApoc is an open-source re-implementation of the original [X-COM: Apocalypse](https://www.ufopaedia.org/index.php/Apocalypse), that requires the original files to run, licensed under the GPL3 and written in C++ / SDL2. It was originally founded by PmProg in July 2014, and has since grown in [community](https://www.ufopaedia.org/index.php/Credits_(OpenApoc)). +> OpenApoc is an open-source re-implementation of the original [X-COM: Apocalypse](https://www.ufopaedia.org/index.php/Apocalypse), that requires the original files to run, licensed under the GPL3 and written in C++ / SDL2. It was originally founded by PmProg in July 2014, and has since grown a significant [community](https://www.ufopaedia.org/index.php/Credits_(OpenApoc)). [![Linux Build Status](https://img.shields.io/travis/OpenApoc/OpenApoc?branch=master&label=Travis%20Linux&logo=Travis%20CI&logoColor=ffffff&labelColor=282828)](https://travis-ci.com/github/OpenApoc/OpenApoc) [![Windows Build Status](https://img.shields.io/appveyor/build/OpenApoc/openapoc?branch=master&label=AppVeyor%20Windows&logo=appveyor&logoColor=ffffff&labelColor=282828)](https://ci.appveyor.com/project/openapoc/openapoc/branch/master) @@ -33,44 +33,46 @@ ## Copyright -All rights for the original game and its resources belong to their respective owners. We do not encourage and do not support any form of illegal usage of the original game. We strongly advise to purchase the original game on GOG or other platforms. Pirated ISOs are not supported and will cause issues such as crashes and map problems with OpenApoc. +All rights for the original game and its resources belong to their respective owners. +We do not encourage and do not support any form of illegal usage of the original game. +We strongly advise to purchase the original game on STEAM or another platform of your choosing. +Pirated disc images and archives are not supported and will cause issues such as crashes and map problems with OpenApoc. ## Key Features -* Unlimited modding capabilities, which was not possible in the original -* Port the game to any platform you like (windows, linux, android etc) -* Support for modern screen resolutions -* Added a full debug system ([hot keys](https://github.com/OpenApoc/OpenApoc/blob/master/README_HOTKEYS.txt), etc.) -* Added 'more options' menu (with more than 40 improvements) -* Added skirmish module (fast fight) -* The new engine has ample opportunities for expansion and changes: - * High FPS, smooth sound during the game without bugs from original - * No limitations which were in vanilla - * Modern formats -* After release, we can add Julian Gollop's cut ideas to the game through mods. Many have already been added but they need functionality and balance. * [![Julian Gollop](https://img.shields.io/reddit/user-karma/combined/JulianGollop?style=social)](https://www.reddit.com/user/JulianGollop/) "Yes, I am aware of the openApoc project and I very much do support it." -* Fans creating Big Apoc Concept, for modders, thats should make OpenApoc more balanced, to provide: - * A variety of interesting gameplay solutions - * Make the game more complex and diverse - * L.O.R.E more fulfilling, deep and mysterious, intertwined with real history and other games - * Ending the game can be more interesting and less predictable +* Full modding capability - You can add or change almost anything! +* Options for modding that allow opportunity to make OpenApoc: + * More balanced + * More diverse + * More immersive +* Human-Readable Savegame editing - It's all XML in a ZIP archvive so you can edit/tweak in progress games to your liking! +* Support for modern screen resolutions and display scaling at a silky smooth 60fps +* Added a 'More Options' menu that allows players to select dozens of new optional improvements and enhancements +* Added a full debug system ([Hot Keys](https://github.com/OpenApoc/OpenApoc/blob/master/README_HOTKEYS.txt), etc.) +* Port the game to any platform you like (Windows, Linux, Etc.) +* Added a Skirmish Mode for quick fights and custom battles (Experimental) +* The new engine has ample opportunities for expansion and refinements including: + * High FPS + * Smooth sound playback with none of the pop/clicks/stutters of the original game +* The potential to add cut and missing features from the Original Game - some of these are already included even at current Alpha state or with the handful of mods already available! ## What's left? -1. [TO HAVE A TRULY PLAYABLE ALPHA STATE (DONE)](https://github.com/OpenApoc/OpenApoc/issues/263) -2. [TO REACH A BETA STATE (When All features implemented)](https://github.com/OpenApoc/OpenApoc/issues/264) -3. [TO REACH OPENAPOC RELEASE 1.0](https://github.com/OpenApoc/OpenApoc/issues/265) +1. [TO HAVE A TRULY PLAYABLE ALPHA STATE](https://github.com/OpenApoc/OpenApoc/issues/263) +2. [TO REACH A BETA STATE (All core Original Game features implemented)](https://github.com/OpenApoc/OpenApoc/issues/264) +3. [TO REACH OPENAPOC RELEASE 1.0 (Final polishing and testing to match or exceed Original Game state)](https://github.com/OpenApoc/OpenApoc/issues/265) 4. [Modding Functions, Extra Features, Enhancements and Quality of Life Updates](https://github.com/OpenApoc/OpenApoc/issues/941) ## Contribute and FAQ -http://openapoc.org/#contribute +http://openapoc.org/#contribute - Currently Offline, please use [Discord](https://discord.gg/f8Rayre) >Here you find news, detailing how you can participate in project. You can support the project by testing, translating, modding, drawing, modeling, concepting etc.. -http://openapoc.org/#faq ->Here you find the detailed FAQ (frequently asked questions) +http://openapoc.org/#faq - Currently Offline, please use [Discord](https://discord.gg/f8Rayre) +>Here you find the detailed FAQ (Frequently Asked Questions) ## Building @@ -94,6 +96,7 @@ The following libraries are also used, but are shipped as submodules in the repo * [physfs](https://icculus.org/physfs/) - Library for reading data from .iso files or directory trees (Note: We use a patched version, available on [GitHub](https://github.com/JonnyH/physfs-hg-import/tree/fix-iso) - required to read the .iso files we use). * [pugixml](https://pugixml.org) - XML library used for reading/writing the game data files. * [fmtlib](https://github.com/fmtlib/fmt) - A c++ string formatting library - proposed for c++20 standard. +* [magic_enum](https://github.com/Neargye/magic_enum) - Header-only C++17 library provides static reflection for enums, work with any enum type without any macro or boilerplate code. ### Building on Windows @@ -146,12 +149,12 @@ vcpkg --triplet x86-windows install sdl2 boost-locale boost-program-options boos ### Building on Linux -(Tested on Ubuntu 22.04) +(Tested on Ubuntu 22.04 and 24.04) * On Ubuntu, install the following packages: ```sh -sudo apt-get install sdl2-dev cmake build-essential git libunwind8-dev libboost-locale-dev libboost-program-options-dev qtbase5-dev libvorbis-dev +sudo apt-get install libsdl2-dev cmake build-essential git libunwind8-dev libboost-locale-dev libboost-program-options-dev qtbase5-dev libvorbis-dev ``` * On Mageia, install the following packages as root: @@ -276,13 +279,13 @@ OPENGL 2.0 SUPPORTIVE VIDEO CARDS ARE REQUIRED WINDOWS USERS: You will require the LATEST Visual C++ Libraries obtained from windows update to run OpenApoc https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-170 -(Keep in mind that OpenApoc is ALPHA STATE - this means bugs, crushes and not all features implemented, use our bug-tracker at https://github.com/OpenApoc/OpenApoc/issues to report bugs and navigate known ones) +Simple steps to play OpenApoc on Windows right now +(Keep in mind that it is ALPHA - this means bugs, crushes and not all features implemented, use our bug-tracker at https://github.com/OpenApoc/OpenApoc/issues to report bugs and navigate known ones) -1) Download the OpenApoc core files: [![Windows Build Status](https://img.shields.io/appveyor/build/OpenApoc/openapoc?branch=master&label=AppVeyor%20Windows&logo=appveyor&logoColor=ffffff&labelColor=282828)](https://ci.appveyor.com/project/openapoc/openapoc/branch/master) (Latest master build) -- If the build link above doesn't work, visit https://ci.appveyor.com/project/OpenApoc/openapoc/history +1) Download the OpenApoc core files from https://github.com/OpenApoc/OpenApoc/releases +- For experimental builds visit https://ci.appveyor.com/project/OpenApoc/openapoc/history - If you see a green bar next to the latest build then you can download it, click a build that is green, or use "Show More" to list all builds - Click ARTIFACTS (Currently only Windows x64) -- If there are no artifacts use https://github.com/OpenApoc/OpenApoc/releases for the latest Winx64 compile - Download the option that ends with a ".exe" (and without "debug" in it) - Run the downloaded exe installer, this will guide you through the installation - Use "portable install" if you want saves and settings to remain in the install directory @@ -293,7 +296,7 @@ https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msv - If the disc image is in .iso format, rename it to "cd.iso" - We also support the GOG .cue / .bin files! -3) Put cd.iso (image or folder) into the data folder under the specified OpenApoc install folder +3) Put cd.iso (image or folder) into the "data" folder under the specified OpenApoc install folder - If you have already specified the "cd.iso" location in the installer, you don't need to do this step - To use GOG .cue/.bin you rename the XCOM.cue file to "cd.iso", put that in the OpenApoc data folder, then put the XCOM.BIN, without renaming it, into the data folder too @@ -302,11 +305,13 @@ https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msv ## Contact us -If you're interested, please visit our [website](http://openapoc.org). -* We have [forums](http://openapoc.org/forum/) - please pop by and introduce yourself! -* We have an [Discord](https://discord.gg/f8Rayre) channel -* We have an IRC channel on [Freenode](http://webchat.freenode.net/?channels=openapoc) - [#openapoc](irc://irc.freenode.net/#openapoc). +If you're interested, please visit our [website](http://openapoc.org) (Currently Offline, please use [Discord](https://discord.gg/f8Rayre)). +* We have a [Discord](https://discord.gg/f8Rayre) - MOST ACTIVE PLACE FOR ALL THINGS OPENAPOC! * We have a [Youtube](https://www.youtube.com/c/OpenApoc) channel. +* We have a [forum](http://openapoc.org/forum/) (Currently Offline, please use [Discord](https://discord.gg/f8Rayre)) + +## Unnofficial and Community Contacts + * We have a [Facebook](https://www.facebook.com/openapoc) page. -* We have a [Vkontakte](https://vk.com/openapoc) page. * We have a [Reddit](https://reddit.com/r/openapoc) page. +* All VK Presence is currently unofficial diff --git a/appveyor-dev.yml b/appveyor-dev.yml index 794473c1c..38f7af6cc 100644 --- a/appveyor-dev.yml +++ b/appveyor-dev.yml @@ -25,7 +25,7 @@ cache: C:\Users\appveyor\AppData\Local\vcpkg\archives -> appveyor-dev.yml before_build: - cd c:\tools\vcpkg - git pull - - git checkout 2023.08.09 + - git checkout 2024.10.21 - .\bootstrap-vcpkg.bat - cd %APPVEYOR_BUILD_FOLDER% - vcpkg install @@ -34,7 +34,7 @@ before_build: - 7z e temp\cd.iso.xz -odata\ - call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" %VCVARS_ARCH% build_script: - - cmake -DMSVC_PDB=ON . -GNinja -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE="%CONFIGURATION%" -DCMAKE_PREFIX_PATH=%QTPATH% -DUSE_SYSTEM_QT=ON + - cmake -DMSVC_PDB=ON -DUSE_PCH=ON . -GNinja -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE="%CONFIGURATION%" -DCMAKE_PREFIX_PATH=%QTPATH% -DUSE_SYSTEM_QT=ON - cmake --build . after_build: - git describe --tags > build-id diff --git a/appveyor.yml b/appveyor.yml index ecb2f42a3..d00c922a0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -25,7 +25,7 @@ cache: C:\Users\appveyor\AppData\Local\vcpkg\archives -> appveyor.yml before_build: - cd c:\tools\vcpkg - git pull - - git checkout 2023.08.09 + - git checkout 2024.10.21 - .\bootstrap-vcpkg.bat - cd %APPVEYOR_BUILD_FOLDER% - vcpkg install @@ -35,7 +35,7 @@ before_build: - choco install nsis -pre - call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" %VCVARS_ARCH% build_script: - - cmake -DMSVC_PDB=ON . -GNinja -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE="%CONFIGURATION%" -DCMAKE_PREFIX_PATH=%QTPATH% -DUSE_SYSTEM_QT=ON + - cmake -DMSVC_PDB=ON -DUSE_PCH=ON . -GNinja -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE="%CONFIGURATION%" -DCMAKE_PREFIX_PATH=%QTPATH% -DUSE_SYSTEM_QT=ON - cmake --build . after_build: - git describe --tags > build-id diff --git a/data/forms/city/debugoverlay_city.form b/data/forms/city/debugoverlay_city.form index 601b6d2ea..a787f8657 100644 --- a/data/forms/city/debugoverlay_city.form +++ b/data/forms/city/debugoverlay_city.form @@ -47,7 +47,7 @@ smalfont -