Merge branch 'develop'

This commit is contained in:
Michał Janiszewski 2018-06-10 22:01:02 +02:00
commit b919f54dc6
605 changed files with 35613 additions and 104341 deletions

View File

@ -1,26 +1,97 @@
---
BasedOnStyle: LLVM
AccessModifierOffset: '-4'
---
Language: Cpp
# BasedOnStyle: WebKit
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: 'true'
AlignConsecutiveDeclarations: 'true'
AllowShortFunctionsOnASingleLine: Empty
BinPackParameters: 'false'
BreakBeforeBraces: Allman
ColumnLimit: '128'
Cpp11BracedListStyle: 'false'
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: false
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
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
- FOR_ALL_RIDES
IncludeBlocks: 'Regroup'
IncludeCategories:
- Regex: '^"(\.{1,2}/)*common\.h"$'
Priority: -1
- Regex: '^<.*>$'
- Regex: '^"'
Priority: 1
- Regex: '^".*"$'
- Regex: '^<'
Priority: 2
IncludeIsMainRegex: 'false'
IndentWidth: '4'
PointerAlignment: Middle
SortIncludes: 'true'
Standard: Cpp11
TabWidth: '4'
IndentCaseLabels: true
IndentWidth: 4
IndentWrappedFunctionNames: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
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
...

1
.codecov.yml Normal file
View File

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

11
.editorconfig Normal file
View File

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

9
.gitignore vendored
View File

@ -11,16 +11,20 @@ distribution/android/*/external/
# Build artifacts
artifacts
bin.*/
.cache
.dependencies
sequencesversion
objectsversion
#lib
lib
libversion
#sequences
# Downloaded or built data files
data/g2.dat
data/title
sequencesversion
data/object
#################
## Eclipse
@ -277,7 +281,6 @@ pip-log.txt
openrct2.id*
openrct2.nam
openrct2.til
data/g2.dat
#################
## Linux

View File

@ -14,7 +14,7 @@ sudo: required
dist: trusty
env:
global:
- OPENRCT2_VERSION="0.1.2"
- OPENRCT2_VERSION="0.1.3"
matrix:
include:
@ -23,7 +23,7 @@ matrix:
services:
- docker
env:
- OPENRCT2_CMAKE_OPTS="-G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DPORTABLE=ON -DDISABLE_RCT2_TESTS=on -DCMAKE_CXX_FLAGS=-Wl,--compress-debug-sections=zlib" TARGET=ubuntu_amd64
- OPENRCT2_CMAKE_OPTS="-G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DPORTABLE=ON -DCMAKE_CXX_FLAGS=\"-gz\"" TARGET=ubuntu_amd64
- secure: "S3u2VCE2Vy8KNXoeh+DhnzjCmgTX0r95uEZrXDU+IKANOOCKn7Dg4OFDZE3LY/i1y2/EUDpnR5yLC38Ks795EUP/sv/OoMl4tjQ20yERjqWh+gcIRrgx7SdVabuAh3t4aBdaLD4Pfnj5avxeCt6rL7yGnj0wdbrbJSBZPsgSnuQ="
after_success:
# Android jobs are triggered from cron and overwrite `after_sucess` part
@ -47,8 +47,9 @@ matrix:
services:
- docker
env:
- OPENRCT2_CMAKE_OPTS="-G Ninja -DFORCE32=ON -DBUILD_SHARED_LIBS=off -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DDISABLE_RCT2_TESTS=on -DCMAKE_CXX_FLAGS=-Wl,--compress-debug-sections=zlib" TARGET=ubuntu_i686
- OPENRCT2_CMAKE_OPTS="-G Ninja -DFORCE32=ON -DBUILD_SHARED_LIBS=off -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DCMAKE_BUILD_TYPE=debug -DCMAKE_CXX_FLAGS=\"-coverage -m32 -gz\"" TARGET=ubuntu_i686
- secure: "S3u2VCE2Vy8KNXoeh+DhnzjCmgTX0r95uEZrXDU+IKANOOCKn7Dg4OFDZE3LY/i1y2/EUDpnR5yLC38Ks795EUP/sv/OoMl4tjQ20yERjqWh+gcIRrgx7SdVabuAh3t4aBdaLD4Pfnj5avxeCt6rL7yGnj0wdbrbJSBZPsgSnuQ="
- secure: "JGMzQHmDgpnVzP2uYP5KL7h6SzzGmL4kH7vJmGQRpudKAEzhzB0n7lzjrJOU82hxwmuQQ+RKlE/uxdI32Xbgl+wzZMdfQoZGMWHZfl8Le0Ft5gfZncPuE3poCbiSyPSXok9zU12JHKpEjV/sgqXv/HwhL3jAC68GPGpmxb6xWj8="
after_success:
# Android jobs are triggered from cron and overwrite `after_sucess` part
- if [[ "$TRAVIS_EVENT_TYPE" == "cron" ]] ; then exit 0 ; fi
@ -68,28 +69,30 @@ matrix:
fi
- os: linux
if: type != cron
env: OPENRCT2_CMAKE_OPTS="-G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_amd64
env: OPENRCT2_CMAKE_OPTS="-G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=OpenRCT2" TARGET=ubuntu_amd64
- os: linux
if: type != cron
env: OPENRCT2_CMAKE_OPTS="-G Ninja -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DFORCE32=on -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=windows
env: OPENRCT2_CMAKE_OPTS="-G Ninja -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DFORCE32=on -DBUILD_SHARED_LIBS=ON" TARGET=windows
- os: linux
if: type != cron
env: TARGET=docker64 OPENRCT2_CMAKE_OPTS="-G Ninja -DDISABLE_TTF=ON -DCMAKE_BUILD_TYPE=release -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on"
env: TARGET=docker64 OPENRCT2_CMAKE_OPTS="-G Ninja -DDISABLE_TTF=ON -DCMAKE_BUILD_TYPE=release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=OpenRCT2"
services:
- docker
- os: linux
if: type != cron
env: OPENRCT2_CMAKE_OPTS="-G Ninja -DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
env:
- OPENRCT2_CMAKE_OPTS="-G Ninja -DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=debug -DCMAKE_CXX_FLAGS=\"-coverage\" -DCMAKE_INSTALL_PREFIX=OpenRCT2" TARGET=docker64
- secure: "JGMzQHmDgpnVzP2uYP5KL7h6SzzGmL4kH7vJmGQRpudKAEzhzB0n7lzjrJOU82hxwmuQQ+RKlE/uxdI32Xbgl+wzZMdfQoZGMWHZfl8Le0Ft5gfZncPuE3poCbiSyPSXok9zU12JHKpEjV/sgqXv/HwhL3jAC68GPGpmxb6xWj8="
services:
- docker
- os: linux
if: type != cron
env: OPENRCT2_CMAKE_OPTS="-G Ninja -DDISABLE_OPENGL=ON -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
env: OPENRCT2_CMAKE_OPTS="-G Ninja -DDISABLE_OPENGL=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=OpenRCT2" TARGET=docker64
services:
- docker
- os: osx
if: type != cron
osx_image: xcode8.3
osx_image: xcode9.3
env:
- secure: "OXn/i72FxW/oh6RGlaN+gHSbkt1ToFe36etaiDOsJQznt6fe9CpFdnE8U1XBHlGokcEjbGNErRU7CFDKYHQuGrPZyHXwgqG2/0emIqFaFt5ti5ypyYKf5qH9x1LLLfdZxDyHkxXdlJ7Etxbp3G7qrV8CGRQiYRNHm1f98AmuufE="
after_success:
@ -108,7 +111,6 @@ matrix:
- os: linux
if: type = cron OR branch = master OR branch =~ ^android
language: android
dist: precise
before_install: []
env:
- secure: "S3u2VCE2Vy8KNXoeh+DhnzjCmgTX0r95uEZrXDU+IKANOOCKn7Dg4OFDZE3LY/i1y2/EUDpnR5yLC38Ks795EUP/sv/OoMl4tjQ20yERjqWh+gcIRrgx7SdVabuAh3t4aBdaLD4Pfnj5avxeCt6rL7yGnj0wdbrbJSBZPsgSnuQ="
@ -191,4 +193,5 @@ notifications:
cache:
directories:
- .cache
- $HOME/.ccache
apt: true

21
.vs/CMakeSettings.json Normal file
View File

@ -0,0 +1,21 @@
{
"configurations": [
{
"name": "x64-Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"generator": "Ninja",
"buildRoot": "${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}",
"configurationType": "Debug",
"variables": [
{
"name": "VCPKG_TARGET_TRIPLET",
"value": "x64-windows-winssl"
},
{
"name": "CMAKE_TOOLCHAIN_FILE",
"value": "C:\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
}
]
}
]
}

