Merge branch 'develop' into master
|
@ -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 -->
|
||||
|
|
|
@ -8,7 +8,7 @@ sudo: required
|
|||
dist: trusty
|
||||
env:
|
||||
global:
|
||||
- OPENRCT2_VERSION="0.0.6.0"
|
||||
- OPENRCT2_VERSION="0.0.7"
|
||||
|
||||
matrix:
|
||||
include:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 = (
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 #
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 #
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 l’actuel
|
||||
STR_6029 :Construction de manège - Démolir l’actuel
|
||||
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 #
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
#############
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 :콩가 뱀장어 코스터
|
||||
|
|
|
@ -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 :Kø
|
||||
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 :På {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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 #
|
||||
|
|
10084
data/language/ru-RU.txt
|
@ -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 #
|
||||
|
|
|
@ -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}没有雇佣机械师!
|
||||
|
||||
|
||||
|
||||
#############
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
|
@ -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>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Last updated: 2017-01-29
|
||||
Release version: 0.0.6.0
|
||||
Release version: 0.0.7.0
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
|
@ -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'">
|
||||
|
|
|
@ -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 "$(OutputCom)"" />
|
||||
<Exec Command="editbin /subsystem:windows "$(OutputExe)"" />
|
||||
</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)"
|
||||
|
|
20
openrct2.sln
|
@ -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
|
||||
|
|
12
readme.md
|
@ -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.
|
||||
|
||||
|
|
After Width: | Height: | Size: 113 B |
After Width: | Height: | Size: 428 B |
After Width: | Height: | Size: 438 B |
After Width: | Height: | Size: 433 B |
After Width: | Height: | Size: 388 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 297 B |
After Width: | Height: | Size: 283 B |
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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
|
||||
;
|
|
@ -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
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
extern "C"
|
||||
{
|
||||
#include "../config.h"
|
||||
#include "../config/Config.h"
|
||||
#include "../localisation/localisation.h"
|
||||
#include "../OpenRCT2.h"
|
||||
#include "../platform/platform.h"
|
||||
|
|
|
@ -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;
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -110,4 +110,5 @@ namespace CommandLine
|
|||
exitcode_t HandleCommandDefault();
|
||||
|
||||
exitcode_t HandleCommandConvert(CommandLineArgEnumerator * enumerator);
|
||||
exitcode_t HandleCommandUri(CommandLineArgEnumerator * enumerator);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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)) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
};
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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, ...);
|
||||
|
|
|
@ -24,7 +24,7 @@ MemoryStream::MemoryStream(const MemoryStream ©)
|
|||
_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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|