Merge branch 'develop'

This commit is contained in:
Michał Janiszewski 2017-08-09 23:43:12 +02:00
commit f3e5435068
310 changed files with 8615 additions and 6167 deletions

View File

@ -2,7 +2,7 @@
Fill in the placeholders below. Delete any headings and placeholders that you do not fill in.
-->
**OS:** [e.g. Windows 10]
**Version:** [e.g. 0.0.8]
**Version:** [e.g. 0.1.0]
**Commit/Build:** [e.g. 426e106]
<!-- Explanation of the issue -->

View File

@ -14,7 +14,7 @@ sudo: required
dist: trusty
env:
global:
- OPENRCT2_VERSION="0.1.0"
- OPENRCT2_VERSION="0.1.1"
matrix:
include:
@ -22,7 +22,7 @@ matrix:
services:
- docker
env:
- OPENRCT2_CMAKE_OPTS="-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DPORTABLE=ON -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_amd64
- OPENRCT2_CMAKE_OPTS="-DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DPORTABLE=ON -DDISABLE_RCT2_TESTS=on" 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
@ -30,7 +30,7 @@ matrix:
- sudo chown -R $USER build
- cd build
# make install is done inside docker
- mv OpenRCT2/bin/openrct2 OpenRCT2/ && mv OpenRCT2/bin/libopenrct2.so OpenRCT2/ && mv OpenRCT2/share/openrct2 OpenRCT2/data && mv OpenRCT2/share/doc/openrct2 OpenRCT2/doc
- mv OpenRCT2/bin/openrct2 OpenRCT2/ && mv OpenRCT2/bin/openrct2-cli OpenRCT2/ && mv OpenRCT2/bin/libopenrct2.so OpenRCT2/ && mv OpenRCT2/share/openrct2 OpenRCT2/data && mv OpenRCT2/share/doc/openrct2 OpenRCT2/doc
- rm -rf OpenRCT2/bin OpenRCT2/share # remove empty dirs
- tar cvzf openrct2-linux.tar.gz OpenRCT2/
- if [[ "z${TRAVIS_TAG}" != "z" ]] ; then
@ -45,7 +45,7 @@ matrix:
services:
- docker
env:
- OPENRCT2_CMAKE_OPTS="-DFORCE32=ON -DDISABLE_RCT2=OFF -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_i686
- OPENRCT2_CMAKE_OPTS="-DFORCE32=ON -DDISABLE_RCT2=OFF -DBUILD_SHARED_LIBS=off -DCMAKE_INSTALL_PREFIX=OpenRCT2 -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_i686
- secure: "S3u2VCE2Vy8KNXoeh+DhnzjCmgTX0r95uEZrXDU+IKANOOCKn7Dg4OFDZE3LY/i1y2/EUDpnR5yLC38Ks795EUP/sv/OoMl4tjQ20yERjqWh+gcIRrgx7SdVabuAh3t4aBdaLD4Pfnj5avxeCt6rL7yGnj0wdbrbJSBZPsgSnuQ="
after_success:
# Android jobs are triggered from cron and overwrite `after_sucess` part
@ -65,19 +65,19 @@ matrix:
else curl --progress-bar --upload-file openrct2-linux.tar.gz https://transfer.sh/openrct2-linux-i686.tar.gz -o link && cat link;
fi
- os: linux
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_amd64
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=ubuntu_amd64
- os: linux
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DFORCE32=on -DDISABLE_RCT2_TESTS=on" TARGET=windows
env: OPENRCT2_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DFORCE32=on -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=windows
- os: linux
env: TARGET=docker64 OPENRCT2_CMAKE_OPTS="-DDISABLE_TTF=ON -DCMAKE_BUILD_TYPE=release -DDISABLE_RCT2_TESTS=on"
env: TARGET=docker64 OPENRCT2_CMAKE_OPTS="-DDISABLE_TTF=ON -DCMAKE_BUILD_TYPE=release -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on"
services:
- docker
- os: linux
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
services:
- docker
- os: linux
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_OPENGL=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
env: OPENRCT2_CMAKE_OPTS="-DDISABLE_OPENGL=ON -DBUILD_SHARED_LIBS=ON -DDISABLE_RCT2_TESTS=on" TARGET=docker64
services:
- docker
- os: osx

View File

@ -1,12 +1,15 @@
# CMAKE project for openrct2
cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 3.1)
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
endif()
project(openrct2)
include(FindPkgConfig)
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
include(GNUInstallDirs)
set(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}")
set(CMAKE_MACOSX_RPATH 1)
@ -130,29 +133,32 @@ list(APPEND DOC_FILES "${ROOT_DIR}/contributors.md"
# targets, like `install`, so we have to trick it and execute dependency ourselves.
install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target g2)")
IF (DOWNLOAD_TITLE_SEQUENCES)
install(CODE "file(DOWNLOAD ${TITLE_SEQUENCE_URL} \$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/${PROJECT}/title/title-sequences.zip EXPECTED_HASH SHA1=${TITLE_SEQUENCE_SHA1} SHOW_PROGRESS)")
install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" -E chdir \$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/${PROJECT}/title/ \"${CMAKE_COMMAND}\" -E tar xvf title-sequences.zip)")
install(CODE "file(REMOVE \$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/${PROJECT}/title/title-sequences.zip)")
install(CODE "file(DOWNLOAD ${TITLE_SEQUENCE_URL} \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/title-sequences.zip EXPECTED_HASH SHA1=${TITLE_SEQUENCE_SHA1} SHOW_PROGRESS)")
install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" -E chdir \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/ \"${CMAKE_COMMAND}\" -E tar xvf title-sequences.zip)")
install(CODE "file(REMOVE \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/title-sequences.zip)")
endif ()
if (WIN32)
install(TARGETS "libopenrct2" RUNTIME DESTINATION "bin")
install(TARGETS "libopenrct2" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
else ()
if (PORTABLE)
install(TARGETS "libopenrct2" LIBRARY DESTINATION "bin")
install(TARGETS "libopenrct2" LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
else ()
install(TARGETS "libopenrct2" LIBRARY DESTINATION "lib")
install(TARGETS "libopenrct2" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
endif ()
endif ()
install(TARGETS "openrct2" RUNTIME DESTINATION "bin")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/g2.dat" DESTINATION "share/openrct2")
install(DIRECTORY "data/" DESTINATION "share/openrct2")
install(FILES ${DOC_FILES} DESTINATION "share/doc/openrct2")
install(FILES "resources/logo/icon_x16.png" DESTINATION "share/icons/hicolor/16x16/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x32.png" DESTINATION "share/icons/hicolor/32x32/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x64.png" DESTINATION "share/icons/hicolor/64x64/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x128.png" DESTINATION "share/icons/hicolor/128x128/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x256.png" DESTINATION "share/icons/hicolor/256x256/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_flag.svg" DESTINATION "share/icons/hicolor/scalable/apps" RENAME "openrct2.svg")
install(FILES "distribution/linux/openrct2.desktop" DESTINATION "share/applications")
install(DIRECTORY "distribution/man/" DESTINATION "share/man/man6" FILES_MATCHING PATTERN "*.6")
install(CODE "execute_process(COMMAND find \$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/man/man6 -type f -exec gzip -f \"{}\" \;)")
install(TARGETS "openrct2" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(TARGETS "openrct2-cli" OPTIONAL RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/g2.dat" DESTINATION "${CMAKE_INSTALL_DATADIR}/openrct2")
install(DIRECTORY "data/" DESTINATION "${CMAKE_INSTALL_DATADIR}/openrct2")
install(FILES ${DOC_FILES} DESTINATION "${CMAKE_INSTALL_DOCDIR}")
install(FILES "resources/logo/icon_x16.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/16x16/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x32.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/32x32/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x64.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/64x64/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x128.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_x256.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps" RENAME "openrct2.png")
install(FILES "resources/logo/icon_flag.svg" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps" RENAME "openrct2.svg")
install(FILES "distribution/linux/openrct2.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
install(DIRECTORY "distribution/man/" DESTINATION "${CMAKE_INSTALL_MANDIR}/man6" FILES_MATCHING PATTERN "*.6")

View File

@ -39,8 +39,8 @@ work outside and inside the game.
## Code hints
### Adding new strings
If you need to add a new localisable string to OpenRCT2, please add your new string entry to ```./data/language/english_uk.txt```.
It is important that you only edit English (UK) in the OpenRCT2 repository as this is the base language that is used for
If you need to add a new localisable string to OpenRCT2, please add your new string entry to ```./data/language/en-GB.txt```.
It is important that you only edit en-GB in the OpenRCT2 repository as this is the base language that is used for
translation to other languages. A separate repository OpenRCT2/Localisation is used for translation pull requests, and changes
to that repository are merged with the OpenRCT2 main repository every night. When your pull request is merged, it is helpful
to create a new issue in the OpenRCT2/Localisation repository about the new strings you have added. This notifies translators

View File

@ -21,6 +21,7 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
4C5C268D1F31F65B003F90A1 /* About.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C5C268C1F31F65B003F90A1 /* About.cpp */; };
4C8667821EEFDCDF0024AAB8 /* RideGroupManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C8667801EEFDCDF0024AAB8 /* RideGroupManager.cpp */; };
4C8B42701EEB1ABD00F015CA /* X8DrawingEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C8B426E1EEB1ABD00F015CA /* X8DrawingEngine.cpp */; };
4C8B42721EEB1AE400F015CA /* HardwareDisplayDrawingEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C8B42711EEB1AE400F015CA /* HardwareDisplayDrawingEngine.cpp */; };
@ -28,6 +29,8 @@
4CB832A71EFBDCCE00B88761 /* land_tool.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CB832A51EFBDCCE00B88761 /* land_tool.c */; };
4CB832AB1EFFB8D100B88761 /* ttf_sdlport.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CB832A81EFFB8D100B88761 /* ttf_sdlport.c */; };
4CB832AC1EFFB8D100B88761 /* ttf.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CB832A91EFFB8D100B88761 /* ttf.c */; };
4CF788C01F1B787700C611BF /* Painter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CF788BE1F1B787700C611BF /* Painter.cpp */; };
4CFBCD5E1F27CD8000D74FB6 /* SmallScenery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CFBCD5D1F27CD8000D74FB6 /* SmallScenery.cpp */; };
C606CCBE1DB4054000FE4015 /* compat.c in Sources */ = {isa = PBXBuildFile; fileRef = C606CCAB1DB4054000FE4015 /* compat.c */; };
C606CCBF1DB4054000FE4015 /* data.c in Sources */ = {isa = PBXBuildFile; fileRef = C606CCAC1DB4054000FE4015 /* data.c */; };
C606CCC01DB4054000FE4015 /* FunctionCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C606CCAE1DB4054000FE4015 /* FunctionCall.cpp */; };
@ -83,7 +86,7 @@
D4EC48E71C2637710024B507 /* language in Resources */ = {isa = PBXBuildFile; fileRef = D4EC48E41C2637710024B507 /* language */; };
D4EC48E81C2637710024B507 /* title in Resources */ = {isa = PBXBuildFile; fileRef = D4EC48E51C2637710024B507 /* title */; };
F74789551EEDEA0D009E50E7 /* input.c in Sources */ = {isa = PBXBuildFile; fileRef = F74789531EEDEA0D009E50E7 /* input.c */; };
F76C85B01EC4E88300FA49E2 /* audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83571EC4E7CC00FA49E2 /* audio.cpp */; };
F76C85B01EC4E88300FA49E2 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83571EC4E7CC00FA49E2 /* Audio.cpp */; };
F76C85B41EC4E88300FA49E2 /* AudioMixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C835B1EC4E7CC00FA49E2 /* AudioMixer.cpp */; };
F76C85B71EC4E88300FA49E2 /* NullAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C835E1EC4E7CC00FA49E2 /* NullAudioSource.cpp */; };
F76C85B81EC4E88300FA49E2 /* cheats.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C835F1EC4E7CC00FA49E2 /* cheats.c */; };
@ -112,7 +115,7 @@
F76C85EE1EC4E88300FA49E2 /* Zip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83991EC4E7CC00FA49E2 /* Zip.cpp */; };
F76C85F01EC4E88300FA49E2 /* diagnostic.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C839B1EC4E7CC00FA49E2 /* diagnostic.c */; };
F76C85F21EC4E88300FA49E2 /* drawing.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C839E1EC4E7CC00FA49E2 /* drawing.c */; };
F76C85F41EC4E88300FA49E2 /* drawing_fast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83A01EC4E7CC00FA49E2 /* drawing_fast.cpp */; };
F76C85F41EC4E88300FA49E2 /* DrawingFast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83A01EC4E7CC00FA49E2 /* DrawingFast.cpp */; };
F76C85F51EC4E88300FA49E2 /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83A11EC4E7CC00FA49E2 /* font.c */; };
F76C85F91EC4E88300FA49E2 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83A51EC4E7CC00FA49E2 /* Image.cpp */; };
F76C85FA1EC4E88300FA49E2 /* lightfx.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83A61EC4E7CC00FA49E2 /* lightfx.c */; };
@ -121,7 +124,7 @@
F76C85FF1EC4E88300FA49E2 /* Rain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83AB1EC4E7CC00FA49E2 /* Rain.cpp */; };
F76C86011EC4E88300FA49E2 /* rect.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83AD1EC4E7CC00FA49E2 /* rect.c */; };
F76C86021EC4E88300FA49E2 /* scrolling_text.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83AE1EC4E7CC00FA49E2 /* scrolling_text.c */; };
F76C86031EC4E88300FA49E2 /* sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83AF1EC4E7CC00FA49E2 /* sprite.cpp */; };
F76C86031EC4E88300FA49E2 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83AF1EC4E7CC00FA49E2 /* Sprite.cpp */; };
F76C86041EC4E88300FA49E2 /* string.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83B01EC4E7CC00FA49E2 /* string.c */; };
F76C86051EC4E88300FA49E2 /* editor.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83B11EC4E7CC00FA49E2 /* editor.c */; };
F76C86071EC4E88300FA49E2 /* FileClassifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83B31EC4E7CC00FA49E2 /* FileClassifier.cpp */; };
@ -143,7 +146,7 @@
F76C862A1EC4E88300FA49E2 /* currency.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83D91EC4E7CC00FA49E2 /* currency.c */; };
F76C862C1EC4E88300FA49E2 /* date.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83DB1EC4E7CC00FA49E2 /* date.c */; };
F76C862E1EC4E88300FA49E2 /* format_codes.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83DD1EC4E7CC00FA49E2 /* format_codes.c */; };
F76C86301EC4E88300FA49E2 /* language.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83DF1EC4E7CC00FA49E2 /* language.cpp */; };
F76C86301EC4E88300FA49E2 /* Language.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83DF1EC4E7CC00FA49E2 /* Language.cpp */; };
F76C86321EC4E88300FA49E2 /* LanguagePack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83E11EC4E7CC00FA49E2 /* LanguagePack.cpp */; };
F76C86341EC4E88300FA49E2 /* localisation.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83E31EC4E7CC00FA49E2 /* localisation.c */; };
F76C86361EC4E88300FA49E2 /* real_names.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83E51EC4E7CC00FA49E2 /* real_names.c */; };
@ -154,8 +157,8 @@
F76C863F1EC4E88300FA49E2 /* marketing.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83EF1EC4E7CC00FA49E2 /* marketing.c */; };
F76C86411EC4E88300FA49E2 /* news_item.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83F11EC4E7CC00FA49E2 /* news_item.c */; };
F76C86431EC4E88300FA49E2 /* research.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C83F31EC4E7CC00FA49E2 /* research.c */; };
F76C86451EC4E88300FA49E2 /* http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83F61EC4E7CC00FA49E2 /* http.cpp */; };
F76C86471EC4E88300FA49E2 /* network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83F81EC4E7CC00FA49E2 /* network.cpp */; };
F76C86451EC4E88300FA49E2 /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83F61EC4E7CC00FA49E2 /* Http.cpp */; };
F76C86471EC4E88300FA49E2 /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83F81EC4E7CC00FA49E2 /* Network.cpp */; };
F76C86491EC4E88300FA49E2 /* NetworkAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83FA1EC4E7CC00FA49E2 /* NetworkAction.cpp */; };
F76C864B1EC4E88300FA49E2 /* NetworkConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83FC1EC4E7CC00FA49E2 /* NetworkConnection.cpp */; };
F76C864D1EC4E88300FA49E2 /* NetworkGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C83FE1EC4E7CC00FA49E2 /* NetworkGroup.cpp */; };
@ -166,7 +169,7 @@
F76C86581EC4E88300FA49E2 /* NetworkUser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84091EC4E7CC00FA49E2 /* NetworkUser.cpp */; };
F76C865A1EC4E88300FA49E2 /* ServerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C840B1EC4E7CC00FA49E2 /* ServerList.cpp */; };
F76C865C1EC4E88300FA49E2 /* TcpSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C840D1EC4E7CC00FA49E2 /* TcpSocket.cpp */; };
F76C865E1EC4E88300FA49E2 /* twitch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C840F1EC4E7CC00FA49E2 /* twitch.cpp */; };
F76C865E1EC4E88300FA49E2 /* Twitch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C840F1EC4E7CC00FA49E2 /* Twitch.cpp */; };
F76C86601EC4E88300FA49E2 /* BannerObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84121EC4E7CC00FA49E2 /* BannerObject.cpp */; };
F76C86621EC4E88300FA49E2 /* EntranceObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84141EC4E7CC00FA49E2 /* EntranceObject.cpp */; };
F76C86641EC4E88300FA49E2 /* FootpathItemObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84161EC4E7CC00FA49E2 /* FootpathItemObject.cpp */; };
@ -205,7 +208,7 @@
F76C869E1EC4E88400FA49E2 /* peep.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84541EC4E7CC00FA49E2 /* peep.c */; };
F76C86A01EC4E88400FA49E2 /* peep_data.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84561EC4E7CC00FA49E2 /* peep_data.c */; };
F76C86A11EC4E88400FA49E2 /* staff.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84571EC4E7CC00FA49E2 /* staff.c */; };
F76C86A31EC4E88400FA49E2 /* crash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C845A1EC4E7CC00FA49E2 /* crash.cpp */; };
F76C86A31EC4E88400FA49E2 /* Crash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C845A1EC4E7CC00FA49E2 /* Crash.cpp */; };
F76C86A51EC4E88400FA49E2 /* linux.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C845C1EC4E7CC00FA49E2 /* linux.c */; };
F76C86A61EC4E88400FA49E2 /* macos.m in Sources */ = {isa = PBXBuildFile; fileRef = F76C845D1EC4E7CC00FA49E2 /* macos.m */; };
F76C86A81EC4E88400FA49E2 /* Platform2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C845F1EC4E7CC00FA49E2 /* Platform2.cpp */; };
@ -214,7 +217,7 @@
F76C86AC1EC4E88400FA49E2 /* windows.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84631EC4E7CC00FA49E2 /* windows.c */; };
F76C86AD1EC4E88400FA49E2 /* PlatformEnvironment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84641EC4E7CC00FA49E2 /* PlatformEnvironment.cpp */; };
F76C86AF1EC4E88400FA49E2 /* S4Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84671EC4E7CC00FA49E2 /* S4Importer.cpp */; };
F76C86B01EC4E88400FA49E2 /* tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84681EC4E7CC00FA49E2 /* tables.cpp */; };
F76C86B01EC4E88400FA49E2 /* Tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84681EC4E7CC00FA49E2 /* Tables.cpp */; };
F76C86B21EC4E88400FA49E2 /* rct1.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C846A1EC4E7CC00FA49E2 /* rct1.c */; };
F76C86B41EC4E88400FA49E2 /* SawyerChunk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C846D1EC4E7CC00FA49E2 /* SawyerChunk.cpp */; };
F76C86B61EC4E88400FA49E2 /* SawyerChunkReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C846F1EC4E7CC00FA49E2 /* SawyerChunkReader.cpp */; };
@ -225,7 +228,6 @@
F76C86C11EC4E88400FA49E2 /* interop.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C847B1EC4E7CC00FA49E2 /* interop.c */; };
F76C86C31EC4E88400FA49E2 /* S6Exporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C847D1EC4E7CC00FA49E2 /* S6Exporter.cpp */; };
F76C86C51EC4E88400FA49E2 /* S6Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C847F1EC4E7CC00FA49E2 /* S6Importer.cpp */; };
F76C86C61EC4E88400FA49E2 /* rct2.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84801EC4E7CC00FA49E2 /* rct2.c */; };
F76C86C81EC4E88400FA49E2 /* cable_lift.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84841EC4E7CC00FA49E2 /* cable_lift.c */; };
F76C86CA1EC4E88400FA49E2 /* air_powered_vertical_coaster.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84871EC4E7CC00FA49E2 /* air_powered_vertical_coaster.c */; };
F76C86CB1EC4E88400FA49E2 /* bobsleigh_coaster.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C84881EC4E7CC00FA49E2 /* bobsleigh_coaster.c */; };
@ -323,7 +325,6 @@
F76C87411EC4E88400FA49E2 /* sawyercoding.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85071EC4E7CD00FA49E2 /* sawyercoding.c */; };
F76C87431EC4E88400FA49E2 /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85091EC4E7CD00FA49E2 /* util.c */; };
F76C87451EC4E88400FA49E2 /* Version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C850B1EC4E7CD00FA49E2 /* Version.cpp */; };
F76C87471EC4E88400FA49E2 /* about.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C850E1EC4E7CD00FA49E2 /* about.c */; };
F76C87481EC4E88400FA49E2 /* banner.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C850F1EC4E7CD00FA49E2 /* banner.c */; };
F76C87491EC4E88400FA49E2 /* changelog.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85101EC4E7CD00FA49E2 /* changelog.c */; };
F76C874A1EC4E88400FA49E2 /* cheats.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85111EC4E7CD00FA49E2 /* cheats.c */; };
@ -363,7 +364,6 @@
F76C876E1EC4E88400FA49E2 /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85351EC4E7CD00FA49E2 /* options.c */; };
F76C876F1EC4E88400FA49E2 /* park.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85361EC4E7CD00FA49E2 /* park.c */; };
F76C87701EC4E88400FA49E2 /* player.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85371EC4E7CD00FA49E2 /* player.c */; };
F76C87711EC4E88400FA49E2 /* publisher_credits.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85381EC4E7CD00FA49E2 /* publisher_credits.c */; };
F76C87721EC4E88400FA49E2 /* research.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85391EC4E7CD00FA49E2 /* research.c */; };
F76C87731EC4E88400FA49E2 /* ride.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C853A1EC4E7CD00FA49E2 /* ride.c */; };
F76C87741EC4E88400FA49E2 /* ride_construction.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C853B1EC4E7CD00FA49E2 /* ride_construction.c */; };
@ -395,10 +395,10 @@
F76C87921EC4E88400FA49E2 /* viewport.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85591EC4E7CD00FA49E2 /* viewport.c */; };
F76C87931EC4E88400FA49E2 /* water.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C855A1EC4E7CD00FA49E2 /* water.c */; };
F76C87941EC4E88400FA49E2 /* Balloon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C855C1EC4E7CD00FA49E2 /* Balloon.cpp */; };
F76C87951EC4E88400FA49E2 /* banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C855D1EC4E7CD00FA49E2 /* banner.cpp */; };
F76C87951EC4E88400FA49E2 /* Banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C855D1EC4E7CD00FA49E2 /* Banner.cpp */; };
F76C87971EC4E88400FA49E2 /* Climate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C855F1EC4E7CD00FA49E2 /* Climate.cpp */; };
F76C87991EC4E88400FA49E2 /* Duck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C85611EC4E7CD00FA49E2 /* Duck.cpp */; };
F76C879A1EC4E88400FA49E2 /* entrance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C85621EC4E7CD00FA49E2 /* entrance.cpp */; };
F76C879A1EC4E88400FA49E2 /* Entrance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C85621EC4E7CD00FA49E2 /* Entrance.cpp */; };
F76C879C1EC4E88400FA49E2 /* footpath.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85641EC4E7CD00FA49E2 /* footpath.c */; };
F76C879E1EC4E88400FA49E2 /* Fountain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C85661EC4E7CD00FA49E2 /* Fountain.cpp */; };
F76C87A01EC4E88400FA49E2 /* map.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85681EC4E7CD00FA49E2 /* map.c */; };
@ -411,7 +411,7 @@
F76C87AC1EC4E88500FA49E2 /* scenery.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85741EC4E7CD00FA49E2 /* scenery.c */; };
F76C87AE1EC4E88500FA49E2 /* sprite.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85761EC4E7CD00FA49E2 /* sprite.c */; };
F76C87B01EC4E88500FA49E2 /* tile_inspector.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C85781EC4E7CD00FA49E2 /* tile_inspector.c */; };
F76C87B21EC4E88500FA49E2 /* wall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C857A1EC4E7CD00FA49E2 /* wall.cpp */; };
F76C87B21EC4E88500FA49E2 /* Wall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C857A1EC4E7CD00FA49E2 /* Wall.cpp */; };
F76C88781EC5324E00FA49E2 /* AudioChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C85821EC4E82600FA49E2 /* AudioChannel.cpp */; };
F76C88791EC5324E00FA49E2 /* AudioContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C85831EC4E82600FA49E2 /* AudioContext.cpp */; };
F76C887A1EC5324E00FA49E2 /* AudioMixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C85861EC4E82600FA49E2 /* AudioMixer.cpp */; };
@ -440,6 +440,7 @@
F775F5351EE35A89001F00E7 /* DummyUiContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F775F5331EE35A6B001F00E7 /* DummyUiContext.cpp */; };
F775F5371EE3724F001F00E7 /* DummyAudioContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F775F5361EE3724F001F00E7 /* DummyAudioContext.cpp */; };
F775F5381EE3725C001F00E7 /* DummyAudioContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F775F5361EE3724F001F00E7 /* DummyAudioContext.cpp */; };
F79F428F1F3260F1009E42F8 /* changelog.txt in Resources */ = {isa = PBXBuildFile; fileRef = F79F428E1F3260F1009E42F8 /* changelog.txt */; };
F7CB863F1EEDA0B50030C877 /* WindowManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7CB863D1EEDA0B50030C877 /* WindowManager.cpp */; };
F7CB86431EEDA0F50030C877 /* shortcut_key_change.c in Sources */ = {isa = PBXBuildFile; fileRef = F7CB86411EEDA0F50030C877 /* shortcut_key_change.c */; };
F7CB86441EEDA0F50030C877 /* shortcut_keys.c in Sources */ = {isa = PBXBuildFile; fileRef = F7CB86421EEDA0F50030C877 /* shortcut_keys.c */; };
@ -567,6 +568,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
4C5C268C1F31F65B003F90A1 /* About.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = About.cpp; sourceTree = "<group>"; };
4C8667801EEFDCDF0024AAB8 /* RideGroupManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RideGroupManager.cpp; sourceTree = "<group>"; };
4C8667811EEFDCDF0024AAB8 /* RideGroupManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RideGroupManager.h; sourceTree = "<group>"; };
4C8B426E1EEB1ABD00F015CA /* X8DrawingEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = X8DrawingEngine.cpp; sourceTree = "<group>"; };
@ -578,6 +580,9 @@
4CB832A81EFFB8D100B88761 /* ttf_sdlport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttf_sdlport.c; sourceTree = "<group>"; };
4CB832A91EFFB8D100B88761 /* ttf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttf.c; sourceTree = "<group>"; };
4CB832AA1EFFB8D100B88761 /* ttf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttf.h; sourceTree = "<group>"; };
4CF788BE1F1B787700C611BF /* Painter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Painter.cpp; sourceTree = "<group>"; };
4CF788BF1F1B787700C611BF /* Painter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Painter.h; sourceTree = "<group>"; };
4CFBCD5D1F27CD8000D74FB6 /* SmallScenery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SmallScenery.cpp; sourceTree = "<group>"; };
C606CCAB1DB4054000FE4015 /* compat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; path = compat.c; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
C606CCAC1DB4054000FE4015 /* data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; path = data.c; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
C606CCAD1DB4054000FE4015 /* data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = data.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
@ -790,7 +795,7 @@
F74789531EEDEA0D009E50E7 /* input.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = input.c; path = input/input.c; sourceTree = "<group>"; };
F74789541EEDEA0D009E50E7 /* input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = input.h; path = input/input.h; sourceTree = "<group>"; };
F76C809A1EC4D9FA00FA49E2 /* libopenrct2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libopenrct2.a; sourceTree = BUILT_PRODUCTS_DIR; };
F76C83571EC4E7CC00FA49E2 /* audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = audio.cpp; sourceTree = "<group>"; };
F76C83571EC4E7CC00FA49E2 /* Audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = "<group>"; };
F76C83581EC4E7CC00FA49E2 /* audio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = audio.h; sourceTree = "<group>"; };
F76C83591EC4E7CC00FA49E2 /* AudioChannel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioChannel.h; sourceTree = "<group>"; };
F76C835A1EC4E7CC00FA49E2 /* AudioContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioContext.h; sourceTree = "<group>"; };
@ -857,7 +862,7 @@
F76C839C1EC4E7CC00FA49E2 /* diagnostic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = diagnostic.h; sourceTree = "<group>"; };
F76C839E1EC4E7CC00FA49E2 /* drawing.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = drawing.c; sourceTree = "<group>"; };
F76C839F1EC4E7CC00FA49E2 /* drawing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = drawing.h; sourceTree = "<group>"; };
F76C83A01EC4E7CC00FA49E2 /* drawing_fast.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drawing_fast.cpp; sourceTree = "<group>"; };
F76C83A01EC4E7CC00FA49E2 /* DrawingFast.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DrawingFast.cpp; sourceTree = "<group>"; };
F76C83A11EC4E7CC00FA49E2 /* font.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = font.c; sourceTree = "<group>"; };
F76C83A21EC4E7CC00FA49E2 /* font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = "<group>"; };
F76C83A31EC4E7CC00FA49E2 /* IDrawingContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDrawingContext.h; sourceTree = "<group>"; };
@ -872,7 +877,7 @@
F76C83AC1EC4E7CC00FA49E2 /* Rain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Rain.h; sourceTree = "<group>"; };
F76C83AD1EC4E7CC00FA49E2 /* rect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rect.c; sourceTree = "<group>"; };
F76C83AE1EC4E7CC00FA49E2 /* scrolling_text.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = scrolling_text.c; sourceTree = "<group>"; };
F76C83AF1EC4E7CC00FA49E2 /* sprite.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sprite.cpp; sourceTree = "<group>"; };
F76C83AF1EC4E7CC00FA49E2 /* Sprite.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Sprite.cpp; sourceTree = "<group>"; };
F76C83B01EC4E7CC00FA49E2 /* string.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = string.c; sourceTree = "<group>"; };
F76C83B11EC4E7CC00FA49E2 /* editor.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = editor.c; sourceTree = "<group>"; };
F76C83B21EC4E7CC00FA49E2 /* editor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = editor.h; sourceTree = "<group>"; };
@ -914,7 +919,7 @@
F76C83DC1EC4E7CC00FA49E2 /* date.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = date.h; sourceTree = "<group>"; };
F76C83DD1EC4E7CC00FA49E2 /* format_codes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = format_codes.c; sourceTree = "<group>"; };
F76C83DE1EC4E7CC00FA49E2 /* format_codes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = format_codes.h; sourceTree = "<group>"; };
F76C83DF1EC4E7CC00FA49E2 /* language.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = language.cpp; sourceTree = "<group>"; };
F76C83DF1EC4E7CC00FA49E2 /* Language.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Language.cpp; sourceTree = "<group>"; };
F76C83E01EC4E7CC00FA49E2 /* language.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = language.h; sourceTree = "<group>"; };
F76C83E11EC4E7CC00FA49E2 /* LanguagePack.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LanguagePack.cpp; sourceTree = "<group>"; };
F76C83E21EC4E7CC00FA49E2 /* LanguagePack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LanguagePack.h; sourceTree = "<group>"; };
@ -935,9 +940,9 @@
F76C83F21EC4E7CC00FA49E2 /* news_item.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = news_item.h; sourceTree = "<group>"; };
F76C83F31EC4E7CC00FA49E2 /* research.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = research.c; sourceTree = "<group>"; };
F76C83F41EC4E7CC00FA49E2 /* research.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = research.h; sourceTree = "<group>"; };
F76C83F61EC4E7CC00FA49E2 /* http.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = http.cpp; sourceTree = "<group>"; };
F76C83F61EC4E7CC00FA49E2 /* Http.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Http.cpp; sourceTree = "<group>"; };
F76C83F71EC4E7CC00FA49E2 /* http.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = http.h; sourceTree = "<group>"; };
F76C83F81EC4E7CC00FA49E2 /* network.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = network.cpp; sourceTree = "<group>"; };
F76C83F81EC4E7CC00FA49E2 /* Network.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Network.cpp; sourceTree = "<group>"; };
F76C83F91EC4E7CC00FA49E2 /* network.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = network.h; sourceTree = "<group>"; };
F76C83FA1EC4E7CC00FA49E2 /* NetworkAction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkAction.cpp; sourceTree = "<group>"; };
F76C83FB1EC4E7CC00FA49E2 /* NetworkAction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NetworkAction.h; sourceTree = "<group>"; };
@ -960,7 +965,7 @@
F76C840C1EC4E7CC00FA49E2 /* ServerList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServerList.h; sourceTree = "<group>"; };
F76C840D1EC4E7CC00FA49E2 /* TcpSocket.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TcpSocket.cpp; sourceTree = "<group>"; };
F76C840E1EC4E7CC00FA49E2 /* TcpSocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TcpSocket.h; sourceTree = "<group>"; };
F76C840F1EC4E7CC00FA49E2 /* twitch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = twitch.cpp; sourceTree = "<group>"; };
F76C840F1EC4E7CC00FA49E2 /* Twitch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Twitch.cpp; sourceTree = "<group>"; };
F76C84101EC4E7CC00FA49E2 /* twitch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = twitch.h; sourceTree = "<group>"; };
F76C84121EC4E7CC00FA49E2 /* BannerObject.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BannerObject.cpp; sourceTree = "<group>"; };
F76C84131EC4E7CC00FA49E2 /* BannerObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BannerObject.h; sourceTree = "<group>"; };
@ -1029,7 +1034,7 @@
F76C84561EC4E7CC00FA49E2 /* peep_data.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = peep_data.c; sourceTree = "<group>"; };
F76C84571EC4E7CC00FA49E2 /* staff.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = staff.c; sourceTree = "<group>"; };
F76C84581EC4E7CC00FA49E2 /* staff.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = staff.h; sourceTree = "<group>"; };
F76C845A1EC4E7CC00FA49E2 /* crash.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = crash.cpp; sourceTree = "<group>"; };
F76C845A1EC4E7CC00FA49E2 /* Crash.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Crash.cpp; sourceTree = "<group>"; };
F76C845B1EC4E7CC00FA49E2 /* crash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = crash.h; sourceTree = "<group>"; };
F76C845C1EC4E7CC00FA49E2 /* linux.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = linux.c; sourceTree = "<group>"; };
F76C845D1EC4E7CC00FA49E2 /* macos.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = macos.m; sourceTree = "<group>"; };
@ -1042,7 +1047,7 @@
F76C84641EC4E7CC00FA49E2 /* PlatformEnvironment.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PlatformEnvironment.cpp; sourceTree = "<group>"; };
F76C84651EC4E7CC00FA49E2 /* PlatformEnvironment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformEnvironment.h; sourceTree = "<group>"; };
F76C84671EC4E7CC00FA49E2 /* S4Importer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = S4Importer.cpp; sourceTree = "<group>"; };
F76C84681EC4E7CC00FA49E2 /* tables.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tables.cpp; sourceTree = "<group>"; };
F76C84681EC4E7CC00FA49E2 /* Tables.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Tables.cpp; sourceTree = "<group>"; };
F76C84691EC4E7CC00FA49E2 /* Tables.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Tables.h; sourceTree = "<group>"; };
F76C846A1EC4E7CC00FA49E2 /* rct1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rct1.c; sourceTree = "<group>"; };
F76C846B1EC4E7CC00FA49E2 /* rct1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rct1.h; sourceTree = "<group>"; };
@ -1064,7 +1069,6 @@
F76C847D1EC4E7CC00FA49E2 /* S6Exporter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = S6Exporter.cpp; sourceTree = "<group>"; };
F76C847E1EC4E7CC00FA49E2 /* S6Exporter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = S6Exporter.h; sourceTree = "<group>"; };
F76C847F1EC4E7CC00FA49E2 /* S6Importer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = S6Importer.cpp; sourceTree = "<group>"; };
F76C84801EC4E7CC00FA49E2 /* rct2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rct2.c; sourceTree = "<group>"; };
F76C84811EC4E7CC00FA49E2 /* rct2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rct2.h; sourceTree = "<group>"; };
F76C84841EC4E7CC00FA49E2 /* cable_lift.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = cable_lift.c; sourceTree = "<group>"; };
F76C84851EC4E7CC00FA49E2 /* cable_lift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cable_lift.h; sourceTree = "<group>"; };
@ -1193,7 +1197,6 @@
F76C850A1EC4E7CD00FA49E2 /* util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; };
F76C850B1EC4E7CD00FA49E2 /* Version.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Version.cpp; sourceTree = "<group>"; };
F76C850C1EC4E7CD00FA49E2 /* Version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Version.h; sourceTree = "<group>"; };
F76C850E1EC4E7CD00FA49E2 /* about.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = about.c; sourceTree = "<group>"; };
F76C850F1EC4E7CD00FA49E2 /* banner.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = banner.c; sourceTree = "<group>"; };
F76C85101EC4E7CD00FA49E2 /* changelog.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = changelog.c; sourceTree = "<group>"; };
F76C85111EC4E7CD00FA49E2 /* cheats.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = cheats.c; sourceTree = "<group>"; };
@ -1235,7 +1238,6 @@
F76C85351EC4E7CD00FA49E2 /* options.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = options.c; sourceTree = "<group>"; };
F76C85361EC4E7CD00FA49E2 /* park.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = park.c; sourceTree = "<group>"; };
F76C85371EC4E7CD00FA49E2 /* player.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = player.c; sourceTree = "<group>"; };
F76C85381EC4E7CD00FA49E2 /* publisher_credits.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = publisher_credits.c; sourceTree = "<group>"; };
F76C85391EC4E7CD00FA49E2 /* research.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = research.c; sourceTree = "<group>"; };
F76C853A1EC4E7CD00FA49E2 /* ride.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ride.c; sourceTree = "<group>"; };
F76C853B1EC4E7CD00FA49E2 /* ride_construction.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ride_construction.c; sourceTree = "<group>"; };
@ -1269,12 +1271,12 @@
F76C85591EC4E7CD00FA49E2 /* viewport.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = viewport.c; sourceTree = "<group>"; };
F76C855A1EC4E7CD00FA49E2 /* water.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = water.c; sourceTree = "<group>"; };
F76C855C1EC4E7CD00FA49E2 /* Balloon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Balloon.cpp; sourceTree = "<group>"; };
F76C855D1EC4E7CD00FA49E2 /* banner.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = banner.cpp; sourceTree = "<group>"; };
F76C855D1EC4E7CD00FA49E2 /* Banner.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Banner.cpp; sourceTree = "<group>"; };
F76C855E1EC4E7CD00FA49E2 /* banner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = banner.h; sourceTree = "<group>"; };
F76C855F1EC4E7CD00FA49E2 /* Climate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Climate.cpp; sourceTree = "<group>"; };
F76C85601EC4E7CD00FA49E2 /* Climate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Climate.h; sourceTree = "<group>"; };
F76C85611EC4E7CD00FA49E2 /* Duck.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Duck.cpp; sourceTree = "<group>"; };
F76C85621EC4E7CD00FA49E2 /* entrance.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = entrance.cpp; sourceTree = "<group>"; };
F76C85621EC4E7CD00FA49E2 /* Entrance.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Entrance.cpp; sourceTree = "<group>"; };
F76C85631EC4E7CD00FA49E2 /* entrance.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = entrance.h; sourceTree = "<group>"; };
F76C85641EC4E7CD00FA49E2 /* footpath.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = footpath.c; sourceTree = "<group>"; };
F76C85651EC4E7CD00FA49E2 /* footpath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = footpath.h; sourceTree = "<group>"; };
@ -1298,7 +1300,7 @@
F76C85771EC4E7CD00FA49E2 /* sprite.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sprite.h; sourceTree = "<group>"; };
F76C85781EC4E7CD00FA49E2 /* tile_inspector.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tile_inspector.c; sourceTree = "<group>"; };
F76C85791EC4E7CD00FA49E2 /* tile_inspector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tile_inspector.h; sourceTree = "<group>"; };
F76C857A1EC4E7CD00FA49E2 /* wall.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wall.cpp; sourceTree = "<group>"; };
F76C857A1EC4E7CD00FA49E2 /* Wall.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Wall.cpp; sourceTree = "<group>"; };
F76C857B1EC4E7CD00FA49E2 /* water.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = water.h; sourceTree = "<group>"; };
F76C857D1EC4E80E00FA49E2 /* Cli.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Cli.cpp; sourceTree = "<group>"; };
F76C85821EC4E82600FA49E2 /* AudioChannel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AudioChannel.cpp; sourceTree = "<group>"; };
@ -1345,6 +1347,7 @@
F775F5321EE35A48001F00E7 /* Ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ui.h; sourceTree = "<group>"; };
F775F5331EE35A6B001F00E7 /* DummyUiContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DummyUiContext.cpp; sourceTree = "<group>"; };
F775F5361EE3724F001F00E7 /* DummyAudioContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DummyAudioContext.cpp; sourceTree = "<group>"; };
F79F428E1F3260F1009E42F8 /* changelog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = changelog.txt; path = distribution/changelog.txt; sourceTree = SOURCE_ROOT; };
F7CB863D1EEDA0B50030C877 /* WindowManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WindowManager.cpp; sourceTree = "<group>"; };
F7CB863E1EEDA0B50030C877 /* WindowManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowManager.h; sourceTree = "<group>"; };
F7CB86411EEDA0F50030C877 /* shortcut_key_change.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = shortcut_key_change.c; path = windows/shortcut_key_change.c; sourceTree = "<group>"; };
@ -1357,7 +1360,6 @@
F7D7747E1EC61E5100BE6EBC /* UiContext.macOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UiContext.macOS.mm; sourceTree = "<group>"; usesTabs = 0; };
F7D774841EC66CD700BE6EBC /* OpenRCT2-cli */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "OpenRCT2-cli"; sourceTree = BUILT_PRODUCTS_DIR; };
F7FFCDA91F02FD8E0078BFFB /* object_load_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = object_load_error.c; sourceTree = "<group>"; };
F7FFCDAB1F02FEC00078BFFB /* park_load_result_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = park_load_result_types.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -1668,6 +1670,7 @@
D497D07A1C20FD52002BF46A /* Resources */ = {
isa = PBXGroup;
children = (
F79F428E1F3260F1009E42F8 /* changelog.txt */,
D41B74721C2125E50080A7B9 /* Assets.xcassets */,
D4895D321C23EFDD000CD788 /* Info.plist */,
D4C1EDD01C266A0B00F71B63 /* data */,
@ -1780,7 +1783,6 @@
F76C84371EC4E7CC00FA49E2 /* object_list.h */,
F76C84381EC4E7CC00FA49E2 /* OpenRCT2.cpp */,
F76C84391EC4E7CC00FA49E2 /* OpenRCT2.h */,
F7FFCDAB1F02FEC00078BFFB /* park_load_result_types.h */,
F76C84511EC4E7CC00FA49E2 /* ParkImporter.cpp */,
F76C84521EC4E7CC00FA49E2 /* ParkImporter.h */,
F76C84641EC4E7CC00FA49E2 /* PlatformEnvironment.cpp */,
@ -1788,7 +1790,6 @@
F76C846A1EC4E7CC00FA49E2 /* rct1.c */,
F76C846B1EC4E7CC00FA49E2 /* rct1.h */,
F76C84751EC4E7CC00FA49E2 /* rct12.h */,
F76C84801EC4E7CC00FA49E2 /* rct2.c */,
F76C84811EC4E7CC00FA49E2 /* rct2.h */,
F76C84FA1EC4E7CD00FA49E2 /* sprites.h */,
F76C850B1EC4E7CD00FA49E2 /* Version.cpp */,
@ -1801,7 +1802,7 @@
isa = PBXGroup;
children = (
F775F5361EE3724F001F00E7 /* DummyAudioContext.cpp */,
F76C83571EC4E7CC00FA49E2 /* audio.cpp */,
F76C83571EC4E7CC00FA49E2 /* Audio.cpp */,
F76C83581EC4E7CC00FA49E2 /* audio.h */,
F76C83591EC4E7CC00FA49E2 /* AudioChannel.h */,
F76C835A1EC4E7CC00FA49E2 /* AudioContext.h */,
@ -1888,7 +1889,7 @@
children = (
F76C839E1EC4E7CC00FA49E2 /* drawing.c */,
F76C839F1EC4E7CC00FA49E2 /* drawing.h */,
F76C83A01EC4E7CC00FA49E2 /* drawing_fast.cpp */,
F76C83A01EC4E7CC00FA49E2 /* DrawingFast.cpp */,
F76C83A11EC4E7CC00FA49E2 /* font.c */,
F76C83A21EC4E7CC00FA49E2 /* font.h */,
F76C83A31EC4E7CC00FA49E2 /* IDrawingContext.h */,
@ -1903,7 +1904,7 @@
F76C83AC1EC4E7CC00FA49E2 /* Rain.h */,
F76C83AD1EC4E7CC00FA49E2 /* rect.c */,
F76C83AE1EC4E7CC00FA49E2 /* scrolling_text.c */,
F76C83AF1EC4E7CC00FA49E2 /* sprite.cpp */,
F76C83AF1EC4E7CC00FA49E2 /* Sprite.cpp */,
F76C83B01EC4E7CC00FA49E2 /* string.c */,
4CB832A91EFFB8D100B88761 /* ttf.c */,
4CB832AA1EFFB8D100B88761 /* ttf.h */,
@ -1955,7 +1956,7 @@
F76C83DC1EC4E7CC00FA49E2 /* date.h */,
F76C83DD1EC4E7CC00FA49E2 /* format_codes.c */,
F76C83DE1EC4E7CC00FA49E2 /* format_codes.h */,
F76C83DF1EC4E7CC00FA49E2 /* language.cpp */,
F76C83DF1EC4E7CC00FA49E2 /* Language.cpp */,
F76C83E01EC4E7CC00FA49E2 /* language.h */,
F76C83E11EC4E7CC00FA49E2 /* LanguagePack.cpp */,
F76C83E21EC4E7CC00FA49E2 /* LanguagePack.h */,
@ -1990,9 +1991,9 @@
F76C83F51EC4E7CC00FA49E2 /* network */ = {
isa = PBXGroup;
children = (
F76C83F61EC4E7CC00FA49E2 /* http.cpp */,
F76C83F61EC4E7CC00FA49E2 /* Http.cpp */,
F76C83F71EC4E7CC00FA49E2 /* http.h */,
F76C83F81EC4E7CC00FA49E2 /* network.cpp */,
F76C83F81EC4E7CC00FA49E2 /* Network.cpp */,
F76C83F91EC4E7CC00FA49E2 /* network.h */,
F76C83FA1EC4E7CC00FA49E2 /* NetworkAction.cpp */,
F76C83FB1EC4E7CC00FA49E2 /* NetworkAction.h */,
@ -2015,7 +2016,7 @@
F76C840C1EC4E7CC00FA49E2 /* ServerList.h */,
F76C840D1EC4E7CC00FA49E2 /* TcpSocket.cpp */,
F76C840E1EC4E7CC00FA49E2 /* TcpSocket.h */,
F76C840F1EC4E7CC00FA49E2 /* twitch.cpp */,
F76C840F1EC4E7CC00FA49E2 /* Twitch.cpp */,
F76C84101EC4E7CC00FA49E2 /* twitch.h */,
);
path = network;
@ -2070,6 +2071,8 @@
F76C84491EC4E7CC00FA49E2 /* sprite */,
F76C84461EC4E7CC00FA49E2 /* paint.c */,
F76C84471EC4E7CC00FA49E2 /* paint.h */,
4CF788BE1F1B787700C611BF /* Painter.cpp */,
4CF788BF1F1B787700C611BF /* Painter.h */,
F76C84481EC4E7CC00FA49E2 /* paint_helpers.c */,
F76C844F1EC4E7CC00FA49E2 /* supports.c */,
F76C84501EC4E7CC00FA49E2 /* supports.h */,
@ -2121,7 +2124,7 @@
F76C84591EC4E7CC00FA49E2 /* platform */ = {
isa = PBXGroup;
children = (
F76C845A1EC4E7CC00FA49E2 /* crash.cpp */,
F76C845A1EC4E7CC00FA49E2 /* Crash.cpp */,
F76C845B1EC4E7CC00FA49E2 /* crash.h */,
F76C845C1EC4E7CC00FA49E2 /* linux.c */,
F76C845D1EC4E7CC00FA49E2 /* macos.m */,
@ -2139,7 +2142,7 @@
isa = PBXGroup;
children = (
F76C84671EC4E7CC00FA49E2 /* S4Importer.cpp */,
F76C84681EC4E7CC00FA49E2 /* tables.cpp */,
F76C84681EC4E7CC00FA49E2 /* Tables.cpp */,
F76C84691EC4E7CC00FA49E2 /* Tables.h */,
);
path = rct1;
@ -2391,7 +2394,7 @@
F76C850D1EC4E7CD00FA49E2 /* windows */ = {
isa = PBXGroup;
children = (
F76C850E1EC4E7CD00FA49E2 /* about.c */,
4C5C268C1F31F65B003F90A1 /* About.cpp */,
F76C850F1EC4E7CD00FA49E2 /* banner.c */,
F76C85101EC4E7CD00FA49E2 /* changelog.c */,
F76C85111EC4E7CD00FA49E2 /* cheats.c */,
@ -2434,7 +2437,6 @@
F76C85351EC4E7CD00FA49E2 /* options.c */,
F76C85361EC4E7CD00FA49E2 /* park.c */,
F76C85371EC4E7CD00FA49E2 /* player.c */,
F76C85381EC4E7CD00FA49E2 /* publisher_credits.c */,
F76C85391EC4E7CD00FA49E2 /* research.c */,
F76C853A1EC4E7CD00FA49E2 /* ride.c */,
F76C853B1EC4E7CD00FA49E2 /* ride_construction.c */,
@ -2475,12 +2477,12 @@
isa = PBXGroup;
children = (
F76C855C1EC4E7CD00FA49E2 /* Balloon.cpp */,
F76C855D1EC4E7CD00FA49E2 /* banner.cpp */,
F76C855D1EC4E7CD00FA49E2 /* Banner.cpp */,
F76C855E1EC4E7CD00FA49E2 /* banner.h */,
F76C855F1EC4E7CD00FA49E2 /* Climate.cpp */,
F76C85601EC4E7CD00FA49E2 /* Climate.h */,
F76C85611EC4E7CD00FA49E2 /* Duck.cpp */,
F76C85621EC4E7CD00FA49E2 /* entrance.cpp */,
F76C85621EC4E7CD00FA49E2 /* Entrance.cpp */,
F76C85631EC4E7CD00FA49E2 /* entrance.h */,
F76C85641EC4E7CD00FA49E2 /* footpath.c */,
F76C85651EC4E7CD00FA49E2 /* footpath.h */,
@ -2500,11 +2502,12 @@
F76C85731EC4E7CD00FA49E2 /* particle.c */,
F76C85741EC4E7CD00FA49E2 /* scenery.c */,
F76C85751EC4E7CD00FA49E2 /* scenery.h */,
4CFBCD5D1F27CD8000D74FB6 /* SmallScenery.cpp */,
F76C85761EC4E7CD00FA49E2 /* sprite.c */,
F76C85771EC4E7CD00FA49E2 /* sprite.h */,
F76C85781EC4E7CD00FA49E2 /* tile_inspector.c */,
F76C85791EC4E7CD00FA49E2 /* tile_inspector.h */,
F76C857A1EC4E7CD00FA49E2 /* wall.cpp */,
F76C857A1EC4E7CD00FA49E2 /* Wall.cpp */,
F76C857B1EC4E7CD00FA49E2 /* water.h */,
);
path = world;
@ -2781,6 +2784,7 @@
D41B74731C2125E50080A7B9 /* Assets.xcassets in Resources */,
D4EC48E61C2637710024B507 /* g2.dat in Resources */,
D4EC48E71C2637710024B507 /* language in Resources */,
F79F428F1F3260F1009E42F8 /* changelog.txt in Resources */,
D43407E21D0E14CE00C2B3D4 /* shaders in Resources */,
D4EC48E81C2637710024B507 /* title in Resources */,
);
@ -2985,12 +2989,14 @@
F76C88781EC5324E00FA49E2 /* AudioChannel.cpp in Sources */,
F76C88791EC5324E00FA49E2 /* AudioContext.cpp in Sources */,
4CB832AC1EFFB8D100B88761 /* ttf.c in Sources */,
4C5C268D1F31F65B003F90A1 /* About.cpp in Sources */,
4C8B42721EEB1AE400F015CA /* HardwareDisplayDrawingEngine.cpp in Sources */,
F76C887A1EC5324E00FA49E2 /* AudioMixer.cpp in Sources */,
F76C887B1EC5324E00FA49E2 /* FileAudioSource.cpp in Sources */,
F7CB864D1EEDA1A80030C877 /* DummyWindowManager.cpp in Sources */,
F76C887C1EC5324E00FA49E2 /* MemoryAudioSource.cpp in Sources */,
4CB832AB1EFFB8D100B88761 /* ttf_sdlport.c in Sources */,
4CF788C01F1B787700C611BF /* Painter.cpp in Sources */,
F76C887D1EC5324E00FA49E2 /* CursorData.cpp in Sources */,
4CB832A71EFBDCCE00B88761 /* land_tool.c in Sources */,
F7D7747F1EC61E5100BE6EBC /* UiContext.macOS.mm in Sources */,
@ -3015,6 +3021,7 @@
F76C88871EC5324E00FA49E2 /* SwapFramebuffer.cpp in Sources */,
F76C88881EC5324E00FA49E2 /* TextureCache.cpp in Sources */,
F76C88891EC5324E00FA49E2 /* SoftwareDrawingEngine.cpp in Sources */,
4CFBCD5E1F27CD8000D74FB6 /* SmallScenery.cpp in Sources */,
F76C888A1EC5324E00FA49E2 /* TextComposition.cpp in Sources */,
F76C888B1EC5324E00FA49E2 /* Ui.cpp in Sources */,
F76C888C1EC5324E00FA49E2 /* UiContext.cpp in Sources */,
@ -3033,7 +3040,7 @@
F775F5381EE3725C001F00E7 /* DummyAudioContext.cpp in Sources */,
F775F5351EE35A89001F00E7 /* DummyUiContext.cpp in Sources */,
F7D7747B1EC5EB6D00BE6EBC /* lay_down_roller_coaster.c in Sources */,
F76C85B01EC4E88300FA49E2 /* audio.cpp in Sources */,
F76C85B01EC4E88300FA49E2 /* Audio.cpp in Sources */,
F76C85B41EC4E88300FA49E2 /* AudioMixer.cpp in Sources */,
F76C85B71EC4E88300FA49E2 /* NullAudioSource.cpp in Sources */,
F76C85B81EC4E88300FA49E2 /* cheats.c in Sources */,
@ -3063,7 +3070,7 @@
F76C85EE1EC4E88300FA49E2 /* Zip.cpp in Sources */,
F76C85F01EC4E88300FA49E2 /* diagnostic.c in Sources */,
F76C85F21EC4E88300FA49E2 /* drawing.c in Sources */,
F76C85F41EC4E88300FA49E2 /* drawing_fast.cpp in Sources */,
F76C85F41EC4E88300FA49E2 /* DrawingFast.cpp in Sources */,
F76C85F51EC4E88300FA49E2 /* font.c in Sources */,
F76C85F91EC4E88300FA49E2 /* Image.cpp in Sources */,
F76C85FA1EC4E88300FA49E2 /* lightfx.c in Sources */,
@ -3072,7 +3079,7 @@
F76C85FF1EC4E88300FA49E2 /* Rain.cpp in Sources */,
F76C86011EC4E88300FA49E2 /* rect.c in Sources */,
F76C86021EC4E88300FA49E2 /* scrolling_text.c in Sources */,
F76C86031EC4E88300FA49E2 /* sprite.cpp in Sources */,
F76C86031EC4E88300FA49E2 /* Sprite.cpp in Sources */,
F76C86041EC4E88300FA49E2 /* string.c in Sources */,
F76C86051EC4E88300FA49E2 /* editor.c in Sources */,
F76C86071EC4E88300FA49E2 /* FileClassifier.cpp in Sources */,
@ -3094,7 +3101,7 @@
F76C862A1EC4E88300FA49E2 /* currency.c in Sources */,
F76C862C1EC4E88300FA49E2 /* date.c in Sources */,
F76C862E1EC4E88300FA49E2 /* format_codes.c in Sources */,
F76C86301EC4E88300FA49E2 /* language.cpp in Sources */,
F76C86301EC4E88300FA49E2 /* Language.cpp in Sources */,
F76C86321EC4E88300FA49E2 /* LanguagePack.cpp in Sources */,
F76C86341EC4E88300FA49E2 /* localisation.c in Sources */,
F76C86361EC4E88300FA49E2 /* real_names.c in Sources */,
@ -3105,8 +3112,8 @@
F76C863F1EC4E88300FA49E2 /* marketing.c in Sources */,
F76C86411EC4E88300FA49E2 /* news_item.c in Sources */,
F76C86431EC4E88300FA49E2 /* research.c in Sources */,
F76C86451EC4E88300FA49E2 /* http.cpp in Sources */,
F76C86471EC4E88300FA49E2 /* network.cpp in Sources */,
F76C86451EC4E88300FA49E2 /* Http.cpp in Sources */,
F76C86471EC4E88300FA49E2 /* Network.cpp in Sources */,
F76C86491EC4E88300FA49E2 /* NetworkAction.cpp in Sources */,
F76C864B1EC4E88300FA49E2 /* NetworkConnection.cpp in Sources */,
F76C864D1EC4E88300FA49E2 /* NetworkGroup.cpp in Sources */,
@ -3117,7 +3124,7 @@
F76C86581EC4E88300FA49E2 /* NetworkUser.cpp in Sources */,
F76C865A1EC4E88300FA49E2 /* ServerList.cpp in Sources */,
F76C865C1EC4E88300FA49E2 /* TcpSocket.cpp in Sources */,
F76C865E1EC4E88300FA49E2 /* twitch.cpp in Sources */,
F76C865E1EC4E88300FA49E2 /* Twitch.cpp in Sources */,
F76C86601EC4E88300FA49E2 /* BannerObject.cpp in Sources */,
F76C86621EC4E88300FA49E2 /* EntranceObject.cpp in Sources */,
F76C86641EC4E88300FA49E2 /* FootpathItemObject.cpp in Sources */,
@ -3156,7 +3163,7 @@
F76C869E1EC4E88400FA49E2 /* peep.c in Sources */,
F76C86A01EC4E88400FA49E2 /* peep_data.c in Sources */,
F76C86A11EC4E88400FA49E2 /* staff.c in Sources */,
F76C86A31EC4E88400FA49E2 /* crash.cpp in Sources */,
F76C86A31EC4E88400FA49E2 /* Crash.cpp in Sources */,
F76C86A51EC4E88400FA49E2 /* linux.c in Sources */,
F76C86A61EC4E88400FA49E2 /* macos.m in Sources */,
F76C86A81EC4E88400FA49E2 /* Platform2.cpp in Sources */,
@ -3165,7 +3172,7 @@
F76C86AC1EC4E88400FA49E2 /* windows.c in Sources */,
F76C86AD1EC4E88400FA49E2 /* PlatformEnvironment.cpp in Sources */,
F76C86AF1EC4E88400FA49E2 /* S4Importer.cpp in Sources */,
F76C86B01EC4E88400FA49E2 /* tables.cpp in Sources */,
F76C86B01EC4E88400FA49E2 /* Tables.cpp in Sources */,
F76C86B21EC4E88400FA49E2 /* rct1.c in Sources */,
F76C86B41EC4E88400FA49E2 /* SawyerChunk.cpp in Sources */,
F76C86B61EC4E88400FA49E2 /* SawyerChunkReader.cpp in Sources */,
@ -3176,7 +3183,6 @@
F76C86C11EC4E88400FA49E2 /* interop.c in Sources */,
F76C86C31EC4E88400FA49E2 /* S6Exporter.cpp in Sources */,
F76C86C51EC4E88400FA49E2 /* S6Importer.cpp in Sources */,
F76C86C61EC4E88400FA49E2 /* rct2.c in Sources */,
F76C86C81EC4E88400FA49E2 /* cable_lift.c in Sources */,
F76C86CA1EC4E88400FA49E2 /* air_powered_vertical_coaster.c in Sources */,
F76C86CB1EC4E88400FA49E2 /* bobsleigh_coaster.c in Sources */,
@ -3274,7 +3280,6 @@
F76C87411EC4E88400FA49E2 /* sawyercoding.c in Sources */,
F76C87431EC4E88400FA49E2 /* util.c in Sources */,
F76C87451EC4E88400FA49E2 /* Version.cpp in Sources */,
F76C87471EC4E88400FA49E2 /* about.c in Sources */,
F76C87481EC4E88400FA49E2 /* banner.c in Sources */,
F76C87491EC4E88400FA49E2 /* changelog.c in Sources */,
F76C874A1EC4E88400FA49E2 /* cheats.c in Sources */,
@ -3314,7 +3319,6 @@
F76C876E1EC4E88400FA49E2 /* options.c in Sources */,
F76C876F1EC4E88400FA49E2 /* park.c in Sources */,
F76C87701EC4E88400FA49E2 /* player.c in Sources */,
F76C87711EC4E88400FA49E2 /* publisher_credits.c in Sources */,
F76C87721EC4E88400FA49E2 /* research.c in Sources */,
F76C87731EC4E88400FA49E2 /* ride.c in Sources */,
F76C87741EC4E88400FA49E2 /* ride_construction.c in Sources */,
@ -3346,10 +3350,10 @@
F76C87921EC4E88400FA49E2 /* viewport.c in Sources */,
F76C87931EC4E88400FA49E2 /* water.c in Sources */,
F76C87941EC4E88400FA49E2 /* Balloon.cpp in Sources */,
F76C87951EC4E88400FA49E2 /* banner.cpp in Sources */,
F76C87951EC4E88400FA49E2 /* Banner.cpp in Sources */,
F76C87971EC4E88400FA49E2 /* Climate.cpp in Sources */,
F76C87991EC4E88400FA49E2 /* Duck.cpp in Sources */,
F76C879A1EC4E88400FA49E2 /* entrance.cpp in Sources */,
F76C879A1EC4E88400FA49E2 /* Entrance.cpp in Sources */,
F76C879C1EC4E88400FA49E2 /* footpath.c in Sources */,
F76C879E1EC4E88400FA49E2 /* Fountain.cpp in Sources */,
F76C87A01EC4E88400FA49E2 /* map.c in Sources */,
@ -3362,7 +3366,7 @@
F76C87AC1EC4E88500FA49E2 /* scenery.c in Sources */,
F76C87AE1EC4E88500FA49E2 /* sprite.c in Sources */,
F76C87B01EC4E88500FA49E2 /* tile_inspector.c in Sources */,
F76C87B21EC4E88500FA49E2 /* wall.cpp in Sources */,
F76C87B21EC4E88500FA49E2 /* Wall.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -1,7 +1,7 @@
version: 0.1.0.{build}
version: 0.1.1.{build}
image:
- Visual Studio 2015
# - Visual Studio 2017 RC
# - Visual Studio 2015
- Visual Studio 2017
cache:
- C:\ProgramData\chocolatey\bin -> scripts\ps\appveyor_install.ps1
- C:\ProgramData\chocolatey\lib -> scripts\ps\appveyor_install.ps1

View File

@ -11,6 +11,13 @@ Includes all git commit authors. Aliases are GitHub user names.
* (zsilencer) - Developer
* Richard Jenkins (rwjuk) - Developer, issue management
## Long term contributors
The following people are not part of the project team, but have been contributing for a long time.
* Hielke Morsink (Broxzier)
* Matte Andersson (Nubbie)
* Kenton Boadway (PFCKrutonium)
* Joe Minor Jr (wolfreak99)
## Implementation (RCT2)
* Ted John (IntelOrca)
* Duncan Frost (duncanspumpkin)
@ -33,6 +40,7 @@ Includes all git commit authors. Aliases are GitHub user names.
* 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.
## Additional implementation (OpenRCT2)
* (atmaxinger) - User configuration
@ -55,10 +63,10 @@ Includes all git commit authors. Aliases are GitHub user names.
* Daniel Trujillo Viedma (gDanix) - Custom currency.
* Niels NTG Poldervaart (Niels-NTG) - Misc.
* (zaxcav) - Improvements to original pathfinding algorithm.
* Hielke Morsink (Broxzier) - Tile inspector, heightmap loader, misc.
* Joël Troch (JoelTroch) - Keyboard shortcuts for ride construction.
* Thomas Delebo (delebota) - Misc.
* Brian Callahan (ibara) - OpenBSD port.
* Jens Heuseveldt (jensj12) - Mountain tool improvements, misc.
## Bug fixes
* (halfbro)
@ -82,6 +90,7 @@ Includes all git commit authors. Aliases are GitHub user names.
* (ceeac)
* Matthias Moninger (Zeh Matt)
* Tomas Dittmann (Chaosmeister)
* William Wallace (Willox)
## Toolchain
* (Balletie) - macOS

View File

@ -12,15 +12,15 @@ STR_0007 :Ferrocarril en miniatura
STR_0008 :Monorail
STR_0009 :Minimuntanya russa suspesa
STR_0010 :Passeig en bot
STR_0011 :«Wild Mouse» de fusta
STR_0012 :Cursa «Steeplechase»
STR_0011 :{LEFTGUILLEMET}Wild Mouse{RIGHTGUILLEMET} de fusta
STR_0012 :Cursa {LEFTGUILLEMET}Steeplechase{RIGHTGUILLEMET}
STR_0013 :Atracció de cotxes
STR_0014 :Caiguda lliure propulsada
STR_0015 :Muntanya russa «Bobsleigh»
STR_0015 :Muntanya russa {LEFTGUILLEMET}Bobsleigh{RIGHTGUILLEMET}
STR_0016 :Torre d'observació
STR_0017 :Muntanya russa amb inversions
STR_0018 :Tobogan aquàtic amb bots inflables
STR_0019 :Muntanya russa «Tren de la mina»
STR_0019 :Muntanya russa {LEFTGUILLEMET}Tren de la mina{RIGHTGUILLEMET}
STR_0020 :Telecadira
STR_0021 :Muntanya russa amb tirabuixons
STR_0022 :Laberint
@ -57,12 +57,12 @@ STR_0052 :Tren fantasma
STR_0053 :Muntanya russa Tornado d'acer
STR_0054 :Muntanya russa de fusta
STR_0055 :Muntanya russa de fricció lateral
STR_0056 :«Wild Mouse»
STR_0056 :{LEFTGUILLEMET}Wild Mouse{RIGHTGUILLEMET}
STR_0057 :Muntanya russa multidimensió
STR_0058 :Atracció desconeguda (38)
STR_0059 :Muntanya russa voladora
STR_0060 :Atracció desconeguda (3A)
STR_0061 :«Virginia Reel»
STR_0061 :{LEFTGUILLEMET}Virginia Reel{RIGHTGUILLEMET}
STR_0062 :Bots amb remullada
STR_0063 :Minihelicòpters
STR_0064 :Muntanya russa amb passatgers gitats
@ -564,8 +564,8 @@ STR_0559 :Edifici enorme de temàtica terrorífica amb passadissos esgarrifos
STR_0560 :Un lloc que els visitants amb nàusees visiten per recuperar-se més de pressa.
STR_0561 :Espectacle de circ dins d'una tenda enorme.
STR_0562 :Els vagons autopropulsats viatgen per una via a diferents nivells que recorre paisatges fantasmagòrics amb efectes especials.
STR_0563 :Els passatgers drets amb unes subjeccions simples dintre els vagons travessen i gaudeixen de caigudes i girs enrevessats això com d'una part «a l'aire lliure» damunt dels turons.
STR_0564 :Movent-se per vies de fusta, aquesta muntanya russa és ràpida, rústica, sorollosa i dóna una sensació d'experiència «fora de control» a l'aire lliure.
STR_0563 :Els passatgers drets amb unes subjeccions simples dintre els vagons travessen i gaudeixen de caigudes i girs enrevessats, així com d'una part {LEFTGUILLEMET}a l'aire lliure{RIGHTGUILLEMET} damunt dels turons.
STR_0564 :Movent-se per vies de fusta, aquesta muntanya russa és ràpida, rústica, sorollosa i dóna una sensació d'experiència {LEFTGUILLEMET}fora de control{RIGHTGUILLEMET} a l'aire lliure.
STR_0565 :Una muntanya russa senzilla de fusta que només és capaç de fer inclinacions i girs suaus, mentre que els vagons es mantenen a la via mitjançant la gravetat i unes rodes laterals de fricció.
STR_0566 :Els vagons individuals giren per un difícil tram zigzaguejant amb girs pronunciats i caigudes brusques curtes.
STR_0567 :Seient suspesos a ambdós laterals de la via, els passatgers són penjats cap per avall mentre són sotmesos a caigudes pronunciades i passen per inversions.
@ -849,7 +849,7 @@ STR_0843 :<removed string - do not use>
STR_0844 :<removed string - do not use>
STR_0845 :<removed string - do not use>
STR_0846 :<removed string - do not use>
STR_0847 :Quant a l'«OpenRCT2»
STR_0847 :Quant a l'{LEFTGUILLEMET}OpenRCT2{RIGHTGUILLEMET}
STR_0848 :RollerCoaster Tycoon 2
STR_0849 :{WINDOW_COLOUR_2}Versió 2.01.028
STR_0850 :{WINDOW_COLOUR_2}Copyright {COPYRIGHT} 2002 Chris Sawyer. Tots els drets reservats.
@ -894,7 +894,7 @@ STR_0888 :Surt de l'editor de muntanyes russes
STR_0889 :Surt de l'administrador de dissenys de vies
STR_0890 :<removed string - do not use>
STR_0891 :Captura de pantalla
STR_0892 :S'ha desat la captura de pantalla com a «{STRINGID}».
STR_0892 :S'ha desat la captura de pantalla com a {LEFTGUILLEMET}{STRINGID}{RIGHTGUILLEMET}.
STR_0893 :La captura de pantalla no s'ha pogut fer.
STR_0894 :L'àrea de dades de paisatge està plena.
STR_0895 :No es pot construir part a sobre i part sota terra.
@ -931,8 +931,8 @@ STR_0925 :{SMALLFONT}{BLACK}Helicoide cap amunt
STR_0926 :No es pot treure...
STR_0927 :Això no es pot construir aquí...
STR_0928 :{SMALLFONT}{BLACK}Cadena elevadora per pujar vagons per un pendent.
STR_0929 :Corba en «S» (a l'esquerra)
STR_0930 :Corba en «S» (a la dreta)
STR_0929 :Corba en {LEFTGUILLEMET}S{RIGHTGUILLEMET} (a l'esquerra)
STR_0930 :Corba en {LEFTGUILLEMET}S{RIGHTGUILLEMET} (a la dreta)
STR_0931 :Inversió vertical (a l'esquerra)
STR_0932 :Inversió vertical (a la dreta)
STR_0933 :Abans puja o baixa el terreny.
@ -1360,7 +1360,7 @@ STR_1354 :{WINDOW_COLOUR_2}Longitud de la caiguda més gran: {BLACK}{LENGTH}
STR_1355 :{WINDOW_COLOUR_2}Caigudes: {BLACK}{COMMA16}
STR_1356 :{WINDOW_COLOUR_2}Inversions: {BLACK}{COMMA16}
STR_1357 :{WINDOW_COLOUR_2}Forats: {BLACK}{COMMA16}
STR_1358 :{WINDOW_COLOUR_2}Temps total de «vol»: {BLACK}{COMMA2DP32} s
STR_1358 :{WINDOW_COLOUR_2}Temps total de {LEFTGUILLEMET}vol{RIGHTGUILLEMET}: {BLACK}{COMMA2DP32} s
STR_1359 :{WINDOW_COLOUR_2}Temps d'espera: {BLACK}{COMMA16} min
STR_1360 :{WINDOW_COLOUR_2}Temps d'espera: {BLACK}{COMMA16} min
STR_1361 :La velocitat no es pot canviar...
@ -1462,8 +1462,8 @@ STR_1456 :{WINDOW_COLOUR_2}Diners gastats: {BLACK}{CURRENCY2DP}
STR_1457 :{WINDOW_COLOUR_2}Diners a la butxaca: {BLACK}{CURRENCY2DP}
STR_1458 :{WINDOW_COLOUR_2}Temps al parc: {BLACK}{REALTIME}
STR_1459 :Estil de via
STR_1460 :{SMALLFONT}{BLACK}Via oberta en forma d'«U»
STR_1461 :{SMALLFONT}{BLACK}Via tancada en forma d'«O»
STR_1460 :{SMALLFONT}{BLACK}Via oberta en forma d'{LEFTGUILLEMET}U{RIGHTGUILLEMET}
STR_1461 :{SMALLFONT}{BLACK}Via tancada en forma d'{LEFTGUILLEMET}O{RIGHTGUILLEMET}
STR_1462 :Massa inclinat per usar cadenes d'elevació
STR_1463 :Visitants
STR_1464 :Hèlix amunt (petita)
@ -2491,8 +2491,8 @@ STR_2483 :{WINDOW_COLOUR_2}Benefici setmanal: {BLACK}+{CURRENCY2DP}
STR_2484 :{WINDOW_COLOUR_2}Benefici setmanal: {RED}{CURRENCY2DP}
STR_2485 :Controls
STR_2486 :General
STR_2487 :Mostra els noms «reals» dels visitants
STR_2488 :{SMALLFONT}{BLACK}Alterna entre mostrar els noms «reals» dels visitants o el nombre que se li ha assignat.
STR_2487 :Mostra els noms {LEFTGUILLEMET}reals{RIGHTGUILLEMET} dels visitants
STR_2488 :{SMALLFONT}{BLACK}Alterna entre mostrar els noms {LEFTGUILLEMET}reals{RIGHTGUILLEMET} dels visitants o el nombre que se li ha assignat.
STR_2489 :Dreceres de teclat...
STR_2490 :Dreceres de teclat
STR_2491 :Reinicia les tecles
@ -2747,8 +2747,8 @@ STR_2738 :Música del menú principal:
STR_2739 :Cap
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :El fitxer «css50.dat» no s'ha trobat.
STR_2743 :Copieu «data/css17.dat» de la vostra instal·lació del RCT1 en «data/css50.dat» a la instal·lació del RCT2, o establiu correctament el camí del RCT1 a la pestanya d'altres opcions.
STR_2742 :El fitxer {LEFTGUILLEMET}css50.dat{RIGHTGUILLEMET} no s'ha trobat.
STR_2743 :Copieu {LEFTGUILLEMET}data/css17.dat{RIGHTGUILLEMET} de la vostra instal·lació del RCT1 en {LEFTGUILLEMET}data/css50.dat{RIGHTGUILLEMET} a la instal·lació del RCT2, o establiu correctament el camí del RCT1 a la pestanya d'altres opcions.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -2838,23 +2838,23 @@ STR_2827 :{WINDOW_COLOUR_2}Premi als millors dissenys d'atraccions
STR_2828 :{WINDOW_COLOUR_2}Premi als esquemes de colors més treballats
STR_2829 :{WINDOW_COLOUR_2}Premi als camins més confusos
STR_2830 :{WINDOW_COLOUR_2}Premi al parc amb millors atraccions suaus
STR_2831 :{TOPAZ}El vostre parc ha rebut el «Premi al parc més brut»!
STR_2832 :{TOPAZ}El vostre parc ha rebut el «Premi al parc més net»!
STR_2833 :{TOPAZ}El vostre parc ha rebut el «Premi al parc amb millors muntanyes russes»!
STR_2834 :{TOPAZ}El vostre parc ha rebut el «Premi al parc més valorat»!
STR_2835 :{TOPAZ}El vostre parc ha rebut el «Premi al parc més bonic»!
STR_2836 :{TOPAZ}El vostre parc ha rebut el «Premi al parc menys valorat»!
STR_2837 :{TOPAZ}El vostre parc ha rebut el «Premi al parc més segur»!
STR_2838 :{TOPAZ}El vostre parc ha rebut el «Premi a la millor plantilla»!
STR_2839 :{TOPAZ}El vostre parc ha rebut el «Premi al parc amb millor menjar»!
STR_2840 :{TOPAZ}El vostre parc ha rebut el «Premi al parc amb pitjor menjar»!
STR_2841 :{TOPAZ}El vostre parc ha rebut el «Premi al parc amb millors lavabos»!
STR_2842 :{TOPAZ}El vostre parc ha rebut el «Premi al parc més decebedor»!
STR_2843 :{TOPAZ}El vostre parc ha rebut el «Premi al parc amb millors atraccions aquàtiques»!
STR_2844 :{TOPAZ}El vostre parc ha rebut el «Premi als millors dissenys d'atraccions»!
STR_2845 :{TOPAZ}El vostre parc ha rebut el «Premi als esquemes de colors més treballats»!
STR_2846 :{TOPAZ}El vostre parc ha rebut el «Premi als camins més confusos»!
STR_2847 :{TOPAZ}El vostre parc ha rebut el «Premi al parc amb millors atraccions suaus»!
STR_2831 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc més brut{RIGHTGUILLEMET}!
STR_2832 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc més net{RIGHTGUILLEMET}!
STR_2833 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc amb millors muntanyes russes{RIGHTGUILLEMET}!
STR_2834 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc més valorat{RIGHTGUILLEMET}!
STR_2835 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc més bonic{RIGHTGUILLEMET}!
STR_2836 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc menys valorat{RIGHTGUILLEMET}!
STR_2837 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc més segur{RIGHTGUILLEMET}!
STR_2838 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi a la millor plantilla{RIGHTGUILLEMET}!
STR_2839 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc amb millor menjar{RIGHTGUILLEMET}!
STR_2840 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc amb pitjor menjar{RIGHTGUILLEMET}!
STR_2841 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc amb millors lavabos{RIGHTGUILLEMET}!
STR_2842 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc més decebedor{RIGHTGUILLEMET}!
STR_2843 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc amb millors atraccions aquàtiques{RIGHTGUILLEMET}!
STR_2844 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi als millors dissenys d'atraccions{RIGHTGUILLEMET}!
STR_2845 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi als esquemes de colors més treballats{RIGHTGUILLEMET}!
STR_2846 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi als camins més confusos{RIGHTGUILLEMET}!
STR_2847 :{TOPAZ}El vostre parc ha rebut el {LEFTGUILLEMET}Premi al parc amb millors atraccions suaus{RIGHTGUILLEMET}!
STR_2848 :{WINDOW_COLOUR_2}Sense premis recents
STR_2849 :S'ha instal·lat un nou escenari.
STR_2850 :S'ha instal·lat un nou disseny de via.
@ -2994,7 +2994,7 @@ STR_2983 :Escriviu el nou text del cartell:
STR_2984 :No es pot establir aquest text per al cartell...
STR_2985 :Cartell
STR_2986 :{SMALLFONT}{BLACK}Canvia el text del cartell.
STR_2987 :{SMALLFONT}{BLACK}Canvia el text del cartell a «No passeu».
STR_2987 :{SMALLFONT}{BLACK}Canvia el text del cartell a {LEFTGUILLEMET}No passeu{RIGHTGUILLEMET}.
STR_2988 :{SMALLFONT}{BLACK}Elimina el cartell.
STR_2989 :{SMALLFONT}{BLACK}Seleccioneu el color principal.
STR_2990 :{SMALLFONT}{BLACK}Seleccioneu el color del text.
@ -3405,29 +3405,29 @@ STR_3393 :{SMALLFONT}{BLACK}Per veure millor el parc, podeu allunyar-vos usan
STR_3394 :{SMALLFONT}{BLACK}També podeu girar la vista en passos de 90{DEGREE}...
STR_3395 :{SMALLFONT}{BLACK}La construcció d'atraccions a aquesta escala és un pèl difícil, aixó que apropem-nos al parc un altre cop...
STR_3396 :{SMALLFONT}{BLACK}Ara construirem una atracció senzilla per començar el parc...
STR_3397 :{SMALLFONT}{BLACK}La imatge «fantasma» blanca mostra on es construirà l'atracció. Mourem el punter per triar la posició correcta i llavors farem clic amb el ratolí per construir-ho...
STR_3397 :{SMALLFONT}{BLACK}La imatge {LEFTGUILLEMET}fantasma{RIGHTGUILLEMET} blanca mostra on es construirà l'atracció. Mourem el punter per triar la posició correcta i llavors farem clic amb el ratolí per construir-ho...
STR_3398 :{SMALLFONT}{BLACK}Les atraccions necessiten una entrada i una sortida. Mourem el punter a una casella a la vora de l'atracció i fem dos clics: primer per construir l'entrada i després per construir la sortida...
STR_3399 :{SMALLFONT}{BLACK}Cal que construïm camins per permetre que els visitants puguin accedir a l'atracció...
STR_3400 :{SMALLFONT}{BLACK}Per al camí d'entrada emprarem un camí especial per tal que la gent hi faci cua...
STR_3401 :{SMALLFONT}{BLACK}Per al camí de sortida, només cal un camí normal...
STR_3402 :{SMALLFONT}{BLACK}Bé! Obrim l'atracció! Per obrir-la, fem clic a la icona amb una bandera de la finestra de l'atracció i escollim «Obre»...
STR_3402 :{SMALLFONT}{BLACK}Bé! Obrim l'atracció! Per obrir-la, fem clic a la icona amb una bandera de la finestra de l'atracció i escollim {LEFTGUILLEMET}Obre{RIGHTGUILLEMET}...
STR_3403 :{SMALLFONT}{BLACK}Però on estan els visitants?
STR_3404 :{SMALLFONT}{BLACK}Ah! El parc encara està tancat!Bé, ara l'obrirem...
STR_3405 :{SMALLFONT}{BLACK}Mentre esperem als nostres primers visitants, desenvoluparem més el parc...
STR_3406 :{SMALLFONT}{BLACK}Aquí tenim el parc. Construirem una atracció senzilla però amb un disseny personalitzat...
STR_3407 :{SMALLFONT}{BLACK}Primer cal escollir la posició inicial...
STR_3408 :{SMALLFONT}{BLACK}La secció de via que acabem de construir és una «andana», que permet als visitants pujar i baixar de l'atracció...
STR_3408 :{SMALLFONT}{BLACK}La secció de via que acabem de construir és una {LEFTGUILLEMET}andana{RIGHTGUILLEMET}, que permet als visitants pujar i baixar de l'atracció...
STR_3409 :{SMALLFONT}{BLACK}Ampliarem la plataforma una mica més afegint-hi un parell de seccions d'andana més...
STR_3410 :{SMALLFONT}{BLACK}Les icones de la part superior de la finestra de construcció us permeten escollir les diferents peces de via que voleu afegir...
STR_3411 :{SMALLFONT}{BLACK}Escollirem un gir a l'esquerra...
STR_3412 :{SMALLFONT}{BLACK}El revolt encara no s'ha construït, però la imatge fantasma blanca ens mostra on es construirà. Quan feu clic a la icona gran de «Construeix-ho», el construirà definitivament...
STR_3412 :{SMALLFONT}{BLACK}El revolt encara no s'ha construït, però la imatge fantasma blanca ens mostra on es construirà. Quan feu clic a la icona gran de {LEFTGUILLEMET}Construeix-ho{RIGHTGUILLEMET}, el construirà definitivament...
STR_3413 :{SMALLFONT}{BLACK}Ara volem continuar amb una secció de via recta, així que farem clic a la icona de via recta...
STR_3414 :{SMALLFONT}{BLACK}Ara que hem completat el circuit, necessitem construir l'entrada i la sortida de l'atracció...
STR_3415 :{SMALLFONT}{BLACK}Fem ara una prova de com funciona l'atracció...
STR_3416 :{SMALLFONT}{BLACK}Mentre s'està provant, construirem el camí per fer cua i el camí de sortida...
STR_3417 :{SMALLFONT}{BLACK}D'acord. Obrim el parc i l'atracció...
STR_3418 :{SMALLFONT}{BLACK}La nostra nova atracció no és gaire emocionant. Potser caldria que hi afegim elements decoratius?
STR_3419 :{SMALLFONT}{BLACK}Per construir decoracions damunt d'altres elements decoratius o aixecades a l'aire, manteniu premuda la tecla «Maj» i moveu el ratolí per escollir-ne l'alçada...
STR_3419 :{SMALLFONT}{BLACK}Per construir decoracions damunt d'altres elements decoratius o aixecades a l'aire, manteniu premuda la tecla {LEFTGUILLEMET}Maj{RIGHTGUILLEMET} i moveu el ratolí per escollir-ne l'alçada...
STR_3420 :{SMALLFONT}{BLACK}Alguns elements decoratius es poden repintar un cop s'han construit...
STR_3421 :{SMALLFONT}{BLACK}Afegim una mica de música a l'atracció...
STR_3422 :{SMALLFONT}{BLACK}Construïm una muntanya russa!
@ -3441,7 +3441,7 @@ STR_3429 :{SMALLFONT}{BLACK}No. Això no funciona! Mireu les marques d'alçad
STR_3430 :{SMALLFONT}{BLACK}Per assegurar-nos que el tren és capaç de fer la volta sencera, cada pujada hauria de ser una mica menys alta que l'anterior...
STR_3431 :{SMALLFONT}{BLACK}Molt millor! El nostre tren hauria d'aconseguir passar la pujada. Provem ara una via més embolicada...
STR_3432 :{SMALLFONT}{BLACK}Necessitem baixar la velocitat del tren abans de l'últim revolt i que arribi a l'andana. Afegim-hi uns frens...
STR_3433 :{SMALLFONT}{BLACK}I finalment, afegirem uns «frens de bloc», que permeten que dos trens circulin pel mateix circuit de manera segura...
STR_3433 :{SMALLFONT}{BLACK}I finalment, afegirem uns {LEFTGUILLEMET}frens de bloc{RIGHTGUILLEMET}, que permeten que dos trens circulin pel mateix circuit de manera segura...
STR_3434 :{SMALLFONT}{BLACK}Provem l'atracció i comprovem si funciona!
STR_3435 :{SMALLFONT}{BLACK}Bé! Funciona! Afegim-hi els camins d'entrada i sortida i obrim la muntanya russa per als nostres visitants...
STR_3436 :{SMALLFONT}{BLACK}Mentre esperem els primers passatgers, podem decorar l'atracció...
@ -3474,7 +3474,7 @@ STR_5132 :Repara totes les atraccions
STR_5133 :{SMALLFONT}{BLACK}Ajusta el propietari d'una àrea més petita.
STR_5134 :{SMALLFONT}{BLACK}Ajusta el propietari d'una àrea més gran.
STR_5135 :{SMALLFONT}{BLACK}Propietaris i drets de construcció
STR_5136 :Drets del terreny
STR_5136 :Drets de construcció
STR_5137 :Desactiva límits de funcionament
STR_5138 :{SMALLFONT}{WINDOW_COLOUR_2}{STRINGID}
STR_5139 :{WHITE}{STRINGID}
@ -3512,7 +3512,7 @@ STR_5170 :{SMALLFONT}{BLACK}Posa el nom dels usuaris del xat del Twitch als v
STR_5171 :Vigila als usuaris del xat
STR_5172 :{SMALLFONT}{BLACK}Vigila i dóna informació rellevant de què fan els visitants que porten el nom d'algun usuari del xat del Twitch.
STR_5173 :Mostra el xat com a notícies
STR_5174 :{SMALLFONT}{BLACK}Mostra els missatges del xat del Twitch precedits per «!news» per rebre les notificacions durant la partida.
STR_5174 :{SMALLFONT}{BLACK}Mostra els missatges del xat del Twitch precedits per {LEFTGUILLEMET}!news{RIGHTGUILLEMET} per rebre les notificacions durant la partida.
STR_5175 :Escriu el nom del canal Twitch
STR_5176 :Activa la integració del Twitch
STR_5177 :Mode de pantalla:
@ -3741,7 +3741,7 @@ STR_5399 :Prem el botó de parada per continuar editant-la.
STR_5400 :Aquesta seqüència no es pot editar.
STR_5401 :Crea una nova seqüència per al menú principal i poder fer-hi canvis.
STR_5402 :No s'ha pogut carregar la seqüència per al menú principal.
STR_5403 :Potser no hi ha cap ordre de «Carrega» o d'«Espera» o bé la partida desada no és vàlida.
STR_5403 :Potser no hi ha cap ordre de {LEFTGUILLEMET}Carrega{RIGHTGUILLEMET} o d'{LEFTGUILLEMET}Espera{RIGHTGUILLEMET} o bé la partida desada no és vàlida.
STR_5404 :El nom ja existeix.
STR_5405 :Escriviu un nom per a la partida
STR_5406 :Escriviu un nom per a la seqüència
@ -3768,7 +3768,7 @@ STR_5426 :Acaba
STR_5427 :Coordenades:
STR_5428 :Rotacions antihoràries:
STR_5429 :Nivell de zoom:
STR_5430 :Segons que cal esperar:
STR_5430 :Mil·lisegons que cal esperar:
STR_5431 :Partida que s'ha de carregar:
STR_5432 :Ordre:
STR_5433 :Seqüències del menú principal
@ -3777,7 +3777,7 @@ STR_5435 :Canvia el nom de la desada
STR_5436 :Edita seqüències del menú principal...
STR_5437 :No s'ha escollit cap desada
STR_5438 :No es poden fer canvis mentre l'editor d'ordres estigui obert.
STR_5439 :Cal una ordre d'espera d'almenys 4 segons per a una ordre de «Torna a començar».
STR_5439 :Cal una ordre d'espera d'almenys 4 segons per a una ordre de {LEFTGUILLEMET}Torna a començar{RIGHTGUILLEMET}.
STR_5440 :Minimitza la pantalla completa si es perd el focus
STR_5441 :{SMALLFONT}{BLACK}Identifica les atraccions per tipus de via.{NEWLINE}Així els vehicles després{NEWLINE}poden modificar-se (com al RCT1).
STR_5442 :Força la valoració del parc:
@ -4088,7 +4088,7 @@ STR_5778 :Construït fa {COMMA16} anys
STR_5779 :Ingressos: {CURRENCY2DP} per hora
STR_5780 :Cost de funcionament: {CURRENCY2DP} per hora
STR_5781 :Cost de funcionament desconegut
STR_5782 :Esteu connectat. Premeu «{STRING}» per xatejar.
STR_5782 :Esteu connectat. Premeu {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET} per xatejar.
STR_5783 :{WINDOW_COLOUR_2}Escenari blocat
STR_5784 :{BLACK}Completeu els escenaris anteriors per desblocar-lo.
STR_5785 :No es pot canviar el nom del grup...
@ -4097,7 +4097,7 @@ STR_5787 :{COMMA32} jugadors connectats
STR_5788 :Interval de revisió per defecte:
STR_5789 :Desactiva els efectes de llamps
STR_5790 :{SMALLFONT}{BLACK}Activa l'estil de pagaments del RCT1{NEWLINE}(es podran editar tant els preus d'entrada al parc com el de les entrades a les atraccions).
STR_5791 :{SMALLFONT}{BLACK}Estableix la fiabilitat de totes les atraccions al 100%{NEWLINE}i n'estableix la data de construcció a «aquest any».
STR_5791 :{SMALLFONT}{BLACK}Estableix la fiabilitat de totes les atraccions al 100%{NEWLINE}i n'estableix la data de construcció a {LEFTGUILLEMET}aquest any{RIGHTGUILLEMET}.
STR_5792 :{SMALLFONT}{BLACK}Repara atraccions avariades
STR_5793 :{SMALLFONT}{BLACK}Esborra l'historial de sinistres de les atraccions,{NEWLINE}i els visitants no es queixaran de que no són segures.
STR_5794 :{SMALLFONT}{BLACK}Alguns escenaris desactiven l'edició{NEWLINE}d'algunes atraccions del parc.{NEWLINE}Aquesta trampa elimina aquesta restricció.
@ -4126,7 +4126,7 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
STR_5815 :{SMALLFONT}{BLACK}Mostra el comptador de FPS del joc.
STR_5816 :{SMALLFONT}{BLACK}Estableix la relació d'escala del joc.{NEWLINE}Sol ser útil quan es juga amb{NEWLINE}pantalles d'alta resolució.
STR_5817 :{SMALLFONT}{BLACK}[Requereix renderitzat per maquinari]{NEWLINE}Estableix el tipus d'escalat de la interfície gràfica.
STR_5818 :{SMALLFONT}{BLACK}[Requereix renderitzat per maquinari]{NEWLINE}Usa el mètode «nearest neighbour»{NEWLINE}quan s'estableix l'escalat de finestres{NEWLINE}a valors enters (1, 2, 3...).
STR_5818 :{SMALLFONT}{BLACK}[Requereix renderitzat per maquinari]{NEWLINE}Usa el mètode {LEFTGUILLEMET}nearest neighbour{RIGHTGUILLEMET}{NEWLINE}quan s'estableix l'escalat de finestres{NEWLINE}a valors enters (1, 2, 3...).
STR_5819 :{SMALLFONT}{BLACK}[Requereix renderitzat per maquinari]{NEWLINE}Posa la partida en pausa{NEWLINE}si s'activa l'Steam.
STR_5820 :{SMALLFONT}{BLACK}Minimitza el joc si es perd el focus{NEWLINE}mentre s'està en mode de pantalla completa.
STR_5821 :{SMALLFONT}{BLACK}Canvia el color del marcador de construcció quan s'estan construint{NEWLINE}atraccions, camins, botigues, estands, decoracions...
@ -4144,7 +4144,7 @@ STR_5832 :{SMALLFONT}{BLACK}Mostra les alçades com a unitats genèriques (-2
STR_5833 :{SMALLFONT}{BLACK}Canvia el format de les dates.
STR_5834 :{SMALLFONT}{BLACK}Trieu quin dispositiu de so ha de fer servir l'OpenRCT2.
STR_5835 :{SMALLFONT}{BLACK}Silencia el joc si la finestra perd el focus.
STR_5836 :{SMALLFONT}{BLACK}Seleccioneu la peça de música per al menú principal.{NEWLINE}Si seleccioneu el tema de l'RCT1, cal que copieu «data/css17.dat» de la carpeta del RCT1 al directori del RCT2 com a «data/css50.dat», o bé establiu correctament la carpeta del RCT1 a la pestanya d'altres opcions.
STR_5836 :{SMALLFONT}{BLACK}Seleccioneu la peça de música per al menú principal.{NEWLINE}Si seleccioneu el tema de l'RCT1, cal que copieu {LEFTGUILLEMET}data/css17.dat{RIGHTGUILLEMET} de la carpeta del RCT1 al directori del RCT2 com a {LEFTGUILLEMET}data/css50.dat{RIGHTGUILLEMET}, o bé establiu correctament la carpeta del RCT1 a la pestanya d'altres opcions.
STR_5837 :{SMALLFONT}{BLACK}Crea i gestiona els temes de la interfície personalitzats.
STR_5838 :{SMALLFONT}{BLACK}Mostra un botó per a la finestra de finances a la barra d'eines.
STR_5839 :{SMALLFONT}{BLACK}Mostra un botó per a la finestra de recerques a la barra d'eines.
@ -4310,7 +4310,7 @@ STR_5998 :Afegeix diners
STR_5999 :Estableix quantitat de diners
STR_6000 :Introduïu el valor nou
STR_6001 :Activa els efectes d'il·luminació (experimental)
STR_6002 :{SMALLFONT}{BLACK}Els fanals i atraccions encendran els seus llums per la nit.{NEWLINE}Cal que s'activi i utilitzi el motor gràfic de «Renderitzat per maquinari».
STR_6002 :{SMALLFONT}{BLACK}Els fanals i atraccions encendran els seus llums per la nit.{NEWLINE}Cal que s'activi i utilitzi el motor gràfic de {LEFTGUILLEMET}Renderitzat per maquinari{RIGHTGUILLEMET}.
STR_6003 :Vista retallada
STR_6004 :Vista retallada
STR_6005 :Activa la vista retallada
@ -4364,6 +4364,84 @@ STR_6052 :El mapa d'alçades és massa gran i es retallarà
STR_6053 :Aquest mapa d'alçades no es pot normalitzar
STR_6054 :Només es poden usar bitmaps de 24 bits
STR_6055 :Fitxer de mapa d'alçades de l'OpenRCT2
STR_6056 :{SMALLFONT}{BLACK}Botó de silenci
STR_6057 :{SMALLFONT}{BLACK}Mostra un botó a la barra d'eines per activar o silenciar el so.
STR_6058 :Silencia
STR_6059 :{RIGHTGUILLEMET}
STR_6060 :Mostra animacions de compres
STR_6061 :{SMALLFONT}{BLACK}Mostra un efecte mostrant les compres{NEWLINE}que fan els visitants.
STR_6062 :{OUTLINE}{GREEN}+{CURRENCY2DP}
STR_6063 :{OUTLINE}{RED}-{CURRENCY2DP}
STR_6064 :Compra tots els terrenys
STR_6065 :Registra accions d'usuari
STR_6066 :{SMALLFONT}{BLACK}Registra totes les accions d'usuari en un arxiu a la vostra carpeta.
STR_6067 :S'ha iniciat el servidor.
STR_6068 :S'ha apagat el servidor.
STR_6069 :El/la {STRING} està expulsat per en/la {STRING}.
STR_6070 :El/la {STRING} ha estat afegit al grup {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET} per en/la {STRING}.
STR_6071 :El/la {STRING} ha creat un grup de jugadors nou: {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}
STR_6072 :El/la {STRING} ha esborrat el grup de jugadors {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6073 :El/la {STRING} ha editat els permisos del grup de jugadors {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6074 :El/la {STRING} ha canviat el nom del grup de {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET} a {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6075 :El/la {STRING} ha canviat el grup de jugadors per defecte a {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6076 :El/la {STRING} ha usat/commutat la trampa {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6077 :Afegeix diners
STR_6078 :El/la {STRING} ha construït l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6079 :El/la {STRING} ha retirat l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6080 :El/la {STRING} ha modificat l'aparença de l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6081 :El/la {STRING} ha tancat l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6082 :El/la {STRING} ha obert l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6083 :El/la {STRING} ha posat en prova l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6084 :El/la {STRING} ha modificat les opcions dels vehicles de l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6085 :El/la {STRING} ha modificat les opcions d'atracció de {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6086 :El/la {STRING} ha canviat el nom de l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET} a {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6087 :El/la {STRING} ha canviat el preu de l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET} a {STRING}
STR_6088 :El/la {STRING} ha canviat el preu secunadri de l'atracció {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET} a {STRING}.
STR_6089 :El/la {STRING} ha canviat el nom del parc {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET} a {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6090 :El/la {STRING} ha obert el parc.
STR_6091 :El/la {STRING} ha tancat el parc.
STR_6092 :El/la {STRING} ha canviat el preu de l'entrada al parc a {STRING}.
STR_6093 :El/la {STRING} ha afegit decoracions.
STR_6094 :El/la {STRING} ha tret decoracions.
STR_6095 :El/la {STRING} ha editat decoracions.
STR_6096 :El/la {STRING} ha canviat el nom del senyal a {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6097 :El/la {STRING} ha construït una peça de la via de {LEFTGUILLEMET}{STRING}{RIGHTGUILLEMET}.
STR_6098 :El/la {STRING} ha tret una peça de via.
STR_6099 :Us heu connectat al servidor.
STR_6100 :Us heu desconnectat del servidor.
STR_6101 :Les atraccions no perden valor
STR_6102 :{SMALLFONT}{BLACK}El valor de les atraccions no disminuirà amb el pas del temps, de manera que els visitants no pensaran de cop que l'atracció és massa cara.
STR_6103 :{SMALLFONT}{BLACK}Aquesta opció està desactivada si es juga en xarxa.
STR_6104 :Muntanya russa amb tirabuixons
STR_6105 :Hipermuntanya russa
STR_6106 :Atracció de cotxes
STR_6107 :Monster Trucks
STR_6108 :Tornado d'acer
STR_6109 :Hiper-Twister
STR_6110 :Muntanya russa infantil
STR_6111 :Minimuntanya russa clàssica
STR_6112 :Muntanya russa compacta amb vies d'acer per la qual els vagons passen per tirabuixons i inversions.
STR_6113 :Una muntanya russa alta sense inversions, amb llargues caigudes, alta velocitat, vagons còmodes i amb només unes barres de subjecció.
STR_6114 :Els passatgers viatgen poc a poc en vehicles autopropulsats sobre la ruta que segueix la via.
STR_6115 :Camions 4x4 gegants i autopropulsats que poden pujar per pendents empinades.
STR_6116 :Muntanya russa amb vagons amples que llisca per una via d'acer llisa, passant per una bona varietat d'inversions.
STR_6117 :Els passatgers drets amb unes subjeccions simples dintre els vagons travessen i gaudeixen de caigudes i girs enrevessats, així com d'una part {LEFTGUILLEMET}a l'aire lliure{RIGHTGUILLEMET} damunt dels turons.
STR_6118 :Muntanya russa suau per gent que encara no s'atreveix amb muntanyes russes grans.
STR_6119 :Una muntanya russa barata i fàcil de construir, però amb una alçada limitada.
STR_6120 :{BABYBLUE}Nou vehicle disponible per {STRINGID}:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}Amplia els drets de construcció del parc fins a les vores del mapa.
STR_6122 :No hi ha prou muntanyes russes en aquest escenari!
STR_6123 :S'ha produït un error carregant els objectes del parc.
STR_6124 :Nom de l'objecte
STR_6125 :Tipus d'objecte
STR_6126 :Tipus desconegut
STR_6127 :Arxiu: {STRING}
STR_6128 :L'arxiu no s'ha pogut carregar ja que està danyat o bé els objectes referenciats són desconeguts. Se'n dóna una llista a continuació.
STR_6129 :Copia l'objecte seleccionat al porta-retalls
STR_6130 :Copia la llista sencera al porta-retalls
STR_6131 :Origen de l'objecte
STR_6132 :Ignora recerques pendents
STR_6133 :{SMALLFONT}{BLACK}Permet l'accés a atraccions i decoracions que encara no s'han recercat.
#############
# Scenarios #
@ -4388,7 +4466,7 @@ STR_DTLS :Construïu un parc temàtic des de l'inici al voltant d'un llac.
<Diamond Heights>
STR_SCNR :Els cims diamantins
STR_PARK :Els cims diamantins
STR_DTLS :«Els cims diamantins» ja és un parc exitós amb grans atraccions. Desenvolupeu-lo i dobleu-ne el valor.
STR_DTLS :{LEFTGUILLEMET}Els cims diamantins{RIGHTGUILLEMET} ja és un parc exitós amb grans atraccions. Desenvolupeu-lo i dobleu-ne el valor.
<Evergreen Gardens>
STR_SCNR :Els jardins perennes
@ -4506,7 +4584,7 @@ STR_SCNR :Diversiotopia
STR_PARK :Diversiotopia
STR_DTLS :Cobrint ambdues bandes d'una autopista, aquest parc ja opera amb algunes atraccions.
<Haunted Harbor>
<Haunted Harbour>
STR_SCNR :El port embruixat
STR_PARK :El port embruixat
STR_DTLS :Les autoritats locals han acordat vendre barat el terreny proper d'aquest parc coster amb la condició que es preservin algunes atraccions.
@ -4609,7 +4687,7 @@ STR_DTLS :L'autoritat local no permetrà campanyes de màrqueting. El parc ha
<Giggle Downs>
STR_SCNR :Baixades de riure
STR_PARK :Baixades de riure
STR_DTLS :Un «steeplechase» de quatre carrils és la peça centra d'aquest parc en expansió.
STR_DTLS :Un {LEFTGUILLEMET}steeplechase{RIGHTGUILLEMET} de quatre carrils és la peça centra d'aquest parc en expansió.
<Mineral Park>
STR_SCNR :Parc mineral
@ -4802,8 +4880,8 @@ STR_DTLS :
## Misc parks from RCT1
# Had no details
<Fort Anachronism>
STR_SCNR :El castell «Fort Anachronism»
STR_PARK :El castell «Fort Anachronism»
STR_SCNR :El castell {LEFTGUILLEMET}Fort Anachronism{RIGHTGUILLEMET}
STR_PARK :El castell {LEFTGUILLEMET}Fort Anachronism{RIGHTGUILLEMET}
STR_DTLS :
#####################

View File

@ -890,7 +890,7 @@ STR_0884 :Nahrát krajinu
STR_0885 :Uložit krajinu
STR_0886 :Ukončit hru
STR_0887 :Ukončit editor scénáře
STR_0888 :Ukončit návrh horské dráhy
STR_0888 :Ukončit návrhář trati
STR_0889 :Ukončit správu návrhů tratí
STR_0890 :<removed string - do not use>
STR_0891 :Snímek obrazovky
@ -3216,7 +3216,7 @@ STR_3203 :Nastavení výzkumu
STR_3204 :Výběr nastavení
STR_3205 :Výběr cílů
STR_3206 :Uložit scénář
STR_3207 :Návrh horské dráhy
STR_3207 :Návrhář trati
STR_3208 :Správa návrhů tratí
STR_3209 :Zpět k předchozímu kroku:
STR_3210 :Jít na následující krok:
@ -3344,7 +3344,7 @@ STR_3331 :Cesta od vstupu do parku k hraně mapy není kompletní, nebo je p
STR_3332 :Vstup do parku je špatně otočený, nebo z něj nevede cesta k hraně mapy
STR_3333 :Exportovat plug-in objekty s uložením hry
STR_3334 :{SMALLFONT}{BLACK}Vyberte, zda ukládat data plug-in objektů (add-in data nejsou dodána s hlavním produktem) do souborů uložených her a scénářů, což dovolí jejích načítání na těmi, kdo nemají tyto dodatečná data objektů.
STR_3335 :Návrh horské dráhy - Vyberte typ atrakce a vozů
STR_3335 :Návrhář trati - Vyberte typ atrakce a vozů
STR_3336 :Správa návrhu trati - Vyberte typ trati
STR_3337 :<not used anymore>
STR_3338 :{BLACK}Vlastnoručně navržené
@ -3353,7 +3353,7 @@ STR_3340 :{BLACK}{COMMA16} návrhy dostupné nebo vlastnoručně navržené
STR_3341 :{SMALLFONT}{BLACK}Herní nástroje
STR_3342 :Editor scénáře
STR_3343 :Konvertovat uloženou hru na scénář
STR_3344 :Návrh horské dráhy
STR_3344 :Návrhář trati
STR_3345 :Správa návrhu trati
STR_3346 :Nelze uložit návrh trati...
STR_3347 :Trať je příliš velká, obsahuje příliš mnoho prvků, nebo příliš rozsáhlé kulisy
@ -4440,6 +4440,12 @@ STR_6127 :Soubor: {STRING}
STR_6128 :Soubor se nepodařilo načíst, protože využívá objekty, z nichž některé jsou porušené nebo zcela chybí. Seznam takových objektů je k dispozici níže.
STR_6129 :Kopírovat vybrané do schránky
STR_6130 :Kopírovat celý seznam do schránky
STR_6131 :Zdroj objektu
STR_6132 :Ignorovat nutnost výzkumu
STR_6133 :{SMALLFONT}{BLACK}Povolí přístup k atrakcím a kulisám, které ještě nebyly vyzkoumány
STR_6134 :Odstranit kulisy
STR_6135 :Klient zaslal neplatný požadavek
STR_6136 :Server zaslal neplatný požadavek
###############################################################################
## RCT2 Objects

View File

@ -850,7 +850,7 @@ STR_0845 :<not used anymore>
STR_0846 :<not used anymore>
STR_0847 :Über `OpenRCT2'
STR_0848 :RollerCoaster Tycoon 2
STR_0849 :{WINDOW_COLOUR_2}Version 2.01.032
STR_0849 :<removed string - do not use>
STR_0850 :{WINDOW_COLOUR_2}Copyright {COPYRIGHT} 2002 Chris Sawyer, alle Rechte vorbehalten
STR_0851 :{WINDOW_COLOUR_2}Entworfen und programmiert von Chris Sawyer
STR_0852 :{WINDOW_COLOUR_2}Grafik von Simon Foster
@ -859,13 +859,13 @@ STR_0854 :{WINDOW_COLOUR_2}Zusätzliche Sounds aufgenommen von David Ellis
STR_0855 :{WINDOW_COLOUR_2}Repräsentation von Jacqui Lyons bei Marjacq Ltd.
STR_0856 :{WINDOW_COLOUR_2}Dank gilt:
STR_0857 :{WINDOW_COLOUR_2}Peter James Adcock, Joe Booth und John Wardley
STR_0858 :{WINDOW_COLOUR_2}
STR_0859 :{WINDOW_COLOUR_2}
STR_0860 :{WINDOW_COLOUR_2}
STR_0861 :
STR_0862 :
STR_0863 :
STR_0864 :
STR_0858 :<removed string - do not use>
STR_0859 :<removed string - do not use>
STR_0860 :<removed string - do not use>
STR_0861 :<removed string - do not use>
STR_0862 :<removed string - do not use>
STR_0863 :<removed string - do not use>
STR_0864 :<removed string - do not use>
STR_0865 :{STRINGID}
STR_0866 :{POP16}{STRINGID}
STR_0867 :{POP16}{POP16}{STRINGID}
@ -889,7 +889,7 @@ STR_0884 :Landschaft laden
STR_0885 :Landschaft speichern
STR_0886 :Spiel beenden
STR_0887 :Szenario-Editor beenden
STR_0888 :Achterbahn-Designer beenden
STR_0888 :Streckenentwurf-Designer beenden
STR_0889 :Streckenentwurf-Manager beenden
STR_0890 :<removed string - do not use>
STR_0891 :Screenshot
@ -2866,7 +2866,7 @@ STR_2856 :{WINDOW_COLOUR_2}Lehrgang
STR_2857 :{WINDOW_COLOUR_2}(Drücken Sie eine Taste oder klicken Sie mit der Maus, um die Kontrolle zu übernehmen)
STR_2858 :Marketingkampage kann nicht gestartet werden...
STR_2859 :OpenRCT2 läuft bereits
STR_2860 :Infogrames Interactive Credits...
STR_2860 :<removed string - do not use>
STR_2861 :{WINDOW_COLOUR_2}Lizenziert für Infogrames Interactive Inc.
STR_2862 :Musik...
STR_2863 :Musik
@ -2914,29 +2914,29 @@ STR_2904 :{WINDOW_COLOUR_2}Manic Mechanic: (Allister Brimble) Copyright {CO
STR_2905 :{WINDOW_COLOUR_2}Techno Torture: (Allister Brimble) Copyright {COPYRIGHT} Chris Sawyer
STR_2906 :{WINDOW_COLOUR_2}Sweat Dreams: (Allister Brimble) Copyright {COPYRIGHT} Chris Sawyer
STR_2907 :{WINDOW_COLOUR_2}What shall we do with the Drunken Sailor: (Anon/Allister Brimble) Copyright {COPYRIGHT} Chris Sawyer
STR_2908 :{WINDOW_COLOUR_2}Infogrames Interactive
STR_2909 :{WINDOW_COLOUR_2}Senior Producer: Thomas J. Zahorik
STR_2910 :{WINDOW_COLOUR_2}Executive Producer: Bill Levay
STR_2911 :{WINDOW_COLOUR_2}Senior Marketing Produktmanager: Scott Triola
STR_2912 :{WINDOW_COLOUR_2}V.P. Produktentwicklung: Scott Walker
STR_2913 :{WINDOW_COLOUR_2}General Manager: John Hurlbut
STR_2914 :{WINDOW_COLOUR_2}Direktor Qualitätssicherung (Q.A.): Michael Craighead
STR_2915 :{WINDOW_COLOUR_2}Q.A.-Zertifizierungsmanager: Kurt Boutin
STR_2916 :{WINDOW_COLOUR_2}Q.A.-Zertifizierungsleitung: Mark Huggins
STR_2917 :{WINDOW_COLOUR_2}Tester: Dena Irene Fitzgerald, Scott Rollins, Christopher McPhail
STR_2918 :{WINDOW_COLOUR_2}Clif McClure, Erik Maramaldi, Erik Jeffery
STR_2919 :{WINDOW_COLOUR_2}Marketingdirektor: Ann Marie Bland
STR_2920 :{WINDOW_COLOUR_2}Creative Services Manager: Steve Martin
STR_2921 :{WINDOW_COLOUR_2}Redaktions- & Dokumentationsmanager: Elizabeth Mackney
STR_2922 :{WINDOW_COLOUR_2}Grafikdesigner: Paul Anselmi
STR_2923 :{WINDOW_COLOUR_2}Copywriter: Kurt Carlson
STR_2924 :{WINDOW_COLOUR_2}Besonderer Dank geht an: Peter Matiss
STR_2925 :{WINDOW_COLOUR_2}Technischer Spezialist: Ken Edwards
STR_2926 :{WINDOW_COLOUR_2}Manager Technikabteilung: Luis Rivas
STR_2927 :{WINDOW_COLOUR_2}Leitung Kompatibilätsanalyse: Geoffrey Smith
STR_2928 :{WINDOW_COLOUR_2}Kompatibilätsanalyse: Jason Cordero, Burke McQuinn, Kim Jardin
STR_2929 :{WINDOW_COLOUR_2}Leitender Tester: Daniel Frisoli
STR_2930 :{WINDOW_COLOUR_2}Senior Tester: Matt Pantaleoni
STR_2908 :<removed string - do not use>
STR_2909 :<removed string - do not use>
STR_2910 :<removed string - do not use>
STR_2911 :<removed string - do not use>
STR_2912 :<removed string - do not use>
STR_2913 :<removed string - do not use>
STR_2914 :<removed string - do not use>
STR_2915 :<removed string - do not use>
STR_2916 :<removed string - do not use>
STR_2917 :<removed string - do not use>
STR_2918 :<removed string - do not use>
STR_2919 :<removed string - do not use>
STR_2920 :<removed string - do not use>
STR_2921 :<removed string - do not use>
STR_2922 :<removed string - do not use>
STR_2923 :<removed string - do not use>
STR_2924 :<removed string - do not use>
STR_2925 :<removed string - do not use>
STR_2926 :<removed string - do not use>
STR_2927 :<removed string - do not use>
STR_2928 :<removed string - do not use>
STR_2929 :<removed string - do not use>
STR_2930 :<removed string - do not use>
STR_2931 :{WINDOW_COLOUR_2}
STR_2932 :{WINDOW_COLOUR_2}
STR_2933 :{WINDOW_COLOUR_2}
@ -3213,7 +3213,7 @@ STR_3203 :Einrichtung der Erfindungsliste
STR_3204 :Optionsauswahl
STR_3205 :Zielauswahl
STR_3206 :Szenario speichern
STR_3207 :Achterbahn-Designer
STR_3207 :Streckenentwurf-Designer
STR_3208 :Streckenentwurf-Manager
STR_3209 :Zurück zum vorherigen Schritt:
STR_3210 :Weiter zum nächsten Schritt:
@ -3341,7 +3341,7 @@ STR_3331 :Fußweg vom Parkeingang zum Kartenrand entweder nicht vollständig
STR_3332 :Parkeingang liegt verkehrt herum oder besitzt keinen Fußweg zum Kartenrand
STR_3333 :Zusatzobjekte bei gespeich. Spielen exportieren
STR_3334 :{SMALLFONT}{BLACK}Wählen Sie aus, ob zusätzliche Plugin-Objektdaten (Zusatzdaten, die nicht zum Hauptprodukt gehören) in Spielständen oder Szenariodateien gespeichert werden sollen, damit jemand, der nicht über die zusätzlichen Objektdaten verfügt, die gespeicherten Daten laden kann
STR_3335 :Achterbahn-Designer - Bahnarten & Fahrzeuge auswählen
STR_3335 :Streckenentwurf-Designer - Bahnarten & Fahrzeuge auswählen
STR_3336 :Streckenentwurf-Manager - Bahnart auswählen
STR_3337 :Six Flags-Park
STR_3338 :{BLACK}Eigenes Layout entwerfen
@ -3350,7 +3350,7 @@ STR_3340 :{BLACK}{COMMA16} Entwürfe verfügbar oder eigenes Layout entwerfen
STR_3341 :{SMALLFONT}{BLACK}Spielwerkzeuge
STR_3342 :Szenario-Editor
STR_3343 :Gespeichertes Spiel in Szenario umwandeln
STR_3344 :Achterbahn-Designer
STR_3344 :Streckenentwurf-Designer
STR_3345 :Streckenentwurf-Manager
STR_3346 :Streckenentwurf kann nicht gespeichert werden...
STR_3347 :Bahn ist zu lang, enthält zu viele Elemente oder Szenerie ist zu zerstreut
@ -3734,7 +3734,7 @@ STR_5396 :{SMALLFONT}{BLACK}Titelsequenz neu laden, falls sie außerhalb des
STR_5397 :Kann nur im Titelbildschirm verwendet werden
STR_5398 :Titelsequenz kann, während sie läuft, nicht geändert werden
STR_5399 :Titelsequenz stoppen, um das Bearbeiten fortzusetzen
STR_5400 :Diese Titelsequenz kann nicht geändert werden
STR_5400 :Diese Titelsequenz kann{NEWLINE}nicht geändert werden
STR_5401 :Erstellen Sie eine neue Titelsequenz, um sie zu bearbeiten
STR_5402 :Titelsequenz konnte nicht geladen werden
STR_5403 :Möglicherweise kein `Laden'-Befehl, `Warten'-Befehl oder ein ungültiger Spielstand vorhanden
@ -3764,7 +3764,7 @@ STR_5426 :Ende
STR_5427 :Koordinaten:
STR_5428 :Drehungen gegen Uhrzeigersinn:
STR_5429 :Zoomstufe:
STR_5430 :Zu wartende Sekunden:
STR_5430 :Zu wartende Millisekunden:
STR_5431 :Zu ladender Spielstand:
STR_5432 :Befehl:
STR_5433 :Titelsequenzen
@ -4320,9 +4320,9 @@ STR_6016 :Modifiziere Kachel
STR_6017 :Bitte verlangsamen Sie Ihr Tempo
STR_6018 :Streckenbau - Bogen links
STR_6019 :Streckenbau - Bogen rechts
STR_6020 :Streckenbau - Verwende Standard Abschnitt
STR_6020 :Streckenbau - Verwende Standardabschnitt
STR_6021 :Streckenbau - Neigung unten
STR_6022 :Streckenbau - Neigung Oben
STR_6022 :Streckenbau - Neigung oben
STR_6023 :Streckenbau - Umschalten Kettenlift
STR_6024 :Streckenbau - Überhöhung links
STR_6025 :Streckenbau - Überhöhung rechts
@ -4423,6 +4423,23 @@ STR_6119 :Eine günstige und einfach zu bauende Achterbahn, jedoch mit begren
STR_6120 :{BABYBLUE}Neues Fahrzeug für {STRINGID} ist jetzt verfügbar:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}Erweitert die Landrechte des Parks{NEWLINE}bis zum Rand der Karte
STR_6122 :Dieses Szenario enthält zu wenige Achterbahnen!
STR_6124 :Objektname
STR_6125 :Objekttyp
STR_6126 :Unbekannter Typ
STR_6127 :Datei: {STRING}
STR_6128 :Die Datei konnte aufgrund fehlender oder beschädigter Objekte nicht geladen werden. Eine Liste dieser Elemente ist nachstehend aufgeführt.
STR_6129 :Ausgewählte Elemente kopieren
STR_6130 :Vollständige Liste kopieren
STR_6131 :Objektquelle
STR_6132 :Forschungsstatus ignorieren
STR_6133 :{SMALLFONT}{BLACK}Ermöglicht den Zugriff auf Attraktionen und Szenerie, die bisher noch nicht erforscht wurden
STR_6134 :Szenerie entfernen
STR_6135 :Ungültige Anfrage durch den Client
STR_6136 :Ungültige Anfrage durch den Server
STR_6137 :OpenRCT2, ein freier und quelloffener Klon von RollerCoaster Tycoon 2.
STR_6138 :OpenRCT2 ist das Werk vieler Autoren, eine vollständige Liste befindet sich in {OPENQUOTES}contributors.md{ENDQUOTES}. Für weitere Informationen, besuche http://github.com/OpenRCT2/OpenRCT2
STR_6139 :Alle Produkt- und Firmennamen sind Eigentum ihrer jeweiligen Inhaber.{NEWLINE}Die Nutzung dieser stellt keine Zugehörigkeit oder Unterstützung dar.
STR_6140 :Changelog...
#############
# Scenarios #
@ -4565,9 +4582,9 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :In diesem Park zu beiden Seiten einer Autobahn sind bereits verschiedene Attraktionen in Betrieb.
<Haunted Harbor>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :Die örtlichen Behörden haben zugestimmt, dem kleinen Park an der Küste umliegendes Gelände günstig zu verkaufen, unter der Bedingung, dass bestimmte Attraktionen erhalten werden.
<Fun Fortress>

View File

@ -851,7 +851,7 @@ STR_0845 :<removed string - do not use>
STR_0846 :<removed string - do not use>
STR_0847 :About 'OpenRCT2'
STR_0848 :RollerCoaster Tycoon 2
STR_0849 :{WINDOW_COLOUR_2}Version 2.01.028
STR_0849 :<removed string - do not use>
STR_0850 :{WINDOW_COLOUR_2}Copyright {COPYRIGHT} 2002 Chris Sawyer, all rights reserved
STR_0851 :{WINDOW_COLOUR_2}Designed and programmed by Chris Sawyer
STR_0852 :{WINDOW_COLOUR_2}Graphics by Simon Foster
@ -860,13 +860,13 @@ STR_0854 :{WINDOW_COLOUR_2}Additional sounds recorded by David Ellis
STR_0855 :{WINDOW_COLOUR_2}Representation by Jacqui Lyons at Marjacq Ltd.
STR_0856 :{WINDOW_COLOUR_2}Thanks to:
STR_0857 :{WINDOW_COLOUR_2}Peter James Adcock, Joe Booth, and John Wardley
STR_0858 :{WINDOW_COLOUR_2}
STR_0859 :{WINDOW_COLOUR_2}
STR_0860 :{WINDOW_COLOUR_2}
STR_0861 :
STR_0862 :
STR_0863 :
STR_0864 :
STR_0858 :<removed string - do not use>
STR_0859 :<removed string - do not use>
STR_0860 :<removed string - do not use>
STR_0861 :<removed string - do not use>
STR_0862 :<removed string - do not use>
STR_0863 :<removed string - do not use>
STR_0864 :<removed string - do not use>
STR_0865 :{STRINGID}
STR_0866 :{POP16}{STRINGID}
STR_0867 :{POP16}{POP16}{STRINGID}
@ -890,7 +890,7 @@ STR_0884 :Load Landscape
STR_0885 :Save Landscape
STR_0886 :<removed string - do not use>
STR_0887 :Quit Scenario Editor
STR_0888 :Quit Roller Coaster Designer
STR_0888 :Quit Track Designer
STR_0889 :Quit Track Designs Manager
STR_0890 :<removed string - do not use>
STR_0891 :Screenshot
@ -2867,7 +2867,7 @@ STR_2856 :{WINDOW_COLOUR_2}Tutorial
STR_2857 :{WINDOW_COLOUR_2}(Press a key or mouse button to take control)
STR_2858 :Can't start marketing campaign...
STR_2859 :Another instance of OpenRCT2 is already running
STR_2860 :Infogrames Interactive credits...
STR_2860 :<removed string - do not use>
STR_2861 :{WINDOW_COLOUR_2}Licensed to Infogrames Interactive Inc.
STR_2862 :Music acknowledgements...
STR_2863 :Music acknowledgements
@ -2915,29 +2915,29 @@ STR_2904 :{WINDOW_COLOUR_2}Manic Mechanic: (Allister Brimble) copyright {CO
STR_2905 :{WINDOW_COLOUR_2}Techno Torture: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2906 :{WINDOW_COLOUR_2}Sweat Dreams: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2907 :{WINDOW_COLOUR_2}What shall we do with the Drunken Sailor: (Anon/Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2908 :{WINDOW_COLOUR_2}Infogrames Interactive
STR_2909 :{WINDOW_COLOUR_2}Senior Producer: Thomas J. Zahorik
STR_2910 :{WINDOW_COLOUR_2}Executive Producer: Bill Levay
STR_2911 :{WINDOW_COLOUR_2}Senior Marketing Product Manager: Scott Triola
STR_2912 :{WINDOW_COLOUR_2}V.P. of Product Development: Scott Walker
STR_2913 :{WINDOW_COLOUR_2}General Manager: John Hurlbut
STR_2914 :{WINDOW_COLOUR_2}Director of Quality Assurance: Michael Craighead
STR_2915 :{WINDOW_COLOUR_2}Q.A. Certification Manager: Kurt Boutin
STR_2916 :{WINDOW_COLOUR_2}Q.A. Certification Lead: Mark Huggins
STR_2917 :{WINDOW_COLOUR_2}Testers: Dena Irene Fitzgerald, Scott Rollins, Christopher McPhail
STR_2918 :{WINDOW_COLOUR_2}Clif McClure, Erik Maramaldi, Erik Jeffery
STR_2919 :{WINDOW_COLOUR_2}Director of Marketing: Ann Marie Bland
STR_2920 :{WINDOW_COLOUR_2}Manager of Creative Services: Steve Martin
STR_2921 :{WINDOW_COLOUR_2}Manager of Editorial & Documentation Services: Elizabeth Mackney
STR_2922 :{WINDOW_COLOUR_2}Graphic Designer: Paul Anselmi
STR_2923 :{WINDOW_COLOUR_2}Copywriter: Kurt Carlson
STR_2924 :{WINDOW_COLOUR_2}Special Thanks to: Peter Matiss
STR_2925 :{WINDOW_COLOUR_2}Engineering Specialist: Ken Edwards
STR_2926 :{WINDOW_COLOUR_2}Engineering Services Manager: Luis Rivas
STR_2927 :{WINDOW_COLOUR_2}Lead Compatibility Analyst: Geoffrey Smith
STR_2928 :{WINDOW_COLOUR_2}Compatibility Analysts: Jason Cordero, Burke McQuinn, Kim Jardin
STR_2929 :{WINDOW_COLOUR_2}Lead Tester: Daniel Frisoli
STR_2930 :{WINDOW_COLOUR_2}Senior Tester: Matt Pantaleoni
STR_2908 :<removed string - do not use>
STR_2909 :<removed string - do not use>
STR_2910 :<removed string - do not use>
STR_2911 :<removed string - do not use>
STR_2912 :<removed string - do not use>
STR_2913 :<removed string - do not use>
STR_2914 :<removed string - do not use>
STR_2915 :<removed string - do not use>
STR_2916 :<removed string - do not use>
STR_2917 :<removed string - do not use>
STR_2918 :<removed string - do not use>
STR_2919 :<removed string - do not use>
STR_2920 :<removed string - do not use>
STR_2921 :<removed string - do not use>
STR_2922 :<removed string - do not use>
STR_2923 :<removed string - do not use>
STR_2924 :<removed string - do not use>
STR_2925 :<removed string - do not use>
STR_2926 :<removed string - do not use>
STR_2927 :<removed string - do not use>
STR_2928 :<removed string - do not use>
STR_2929 :<removed string - do not use>
STR_2930 :<removed string - do not use>
STR_2931 :{WINDOW_COLOUR_2}
STR_2932 :{WINDOW_COLOUR_2}
STR_2933 :{WINDOW_COLOUR_2}
@ -3214,7 +3214,7 @@ STR_3203 :Invention List Set Up
STR_3204 :Options Selection
STR_3205 :Objective Selection
STR_3206 :Save Scenario
STR_3207 :Roller Coaster Designer
STR_3207 :Track Designer
STR_3208 :Track Designs Manager
STR_3209 :Back to Previous Step:
STR_3210 :Forward to Next Step:
@ -3342,7 +3342,7 @@ STR_3331 :Path from park entrance to map edge either not complete or too comp
STR_3332 :Park entrance is the wrong way round or has no path leading to the map edge
STR_3333 :Export plug-in objects with saved games
STR_3334 :{SMALLFONT}{BLACK}Select whether to save any additional plug-in object data required (add-in data not supplied with the main product) in saved game or scenario files, allowing them to be loaded by someone who doesn't have the additional object data
STR_3335 :Roller Coaster Designer - Select Ride Types & Vehicles
STR_3335 :Track Designer - Select Ride Types & Vehicles
STR_3336 :Track Designs Manager - Select Ride Type
STR_3337 :<removed string - do not use>
STR_3338 :{BLACK}Custom-designed layout
@ -3351,7 +3351,7 @@ STR_3340 :{BLACK}{COMMA16} designs available, or custom-designed layout
STR_3341 :{SMALLFONT}{BLACK}Game tools
STR_3342 :Scenario Editor
STR_3343 :Convert Saved Game to Scenario
STR_3344 :Roller Coaster Designer
STR_3344 :Track Designer
STR_3345 :Track Designs Manager
STR_3346 :Can't save track design...
STR_3347 :Ride is too large, contains too many elements, or scenery is too spread out
@ -4424,7 +4424,7 @@ STR_6112 :A compact steel-tracked roller coaster where the train travels thro
STR_6113 :A tall non-inverting roller coaster with large drops, high speed, and comfortable trains with only lap bar restraints
STR_6114 :Riders travel slowly in powered vehicles along a track-based route
STR_6115 :Powered giant 4 x 4 trucks which can climb steep slopes
STR_6116 :Wide roller coaster trains glide along smooth steel track, traveling through a variety of inversions
STR_6116 :Wide roller coaster trains glide along smooth steel track, travelling through a variety of inversions
STR_6117 :Sitting in comfortable trains with only simple lap restraints riders enjoy giant smooth drops and twisting track as well as plenty of 'air time' over the hills
STR_6118 :A gentle roller coaster for people who haven't yet got the courage to face the larger rides
STR_6119 :A cheap and easy to build roller coaster, but with a limited height
@ -4439,6 +4439,16 @@ STR_6127 :File: {STRING}
STR_6128 :The file could not be loaded as some of the objects referenced in it are missing or corrupt. A list of these objects is given below.
STR_6129 :Copy selected item to clipboard
STR_6130 :Copy entire list to clipboard
STR_6131 :Object source
STR_6132 :Ignore research status
STR_6133 :{SMALLFONT}{BLACK}Access rides and scenery that have not yet been invented
STR_6134 :Clear Scenery
STR_6135 :Client sent invalid request
STR_6136 :Server sent invalid request
STR_6137 :OpenRCT2, a free and open source clone of Roller Coaster Tycoon 2.
STR_6138 :OpenRCT2 is the work of many authors, a full list can be found in {OPENQUOTES}contributors.md{ENDQUOTES}. For more information, visit http://github.com/OpenRCT2/OpenRCT2
STR_6139 :All product and company names belong to their respective holders. Use of them does not imply any affiliation with or endorsement by them.
STR_6140 :Changelog...
#############
# Scenarios #
@ -4581,7 +4591,7 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Covering land both sides of a highway, this park has several rides already operating
<Haunted Harbor>
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :The local authority has agreed to sell nearby land cheaply to this small seaside park, on the condition that certain rides are preserved
@ -4654,7 +4664,7 @@ STR_DTLS :Develop this Roman-themed park by adding rides and roller coasters
<Swamp Cove>
STR_SCNR :Swamp Cove
STR_PARK :Swamp Cove
STR_DTLS :Built partly on a series of small islands, this park already has a pair of large roller coasters as its centerpiece
STR_DTLS :Built partly on a series of small islands, this park already has a pair of large roller coasters as its centrepiece
<Adrenaline Heights>
STR_SCNR :Adrenaline Heights
@ -4684,7 +4694,7 @@ STR_DTLS :The local authority will not allow any kind of advertising or promo
<Giggle Downs>
STR_SCNR :Giggle Downs
STR_PARK :Giggle Downs
STR_DTLS :A four lane steeplechase ride is the centerpiece of this expanding park
STR_DTLS :A four lane steeplechase ride is the centrepiece of this expanding park
<Mineral Park>
STR_SCNR :Mineral Park
@ -4781,7 +4791,7 @@ STR_DTLS :This historical park is only allowed to build older-styled rides
<Icarus Park>
STR_SCNR :Icarus Park
STR_PARK :Icarus Park
STR_DTLS :Develop this alien park to maximize its profit
STR_DTLS :Develop this alien park to maximise its profit
<Sunny Swamps>
STR_SCNR :Sunny Swamps

View File

@ -882,7 +882,6 @@ STR_0884 :Load Landscape
STR_0885 :Save Landscape
STR_0886 :Quit Game
STR_0887 :Quit Scenario Editor
STR_0888 :Quit Roller Coaster Designer
STR_0889 :Quit Track Designs Manager
STR_0890 :<removed string - do not use>
STR_0891 :Screenshot
@ -2395,7 +2394,7 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Covering land both sides of a highway, this park has several rides already operating
<Haunted Harbor>
<Haunted Harbour>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
STR_DTLS :The local authority has agreed to sell nearby land cheaply to this small seaside park, on the condition that certain rides are preserved

View File

@ -532,7 +532,7 @@ STR_0527 :Una montaña rusa de acero capaz de rizos verticales
STR_0528 :Los pasajeros viajan en botes hinchables por tubos semicirculares o totalmente cerrados.
STR_0529 :El tren de la mina corre por una vía de acero que recuerda las viejas vías del tren.
STR_0530 :Asientos colgados de un cable de acero viajan contínuamente desde un extremo a otro del recorrido
STR_0531 :Una montaña rusa compacta de acero donde los vagones circulan por rizos y sacachorscos.
STR_0531 :Una montaña rusa compacta de acero donde los vagones circulan por rizos y sacacorchos.
STR_0532 :
STR_0533 :
STR_0534 :Go-Karts autopropulsados con gasolina.
@ -3765,7 +3765,7 @@ STR_5426 :Fin
STR_5427 :Coordenadas:
STR_5428 :Rotaciones en contra del reloj:
STR_5429 :Nivel de enfoque
STR_5430 :Segundos a esperar:
STR_5430 :Tiempo en milisegundos:
STR_5431 :Partida a cargar:
STR_5432 :Comando:
STR_5433 :Secuencias del Menú Principal
@ -4405,6 +4405,36 @@ STR_6097 :{STRING} colocó una pieza de vía de la atracción '{STRING}'.
STR_6098 :{STRING} removió una pieza de la atracción.
STR_6099 :Te has conectado al servidor.
STR_6100 :Te has desconectado del servidor.
STR_6101 :Atracciones no disminuyen su valor.
STR_6102 :{SMALLFONT}{BLACK}El valor de una atracción no disminuye con el tiempo, así los visitantes no pensarán que una atracción es demasiado caro.
STR_6103 :{SMALLFONT}{BLACK}Esta opción está deshabilitada durante una partida multijugador.
STR_6104 :Montaña Rusa Sacacorchos
STR_6105 :Hipermontaña Rusa
STR_6106 :Atracción de Coches
STR_6107 :Monster Trucks
STR_6108 :Steel Twister
STR_6109 :Hyper-Twister
STR_6110 :Montaña Rusa Infantil
STR_6111 :Mini Montaña Rusa Clásica
STR_6112 :Una montaña rusa compacta de acero donde los vagones circulan por rizos y sacacorchos
STR_6113 :Una montaña rusa alta y que no se invierte con grandes caídas, alta velocidad y vagones confortables con sólo unas barras para sujetarse
STR_6114 :Los viajeros viajan lentamente en vehículos motorizados que siguen la ruta de las vías.
STR_6115 :Camiones gigantes autopropulsados 4x4 que pueden subir cuestas impresionantes
STR_6116 :Montaña rusa amplia sobre vías de acero que efectúa varias inversiones
STR_6117 :Sentados en cómodos vagones con sujecciones simples, los viajeros disfrutan de grandes y suaves caídas así como de giros y gran cantidad de momentos de caída libre en los puntos superiores.
STR_6118 :Una montaña rusa suave para las personas que todavía no tienen el coraje de enfrentar atracciones más grandes.
STR_6119 :Una montaña rusa barata y fácil de construir, pero con una altura limitada.
STR_6120 :{BABYBLUE}Nuevo vehículo disponible ahora para {STRINGID}:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}Extiende los derechos de construcción del parque hasta los bordes del mapa.
STR_6122 :¡No hay suficientes montañas rusas en este escenario!
STR_6123 :Error al cargar objetos para el Parque
STR_6124 :Nombre objeto
STR_6125 :Tipo objeto
STR_6126 :Tipo desconocido
STR_6127 :Archivo: {STRING}
STR_6128 :El archivo no se puede cargar ya que algunos de los objetos a los que hace referencia en él faltan o están corruptos. Se muestra un listado de estos objetos:
STR_6129 :Copiar elemento seleccionado
STR_6130 :Copiar todos los elementos
##############
# Escenarios #
@ -4547,9 +4577,9 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Covering land both sides of a highway, this park has several rides already operating
<Haunted Harbor>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :The local authority has agreed to sell nearby land cheaply to this small seaside park, on the condition that certain rides are preserved
<Fun Fortress>

View File

@ -3769,7 +3769,7 @@ STR_5426 :Fin
STR_5427 :Coordonnées :
STR_5428 :Rotations antihoraires :
STR_5429 :Niveau de zoom :
STR_5430 :Secondes à attendre :
STR_5430 :Temps en millisecondes :
STR_5431 :Sauvegarde à charger :
STR_5432 :Commande :
STR_5433 :Séquences de titre
@ -4410,6 +4410,43 @@ STR_6097 :{STRING} a placé une pièce pour l'attraction '{STRING}'.
STR_6098 :{STRING} a détruit une pièce d'attraction.
STR_6099 :Vous êtes connecté(e) au serveur.
STR_6100 :Vous êtes déconnecté(e) du serveur.
STR_6101 :Les attractions ne perdent pas de valeur au fil du temps.
STR_6102 :{SMALLFONT}{BLACK}La valeur d'une attraction ne se dégradera pas au fil du temps, les visiteurs ne penseront plus que l'attraction est trop chère.
STR_6103 :{SMALLFONT}{BLACK}Cette option est désactivée dans les parties multijoueurs.
STR_6111 :Mini-montagnes russes classique
STR_6104 :Montagnes Russes Tire-Bouchon
STR_6105 :Hyper Montagnes Russes
STR_6106 :Balade En Voiture
STR_6107 :Camions Monstrueux
STR_6108 :Tornades Métalliques
STR_6109 :Hyper-Tornades
STR_6110 :Montagnes Russes Junior
STR_6111 :Mini Montagnes Russes Classique
STR_6112 :Un montagne russe compact en métal où le train parcourt une série de tire-bouchons et de boucles
STR_6113 :Un grand montagne russe non inversé avec de grandes descentes, forte vitesse, et des trains confortables avec une simple ceinture
STR_6114 :Les visisteurs parcourent lentement des véhicules alimentés qui suivent un parcours spécifique
STR_6115 :Des camions 4 x 4 géants qui peuvent grimper de pentes fortes
STR_6116 :Des trains de montagnes russes largent glissent sur un parcours en métal lissé, et parcourent une variété d'inversions
STR_6117 :Les visiteurs sont assis dans des trains confortables avec des ceintures simples en se réjouissant de descentes lisses, d'un tracé enroullé et également plein "de temps en l'air" au-dessus des montagnes
STR_6118 :Des montagnes russes calmes pour les gens qui n'ont pas le courage de parcourir les plus imposants
STR_6119 :Des montagnes russes peu cher et facile à construire, mais avec une hauteur limitée
STR_6120 :{BABYBLUE}Nouveau véhicule disponible pour {STRINGID}:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}Etend les droits de propriété du parc jusqu'aux bords de la carte
STR_6122 :Il n'y a pas assez de montagnes russes dans ce scénario !
STR_6123 :Erreur lors du chargement des objets pour le parc
STR_6124 :Nom de l'objet
STR_6125 :Type de l'objet
STR_6126 :Type inconnu
STR_6127 :Fichier : {STRING}
STR_6128 :Le fichier n'a pas pu être chargé car certains d'entre eux qui sont référencés sont soit corrompus ou manquants. Une liste de ces objets est donnée ci-dessous.
STR_6129 :Copier les objets sélectionnés dans le presse-papier
STR_6130 :Copier la liste entière dans le presse-papier
STR_6131 :Source de l'objet
STR_6132 :Ignorer le status de la recherche
STR_6133 :{SMALLFONT}{BLACK}Accéder au décor et aux attractions qui ne sont pas encore inventés
STR_6134 :Effacer le décor
#############
# Scenarios #

View File

@ -3771,7 +3771,7 @@ STR_5426 :Fine
STR_5427 :Coordinate:
STR_5428 :Rotazione Antiorario:
STR_5429 :Livello di Zoom:
STR_5430 :Secondi di attesa:
STR_5430 :Tempo in millisecondi:
STR_5431 :Salvataggio da caricare:
STR_5432 :Comando:
STR_5433 :Sequenza Titoli
@ -4434,6 +4434,14 @@ STR_6119 :Un piccolo ed economico ottovolante, la cui altezza è limitata
STR_6120 :{BABYBLUE}È disponibile un nuovo veicolo per {STRINGID}:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}Estende i terreni di proprietà del parco fino ai bordi della mappa
STR_6122 :Non ci sono abbastanza ottovolanti in questo scenario!
STR_6123 :Errore nel caricamento degli oggetti per il parco
STR_6124 :Nome oggetto
STR_6125 :Tipo oggetto
STR_6126 :Tipo sconosciuto
STR_6127 :File: {STRING}
STR_6128 :Non è stato possibile caricare il file perché alcuni riferimenti ad oggetti presenti sono corrotti o mancanti. Una lista di tali oggetti è riportata qui di seguito.
STR_6129 :Copia oggetto selezionato
STR_6130 :Copia l'intera lista di oggetti
#############
@ -4577,9 +4585,9 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Un parco ai bordi di un'autostrada, con alcune attrazioni già operative
<Haunted Harbor>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :L'autorità locale ha accettato di svendere i terreni confinanti a questo piccolo parco sul mare, a condizione che alcune attrazioni vengano mantenute
<Fun Fortress>

View File

@ -851,7 +851,7 @@ STR_0845 :
STR_0846 :
STR_0847 :'OpenRCT2'에 대해서
STR_0848 :롤러코스터 타이쿤 2
STR_0849 :{WINDOW_COLOUR_2}버전 2.01.028
STR_0849 :<removed string - do not use>
STR_0850 :{WINDOW_COLOUR_2}Copyright {COPYRIGHT} 2002 Chris Sawyer, all rights reserved
STR_0851 :{WINDOW_COLOUR_2}디자인 및 프로그래밍: Chris Sawyer
STR_0852 :{WINDOW_COLOUR_2}그래픽: Simon Foster
@ -860,13 +860,13 @@ STR_0854 :{WINDOW_COLOUR_2}추가 효과음 녹음: David Ellis
STR_0855 :{WINDOW_COLOUR_2}리프리젠테이션: Marjacq Ltd사의 Jacqui Lyons
STR_0856 :{WINDOW_COLOUR_2}감사드릴 분들:
STR_0857 :{WINDOW_COLOUR_2}Peter James Adcock, Joe Booth 그리고 John Wardley
STR_0858 :{WINDOW_COLOUR_2}
STR_0859 :{WINDOW_COLOUR_2}
STR_0860 :{WINDOW_COLOUR_2}
STR_0861 :
STR_0862 :
STR_0863 :
STR_0864 :
STR_0858 :<removed string - do not use>
STR_0859 :<removed string - do not use>
STR_0860 :<removed string - do not use>
STR_0861 :<removed string - do not use>
STR_0862 :<removed string - do not use>
STR_0863 :<removed string - do not use>
STR_0864 :<removed string - do not use>
STR_0865 :{STRINGID}
STR_0866 :{POP16}{STRINGID}
STR_0867 :{POP16}{POP16}{STRINGID}
@ -890,8 +890,8 @@ STR_0884 :풍경 불러오기
STR_0885 :풍경 저장하기
STR_0886 :게임 종료하기
STR_0887 :시나리오 에디터 종료하기
STR_0888 :롤러코스터 디자이너 종료하기
STR_0889 :트랙 디자인 매니저 종료하기
STR_0888 :트랙 디자이너 종료하기
STR_0889 :트랙 디자인 관리자 종료하기
STR_0890 :<removed string - do not use>
STR_0891 :스크린 샷
STR_0892 :스크린 샷이 디스크에 다음 이름으로 저장되었습니다: {STRINGID}
@ -1660,10 +1660,10 @@ STR_1653 :{SMALLFONT}{OPENQUOTES}...마침내 {STRINGID}에 탔어요!{ENDQUO
STR_1654 :{WINDOW_COLOUR_2}최근 생각:
STR_1655 :{SMALLFONT}{BLACK}땅 위에 보도 건설
STR_1656 :{SMALLFONT}{BLACK}다리나 터널 보도를 건설
STR_1657 :{WINDOW_COLOUR_2}좋아하는 놀이기구
STR_1658 :{WINDOW_COLOUR_2}격렬도: {BLACK}{COMMA16} 이하
STR_1657 :{WINDOW_COLOUR_2}선호하는 놀이기구의
STR_1658 :{WINDOW_COLOUR_2}격렬도: {BLACK}{COMMA16} 미만
STR_1659 :{WINDOW_COLOUR_2}격렬도: {BLACK}{COMMA16}에서 {COMMA16} 사이
STR_1660 :{WINDOW_COLOUR_2}격렬도: {BLACK}{COMMA16} 이상
STR_1660 :{WINDOW_COLOUR_2}격렬도: {BLACK}{COMMA16} 초과
STR_1661 :{WINDOW_COLOUR_2}멀미 참을성: {BLACK}{STRINGID}
STR_1662 :{WINDOW_COLOUR_2}행복도:
STR_1663 :{WINDOW_COLOUR_2}멀미도:
@ -1943,8 +1943,8 @@ STR_1934 :{STRINGID} - {STRINGID}(을)를 떠났습니다
STR_1935 :{STRINGID} - 공원을 떠났습니다
STR_1936 :{STRINGID} - {STRINGID}(을)를 샀습니다
STR_1937 :{SMALLFONT}{BLACK}이 메시지의 주제에 대한 정보를 보여줍니다
STR_1938 :{SMALLFONT}{BLACK}손님 주변으로 화면을 이동합니다
STR_1939 :{SMALLFONT}{BLACK}직원 주변으로 화면을 이동합니다
STR_1938 :{SMALLFONT}{BLACK}손님 주변의 화면을 보여줍니다.
STR_1939 :{SMALLFONT}{BLACK}직원 주변의 화면을 보여줍니다.
STR_1940 :{SMALLFONT}{BLACK}행복도/에너지/배고픔 등의 수치를 보여줍니다
STR_1941 :{SMALLFONT}{BLACK}이용한 놀이기구를 보여줍니다
STR_1942 :{SMALLFONT}{BLACK}재정 상황을 보여줍니다
@ -2302,14 +2302,14 @@ STR_2293 :{BLACK} 없음
STR_2294 :{SMALLFONT}{BLACK}땅 표면 모양을 변경합니다
STR_2295 :{SMALLFONT}{BLACK}땅의 벽 모양을 변경합니다
STR_2296 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 공원 입장료로 썼습니다
STR_2297 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 {BLACK}{COMMA16} 놀이기구에 썼습니다
STR_2298 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 {BLACK}{COMMA16} 놀이기구에 썼습니다
STR_2299 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음식 {BLACK}{COMMA16}종류에 썼습니다
STR_2300 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음식 {BLACK}{COMMA16}종류에 썼습니다
STR_2301 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음료수 {BLACK}{COMMA16}종류에 썼습니다
STR_2302 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음료수 {BLACK}{COMMA16}종류에 썼습니다
STR_2303 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 기념품 {BLACK}{COMMA16}종류에 썼습니다
STR_2304 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 기념품 {BLACK}{COMMA16}종류에 썼습니다
STR_2297 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 {BLACK}{COMMA16}{WINDOW_COLOUR_2}개의 놀이기구에 썼습니다
STR_2298 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 {BLACK}{COMMA16}{WINDOW_COLOUR_2}개의 놀이기구에 썼습니다
STR_2299 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음식 {BLACK}{COMMA16}{WINDOW_COLOUR_2}종류에 썼습니다
STR_2300 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음식 {BLACK}{COMMA16}{WINDOW_COLOUR_2}종류에 썼습니다
STR_2301 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음료수 {BLACK}{COMMA16}{WINDOW_COLOUR_2}종류에 썼습니다
STR_2302 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 음료수 {BLACK}{COMMA16}{WINDOW_COLOUR_2}{WINDOW_COLOUR_2}종류에 썼습니다
STR_2303 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 기념품 {BLACK}{COMMA16}{WINDOW_COLOUR_2}종류에 썼습니다
STR_2304 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2}을 기념품 {BLACK}{COMMA16}{WINDOW_COLOUR_2}종류에 썼습니다
STR_2305 :트랙 디자인 파일
STR_2306 :트랙 디자인 저장
STR_2307 :{STRINGID} 디자인 선택
@ -2868,7 +2868,7 @@ STR_2856 :{WINDOW_COLOUR_2}튜토리얼
STR_2857 :{WINDOW_COLOUR_2}(조작하려면 마우스나 키보드 키를 누르세요)
STR_2858 :광고 이벤트를 시작할 수 없습니다...
STR_2859 :OpenRCT2 프로그램이 이미 실행 중입니다
STR_2860 :Infogrames Interactive 제공...
STR_2860 :<removed string - do not use>
STR_2861 :{WINDOW_COLOUR_2}Licensed to Infogrames Interactive Inc.
STR_2862 :음악 저작권...
STR_2863 :음악 저작권
@ -2916,29 +2916,29 @@ STR_2904 :{WINDOW_COLOUR_2}Manic Mechanic: (Allister Brimble) copyright {CO
STR_2905 :{WINDOW_COLOUR_2}Techno Torture: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2906 :{WINDOW_COLOUR_2}Sweat Dreams: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2907 :{WINDOW_COLOUR_2}What shall we do with the Drunken Sailor: (Anon/Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2908 :{WINDOW_COLOUR_2}Infogrames Interactive
STR_2909 :{WINDOW_COLOUR_2}수석 프로듀서: Thomas J. Zahorik
STR_2910 :{WINDOW_COLOUR_2}제작 책임자: Bill Levay
STR_2911 :{WINDOW_COLOUR_2}수석 마케팅 프로덕트 매니저: Scott Triola
STR_2912 :{WINDOW_COLOUR_2}프로덕트 개발 V.P.: Scott Walker
STR_2913 :{WINDOW_COLOUR_2}일반 매니저: John Hurlbut
STR_2914 :{WINDOW_COLOUR_2}품질 보증 감독: Michael Craighead
STR_2915 :{WINDOW_COLOUR_2}Q.A. 인증 매니저: Kurt Boutin
STR_2916 :{WINDOW_COLOUR_2}Q.A. 인증 리드: Mark Huggins
STR_2917 :{WINDOW_COLOUR_2}테스터: Dena Irene Fitzgerald, Scott Rollins, Christopher McPhail
STR_2918 :{WINDOW_COLOUR_2}Clif McClure, Erik Maramaldi, Erik Jeffery
STR_2919 :{WINDOW_COLOUR_2}마케팅 감독: Ann Marie Bland
STR_2920 :{WINDOW_COLOUR_2}창조형 서비스 매니저: Steve Martin
STR_2921 :{WINDOW_COLOUR_2}편집 & 문서 서비스 매니저: Elizabeth Mackney
STR_2922 :{WINDOW_COLOUR_2}그래픽 디자이너: Paul Anselmi
STR_2923 :{WINDOW_COLOUR_2}카피라이터: Kurt Carlson
STR_2924 :{WINDOW_COLOUR_2}감사 인사: Peter Matiss
STR_2925 :{WINDOW_COLOUR_2}엔지니어링 스페셜리스트: Ken Edwards
STR_2926 :{WINDOW_COLOUR_2}엔지니어링 서비스 매니저: Luis Rivas
STR_2927 :{WINDOW_COLOUR_2}리드 적합성 분석: Geoffrey Smith
STR_2928 :{WINDOW_COLOUR_2}적합성 분석: Jason Cordero, Burke McQuinn, Kim Jardin
STR_2929 :{WINDOW_COLOUR_2}리드 테스터: Daniel Frisoli
STR_2930 :{WINDOW_COLOUR_2}수석 테스터: Matt Pantaleoni
STR_2908 :<removed string - do not use>
STR_2909 :<removed string - do not use>
STR_2910 :<removed string - do not use>
STR_2911 :<removed string - do not use>
STR_2912 :<removed string - do not use>
STR_2913 :<removed string - do not use>
STR_2914 :<removed string - do not use>
STR_2915 :<removed string - do not use>
STR_2916 :<removed string - do not use>
STR_2917 :<removed string - do not use>
STR_2918 :<removed string - do not use>
STR_2919 :<removed string - do not use>
STR_2920 :<removed string - do not use>
STR_2921 :<removed string - do not use>
STR_2922 :<removed string - do not use>
STR_2923 :<removed string - do not use>
STR_2924 :<removed string - do not use>
STR_2925 :<removed string - do not use>
STR_2926 :<removed string - do not use>
STR_2927 :<removed string - do not use>
STR_2928 :<removed string - do not use>
STR_2929 :<removed string - do not use>
STR_2930 :<removed string - do not use>
STR_2931 :{WINDOW_COLOUR_2}
STR_2932 :{WINDOW_COLOUR_2}
STR_2933 :{WINDOW_COLOUR_2}
@ -3215,8 +3215,8 @@ STR_3203 :개발 목록 설정 화면
STR_3204 :설정 선택
STR_3205 :목표 선택
STR_3206 :시나리오 저장
STR_3207 :롤러코스터 디자이너
STR_3208 :트랙 디자인 매니저
STR_3207 :트랙 디자이너
STR_3208 :트랙 디자인 관리자
STR_3209 :이전 단계로:
STR_3210 :다음 단계로:
STR_3211 :지도 크기:
@ -3343,8 +3343,8 @@ STR_3331 :공원 입구에서 지도 가장자리로 이어지는 길이 이
STR_3332 :공원 입구가 잘못된 방향을 향하고 있거나 지도 가장자리로 가는 길이 없습니다
STR_3333 :게임 저장시 사용한 오브젝트를 같이 포함하여 저장
STR_3334 :{SMALLFONT}{BLACK}필요한 경우 내장된 오브젝트(기본 오브젝트가 아닌 사용자가 추가한 오브젝트)를 게임 저장 파일이나 시나리오 파일 내부에 함께 저장합니다. 이러면 그 추가 오브젝트를 갖고 있지 않은 다른 사람이 이 파일을 불러올 때 자동으로 그 오브젝트를 설치하게 됩니다. 다만 게임 저장 파일 용량이 늘어납니다
STR_3335 :롤러코스터 디자이너 - 놀이기구 종류 & 차량을 선택하세요
STR_3336 :트랙 디자인 매니저 - 놀이기구 종류를 선택하세요
STR_3335 :트랙 디자이너 - 놀이기구 종류 & 차량을 선택하세요
STR_3336 :트랙 디자인 관리자 - 놀이기구 종류를 선택하세요
STR_3337 :
STR_3338 :{BLACK}커스텀 디자인 구조
STR_3339 :{BLACK}{COMMA16}개의 디자인, 커스텀 디자인 구조 사용 가능
@ -3352,8 +3352,8 @@ STR_3340 :{BLACK}{COMMA16}개의 디자인, 커스텀 디자인 구조 사용
STR_3341 :{SMALLFONT}{BLACK}게임 도구
STR_3342 :시나리오 에디터
STR_3343 :저장된 게임을 시나리오로 변환
STR_3344 :롤러코스터 디자이너
STR_3345 :트랙 디자인 매니저
STR_3344 :트랙 디자이너
STR_3345 :트랙 디자인 관리자
STR_3346 :트랙 디자인을 저장할 수 없습니다...
STR_3347 :놀이기구가 너무 큽니다 - 너무 많은 요소를 포함하고 있거나 조형물이 너무 넓게 퍼져 있습니다
STR_3348 :이름 바꾸기
@ -4376,7 +4376,7 @@ STR_6066 :{SMALLFONT}{BLACK}모든 유저의 행동을 사용자 폴더에
STR_6067 :서버 시작됨
STR_6068 :서버가 종료됨
STR_6069 :{STRING}, {STRING}에 의해 서버에서 추방됨
STR_6070 :{STRING}, 플레이어 그룹이 '{STRING}'에서 {STRING}(으)로 변경됨
STR_6070 :{STRING}, 플레이어 그룹을 '{STRING}'(으)로 변경 (변경자: {STRING})
STR_6071 :{STRING}, 새 플레이어 그룹 '{STRING}' 생성
STR_6072 :{STRING}, 플레이어 그룹 '{String}' 삭제
STR_6073 :{STRING}, 플레이어 그룹 '{String}'의 권한을 수정
@ -4437,6 +4437,16 @@ STR_6127 :파일: {STRING}
STR_6128 :사용된 오브젝트 중에 빠져있거나 손상된 오브젝트를 불러올 수 없습니다. 해당 오브젝트 목록은 아래와 같습니다.
STR_6129 :선택한 항목을 클립보드에 복사
STR_6130 :전체 목록을 클립보드에 복사
STR_6131 :오브젝트 소스
STR_6132 :연구 상태 무시
STR_6133 :{SMALLFONT}{BLACK}아직 개발되지 않은 놀이기구와 풍경을 사용할 수 있게 만듭니다.
STR_6134 :조형물 제거
STR_6135 :클라이언트에서 잘못된 요청을 보냈습니다
STR_6136 :서버에서 잘못된 요청을 보냈습니다
STR_6137 :OpenRCT2 - 롤러코스터 타이쿤 2의 자유 공개 소스 복제품
STR_6138 :OpenRCT2는 많은 분들이 참여한 작품입니다. 모든 참여자의 목록은 {OPENQUOTES}contributors.md{ENDQUOTES} 파일을 참고하세요. 더 많은 정보를 원하시면 http://github.com/OpenRCT2/OpenRCT2 를 방문해주세요.
STR_6139 :모든 제품과 회사 이름은 해당 소유자의 것입니다. 이러한 제품이나 이름의 사용은 그러한 것들에 대한 제휴나 지지를 뜻하지 않습니다.
STR_6140 :변경 기록...
#############
# Scenarios #

View File

@ -890,8 +890,8 @@ STR_0884 :Last inn landskap
STR_0885 :Lagre landskap
STR_0886 :Avslutt spill
STR_0887 :Avslutt scenarioeditoren
STR_0888 :Avslutt berg-og-dal-banedesigner
STR_0889 :Avslutt spordesign-editoren
STR_0888 :Avslutt spordesigner
STR_0889 :Avslutt spordesign-administratoren
STR_0890 :<removed string - do not use>
STR_0891 :Skjermbilde
STR_0892 :Skjermbilde lagret som '{STRINGID}'
@ -3214,7 +3214,7 @@ STR_3203 :Invention List Set Up
STR_3204 :Options Selection
STR_3205 :Objective Selection
STR_3206 :Save Scenario
STR_3207 :Roller Coaster Designer
STR_3207 :Spordesigner
STR_3208 :Track Designs Manager
STR_3209 :Back to Previous Step:
STR_3210 :Forward to Next Step:
@ -3342,7 +3342,7 @@ STR_3331 :Path from park entrance to map edge either not complete or too comp
STR_3332 :Park entrance is the wrong way round or has no path leading to the map edge
STR_3333 :Export plug-in objects with saved games
STR_3334 :{SMALLFONT}{BLACK}Select whether to save any additional plug-in object data required (add-in data not supplied with the main product) in saved game or scenario files, allowing them to be loaded by someone who doesn't have the additional object data
STR_3335 :Roller Coaster Designer - Select Ride Types & Vehicles
STR_3335 :Spordesigner - Velg attraksjonstyper og vogner
STR_3336 :Track Designs Manager - Select Ride Type
STR_3337 :<removed string - do not use>
STR_3338 :{BLACK}Custom-designed layout
@ -3351,7 +3351,7 @@ STR_3340 :{BLACK}{COMMA16} designs available, or custom-designed layout
STR_3341 :{SMALLFONT}{BLACK}Game tools
STR_3342 :Scenario Editor
STR_3343 :Convert Saved Game to Scenario
STR_3344 :Roller Coaster Designer
STR_3344 :Spordesigner
STR_3345 :Track Designs Manager
STR_3346 :Can't save track design...
STR_3347 :Ride is too large, contains too many elements, or scenery is too spread out
@ -3768,7 +3768,7 @@ STR_5426 :End
STR_5427 :Coordinates:
STR_5428 :Anticlockwise rotations:
STR_5429 :Zoom level:
STR_5430 :Seconds to wait:
STR_5430 :Tid i millisekunder:
STR_5431 :Save to load:
STR_5432 :Command:
STR_5433 :Title Sequences
@ -4368,6 +4368,85 @@ STR_6056 :{SMALLFONT}{BLACK}Demp lyd
STR_6057 :{SMALLFONT}{BLACK}Show a separate button for the Mute Option in the toolbar
STR_6057 :{SMALLFONT}{BLACK}Vis en separat knapp for lyddemping i verktøylinjen
STR_6058 :Demp lyd
STR_6059 :{RIGHTGUILLEMET}
STR_6060 :Vis gjestenes innkjøp som en animasjon
STR_6061 :{SMALLFONT}{BLACK}Show animated money effect{NEWLINE}when guests make purchases.
STR_6061 :{SMALLFONT}{BLACK}Vis animert penge-effekt{NEWLINE}når gjester kjøper noe.
STR_6062 :{OUTLINE}{GREEN}+ {CURRENCY2DP}
STR_6063 :{OUTLINE}{RED}- {CURRENCY2DP}
STR_6064 :Ta eierskap av alt land
STR_6065 :Loggfør brukerhandlinger
STR_6066 :{SMALLFONT}{BLACK}Loggerfører alle brukerhandlinger til filer i din brukerkatalog.
STR_6067 :Server startet.
STR_6068 :Server skrus av.
STR_6069 :{STRING} ble sparket fra serveren av {STRING}.
STR_6070 :{STRING} ble satt til gruppe '{STRING}' av {STRING}.
STR_6071 :{STRING} laget en ny spillergruppe: '{STRING}'.
STR_6072 :{STRING} slettet spillergruppe '{String}'.
STR_6073 :{STRING} endret rettigheter for spillergruppe '{String}'.
STR_6074 :{STRING} endret navn for spillergruppe '{String}' til '{String}'.
STR_6075 :{STRING} endret standard-spillergruppen til '{String}'.
STR_6076 :{STRING} brukte eller skrudde av/på juksehandling '{STRING}'.
STR_6077 :Legg til penger
STR_6078 :{STRING} opprettet attraksjon: '{STRING}'.
STR_6079 :{STRING} rev ned attraksjon: '{STRING}'.
STR_6080 :{STRING} endret utseende til attraksjon '{STRING}'.
STR_6081 :{STRING} endret attraksjonsstatus på '{STRING}' til stengt.
STR_6082 :{STRING} endret attraksjonsstatus på '{STRING}' til åpen.
STR_6083 :{STRING} endret attraksjonsstatus på '{STRING}' til testing.
STR_6084 :{STRING} endret vogninnstillingene på attraksjon '{STRING}'.
STR_6085 :{STRING} endret attraksjonsinnstillingene på '{STRING}'.
STR_6086 :{STRING} endret navn på attraksjon '{STRING}' til '{STRING}'.
STR_6087 :{STRING} endret inngangspris på '{STRING}' til {STRING}
STR_6088 :{STRING} endret annen pris på '{STRING}' til {STRING}
STR_6089 :{STRING} endret parkens navn fra '{STRING}' til '{STRING}'.
STR_6090 :{STRING} åpnet parken.
STR_6091 :{STRING} stengte parken.
STR_6092 :{STRING} endret parkens inngangspris til {STRING}
STR_6093 :{STRING} plasserte nytt pyntelement.
STR_6094 :{STRING} fjernet pyntelement.
STR_6095 :{STRING} endret pyntelement.
STR_6096 :{STRING} satt skiltnavn til '{STRING}'.
STR_6097 :{STRING} plasserte et sporelement på attraksjon '{STRING}'.
STR_6098 :{STRING} fjernet et sporelement.
STR_6099 :Du koblet til serveren.
STR_6100 :Du koblet fra serveren.
STR_6101 :Attraksjoners verdi synker ikke over tid
STR_6102 :{SMALLFONT}{BLACK}Verdien til attraksjoner synker ikke over tid, slik at gjester ikke bestemmer seg for at en attraksjon har for høy inngangspris.
STR_6103 :{SMALLFONT}{BLACK}Denne innstillingen er skrudd av for nettverksspill.
STR_6104 :Korkskru berg-og-dal-bane
STR_6105 :Hyper berg-og-dal-bane
STR_6106 :Kjøretur
STR_6107 :Monster Trucker
STR_6108 :Stål Twister
STR_6109 :Hyper-Twister
STR_6110 :Junior berg-og-dal-bane
STR_6111 :Klassisk Mini-berg-og-dal-bane
STR_6112 :En kompakt berg-og-dal-bane i stål, hvor toget går gjennom korkskruer og looper
STR_6113 :En høy berg-og-dal-bane som ikke går opp-ned, med høye fall, høy fart og komfortable tog som kun har sikringer over fanget
STR_6114 :Passasjerer kjører sakte i selvdrevne kjøretøy langs et spor
STR_6115 :Selvdrevne gigantiske firehjulstrucker som kan kjøre opp bratte bakker
STR_6116 :Vide berg-og-dal-bane-tog glir langs jevne stålspor, mens de går gjennom et stort utvalg opp-ned-seksjoner
STR_6117 :Passasjerer opplever gigantiske jevne fall og vridde spor, samt mye vektløshet over toppene i komfortable seter med minimalt inntrengende sikringer
STR_6118 :En rolig berg-og-dal-bane for dem som ikke enda tør prøve de større attraksjonene
STR_6119 :En billig og lettbygd berg-og-dal-bane, men med knapp høydebegrensning
STR_6120 :{BABYBLUE}Ny vogn nå tilgjengelig for {STRINGID}:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}Utvider parkens landrettigheter til kartets kanter
STR_6122 :Det er ikke nok berg-og-dal-baner i dette scenariet!
STR_6123 :Feil i lasting av objekter for park
STR_6124 :Objektnavn
STR_6125 :Objekttype
STR_6126 :Ukjent type
STR_6127 :Fil: {STRING}
STR_6128 :Filen kunne ikke bli lastet, siden noen av objektene den refererer til mangler eller er korrupte. En liste av disse objektene følger.
STR_6129 :Kopier valgt element til utklippstavlen
STR_6130 :Kopier hele listen til utklippstavlen
STR_6131 :Objektkilde
STR_6132 :Ignorer forskningsstatus
STR_6133 :{SMALLFONT}{BLACK}Gir tilgang til attraksjoner og pynt som ikke har blitt funnet opp enda
STR_6134 :Slett pynt
STR_6135 :Klient sendte ugyldig forespørsel
STR_6136 :Server sendte ugyldig forespørsel
#############
# Scenarios #
@ -4510,9 +4589,9 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Covering land both sides of a highway, this park has several rides already operating
<Haunted Harbor>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :The local authority has agreed to sell nearby land cheaply to this small seaside park, on the condition that certain rides are preserved
<Fun Fortress>

View File

@ -848,7 +848,7 @@ STR_0845 :<not used anymore>
STR_0846 :<not used anymore>
STR_0847 :Over 'OpenRCT2'
STR_0848 :RollerCoaster Tycoon 2
STR_0849 :{WINDOW_COLOUR_2}Versie 2.01.028
STR_0849 :<removed string - do not use>
STR_0850 :{WINDOW_COLOUR_2}Copyright {COPYRIGHT} 2002 Chris Sawyer, alle rechten voorbehouden
STR_0851 :{WINDOW_COLOUR_2}Ontworpen en geprogrammeerd door Chris Sawyer
STR_0852 :{WINDOW_COLOUR_2}Grafisch werk door Simon Foster
@ -857,13 +857,13 @@ STR_0854 :{WINDOW_COLOUR_2}Extra geluiden opgenomen door David Ellis
STR_0855 :{WINDOW_COLOUR_2}Representatie door Jacqui Lyons van Marjacq Ltd.
STR_0856 :{WINDOW_COLOUR_2}Met dank aan:
STR_0857 :{WINDOW_COLOUR_2}Peter James Adcock, Joe Booth en John Wardley
STR_0858 :{WINDOW_COLOUR_2}
STR_0859 :{WINDOW_COLOUR_2}
STR_0860 :{WINDOW_COLOUR_2}
STR_0861 :
STR_0862 :
STR_0863 :
STR_0864 :
STR_0858 :<removed string - do not use>
STR_0859 :<removed string - do not use>
STR_0860 :<removed string - do not use>
STR_0861 :<removed string - do not use>
STR_0862 :<removed string - do not use>
STR_0863 :<removed string - do not use>
STR_0864 :<removed string - do not use>
STR_0865 :{STRINGID}
STR_0866 :{POP16}{STRINGID}
STR_0867 :{POP16}{POP16}{STRINGID}
@ -887,7 +887,7 @@ STR_0884 :Landschap laden
STR_0885 :Landschap opslaan
STR_0886 :Spel afsluiten
STR_0887 :Scenariobewerker afsluiten
STR_0888 :Achtbaanontwerper afsluiten
STR_0888 :Baanontwerper afsluiten
STR_0889 :Baanontwerpbeheer afsluiten
STR_0890 :<removed string - do not use>
STR_0891 :Screenshot
@ -2862,7 +2862,7 @@ STR_2856 :{WINDOW_COLOUR_2}Tutorial
STR_2857 :{WINDOW_COLOUR_2}(Druk op een toets of muisknop om de controle over te nemen)
STR_2858 :Kan marketingcampagne niet starten...
STR_2859 :OpenRCT2 draait al
STR_2860 :Credits voor Infogrames Interactive...
STR_2860 :<removed string - do not use>
STR_2861 :{WINDOW_COLOUR_2}In licentie gegeven aan {NEWLINE}Infogrames Interactive Inc.
STR_2862 :Muziekdankwoord...
STR_2863 :Muziekdankwoord
@ -2910,29 +2910,29 @@ STR_2904 :{WINDOW_COLOUR_2}Manic Mechanic: (Allister Brimble) copyright {CO
STR_2905 :{WINDOW_COLOUR_2}Techno Torture: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2906 :{WINDOW_COLOUR_2}Sweat Dreams: (Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2907 :{WINDOW_COLOUR_2}What shall we do with the Drunken Sailor: (Anon/Allister Brimble) copyright {COPYRIGHT} Chris Sawyer
STR_2908 :{WINDOW_COLOUR_2}Infogrames Interactive
STR_2909 :{WINDOW_COLOUR_2}Senior Producer: Thomas J. Zahorik
STR_2910 :{WINDOW_COLOUR_2}Executive Producer: Bill Levay
STR_2911 :{WINDOW_COLOUR_2}Senior Marketing Product Manager: Scott Triola
STR_2912 :{WINDOW_COLOUR_2}V.P. of Product Development: Scott Walker
STR_2913 :{WINDOW_COLOUR_2}General Manager: John Hurlbut
STR_2914 :{WINDOW_COLOUR_2}Director of Quality Assurance: Michael Craighead
STR_2915 :{WINDOW_COLOUR_2}Q.A. Certification Manager: Kurt Boutin
STR_2916 :{WINDOW_COLOUR_2}Q.A. Certification Lead: Mark Huggins
STR_2917 :{WINDOW_COLOUR_2}Testers: Dena Irene Fitzgerald, Scott Rollins, Christopher McPhail
STR_2918 :{WINDOW_COLOUR_2}Clif McClure, Erik Maramaldi, Erik Jeffery
STR_2919 :{WINDOW_COLOUR_2}Director of Marketing: Ann Marie Bland
STR_2920 :{WINDOW_COLOUR_2}Manager of Creative Services: Steve Martin
STR_2921 :{WINDOW_COLOUR_2}Manager of Editorial & Documentation Services: Elizabeth Mackney
STR_2922 :{WINDOW_COLOUR_2}Graphic Designer: Paul Anselmi
STR_2923 :{WINDOW_COLOUR_2}Copywriter: Kurt Carlson
STR_2924 :{WINDOW_COLOUR_2}Special Thanks to: Peter Matiss
STR_2925 :{WINDOW_COLOUR_2}Engineering Specialist: Ken Edwards
STR_2926 :{WINDOW_COLOUR_2}Engineering Services Manager: Luis Rivas
STR_2927 :{WINDOW_COLOUR_2}Lead Compatibility Analyst: Geoffrey Smith
STR_2928 :{WINDOW_COLOUR_2}Compatibility Analysts: Jason Cordero, Burke McQuinn, Kim Jardin
STR_2929 :{WINDOW_COLOUR_2}Lead Tester: Daniel Frisoli
STR_2930 :{WINDOW_COLOUR_2}Senior Tester: Matt Pantaleoni
STR_2908 :<removed string - do not use>
STR_2909 :<removed string - do not use>
STR_2910 :<removed string - do not use>
STR_2911 :<removed string - do not use>
STR_2912 :<removed string - do not use>
STR_2913 :<removed string - do not use>
STR_2914 :<removed string - do not use>
STR_2915 :<removed string - do not use>
STR_2916 :<removed string - do not use>
STR_2917 :<removed string - do not use>
STR_2918 :<removed string - do not use>
STR_2919 :<removed string - do not use>
STR_2920 :<removed string - do not use>
STR_2921 :<removed string - do not use>
STR_2922 :<removed string - do not use>
STR_2923 :<removed string - do not use>
STR_2924 :<removed string - do not use>
STR_2925 :<removed string - do not use>
STR_2926 :<removed string - do not use>
STR_2927 :<removed string - do not use>
STR_2928 :<removed string - do not use>
STR_2929 :<removed string - do not use>
STR_2930 :<removed string - do not use>
STR_2931 :{WINDOW_COLOUR_2}
STR_2932 :{WINDOW_COLOUR_2}
STR_2933 :{WINDOW_COLOUR_2}
@ -3209,7 +3209,7 @@ STR_3203 :Uitvindingen instellen
STR_3204 :Opties selecteren
STR_3205 :Doelstelling selecteren
STR_3206 :Scenario opslaan
STR_3207 :Achtbaanontwerper
STR_3207 :Baanontwerper
STR_3208 :Baanontwerpbeheer
STR_3209 :Terug naar de vorige stap:
STR_3210 :Verder naar de volgende stap:
@ -3337,7 +3337,7 @@ STR_3331 :Pad van de parkingang naar de rand van de kaart is incompleet of te
STR_3332 :Parkingang staat achterstevoren of heeft geen pad naar de rand van de kaart
STR_3333 :Plug-inobjecten meeleveren in opgeslagen spellen
STR_3334 :{SMALLFONT}{BLACK}Selecteer of toegevoegde (niet-standaard) objecten in opgeslagen spellen en scenario's moeten worden meegeleverd, zodat ze geopend kunnen worden door iemand die deze objecten nog niet heeft
STR_3335 :Achtbaanontwerper - Attractietypes en -voertuigen selecteren
STR_3335 :Baanontwerper - Attractietypes en -voertuigen selecteren
STR_3336 :Baanontwerpbeheer - Attractietype selecteren
STR_3337 :<not used anymore>
STR_3338 :{BLACK}Eigen ontwerp
@ -3346,7 +3346,7 @@ STR_3340 :{BLACK}{COMMA16} ontwerpen beschikbaar, of maak een eigen ontwerp
STR_3341 :{SMALLFONT}{BLACK}Hulpmiddelen
STR_3342 :Scenariobewerker
STR_3343 :Opgeslagen spel omzetten naar scenario
STR_3344 :Achtbaanontwerper
STR_3344 :Baanontwerper
STR_3345 :Baanontwerpbeheer
STR_3346 :Kan baanontwerp niet opslaan
STR_3347 :Attractie is te groot, bevat teveel elementen of het decor is te ver verspreid
@ -4432,6 +4432,16 @@ STR_6127 :Bestand: {STRING}
STR_6128 :Het bestand kon niet geladen worden omdat sommige objecten waar het naar verwijst beschadigd zijn of ontbreken. Hieronder staat een lijst van deze objecten.
STR_6129 :Selectie naar klembord kopiëren
STR_6130 :Hele lijst naar klembord kopiëren
STR_6131 :Afkomst
STR_6132 :Uitvindingsstatus negeren
STR_6133 :{SMALLFONT}{BLACK}Maakt attracties en decor beschikbaar die nog niet zijn uitgevonden.
STR_6134 :Decor verwijderen
STR_6135 :Ongeldig verzoek van de client
STR_6136 :Ongeldig verzoek van de server
STR_6137 :OpenRCT2, een gratis en open source remake van Roller Coaster Tycoon 2.
STR_6138 :OpenRCT2 is het werk van velen, een volledige lijst is te vinden in {OPENQUOTES}contributors.md{ENDQUOTES}. Ga naar http://github.com/OpenRCT2/OpenRCT2 voor meer informatie.
STR_6139 :Alle product- en bedrijfsnamen zijn eigendom van hun respectieve eigenaren. Het gebruik ervan impliceert geen overeenkomst of goedkeuring.
STR_6140 :Wijzigingsoverzicht...
#############
# Scenarios #

File diff suppressed because it is too large Load Diff

View File

@ -851,7 +851,7 @@ STR_0845 :<not used anymore>
STR_0846 :<not used anymore>
STR_0847 :Sobre 'OpenRCT2'
STR_0848 :RollerCoaster Tycoon 2
STR_0849 :{WINDOW_COLOUR_2}Version 2.01.028
STR_0849 :<removed string - do not use>
STR_0850 :{WINDOW_COLOUR_2}Copyright {COPYRIGHT} 2002 Chris Sawyer, todos os direitos reservados
STR_0851 :{WINDOW_COLOUR_2}Projetado e programado por Chris Sawyer
STR_0852 :{WINDOW_COLOUR_2}Gráficos por Simon Foster
@ -860,13 +860,13 @@ STR_0854 :{WINDOW_COLOUR_2}Sons adicionais gravados por David Ellis
STR_0855 :{WINDOW_COLOUR_2}Representação por Jacqui Lyons na Marjacq Ltd.
STR_0856 :{WINDOW_COLOUR_2}Obrigado a:
STR_0857 :{WINDOW_COLOUR_2}Peter James Adcock, Joe Booth, and John Wardley
STR_0858 :{WINDOW_COLOUR_2}
STR_0859 :{WINDOW_COLOUR_2}
STR_0860 :{WINDOW_COLOUR_2}
STR_0861 :
STR_0862 :
STR_0863 :
STR_0864 :
STR_0858 :<removed string - do not use>
STR_0859 :<removed string - do not use>
STR_0860 :<removed string - do not use>
STR_0861 :<removed string - do not use>
STR_0862 :<removed string - do not use>
STR_0863 :<removed string - do not use>
STR_0864 :<removed string - do not use>
STR_0865 :{STRINGID}
STR_0866 :{POP16}{STRINGID}
STR_0867 :{POP16}{POP16}{STRINGID}
@ -890,7 +890,7 @@ STR_0884 :Carregar Paisagem
STR_0885 :Salvar Paisagem
STR_0886 :Sair do Jogo
STR_0887 :Sair do Editor de Cenário
STR_0888 :Sair do Construtor de Montanha-Russa
STR_0888 :Sair do Construtor de Pista
STR_0889 :Sair do Gerenciador de Projetos de Pista
STR_0890 :<removed string - do not use>
STR_0891 :Captura de tela
@ -2867,7 +2867,7 @@ STR_2856 :{WINDOW_COLOUR_2}Tutorial
STR_2857 :{WINDOW_COLOUR_2}(Pressione uma tecla ou botão do mouse para controlar)
STR_2858 :Impossível começar uma campanha de marketing...
STR_2859 :Um outro exemplar de OpenRCT2 já está executando
STR_2860 :Créditos de Infogrames Interactive...
STR_2860 :<removed string - do not use>
STR_2861 :{WINDOW_COLOUR_2}Licenciado para Infogrames Interactive Inc.
STR_2862 :Reconhecimentos de música...
STR_2863 :Reconhecimentos de música
@ -2915,29 +2915,29 @@ STR_2904 :{WINDOW_COLOUR_2}Manic Mechanic: (Allister Brimble) direitos auto
STR_2905 :{WINDOW_COLOUR_2}Techno Torture: (Allister Brimble) direitos autorais {COPYRIGHT} Chris Sawyer
STR_2906 :{WINDOW_COLOUR_2}Sweat Dreams: (Allister Brimble) direitos autorais {COPYRIGHT} Chris Sawyer
STR_2907 :{WINDOW_COLOUR_2}What shall we do with the Drunken Sailor: (Anon/Allister Brimble) direitos autorais {COPYRIGHT} Chris Sawyer
STR_2908 :{WINDOW_COLOUR_2}Infogrames Interactive
STR_2909 :{WINDOW_COLOUR_2}Produtor Sênior: Thomas J. Zahorik
STR_2910 :{WINDOW_COLOUR_2}Produtor Executivo: Bill Levay
STR_2911 :{WINDOW_COLOUR_2}Gerente de Produtos de Marketing Sênior: Scott Triola
STR_2912 :{WINDOW_COLOUR_2}Vice-Presidente de Desenvolvimento de Produto: Scott Walker
STR_2913 :{WINDOW_COLOUR_2}Gerente Geral: John Hurlbut
STR_2914 :{WINDOW_COLOUR_2}Diretor de Garantia de Qualidade: Michael Craighead
STR_2915 :{WINDOW_COLOUR_2}Gerente de Certificação de Garantia de Qualidade: Kurt Boutin
STR_2916 :{WINDOW_COLOUR_2}Líder de Certificação de Garantia de Qualidade: Mark Huggins
STR_2917 :{WINDOW_COLOUR_2}Testadores: Dena Irene Fitzgerald, Scott Rollins, Christopher McPhail
STR_2918 :{WINDOW_COLOUR_2}Clif McClure, Erik Maramaldi, Erik Jeffery
STR_2919 :{WINDOW_COLOUR_2}Diretor de Marketing: Ann Marie Bland
STR_2920 :{WINDOW_COLOUR_2}Gerente de Serviços Criativos: Steve Martin
STR_2921 :{WINDOW_COLOUR_2}Gerente de Serviços Editoriais e Documentação: Elizabeth Mackney
STR_2922 :{WINDOW_COLOUR_2}Designer Gráfico: Paul Anselmi
STR_2923 :{WINDOW_COLOUR_2}Copywriter: Kurt Carlson
STR_2924 :{WINDOW_COLOUR_2}Agradecimentos Especiais à: Peter Matiss
STR_2925 :{WINDOW_COLOUR_2}Especialista em Engenharia: Ken Edwards
STR_2926 :{WINDOW_COLOUR_2}Gerende de Serviços de Engenharia: Luis Rivas
STR_2927 :{WINDOW_COLOUR_2}Líder de Análistas de Compatibilidade: Geoffrey Smith
STR_2928 :{WINDOW_COLOUR_2}Analistas de Compatibilidade: Jason Cordero, Burke McQuinn, Kim Jardin
STR_2929 :{WINDOW_COLOUR_2}Testador Líder: Daniel Frisoli
STR_2930 :{WINDOW_COLOUR_2}Testador Sênior: Matt Pantaleoni
STR_2908 :<removed string - do not use>
STR_2909 :<removed string - do not use>
STR_2910 :<removed string - do not use>
STR_2911 :<removed string - do not use>
STR_2912 :<removed string - do not use>
STR_2913 :<removed string - do not use>
STR_2914 :<removed string - do not use>
STR_2915 :<removed string - do not use>
STR_2916 :<removed string - do not use>
STR_2917 :<removed string - do not use>
STR_2918 :<removed string - do not use>
STR_2919 :<removed string - do not use>
STR_2920 :<removed string - do not use>
STR_2921 :<removed string - do not use>
STR_2922 :<removed string - do not use>
STR_2923 :<removed string - do not use>
STR_2924 :<removed string - do not use>
STR_2925 :<removed string - do not use>
STR_2926 :<removed string - do not use>
STR_2927 :<removed string - do not use>
STR_2928 :<removed string - do not use>
STR_2929 :<removed string - do not use>
STR_2930 :<removed string - do not use>
STR_2931 :{WINDOW_COLOUR_2}
STR_2932 :{WINDOW_COLOUR_2}
STR_2933 :{WINDOW_COLOUR_2}
@ -3214,7 +3214,7 @@ STR_3203 :Montar Lista de Invenções
STR_3204 :Seleção de Opções
STR_3205 :Seleção de Objetivos
STR_3206 :Salvar Cenário
STR_3207 :Construtor de Montanha-Russa
STR_3207 :Construtor de Pista
STR_3208 :Gerenciador de Projetos de Pista
STR_3209 :Voltar para o Passo Anterior:
STR_3210 :Avançar para o Próximo Passo:
@ -3342,7 +3342,7 @@ STR_3331 :Caminho da entrada do parque a borda do mapa incompleta ou muito co
STR_3332 :Entrada do parque está ao contrário ou não tem caminho até a borda do mapa
STR_3333 :Exportar plug-in de objetos com jogos salvos
STR_3334 :{SMALLFONT}{BLACK}Selecione se deve salvar requerimento de qualquer plug-in de objeto adicional (dados adicionais não fornecidos no produto principal) nos dados de jogo salvo ou cenário, permitindo que sejam carregados por alguém que não tenha dados de objeto adicional
STR_3335 :Construtor de Montanha-Russa - Selecione o Tipo de Veículo e Atração
STR_3335 :Construtor de Pista - Selecione o Tipo de Veículo e Atração
STR_3336 :Gerenciador de Projetos de Pista - Selecione o Tipo de Atração
STR_3337 :<not used anymore>
STR_3338 :{BLACK}Projeto com Traçado Personalizado
@ -3351,7 +3351,7 @@ STR_3340 :{BLACK}{COMMA16} projetos disponíveis, ou projeto com traçado per
STR_3341 :{SMALLFONT}{BLACK}Ferramentas de Jogo
STR_3342 :Editor de Cenário
STR_3343 :Converter Jogo Salvo em Cenário
STR_3344 :Construtor de Montanha-Russa
STR_3344 :Construtor de Pista
STR_3345 :Gerenciador de Projetos de Pista
STR_3346 :Impossível salvar projeto de pista...
STR_3347 :Atração é muito grande, contém muitos elementos, ou o cenários é muito espalhado
@ -3768,7 +3768,7 @@ STR_5426 :Fim
STR_5427 :Cordenadas:
STR_5428 :Rotações anti-horárias:
STR_5429 :Nível de ampliação:
STR_5430 :Segundos de espera:
STR_5430 :Milissegundos de espera:
STR_5431 :Salvar para carregar:
STR_5432 :Comando:
STR_5433 :Sequências de título
@ -4439,6 +4439,16 @@ STR_6127 :Arquivo: {STRING}
STR_6128 :O arquivo não pode ser carregado pois alguns dos objetos referência dele estão faltando ou corrompidos. Uma lista desses objetos está disponível abaixo.
STR_6129 :Copiar itens selecionados para o clipboard
STR_6130 :Copiar lista inteira para o clipboard
STR_6131 :Fonte do objeto
STR_6132 :Ignorar status de pesquisa
STR_6133 :{SMALLFONT}{BLACK}Acessa atrações e cenários que ainda não foram inventados
STR_6134 :Limpar Cenário
STR_6135 :Cliente enviou um pedido inválido
STR_6136 :Servidor enviou um pedido inválido
STR_6137 :OpenRCT2, um clone grátis e com código aberto do Roller Coaster Tycoon 2
STR_6138 :OpenRCT2 é o trabalho de vários autores, a lista completa pode ser encontrada em {OPENQUOTES}contributors.md{ENDQUOTES}. Para mais informações, visite http://github.com/OpenRCT2/OpenRCT2
STR_6139 :Todos os nomes de produtos e de empresas pertencem aos seus respectivos proprietários. O uso deles não implica qualquer afiliação ou aprovação por eles.
STR_6140 :Changelog...
#############
# Scenarios #
@ -4581,7 +4591,7 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Cobrindo terra em ambos os lados de uma estrada, este parque já tem vários brinquedos em operação.
<Haunted Harbor>
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :A autoridade local concordou em vender barato o terreno para este pequeno parque litorâneo, com a condição de que certos brinquedos são preservados.

View File

@ -890,7 +890,7 @@ STR_0884 :Ladda Landskap
STR_0885 :Spara Landskap
STR_0886 :Avsluta Spel
STR_0887 :Avsluta Scenarioskaparen
STR_0888 :Avsluta Berg- och Dalbanebyggaren
STR_0888 :Avsluta Åktur Designer
STR_0889 :Avsluta Spårredigeraren
STR_0890 :<removed string - do not use>
STR_0891 :Skärmdump
@ -3212,7 +3212,7 @@ STR_3203 :Bygg upp uppfinningslista
STR_3204 :Välj Inställningar
STR_3205 :Välj Uppdrag
STR_3206 :Spara Scenario
STR_3207 :Berg- och dalbanedesigner
STR_3207 :Åktur Designer
STR_3208 :Bandesignhanterare
STR_3209 :Tillbaka till tidigare steg:
STR_3210 :Vidare till nästa steg:
@ -3340,7 +3340,7 @@ STR_3331 :Vägen från parkentrén till kartkanten är antingen inte komplett
STR_3332 :Parkentrén är åt fel håll eller har ingen väg som leder till kartkanten
STR_3333 :Exportera plug-in-objekt med sparade spel
STR_3334 :{SMALLFONT}{BLACK}Välj om plug-in objekt (extra objekt som inte följer med basspelet) ska sparas i sparade spel och scenarion, vilket låter spelare importera denna data
STR_3335 :Berg- och dalbanedesigner - Välj Åkturstyp & Fordon
STR_3335 :Åktur Designer - Välj Åkturstyp & Fordon
STR_3336 :Bandesign-hanterare - Välj Åkturstyp
STR_3337 :<not used anymore>
STR_3338 :{BLACK}Egendesignad layout
@ -3349,7 +3349,7 @@ STR_3340 :{BLACK}{COMMA16} designer tillgängliga, eller egendesignad layout
STR_3341 :{SMALLFONT}{BLACK}Spelverktyg
STR_3342 :Scenarioredigerare
STR_3343 :Konvertera Sparat Spel till Scenario
STR_3344 :Berg- och dalbana-designer
STR_3344 :Åktur Designer
STR_3345 :Bandesignhanterare
STR_3346 :Kan inte spara bandesign...
STR_3347 :Åkturen är för stor, innehåller för många delar, eller har för utspridda dekorationer
@ -4436,6 +4436,12 @@ STR_6127 :Fil: {STRING}
STR_6128 :Filen kunde inte laddas eftersom objekt som filen hänvisar till saknas eller är skadade. En lista med dessa objekt visas nedanför.
STR_6129 :Kopiera valda föremål till urklipp
STR_6130 :Kopiera hela listan till urklipp
STR_6131 :Källa för objektet
STR_6132 :Ignorera forskning
STR_6133 :{SMALLFONT}{BLACK}Ger tillgång till åkturer och dekorationer som inte har blivit uppfunna än
STR_6134 :Rensa dekoration
STR_6135 :Klient skickade ogiltig begäran
STR_6136 :Server skickade ogiltig begäran
#############
# Scenarion #
@ -4578,9 +4584,9 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Utsträckande mark på båda sidor av en motorväg, denna park har ett flertal åkturer igång
<Haunted Harbor>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :Den lokala myndigheten har godkänt tillåtelse att sälja land i närheten billigt till denna lilla sjösatta park, på villkoret att vissa åkturer är bevarade
<Fun Fortress>

View File

@ -895,7 +895,7 @@ STR_0884 :载入地形
STR_0885 :保存地形
STR_0886 :退出游戏
STR_0887 :退出场景编辑器
STR_0888 :退出过山车设计工具
STR_0888 :退出轨道设计工具
STR_0889 :退出轨道设计管理工具
STR_0890 :<removed string - do not use>
STR_0891 :截图
@ -3220,7 +3220,7 @@ STR_3203 :设置研发清单
STR_3204 :选取选项
STR_3205 :选取目标
STR_3206 :存储剧情
STR_3207 :过山车设计工具
STR_3207 :轨道设计工具
STR_3208 :轨道设计管理工具
STR_3209 :上一步:
STR_3210 :下一步:
@ -3348,7 +3348,7 @@ STR_3331 :由地图边缘到乐园入口的道路尚未连接好, 或者太
STR_3332 :乐园入口倒转了, 或没有道路连接至地图边缘
STR_3333 :在存档中导出附加物
STR_3334 :{SMALLFONT}{BLACK}Select whether to save any additional plug-in object data required (add-in data not supplied with the main product) in saved game or scenario files, allowing them to be loaded by someone who doesn't have the additional object data
STR_3335 :过山车设计工具 - 选择游乐设施的类型及车辆种类
STR_3335 :轨道设计工具 - 选择游乐设施的类型及车辆种类
STR_3336 :轨道设计管理工具 - 选择游乐设施的类型
STR_3337 :<not used anymore>
STR_3338 :{BLACK}Custom-designed layout
@ -3357,7 +3357,7 @@ STR_3340 :{BLACK}{COMMA16} designs available, or custom-designed layout
STR_3341 :{SMALLFONT}{BLACK}游戏工具
STR_3342 :剧情编辑器
STR_3343 :将游戏存档转换成剧情关
STR_3344 :过山车设计工具
STR_3344 :轨道设计工具
STR_3345 :轨道设计管理工具
STR_3346 :不能保存轨道设计...
STR_3347 :Ride is too large, contains too many elements, or scenery is too spread out
@ -3774,7 +3774,7 @@ STR_5426 :结束
STR_5427 :坐标:
STR_5428 :逆时针旋转次数:
STR_5429 :放大级别:
STR_5430 :等待秒数:
STR_5430 :等待秒数:
STR_5431 :要读取的存档:
STR_5432 :命令:
STR_5433 :Title Sequences
@ -4373,7 +4373,82 @@ STR_6055 :OpenRCT2高度图文件
STR_6056 :{SMALLFONT}{BLACK}静音
STR_6057 :{SMALLFONT}{BLACK}在工具栏为静音选项显示一个单独的按钮
STR_6058 :静音
STR_6059 :{RIGHTGUILLEMET}
STR_6060 :将游客的购买行为用动画表现
STR_6061 :{SMALLFONT}{BLACK}当游客购买时播放金钱动画效果{NEWLINE}.
STR_6062 :{OUTLINE}{GREEN}+ {CURRENCY2DP}
STR_6063 :{OUTLINE}{RED}- {CURRENCY2DP}
STR_6064 :拥有所有土地
STR_6065 :记录用户操作
STR_6066 :{SMALLFONT}{BLACK}在你的用户文件夹下用文件记录所有用户的操作.
STR_6067 :服务器开启.
STR_6068 :服务器关闭.
STR_6069 :{STRING} 被{STRING}从服务器踢出.
STR_6070 :{STRING} 被设置到组'{STRING}', 通过{STRING}设置.
STR_6071 :{STRING} 创建新的玩家组'{STRING}'.
STR_6072 :{STRING} 删除玩家组'{String}'.
STR_6073 :{STRING} 编辑玩家组'{String}'的权限.
STR_6074 :{STRING} 将玩家组名称从'{String}'改名为'{String}'.
STR_6075 :{STRING} 设置默认玩家组为'{String}'.
STR_6076 :{STRING} 使用/开启作弊'{STRING}'.
STR_6077 :增加金钱
STR_6078 :{STRING} 建造游乐设施'{STRING}'.
STR_6079 :{STRING} 拆除游乐设施'{STRING}'.
STR_6080 :{STRING} 改变游乐设施'{STRING}'的外观.
STR_6081 :{STRING} 将游乐设施'{STRING}'的状态变为已关闭.
STR_6082 :{STRING} 将游乐设施'{STRING}'的状态变为开放中.
STR_6083 :{STRING} 将游乐设施'{STRING}'的状态变为测试中.
STR_6084 :{STRING} 改变游乐设施'{STRING}'的车辆选项.
STR_6085 :{STRING} 改变游乐设施'{STRING}'的设备选项.
STR_6086 :{STRING} 将游乐设施'{STRING}'改名为'{STRING}'.
STR_6087 :{STRING} 将游乐设施的价格从'{STRING}'调整到{STRING}
STR_6088 :{STRING} 将游乐设施的第二价格从'{STRING}'调整到{STRING}
STR_6089 :{STRING} 将游乐园名称从'{STRING}'改名为'{STRING}'.
STR_6090 :{STRING} 开放游乐园.
STR_6091 :{STRING} 关闭游乐园.
STR_6092 :{STRING} 将游乐园门票价格调整为{STRING}
STR_6093 :{STRING} 放置新景观.
STR_6094 :{STRING} 移除景观.
STR_6095 :{STRING} 编辑景观.
STR_6096 :{STRING} 将指示牌命名为'{STRING}'.
STR_6097 :{STRING} 为游乐设施放置一条新轨道'{STRING}'.
STR_6098 :{STRING} 移除游乐设施的一条轨道.
STR_6099 :你已连接到服务器.
STR_6100 :你已从服务器断开.
STR_6101 :游乐设施不会随时间流逝而贬值
STR_6102 :{SMALLFONT}{BLACK}游乐设施的价值不会随时间流逝而贬值, 因此游客不会产生玩此游乐设施太贵的想法.
STR_6103 :{SMALLFONT}{BLACK}此选项在联网模式下被禁用.
STR_6104 :螺旋过山车
STR_6105 :Hypercoaster
STR_6106 :轨道小车
STR_6107 :Monster Trucks
STR_6108 :钢架旋转式
STR_6109 :超旋转式
STR_6110 :Junior过山车
STR_6111 :经典迷你过山车
STR_6112 :一种紧凑的钢制轨道过山车, 其车厢穿越螺旋轨道和回旋轨道
STR_6113 :一种高大的非翻转的过山车, 拥有巨大降落, 高速和只有围栏限制的舒适的车厢
#TODO 6114
STR_6114 :乘客沿轨道缓慢行驶
STR_6115 :动力十足的4x4四驱卡车, 可以攀爬陡峭的斜坡
STR_6116 :宽阔的过山车车厢沿着光滑的钢轨滑行,穿过各种倒置轨道
STR_6117 :坐在舒适的只有简单的围栏护手的车厢中,即可享受巨大落差和旋转轨道,就像在山丘上的大量'空中时光'
STR_6118 :对于还没有勇气面对更大游乐设施的人们而言,这是一种温和的过山车
STR_6119 :一种廉价且方便建造的过山车, 但是有高度限制
STR_6120 :{BABYBLUE}新车辆可用于{STRINGID}:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}将游乐园土地所有权扩展至地图边缘
STR_6122 :此剧情中没有足够的过山车!
STR_6123 :加载错误的游乐园对象
STR_6124 :对象名称
STR_6125 :对象类型
STR_6126 :未知类型
STR_6127 :文件: {STRING}
STR_6128 :文件不能被加载, 因为其中一部分引用的对象丢失或错误. 以下是这些对象的列表.
STR_6129 :将选中的项目复制到剪贴板
STR_6130 :将整个列表复制到剪贴板
STR_6131 :对象源
STR_6132 :忽略研究状态
STR_6133 :{SMALLFONT}{BLACK}使用还未被研究出的游乐设施和景观
@ -4518,9 +4593,9 @@ STR_SCNR :Funtopia
STR_PARK :Funtopia
STR_DTLS :Covering land both sides of a highway, this park has several rides already operating
<Haunted Harbor>
STR_SCNR :Haunted Harbor
STR_PARK :Haunted Harbor
<Haunted Harbour>
STR_SCNR :Haunted Harbour
STR_PARK :Haunted Harbour
STR_DTLS :The local authority has agreed to sell nearby land cheaply to this small seaside park, on the condition that certain rides are preserved
<Fun Fortress>

View File

@ -4389,46 +4389,46 @@ STR_6076 :{STRING} 使用/開啟了密技 '{STRING}'.
STR_6077 :添加金錢
STR_6078 :{STRING} 建造了遊樂設施 '{STRING}'.
STR_6079 :{STRING} 拆除了遊樂設施 '{STRING}'.
STR_6080 :{STRING} changed the appearance of ride '{STRING}'.
STR_6081 :{STRING} changed the status of ride '{STRING}' to closed.
STR_6082 :{STRING} changed the status of ride '{STRING}' to open.
STR_6083 :{STRING} changed the status of ride '{STRING}' to testing.
STR_6084 :{STRING} changed the vehicle settings of ride '{STRING}'.
STR_6085 :{STRING} changed the ride settings of ride '{STRING}'.
STR_6086 :{STRING} renamed the ride '{STRING}' to '{STRING}'.
STR_6087 :{STRING} changed the price of ride '{STRING}' to {STRING}
STR_6088 :{STRING} changed the secondary price of ride '{STRING}' to {STRING}
STR_6089 :{STRING} renamed the park from '{STRING}' to '{STRING}'.
STR_6090 :{STRING} opened the park.
STR_6091 :{STRING} closed the park.
STR_6092 :{STRING} changed the park entrance fee to {STRING}
STR_6093 :{STRING} placed new scenery.
STR_6094 :{STRING} removed scenery.
STR_6095 :{STRING} edited scenery.
STR_6096 :{STRING} set sign name to '{STRING}'.
STR_6097 :{STRING} placed a track of ride '{STRING}'.
STR_6098 :{STRING} removed a track of ride.
STR_6080 :{STRING} 更改了遊樂設施 '{STRING}' 的外觀.
STR_6081 :{STRING} 關閉了遊樂設施 '{STRING}'.
STR_6082 :{STRING} 開啟了遊樂設施 '{STRING}'.
STR_6083 :{STRING} 測試了遊樂設施 '{STRING}'.
STR_6084 :{STRING} 更改了遊樂設施 '{STRING}' 的車輛設置.
STR_6085 :{STRING} 更改了遊樂設施 '{STRING}' 的運行設置.
STR_6086 :{STRING} 將遊樂設施 '{STRING}' 重命名至 '{STRING}'.
STR_6087 :{STRING} 將遊樂設施 '{STRING}' 的價錢調整至 {STRING}
STR_6088 :{STRING} 將遊樂設施 '{STRING}' 的額外價錢調整至 {STRING}
STR_6089 :{STRING} 將樂園 '{STRING}' 重命名至 '{STRING}'.
STR_6090 :{STRING} 開啟了樂園.
STR_6091 :{STRING} 關啟了樂園.
STR_6092 :{STRING} 將樂園的入場費調整至 {STRING}
STR_6093 :{STRING} 放置了新的景物.
STR_6094 :{STRING} 移除了景物.
STR_6095 :{STRING} 修改了景物.
STR_6096 :{STRING} 將橫額重命名至 '{STRING}'.
STR_6097 :{STRING} 於遊樂設施'{STRING}' 中添加了路軌.
STR_6098 :{STRING} 移除了某個遊樂設施中的路軌.
STR_6099 :你已連接到伺服器.
STR_6100 :你已由伺服器中斷線.
STR_6101 :遊樂設施的價值不會因隨時間下降
STR_6102 :{SMALLFONT}{BLACK}遊樂設施的價值再不會因隨時間下降, 因此遊客並不會突然有'不想花那麼多錢乘坐某個遊樂設施'的想法.
STR_6101 :遊樂設施的價值不會因隨時間折舊
STR_6102 :{SMALLFONT}{BLACK}遊樂設施的價值再不會因隨時間折舊, 因此遊客並不會突然有'不想花那麼多錢乘坐某個遊樂設施'的想法.
STR_6103 :{SMALLFONT}{BLACK}此選項於多人模式下被禁用.
STR_6104 :Corkscrew Roller Coaster
STR_6105 :Hypercoaster
STR_6106 :Car Ride
STR_6107 :Monster Trucks
STR_6108 :Steel Twister
STR_6109 :Hyper-Twister
STR_6110 :Junior Roller Coaster
STR_6111 :Classic Mini Roller Coaster
STR_6112 :A compact steel-tracked roller coaster where the train travels through corkscrews and loops
STR_6113 :A tall non-inverting roller coaster with large drops, high speed, and comfortable trains with only lap bar restraints
STR_6114 :Riders travel slowly in powered vehicles along a track-based route
STR_6115 :Powered giant 4 x 4 trucks which can climb steep slopes
STR_6116 :Wide roller coaster trains glide along smooth steel track, traveling through a variety of inversions
STR_6117 :Sitting in comfortable trains with only simple lap restraints riders enjoy giant smooth drops and twisting track as well as plenty of 'air time' over the hills
STR_6118 :A gentle roller coaster for people who haven't yet got the courage to face the larger rides
STR_6119 :A cheap and easy to build roller coaster, but with a limited height
STR_6104 :瓶塞鑽式雲霄飛車
STR_6105 :超級雲霄飛車
STR_6106 :自駕軌道車輛
STR_6107 :怪獸卡車
STR_6108 :鐵架旋轉式雲霄飛車
STR_6109 :超級旋轉式
STR_6110 :兒童雲霄飛車
STR_6111 :經典式迷你雲霄飛車
STR_6112 :一款列車會穿過螺旋及迴環的較小型雲霄飛車
STR_6113 :一款又高速又巨大但不倒轉發車的雲霄飛車, 擁有很高的下落軌道, 舒適但只有簡單大腿式安全裝備的列車
STR_6114 :乘客會坐在有動力的車輛內, 慢慢地依照軌道路線遊覽
STR_6115 :有動力並可以駕駛於陡斜的斜坡上的4 x 4卡車
STR_6116 :寬闊的雲霄飛車列車不費吹灰之力穿梭於順滑的金屬軌道上的各種倒轉軌道
STR_6117 :乘客坐在舒適並只有簡單安全裝備的列車上享受巨大而順滑的下滑, 扭曲的軌道和充足的'空中'時間
STR_6118 :一款較溫和的雲霄飛車, 設計給不敢乘坐雲霄飛車的乘客壯膽
STR_6119 :一款便宜又易於建造的雲霄飛車, 但亦因此只有著高度的限制
STR_6120 :{BABYBLUE}全新車廂種類可供使用於{STRINGID}:{NEWLINE}{STRINGID}
STR_6121 :{SMALLFONT}{BLACK}擴張樂園的土地擁有權到整個地圖的邊界
STR_6122 :此劇情沒有足夠的雲霄飛車!
@ -4737,7 +4737,7 @@ STR_DTLS :此樂園設定於一個沉睡火山口的湖之上
<Vertigo Views>
STR_SCNR :Vertigo Views
STR_PARK :Vertigo Views
STR_DTLS :這個大型的樂園已經擁有一座很棒的Hyper式雲霄飛車, 但你的任務是要將他的利潤大幅增加
STR_DTLS :這個大型的樂園已經擁有一座很棒的超級雲霄飛車, 但你的任務是要將他的利潤大幅增加
<Paradise Pier 2>
STR_SCNR :Paradise Pier 2

View File

@ -1,5 +1,10 @@
#version 150
const int FLAG_COLOUR = (1 << 0);
const int FLAG_REMAP = (1 << 1);
const int FLAG_TRANSPARENT = (1 << 2);
const int FLAG_TRANSPARENT_SPECIAL = (1 << 3);
uniform vec4 uPalette[256];
uniform usampler2DArray uTexture;
@ -30,13 +35,13 @@ void main()
vec4 texel;
// If remap palette used
if ((fFlags & (1 << 1)) != 0)
if ((fFlags & FLAG_REMAP) != 0)
{
// z is the size of each x pixel in the atlas
float x = fTexPaletteBounds.x + texture(uTexture, vec3(fTexColourCoords, float(fTexColourAtlas))).r * fTexPaletteBounds.z;
texel = uPalette[texture(uTexture, vec3(x, fTexPaletteBounds.y, float(fTexPaletteAtlas))).r];
} // If transparent or special transparent
else if ((fFlags & ((1 << 2) | (1 << 3))) != 0)
else if ((fFlags & (FLAG_TRANSPARENT | FLAG_TRANSPARENT_SPECIAL)) != 0)
{
float line = texture(uTexture,vec3(fTexColourCoords, float(fTexColourAtlas))).r;
if (line == 0.0)
@ -44,7 +49,7 @@ void main()
discard;
}
float alpha = 0.5;
if ((fFlags & (1 << 2)) != 0)
if ((fFlags & FLAG_TRANSPARENT_SPECIAL) != 0)
{
alpha = 0.5 + (line - 1.0) / 10.0;
}
@ -59,15 +64,20 @@ void main()
{
texel = uPalette[texture(uTexture, vec3(fTexColourCoords, float(fTexColourAtlas))).r];
}
vec4 mask = uPalette[texture(uTexture, vec3(fTexMaskCoords, float(fTexMaskAtlas))).r];
if (fMask != 0)
{
oColour = texel * mask;
float mask = texture(uTexture, vec3(fTexMaskCoords, float(fTexMaskAtlas))).r;
if ( mask == 0.0 )
{
discard;
}
oColour = texel;
}
else
{
if ((fFlags & 1) != 0)
if ((fFlags & FLAG_COLOUR) != 0)
{
oColour = vec4(fColour.rgb, fColour.a * texel.a);
}

2
debian/changelog vendored
View File

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

View File

@ -1,3 +1,46 @@
0.1.1 (in development)
------------------------------------------------------------------------
- Feature: [#5815] Add cheat to ignore research status and access rides/scenery not yet invented.
- Feature: [#5857] Keyboard shortcut for clear scenery.
- Feature: [#5877] Allow up to 16 stations to be synchronised
- Feature: [#5970] The Bobsleigh Roller Coaster now supports on-ride photos.
- Feature: [#5991] Allow all tracked rides that can be tested without guests to the Track Designer
- Fix: [#2127, #2229, #5586] Mountain tool cost calculation
- Fix: [#3589] Crash due to invalid footpathEntry in path_paint
- Fix: [#3852] Constructing path not clearing scenery on server.
- Fix: [#4455] Crash in window_sign_invalidate due to original bug
- Fix: [#4715] Fix OpenGL rendering of water when zoomed. See #5890.
- Fix: [#4931] Crash in path_paint - footpathentry was null
- Fix: [#5629] Issue with tower ride modes approach to station - incorrect sum caused sawtooth in velocity
- Fix: [#5768] Prevent loading non-existent title sequences.
- Fix: [#5858] Crash when using custom ride with no colour presets.
- Fix: [#5865] Ride preview flickering on uneven terrain or mid air.
- Fix: [#5872] Incorrect OpenGL rendering of masked sprites
- Fix: [#5880] Leaving bumper cars without building causes assertion.
- Fix: [#5890] Fix zoomed OpenGL rendering of special sprites with primary and secondary colours.
- Fix: [#5912] Negative queue when moving entrance in paused state.
- Fix: [#5920] Placing guest spawn doesn't do anything every 3rd click
- Fix: [#5939] Crash when importing 'Six Flags Santa Fe'.
- Fix: [#5977] Custom music files not showing up in music list
- Fix: [#5981] Ride list doesn't update after using quick demolish.
- Fix: [#5984] Allow socket binding to same port after crash
- Fix: [#5998] Staff not getting paid / no loan interest.
- Fix: [#6026] 'Select ride to advertise' dropdown does not display all items.
- Fix: [#6052] Unable to place entrance/exit on certain ride types.
- Fix: [#6071] Quick demolish can delete protected ride.
- Fix: [#6111] Mute button always visible in editor.
- Fix: [#6113] Track preview shows incorrect highest drop height.
- Improved: [#2223] Change mountain tool to ignore higher surrounding tiles.
- Improved: [#4301] Leading and trailing whitespace in player name is now removed.
- Improved: [#5859] OpenGL rendering performance
- Improved: [#5863] Switching drawing engines no longer requires the application to restart.
- Improved: [#6003] Doors placed on tracks will now work with all vehicles
- Improved: [#6037] Autosaves are now stored in a subfolder
- Improved: The land tool buttons can now be held down to increase/decrease size.
- Improved: Dropdowns longer than 32 items overflow into columns.
- Improved: Ride Type option in ride window is now a dropdown.
- Improved: "About OpenRCT2" window redesigned, now contains OpenRCT2 info and access to changelog
0.1.0 (2017-07-12)
------------------------------------------------------------------------
- Feature: [#1399 (partial), #5177] Add window that displays any missing/corrupt objects when loading a park

View File

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

View File

@ -28,6 +28,7 @@
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<DisableSpecificWarnings>4068;4091;4100;4132;4200;4201;4204;4206;4221;4244;4245;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<!-- Warnings:
C4068: unknown pragma
@ -42,12 +43,19 @@
C4244: 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
C4245: 'conversion_type': conversion from 'type1' to 'type2', signed/unsigned mismatch
-->
<WarningLevel>Level4</WarningLevel>
<TreatSpecificWarningsAsErrors>4263;4265;4548;4549;4555</TreatSpecificWarningsAsErrors>
<!-- Warnings, that have to be enabled manually:
C4263: 'function': member function does not override any base class virtual member function
C4265: 'class': class has virtual functions, but destructor is not virtual
C4548: expression before comma has no effect; expected expression with side-effect
C4549: 'operator': operator before comma has no effect; did you intend 'operator'?
C4555: expression has no effect; expected expression with side-effect
-->
<PreprocessorDefinitions>NO_RCT2;OPENGL_NO_LINK;_CRT_SECURE_NO_WARNINGS;_USE_MATH_DEFINES;CURL_STATICLIB;SDL_MAIN_HANDLED;_WINSOCK_DEPRECATED_NO_WARNINGS;ZIP_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalOptions>/utf-8 /std:c++latest</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:c++latest /permissive-</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>imm32.lib;version.lib;winmm.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
@ -76,7 +84,7 @@
<SDLCheck />
<OmitFramePointers />
<BufferSecurityCheck>false</BufferSecurityCheck>
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
</ClCompile>
<Link>

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.0</Version>
<Version>0.1.1</Version>
<VersionExtra Condition="'$(GIT_BRANCH)'!=''">-$(GIT_BRANCH)-$(GIT_COMMIT_SHA1_SHORT)</VersionExtra>
<VersionExtra Condition="'$(GIT_TAG)'!=''"></VersionExtra>
<TargetLibsVersion>12</TargetLibsVersion>

View File

@ -14,49 +14,48 @@ mkdir -p $cachedir
# Sets default target to "linux", if none specified
TARGET=${TARGET-linux}
SYSTEM=$(uname -s)
if [[ ! -d build ]]; then
mkdir -p build
fi
pushd build
echo OPENRCT2_CMAKE_OPTS = $OPENRCT2_CMAKE_OPTS
echo OPENRCT2_CMAKE_OPTS = "$OPENRCT2_CMAKE_OPTS"
if [[ $TARGET == "docker32" ]]
then
PARENT=$(readlink -f ../)
chmod a+rwx $(pwd)
chmod g+s $(pwd)
chmod a+rwx "$(pwd)"
chmod g+s "$(pwd)"
# CMAKE and MAKE opts from environment
docker run -u travis -v $PARENT:$PARENT -w $PARENT/build -i -t openrct2/openrct2:32bit-only bash -c "cmake ../ -DFORCE32=on $OPENRCT2_CMAKE_OPTS && make $OPENRCT_MAKE_OPTS"
docker run -u travis -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:32bit-only bash -c "cmake ../ -DFORCE32=on $OPENRCT2_CMAKE_OPTS && make $OPENRCT_MAKE_OPTS"
elif [[ $TARGET == "docker64" ]]
then
PARENT=$(readlink -f ../)
chmod a+rwx $(pwd)
chmod g+s $(pwd)
chmod a+rwx "$(pwd)"
chmod g+s "$(pwd)"
# 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 && make $OPENRCT_MAKE_OPTS && make test ARGS=\"-V\""
docker run -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:64bit-only bash -c "cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && make $OPENRCT_MAKE_OPTS && make test ARGS=\"-V\""
elif [[ $TARGET == "ubuntu_i686" ]]
then
PARENT=$(readlink -f ../)
chmod a+rwx $(pwd)
chmod g+s $(pwd)
chmod a+rwx "$(pwd)"
chmod g+s "$(pwd)"
# 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 && make all testpaint install $OPENRCT_MAKE_OPTS && make test ARGS=\"-V\" && ( ./testpaint --quiet || if [[ \$? -eq 1 ]] ; then echo Allowing failed tests to pass ; else echo here ; false; fi )"
docker run -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:ubuntu_i686 bash -c "cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && make all testpaint install $OPENRCT_MAKE_OPTS && make test ARGS=\"-V\" && ( ./testpaint --quiet || if [[ \$? -eq 1 ]] ; then echo Allowing failed tests to pass ; else echo here ; false; fi )"
elif [[ $TARGET == "ubuntu_amd64" ]]
then
PARENT=$(readlink -f ../)
chmod a+rwx $(pwd)
chmod g+s $(pwd)
chmod a+rwx "$(pwd)"
chmod g+s "$(pwd)"
# 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 && make $OPENRCT_MAKE_OPTS install && make test ARGS=\"-V\""
docker run -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:ubuntu_amd64 bash -c "cmake ../ -DWITH_TESTS=on $OPENRCT2_CMAKE_OPTS && make $OPENRCT_MAKE_OPTS install && make test ARGS=\"-V\""
elif [[ $TARGET == "windows" ]]
then
PARENT=$(readlink -f ../)
chmod a+rwx $(pwd)
chmod g+s $(pwd)
chmod a+rwx "$(pwd)"
chmod g+s "$(pwd)"
# CMAKE and MAKE opts from environment
docker run -v $PARENT:$PARENT -w $PARENT/build -i -t openrct2/openrct2:mingw-arch bash -c "cmake ../ $OPENRCT2_CMAKE_OPTS && make $OPENRCT_MAKE_OPTS"
docker run -v "$PARENT":"$PARENT" -w "$PARENT"/build -i -t openrct2/openrct2:mingw-arch bash -c "cmake ../ $OPENRCT2_CMAKE_OPTS && make $OPENRCT_MAKE_OPTS"
else
echo "Unkown target $TARGET"
exit 1

View File

@ -7,9 +7,6 @@ then
exit 1
fi
SDL2_PV=2.0.3
SDL2_TTF_PV=2.0.12
cachedir=.cache
if [[ $(uname -s) == "Darwin" ]]; then
liburl=https://openrct2.website/files/orctlibs-osx.zip
@ -20,9 +17,6 @@ mkdir -p "$cachedir"
# Sets default target to "ubuntu_amd64", if none specified
TARGET=${TARGET-ubuntu_amd64}
# keep in sync with version in build.sh
libversion=3
libVFile="./libversion"
function has_cmd {
command -v "$1" >/dev/null 2>&1

View File

@ -3,9 +3,9 @@
###########################################
$nottesting = (${env:Configuration} -notlike "*tests")
# Only deploy from VS2015 for now.
$notvs2017 = (${env:APPVEYOR_JOB_NAME} -notlike "*2017*")
if ($nottesting -and $notvs2017)
# Only deploy from VS2017 for now.
$notvs2015 = (${env:APPVEYOR_JOB_NAME} -notlike "*2015*")
if ($nottesting -and $notvs2015)
{
# Check if OpenRCT2.org API security token is available
if (${env:OPENRCT2_ORG_TOKEN})

View File

@ -10,7 +10,7 @@ android {
targetSdkVersion 25
versionCode 2
versionName '0.1.0'
versionName '0.1.1'
externalNativeBuild {
cmake {
@ -83,7 +83,7 @@ android.applicationVariants.all { variant ->
dest "$variant.mergeAssets.outputDir/data"
}
download {
src 'https://github.com/OpenRCT2/title-sequences/releases/download/v0.0.5/title-sequence-v0.0.5.zip'
src 'https://github.com/OpenRCT2/title-sequences/releases/download/v0.1.0/title-sequence-v0.1.0.zip'
dest new File(buildDir, 'title-sequence.zip')
}
copy {

View File

@ -1,5 +1,5 @@
# CMAKE project for openrct2-cli (CLI-only build of OpenRCT2)
cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 3.1)
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
endif ()

View File

@ -1,5 +1,5 @@
# CMAKE project for openrct2-ui (UI build of OpenRCT2)
cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 3.1)
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
endif ()

View File

@ -30,6 +30,7 @@
#include <openrct2/localisation/string_ids.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"
@ -72,8 +73,6 @@ private:
SDL_Window * _window = nullptr;
sint32 _width = 0;
sint32 _height = 0;
uint32 _windowFlags = 0;
uint32 _windowFlagsLastCheckTick = 0;
bool _resolutionsAllowAnyAspectRatio = false;
std::vector<Resolution> _fsResolutions;
@ -108,6 +107,7 @@ public:
~UiContext() override
{
CloseWindow();
delete _windowManager;
SDL_QuitSubSystem(SDL_INIT_VIDEO);
delete _platformUiContext;
}
@ -283,7 +283,7 @@ public:
{
switch (e.type) {
case SDL_QUIT:
rct2_quit();
context_quit();
break;
case SDL_WINDOWEVENT:
// HACK: Fix #2158, OpenRCT2 does not draw if it does not think that the window is
@ -429,7 +429,7 @@ public:
if (_cursorState.touchIsDouble)
{
store_mouse_input(MOUSE_STATE_RIGHT_RELEASE, x, y);
_cursorState.left = CURSOR_RELEASED;
_cursorState.right = CURSOR_RELEASED;
_cursorState.old = 4;
}
else {
@ -516,44 +516,28 @@ public:
sint32 x = SDL_WINDOWPOS_UNDEFINED_DISPLAY(defaultDisplay);
sint32 y = SDL_WINDOWPOS_UNDEFINED_DISPLAY(defaultDisplay);
// Get saved window size
sint32 width = gConfigGeneral.window_width;
sint32 height = gConfigGeneral.window_height;
if (width <= 0) width = 640;
if (height <= 0) height = 480;
// Create window in window first rather than fullscreen so we have the display the window is on first
uint32 flags = SDL_WINDOW_RESIZABLE;
if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_OPENGL)
{
flags |= SDL_WINDOW_OPENGL;
}
_window = SDL_CreateWindow(OPENRCT2_NAME, x, y, width, height, flags);
if (_window == nullptr)
{
SDLException::Throw("SDL_CreateWindow(...)");
}
SDL_SetWindowMinimumSize(_window, 720, 480);
SetCursorTrap(gConfigGeneral.trap_cursor);
_platformUiContext->SetWindowIcon(_window);
// Initialise the surface, palette and draw buffer
OnResize(width, height);
UpdateFullscreenResolutions();
SetFullscreenMode((FULLSCREEN_MODE)gConfigGeneral.fullscreen_mode);
CreateWindow(x, y);
// Check if steam overlay renderer is loaded into the process
_steamOverlayActive = _platformUiContext->IsSteamOverlayAttached();
TriggerResize();
}
void CloseWindow() override
{
drawing_engine_dispose();
SDL_DestroyWindow(_window);
_window = nullptr;
}
void RecreateWindow() override
{
// Use the position of the current window for the new window
sint32 x, y;
SDL_SetWindowFullscreen(_window, 0);
SDL_GetWindowPosition(_window, &x, &y);
CloseWindow();
CreateWindow(x, y);
}
void ShowMessageBox(const std::string &message) override
@ -646,6 +630,41 @@ public:
private:
void CreateWindow(sint32 x, sint32 y)
{
// Get saved window size
sint32 width = gConfigGeneral.window_width;
sint32 height = gConfigGeneral.window_height;
if (width <= 0) width = 640;
if (height <= 0) height = 480;
// Create window in window first rather than fullscreen so we have the display the window is on first
uint32 flags = SDL_WINDOW_RESIZABLE;
if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_OPENGL)
{
flags |= SDL_WINDOW_OPENGL;
}
_window = SDL_CreateWindow(OPENRCT2_NAME, x, y, width, height, flags);
if (_window == nullptr)
{
SDLException::Throw("SDL_CreateWindow(...)");
}
SDL_SetWindowMinimumSize(_window, 720, 480);
SetCursorTrap(gConfigGeneral.trap_cursor);
_platformUiContext->SetWindowIcon(_window);
// Initialise the surface, palette and draw buffer
drawing_engine_init();
OnResize(width, height);
UpdateFullscreenResolutions();
SetFullscreenMode((FULLSCREEN_MODE)gConfigGeneral.fullscreen_mode);
TriggerResize();
}
void OnResize(sint32 width, sint32 height)
{
// Scale the native window size to the game's canvas size
@ -664,7 +683,6 @@ private:
gfx_invalidate_screen();
// Check if the window has been resized in windowed mode and update the config file accordingly
// This is called in rct2_update and is only called after resizing a window has finished
sint32 nonWindowFlags =
#ifndef __MACOSX__
SDL_WINDOW_MAXIMIZED |
@ -764,14 +782,7 @@ private:
uint32 GetWindowFlags()
{
// Don't check if window is minimised too frequently (every second is fine)
uint32 tick = Platform::GetTicks();
if (tick > _windowFlagsLastCheckTick + 1000)
{
_windowFlags = SDL_GetWindowFlags(_window);
_windowFlagsLastCheckTick = tick;
}
return _windowFlags;
return SDL_GetWindowFlags(_window);
}
};

View File

@ -118,14 +118,14 @@ namespace OpenRCT2 { namespace Ui
panel.canChooseFiles = false;
panel.canChooseDirectories = true;
panel.allowsMultipleSelection = false;
utf8 *url = NULL;
if ([panel runModal] == NSFileHandlingPanelOKButton)
{
NSString *selectedPath = panel.URL.path;
const char *path = selectedPath.UTF8String;
url = _strdup(path);
return path;
} else {
return "";
}
return url;
}
}

View File

@ -26,7 +26,7 @@ namespace OpenRCT2 { namespace Audio
class AudioContext : public IAudioContext
{
private:
IAudioMixer * _audioMixer;
IAudioMixer * _audioMixer = nullptr;
public:
AudioContext()
@ -40,6 +40,7 @@ namespace OpenRCT2 { namespace Audio
~AudioContext() override
{
delete _audioMixer;
SDL_QuitSubSystem(SDL_INIT_AUDIO);
}

View File

@ -18,6 +18,7 @@
#include <SDL.h>
#include <speex/speex_resampler.h>
#include <list>
#include <openrct2/Context.h>
#include <openrct2/core/Guard.hpp>
#include <openrct2/core/Math.hpp>
#include <openrct2/core/Memory.hpp>
@ -35,7 +36,6 @@ extern "C"
#include <openrct2/localisation/localisation.h>
#include <openrct2/OpenRCT2.h>
#include <openrct2/platform/platform.h>
#include <openrct2/rct2.h>
}
namespace OpenRCT2 { namespace Audio
@ -207,7 +207,7 @@ namespace OpenRCT2 { namespace Audio
IAudioSource * source = _musicSources[pathId];
if (source == nullptr)
{
const utf8 * path = get_file_path((sint32)pathId);
const utf8 * path = context_get_path_legacy((sint32)pathId);
source = AudioSource::CreateMemoryFromWAV(path, &_format);
if (source == nullptr)
{
@ -238,7 +238,7 @@ namespace OpenRCT2 { namespace Audio
private:
void LoadAllSounds()
{
const utf8 * css1Path = get_file_path(PATH_ID_CSS1);
const utf8 * css1Path = context_get_path_legacy(PATH_ID_CSS1);
for (size_t i = 0; i < Util::CountOf(_css1Sources); i++)
{
auto source = AudioSource::CreateMemoryFromCSS1(css1Path, i, &_format);

View File

@ -53,7 +53,8 @@ private:
public:
explicit HardwareDisplayDrawingEngine(IUiContext * uiContext)
: _uiContext(uiContext)
: X8DrawingEngine(uiContext),
_uiContext(uiContext)
{
_window = (SDL_Window *)_uiContext->GetWindow();
}
@ -75,8 +76,13 @@ public:
SDL_DestroyTexture(_screenTexture);
SDL_FreeFormat(_screenTextureFormat);
SDL_RendererInfo rendererInfo;
SDL_GetRendererInfo(_sdlRenderer, &rendererInfo);
SDL_RendererInfo rendererInfo = {};
sint32 result = SDL_GetRendererInfo(_sdlRenderer, &rendererInfo);
if (result < 0)
{
log_warning("HWDisplayDrawingEngine::Resize error: %s", SDL_GetError());
return;
}
uint32 pixelFormat = SDL_PIXELFORMAT_UNKNOWN;
for (uint32 i = 0; i < rendererInfo.num_texture_formats; i++)
{
@ -121,9 +127,8 @@ public:
}
}
void Draw() override
void EndDraw() override
{
X8DrawingEngine::Draw();
Display();
}

View File

@ -44,7 +44,8 @@ private:
public:
explicit SoftwareDrawingEngine(IUiContext * uiContext)
: _uiContext(uiContext)
: X8DrawingEngine(uiContext),
_uiContext(uiContext)
{
_window = (SDL_Window *)_uiContext->GetWindow();
}
@ -104,9 +105,8 @@ public:
}
}
void Draw() override
void EndDraw() override
{
X8DrawingEngine::Draw();
Display();
}

View File

@ -35,13 +35,4 @@ struct DrawLineCommand {
sint32 pos[4];
};
struct DrawImageCommand {
uint32 flags;
vec4f colour;
sint32 clip[4];
CachedTextureInfo texMask;
CachedTextureInfo texColour;
CachedTextureInfo texPalette;
sint32 bounds[4];
bool mask;
};
typedef DrawImageInstance DrawImageCommand;

View File

@ -81,8 +81,6 @@ DrawImageShader::~DrawImageShader()
glDeleteBuffers(1, &_vbo);
glDeleteBuffers(1, &_vboInstances);
glDeleteVertexArrays(1, &_vao);
glBindVertexArray(_vao);
}
void DrawImageShader::GetLocations()

View File

@ -34,6 +34,14 @@ struct DrawImageInstance {
vec4f colour;
vec4i bounds;
sint32 mask;
enum
{
FLAG_COLOUR = (1 << 0),
FLAG_REMAP = (1 << 1),
FLAG_TRANSPARENT = (1 << 2),
FLAG_TRANSPARENT_SPECIAL = (1 << 3),
};
};
class DrawImageShader final : public OpenGLShaderProgram

View File

@ -41,8 +41,6 @@ DrawLineShader::~DrawLineShader()
{
glDeleteBuffers(1, &_vbo);
glDeleteVertexArrays(1, &_vao);
glBindVertexArray(_vao);
}
void DrawLineShader::GetLocations()

View File

@ -43,8 +43,6 @@ FillRectShader::~FillRectShader()
{
glDeleteBuffers(1, &_vbo);
glDeleteVertexArrays(1, &_vao);
glBindVertexArray(_vao);
}
void FillRectShader::GetLocations()

View File

@ -121,8 +121,14 @@ static const char * TryLoadAllProcAddresses()
namespace OpenGLState
{
uint16 ActiveTexture = UINT16_MAX;
GLuint CurrentProgram = UINT32_MAX;
uint16 ActiveTexture;
GLuint CurrentProgram;
void Reset()
{
ActiveTexture = UINT16_MAX;
CurrentProgram = UINT32_MAX;
}
}
void OpenGLAPI::SetTexture(uint16 index, GLenum type, GLuint texture)
@ -136,6 +142,8 @@ void OpenGLAPI::SetTexture(uint16 index, GLenum type, GLuint texture)
bool OpenGLAPI::Initialise()
{
OpenGLState::Reset();
#ifdef OPENGL_NO_LINK
const char * failedProcName = TryLoadAllProcAddresses();
if (failedProcName != nullptr)

View File

@ -198,4 +198,6 @@ namespace OpenGLState
{
extern uint16 ActiveTexture;
extern GLuint CurrentProgram;
void Reset();
}

View File

@ -330,41 +330,42 @@ public:
{
}
void Draw() override
void BeginDraw() override
{
assert(_screenFramebuffer != nullptr);
assert(_swapFramebuffer != nullptr);
_swapFramebuffer->Bind();
}
if (gIntroState != INTRO_STATE_NONE) {
intro_draw(&_bitsDPI);
} else {
window_update_all_viewports();
window_draw_all(&_bitsDPI, 0, 0, _width, _height);
window_update_all();
gfx_draw_pickedup_peep(&_bitsDPI);
_drawingContext->FlushCommandBuffers();
_swapFramebuffer->SwapCopy();
rct2_draw(&_bitsDPI);
}
void EndDraw() override
{
_drawingContext->FlushCommandBuffers();
// Scale up to window
_screenFramebuffer->Bind();
_copyFramebufferShader->Use();
_copyFramebufferShader->SetTexture(_swapFramebuffer->GetTargetFramebuffer()
->GetTexture());
_copyFramebufferShader->SetTexture(_swapFramebuffer->GetTargetFramebuffer()->GetTexture());
_copyFramebufferShader->Draw();
CheckGLError();
Display();
}
void PaintWindows() override
{
window_update_all_viewports();
window_draw_all(&_bitsDPI, 0, 0, _width, _height);
// TODO move this out from drawing
window_update_all();
}
void PaintRain() override
{
// Not implemented
}
sint32 Screenshot() override
{
const OpenGLFramebuffer * framebuffer = _swapFramebuffer->GetTargetFramebuffer();
@ -707,7 +708,7 @@ void OpenGLDrawingContext::DrawSprite(uint32 image, sint32 x, sint32 y, uint32 t
zoomedDPI.pitch = _dpi->pitch;
zoomedDPI.zoom_level = _dpi->zoom_level - 1;
SetDPI(&zoomedDPI);
DrawSprite((image & 0xE0000000) | (g1Id - g1Element->zoomed_offset), x >> 1, y >> 1, tertiaryColour);
DrawSprite((image & 0xFFF80000) | (g1Id - g1Element->zoomed_offset), x >> 1, y >> 1, tertiaryColour);
return;
}
if (g1Element->flags & (1 << 5))
@ -769,18 +770,7 @@ void OpenGLDrawingContext::DrawSprite(uint32 image, sint32 x, sint32 y, uint32 t
right += _clipLeft;
bottom += _clipTop;
DrawImageCommand command = {};
command.flags = 0;
command.mask = false;
command.clip[0] = _clipLeft;
command.clip[1] = _clipTop;
command.clip[2] = _clipRight;
command.clip[3] = _clipBottom;
auto texture = _textureCache->GetOrLoadImageTexture(image);
command.texColour = texture;
bool special = false;
if (!(image & IMAGE_TYPE_REMAP_2_PLUS) && (image & IMAGE_TYPE_REMAP)) {
@ -793,23 +783,42 @@ void OpenGLDrawingContext::DrawSprite(uint32 image, sint32 x, sint32 y, uint32 t
tertiaryColour = 0;
}
texture = _textureCache->GetOrLoadPaletteTexture(image, tertiaryColour, special);
command.texPalette = texture;
auto texture2 = _textureCache->GetOrLoadPaletteTexture(image, tertiaryColour, special);
if (image & IMAGE_TYPE_TRANSPARENT) {
command.flags |= (1 << 3);
DrawImageCommand command;
command.clip = { _clipLeft, _clipTop, _clipRight, _clipBottom };
command.texColourAtlas = texture.index;
command.texColourBounds = texture.normalizedBounds;
command.texMaskAtlas = 0;
command.texMaskBounds = { 0.0f, 0.0f, 0.0f };
command.texPaletteAtlas = texture2.index;
command.texPaletteBounds = {
texture2.normalizedBounds.x,
texture2.normalizedBounds.y,
(texture2.normalizedBounds.z - texture2.normalizedBounds.x) / (float)(texture2.bounds.z - texture2.bounds.x),
(texture2.normalizedBounds.w - texture2.normalizedBounds.y) / (float)(texture2.bounds.w - texture2.bounds.y)
};
command.colour = { 0.0f, 0.0f, 0.0f };
command.bounds = { left, top, right, bottom };
command.mask = 0;
command.flags = 0;
if (special)
{
command.flags |= DrawImageCommand::FLAG_TRANSPARENT_SPECIAL;
}
else if (image & (IMAGE_TYPE_REMAP_2_PLUS | IMAGE_TYPE_REMAP)){
command.flags |= (1 << 1);
if (image & IMAGE_TYPE_TRANSPARENT)
{
command.flags |= DrawImageCommand::FLAG_TRANSPARENT;
}
else if (image & (IMAGE_TYPE_REMAP_2_PLUS | IMAGE_TYPE_REMAP))
{
command.flags |= DrawImageCommand::FLAG_REMAP;
}
command.flags |= special << 2;
command.bounds[0] = left;
command.bounds[1] = top;
command.bounds[2] = right;
command.bounds[3] = bottom;
_commandBuffers.images.push_back(command);
_commandBuffers.images.emplace_back(std::move(command));
}
void OpenGLDrawingContext::DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage)
@ -856,24 +865,21 @@ void OpenGLDrawingContext::DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskIm
right += _clipLeft;
bottom += _clipTop;
DrawImageCommand command = {};
DrawImageCommand command;
command.mask = true;
command.clip = { _clipLeft, _clipTop, _clipRight, _clipBottom };
command.texColourAtlas = textureColour.index;
command.texColourBounds = textureColour.normalizedBounds;
command.texMaskAtlas = textureMask.index;
command.texMaskBounds = textureMask.normalizedBounds;
command.texPaletteAtlas = 0;
command.texPaletteBounds = {0.0f, 0.0f, 0.0f};
command.flags = 0;
command.colour = {0.0f, 0.0f, 0.0f};
command.bounds = { left, top, right, bottom };
command.mask = 1;
command.clip[0] = _clipLeft;
command.clip[1] = _clipTop;
command.clip[2] = _clipRight;
command.clip[3] = _clipBottom;
command.texMask = textureMask;
command.texColour = textureColour;
command.bounds[0] = left;
command.bounds[1] = top;
command.bounds[2] = right;
command.bounds[3] = bottom;
_commandBuffers.images.push_back(command);
_commandBuffers.images.emplace_back(std::move(command));
}
void OpenGLDrawingContext::DrawSpriteSolid(uint32 image, sint32 x, sint32 y, uint8 colour)
@ -909,25 +915,26 @@ void OpenGLDrawingContext::DrawSpriteSolid(uint32 image, sint32 x, sint32 y, uin
right += _offsetX;
bottom += _offsetY;
DrawImageCommand command = {};
DrawImageCommand command;
command.flags = 1;
command.mask = false;
command.clip = { _clipLeft, _clipTop, _clipRight, _clipBottom };
command.texColourAtlas = texture.index;
command.texColourBounds = texture.normalizedBounds;
command.texMaskAtlas = 0;
command.texMaskBounds = { 0.0f, 0.0f, 0.0f };
command.texPaletteAtlas = texture.index;
command.texPaletteBounds = {
texture.normalizedBounds.x,
texture.normalizedBounds.y,
(texture.normalizedBounds.z - texture.normalizedBounds.x) / (float)(texture.bounds.z - texture.bounds.x),
(texture.normalizedBounds.w - texture.normalizedBounds.y) / (float)(texture.bounds.w - texture.bounds.y)
};
command.flags = DrawImageCommand::FLAG_COLOUR;
command.colour = paletteColour;
command.bounds = { left, top, right, bottom };
command.mask = 0;
command.clip[0] = _clipLeft;
command.clip[1] = _clipTop;
command.clip[2] = _clipRight;
command.clip[3] = _clipBottom;
command.texColour = texture;
command.bounds[0] = left;
command.bounds[1] = top;
command.bounds[2] = right;
command.bounds[3] = bottom;
_commandBuffers.images.push_back(command);
_commandBuffers.images.emplace_back(std::move(command));
}
void OpenGLDrawingContext::DrawGlyph(uint32 image, sint32 x, sint32 y, uint8 * palette)
@ -961,31 +968,27 @@ void OpenGLDrawingContext::DrawGlyph(uint32 image, sint32 x, sint32 y, uint8 * p
right += _offsetX;
bottom += _offsetY;
DrawImageCommand command = {};
DrawImageCommand command;
command.clip = { _clipLeft, _clipTop, _clipRight, _clipBottom };
command.texColourAtlas = texture.index;
command.texColourBounds = texture.normalizedBounds;
command.texMaskAtlas = 0;
command.texMaskBounds = { 0.0f, 0.0f, 0.0f };
command.texPaletteAtlas = 0;
command.texPaletteBounds = { 0.0f, 0.0f, 0.0f};
command.flags = 0;
command.mask = false;
command.colour = { 0.0f, 0.0f, 0.0f };
command.bounds = { left, top, right, bottom };
command.mask = 0;
command.clip[0] = _clipLeft;
command.clip[1] = _clipTop;
command.clip[2] = _clipRight;
command.clip[3] = _clipBottom;
command.texColour = texture;
command.bounds[0] = left;
command.bounds[1] = top;
command.bounds[2] = right;
command.bounds[3] = bottom;
_commandBuffers.images.push_back(command);
_commandBuffers.images.emplace_back(std::move(command));
}
void OpenGLDrawingContext::FlushCommandBuffers()
{
FlushRectangles();
FlushLines();
FlushImages();
}
@ -1023,37 +1026,8 @@ void OpenGLDrawingContext::FlushImages()
OpenGLAPI::SetTexture(0, GL_TEXTURE_2D_ARRAY, _textureCache->GetAtlasesTexture());
std::vector<DrawImageInstance> instances;
instances.reserve(_commandBuffers.images.size());
for (const auto& command : _commandBuffers.images)
{
DrawImageInstance instance;
instance.clip = {command.clip[0], command.clip[1], command.clip[2], command.clip[3]};
instance.texColourAtlas = command.texColour.index;
instance.texColourBounds = command.texColour.normalizedBounds;
instance.texMaskAtlas = command.texMask.index;
instance.texMaskBounds = command.texMask.normalizedBounds;
instance.flags = command.flags;
instance.colour = command.colour;
instance.bounds = {command.bounds[0], command.bounds[1], command.bounds[2], command.bounds[3]};
instance.mask = command.mask;
instance.texPaletteAtlas = command.texPalette.index;
if (instance.flags != 0) {
instance.texPaletteBounds = {
command.texPalette.normalizedBounds.x,
command.texPalette.normalizedBounds.y,
(command.texPalette.normalizedBounds.z - command.texPalette.normalizedBounds.x) / (float)(command.texPalette.bounds.z - command.texPalette.bounds.x),
(command.texPalette.normalizedBounds.w - command.texPalette.normalizedBounds.y) / (float)(command.texPalette.bounds.w - command.texPalette.bounds.y)
};
}
instances.push_back(instance);
}
_drawImageShader->Use();
_drawImageShader->DrawInstances(instances);
_drawImageShader->DrawInstances(_commandBuffers.images);
_commandBuffers.images.clear();
}

View File

@ -309,4 +309,5 @@ const uint16 KeyboardShortcuts::DefaultKeys[SHORTCUT_COUNT] =
SDL_SCANCODE_KP_0, // SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT
SDL_SCANCODE_KP_MINUS, // SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT
PLATFORM_MODIFIER | SDL_SCANCODE_L, // SHORTCUT_LOAD_GAME
SDL_SCANCODE_B, // SHORTCUT_CLEAR_SCENERY
};

View File

@ -95,6 +95,7 @@ enum
SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT,
SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT,
SHORTCUT_LOAD_GAME,
SHORTCUT_CLEAR_SCENERY,
SHORTCUT_COUNT,

View File

@ -23,6 +23,7 @@
#include <openrct2/interface/Screenshot.h>
#include <openrct2/localisation/localisation.h>
#include <openrct2/network/network.h>
#include <openrct2/OpenRCT2.h>
#include <openrct2/platform/platform.h>
#include <openrct2/ride/track.h>
#include <openrct2/ride/track_paint.h>
@ -214,7 +215,7 @@ static void shortcut_remove_top_bottom_toolbar_toggle()
window_close(window_find_by_class(WC_TITLE_OPTIONS));
window_close(window_find_by_class(WC_TITLE_MENU));
window_close(window_find_by_class(WC_TITLE_EXIT));
gTitleHideVersionInfo = true;
title_set_hide_version_info(true);
} else {
title_create_windows();
}
@ -495,6 +496,23 @@ static void shortcut_open_cheat_window()
window_cheats_open();
}
static void shortcut_clear_scenery()
{
if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO)
return;
if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) || gS6Info.editor_step == EDITOR_STEP_LANDSCAPE_EDITOR) {
if (!(gScreenFlags & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER))) {
rct_window *window = window_find_by_class(WC_TOP_TOOLBAR);
if (window != NULL) {
window_invalidate(window);
window_event_mouse_up_call(window, WC_TOP_TOOLBAR__WIDX_CLEAR_SCENERY);
}
}
}
}
static void shortcut_open_chat_window()
{
if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO)
@ -722,6 +740,7 @@ static const shortcut_action shortcut_table[SHORTCUT_COUNT] = {
shortcut_ride_construction_build_current,
shortcut_ride_construction_demolish_current,
shortcut_load_game,
shortcut_clear_scenery,
};
#pragma endregion

View File

@ -150,6 +150,7 @@ const rct_string_id ShortcutStringIds[] = {
STR_SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT,
STR_SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT,
STR_LOAD_GAME,
STR_SHORTCUT_CLEAR_SCENERY,
};
/**

View File

@ -1,5 +1,5 @@
# CMAKE project for libopenrct2 (core OpenRCT2 component)
cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 3.1)
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
endif ()
@ -128,7 +128,7 @@ endif ()
# Outputs
set(PROJECT libopenrct2)
project(${PROJECT})
add_library(${PROJECT} SHARED ${OPENRCT2_CORE_SOURCES} ${OPENRCT2_CORE_MM_SOURCES} ${RCT2_SECTIONS})
add_library(${PROJECT} ${OPENRCT2_CORE_SOURCES} ${OPENRCT2_CORE_MM_SOURCES} ${RCT2_SECTIONS})
set_target_properties(${PROJECT} PROPERTIES PREFIX "")
set_target_properties(${PROJECT} PROPERTIES COMPILE_FLAGS "-Wundef")
@ -164,6 +164,12 @@ if (NOT DISABLE_NETWORK)
if (WIN32)
target_link_libraries(${PROJECT} ws2_32)
endif ()
# our HTTP implementation requires use of threads
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(${PROJECT} Threads::Threads)
if (STATIC)
target_link_libraries(${PROJECT} ${LIBCURL_STATIC_LIBRARIES}
${SSL_STATIC_LIBRARIES})
@ -265,3 +271,13 @@ if (NOT DISABLE_RCT2)
# builds without need for -fno-omit-frame-pointer
set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/rct2/addresses.c PROPERTIES COMPILE_FLAGS -O0)
endif ()
if (CXX_WARN_SUGGEST_FINAL_TYPES)
# Disable -Wsuggest-final-types via pragmas where due.
add_definitions(-D__WARN_SUGGEST_FINAL_TYPES__)
endif ()
if (CXX_WARN_SUGGEST_FINAL_METHODS)
# Disable -Wsuggest-final-methods via pragmas where due.
add_definitions(-D__WARN_SUGGEST_FINAL_METHODS__)
endif ()

View File

@ -22,9 +22,12 @@
#include "ui/UiContext.h"
#include "core/Console.hpp"
#include "core/File.h"
#include "core/FileScanner.h"
#include "core/FileStream.hpp"
#include "core/Guard.hpp"
#include "core/Math.hpp"
#include "core/MemoryStream.h"
#include "core/Path.hpp"
#include "core/String.hpp"
#include "FileClassifier.h"
#include "network/network.h"
@ -45,19 +48,23 @@ extern "C"
{
#include "audio/audio.h"
#include "config/Config.h"
#include "drawing/lightfx.h"
#include "editor.h"
#include "game.h"
#include "input.h"
#include "interface/chat.h"
#include "interface/console.h"
#include "interface/themes.h"
#include "intro.h"
#include "localisation/localisation.h"
#include "network/http.h"
#include "network/network.h"
#include "network/twitch.h"
#include "object_list.h"
#include "platform/platform.h"
#include "rct1.h"
#include "rct2.h"
#include "rct2/interop.h"
#include "util/util.h"
}
using namespace OpenRCT2;
@ -80,9 +87,14 @@ namespace OpenRCT2
ITrackDesignRepository * _trackDesignRepository = nullptr;
IScenarioRepository * _scenarioRepository = nullptr;
bool _isWindowMinimised = false;
uint32 _lastTick = 0;
uint32 _accumulator = 0;
// Game states
TitleScreen * _titleScreen = nullptr;
bool _initialised = false;
bool _isWindowMinimised = false;
uint32 _lastTick = 0;
uint32 _accumulator = 0;
uint32 _lastUpdateTick = 0;
/** If set, will end the OpenRCT2 game loop. Intentially private to this module so that the flag can not be set back to false. */
bool _finished = false;
@ -107,13 +119,23 @@ namespace OpenRCT2
network_close();
http_dispose();
language_close_all();
rct2_dispose();
object_manager_unload_all_objects();
gfx_object_check_all_images_freed();
gfx_unload_g2();
gfx_unload_g1();
config_release();
#ifndef DISABLE_NETWORK
EVP_MD_CTX_destroy(gHashCTX);
#endif // DISABLE_NETWORK
rct2_interop_dispose();
platform_free();
delete _titleScreen;
delete _scenarioRepository;
delete _trackDesignRepository;
delete _objectManager;
delete _objectRepository;
Instance = nullptr;
}
@ -144,8 +166,95 @@ namespace OpenRCT2
_finished = true;
}
void Quit() override
{
gSavePromptMode = PM_QUIT;
window_save_prompt_open();
}
std::string GetPathLegacy(sint32 pathId) override
{
static const char * const LegacyFileNames[PATH_ID_END] =
{
nullptr,
nullptr,
"css1.dat",
"css2.dat",
"css4.dat",
"css5.dat",
"css6.dat",
"css7.dat",
"css8.dat",
"css9.dat",
"css11.dat",
"css12.dat",
"css13.dat",
"css14.dat",
"css15.dat",
"css3.dat",
"css17.dat",
"css18.dat",
"css19.dat",
"css20.dat",
"css21.dat",
"css22.dat",
nullptr,
"css23.dat",
"css24.dat",
"css25.dat",
"css26.dat",
"css27.dat",
"css28.dat",
"css29.dat",
"css30.dat",
"css31.dat",
"css32.dat",
"css33.dat",
"css34.dat",
"css35.dat",
"css36.dat",
"css37.dat",
"css38.dat",
"CUSTOM1.WAV",
"CUSTOM2.WAV",
"css39.dat",
"css40.dat",
"css41.dat",
nullptr,
"css42.dat",
"css43.dat",
"css44.dat",
"css45.dat",
"css46.dat",
"css50.dat"
};
std::string result;
if (pathId == PATH_ID_CSS50)
{
auto dataPath = _env->GetDirectoryPath(DIRBASE::RCT1, DIRID::DATA);
result = Path::Combine(dataPath, "css17.dat");
}
else if (pathId >= 0 && pathId < PATH_ID_END)
{
auto fileName = LegacyFileNames[pathId];
if (fileName != nullptr)
{
auto dataPath = _env->GetDirectoryPath(DIRBASE::RCT2, DIRID::DATA);
result = Path::Combine(dataPath, fileName);
}
}
return result;
}
bool Initialise() final override
{
if (_initialised)
{
throw std::runtime_error("Context already initialised.");
}
_initialised = true;
#ifndef DISABLE_NETWORK
gHashCTX = EVP_MD_CTX_create();
Guard::Assert(gHashCTX != nullptr, "EVP_MD_CTX_create failed");
@ -170,15 +279,29 @@ namespace OpenRCT2
config_save_default();
}
if (!rct2_init_directories() || !rct2_startup_checks())
if (platform_process_is_elevated())
{
std::string elevationWarning = "It is not recommended to run OpenRCT2 with elevated permissions.";
if (gOpenRCT2Headless)
{
Console::Error::WriteLine(elevationWarning.c_str());
}
else
{
_uiContext->ShowMessageBox(elevationWarning);
}
}
auto rct2InstallPath = GetOrPromptRCT2Path();
if (rct2InstallPath.empty())
{
return false;
}
_env->SetBasePath(DIRBASE::RCT2, gRCT2AddressAppPath);
_env->SetBasePath(DIRBASE::RCT2, rct2InstallPath);
if (!gOpenRCT2Headless)
{
GetContext()->GetUiContext()->CreateWindow();
_uiContext->CreateWindow();
}
// TODO add configuration option to allow multiple instances
@ -219,26 +342,82 @@ namespace OpenRCT2
{
audio_init();
audio_populate_devices();
audio_init_ride_sounds_and_info();
}
http_init();
network_set_env(_env);
chat_init();
theme_manager_initialise();
CopyOriginalUserFilesOver();
rct2_interop_setup_hooks();
if (!rct2_init())
if (!gOpenRCT2NoGraphics)
{
return false;
LoadBaseGraphics();
#ifdef __ENABLE_LIGHTFX__
lightfx_init();
#endif
}
gScenarioTicks = 0;
util_srand((uint32)time(0));
input_reset_place_obj_modifier();
viewport_init_all();
game_init_all(150);
chat_init();
rct2_copy_original_user_files_over();
_titleScreen = new TitleScreen();
return true;
}
void Open(const std::string &path) final override
{
auto fs = FileStream(path, FILE_MODE_OPEN);
OpenParkAutoDetectFormat(&fs, path);
}
private:
std::string GetOrPromptRCT2Path()
{
auto result = std::string();
if (String::IsNullOrEmpty(gCustomRCT2DataPath))
{
// Check install directory
if (gConfigGeneral.rct2_path == nullptr || !platform_original_game_data_exists(gConfigGeneral.rct2_path))
{
log_verbose("install directory does not exist or invalid directory selected, %s", gConfigGeneral.rct2_path);
if (!config_find_or_browse_install_directory())
{
utf8 path[MAX_PATH];
config_get_default_path(path, sizeof(path));
Console::Error::WriteLine("An RCT2 install directory must be specified! Please edit \"game_path\" in %s.\n", path);
return std::string();
}
}
result = std::string(gConfigGeneral.rct2_path);
}
else
{
result = std::string(gCustomRCT2DataPath);
}
return result;
}
bool LoadBaseGraphics()
{
if (!gfx_load_g1(_env))
{
return false;
}
if (!gfx_load_g2())
{
return false;
}
gfx_load_csg();
font_sprite_initialise_characters();
return true;
}
/**
* Launches the game, after command line arguments have been parsed and processed.
*/
@ -260,7 +439,6 @@ namespace OpenRCT2
break;
case STARTUP_ACTION_OPEN:
{
bool parkLoaded = false;
// A path that includes "://" is illegal with all common filesystems, so it is almost certainly a URL
// This way all cURL supported protocols, like http, ftp, scp and smb are automatically handled
if (strstr(gOpenRCT2StartupActionPath, "://") != nullptr)
@ -276,18 +454,27 @@ namespace OpenRCT2
}
auto ms = MemoryStream(data, dataSize, MEMORY_ACCESS::OWNER);
parkLoaded = OpenParkAutoDetectFormat(&ms);
if (!OpenParkAutoDetectFormat(&ms, gOpenRCT2StartupActionPath))
{
Console::Error::WriteLine("Failed to load '%s'", gOpenRCT2StartupActionPath);
title_load();
break;
}
#endif
}
else
{
parkLoaded = rct2_open_file(gOpenRCT2StartupActionPath);
}
if (!parkLoaded)
{
Console::Error::WriteLine("Failed to load '%s'", gOpenRCT2StartupActionPath);
break;
try
{
Open(gOpenRCT2StartupActionPath);
}
catch (const std::exception &ex)
{
Console::Error::WriteLine("Failed to load '%s'", gOpenRCT2StartupActionPath);
Console::Error::WriteLine("%s", ex.what());
title_load();
break;
}
}
gScreenFlags = SCREEN_FLAGS_PLAYING;
@ -315,7 +502,7 @@ namespace OpenRCT2
}
network_begin_server(gNetworkStartPort, gNetworkStartAddress);
}
#endif // DISABLE_NETWORK
#endif // DISABLE_NETWORK
break;
}
case STARTUP_ACTION_EDIT:
@ -396,28 +583,23 @@ namespace OpenRCT2
}
uint32 elapsed = currentTick - _lastTick;
if (elapsed > UPDATE_TIME_MS)
{
elapsed = UPDATE_TIME_MS;
}
_lastTick = currentTick;
_accumulator += elapsed;
_accumulator = Math::Min(_accumulator + elapsed, (uint32)GAME_UPDATE_MAX_THRESHOLD);
GetContext()->GetUiContext()->ProcessMessages();
_uiContext->ProcessMessages();
if (_accumulator < UPDATE_TIME_MS)
if (_accumulator < GAME_UPDATE_TIME_MS)
{
platform_sleep(UPDATE_TIME_MS - _accumulator - 1);
platform_sleep(GAME_UPDATE_TIME_MS - _accumulator - 1);
return;
}
_accumulator -= UPDATE_TIME_MS;
_accumulator -= GAME_UPDATE_TIME_MS;
rct2_update();
Update();
if (!_isWindowMinimised && !gOpenRCT2Headless)
{
platform_draw();
drawing_engine_draw();
}
}
@ -434,25 +616,21 @@ namespace OpenRCT2
}
uint32 elapsed = currentTick - _lastTick;
if (elapsed > UPDATE_TIME_MS)
{
elapsed = UPDATE_TIME_MS;
}
_lastTick = currentTick;
_accumulator += elapsed;
_accumulator = Math::Min(_accumulator + elapsed, (uint32)GAME_UPDATE_MAX_THRESHOLD);
GetContext()->GetUiContext()->ProcessMessages();
_uiContext->ProcessMessages();
while (_accumulator >= UPDATE_TIME_MS)
while (_accumulator >= GAME_UPDATE_TIME_MS)
{
// Get the original position of each sprite
if(draw)
sprite_position_tween_store_a();
rct2_update();
Update();
_accumulator -= UPDATE_TIME_MS;
_accumulator -= GAME_UPDATE_TIME_MS;
// Get the next position of each sprite
if(draw)
@ -461,16 +639,47 @@ namespace OpenRCT2
if (draw)
{
const float alpha = (float)_accumulator / UPDATE_TIME_MS;
const float alpha = (float)_accumulator / GAME_UPDATE_TIME_MS;
sprite_position_tween_all(alpha);
platform_draw();
drawing_engine_draw();
sprite_position_tween_restore();
}
}
bool OpenParkAutoDetectFormat(IStream * stream)
void Update()
{
uint32 currentUpdateTick = platform_get_ticks();
gTicksSinceLastUpdate = std::min<uint32>(currentUpdateTick - _lastUpdateTick, 500);
_lastUpdateTick = currentUpdateTick;
if (game_is_not_paused())
{
gPaletteEffectFrame += gTicksSinceLastUpdate;
}
date_update_real_time_of_day();
if (gIntroState != INTRO_STATE_NONE)
{
intro_update();
}
else if ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) && !gOpenRCT2Headless)
{
_titleScreen->Update();
}
else
{
game_update();
}
twitch_update();
chat_update();
console_update();
}
bool OpenParkAutoDetectFormat(IStream * stream, const std::string &path)
{
ClassifiedFile info;
if (TryClassifyFile(stream, &info))
@ -488,41 +697,29 @@ namespace OpenRCT2
parkImporter.reset(ParkImporter::CreateS6(_objectRepository, _objectManager));
}
if (info.Type == FILE_TYPE::SAVED_GAME)
auto result = parkImporter->LoadFromStream(stream, info.Type == FILE_TYPE::SCENARIO);
if (result.Error == PARK_LOAD_ERROR_OK)
{
try
parkImporter->Import();
game_fix_save_vars();
sprite_position_tween_reset();
gScreenAge = 0;
gLastAutoSaveUpdate = AUTOSAVE_PAUSE;
if (info.Type == FILE_TYPE::SAVED_GAME)
{
parkImporter->LoadFromStream(stream, false);
parkImporter->Import();
game_fix_save_vars();
sprite_position_tween_reset();
gScreenAge = 0;
gLastAutoSaveUpdate = AUTOSAVE_PAUSE;
game_load_init();
return true;
}
catch (const Exception &)
else
{
Console::Error::WriteLine("Error loading saved game.");
reset_sprite_spatial_index();
reset_all_sprite_quadrant_placements();
scenario_begin();
}
return true;
}
else
{
try
{
parkImporter->LoadFromStream(stream, true);
parkImporter->Import();
game_fix_save_vars();
sprite_position_tween_reset();
gScreenAge = 0;
gLastAutoSaveUpdate = AUTOSAVE_PAUSE;
scenario_begin();
return true;
}
catch (const Exception &)
{
Console::Error::WriteLine("Error loading scenario.");
}
handle_park_load_failure_with_title_opt(&result, path.c_str(), true);
}
}
else
@ -536,6 +733,58 @@ namespace OpenRCT2
}
return false;
}
/**
* Copy saved games and landscapes to user directory
*/
void CopyOriginalUserFilesOver()
{
CopyOriginalUserFilesOver(DIRID::SAVE, "*.sv6");
CopyOriginalUserFilesOver(DIRID::LANDSCAPE, "*.sc6");
}
void CopyOriginalUserFilesOver(DIRID dirid, const std::string &pattern)
{
auto src = _env->GetDirectoryPath(DIRBASE::RCT2, dirid);
auto dst = _env->GetDirectoryPath(DIRBASE::USER, dirid);
CopyOriginalUserFilesOver(src, dst, pattern);
}
void CopyOriginalUserFilesOver(const std::string &srcRoot, const std::string &dstRoot, const std::string &pattern)
{
log_verbose("CopyOriginalUserFilesOver('%s', '%s', '%s')", srcRoot.c_str(), dstRoot.c_str(), pattern.c_str());
auto scanPattern = Path::Combine(srcRoot, pattern);
auto scanner = Path::ScanDirectory(scanPattern, true);
while (scanner->Next())
{
auto src = std::string(scanner->GetPath());
auto dst = Path::Combine(dstRoot, scanner->GetPathRelative());
auto dstDirectory = Path::GetDirectory(dst);
// Create the directory if necessary
if (!platform_directory_exists(dstDirectory.c_str()))
{
Console::WriteLine("Creating directory '%s'", dstDirectory.c_str());
if (!platform_ensure_directory_exists(dstDirectory.c_str()))
{
Console::Error::WriteLine("Could not create directory %s.", dstDirectory.c_str());
break;
}
}
// Only copy the file if it doesn't already exist
if (!File::Exists(dst))
{
Console::WriteLine("Copying '%s' to '%s'", src.c_str(), dst.c_str());
if (!File::Copy(src, dst, false))
{
Console::Error::WriteLine("Failed to copy '%s' to '%s'", src.c_str(), dst.c_str());
}
}
}
delete scanner;
}
};
class PlainContext final : public Context
@ -663,6 +912,11 @@ extern "C"
return GetContext()->GetUiContext()->SetFullscreenMode((FULLSCREEN_MODE)mode);
}
void context_recreate_window()
{
GetContext()->GetUiContext()->RecreateWindow();
}
sint32 context_get_resolutions(Resolution * * outResolutions)
{
auto resolutions = GetContext()->GetUiContext()->GetFullscreenResolutions();
@ -709,6 +963,19 @@ extern "C"
return GetContext()->GetUiContext()->ReadBMP(outPixels, outWidth, outHeight, std::string(path));
}
void context_quit()
{
GetContext()->Quit();
}
const utf8 * context_get_path_legacy(sint32 pathId)
{
static utf8 result[MAX_PATH];
auto path = GetContext()->GetPathLegacy(pathId);
String::Set(result, sizeof(result), path.c_str());
return result;
}
bool platform_open_common_file_dialog(utf8 * outFilename, file_dialog_desc * desc, size_t outSize)
{
try

View File

@ -67,6 +67,8 @@ enum
#ifdef __cplusplus
#include <string>
namespace OpenRCT2
{
interface IPlatformEnvironment;
@ -94,21 +96,95 @@ namespace OpenRCT2
virtual sint32 RunOpenRCT2(int argc, char * * argv) abstract;
virtual bool Initialise() abstract;
virtual void Open(const std::string &path) abstract;
virtual void Finish() abstract;
virtual void Quit() abstract;
/**
* This is deprecated, use IPlatformEnvironment.
*/
virtual std::string GetPathLegacy(sint32 pathId) abstract;
};
IContext * CreateContext();
IContext * CreateContext(IPlatformEnvironment * env, Audio::IAudioContext * audioContext, Ui::IUiContext * uiContext);
IContext * GetContext();
// The game update inverval in milliseconds, (1000 / 40fps) = 25ms
constexpr uint32 UPDATE_TIME_MS = 25;
// The number of logical update / ticks per second.
constexpr uint32 UPDATE_FPS = 40;
}
#endif // __cplusplus
enum
{
// The game update inverval in milliseconds, (1000 / 40fps) = 25ms
GAME_UPDATE_TIME_MS = 25,
// The number of logical update / ticks per second.
GAME_UPDATE_FPS = 40,
// The maximum amount of updates in case rendering is slower
GAME_MAX_UPDATES = 4,
// The maximum threshold to advance.
GAME_UPDATE_MAX_THRESHOLD = GAME_UPDATE_TIME_MS * GAME_MAX_UPDATES,
};
/**
* Legacy get_file_path IDs.
* Remove when context_get_path_legacy is removed.
*/
enum
{
PATH_ID_G1,
PATH_ID_PLUGIN,
PATH_ID_CSS1,
PATH_ID_CSS2,
PATH_ID_CSS4,
PATH_ID_CSS5,
PATH_ID_CSS6,
PATH_ID_CSS7,
PATH_ID_CSS8,
PATH_ID_CSS9,
PATH_ID_CSS11,
PATH_ID_CSS12,
PATH_ID_CSS13,
PATH_ID_CSS14,
PATH_ID_CSS15,
PATH_ID_CSS3,
PATH_ID_CSS17,
PATH_ID_CSS18,
PATH_ID_CSS19,
PATH_ID_CSS20,
PATH_ID_CSS21,
PATH_ID_CSS22,
PATH_ID_SCORES,
PATH_ID_CSS23,
PATH_ID_CSS24,
PATH_ID_CSS25,
PATH_ID_CSS26,
PATH_ID_CSS27,
PATH_ID_CSS28,
PATH_ID_CSS29,
PATH_ID_CSS30,
PATH_ID_CSS31,
PATH_ID_CSS32,
PATH_ID_CSS33,
PATH_ID_CSS34,
PATH_ID_CSS35,
PATH_ID_CSS36,
PATH_ID_CSS37,
PATH_ID_CSS38,
PATH_ID_CUSTOM1,
PATH_ID_CUSTOM2,
PATH_ID_CSS39,
PATH_ID_CSS40,
PATH_ID_CSS41,
PATH_ID_SIXFLAGS_MAGICMOUNTAIN,
PATH_ID_CSS42,
PATH_ID_CSS43,
PATH_ID_CSS44,
PATH_ID_CSS45,
PATH_ID_CSS46,
PATH_ID_CSS50,
PATH_ID_END,
};
#ifdef __cplusplus
extern "C"
{
@ -127,6 +203,7 @@ extern "C"
bool context_is_input_active();
void context_trigger_resize();
void context_set_fullscreen_mode(sint32 mode);
void context_recreate_window();
sint32 context_get_resolutions(struct Resolution * * outResolutions);
sint32 context_get_width();
sint32 context_get_height();
@ -135,6 +212,8 @@ extern "C"
rct_window * context_open_window(rct_windowclass wc);
void context_input_handle_keyboard(bool isTitle);
bool context_read_bmp(void * * outPixels, uint32 * outWidth, uint32 * outHeight, const utf8 * path);
void context_quit();
const utf8 * context_get_path_legacy(sint32 pathId);
#ifdef __cplusplus
}
#endif

View File

@ -15,6 +15,7 @@
#pragma endregion
#include "core/FileStream.hpp"
#include "core/Path.hpp"
#include "FileClassifier.h"
#include "rct12/SawyerChunkReader.h"
@ -151,3 +152,19 @@ static bool TryClassifyAsTD4_TD6(IStream * stream, ClassifiedFile * result)
return success;
}
extern "C"
{
uint32 get_file_extension_type(const utf8 * path)
{
auto extension = Path::GetExtension(path);
if (String::Equals(extension, ".dat", true)) return FILE_EXTENSION_DAT;
if (String::Equals(extension, ".sc4", true)) return FILE_EXTENSION_SC4;
if (String::Equals(extension, ".sv4", true)) return FILE_EXTENSION_SV4;
if (String::Equals(extension, ".td4", true)) return FILE_EXTENSION_TD4;
if (String::Equals(extension, ".sc6", true)) return FILE_EXTENSION_SC6;
if (String::Equals(extension, ".sv6", true)) return FILE_EXTENSION_SV6;
if (String::Equals(extension, ".td6", true)) return FILE_EXTENSION_TD6;
return FILE_EXTENSION_UNKNOWN;
}
}

View File

@ -16,9 +16,24 @@
#pragma once
#include <string>
#include "common.h"
enum
{
FILE_EXTENSION_UNKNOWN,
FILE_EXTENSION_DAT,
FILE_EXTENSION_SC4,
FILE_EXTENSION_SV4,
FILE_EXTENSION_TD4,
FILE_EXTENSION_SC6,
FILE_EXTENSION_SV6,
FILE_EXTENSION_TD6,
};
#ifdef __cplusplus
#include <string>
interface IStream;
enum class FILE_TYPE
@ -38,3 +53,15 @@ struct ClassifiedFile
bool TryClassifyFile(const std::string &path, ClassifiedFile * result);
bool TryClassifyFile(IStream * stream, ClassifiedFile * result);
#endif // __cplusplus
#ifdef __cplusplus
extern "C"
{
#endif
uint32 get_file_extension_type(const utf8 * path);
#ifdef __cplusplus
}
#endif

View File

@ -23,7 +23,6 @@ extern "C"
{
#include "audio/audio.h"
#include "platform/platform.h"
#include "rct2.h"
}
extern "C"
@ -48,33 +47,8 @@ extern "C"
EVP_MD_CTX * gHashCTX = nullptr;
#endif // DISABLE_NETWORK
bool check_file_path(sint32 pathId)
{
const utf8 * path = get_file_path(pathId);
switch (pathId) {
case PATH_ID_G1:
if (!File::Exists(path))
{
Console::Error::WriteLine("Unable to find '%s'", path);
return false;
}
break;
case PATH_ID_CUSTOM1:
case PATH_ID_CUSTOM2:
if (File::Exists(path))
{
try
{
auto fs = FileStream(path, FILE_MODE_OPEN);
sint32 index = 36 + (pathId - PATH_ID_CUSTOM1);
gRideMusicInfoList[index]->length = fs.GetLength();
}
catch (const Exception &)
{
}
}
break;
}
return true;
}
uint32 gCurrentDrawCount = 0;
uint8 gScreenFlags;
uint32 gScreenAge;
uint8 gSavePromptMode;
}

View File

@ -37,6 +37,18 @@ enum STARTUP_ACTION
STARTUP_ACTION_EDIT
};
enum
{
// Although this is labeled a flag it actually means when
// zero the screen is in playing mode.
SCREEN_FLAGS_PLAYING = 0,
SCREEN_FLAGS_TITLE_DEMO = 1,
SCREEN_FLAGS_SCENARIO_EDITOR = 2,
SCREEN_FLAGS_TRACK_DESIGNER = 4,
SCREEN_FLAGS_TRACK_MANAGER = 8,
SCREEN_FLAGS_EDITOR = (SCREEN_FLAGS_SCENARIO_EDITOR | SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER),
};
#ifdef __cplusplus
extern "C"
{
@ -67,6 +79,11 @@ extern "C"
extern char* gNetworkStartAddress;
#endif
extern uint32 gCurrentDrawCount;
extern uint8 gScreenFlags;
extern uint32 gScreenAge;
extern uint8 gSavePromptMode;
void openrct2_write_full_version_info(utf8 * buffer, size_t bufferSize);
void openrct2_finish();

View File

@ -27,7 +27,6 @@
extern "C"
{
#include "platform/platform.h"
#include "rct2.h"
}
using namespace OpenRCT2;

View File

@ -33,7 +33,7 @@ const char gVersionInfoFull[] =
#ifdef OPENRCT2_BUILD_SERVER
" provided by " OPENRCT2_BUILD_SERVER
#endif
#ifdef DEBUG
#ifndef NDEBUG
" (DEBUG)"
#endif
;

View File

@ -19,7 +19,7 @@
#include "common.h"
#define OPENRCT2_NAME "OpenRCT2"
#define OPENRCT2_VERSION "0.1.0"
#define OPENRCT2_VERSION "0.1.1"
#if defined(__amd64__) || defined(_M_AMD64)
#define OPENRCT2_ARCHITECTURE "x86-64"

View File

@ -359,7 +359,7 @@ void audio_init_ride_sounds_and_info()
for (size_t m = 0; m < Util::CountOf(gRideMusicInfoList); m++)
{
rct_ride_music_info *rideMusicInfo = gRideMusicInfoList[m];
const utf8 *path = get_file_path(rideMusicInfo->path_id);
const utf8 * path = context_get_path_legacy(rideMusicInfo->path_id);
if (File::Exists(path))
{
try
@ -370,6 +370,13 @@ void audio_init_ride_sounds_and_info()
{
rideMusicInfo->length = 0;
}
// FIX: Custom ones have no length set and while populating the combo box
// they are ignored if 0.
if ((m == 36 || m == 37) && rideMusicInfo->length == 0)
{
// Try to get it.
rideMusicInfo->length = fs.GetLength();
}
}
catch (const Exception &)
{

View File

@ -23,11 +23,6 @@
#include "AudioMixer.h"
#include "AudioSource.h"
extern "C"
{
#include "../rct2.h"
}
using namespace OpenRCT2;
using namespace OpenRCT2::Audio;
@ -143,7 +138,7 @@ void * Mixer_Play_Music(sint32 pathId, sint32 loop, sint32 streaming)
{
if (streaming)
{
const utf8 * path = get_file_path(pathId);
const utf8 * path = context_get_path_legacy(pathId);
IAudioContext * audioContext = GetContext()->GetAudioContext();
IAudioSource * source = audioContext->CreateStreamFromWAV(path);

View File

@ -22,6 +22,7 @@
#include "localisation/localisation.h"
#include "management/finance.h"
#include "network/network.h"
#include "ride/station.h"
#include "util/util.h"
#include "world/Climate.h"
#include "world/footpath.h"
@ -50,6 +51,7 @@ bool gCheatsDisablePlantAging = false;
bool gCheatsEnableChainLiftOnAllTrack = false;
bool gCheatsAllowArbitraryRideTypeChanges = false;
bool gCheatsDisableRideValueAging = false;
bool gCheatsIgnoreResearchStatus = false;
sint32 park_rating_spinner_value;
@ -69,7 +71,7 @@ static void cheat_set_grass_length(sint32 length)
if (map_element_get_terrain(mapElement) != TERRAIN_GRASS)
continue;
if ((mapElement->properties.surface.terrain & 0x1F) > 0)
if (map_get_water_height(mapElement) > 0)
continue;
mapElement->properties.surface.grass_length = length;
@ -174,7 +176,7 @@ static void cheat_renew_rides()
// Set build date to current date (so the ride is brand new)
ride->build_date = gDateMonthsElapsed;
// Set reliability to 100
ride->reliability = (100 << 8);
ride->reliability = RIDE_INITIAL_RELIABILITY;
}
window_invalidate_by_class(WC_RIDE);
}
@ -283,36 +285,39 @@ static void cheat_set_guest_parameter(sint32 parameter, sint32 value)
FOR_ALL_GUESTS(spriteIndex, peep) {
switch(parameter) {
case GUEST_PARAMETER_HAPPINESS:
peep->happiness = value;
// Clear the 'red-faced with anger' status if we're making the guest happy
if (value > 0)
{
peep->peep_flags &= ~PEEP_FLAGS_ANGRY;
peep->angriness = 0;
}
break;
case GUEST_PARAMETER_ENERGY:
peep->energy = value;
break;
case GUEST_PARAMETER_HUNGER:
peep->hunger = value;
break;
case GUEST_PARAMETER_THIRST:
peep->thirst = value;
break;
case GUEST_PARAMETER_NAUSEA:
peep->nausea = value;
break;
case GUEST_PARAMETER_NAUSEA_TOLERANCE:
peep->nausea_tolerance = value;
break;
case GUEST_PARAMETER_BATHROOM:
peep->bathroom = value;
break;
case GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY:
peep->intensity = (15 << 4) | value;
break;
case GUEST_PARAMETER_HAPPINESS:
peep->happiness = value;
peep->happiness_target = value;
// Clear the 'red-faced with anger' status if we're making the guest happy
if (value > 0)
{
peep->peep_flags &= ~PEEP_FLAGS_ANGRY;
peep->angriness = 0;
}
break;
case GUEST_PARAMETER_ENERGY:
peep->energy = value;
peep->energy_target = value;
break;
case GUEST_PARAMETER_HUNGER:
peep->hunger = value;
break;
case GUEST_PARAMETER_THIRST:
peep->thirst = value;
break;
case GUEST_PARAMETER_NAUSEA:
peep->nausea = value;
peep->nausea_target = value;
break;
case GUEST_PARAMETER_NAUSEA_TOLERANCE:
peep->nausea_tolerance = value;
break;
case GUEST_PARAMETER_BATHROOM:
peep->bathroom = value;
break;
case GUEST_PARAMETER_PREFERRED_RIDE_INTENSITY:
peep->intensity = (15 << 4) | value;
break;
}
peep_update_sprite_type(peep);
}
@ -369,7 +374,7 @@ static void cheat_remove_all_guests()
{
ride->num_riders = 0;
for (size_t stationIndex = 0; stationIndex < RCT12_MAX_STATIONS_PER_RIDE; stationIndex++)
for (size_t stationIndex = 0; stationIndex < MAX_STATIONS; stationIndex++)
{
ride->queue_length[stationIndex] = 0;
ride->last_peep_in_queue[stationIndex] = SPRITE_INDEX_NULL;
@ -428,7 +433,7 @@ static void cheat_set_staff_speed(uint8 value)
FOR_ALL_STAFF(spriteIndex, peep) {
peep->energy = value;
peep->energy_growth_rate = value;
peep->energy_target = value;
}
}
@ -526,6 +531,7 @@ void game_command_cheat(sint32* eax, sint32* ebx, sint32* ecx, sint32* edx, sint
case CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES: gCheatsAllowArbitraryRideTypeChanges = *edx != 0; window_invalidate_by_class(WC_RIDE); break;
case CHEAT_OWNALLLAND: cheat_own_all_land(); break;
case CHEAT_DISABLERIDEVALUEAGING: gCheatsDisableRideValueAging = *edx != 0; break;
case CHEAT_IGNORERESEARCHSTATUS: gCheatsIgnoreResearchStatus = *edx != 0; break;
}
if (network_get_mode() == NETWORK_MODE_NONE) {
config_save_default();
@ -557,6 +563,7 @@ void cheats_reset()
gCheatsDisablePlantAging = false;
gCheatsAllowArbitraryRideTypeChanges = false;
gCheatsDisableRideValueAging = false;
gCheatsIgnoreResearchStatus = false;
}
//Generates the string to print for the server log when a cheat is used.
@ -763,6 +770,7 @@ const char* cheats_get_cheat_string(int cheat, int edx, int edi) {
case CHEAT_SETMONEY: return language_get_string(STR_SET_MONEY);
case CHEAT_OWNALLLAND: return language_get_string(STR_CHEAT_OWN_ALL_LAND);
case CHEAT_DISABLERIDEVALUEAGING: return language_get_string(STR_CHEAT_DISABLE_RIDE_VALUE_AGING);
case CHEAT_IGNORERESEARCHSTATUS: return language_get_string(STR_CHEAT_IGNORE_RESEARCH_STATUS);
}
return "";

View File

@ -39,6 +39,7 @@ extern bool gCheatsDisablePlantAging;
extern bool gCheatsDisableRideValueAging;
extern bool gCheatsEnableChainLiftOnAllTrack;
extern bool gCheatsAllowArbitraryRideTypeChanges;
extern bool gCheatsIgnoreResearchStatus;
enum {
@ -88,6 +89,7 @@ enum {
CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES,
CHEAT_OWNALLLAND,
CHEAT_DISABLERIDEVALUEAGING,
CHEAT_IGNORERESEARCHSTATUS,
};
enum {
@ -108,7 +110,6 @@ enum {
OBJECT_UMBRELLA
};
#define CHEATS_MONEY_INCREMENT MONEY(5000,00)
#define CHEATS_GIVE_GUESTS_MONEY MONEY(1000,00)
#define CHEATS_TRAM_INCREMENT 250
#define CHEATS_STAFF_FAST_SPEED 0xFF

View File

@ -20,6 +20,7 @@
#include "../core/Exception.hpp"
#include "../core/Guard.hpp"
#include "../core/Path.hpp"
#include "../FileClassifier.h"
#include "../ParkImporter.h"
#include "../rct2/S6Exporter.h"
#include "CommandLine.hpp"
@ -29,7 +30,6 @@ extern "C"
#include "../game.h"
#include "../interface/window.h"
#include "../OpenRCT2.h"
#include "../rct2.h"
}
static void WriteConvertFromAndToMessage(uint32 sourceFileType, uint32 destinationFileType);

View File

@ -791,7 +791,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc)
fprintf(stdout, "Finished\n");
return 1;
} else {
fprintf(stderr, "Unknown sprite command.");
fprintf(stderr, "Unknown sprite command.\n");
return 1;
}
}

View File

@ -347,18 +347,22 @@ namespace Config
{
// If the `player_name` setting is missing or equal to the empty string
// use the logged-in user's username instead
utf8* playerName = reader->GetCString("player_name", "");
if (String::IsNullOrEmpty(playerName))
auto playerName = reader->GetString("player_name", "");
if (playerName.empty())
{
playerName = String::Duplicate(platform_get_username());
if (playerName == nullptr)
playerName = String::ToStd(platform_get_username());
if (playerName.empty())
{
playerName = String::Duplicate("Player");
playerName = "Player";
}
}
// Trim any whitespace before or after the player's name,
// to avoid people pretending to be someone else
playerName = String::Trim(playerName);
auto model = &gConfigNetwork;
model->player_name = playerName;
model->player_name = String::Duplicate(playerName);
model->default_port = reader->GetSint32("default_port", NETWORK_DEFAULT_PORT);
model->listen_address = reader->GetCString("listen_address", "");
model->default_password = reader->GetCString("default_password", nullptr);
@ -664,6 +668,7 @@ extern "C"
SafeFree(gConfigSound.device);
SafeFree(gConfigTwitch.channel);
SafeFree(gConfigNetwork.player_name);
SafeFree(gConfigNetwork.listen_address);
SafeFree(gConfigNetwork.default_password);
SafeFree(gConfigNetwork.server_name);
SafeFree(gConfigNetwork.server_description);

View File

@ -34,14 +34,13 @@
extern "C"
{
void openrct2_assert(bool expression, const char * message, ...)
void openrct2_assert_fwd(bool expression, const char * message, ...)
{
va_list args;
va_start(args, message);
Guard::Assert_VA(expression, message, args);
va_end(args);
va_list va;
va_start(va, message);
Guard::Assert_VA(expression, message, va);
va_end(va);
}
}
namespace Guard

View File

@ -16,17 +16,19 @@
#pragma once
#include <stdarg.h>
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
void openrct2_assert(bool expression, const char * message, ...);
void openrct2_assert_fwd(bool expression, const char * message, ...);
#define openrct2_assert(expr, msg, ...) if(!(expr)) { openrct2_assert_fwd((expr), msg, ##__VA_ARGS__); }
#ifdef __cplusplus
}
#include <stdarg.h>
enum class ASSERT_BEHAVIOUR
{
ABORT,

View File

@ -57,7 +57,10 @@ namespace OpenRCT2 { namespace Drawing
virtual void SetUncappedFrameRate(bool uncapped) abstract;
virtual void Invalidate(sint32 left, sint32 top, sint32 right, sint32 bottom) abstract;
virtual void Draw() abstract;
virtual void BeginDraw() abstract;
virtual void EndDraw() abstract;
virtual void PaintWindows() abstract;
virtual void PaintRain() abstract;
virtual void CopyRect(sint32 x, sint32 y, sint32 width, sint32 height, sint32 dx, sint32 dy) abstract;
virtual sint32 Screenshot() abstract;

View File

@ -20,6 +20,7 @@
#include "../core/Exception.hpp"
#include "../core/Registration.hpp"
#include "../interface/Screenshot.h"
#include "../paint/Painter.h"
#include "IDrawingContext.h"
#include "IDrawingEngine.h"
#include "NewDrawing.h"
@ -30,15 +31,17 @@ extern "C"
#include "../drawing/drawing.h"
#include "../localisation/string_ids.h"
#include "../platform/platform.h"
#include "../rct2.h"
}
using namespace OpenRCT2;
using namespace OpenRCT2::Drawing;
using namespace OpenRCT2::Paint;
using namespace OpenRCT2::Ui;
static sint32 _drawingEngineType = DRAWING_ENGINE_SOFTWARE;
static IDrawingEngine * _drawingEngine = nullptr;
// TODO move this to Context
static Painter * _painter = nullptr;
extern "C"
{
@ -57,31 +60,33 @@ extern "C"
return _drawingEngineType;
}
bool drawing_engine_requires_restart(sint32 srcEngine, sint32 dstEngine)
bool drawing_engine_requires_new_window(sint32 srcEngine, sint32 dstEngine)
{
// Linux requires a restart. This could be improved in the future by recreating the window,
// https://github.com/OpenRCT2/OpenRCT2/issues/2015
bool requiresRestart = true;
#ifdef _WIN32
if (dstEngine != DRAWING_ENGINE_OPENGL)
if (srcEngine != DRAWING_ENGINE_OPENGL && dstEngine != DRAWING_ENGINE_OPENGL)
{
// Windows is apparently able to switch to hardware rendering on the fly although
// using the same window in an unaccelerated and accelerated context is unsupported by SDL2
requiresRestart = false;
return false;
}
#endif
return requiresRestart;
return true;
}
void drawing_engine_init()
{
assert(_drawingEngine == nullptr);
assert(_painter == nullptr);
_drawingEngineType = gConfigGeneral.drawing_engine;
IContext * context = GetContext();
IUiContext * uiContext = context->GetUiContext();
IDrawingEngine * drawingEngine = uiContext->CreateDrawingEngine((DRAWING_ENGINE_TYPE)_drawingEngineType);
auto context = GetContext();
auto uiContext = context->GetUiContext();
auto drawingEngine = uiContext->CreateDrawingEngine((DRAWING_ENGINE_TYPE)_drawingEngineType);
_painter = new Painter(uiContext);
if (drawingEngine == nullptr)
{
if (_drawingEngineType == DRAWING_ENGINE_SOFTWARE)
@ -135,13 +140,11 @@ extern "C"
void drawing_engine_resize()
{
if (_drawingEngine == nullptr)
if (_drawingEngine != nullptr)
{
drawing_engine_init();
IUiContext * uiContext = GetContext()->GetUiContext();
_drawingEngine->Resize(uiContext->GetWidth(), uiContext->GetHeight());
}
IUiContext * uiContext = GetContext()->GetUiContext();
_drawingEngine->Resize(uiContext->GetWidth(), uiContext->GetHeight());
}
void drawing_engine_set_palette(const rct_palette_entry * colours)
@ -154,9 +157,11 @@ extern "C"
void drawing_engine_draw()
{
if (_drawingEngine != nullptr)
if (_drawingEngine != nullptr && _painter != nullptr)
{
_drawingEngine->Draw();
_drawingEngine->BeginDraw();
_painter->Paint(_drawingEngine);
_drawingEngine->EndDraw();
}
}
@ -171,7 +176,9 @@ extern "C"
void drawing_engine_dispose()
{
delete _drawingEngine;
delete _painter;
_drawingEngine = nullptr;
_painter = nullptr;
}
rct_drawpixelinfo * drawing_engine_get_dpi()

View File

@ -21,13 +21,12 @@ extern "C"
{
#endif
#include "../rct2.h"
#include "drawing.h"
extern rct_string_id DrawingEngineStringIds[3];
sint32 drawing_engine_get_type();
bool drawing_engine_requires_restart(sint32 srcEngine, sint32 dstEngine);
bool drawing_engine_requires_new_window(sint32 srcEngine, sint32 dstEngine);
void drawing_engine_init();
void drawing_engine_resize();
void drawing_engine_set_palette(const rct_palette_entry * colours);

View File

@ -24,6 +24,7 @@
#include "../core/Path.hpp"
#include "../core/Util.hpp"
#include "../OpenRCT2.h"
#include "../PlatformEnvironment.h"
#include "../sprites.h"
#include "../ui/UiContext.h"
@ -88,12 +89,15 @@ extern "C"
*
* rct2: 0x00678998
*/
bool gfx_load_g1()
bool gfx_load_g1(void * platformEnvironment)
{
log_verbose("gfx_load_g1()");
auto env = (IPlatformEnvironment *)platformEnvironment;
log_verbose("gfx_load_g1(...)");
try
{
auto fs = FileStream(get_file_path(PATH_ID_G1), FILE_MODE_OPEN);
auto path = Path::Combine(env->GetDirectoryPath(DIRBASE::RCT2, DIRID::DATA), "g1.dat");
auto fs = FileStream(path, FILE_MODE_OPEN);
rct_g1_header header = fs.ReadValue<rct_g1_header>();
/* number of elements is stored in g1.dat, but because the entry
@ -702,4 +706,13 @@ extern "C"
{
return _csgLoaded;
}
rct_size16 FASTCALL gfx_get_sprite_size(uint32 image_id)
{
rct_g1_element *g1_source = gfx_get_g1_element(image_id & 0X7FFFF);
rct_size16 size;
size.width = g1_source->width;
size.height = g1_source->height;
return size;
}
}

View File

@ -33,7 +33,6 @@ extern "C"
#include "../interface/window.h"
#include "../intro.h"
#include "../platform/platform.h"
#include "../rct2.h"
#include "drawing.h"
#include "lightfx.h"
}
@ -133,10 +132,12 @@ void X8RainDrawer::Restore()
}
}
#ifdef __WARN_SUGGEST_FINAL_METHODS__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
#endif
X8DrawingEngine::X8DrawingEngine()
X8DrawingEngine::X8DrawingEngine(Ui::IUiContext * uiContext)
{
_drawingContext = new X8DrawingContext(this);
#ifdef __ENABLE_LIGHTFX__
@ -200,44 +201,45 @@ void X8DrawingEngine::Invalidate(sint32 left, sint32 top, sint32 right, sint32 b
}
}
void X8DrawingEngine::Draw()
void X8DrawingEngine::BeginDraw()
{
if (gIntroState != INTRO_STATE_NONE)
{
intro_draw(&_bitsDPI);
}
else
if (gIntroState == INTRO_STATE_NONE)
{
#ifdef __ENABLE_LIGHTFX__
// HACK we need to re-configure the bits if light fx has been enabled / disabled
if (_lastLightFXenabled != (gConfigGeneral.enable_light_fx != 0))
{
Resize(_width, _height);
}
// HACK we need to re-configure the bits if light fx has been enabled / disabled
if (_lastLightFXenabled != (gConfigGeneral.enable_light_fx != 0))
{
Resize(_width, _height);
}
#endif
_rainDrawer.SetDPI(&_bitsDPI);
_rainDrawer.Restore();
ResetWindowVisbilities();
// Redraw dirty regions before updating the viewports, otherwise
// when viewports get panned, they copy dirty pixels
DrawAllDirtyBlocks();
window_update_all_viewports();
DrawAllDirtyBlocks();
window_update_all();
gfx_draw_pickedup_peep(&_bitsDPI);
gfx_invalidate_pickedup_peep();
DrawRain(&_bitsDPI, &_rainDrawer);
rct2_draw(&_bitsDPI);
}
}
void X8DrawingEngine::EndDraw()
{
}
void X8DrawingEngine::PaintWindows()
{
ResetWindowVisbilities();
// Redraw dirty regions before updating the viewports, otherwise
// when viewports get panned, they copy dirty pixels
DrawAllDirtyBlocks();
window_update_all_viewports();
DrawAllDirtyBlocks();
// TODO move this out from drawing
window_update_all();
}
void X8DrawingEngine::PaintRain()
{
DrawRain(&_bitsDPI, &_rainDrawer);
}
void X8DrawingEngine::CopyRect(sint32 x, sint32 y, sint32 width, sint32 height, sint32 dx, sint32 dy)
{
if (dx == 0 && dy == 0) return;
@ -467,7 +469,9 @@ void X8DrawingEngine::DrawDirtyBlocks(uint32 x, uint32 y, uint32 columns, uint32
window_draw_all(&_bitsDPI, left, top, right, bottom);
}
#ifdef __WARN_SUGGEST_FINAL_METHODS__
#pragma GCC diagnostic pop
#endif
X8DrawingContext::X8DrawingContext(X8DrawingEngine * engine)
{
@ -709,16 +713,17 @@ void X8DrawingContext::FilterRect(FILTER_PALETTE_ID palette, sint32 left, sint32
rct_g1_element * g1Element = &g1Elements[g1Index];
uint8 * g1Bits = g1Element->offset;
const sint32 scaled_width = width >> dpi->zoom_level;
const sint32 step = ((dpi->width >> dpi->zoom_level) + dpi->pitch);
// Fill the rectangle with the colours from the colour table
for (sint32 i = 0; i < height >> dpi->zoom_level; i++)
{
uint8 * nextdst = dst + (dpi->width >> dpi->zoom_level) + dpi->pitch;
for (sint32 j = 0; j < (width >> dpi->zoom_level); j++)
uint8 * nextdst = dst + step * i;
for (sint32 j = 0; j < scaled_width; j++)
{
*dst = g1Bits[*dst];
dst++;
*(nextdst + j) = g1Bits[*(nextdst + j)];
}
dst = nextdst;
}
}
@ -744,7 +749,7 @@ void X8DrawingContext::DrawSpriteSolid(uint32 image, sint32 x, sint32 y, uint8 c
palette[0] = 0;
image &= 0x7FFFF;
gfx_draw_sprite_palette_set_software(_dpi, image | 0x20000000, x, y, palette, nullptr);
gfx_draw_sprite_palette_set_software(_dpi, image | IMAGE_TYPE_REMAP, x, y, palette, nullptr);
}
void X8DrawingContext::DrawGlyph(uint32 image, sint32 x, sint32 y, uint8 * palette)

View File

@ -20,118 +20,133 @@
#include "IDrawingContext.h"
#include "IDrawingEngine.h"
namespace OpenRCT2 { namespace Drawing
namespace OpenRCT2
{
class X8DrawingContext;
struct DirtyGrid
namespace Ui
{
uint32 BlockShiftX;
uint32 BlockShiftY;
uint32 BlockWidth;
uint32 BlockHeight;
uint32 BlockColumns;
uint32 BlockRows;
uint8 * Blocks;
};
interface IUiContext;
}
class X8RainDrawer final : public IRainDrawer
namespace Drawing
{
private:
struct RainPixel
class X8DrawingContext;
struct DirtyGrid
{
uint32 Position;
uint8 Colour;
uint32 BlockShiftX;
uint32 BlockShiftY;
uint32 BlockWidth;
uint32 BlockHeight;
uint32 BlockColumns;
uint32 BlockRows;
uint8 * Blocks;
};
static constexpr uint32 MaxRainPixels = 0xFFFE;
class X8RainDrawer final : public IRainDrawer
{
private:
struct RainPixel
{
uint32 Position;
uint8 Colour;
};
size_t _rainPixelsCapacity = MaxRainPixels;
uint32 _rainPixelsCount = 0;
RainPixel * _rainPixels = nullptr;
rct_drawpixelinfo * _screenDPI = nullptr;
static constexpr uint32 MaxRainPixels = 0xFFFE;
public:
X8RainDrawer();
~X8RainDrawer();
void SetDPI(rct_drawpixelinfo * dpi);
void Draw(sint32 x, sint32 y, sint32 width, sint32 height, sint32 xStart, sint32 yStart) override;
void Restore();
};
size_t _rainPixelsCapacity = MaxRainPixels;
uint32 _rainPixelsCount = 0;
RainPixel * _rainPixels = nullptr;
rct_drawpixelinfo * _screenDPI = nullptr;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsuggest-final-types"
class X8DrawingEngine : public IDrawingEngine
{
protected:
uint32 _width = 0;
uint32 _height = 0;
uint32 _pitch = 0;
size_t _bitsSize = 0;
uint8 * _bits = nullptr;
public:
X8RainDrawer();
~X8RainDrawer();
void SetDPI(rct_drawpixelinfo * dpi);
void Draw(sint32 x, sint32 y, sint32 width, sint32 height, sint32 xStart, sint32 yStart) override;
void Restore();
};
DirtyGrid _dirtyGrid = { 0 };
#ifdef __WARN_SUGGEST_FINAL_TYPES__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsuggest-final-types"
#endif
class X8DrawingEngine : public IDrawingEngine
{
protected:
uint32 _width = 0;
uint32 _height = 0;
uint32 _pitch = 0;
size_t _bitsSize = 0;
uint8 * _bits = nullptr;
rct_drawpixelinfo _bitsDPI = { 0 };
DirtyGrid _dirtyGrid = { 0 };
#ifdef __ENABLE_LIGHTFX__
bool _lastLightFXenabled = false;
rct_drawpixelinfo _bitsDPI = { 0 };
#ifdef __ENABLE_LIGHTFX__
bool _lastLightFXenabled = false;
#endif
X8RainDrawer _rainDrawer;
X8DrawingContext * _drawingContext;
public:
explicit X8DrawingEngine(Ui::IUiContext * uiContext);
~X8DrawingEngine() override;
void Initialise() override;
void Resize(uint32 width, uint32 height) override;
void SetPalette(const rct_palette_entry * palette) override;
void SetUncappedFrameRate(bool uncapped) override;
void Invalidate(sint32 left, sint32 top, sint32 right, sint32 bottom) override;
void BeginDraw() override;
void EndDraw() override;
void PaintWindows() override;
void PaintRain() override;
void CopyRect(sint32 x, sint32 y, sint32 width, sint32 height, sint32 dx, sint32 dy) override;
sint32 Screenshot() override;
IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) override;
rct_drawpixelinfo * GetDrawingPixelInfo() override;
DRAWING_ENGINE_FLAGS GetFlags() override;
void InvalidateImage(uint32 image) override;
rct_drawpixelinfo * GetDPI();
protected:
void ConfigureBits(uint32 width, uint32 height, uint32 pitch);
private:
void ConfigureDirtyGrid();
static void ResetWindowVisbilities();
void DrawAllDirtyBlocks();
void DrawDirtyBlocks(uint32 x, uint32 y, uint32 columns, uint32 rows);
};
#ifdef __WARN_SUGGEST_FINAL_TYPES__
#pragma GCC diagnostic pop
#endif
X8RainDrawer _rainDrawer;
X8DrawingContext * _drawingContext;
class X8DrawingContext final : public IDrawingContext
{
private:
X8DrawingEngine * _engine = nullptr;
rct_drawpixelinfo * _dpi = nullptr;
public:
explicit X8DrawingEngine();
~X8DrawingEngine() override;
public:
explicit X8DrawingContext(X8DrawingEngine * engine);
~X8DrawingContext() override;
void Initialise() override;
void Resize(uint32 width, uint32 height) override;
void SetPalette(const rct_palette_entry * palette) override;
void SetUncappedFrameRate(bool uncapped) override;
void Invalidate(sint32 left, sint32 top, sint32 right, sint32 bottom) override;
void Draw() override;
void CopyRect(sint32 x, sint32 y, sint32 width, sint32 height, sint32 dx, sint32 dy) override;
sint32 Screenshot() override;
IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) override;
rct_drawpixelinfo * GetDrawingPixelInfo() override;
DRAWING_ENGINE_FLAGS GetFlags() override;
void InvalidateImage(uint32 image) override;
IDrawingEngine * GetEngine() override;
rct_drawpixelinfo * GetDPI();
void Clear(uint8 paletteIndex) override;
void FillRect(uint32 colour, sint32 x, sint32 y, sint32 w, sint32 h) override;
void FilterRect(FILTER_PALETTE_ID palette, sint32 left, sint32 top, sint32 right, sint32 bottom) override;
void DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) override;
void DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) override;
void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) override;
void DrawSpriteSolid(uint32 image, sint32 x, sint32 y, uint8 colour) override;
void DrawGlyph(uint32 image, sint32 x, sint32 y, uint8 * palette) override;
protected:
void ConfigureBits(uint32 width, uint32 height, uint32 pitch);
private:
void ConfigureDirtyGrid();
static void ResetWindowVisbilities();
void DrawAllDirtyBlocks();
void DrawDirtyBlocks(uint32 x, uint32 y, uint32 columns, uint32 rows);
};
#pragma GCC diagnostic pop
class X8DrawingContext final : public IDrawingContext
{
private:
X8DrawingEngine * _engine = nullptr;
rct_drawpixelinfo * _dpi = nullptr;
public:
explicit X8DrawingContext(X8DrawingEngine * engine);
~X8DrawingContext() override;
IDrawingEngine * GetEngine() override;
void Clear(uint8 paletteIndex) override;
void FillRect(uint32 colour, sint32 x, sint32 y, sint32 w, sint32 h) override;
void FilterRect(FILTER_PALETTE_ID palette, sint32 left, sint32 top, sint32 right, sint32 bottom) override;
void DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) override;
void DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) override;
void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) override;
void DrawSpriteSolid(uint32 image, sint32 x, sint32 y, uint8 colour) override;
void DrawGlyph(uint32 image, sint32 x, sint32 y, uint8 * palette) override;
void SetDPI(rct_drawpixelinfo * dpi);
};
} }
void SetDPI(rct_drawpixelinfo * dpi);
};
}
}

View File

@ -22,7 +22,6 @@
#include "../object.h"
#include "../OpenRCT2.h"
#include "../platform/platform.h"
#include "../rct2.h"
#include "../world/water.h"
#include "drawing.h"

View File

@ -238,9 +238,15 @@ typedef struct rct_palette {
rct_palette_entry entries[256];
} rct_palette;
typedef struct rct_size16
{
sint16 width;
sint16 height;
} rct_size16;
#define SPRITE_ID_PALETTE_COLOUR_1(colourId) (IMAGE_TYPE_REMAP | ((colourId) << 19))
#define SPRITE_ID_PALETTE_COLOUR_2(primaryId, secondaryId) (IMAGE_TYPE_REMAP_2_PLUS | IMAGE_TYPE_REMAP | ((primaryId << 19) | (scondaryId << 24)))
#define SPRITE_ID_PALETTE_COLOUR_3(primaryId, secondaryId) (IMAGE_TYPE_REMAP_2_PLUS | ((primaryId << 19) | (scondaryId << 24)))
#define SPRITE_ID_PALETTE_COLOUR_2(primaryId, secondaryId) (IMAGE_TYPE_REMAP_2_PLUS | IMAGE_TYPE_REMAP | ((primaryId << 19) | (secondaryId << 24)))
#define SPRITE_ID_PALETTE_COLOUR_3(primaryId, secondaryId) (IMAGE_TYPE_REMAP_2_PLUS | ((primaryId << 19) | (secondaryId << 24)))
#define PALETTE_TO_G1_OFFSET_COUNT 144
@ -311,7 +317,7 @@ void gfx_fill_rect_inset(rct_drawpixelinfo* dpi, sint16 left, sint16 top, sint16
void gfx_filter_rect(rct_drawpixelinfo *dpi, sint32 left, sint32 top, sint32 right, sint32 bottom, FILTER_PALETTE_ID palette);
// sprite
bool gfx_load_g1();
bool gfx_load_g1(void * platformEnvironment);
bool gfx_load_g2();
bool gfx_load_csg();
void gfx_unload_g1();
@ -363,7 +369,7 @@ void shorten_path(utf8 *buffer, size_t bufferSize, const utf8 *path, sint32 avai
void scrolling_text_initialise_bitmaps();
sint32 scrolling_text_setup(rct_string_id stringId, uint16 scroll, uint16 scrollingMode);
void rct2_draw(rct_drawpixelinfo *dpi);
rct_size16 FASTCALL gfx_get_sprite_size(uint32 image_id);
#include "NewDrawing.h"

View File

@ -18,7 +18,6 @@
#include "../common.h"
#include "../game.h"
#include "../rct2.h"
#include "../interface/viewport.h"
#include "../interface/window.h"
#include "../paint/map_element/map_element.h"
@ -290,7 +289,7 @@ void lightfx_prepare_light_list()
unk_140E9A8 = dpi;
painter_setup();
viewport_paint_setup();
sub_688217();
paint_arrange_structs();
sub_68862C();
// log_warning("[%i, %i]", dpi->x, dpi->y);
@ -326,7 +325,7 @@ void lightfx_prepare_light_list()
// RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo*) = dpi;
// painter_setup();
// viewport_paint_setup();
// sub_688217();
// paint_arrange_structs();
// sub_68862C();
//}
}

View File

@ -20,8 +20,8 @@
#include FT_FREETYPE_H
#include "../localisation/localisation.h"
#include "../OpenRCT2.h"
#include "../platform/platform.h"
#include "../rct2.h"
#include "ttf.h"
static bool _ttfInitialised = false;

View File

@ -17,6 +17,7 @@
#include "audio/audio.h"
#include "drawing/drawing.h"
#include "editor.h"
#include "FileClassifier.h"
#include "game.h"
#include "interface/viewport.h"
#include "interface/window.h"
@ -27,6 +28,7 @@
#include "network/network.h"
#include "object.h"
#include "object/ObjectManager.h"
#include "OpenRCT2.h"
#include "peep/staff.h"
#include "platform/platform.h"
#include "rct1.h"

View File

@ -18,7 +18,6 @@
#define _EDITOR_H_
#include "object.h"
#include "rct2.h"
typedef enum {
EDITOR_STEP_OBJECT_SELECTION, // 0

View File

@ -19,6 +19,7 @@
#include "config/Config.h"
#include "Context.h"
#include "editor.h"
#include "FileClassifier.h"
#include "game.h"
#include "input.h"
#include "interface/Screenshot.h"
@ -63,7 +64,6 @@
#define NUMBER_OF_AUTOSAVES_TO_KEEP 9
uint16 gTicksSinceLastUpdate;
uint32 gLastTickCount;
uint8 gGamePaused = 0;
sint32 gGameSpeed = 1;
float gDayNightCycle = 0;
@ -285,7 +285,7 @@ void game_update()
{
gInUpdateCode = true;
sint32 i, numUpdates;
sint32 numUpdates;
// 0x006E3AEC // screen_game_process_mouse_input();
screenshot_check();
@ -295,8 +295,8 @@ void game_update()
if (gGameSpeed > 1) {
numUpdates = 1 << (gGameSpeed - 1);
} else {
numUpdates = gTicksSinceLastUpdate / 31;
numUpdates = clamp(1, numUpdates, 4);
numUpdates = gTicksSinceLastUpdate / GAME_UPDATE_TIME_MS;
numUpdates = clamp(1, numUpdates, GAME_MAX_UPDATES);
}
if (network_get_mode() == NETWORK_MODE_CLIENT && network_get_status() == NETWORK_STATUS_CONNECTED && network_get_authstatus() == NETWORK_AUTH_OK) {
@ -318,6 +318,25 @@ void game_update()
network_process_game_commands();
}
// Update the game one or more times
for (sint32 i = 0; i < numUpdates; i++) {
game_logic_update();
if (gGameSpeed > 1)
continue;
if (input_get_state() == INPUT_STATE_RESET ||
input_get_state() == INPUT_STATE_NORMAL
) {
if (input_test_flag(INPUT_FLAG_VIEWPORT_SCROLLING)) {
input_set_flag(INPUT_FLAG_VIEWPORT_SCROLLING, false);
break;
}
} else {
break;
}
}
if (!gOpenRCT2Headless)
{
input_set_flag(INPUT_FLAG_VIEWPORT_SCROLLING, false);
@ -348,25 +367,6 @@ void game_update()
game_handle_input();
}
// Update the game one or more times
for (i = 0; i < numUpdates; i++) {
game_logic_update();
if (gGameSpeed > 1)
continue;
if (input_get_state() == INPUT_STATE_RESET ||
input_get_state() == INPUT_STATE_NORMAL
) {
if (input_test_flag(INPUT_FLAG_VIEWPORT_SCROLLING)) {
input_set_flag(INPUT_FLAG_VIEWPORT_SCROLLING, false);
break;
}
} else {
break;
}
}
// Always perform autosave check, even when paused
if (!(gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) &&
!(gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) &&
@ -1072,7 +1072,15 @@ void game_fix_save_vars()
for (sint32 i = 0; i < MAX_RESEARCH_ITEMS; i++) {
rct_research_item *researchItem = &gResearchItems[i];
if (researchItem->entryIndex == RESEARCHED_ITEMS_SEPARATOR) continue;
if (researchItem->entryIndex == RESEARCHED_ITEMS_END) continue;
if (researchItem->entryIndex == RESEARCHED_ITEMS_END)
{
if (i == MAX_RESEARCH_ITEMS - 1)
{
(--researchItem)->entryIndex = RESEARCHED_ITEMS_END;
}
(++researchItem)->entryIndex = RESEARCHED_ITEMS_END_2;
break;
}
if (researchItem->entryIndex == RESEARCHED_ITEMS_END_2) break;
if (researchItem->entryIndex & 0x10000) {
uint8 entryIndex = researchItem->entryIndex & 0xFF;
@ -1096,7 +1104,6 @@ void game_fix_save_vars()
// Fix invalid vehicle sprite sizes, thus preventing visual corruption of sprites
fix_invalid_vehicle_sprite_sizes();
}
/**
@ -1125,6 +1132,7 @@ bool game_load_save(const utf8 *path)
}
if (load_success) {
ParkLoadResult_Delete(result);
if (network_get_mode() == NETWORK_MODE_CLIENT) {
network_close();
}
@ -1139,6 +1147,7 @@ bool game_load_save(const utf8 *path)
return true;
} else {
handle_park_load_failure(result, path);
ParkLoadResult_Delete(result);
return false;
}
}
@ -1277,9 +1286,11 @@ static void limit_autosave_count(const size_t numberOfFilesToKeep, bool processL
if (processLandscapeFolder) {
platform_get_user_directory(filter, "landscape", sizeof(filter));
safe_strcat_path(filter, "autosave", sizeof(filter));
safe_strcat_path(filter, "autosave_*.sc6", sizeof(filter));
} else {
platform_get_user_directory(filter, "save", sizeof(filter));
safe_strcat_path(filter, "autosave", sizeof(filter));
safe_strcat_path(filter, "autosave_*.sv6", sizeof(filter));
}
@ -1308,6 +1319,7 @@ static void limit_autosave_count(const size_t numberOfFilesToKeep, bool processL
} else {
platform_get_user_directory(autosaveFiles[i], "save", sizeof(utf8) * MAX_PATH);
}
safe_strcat_path(autosaveFiles[i], "autosave", sizeof(utf8) * MAX_PATH);
safe_strcat_path(autosaveFiles[i], fileInfo.path, sizeof(utf8) * MAX_PATH);
}
}
@ -1361,6 +1373,8 @@ void game_autosave()
utf8 path[MAX_PATH];
utf8 backupPath[MAX_PATH];
platform_get_user_directory(path, subDirectory, sizeof(path));
safe_strcat_path(path, "autosave", sizeof(path));
platform_ensure_directory_exists(path);
safe_strcpy(backupPath, path, sizeof(backupPath));
safe_strcat_path(path, timeName, sizeof(path));
safe_strcat_path(backupPath, "autosave", sizeof(backupPath));
@ -1490,6 +1504,7 @@ void game_init_all(sint32 mapSize)
window_staff_list_init_vars();
scenery_set_default_placement_configuration();
window_tile_inspector_clear_clipboard();
load_palette();
}
GAME_COMMAND_POINTER* new_game_command_table[GAME_COMMAND_COUNT] = {

View File

@ -143,7 +143,6 @@ extern uint32 gCurrentTicks;
#endif
extern uint16 gTicksSinceLastUpdate;
extern uint32 gLastTickCount;
extern uint8 gGamePaused;
extern sint32 gGameSpeed;
extern float gDayNightCycle;

View File

@ -36,7 +36,6 @@
#include "world/sprite.h"
#include "world/scenery.h"
#include "OpenRCT2.h"
#include "rct2.h"
typedef struct rct_mouse_data {
uint32 x;
@ -1207,7 +1206,7 @@ void input_state_widget_pressed(sint32 x, sint32 y, sint32 state, rct_widgetinde
goto dropdown_cleanup;
}
if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) {
if (dropdown_index < DROPDOWN_ITEMS_MAX_SIZE && dropdown_is_disabled(dropdown_index)) {
goto dropdown_cleanup;
}
@ -1344,7 +1343,7 @@ void input_state_widget_pressed(sint32 x, sint32 y, sint32 state, rct_widgetinde
window_tooltip_show(colourTooltips[dropdown_index], x, y);
}
if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) {
if (dropdown_index < DROPDOWN_ITEMS_MAX_SIZE && dropdown_is_disabled(dropdown_index)) {
return;
}

View File

@ -30,7 +30,6 @@ extern "C"
#include "../intro.h"
#include "../localisation/localisation.h"
#include "../platform/platform.h"
#include "../rct2.h"
#include "../util/util.h"
#include "../windows/error.h"
#include "viewport.h"
@ -269,7 +268,7 @@ sint32 cmdline_for_gfxbench(const char **argv, sint32 argc)
if (context->Initialise())
{
drawing_engine_init();
rct2_open_file(inputPath);
context->Open(inputPath);
gIntroState = INTRO_STATE_NONE;
gScreenFlags = SCREEN_FLAGS_PLAYING;
@ -388,7 +387,7 @@ sint32 cmdline_for_screenshot(const char **argv, sint32 argc)
if (context->Initialise())
{
drawing_engine_init();
rct2_open_file(inputPath);
context->Open(inputPath);
gIntroState = INTRO_STATE_NONE;
gScreenFlags = SCREEN_FLAGS_PLAYING;

View File

@ -707,11 +707,7 @@ extern "C"
ThemeManager::ActiveAvailableThemeIndex = index;
String::DiscardDuplicate(&gConfigInterface.current_theme_preset, theme_manager_get_available_theme_name(index));
// Apply the selected theme to all open windows
for (rct_window *w = g_window_list; w < gWindowNextSlot; w++)
{
colour_scheme_update(w);
}
colour_scheme_update_all();
}
uint8 theme_get_colour(rct_windowclass wc, uint8 index)
@ -861,6 +857,14 @@ extern "C"
return desc->WindowName;
}
void colour_scheme_update_all()
{
for (rct_window *w = g_window_list; w < gWindowNextSlot; w++)
{
colour_scheme_update(w);
}
}
void colour_scheme_update(rct_window * window)
{
colour_scheme_update_by_class(window, window->classification);

View File

@ -21,7 +21,6 @@
#include "../localisation/localisation.h"
#include "../network/network.h"
#include "../platform/platform.h"
#include "../rct2.h"
#include "../util/util.h"
#include "chat.h"

View File

@ -30,9 +30,9 @@
#include "../object.h"
#include "../object/ObjectManager.h"
#include "../object/ObjectRepository.h"
#include "../OpenRCT2.h"
#include "../peep/staff.h"
#include "../platform/platform.h"
#include "../rct2.h"
#include "../ride/ride.h"
#include "../ride/ride_data.h"
#include "../util/sawyercoding.h"
@ -665,7 +665,7 @@ static sint32 cc_staff(const utf8 **argv, sint32 argc)
rct_peep *peep = GET_PEEP(int_val[0]);
peep->energy = int_val[1];
peep->energy_growth_rate = int_val[1];
peep->energy_target = int_val[1];
}
} else if (strcmp(argv[1], "costume") == 0) {
sint32 int_val[2];

View File

@ -28,6 +28,7 @@ enum {
};
void colour_scheme_update(rct_window *window);
void colour_scheme_update_all();
void colour_scheme_update_by_class(rct_window *window, rct_windowclass classification);
void theme_manager_initialise();

View File

@ -23,7 +23,6 @@
#include "../paint/paint.h"
#include "../paint/supports.h"
#include "../peep/staff.h"
#include "../rct2.h"
#include "../ride/ride_data.h"
#include "../ride/track_data.h"
#include "../world/banner.h"
@ -1039,7 +1038,7 @@ static bool sub_679236_679662_679B0D_679FF1(uint32 ebx, rct_g1_element *image, u
return false;
}
if (ebx & 0x20000000) {
if (ebx & IMAGE_TYPE_REMAP) {
uint8 *ebx_palette = unk_9ABDA4;
uint8 al = *esi;
@ -1048,7 +1047,7 @@ static bool sub_679236_679662_679B0D_679FF1(uint32 ebx, rct_g1_element *image, u
return (al2 != 0);
}
if (ebx & 0x40000000) {
if (ebx & IMAGE_TYPE_TRANSPARENT) {
return false;
}
@ -1302,10 +1301,10 @@ static bool sub_679074(rct_drawpixelinfo *dpi, sint32 imageId, sint16 x, sint16
static bool sub_679023(rct_drawpixelinfo *dpi, sint32 imageId, sint32 x, sint32 y)
{
imageId &= 0xBFFFFFFF;
if (imageId & 0x20000000) {
gUnkEDF81C = 0x20000000;
if (imageId & IMAGE_TYPE_REMAP) {
gUnkEDF81C = IMAGE_TYPE_REMAP;
sint32 index = (imageId >> 19) & 0x7F;
if (imageId & 0x80000000) {
if (imageId & IMAGE_TYPE_REMAP_2_PLUS) {
index &= 0x1F;
}
sint32 g1Index = palette_to_g1_offset[index];
@ -1482,7 +1481,7 @@ static rct_viewport *viewport_find_from_point(sint32 screenX, sint32 screenY)
void screen_get_map_xy(sint32 screenX, sint32 screenY, sint16 *x, sint16 *y, rct_viewport **viewport) {
sint16 my_x, my_y;
sint32 interactionType;
rct_viewport *myViewport;
rct_viewport *myViewport = NULL;
get_map_coordinates_from_pos(screenX, screenY, VIEWPORT_INTERACTION_MASK_TERRAIN, &my_x, &my_y, &interactionType, NULL, &myViewport);
if (interactionType == VIEWPORT_INTERACTION_ITEM_NONE) {
*x = 0x8000;

View File

@ -19,6 +19,7 @@
#include "../game.h"
#include "../input.h"
#include "../localisation/localisation.h"
#include "../OpenRCT2.h"
#include "../ride/ride.h"
#include "../ride/ride_data.h"
#include "../ride/track.h"
@ -246,9 +247,9 @@ sint32 viewport_interaction_get_item_right(sint32 x, sint32 y, viewport_interact
set_map_tooltip_format_arg(6, uint32, ride->name_arguments);
set_map_tooltip_format_arg(10, rct_string_id, RideComponentNames[RideNameConvention[ride->type].station].capitalised);
stationIndex = map_get_station(mapElement);
stationIndex = map_element_get_station(mapElement);
for (i = stationIndex; i >= 0; i--)
if (ride->station_starts[i] == 0xFFFF)
if (ride->station_starts[i].xy == RCT_XY8_UNDEFINED)
stationIndex--;
stationIndex++;
set_map_tooltip_format_arg(12, uint16, stationIndex);
@ -265,7 +266,7 @@ sint32 viewport_interaction_get_item_right(sint32 x, sint32 y, viewport_interact
case VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY:
sceneryEntry = get_large_scenery_entry(mapElement->properties.scenerymultiple.type & 0x3FF);
if (sceneryEntry->large_scenery.var_11 != 255) {
if (sceneryEntry->large_scenery.scrolling_mode != 255) {
set_map_tooltip_format_arg(0, rct_string_id, STR_MAP_TOOLTIP_STRINGID_CLICK_TO_MODIFY);
set_map_tooltip_format_arg(2, rct_string_id, sceneryEntry->name);
return info->type;
@ -469,7 +470,7 @@ static void viewport_interaction_remove_footpath_item(rct_map_element *mapElemen
*/
void viewport_interaction_remove_park_entrance(rct_map_element *mapElement, sint32 x, sint32 y)
{
sint32 rotation = (mapElement->type + 1) & 3;
sint32 rotation = map_element_get_direction_with_offset(mapElement, 1);
switch (mapElement->properties.entrance.index & 0x0F) {
case 1:
x += TileDirectionDelta[rotation].x;
@ -499,7 +500,7 @@ static void viewport_interaction_remove_park_wall(rct_map_element *mapElement, s
x,
GAME_COMMAND_FLAG_APPLY,
y,
(mapElement->type & 0x3) | (mapElement->base_height << 8),
map_element_get_direction(mapElement) | (mapElement->base_height << 8),
GAME_COMMAND_REMOVE_WALL,
0,
0
@ -515,7 +516,7 @@ static void viewport_interaction_remove_large_scenery(rct_map_element *mapElemen
{
rct_scenery_entry *sceneryEntry = get_large_scenery_entry(mapElement->properties.scenerymultiple.type & MAP_ELEMENT_LARGE_TYPE_MASK);
if (sceneryEntry->large_scenery.var_11 != 0xFF){
if (sceneryEntry->large_scenery.scrolling_mode != 0xFF){
sint32 id = (mapElement->type & 0xC0) |
((mapElement->properties.scenerymultiple.colour[0] & 0xE0) >> 2) |
((mapElement->properties.scenerymultiple.colour[1] & 0xE0) >> 5);
@ -524,7 +525,7 @@ static void viewport_interaction_remove_large_scenery(rct_map_element *mapElemen
gGameCommandErrorTitle = STR_CANT_REMOVE_THIS;
game_do_command(
x,
1 | ((mapElement->type & 0x3) << 8),
1 | (map_element_get_direction(mapElement) << 8),
y,
mapElement->base_height | ((mapElement->properties.scenerymultiple.type >> 10) << 8),
GAME_COMMAND_REMOVE_LARGE_SCENERY,
@ -593,7 +594,7 @@ void sub_68A15E(sint32 screenX, sint32 screenY, sint16 *x, sint16 *y, sint32 *di
sint16 originalZ = 0;
if (interactionType == VIEWPORT_INTERACTION_ITEM_WATER) {
originalZ = (myMapElement->properties.surface.terrain & MAP_ELEMENT_WATER_HEIGHT_MASK) << 4;
originalZ = map_get_water_height(myMapElement) << 4;
}
rct_xy16 start_vp_pos = screen_coord_to_viewport_coord(viewport, screenX, screenY);

View File

@ -212,7 +212,7 @@ static void widget_frame_draw(rct_drawpixelinfo *dpi, rct_window *w, rct_widgeti
// Draw the resize sprite at the bottom right corner
l = w->x + widget->right - 18;
t = w->y + widget->bottom - 18;
gfx_draw_sprite(dpi, SPR_RESIZE | 0x20000000 | ((colour & 0x7F) << 19), l, t, 0);
gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), l, t, 0);
}
/**
@ -245,7 +245,7 @@ static void widget_resize_draw(rct_drawpixelinfo *dpi, rct_window *w, rct_widget
// Draw the resize sprite at the bottom right corner
l = w->x + widget->right - 18;
t = w->y + widget->bottom - 18;
gfx_draw_sprite(dpi, SPR_RESIZE | 0x20000000 | ((colour & 0x7F) << 19), l, t, 0);
gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), l, t, 0);
}
/**
@ -300,7 +300,7 @@ static void widget_tab_draw(rct_drawpixelinfo *dpi, rct_window *w, rct_widgetind
}
// Do not draw hidden tabs, unless given a sprite.
if (widget->type == WWT_TAB && widget->image != (0x20000000 | SPR_G2_TAB_DISABLED))
if (widget->type == WWT_TAB && widget->image != (IMAGE_TYPE_REMAP | SPR_G2_TAB_DISABLED))
return;
if (widget->type != WWT_TRNBTN) {
@ -857,12 +857,12 @@ static void widget_draw_image(rct_drawpixelinfo *dpi, rct_window *w, rct_widgeti
colour = ColourMapA[NOT_TRANSLUCENT(colour)].mid_light;
gfx_draw_sprite_solid(dpi, image, l, t, colour);
} else {
if (image & 0x80000000) {
if (image & IMAGE_TYPE_REMAP_2_PLUS) {
// ?
}
if (image & 0x40000000)
image &= ~0x40000000;
if (image & IMAGE_TYPE_TRANSPARENT)
image &= ~IMAGE_TYPE_TRANSPARENT;
else
image |= colour << 19;

View File

@ -49,7 +49,9 @@ typedef enum {
WWT_TEXT_BOX = 27,
WWT_LAST = 26,
} WINDOW_WIDGET_TYPES;
#define WIDGETS_END WWT_LAST, 0, 0, 0, 0, 0, 0, 0
#define BAR_BLINK (1u << 31)
enum {
SCROLL_HORIZONTAL = (1 << 0),

View File

@ -26,6 +26,7 @@
#include "../interface/themes.h"
#include "../localisation/localisation.h"
#include "../localisation/string_ids.h"
#include "../OpenRCT2.h"
#include "../platform/platform.h"
#include "../world/map.h"
#include "../world/sprite.h"
@ -283,7 +284,7 @@ static bool window_other_wheel_input(rct_window *w, rct_widgetindex widgetIndex,
// Preview / Increment / Decrement
if (widgetIndex >= previewWidgetIndex && widgetIndex < previewWidgetIndex + 3) {
rct_widgetindex buttonWidgetIndex = wheel < 0 ? previewWidgetIndex + 2 : previewWidgetIndex + 1;
window_event_mouse_up_call(w, buttonWidgetIndex);
window_event_mouse_down_call(w, buttonWidgetIndex);
return true;
}
@ -1932,7 +1933,7 @@ void window_event_resize_call(rct_window *w)
void window_event_mouse_down_call(rct_window *w, rct_widgetindex widgetIndex)
{
if (w->event_handlers->mouse_down != NULL)
w->event_handlers->mouse_down(widgetIndex, w, &w->widgets[widgetIndex]);
w->event_handlers->mouse_down(w, widgetIndex, &w->widgets[widgetIndex]);
}
void window_event_dropdown_call(rct_window *w, rct_widgetindex widgetIndex, sint32 dropdownIndex)

View File

@ -155,7 +155,7 @@ typedef struct rct_window_event_list {
void (*close)(struct rct_window*);
void (*mouse_up)(struct rct_window*, rct_widgetindex);
void (*resize)(struct rct_window*);
void (*mouse_down)(rct_widgetindex, struct rct_window*, rct_widget*);
void (*mouse_down)(struct rct_window*, rct_widgetindex, rct_widget*);
void (*dropdown)(struct rct_window*, rct_widgetindex, sint32);
void (*unknown_05)(struct rct_window*);
void (*update)(struct rct_window*);
@ -278,6 +278,8 @@ typedef struct rct_window {
sint16 page; // 0x48A
union {
sint16 picked_peep_old_x; // 0x48C staff/guest window: peep x gets set to 0x8000 on pickup, this is the old value
sint16 vehicleIndex; // 0x48C Ride window: selected car when setting vehicle colours
sint16 numberOfStaff; // 0x48C Used in park window.
sint16 var_48C;
};
uint16 frame_no; // 0x48E updated every tic for motion in windows sprites
@ -497,6 +499,7 @@ enum {
#define WC_TOP_TOOLBAR__WIDX_WATER 9
#define WC_TOP_TOOLBAR__WIDX_SCENERY 10
#define WC_TOP_TOOLBAR__WIDX_PATH 11
#define WC_TOP_TOOLBAR__WIDX_CLEAR_SCENERY 17
#define WC_RIDE_CONSTRUCTION__WIDX_CONSTRUCT 23
#define WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE 29
#define WC_RIDE_CONSTRUCTION__WIDX_EXIT 30
@ -753,7 +756,6 @@ void window_research_funding_page_paint(rct_window *w, rct_drawpixelinfo *dpi, r
void window_scenery_open();
void window_music_credits_open();
void window_publisher_credits_open();
void window_track_manage_open(struct track_design_file_ref *tdFileRef);
void window_viewport_open();
void window_themes_open();

View File

@ -19,7 +19,6 @@
#include "Context.h"
#include "drawing/drawing.h"
#include "intro.h"
#include "rct2.h"
#include "sprites.h"
#define BACKROUND_COLOUR_DARK PALETTE_INDEX_10

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