92
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,92 @@
{
"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++17"
},
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}",
"${workspaceRoot}/src"
],
"defines": [],
"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": [
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.13.26128/include/*",
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.13.26128/atlmfc/include/*",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/winrt",
"${workspaceRoot}",
"${workspaceRoot}/src",
"${workspaceRoot}/lib/x86/include",
"${workspaceRoot}/lib/x64/include",
"${workspaceRoot}/lib/googletest/googletest/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.13.26128/include/*",
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.13.26128/atlmfc/include/*",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared",
"C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/winrt",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}

11
.vscode/launch.json vendored
View File

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

View File

@ -6,7 +6,9 @@ endif()
project(openrct2 CXX)
include(FindPkgConfig)
if (NOT MSVC)
include(FindPkgConfig)
endif ()
include(CheckCXXCompilerFlag)
include(GNUInstallDirs)
@ -16,10 +18,14 @@ set(CMAKE_MACOSX_RPATH 1)
set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v0.1.2/title-sequence-v0.1.2.zip")
set(TITLE_SEQUENCE_SHA1 "1136ef92bfb05cd1cba9831ba6dc4a653d87a246")
set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v1.0.2/objects.zip")
set(OBJECTS_SHA1 "acf853ff6fa4285cea94cc9d8f74730e57202d06")
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(DOWNLOAD_TITLE_SEQUENCES "Download title sequences during installation." ON)
option(DOWNLOAD_OBJECTS "Download objects during installation." ON)
# Options
option(STATIC "Create a static build.")
@ -68,52 +74,65 @@ function (ADD_CHECK_CXX_COMPILER_FLAG _CXXFLAGS _CACHE_VAR _FLAG)
endif ()
endfunction ()
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_NULL_DEREFERENCE -Wnull-dereference)
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)
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)
if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /std:c++latest /permissive- /Zc:externConstexpr /WX")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244") # C4244: 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
if (MINGW)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_OVERRIDE -Wno-error=redundant-decls)
endif ()
# Items below are not supported by ICC
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
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 -Wno-unknown-pragmas -Wno-unused-function -Wno-missing-braces ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-comment -Wshadow -Wnonnull")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG=${DEBUG_LEVEL}")
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_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif ()
if (APPLE AND NOT USE_MMAP)
set(PIE_FLAG "-fno-pie")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
add_definitions(-D__SSE4_1__)
add_definitions(-D__AVX2__)
else ()
set(PIE_FLAG "-fpie")
endif ()
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_NULL_DEREFERENCE -Wnull-dereference)
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)
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)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14")
# 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)
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 -Wno-unknown-pragmas -Wno-missing-braces ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-comment -Wshadow -Wnonnull")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG=${DEBUG_LEVEL}")
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_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif ()
if (APPLE AND NOT USE_MMAP)
set(PIE_FLAG "-fno-pie")
else ()
set(PIE_FLAG "-fpie")
endif ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17")
endif ()
# Defines
if (USE_MMAP)
@ -175,7 +194,7 @@ include("${ROOT_DIR}/src/openrct2-ui/CMakeLists.txt" NO_POLICY_SCOPE)
# g2
add_custom_command(
OUTPUT g2.dat
COMMAND ./openrct2 sprite build ${CMAKE_BINARY_DIR}/g2.dat ${ROOT_DIR}/resources/g2/sprites.json
COMMAND ./openrct2 sprite build \"${CMAKE_BINARY_DIR}/g2.dat\" \"${ROOT_DIR}/resources/g2/sprites.json\"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_target(g2 DEPENDS ${PROJECT} g2.dat)
@ -205,10 +224,21 @@ if (DOWNLOAD_TITLE_SEQUENCES)
message(\"Using cached title sequences\")\n\
else () \n\
file(DOWNLOAD ${TITLE_SEQUENCE_URL} \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/title-sequences.zip EXPECTED_HASH SHA1=${TITLE_SEQUENCE_SHA1} SHOW_PROGRESS)\n\
execute_process(COMMAND \"${CMAKE_COMMAND}\" -E chdir \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/ \"${CMAKE_COMMAND}\" -E tar xvf title-sequences.zip)\n\
execute_process(COMMAND \"${CMAKE_COMMAND}\" -E chdir \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/ \"${CMAKE_COMMAND}\" -E tar xf title-sequences.zip)\n\
file(REMOVE \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/title-sequences.zip)\n\
endif ()")
endif ()
if (DOWNLOAD_OBJECTS)
# If rct2.wtrcyan.json or data/object/ exists, assume all the objects are already present
install(CODE
"if (EXISTS \"\$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/rct2/water/rct2.wtrcyan.json\" OR EXISTS ${CMAKE_SOURCE_DIR}/data/object/)\n\
message(\"Using cached objects\")\n\
else () \n\
file(DOWNLOAD ${OBJECTS_URL} \$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/objects.zip EXPECTED_HASH SHA1=${OBJECTS_SHA1} SHOW_PROGRESS)\n\
execute_process(COMMAND \"${CMAKE_COMMAND}\" -E chdir \$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/ \"${CMAKE_COMMAND}\" -E tar xf objects.zip)\n\
file(REMOVE \$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/objects.zip)\n\
endif ()")
endif ()
install(TARGETS "libopenrct2" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
install(TARGETS "openrct2" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
<?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>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0820"
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -26,7 +26,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
@ -46,7 +45,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0820"
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,5 @@
version: 0.1.2.{build}
version: 0.1.3.{build}
image:
# - Visual Studio 2015
- Visual Studio 2017
cache:
- C:\ProgramData\chocolatey\bin -> scripts\ps\appveyor_install.ps1
@ -10,7 +9,7 @@ environment:
OPENRCT2_ORG_TOKEN:
secure: leQX3xCQpmBLGuMqrxjFlzexDt96ypNRMM5TTRVHbGE8PwVg9crgeykLc2BIZU6HDHveJCHqh2cGMdHtHYJYcw==
BUILD_SERVER: AppVeyor
PATH: $(PATH);C:\Program Files (x86)\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
PATH: C:\ProgramData\chocolatey\bin;$(PATH);C:\Program Files (x86)\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
install:
- ps: >-
.\scripts\ps\appveyor_install.ps1
@ -19,9 +18,10 @@ platform:
- x64
configuration: Release
build:
parallel: true
project: openrct2.proj
test_script:
- ps: msbuild openrct2.proj /t:TestNoRCT2 /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
- ps: msbuild openrct2.proj /t:Test /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
after_test:
- ps: (new-object net.webclient).UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\artifacts\test-results.xml))
artifacts:

View File

@ -1,20 +1,20 @@
# Contributors to OpenRCT2
Includes all git commit authors. Aliases are GitHub user names.
## Project team
* Ted John (IntelOrca) - Owner, developer, merger, issue management
* Duncan Frost (duncanspumpkin) - Developer, merger, issue management
* Michael Steenbeek (Gymnasiast) - Developer, issue management, translation management
* Michał Janiszewski (janisozaur) - Developer, CI, Linux management, issue management
* Lewis Fox (LRFLEW) - Developer, macOS management
* Marijn van der Werf (marijnvdwerf) - Developer
* (zsilencer) - Developer
* Richard Jenkins (rwjuk) - Developer, issue management
## Development team
* Ted John (IntelOrca) - Owner
* Duncan Frost (duncanspumpkin)
* Michael Steenbeek (Gymnasiast) - translation management
* Michał Janiszewski (janisozaur) - CI, Linux management
* Lewis Fox (LRFLEW) - macOS management
* Marijn van der Werf (marijnvdwerf)
* (zsilencer)
* Richard Jenkins (rwjuk)
* Hielke Morsink (Broxzier)
* Aaron van Geffen (AaronVanGeffen)
## Long term contributors
The following people are not part of the project team, but have been contributing for a long time.
The following people are not part of the development team, but have been contributing for a long time.
* Matte Andersson (Nubbie)
* Kenton Boadway (Krutonium)
* Joe Minor Jr (wolfreak99)
@ -26,52 +26,56 @@ The following people are not part of the project team, but have been contributin
* (qcz) - Scenery window, misc.
* Matthias Lanzinger (lnz) - Climate, finance, scenario, ride reachability
* (zsilencer) - Audio, multiplayer, misc.
* Adrian Wielgosik (adrian17) - Misc.
* (hexdec) - Misc.
* Dennis Devriendt (ddevrien) - Misc.
* Maciek Baron (MaciekBaron) - 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) - Misc.
* Ben Pye (benpye) - Misc.
* (JeroenSack) - Misc.
* Sijmen Schoon (SijmenSchoon) - Misc.
* Joe Minor Jr (wolfreak99) - Misc.
* Inseok Lee (dlunch) - Original command line
* Lewis Fox (LRFLEW) - Misc.
* Marijn van der Werf (marijnvdwerf) - Drawing, misc.
* Hielke Morsink (Broxzier) - Tile inspector, heightmap loader, 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
## Additional implementation (OpenRCT2)
* (atmaxinger) - User configuration
* (anyc) - Housecleaning, cross-platform fixes
* Michael Steenbeek (Gymnasiast) - Cheats, RCT1 ride style, misc.
* Miso Zmiric (mzmiric5) - Misc.
* (DutchRPW) - Housecleaning, initialisation
* Jørn Lomax (jvlomax) - User configuration
* (KingHual) - Housecleaning
* Alexander Overvoorde (Overv) - Misc.
* (eezstreet) - Misc.
* Thomas den Hollander (ThomasdenH) - Misc.
* James Robertson (rd3k) - Misc.
* Miso Zmiric (mzmiric5) - 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
* 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 for release versions 0.0.4, 0.0.5/0.0.6/0.0.7, 0.1.0/0.1.1, and 0.1.2, title sequences using milliseconds
* Kelson Blakewood (spacek531) - title sequences for release versions 0.0.4 through 0.1.2, title sequences using milliseconds
* Hugo Wallenburg (Goddesen) - Misc.
* Matte Andersson (Nubbie) - Misc, UX
* Daniel Trujillo Viedma (gDanix) - Custom currency.
* Niels NTG Poldervaart (Niels-NTG) - Misc.
* (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) - Misc.
* 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) - Misc.
* Park Joon-Kyu (segfault87) - Allow filtering guests by name
* Harrison Gentry (hgentry) - Date-changing command, misc.
* Joshua Moerman (Jaxan) - 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
## Bug fixes
* (halfbro)
@ -79,7 +83,6 @@ The following people are not part of the project team, but have been contributin
* (nean)
* Ed Foley (e-foley)
* Michael Pham (nightroan)
* Hielke Morsink (Broxzier)
* Lucas Riutzel (jackinloadup)
* Youngjae Yu (YJSoft)
* Chanwoong Kim (kexplo)
@ -88,28 +91,31 @@ The following people are not part of the project team, but have been contributin
* (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)
* Richard Jenkins (rwjuk)
* (ceeac)
* Matthias Moninger (Zeh Matt)
* Tomas Dittmann (Chaosmeister)
* William Wallace (Willox)
* Christian Friedrich Coors (ccoors)
* Robbin Voortman (rvoortman)
* (telk5093)
* Ethan Smith (ethanhs) - Refactoring.
* Ethan Smith (ethanhs) - Refactor MAX_PATH
* Robert Lewicki (rlewicki)
* Tyler Ruckinger (TyPR124)
* Justin Gottula (jgottula)
* Seongsik Park (pss9205)
* (Deurklink)
* Nathan Zabriskie (NathanZabriskie)
* Toby Hinloopen (tobyhinloopen)
* Patrick Martinez (martip23)
* Andy Ford (AndyTWF)
## Toolchain
* (Balletie) - macOS
* Kevin Burke (kevinburke) - macOS, Unix
* Miso Zmiric (mzmiric5) - macOS
* Miso Zmiric (mzmiric5) - Initial macOS toolchain
* Jarno Veuger (JarnoVgr) - Windows build server
* Ted John (IntelOrca) - Windows
* Michał Janiszewski (janisozaur) - Linux, Travis CI
@ -129,28 +135,30 @@ The following people are not part of the project team, but have been contributin
* 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)
* Chinese (Traditional) - Harry Lam (daihakken)
* Czech - Martin Černáč (octaroot), (Clonewayx), Tomáš Pazdiora (Aroidzap)
* Dutch - Michael Steenbeek (Gymnasiast), Yannic Geurts (xzbobzx), (mrtnptrs), Thomas den Hollander (ThomasdenH), (hostbrute), Marijn van der Werf (marijnvdwerf), Tom Kroes (ThePsionic); reviewing and discussion: Aaron van Geffen (AaronVanGeffen), (Balletie) and Sijmen Schoon (SijmenSchoon).
* Finnish - (DJHasis), (Zode), (TheWing)
* French - (fbourigault), Joël Troch (JoelTroch), Michael Steenbeek (Gymnasiast), Romain Vigier (rvgr), (AziasYur), Hugo Courtial (s0r00t), David Delobel (incyclum)
* French - (fbourigault), Joël Troch (JoelTroch), Michael Steenbeek (Gymnasiast), Romain Vigier (rvgr), (AziasYur), Hugo Courtial (s0r00t), David Delobel (incyclum), Nicolas Hawrysh (xp4xbox)
* German - (danidoedel), (atmaxinger), (Yepoleb), Daniel Kessel (dkessel), Leon (AllGoodNamesAreTaken), (raidcookie)
* Italian - Luca Andrea Rossi (LucaRed)
* Japanese - Aaron van Geffen (AaronVanGeffen), Nick Hall (nickhall), (jhako), Harry Lam (daihakken)
* Korean - (telk5093), (NeverDruid); small fixes: (kexplo)
* Norwegian - Hugo Wallenburg (Goddesen)
* Polish - Adrian Wielgosik (adrian17), (lopezloo), Michał Janiszewski (janisozaur)
* Portuguese (BR) - (kaudy), (renansimoes)
* Russian - (Soosisya)
* Simplified Chinese - Naiji Ma (naijim), (izhangfei), Eric Zhao (sczyh30)
* Spanish - (mdtrooper), Josué Acevedo (Wirlie), Daniel Trujillo Viedma (gDanix); small fixes: (teapartycthulu)
* Swedish - (Jinxit), (mharrys), (Slimeyo), Matte Andersson (Nubbie)
* Traditional Chinese - Harry Lam (daihakken)
* Norwegian - (Goddesen)
## Graphics
* OpenRCT2 Logo - Yannic Geurts (xzbobzx)
* Booster Sprites - Nicolas Hawrysh (xp4xbox)
## RollerCoaster Tycoon 2 credits
Design and programming by Chris Sawyer

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}Select maximum length of time to wait before depa
STR_1215 :{WINDOW_COLOUR_2}Synchronise with adjacent stations
STR_1216 :{SMALLFONT}{BLACK}Select whether to synchronise departure with all adjacent stations (for 'racing')
STR_1217 :{COMMA16} ثواني
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :مخرج فقط
STR_1221 :لا مدخل
STR_1222 :لا مخرج
@ -1777,8 +1777,8 @@ STR_1771 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COM
STR_1772 :{COMMA16}
STR_1773 :Only one on-ride photo section allowed per ride
STR_1774 :Only one cable lift hill allowed per ride
STR_1775 :مغلق
STR_1776 :مفعل
STR_1775 :<removed string - do not use>
STR_1776 :<removed string - do not use>
STR_1777 :{WINDOW_COLOUR_2}Ride music
STR_1778 :{STRINGID} - -
STR_1779 :{INLINE_SPRITE}{254}{19}{00}{00} Panda costume
@ -3574,9 +3574,9 @@ STR_5232 :{SMALLFONT}{BLACK}Editors
STR_5233 :{SMALLFONT}{BLACK}Miscellaneous
STR_5234 :{SMALLFONT}{BLACK}Prompts
STR_5235 :{SMALLFONT}{BLACK}Settings
STR_5236 :Window:
STR_5237 :Palette:
STR_5238 :الثيم الحالي:
STR_5236 :نافذة
STR_5237 :لوحة
STR_5238 :الثيم الحالي
STR_5239 :Duplicate
STR_5240 :Enter a name for the theme
STR_5241 :Can't change this theme
@ -3834,8 +3834,8 @@ STR_5492 :إعدادات المشهد
STR_5493 :أرسل رسالة
STR_5494 :<removed string - do not use>
STR_5495 :قائمة اللاعبيين
STR_5496 :اللاعب:
STR_5497 :البنج:
STR_5496 :اللاعب
STR_5497 :البنج
STR_5498 :قائمة السرفر
STR_5499 :اسم اللاعب:
STR_5500 :أضف سرفر
@ -3980,7 +3980,7 @@ STR_5638 :Permission denied
STR_5639 :{SMALLFONT}{BLACK}أظهر قائمة اللاعبين
STR_5640 :{SMALLFONT}{BLACK}إدارة المجموعات
STR_5641 :المجموعة الإفتراضية:
STR_5642 :مجموعة:
STR_5642 :مجموعة
STR_5643 :أضف مجموعة
STR_5644 :إمسح مجموعة
STR_5645 :الشات
@ -4008,7 +4008,7 @@ STR_5666 :Passwordless Login
STR_5701 :{WINDOW_COLOUR_2}Last action: {BLACK}{STRINGID}
STR_5702 :{SMALLFONT}{BLACK}Locate player's most recent action
STR_5703 :لا يمكن طرد المُضيف
STR_5704 :Last Action:
STR_5704 :أخر فعل
STR_5705 :Can't set to this group
STR_5706 :Can't remove group that players belong to
STR_5707 :This group cannot be modified
@ -4183,34 +4183,34 @@ STR_5871 :Plants don't age
STR_5872 :{SMALLFONT}{BLACK}Disable plant ageing such that they don't wilt.
STR_5873 :Allow chain lifts on all track pieces
STR_5874 :{SMALLFONT}{BLACK}Allows any piece of track to be made into a chain lift
STR_5875 :Drawing Engine:
STR_5876 :{SMALLFONT}{BLACK}The engine to use for drawing the game.
STR_5877 :Software
STR_5878 :Software (hardware display)
STR_5879 :OpenGL (experimental)
STR_5875 :محرك الرسم:
STR_5876 :{SMALLFONT}{BLACK}المحرك المُستخدم في رسم اللعبة.
STR_5877 :البرمجيات
STR_5878 :البرمجيات (عرض الأجهزة)
STR_5879 :أوبن جي إل (تجريبي)
STR_5880 :المحدد فقط
STR_5881 :الغير محدد فقط
STR_5882 :Custom currency
STR_5883 :Custom currency configuration
STR_5884 :{WINDOW_COLOUR_2}Exchange rate:
STR_5885 :{WINDOW_COLOUR_2}is equivalent to {COMMA32} GBP (£)
STR_5882 :العملة المخصصة
STR_5883 :تكوين العملة المخصصة
STR_5884 :{WINDOW_COLOUR_2}سعر الصرف:
STR_5885 :{WINDOW_COLOUR_2}ما يعادل {COMMA32} GBP (£)
STR_5886 :{WINDOW_COLOUR_2}علامة الميزانية:
STR_5887 :Prefix
STR_5888 :Suffix
STR_5889 :Custom currency symbol
STR_5890 :Enter the currency symbol to display
STR_5891 :Default
STR_5892 :{SMALLFONT}{BLACK}Go to the default directory
STR_5893 :Exchange Rate
STR_5894 :Enter the exchange rate
STR_5895 :Save Track
STR_5896 :Track save failed!
STR_5887 :السابقة
STR_5888 :اللاحقة
STR_5889 :رمز العملة المخصص
STR_5890 :أدخل رمز العملة لعرضها
STR_5891 :الإفتراضي
STR_5892 :{SMALLFONT}{BLACK}اذهب إلى الوجهة الافتراضية
STR_5893 :سعر الصرف
STR_5894 :أدخل سعر الصرف
STR_5895 :حفظ المسار
STR_5896 :تعذّر حفظ المسار!
STR_5897 :<removed string - do not use>
STR_5898 :{BLACK}Can't load the track, the file might be {newline}corrupted, broken or missing!
STR_5899 :Toggle paint debug window
STR_5900 :Use original drawing code
STR_5901 :Show segment heights
STR_5902 :Show bounding boxes
STR_5900 :استخدم رمز الرسم الأصلي
STR_5901 :إظهار ارتفاع المقطع
STR_5902 :إظهار الصناديق المحيطة
STR_5903 :Show paint debug window
STR_5904 :إرجاع التاريخ
STR_5905 :{SMALLFONT}{BLACK}A map generation tool that automatically creates a custom landscape
@ -4219,7 +4219,7 @@ STR_5907 :{SMALLFONT}{BLACK}When enabled, zooming in will centre around the c
STR_5908 :Allow arbitrary ride type changes
STR_5909 :{SMALLFONT}{BLACK}Allows changing ride type freely. May cause crashes.
STR_5910 :تطبيق
STR_5911 :See-Through Paths
STR_5911 :انظر من خلال المسارات
STR_5912 :See-through paths toggle
STR_5913 :الشات
STR_5914 :رحلة غير معروفة
@ -4232,15 +4232,15 @@ STR_5920 :تصيير مؤثرات الطقس
STR_5921 :{SMALLFONT}{BLACK}If enabled, rain and gloomy colours will be rendered during storms.
STR_5922 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{SMALLFONT}{BLACK}Max {STRINGID}
STR_5923 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{SMALLFONT}{BLACK}Max {COMMA16} {STRINGID} per train
STR_5924 :Surface details
STR_5924 :تفاصيل السطح
STR_5925 :تفاصيل المسار
STR_5926 :تفاصيل المسار
STR_5927 :Scenery details
STR_5927 :تفاصيل المشهد
STR_5928 :تفاصيل المدخل
STR_5929 :خصائص الحائط
STR_5930 :Large scenery details
STR_5930 :تفاصيل المشهد الكبير
STR_5931 :تفاصيل اليافطة
STR_5932 :Corrupt element details
STR_5932 :تفاصيل العناصر الفاسدة
STR_5933 :الخصائص
STR_5934 :{WINDOW_COLOUR_2}Terrain texture: {BLACK}{STRINGID}
STR_5935 :{WINDOW_COLOUR_2}Terrain edge: {BLACK}{STRINGID}
@ -4249,10 +4249,10 @@ STR_5937 :Not owned and not for sale
STR_5938 :{WINDOW_COLOUR_2}Water level: {BLACK}{COMMA16}
STR_5939 :Remove park fences
STR_5940 :Restore park fences
STR_5941 :{WINDOW_COLOUR_2}Base height:
STR_5941 :{WINDOW_COLOUR_2}ارتفاع القاعدة:
STR_5942 :{WINDOW_COLOUR_2}أسم المسار: {BLACK}{STRINGID}
STR_5943 :{WINDOW_COLOUR_2}Additions: {BLACK}{STRINGID}
STR_5944 :{WINDOW_COLOUR_2}Additions: {BLACK}None
STR_5943 :{WINDOW_COLOUR_2}الإضافات: {BLACK}{STRINGID}
STR_5944 :{WINDOW_COLOUR_2}الإضافات: {BLACK}لا شئ
STR_5945 :{WINDOW_COLOUR_2}حواف متصلة:
STR_5946 :{WINDOW_COLOUR_2}نوع الرحلة: {BLACK}{STRINGID}
STR_5947 :{WINDOW_COLOUR_2}معرف الرحلة: {BLACK}{COMMA16}
@ -4263,35 +4263,35 @@ STR_5951 :{WINDOW_COLOUR_2}Track piece ID: {BLACK}{COMMA16}
STR_5952 :{WINDOW_COLOUR_2}Sequence number: {BLACK}{COMMA16}
STR_5953 :{SMALLFONT}{BLACK}Sort the map elements on the current tile based on their base height.
STR_5954 :{WINDOW_COLOUR_2}Scenery age: {BLACK}{COMMA16}
STR_5955 :{WINDOW_COLOUR_2}Quadrant placement: {BLACK}{STRINGID}
STR_5956 :Southwest
STR_5957 :Northwest
STR_5958 :Northeast
STR_5959 :Southeast
STR_5960 :{WINDOW_COLOUR_2}Quadrant placement:
STR_5961 :{WINDOW_COLOUR_2}Entry index: {BLACK}{COMMA16}
STR_5962 :{WINDOW_COLOUR_2}Collision detection:
STR_5963 :{WINDOW_COLOUR_2}Raised Corners:
STR_5964 :{WINDOW_COLOUR_2}Diagonal
STR_5955 :{WINDOW_COLOUR_2}وضع حالة رباعي: {BLACK}{STRINGID}
STR_5956 :جنوب غرب
STR_5957 :الشمال الغربي
STR_5958 :شمالي شرقي
STR_5959 :الجنوب الشرقي
STR_5960 :{WINDOW_COLOUR_2}وضع حالة رباعي:
STR_5961 :{WINDOW_COLOUR_2}فهرس المدخل: {BLACK}{COMMA16}
STR_5962 :{WINDOW_COLOUR_2}كشف التصادم:
STR_5963 :{WINDOW_COLOUR_2}زوايا مرتفعة:
STR_5964 :{WINDOW_COLOUR_2}مائل
STR_5965 :{WINDOW_COLOUR_2}نوع المدخل: {BLACK}{STRINGID}
STR_5966 :{WINDOW_COLOUR_2}جزء مدخل الحديقة: {BLACK}{STRINGID}
STR_5967 :وسط
STR_5968 :شمال
STR_5969 :يمين
STR_5970 :{WINDOW_COLOUR_2}Entrance ID: {BLACK}{COMMA16}
STR_5971 :{WINDOW_COLOUR_2}Exit ID: {BLACK}{COMMA16}
STR_5972 :{WINDOW_COLOUR_2}Ride ID: {BLACK}{COMMA16}
STR_5970 :{WINDOW_COLOUR_2}مُعرف المدخل: {BLACK}{COMMA16}
STR_5971 :{WINDOW_COLOUR_2}مُعرف المخرج: {BLACK}{COMMA16}
STR_5972 :{WINDOW_COLOUR_2}مُعرف الرحلة: {BLACK}{COMMA16}
STR_5973 :تسلق إلي الأعلي
STR_5974 :{SMALLFONT}{BLACK}Changes the base- and clearance height so that it's at the same as the next element on the current tile. Doing this makes it easier to build on this tile.
STR_5975 :إنحدار:
STR_5976 :مستوي
STR_5977 :Right side up
STR_5978 :Left side up
STR_5977 :الجانب الأيمن الأعلى
STR_5978 :الجانب الأيسر لأعلى
STR_5979 :{WINDOW_COLOUR_2}نوع الحائط: {BLACK}{COMMA16}
STR_5980 :{WINDOW_COLOUR_2}كتابة اليافطة: {BLACK}{STRINGID}
STR_5981 :{WINDOW_COLOUR_2}ليست يافطة
STR_5982 :{WINDOW_COLOUR_2}Large scenery type: {BLACK}{COMMA16}
STR_5983 :{WINDOW_COLOUR_2}Large scenery piece ID: {BLACK}{COMMA16}
STR_5982 :{WINDOW_COLOUR_2}نوع المشهد الكبير: {BLACK}{COMMA16}
STR_5983 :{WINDOW_COLOUR_2}معرّف قطعة المشاهد الكبيرة: {BLACK}{COMMA16}
STR_5984 :المسارات المقفلة:
STR_5985 :مجلد جديد
STR_5986 :أدخل الأسم للمجلد الجديد.
@ -4311,13 +4311,13 @@ STR_5999 :حدد النقود
STR_6000 :أدخل قيمة جديدة
STR_6001 :تفعيل تأثيرات الضوء (تجريبي)
STR_6002 :{SMALLFONT}{BLACK}Lamps and rides will be lit up at night.{NEWLINE}Requires rendering engine to be set to hardware display.
STR_6003 :Cut-away View
STR_6004 :Cut-away View
STR_6005 :Enable cut-away view
STR_6006 :{SMALLFONT}{BLACK}Cut-away view only displays map elements at or below the cut height
STR_6007 :Cut height
STR_6003 :عرض كوتاواي
STR_6004 :عرض كوتاواي
STR_6005 :تفعيل عرض كوتاواي
STR_6006 :{SMALLFONT}{BLACK}Cut-away view only displays map elements at or below the cut height (vertical clipping) and in the selected area (horizontal clipping).
STR_6007 :علو القطع
STR_6008 :{SMALLFONT}{BLACK}Click to toggle raw value<->value in measurement units
STR_6009 :{SMALLFONT}{BLACK}Select cut height
STR_6009 :{SMALLFONT}{BLACK}حدد علو القطع
STR_6010 :{COMMA2DP32}متر
STR_6011 :{COMMA1DP16}قدم
STR_6012 :{COMMA1DP16}
@ -4478,7 +4478,7 @@ STR_6166 :{SMALLFONT}{BLACK}مزامنة كل فريم إلي معدل تحد
STR_6167 :{SMALLFONT}{BLACK}متقدم
STR_6168 :تسلسل العنوان
STR_6169 :تحديد السيناريو
STR_6170 :الضبط
STR_6170 :ضبط الواجهة
STR_6171 :البحث
STR_6172 :{SMALLFONT}{BLACK}بحث
STR_6173 :من فضلك وفر الأسم للبحث:
@ -4510,7 +4510,7 @@ STR_6198 :{BLACK}يوم:
STR_6199 :حدد التاريخ
STR_6200 :إسترجاع التاريخ
STR_6201 :{MONTH}
STR_6202 :تفعيل اللأرض الإفتراضية
STR_6202 :نمط الأرض الإفتراضية
STR_6203 :{SMALLFONT}{BLACK}حينما يتم تفعيلة، سوف يتم إظهار أرضية إفتراضية لكل تساعدك في وضع الأشكال عمودياً بشكل صحيح.
STR_6204 :حجر
STR_6205 :حديد
@ -4530,6 +4530,41 @@ STR_6218 :الرسمية OpenRCT2
STR_6219 :تعليم مشاكل المسار
STR_6220 :أجعله مُستخدم
STR_6221 :{SMALLFONT}{BLACK هذا سوف يحدد المدخل والمخرج المعروف للرحلة للمنطقة هذه. فقط مدخل ومخرج واحد يمكن إسخدامة لكل محطة.
STR_6222 :لا يمكن وضع نقطة دخول الضيوف هنا...
STR_6223 :يجب أن يكون خارج حدود الحديقة!
STR_6224 :{STRING} تم وضع نقطة دخول الضيوف.
STR_6225 :غير مدعومة من تصيير أوبن جي إل
STR_6226 :تمكين استكمال السيناريو المبكر
STR_6227 :{SMALLFONT}{BLACK}يتم إطلاق إستكمال السيناريو عندما يتم استيفاء جميع أهداف السيناريو قبل الموعد المحدد.
STR_6228 :إعدادات السيناريو
STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID}
STR_6230 :{STRINGID}:
STR_6231 :{WINDOW_COLOUR_2}{STRINGID}: {MOVE_X}{185}{STRINGID}
STR_6232 :مُجمد
STR_6233 :عرض كوتاواي
STR_6234 :قم بتمييز مشاكل المسار
STR_6235 :معلومات السرفر
STR_6236 :اللاعبين
STR_6237 :المجموعات
STR_6238 :إعدادات اللعب المتعدد
STR_6239 :لقطة عمودية
STR_6240 :لقطة أفقية
STR_6241 :حدد منطقة
STR_6242 :إخلاء المُحدد
STR_6243 :{SMALLFONT}{BLACK}تجديد الرحلة،{NEWLINE}إجعلها كالجديدة
STR_6244 :لايمكن تجديد الرحلة...
STR_6245 :{SMALLFONT}{BLACK}الرحلة لا تحتاج إلي التجديد
STR_6246 :تجديد
STR_6247 :تجديد الرحلة/الجذب
STR_6248 :{WINDOW_COLOUR_1}هل تود تجديد {STRINGID} بقيمة {CURRENCY}?
STR_6249 :{WINDOW_COLOUR_1}هل تود تجديد {STRINGID}?
STR_6250 :{WINDOW_COLOUR_1}هل تود تدمير {STRINGID} بالكامل و إسترجاع {CURRENCY}?
STR_6251 :الرحلة ليس ممتلئة بعد
STR_6252 :رابط واجهة تطبيق تويتش
STR_6253 :{SMALLFONT}{BLACK}وفر الرابط لواجهة تطبيق تويتش. مطلوبة من أجل .
STR_6254 :الرابط لواجهة برمجة تطبيق تويتش:
STR_6255 :رابط غير صالح
#############
# Scenarios #
#############
@ -4971,407 +5006,3 @@ STR_DTLS :
STR_SCNR :حصن مفارقة تاريخية
STR_PARK :حصن مفارقة تاريخية
STR_DTLS :
#####################
# Rides/attractions #
#####################
#RCT2
[TOPSP1]
STR_NAME :اللفة العالية
STR_DESC :Passengers ride in a gondola suspended by large rotating arms, rotating forwards and backwards head-over-heels
STR_CPTY :8 راكبين
[BMSD]
STR_NAME :Twister Trains
STR_DESC :A spacious train with shoulder restraints
[BMSU]
STR_NAME :Stand-up Twister Trains
STR_DESC :A train with shoulder restraints, in which the riders stand up
[BMFL]
STR_NAME :Floorless Twister Trains
STR_DESC :A spacious train with shoulder restraints and no floor, making for a more exciting ride
[WMMINE]
STR_NAME :Mine Cars
STR_DESC :Cars shaped like an old mine cart
[WMOUSE]
STR_NAME :Mouse Cars
STR_DESC :Indivual cars shaped like a mouse
[STEEP1]
STR_NAME :Horses
STR_DESC :Single cars shaped like a horse
[STEEP2]
STR_NAME :Motorbikes
STR_DESC :Single cars shaped like a motorbike
[SBOX]
STR_NAME :Soap boxes
STR_DESC :Single cars shaped like a soap box
[BOB1]
STR_NAME :Bobsleigh Trains
STR_DESC :A train consisting of 2-seater cars where the riders are behind each other
[INTBOB]
STR_NAME :6-seater Bobsleighs
STR_DESC :Bobsleighs with three seating rows, with room for two people on each
[LIFT1]
STR_NAME :Lift Cabin
STR_DESC :Steel lift cabin
[ARRT1]
STR_NAME :Corkscrew Roller Coaster Trains
STR_DESC :Roller coaster train with shoulder restraints
[ARRT2]
STR_NAME :Hypercoaster Trains
STR_DESC :Comfortable trains with only lap bar restraints
[MONBK]
STR_NAME :Bicycles
[OBS1]
STR_NAME :Single-deck Cabin
[OBS2]
STR_NAME :Double-deck Cabin
[GTC]
STR_NAME :Ghost Train Cars
[HMCAR]
STR_NAME :Haunted Mansion Cars
[VREEL]
STR_NAME :Virginia Reel tubs
[WMSPIN]
STR_NAME :Spinning Mouse Cars
[AMT1]
STR_NAME :Mine Trains
[SLCT]
STR_NAME :Compact Inverted Coaster Trains
[SLCFO]
STR_NAME :Face-off Cars
[VEKDV]
STR_NAME :Vertical Shuttle Cars
[THCAR]
STR_NAME :Air Powered Vertical Coaster Trains
[SSC1]
STR_NAME :Launched Freefall car
[DING1]
STR_NAME :Dinghies
[LFB1]
STR_NAME :Logs
[RFTBOAT]
STR_NAME :Rafts
[IVMC1]
STR_NAME :Four-seater Cars
[SPDRCR]
STR_NAME :Spiral Roller Coaster Trains
[TOGST]
STR_NAME :Stand-up Roller Coaster Trains
[PREMT1]
STR_NAME :LIM Launched Roller Coaster Trains
[PMT1]
STR_NAME :Powered mine train
[BMAIR]
STR_NAME :Flying Roller Coaster Trains
[INTINV]
STR_NAME :Impulse Trains
[INTST]
STR_NAME :Giga Coaster Trains
[NEMT]
STR_NAME :4-across Inverted Roller Coaster Trains
[VEKST]
STR_NAME :Lay-down Roller Coaster Trains
[REVCAR]
STR_NAME :Reverser Cars
STR_DESC :Bogied cars capable of turning around on special reversing sections
[SKYTR]
STR_NAME :Lay-down Cars
[BMVD]
STR_NAME :Six-seater Twister Trains
[SUBMAR]
STR_NAME :Submarines
#WW
[CONDORRD]
STR_NAME :Condor Trains
STR_DESC :Riding in special harnesses below the track, riders experience the feeling of flight as they swoop through the air in Condor-shaped trains
STR_CPTY :4 راكبين لكل عربة
#WW
[CONGAEEL]
STR_NAME :Conger Eel Trains
STR_DESC :Trains with shoulder restraints, in the shape of a Conger Eel.
STR_CPTY :4 راكبين لكل عربة
#WW
[MINELIFT]
STR_NAME :Mine Lift Cabin
STR_DESC :A steel lift cabin commonly used in mines
#WW
[ANACONDA]
STR_NAME :Anaconda Trains
#WW
[CROCFLUM]
STR_NAME :Crocodile boats
#WW
[WHICGRUB]
STR_NAME :Witchity Grub Trains
#WW
[GRATWHTE]
STR_NAME :Great White Shark Trains
STR_DESC :Trains with shoulder restraints, in the shape of a Great White Shark
#WW
[BOMERANG]
STR_NAME :Boomerang Trains
#WW
[KOLARIDE]
STR_NAME :Koala car
#WW
[MANTARAY]
STR_NAME :Manta Ray boats
STR_DESC :Coaster boats in the shape of a Manta Ray
#WW
[TUTLBOAT]
STR_NAME :Turtle boats
#WW, for the Wooden RC
[MINECART]
STR_NAME :Mine Cart Trains
#WW
[LIONRIDE]
STR_NAME :سيارات الأسد
#WW
[RHINORID]
STR_NAME :قطارات وحيد القرن
#WW
[OSTRICH]
STR_NAME :Ostrich Trains
#WW
[GORILLA]
STR_NAME :Gorilla Trains
#WW
[FOOTBALL]
STR_NAME :قطارات كرة القدم
#WW
[TIGRTWST]
STR_NAME :Bengal Tiger Cars
#WW
[TAXICSTR]
STR_NAME :قطارات سيارات التاكسي الصفراء
#WW
[OUTRIGGR]
STR_NAME :Outrigger canoes
#WW
[SANFTRAM]
STR_NAME :مترو سان فرنسيسكو
#WW
[PENGUINB]
STR_NAME :قطارات البطريق
#WW
[POLARBER]
STR_NAME :Polar Bear Trains
#WW
[LONDONBS]
STR_NAME :Routemaster buses
STR_DESC :Replicas of the famous London Routemaster bus
#WW
[BLACKCAB]
STR_NAME :Black Cabs
#WW
[TGVTRAIN]
STR_NAME :TGV Trains
#WW
[ROCKET]
STR_NAME :صواريخ 1950
#WW
[SPUTNIKR]
STR_NAME :Sputnik Cars
#WW
[DHOWWATR]
STR_NAME :Dhow boats
#WW
[SURFBRDC]
STR_NAME :Surfing Trains
#WW
[KILLWHAL]
STR_NAME :غواصات الحوت القاتل
#WW
[HIPPORID]
STR_NAME :غواصات الهيبو
#WW
[DOLPHINR]
STR_NAME :قوارب الدلوفين
#WW
[MANDARIN]
STR_NAME :Mandarin Duck Boats
STR_DESC :Duck shaped boat, propelled by the pedalling front seat passengers
#TT
[BATTRRAM]
STR_NAME :Battering Ram Trains
#TT
[BLCKDETH]
STR_NAME :قطارات الموت الأسود
#TT
[JOUSTING]
STR_NAME :Jousting Knights
#TT
[OAKBAREL]
STR_NAME :براميل السنديان
#TT
[STAMPHRD]
STR_NAME :Stampeding Herd Trains
#TT
[DRAGNFLY]
STR_NAME :سيارات التانين الطائرة
#TT
[PTERODAC]
STR_NAME :Pterodactyl Trains
#TT
[PEGASUSX]
STR_NAME :سيارات بيجسوس
#TT
[CERBERUS]
STR_NAME :Cerberus Trains
#TT
[HARPIESX]
STR_NAME :Harpies Trains
#TT
[VALKYRIE]
STR_NAME :Valkyries Trains
#TT
[RIVRSTYX]
STR_NAME :River Styx boats
#TT
[TELEPTER]
STR_NAME :المقصورة المتنقلة
#TT
[HOVERCAR]
STR_NAME :السيارات الحوامة
#TT
[HOVRBORD]
STR_NAME :الألواح الحوامة
#TT
[HOVERBKE]
STR_NAME :العجلات الحوامة
#TT, Reverser RC
[POLICECR]
STR_NAME :سيارات الشرطة
#TT, Looping RC
[POLCHASE]
STR_NAME :قطار سيارات الشرطة
#TT
[GANSTRCR]
STR_NAME :سيارات العصابات
#TT
[SEAPLANE]
STR_NAME :سيارات الطائرة المائية المُعلقة
#TT
[BARNSTRM]
STR_NAME :سيارات بارنستورمينغ
#TT
[FLYGBOAT]
STR_NAME :القوارب الطائرة
#TT
[BMVOCTPS]
STR_NAME :سائل من الفضاء الخارجي
#TT
[JETPLANE]
STR_NAME :سيارات الطائرات النفاثة
#TT
[HOTRODXX]
STR_NAME :سيارات الطرق السريعة
###########
# Scenery #
###########
#Bulrushes
[TBR]
STR_NAME :اعشاب البرك

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}Seleccioneu el temps d'espera màxim abans d'arre
STR_1215 :{WINDOW_COLOUR_2}Sincronitza l'arrencada amb les estacions adjacents.
STR_1216 :{SMALLFONT}{BLACK}Seleccioneu si cal sincronitzar la posada en marxa dels vehicles de l'estació ambs els d'estacions adjacents.
STR_1217 :{COMMA16} segons
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Només sortida
STR_1221 :Sense entrada
STR_1222 :Sense sortida
@ -4914,25 +4914,3 @@ STR_DTLS :
STR_SCNR :El castell {LEFTGUILLEMET}Fort Anachronism{RIGHTGUILLEMET}
STR_PARK :El castell {LEFTGUILLEMET}Fort Anachronism{RIGHTGUILLEMET}
STR_DTLS :
#####################
# Rides/attractions #
#####################
#RCT2
[TOPSP1]
STR_NAME :Top Spin
STR_DESC :Les cabines on estan els passatgers estan suspeses per braços que dirigeixen les cabines girant-les, balancejant-les i movent-les cap endavant i cap enrere.
STR_CPTY :8 passatgers
#WW
[CONDORRD]
STR_NAME :El còndor
STR_DESC :Els passatgers, lligats amb subjeccions per baix de la via, experimenten la sensació de volar mentre cauen en picat per l'aire en vagons en forma de còndor.
STR_CPTY :4 passatgers per vagó
#WW
[CONGAEEL]
STR_NAME :El congre
STR_DESC :Una muntanya russa compacta de vies d'acer amb vagons en forma d'anguila que travessen tirabuixons i inversions.
STR_CPTY :4 passatgers per vagó

File diff suppressed because it is too large Load Diff

View File

@ -1219,8 +1219,8 @@ STR_1214 :{SMALLFONT}{BLACK}Wählen Sie die Höchstwartezeit{NEWLINE}vor der
STR_1215 :{WINDOW_COLOUR_2}Mit benachbarten Stationen synchronisieren
STR_1216 :{SMALLFONT}{BLACK}Auswählen, ob Abfahrt mit allen benachbarten Stationen (für `Rennen') synchronisiert werden soll
STR_1217 :{COMMA16} Sekunden
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Nur Ausgang
STR_1221 :Kein Eingang
STR_1222 :Kein Ausgang
@ -4967,13 +4967,3 @@ STR_DTLS :
STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#######################
# Bahnen/Attraktionen #
#######################
#WW
[CONDORRD]
STR_NAME :Kondorbahn
STR_DESC :Die Passagiere fahren, in speziellen Gurten hängend, unterhalb der Strecke. In den kondorförmigen Wagen erleben sie dabei ein Gefühl des Fliegens.
STR_CPTY :4 Fahrgäste pro Wagen

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}Select maximum length of time to wait before depa
STR_1215 :{WINDOW_COLOUR_2}Synchronise with adjacent stations
STR_1216 :{SMALLFONT}{BLACK}Select whether to synchronise departure with all adjacent stations (for 'racing')
STR_1217 :{COMMA16} seconds
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Exit only
STR_1221 :No entrance
STR_1222 :No exit
@ -1600,7 +1600,7 @@ STR_1594 :{SMALLFONT}{OPENQUOTES}This wonton soup from {STRINGID} is really g
STR_1595 :{SMALLFONT}{OPENQUOTES}This meatball soup from {STRINGID} is really good value{ENDQUOTES}
STR_1596 :{SMALLFONT}{OPENQUOTES}This fruit juice from {STRINGID} is really good value{ENDQUOTES}
STR_1597 :{SMALLFONT}{OPENQUOTES}This soybean milk from {STRINGID} is really good value{ENDQUOTES}
STR_1598 :{SMALLFONT}{OPENQUOTES}This sujongkwa from {STRINGID} is really good value{ENDQUOTES}
STR_1598 :{SMALLFONT}{OPENQUOTES}This sujeonggwa from {STRINGID} is really good value{ENDQUOTES}
STR_1599 :{SMALLFONT}{OPENQUOTES}This sub sandwich from {STRINGID} is really good value{ENDQUOTES}
STR_1600 :{SMALLFONT}{OPENQUOTES}This cookie from {STRINGID} is really good value{ENDQUOTES}
STR_1601 :
@ -1632,7 +1632,7 @@ STR_1626 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for wonton soup fro
STR_1627 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for meatball soup from {STRINGID}{ENDQUOTES}
STR_1628 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for fruit juice from {STRINGID}{ENDQUOTES}
STR_1629 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for soybean milk from {STRINGID}{ENDQUOTES}
STR_1630 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for sujongkwa from {STRINGID}{ENDQUOTES}
STR_1630 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for sujeonggwa from {STRINGID}{ENDQUOTES}
STR_1631 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for a sub sandwich from {STRINGID}{ENDQUOTES}
STR_1632 :{SMALLFONT}{OPENQUOTES}I'm not paying that much for a cookie from {STRINGID}{ENDQUOTES}
STR_1633 :
@ -1777,8 +1777,8 @@ STR_1771 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COM
STR_1772 :{COMMA16}
STR_1773 :Only one on-ride photo section allowed per ride
STR_1774 :Only one cable lift hill allowed per ride
STR_1775 :Off
STR_1776 :On
STR_1775 :<removed string - do not use>
STR_1776 :<removed string - do not use>
STR_1777 :{WINDOW_COLOUR_2}Ride music
STR_1778 :{STRINGID} - -
STR_1779 :{INLINE_SPRITE}{254}{19}{00}{00} Panda costume
@ -2118,7 +2118,7 @@ STR_2110 :{WINDOW_COLOUR_2}Wonton Soup price:
STR_2111 :{WINDOW_COLOUR_2}Meatball Soup price:
STR_2112 :{WINDOW_COLOUR_2}Fruit Juice price:
STR_2113 :{WINDOW_COLOUR_2}Soybean Milk price:
STR_2114 :{WINDOW_COLOUR_2}Sujongkwa price:
STR_2114 :{WINDOW_COLOUR_2}Sujeonggwa price:
STR_2115 :{WINDOW_COLOUR_2}Sub Sandwich price:
STR_2116 :{WINDOW_COLOUR_2}Cookie price:
STR_2117 :{WINDOW_COLOUR_2}
@ -2140,7 +2140,7 @@ STR_2132 :Wonton Soup
STR_2133 :Meatball Soup
STR_2134 :Fruit Juice
STR_2135 :Soybean Milk
STR_2136 :Sujongkwa
STR_2136 :Sujeonggwa
STR_2137 :Sub Sandwich
STR_2138 :Cookie
STR_2139 :Empty Bowl
@ -2162,7 +2162,7 @@ STR_2154 :Wonton Soups
STR_2155 :Meatball Soups
STR_2156 :Fruit Juices
STR_2157 :Soybean Milks
STR_2158 :Sujongkwa
STR_2158 :Sujeonggwa
STR_2159 :Sub Sandwiches
STR_2160 :Cookies
STR_2161 :Empty Bowls
@ -2184,7 +2184,7 @@ STR_2176 :some Wonton Soup
STR_2177 :some Meatball Soup
STR_2178 :a Fruit Juice
STR_2179 :some Soybean Milk
STR_2180 :some Sujongkwa
STR_2180 :some Sujeonggwa
STR_2181 :a Sub Sandwich
STR_2182 :a Cookie
STR_2183 :an Empty Bowl
@ -2206,7 +2206,7 @@ STR_2198 :Wonton Soup
STR_2199 :Meatball Soup
STR_2200 :Fruit Juice
STR_2201 :Soybean Milk
STR_2202 :Sujongkwa
STR_2202 :Sujeonggwa
STR_2203 :Sub Sandwich
STR_2204 :Cookie
STR_2205 :Empty Bowl
@ -3572,8 +3572,8 @@ STR_5232 :{SMALLFONT}{BLACK}Editors
STR_5233 :{SMALLFONT}{BLACK}Miscellaneous
STR_5234 :{SMALLFONT}{BLACK}Prompts
STR_5235 :{SMALLFONT}{BLACK}Settings
STR_5236 :Window:
STR_5237 :Palette:
STR_5236 :Window
STR_5237 :Palette
STR_5238 :Current Theme:
STR_5239 :Duplicate
STR_5240 :Enter a name for the theme
@ -3832,8 +3832,8 @@ STR_5492 :Scenario options
STR_5493 :Send Message
STR_5494 :<removed string - do not use>
STR_5495 :Player List
STR_5496 :Player:
STR_5497 :Ping:
STR_5496 :Player
STR_5497 :Ping
STR_5498 :Server List
STR_5499 :Player Name:
STR_5500 :Add Server
@ -3978,7 +3978,7 @@ STR_5638 :Permission denied
STR_5639 :{SMALLFONT}{BLACK}Show list of players
STR_5640 :{SMALLFONT}{BLACK}Manage groups
STR_5641 :Default Group:
STR_5642 :Group:
STR_5642 :Group
STR_5643 :Add Group
STR_5644 :Remove Group
STR_5645 :Chat
@ -4006,7 +4006,7 @@ STR_5666 :Passwordless Login
STR_5701 :{WINDOW_COLOUR_2}Last action: {BLACK}{STRINGID}
STR_5702 :{SMALLFONT}{BLACK}Locate player's most recent action
STR_5703 :Can't kick the host
STR_5704 :Last Action:
STR_5704 :Last Action
STR_5705 :Can't set to this group
STR_5706 :Can't remove group that players belong to
STR_5707 :This group cannot be modified
@ -4312,7 +4312,7 @@ STR_6002 :{SMALLFONT}{BLACK}Lamps and rides will be lit up at night.{NEWLINE}
STR_6003 :Cut-away View
STR_6004 :Cut-away View
STR_6005 :Enable cut-away view
STR_6006 :{SMALLFONT}{BLACK}Cut-away view only displays map elements at or below the cut height
STR_6006 :{SMALLFONT}{BLACK}Cut-away view only displays map elements at or below the cut height (vertical clipping) and in the selected area (horizontal clipping).
STR_6007 :Cut height
STR_6008 :{SMALLFONT}{BLACK}Click to toggle raw value<->value in measurement units
STR_6009 :{SMALLFONT}{BLACK}Select cut height
@ -4476,7 +4476,7 @@ STR_6166 :{SMALLFONT}{BLACK}Synchronises each frame displayed to the monitor'
STR_6167 :{SMALLFONT}{BLACK}Advanced
STR_6168 :Title Sequence
STR_6169 :Scenario selection
STR_6170 :Tweaks
STR_6170 :Interface Tweaks
STR_6171 :Search
STR_6172 :{SMALLFONT}{BLACK}Search
STR_6173 :Please provide the name to search:
@ -4508,7 +4508,7 @@ STR_6198 :{BLACK}Day:
STR_6199 :Set date
STR_6200 :Reset date
STR_6201 :{MONTH}
STR_6202 :Enable virtual floor
STR_6202 :Virtual floor style:
STR_6203 :{SMALLFONT}{BLACK}When enabled, a virtual floor will be rendered when holding Ctrl or Shift to ease vertical placement of elements.
STR_6204 :Brick
STR_6205 :Iron
@ -4532,6 +4532,40 @@ STR_6222 :Can't place guest entry point here...
STR_6223 :Must be outside park boundaries!
STR_6224 :{STRING} placed a guest entry point.
STR_6225 :Not supported with OpenGL renderer
STR_6226 :Enable early scenario completion
STR_6227 :{SMALLFONT}{BLACK}Triggers scenario completion when all scenario goals are met before the target date.
STR_6228 :Scenario Options
STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID}
STR_6230 :{STRINGID}:
STR_6231 :{WINDOW_COLOUR_2}{STRINGID}: {MOVE_X}{185}{STRINGID}
STR_6232 :Frozen
STR_6233 :Cut-away view
STR_6234 :Highlight path issues
STR_6235 :Server Information
STR_6236 :Players
STR_6237 :Groups
STR_6238 :Multiplayer Options
STR_6239 :Vertical Clipping
STR_6240 :Horizontal Clipping
STR_6241 :Select area
STR_6242 :Clear selection
STR_6243 :{SMALLFONT}{BLACK}Refurbishes the ride,{NEWLINE}makes it like new
STR_6244 :Can't refurbish ride...
STR_6245 :{SMALLFONT}{BLACK}Ride doesn't need refurbishing
STR_6246 :Refurbish
STR_6247 :Refurbish ride/attraction
STR_6248 :{WINDOW_COLOUR_1}Do you want to refurbish {STRINGID} for {CURRENCY}?
STR_6249 :{WINDOW_COLOUR_1}Do you want to refurbish {STRINGID}?
STR_6250 :{WINDOW_COLOUR_1}Are you sure you want to completely demolish {STRINGID} and gain {CURRENCY}?
STR_6251 :Ride is not empty yet
STR_6252 :Twitch API URL
STR_6253 :{SMALLFONT}{BLACK}Provide URL of Twitch integration API. Required in order to enable Twitch integration.
STR_6254 :URL of Twitch integration API:
STR_6255 :URL is not valid
STR_6256 :Rendering effects
STR_6257 :Glassy (translucent)
STR_6258 :Clear (transparent)
STR_6259 :Disabled
#############
# Scenarios #
@ -4975,411 +5009,10 @@ STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#####################
# Rides/attractions #
#####################
#RCT2
[TOPSP1]
STR_NAME :Top Spin
STR_DESC :Passengers ride in a gondola suspended by large rotating arms, rotating forwards and backwards head-over-heels
STR_CPTY :8 passengers
[BMSD]
STR_NAME :Twister Trains
STR_DESC :A spacious train with shoulder restraints
[BMSU]
STR_NAME :Stand-up Twister Trains
STR_DESC :A train with shoulder restraints, in which the riders stand up
[BMFL]
STR_NAME :Floorless Twister Trains
STR_DESC :A spacious train with shoulder restraints and no floor, making for a more exciting ride
[WMMINE]
STR_NAME :Mine Cars
STR_DESC :Cars shaped like an old mine cart
[WMOUSE]
STR_NAME :Mouse Cars
STR_DESC :Indivual cars shaped like a mouse
[STEEP1]
STR_NAME :Horses
STR_DESC :Single cars shaped like a horse
[STEEP2]
STR_NAME :Motorbikes
STR_DESC :Single cars shaped like a motorbike
[SBOX]
STR_NAME :Soap boxes
STR_DESC :Single cars shaped like a soap box
[BOB1]
STR_NAME :Bobsleigh Trains
STR_DESC :A train consisting of 2-seater cars where the riders are behind each other
[INTBOB]
STR_NAME :6-seater Bobsleighs
STR_DESC :Bobsleighs with three seating rows, with room for two people on each
[LIFT1]
STR_NAME :Lift Cabin
STR_DESC :Steel lift cabin
[ARRT1]
STR_NAME :Corkscrew Roller Coaster Trains
STR_DESC :Roller coaster train with shoulder restraints
[ARRT2]
STR_NAME :Hypercoaster Trains
STR_DESC :Comfortable trains with only lap bar restraints
[MONBK]
STR_NAME :Bicycles
[OBS1]
STR_NAME :Single-deck Cabin
[OBS2]
STR_NAME :Double-deck Cabin
[GTC]
STR_NAME :Ghost Train Cars
[HMCAR]
STR_NAME :Haunted Mansion Cars
[VREEL]
STR_NAME :Virginia Reel tubs
[WMSPIN]
STR_NAME :Spinning Mouse Cars
[AMT1]
STR_NAME :Mine Trains
[SLCT]
STR_NAME :Compact Inverted Coaster Trains
[SLCFO]
STR_NAME :Face-off Cars
[VEKDV]
STR_NAME :Vertical Shuttle Cars
[THCAR]
STR_NAME :Air Powered Vertical Coaster Trains
[SSC1]
STR_NAME :Launched Freefall car
[DING1]
STR_NAME :Dinghies
[LFB1]
STR_NAME :Logs
[RFTBOAT]
STR_NAME :Rafts
[IVMC1]
STR_NAME :Four-seater Cars
[SPDRCR]
STR_NAME :Spiral Roller Coaster Trains
[TOGST]
STR_NAME :Stand-up Roller Coaster Trains
[PREMT1]
STR_NAME :LIM Launched Roller Coaster Trains
[PMT1]
STR_NAME :Powered mine train
[BMAIR]
STR_NAME :Flying Roller Coaster Trains
[INTINV]
STR_NAME :Impulse Trains
[INTST]
STR_NAME :Giga Coaster Trains
[NEMT]
STR_NAME :4-across Inverted Roller Coaster Trains
[VEKST]
STR_NAME :Lay-down Roller Coaster Trains
[REVCAR]
STR_NAME :Reverser Cars
STR_DESC :Bogied cars capable of turning around on special reversing sections
[SKYTR]
STR_NAME :Lay-down Cars
[BMVD]
STR_NAME :Six-seater Twister Trains
[SUBMAR]
STR_NAME :Submarines
#WW
[CONDORRD]
STR_NAME :Condor Trains
STR_DESC :Riding in special harnesses below the track, riders experience the feeling of flight as they swoop through the air in Condor-shaped trains
STR_CPTY :4 passengers per car
#WW
[CONGAEEL]
STR_NAME :Conger Eel Trains
STR_DESC :Trains with shoulder restraints, in the shape of a Conger Eel.
#WW
[MINELIFT]
STR_NAME :Mine Lift Cabin
STR_DESC :A steel lift cabin commonly used in mines
#WW
[ANACONDA]
STR_NAME :Anaconda Trains
#WW
[CROCFLUM]
STR_NAME :Crocodile boats
#WW
[WHICGRUB]
STR_NAME :Witchity Grub Trains
#WW
[GRATWHTE]
STR_NAME :Great White Shark Trains
STR_DESC :Trains with shoulder restraints, in the shape of a Great White Shark
#WW
[BOMERANG]
STR_NAME :Boomerang Trains
#WW
[KOLARIDE]
STR_NAME :Koala car
#WW
[MANTARAY]
STR_NAME :Manta Ray boats
STR_DESC :Coaster boats in the shape of a Manta Ray
#WW
[TUTLBOAT]
STR_NAME :Turtle boats
#WW, for the Wooden RC
[MINECART]
STR_NAME :Mine Cart Trains
#WW
[LIONRIDE]
STR_NAME :Lion Cars
#WW
[RHINORID]
STR_NAME :Rhino Trains
#WW
[OSTRICH]
STR_NAME :Ostrich Trains
#WW
[GORILLA]
STR_NAME :Gorilla Trains
#WW
[FOOTBALL]
STR_NAME :Football Trains
#WW
[TIGRTWST]
STR_NAME :Bengal Tiger Cars
#WW
[TAXICSTR]
STR_NAME :Yellow Taxi Trains
#WW
[OUTRIGGR]
STR_NAME :Outrigger canoes
#WW
[SANFTRAM]
STR_NAME :San Francisco Trams
#WW
[PENGUINB]
STR_NAME :Penguin Trains
#WW
[POLARBER]
STR_NAME :Polar Bear Trains
#WW
[LONDONBS]
STR_NAME :Routemaster buses
STR_DESC :Replicas of the famous London Routemaster bus
#WW
[BLACKCAB]
STR_NAME :Black Cabs
#WW
[TGVTRAIN]
STR_NAME :TGV Trains
#WW
[ROCKET]
STR_NAME :1950's Rockets
#WW
[SPUTNIKR]
STR_NAME :Sputnik Cars
#WW
[DHOWWATR]
STR_NAME :Dhow boats
#WW
[SURFBRDC]
STR_NAME :Surfing Trains
#WW
[KILLWHAL]
STR_NAME :Killer Whale Submarines
#WW
[HIPPORID]
STR_NAME :Hippo Submarines
#WW
[DOLPHINR]
STR_NAME :Dolphin boats
#WW
[MANDARIN]
STR_NAME :Mandarin Duck Boats
STR_DESC :Duck shaped boat, propelled by the pedalling front seat passengers
#TT
[BATTRRAM]
STR_NAME :Battering Ram Trains
#TT
[BLCKDETH]
STR_NAME :Black Death Trains
#TT
[JOUSTING]
STR_NAME :Jousting Knights
#TT
[OAKBAREL]
STR_NAME :Oak Barrels
#TT
[STAMPHRD]
STR_NAME :Stampeding Herd Trains
#TT
[DRAGNFLY]
STR_NAME :Dragonfly Cars
#TT
[PTERODAC]
STR_NAME :Pterodactyl Trains
#TT
[PEGASUSX]
STR_NAME :Pegasus Cars
#TT
[CERBERUS]
STR_NAME :Cerberus Trains
#TT
[HARPIESX]
STR_NAME :Harpies Trains
#TT
[VALKYRIE]
STR_NAME :Valkyries Trains
#TT
[RIVRSTYX]
STR_NAME :River Styx boats
#TT
[TELEPTER]
STR_NAME :Teleporter Cabin
#TT
[HOVERCAR]
STR_NAME :Hover Cars
#TT
[HOVRBORD]
STR_NAME :Hoverboards
#TT
[HOVERBKE]
STR_NAME :Hover Bikes
#TT, Reverser RC
[POLICECR]
STR_NAME :Police Cars
#TT, Looping RC
[POLCHASE]
STR_NAME :Police Car Trains
#TT
[GANSTRCR]
STR_NAME :Gangster Cars
#TT
[SEAPLANE]
STR_NAME :Suspended Seaplane Cars
#TT
[BARNSTRM]
STR_NAME :BarnStorming Cars
#TT
[FLYGBOAT]
STR_NAME :Flying boats
#TT
[BMVOCTPS]
STR_NAME :Blob from Outer Space
#TT
[JETPLANE]
STR_NAME :Jet Plane Cars
#TT
[HOTRODXX]
STR_NAME :Hot Rod Cars
###########
# Scenery #
###########
#Bulrushes was spelt incorrectly
[TBR]
STR_NAME :Bulrushes
## Start OpenRCT2 Official
[XXBBBR01]
STR_NAME :Base Block

File diff suppressed because it is too large Load Diff

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}Selecciona el tiempo de espera máximo antes de p
STR_1215 :{WINDOW_COLOUR_2}Sincronizar con estaciones adyacentes
STR_1216 :{SMALLFONT}{BLACK}Selecciona si deseas sincronizar esta estación con otras estaciones adyacentes a esta estación.
STR_1217 :{COMMA16} segundos
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Sólo salida
STR_1221 :No hay entrada
STR_1222 :No hay salida
@ -4907,21 +4907,3 @@ STR_DTLS :
STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
######################
# Juegos/Atracciones #
######################
#WW
[CONDORRD]
STR_NAME :Atracción Condor
STR_DESC :Los pasajeros viajan boca abajo y acostados, suspendidos del arnés debajo de la pista en un vagón con forma de Cóndor que se balancea libremente de un lado a otro al pasar por las curvas.
STR_CPTY :4 pasajeros por vagón
###################
# Tiendas/Puestos #
###################
[INFOK]
STR_NAME :Quiosco de información
STR_DESC :Puesto en el que los visitantes obtienen mapas del parque y compran paraguas.

View File

@ -1222,8 +1222,8 @@ STR_1214 :{SMALLFONT}{BLACK}Valitse enimmäisodotusaika ennen lähtöä
STR_1215 :{WINDOW_COLOUR_2}Synkronoi rinnakkaisasemien kanssa
STR_1216 :{SMALLFONT}{BLACK}Valitse pitäisikö synkronoida lähtö kaikkien rinnakkaisasemien kanssa ('kilpa-ajoa' varten)
STR_1217 :{COMMA16} sekuntia
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Vain uloskäynti
STR_1221 :Ei sisäänkäyntiä
STR_1222 :Ei uloskäyntiä
@ -3895,13 +3895,3 @@ STR_5549 :Vuosi/Kuukausi/Päivä
STR_5550 :{POP16}{POP16}Vuosi {COMMA16}, {PUSH16}{PUSH16}{MONTH} {PUSH16}{PUSH16}{STRINGID}
STR_5551 :Vuosi/Päivä/Kuukausi
STR_5552 :{POP16}{POP16}Vuosi {COMMA16}, {PUSH16}{PUSH16}{PUSH16}{STRINGID} {MONTH}
#########
# Rides #
#########
#WW
[CONDORRD]
STR_NAME :Condor Ride
STR_DESC :Riding in special harnesses below the track, riders experience the feeling of flight as they swoop through the air in Condor-shaped trains
STR_CPTY :4 matkustajaa per auto

View File

@ -1221,8 +1221,8 @@ STR_1214 :{SMALLFONT}{BLACK}Sélectionnez la durée maximum à attendre avant
STR_1215 :{WINDOW_COLOUR_2}Synchroniser avec les stations adjacentes
STR_1216 :{SMALLFONT}{BLACK}Sélectionnez s'il faut synchroniser le départ avec toutes les stations adjacentes
STR_1217 :{COMMA16} secondes
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Sortie uniquement
STR_1221 :Pas d'entrée
STR_1222 :Pas de sortie
@ -1779,8 +1779,8 @@ STR_1771 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COM
STR_1772 :{COMMA16}
STR_1773 :Une seule section photo sur le vif autorisée par attraction
STR_1774 :Une seule montée par câble autorisée par attraction
STR_1775 :Éteint
STR_1776 :Allumé
STR_1775 :<removed string - do not use>
STR_1776 :<removed string - do not use>
STR_1777 :{WINDOW_COLOUR_2}Musique
STR_1778 :{STRINGID} - -
STR_1779 :{INLINE_SPRITE}{254}{19}{00}{00} Costume de panda
@ -2874,7 +2874,7 @@ STR_2862 :Remerciements musique...
STR_2863 :Remerciements musique
STR_2864 :{WINDOW_COLOUR_2}March - Children of the Regiment: (Fucik) sans copyright
STR_2865 :{WINDOW_COLOUR_2}Heyken's Serenade : (J.Heyken) British Standard Music Coy ; GEMA, BRITICO
STR_2866 :{WINDOW_COLOUR_2}In Continental Mood : (Compositeur inconnu) Copyright
STR_2866 :{WINDOW_COLOUR_2}La Belle Espagnole : (Robert Vollstedt) Copyright Control
STR_2867 :{WINDOW_COLOUR_2}Wedding Journey : (Traditionnelle)
STR_2868 :{WINDOW_COLOUR_2}Les Histoires du Bois de Vienne : (Johann Strauss) sans copyright
STR_2869 :{WINDOW_COLOUR_2}Slavonic Dance : (Traditionnelle)
@ -3575,8 +3575,8 @@ STR_5232 :{SMALLFONT}{BLACK}Editeurs
STR_5233 :{SMALLFONT}{BLACK}Divers
STR_5234 :{SMALLFONT}{BLACK}Fenêtres de dialogue
STR_5235 :{SMALLFONT}{BLACK}Paramètres
STR_5236 :Fenêtre :
STR_5237 :Palette :
STR_5236 :Fenêtre
STR_5237 :Palette
STR_5238 :Thème actuel :
STR_5239 :Dupliquer
STR_5240 :Entrez un nom pour le thème
@ -3835,8 +3835,8 @@ STR_5492 :Options du scénario
STR_5493 :Envoyer un message
STR_5494 :<removed string - do not use>
STR_5495 :Liste des joueurs
STR_5496 :Joueur :
STR_5497 :Ping :
STR_5496 :Joueur
STR_5497 :Ping
STR_5498 :Liste des serveurs
STR_5499 :Nom du joueur :
STR_5500 :Ajouter un serveur
@ -3981,7 +3981,7 @@ STR_5638 :Permission refusée
STR_5639 :{SMALLFONT}{BLACK}Affiche la liste des joueurs
STR_5640 :{SMALLFONT}{BLACK}Gérer les groupes
STR_5641 :Groupe par défaut :
STR_5642 :Groupes :
STR_5642 :Groupe
STR_5643 :Ajouter groupe
STR_5644 :Suppr. groupe
STR_5645 :Chat
@ -4009,7 +4009,7 @@ STR_5666 :Connexion sans mot de passe
STR_5701 :{WINDOW_COLOUR_2}Dernière action : {BLACK}{STRINGID}
STR_5702 :{SMALLFONT}{BLACK}Localise l'action la plus récente du joueur
STR_5703 :Imposible d'expulser l'hébergeur
STR_5704 :Dernière action :
STR_5704 :Dernière action
STR_5705 :Impossible d'attribuer à ce groupe
STR_5706 :Impossible de supprimer un groupe ayant des joueurs
STR_5707 :Ce groupe ne peut pas être modifié
@ -4036,10 +4036,10 @@ STR_5726 :{SMALLFONT}{BLACK}Définit la météo actuelle dans le parc
STR_5727 :Qual. de mise à l'échelle :
STR_5728 :Requiert l'option d'affichage matériel
STR_5729 :{SMALLFONT}{BLACK}Requiert l'option d'affichage matériel
STR_5730 :Au plus proche
STR_5730 :<removed string - do not use>
STR_5731 :Linéaire
STR_5732 :Anisotropique
STR_5733 :Utilise la mise à l'échelle NN aux échelles d'entiers
STR_5732 :<removed string - do not use>
STR_5733 :<removed string - do not use>
# tooltip for tab in options window
STR_5734 :{SMALLFONT}{BLACK}Rendu
STR_5735 :Etat du réseau
@ -4126,7 +4126,7 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
#tooltips
STR_5815 :{SMALLFONT}{BLACK}Affiche le nombre d'images par seconde durant le jeu
STR_5816 :{SMALLFONT}{BLACK}Définit le ratio de mise à l'échelle du jeu.{NEWLINE}Utile lors de l'utilisation de résolutions élevées
STR_5817 :{SMALLFONT}{BLACK}[Requiert l'affichage matériel]{NEWLINE}Définit le type de mise à l'échelle de l'interface graphique{NEWLINE}{NEWLINE}Voisinage proche est plus net mais peut causer des distorsions sur des mises à l'échelle non entières.{NEWLINE}Linéaire et Anisotrope sont lisses mais flous.{NEWLINE}Voisinage proche lisse est net même sur des mises à l'échelle non entières mais peut causer un dégradement des performances mineure.
STR_5817 :{SMALLFONT}{BLACK}[Requiert l'affichage matériel]{NEWLINE}Définit le type de mise à l'échelle de l'interface graphique{NEWLINE}{NEWLINE}La mise à l'échelle est linéaire est lisse mais le résultat est flou. La mise à l'échelle en mode voisinage proche est précise mais peut causer un dégradement des performances mineure.
STR_5818 :{SMALLFONT}{BLACK}[Requiert l'affichage matériel]{NEWLINE}Utilise l'échelle la plus proche quand le ratio de mise à l'échelle est un entier (1, 2, 3, etc.)
STR_5819 :{SMALLFONT}{BLACK}[Requiert l'affichage matériel]{NEWLINE}Met le jeu en pause quand l'overlay Steam est ouvert
STR_5820 :{SMALLFONT}{BLACK}Minimise le jeu si le focus est perdu en plein écran
@ -4315,7 +4315,7 @@ STR_6002 :{SMALLFONT}{BLACK}Les lampes et attractions seront éclairées dura
STR_6003 :Vue en coupe
STR_6004 :Vue en coupe
STR_6005 :Active la vue en coupe
STR_6006 :{SMALLFONT}{BLACK}La vue en coupe affiche les éléments de la carte qui sont à la hauteur de coupe et en dessous.
STR_6006 :{SMALLFONT}{BLACK}La vue en coupe affiche les éléments de la carte qui sont à la hauteur de coupe ou en dessous (coupe verticale) dans une zone sélectionnée (coupe horizontale).
STR_6007 :Hauteur de coupe
STR_6008 :{SMALLFONT}{BLACK}Cliquez pour permutter entre valeur explicite<->valeur mesurée
STR_6009 :{SMALLFONT}{BLACK}Sélectionnez hauteur de coupe
@ -4476,12 +4476,13 @@ STR_6160 :{WINDOW_COLOUR_2}Véhicules disponibles: {BLACK}{STRING}
STR_6161 :Basculer les lignes de quadrillage
STR_6162 :Souris folle tournante
STR_6163 :Les voitures en forme de souris se faufilent dans les virages serrés et petites chutes en tournant doucement pour désorienter les passagers
STR_6164 :{WHITE}{CROSS}
STR_6165 :Utiliser la synchronisation verticale
STR_6166 :{SMALLFONT}{BLACK}Synchronise chaque image affichée sur la fréquence de rafraîchissement du moniteur, ce qui empêche le déchirement de l'écran.
STR_6167 :{SMALLFONT}{BLACK}Paramètres avancés
STR_6168 :Séquence d'ouverture
STR_6169 :Sélection de scénario
STR_6170 :Ajustements
STR_6170 :Ajustements de l'interface
STR_6171 :Chercher
STR_6172 :{SMALLFONT}{BLACK}Chercher
STR_6173 :Veuillez indiquer le nom à rechercher:
@ -4513,16 +4514,63 @@ STR_6198 :{BLACK}Journée:
STR_6199 :Régler la date
STR_6200 :Réinitialiser la date
STR_6201 :{MONTH}
STR_6202 :Activer le plancher virtuel
STR_6202 :Style de plancher virtuel
STR_6203 :{SMALLFONT}{BLACK}Lorsque cette option est activée, un étage virtuel est rendu quand Ctrl ou Shift est tenu pour faciliter le placement vertical des éléments.
STR_6215 :Construction
STR_6204 :Brique
STR_6205 :Fer
STR_6206 :Stuc gris
STR_6207 :Stuc jaune
STR_6208 :Stuc rouge
STR_6209 :Stuc violet
STR_6210 :Stuc vert
STR_6211 :Pierre de sable marron
STR_6212 :Pierre de sable gris
STR_6213 :Gratte-ciel A
STR_6214 :Gratte-ciel B
STR_6216 :Opération
STR_6217 :Attraction / disponibilité du piste
STR_6218 :OpenRCT2 Officiel
STR_6219 :Mettre en évidence les problèmes du chemin
STR_6220 :Rendre utilisable
STR_6221 :{SMALLFONT}{BLACK}Ceci définira l'emplacement d'entrée ou de sortie connu de la course sur la tuile actuellement sélectionnée. Un seul emplacement d'entrée et de sortie peut être rendu utilisable par station.
STR_6222 :Impossible de placer le point d'entrée des visiteurs ici...
STR_6223 :Il doit être en dehors des limites du parc !
STR_6224 :{STRING} a placé un point d'entrée du parc
STR_6225 :N'est pas supporté avec le rendu OpenGL
STR_6226 :Activer la complétion prématurée d'un scénario
STR_6227 :{SMALLFONT}{BLACK}Enclenche la complétion d'un scénario quand tous les objectifs sont atteints avant la date limite.
STR_6228 :Options du scénario
STR_6229 :{WINDOW_COLOUR_2}{STRINGID} : {STRINGID}
STR_6230 :{STRINGID} :
STR_6231 :{WINDOW_COLOUR_2}{STRINGID} : {MOVE_X}{185}{STRINGID}
STR_6232 :Immobile
STR_6233 :Vue en coupe
STR_6234 :Mettre en évidence les problèmes du chemin
STR_6235 :Information du serveur
STR_6236 :Joueurs
STR_6237 :Groupes
STR_6238 :Options multijoueurs
STR_6239 :Coupe verticale
STR_6240 :Coupe horizontale
STR_6241 :Sélectionner zone
STR_6242 :Effacer sélection
STR_6243 :{SMALLFONT}{BLACK}Renouvelle l'attraction,{NEWLINE}comme si elle venait d'être construite
STR_6244 :Impossible de renouveller l'attraction...
STR_6245 :{SMALLFONT}{BLACK}Cette attraction n'a pas besoin d'un renouvellement
STR_6246 :Renouveller
STR_6247 :Renouvelle l'attraction
STR_6248 :{WINDOW_COLOUR_1}Voulez-vous renouveller {STRINGID} pour {CURRENCY} ?
STR_6249 :{WINDOW_COLOUR_1}Voulez-vous renouveller {STRINGID} ?
STR_6250 :{WINDOW_COLOUR_1}Etes-vous sûr(e) de vouloir détruire complétement {STRINGID} et gagner {CURRENCY} ?
STR_6251 :L'attraction n'est pas encore vide
STR_6252 :Adresse vers l'intégration API Twitch
STR_6253 :{SMALLFONT}{BLACK}Fournit l'adresse vers l'intégration API de Twitch. Requis pour activer les interactions Twitch.
STR_6254 :Adresse URL de l'intégration API Twitch :
STR_6255 :L'adresse est invalide
STR_6256 :Effets de rendu
STR_6257 :Verre (transparent)
STR_6258 :Net (transparent)
STR_6259 :Désactivé
#############
@ -4966,13 +5014,3 @@ STR_DTLS :
STR_SCNR :Fort Anachronisme
STR_PARK :Fort Anachronisme
STR_DTLS :
#####################
# Rides/attractions #
#####################
#WW
[CONDORRD]
STR_NAME :Le condor
STR_DESC :Les passagers sont couchés à plat ventre dans une voiture en forme de condor se déplaçant sur un monorail et se balançant d'un côté à l'autre dans les virages
STR_CPTY :4 passagers par voiture

View File

@ -1057,8 +1057,8 @@ STR_1214 :{SMALLFONT}{BLACK}Scegli il tempo di attesa massimo prima di partir
STR_1215 :{WINDOW_COLOUR_2}Sincron. con le stazioni adiacenti
STR_1216 :{SMALLFONT}{BLACK}Scegli se sincronizzare la partenza con le stazioni adiacenti (per le 'corse')
STR_1217 :{COMMA16} secondi
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Solo uscita
STR_1221 :Nessuna entrata
STR_1222 :Nessuna uscita
@ -1614,8 +1614,8 @@ STR_1771 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COM
STR_1772 :{COMMA16}
STR_1773 :Può esserci soltanto una sezione di foto-in-corsa per attrazione
STR_1774 :Può esserci soltanto una salita per il traino con cavo per attrazione
STR_1775 :Off
STR_1776 :On
STR_1775 :<removed string - do not use>
STR_1776 :<removed string - do not use>
STR_1777 :{WINDOW_COLOUR_2}Musica
STR_1778 :{STRINGID} - -
STR_1779 :{INLINE_SPRITE}{254}{19}{00}{00} Costume da panda
@ -3354,8 +3354,8 @@ STR_5232 :{SMALLFONT}{BLACK}Editor
STR_5233 :{SMALLFONT}{BLACK}Altro
STR_5234 :{SMALLFONT}{BLACK}Conferme
STR_5235 :{SMALLFONT}{BLACK}Impostazioni
STR_5236 :Finestra:
STR_5237 :Tavolozza:
STR_5236 :Finestra
STR_5237 :Tavolozza
STR_5238 :Tema attuale:
STR_5239 :Duplica
STR_5240 :Inserire un nome per il tema
@ -3614,8 +3614,8 @@ STR_5491 :Lista Invenzioni
STR_5492 :Opzioni Scenario
STR_5493 :Mostra Messaggio
STR_5495 :Lista Giocatore
STR_5496 :Giocatore:
STR_5497 :Ping:
STR_5496 :Giocatore
STR_5497 :Ping
STR_5498 :Lista Server
STR_5499 :Nome Giocatore:
STR_5500 :Aggiungi Server
@ -3759,7 +3759,7 @@ STR_5638 :Permesso negato
STR_5639 :{SMALLFONT}{BLACK}Mostra lista dei giocatori
STR_5640 :{SMALLFONT}{BLACK}Gestisci gruppo
STR_5641 :Gruppo predefinito:
STR_5642 :Gruppo:
STR_5642 :Gruppo
STR_5643 :Aggiungi gruppo
STR_5644 :Rimuovi gruppo
STR_5645 :Chat
@ -3787,7 +3787,7 @@ STR_5666 :Accesso senza password
STR_5701 :{WINDOW_COLOUR_2}Ultima azione: {BLACK}{STRINGID}
STR_5702 :{SMALLFONT}{BLACK}Localizza l'ultima azione del giocatore
STR_5703 :Non è possibile rimuovere l'host
STR_5704 :Ultima azione:
STR_5704 :Ultima azione
STR_5705 :Non è possibile impostarlo a questo gruppo
STR_5706 :Non è possibile rimuovere un gruppo che contiene giocatori
STR_5707 :Questo gruppo non può essere modificato
@ -4083,10 +4083,10 @@ STR_5999 :Imposta denaro
STR_6000 :Inserire il nuovo valore
STR_6001 :Attiva effetti luce (sperimentale)
STR_6002 :{SMALLFONT}{BLACK}Le attrazioni e i lampioni saranno illuminati di notte. Richiede il motore di rendering hardware.
STR_6003 :Vista sezionata
STR_6004 :Vista sezionata
STR_6005 :Attiva la vista sezionata
STR_6006 :{SMALLFONT}{BLACK}La vista sezionata mostra solo elementi della mappa pari o inferiori all'altezza specificata
STR_6003 :Visualizzazione ritagliata
STR_6004 :Visualizzazione ritagliata
STR_6005 :Attiva la visualizzazione ritagliata
STR_6006 :{SMALLFONT}{BLACK}La visualizzazione ritagliata mostra solo gli elementi della mappa che si trovano pari o sotto all'altezza specificata (ritaglio verticale) e nell'area selezionata (ritaglio orizzontale).
STR_6007 :Altezza sezionamento
STR_6008 :{SMALLFONT}{BLACK}Cliccare per cambiare tra valore grezzo e unità di misura
STR_6009 :{SMALLFONT}{BLACK}Selezionare altezza sezionamento
@ -4250,7 +4250,7 @@ STR_6166 :{SMALLFONT}{BLACK}Sincronizza i frame alla frequenza di aggiornamen
STR_6167 :{SMALLFONT}{BLACK}Avanzate
STR_6168 :Sequenza del titolo
STR_6169 :Selezione scenario
STR_6170 :Modifiche
STR_6170 :Personalizzazione interfaccia
STR_6171 :Cerca
STR_6172 :{SMALLFONT}{BLACK}Cerca
STR_6173 :Digitare il nome da cercare:
@ -4306,6 +4306,23 @@ STR_6222 :Impossibile piazzare qui il punto di apparizione dei visitatori...
STR_6223 :Deve trovarsi all'esterno del confine del parco!
STR_6224 :{STRING} ha piazzato un punto di apparizione dei visitatori.
STR_6225 :Non supportato con il rendering OpenGL
STR_6226 :Attiva completamento anticipato dello scenario
STR_6227 :{SMALLFONT}{BLACK}Completa lo scenario non appena tutti gli obiettivi sono raggiunti, prima della data di scadenza.
STR_6228 :Opzioni scenario
STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID}
STR_6230 :{STRINGID}:
STR_6231 :{WINDOW_COLOUR_2}{STRINGID}: {MOVE_X}{185}{STRINGID}
STR_6232 :Immobile
STR_6233 :Visualizzazione spaccato
STR_6234 :Evidenzia problemi nei sentieri
STR_6235 :Informazioni server
STR_6236 :Giocatori
STR_6237 :Gruppi
STR_6238 :Opzioni multigiocatore
STR_6239 :Ritaglio verticale
STR_6240 :Ritaglio orizzontale
STR_6241 :Seleziona area
STR_6242 :Annulla selezione
#############
# Scenarios #
@ -4748,13 +4765,3 @@ STR_DTLS :
STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#####################
# Rides/attractions #
#####################
#WW
[CONDORRD]
STR_NAME :Condor Ride
STR_DESC :Guidando in speciali carrelli sotto la pista, i piloti sperimentano la sensazione di volo mentre prendono aria nei treni Condor
STR_CPTY :4 passeggeri per carrozza

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}Velg største tid å vente før avgang
STR_1215 :{WINDOW_COLOUR_2}Synkroniser med stasjonen ved siden av
STR_1216 :{SMALLFONT}{BLACK}Velg om avgang skal synkroniseres for alle tilliggende stasjoner (for 'løp')
STR_1217 :{COMMA16} sekunder
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Kun utgang
STR_1221 :Ingen inngang
STR_1222 :Ingen utgang
@ -2873,7 +2873,7 @@ STR_2862 :Music acknowledgements...
STR_2863 :Music acknowledgements
STR_2864 :{WINDOW_COLOUR_2}March - Children of the Regiment: (Fucik) non copyright
STR_2865 :{WINDOW_COLOUR_2}Heyken's Serenade: (J.Heyken) British Standard Music Coy; GEMA, BRITICO
STR_2866 :{WINDOW_COLOUR_2}In Continental Mood: (Composer unknown) Copyright Control
STR_2866 :{WINDOW_COLOUR_2}La Belle Espagnole: (Robert Vollstedt) ingen opphavsrett
STR_2867 :{WINDOW_COLOUR_2}Wedding Journey: (Traditional)
STR_2868 :{WINDOW_COLOUR_2}Tales from the Vienna Woods: (Johann Strauss) non copyright
STR_2869 :{WINDOW_COLOUR_2}Slavonic Dance: (Traditional)
@ -3968,7 +3968,7 @@ STR_5626 :Other Parks
STR_5627 :Group scenario list by:
STR_5628 :Source game
STR_5629 :Difficulty level
STR_5630 :Enable unlocking of scenarios
STR_5630 :Skru på progressiv opplåsing
STR_5631 :Original DLC Parks
STR_5632 :Build your own...
STR_5633 :CMD +
@ -4032,13 +4032,13 @@ STR_5723 :Heavy Rain
STR_5724 :Thunderstorm
STR_5725 :{BLACK}Force weather:
STR_5726 :{SMALLFONT}{BLACK}Sets the current weather in park
STR_5727 :Scaling quality
STR_5727 :Skaleringskvalitet:
STR_5728 :Requires hardware display option
STR_5729 :{SMALLFONT}{BLACK}Requires hardware display option
STR_5730 :Nearest neighbour
STR_5730 :<removed string - do not use>
STR_5731 :Linear
STR_5732 :Anisotropic
STR_5733 :Use NN scaling at integer scales
STR_5732 :<removed string - do not use>
STR_5733 :<removed string - do not use>
# tooltip for tab in options window
STR_5734 :{SMALLFONT}{BLACK}Rendering
STR_5735 :Network Status
@ -4125,8 +4125,8 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
#tooltips
STR_5815 :{SMALLFONT}{BLACK}Display FPS counter in-game
STR_5816 :{SMALLFONT}{BLACK}Sets ratio to scale the game by.{NEWLINE}Most useful when playing in{NEWLINE}high resolutions
STR_5817 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Sets UI scaling type
STR_5818 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Use nearest neighbour scaling{NEWLINE}when window scaling factor set{NEWLINE}to integer values (1, 2, 3, etc)
STR_5817 :{SMALLFONT}{BLACK}Setter skaleringsmetode for brukergrensesnitt. Krever hardware rendering.{NEWLINE}Lineær skalering er jevn, men utydelig. 'Jevn nærmeste-nabo'-skalering er skarp, men er mer krevende.
STR_5818 :<removed string - do not use>
STR_5819 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Pause the game if Steam{NEWLINE}in-game overlay is opened
STR_5820 :{SMALLFONT}{BLACK}Minimise the game if focus is{NEWLINE}lost while in fullscreen mode
STR_5821 :<removed string - do not use>
@ -4151,7 +4151,7 @@ STR_5839 :{SMALLFONT}{BLACK}Show a separate button for the research and devel
STR_5840 :{SMALLFONT}{BLACK}Show a separate button for the cheats window in the toolbar
STR_5841 :{SMALLFONT}{BLACK}Show a separate button for the recent news window in the toolbar
STR_5842 :{SMALLFONT}{BLACK}Sort scenarios into tabs by their difficulty (RCT2 behaviour) or their source game (RCT1 behaviour)
STR_5843 :{SMALLFONT}{BLACK}Enable scenario unlocking (RCT1 behaviour)
STR_5843 :{SMALLFONT}{BLACK}Scenarier blir låst opp etterhvert som du fullfører dem (som i RCT1)
STR_5844 :{SMALLFONT}{BLACK}Stay connected to a multiplayer server{NEWLINE}even if a desync or error occurs
STR_5845 :{SMALLFONT}{BLACK}Adds a button for{NEWLINE}debugging tools to the toolbar.{NEWLINE}Enables keyboard shortcut for developer console
STR_5846 :{SMALLFONT}{BLACK}Set often OpenRCT2 automatically saves
@ -4468,6 +4468,30 @@ STR_6154 :Det er ikke anbefalt å kjøre OpenRCT2 med opphøyde brukerrettigh
STR_6155 :Hverken KDialog eller Zenity er installert. Installer en av dem, eller konfigurer fra kommandolinjen.
STR_6156 :Reservert navn
STR_6157 :Kommandolinje
STR_6158 :Kunne ikke laste inn fil...{NEWLINE}RCTC-versjon {COMMA16} er ikke kompatibel.
STR_6159 :Jevn nærmeste-nabo
STR_6160 :{WINDOW_COLOUR_2}Tilgjengelige kjøretøy: {BLACK}{STRING}
STR_6161 :Vis/skjul rutemønster i landskap
STR_6162 :Spinnende ville mus
STR_6163 :Museformede vogner suser gjennom skarpe svinger og små fall mens de sakte spinner for å desorientere passasjerene
STR_6164 :{WHITE}{CROSS}
STR_6165 :Bruk Vertical Sync
STR_6166 :{SMALLFONT}{BLACK}Synkroniserer visning av bilder med skjermens oppdateringsfrekvens; forhindrer "screen tearing".
STR_6167 :{SMALLFONT}{BLACK}Avansert
STR_6168 :Tittelsekvens
STR_6169 :Scenariovalg
STR_6170 :Tilpass brukergrensesnitt
STR_6171 :Søk
STR_6172 :{SMALLFONT}{BLACK}Søk
STR_6173 :Skriv inn navnet du ønsker å søke etter:
STR_6174 :Last inn lagret spill
STR_6175 :Last inn scenario
STR_6176 :Scenario å laste:
STR_6177 :Load{MOVE_X}{87}Ingen scenario valgt
STR_6178 :Load{MOVE_X}{87}{RED}Mangler scenario
STR_6179 :Velg
STR_6180 :Ingen scenario valgt
STR_6181 :{RED}Mangler scenario
#############
# Scenarios #
@ -4911,12 +4935,3 @@ STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#####################
# Rides/attractions #
#####################
#WW
[CONDORRD]
STR_NAME :Condor Ride
STR_DESC :Riding in special harnesses below the track, riders experience the feeling of flight as they swoop through the air in Condor-shaped trains
STR_CPTY :4 passengers per car

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}Selecione o tempo máximo de espera antes de sair
STR_1215 :{WINDOW_COLOUR_2}Sincronizar com estações adjacentes
STR_1216 :{SMALLFONT}{BLACK}Selecione para sincronizar saída com todas estações adjacentes (para corrida)
STR_1217 :{COMMA16} segundos
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Somente Saída
STR_1221 :Sem entrada
STR_1222 :Sem saída
@ -2907,7 +2907,7 @@ STR_2896 :{WINDOW_COLOUR_2}Hypothermia: (Allister Brimble) direitos autorai
STR_2897 :{WINDOW_COLOUR_2}Last Sleigh Ride: (Allister Brimble) direitos autorais {COPYRIGHT} Chris Sawyer
STR_2898 :{WINDOW_COLOUR_2}Pipes of Glencairn: (Allister Brimble) direitos autorais {COPYRIGHT} Chris Sawyer
STR_2899 :{WINDOW_COLOUR_2}Traffic Jam: (Allister Brimble) direitos autorais {COPYRIGHT} Chris Sawyer
STR_2900 :{WINDOW_COLOUR_2}
STR_2900 :<removed string - do not use>
STR_2901 :{WINDOW_COLOUR_2}(Amostras Grátis de Spectrasonics {ENDQUOTES}Liquid Grooves{ENDQUOTES})
STR_2902 :{WINDOW_COLOUR_2}Toccata: (C.M.Widor, played by Peter James Adcock) recording {COPYRIGHT} Chris Sawyer
STR_2903 :{WINDOW_COLOUR_2}Space Rock: (Allister Brimble) direitos autorais {COPYRIGHT} Chris Sawyer
@ -3572,8 +3572,8 @@ STR_5232 :{SMALLFONT}{BLACK}Editores
STR_5233 :{SMALLFONT}{BLACK}Variados
STR_5234 :{SMALLFONT}{BLACK}Pop-ups
STR_5235 :{SMALLFONT}{BLACK}Configurações
STR_5236 :Janela:
STR_5237 :Paleta:
STR_5236 :Janela
STR_5237 :Paleta
STR_5238 :Tema Atual:
STR_5239 :Duplicar
STR_5240 :Insira um nome para o tema
@ -3832,8 +3832,8 @@ STR_5492 :Opções de cenário
STR_5493 :Enviar Mensagem
STR_5494 :<removed string - do not use>
STR_5495 :Lista de Jogadores
STR_5496 :Jogador:
STR_5497 :Ping:
STR_5496 :Jogador
STR_5497 :Ping
STR_5498 :Lista de Servidores
STR_5499 :Nome do Jogador:
STR_5500 :Adicionar Servidor
@ -3978,7 +3978,7 @@ STR_5638 :Permissão negada
STR_5639 :{SMALLFONT}{BLACK}Mostrar lista de jogadores
STR_5640 :{SMALLFONT}{BLACK}Gerenciar grupos
STR_5641 :Grupo Padrão:
STR_5642 :Grupo:
STR_5642 :Grupo
STR_5643 :Adicionar Grupo
STR_5644 :Remover Grupo
STR_5645 :Bate-Papo
@ -4006,7 +4006,7 @@ STR_5666 :Login sem senha
STR_5701 :{WINDOW_COLOUR_2}Última ação: {BLACK}{STRINGID}
STR_5702 :{SMALLFONT}{BLACK}Localizar ação mais recente do jogador
STR_5703 :Não é possível expulsar o anfitrião
STR_5704 :Última Ação:
STR_5704 :Última Ação
STR_5705 :Impossível definir para este grupo
STR_5706 :Impossível remover grupo que os jogadores pertencem
STR_5707 :Este grupo não pode ser modificado
@ -4460,7 +4460,7 @@ STR_6150 :Resposta inválida do servidor principal (sem número JSON)
STR_6151 :Servidor principal falhou ao retornar servidores
STR_6152 :Resposta inválida do servidor principal (sem matriz JSON)
STR_6153 :Entrada paga / Brinquedos pagos
STR_6154 :Não é recomendado rodar o OpenRCT2 com permissões elevadas.
STR_6154 :Por motivos de segurança, não é recomendado rodar o OpenRCT2 com permissões elevadas.
STR_6155 :Nem KDialog ou Zenity estão instalados. Por favor instale um, ou configure pela linha de comando.
STR_6156 :Nome está reservado
STR_6157 :Console
@ -4476,7 +4476,7 @@ STR_6166 :{SMALLFONT}{BLACK}Sincroniza cada quadro mostrado com a taxa de atu
STR_6167 :{SMALLFONT}{BLACK}Avançado
STR_6168 :Sequência de Título
STR_6169 :Seleção de Cenários
STR_6170 :Melhoras
STR_6170 :Melhoras de Interface
STR_6171 :Procurar
STR_6172 :{SMALLFONT}{BLACK}Procura
STR_6173 :Por favor forneça um nome para pesquisar:
@ -4531,6 +4531,20 @@ STR_6221 :{SMALLFONT}{BLACK}Isto irá definir a localização da entrada ou s
STR_6222 :Impossível colocar gerador de visitantes aqui...
STR_6223 :Deve ficar fora das barreiras do parque!
STR_6224 :{STRING} colocou um gerador de visitantes.
STR_6225 :Não suportado com renderizador OpenGL
STR_6226 :Habilitar conclusão antecipada de cenário
STR_6227 :{SMALLFONT}{BLACK}Ativa a conclusão do cenário quando todos os objetivos são alcançados antes da data prevista.
STR_6228 :Opções de Cenário
STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID}
STR_6230 :{STRINGID}:
STR_6231 :{WINDOW_COLOUR_2}{STRINGID}: {MOVE_X}{185}{STRINGID}
STR_6232 :Congelado
STR_6233 :Vista em corte
STR_6234 :Destacar problemas nos caminhos
STR_6235 :Informação do Servidor
STR_6236 :Jogadores
STR_6237 :Grupos
STR_6238 :Opções de Multiplayer
#############
# Scenarios #
@ -4974,403 +4988,6 @@ STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#####################
# Rides/attractions #
#####################
#RCT2
[TOPSP1]
STR_NAME :Top Spin
STR_DESC :Passageiros brincam numa gôndola suspensa por grandes braços rotatórios, rodando de pernas para o ar para frente e para trás
STR_CPTY :8 passageiros
[BMSD]
STR_NAME :Trens Tornado
STR_DESC :Um trem espaçoso com travas de ombro
[BMSU]
STR_NAME :Trens Tornado em Pé
STR_DESC :Um trem com travas de ombro, onde passageiros passeiam em pé
[BMFL]
STR_NAME :Trens Tornado sem chão
STR_DESC :Um trem espaçoso com travas de ombro e sem chão, deixando o passeio mais emocionante
[WMMINE]
STR_NAME :Carros de Mina
STR_DESC :Carros moldados como um carro antigo de mina
[WMOUSE]
STR_NAME :Carros de Rato
STR_DESC :Carros individuais moldados como um rato
[STEEP1]
STR_NAME :Cavalos
STR_DESC :Carros únicos moldados como um cavalo
[STEEP2]
STR_NAME :Motos
STR_DESC :Carros únicos moldados como motos
[SBOX]
STR_NAME :Caixas de Sabão
STR_DESC :Carros únicos moldados como caixas de sabão
[BOB1]
STR_NAME :Trens Bobsleigh
STR_DESC :Um trem com carros de 2 assentos onde os passageiros sentam um atrás do outro
[INTBOB]
STR_NAME :Trens Bobsleigh (6 assentos)
STR_DESC :Bobsleighs com assentos de 3 fileiras, com espaço para duas pessoas em cada
[LIFT1]
STR_NAME :Cabine do Elevador
STR_DESC :Cabine de aço do elevador
[ARRT1]
STR_NAME :Trens Montanha-Russa Saca Rolhas
STR_DESC :Trens de montanha-russa com travas de ombro
[ARRT2]
STR_NAME :Trens Hiper-montanha
STR_DESC :Trens confortáveis apenas com travas de colo
[MONBK]
STR_NAME :Bicicletas
[OBS1]
STR_NAME :Cabine Plataforma única
[OBS2]
STR_NAME :Cabine Plataforma dupla
[GTC]
STR_NAME :Carros Trem Fantasma
[HMCAR]
STR_NAME :Carros Mansão Assombrada
[VREEL]
STR_NAME :Toneis Virginia Reel
[WMSPIN]
STR_NAME :Carros Rato Giratório
[AMT1]
STR_NAME :Trens de Mina
[SLCT]
STR_NAME :Trens Montanha Invertida Compacta
[SLCFO]
STR_NAME :Carros Face-off
[VEKDV]
STR_NAME :Carros Vai-e-vem Vertical
[THCAR]
STR_NAME :Trens Montanha Vertical de Propulsão Hidráulica
[SSC1]
STR_NAME :Carro Queda Livre Lançada
[DING1]
STR_NAME :Dinghies
[LFB1]
STR_NAME :Troncos
[RFTBOAT]
STR_NAME :Jangadas
[IVMC1]
STR_NAME :Carros com 4 assentos
[SPDRCR]
STR_NAME :Trens Montanha-Russa Espiral
[TOGST]
STR_NAME :Trens Montanha-Russa em Pé
[PREMT1]
STR_NAME :Trens Montanh-Russa de Indução Linear
[PMT1]
STR_NAME :Trens de Mina Motorizados
[BMAIR]
STR_NAME :Trens Montanha-Russa Voadora
[INTINV]
STR_NAME :Trens Impulso
[INTST]
STR_NAME :Trens Giga-Montanha
[NEMT]
STR_NAME :Trens Montanha-Russa Invertida (4 assentos)
[VEKST]
STR_NAME :Trens Montanha-Russa Deitada
[REVCAR]
STR_NAME :Carros Reversos
STR_DESC :Carros Truque capaz de virar em torno de si em seções de reversão especiais
[SKYTR]
STR_NAME :Carros Deitados
[BMVD]
STR_NAME :Trens Tornado (6 assentos)
[SUBMAR]
STR_NAME :Submarinos
#WW
[CONDORRD]
STR_NAME :Condor
STR_DESC :Montando em travas especiais sob a pista, os passageiros experimentarão a sensação de voar pelo ar em uma estrutura na forma de Condor
STR_CPTY :4 passageiros por carro
#WW
[CONGAEEL]
STR_NAME :Montanha-Russa Enguia Conger
STR_DESC :Uma montanha russa de aço compacta onde trens com formato de enguia viajam por parafusos e loops
STR_CPTY :4 passageiros por carro
#WW
[MINELIFT]
STR_NAME :Cabine de Elevador de Mina
STR_DESC :Uma cabine de aço de elevator comumente usado em minas
#WW
[ANACONDA]
STR_NAME :Trens Anaconda
#WW
[CROCFLUM]
STR_NAME :Barcos Crocodilo
#WW
[WHICGRUB]
STR_NAME :Trens Larvas Comestíveis
#WW
[GRATWHTE]
STR_NAME :Trens Grande Tubarão Branco
STR_DESC :Trens com travas de ombro, moldados como um Grande Tubarão Branco
#WW
[BOMERANG]
STR_NAME :Trens Bumerangue
#WW
[KOLARIDE]
STR_NAME :Carro Coala
#WW
[MANTARAY]
STR_NAME :Barcos Arraia Manta
STR_DESC :Barcos de montanha-russa em formato de uma Arraia Manta
#WW
[TUTLBOAT]
STR_NAME :Barcos Tartaruga
#WW, for the Wooden RC
[MINECART]
STR_NAME :Trens Carro de Mina
#WW
[LIONRIDE]
STR_NAME :Carros Leão
#WW
[RHINORID]
STR_NAME :Trens Rinocerontes
#WW
[OSTRICH]
STR_NAME :Trens Avestruz
#WW
[GORILLA]
STR_NAME :Trens Gorila
#WW
[FOOTBALL]
STR_NAME :Trens Bola de Futebol
#WW
[TIGRTWST]
STR_NAME :Carros Tigre-de-Bengala
#WW
[TAXICSTR]
STR_NAME :Trens Taxi Amarelo
#WW
[OUTRIGGR]
STR_NAME :Canoas Polinésia
#WW
[SANFTRAM]
STR_NAME :Bonde São Francisco
#WW
[PENGUINB]
STR_NAME :Trens Penguim
#WW
[POLARBER]
STR_NAME :Trens Urso Polar
#WW
[LONDONBS]
STR_NAME :Ônibus Routemaster
STR_DESC :Replicas do famoso ônibus Routemaster de Londres
#WW
[BLACKCAB]
STR_NAME :Taxis Pretos
#WW
[TGVTRAIN]
STR_NAME :Trens TGV
#WW
[ROCKET]
STR_NAME :Foguetes de 1950
#WW
[SPUTNIKR]
STR_NAME :Carros Sputnik
#WW
[DHOWWATR]
STR_NAME :Barcos Veleiros
#WW
[SURFBRDC]
STR_NAME :Trens Surfing
#WW
[KILLWHAL]
STR_NAME :Submarinos Baleia Assassina
#WW
[HIPPORID]
STR_NAME :Submarinos Hipopótamo
#WW
[DOLPHINR]
STR_NAME :Barcos Golfinho
#WW
[MANDARIN]
STR_NAME :Barcos Pato-mandarim
STR_DESC :Barco no formato de pato, movidos pelo pedalar dos passageiros da frente
#TT
[BATTRRAM]
STR_NAME :Trens Aríete
#TT
[BLCKDETH]
STR_NAME :Trens Peste Negra
#TT
[JOUSTING]
STR_NAME :Cavaleiros de Competição
#TT
[OAKBAREL]
STR_NAME :Barris de Carvalho
#TT
[STAMPHRD]
STR_NAME :Trens Rebanho de Estamparia
#TT
[DRAGNFLY]
STR_NAME :Carros Libélula
#TT
[PTERODAC]
STR_NAME :Trens Pterodáctilo
#TT
[PEGASUSX]
STR_NAME :Carros Pegasus
#TT
[CERBERUS]
STR_NAME :Trens Cérbero
#TT
[HARPIESX]
STR_NAME :Trens Harpias
#TT
[VALKYRIE]
STR_NAME :Trens Valquírias
#TT
[RIVRSTYX]
STR_NAME :Barcos Rio Styx
#TT
[TELEPTER]
STR_NAME :Cabine Teletransportadora
#TT
[HOVERCAR]
STR_NAME :Carros Flutuantes
#TT
[HOVRBORD]
STR_NAME :Hoverboards
#TT
[HOVERBKE]
STR_NAME :Motos Flutuantes
#TT, Reverser RC
[POLICECR]
STR_NAME :Carros de Polícia
#TT, Looping RC
[POLCHASE]
STR_NAME :Trens Carro de Polícia
#TT
[GANSTRCR]
STR_NAME :Carros Gangster
#TT
[SEAPLANE]
STR_NAME :Carros Hidroavião Suspensos
#TT
[BARNSTRM]
STR_NAME :Carros Avião BarnStorming
#TT
[FLYGBOAT]
STR_NAME :Barcos voadores
#TT
[BMVOCTPS]
STR_NAME :Bolha do Espaço Sideral
#TT
[JETPLANE]
STR_NAME :Carros Avião a Jato
#TT
[HOTRODXX]
STR_NAME :Carros Hot Rod
###########
# Scenery #
###########

File diff suppressed because it is too large Load Diff

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}Välj högsta väntetid innan avgång
STR_1215 :{WINDOW_COLOUR_2}Synkronisera med närliggande stationer
STR_1216 :{SMALLFONT}{BLACK}Välj om avgången ska synkroniseras med alla närliggande stationer (för 'rally')
STR_1217 :{COMMA16} sekunder
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Endast utgång
STR_1221 :Ingen ingång
STR_1222 :Ingen utgång
@ -1779,8 +1779,8 @@ STR_1773 :Bara en fotosektion tillåten per åktur
STR_1774 :Bara en uppskjutskulle tillåten per åktur
STR_1775 :Av
STR_1776 :På
STR_1777 :{WINDOW_COLOUR_2}Åkturs-musik
STR_1778 :{STRINGID} - -
STR_1777 :<removed string - do not use>
STR_1778 :<removed string - do not use>
STR_1779 :{INLINE_SPRITE}{254}{19}{00}{00} Pandadräkt
STR_1780 :{INLINE_SPRITE}{255}{19}{00}{00} Tigerdräkt
STR_1781 :{INLINE_SPRITE}{00}{20}{00}{00} Elefantdräkt
@ -4510,13 +4510,19 @@ STR_6201 :{MONTH}
STR_6202 :Aktivera virtuella golv
STR_6203 :{SMALLFONT}{BLACK}När aktiverad, kommer ett rutnät att ritas i samma höjd som elementen är på när du håller in Ctrl eller Shift vilket förenklar vertikala placeringar.
STR_6215 :Konstruktion
STR_6216 :Manövrering
STR_6217 :Åktur-/spårtillgänglighet
STR_6218 :Officiella OpenRCT2
STR_6219 :Visa problem på gångvägar
STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID}
STR_6230 :{STRINGID}:
STR_6231 :{WINDOW_COLOUR_2}{STRINGID}: {MOVE_X}{185}{STRINGID}
#############
# Scenarion #
################
@ -4959,25 +4965,5 @@ STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#####################
# Rides/attractions #
#####################
#WW
[CONDORRD]
STR_NAME :Kondorhjulet
STR_DESC :Åkandes i speciella byglar under spåret känner passagerarna känslan av flygning när de sveper genom luften i kondorformade vagnar
STR_CPTY :4 passagerare per vagn
##############
# RCT Object #
##############
[SCGWWEST]
STR_NAME :Vilda västern-tema
[SCGGIANT]
STR_NAME :Jätte trädgårds-tema
#Maintainer: Nubbie
#Everyone is allowed to edit this document

View File

@ -889,9 +889,9 @@ STR_0878 :太高!
STR_0879 :不能在这里降低土地...
STR_0880 :不能在这里抬升土地...
STR_0881 :有物体挡住去路
STR_0882 :载游戏
STR_0882 :载游戏
STR_0883 :保存游戏
STR_0884 :载地形
STR_0884 :载地形
STR_0885 :保存地形
STR_0886 :退出游戏
STR_0887 :退出场景编辑器
@ -954,13 +954,13 @@ STR_0943 :半透明景观
STR_0944 :保存
STR_0945 :不保存
STR_0946 :取消
STR_0947 :是否在载其他存档之前保存游戏 ?
STR_0947 :是否在载其他存档之前保存游戏 ?
STR_0948 :是否在退出之前保存游戏 ?
STR_0949 :是否在退出之前保存游戏 ?
STR_0950 :加载游戏
STR_0951 :退出游戏
STR_0952 :退出游戏
STR_0953 :载地形
STR_0953 :载地形
STR_0954 :
STR_0955 :{SMALLFONT}{BLACK}选择此轨道的座位旋转角度
STR_0956 :-180{DEGREE}
@ -1043,8 +1043,8 @@ STR_1032 :Can only build this on water!
STR_1033 :Can only build this above ground!
STR_1034 :Can only build this on land!
STR_1035 :Local authority won't allow construction above tree-height!
STR_1036 :载游戏
STR_1037 :载入存档
STR_1036 :载游戏
STR_1037 :加载地形
STR_1038 :将存档转换为关卡
STR_1039 :添加新的轨道设计
STR_1040 :保存游戏
@ -1057,7 +1057,7 @@ STR_1046 :OpenRCT2 轨道设计文件
STR_1047 :存储游戏失败!
STR_1048 :存储关卡失败!
STR_1049 :存储地形失败!
STR_1050 :载失败...{NEWLINE}文件中含有不可读取的数据!
STR_1050 :载失败...{NEWLINE}文件中含有不可读取的数据!
STR_1051 :隐藏支撑物
STR_1052 :隐藏游客
STR_1053 :{SMALLFONT}{BLACK}游乐园内的游乐设施
@ -1225,8 +1225,8 @@ STR_1214 :{SMALLFONT}{BLACK}Select maximum length of time to wait before depa
STR_1215 :{WINDOW_COLOUR_2}Synchronise with adjacent stations
STR_1216 :{SMALLFONT}{BLACK}Select whether to synchronise departure with all adjacent stations (for 'racing')
STR_1217 :{COMMA16} seconds
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :Exit only
STR_1221 :No entrance
STR_1222 :No exit
@ -2879,7 +2879,7 @@ STR_2862 :音乐鸣谢列表...
STR_2863 :音乐鸣谢列表
STR_2864 :{WINDOW_COLOUR_2}March - Children of the Regiment: (Fucik) non copyright
STR_2865 :{WINDOW_COLOUR_2}Heyken's Serenade: (J.Heyken) British Standard Music Coy; GEMA, BRITICO
STR_2866 :{WINDOW_COLOUR_2}In Continental Mood: (Composer unknown) Copyright Control
STR_2866 :{WINDOW_COLOUR_2}La Belle Espagnole: (Robert Vollstedt) Copyright Control
STR_2867 :{WINDOW_COLOUR_2}Wedding Journey: (Traditional)
STR_2868 :{WINDOW_COLOUR_2}Tales from the Vienna Woods: (Johann Strauss) non copyright
STR_2869 :{WINDOW_COLOUR_2}Slavonic Dance: (Traditional)
@ -2913,7 +2913,7 @@ STR_2896 :{WINDOW_COLOUR_2}Hypothermia: (Allister Brimble) copyright {COPYR
STR_2897 :{WINDOW_COLOUR_2}Last Sleigh Ride: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2898 :{WINDOW_COLOUR_2}Pipes of Glencairn: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2899 :{WINDOW_COLOUR_2}Traffic Jam: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2900 :{WINDOW_COLOUR_2}
STR_2900 :<removed string - do not use>
STR_2901 :{WINDOW_COLOUR_2}(Samples courtesy of Spectrasonics {ENDQUOTES}Liquid Grooves{ENDQUOTES})
STR_2902 :{WINDOW_COLOUR_2}Toccata: (C.M.Widor, played by Peter James Adcock) recording {COPYRIGHT} Chris Sawyer
STR_2903 :{WINDOW_COLOUR_2}Space Rock: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
@ -3580,8 +3580,8 @@ STR_5232 :{SMALLFONT}{BLACK}编辑器
STR_5233 :{SMALLFONT}{BLACK}杂项
STR_5234 :{SMALLFONT}{BLACK}Prompts
STR_5235 :{SMALLFONT}{BLACK}设置
STR_5236 :Window:
STR_5237 :调色板:
STR_5236 :Window
STR_5237 :调色板
STR_5238 :当前主题:
STR_5239 :Duplicate
STR_5240 :Enter a name for the theme
@ -3840,8 +3840,8 @@ STR_5492 :剧情选项
STR_5493 :发送信息
STR_5494 :<removed string - do not use>
STR_5495 :玩家列表
STR_5496 :玩家:
STR_5497 :延迟值(Ping):
STR_5496 :玩家
STR_5497 :延迟值(Ping)
STR_5498 :服务器列表
STR_5499 :玩家名称:
STR_5500 :新增服务器
@ -3974,7 +3974,7 @@ STR_5626 :其他游乐园
STR_5627 :剧情列表排序方法:
STR_5628 :游戏出处
STR_5629 :困难度
STR_5630 :允许剧情解锁
STR_5630 :允许逐步解锁
STR_5631 :原版DLC游乐园
STR_5632 :修建你自己的...
STR_5633 :CMD +
@ -3986,7 +3986,7 @@ STR_5638 :权限不够
STR_5639 :{SMALLFONT}{BLACK}显示玩家列表
STR_5640 :{SMALLFONT}{BLACK}组管理
STR_5641 :默认组:
STR_5642 :组:
STR_5642 :组
STR_5643 :添加组
STR_5644 :删除组
STR_5645 :聊天
@ -4015,7 +4015,7 @@ STR_5666 :无密码登录
STR_5701 :{WINDOW_COLOUR_2}最近的行为: {BLACK}{STRINGID}
STR_5702 :{SMALLFONT}{BLACK}Locate player's most recent action
STR_5703 :不能踢出创建者
STR_5704 :最近的行为:
STR_5704 :最近的行为
STR_5705 :不能将此玩家分配到该组
STR_5706 :不能删除有玩家在内的组
STR_5707 :不能修改此组
@ -4042,10 +4042,10 @@ STR_5726 :{SMALLFONT}{BLACK}设定游乐园当前的天气
STR_5727 :缩放质量
STR_5728 :需要开启硬件渲染
STR_5729 :{SMALLFONT}{BLACK}需要开启硬件渲染选项
STR_5730 :最近相邻
STR_5730 :<removed string - do not use>
STR_5731 :线性
STR_5732 :各向异性
STR_5733 :以整数比例调整最近相邻缩放
STR_5732 :<removed string - do not use>
STR_5733 :<removed string - do not use>
# tooltip for tab in options window
STR_5734 :{SMALLFONT}{BLACK}渲染
STR_5735 :网络状态
@ -4131,8 +4131,8 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
#tooltips
STR_5815 :{SMALLFONT}{BLACK}游戏内显示FPS帧数
STR_5816 :{SMALLFONT}{BLACK}设置比例去缩放游戏.{NEWLINE}高分辨率时很有用
STR_5817 :{SMALLFONT}{BLACK}[需要开启硬件渲染]{NEWLINE}设置UI缩放类型{NEWLINE}{NEWLINE}如果窗口缩放因子不是整数倍, 则最近邻像素是高锐度但失真的.{NEWLINE}线性和各向异性是平滑但模糊的.{NEWLINE}即使是非整数的缩放因子Smooth NN也是锐利的, 只是会导致轻微的性能下降.
STR_5818 :{SMALLFONT}{BLACK}[需要开启硬件渲染]{NEWLINE}使用最近相邻缩放{NEWLINE}当窗口缩放比例设置为{NEWLINE}整数值时 (例如1, 2, 3等等)
STR_5817 :{SMALLFONT}{BLACK}设置UI缩放类型.需要开启硬件渲染{NEWLINE}线性缩放是平滑但模糊的.平滑最近邻缩放是锐利的, 但会导致轻微的性能下降.
STR_5818 :<removed string - do not use>
STR_5819 :{SMALLFONT}{BLACK}[需要开启硬件渲染]{NEWLINE}暂停游戏当游戏内{NEWLINE}Steam overlay打开时
STR_5820 :{SMALLFONT}{BLACK}全屏模式时若游戏失焦{NEWLINE}则最小化游戏
STR_5821 :<removed string - do not use>
@ -4156,8 +4156,8 @@ STR_5838 :{SMALLFONT}{BLACK}在工具栏上为财务窗口显示一个单独
STR_5839 :{SMALLFONT}{BLACK}在工具栏上为研发窗口显示一个单独的按钮
STR_5840 :{SMALLFONT}{BLACK}在工具栏上为作弊窗口显示一个单独的按钮
STR_5841 :{SMALLFONT}{BLACK}在工具栏上为最近消息窗口显示一个单独的按钮
STR_5842 :{SMALLFONT}{BLACK}对剧情排序是根据困难度(过山车大亨2行为)还是游戏出处(过山车大亨1行为)
STR_5843 :{SMALLFONT}{BLACK}允许剧情解锁 (过山车大亨1行为)
STR_5842 :{SMALLFONT}{BLACK}对剧情排序是根据困难度(过山车大亨2特色)还是游戏出处(过山车大亨1特色)
STR_5843 :{SMALLFONT}{BLACK}允许剧情逐步解锁 (过山车大亨1特色)
STR_5844 :{SMALLFONT}{BLACK}即使发生不同步或错误{NEWLINE}依然保持和多人服务器的连接
STR_5845 :{SMALLFONT}{BLACK}在工具栏上为调试工具增加一个按钮.{NEWLINE}允许在调试控制台使用快捷键
STR_5846 :{SMALLFONT}{BLACK}设置自动保存的频率
@ -4356,7 +4356,7 @@ STR_6038 :{SMALLFONT}{BLACK}如果你安装了过山车大亨1, 设置此选
STR_6039 :{SMALLFONT}{BLACK}快速拆除游乐设施
STR_6040 :编辑剧情选项
STR_6041 :{BLACK}没有雇佣机械师!
STR_6042 :载高度图
STR_6042 :载高度图
STR_6043 :选择高度图
STR_6044 :平滑高度图
STR_6045 :强度
@ -4469,7 +4469,7 @@ STR_6150 :主服务器返回不正确的响应信息 (没有 JSON 数字)
STR_6151 :主服务器没能返回服务
STR_6152 :主服务器返回不正确的响应信息 (没有 JSON 数组)
STR_6153 :付费进入游乐园 / 为每一个游乐设施付费
STR_6154 :不推荐用高权限来运行OpenRCT2.
STR_6154 :因为安全原因, 不推荐提高权限来运行OpenRCT2.
STR_6155 :KDialog和Zenity库均没有安装. 请至少安装其一, 或者在命令行配置它们.
STR_6156 :名称已被使用
STR_6157 :控制台
@ -4477,6 +4477,84 @@ STR_6158 :不能读取此文件...{NEWLINE}不兼容的RCT版本: {COMMA16}
STR_6159 :平滑最近相邻
STR_6160 :{WINDOW_COLOUR_2}可用车辆: {BLACK}{STRING}
STR_6161 :网格显示切换
STR_6162 :旋转野鼠
STR_6163 :老鼠外形的车辆加速通过急弯和短下落, 温柔地旋转使乘客迷失方向
STR_6164 :{WHITE}{CROSS}
STR_6165 :使用垂直同步
STR_6166 :{SMALLFONT}{BLACK}将每帧图像与显示器刷新率同步, 以避免画面撕裂.
STR_6167 :{SMALLFONT}{BLACK}高级
STR_6168 :主菜单动画
STR_6169 :剧情选项
STR_6170 :界面设定
STR_6171 :查找
STR_6172 :{SMALLFONT}{BLACK}查找
STR_6173 :请输入名字来查找:
STR_6174 :加载存档
STR_6175 :加载剧情
STR_6176 :准备加载的剧情:
STR_6177 :加载{MOVE_X}{87}没有选择剧情
STR_6178 :加载{MOVE_X}{87}{RED}剧情缺失
STR_6179 :选择
STR_6180 :没有选择剧情
STR_6181 :{RED}剧情缺失
STR_6182 :跟随{MOVE_X}{87}{STRING}
STR_6183 :跟随{MOVE_X}{87}没有选择sprite
STR_6184 :跟随Sprite
STR_6185 :选择Sprite
STR_6186 :没有选择sprite
STR_6187 :{MEDIUMFONT}{OUTLINE}{WINDOW_COLOUR_2}{STRING}
STR_6188 :呕吐物
STR_6189 :样子
STR_6190 :{SMALLFONT}{BLACK}当主界面激活时你无法选择一个sprite.
STR_6191 :表面
STR_6192 :墙
STR_6193 :{COMMA16}位游客
STR_6194 :{INLINE_SPRITE}{11}{20}{00}{00}{COMMA16}位游客
STR_6195 :{INLINE_SPRITE}{10}{20}{00}{00}{COMMA16}位游客
STR_6196 :{BLACK}年:
STR_6197 :{BLACK}月:
STR_6198 :{BLACK}日:
STR_6199 :设置日期
STR_6200 :重置日期
STR_6201 :{MONTH}
STR_6202 :启用虚拟楼层
STR_6203 :{SMALLFONT}{BLACK}启用后, 当按住Ctrl或Shift键时将会绘制一层虚拟楼层以便轻松地垂直放置元素.
STR_6204 :砖墙
STR_6205 :钢铁
STR_6206 :灰色粉饰灰泥
STR_6207 :黄色粉饰灰泥
STR_6208 :红色粉饰灰泥
STR_6209 :紫色粉饰灰泥
STR_6210 :绿色粉饰灰泥
STR_6211 :棕色砂岩
STR_6212 :灰色砂岩
STR_6213 :摩天大楼A
STR_6214 :摩天大楼B
STR_6215 :建造
STR_6216 :运营
STR_6217 :游乐设施 / 轨道可用性
STR_6218 :OpenRCT2官方
STR_6219 :高亮道路相关物
STR_6220 :使之可用
STR_6221 :{SMALLFONT}{BLACK}This will set the ride's known entrance or exit location to the currently selected tile. 每个站台只能有一个入口或出口使之可用.
STR_6222 :无法在此放置游客入口...
STR_6223 :必须在游乐园边界外!
STR_6224 :{STRING}放置一个游客入口.
STR_6225 :不支持OpenGL渲染
STR_6226 :允许剧情提前完成
STR_6227 :{SMALLFONT}{BLACK}当所有剧情目标在预定时间之前达成时将触发剧情完成.
STR_6228 :剧情选项
STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID}
STR_6230 :{STRINGID}:
STR_6231 :{WINDOW_COLOUR_2}{STRINGID}: {MOVE_X}{185}{STRINGID}
STR_6232 :一动不动
STR_6233 :剖视图视角
STR_6234 :高亮道路相关物
STR_6235 :服务器信息
STR_6236 :玩家
STR_6237 :组
STR_6238 :多人选项
#############
# Scenarios #
@ -4920,16 +4998,6 @@ STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#####################
# Rides/attractions #
#####################
#WW
[CONDORRD]
STR_NAME :Condor Ride
STR_DESC :Riding in special harnesses below the track, riders experience the feeling of flight as they swoop through the air in Condor-shaped trains
STR_CPTY :4 passengers per car
#################
## RCT2 Scenarios
#################

View File

@ -1220,8 +1220,8 @@ STR_1214 :{SMALLFONT}{BLACK}選擇發車前最多的等待時長
STR_1215 :{WINDOW_COLOUR_2}與鄰近車站同步發車
STR_1216 :{SMALLFONT}{BLACK}選擇是否與全部鄰近車站同步發車 (以便'競賽')
STR_1217 :{COMMA16}秒
STR_1218 :{BLACK}{SMALLUP}
STR_1219 :{BLACK}{SMALLDOWN}
STR_1218 :{BLACK}+
STR_1219 :{BLACK}-
STR_1220 :只准卸客
STR_1221 :尚未建造入口
STR_1222 :尚未建造出口
@ -1778,8 +1778,8 @@ STR_1771 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COM
STR_1772 :{COMMA16}
STR_1773 :每個遊樂設施只可建造一個即時照相區域
STR_1774 :每個遊樂設施只可建造一個纜索坡道
STR_1775 :關閉
STR_1776 :開啟
STR_1775 :<removed string - do not use>
STR_1776 :<removed string - do not use>
STR_1777 :{WINDOW_COLOUR_2}音樂
STR_1778 :{STRINGID} - -
STR_1779 :{INLINE_SPRITE}{254}{19}{00}{00} 熊貓服裝
@ -3575,8 +3575,8 @@ STR_5232 :{SMALLFONT}{BLACK}編輯工具
STR_5233 :{SMALLFONT}{BLACK}其他
STR_5234 :{SMALLFONT}{BLACK}彈出視窗
STR_5235 :{SMALLFONT}{BLACK}設定
STR_5236 :主題:
STR_5237 :調色盤:
STR_5236 :主題
STR_5237 :調色盤
STR_5238 :目前主題:
STR_5239 :複製
STR_5240 :請輸入這個主題的名稱
@ -3836,8 +3836,8 @@ STR_5492 :劇情選項
STR_5493 :發送訊息
STR_5494 :<not used anymore>
STR_5495 :玩家列表
STR_5496 :玩家:
STR_5497 :延遲值 (Ping):
STR_5496 :玩家
STR_5497 :延遲值 (Ping)
STR_5498 :伺服器列表
STR_5499 :玩家名稱:
STR_5500 :新增伺服器
@ -3982,7 +3982,7 @@ STR_5638 :並沒有足夠的權限
STR_5639 :{SMALLFONT}{BLACK}顯示玩家列表
STR_5640 :{SMALLFONT}{BLACK}管理組別
STR_5641 :預設組別:
STR_5642 :組別:
STR_5642 :組別
STR_5643 :新增組別
STR_5644 :移除組別
STR_5645 :聊天
@ -4010,7 +4010,7 @@ STR_5666 :無密碼登入
STR_5701 :{WINDOW_COLOUR_2}最近的動作: {BLACK}{STRINGID}
STR_5702 :{SMALLFONT}{BLACK}將這個玩家的最近的動作定位
STR_5703 :無法踢除架設者
STR_5704 :最近的動作:
STR_5704 :最近的動作
STR_5705 :無法將此玩家分配到此組別
STR_5706 :無法移除有玩家在內的組別
STR_5707 :無法修改此組別
@ -4315,7 +4315,7 @@ STR_6002 :{SMALLFONT}{BLACK}夜晚的時候, 路燈及遊樂設施將會有
STR_6003 :切入檢視
STR_6004 :切入檢視
STR_6005 :啟用切入檢視
STR_6006 :{SMALLFONT}{BLACK}切入檢視只顯示低於或等於切入高度的地圖元素
STR_6006 :{SMALLFONT}{BLACK}切入檢視只顯示低於或等於切入高度(垂直切割)及於選擇範圍(縱橫切割)的地圖元素
STR_6007 :切入高度
STR_6008 :{SMALLFONT}{BLACK}點撃來切換原生值或量度單位值
STR_6009 :{SMALLFONT}{BLACK}選擇切入高度
@ -4463,7 +4463,7 @@ STR_6150 :主列表伺服器傳回不正確的回應 (無JSON 號碼)
STR_6151 :主列表伺服器傳回列表失敗
STR_6152 :主列表伺服器傳回不正確的回應 (無JSON 陣列)
STR_6153 :付費進入樂園 / 按乘搭遊樂設施的次數付費
STR_6154 :不建議以管理員權限運行OpenRCT2.
STR_6154 :為安全起見, 不建議以管理員權限運行OpenRCT2.
STR_6155 :本系統中並未安裝KDialog或Zenity. 請安裝其中一款, 或於命令提示字元中配置.
STR_6156 :名字已被預留
STR_6157 :命令提示字元
@ -4479,7 +4479,7 @@ STR_6166 :{SMALLFONT}{BLACK}將每影格與螢幕的更新頻率同步, 以
STR_6167 :{SMALLFONT}{BLACK}進階
STR_6168 :主選單動畫
STR_6169 :劇情選項
STR_6170 :小設定
STR_6170 :界面小設定
STR_6171 :搜尋
STR_6172 :{SMALLFONT}{BLACK}搜尋
STR_6173 :請輸入名字來搜尋:
@ -4527,6 +4527,34 @@ STR_6211 :棕色砂岩
STR_6212 :灰色砂岩
STR_6213 :高樓大廈A
STR_6214 :高樓大廈B
STR_6215 :建造
STR_6216 :運作
STR_6217 :遊樂設施/軌道可用性
STR_6218 :OpenRCT2官方
STR_6219 :高亮道路問題
STR_6220 :設為可用
STR_6221 :{SMALLFONT}{BLACK}此選項會將當前選中的網格設定為這個遊樂設施的已知入口或出口位置. 一個車站只能有一個可用入口及出口.
STR_6222 :不能在這裡放置遊客進出點...
STR_6223 :必須放置於樂園邊界外!
STR_6224 :{STRING}已放置一個遊客進出點.
STR_6225 :使用OpenGL渲染器時不支援
STR_6226 :啟用劇情提早完成
STR_6227 :{SMALLFONT}{BLACK}當劇情目前於指定日期前完成時便立即完成劇情.
STR_6228 :劇情選項
STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID}
STR_6230 :{STRINGID}:
STR_6231 :{WINDOW_COLOUR_2}{STRINGID}:
STR_6232 :涷結
STR_6233 :切入檢視
STR_6234 :高亮道路問題
STR_6235 :伺服器資訊
STR_6236 :玩家
STR_6237 :群組
STR_6238 :多人遊戲選項
STR_6239 :垂直切割
STR_6240 :縱橫切割
STR_6241 :選擇範圍
STR_6242 :清除選擇
#############
# Scenarios #
@ -4969,110 +4997,3 @@ STR_DTLS :
STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
#####################
# Rides/attractions #
#####################
###############################################################################
## RCT2 Objects
###############################################################################
[AML1]
STR_NAME :美式蒸氣火車
STR_DESC :配備著復刻蒸氣火車頭及煤水車的小型蒸氣火車, 拉著帶有帆布車頂的木製車廂
STR_CPTY :每車廂6位乘客
[CLIFT1]
STR_NAME :纜車車卡
STR_DESC :供纜車使用的開放式車卡
STR_CPTY :每車卡2位乘客
[CLIFT2]
STR_NAME :登頂滑雪纜車車椅
STR_DESC :供纜車使用的開放式車卡
STR_CPTY :每車卡2位乘客
[LIFT1]
STR_NAME :升降機
STR_DESC :遊客乘搭升降機上下穿梭於垂直的管道中, 並借此訪問另一層
STR_CPTY :16位乘客
[MONO1]
STR_NAME :流線型單軌電車
STR_DESC :大載客量的單軌電車, 車頭車尾都配備著流線型設計
STR_CPTY :每車卡5或10位乘客
[MONO2]
STR_NAME :小型單軌電車
STR_DESC :附有開放式側邊的小型單軌電車
STR_CPTY :每車卡4位乘客
[MONO3]
STR_NAME :懷舊風格單軌電車
STR_DESC :使用開放式設計車廂的單軌電車
STR_CPTY :每車卡4位乘客
[NRL]
STR_NAME :蒸氣火車
STR_DESC :配備著復刻蒸氣火車頭及煤水車的小型蒸氣火車, 拉著開放式的木製車廂
STR_CPTY :每車廂6位乘客
[NRL2]
STR_NAME :有蓋蒸氣火車
STR_DESC :配備著復刻蒸氣火車頭及煤水車的小型蒸氣火車, 拉著帶有織布車頂的木製車廂
STR_CPTY :每車廂6位乘客
[SMONO]
STR_NAME :懸掛式單軌電車
STR_DESC :大載客量的單軌電車
STR_CPTY :每車卡8位乘客
[TRAM1]
STR_NAME :電車
STR_DESC :復刻的懷舊電車
STR_CPTY :每車卡10位乘客
[4X4]
STR_NAME :怪獸卡車
STR_DESC :能爬上陡斜坡道, 而且帶有動力的巨型4 x 4卡車
STR_CPTY :每卡車2位乘客
[CHBUILD]
STR_NAME :古怪屋
STR_DESC :一座建築物, 含有扭曲房間及傾斜走道使人於行走中失去方向感
STR_CPTY :5位遊客
[CIRCUS1]
STR_NAME :馬戲團
STR_DESC :於大型帳幕內進行動物馬戲團表演
STR_CPTY :30位遊客
[CTCAR]
STR_NAME :笑臉貓遊
STR_DESC :帶有動力的貓型車輛跟隨著軌道的路線遊覽周邊
STR_CPTY :每輛車2位乘客
[DODG1]
STR_NAME :碰碰車
STR_DESC :自助駕駛的電力碰碰車
STR_CPTY :每車輛1位乘客
[FSAUC]
STR_NAME :碰碰飛碟
STR_DESC :自助駕駛的飛碟型車輛
STR_CPTY :每飛碟1位乘客
[FWH1]
STR_NAME :摩天輪
STR_DESC :不斷旋轉, 附有露天座椅的巨大輪環
STR_CPTY :32位乘客
[GOLF1]
STR_NAME :迷你高爾夫
STR_DESC :一個溫和的迷你高爾夫遊戲
STR_CPTY :
#WW
[CONDORRD]
STR_NAME :神鷹暢遊
STR_DESC :乘客乘坐於軌道下的神鷹造型列車上, 將會於飛馳中體驗飛一般的快感
STR_CPTY :每車卡4位乘客

2
debian/changelog vendored
View File

@ -1,4 +1,4 @@
openrct2 (0.1.2-develop-1) unstable; urgency=medium
openrct2 (0.1.3-develop-1) unstable; urgency=medium
* Release 2017-07 (Closes: #XXXXXX)

2
debian/control vendored
View File

@ -4,7 +4,7 @@ Section: misc
Priority: optional
Standards-Version: 3.9.2
Multi-Arch: same
Build-Depends: debhelper (>= 9), cmake, libsdl2-dev, libsdl2-ttf-dev, gcc, pkg-config, libjansson4 (>= 2.3), libjansson-dev (>= 2.3), libspeex-dev, libspeexdsp-dev, libcurl4-openssl-dev, libcrypto++-dev, libfontconfig1-dev, libfreetype6-dev, libpng-dev, libssl-dev, libzip-dev
Build-Depends: debhelper (>= 9), cmake, libsdl2-dev, gcc (>= 7), pkg-config, libjansson4 (>= 2.3), libjansson-dev (>= 2.3), 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)
Package: openrct2
Architecture: any

View File

@ -1,3 +1,61 @@
0.1.3 (in development)
------------------------------------------------------------------------
- Feature: [#1417] Allow saving track designs for flat rides.
- Feature: [#1675] Auto-rotate shops to face footpaths.
- Feature: [#3473] Add button in ride window's maintainance tab to refurbish the ride.
- Feature: [#6510] Ability to select edges or a row of tiles by holding down Ctrl using the land tool.
- Feature: [#7187] Option for early scenario completion.
- Feature: [#7266] Make headless instances use an interactive terminal with access to the in-game console API.
- Feature: [#7267] Leverage more historical data in Finances window.
- Feature: [#7316] Cheat to allow freezing all staff
- Feature: [#7332] Keyboard shortcuts for view path issues and cutaway view.
- Feature: [#7348] Add large half loops to the Vertical Drop Roller Coaster.
- Feature: [#7459] Allow opening and closing of parks that use no money.
- Feature: [#7579] New horizontal +/- spinner widgets to make adjusting values easier.
- Fix: [#2053] When clearance checks are disabled, a track piece ghost can remove non-ghost track pieces.
- Fix: [#2611] Some objects show (undefined string) instead of a description in Korean.
- Fix: [#3596] Saving parks, landscapes and tracks with a period in the filenames don't get their extension.
- Fix: [#5210] Default system dialog not accessible from saving landscape window.
- Fix: [#6134] Scenarios incorrectly categorised when using Polish version of RCT2.
- Fix: [#6141] CSS50.dat is never loaded.
- Fix: [#6647] Changelog window causes FPS drop.
- Fix: [#6938] Banner do not correctly capitalise non-ASCII characters.
- Fix: [#7176] Mechanics sometimes fall down from rides.
- Fix: [#7303] Visual glitch with virtual floor near map edges.
- Fix: [#7313] Loading an invalid path with openrct2 produces results different than expected.
- Fix: [#7327] Abstract scenery and stations don't get fully See-Through when hiding them (original bug).
- Fix: [#7331] Invention list in scenario editor crashes upon removing previously-enabled ride/stall entries.
- Fix: [#7341] Staff may auto-spawn on guests walking outside of paths.
- Fix: [#7354] Cut-away view does not draw tile elements that have been moved down on the list.
- Fix: [#7358] Peeps and staff entering rides still have the slope speed penalty set.
- Fix: [#7382] Opening the mini-map reverts the size of the land tool to 1x1, regardless of what was selected before.
- Fix: [#7402] Edges of neigbouring footpaths stay connected after removing a path that's underneath a ride entrance.
- Fix: [#7405] Rides can be covered by placing scenery underneath them.
- Fix: [#7418] Staff walk off paths with a connection but no adjacent path.
- Fix: [#7434] Diagonal ride segments cannot be deleted if they are isolated.
- Fix: [#7436] Only the first 32 vehicles of a train can be painted.
- Fix: [#7480] Graphs skip values of 0.
- Fix: [#7505] Game crashes when trying to make path over map edge while having clearance checks disabled.
- Fix: [#7528] In park entrance pricing tab, switching tabs happens on mouse-down instead of mouse-up
- Fix: [#7544] Starting a headless server with no arguments causes the game to freeze.
- Fix: [#7571] Hovering a ride design over scenery or tracks will give tons of money.
- Improved: [#2989] Multiplayer window now changes title when tab changes.
- Improved: [#5339] Change eyedropper icon to actual eyedropper and change cursor to crosshair.
- Improved: [#5832] Resize tile inspector automatically when selecting a tile element.
- Improved: [#6221] The scenario editor's invention list is now resizeable.
- Improved: [#7069] The arbitrary ride type selection dropdown is now sorted orthographically, and has its spinners removed.
- Improved: [#7302] Raising land near the map edge makes the affected area smaller instead of showing an 'off edge map' error.
- Improved: [#7435] Object indexing now supports multi-threading.
- Improved: [#7510] Add horizontal clipping to cut-away view options.
- Improved: [#7531] "Save track design" dropdown now stays open.
- Improved: [#7548] Ctrl-clicking with the tile inspector open now directly selects an element and its tile.
- Improved: [#7555] Allow setting the Twitch API URL, allowing custom API servers.
- Improved: [#7567] Improve the performance of loading parks and the title sequence.
- Improved: [#7577] Allow fine-tuning the virtual floor style.
- Improved: [#7608] The vehicle selection dropdown is now sorted orthographically.
- Improved: [#7613] Resizing the staff window now resizes the name and action columns too.
- Improved: [#7627] Allow scrolling up and down on spinners to change their values.
0.1.2 (2018-03-18)
------------------------------------------------------------------------
- Feature: [#2893] Object selection filters for items from RCT1, Added Attractions and Loopy Landscapes.
@ -112,6 +170,7 @@
- Fix: [#7011] Swinging and bobsleigh cars going backwards swing in the wrong direction (original bug).
- Fix: [#7042, #7077] Paths sometimes disconnect when building them with clearance checks off.
- Fix: [#7125] No entry signs not correctly handled in pathfinding.
- Fix: [#7153] Sign text cut off when using TTF Fonts.
- Fix: [#7223] Vehicle mass not correctly recalculated when using remove all guests cheat.
- Fix: [#7229] Exploding guests cheat causes rides to get stuck and freezes game.
- Fix: [#7295] peep_should_go_on_ride_again() checked balloon colour instead of toilet need.

View File

@ -11,11 +11,14 @@ 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[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.
@ -23,10 +26,13 @@ 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[nl]=Een opensource-versie van RollerCoaster Tycoon 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;

View File

@ -13,7 +13,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.2</string>
<string>0.1.3</string>
<key>CFBundleSignature</key>
<string>ORCT</string>
<key>LSMinimumSystemVersion</key>

View File

@ -1,6 +1,6 @@
FROM nfnty/arch-mini
RUN pacman -Syyu --noconfirm
RUN pacman -S --noconfirm gcc gcc-libs git curl jshon expac yajl wget unzip cmake ninja && pacman -Sc
RUN pacman -S --noconfirm systemd curl sdl2 speex fontconfig openssl libpng jansson libzip && pacman -Sc
RUN pacman -S --noconfirm base-devel gcc gcc-libs git curl jshon expac yajl wget unzip cmake ninja && pacman -Sc
RUN pacman -S --noconfirm systemd curl ccache sdl2 speex fontconfig openssl libpng jansson libzip icu && pacman -Sc
RUN pacman -S --noconfirm --needed make pkg-config

View File

@ -8,15 +8,16 @@ RUN mkdir build \
&& ninja -k0 install
# Build runtime image
FROM ubuntu:16.04
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get install --no-install-recommends -y rsync ca-certificates libjansson4 libpng12-0 libzip4 libcurl3 libfreetype6 libfontconfig1
RUN apt-get install --no-install-recommends -y rsync ca-certificates libjansson4 libpng16-16 libzip4 libcurl4 libfreetype6 libfontconfig1
# Install OpenRCT2
COPY --from=build-env /openrct2-install /openrct2-install
RUN rsync -a /openrct2-install/* / \
&& rm -rf /openrct2-install
&& rm -rf /openrct2-install \
&& openrct2-cli --version
# Done
ENTRYPOINT ["openrct2-cli"]

View File

@ -1,19 +1,39 @@
FROM ubuntu:16.04
# based on sstrakh/xenial-boost-clang but imported as source,
# due to upstream image being obsolete and we don't need boost.
RUN apt-get update \
&& apt-get install -y curl sudo \
&& curl http://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - \
&& echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main" > /etc/apt/sources.list.d/clang4.list \
&& apt-get update \
&& apt-get install -y \
clang-4.0 \
gcc \
g++ \
git-core \
&& ln -s /usr/bin/clang-4.0 /usr/bin/clang \
&& ln -s /usr/bin/clang++-4.0 /usr/bin/clang++
RUN curl https://cmake.org/files/v3.9/cmake-3.9.4-Linux-x86_64.sh -o cmake.sh && sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local
FROM ubuntu:18.04
# Ubuntu 18.04 already comes with GCC 7 available, there's no need to install PPA for it,
# but leave the commands for future updates
#RUN \
# apt-get update && \
# apt-get install -y software-properties-common && \
# add-apt-repository ppa:ubuntu-toolchain-r/test && \
# apt-get update && \
# apt-get install -y g++-7 && \
# update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 60
# Ubuntu 18.04 already comes with clang 5.0 available, there's no need to install repository for it,
# but leave the commands for future updates
#RUN apt-get update \
# && apt-get install -y curl sudo \
# && curl http://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - \
# && echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-5.0 main" > /etc/apt/sources.list.d/clang5.list \
# && apt-get update \
# && apt-get install -y \
# clang-5.0 \
# git-core \
# && ln -s /usr/bin/clang-5.0 /usr/bin/clang \
# && ln -s /usr/bin/clang++-5.0 /usr/bin/clang++
# Ubuntu 18.04 already comes with cmake 3.10 available, there's no need to install it manually,
# but leave the commands for future updates
#RUN curl https://cmake.org/files/v3.9/cmake-3.9.4-Linux-x86_64.sh -o cmake.sh && sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local
RUN \
apt-get update && \
apt-get install -y git-core g++ clang-5.0 && \
ln -s /usr/bin/clang-5.0 /usr/bin/clang && \
ln -s /usr/bin/clang++-5.0 /usr/bin/clang++
RUN apt-get -y upgrade
# clang and gcc already installed
RUN apt-get install --no-install-recommends -y cmake libsdl2-dev libsdl2-ttf-dev pkg-config libjansson-dev libspeex-dev libspeexdsp-dev libcurl4-openssl-dev libcrypto++-dev libfontconfig1-dev libfreetype6-dev libpng-dev libzip-dev git libssl-dev ninja-build
RUN apt-get install --no-install-recommends -y ccache cmake libsdl2-dev libsdl2-ttf-dev pkg-config libjansson-dev libspeex-dev libspeexdsp-dev libcurl4-openssl-dev libcrypto++-dev libfontconfig1-dev libfreetype6-dev libpng-dev libzip-dev git libssl-dev ninja-build libicu-dev

View File

@ -1,6 +1,9 @@
FROM ubuntu:16.04
FROM ubuntu:18.04
RUN dpkg --add-architecture i386
RUN \
apt-get update && \
apt-get install -y g++-7-multilib && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 60
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get install --no-install-recommends -y gcc-multilib g++-multilib curl ca-certificates libsdl2-dev:i386 libsdl2-ttf-dev:i386 pkg-config:i386 libjansson-dev:i386 libspeex-dev:i386 libspeexdsp-dev:i386 libcurl4-openssl-dev:i386 libcrypto++-dev:i386 libfontconfig1-dev:i386 libfreetype6-dev:i386 libpng-dev:i386 libzip-dev:i386 libssl-dev:i386 ninja-build
RUN curl https://cmake.org/files/v3.9/cmake-3.9.4-Linux-x86_64.sh -o cmake.sh && sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local
RUN apt-get install --no-install-recommends -y ccache cmake curl ca-certificates libsdl2-dev:i386 libsdl2-ttf-dev:i386 pkg-config:i386 libjansson-dev:i386 libspeex-dev:i386 libspeexdsp-dev:i386 libcurl4-openssl-dev:i386 libcrypto++-dev:i386 libfontconfig1-dev:i386 libfreetype6-dev:i386 libpng-dev:i386 libzip-dev:i386 libssl-dev:i386 ninja-build libicu-dev:i386

View File

@ -18,8 +18,8 @@
<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)'=='Win32' and '$(UseSharedLibs)'!='true'">x86-windows-static-winssl</VcpkgTriplet>
<VcpkgTriplet Condition="'$(Platform)'=='x64' and '$(UseSharedLibs)'!='true'">x64-windows-static-winssl</VcpkgTriplet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
@ -32,7 +32,7 @@
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<DisableSpecificWarnings>4068;4091;4100;4132;4200;4201;4204;4206;4221;4244;4245;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<DisableSpecificWarnings>4068;4091;4100;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
@ -44,7 +44,6 @@
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
C4245: 'conversion_type': conversion from 'type1' to 'type2', signed/unsigned mismatch
-->
<TreatSpecificWarningsAsErrors>4263;4265;4548;4549;4555</TreatSpecificWarningsAsErrors>
<!-- Warnings, that have to be enabled manually:
@ -76,7 +75,7 @@
<MinimalRebuild>false</MinimalRebuild>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<AdditionalDependencies>bz2d.lib;discord-rpc.lib;freetyped.lib;jansson_d.lib;libcurl.lib;libeay32.lib;libpng16d.lib;libspeexdsp.lib;SDL2d.lib;ssleay32.lib;zip.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -92,7 +91,7 @@
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>bz2.lib;discord-rpc.lib;freetype.lib;jansson.lib;libcurl.lib;libeay32.lib;libpng16.lib;libspeexdsp.lib;SDL2.lib;ssleay32.lib;zip.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>

View File

@ -18,7 +18,7 @@
<Platform Condition="'$(PLATFORM)'==''">x64</Platform>
<GIT_COMMIT_SHA1_SHORT Condition="'$(GIT_COMMIT_SHA1)'!=''">$(GIT_COMMIT_SHA1.Substring(0, 7))</GIT_COMMIT_SHA1_SHORT>
<Version>0.1.2</Version>
<Version>0.1.3</Version>
<VersionExtra Condition="'$(GIT_BRANCH)'!=''">-$(GIT_BRANCH)-$(GIT_COMMIT_SHA1_SHORT)</VersionExtra>
<VersionExtra Condition="'$(GIT_TAG)'!=''"></VersionExtra>
<TargetLibsVersion>16</TargetLibsVersion>
@ -62,15 +62,17 @@
<!-- 3rd party libraries / dependencies -->
<PropertyGroup>
<DependenciesCheckFile>$(RootDir).dependencies</DependenciesCheckFile>
<LibsUrl Condition="'$(Platform)'=='Win32'">https://github.com/OpenRCT2/Dependencies/releases/download/v16/openrct2-libs-v16-x86-windows-static-winssl.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='Win32'">827d86c1571bb73504b23929746b20d8094aae40</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='x64'">https://github.com/OpenRCT2/Dependencies/releases/download/v16/openrct2-libs-v16-x64-windows-static-winssl.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='x64'">5904b7e0562ace419b7c87d618e5ad00ba664b36</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='Win32'">https://github.com/OpenRCT2/Dependencies/releases/download/v17/openrct2-libs-v17-x86-windows-static-winssl.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='Win32'">4f9fb5feebe4a4ed461b2a545b2fd1c91ef6527b</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='x64'">https://github.com/OpenRCT2/Dependencies/releases/download/v17/openrct2-libs-v17-x64-windows-static-winssl.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='x64'">5aab386f9eeaad102b330fcddea2b4cc9e3c7067</LibsSha1>
<GtestVersion>1.8.0</GtestVersion>
<GtestUrl>https://github.com/google/googletest/archive/release-1.8.0.zip</GtestUrl>
<GtestSha1>667f873ab7a4d246062565fad32fb6d8e203ee73</GtestSha1>
<TitleSequencesUrl>https://github.com/OpenRCT2/title-sequences/releases/download/v0.1.2/title-sequence-v0.1.2.zip</TitleSequencesUrl>
<TitleSequencesSha1>1136ef92bfb05cd1cba9831ba6dc4a653d87a246</TitleSequencesSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.0.2/objects.zip</ObjectsUrl>
<ObjectsSha1>acf853ff6fa4285cea94cc9d8f74730e57202d06</ObjectsSha1>
</PropertyGroup>
<ItemGroup>
@ -183,11 +185,16 @@
<MSBuild Projects="openrct2.sln" Targets="Rebuild" Properties="$(SlnProperties)" />
</Target>
<Target Name="Test" DependsOnTargets="Build">
<Exec Command="$(TargetDir)tests\tests.exe &quot;--gtest_output=xml:$(ArtifactsDir)test-results.xml&quot;" />
</Target>
<Target Name="TestNoRCT2" DependsOnTargets="Build">
<Exec Command="$(TargetDir)tests\tests.exe &quot;--gtest_filter=-RideRatings*:MultiLaunch*&quot; &quot;--gtest_output=xml:$(ArtifactsDir)test-results.xml&quot;" />
<Target Name="Test">
<!-- Scan repositories prior to running tests as it can take a while -->
<Message Text="Building OpenRCT2 repository indexes..." Importance="high" />
<Exec Command="$(TargetDir)openrct2.exe scan-objects"
WorkingDirectory="$(TargetDir)"
StandardOutputImportance="normal" />
<Message Text="Running tests..." Importance="high" />
<Exec Command="$(TargetDir)tests.exe &quot;--gtest_output=xml:$(ArtifactsDir)test-results.xml&quot;"
WorkingDirectory="$(TargetDir)" />
</Target>
<!-- Target to build g2.dat containing OpenRCT2 sprites -->
@ -214,11 +221,20 @@
OutputDirectory="$(TargetDir)data\title" />
</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 sign OpenRCT2
This requires the project parameter SIGN_PASSWORD to be set -->
<Target Name="Sign" AfterTargets="Build" Inputs="@(SignItems)" Outputs="%(SignItems.Identity).signed"
Condition="'$(TestConfig)'!='true'">
<Warning Condition="'$(SIGN_PASSWORD)'==''" Text="SIGN_PASSWORD was not set, skipping signing of %(SignItems.Filename)%(SignItems.Extension)." />
<!-- <Warning Condition="'$(SIGN_PASSWORD)'==''" Text="SIGN_PASSWORD was not set, skipping signing of %(SignItems.Filename)%(SignItems.Extension)." /> -->
<Message Condition="'$(SIGN_PASSWORD)'!=''" Text="Signing %(SignItems.Filename)%(SignItems.Extension)"
Importance="high" />
<Exec EchoOff="true" Condition="'$(SIGN_PASSWORD)'!=''"
@ -267,7 +283,7 @@
StandardOutputImportance="normal" />
<!-- Sign the installer -->
<Warning Condition="'$(SIGN_PASSWORD)'==''" Text="SIGN_PASSWORD was not set, skipping signing of $(PublishInstallerExeName)." />
<!-- <Warning Condition="'$(SIGN_PASSWORD)'==''" Text="SIGN_PASSWORD was not set, skipping signing of $(PublishInstallerExeName)." /> -->
<Message Condition="'$(SIGN_PASSWORD)'!=''" Text="Signing $(PublishInstallerExeName)"
Importance="high" />
<Exec EchoOff="true" Condition="'$(SIGN_PASSWORD)'!=''"

View File

@ -28,12 +28,10 @@ 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}"
ProjectSection(ProjectDependencies) = postProject
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openrct2-cli", "src\openrct2-cli\openrct2-cli.vcxproj", "{B6808F71-30B4-4499-8FF6-0B1C86391842}"
ProjectSection(ProjectDependencies) = postProject
{7B8DB129-79EF-417E-B372-8A18E009D261} = {7B8DB129-79EF-417E-B372-8A18E009D261}
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
@ -105,4 +103,7 @@ Global
{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

@ -67,6 +67,7 @@ Some Linux distributions offer native packages already. These packages are usual
* openSUSE OBS: [games/openrct2](https://software.opensuse.org/download.html?project=games&package=openrct2)
* Gentoo (main portage tree): [games-simulation/openrct2](https://packages.gentoo.org/packages/games-simulation/openrct2)
* NixOS (`nixos-unstable` channel): [openrct2](https://github.com/NixOS/nixpkgs/blob/master/pkgs/games/openrct2/default.nix)
* Fedora 26/27 i386/amd64: [openrct2](https://copr.fedorainfracloud.org/coprs/nauticalnexus/openrct2/)
Some \*BSD operating systems offer native packages. These packages are usually third-party, but we're trying to resolve issues they are facing.
* OpenBSD: [games/openrct2](http://openports.se/games/openrct2)
@ -81,7 +82,7 @@ OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bo
### Windows:
- 7 / 8 / 10
- Visual Studio 2017 update 3 (Enterprise / Professional / [Community (Free)](https://www.visualstudio.com/vs/community/))
- Visual Studio 2017 update 7 (Enterprise / Professional / [Community (Free)](https://www.visualstudio.com/vs/community/))
- Desktop development with C++
- [Windows 10 SDK (10.0.14393.0)](https://go.microsoft.com/fwlink/p/?LinkId=838916)
- [7-Zip](http://www.7-zip.org/) (for deployment only)
@ -108,7 +109,7 @@ The program can also be built as a command line program using CMake. This type o
- curl (only if building with http support)
- jansson (>= 2.5)
- openssl (>= 1.0; only if building with multiplayer support)
- iconv (part of glibc on Linux)
- icu (>= 59.0)
- zlib
- gl (commonly provided by Mesa or GPU vendors; only for UI client, can be disabled)
- cmake

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

View File

@ -434,5 +434,10 @@
"path": "edge/skyscraper_b.png",
"x_offset": 2,
"y_offset": 2
},
{
"path": "icons/eyedropper.png",
"x_offset": 5,
"y_offset": 5
}
]

View File

@ -12,6 +12,8 @@ fi
cachedir=.cache
mkdir -p $cachedir
ci_env=`bash <(curl -s https://codecov.io/env)`
# Sets default target to "linux", if none specified
TARGET=${TARGET-linux}
@ -28,15 +30,15 @@ pushd build
if [[ $TARGET == "docker64" ]]
then
# CMAKE and MAKE opts from environment
docker run -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:64bit-only bash -c "cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && ninja $OPENRCT_MAKE_OPTS && ctest --output-on-failure"
docker run $ci_env -e CCACHE_DIR=/ccache -v $HOME/.ccache:/ccache -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:64bit-only bash -c "export PATH=/usr/lib/ccache/bin:\$PATH && ccache --show-stats > ccache_before && cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && ninja all install $OPENRCT_MAKE_OPTS && ccache --show-stats > ccache_after && ( diff -U100 ccache_before ccache_after || true ) && ./openrct2-cli scan-objects && ctest --output-on-failure && cd .. && bash <(curl -s https://codecov.io/bash) 2>\&1 | grep -v \"has arcs\""
elif [[ $TARGET == "ubuntu_i686" ]]
then
# CMAKE and MAKE opts from environment
docker run -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:ubuntu_i686 bash -c "cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && ninja all testpaint install $OPENRCT_MAKE_OPTS && ctest --output-on-failure && ( ./testpaint --quiet || if [[ \$? -eq 1 ]] ; then echo Allowing failed tests to pass ; else echo here ; false; fi )"
docker run $ci_env -e CCACHE_DIR=/ccache -v $HOME/.ccache:/ccache -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:ubuntu_i686 bash -c "export PATH=/usr/lib/ccache:\$PATH && ccache --show-stats > ccache_before && cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && ninja all testpaint install $OPENRCT_MAKE_OPTS && ccache --show-stats > ccache_after && ( diff -U100 ccache_before ccache_after || true ) && ./openrct2-cli scan-objects && ctest --output-on-failure && ( ./testpaint --quiet || if [[ \$? -eq 1 ]] ; then echo Allowing failed tests to pass ; else echo here ; false; fi ) && cd .. && bash <(curl -s https://codecov.io/bash)"
elif [[ $TARGET == "ubuntu_amd64" ]]
then
# CMAKE and MAKE opts from environment
docker run -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:ubuntu_amd64 bash -c "cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && ninja $OPENRCT_MAKE_OPTS install && ctest --output-on-failure"
docker run $ci_env -e CCACHE_DIR=/ccache -v $HOME/.ccache:/ccache -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:ubuntu_amd64 bash -c "export PATH=/usr/lib/ccache:\$PATH && ccache --show-stats > ccache_before && cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && ninja $OPENRCT_MAKE_OPTS install && ccache --show-stats > ccache_after && ( diff -U100 ccache_before ccache_after || true ) && ./openrct2-cli scan-objects && ctest --output-on-failure && cd .. && bash <(curl -s https://codecov.io/bash)"
elif [[ $TARGET == "windows" ]]
then
# CMAKE and MAKE opts from environment

View File

@ -98,7 +98,11 @@ if [[ "$(uname)" == "Darwin" ]]; then
fi
elif [[ $(uname) == "Linux" ]]; then
# Clone discord-rpc for Discord's Rich Presence support
git clone https://github.com/discordapp/discord-rpc
# Use tagged release to prevent upstream changes from breaking our code
git clone https://github.com/IntelOrca/discord-rpc -b fix/134-iothreadholder
# Use rapidjson with a hack for GCC 8, while awaiting a fix upstream:
# https://github.com/Tencent/rapidjson/issues/1205
git clone https://github.com/janisozaur/rapidjson discord-rpc/thirdparty/rapidjson -b patch-1
# prevent build.sh from re-doing all the steps again
case "$TARGET" in
"ubuntu_i686")

View File

@ -10,7 +10,7 @@ android {
targetSdkVersion 25
versionCode 2
versionName '0.1.2'
versionName '0.1.3'
externalNativeBuild {
cmake {
@ -90,6 +90,14 @@ android.applicationVariants.all { variant ->
from zipTree(new File(buildDir, 'title-sequence.zip'))
into "$variant.mergeAssets.outputDir/data/title"
}
download {
src 'https://github.com/OpenRCT2/objects/releases/download/v1.0.2/objects.zip'
dest new File(buildDir, 'objects.zip')
}
copy {
from zipTree(new File(buildDir, 'objects.zip'))
into "$variant.mergeAssets.outputDir/data/object"
}
}
}

View File

@ -106,7 +106,7 @@ set(COMMON_COMPILE_OPTIONS "${COMMON_COMPILE_OPTIONS} -fPIC")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14 ${COMMON_COMPILE_OPTIONS} -Wnon-virtual-dtor")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++1z ${COMMON_COMPILE_OPTIONS} -Wnon-virtual-dtor")
get_filename_component(ORCT2_ROOT "${CMAKE_SOURCE_DIR}/../../../../../" REALPATH)
file(GLOB_RECURSE LIBOPENRCT2_SOURCES

View File

@ -17,6 +17,11 @@ add_executable(${PROJECT} ${OPENRCT2_CLI_SOURCES})
target_link_libraries(${PROJECT} "libopenrct2")
# Needed for interactive console
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(${PROJECT} Threads::Threads)
if (APPLE)
target_link_libraries(${PROJECT} "-framework Cocoa")
endif ()

View File

@ -36,7 +36,6 @@ int main(int argc, const char * * argv)
// Run OpenRCT2 with a plain context
auto context = CreateContext();
context->RunOpenRCT2(argc, argv);
delete context;
}
return gExitCode;
}

View File

@ -36,7 +36,6 @@
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<ObjectFileName>$(IntDir)\%(RelativeDir)</ObjectFileName>
<AdditionalOptions>$(OPENRCT2_CL_ADDITIONALOPTIONS) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>

View File

@ -62,7 +62,7 @@ static char * * GetCommandLineArgs(int argc, wchar_t * * argvW)
char * * argv = (char * *)malloc(argc * sizeof(char *));
if (argv == nullptr)
{
return false;
return nullptr;
}
// Convert to UTF-8

View File

@ -41,7 +41,6 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<ClCompile>
<ObjectFileName>$(IntDir)\%(RelativeDir)</ObjectFileName>
<AdditionalOptions>$(OPENRCT2_CL_ADDITIONALOPTIONS) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>

View File

@ -8,8 +8,22 @@ endif ()
option(DISABLE_OPENGL "Disable OpenGL support.")
# Third party libraries
PKG_CHECK_MODULES(SDL2 REQUIRED sdl2)
PKG_CHECK_MODULES(SPEEX REQUIRED speexdsp)
if (MSVC)
find_package(jansson REQUIRED)
find_path(SDL2_INCLUDE_DIRS SDL2/SDL.h)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
find_library(SDL2_LDFLAGS sdl2d)
else ()
find_library(SDL2_LDFLAGS sdl2)
endif ()
find_library(SPEEX_LDFLAGS libspeexdsp)
else ()
PKG_CHECK_MODULES(SDL2 REQUIRED sdl2)
PKG_CHECK_MODULES(SPEEX REQUIRED speexdsp)
endif ()
if (NOT DISABLE_OPENGL)
# GL doesn't work nicely with macOS, while find_package doesn't work with multiarch on Ubuntu.
if (APPLE)
@ -21,7 +35,8 @@ endif ()
# Sources
file(GLOB_RECURSE OPENRCT2_UI_SOURCES
"${CMAKE_CURRENT_LIST_DIR}/*.cpp"
"${CMAKE_CURRENT_LIST_DIR}/*.cpp")
file(GLOB_RECURSE OPENRCT2_UI_HEADERS
"${CMAKE_CURRENT_LIST_DIR}/*.h"
"${CMAKE_CURRENT_LIST_DIR}/*.hpp")
@ -56,7 +71,7 @@ endif ()
# Includes
target_include_directories(${PROJECT} PRIVATE "${CMAKE_CURRENT_LIST_DIR}/.."
${SPEEX_INCLUDE_DIRS})
target_include_directories(${PROJECT} SYSTEM PRIVATE ${SDL2_INCLUDE_DIRS})
target_include_directories(${PROJECT} PRIVATE ${SDL2_INCLUDE_DIRS})
# Compiler flags
if (WIN32)
@ -64,6 +79,14 @@ if (WIN32)
# tell it that it is
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__USE_MINGW_ANSI_STDIO=1")
endif ()
if (MSVC)
# Add DPI-aware manifest
# HACK Add /MANIFEST:NO first to prevent cmake from adding its own manifest arguments
if (NOT $ENV{VCToolsInstallDir} STREQUAL "")
set(MANIFEST_DPI "$ENV{VCToolsInstallDir}\\Include\\Manifest\\PerMonitorHighDPIAware.manifest")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO /MANIFEST /manifest:embed /manifestinput:\"${MANIFEST_DPI}\"")
endif ()
endif ()
# Defines
if (DISABLE_OPENGL)
@ -72,3 +95,22 @@ else ()
# Makes OpenGL function get queried in run-time rather than linked-in
add_definitions(-DOPENGL_NO_LINK)
endif ()
if (MSVC)
add_definitions(-D__DISABLE_DLL_PROXY__)
endif ()
# Add headers check to verify all headers carry their dependencies.
# Only valid for Clang for now:
# - GCC 8 does not support -Wno-pragma-once-outside-header
# - Other compilers status unknown
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(OPENRCT2_HEADERS_CHECK ${OPENRCT2_UI_HEADERS})
# OpenGLAPIProc.h is not meant to be included directly.
list(REMOVE_ITEM OPENRCT2_HEADERS_CHECK "${CMAKE_CURRENT_LIST_DIR}/drawing/engines/opengl/OpenGLAPIProc.h")
add_library(${PROJECT}-headers-check OBJECT ${OPENRCT2_HEADERS_CHECK})
set_target_properties(${PROJECT}-headers-check PROPERTIES LINKER_LANGUAGE CXX)
set_source_files_properties(${OPENRCT2_HEADERS_CHECK} PROPERTIES LANGUAGE CXX)
add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable")
get_target_property(OPENRCT2_INCLUDE_DIRS ${PROJECT} INCLUDE_DIRECTORIES)
set_target_properties(${PROJECT}-headers-check PROPERTIES INCLUDE_DIRECTORIES "${OPENRCT2_INCLUDE_DIRS}")
endif ()

View File

@ -17,7 +17,8 @@
#include <openrct2/interface/Cursors.h>
#include "CursorRepository.h"
namespace OpenRCT2 { namespace Ui
// clang-format off
namespace OpenRCT2::Ui
{
static constexpr const CursorData BlankCursorData =
{
@ -664,4 +665,5 @@ namespace OpenRCT2 { namespace Ui
}
return result;
}
} }
}
// clang-format on

View File

@ -14,6 +14,8 @@
*****************************************************************************/
#pragma endregion
#pragma once
#include <map>
#include <functional>
@ -23,59 +25,56 @@
struct SDL_Cursor;
namespace OpenRCT2
namespace OpenRCT2::Ui
{
namespace Ui
class CursorRepository
{
class CursorRepository
private:
class CursorSetHolder
{
private:
class CursorSetHolder
{
private:
SDL_Cursor * _cursors[CURSOR_COUNT] = {nullptr};
public:
CursorSetHolder(const std::function<SDL_Cursor *(CURSOR_ID)> & getCursor)
{
for (size_t i = 0; i < CURSOR_COUNT; i++)
{
_cursors[i] = getCursor(static_cast<CURSOR_ID>(i));
}
}
~CursorSetHolder()
{
for (size_t i = 0; i < CURSOR_COUNT; i++)
{
SDL_FreeCursor(_cursors[i]);
}
}
SDL_Cursor * getScaledCursor(CURSOR_ID cursorId)
{
return _cursors[cursorId];
}
};
constexpr static sint32 BASE_CURSOR_WIDTH = 32;
constexpr static sint32 BASE_CURSOR_HEIGHT = 32;
CURSOR_ID _currentCursor = CURSOR_UNDEFINED;
uint8 _currentCursorScale = 1;
std::map<uint8, CursorSetHolder> _scaledCursors;
SDL_Cursor * _cursors[CURSOR_COUNT] = {nullptr};
public:
~CursorRepository();
void LoadCursors();
CURSOR_ID GetCurrentCursor();
void SetCurrentCursor(CURSOR_ID cursorId);
void SetCursorScale(uint8 cursorScale);
CursorSetHolder(const std::function<SDL_Cursor *(CURSOR_ID)> & getCursor)
{
for (size_t i = 0; i < CURSOR_COUNT; i++)
{
_cursors[i] = getCursor(static_cast<CURSOR_ID>(i));
}
}
private:
SDL_Cursor * Create(const CursorData * cursorInfo, uint8 scale);
void GenerateScaledCursorSetHolder(uint8 scale);
static const CursorData * GetCursorData(CURSOR_ID cursorId);
~CursorSetHolder()
{
for (size_t i = 0; i < CURSOR_COUNT; i++)
{
SDL_FreeCursor(_cursors[i]);
}
}
SDL_Cursor * getScaledCursor(CURSOR_ID cursorId)
{
return _cursors[cursorId];
}
};
}
constexpr static sint32 BASE_CURSOR_WIDTH = 32;
constexpr static sint32 BASE_CURSOR_HEIGHT = 32;
CURSOR_ID _currentCursor = CURSOR_UNDEFINED;
uint8 _currentCursorScale = 1;
std::map<uint8, CursorSetHolder> _scaledCursors;
public:
~CursorRepository();
void LoadCursors();
CURSOR_ID GetCurrentCursor();
void SetCurrentCursor(CURSOR_ID cursorId);
void SetCursorScale(uint8 cursorScale);
private:
SDL_Cursor * Create(const CursorData * cursorInfo, uint8 scale);
void GenerateScaledCursorSetHolder(uint8 scale);
static const CursorData * GetCursorData(CURSOR_ID cursorId);
};
}

