changing #define to constexpr in Version.h

This commit is contained in:
Kateri Darr 2024-04-26 00:40:31 -04:00
parent af46ff5f0a
commit be8f949969
5874 changed files with 0 additions and 951259 deletions

View File

@ -1,97 +0,0 @@
---
# BasedOnStyle: WebKit
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: false
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: true
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterStruct: true
AfterUnion: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: All
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma
BreakStringLiterals: true
ColumnLimit: 128
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: false
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- FOR_ALL_PEEPS
- FOR_ALL_GUESTS
- FOR_ALL_STAFF
IncludeBlocks: 'Regroup'
IncludeCategories:
- Regex: '^"'
Priority: 1
- Regex: '^<'
Priority: 2
IndentCaseLabels: true
IndentPPDirectives: AfterHash
IndentWidth: 4
IndentWrappedFunctionNames: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: All
PenaltyBreakAssignment: 1000
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 1000
PointerAlignment: Left
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
UseTab: Never
...

View File

@ -1,11 +0,0 @@
---
Checks: >
-*,
cppcoreguidelines-macro-usage,
modernize-use-nullptr,
modernize-use-override
CheckOptions:
- key: cppcoreguidelines-macro-usage.AllowedRegexp
value: 'validate_global_widx|NETWORK_STREAM_VERSION'
WarningsAsErrors: true
FormatStyle: 'file'

View File

@ -1 +0,0 @@
comment: off

View File

@ -1,68 +0,0 @@
{
"rules": {
"body-leading-blank": [
2,
"always"
],
"body-max-length": [
0
],
"body-min-length": [
0
],
"footer-leading-blank": [
2,
"always"
],
"footer-max-length": [
0
],
"footer-min-length": [
0
],
"header-max-length": [
2,
"always",
72
],
"header-min-length": [
2,
"always",
10
],
"scope-empty": [
0
],
"subject-case": [
0
],
"subject-empty": [
0
],
"subject-full-stop": [
0
],
"subject-max-length": [
0
],
"subject-min-length": [
0
],
"type-case": [
0
],
"type-empty": [
0
],
"type-enum": [
0
],
"type-max-length": [
0
],
"type-min-length": [
0
]
}
}

View File

@ -1,4 +0,0 @@
bin/
build/
lib/
obj/

View File

@ -1,11 +0,0 @@
root = true
[*]
indent_style = space
indent_size = 4
charset = utf-8
insert_final_newline = true
trim_trailing_whitespace = true
[*.txt]
trim_trailing_whitespace = false

25
.gitattributes vendored
View File

@ -1,25 +0,0 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
# Custom for Xcode
*.pbxproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

View File

@ -1,76 +0,0 @@
name: Bug report
description: Report an issue you encountered when playing OpenRCT2.
labels:
- bug
body:
- type: markdown
attributes:
value: Before filing this bug, [please check if it hasn't already been reported](https://github.com/OpenRCT2/OpenRCT2/issues?q=is%3Aissue+label%3Abug). If it has, please add useful information to the existing issue instead.
- type: input
attributes:
label: Operating System
placeholder: e.g. Windows 10, 64-bit
validations:
required: true
- type: input
attributes:
label: OpenRCT2 build
placeholder: e.g. OpenRCT2, v0.4.2-53-g3fa7d59 (3fa7d59 on develop) provided by GitHub
description: You can see the version by running `openrct2 --version` or copy it from the About window. Open the "Disk and game options" menu (floppy disk on the top toolbar), choose "About 'OpenRCT2'" and click the copy button next to the version information.
validations:
required: true
- type: dropdown
attributes:
label: Base game
description: With what base game do you have OpenRCT2 loaded? Did you test it with the other (select both if so)?
multiple: true
options:
- RollerCoaster Tycoon 2
- RollerCoaster Tycoon Classic
validations:
required: true
- type: dropdown
attributes:
label: Area(s) with this issue?
description: What things had an issue? Check all that apply.
multiple: true
options:
- The bug also exists in the original game (RCT2/RCTC)
- This bug is specific to multiplayer
- This bug is a graphical glitch or error
- This issue has to do with park objects and/or asset packs
- This is a development issue
validations:
required: false
- type: textarea
attributes:
label: Describe the issue
description: Please describe the issue you are experiencing here.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: We highly suggest including a screenshot and a bug report log (System tray->Report bug).
placeholder: |
Tell us the steps required to trigger your bug. Example:
1. Open the attached park file
2. Click on the park entrance
3. The game crashes
validations:
required: true
- type: textarea
attributes:
label: Attachments
description: Please add any screenshots, dump files and/or videos here that may help us fix the issue.
placeholder: Drag and drop files here to add them
validations:
required: false

View File

@ -1,11 +0,0 @@
blank_issues_enabled: true
contact_links:
- name: Feature request
url: https://github.com/OpenRCT2/OpenRCT2/discussions/categories/feature-requests
about: Request a new feature to be added to OpenRCT2.
- name: Translation / Localisation
url: https://github.com/OpenRCT2/Localisation
about: For localisation issues, go to the localisation repository.
- name: OpenRCT2 Discord Server
url: https://discord.gg/ZXZd8D8
about: For help with running or playing the game, join our Discord server.

View File

@ -1,26 +0,0 @@
name: 'Backtrace issue commit correction'
on:
issues:
types:
- opened
jobs:
backtrace_commit_correction:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE: ${{ github.event.issue.html_url }}
if: |
contains(github.event.issue.labels.*.name, 'backtrace.io')
steps:
- name: Modify issue contents
env:
BODY: ${{ github.event.issue.body }}
id: fix
run: |
changed_body=$(echo "$BODY" | sed '/<strong>commit<\/strong>/,/<\/ul>/ s/<code>\([0-9a-f]\{7,\}\)<\/code>/\1/g')
if [[ "$changed_body" == "$BODY" ]]; then
echo "Unable to match the Backtrace report format."
exit 1
fi
echo "$changed_body" >> body.txt
gh issue edit $ISSUE --body-file body.txt

View File

@ -1,504 +0,0 @@
name: CI
on:
push:
paths-ignore:
- '.editorconfig'
- '.gitattributes'
- '.github/*_TEMPLATE/**'
- '.github/workflows/localisation.yml'
- '.gitignore'
- '.vscode/**'
pull_request:
paths-ignore:
- '.editorconfig'
- '.gitattributes'
- '.github/*_TEMPLATE/**'
- '.github/workflows/localisation.yml'
- '.gitignore'
- '.vscode/**'
defaults:
run:
shell: bash
env:
OPENRCT2_BUILD_SERVER: GitHub
OPENRCT2_ORG_TOKEN: ${{ secrets.OPENRCT2_ORG_TOKEN }}
BACKTRACE_IO_TOKEN: ${{ secrets.BACKTRACE_IO_TOKEN }}
OPENRCT2_VERSION: 0.4.10
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
lint-commit:
name: Lint Commit Message
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Lint Commit Messages
uses: wagoid/commitlint-github-action@v5
with:
configFile: .commitlint.json
check-code-formatting:
name: Check code formatting
runs-on: ubuntu-latest
container: openrct2/openrct2-build:4-format
defaults:
run:
shell: sh
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run clang-format
run: scripts/check-code-formatting
check-changelog-formatting:
name: Check changelog formatting
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run check-changelog-formatting
run: scripts/check-changelog-formatting
g2dat:
name: g2.dat
runs-on: ubuntu-latest
steps:
- name: Checkout OpenRCT2
uses: actions/checkout@v4
with:
path: OpenRCT2
- name: Download gxc
run: |
curl -Lo tools.tar.gz https://github.com/IntelOrca/libsawyer/releases/download/v1.3.0/libsawyer-tools-linux-x64.tar.gz
mkdir -p "$GITHUB_WORKSPACE/bin"
tar -C "$GITHUB_WORKSPACE/bin" -xf tools.tar.gz
echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
- name: Build g2.dat
run: |
gxc build g2.dat OpenRCT2/resources/g2/sprites.json
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: g2.dat
path: g2.dat
windows:
name: Windows
runs-on: windows-latest
needs: check-code-formatting
strategy:
fail-fast: false
matrix:
platform: [win32, x64, arm64]
env:
PLATFORM: ${{ matrix.platform }}
steps:
- name: Setup environment
run: |
BRANCH=$(echo $GITHUB_REF | cut -d'/' -f 3)
if [[ $BRANCH == 'develop' || $BRANCH == 'master' ]]; then
echo "CONFIGURATION=ReleaseLTCG" >> "$GITHUB_ENV"
else
echo "CONFIGURATION=Release" >> "$GITHUB_ENV"
fi
- name: Checkout
uses: actions/checkout@v4
- name: Git describe for shallow checkout
id: ghd
uses: proudust/gh-describe@v2
- name: Update GA environment
run: echo "OPENRCT2_DESCRIBE=${{ steps.ghd.outputs.describe }}" >> $GITHUB_ENV
- name: Install MSVC problem matcher
uses: ammaraskar/msvc-problem-matcher@master
- name: Build OpenRCT2
run: . scripts/setenv && build
- name: Build artifacts
run: |
. scripts/setenv -q
build-portable
build-symbols
build-installer -i
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-${{ matrix.platform }}
path: artifacts
if-no-files-found: error
- name: Run Tests
if: matrix.platform != 'arm64'
run: . scripts/setenv -q && run-tests
- name: Test Summary
uses: test-summary/action@v2
with:
paths: "artifacts/test-**.xml"
if: matrix.platform != 'arm64'
- name: Upload artifacts (openrct2.org)
run: |
. scripts/setenv
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
upload-build artifacts/openrct2-portable-*.zip "windows-portable-$PLATFORM.zip" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
upload-build artifacts/openrct2-installer-*.exe "windows-installer-$PLATFORM.exe" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
upload-build artifacts/openrct2-symbols-*.zip "windows-symbols-$PLATFORM.zip" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
upload-backtrace-symbols artifacts/openrct2-symbols-*.zip
else
echo 'Not going to push build'
fi
windows-mingw:
name: Windows (${{ matrix.platform_name }}) using mingw
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:14-mingw
strategy:
fail-fast: false
matrix:
platform: [win32]
include:
- platform: win32
platform_name: win32
cache_key: windows-mingw
build_flags: -DBUILD_SHARED_LIBS=ON -DENABLE_SCRIPTING=ON
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: ${{ matrix.cache_key }}
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build OpenRCT2
run: |
sudo su
cmake -B bin -G Ninja -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DCMAKE_BUILD_TYPE=Release -DDISABLE_IPO=on -DFORCE32=on ${{ matrix.build_flags }}
cd bin
ninja -k0
- name: Upload artifacts (CI)
if: matrix.platform == 'NT5.1'
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-Windows-${{ matrix.platform }}
path: bin/openrct2.exe
if-no-files-found: error
macos-cmake:
name: macOS (${{ matrix.arch }}) using CMake
runs-on: macos-12
needs: check-code-formatting
strategy:
fail-fast: false
matrix:
arch: [x64, arm64]
include:
- arch: x64
cache_key: macos-x64
# Note: only build/run tests on the native architecture of the CI agent
# GitHub macos-12 agents are all Intel, but as of 2024-04-25 new images, e.g. macos-14 (current macos-latest) are arm64
# See https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories
build_flags: -DARCH="x86_64" -DWITH_TESTS=on
run_tests: true
- arch: arm64
cache_key: macos-arm64
build_flags: -DARCH="arm64"
run_tests: false
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: ${{ matrix.cache_key }}
- name: Configure ccache
run: |
# See https://github.com/hendrikmuhs/ccache-action/issues/146
ccache --set-config=compiler_check=content
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build OpenRCT2
run: |
HOMEBREW_NO_ANALYTICS=1 brew install ninja pkg-config
. scripts/setenv -q && build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=on ${{ matrix.build_flags }}
- name: Build artifacts
run: |
. scripts/setenv
mkdir -p artifacts
mv bin/OpenRCT2.app artifacts
echo -e "\033[0;36mCompressing OpenRCT2.app...\033[0m"
cd artifacts
zip -rqy openrct2-macos.zip OpenRCT2.app
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-${{ matrix.arch }}-cmake
path: artifacts/openrct2-macos.zip
if-no-files-found: error
- name: Run Tests
if: ${{matrix.run_tests}}
run: . scripts/setenv -q && run-tests
- name: Test Summary
uses: test-summary/action@v2
with:
paths: "artifacts/test-**.xml"
if: ${{matrix.run_tests}}
macos-universal:
name: macOS universal app bundle
runs-on: macos-12
needs: macos-cmake
steps:
- name: Checkout
uses: actions/checkout@v4
- name: download x64 app bundle
uses: actions/download-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-x64-cmake
path: macos_universal/x64
- name: download arm64 app bundle
uses: actions/download-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-arm64-cmake
path: macos_universal/arm64
- name: Make Universal app bundle
run: |
. scripts/setenv
cd macos_universal
unzip x64/openrct2-macos.zip -d x64
unzip arm64/openrct2-macos.zip -d arm64
create-macos-universal
- name: Create artifact
run: |
. scripts/setenv
mkdir -p artifacts
mv macos_universal/OpenRCT2-universal.app artifacts/OpenRCT2.app
echo -e "\033[0;36mCompressing OpenRCT2.app...\033[0m"
cd artifacts
zip -rqy openrct2-macos.zip OpenRCT2.app
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-universal
path: artifacts/openrct2-macos.zip
if-no-files-found: error
- name: Upload artifacts (openrct2.org)
run: |
. scripts/setenv
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
upload-build artifacts/openrct2-macos.zip macos-universal.zip $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
else
echo 'Not going to push build'
fi
linux-portable:
name: ${{ matrix.distro }} Linux (${{ matrix.release }}, ${{ matrix.platform }}, portable)
runs-on: ubuntu-latest
needs: check-code-formatting
container: ${{ matrix.image }}
strategy:
fail-fast: false
matrix:
include:
# Use `-fno-var-tracking-assignments` to reduce amount of produced debug information. This is necessary due to 100MiB limit of GitHub / openrct2.org API.
- platform: x86_64
distro: Ubuntu
release: jammy
image: openrct2/openrct2-build:14-jammy
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments"
- platform: x86_64
distro: Debian
release: bullseye
image: openrct2/openrct2-build:14-bullseye
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" -DWITH_TESTS=off
- platform: i686
distro: Ubuntu
release: jammy
image: openrct2/openrct2-build:14-jammy32
build_flags: -DFORCE32=ON -DENABLE_SCRIPTING=OFF -DCMAKE_CXX_FLAGS="-m32 -g -gz" -DWITH_TESTS=off
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-${{ matrix.platform }}-${{ matrix.distro }}
- name: Get pre-reqs
run: . scripts/setenv && get-discord-rpc
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build OpenRCT2
run: . scripts/setenv -q && build -DWITH_TESTS=on -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DPORTABLE=ON ${{ matrix.build_flags }}
- name: Build artifacts
run: . scripts/setenv -q && build-portable artifacts/OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}.tar.gz bin/install/usr
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}
path: artifacts
if-no-files-found: error
- name: Run Tests
run: . scripts/setenv -q && run-tests
- name: Upload artifacts (openrct2.org)
run: |
# Build identification code: https://github.com/Limetric/OpenRCT2.org/blob/e5b738f3dadcc5a3b78e8dfd434756ff31eaa1d3/src/misc/releaseAsset.js#L94-L116
. scripts/setenv -q
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
upload-build artifacts/OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}.tar.gz linux-${{ matrix.platform }}-${{ matrix.distro }}.tar.gz $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
else
echo 'Not going to push build'
fi
linux-appimage:
name: Ubuntu Linux (AppImage, x86_64)
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:14-jammy
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-appimage
- name: Get pre-reqs
run: . scripts/setenv -q && get-discord-rpc
- name: Build OpenRCT2
run: . scripts/setenv -q && build -DCMAKE_BUILD_TYPE=Release -DAPPIMAGE=ON -DOPENRCT2_USE_CCACHE=on
- name: Build AppImage
run: . scripts/setenv -q && build-appimage
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-AppImage
path: artifacts
if-no-files-found: error
- name: Upload artifacts (openrct2.org)
run: |
# Build identification code: https://github.com/Limetric/OpenRCT2.org/blob/e5b738f3dadcc5a3b78e8dfd434756ff31eaa1d3/src/misc/releaseAsset.js#L94-L116
. scripts/setenv -q
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
upload-build artifacts/OpenRCT2-x86_64.AppImage linux.AppImage $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
else
echo 'Not going to push build'
fi
linux-docker:
name: Ubuntu Linux (Docker)
needs: check-code-formatting
if: github.repository == 'OpenRCT2/OpenRCT2'
runs-on: ubuntu-latest
steps:
- name: Checkout image
uses: actions/checkout@v4
with:
repository: OpenRCT2/openrct2-docker
- name: Build image
run: docker build -t openrct2/openrct2-cli:develop develop/cli
- name: Push image
env:
OPENRCT2_DOCKER_USER: ${{ secrets.OPENRCT2_DOCKER_USER }}
OPENRCT2_DOCKER_PASS: ${{ secrets.OPENRCT2_DOCKER_PASS }}
run: |
OPENRCT2_BRANCH=$(echo "$GITHUB_REF" | sed 's/refs\/heads\///')
echo "Current branch is $OPENRCT2_BRANCH"
if [ "$OPENRCT2_BRANCH" = 'develop' ]; then
docker login -u "$OPENRCT2_DOCKER_USER" -p "$OPENRCT2_DOCKER_PASS"
docker push openrct2/openrct2-cli:develop
else
echo 'Image not pushed'
fi
linux-clang:
name: Ubuntu Linux (jammy, debug, [http, network, flac, vorbis OpenGL] disabled) using clang
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:14-jammy
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-clang
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build OpenRCT2
run: . scripts/setenv && build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DDISABLE_NETWORK=ON -DDISABLE_HTTP=ON -DDISABLE_FLAC=ON -DDISABLE_VORBIS=ON -DDISABLE_OPENGL=ON
linux-clang-tests:
name: Ubuntu Linux (debug) using clang, coverage enabled
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:14-jammy
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-clang
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build OpenRCT2
run: . scripts/setenv && build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fprofile-instr-generate -fcoverage-mapping" -DWITH_TESTS=on
- name: Run Tests
run: . scripts/setenv -q && LLVM_PROFILE_FILE="openrct2-coverage-%p.profraw" run-tests
- name: Test Summary
uses: test-summary/action@v2
with:
paths: "artifacts/test-**.xml"
if: always()
- name: Process coverage information
run: |
cd bin
llvm-profdata merge -sparse openrct2-coverage*profraw -o openrct2.profdata
llvm-cov export -instr-profile=openrct2.profdata ./OpenRCT2Tests > coverage.json
llvm-cov report ./OpenRCT2Tests -instr-profile=openrct2.profdata
xz -1v openrct2.profdata
xz -1v coverage.json
xz -1v OpenRCT2Tests
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-coverage
path: |
bin/*profdata*
bin/coverage.json*
bin/OpenRCT2Tests.xz
if-no-files-found: error
android:
name: Android
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:14-android
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: android
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build OpenRCT2
run: |
. scripts/setenv
pushd src/openrct2-android
./gradlew app:assembleRelease
popd
mkdir -p artifacts
mv src/openrct2-android/app/build/outputs/apk/release/app-release.apk artifacts/openrct2-arm.apk
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-Android
path: artifacts
if-no-files-found: error
- name: Upload artifacts (openrct2.org)
run: |
. scripts/setenv -q
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
upload-build artifacts/openrct2-arm.apk android-arm.apk $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
else
echo 'Not going to push build'
fi

View File

@ -1,21 +0,0 @@
name: clang-tidy-check
on:
pull_request:
paths-ignore:
- '.editorconfig'
- '.gitattributes'
- '.github/*_TEMPLATE/**'
- '.github/workflows/localisation.yml'
- '.gitignore'
- '.vscode/**'
jobs:
clang-tidy-check:
runs-on: ubuntu-latest
container: openrct2/openrct2-build:13-jammy
steps:
- uses: actions/checkout@v4
- uses: ZehMatt/clang-tidy-annotations@v1
with:
build_dir: 'build'
cmake_args: '-G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DDISABLE_DISCORD_RPC=ON'

View File

@ -1,29 +0,0 @@
name: Dependency check
on:
issues:
types:
- opened
- edited
- closed
- reopened
pull_request_target:
types:
- opened
- edited
- closed
- reopened
- synchronize
# Schedule a check for every 2 hours (23rd minute).
schedule:
- cron: '23 */2 * * *'
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: z0al/dependent-issues@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
label: requires dependency
check_issues: off
keywords: depends on, blocked by, requires, needs

View File

@ -1,44 +0,0 @@
name: Localisation Merge
on:
schedule:
- cron: '0 4 * * *'
jobs:
merge-localisation:
name: Merge Localisation
if: github.repository == 'OpenRCT2/OpenRCT2'
runs-on: ubuntu-latest
steps:
- name: Store private SSH
run: |
echo "Store private SSH deploy key..."
mkdir -p ~/.ssh
echo "${{ secrets.OPENRCT2_DEPLOY_KEY }}" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
- name: Clone repositories
run: |
echo "Cloning repositories..."
git clone -b master --depth 1 git@github.com:OpenRCT2/Localisation.git Localisation
git clone -b develop git@github.com:OpenRCT2/OpenRCT2.git OpenRCT2
- name: Copy over language files
run: |
echo "Copying language files..."
for f in ./Localisation/data/language/*
do
filename=$(basename $f)
cp $f "./OpenRCT2/data/language/$filename"
done
- name: Commit and push
working-directory: OpenRCT2
run: |
if [[ $(git status --porcelain) ]]; then
echo "Committing and pushing..."
git add .
git config --global user.name "OpenRCT2 git bot"
git config --global user.email "gitbot@openrct2.org"
git commit -m "Merge Localisation/master into OpenRCT2/develop"
git push
echo "Complete"
else
echo "No changes to merge."
fi

View File

@ -1,21 +0,0 @@
name: 'Manage stale backtrace reports'
on:
schedule:
- cron: '0 * * * *'
jobs:
stale:
runs-on: ubuntu-latest
if: github.repository == 'OpenRCT2/OpenRCT2'
steps:
- uses: actions/stale@v8
with:
days-before-issue-stale: 60
days-before-issue-close: 1
days-before-pr-stale: -1
days-before-pr-close: -1
only-issue-labels: 'backtrace.io'
stale-issue-label: 'stale-backtrace'
stale-issue-message: 'This issue is stale and will be closed tomorrow if no action is taken. To keep it open, leave a comment or remove the `stale-backtrace` label.'
close-issue-message: 'This issue was closed due to inactivity.'
operations-per-run: 200

View File

@ -1,22 +0,0 @@
name: 'Manage stale PRs'
on:
schedule:
- cron: '30 1 * * *'
jobs:
stale:
runs-on: ubuntu-latest
if: github.repository == 'OpenRCT2/OpenRCT2'
steps:
- uses: actions/stale@v8
with:
exempt-all-pr-assignees: true
exempt-all-pr-milestones: true
exempt-draft-pr: true
days-before-issue-stale: -1
days-before-issue-close: -1
days-before-pr-stale: 31
days-before-pr-close: 14
stale-pr-label: 'stale-pr'
stale-pr-message: 'This pull request has been marked as stale and will be closed in 14 days if no action is taken. To keep it open, leave a comment or remove the `stale-pr` label. If you''re awaiting feedback from a developer, please send us a reminder (either here or on [Discord](https://discord.gg/ZXZd8D8)).'
close-pr-message: 'This pull request has been closed due to inactivity. If you want to continue with this, or are awaiting a review, don''t hesitate to reach out to a developer. We''ll gladly re-open this PR! You can tag us here, or send us a message on [Discord](https://discord.gg/ZXZd8D8).'

312
.gitignore vendored
View File

@ -1,312 +0,0 @@
# OPENRCT2
/sdl
# Compiled dll
openrct2.dll
# Distribution
distribution/windows/*.exe
distribution/android/*/external/
# Build artifacts
artifacts
bin.*/
.cache
.dependencies
sequencesversion
objectsversion
/out/
#lib
lib
libversion
# Downloaded or built data files
data/g2.dat
data/sequence
data/object
data/assetpack
#################
## Eclipse
#################
*.pydevproject
.project
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# PDT-specific
.buildpath
#################
## Visual Studio
#################
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.vcxproj.filters
*.suo
*.user
*.sln.docstates
.vs/
# Build results
[Dd]ebug/
[Rr]elease/
x64/
build/
build_*/
[Bb]in/
[Oo]bj/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.scc
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
*.VC.opendb
*.VC.db
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.diagsession
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
*.ncrunch*
.*crunch*.local.xml
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.Publish.xml
*.pubxml
# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
#packages/
# Windows Azure Build Output
csx
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.pfx
*.publishsettings
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
App_Data/*.mdf
App_Data/*.ldf
#############
## Windows detritus
#############
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
#############
## Xcode
#############
# Build generated
build/
DerivedData
# Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
# Other
*.xccheckout
*.moved-aside
*.xcuserstate
# Mac crap
.DS_Store
# We link logo files to .xcassets in Xcode project, so don't sync them
distribution/macos/Assets.xcassets/AppIcon.appiconset/*.png
# Extra Xcode-specific lib files
libxc
#############
## Python
#############
*.py[co]
# Packages
*.egg
*.egg-info
dist/
build/
eggs/
parts/
var/
sdist/
develop-eggs/
.installed.cfg
# Installer logs
pip-log.txt
# Unit test / coverage reports
.coverage
.tox
#Translations
*.mo
#Mr Developer
.mr.developer.cfg
#IDA files
openrct2.id*
openrct2.nam
openrct2.til
#################
## Linux
#################
# KDE folder settings
.directory
# discord rich presence client library
discord-rpc
###############
## JetBrains ##
###############
.idea/
#########################
## Visual Studio Code
#########################
.vscode/*
.vscode/settings.json
.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# CMake
cmake-build-*/

View File

@ -1,85 +0,0 @@
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}",
"${workspaceRoot}/src/**"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"macFrameworkPath": [
"/System/Library/Frameworks",
"/Library/Frameworks"
],
"cStandard": "c11",
"cppStandard": "c++20"
},
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/include/SDL2",
"/usr/local/include",
"${workspaceRoot}",
"${workspaceRoot}/src"
],
"defines": [
"ENABLE_SCRIPTING"
],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}",
"${workspaceRoot}/src"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17"
},
{
"name": "Win32",
"includePath": [
"${workspaceRoot}",
"${workspaceRoot}/src",
"${workspaceRoot}/src/thirdparty",
"${workspaceRoot}/lib/Win32/include",
"${workspaceRoot}/lib/x64/include",
"${workspaceRoot}/lib/googletest/googletest/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"ENABLE_SCRIPTING"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}

54
.vscode/launch.json vendored
View File

@ -1,54 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/openrct2",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/bin",
"environment": [],
"externalConsole": false,
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"linux": {
"MIMode": "gdb"
},
"osx": {
"MIMode": "lldb"
},
"windows": {
"MIMode": "gdb"
}
},
{
"name": "C++ Attach",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/bin/openrct2",
"processId": "${command:pickProcess}",
"setupCommands": [
{
"text": "-enable-pretty-printing"
}
],
"linux": {
"MIMode": "gdb"
},
"osx": {
"MIMode": "lldb"
},
"windows": {
"MIMode": "gdb"
}
}
]
}

View File

