Merge branch 'develop' into master

This commit is contained in:
Michał Janiszewski 2017-05-03 22:49:59 +02:00
commit 10ae180744
365 changed files with 34641 additions and 15390 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.6]
**Version:** [e.g. 0.0.7]
**Commit/Build:** [e.g. 426e106]
<!-- Explanation of the issue -->

View File

@ -8,7 +8,7 @@ sudo: required
dist: trusty
env:
global:
- OPENRCT2_VERSION="0.0.6.0"
- OPENRCT2_VERSION="0.0.7"
matrix:
include:

View File

@ -121,6 +121,11 @@ option(ENABLE_LIGHTFX "Enable lighting effects." ON)
set(COMMON_COMPILE_OPTIONS "${COMMON_COMPILE_OPTIONS} -fstrict-aliasing -Werror -Wundef -Wmissing-declarations -Winit-self -Wall -Wno-unknown-pragmas -Wno-unused-function -Wno-missing-braces ")
set(COMMON_COMPILE_OPTIONS "${COMMON_COMPILE_OPTIONS} -Wno-comment -Wshadow -Wmissing-declarations -Wnonnull")
# macOS builds fail on the use of tmpnam otherwise (#4959)
if(APPLE)
set(COMMON_COMPILE_OPTIONS "${COMMON_COMPILE_OPTIONS} -Wno-error=deprecated-declarations -Wno-error=objc-method-access")
endif()
# On mingw all code is already PIC, this will avoid compiler error on redefining this option
if(NOT MINGW)
set(COMMON_COMPILE_OPTIONS "${COMMON_COMPILE_OPTIONS} -fPIC")
@ -151,7 +156,9 @@ ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_FINAL_TYPES -Wsugge
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_FINAL_METHODS -Wsuggest-final-methods)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_OVERRIDE -Wsuggest-override)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_DUPLICATED_COND -Wduplicated-cond)
if (MINGW)
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_SUGGEST_OVERRIDE -Wno-error=redundant-decls)
endif ()
# Items below are not supported by ICC
ADD_CHECK_C_COMPILER_FLAG(CMAKE_C_FLAGS C_WARN_REDUNDANT_DECLS -Wredundant-decls)
ADD_CHECK_C_COMPILER_FLAG(CMAKE_C_FLAGS C_WARN_IGNORED_QUALIFIERS -Wignored-qualifiers)
@ -289,8 +296,8 @@ else ()
endif ()
# set necessary flags to compile code as is
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_M} -std=gnu99 ${COMMON_COMPILE_OPTIONS} -Wimplicit")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_M} -std=gnu++11 ${COMMON_COMPILE_OPTIONS} -Wnon-virtual-dtor")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_M} -std=gnu11 ${COMMON_COMPILE_OPTIONS} -Wimplicit")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_M} -std=gnu++14 ${COMMON_COMPILE_OPTIONS} -Wnon-virtual-dtor")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${TARGET_M}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS} ${PIE_FLAG}")
@ -473,5 +480,5 @@ endif ()
set(CPACK_PACKAGE_VERSION_MAJOR 0)
set(CPACK_PACKAGE_VERSION_MINOR 0)
set(CPACK_PACKAGE_VERSION_PATCH 5)
set(CPACK_PACKAGE_VERSION_PATCH 7)
INCLUDE(CPack)

View File

@ -16,11 +16,19 @@
008BF72C1CDAA5C30019A2AD /* track_design.c in Sources */ = {isa = PBXBuildFile; fileRef = 008BF7281CDAA5C30019A2AD /* track_design.c */; };
00EFEE721CF1D80B0035213B /* NetworkKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00EFEE701CF1D80B0035213B /* NetworkKey.cpp */; };
652076321E22EFE7000D0C04 /* Imaging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 652076301E22EFE7000D0C04 /* Imaging.cpp */; };
652747EC1E41CE1B000F36FD /* SawyerEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 652747EA1E41CE1B000F36FD /* SawyerEncoding.cpp */; };
656F6C8E1E45BFC200E0F770 /* Version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 656F6C8C1E45BFC200E0F770 /* Version.cpp */; };
658F3D911E44A6C200388550 /* ParkImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 658F3D8F1E44A6C200388550 /* ParkImporter.cpp */; };
6876808CD662C4B16392A9B4 /* Balloon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 437490DBD74ECF60C3363559 /* Balloon.cpp */; };
689149B0417A68D6765F09CD /* banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DEEAE6E8AC49B6F288E69B40 /* banner.cpp */; };
791166FB1D7486EF005912EA /* NetworkServerAdvertiser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 791166F91D7486EF005912EA /* NetworkServerAdvertiser.cpp */; };
7D02D519C9A56A1FB9854FE7 /* Climate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 242F470FE91956ACA4078F6A /* Climate.cpp */; };
85060FD31D8C17CC00DFA2B3 /* track_data_old.c in Sources */ = {isa = PBXBuildFile; fileRef = 8594C05F1D885CF600235E93 /* track_data_old.c */; };
8594C0601D885CF600235E93 /* track_data_old.c in Sources */ = {isa = PBXBuildFile; fileRef = 8594C05F1D885CF600235E93 /* track_data_old.c */; };
85B468FC1D96822F000F1DB5 /* paint_helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 85B468FB1D96822F000F1DB5 /* paint_helpers.c */; };
85B468FD1D96822F000F1DB5 /* paint_helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 85B468FB1D96822F000F1DB5 /* paint_helpers.c */; };
8DED2F20E0D63A1DCFCE0197 /* banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DEEAE6E8AC49B6F288E69B40 /* banner.cpp */; };
B94C3C5FC4DBBB864434DE83 /* Duck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5D1DB5BE280897DCDEBFCED /* Duck.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 */; };
@ -237,9 +245,19 @@
C6E96E321E04072F0076A04F /* TitleSequencePlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6E96E2D1E04072F0076A04F /* TitleSequencePlayer.cpp */; };
C6E96E361E0408B40076A04F /* libzip.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C6E96E351E0408B40076A04F /* libzip.dylib */; };
C6E96E371E040E040076A04F /* libzip.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C6E96E351E0408B40076A04F /* libzip.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
C6EABCC41E719691008C09AB /* UriHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6EABCC31E719691008C09AB /* UriHandler.cpp */; };
D41B73EF1C2101890080A7B9 /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D41B73EE1C2101890080A7B9 /* libcurl.tbd */; };
D41B741D1C210A7A0080A7B9 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D41B741C1C210A7A0080A7B9 /* libiconv.tbd */; };
D41B74731C2125E50080A7B9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D41B74721C2125E50080A7B9 /* Assets.xcassets */; };
D41FA8641E5EA1E200215624 /* wall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D41FA8631E5EA1E200215624 /* wall.cpp */; };
D429FF421E36ABCD009342A6 /* tile_inspector.c in Sources */ = {isa = PBXBuildFile; fileRef = D429FF401E36ABCD009342A6 /* tile_inspector.c */; };
D42E337D1E5C27D600D630AF /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D42E33751E5C27D600D630AF /* Config.cpp */; };
D42E337E1E5C27D600D630AF /* IniReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D42E33781E5C27D600D630AF /* IniReader.cpp */; };
D42E337F1E5C27D600D630AF /* IniWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D42E337A1E5C27D600D630AF /* IniWriter.cpp */; };
D42E33801E5C27D600D630AF /* KeyboardShortcuts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D42E337C1E5C27D600D630AF /* KeyboardShortcuts.cpp */; };
D433A5001E4A861F00D9A6DF /* SawyerChunk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D433A4FA1E4A861F00D9A6DF /* SawyerChunk.cpp */; };
D433A5011E4A861F00D9A6DF /* SawyerChunkReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D433A4FC1E4A861F00D9A6DF /* SawyerChunkReader.cpp */; };
D433A5021E4A861F00D9A6DF /* SawyerChunkWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D433A4FE1E4A861F00D9A6DF /* SawyerChunkWriter.cpp */; };
D43407D61D0E14BE00C2B3D4 /* CopyFramebufferShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D43407C01D0E14BE00C2B3D4 /* CopyFramebufferShader.cpp */; };
D43407D81D0E14BE00C2B3D4 /* DrawImageShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D43407C41D0E14BE00C2B3D4 /* DrawImageShader.cpp */; };
D43407D91D0E14BE00C2B3D4 /* DrawLineShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D43407C61D0E14BE00C2B3D4 /* DrawLineShader.cpp */; };
@ -253,14 +271,12 @@
D43407E21D0E14CE00C2B3D4 /* shaders in Resources */ = {isa = PBXBuildFile; fileRef = D43407E11D0E14CE00C2B3D4 /* shaders */; };
D437A26F1DBC2937001CB2CF /* TrackDesignRepository.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D437A26D1DBC2937001CB2CF /* TrackDesignRepository.cpp */; };
D437A2721DBC29B0001CB2CF /* FileScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D437A2701DBC29B0001CB2CF /* FileScanner.cpp */; };
D44271F61CC81B3200D84D28 /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = D44270D01CC81B3200D84D28 /* audio.c */; };
D44271F81CC81B3200D84D28 /* cheats.c in Sources */ = {isa = PBXBuildFile; fileRef = D44270D41CC81B3200D84D28 /* cheats.c */; };
D44271F91CC81B3200D84D28 /* CommandLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44270D71CC81B3200D84D28 /* CommandLine.cpp */; };
D44271FA1CC81B3200D84D28 /* RootCommands.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44270D91CC81B3200D84D28 /* RootCommands.cpp */; };
D44271FB1CC81B3200D84D28 /* ScreenshotCommands.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44270DA1CC81B3200D84D28 /* ScreenshotCommands.cpp */; };
D44271FC1CC81B3200D84D28 /* SpriteCommands.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44270DB1CC81B3200D84D28 /* SpriteCommands.cpp */; };
D44271FD1CC81B3200D84D28 /* cmdline_sprite.c in Sources */ = {isa = PBXBuildFile; fileRef = D44270DC1CC81B3200D84D28 /* cmdline_sprite.c */; };
D44271FE1CC81B3200D84D28 /* config.c in Sources */ = {isa = PBXBuildFile; fileRef = D44270DE1CC81B3200D84D28 /* config.c */; };
D44271FF1CC81B3200D84D28 /* Console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44270E11CC81B3200D84D28 /* Console.cpp */; };
D44272001CC81B3200D84D28 /* Diagnostics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44270E31CC81B3200D84D28 /* Diagnostics.cpp */; };
D44272011CC81B3200D84D28 /* Guard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44270E71CC81B3200D84D28 /* Guard.cpp */; };
@ -276,7 +292,6 @@
D442720C1CC81B3200D84D28 /* line.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271061CC81B3200D84D28 /* line.c */; };
D442720E1CC81B3200D84D28 /* rect.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271081CC81B3200D84D28 /* rect.c */; };
D442720F1CC81B3200D84D28 /* scrolling_text.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271091CC81B3200D84D28 /* scrolling_text.c */; };
D44272101CC81B3200D84D28 /* sprite.c in Sources */ = {isa = PBXBuildFile; fileRef = D442710A1CC81B3200D84D28 /* sprite.c */; };
D44272111CC81B3200D84D28 /* string.c in Sources */ = {isa = PBXBuildFile; fileRef = D442710B1CC81B3200D84D28 /* string.c */; };
D44272131CC81B3200D84D28 /* editor.c in Sources */ = {isa = PBXBuildFile; fileRef = D442710E1CC81B3200D84D28 /* editor.c */; };
D44272141CC81B3200D84D28 /* game.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271101CC81B3200D84D28 /* game.c */; };
@ -402,12 +417,7 @@
D44272961CC81B3200D84D28 /* track_place.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271D51CC81B3200D84D28 /* track_place.c */; };
D44272971CC81B3200D84D28 /* viewport.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271D61CC81B3200D84D28 /* viewport.c */; };
D44272981CC81B3200D84D28 /* water.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271D71CC81B3200D84D28 /* water.c */; };
D44272991CC81B3200D84D28 /* balloon.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271D91CC81B3200D84D28 /* balloon.c */; };
D442729A1CC81B3200D84D28 /* banner.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271DA1CC81B3200D84D28 /* banner.c */; };
D442729B1CC81B3200D84D28 /* climate.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271DC1CC81B3200D84D28 /* climate.c */; };
D442729C1CC81B3200D84D28 /* duck.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271DE1CC81B3200D84D28 /* duck.c */; };
D442729D1CC81B3200D84D28 /* footpath.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271E01CC81B3200D84D28 /* footpath.c */; };
D442729E1CC81B3200D84D28 /* fountain.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271E21CC81B3200D84D28 /* fountain.c */; };
D442729F1CC81B3200D84D28 /* map.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271E41CC81B3200D84D28 /* map.c */; };
D44272A01CC81B3200D84D28 /* map_animation.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271E61CC81B3200D84D28 /* map_animation.c */; };
D44272A11CC81B3200D84D28 /* map_helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271E81CC81B3200D84D28 /* map_helpers.c */; };
@ -418,6 +428,7 @@
D44272A61CC81B3200D84D28 /* scenery.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271F01CC81B3200D84D28 /* scenery.c */; };
D44272A71CC81B3200D84D28 /* sprite.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271F21CC81B3200D84D28 /* sprite.c */; };
D4469DAD1DEF84480039A779 /* Fonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4469DAB1DEF84480039A779 /* Fonts.cpp */; };
D44D93AE1E92DD28004D6B77 /* Fountain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D44D93AD1E92DD28004D6B77 /* Fountain.cpp */; };
D45A38BC1CF3006400659A24 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D45A38B31CF3006400659A24 /* libcrypto.dylib */; };
D45A38BE1CF3006400659A24 /* libjansson.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D45A38B51CF3006400659A24 /* libjansson.dylib */; };
D45A38C01CF3006400659A24 /* libSDL2_ttf.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D45A38B71CF3006400659A24 /* libSDL2_ttf.dylib */; };
@ -432,6 +443,8 @@
D45B202D1D1E92DB00B67CC7 /* custom_currency.c in Sources */ = {isa = PBXBuildFile; fileRef = D45B202C1D1E92DB00B67CC7 /* custom_currency.c */; };
D460DFD11E01239D007BA2FE /* OpenRCT2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D460DFD01E01239D007BA2FE /* OpenRCT2.cpp */; };
D460DFD41E0123D1007BA2FE /* PlatformEnvironment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D460DFD31E0123D1007BA2FE /* PlatformEnvironment.cpp */; };
D464B3E01E4FBC850003F3B5 /* ServerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D464B3DE1E4FBC850003F3B5 /* ServerList.cpp */; };
D464B3E21E4FBCC00003F3B5 /* audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D464B3E11E4FBCC00003F3B5 /* audio.cpp */; };
D464FEBB1D31A65300CBABAC /* IStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D464FEBA1D31A65300CBABAC /* IStream.cpp */; };
D464FEBE1D31A66E00CBABAC /* MemoryStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D464FEBC1D31A66E00CBABAC /* MemoryStream.cpp */; };
D464FEC01D31A68800CBABAC /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D464FEBF1D31A68800CBABAC /* Image.cpp */; };
@ -455,18 +468,22 @@
D46F2A9E1D39A25A00A36AB7 /* peep_data.c in Sources */ = {isa = PBXBuildFile; fileRef = D46F2A9D1D39A25A00A36AB7 /* peep_data.c */; };
D47304D51C4FF8250015C0EA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D47304D41C4FF8250015C0EA /* libz.tbd */; };
D48A8D831D00272F00649DA7 /* TcpSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D48A8D811D00272F00649DA7 /* TcpSocket.cpp */; };
D48ABABA1E71EBD500A3E39C /* entrance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D48ABAB91E71EBD500A3E39C /* entrance.cpp */; };
D49464781E4DB27B00DC690E /* sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D49464771E4DB27B00DC690E /* sprite.cpp */; };
D49766831D03B9FE002222CD /* SoftwareDrawingEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D49766811D03B9FE002222CD /* SoftwareDrawingEngine.cpp */; };
D49766861D03BAA5002222CD /* NewDrawing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D49766841D03BAA5002222CD /* NewDrawing.cpp */; };
D49766891D03BABB002222CD /* rain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D49766871D03BABB002222CD /* rain.cpp */; };
D4A8B4B41DB41873007A2F29 /* libpng16.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D4A8B4B31DB41873007A2F29 /* libpng16.dylib */; };
D4A8B4B51DB4188D007A2F29 /* libpng16.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D4A8B4B31DB41873007A2F29 /* libpng16.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
D4B21B6F1E343AF1004982C7 /* lightfx.c in Sources */ = {isa = PBXBuildFile; fileRef = D4B21B6D1E343AF1004982C7 /* lightfx.c */; };
D4CA88661D4E64C800060C11 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = D4CA88651D4E64C800060C11 /* version.c */; };
D4EC48E61C2637710024B507 /* g2.dat in Resources */ = {isa = PBXBuildFile; fileRef = D4EC48E31C2637710024B507 /* g2.dat */; };
D4EC48E71C2637710024B507 /* language in Resources */ = {isa = PBXBuildFile; fileRef = D4EC48E41C2637710024B507 /* language */; };
D4EC48E81C2637710024B507 /* title in Resources */ = {isa = PBXBuildFile; fileRef = D4EC48E51C2637710024B507 /* title */; };
D4F5B5EF1DAD8A4300AB6075 /* CursorData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4F5B5EC1DAD8A4300AB6075 /* CursorData.cpp */; };
D4F5B5F01DAD8A4300AB6075 /* Cursors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4F5B5ED1DAD8A4300AB6075 /* Cursors.cpp */; };
F2CC500E17C9411FBA859888 /* Climate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 242F470FE91956ACA4078F6A /* Climate.cpp */; };
F408D5E134FE5B423BE5443F /* Duck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5D1DB5BE280897DCDEBFCED /* Duck.cpp */; };
F61331C839858250899F1E9B /* Balloon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 437490DBD74ECF60C3363559 /* Balloon.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@ -516,12 +533,21 @@
008BF7291CDAA5C30019A2AD /* track_design.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = track_design.h; sourceTree = "<group>"; };
00EFEE701CF1D80B0035213B /* NetworkKey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkKey.cpp; sourceTree = "<group>"; usesTabs = 0; };
00EFEE711CF1D80B0035213B /* NetworkKey.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = NetworkKey.h; sourceTree = "<group>"; usesTabs = 0; };
242F470FE91956ACA4078F6A /* Climate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Climate.cpp; sourceTree = "<group>"; };
437490DBD74ECF60C3363559 /* Balloon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Balloon.cpp; sourceTree = "<group>"; };
652076301E22EFE7000D0C04 /* Imaging.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Imaging.cpp; sourceTree = "<group>"; };
652076311E22EFE7000D0C04 /* Imaging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Imaging.h; sourceTree = "<group>"; };
652747EA1E41CE1B000F36FD /* SawyerEncoding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SawyerEncoding.cpp; path = rct12/SawyerEncoding.cpp; sourceTree = "<group>"; };
652747EB1E41CE1B000F36FD /* SawyerEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SawyerEncoding.h; path = rct12/SawyerEncoding.h; sourceTree = "<group>"; };
656F6C8C1E45BFC200E0F770 /* Version.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Version.cpp; sourceTree = "<group>"; };
656F6C8D1E45BFC200E0F770 /* Version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Version.h; sourceTree = "<group>"; };
658F3D8F1E44A6C200388550 /* ParkImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParkImporter.cpp; sourceTree = "<group>"; };
658F3D901E44A6C200388550 /* ParkImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParkImporter.h; sourceTree = "<group>"; };
791166F91D7486EF005912EA /* NetworkServerAdvertiser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkServerAdvertiser.cpp; sourceTree = "<group>"; };
791166FA1D7486EF005912EA /* NetworkServerAdvertiser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkServerAdvertiser.h; sourceTree = "<group>"; };
8594C05F1D885CF600235E93 /* track_data_old.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = track_data_old.c; sourceTree = "<group>"; };
85B468FB1D96822F000F1DB5 /* paint_helpers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = paint_helpers.c; sourceTree = "<group>"; };
A5D1DB5BE280897DCDEBFCED /* Duck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Duck.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; };
@ -559,7 +585,6 @@
C649B3D31DF04ED2008AC826 /* format_codes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = format_codes.c; sourceTree = "<group>"; };
C64FDA5D1D6D99F400F259B9 /* PaintTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = PaintTest; sourceTree = BUILT_PRODUCTS_DIR; };
C650B2151CCABBDD00B4D91C /* S4Importer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = S4Importer.cpp; sourceTree = "<group>"; usesTabs = 0; };
C650B2161CCABBDD00B4D91C /* S4Importer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = S4Importer.h; sourceTree = "<group>"; usesTabs = 0; };
C650B2171CCABBDD00B4D91C /* tables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tables.cpp; sourceTree = "<group>"; usesTabs = 0; };
C650B2181CCABBDD00B4D91C /* Tables.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = Tables.h; sourceTree = "<group>"; usesTabs = 0; };
C650B21B1CCABC4400B4D91C /* ConvertCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConvertCommand.cpp; sourceTree = "<group>"; usesTabs = 0; };
@ -673,7 +698,6 @@
C6B5A7D01CDFE4CB00C9C006 /* S6Exporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = S6Exporter.cpp; sourceTree = "<group>"; };
C6B5A7D11CDFE4CB00C9C006 /* S6Exporter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = S6Exporter.h; sourceTree = "<group>"; };
C6B5A7D21CDFE4CB00C9C006 /* S6Importer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = S6Importer.cpp; sourceTree = "<group>"; };
C6B5A7D31CDFE4CB00C9C006 /* S6Importer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = S6Importer.h; sourceTree = "<group>"; };
C6CABA801E1466D600D33A6B /* FileClassifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileClassifier.cpp; sourceTree = "<group>"; };
C6CABA811E1466D600D33A6B /* FileClassifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileClassifier.h; sourceTree = "<group>"; };
C6E96E101E04067A0076A04F /* File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = File.cpp; sourceTree = "<group>"; };
@ -701,10 +725,30 @@
C6E96E331E0408A80076A04F /* zip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = "<group>"; };
C6E96E341E0408A80076A04F /* zipconf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zipconf.h; sourceTree = "<group>"; };
C6E96E351E0408B40076A04F /* libzip.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libzip.dylib; sourceTree = "<group>"; };
C6EABCC31E719691008C09AB /* UriHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UriHandler.cpp; sourceTree = "<group>"; };
C6FF1BAD1DBCE1A10078DCB5 /* junior_roller_coaster.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = junior_roller_coaster.h; sourceTree = "<group>"; };
D41B73EE1C2101890080A7B9 /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; };
D41B741C1C210A7A0080A7B9 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
D41B74721C2125E50080A7B9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = distribution/macos/Assets.xcassets; sourceTree = SOURCE_ROOT; };
D41FA8631E5EA1E200215624 /* wall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wall.cpp; sourceTree = "<group>"; };
D429FF3F1E36ABB3009342A6 /* tile_inspector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tile_inspector.h; sourceTree = "<group>"; };
D429FF401E36ABCD009342A6 /* tile_inspector.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tile_inspector.c; sourceTree = "<group>"; };
D429FF411E36ABCD009342A6 /* tile_inspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tile_inspector.h; sourceTree = "<group>"; };
D42E33751E5C27D600D630AF /* Config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Config.cpp; sourceTree = "<group>"; };
D42E33761E5C27D600D630AF /* Config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = "<group>"; };
D42E33771E5C27D600D630AF /* ConfigEnum.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ConfigEnum.hpp; sourceTree = "<group>"; };
D42E33781E5C27D600D630AF /* IniReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IniReader.cpp; sourceTree = "<group>"; };
D42E33791E5C27D600D630AF /* IniReader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IniReader.hpp; sourceTree = "<group>"; };
D42E337A1E5C27D600D630AF /* IniWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IniWriter.cpp; sourceTree = "<group>"; };
D42E337B1E5C27D600D630AF /* IniWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IniWriter.hpp; sourceTree = "<group>"; };
D42E337C1E5C27D600D630AF /* KeyboardShortcuts.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeyboardShortcuts.cpp; sourceTree = "<group>"; };
D433A4FA1E4A861F00D9A6DF /* SawyerChunk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SawyerChunk.cpp; path = rct12/SawyerChunk.cpp; sourceTree = "<group>"; };
D433A4FB1E4A861F00D9A6DF /* SawyerChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SawyerChunk.h; path = rct12/SawyerChunk.h; sourceTree = "<group>"; };
D433A4FC1E4A861F00D9A6DF /* SawyerChunkReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SawyerChunkReader.cpp; path = rct12/SawyerChunkReader.cpp; sourceTree = "<group>"; };
D433A4FD1E4A861F00D9A6DF /* SawyerChunkReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SawyerChunkReader.h; path = rct12/SawyerChunkReader.h; sourceTree = "<group>"; };
D433A4FE1E4A861F00D9A6DF /* SawyerChunkWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SawyerChunkWriter.cpp; path = rct12/SawyerChunkWriter.cpp; sourceTree = "<group>"; };
D433A4FF1E4A861F00D9A6DF /* SawyerChunkWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SawyerChunkWriter.h; path = rct12/SawyerChunkWriter.h; sourceTree = "<group>"; };
D433A5031E4A862F00D9A6DF /* rct12.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rct12.h; sourceTree = "<group>"; };
D43407C01D0E14BE00C2B3D4 /* CopyFramebufferShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CopyFramebufferShader.cpp; sourceTree = "<group>"; };
D43407C11D0E14BE00C2B3D4 /* CopyFramebufferShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CopyFramebufferShader.h; sourceTree = "<group>"; };
D43407C41D0E14BE00C2B3D4 /* DrawImageShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DrawImageShader.cpp; sourceTree = "<group>"; };
@ -730,7 +774,6 @@
D437A26E1DBC2937001CB2CF /* TrackDesignRepository.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrackDesignRepository.h; sourceTree = "<group>"; };
D437A2701DBC29B0001CB2CF /* FileScanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileScanner.cpp; sourceTree = "<group>"; usesTabs = 0; };
D437A2711DBC29B0001CB2CF /* FileScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileScanner.h; sourceTree = "<group>"; usesTabs = 0; };
D44270D01CC81B3200D84D28 /* audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = audio.c; sourceTree = "<group>"; };
D44270D11CC81B3200D84D28 /* audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio.h; sourceTree = "<group>"; };
D44270D41CC81B3200D84D28 /* cheats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cheats.c; sourceTree = "<group>"; };
D44270D51CC81B3200D84D28 /* cheats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cheats.h; sourceTree = "<group>"; };
@ -741,8 +784,6 @@
D44270DB1CC81B3200D84D28 /* SpriteCommands.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteCommands.cpp; sourceTree = "<group>"; usesTabs = 0; };
D44270DC1CC81B3200D84D28 /* cmdline_sprite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmdline_sprite.c; sourceTree = "<group>"; };
D44270DD1CC81B3200D84D28 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; };
D44270DE1CC81B3200D84D28 /* config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = config.c; sourceTree = "<group>"; };
D44270DF1CC81B3200D84D28 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
D44270E11CC81B3200D84D28 /* Console.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Console.cpp; sourceTree = "<group>"; usesTabs = 0; };
D44270E21CC81B3200D84D28 /* Console.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Console.hpp; sourceTree = "<group>"; usesTabs = 0; };
D44270E31CC81B3200D84D28 /* Diagnostics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Diagnostics.cpp; sourceTree = "<group>"; usesTabs = 0; };
@ -778,7 +819,6 @@
D44271061CC81B3200D84D28 /* line.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = line.c; sourceTree = "<group>"; };
D44271081CC81B3200D84D28 /* rect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rect.c; sourceTree = "<group>"; };
D44271091CC81B3200D84D28 /* scrolling_text.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scrolling_text.c; sourceTree = "<group>"; };
D442710A1CC81B3200D84D28 /* sprite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sprite.c; sourceTree = "<group>"; };
D442710B1CC81B3200D84D28 /* string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = string.c; sourceTree = "<group>"; };
D442710E1CC81B3200D84D28 /* editor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = editor.c; sourceTree = "<group>"; };
D442710F1CC81B3200D84D28 /* editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = editor.h; sourceTree = "<group>"; };
@ -883,7 +923,6 @@
D442718A1CC81B3200D84D28 /* sawyercoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sawyercoding.h; sourceTree = "<group>"; };
D442718B1CC81B3200D84D28 /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = util.c; sourceTree = "<group>"; };
D442718C1CC81B3200D84D28 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; };
D442718D1CC81B3200D84D28 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
D442718F1CC81B3200D84D28 /* about.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = about.c; sourceTree = "<group>"; };
D44271901CC81B3200D84D28 /* banner.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = banner.c; sourceTree = "<group>"; };
D44271911CC81B3200D84D28 /* changelog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = changelog.c; sourceTree = "<group>"; };
@ -957,17 +996,11 @@
D44271D51CC81B3200D84D28 /* track_place.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = track_place.c; sourceTree = "<group>"; };
D44271D61CC81B3200D84D28 /* viewport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = viewport.c; sourceTree = "<group>"; };
D44271D71CC81B3200D84D28 /* water.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = water.c; sourceTree = "<group>"; };
D44271D91CC81B3200D84D28 /* balloon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = balloon.c; sourceTree = "<group>"; };
D44271DA1CC81B3200D84D28 /* banner.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = banner.c; sourceTree = "<group>"; };
D44271DB1CC81B3200D84D28 /* banner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = banner.h; sourceTree = "<group>"; };
D44271DC1CC81B3200D84D28 /* climate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = climate.c; sourceTree = "<group>"; };
D44271DD1CC81B3200D84D28 /* climate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = climate.h; sourceTree = "<group>"; };
D44271DE1CC81B3200D84D28 /* duck.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = duck.c; sourceTree = "<group>"; };
D44271DF1CC81B3200D84D28 /* entrance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = entrance.h; sourceTree = "<group>"; };
D44271E01CC81B3200D84D28 /* footpath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = footpath.c; sourceTree = "<group>"; };
D44271E11CC81B3200D84D28 /* footpath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = footpath.h; sourceTree = "<group>"; };
D44271E21CC81B3200D84D28 /* fountain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fountain.c; sourceTree = "<group>"; };
D44271E31CC81B3200D84D28 /* fountain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fountain.h; sourceTree = "<group>"; };
D44271E31CC81B3200D84D28 /* Fountain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fountain.h; sourceTree = "<group>"; };
D44271E41CC81B3200D84D28 /* map.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = map.c; sourceTree = "<group>"; };
D44271E51CC81B3200D84D28 /* map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = map.h; sourceTree = "<group>"; };
D44271E61CC81B3200D84D28 /* map_animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = map_animation.c; sourceTree = "<group>"; };
@ -987,6 +1020,7 @@
D44271F41CC81B3200D84D28 /* water.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = water.h; sourceTree = "<group>"; };
D4469DAB1DEF84480039A779 /* Fonts.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Fonts.cpp; sourceTree = "<group>"; };
D4469DAC1DEF84480039A779 /* Fonts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fonts.h; sourceTree = "<group>"; };
D44D93AD1E92DD28004D6B77 /* Fountain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Fountain.cpp; sourceTree = "<group>"; };
D45A38B31CF3006400659A24 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libcrypto.dylib; sourceTree = "<group>"; };
D45A38B41CF3006400659A24 /* libfreetype.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libfreetype.dylib; sourceTree = "<group>"; };
D45A38B51CF3006400659A24 /* libjansson.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjansson.dylib; sourceTree = "<group>"; };
@ -1143,6 +1177,9 @@
D460DFD21E0123B5007BA2FE /* OpenRCT2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenRCT2.h; sourceTree = "<group>"; };
D460DFD31E0123D1007BA2FE /* PlatformEnvironment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlatformEnvironment.cpp; sourceTree = "<group>"; };
D460DFD51E0123DB007BA2FE /* PlatformEnvironment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformEnvironment.h; sourceTree = "<group>"; };
D464B3DE1E4FBC850003F3B5 /* ServerList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServerList.cpp; sourceTree = "<group>"; };
D464B3DF1E4FBC850003F3B5 /* ServerList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerList.h; sourceTree = "<group>"; };
D464B3E11E4FBCC00003F3B5 /* audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audio.cpp; sourceTree = "<group>"; };
D464FEBA1D31A65300CBABAC /* IStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IStream.cpp; sourceTree = "<group>"; };
D464FEBC1D31A66E00CBABAC /* MemoryStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryStream.cpp; sourceTree = "<group>"; };
D464FEBD1D31A66E00CBABAC /* MemoryStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryStream.h; sourceTree = "<group>"; };
@ -1187,6 +1224,8 @@
D4895D321C23EFDD000CD788 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = distribution/macos/Info.plist; sourceTree = SOURCE_ROOT; };
D48A8D811D00272F00649DA7 /* TcpSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TcpSocket.cpp; sourceTree = "<group>"; usesTabs = 0; };
D48A8D821D00272F00649DA7 /* TcpSocket.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = TcpSocket.h; sourceTree = "<group>"; usesTabs = 0; };
D48ABAB91E71EBD500A3E39C /* entrance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = entrance.cpp; sourceTree = "<group>"; };
D49464771E4DB27B00DC690E /* sprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sprite.cpp; sourceTree = "<group>"; };
D49766811D03B9FE002222CD /* SoftwareDrawingEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoftwareDrawingEngine.cpp; sourceTree = "<group>"; };
D49766841D03BAA5002222CD /* NewDrawing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NewDrawing.cpp; sourceTree = "<group>"; usesTabs = 0; };
D49766851D03BAA5002222CD /* NewDrawing.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = NewDrawing.h; sourceTree = "<group>"; usesTabs = 0; };
@ -1198,13 +1237,14 @@
D4A8B4B31DB41873007A2F29 /* libpng16.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libpng16.dylib; sourceTree = "<group>"; };
D4B21B6D1E343AF1004982C7 /* lightfx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lightfx.c; sourceTree = "<group>"; };
D4B21B6E1E343AF1004982C7 /* lightfx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lightfx.h; sourceTree = "<group>"; };
D4CA88651D4E64C800060C11 /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = "<group>"; };
D4EC48E31C2637710024B507 /* g2.dat */ = {isa = PBXFileReference; lastKnownFileType = file; name = g2.dat; path = data/g2.dat; sourceTree = SOURCE_ROOT; };
D4EC48E41C2637710024B507 /* language */ = {isa = PBXFileReference; lastKnownFileType = folder; name = language; path = data/language; sourceTree = SOURCE_ROOT; };
D4EC48E51C2637710024B507 /* title */ = {isa = PBXFileReference; lastKnownFileType = folder; name = title; path = data/title; sourceTree = SOURCE_ROOT; };
D4F5B5EC1DAD8A4300AB6075 /* CursorData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CursorData.cpp; sourceTree = "<group>"; };
D4F5B5ED1DAD8A4300AB6075 /* Cursors.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursors.cpp; sourceTree = "<group>"; };
D4F5B5EE1DAD8A4300AB6075 /* Cursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cursors.h; sourceTree = "<group>"; };
DEEAE6E8AC49B6F288E69B40 /* banner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = banner.cpp; sourceTree = "<group>"; };
EC3C3FED9FA55B65F65D706F /* Climate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Climate.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -1235,6 +1275,21 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
652747E91E41CDFE000F36FD /* rct12 */ = {
isa = PBXGroup;
children = (
D433A4FA1E4A861F00D9A6DF /* SawyerChunk.cpp */,
D433A4FB1E4A861F00D9A6DF /* SawyerChunk.h */,
D433A4FC1E4A861F00D9A6DF /* SawyerChunkReader.cpp */,
D433A4FD1E4A861F00D9A6DF /* SawyerChunkReader.h */,
D433A4FE1E4A861F00D9A6DF /* SawyerChunkWriter.cpp */,
D433A4FF1E4A861F00D9A6DF /* SawyerChunkWriter.h */,
652747EA1E41CE1B000F36FD /* SawyerEncoding.cpp */,
652747EB1E41CE1B000F36FD /* SawyerEncoding.h */,
);
name = rct12;
sourceTree = "<group>";
};
8546F74A1D7E1D220004004C /* Tests */ = {
isa = PBXGroup;
children = (
@ -1282,7 +1337,6 @@
isa = PBXGroup;
children = (
C650B2151CCABBDD00B4D91C /* S4Importer.cpp */,
C650B2161CCABBDD00B4D91C /* S4Importer.h */,
C650B2171CCABBDD00B4D91C /* tables.cpp */,
C650B2181CCABBDD00B4D91C /* Tables.h */,
);
@ -1463,7 +1517,6 @@
C6B5A7D01CDFE4CB00C9C006 /* S6Exporter.cpp */,
C6B5A7D11CDFE4CB00C9C006 /* S6Exporter.h */,
C6B5A7D21CDFE4CB00C9C006 /* S6Importer.cpp */,
C6B5A7D31CDFE4CB00C9C006 /* S6Importer.h */,
);
path = rct2;
sourceTree = "<group>";
@ -1502,6 +1555,7 @@
children = (
D44270CF1CC81B3200D84D28 /* audio */,
D44270D61CC81B3200D84D28 /* cmdline */,
D42E33741E5C27D600D630AF /* config */,
D44270E01CC81B3200D84D28 /* core */,
D44271001CC81B3200D84D28 /* drawing */,
D44271181CC81B3200D84D28 /* interface */,
@ -1514,6 +1568,7 @@
D44271601CC81B3200D84D28 /* platform */,
C650B2141CCABBDD00B4D91C /* rct1 */,
C6B5A7CF1CDFE4CB00C9C006 /* rct2 */,
652747E91E41CDFE000F36FD /* rct12 */,
D442716E1CC81B3200D84D28 /* ride */,
C6E96E1C1E04070E0076A04F /* scenario */,
C6E96E261E04072F0076A04F /* title */,
@ -1524,8 +1579,6 @@
D44270D51CC81B3200D84D28 /* cheats.h */,
D44270DC1CC81B3200D84D28 /* cmdline_sprite.c */,
D44270DD1CC81B3200D84D28 /* common.h */,
D44270DE1CC81B3200D84D28 /* config.c */,
D44270DF1CC81B3200D84D28 /* config.h */,
D44270FE1CC81B3200D84D28 /* diagnostic.c */,
D44270FF1CC81B3200D84D28 /* diagnostic.h */,
D442710E1CC81B3200D84D28 /* editor.c */,
@ -1544,15 +1597,18 @@
D44271581CC81B3200D84D28 /* object.h */,
D460DFD01E01239D007BA2FE /* OpenRCT2.cpp */,
D460DFD21E0123B5007BA2FE /* OpenRCT2.h */,
658F3D8F1E44A6C200388550 /* ParkImporter.cpp */,
658F3D901E44A6C200388550 /* ParkImporter.h */,
D460DFD31E0123D1007BA2FE /* PlatformEnvironment.cpp */,
D460DFD51E0123DB007BA2FE /* PlatformEnvironment.h */,
D44271691CC81B3200D84D28 /* rct1.c */,
D442716A1CC81B3200D84D28 /* rct1.h */,
D442716B1CC81B3200D84D28 /* rct2.c */,
D442716C1CC81B3200D84D28 /* rct2.h */,
D433A5031E4A862F00D9A6DF /* rct12.h */,
D44271851CC81B3200D84D28 /* sprites.h */,
D4CA88651D4E64C800060C11 /* version.c */,
D442718D1CC81B3200D84D28 /* version.h */,
656F6C8C1E45BFC200E0F770 /* Version.cpp */,
656F6C8D1E45BFC200E0F770 /* Version.h */,
);
name = Sources;
path = src/openrct2;
@ -1569,6 +1625,21 @@
path = libxc;
sourceTree = "<group>";
};
D42E33741E5C27D600D630AF /* config */ = {
isa = PBXGroup;
children = (
D42E33751E5C27D600D630AF /* Config.cpp */,
D42E33761E5C27D600D630AF /* Config.h */,
D42E33771E5C27D600D630AF /* ConfigEnum.hpp */,
D42E33781E5C27D600D630AF /* IniReader.cpp */,
D42E33791E5C27D600D630AF /* IniReader.hpp */,
D42E337A1E5C27D600D630AF /* IniWriter.cpp */,
D42E337B1E5C27D600D630AF /* IniWriter.hpp */,
D42E337C1E5C27D600D630AF /* KeyboardShortcuts.cpp */,
);
path = config;
sourceTree = "<group>";
};
D43407BF1D0E14BE00C2B3D4 /* opengl */ = {
isa = PBXGroup;
children = (
@ -1599,7 +1670,7 @@
D44270CF1CC81B3200D84D28 /* audio */ = {
isa = PBXGroup;
children = (
D44270D01CC81B3200D84D28 /* audio.c */,
D464B3E11E4FBCC00003F3B5 /* audio.cpp */,
D44270D11CC81B3200D84D28 /* audio.h */,
C65A888B1E1B1148000368D7 /* AudioChannel.cpp */,
C65A888C1E1B1148000368D7 /* AudioChannel.h */,
@ -1623,6 +1694,7 @@
D44270D91CC81B3200D84D28 /* RootCommands.cpp */,
D44270DA1CC81B3200D84D28 /* ScreenshotCommands.cpp */,
D44270DB1CC81B3200D84D28 /* SpriteCommands.cpp */,
C6EABCC31E719691008C09AB /* UriHandler.cpp */,
);
path = cmdline;
sourceTree = "<group>";
@ -1689,7 +1761,7 @@
D49766881D03BABB002222CD /* Rain.h */,
D44271081CC81B3200D84D28 /* rect.c */,
D44271091CC81B3200D84D28 /* scrolling_text.c */,
D442710A1CC81B3200D84D28 /* sprite.c */,
D49464771E4DB27B00DC690E /* sprite.cpp */,
D442710B1CC81B3200D84D28 /* string.c */,
);
path = drawing;
@ -1794,6 +1866,8 @@
007A05CC1CFB2C8B00F419C3 /* NetworkTypes.h */,
C61FB7221CF86356004CE991 /* NetworkUser.cpp */,
C61FB7231CF86356004CE991 /* NetworkUser.h */,
D464B3DE1E4FBC850003F3B5 /* ServerList.cpp */,
D464B3DF1E4FBC850003F3B5 /* ServerList.h */,
D48A8D811D00272F00649DA7 /* TcpSocket.cpp */,
D48A8D821D00272F00649DA7 /* TcpSocket.h */,
D44271541CC81B3200D84D28 /* twitch.cpp */,
@ -1944,6 +2018,7 @@
D44271C61CC81B3200D84D28 /* text_input.c */,
D44271C71CC81B3200D84D28 /* themes.c */,
D44271C81CC81B3200D84D28 /* tile_inspector.c */,
D429FF3F1E36ABB3009342A6 /* tile_inspector.h */,
D44271C91CC81B3200D84D28 /* title_command_editor.c */,
D44271CA1CC81B3200D84D28 /* title_editor.c */,
D44271CB1CC81B3200D84D28 /* title_exit.c */,
@ -1967,17 +2042,18 @@
D44271D81CC81B3200D84D28 /* world */ = {
isa = PBXGroup;
children = (
D44271D91CC81B3200D84D28 /* balloon.c */,
D44271DA1CC81B3200D84D28 /* banner.c */,
A5D1DB5BE280897DCDEBFCED /* Duck.cpp */,
EC3C3FED9FA55B65F65D706F /* Climate.h */,
242F470FE91956ACA4078F6A /* Climate.cpp */,
437490DBD74ECF60C3363559 /* Balloon.cpp */,
DEEAE6E8AC49B6F288E69B40 /* banner.cpp */,
D44271DB1CC81B3200D84D28 /* banner.h */,
D44271DC1CC81B3200D84D28 /* climate.c */,
D44271DD1CC81B3200D84D28 /* climate.h */,
D44271DE1CC81B3200D84D28 /* duck.c */,
D48ABAB91E71EBD500A3E39C /* entrance.cpp */,
D44271DF1CC81B3200D84D28 /* entrance.h */,
D44271E01CC81B3200D84D28 /* footpath.c */,
D44271E11CC81B3200D84D28 /* footpath.h */,
D44271E21CC81B3200D84D28 /* fountain.c */,
D44271E31CC81B3200D84D28 /* fountain.h */,
D44D93AD1E92DD28004D6B77 /* Fountain.cpp */,
D44271E31CC81B3200D84D28 /* Fountain.h */,
D44271E61CC81B3200D84D28 /* map_animation.c */,
D44271E71CC81B3200D84D28 /* map_animation.h */,
D44271E81CC81B3200D84D28 /* map_helpers.c */,
@ -1994,6 +2070,9 @@
D44271F11CC81B3200D84D28 /* scenery.h */,
D44271F21CC81B3200D84D28 /* sprite.c */,
D44271F31CC81B3200D84D28 /* sprite.h */,
D429FF401E36ABCD009342A6 /* tile_inspector.c */,
D429FF411E36ABCD009342A6 /* tile_inspector.h */,
D41FA8631E5EA1E200215624 /* wall.cpp */,
D44271F41CC81B3200D84D28 /* water.h */,
);
path = world;
@ -2614,6 +2693,10 @@
C64FDAAC1D6D9A2100F259B9 /* splash_boats.c in Sources */,
C64FDAAD1D6D9A2100F259B9 /* submarine_ride.c in Sources */,
C64FDAAE1D6D9A2100F259B9 /* water_coaster.c in Sources */,
6876808CD662C4B16392A9B4 /* Balloon.cpp in Sources */,
7D02D519C9A56A1FB9854FE7 /* Climate.cpp in Sources */,
689149B0417A68D6765F09CD /* banner.cpp in Sources */,
F408D5E134FE5B423BE5443F /* Duck.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2639,17 +2722,15 @@
791166FB1D7486EF005912EA /* NetworkServerAdvertiser.cpp in Sources */,
D44272441CC81B3200D84D28 /* cable_lift.c in Sources */,
C647C6911E1D0CA000C7FB21 /* AudioMixer.cpp in Sources */,
D442729C1CC81B3200D84D28 /* duck.c in Sources */,
C65A88921E1B1148000368D7 /* AudioChannel.cpp in Sources */,
C686F91D1CDBC3B7009F9BFC /* multi_dimension_roller_coaster.c in Sources */,
C686F8B31CDBC37E009F9BFC /* surface.c in Sources */,
D442729A1CC81B3200D84D28 /* banner.c in Sources */,
C650B21C1CCABC4400B4D91C /* ConvertCommand.cpp in Sources */,
D44272211CC81B3200D84D28 /* viewport_interaction.c in Sources */,
D442721B1CC81B3200D84D28 /* graph.c in Sources */,
C686F9581CDBC4C7009F9BFC /* vehicle_paint.c in Sources */,
658F3D911E44A6C200388550 /* ParkImporter.cpp in Sources */,
007A05D11CFB2C8B00F419C3 /* NetworkPacket.cpp in Sources */,
D44272101CC81B3200D84D28 /* sprite.c in Sources */,
007A05CD1CFB2C8B00F419C3 /* NetworkAction.cpp in Sources */,
C686F8AE1CDBC37E009F9BFC /* fence.c in Sources */,
C686F8AC1CDBC37E009F9BFC /* banner.c in Sources */,
@ -2664,6 +2745,7 @@
D44272651CC81B3200D84D28 /* guest_list.c in Sources */,
D442723F1CC81B3200D84D28 /* shared.c in Sources */,
D442727E1CC81B3200D84D28 /* save_prompt.c in Sources */,
D464B3E01E4FBC850003F3B5 /* ServerList.cpp in Sources */,
D442726A1CC81B3200D84D28 /* main.c in Sources */,
007A05CF1CFB2C8B00F419C3 /* NetworkConnection.cpp in Sources */,
C686F9341CDBC3B7009F9BFC /* merry_go_round.c in Sources */,
@ -2679,6 +2761,7 @@
D44272001CC81B3200D84D28 /* Diagnostics.cpp in Sources */,
D464FEF11D31A6AA00CBABAC /* SmallSceneryObject.cpp in Sources */,
D44272471CC81B3200D84D28 /* ride_ratings.c in Sources */,
D42E337D1E5C27D600D630AF /* Config.cpp in Sources */,
D44272721CC81B3200D84D28 /* new_campaign.c in Sources */,
C686F93A1CDBC3B7009F9BFC /* spiral_slide.c in Sources */,
C686F9421CDBC3B7009F9BFC /* magic_carpet.c in Sources */,
@ -2744,30 +2827,33 @@
D49766831D03B9FE002222CD /* SoftwareDrawingEngine.cpp in Sources */,
C6E96E121E04067A0076A04F /* File.cpp in Sources */,
D464FEF21D31A6AA00CBABAC /* StexObject.cpp in Sources */,
D42E33801E5C27D600D630AF /* KeyboardShortcuts.cpp in Sources */,
C6E96E311E04072F0076A04F /* TitleSequenceManager.cpp in Sources */,
C686F9331CDBC3B7009F9BFC /* maze.c in Sources */,
C686F9241CDBC3B7009F9BFC /* suspended_swinging_coaster.c in Sources */,
C686F92D1CDBC3B7009F9BFC /* crooked_house.c in Sources */,
D442727F1CC81B3200D84D28 /* scenery.c in Sources */,
D429FF421E36ABCD009342A6 /* tile_inspector.c in Sources */,
D460DFD11E01239D007BA2FE /* OpenRCT2.cpp in Sources */,
C686F93C1CDBC3B7009F9BFC /* misc.c in Sources */,
D442723A1CC81B3200D84D28 /* staff.c in Sources */,
D44272931CC81B3200D84D28 /* top_toolbar.c in Sources */,
D43407DA1D0E14BE00C2B3D4 /* FillRectShader.cpp in Sources */,
D464FEBE1D31A66E00CBABAC /* MemoryStream.cpp in Sources */,
D4CA88661D4E64C800060C11 /* version.c in Sources */,
D44271F61CC81B3200D84D28 /* audio.c in Sources */,
D442728A1CC81B3200D84D28 /* tile_inspector.c in Sources */,
D43407D91D0E14BE00C2B3D4 /* DrawLineShader.cpp in Sources */,
C686F9411CDBC3B7009F9BFC /* launched_freefall.c in Sources */,
D44272571CC81B3200D84D28 /* clear_scenery.c in Sources */,
D442727D1CC81B3200D84D28 /* ride_list.c in Sources */,
C686F94E1CDBC3B7009F9BFC /* boat_ride.c in Sources */,
D42E337F1E5C27D600D630AF /* IniWriter.cpp in Sources */,
D44272891CC81B3200D84D28 /* themes.c in Sources */,
C686F9531CDBC3B7009F9BFC /* splash_boats.c in Sources */,
C686F9441CDBC3B7009F9BFC /* pirate_ship.c in Sources */,
652747EC1E41CE1B000F36FD /* SawyerEncoding.cpp in Sources */,
D44272791CC81B3200D84D28 /* publisher_credits.c in Sources */,
C686F91E1CDBC3B7009F9BFC /* reverse_freefall_coaster.c in Sources */,
D42E337E1E5C27D600D630AF /* IniReader.cpp in Sources */,
D442723B1CC81B3200D84D28 /* crash.cpp in Sources */,
C650B21A1CCABBDD00B4D91C /* tables.cpp in Sources */,
D44272291CC81B3200D84D28 /* LanguagePack.cpp in Sources */,
@ -2792,6 +2878,7 @@
C686F8B91CDBC37E009F9BFC /* supports.c in Sources */,
D442726E1CC81B3200D84D28 /* maze_construction.c in Sources */,
D44272751CC81B3200D84D28 /* news_options.c in Sources */,
C6EABCC41E719691008C09AB /* UriHandler.cpp in Sources */,
D44272551CC81B3200D84D28 /* changelog.c in Sources */,
C686F9471CDBC3B7009F9BFC /* top_spin.c in Sources */,
D442720E1CC81B3200D84D28 /* rect.c in Sources */,
@ -2825,7 +2912,6 @@
C686F9431CDBC3B7009F9BFC /* motion_simulator.c in Sources */,
D4469DAD1DEF84480039A779 /* Fonts.cpp in Sources */,
D44272281CC81B3200D84D28 /* language.cpp in Sources */,
D442729B1CC81B3200D84D28 /* climate.c in Sources */,
D464FEC01D31A68800CBABAC /* Image.cpp in Sources */,
C686F9261CDBC3B7009F9BFC /* vertical_drop_roller_coaster.c in Sources */,
D464FEE91D31A6AA00CBABAC /* ImageTable.cpp in Sources */,
@ -2846,6 +2932,7 @@
D44272841CC81B3200D84D28 /* sign.c in Sources */,
D44272481CC81B3200D84D28 /* station.c in Sources */,
D44272511CC81B3200D84D28 /* sawyercoding.c in Sources */,
D49464781E4DB27B00DC690E /* sprite.cpp in Sources */,
C686F91F1CDBC3B7009F9BFC /* reverser_roller_coaster.c in Sources */,
D442728C1CC81B3200D84D28 /* title_editor.c in Sources */,
D44272171CC81B3200D84D28 /* input.c in Sources */,
@ -2867,9 +2954,11 @@
D44272041CC81B3200D84D28 /* Stopwatch.cpp in Sources */,
D43407D81D0E14BE00C2B3D4 /* DrawImageShader.cpp in Sources */,
007A05D01CFB2C8B00F419C3 /* NetworkGroup.cpp in Sources */,
656F6C8E1E45BFC200E0F770 /* Version.cpp in Sources */,
C686F9491CDBC3B7009F9BFC /* chairlift.c in Sources */,
C686F9501CDBC3B7009F9BFC /* log_flume.c in Sources */,
D464FEE81D31A6AA00CBABAC /* FootpathObject.cpp in Sources */,
D41FA8641E5EA1E200215624 /* wall.cpp in Sources */,
D43407D61D0E14BE00C2B3D4 /* CopyFramebufferShader.cpp in Sources */,
C6E96E231E04070E0076A04F /* scenario.c in Sources */,
D44272241CC81B3200D84D28 /* intro.c in Sources */,
@ -2880,6 +2969,7 @@
C6E96E2F1E04072F0076A04F /* TitleScreen.cpp in Sources */,
D442728E1CC81B3200D84D28 /* title_logo.c in Sources */,
C686F8B21CDBC37E009F9BFC /* scenery_multiple.c in Sources */,
D433A5011E4A861F00D9A6DF /* SawyerChunkReader.cpp in Sources */,
D442725E1CC81B3200D84D28 /* editor_objective_options.c in Sources */,
D44272531CC81B3200D84D28 /* about.c in Sources */,
C686F9311CDBC3B7009F9BFC /* ghost_train.c in Sources */,
@ -2890,7 +2980,6 @@
C612A8991D64825300B634CA /* vehicle_data.c in Sources */,
D44271FB1CC81B3200D84D28 /* ScreenshotCommands.cpp in Sources */,
D464FEBB1D31A65300CBABAC /* IStream.cpp in Sources */,
D442729E1CC81B3200D84D28 /* fountain.c in Sources */,
C686F94B1CDBC3B7009F9BFC /* miniature_railway.c in Sources */,
C686F94D1CDBC3B7009F9BFC /* suspended_monorail.c in Sources */,
D44272131CC81B3200D84D28 /* editor.c in Sources */,
@ -2907,6 +2996,7 @@
D44272761CC81B3200D84D28 /* options.c in Sources */,
C686F93D1CDBC3B7009F9BFC /* shop.c in Sources */,
C686F8AD1CDBC37E009F9BFC /* entrance.c in Sources */,
D433A5001E4A861F00D9A6DF /* SawyerChunk.cpp in Sources */,
D44272111CC81B3200D84D28 /* string.c in Sources */,
C686F93E1CDBC3B7009F9BFC /* 3d_cinema.c in Sources */,
D44272771CC81B3200D84D28 /* park.c in Sources */,
@ -2928,17 +3018,19 @@
D44271FF1CC81B3200D84D28 /* Console.cpp in Sources */,
D44272781CC81B3200D84D28 /* player.c in Sources */,
C686F9161CDBC3B7009F9BFC /* lay_down_roller_coaster.c in Sources */,
D44272991CC81B3200D84D28 /* balloon.c in Sources */,
D442727C1CC81B3200D84D28 /* ride_construction.c in Sources */,
D442724A1CC81B3200D84D28 /* track_data.c in Sources */,
D442725C1CC81B3200D84D28 /* editor_main.c in Sources */,
C686F9361CDBC3B7009F9BFC /* mini_helicopters.c in Sources */,
C686F93F1CDBC3B7009F9BFC /* enterprise.c in Sources */,
C686F91B1CDBC3B7009F9BFC /* mini_roller_coaster.c in Sources */,
D48ABABA1E71EBD500A3E39C /* entrance.cpp in Sources */,
D44D93AE1E92DD28004D6B77 /* Fountain.cpp in Sources */,
D464FEE51D31A6AA00CBABAC /* BannerObject.cpp in Sources */,
D44272391CC81B3200D84D28 /* peep.c in Sources */,
D44272681CC81B3200D84D28 /* land_rights.c in Sources */,
D44272601CC81B3200D84D28 /* error.c in Sources */,
D464B3E21E4FBCC00003F3B5 /* audio.cpp in Sources */,
C686F8B41CDBC37E009F9BFC /* paint.c in Sources */,
D442728D1CC81B3200D84D28 /* title_exit.c in Sources */,
D48A8D831D00272F00649DA7 /* TcpSocket.cpp in Sources */,
@ -2952,14 +3044,18 @@
D442726C1CC81B3200D84D28 /* map_tooltip.c in Sources */,
C686F9281CDBC3B7009F9BFC /* wild_mouse.c in Sources */,
D44272701CC81B3200D84D28 /* music_credits.c in Sources */,
D433A5021E4A861F00D9A6DF /* SawyerChunkWriter.cpp in Sources */,
C686F9511CDBC3B7009F9BFC /* river_rafts.c in Sources */,
C686F90E1CDBC3B7009F9BFC /* corkscrew_roller_coaster.c in Sources */,
D44272A61CC81B3200D84D28 /* scenery.c in Sources */,
C686F9111CDBC3B7009F9BFC /* heartline_twister_coaster.c in Sources */,
C6834A111DFDE8E300CE933A /* interop.c in Sources */,
C686F9231CDBC3B7009F9BFC /* steeplechase.c in Sources */,
D44271FE1CC81B3200D84D28 /* config.c in Sources */,
D44272871CC81B3200D84D28 /* staff_list.c in Sources */,
F61331C839858250899F1E9B /* Balloon.cpp in Sources */,
F2CC500E17C9411FBA859888 /* Climate.cpp in Sources */,
8DED2F20E0D63A1DCFCE0197 /* banner.cpp in Sources */,
B94C3C5FC4DBBB864434DE83 /* Duck.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3068,7 +3164,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3088,7 +3184,7 @@
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
@ -3116,7 +3212,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = NO;
@ -3136,7 +3232,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (

View File

@ -1,4 +1,4 @@
version: 0.0.6.{build}
version: 0.0.7.{build}
image:
- Visual Studio 2015
# - Visual Studio 2017 RC
@ -7,10 +7,6 @@ cache:
- C:\ProgramData\chocolatey\lib -> scripts\ps\appveyor_install.ps1
- secure-file -> scripts\ps\appveyor_install.ps1
environment:
ENCKEY:
secure: saYAIpqXzpq0U+JH+MNi/isRQ6Y51PZhm4BrnePDiAPptFO5htxFOLegrYqxdy67
SIGN_PASSWORD:
secure: bzYmf0ElxisSGyZnIjUOYQ==
OPENRCT2_ORG_TOKEN:
secure: leQX3xCQpmBLGuMqrxjFlzexDt96ypNRMM5TTRVHbGE8PwVg9crgeykLc2BIZU6HDHveJCHqh2cGMdHtHYJYcw==
BUILD_SERVER: AppVeyor

View File

@ -48,13 +48,15 @@ Includes all git commit authors. Aliases are GitHub user names.
* Robert Jordan (trigger-death) - UI theming, title sequence editor, misc.
* Aaron van Geffen (AaronVanGeffen) - scenario select screen, font detection, misc.
* Michał Janiszewski (janisozaur) - Linux port, crash handling, security, misc.
* Kelson Blakewood (spacek531) - title sequence for 0.0.4
* Kelson Blakewood (spacek531) - title sequence for 0.0.4 and 0.0.5/0.0.6
* Hugo Wallenburg (Goddesen) - Misc.
* Matte Andersson (Nubbie) - Misc, UX
* Daniel Trujillo Viedma (gDanix) - Custom currency.
* Niels NTG Poldervaart (Niels-NTG) - Misc.
* (zaxcav) - Improvements to original pathfinding algorithm.
* Hielke Morsink (Broxzier) - Tile inspector, misc.
* Hielke Morsink (Broxzier) - Tile inspector, heightmap loader, misc.
* Joël Troch (JoelTroch) - Keyboard shortcuts for ride construction.
* Thomas Delebo (delebota) - Misc.
## Bug fixes
* (halfbro)
@ -72,6 +74,9 @@ Includes all git commit authors. Aliases are GitHub user names.
* Sven Slootweg (joepie91)
* Daniel Trujillo Viedma (gDanix)
* Jonathan Haas (HaasJona)
* Jake Breen (Haekb)
* Marco Benzi Tobar (Lisergishnu)
* Richard Jenkins (rwjuk)
## Toolchain
* (Balletie) - macOS
@ -98,6 +103,7 @@ Includes all git commit authors. Aliases are GitHub user names.
* Miscellaneous fixes: Alexander Overvoorde (Overv), Ed Foley (e-foley)
* English (UK) - Ted John (IntelOrca), (Tinytimrob)
* English (US) - Ted John (IntelOrca), Michael Steenbeek (Gymnasiast); small fixes: (LRFLEW), (mike-koch), Harry Lam (daihakken)
* Catalan - Joan Josep (J0anJosep)
* Czech - Martin Černáč (octaroot), (Clonewayx), Tomáš Pazdiora (Aroidzap)
* Dutch - Michael Steenbeek (Gymnasiast), Yannic Geurts (xzbobzx), (mrtnptrs), Thomas den Hollander (ThomasdenH), (hostbrute), Marijn van der Werf (marijnvdwerf), Tom Kroes (ThePsionic); reviewing and discussion: Aaron van Geffen (AaronVanGeffen), (Balletie) and Sijmen Schoon (SijmenSchoon).
* Finnish - (DJHasis), (Zode), (TheWing)

4829
data/language/ca-ES.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
# STR_XXXX part is read and XXXX becomes the string id number.
# STR_XXXX part is read and XXXX becomes the string id number.
# Everything after the colon and before the new line will be saved as the string.
# Use # at the beginning of a line to leave a comment.
STR_0000 :
@ -2693,14 +2693,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}Dorazí velká skupina návštěvníků
STR_2685 :Parametry simplex noise
STR_2686 :{WINDOW_COLOUR_2}Hloubky:
STR_2687 :{WINDOW_COLOUR_2}Výšky:
STR_2688 :{WINDOW_COLOUR_2}Základní frekvence:
STR_2689 :{WINDOW_COLOUR_2}Oktávy:
STR_2686 :Hloubky:
STR_2687 :Výšky:
STR_2688 :Základní frekvence:
STR_2689 :Oktávy:
STR_2690 :Generování mapy
STR_2691 :{WINDOW_COLOUR_2}Výška povrchu:
STR_2692 :{WINDOW_COLOUR_2}Výška vodní hladiny:
STR_2693 :{WINDOW_COLOUR_2}Terén:
STR_2691 :Výška povrchu:
STR_2692 :Výška vodní hladiny:
STR_2693 :Terén:
STR_2694 :Generovat
STR_2695 :Náhodný terén
STR_2696 :Umístit stromy
@ -3220,7 +3220,7 @@ STR_3207 :Návrh horské dráhy
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:
STR_3211 :{WINDOW_COLOUR_2}Velikost mapy:
STR_3211 :Velikost mapy:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Mapu nelze více zmenšit
STR_3214 :Mapu nelze více zvětšit
@ -4169,6 +4169,7 @@ STR_5856 :{SMALLFONT}{BLACK}Nastavit rozlišení hry v režimu celé obrazovk
STR_5857 :{SMALLFONT}{BLACK}Herní nastavení
STR_5858 :{SMALLFONT}{BLACK}Použít GPU pro vykreslování místo CPU. Zvyšuje kompatibilitu se softwarem pro nahrávání obrazovky. Může lehce snížit výkonnost hry.
STR_5859 :{SMALLFONT}{BLACK}Zapnout generování mezilehlých snímků{NEWLINE}pro jemnější obraz. Hra dosahuje{NEWLINE} 40 FPS, když je tato možnost zakázaná.
STR_5860 :{SMALLFONT}{BLACK}Přepnout vykreslení původní/dekompilované dráhy
STR_5861 :Selhalo ověření klíče.
STR_5862 :Blokovat neznámé hráče.
STR_5863 :{SMALLFONT}{BLACK}Připojit se smí pouze hráči s ověřenými klíči.
@ -4303,8 +4304,44 @@ STR_5991 :Nelze vložit prvek...
STR_5992 :Dosažen limit prvků mapy
STR_5993 :{SMALLFONT}{BLACK}Kopírovat prvek
STR_5994 :{SMALLFONT}{BLACK}Vložit prvek
STR_5995 :Booster
STR_5996 :Rychlost boosteru
STR_5997 :Přidat/nastavit peníze
STR_5998 :Přidat peníze
STR_5999 :Nastavit peníze
STR_6000 :Zadejte novou hodnotu
STR_6001 :Zapnout efekty osvětlení (experimentalní)
STR_6002 :{SMALLFONT}{BLACK}Lampy a atrakce budou v noci svítit.{NEWLINE}Vyžaduje nastavení hardwarového vykreslování (GPU).
STR_6003 :Seříznuté zobrazení
STR_6004 :Seříznuté zobrazení
STR_6005 :Povolit seříznuté zobrazení
STR_6006 :{SMALLFONT}{BLACK}Seříznuté zobrazení vykresluje prvky mapy pouze do (včetně) dané výšky
STR_6007 :Výška řezu
STR_6008 :{SMALLFONT}{BLACK}Přepnout na hodnotu s/bez jednotek
STR_6009 :{SMALLFONT}{BLACK}Zvolit výšku řezu
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Návštěvníci platí pouze za vstup do parku a služby. Atrakce jsou zdrarma.
STR_6014 :{SMALLFONT}{BLACK}Návštěvníci platí pouze za služby a atrakce. Vstup do parku je zdarma.
STR_6015 :Nakloněný
STR_6016 :Upravit dlaždici
STR_6017 :Zpomalte prosím
STR_6018 :Stavba trati - zatáčka vlevo
STR_6019 :Stavba trati - zatáčka vpravo
STR_6020 :Stavba trati - použít výchozí díl
STR_6021 :Stavba trati - svah dolů
STR_6022 :Stavba trati - svah vzhůru
STR_6023 :Stavba trati - řetězový vlek
STR_6024 :Stavba trati - náklon vlevo
STR_6025 :Stavba trati - náklon vpravo
STR_6026 :Stavba trati - předchozí díl
STR_6027 :Stavba trati - následující díl
STR_6028 :Stavba trati - postavit aktivní část
STR_6029 :Stavba trati - odebrat aktivní část
STR_6030 :{SMALLFONT}{BLACK}Výběr kulis. Klikněte na jakoukoliv kulisu na mapě pro postavení její kopie.
STR_6031 :Popis serveru:
STR_6032 :Uvítací zpráva serveru:
###############################################################################
## RCT2 Objects

View File

@ -2690,14 +2690,14 @@ STR_2682 :{MEDIUMFONT}{BLACK}Zw. freiem und kostenpfl. Eintritt umsch.
STR_2683 :{MEDIUMFONT}{BLACK}Erhöht das Vergnügen der Besucher maximal
STR_2684 :{SMALLFONT}{BLACK}Eine große Gruppe von Besuchern tritt ein
STR_2685 :`Simplex Noise' Param.
STR_2686 :{WINDOW_COLOUR_2}Niedrig:
STR_2687 :{WINDOW_COLOUR_2}Hoch:
STR_2688 :{WINDOW_COLOUR_2}Basisfrequenz:
STR_2689 :{WINDOW_COLOUR_2}Oktaven:
STR_2686 :Niedrig:
STR_2687 :Hoch:
STR_2688 :Basisfrequenz:
STR_2689 :Oktaven:
STR_2690 :Kartengenerierung
STR_2691 :{WINDOW_COLOUR_2}Basishöhe:
STR_2692 :{WINDOW_COLOUR_2}Wasserhöhe:
STR_2693 :{WINDOW_COLOUR_2}Terrain:
STR_2691 :Basishöhe:
STR_2692 :Wasserhöhe:
STR_2693 :Terrain:
STR_2694 :Generieren
STR_2695 :Zufälliges Terrain
STR_2696 :Bäume platzieren
@ -2747,7 +2747,7 @@ STR_2739 :Keine
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat nicht gefunden
STR_2743 :Kopieren Sie data\css17.dat aus Ihrem RCT1-Verzeichnis nach data\css50.dat in Ihrem RCT2-Verzeichnis.
STR_2743 :Kopieren Sie data\css17.dat aus Ihrem RCT1-Verzeichnis nach data\css50.dat in Ihrem RCT2-Verzeichnis oder versichern Sie sich, dass der Pfad zur RCT1-Installation in den Optionen korrekt angegeben ist.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3217,7 +3217,7 @@ STR_3207 :Achterbahn-Designer
STR_3208 :Streckenentwurf-Manager
STR_3209 :Zurück zum vorherigen Schritt:
STR_3210 :Weiter zum nächsten Schritt:
STR_3211 :{WINDOW_COLOUR_2}Kartengröße:
STR_3211 :Kartengröße:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Kartengröße kann nicht mehr verkleinert werden
STR_3214 :Kartengröße kann nicht mehr vergrößert werden
@ -4136,7 +4136,7 @@ STR_5832 :{SMALLFONT}{BLACK}Zeigt Höhen als generische Einheiten,{NEWLINE}an
STR_5833 :{SMALLFONT}{BLACK}Verändert das verwendete Datumsformat
STR_5834 :{SMALLFONT}{BLACK}Das zu verwendende Audiogerät auswählen
STR_5835 :{SMALLFONT}{BLACK}Schaltet das Spiel stumm, wenn das{NEWLINE}Spiel nicht mehr im Vordergrund ist
STR_5836 :{SMALLFONT}{BLACK}Die im Hauptmenü verwendete{NEWLINE}Musik auswählen.{NEWLINE}{NEWLINE}Die RCT1-Musik erfordert das Kopieren von 'data/css17.dat',{NEWLINE}aus dem RCT1-Ordner, nach 'data/css50.dat' im{NEWLINE}RCT2-Ordner
STR_5836 :{SMALLFONT}{BLACK}Die im Hauptmenü verwendete{NEWLINE}Musik auswählen.{NEWLINE}{NEWLINE}Die RCT1-Musik erfordert das Kopieren von 'data/css17.dat',{NEWLINE}aus dem RCT1-Ordner, nach 'data/css50.dat' im{NEWLINE}RCT2-Ordner oder versichern Sie sich, dass der Pfad zur RCT1-Installation in den Optionen korrekt angegeben ist.
STR_5837 :{SMALLFONT}{BLACK}Benutzerdefinierte GUIs{NEWLINE}erstellen und verwalten
STR_5838 :{SMALLFONT}{BLACK}Zeigt für die Finanzen in der Symbolleiste{NEWLINE}eine gesonderte Schaltfläche an
STR_5839 :{SMALLFONT}{BLACK}Zeigt für die Forschung & Entwicklung{NEWLINE}in der Symbolleiste eine gesonderte Schaltfläche an
@ -4160,6 +4160,7 @@ STR_5856 :{SMALLFONT}{BLACK}Die im Vollbildmodus verwendete{NEWLINE}Auflösun
STR_5857 :{SMALLFONT}{BLACK}Spieloptionen
STR_5858 :{SMALLFONT}{BLACK}GPU anstelle der CPU für die Anzeige verwenden. Verbessert die Kompatibilität mit Aufnahmeprogrammen. Möglicherweise wird die Leistung geringfügig beeinträchtigt
STR_5859 :{SMALLFONT}{BLACK}Aktiviert Tweening für ein sichtbar flüssigeres Spielverhalten. Wenn deaktiviert läuft das Spiel mit 40 FPS
STR_5860 :Umschalten zwischen original und dekompilierten Streckenbau
STR_5861 :Schlüsselüberprüfung fehlgeschlagen.
STR_5862 :Blockiere unbekannte Spieler
STR_5863 :{SMALLFONT}{BLACK}Erlaube nur Spieler, mit bekanntem{NEWLINE}Schlüssel, sich zu verbinden
@ -4312,6 +4313,34 @@ STR_6009 :{SMALLFONT}{BLACK}Schnitthöhe auswählen
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Gäste zahlen lediglich den Eintritt zum Park.{NEWLINE}Die Attraktionen sind kostenfrei.
STR_6014 :{SMALLFONT}{BLACK}Gäste zahlen lediglich für Attraktionen und Service.{NEWLINE}Der Eintritt in den Park ist kostenfrei.
STR_6015 :Geneigt
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_6021 :Streckenbau - Neigung unten
STR_6022 :Streckenbau - Neigung Oben
STR_6023 :Streckenbau - Umschalten Kettenlift
STR_6024 :Streckenbau - Überhöhung links
STR_6025 :Streckenbau - Überhöhung rechts
STR_6026 :Streckenbau - Vorausgehender Abschnitt
STR_6027 :Streckenbau - Nächster Abschnitt
STR_6028 :Streckenbau - Aktuellen Abschnitt platzieren
STR_6029 :Streckenbau - Aktuellen Abschnitt abreißen
STR_6030 :{SMALLFONT}{BLACK}Landschaftsauswahl. Wählen Sie ein Landschaftselement auf der Karte aus, und verwenden Sie es zum Platzieren.
STR_6031 :Serverbeschreibung:
STR_6032 :Serverbegrüßung:
STR_6033 :Pfad zur RCT1-Installation:
STR_6035 :Bitte wählen Sie ein RCT1-Verzeichnis
STR_6036 :{SMALLFONT}{BLACK}Leeren
STR_6037 :Bitte wählen Sie ein valides RCT1-Verzeichnis
STR_6038 :{SMALLFONT}{BLACK}Falls Sie RCT1 installiert haben, setzen Sie diese Option zum Laden von Scenarios, Musik, usw.
STR_6039 :{SMALLFONT}{BLACK}Schnellabriss
STR_6040 :Bearbeite Szenariooptionen
STR_6041 :{BLACK}Es sind keine Mechaniker eingestellt!
#############
# Scenarios #

View File

@ -553,10 +553,10 @@ STR_0548 :A toilet building
STR_0549 :Rotating big wheel with open chairs
STR_0550 :Riders view a film inside the motion simulator pod while it is twisted and moved around by a hydraulic arm
STR_0551 :Cinema showing 3D films inside a geodesic sphere shaped building
STR_0552 :Passengers ride in a gondola suspended by large rotating arms, rotating forwards and backwards head-over-heals
STR_0552 :Passengers ride in a gondola suspended by large rotating arms, rotating forwards and backwards head-over-heels
STR_0553 :Concentric pivoting rings allowing the riders free rotation in all directions
STR_0554 :The car is accelerated out of the station along a long level track using Linear Induction Motors, then heads straight up a vertical spike of track, freefalling back down to return to the station
STR_0555 :Guests ride in an elevator up or down a vertical tower to get from one level to another
STR_0555 :Guests ride in a lift up or down a vertical tower to get from one level to another
STR_0556 :Extra-wide cars descend completely vertical sloped track for the ultimate freefall roller coaster experience
STR_0557 :An A.T.M. (Cash Machine) for guests to use if they run low on funds
STR_0558 :Riders ride in pairs of seats rotating around the ends of three long rotating arms
@ -2691,14 +2691,14 @@ STR_2682 :<removed string - do not use>
STR_2683 :<removed string - do not use>
STR_2684 :{SMALLFONT}{BLACK}Large group of guests arrive
STR_2685 :Simplex Noise Parameters
STR_2686 :{WINDOW_COLOUR_2}Low:
STR_2687 :{WINDOW_COLOUR_2}High:
STR_2688 :{WINDOW_COLOUR_2}Base Frequency:
STR_2689 :{WINDOW_COLOUR_2}Octaves:
STR_2686 :Low:
STR_2687 :High:
STR_2688 :Base Frequency:
STR_2689 :Octaves:
STR_2690 :Map Generation
STR_2691 :{WINDOW_COLOUR_2}Base height:
STR_2692 :{WINDOW_COLOUR_2}Water level:
STR_2693 :{WINDOW_COLOUR_2}Terrain:
STR_2691 :Base height:
STR_2692 :Water level:
STR_2693 :Terrain:
STR_2694 :Generate
STR_2695 :Random terrain
STR_2696 :Place trees
@ -2748,7 +2748,7 @@ STR_2739 :None
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat not found
STR_2743 :Copy data\css17.dat from your RCT1 installation to data\css50.dat in your RCT2 installation.
STR_2743 :Copy 'data/css17.dat' from your RCT1 installation to 'data/css50.dat' in your RCT2 installation, or make sure the path to RCT1 in the Miscellaneous tab is correct.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -2788,7 +2788,7 @@ STR_2778 :{RIGHTGUILLEMET}{MOVE_X}{SMALLFONT}{STRING}
STR_2779 :Viewport #{COMMA16}
STR_2780 :Extra viewport
# End of new strings
STR_2781 :{STRINGID}:{MOVE_X}{195}{STRINGID}
STR_2781 :{STRINGID}:{MOVE_X}{255}{STRINGID}
STR_2782 :SHIFT +
STR_2783 :CTRL +
STR_2784 :Change keyboard shortcut
@ -3218,7 +3218,7 @@ STR_3207 :Roller Coaster Designer
STR_3208 :Track Designs Manager
STR_3209 :Back to Previous Step:
STR_3210 :Forward to Next Step:
STR_3211 :{WINDOW_COLOUR_2}Map size:
STR_3211 :Map size:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Can't decrease map size any further
STR_3214 :Can't increase map size any further
@ -3280,9 +3280,9 @@ STR_3269 :Forbid landscape changes
STR_3270 :{SMALLFONT}{BLACK}Forbid any changes to the landscape
STR_3271 :Forbid high construction
STR_3272 :{SMALLFONT}{BLACK}Forbid any tall construction
STR_3273 :Park rating higher difficult level
STR_3273 :Park rating is harder to increase and maintain
STR_3274 :{SMALLFONT}{BLACK}Make the park rating value more challenging
STR_3275 :Guest generation higher difficult level
STR_3275 :Guests are more difficult to attract
STR_3276 :{SMALLFONT}{BLACK}Make it more difficult to attract guests to the park
STR_3277 :{WINDOW_COLOUR_2}Cost to buy land:
STR_3278 :{WINDOW_COLOUR_2}Cost to buy construction rights:
@ -4144,7 +4144,7 @@ STR_5832 :{SMALLFONT}{BLACK}Show height as generic units instead of measureme
STR_5833 :{SMALLFONT}{BLACK}Changes what date format is used
STR_5834 :{SMALLFONT}{BLACK}Select which audio device OpenRCT2 will use
STR_5835 :{SMALLFONT}{BLACK}Mute the game if the window loses focus
STR_5836 :{SMALLFONT}{BLACK}Select music to use on the main menu.{NEWLINE}Selecting RCT1 theme requires that you copy 'data/css17.dat' from your RCT1 game folder to 'data/css50.dat' in your RCT2 folder.
STR_5836 :{SMALLFONT}{BLACK}Select music to use on the main menu.{NEWLINE}Selecting RCT1 theme requires that you copy 'data/css17.dat' from your RCT1 game folder to 'data/css50.dat' in your RCT2 folder, or set the path to RCT1 in the Miscellaneous tab.
STR_5837 :{SMALLFONT}{BLACK}Create and manage custom UI themes
STR_5838 :{SMALLFONT}{BLACK}Show a separate button for the finance window in the toolbar
STR_5839 :{SMALLFONT}{BLACK}Show a separate button for the research and development window in the toolbar
@ -4237,7 +4237,7 @@ STR_5925 :Path details
STR_5926 :Track details
STR_5927 :Scenery details
STR_5928 :Entrance details
STR_5929 :Fence details
STR_5929 :Wall details
STR_5930 :Large scenery details
STR_5931 :Banner details
STR_5932 :Corrupt element details
@ -4287,7 +4287,7 @@ STR_5975 :Slope:
STR_5976 :Flat
STR_5977 :Right side up
STR_5978 :Left side up
STR_5979 :{WINDOW_COLOUR_2}Fence type: {BLACK}{COMMA16}
STR_5979 :{WINDOW_COLOUR_2}Wall type: {BLACK}{COMMA16}
STR_5980 :{WINDOW_COLOUR_2}Banner text: {BLACK}{STRINGID}
STR_5981 :{WINDOW_COLOUR_2}Not a banner
STR_5982 :{WINDOW_COLOUR_2}Large scenery type: {BLACK}{COMMA16}
@ -4321,6 +4321,52 @@ STR_6009 :{SMALLFONT}{BLACK}Select cut height
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Guests will only pay the ticket to enter the park and services.{NEWLINE}Ride entry is free.
STR_6014 :{SMALLFONT}{BLACK}Guests will only pay entrance tickets for rides and services.{NEWLINE}They won't pay anything to enter the park.
STR_6015 :Sloped
STR_6016 :Modify Tile
STR_6017 :Please slow down
STR_6018 :Ride construction - Turn left
STR_6019 :Ride construction - Turn right
STR_6020 :Ride construction - Use default track
STR_6021 :Ride construction - Slope down
STR_6022 :Ride construction - Slope up
STR_6023 :Ride construction - Toggle chain lift
STR_6024 :Ride construction - Bank left
STR_6025 :Ride construction - Bank right
STR_6026 :Ride construction - Previous track
STR_6027 :Ride construction - Next track
STR_6028 :Ride construction - Build current
STR_6029 :Ride construction - Demolish current
STR_6030 :{SMALLFONT}{BLACK}Scenery picker. Click any scenery on the map to select the same piece for construction.
STR_6031 :Server Description:
STR_6032 :Server Greeting:
STR_6033 :Path to RCT1 installation:
STR_6034 :{SMALLFONT}{BLACK}{STRING}
STR_6035 :Please select your RCT1 directory
STR_6036 :{SMALLFONT}{BLACK}Clear
STR_6037 :Please select a valid RCT1 directory
STR_6038 :{SMALLFONT}{BLACK}If you have RCT1 installed, set this option to its directory to load scenarios, music, etc.
STR_6039 :{SMALLFONT}{BLACK}Quick demolish ride
STR_6040 :Edit Scenario Options
STR_6041 :{BLACK}No mechanics are hired!
STR_6042 :Load height map
STR_6043 :Select height map
STR_6044 :Smooth height map
STR_6045 :Strength
STR_6046 :Normalise height map
STR_6047 :Smooth tiles
STR_6048 :Height map error
STR_6049 :Error reading PNG
STR_6050 :Error reading bitmap
STR_6051 :The width and height need to match
STR_6052 :The heightmap is too big, and will be cut off
STR_6053 :The heightmap cannot be normalised
STR_6054 :Only 24-bit bitmaps are supported
STR_6055 :OpenRCT2 Heightmap File
STR_6056 :{SMALLFONT}{BLACK}Mute
STR_6057 :{SMALLFONT}{BLACK}Show a separate button for the Mute Option in the toolbar
STR_6058 :Mute
#############
# Scenarios #
@ -4464,8 +4510,8 @@ 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
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>
@ -4768,8 +4814,20 @@ STR_DTLS :
# Rides/attractions #
#####################
#RCT2
[TOPSP1]
STR_NAME :Top Spin
STR_DESC :Passengers ride in a gondola suspended by large rotating arms, rotating forwards and backwards head-over-heels
STR_CPTY :8 passengers
#WW
[CONDORRD]
STR_NAME :Condor Ride
STR_DESC :Riding in special harnesses below the track, riders experience the feeling of flight as they swoop through the air in Condor-shaped trains
STR_CPTY :4 passengers per car
#WW
[CONGAEEL]
STR_NAME :Conger Eel Coaster
STR_DESC :A compact steel-tracked roller coaster where the Eel-shaped train travels through corkscrews and loops
STR_CPTY :4 passengers per car

File diff suppressed because it is too large Load Diff

View File

@ -2664,14 +2664,14 @@ STR_2680 :Investigación Completa
STR_2681 :{MEDIUMFONT}{BLACK}Incrementa tu dinero en {CURRENCY}
STR_2684 :{SMALLFONT}{BLACK}Llega un gran grupo de visitantes
STR_2685 :Simplex Noise Parameters
STR_2686 :{WINDOW_COLOUR_2}Bajo:
STR_2687 :{WINDOW_COLOUR_2}Alto:
STR_2688 :{WINDOW_COLOUR_2}Frecuencia Base:
STR_2689 :{WINDOW_COLOUR_2}Octavas:
STR_2686 :Bajo:
STR_2687 :Alto:
STR_2688 :Frecuencia Base:
STR_2689 :Octavas:
STR_2690 :Generación Mapa
STR_2691 :{WINDOW_COLOUR_2}Altura de base:
STR_2692 :{WINDOW_COLOUR_2}Altura de agua:
STR_2693 :{WINDOW_COLOUR_2}Terreno:
STR_2691 :Altura de base:
STR_2692 :Altura de agua:
STR_2693 :Terreno:
STR_2694 :Generar
STR_2695 :Terreno aleatorio
STR_2696 :Colocar arboles
@ -2721,7 +2721,7 @@ STR_2739 :Ninguna
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat no encontrado
STR_2743 :Copia data\css17.dat de tu instalación de RCT1 en data\css50.dat de la instalación de RCT2,
STR_2743 :Copia data\css17.dat de tu instalación de RCT1 en data\css50.dat de tu instalación de RCT2, o asegúrate de que la carpeta de RCT1 en la sección "Otras Opciones" esté establecido correctamente.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3185,7 +3185,7 @@ STR_3207 :Diseñador de Montañas Rusas
STR_3208 :Diseñador de Vías
STR_3209 :Regresar al paso anterior:
STR_3210 :Avanzar al siguiente paso:
STR_3211 :{WINDOW_COLOUR_2}Tamaño de Mapa:
STR_3211 :Tamaño de Mapa:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :No puedes disminuir más el tamaño del mapa
STR_3214 :No puedes aumentar más el tamaño del mapa
@ -4105,7 +4105,7 @@ STR_5832 :{SMALLFONT}{BLACK}Mostrar marcas de altura con{NEWLINE}valores rela
STR_5833 :{SMALLFONT}{BLACK}Cambiar el formato de fecha a usar en el juego.
STR_5834 :{SMALLFONT}{BLACK}Selecciona el dispositivo de sonido que OpenRCT2 debe usar.
STR_5835 :{SMALLFONT}{BLACK}Silenciar el juego si la ventana pierde el foco.
STR_5836 :{SMALLFONT}{BLACK}Selecciona la música usada en el menú principal.{NEWLINE}Seleccionar el tema de RCT1 requiere copiar el archivo 'data/css17.dat' de la carpeta de RCT1 a 'data/css50.dat' en la carpeta de RCT2.
STR_5836 :{SMALLFONT}{BLACK}Selecciona la música usada en el menú principal.{NEWLINE}Seleccionar el tema de RCT1 requiere copiar el archivo 'data/css17.dat' de la carpeta de RCT1 a 'data/css50.dat' en la carpeta de RCT2, o establece la ruta de RCT1 en "Otras Opciones".
STR_5837 :{SMALLFONT}{BLACK}Crea y gestiona tus temas personalizados de la interfaz.
STR_5838 :{SMALLFONT}{BLACK}Mostrar un botón separado para las finanzas en la barra de herramienta superior.
STR_5839 :{SMALLFONT}{BLACK}Mostrar un botón separado para la investigación y desarrollo en la barra de herramienta superior.
@ -4281,6 +4281,47 @@ STR_6009 :{SMALLFONT}{BLACK}Selecciona la altura de corte
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Los visitantes sólo pagarán por la entrada del parque y los servicios.{NEWLINE}La entrada de la atracción es gratis.
STR_6014 :{SMALLFONT}{BLACK}Los visitantes sólo pagarán por la entrada de atracciones y servicios.{NEWLINE}Los visitantes no pagan por entrar al parque.
STR_6015 :Inclinado
STR_6016 :Modificar Baldosa
STR_6017 :Por favor más despacio
STR_6018 :Construir Atrac. - Curva Izquierda
STR_6019 :Construir Atrac. - Curva Derecha
STR_6020 :Const. Atrac. - Usar vía por defecto
STR_6021 :Construir Atrac. - Cuesta abajo
STR_6022 :Construir Atrac. - Cuesta arriba
STR_6023 :Construir Atrac. - Cadena Elevación
STR_6024 :Construir Atrac. - Peralte Izquierdo
STR_6025 :Construir Atrac. - Peralte Derecho
STR_6026 :Construir Atrac. - Pieza Anterior
STR_6027 :Construir Atrac. - Pieza Siguiente
STR_6028 :Construir Atrac. - Construir Actual
STR_6029 :Construir Atrac. - Demoler Actual
STR_6030 :{SMALLFONT}{BLACK}Selector de Escenario. Haz clic en cualquier escenario del mapa para construirlo.
STR_6031 :Descripción Servidor:
STR_6032 :Msg. de Bienvenida:
STR_6033 :Ruta de Instalación RCT1:
STR_6035 :Por favor selecciona la carpeta de RCT1
STR_6036 :{SMALLFONT}{BLACK}Borrar
STR_6037 :Por favor selecciona una carpeta válida con una instalación de RCT1
STR_6038 :{SMALLFONT}{BLACK}Si tienes una instalación de RCT1, establece esta opción hacia la carpeta de la instalación para cargar los escenarios, música, etc.
STR_6039 :{SMALLFONT}{BLACK}Demoler atracción rápidamente
STR_6040 :Editar Opciones de Escenario
STR_6041 :{BLACK}¡No hay mecánicos contratados!
STR_6042 :Cargar mapa de altura
STR_6043 :Seleccionar mapa de altura
STR_6044 :Suavizar mapa de altura
STR_6045 :Intensidad
STR_6046 :Normalizar mapa de altura
STR_6047 :Suavizar baldosa
STR_6048 :Error de mapa de altura
STR_6049 :Error al leer PNG
STR_6050 :Error al leer bitmap
STR_6051 :El ancho y la altura deben ser la misma.
STR_6052 :El mapa de altura es muy grande, será cortado.
STR_6053 :El mapa de altura no puede ser normalizado.
STR_6054 :Sólo bitmaps de 24-bits son soportados
##############
# Escenarios #

View File

@ -2696,14 +2696,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}Suuri kävijäryhmä saapuu
STR_2685 :Simplex Noise Parameters
STR_2686 :{WINDOW_COLOUR_2}Matala:
STR_2687 :{WINDOW_COLOUR_2}Korkea:
STR_2688 :{WINDOW_COLOUR_2}Base Frequency:
STR_2689 :{WINDOW_COLOUR_2}Octaves:
STR_2686 :Matala:
STR_2687 :Korkea:
STR_2688 :Base Frequency:
STR_2689 :Octaves:
STR_2690 :Kartan luonti
STR_2691 :{WINDOW_COLOUR_2}Peruskorkeus:
STR_2692 :{WINDOW_COLOUR_2}Vedentaso:
STR_2693 :{WINDOW_COLOUR_2}Ympäristö:
STR_2691 :Peruskorkeus:
STR_2692 :Vedentaso:
STR_2693 :Ympäristö:
STR_2694 :Luo
STR_2695 :Satunnainen ympäristö
STR_2696 :Aseta puita
@ -3223,7 +3223,7 @@ STR_3207 :Roller Coaster Designer
STR_3208 :Track Designs Manager
STR_3209 :Takaisin edelliseen vaiheeseen:
STR_3210 :Siirry seuraavaan vaiheeseen:
STR_3211 :{WINDOW_COLOUR_2}Kartan koko:
STR_3211 :Kartan koko:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Karttaa ei voi enempää pienentää
STR_3214 :Karttaa ei voi enempää suurentaa

View File

@ -1,4 +1,4 @@
# STR_XXXX part is read and XXXX becomes the string id number.
# STR_XXXX part is read and XXXX becomes the string id number.
# Everything after the colon and before the new line will be saved as the string.
# Use # at the beginning of a line to leave a comment.
STR_0000 :
@ -1067,7 +1067,7 @@ STR_1060 :Nom d'attraction invalide
STR_1061 :Mode normal
STR_1062 :Mode circuit continu
STR_1063 :Mode navette départ marche arrière
STR_1064 :Lancement à autopropulsion
STR_1064 :Lancement à autopropulsion (sans arrêt en station)
STR_1065 :Mode navette
STR_1066 :Mode location bateaux
STR_1067 :Lancement vers le haut
@ -1099,7 +1099,7 @@ STR_1092 :Lancement vers le bas
STR_1093 :Mode maison biscornue
STR_1094 :Mode chute libre
STR_1095 :Mode blocs de voie sur circuit continu
STR_1096 :Lancement à autopropulsion
STR_1096 :Lancement à autopropulsion (avec arrêt en station)
STR_1097 :Mode blocs de voie avec lancement à autopropulsion
STR_1098 :Se déplace au bout de {POP16}{STRINGID}
STR_1099 :Attend des passagers à {POP16}{STRINGID}
@ -2692,14 +2692,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}Un grand groupe de visiteurs arrive
STR_2685 :Paramètres de bruit Simplex
STR_2686 :{WINDOW_COLOUR_2}Graves :
STR_2687 :{WINDOW_COLOUR_2}Aigus :
STR_2688 :{WINDOW_COLOUR_2}Fréquence de base :
STR_2689 :{WINDOW_COLOUR_2}Octaves :
STR_2686 :Graves :
STR_2687 :Aigus :
STR_2688 :Fréquence de base :
STR_2689 :Octaves :
STR_2690 :Génération de carte
STR_2691 :{WINDOW_COLOUR_2}Hauteur de base :
STR_2692 :{WINDOW_COLOUR_2}Niveau de l'eau :
STR_2693 :{WINDOW_COLOUR_2}Terrain :
STR_2691 :Hauteur de base :
STR_2692 :Niveau de l'eau :
STR_2693 :Terrain :
STR_2694 :Générer
STR_2695 :Terrain aléatoire
STR_2696 :Placer les arbres
@ -2749,7 +2749,7 @@ STR_2739 :Aucun
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat introuvable
STR_2743 :Renommez et déplacez data\css17.dat depuis votre dossier RCT1 en data\css50.dat dans votre dossier RCT2
STR_2743 :Copiez data\css17.dat depuis votre installation de RCT1 en data\css50.dat dans celui de RCT2, ou vérifiez que le chemin vers l'installation de RCT1 dans les options diverses est défini correctement.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -2789,7 +2789,7 @@ STR_2778 :{RIGHTGUILLEMET}{MOVE_X}{SMALLFONT}{STRING}
# End of new strings
STR_2779 :Vue #{COMMA16}
STR_2780 :Vue supplémentaire
STR_2781 :{STRINGID}:{MOVE_X}{195}{STRINGID}
STR_2781 :{STRINGID}:{MOVE_X}{255}{STRINGID}
STR_2782 :SHIFT +
STR_2783 :CTRL +
STR_2784 :Modifier raccourci clavier
@ -3219,7 +3219,7 @@ STR_3207 :Concepteur de montagnes russes
STR_3208 :Gestionnaire de voies
STR_3209 :Retour étape précédente :
STR_3210 :Passer à l'étape suivante :
STR_3211 :{WINDOW_COLOUR_2}Taille carte :
STR_3211 :Taille carte :
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Impossible de diminuer davantage la taille de la carte
STR_3214 :Impossible d'augmenter davantage la taille de le carte
@ -4145,7 +4145,7 @@ STR_5832 :{SMALLFONT}{BLACK}Affiche les hauteurs comme des unités génériqu
STR_5833 :{SMALLFONT}{BLACK}Change le format de date utilisé
STR_5834 :{SMALLFONT}{BLACK}Sélectionne le périphérique audio que doit utiliser OpenRCT2
STR_5835 :{SMALLFONT}{BLACK}Coupe le son du jeu si la fenêtre passe à l'arrière-plan
STR_5836 :{SMALLFONT}{BLACK}Sélectionne la musique du menu principal.{NEWLINE}La musique RCT1 nécessite que vous copiiez et renommiez le fichier {OPENQUOTES}data/css17.dat{ENDQUOTES} de votre dossier RCT1 en {OPENQUOTES}data/css50.dat{ENDQUOTES} dans votre dossier RCT2
STR_5836 :{SMALLFONT}{BLACK}Sélectionne la musique du menu principal.{NEWLINE}La musique RCT1 nécessite que vous copiez et renommiez le fichier {OPENQUOTES}data/css17.dat{ENDQUOTES} de votre dossier RCT1 en {OPENQUOTES}data/css50.dat{ENDQUOTES} dans votre dossier RCT2, ou que vous ayez défini le chemin d'installation de RCT1 dans les options diverses.
STR_5837 :{SMALLFONT}{BLACK}Créer et gérer des thèmes d'interface personnalisés
STR_5838 :{SMALLFONT}{BLACK}Affiche un bouton séparé pour les options financières dans la barre d'outils
STR_5839 :{SMALLFONT}{BLACK}Affiche un bouton séparé pour la recherche et développement dans la barre d'outils
@ -4300,8 +4300,56 @@ STR_5987 :Impossible de créer le dossier
STR_5988 :{SMALLFONT}{BLACK}Plus de terrain à vendre
STR_5989 :{SMALLFONT}{BLACK}Plus de droits de construction à vendre
STR_5990 :{SMALLFONT}{BLACK}Plus de terrain ou de droits de construction à vendre
STR_5991 :Impossible de coller cet (ces) élément(s)...
STR_5992 :La limite des éléments de la carte a été atteinte
STR_5993 :{SMALLFONT}{BLACK}Copier élément(s) sélectionné(s)
STR_5994 :{SMALLFONT}{BLACK}Coller élément(s) copié(s)
STR_5995 :Turbo
STR_5996 :Vitesse du turbo
STR_5997 :Ajouter/définir argent
STR_5998 :Ajouter argent
STR_5999 :Définir argent
STR_6000 :Entrez une nouvelle valeur
STR_6001 :Activer effets de lumières (expérimental)
STR_6002 :{SMALLFONT}{BLACK}Les lampes et attractions seront éclairées durant la nuit.{NEWLINE}Nécessite l'utilisation du moteur de rendu matériel.
STR_6003 :Vue en coupe
STR_6004 :Vue en coupe
STR_6005 :Active la vue en coupe
STR_6006 :{SMALLFONT}{BLACK}La vue en coupe affiche les éléments de la carte qui sont à la hauteur de coupe et en dessous.
STR_6007 :Hauteur de coupe
STR_6008 :{SMALLFONT}{BLACK}Cliquez pour permutter entre valeur explicite<->valeur mesurée
STR_6009 :{SMALLFONT}{BLACK}Sélectionnez hauteur de coupe
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Les visiteurs paieront que le ticket pour entrer dans le parc et les services.{NEWLINE}Les tickets pour les attractions sont gratuits.
STR_6014 :{SMALLFONT}{BLACK}Les visiteurs paieront que les tickets pour entrer dans les attractions et les services.{NEWLINE}L'entrée du parc est gratuite.
STR_6015 :Inclinée
STR_6016 :Modifier carré
STR_6017 :Merci de ralentir un peu
STR_6018 :Construction de manège - Tourner à gauche
STR_6019 :Construction de manège - Tourner à droite
STR_6020 :Construction de manège - Utiliser la voie par défaut
STR_6021 :Construction de manège - Pente descendante
STR_6022 :Construction de manège - Pente ascendante
STR_6023 :Construction de manège - Activer/Désactiver le mécanisme de remontée
STR_6024 :Construction de manège - Bord gauche
STR_6025 :Construction de manège - Bord droit
STR_6026 :Construction de manège - Piste précédente
STR_6027 :Construction de manège - Piste suivante
STR_6028 :Construction de manège - Construire lactuel
STR_6029 :Construction de manège - Démolir lactuel
STR_6030 :{SMALLFONT}{BLACK}Sélectionneur de décor. Cliquez sur un décor sur la carte afin de sélectionner la même pièce pour construction
STR_6031 :Description du serveur:
STR_6032 :Message de bienvenue du serveur:
STR_6033 :Chemin vers l'installation de RCT1:
STR_6035 :Veuillez choisir votre installation de RCT1
STR_6036 :{SMALLFONT}{BLACK}Vider
STR_6037 :Veuillez choisir une installation valide de RCT1
STR_6038 :{SMALLFONT}{BLACK}Si vous avez une installation de RCT1, définissez cette option pour pouvoir charger les scénarios, musiques...
STR_6039 :{SMALLFONT}{BLACK}Démolir le manège rapidement.
STR_6040 :Modifier les options de scénario.
STR_6041 :{BLACK}Pas de mécanicien à embaucher !
#############
# Scenarios #

View File

@ -2692,14 +2692,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}Arriva un largo numero di visitatori
STR_2685 :Simplex Noise Parameters
STR_2686 :{WINDOW_COLOUR_2}Basso:
STR_2687 :{WINDOW_COLOUR_2}Alto:
STR_2688 :{WINDOW_COLOUR_2}Base Frequency:
STR_2689 :{WINDOW_COLOUR_2}Ottavi:
STR_2686 :Basso:
STR_2687 :Alto:
STR_2688 :Base Frequency:
STR_2689 :Ottavi:
STR_2690 :Generazione Mappa
STR_2691 :{WINDOW_COLOUR_2}Base height:
STR_2692 :{WINDOW_COLOUR_2}Livello acqua:
STR_2693 :{WINDOW_COLOUR_2}Terreno:
STR_2691 :Base height:
STR_2692 :Livello acqua:
STR_2693 :Terreno:
STR_2694 :Genera
STR_2695 :Terreno casuale
STR_2696 :Colloca alberi
@ -2749,7 +2749,7 @@ STR_2739 :Nessuno
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat not found
STR_2743 :Copy data\css17.dat from your RCT1 installation to data\css50.dat in your RCT2 installation.
STR_2743 :Copiare 'data/css17.dat' dalla cartella di installazione di RCT1 come 'data/css50.dat' nella cartella di RCT2, oppure impostare il percorso di installazione di RCT1 nella scheda "Altro".
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3218,7 +3218,7 @@ STR_3207 :Progettista di ottovolanti
STR_3208 :Responsabile dei progetti di tracciato
STR_3209 :Torna un passo indietro:
STR_3210 :Vai un passo avanti:
STR_3211 :{WINDOW_COLOUR_2}Dimens. mappa:
STR_3211 :Dimens. mappa:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Impossibile rimpicciolire ulteriormente la mappa
STR_3214 :Impossibile ingrandire ulteriormente la mappa
@ -3494,7 +3494,7 @@ STR_5151 :.
#Decimal separator
STR_5152 :,
STR_5153 :Modifica temi...
STR_5154 :Visualizzazione hardware
STR_5154 :Rendering hardware
STR_5155 :Permetti di testare percorsi non finiti
STR_5156 :{SMALLFONT}{BLACK}Permette di effettuare il test della maggior parte dei percorsi anche quando il percorso non è un circuito completo, non si applica alla modalità sezioni a blocchi
STR_5157 :Sblocca tutti i prezzi
@ -3655,8 +3655,8 @@ STR_5309 :OpenRCT2
STR_5310 :Casuale
STR_5311 :{SMALLFONT}{BLACK}Strumenti di debug
STR_5312 :Mostra console
STR_5313 :Show tile inspector
STR_5314 :Tile inspector
STR_5313 :Mostra analizzatore cella
STR_5314 :Analizzatore cella
STR_5315 :Erba
STR_5316 :Sabbia
STR_5317 :Sporco
@ -4037,8 +4037,8 @@ STR_5724 :Temporale
STR_5725 :{BLACK}Forza clima:
STR_5726 :{SMALLFONT}{BLACK}Imposta il clima attuale nel parco
STR_5727 :Qualità scala
STR_5728 :Richiede la visualizzazione hardware
STR_5729 :{SMALLFONT}{BLACK}Richiede la visualizzazione hardware
STR_5728 :Richiede il rendering hardware
STR_5729 :{SMALLFONT}{BLACK}Richiede il rendering hardware
STR_5730 :Nearest Neighbour
STR_5731 :Lineare
STR_5732 :Anisotropico
@ -4128,9 +4128,9 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
#tooltips
STR_5815 :{SMALLFONT}{BLACK}Mostra il contatore FPS mentre si gioca
STR_5816 :{SMALLFONT}{BLACK}Imposta il rapporto a cui il gioco viene scalato.{NEWLINE}Utile quando si gioca ad alte risoluzioni
STR_5817 :{SMALLFONT}{BLACK}[Richiede display hardware]{NEWLINE}Imposta il tipo di scalatura della grafica
STR_5818 :{SMALLFONT}{BLACK}[Richiede display hardware]{NEWLINE}Usa la scalatura Nearest Neighbour{NEWLINE}quando il rapporto di scalatura{NEWLINE}è impostato a valori interi (1, 2, 3...)
STR_5819 :{SMALLFONT}{BLACK}[Richiede display hardware]{NEWLINE}Mette in pausa il gioco{NEWLINE}se l'overlay di Steam è aperto
STR_5817 :{SMALLFONT}{BLACK}[Richiede rendering hardware]{NEWLINE}Imposta il tipo di scalatura della grafica
STR_5818 :{SMALLFONT}{BLACK}[Richiede rendering hardware]{NEWLINE}Usa la scalatura Nearest Neighbour{NEWLINE}quando il rapporto di scalatura{NEWLINE}è impostato a valori interi (1, 2, 3...)
STR_5819 :{SMALLFONT}{BLACK}[Richiede rendering hardware]{NEWLINE}Mette in pausa il gioco{NEWLINE}se l'overlay di Steam è aperto
STR_5820 :{SMALLFONT}{BLACK}Riduce a icona il gioco{NEWLINE}se il focus viene perso in modalità schermo intero
STR_5821 :{SMALLFONT}{BLACK}Cambia il colore dell'indicatore di costruzione{NEWLINE}di attrazioni, sentieri, chioschi, scenario...
STR_5822 :{SMALLFONT}{BLACK}Alterna tra giorno e notte.{NEWLINE}Un ciclo dura un mese di gioco.
@ -4147,7 +4147,7 @@ STR_5832 :{SMALLFONT}{BLACK}Mostra l'altezza in unità generiche invece del f
STR_5833 :{SMALLFONT}{BLACK}Cambia il formato della data utilizzato
STR_5834 :{SMALLFONT}{BLACK}Seleziona il dispositivo audio utilizzato da OpenRCT2
STR_5835 :{SMALLFONT}{BLACK}Disattiva l'audio del gioco se la finestra perde il focus
STR_5836 :{SMALLFONT}{BLACK}Imposta la musica da utilizzare nel menù principale.{NEWLINE}Selezionando RCT1 sarà necessario copiare il file {OPENQUOTES}data/css17.dat{ENDQUOTES} dalla cartella di RCT1 a {OPENQUOTES}data/css50.dat{ENDQUOTES} nella cartella di RCT2.
STR_5836 :{SMALLFONT}{BLACK}Imposta la musica da utilizzare nel menù principale.{NEWLINE}Selezionando RCT1 sarà necessario copiare il file 'data/css17.dat' dalla cartella di RCT1 a 'data/css50.dat' nella cartella di RCT2, oppure impostare il percorso di RCT1 nella scheda "Altro".
STR_5837 :{SMALLFONT}{BLACK}Crea e gestisci i temi dell'interfaccia
STR_5838 :{SMALLFONT}{BLACK}Mostra un pulsante differente per le finanze nella barra degli strumenti
STR_5839 :{SMALLFONT}{BLACK}Mostra un pulsante differente per le ricerche e sviluppo nella barra degli strumenti
@ -4189,7 +4189,7 @@ STR_5874 :{SMALLFONT}{BLACK}Permette di rendere qualsiasi pezzo del tracciato
STR_5875 :Motore di rendering:
STR_5876 :{SMALLFONT}{BLACK}Il motore grafico usato per mostrare la grafica del gioco.
STR_5877 :Software
STR_5878 :Software (display hardware)
STR_5878 :Software (rendering hardware)
STR_5879 :OpenGL (sperimentale)
STR_5880 :Solo selezionati
STR_5881 :Solo non selezionati
@ -4313,8 +4313,60 @@ STR_5997 :Aggiungi/imposta denaro
STR_5998 :Aggiungi denaro
STR_5999 :Imposta denaro
STR_6000 :Inserire il nuovo valore
STR_6001 :Attiva effetti luce (sperimentale)
STR_6002 :{SMALLFONT}{BLACK}Le attrazioni e i lampioni saranno illuminati di notte.{NEWLINE}Richiede il motore di rendering hardware.
STR_6003 :Vista sezionata
STR_6004 :Vista sezionata
STR_6005 :Attiva la vista sezionata
STR_6006 :{SMALLFONT}{BLACK}La vista sezionata mostra solo elementi della mappa pari o inferiori all'altezza specificata
STR_6007 :Altezza sezionamento
STR_6008 :{SMALLFONT}{BLACK}Cliccare per cambiare tra valore grezzo e unità di misura
STR_6009 :{SMALLFONT}{BLACK}Selezionare altezza sezionamento
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}I visitatori pagheranno solo l'accesso al parco e i servizi.{NEWLINE}L'ingresso nelle attrazioni è gratis.
STR_6014 :{SMALLFONT}{BLACK}I visitatori pagheranno solo l'ingresso nelle attrazioni.{NEWLINE}L'ingresso al parco è gratis.
STR_6015 :Inclinato
STR_6016 :Modifica cella
STR_6017 :Si prega di rallentare
STR_6018 :Costruzione percorso - Curva a sinistra
STR_6019 :Costruzione percorso - Curva a destra
STR_6020 :Costruzione percorso - Usa tracciato predefinito
STR_6021 :Costruzione percorso - Discesa
STR_6022 :Costruzione percorso - Salita
STR_6023 :Costruzione percorso - Attiva catena di traino
STR_6024 :Costruzione percorso - Inclina a sinistra
STR_6025 :Costruzione percorso - Inclina a destra
STR_6026 :Costruzione percorso - Pezzo precedente
STR_6027 :Costruzione percorso - Pezzo successivo
STR_6028 :Costruzione percorso - Costruisci attuale
STR_6029 :Costruzione percorso - Demolisci attuale
STR_6030 :{SMALLFONT}{BLACK}Contagocce scenario. Fare clic su un qualsiasi elemento dello scenario per attivare la costruzione di quel pezzo.
STR_6031 :Descrizione server:
STR_6032 :Messaggio di benvenuto server:
STR_6033 :Percorso installazione di RCT1:
STR_6035 :Selezionare la cartella di installazione di RCT1
STR_6036 :{SMALLFONT}{BLACK}Pulisci
STR_6037 :Selezionare una cartella di installazione di RCT1 valida
STR_6038 :{SMALLFONT}{BLACK}Se RCT1 è installato, selezionarne la cartella per caricarne gli scenari, la musica, ecc.
STR_6039 :{SMALLFONT}{BLACK}Demolizione veloce percorso
STR_6040 :Modifica opzioni scenario
STR_6041 :{BLACK}Non è stato assunto alcun meccanico!
STR_6042 :Carica heightmap
STR_6043 :Seleziona heightmap
STR_6044 :Ammorbidisci heightmap
STR_6045 :Forza
STR_6046 :Normalizza heightmap
STR_6047 :Ammorbidisci celle
STR_6048 :Errore nella heightmap
STR_6049 :Errore nella lettura del PNG
STR_6050 :Errore nella lettura della bitmap
STR_6051 :Larghezza e altezza devono corrispondere
STR_6052 :La heightmap è troppo grande e sarà tagliata
STR_6053 :La heightmap non può essere normalizzata
STR_6054 :Sono supportate solo le bitmap a 24 bit
STR_6055 :File di heightmap di OpenRCT2
#############

View File

@ -2692,14 +2692,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}Large group of peeps arrive
STR_2685 :Simplex Noise Parameters
STR_2686 :{WINDOW_COLOUR_2}Low:
STR_2687 :{WINDOW_COLOUR_2}High:
STR_2688 :{WINDOW_COLOUR_2}Base Frequency:
STR_2689 :{WINDOW_COLOUR_2}Octaves:
STR_2686 :Low:
STR_2687 :High:
STR_2688 :Base Frequency:
STR_2689 :Octaves:
STR_2690 :Map Generation
STR_2691 :{WINDOW_COLOUR_2}Base height:
STR_2692 :{WINDOW_COLOUR_2}Water level:
STR_2693 :{WINDOW_COLOUR_2}Terrain:
STR_2691 :Base height:
STR_2692 :Water level:
STR_2693 :Terrain:
STR_2694 :Generate
STR_2695 :Random terrain
STR_2696 :Place trees
@ -3218,7 +3218,7 @@ STR_3207 :Roller Coaster Designer
STR_3208 :Track Designs Manager
STR_3209 :Back to Previous Step:
STR_3210 :Forward to Next Step:
STR_3211 :{WINDOW_COLOUR_2}Map size:
STR_3211 :Map size:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Can't decrease map size any further
STR_3214 :Can't increase map size any further

View File

@ -1656,7 +1656,7 @@ STR_1650 :{SMALLFONT}{OPENQUOTES}와우! 새 놀이기구가 지어지고 있
# Two removed inside jokes about Intamin and Phoenix
STR_1651 :<removed string - do not use>
STR_1652 :<removed string - do not use>
STR_1653 :{SMALLFONT}{OPENQUOTES}...그리고 드디어 {STRINGID}에 왔어요!{ENDQUOTES}
STR_1653 :{SMALLFONT}{OPENQUOTES}...마침내 {STRINGID}에 탔어요!{ENDQUOTES}
STR_1654 :{WINDOW_COLOUR_2}최근 생각:
STR_1655 :{SMALLFONT}{BLACK}땅 위에 보도 건설
STR_1656 :{SMALLFONT}{BLACK}다리나 터널 보도를 건설
@ -1832,7 +1832,7 @@ STR_1825 :{SMALLFONT}{BLACK}이 놀이기구/시설에서 기다리고 있는
STR_1826 :상태
STR_1827 :인기도
STR_1828 :만족도
STR_1829 :
STR_1829 :
STR_1830 :대기 길이
STR_1831 :대기 시간
STR_1832 :신뢰도
@ -1844,7 +1844,7 @@ STR_1837 :만족도: 알 수 없움
STR_1838 :만족도: {COMMA16}%
STR_1839 :신뢰도: {COMMA16}%
STR_1840 :고장률: {COMMA16}%
STR_1841 :익: 시간당 {CURRENCY2DP}
STR_1841 :익: 시간당 {CURRENCY2DP}
STR_1842 :좋아하는 손님 수: {COMMA16}명
STR_1843 :좋아하는 손님 수: {COMMA16}명
STR_1844 :{SMALLFONT}{BLACK}놀이기구/시설 목록에서 보여줄 정보를 선택하세요
@ -2297,7 +2297,7 @@ STR_2288 :알 수 없음
STR_2289 :{STRINGID} {STRINGID}
STR_2290 :{SMALLFONT}{BLACK}{STRINGID} {STRINGID}
STR_2291 :새 게임을 시작할 시나리오를 선택하세요
STR_2292 :{WINDOW_COLOUR_2}Rides been on:
STR_2292 :{WINDOW_COLOUR_2}탑승했던 놀이기구:
STR_2293 :{BLACK} 없음
STR_2294 :{SMALLFONT}{BLACK}땅 표면 모양을 변경합니다
STR_2295 :{SMALLFONT}{BLACK}땅의 벽 모양을 변경합니다
@ -2692,14 +2692,14 @@ STR_2682 :
STR_2683 :
STR_2684 :{SMALLFONT}{BLACK}손님 대규모로 불러오기
STR_2685 :단일 노이즈 매개 변수
STR_2686 :{WINDOW_COLOUR_2}저:
STR_2687 :{WINDOW_COLOUR_2}고:
STR_2688 :{WINDOW_COLOUR_2}기본 주파수:
STR_2689 :{WINDOW_COLOUR_2}옥타브:
STR_2686 :저:
STR_2687 :고:
STR_2688 :기본 주파수:
STR_2689 :옥타브:
STR_2690 :지도 생성
STR_2691 :{WINDOW_COLOUR_2}기본 높이:
STR_2692 :{WINDOW_COLOUR_2}수면 높이:
STR_2693 :{WINDOW_COLOUR_2}지형:
STR_2691 :기본 높이:
STR_2692 :수면 높이:
STR_2693 :지형:
STR_2694 :생성
STR_2695 :무작위 지형
STR_2696 :나무 심기
@ -2724,8 +2724,8 @@ STR_2714 :-
STR_2715 :.
STR_2716 :/
STR_2717 :'
STR_2718 :(상위 폴더)
STR_2719 :(새 파일)
STR_2718 :상위 폴더
STR_2719 :새 파일
STR_2720 :{UINT16}초
STR_2721 :{UINT16}초
STR_2722 :{UINT16}분 {UINT16}초
@ -2749,7 +2749,7 @@ STR_2739 :없음
STR_2740 :롤러코스터 타이쿤 1
STR_2741 :롤러코스터 타이쿤 2
STR_2742 :css50.dat 파일을 찾을 수 없습니다
STR_2743 :data\css17.dat 파일을 RCT1 설치 폴더에서 복사하여 RCT2가 설치된 폴더 안에 data\css50.dat 이름으로 바꾸어 넣으십시오.
STR_2743 :'data/css17.dat' 파일을 RCT1 설치 폴더에서 복사하여 RCT2가 설치된 폴더 안에 'data/css50.dat' 이름으로 바꾸어 넣거나, 기타 탭에서 RCT1의 경로를 올바르게 지정하세요.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3219,7 +3219,7 @@ STR_3207 :롤러코스터 디자이너
STR_3208 :트랙 디자인 매니저
STR_3209 :이전 단계로:
STR_3210 :다음 단계로:
STR_3211 :{WINDOW_COLOUR_2}지도 크기:
STR_3211 :지도 크기:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :더 이상 맵 크기를 줄일 수 없습니다
STR_3214 :더 이상 맵 크기를 늘일 수 없습니다
@ -4142,7 +4142,7 @@ STR_5832 :{SMALLFONT}{BLACK}높이를 "거리 및 속력"에 설정된 거리
STR_5833 :{SMALLFONT}{BLACK}사용할 날짜 형식을 설정합니다.
STR_5834 :{SMALLFONT}{BLACK}OpenRCT2가 사용할 오디오 장치를 선택합니다.
STR_5835 :{SMALLFONT}{BLACK}게임 밖으로 커서가 나가면 게임에서 소리가 나지 않도록 만듭니다.
STR_5836 :{SMALLFONT}{BLACK}첫 화면에서 사용할 음악을 선택합니다.{NEWLINE}RCT1 테마를 선택할 경우, RCT1 게임 폴더의 'data/css17.dat' 파일을 복사해서 RCT2 폴더에 'data/css50.dat'라는 이름으로 저장해두야 합니다.
STR_5836 :{SMALLFONT}{BLACK}첫 화면에서 사용할 음악을 선택합니다.{NEWLINE}RCT1 테마를 선택할 경우, RCT1 게임 폴더의 'data/css17.dat' 파일을 복사해서 RCT2 폴더에 'data/css50.dat'라는 이름으로 저장해두거나, 기타 탭에서 RCT1의 경로를 지정해야 합니다.
STR_5837 :{SMALLFONT}{BLACK}사용자 UI 테마를 생성하고 관리합니다.
STR_5838 :{SMALLFONT}{BLACK}메인 메뉴에 재정 창을 위한 별도의 버튼을 표시합니다.
STR_5839 :{SMALLFONT}{BLACK}메인 매뉴에 연구 및 개발 창을 위한 별도의 버튼을 표시합니다.
@ -4251,7 +4251,7 @@ STR_5941 :{WINDOW_COLOUR_2}기본 높이:
STR_5942 :{WINDOW_COLOUR_2}공원 이름: {BLACK}{STRINGID}
STR_5943 :{WINDOW_COLOUR_2}추가: {BLACK}{STRINGID}
STR_5944 :{WINDOW_COLOUR_2}추가: {BLACK}없음
STR_5945 :{WINDOW_COLOUR_2}연결된 모서리:
STR_5945 :{WINDOW_COLOUR_2}연결된 :
STR_5946 :{WINDOW_COLOUR_2}놀이기구 종류: {BLACK}{STRINGID}
STR_5947 :{WINDOW_COLOUR_2}놀이기구 ID: {BLACK}{COMMA16}
STR_5948 :{WINDOW_COLOUR_2}놀이기구 이름: {BLACK}{STRINGID}
@ -4269,7 +4269,7 @@ STR_5959 :남동
STR_5960 :{WINDOW_COLOUR_2}1/4칸 위치:
STR_5961 :{WINDOW_COLOUR_2}엔트리 인덱스: {BLACK}{COMMA16}
STR_5962 :{WINDOW_COLOUR_2}겹침 탐지:
STR_5963 :{WINDOW_COLOUR_2}올라간 코너:
STR_5963 :{WINDOW_COLOUR_2}올라간 구석:
STR_5964 :{WINDOW_COLOUR_2}대각선
STR_5965 :{WINDOW_COLOUR_2}입구 종류: {BLACK}{STRINGID}
STR_5966 :{WINDOW_COLOUR_2}공원 입구 조각: {BLACK}{STRINGID}
@ -4319,6 +4319,51 @@ STR_6009 :{SMALLFONT}{BLACK}절단할 높이를 선택하세요.
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}손님들이 공원 입장료와 상점/매점에만 돈을 지불합니다.{NEWLINE}놀이기구 탑승료는 무료로 고정됩니다.
STR_6014 :{SMALLFONT}{BLACK}손님들이 놀이기구 탑승료와 상점/매점에만 돈을 지불합니다.{NEWLINE}공원 입장료로 돈을 지불하지는 않습니다.
STR_6015 :경사짐
STR_6016 :칸 편집
STR_6017 :천천히 하세요
STR_6018 :놀이기구 건설 - 왼쪽 회전
STR_6019 :놀이기구 건설 - 오른쪽 회전
STR_6020 :놀이기구 건설 - 기본 트랙 사용
STR_6021 :놀이기구 건설 - 하강
STR_6022 :놀이기구 건설 - 상승
STR_6023 :놀이기구 건설 - 체인 리프트 켜기/끄기
STR_6024 :놀이기구 건설 - 왼쪽 뱅크
STR_6025 :놀이기구 건설 - 오른쪽 뱅크
STR_6026 :놀이기구 건설 - 이전 트랙
STR_6027 :놀이기구 건설 - 다음 트랙
STR_6028 :놀이기구 건설 - 선택한 트랙 건설
STR_6029 :놀이기구 건설 - 선택한 트랙 제거
STR_6030 :{SMALLFONT}{BLACK}오브젝트 스포이드 기능입니다. 지도 상의 오브젝트를 선택하면 그 오브젝트를 골라서 설치할 수 있습니다.
STR_6031 :서버 설명:
STR_6032 :서버 인사말:
STR_6033 :RCT1 설치 경로:
STR_6035 :RCT1이 설치된 폴더를 선택하세요
STR_6036 :{SMALLFONT}{BLACK}초기화
STR_6037 :RCT1이 설치된 폴더를 올바르게 선택해주세요
STR_6038 :{SMALLFONT}{BLACK}RCT1을 설치했다면, 이 설정을 이용해서 시나리오나 음악 등을 불러오기 위해 RCT1이 설치된 폴더를 지정하세요.
STR_6039 :{SMALLFONT}{BLACK}빠른 놀이기구 파괴
STR_6040 :시나리오 설정 편집
STR_6041 :{BLACK}고용된 정비기술자가 없습니다!
STR_6042 :높이맵 불러오기
STR_6043 :높이맵 선택하기
STR_6044 :높이맵 부드럽게
STR_6045 :강도
STR_6046 :높이맵 정규화
STR_6047 :칸을 부드럽게
STR_6048 :높이맵 오류
STR_6049 :PNG 읽어오기 오류
STR_6050 :비트맵 읽어오기 오류
STR_6051 :이미지의 가로와 세로 길이가 일치해야 합니다
STR_6052 :높이맵이 너무 커서 일부가 잘릴 것입니다.
STR_6053 :높이맵을 정규화할 수 없습니다
STR_6054 :24비트 비트맵만 지원합니다
STR_6055 :OpenRCT2 높이맵
STR_6056 :{SMALLFONT}{BLACK}음소거
STR_6057 :{SMALLFONT}{BLACK}메인 메뉴에 음소거를 설정할 수 있는 별도의 버튼을 표시합니다.
STR_6058 :음소거
#############
# Scenarios #
@ -4752,7 +4797,7 @@ STR_DTLS :
<Blackpool Pleasure Beach>
STR_SCNR :Blackpool Pleasure Beach
STR_PARK :블랙풀 플레 비치
STR_PARK :블랙풀 플레 비치
STR_DTLS :
## Misc parks from RCT1
@ -4981,7 +5026,7 @@ STR_DESC :탑승객에게 정말로 나는 듯한 경험을 주기 위해,
STR_CPTY :차량당 4명의 승객
[BMFL]
STR_NAME :플로어리스 롤러 코스터
STR_NAME :플로어리스 롤러코스터
STR_DESC :꼬여있는 트랙과 여러 전이를 미끄러지듯 통과하면서 승객들에게 광활한 허공을 느끼게 해주는, 바닥이 없는 넓은 롤러코스터 차량
STR_CPTY :차량당 4명의 승객
@ -5242,7 +5287,7 @@ STR_CPTY :승객 12명
[SIMPOD]
STR_NAME :모션 시뮬레이터
STR_DESC :수압식 관절에 의해 흔들리고 움직이는 모션 시뮬레이터 안에서 영화를 보는 놀이기구
STR_DESC :유압식 관절에 의해 흔들리며 움직이는 모션 시뮬레이터 안에서 영화를 보는 놀이기구
STR_CPTY :승객 8명
[SSC1]
@ -7324,7 +7369,7 @@ STR_CPTY :차량당 4명의 승객
[CONDORRD]
STR_NAME :콘도르 라이드
STR_DESC :하나의 레일로 이루어진 트랙에 매달린 콘도르 모양의 차량에 얼굴을 아래로 한 자세로 타고 코너를 돌 때마다 이리 저리 자유롭게 흔들리는 차량
STR_CPTY :차량당 승객 1
STR_CPTY :차량당 승객 4
[CONGAEEL]
STR_NAME :콩가 뱀장어 코스터

View File

@ -941,7 +941,7 @@ STR_0935 :Utgang i veien
STR_0936 :Parkinngang i veien
STR_0937 :{SMALLFONT}{BLACK}Innstillinger
STR_0938 :{SMALLFONT}{BLACK}Endre bakkehøyde og helning
STR_0939 :Undergrunns-/innendørssyn
STR_0939 :Undergrunns-/innendørskamera
STR_0940 :Skjul bakken
STR_0941 :Skjul vertikale flater
STR_0942 :Gjennomsiktige attraksjoner
@ -1157,7 +1157,7 @@ STR_1151 :Fullt
STR_1152 :Minst én person
STR_1153 :Høydemerker på attraksjonsspor
STR_1154 :Høydemerker på land
STR_1155 :Høydemerker på gangveier
STR_1155 :Høydemerker på gangstier
STR_1156 :{MOVE_X}{SMALLFONT}{STRINGID}
STR_1157 :{TICK}{MOVE_X}{SMALLFONT}{STRINGID}
STR_1158 :Kan ikke fjerne denne...
@ -1175,15 +1175,15 @@ STR_1169 :(Ingenting)
STR_1170 :{STRING}
STR_1171 :{RED}Stengt - -
STR_1172 :{YELLOW}{STRINGID} - -
STR_1173 :{SMALLFONT}{BLACK}Bygg gangveier og køer
STR_1173 :{SMALLFONT}{BLACK}Bygg gangstier og køer
STR_1174 :Skilt i veien
STR_1175 :Kan ikke bygges på hellende gangvei
STR_1176 :Kan ikke bygge gangvei her...
STR_1177 :Kan ikke fjerne gangvei herfra...
STR_1175 :Kan ikke bygges på hellende gangsti
STR_1176 :Kan ikke bygge gangsti her...
STR_1177 :Kan ikke fjerne gangsti herfra...
STR_1178 :Upassende bakkehelning
STR_1179 :Gangvei i veien
STR_1179 :Gangsti i veien
STR_1180 :Kan ikke bygges under vann!
STR_1181 :Gangveier
STR_1181 :Gangstier
STR_1182 :Type
STR_1183 :Retning
STR_1184 :Helning
@ -1191,8 +1191,8 @@ STR_1185 :{SMALLFONT}{BLACK}Retning
STR_1186 :{SMALLFONT}{BLACK}Helning nedover
STR_1187 :{SMALLFONT}{BLACK}Nivå
STR_1188 :{SMALLFONT}{BLACK}Helning oppover
STR_1189 :{SMALLFONT}{BLACK}Bygg valgt gangveisseksjon
STR_1190 :{SMALLFONT}{BLACK}Fjern forrige gangveisseksjon
STR_1189 :{SMALLFONT}{BLACK}Bygg valgt gangstiseksjon
STR_1190 :{SMALLFONT}{BLACK}Fjern forrige gangstiseksjon
STR_1191 :{BLACK}{STRINGID}
STR_1192 :{OUTLINE}{RED}{STRINGID}
STR_1193 :{WINDOW_COLOUR_2}{STRINGID}
@ -1367,114 +1367,114 @@ STR_1361 :Kan ikke endre hastighet...
STR_1362 :Kan ikke endre utskytningshastighet...
STR_1363 :For høyt for støttestrukturer!
STR_1364 :Støttestrukturer for bane kan ikke forlenges!
STR_1365 :In-line Twist (venstre)
STR_1366 :In-line Twist (høyre)
STR_1367 :Half Loop
STR_1368 :Half Corkscrew (venstre)
STR_1369 :Half Corkscrew (høyre)
STR_1370 :Barrel Roll (venstre)
STR_1371 :Barrel Roll (høyre)
STR_1372 :Launched Lift Hill
STR_1373 :Large Half Loop (venstre)
STR_1374 :Large Half Loop (høyre)
STR_1375 :Upper Transfer
STR_1376 :Lower Transfer
STR_1377 :Heartline Roll (venstre)
STR_1378 :Heartline Roll (høyre)
STR_1379 :Reverser (venstre)
STR_1380 :Reverser (høyre)
STR_1381 :Curved Lift Hill (venstre)
STR_1382 :Curved Lift Hill (høyre)
STR_1383 :Quarter Loop
STR_1365 :Tvist (venstre)
STR_1366 :Tvist (høyre)
STR_1367 :Halvloop
STR_1368 :Halv korkskrue (venstre)
STR_1369 :Halv korkskrue (høyre)
STR_1370 :Barrel roll (venstre)
STR_1371 :Barrel roll (høyre)
STR_1372 :Utskytningstrekk
STR_1373 :Stor halvloop (venstre)
STR_1374 :Stor halvloop (høyre)
STR_1375 :Øvre viderekobling
STR_1376 :Nedre viderekobling
STR_1377 :Nøytral rull(venstre)
STR_1378 :Nøytral rull(høyre)
STR_1379 :Omvender (venstre)
STR_1380 :Omvender (høyre)
STR_1381 :Kurvetrekk (venstre)
STR_1382 :Kurvetrekk (høyre)
STR_1383 :Kvartloop
STR_1384 :{YELLOW}{STRINGID}
STR_1385 :{SMALLFONT}{BLACK}Other track configurations
STR_1386 :Special...
STR_1387 :Can't change land type...
STR_1385 :{SMALLFONT}{BLACK}Andre banekonfigurasjoner
STR_1386 :Spesial...
STR_1387 :Kan ikke endre landtype...
STR_1388 :{OUTLINE}{GREEN}+ {CURRENCY}
STR_1389 :{OUTLINE}{RED}- {CURRENCY}
STR_1390 :{CURRENCY2DP}
STR_1391 :{RED}{CURRENCY2DP}
STR_1392 :{SMALLFONT}{BLACK}View of ride/attraction
STR_1393 :{SMALLFONT}{BLACK}Vehicle details and options
STR_1394 :{SMALLFONT}{BLACK}Operating options
STR_1395 :{SMALLFONT}{BLACK}Maintenance options
STR_1396 :{SMALLFONT}{BLACK}Colour scheme options
STR_1397 :{SMALLFONT}{BLACK}Sound & music options
STR_1398 :{SMALLFONT}{BLACK}Measurements and test data
STR_1399 :{SMALLFONT}{BLACK}Graphs
STR_1400 :Entrance
STR_1401 :Exit
STR_1402 :{SMALLFONT}{BLACK}Build or move entrance to ride/attraction
STR_1403 :{SMALLFONT}{BLACK}Build or move exit from ride/attraction
STR_1404 :{SMALLFONT}{BLACK}Rotate 90{DEGREE}
STR_1405 :{SMALLFONT}{BLACK}Mirror image
STR_1406 :{SMALLFONT}{BLACK}Toggle scenery on/off (if available for this design)
STR_1407 :{WINDOW_COLOUR_2}Build this...
STR_1408 :{WINDOW_COLOUR_2}Cost: {BLACK}{CURRENCY}
STR_1409 :Entry/Exit Platform
STR_1410 :Vertical Tower
STR_1411 :{STRINGID} in the way
STR_1412 :{WINDOW_COLOUR_3}Data logging not available for this type of ride
STR_1413 :{WINDOW_COLOUR_3}Data logging will start when next {STRINGID} leaves {STRINGID}
STR_1392 :{SMALLFONT}{BLACK}Attraksjonskamera
STR_1393 :{SMALLFONT}{BLACK}Vogndetaljer og -innstillinger
STR_1394 :{SMALLFONT}{BLACK}Operasjonsinnstillinger
STR_1395 :{SMALLFONT}{BLACK}Vedlikeholdsinnstillinger
STR_1396 :{SMALLFONT}{BLACK}Fargeinnstillinger
STR_1397 :{SMALLFONT}{BLACK}Lyd- og musikkinnstillinger
STR_1398 :{SMALLFONT}{BLACK}Målinger og testdata
STR_1399 :{SMALLFONT}{BLACK}Grafer
STR_1400 :Inngang
STR_1401 :Utgang
STR_1402 :{SMALLFONT}{BLACK}Bygg eller flytt attraksjonsinngang
STR_1403 :{SMALLFONT}{BLACK}Bygg eller flytt attraksjonsutgang
STR_1404 :{SMALLFONT}{BLACK}Roter 90{DEGREE}
STR_1405 :{SMALLFONT}{BLACK}Speilbilde
STR_1406 :{SMALLFONT}{BLACK}Vis/skjul pynt (hvis gyldig for dette designet)
STR_1407 :{WINDOW_COLOUR_2}Bygg dette...
STR_1408 :{WINDOW_COLOUR_2}Kost: {BLACK}{CURRENCY}
STR_1409 :Inngangs-/utgangsplatform
STR_1410 :Vertikalt tårn
STR_1411 :{STRINGID} i veien
STR_1412 :{WINDOW_COLOUR_3}Datalogger ikke tilgjengelig for denne typen attraksjon
STR_1413 :{WINDOW_COLOUR_3}Datalogging vil starte når neste {STRINGID} forlater {STRINGID}
STR_1414 :{SMALLFONT}{BLACK}{DURATION}
STR_1415 :{WINDOW_COLOUR_2}Velocity
STR_1416 :{WINDOW_COLOUR_2}Altitude
STR_1415 :{WINDOW_COLOUR_2}Fart
STR_1416 :{WINDOW_COLOUR_2}Høyde
STR_1417 :{WINDOW_COLOUR_2}Vert.G's
STR_1418 :{WINDOW_COLOUR_2}Lat.G's
STR_1419 :{SMALLFONT}{BLACK}{VELOCITY}
STR_1420 :{SMALLFONT}{BLACK}{LENGTH}
STR_1421 :{SMALLFONT}{BLACK}{COMMA16}g
STR_1422 :{SMALLFONT}{BLACK}Logging data from {POP16}{STRINGID}
STR_1423 :{SMALLFONT}{BLACK}Queue line path
STR_1424 :{SMALLFONT}{BLACK}Footpath
STR_1425 :Footpath
STR_1426 :Queue Line
STR_1427 :{WINDOW_COLOUR_2}Customers: {BLACK}{COMMA32} per hour
STR_1428 :{WINDOW_COLOUR_2}Admission price:
STR_1422 :{SMALLFONT}{BLACK}Logger data fra {POP16}{STRINGID}
STR_1423 :{SMALLFONT}{BLACK}Køsti
STR_1424 :{SMALLFONT}{BLACK}Gangsti
STR_1425 :Gangsti
STR_1426 :
STR_1427 :{WINDOW_COLOUR_2}Kunder: {BLACK}{COMMA32} i timen
STR_1428 :{WINDOW_COLOUR_2}Inngangspris:
STR_1429 :{POP16}{POP16}{POP16}{CURRENCY2DP}
STR_1430 :Free
STR_1431 :Walking
STR_1432 :Heading for {STRINGID}
STR_1433 :Queuing for {STRINGID}
STR_1434 :Drowning
STR_1435 :On {STRINGID}
STR_1436 :In {STRINGID}
STR_1437 :At {STRINGID}
STR_1438 :Sitting
STR_1439 :(select location)
STR_1440 :Mowing grass
STR_1441 :Sweeping footpath
STR_1442 :Emptying litter bin
STR_1443 :Watering gardens
STR_1444 :Watching {STRINGID}
STR_1445 :Watching construction of {STRINGID}
STR_1446 :Looking at scenery
STR_1447 :Leaving the park
STR_1448 :Watching new ride being constructed
STR_1430 :Gratis
STR_1431 :Vandrer
STR_1432 :På vei mot {STRINGID}
STR_1433 :I kø for {STRINGID}
STR_1434 :Drukner
STR_1435 : {STRINGID}
STR_1436 :I {STRINGID}
STR_1437 :Ved {STRINGID}
STR_1438 :Sitter
STR_1439 :(velg lokasjon)
STR_1440 :Klipper gress
STR_1441 :Koster gangsti
STR_1442 :Tømmer søppelkasse
STR_1443 :Vanner planter
STR_1444 :Ser på {STRINGID}
STR_1445 :Ser på konstruksjonen av {STRINGID}
STR_1446 :Ser på pynt
STR_1447 :Forlater parken
STR_1448 :Ser på ny attraksjon under konstruksjon
STR_1449 :{SPRITE} {STRINGID}{NEWLINE}({STRINGID})
STR_1450 :{INLINE_SPRITE}{09}{20}{00}{00}{SPRITE} {STRINGID}{NEWLINE}({STRINGID})
STR_1451 :{STRINGID}{NEWLINE}({STRINGID})
STR_1452 :Guest's name
STR_1453 :Enter name for this guest:
STR_1454 :Can't name guest...
STR_1455 :Invalid name for guest
STR_1456 :{WINDOW_COLOUR_2}Cash spent: {BLACK}{CURRENCY2DP}
STR_1457 :{WINDOW_COLOUR_2}Cash in pocket: {BLACK}{CURRENCY2DP}
STR_1458 :{WINDOW_COLOUR_2}Time in park: {BLACK}{REALTIME}
STR_1459 :Track style
STR_1460 :{SMALLFONT}{BLACK}'U' shaped open track
STR_1461 :{SMALLFONT}{BLACK}'O' shaped enclosed track
STR_1462 :Too steep for lift hill
STR_1463 :Guests
STR_1464 :Helix up (small)
STR_1465 :Helix up (large)
STR_1466 :Helix down (small)
STR_1467 :Helix down (large)
STR_1468 :Staff
STR_1469 :Ride must start and end with stations
STR_1470 :Station not long enough
STR_1471 :{WINDOW_COLOUR_2}Speed:
STR_1472 :{SMALLFONT}{BLACK}Speed of this ride
STR_1452 :Gjestens navn
STR_1453 :Skriv inn navn for denne gjesten:
STR_1454 :Kan ikke navngi gjest...
STR_1455 :Ugyldig navn for gjest
STR_1456 :{WINDOW_COLOUR_2}Penger brukt: {BLACK}{CURRENCY2DP}
STR_1457 :{WINDOW_COLOUR_2}Penger i lommen: {BLACK}{CURRENCY2DP}
STR_1458 :{WINDOW_COLOUR_2}Tid i park: {BLACK}{REALTIME}
STR_1459 :Banestil
STR_1460 :{SMALLFONT}{BLACK}Halvsirkelformet åpen bane
STR_1461 :{SMALLFONT}{BLACK}Sirkelformet lukket bane
STR_1462 :For bratt for trekk
STR_1463 :Gjester
STR_1464 :Helix opp (small)
STR_1465 :Helix opp (large)
STR_1466 :Helix ned (small)
STR_1467 :Helix ned (large)
STR_1468 :Ansatte
STR_1469 :Attraksjon må starte og slutte med stasjoner
STR_1470 :Stasjon ikke lang nok
STR_1471 :{WINDOW_COLOUR_2}Fart:
STR_1472 :{SMALLFONT}{BLACK}Attraksjonens fart
STR_1473 :{WINDOW_COLOUR_2}Excitement rating: {BLACK}{COMMA2DP32} ({STRINGID})
STR_1474 :{WINDOW_COLOUR_2}Excitement rating: {BLACK}Not yet available
STR_1475 :{WINDOW_COLOUR_2}Intensity rating: {BLACK}{COMMA2DP32} ({STRINGID})
@ -2690,18 +2690,18 @@ STR_2681 :{MEDIUMFONT}{BLACK}Increases your money by {CURRENCY}
STR_2682 :<removed string - do not use>
STR_2683 :<removed string - do not use>
STR_2684 :{SMALLFONT}{BLACK}Large group of guests arrive
STR_2685 :Simplex Noise Parameters
STR_2686 :{WINDOW_COLOUR_2}Low:
STR_2687 :{WINDOW_COLOUR_2}High:
STR_2688 :{WINDOW_COLOUR_2}Base Frequency:
STR_2689 :{WINDOW_COLOUR_2}Octaves:
STR_2690 :Map Generation
STR_2691 :{WINDOW_COLOUR_2}Base height:
STR_2692 :{WINDOW_COLOUR_2}Water level:
STR_2693 :{WINDOW_COLOUR_2}Terrain:
STR_2694 :Generate
STR_2695 :Random terrain
STR_2696 :Place trees
STR_2685 :Parametere for Simplex-støy
STR_2686 :Lav:
STR_2687 :Høy:
STR_2688 :Basefrekvens:
STR_2689 :Oktavenr:
STR_2690 :Kartgenerering
STR_2691 :Basehøyde:
STR_2692 :Vannhøyde:
STR_2693 :Terreng:
STR_2694 :Generer
STR_2695 :Tilfeldig terreng
STR_2696 :Plasser trær
STR_2697 :???
STR_2698 :???
STR_2699 :???
@ -2748,7 +2748,7 @@ STR_2739 :None
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat not found
STR_2743 :Copy data\css17.dat from your RCT1 installation to data\css50.dat in your RCT2 installation.
STR_2743 :Kopier 'data/css17.dat' fra din RCT1-installasjon til 'data/css50.dat' i din RCT2-installasjon eller sørg for at stien til din RCT1-insallasjon i Diverse-fanen er korrekt.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3218,7 +3218,7 @@ STR_3207 :Roller Coaster Designer
STR_3208 :Track Designs Manager
STR_3209 :Back to Previous Step:
STR_3210 :Forward to Next Step:
STR_3211 :{WINDOW_COLOUR_2}Map size:
STR_3211 :Kartstørrelse:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Can't decrease map size any further
STR_3214 :Can't increase map size any further
@ -3679,8 +3679,8 @@ STR_5337 :Park entrance
STR_5338 :Element type
STR_5339 :{SMALLFONT}{BLACK}Base height
STR_5340 :{SMALLFONT}{BLACK}Clearance height
STR_5341 :Flags
STR_5342 :Choose a map tile
STR_5341 :<removed string - do not use>
STR_5342 :<removed string - do not use>
STR_5343 :Automatically place staff
STR_5344 :Changelog
STR_5345 :Financial cheats
@ -4116,8 +4116,8 @@ STR_5806 :Toggle windowed mode
STR_5807 :{WINDOW_COLOUR_2}Number of rides: {BLACK}{COMMA16}
STR_5808 :{WINDOW_COLOUR_2}Number of shops and stalls: {BLACK}{COMMA16}
STR_5809 :{WINDOW_COLOUR_2}Number of information kiosks and other facilities: {BLACK}{COMMA16}
STR_5810 :Disable train length limit
STR_5811 :{SMALLFONT}{BLACK}If checked, you can have up to{NEWLINE}255 cars per train
STR_5810 :Skru av vognbegrensninger
STR_5811 :{SMALLFONT}{BLACK}Hvis merket kan du ha opp til {NEWLINE}255 vogner per tog, og 31{NEWLINE}tog per attraksjon
STR_5812 :Show multiplayer window
STR_5813 :{OPENQUOTES}{STRING}{ENDQUOTES}
STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
@ -4144,7 +4144,7 @@ STR_5832 :{SMALLFONT}{BLACK}Show height as generic units instead of measureme
STR_5833 :{SMALLFONT}{BLACK}Changes what date format is used
STR_5834 :{SMALLFONT}{BLACK}Select which audio device OpenRCT2 will use
STR_5835 :{SMALLFONT}{BLACK}Mute the game if the window loses focus
STR_5836 :{SMALLFONT}{BLACK}Select music to use on the main menu.{NEWLINE}Selecting RCT1 theme requires that you copy 'data/css17.dat' from your RCT1 game folder to 'data/css50.dat' in your RCT2 folder.
STR_5836 :{SMALLFONT}{BLACK}Velg musikk for hovedmenyen.{NEWLINE}For å velge RCT1-musikk må du kopiere 'data/css17.dat' fra din RCT1-installasjon til 'data/css50.dat' i din RCT2-installasjon eller sett stien til din RCT1-installasjon i Diverse-fanen.
STR_5837 :{SMALLFONT}{BLACK}Create and manage custom UI themes
STR_5838 :{SMALLFONT}{BLACK}Show a separate button for the finance window in the toolbar
STR_5839 :{SMALLFONT}{BLACK}Show a separate button for the research and development window in the toolbar
@ -4168,7 +4168,7 @@ STR_5856 :{SMALLFONT}{BLACK}Set game resolution when in fullscreen mode
STR_5857 :{SMALLFONT}{BLACK}Game options
STR_5858 :{SMALLFONT}{BLACK}Use GPU for displaying instead of CPU. Improves compatibility with screen capture software. May slightly decrease performance.
STR_5859 :{SMALLFONT}{BLACK}Enables frame tweening for visually{NEWLINE}smoother gameplay. When disabled,{NEWLINE}the game will run at 40 FPS.
STR_5860 :Toggle original/decompiled track drawing
STR_5860 :Original/dekompilert banetegning
STR_5861 :Key verification failure.
STR_5862 :Block unknown players.
STR_5863 :{SMALLFONT}{BLACK}Only allow players with known keys to join.
@ -4187,7 +4187,7 @@ STR_5875 :Grafikkmotor
STR_5876 :{SMALLFONT}{BLACK}Motoren som bruker for å tegne spillgrafikk
STR_5877 :Software
STR_5878 :Software (hardware rendering)
STR_5879 :OpenGL (eksperimentell)
STR_5879 :OpenGL (eksperimentelt)
STR_5880 :Valgte objekter
STR_5881 :Ikke valgte objekter
STR_5882 :Egendefinert valuta
@ -4228,8 +4228,140 @@ STR_5916 :{COMMA16} spiller
STR_5917 :{COMMA16} spillere
STR_5918 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COMMA16}
STR_5919 :{COMMA16}
STR_5920 :Vis væreffekter
STR_5921 :{SMALLFONT}{BLACK}Skrur på regn og dystre fargeeffekter i storm.
STR_5922 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{SMALLFONT}{BLACK}Maks {STRINGID}
STR_5923 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{SMALLFONT}{BLACK}Maks {COMMA16} {STRINGID} per tog
STR_5924 :Overflatedetaljer
STR_5925 :Veidetaljer
STR_5926 :Banedetaljer
STR_5927 :Pynt-detaljer
STR_5928 :Inngangsdetaljer
STR_5929 :Gjerdedetaljer
STR_5930 :Stor pynt-detaljer
STR_5931 :Bannerdetaljer
STR_5932 :Korrupt element-detaljer
STR_5933 :Egenskaper
STR_5934 :{WINDOW_COLOUR_2}Terrengtekstur: {BLACK}{STRINGID}
STR_5935 :{WINDOW_COLOUR_2}Terrengkant: {BLACK}{STRINGID}
STR_5936 :{WINDOW_COLOUR_2}Landeierskap: {BLACK}{STRINGID}
STR_5937 :Ikke eid og ikke til salgs
STR_5938 :{WINDOW_COLOUR_2}Vannivå: {BLACK}{COMMA16}
STR_5939 :Fjern parkgjerder
STR_5940 :Gjenopprett parkgjerder
STR_5941 :{WINDOW_COLOUR_2}Grunnhøyde:
STR_5942 :{WINDOW_COLOUR_2}Navn på gangsti: {BLACK}{STRINGID}
STR_5943 :{WINDOW_COLOUR_2}Tillegg: {BLACK}{STRINGID}
STR_5944 :{WINDOW_COLOUR_2}Tillegg: {BLACK}Ingen
STR_5945 :{WINDOW_COLOUR_2}Tilliggende kanter:
STR_5946 :{WINDOW_COLOUR_2}Attraksjonstype: {BLACK}{STRINGID}
STR_5947 :{WINDOW_COLOUR_2}Attraksjons-ID: {BLACK}{COMMA16}
STR_5948 :{WINDOW_COLOUR_2}Attraksonsnavn: {BLACK}{STRINGID}
STR_5949 :{WINDOW_COLOUR_2}Trekk
STR_5950 :{WINDOW_COLOUR_2}Påfør endringer på banedel
STR_5951 :{WINDOW_COLOUR_2}Baneeleent-ID: {BLACK}{COMMA16}
STR_5952 :{WINDOW_COLOUR_2}Sekvensnummer: {BLACK}{COMMA16}
STR_5953 :{SMALLFONT}{BLACK}Sorter elementer på denne ruten basert på grunnhøyde.
STR_5954 :{WINDOW_COLOUR_2}Pyntalder: {BLACK}{COMMA16}
STR_5955 :{WINDOW_COLOUR_2}Kvadrantposisjon: {BLACK}{STRINGID}
STR_5956 :Sørvest
STR_5957 :Nordvest
STR_5958 :Nordøst
STR_5959 :Sørøst
STR_5960 :{WINDOW_COLOUR_2}Kvadrantposisjon:
STR_5961 :{WINDOW_COLOUR_2}Oppføringsindeks: {BLACK}{COMMA16}
STR_5962 :{WINDOW_COLOUR_2}Kollisjonsdeteksjon:
STR_5963 :{WINDOW_COLOUR_2}Opphøyde hjørner:
STR_5964 :{WINDOW_COLOUR_2}Diagonal
STR_5965 :{WINDOW_COLOUR_2}Inngangstype: {BLACK}{STRINGID}
STR_5966 :{WINDOW_COLOUR_2}Parkinngangsdel: {BLACK}{STRINGID}
STR_5967 :Midten
STR_5968 :Venstre
STR_5969 :Høyre
STR_5970 :{WINDOW_COLOUR_2}Inngangs-ID: {BLACK}{COMMA16}
STR_5971 :{WINDOW_COLOUR_2}Utgangs-ID: {BLACK}{COMMA16}
STR_5972 :{WINDOW_COLOUR_2}Attraksjons-ID: {BLACK}{COMMA16}
STR_5973 :Fest til neste
STR_5974 :{SMALLFONT}{BLACK}Endrer grunn- og klareringshøyden til å være lik neste element på denne ruten. Dette gjør det enklere å bygge på ruten.
STR_5975 :Helning:
STR_5976 :Vannrett
STR_5977 :Høyre side opp
STR_5978 :Venstre side opp
STR_5979 :{WINDOW_COLOUR_2}Gjerdetype: {BLACK}{COMMA16}
STR_5980 :{WINDOW_COLOUR_2}Bannertekst: {BLACK}{STRINGID}
STR_5981 :{WINDOW_COLOUR_2}Ikke et banner
STR_5982 :{WINDOW_COLOUR_2}Stor pynt-type: {BLACK}{COMMA16}
STR_5983 :{WINDOW_COLOUR_2}Stor pynt-element-ID: {BLACK}{COMMA16}
STR_5984 :Blokkerte gangstier:
STR_5985 :Ny mappe
STR_5986 :Skriv inn navnet på den nye mappen.
STR_5987 :Kunne ikke opprette mappe
STR_5988 :{SMALLFONT}{BLACK}Ingen gjenværende landrettigheter til salgs
STR_5989 :{SMALLFONT}{BLACK}Ingen gjenværende byggerettigheter til salgs
STR_5990 :{SMALLFONT}{BLACK}Ingen gjenværende landrettigheter eller byggerettigheter til salgs
STR_5991 :Kunne ikke lime inn element...
STR_5992 :Grensen for antall elementer har blitt nådd
STR_5993 :{SMALLFONT}{BLACK}Kopier valgt element
STR_5994 :{SMALLFONT}{BLACK}Lim inn valgt element
STR_5995 :Booster
STR_5996 :Boosterfart
STR_5997 :Legg til/sett penger
STR_5998 :Legg til penger
STR_5999 :Sett penger
STR_6000 :Skriv inn ny verdi
STR_6001 :Skru på lyseffekter (eksperimentelt)
STR_6002 :{SMALLFONT}{BLACK}Lamper og attraksjoner vil bli opplyst om natten.{NEWLINE}Krever at grafikkmotoren er satt tilhardware display.
STR_6003 :Kutt-bortkamera
STR_6004 :Kutt-bortkamera
STR_6005 :Skru på kutt-bortkamera
STR_6006 :{SMALLFONT}{BLACK}Kutt-bortkamera viser kun elementer på eller under kutthøyden
STR_6007 :Kutthøyde
STR_6008 :{SMALLFONT}{BLACK}Skru på rå verdi<->verdi i måleenheter
STR_6009 :{SMALLFONT}{BLACK}Velg kutthøyde
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Gjester betaler kun for inngang, tjenester og kioskvarer.{NEWLINE}De betaler ikke for attraksjoner.
STR_6014 :{SMALLFONT}{BLACK}Gjester betaler kun for attraksjoner, tjenester og kioskvarer.{NEWLINE}De betaler ikke for inngang.
STR_6015 :Helning
STR_6016 :Endre rute
STR_6017 :Vennligst ro ned
STR_6018 :Attraksjonskonstruksjon - Sving venstre
STR_6019 :Attraksjonskonstruksjon - Sving høyre
STR_6020 :Attraksjonskonstruksjon - Rett spor
STR_6021 :Attraksjonskonstruksjon - Bakke nedover
STR_6022 :Attraksjonskonstruksjon - Bakke oppover
STR_6023 :Attraksjonskonstruksjon - Skru av/på trekk
STR_6024 :Attraksjonskonstruksjon - Helning venstre
STR_6025 :Attraksjonskonstruksjon - Helning høyre
STR_6026 :Attraksjonskonstruksjon - Flytt til forrige seksjon
STR_6027 :Attraksjonskonstruksjon - Flytt til neste seksjon
STR_6028 :Attraksjonskonstruksjon - Konstruer valgt seksjon
STR_6029 :Attraksjonskonstruksjon - Fjern markert seksjon
STR_6030 :{SMALLFONT}{BLACK}Pyntvelger. Klikk hvilken som helst pynt på kartet for å velge samme element for konstruksjon.
STR_6031 :Serverbeskrivelse:
STR_6032 :Server-velkomstbeskjed:
STR_6033 :Sti til RCT1 insallasjonsmappe:
STR_6035 :Velg din RCT1-mappe
STR_6036 :{SMALLFONT}{BLACK}Visk ut
STR_6037 :Vennligst velg en gyldig RCT1 mappe
STR_6038 :{SMALLFONT}{BLACK}Hvis du har RCT1 installert kan du sette denne verdien for å hente inn blant annet scenarier og musikk
STR_6039 :{SMALLFONT}{BLACK}Rask attraksjonsrivning
STR_6040 :Endre scenarioinnstillinger
STR_6041 :{BLACK}Ingen mekanikere er ansatt!
STR_6042 :Last inn høydekart
STR_6043 :Velg høydekart
STR_6044 :Jevn ut høydekart
STR_6045 :Styrke
STR_6046 :Normaliser høydekart
STR_6047 :Jevn ut ruter
STR_6048 :Feil i høydekart
STR_6049 :Kunne ikke lese PNG
STR_6050 :Kunne ikke lese bitmap
STR_6051 :Bredden og høyden må være like
STR_6052 :Høydekartet er for stort og vil bli kuttet av
STR_6053 :Høydekartet kunne ikke normaliseres
STR_6054 :Kun 24-bit bitmaps er støttet
#############
# Scenarios #
@ -4239,112 +4371,112 @@ STR_6012 :{COMMA1DP16}
<Forest Frontiers>
STR_SCNR :Forest Frontiers
STR_PARK :Forest Frontiers
STR_DTLS :Deep in the forest, build a thriving theme park in a large cleared area
STR_DTLS :Bygg en blomstrende fornøyelsespark i en stor lysning langt inne i skogen
<Dynamite Dunes>
STR_SCNR :Dynamite Dunes
STR_PARK :Dynamite Dunes
STR_DTLS :Built in the middle of the desert, this theme park contains just one roller coaster but has space for expansion
STR_DTLS :Denne ørken-fornøyelsesparken har kun én berg-og-dal-bane, men stort rom for utvidelse
<Leafy Lake>
STR_SCNR :Leafy Lake
STR_PARK :Leafy Lake
STR_DTLS :Starting from scratch, build a theme park around a large lake
STR_DTLS :Bygg en fornøyelsespark rundt en stor innsjø fra bunnen av
<Diamond Heights>
STR_SCNR :Diamond Heights
STR_PARK :Diamond Heights
STR_DTLS :Diamond Heights is already a successful theme park with great rides - develop it to double its value
STR_DTLS :Diamond Heights er allerede en vellykket fornøyelsespark med flotte attraksjoner videreutvikle den til det dobbelte i verdi
<Evergreen Gardens>
STR_SCNR :Evergreen Gardens
STR_PARK :Evergreen Gardens
STR_DTLS :Convert the beautiful Evergreen Gardens into a thriving theme park
STR_DTLS :Konverter den praktfulle parken Evergreen Gardens til en blomstrende fornøyelsespark
<Bumbly Beach>
STR_SCNR :Bumbly Beach
STR_PARK :Bumbly Beach
STR_DTLS :Develop Bumbly Beach's small amusement park into a thriving theme park
STR_DTLS :Utvid Bumbly Beach sin lille fornøyelsespark til å bli storslått
<Trinity Islands>
STR_SCNR :Trinity Islands
STR_PARK :Trinity Islands
STR_DTLS :Several islands form the basis for this new park
STR_DTLS :En liten øysamling er basisen for denne nye parken
<Katie's Dreamland>
STR_SCNR :Katie's Dreamland
STR_PARK :Katie's Dreamland
STR_DTLS :A small theme park with a few rides and room for expansion - Your aim is to double the park value
STR_DTLS :En liten fornøyelsespark med noen få attraksjoner og rom for utvidelse Målet ditt er å doble parkens verdi
<Pokey Park>
STR_SCNR :Pokey Park
STR_PARK :Pokey Park
STR_DTLS :A small, cramped amusement park which requires major expansion
STR_DTLS :En liten og trang fornøyelsespark som trenger massiv utvidelse
<White Water Park>
STR_SCNR :White Water Park
STR_PARK :White Water Park
STR_DTLS :A park with some excellent water-based rides requires expansion
STR_DTLS :En park med forteffelige vannbaserte attraksjoner som trenger utvidelse
<Millennium Mines>
STR_SCNR :Millennium Mines
STR_PARK :Millennium Mines
STR_DTLS :Convert a large abandoned mine from a tourist attraction into a theme park
STR_DTLS :Konverter en forlatt gruve fra en døende turistattraksjon til en massiv fornøyelsespark
<Karts & Coasters>
STR_SCNR :Karts & Coasters
STR_PARK :Karts & Coasters
STR_DTLS :A large park hidden in the forest, with only go-kart tracks and wooden roller coasters
STR_DTLS :En bortgjemt park i skogen, med kun go karts og tre-berg-og-dal-baner
<Mel's World>
STR_SCNR :Mel's World
STR_PARK :Mel's World
STR_DTLS :This theme park has some well-designed modern rides, but plenty of space for expansion
STR_DTLS :Denne fornøyelsesparken har et par veldesignede moderne attraksjoner, men masse rom for utvidelse
<Mystic Mountain>
STR_SCNR :Mystic Mountain
STR_PARK :Mystic Mountain
STR_DTLS :In the hilly forests of Mystic Mountain, build a theme park from scratch
STR_DTLS :I Mystic Mountains skogledde åser skal du bygge en fornøyelsespark fra bunnen av
<Pacific Pyramids>
STR_SCNR :Pacific Pyramids
STR_PARK :Pacific Pyramids
STR_DTLS :Convert the Egyptian Ruins tourist attraction into a thriving theme park
STR_DTLS :Konverter disse egyptiske ruinene til en blomstrende fornøyelsespark
<Crumbly Woods>
STR_SCNR :Crumbly Woods
STR_PARK :Crumbly Woods
STR_DTLS :A large park with well-designed but rather old rides - Replace the old rides or add new rides to make the park more popular
STR_DTLS :En stor park med gode, men eldene attraksjoner Erstatt the gamle attraksjonene eller legg til nye for å gjøre denne parken mer populær
<Paradise Pier>
STR_SCNR :Paradise Pier
STR_PARK :Paradise Pier
STR_DTLS :Convert this sleepy town's pier into a thriving attraction
STR_DTLS :Gjør om denne sløve byens brygge til en tiltrekkende attraksjon
<Lightning Peaks>
STR_SCNR :Lightning Peaks
STR_PARK :Lightning Peaks
STR_DTLS :The beautiful mountains of Lightning Peaks are popular with walkers and sightseers - Use the available land to attract a new thrill-seeking clientele
STR_DTLS :Lightning Peaks praktfulle fjell er allerede populære hos turgåere og turister Bruk den tilgjengelige landmassen til å tiltrekke et nytt spenningssøkende klientell
<Ivory Towers>
STR_SCNR :Ivory Towers
STR_PARK :Ivory Towers
STR_DTLS :A well-established park, which has a few problems
STR_DTLS :En veletablert park med et par problemer
<Rainbow Valley>
STR_SCNR :Rainbow Valley
STR_PARK :Rainbow Valley
STR_DTLS :Rainbow Valley's local authority won't allow any landscape changes or large tree removal, but you must develop the area into a large theme park
STR_DTLS :Rainbow Valleys lokale myndigheter tillater hverken landskapsendring eller trefelling Likevel skal du utvikle området til å bli en stor fornøyelesspark
<Thunder Rock>
STR_SCNR :Thunder Rock
STR_PARK :Thunder Rock
STR_DTLS :Thunder Rock stands in the middle of a desert and attracts many tourists - Use the available space to build rides to attract more people
STR_DTLS :Thunder Rock er ørkenens midtpunkt og en stor turistattraksjon Bruk det tilgjengelige området til å bygge attraksjoner for å tiltrekke flere turister
<Mega Park>
STR_SCNR :Mega Park
STR_PARK :Mega Park
STR_DTLS :Just for fun!
STR_DTLS :Bare for gøy!
## Added Attractions
<Whispering Cliffs>

View File

@ -1,4 +1,4 @@
STR_0000 :
STR_0000 :
STR_0001 :{STRINGID} {COMMA16}
STR_0002 :Spiraalachtbaan
STR_0003 :Staande achtbaan
@ -2693,9 +2693,9 @@ STR_2687 :Maximum:
STR_2688 :Basisfrequentie:
STR_2689 :Octaven:
STR_2690 :Kaartgenerator
STR_2691 :{WINDOW_COLOUR_2}Basishoogte:
STR_2692 :{WINDOW_COLOUR_2}Waterniveau:
STR_2693 :{WINDOW_COLOUR_2}Terrein:
STR_2691 :Basishoogte:
STR_2692 :Waterniveau:
STR_2693 :Terrein:
STR_2694 :Genereren
STR_2695 :Willekeurig terrein
STR_2696 :Bomen plaatsen
@ -2745,7 +2745,7 @@ STR_2739 :Geen
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat niet gevonden
STR_2743 :Kopieer data\css17.dat van je RCT1-installatie naar data\css50.dat in je RCT2-installatie.
STR_2743 :Kopieer 'data/css17.dat' van je RCT1-installatie naar 'data/css50.dat' in je RCT2-installatie, of stel een pad in naar je RCT1-bestanden onder het tabblad 'Overige instellingen'
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -2783,7 +2783,7 @@ STR_2777 :{MOVE_X}{SMALLFONT}{STRING}
STR_2778 :{RIGHTGUILLEMET}{MOVE_X}{SMALLFONT}{STRING}
STR_2779 :Kijkvenster {COMMA16}
STR_2780 :Extra kijkvenster
STR_2781 :{STRINGID}:{MOVE_X}{195}{STRINGID}
STR_2781 :{STRINGID}:{MOVE_X}{255}{STRINGID}
STR_2782 :SHIFT +
STR_2783 :CTRL +
STR_2784 :Sneltoets wijzigen
@ -3213,7 +3213,7 @@ STR_3207 :Achtbaanontwerper
STR_3208 :Baanontwerpbeheer
STR_3209 :Terug naar de vorige stap:
STR_3210 :Verder naar de volgende stap:
STR_3211 :{WINDOW_COLOUR_2}Kaartgrootte:
STR_3211 :Kaartgrootte:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Kan de kaart niet verder verkleinen
STR_3214 :Kan de kaart niet verder vergroten
@ -4137,7 +4137,7 @@ STR_5832 :{SMALLFONT}{BLACK}Toon hoogtes in eenheden in plaats van echte mate
STR_5833 :{SMALLFONT}{BLACK}Stelt de datumindeling in.
STR_5834 :{SMALLFONT}{BLACK}Stelt in welk audioapparaat OpenRCT2 zal gebruiken.
STR_5835 :{SMALLFONT}{BLACK}Dempt het geluid als het venster de focus kwijtraakt.
STR_5836 :{SMALLFONT}{BLACK}Selecteert welke muziek er wordt gebruikt tijdens de titelpresentatie.{NEWLINE}Om de muziek van RCT1 te gebruiken moet je het bestand 'data/css17.dat' uit je RCT1-map kopiëren naar 'data/css50.dat' in je RCT2-map.
STR_5836 :{SMALLFONT}{BLACK}Selecteert welke muziek er wordt gebruikt tijdens de titelpresentatie.{NEWLINE}Om de muziek van RCT1 te gebruiken moet je het bestand 'data/css17.dat' uit je RCT1-map kopiëren naar 'data/css50.dat' in je RCT2-map, of een pad naar je RCT1-bestanden instellen onder het tabblad 'Overige instellingen'.
STR_5837 :{SMALLFONT}{BLACK}Eigen thema's voor de GUI aanmaken en beheren.
STR_5838 :{SMALLFONT}{BLACK}Toont een knop voor financiën in de werkbalk.
STR_5839 :{SMALLFONT}{BLACK}Toont een knop voor onderzoek en ontwikkeling in de werkbalk.
@ -4302,8 +4302,60 @@ STR_5997 :Geld toevoegen/instellen
STR_5998 :Toevoegen
STR_5999 :Instellen
STR_6000 :Voer een bedrag in
STR_6001 :Belichtingeffecten inschakelen (experimenteel)
STR_6002 :{SMALLFONT}{BLACK}Lampen zullen 's nachts aangaan en attracties verlicht worden.{NEWLINE}Hiervoor moet weergave via hardware ingeschakeld zijn.
STR_6003 :Opengewerkte weergave
STR_6004 :Opengewerkte weergave
STR_6005 :Opengewerkte weergave inschakelen
STR_6006 :{SMALLFONT}{BLACK}Hiermee worden alleen elementen onder een bepaalde hoogte getoond,{NEWLINE}zodat de binnenkant van gebouwen zichtbaar wordt.
STR_6007 :Snijhoogte
STR_6008 :{SMALLFONT}{BLACK}Klik hierop om te wisselen tussen interne waardes en toegankelijke waardes (zoals meters).
STR_6009 :{SMALLFONT}{BLACK}Selecteer een hoogte waarboven kaartelementen niet meer moeten worden getekend.
STR_6010 :{COMMA2DP32} m
STR_6011 :{COMMA1DP16} ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Bezoekers betalen om het park te betreden en voor faciliteiten.{NEWLINE}Attracties zijn gratis.
STR_6014 :{SMALLFONT}{BLACK}Bezoekers betalen om in attracties te gaan en voor faciliteiten{NEWLINE}Het park betreden is gratis.
STR_6015 :Helling
STR_6016 :Vakje aanpassen
STR_6017 :Ietsje langzamer alsjeblieft.
STR_6018 :Attractiebouw: bocht naar links
STR_6019 :Attractiebouw: bocht naar rechts
STR_6020 :Attractiebouw: standaardbaanstuk
STR_6021 :Attractiebouw: helling naar beneden
STR_6022 :Attractiebouw: helling naar boven
STR_6023 :Attractiebouw: kettinglift aan/uit
STR_6024 :Attractiebouw: banking (links)
STR_6025 :Attractiebouw: banking (rechts)
STR_6026 :Attractiebouw: vorig baanstuk
STR_6027 :Attractiebouw: volgend baanstuk
STR_6028 :Attractiebouw: onderdeel bouwen
STR_6029 :Attractiebouw: onderdeel verwijderen
STR_6030 :{SMALLFONT}{BLACK}Decorselector. Klik op een al geplaatst decorstuk om het te selecteren in dit venster (inclusief de kleuren).
STR_6031 :Serverbeschrijving:
STR_6032 :Welkomstboodschap:
STR_6033 :Locatie RCT1-bestanden:
STR_6035 :Selecteer de map waar je RCT1-bestanden staan
STR_6036 :{SMALLFONT}{BLACK}Wissen
STR_6037 :Selecteer een geldige RCT1-map.
STR_6038 :{SMALLFONT}{BLACK}Als je RCT1 hebt, stel dan hier het pad in om gebruik te maken van de scenario's, baanontwerpen en graphics.
STR_6039 :{SMALLFONT}{BLACK}Snel afbreken
STR_6040 :Scenario-opties bewerken
STR_6041 :{BLACK}Er zijn geen monteurs ingehuurd!
STR_6042 :Hoogtekaart laden
STR_6043 :Hoogtekaart selecteren
STR_6044 :Hoogtekaart verzachten
STR_6045 :Sterkte
STR_6046 :Hoogtekaart normaliseren
STR_6047 :Landschap verzachten
STR_6048 :Fout bij het verwerken van hoogtekaart
STR_6049 :Kon PNG niet inlezen
STR_6050 :Kon bitmap niet inlezen
STR_6051 :De breedte en hoogte moeten overeenkomen
STR_6052 :De hoogtekaart is te groot en zal worden bijgesneden
STR_6053 :De hoogtekaart kan niet worden genormaliseerd
STR_6054 :Alleen 24-bit bitmaps worden ondersteund
STR_6055 :Hoogtekaart voor OpenRCT2
#############
# Scenarios #
@ -4878,12 +4930,163 @@ STR_SCNR :Bouw je eigen Six Flags-park
STR_PARK :Six Flags
STR_DTLS :Maak je eigen Six Flags-park, door gebruik te maken van attracties uit andere Six Flags-parken of door zelf nieuwe attracties te ontwerpen.
#TT
## Wacky Worlds Scenarios
<Africa - African Diamond Mine>
STR_SCNR : Afrika - Diamantmijn
STR_PARK :Mines of Africa
STR_DTLS :Je hebt in verlaten diamantmijn geërfd en een waardevolle diamant gevonden. Je besluit dit geld te investeren om een wereldberoemd themapark te bouwen.
<Africa - Oasis>
STR_SCNR : Afrika - Oase
STR_PARK :Mirage Madness
STR_DTLS :Er is een oase in de woestijn gevonden die een prachtige locatie van een park zou vormen. Voor transport van en naar de oase is gezorgd.
<Africa - Victoria Falls>
STR_SCNR : Afrika - Victoriawatervallen
STR_PARK :Over The Edge
STR_DTLS :Er is een stuwdam gebouwd die goedkope energie in overvloed levert voor je park. Je moet een hoge parkwaarde bereiken om de lening voor de dam terug te betalen.
<Antarctic - Ecological Salvage>
STR_SCNR : Antarctica - Ecologische reddingsactie
STR_PARK :Icy Adventures
STR_DTLS :De milieuorganisatie heeft je gevraagd om een lelijke oude olieraffinaderij om te vormen tot een toeristische trekpleister. Land is goedkoop maar de rente op leningen is hoog. Je kunt de oude gebouwen verkopen als schroot.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR : Azië - Meer toeristen naar de Chinese Muur
STR_PARK :De Chinese Muur
STR_DTLS :De regering heeft besloten om meer toeristen naar de Chinese Muur door er een themapark naast te bouwen. Geld speelt geen rol!
<Asia - Japanese Coastal Reclaim>
STR_SCNR : Azië - Polderen aan de kust
STR_PARK :Okinawa Coast
STR_DTLS :Een bestaand pretpark heeft geen ruimte meer. Je enige optie is om naar de zee uit te breiden, waarvoor je geld hebt geleend. Vanwege het aardbevingsgevaar zijn er hoogtebeperkingen van kracht.
<Asia - Maharaja Palace>
STR_SCNR : Azië - Paleis van de Maharadja
STR_PARK :Park Maharadja
STR_DTLS :De Maharadja heeft jou aangewezen om de lokale bevolking te vermaken. Bouw een park dat is geïnspireerd door het paleis van de Maharadja.
<Australasia - Ayers Rock>
STR_SCNR : Australië - Ayers Rock
STR_PARK :Ayers Adventure
STR_DTLS :Je helpt de Aboriginals om een park te bouwen om het bewustzijn voor hun cultuur te vergroten. Je moet een groot aantal bezoekers aantrekken om hen de unieke geschiedenis van de Aboriginals bij te brengen.
<Australasia - Fun at the Beach>
STR_SCNR : Australië - Plezier op het strand
STR_PARK :Beach Barbecue Blast
STR_DTLS :Het themapark van een lokale ondernemer is over de kop gegaan. Je bezit zelf al een klein park en hebt het andere park overgenomen. Combineer beide parken tot één groot park.
<Europe - European Cultural Festival>
STR_SCNR : Europa - Europees Cultureel Festival
STR_PARK :European Extravaganza
STR_DTLS :Je bent aangesteld om het beheer over een attractiepark over de Europese cultuur over te nemen. Je moet het aantal bezoekers verhogen om de EU-subsidie terug te betalen voor het einde van de huidige termijn van het Europees Parlement.
<Europe - Renovation>
STR_SCNR : Europa - Renovatie
STR_PARK :From The Ashes
STR_DTLS :Een oud park is vervallen. Je hebt een lening van de Europese Unie gekregen om het troosteloze terrein weer in oude luister te herstellen! Je moet het park renoveren en de lening terugbetalen.
<N America - Extreme Hawaiian Island>
STR_SCNR : Noord-Amerika - Extreem Hawaiiaans eiland
STR_PARK :Wacky Waikiki
STR_DTLS :De bevolking van Hawaii wil wel eens iets spannenders dan surfen. Houd dit in het achterhoofd bij het bouwen van een park om zoveel mogelijk mogelijk toeristen aan te trekken.
<North America - Grand Canyon>
STR_SCNR : Noord-Amerika - Grand Canyon
STR_PARK :Canyon Calamities
STR_DTLS :Je moet een park bouwen op de beperkte ruimte aan weerszijden van dit natuurschoon. Hierbij heb je de mogelijkheid om land te kopen van de indianen.
<North America - Rollercoaster Heaven>
STR_SCNR : Noord-Amerika - Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :Je bent een succesvol zakenman op een lange sabbatical. Die wil je gebruiken om het stadspark om te toveren in een achtbanenparadijs. Geld speelt geen rol!
<South America - Inca Lost City>
STR_SCNR : Zuid-Amerika - Verloren Incastad
STR_PARK :Lost City Founder
STR_DTLS :Om nog meer toeristen te trekken moet je een park bouwen dat past bij de omgeving. Dat betekent ook dat er hoogtebeperkingen zijn.
<South America - Rain Forest Plateau>
STR_SCNR : Zuid-Amerika - Regenwoudplateau
STR_PARK :Rainforest Romp
STR_DTLS :In het regenwoud is er niet veel plek. Je moet zo veel mogelijk in de open plek zien te persen om een goed alternatief voor de lokale houtindustrie te vormen.
<South America - Rio Carnival>
STR_SCNR : Zuid-Amerika - Carnival van Rio
STR_PARK :Sugarloaf Shores
STR_DTLS :Je hebt een klein park in de buurt van Rio, maar de bank wil haar lening terug. Je moet je winst zien te verhogen om je schuld terug te betalen.
## Time Twister
<Dark Age - Castle>
STR_SCNR : Middeleeuwen - Kasteel
STR_PARK :Cliffside Castle
STR_DTLS :De leden van de lokale vereniging die oude veldslagen naspeelt nemen hun hobby serieus. Ze hebben jou de klus om van Cliffside Castle een middeleeuws themapark te maken toevertrouwd.
<Dark Age - Robin Hood>
STR_SCNR : Middeleeuwen - Robin Hood
STR_PARK :Sherwood Forest
STR_DTLS :Om geld van de rijken naar de armen te brengen hebben jij en je Merry Men besloten een themapark te bouwen in Sherwood Forest.
<Future - First Encounters>
STR_SCNR : Toekomst - Eerste ontmoeting
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Er is leven aangetroffen op een verre planeet! Bouw een buitenaards themapark om munt te slaan uit de onverwachte golf van interesse.
<Future - Future World>
STR_SCNR : Toekomst - Stad van de toekomst
STR_PARK :Gemini City
STR_DTLS :Laat je inventieve, utopische visie van de toekomst zien - bedenk een furistisch ontwerp met state-of-the-art attracties.
<Mythological - Animatronic Film Set>
STR_SCNR : Mythologie - Animatronic-filmset
STR_PARK :Animatronic Antics
STR_DTLS :Je moet een bestaand pretpark, gebouwd op een oude filmset, beheren en verbeteren. Bouw een eerbetoon aan de pioniers van de stop-motionanimatie, die de wezens uit de mythologie tot leven brachten op het witte doek.
<Mythological - Cradle of Civilisation>
STR_SCNR : Mythologie - Wieg van de beschaving
STR_PARK :Mythological Madness
STR_DTLS :Je bezit een eiland van grote archeologische waarde, dat je voor het nageslacht wilt beschermen. Dit wil je bekostigen door een park te bouwen met de mythologische geschiedenis van je eiland als thema.
<Prehistoric - After the Asteroid>
STR_SCNR : Prehistorie - Na de meteoriet
STR_PARK :Crater Carnage
STR_DTLS :Je bezig een stoffige oude meteorietkrater. Als echte ondernemer heb je besloten om er een themapark van te maken en zo munt te slaan uit je waardeloos lijkende land.
<Prehistoric - Jurassic Safari>
STR_SCNR : Prehistorie - Jurasafari
STR_PARK :Coastersaurus
STR_DTLS :Je moet een themapark bouwen in Jurastijl. Om de bezoekers zo dicht mogelijk bij de exotische planten en dieren te laten komen, moeten je attracties over en door de vallei gaan lopen.
<Prehistoric - Stone Age>
STR_SCNR : Prehistorie - Steentijd
STR_PARK :Rocky Rambles
STR_DTLS :Om te voorkomen dat er een snelweg wordt aangelegd en zo de mysterieuze prehistorische steencirkels te beschermen, moet je een winstgevend themapark bouwen. Het kan echter lastig worden om bezoekers aan te trekken, aangezien het terrein vrij ruw is.
<Roaring Twenties - Prison Island>
STR_SCNR : Roaring Twenties - Alcatraz
STR_PARK :Alcatraz
STR_DTLS :Het beruchte gevangeniseiland, dat ooit volzat met illegale drankstokers en gangsters, is nu te koop. Je hebt besloten het te veranderen in een toeristentrekpleister. Geld speelt geen rol!
<Roaring Twenties - Schneider Cup>
STR_SCNR : Roaring Twenties - Schneider Cup
STR_PARK :Schneider Shores
STR_DTLS :Het is al bijna 75 jaar geleden dat je grootvader de Schneider Cup won. Je hebt besloten zijn prestatie te eren met een themapark dat is geïnspireerd door de beroemde watervliegtuigenrace.
<Roaring Twenties - Skyscrapers>
STR_SCNR : Roaring Twenties - Wolkenkrabbers
STR_PARK :Metropolis
STR_DTLS :Je bezit een lege kavel in de stad, tussen de laagbouw. Bouw een themapark van wolkenkrabbers, geïnspireerd door de artdecostijl van de jaren twintig.
<Rock 'n' Roll - Flower Power>
STR_SCNR : Rock 'n' Roll - Flower Power
STR_PARK :Woodstock
STR_DTLS :Een groot jaarlijks muziekfestival vindt plaats op jouw terrein. Bouw een hip themapark om het publiek van vrije geesten te vermaken.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR : Rock 'n' Roll - Rock 'n' Roll
STR_PARK :Rock 'n' Roll Revival
STR_DTLS :Dit verouderde themapark heeft betere tijden gekend. Geef het park een rock 'n' roll-makeover en verander het in een succesvolle onderneming.
#OCC
<Panda World>
STR_SCNR :Panda World
@ -6987,6 +7190,10 @@ STR_NAME :Wachtrij-tv
[MEDBENCH]
STR_NAME :Krukjes
#TT
[1920SLMP]
STR_NAME :Antieke straatlantaarns
#OCC
[LITTERPA]
STR_NAME :Vuilnisbak in pandavorm

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
# STR_XXXX part is read and XXXX becomes the string id number.
# STR_XXXX part is read and XXXX becomes the string id number.
# Everything after the colon and before the new line will be saved as the string.
# Use # at the beginning of a line to leave a comment.
STR_0000 :
@ -1815,7 +1815,7 @@ STR_1809 :{WINDOW_COLOUR_2}Quebra atual: {OUTLINE}{RED}{STRINGID}
STR_1810 :{WINDOW_COLOUR_2}Transportando:
STR_1811 :Impossível construir isto aqui...
STR_1812 :{SMALLFONT}{BLACK}{STRINGID}
STR_1813 :Objetos váriados
STR_1813 :Objetos variados
STR_1814 :Ações
STR_1815 :Pensamentos
STR_1816 :{SMALLFONT}{BLACK}Selecione o tipo de informação para mostrar na lista de visitantes
@ -2691,14 +2691,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}Um grande grupo de visitantes está chegando
STR_2685 :Parâmetros de ruído simples
STR_2686 :{WINDOW_COLOUR_2}Baixo:
STR_2687 :{WINDOW_COLOUR_2}Alto:
STR_2688 :{WINDOW_COLOUR_2}Frequência base:
STR_2689 :{WINDOW_COLOUR_2}Oitavas:
STR_2686 :Baixo:
STR_2687 :Alto:
STR_2688 :Frequência base:
STR_2689 :Oitavas:
STR_2690 :Gerador de Mapa
STR_2691 :{WINDOW_COLOUR_2}Altura da base:
STR_2692 :{WINDOW_COLOUR_2}Nível de água:
STR_2693 :{WINDOW_COLOUR_2}Terreno:
STR_2691 :Altura da base:
STR_2692 :Nível de água:
STR_2693 :Terreno:
STR_2694 :Gerar
STR_2695 :Terreno aleatório
STR_2696 :Colocar árvores
@ -2748,7 +2748,7 @@ STR_2739 :Nenhum
STR_2740 :RollerCoaster Tycoon 1
STR_2741 :RollerCoaster Tycoon 2
STR_2742 :css50.dat não encontrado
STR_2743 :Copie data\css17.dat da instalação do seu RCT1 para data\css50.dat na sua pasta de instalação do RCT2.
STR_2743 :Copie data\css17.dat da instalação do seu RCT1 para data\css50.dat na sua pasta de instalação do RCT2, ou tenha certeza que o caminho para o RCT1 na aba Variados está correto.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3218,7 +3218,7 @@ STR_3207 :Construtor de Montanha-Russa
STR_3208 :Gerenciador de Projetos de Pista
STR_3209 :Voltar para o Passo Anterior:
STR_3210 :Avançar para o Próximo Passo:
STR_3211 :{WINDOW_COLOUR_2}Tamanho do Mapa:
STR_3211 :Tamanho do Mapa:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Impossível diminuir ainda mais o tamanho do mapa
STR_3214 :Impossível aumentar ainda mais o tamanho do mapa
@ -4033,8 +4033,8 @@ STR_5724 :Tempestade
STR_5725 :{BLACK}Forçar clima:
STR_5726 :{SMALLFONT}{BLACK}Define o clima atual no parque
STR_5727 :Qualidade da escala
STR_5728 :Requer opção de exibição de hardware
STR_5729 :{SMALLFONT}{BLACK}Requer opção de exibição de hardware
STR_5728 :Requer opção de exibição por hardware
STR_5729 :{SMALLFONT}{BLACK}Requer opção de exibição por hardware
STR_5730 :Vizinho mais próximo
STR_5731 :Linear
STR_5732 :Anisotrópica
@ -4125,9 +4125,9 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES}
#tooltips
STR_5815 :{SMALLFONT}{BLACK}Mostra o contador de FPS dentro do jogo
STR_5816 :{SMALLFONT}{BLACK}Define a proporção de dimensionamento do jogo.{NEWLINE}Mais útil quando está jogando em{NEWLINE}alta resolução
STR_5817 :{SMALLFONT}{BLACK}[Requer exibição de hardware]{NEWLINE}Define o tipo de escala da interface de usuário
STR_5818 :{SMALLFONT}{BLACK}[Requer exibição de hardware]{NEWLINE}Usa a escala do vizinho mais próximo{NEWLINE}quando o fator de escala da janela está definido{NEWLINE}com valores integrais (1, 2, 3, etc)
STR_5819 :{SMALLFONT}{BLACK}[Requer exibição de hardware]{NEWLINE}Pausa o jogo quando a interface da Steam{NEWLINE}estiver sobrepondo durante o jogo
STR_5817 :{SMALLFONT}{BLACK}[Requer exibição por hardware]{NEWLINE}Define o tipo de escala da interface de usuário
STR_5818 :{SMALLFONT}{BLACK}[Requer exibição por hardware]{NEWLINE}Usa a escala do vizinho mais próximo{NEWLINE}quando o fator de escala da janela está definido{NEWLINE}com valores integrais (1, 2, 3, etc)
STR_5819 :{SMALLFONT}{BLACK}[Requer exibição por hardware]{NEWLINE}Pausa o jogo quando a interface da Steam{NEWLINE}estiver sobrepondo durante o jogo
STR_5820 :{SMALLFONT}{BLACK}Minimiza o jogo se o foco for{NEWLINE}perdido enquanto estiver em modo tela cheia
STR_5821 :{SMALLFONT}{BLACK}Muda a cor do marcador de construção enquanto estiver construindo atrações,{NEWLINE}caminhos, lojas, cenário, etc.
STR_5822 :{SMALLFONT}{BLACK}Alterna entre dia e noite.{NEWLINE}Ciclo completo leva um mês do jogo
@ -4144,7 +4144,7 @@ STR_5832 :{SMALLFONT}{BLACK}Mostra altura como unidade genérica ao invés de
STR_5833 :{SMALLFONT}{BLACK}Muda qual formato de data é usado
STR_5834 :{SMALLFONT}{BLACK}Seleciona qual dispositivo de audio o OpenRCT2 irá usar
STR_5835 :{SMALLFONT}{BLACK}Deixa o jogo mudo se a janela perder foco
STR_5836 :{SMALLFONT}{BLACK}Seleciona música que será usada no menu principal.{NEWLINE}Selecionar o tema do RCT requer que você copie 'data/css17.dat' da pasta do seu RCT para 'data/css50.dat' da pasta do seu RCT2.
STR_5836 :{SMALLFONT}{BLACK}Seleciona música que será usada no menu principal.{NEWLINE}Selecionar o tema do RCT1 requer que você copie 'data/css17.dat' da pasta do seu RCT1 para 'data/css50.dat' da pasta do seu RCT2, ou definir o caminho para o RCT1 na aba Variados.
STR_5837 :{SMALLFONT}{BLACK}Cria e gerencia temas de interface de usuário personalizadas
STR_5838 :{SMALLFONT}{BLACK}Mostra um botão separado para janela de finanças na barra de ferramentas
STR_5839 :{SMALLFONT}{BLACK}Mostra um botão separado para janela de pesquisa e desenvolvimento na barra de ferramentas
@ -4309,8 +4309,60 @@ STR_5997 :Adicionar/definir dinheiro
STR_5998 :Adicionar dinheiro
STR_5999 :Definir dinheiro
STR_6000 :Inserir novo valor
STR_6001 :Habilitar efeitos de iluminação (experimental)
STR_6002 :{SMALLFONT}{BLACK}Lâmpadas e atrações acenderão a noite.{NEWLINE}Requer que o motor de renderização esteja definido em exibição por hardware.
STR_6003 :Cortar Visão
STR_6004 :Cortar Visão
STR_6005 :Habilitar corte de visão
STR_6006 :{SMALLFONT}{BLACK}Corte de visão somente mostra elementos do mapa na altura ou abaixo da altura de corte
STR_6007 :Altura de corte
STR_6008 :{SMALLFONT}{BLACK}Clique para alternar o valor bruto<->valor em unidades de medida
STR_6009 :{SMALLFONT}{BLACK}Selecione altura de corte
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Visitantes pagarão apenas o ingresso para entrar no parque e serviços.{NEWLINE}Entrada das atrações são grátis.
STR_6014 :{SMALLFONT}{BLACK}Visitantes pagarão apenas o ingresso para entrar nas atrações e serviços.{NEWLINE}Eles não pagarão nada para entrar no parque.
STR_6015 :Inclinado
STR_6016 :Modificar Azulejo
STR_6017 :Por favor diminua a velocidade
STR_6018 :Construção da atração - Virar à esquerda
STR_6019 :Construção da atração - Virar à direita
STR_6020 :Construção da atração - Usar pista padrão
STR_6021 :Construção da atração - Inclinar para baixo
STR_6022 :Construção da atração - Inclinar para cima
STR_6023 :Construção da atração - Alternar corrente de elevação
STR_6024 :Construção da atração - Torcer para a esquerda
STR_6025 :Construção da atração - Torcer para a direita
STR_6026 :Construção da atração - Peça anterior
STR_6027 :Construção da atração - Próxima peça
STR_6028 :Construção da atração - Construir atual
STR_6029 :Construção da atração - Demolir atual
STR_6030 :{SMALLFONT}{BLACK}Apanhador de cenário. Clique em qualquer cenário do mapa para selecionar a mesma peça para construção.
STR_6031 :Descrição do Servidor:
STR_6032 :Saudação do Servidor:
STR_6033 :Caminho para a instalação do RCT1:
STR_6034 :{SMALLFONT}{BLACK}{STRING}
STR_6035 :Por favor selecione o diretório do seu RCT1
STR_6036 :{SMALLFONT}{BLACK}Limpar
STR_6037 :Por favor seleciona um diretório válido do RCT1
STR_6038 :{SMALLFONT}{BLACK}Se você instalou o RCT1, defina esta opção para seu diretório para carregar cenários, músicas, etc.
STR_6039 :{SMALLFONT}{BLACK}Demole atração rapidamente
STR_6040 :Editar Opções do Cenário
STR_6041 :{BLACK}Não há mecânicos contratados!
STR_6042 :Carregar altura do mapa
STR_6043 :Selecionar altura do mapa
STR_6044 :Suavizar altura do mapa
STR_6045 :Força
STR_6046 :Normalizar altura do mapa
STR_6047 :Suavizar azulejos
STR_6048 :Erro de altura de mapa
STR_6049 :Erro ao ler PNG
STR_6050 :Erro ao ler bitmap
STR_6051 :A largura e a altura precisam combinar
STR_6052 :A altura do mapa é muito grande, e será cortada
STR_6053 :A altura do mapa não pode ser normalizada
STR_6054 :Apenas bitmaps de 24-bit são suportados
#############
# Scenarios #

File diff suppressed because it is too large Load Diff

View File

@ -842,6 +842,12 @@ STR_0837 :Kan inte initiera grafiksystemet
STR_0838 :<not used anymore>
STR_0839 :{UINT16} x {UINT16}
STR_0840 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{UINT16} x {UINT16}
STR_0841 :<removed string - do not use>
STR_0842 :<removed string - do not use>
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 :Om 'OpenRCT2'
STR_0848 :RollerCoaster Tycoon 2
STR_0849 :{WINDOW_COLOUR_2}Version 2.01.028
@ -1646,6 +1652,8 @@ STR_1647 :
STR_1648 :{SMALLFONT}{OPENQUOTES}Hjälp! Släpp ner mig!{ENDQUOTES}
STR_1649 :{SMALLFONT}{OPENQUOTES}Jag börjar få slut på pengar!{ENDQUOTES}
STR_1650 :{SMALLFONT}{OPENQUOTES}Wow! De bygger en ny åktur!{ENDQUOTES}
STR_1651 :<removed string - do not use>
STR_1652 :<removed string - do not use>
STR_1653 :{SMALLFONT}{OPENQUOTES}...och nu är vi på {STRINGID}!{ENDQUOTES}
STR_1654 :{WINDOW_COLOUR_2}Nyliga tankar:
STR_1655 :{SMALLFONT}{BLACK}Bygg gångväg på land
@ -1885,6 +1893,8 @@ STR_1888 :{WINDOW_COLOUR_2}Tid sen senaste inspektion: {BLACK}mer än 4 timma
STR_1889 :{WINDOW_COLOUR_2}Dötid: {MOVE_X}{255}{BLACK}{COMMA16}%
STR_1890 :{SMALLFONT}{BLACK}Välj hur ofta en mekaniker ska göra underhåll på den här åkturen
STR_1891 :Ingen {STRINGID} i parken än!
STR_1892 :<removed string - do not use>
STR_1893 :<removed string - do not use>
STR_1894 :{WINDOW_COLOUR_2}{STRINGID} sålde: {BLACK}{COMMA32}
STR_1895 :{SMALLFONT}{BLACK}Bygg ny Åktur/attraktion
STR_1896 :{WINDOW_COLOUR_2}Utgifter/Inkomster
@ -2677,14 +2687,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}En stor grupp anländer
STR_2685 :Simpla Brusinställningar
STR_2686 :{WINDOW_COLOUR_2}Låg:
STR_2687 :{WINDOW_COLOUR_2}Hög:
STR_2688 :{WINDOW_COLOUR_2}Basfrekvens:
STR_2689 :{WINDOW_COLOUR_2}Oktav:
STR_2686 :Låg:
STR_2687 :Hög:
STR_2688 :Basfrekvens:
STR_2689 :Oktav:
STR_2690 :Markgenerator
STR_2691 :{WINDOW_COLOUR_2}Bas höjd:
STR_2692 :{WINDOW_COLOUR_2}Vatten:
STR_2693 :{WINDOW_COLOUR_2}Terräng:
STR_2691 :Bas höjd:
STR_2692 :Vatten:
STR_2693 :Terräng:
STR_2694 :Generera
STR_2695 :Slumpvis terräng
STR_2696 :Placera trä
@ -3205,7 +3215,7 @@ STR_3207 :Berg- och dalbanedesigner
STR_3208 :Bandesignhanterare
STR_3209 :Tillbaka till tidigare steg:
STR_3210 :Vidare till nästa steg:
STR_3211 :{WINDOW_COLOUR_2}Kartstorlek:
STR_3211 :Kartstorlek:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :Kan inte minska kartstorleken mer
STR_3214 :Kan inte utöka kartstorleken mer
@ -3524,7 +3534,7 @@ STR_5195 :Rensa Land
STR_5196 :Landsrättigheter
STR_5197 :Dekorationer
STR_5198 :Gångväg
STR_5199 :Åkturskonstruktion
STR_5199 :Åkturkonstruktion
STR_5200 :Spårdesignplacering
STR_5201 :Ny åktur
STR_5202 :Spårdesignval
@ -4295,8 +4305,42 @@ STR_5997 :Lägg till/Välj summa pengar
STR_5998 :Lägg till summa pengar
STR_5999 :Välj summa pengar
STR_6000 :Skriv in nytt värde
STR_6001 :Aktivera ljuseffekter (experiment)
STR_6002 :{SMALLFONT}{BLACK}Lampor och åkturer kommer lysa upp i natten.{NEWLINE}Kräver rendering-motorn vara satt på Hårdvaruhantering.
STR_6003 :Avskärnings-vy
STR_6004 :Avskärnings-vy
STR_6005 :Aktivera Avskärnings-vy
STR_6006 :{SMALLFONT}{BLACK}Avskärnings-vyn kommer endast visa element på eller under den avskurna höjden
STR_6007 :Avskärnings-höjd
STR_6008 :{SMALLFONT}{BLACK}Klicka för att växla råa-värden<->värden i måttenheter
STR_6009 :{SMALLFONT}{BLACK}Välj avskärnings-höjd
STR_6010 :{COMMA2DP32}m
STR_6011 :{COMMA1DP16}ft
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}Gästerna kommer endast betala biljetterna för att komma in i parken och tjänster.{NEWLINE}Åktursbiljetterna kommer vara gratis.
STR_6014 :{SMALLFONT}{BLACK}Gästerna kommer endast betala för åkturer och tjänster.{NEWLINE}Dem kommer inte betala något för inträde.
STR_6015 :Lutande
STR_6016 :Modifiera Ruta
STR_6017 :Vänligen sakta ned
STR_6018 :Åkturkonstruktion - Sväng vänster
STR_6019 :Åkturkonstruktion - Sväng höger
STR_6020 :Åkturkonstruktion - Rakt spår
STR_6021 :Åkturkonstruktion - Lutning nedåt
STR_6022 :Åkturkonstruktion - Lutning uppåt
STR_6023 :Åkturkonstruktion - Växla kjedjelyft
STR_6024 :Åkturkonstruktion - Lutning vänster
STR_6025 :Åkturkonstruktion - Lutning höger
STR_6026 :Åkturkonstruktion - Föregående spår
STR_6027 :Åkturkonstruktion - Nästa spår
STR_6028 :Åkturkonstruktion - Bygg valda spår
STR_6029 :Åkturkonstruktion - Riv valda spår
STR_6030 :{SMALLFONT}{BLACK}Dekorations-väljaren. Klicka på en dekoration på kartan för att välja samma del för konstruktion.
STR_6031 :Server Beskrivning:
STR_6032 :Server Hälsning:
STR_6039 :{SMALLFONT}{BLACK}Demolera attraktioner snabbt
STR_6040 :Redigera scenario inställningar
STR_6041 :{BLACK}Inga mekaniker är anställda!
#############
# Scenarion #

View File

@ -775,7 +775,7 @@ STR_0765 :游客 {INT32}
STR_0766 :游客 {INT32}
STR_0767 :游客 {INT32}
STR_0768 :勤杂工 {INT32}
STR_0769 :维修员 {INT32}
STR_0769 :机械师 {INT32}
STR_0770 :警卫 {INT32}
STR_0771 :表演人员 {INT32}
STR_0772 :未命名游乐园{POP16}{POP16}
@ -1709,7 +1709,7 @@ STR_1697 :不能在等候区放置此物品
STR_1698 :只能在等候区放置此物品
STR_1699 :游戏中已有太多人
STR_1700 :雇佣新的清洁工
STR_1701 :雇佣新的机械
STR_1701 :雇佣新的机械
STR_1702 :雇佣新的安保人员
STR_1703 :雇佣新的表演人员
STR_1704 :不能雇佣新职员...
@ -1868,11 +1868,11 @@ STR_1856 :{WINDOW_COLOUR_2}每件产品售出的利润: {BLACK}{CURRENCY2DP}
STR_1857 :{WINDOW_COLOUR_2}每件产品售出的亏损: {BLACK}{CURRENCY2DP}
STR_1858 :{WINDOW_COLOUR_2}成本: {BLACK}每个月{CURRENCY2DP}
STR_1859 :位清洁工
STR_1860 :位维修工
STR_1860 :位机械师
STR_1861 :位警卫
STR_1862 :位演员
STR_1863 :位清洁工
STR_1864 :位维修工
STR_1864 :位机械师
STR_1865 :位警卫
STR_1866 :位演员
STR_1867 :{BLACK}{COMMA16} {STRINGID}
@ -1898,7 +1898,7 @@ STR_1886 :Inspecting {STRINGID}
STR_1887 :{WINDOW_COLOUR_2}上次检查时间: {BLACK}{COMMA16}分钟前
STR_1888 :{WINDOW_COLOUR_2}上次检查时间: {BLACK}大于4小时
STR_1889 :{WINDOW_COLOUR_2}故障度: {MOVE_X}{255}{BLACK}{COMMA16}%
STR_1890 :{SMALLFONT}{BLACK}选择维修工检查此游乐设施的时间间隔
STR_1890 :{SMALLFONT}{BLACK}选择机械师检查此游乐设施的时间间隔
STR_1891 :在乐园里暂未有{STRINGID}!
# The following two strings were used to display an error when the disc was missing.
# This has been replaced in OpenRCT2.
@ -1939,7 +1939,7 @@ STR_1925 :不能放置人物于此...
STR_1926 :{SMALLFONT}
STR_1927 :{YELLOW}{STRINGID}发生故障了
STR_1928 :{RED}{STRINGID}毁坏了!
STR_1929 :{RED}{STRINGID}依然未修复好{NEWLINE}请检查维修人员位置所在, 或考虑以更好的方法管理他们
STR_1929 :{RED}{STRINGID}依然未修复好{NEWLINE}请检查机械师位置所在, 或考虑以更好的方法管理他们
STR_1930 :{SMALLFONT}{BLACK}开启/关闭这位游客的追踪信息 - (假若开启追踪, 这位游客的行动将会报告于最近消息里)
STR_1931 :{STRINGID}已在轮候{STRINGID}
STR_1932 :{STRINGID}已在{STRINGID}上
@ -2697,14 +2697,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}Large group of guests arrive
STR_2685 :Simplex Noise Parameters
STR_2686 :{WINDOW_COLOUR_2}Low:
STR_2687 :{WINDOW_COLOUR_2}High:
STR_2688 :{WINDOW_COLOUR_2}Base Frequency:
STR_2689 :{WINDOW_COLOUR_2}Octaves:
STR_2686 :Low:
STR_2687 :High:
STR_2688 :Base Frequency:
STR_2689 :Octaves:
STR_2690 :Map Generation
STR_2691 :{WINDOW_COLOUR_2}Base height:
STR_2692 :{WINDOW_COLOUR_2}Water level:
STR_2693 :{WINDOW_COLOUR_2}Terrain:
STR_2691 :Base height:
STR_2692 :Water level:
STR_2693 :Terrain:
STR_2694 :Generate
STR_2695 :Random terrain
STR_2696 :Place trees
@ -2754,7 +2754,7 @@ STR_2739 :无
STR_2740 :过山车大亨1(RCT1)
STR_2741 :过山车大亨2(RCT2)
STR_2742 :找不到css50.dat
STR_2743 :Copy data\css17.dat from your RCT1 installation to data\css50.dat in your RCT2 installation.
STR_2743 :将过山车大亨1安装目录下的'data/css17.dat'拷贝到过山车大亨2安装目录并重命名为'data/css50.dat', 或确保杂项窗口中过山车大亨1的路径设置正确.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3224,7 +3224,7 @@ STR_3207 :过山车设计工具
STR_3208 :轨道设计管理工具
STR_3209 :上一步:
STR_3210 :下一步:
STR_3211 :{WINDOW_COLOUR_2}地图大小:
STR_3211 :地图大小:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :不能再缩小地图
STR_3214 :不能再扩大地图
@ -4149,7 +4149,7 @@ STR_5832 :{SMALLFONT}{BLACK}高度用通用单位替换"距离和速度单位
STR_5833 :{SMALLFONT}{BLACK}修改日期格式
STR_5834 :{SMALLFONT}{BLACK}选择OpenRCT2使用的音频设备
STR_5835 :{SMALLFONT}{BLACK}游戏窗口失焦时静音
STR_5836 :{SMALLFONT}{BLACK}选择主菜单使用的音乐.{NEWLINE}选择过山车大亨1的主题音乐时需要手动将过山车大亨1游戏目录下的'data/css17.dat'拷贝并重命名为过山车大亨2游戏目录下的'data/css50.dat'.
STR_5836 :{SMALLFONT}{BLACK}选择主菜单使用的音乐.{NEWLINE}选择过山车大亨1的主题音乐时需要手动将过山车大亨1游戏目录下的'data/css17.dat'拷贝并重命名为过山车大亨2游戏目录下的'data/css50.dat', 或者在杂项窗口中设定过山车大亨1的路径.
STR_5837 :{SMALLFONT}{BLACK}创建并管理自定义游戏界面配色主题
STR_5838 :{SMALLFONT}{BLACK}在工具栏上为财务窗口显示一个单独的按钮
STR_5839 :{SMALLFONT}{BLACK}在工具栏上为研发窗口显示一个单独的按钮
@ -4173,6 +4173,7 @@ STR_5856 :{SMALLFONT}{BLACK}全屏模式时设置游戏分辨率
STR_5857 :{SMALLFONT}{BLACK}游戏选项
STR_5858 :{SMALLFONT}{BLACK}使用GPU代替CPU渲染画面. 提高截屏软件的兼容性. 可能会轻微降低游戏性能.
STR_5859 :{SMALLFONT}{BLACK}启用补帧从而平滑游戏表现. {NEWLINE}当禁用时,{NEWLINE}游戏帧数会稳定在40 FPS.
STR_5860 :开启原版/反编译版本的轨道绘图模式
STR_5861 :密码验证失败.
STR_5862 :阻止未知玩家进入.
STR_5863 :{SMALLFONT}{BLACK}只允许拥有已知密码的用户加入.
@ -4274,8 +4275,7 @@ STR_5958 :东北
STR_5959 :东南
STR_5960 :{WINDOW_COLOUR_2}四角放置:
STR_5961 :{WINDOW_COLOUR_2}入口编号:{BLACK}{COMMA16}
#碰撞检测?
STR_5962 :{WINDOW_COLOUR_2}冲突检测:
STR_5962 :{WINDOW_COLOUR_2}碰撞检测:
STR_5963 :{WINDOW_COLOUR_2}已升起的角:
STR_5964 :{WINDOW_COLOUR_2}斜角
STR_5965 :{WINDOW_COLOUR_2}入口类型:{BLACK}{STRINGID}
@ -4314,8 +4314,47 @@ STR_5997 :增加/设置金钱
STR_5998 :增加金钱
STR_5999 :设置金钱
STR_6000 :请输入一个新的值
STR_6001 :启用光照效果(实验性质)
STR_6002 :{SMALLFONT}{BLACK}夜晚时路灯和游乐设施将会被点亮.{NEWLINE}此功能需要先开启硬件渲染.
STR_6003 :剖视图
STR_6004 :剖视图
STR_6005 :启用剖视图
STR_6006 :{SMALLFONT}{BLACK}剖视图只显示小于等于切割高度的地图元素
STR_6007 :切割高度
STR_6008 :{SMALLFONT}{BLACK}单击在原始值或度量单位值之间切换
STR_6009 :{SMALLFONT}{BLACK}选择切割高度
STR_6010 :{COMMA2DP32}米
STR_6011 :{COMMA1DP16}英尺
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}游客仅需付费购买游乐园门票和服务.{NEWLINE}搭乘游乐设施免费.
STR_6014 :{SMALLFONT}{BLACK}游客仅需付费购买游乐设施门票和服务.{NEWLINE}进入游乐园免费.
STR_6015 :坡道
STR_6016 :修改网格
STR_6017 :请调低速度
STR_6018 :游乐设施建造- 向左转
STR_6019 :游乐设施建造- 向右转
STR_6020 :游乐设施建造- 使用默认轨道
STR_6021 :游乐设施建造- 降低坡度
STR_6022 :游乐设施建造- 升高坡度
STR_6023 :游乐设施建造- 牵引链条开关
STR_6024 :游乐设施建造- 向左倾斜
STR_6025 :游乐设施建造- 向右倾斜
STR_6026 :游乐设施建造- 上一个轨道
STR_6027 :游乐设施建造- 下一个轨道
STR_6028 :游乐设施建造- 建造当前选中的
STR_6029 :游乐设施建造- 拆除当前选中的
STR_6030 :{SMALLFONT}{BLACK}景物选择器. 点击地图上任意景物来建造相同的景物.
STR_6031 :服务器描述:
STR_6032 :服务器欢迎信息:
STR_6033 :过山车大亨1安装路径:
STR_6035 :请选择你的过山车大亨1的目录
STR_6036 :{SMALLFONT}{BLACK}清除
STR_6037 :请选择一个有效的过山车大亨1的目录
STR_6038 :{SMALLFONT}{BLACK}如果你安装了过山车大亨1, 设置此选项到其路径以便读取剧情, 音乐等.
STR_6039 :{SMALLFONT}{BLACK}快速拆除游乐设施
STR_6040 :编辑剧情选项
STR_6041 :{BLACK}没有雇佣机械师!
#############

View File

@ -2692,14 +2692,14 @@ STR_2682 :<not used anymore>
STR_2683 :<not used anymore>
STR_2684 :{SMALLFONT}{BLACK}一大群遊客到訪
STR_2685 :簡單雜噪參數
STR_2686 :{WINDOW_COLOUR_2}最低值:
STR_2687 :{WINDOW_COLOUR_2}最高值:
STR_2688 :{WINDOW_COLOUR_2}基本頻律:
STR_2689 :{WINDOW_COLOUR_2}八度:
STR_2686 :最低值:
STR_2687 :最高值:
STR_2688 :基本頻律:
STR_2689 :八度:
STR_2690 :生成地圖
STR_2691 :{WINDOW_COLOUR_2}土地基本高度:
STR_2692 :{WINDOW_COLOUR_2}水面高度:
STR_2693 :{WINDOW_COLOUR_2}地質:
STR_2691 :土地基本高度:
STR_2692 :水面高度:
STR_2693 :地質:
STR_2694 :生成
STR_2695 :隨機地質
STR_2696 :放置樹木
@ -2749,7 +2749,7 @@ STR_2739 :無
STR_2740 :夢幻遊樂園 (RCT1)
STR_2741 :模擬樂園 (RCT2)
STR_2742 :找不到css50.dat
STR_2743 :請複製夢幻遊樂園(RCT1)文件夾中的'data\css17.dat'到模擬樂園(RCT2)的文件夾, 並重新命名為'data\css50.dat'.
STR_2743 :請複製夢幻遊樂園(RCT1)文件夾中的'data/css17.dat'到模擬樂園(RCT2)的文件夾, 並重新命名為'data/css50.dat', 又或者請檢查"其他"選項中夢幻遊樂園(RCT1)的安裝路徑是否正確.
STR_2744 :[
STR_2745 :\
STR_2746 :]
@ -3219,7 +3219,7 @@ STR_3207 :雲霄飛車設計工具
STR_3208 :軌道設計管理工具
STR_3209 :上一步:
STR_3210 :下一步:
STR_3211 :{WINDOW_COLOUR_2}地圖大小:
STR_3211 :地圖大小:
STR_3212 :{POP16}{COMMA16} x {PUSH16}{COMMA16}
STR_3213 :不能再縮小地圖
STR_3214 :不能再擴大地圖
@ -4145,7 +4145,7 @@ STR_5832 :{SMALLFONT}{BLACK}將高度的單位顯示為一個通用單位,
STR_5833 :{SMALLFONT}{BLACK}改變日期格式
STR_5834 :{SMALLFONT}{BLACK}選擇OpenRCT2會使用的音效設備
STR_5835 :{SMALLFONT}{BLACK}當焦點失去時靜音
STR_5836 :{SMALLFONT}{BLACK}選擇主選單音樂.選擇夢幻遊樂園(RCT1)的主選單音樂{NEWLINE}需要複製夢幻遊樂園(RCT1)文件夾中的'data\css17.dat'到模擬樂園(RCT2)的文件夾, 並重新命名為'data\css50.dat'.
STR_5836 :{SMALLFONT}{BLACK}選擇主選單音樂.選擇夢幻遊樂園(RCT1)的主選單音樂{NEWLINE}需要複製夢幻遊樂園(RCT1)文件夾中的'data\css17.dat'到模擬樂園(RCT2)的文件夾, 並重新命名為'data\css50.dat', 又或者於"其他"設置中設置夢幻遊樂園(RCT1)的安裝路徑.
STR_5837 :{SMALLFONT}{BLACK}建立或管理自訂的介面主題
STR_5838 :{SMALLFONT}{BLACK}在工具列上顯示單獨的財政按鈕
STR_5839 :{SMALLFONT}{BLACK}在工具列上顯示單獨的研發按鈕
@ -4322,6 +4322,49 @@ STR_6009 :{SMALLFONT}{BLACK}選擇切入高度
STR_6010 :{COMMA2DP32}米
STR_6011 :{COMMA1DP16}公尺
STR_6012 :{COMMA1DP16}
STR_6013 :{SMALLFONT}{BLACK}遊客只會付費購買樂園入場卷及物品.{NEWLINE}他們能免費乘搭遊樂設施.
STR_6014 :{SMALLFONT}{BLACK}遊客只會付費乘搭遊樂設施及物品.{NEWLINE}他們不會乘搭付費購買樂園入場卷.
STR_6015 :斜道
STR_6016 :更改方格
STR_6017 :請減慢操作速度
STR_6018 :建造遊樂設施 - 轉左
STR_6019 :建造遊樂設施 - 轉右
STR_6020 :建造遊樂設施 - 使用預設軌道
STR_6021 :建造遊樂設施 - 下坡
STR_6022 :建造遊樂設施 - 上坡
STR_6023 :建造遊樂設施 - 使用/禁用鏈條坡道
STR_6024 :建造遊樂設施 - 向左傾斜
STR_6025 :建造遊樂設施 - 向右傾斜
STR_6026 :建造遊樂設施 - 上一軌道
STR_6027 :建造遊樂設施 - 下一軌道
STR_6028 :建造遊樂設施 - 建造當前選定的軌道
STR_6029 :建造遊樂設施 - 移除當前選定的軌道
STR_6030 :{SMALLFONT}{BLACK}景物選取器. 點撃選取地圖上的景物來建造相同的景物.
STR_6031 :伺服器描述:
STR_6032 :伺服器歡迎訊息:
STR_6033 :夢幻遊樂園(RCT1)安裝路徑:
STR_6034 :{SMALLFONT}{BLACK}{STRING}
STR_6035 :請選擇已安裝夢幻遊樂園(RCT1)的文件夾
STR_6036 :{SMALLFONT}{BLACK}清除
STR_6037 :請選擇一個正確的夢幻遊樂園(RCT1)文件夾
STR_6038 :{SMALLFONT}{BLACK}如果你已安裝夢幻遊樂園(RCT1), 請於此選項設置它的安裝路徑, 以便載入劇情, 音樂等物件.
STR_6039 :{SMALLFONT}{BLACK}快速拆除遊樂設施
STR_6040 :編輯劇情選項
STR_6041 :{BLACK}沒有僱用任何的維修人員!
STR_6042 :載入高度點陣圖
STR_6043 :選擇高度點陣圖
STR_6044 :高度點陣圖平滑化
STR_6045 :強度
STR_6046 :高度點陣圖平均化
STR_6047 :平滑方塊區域
STR_6048 :高度點陣圖錯誤
STR_6049 :PNG讀取錯誤
STR_6050 :高度點陣圖讀取錯誤
STR_6051 :寬度及高度需要一致
STR_6052 :此高度點陣圖太大, 將被切割
STR_6053 :此高度點陣圖不能進行平均化
STR_6054 :只支援24位元的點陣圖
STR_6055 :OpenRCT2 高度點陣圖檔案
#############
# Scenarios #
@ -4594,7 +4637,7 @@ STR_DTLS :一個大型的賞花公園需要改造為一個壯大的主題樂
<Iceberg Islands>
STR_SCNR :Iceberg Islands
STR_PARK :Iceberg Islands
STR_DTLS :A collection of icebergs make a cold setting for this ambitious theme park
STR_DTLS :一些冰川為此雄心勃勃的主題樂園帶來了一絲寒意
<Volcania>
STR_SCNR :Volcania
@ -4604,7 +4647,7 @@ STR_DTLS :此建造雲霄飛車挑戰設定於一座沉睡火山之中
<Arid Heights>
STR_SCNR :Arid Heights
STR_PARK :Arid Heights
STR_DTLS :Free of any financial limits, your challenge is to develop this desert park while keeping the guests happy
STR_DTLS :沒有任何財政上的限制, 你的挑戰是要發展這個沙漠中的樂園並讓遊客樂而忘返
<Razor Rocks>
STR_SCNR :Razor Rocks

2
debian/changelog vendored
View File

@ -1,5 +1,5 @@
openrct2 (0.0.6-master-1) unstable; urgency=medium
* Fifth stable release. (Closes: #XXXXXX)
* Sixth release. (Closes: #XXXXXX)
-- Michał Janiszewski <janisozaur+openrct2@gmail.com> Sun, 10 Jan 2016 23:41:16 +0100

View File

@ -1,3 +1,59 @@
0.0.7 (in development)
------------------------------------------------------------------------
- Feature: [#1730] Keyboard shortcuts for track construction.
- Feature: [#2060, #5282] Heightmap loader
- Feature: [#5110] The tile inspector can now be used in multiplayer.
- Feature: [#5305] Add scenery eye dropper tool.
- Feature: [#5370] Ride operating mode can be set from the console.
- Feature: [#5415] Add mute toolbar button (as seen in RCT1 and Locomotion).
- Improved: [#5254] Scenario option changes are now synchronised over multiplayer.
- Improved: [#3288] Added server description and greeting textboxes to the start server menu.
- Improved: [#3502] Track previews display at higher zoom level for large layouts.
- Improved: [#5055] Implement 'quick demolish' for rides.
- Improved: [#5137] Removing all guests no longer closes the rides and removes the vehicles.
- Improved: [#5163] Minor tile inspector improvements and fixes.
- Improved: [#5222] Add Catalan language.
- Improved: [#5351] Giga Coaster and Steel Twister RC boosters now use the correct sprites.
- Improved: Looping RC and Corkscrew RC now use booster sprites from RCT1's CSG1.DAT if available.
- Improved: Scenario options are now synced in multiplayer.
- Improved: Remove duplicate ride penalty for closed rides.
- Improved: Make shortcut keys window larger and resizable.
- Removed: known_issues.txt no longer used, check issue tracker on GitHub.
- Fix: [#1992] Felicity Anderson Cheat can crash the game, as well as blocking queues.
- Fix: [#4493] Provide tooltip for disabled price field.
- Fix: [#4689] Object selection tabs sometimes flicker.
- Fix: [#4913] Server greeting displaying local setting.
- Fix: [#4972] Map window not updated properly when shrinking map from Map Generation window.
- Fix: [#5004] Peeps in parks imported from RCT1 show abnormalities.
- Fix: [#5014] Research not imported from RCT1 correctly.
- Fix: [#5032] Booster speed is not saved in TD6.
- Fix: [#5140] Headless server should save default users.json.
- Fix: [#5150] --openrct-data-path sets user data path instead of OpenRCT2 data path.
- Fix: [#5169] Parks containing packed objects fail to open.
- Fix: [#5199] "Force a breakdown" debugging tool isn't hidden in multiplayer.
- Fix: [#5188] Clicking on a Magic Carpet doesn't open the ride window.
- Fix: [#5218] Scale RCT1 park value objectives.
- Fix: [#5219] Game crashes when opening 'misc' tab in options.
- Fix: [#5238] RCT1 import: Rides are initially free when placing them.
- Fix: [#5252] Correct typo in Conger Eel Coaster description.
- Fix: [#5265] Queue line TVs not detected properly.
- Fix: [#5271] Keyboard shortcuts window isn't large enough (for some languages).
- Fix: [#5284] Mechanic is called to fix a ride that's outside his patrol area.
- Fix: [#5285] Intro always plays even if play_intro = false.
- Fix: [#5299] Scenario editor crash when placing peep spawn.
- Fix: [#5318] Using the bulldozer tool on under-construction paths results in unlimited free money.
- Fix: [#5325] Game crashes if encountering an invalid ride type during research.
- Fix: [#5345] Correct typos in descriptions for Top Spin and Splash Boats.
- Fix: [#5350] Steel Twister RC and Giga Coaster boosters are underpowered, Junior Roller Coaster boosters overpowered compared to RCTC.
- Fix: [#5357] "Assertion failed!" after guest with name 'Emma Garrell' exits/enters ride.
- Fix: Walls do not import from RCT1 correctly in pause mode.
- Fix: Extraneous window tabs show up on MacOS 10.12.
- Fix: Potential for integer overflow in ride length.
- Fix: Vehicles erroneously removed when removing all guests.
- Technical: INI configuration file now case-insensitive.
- Technical: Remove version build from msbuild & NSIS.
0.0.6 (2017-01-29)
------------------------------------------------------------------------
- Feature: [#3355] Allow loading of parks from URLs.
@ -6,6 +62,7 @@
- Feature: [#4916] FreeBSD support.
- Feature: [#4963] Add boosters (from RCT1 and RCTC).
- Feature: [#5113] Entertainers are now hired with a random costume.
- Feature: [#5222] Added Catalan translation.
- Improved: [#4847] Guest / staff pathfinding.
- Improved: [#4938] Checksum calculations speeded up.
- Improved: [#5007] Vehicles and functioning rides are now imported when loading SC4 / SV4 parks.

View File

@ -1,7 +0,0 @@
Release version: 0.0.6
------------------------------------------------------------------------
* Scenario editor object selection window will show object names in the selected language at the time of building the object cache. (Deleting plugin.dat in Documents/OpenRCT2 will fix this)
* Guest AI is slightly worse than the original game.
* Multiplayer is very experimental and is likely to desynchronise often.
Some bugs or limitations present in the original game have not yet been fixed or lifted.

View File

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

View File

@ -1,5 +1,5 @@
Last updated: 2017-01-29
Release version: 0.0.6.0
Release version: 0.0.7.0
------------------------------------------------------------------------

View File

@ -1,31 +1,24 @@
# Version numbers to update
!define /ifndef APPV_MAJOR 0
!define /ifndef APPV_MINOR 0
!define /ifndef APPV_MAINT 6
!define /ifndef APPV_BUILD 0
!define APPNAME "OpenRCT2"
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}"
!define APPVERSIONINTERNAL "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}.${APPV_BUILD}"
!define /ifndef APPURLLINK "https://github.com/OpenRCT2/OpenRCT2"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
!define APPVERSION "${APPV_MAIN}${APPV_EXTRA}"
!define APPVERSIONINTERNAL "${APPV_MAIN}.0"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
!define APPURLLINK "https://github.com/OpenRCT2/OpenRCT2"
!if "${PLATFORM}" == "Win32"
!define OPENRCT2_EXE "openrct2.exe"
!define APPBITS 32
!define APPARCH "win32"
!define OPENRCT2_EXE "openrct2.exe"
!define APPBITS 32
!define APPARCH "win32"
InstallDir "$PROGRAMFILES32\OpenRCT2\"
!else
!define OPENRCT2_EXE "openrct2.exe"
!define APPBITS 64
!define APPARCH "win64"
!define OPENRCT2_EXE "openrct2.exe"
!define APPBITS 64
!define APPARCH "win64"
InstallDir "$PROGRAMFILES64\OpenRCT2\"
!endif
!define SUPPORTED_OS "Windows Vista, 7, 8.1 and 10"
!define SUPPORTED_OS "Windows Vista, 7, 8.1 and 10"
; Define root variable relative to installer
!define PATH_ROOT "..\..\"
@ -137,9 +130,6 @@ Section "!OpenRCT2" Section1
File ..\changelog.txt
Push "$INSTDIR\changelog.txt"
Call unix2dos
File ..\known_issues.txt
Push "$INSTDIR\known_issues.txt"
Call unix2dos
File ..\..\licence.txt
Push "$INSTDIR\licence.txt"
Call unix2dos
@ -215,7 +205,6 @@ Section "Uninstall"
; Clean up OpenRCT2 dir
Delete "$INSTDIR\changelog.txt"
Delete "$INSTDIR\known_issues.txt"
Delete "$INSTDIR\licence.txt"
Delete "$INSTDIR\readme.txt"
Delete "$INSTDIR\contributors.md"

View File

@ -0,0 +1,76 @@
FROM nfnty/arch-mini:latest
# Based on https://github.com/haffmans/docker-mingw-qt5/blob/master/Dockerfile
# Update base system
RUN pacman -Sy --noconfirm --noprogressbar archlinux-keyring \
&& pacman-key --populate \
&& pacman -Su --noconfirm --noprogressbar pacman \
&& pacman-db-upgrade \
&& pacman -Su --noconfirm --noprogressbar ca-certificates \
&& trust extract-compat \
&& pacman -Syyu --noconfirm --noprogressbar \
&& (echo -e "y\ny\n" | pacman -Scc)
# Install yaourt
RUN echo "[archlinuxfr]" >> /etc/pacman.conf && \
echo "SigLevel = Never" >> /etc/pacman.conf && \
echo "Server = http://repo.archlinux.fr/x86_64" >> /etc/pacman.conf &&\
pacman -Sy
# Add some useful packages to the base system
RUN pacman -S --noconfirm --noprogressbar \
make \
git \
sudo \
wget \
yaourt \
awk \
sudo \
fakeroot \
file \
patch \
&& (echo -e "y\ny\n" | pacman -Scc)
# Add mingw-repo
RUN echo "[mingw-w64]" >> /etc/pacman.conf \
&& echo "SigLevel = Optional TrustAll" >> /etc/pacman.conf \
&& echo "Server = http://downloads.sourceforge.net/project/mingw-w64-archlinux/\$arch" >> /etc/pacman.conf \
&& pacman -Sy
# Install MingW packages
RUN pacman -S --noconfirm --noprogressbar \
mingw-w64-binutils \
mingw-w64-crt \
mingw-w64-gcc \
mingw-w64-headers \
mingw-w64-winpthreads \
mingw-w64-cmake \
mingw-w64-fontconfig \
mingw-w64-freetype2 \
mingw-w64-libiconv \
mingw-w64-libpng \
mingw-w64-openssl \
mingw-w64-pkg-config \
mingw-w64-sdl2 \
mingw-w64-tools \
mingw-w64-zlib \
mingw-w64-sdl2_ttf \
mingw-w64-curl \
&& (echo -e "y\ny\n" | pacman -Scc)
RUN useradd --create-home --comment "Arch Build User" build && \
groupadd sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers; \
echo 'Defaults:nobody !requiretty' >> /etc/sudoers; \
gpasswd -a build sudo
USER build
WORKDIR /tmp
# Overrides from arch-base
ENV HOME /home/build
RUN yaourt -S --noconfirm --noprogressbar \
mingw-w64-jansson \
aur/mingw-w64-libzip \
aur/mingw-w64-speexdsp \
&& (echo -e "y\ny\n" | sudo pacman -Scc)

View File

@ -2,8 +2,6 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)'==''">..\..\</SolutionDir>
<Config Condition="'$(Configuration)'=='Debug' OR '$(Configuration)'=='DebugTests'">Debug</Config>
<Config Condition="'$(Configuration)'=='Release' OR '$(Configuration)'=='ReleaseTests'">Release</Config>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
@ -11,18 +9,18 @@
<PropertyGroup>
<!-- Allow any version of VS and Windows SDK -->
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<TargetPlatformVersion>$(UCRTVersion)</TargetPlatformVersion>
<TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion>
<CharacterSet>MultiByte</CharacterSet>
<OutDir>$(SolutionDir)bin\</OutDir>
<IntDir>$(SolutionDir)obj\$(ProjectName)\$(Config)_$(Platform)\</IntDir>
<IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)_$(Platform)\</IntDir>
<TargetName>$(ProjectName)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug'">
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release'">
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
@ -56,7 +54,7 @@
<AdditionalOptions>/OPT:NOLBR /ignore:4099 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Config)'=='Debug'">
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
@ -68,7 +66,7 @@
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Config)'=='Release'">
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
@ -85,16 +83,6 @@
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='DebugTests'">
<ClCompile>
<PreprocessorDefinitions>__TEST__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='ReleaseTests'">
<ClCompile>
<PreprocessorDefinitions>NDEBUG;__TEST__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<!-- Debug|Win32 is reserved for RCT2 interop builds, this means it has to be a DLL -->
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'!='Debug|Win32'">

View File

@ -19,7 +19,7 @@
<TestConfig Condition="'$(Configuration)'=='DebugTests' OR '$(Configuration)'=='ReleaseTests'">true</TestConfig>
<GIT_COMMIT_SHA1_SHORT Condition="'$(GIT_COMMIT_SHA1)'!=''">$(GIT_COMMIT_SHA1.Substring(0, 7))</GIT_COMMIT_SHA1_SHORT>
<Version>0.0.6.0</Version>
<Version>0.0.7</Version>
<VersionExtra Condition="'$(GIT_BRANCH)'!=''">-$(GIT_BRANCH)-$(GIT_COMMIT_SHA1_SHORT)</VersionExtra>
<VersionExtra Condition="'$(GIT_TAG)'!=''"></VersionExtra>
<TargetLibsVersion>11</TargetLibsVersion>
@ -94,7 +94,6 @@
<PublishItems Include="$(OutputDll)" />
<PublishItems Include="$(TargetDir)data" />
<PublishItems Include="$(DistDir)changelog.txt" />
<PublishItems Include="$(DistDir)known_issues.txt" />
<PublishItems Include="$(DistDir)readme.txt" />
<PublishItems Include="$(RootDir)contributors.md" />
<PublishItems Include="$(RootDir)licence.txt" />
@ -207,6 +206,7 @@
<!-- Target to create openrct2.exe (windows) and openrct2.com (console) -->
<Target Name="CreateGUI" DependsOnTargets="Build" AfterTargets="Build" Inputs="$(OutputExe)" Outputs="$(OutputCom)">
<Copy SourceFiles="$(OutputExe)" DestinationFiles="$(OutputCom)" />
<Exec Command="editbin /subsystem:console &quot;$(OutputCom)&quot;" />
<Exec Command="editbin /subsystem:windows &quot;$(OutputExe)&quot;" />
</Target>
@ -265,6 +265,7 @@
<!-- Create the installer -->
<Message Text="Building Windows Installer (NSIS script)" Importance="high" />
<Exec Command="makensis /DOUTFILE=$(PublishInstallerExe) ^
/DAPPV_MAIN=$(Version) ^
/DAPPV_EXTRA=$(VersionExtra) ^
/DPLATFORM=$(Platform) ^
$(NsisScript)"

View File

@ -3,30 +3,30 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libopenrct2", "src\openrct2\libopenrct2.vcxproj", "{D24D94F6-2A74-480C-B512-629C306CE92F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testpaint", "test\testpaint\testpaint.vcxproj", "{57E60BA1-FB76-4316-909E-C1449C142327}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "test\tests\tests.vcxproj", "{62B020FA-E4FB-4C6E-B32A-DC999470F155}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openrct2-dll", "src\openrct2-dll\openrct2-dll.vcxproj", "{7B8DB129-79EF-417E-B372-8A18E009D261}"
ProjectSection(ProjectDependencies) = postProject
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2202A816-377D-4FA0-A7AF-7D4105F8A4FB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{480B577D-4E4A-4757-9A42-28A9AD33E6B0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openrct2-win", "src\openrct2-win\openrct2-win.vcxproj", "{7A9A57D5-7006-4208-A290-5491BA3C8808}"
ProjectSection(ProjectDependencies) = postProject
{7B8DB129-79EF-417E-B372-8A18E009D261} = {7B8DB129-79EF-417E-B372-8A18E009D261}
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openrct2-dll", "src\openrct2-dll\openrct2-dll.vcxproj", "{7B8DB129-79EF-417E-B372-8A18E009D261}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libopenrct2", "src\openrct2\libopenrct2.vcxproj", "{D24D94F6-2A74-480C-B512-629C306CE92F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "test\tests\tests.vcxproj", "{62B020FA-E4FB-4C6E-B32A-DC999470F155}"
ProjectSection(ProjectDependencies) = postProject
{D24D94F6-2A74-480C-B512-629C306CE92F} = {D24D94F6-2A74-480C-B512-629C306CE92F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testpaint", "test\testpaint\testpaint.vcxproj", "{57E60BA1-FB76-4316-909E-C1449C142327}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2202A816-377D-4FA0-A7AF-7D4105F8A4FB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{480B577D-4E4A-4757-9A42-28A9AD33E6B0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32

View File

@ -4,7 +4,7 @@ An open-source re-implementation of RollerCoaster Tycoon 2. A construction and m
### Build Status
| | Windows | Linux / Mac | Download |
|-------------|---------|-------------|----------|
| **master** | [![AppVeyor](https://ci.appveyor.com/api/projects/status/7efnemxhon6i5n34/branch/master?svg=true)](https://ci.appveyor.com/project/IntelOrca/openrct2-ject9) | [![Travis CI](https://travis-ci.org/OpenRCT2/OpenRCT2.svg?branch=master)](https://travis-ci.org/OpenRCT2/OpenRCT2) | [![OpenRCT2.org](https://img.shields.io/badge/stable-v0.0.6-green.svg)](https://openrct2.org/downloads/master/latest) |
| **master** | [![AppVeyor](https://ci.appveyor.com/api/projects/status/7efnemxhon6i5n34/branch/master?svg=true)](https://ci.appveyor.com/project/IntelOrca/openrct2-ject9) | [![Travis CI](https://travis-ci.org/OpenRCT2/OpenRCT2.svg?branch=master)](https://travis-ci.org/OpenRCT2/OpenRCT2) | [![OpenRCT2.org](https://img.shields.io/badge/master-v0.0.6-green.svg)](https://openrct2.org/downloads/master/latest) |
| **develop** | [![AppVeyor](https://ci.appveyor.com/api/projects/status/7efnemxhon6i5n34/branch/develop?svg=true)](https://ci.appveyor.com/project/IntelOrca/openrct2-ject9) | [![Travis CI](https://travis-ci.org/OpenRCT2/OpenRCT2.svg?branch=develop)](https://travis-ci.org/OpenRCT2/OpenRCT2) | [![OpenRCT2.org](https://img.shields.io/badge/develop-v0.0.7-blue.svg)](https://openrct2.org/downloads/develop/latest) |
### Chat
@ -37,7 +37,7 @@ RollerCoaster Tycoon 2 was originally written by Chris Sawyer in x86 assembly an
OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bought at either [Steam](http://store.steampowered.com/app/285330/) or [GOG.com](http://www.gog.com/game/rollercoaster_tycoon_2).
[OpenRCT2.org](https://openrct2.org/downloads) offers precompiled builds and installers of the latest stable and the develop branch. There is also a cross platform [Launcher](https://github.com/LRFLEW/OpenRCT2Launcher/releases) available that will automatically update your build of the game so that you always have the latest version.
[OpenRCT2.org](https://openrct2.org/downloads) offers precompiled builds and installers of the latest master and the develop branch. There is also a cross platform [Launcher](https://github.com/LRFLEW/OpenRCT2Launcher/releases) available that will automatically update your build of the game so that you always have the latest version.
Some Linux distributions offer native packages already. These packages are usually third-party, but we're trying to resolve issues they are facing.
* ArchLinux AUR: [openrct2-git](https://aur.archlinux.org/packages/openrct2-git) and [openrct2](https://aur.archlinux.org/packages/openrct2)
@ -52,7 +52,9 @@ OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bo
### Windows:
- 7 / 8 / 10
- Visual Studio 2015 Update 3 or 2017 RC (Enterprise / Professional / [Community (Free)](https://www.visualstudio.com/products/visual-studio-community-vs))
- Visual Studio 2017 (Enterprise / Professional / [Community (Free)](https://www.visualstudio.com/vs/community/))
- Desktop development with C++
- Windows 10 SDK (10.0.14393.0)
- [7-Zip](http://www.7-zip.org/) (for deployment only)
- [NSIS](http://nsis.sourceforge.net/) (for deployment only)
@ -83,7 +85,7 @@ The program can also be built as a command line program using CMake. This type o
## 3.2 Compiling and running
### Windows:
1. Check out the repository. This can be done using [GitHub Desktop](https://desktop.github.com) or [other tools](https://help.github.com/articles/which-remote-url-should-i-use).
2. Open a new Developer Command Prompt for VS2015, then navigate to the repository (e.g. `cd C:\GitHub\OpenRCT2`).
2. Open a new Developer Command Prompt for VS 2017, then navigate to the repository (e.g. `cd C:\GitHub\OpenRCT2`).
3. Run `msbuild openrct2.proj /t:build /p:platform=x64`.
4. Run the game, `bin\openrct2`
@ -129,7 +131,7 @@ make
Detailed instructions can be found on our [wiki](https://github.com/OpenRCT2/OpenRCT2/wiki/Building-OpenRCT2-on-Linux).
# 4 Contributing
OpenRCT2 uses the [gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow). If you are implementing a new feature or logic from the original game, please branch off and perform pull requests to ```develop```. If you are fixing a bug for the next release, please branch off and perform pull requests to the correct release branch. ```master``` only contains tagged releases, you should never branch off this.
OpenRCT2 uses the [gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows#gitflow-workflow). If you are implementing a new feature or logic from the original game, please branch off and perform pull requests to ```develop```. If you are fixing a bug for the next release, please branch off and perform pull requests to the correct release branch. ```master``` only contains tagged releases, you should never branch off this.
Please read our [contributing guidelines](https://github.com/OpenRCT2/OpenRCT2/blob/develop/CONTRIBUTING.md) for information.

BIN
resources/g2/80.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

BIN
resources/g2/81.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

BIN
resources/g2/82.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

BIN
resources/g2/83.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 B

BIN
resources/g2/84.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

BIN
resources/g2/85.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
resources/g2/86.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
resources/g2/87.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
resources/g2/88.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
resources/g2/89.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
resources/g2/90.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
resources/g2/91.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

BIN
resources/g2/92.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

View File

@ -20,46 +20,6 @@ if [[ ! -d build ]]; then
mkdir -p build
fi
if [[ $TARGET != "ubuntu_i686" && $TARGET != "docker32" && $SYSTEM != "Darwin" ]]; then
sha256sum=c71bb6b488376853252a00f3ed216e09d645f71357ea76b9b55c56e40b4f44ca
libVFile="./libversion"
libdir="./lib"
currentversion=0
needsdownload="true"
if [ -f $libVFile ]; then
while read line; do
currentversion=$line
continue
done < $libVFile
fi
if [ "z$currentversion" == "z$sha256sum" ]; then
needsdownload="false"
fi
if [ ! -d $libdir ]; then
needsdownload="true"
fi
if [[ "$needsdownload" = "true" ]]; then
echo "Found library had sha256sum $currentversion, expected $sha256sum"
echo "New libraries need to be downloaded. Clearing cache and calling ./install.sh"
rm -rf ./lib
if [[ -f $cachedir/orctlibs.zip ]]; then
rm -rf $cachedir/orctlibs.zip
fi
if [[ -d /usr/local/cross-tools/orctlibs ]]; then
sudo rm -rf /usr/local/cross-tools/orctlibs
fi
if [[ -d $cachedir/orctlibs ]]; then
rm -rf $cachedir/orctlibs
fi
scripts/linux/install.sh
fi
# if [[ $TARGET != "linux" && $TARGET != "docker32" && $SYSTEM != "Darwin" ]]; then
fi
pushd build
echo OPENRCT2_CMAKE_OPTS = $OPENRCT2_CMAKE_OPTS
if [[ $TARGET == "docker32" ]]
@ -96,7 +56,7 @@ pushd build
chmod a+rwx $(pwd)
chmod g+s $(pwd)
# CMAKE and MAKE opts from environment
docker run -v /usr/local/cross-tools/:/usr/local/cross-tools/ -v $PARENT:$PARENT -w $PARENT/build -i -t openrct2/openrct2:mingw 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

@ -50,36 +50,6 @@ function download {
fi
}
function download_sdl {
if [[ ! -f $cachedir/SDL2-devel-${SDL2_PV}-mingw.tar.gz ]]; then
download http://libsdl.org/release/SDL2-devel-${SDL2_PV}-mingw.tar.gz $cachedir/SDL2-devel-${SDL2_PV}-mingw.tar.gz;
fi
if [[ ! -f $cachedir/SDL2_ttf-devel-${SDL2_TTF_PV}-mingw.tar.gz ]]; then
download https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-devel-${SDL2_TTF_PV}-mingw.tar.gz $cachedir/SDL2_ttf-devel-${SDL2_TTF_PV}-mingw.tar.gz;
fi
if [[ ! -d $cachedir/SDL2-${SDL2_PV} ]]; then
pushd $cachedir
tar -xzf SDL2-devel-${SDL2_PV}-mingw.tar.gz
popd
fi
if [[ ! -d $cachedir/SDL2_ttf-${SDL2_TTF_PV} ]]; then
pushd $cachedir
tar -xzf SDL2_ttf-devel-${SDL2_TTF_PV}-mingw.tar.gz
popd
fi
# Apply platform patch
mingw_patch=libsdl2-mingw-2.0.3-fix-platform-detection-for-mingw.patch
if [[ ! -f $cachedir/$mingw_patch ]]; then
download "https://github.com/anyc/anyc-overlay/raw/master/media-libs/libsdl2-mingw/files/$mingw_patch" $cachedir/$mingw_patch;
# XXX not sure how to make this idempotent.
pushd $cachedir/SDL2-${SDL2_PV}/i686-w64-mingw32/include/SDL2/
echo "Applying patch."
patch -p2 < ../../../../$mingw_patch
popd
fi
}
function download_libs {
if [[ ! -f $cachedir/orctlibs.zip ]]; then
download $liburl $cachedir/orctlibs.zip;
@ -92,35 +62,6 @@ function download_libs {
fi
}
function install_cross_tools {
if [[ ! -d /usr/local/cross-tools ]]; then
sudo mkdir -p /usr/local/cross-tools
fi
if [[ ! -d /usr/local/cross-tools/i686-w64-mingw32 ]]; then
sudo cp -r $cachedir/SDL2-${SDL2_PV}/i686-w64-mingw32 /usr/local/cross-tools/
sudo cp -r $cachedir/SDL2_ttf-${SDL2_TTF_PV}/i686-w64-mingw32 /usr/local/cross-tools/
fi
if [[ ! -d /usr/local/cross-tools/orctlibs ]]; then
sudo mkdir -p /usr/local/cross-tools/orctlibs
sudo cp -rf $cachedir/orctlibs/glob/* /usr/local/cross-tools/orctlibs/.
fi
}
function install_pkg_config {
if [[ ! -f $cachedir/i686-w64-mingw32-pkg-config ]]; then
# If this fails to work because of newlines, be sure you are running this
# script with Bash, and not sh. We should really move this to a separate
# file.
echo -e "#!/bin/sh\nexport PKG_CONFIG_PATH=/usr/local/cross-tools/i686-w64-mingw32/lib/pkgconfig:/usr/local/cross-tools/orctlibs/lib/pkgconfig\npkg-config \$@" > $cachedir/i686-w64-mingw32-pkg-config;
fi
chmod +x $cachedir/i686-w64-mingw32-pkg-config
sudo cp $cachedir/i686-w64-mingw32-pkg-config /usr/local/bin/
ls -al /usr/local/bin | grep pkg-config
cat /usr/local/bin/i686-w64-mingw32-pkg-config
}
function mac_os_install_mingw_32 {
local mingw_name="mingw-w32-bin_i686-darwin"
local mingw_tar="${mingw_name}_20130531.tar.bz2"
@ -162,47 +103,33 @@ if [[ "$(uname)" == "Darwin" ]]; then
brew install jansson sdl2 sdl2_ttf speex --universal
fi
elif [[ $(uname) == "Linux" ]]; then
if [[ -z "$TRAVIS" ]]; then
sudo apt-get install -y binutils-mingw-w64-i686 gcc-mingw-w64-i686 g++-mingw-w64-i686 cmake
if [[ -z "$DISABLE_G2_BUILD" ]]; then
sudo apt-get install -y wine
fi
else
# prevent build.sh from re-doing all the steps again
case "$TARGET" in
"ubuntu_i686")
docker pull openrct2/openrct2:ubuntu_i686
;;
"ubuntu_amd64")
docker pull openrct2/openrct2:ubuntu_amd64
;;
"windows")
docker pull openrct2/openrct2:mingw
;;
"docker32")
docker pull openrct2/openrct2:32bit-only
;;
"docker64")
docker pull openrct2/openrct2:64bit-only
;;
*)
echo "unkown target $TARGET"
exit 1
esac
fi
# prevent build.sh from re-doing all the steps again
case "$TARGET" in
"ubuntu_i686")
docker pull openrct2/openrct2:ubuntu_i686
;;
"ubuntu_amd64")
docker pull openrct2/openrct2:ubuntu_amd64
;;
"windows")
docker pull openrct2/openrct2:mingw-arch
;;
"docker32")
docker pull openrct2/openrct2:32bit-only
;;
"docker64")
docker pull openrct2/openrct2:64bit-only
;;
*)
echo "unkown target $TARGET"
exit 1
esac
fi
if [[ $TARGET == "windows" || $(uname -s) == "Darwin" ]]; then
if [[ $(uname -s) == "Darwin" ]]; then
download_libs
calculate_sha256 "$cachedir/orctlibs.zip" > "$libVFile"
echo "Downloaded library with sha256sum: $(cat "$libVFile")"
# Local libs are required for all targets
# $TARGET == "windows" || $(uname -s) == "Darwin"
fi
if [[ $TARGET == "windows" ]]; then
download_sdl
install_cross_tools
install_pkg_config
# $TARGET == "windows"
# $(uname -s) == "Darwin"
fi

View File

@ -16,6 +16,7 @@
#include "core/FileStream.hpp"
#include "FileClassifier.h"
#include "rct12/SawyerChunkReader.h"
extern "C"
{
@ -26,7 +27,6 @@ extern "C"
static bool TryClassifyAsS6(IStream * stream, ClassifiedFile * result);
static bool TryClassifyAsS4(IStream * stream, ClassifiedFile * result);
static bool TryClassifyAsTD4_TD6(IStream * stream, ClassifiedFile * result);
static bool sawyercoding_try_read_chunk(void * dst, size_t expectedSize, IStream * stream);
bool TryClassifyFile(const std::string &path, ClassifiedFile * result)
{
@ -71,9 +71,10 @@ bool TryClassifyFile(IStream * stream, ClassifiedFile * result)
static bool TryClassifyAsS6(IStream * stream, ClassifiedFile * result)
{
rct_s6_header s6Header;
if (sawyercoding_try_read_chunk(&s6Header, sizeof(rct_s6_header), stream))
try
{
auto chunkReader = SawyerChunkReader(stream);
auto s6Header = chunkReader.ReadChunkAs<rct_s6_header>();
if (s6Header.type == S6_TYPE_SAVEDGAME)
{
result->Type = FILE_TYPE::SAVED_GAME;
@ -85,7 +86,9 @@ static bool TryClassifyAsS6(IStream * stream, ClassifiedFile * result)
result->Version = s6Header.version;
return true;
}
catch (Exception)
{
}
return false;
}
@ -113,7 +116,7 @@ static bool TryClassifyAsS4(IStream * stream, ClassifiedFile * result)
result->Version = version;
return true;
}
return false;
}
@ -145,31 +148,3 @@ static bool TryClassifyAsTD4_TD6(IStream * stream, ClassifiedFile * result)
return success;
}
static bool sawyercoding_try_read_chunk(void * dst, size_t expectedSize, IStream * stream)
{
uint64 originalPosition = stream->GetPosition();
bool success = false;
auto header = stream->ReadValue<sawyercoding_chunk_header>();
switch (header.encoding) {
case CHUNK_ENCODING_NONE:
case CHUNK_ENCODING_RLE:
case CHUNK_ENCODING_RLECOMPRESSED:
case CHUNK_ENCODING_ROTATE:
uint8 * compressedData = Memory::Allocate<uint8>(header.length);
if (stream->TryRead(compressedData, header.length) == header.length)
{
size_t uncompressedLength = sawyercoding_read_chunk_buffer((uint8 *)dst, compressedData, header, expectedSize);
if (uncompressedLength == expectedSize)
{
success = true;
}
}
Memory::Free(compressedData);
break;
}
stream->SetPosition(originalPosition);
return success;
}

View File

@ -36,7 +36,6 @@ namespace Imaging
{
png_structp png_ptr;
png_infop info_ptr;
unsigned int sig_read = 0;
// Setup PNG structures
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
@ -55,6 +54,7 @@ namespace Imaging
// Open PNG file
try
{
unsigned int sig_read = 0;
auto fs = FileStream(path, FILE_MODE_OPEN);
// Set error handling
@ -69,7 +69,7 @@ namespace Imaging
png_set_sig_bytes(png_ptr, sig_read);
// To simplify the reading process, convert 4-16 bit data to 24-32 bit data
png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_PACKING | PNG_TRANSFORM_EXPAND, nullptr);
png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_PACKING | PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_GRAY_TO_RGB, nullptr);
// Read header
png_uint_32 pngWidth, pngHeight;

View File

@ -14,25 +14,30 @@
*****************************************************************************/
#pragma endregion
#include <memory>
#include <string>
#include "core/Console.hpp"
#include "core/File.h"
#include "core/FileStream.hpp"
#include "core/Guard.hpp"
#include "core/String.hpp"
#include "FileClassifier.h"
#include "network/network.h"
#include "object/ObjectRepository.h"
#include "OpenRCT2.h"
#include "ParkImporter.h"
#include "platform/crash.h"
#include "PlatformEnvironment.h"
#include "ride/TrackDesignRepository.h"
#include "scenario/ScenarioRepository.h"
#include "title/TitleScreen.h"
#include "title/TitleSequenceManager.h"
#include "Version.h"
extern "C"
{
#include "audio/audio.h"
#include "config.h"
#include "config/Config.h"
#include "editor.h"
#include "game.h"
#include "interface/chat.h"
@ -43,11 +48,11 @@ extern "C"
#include "object_list.h"
#include "platform/platform.h"
#include "rct1.h"
#include "rct2.h"
#include "rct2/interop.h"
#include "version.h"
}
// The game update inverval in milliseconds, (1000 / 40fps) = 25ms
// The game update interval in milliseconds, (1000 / 40fps) = 25ms
constexpr uint32 UPDATE_TIME_MS = 25;
extern "C"
@ -76,16 +81,14 @@ extern "C"
namespace OpenRCT2
{
static IPlatformEnvironment * _env = nullptr;
static std::string _versionInfo;
static bool _isWindowMinimised;
static uint32 _isWindowMinimisedLastCheckTick;
static uint32 _lastTick;
static uint32 _uncapTick;
/** If set, will end the OpenRCT2 game loop. Intentially private to this module so that the flag can not be set back to false. */
/** If set, will end the OpenRCT2 game loop. Intentionally private to this module so that the flag can not be set back to false. */
static bool _finished;
static void SetVersionInfoString();
static bool ShouldRunVariableFrame();
static void RunGameLoop();
static void RunFixedFrame();
@ -98,11 +101,7 @@ extern "C"
{
void openrct2_write_full_version_info(utf8 * buffer, size_t bufferSize)
{
if (OpenRCT2::_versionInfo.empty())
{
OpenRCT2::SetVersionInfoString();
}
String::Set(buffer, bufferSize, OpenRCT2::_versionInfo.c_str());
String::Set(buffer, bufferSize, gVersionInfoFull);
}
static void openrct2_set_exe_path()
@ -326,6 +325,36 @@ extern "C"
{
OpenRCT2::_finished = true;
}
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;
}
}
namespace OpenRCT2
@ -380,29 +409,6 @@ namespace OpenRCT2
return env;
}
static void SetVersionInfoString()
{
utf8 buffer[256];
size_t bufferSize = sizeof(buffer);
String::Set(buffer, bufferSize, OPENRCT2_NAME ", v" OPENRCT2_VERSION);
if (!String::IsNullOrEmpty(gGitBranch))
{
String::AppendFormat(buffer, bufferSize, "-%s", gGitBranch);
}
if (!String::IsNullOrEmpty(gCommitSha1Short))
{
String::AppendFormat(buffer, bufferSize, " build %s", gCommitSha1Short);
}
if (!String::IsNullOrEmpty(gBuildServer))
{
String::AppendFormat(buffer, bufferSize, " provided by %s", gBuildServer);
}
#if DEBUG
String::AppendFormat(buffer, bufferSize, " (DEBUG)", gBuildServer);
#endif
_versionInfo = buffer;
}
/**
* Run the main game loop until the finished flag is set.
*/
@ -514,50 +520,59 @@ namespace OpenRCT2
ClassifiedFile info;
if (TryClassifyFile(path, &info))
{
if (info.Type == FILE_TYPE::SAVED_GAME)
if (info.Type == FILE_TYPE::SAVED_GAME ||
info.Type == FILE_TYPE::SCENARIO)
{
std::unique_ptr<IParkImporter> parkImporter;
if (info.Version <= 2)
{
if (rct1_load_saved_game(path))
parkImporter.reset(ParkImporter::CreateS4());
}
else
{
parkImporter.reset(ParkImporter::CreateS6());
}
if (info.Type == FILE_TYPE::SAVED_GAME)
{
try
{
parkImporter->LoadSavedGame(path);
parkImporter->Import();
game_fix_save_vars();
sprite_position_tween_reset();
gScreenAge = 0;
gLastAutoSaveUpdate = AUTOSAVE_PAUSE;
game_load_init();
return true;
}
catch (const Exception &)
{
Console::Error::WriteLine("Error loading saved game.");
}
}
else
{
if (game_load_save(path))
{
gFirstTimeSave = 0;
return true;
}
}
Console::Error::WriteLine("Error loading saved game.");
}
else if (info.Type == FILE_TYPE::SCENARIO)
{
if (info.Version <= 2)
{
if (rct1_load_scenario(path))
try
{
parkImporter->LoadScenario(path);
parkImporter->Import();
game_fix_save_vars();
sprite_position_tween_reset();
gScreenAge = 0;
gLastAutoSaveUpdate = AUTOSAVE_PAUSE;
scenario_begin();
return true;
}
}
else
{
if (scenario_load_and_play_from_path(path))
catch (const Exception &)
{
return true;
Console::Error::WriteLine("Error loading scenario.");
}
}
Console::Error::WriteLine("Error loading scenario.");
}
else
{
Console::Error::WriteLine("Invalid file type.");
Console::Error::WriteLine("Invalid file type.");
}
}
else

View File

@ -0,0 +1,78 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include <memory>
#include "core/Path.hpp"
#include "core/String.hpp"
#include "ParkImporter.h"
namespace ParkImporter
{
IParkImporter * Create(const std::string &hintPath)
{
IParkImporter * parkImporter = nullptr;
std::string extension = Path::GetExtension(hintPath);
if (ExtensionIsRCT1(extension))
{
parkImporter = CreateS4();
}
else
{
parkImporter = CreateS6();
}
return parkImporter;
}
bool ExtensionIsRCT1(const std::string &extension)
{
if (String::Equals(extension, ".sc4", true) ||
String::Equals(extension, ".sv4", true))
{
return true;
}
return false;
}
bool ExtensionIsScenario(const std::string &extension)
{
if (String::Equals(extension, ".sc4", true) ||
String::Equals(extension, ".sc6", true))
{
return true;
}
return false;
}
}
extern "C"
{
void park_importer_load_from_stream(void * stream_c, const utf8 * hintPath_c)
{
IStream * stream = (IStream *)stream_c;
std::string hintPath = String::ToStd(hintPath_c);
bool isScenario = ParkImporter::ExtensionIsScenario(hintPath);
auto parkImporter = std::unique_ptr<IParkImporter>(ParkImporter::Create(hintPath));
parkImporter->LoadFromStream((IStream *)stream, isScenario);
parkImporter->Import();
}
bool park_importer_extension_is_scenario(const utf8 * extension)
{
return ParkImporter::ExtensionIsScenario(String::ToStd(extension));
}
}

View File

@ -0,0 +1,64 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#pragma once
#include "common.h"
#ifdef __cplusplus
#include <string>
#include "scenario/ScenarioRepository.h"
interface IStream;
/**
* Interface to import scenarios and saved games.
*/
interface IParkImporter
{
public:
virtual ~IParkImporter() = default;
virtual void Load(const utf8 * path) abstract;
virtual void LoadSavedGame(const utf8 * path) abstract;
virtual void LoadScenario(const utf8 * path) abstract;
virtual void LoadFromStream(IStream * stream, bool isScenario) abstract;
virtual void Import() abstract;
virtual bool GetDetails(scenario_index_entry * dst) abstract;
};
namespace ParkImporter
{
IParkImporter * Create(const std::string &hintPath);
IParkImporter * CreateS4();
IParkImporter * CreateS6();
bool ExtensionIsRCT1(const std::string &extension);
bool ExtensionIsScenario(const std::string &extension);
}
#endif
#ifdef __cplusplus
extern "C"
{
#endif
void park_importer_load_from_stream(void * stream, const utf8 * hintPath);
bool park_importer_extension_is_scenario(const utf8 * extension);
#ifdef __cplusplus
}
#endif

View File

@ -14,36 +14,26 @@
*****************************************************************************/
#pragma endregion
#include <string>
#include "core/String.hpp"
#include "Version.h"
#ifdef OPENRCT2_BUILD_INFO_HEADER
#include OPENRCT2_BUILD_INFO_HEADER
#endif
#ifdef OPENRCT2_BUILD_NUMBER
const char *gBuildNumber = OPENRCT2_BUILD_NUMBER;
#else
const char *gBuildNumber = "";
#endif
#ifdef OPENRCT2_BUILD_SERVER
const char *gBuildServer = OPENRCT2_BUILD_SERVER;
#else
const char *gBuildServer = "";
#endif
const char gVersionInfoFull[] =
OPENRCT2_NAME ", v" OPENRCT2_VERSION
#ifdef OPENRCT2_BRANCH
const char *gGitBranch = OPENRCT2_BRANCH;
#else
const char *gGitBranch = "";
"-" OPENRCT2_BRANCH
#endif
#ifdef OPENRCT2_COMMIT_SHA1
const char *gCommitSha1 = OPENRCT2_COMMIT_SHA1;
#else
const char *gCommitSha1 = "";
#endif
#ifdef OPENRCT2_COMMIT_SHA1_SHORT
const char *gCommitSha1Short = OPENRCT2_COMMIT_SHA1_SHORT;
#else
const char *gCommitSha1Short = "";
" build " OPENRCT2_COMMIT_SHA1_SHORT
#endif
#ifdef OPENRCT2_BUILD_SERVER
" provided by " OPENRCT2_BUILD_SERVER
#endif
#ifdef DEBUG
" (DEBUG)"
#endif
;

View File

@ -14,61 +14,53 @@
*****************************************************************************/
#pragma endregion
#ifndef _VERSION_H_
#define _VERSION_H_
#pragma once
#include "common.h"
#define OPENRCT2_NAME "OpenRCT2"
#define OPENRCT2_VERSION "0.0.6"
#define OPENRCT2_NAME "OpenRCT2"
#define OPENRCT2_VERSION "0.0.7"
#if defined(__amd64__) || defined(_M_AMD64)
#define OPENRCT2_ARCHITECTURE "x86-64"
#define OPENRCT2_ARCHITECTURE "x86-64"
#elif defined(__i386__) || defined(_M_IX86)
#define OPENRCT2_ARCHITECTURE "x86"
#define OPENRCT2_ARCHITECTURE "x86"
#elif defined(__aarch64__)
#define OPENRCT2_ARCHITECTURE "AArch64"
#define OPENRCT2_ARCHITECTURE "AArch64"
#elif defined(__arm__) || defined(_M_ARM)
#define OPENRCT2_ARCHITECTURE "ARMv7"
#define OPENRCT2_ARCHITECTURE "ARMv7"
#elif defined(__powerpc__) || defined(_M_PPC)
#define OPENRCT2_ARCHITECTURE "PowerPC"
#define OPENRCT2_ARCHITECTURE "PowerPC"
#endif
#ifndef OPENRCT2_ARCHITECTURE
#error "OPENRCT2_ARCHITECTURE is undefined. Please add identification."
#error "OPENRCT2_ARCHITECTURE is undefined. Please add identification."
#endif
// Platform
#ifdef __WINDOWS__
#define OPENRCT2_PLATFORM "Windows"
#define OPENRCT2_PLATFORM "Windows"
#endif
#ifdef __LINUX__
#define OPENRCT2_PLATFORM "Linux"
#define OPENRCT2_PLATFORM "Linux"
#endif
#ifdef __MACOSX__
#define OPENRCT2_PLATFORM "macOS"
#define OPENRCT2_PLATFORM "macOS"
#endif
#ifdef __FREEBSD__
#define OPENRCT2_PLATFORM "FreeBSD"
#define OPENRCT2_PLATFORM "FreeBSD"
#endif
#ifndef OPENRCT2_PLATFORM
#error Unknown platform!
#error Unknown platform!
#endif
#define OPENRCT2_TIMESTAMP __DATE__ " " __TIME__
#define OPENRCT2_TIMESTAMP __DATE__ " " __TIME__
#ifdef __cplusplus
extern "C"
{
#endif
// The following constants are for automated build servers
extern const char *gBuildNumber;
extern const char *gBuildServer;
extern const char *gGitBranch;
extern const char *gCommitSha1;
extern const char *gCommitSha1Short;
extern const char gVersionInfoFull[];
#ifdef __cplusplus
}
#endif
#endif

View File

@ -25,7 +25,7 @@
extern "C"
{
#include "../config.h"
#include "../config/Config.h"
#include "../localisation/localisation.h"
#include "../OpenRCT2.h"
#include "../platform/platform.h"

View File

@ -14,16 +14,24 @@
*****************************************************************************/
#pragma endregion
#include "../config.h"
#include "../interface/viewport.h"
#include "../intro.h"
#include "../localisation/language.h"
#include "../core/File.h"
#include "../core/FileStream.hpp"
#include "../core/Memory.hpp"
#include "../core/Util.hpp"
#include "../localisation/string_ids.h"
#include "../OpenRCT2.h"
#include "../util/util.h"
#include "audio.h"
#include "AudioMixer.h"
extern "C"
{
#include "../config/Config.h"
#include "../interface/viewport.h"
#include "../intro.h"
#include "../localisation/language.h"
#include "../util/util.h"
#include "audio.h"
}
typedef struct rct_audio_params {
bool in_range;
sint32 volume;
@ -149,7 +157,7 @@ void audio_populate_devices()
if (gAudioDeviceCount <= 0)
return;
audio_device *systemAudioDevices = malloc(gAudioDeviceCount * sizeof(audio_device));
audio_device * systemAudioDevices = Memory::AllocateArray<audio_device>(gAudioDeviceCount);
for (sint32 i = 0; i < gAudioDeviceCount; i++) {
const char *utf8Name = SDL_GetAudioDeviceName(i, SDL_FALSE);
if (utf8Name == NULL)
@ -159,12 +167,12 @@ void audio_populate_devices()
}
#ifndef __LINUX__
gAudioDeviceCount++;
gAudioDevices = malloc(gAudioDeviceCount * sizeof(audio_device));
gAudioDevices = Memory::AllocateArray<audio_device>(gAudioDeviceCount);
safe_strcpy(gAudioDevices[0].name, language_get_string(STR_OPTIONS_SOUND_VALUE_DEFAULT), AUDIO_DEVICE_NAME_SIZE);
memcpy(&gAudioDevices[1], systemAudioDevices, (gAudioDeviceCount - 1) * sizeof(audio_device));
Memory::CopyArray(&gAudioDevices[1], systemAudioDevices, gAudioDeviceCount - 1);
#else
gAudioDevices = malloc(gAudioDeviceCount * sizeof(audio_device));
memcpy(gAudioDevices, systemAudioDevices, gAudioDeviceCount * sizeof(audio_device));
gAudioDevices = Memory::AllocateArray<audio_device>(gAudioDeviceCount);
Memory::CopyArray(gAudioDevices, systemAudioDevices, gAudioDeviceCount);
#endif // __LINUX__
free(systemAudioDevices);
@ -247,7 +255,7 @@ sint32 audio_play_sound(sint32 soundId, sint32 volume, sint32 pan)
sint32 mixerPan = 0;
if (pan != AUDIO_PLAY_AT_CENTRE) {
sint32 x2 = pan << 16;
uint16 screenWidth = max(64, gScreenWidth);
uint16 screenWidth = Math::Max(64, gScreenWidth);
mixerPan = ((x2 / screenWidth) - 0x8000) >> 4;
}
@ -345,18 +353,23 @@ void audio_init_ride_sounds_and_info()
sint32 deviceNum = 0;
audio_init_ride_sounds(deviceNum);
for (sint32 m = 0; m < countof(gRideMusicInfoList); m++) {
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);
SDL_RWops *file = SDL_RWFromFile(path, "rb");
if (file == NULL)
continue;
uint32 head;
SDL_RWread(file, &head, sizeof(head), 1);
SDL_RWclose(file);
if (head == 0x78787878)
rideMusicInfo->length = 0;
if (File::Exists(path))
{
try
{
auto fs = FileStream(path, FILE_MODE_OPEN);
uint32 head = fs.ReadValue<uint32>();
if (head == 0x78787878) {
rideMusicInfo->length = 0;
}
}
catch (const Exception &)
{
}
}
}
}
@ -385,12 +398,11 @@ void audio_close()
gAudioCurrentDevice = -1;
}
void audio_toggle_all_sounds(){
gConfigSound.sound_enabled = !gConfigSound.sound_enabled;
if (gConfigSound.sound_enabled)
void audio_toggle_all_sounds()
{
if (gGameSoundsOff) {
audio_unpause_sounds();
else {
audio_stop_title_music();
} else {
audio_pause_sounds();
}
}
@ -414,7 +426,7 @@ void audio_stop_vehicle_sounds()
if (gOpenRCT2Headless || gAudioCurrentDevice == -1)
return;
for (sint32 i = 0; i < countof(gVehicleSoundList); i++) {
for (size_t i = 0; i < Util::CountOf(gVehicleSoundList); i++) {
rct_vehicle_sound *vehicleSound = &gVehicleSoundList[i];
if (vehicleSound->id == 0xFFFF)
continue;

View File

@ -15,15 +15,17 @@
#pragma endregion
#include "cheats.h"
#include "config.h"
#include "config/Config.h"
#include "game.h"
#include "interface/window.h"
#include "localisation/date.h"
#include "management/finance.h"
#include "network/network.h"
#include "world/climate.h"
#include "util/util.h"
#include "world/Climate.h"
#include "world/footpath.h"
#include "world/scenery.h"
#include "world/sprite.h"
bool gCheatsSandboxMode = false;
bool gCheatsDisableClearanceChecks = false;
@ -217,7 +219,7 @@ static void cheat_10_minute_inspections()
static void cheat_no_money(bool enabled)
{
if (enabled) {
gParkFlags |= PARK_FLAGS_NO_MONEY;
gParkFlags |= PARK_FLAGS_NO_MONEY;
}
else {
gParkFlags &= ~PARK_FLAGS_NO_MONEY;
@ -234,8 +236,7 @@ static void cheat_no_money(bool enabled)
static void cheat_set_money(money32 amount)
{
money32 money = clamp(INT_MIN, amount, INT_MAX);
gCashEncrypted = ENCRYPT_MONEY(money);
gCashEncrypted = ENCRYPT_MONEY(amount);
window_invalidate_by_class(WC_FINANCES);
window_invalidate_by_class(WC_BOTTOM_TOOLBAR);
@ -244,19 +245,7 @@ static void cheat_set_money(money32 amount)
static void cheat_add_money(money32 amount)
{
money32 currentMoney = DECRYPT_MONEY(gCashEncrypted);
if (amount >= 0) {
if (currentMoney < INT_MAX - amount)
currentMoney += amount;
else
currentMoney = INT_MAX;
}
else {
money32 absAmount = amount * -1;
if (currentMoney > INT_MIN + absAmount)
currentMoney -= absAmount;
else
currentMoney = INT_MIN;
}
currentMoney = add_clamp_money32(currentMoney, amount);
gCashEncrypted = ENCRYPT_MONEY(currentMoney);
@ -277,10 +266,8 @@ static void cheat_clear_loan()
static void cheat_generate_guests(sint32 count)
{
sint32 i;
for (i = 0; i < count; i++)
generate_new_guest();
for (sint32 i = 0; i < count; i++)
park_generate_new_guest();
window_invalidate_by_class(WC_BOTTOM_TOOLBAR);
}
@ -360,6 +347,7 @@ static void cheat_give_all_guests(sint32 object)
static void cheat_remove_all_guests()
{
rct_peep *peep;
rct_vehicle *vehicle;
uint16 spriteIndex, nextSpriteIndex;
for (spriteIndex = gSpriteListHead[SPRITE_LIST_PEEP]; spriteIndex != SPRITE_INDEX_NULL; spriteIndex = nextSpriteIndex) {
@ -370,19 +358,39 @@ static void cheat_remove_all_guests()
}
}
sint32 i;
sint32 rideIndex;
rct_ride *ride;
FOR_ALL_RIDES(i, ride)
FOR_ALL_RIDES(rideIndex, ride)
{
ride_clear_for_construction(i);
ride_set_status(i, RIDE_STATUS_CLOSED);
ride->num_riders = 0;
for (size_t j = 0; j < 4; j++) {
ride->queue_length[j] = 0;
ride->last_peep_in_queue[j] = SPRITE_INDEX_NULL;
for (size_t stationIndex = 0; stationIndex < RCT12_MAX_STATIONS_PER_RIDE; stationIndex++)
{
ride->queue_length[stationIndex] = 0;
ride->last_peep_in_queue[stationIndex] = SPRITE_INDEX_NULL;
}
for (size_t trainIndex = 0; trainIndex < 32; trainIndex++)
{
spriteIndex = ride->vehicles[trainIndex];
while (spriteIndex != SPRITE_INDEX_NULL)
{
vehicle = GET_VEHICLE(spriteIndex);
vehicle->num_peeps = 0;
vehicle->next_free_seat = 0;
for (size_t peepInTrainIndex = 0; peepInTrainIndex < 32; peepInTrainIndex++)
{
vehicle->peep[peepInTrainIndex] = SPRITE_INDEX_NULL;
}
spriteIndex = vehicle->next_vehicle_on_train;
}
}
}
window_invalidate_by_class(WC_RIDE);
gfx_invalidate_screen();
}

View File

@ -110,4 +110,5 @@ namespace CommandLine
exitcode_t HandleCommandDefault();
exitcode_t HandleCommandConvert(CommandLineArgEnumerator * enumerator);
exitcode_t HandleCommandUri(CommandLineArgEnumerator * enumerator);
}

View File

@ -14,12 +14,14 @@
*****************************************************************************/
#pragma endregion
#include <memory>
#include "../common.h"
#include "../core/Console.hpp"
#include "../core/Exception.hpp"
#include "../core/Guard.hpp"
#include "../core/Path.hpp"
#include "../rct1/S4Importer.h"
#include "../ParkImporter.h"
#include "../rct2/S6Exporter.h"
#include "CommandLine.hpp"
extern "C"
@ -101,74 +103,56 @@ exitcode_t CommandLine::HandleCommandConvert(CommandLineArgEnumerator * enumerat
WriteConvertFromAndToMessage(sourceFileType, destinationFileType);
gOpenRCT2Headless = true;
if (!openrct2_initialise()) {
if (!openrct2_initialise())
{
Console::Error::WriteLine("Error while initialising OpenRCT2.");
return EXITCODE_FAIL;
}
if (sourceFileType == FILE_EXTENSION_SV4 ||
sourceFileType == FILE_EXTENSION_SC4)
try
{
auto s4Importer = CreateS4Importer();
try
{
if (sourceFileType == FILE_EXTENSION_SC4)
{
s4Importer->LoadScenario(sourcePath);
}
if (sourceFileType == FILE_EXTENSION_SV4)
{
s4Importer->LoadSavedGame(sourcePath);
}
s4Importer->Import();
if (sourceFileType == FILE_EXTENSION_SC4)
{
// We are converting a scenario, so reset the park
scenario_begin();
}
}
catch (const Exception &ex)
{
Console::Error::WriteLine(ex.GetMessage());
return EXITCODE_FAIL;
}
auto importer = std::unique_ptr<IParkImporter>(ParkImporter::Create(sourcePath));
importer->Load(sourcePath);
importer->Import();
}
else
catch (const Exception &ex)
{
if (sourceFileType == FILE_EXTENSION_SC6)
{
scenario_load_and_play_from_path(sourcePath);
}
if (sourceFileType == FILE_EXTENSION_SV6)
{
game_load_save(sourcePath);
}
Console::Error::WriteLine(ex.GetMessage());
return EXITCODE_FAIL;
}
SDL_RWops* rw = SDL_RWFromFile(destinationPath, "wb+");
if (rw != NULL) {
if (sourceFileType == FILE_EXTENSION_SC4 ||
sourceFileType == FILE_EXTENSION_SC6)
{
// We are converting a scenario, so reset the park
scenario_begin();
}
try
{
auto exporter = std::make_unique<S6Exporter>();
// HACK remove the main window so it saves the park with the
// correct initial view
window_close_by_class(WC_MAIN_WINDOW);
exporter->Export();
if (destinationFileType == FILE_EXTENSION_SC6)
{
scenario_save(rw, 0x80000002);
exporter->SaveScenario(destinationPath);
}
else
{
scenario_save(rw, 0x80000001);
exporter->SaveGame(destinationPath);
}
SDL_RWclose(rw);
Console::WriteLine("Conversion successful!");
}
else
catch (const Exception &ex)
{
Console::Error::WriteLine("Unable to write destination file.");
Console::Error::WriteLine(ex.GetMessage());
return EXITCODE_FAIL;
}
Console::WriteLine("Conversion successful!");
return EXITCODE_OK;
}

View File

@ -20,7 +20,7 @@
extern "C"
{
#include "../config.h"
#include "../config/Config.h"
#include "../platform/crash.h"
}
@ -31,6 +31,7 @@ extern "C"
#include "../network/network.h"
#include "../object/ObjectRepository.h"
#include "../OpenRCT2.h"
#include "../Version.h"
#include "CommandLine.hpp"
#ifdef USE_BREAKPAD
@ -125,6 +126,7 @@ const CommandLineCommand CommandLine::RootCommands[]
DefineCommand("set-rct2", "<path>", StandardOptions, HandleCommandSetRCT2),
DefineCommand("convert", "<source> <destination>", StandardOptions, CommandLine::HandleCommandConvert),
DefineCommand("scan-objects", "<path>", StandardOptions, HandleCommandScanObjects),
DefineCommand("handle-uri", "openrct2://.../", StandardOptions, CommandLine::HandleCommandUri),
#if defined(__WINDOWS__) && !defined(__MINGW32__)
DefineCommand("register-shell", "", RegisterShellOptions, HandleCommandRegisterShell),

View File

@ -40,9 +40,12 @@ static exitcode_t HandleSprite(CommandLineArgEnumerator *argEnumerator);
const CommandLineCommand CommandLine::SpriteCommands[]
{
// Main commands
DefineCommand("details", "<spritefile> [idx]", SpriteOptions, HandleSprite),
DefineCommand("export", "<spritefile> <idx> <output>", SpriteOptions, HandleSprite),
DefineCommand("build", "<spritefile> <resourcedir> [silent]", SpriteOptions, HandleSprite),
DefineCommand("append", "<spritefile> <input>", SpriteOptions, HandleSprite),
DefineCommand("build", "<spritefile> <resourcedir> [silent]", SpriteOptions, HandleSprite),
DefineCommand("create", "<spritefile>", SpriteOptions, HandleSprite),
DefineCommand("details", "<spritefile> [idx]", SpriteOptions, HandleSprite),
DefineCommand("export", "<spritefile> <idx> <output>", SpriteOptions, HandleSprite),
DefineCommand("exportall", "<spritefile> <outputdir>", SpriteOptions, HandleSprite),
CommandTableEnd
};

View File

@ -0,0 +1,108 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include "../core/Console.hpp"
#include "../core/Memory.hpp"
#include "../core/String.hpp"
#include "../network/network.h"
#include "../OpenRCT2.h"
#include "CommandLine.hpp"
static exitcode_t HandleUri(const std::string &uri);
#ifndef DISABLE_NETWORK
static exitcode_t HandleUriJoin(const std::vector<std::string> &args);
static bool TryParseHostnamePort(const std::string &hostnamePort, std::string * outHostname, sint32 * outPort, sint32 defaultPort);
#endif
exitcode_t CommandLine::HandleCommandUri(CommandLineArgEnumerator * enumerator)
{
const utf8 * uri;
if (enumerator->TryPopString(&uri))
{
if (String::StartsWith(uri, "openrct2://"))
{
const utf8 * uriCommand = uri + 11;
return HandleUri(uriCommand);
}
}
Console::Error::WriteLine("Invalid URI");
return EXITCODE_FAIL;
}
static exitcode_t HandleUri(const std::string &uri)
{
exitcode_t result = EXITCODE_CONTINUE;
auto args = String::Split(uri, "/");
if (args.size() > 0)
{
#ifndef DISABLE_NETWORK
std::string arg = args[0];
if (arg == "join")
{
result = HandleUriJoin(args);
}
#endif
}
return result;
}
#ifndef DISABLE_NETWORK
static exitcode_t HandleUriJoin(const std::vector<std::string> &args)
{
std::string hostname;
sint32 port;
if (args.size() > 1 && TryParseHostnamePort(args[1], &hostname, &port, NETWORK_DEFAULT_PORT))
{
// Set the network start configuration
gNetworkStart = NETWORK_MODE_CLIENT;
String::Set(gNetworkStartHost, sizeof(gNetworkStartHost), hostname.c_str());
gNetworkStartPort = port;
return EXITCODE_CONTINUE;
}
else
{
Console::Error::WriteLine("Expected hostname:port after join");
return EXITCODE_FAIL;
}
}
static bool TryParseHostnamePort(const std::string &hostnamePort, std::string * outHostname, sint32 * outPort, sint32 defaultPort)
{
try
{
// Argument is in hostname:port format, so we need to split
std::string hostname = hostnamePort;
sint32 port = defaultPort;
size_t colonIndex = hostnamePort.find_first_of(':');
if (colonIndex != std::string::npos)
{
hostname = hostnamePort.substr(0, colonIndex);
port = std::stoi(hostnamePort.substr(colonIndex + 1));
}
*outPort = port;
*outHostname = hostname;
return true;
}
catch (const std::exception &)
{
return false;
}
}
#endif // DISABLE_NETWORK

View File

@ -37,7 +37,7 @@ typedef struct rct_sprite_file_header {
assert_struct_size(rct_sprite_file_header, 8);
typedef struct rct_sprite_file_palette_entry {
uint8 b, g, r, a;
uint8 b, g, r, a;
} rct_sprite_file_palette_entry;
typedef struct rle_code {
@ -218,7 +218,12 @@ static bool sprite_file_export(sint32 spriteIndex, const char *outPath)
dpi.zoom_level = 0;
memcpy(spriteFilePalette, _standardPalette, 256 * 4);
gfx_rle_sprite_to_buffer(spriteHeader->offset, pixels, (uint8*)spriteFilePalette, &dpi, IMAGE_TYPE_DEFAULT, 0, spriteHeader->height, 0, spriteHeader->width);
if (spriteHeader->flags & G1_FLAG_RLE_COMPRESSION) {
gfx_rle_sprite_to_buffer(spriteHeader->offset, pixels, (uint8*)spriteFilePalette, &dpi, IMAGE_TYPE_DEFAULT, 0, spriteHeader->height, 0, spriteHeader->width);
} else {
gfx_bmp_sprite_to_buffer((uint8*)spriteFilePalette, NULL, spriteHeader->offset, pixels, spriteHeader, &dpi, spriteHeader->height, spriteHeader->width, IMAGE_TYPE_DEFAULT);
}
if (image_io_png_write(&dpi, (rct_palette*)spriteFilePalette, outPath)) {
return true;
@ -527,16 +532,16 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc)
return -1;
}
if (!platform_ensure_directory_exists(argv[2])){
safe_strcpy(outputPath, argv[2], MAX_PATH);
path_end_with_separator(outputPath, MAX_PATH);
if (!platform_ensure_directory_exists(outputPath)){
fprintf(stderr, "Unable to create directory.\n");
return -1;
}
sint32 maxIndex = (sint32)spriteFileHeader.num_entries;
sint32 numbers = (sint32)floor(log(maxIndex));
safe_strcpy(outputPath, argv[2], MAX_PATH);
size_t pathLen = strlen(outputPath);
if (pathLen >= (size_t)(MAX_PATH - numbers - 5)) {

View File

@ -113,6 +113,9 @@ typedef uint8 colour_t;
#endif // __GNUC__
#endif // __cplusplus
// Gets the name of a symbol as a C string
#define nameof(symbol) #symbol
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
#include <unistd.h>
#define STUB() log_warning("Function %s at %s:%d is a stub.\n", __PRETTY_FUNCTION__, __FILE__, __LINE__)
@ -142,8 +145,6 @@ char *strndup(const char *src, size_t size);
#define MAP_ANONYMOUS MAP_ANON
#endif
#include "version.h"
#define OPENRCT2_MASTER_SERVER_URL "https://servers.openrct2.website"
// Time (represented as number of 100-nanosecond intervals since 0001-01-01T00:00:00Z)
@ -222,16 +223,7 @@ typedef uint16 rct_string_id;
#define RESTRICT
#endif
#ifdef __cplusplus
#define assert_struct_size(x, y) static_assert(sizeof(x) == (y), "Improper struct size")
#else
// Visual Studio does not know _Static_assert
#if !defined(_MSC_VER)
#define assert_struct_size(x, y) _Static_assert(sizeof(x) == (y), "Improper struct size")
#else
#define assert_struct_size(x, y)
#endif // !defined(_MSC_VER)
#endif
#ifdef PLATFORM_X86
#ifndef FASTCALL

File diff suppressed because it is too large Load Diff

View File

@ -1,333 +0,0 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include "common.h"
#include "localisation/currency.h"
#include "platform/platform.h"
enum {
CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES = (1 << 0),
CONFIG_FLAG_SHOW_HEIGHT_AS_UNITS = (1 << 1),
CONFIG_FLAG_DISABLE_SMOOTH_LANDSCAPE = (1 << 2),
CONFIG_FLAG_SAVE_PLUGIN_DATA = (1 << 3)
};
enum {
SHORTCUT_CLOSE_TOP_MOST_WINDOW,
SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS,
SHORTCUT_CANCEL_CONSTRUCTION_MODE,
SHORTCUT_PAUSE_GAME,
SHORTCUT_ZOOM_VIEW_OUT,
SHORTCUT_ZOOM_VIEW_IN,
SHORTCUT_ROTATE_VIEW_CLOCKWISE,
SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE,
SHORTCUT_ROTATE_CONSTRUCTION_OBJECT,
SHORTCUT_UNDERGROUND_VIEW_TOGGLE,
SHORTCUT_REMOVE_BASE_LAND_TOGGLE,
SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE,
SHORTCUT_SEE_THROUGH_RIDES_TOGGLE,
SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE,
SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE,
SHORTCUT_INVISIBLE_PEOPLE_TOGGLE,
SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE,
SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE,
SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE,
SHORTCUT_ADJUST_LAND,
SHORTCUT_ADJUST_WATER,
SHORTCUT_BUILD_SCENERY,
SHORTCUT_BUILD_PATHS,
SHORTCUT_BUILD_NEW_RIDE,
SHORTCUT_SHOW_FINANCIAL_INFORMATION,
SHORTCUT_SHOW_RESEARCH_INFORMATION,
SHORTCUT_SHOW_RIDES_LIST,
SHORTCUT_SHOW_PARK_INFORMATION,
SHORTCUT_SHOW_GUEST_LIST,
SHORTCUT_SHOW_STAFF_LIST,
SHORTCUT_SHOW_RECENT_MESSAGES,
SHORTCUT_SHOW_MAP,
SHORTCUT_SCREENSHOT,
// New
SHORTCUT_REDUCE_GAME_SPEED,
SHORTCUT_INCREASE_GAME_SPEED,
SHORTCUT_OPEN_CHEAT_WINDOW,
SHORTCUT_REMOVE_TOP_BOTTOM_TOOLBAR_TOGGLE,
SHORTCUT_SCROLL_MAP_UP,
SHORTCUT_SCROLL_MAP_LEFT,
SHORTCUT_SCROLL_MAP_DOWN,
SHORTCUT_SCROLL_MAP_RIGHT,
SHORTCUT_OPEN_CHAT_WINDOW,
SHORTCUT_QUICK_SAVE_GAME,
SHORTCUT_SHOW_OPTIONS,
SHORTCUT_MUTE_SOUND,
SHORTCUT_WINDOWED_MODE_TOGGLE,
SHORTCUT_SHOW_MULTIPLAYER,
SHORTCUT_PAINT_ORIGINAL_TOGGLE,
SHORTCUT_DEBUG_PAINT_TOGGLE,
SHORTCUT_SEE_THROUGH_PATHS_TOGGLE,
SHORTCUT_COUNT
};
enum {
TEMPERATURE_FORMAT_C,
TEMPERATURE_FORMAT_F
};
enum {
MEASUREMENT_FORMAT_IMPERIAL,
MEASUREMENT_FORMAT_METRIC,
MEASUREMENT_FORMAT_SI
};
enum {
AUTOSAVE_EVERY_MINUTE,
AUTOSAVE_EVERY_5MINUTES,
AUTOSAVE_EVERY_15MINUTES,
AUTOSAVE_EVERY_30MINUTES,
AUTOSAVE_EVERY_HOUR,
AUTOSAVE_NEVER
};
enum {
DATE_FORMAT_DMY,
DATE_FORMAT_MDY,
DATE_FORMAT_YMD,
DATE_FORMAT_YDM
};
enum {
TITLE_SEQUENCE_RCT1,
TITLE_SEQUENCE_RCT1_AA,
TITLE_SEQUENCE_RCT1_AA_LL,
TITLE_SEQUENCE_RCT2,
TITLE_SEQUENCE_OPENRCT2,
TITLE_SEQUENCE_RANDOM
};
enum {
SORT_NAME_ASCENDING,
SORT_NAME_DESCENDING,
SORT_DATE_ASCENDING,
SORT_DATE_DESCENDING,
};
enum {
SCENARIO_SELECT_MODE_DIFFICULTY,
SCENARIO_SELECT_MODE_ORIGIN,
};
enum {
DRAWING_ENGINE_NONE = -1,
DRAWING_ENGINE_SOFTWARE,
DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY,
DRAWING_ENGINE_OPENGL,
};
typedef struct general_configuration {
uint8 play_intro;
uint8 confirmation_prompt;
uint8 screenshot_format;
utf8string rct1_path;
utf8string rct2_path;
sint8 measurement_format;
sint8 temperature_format;
sint8 currency_format;
sint32 custom_currency_rate;
sint8 custom_currency_affix;
utf8string custom_currency_symbol;
sint8 construction_marker_colour;
sint8 edge_scrolling;
sint8 always_show_gridlines;
sint8 landscape_smoothing;
sint8 show_height_as_units;
sint8 save_plugin_data;
uint8 debugging_tools;
//new
uint8 fullscreen_mode;
sint32 fullscreen_width;
sint32 fullscreen_height;
sint32 window_width;
sint32 window_height;
uint16 language;
uint8 window_snap_proximity;
uint8 autosave_frequency;
uint8 drawing_engine;
uint8 uncap_fps;
uint8 test_unfinished_tracks;
uint8 no_test_crashes;
uint8 date_format;
uint8 auto_staff_placement;
uint8 handymen_mow_default;
uint8 default_inspection_interval;
utf8string last_run_version;
uint8 invert_viewport_drag;
uint8 load_save_sort;
uint8 minimize_fullscreen_focus_loss;
uint8 day_night_cycle;
uint8 enable_light_fx;
uint8 upper_case_banners;
uint8 disable_lightning_effect;
uint8 allow_loading_with_incorrect_checksum;
uint8 steam_overlay_pause;
float window_scale;
uint8 scale_quality;
uint8 use_nn_at_integer_scales;
uint8 show_fps;
uint8 trap_cursor;
uint8 auto_open_shops;
uint8 scenario_select_mode;
uint8 scenario_unlocking_enabled;
uint8 scenario_hide_mega_park;
utf8string last_save_game_directory;
utf8string last_save_landscape_directory;
utf8string last_save_scenario_directory;
utf8string last_save_track_directory;
uint8 window_limit;
uint8 zoom_to_cursor;
uint8 render_weather_effects;
uint8 render_weather_gloom;
} general_configuration;
typedef struct interface_configuration {
uint8 toolbar_show_finances;
uint8 toolbar_show_research;
uint8 toolbar_show_cheats;
uint8 toolbar_show_news;
uint8 select_by_track_type;
uint8 console_small_font;
utf8string current_theme_preset;
utf8string current_title_sequence_preset;
uint32 object_selection_filter_flags;
} interface_configuration;
typedef struct sound_configuration {
uint8 master_volume;
uint8 title_music;
uint8 sound_enabled;
uint8 sound_volume;
uint8 ride_music_enabled;
uint8 ride_music_volume;
uint8 audio_focus;
utf8string device;
} sound_configuration;
typedef struct twitch_configuration {
utf8string channel;
uint8 enable_follower_peep_names;
uint8 enable_follower_peep_tracking;
uint8 enable_chat_peep_names;
uint8 enable_chat_peep_tracking;
uint8 enable_news;
} twitch_configuration;
typedef struct network_configuration {
utf8string player_name;
uint32 default_port;
utf8string default_password;
uint8 stay_connected;
uint8 advertise;
uint8 maxplayers;
utf8string server_name;
utf8string server_description;
utf8string server_greeting;
utf8string master_server_url;
utf8string provider_name;
utf8string provider_email;
utf8string provider_website;
uint8 known_keys_only;
uint8 log_chat;
} network_configuration;
typedef struct notification_configuration {
bool park_award;
bool park_marketing_campaign_finished;
bool park_warnings;
bool park_rating_warnings;
bool ride_broken_down;
bool ride_crashed;
bool ride_warnings;
bool ride_researched;
bool guest_warnings;
bool guest_lost;
bool guest_left_park;
bool guest_queuing_for_ride;
bool guest_on_ride;
bool guest_left_ride;
bool guest_bought_item;
bool guest_used_facility;
bool guest_died;
} notification_configuration;
typedef struct font_configuration {
utf8string file_name;
utf8string font_name;
sint8 x_offset;
sint8 y_offset;
uint8 size_tiny;
uint8 size_small;
uint8 size_medium;
uint8 size_big;
uint8 height_tiny;
uint8 height_small;
uint8 height_medium;
uint8 height_big;
} font_configuration;
// Define structures for any other settings here
typedef struct theme_features {
uint8 rct1_ride_lights;
uint8 rct1_park_lights;
uint8 rct1_scenario_font;
} theme_features;
typedef struct shortcut_entry {
uint8 key;
uint8 modifier;
} shortcut_entry;
extern general_configuration gConfigGeneral;
extern interface_configuration gConfigInterface;
extern sound_configuration gConfigSound;
extern twitch_configuration gConfigTwitch;
extern network_configuration gConfigNetwork;
extern notification_configuration gConfigNotifications;
extern font_configuration gConfigFonts;
extern uint16 gShortcutKeys[SHORTCUT_COUNT];
void config_get_default_path(utf8 *outPath, size_t size);
void config_set_defaults();
void config_release();
bool config_open_default();
bool config_save_default();
uint16 getLanguage();
void config_reset_shortcut_keys();
bool config_shortcut_keys_load();
bool config_shortcut_keys_save();
bool config_find_or_browse_install_directory();
void title_sequences_set_default();
void title_sequences_load_presets();
#endif

View File

@ -0,0 +1,713 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include <memory>
#include "../core/Console.hpp"
#include "../core/Exception.hpp"
#include "../core/FileStream.hpp"
#include "../core/Memory.hpp"
#include "../core/Path.hpp"
#include "../core/String.hpp"
#include "../drawing/IDrawingEngine.h"
#include "../interface/window.h"
#include "../network/network.h"
#include "../OpenRCT2.h"
#include "Config.h"
#include "IniReader.hpp"
#include "IniWriter.hpp"
extern "C"
{
#include "../localisation/currency.h"
#include "../localisation/date.h"
#include "../localisation/language.h"
#include "../platform/platform.h"
#include "../scenario/scenario.h"
}
namespace Config
{
#pragma region Enums
static auto Enum_MeasurementFormat = ConfigEnum<sint32>(
{
ConfigEnumEntry<sint32>("IMPERIAL", MEASUREMENT_FORMAT_IMPERIAL),
ConfigEnumEntry<sint32>("METRIC", MEASUREMENT_FORMAT_METRIC),
ConfigEnumEntry<sint32>("SI", MEASUREMENT_FORMAT_SI),
});
static auto Enum_Currency = ConfigEnum<sint32>(
{
ConfigEnumEntry<sint32>("GBP", CURRENCY_POUNDS),
ConfigEnumEntry<sint32>("USD", CURRENCY_DOLLARS),
ConfigEnumEntry<sint32>("FRF", CURRENCY_FRANC),
ConfigEnumEntry<sint32>("DEM", CURRENCY_DEUTSCHMARK),
ConfigEnumEntry<sint32>("JPY", CURRENCY_YEN),
ConfigEnumEntry<sint32>("ESP", CURRENCY_PESETA),
ConfigEnumEntry<sint32>("ITL", CURRENCY_LIRA),
ConfigEnumEntry<sint32>("NLG", CURRENCY_GUILDERS),
ConfigEnumEntry<sint32>("SEK", CURRENCY_KRONA),
ConfigEnumEntry<sint32>("EUR", CURRENCY_EUROS),
ConfigEnumEntry<sint32>("KRW", CURRENCY_WON),
ConfigEnumEntry<sint32>("RUB", CURRENCY_ROUBLE),
ConfigEnumEntry<sint32>("CZK", CURRENCY_CZECH_KORUNA),
ConfigEnumEntry<sint32>("HKD", CURRENCY_HKD),
ConfigEnumEntry<sint32>("TWD", CURRENCY_TWD),
ConfigEnumEntry<sint32>("CNY", CURRENCY_YUAN),
ConfigEnumEntry<sint32>("CUSTOM", CURRENCY_CUSTOM),
});
static auto Enum_CurrencySymbolAffix = ConfigEnum<sint32>(
{
ConfigEnumEntry<sint32>("PREFIX", CURRENCY_PREFIX),
ConfigEnumEntry<sint32>("SUFFIX", CURRENCY_SUFFIX),
});
static auto Enum_DateFormat = ConfigEnum<sint32>(
{
ConfigEnumEntry<sint32>("DD/MM/YY", DATE_FORMAT_DAY_MONTH_YEAR),
ConfigEnumEntry<sint32>("MM/DD/YY", DATE_FORMAT_MONTH_DAY_YEAR),
ConfigEnumEntry<sint32>("YY/MM/DD", DATE_FORMAT_YEAR_MONTH_DAY),
ConfigEnumEntry<sint32>("YY/DD/MM", DATE_FORMAT_YEAR_DAY_MONTH),
});
static auto Enum_DrawingEngine = ConfigEnum<sint32>(
{
ConfigEnumEntry<sint32>("SOFTWARE", DRAWING_ENGINE_SOFTWARE),
ConfigEnumEntry<sint32>("SOFTWARE_HWD", DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY),
ConfigEnumEntry<sint32>("OPENGL", DRAWING_ENGINE_OPENGL),
});
static auto Enum_Temperature = ConfigEnum<sint32>(
{
ConfigEnumEntry<sint32>("CELSIUS", TEMPERATURE_FORMAT_C),
ConfigEnumEntry<sint32>("FAHRENHEIT", TEMPERATURE_FORMAT_F),
});
/**
* Config enum wrapping LanguagesDescriptors.
*/
static class LanguageConfigEnum final : public IConfigEnum<sint32>
{
public:
std::string GetName(sint32 value) const override
{
return LanguagesDescriptors[value].locale;
}
sint32 GetValue(const std::string &key, sint32 defaultValue) const override
{
sint32 i = 0;
for (const auto &langDesc : LanguagesDescriptors)
{
if (String::Equals(key.c_str(), langDesc.locale))
{
return i;
}
i++;
}
return defaultValue;
}
} Enum_LanguageEnum;
#pragma endregion
static void ReadGeneral(IIniReader * reader)
{
if (reader->ReadSection("general"))
{
auto model = &gConfigGeneral;
model->always_show_gridlines = reader->GetBoolean("always_show_gridlines", false);
model->autosave_frequency = reader->GetSint32("autosave", AUTOSAVE_EVERY_5MINUTES);
model->confirmation_prompt = reader->GetBoolean("confirmation_prompt", false);
model->construction_marker_colour = reader->GetBoolean("construction_marker_colour", false);
model->currency_format = reader->GetEnum<sint32>("currency_format", platform_get_locale_currency(), Enum_Currency);
model->custom_currency_rate = reader->GetSint32("custom_currency_rate", 10);
model->custom_currency_affix = reader->GetEnum<sint32>("custom_currency_affix", CURRENCY_SUFFIX, Enum_CurrencySymbolAffix);
model->custom_currency_symbol = reader->GetCString("custom_currency_symbol", "Ctm");
model->edge_scrolling = reader->GetBoolean("edge_scrolling", true);
model->fullscreen_mode = reader->GetSint32("fullscreen_mode", 0);
model->fullscreen_height = reader->GetSint32("fullscreen_height", -1);
model->fullscreen_width = reader->GetSint32("fullscreen_width", -1);
model->rct1_path = reader->GetCString("rct1_path", nullptr);
model->rct2_path = reader->GetCString("game_path", nullptr);
model->landscape_smoothing = reader->GetBoolean("landscape_smoothing", true);
model->language = reader->GetEnum<sint32>("language", platform_get_locale_language(), Enum_LanguageEnum);
model->measurement_format = reader->GetEnum<sint32>("measurement_format", platform_get_locale_measurement_format(), Enum_MeasurementFormat);
model->play_intro = reader->GetBoolean("play_intro", false);
model->save_plugin_data = reader->GetBoolean("save_plugin_data", true);
model->debugging_tools = reader->GetBoolean("debugging_tools", false);
model->show_height_as_units = reader->GetBoolean("show_height_as_units", false);
model->temperature_format = reader->GetEnum<sint32>("temperature_format", platform_get_locale_temperature_format(), Enum_Temperature);
model->window_height = reader->GetSint32("window_height", -1);
model->window_snap_proximity = reader->GetSint32("window_snap_proximity", 5);
model->window_width = reader->GetSint32("window_width", -1);
model->drawing_engine = reader->GetEnum<sint32>("drawing_engine", DRAWING_ENGINE_SOFTWARE, Enum_DrawingEngine);
model->uncap_fps = reader->GetBoolean("uncap_fps", false);
// Default config setting is false until ghost trains are implemented #4540
model->test_unfinished_tracks = reader->GetBoolean("test_unfinished_tracks", false);
model->no_test_crashes = reader->GetBoolean("no_test_crashes", false);
model->date_format = reader->GetEnum<sint32>("date_format", platform_get_locale_date_format(), Enum_DateFormat);
model->auto_staff_placement = reader->GetBoolean("auto_staff", true);
model->handymen_mow_default = reader->GetBoolean("handymen_mow_default", false);
model->default_inspection_interval = reader->GetSint32("default_inspection_interval", 2);
model->last_run_version = reader->GetCString("last_run_version", nullptr);
model->invert_viewport_drag = reader->GetBoolean("invert_viewport_drag", false);
model->load_save_sort = reader->GetSint32("load_save_sort", SORT_NAME_ASCENDING);
model->minimize_fullscreen_focus_loss = reader->GetBoolean("minimize_fullscreen_focus_loss", true);
//Default config setting is false until the games canvas can be separated from the effect
model->day_night_cycle = reader->GetBoolean("day_night_cycle", false);
model->enable_light_fx = reader->GetBoolean("enable_light_fx", false);
model->upper_case_banners = reader->GetBoolean("upper_case_banners", false);
model->disable_lightning_effect = reader->GetBoolean("disable_lightning_effect", false);
model->allow_loading_with_incorrect_checksum = reader->GetBoolean("allow_loading_with_incorrect_checksum", true);
model->steam_overlay_pause = reader->GetBoolean("steam_overlay_pause", true);
model->window_scale = reader->GetFloat("window_scale", 1.0f);
model->scale_quality = reader->GetSint32("scale_quality", 1);
model->use_nn_at_integer_scales = reader->GetBoolean("use_nn_at_integer_scales", true);
model->show_fps = reader->GetBoolean("show_fps", false);
model->trap_cursor = reader->GetBoolean("trap_cursor", false);
model->auto_open_shops = reader->GetBoolean("auto_open_shops", false);
model->scenario_select_mode = reader->GetSint32("scenario_select_mode", SCENARIO_SELECT_MODE_ORIGIN);
model->scenario_unlocking_enabled = reader->GetBoolean("scenario_unlocking_enabled", true);
model->scenario_hide_mega_park = reader->GetBoolean("scenario_hide_mega_park", true);
model->last_save_game_directory = reader->GetCString("last_game_directory", nullptr);
model->last_save_landscape_directory = reader->GetCString("last_landscape_directory", nullptr);
model->last_save_scenario_directory = reader->GetCString("last_scenario_directory", nullptr);
model->last_save_track_directory = reader->GetCString("last_track_directory", nullptr);
model->window_limit = reader->GetSint32("window_limit", WINDOW_LIMIT_MAX);
model->zoom_to_cursor = reader->GetBoolean("zoom_to_cursor", true);
model->render_weather_effects = reader->GetBoolean("render_weather_effects", true);
model->render_weather_gloom = reader->GetBoolean("render_weather_gloom", true);
}
}
static void WriteGeneral(IIniWriter * writer)
{
auto model = &gConfigGeneral;
writer->WriteSection("general");
writer->WriteBoolean("always_show_gridlines", model->always_show_gridlines);
writer->WriteSint32("autosave", model->autosave_frequency);
writer->WriteBoolean("confirmation_prompt", model->confirmation_prompt);
writer->WriteBoolean("construction_marker_colour", model->construction_marker_colour);
writer->WriteEnum<sint32>("currency_format", model->currency_format, Enum_Currency);
writer->WriteSint32("custom_currency_rate", model->custom_currency_rate);
writer->WriteEnum<sint32>("custom_currency_affix", model->custom_currency_affix, Enum_CurrencySymbolAffix);
writer->WriteString("custom_currency_symbol", model->custom_currency_symbol);
writer->WriteBoolean("edge_scrolling", model->edge_scrolling);
writer->WriteSint32("fullscreen_mode", model->fullscreen_mode);
writer->WriteSint32("fullscreen_height", model->fullscreen_height);
writer->WriteSint32("fullscreen_width", model->fullscreen_width);
writer->WriteString("rct1_path", model->rct1_path);
writer->WriteString("game_path", model->rct2_path);
writer->WriteBoolean("landscape_smoothing", model->landscape_smoothing);
writer->WriteEnum<sint32>("language", model->language, Enum_LanguageEnum);
writer->WriteEnum<sint32>("measurement_format", model->measurement_format, Enum_MeasurementFormat);
writer->WriteBoolean("play_intro", model->play_intro);
writer->WriteBoolean("save_plugin_data", model->save_plugin_data);
writer->WriteBoolean("debugging_tools", model->debugging_tools);
writer->WriteBoolean("show_height_as_units", model->show_height_as_units);
writer->WriteEnum<sint32>("temperature_format", model->temperature_format, Enum_Temperature);
writer->WriteSint32("window_height", model->window_height);
writer->WriteSint32("window_snap_proximity", model->window_snap_proximity);
writer->WriteSint32("window_width", model->window_width);
writer->WriteEnum<sint32>("drawing_engine", model->drawing_engine, Enum_DrawingEngine);
writer->WriteBoolean("uncap_fps", model->uncap_fps);
writer->WriteBoolean("test_unfinished_tracks", model->test_unfinished_tracks);
writer->WriteBoolean("no_test_crashes", model->no_test_crashes);
writer->WriteEnum<sint32>("date_format", model->date_format, Enum_DateFormat);
writer->WriteBoolean("auto_staff", model->auto_staff_placement);
writer->WriteBoolean("handymen_mow_default", model->handymen_mow_default);
writer->WriteSint32("default_inspection_interval", model->default_inspection_interval);
writer->WriteString("last_run_version", model->last_run_version);
writer->WriteBoolean("invert_viewport_drag", model->invert_viewport_drag);
writer->WriteSint32("load_save_sort", model->load_save_sort);
writer->WriteBoolean("minimize_fullscreen_focus_loss", model->minimize_fullscreen_focus_loss);
writer->WriteBoolean("day_night_cycle", model->day_night_cycle);
writer->WriteBoolean("enable_light_fx", model->enable_light_fx);
writer->WriteBoolean("upper_case_banners", model->upper_case_banners);
writer->WriteBoolean("disable_lightning_effect", model->disable_lightning_effect);
writer->WriteBoolean("allow_loading_with_incorrect_checksum", model->allow_loading_with_incorrect_checksum);
writer->WriteBoolean("steam_overlay_pause", model->steam_overlay_pause);
writer->WriteFloat("window_scale", model->window_scale);
writer->WriteSint32("scale_quality", model->scale_quality);
writer->WriteBoolean("use_nn_at_integer_scales", model->use_nn_at_integer_scales);
writer->WriteBoolean("show_fps", model->show_fps);
writer->WriteBoolean("trap_cursor", model->trap_cursor);
writer->WriteBoolean("auto_open_shops", model->auto_open_shops);
writer->WriteSint32("scenario_select_mode", model->scenario_select_mode);
writer->WriteBoolean("scenario_unlocking_enabled", model->scenario_unlocking_enabled);
writer->WriteBoolean("scenario_hide_mega_park", model->scenario_hide_mega_park);
writer->WriteString("last_game_directory", model->last_save_game_directory);
writer->WriteString("last_landscape_directory", model->last_save_landscape_directory);
writer->WriteString("last_scenario_directory", model->last_save_scenario_directory);
writer->WriteString("last_track_directory", model->last_save_track_directory);
writer->WriteSint32("window_limit", model->window_limit);
writer->WriteBoolean("zoom_to_cursor", model->zoom_to_cursor);
writer->WriteBoolean("render_weather_effects", model->render_weather_effects);
writer->WriteBoolean("render_weather_gloom", model->render_weather_gloom);
}
static void ReadInterface(IIniReader * reader)
{
if (reader->ReadSection("interface"))
{
auto model = &gConfigInterface;
model->toolbar_show_finances = reader->GetBoolean("toolbar_show_finances", true);
model->toolbar_show_research = reader->GetBoolean("toolbar_show_research", true);
model->toolbar_show_cheats = reader->GetBoolean("toolbar_show_cheats", false);
model->toolbar_show_news = reader->GetBoolean("toolbar_show_news", false);
model->toolbar_show_mute = reader->GetBoolean("toolbar_show_mute", false);
model->select_by_track_type = reader->GetBoolean("select_by_track_type", false);
model->console_small_font = reader->GetBoolean("console_small_font", false);
model->current_theme_preset = reader->GetCString("current_theme", "*RCT2");
model->current_title_sequence_preset = reader->GetCString("current_title_sequence", "*OPENRCT2");
model->object_selection_filter_flags = reader->GetSint32("object_selection_filter_flags", 0x7EF);
}
}
static void WriteInterface(IIniWriter * writer)
{
auto model = &gConfigInterface;
writer->WriteSection("interface");
writer->WriteBoolean("toolbar_show_finances", model->toolbar_show_finances);
writer->WriteBoolean("toolbar_show_research", model->toolbar_show_research);
writer->WriteBoolean("toolbar_show_cheats", model->toolbar_show_cheats);
writer->WriteBoolean("toolbar_show_news", model->toolbar_show_news);
writer->WriteBoolean("toolbar_show_mute", model->toolbar_show_mute);
writer->WriteBoolean("select_by_track_type", model->select_by_track_type);
writer->WriteBoolean("console_small_font", model->console_small_font);
writer->WriteString("current_theme", model->current_theme_preset);
writer->WriteString("current_title_sequence", model->current_title_sequence_preset);
writer->WriteSint32("object_selection_filter_flags", model->object_selection_filter_flags);
}
static void ReadSound(IIniReader * reader)
{
if (reader->ReadSection("sound"))
{
auto model = &gConfigSound;
model->master_volume = reader->GetSint32("master_volume", 100);
model->title_music = reader->GetSint32("title_music", 2);
model->sound_enabled = reader->GetBoolean("sound", true);
model->sound_volume = reader->GetSint32("sound_volume", 100);
model->ride_music_enabled = reader->GetBoolean("ride_music", true);
model->ride_music_volume = reader->GetSint32("ride_music_volume", 100);
model->audio_focus = reader->GetBoolean("audio_focus", false);
model->device = reader->GetCString("audio_device", nullptr);
}
}
static void WriteSound(IIniWriter * writer)
{
auto model = &gConfigSound;
writer->WriteSection("sound");
writer->WriteSint32("master_volume", model->master_volume);
writer->WriteSint32("title_music", model->title_music);
writer->WriteBoolean("sound", model->sound_enabled);
writer->WriteSint32("sound_volume", model->sound_volume);
writer->WriteBoolean("ride_music", model->ride_music_enabled);
writer->WriteSint32("ride_music_volume", model->ride_music_volume);
writer->WriteBoolean("audio_focus", model->audio_focus);
writer->WriteString("audio_device", model->device);
}
static void ReadNetwork(IIniReader * reader)
{
if (reader->ReadSection("network"))
{
auto model = &gConfigNetwork;
model->player_name = reader->GetCString("player_name", "Player");
model->default_port = reader->GetSint32("default_port", NETWORK_DEFAULT_PORT);
model->default_password = reader->GetCString("default_password", nullptr);
model->stay_connected = reader->GetBoolean("stay_connected", true);
model->advertise = reader->GetBoolean("advertise", true);
model->maxplayers = reader->GetSint32("maxplayers", 16);
model->server_name = reader->GetCString("server_name", "Server");
model->server_description = reader->GetCString("server_description", nullptr);
model->server_greeting = reader->GetCString("server_greeting", nullptr);
model->master_server_url = reader->GetCString("master_server_url", nullptr);
model->provider_name = reader->GetCString("provider_name", nullptr);
model->provider_email = reader->GetCString("provider_email", nullptr);
model->provider_website = reader->GetCString("provider_website", nullptr);
model->known_keys_only = reader->GetBoolean("known_keys_only", false);
model->log_chat = reader->GetBoolean("log_chat", false);
}
}
static void WriteNetwork(IIniWriter * writer)
{
auto model = &gConfigNetwork;
writer->WriteSection("network");
writer->WriteString("player_name", model->player_name);
writer->WriteSint32("default_port", model->default_port);
writer->WriteString("default_password", model->default_password);
writer->WriteBoolean("stay_connected", model->stay_connected);
writer->WriteBoolean("advertise", model->advertise);
writer->WriteSint32("maxplayers", model->maxplayers);
writer->WriteString("server_name", model->server_name);
writer->WriteString("server_description", model->server_description);
writer->WriteString("server_greeting", model->server_greeting);
writer->WriteString("master_server_url", model->master_server_url);
writer->WriteString("provider_name", model->provider_name);
writer->WriteString("provider_email", model->provider_email);
writer->WriteString("provider_website", model->provider_website);
writer->WriteBoolean("known_keys_only", model->known_keys_only);
writer->WriteBoolean("log_chat", model->log_chat);
}
static void ReadNotifications(IIniReader * reader)
{
if (reader->ReadSection("notifications"))
{
auto model = &gConfigNotifications;
model->park_award = reader->GetBoolean("park_award", true);
model->park_marketing_campaign_finished = reader->GetBoolean("park_marketing_campaign_finished", true);
model->park_warnings = reader->GetBoolean("park_warnings", true);
model->park_rating_warnings = reader->GetBoolean("park_rating_warnings", true);
model->ride_broken_down = reader->GetBoolean("ride_broken_down", true);
model->ride_crashed = reader->GetBoolean("ride_crashed", true);
model->ride_warnings = reader->GetBoolean("ride_warnings", true);
model->ride_researched = reader->GetBoolean("ride_researched", true);
model->guest_warnings = reader->GetBoolean("guest_warnings", true);
model->guest_lost = reader->GetBoolean("guest_lost", false);
model->guest_left_park = reader->GetBoolean("guest_entered_left_park", true);
model->guest_queuing_for_ride = reader->GetBoolean("guest_queuing_for_ride", true);
model->guest_on_ride = reader->GetBoolean("guest_on_ride", true);
model->guest_left_ride = reader->GetBoolean("guest_left_ride", true);
model->guest_bought_item = reader->GetBoolean("guest_bought_item", true);
model->guest_used_facility = reader->GetBoolean("guest_used_facility", true);
model->guest_died = reader->GetBoolean("guest_died", true);
}
}
static void WriteNotifications(IIniWriter * writer)
{
auto model = &gConfigNotifications;
writer->WriteSection("notifications");
writer->WriteBoolean("park_award", model->park_award);
writer->WriteBoolean("park_marketing_campaign_finished", model->park_marketing_campaign_finished);
writer->WriteBoolean("park_warnings", model->park_warnings);
writer->WriteBoolean("park_rating_warnings", model->park_rating_warnings);
writer->WriteBoolean("ride_broken_down", model->ride_broken_down);
writer->WriteBoolean("ride_crashed", model->ride_crashed);
writer->WriteBoolean("ride_warnings", model->ride_warnings);
writer->WriteBoolean("ride_researched", model->ride_researched);
writer->WriteBoolean("guest_warnings", model->guest_warnings);
writer->WriteBoolean("guest_lost", model->guest_lost);
writer->WriteBoolean("guest_left_park", model->guest_left_park);
writer->WriteBoolean("guest_queuing_for_ride", model->guest_queuing_for_ride);
writer->WriteBoolean("guest_on_ride", model->guest_on_ride);
writer->WriteBoolean("guest_left_ride", model->guest_left_ride);
writer->WriteBoolean("guest_bought_item", model->guest_bought_item);
writer->WriteBoolean("guest_used_facility", model->guest_used_facility);
writer->WriteBoolean("guest_died", model->guest_died);
}
static void ReadTwitch(IIniReader * reader)
{
if (reader->ReadSection("sound"))
{
auto model = &gConfigTwitch;
model->channel = reader->GetCString("channel", nullptr);
model->enable_follower_peep_names = reader->GetBoolean("follower_peep_names", true);
model->enable_follower_peep_tracking = reader->GetBoolean("follower_peep_tracking", false);
model->enable_chat_peep_names = reader->GetBoolean("chat_peep_names", true);
model->enable_chat_peep_tracking = reader->GetBoolean("chat_peep_tracking", true);
model->enable_news = reader->GetBoolean("news", false);
}
}
static void WriteTwitch(IIniWriter * writer)
{
auto model = &gConfigTwitch;
writer->WriteSection("twitch");
writer->WriteString("channel", model->channel);
writer->WriteBoolean("follower_peep_names", model->enable_follower_peep_names);
writer->WriteBoolean("follower_peep_tracking", model->enable_follower_peep_tracking);
writer->WriteBoolean("chat_peep_names", model->enable_chat_peep_names);
writer->WriteBoolean("chat_peep_tracking", model->enable_chat_peep_tracking);
writer->WriteBoolean("news", model->enable_news);
}
static void ReadFont(IIniReader * reader)
{
if (reader->ReadSection("font"))
{
auto model = &gConfigFonts;
model->file_name = reader->GetCString("file_name", nullptr);
model->font_name = reader->GetCString("font_name", nullptr);
model->x_offset = reader->GetSint32("x_offset", false);
model->y_offset = reader->GetSint32("y_offset", true);
model->size_tiny = reader->GetSint32("size_tiny", true);
model->size_small = reader->GetSint32("size_small", false);
model->size_medium = reader->GetSint32("size_medium", false);
model->size_big = reader->GetSint32("size_big", false);
model->height_tiny = reader->GetSint32("height_tiny", false);
model->height_small = reader->GetSint32("height_small", false);
model->height_medium = reader->GetSint32("height_medium", false);
model->height_big = reader->GetSint32("height_big", false);
}
}
static void WriteFont(IIniWriter * writer)
{
auto model = &gConfigFonts;
writer->WriteSection("font");
writer->WriteString("file_name", model->file_name);
writer->WriteString("font_name", model->font_name);
writer->WriteSint32("x_offset", model->x_offset);
writer->WriteSint32("y_offset", model->y_offset);
writer->WriteSint32("size_tiny", model->size_tiny);
writer->WriteSint32("size_small", model->size_small);
writer->WriteSint32("size_medium", model->size_medium);
writer->WriteSint32("size_big", model->size_big);
writer->WriteSint32("height_tiny", model->height_tiny);
writer->WriteSint32("height_small", model->height_small);
writer->WriteSint32("height_medium", model->height_medium);
writer->WriteSint32("height_big", model->height_big);
}
static bool SetDefaults()
{
try
{
auto reader = std::unique_ptr<IIniReader>(CreateDefaultIniReader());
ReadGeneral(reader.get());
ReadInterface(reader.get());
ReadSound(reader.get());
ReadNetwork(reader.get());
ReadNotifications(reader.get());
ReadTwitch(reader.get());
ReadFont(reader.get());
return true;
}
catch (const Exception &)
{
return false;
}
}
static bool ReadFile(const std::string &path)
{
try
{
auto fs = FileStream(path, FILE_MODE_OPEN);
auto reader = std::unique_ptr<IIniReader>(CreateIniReader(&fs));
ReadGeneral(reader.get());
ReadInterface(reader.get());
ReadSound(reader.get());
ReadNetwork(reader.get());
ReadNotifications(reader.get());
ReadTwitch(reader.get());
ReadFont(reader.get());
return true;
}
catch (const Exception &)
{
return false;
}
}
static bool WriteFile(const std::string &path)
{
try
{
auto fs = FileStream(path, FILE_MODE_WRITE);
auto writer = std::unique_ptr<IIniWriter>(CreateIniWriter(&fs));
WriteGeneral(writer.get());
WriteInterface(writer.get());
WriteSound(writer.get());
WriteNetwork(writer.get());
WriteNotifications(writer.get());
WriteTwitch(writer.get());
WriteFont(writer.get());
return true;
}
catch (const Exception &ex)
{
Console::WriteLine("Error saving to '%s'", path.c_str());
Console::WriteLine(ex.GetMessage());
return false;
}
}
/**
* Attempts to find the RCT2 installation directory.
* This should be created from some other resource when OpenRCT2 grows.
* @param resultPath Pointer to where the absolute path of the RCT2 installation directory will be copied to.
* @returns 1 if successful, otherwise 0.
*/
static std::string FindRCT2Path()
{
log_verbose("config_find_rct2_path(...)");
static const utf8 * searchLocations[] =
{
"C:\\GOG Games\\RollerCoaster Tycoon 2 Triple Thrill Pack",
"C:\\Program Files\\Atari\\RollerCoaster Tycoon 2",
"C:\\Program Files\\GalaxyClient\\Games\\RollerCoaster Tycoon 2 Triple Thrill Pack",
"C:\\Program Files\\Infogrames\\RollerCoaster Tycoon 2",
"C:\\Program Files\\Infogrames Interactive\\RollerCoaster Tycoon 2",
"C:\\Program Files\\Steam\\steamapps\\common\\Rollercoaster Tycoon 2",
"C:\\Program Files (x86)\\Atari\\RollerCoaster Tycoon 2",
"C:\\Program Files (x86)\\GalaxyClient\\Games\\RollerCoaster Tycoon 2 Triple Thrill Pack",
"C:\\Program Files (x86)\\Infogrames\\RollerCoaster Tycoon 2",
"C:\\Program Files (x86)\\Infogrames Interactive\\RollerCoaster Tycoon 2",
"C:\\Program Files (x86)\\Steam\\steamapps\\common\\Rollercoaster Tycoon 2"
};
for (const utf8 * location : searchLocations)
{
if (platform_original_game_data_exists(location))
{
return location;
}
}
if (platform_original_game_data_exists(gExePath))
{
return gExePath;
}
return std::string();
}
}
extern "C"
{
GeneralConfiguration gConfigGeneral;
InterfaceConfiguration gConfigInterface;
SoundConfiguration gConfigSound;
TwitchConfiguration gConfigTwitch;
NetworkConfiguration gConfigNetwork;
NotificationConfiguration gConfigNotifications;
FontConfiguration gConfigFonts;
void config_set_defaults()
{
config_release();
Config::SetDefaults();
}
bool config_open(const utf8 * path)
{
config_release();
return Config::ReadFile(path);
}
bool config_save(const utf8 * path)
{
return Config::WriteFile(path);
}
void config_release()
{
SafeFree(gConfigGeneral.rct1_path);
SafeFree(gConfigGeneral.rct2_path);
SafeFree(gConfigGeneral.custom_currency_symbol);
SafeFree(gConfigGeneral.last_save_game_directory);
SafeFree(gConfigGeneral.last_save_landscape_directory);
SafeFree(gConfigGeneral.last_save_scenario_directory);
SafeFree(gConfigGeneral.last_save_track_directory);
SafeFree(gConfigGeneral.last_run_version);
SafeFree(gConfigInterface.current_theme_preset);
SafeFree(gConfigInterface.current_title_sequence_preset);
SafeFree(gConfigSound.device);
SafeFree(gConfigTwitch.channel);
SafeFree(gConfigNetwork.player_name);
SafeFree(gConfigNetwork.default_password);
SafeFree(gConfigNetwork.server_name);
SafeFree(gConfigNetwork.server_description);
SafeFree(gConfigNetwork.server_greeting);
SafeFree(gConfigNetwork.master_server_url);
SafeFree(gConfigNetwork.provider_name);
SafeFree(gConfigNetwork.provider_email);
SafeFree(gConfigNetwork.provider_website);
SafeFree(gConfigFonts.file_name);
SafeFree(gConfigFonts.font_name);
}
void config_get_default_path(utf8 * outPath, size_t size)
{
platform_get_user_directory(outPath, nullptr, size);
Path::Append(outPath, size, "config.ini");
}
bool config_open_default()
{
utf8 path[MAX_PATH];
config_get_default_path(path, sizeof(path));
if (config_open(path))
{
currency_load_custom_currency_config();
return true;
}
return false;
}
bool config_save_default()
{
utf8 path[MAX_PATH];
config_get_default_path(path, sizeof(path));
if (config_save(path))
{
return true;
}
return false;
}
bool config_find_or_browse_install_directory()
{
std::string path = Config::FindRCT2Path();
if (!path.empty())
{
Memory::Free(gConfigGeneral.rct2_path);
gConfigGeneral.rct2_path = String::Duplicate(path.c_str());
}
else
{
if (gOpenRCT2Headless)
{
return false;
}
while (1)
{
platform_show_messagebox("OpenRCT2 needs files from the original RollerCoaster Tycoon 2 in order to work. Please select the directory where you installed RollerCoaster Tycoon 2.");
utf8 * installPath = platform_open_directory_browser("Please select your RCT2 directory");
if (installPath == nullptr)
{
return false;
}
Memory::Free(gConfigGeneral.rct2_path);
gConfigGeneral.rct2_path = installPath;
if (platform_original_game_data_exists(installPath))
{
return true;
}
utf8 message[MAX_PATH];
snprintf(message, MAX_PATH, "Could not find %s" PATH_SEPARATOR "Data" PATH_SEPARATOR "g1.dat at this path", installPath);
platform_show_messagebox(message);
}
}
return true;
}
}

View File

@ -0,0 +1,234 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#pragma once
#include "../common.h"
typedef struct GeneralConfiguration
{
// Paths
utf8 * rct1_path;
utf8 * rct2_path;
// Display
sint32 window_width;
sint32 window_height;
sint32 fullscreen_mode;
sint32 fullscreen_width;
sint32 fullscreen_height;
float window_scale;
sint32 drawing_engine;
sint32 scale_quality;
bool use_nn_at_integer_scales;
bool uncap_fps;
bool show_fps;
bool minimize_fullscreen_focus_loss;
// Map rendering
bool landscape_smoothing;
bool always_show_gridlines;
bool construction_marker_colour;
bool day_night_cycle;
bool enable_light_fx;
bool upper_case_banners;
bool render_weather_effects;
bool render_weather_gloom;
bool disable_lightning_effect;
// Localisation
sint32 language;
sint32 measurement_format;
sint32 temperature_format;
bool show_height_as_units;
sint32 date_format;
sint32 currency_format;
sint32 custom_currency_rate;
sint32 custom_currency_affix;
utf8 * custom_currency_symbol;
// Controls
bool edge_scrolling;
bool trap_cursor;
bool invert_viewport_drag;
bool zoom_to_cursor;
// Miscellaneous
bool play_intro;
sint32 window_snap_proximity;
bool allow_loading_with_incorrect_checksum;
bool save_plugin_data;
bool test_unfinished_tracks;
bool no_test_crashes;
bool debugging_tools;
sint32 autosave_frequency;
bool auto_staff_placement;
bool handymen_mow_default;
bool auto_open_shops;
sint32 default_inspection_interval;
sint32 window_limit;
sint32 scenario_select_mode;
bool scenario_unlocking_enabled;
bool scenario_hide_mega_park;
bool steam_overlay_pause;
bool confirmation_prompt;
sint32 load_save_sort;
utf8 * last_save_game_directory;
utf8 * last_save_landscape_directory;
utf8 * last_save_scenario_directory;
utf8 * last_save_track_directory;
utf8 * last_run_version;
sint32 screenshot_format;
} GeneralConfiguration;
typedef struct InterfaceConfiguration
{
bool toolbar_show_finances;
bool toolbar_show_research;
bool toolbar_show_cheats;
bool toolbar_show_news;
bool toolbar_show_mute;
bool select_by_track_type;
bool console_small_font;
utf8 * current_theme_preset;
utf8 * current_title_sequence_preset;
sint32 object_selection_filter_flags;
} InterfaceConfiguration;
typedef struct SoundConfiguration
{
utf8 * device;
uint8 master_volume;
uint8 title_music;
bool sound_enabled;
uint8 sound_volume;
bool ride_music_enabled;
uint8 ride_music_volume;
bool audio_focus;
} SoundConfiguration;
typedef struct TwitchConfiguration
{
utf8 * channel;
bool enable_follower_peep_names;
bool enable_follower_peep_tracking;
bool enable_chat_peep_names;
bool enable_chat_peep_tracking;
bool enable_news;
} TwitchConfiguration;
typedef struct NetworkConfiguration
{
utf8 * player_name;
sint32 default_port;
utf8 * default_password;
bool stay_connected;
bool advertise;
sint32 maxplayers;
utf8 * server_name;
utf8 * server_description;
utf8 * server_greeting;
utf8 * master_server_url;
utf8 * provider_name;
utf8 * provider_email;
utf8 * provider_website;
bool known_keys_only;
bool log_chat;
} NetworkConfiguration;
typedef struct NotificationConfiguration
{
bool park_award;
bool park_marketing_campaign_finished;
bool park_warnings;
bool park_rating_warnings;
bool ride_broken_down;
bool ride_crashed;
bool ride_warnings;
bool ride_researched;
bool guest_warnings;
bool guest_lost;
bool guest_left_park;
bool guest_queuing_for_ride;
bool guest_on_ride;
bool guest_left_ride;
bool guest_bought_item;
bool guest_used_facility;
bool guest_died;
} NotificationConfiguration;
typedef struct FontConfiguration
{
utf8 * file_name;
utf8 * font_name;
sint32 x_offset;
sint32 y_offset;
sint32 size_tiny;
sint32 size_small;
sint32 size_medium;
sint32 size_big;
sint32 height_tiny;
sint32 height_small;
sint32 height_medium;
sint32 height_big;
} FontConfiguration;
enum SORT
{
SORT_NAME_ASCENDING,
SORT_NAME_DESCENDING,
SORT_DATE_ASCENDING,
SORT_DATE_DESCENDING,
};
enum TEMPERATURE_FORMAT
{
TEMPERATURE_FORMAT_C,
TEMPERATURE_FORMAT_F
};
enum MEASUREMENT_FORMAT
{
MEASUREMENT_FORMAT_IMPERIAL,
MEASUREMENT_FORMAT_METRIC,
MEASUREMENT_FORMAT_SI
};
#ifdef __cplusplus
extern "C"
{
#endif
extern GeneralConfiguration gConfigGeneral;
extern InterfaceConfiguration gConfigInterface;
extern SoundConfiguration gConfigSound;
extern TwitchConfiguration gConfigTwitch;
extern NetworkConfiguration gConfigNetwork;
extern NotificationConfiguration gConfigNotifications;
extern FontConfiguration gConfigFonts;
bool config_open(const utf8 * path);
bool config_save(const utf8 * path);
void config_get_default_path(utf8 *outPath, size_t size);
void config_set_defaults();
void config_release();
bool config_open_default();
bool config_save_default();
bool config_find_or_browse_install_directory();
#ifdef __cplusplus
}
#endif

View File

@ -0,0 +1,79 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#pragma once
#include <initializer_list>
#include <vector>
#include "../core/String.hpp"
template<typename T>
struct ConfigEnumEntry
{
std::string Key;
T Value;
ConfigEnumEntry(const std::string &key, T value)
: Key(key),
Value(value)
{
}
};
template<typename T>
interface IConfigEnum
{
virtual ~IConfigEnum() = default;
virtual std::string GetName(T value) const abstract;
virtual T GetValue(const std::string &key, T defaultValue) const abstract;
};
template<typename T>
class ConfigEnum final : public IConfigEnum<T>
{
private:
std::vector<ConfigEnumEntry<T>> _entries;
public:
ConfigEnum(std::initializer_list<ConfigEnumEntry<T>> entries)
{
_entries = entries;
}
std::string GetName(T value) const override
{
for (const auto &entry : _entries)
{
if (entry.Value == value)
{
return entry.Key;
}
}
return std::string();
}
T GetValue(const std::string &key, T defaultValue) const override
{
for (const auto &entry : _entries)
{
if (String::Equals(entry.Key, key, true))
{
return entry.Value;
}
}
return defaultValue;
}
};

View File

@ -0,0 +1,430 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include <cctype>
#include <initializer_list>
#include <string>
#include <tuple>
#include <unordered_map>
#include <vector>
#include "../common.h"
#include "../core/FileStream.hpp"
#include "../core/String.hpp"
#include "../core/StringBuilder.hpp"
#include "IniReader.hpp"
/**
* Simple tuple (start, length) representing a text span in a buffer.
*/
struct Span
{
size_t Start = 0;
size_t Length = 0;
Span() = default;
Span(size_t start, size_t length)
: Start(start),
Length(length)
{
}
};
/**
* Simple tuple (start, end) inclusive representing a range of lines.
*/
struct LineRange
{
size_t Start = 0;
size_t End = 0;
LineRange() = default;
LineRange(size_t start, size_t end)
: Start(start),
End(end)
{
}
};
struct StringIHash
{
std::size_t operator()(const std::string &s) const
{
typedef std::char_traits<char> Traits;
std::size_t seed = 0;
for (const char &c : s)
{
const Traits::int_type value = std::toupper(Traits::to_int_type(c));
// Simple Hash Combine as used by Boost.Functional/Hash
seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2);
}
return seed;
}
};
struct StringICmp
{
bool operator()(const std::string &a, const std::string &b) const
{
typedef std::char_traits<char> Traits;
if (a.size() != b.size()) return false;
const char *s1 = a.data(), *s2 = b.data();
for (std::size_t i = a.size(); i > 0; --i, ++s1, ++s2)
{
const int c1 = std::toupper(Traits::to_int_type(*s1));
const int c2 = std::toupper(Traits::to_int_type(*s2));
if (c1 != c2) return false;
}
return true;
}
};
class IniReader final : public IIniReader
{
private:
std::vector<uint8> _buffer;
std::vector<Span> _lines;
std::unordered_map<std::string, LineRange, StringIHash, StringICmp> _sections;
std::unordered_map<std::string, std::string, StringIHash, StringICmp> _values;
public:
IniReader(IStream * stream)
{
uint64 length = stream->GetLength() - stream->GetPosition();
_buffer.resize(length);
stream->Read(_buffer.data(), length);
RemoveBOM();
// Ensure there is a null terminator on the end, this is
// mainly for ParseLines's sake
if (_buffer.empty() || _buffer[length - 1] != 0)
{
_buffer.push_back(0);
}
ParseLines();
ParseSections();
}
bool ReadSection(const std::string &name) override
{
auto it = _sections.find(name);
if (it == _sections.end())
{
return false;
}
ParseSectionValues(it->second);
return true;
}
bool GetBoolean(const std::string &name, bool defaultValue) const override
{
bool result = defaultValue;
std::string value;
if (TryGetString(name, &value))
{
result = String::Equals(value, "true", true);
}
return result;
}
sint32 GetSint32(const std::string &name, sint32 defaultValue) const override
{
sint32 result = defaultValue;
std::string value;
if (TryGetString(name, &value))
{
try
{
result = std::stoi(value);
}
catch (std::exception)
{
}
}
return result;
}
float GetFloat(const std::string &name, float defaultValue) const override
{
float result = defaultValue;
std::string value;
if (TryGetString(name, &value))
{
try
{
result = std::stof(value);
}
catch (std::exception)
{
}
}
return result;
}
std::string GetString(const std::string &name, const std::string &defaultValue) const override
{
std::string result;
if (!TryGetString(name, &result))
{
result = defaultValue;
}
return result;
}
bool TryGetString(const std::string &name, std::string * outValue) const override
{
auto it = _values.find(name);
if (it == _values.end())
{
return false;
}
*outValue = it->second;
return true;
}
private:
void RemoveBOM()
{
if (_buffer.size() < 3)
{
return;
}
utf8 * file = (utf8 *)_buffer.data();
utf8 * content = String::SkipBOM(file);
if (file != content)
{
size_t skipLength = content - file;
_buffer.erase(_buffer.begin(), _buffer.begin() + skipLength);
}
}
void ParseLines()
{
size_t lineBegin = 0;
bool onNewLineCh = false;
for (size_t i = 0; i < _buffer.size(); i++)
{
char b = (char)_buffer[i];
if (b == 0 || b == '\n' || b == '\r')
{
if (!onNewLineCh)
{
onNewLineCh = true;
size_t lineEnd = i;
_lines.emplace_back(lineBegin, lineEnd - lineBegin);
}
}
else if (onNewLineCh)
{
onNewLineCh = false;
lineBegin = i;
}
}
}
void ParseSections()
{
std::string sectionName;
LineRange lineRange;
for (size_t i = 0; i < _lines.size(); i++)
{
std::string line = GetLine(i);
line = String::Trim(line);
if (line.size() > 3 && line[0] == '[')
{
size_t endIndex = line.find_first_of(']');
if (endIndex != std::string::npos)
{
// Add last section
if (!sectionName.empty())
{
lineRange.End = i - 1;
_sections[sectionName] = lineRange;
}
// Set up new section
sectionName = line.substr(1, endIndex - 1);
lineRange.Start = i;
}
}
}
// Add final section
if (!sectionName.empty())
{
lineRange.End = _lines.size() - 1;
_sections[sectionName] = lineRange;
}
}
void ParseSectionValues(LineRange range)
{
for (size_t i = range.Start + 1; i <= range.End; i++)
{
ParseValue(i);
}
}
void ParseValue(size_t lineIndex)
{
std::string line = GetLine(lineIndex);
line = TrimComment(line);
// Find assignment character
size_t equalsIndex = line.find_first_of('=');
if (equalsIndex == std::string::npos)
{
return;
}
// Get the key and value
std::string key = String::Trim(line.substr(0, equalsIndex));
std::string value = String::Trim(line.substr(equalsIndex + 1));
value = UnquoteValue(value);
value = UnescapeValue(value);
_values[key] = value;
}
std::string TrimComment(const std::string &s)
{
char inQuotes = 0;
bool escaped = false;
for (size_t i = 0; i < s.size(); i++)
{
char c = s[i];
if (inQuotes == 0 && c == '#' && !escaped)
{
return s.substr(0, i);
}
else if (c == inQuotes && !escaped)
{
inQuotes = 0;
}
else if ((c == '\'' || c == '"') && !escaped)
{
inQuotes = c;
}
escaped = (c == '\\' && !escaped);
}
return s;
}
std::string UnquoteValue(const std::string &s)
{
std::string result = s;
size_t length = s.size();
if (length >= 2)
{
if ((s[0] == '"' || s[0] == '\'') && s[0] == s[length - 1])
{
result = s.substr(1, length - 2);
}
}
return result;
}
std::string UnescapeValue(const std::string &s)
{
if (s.find_first_of('\\') == std::string::npos)
{
return s;
}
bool escaped = false;
auto sb = StringBuilder();
for (char c : s)
{
if (c == '\\' && !escaped)
{
escaped = true;
}
else
{
escaped = false;
sb.Append(&c, 1);
}
}
return std::string(sb.GetString());
}
std::string GetLine(size_t index)
{
utf8 * szBuffer = (utf8 *)_buffer.data();
auto span = _lines[index];
auto line = std::string(szBuffer + span.Start, span.Length);
return line;
}
};
class DefaultIniReader final : public IIniReader
{
public:
bool ReadSection(const std::string &name) override
{
return true;
}
bool GetBoolean(const std::string &name, bool defaultValue) const override
{
return defaultValue;
}
sint32 GetSint32(const std::string &name, sint32 defaultValue) const override
{
return defaultValue;
}
float GetFloat(const std::string &name, float defaultValue) const override
{
return defaultValue;
}
std::string GetString(const std::string &name, const std::string &defaultValue) const override
{
return defaultValue;
}
bool TryGetString(const std::string &name, std::string * outValue) const override
{
return false;
}
};
utf8 * IIniReader::GetCString(const std::string &name, const utf8 * defaultValue) const
{
std::string szValue;
if (!TryGetString(name, &szValue))
{
return String::Duplicate(defaultValue);
}
return String::Duplicate(szValue.c_str());
}
IIniReader * CreateIniReader(IStream * stream)
{
return new IniReader(stream);
}
IIniReader * CreateDefaultIniReader()
{
return new DefaultIniReader();
}

View File

@ -0,0 +1,51 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include <string>
#include "../common.h"
#include "ConfigEnum.hpp"
interface IStream;
interface IIniReader
{
virtual ~IIniReader() = default;
virtual bool ReadSection(const std::string &name) abstract;
virtual bool GetBoolean(const std::string &name, bool defaultValue) const abstract;
virtual sint32 GetSint32(const std::string &name, sint32 defaultValue) const abstract;
virtual float GetFloat(const std::string &name, float defaultValue) const abstract;
virtual std::string GetString(const std::string &name, const std::string &defaultValue) const abstract;
virtual bool TryGetString(const std::string &name, std::string * outValue) const abstract;
template<typename T>
T GetEnum(const std::string &name, T defaultValue, const IConfigEnum<T> &configEnum) const
{
std::string szValue;
if (!TryGetString(name, &szValue))
{
return defaultValue;
}
return configEnum.GetValue(szValue, defaultValue);
}
utf8 * GetCString(const std::string &name, const utf8 * defaultValue) const;
};
IIniReader * CreateIniReader(IStream * stream);
IIniReader * CreateDefaultIniReader();

View File

@ -0,0 +1,108 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include <sstream>
#include "../core/FileStream.hpp"
#include "../platform/platform.h"
#include "IniWriter.hpp"
class IniWriter final : public IIniWriter
{
private:
IStream * _stream;
bool _firstSection = true;
public:
IniWriter(IStream * stream)
: _stream(stream)
{
}
void WriteSection(const std::string &name) override
{
if (!_firstSection)
{
WriteLine();
}
_firstSection = false;
WriteLine("[" + name + "]");
}
void WriteBoolean(const std::string &name, bool value) override
{
WriteProperty(name, value ? "true" : "false");
}
void WriteSint32(const std::string &name, sint32 value) override
{
WriteProperty(name, std::to_string(value));
}
void WriteFloat(const std::string &name, float value) override
{
WriteProperty(name, std::to_string(value));
}
void WriteString(const std::string &name, const std::string &value) override
{
std::ostringstream buffer;
buffer << '"';
for (char c : value)
{
if (c == '\\' || c == '"')
{
buffer << '\\';
}
buffer << c;
}
buffer << '"';
WriteProperty(name, buffer.str());
}
void WriteEnum(const std::string &name, const std::string &key) override
{
WriteProperty(name, key);
}
private:
void WriteProperty(const std::string &name, const std::string &value)
{
WriteLine(name + " = " + value);
}
void WriteLine()
{
_stream->Write(PLATFORM_NEWLINE, String::SizeOf(PLATFORM_NEWLINE));
}
void WriteLine(const std::string &line)
{
_stream->Write(line.c_str(), line.size());
WriteLine();
}
};
void IIniWriter::WriteString(const std::string &name, const utf8 * value)
{
WriteString(name, String::ToStd(value));
}
IIniWriter * CreateIniWriter(IStream * stream)
{
return new IniWriter(stream);
}

View File

@ -0,0 +1,52 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include <string>
#include "../common.h"
#include "ConfigEnum.hpp"
interface IStream;
interface IIniWriter
{
virtual ~IIniWriter() = default;
virtual void WriteSection(const std::string &name) abstract;
virtual void WriteBoolean(const std::string &name, bool value) abstract;
virtual void WriteSint32(const std::string &name, sint32 value) abstract;
virtual void WriteFloat(const std::string &name, float value) abstract;
virtual void WriteString(const std::string &name, const std::string &value) abstract;
virtual void WriteEnum(const std::string &name, const std::string &key) abstract;
template<typename T>
void WriteEnum(const std::string &name, T value, const IConfigEnum<T> &configEnum)
{
std::string key = configEnum.GetName(value);
if (key.empty())
{
WriteSint32(name, value);
}
else
{
WriteEnum(name, key);
}
}
void WriteString(const std::string &name, const utf8 * value);
};
IIniWriter * CreateIniWriter(IStream * stream);

View File

@ -0,0 +1,174 @@
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include "../common.h"
#include "../core/Console.hpp"
#include "../core/FileStream.hpp"
#include "../core/Memory.hpp"
#include "../core/Path.hpp"
#include "../core/String.hpp"
extern "C"
{
#include "../interface/keyboard_shortcut.h"
#include "../platform/platform.h"
}
// Current keyboard shortcuts
uint16 gShortcutKeys[SHORTCUT_COUNT];
namespace KeyboardShortcuts
{
// Default keyboard shortcuts
static const uint16 _defaultShortcutKeys[SHORTCUT_COUNT] =
{
SDL_SCANCODE_BACKSPACE, // SHORTCUT_CLOSE_TOP_MOST_WINDOW
SHIFT | SDL_SCANCODE_BACKSPACE, // SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS
SDL_SCANCODE_ESCAPE, // SHORTCUT_CANCEL_CONSTRUCTION_MODE
SDL_SCANCODE_PAUSE, // SHORTCUT_PAUSE_GAME
SDL_SCANCODE_PAGEUP, // SHORTCUT_ZOOM_VIEW_OUT
SDL_SCANCODE_PAGEDOWN, // SHORTCUT_ZOOM_VIEW_IN
SDL_SCANCODE_RETURN, // SHORTCUT_ROTATE_VIEW_CLOCKWISE
SHIFT | SDL_SCANCODE_RETURN, // SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE
SDL_SCANCODE_Z, // SHORTCUT_ROTATE_CONSTRUCTION_OBJECT
SDL_SCANCODE_1, // SHORTCUT_UNDERGROUND_VIEW_TOGGLE
SDL_SCANCODE_H, // SHORTCUT_REMOVE_BASE_LAND_TOGGLE
SDL_SCANCODE_V, // SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE
SDL_SCANCODE_3, // SHORTCUT_SEE_THROUGH_RIDES_TOGGLE
SDL_SCANCODE_4, // SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE
SDL_SCANCODE_5, // SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE
SDL_SCANCODE_6, // SHORTCUT_INVISIBLE_PEOPLE_TOGGLE
SDL_SCANCODE_8, // SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE
SDL_SCANCODE_9, // SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE
SDL_SCANCODE_0, // SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE
SDL_SCANCODE_F1, // SHORTCUT_ADJUST_LAND
SDL_SCANCODE_F2, // SHORTCUT_ADJUST_WATER
SDL_SCANCODE_F3, // SHORTCUT_BUILD_SCENERY
SDL_SCANCODE_F4, // SHORTCUT_BUILD_PATHS
SDL_SCANCODE_F5, // SHORTCUT_BUILD_NEW_RIDE
SDL_SCANCODE_F, // SHORTCUT_SHOW_FINANCIAL_INFORMATION
SDL_SCANCODE_D, // SHORTCUT_SHOW_RESEARCH_INFORMATION
SDL_SCANCODE_R, // SHORTCUT_SHOW_RIDES_LIST
SDL_SCANCODE_P, // SHORTCUT_SHOW_PARK_INFORMATION
SDL_SCANCODE_G, // SHORTCUT_SHOW_GUEST_LIST
SDL_SCANCODE_S, // SHORTCUT_SHOW_STAFF_LIST
SDL_SCANCODE_M, // SHORTCUT_SHOW_RECENT_MESSAGES
SDL_SCANCODE_TAB, // SHORTCUT_SHOW_MAP
PLATFORM_MODIFIER | SDL_SCANCODE_S, // SHORTCUT_SCREENSHOT
SDL_SCANCODE_MINUS, // SHORTCUT_REDUCE_GAME_SPEED,
SDL_SCANCODE_EQUALS, // SHORTCUT_INCREASE_GAME_SPEED,
PLATFORM_MODIFIER | ALT | SDL_SCANCODE_C, // SHORTCUT_OPEN_CHEAT_WINDOW,
SDL_SCANCODE_T, // SHORTCUT_REMOVE_TOP_BOTTOM_TOOLBAR_TOGGLE,
SDL_SCANCODE_UP, // SHORTCUT_SCROLL_MAP_UP
SDL_SCANCODE_LEFT, // SHORTCUT_SCROLL_MAP_LEFT
SDL_SCANCODE_DOWN, // SHORTCUT_SCROLL_MAP_DOWN
SDL_SCANCODE_RIGHT, // SHORTCUT_SCROLL_MAP_RIGHT
SDL_SCANCODE_C, // SHORTCUT_OPEN_CHAT_WINDOW
PLATFORM_MODIFIER | SDL_SCANCODE_F10, // SHORTCUT_QUICK_SAVE_GAME
SHORTCUT_UNDEFINED, // SHORTCUT_SHOW_OPTIONS
SHORTCUT_UNDEFINED, // SHORTCUT_MUTE_SOUND
ALT | SDL_SCANCODE_RETURN, // SHORTCUT_WINDOWED_MODE_TOGGLE
SHORTCUT_UNDEFINED, // SHORTCUT_SHOW_MULTIPLAYER
SHORTCUT_UNDEFINED, // SHORTCUT_PAINT_ORIGINAL_TOGGLE
SHORTCUT_UNDEFINED, // SHORTCUT_DEBUG_PAINT_TOGGLE
SHORTCUT_UNDEFINED, // SHORTCUT_SEE_THROUGH_PATHS_TOGGLE
SDL_SCANCODE_KP_4, // SHORTCUT_RIDE_CONSTRUCTION_TURN_LEFT
SDL_SCANCODE_KP_6, // SHORTCUT_RIDE_CONSTRUCTION_TURN_RIGHT
SDL_SCANCODE_KP_5, // SHORTCUT_RIDE_CONSTRUCTION_USE_TRACK_DEFAULT
SDL_SCANCODE_KP_2, // SHORTCUT_RIDE_CONSTRUCTION_SLOPE_DOWN
SDL_SCANCODE_KP_8, // SHORTCUT_RIDE_CONSTRUCTION_SLOPE_UP
SDL_SCANCODE_KP_PLUS, // SHORTCUT_RIDE_CONSTRUCTION_CHAIN_LIFT_TOGGLE
SDL_SCANCODE_KP_1, // SHORTCUT_RIDE_CONSTRUCTION_BANK_LEFT
SDL_SCANCODE_KP_3, // SHORTCUT_RIDE_CONSTRUCTION_BANK_RIGHT
SDL_SCANCODE_KP_7, // SHORTCUT_RIDE_CONSTRUCTION_PREVIOUS_TRACK
SDL_SCANCODE_KP_9, // SHORTCUT_RIDE_CONSTRUCTION_NEXT_TRACK
SDL_SCANCODE_KP_0, // SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT
SDL_SCANCODE_KP_MINUS, // SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT
};
constexpr sint32 CURRENT_FILE_VERSION = 1;
static void Reset()
{
Memory::Copy(gShortcutKeys, _defaultShortcutKeys, sizeof(gShortcutKeys));
}
static std::string GetPath()
{
utf8 path[MAX_PATH];
platform_get_user_directory(path, nullptr, sizeof(path));
Path::Append(path, sizeof(path), "hotkeys.cfg");
return path;
}
}
extern "C"
{
void config_reset_shortcut_keys()
{
KeyboardShortcuts::Reset();
}
bool config_shortcut_keys_load()
{
bool result = false;
try
{
std::string path = KeyboardShortcuts::GetPath();
auto fs = FileStream(path, FILE_MODE_OPEN);
uint16 version = fs.ReadValue<uint16>();
if (version == KeyboardShortcuts::CURRENT_FILE_VERSION)
{
for (sint32 i = 0; i < SHORTCUT_COUNT; i++)
{
gShortcutKeys[i] = fs.ReadValue<uint16>();
}
result = true;
}
else
{
result = false;
}
}
catch (const Exception &ex)
{
Console::WriteLine("Error reading shortcut keys: %s", ex.GetMessage());
}
return result;
}
bool config_shortcut_keys_save()
{
bool result = false;
try
{
std::string path = KeyboardShortcuts::GetPath();
auto fs = FileStream(path, FILE_MODE_WRITE);
fs.WriteValue<uint16>(KeyboardShortcuts::CURRENT_FILE_VERSION);
for (sint32 i = 0; i < SHORTCUT_COUNT; i++)
{
fs.WriteValue<uint16>(gShortcutKeys[i]);
}
result = true;
}
catch (const Exception &ex)
{
Console::WriteLine("Error writing shortcut keys: %s", ex.GetMessage());
}
return result;
}
}

View File

@ -22,10 +22,16 @@
extern "C"
{
#include "../platform/platform.h"
#include "../util/util.h"
}
namespace File
{
bool Exists(const std::string &path)
{
return platform_file_exists(path.c_str());
}
bool Copy(const std::string &srcPath, const std::string &dstPath, bool overwrite)
{
return platform_file_copy(srcPath.c_str(), dstPath.c_str(), overwrite);
@ -59,4 +65,39 @@ namespace File
*length = (size_t)fsize;
return result;
}
void WriteAllBytes(const std::string &path, const void * buffer, size_t length)
{
auto fs = FileStream(path, FILE_MODE_WRITE);
fs.Write(buffer, length);
}
}
extern "C"
{
bool readentirefile(const utf8 * path, void * * outBuffer, size_t * outLength)
{
try
{
*outBuffer = File::ReadAllBytes(String::ToStd(path), outLength);
return true;
}
catch (const Exception &)
{
return false;
}
}
bool writeentirefile(const utf8 * path, const void * buffer, size_t length)
{
try
{
File::WriteAllBytes(String::ToStd(path), buffer, length);
return true;
}
catch (const Exception &)
{
return false;
}
}
}

View File

@ -21,8 +21,10 @@
namespace File
{
bool Exists(const std::string &path);
bool Copy(const std::string &srcPath, const std::string &dstPath, bool overwrite);
bool Delete(const std::string &path);
bool Move(const std::string &srcPath, const std::string &dstPath);
void * ReadAllBytes(const std::string &path, size_t * length);
void WriteAllBytes(const std::string &path, const void * buffer, size_t length);
}

View File

@ -20,11 +20,13 @@
#include <SDL.h>
#include "IStream.hpp"
#include "Math.hpp"
enum
{
FILE_MODE_OPEN,
FILE_MODE_WRITE
FILE_MODE_WRITE,
FILE_MODE_APPEND,
};
/**
@ -33,11 +35,12 @@ enum
class FileStream final : public IStream
{
private:
SDL_RWops * _file;
bool _canRead;
bool _canWrite;
bool _disposed;
uint64 _fileSize;
SDL_RWops * _file = 0;
bool _ownsFilePtr = false;
bool _canRead = false;
bool _canWrite = false;
bool _disposed = false;
uint64 _fileSize = 0;
public:
FileStream(const std::string &path, sint32 fileMode) :
@ -55,7 +58,12 @@ public:
_canWrite = false;
break;
case FILE_MODE_WRITE:
mode = "wb";
mode = "w+b";
_canRead = true;
_canWrite = true;
break;
case FILE_MODE_APPEND:
mode = "a";
_canRead = false;
_canWrite = true;
break;
@ -68,8 +76,25 @@ public:
{
throw IOException(SDL_GetError());
}
_fileSize = SDL_RWsize(_file);
_ownsFilePtr = true;
}
_disposed = false;
FileStream(SDL_RWops * ops, sint32 fileMode)
{
_file = ops;
switch (fileMode) {
case FILE_MODE_OPEN:
_canRead = true;
_canWrite = false;
break;
case FILE_MODE_WRITE:
_canRead = true;
_canWrite = true;
break;
default:
throw;
}
_fileSize = SDL_RWsize(_file);
}
@ -78,7 +103,10 @@ public:
if (!_disposed)
{
_disposed = true;
SDL_RWclose(_file);
if (_ownsFilePtr)
{
SDL_RWclose(_file);
}
}
}
@ -127,6 +155,9 @@ public:
{
throw IOException("Unable to write to file.");
}
uint64 position = GetPosition();
_fileSize = Math::Max(_fileSize, position);
}
uint64 TryRead(void * buffer, uint64 length) override

View File

@ -18,20 +18,22 @@
#include <stdarg.h>
#include <stdio.h>
#include "../common.h"
#ifdef __WINDOWS__
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef GetMessage
#endif
#include "../Version.h"
#include "Console.hpp"
#include "Diagnostics.hpp"
#include "Guard.hpp"
#include "String.hpp"
extern "C"
{
#include "../OpenRCT2.h"
void openrct2_assert(bool expression, const char * message, ...)
{
va_list args;
@ -44,6 +46,32 @@ extern "C"
namespace Guard
{
constexpr const utf8 * ASSERTION_MESSAGE = "An assertion failed, please report this to the OpenRCT2 developers.";
// The default behaviour when an assertion is raised.
static ASSERT_BEHAVIOUR _assertBehaviour =
#ifdef __WINDOWS__
ASSERT_BEHAVIOUR::MESSAGE_BOX
#else
ASSERT_BEHAVIOUR::CASSERT
#endif
;
#ifdef __WINDOWS__
static void GetAssertMessage(char * buffer, size_t bufferSize, const char * formattedMessage);
static void ForceCrash();
#endif
ASSERT_BEHAVIOUR GetAssertBehaviour()
{
return _assertBehaviour;
}
void SetAssertBehaviour(ASSERT_BEHAVIOUR behaviour)
{
_assertBehaviour = behaviour;
}
void Assert(bool expression, const char * message, ...)
{
va_list args;
@ -56,47 +84,44 @@ namespace Guard
{
if (expression) return;
Console::Error::WriteLine(ASSERTION_MESSAGE);
Console::Error::WriteLine("Version: %s", gVersionInfoFull);
// This is never freed, but acceptable considering we are about to crash out
utf8 * formattedMessage = nullptr;
if (message != nullptr)
{
Console::Error::WriteLine("Assertion failed:");
Console::Error::WriteLine_VA(message, args);
formattedMessage = String::Format_VA(message, args);
Console::Error::WriteLine(formattedMessage);
}
#ifdef DEBUG
Debug::Break();
#endif
#ifdef __WINDOWS__
char version[128];
openrct2_write_full_version_info(version, sizeof(version));
char buffer[512];
strcpy(buffer, "An assertion failed, please report this to the OpenRCT2 developers.\r\n\r\nVersion: ");
strcat(buffer, version);
if (message != nullptr)
{
strcat(buffer, "\r\n");
char *bufend = (char *)strchr(buffer, 0);
vsnprintf(bufend, sizeof(buffer) - (bufend - buffer), message, args);
}
#ifdef __TEST__
// Abort if we are building for testing
abort();
#else
// Show message box if we are not building for testing
sint32 result = MessageBoxA(nullptr, buffer, OPENRCT2_NAME, MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION);
if (result == IDABORT)
{
#ifdef USE_BREAKPAD
// Force a crash that breakpad will handle allowing us to get a dump
*((void**)0) = 0;
#else
switch (_assertBehaviour) {
case ASSERT_BEHAVIOUR::ABORT:
abort();
break;
default:
case ASSERT_BEHAVIOUR::CASSERT:
assert(false);
#endif
break;
#ifdef __WINDOWS__
case ASSERT_BEHAVIOUR::MESSAGE_BOX:
{
// Show message box if we are not building for testing
char buffer[512];
GetAssertMessage(buffer, sizeof(buffer), formattedMessage);
sint32 result = MessageBoxA(nullptr, buffer, OPENRCT2_NAME, MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION);
if (result == IDABORT)
{
ForceCrash();
}
break;
}
#endif
#else
assert(false);
#endif
}
}
void Fail(const char * message, ...)
@ -111,4 +136,29 @@ namespace Guard
{
Assert_VA(false, message, args);
}
#ifdef __WINDOWS__
static void GetAssertMessage(char * buffer, size_t bufferSize, const char * formattedMessage)
{
String::Set(buffer, bufferSize, ASSERTION_MESSAGE);
String::Append(buffer, bufferSize, "\r\n\r\n");
String::Append(buffer, bufferSize, "Version: ");
String::Append(buffer, bufferSize, gVersionInfoFull);
if (formattedMessage != nullptr)
{
String::Append(buffer, bufferSize, "\r\n");
String::Append(buffer, bufferSize, formattedMessage);
}
}
static void ForceCrash()
{
#ifdef USE_BREAKPAD
// Force a crash that breakpad will handle allowing us to get a dump
*((void**)0) = 0;
#else
assert(false);
#endif
}
#endif
}

View File

@ -27,11 +27,21 @@ void openrct2_assert(bool expression, const char * message, ...);
#include <stdarg.h>
enum class ASSERT_BEHAVIOUR
{
ABORT,
CASSERT,
MESSAGE_BOX,
};
/**
* Utility methods for asserting function parameters.
*/
namespace Guard
{
ASSERT_BEHAVIOUR GetAssertBehaviour();
void SetAssertBehaviour(ASSERT_BEHAVIOUR behaviour);
void Assert(bool expression, const char * message = nullptr, ...);
void Assert_VA(bool expression, const char * message, va_list args);
void Fail(const char * message = nullptr, ...);

View File

@ -24,7 +24,7 @@ MemoryStream::MemoryStream(const MemoryStream &copy)
_dataCapacity = copy._dataCapacity;
_dataSize = copy._dataSize;
if (_access == MEMORY_ACCESS_OWNER)
if (_access == MEMORY_ACCESS::OWNER)
{
_data = Memory::Duplicate(copy._data, _dataCapacity);
_position = (void*)((uintptr_t)_data + copy.GetPosition());
@ -38,7 +38,7 @@ MemoryStream::MemoryStream(size_t capacity)
_position = _data;
}
MemoryStream::MemoryStream(void * data, size_t dataSize, uint32 access)
MemoryStream::MemoryStream(void * data, size_t dataSize, uint8 access)
{
_access = access;
_dataCapacity = dataSize;
@ -48,13 +48,13 @@ MemoryStream::MemoryStream(void * data, size_t dataSize, uint32 access)
}
MemoryStream::MemoryStream(const void * data, size_t dataSize)
: MemoryStream((void *)data, dataSize, MEMORY_ACCESS_READ)
: MemoryStream((void *)data, dataSize, MEMORY_ACCESS::READ)
{
}
MemoryStream::~MemoryStream()
{
if (_access & MEMORY_ACCESS_OWNER)
if (_access & MEMORY_ACCESS::OWNER)
{
Memory::Free(_data);
}
@ -63,25 +63,30 @@ MemoryStream::~MemoryStream()
_data = nullptr;
}
void * MemoryStream::GetData() const
const void * MemoryStream::GetData() const
{
return _data;
}
void * MemoryStream::GetDataCopy() const
{
return Memory::Duplicate(_data, _dataSize);
}
void * MemoryStream::TakeData()
{
_access &= ~MEMORY_ACCESS_OWNER;
_access &= ~MEMORY_ACCESS::OWNER;
return _data;
}
bool MemoryStream::CanRead() const
{
return (_access & MEMORY_ACCESS_READ) != 0;
return (_access & MEMORY_ACCESS::READ) != 0;
}
bool MemoryStream::CanWrite() const
{
return (_access & MEMORY_ACCESS_WRITE) != 0;
return (_access & MEMORY_ACCESS::WRITE) != 0;
}
uint64 MemoryStream::GetLength() const
@ -148,7 +153,7 @@ void MemoryStream::Write(const void * buffer, uint64 length)
uint64 nextPosition = position + length;
if (nextPosition > _dataCapacity)
{
if (_access & MEMORY_ACCESS_OWNER)
if (_access & MEMORY_ACCESS::OWNER)
{
EnsureCapacity((size_t)nextPosition);
}
@ -173,7 +178,9 @@ void MemoryStream::EnsureCapacity(size_t capacity)
newCapacity *= 2;
}
uint64 position = GetPosition();
_dataCapacity = newCapacity;
Memory::Reallocate(_data, _dataCapacity);
_data = Memory::Reallocate(_data, _dataCapacity);
_position = (void *)((uintptr_t)_data + (uintptr_t)position);
}
}

View File

@ -19,34 +19,35 @@
#include "../common.h"
#include "IStream.hpp"
enum MEMORY_ACCESS
namespace MEMORY_ACCESS
{
MEMORY_ACCESS_READ = 1 << 0,
MEMORY_ACCESS_WRITE = 1 << 1,
MEMORY_ACCESS_OWNER = 1 << 2,
constexpr uint8 READ = 1 << 0;
constexpr uint8 WRITE = 1 << 1;
constexpr uint8 OWNER = 1 << 2;
};
/**
* A stream for reading and writing to files. Wraps an SDL_RWops, SDL2's cross platform file stream.
* A stream for reading and writing to a buffer in memory. By default this buffer can grow.
*/
class MemoryStream final : public IStream
{
private:
uint16 _access = MEMORY_ACCESS_READ | MEMORY_ACCESS_WRITE | MEMORY_ACCESS_OWNER;
uint8 _access = MEMORY_ACCESS::READ | MEMORY_ACCESS::WRITE | MEMORY_ACCESS::OWNER;
size_t _dataCapacity = 0;
size_t _dataSize = 0;
void * _data = nullptr;
void * _position = nullptr;
public:
MemoryStream();
MemoryStream() = default;
MemoryStream(const MemoryStream & copy);
explicit MemoryStream(size_t capacity);
MemoryStream(void * data, size_t dataSize, uint32 access = MEMORY_ACCESS_READ);
MemoryStream(void * data, size_t dataSize, uint8 access = MEMORY_ACCESS::READ);
MemoryStream(const void * data, size_t dataSize);
virtual ~MemoryStream();
void * GetData() const;
const void * GetData() const;
void * GetDataCopy() const;
void * TakeData();
///////////////////////////////////////////////////////////////////////////

View File

@ -22,7 +22,7 @@ extern "C"
}
/**
* Class to accuately measure elapsed time with high precision.
* Class to accurately measure elapsed time with high precision.
*/
class Stopwatch final
{

View File

@ -15,6 +15,8 @@
#pragma endregion
#include <cwctype>
#include <stdexcept>
#include <vector>
extern "C"
{
@ -116,6 +118,19 @@ namespace String
}
}
size_t IndexOf(const utf8 * str, utf8 match, size_t startIndex)
{
const utf8 * ch = str + startIndex;
for (; *ch != '\0'; ch++)
{
if (*ch == match)
{
return (size_t)(ch - str);
}
}
return SIZE_MAX;
}
size_t LastIndexOf(const utf8 * str, utf8 match)
{
const utf8 * lastOccurance = nullptr;
@ -213,7 +228,7 @@ namespace String
va_end(args1);
va_end(args2);
// An error occured...
// An error occurred...
return nullptr;
}
@ -229,7 +244,7 @@ namespace String
va_end(args1);
va_end(args2);
// An error occured...
// An error occurred...
return nullptr;
}
}
@ -300,6 +315,78 @@ namespace String
return DiscardUse(ptr, String::Duplicate(replacement));
}
utf8 * Substring(const utf8 * buffer, size_t index)
{
size_t bufferSize = String::SizeOf(buffer);
bool goodSubstring = index <= bufferSize;
Guard::Assert(goodSubstring, "Substring past end of input string.");
// If assertion continues, return empty string to avoid crash
if (!goodSubstring)
{
return String::Duplicate("");
}
return String::Duplicate(buffer + index);
}
utf8 * Substring(const utf8 * buffer, size_t index, size_t size)
{
size_t bufferSize = String::SizeOf(buffer);
bool goodSubstring = index + size <= bufferSize;
Guard::Assert(goodSubstring, "Substring past end of input string.");
// If assertion continues, cap the substring to avoid crash
if (!goodSubstring)
{
if (index >= bufferSize)
{
size = 0;
}
else
{
size = bufferSize - index;
}
}
utf8 * result = Memory::Allocate<utf8>(size + 1);
Memory::Copy(result, buffer + index, size);
result[size] = '\0';
return result;
}
std::vector<std::string> Split(const std::string &s, const std::string &delimiter)
{
if (delimiter.empty())
{
throw std::invalid_argument(nameof(delimiter) " can not be empty.");
}
std::vector<std::string> results;
if (!s.empty())
{
size_t index = 0;
size_t nextIndex;
do
{
nextIndex = s.find(delimiter, index);
std::string value;
if (nextIndex == std::string::npos)
{
value = s.substr(index);
}
else
{
value = s.substr(index, nextIndex - index);
}
results.push_back(value);
index = nextIndex + delimiter.size();
}
while (nextIndex != SIZE_MAX);
}
return results;
}
utf8 * SkipBOM(utf8 * buffer)
{
return (utf8*)SkipBOM((const utf8 *)buffer);
@ -357,7 +444,7 @@ namespace String
firstNonWhitespace != str)
{
size_t newStringSize = ch - firstNonWhitespace;
#if DEBUG
#ifdef DEBUG
size_t currentStringSize = String::SizeOf(str);
Guard::Assert(newStringSize < currentStringSize, GUARD_LINE);
#endif
@ -393,4 +480,35 @@ namespace String
{
return String::Set(buffer, bufferSize, TrimStart(src));
}
std::string Trim(const std::string &s)
{
codepoint_t codepoint;
const utf8 * ch = s.c_str();
const utf8 * nextCh;
const utf8 * startSubstr = nullptr;
const utf8 * endSubstr = nullptr;
while ((codepoint = GetNextCodepoint(ch, &nextCh)) != '\0')
{
bool isWhiteSpace = codepoint <= WCHAR_MAX && iswspace((wchar_t)codepoint);
if (!isWhiteSpace)
{
if (startSubstr == nullptr)
{
startSubstr = ch;
}
endSubstr = ch;
}
ch = nextCh;
}
if (startSubstr == nullptr)
{
// String is all whitespace
return std::string();
}
size_t stringLength = endSubstr - startSubstr + 1;
return std::string(startSubstr, stringLength);
}
}

View File

@ -17,6 +17,7 @@
#pragma once
#include <string>
#include <vector>
#include "../common.h"
namespace String
@ -32,6 +33,7 @@ namespace String
bool Equals(const std::string &a, const std::string &b, bool ignoreCase = false);
bool Equals(const utf8 * a, const utf8 * b, bool ignoreCase = false);
bool StartsWith(const utf8 * str, const utf8 * match, bool ignoreCase = false);
size_t IndexOf(const utf8 * str, utf8 match, size_t startIndex = 0);
size_t LastIndexOf(const utf8 * str, utf8 match);
/**
@ -64,6 +66,22 @@ namespace String
*/
utf8 * DiscardDuplicate(utf8 * * ptr, const utf8 * replacement);
/**
* Creates a new string containing the characters between index and the end of the input string.
*/
utf8 * Substring(const utf8 * buffer, size_t index);
/**
* Creates a new string containing the characters between index and index + size of the input string.
*/
utf8 * Substring(const utf8 * buffer, size_t index, size_t size);
/**
* Splits the given string by a delimiter and returns the values as a new string array.
* @returns the number of values.
*/
std::vector<std::string> Split(const std::string &s, const std::string &delimiter);
utf8 * SkipBOM(utf8 * buffer);
const utf8 * SkipBOM(const utf8 * buffer);
@ -75,4 +93,5 @@ namespace String
utf8 * Trim(utf8 * str);
const utf8 * TrimStart(const utf8 * str);
utf8 * TrimStart(utf8 * buffer, size_t bufferSize, const utf8 * src);
std::string Trim(const std::string &s);
}

View File

@ -16,6 +16,7 @@
#include <zip.h>
#include "IStream.hpp"
#include "MemoryStream.h"
#include "Zip.h"
class ZipArchive final : public IZipArchive
@ -99,6 +100,18 @@ public:
return data;
}
IStream * GetFileStream(const utf8 * path) const override
{
IStream * stream = nullptr;
size_t dataSize;
void * data = GetFileData(path, &dataSize);
if (data != nullptr)
{
stream = new MemoryStream(data, dataSize, MEMORY_ACCESS::READ | MEMORY_ACCESS::OWNER);
}
return stream;
}
void SetFileData(const utf8 * path, void * data, size_t dataSize) override
{
zip_source_t * source = zip_source_buffer(_zip, data, dataSize, 0);

View File

@ -29,6 +29,7 @@ interface IZipArchive
virtual const utf8 * GetFileName(size_t index) const abstract;
virtual uint64 GetFileSize(size_t index) const abstract;
virtual void * GetFileData(const utf8 * path, size_t * outSize) const abstract;
virtual IStream * GetFileStream(const utf8 * path) const abstract;
/**
* Creates or overwrites a file within the zip archive to the given data buffer.

View File

@ -20,8 +20,13 @@
#include <SDL_video.h>
struct rct_drawpixelinfo;
interface IDrawingContext;
enum DRAWING_ENGINE
{
DRAWING_ENGINE_NONE = -1,
DRAWING_ENGINE_SOFTWARE,
DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY,
DRAWING_ENGINE_OPENGL,
};
enum DRAWING_ENGINE_FLAGS
{
@ -33,6 +38,11 @@ enum DRAWING_ENGINE_FLAGS
DEF_DIRTY_OPTIMISATIONS = 1 << 0,
};
#ifdef __cplusplus
struct rct_drawpixelinfo;
interface IDrawingContext;
interface IDrawingEngine
{
virtual ~IDrawingEngine() { }
@ -73,3 +83,5 @@ interface IRainDrawer
sint32 xStart,
sint32 yStart) abstract;
};
#endif

View File

@ -252,7 +252,7 @@ extern "C"
{
if (_allocatedImageCount != 0)
{
#if DEBUG
#ifdef DEBUG
Guard::Assert(_allocatedImageCount == 0, "%u images were not freed", _allocatedImageCount);
#else
Console::Error::WriteLine("%u images were not freed", _allocatedImageCount);

View File

@ -21,7 +21,7 @@
extern "C"
{
#include "../config.h"
#include "../config/Config.h"
#include "../drawing/drawing.h"
#include "../interface/screenshot.h"
#include "../localisation/string_ids.h"

View File

@ -17,9 +17,9 @@
extern "C"
{
#include "../interface/window.h"
#include "../world/climate.h"
#include "../world/Climate.h"
#include "drawing.h"
#include "../config.h"
#include "../config/Config.h"
}
#include "IDrawingEngine.h"

View File

@ -15,6 +15,7 @@
#pragma endregion
#include "../common.h"
#include "../core/Guard.hpp"
#include "../interface/window.h"
#include "../localisation/localisation.h"
#include "../object.h"
@ -518,7 +519,8 @@ void load_palette(){
uint32 palette = 0x5FC;
if ((intptr_t)water_type != -1){
if ((intptr_t)water_type != -1) {
openrct2_assert(water_type->image_id != (uint32)-1, "Failed to load water palette");
palette = water_type->image_id;
}

View File

@ -72,7 +72,7 @@ assert_struct_size(rct_g1_element_32bit, 0x10);
enum {
G1_FLAG_BMP = (1 << 0), // Image data is encoded as raw pixels (no transparancy)
G1_FLAG_BMP = (1 << 0), // Image data is encoded as raw pixels (no transparency)
G1_FLAG_1 = (1 << 1),
G1_FLAG_RLE_COMPRESSION = (1 << 2), // Image data is encoded using RCT2's form of run length encoding
G1_FLAG_HAS_ZOOM_SPRITE = (1 << 4), // Use a different sprite for higher zoom levels
@ -270,7 +270,6 @@ extern sint32 gPickupPeepX;
extern sint32 gPickupPeepY;
extern rct_g1_element *g1Elements;
extern rct_gx g2;
extern rct_drawpixelinfo gScreenDPI;
extern rct_drawpixelinfo gWindowDPI;
@ -318,10 +317,12 @@ void gfx_unload_g1();
void gfx_unload_g2();
void gfx_unload_csg();
rct_g1_element* gfx_get_g1_element(sint32 image_id);
bool is_csg_loaded();
uint32 gfx_object_allocate_images(const rct_g1_element * images, uint32 count);
void gfx_object_free_images(uint32 baseImageId, uint32 count);
void gfx_object_check_all_images_freed();
void sub_68371D();
void FASTCALL gfx_bmp_sprite_to_buffer(uint8* palette_pointer, uint8* unknown_pointer, uint8* source_pointer, uint8* dest_pointer, rct_g1_element* source_image, rct_drawpixelinfo *dest_dpi, sint32 height, sint32 width, sint32 image_type);
void FASTCALL gfx_rle_sprite_to_buffer(const uint8* RESTRICT source_bits_pointer, uint8* RESTRICT dest_bits_pointer, const uint8* RESTRICT palette_pointer, const rct_drawpixelinfo * RESTRICT dpi, sint32 image_type, sint32 source_y_start, sint32 height, sint32 source_x_start, sint32 width);
void FASTCALL gfx_draw_sprite(rct_drawpixelinfo *dpi, sint32 image_id, sint32 x, sint32 y, uint32 tertiary_colour);
void FASTCALL gfx_draw_glpyh(rct_drawpixelinfo *dpi, sint32 image_id, sint32 x, sint32 y, uint8 * palette);

View File

@ -23,12 +23,13 @@
extern "C"
{
#include "../../config.h"
#include "../../config/Config.h"
#include "../../game.h"
#include "../../interface/screenshot.h"
#include "../../interface/viewport.h"
#include "../../interface/window.h"
#include "../../intro.h"
#include "../../platform/platform.h"
#include "../../rct2.h"
#include "../drawing.h"
#include "../lightfx.h"
@ -185,7 +186,6 @@ class SoftwareDrawingEngine final : public IDrawingEngine
private:
bool _hardwareDisplay;
SDL_Window * _window = nullptr;
SDL_Surface * _surface = nullptr;
SDL_Surface * _RGBASurface = nullptr;
SDL_Palette * _palette = nullptr;
@ -244,7 +244,11 @@ public:
void Initialise(SDL_Window * window) override
{
_window = window;
if (_hardwareDisplay)
{
// Try to create the accelerated renderer.
_sdlRenderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
}
}
void Resize(uint32 width, uint32 height) override
@ -254,15 +258,11 @@ public:
SDL_FreePalette(_palette);
SDL_DestroyTexture(_screenTexture);
SDL_FreeFormat(_screenTextureFormat);
SDL_DestroyRenderer(_sdlRenderer);
if (_hardwareDisplay)
if (_sdlRenderer != nullptr)
{
_sdlRenderer = SDL_CreateRenderer(_window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
SDL_RendererInfo rendererInfo;
SDL_GetRendererInfo(_sdlRenderer, &rendererInfo);
uint32 pixelFormat = SDL_PIXELFORMAT_UNKNOWN;
for (uint32 i = 0; i < rendererInfo.num_texture_formats; i++)
{
@ -310,7 +310,7 @@ public:
void SetPalette(SDL_Color * palette) override
{
if (_hardwareDisplay)
if (_sdlRenderer != nullptr)
{
if (_screenTextureFormat != nullptr)
{
@ -416,7 +416,7 @@ public:
rct2_draw(&_bitsDPI);
}
if (_hardwareDisplay)
if (_sdlRenderer != nullptr)
{
DisplayViaTexture();
}
@ -572,7 +572,7 @@ private:
static void ResetWindowVisbilities()
{
// reset window visibilty status to unknown
// reset window visibility status to unknown
for (rct_window *w = g_window_list; w < gWindowNextSlot; w++)
{
w->visibility = VC_UNKNOWN;

View File

@ -47,11 +47,11 @@ IDrawingEngine * DrawingEngineFactory::CreateOpenGL()
#include "../../IDrawingContext.h"
#include "../../IDrawingEngine.h"
#include "../../Rain.h"
#include "../../../config.h"
#include "../../../config/Config.h"
extern "C"
{
#include "../../../config.h"
#include "../../../config/Config.h"
#include "../../../interface/screenshot.h"
#include "../../../interface/window.h"
#include "../../../intro.h"

View File

@ -23,7 +23,7 @@
#include "../interface/viewport.h"
#include "../interface/window.h"
#include "../paint/map_element/map_element.h"
#include "../world/climate.h"
#include "../world/Climate.h"
#include "drawing.h"
#include "lightfx.h"
@ -296,9 +296,9 @@ void lightfx_prepare_light_list()
// log_warning("[%i, %i]", dpi->x, dpi->y);
mapCoord.x = _unk9AC14C + tileOffsetX;
mapCoord.y = _unk9AC14E + tileOffsetY;
interactionType = _unk9AC148;
mapCoord.x = _interactionMapX + tileOffsetX;
mapCoord.y = _interactionMapY + tileOffsetY;
interactionType = _interactionSpriteType;
mapElement = RCT2_GLOBAL(0x9AC150, rct_map_element*);
#endif //LIGHTFX_UNKNOWN_PART_1

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