View File

@ -21,9 +21,11 @@
#include <openrct2/core/String.hpp>
#include "TextComposition.h"
#include <openrct2/interface/Console.h>
#include <openrct2/interface/InteractiveConsole.h>
#include <openrct2-ui/interface/Window.h>
#include <openrct2/localisation/Localisation.h>
#include "interface/InGameConsole.h"
#include "UiContext.h"
#ifdef __MACOSX__
// macOS uses COMMAND rather than CTRL for many keyboard shortcuts
@ -69,6 +71,8 @@ void TextComposition::Stop()
void TextComposition::HandleMessage(const SDL_Event * e)
{
auto& console = GetInGameConsole();
switch (e->type) {
case SDL_TEXTEDITING:
// When inputting Korean characters, `edit.length` is always zero
@ -84,7 +88,7 @@ void TextComposition::HandleMessage(const SDL_Event * e)
if (_session.Buffer != nullptr)
{
// HACK ` will close console, so don't input any text
if (e->text.text[0] == '`' && gConsoleOpen) {
if (e->text.text[0] == '`' && console.IsOpen()) {
break;
}
@ -93,7 +97,7 @@ void TextComposition::HandleMessage(const SDL_Event * e)
Insert(newText);
Memory::Free(newText);
console_refresh_caret();
console.RefreshCaret();
window_update_textbox();
}
break;
@ -124,7 +128,7 @@ void TextComposition::HandleMessage(const SDL_Event * e)
if (key == SDLK_BACKSPACE && (modifier & KEYBOARD_PRIMARY_MODIFIER))
{
Clear();
console_refresh_caret();
console.RefreshCaret();
window_update_textbox();
}
@ -138,17 +142,17 @@ void TextComposition::HandleMessage(const SDL_Event * e)
_session.SelectionSize = endOffset - _session.SelectionStart;
Delete();
console_refresh_caret();
console.RefreshCaret();
window_update_textbox();
}
break;
case SDLK_HOME:
CursorHome();
console_refresh_caret();
console.RefreshCaret();
break;
case SDLK_END:
CursorEnd();
console_refresh_caret();
console.RefreshCaret();
break;
case SDLK_DELETE:
{
@ -157,7 +161,7 @@ void TextComposition::HandleMessage(const SDL_Event * e)
_session.SelectionSize = _session.SelectionStart - startOffset;
_session.SelectionStart = startOffset;
Delete();
console_refresh_caret();
console.RefreshCaret();
window_update_textbox();
break;
}
@ -166,11 +170,11 @@ void TextComposition::HandleMessage(const SDL_Event * e)
break;
case SDLK_LEFT:
CursorLeft();
console_refresh_caret();
console.RefreshCaret();
break;
case SDLK_RIGHT:
CursorRight();
console_refresh_caret();
console.RefreshCaret();
break;
case SDLK_v:
if ((modifier & KEYBOARD_PRIMARY_MODIFIER) && SDL_HasClipboardText())

View File

@ -14,45 +14,44 @@
*****************************************************************************/
#pragma endregion
#pragma once
#include <openrct2/common.h>
#include <openrct2/Context.h>
#include <openrct2/ui/UiContext.h>
union SDL_Event;
namespace OpenRCT2
namespace OpenRCT2::Ui
{
namespace Ui
/**
* Represents a
*/
class TextComposition
{
/**
* Represents a
*/
class TextComposition
{
private:
TextInputSession _session = { 0 };
private:
TextInputSession _session = {};
bool _imeActive = false;
sint32 _imeStart = 0;
sint32 _imeLength = 0;
utf8 _imeBuffer[32] = { 0 };
bool _imeActive = false;
sint32 _imeStart = 0;
sint32 _imeLength = 0;
utf8 _imeBuffer[32] = {};
public:
bool IsActive();
TextInputSession * Start(utf8 * buffer, size_t bufferSize);
void Stop();
void HandleMessage(const SDL_Event * e);
public:
bool IsActive();
TextInputSession * Start(utf8 * buffer, size_t bufferSize);
void Stop();
void HandleMessage(const SDL_Event * e);
private:
void CursorHome();
void CursorEnd();
void CursorLeft();
void CursorRight();
void Insert(const utf8 * text);
void InsertCodepoint(codepoint_t codepoint);
void Clear();
void Delete();
void RecalculateLength();
};
}
private:
void CursorHome();
void CursorEnd();
void CursorLeft();
void CursorRight();
void Insert(const utf8 * text);
void InsertCodepoint(codepoint_t codepoint);
void Clear();
void Delete();
void RecalculateLength();
};
}

View File

@ -20,6 +20,7 @@
#include <openrct2/PlatformEnvironment.h>
#include <openrct2/ui/UiContext.h>
#include "audio/AudioContext.h"
#include "drawing/BitmapReader.h"
#include "Ui.h"
#include "UiContext.h"
@ -29,10 +30,16 @@ using namespace OpenRCT2;
using namespace OpenRCT2::Audio;
using namespace OpenRCT2::Ui;
template<typename T>
static std::shared_ptr<T> to_shared(std::unique_ptr<T>&& src)
{
return std::shared_ptr<T>(std::move(src));
}
/**
* Main entry point for non-Windows systems. Windows instead uses its own DLL proxy.
*/
#ifdef _MSC_VER
#if defined(_MSC_VER) && !defined(__DISABLE_DLL_PROXY__)
int NormalisedMain(int argc, const char * * argv)
#else
int main(int argc, const char * * argv)
@ -40,6 +47,7 @@ int main(int argc, const char * * argv)
{
int runGame = cmdline_run(argv, argc);
core_init();
RegisterBitmapReader();
if (runGame == 1)
{
if (gOpenRCT2Headless)
@ -47,21 +55,16 @@ int main(int argc, const char * * argv)
// Run OpenRCT2 with a plain context
auto context = CreateContext();
context->RunOpenRCT2(argc, argv);
delete context;
}
else
{
// Run OpenRCT2 with a UI context
auto env = CreatePlatformEnvironment();
auto audioContext = CreateAudioContext();
auto uiContext = CreateUiContext(env);
auto env = to_shared(CreatePlatformEnvironment());
auto audioContext = to_shared(CreateAudioContext());
auto uiContext = to_shared(CreateUiContext(env));
auto context = CreateContext(env, audioContext, uiContext);
context->RunOpenRCT2(argc, argv);
delete context;
delete uiContext;
delete audioContext;
}
}
return gExitCode;

View File

@ -26,54 +26,54 @@
#include <SDL.h>
namespace OpenRCT2 { namespace Ui
namespace OpenRCT2::Ui
{
class AndroidContext final : public IPlatformUiContext
{
private:
class AndroidContext final : public IPlatformUiContext
public:
AndroidContext()
{
private:
public:
AndroidContext()
{
}
void SetWindowIcon(SDL_Window * window) override
{
}
bool IsSteamOverlayAttached() override
{
return false;
}
void ShowMessageBox(SDL_Window * window, const std::string &message) override
{
log_verbose(message.c_str());
STUB();
}
std::string ShowFileDialog(SDL_Window * window, const FileDialogDesc &desc) override
{
STUB();
return nullptr;
}
std::string ShowDirectoryDialog(SDL_Window * window, const std::string &title) override
{
log_info(title.c_str());
STUB();
return "/sdcard/rct2";
}
};
IPlatformUiContext * CreatePlatformUiContext()
{
return new AndroidContext();
}
} }
void SetWindowIcon(SDL_Window * window) override
{
}
bool IsSteamOverlayAttached() override
{
return false;
}
void ShowMessageBox(SDL_Window * window, const std::string &message) override
{
log_verbose(message.c_str());
STUB();
}
std::string ShowFileDialog(SDL_Window * window, const FileDialogDesc &desc) override
{
STUB();
return nullptr;
}
std::string ShowDirectoryDialog(SDL_Window * window, const std::string &title) override
{
log_info(title.c_str());
STUB();
return "/sdcard/rct2";
}
};
IPlatformUiContext * CreatePlatformUiContext()
{
return new AndroidContext();
}
}
#endif // __ANDROID__