@ -1,529 +0,0 @@
# CMAKE project for openrct2
cmake_minimum_required(VERSION 3.9)
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
endif()
# Note: Searching for CCache must be before project() so project() can use CCache too
# if it is available
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
option(OPENRCT2_USE_CCACHE "Use CCache to improve recompilation speed (optional)" ON)
if (OPENRCT2_USE_CCACHE)
find_package(CCache)
if (CCache_FOUND)
# Use e.g. "ccache clang++" instead of "clang++"
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCache_EXECUTABLE}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCache_EXECUTABLE}")
else()
message("Usage of CCache was enabled, but CCache was not found, so CCache is not being enabled.")
endif()
endif (OPENRCT2_USE_CCACHE)
if (APPLE)
execute_process(COMMAND /usr/bin/uname -m OUTPUT_VARIABLE SYSTEM_MACOS_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
if (NOT DEFINED ARCH)
set(ARCH "${SYSTEM_MACOS_ARCH}")
endif ()
set(CMAKE_OSX_ARCHITECTURES "${ARCH}" CACHE STRING "")
if("${ARCH}" MATCHES "^x86_64")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "")
elseif("${ARCH}" MATCHES "^arm64")
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "")
else()
message("Unknown macOS architecture: ${ARCH}. Behavior may be unexpected.")
endif()
endif ()
project(openrct2 CXX)
if (APPLE)
set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING "")
endif ()
include(cmake/platform.cmake)
include(CMakeDependentOption)
# vcpkg includes its own copy of duktapeConfig.cmake; only include ours as needed.
if (NOT MSVC)
include(FindPkgConfig)
set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
endif ()
include(CheckCXXCompilerFlag)
include(GNUInstallDirs)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}")
set(TITLE_SEQUENCE_VERSION "0.4.6")
set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip")
set(TITLE_SEQUENCE_SHA1 "80fefc6ebbabc42a6f4703412daa5c62f661420d")
set(OBJECTS_VERSION "1.4.3")
set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip")
set(OBJECTS_SHA1 "ac78210ef46465c0f51bbffd6fe21845092af48e")
set(OPENSFX_VERSION "1.0.5")
set(OPENSFX_URL "https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v${OPENSFX_VERSION}/opensound.zip")
set(OPENSFX_SHA1 "b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb")
set(OPENMSX_VERSION "1.5")
set(OPENMSX_URL "https://github.com/OpenRCT2/OpenMusic/releases/download/v${OPENMSX_VERSION}/openmusic.zip")
set(OPENMSX_SHA1 "f3c707e576281758637598ce68880416891fe5f9")
set(REPLAYS_VERSION "0.0.79")
set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v${REPLAYS_VERSION}/replays.zip")
set(REPLAYS_SHA1 "34457077DBA9448A08FF6AC95E5CB92D65252E0C")
option(FORCE32 "Force 32-bit build. It will add `-m32` to compiler flags.")
option(WITH_TESTS "Build tests")
option(PORTABLE "Create a portable build (-rpath=$ORIGIN)" OFF)
option(APPIMAGE "Create an appimage build (-rpath=$ORIGIN/../lib)" OFF)
option(DOWNLOAD_TITLE_SEQUENCES "Download title sequences during installation." ON)
option(DOWNLOAD_OBJECTS "Download objects during installation." ON)
option(DOWNLOAD_OPENSFX "Download OpenSoundEffects during installation." ON)
option(DOWNLOAD_OPENMSX "Download OpenMusic during installation." ON)
CMAKE_DEPENDENT_OPTION(DOWNLOAD_REPLAYS "Download replays during installation." ON
"WITH_TESTS" OFF)
CMAKE_DEPENDENT_OPTION(MACOS_USE_DEPENDENCIES "Use OpenRCT2 dependencies instead of system libraries" ON
"APPLE" OFF)
CMAKE_DEPENDENT_OPTION(MACOS_BUNDLE "Build macOS application bundle (OpenRCT2.app)" ON
"MACOS_USE_DEPENDENCIES; NOT DISABLE_GUI" OFF)
# Options
option(STATIC "Create a static build.")
option(USE_MMAP "Use mmap to try loading rct2's data segment into memory.")
option(DISABLE_DISCORD_RPC "Disable Discord-RPC support." OFF)
# Currently unused, disable by default.
option(DISABLE_GOOGLE_BENCHMARK "Disable Google Benchmarks support." ON)
option(DISABLE_HTTP "Disable HTTP support.")
option(DISABLE_NETWORK "Disable multiplayer functionality. Mainly for testing.")
option(DISABLE_TTF "Disable support for TTF provided by freetype2.")
option(ENABLE_SCRIPTING "Enable script / plugin support." ON)
option(DISABLE_GUI "Don't build GUI. (Headless only.)")
if (FORCE32)
set(TARGET_M "-m32")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_M}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${TARGET_M}")
endif ()
if (PORTABLE OR WIN32)
set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_BINDIR}")
set(CMAKE_INSTALL_RPATH "$ORIGIN")
endif ()
if (APPIMAGE)
set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib")
endif ()
if (MACOS_USE_DEPENDENCIES)
message("Using OpenRCT2 dependencies instead of system libraries")
# if we're building on macOS, then we need the dependencies
include(cmake/download.cmake)
set(MACOS_DYLIBS_VERSION "35")
set(MACOS_DYLIBS_ZIPFILE "openrct2-libs-v${MACOS_DYLIBS_VERSION}-universal-macos-dylibs.zip")
set(MACOS_DYLIBS_SHA1 "bed4340c32b6dbee9634ceaf19cb6b49a837aead")
set(MACOS_DYLIBS_DIR "${ROOT_DIR}/lib/macos")
set(MACOS_DYLIBS_URL "https://github.com/OpenRCT2/Dependencies/releases/download/v${MACOS_DYLIBS_VERSION}/${MACOS_DYLIBS_ZIPFILE}")
download_openrct2_zip(
ZIP_VERSION ${MACOS_DYLIBS_VERSION}
DOWNLOAD_DIR ${MACOS_DYLIBS_DIR}
ZIP_URL ${MACOS_DYLIBS_URL}
SHA1 ${MACOS_DYLIBS_SHA1}
)
set(CMAKE_MACOSX_RPATH 1)
list(APPEND CMAKE_PREFIX_PATH "${MACOS_DYLIBS_DIR}")
# if we're making the OpenRCT2.app bundle, rpath will be handled by fixup_bundle
# if we're building the CLI executable, we need to do it ourselves
if (NOT MACOS_BUNDLE)
message("Setting rpath for macOS dylibs")
# the RPATH to be used when installing, but only if it's not a system directory
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif("${isSystemDir}" STREQUAL "-1")
# if the DESTDIR env var is defined, use it in the install RPATH
if(DEFINED ENV{DESTDIR})
get_filename_component(destdirRealPath "$ENV{DESTDIR}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
set(CMAKE_INSTALL_RPATH "${destdirRealPath}${CMAKE_INSTALL_PREFIX}/lib")
endif()
endif ()
endif ()
# LIST of supported flags, use SET_CHECK_CXX_FLAGS() to apply to target.
# Use ADD_CHECK_CXX_COMPILER_FLAG() to add to list.
set(SUPPORTED_CHECK_CXX_COMPILER_FLAGS "")
include(cmake/ipo.cmake)
list(APPEND IPO_ENABLED_BUILDS RELEASE RELWITHDEBINFO MINSIZEREL)
ipo_enable("${IPO_ENABLED_BUILDS}")
# Describe current version in terms of closest tag
execute_process(
COMMAND git describe HEAD
COMMAND sed -E "s/-g.+$//"
WORKING_DIRECTORY ${ROOT_DIR}
OUTPUT_VARIABLE OPENRCT2_VERSION_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
# Define current git branch
execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${ROOT_DIR}
OUTPUT_VARIABLE OPENRCT2_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
# Define short commit hash
execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${ROOT_DIR}
OUTPUT_VARIABLE OPENRCT2_COMMIT_SHA1_SHORT
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
if (NOT DISABLE_DISCORD_RPC)
if (UNIX AND NOT APPLE)
find_package(DiscordRPC)
if(${DISCORDRPC_FOUND})
set(HAVE_DISCORD_RPC TRUE)
add_definitions(-D__ENABLE_DISCORD__)
include_directories(DISCORDRPC_PROCESS_INCLUDES)
endif()
elseif (MACOS_USE_DEPENDENCIES)
find_package(discordrpc CONFIG REQUIRED)
if(${DISCORDRPC_FOUND})
add_definitions(-D__ENABLE_DISCORD__)
set(HAVE_DISCORD_RPC TRUE)
message("Building with libdiscord-rpc.dylib")
endif()
elseif(NOT HAVE_DISCORD_RPC AND EXISTS "${ROOT_DIR}/discord-rpc")
# Don't build discord's examples, some of which are in C and do not honour
# the flags we set for C++. Also we don't use the provided examples.
set(BUILD_EXAMPLES OFF CACHE BOOL "Build example apps")
add_subdirectory("${ROOT_DIR}/discord-rpc")
add_definitions(-D__ENABLE_DISCORD__)
include_directories("${ROOT_DIR}/discord-rpc/include")
set(HAVE_DISCORD_RPC TRUE)
message("Building with discord-rpc support")
else()
message("No discord-rpc detected, to enable clone discord-rpc to root directory: ${ROOT_DIR}")
endif()
endif()
# ensure X86 and X86_64 are always initialized
# may be overwritten below
set(X86 0)
set(X86_64 0)
# Copied from https://github.com/opencv/opencv/blob/dcdd6af5a856826fe62c95322145731e702e54c5/cmake/OpenCVDetectCXXCompiler.cmake#L63-L70
if(MSVC64 OR MINGW64)
set(X86_64 1)
elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING))
set(X86 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
set(X86_64 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*")
set(X86 1)
endif()
# Check if a flag exists and add it to the list of compiler (so, not linker) options
function (ADD_CHECK_CXX_COMPILER_FLAG _CXXFLAGS _CACHE_VAR _FLAG)
CHECK_CXX_COMPILER_FLAG("${_FLAG}" "${_CACHE_VAR}")
if (${_CACHE_VAR})
set(SUPPORTED_CHECK_CXX_COMPILER_FLAGS ${SUPPORTED_CHECK_CXX_COMPILER_FLAGS} ${_FLAG} PARENT_SCOPE)
else ()
message(STATUS "Unsupported CXXFLAG: ${_FLAG}")
endif ()
endfunction ()
# Add check flags to a compile TARGET
function (SET_CHECK_CXX_FLAGS _TARGET)
target_compile_options("${_TARGET}" PRIVATE "${SUPPORTED_CHECK_CXX_COMPILER_FLAGS}")
endfunction()
# Check if a flag exists and add it to the compiler and the linker options
function (ADD_CHECK_CXX_FLAG _CXXFLAGS _CACHE_VAR _FLAG)
CHECK_CXX_COMPILER_FLAG("${_FLAG}" "${_CACHE_VAR}")
if (${_CACHE_VAR})
set(${_CXXFLAGS} "${${_CXXFLAGS}} ${_FLAG}" PARENT_SCOPE)
else ()
message(STATUS "Unsupported CXXFLAG: ${_FLAG}")
endif ()
endfunction ()
if (MSVC)
# CMAKE does not have a built-in option for setting the CRT, so override the default flags.
# NOTE: doing it this way avoids a linker warning about one directive overriding another
set(CMAKE_CXX_FLAGS_DEBUG "/MTd /Zi /Ob0 /Od /RTC1")
set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /DNDEBUG")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /permissive- /Zc:externConstexpr /EHsc /WX")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244") # C4244: 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4068") # C4068: unknown pragma
# Enable char8_t<->char conversion
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:char8_t-")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
if (CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
add_definitions(-D__SSE4_1__)
add_definitions(-D__AVX2__)
endif ()
add_definitions(-DNOMINMAX)
else ()
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_OVERRIDE -Wsuggest-override)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_DUPLICATED_COND -Wduplicated-cond)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_NON_VIRTUAL_DTOR -Wnon-virtual-dtor)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_MISSING_VARIABLE_DECLARATIONS -Wmissing-variable-declarations)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_DUPLICATED_BRANCHES -Wduplicated-branches)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_RESTRICT -Wrestrict)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_MISSING_FIELD_INITIALIZERS -Wmissing-field-initializers)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_UNREACHABLE_CODE_BREAK -Wunreachable-code-break)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_LOGICAL_OP -Wlogical-op)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_RANGE_LOOP_ANALYSIS -Wrange-loop-analysis)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_TAUTOLOGICAL_ZERO_COMPARE -Wtautological-unsigned-zero-compare)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_OLD_STYLE_CAST -Wold-style-cast)
# unused-const-variable=1 only checks main compilation unit
# unused-const-variable[=2] would check for unused values from headers as well
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_UNUSED_CONST_VARIABLE -Wunused-const-variable=1)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WNO_CLOBBERED -Wno-clobbered)
# Disabled due to problems compiling OpenSSL on macOS.
# ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_DOCUMENTATION -Wdocumentation)
# Items below are not supported by ICC
if (NOT MINGW)
# Do not enable for MinGW, as its headers contain redundant declarations of builtin functions
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
# Currently used MinGW w/GCC 7.2 doesn't provide sane error messages for this
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_NULL_DEREFERENCE -Wnull-dereference)
endif ()
# These have no workarounds available when building with LTO
if (NOT IPO_BUILD_ENABLED)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_FINAL_TYPES -Wsuggest-final-types)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_FINAL_METHODS -Wsuggest-final-methods)
endif ()
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_IGNORED_QUALIFIERS -Wignored-qualifiers)
# -Wstrict-overflow is only active when -fstrict-overflow is enabled, but -fstrict-overflow
# is enabled on -O2, -O3, -Os. This should help catch bugs locally before they reach Travis
# As of 2a435bf -Wstrict-overflow=1 passes, but higher values do not.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstrict-overflow")
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_STRICT_OVERFLOW -Wstrict-overflow=1)
# Compiler flags
set(DEBUG_LEVEL 0 CACHE STRING "Select debug level for compilation. Use value in range 03.")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstrict-aliasing -Werror -Wundef -Wmissing-declarations -Winit-self -Wall -Wextra -Wshadow")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas -Wno-missing-braces -Wno-comment -Wnonnull -Wno-unused-parameter -Wno-attributes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG=${DEBUG_LEVEL}")
# Enable char8_t<->char conversion
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-char8_t -Wno-deprecated-declarations")
if(APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=objc-method-access")
endif()
# On mingw all code is already PIC, this will avoid compiler error on redefining this option
if (NOT MINGW)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif ()
if (APPLE AND NOT USE_MMAP)
set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
else ()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif ()
endif ()
if (CXX_WARN_SUGGEST_FINAL_TYPES)
# Disable -Wsuggest-final-types via pragmas where due.
add_definitions(-D__WARN_SUGGEST_FINAL_TYPES__)
endif ()
if (CXX_WARN_SUGGEST_FINAL_METHODS)
# Disable -Wsuggest-final-methods via pragmas where due.
add_definitions(-D__WARN_SUGGEST_FINAL_METHODS__)
endif ()
if (MINGW)
add_definitions(-fstack-protector-strong)
endif ()
# Include sub-projects
include("${ROOT_DIR}/src/openrct2/CMakeLists.txt" NO_POLICY_SCOPE)
include("${ROOT_DIR}/src/openrct2-cli/CMakeLists.txt" NO_POLICY_SCOPE)
if(NOT DISABLE_GUI)
include("${ROOT_DIR}/src/openrct2-ui/CMakeLists.txt" NO_POLICY_SCOPE)
endif()
# Defines
if (USE_MMAP)
target_compile_options(libopenrct2 PUBLIC -DUSE_MMAP)
endif ()
if (DISABLE_NETWORK)
target_compile_options(libopenrct2 PUBLIC -DDISABLE_NETWORK)
endif ()
if (DISABLE_HTTP)
target_compile_options(libopenrct2 PUBLIC -DDISABLE_HTTP)
endif ()
if (DISABLE_TTF)
target_compile_options(libopenrct2 PUBLIC -DNO_TTF)
endif ()
if (ENABLE_SCRIPTING)
target_compile_options(libopenrct2 PUBLIC -DENABLE_SCRIPTING)
endif ()
# g2
if (NOT (MACOS_BUNDLE AND (NOT CMAKE_OSX_ARCHITECTURES MATCHES "${SYSTEM_MACOS_ARCH}")))
add_custom_command(
OUTPUT g2.dat
COMMAND ./openrct2-cli sprite build ${CMAKE_BINARY_DIR}/g2.dat ${ROOT_DIR}/resources/g2/sprites.json
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_target(g2 DEPENDS ${PROJECT_NAME} g2.dat)
else ()
message("Skipping g2.dat generation in macOS cross-compile")
endif ()
# Include tests
if (WITH_TESTS)
enable_testing()
add_subdirectory("test/tests")
endif ()
# macOS bundle "install" is handled in src/openrct2-ui/CMakeLists.txt
# This is because the openrct2 target is modified (and that is where that target is defined)
if (NOT MACOS_BUNDLE OR (MACOS_BUNDLE AND WITH_TESTS))
# Install
# Don't recurse, grab all *.txt and *.md files
add_definitions(-DDOCDIR="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}")
file(GLOB DOC_FILES "${ROOT_DIR}/distribution/*.txt")
list(APPEND DOC_FILES "${ROOT_DIR}/contributors.md"
"${ROOT_DIR}/licence.txt"
"${ROOT_DIR}/distribution/scripting.md"
"${ROOT_DIR}/distribution/openrct2.d.ts")
# CMake does not allow specifying a dependency chain which includes built-in
# targets, like `install`, so we have to trick it and execute dependency ourselves.
install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target g2)")
if (DOWNLOAD_TITLE_SEQUENCES)
# Checks if this version of the title sequences are already installed, updates if necessary
# if /data/sequence exists, it will overwrite this anyways (see `install(DIRECTORY "data/" ...)` below)
# therefore, the existence of that directory will skip this download
install(CODE "
include(${ROOT_DIR}/cmake/download.cmake)
download_openrct2_zip(
ZIP_VERSION ${TITLE_SEQUENCE_VERSION}
DOWNLOAD_DIR \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/sequence/
SKIP_IF_EXISTS ${CMAKE_SOURCE_DIR}/data/sequence/
ZIP_URL ${TITLE_SEQUENCE_URL}
SHA1 ${TITLE_SEQUENCE_SHA1}
)")
endif ()
if (DOWNLOAD_OBJECTS)
# Checks if this version of the objects are already installed, updates if necessary
# if /data/object exists, it will overwrite this anyways (see `install(DIRECTORY "data/" ...)` below)
# therefore, the existence of that directory will skip this download
install(CODE "
include(${ROOT_DIR}/cmake/download.cmake)
download_openrct2_zip(
ZIP_VERSION ${OBJECTS_VERSION}
DOWNLOAD_DIR \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/object/
SKIP_IF_EXISTS ${CMAKE_SOURCE_DIR}/data/object/
ZIP_URL ${OBJECTS_URL}
SHA1 ${OBJECTS_SHA1}
)")
endif ()
if (DOWNLOAD_OPENSFX)
install(CODE "
include(${ROOT_DIR}/cmake/download.cmake)
download_openrct2_zip(
ZIP_VERSION ${OPENSFX_VERSION}
SKIP_IF_EXISTS ${CMAKE_SOURCE_DIR}/data/assetpack/openrct2.sound.parkap
DOWNLOAD_DIR \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/
ZIP_URL ${OPENSFX_URL}
SHA1 ${OPENSFX_SHA1}
)")
endif ()
if (DOWNLOAD_OPENMSX)
install(CODE "
include(${ROOT_DIR}/cmake/download.cmake)
download_openrct2_zip(
ZIP_VERSION ${OPENMSX_VERSION}
SKIP_IF_EXISTS ${CMAKE_SOURCE_DIR}/data/assetpack/openrct2.music.alternative.parkap
DOWNLOAD_DIR \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/
ZIP_URL ${OPENMSX_URL}
SHA1 ${OPENMSX_SHA1}
)")
endif ()
if (DOWNLOAD_REPLAYS)
# Checks if this version of the replays are already installed, updates if necessary
install(CODE "
include(${ROOT_DIR}/cmake/download.cmake)
download_openrct2_zip(
ZIP_VERSION ${REPLAYS_VERSION}
DOWNLOAD_DIR \${CMAKE_CURRENT_BINARY_DIR}/testdata/replays/
ZIP_URL ${REPLAYS_URL}
SHA1 ${REPLAYS_SHA1}
)")
endif ()
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/g2.dat" DESTINATION "${CMAKE_INSTALL_DATADIR}/openrct2")
install(DIRECTORY "data/" DESTINATION "${CMAKE_INSTALL_DATADIR}/openrct2")
# even when building WITH_TESTS, none of the below install steps are required for OpenRCT2.app
if (NOT MACOS_BUNDLE)
install(TARGETS "libopenrct2" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
if(NOT DISABLE_GUI)
install(TARGETS "openrct2" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
install(TARGETS "openrct2-cli" OPTIONAL RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(FILES ${DOC_FILES} DESTINATION "${CMAKE_INSTALL_DOCDIR}")
install(FILES "distribution/linux/openrct2.appdata.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo")
if (NOT DISABLE_GUI)
install(FILES "resources/logo/icon_x16.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/16x16/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x24.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/24x24/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x32.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/32x32/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x48.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x64.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/64x64/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x96.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/96x96/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x128.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x256.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_flag.svg" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps" RENAME "openrct2.svg")
install(FILES "distribution/linux/openrct2.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
install(FILES "distribution/linux/openrct2-savegame.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
install(FILES "distribution/linux/openrct2-scenario.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
install(FILES "distribution/linux/openrct2-uri.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
endif()
install(FILES "distribution/linux/openrct2-mimeinfo.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/mime/packages/" RENAME "openrct2.xml")
install(DIRECTORY "distribution/man/" DESTINATION "${CMAKE_INSTALL_MANDIR}/man6" FILES_MATCHING PATTERN "*.6")
if (MACOS_USE_DEPENDENCIES)
# Note: dependencies may have the same names as system installed libraries
# (via homebrew). A local CMAKE_INSTALL_PREFIX is recommended to avoid issues
file(GLOB DYLIB_FILES "${MACOS_DYLIBS_DIR}/lib/*.dylib")
install(FILES ${DYLIB_FILES} DESTINATION "${CMAKE_INSTALL_LIBDIR}")
endif()
endif()
endif()

View File

@ -1,28 +0,0 @@
SET(CMAKE_SYSTEM_NAME Windows)
SET(COMPILER_PREFIX i686-w64-mingw32-)
SET(CMAKE_C_COMPILER ${COMPILER_PREFIX}gcc)
SET(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}c++)
SET(CMAKE_RC_COMPILER ${COMPILER_PREFIX}windres)
SET(CMAKE_PKGCONFIG_EXECUTABLE ${COMPILER_PREFIX}pkg-config)
SET(PKG_CONFIG_EXECUTABLE ${COMPILER_PREFIX}pkg-config)
SET(CMAKE_SYSTEM_PROCESSOR x86)
if(APPLE)
SET(TARGET_ENVIRONMENT /usr/local/mingw-w32-bin_i686-darwin/i686-w64-mingw32)
else()
SET(TARGET_ENVIRONMENT /usr/i686-w64-mingw32)
endif(APPLE)
# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH ${TARGET_ENVIRONMENT})
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# Enable Unicode
add_compile_options(-municode)

View File

@ -1,22 +0,0 @@
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": "",
"variables": [
{
"name": "VCPKG_TARGET_TRIPLET",
"value": "x64-windows-static",
"type": "STRING"
}
]
}
]
}

View File

@ -1,133 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
For our community guidelines please refer to [CommunityGuidelines.md](CommunityGuidelines.md).
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement via direct message on Discord.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

View File

@ -1,49 +0,0 @@
# Contributing to OpenRCT2
Any contribution to OpenRCT2 is welcome and valued. Contributions can be in the form of bug reports, translation or code
additions / changes. Please read this document to learn how to contribute as effectively as possible. If you have any
questions or concerns, please ask in the [Discord chat](https://discordapp.com/invite/fsEwSWs).
# Reporting bugs
To report a bug, ensure you have a GitHub account. Search the issues page to see if the bug has already been reported.
If not, create a new issue and write the steps to reproduce. Upload a saved game if possible as this is very helpful
for users to replicate the bug. Please state which architecture and version of the game you are running, e.g.
```
OpenRCT2, v0.0.6-develop build 84ddd12 provided by AppVeyor
Windows (x86-64)
```
This can be found either at the bottom left of the title screen or
by running:
```
openrct2 --version
```
For Windows builds, OpenRCT2 will generate a memory dump and saved game when the game crashes unexpectedly. The game
will open explorer to these files automatically for you. They are placed inside your configured user directory which
by default is `%HOMEPATH%\Documents\OpenRCT2`.
# Translation
Translation is managed in a separate repository, [OpenRCT2/Localisation](https://github.com/OpenRCT2/Localisation).
You will find more information there.
# Contributing code
Please read [How To Contribute](https://github.com/OpenRCT2/OpenRCT2/wiki/How-To-Contribute)
## Code hints
### Adding new strings
If you need to add a new localisable string to OpenRCT2, please add your new string entry to ```./data/language/en-GB.txt```.
It is important that you only edit en-GB in the OpenRCT2 repository as this is the base language that is used for
translation to other languages. A separate repository OpenRCT2/Localisation is used for translation pull requests, and changes
to that repository are merged with the OpenRCT2 main repository every night. When your pull request is merged, it is helpful
to create a new issue in the OpenRCT2/Localisation repository about the new strings you have added. This notifies translators
so that they can translate the new strings as quick as possible. Similarly if you change any existing string, it is more
important that you create an issue as this can be more easily overlooked.
When coding, please also add a string constant for your strings to ```./src/localisation/StringIds.h```.
### Coding style
Use [this](https://github.com/OpenRCT2/OpenRCT2/wiki/Coding-Style) code style as a reference for new or changed code.
### Language
For now, it is recommended that you only write C++ files as the majority of the game is currently in
C++. Exceptions are to modules that have direct relationship to original code.

View File

@ -1,63 +0,0 @@
# Community Guidelines
## Community rules
- Please be respectful to other members. Avoid any racist, sexist, homophobic, excessively political, or otherwise distasteful discussions.
- While some cursing is appropriate in context, refrain from using excessive profanity.
- Keep conversations in the appropriate channel. Some off-topic discussions are to be expected, but try not to blatantly post non-subject-related content.
- No not safe for work (NSFW) material is allowed. Breaking this rule will be met with an immediate ban.
- Keep spam to a minimum:
- Do not repeatedly send the same message.
- Do not post links to sites/content others would find unacceptable.
- Advertising or promotion of piracy is forbidden.
- Staff members (`@Developer` on Discord) have the final say about what is and is not acceptable within the community. Refusals to listen to staff may result in being kicked or banned.
- HAVE FUN and enjoy all that the community has to offer.
To read our Code of Conduct please refer to [Code of Conduct](CODE_OF_CONDUCT.md).
## Team rules
On top of the community rules, the development and moderation team has to keep themselves to a specific set of rules.
### Behavioural rules
- Keep cool to any community member, even if they can be very frustrating to deal with: Do not retaliate, say nothing if you cannot keep it polite.
- Stand up for one another and take responsibility for each others mistakes.
- Any team member can request a time-out in team chat, which will suspend any talking in team chat for 30 minutes.
- Respect the time out, do not contact each other in DM during this period.
- We work with a 3 strike system, if you hit strike 3 you will lose your role.
### Rules regarding PRs
- Any contributor PR requires at least two code reviews, either by developers or trusted community members (at least one developer).
- Any developer PR requires at least one code review, by another developer.
- Any PR requires one playtest review, if applicable.
### Guidelines regarding public relations and community management
With an online presence we require maintaining a good public image. For this we have specific guidelines, so each party can take responsibility where necessary.
- Any message* for support or public relations requires a signature**.
- When sending emails, finish the letter with: Your regards, your name and the OpenRCT2 Team.
- Please keep a professional tone when communicating for support and public relations purposes.
*Discord messages are already signed.
**For the identity associated with each signature refer to the paragraph "Team signatures"
#### Team Signatures
When finding a message on our social media the following signatures refer to the following members:
| Name | Signature |
| ---- | --------- |
| Ted (IntelOrca) | ~/i |
| Duncan (duncanpumpkin) | ~/d |
| Michał (janisozaur) | ~/j |
| Hielke (Broxzier) | ~/b |
| Tulio (tupaschoal) | ~/t |
| Olivier (Oli414) | ~/o |
| Matthias (ZehMatt) | ~/z |
| Karst (AuraSpecs) | ~/a |
| Michael (mrmbernardi) | ~/m |
| Michael (Gymnasiast) | ~/g |

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

View File

@ -1,23 +0,0 @@
# To find CCache compiler cache
include(FindPackageHandleStandardArgs)
find_program(CCache_EXECUTABLE ccache)
if (CCache_EXECUTABLE)
execute_process(COMMAND "${CCache_EXECUTABLE}" --version
OUTPUT_VARIABLE CCache_VERSION_OUTPUT
)
if (CCache_VERSION_OUTPUT MATCHES "version ([0-9]+\\.[0-9]+\\.[0-9]+)")
set(CCache_VERSION "${CMAKE_MATCH_1}")
endif ()
endif (CCache_EXECUTABLE)
find_package_handle_standard_args(CCache
FOUND_VAR CCache_FOUND
REQUIRED_VARS CCache_EXECUTABLE
VERSION_VAR CCache_VERSION
)
mark_as_advanced(CCache_EXECUTABLE)

View File

@ -1,25 +0,0 @@
include(LibFindMacros)
libfind_pkg_check_modules(DISCORDRPC_PKGCONF DISCORDRPC)
find_path(DISCORDRPC_INCLUDE_DIR
NAMES discord_rpc.h
PATHS
${DISCORDRPC_PKGCONF_INCLUDE_DIRS}
"/usr/include"
"/usr/local/include"
)
find_library(DISCORDRPC_LIBRARY
NAMES discord-rpc
PATHS
${DISCORDRPC_PKGCONF_LIBRARY_DIRS}
"/usr/lib"
"/usr/lib64"
"/usr/local/lib"
"/usr/local/lib64"
)
set(DISCORDRPC_PROCESS_INCLUDES DISCORDRPC_INCLUDE_DIR)
set(DISCORDRPC_PROCESS_LIBS DISCORDRPC_LIBRARY)
libfind_process(DISCORDRPC)

View File

@ -1,265 +0,0 @@
# Version 2.2
# Public Domain, originally written by Lasse Kärkkäinen <tronic>
# Maintained at https://github.com/Tronic/cmake-modules
# Please send your improvements as pull requests on Github.
# Find another package and make it a dependency of the current package.
# This also automatically forwards the "REQUIRED" argument.
# Usage: libfind_package(<prefix> <another package> [extra args to find_package])
macro (libfind_package PREFIX PKG)
set(${PREFIX}_args ${PKG} ${ARGN})
if (${PREFIX}_FIND_REQUIRED)
set(${PREFIX}_args ${${PREFIX}_args} REQUIRED)
endif()
find_package(${${PREFIX}_args})
set(${PREFIX}_DEPENDENCIES ${${PREFIX}_DEPENDENCIES};${PKG})
unset(${PREFIX}_args)
endmacro()
# A simple wrapper to make pkg-config searches a bit easier.
# Works the same as CMake's internal pkg_check_modules but is always quiet.
macro (libfind_pkg_check_modules)
find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
pkg_check_modules(${ARGN} QUIET)
endif()
endmacro()
# Avoid useless copy&pasta by doing what most simple libraries do anyway:
# pkg-config, find headers, find library.
# Usage: libfind_pkg_detect(<prefix> <pkg-config args> FIND_PATH <name> [other args] FIND_LIBRARY <name> [other args])
# E.g. libfind_pkg_detect(SDL2 sdl2 FIND_PATH SDL.h PATH_SUFFIXES SDL2 FIND_LIBRARY SDL2)
function (libfind_pkg_detect PREFIX)
# Parse arguments
set(argname pkgargs)
foreach (i ${ARGN})
if ("${i}" STREQUAL "FIND_PATH")
set(argname pathargs)
elseif ("${i}" STREQUAL "FIND_LIBRARY")
set(argname libraryargs)
else()
set(${argname} ${${argname}} ${i})
endif()
endforeach()
if (NOT pkgargs)
message(FATAL_ERROR "libfind_pkg_detect requires at least a pkg_config package name to be passed.")
endif()
# Find library
libfind_pkg_check_modules(${PREFIX}_PKGCONF ${pkgargs})
if (pathargs)
find_path(${PREFIX}_INCLUDE_DIR NAMES ${pathargs} HINTS ${${PREFIX}_PKGCONF_INCLUDE_DIRS})
endif()
if (libraryargs)
find_library(${PREFIX}_LIBRARY NAMES ${libraryargs} HINTS ${${PREFIX}_PKGCONF_LIBRARY_DIRS})
endif()
endfunction()
# Extracts a version #define from a version.h file, output stored to <PREFIX>_VERSION.
# Usage: libfind_version_header(Foobar foobar/version.h FOOBAR_VERSION_STR)
# Fourth argument "QUIET" may be used for silently testing different define names.
# This function does nothing if the version variable is already defined.
function (libfind_version_header PREFIX VERSION_H DEFINE_NAME)
# Skip processing if we already have a version or if the include dir was not found
if (${PREFIX}_VERSION OR NOT ${PREFIX}_INCLUDE_DIR)
return()
endif()
set(quiet ${${PREFIX}_FIND_QUIETLY})
# Process optional arguments
foreach(arg ${ARGN})
if (arg STREQUAL "QUIET")
set(quiet TRUE)
else()
message(AUTHOR_WARNING "Unknown argument ${arg} to libfind_version_header ignored.")
endif()
endforeach()
# Read the header and parse for version number
set(filename "${${PREFIX}_INCLUDE_DIR}/${VERSION_H}")
if (NOT EXISTS ${filename})
if (NOT quiet)
message(AUTHOR_WARNING "Unable to find ${${PREFIX}_INCLUDE_DIR}/${VERSION_H}")
endif()
return()
endif()
file(READ "${filename}" header)
string(REGEX REPLACE ".*#[ \t]*define[ \t]*${DEFINE_NAME}[ \t]*\"([^\n]*)\".*" "\\1" match "${header}")
# No regex match?
if (match STREQUAL header)
if (NOT quiet)
message(AUTHOR_WARNING "Unable to find \#define ${DEFINE_NAME} \"<version>\" from ${${PREFIX}_INCLUDE_DIR}/${VERSION_H}")
endif()
return()
endif()
# Export the version string
set(${PREFIX}_VERSION "${match}" PARENT_SCOPE)
endfunction()
# Do the final processing once the paths have been detected.
# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain
# all the variables, each of which contain one include directory.
# Ditto for ${PREFIX}_PROCESS_LIBS and library files.
# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES.
# Also handles errors in case library detection was required, etc.
function (libfind_process PREFIX)
# Skip processing if already processed during this configuration run
if (${PREFIX}_FOUND)
return()
endif()
set(found TRUE) # Start with the assumption that the package was found
# Did we find any files? Did we miss includes? These are for formatting better error messages.
set(some_files FALSE)
set(missing_headers FALSE)
# Shorthands for some variables that we need often
set(quiet ${${PREFIX}_FIND_QUIETLY})
set(required ${${PREFIX}_FIND_REQUIRED})
set(exactver ${${PREFIX}_FIND_VERSION_EXACT})
set(findver "${${PREFIX}_FIND_VERSION}")
set(version "${${PREFIX}_VERSION}")
# Lists of config option names (all, includes, libs)
unset(configopts)
set(includeopts ${${PREFIX}_PROCESS_INCLUDES})
set(libraryopts ${${PREFIX}_PROCESS_LIBS})
# Process deps to add to
foreach (i ${PREFIX} ${${PREFIX}_DEPENDENCIES})
if (DEFINED ${i}_INCLUDE_OPTS OR DEFINED ${i}_LIBRARY_OPTS)
# The package seems to export option lists that we can use, woohoo!
list(APPEND includeopts ${${i}_INCLUDE_OPTS})
list(APPEND libraryopts ${${i}_LIBRARY_OPTS})
else()
# If plural forms don't exist or they equal singular forms
if ((NOT DEFINED ${i}_INCLUDE_DIRS AND NOT DEFINED ${i}_LIBRARIES) OR
({i}_INCLUDE_DIR STREQUAL ${i}_INCLUDE_DIRS AND ${i}_LIBRARY STREQUAL ${i}_LIBRARIES))
# Singular forms can be used
if (DEFINED ${i}_INCLUDE_DIR)
list(APPEND includeopts ${i}_INCLUDE_DIR)
endif()
if (DEFINED ${i}_LIBRARY)
list(APPEND libraryopts ${i}_LIBRARY)
endif()
else()
# Oh no, we don't know the option names
message(FATAL_ERROR "We couldn't determine config variable names for ${i} includes and libs. Aieeh!")
endif()
endif()
endforeach()
if (includeopts)
list(REMOVE_DUPLICATES includeopts)
endif()
if (libraryopts)
list(REMOVE_DUPLICATES libraryopts)
endif()
string(REGEX REPLACE ".*[ ;]([^ ;]*(_INCLUDE_DIRS|_LIBRARIES))" "\\1" tmp "${includeopts} ${libraryopts}")
if (NOT tmp STREQUAL "${includeopts} ${libraryopts}")
message(AUTHOR_WARNING "Plural form ${tmp} found in config options of ${PREFIX}. This works as before but is now deprecated. Please only use singular forms INCLUDE_DIR and LIBRARY, and update your find scripts for LibFindMacros > 2.0 automatic dependency system (most often you can simply remove the PROCESS variables entirely).")
endif()
# Include/library names separated by spaces (notice: not CMake lists)
unset(includes)
unset(libs)
# Process all includes and set found false if any are missing
foreach (i ${includeopts})
list(APPEND configopts ${i})
if (NOT "${${i}}" STREQUAL "${i}-NOTFOUND")
list(APPEND includes "${${i}}")
else()
set(found FALSE)
set(missing_headers TRUE)
endif()
endforeach()
# Process all libraries and set found false if any are missing
foreach (i ${libraryopts})
list(APPEND configopts ${i})
if (NOT "${${i}}" STREQUAL "${i}-NOTFOUND")
list(APPEND libs "${${i}}")
else()
set (found FALSE)
endif()
endforeach()
# Version checks
if (found AND findver)
if (NOT version)
message(WARNING "The find module for ${PREFIX} does not provide version information, so we'll just assume that it is OK. Please fix the module or remove package version requirements to get rid of this warning.")
elseif (version VERSION_LESS findver OR (exactver AND NOT version VERSION_EQUAL findver))
set(found FALSE)
set(version_unsuitable TRUE)
endif()
endif()
# If all-OK, hide all config options, export variables, print status and exit
if (found)
foreach (i ${configopts})
mark_as_advanced(${i})
endforeach()
if (NOT quiet)
message(STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}")
if (LIBFIND_DEBUG)
message(STATUS " ${PREFIX}_DEPENDENCIES=${${PREFIX}_DEPENDENCIES}")
message(STATUS " ${PREFIX}_INCLUDE_OPTS=${includeopts}")
message(STATUS " ${PREFIX}_INCLUDE_DIRS=${includes}")
message(STATUS " ${PREFIX}_LIBRARY_OPTS=${libraryopts}")
message(STATUS " ${PREFIX}_LIBRARIES=${libs}")
endif()
set (${PREFIX}_INCLUDE_OPTS ${includeopts} PARENT_SCOPE)
set (${PREFIX}_LIBRARY_OPTS ${libraryopts} PARENT_SCOPE)
set (${PREFIX}_INCLUDE_DIRS ${includes} PARENT_SCOPE)
set (${PREFIX}_LIBRARIES ${libs} PARENT_SCOPE)
set (${PREFIX}_FOUND TRUE PARENT_SCOPE)
endif()
return()
endif()
# Format messages for debug info and the type of error
set(vars "Relevant CMake configuration variables:\n")
foreach (i ${configopts})
mark_as_advanced(CLEAR ${i})
set(val ${${i}})
if ("${val}" STREQUAL "${i}-NOTFOUND")
set (val "<not found>")
elseif (val AND NOT EXISTS ${val})
set (val "${val} (does not exist)")
else()
set(some_files TRUE)
endif()
set(vars "${vars} ${i}=${val}\n")
endforeach()
set(vars "${vars}You may use CMake GUI, cmake -D or ccmake to modify the values. Delete CMakeCache.txt to discard all values and force full re-detection if necessary.\n")
if (version_unsuitable)
set(msg "${PREFIX} ${${PREFIX}_VERSION} was found but")
if (exactver)
set(msg "${msg} only version ${findver} is acceptable.")
else()
set(msg "${msg} version ${findver} is the minimum requirement.")
endif()
else()
if (missing_headers)
set(msg "We could not find development headers for ${PREFIX}. Do you have the necessary dev package installed?")
elseif (some_files)
set(msg "We only found some files of ${PREFIX}, not all of them. Perhaps your installation is incomplete or maybe we just didn't look in the right place?")
if(findver)
set(msg "${msg} This could also be caused by incompatible version (if it helps, at least ${PREFIX} ${findver} should work).")
endif()
else()
set(msg "We were unable to find package ${PREFIX}.")
endif()
endif()
# Fatal error out if REQUIRED
if (required)
set(msg "REQUIRED PACKAGE NOT FOUND\n${msg} This package is REQUIRED and you need to install it or adjust CMake configuration in order to continue building ${CMAKE_PROJECT_NAME}.")
message(FATAL_ERROR "${msg}\n${vars}")
endif()
# Otherwise just print a nasty warning
if (NOT quiet)
message(WARNING "WARNING: MISSING PACKAGE\n${msg} This package is NOT REQUIRED and you may ignore this warning but by doing so you may miss some functionality of ${CMAKE_PROJECT_NAME}. \n${vars}")
endif()
endfunction()

View File

@ -1,34 +0,0 @@
# This file is modified from duktapeConfig.cmake
# - Try to find discordrpc
# Once done this will define
#
# DISCORDRPC_FOUND - system has discordrpc
# DISCORDRPC_INCLUDE_DIRS - the discordrpc include directory
# DISCORDRPC_LIBRARIES - Link these to use discordrpc
# DISCORDRPC_DEFINITIONS - Compiler switches required for using discordrpc
#
PKG_CHECK_MODULES(PC_DISCORD_RPC QUIET discord-rpc libdiscord-rpc)
find_path(DISCORDRPC_INCLUDE_DIR discord_rpc.h
HINTS ${PC_DISCORD_RPC_INCLUDEDIR} ${PC_DISCORD_RPC_INCLUDE_DIRS}
PATH_SUFFIXES discord-rpc)
find_library(DISCORDRPC_LIBRARY
NAMES discord-rpc libdiscord-rpc
HINTS ${PC_DISCORD_RPC_LIBDIR} ${PC_DISCORD_RPC_LIBRARY_DIRS})
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(discordrpc
REQUIRED_VARS DISCORDRPC_LIBRARY DISCORDRPC_INCLUDE_DIR)
if (DISCORDRPC_FOUND)
set (DISCORDRPC_LIBRARIES ${DISCORDRPC_LIBRARY})
set (DISCORDRPC_INCLUDE_DIRS ${DISCORDRPC_INCLUDE_DIR} )
endif ()
MARK_AS_ADVANCED(
DISCORDRPC_INCLUDE_DIR
DISCORDRPC_LIBRARY
)

View File

@ -1,51 +0,0 @@
function(download_openrct2_zip)
set(oneValueArgs ZIP_VERSION DOWNLOAD_DIR ZIP_URL SHA1)
set(multiValueArgs SKIP_IF_EXISTS)
cmake_parse_arguments(DOWNLOAD_OPENRCT2 "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN} )
get_filename_component(ZIP_FILE_NAME ${DOWNLOAD_OPENRCT2_ZIP_URL} NAME)
if (NOT EXISTS ${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR})
set(DOWNLOAD_ZIP 1)
else ()
if (EXISTS "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}.zipversion")
file(READ "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}.zipversion" DOWNLOAD_OPENRCT2_CACHED_VERSION)
if (NOT ${DOWNLOAD_OPENRCT2_CACHED_VERSION} STREQUAL ${DOWNLOAD_OPENRCT2_ZIP_VERSION})
message("Cache ${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR} not up to date")
set(DOWNLOAD_ZIP 1)
endif ()
else ()
set(DOWNLOAD_ZIP 1)
endif ()
endif ()
foreach(check_exist_file_or_dir ${DOWNLOAD_OPENRCT2_SKIP_IF_EXISTS})
if (EXISTS ${check_exist_file_or_dir})
message("${check_exist_file_or_dir} exists, skipping download")
set(DOWNLOAD_ZIP 0)
break()
endif ()
endforeach(check_exist_file_or_dir)
if (DOWNLOAD_ZIP)
message("Downloading ${DOWNLOAD_OPENRCT2_ZIP_URL} to ${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}")
file(DOWNLOAD
"${DOWNLOAD_OPENRCT2_ZIP_URL}" "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}"
EXPECTED_HASH SHA1=${DOWNLOAD_OPENRCT2_SHA1} SHOW_PROGRESS)
if(${CMAKE_VERSION} VERSION_LESS "3.18.0")
execute_process(COMMAND ${CMAKE_COMMAND} -E chdir ${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR} ${CMAKE_COMMAND} -E tar xf ${ZIP_FILE_NAME})
else()
file(ARCHIVE_EXTRACT
INPUT "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}"
DESTINATION "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}"
)
endif()
file(WRITE
"${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}.zipversion"
"${DOWNLOAD_OPENRCT2_ZIP_VERSION}"
)
file(REMOVE "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}")
endif ()
endfunction ()

View File

@ -1,34 +0,0 @@
# Helpers for inter-procedural optimizations (IPO)
option(DISABLE_IPO "Disable IPO in supported release builds." OFF)
# Enabled IPO for a LIST of CMake build types.
# Provides IPO_BUILD_ENABLED to the parent scope.
# Make sure to supply the build types in UPPER CASE
function(ipo_enable IPO_ENABLED_BUILDS)
include(CheckIPOSupported)
check_ipo_supported(RESULT IPO_SUPPORTED OUTPUT IPO_LOG)
set(IPO_BUILD_ENABLED OFF PARENT_SCOPE)
string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER)
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "CMAKE_BUILD_TYPE not explicitly set. Not enabling IPO.")
elseif(IPO_SUPPORTED AND ${CMAKE_BUILD_TYPE_UPPER} IN_LIST IPO_ENABLED_BUILDS)
if(NOT DISABLE_IPO)
message(STATUS "IPO supported and enabled in ${CMAKE_BUILD_TYPE}.")
set(IPO_BUILD_ENABLED ON PARENT_SCOPE)
else()
message(STATUS "IPO explicitly disabled.")
endif()
elseif(NOT IPO_SUPPORTED AND ${CMAKE_BUILD_TYPE_UPPER} IN_LIST IPO_ENABLED_BUILDS)
message(STATUS "IPO not supported: ${IPO_LOG}.")
endif()
endfunction()
# Sets appropriate IPO properties on target _target
# if IPO is supported and enabled for the current build.
function(ipo_set_target_properties _target)
if(IPO_BUILD_ENABLED)
set_property(TARGET ${_target} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
endfunction()

View File

@ -1,11 +0,0 @@
# Helpers for linking platform specific libraries
function(target_link_platform_libraries target)
if (APPLE)
target_link_libraries(${target} "-framework Cocoa -framework CoreServices")
elseif(WIN32)
target_link_libraries(${target} gdi32)
endif ()
endfunction()

View File

@ -1,326 +0,0 @@
# Contributors to OpenRCT2
Includes all git commit authors. Aliases are GitHub usernames or community nicknames.
## Development team
* Ted John (IntelOrca) - Project Founder - Programming
* Duncan Frost (duncanspumpkin) - Programming
* Michał Janiszewski (janisozaur) - Programming
* Hielke Morsink (Broxzier) - Programming
* Tulio Paschoalin Leao (tupaschoal) - Programming
* Olivier Wervers (Oli414) - Lead OpenGraphics - Programming
* Matthias Moninger (ZehMatt) - Programming
* Karst van Galen Last (AuraSpecs) - Lead OpenSoundEffects & OpenMusic
* Michael Bernardi (mrmbernardi) - Programming
* Michael Steenbeek (Gymnasiast) - Lead Localisation - Programming
## Support team
* Kenton Boadway (Krutonium) - Lead OpenScenarios
## Former development team members
* Lewis Fox (LRFLEW)
* Marijn van der Werf (marijnvdwerf)
* (zsilencer)
* Richard Jenkins (rwjuk)
* Aaron van Geffen (AaronVanGeffen)
* Rik Smeets (rik-smeets)
## Long term contributors
Appreciation for long term contributors to the project having provided substantial work.
* Edward Calver (X7123M3-256)
* Kelson Blakewood (spacek531)
* (frutiemax)
## Special Thanks
Appreciation for contributors who have provided substantial work, but are no longer active.
* Joe Minor Jr (wolfreak99)
* Matte Andersson (Nubbie)
## Implementation (RCT2)
* Ted John (IntelOrca)
* Duncan Frost (duncanspumpkin)
* Peter Hill (ZedThree) - String handling, misc.
* (qcz) - Scenery window, misc.
* Matthias Lanzinger (lnz) - Climate, finance, scenario, ride reachability
* (zsilencer) - Audio, multiplayer, misc.
* (DutchRPW) - peep_update_days_in_queue, misc. money-related functions
* Adrian Wielgosik (adrian17) - Ride window, top toolbar, map window, misc.
* (hexdec) - Music credits window, staff window, misc.
* Dennis Devriendt (ddevrien) - Banner window, map window, options window
* Maciek Baron (MaciekBaron) - Peep enums, item flags, misc.
* (Hual) - Minimap window resizing; address identification; sub_6C0C3F.
* (AngeloG) - Scrollbar input, misc.
* (jcdavis) - Misc.
* (marcotc) - Rain drawing, misc.
* (vanderkleij) - create_sprite, move_sprite_to_list
* Ben Pye (benpye) - Logo rendering on title screen
* (JeroenSack) - widget_scroll_get_part, misc.
* Sijmen Schoon (SijmenSchoon) - redraw_peep_and_rain, misc bugfixes.
* Lewis Fox (LRFLEW) - sub_69A997, OpenGL support, macOS
* Marijn van der Werf (marijnvdwerf) - Peep functions, drawing and paint code
* Nicolas Espinosa Mooser (Nicolas-EM) - staff window refactor
## Additional implementation (OpenRCT2)
* (atmaxinger) - User configuration
* (anyc) - Housecleaning, cross-platform fixes
* Michael Steenbeek (Gymnasiast) - Cheats, RCT1 ride style, misc.
* Miso Zmiric (mzmiric5) - Old Twitch integration, misc.
* Inseok Lee (dlunch) - Load save files from command line
* Jørn Lomax (jvlomax) - Configuration parser
* Alexander Overvoorde (Overv) - OpenGL improvements, Steam overlay detection, various bugfixes.
* (eezstreet) - Add finances button to toolbar, various bugfixes.
* Hielke Morsink (Broxzier) - Tile inspector, heightmap loader, misc.
* Joe Minor Jr (wolfreak99) - Various cheats, bugfixes, new About and Changelog windows.
* Thomas den Hollander (ThomasdenH) - Dithering in sprite importer, invert viewport dragging, park rating cheats misc.
* James Robertson (rd3k) - Initial tile inspector, misc changes.
* Robert Jordan (trigger-death) - UI theming, title sequence editor, misc.
* Aaron van Geffen (AaronVanGeffen) - scenario select screen, font detection, misc.
* Michał Janiszewski (janisozaur) - Linux port, crash handling, security, misc.
* Kelson Blakewood (spacek531) - title sequences, title sequence features, vehicle features
* Hugo Wallenburg (Goddesen) - Misc.
* Edward Calver (X7123M3-256) - New Hybrid Coaster track, extended sprite toolchain, more vehicle cheats, misc.
* Matte Andersson (Nubbie) - Misc, UX
* Daniel Trujillo Viedma (gDanix) - Custom currency.
* (zaxcav) - Improvements to original pathfinding algorithm.
* Jeroen D. Stout (JeroenDStout) - Light effects, train crossings, virtual floor.
* Matthias Moninger (ZehMatt) - Game actions, multiplayer synchronisation, misc.
* Joël Troch (JoelTroch) - Keyboard shortcuts for ride construction.
* Thomas Delebo (delebota) - Server descriptions and greetings.
* Richard Jenkins (rwjuk) - Path issues overlay, console improvements, bug fixes
* Brian Callahan (ibara) - OpenBSD port.
* Jens Heuseveldt (jensj12) - Mountain tool improvements, misc.
* Park Joon-Kyu (segfault87) - Allow filtering guests by name
* Harrison Gentry (hgentry) - Date-changing command, misc.
* Joshua Moerman (Jaxan) - Minimap cleanup, misc.
* Nicolas Hawrysh (xp4xbox) - Various (ride) sprite improvements.
* Albert Morgese (Fusxfaranto) - Shop auto-rotation, unicode uppercasing.
* Olivier Wervers (oli414) - Remove unused objects command, various bugfixes
* Christian Schubert (Osmodium) - Ensuring custom user content folders, incl. open folder.
* (Xkeeper0) - Improved banner tooltips; multiplayer status in toolbar.
* Kevin Strehl (bitman2049) - Tile inspector keybindings
* Anton Scharnowski (scrapes) - Added Scenery Scatter Options Window.
* Chad Ian Anderson (pizza2004) - Added New Game option, bug fixes, misc.
* Peter Ryszkiewicz (pRizz) - Added horizontal grid lines to finance charts.
* Hudson Oliveira (hdpoliveira) - Misc.
* Jim Verheijde (Jimver) - Make handymen less likely to get stuck in queue lines, misc.
* Helio Batimarqui (batimarqui) - Misc.
* Keith Stellyes (keithstellyes) - Misc.
* Bas Cantrijn (Basssiiie) - Various plugin additions, misc.
* Adrian Zdanowicz (CookiePLMonster) - Misc.
* Andrew Pratt (andrewpratt64) - Added api hook for vehicle crashes, api function to get entities on a tile
* Karst van Galen Last (AuraSpecs) - Ride paint (bounding boxes, extra track pieces), soundtrack, sound effects, misc.
* (8street) - Misc.
* Umar Ahmed (umar-ahmed) - MacOS file watcher
* Andrew Arnold (fidwell) - Misc.
* Josh Trzebiatowski (trzejos) - Ride and scenery filtering
* (kyphii) - Extended color selection, reversed ride vehicles, misc.
* Phumdol Lookthipnapha (beam41) - Misc.
* Nikolas Parshook (nparshook) - Misc.
* Wenzhao Qiu (qwzhaox) - Misc.
* Tiago Reul (reul) - Misc.
* Fredrik Tegnell (fredriktegnell) - Misc.
* Alex Parisi (alex-parisi) - Added API for returning metadata from all registered plugins.
## Bug fixes & Refactors
* Claudio Tiecher (janclod)
* (KirilAngelov)
* (halfbro)
* (Myrtle)
* (nean)
* Ed Foley (e-foley)
* Michael Pham (nightroan)
* Lucas Riutzel (jackinloadup)
* Youngjae Yu (YJSoft)
* Chanwoong Kim (kexplo)
* Josué Acevedo (Wirlie)
* Martin Černáč (octaroot)
* (marcovmun)
* Sven Slootweg (joepie91)
* Daniel Trujillo Viedma (gDanix)
* Niels NTG Poldervaart (Niels-NTG) - Screenshot filenames
* Jonathan Haas (HaasJona)
* Jake Breen (Haekb)
* Marco Benzi Tobar (Lisergishnu)
* (ceeac)
* Tomas Dittmann (Chaosmeister)
* William Wallace (Willox)
* Christian Friedrich Coors (ccoors)
* Robbin Voortman (rvoortman)
* Willem J. Lee (telk5093)
* Ethan Smith (ethanhs) - Refactor MAX_PATH
* Robert Lewicki (rlewicki)
* Liam Parker (elInfidel)
* Tyler Ruckinger (TyPR124)
* Justin Gottula (jgottula)
* Seongsik Park (pss9205)
* (Deurklink)
* Nathan Zabriskie (NathanZabriskie)
* Toby Hinloopen (tobyhinloopen)
* Patrick Martinez (martip23)
* Andy Ford (AndyTWF)
* Matthew Beaudin (mattbeaudin)
* Øystein Dale (oystedal)
* Christian Schubert (Osmodium)
* James Lord (RCTMASTA)
* Brian Massino (Nazey), Lauren Watson (lwatson2016), Jason Myre (jmyre1999), Nicole Wright (nicolewright), Josh Tucker (joshtucker132)
* Hussein Okasha (Hokasha2016), Brandon Dupree (Bdupree5), Zetao Ye (ZbrettonYe), Jordan Arevalos (Jarevalos2017)
* Florian Will (w-flo)
* Trevor Harkness (tharkne), Steve Xu (stevexu-umich)
* (aw20368)
* Jim Armstrong (41northstudios)
* Kenny Castro-Monroy (kennycastro007)
* Joseph Atkins-Turkish (Spacerat)
* Denis Khabenkov (kodmord)
* Kevin Laframboise (klaframboise)
* Tushar Sariya (TusharSariya)
* (WantDiscussion)
* Tomáš Žilínek (TomasZilinek)
* Mustapha Elghoul (mustaphaelghoul)
* Tyler Leamon (tylerleamon)
* Michael Coates (outerwear)
* Reid Baris (Rdbaris)
* Deanna Baris (dbaris)
* Chaitanya Thengdi (chaitanyathengdi)
* Sidney Kuyateh (autinerd)
* Łukasz Pękalski (Lukasz-Pe)
* (quale)
* Arran Ireland (ion232)
* Ryan Bello (ryan-bello)
* Simon Jarrett (mwnciau)
* Richard Fine (richard-fine)
* Tom Parsons (tombomp)
* Stephan Spengler (Sadret)
* Roger Seekell (rpstester)
* Ben Johnston (gsckoco)
* (evilclownattack)
* Adam Bloom (adam-bloom)
* Geoff B. (geoff-B)
* Ryan D. (rctdude2)
* (zrowny)
* Emre Aydin (aemreaydin)
* Daniel Karandikar (DKarandikar)
* Struan Clark (xtruan)
* Kane Shaw (seifer7)
* Saad Rehman (SaadRehmanCS)
* (ocalhoun6)
* Sean Payne (seanmajorpayne)
* Soham Roy (sohamroy19)
* Gaven Rendell (Rendello)
* Christian Haase (chrhaase)
* Cory Sanin (CorySanin)
* Vinícius Hashimoto (vkhashimoto)
* Gal B. (GalBr)
* Rik Smeets (rik-smeets)
* Charles Machalow (csm10495)
* Alexander Czarnecki (alcz/zuczek4793)
* Lawrence De Mol (lawrencedemol)
* Erik Wouters (EWouters)
* Hoby R. (hobyr)
* Huu Kim Nguyen (CoderUndefined)
* Henry Cheng (jazzysoggy)
* Dan Stevens (MajeureX)
* 73 (733737)
* Raymond Zhao (rzhao271)
* Xixiang Chen (jacknull1991)
* (ReticulatingSplines)
* Conrad Cash (HouseholdVTuber)
* Michael Bickerton (mdbckrtn)
* Nehemiah Negussie (nehemiah-negussie)
* Severin Paul Höfer (zzril)
* Ernest Elgin (eaeiv)
* Ernest Wong (ErnWong)
* Joel H. (HtotheTML)
* John Mulcahy (jayjay300)
* Chase Percy (Chase-Percy)
* Wenzhao Qiu (qwzhaox)
* Michael Bernardi (mrmbernardi)
* Aram Kazorian (aramk-hub)
* Harry Hopkinson (Harry-Hopkinson)
* Jan Kelemen (jan-kelemen)
* Cory Ye (CoryfY)
* Karsten Van Fossan (karstenvanf)
* Kaavya Ramachandhran (ayvaak)
## Toolchain
* (Balletie) - macOS
* Kevin Burke (kevinburke) - macOS, Unix
* Miso Zmiric (mzmiric5) - Initial macOS toolchain
* Jarno Veuger (JarnoVgr) - Windows build server
* Ted John (IntelOrca) - Windows
* Michał Janiszewski (janisozaur) - Linux, Travis CI
* Lewis Fox (LRFLEW) - macOS
* Andrew Rimpici (Andy608) - macOS
* Adam Bloom (adam-bloom) - macOS, CI
## Documentation
* (honzi)
* Kevin Burke (kevinburke)
* James Robertson (rd3k)
* Max Boße (MakaHost)
* (MaxBareiss)
* Mithun Hunsur (Philpax)
* (RollingStar)
* (That Human Being)
## Translation
* Extracting from original files: Ted John (IntelOrca)
* Reviewing and merging: Michael Steenbeek (Gymnasiast), Matte Andersson (Nubbie), Rune Laenen (runelaenen) (formerly)
* Fixing unmaintained languages: Michael Steenbeek (Gymnasiast)
* Miscellaneous fixes: Alexander Overvoorde (Overv), Ed Foley (e-foley)
* English (UK) - Ted John (IntelOrca), (Tinytimrob)
* English (US) - Ted John (IntelOrca), Michael Steenbeek (Gymnasiast); small fixes: (LRFLEW), (mike-koch), Harry Lam (daihakken)
* Catalan - Joan Josep (J0anJosep)
* Chinese (Simplified) - Naiji Ma (naijim), (izhangfei), Eric Zhao (sczyh30), (Muhhan)
* Chinese (Traditional) - Harry Lam (daihakken)
* Czech - Martin Černáč (octaroot), (Clonewayx), Tomáš Pazdiora (Aroidzap)
* Danish - Lars P. Sørensen (LPSGizmo)
* Dutch - Michael Steenbeek (Gymnasiast), Yannic Geurts (xzbobzx), (mrtnptrs), Thomas den Hollander (ThomasdenH), (hostbrute), Marijn van der Werf (marijnvdwerf), Tom Kroes (ThePsionic), Karst van Galen Last (AuraSpecs); reviewing and discussion: Aaron van Geffen (AaronVanGeffen), (Balletie) and Sijmen Schoon (SijmenSchoon)
* Esperanto - (tellovishous), Raymond Zhao (rzhao271)
* Finnish - (DJHasis), (Zode), (TheWing)
* French - (fbourigault), Joël Troch (JoelTroch), Michael Steenbeek (Gymnasiast), Romain Vigier (rmnvgr), (AziasYur), Hugo Courtial (s0r00t), David Delobel (incyclum), Nicolas Hawrysh (xp4xbox)
* German - (danidoedel), (atmaxinger), (Yepoleb), Daniel Kessel (dkessel), Leon (AllGoodNamesAreTaken), (raidcookie), Gilian Rehm (gr33ndev)
* Italian - Luca Andrea Rossi (LucaRed), Precious Ugo Abara (48cfu)
* Japanese - Aaron van Geffen (AaronVanGeffen), Haruna Chinzei, Nick Hall (nickhall), (jhako), Harry Lam (daihakken)
* Korean - Willem J. Lee (telk5093), (NeverDruid); small fixes: (kexplo)
* Norwegian - Hugo Wallenburg (Goddesen)
* Polish - Adrian Wielgosik (adrian17), (lopezloo), Michał Janiszewski (janisozaur)
* Portuguese (BR) - (kaudy), (renansimoes), Tulio Paschoalin Leao (tupaschoal)
* Russian - (Soosisya)
* Spanish - Josué Acevedo (Wirlie), Diego Mateos (dimateos), (frenchiveruti), (mdtrooper), Daniel Trujillo Viedma (gDanix); small fixes: (teapartycthulu)
* Swedish - (Jinxit), (mharrys), (Slimeyo), Matte Andersson (Nubbie)
* Ukrainian - (CsyeCokTheSolly), (Veydzher), (Saba4ara)
## Graphics
* Yannic Geurts (xzbobzx) - OpenRCT2 Logo
* Nicolas Hawrysh (xp4xbox) - Booster Sprites Twister, Giga, Mini, Woodie
* Michael Steenbeek (Gymnasiast) - Extended fontset
* Olivier Wervers (Oli414) - Several icons
* Edward Calver (X7123M3-256) - Hybrid RC track & train, Single Rail RC track & train, Alpine RC track & vehicle, LIM RC extended trackset, Giga RC extended trackset
* Karst van Galen Last (AuraSpecs) - Steep log flume, Inverted RC Booster, Giga RC powered lift
* Martijn Kroese (MK98) - Diagonal brakes project
* Peter van den Berg (Recurious) - Diagonal brakes project
* Joshua Jacobs - OpenGraphics Spooky Theme
## Music
* Karst "Jalmaan" van Galen Last (AuraSpecs)
* (Flyxxpy)
* Jan Büchner (Greyfade)
* Allister Brimble - OpenRCT2 Main Theme
* Herman Riddering - Owner of the 35er Voigt, which provided new recordings for the Fairground organ styles.
* (Skyshard)
* (Blackend Blue)
## Sound Effects
* Karst van Galen Last (AuraSpecs)
* (ThatGuyYouKnow)
## RollerCoaster Tycoon 2 credits
* Allister Brimble - Music and sound effects
* Chris Sawyer - Programming
* David Ellis - Additional sound effects
* Jacqui Lyons (Marjacq Ltd.) - Representation
* Simon Foster - Graphics
Thanks to: Peter James Adcock, Joe Booth, and John Wardley
Licensed to Infogrames Interactive Inc.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,969 +0,0 @@
# STR_XXXX part is read and XXXX becomes the string id number.
# Everything after the colon and before the new line will be saved as the string.
# Use # at the beginning of a line to leave a comment.
#
# WARNING: Do not use this file as a template for your translation! Always use UK English (located here: https://github.com/OpenRCT2/OpenRCT2/blob/develop/data/language/en-GB.txt ).
#
# Vanilla strings. Only change strings that differ from UK English!
STR_0007 :Miniature Railroad
STR_0015 :Bobsled Coaster
STR_0027 :Bumper Cars
STR_0035 :Carousel
STR_0038 :Restroom
STR_0045 :Elevator
STR_0047 :ATM
STR_0517 :Passengers ride in miniature trains along a narrow-gauge railroad track
STR_0529 :Mine train themed roller coaster trains career along steel roller coaster track made to look like old railroad track
STR_0537 :Guests bump into each other in self-driven electric bumper cars
STR_0555 :Guests ride in an elevator up or down a vertical tower to get from one level to another
STR_0574 :Riders are held in special harnesses in a lying-down position, traveling through twisted track and inversions either on their backs or facing the ground
STR_0976 :Restrooms and Information Kiosks
STR_1102 :Traveling at {VELOCITY}
STR_1105 :Traveling at {VELOCITY}
STR_1108 :Traveling at {VELOCITY}
STR_1120 :Traveling at {VELOCITY}
STR_1129 :All vehicles in same colors
STR_1130 :Different colors per {STRINGID}
STR_1131 :Different colors per vehicle
STR_1136 :Select main color
STR_1137 :Select additional color 1
STR_1138 :Select additional color 2
STR_1139 :Select support structure color
STR_1140 :Select vehicle color scheme option
STR_1396 :Color scheme options
STR_1442 :Emptying trash can
STR_1490 :“{STRINGID} is a really good value”
STR_1502 :“I need to go to the bathroom”
STR_1506 :“The trash here is really bad”
STR_1518 :“This balloon from {STRINGID} is a really good value”
STR_1519 :“This cuddly toy from {STRINGID} is a really good value”
STR_1520 :“This park map from {STRINGID} is a really good value”
STR_1521 :“This on-ride photo from {STRINGID} is a really good value”
STR_1522 :“This umbrella from {STRINGID} is a really good value”
STR_1523 :“This drink from {STRINGID} is a really good value”
STR_1524 :“This burger from {STRINGID} is a really good value”
STR_1525 :“These fries from {STRINGID} are a really good value”
STR_1526 :“This ice cream from {STRINGID} is a really good value”
STR_1527 :“This cotton candy from {STRINGID} is a really good value”
STR_1531 :“This pizza from {STRINGID} is a really good value”
STR_1533 :“This popcorn from {STRINGID} is a really good value”
STR_1534 :“This hot dog from {STRINGID} is a really good value”
STR_1535 :“This tentacle from {STRINGID} is a really good value”
STR_1536 :“This hat from {STRINGID} is a really good value”
STR_1537 :“This candy apple from {STRINGID} is a really good value”
STR_1538 :“This T-shirt from {STRINGID} is a really good value”
STR_1539 :“This donut from {STRINGID} is a really good value”
STR_1540 :“This coffee from {STRINGID} is a really good value”
STR_1542 :“This fried chicken from {STRINGID} is a really good value”
STR_1543 :“This lemonade from {STRINGID} is a really good value”
STR_1559 :“Im not paying that much for fries from {STRINGID}”
STR_1561 :“Im not paying that much for cotton candy from {STRINGID}”
STR_1571 :“Im not paying that much for a candy apple from {STRINGID}”
STR_1573 :“Im not paying that much for a donut from {STRINGID}”
STR_1584 :“This on-ride photo from {STRINGID} is a really good value”
STR_1585 :“This on-ride photo from {STRINGID} is a really good value”
STR_1586 :“This on-ride photo from {STRINGID} is a really good value”
STR_1587 :“This pretzel from {STRINGID} is a really good value”
STR_1588 :“This hot chocolate from {STRINGID} is a really good value”
STR_1589 :“This iced tea from {STRINGID} is a really good value”
STR_1590 :“This funnel cake from {STRINGID} is a really good value”
STR_1591 :“These sunglasses from {STRINGID} are a really good value”
STR_1592 :“These beef noodles from {STRINGID} are a really good value”
STR_1593 :“These fried rice noodles from {STRINGID} are a really good value”
STR_1594 :“This wonton soup from {STRINGID} is a really good value”
STR_1595 :“This meatball soup from {STRINGID} is a really good value”
STR_1596 :“This fruit juice from {STRINGID} is a really good value”
STR_1597 :“This soybean milk from {STRINGID} is a really good value”
STR_1598 :“This sujeonggwa from {STRINGID} is a really good value”
STR_1599 :“This sub sandwich from {STRINGID} is a really good value”
STR_1600 :“This cookie from {STRINGID} is a really good value”
STR_1604 :“This roast sausage from {STRINGID} is a really good value”
STR_1667 :{WINDOW_COLOUR_2}Bathroom:
STR_1714 :{INLINE_SPRITE}{249}{19}{00}{00}{WINDOW_COLOUR_2}Empty trash cans
STR_1753 :Show summarized list of guests in park
STR_1790 :Select uniform color for this type of staff
STR_1791 :{WINDOW_COLOUR_2}Uniform color:
STR_1819 :{WINDOW_COLOUR_2}All guests (summarized)
STR_1834 :Guests favorite
STR_1842 :Favorite of: {COMMA32} guest
STR_1843 :Favorite of: {COMMA32} guests
STR_1929 :{RED}{STRINGID} still hasnt been fixed{NEWLINE}Check where your mechanics are and consider organizing them better
STR_1967 :{WINDOW_COLOUR_2}Fries price:
STR_1969 :{WINDOW_COLOUR_2}Cotton Candy price:
STR_1979 :{WINDOW_COLOUR_2}Candy Apple price:
STR_1981 :{WINDOW_COLOUR_2}Donut price:
STR_1995 :Fries
STR_1997 :Cotton Candy
STR_1999 :Trash
STR_2007 :Candy Apple
STR_2009 :Donut
STR_2023 :Fries
STR_2025 :Cotton Candy
STR_2027 :Trash
STR_2035 :Candy Apples
STR_2037 :Donuts
STR_2051 :some Fries
STR_2053 :some Cotton Candy
STR_2055 :some Trash
STR_2063 :a Candy Apple
STR_2065 :a Donut
STR_2079 :Fries
STR_2081 :Cotton Candy
STR_2083 :Trash
STR_2091 :Candy Apple
STR_2093 :Donut
STR_2353 :{WINDOW_COLOUR_2}Trash swept: {BLACK}{COMMA32}
STR_2354 :{WINDOW_COLOUR_2}Trash cans emptied: {BLACK}{COMMA32}
STR_2707 :Use system dialog window
STR_2756 :Remove trash
STR_2806 :{RED}Guests are complaining about the disgusting state of the paths in your park{NEWLINE}Check where your handymen are and consider organizing them better
STR_2807 :{RED}Guests are complaining about the amount of trash in your park{NEWLINE}Check where your handymen are and consider organizing them better
STR_2808 :{RED}Guests are complaining about the vandalism in your park{NEWLINE}Check where your security guards are and consider organizing them better
STR_2811 :{RED}Guests are complaining because they cant find the bathrooms in your park
STR_2824 :{WINDOW_COLOUR_2}Best park bathrooms award
STR_2828 :{WINDOW_COLOUR_2}Most dazzling ride color schemes award
STR_2845 :{TOPAZ}Your park has received an award for being The park with the most dazzling choice of color schemes!
STR_2971 :Main color scheme
STR_2972 :Alternative color scheme 1
STR_2973 :Alternative color scheme 2
STR_2974 :Alternative color scheme 3
STR_2975 :Select which color scheme to change, or paint ride with
STR_2976 :Paint an individual area of this ride using the selected color scheme
STR_2989 :Select main color
STR_2990 :Select text color
STR_3093 :{WINDOW_COLOUR_2}Favorite: {BLACK}{STRINGID}
STR_3099 :Select color
STR_3100 :Select second color
STR_3101 :Select third color
STR_3102 :Re-paint colored scenery on landscape
STR_3122 :{WINDOW_COLOUR_2}Favorite ride of: {BLACK}{COMMA32} guest
STR_3123 :{WINDOW_COLOUR_2}Favorite ride of: {BLACK}{COMMA32} guests
STR_3372 :{BLACK}= ATM
STR_3373 :{BLACK}= Restroom
# Strings added by OpenRCT2. Only add strings that differ from UK English!
STR_5440 :Minimize fullscreen on focus loss
STR_5459 :Rotate counterclockwise
STR_5460 :Rotate view counterclockwise
STR_5515 :Stops guests from vandalizing your park when theyre angry
STR_5517 :Gray
STR_5557 :Stay connected after desynchronization (Multiplayer)
STR_5572 :Add To Favorites
STR_5573 :Remove From Favorites
STR_5620 :Corkscrew Follies
STR_5820 :Minimize the game if focus is{NEWLINE}lost while in fullscreen mode
STR_5823 :Display banners in uppercase (RCT1 behavior)
STR_5827 :Sets the color scheme used for the GUI
STR_5842 :Sort scenarios into tabs by their difficulty (RCT2 behavior) or their source game (RCT1 behavior)
STR_5843 :Enables progressive unlocking of scenarios (RCT1 behavior)
STR_5872 :Disable plant aging such that they dont wilt.
STR_5907 :When enabled, zooming in will center around the cursor, as opposed to the screen center.
STR_5921 :If enabled, rain and gloomy colors will be rendered during storms.
STR_6046 :Normalize height map
STR_6053 :The heightmap cannot be normalized
STR_6116 :Wide roller coaster trains glide along smooth steel track, traveling through a variety of inversions
STR_6166 :Synchronizes each frame displayed to the monitors refresh rate, preventing screen tearing.
STR_6274 :Cant set color scheme…
STR_6307 :Color scheme: {BLACK}{STRINGID}
STR_6328 :With this option enabled, giant screenshots will have a transparent background instead of the default black color.
STR_6501 :Random color
STR_6625 :Invalid color
#############
# Scenarios #
#############
## RCT Original
<Forest Frontiers>
STR_SCNR :Forest Frontiers
STR_PARK :Forest Frontiers
STR_DTLS :Deep in the forest, build a thriving theme park in a large cleared area
<Dynamite Dunes>
STR_SCNR :Dynamite Dunes
STR_PARK :Dynamite Dunes
STR_DTLS :Built in the middle of the desert, this theme park contains just one roller coaster but has space for expansion
<Leafy Lake>
STR_SCNR :Leafy Lake
STR_PARK :Leafy Lake
STR_DTLS :Starting from scratch, build a theme park around a large lake
<Diamond Heights>
STR_SCNR :Diamond Heights
STR_PARK :Diamond Heights
STR_DTLS :Diamond Heights is already a successful theme park with great rides - develop it to double its value
<Evergreen Gardens>
STR_SCNR :Evergreen Gardens
STR_PARK :Evergreen Gardens
STR_DTLS :Convert the beautiful Evergreen Gardens into a thriving theme park
<Bumbly Beach>
STR_SCNR :Bumbly Beach
STR_PARK :Bumbly Beach
STR_DTLS :Develop Bumbly Beachs small amusement park into a thriving theme park
<Trinity Islands>
STR_SCNR :Trinity Islands
STR_PARK :Trinity Islands
STR_DTLS :Several islands form the basis for this new park
<Katie's Dreamland>
STR_SCNR :Katies World
STR_PARK :Katies World
STR_DTLS :A small theme park with a few rides and room for expansion - Your aim is to double the park value
<Pokey Park>
STR_SCNR :Dinky Park
STR_PARK :Dinky Park
STR_DTLS :A small, cramped amusement park which requires major expansion
<White Water Park>
STR_SCNR :Aqua Park
STR_PARK :Aqua Park
STR_DTLS :A park with some excellent water-based rides requires expansion
<Millennium Mines>
STR_SCNR :Millennium Mines
STR_PARK :Millennium Mines
STR_DTLS :Convert a large abandoned mine from a tourist attraction into a theme park
<Karts & Coasters>
STR_SCNR :Karts & Coasters
STR_PARK :Karts & Coasters
STR_DTLS :A large park hidden in the forest, with only go-kart tracks and wooden roller coasters
<Mel's World>
STR_SCNR :Mels World
STR_PARK :Mels World
STR_DTLS :This theme park has some well-designed modern rides, but plenty of space for expansion
<Mystic Mountain>
STR_SCNR :Mothball Mountain
STR_PARK :Mothball Mountain
STR_DTLS :In the hilly forests of Mothball Mountain, build a theme park from scratch
<Pacific Pyramids>
STR_SCNR :Pacific Pyramids
STR_PARK :Pacific Pyramids
STR_DTLS :Convert the Egyptian Ruins tourist attraction into a thriving theme park
<Crumbly Woods>
STR_SCNR :Crumbly Woods
STR_PARK :Crumbly Woods
STR_DTLS :A large park with well-designed but rather old rides - Replace the old rides or add new rides to make the park more popular
<Paradise Pier>
STR_SCNR :Big Pier
STR_PARK :Big Pier
STR_DTLS :Convert this sleepy towns pier into a thriving attraction
<Lightning Peaks>
STR_SCNR :Lightning Peaks
STR_PARK :Lightning Peaks
STR_DTLS :The beautiful mountains of Lightning Peaks are popular with walkers and sightseers - Use the available land to attract a new thrill-seeking clientele
<Ivory Towers>
STR_SCNR :Ivory Towers
STR_PARK :Ivory Towers
STR_DTLS :A well-established park, which has a few problems
<Rainbow Valley>
STR_SCNR :Rainbow Valley
STR_PARK :Rainbow Valley
STR_DTLS :Rainbow Valleys local authority wont allow any landscape changes or large tree removal, but you must develop the area into a large theme park
<Thunder Rock>
STR_SCNR :Thunder Rock
STR_PARK :Thunder Rock
STR_DTLS :Thunder Rock stands in the middle of a desert and attracts many tourists - Use the available space to build rides to attract more people
<Mega Park>
STR_SCNR :Mega Park
STR_PARK :Mega Park
STR_DTLS :Just for fun!
## Corkscrew Follies
<Whispering Cliffs>
STR_SCNR :Whispering Cliffs
STR_PARK :Whispering Cliffs
STR_DTLS :Develop the seaside cliffs into a thriving amusement park
<Three Monkeys Park>
STR_SCNR :Three Monkeys Park
STR_PARK :Three Monkeys Park
STR_DTLS :Central to this large developing park is a giant triple-track racing/dueling steel coaster
<Canary Mines>
STR_SCNR :Canary Mines
STR_PARK :Canary Mines
STR_DTLS :This abandoned mine already has the makings of a tourist attraction with its minature railway and a pair of vertical drop roller coasters
<Barony Bridge>
STR_SCNR :Barony Bridge
STR_PARK :Barony Bridge
STR_DTLS :An old redundant bridge is yours to develop into an amusement park
<Funtopia>
STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Covering land both sides of a highway, this park has several rides already operating
<Haunted Harbour>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
STR_DTLS :The local authority has agreed to sell nearby land cheaply to this small seaside park, on the condition that certain rides are preserved
<Fun Fortress>
STR_SCNR :Fun Fortress
STR_PARK :Fun Fortress
STR_DTLS :This castle is all yours to turn into a theme park
<Future World>
STR_SCNR :Future World
STR_PARK :Future World
STR_DTLS :This futuristic park has plenty of space for new rides on its alien landscape
<Gentle Glen>
STR_SCNR :Gentle Glen
STR_PARK :Gentle Glen
STR_DTLS :The local population prefer gentle and relaxing rides, so it is your job to expand this park to suit their tastes
<Jolly Jungle>
STR_SCNR :Jolly Jungle
STR_PARK :Jolly Jungle
STR_DTLS :Deep in the jungle lies a large area of land ready to be turned into a theme park
<Hydro Hills>
STR_SCNR :Hydro Hills
STR_PARK :Hydro Hills
STR_DTLS :A series of stepped lakes form the basis for this new park
<Sprightly Park>
STR_SCNR :Sprightly Park
STR_PARK :Sprightly Park
STR_DTLS :This elderly park has many historical rides but is badly in debt
<Magic Quarters>
STR_SCNR :Magic Quarters
STR_PARK :Magic Quarters
STR_DTLS :A large area of land has been cleared and partially themed ready for you to develop into a landscaped theme park
<Fruit Farm>
STR_SCNR :Fruit Farm
STR_PARK :Fruit Farm
STR_DTLS :A thriving fruit farm has built a railroad to boost its income, your job is to develop it into a full-blown amusement park
<Butterfly Dam>
STR_SCNR :Butterfly Dam
STR_PARK :Butterfly Dam
STR_DTLS :The area around a dam is available for you to develop into an amusement park
<Coaster Canyon>
STR_SCNR :Coaster Canyon
STR_PARK :Coaster Canyon
STR_DTLS :A vast canyon is yours to turn into a theme park
<Thunderstorm Park>
STR_SCNR :Thunderstorm Park
STR_PARK :Thunderstorm Park
STR_DTLS :The weather is so wet here that a giant pyramid has been built to allow some rides to be built under cover
<Harmonic Hills>
STR_SCNR :Harmonic Hills
STR_PARK :Harmonic Hills
STR_DTLS :The local authority wont allow you to build above tree height in this park
<Roman Village>
STR_SCNR :Roman Village
STR_PARK :Roman Village
STR_DTLS :Develop this Roman-themed park by adding rides and roller coasters
<Swamp Cove>
STR_SCNR :Swamp Cove
STR_PARK :Swamp Cove
STR_DTLS :Built partly on a series of small islands, this park already has a pair of large roller coasters as its centerpiece
<Adrenaline Heights>
STR_SCNR :Adrenaline Heights
STR_PARK :Adrenaline Heights
STR_DTLS :Build a park to appeal to the high-intensity thrill-seeking local people
<Utopia Park>
STR_SCNR :Utopia Park
STR_PARK :Utopia
STR_DTLS :An oasis in the middle of the desert provides an unusual opportunity to build an amusement park
<Rotting Heights>
STR_SCNR :Rotting Heights
STR_PARK :Rotting Heights
STR_DTLS :Overgrown and dilapidated, can you resurrect this once-great amusement park?
<Fiasco Forest>
STR_SCNR :Fiasco Forest
STR_PARK :Fiasco Forest
STR_DTLS :Full of badly designed and dangerous rides, you have a very limited budget and time to fix the problems and turn the park around
<Pickle Park>
STR_SCNR :Pickle Park
STR_PARK :Pickle Park
STR_DTLS :The local authority will not allow any kind of advertising or promotion, so this park must succeed by reputation only
<Giggle Downs>
STR_SCNR :Giggle Downs
STR_PARK :Giggle Downs
STR_DTLS :A four lane steeplechase ride is the centerpiece of this expanding park
<Mineral Park>
STR_SCNR :Mineral Park
STR_PARK :Mineral Park
STR_DTLS :Turn this abandoned stone quarry into a place to attract thrill-seeking tourists
<Coaster Crazy>
STR_SCNR :Coaster Crazy
STR_PARK :Coaster Crazy
STR_DTLS :You have limited funds but unlimited time to turn this mountainside area into a vast roller coaster park
<Urban Park>
STR_SCNR :Urban Park
STR_PARK :Urban Park
STR_DTLS :A tiny park has done a deal with the nearby town to allow expansion through the town itself
<Geoffrey Gardens>
STR_SCNR :Geoffrey Gardens
STR_PARK :Geoffrey Gardens
STR_DTLS :A large garden park needs turning into a thriving theme park
## Loopy Landscapes
<Iceberg Islands>
STR_SCNR :Iceberg Islands
STR_PARK :Iceberg Islands
STR_DTLS :A collection of icebergs make a cold setting for this ambitious theme park
<Volcania>
STR_SCNR :Volcania
STR_PARK :Volcania
STR_DTLS :A dormant volcano is the setting of this coaster-building challenge
<Arid Heights>
STR_SCNR :Arid Heights
STR_PARK :Arid Heights
STR_DTLS :Free of any financial limits, your challenge is to develop this desert park while keeping the guests happy
<Razor Rocks>
STR_SCNR :Razor Rocks
STR_PARK :Razor Rocks
STR_DTLS :Your task is to build a massive coaster-filled park in amongst Razor Rocks
<Crater Lake>
STR_SCNR :Crater Lake
STR_PARK :Crater Lake
STR_DTLS :A large lake in an ancient crater is the setting for this park
<Vertigo Views>
STR_SCNR :Vertigo Views
STR_PARK :Vertigo Views
STR_DTLS :This large park already has an excellent hyper-coaster, but your task is to massively increase its profit
<Paradise Pier 2>
STR_SCNR :Big Pier 2
STR_PARK :Big Pier 2
STR_DTLS :Big Pier has expanded its network of walkways over the sea, and your task is to expand the park to use the extra space
<Dragon's Cove>
STR_SCNR :Dragons Cove
STR_PARK :Dragons Cove
STR_DTLS :This sea-side cove is the setting for this coaster-building challenge
<Good Knight Park>
STR_SCNR :Good Knight Park
STR_PARK :Good Knight Park
STR_DTLS :A castle with a pair of roller coasters needs developing into a larger theme park
<Wacky Warren>
STR_SCNR :Wacky Warren
STR_PARK :Wacky Warren
STR_DTLS :A park which has much of its footpaths and coasters underground
<Grand Glacier>
STR_SCNR :Grand Glacier
STR_PARK :Grand Glacier
STR_DTLS :A glacier-filled valley is yours to develop into a theme park
<Crazy Craters>
STR_SCNR :Crazy Craters
STR_PARK :Crazy Craters
STR_DTLS :In a far-off world where money is not needed, you must build an entertainment center to keep the people happy
<Dusty Desert>
STR_SCNR :Dusty Desert
STR_PARK :Dusty Desert
STR_DTLS :Five coasters require completion in this desert park
<Woodworm Park>
STR_SCNR :Woodworm Park
STR_PARK :Woodworm Park
STR_DTLS :This historical park is only allowed to build older-styled rides
<Icarus Park>
STR_SCNR :Icarus Park
STR_PARK :Icarus Park
STR_DTLS :Develop this alien park to maximize its profit
<Sunny Swamps>
STR_SCNR :Sunny Swamps
STR_PARK :Sunny Swamps
STR_DTLS :This well-themed amusement park already has several rides, but has plenty of space for expansion
<Frightmare Hills>
STR_SCNR :Frightmare Hills
STR_PARK :Frightmare Hills
STR_DTLS :A scary park with a giant centerpiece coaster
<Thunder Rocks>
STR_SCNR :Thunder Rocks
STR_PARK :Thunder Rocks
STR_DTLS :Two large hunks of rock stick out of the sand, upon which the beginnings of a theme park are constructed
<Octagon Park>
STR_SCNR :Octagon Park
STR_PARK :Octagon Park
STR_DTLS :In this large park you must design and build ten large coasters
<Pleasure Island>
STR_SCNR :Pleasure Island
STR_PARK :Pleasure Island
STR_DTLS :A long thin island makes a challenging setting to build a selection of coasters
<Icicle Worlds>
STR_SCNR :Icicle Worlds
STR_PARK :Icicle Worlds
STR_DTLS :An icy landscape needs turning into a thriving theme park
<Southern Sands>
STR_SCNR :Southern Sands
STR_PARK :Southern Sands
STR_DTLS :A desert park with some cleverly designed coasters is yours to expand
<Tiny Towers>
STR_SCNR :Tiny Towers
STR_PARK :Tiny Towers
STR_DTLS :In this tiny park you must finish building the five existing coasters
<Nevermore Park>
STR_SCNR :Nevermore Park
STR_PARK :Nevermore Park
STR_DTLS :A large park with a novel transportation system around its edge
<Pacifica>
STR_SCNR :Pacifica
STR_PARK :Pacifica
STR_DTLS :This large island is all yours to develop as an amusement park
<Urban Jungle>
STR_SCNR :Urban Jungle
STR_PARK :Urban Jungle
STR_DTLS :A giant abandoned skyscraper is a unique opportunity for a theme park developer
<Terror Town>
STR_SCNR :Terror Town
STR_PARK :Terror Town
STR_DTLS :This urban area is all yours to develop into an amusement park
<Megaworld Park>
STR_SCNR :Megaworld Park
STR_PARK :Megaworld Park
STR_DTLS :A giant park already packed full of rides needs improving
<Venus Ponds>
STR_SCNR :Venus Ponds
STR_PARK :Venus Ponds
STR_DTLS :On a far-away planet this area of land needs turning into a theme park
<Micro Park>
STR_SCNR :Micro Park
STR_PARK :Micro Park
STR_DTLS :Try to create the worlds smallest profitable park
## Real Parks from RCT1
# None of them had details
<Alton Towers>
STR_SCNR :Alton Towers
STR_PARK :Alton Towers
STR_DTLS :
<Heide-Park>
STR_SCNR :Heide-Park
STR_PARK :Heide-Park
STR_DTLS :
<Blackpool Pleasure Beach>
STR_SCNR :Blackpool Pleasure Beach
STR_PARK :Blackpool Pleasure Beach
STR_DTLS :
## Misc parks from RCT1
# Had no details
<Fort Anachronism>
STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
###############################################################################
## RCT2 Scenarios
###############################################################################
<Alpine Adventures>
STR_SCNR :Alpine Adventures
STR_PARK :Alpine Adventures
STR_DTLS :Convert a small mountain ski resort into a snow-themed amusement park
<Amity Airfield>
STR_SCNR :Amity Airfield
STR_PARK :Amity Airfield
STR_DTLS :Build a flying-themed amusement park in this abandoned airport
<Botany Breakers>
STR_SCNR :Botany Breakers
STR_PARK :Botany Breakers
STR_DTLS :Your challenge is to build a high-profit park on this paradise island
<Build your own Six Flags Belgium>
STR_SCNR :Build your own Six Flags Belgium
STR_PARK :Six Flags Belgium
STR_DTLS :Build your own version of this European Six Flags park
<Build your own Six Flags Great Adventure>
STR_SCNR :Build your own Six Flags Great Adventure
STR_PARK :Six Flags Great Adventure
STR_DTLS :Use your design skills to recreate this Six Flags park
<Build your own Six Flags Holland>
STR_SCNR :Build your own Six Flags Holland
STR_PARK :Six Flags Holland
STR_DTLS :Build this European Six Flags park the way you want to
<Build your own Six Flags Magic Mountain>
STR_SCNR :Build your own Six Flags Magic Mountain
STR_PARK :Six Flags Magic Mountain
STR_DTLS :Create your own version of this massive Six Flags park
<Build your own Six Flags over Texas>
STR_SCNR :Build your own Six Flags over Texas
STR_PARK :Six Flags over Texas
STR_DTLS :Starting from scratch, build the rides in this Six Flags park
<Build your own Six Flags Park>
STR_SCNR :Build your own Six Flags Park
STR_PARK :Six Flags
STR_DTLS :Build your own design of Six Flags park - Either build rides from other Six Flags parks or design and build your own rides
<Bumbly Bazaar>
STR_SCNR :Bumbly Bazaar
STR_PARK :Bumbly Bazaar
STR_DTLS :Starting with a small market bazaar, your challenge is to increase the profit from shops and stalls by building rides and roller coasters to attract more customers
<Crazy Castle>
STR_SCNR :Crazy Castle
STR_PARK :Crazy Castle
STR_DTLS :You have inherited a large castle - Your job is to convert it into a small theme park.
<Dusty Greens>
STR_SCNR :Dusty Greens
STR_PARK :Dusty Greens
STR_DTLS :Situated near a highway junction in the desert, Dusty Greens is an opportunity to develop a small golf resort into a thriving theme park
<Electric Fields>
STR_SCNR :Electric Fields
STR_PARK :Electric Fields
STR_DTLS :You have inherited a small farm, and your challenge is to build a small theme park amongst the fields and farm buildings
<Extreme Heights>
STR_SCNR :Extreme Heights
STR_PARK :Extreme Heights
STR_DTLS :Free of financial restrictions, your challenge is to expand this desert park to attract people seeking the ultimate thrills
<Factory Capers>
STR_SCNR :Factory Capers
STR_PARK :Factory Capers
STR_DTLS :An abandoned factory complex is an opportunity to build a mechanical-themed amusement park
<Fungus Woods>
STR_SCNR :Fungus Woods
STR_PARK :Fungus Woods
STR_DTLS :Restricted to only older-style wooden rides, your challenge is to build a thriving theme park in Fungus Woods
<Ghost Town>
STR_SCNR :Ghost Town
STR_PARK :Ghost Town
STR_DTLS :Hired by a large amusement park chain, your task is to build them a giant roller coaster park around an abandoned mining town
<Gravity Gardens>
STR_SCNR :Gravity Gardens
STR_PARK :Gravity Gardens
STR_DTLS :Your challenge is to build a roller coaster park in the beautiful Gravity Gardens - No other rides, just roller coasters!
<Infernal Views>
STR_SCNR :Infernal Views
STR_PARK :Infernal Views
STR_DTLS :A park nestled precariously on lava rock with streams of magma
<Lucky Lake>
STR_SCNR :Lucky Lake
STR_PARK :Lucky Lake
STR_DTLS :With unlimited funds but a challenging lake location, this park will be a challenge to expand and manage
<Rainbow Summit>
STR_SCNR :Rainbow Summit
STR_PARK :Rainbow Summit
STR_DTLS :Built on a hillside, this park is forbidden from building anything tall. Can you expand the park and make it successful?
<Six Flags Belgium>
STR_SCNR :Six Flags Belgium
STR_PARK :Six Flags Belgium
STR_DTLS :Try your hand at running and improving this Six Flags park
<Six Flags Great Adventure>
STR_SCNR :Six Flags Great Adventure
STR_PARK :Six Flags Great Adventure
STR_DTLS :Build the missing Six Flags rides, or create your own designs to improve the park! But dont forget your ultimate aim - To attract more guests to the park!
<Six Flags Holland>
STR_SCNR :Six Flags Holland
STR_PARK :Six Flags Holland
STR_DTLS :Try your hand at running and improving this Six Flags park
<Six Flags Magic Mountain>
STR_SCNR :Six Flags Magic Mountain
STR_PARK :Six Flags Magic Mountain
STR_DTLS :Build the missing Six Flags rides, or create your own designs to improve the park! But dont forget your ultimate aim - To repay your loan while keeping the park value up!
<Six Flags over Texas>
STR_SCNR :Six Flags over Texas
STR_PARK :Six Flags over Texas
STR_DTLS :Build the missing Six Flags rides, or create your own designs to improve the park! But dont forget your ultimate aim - To attract more guests to the park!
###############################################################################
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - African Diamond Mine
STR_PARK :Mines of Africa
STR_DTLS :You inherited a disused diamond mine, and find a valuable diamond. You decide to invest that money to build a world-famous theme park.
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_PARK :Mirage Madness
STR_DTLS :A desert Oasis has been discovered and would provide a beautiful location for a park. Transport to the oasis has been provided.
<Africa - Victoria Falls>
STR_SCNR :Africa - Victoria Falls
STR_PARK :Over The Edge
STR_DTLS :A dam has been built offering abundant, cheap hydroelectric power with which to run a park. You need to reach a high park value to help repay the loan for the dam.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctic - Ecological Salvage
STR_PARK :Icy Adventures
STR_DTLS :The environment agency has turned to you to transform an old oil refinery ecological eyesore into a top tourist attraction. Land is cheap but loan interest is high. You can sell the old buildings for salvage.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Great Wall of China Tourism Enhancement
STR_PARK :Great Wall of China
STR_DTLS :The authorities have decided to enhance tourism around the Great Wall by building a theme park on the adjacent land. Money is no object!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Japanese Coastal Reclaim
STR_PARK :Okinawa Coast
STR_DTLS :An existing park has run out of space. Your only option is to build out into the sea, and so you have taken out a loan. Height restrictions on your building are enforced due to foundations and earthquake risk.
<Asia - Maharaja Palace>
STR_SCNR :Asia - Maharaja Palace
STR_PARK :Park Maharaja
STR_DTLS :You have been commissioned by the Maharaja to bring entertainment to the large local population. Build a park inspired by the Maharajas palace.
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_PARK :Ayers Adventure
STR_DTLS :You are helping Aboriginal people to build a park as part of a cultural awareness program. You need to get a large number of guests to educate them in the unique heritage of the Aboriginal people.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia - Fun at the Beach
STR_PARK :Beach Barbecue Blast
STR_DTLS :A local entrepreneurs sealife park has gone bust. You already operate a small park and buy the other park from the construction company. Develop a big combined park.
<Europe - European Cultural Festival>
STR_SCNR :Europe - European Cultural Festival
STR_PARK :European Extravaganza
STR_DTLS :You have been brought in to take over a European Cultural Visitor Attraction and must increase the number of guests in order to pay back the EU subsidy by the end of the current European parliament term.
<Europe - Renovation>
STR_SCNR :Europe - Renovation
STR_PARK :From The Ashes
STR_DTLS :An old park has fallen into disrepair. You gain a European Union grant to return this deprived area to its former glory! You need to renovate the park and repay the grant.
<N. America - Extreme Hawaiian Island>
STR_SCNR :N. America - Extreme Hawaiian Island
STR_PARK :Wacky Waikiki
STR_DTLS :The people of Hawaii are bored of surfing and are looking for something more intense. You need to build a park with this in mind to keep the areas tourist attraction rating high.
<North America - Grand Canyon>
STR_SCNR :North America - Grand Canyon
STR_PARK :Canyon Calamities
STR_DTLS :You have to build a park on limited land either side of this natural treasure - you do have the opportunity to buy neighboring land from the Native American Indians. You need to complete the objective to sustain the local towns population.
<North America - Rollercoaster Heaven>
STR_SCNR :North America - Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :You are a successful business tycoon on long sabbatical who desires to use this time transforming the city park into Rollercoaster Heaven. Money is no object!
<South America - Inca Lost City>
STR_SCNR :South America - Inca Lost City
STR_PARK :Lost City Founder
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings.
<South America - Rain Forest Plateau>
STR_SCNR :South America - Rain Forest Plateau
STR_PARK :Rainforest Romp
STR_DTLS :Space is limited in the precious rainforest - you must cram as much as possible into the existing clearing, in order to provide a viable alternative to the local timber industry.
<South America - Rio Carnival>
STR_SCNR :South America - Rio Carnival
STR_PARK :Sugarloaf Shores
STR_DTLS :You run a small park near Rio but the bank has called in your loan. You need to quickly increase your earning capacity to repay this unexpected debt.
###############################################################################
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Dark Age - Castle
STR_PARK :Cliffside Castle
STR_DTLS :Local members of the battle re-enactment society are rather serious about their hobby. Theyve entrusted you with the job of constructing a Dark Age theme park on the grounds of Cliffside Castle.
<Dark Age - Robin Hood>
STR_SCNR :Dark Age - Robin Hood
STR_PARK :Sherwood Forest
STR_DTLS :To liberate wealth from the rich and distribute it to the needy, you and your Merry Men have decided to build a theme park in Sherwood Forest.
<Future - First Encounters>
STR_SCNR :Future - First Encounters
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Life has been discovered on a distant planet. Build an alien theme park to cash in on the unprecedented wave of interest.
<Future - Future World>
STR_SCNR :Future - Future World
STR_PARK :Gemini City
STR_DTLS :Show off your inventive, utopian vision of the future - come up with a futuristic park design that incorporates state-of-the-art attractions.
<Mythological - Animatronic Film Set>
STR_SCNR :Mythological - Animatronic Film Set
STR_PARK :Animatronic Antics
STR_DTLS :You have been given the task of running and improving an existing theme park, which has been built on an old film set. Build a tribute to the pioneering stop-motion animators who first brought mythical creatures to life on the silver screen.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythological - Cradle of Civilization
STR_PARK :Mythological Madness
STR_DTLS :You own an island of particular archaeological value. Youve decided to fund its preservation by constructing a theme park based on the areas rich Mythological heritage.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistoric - After the Asteroid
STR_PARK :Crater Carnage
STR_DTLS :You own a dusty old meteor crater. In the true entrepreneurial spirit, youve decided to construct an asteroid theme park and convert your seemingly worthless land into a sizeable fortune.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistoric - Jurassic Safari
STR_PARK :Coastersaurus
STR_DTLS :Youve been given the task of constructing a Jurassic era theme park. To optimize your visitors access to the exotic plant and animal exhibits, you will need to build rides going over and into the valley.
<Prehistoric - Stone Age>
STR_SCNR :Prehistoric - Stone Age
STR_PARK :Rocky Rambles
STR_DTLS :To thwart the highway developers and preserve the mysterious ancient stone circles, you will need to construct a Stone Age theme park and turn a profit. However, attracting visitors may pose a challenge, as the terrain is a tad inhospitable.
<Roaring Twenties - Prison Island>
STR_SCNR :Roaring Twenties - Prison Island
STR_PARK :Alcatraz
STR_DTLS :The infamous Prison Island - whose population once swelled with bootleggers and racketeers - is now up for sale. Youve decided to convert it into a top tourist attraction, and money is no object.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Roaring Twenties - Schneider Cup
STR_PARK :Schneider Shores
STR_DTLS :The 75th anniversary of your grandfathers Schneider Cup victory is coming up in a few years. Youre going to honor his achievement by building a theme park based on the famous seaplane race.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Roaring Twenties - Skyscrapers
STR_PARK :Metropolis
STR_DTLS :You own an empty lot near the low-rise part of town. To squeeze the most out of your urban property, build a skyscraper theme park inspired by the soaring art deco architecture of the twenties.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_PARK :Woodstock
STR_DTLS :A large annual music festival takes place on your land. Build a hip theme park to keep the free-spirited audience entertained.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_PARK :Rock n Roll Revival
STR_DTLS :This aging theme park has seen better days. Help the owner give it a retro rock n roll makeover and turn the place into a successful venue.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +0,0 @@
# STR_XXXX part is read and XXXX becomes the string id number.
# Everything after the colon and before the new line will be saved as the string.
# Use # at the beginning of a line to leave a comment.
# Follow the translation guidelines here:
# https://github.com/OpenRCT2/Localisation/wiki/Translator-guidelines:-fr_FR
STR_1526 :« Cette crème glacée de {STRINGID} est vraiment une bonne affaire »
STR_1560 :« Je ne paierai pas si cher pour une crème glacée de {STRINGID} »
STR_1968 :{WINDOW_COLOUR_2}Prix dune crème glacée :
STR_1996 :Crème glacée
STR_2024 :Crème glacées
STR_2052 :une crème glacée
STR_2080 :Crème glacée

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +0,0 @@
#version 150
uniform vec4 uPalette[256];
uniform usampler2D uTexture;
in vec2 fTextureCoordinate;
out vec4 oColour;
void main()
{
oColour = uPalette[texture(uTexture, fTextureCoordinate).r];
}

View File

@ -1,12 +0,0 @@
#version 150
in vec4 vPosition;
in vec2 vTextureCoordinate;
out vec2 fTextureCoordinate;
void main()
{
fTextureCoordinate = vTextureCoordinate;
gl_Position = vPosition;
}

View File

@ -1,44 +0,0 @@
#version 150
// clang-format off
uniform usampler2D uOpaqueTex;
uniform sampler2D uOpaqueDepth;
uniform usampler2D uTransparentTex;
uniform sampler2D uTransparentDepth;
uniform usampler2D uPaletteTex;
uniform usampler2D uBlendPaletteTex;
// clang-format on
in vec2 fTextureCoordinate;
out uint oColour;
void main()
{
uint opaque = texture(uOpaqueTex, fTextureCoordinate).r;
float opaqueDepth = texture(uOpaqueDepth, fTextureCoordinate).r;
uint transparent = texture(uTransparentTex, fTextureCoordinate).r;
float transparentDepth = texture(uTransparentDepth, fTextureCoordinate).r;
if (opaqueDepth <= transparentDepth)
{
transparent = 0u;
}
uint blendColour = (transparent & 0xff00u) >> 8;
if (blendColour > 0u)
{
if ((transparent & 0x00ffu) != 0u)
{
oColour = blendColour;
}
else
{
oColour = texture(uBlendPaletteTex, vec2(opaque, blendColour) / 256.f).r;
}
}
else
{
oColour = texture(uPaletteTex, vec2(opaque, transparent) / 256.f).r;
}
}

View File

@ -1,12 +0,0 @@
#version 150
in vec4 vPosition;
in vec2 vTextureCoordinate;
out vec2 fTextureCoordinate;
void main()
{
fTextureCoordinate = vTextureCoordinate;
gl_Position = vPosition;
}

View File

@ -1,10 +0,0 @@
#version 150
flat in uint fColour;
out uint oColour;
void main()
{
oColour = fColour;
}

View File

@ -1,31 +0,0 @@
#version 150
// Allows for about 8 million draws per frame
const float DEPTH_INCREMENT = 1.0 / float(1u << 22u);
uniform ivec2 uScreenSize;
// clang-format off
in ivec4 vBounds;
in ivec4 vClip;
in uint vColour;
in int vDepth;
// clang-format on
in mat4x2 vVertMat;
flat out uint fColour;
void main()
{
vec2 pos = clamp(vVertMat * vec4(vBounds), vec2(vClip.xy), vec2(vClip.zw));
// Transform screen coordinates to viewport coordinates
pos = (pos * (2.0 / vec2(uScreenSize))) - 1.0;
pos.y *= -1.0;
float depth = 1.0 - (float(vDepth) + 1.0) * DEPTH_INCREMENT;
fColour = vColour;
gl_Position = vec4(pos, depth, 1.0);
}

View File

@ -1,113 +0,0 @@
#version 150
// clang-format off
const int MASK_REMAP_COUNT = 3;
const int FLAG_NO_TEXTURE = (1 << 2);
const int FLAG_MASK = (1 << 3);
const int FLAG_CROSS_HATCH = (1 << 4);
const int FLAG_TTF_TEXT = (1 << 5);
uniform usampler2DArray uTexture;
uniform usampler2D uPaletteTex;
uniform sampler2D uPeelingTex;
uniform bool uPeeling;
flat in int fFlags;
flat in uint fColour;
in vec3 fTexColour;
in vec3 fTexMask;
flat in vec3 fPalettes;
in vec2 fPosition;
in vec3 fPeelPos;
// clang-format on
out uint oColour;
void main()
{
if (uPeeling)
{
float peel = texture(uPeelingTex, fPeelPos.xy).r;
if (peel == 0.0 || fPeelPos.z >= peel)
{
discard;
}
}
uint texel;
if ((fFlags & FLAG_NO_TEXTURE) == 0)
{
texel = texture(uTexture, fTexColour).r;
if (texel == 0u)
{
discard;
}
if ((fFlags & FLAG_TTF_TEXT) == 0)
{
texel += fColour;
}
else
{
uint hint_thresh = uint(fFlags & 0xff00) >> 8;
if (hint_thresh > 0u)
{
bool solidColor = texel > 180u;
texel = (texel > hint_thresh) ? fColour : 0u;
texel = texel << 8;
if (solidColor)
{
texel += 1u;
}
}
else
{
texel = fColour;
}
}
}
else
{
texel = fColour;
}
int paletteCount = fFlags & MASK_REMAP_COUNT;
if (paletteCount >= 3 && texel >= 0x2Eu && texel < 0x3Au)
{
texel = texture(uPaletteTex, vec2(texel + 0xC5u, fPalettes.z) / 256.0f).r;
}
else if (paletteCount >= 2 && texel >= 0xCAu && texel < 0xD6u)
{
texel = texture(uPaletteTex, vec2(texel + 0x29u, fPalettes.y) / 256.f).r;
}
else if (paletteCount >= 1)
{
texel = texture(uPaletteTex, vec2(texel, fPalettes.x) / 256.f).r;
}
if (texel == 0u)
{
discard;
}
if ((fFlags & FLAG_CROSS_HATCH) != 0)
{
int posSum = int(fPosition.x) + int(fPosition.y);
if ((posSum % 2) == 0)
{
discard;
}
}
if ((fFlags & FLAG_MASK) != 0)
{
uint mask = texture(uTexture, fTexMask).r;
if (mask == 0u)
{
discard;
}
}
oColour = texel;
}

View File

@ -1,56 +0,0 @@
#version 150
// Allows for about 8 million draws per frame
const float DEPTH_INCREMENT = 1.0 / float(1u << 22u);
uniform ivec2 uScreenSize;
// clang-format off
in ivec4 vClip;
in int vTexColourAtlas;
in vec4 vTexColourBounds;
in int vTexMaskAtlas;
in vec4 vTexMaskBounds;
in ivec3 vPalettes;
in int vFlags;
in uint vColour;
in ivec4 vBounds;
in int vDepth;
in mat4x2 vVertMat;
in vec2 vVertVec;
out vec2 fPosition;
out vec3 fPeelPos;
flat out int fFlags;
flat out uint fColour;
out vec3 fTexColour;
out vec3 fTexMask;
flat out vec3 fPalettes;
// clang-format on
void main()
{
// Clamp position by vClip, correcting interpolated values for the clipping
vec2 m = clamp(
((vVertMat * vec4(vClip)) - (vVertMat * vec4(vBounds))) / vec2(vBounds.zw - vBounds.xy) + vVertVec, 0.0, 1.0);
vec2 pos = mix(vec2(vBounds.xy), vec2(vBounds.zw), m);
fTexColour = vec3(mix(vTexColourBounds.xy, vTexColourBounds.zw, m), vTexColourAtlas);
fTexMask = vec3(mix(vTexMaskBounds.xy, vTexMaskBounds.zw, m), vTexMaskAtlas);
fPosition = pos;
// Transform screen coordinates to texture coordinates
float depth = 1.0 - (float(vDepth) + 1.0) * DEPTH_INCREMENT;
pos = pos / vec2(uScreenSize);
pos.y = pos.y * -1.0 + 1.0;
fPeelPos = vec3(pos, depth * 0.5 + 0.5);
fFlags = vFlags;
fColour = vColour;
fPalettes = vec3(vPalettes);
// Transform texture coordinates to viewport coordinates
pos = pos * 2.0 - 1.0;
gl_Position = vec4(pos, depth, 1.0);
}

794
debian/changelog vendored
View File

@ -1,794 +0,0 @@
openrct2 (0.4.10-develop-1) unstable; urgency=medium
* Feature: [#18171] Add port of the RCT1 Stand-Up Roller Coaster.
* Feature: [#21590] [Plugin] Plugins can now read and write banner properties of tile elements.
* Feature: [#21636] Add shortcut key for sorting tile elements.
* Feature: [objects#294] Add scenery versions of wooden truss supports.
* Feature: [objects#295] Flipped version of wooden post.
* Improved: [#21424] Extra viewports can now rotate independently from the main viewport.
* Improved: [#21561, #21631] Enable more features in Android build (plugins, networking, multiplayer, audio formats).
* Improved: [#21599] Currency signs now use non-breaking spaces.
* Improved: [objects#157] Added sloped images for many walls.
* Improved: [objects#288] Better map colours and more sensible prices for RCT1 land surfaces.
* Improved: [objects#292] Vehicle colour cleanups for WW/TT vehicles.
* Improved: [objects#299] More accurate ratings modifiers for RCT1 vehicles.
* Improved: [objects#309] Updated names for dodgems and flying saucers vehicles.
* Improved: [objects#313] buildMenuPriority for dodgems and flying saucers vehicles.
* Change: [#21529] Classify “Southern Sands”, “Tiny Towers”, “Nevermore Park”, “Pacifica” as expert scenarios.
* Change: [#21545] Reorder Wacky Worlds scenarios and adjust their difficulty classification.
* Fix: [#910] Extra viewport does not preserve the location when rotating.
* Fix: [#18413] Crash when mouse over a hacked train.
* Fix: [#20338] Cannot select Scenery Picker or Scatter Tool when the scenery recolouring tool is active.
* Fix: [#21317] Track designer allows proceeding without an object selected.
* Fix: [#21360] If the object selection is missing certain types, the Object Selection window will switch to an incorrect tab.
* Fix: [#21419] Cannot place walls underground beneath sloped tiles with clearance checks disabled.
* Fix: [#21434] Number of guests overflows in objective text.
* Fix: [#21522] Supports for 3×3 turns and 45 degree turns on the Hybrid Coaster and Wooden Roller Coaster not drawn correctly.
* Fix: [#21543] Crash with creating a TrackIterator with invalid arguments.
* Fix: [#21635] Tile inspector hotkey can set wall slope for non-slopeable objects.
* Fix: [#21641] Crash when creating track iterator from an invalid tile element.
* Fix: [#21652] Dialog window to confirm overwriting files does not apply the theme colours correctly.
* Fix: [#21654] No sound effects when using RCT Classic as an asset base.
* Fix: [#21654] Extraneous reports of an object conflict between `rct2.audio.base` and `rct2.audio.base.rctc`.
* Fix: [#21664] Crash when switching between languages that use TTF.
* Fix: [#21668] Crash when on null ride in Guest::UpdateRideLeaveExit.
* Fix: [#21691] Crash when validating rides which can't contain banked track.
* Fix: [objects#290] “Haunted Mansion” cars have a non-functional third remap colour.
* Fix: [objects#296] Incorrect wall placement around large Kremlin/drab pieces.
* Fix: [objects#300] Incorrect Colosseum and volcano corner clearances.
* Fix: [objects#319] Incorrect diagonal slope images used for RCT1 corkscrew.
* Fix: [objects#320] Incorrect Mandarin Duck boats capacity.
openrct2 (0.4.9-develop-1) unstable; urgency=medium
* Feature: [#20376] Add Ukrainian language.
* Feature: [#20709] [Plugin] Plugins can now check metadata from all registered plugins.
* Feature: [#21376] Add option to reload an object (for object developers).
* Feature: [#21413, OpenSFX#19] Add log flume lift sound effect (when “chainlift” is enabled).
* Feature: [#21455] Add option to control hidden scenery.
* Feature: [objects#282] Added RCT1 beta terrains.
* Improved: [#20093] Use new colours for guests clothing when they spawn.
* Improved: [#21356] Resize the title bar when moving between displays with different scaling factors on Windows systems.
* Improved: [#21388] Tooltips will now show even when an error message is present.
* Improved: [#21423] Add mechanism to allow building partly underground.
* Improved: [objects#272, objects#276, objects#277, objects#278, objects#279, objects#280, objects#281] Add most remaining ports of RCT1 ride and vehicle objects (for import only).
* Improved: [objects#275, objects#284, objects#286] Add remaining RCT1 walls (for import only).
* Change: [#21350] Group Dodgems and Flying Saucers vehicles.
* Change: [#21453] Reintroduce lost RCT1 Jet skis colour presets to the boat hire.
* Change: [objects#285] Mark old reversed train objects as compatibility objects.
* Fix: [#17610] Some scenery items are unavailable in RCT1 scenarios.
* Fix: [#18963] Research table in parks from Loopy Landscapes is imported incorrectly.
* Fix: [#20164] Grass and Rock terrain objects cannot be de-selected.
* Fix: [#20907] RCT1/AA scenarios use the 4-across train for the Inverted Roller Coaster.
* Fix: [#21037] Map animations in the title sequence are stuck.
* Fix: [#21208] Error message will stay open only for a brief moment when the game has been running a while.
* Fix: [#21220] When creating a new park from a SC4 file, the localised park name is not applied.
* Fix: [#21286] Cannot build unbanking turns with RCT1 vehicles.
* Fix: [#21288] Text overlaps in the “About OpenRCT2” window for Arabic, Chinese, Japanese, Korean and Vietnamese.
* Fix: [#21310] Some half loop elements require more clearance than their upward/downward counterparts.
* Fix: [#21318] Virtual Floor for building scenery is not properly invalidated.
* Fix: [#21330] Tooltips from dropdown widgets have the wrong position.
* Fix: [#21332] Mini Helicopters and Monorail Cycles ride types are swapped in research within RCT1 scenarios.
* Fix: [#21343] “Pause” and “Build Path” hotkeys do not work if top toolbar is hidden.
* Fix: [#21347] Too many options are hidden if the platform has no file picker.
* Fix: [#21350] Maze and Mini Golf track designs from RCT1 not shown in track designs list.
* Fix: [#21425] Additional missing/misplaced land & construction rights tiles in Japanese Coastal Reclaim.
* Fix: [#21484] Upkeep costs for some rides/facilities/shops are not calculated correctly.
* Fix: [#21498] Crash when the size of text cant be determined.
* Fix: [objects#262, objects#263, objects#265, objects#266, objects#267, objects#268, objects#270, objects#271, objects#283] Various errors in expansion pack objects (original bug).
* Fix: [OpenSFX#18] B&M Roar sound effect not looping correctly.
openrct2 (0.4.8-develop-1) unstable; urgency=medium
* Feature: [#21062] [Plugin] Add API for managing a guest's items.
* Improved: [#18632, #21306] Land ownership and construction rights are now shown on top of the water.
* Improved: [#20951] Activate OpenRCT2 window after using native file dialog on macOS.
* Improved: [#21184] The construction marker for rides, paths and large scenery is now shown on top of the water.
* Improved: [#21192] Tooltips will now follow the cursor.
* Improved: [#21227] Entrance style dropdown is now sorted alphabetically everywhere.
* Change: [#21200] Raise maximum lift speeds of the Reverser Coaster, Side Friction Coaster, and Virginia Reel for RCT1 parity.
* Change: [#21225] Raise maximum allowed misc entities to 1600.
* Fix: [#19494] RCT1 fence gate walls not imported properly if they were placed on slopes.
* Fix: [#20196] New scenarios start with an incorrect temperature.
* Fix: [#20255] Images from the last hovered-over coaster in the object selection are not freed.
* Fix: [#20616] Confirmation button in the track designers quit prompt has the wrong text.
* Fix: [#20628] Moving caret using Ctrl+left can move too far when using a multibyte grapheme.
* Fix: [#20631] IME window not positioned correctly.
* Fix: [#20845] Trying to save under a folder with no write permissions causes a crash.
* Fix: [#21054] “No entrance” style is selected by default in the track designer.
* Fix: [#21145] [Plugin] setInterval/setTimeout handle conflict.
* Fix: [#21157] [Plugin] Widgets do not redraw correctly when updating disabled or visibility state.
* Fix: [#21158] [Plugin] Potential crash using setInterval/setTimeout within the callback.
* Fix: [#21171] [Plugin] Crash creating entities with no more entity slots available.
* Fix: [#21178] Inca Lost Citys scenario description incorrectly states there are height restrictions.
* Fix: [#21179] Additional missing land/construction rights tiles in Inca Lost City & Renovation.
* Fix: [#21198] [Plugin] Setting brake or booster speeds on a tile element doesnt work.
* Fix: [#21290] Sound keeps playing when paused from fast-forward mode.
* Fix: [#21291] Hungry guests heading to any flat ride do not count for warning threshold (original bug).
* Fix: [#21309] Africa - Oasis & Blackpool Pleasure Beachs monorails are built outside the parks land rights.
* Fix: [#21316] Isolated land for sale tile on Extreme Hawaiian Island.
openrct2 (0.4.7-develop-1) unstable; urgency=medium
* Feature: [#12078] Add shortcut key for toggling wall slope.
* Feature: [#19919] Add diagonal brakes and diagonal block brakes to most coaster types.
* Feature: [#20141] Add additional track pieces to the Giga Coaster.
* Feature: [#20825] Made setting the game speed a game action.
* Feature: [#20830] Display author field on scenery window.
* Feature: [#20853] [Plugin] Add “BaseTileElement.owner” which is saved in the park file.
* Feature: [objects#257] Re-introduce the RCT1 road, which does not have handrails.
* Feature: [OpenMusic#46] Added Mystic ride music style.
* Feature: [OpenMusic#50] Added Rock style 4 ride music.
* Improved: [objects#261] Add composer credits on all RCT2 music objects.
* Change: [#20790] Default ride price set to free if park charges for entry.
* Change: [#20880] Restore removed default coaster colours.
* Change: [#21102] The money effect will now update even when the game is paused.
* Change: [objects#244] Update sort priorities for expansion scenery groups.
* Change: [objects#256] Use recoloured RCT2 artwork on the Fruity Ices Stall, rather than the (slightly different) RCT1 artwork.
* Fix: [#5677] Balloons pass through the ground and objects.
* Fix: [#12299] Placing ride entrances/exits ignores the Disable Clearance Checks cheat.
* Fix: [#13473] Guests complain that the default Circus price is too high.
* Fix: [#15293] TTF fonts dont format correctly with OpenGL.
* Fix: [#16453] Tile inspector invisibility shortcut does not use a game action.
* Fix: [#16926] When multiple vehicles are grouped in research, only one of them is unlocked.
* Fix: [#17774] Misplaced/missing land and construction rights tiles in RCT1 & RCT2 scenarios.
* Fix: [#18199] Dots in the game saves name no longer get truncated.
* Fix: [#19722] “Forbid tree removal” restriction doesnt forbid removal of large scenery tree items.
* Fix: [#20253] Crash when displaying a Lay-Down RCs half loop.
* Fix: [#20356] Cannot set tertiary colour on small scenery.
* Fix: [#20624] Scrolling text glitches after language is changed.
* Fix: [#20679] Android: game crashes at launch.
* Fix: [#20737] Spent money in player window underflows when getting refunds.
* Fix: [#20747] Staff speed cheat not applying to newly hired staff, UI not showing the current applied speed.
* Fix: [#20778] [Plugin] Incorrect target api when executing custom actions.
* Fix: [#20807] Tertiary colour not copied with small scenery.
* Fix: [#20964] Crash when player connects to server with a group assigned that no longer exists.
* Fix: [#20995] TTF fonts dont support hinting, outlines, or insets with OpenGL.
* Fix: [#21042] Peeps dont render properly in S4 parks.
* Fix: [objects#246, objects#248] Some objects are incorrectly marked as originating from RCT1.
* Fix: [objects#260] Submarine Ride has its capacity listed incorrectly.
openrct2 (0.4.6-develop-1) unstable; urgency=medium
* Feature: [#15660] Ability to show window buttons on the left.
* Feature: [#20680] New title sequences (https://github.com/OpenRCT2/title-sequences/releases/tag/v0.4.6).
* Feature: [OpenMusic#41] Official Title Theme by Allister Brimble.
* Improved: [#20119, #20243] Add new colour presets to several roller coasters (using the new colours).
* Improved: [#20393, #20410] Add Cyrillic characters Ґґ, Ѕѕ, Єє, Іі, Її, and Јј to the sprite font.
* Change: [#19785] OpenMusic is now selected by default when opening SC4/SC6 - or creating new - scenarios.
* Change: [#20110] Fix a few RCT1 build height parity discrepancies.
* Change: [#20550] Change SEK conversion rate from 1 GBP to 0.1 GBP.
* Fix: [#6152] Camera and UI are no longer locked at 40 Hz, providing a smoother experience.
* Fix: [#9534] Screams no longer cut-off on steep diagonal drops.
* Fix: [#17666] Using the mountain tool near the edge of the map with clearance checks disabled causes visual glitches.
* Fix: [#19450] The correct element is now auto-suggested when building a Medium Half Loop backwards.
* Fix: [#19735] Server unable to advertise to master server after a connection loss.
* Fix: [#19822] Tile inspector does not deep copy banners.
* Fix: [#19823] Parkobj: disallow overriding objects of different object types.
* Fix: [#19878] Unresearched scenery can be placed via prebuilt rides.
* Fix: [#20083] Cannot use terrain surfaces with ID > 32 and terrain edges with ID > 16.
* Fix: [#20089] Potential crash when a window is closed from another window.
* Fix: [#20103] [Plugin] Crash when custom plugin actions fail due to immutable state.
* Fix: [#20111] All coaster types can access the new diagonal slope pieces.
* Fix: [#20155] Fairground organ style 2 shows up as regular music, rather than for the merry-go-round.
* Fix: [#20260] Ride locks up when inspecting/fixing staff member is fired.
* Fix: [#20262] Title screen music missing when “random” title music is selected and RCT1 is no longer linked.
* Fix: [#20310] Map animations are not created on the title screen.
* Fix: [#20342] Large Half Loop (left) now only appears once in the special elements dropdown.
* Fix: [#20361] Crash when using random map generation.
* Fix: [#20364] Adding too much money with cheats causes an overflow.
* Fix: [#20365] Money cheat input does not support negative values.
* Fix: [#20389] Reversed vehicles are now correctly banked on diagonal slopes.
* Fix: [#20413] Crash when attempting to navigate an empty console history.
* Fix: [#20417] Plugin/custom windows are missing the left border in the title bar.
* Fix: [#20429] Error window tooltip not closing after 8 seconds.
* Fix: [#20456] Downward large half loops on flying coasters (fly-to-lie) are now correctly named.
* Fix: [#20484] Console caret not properly updated when using command history.
* Fix: [#20496] Ride rating requirements for compact inverted coasters is no longer relaxed.
* Fix: [#20543] Crash using show segments height from debug paint options.
* Fix: [#20607] Infinite loop when renaming rides with default names longer than 32 bytes.
* Fix: [#20642] Track list is sometimes empty due to uninitialized data for the filter string.
* Fix: [#20659] Phantom rides remain when closing construction window while paused.
* Fix: [#20672] Maze ghost elements incorrectly displayed.
* Fix: [#20684] Footpath additions getting removed by Miniature railway ghost elements.
* Fix: [#20693] Incorrect information shown when hovering over station when another station before it was removed.
* Fix: [#20739] Build version info on title screen leaving stray pixels when the camera is moved.
openrct2 (0.4.5) stable; urgency=medium
* Feature: [#18713] Block brakes have speed control and brakes slower than adjacent block brakes copy block brake speed when block brake open.
* Feature: [#19276] Add Powered Lifthill to Giga Coaster.
* Feature: [#19305] Add new Reversed Trains ride setting to run trains backwards, granting a bonus to ride ratings.
* Feature: [#19305] [Plugin] Add “Car.isReversed” to allow individual ride vehicles to run backwards.
* Feature: [#19446] Add new color options to color dropdown.
* Feature: [#19547] Add large sloped turns to hybrid coaster and single rail coaster.
* Feature: [#19930] Add plugin APIs for research.
* Feature: [OpenMusic#25] Added Prehistoric ride music style.
* Feature: [OpenMusic#26] Fairground Organ style 2 with new recordings from Herman's 35er Voigt (Previously known as Bressingham Voigt).
* Feature: [OpenMusic#28] Add Ragtime style 2 ride music.
* Improved: [#17739] Raise water and land height limits to 254 units/182m/600ft.
* Improved: [#18490] Reduce guests walking through trains on level crossing next to station.
* Improved: [#18996] When marketing campaigns are disabled, disable the Marketing tab in the Finances window.
* Improved: [#19764] Miscellaneous scenery tab now grouped next to the all-scenery tab.
* Improved: [#19830] “Highlight path issues” will now hide wall elements.
* Improved: [#19905] Add prompt before resetting shortcut keys.
* Improved: [#19952] Add colour preset to Spiral Slide using the new colour options.
* Improved: [#19953] Add keyboard shortcut to Keyboard Shortcuts window.
* Improved: [#20055] Performance improvement for the software renderer.
* Change: [OpenSFX#17] Update Hybrid RC lifthill loop.
* Fix: [#12598] Number of holes is not set correctly when saving track designs.
* Fix: [#13130] Android always defaulting to UK locale for language, currency and temperature.
* Fix: [#13397] Ride simulation causes strange station behaviour and makes the ride unusable in some cases.
* Fix: [#16791] Rotodrop top piece replicates when walls are placed around it and clearance checks are disabled (original bug).
* Fix: [#18583] Land dropdown is incorrect if there are surface entry index holes.
* Fix: [#18895] Responding mechanic blocked at level crossing.
* Fix: [#19231] Crash due to null pointer to previously deleted banner in tile copy/paste functionality.
* Fix: [#19296] Crash due to a race condition for parallel object loading.
* Fix: [#19733] Favorite ride of X guests integer overflow.
* Fix: [#19756] Crash with title sequences containing no commands.
* Fix: [#19767] No message when path is not connected to ride exit and is therefore unreachable for mechanics.
* Fix: [#19800] Crash when displaying station stats with more than 62 stations.
* Fix: [#19801] The in-game load/save window cannot be resized anymore.
* Fix: [#19854] Looping Coaster trains clipping through steep quarter turns down.
* Fix: [#19858] Issue drawing simulate flag icon on alternate colour palettes.
* Fix: [#19901] Random shop colours never assigning last colour.
* Fix: [#19911] Guests stuck at certain railway crossings.
* Fix: [#19924] Destructible cheat does not allow partial ride modification.
* Fix: [#19950] Mine train block brake supports drawn incorrectly.
* Fix: [#19955] Mine Train Roller Coaster has incorrect supports on the sloped left small turn (original bug).
* Fix: [#19987] [Plugin] SetCheatAction has wrong ID in plugin API.
* Fix: [#20016] The group box for small scenery details in the Tile Inspector window has unused empty space.
* Fix: [#20018] Shops not calculating up-keep cost.
* Fix: [#20033] Asset packs cannot reference game data.
* Fix: [#20104] [Plugin] Some network APIs use player index and group index.
* Fix: [#20099] Some scrollbar is glitched or have incorrect size when open window for the first time
* Fix: [#20134] Grass length being updated for tiles in the void, causing unneccesary drawing operations.
openrct2 (0.4.4) stable; urgency=medium
* Feature: [#11269] Add properties for speed and length of vehicle animations.
* Feature: [#15849] Objectives can now be set for up to 50000 guests.
* Feature: [#18537] Add shift/control modifiers to window close buttons, closing all but the given window or all windows of the same type, respectively.
* Feature: [#18732] [Plugin] API to get the guests thoughts.
* Feature: [#18744] Cheat to allow using a regular path as a queue path.
* Feature: [#19023] Add Canadian French translation.
* Feature: [#19341] Add “All Scenery” tab to scenery window.
* Feature: [#19378] Add command to combine CSG1i.DAT and CSG1.DAT.
* Feature: [objects#226] Port RCT1 Corkscrew Coaster train.
* Feature: [objects#229] Port RCT1 go karts with helmets.
* Feature: [OpenMusic#20, OpenMusic#21] Added Blizzard and Extraterresterial ride music styles.
* Improved: [#11473] Hot reload for plug-ins now works on macOS.
* Improved: [#12466] RCT1 parks now use RCT1s interest calculation algorithm.
* Improved: [#14635] Scenery window now shows up to 255 scenery groups.
* Improved: [#17288] Reorganise the order of shortcut keys in the Shortcut Keys window.
* Improved: [#18706] Ability to view the list of contributors in-game.
* Improved: [#18749] Ability to have 4 active awards for more than one month in a row.
* Improved: [#18826] [Plugin] Added all actions and their documentation to plugin API.
* Improved: [#18945] Languages can now fall back to other languages than English.
* Improved: [#18970] Trying to load a non-park save will now display a context error.
* Improved: [#18975] Add lift sprites for steep hills on the wooden roller coaster.
* Improved: [#19044] Added special thanks to RMC and Wiegand to the About page.
* Improved: [#19131] Track missing objects when selecting scenery groups in console.
* Improved: [#19253] Queue junctions drawn properly when using regular paths as queue. Note: Requires using tile inspector to indicate railings can be used at T or X junctions.
* Improved: [#19067] New Ride window now allows filtering similarly to Object Selection.
* Improved: [#19272] Scenery window now allows filtering similarly to Object Selection.
* Improved: [#19447] The control key now enables word jumping in text input fields.
* Improved: [#19463] Added W and Y with circumflex to sprite font (for Welsh).
* Improved: [#19549] Enable large address awareness for 32 bit Windows builds allowing to use 4 GiB of virtual memory.
* Improved: [#19668] Decreased the minimum map size from 13 to 3.
* Improved: [#19683] The delays for ride ratings to appear has been reduced drastically.
* Improved: [#19697] “Show guest purchases” will now work in multiplayer.
* Change: [#19018] Renamed actions to fit the naming scheme.
* Change: [#19091] [Plugin] Add game action information to callback arguments of custom actions.
* Change: [#19233] Reduce lift speed minimum and maximum values for “Classic Wooden Coaster”.
* Removed: [#19520] Support for Windows Vista systems.
* Fix: [#474] Mini golf window shows more players than there actually are (original bug).
* Fix: [#592] Window scrollbar not able to navigate to the end of large lists.
* Fix: [#7210] Land tile smoothing occurs with edge tiles (original bug).
* Fix: [#17996] Finances window not cleared when starting some .park scenarios.
* Fix: [#18260] Crash opening parks that have multiple tiles referencing the same banner entry.
* Fix: [#18467] “Selected only” Object Selection filter is active in Track Designs Manager, and cannot be toggled.
* Fix: [#18904] OpenRCT2 audio object accidentally exported in saves.
* Fix: [#18905] Ride Construction window theme is not applied correctly.
* Fix: [#18911] Mini Golf station does not draw correctly from all angles.
* Fix: [#18971] New Game does not prompt for save before quitting.
* Fix: [#18986] [Plugin] Sending remote scripts larger than 63KiB crashing all clients.
* Fix: [#18994] Title music doesnt start after enabling master volume.
* Fix: [#19025] Park loan behaves inconsistently with non-round and out-of-bounds values.
* Fix: [#19026] Park loan is clamped to a 32-bit integer.
* Fix: [#19068] Guests may not join queues correctly.
* Fix: [#19091] [Plugin] Remote plugins in multiplayer servers do not unload properly.
* Fix: [#19112] Clearing the last character in the Object Selection filter does not properly reset it.
* Fix: [#19112] Text boxes not updated with empty strings in Track List, Server List, and Start Server windows.
* Fix: [#19114] [Plugin] GameActionResult does not comply to API specification.
* Fix: [#19136] SV6 saves with experimental RCT1 paths not imported correctly.
* Fix: [#19243] .park scenarios dont complete properly.
* Fix: [#19250] MusicObjects do not free their preview images.
* Fix: [#19292] Overflow in totalRideValue.
* Fix: [#19339] Incorrect import of crashed particles from SV4.
* Fix: [#19379] “No platforms” station style shows platforms on the Junior Roller Coaster.
* Fix: [#19380] Startup crash when no sequences are installed and random sequences are enabled.
* Fix: [#19391] String corruption caused by an improper buffer handling in GfxWrapString.
* Fix: [#19434, #19509] Object types added by OpenRCT2 do not get removed when executing remove_unused_objects.
* Fix: [#19475] Cannot increase loan when more than £1000 in debt.
* Fix: [#19493] SV4 saves not importing the correct vehicle colours.
* Fix: [#19517] Crash when peeps try to exit or enter hacked rides that have no waypoints specified.
* Fix: [#19524] Staff counter shows incorrect values if there are more than 32767 staff members.
* Fix: [#19574] Handle exits in null locations.
* Fix: [#19641, #19643] Missing water tile in Infernal Views and Six Flags Hollands river.
openrct2 (0.4.3) stable; urgency=medium
* Feature: [#17782] The Flying Coaster now has access to boosters and can draw outside loops.
* Feature: [#17997] The Log Flume can now draw steep pieces down (if vehicle allows it).
* Feature: [#18312, objects#220, OpenSFX#13] New sound effects for the Hybrid and Single Rail roller coasters.
* Feature: [#18675] [Plugin] Plugins can refer to g2 image icons by name.
* Feature: [objects#173] Add alpine coaster vehicle.
* Feature: [objects#221] Add two extra jungle walls.
* Feature: [objects#225] Add log cabin roofs.
* Feature: [OpenMusic#14, OpenMusic#15, OpenMusic#18] Added Galaxy, Acid and Dodgems ride music styles.
* Improved: [#18013, #18016, #18018, #18019, #18514, objects#224] Added colour presets to Spiral Slide, Dodgems, Boat Hire, Flying Saucers, and Car Ride.
* Improved: [#18024] Clearer error messages when loading incompatible .park files.
* Improved: [#18192] Tycoon Park has been added to the Extras tab.
* Improved: [#18214] Competition scenarios have received their own section.
* Improved: [#18250] Added modern style file and folder pickers on Windows.
* Improved: [#18332] Allow Inverted Roller Coaster to draw boosters.
* Improved: [#18350] Changed ride vehicle list to have less padding.
* Improved: [#18422] Allow adding images to music objects.
* Improved: [#18428] [Plugin] Add widget description interfaces to documentation.
* Improved: [#18487] Mini Helicopters track can now draw spinning tunnels.
* Improved: [#18591] Order RollerCoaster Tycoon 2 scenarios by difficulty.
* Improved: [#18607] A new tab for all UCES Scenarios, if its installed.
* Improved: [#18621] OpenGL performance.
* Change: [#17677] Open campaign window from finished campaign news.
* Change: [#17998] Show cursor when using inverted mouse dragging.
* Change: [#18230] Make the large flat to steep pieces available on the corkscrew roller coaster without cheats.
* Change: [#18381] Convert custom invisible paths to the built-in ones.
* Change: [OpenSFX#11, OpenMusic#19] First implementation of official replacement asset packs for sound effects & music.
* Fix: [#1491] Clearance of the Cash Machine is too low (original bug).
* Fix: [#1519] “See-through rides” doesn't affect all rides (original bug).
* Fix: [#6341] “Unlock vehicle limits” does not allow setting fewer vehicles than the vehicle type requires.
* Fix: [#14312] Research ride type message incorrect.
* Fix: [#14425] Ride ratings do not skip unallocated ride ids.
* Fix: [#15969] Guests heading for ride use vanilla behaviour
* Fix: [#17067] Random Staff Patrol Area clicks.
* Fix: [#17316] Sides of River Rapids corners overlay other parts of the track.
* Fix: [#17657] When switching from buying land rights to buying construction rights, grid disables and won't re-enable afterwards.
* Fix: [#17763] Missing validation on invalid characters in file name.
* Fix: [#17853] Invention name tears while being dragged.
* Fix: [#18064] Unable to dismiss notification messages.
* Fix: [#18070] Underground entrance/exit shows through terrain walls (original bug).
* Fix: [#18094] Underground shops & facilities don't show when adjacent to non-underground path (original bug).
* Fix: [#18122] Ghosts count towards “Great scenery!” guest thought.
* Fix: [#18134] Underground on-ride photo section partially clips through adjacent terrain edge.
* Fix: [#18244] Invention DragWindow's starting position is inconsistent.
* Fix: [#18245] Guests stopping dead in their tracks at railway crossings.
* Fix: [#18257] Guests waiting on extended railway crossings.
* Fix: [#18354] Overwrite alert does not show when save name has different casing on Windows.
* Fix: [#18379] Tunnel entrances for underground Mini Golf Hole E are not rendered correctly.
* Fix: [#18442] About window background is clickable.
* Fix: [#18449] [Plugin] Change type of listview widgets from 'scroll_view' to 'listview'.
* Fix: [#18453] Slow walking guests don't get across level crossings in time.
* Fix: [#18469] Land rights window buttons incorrectly disabled and markers remain visible indefinitely.
* Fix: [#18459] Highlight path issues hides fences for paths with additions.
* Fix: [#18552] Trains clipping through helixes.
* Fix: [#18576] Cannot open parks with certain types of corrupt tile elements.
* Fix: [#18606] JSON objects do not take priority over the DAT files they supersede.
* Fix: [#18620] [Plugin] Crash when reading widget properties from windows that have both static and tab widgets.
* Fix: [#18653] Negative ratings multipliers do not appear in Vehicle tab.
* Fix: [#18696] Construction rights cannot be viewed after all are purchased.
* Fix: [#18720] Upwards helix is enabled for the Alpine Coaster, even when cheats are off.
* Fix: [#18755] Ferris Wheel and Circus ghosts not coloured correctly.
* Fix: [#18802] Game could crash when determining if a mechanic is heading to fix the ride blocking the path.
openrct2 (0.4.2) stable; urgency=medium
* Feature: [#6326] Ability to load .SV6 files from RCT Classic that have more than 9601 guests.
* Feature: [#6570, #10860, #17929] Fully support RollerCoaster Tycoon Classic as a RCT2 base install path.
* Feature: [#13634] Add ability to sell merchandise in random colours.
* Feature: [#16164] Add new track elements for Flying Coaster and Lay-Down Coaster and add paint code for more elements.
* Feature: [#16283] Added parkinfo command line tool to list objects in a save file.
* Feature: [#16662] Show a warning message when g2.dat is mismatched.
* Feature: [#17107] Ride operating settings can be set via text input.
* Feature: [#17638] Added Zero G rolls, medium loops and large corkscrews to the Hybrid and Single-Rail coasters.
* Feature: [#17821] [Plugin] Add API for track subpositions and vehicle subposition.
* Feature: [#17877] Add three real-life flying roller coaster colour schemes.
* Feature: [#17900] Add “Classic Wooden Coaster” with shallow banked turns.
* Feature: [#18057] Staff members now wait for passing or stalled vehicles before crossing railway tracks.
* Feature: [#18168] Add additional track pieces to the LIM Launched Coaster and the Looping Coaster.
* Feature: [objects#198] Add additional pirate roofs.
* Feature: [objects#205] Add additional glass roofs.
* Feature: [objects#209] Add the Steel Roller Coaster train and 2-across Inverted Train from RollerCoaster Tycoon 1.
* Feature: [#18050] Add asset pack manager and asset packs.
* Improved: [#15358] Park and scenario names can now contain up to 128 characters.
* Improved: [#15589] Numpad Enter can now be used to close text input.
* Improved: [#16819] Dont prompt to “Save game as” when saving a loaded saved game (excepting autosaves).
* Improved: [#16840] Add support for rectangular heightmaps.
* Improved: [#17575] You can now search for Authors in Object Selection.
* Improved: [#17806] Added warning when using RCT1 objects without RCT1 linked.
* Improved: [#17868] [Plugin] You can now change active tab of a custom window programmatically.
* Improved: [#17909] Track elements that are not supported by any train are now hidden by default.
* Improved: [#17924] Improved performance when loading JSON object images from a .DAT file.
* Improved: [#17955] Modifying ratings via in-game console is now multiplayer-safe and also freezes the ratings.
* Improved: [#18177] [Plugin] Widget tooltips can now be read and changed.
* Change: [#9104] Calculate maze support costs.
* Change: [#17319] Giant screenshots are now cropped to the horizontal view-clipping selection.
* Change: [#17499] Update error text when using vehicle incompatible with TD6 and add error when using incompatible track elements.
* Change: [#17655] Lower default price for the Crooked House.
* Change: [#17745] Make maintenance cost of Mini-Golf more balanced.
* Change: [#17762] Use vertical tabs in the New Game dialog.
* Change: [#18113] Increased limit of Loan Interest in Scenario Editor to 255%.
* Fix: [#5141] Headless server is counted as a player.
* Fix: [#7466] Coaster track not drawn at tunnel exit.
* Fix: [#10535] Guests getting stuck at specific level crossings.
* Fix: [#14337] Guest blocking ride entrance after ride price changed to be unaffordable.
* Fix: [#15328] Wooden Roller Coaster incorrectly draws a railing on the first station piece (original bug).
* Fix: [#16392] Scenery on sloped surface is placed at wrong height.
* Fix: [#16476] The game sometimes crashes when demolishing a maze.
* Fix: [#17053] Crash when trying to open files under 4 bytes in length.
* Fix: [#17312] (Flying) Inline Twist appearing under the surface when placed on ground level.
* Fix: [#17339] Distorted visuals when changing scaling factor between integer numbers in OpenGL rendering mode.
* Fix: [#17394] Six-seater Hyper-Twister Trains focuses ride window camera on Car 2 rather than Car 1 (original bug).
* Fix: [#17430] Possible crash when toggling tile element visibility in multiplayer.
* Fix: [#17444] “Manta Ray” boats slowed down too much in “Ayers Rock” scenario (original bug).
* Fix: [#17503] Parks with staff with an ID of 0 have all staff windows focus on that staff.
* Fix: [#17508] Grid doesnt disable after setting patrol area.
* Fix: [#17532] Object Selection window allows unselecting all station types.
* Fix: [#17533] Missing audio when specifying --rct2-data-path.
* Fix: [#17535] Multiplayer desync when placing rides with scenery.
* Fix: [#17541] Station style not correctly saved to TD6.
* Fix: [#17542] Stalls will autorotate towards paths outside the park.
* Fix: [#17544, #17754] Visual glitches in Invention List window.
* Fix: [#17553] Crash when moving invention list items to empty list.
* Fix: [#17571] All researched tracked rides show up as new vehicles in .park scenarios.
* Fix: [#17600] Notifications are not properly cleared when loading a park.
* Fix: [#17605] Crash when opening parks which have had objects removed externally.
* Fix: [#17639, 17735] When building upside down, the special elements list contains many items twice (original bug).
* Fix: [#17664] Unable to save after an extended period of time due to inactive ride music data leaking.
* Fix: [#17703] (undefined string) when building on invalid height.
* Fix: [#17776] “Other Parks” tab uses separate lists for SC4/SC6 and .park scenarios.
* Fix: [#17784] Colour preset RNG is biased (original bug).
* Fix: [#17788] Guests could leave queue if another guest rejoins it from the entrance building.
* Fix: [#17834] Finance window becomes blank after 4096 years.
* Fix: [#17816] Option to pause game when Steam Overlay is active is not greyed out when using the OpenGL renderer.
* Fix: [#17897] Guest can get stuck on tiles with construction rights outside the park.
* Fix: [#17904] Trees are removed at no cost to make way for ride entrance/exits.
* Fix: [#17905] The chain button in the map window is enabled for rectangular maps when (re)opened.
* Fix: [#17931] The in-game command count_objects crashes the game.
* Fix: [#17865] With difficult guest generation, tested but unopened rides still contribute to the guest cap.
* Fix: [#17866] [Plugin] Wrong Soft Guest Cap at start of new game.
* Fix: [#17889] Peeps dont stop at level railway crossings if approached from downhill.
* Fix: [#17980] Queue lines of track designs mess up existing queue lines if dragged through them.
* Fix: [#17959] Areas marked for dirty drawing are too large.
* Fix: [#17963] Some marketing campaigns cant be started after Finances window tab has been on Research.
* Fix: [#17964] Sprites dont show up on two sides of the view-clip selection.
* Fix: [#17966] Reversed steel trains do not properly import from S4.
* Fix: [#17973] Bins and lamps overlay parts of the land (original bug).
* Fix: [#18008] Steeplechase S-bends has multiple gaps visible in the tracks (original bug).
* Fix: [#18009] Visual glitch with litter at edge of sloped path.
* Fix: [#18025] Fix land ownership in Six Holland, Six Flags Magic Mountain, North America - Grand Canyon and Asia - Great Wall of China Tourism Enhancement scenarios.
* Fix: [#18026] Park rating drops to 0 with more than 32k guests, total ride excitement or intensity.
* Fix: [#18032] All non-interactive widgets (labels, groupboxes) produce sound when clicked.
* Fix: [#18035] Favourited servers dont get their online status updated.
* Fix: [#18051] Visual glitch with Mine Rides large unbanked turn (original bug).
* Fix: [#18059] [Plugin] Width and height of custom window not changeable via script.
* Fix: [#18063] Guests can stop for all kinds of actions at railway crossing.
* Fix: [#18087] Bank balance is clamped to a 32-bit integer every transaction.
openrct2 (0.4.1) stable; urgency=medium
* Feature: [#16825] Add Alpine Coaster track type.
* Feature: [#17011] Option to show ride vehicles as separate entries when selecting a ride to construct.
* Feature: [#17217] Add FLAC and OGG/vorbis as supported audio formats for ride music objects.
* Feature: [#12328, #17418] Add vehicles for the Hybrid Coaster, Single-Rail Roller Coaster and Classic Mini Roller Coaster.
* Improved: [#7983] The red colour in the ride stat screen and the ride graphs now corresponds better to negative effects on a rides stats.
* Improved: [#13966] Music Style dropdown is now sorted by name.
* Improved: [#16978] Tree placement is more natural during map generation.
* Improved: [#16992] The checkbox in the visibility column of the Tile Inspector has been replaced with an eye symbol.
* Improved: [#16999] The maximum price for the park entry has been raised to £999.
* Improved: [#17050] Transparency can be enabled directly without needing see-through enabled first.
* Improved: [#17059] Show Tile Inspector usage hint when nothing is selected.
* Improved: [#17199] Allow creation of Spiral Slide reskins.
* Improved: [#17242] More natural looking shorelines in map generator.
* Improved: [#17328] Parks can now be resized into rectangular shapes from the map and map generation windows.
* Change: [#16952] Make “Object Selection” order more coherent.
* Change: [#17002] Weather no longer resets when converting a save to scenario.
* Change: [#17294] New ride window remembers scroll position per tab instead of highlighted ride.
* Removed: [#16864] Title sequence editor (replaced by plug-in).
* Removed: [#16911, #17411] Residual support for pre-Vista Windows systems.
* Fix: [#13997] Placing a track design interferes with other players building a ride.
* Fix: [#15787] When deselecting "Show banner text in upper case", the banners remain upper case for 10 seconds.
* Fix: [#16539] CustomListView header not clickable when listview is scrolled.
* Fix: [#16799] Browsing “Up” in the Load Save window shows no files, only folders.
* Fix: [#16934] Park size displayed incorrectly in Park window.
* Fix: [#16974] Small scenery ghosts can be deleted.
* Fix: [#16989] Re-focusing maximised window triggers a restore and maximise.
* Fix: [#17005] Unable to set patrol area for first staff member in park.
* Fix: [#17017] [Plugin] Crash when using tile element properties that require a valid ride to be linked.
* Fix: [#17073] Corrupt ride window and random crashes when trains have more than 144 cars.
* Fix: [#17080] “Remove litter” cheat does not empty litter bins.
* Fix: [#17099] Object selection thumbnail box is one pixel too tall.
* Fix: [#17104] Changing map size does not invalidate park size.
* Fix: [#17157] Crash when browsing “Up” to folder with CJK characters in its name.
* Fix: [#17187] Text input window does not resize correctly.
* Fix: [#17197] Segfault when extracting files from the GOG installer.
* Fix: [#17205] Map generator sometimes crashes when not all standard terrain objects are available.
* Fix: [#17221] Object ghosts and tooltips follow invisible cursor when moving the viewport by right-click dragging.
* Fix: [#17255] Cursor position is incorrect when adjusting terrain and water height.
* Fix: [#17257] [Plugin] Add tertiary colour to large scenery scripting API.
* Fix: [#17261] Hand cursor position is incorrect when dragging items in the Inventions List window.
* Fix: [#17292] Rows in shortcut key list stay highlighted when cursor leaves list.
* Fix: [#17295] Pause status not cleared when loading a scenario made from a converted paused save.
* Fix: [#17310] Reversed reversible vehicles not imported properly when loading RCT1 parks.
* Fix: [#17335] [Plugin] Documentation has an incorrect type for PixelData data attribute.
* Fix: [#17337] Air Powered Vertical Coaster trains not imported properly when loading RCT1 parks.
* Fix: [#17346] Surface height markers are concealed by sprites of same surface.
* Fix: [#17369] [Plugin] Car.travelBy() moves other cars as well.
* Fix: [#17377] When building the park entrance before opening the Footpaths window, the path will be invisible.
* Fix: [#17381] Air Powered Vertical Coaster stat penalty is wrong.
* Fix: [#17399] Guests never generate the being watched thought.
* Fix: [#17433] Wrong T-shirt colours for guests on a Twist ride.
* Fix: [#17450] Ducks can swim on three-corners-up land tile.
* Fix: [#17461] Footpath Railing tooltip showing incorrect tooltip.
* Fix: [#17464] Green Tarmac footpath is not available in the Track Designer.
* Fix: [#17466] New object types not packed in save files.
* Fix: [#17481] Roto-drop cars try going up to top pieces that are ghosts or belong to other rides.
openrct2 (0.4.0) stable; urgency=medium
* Headline feature: [#10664] New save format with increased limits.
* Feature: [#714] Allow up to 255 trains per ride.
* Feature: [#2253] Path surfaces and railings can be mixed and matched, like in RCT1.
* Feature: [#2766] The Fruity Ices Stall can now be recoloured, like in RCT1.
* Feature: [#4933] Allow map sizes of 999 × 999 (up from 254 × 254).
* Feature: [#7660] Custom music objects that are distributed with the save.
* Feature: [#8407] Ride platforms can be made invisible.
* Feature: [#12793] Add Excitement/Intensity/Nausea ratings to Ride List view with sorting.
* Feature: [#13858] Flatride bases can be made invisible.
* Feature: [#14676] [Plugin] Allow plugins to store data in .park files.
* Feature: [#15367] Individual track elements can now be drawn as another ride type.
* Feature: [#15901] [Plugin] Add map.getAllEntitiesOnTile to API.
* Feature: [#16029] [Plugin] Add TrackElement.rideType to API.
* Feature: [#16097] The Looping Roller Coaster can now draw all elements from the LIM Launched Roller Coaster.
* Feature: [#16132, #16389] The Corkscrew, Twister and Vertical Drop Roller Coasters can now draw inline twists.
* Feature: [#16144] [Plugin] Add ImageManager to API.
* Feature: [#16707] [Plugin] Implement intransient plugins.
* Feature: [#16707] [Plugin] New API for current mode, map.change hook and toolbox menu items on title screen.
* Feature: [#16731] [Plugin] New API for fetching and manipulating a staff members patrol area.
* Feature: [#16800] [Plugin] Add lift hill speed properties to API.
* Feature: [#16806] Parkobj can load sprites from RCT image archives.
* Feature: [#16831] Allow tertiary colours for small and large scenery objects.
* Feature: [#16872] [Plugin] Add support for custom images.
* Improved: [#3517] Cheats are now saved with the park.
* Improved: [#10150] Ride stations are now properly checked if theyre sheltered.
* Improved: [#10664, #16072] Visibility status can be modified directly in the Tile Inspectors list.
* Improved: [#16251] Plugin API handles null values better.
* Improved: [#16251] openrct2.d.ts: mark callback argument of queryAction and executeAction as optional.
* Improved: [#16251] openrct2.d.ts: change network.status to network.mode in network API docs.
* Improved: [#16251] openrct2.d.ts: added previously undocumented GroupBoxWidget.text property.
* Improved: [#16251] openrct2.d.ts: removed unused LabelWidget.onChange property.
* Improved: [#16258] Increased image limit in the engine.
* Improved: [#16408] Improve --version cli option to report more compatibility information.
* Improved: [#16740] Allow staff patrol areas to be defined with individual tiles rather than groups of 4x4.
* Improved: [#16764] [Plugin] Add hook map.save, called before the map is saved.
* Improved: [#16925] The queue length of 1000 guests is lifted, and a warning for too long queues is added instead.
* Change: [#14484] Make the Heartline Twister coaster ratings a little bit less hateful.
* Change: [#16077] When importing SV6 files, the RCT1 land types are only added when they were actually used.
* Change: [#16424] Following an entity in the title sequence no longer toggles underground view when its underground.
* Change: [#16493] Boat Hire and Submarine Ride support costs now match their visual appearance.
* Change: [#16710] Changed default view of Guest List to Thoughts and selected tab will default to Summarised (when opened from the menu).
* Change: [#16859] Guests with umbrellas no longer always avoid going into a Maze.
* Change: [#16912] Tired or nauseated guests will no longer jump in a Maze.
* Fix: [#6767] Black screen after Alt-Tabbing back into the game.
* Fix: [#11752] Track pieces with fractional cost are too cheap to build.
* Fix: [#12556] Allow game to run without audio devices.
* Fix: [#12774] [Plugin] Scripts will not be re-initialised when a new scenario is loaded from within a running scenario.
* Fix: [#13336] Can no longer place Bumble Bee track design (reverts #12707).
* Fix: [#14155] Map Generator sometimes places non-tree objects as trees.
* Fix: [#14674] Recent Messages only shows first few notifications.
* Fix: [#14920] Ghosts for rides and shops do not auto-elevate when obscured.
* Fix: [#15413] Modifying park rating with plugins desyncs park rating history from actual park rating.
* Fix: [#15571] Non-ASCII characters in scenario description get distorted while saving.
* Fix: [#15830] Objects with RCT1 images are very glitchy if OpenRCT2 is not linked to an RCT1 install.
* Fix: [#15909] Text can overflow in Select ride design windows.
* Fix: [#15947, #15960] Removing a flat ride results in an error message and duplicate structures.
* Fix: [#15998] Cannot set map size to the actual maximum.
* Fix: [#16007] Scenario Editor “Entry Price” appears to the right of the value field.
* Fix: [#16008] Tile Inspector can select elements from last tile without reselecting it.
* Fix: [#16024] Go-Karts with more than 32 vehicles do not colour themselves correctly.
* Fix: [#16026] Newly created rides with “Disable vehicle limits” cheat always get 32 trains with 12 cars each.
* Fix: [#16063] Object Selection preview for objects with glass is broken.
* Fix: [#16075] Exporting track designs saves scenery in incorrect locations.
* Fix: [#16087] The Looping Roller Coaster booster is now always drawn correctly.
* Fix: [#16140] The Follow this option is now disabled when the ride view is set to overall or a station.
* Fix: [#16162] Go Karts speeds are not correctly randomised, they only go very fast or very slow.
* Fix: [#16188] Medium-size banked turns on the Twister and Vertical Roller Coaster have incorrect support placement (partly original bug).
* Fix: [#16264, #16572] Placing saved track design crashes game.
* Fix [#16308] Crash when trying to place down a ride on Android.
* Fix: [#16327] Crash on malformed network packet.
* Fix: [#16449] [Plugin] Viewport doesn't hide when switching tabs.
* Fix: [#16450] Banner style not copied when using tile inspector.
* Fix: [#16535] Entering construction mode unblocks all paths.
* Fix: [#16542] “Same price throughout park” status not correctly imported for RCT1 saves.
* Fix: [#16572] Crash when trying to place track designs.
* Fix: [#16591] [Plugin] setInterval and setTimeout is not disposed when map unloads.
* Fix: [#16711] [Plugin] Car.rideObject overflowing with more than 256 ride types.
* Fix: [#16779] Fix case where title music doesn't unmute properly.
* Fix: [#16808] Incorrect track design serialisation causing vehicle object replacement.
* Fix: [#16869] Soft Toy Stall cannot be recoloured, but shows a recolouring option anyway (original bug).
* Fix: [#16995] Native Linux dialog windows do not open if the path contains single quotes.
* Fix: [objects#165] Glitch when Bengal Tiger Cars go through a corner.
openrct2 (0.3.5.1) stable; urgency=medium
* Improved: [#12825, #12869] The Tile Inspector windows layout has been tweaked slightly.
* Change: [#15899] Weird bonus for path 0 - likely intended as a queue bonus (original bug).
* Fix: [#15138] Sometimes small scenery stays when building through it.
* Fix: [#15620] Placing track designs at locations blocked by anything results in wrong error message.
* Fix: [#15843] Tile Inspector can be resized too small.
* Fix: [#15844] Tile Inspector has inconsistent text colours.
* Fix: [#15878] Crash when opening a ride window for a corrupted vehicle.
* Fix: [#15908] Crash when track elements have no ride assigned.
* Fix: [#15919] Research status incorrectly considered for scenery when in editor modes.
* Fix: [#15938] Track designs of some ride types are incorrectly exported to TD6.
openrct2 (0.3.5) stable; urgency=medium
* Feature: [#3868] Initial support for using TTF in OpenGL mode (still contains bugs).
* Feature: [#7682] Follow ride/guest/staff in main window viewport.
* Feature: [#13407] Allow building chain lifts on enclosed dinghy slide pieces when cheats are on.
* Feature: [#15084] [Plugin] Add "vehicle.crash" hook.
* Feature: [#15143] Added a shortcut key for Giant Screenshot.
* Feature: [#15164] Highlight elements selected by the Tile Inspector, tracks are currently not supported.
* Feature: [#15165] [Plugin] Add the ability to create entities using "map.createEntity".
* Feature: [#15194] [Plugin] Add guest properties, ride downtime and park casualty penalty.
* Feature: [#15195] Added a bug-report item in file dropdown menu.
* Feature: [#15294] New vehicle animation type: flying animal.
* Fix: [#10614] Track Designs with missing path(s) do not use alternate pathways.
* Fix: [#12981] New vehicles do not appear in vehicle type dropdown.
* Fix: [#13465] Creating a scenario based on a won save game results in a scenario thats instantly won.
* Fix: [#13912] “Dome park” no longer renders dome correctly.
* Fix: [#14316] Closing the Track Designs Manager window causes broken state.
* Fix: [#14482, #15258] Rides with invisibility hacks sometimes behave incorrectly.
* Fix: [#14649] ImageImporter incorrectly remaps colours outside the RCT2 palette.
* Fix: [#14667] “Extreme Hawaiian Island” has unpurchaseable land tiles (original bug).
* Fix: [#14741] Crash when exiting OpenRCT2 on macOS.
* Fix: [#15096] Crash when placing entrances in the scenario editor near the map corner.
* Fix: [#15136] Exported SV6 files cause vanilla RCT2 to hang.
* Fix: [#15142] ToonTowner's mine roofs were moved into the pirate theme scenery group instead of the mine theme scenery group.
* Fix: [#15148] Track Designs Manager delete confirmation window doesn't display properly.
* Fix: [#15170] Plugin: incorrect label text alignment.
* Fix: [#15177] Crash in lightfx_add_lights_magic_vehicle().
* Fix: [#15184] Crash when hovering over water types in Object Selection.
* Fix: [#15193] Crash when rides/stalls are demolished.
* Fix: [#15197] Cannot place flat ride after removing it in construction window.
* Fix: [#15199] Construction window is not closed when a ride gets demolished.
* Fix: [#15213] Freeze when hovering over Reverse Freefall Coaster in Russian.
* Fix: [#15227] Crash on exit after hovering over water types in the Object Selection window.
* Fix: [#15255] Tile Inspector shows banner information on walls that do not contain one.
* Fix: [#15257] Chat icon shows in scenario/track editor. Other icons don't disable when deactivated in options menu.
* Fix: [#15289] Unexpected behavior with duplicated banners which also caused desyncs in multiplayer.
* Fix: [#15322] Circus music doesn't play.
* Fix: [#15377] Entrance/exit ghost doesn't work on different stations without touching them first.
* Fix: [#15451] Guest list name filter remains after group selection.
* Fix: [#15466] Crash when opening a dropdown with 0 rows.
* Fix: [#15476] Crash when placing/clearing small scenery.
* Fix: [#15487] Map animations do not work correctly when loading an exported SV6 file in vanilla RCT2.
* Fix: [#15490] Tile inspector needlessly updates clearance height when changing surface slopes.
* Fix: [#15496] Crash in paint_swinging_inverter_ship_structure().
* Fix: [#15503] Freeze when doing specific coaster merges with block brakes.
* Fix: [#15514] Two different “quit to menu” menu items are available in track designer and track design manager.
* Fix: [#15560] Memory leak due to OpenGL Renderer not releasing a texture.
* Fix: [#15567] Litter not being counted correctly during Park rating calculation (original bug).
* Fix: [#15579] Crash in track_block_get_next().
* Fix: [#15582] [Plugin] Litter properties return incorrect values.
* Fix: [#15584] Ride income underflows when on-ride photos are making losses.
* Fix: [#15612] Crash when placing walls beside certain scenery objects.
* Fix: [#15851] Incorrect percentage chance of jumping with Katie Smith cheat.
* Fix: [#15858] Joanne Barton and Emma Garrell cheat incorrectly not applying effects to self.
* Improved: [#3417] Crash dumps are now placed in their own folder.
* Improved: [#13524] macOS arm64 native (universal) app
* Improved: [#15538] Software rendering can now draw in parallel when Multithreading is enabled.
* Change: [#8601] Revert ToonTower base block fix to re-enable support blocking.
* Change: [#15174] [Plugin] Deprecate the type "peep" and add support to target a specific scripting api version.
openrct2 (0.3.4.1) stable; urgency=medium
* Fix: [#15028] Crash when placing large scenery.
* Fix: [#15048] Crash when removing litter with cheats.
* Fix: [#15052] Crash when using banner window.
* Fix: [#15063] Crash when opening large scenery signs.
* Improved: [#12626] Allow using RCT2 saves to mark RCT Classic (.sea) parks as finished and vice versa.
openrct2 (0.3.4) stable; urgency=medium
* Feature: [#13967] Track List window now displays the path to the design when debugging tools are on.
* Feature: [#14071] “Vandals stopped” statistic for security guards.
* Feature: [#14169] Lighting effects for shops and stalls.
* Feature: [#14296] Allow using early scenario completion in multiplayer.
* Feature: [#14538] [Plugin] Add property for getting current plugin api version.
* Feature: [#14620] [Plugin] Add properties related to guest generation.
* Feature: [#14636] [Plugin] Add properties related to climate and weather.
* Feature: [#14731] Opaque water (like in RCT1).
* Change: [#14496] [Plugin] Rename Object to LoadedObject to fix conflicts with Typescript's Object interface.
* Change: [#14536] [Plugin] Rename ListView to ListViewWidget to make it consistent with names of other widgets.
* Change: [#14751] “No construction above tree height” limitation now allows placing high trees.
* Change: [#14841] Redesign the About window, including new button to copy the current version info.
* Fix: [#11829] Visual glitches and crashes when using RCT1 assets from mismatched or corrupt CSG1.DAT and CSG1i.DAT files.
* Fix: [#12262] Windows can appear off screen with small screens or high scaling.
* Fix: [#13581] Opening the Options menu causes a noticeable drop in FPS.
* Fix: [#13894] Block brakes do not animate.
* Fix: [#13986] OpenGL: Track preview window, flip/rotate button do not update the thumbnail.
* Fix: [#14315] Crash when trying to rename Air Powered Vertical Coaster in Korean.
* Fix: [#14330] join_server uses default_port from config.
* Fix: [#14415] Entrances/exits are removed when built on top of each other.
* Fix: [#14449] Surface smoothing at extra zoom levels not working.
* Fix: [#14468] Cannot close Options window on Android.
* Fix: [#14493] [Plugin] isHidden only works for tile elements up to the first element with a base height of over 32.
* Fix: [#14587] Confusing message when joining server with mismatched network version.
* Fix: [#14604] American-style Steam Trains are not imported correctly from RCT1 saves.
* Fix: [#14638] The “About OpenRCT2” window cannot be themed.
* Fix: [#14682] Crash when painting Swinging Ships with invalid subtype.
* Fix: [#14707] Crash when window is closed during text input.
* Fix: [#14710] Ride/Track Design preview does not show if it costs more money than available.
* Fix: [#14774] Incorrect import of scenery research caused all scenery to be unlocked.
* Fix: [#14806] Incorrect function call in WallPlaceAction plugin code.
* Fix: [#14871] Crash when trying to place track when there are no free tile elements.
* Fix: [#14880] Unable to close changelog window when its content fails to load.
* Fix: [#14945] Incorrect drop height penalty on log flume ride.
* Fix: [#14964] Unable to build in multiplayer as client with "Build while paused" cheat enabled when the host is paused.
* Improved: [#14511] “Unlock operating limits” cheat now also unlocks all music.
* Improved: [#14712, #14716] Improve startup times.
* Improved: [#14982] Add Malgun Gothic and change Nanum Gothic filename for Korean.
openrct2 (0.3.3) stable; urgency=medium
* Feature: [#12110] Add Hybrid Coaster (Rocky Mountain Construction I-Box) track type.
* Feature: [#12999] .sea (RCT Classic) scenarios are now listed in the “New Scenario” dialog.
* Feature: [#13000] objective_options command for console.
* Feature: [#13096] Add Esperanto translation.
* Feature: [#13164] Add 'Objective options' to Cheats menu.
* Change: [#9568] Change lift sounds of Reverser Roller Coaster and Compact Inverted Coaster to better fitting ones.
* Change: [#13160] The lay-out of the Park Cheats tab has been improved.
* Fix: [#1324] Last track piece map selection still visible when placing ride entrance or exit (original bug).
* Fix: [#3200] Close Construction window upon selecting vehicle page.
* Fix: [#4022] Fix Mac cursor offset on launch
* Fix: [#4041] Garbled park option on scenario editor with custom theme.
* Fix: [#4865] Offer an option to disable inhibiting the monitor power.
* Fix: [#5178] Lighting effects cannot be disabled in software mode
* Fix: [#5904] Empty errors on tile inspector base height change.
* Fix: [#6086] Cannot install existing track design with another name.
* Fix: [#6614, #8623] Colours are distorted when using OpenGL with Intel integrated graphics drivers.
* Fix: [#7443] Construction arrows pulse at irregular intervals.
* Fix: [#7518] Water isn't cut down by view clipping tool.
* Fix: [#7748] Tooltips would not timeout for normal UI elements.
* Fix: [#8015] RCT2 files are not found when put into the OpenRCT2 folder.
* Fix: [#8957] Error title missing when building with insufficient funds
* Fix: [#10186] Placing multiple saved rides ignores design name (original bug).
* Fix: [#12368] Desync due to ghost station pieces affecting changing ride settings.
* Fix: [#12940] Windows cause issues with snow drawing.
* Fix: [#13019] Simulated trains sometimes open construction window when they crash.
* Fix: [#13021] Mowed grass and weeds don't show up in extra zoom levels.
* Fix: [#13024] Console cursor does not correctly render at current cursor position.
* Fix: [#13029] Not all Junior Roller Coaster pieces are shown when "Show all track pieces" cheat is enabled.
* Fix: [#13044] Rides in RCT1 saves all have "0 customers per hour".
* Fix: [#13074] Entrance and exit ghosts for mazes not being removed.
* Fix: [#13083] Dialog for renaming conflicting track design crops text out.
* Fix: [#13097] Missing direction arrow for stations
* Fix: [#13098] UI buttons for entrance and exit don't toggle according to them being built.
* Fix: [#13098] Maze can still be constructed while placing entrance and exit (original bug).
* Fix: [#13118] Closing construction window resets ride viewport.
* Fix: [#13129] Missing error message when waiting for train to leave station on the ride measurements graph.
* Fix: [#13138] Fix logical sorting of list windows.
* Fix: [#13158] Cursors are drawn incorrectly in text input fields.
* Fix: [#13222] Vehicle collision causes negative number of passengers (original bug).
* Fix: [#13226, #7280] No error is shown when attempting to load a corrupted save.
* Fix: [#13266] Plugin API: Deleting key of sharedStorage not working.
* Fix: [#13278] Desync caused by ghost tiles changing the ride mode.
* Fix: [#13289] Litter and vomit sometimes not loading with RCT1 saved game or scenario
* Fix: [#13292] Impossible excitement rating requirements with finish building 5 coasters goal
* Improved: [#13023] Made add_news_item console command last argument, assoc, optional.
* Improved: [#13098] Improvements to the maze construction window user interface
* Improved: [#13125] Selecting the RCT2 files now uses localised dialogs.
-- AaronVanGeffen <AaronVanGeffen@users.noreply.github.com> Sun, 1 Nov 2020 20:08:00 +0100

1
debian/compat vendored
View File

@ -1 +0,0 @@
13

26
debian/control vendored
View File

@ -1,26 +0,0 @@
Source: openrct2
Maintainer: Michał Janiszewski <janisozaur+openrct2@gmail.com>
Section: misc
Priority: optional
Standards-Version: 3.9.2
Multi-Arch: same
Build-Depends: debhelper (>= 9), cmake (>= 3.8), libsdl2-dev, g++ (>= 4:10), pkg-config, nlohmann-json3-dev (>= 3.6.0), libspeex-dev, libspeexdsp-dev, libcurl4-openssl-dev, libcrypto++-dev, libfontconfig1-dev, libfreetype6-dev, libpng-dev, libssl-dev, libzip-dev (>= 1.0.0), libicu-dev (>= 59.0), libflac-dev, libvorbis-dev
Package: openrct2
Architecture: any
Homepage: https://openrct2.io/
Vcs-Browser: https://github.com/OpenRCT2/OpenRCT2
Vcs-Git: https://github.com/OpenRCT2/OpenRCT2
Depends: ${shlibs:Depends}, ${misc:Depends}
Recommends: innoextract
Description: An open source re-implementation of RollerCoaster Tycoon 2.
OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2,
expanding the game with new features, fixing bugs and raising game limits.
The gameplay revolves around building and maintaining an amusement park
containing attractions, shops and facilities. The player must try to make a
profit and maintain a good park reputation whilst keeping the guests happy.
.
OpenRCT2 allows for both scenario and sandbox play. Scenarios require the
player to complete a certain objective in a set time limit whilst sandbox
allows the player to build a more flexible park with optionally no
restrictions or finance.

0
debian/copyright vendored
View File

20
debian/rules vendored
View File

@ -1,20 +0,0 @@
#!/usr/bin/make -f
BUILDDIR=build_dir
# Ignore false warnings with GCC:
#
# stringop-overflow false positive in GCC < 11.3
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578
#
# maybe-uninitialized false positive in GCC < 12.3 (note 12.3 is currently unreleased)
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105937
#
# Reference OpenRCT2 bug reports:
# https://github.com/OpenRCT2/OpenRCT2/issues/16691 (-Wno-stringop-overflow)
# https://github.com/OpenRCT2/OpenRCT2/issues/17371 (-Wno-maybe-uninitialized -Wno-error=null-dereference)
export DEB_CFLAGS_MAINT_APPEND = -Wno-stringop-overflow -Wno-maybe-uninitialized -Wno-error=null-dereference
export DEB_CXXFLAGS_MAINT_APPEND = -Wno-stringop-overflow -Wno-maybe-uninitialized -Wno-error=null-dereference
%:
dh $@

View File

@ -1 +0,0 @@
3.0 (quilt)

File diff suppressed because it is too large Load Diff

View File

@ -1,214 +0,0 @@
/* This script is based on elf_i386.xc with modifications for OpenRCT2 */
/* Script for -z combreloc: combine and sort reloc sections */
/* Copyright (C) 2014 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf32-i386", "elf32-i386",
"elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
SEARCH_DIR("/usr/i386-unknown-linux-gnu/lib32"); SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib32"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/lib32"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/usr/local/lib32"); SEARCH_DIR("/usr/i386-unknown-linux-gnu/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/lib32");
SECTIONS
{
/* Read-only sections, merged into text segment: */
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x010000)); . = SEGMENT_START("text-segment", 0x010000) + SIZEOF_HEADERS;
.interp : { *(.interp) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
.hash : { *(.hash) }
.gnu.hash : { *(.gnu.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.dyn :
{
*(.rel.init)
*(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
*(.rel.fini)
*(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
*(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
*(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
*(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
*(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
*(.rel.ctors)
*(.rel.dtors)
*(.rel.got)
*(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
*(.rel.ifunc)
}
.rel.plt :
{
*(.rel.plt)
PROVIDE_HIDDEN (__rel_iplt_start = .);
*(.rel.iplt)
PROVIDE_HIDDEN (__rel_iplt_end = .);
}
.init :
{
KEEP (*(SORT_NONE(.init)))
}
.plt : { *(.plt) *(.iplt) }
.rct2_text 0x401000 : { *(.rct2_text) }
.rct2_data : { *(.rct2_data) }
.text :
{
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
}
.fini :
{
KEEP (*(SORT_NONE(.fini)))
}
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
.rodata1 : { *(.rodata1) }
.eh_frame_hdr : { *(.eh_frame_hdr) }
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
.gcc_except_table.*) }
/* These sections are generated by the Sun/Oracle C++ compiler. */
.exception_ranges : ONLY_IF_RO { *(.exception_ranges
.exception_ranges*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
/* Exception handling */
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
.exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
/* Thread Local Storage sections */
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
}
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
}
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
}
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
}
.jcr : { KEEP (*(.jcr)) }
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
.dynamic : { *(.dynamic) }
.got : { *(.got) *(.igot) }
. = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .);
.got.plt : { *(.got.plt) *(.igot.plt) }
.data :
{
*(.data .data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
_edata = .; PROVIDE (edata = .);
. = .;
__bss_start = .;
.bss :
{
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections.
FIXME: Why do we need it? When there is no .bss section, we don't
pad the .data section. */
. = ALIGN(. != 0 ? 32 / 8 : 1);
}
. = ALIGN(32 / 8);
. = SEGMENT_START("ldata-segment", .);
. = ALIGN(32 / 8);
_end = .; PROVIDE (end = .);
. = DATA_SEGMENT_END (.);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
}

View File

@ -1,233 +0,0 @@
/* This script is based on elf_x86_64.xc with modifications for OpenRCT2 */
/* Script for -z combreloc: combine and sort reloc sections */
/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64",
"elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
ENTRY(_start)
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib");
SECTIONS
{
/* Read-only sections, merged into text segment: */
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x7000000)); . = SEGMENT_START("text-segment", 0x7000000) + SIZEOF_HEADERS;
.interp : { *(.interp) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
.hash : { *(.hash) }
.gnu.hash : { *(.gnu.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rela.dyn :
{
*(.rela.init)
*(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
*(.rela.fini)
*(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
*(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
*(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
*(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
*(.rela.ctors)
*(.rela.dtors)
*(.rela.got)
*(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
*(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*)
*(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*)
*(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*)
*(.rela.ifunc)
}
.rela.plt :
{
*(.rela.plt)
PROVIDE_HIDDEN (__rela_iplt_start = .);
*(.rela.iplt)
PROVIDE_HIDDEN (__rela_iplt_end = .);
}
.init :
{
KEEP (*(SORT_NONE(.init)))
}
.plt : { *(.plt) *(.iplt) }
.plt.got : { *(.plt.got) }
.plt.bnd : { *(.plt.bnd) }
.rct2_text 0x401000 : { *(.rct2_text) }
.rct2_data : { *(.rct2_data) }
.text :
{
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
}
.fini :
{
KEEP (*(SORT_NONE(.fini)))
}
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
.rodata1 : { *(.rodata1) }
.eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
.gcc_except_table.*) }
.gnu_extab : ONLY_IF_RO { *(.gnu_extab*) }
/* These sections are generated by the Sun/Oracle C++ compiler. */
.exception_ranges : ONLY_IF_RO { *(.exception_ranges
.exception_ranges*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
/* Exception handling */
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
.gnu_extab : ONLY_IF_RW { *(.gnu_extab) }
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
.exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
/* Thread Local Storage sections */
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
}
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
}
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
}
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
}
.jcr : { KEEP (*(.jcr)) }
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
.dynamic : { *(.dynamic) }
.got : { *(.got) *(.igot) }
. = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .);
.got.plt : { *(.got.plt) *(.igot.plt) }
.data :
{
*(.data .data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
_edata = .; PROVIDE (edata = .);
. = .;
__bss_start = .;
.bss :
{
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections.
FIXME: Why do we need it? When there is no .bss section, we don't
pad the .data section. */
. = ALIGN(. != 0 ? 64 / 8 : 1);
}
.lbss :
{
*(.dynlbss)
*(.lbss .lbss.* .gnu.linkonce.lb.*)
*(LARGE_COMMON)
}
. = ALIGN(64 / 8);
. = SEGMENT_START("ldata-segment", .);
.lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
{
*(.lrodata .lrodata.* .gnu.linkonce.lr.*)
}
.ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
{
*(.ldata .ldata.* .gnu.linkonce.l.*)
. = ALIGN(. != 0 ? 64 / 8 : 1);
}
. = ALIGN(64 / 8);
_end = .; PROVIDE (end = .);
. = DATA_SEGMENT_END (.);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
}

View File

@ -1,56 +0,0 @@
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/x-openrct2-savegame">
<icon name="openrct2" />
<generic-icon name="applications-games"/>
<comment>OpenRCT2 Savegame</comment>
<comment xml:lang="ca">Partida desada de l'OpenRCT2</comment>
<comment xml:lang="cz">Uložená hra OpenRCT2</comment>
<comment xml:lang="de">OpenRCT2 - gespeichertes Spiel</comment>
<comment xml:lang="es">OpenRCT2 Juegos guardados</comment>
<comment xml:lang="fi">OpenRCT2 Tallennettu peli</comment>
<comment xml:lang="fr">Partie sauvegardée OpenRCT2</comment>
<comment xml:lang="hu">OpenRCT2 mentett játék</comment>
<comment xml:lang="it">Partita di OpenRCT2 salvata</comment>
<comment xml:lang="ko">OpenRCT2 저장된 게임 파일</comment>
<comment xml:lang="nb">OpenRCT2 lagret spill</comment>
<comment xml:lang="nl">Opgeslagen spel van OpenRCT2</comment>
<comment xml:lang="pl">Zapis gry OpenRCT2</comment>
<comment xml:lang="pt">OpenRCT2 Jogo Salvo</comment>
<comment xml:lang="ru">Игра OpenRCT2</comment>
<comment xml:lang="sv">OpenRCT2 Sparat Spel</comment>
<comment xml:lang="zh-CN">OpenRCT2 游戏存档</comment>
<comment xml:lang="zh-TW">OpenRCT2 遊戲存檔</comment>
<glob weight="60" pattern="*.sv6"/>
<glob weight="60" pattern="*.sv4"/>
<glob weight="60" pattern="*.sv7"/>
<glob weight="60" pattern="*.park"/>
</mime-type>
<mime-type type="application/x-openrct2-scenario">
<icon name="openrct2" />
<generic-icon name="applications-games"/>
<comment>OpenRCT2 Scenario</comment>
<comment xml:lang="ca">Arxiu d'escenari de l'OpenRCT2</comment>
<comment xml:lang="cz">Soubor scénáře OpenRCT2</comment>
<comment xml:lang="de">OpenRCT2 - Szenariodatei</comment>
<comment xml:lang="es">OpenRCT2 Archivo de Escenario</comment>
<comment xml:lang="fi">OpenRCT2 Skenaariotiedosto</comment>
<comment xml:lang="fr">Fichier de scénario OpenRCT2</comment>
<comment xml:lang="it">File di scenario per OpenRCT2</comment>
<comment xml:lang="ko">OpenRCT2 시나리오 파일</comment>
<comment xml:lang="nb">OpenRCT2 scenariofil</comment>
<comment xml:lang="nl">Scenario voor OpenRCT2</comment>
<comment xml:lang="pl">Scenariusz OpenRCT2</comment>
<comment xml:lang="pt">OpenRCT2 Arquivo de Cenário</comment>
<comment xml:lang="ru">Сценарий OpenRCT2</comment>
<comment xml:lang="sv">OpenRCT2 Sparat Scenario</comment>
<comment xml:lang="zh-CN">OpenRCT2 关卡文件</comment>
<comment xml:lang="zh-TW">OpenRCT2 劇情檔案</comment>
<glob weight="60" pattern="*.sc6"/>
<glob weight="60" pattern="*.sc4"/>
<glob weight="60" pattern="*.sea"/>
</mime-type>
</mime-info>

View File

@ -1,10 +0,0 @@
# http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html
[Desktop Entry]
Type=Application
Version=1.0
Exec=openrct2 %f
Icon=openrct2
Name=OpenRCT2
Terminal=false
NoDisplay=true
MimeType=application/x-openrct2-savegame;

View File

@ -1,10 +0,0 @@
# http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html
[Desktop Entry]
Type=Application
Version=1.0
Exec=openrct2 %f
Icon=openrct2
Name=OpenRCT2
Terminal=false
NoDisplay=true
MimeType=application/x-openrct2-scenario;

View File

@ -1,10 +0,0 @@
# http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html
[Desktop Entry]
Type=Application
Version=1.0
Exec=openrct2 handle-uri %u
Icon=openrct2
Name=OpenRCT2
Terminal=false
NoDisplay=true
MimeType=x-scheme-handler/openrct2;

View File

@ -1,151 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<id>openrct2.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0</project_license>
<name>OpenRCT2</name>
<summary>Amusement park simulation</summary>
<developer_name>The OpenRCT2 Team</developer_name>
<launchable type="desktop-id">openrct2.desktop</launchable>
<description>
<p>
OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2 (RCT2).
The gameplay revolves around building and maintaining an amusement park containing
attractions, shops and facilities. The player must try to make a profit and maintain
a good park reputation whilst keeping the guests happy. OpenRCT2 allows for both
scenario and sandbox play. Scenarios require the player to complete a certain
objective in a set time limit whilst sandbox allows the player to build a more
flexible park with optionally no restrictions or finance.
</p>
<p>
OpenRCT2 features many changes compared to the original RollerCoaster Tycoon 2 game. A few of them are listed here.
</p>
<ul>
<li>User Interface theming.</li>
<li>Fast-forwarding gameplay.</li>
<li>Multiplayer support.</li>
<li>Multilingual. Improved translations.</li>
<li>OpenGL hardware rendering.</li>
<li>Various fixes and improvements for bugs in the original game.</li>
<li>Native support for Linux and macOS.</li>
<li>Added hacks and cheats.</li>
<li>Auto-saving and giant screenshots.</li>
</ul>
<p>
Original RollerCoaster Tycoon 2 or RollerCoaster Tycoon Classic game files are required in order to play OpenRCT2.
</p>
</description>
<screenshots>
<screenshot type="default">
<image>https://camo.githubusercontent.com/fdb7e0506eedc4625f2f776f495c1072c520496dba3ee6c07bfdbf907d478afd/68747470733a2f2f692e696d6775722e636f6d2f6537434b3553632e706e67</image>
<caption>Amusement park featuring an inverted roller coaster, a river rapids ride and custom scenery</caption>
</screenshot>
</screenshots>
<url type="homepage">https://openrct2.io/</url>
<url type="bugtracker">https://github.com/OpenRCT2/OpenRCT2/issues</url>
<url type="faq">https://github.com/OpenRCT2/OpenRCT2/wiki/FAQ-&amp;-Common-Issues</url>
<url type="help">https://docs.openrct2.io</url>
<url type="translate">https://github.com/OpenRCT2/Localisation</url>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">mild</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">none</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">intense</content_attribute>
<content_attribute id="social-info">none</content_attribute>
<content_attribute id="social-audio">none</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">none</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
<releases>
<release version="0.4.10" date="2024-03-02">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.10</url>
</release>
<release version="0.4.9" date="2024-03-02">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.9</url>
</release>
<release version="0.4.8" date="2024-02-04">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.8</url>
</release>
<release version="0.4.7" date="2023-12-31">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.7</url>
</release>
<release version="0.4.6" date="2023-09-03">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.6</url>
</release>
<release version="0.4.5" date="2023-05-08">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.5</url>
</release>
<release version="0.4.4" date="2023-03-28">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.4</url>
</release>
<release version="0.4.3" date="2022-12-14">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.3</url>
</release>
<release version="0.4.2" date="2022-10-05">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.2</url>
</release>
<release version="0.4.1" date="2022-07-04">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.1</url>
</release>
<release version="0.4.0" date="2022-04-25">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.0</url>
</release>
<release version="0.3.5.1" date="2021-11-21">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.5.1</url>
</release>
<release version="0.3.5" date="2021-11-06">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.5</url>
</release>
<release version="0.3.4.1" date="2021-07-25">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.4.1</url>
</release>
<release version="0.3.4" date="2021-07-19">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.4</url>
</release>
<release version="0.3.3" date="2021-03-13">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.3</url>
</release>
<release version="0.3.2" date="2020-11-01">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.2</url>
</release>
<release version="0.3.1" date="2020-09-27">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.1</url>
</release>
<release version="0.3.0" date="2020-08-15">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.0</url>
</release>
<release version="0.2.6" date="2020-04-17">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.2.6</url>
</release>
<release version="0.2.5" date="2020-03-24">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.2.5</url>
</release>
<release version="0.2.4" date="2019-10-28">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.2.4</url>
</release>
<release version="0.2.3" date="2019-07-10">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.2.3</url>
</release>
<release version="0.2.2" date="2019-03-13">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.2.2</url>
</release>
<release version="0.2.1" date="2018-08-26">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.2.1</url>
</release>
<release version="0.2.0" date="2018-06-10">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.2.0</url>
</release>
</releases>
</component>

View File

@ -1,41 +0,0 @@
# http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html
[Desktop Entry]
Type=Application
Version=1.0
Exec=openrct2 %u
Icon=openrct2
Name=OpenRCT2
GenericName=Theme park management game
GenericName[ar]=لعبة إدارة حديقة الملاهي
GenericName[ca]=Joc de simulació de parcs temàtics
GenericName[cs]=Strategická simulace zábavního parku
GenericName[de]=Freizeitpark-Simulation
GenericName[es]=Simulación de parque de atracciones.
GenericName[fr]=Jeu de gestion de parcs d'attractions.
GenericName[it]=Gioco di simulazione e gestione di parchi a tema
GenericName[ja]=テーマパーク経営シミュレーションゲーム
GenericName[nb]=Fornøyelsespark-simuleringsspill
GenericName[nl]=Pretparksimulator
GenericName[pt]=Jogo de gerenciamento de parque temático
GenericName[ru]=Игра в жанре симулятора управления парком развлечений
GenericName[sv]=Nöjesparks-simulator
GenericName[zh_CN]=主题公园经营游戏
GenericName[zh_TW]=主題樂園管理遊戲
Comment=Open Source re-implementation of RollerCoaster Tycoon 2.
Comment[ar]=إعادة إنشاء مفتوح المصدر للعبة محاكاة الأفعوانيات 2.
Comment[ca]=Reimplementació de codi obert del RollerCoaster Tycoon 2.
Comment[cs]=Open Source remake hry RollerCoaster Tycoon 2.
Comment[de]=Quelloffene Neuimplementierung von RollerCoaster Tycoon 2.
Comment[es]=Re-implementación de código abierto de RollerCoaster Tycoon 2.
Comment[fr]=Ré-implémentation libre (Open Source) de RollerCoaster Tycoon 2.
Comment[it]=Versione Open Source di RollerCoaster.
Comment[ja]=ローラーコースタータイクーン2のオープンソース版。
Comment[nb]=Open Source re-implementasjon av RollerCoaster Tycoon 2.
Comment[nl]=Een opensource-versie van RollerCoaster Tycoon 2.
Comment[pt]=Reimplementação em código aberto do RollerCoaster Tycoon 2.
Comment[ru]=Ремейк с открытым исходным кодом игры RollerCoaster Tycoon 2.
Comment[sv]=Open Source om-implementation av RollerCoaster Tycoon 2.
Comment[zh_CN]=过山车大亨2(RollerCoaster Tycoon 2)的开源重新开发版。
Comment[zh_TW]=重新開發並開放源碼的模擬樂園2 (RollerCoaster Tycoon 2)。
Categories=Game;Simulation;
Keywords=openrct2;rct2;rct;roller;coaster;tycoon;simulation;

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.4.10</string>
<key>CFBundleSignature</key>
<string>ORCT</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>
<string>OpenRCT2 is licensed under the GNU General Public License version 3</string>
<key>CFBundleAllowMixedLocalizations</key>
<true/>
<key>CFBundleIconFile</key>
<string>openrct2.icns</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>

View File

@ -1,127 +0,0 @@
.Dd December 19, 2021
.Dt OPENRCT2-CLI 6
.Os
.Sh NAME
.Nm openrct2-cli
.Nd Headless server mode for OpenRCT2
.sp
.Sh SYNOPSIS
.Nm
.Op Fl h | -help
.Op Fl v | -version
.Op Fl -verbose
.sp
.Nm
.Ar host
uri
.Op Fl -address Ar address
.Op Fl -port Ar port
.Op Fl -password Ar password
.sp
.Sh DESCRIPTION
OpenRCT2 supports a headless mode where the game will run as a console application with no UI.
This is useful for running dedicated game servers.
.sp
Several objects are available in OpenRCT2's scripting interface that can be modified from its CLI:
.sp
\(bu \fBcheats\fR Enable/disable various cheats
.sp
\(bu \fBclimate\fR Modify the climate and weather
.sp
\(bu \fBconsole\fR Options for interacting with the stdout console
.sp
\(bu \fBcontext\fR Core API for use by plugins
.sp
\(bu \fBdate\fR Getting or setting the in-game date
.sp
\(bu \fBmap\fR Manipulation of the map
.sp
\(bu \fBnetwork\fR Management of the server or interacting with clients
.sp
\(bu \fBpark\fR APIs for the park and its management
.sp
\(bu \fBscenario\fR Information about the current scenario
.sp
\(bu \fBtitleSequenceManager\fR Create and edit title sequences (only available to clients that are
not running in headless mode)
.sp
\(bu \fBui\fR APIs for controlling the user interface (only available to clients that are not running
in headless mode)
.sp
For further information about OpenRCT2, its options and capabilities, please refer to
the \fB openrct2(6) \fR manpage.
.sp
.Sh OPTIONS
.Bl -tag -width "-openrct2-data-path path "
.sp
.It Fl h | -help
Print a summary of all options to stdout and exit.
.sp
.It Fl v | -version
Show version information and exit.
.sp
.It Fl n | -no-install
Do not install scenario if passed.
.sp
.It Fl a | -all
Show help for all commands.
.sp
.It Fl -about
Show information about
.Nm .
.sp
.It Fl -verbose
Print diagnostic information to stdout.
.sp
.It Fl -port Ar port
Port to use for hosting or joining a server; if not specified, the default port of 11753 will be used.
.sp
.It Fl -address Ar address
Address to bind to when hosting a server.
.sp
.It Fl -password Ar password
Password needed to join the server.
.sp
.It Fl -user-data-path Ar path
Path to the user data directory (containing
.Pa config.ini )
.sp
.It Fl -openrct2-data-path Ar path
Path to the OpenRCT2 data directory (containing
.Pa languages )
.sp
.It Fl -rct1-data-path Ar path
Path to the RollerCoaster Tycoon 1 data directory (containing
.Pa data/csg1.dat )
.sp
.It Fl -rct2-data-path Ar path
Path to the RollerCoaster Tycoon 2 data directory (containing
.Pa data/g1.dat )
.El
.sp
.Sh NOTES
With multiplayer, you might run into some bugs that do not occur in single player mode.
If that happens, please report it on GitHub if the issue hasn't been reported already,
and please say if the bug only occurs on multiplayer games.
.sp
In order for the server to successfully accept clients, the port must be open for the server's own
firewall and any router's firewall the computer is behind. Additionally if the server is behind a
router with NAT enabled, the router must be configured to have the port forwarded to the server's
local address.
.sp
.Sh EXAMPLES
.Bl -tag -width "openrct2-cli host ./my_park.sv6 --port 11753 "
.It openrct2-cli host ./my_park.sv6 --port 11753
Run a headless server for a saved park.
.It \fB$\fR network.players[1].group = 0
From the CLI for a multiplayer server, set the first user to join as an admin
.It \fB$\fR cheats["disableAllBreakdowns"] = true
From the CLI, enable the cheat to disable all ride breakdowns
.El
.sp
.Sh SEE ALSO
openrct2(6)
.sp
.Lk https://openrct2.io "Official site"
.sp
.Lk https://github.com/OpenRCT2/OpenRCT2 "GitHub"

View File

@ -1,276 +0,0 @@
.Dd December 19, 2021
.Dt OPENRCT2 6
.Os
.Sh NAME
.Nm openrct2
.Nd An open source re-implementation of \(lqRollerCoaster Tycoon 2\(rq.
.sp
.Sh SYNOPSIS
.Nm
.Op Fl h | -help
.Op Fl v | -version
.Op Fl -verbose
.Nm
.Op uri
.Nm
.Ar edit
.Op uri
.Nm
.Ar intro
.sp
.Nm
.Ar host
uri
.Op Fl -address Ar address
.Op Fl -port Ar port
.Op Fl -password Ar password
.Op Fl -headless
.Nm
.Ar join
hostname
.Op Fl -port Ar port
.Op Fl -password Ar password
.sp
.Nm
.Ar set-rct2
path
.Nm
.Ar convert
source
destination
.Nm
.Ar scan-objects
path
.Nm
.Ar handle-uri
openrct2://.../
.sp
.Nm
.Ar screenshot
file output_image width height
.Op x y zoom rotation
.Op options
.Nm
.Ar screenshot
file output_image
.Ar giant
zoom rotation
.Op options
.sp
.Nm
.Ar sprite append
spritefile input
.Op x_offset y_offset
.Op options
.Nm
.Ar sprite build
spritefile json_path
.Op silent
.Op options
.Nm
.Ar sprite create
spritefile
.Op options
.Nm
.Ar sprite details
spritefile
.Op idx
.Op options
.Nm
.Ar sprite export
spritefile idx output
.Op options
.Nm
.Ar sprite exportall
spritefile output_directory
.Op options
.Nm
.Ar sprite exportalldat
dat_identifier output_directory
.Op options
.sp
.Nm
.Ar benchgfx
parkfile ticks
.Nm
.Ar benchspritesort
.Op file
.Op options
.Nm
.Ar benchsimulate
.Op file
.Op options
.Nm
.Ar simulate
parkfile ticks
.sp
.Sh DESCRIPTION
OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2 (RCT2).
The gameplay revolves around building and maintaining an amusement park
containing attractions, shops and facilities. The player must try to make a profit
and maintain a good park reputation whilst keeping the guests happy. OpenRCT2
allows for both scenario and sandbox play. Scenarios require the player to complete
a certain objective in a set time limit whilst sandbox allows the player to build a
more flexible park with optionally no restrictions or finance.
.sp
RollerCoaster Tycoon 2 was originally written by Chris Sawyer in x86 assembly and
is the sequel to RollerCoaster Tycoon. The engine was based on Transport Tycoon,
an older game which also has an equivalent open-source project, OpenTTD. OpenRCT2
attempts to provide everything from RCT2 as well as many improvements and
additional features, some of these include support for modern platforms, an improved
interface, improved guest and staff AI, more editing tools, increased limits, and
cooperative multiplayer. It also re-introduces mechanics from RollerCoaster Tycoon that
were not present in RollerCoaster Tycoon 2. Some of those include; mountain tool
in-game, the \(lqhave fun\(rq objective, launched coasters (not passing-through the
station) and several buttons on the toolbar.
.sp
.Sh OPTIONS
.Bl -tag -width "-openrct2-data-path path "
.sp
.It Fl h | -help
Print a summary of all options to stdout and exit.
.sp
.It Fl v | -version
Show version information and exit.
.sp
.It Fl n | -no-install
Do not install scenario if passed.
.sp
.It Fl a | -all
Show help for all commands.
.sp
.It Fl -about
Show information about
.Nm .
.sp
.It Fl -verbose
Print diagnostic information to stdout.
.sp
.It Fl -headless
run
.Nm
without a graphical window.
.sp
.It Fl -port Ar port
Port to use for hosting or joining a server; if not specified, the default port of 11753 will be used.
.sp
.It Fl -address Ar address
Address to bind to when hosting a server.
.sp
.It Fl -password Ar password
Password needed to join the server.
.sp
.It Fl -user-data-path Ar path
Path to the user data directory (containing
.Pa config.ini )
.sp
.It Fl -openrct2-data-path Ar path
Path to the OpenRCT2 data directory (containing
.Pa languages )
.sp
.It Fl -rct1-data-path Ar path
Path to the RollerCoaster Tycoon 1 data directory (containing
.Pa data/csg1.dat )
.sp
.It Fl -rct2-data-path Ar path
Path to the RollerCoaster Tycoon 2 data directory (containing
.Pa data/g1.dat )
.El
.sp
Options specific to screenshots:
.Bl -tag -width "-fix-vandalism "
.sp
.It Fl -weather Ar 0-6
Weather to be used (0 = default, 1 = sunny, ..., 6 = thunder).
.sp
.It Fl -no-peeps
Hide peeps.
.sp
.It Fl -no-sprites
Hide all sprites (e.g. balloons, vehicles, guests).
.sp
.It Fl -clear-grass
Set all grass to be clear of weeds.
.sp
.It Fl -mowed-grass
Set all grass to be mowed.
.sp
.It Fl -water-plants
Water plants for the screenshot.
.sp
.It Fl -fix-vandalism
Fix vandalism for the screenshot.
.sp
.It Fl -remove-litter
Remove litter for the screenshot.
.sp
.It Fl -tidy-up-park
Clear grass, water plants, fix vandalism and remove litter.
.sp
.It Fl -transparent
Make the background transparent.
.El
.sp
Options specific to sprite commands:
.Bl -tag -width "m | --mode Ar mode "
.sp
.It Fl m | -mode Ar mode
The type of sprite conversion (default, closest, or dithering).
.El
.sp
Options specific to benchmark commands:
.Bl -tag -width "-benchmark_report_aggregates_only Ar {true|false} "
.sp
.It Fl -benchmark_list_tests Ar {true|false}
.It Fl -benchmark_filter Ar regex
.It Fl -benchmark_min_time Ar min_time
.It Fl -benchmark_repetitions Ar num_repetitions
.It Fl -benchmark_report_aggregates_only Ar {true|false}
.It Fl -benchmark_format Ar <console|json|csv>
.It Fl -benchmark_out Ar filename
.It Fl -benchmark_out_format Ar <json|console|csv>
.It Fl -benchmark_color Ar {auto|true|false}
.It Fl -benchmark_counters_tabular Ar {true|false}
.It Fl -v Ar verbosity
.El
.sp
.Sh FILES
On UNIX systems, OpenRCT2 stores user configuration, data, and cache in
\fB$XDG_CONFIG_HOME/OpenRCT2\fR, falling back to \fB~/.config/OpenRCT2\fR if
XDG_CONFIG_HOME is not set in the environment.
.sp
.Sh NOTES
Playing OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bought
at either Steam or GOG.com. If you have the original RollerCoaster Tycoon and its expansion
packs, you can point OpenRCT2 to these in order to play the original scenarios.
.sp
OpenRCT2 allows custom scripts (also known as plug-ins) to be written and executed in
the game providing additional behaviour on top of the vanilla experience. This can range
from extra windows providing information about the park to entire new multiplayer game
modes.
.sp
Version 0.4.0 of OpenRCT2 introduced a new park save format that allows for higher limits and
more features than the original RollerCoaster Tycoon 2. Old .SV4 and .SV6 files will continue to
work - forever. The only thing changed is that you can no longer save to .SV6, it will now be
saved as .park.
.sp
.Sh EXAMPLES
.Bl -tag -width "openrct2 https://example.org/files/ExamplePark.sv6 "
.It openrct2 ./my_park.sv6
Open a saved park.
.It openrct2 ./SnowyPark.sc6
Install and open a scenario.
.It openrct2 ./ShuttleLoop.td6
Install a track.
.It openrct2 https://example.org/files/ExamplePark.sv6
Download and open a saved park.
.It openrct2 host ./my_park.sv6 --port 11753 --headless
Run a headless server for a saved park.
.El
.sp
.Sh SEE ALSO
openrct2-cli(6)
.sp
.Lk https://openrct2.io "Official site"
.sp
.Lk https://github.com/OpenRCT2/OpenRCT2 "GitHub"

File diff suppressed because it is too large Load Diff

View File

@ -1,162 +0,0 @@
Last updated: 2024-04-02
Release version: 0.4.10
------------------------------------------------------------------------
Table of contents
-----------------
1.0) About
2.0) Contacting
* 2.1) Reporting bugs
3.0) Supported platforms
4.0) Installing and running OpenRCT2
5.0) Development
6.0) Translation
7.0) Troubleshooting
8.0) Licensing
9.0) Credits
1.0) About
---- -----
OpenRCT2 is an amusement park simulation game based upon the popular game
RollerCoaster Tycoon 2, written by Chris Sawyer. It attempts to mimic the
original game as closely as possible while extending it with new features.
OpenRCT2 is licensed under the GNU General Public License version 3.0, but
includes some 3rd party software under different licenses. See the section
"Licensing" below for details.
2.0) Contacting
---- ----------
The easiest way to contact the OpenRCT2 team is by submitting issues on GitHub
(https://github.com/OpenRCT2/OpenRCT2) in the form of questions or bug reports.
You can also chat with us on Discord (https://discordapp.com/invite/fsEwSWs).
2.1) Reporting bugs
---- --------------
GitHub is used for tracking bugs in OpenRCT2. Please check if the bug has
already been reported using the search functionality before submitting.
When you are sure it is not already reported you should:
* Make sure you are running a recent version, i.e. run the latest stable or
nightly based on where you found the bug.
* Make sure you are not running a non-official binary, like a fork.
When you are playing with a fork you should report any bugs to the bug
tracker for that fork which is most likely another GitHub repository.
* Make it reproducible for the developers. In other words, create a savegame
in which you can reproduce the issue once loaded. It is very useful to give
us the dump file as well, and a screenshot.
* Check whether the bug is already reported on our bug tracker. This includes
searching for recently closed bug reports as the bug might already be fixed.
After you have done all that you can report the bug. Please include the
following information in your bug report:
* OpenRCT2 version (PLEASE test the latest git develop build)
* Bug details, including instructions how to reproduce it
* Platform (Windows, Linux, FreeBSD, ...) and compiler (including version) if
you compiled OpenRCT2 yourself.
* The processor architecture of your OS (x86 Windows, x86-64 Windows,
Android on an ARM, Linux on a PowerPC, ...)
* The language and culture your operating system is using.
* Attach a saved game *and* a screenshot if possible
* If this bug only occurred recently please note the last version without
the bug and the first version including the bug. That way we can fix it
quicker by looking at the changes made.
* Attach a crash dump (if your game crashed or froze).
3.0) Supported platforms
---- -------------------
OpenRCT2 is currently supported on Windows 7 and above, many distributions of
Linux, macOS 10.13 or higher, Android, FreeBSD and OpenBSD. OpenRCT2 will only work on
little-endian architectures.
Further instructions can be found on GitHub.
4.0) Installing and running OpenRCT2
---- ------------------------------
Installing OpenRCT2 is fairly straightforward. Either you have downloaded an
archive which you have to extract to a directory where you want OpenRCT2 to
be installed, or you have downloaded an installer, which will automatically
extract OpenRCT2 in the given directory.
OpenRCT2 requires an installation of RollerCoaster Tycoon 2 (RCT2) to run. You
must have either installed the original RCT2 disc, the GOG version or the Steam
version. Alternatively you can manually specify the location of where your RCT2
data files are. These may be directly copied off of the original disc and placed in
a directory of your choice.
When you start OpenRCT2 for the first time, it will look for the RCT2 data files
in the following locations:
- C:\Program Files\Infogrames\RollerCoaster Tycoon 2,
- C:\Program Files (x86)\Infogrames\RollerCoaster Tycoon 2,
- C:\Program Files\Infogrames Interactive\RollerCoaster Tycoon 2,
- C:\Program Files (x86)\Infogrames Interactive\RollerCoaster Tycoon 2,
- C:\Program Files\Atari\RollerCoaster Tycoon 2,
- C:\Program Files (x86)\Atari\RollerCoaster Tycoon 2,
- C:\GOG Games\RollerCoaster Tycoon 2 Triple Thrill Pack,
- C:\Program Files\GalaxyClient\Games\RollerCoaster Tycoon 2 Triple Thrill Pack,
- C:\Program Files (x86)\GalaxyClient\Games\RollerCoaster Tycoon 2 Triple Thrill Pack,
- C:\Program Files\Steam\steamapps\common\Rollercoaster Tycoon 2,
- C:\Program Files (x86)\Steam\steamapps\common\Rollercoaster Tycoon 2,
- The location of the openrct2.exe (where OpenRCT2 was extracted/installed)
If none of these locations are found, OpenRCT2 will ask you to manually specify
the directory. Alternatively after running OpenRCT2 for the first time, you can
edit config.ini in the OpenRCT2 sub directory of your documents folder to set
the RCT2 install path.
OpenRCT2 supports setting a DPI scale in increments of .25. To set it, open the Options menu.
If you wish to use Steam Overlay or capture game for video recording or
streaming, you might have to enable hardware display in the options window.
This will still render the graphics on the CPU but the pixel data will be
displayed using either DirectX or OpenGL. This may also enable vertical
synchronisation if supported by your graphics card and you have enabled
"Uncap FPS".
5.0) Development
---- -----------
OpenRCT2 is an open-source collaborative project. It is developed voluntarily
and hosted on GitHub. If you would like to contribute to the development of
OpenRCT2, please read the readme file in the OpenRCT2 repository or on the main
GitHub page at (https://github.com/OpenRCT2/OpenRCT2). This gives more detailed
information about the project, its roadmap and how to compile the source code.
6.0) Translation
---- -----------
For more information about the game's translation and how to contribute, please
visit the GitHub page and wiki at (https://github.com/OpenRCT2/Localisation).
7.0) Troubleshooting
---- ---------------
If you are having problems running OpenRCT2, you can run OpenRCT2 in verbose
mode to view a detailed diagnostic log. This can be activated by running the
game via Command Prompt or PowerShell with the command line switch --verbose.
This log can help pinpoint where a problem exists and is a useful resource if
you wish to ask online for help.
8.0) Licensing
---- ---------
OpenRCT2 is licensed under the GNU General Public Licence version 3.0. For
the complete licence text, see the file 'licence.txt'. This licence applies
to all files in this distribution, except as noted below.
dukglue | MIT licence.
duktape | MIT licence.
libcURL | MIT (or Modified BSD-style) licence.
libicu | Unicode licence.
libpng | libpng licence.
libspeex | BSD-style licence.
libzip | BSD 3 clause licence.
nlohmann-json | MIT licence.
OpenSSL | OpenSSL Licence
SDL2 | zlib licence.
zlib | zlib licence.
Google Test | BSD 3 clause licence.
Google Benchmark | Apache 2.0 licence.
Licences for sub-libraries used by the above may vary. For more information, visit the libraries' respective official websites.
9.0) Credits
---- -------
For the full list of contributors to OpenRCT2, see the file 'contributors.md'.

View File

@ -1,237 +0,0 @@
# Scripts for OpenRCT2
OpenRCT2 allows custom scripts (also known as plug-ins) to be written and executed in the game providing additional behaviour on top of the vanilla experience. This can range from extra windows providing information about the park to entire new multiplayer game modes.
Each script is a single physical javascript file within the `plugin` directory in your OpenRCT2 user directory. The user directory for each platform is usually:
- Windows: `C:\Users\YourName\Documents\OpenRCT2`
- Mac: `/Users/YourName/Library/Application Support/OpenRCT2`
- Linux: `$XDG_CONFIG_HOME/OpenRCT2` or in its absence `$HOME/.config/OpenRCT2`
OpenRCT2 will load every single file with the extension `.js` in this directory recursively. So if you want to prevent a plug-in from being used, you must move it outside this directory, or rename it so the filename does not end with `.js`.
There are three types of scripts:
* Local
* Remote
* Intransient
Local scripts can **not** alter the game state. This allows each player to enable any local script for their own game without other players needing to also enable the same script. These scripts tend to provide extra tools for productivity, or new windows containing information.
Remote scripts on the other hand can alter the game state in certain contexts, thus must be enabled for every player in a multiplayer game. Players **cannot** enable or disable remote scripts for multiplayer servers they join. Instead the server will upload any remote scripts that have been enabled on the server to each player. This allows servers to enable scripts without players needing to manually download or enable the same script on their end.
Intransient scripts are similar to local scripts, in that they can **not** alter the game state. However they are loaded at the very start of launching OpenRCT2 and remain loaded until shutdown. This allows the plugin to provide functionality across different screens such as the title screen.
The authors must also define a licence for the plug-in, making it clear to the community whether that plug-in can be altered, copied, etc. A good reference material is listed on [ChooseALlicense](https://choosealicense.com/appendix/), try to pick one of them and use its corresponding identifier, as listed on [SPDX](https://spdx.org/licenses/).
## Writing Scripts
Scripts are written in ECMAScript 5 compatible JavaScript. OpenRCT2 currently uses the [duktape](https://duktape.org) library to execute scripts. This however does not mean you need to write your plug-in in JavaScript, there are many transpilers that allow you to write in a language of your choice and then compile it to JavaScript allowing it to be executed by OpenRCT2. JavaScript or [TypeScript](https://www.typescriptlang.org) is recommended however, as that will allow you to utilise the type definition file we supply (`openrct2.d.ts`). If you would like to use ECMAScript 6 or later which contain features such as the `let` keyword or classes, then you will need to use a transpiler such as [Babel](https://babeljs.io) or [TypeScript](https://www.typescriptlang.org).
Official references for writing plug-ins are:
* The API: `openrct2.d.ts` distributed with OpenRCT2.
* Our collection of sample scripts: [OpenRCT2/plugin-samples](https://github.com/OpenRCT2/plugin-samples)
* A TypeScript plug-in comprised of multiple sources: [IntelOrca/OpenRCT2-ParkManager](https://github.com/IntelOrca/OpenRCT2-ParkManager)
Start by copying this template script into a new file in your `plugin` directory:
```js
function main() {
console.log("Your plug-in has started!");
}
registerPlugin({
name: 'Your Plugin',
version: '1.0',
authors: ['Your Name'],
type: 'remote',
licence: 'MIT',
targetApiVersion: 34,
main: main
});
```
This will log a message to the terminal screen (`stdout`) when you open any park. If you are on Windows, make sure to run `openrct2.com` instead of `openrct2.exe` so you can interact with the `stdin` / `stdout` console. The console is a JavaScript interpreter (REPL), this means you can write and test expressions similar to the console found in web browsers when you press `F12`. When you make changes to your script, you must exit your current game and open it again for the script to reload... unless you use the hot reload feature.
The hot reload feature can be enabled by editing your `config.ini` file and setting `enable_hot_reloading` to `true` under `[plugin]`. When this is enabled, the game will auto-reload the script in real-time whenever you save your JavaScript file. This allows rapid development of plug-ins as you can write code and quickly preview your changes, such as closing and opening a specific custom window on startup. A demonstration of this can be found on YouTube: [OpenRCT2 plugin hot-reload demo](https://www.youtube.com/watch?v=jmjWzEhmDjk)
## Breaking changes
As of version 34 there are breaking Api changes.
- **Version 34:** `Entity.type` will now return `"guest"` or `"staff"` instead of `"peep"`.
- **Version 63:** Accessing G2 sprites by id directly is now deprecated in favor of a future-proof implementation using `IconName` and/or `context.getIcon()`.
- **Version 68:** Custom game actions registered through `context.registerAction()` now wrap the callback arguments in a `GameActionEventArgs`, similar to `context.subscribe()` callbacks.
- **Version 77:** Network APIs that take player index and group index now take player ID and group ID instead.
## Frequently Asked Questions
> Why was JavaScript chosen instead of LUA or Python.
JavaScript is a very mature and flexible language with a large, if not the largest, resource base available. There are arguably more transpilers, tools, and libraries for JavaScript than any other language. That and also it using a familiar C-like syntax and 0-indexed arrays make it more suitable than LUA and Python. Of course if you would still like to use LUA or another language, there will likely be a JavaScript transpiler for it.
Another benefit of using JavaScript is that you get rich editor features such as completion and API documentation by using a TypeScript definition file which works for both TypeScript and JavaScript. [Visual Studio Code](https://code.visualstudio.com) is recommended, as that supports the workflow very well. See the [OpenRCT2 plugin hot-reload demo](https://www.youtube.com/watch?v=jmjWzEhmDjk) video for a demonstration of the editor functionality.
> How safe are scripts?
Scripts are executed in a sandbox container with no direct access to your computer. Scripts can only use the APIs we provide which only consist of interactions to OpenRCT2 and a limited API for storing data. It is technically possible for a script to freeze the game, or fill your disc up with data, but these aren't particularly severe issues and are noticed quite quickly.
The [duktape](https://duktape.org) library is used to execute scripts, it is a very mature library for executing scripts, but no library can promise 100% security. If any security vulnerabilities are found, they will likely be fixed promptly and OpenRCT2 can then be updated to use the new version of `duktape`.
> Is it possible for someone to run a bitcoin miner in my game?
Yes, but the performance would be so dire that it would be a waste of their time. This is probably the least of your worries.
> What are the limits?
Scripts can consist of any behaviour and have a large memory pool available to them. The speed will vary depending on the hardware and system executing them. The scripts are interpreted, so do not expect anywhere close to the performance of native code. In most scenarios this should be satisfactory, but a random map generator, or genetic algorithm for building roller coasters might struggle. Like any language, there will be tricks to optimising JavaScript and the use of the OpenRCT2 APIs.
The APIs for OpenRCT2 try to mimic the internal data structures as close as possible but we can only add so many at a time. The best way to grow the plug-in system is to add APIs on-demand. So if you find an API is missing, please raise an issue for it on GitHub and also feel free to submit a pull request afterwards.
> What is ```targetApiVersion```
In case there are breaking Api changes plugins can use this to keep the old Api behavior, as an example in version 34 ```Entity.Type``` would no longer return "peep" for
guests and staff, instead it would return either "guest" or "staff", so if your plugin expects "peep" you can specify the version 33 to keep the old behavior. See the list
of breaking changes. If this is not specified it will default to version 33, it is recommended to specify the current api version.
> How do I debug my script?
Debugging has not yet been implemented, but is planned. In the meantime, you can use `console.log` to print useful information for diagnosing problems.
> What does the error 'Game state is not mutable in this context' mean?
This means you are attempting to modify the game state (e.g. change the park, map or guests etc.) in a context where you should not be doing so. This might be because your script is defined as `local` or `intransient`, meaning it must work independently of other players, not having the script enabled, or a remote script attempting to modify the game in the main function or a user interface event.
Any changes to the game state must be synchronised across all players so that the same changes happen on the same tick for every player. This prevents the game going out of sync. To do this you must only change game state in a compatible hook such as `interval.day` or in the execute method of a game action. Game actions allow players to make specific changes to the game providing they have the correct permissions and the server allows it.
Whilst OpenRCT2 tries to prevent desynchronisation from happening, it still requires careful coding to ensure the behaviour is deterministic across all clients. Any attempt to use local specific or non-deterministic data to change the game state will cause a desync. This can be as easy as using `ui.windows`, a variable that can be different for every player.
> What are hooks?
Hooks allow a script to subscribe to certain events that occur in the game. For example if the script was to award cash to the park every day, it would subscribe to the `interval.day` event as follows:
```js
context.subscribe('interval.day', function() {
park.cash += 10000;
});
```
Other hooks include receiving a chat message in multiplayer, or a ride breaking-down.
> What are game actions?
Game actions allow you to define new actions (with a new permission slot) that players can invoke in games. Here is an example flow of a game action such as opening the park:
1. Player executes action (open park) via UI.
2. Game action (open park), query method is called.
3. If query succeeds, send action to server, else show error message.
4. Server receives action and query method is called on server.
5. If query or permission fails, send error message back to player, else:
6. Send action to all player to execute action at tick ###.
7. All players execute action at tick ###.
This sequence of actions ensures that every player execute the action exactly in the same way on the exact same game tick. It also allows the server to validate that the action is allowed and does not fail due to permission or another player executing a conflicting action just before it. This is why there is a noticeable delay when constructing in multiplayer games, as the client has to wait for the server to acknowledge the action and reply with the tick number to execute it on, since we do not yet have any rollback support.
> Can I run code specifically for servers or clients?
Yep, there is an API to get the current network mode.
```js
if (network.mode == "server") {
console.log("This is a server...");
} else if (network.mode == "client") {
console.log("This is a client...");
} else {
console.log("This is single player...");
}
```
> Can I run code only if the user interface is available?
Yes, it is good practice, particularly if writing scripts for servers to check if the game is running in headless mode before attempting to use any UI APIs. The `ui` namespace is not available in headless mode, so make sure you check it, otherwise an error will be thrown.
```js
if (typeof ui !== 'undefined') {
console.log("OpenRCT2 is not running in headless, UI is available!");
ui.registerMenuItem('My window', function() {
// ...
});
}
```
> Can I modify the widgets on built-in windows?
Not yet. A lot of the internal code for these windows relies on the widgets existing, and being in a specific order, as well as hard resizing them to certain positions. Modifying them would likely crash the game until the window system is improved to handle such changes.
> Can servers add additional user interface elements to players?
Yes, remote scripts are uploaded to every client and run as-is. Even if the server is running in headless mode, the script can still contain UI calls for the benefit of the players that are not running in headless mode. Be sure to check if the UI is available first before executing UI calls.
> Can plugins persist data across multiple OpenRCT2 instances?
Yes, use `context.sharedStorage` to read or write data to an external JSON file: `plugin.store.json` in the OpenRCT2 user directory. It is recommended that you namespace all your plugin's data under a common name.
```js
var h = context.sharedStorage.get('IntelOrca.MagicLift.Height');
if (!h) {
context.sharedStorage.set('IntelOrca.MagicLift.Height', 2);
}
```
All plugins have access to the same shared storage.
If you want to only store data specific to the current park that is loaded, use `context.getParkStorage`. Any data stored here will be written to the .park file.
> Can plugins communicate with other processes, or the internet?
There is a socket API (based on net.Server and net.Socket from node.js) available for listening and communicating across TCP streams. For security purposes, plugins can only listen and connect to localhost. If you want to extend the communication further, you will need to provide your own separate reverse proxy. What port you can listen on is subject to your operating system, and how elevated the OpenRCT2 process is.
```js
var server = network.createServer();
server.on('connection', function (conn) {
conn.on('data', function(data) {
console.log("Received data: ", data);
conn.write("Reply data");
});
});
server.listen(8080);
```
> Can I use third party JavaScript libraries?
Absolutely, just embed the library in your JavaScript file. There are a number of tools to help you do this.
> Can I share code across multiple scripts?
Yes, and there are two ways this can be done. If you are just sharing helper routines or libraries, the best thing is to embed it in each plug-in. There are a number of tools for JavaScript to help you do this. If you would like two plug-ins to communicate with each other, perhaps to share data, then you can do this by declaring a variable or function in global scope which is available to all plug-ins, or use the shared storage APIs.
> What do I do if there is no API for ...?
No problem, if there is something you need, post a new issue on the issue tracker for OpenRCT2 asking for the API you require: https://github.com/OpenRCT2/OpenRCT2/issues
Adding new APIs is most of time straight forward, so they can be added to new development builds quickly. Or if you are capable, make the change yourself to the OpenRCT2 source stream and create a pull request.
> How do I prevent my script from running on older versions of OpenRCT2 that do not support all the APIs I require?
When registering your plugin, you can specify a minimum required API version like below:
```js
registerPlugin({
name: 'Your Plugin',
version: '1.2', // Your plugin version
authors: ['Your Name'],
type: 'remote',
minApiVersion: 7, // OpenRCT2 plugin API v7 or higher is required to run your plugin
main: main
});
```
When new APIs are introduced, or the behaviour of current APIs change, a new version number will be issued which you can find in the OpenRCT2 source code or changelog.
> Where shall I keep the code for my script?
We recommend [GitHub](https://github.com) (where OpenRCT2 is hosted), or another source control host such as [BitBucket](https://bitbucket.org) or [GitLab](https://gitlab.com). All of them offer private repositories if you want to keep your code private, or public repositories which allow others to easily contribute to your script.
> What licence should I use for my script?
This is up to you. The OpenRCT2 licence does not enforce any licence requirement for content that is loaded into it. MIT is recommended as it is the most permissive. You also have to consider what licence any third party libraries you are using allow.
> Is there a good place to distribute my script to other players?
The recommendation is to upload releases of your script on GitHub alongside your source code (if public). There is a community driven repository for sharing plugins available at https://openrct2plugins.org/.

View File

@ -1,523 +0,0 @@
!define APPNAME "OpenRCT2"
!define APPVERSION "${APPV_MAIN}${APPV_EXTRA}"
!define APPVERSIONINTERNAL "${APPV_MAIN}.0"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
!define APPURLLINK "https://github.com/OpenRCT2/OpenRCT2"
!define OPENRCT2_EXE "openrct2.exe"
!define OPENRCT2_COM "openrct2.com"
!if "${PLATFORM}" == "Win32"
!define APPBITS 32
!define APPARCH "win32"
InstallDir "$PROGRAMFILES32\OpenRCT2\"
!else
!define APPBITS 64
!define APPARCH "win64"
InstallDir "$PROGRAMFILES64\OpenRCT2\"
!endif
!define SUPPORTED_OS "Windows 7 and later"
; Define root variable relative to installer
!define PATH_ROOT "..\..\"
!define BINARY_DIR "${PATH_ROOT}bin"
!define MUI_ICON "${PATH_ROOT}resources\logo\icon.ico"
!define MUI_UNICON "${PATH_ROOT}resources\logo\icon.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "top.bmp"
BrandingText "OpenRCT2 Installer"
SetCompressor LZMA
; Version Info
VIProductVersion "${APPVERSIONINTERNAL}"
VIAddVersionKey "ProductName" "OpenRCT2 ${APPBITS}-bit Installer for ${SUPPORTED_OS}"
VIAddVersionKey "Comments" "Installs ${APPNAMEANDVERSION}"
VIAddVersionKey "CompanyName" "OpenRCT2 Developers"
VIAddVersionKey "FileDescription" "Installs ${APPNAMEANDVERSION}"
VIAddVersionKey "ProductVersion" "${APPVERSION}"
VIAddVersionKey "InternalName" "InstOpenRCT2-${APPARCH}"
VIAddVersionKey "FileVersion" "${APPVERSION}-${APPARCH}"
VIAddVersionKey "LegalCopyright" " "
; Main Install settings
Name "${APPNAMEANDVERSION} ${APPBITS}-bit for ${SUPPORTED_OS}"
; NOTE: Keep trailing backslash!
InstallDirRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Install Folder"
!ifndef OUTFILE
!define OUTFILE "openrct2-install.exe"
!endif
OutFile "${OUTFILE}"
CRCCheck force
ShowInstDetails show
ShowUninstDetails show
RequestExecutionLevel user
Var SHORTCUTS
; Modern interface settings
!include "MUI2.nsh"
!include "InstallOptions.nsh"
!include "WinVer.nsh"
!include "x64.nsh"
!include "UAC.nsh"
!define MUI_ABORTWARNING
!define MUI_WELCOMEPAGE_TITLE_3LINES
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "..\..\licence.txt"
!define MUI_COMPONENTSPAGE_SMALLDESC
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
ManifestDPIAware true
;Start Menu Folder Page Configuration
!define MUI_STARTMENUPAGE_DEFAULTFOLDER $SHORTCUTS
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKEY_LOCAL_MACHINE"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Shortcut Folder"
!insertmacro MUI_PAGE_STARTMENU "OpenRCT2" $SHORTCUTS
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!define MUI_FINISHPAGE_RUN_TEXT "Run ${APPNAMEANDVERSION} now!"
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!define MUI_FINISHPAGE_LINK "Visit the OpenRCT2 site for more information"
!define MUI_FINISHPAGE_LINK_LOCATION "${APPURLLINK}"
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
!define MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT DisableBack
!insertmacro MUI_PAGE_FINISH
!define MUI_PAGE_HEADER_TEXT "Uninstall ${APPNAMEANDVERSION}"
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
; Set languages (first is default language)
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_RESERVEFILE_LANGDLL
!macro Init thing
uac_tryagain:
!insertmacro UAC_RunElevated
${Switch} $0
${Case} 0
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
MessageBox mb_YesNo|mb_IconExclamation|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, try again" /SD IDNO IDYES uac_tryagain IDNO 0
${EndIf}
;fall-through and die
${Case} 1223
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, aborting!"
Quit
${Case} 1062
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Logon service not running, aborting!"
Quit
${Default}
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Unable to elevate, error $0"
Quit
${EndSwitch}
SetShellVarContext all
!macroend
Function PageFinishRun
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\${OPENRCT2_EXE}" "" "" ""
FunctionEnd
;--------------------------------------------------------------
; (Core) OpenRCT2 install section. Copies all internal game data
Section "!OpenRCT2" Section1
; Make sure to be upgraded OpenRCT2 is not running
Call CheckOpenRCT2Running
; Overwrite files by default, but don't complain on failure
SetOverwrite try
SetShellVarContext all
; Copy data files
SetOutPath "$INSTDIR\data\"
File /r ${PATH_ROOT}bin\data\*
; Copy the rest of the stuff
SetOutPath "$INSTDIR\"
; Copy text files
File ..\changelog.txt
Push "$INSTDIR\changelog.txt"
Call unix2dos
File ..\..\licence.txt
Push "$INSTDIR\licence.txt"
Call unix2dos
File ..\readme.txt
Push "$INSTDIR\readme.txt"
Call unix2dos
File ..\..\contributors.md
Push "$INSTDIR\contributors.md"
Call unix2dos
File ..\scripting.md
Push "$INSTDIR\scripting.md"
Call unix2dos
File ..\openrct2.d.ts
Push "$INSTDIR\openrct2.d.ts"
Call unix2dos
; Copy executable
File /oname=${OPENRCT2_EXE} ${BINARY_DIR}\${OPENRCT2_EXE}
File /oname=${OPENRCT2_COM} ${BINARY_DIR}\${OPENRCT2_COM}
; Create the Registry Entries
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Comments" "Visit ${APPURLLINK}"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "DisplayIcon" "$INSTDIR\${OPENRCT2_EXE},0"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "DisplayName" "OpenRCT2 ${APPVERSION}"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "DisplayVersion" "${APPVERSION}"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "HelpLink" "${APPURLLINK}"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Install Folder" "$INSTDIR"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Publisher" "OpenRCT2"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Shortcut Folder" "$SHORTCUTS"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "URLInfoAbout" "${APPURLLINK}"
; This key sets the Version DWORD that new installers will check against
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Version" "${APPVERSIONINTERNAL}"
!insertmacro MUI_STARTMENU_WRITE_BEGIN "OpenRCT2"
CreateShortCut "$DESKTOP\OpenRCT2.lnk" "$INSTDIR\${OPENRCT2_EXE}"
CreateDirectory "$SMPROGRAMS\$SHORTCUTS"
CreateShortCut "$SMPROGRAMS\$SHORTCUTS\OpenRCT2.lnk" "$INSTDIR\${OPENRCT2_EXE}"
CreateShortCut "$SMPROGRAMS\$SHORTCUTS\OpenRCT2-verbose.lnk" "%WINDIR%\System32\cmd.exe" '/C "$INSTDIR\${OPENRCT2_COM}" --verbose'
CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Uninstall.lnk" "$INSTDIR\uninstall.exe"
CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Readme.lnk" "$INSTDIR\Readme.txt"
CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Changelog.lnk" "$INSTDIR\Changelog.txt"
CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Contributors.lnk" "$INSTDIR\contributors.md"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
;-------------------------------------------
; Install the uninstaller (option is hidden)
Section -FinishSection
WriteUninstaller "$INSTDIR\uninstall.exe"
SectionEnd
; Modern install component descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${Section1} "Minimal OpenRCT2 installation in English. You must have RollerCoaster Tycoon 2 installed."
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;-----------------------------------------------
; Uninstall section, deletes all installed files
Section "Uninstall"
SetShellVarContext all
; Remove from registry...
!insertmacro MUI_STARTMENU_GETFOLDER "OpenRCT2" $SHORTCUTS
ReadRegStr $SHORTCUTS HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Shortcut Folder"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2"
; Delete self
Delete "$INSTDIR\uninstall.exe"
; Delete Shortcuts
Delete "$DESKTOP\OpenRCT2.lnk"
Delete "$SMPROGRAMS\$SHORTCUTS\OpenRCT2.lnk"
Delete "$SMPROGRAMS\$SHORTCUTS\OpenRCT2-verbose.lnk"
Delete "$SMPROGRAMS\$SHORTCUTS\Uninstall.lnk"
Delete "$SMPROGRAMS\$SHORTCUTS\Readme.lnk"
Delete "$SMPROGRAMS\$SHORTCUTS\Changelog.lnk"
Delete "$SMPROGRAMS\$SHORTCUTS\Contributors.lnk"
; Clean up OpenRCT2 dir
Delete "$INSTDIR\changelog.txt"
Delete "$INSTDIR\licence.txt"
Delete "$INSTDIR\readme.txt"
Delete "$INSTDIR\contributors.md"
Delete "$INSTDIR\scripting.md"
Delete "$INSTDIR\openrct2.d.ts"
Delete "$INSTDIR\${OPENRCT2_EXE}"
Delete "$INSTDIR\${OPENRCT2_COM}"
Delete "$INSTDIR\INSTALL.LOG"
; Data files
RMDir /r "$INSTDIR\data"
; Remove remaining directories
RMDir "$SMPROGRAMS\$SHORTCUTS"
RMDir "$INSTDIR"
SectionEnd
;-------------------------------------------------------------------------------
; Determine windows version, returns "win9x" if Win9x/Me/2000/XP SP2- or "winnt" for the rest on the stack
Function GetWindowsVersion
ClearErrors
StrCpy $R0 "win9x"
${If} ${RunningX64}
goto WinNT
${EndIf}
${If} ${IsNT}
${If} ${IsWinXP}
${AndIf} ${AtLeastServicePack} 3
${OrIf} ${AtLeastWin2003}
GoTo WinNT
${EndIf}
${EndIf}
GoTo Done
WinNT:
StrCpy $R0 "winnt"
Done:
Push $R0
FunctionEnd
;-------------------------------------------------------------------------------
; Check whether we're not running an installer for 64 bits on 32 bits and vice versa
Function CheckProcessorArchitecture
ClearErrors
${If} ${RunningX64}
IntCmp ${APPBITS} 64 Done 0
MessageBox MB_YESNO|MB_ICONINFORMATION "You are trying to install the 32-bit OpenRCT2 on a 64-bit operating system. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort
${Else}
IntCmp ${APPBITS} 64 0 Done
MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the 64-bit OpenRCT2 on a 32-bit operating system. This is not going to work. Please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort
${EndIf}
GoTo Done
Abort:
Quit
Done:
FunctionEnd
;-------------------------------------------------------------------------------
; Check whether we're not running an installer for NT on 9x and vice versa
Function CheckWindowsVersion
Call GetWindowsVersion
Pop $R0
StrCmp $R0 "win9x" 0 WinNT
ClearErrors
StrCmp ${APPARCH} "win9x" Done 0
MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the Windows XP SP3, Vista, 7 and 8.1 version on Windows 95, 98, ME, 2000 and XP without SP3. This is will not work. Please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort
GoTo Done
WinNT:
ClearErrors
StrCmp ${APPARCH} "win9x" 0 Done
MessageBox MB_YESNO|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98, 2000 and XP without SP3 version on Windows XP SP3, Vista, 7 and 8.1. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort
Abort:
Quit
Done:
FunctionEnd
;-------------------------------------------------------------------------------
; Check whether OpenRCT2 is running
Function CheckOpenRCT2Running
IfFileExists "$INSTDIR\${OPENRCT2_EXE}" 0 Done
Retry:
FindProcDLL::FindProc "${OPENRCT2_EXE}"
Pop $R0
IntCmp $R0 1 0 Done
ClearErrors
Delete "$INSTDIR\${OPENRCT2_EXE}"
IfErrors 0 Done
ClearErrors
MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "OpenRCT2 is running. Please close it and retry." IDRETRY Retry
Abort
Done:
FunctionEnd
;-------------------------------------------------------------------------------
; strips all CRs
; and then converts all LFs into CRLFs
; (this is roughly equivalent to "cat file | dos2unix | unix2dos")
;
; usage:
; Push "infile"
; Call unix2dos
;
; beware that this function destroys $0 $1 $2
Function unix2dos
ClearErrors
Pop $2
Rename $2 $2.U2D
FileOpen $1 $2 w
FileOpen $0 $2.U2D r
Push $2 ; save name for deleting
IfErrors unix2dos_done
; $0 = file input (opened for reading)
; $1 = file output (opened for writing)
unix2dos_loop:
; read a byte (stored in $2)
FileReadByte $0 $2
IfErrors unix2dos_done ; EOL
; skip CR
StrCmp $2 13 unix2dos_loop
; if LF write an extra CR
StrCmp $2 10 unix2dos_cr unix2dos_write
unix2dos_cr:
FileWriteByte $1 13
unix2dos_write:
; write byte
FileWriteByte $1 $2
; read next byte
Goto unix2dos_loop
unix2dos_done:
; close files
FileClose $0
FileClose $1
; delete original
Pop $0
Delete $0.U2D
FunctionEnd
;-----------------------------------------------------------------------------------
; Properly compare 2 versions
; syntax:
; ${VersionCompare} "[Version1]" "[Version2]" $var
; output:
; $var=0 Versions are equal
; $var=1 Version1 is newer
; $var=2 Version2 is newer
Function VersionCompare
!define VersionCompare `!insertmacro VersionCompareCall`
!macro VersionCompareCall _VER1 _VER2 _RESULT
Push `${_VER1}`
Push `${_VER2}`
Call VersionCompare
Pop ${_RESULT}
!macroend
Exch $1
Exch
Exch $0
Exch
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
begin:
StrCpy $2 -1
IntOp $2 $2 + 1
StrCpy $3 $0 1 $2
StrCmp $3 '' +2
StrCmp $3 '.' 0 -3
StrCpy $4 $0 $2
IntOp $2 $2 + 1
StrCpy $0 $0 '' $2
StrCpy $2 -1
IntOp $2 $2 + 1
StrCpy $3 $1 1 $2
StrCmp $3 '' +2
StrCmp $3 '.' 0 -3
StrCpy $5 $1 $2
IntOp $2 $2 + 1
StrCpy $1 $1 '' $2
StrCmp $4$5 '' equal
StrCpy $6 -1
IntOp $6 $6 + 1
StrCpy $3 $4 1 $6
StrCmp $3 '0' -2
StrCmp $3 '' 0 +2
StrCpy $4 0
StrCpy $7 -1
IntOp $7 $7 + 1
StrCpy $3 $5 1 $7
StrCmp $3 '0' -2
StrCmp $3 '' 0 +2
StrCpy $5 0
StrCmp $4 0 0 +2
StrCmp $5 0 begin newer2
StrCmp $5 0 newer1
IntCmp $6 $7 0 newer1 newer2
StrCpy $4 '1$4'
StrCpy $5 '1$5'
IntCmp $4 $5 begin newer2 newer1
equal:
StrCpy $0 0
goto end
newer1:
StrCpy $0 1
goto end
newer2:
StrCpy $0 2
end:
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
Var OLDVERSION
Var UninstallString
;-----------------------------------------------------------------------------------
; NSIS Initialize function, determine if we are going to install/upgrade or uninstall
Function .onInit
!insertmacro Init "installer"
StrCpy $SHORTCUTS "OpenRCT2"
SectionSetFlags 0 17
ShowWelcomeMessage:
IfSilent FinishCallback
ReadRegStr $R8 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "Version"
IfErrors FinishCallback
WelcomeToSetup:
; An older version was found. Let's let the user know there's an upgrade that will take place.
ReadRegStr $OLDVERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenRCT2" "DisplayVersion"
; Gets the older version then displays it in a message box
MessageBox MB_OK|MB_ICONINFORMATION \
"Welcome to ${APPNAMEANDVERSION} Setup.$\nThis will allow you to upgrade from version $OLDVERSION."
Goto FinishCallback
FinishCallback:
ClearErrors
; Call CheckProcessorArchitecture
; Call CheckWindowsVersion
FunctionEnd
Function un.onInit
!insertmacro Init "uninstaller"
FunctionEnd
; eof

View File

@ -1,6 +0,0 @@
# Windows Installer
This directory contains the script and resources for the Windows installer. The installer is created using [Nullsoft Scriptable Install System (NSIS)](http://nsis.sourceforge.net) version v3.0a0+.
As there is currently only a 32 bit version of OpenRCT2 available, the architecture and windows version checks have been disabled. These will be re-enabled once OpenRCT2 is a stand alone executable.
Code based on [OpenTTD](http://openttd.org) installer.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,255 +0,0 @@
# File
All strings are null terminated UTF-8.
Array32:
length: uint32
element-size: uint32
data: blob
An element-size of 0 indicates varying. E.g. for strings.
string-table: []
lcode: string (E.g. "en-GB")
value: string
## File
Header:
magic: uint32
target-version: uint32
min-version: uint32
num-chunks: uint32
uncompressed-size: uint64
compression: uint32
sha1: byte[20]
Chunks:
id: uint32
offset: uint64
length: uint64
## Chunks
Authoring:
engine: string E.g. "openrct2 v0.1.2 (Linux)"
authors: string[]
notes: string
date-started: timestamp
date-modified: timestamp
Objects: object[]
type: uint16
id: string
version: string
Scenario:
category: uint32
name: string-table
park-name: string-table
details: string-table
objective-type: uint32
objective-year: uint16
objective-guests: uint32
objective-rating: uint16
objective-ride-excitement: uint16
objective-ride-length: uint16
objective-park-value: money32
objective-ride-profit: money32
objective-shop-profit: money32
completed-company-value: money32
completed-name: string
General:
ticks: uint32
elapsed-months: uint32
current-day: uint16
rand: uint32[2]
initial-cash: money32
guest-initial-cash: money16
guest-initial-hunger: uint8
guest-initial-thirst: uint8
guest-spawns: xyzd32
land-price: money32
construction-rights-price: money32
Interface:
main-viewport:
x: uint16
y: uint16
zoom: uint8
rotation: uint8
last-entrance-style: uint32
Climate:
climate: uint8
climate-update-timer: uint16
current:
weather: uint8
temperature: uint8
effect: uint8
gloom: uint8
rain-level: uint8
next:
(same as above)
Park:
name: string-id
cash: money32
loan: money32
loan-max: money32
interest: uint16
flags: uint64
entrance-fee: money32
rating: uint16
rating-casualty-penalty: uint16
current-expenditure: money32
current-profit: money32
total-admissions: uint32
income-from-admissions: money32
handyman-colour: uint8
mechanic-colour: uint8
security-colour: uint8
campaigns:
weeks-left: uint16
ride-index: uint32
research-funding: uint8
research-enabled: uint32
research-progress-stage: uint8
research-progress: uint16
research-last-item: uint32
research-next-item: uint32
rating-warning-days: uint16
peep-warning-throttle: uint8[16]
awards:
History:
rating-history: uint16[]
guests-history: uint32[]
cash-history: money32[]
weekly-profit-history: money32[]
park-value-history: money32[]
expenditure-history: money32[][]
Inventions:
Tiles:
map-size: xy32
tile-elements: tile-element[]
Things:
Rides:
Banners:
Animations:
Staff:
Strings: string[]
Editor:
step: uint8
Derived:
park-size: uint32
guests-in-park: uint32
guests-heading-for-park: uint32
company-value: money32
park-value: money32
## Tile Element
tile-element-base:
type: uint8
flags: uint8
base-z: uint8
clear-z: uint8
surface-element:
slope: uint8
water-height: uint8
ownership: uint8
grass-length: uint8
surface-object-id: uint8
edge-object-id: uint8
(spare: 6)
footpath-element:
object-id: uint16
edges: uint8
flags2: uint8
addition: uint16
addition-status: uint8
station-index: uint8
ride-index: uint32
(spare: -2)
track-element:
type: uint16 (straight, 25 deg up, brakes etc.)
sequence: uint8
style: uint8 (wooden, intamin, b&m etc.)
station-index: uint8
colour: uint8
flags: uint8 (station / on-ride)
(spare: 5)
track-element (maze):
type: uint16
maze-entry: uint16
(spare: 8)
entrance-element:
object-id: uint16
footpath-object-id: uint16
ride-index: uint32
station-index: uint8
type: uint8
(spare: 2)
scenery-element:
object-id: uint32
age: uint8
colours: uint8[2]
(spare: 5)
scenery-large-element:
object-id: uint32
colour: uint8[3]
wall-element:
object-id: uint32
colours: uint8[3]
animation: uint8
banner-index: uint32
(spare: 0)
banner-element:
object-id: uint16
index: uint32
flags: uint8
position: uint8
(spare: 4)
## Limits
Ride index: uint32
Banner index: uint32
Station index: uint8
Ride object index: uint16
Terrain (surface) object index: uint8
Terrain (edge) object index: uint8
Entrance object index: uint16 (can be for each type if necessary)
Footpath object index: uint16
Footpath addition object index: uint16
Scenery object index: uint32
Scenery (large) object index: uint32
Wall object index: uint32
Banner object index: uint16

View File

@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@ -1,133 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)'==''">..\..\</SolutionDir>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup>
<!-- Allow any version of VS and Windows SDK -->
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<TargetPlatformVersion>10.0.17763.0</TargetPlatformVersion>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(SolutionDir)bin\</OutDir>
<IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir>
<TargetName>$(ProjectName)</TargetName>
<ShowAllFiles>true</ShowAllFiles>
<VcpkgTriplet Condition="'$(Platform)'=='Win32' and '$(UseSharedLibs)'!='true'">x86-windows-static</VcpkgTriplet>
<VcpkgTriplet Condition="'$(Platform)'=='x64' and '$(UseSharedLibs)'!='true'">x64-windows-static</VcpkgTriplet>
<VcpkgTriplet Condition="'$(Platform)'=='arm64' and '$(UseSharedLibs)'!='true'">arm64-windows-static</VcpkgTriplet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='ReleaseLTCG'">
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<DisableSpecificWarnings>4068;4091;4100;4121;4132;4200;4201;4204;4206;4221;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<!-- Warnings:
C4068: unknown pragma
C4091: 'keyword': ignored on left of 'type' when no variable is declared
C4100: 'identifier': unreferenced formal parameter
C4121: 'identifier': alignment of a member was sensitive to packing
C4132: 'identifier': const object should be initialized
C4200: nonstandard extension used: zero-sized array in struct/union
C4201: nonstandard extension used: nameless struct/union
C4204: nonstandard extension used: non-constant aggregate initializer
C4206: nonstandard extension used: translation unit is empty
C4221: nonstandard extension used: 'identifier': cannot be initialized using address of automatic variable 'identifier'
C4244: 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
-->
<TreatSpecificWarningsAsErrors>4263;4265;4548;4549;4555</TreatSpecificWarningsAsErrors>
<!-- Warnings, that have to be enabled manually:
C4263: 'function': member function does not override any base class virtual member function
C4265: 'class': class has virtual functions, but destructor is not virtual
C4548: expression before comma has no effect; expected expression with side-effect
C4549: 'operator': operator before comma has no effect; did you intend 'operator'?
C4555: expression has no effect; expected expression with side-effect
-->
<PreprocessorDefinitions>OPENGL_NO_LINK;_CRT_SECURE_NO_WARNINGS;SDL_MAIN_HANDLED;_WINSOCK_DEPRECATED_NO_WARNINGS;NOMINMAX;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Platform)'=='Win32' or '$(Platform)'=='x64'">__AVX2__;__SSE4_1__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>ENABLE_SCRIPTING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary Condition="'$(UseSharedLibs)'!='true'">MultiThreaded</RuntimeLibrary>
<RuntimeLibrary Condition="'$(UseSharedLibs)'=='true'">MultiThreadedDLL</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalOptions>/utf-8 /std:c++20 /permissive- /Zc:externConstexpr /Zc:char8_t-</AdditionalOptions>
</ClCompile>
<Link>
<LargeAddressAware Condition="'$(Platform)'=='Win32'">true</LargeAddressAware>
<AdditionalDependencies>wininet.lib;imm32.lib;version.lib;winmm.lib;crypt32.lib;wldap32.lib;shlwapi.lib;setupapi.lib;bcrypt.lib;winhttp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies Condition="'$(Platform)'=='Win32' or '$(Platform)'=='x64'">fribidi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>/OPT:NOLBR /ignore:4099 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>DEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary Condition="'$(UseSharedLibs)'!='true'">MultiThreadedDebug</RuntimeLibrary>
<RuntimeLibrary Condition="'$(UseSharedLibs)'=='true'">MultiThreadedDebugDLL</RuntimeLibrary>
<MinimalRebuild>false</MinimalRebuild>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<AdditionalDependencies>brotlicommon.lib;brotlidec.lib;brotlienc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies Condition="'$(Breakpad)'=='true' and ('$(Platform)'=='Win32' or '$(Platform)'=='x64')">libbreakpadd.lib;libbreakpad_clientd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>bz2d.lib;discord-rpc.lib;flac.lib;freetyped.lib;libpng16d.lib;ogg.lib;speexdsp.lib;SDL2-staticd.lib;vorbis.lib;vorbisfile.lib;zip.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release' or '$(Configuration)'=='ReleaseLTCG'">
<ClCompile>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck />
<OmitFramePointers />
<BufferSecurityCheck>false</BufferSecurityCheck>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>brotlicommon.lib;brotlidec.lib;brotlienc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies Condition="'$(Breakpad)'=='true' and ('$(Platform)'=='Win32' or '$(Platform)'=='x64')">libbreakpad.lib;libbreakpad_client.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>bz2.lib;discord-rpc.lib;flac.lib;freetype.lib;libpng16.lib;ogg.lib;speexdsp.lib;SDL2-static.lib;vorbis.lib;vorbisfile.lib;zip.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup>
<IncludePath>$(SolutionDir)src;$(SolutionDir)src\thirdparty;$(SolutionDir)src\thirdparty\duktape;$(SolutionDir)lib\$(Platform)\include;$(SolutionDir)lib\$(Platform)\include\SDL2;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Configuration)'=='Debug'">$(SolutionDir)lib\$(Platform)\debug\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Configuration)'!='Debug'">$(SolutionDir)lib\$(Platform)\lib;$(LibraryPath)</LibraryPath>
<LinkIncremental />
</PropertyGroup>
<ItemDefinitionGroup>
<Manifest>
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
</Manifest>
</ItemDefinitionGroup>
<PropertyGroup>
<VcpkgEnabled>false</VcpkgEnabled>
</PropertyGroup>
</Project>

View File

@ -1,163 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Main msbuild project for OpenRCT2 -->
<!-- Inputs (/p: or environment variables)
- OPENRCT2_BUILD_SERVER
- OPENRCT2_BRANCH
- OPENRCT2_SHA1
- OPENRCT2_SHA1_SHORT
- OPENRCT2_DESCRIBE
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<!-- Import custom build tasks -->
<Import Project="openrct2.targets" />
<PropertyGroup>
<Configuration Condition="'$(Configuration)'==''">Debug</Configuration>
<Platform Condition="'$(Platform)'==''">x64</Platform>
<!-- Set dynamic OpenRCT2 #defines -->
<OPENRCT2_CL_ADDITIONALOPTIONS Condition="'$(OPENRCT2_BUILD_SERVER)'!=''">/D "OPENRCT2_BUILD_SERVER=\"$(OPENRCT2_BUILD_SERVER)\"" $(OPENRCT2_CL_ADDITIONALOPTIONS)</OPENRCT2_CL_ADDITIONALOPTIONS>
<OPENRCT2_CL_ADDITIONALOPTIONS Condition="'$(OPENRCT2_BRANCH)'!=''">/D "OPENRCT2_BRANCH=\"$(OPENRCT2_BRANCH)\"" $(OPENRCT2_CL_ADDITIONALOPTIONS)</OPENRCT2_CL_ADDITIONALOPTIONS>
<OPENRCT2_CL_ADDITIONALOPTIONS Condition="'$(OPENRCT2_SHA1)'!=''">/D "OPENRCT2_COMMIT_SHA1=\"$(OPENRCT2_SHA1)\"" $(OPENRCT2_CL_ADDITIONALOPTIONS)</OPENRCT2_CL_ADDITIONALOPTIONS>
<OPENRCT2_CL_ADDITIONALOPTIONS Condition="'$(OPENRCT2_SHA1_SHORT)'!=''">/D "OPENRCT2_COMMIT_SHA1_SHORT=\"$(OPENRCT2_SHA1_SHORT)\"" $(OPENRCT2_CL_ADDITIONALOPTIONS)</OPENRCT2_CL_ADDITIONALOPTIONS>
<OPENRCT2_CL_ADDITIONALOPTIONS Condition="'$(OPENRCT2_DESCRIBE)'!=''">/D "OPENRCT2_VERSION_TAG=\"$(OPENRCT2_DESCRIBE)\"" $(OPENRCT2_CL_ADDITIONALOPTIONS)</OPENRCT2_CL_ADDITIONALOPTIONS>
<OPENRCT2_CL_ADDITIONALOPTIONS Condition="'$(Breakpad)'=='true' and ('$(Platform)'=='Win32' or '$(Platform)'=='x64')">/D "USE_BREAKPAD" $(OPENRCT2_CL_ADDITIONALOPTIONS)</OPENRCT2_CL_ADDITIONALOPTIONS>
<RootDir>$(MsBuildThisFileDirectory)</RootDir>
<TargetDir>$(RootDir)bin\</TargetDir>
<OutputExe>$(TargetDir)openrct2.exe</OutputExe>
<g2Output>$(TargetDir)data\g2.dat</g2Output>
<!-- Set openrct2.sln properties -->
<SlnProperties>$(SlnProperties);Platform=$(Platform)</SlnProperties>
<SlnProperties Condition="'$(OPENRCT2_BUILD_SERVER)'!=''">$(SlnProperties);OPENRCT2_CL_ADDITIONALOPTIONS=$(OPENRCT2_CL_ADDITIONALOPTIONS)</SlnProperties>
</PropertyGroup>
<!-- 3rd party libraries / dependencies -->
<PropertyGroup>
<DependenciesCheckFile>$(RootDir).dependencies</DependenciesCheckFile>
<LibsUrl Condition="'$(Platform)'=='ARM64'">https://github.com/OpenRCT2/Dependencies/releases/download/v35/openrct2-libs-v35-arm64-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='ARM64'">89f119395c4347f25427990eb47ea8f57bba95d8</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='x64'">https://github.com/OpenRCT2/Dependencies/releases/download/v35/openrct2-libs-v35-x64-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='x64'">1303b2423be26f40bdb75fa2c91f1bc7ef1de1ed</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='Win32'">https://github.com/OpenRCT2/Dependencies/releases/download/v35/openrct2-libs-v35-x86-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='Win32'">f3636b530110c7592deab23ca0d0c1916fc7e44c</LibsSha1>
<TitleSequencesUrl>https://github.com/OpenRCT2/title-sequences/releases/download/v0.4.6/title-sequences.zip</TitleSequencesUrl>
<TitleSequencesSha1>80fefc6ebbabc42a6f4703412daa5c62f661420d</TitleSequencesSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.4.3/objects.zip</ObjectsUrl>
<ObjectsSha1>ac78210ef46465c0f51bbffd6fe21845092af48e</ObjectsSha1>
<OpenSFXUrl>https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.5/opensound.zip</OpenSFXUrl>
<OpenSFXSha1>b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb</OpenSFXSha1>
<OpenMSXUrl>https://github.com/OpenRCT2/OpenMusic/releases/download/v1.5/openmusic.zip</OpenMSXUrl>
<OpenMSXSha1>f3c707e576281758637598ce68880416891fe5f9</OpenMSXSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.79/replays.zip</ReplaysUrl>
<ReplaysSha1>34457077DBA9448A08FF6AC95E5CB92D65252E0C</ReplaysSha1>
</PropertyGroup>
<ItemGroup>
<g2Inputs Include="$(RootDir)resources\g2\*" />
</ItemGroup>
<Target Name="DownloadLibs">
<!-- libs -->
<DownloadDependency Name="Libs"
Url="$(LibsUrl)"
Sha1="$(LibsSha1)"
CheckFile="$(DependenciesCheckFile)"
OutputDirectory="$(RootDir)lib\$(Platform)" />
</Target>
<Target Name="Clean">
<PropertyGroup>
<SlnProperties>$(SlnProperties);Configuration=$(Configuration)</SlnProperties>
</PropertyGroup>
<Delete Files="@(CleanItems)" />
<RemoveDir Directories="$(TargetDir)data" />
<MSBuild Projects="openrct2.sln" Targets="Clean" Properties="$(SlnProperties)" />
</Target>
<Target Name="BeforeBuild" BeforeTargets="Build;Rebuild" DependsOnTargets="DownloadLibs">
<PropertyGroup>
<BuildString Condition="'$(OPENRCT2_SHA1_SHORT)'!=''">$(OPENRCT2_SHA1_SHORT)</BuildString>
<BuildString Condition="'$(OPENRCT2_BRANCH)'!=''">$(BuildString) ($(OPENRCT2_BRANCH))</BuildString>
<BuildString Condition="'$(OPENRCT2_DESCRIBE)'!=''">$(BuildString) ($(OPENRCT2_DESCRIBE))</BuildString>
</PropertyGroup>
<ItemGroup>
<DataItems Include="$(RootDir)data\**\*" />
</ItemGroup>
<Message Condition="'$(BuildString)'!=''" Text="Building $(BuildString)" Importance="high" />
<Copy SourceFiles="@(CopyItems)" DestinationFolder="$(TargetDir)" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(DataItems)" DestinationFolder="$(TargetDir)data\%(RecursiveDir)" SkipUnchangedFiles="true" />
</Target>
<Target Name="Build">
<PropertyGroup>
<SlnProperties>$(SlnProperties);Configuration=$(Configuration)</SlnProperties>
</PropertyGroup>
<Message Text="SlnProperties: $(SlnProperties)" />
<MSBuild Projects="openrct2.sln" Targets="Build" Properties="$(SlnProperties)" />
</Target>
<Target Name="Rebuild">
<PropertyGroup>
<SlnProperties>$(SlnProperties);Configuration=$(Configuration)</SlnProperties>
</PropertyGroup>
<Message Text="SlnProperties: $(SlnProperties)" />
<MSBuild Projects="openrct2.sln" Targets="Rebuild" Properties="$(SlnProperties)" />
</Target>
<!-- Target to build g2.dat containing OpenRCT2 sprites -->
<!-- Only Arm64 machines will build g2.dat for Arm64 -->
<!-- Note: Arm64 machines can build for x86, x64 and Arm64 -->
<Target Name="g2" AfterTargets="Build" Inputs="@(g2Inputs)" Outputs="$(g2Output)"
Condition="'$(TestConfig)'!='true' and ('$(Platform)'!='ARM64' or '$(PROCESSOR_ARCHITECTURE)'=='ARM64')">
<Message Text="Building g2.dat..." Importance="high" />
<Exec Command="&quot;$(OutputExe)&quot; sprite build &quot;$(g2Output)&quot; &quot;$(RootDir)resources\g2\sprites.json&quot;"
StandardOutputImportance="normal" />
</Target>
<!-- Target to download the title sequences -->
<Target Name="DownloadTitleSequences" AfterTargets="Build">
<DownloadDependency Name="TitleSequences"
Url="$(TitleSequencesUrl)"
Sha1="$(TitleSequencesSha1)"
CheckFile="$(DependenciesCheckFile)"
OutputDirectory="$(TargetDir)data\sequence" />
</Target>
<!-- Target to download the objects -->
<Target Name="DownloadObjects" AfterTargets="Build">
<DownloadDependency Name="Objects"
Url="$(ObjectsUrl)"
Sha1="$(ObjectsSha1)"
CheckFile="$(DependenciesCheckFile)"
OutputDirectory="$(TargetDir)data\object" />
</Target>
<!-- Target to download OpenSFX -->
<Target Name="DownloadOpenSFX" AfterTargets="Build">
<DownloadDependency Name="OpenSFX"
Url="$(OpenSFXUrl)"
Sha1="$(OpenSFXSha1)"
CheckFile="$(DependenciesCheckFile)"
OutputDirectory="$(TargetDir)data" />
</Target>
<!-- Target to download OpenMSX -->
<Target Name="DownloadOpenMSX" AfterTargets="Build">
<DownloadDependency Name="OpenMSX"
Url="$(OpenMSXUrl)"
Sha1="$(OpenMSXSha1)"
CheckFile="$(DependenciesCheckFile)"
OutputDirectory="$(TargetDir)data" />
</Target>
<!-- Target to download replays -->
<Target Name="DownloadReplays" AfterTargets="Build">
<DownloadDependency Name="Replays"
Url="$(ReplaysUrl)"
Sha1="$(ReplaysSha1)"
CheckFile="$(DependenciesCheckFile)"
OutputDirectory="$(TargetDir)testdata\replays" />
</Target>
</Project>

View File

@ -1,151 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33213.308
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libopenrct2", "src\openrct2\libopenrct2.vcxproj", "{D24D94F6-2A74-480C-B512-629C306CE92F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openrct2-win", "src\openrct2-win\openrct2-win.vcxproj", "{7A9A57D5-7006-4208-A290-5491BA3C8808}"
ProjectSection(ProjectDependencies) = postProject
{B6808F71-30B4-4499-8FF6-0B1C86391842} = {B6808F71-30B4-4499-8FF6-0B1C86391842}
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951} = {8DD8AB7D-2EA6-44E3-8265-BAF08E832951}
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "test\tests\tests.vcxproj", "{62B020FA-E4FB-4C6E-B32A-DC999470F155}"
ProjectSection(ProjectDependencies) = postProject
{B6808F71-30B4-4499-8FF6-0B1C86391842} = {B6808F71-30B4-4499-8FF6-0B1C86391842}
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951} = {8DD8AB7D-2EA6-44E3-8265-BAF08E832951}
{7A9A57D5-7006-4208-A290-5491BA3C8808} = {7A9A57D5-7006-4208-A290-5491BA3C8808}
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2202A816-377D-4FA0-A7AF-7D4105F8A4FB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{480B577D-4E4A-4757-9A42-28A9AD33E6B0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libopenrct2ui", "src\openrct2-ui\libopenrct2ui.vcxproj", "{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openrct2-cli", "src\openrct2-cli\openrct2-cli.vcxproj", "{B6808F71-30B4-4499-8FF6-0B1C86391842}"
ProjectSection(ProjectDependencies) = postProject
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|arm64 = Debug|arm64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|arm64 = Release|arm64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
ReleaseLTCG|arm64 = ReleaseLTCG|arm64
ReleaseLTCG|Win32 = ReleaseLTCG|Win32
ReleaseLTCG|x64 = ReleaseLTCG|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D24D94F6-2A74-480C-B512-629C306CE92F}.Debug|arm64.ActiveCfg = Debug|arm64
{D24D94F6-2A74-480C-B512-629C306CE92F}.Debug|arm64.Build.0 = Debug|arm64
{D24D94F6-2A74-480C-B512-629C306CE92F}.Debug|Win32.ActiveCfg = Debug|Win32
{D24D94F6-2A74-480C-B512-629C306CE92F}.Debug|Win32.Build.0 = Debug|Win32
{D24D94F6-2A74-480C-B512-629C306CE92F}.Debug|x64.ActiveCfg = Debug|x64
{D24D94F6-2A74-480C-B512-629C306CE92F}.Debug|x64.Build.0 = Debug|x64
{D24D94F6-2A74-480C-B512-629C306CE92F}.Release|arm64.ActiveCfg = Release|arm64
{D24D94F6-2A74-480C-B512-629C306CE92F}.Release|arm64.Build.0 = Release|arm64
{D24D94F6-2A74-480C-B512-629C306CE92F}.Release|Win32.ActiveCfg = Release|Win32
{D24D94F6-2A74-480C-B512-629C306CE92F}.Release|Win32.Build.0 = Release|Win32
{D24D94F6-2A74-480C-B512-629C306CE92F}.Release|x64.ActiveCfg = Release|x64
{D24D94F6-2A74-480C-B512-629C306CE92F}.Release|x64.Build.0 = Release|x64
{D24D94F6-2A74-480C-B512-629C306CE92F}.ReleaseLTCG|arm64.ActiveCfg = ReleaseLTCG|arm64
{D24D94F6-2A74-480C-B512-629C306CE92F}.ReleaseLTCG|arm64.Build.0 = ReleaseLTCG|arm64
{D24D94F6-2A74-480C-B512-629C306CE92F}.ReleaseLTCG|Win32.ActiveCfg = ReleaseLTCG|Win32
{D24D94F6-2A74-480C-B512-629C306CE92F}.ReleaseLTCG|Win32.Build.0 = ReleaseLTCG|Win32
{D24D94F6-2A74-480C-B512-629C306CE92F}.ReleaseLTCG|x64.ActiveCfg = ReleaseLTCG|x64
{D24D94F6-2A74-480C-B512-629C306CE92F}.ReleaseLTCG|x64.Build.0 = ReleaseLTCG|x64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Debug|arm64.ActiveCfg = Debug|arm64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Debug|arm64.Build.0 = Debug|arm64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Debug|Win32.ActiveCfg = Debug|Win32
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Debug|Win32.Build.0 = Debug|Win32
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Debug|x64.ActiveCfg = Debug|x64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Debug|x64.Build.0 = Debug|x64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Release|arm64.ActiveCfg = Release|arm64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Release|arm64.Build.0 = Release|arm64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Release|Win32.ActiveCfg = Release|Win32
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Release|Win32.Build.0 = Release|Win32
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Release|x64.ActiveCfg = Release|x64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.Release|x64.Build.0 = Release|x64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.ReleaseLTCG|arm64.ActiveCfg = ReleaseLTCG|arm64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.ReleaseLTCG|arm64.Build.0 = ReleaseLTCG|arm64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.ReleaseLTCG|Win32.ActiveCfg = ReleaseLTCG|Win32
{7A9A57D5-7006-4208-A290-5491BA3C8808}.ReleaseLTCG|Win32.Build.0 = ReleaseLTCG|Win32
{7A9A57D5-7006-4208-A290-5491BA3C8808}.ReleaseLTCG|x64.ActiveCfg = ReleaseLTCG|x64
{7A9A57D5-7006-4208-A290-5491BA3C8808}.ReleaseLTCG|x64.Build.0 = ReleaseLTCG|x64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Debug|arm64.ActiveCfg = Debug|arm64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Debug|arm64.Build.0 = Debug|arm64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Debug|Win32.ActiveCfg = Debug|Win32
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Debug|Win32.Build.0 = Debug|Win32
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Debug|x64.ActiveCfg = Debug|x64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Debug|x64.Build.0 = Debug|x64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Release|arm64.ActiveCfg = Release|arm64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Release|arm64.Build.0 = Release|arm64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Release|Win32.ActiveCfg = Release|Win32
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Release|Win32.Build.0 = Release|Win32
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Release|x64.ActiveCfg = Release|x64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.Release|x64.Build.0 = Release|x64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.ReleaseLTCG|arm64.ActiveCfg = ReleaseLTCG|arm64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.ReleaseLTCG|arm64.Build.0 = ReleaseLTCG|arm64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.ReleaseLTCG|Win32.ActiveCfg = ReleaseLTCG|Win32
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.ReleaseLTCG|Win32.Build.0 = ReleaseLTCG|Win32
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.ReleaseLTCG|x64.ActiveCfg = ReleaseLTCG|x64
{62B020FA-E4FB-4C6E-B32A-DC999470F155}.ReleaseLTCG|x64.Build.0 = ReleaseLTCG|x64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Debug|arm64.ActiveCfg = Debug|arm64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Debug|arm64.Build.0 = Debug|arm64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Debug|Win32.ActiveCfg = Debug|Win32
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Debug|Win32.Build.0 = Debug|Win32
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Debug|x64.ActiveCfg = Debug|x64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Debug|x64.Build.0 = Debug|x64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Release|arm64.ActiveCfg = Release|arm64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Release|arm64.Build.0 = Release|arm64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Release|Win32.ActiveCfg = Release|Win32
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Release|Win32.Build.0 = Release|Win32
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Release|x64.ActiveCfg = Release|x64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.Release|x64.Build.0 = Release|x64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.ReleaseLTCG|arm64.ActiveCfg = ReleaseLTCG|arm64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.ReleaseLTCG|arm64.Build.0 = ReleaseLTCG|arm64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.ReleaseLTCG|Win32.ActiveCfg = ReleaseLTCG|Win32
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.ReleaseLTCG|Win32.Build.0 = ReleaseLTCG|Win32
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.ReleaseLTCG|x64.ActiveCfg = ReleaseLTCG|x64
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951}.ReleaseLTCG|x64.Build.0 = ReleaseLTCG|x64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Debug|arm64.ActiveCfg = Debug|arm64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Debug|arm64.Build.0 = Debug|arm64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Debug|Win32.ActiveCfg = Debug|Win32
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Debug|Win32.Build.0 = Debug|Win32
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Debug|x64.ActiveCfg = Debug|x64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Debug|x64.Build.0 = Debug|x64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Release|arm64.ActiveCfg = Release|arm64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Release|arm64.Build.0 = Release|arm64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Release|Win32.ActiveCfg = Release|Win32
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Release|Win32.Build.0 = Release|Win32
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Release|x64.ActiveCfg = Release|x64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.Release|x64.Build.0 = Release|x64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.ReleaseLTCG|arm64.ActiveCfg = ReleaseLTCG|arm64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.ReleaseLTCG|arm64.Build.0 = ReleaseLTCG|arm64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.ReleaseLTCG|Win32.ActiveCfg = ReleaseLTCG|Win32
{B6808F71-30B4-4499-8FF6-0B1C86391842}.ReleaseLTCG|Win32.Build.0 = ReleaseLTCG|Win32
{B6808F71-30B4-4499-8FF6-0B1C86391842}.ReleaseLTCG|x64.ActiveCfg = ReleaseLTCG|x64
{B6808F71-30B4-4499-8FF6-0B1C86391842}.ReleaseLTCG|x64.Build.0 = ReleaseLTCG|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{D24D94F6-2A74-480C-B512-629C306CE92F} = {2202A816-377D-4FA0-A7AF-7D4105F8A4FB}
{7A9A57D5-7006-4208-A290-5491BA3C8808} = {2202A816-377D-4FA0-A7AF-7D4105F8A4FB}
{62B020FA-E4FB-4C6E-B32A-DC999470F155} = {480B577D-4E4A-4757-9A42-28A9AD33E6B0}
{8DD8AB7D-2EA6-44E3-8265-BAF08E832951} = {2202A816-377D-4FA0-A7AF-7D4105F8A4FB}
{B6808F71-30B4-4499-8FF6-0B1C86391842} = {2202A816-377D-4FA0-A7AF-7D4105F8A4FB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AE225595-70B7-4580-92EF-6F2B461EBFC7}
EndGlobalSection
EndGlobal

View File

@ -1,332 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- 7z Task -->
<UsingTask TaskName="_7z"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Inputs Required="true" ParameterType="System.String" />
<Output Required="true" ParameterType="System.String" />
</ParameterGroup>
<Task>
<Using Namespace="System"/>
<Using Namespace="System.Diagnostics"/>
<Using Namespace="System.IO"/>
<Code Type="Method" Language="cs">
<![CDATA[
public override bool Execute()
{
string appPath = Find7zPath();
if (appPath == null)
{
Log.LogError("Unable to find 7z.exe.");
return false;
}
var argsSB = new StringBuilder();
argsSB.Append("a -tzip -mx9 -mtc=off ");
argsSB.Append("\"" + Output + "\" ");
foreach (string input in Inputs.Split(';'))
{
argsSB.Append("\"" + input + "\" ");
}
string args = argsSB.ToString();
Log.LogMessage(MessageImportance.Normal, "7z " + args);
var psi = new ProcessStartInfo(appPath, args);
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
var process = Process.Start(psi);
process.WaitForExit();
if (process.ExitCode != 0)
{
string appError = process.StandardError.ReadToEnd();
appError = appError.Replace("\r\n", "\n");
appError = appError.Replace("\r", "\n");
appError = appError.Replace("\n", " ");
int colonIndex = appError.IndexOf(":");
if (colonIndex != -1)
{
appError = appError.Substring(colonIndex + 1);
}
appError = appError.Trim();
Log.LogError(appError);
return false;
}
string appOutput = process.StandardOutput.ReadToEnd();
Log.LogMessage(MessageImportance.Normal, appOutput);
return true;
}
private string Find7zPath()
{
const string DefaultAppFileName = "7z.exe";
string DefaultAppPath = Path.Combine("7-Zip", DefaultAppFileName);
// HACK needed as SpecialFolder.ProgramFiles returns x86 for a 32-bit process
string programFiles = Path.Combine(Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)), "Program Files");
string appPath = Path.Combine(programFiles, DefaultAppPath);
if (File.Exists(appPath))
{
return appPath;
}
programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
appPath = Path.Combine(programFiles, DefaultAppPath);
if (File.Exists(appPath))
{
return appPath;
}
programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
appPath = Path.Combine(programFiles, DefaultAppPath);
if (File.Exists(appPath))
{
return appPath;
}
string[] envPaths = Environment.GetEnvironmentVariable("PATH").Split(';');
foreach (string envPath in envPaths)
{
appPath = Path.Combine(envPath, DefaultAppFileName);
if (File.Exists(appPath))
{
return appPath;
}
}
return null;
}
]]>
</Code>
</Task>
</UsingTask>
<!-- Unzip task -->
<UsingTask TaskName="Unzip"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Input Required="true" ParameterType="System.String" />
<OutputDirectory Required="true" ParameterType="System.String" />
</ParameterGroup>
<Task>
<Reference Include="System.IO.Compression.FileSystem" />
<Code Type="Fragment" Language="cs">
<![CDATA[
Log.LogMessage(MessageImportance.Normal, String.Format("Extracting '{0}' to '{1}'.", Input, OutputDirectory));
System.IO.Compression.ZipFile.ExtractToDirectory(Input, OutputDirectory);
]]>
</Code>
</Task>
</UsingTask>
<!-- DownloadDependency task -->
<UsingTask TaskName="DownloadDependency"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Name Required="true" ParameterType="System.String" />
<Url Required="true" ParameterType="System.String" />
<Sha1 Required="true" ParameterType="System.String" />
<CheckFile Required="false" ParameterType="System.String" />
<OutputDirectory Required="true" ParameterType="System.String" />
</ParameterGroup>
<Task>
<Reference Include="System.IO.Compression, Version=4.0.0.0" />
<Reference Include="System.IO.Compression.FileSystem" />
<Using Namespace="System"/>
<Using Namespace="System.IO"/>
<Using Namespace="System.IO.Compression"/>
<Using Namespace="System.Net"/>
<Using Namespace="System.Text"/>
<Using Namespace="Microsoft.Build.Framework"/>
<Using Namespace="Microsoft.Build.Utilities"/>
<Code Type="Method" Language="cs">
<![CDATA[
public override bool Execute()
{
if (!String.IsNullOrEmpty(CheckFile))
{
string checkSha1 = GetSha1FromCheckFile(CheckFile, Name);
if (String.Equals(checkSha1, Sha1, StringComparison.OrdinalIgnoreCase) && Directory.Exists(OutputDirectory))
{
Log.LogMessage(MessageImportance.Normal, String.Format("{0} up to date", Name));
return true;
}
}
string tempFile = Path.GetTempFileName();
try
{
// Download the file
Log.LogMessage(MessageImportance.Normal, String.Format("Downloading '{0}'.", Url));
var client = new WebClient();
client.DownloadFile(Url, tempFile);
// Check the file matches
string actualSha1;
if (!CheckFileSha1(tempFile, Sha1, out actualSha1))
{
Log.LogError("Download file did not match expected SHA1\n expected: {0}\n actual: {1}", Sha1, actualSha1);
return false;
}
// Extract contents
Log.LogMessage(MessageImportance.Normal, String.Format("Extracting to '{0}'.", OutputDirectory));
if (!Directory.Exists(OutputDirectory))
{
Directory.CreateDirectory(OutputDirectory);
}
ExtractZip(tempFile, OutputDirectory, overwrite: true);
SetSha1InCheckFile(CheckFile, Name, Sha1);
}
catch (Exception ex)
{
Log.LogErrorFromException(ex, showStackTrace: false);
}
finally
{
try
{
File.Delete(tempFile);
}
catch
{
}
}
return true;
}
private string GetSha1FromCheckFile(string checkFile, string name)
{
string result = null;
try
{
if (File.Exists(checkFile))
{
string[] lines = File.ReadAllLines(checkFile);
string sha1;
GetCheckFileLineIndexSha1(lines, name, out sha1);
return sha1;
}
}
catch (Exception ex)
{
Log.LogWarningFromException(ex, showStackTrace: false);
}
return result;
}
private void SetSha1InCheckFile(string checkFile, string name, string sha1)
{
try
{
string newLine = String.Format("{0} = {1}", name, sha1.ToLower());
string[] lines = new string[0];
int lineIndex = -1;
if (File.Exists(checkFile))
{
lines = File.ReadAllLines(checkFile);
string oldsha1;
lineIndex = GetCheckFileLineIndexSha1(lines, name, out oldsha1);
}
if (lineIndex == -1)
{
if (lines.Length == 0 || lines[lines.Length - 1].Trim().Length > 0)
{
Array.Resize(ref lines, lines.Length + 1);
}
lineIndex = lines.Length - 1;
// End with new line
Array.Resize(ref lines, lines.Length + 1);
}
lines[lineIndex] = newLine;
File.WriteAllLines(checkFile, lines);
}
catch (Exception ex)
{
Log.LogWarningFromException(ex, showStackTrace: false);
}
}
private int GetCheckFileLineIndexSha1(string[] lines, string name, out string sha1)
{
for (int i = 0; i < lines.Length; i++)
{
string line = lines[i];
string[] lineParts = line.Split('=');
if (lineParts.Length == 2)
{
string lineTag = lineParts[0].Trim();
string lineSha1 = lineParts[1].Trim();
if (lineTag == name)
{
sha1 = lineSha1;
return i;
}
}
}
sha1 = null;
return -1;
}
private bool CheckFileSha1(string file, string expectedSha1, out string actualSha1)
{
using (var fs = new FileStream(file, FileMode.Open))
{
var hasher = System.Security.Cryptography.SHA1.Create();
byte[] hash = hasher.ComputeHash(fs);
actualSha1 = BytesToHexString(hash);
if (String.Equals(actualSha1, expectedSha1, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
}
private string BytesToHexString(byte[] data)
{
var sb = new StringBuilder();
foreach (byte b in data)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
private static void ExtractZip(string zipPath, string destinationDirectory, bool overwrite)
{
var archive = ZipFile.OpenRead(zipPath);
if (!overwrite)
{
archive.ExtractToDirectory(destinationDirectory);
return;
}
foreach (ZipArchiveEntry file in archive.Entries)
{
string fileName = Path.Combine(destinationDirectory, file.FullName);
string directory = Path.GetDirectoryName(fileName);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
if (file.Name != String.Empty)
{
file.ExtractToFile(fileName, true);
}
}
}
]]>
</Code>
</Task>
</UsingTask>
</Project>

Some files were not shown because too many files have changed in this diff Show More