View File

@ -20,6 +20,7 @@
#include <sstream>
#include <stdexcept>
#include <openrct2/common.h>
#include <openrct2/core/Path.hpp>
#include <openrct2/core/String.hpp>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/ui/UiContext.h>
@ -28,7 +29,7 @@
#include <SDL.h>
namespace OpenRCT2 { namespace Ui
namespace OpenRCT2::Ui
{
enum class DIALOG_TYPE
{
@ -169,13 +170,13 @@ namespace OpenRCT2 { namespace Ui
// array must be carefully populated, at least the first element.
std::string pattern = desc.Filters[0].Pattern;
std::string defaultExtension = pattern.substr(pattern.find_last_of('.'));
int dotPosition = output.size() - defaultExtension.size();
// Add the default extension if no extension is specified
if (output.substr(dotPosition, defaultExtension.size()).compare(defaultExtension) == 0)
{
result = output;
}
else
const utf8 * filename = Path::GetFileName(output.c_str());
// If there is no extension, append the pattern
const utf8 * extension = Path::GetExtension(filename);
result = output;
if (extension[0] == '\0' && !defaultExtension.empty())
{
result = output.append(defaultExtension);
}
@ -373,7 +374,7 @@ namespace OpenRCT2 { namespace Ui
static void ThrowMissingDialogApp()
{
IUiContext * uiContext = GetContext()->GetUiContext();
auto uiContext = GetContext()->GetUiContext();
std::string dialogMissingWarning = language_get_string(STR_MISSING_DIALOG_APPLICATION_ERROR);
uiContext->ShowMessageBox(dialogMissingWarning);
throw std::runtime_error(dialogMissingWarning);
@ -384,6 +385,6 @@ namespace OpenRCT2 { namespace Ui
{
return new LinuxContext();
}
} }
} // namespace OpenRCT2::Ui
#endif // __linux__ || __OpenBSD__

View File

@ -54,7 +54,7 @@ static std::wstring SHGetPathFromIDListLongPath(LPCITEMIDLIST pidl)
return pszPath;
}
namespace OpenRCT2 { namespace Ui
namespace OpenRCT2::Ui
{
class Win32Context : public IPlatformUiContext
{
@ -105,7 +105,7 @@ namespace OpenRCT2 { namespace Ui
std::wstring wcFilters = GetFilterString(desc.Filters);
// Set open file name options
OPENFILENAMEW openFileName = { 0 };
OPENFILENAMEW openFileName = {};
openFileName.lStructSize = sizeof(OPENFILENAMEW);
openFileName.hwndOwner = GetHWND(window);
openFileName.lpstrTitle = wcTitle.c_str();
@ -163,7 +163,7 @@ namespace OpenRCT2 { namespace Ui
SUCCEEDED(SHGetMalloc(&lpMalloc)))
{
std::wstring titleW = String::ToUtf16(title);
BROWSEINFOW bi = { 0 };
BROWSEINFOW bi = {};
bi.lpszTitle = titleW.c_str();
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_NONEWFOLDERBUTTON;
@ -224,6 +224,6 @@ namespace OpenRCT2 { namespace Ui
{
return new Win32Context();
}
} }
} // namespace OpenRCT2::Ui
#endif // _WIN32

View File

@ -27,13 +27,14 @@
#include <openrct2/core/Math.hpp>
#include <openrct2/core/String.hpp>
#include <openrct2/drawing/IDrawingEngine.h>
#include <openrct2/drawing/Drawing.h>
#include <openrct2/localisation/StringIds.h>
#include <openrct2/platform/Platform2.h>
#include <openrct2/ui/UiContext.h>
#include <openrct2/ui/WindowManager.h>
#include <openrct2/Version.h>
#include "CursorRepository.h"
#include "drawing/engines/DrawingEngines.h"
#include "drawing/engines/DrawingEngineFactory.hpp"
#include "input/KeyboardShortcuts.h"
#include "SDLException.h"
#include "TextComposition.h"
@ -41,9 +42,11 @@
#include "WindowManager.h"
#include <openrct2/Input.h>
#include <openrct2/interface/Console.h>
#include <openrct2/interface/InteractiveConsole.h>
#include <openrct2-ui/interface/Window.h>
#include "interface/InGameConsole.h"
using namespace OpenRCT2;
using namespace OpenRCT2::Drawing;
using namespace OpenRCT2::Input;
@ -79,15 +82,19 @@ private:
// Input
KeyboardShortcuts _keyboardShortcuts;
TextComposition _textComposition;
CursorState _cursorState = { 0 };
CursorState _cursorState = {};
uint32 _lastKeyPressed = 0;
const uint8 * _keysState = nullptr;
uint8 _keysPressed[256] = { 0 };
uint8 _keysPressed[256] = {};
uint32 _lastGestureTimestamp = 0;
float _gestureRadius = 0;
InGameConsole _inGameConsole;
public:
explicit UiContext(IPlatformEnvironment * env)
InGameConsole& GetInGameConsole() { return _inGameConsole; }
explicit UiContext(const std::shared_ptr<IPlatformEnvironment>& env)
: _platformUiContext(CreatePlatformUiContext()),
_windowManager(CreateWindowManager()),
_keyboardShortcuts(env)
@ -109,6 +116,16 @@ public:
delete _platformUiContext;
}
void Update() override
{
_inGameConsole.Update();
}
void Draw(rct_drawpixelinfo * dpi) override
{
_inGameConsole.Draw(dpi);
}
// Window
void * GetWindow() override
{
@ -244,20 +261,9 @@ public:
}
// Drawing
IDrawingEngine * CreateDrawingEngine(DRAWING_ENGINE_TYPE type) override
std::shared_ptr<Drawing::IDrawingEngineFactory> GetDrawingEngineFactory() override
{
switch ((sint32)type) {
case DRAWING_ENGINE_SOFTWARE:
return CreateSoftwareDrawingEngine(this);
case DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY:
return CreateHardwareDisplayDrawingEngine(this);
#ifndef DISABLE_OPENGL
case DRAWING_ENGINE_OPENGL:
return CreateOpenGLDrawingEngine(this);
#endif
default:
return nullptr;
}
return std::make_shared<DrawingEngineFactory>();
}
// Text input
@ -349,9 +355,9 @@ public:
_cursorState.y = (sint32)(e.motion.y / gConfigGeneral.window_scale);
break;
case SDL_MOUSEWHEEL:
if (gConsoleOpen)
if (_inGameConsole.IsOpen())
{
console_scroll(e.wheel.y * 3); // Scroll 3 lines at a time
_inGameConsole.Scroll(e.wheel.y * 3); // Scroll 3 lines at a time
break;
}
_cursorState.wheel -= e.wheel.y;
@ -533,8 +539,11 @@ public:
void CloseWindow() override
{
drawing_engine_dispose();
SDL_DestroyWindow(_window);
_window = nullptr;
if (_window != nullptr)
{
SDL_DestroyWindow(_window);
_window = nullptr;
}
}
void RecreateWindow() override
@ -568,69 +577,6 @@ public:
return _windowManager;
}
bool ReadBMP(void * * outPixels, uint32 * outWidth, uint32 * outHeight, const std::string &path) override
{
auto bitmap = SDL_LoadBMP(path.c_str());
if (bitmap != nullptr)
{
sint32 numChannels = bitmap->format->BytesPerPixel;
if (numChannels < 3 || bitmap->format->BitsPerPixel < 24)
{
context_show_error(STR_HEIGHT_MAP_ERROR, STR_ERROR_24_BIT_BITMAP);
SDL_FreeSurface(bitmap);
return false;
}
// Copy pixels over, then discard the surface
*outPixels = nullptr;
*outWidth = bitmap->w;
*outHeight = bitmap->h;
if (SDL_LockSurface(bitmap) == 0)
{
*outPixels = malloc(bitmap->w * bitmap->h * 4);
memset(*outPixels, 0xFF, bitmap->w * bitmap->h);
auto src = (const uint8 *)bitmap->pixels;
auto dst = (uint8 *)*outPixels;
if (numChannels == 4)
{
for (sint32 y = 0; y < bitmap->h; y++)
{
memcpy(dst, src, bitmap->w);
src += bitmap->pitch;
dst += bitmap->w;
}
}
else
{
for (sint32 y = 0; y < bitmap->h; y++)
{
for (sint32 x = 0; x < bitmap->w; x++)
{
memcpy(dst, src, 3);
src += 3;
dst += 4;
}
src += bitmap->pitch - (bitmap->w * 3);
}
}
SDL_UnlockSurface(bitmap);
}
else
{
return false;
}
SDL_FreeSurface(bitmap);
return true;
}
else
{
log_warning("Failed to load bitmap: %s", SDL_GetError());
context_show_error(STR_HEIGHT_MAP_ERROR, STR_ERROR_READING_BITMAP);
return false;
}
}
bool SetClipboardText(const utf8* target) override
{
return (SDL_SetClipboardText(target) == 0);
@ -794,7 +740,13 @@ private:
}
};
IUiContext * OpenRCT2::Ui::CreateUiContext(IPlatformEnvironment * env)
std::unique_ptr<IUiContext> OpenRCT2::Ui::CreateUiContext(const std::shared_ptr<IPlatformEnvironment>& env)
{
return new UiContext(env);
return std::make_unique<UiContext>(env);
}
InGameConsole& OpenRCT2::Ui::GetInGameConsole()
{
auto uiContext = std::static_pointer_cast<UiContext>(GetContext()->GetUiContext());
return uiContext->GetInGameConsole();
}

View File

@ -16,6 +16,7 @@
#pragma once
#include <memory>
#include <string>
#include <openrct2/common.h>
@ -29,6 +30,7 @@ namespace OpenRCT2
namespace Ui
{
struct FileDialogDesc;
class InGameConsole;
interface IUiContext;
interface IPlatformUiContext
@ -42,7 +44,9 @@ namespace OpenRCT2
virtual std::string ShowDirectoryDialog(SDL_Window * window, const std::string &title) abstract;
};
IUiContext * CreateUiContext(IPlatformEnvironment * env);
std::unique_ptr<IUiContext> CreateUiContext(const std::shared_ptr<IPlatformEnvironment>& env);
IPlatformUiContext * CreatePlatformUiContext();
}
}
InGameConsole& GetInGameConsole();
} // namespace Ui
} // namespace OpenRCT2

View File

@ -27,7 +27,7 @@
#include <SDL.h>
namespace OpenRCT2 { namespace Ui
namespace OpenRCT2::Ui
{
class macOSContext final : public IPlatformUiContext
{
@ -182,6 +182,6 @@ namespace OpenRCT2 { namespace Ui
{
return new macOSContext();
}
} }
} // namespace OpenRCT2::Ui
#endif // __APPLE__ && __MACH__

View File

@ -179,6 +179,8 @@ public:
return window_banner_open(id);
case WD_DEMOLISH_RIDE:
return window_ride_demolish_prompt_open(id);
case WD_REFURBISH_RIDE:
return window_ride_refurbish_prompt_open(id);
case WD_NEW_CAMPAIGN:
return window_new_campaign_open(id);
case WD_SIGN:
@ -343,20 +345,6 @@ public:
window_tile_inspector_clear_clipboard();
break;
case INTENT_ACTION_SET_TILE_INSPECTOR_PAGE:
{
auto window = window_find_by_class(WC_TILE_INSPECTOR);
window_tile_inspector_set_page(window, static_cast<TILE_INSPECTOR_PAGE>(intent.GetUIntExtra(INTENT_EXTRA_PAGE)));
break;
}
case INTENT_ACTION_SET_TILE_INSPECTOR_BUTTONS:
{
auto window = window_find_by_class(WC_TILE_INSPECTOR);
window_tile_inspector_auto_set_buttons(window);
break;
}
case INTENT_ACTION_INVALIDATE_VEHICLE_WINDOW:
{
rct_vehicle * vehicle = static_cast<rct_vehicle *>(intent.GetPointerExtra(INTENT_EXTRA_VEHICLE));
@ -410,7 +398,10 @@ public:
}
break;
}
case INTENT_ACTION_UPDATE_RESEARCH:
window_invalidate_by_class(WC_FINANCES);
window_invalidate_by_class(WC_RESEARCH);
break;
}
}

View File

@ -14,12 +14,11 @@
*****************************************************************************/
#pragma endregion
#include <string>
#include <openrct2/common.h>
namespace OpenRCT2 { namespace Ui
namespace OpenRCT2::Ui
{
interface IWindowManager;
IWindowManager * CreateWindowManager();
} }
}

View File

@ -24,7 +24,7 @@
#include "AudioContext.h"
#include "AudioFormat.h"
namespace OpenRCT2 { namespace Audio
namespace OpenRCT2::Audio
{
class AudioChannelImpl : public ISDLAudioChannel
{
@ -247,7 +247,7 @@ namespace OpenRCT2 { namespace Audio
AudioFormat GetFormat() const override
{
AudioFormat result = { 0 };
AudioFormat result = {};
// The second check is there because NullAudioSource does not implement GetFormat. Avoid calling it.
if (_source != nullptr && _source->GetLength() > 0)
{
@ -295,4 +295,4 @@ namespace OpenRCT2 { namespace Audio
{
return new (std::nothrow) AudioChannelImpl();
}
} }
} // namespace OpenRCT2::Audio

View File

@ -21,7 +21,7 @@
#include "../SDLException.h"
#include "AudioContext.h"
namespace OpenRCT2 { namespace Audio
namespace OpenRCT2::Audio
{
class AudioContext : public IAudioContext
{
@ -94,8 +94,8 @@ namespace OpenRCT2 { namespace Audio
void StopVehicleSounds() override { }
};
IAudioContext * CreateAudioContext()
std::unique_ptr<IAudioContext> CreateAudioContext()
{
return new AudioContext();
return std::make_unique<AudioContext>();
}
} }
} // namespace OpenRCT2::Audio

View File

@ -1,6 +1,7 @@
#pragma once
#include <memory>
#include <string>
#include <openrct2/common.h>
#include <openrct2/audio/AudioChannel.h>
@ -9,7 +10,7 @@
struct SDL_RWops;
using SpeexResamplerState = struct SpeexResamplerState_;
namespace OpenRCT2 { namespace Audio
namespace OpenRCT2::Audio
{
struct AudioFormat;
interface IAudioContext;
@ -69,5 +70,6 @@ namespace OpenRCT2 { namespace Audio
IAudioMixer * Create();
}
IAudioContext * CreateAudioContext();
} }
std::unique_ptr<IAudioContext> CreateAudioContext();
} // namespace OpenRCT2::Audio

View File

@ -19,7 +19,7 @@
#include <openrct2/common.h>
#include <SDL2/SDL.h>
namespace OpenRCT2 { namespace Audio
namespace OpenRCT2::Audio
{
/**
* Represents the size, frequency and number of channels for
@ -53,4 +53,4 @@ namespace OpenRCT2 { namespace Audio
{
return !(lhs == rhs);
}
} }
} // namespace OpenRCT2::Audio

View File

@ -36,7 +36,7 @@
#include <openrct2/OpenRCT2.h>
#include <openrct2/platform/platform.h>
namespace OpenRCT2 { namespace Audio
namespace OpenRCT2::Audio
{
class AudioMixerImpl final : public IAudioMixer
{
@ -44,7 +44,7 @@ namespace OpenRCT2 { namespace Audio
IAudioSource * _nullSource = nullptr;
SDL_AudioDeviceID _deviceId = 0;
AudioFormat _format = { 0 };
AudioFormat _format = {};
std::list<ISDLAudioChannel *> _channels;
float _volume = 1.0f;
float _adjustSoundVolume = 0.0f;
@ -75,7 +75,7 @@ namespace OpenRCT2 { namespace Audio
{
Close();
SDL_AudioSpec want = { 0 };
SDL_AudioSpec want = {};
want.freq = 22050;
want.format = AUDIO_S16SYS;
want.channels = 2;
@ -513,4 +513,4 @@ namespace OpenRCT2 { namespace Audio
{
return new AudioMixerImpl();
}
} }
} // namespace OpenRCT2::Audio

View File

@ -21,7 +21,7 @@
#include "AudioContext.h"
#include "AudioFormat.h"
namespace OpenRCT2 { namespace Audio
namespace OpenRCT2::Audio
{
/**
* An audio source where raw PCM data is streamed directly from
@ -30,7 +30,7 @@ namespace OpenRCT2 { namespace Audio
class FileAudioSource final : public ISDLAudioSource
{
private:
AudioFormat _format = { 0 };
AudioFormat _format = {};
SDL_RWops * _rw = nullptr;
uint64 _dataBegin = 0;
uint64 _dataLength = 0;
@ -132,7 +132,6 @@ namespace OpenRCT2 { namespace Audio
default:
log_verbose("Invalid bits per sample");
return false;
break;
}
_format.channels = waveFormat.channels;
@ -207,4 +206,4 @@ namespace OpenRCT2 { namespace Audio
}
return source;
}
} }
} // namespace OpenRCT2::Audio

View File

@ -24,7 +24,7 @@
#include "AudioContext.h"
#include "AudioFormat.h"
namespace OpenRCT2 { namespace Audio
namespace OpenRCT2::Audio
{
/**
* An audio source where raw PCM data is initially loaded into RAM from
@ -33,7 +33,7 @@ namespace OpenRCT2 { namespace Audio
class MemoryAudioSource final : public ISDLAudioSource
{
private:
AudioFormat _format = { 0 };
AudioFormat _format = {};
std::vector<uint8> _data;
uint8 * _dataSDL = nullptr;
size_t _length = 0;
@ -85,7 +85,7 @@ namespace OpenRCT2 { namespace Audio
SDL_RWops * rw = SDL_RWFromFile(path, "rb");
if (rw != nullptr)
{
SDL_AudioSpec audiospec = { 0 };
SDL_AudioSpec audiospec = {};
uint32 audioLen;
SDL_AudioSpec * spec = SDL_LoadWAV_RW(rw, false, &audiospec, &_dataSDL, &audioLen);
if (spec != nullptr)
@ -243,4 +243,4 @@ namespace OpenRCT2 { namespace Audio
}
return source;
}
} }
} // namespace OpenRCT2::Audio

View File

@ -0,0 +1,112 @@
#pragma region Copyright (c) 2018 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 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.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include <algorithm>
#include <stdexcept>
#include <cstring>
#include <SDL2/SDL.h>
#include <openrct2/core/Imaging.h>
#include "BitmapReader.h"
static std::vector<uint8> ReadToVector(std::istream &stream)
{
std::vector<uint8> result;
if (!stream.eof() && !stream.fail())
{
stream.seekg(0, std::ios_base::end);
auto size = stream.tellg();
result.resize(size);
stream.seekg(0, std::ios_base::beg);
stream.read((char *)result.data(), size);
}
return result;
}
// TODO Bitmaps aren't very complicated to read so we should probably just write our
// own implementation in libopenrct2 and spare the AOT implementation registration.
static Image ReadBitmap(std::istream &istream, IMAGE_FORMAT format)
{
auto buffer = ReadToVector(istream);
auto sdlStream = SDL_RWFromConstMem(buffer.data(), (int)buffer.size());
auto bitmap = SDL_LoadBMP_RW(sdlStream, 1);
if (bitmap != nullptr)
{
auto numChannels = bitmap->format->BytesPerPixel;
if (numChannels < 3 || bitmap->format->BitsPerPixel < 24)
{
SDL_FreeSurface(bitmap);
throw std::runtime_error("Only 24-bit bitmaps are supported.");
}
// Copy pixels over, then discard the surface
if (SDL_LockSurface(bitmap) == 0)
{
Image image;
image.Width = bitmap->w;
image.Height = bitmap->h;
image.Depth = 32;
image.Pixels.resize(bitmap->w * bitmap->h * 4);
image.Stride = bitmap->w * 4;
// Clear image with 0xFF
std::fill(image.Pixels.begin(), image.Pixels.end(), 0xFF);
// Copy pixels over
auto src = (const uint8 *)bitmap->pixels;
auto dst = image.Pixels.data();
if (numChannels == 4)
{
for (sint32 y = 0; y < bitmap->h; y++)
{
std::memcpy(dst, src, bitmap->w);
src += bitmap->pitch;
dst += bitmap->w;
}
}
else
{
for (sint32 y = 0; y < bitmap->h; y++)
{
for (sint32 x = 0; x < bitmap->w; x++)
{
std::memcpy(dst, src, 3);
src += 3;
dst += 4;
}
src += bitmap->pitch - (bitmap->w * 3);
}
}
SDL_UnlockSurface(bitmap);
SDL_FreeSurface(bitmap);
return image;
}
else
{
SDL_FreeSurface(bitmap);
throw std::runtime_error("Unable to lock surface.");
}
}
else
{
throw std::runtime_error(SDL_GetError());
}
}
void RegisterBitmapReader()
{
Imaging::SetReader(IMAGE_FORMAT::BITMAP, ReadBitmap);
}

View File

@ -0,0 +1,17 @@
#pragma region Copyright (c) 2018 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 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.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
void RegisterBitmapReader();

View File

@ -0,0 +1,57 @@
#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 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.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#pragma once
#include <memory>
#include <openrct2/common.h>
#include <openrct2/drawing/IDrawingEngine.h>
namespace OpenRCT2
{
namespace Ui
{
using namespace OpenRCT2::Drawing;
interface IUiContext;
std::unique_ptr<IDrawingEngine> CreateSoftwareDrawingEngine(const std::shared_ptr<IUiContext>& uiContext);
std::unique_ptr<IDrawingEngine> CreateHardwareDisplayDrawingEngine(const std::shared_ptr<IUiContext>& uiContext);
#ifndef DISABLE_OPENGL
std::unique_ptr<IDrawingEngine> CreateOpenGLDrawingEngine(const std::shared_ptr<IUiContext>& uiContext);
#endif
class DrawingEngineFactory final : public IDrawingEngineFactory
{
public:
std::unique_ptr<IDrawingEngine> Create(DRAWING_ENGINE_TYPE type, const std::shared_ptr<IUiContext>& uiContext) override
{
switch ((sint32)type) {
case DRAWING_ENGINE_SOFTWARE:
return CreateSoftwareDrawingEngine(uiContext);
case DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY:
return CreateHardwareDisplayDrawingEngine(uiContext);
#ifndef DISABLE_OPENGL
case DRAWING_ENGINE_OPENGL:
return CreateOpenGLDrawingEngine(uiContext);
#endif
default:
return nullptr;
}
}
};
}
}

View File

@ -22,7 +22,7 @@
#include <openrct2/drawing/IDrawingEngine.h>
#include <openrct2/drawing/X8DrawingEngine.h>
#include <openrct2/ui/UiContext.h>
#include "DrawingEngines.h"
#include "DrawingEngineFactory.hpp"
#include <openrct2/drawing/LightFX.h>
#include <openrct2/Game.h>
@ -37,7 +37,7 @@ class HardwareDisplayDrawingEngine final : public X8DrawingEngine
private:
constexpr static uint32 DIRTY_VISUAL_TIME = 32;
IUiContext * const _uiContext;
std::shared_ptr<IUiContext> const _uiContext;
SDL_Window * _window = nullptr;
SDL_Renderer * _sdlRenderer = nullptr;
SDL_Texture * _screenTexture = nullptr;
@ -60,7 +60,7 @@ private:
bool smoothNN = false;
public:
explicit HardwareDisplayDrawingEngine(IUiContext * uiContext)
explicit HardwareDisplayDrawingEngine(const std::shared_ptr<IUiContext>& uiContext)
: X8DrawingEngine(uiContext),
_uiContext(uiContext)
{
@ -415,7 +415,7 @@ private:
}
};
IDrawingEngine * OpenRCT2::Ui::CreateHardwareDisplayDrawingEngine(IUiContext * uiContext)
std::unique_ptr<IDrawingEngine> OpenRCT2::Ui::CreateHardwareDisplayDrawingEngine(const std::shared_ptr<IUiContext>& uiContext)
{
return new HardwareDisplayDrawingEngine(uiContext);
return std::make_unique<HardwareDisplayDrawingEngine>(uiContext);
}

View File

@ -23,7 +23,7 @@
#include <openrct2/drawing/X8DrawingEngine.h>
#include <openrct2/Game.h>
#include <openrct2/ui/UiContext.h>
#include "DrawingEngines.h"
#include "DrawingEngineFactory.hpp"
using namespace OpenRCT2;
using namespace OpenRCT2::Drawing;
@ -32,14 +32,14 @@ using namespace OpenRCT2::Ui;
class SoftwareDrawingEngine final : public X8DrawingEngine
{
private:
IUiContext * const _uiContext;
std::shared_ptr<IUiContext> const _uiContext;
SDL_Window * _window = nullptr;
SDL_Surface * _surface = nullptr;
SDL_Surface * _RGBASurface = nullptr;
SDL_Palette * _palette = nullptr;
public:
explicit SoftwareDrawingEngine(IUiContext * uiContext)
explicit SoftwareDrawingEngine(const std::shared_ptr<IUiContext>& uiContext)
: X8DrawingEngine(uiContext),
_uiContext(uiContext)
{
@ -163,7 +163,7 @@ private:
}
};
IDrawingEngine * OpenRCT2::Ui::CreateSoftwareDrawingEngine(IUiContext * uiContext)
std::unique_ptr<IDrawingEngine> OpenRCT2::Ui::CreateSoftwareDrawingEngine(const std::shared_ptr<IUiContext>& uiContext)
{
return new SoftwareDrawingEngine(uiContext);
return std::make_unique<SoftwareDrawingEngine>(uiContext);
}

View File

@ -18,7 +18,7 @@
#include <openrct2/common.h>
#if OPENGL_NO_LINK
#ifdef OPENGL_NO_LINK
// BEGIN [Do not define 1.1 function signatures]
#define glActiveTexture __static__glActiveTexture
@ -50,7 +50,7 @@
#include <SDL2/SDL_opengl.h>
#if OPENGL_NO_LINK
#ifdef OPENGL_NO_LINK
// END [Do not define 1.1 function signatures]
#undef glActiveTexture

View File

@ -31,7 +31,7 @@
#include <openrct2/Intro.h>
#include <openrct2-ui/interface/Window.h>
#include <openrct2/ui/UiContext.h>
#include "../DrawingEngines.h"
#include "../DrawingEngineFactory.hpp"
#include "ApplyPaletteShader.h"
#include "DrawCommands.h"
#include "DrawLineShader.h"
@ -121,7 +121,7 @@ public:
class OpenGLDrawingEngine : public IDrawingEngine
{
private:
IUiContext * const _uiContext = nullptr;
std::shared_ptr<IUiContext> const _uiContext;
SDL_Window * _window = nullptr;
SDL_GLContext _context = nullptr;
@ -131,7 +131,7 @@ private:
size_t _bitsSize = 0;
uint8 * _bits = nullptr;
rct_drawpixelinfo _bitsDPI = { nullptr };
rct_drawpixelinfo _bitsDPI = {};
OpenGLDrawingContext * _drawingContext;
@ -144,7 +144,7 @@ public:
SDL_Color Palette[256];
vec4 GLPalette[256];
explicit OpenGLDrawingEngine(IUiContext * uiContext)
explicit OpenGLDrawingEngine(const std::shared_ptr<IUiContext>& uiContext)
: _uiContext(uiContext)
{
_window = (SDL_Window *)_uiContext->GetWindow();
@ -419,9 +419,9 @@ private:
}
};
IDrawingEngine * OpenRCT2::Ui::CreateOpenGLDrawingEngine(IUiContext * uiContext)
std::unique_ptr<IDrawingEngine> OpenRCT2::Ui::CreateOpenGLDrawingEngine(const std::shared_ptr<IUiContext>& uiContext)
{
return new OpenGLDrawingEngine(uiContext);
return std::make_unique<OpenGLDrawingEngine>(uiContext);
}
OpenGLDrawingContext::OpenGLDrawingContext(OpenGLDrawingEngine * engine)

View File

@ -17,11 +17,9 @@
#pragma once
#include <openrct2/common.h>
#include "OpenGLAPI.h"
#include "ApplyTransparencyShader.h"
class CopyFramebufferShader;
class OpenGLFramebuffer;
#include "OpenGLAPI.h"
#include "OpenGLFramebuffer.h"
/**
* Class to maintain two different framebuffers where the active framebuffer

View File

@ -22,12 +22,16 @@
#include <openrct2/config/Config.h>
#include <openrct2/Input.h>
#include <openrct2/interface/Chat.h>
#include <openrct2/interface/Console.h>
#include <openrct2/interface/InteractiveConsole.h>
#include <openrct2/paint/VirtualFloor.h>
#include <openrct2-ui/windows/Window.h>
#include "../interface/InGameConsole.h"
#include "../UiContext.h"
#include "KeyboardShortcuts.h"
#include "Input.h"
using namespace OpenRCT2::Ui;
static void input_handle_console(sint32 key)
{
CONSOLE_INPUT input = CONSOLE_INPUT_NONE;
@ -54,7 +58,8 @@ static void input_handle_console(sint32 key)
}
if (input != CONSOLE_INPUT_NONE)
{
console_input(input);
auto& console = GetInGameConsole();
console.Input(input);
}
}
@ -129,7 +134,8 @@ void input_handle_keyboard(bool isTitle)
return;
}
if (!gConsoleOpen)
auto& console = GetInGameConsole();
if (!console.IsOpen())
{
if (!isTitle)
{
@ -170,7 +176,7 @@ void input_handle_keyboard(bool isTitle)
}
}
if (gConfigGeneral.use_virtual_floor)
if (gConfigGeneral.virtual_floor_style != VIRTUAL_FLOOR_STYLE_OFF)
{
if (gInputPlaceObjectModifier & (PLACE_OBJECT_MODIFIER_COPY_Z | PLACE_OBJECT_MODIFIER_SHIFT_Z))
virtual_floor_enable();
@ -188,14 +194,14 @@ void input_handle_keyboard(bool isTitle)
// Reserve backtick for console
if (key == SDL_SCANCODE_GRAVE)
{
if ((gConfigGeneral.debugging_tools && !context_is_input_active()) || gConsoleOpen)
if ((gConfigGeneral.debugging_tools && !context_is_input_active()) || console.IsOpen())
{
window_cancel_textbox();
console_toggle();
console.Toggle();
}
continue;
}
else if (gConsoleOpen)
else if (console.IsOpen())
{
input_handle_console(key);
continue;

View File

@ -32,9 +32,11 @@
#include <openrct2/platform/platform.h>
#include <openrct2/ride/Track.h>
#include <openrct2/ride/TrackPaint.h>
#include <openrct2/scenario/Scenario.h>
#include <openrct2/title/TitleScreen.h>
#include <openrct2/util/Util.h>
#include <openrct2/windows/Intent.h>
#include <openrct2/world/Park.h>
#include "KeyboardShortcuts.h"
uint8 gKeyboardShortcutChangeId;
@ -744,6 +746,22 @@ static void shortcut_load_game()
}
}
static void shortcut_view_clipping()
{
if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO)
return;
context_open_window(WC_VIEW_CLIPPING);
}
static void shortcut_highlight_path_issues_toggle()
{
if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO)
return;
toggle_view_flag(VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES);
}
namespace
{
const shortcut_action shortcut_table[SHORTCUT_COUNT] =
@ -815,7 +833,9 @@ namespace
shortcut_load_game,
shortcut_clear_scenery,
shortcut_gridlines_toggle,
shortcut_view_clipping,
shortcut_highlight_path_issues_toggle,
};
}
} // anonymous namespace
#pragma endregion

View File

@ -32,12 +32,17 @@ using namespace OpenRCT2::Input;
// Remove when the C calls are removed
static KeyboardShortcuts * _instance;
KeyboardShortcuts::KeyboardShortcuts(IPlatformEnvironment * env)
KeyboardShortcuts::KeyboardShortcuts(const std::shared_ptr<IPlatformEnvironment>& env)
: _env(env)
{
_instance = this;
}
KeyboardShortcuts::~KeyboardShortcuts()
{
_instance = nullptr;
}
void KeyboardShortcuts::Reset()
{
for (size_t i = 0; i < SHORTCUT_COUNT; i++)
@ -305,4 +310,6 @@ const uint16 KeyboardShortcuts::DefaultKeys[SHORTCUT_COUNT] =
PLATFORM_MODIFIER | SDL_SCANCODE_L, // SHORTCUT_LOAD_GAME
SDL_SCANCODE_B, // SHORTCUT_CLEAR_SCENERY
SDL_SCANCODE_7, // SHORTCUT_GRIDLINES_DISPLAY_TOGGLE
SHORTCUT_UNDEFINED, // SHORTCUT_VIEW_CLIPPING
SDL_SCANCODE_I, // SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE
};

View File

@ -16,6 +16,7 @@
#pragma once
#include <memory>
#include <openrct2/common.h>
#define SHIFT 0x100
@ -97,6 +98,8 @@ enum
SHORTCUT_LOAD_GAME,
SHORTCUT_CLEAR_SCENERY,
SHORTCUT_GRIDLINES_DISPLAY_TOGGLE,
SHORTCUT_VIEW_CLIPPING,
SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE,
SHORTCUT_COUNT,
@ -117,11 +120,12 @@ namespace OpenRCT2
constexpr static sint32 CURRENT_FILE_VERSION = 1;
static const uint16 DefaultKeys[SHORTCUT_COUNT];
IPlatformEnvironment * const _env;
std::shared_ptr<IPlatformEnvironment> const _env;
uint16 _keys[SHORTCUT_COUNT];
public:
KeyboardShortcuts(IPlatformEnvironment * env);
KeyboardShortcuts(const std::shared_ptr<IPlatformEnvironment>& env);
~KeyboardShortcuts();
void Reset();
bool Load();
@ -133,8 +137,8 @@ namespace OpenRCT2
sint32 GetFromKey(sint32 key);
void GetKeyboardMapScroll(const uint8 * keysState, sint32 * x, sint32 * y) const;
};
}
}
} // namespace Input
} // namespace OpenRCT2
/** The current shortcut being changed. */
extern uint8 gKeyboardShortcutChangeId;

View File

@ -14,6 +14,8 @@
*****************************************************************************/
#pragma endregion
#include <cmath>
#include <openrct2-ui/interface/Dropdown.h>
#include <openrct2-ui/windows/Window.h>
#include <openrct2/Context.h>
@ -26,7 +28,7 @@
#include <openrct2/core/Util.hpp>
#include <openrct2/interface/Cursors.h>
#include <openrct2/interface/Chat.h>
#include <openrct2/interface/Console.h>
#include <openrct2/interface/InteractiveConsole.h>
#include <openrct2-ui/interface/Viewport.h>
#include <openrct2-ui/interface/Widget.h>
#include <openrct2-ui/interface/Window.h>
@ -89,11 +91,11 @@ static void input_window_position_end(rct_window * w, sint32 x, sint32 y);
static void input_window_resize_begin(rct_window * w, rct_widgetindex widgetIndex, sint32 x, sint32 y);
static void input_window_resize_continue(rct_window * w, sint32 x, sint32 y);
static void input_window_resize_end();
static void input_viewport_drag_begin(rct_window * w, sint32 x, sint32 y);
static void input_viewport_drag_begin(rct_window * w);
static void input_viewport_drag_continue();
static void input_viewport_drag_end();
static void input_scroll_begin(rct_window * w, rct_widgetindex widgetIndex, sint32 x, sint32 y);
static void input_scroll_continue(rct_window * w, rct_widgetindex widgetIndex, sint32 state, sint32 x, sint32 y);
static void input_scroll_continue(rct_window * w, rct_widgetindex widgetIndex, sint32 x, sint32 y);
static void input_scroll_end();
static void input_scroll_part_update_hthumb(rct_window * w, rct_widgetindex widgetIndex, sint32 x, sint32 scroll_id);
static void input_scroll_part_update_hleft(rct_window * w, rct_widgetindex widgetIndex, sint32 scroll_id);
@ -191,7 +193,7 @@ static rct_mouse_data * get_mouse_input()
*
* rct2: 0x006E957F
*/
static void input_scroll_drag_begin(sint32 x, sint32 y, rct_window * w, rct_widget * widget, rct_widgetindex widgetIndex)
static void input_scroll_drag_begin(sint32 x, sint32 y, rct_window * w, rct_widgetindex widgetIndex)
{
_inputState = INPUT_STATE_SCROLL_RIGHT;
gInputDragLastX = x;
@ -242,8 +244,8 @@ static void input_scroll_drag_continue(sint32 x, sint32 y, rct_window * w)
widget_scroll_update_thumbs(w, widgetIndex);
window_invalidate_by_number(w->classification, w->number);
sint32 fixedCursorPositionX = (sint32)ceilf(gInputDragLastX * gConfigGeneral.window_scale);
sint32 fixedCursorPositionY = (sint32)ceilf(gInputDragLastY * gConfigGeneral.window_scale);
sint32 fixedCursorPositionX = (sint32)std::ceil(gInputDragLastX * gConfigGeneral.window_scale);
sint32 fixedCursorPositionY = (sint32)std::ceil(gInputDragLastY * gConfigGeneral.window_scale);
context_set_cursor_position(fixedCursorPositionX, fixedCursorPositionY);
}
@ -323,11 +325,11 @@ static void game_handle_input_mouse(sint32 x, sint32 y, sint32 state)
case WWT_VIEWPORT:
if (!(gScreenFlags & (SCREEN_FLAGS_TRACK_MANAGER | SCREEN_FLAGS_TITLE_DEMO)))
{
input_viewport_drag_begin(w, x, y);
input_viewport_drag_begin(w);
}
break;
case WWT_SCROLL:
input_scroll_drag_begin(x, y, w, widget, widgetIndex);
input_scroll_drag_begin(x, y, w, widgetIndex);
break;
}
}
@ -425,7 +427,7 @@ static void game_handle_input_mouse(sint32 x, sint32 y, sint32 state)
switch (state)
{
case MOUSE_STATE_RELEASED:
input_scroll_continue(w, widgetIndex, state, x, y);
input_scroll_continue(w, widgetIndex, x, y);
break;
case MOUSE_STATE_LEFT_RELEASE:
input_scroll_end();
@ -521,7 +523,7 @@ static void input_window_resize_end()
#pragma region Viewport dragging
static void input_viewport_drag_begin(rct_window * w, sint32 x, sint32 y)
static void input_viewport_drag_begin(rct_window * w)
{
w->flags &= ~WF_SCROLLING_TO_LOCATION;
_inputState = INPUT_STATE_VIEWPORT_RIGHT;
@ -672,7 +674,7 @@ static void input_scroll_begin(rct_window * w, rct_widgetindex widgetIndex, sint
window_invalidate_by_number(widgetIndex, w->classification);
}
static void input_scroll_continue(rct_window * w, rct_widgetindex widgetIndex, sint32 state, sint32 x, sint32 y)
static void input_scroll_continue(rct_window * w, rct_widgetindex widgetIndex, sint32 x, sint32 y)
{
rct_widget * widget;
sint32 scroll_part, scroll_id;

View File

@ -18,7 +18,7 @@
#include <openrct2/localisation/Localisation.h>
#include <openrct2-ui/interface/Graph.h>
static void graph_draw_months_uint8(rct_drawpixelinfo *dpi, const uint8 *history, sint32 count, sint32 baseX, sint32 baseY)
static void graph_draw_months_uint8(rct_drawpixelinfo * dpi, const uint8 * history, sint32 count, sint32 baseX, sint32 baseY)
{
sint32 i, x, y, yearOver32, currentMonth, currentDay;
@ -27,10 +27,12 @@ static void graph_draw_months_uint8(rct_drawpixelinfo *dpi, const uint8 *history
yearOver32 = (currentMonth * 4) + (currentDay >> 14) - 31;
x = baseX;
y = baseY;
for (i = count - 1; i >= 0; i--) {
if (history[i] != 0 && history[i] != 255 && yearOver32 % 4 == 0) {
for (i = count - 1; i >= 0; i--)
{
if (history[i] != 255 && yearOver32 % 4 == 0)
{
// Draw month text
set_format_arg(0, uint32, DateGameShortMonthNames[((yearOver32 / 4) + 8) % 8]);
set_format_arg(0, uint32, DateGameShortMonthNames[date_get_month((yearOver32 / 4) + MONTH_COUNT)]);
gfx_draw_string_centred(dpi, STR_GRAPH_LABEL, x, y - 10, COLOUR_BLACK, gCommonFormatArgs);
// Draw month mark
@ -42,17 +44,20 @@ static void graph_draw_months_uint8(rct_drawpixelinfo *dpi, const uint8 *history
}
}
static void graph_draw_line_a_uint8(rct_drawpixelinfo *dpi, const uint8 *history, sint32 count, sint32 baseX, sint32 baseY)
static void graph_draw_line_a_uint8(rct_drawpixelinfo * dpi, const uint8 * history, sint32 count, sint32 baseX, sint32 baseY)
{
sint32 i, x, y, lastX, lastY;
lastX = -1;
lastY = -1;
x = baseX;
for (i = count - 1; i >= 0; i--) {
if (history[i] != 0 && history[i] != 255) {
for (i = count - 1; i >= 0; i--)
{
if (history[i] != 255)
{
y = baseY + ((255 - history[i]) * 100) / 256;
if (lastX != -1) {
if (lastX != -1)
{
gfx_draw_line(dpi, lastX + 1, lastY + 1, x + 1, y + 1, PALETTE_INDEX_10);
gfx_draw_line(dpi, lastX, lastY + 1, x, y + 1, PALETTE_INDEX_10);
}
@ -66,15 +71,17 @@ static void graph_draw_line_a_uint8(rct_drawpixelinfo *dpi, const uint8 *history
}
}
static void graph_draw_line_b_uint8(rct_drawpixelinfo *dpi, const uint8 *history, sint32 count, sint32 baseX, sint32 baseY)
static void graph_draw_line_b_uint8(rct_drawpixelinfo * dpi, const uint8 * history, sint32 count, sint32 baseX, sint32 baseY)
{
sint32 i, x, y, lastX, lastY;
lastX = -1;
lastY = -1;
x = baseX;
for (i = count - 1; i >= 0; i--) {
if (history[i] != 0 && history[i] != 255) {
for (i = count - 1; i >= 0; i--)
{
if (history[i] != 255)
{
y = baseY + ((255 - history[i]) * 100) / 256;
if (lastX != -1)
@ -89,7 +96,7 @@ static void graph_draw_line_b_uint8(rct_drawpixelinfo *dpi, const uint8 *history
}
}
void graph_draw_uint8(rct_drawpixelinfo *dpi, uint8 *history, sint32 count, sint32 baseX, sint32 baseY)
void graph_draw_uint8(rct_drawpixelinfo * dpi, uint8 * history, sint32 count, sint32 baseX, sint32 baseY)
{
graph_draw_months_uint8(dpi, history, count, baseX, baseY);
graph_draw_line_a_uint8(dpi, history, count, baseX, baseY);
@ -108,7 +115,7 @@ static void graph_draw_months_money32(rct_drawpixelinfo *dpi, const money32 *his
for (i = count - 1; i >= 0; i--) {
if (history[i] != MONEY32_UNDEFINED && yearOver32 % 4 == 0) {
// Draw month text
sint32 monthFormat = DateGameShortMonthNames[((yearOver32 / 4) + 8) % 8];
sint32 monthFormat = DateGameShortMonthNames[date_get_month((yearOver32 / 4) + MONTH_COUNT)];
gfx_draw_string_centred(dpi, STR_GRAPH_LABEL, x, y - 10, COLOUR_BLACK, &monthFormat);
// Draw month mark

View File

@ -0,0 +1,325 @@
#include <algorithm>
#include <cstring>
#include <openrct2/config/Config.h>
#include <openrct2/Context.h>
#include <openrct2/core/Math.hpp>
#include <openrct2/drawing/Drawing.h>
#include <openrct2/interface/Colour.h>
#include <openrct2/interface/themes.h>
#include <openrct2/interface/Window.h>
#include <openrct2/localisation/Language.h>
#include <openrct2/localisation/LocalisationService.h>
#include <openrct2/Version.h>
#include "InGameConsole.h"
using namespace OpenRCT2::Ui;
static InGameConsole _inGameConsole;
InGameConsole::InGameConsole()
{
InteractiveConsole::WriteLine(OPENRCT2_NAME " " OPENRCT2_VERSION);
InteractiveConsole::WriteLine("Type 'help' for a list of available commands. Type 'hide' to hide the console.");
InteractiveConsole::WriteLine("");
WritePrompt();
}
void InGameConsole::WritePrompt()
{
InteractiveConsole::WriteLine("> ");
}
void InGameConsole::Input(CONSOLE_INPUT input)
{
switch (input) {
case CONSOLE_INPUT_LINE_CLEAR:
ClearInput();
RefreshCaret();
break;
case CONSOLE_INPUT_LINE_EXECUTE:
if (_consoleCurrentLine[0] != '\0') {
HistoryAdd(_consoleCurrentLine);
// Append text we are executing to prompt line
_consoleLines.back().append(_consoleCurrentLine);
Execute(_consoleCurrentLine);
WritePrompt();
ClearInput();
RefreshCaret();
}
ScrollToEnd();
break;
case CONSOLE_INPUT_HISTORY_PREVIOUS:
if (_consoleHistoryIndex > 0) {
_consoleHistoryIndex--;
memcpy(_consoleCurrentLine, _consoleHistory[_consoleHistoryIndex], CONSOLE_INPUT_SIZE);
}
_consoleTextInputSession->Size = strlen(_consoleTextInputSession->Buffer);
_consoleTextInputSession->Length = utf8_length(_consoleTextInputSession->Buffer);
_consoleTextInputSession->SelectionStart = strlen(_consoleCurrentLine);
break;
case CONSOLE_INPUT_HISTORY_NEXT:
if (_consoleHistoryIndex < _consoleHistoryCount - 1) {
_consoleHistoryIndex++;
memcpy(_consoleCurrentLine, _consoleHistory[_consoleHistoryIndex], CONSOLE_INPUT_SIZE);
_consoleTextInputSession->Size = strlen(_consoleTextInputSession->Buffer);
_consoleTextInputSession->Length = utf8_length(_consoleTextInputSession->Buffer);
_consoleTextInputSession->SelectionStart = strlen(_consoleCurrentLine);
} else {
_consoleHistoryIndex = _consoleHistoryCount;
ClearInput();
}
break;
case CONSOLE_INPUT_SCROLL_PREVIOUS:
{
sint32 scrollAmt = GetNumVisibleLines() - 1;
Scroll(scrollAmt);
break;
}
case CONSOLE_INPUT_SCROLL_NEXT:
{
sint32 scrollAmt = GetNumVisibleLines() - 1;
Scroll(-scrollAmt);
break;
}
default:
break;
}
}
void InGameConsole::ClearInput()
{
_consoleCurrentLine[0] = 0;
if (_isOpen) {
context_start_text_input(_consoleCurrentLine, sizeof(_consoleCurrentLine));
}
}
void InGameConsole::HistoryAdd(const utf8 * src)
{
if (_consoleHistoryCount >= CONSOLE_HISTORY_SIZE) {
for (sint32 i = 0; i < _consoleHistoryCount - 1; i++)
memcpy(_consoleHistory[i], _consoleHistory[i + 1], CONSOLE_INPUT_SIZE);
_consoleHistoryCount--;
}
memcpy(_consoleHistory[_consoleHistoryCount++], src, CONSOLE_INPUT_SIZE);
_consoleHistoryIndex = _consoleHistoryCount;
}
void InGameConsole::ScrollToEnd()
{
_consoleScrollPos = std::max<sint32>(0, (sint32)_consoleLines.size() - GetNumVisibleLines());
}
void InGameConsole::RefreshCaret()
{
_consoleCaretTicks = 0;
}
void InGameConsole::Scroll(sint32 linesToScroll)
{
const sint32 maxVisibleLines = GetNumVisibleLines();
const sint32 numLines = (sint32)_consoleLines.size();
if (numLines > maxVisibleLines)
{
sint32 maxScrollValue = numLines - maxVisibleLines;
_consoleScrollPos = Math::Clamp<sint32>(0, _consoleScrollPos - linesToScroll, maxScrollValue);
}
}
void InGameConsole::Clear()
{
_consoleLines.clear();
ScrollToEnd();
}
void InGameConsole::ClearLine()
{
_consoleCurrentLine[0] = 0;
RefreshCaret();
}
void InGameConsole::Open()
{
_isOpen = true;
ScrollToEnd();
RefreshCaret();
_consoleTextInputSession = context_start_text_input(_consoleCurrentLine, sizeof(_consoleCurrentLine));
}
void InGameConsole::Close()
{
_consoleTextInputSession = nullptr;
_isOpen = false;
Invalidate();
context_stop_text_input();
}
void InGameConsole::Hide()
{
Close();
}
void InGameConsole::Toggle()
{
if (_isOpen)
{
Close();
}
else
{
Open();
}
}
void InGameConsole::WriteLine(const std::string &input, uint32 colourFormat)
{
// Include text colour format only for special cases
// The draw function handles the default text colour differently
utf8 colourCodepoint[4]{};
if (colourFormat != FORMAT_WINDOW_COLOUR_2)
utf8_write_codepoint(colourCodepoint, colourFormat);
std::string line;
std::size_t splitPos = 0;
std::size_t stringOffset = 0;
while (splitPos != std::string::npos)
{
splitPos = input.find('\n', stringOffset);
line = input.substr(stringOffset, splitPos - stringOffset);
_consoleLines.push_back(colourCodepoint + line);
stringOffset = splitPos + 1;
}
if (_consoleLines.size() > CONSOLE_MAX_LINES)
{
const std::size_t linesToErase = _consoleLines.size() - CONSOLE_MAX_LINES;
_consoleLines.erase(_consoleLines.begin(), _consoleLines.begin() + linesToErase);
}
}
void InGameConsole::Invalidate() const
{
gfx_set_dirty_blocks(_consoleLeft, _consoleTop, _consoleRight, _consoleBottom);
}
void InGameConsole::Update()
{
_consoleLeft = 0;
_consoleTop = 0;
_consoleRight = context_get_width();
_consoleBottom = 322;
if (_isOpen) {
// When scrolling the map, the console pixels get copied... therefore invalidate the screen
rct_window *mainWindow = window_get_main();
if (mainWindow != nullptr) {
rct_viewport *mainViewport = window_get_viewport(mainWindow);
if (mainViewport != nullptr) {
if (_lastMainViewportX != mainViewport->view_x || _lastMainViewportY != mainViewport->view_y) {
_lastMainViewportX = mainViewport->view_x;
_lastMainViewportY = mainViewport->view_y;
gfx_invalidate_screen();
}
}
}
// Remove unwanted characters in console input
utf8_remove_format_codes(_consoleCurrentLine, false);
}
// Flash the caret
_consoleCaretTicks = (_consoleCaretTicks + 1) % 30;
}
void InGameConsole::Draw(rct_drawpixelinfo * dpi) const
{
if (!_isOpen)
return;
// Set font
gCurrentFontSpriteBase = (gConfigInterface.console_small_font ? FONT_SPRITE_BASE_SMALL : FONT_SPRITE_BASE_MEDIUM);
gCurrentFontFlags = 0;
uint8 textColour = NOT_TRANSLUCENT(theme_get_colour(WC_CONSOLE, 1));
const sint32 lineHeight = font_get_line_height(gCurrentFontSpriteBase);
const sint32 maxLines = GetNumVisibleLines();
// This is something of a hack to ensure the text is actually black
// as opposed to a desaturated grey
std::string colourFormatStr;
if (textColour == COLOUR_BLACK)
{
utf8 extraTextFormatCode[4]{};
utf8_write_codepoint(extraTextFormatCode, FORMAT_BLACK);
colourFormatStr = extraTextFormatCode;
}
// TTF looks far better without the outlines
if (!LocalisationService_UseTrueTypeFont())
{
textColour |= COLOUR_FLAG_OUTLINE;
}
Invalidate();
// Give console area a translucent effect.
gfx_filter_rect(dpi, _consoleLeft, _consoleTop, _consoleRight, _consoleBottom, PALETTE_51);
// Make input area more opaque.
gfx_filter_rect(dpi, _consoleLeft, _consoleBottom - lineHeight - 10, _consoleRight, _consoleBottom - 1, PALETTE_51);
// Paint background colour.
uint8 backgroundColour = theme_get_colour(WC_CONSOLE, 0);
gfx_fill_rect_inset(dpi, _consoleLeft, _consoleTop, _consoleRight, _consoleBottom, backgroundColour, INSET_RECT_FLAG_FILL_NONE);
gfx_fill_rect_inset(dpi, _consoleLeft + 1, _consoleTop + 1, _consoleRight - 1, _consoleBottom - 1, backgroundColour, INSET_RECT_FLAG_BORDER_INSET);
std::string lineBuffer;
sint32 x = _consoleLeft + CONSOLE_EDGE_PADDING;
sint32 y = _consoleTop + CONSOLE_EDGE_PADDING;
// Draw text inside console
for (std::size_t i = 0; i < _consoleLines.size() && i < (size_t)maxLines; i++) {
const size_t index = i + _consoleScrollPos;
lineBuffer = colourFormatStr + _consoleLines[index];
gfx_draw_string(dpi, lineBuffer.c_str(), textColour, x, y);
y += lineHeight;
}
y = _consoleBottom - lineHeight - CONSOLE_EDGE_PADDING - 1;
// Draw current line
lineBuffer = colourFormatStr + _consoleCurrentLine;
gfx_draw_string(dpi, lineBuffer.c_str(), TEXT_COLOUR_255, x, y);
// Draw caret
if (_consoleCaretTicks < CONSOLE_CARET_FLASH_THRESHOLD) {
sint32 caretX = x + gfx_get_string_width(_consoleCurrentLine);
sint32 caretY = y + lineHeight;
uint8 caretColour = ColourMapA[BASE_COLOUR(textColour)].lightest;
gfx_fill_rect(dpi, caretX, caretY, caretX + CONSOLE_CARET_WIDTH, caretY, caretColour);
}
// What about border colours?
uint8 borderColour1 = ColourMapA[BASE_COLOUR(backgroundColour)].light;
uint8 borderColour2 = ColourMapA[BASE_COLOUR(backgroundColour)].mid_dark;
// Input area top border
gfx_fill_rect(dpi, _consoleLeft, _consoleBottom - lineHeight - 11, _consoleRight, _consoleBottom - lineHeight - 11, borderColour1);
gfx_fill_rect(dpi, _consoleLeft, _consoleBottom - lineHeight - 10, _consoleRight, _consoleBottom - lineHeight - 10, borderColour2);
// Input area bottom border
gfx_fill_rect(dpi, _consoleLeft, _consoleBottom - 1, _consoleRight, _consoleBottom - 1, borderColour1);
gfx_fill_rect(dpi, _consoleLeft, _consoleBottom - 0, _consoleRight, _consoleBottom - 0, borderColour2);
}
// Calculates the amount of visible lines, based on the console size, excluding the input line.
sint32 InGameConsole::GetNumVisibleLines() const
{
const sint32 lineHeight = font_get_line_height(gCurrentFontSpriteBase);
const sint32 consoleHeight = _consoleBottom - _consoleTop;
const sint32 drawableHeight = consoleHeight - 2 * lineHeight - 4; // input line, separator - padding
return drawableHeight / lineHeight;
}

View File

@ -0,0 +1,58 @@
#pragma once
#include <openrct2/interface/InteractiveConsole.h>
namespace OpenRCT2::Ui
{
class InGameConsole final : public InteractiveConsole
{
private:
static constexpr sint32 CONSOLE_MAX_LINES = 300;
static constexpr sint32 CONSOLE_HISTORY_SIZE = 64;
static constexpr sint32 CONSOLE_INPUT_SIZE = 256;
static constexpr sint32 CONSOLE_CARET_FLASH_THRESHOLD = 15;
static constexpr sint32 CONSOLE_EDGE_PADDING = 4;
static constexpr sint32 CONSOLE_CARET_WIDTH = 6;
bool _isOpen = false;
sint32 _consoleLeft, _consoleTop, _consoleRight, _consoleBottom;
sint32 _lastMainViewportX, _lastMainViewportY;
std::deque<std::string> _consoleLines;
utf8 _consoleCurrentLine[CONSOLE_INPUT_SIZE] = {};
sint32 _consoleCaretTicks;
sint32 _consoleScrollPos = 0;
TextInputSession * _consoleTextInputSession;
utf8 _consoleHistory[CONSOLE_HISTORY_SIZE][CONSOLE_INPUT_SIZE];
sint32 _consoleHistoryIndex = 0;
sint32 _consoleHistoryCount = 0;
public:
InGameConsole();
InGameConsole(const InGameConsole& src) = delete;
bool IsOpen() const { return _isOpen; }
void Clear() override;
void Open();
void Close() override;
void Hide() override;
void Toggle();
void WriteLine(const std::string &s, uint32 colourFormat) override;
void Input(CONSOLE_INPUT input);
void RefreshCaret();
void Scroll(sint32 linesToScroll);
void Update();
void Draw(rct_drawpixelinfo * dpi) const;
private:
void ClearInput();
void ClearLine();
void HistoryAdd(const utf8 * src);
void WritePrompt();
void ScrollToEnd();
void Invalidate() const;
sint32 GetNumVisibleLines() const;
};
} // namespace OpenRCT2::Ui

View File

@ -16,11 +16,14 @@
#include <openrct2-ui/interface/Dropdown.h>
#include <openrct2/world/Map.h>
#include <openrct2/world/Surface.h>
#include <openrct2-ui/interface/LandTool.h>
#include <openrct2-ui/interface/Widget.h>
#include <openrct2-ui/interface/Window.h>
#include <openrct2/Input.h>
#include <openrct2/drawing/Drawing.h>
// clang-format off
static uint16 toolSizeSpriteIndices[] =
{
SPR_LAND_TOOL_SIZE_0,
@ -66,6 +69,7 @@ uint32 WallTexturePreviews[] =
SPR_G2_WALL_TEXTURE_SKYSCRAPER_A,
SPR_G2_WALL_TEXTURE_SKYSCRAPER_B,
};
// clang-format on
uint16 gLandToolSize;
money32 gLandToolRaiseCost;

View File

@ -45,7 +45,6 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<ClCompile>
<ObjectFileName>$(IntDir)\%(RelativeDir)</ObjectFileName>
<AdditionalOptions>$(OPENRCT2_CL_ADDITIONALOPTIONS) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Lib>

View File

@ -16,16 +16,19 @@
#include <openrct2/OpenRCT2.h>
#include <openrct2/Context.h>
#include <openrct2/drawing/Drawing.h>
#include <openrct2-ui/windows/Window.h>
#include <openrct2-ui/interface/Widget.h>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/localisation/LocalisationService.h>
#include <openrct2/sprites.h>
#define WW 400
#define WH 350
#define TABHEIGHT 50
// clang-format off
enum
{
WINDOW_ABOUT_PAGE_OPENRCT2,
@ -155,6 +158,7 @@ static rct_window_event_list *window_about_page_events[] = {
&window_about_openrct2_events,
&window_about_rct2_events,
};
// clang-format on
static void window_about_set_page(rct_window *w, sint32 page);
@ -248,7 +252,7 @@ static void window_about_openrct2_paint(rct_window *w, rct_drawpixelinfo *dpi)
// Copyright disclaimer; hidden when using truetype fonts to prevent
// the text from overlapping the changelog button.
if (!gUseTrueTypeFont)
if (!LocalisationService_UseTrueTypeFont())
{
gfx_draw_string_centred_wrapped(dpi, nullptr, x, y, width, STR_ABOUT_OPENRCT2_DESCRIPTION_3, w->colours[2]);
}

View File

@ -21,13 +21,16 @@
#include <openrct2/Game.h>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/world/Scenery.h>
#include <openrct2-ui/interface/Dropdown.h>
#include <openrct2/sprites.h>
#include <openrct2/world/Banner.h>
#include <openrct2/world/Scenery.h>
#include <openrct2/actions/BannerSetNameAction.hpp>
#define WW 113
#define WH 96
// clang-format off
enum WINDOW_BANNER_WIDGET_IDX {
WIDX_BACKGROUND,
WIDX_TITLE,
@ -110,6 +113,7 @@ static rct_window_event_list window_banner_events = {
window_banner_paint,
nullptr
};
// clang-format on
/**
*
@ -146,7 +150,7 @@ rct_window * window_banner_open(rct_windownumber number)
rct_tile_element* tile_element = map_get_first_element_at(view_x / 32, view_y / 32);
while(1) {
if (
(tile_element_get_type(tile_element) == TILE_ELEMENT_TYPE_BANNER) &&
(tile_element->GetType() == TILE_ELEMENT_TYPE_BANNER) &&
(tile_element->properties.banner.index == w->number)
) {
break;
@ -196,7 +200,7 @@ static void window_banner_mouseup(rct_window *w, rct_widgetindex widgetIndex)
rct_tile_element* tile_element = map_get_first_element_at(x / 32, y / 32);
while (1){
if ((tile_element_get_type(tile_element) == TILE_ELEMENT_TYPE_BANNER) &&
if ((tile_element->GetType() == TILE_ELEMENT_TYPE_BANNER) &&
(tile_element->properties.banner.index == w->number)) break;
tile_element++;
}
@ -285,10 +289,10 @@ static void window_banner_dropdown(rct_window *w, rct_widgetindex widgetIndex, s
*/
static void window_banner_textinput(rct_window *w, rct_widgetindex widgetIndex, char *text)
{
if (widgetIndex == WIDX_BANNER_TEXT && text != nullptr) {
game_do_command(1, GAME_COMMAND_FLAG_APPLY, w->number, *((sint32*)(text + 0)), GAME_COMMAND_SET_BANNER_NAME, *((sint32*)(text + 8)), *((sint32*)(text + 4)));
game_do_command(2, GAME_COMMAND_FLAG_APPLY, w->number, *((sint32*)(text + 12)), GAME_COMMAND_SET_BANNER_NAME, *((sint32*)(text + 20)), *((sint32*)(text + 16)));
game_do_command(0, GAME_COMMAND_FLAG_APPLY, w->number, *((sint32*)(text + 24)), GAME_COMMAND_SET_BANNER_NAME, *((sint32*)(text + 32)), *((sint32*)(text + 28)));
if (widgetIndex == WIDX_BANNER_TEXT && text != nullptr)
{
auto bannerSetNameAction = BannerSetNameAction(w->number, text);
GameActions::Execute(&bannerSetNameAction);
}
}

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