Compare commits

...

995 Commits

Author SHA1 Message Date
Arnold Zhou 0254b570d8
Dukvalue uint int fixes 2024-06-06 21:39:22 +02:00
Stephan Spengler 71a8eee5c6
Fix #21987: API cannot handle negative removal prices 2024-06-06 12:01:51 +02:00
spacek531 a25daf2fc1
Small max speed changes 2024-06-05 02:45:44 +02:00
spacek531 4ea55ef415
Change ScVehicle::isReversed_get/set to template function 2024-06-04 13:06:20 +02:00
Arnold Zhou 63d1259fd7
Fix missing tooltip for Enlarged UI option 2024-06-04 12:09:03 +02:00
Michael Steenbeek 8a93ce1714
Merge pull request #22109 from Gymnasiast/refactor/tunnels
Refactor tunnels
2024-06-03 23:01:43 +02:00
Gymnasiast 337707c889
Prefix Tunnel.{cpp,h} with Paint. 2024-06-03 22:43:43 +02:00
Gymnasiast eb1bb3b985
Remove no longer required bounds check 2024-06-03 22:42:20 +02:00
Gymnasiast 8c1a841a7f
Refactor tunnels 2024-06-03 22:42:20 +02:00
Gymnasiast 7e9110b35b
Create TunnelDescriptor 2024-06-03 22:42:20 +02:00
Michael Steenbeek d4f97d3875
Update objects release to v1.4.6 2024-06-01 22:17:19 +02:00
OpenRCT2 git bot 965b8434dd Merge Localisation/master into OpenRCT2/develop 2024-06-01 04:02:10 +00:00
Michael Steenbeek 3e77adc169
Fix support type of Monorail Cycles (#22135) 2024-05-31 14:11:37 +02:00
OpenRCT2 git bot a177938fdb Merge Localisation/master into OpenRCT2/develop 2024-05-31 04:02:05 +00:00
OpenRCT2 git bot bf1d69b309 Merge Localisation/master into OpenRCT2/develop 2024-05-30 04:02:08 +00:00
shakthi124 7fb3022f32
Close #13047: De-duplicate track type normalisation in TrackRemoveAction
Co-authored-by: Gymnasiast <Gymnasiast@users.noreply.github.com>
2024-05-29 20:54:41 +00:00
Stephan Spengler 73043106ed
[Plugin] Add banner index to banner creation result 2024-05-29 22:35:35 +02:00
Aaron van Geffen c00fe1e7d6
Rework (preloader) scene completion functionality (#22122)
* Remove the need for Scene::GetCompletionScene

* Replace SetCompletionScene with SetOnComplete

* Normalise return type for GetPreloaderScene

* Rename 'onFinish' to 'onComplete' for consistency
2024-05-29 22:13:03 +02:00
Aaron van Geffen 7c9b27f57a
Balance item groups in the load/save menu (#22108) 2024-05-29 15:39:33 +02:00
spacek531 94750f4e34
Add plugin API to VehicleCrashedParticle 2024-05-29 12:32:41 +02:00
OpenRCT2 git bot 37b0dfcb16 Merge Localisation/master into OpenRCT2/develop 2024-05-29 04:02:12 +00:00
Michael Steenbeek fc0b5fde27
Fix #13234: Wrong vehicle weight after using Remove All Guests cheat 2024-05-29 01:29:43 +02:00
Michael Steenbeek 6ac6db489c
Fix text colour in Recent Messages 2024-05-28 22:08:24 +00:00
Die4Ever a50fa5e04b
Increase socket buffer size when receiving data 2024-05-29 00:00:32 +02:00
Aaron van Geffen f703413dca
Prevent going out of bounds when listing 'peep' entertainers (#22114)
* Prevent going out of bounds for 'peep' entertainers

* Show 'edited' entertainers as peeps in staff list
2024-05-28 17:55:16 +02:00
Arnold Zhou 01319ff352
Expose guest's favourite ride (ID) to plugin API 2024-05-27 15:18:02 +02:00
Michael Steenbeek a985931910
Merge pull request #22110 from Harry-Hopkinson/refactor-constant-notation
Refactor constant notation to use kCamelCase
2024-05-27 13:15:08 +02:00
Harry-Hopkinson 2a027f4269 Rename CheatsMaxOperatingLimit to kCheatsMaxOperatingLimit 2024-05-27 08:31:07 +00:00
Harry-Hopkinson 900b7a15d7 Rename MaxWaitingTime to kMaxWaitingTime 2024-05-27 08:27:18 +00:00
Harry-Hopkinson 7fa27912ac Rename MaxParkEntrances to kMaxParkEntrances 2024-05-27 08:00:02 +00:00
Harry-Hopkinson 62618edd9f Rename MaxPeepSpawns to kMaxPeepSpawns 2024-05-27 07:57:59 +00:00
Harry-Hopkinson f4ce81ac6d Rename DowntimeHistorySize to kDowntimeHistorySize 2024-05-27 07:55:56 +00:00
Harry-Hopkinson c489d6288a Rename NumColourSchemes to kNumColourSchemes 2024-05-27 07:52:32 +00:00
Harry-Hopkinson c829854b88 Rename MaxAwards to kMaxAwards 2024-05-27 07:42:25 +00:00
Harry-Hopkinson 1cca5d7ec3 Rename MaxCircuitsPerRide to kMaxCircuitsPerRide 2024-05-27 07:38:57 +00:00
Harry-Hopkinson a7be543fc3 Rename MaxVehicleColours to kMaxVehicleColours 2024-05-27 07:32:12 +00:00
Harry-Hopkinson 84bdd12008 Rename MaxCarsPerTrain to kMaxTrainsPerRide 2024-05-27 07:25:48 +00:00
OpenRCT2 git bot 5e9cdbf363 Merge Localisation/master into OpenRCT2/develop 2024-05-27 04:02:15 +00:00
Harry Hopkinson 68f2b0f207
Close #18829: Add g1 icons to scripting 2024-05-26 21:48:42 +02:00
Harry Hopkinson 3c04e67ece
Refactor constant notation in Limits.h 2024-05-26 17:54:31 +02:00
Michael Steenbeek d7f6baf307
Fix #22078: graphical issues on diagonal flat Side Friction
Caused by overzealous cleaning.
2024-05-26 17:48:54 +02:00
Michael Steenbeek 0977e7c724
Merge pull request #21991 from Gymnasiast/fix/19870
Close #19870: Make new colours compatible with UI themes
2024-05-26 13:28:27 +02:00
Michael Steenbeek 5e81bc7ad2
Add #19870 and #21991 to changelog 2024-05-26 12:43:42 +02:00
Gymnasiast 30dca0f03e
Do not assert when drawing a transparent solid colour 2024-05-26 12:35:41 +02:00
Gymnasiast 8a181b5513
Split colours and colour flags 2024-05-26 12:35:40 +02:00
Aaron van Geffen f5b5e45069
Merge pull request #22065 from AaronVanGeffen/progress-bars
Introduce progress/loader window
2024-05-26 12:18:14 +02:00
Aaron van Geffen ceed2c0c3a Amend changelog 2024-05-26 12:07:23 +02:00
OpenRCT2 git bot c74610ce7d Merge Localisation/master into OpenRCT2/progress-bars 2024-05-26 12:05:00 +02:00
Michael Steenbeek 8f8149f1e5
Fix apostrophes in changelog
[ci skip]
2024-05-26 11:53:21 +02:00
OpenRCT2 git bot 083e987e4e Merge Localisation/master into OpenRCT2/develop 2024-05-26 04:02:03 +00:00
Aaron van Geffen 5462ea00cc
Fix #22102: Inverted scrollwheel behaviour on terraform tools 2024-05-25 23:18:30 +02:00
Aaron van Geffen 15837e7e95
Merge pull request #22060 from AaronVanGeffen/scroll-spinners
Refactor WindowOtherWheelInput to be safer and script window compatible
2024-05-25 20:08:06 +02:00
Michael Steenbeek 9cd648747f
Fix #22077: Diagonal flat chained/unchained reversed 2024-05-25 20:05:04 +02:00
OpenRCT2 git bot 0eee7377f5 Merge Localisation/master into OpenRCT2/develop 2024-05-25 04:02:06 +00:00
Aaron van Geffen fd12a507a0
Pause the game while LoadSave window is open (#22084) 2024-05-24 23:32:57 +02:00
Aaron van Geffen e8a009bb3c
Fix width calculation in asset packs window (#22097) 2024-05-24 23:27:09 +02:00
Ryan Gudonis f5834d67db
Change difficulty order for Time Twister scenarios (#22057)
Based off a playtest session by HtotheTML (https://github.com/OpenRCT2/OpenRCT2/discussions/22055)

Co-authored-by: HtotheTML <108596959+HtotheTML@users.noreply.github.com>
2024-05-24 13:57:56 +00:00
Aaron van Geffen adc8c5e6a2
Close the gap in advanced options tab (#22088) 2024-05-23 21:17:44 +02:00
Michael Steenbeek 308cc3c9a0
Fix #14630: Number separators not processed correctly 2024-05-23 21:08:28 +02:00
OpenRCT2 git bot ce626b6deb Merge Localisation/master into OpenRCT2/develop 2024-05-23 04:01:51 +00:00
Stephan Spengler 7315b3bdbf
Adjust API documentation to changes from #22013 2024-05-22 23:47:21 +02:00
Aaron van Geffen 10c97c6599 CustomWindow: change spinner button order to match internal windows 2024-05-22 19:59:16 +02:00
Matt fe968fbc38
Merge pull request #22076 from AaronVanGeffen/update-team
Update team status for Aaron
2024-05-21 23:17:52 +03:00
Aaron van Geffen f17d936958 Rejoined as of May 4th 2024-05-21 19:43:45 +02:00
OpenRCT2 git bot bbb5b92610 Merge Localisation/master into OpenRCT2/develop 2024-05-21 04:01:44 +00:00
Aaron van Geffen 04fa09e8df
Allow mechanics to be assigned the drowning animation (#22071) 2024-05-20 22:36:33 +02:00
Aaron van Geffen c9de56471d Allow customising the progress string format
Fixup: deal with -Wdeprecated-anon-enum-enum-conversion warning
2024-05-20 21:37:40 +02:00
Aaron van Geffen 804f63e52a Use new progress window for network transfers 2024-05-20 20:53:37 +02:00
Aaron van Geffen a943abdbb3 Keep same style while window is open, but random at the start 2024-05-20 20:14:48 +02:00
Aaron van Geffen 2f05dc9179 Draw vehicle halfway for indeterminate progress 2024-05-20 19:26:42 +02:00
Aaron van Geffen 000637a18e Make progress bar themeable; change NetworkStatus defaults to match 2024-05-20 18:00:38 +02:00
Aaron van Geffen 539bb5487e Introduce context functions and intents for progress window 2024-05-20 16:28:00 +02:00
Aaron van Geffen 6cb49d2e3b
Fix #22066: FPS counter copied over viewport when using centred toolbar (#22068) 2024-05-20 15:04:27 +02:00
OpenRCT2 git bot 08a3513f7f Merge Localisation/master into OpenRCT2/develop 2024-05-20 04:01:59 +00:00
Aaron van Geffen e6fac7f870 Introduce progress/loader window 2024-05-19 22:05:05 +02:00
Michael Steenbeek 06e2363b1e
Merge pull request #20263 from IntelOrca/shift-map
Add functionality to shift the entire map
2024-05-19 21:33:52 +02:00
Michael Steenbeek 8b9536eeb7
Merge pull request #22062 from Gymnasiast/refactor/progress-bar
Close #22043: Create widget for progress bar
2024-05-19 21:32:01 +02:00
Gymnasiast 7d3ac7ea9d
Add moveTo() to Widget 2024-05-19 20:20:29 +02:00
Gymnasiast b5743eccbc
Use new progress bar widgets in Guest window 2024-05-19 20:20:29 +02:00
Gymnasiast 250a26fb14
Use new progress bar widgets in Ride window 2024-05-19 20:20:29 +02:00
Gymnasiast ae88b7b0fc
Create progress bar widget 2024-05-19 20:20:29 +02:00
Michael Steenbeek eaba5f356c
Replace assertions in DecodeChunkRLEWithSize() (#22061) 2024-05-19 16:15:18 +02:00
OpenRCT2 git bot 2217d401c1 Merge Localisation/master into OpenRCT2/develop 2024-05-19 04:02:01 +00:00
Michael Steenbeek 15d5f75a2b
Merge pull request #21853 from Gymnasiast/feature/touch-mode
Add enlarged UI
2024-05-18 22:22:10 +02:00
HtotheTML c907d02a05
Use park names for WW/TT scenarios 2024-05-18 21:37:54 +02:00
Gymnasiast 0311f4b875
Update changelog 2024-05-18 21:11:40 +02:00
Gymnasiast a3a09577be
Fix outdated patrol areas showing up after map shift 2024-05-18 21:10:53 +02:00
Gymnasiast 3bb1f8e18a
Guard more moves with null check 2024-05-18 21:10:53 +02:00
Gymnasiast dde7a8270a
Only shift ride locations if they are not null 2024-05-18 21:10:53 +02:00
Gymnasiast 308912b8ce
Fix rebase error 2024-05-18 21:10:53 +02:00
Gymnasiast 86f80faca8
Also shift jumping fountains and map animations 2024-05-18 21:10:53 +02:00
Gymnasiast 4f41734dc5
Update for changes on develop 2024-05-18 21:10:53 +02:00
Ted John 1c2bc82456
Fix ShiftMap when x or y is 0 but not both 2024-05-18 21:10:53 +02:00
Ted John e887662d15
Fix shifting of banner positions 2024-05-18 21:10:53 +02:00
Ted John 58292caf22
Fix code formatting for Map.cpp 2024-05-18 21:10:53 +02:00
Ted John 641d8f70aa
Get the entity tweener outside the loop 2024-05-18 21:10:53 +02:00
Ted John 13c4ee5213
Do not tween entities when shifting them 2024-05-18 21:10:53 +02:00
Ted John 774a8a382f
Increment network version 2024-05-18 21:10:53 +02:00
Ted John 776fa71a4f
Use edge as template for new tiles 2024-05-18 21:10:52 +02:00
Ted John abc67f09e6
Add ability to shift map 2024-05-18 21:10:52 +02:00
Gymnasiast 6c31491bff
Add changelog entry 2024-05-18 20:57:04 +02:00
Gymnasiast 99b99ef0c5
Automatically use multiple dropdown columns 2024-05-18 20:57:02 +02:00
Gymnasiast 270c6320b9
Keep all dropdowns open when using Enlarged UI 2024-05-18 20:56:37 +02:00
Gymnasiast c0d425357e
Use more space for dropdowns when using Enlarged UI 2024-05-18 20:56:34 +02:00
Gymnasiast 5522b5cb03
Add Enlarged UI setting 2024-05-18 20:55:20 +02:00
Michael Steenbeek 311628dadf
Condense diagonal straight flat drawing even more 2024-05-18 20:32:31 +02:00
Aaron van Geffen 57bdae9d49 Refactor WindowOtherWheelInput to be safer and script window compatible 2024-05-18 15:59:12 +02:00
Aaron van Geffen 4e2f546d14
Fix sound effects not working 2024-05-18 13:12:08 +02:00
rohan4412 24a24e3f53
Part of #21421: Replace constants that use #define with ones that use constexpr (#21883)
* rename MAX_SCROLLING_TEXT_MODES to kMaxScrollingTextModes

* Rename FRAME_RENDERING_START to kFrameRenderingStart

* Rename FRAME_EFFECTS_START to kFrameEffectStart

* Rename CONTROLS_GROUP_START to kControlsGroupStart

* Rename THEMES_GROUP_START to kThemesGroupStart

* Rename TOOLBAR_GROUP_START to kToolbarGroupStart

* Rename TITLE_SEQUENCE_START to kTitleSequenceStart
2024-05-18 10:37:42 +00:00
Aaron van Geffen 69847a02ed
Open NetworkStatus window quietly (#22059) 2024-05-18 10:54:08 +02:00
OpenRCT2 git bot 5260b5d52f Merge Localisation/master into OpenRCT2/develop 2024-05-18 04:01:52 +00:00
Aaron van Geffen 14828e4416
Merge pull request #22016 from AaronVanGeffen/ui-string-ids
Move UI exclusive string ids to UiStringIds.h
2024-05-18 00:04:16 +02:00
Michael Steenbeek 340a6838cc
en-GB: Use actual ellipses
Small oversight from #21893.
2024-05-17 19:32:29 +00:00
Harry Hopkinson ef8618209e
Move gMarketingCampaigns to GameState_t 2024-05-17 21:20:27 +02:00
Aaron van Geffen 8b51112a81
Merge pull request #21893 from AaronVanGeffen/loading-scene
Introduce preloader scene with progress info
2024-05-17 15:02:21 +02:00
Stephan Spengler f4156e9043
Create or delete banners when tile elements are changed by plugins (#21627) 2024-05-17 07:54:51 -03:00
OpenRCT2 git bot 919cef7f55 Merge Localisation/master into OpenRCT2/develop 2024-05-17 04:01:51 +00:00
Michael Steenbeek 5b57071d73
en-GB: Fix word order in STR_6630 2024-05-16 16:41:04 +02:00
spacek531 6ba33b735a
Fix #22038: Upward helix button missing 2024-05-16 12:53:55 +02:00
Michael Steenbeek 288575c4ff
Use kDefaultGeneralSupportHeight throughout 2024-05-15 21:25:02 +02:00
Aaron van Geffen 2f68c7e823
Move STR_NONE, STR_EMPTY to StringIdType.h (#22019) 2024-05-15 20:29:11 +02:00
Aaron van Geffen 3e4a77fd50
Merge pull request #22034 from AaronVanGeffen/money-header
Move fixed point and money types into FixedPoint.hpp and Money.hpp
2024-05-15 19:44:58 +02:00
Aaron van Geffen 6c66bff4b6
Let heavy snow and blizzards make guests buy and use umbrellas (#21986) 2024-05-14 19:18:42 +02:00
Aaron van Geffen 308219d32e
Move speed literal _mph to Speed.hpp (#22033) 2024-05-14 17:04:49 +00:00
Aaron van Geffen 69c5e6ad9e Move money types into Money.hpp 2024-05-14 16:35:00 +02:00
Aaron van Geffen 9a4aa4bb94 Move fixed point types to FixedPoint.hpp 2024-05-14 16:25:52 +02:00
Michał Janiszewski 3c35558f3f
Fix compilation on Arch Linux with GCC 14 (#22031)
Fixes #22029
2024-05-13 22:09:00 +00:00
spacek531 104a5d5222
Add legacy field for booster parameters to Ride Type Descriptor
This pull request is spun off from Unify Speed #16692 for ease of review, as well as making it easier to address some future features independent of Unify Speed.

This PR separates the OperationSettings field of RTD into 3 new fields, since the OperationSettings struct was bloated with things that are not operation settings.

This PR implements legacy and non-legacy ("modern") booster setting fields. In preparation for Unify Speed, the legacy properties are set to match the values as they stand. Separating legacy from modern allows the modern values to be changed in accordance with #21752 while preserving backwards-compatibility.

Unify Speed or a spun-off subset PR will implement a vehicle flag to switch between legacy and modern behavior, which all older parks will import with, while new rides will use the non-legacy "modern" behavior. Unify speed or a spin-off will implement enforcing brake and booster speeds.
2024-05-13 21:45:18 +00:00
Aaron van Geffen 1a5f4c6952
Offset minimap using screen coords instead 2024-05-13 23:31:06 +02:00
Michael Steenbeek 6979e88b9e
Clean up more diagonal track drawing
This consists mostly of using `TrackPaintUtilDiagTilesPaint()` where appropriate, as well as cleaning up some duplicate constants in the monorail/miniature railway paint code.
2024-05-13 14:37:35 +02:00
Michał Janiszewski 7239810d39
Restore `#include <algorithm>` in AssetPackManager.cpp (#22028)
https://aur.archlinux.org/pkgbase/openrct2-git/
2024-05-13 13:15:07 +02:00
spacek531 6df16c7946
Clean up more ride type references 2024-05-13 09:20:51 +02:00
Aaron van Geffen 4ffe00aaba
Keep options window centred after a resize (#22026) 2024-05-12 21:07:32 +00:00
Michael Steenbeek 59297f0038
Use a supports constant in track drawers (#22024) 2024-05-12 21:43:39 +02:00
Michael Steenbeek 0e245692b2
Fix #22008: Lay-down roller coaster uses the wrong supports 2024-05-12 10:37:53 +02:00
Michael Steenbeek 5407ba2d55
Close #22014: Change crossingMode to a strong enum (#22020) 2024-05-12 07:46:32 +01:00
Aaron van Geffen 57a6b0a00c
Remove STR_VIEWPORT (#22018)
* Remove STR_VIEWPORT

* Remove StringIds.h include from Main.cpp
2024-05-11 18:21:45 +00:00
Harry Hopkinson bda383c236
Fix #22007: Cannot update image of ImgButton from plugins 2024-05-11 13:32:14 +02:00
Aaron van Geffen b3b62c86be Rename two shortcut string ids that did not follow conventions 2024-05-11 12:51:53 +02:00
Aaron van Geffen 828aeadf5b Deal with -Wdeprecated-anon-enum-enum-conversion warnings 2024-05-11 11:24:01 +02:00
Aaron van Geffen ef4cad5ee3 Move UI exclusive string ids to UiStringIds.h 2024-05-10 23:24:46 +02:00
Aaron van Geffen b0a3888d4d
Merge pull request #21989 from AaronVanGeffen/toolbar-alignment
Optionally align the top toolbar buttons horizontally centred
2024-05-10 22:42:13 +02:00
Aaron van Geffen 96ce7f706f Move widget constants from Windows.h to Widget.h 2024-05-10 22:14:10 +02:00
Aaron van Geffen 945a799228
Merge pull request #22005 from AaronVanGeffen/config-struct
Introduce Config namespace and struct
2024-05-10 22:06:51 +02:00
Michael Steenbeek 3f92139dad
Merge pull request #22015 from Gymnasiast/refactor/metal-support-stuff
Refactor metal supports
2024-05-10 21:57:49 +02:00
Gymnasiast 3ed61cac9a
Name and refactor metal supports maps 2024-05-10 21:35:04 +02:00
Gymnasiast 98e980f535
Make MetalA and MetalB more like each other 2024-05-10 21:31:20 +02:00
Aaron van Geffen 9e206d5528
Remove dependency on StringIds.h from Localisation.h (#22011)
* Remove dependency on StringIds.h from Localisation.h

* Include Language.h in UTF8.cpp for function declarations

* Rename tests/Localisation.cpp to tests/LocalisationTest.cpp
2024-05-10 19:14:05 +00:00
Aaron van Geffen 86835836b5
Move strings exclusively used by ride meta data to RideStringIds.h (#22010) 2024-05-10 19:05:05 +00:00
Michael Steenbeek 6408b0537a
Merge pull request #22013 from Gymnasiast/refactor/small-track-paint
Refactor slope-related things
2024-05-10 20:54:42 +02:00
Gymnasiast 42add207e9
Rename SURFACE_STYLE_FLAG_RAISE_OR_LOWER_BASE_HEIGHT 2024-05-10 20:42:12 +02:00
Gymnasiast 4cdaaa9810
Refactor slope flags 2024-05-10 20:16:07 +02:00
Gymnasiast 9e2463ff52
Name SUPPORTS_SLOPE_5, use it consistently 2024-05-10 20:16:03 +02:00
Gymnasiast b3d9255c2d
TrackData.h: drop unused import of TrackPaint.h 2024-05-10 20:15:55 +02:00
Gymnasiast 09dc7077c1
Drop 3rd parameter to PaintUtilSetGeneralSupportHeight()
It’s always 0x20
2024-05-10 20:15:51 +02:00
Harry Hopkinson 740ee91cb5
Refactor more constants in TrackPaint.h 2024-05-10 16:05:05 +02:00
Aaron van Geffen 347ce53f26
Re-introduce message on successful screenshot (#21983)
* Re-introduce message on successful screenshot

* Automatically close previous screenshot notices before new ones
2024-05-10 15:04:12 +02:00
Aaron van Geffen 92aeace98c Just undef interface macro in Config.h, if present 2024-05-10 13:07:33 +02:00
Aaron van Geffen 617003dff6 Use WIN32_LEAN_AND_MEAN in UiContext and Platform 2024-05-10 12:57:05 +02:00
Aaron van Geffen 740b624eed Remove extraneous includes from Localisation.cpp 2024-05-10 12:30:48 +02:00
Aaron van Geffen a63d86c488 Introduce Config namespace and struct 2024-05-10 12:10:21 +02:00
Aaron van Geffen ba9c84f835
Move Csg path related functions into their own header (#22004) 2024-05-10 12:05:52 +02:00
Harry Hopkinson 98ac3a1bbc
Replace GfxDrawString() with DrawText() 2024-05-10 09:56:03 +00:00
Michael Steenbeek 2d99e49a05
Add literal suffix rule to clang-tidy
This is what the codebase already uses (at least in most places).
2024-05-10 11:41:34 +02:00
Duncan eded6e2129
Readd algorithm header where it is used (#22000) 2024-05-10 10:37:01 +01:00
Duncan 2884e095c9
Don't include windows.h when not used 2024-05-10 09:27:17 +02:00
OpenRCT2 git bot cecd4b04c8 Merge Localisation/master into OpenRCT2/develop 2024-05-10 04:01:41 +00:00
Mike d58673105d
Close #21974: No reason specified when attempting to place path additions on junctions 2024-05-09 12:45:33 +00:00
Michał Janiszewski 63e996194f
Reduce inclusion of FixedVector.h (#21994)
FixedVector class requires use of algorithm include, one of C++'s
heaviest, while in practice it is used only in handful of places.

See #21947 for methodology

372-266=106 #include <algorithm>s fewer
2024-05-09 12:34:18 +00:00
Claudio Tiecher 10a5d790c6
Part of #21421: replace define with constexpr (#21760)
* Part of #21421: refactor TUNNEL_MAX_COUNT

* Part of #21421: deleted unused OBJECT_SELECTION_NOT_...

* Part of #21421: refactor MAX_SERVER_DESCRIPTION_LENGTH

* Part of #21421: refactor EXPENDITURE_TABLE_MONTH_COUNT

* Part of #21421: refactor FINANCE_GRAPH_SIZE

* Part of #21421: refactor NETWORK_STREAM_VERSION and _ID

* Part of #21421: MONEY_STRING_MAXLENGTH

* Part of #21421: deleted MAX_USER_STRINGS

* Part of #21421: refactor USER_STRING_MAX_LENGTH

* Part of #21421: deleted USER_STRING_END

* Part of #21421: refactor REAL_NAME_START

* Part of #21421: refactor REAL_NAME_END

* Part of #21421: deleted FONT(X) and FONT_OPENRCT2_SPRITE

* Part of #21421: refactor CURRENCY_SYMBOL_MAX_SIZE

* Part of #21421: refactor CURRENCY_RATE_MAX_NUM_DIGITS

* Part of #21421: refactor SCROLLABLE_ROW_HEIGHT

* Part of #21421: refactor ADD_CLAMP_BODY

* Part of #21421: applied clang-format to Util.cpp

* Part of #21421: incorporate feedback from #21760

* Part of #21421: revert to nbsp in Currency.cpp

* Part of #21421: fix merge conflict

* Part of #21421: fix more merge conflict

* Part of #21421: apply clang format

* Part of #21421: using std::numerics for finding bounds

* Part of #21421: fix reference to kAddClampBody

* Part of #21421: improved on comments about AddClamp func

* Part of #21421: apply correct network stream version number

* Part of #21421: apply clang-format
2024-05-09 08:59:03 -03:00
Michał Janiszewski 24a2db9fc9
Remove <algorithm> include from Location.hpp (#21993)
See #21947 for methodology

528-372=156 `#include <algorithm>`s fewer
2024-05-09 11:54:40 +00:00
Aaron van Geffen 738471ff84 Deduplicate button width and alignment code 2024-05-09 12:35:34 +02:00
Harry Hopkinson 613d60b446
Refactor more constants in TrackPaint.h (#21942) 2024-05-09 06:41:47 -03:00
Aaron van Geffen 47d0996b4f
Merge pull request #21981 from AaronVanGeffen/map-window
Rework map window to take map size into account
2024-05-09 10:54:22 +02:00
Aaron van Geffen 81e068c7b2
Merge pull request #21990 from AaronVanGeffen/config-include
Remove Config.h include (and therefore Drawing.h) from many places
2024-05-09 00:00:42 +02:00
Aaron van Geffen a61a561d01 Remove Currency.h include from Localisation.h 2024-05-08 23:41:42 +02:00
Aaron van Geffen a627cf7a1e Remove Drawing.h include from Config.h 2024-05-08 23:18:53 +02:00
Aaron van Geffen 23551c09b3 Move FPS counter below toolbar if buttons are centred 2024-05-08 23:08:06 +02:00
Aaron van Geffen ca6f142a97 Remove Config.h include from many places 2024-05-08 22:29:32 +02:00
Michael Steenbeek ca1118c2f1
Merge pull request #21985 from AaronVanGeffen/guest-constants
Use constants for balloon/umbrella/hat sprites in more places
2024-05-08 22:23:22 +02:00
Aaron van Geffen 1e9bee0c00 Fixup: workaround for std::ranges::reverse_view being too new 2024-05-08 21:52:49 +02:00
Aaron van Geffen 05448222e2 Options: extract common code to ToggleToolbarSetting helper 2024-05-08 21:22:28 +02:00
Aaron van Geffen e423575411 Add a config setting to toggle toolbar mode 2024-05-08 21:19:57 +02:00
Aaron van Geffen 6e607bbb37 Optionally align the toolbar buttons horizontally centred 2024-05-08 20:47:55 +02:00
Aaron van Geffen 16a7e36984 Refactor AlignButtonsLeftRight to use std::ranges::reverse_view 2024-05-08 20:20:33 +02:00
Aaron van Geffen c4fdade375 Fix _topToolbarWidgets indentation 2024-05-08 20:04:32 +02:00
Aaron van Geffen b37e2479c8 Refactor kWidgetOrderLeftGroup, kWidgetOrderRightGroup into std::array 2024-05-08 20:04:13 +02:00
Aaron van Geffen d801882492 TopToolbar: refactor OnPrepareDraw into separate functions 2024-05-08 19:58:27 +02:00
Aaron van Geffen 376cb1f74a Add changelog entries 2024-05-08 17:52:58 +02:00
Aaron van Geffen 8dd22e90b4 Offset small maps to centre of scrollview 2024-05-08 17:40:28 +02:00
Aaron van Geffen 58aa5e0106 Limit map window dimensions based on map size 2024-05-08 16:36:48 +02:00
Aaron van Geffen 779e65d8b2 GameBottomToolbar: use constants for balloon/umbrella/hat sprites 2024-05-07 23:00:46 +02:00
Aaron van Geffen 73c592b137 Guest window: use constants for balloon/umbrella/hat sprites 2024-05-07 23:00:36 +02:00
Aaron van Geffen aeef004710 Prevent map corners from being cut off (original bug) 2024-05-07 13:56:06 +02:00
Aaron van Geffen 0d3c9909b6 Map window: rework to use current map sizes 2024-05-07 13:50:44 +02:00
Aaron van Geffen f51404d29d Amend changelog 2024-05-07 11:20:56 +02:00
Michał Janiszewski 11510a0e0b
Guard against possible nullptr dereference when prefetching BBox (#21978) 2024-05-07 06:21:27 +02:00
Michał Janiszewski a611244b31
Fix #21976: Add algorithm include to fix gcc14 compile (#21977)
Co-authored-by: H3o66 <chris.h3o66@gmail.com>
2024-05-06 20:40:36 +00:00
Aaron van Geffen 2ff3295587 Report FileIndex index progress to Context
Progress is passed on to PreloaderScene and NetworkInfo window from there.
2024-05-06 14:26:00 +00:00
Aaron van Geffen d6ce62e74f
JSON: allow/ignore comments in parser 2024-05-06 16:15:00 +02:00
Aaron van Geffen 3e000d550b Prevent NetworkStatusWindow border from flashing on update 2024-05-06 15:44:07 +02:00
Aaron van Geffen db73b1fede Move TitleSequenceManager::Scan into preloader as well
Add strings for checking and loading title sequence
2024-05-06 14:08:49 +02:00
Aaron van Geffen 809fe4a51b Initialise scenes only when they are first accessed 2024-05-06 14:08:35 +02:00
Aaron van Geffen 893392d987
Scripting: allow precise and safe control of peep animations 2024-05-05 21:09:41 +00:00
Michael Steenbeek bf74dfba7b
Merge pull request #21965 from AaronVanGeffen/fix-cli-editor
Fix loading editor from command line
2024-05-05 22:42:24 +02:00
Aaron van Geffen 831c7651bb
Scripting: tailor costume assignment to each staff type
In order to transition staff costumes to objects, we must further disentangle staff from regular peeps. This has many advantages, such as making custom entertainers or even handymen costumes. However, this means putting some restrictions on what costumes can be assigned to staff in the mean while.

We are aware of plug-ins allowing staff to be decorated like normal peeps, though, e.g. using @Manticore-007's Peep Editor. Splitting staff from peeps will mean breaking such functionality. We can do our very best to reverting 'invalid' staff to their normal outfits instead of them outright disappearing. However, in the mean time, we should disallow peep costumes from being assigned to staff to prevent further disappointment down the line.

Once we get to actually adding custom staff costumes, I plan to add a new plug-in API to get available costumes for a particular staff type. This would apply to entertainers, but also other staff types. This should make it easier for plug-in authors to tap into custom costumes in the future.
2024-05-05 22:41:52 +02:00
Michael Steenbeek 46b356047c
Merge pull request #21889 from Gymnasiast/refactor/segments
Refactor blocked segments
2024-05-05 21:54:34 +02:00
Michał Janiszewski c8ec8a550a Start v0.4.12 2024-05-05 21:00:39 +02:00
Michał Janiszewski 6838832778 Merge branch 'master' into develop 2024-05-05 20:59:44 +02:00
Michał Janiszewski 18d2b5ef6e Release v0.4.11
- Feature: [#11512] Coloured usernames by group on multiplayer servers.
- Feature: [#21734] Park admittance price can now be set via text input.
- Feature: [#21957] [Plugin] Expose whether the game is paused to the plugin API.
- Improved: [#21728] “Fix all rides” cheat now also works if a mechanic is already fixing the ride.
- Improved: [#21769] Expose “animation is backwards” wall property in Tile Inspector.
- Improved: [#21855] Add a separator between “Load Game” and “Save Game”, to avoid accidental overwriting.
- Change: [#21715] [Plugin] Remove access to the internal `owner` property. Note: `ownership` is still accessible.
- Change: [#21855] Cheats menu dropdown no longer requires dragging.
- Change: [#21866] Hide the FPS Counter when the top toolbar/widgets have been toggled off.
- Change: [#21950] Construction and removal buttons can now be held down for repeated placement.
- Fix: [#866] Boat Hire boats get stuck entering track (original bug).
- Fix: [#10701] No reason specified when placing door over unsuitable track.
- Fix: [#18723, #21870] Attempting to demolish a flat ride in pause mode allows you to place multiple copies.
- Fix: [#19559] Custom rides with long descriptions extend into lower widgets.
- Fix: [#21696] Fullscreen window option not correctly applied on macOS.
- Fix: [#21749] Crash when loading park bigger than current limits.
- Fix: [#21787] Map generator heightmap should respect increased height limits.
- Fix: [#21829] When creating a new scenario, the default name contains formatting codes.
- Fix: [#21937] Build errors with the ORIGINAL_RATINGS flag.
- Fix: [objects#324] Cannot build Colosseum inside a turn or helix.
- Fix: [objects#325] Sloped castle walls are vertically offset by one pixel (original bug).
2024-05-05 20:01:29 +02:00
Michał Janiszewski 6721a74b26 Merge branch 'develop' 2024-05-05 19:55:35 +02:00
Michał Janiszewski 80ee864f37
Update backtrace.io token for upcoming release 2024-05-05 19:47:35 +02:00
Aaron van Geffen fa90a84d22
Make construction and removal buttons holdable (#21950)
* Footpath: make construction button holdable

* RideConstruction: make construction button holdable

* Allow repeated removal as well

* Amend changelog
2024-05-05 11:38:49 +00:00
mrmbernardi 489ae58c5c
Close #21825: Only lock OpenGL texture cache when using multi-threading (#21952)
Fixes #21825 by making 'DrawingLocks' which lock only if multi threaded drawing is enabled. Refactors TTF.cpp to use this.

Also cleans up some header files, modernises constants, and removes code to avoid using shared_mutex on MacOS builds. This was originally added because older versions of MacOS didn't support this in the STL.
2024-05-05 10:54:50 +00:00
OpenRCT2 git bot f3bb57a54c Merge Localisation/master into OpenRCT2/develop 2024-05-05 04:01:52 +00:00
Harry Hopkinson bbc5a109ef
Close #20157: Hide FPS Counter if top toolbar is hidden 2024-05-05 00:16:23 +02:00
Aaron van Geffen c92d3bf018 Fix loading editor from command line 2024-05-03 19:31:06 +02:00
Aaron van Geffen 770277ab95 Refactor Context::DetermineStartUpScene into its own method 2024-05-03 19:30:58 +02:00
Katherine Norton cd528665e6
Expose whether the game is paused to the plugin API 2024-05-03 15:59:57 +00:00
Mathias Gibbens accbd799ee
Fix GGC 12 compile error
Signed-off-by: Mathias Gibbens <gibmat@debian.org>
2024-05-03 16:05:57 +02:00
OpenRCT2 git bot cf3d4c7e22 Merge Localisation/master into OpenRCT2/develop 2024-05-03 04:02:00 +00:00
Gymnasiast 5319c0e8bd
Use TrackPaintUtilDiagTilesPaint() for broken drawers 2024-05-02 20:56:52 +02:00
Gymnasiast 3641e78341
Remove parameter from TrackPaintUtilDiagTilesPaint() 2024-05-02 20:42:12 +02:00
Michał Janiszewski a088f7615b
Fix #21748: TileElement out of bounds (#21749)
* Fix #21748: TileElement out of bounds

This fixes crashes observed and allows the park to load. The park is
overlarge and breaks some assumptions we have in our code.

* Use ternaries for checking conditions
2024-05-02 18:14:22 +02:00
Gymnasiast 332ba3244e
Consolidate segment+support calls for diagonal straight flat pieces 2024-05-02 18:12:53 +02:00
Gymnasiast dfd958b855
Fix Metal{A,B}SupportsPaintSetupRotated() to rotate type 2024-05-02 18:12:52 +02:00
Gymnasiast 369996809c
Add PaintSegment header, add constant for straight flat track 2024-05-02 18:12:51 +02:00
Michał Janiszewski 4e8f578075
Update Steam path detection for Linux (#21948)
* Update Steam path detection for Linux

As Steam now uses Proton to install Windows version natively, update
paths so they get found automatically

* Use new Steam path detection on Linux only

This restores Steam path detection on macOS as it doesn't have Proton
2024-05-02 15:05:22 +02:00
OpenRCT2 git bot 9f69b532b1 Merge Localisation/master into OpenRCT2/develop 2024-05-02 04:01:58 +00:00
Aaron van Geffen 17920b6039
Script: when changing staff type, reset state to walking
Reset state to walking to prevent invalid actions from carrying over
2024-05-01 23:10:25 +02:00
Ryan Gudonis 339a572d03
List Fix #866 as original bug (#21953) 2024-05-01 19:47:11 +02:00
Michał Janiszewski 7b12667ddb
Reduce `<algorithm>` include (#21947) 2024-05-01 13:47:27 +02:00
Aaron van Geffen 8973e35ba1
Stabilize scenario and track editors\ 2024-05-01 12:34:10 +02:00
Michał Janiszewski ad79699b21
Reduce transient inclusion of `<future>` (#21944) 2024-05-01 12:27:51 +02:00
OpenRCT2 git bot 15ee7a244b Merge Localisation/master into OpenRCT2/develop 2024-05-01 04:02:01 +00:00
Matt 409da62fe8
Merge pull request #21924 from Harry-Hopkinson/refactor-constants-TrackPaint.h
Refactor constants in TrackPaint.cpp
2024-04-30 16:51:18 +03:00
Big-Blue-1 e31bebbedf
Fix build errors with the ORIGINAL_RATINGS flag (#21937) 2024-04-30 10:15:11 -03:00
Michael Steenbeek 921860729b
Merge pull request #21850 from Gymnasiast/backport/brake-stuff
Small backport of changes for #15314
2024-04-30 13:57:37 +02:00
Harry-Hopkinson dda8c3ecb2 Rename DiagBlockedSegments to kDiagBlockedSegments 2024-04-30 11:54:05 +00:00
Michael Steenbeek 44c442f832
Fix #21870: Demolishing flat ride in pause mode allows copies 2024-04-30 13:50:04 +02:00
Gymnasiast 938f3cd783
Bump network version 2024-04-30 13:41:24 +02:00
Gymnasiast 00618c79d2
Rename _currentBrakeSpeed2 to _currentBrakeSpeed 2024-04-30 13:39:49 +02:00
Gymnasiast 22e7ad598b
Default-initialise all fields of RideTypeDescriptor 2024-04-30 13:39:49 +02:00
Gymnasiast dbbfc2f1d1
Create kMaximumBrakeSpeed 2024-04-30 13:39:49 +02:00
Michael Steenbeek 575cd756b3
Merge pull request #21930 from AaronVanGeffen/move-palette
Move remap palette internally
2024-04-29 22:55:15 +02:00
Aaron van Geffen 95239d75c9 Move UpdatePaletteEffects to Drawing.cpp 2024-04-29 18:14:09 +02:00
Aaron van Geffen 66cb4a1d81 Mark GlassPaletteIds static constexpr 2024-04-29 18:05:25 +02:00
Aaron van Geffen 25faa361ad Rename to secondaryRemapPalette, tertiaryRemapPalette 2024-04-29 18:04:17 +02:00
Aaron van Geffen dcc1a0627d Move gPeepPalette, gOtherPalette to Drawing.Sprite.cpp 2024-04-29 18:01:39 +02:00
Michael Steenbeek 4de4f4a985
Merge pull request #21683 from duncanspumpkin/uiMove
Move a number of ui only updates into UiContext tick
2024-04-29 14:54:07 +02:00
duncanspumpkin f6c34ddd59
Simplify map flashing flags and move into map 2024-04-29 14:10:53 +02:00
duncanspumpkin 4810a72232
Move a number of ui only updates into UiContext tick 2024-04-29 14:10:52 +02:00
Michael Steenbeek 5470a49382
Merge pull request #21925 from Gymnasiast/fix/10701
Fix two error messages when placing wall
2024-04-28 23:06:39 +02:00
Gymnasiast de0ca4ded4
No reason specified when placing door off edge of map 2024-04-28 22:53:01 +02:00
Gymnasiast 6335906d03
Fix #10701: No explanation when placing door over unsuitable track 2024-04-28 22:53:01 +02:00
Michael Steenbeek c02c7925c3
Close #21728: Apply "Fix all rides" even if mechanic is already working
Added checks for mechanic fixing plus handles inspecting and calling.
2024-04-28 22:20:19 +02:00
JDCustard fe6da02718
Close #21728: Apply "Fix all rides" even if mechanic is already working
Added checks for mechanic fixing plus handles inspecting and calling.
2024-04-28 22:07:07 +02:00
Michael Steenbeek 21001be23d
Merge pull request #21922 from AaronVanGeffen/peep-refactor
Peep: split off UpdateWalkingAction, ThrowUp from UpdateAction
2024-04-28 21:45:24 +02:00
Aaron van Geffen 2d74287b4b Guard for nullptr 2024-04-28 20:03:16 +02:00
Harry-Hopkinson 52ad6861af Rename track_map_1x4 to kTrackMap1x4 2024-04-28 14:33:41 +00:00
Harry-Hopkinson d6efe4cd53 Rename edges_4x4 to kEdges4x4 2024-04-28 14:31:29 +00:00
Harry-Hopkinson b9003d6e60 Rename track_map_4x4 to kTrackMap4x4 2024-04-28 14:26:12 +00:00
Harry-Hopkinson 8eebcc5486 Rename edges_3x3 to kEdges3x3 2024-04-28 14:19:19 +00:00
Harry-Hopkinson a3e685bf1f Rename track_map_3x3 to kTrackMap3x3 2024-04-28 14:14:58 +00:00
Harry-Hopkinson 97e9634a61 Rename edges_2x2 to kEdges2x2 2024-04-28 14:08:02 +00:00
Harry-Hopkinson b795d4ba8a Rename track_map_2x2 to kTrackMap2x2 2024-04-28 14:04:26 +00:00
Aaron van Geffen f5f31496db Peep: split off UpdateWalkingAction, ThrowUp from UpdateAction 2024-04-28 15:57:50 +02:00
Aaron van Geffen d35d08e86a Use named constants in Peep::Paint 2024-04-28 14:40:19 +02:00
Harry Hopkinson 9266a6f0d3
Remove duplicate sprite_map in TrackPaint.cpp 2024-04-27 21:13:22 +02:00
Michael Steenbeek 03926c46d0
Update to v1.4.4 objects release 2024-04-27 19:30:39 +02:00
Michael Steenbeek e6207ee1b3
Merge pull request #21888 from AaronVanGeffen/scenes-refactor
Refactor logic into scenes (IntroScene/TitleScene/GameScene)
2024-04-27 14:01:06 +02:00
Aaron van Geffen 56cbc0eb8a Refactor intro into IntroScene 2024-04-26 20:35:16 +02:00
Michael Steenbeek be9f1a2072
Merge pull request #21711 from AaronVanGeffen/peep-data
Refactor peep animation data
2024-04-26 20:06:31 +02:00
Michael Steenbeek 6d0b02e524
Merge pull request #21905 from Harry-Hopkinson/refactor-constant-notation
Refactor constant notation and replace macros with constexpr.
2024-04-26 19:29:29 +02:00
Harry-Hopkinson 74513374d1 Rename MAX_SERVER_DESCRIPTION_LENGTH to kMaxServerDescriptionLength 2024-04-26 17:56:20 +01:00
Harry-Hopkinson 7aed4d18f2 Rename NETWORK_LAN_BROADCAST_MSG to kNetworkLanBroadcastMsg 2024-04-26 17:55:23 +01:00
Harry-Hopkinson 82c31b80d4 Rename NETWORK_LAN_BROADCAST_PORT to kNetworkLanBroadcastPort 2024-04-26 17:55:23 +01:00
Harry-Hopkinson 5ef115941d Rename NETWORK_DEFAULT_PORT to kNetworkDefaultPort 2024-04-26 17:55:23 +01:00
Harry-Hopkinson ef7d7575de Rename PALETTE_TOTAL_OFFSETS to kPaletteTotalOffsets 2024-04-26 17:55:23 +01:00
Harry-Hopkinson 8ce6ba7606 Rename WINDOW_LIMIT_RESERVED to kWindowLimitReserved 2024-04-26 17:55:23 +01:00
Harry-Hopkinson 9e2b45fab3 Rename WINDOW_LIMIT_MAX to kWindowLimitMax 2024-04-26 17:55:23 +01:00
Harry-Hopkinson 343b10c172 Rename WINDOW_LIMIT_MIN to kWindowLimitMin 2024-04-26 17:55:23 +01:00
Michael Steenbeek 7a1b4ce425
Merge pull request #21653 from duncanspumpkin/moveTextInput
Move Text input widget to Ui library
2024-04-26 18:53:43 +02:00
duncanspumpkin 34fa06cd29
Address review comments 2024-04-26 18:27:15 +02:00
duncanspumpkin c8a5af02a5
Fix formatting 2024-04-26 18:27:15 +02:00
duncanspumpkin 788878e7fc
Add missing statics 2024-04-26 18:27:15 +02:00
duncanspumpkin bd3ae5cbb9
Simplify setting existing text 2024-04-26 18:27:14 +02:00
duncanspumpkin 3448926251
Move text input widget code from game lib to ui lib 2024-04-26 18:25:44 +02:00
mrmbernardi f4cebb11df
Speed up TerrainSurfaceObject::GetImageId() 2024-04-26 09:52:19 +02:00
Gustav Burkhardt 5837a33a60
Part of #21421: rename MAX_VIEWPORT_COUNT to kMaxViewportCount 2024-04-26 09:11:19 +02:00
Aaron van Geffen 3cda6e367b Don't use preloader scene when in headless mode to fix replay tests
This splits off the initialisation calls to a new InitialiseRepositories function.

The SetCompletionScene invocation is moved to the Launch method. When the game is running
in headless mode, the preloader is not used. Instead, InitialiseRepositories is called in-thread,
and the transition to the 'completion scene' happens immediately after.
2024-04-25 23:55:52 +02:00
Michael Steenbeek af46ff5f0a
Merge pull request #21855 from Gymnasiast/fix/small-usability
Small usability fixes
2024-04-25 16:25:12 +02:00
Michał Janiszewski 49b28f1757
Prefetch paint struct bounds (#21894)
With restored `benchspritesort` this yields around 5% better results.
2024-04-25 14:14:17 +00:00
Gymnasiast 8beb50da61
Add a separator between “Load Game” and “Save Game” 2024-04-25 15:27:04 +02:00
Gymnasiast a00f478104
Create TopToolbar::InitFileMenu() 2024-04-25 15:27:04 +02:00
Gymnasiast 9e236d1b5a
Fix #19559: Vehicle descriptions spill over into preview 2024-04-25 15:27:04 +02:00
Gymnasiast 4db5d62476
Add methods to move a widget 2024-04-25 14:10:07 +02:00
Gymnasiast 9906a18bc7
Cheats menu: do not autoclose 2024-04-25 14:10:07 +02:00
Michał Janiszewski 0e1e93e898
Use macos-12 runners for macOS jobs (#21896)
See https://github.com/OpenRCT2/OpenRCT2/issues/21895
2024-04-25 13:03:33 +01:00
Aaron van Geffen fe7152fc72 Skip viewport render during preloader
Reset screen to a nice background colour
2024-04-24 23:15:21 +02:00
Aaron van Geffen 9f45d40bae Add localisable progress status messages 2024-04-24 19:40:46 +02:00
Aaron van Geffen 7c4be9ce92 Introduce PreloaderScene for game initialisation
Co-authored-by: ζeh Matt <5415177+ZehMatt@users.noreply.github.com>
2024-04-24 18:31:00 +02:00
Kaavya Ramachandhran bc06ffce8b
Add myself to contributors.md 2024-04-24 09:08:05 +02:00
Kaavya Ramachandhran 1b4defbae9
Fix #21696: Fullscreen window option not correctly applied on macOS 2024-04-23 23:20:16 +02:00
Aaron van Geffen 255e89ec37 Refactor TitleScreen to TitleScene; introduce GameScene
Co-authored-by: ζeh Matt <5415177+ZehMatt@users.noreply.github.com>
2024-04-23 21:31:05 +02:00
Aaron van Geffen 49b75e6606 Introduce Scene class and handling
Co-authored-by: ζeh Matt <5415177+ZehMatt@users.noreply.github.com>
2024-04-23 20:42:16 +02:00
Aaron van Geffen ddc386b186
Refactor Context constructor 2024-04-23 19:52:52 +02:00
73 30d314e463
Fix #21829: {POP16}{POP16} in Scenario editor
Remove notation from string
2024-04-23 19:52:11 +02:00
OpenRCT2 git bot 08fdf386a5 Merge Localisation/master into OpenRCT2/develop 2024-04-22 04:01:47 +00:00
Aaron van Geffen 17af7db195 Force sprite update after invoking Staff::SetCostume 2024-04-21 22:54:10 +02:00
Aaron van Geffen 2799d96145 Rename PeepData to PeepAnimationData 2024-04-21 22:54:10 +02:00
Aaron van Geffen 886b8e8431 Let peep groups inherit from kPeepAnimationGroupNormal 2024-04-21 22:53:43 +02:00
Aaron van Geffen 642162853f Refactor g_peep_animation_entries into kPeepAnimationEntries 2024-04-21 22:53:37 +02:00
Aaron van Geffen b52bf40a20 Introduce peep sprite id constants 2024-04-21 22:52:06 +02:00
Michael Steenbeek c4c706c59c
Merge pull request #21796 from Harry-Hopkinson/refactor-constants-Window.h
Replace constant notation in Window.h
2024-04-21 01:18:40 +02:00
Karsten Van Fossan 137099a429
Close #18305: Move Translate3DTo2DWithZ() from Map.h into Viewport.h
Translate3DTo2DWithZ move to Viewport.h as suggested by ducanspumpkin and update references. Remove redundant function Translate3Dto2D.
2024-04-21 01:18:11 +02:00
Michael Steenbeek f7f7cd823f
Replace INVALID_IMAGE_ID with ImageIndexUndefined 2024-04-21 01:17:42 +02:00
Michael Steenbeek 3d05fce68e
Merge pull request #21818 from Harry-Hopkinson/refactor-constant-notation
Refactor constant notation in Chat.h and Peep.h
2024-04-21 00:14:44 +02:00
Rahul Unniyampath 893ae7f0ca
Refactor constant notation in Audio.h
Co-authored-by: ncerroneumich <ncerrone@umich.edu>
2024-04-21 00:12:13 +02:00
Michael Steenbeek 7fc34ef612
Fix #21832: Ghost Train in Haunted Harbour has missing pieces (#21856) 2024-04-21 00:01:55 +02:00
evmarcus 1f761faee0
Close #11512: Add coloured usernames in multiplayer servers by group
Co-authored-by: mbilik <mbilik@umich.edu>
Co-authored-by: Matt <matthewsings5@gmail.com>
2024-04-20 21:40:18 +00:00
Harry Hopkinson b05dcb3dfe
Close #21837: Formatter is overwritten in RideConstruction.cpp
Co-authored-by: Gymnasiast <m.o.steenbeek@gmail.com>
2024-04-20 13:49:36 +00:00
Aaron van Geffen 1b5d0f47ab
Make usage of Audio namespace explicit in Context 2024-04-20 12:24:44 +02:00
Aaron van Geffen 82c434358a
Introduce SPR_DEFAULT_PALETTE 2024-04-19 17:47:22 +02:00
OpenRCT2 git bot 447805c8f4 Merge Localisation/master into OpenRCT2/develop 2024-04-19 04:01:52 +00:00
Michael Steenbeek 9b7face116
Fix #21731: previously-invisible 'alt' rides now visible 2024-04-18 22:29:52 +02:00
QwertyChouskie 1d3a2393dc
debian/control: Fix syntax error causing builds to fail (#21835)
whoops my bad
2024-04-18 21:25:05 +02:00
OpenRCT2 git bot 73fc3bce8c Merge Localisation/master into OpenRCT2/develop 2024-04-18 04:01:49 +00:00
Harry-Hopkinson 47939567c4 Rename CHAT_MAX_WINDOW_WIDTH - kChatMaxWindowWidth 2024-04-17 13:20:37 +00:00
Harry-Hopkinson 337f9ca549 Rename CHAT_MAX_MESSAGE_LENGTH to kChatMaxMessageLength 2024-04-15 15:35:00 +00:00
Harry-Hopkinson 140e17029d Rename CHAT_INPUT_SIZE to kChatInputSize 2024-04-15 15:30:37 +00:00
Harry-Hopkinson c264ec1077 Rename CHAT_HISTORY_SIZE to kChatHistorySize 2024-04-15 15:28:51 +00:00
Harry-Hopkinson ba1f066710 Rename PEEP_MAX_ENERGY_TARGET to kPeepMaxEnergyTarget 2024-04-15 15:26:10 +00:00
Harry-Hopkinson cf50b4c8a3 Rename PEEP_MAX_ENERGY to kPeepMaxEnergy 2024-04-15 15:21:49 +00:00
Michał Janiszewski b64ec76c95
Fix #21787: Map generator heightmap should respect increased height limits (#21798) 2024-04-15 15:19:18 +00:00
Harry-Hopkinson 04ca18b7c6 Rename PEEP_MIN_ENERGY to kPeepMinEnergy 2024-04-15 15:12:21 +00:00
Harry Hopkinson 530a7de98f
Replace notation in Guest.h 2024-04-15 16:48:41 +02:00
mrmbernardi 8a2afbd1a3
Reduce copying in PaintSurface (#21817) 2024-04-15 16:10:55 +02:00
QwertyChouskie 5a424af8a9
debian/control: Update g++ dependency; update description
Use of `<span>` means g++ version 10 or later is required.  See https://en.cppreference.com/w/cpp/compiler_support/20.

While we are here anyways, update the description (based off the description at openrct2.org).
2024-04-15 16:03:44 +02:00
mrmbernardi b21f0504cf
Pause button stays down while waiting for GameAction (#21816) 2024-04-15 14:26:44 +02:00
Harry-Hopkinson cd9ca1debb Rename TOP_TOOLBAR_HEIGHT to kTopToolbarHeight 2024-04-14 18:12:58 +00:00
Harry-Hopkinson f357dd6cab Rename TEXT_INPUT_SIZE to kTextInputSize 2024-04-14 17:35:28 +00:00
Harry-Hopkinson b294d97f03 Rename DROPDOWN_HEIGHT to kDropdownHeight 2024-04-14 17:27:32 +00:00
Harry-Hopkinson 9fa917ae57 Rename SPINNER_HEIGHT to kSpinnerHeight 2024-04-14 16:56:33 +00:00
Harry-Hopkinson 14cdfc7262 Rename BUTTON_FACE_HEIGHT to kButtonFaceHeight 2024-04-14 16:44:39 +00:00
Michał Janiszewski a6e1124175
Fix mac-specific highdpi issue workaround (#21785) 2024-04-14 18:43:45 +02:00
Harry-Hopkinson 2ccb77320b Rename TABLE_CELL_HEIGHT to kTableCellHeight 2024-04-14 16:41:01 +00:00
Harry-Hopkinson f242bbf095 Rename LIST_ROW_HEIGHT to kListRowHeight 2024-04-14 16:37:01 +00:00
Harry-Hopkinson c5cfc65317 Rename SCROLLABLE_ROW_HEIGHT to kScrollableRowHeight 2024-04-14 16:31:53 +00:00
OpenRCT2 git bot 0872327fe5 Merge Localisation/master into OpenRCT2/develop 2024-04-14 04:04:33 +00:00
Duncan 3ce917e2e1
Fix #6725: Z-fighting when car passes through scenery door 2024-04-13 21:32:55 +02:00
OpenRCT2 git bot 0d12eb657d Merge Localisation/master into OpenRCT2/develop 2024-04-13 04:01:36 +00:00
Michael Steenbeek 246f1f30b9
Merge pull request #21715 from AaronVanGeffen/revert-owner
Revert "Add owner property to tile elements for scripting"
2024-04-12 22:10:26 +02:00
Aaron van Geffen a4bd20bcfc
Add changelog entry 2024-04-12 22:00:14 +02:00
Aaron van Geffen d536f9bce0
Revert "Add owner property to tile elements for scripting"
This reverts commit b4376ab590.
2024-04-12 21:58:45 +02:00
Aaron van Geffen 4f3449cfcf
Fix assert with some custom objects 2024-04-12 19:52:21 +00:00
Rik Smeets 953bb4ee91
Park admittance price can now be set via text input 2024-04-12 18:38:08 +00:00
Michael Steenbeek 005aece802
Expose “animation is backwards” flag in Tile Inspector 2024-04-12 18:08:34 +00:00
Michał Janiszewski f9bd26214b
Use libraries v35 (#21771) 2024-04-12 15:22:00 +03:00
Michael Steenbeek 271a22d00e
Merge pull request #21681 from AaronVanGeffen/obj-list-refactor
Move various object list properties out of ObjectTypes header
2024-04-12 11:54:13 +02:00
Michael Steenbeek 4e7d5d987a
Merge pull request #21745 from rik-smeets/fix-stuck-boat-hire
Fix #866: Boat Hire boats get stuck entering track
2024-04-10 12:16:38 +02:00
Rik Smeets b009643ab0 Remove to do statement by explicit null check on collideVehicle 2024-04-10 07:58:39 +02:00
Rik Smeets e250ec3b66 Fix #866: Boat Hire boats get stuck entering track 2024-04-10 07:58:39 +02:00
Rik Smeets 2a78399418 Introduce BoatHireSubState enum 2024-04-10 07:58:36 +02:00
OpenRCT2 git bot 828eb0e467 Merge Localisation/master into OpenRCT2/develop 2024-04-07 04:02:09 +00:00
Michael Steenbeek e190afeb80
Fix maze drawing (#21729) 2024-04-06 21:14:18 +02:00
Michael Steenbeek a38039f6e4
Add feature to allow overriding x/y offsets in GX files 2024-04-05 15:41:35 +02:00
Michael Steenbeek c3cf6f01ca
Add #15782 to changelog
Addressed in https://github.com/OpenRCT2/OpenRCT2/pull/21351.
2024-04-05 13:17:48 +02:00
Michael Steenbeek 318bff1eac
Merge pull request #21676 from Gymnasiast/refactor/gamestate-to-gamestate-t
Move everything in GameState to GameState_t
2024-04-04 18:34:45 +02:00
Gymnasiast 19e403068d
Fix formatting 2024-04-04 18:18:25 +02:00
Gymnasiast c158854a7f
Move Park into namespace, add other park-related things to struct 2024-04-04 18:14:27 +02:00
Gymnasiast 4f3b7aa8a9
Turn Park into struct 2024-04-04 18:12:36 +02:00
Gymnasiast 7b072808ee
Turn Date into struct 2024-04-04 18:12:36 +02:00
Gymnasiast fef1a27342
Remove GameState class 2024-04-04 18:12:35 +02:00
Gymnasiast 28451027b1
Move Park to GameState_t 2024-04-04 18:12:08 +02:00
Gymnasiast 1f1377a8ef
Move Date to GameState_t 2024-04-04 18:12:08 +02:00
Michael Steenbeek 26d65b37ea
Merge pull request #21645 from Gymnasiast/refactor/inverted-covered-handling-2
Refactor track paint functions and available pieces in RTDs
2024-04-03 17:30:14 +02:00
Michał Janiszewski 58249538eb Start v0.4.11 2024-04-02 23:39:48 +02:00
Michał Janiszewski d957fdf8ca Merge branch 'master' into develop 2024-04-02 23:38:35 +02:00
Michał Janiszewski e55d761eb7 Release v0.4.10
- Feature: [#18171] Add port of the RCT1 Stand-Up Roller Coaster.
- Feature: [#21590] [Plugin] Plugins can now read and write banner properties of tile elements.
- Feature: [#21636] Add shortcut key for sorting tile elements.
- Feature: [objects#294] Add scenery versions of wooden truss supports.
- Feature: [objects#295] Flipped version of wooden post.
- Improved: [#21424] Extra viewports can now rotate independently from the main viewport.
- Improved: [#21561, #21631] Enable more features in Android build (plugins, networking, multiplayer, audio formats).
- Improved: [#21599] Currency signs now use non-breaking spaces.
- Improved: [objects#157] Added sloped images for many walls.
- Improved: [objects#288] Better map colours and more sensible prices for RCT1 land surfaces.
- Improved: [objects#292] Vehicle colour cleanups for WW/TT vehicles.
- Improved: [objects#299] More accurate ratings modifiers for RCT1 vehicles.
- Improved: [objects#309] Updated names for dodgems and flying saucers vehicles.
- Improved: [objects#313] buildMenuPriority for dodgems and flying saucers vehicles.
- Change: [#21529] Classify “Southern Sands”, “Tiny Towers”, “Nevermore Park”, “Pacifica” as expert scenarios.
- Change: [#21545] Reorder Wacky Worlds scenarios and adjust their difficulty classification.
- Fix: [#910] Extra viewport does not preserve the location when rotating.
- Fix: [#18413] Crash when mouse over a hacked train.
- Fix: [#20338] Cannot select Scenery Picker or Scatter Tool when the scenery recolouring tool is active.
- Fix: [#21317] Track designer allows proceeding without an object selected.
- Fix: [#21360] If the object selection is missing certain types, the Object Selection window will switch to an incorrect tab.
- Fix: [#21419] Cannot place walls underground beneath sloped tiles with clearance checks disabled.
- Fix: [#21434] Number of guests overflows in objective text.
- Fix: [#21522] Supports for 3×3 turns and 45 degree turns on the Hybrid Coaster and Wooden Roller Coaster not drawn correctly.
- Fix: [#21543] Crash with creating a TrackIterator with invalid arguments.
- Fix: [#21635] Tile inspector hotkey can set wall slope for non-slopeable objects.
- Fix: [#21641] Crash when creating track iterator from an invalid tile element.
- Fix: [#21652] Dialog window to confirm overwriting files does not apply the theme colours correctly.
- Fix: [#21654] No sound effects when using RCT Classic as an asset base.
- Fix: [#21654] Extraneous reports of an object conflict between `rct2.audio.base` and `rct2.audio.base.rctc`.
- Fix: [#21664] Crash when switching between languages that use TTF.
- Fix: [#21668] Crash when on null ride in Guest::UpdateRideLeaveExit.
- Fix: [#21691] Crash when validating rides which can't contain banked track.
- Fix: [objects#290] “Haunted Mansion” cars have a non-functional third remap colour.
- Fix: [objects#296] Incorrect wall placement around large Kremlin/drab pieces.
- Fix: [objects#300] Incorrect Colosseum and volcano corner clearances.
- Fix: [objects#319] Incorrect diagonal slope images used for RCT1 corkscrew.
- Fix: [objects#320] Incorrect Mandarin Duck boats capacity.
2024-04-02 22:21:50 +02:00
Michał Janiszewski 87fe784da0 Merge branch 'develop' 2024-04-02 22:14:07 +02:00
Michał Janiszewski c8f91d3f35
Update backtrace token for upcoming release 2024-04-02 22:11:17 +02:00
Michael Steenbeek 3461ac38ca
Fix #21522: incorrect support drawing on Hybrid and Wooden (#21710)
* Fix #21522: incorrect support drawing on Hybrid and Wooden

* Add changelog entry
2024-04-02 22:05:48 +02:00
Michał Janiszewski 6b734fda6b
Fix #21591: Banner text colors are not working properly (#21709)
* Fix #21591: Banner text colors are not working properly
2024-04-02 19:06:58 +03:00
Michał Janiszewski dfcb527ada
Ensure TTF system is torn down in correct order (#21707)
`TTFDispose` uses `gCurrentTTFFontSet` to deallocate internal resources.
Having the function called after global variable got changed meant it
tried to deallocate incorrect font and would subsequently call
`FT_Done_Face` on a struct having internal data set to nullptr.

Reproduction is fairly easy:
1. launch the game in Korean (I made sure to have all the indexes primed
   for this language beforehand - i.e. launch it twice),
2. switch to Japanese,
3. switch back to Korean

Fixes #21664
2024-04-02 00:52:40 +02:00
John Kastner 6ea091841f
Fix memory leak loading malformed `SawyerChunk` (#21508)
* Fix memory leak loading malformed `SawyerChunk`

A temporary buffer was not free'd after failing to parse in
`SawyerChunkReader::ReadChunkTrack`. Fix this following the pattern used
in `SawyerChunkReader::ReadChunk` by wrapping the relevant code in a
`try` block with `FreeLargeTempBuffer` called when an exception is
caught.

* Use unique_ptr

* Remove `AllocateLargeTempBuffer`

---------

Co-authored-by: Michał Janiszewski <janisozaur@gmail.com>
2024-04-01 22:40:14 +00:00
Claudio Tiecher a94e6c54d8
Part of #21421: replace define with constexpr (#21679) 2024-04-01 07:00:32 -03:00
Michael Steenbeek 9062049be1
Fix sound effects not working with RCTC base, fix audio object conflict
Due to this overwriting of object IDs, loading the sound effects would not work on RCTC. This overwriting also caused object conflicts which weren’t always won by the RCTC one. This fixes both problems by using non-clashing names, and only renaming one to `rct2.audio.base`, the name expected by the asset packs.
2024-03-31 22:28:17 +00:00
Michał Janiszewski 06081eb23d
Fix #21691: Use correct iterator in RideCheckTrackContainsBanked (#21701) 2024-04-01 00:23:37 +02:00
Michael Steenbeek 19a65d1642
Bump network version for large scenery fix (#21699) 2024-03-31 19:25:19 +02:00
Michael Steenbeek 0668f0fb92
Fix #21695: Cannot remove large scenery 2024-03-31 17:57:14 +02:00
Michał Janiszewski d8ba574e6c
Default-initialise more members of Ride (#21694)
It seems they got omitted in https://github.com/OpenRCT2/OpenRCT2/pull/21514
2024-03-31 00:12:24 +01:00
Michael Steenbeek 8d16c0a73d
Merge pull request #21647 from Gymnasiast/refactor/image-import
Refactor image import
2024-03-31 00:08:31 +01:00
Michael Steenbeek ab73fe7317
Merge pull request #21514 from ZehMatt/ride-initialization
Default Ride initialization
2024-03-30 23:34:20 +01:00
ζeh Matt 84d1f502b1
Rename NO_TRAIN to kNoTrain 2024-03-30 23:18:51 +01:00
ζeh Matt f14b86426d
Remove some unnecessary field assignments in RideCreateAction 2024-03-30 23:18:51 +01:00
ζeh Matt e3343f263f
Default initialize newly created Rides 2024-03-30 23:18:08 +01:00
ζeh Matt d969a4f80d
Default initialize all members in Ride 2024-03-30 23:18:08 +01:00
Gymnasiast 88eca0d518
Move everything in ImageImporter.cpp into namespace 2024-03-30 18:13:03 +01:00
Gymnasiast c232aa9b0c
Create import meta object, use single method for JSON parsing 2024-03-30 18:13:03 +01:00
Gymnasiast eb2cda6a56
Replace `"forceBmp": true` with `"format": "raw"` 2024-03-30 18:13:02 +01:00
Michael Steenbeek 27e43b3a94
Merge pull request #21581 from pfroud/cleanup-error-logging
Cleanup error logging
2024-03-30 18:08:12 +01:00
Gymnasiast 18232341c8
Remove unused variables 2024-03-30 17:31:59 +01:00
Peter Froud c4b7845c26
Use `if... else if` 2024-03-30 17:15:17 +01:00
Peter Froud 869d1b398b
Assign variable in condition for documentation 2024-03-30 17:15:17 +01:00
Peter Froud 322321645b
Add `STR_ERR_INVALID_COLOUR` 2024-03-30 17:15:14 +01:00
Peter Froud 2b1d5ad9b7
Use specific error stringIDs 2024-03-30 17:12:54 +01:00
Peter Froud 276ff311cf
Add `LOG_WARNING` about bugged scenery entry 2024-03-30 17:12:54 +01:00
Peter Froud 1f698dfc76
Add `LOG_ERROR` calls 2024-03-30 17:12:54 +01:00
Peter Froud d1f740c786
Change "Could not find X" to "No X" 2024-03-30 17:12:54 +01:00
Peter Froud 40537a17fa
General cleanup of existing error messages 2024-03-30 17:12:54 +01:00
Peter Froud 226fc4cb00
Add location to error messages 2024-03-30 17:12:54 +01:00
Peter Froud 257c2d45d3
Change `if(elem!=nullptr)` to `if(elem==nullptr)` 2024-03-30 17:12:54 +01:00
Peter Froud f49fe68cc6
Improve messages for default case in switch stmt 2024-03-30 17:12:54 +01:00
Peter Froud a1517a4fcb
Use "X not found for Y" message style 2024-03-30 17:12:54 +01:00
Peter Froud 9e702d8b65
Missed an instance of `ride == nullptr` 2024-03-30 17:12:54 +01:00
Peter Froud 87ee06b7a4
Use `STR_ERR_RIDE_NOT_FOUND` when `ride==nullptr` 2024-03-30 17:12:54 +01:00
Peter Froud 13abc3441c
Change "invalid game command" messages 2024-03-30 17:12:54 +01:00
Peter Froud 125fa12d6f
Remove redundant word ("index. index = %u") 2024-03-30 17:12:53 +01:00
Peter Froud 338cca6760
Add missing `%u` in format strings 2024-03-30 17:12:53 +01:00
Peter Froud 23958186bd
Change `LOG_ERROR` to `LOG_WARNING` for errors 2024-03-30 17:12:53 +01:00
Gymnasiast e1127cde8a
Split Lay-down RC track drawer 2024-03-30 00:33:35 +01:00
Gymnasiast 96c9b7d85d
Refactor track paint functions and available pieces in RTD 2024-03-30 00:33:35 +01:00
Ryan Gudonis b5fdcf9a17
Change difficulty order for Wacky Worlds scenarios 2024-03-29 00:11:30 +01:00
mrmbernardi d48b75fb86
Refactor TTF drawing (#21621) 2024-03-28 23:28:54 +01:00
Matt 4eacb21f57
Merge pull request #21685 from AaronVanGeffen/ci-distros
Drop Ubuntu Focal v20.04 from the CI roster
2024-03-28 21:38:28 +02:00
Matt b9a0dcbe2f
Merge pull request #21686 from AaronVanGeffen/android-cpp20
Move Android build fully to C++20 as well
2024-03-28 16:42:00 +02:00
Aaron van Geffen db18c712fe Remove frowny faces regarding char8_t<->char conversion 2024-03-28 14:04:54 +01:00
Aaron van Geffen 66ca0388ed Move Android build fully to C++20 as well 2024-03-28 00:38:56 +01:00
Aaron van Geffen abc02511e1 Show distro vendor in CI roster 2024-03-28 00:37:32 +01:00
Aaron van Geffen afb4dcf728 Drop Ubuntu Focal v20.04 from the CI roster 2024-03-28 00:34:01 +01:00
reversebottle 854d4e6fa4
Fix #21652: set correct color on save overwrite first open (#21666) 2024-03-27 23:12:55 +00:00
Michael Steenbeek 66edbc01aa
Merge pull request #21682 from AaronVanGeffen/pragma-once
Add pragma once to a few headers
2024-03-27 22:16:24 +01:00
Aaron van Geffen cec251bb63 Take kAllObjectTypes internal as well 2024-03-27 21:26:07 +01:00
Aaron van Geffen e173564500 Add missing pragma once to TileElementsView.h 2024-03-27 20:39:37 +01:00
Aaron van Geffen 98c3c8b22c Add missing header to ObjectEntryManager.h 2024-03-27 20:39:16 +01:00
Aaron van Geffen e898e9211d Move kObjectEntryGroupCounts to ObjectList.cpp 2024-03-27 20:13:10 +01:00
Aaron van Geffen d645906003 Move kTransientObjectTypes, kIntransientObjectTypes out of header 2024-03-27 19:51:57 +01:00
Aaron van Geffen 5f4d02a6f7 Move kLegacyObjectEntryGroupEncoding to ObjectRepository.cpp 2024-03-27 19:20:05 +01:00
Michael Steenbeek 8e563edcbe
Fix #21673: Incorrect tunnels on Classic Stand-Up 2024-03-27 18:40:07 +01:00
Michael Steenbeek 03b0c1e884
Fix compilation error on 64-bit MSVC builds (#21677) 2024-03-26 16:28:51 +01:00
Harry Hopkinson bf20a6d146
Fix #21317: Track designer allows proceeding without an object selected
Co-authored-by: Gymnasiast <m.o.steenbeek@gmail.com>
2024-03-26 13:53:32 +01:00
reversebottle 7c65a372aa
Add kParkRatingHistorySize constant 2024-03-26 13:24:25 +01:00
Michał Janiszewski 43507671b5
Fix crash on null ride in Guest::UpdateRideLeaveExit (#21668) 2024-03-26 11:46:34 +00:00
Stephan Spengler 2913a0686a
Add banner properties to plugin API for large scenery, walls and banners 2024-03-26 11:42:09 +00:00
Michael Steenbeek 8e157bd709
Merge pull request #21667 from janclod/replace-define-with-constexpr-1
Part of #21421: Replace define with constexpr
2024-03-26 11:48:35 +01:00
Claudio Tiecher be6a4cf5d9 Part of #21421: make var decl consistent 2024-03-26 10:34:56 +01:00
Michael Steenbeek fb49287343
Bump network version for object changes 2024-03-26 00:34:16 +01:00
Michael Steenbeek 457d40bf2b
Merge pull request #21642 from Gymnasiast/feature/classic-standup-2024
Add Classic Stand-Up Roller Coaster
2024-03-26 00:28:19 +01:00
Claudio Tiecher a1fd280a27 Part of #21421: refactor also test 2024-03-25 17:09:25 +01:00
Claudio Tiecher 4d99fec550 Part of #21421: apply more clang-formatting 2024-03-25 16:56:04 +01:00
Claudio Tiecher 5d2ecf71e5 Part of #21421: apply clang-formatting 2024-03-25 16:46:44 +01:00
Claudio Tiecher fe84bb3e7e Adding my name to list of contribs 2024-03-25 16:17:32 +01:00
Claudio Tiecher 026e12d22e Part of #21421: refactor MPH(x) as literal 2024-03-25 16:17:32 +01:00
Claudio Tiecher eb4c64abc4 Part of #21421: improved consistency for var decl 2024-03-25 16:17:32 +01:00
Claudio Tiecher 24688ad5a3 Part of #21421: Refactor TILE_ELEMENT_DIRECTION_MASK 2024-03-25 16:17:32 +01:00
Claudio Tiecher c6def2d0a9 Part of #21421: Refactor TILE_ELEMENT_TYPE_MASK 2024-03-25 16:17:32 +01:00
Claudio Tiecher e5ff6b271a Part of #21421: Refactor TILE_ELEMENT_QUADRANT_MASK 2024-03-25 16:17:32 +01:00
Claudio Tiecher ffb8b4d44b Part of #21421: Refactor MAXIMUM_MAP_SIZE_TECHNICAL 2024-03-25 16:17:32 +01:00
Claudio Tiecher ef81a6376e Part of #21421: Refactor MINIMUM_MAP_SIZE_TECHNICAL 2024-03-25 16:17:32 +01:00
Claudio Tiecher b60483f25d Part of #21421: Refactor VEHICLE_SEAT_NUM_MASK 2024-03-25 16:17:32 +01:00
Claudio Tiecher 2c4c2da319 Part of #21421: Refactor VEHICLE_SEAT_PAIR_FLAG 2024-03-25 16:17:32 +01:00
Claudio Tiecher 13e9ff84c2
Part of #21421: Replace define with constexpr (#21626)
* Part of #21421: Refactor RIDE_INITIAL_RELIABILITY in Ride.h

* Part of #21421: Refactor STATION_DEPART_FLAG and STATION_DEPART_MASK

* Part of #21421: Refactor MAX_STATION_PLATFORM_LENGTH

* Part of #21421: Refactor RIDE_RATING_UNDEFINED

* Part of #21421: Refactor TRACK_BLOCK_END

* Part of #21421: Refactor TRACK_PREVIEW_IMAGE_SIZE

* Part of #21421: Refactor based on feedback

* Part of #21421: Fix signed/unsigned mismatch on Win

* Improved consistency kTrackPreviewImageSize

Co-authored-by: Michael Steenbeek <m.o.steenbeek@gmail.com>

* Part of #21421: kMaxStationPlatformLength to int8

---------

Co-authored-by: Michael Steenbeek <m.o.steenbeek@gmail.com>
2024-03-24 21:49:50 +00:00
Michał Janiszewski 0581b1edd3
Fix #18413: Trying to set tooltip using null vehicle (#21662) 2024-03-24 21:21:18 +01:00
Harry Hopkinson 249c8259c1
Fix #20338: Scenery Picker Hotkey not selected with re-paint tool 2024-03-24 12:29:40 +01:00
Max bc926057eb
Fix #21419: Cannot build walls under sloped terrain
Co-authored-by: Gymnasiast <Gymnasiast@users.noreply.github.com>
2024-03-23 12:39:00 +01:00
OpenRCT2 git bot 2b2091130b Merge Localisation/master into OpenRCT2/develop 2024-03-23 04:01:49 +00:00
Michael Steenbeek 6eb96b1b07
Fix #21604: Scenario selector shows incorrect guest objectives 2024-03-22 21:39:04 +01:00
Gymnasiast 02e412d9a1
Pull in objects release v1.4.2 2024-03-22 18:42:47 +01:00
Gymnasiast 40394389ef
Add Classic Stand-Up and objects release to changelog 2024-03-22 17:31:02 +01:00
Gymnasiast bc27179b07
Pull in objects release v1.4.1 2024-03-22 17:30:02 +01:00
Gymnasiast 24807932c3
Fix flat-to-diagonal supports not quite reaching the track 2024-03-22 17:30:02 +01:00
Gymnasiast c1c71003eb
Add fallback for people without RCT1 2024-03-22 17:30:02 +01:00
ZeeMaji 8614517e14
Accurate max build height for classic 2024-03-22 17:30:02 +01:00
ZeeMaji d94ebee33e
Add improved description 2024-03-22 17:30:02 +01:00
Gymnasiast 2465694404
Fix formatting 2024-03-22 17:30:02 +01:00
Gymnasiast d6ce38185f
Consolidate support and general support height calls 2024-03-22 17:30:02 +01:00
Gymnasiast 00e1f504f5
Create rotated version of support functions 2024-03-22 17:30:02 +01:00
Gymnasiast 9982749def
Implement diagonal-sloped-straight-to-bank sections 2024-03-22 17:30:02 +01:00
Gymnasiast b66f687880
Implement diagonal flat parts 2024-03-22 17:30:02 +01:00
Gymnasiast 9b1603a37a
Implement 2×2 turns 2024-03-22 17:30:02 +01:00
Gymnasiast eb058d4fe3
Implement 45 degree banked corners 2024-03-22 17:30:02 +01:00
Gymnasiast 73441bff5d
Implement remaining orthogonal banked pieces 2024-03-22 17:30:01 +01:00
Gymnasiast 3c4b0ba36e
Consolidate PaintUtilSetGeneralSupportHeight() calls for 3×3 2024-03-22 17:30:01 +01:00
Gymnasiast 515951e667
Normalise PaintUtilRotateSegments() calls 2024-03-22 17:30:01 +01:00
Gymnasiast 6602100d22
Update for upstream changes 2024-03-22 17:30:01 +01:00
Gymnasiast 91e0f91cb0
Name segment constants in ClassicStandUpRollerCoaster.cpp 2024-03-22 17:30:01 +01:00
Gymnasiast dfa5875c5a
Implement 3×3 banked turn (pending calls to segment support height) 2024-03-22 17:30:01 +01:00
Gymnasiast 82d8167482
Fix Classic Stand Up vehicle colours 2024-03-22 17:30:01 +01:00
Gymnasiast d21b411f43
Implement flat-to-banked transitions 2024-03-22 17:30:01 +01:00
Gymnasiast 1d324247bf
Add constants 2024-03-22 17:30:01 +01:00
Gymnasiast cd5c56d811
Add Classic Stand-Up Roller Coaster 2024-03-22 17:30:01 +01:00
Andrew a972d231d7
Add shortcut key for sorting tile elements (#21636) 2024-03-22 15:24:10 +01:00
Andrew 693c422cd4
Prevent TI hotkey from setting wall slope for non-slopeable objects (#21635) 2024-03-22 11:20:48 +01:00
OpenRCT2 git bot 51b0143b2d Merge Localisation/master into OpenRCT2/develop 2024-03-22 04:01:40 +00:00
Michael Steenbeek 1470507d8e
Fix Object Load Error and Scenery Scatter windows looking weird
These two windows (and only these two) inherited from WindowBase, rather than Window, and as such regressed because of #21572.
2024-03-22 02:51:41 +01:00
Michael Steenbeek 74364e2afc
Fix #21641: NPE when creating track iterator from invalid tile element 2024-03-22 02:51:11 +01:00
Jan Kelemen cb3b2a77e7
Move gWidePathTileLoopPosition and gGrassSceneryTileLoopPosition to GameState_t 2024-03-21 22:50:18 +01:00
Michał Janiszewski 4484dc647c
Merge pull request #21631 from janisozaur/android-enable-more-libraries
Android: enable more libraries
2024-03-21 14:22:36 +01:00
Stephan Spengler 304ce22756
Improve research documentation for plugin API 2024-03-21 14:11:52 +01:00
Duncan 5a70fd97fb
Move vehicle sounds update into Ui library (#21577)
* Move vehicle sounds update into Ui library

* Add missing statics

* Apply review comments

* Sprinkle some const

* Clang format accumulate
2024-03-20 11:14:52 +00:00
Michał Janiszewski c166d69f22 Android: Compile x86_64 as well, needed for emulator 2024-03-18 12:18:20 +01:00
Michał Janiszewski 3a6115b2b5 Android: Add changelog entry 2024-03-18 12:18:20 +01:00
Michał Janiszewski 221877fa33 Android: Replace curl dependency with HttpAndroid Java implementation 2024-03-18 12:18:20 +01:00
Michał Janiszewski 723b9ed5bc Android: Update Java dependencies 2024-03-17 23:43:59 +01:00
Michał Janiszewski b07b1e29dc Android: Enable more features (networking, multiplayeri, vorbis) 2024-03-17 23:43:59 +01:00
CoryY 3f81a491b0
Close #21569: Remove 'Window' from Window Open function names (#21613)
* Close #21569: Remove 'Window' from Window Open function names

Windows are all under the OpenRCT2::Ui::Windows namespace. As such, "Window" is removed from the Open functions names.

* Update Contributors.md

* Fix formatting TrackMangeOpen

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>

* Fix formatting TrackPlaceOpen

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>

---------

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-03-17 06:37:46 +00:00
Michael Steenbeek 8963234eac
Use same parameter names in g2/sprites.json and object json 2024-03-16 15:45:04 +01:00
Matt 6633509af6
Refactor peep update (#21605) 2024-03-16 06:35:55 -03:00
Claudio Tiecher 59958a6b8f
Part of #21421: replace define with constexpr in Ride.h (#21602) 2024-03-16 06:34:01 -03:00
Harry Hopkinson 25d3db0f1f
Move gParkRatingCasualtyPenalty to GameState_t (#21610) 2024-03-16 06:24:50 -03:00
OpenRCT2 git bot c858b3a8c1 Merge Localisation/master into OpenRCT2/develop 2024-03-15 04:02:01 +00:00
Michael Steenbeek 2181f1b09e
Part of #21193: move entities to GameState_t 2024-03-15 00:22:18 +01:00
Michael Steenbeek 0f927d720b
Merge pull request #21579 from Gymnasiast/refactor/segments
Name segment constants and create a proper enum
2024-03-14 23:16:21 +01:00
Michael Steenbeek 0968d87668
Use non-breaking spaces around currency units 2024-03-14 21:43:51 +00:00
Michael Steenbeek d2e7d57104
Close #21536: Replace ATOMIC_VAR_INIT() macro with constructor 2024-03-14 22:34:54 +01:00
Harry Hopkinson 8a6de886be
Move awards to GameState_t (#21601) 2024-03-14 18:16:33 -03:00
Jan Kelemen 9bb678688e
Fix #21434: Number of guests overflows in objective text 2024-03-14 19:49:57 +01:00
Harry Hopkinson b69db13de3
Move gPeepWarningThrottle to GameState_t 2024-03-14 18:39:11 +01:00
OpenRCT2 git bot 15650ad184 Merge Localisation/master into OpenRCT2/develop 2024-03-14 04:01:42 +00:00
OpenRCT2 git bot 470667ed28 Merge Localisation/master into OpenRCT2/develop 2024-03-12 04:01:51 +00:00
Michał Janiszewski 6414ea29fb
Merge pull request #21585 from janisozaur/android-ci-14
Use v14 images in CI
2024-03-11 21:39:21 +01:00
Michał Janiszewski 5c00047bd1 Sync android project with docker build image 2024-03-11 21:06:46 +01:00
Michał Janiszewski 9524174d13 Use v14 images in CI
Fixes #19409
2024-03-11 20:55:13 +01:00
Peter Froud 1e51925968
Change "ternary" to "tertiary" (#21582) 2024-03-11 08:42:54 -03:00
OpenRCT2 git bot 988162e125 Merge Localisation/master into OpenRCT2/develop 2024-03-11 04:02:00 +00:00
Gymnasiast 7ae98f7421
Use EnumsToFlags() and create a proper enum 2024-03-11 01:12:35 +01:00
Gymnasiast 632f29e6a9
Name segment constants 2024-03-11 00:22:35 +01:00
Matt 6950a74b37
Fix #21565: Giant screenshots not working correctly 2024-03-10 21:24:40 +01:00
Michael Steenbeek 1981ca6b0b
Close #16582: Translate in-game console help text 2024-03-10 19:46:21 +01:00
Harry Hopkinson e486606189
Move gPeepSpawns to GameState_t (#21570) 2024-03-10 15:16:28 -03:00
Duncan 1d3bd31ab8
Deduplicate FormatStringID symbols 2024-03-10 18:15:49 +00:00
Michael Steenbeek b219ab1ed4
Use LanguageGetString() if there is nothing to format 2024-03-10 18:48:23 +01:00
Michael Steenbeek 24f5675cab
Remove WindowBase::IsLegacy() function (#21572) 2024-03-10 18:48:06 +01:00
Ryan Gudonis 65fa51976b
Classify some LL scenarios as expert
Adjust difficulty categories for Loopy Landscape scenarios:
- Southern Sands
- Tiny Towers
- Nevermore Park
- Pacifica
2024-03-10 15:06:43 +00:00
Harry Hopkinson 78d95fc0bd
Pass DrawPixelInfo by reference (#21563) 2024-03-10 12:00:08 -03:00
Michael Steenbeek 9ebe65b55a
Fix building sloped banked 3×3 turns when coaster also has 1×1 turns
This fixes a bug that would prevent the user from building 3×3 banked sloped turns, if the roller coaster also had 1×1 flat turns enabled.
The Spinning Roller Coaster that @RealSteel89 is working on is the first one to do so, revealing this bug.
2024-03-10 14:35:18 +00:00
Duncan 7a60e7f2e0
OpenRCT2::Ui::Windows namespace for OpenRCT2 Ui Windows (#21559)
* Move all the windows into OpenRCT2::Ui::Windows namespace

* Fix missing symbol

* Clang format

* Call the correct FormatStringID
2024-03-10 13:52:35 +00:00
Michał Janiszewski 7634dfb6a3
Android: Enable plugins (#21561) 2024-03-09 20:03:36 +01:00
Duncan 3146d463bd
Move Ui header items to OpenRCT2::Ui (#21546)
* Move ui definitions to ui project

* Enforce coding style

* Apply clang format

* Add clang tidy ignore

* Increase compiler happiness
2024-03-09 14:15:45 +00:00
Harry Hopkinson 0c1fb5fec0
Fix #21543: Game Crashing with invalid TrackIterator (#21547)
* Check if el is nullptr

Check if el is nullptr

Format

* Add changelog
2024-03-09 14:15:28 +00:00
Harry Hopkinson 048276b67a
Move gLastEntranceStyle to GameState_t 2024-03-09 11:27:05 +01:00
OpenRCT2 git bot d0592e0887 Merge Localisation/master into OpenRCT2/develop 2024-03-08 04:01:38 +00:00
Duncan cb100db56e
Put a number of OpenRCT2::Ui items in the OpenRCT2::Ui namespace 2024-03-07 23:36:49 +01:00
Michael Steenbeek dec5140f20
Merge pull request #21532 from jan-kelemen/move_ride_rating_and_same_price_to_game_state
Move gSamePriceThroughoutPark and gRideRatingUpdateStates to GameState_t
2024-03-07 21:59:58 +01:00
Matt 1e8ae8ea11
Merge pull request #21542 from Harry-Hopkinson/gLandPrice-to-GameState
Move gLandPrice to GameState_t
2024-03-07 22:54:36 +02:00
Matt a2fdd600cf
Merge pull request #21424 from ZehMatt/viewport-update
Store the rotation in viewports
2024-03-07 22:42:00 +02:00
Tulio Leao 7190e7ae26
Merge pull request #21526 from Harry-Hopkinson/replace-static_cast<int32_t>-with-EnumValue 2024-03-07 17:36:00 -03:00
ζeh Matt 64bc52c5f6
Update changelog.txt 2024-03-07 21:57:37 +02:00
Harry Hopkinson 81814bd81e Move gLandPrice to GameState_t 2024-03-07 18:44:21 +00:00
ζeh Matt 2814662ea8
Remove unnecessary reset of entities spatial index, coordinates are 3D 2024-03-07 01:05:47 +02:00
ζeh Matt d3b8ad471e
Turn the error into a verbose message when there is no viewport 2024-03-07 00:54:09 +02:00
Piotr Kubaj 96be441533
Don't include alloca.h on FreeBSD (#21535)
alloca.h does not exist on FreeBSD.
2024-03-06 19:02:27 +01:00
Stephan Spengler 01248c26a4
Improve API documentation: use Direction type in FootpathElement
Change type of slopeDirection and queueBannerDirection of footpaths to Direction in openrct2.d.ts
2024-03-06 18:22:50 +01:00
Jan Kelemen 56df47a48d Move gRideRatingUpdateStates to GameState_t
- Move gRideRatingUpdateStates variable to GameState_t
- Remove RideRatingGetUpdateStates function
2024-03-06 17:54:40 +01:00
Jan Kelemen ee4e8d0323 Move gSamePriceThroughoutPark to GameState_t 2024-03-06 17:54:31 +01:00
Harry Hopkinson 9ab18e37a2 Cleanup static_cast's
Cleanup static_cast's

Cleanup static_casts'

Cleanup static_casts'

Format Code

Address requested changes

Address requested changes

Change uint16_t to size_t

Stop undefined behaviour

Address requested changes.
2024-03-06 10:28:45 +00:00
OpenRCT2 git bot aa6a1b0bdd Merge Localisation/master into OpenRCT2/develop 2024-03-06 04:02:01 +00:00
Harry Hopkinson 86c28693ba
Move gGuestChangeModifier to GameState_t 2024-03-06 00:06:27 +01:00
ζeh Matt a1304ef147
Fix rebase 2024-03-05 10:34:03 +02:00
ζeh Matt ae0af55a99
Make GCC happy due to non-enumerated usage 2024-03-05 10:26:00 +02:00
ζeh Matt 425c4cf04e
Allow viewports to have an independent rotation 2024-03-05 10:25:59 +02:00
ζeh Matt c87b82d75e
Add a rotate button to the extra viewport 2024-03-05 10:25:59 +02:00
ζeh Matt 8bf33a6039
Fix viewport not using the correct rotation in some cases 2024-03-05 10:25:59 +02:00
ζeh Matt f7682f6b13
Apply clang-format 2024-03-05 10:25:59 +02:00
ζeh Matt bdcfa5af8f
Add a function to invalidate viewports pre-transformed position 2024-03-05 10:25:59 +02:00
ζeh Matt 47d346ee81
Remove unused code 2024-03-05 10:25:57 +02:00
ζeh Matt 462bb33234
Refactor viewport rotation to keep it in sync with the primary viewport 2024-03-05 10:23:31 +02:00
ζeh Matt d95f14dcda
Fix ViewportPosToMapPos using the wrong rotation 2024-03-05 10:23:30 +02:00
ζeh Matt a33cc1ac86
Fix ScViewport::moveTo not using the right rotation 2024-03-05 10:23:30 +02:00
ζeh Matt 7be082cacc
Fix ViewportAdjustForMapHeight not using the correct rotation 2024-03-05 10:23:29 +02:00
ζeh Matt 1a7b873256
Fix ViewportInteractionGetClosestPeep not using the right rotation 2024-03-05 10:23:29 +02:00
ζeh Matt 87dd29f3bc
Make GetClosestPeep static 2024-03-05 10:23:29 +02:00
ζeh Matt afe266e2fe
Recalculate the screen position for entities when painting 2024-03-05 10:23:28 +02:00
ζeh Matt 98acdf3743
Use the rotation from the Viewport where applicable 2024-03-05 10:23:28 +02:00
ζeh Matt 2661cf8772
Refactor out all uses of gCurrentRotation, remove gCurrentRotation 2024-03-05 10:23:28 +02:00
ζeh Matt 8864f6cf51
Add ViewportGetMain 2024-03-05 10:23:27 +02:00
ζeh Matt 81499643db
Rename unused field to Rotation 2024-03-05 10:23:27 +02:00
ζeh Matt 1a197af715
Make ViewportPaint static, refactor TrackDesign to use ViewportRender 2024-03-05 10:23:23 +02:00
OpenRCT2 git bot 33a5ee2160 Merge Localisation/master into OpenRCT2/develop 2024-03-05 04:02:03 +00:00
Harry-Hopkinson 3247d16ed8 Replace size_t's with EnumValue 2024-03-04 19:21:12 +00:00
Harry-Hopkinson 56df39dcb4 Replace uint8's with EnumValue
Replace uint8's with EnumValue

Replace uint8's with EnumValue

Revertl arge change

Revert large change

Format
2024-03-04 19:04:18 +00:00
Harry Hopkinson ef9840f29b Replace static_cast with EnumValue 2024-03-04 15:37:20 +00:00
Harry Hopkinson 9748038815
Move gExpenditureTable to GameState_t 2024-03-04 15:24:29 +01:00
Duncan 4b6ba80a46
Move cheats to struct in GameState_t 2024-03-03 22:44:15 +01:00
mrmbernardi 4ccecd6e68
Remove forwarding functions in Window.cpp (#21516) 2024-03-03 18:04:09 +01:00
Jan Kelemen bc149ca95c
Move gHistoricalProfit and gGuestsInParkHistory to GameState_t (#21513)
* Move gGuestsInParkHistory to GameState_t

* Move gHistoricalProfit to GameState_t
2024-03-03 16:05:48 +00:00
Matt 85f0919483
Merge pull request #21510 from jan-kelemen/gCashHistory_to_GameState_t
Move gCashHistory to GameState_t
2024-03-03 11:36:31 +02:00
OpenRCT2 git bot eaa082bf3e Merge Localisation/master into OpenRCT2/develop 2024-03-03 04:01:58 +00:00
mrmbernardi a0b18688ec
Merge pull request #21460 from mrmbernardi/map-layout
Fix #21289: Map window does not layout properly
2024-03-02 22:52:31 +01:00
Michał Janiszewski e05ae5f051 Start v0.4.10 2024-03-02 22:47:13 +01:00
Michał Janiszewski 5078d3d8ef Merge branch 'master' into develop 2024-03-02 22:46:16 +01:00
Michał Janiszewski a17240544b Release v0.4.9
- Feature: [#20376] Add Ukrainian language.
- Feature: [#20709] [Plugin] Plugins can now check metadata from all registered plugins.
- Feature: [#21376] Add option to reload an object (for object developers).
- Feature: [#21413, OpenSFX#19] Add log flume lift sound effect (when “chainlift” is enabled).
- Feature: [#21455] Add option to control hidden scenery.
- Feature: [objects#282] Added RCT1 beta terrains.
- Improved: [#20093] Use new colours for guests’ clothing when they spawn.
- Improved: [#21356] Resize the title bar when moving between displays with different scaling factors on Windows systems.
- Improved: [#21388] Tooltips will now show even when an error message is present.
- Improved: [#21423] Add mechanism to allow building partly underground.
- Improved: [objects#272, objects#276, objects#277, objects#278, objects#279, objects#280, objects#281] Add most remaining ports of RCT1 ride and vehicle objects (for import only).
- Improved: [objects#275, objects#284, objects#286] Add remaining RCT1 walls (for import only).
- Change: [#21350] Group Dodgems and Flying Saucers vehicles.
- Change: [#21453] Reintroduce lost RCT1 Jet skis colour presets to the boat hire.
- Change: [objects#285] Mark old reversed train objects as compatibility objects.
- Fix: [#17610] Some scenery items are unavailable in RCT1 scenarios.
- Fix: [#18963] Research table in parks from Loopy Landscapes is imported incorrectly.
- Fix: [#20164] Grass and Rock terrain objects cannot be de-selected.
- Fix: [#20907] RCT1/AA scenarios use the 4-across train for the Inverted Roller Coaster.
- Fix: [#21037] Map animations in the title sequence are stuck.
- Fix: [#21208] Error message will stay open only for a brief moment when the game has been running a while.
- Fix: [#21220] When creating a new park from a SC4 file, the localised park name is not applied.
- Fix: [#21286] Cannot build unbanking turns with RCT1 vehicles.
- Fix: [#21288] Text overlaps in the “About ‘OpenRCT2’” window for Arabic, Chinese, Japanese, Korean and Vietnamese.
- Fix: [#21310] Some half loop elements require more clearance than their upward/downward counterparts.
- Fix: [#21318] Virtual Floor for building scenery is not properly invalidated.
- Fix: [#21330] Tooltips from dropdown widgets have the wrong position.
- Fix: [#21332] Mini Helicopters and Monorail Cycles ride types are swapped in research within RCT1 scenarios.
- Fix: [#21343] “Pause” and “Build Path” hotkeys do not work if top toolbar is hidden.
- Fix: [#21347] Too many options are hidden if the platform has no file picker.
- Fix: [#21350] Maze and Mini Golf track designs from RCT1 not shown in track designs list.
- Fix: [#21425] Additional missing/misplaced land & construction rights tiles in Japanese Coastal Reclaim.
- Fix: [#21484] Upkeep costs for some rides/facilities/shops are not calculated correctly.
- Fix: [#21498] Crash when the size of text can’t be determined.
- Fix: [objects#262, objects#263, objects#265, objects#266, objects#267, objects#268, objects#270, objects#271, objects#283] Various errors in expansion pack objects (original bug).
- Fix: [OpenSFX#18] B&M Roar sound effect not looping correctly.
2024-03-02 21:26:41 +01:00
Michał Janiszewski 1ba9201d48 Merge branch 'develop' 2024-03-02 21:20:58 +01:00
Michał Janiszewski 132d45c9e2
Merge pull request #21491 from ZehMatt/fix-21484
Fix #21484: Upkeep costs for some rides/facilities/shops are not calculated correctly
2024-03-02 21:15:23 +01:00
John Kastner 05c0542d1f
Fix off-by-one error in assertions (#21509)
These should assert that the index in within the bounds of the array, but
it asserts that it is in [0, size] (inclusive). Adjust the assertion so
they fail for an access at `size`.
2024-03-02 17:00:13 -03:00
Jan Kelemen dabf85882a Update contributors.md 2024-03-02 20:48:18 +01:00
Jan Kelemen baf3d8fded Move gCashHistory to GameState_t 2024-03-02 20:41:16 +01:00
Michael Bernardi 412ca5d9c5 Correct location of Map window variables
Move local variables to top of class.
Move static constexpr variables to file scope.
2024-03-02 16:05:07 +01:00
Michael Bernardi 1cb0650cba Fix #21289: Map window does not layout properly 2024-03-02 16:00:10 +01:00
ζeh Matt 556004bf37
Filter NETWORK_STREAM_VERSION from clang-tidy 2024-03-02 15:36:27 +02:00
ζeh Matt 9bfc3a0a29
Zero initialize some fields in ride station 2024-03-02 15:36:27 +02:00
ζeh Matt 78406f4d67
Bump up network version 2024-03-02 15:36:26 +02:00
ζeh Matt 9a8ca8e2d1
Update changelog.txt 2024-03-02 15:35:44 +02:00
ζeh Matt a9870f8148
Fix #21484: Initialize drops to zero when creating a ride 2024-03-02 15:34:58 +02:00
Michael Steenbeek 9d77219b5d
Add #21037 to changelog
[ci skip]
2024-03-02 14:20:30 +01:00
mrmbernardi 54a4cbb1e9
Fix #21037: Animations broken in title sequence 2024-03-02 14:02:03 +01:00
Matt 9a100b82b4
Fix #21498: Crash when the size of text can’t be determined 2024-03-02 13:22:59 +01:00
Michał Janiszewski a2762ed321
Update backtrack submission token 2024-03-02 11:41:04 +01:00
Matt 2053b17dea
Merge pull request #21497 from ZehMatt/fix-bannercrash
Fix regression from #21474 due to use-after-free bug
2024-03-02 04:30:36 +02:00
ζeh Matt c9ac9784ed
Fix regression from #21474 due to use-after-free bug 2024-03-02 03:50:27 +02:00
Andrew 5aed126cac
Use new colours for peeps' clothing when they spawn 2024-03-02 02:06:47 +01:00
Michael Steenbeek 8916b3ce9d
Merge pull request #21350 from Gymnasiast/objects-1.4.0
Update to v1.4.0 objects release
2024-03-02 01:46:25 +01:00
Gymnasiast e9fc4473bb
Clarify RCT1 ride objects in changelog 2024-03-02 01:33:52 +01:00
Gymnasiast 864f0350ed
Load banner entries from research and the map 2024-03-02 01:33:52 +01:00
Gymnasiast 4d35989888
Normalise reversed RCT1 trains when importing 2024-03-02 01:33:52 +01:00
ZeeMajora a09724ad91
Change vehicle colour import table 2024-03-02 01:33:51 +01:00
ZeeMajora c7a48a37b6
Add OpenRCT2 official scenery to RCT1 scenarios 2024-03-02 01:33:51 +01:00
ZeeMajora 345f9aa27d
Use RCT1 ice cream stall object 2024-03-02 01:33:51 +01:00
Gymnasiast de0c681b80
Remove RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY from some rides
Maze, Mini Golf, Dodgems and Flying Saucers,
2024-03-02 01:33:51 +01:00
Gymnasiast 05e5bb5106
Add remaining features from objects release to changelog 2024-03-02 01:33:51 +01:00
Gymnasiast 6506b1d1fa
Fix #17610: Some scenery items unavailable in RCT1 scenarios 2024-03-02 01:33:51 +01:00
Gymnasiast 12c00dedeb
Use RCT1 walls during import
Co-authored-by: ZeeMaji <ZeeMaji@users.noreply.github.com>
Fix wgw2 and restore RCT2 walls
2024-03-02 01:33:51 +01:00
Gymnasiast c1ca8f729f
Use RCT1 trains 2024-03-02 01:33:51 +01:00
Gymnasiast c2ed24b183
Make RCT1::VehicleType a strong enum 2024-03-02 01:33:51 +01:00
Gymnasiast ce1240f8d1
Require objects release v1.4.0 2024-03-02 01:33:50 +01:00
Katherine Norton 534ba4f339
Fix #20164: Grass and Rock terrain objects cannot be de-selected (#21399) 2024-03-01 21:33:45 -03:00
Harry Hopkinson bb743f0c88
Fix: pause and build path hotkeys not working when the toolbar is hidden
Part of #21175.
2024-03-01 23:49:26 +01:00
AuraSpecs a3659b7ca4
Add log flume lift sound effect (when “chainlift” is enabled) 2024-03-01 21:01:50 +00:00
Harry Hopkinson 701bbda164
Move gEditorStep to GameState_t (#21492)
* Move gEditorStep to GameState_t

* Fix compilation on GCC

---------

Co-authored-by: Gymnasiast <m.o.steenbeek@gmail.com>
2024-03-01 20:26:20 +00:00
Harry Hopkinson 14f0479c94
Refactor constants/macros (#21483)
* Refactor constants in AudioMixer.h

* Refactor constants in Map.h

* Rename kMinimumLandHeight_BIG to kMinimumLandZ
2024-03-01 20:23:29 +00:00
Aaron van Geffen a79b062136
Refactor FormatCodes stringification 2024-03-01 19:47:23 +01:00
Harry Hopkinson 42844d1667
Move gCurrentProfit to GameState_t (#21485) 2024-03-01 05:47:30 -03:00
OpenRCT2 git bot 37104ed4f8 Merge Localisation/master into OpenRCT2/develop 2024-03-01 04:01:50 +00:00
Aaron van Geffen 4976d65fc3
Enable commented-out designated initialisers (#21479)
* Start using designated initialisers

* Adhere to correct order for DrawPixelInfo

* Of course gcc is stricter than clang...
2024-02-29 07:00:46 +00:00
Michael Steenbeek aa804a19ff
Replace SET_FIELD() macro with designated initialisers 2024-02-28 23:14:59 +01:00
Michael Steenbeek 01bc8cdb5e
Merge pull request #21468 from AaronVanGeffen/cpp20
Compile project as C++20
2024-02-28 22:28:36 +01:00
Aaron van Geffen a3eea76fa0 Update cppStandard in .vscode properties 2024-02-28 21:57:38 +01:00
Aaron van Geffen c2730bc12d Update readme to require C++20 support 2024-02-28 21:57:08 +01:00
Michael Steenbeek 25ec1e4211
Create game actions and UI for restricted scenery 2024-02-28 20:38:43 +01:00
Aaron van Geffen 2d52f5b982 Play footpath placement sound even if footpath window is absent 2024-02-27 22:26:43 +01:00
Aaron van Geffen 6edcd6d7a0 Avoid implicit capture of `this` in Footpath window 2024-02-27 22:16:06 +01:00
Matt 626e922591
Merge pull request #21472 from janisozaur/ccache-1.2.11
CI: Lower ccache to 1.2.11 to speed up CI jobs
2024-02-27 23:08:09 +02:00
Matt 418785104d
Disable ccache for clang-tidy workflow (#21471) 2024-02-27 21:05:10 +00:00
Harry Hopkinson 063c4f7bce
Move gCurrentExpenditure to GameState_t 2024-02-27 22:03:40 +01:00
Michał Janiszewski c921edd76c CI: Lower ccache to 1.2.11 to speed up CI jobs
This is tracked upstream at
https://github.com/hendrikmuhs/ccache-action/issues/181
2024-02-27 21:37:00 +01:00
Aaron van Geffen 8bf848582b Add -Wno-deprecated-declarations to suppress fs::u8path warnings 2024-02-27 21:33:00 +01:00
Harry Hopkinson 57a4c83f80
Move gConstructionRightsPrice to GameState_t (#21467)
* Move gConstructionRightsPrice to GameState_t

* Add OpenRCT2 namespace
2024-02-27 20:20:11 +00:00
Michał Janiszewski b2639add4c
CI: use docker images v13 (#21470)
This release updates mingw and android images, also comes with
clang-tidy preinstalled
2024-02-27 20:04:33 +00:00
Aaron van Geffen 19171f7eef Update Visual Studio properties for C++20 too 2024-02-27 19:41:45 +01:00
Aaron van Geffen 989a4dddbd Mark ObjectLoadError::DownloadStatusInfo comparisons const 2024-02-27 17:22:25 +01:00
Aaron van Geffen da0bbb2019 Mark GuestList::FilterArguments comparisons const 2024-02-27 17:20:05 +01:00
Aaron van Geffen ffcb2b8c82 Fix or-ing different enumeration types warning 2024-02-27 16:55:53 +01:00
Michael Steenbeek 11ccbbfc5e
Merge pull request #21454 from Gymnasiast/more-to-gamestate
Move _rides, _tileElements and _restrictedScenery to GameState_t
2024-02-27 16:53:49 +01:00
Gymnasiast f98157d4f1
Move _restrictedScenery to GameState_t 2024-02-27 16:34:26 +01:00
Gymnasiast 53b68f23fa
Move _tileElements to GameState_t 2024-02-27 16:34:26 +01:00
Gymnasiast 37a224e9b3
Move _rides to GameState_t 2024-02-27 16:34:25 +01:00
Harry Hopkinson 70ea832808
Move gCompanyValue to GameState_t 2024-02-27 16:31:38 +01:00
Aaron van Geffen 530ec9a6f7 Remove never-set COLOUR_FLAG_8 constant
The definition is also outside the boundaries of a uint8_t, so its existence is a bit odd.
2024-02-27 15:38:51 +01:00
Aaron van Geffen 0c0b10fc09 Compile OpenRCT2 using C++20 2024-02-27 15:32:38 +01:00
Stephan Spengler bcff6f5a7e
Update ScTileElement.cpp: fix typos (#21463) 2024-02-26 18:10:47 -03:00
Michael Steenbeek 70461be037
Merge pull request #21457 from Gymnasiast/refactor/global-widget-idx-to-constexpr
Move global window indices to constexpr
2024-02-26 14:03:48 +01:00
Gymnasiast 4ba4f96f61
clang-tidy: exclude validate_global_widx() from macro check 2024-02-25 23:13:10 +01:00
Gymnasiast 554968383c
Move global window indices to constexpr 2024-02-25 22:54:54 +01:00
Michał Janiszewski f5cd5bc15b
Merge pull request #21444 from janisozaur/android-updates
Update Android libraries
2024-02-25 22:34:23 +01:00
Harry Hopkinson 0fab1eaca8
Move gSavedView states to GameState_t (#21456)
* Move gSavedView to GameState_t

* Move gSavedViewRotation to GameState_t

* Move gSavedViewZoom to GameState_t
2024-02-25 20:46:01 +00:00
Michael Steenbeek 880e5af35d
Merge pull request #21445 from Gymnasiast/refactor/defines-to-constexpr
Refactor some defines to constexpr
2024-02-25 18:08:48 +01:00
Gymnasiast d1b1e42643
Refactor defines in LandTool.h 2024-02-25 17:06:48 +01:00
Gymnasiast 6c25b79139
Refactor defines in Intro.cpp 2024-02-25 17:06:48 +01:00
Gymnasiast 8d478e78a5
Refactor FILE_TYPE_S4_CUTOFF to kFileTypeS4Cutoff 2024-02-25 17:06:48 +01:00
ZeeMaji 47a221de4e
Reintroduce lost RCT1 Jet ski color presets to boat hire (#21453) 2024-02-25 09:32:43 -03:00
HtotheTML 90ad01bc40
Fix additional park boundary errors in Japanese Coastal Reclaim (#21425) 2024-02-25 06:33:44 -03:00
Michael Steenbeek 3beeca3fe3
Merge pull request #21438 from ZehMatt/pathfinding-update-2
More refactoring around path finding
2024-02-24 23:57:54 +01:00
Julian 142c078ad1
Fix some include directives for POSIX 2024-02-24 23:56:02 +01:00
Michał Janiszewski a9f26c804a Update android libraries URL 2024-02-24 23:06:52 +01:00
Michał Janiszewski a37e83b63c Remove crypto from android libraries for now 2024-02-24 23:05:43 +01:00
Michał Janiszewski 093567ed51 Add URL update TODO comment 2024-02-23 23:58:28 +01:00
Michał Janiszewski e1fbe586d0 Update for new style android libraries 2024-02-23 23:55:12 +01:00
Michał Janiszewski 7b4d3db5ac Only compile for 64 bit ARM target 2024-02-23 23:54:12 +01:00
Harry Hopkinson 7797db10c8
Replace Macros and Notation in Cheats.h, common.h and Context.h. (#21437) 2024-02-23 19:30:35 -03:00
AuraSpecs d11a82aa4f
Add Ukrainian Language
Co-authored-by: Gymnasiast <m.o.steenbeek@gmail.com>
2024-02-23 20:37:48 +01:00
Matt 325a3db436
Merge pull request #21311 from zzril/fix-clearance
Fix #21310: Clearance on half loop elements is not symmetrical
2024-02-23 18:49:24 +02:00
OpenRCT2 git bot eceea5a034 Merge Localisation/master into OpenRCT2/develop 2024-02-23 04:01:41 +00:00
ζeh Matt f3a5320ff8
Declare arguments as [[maybe_unused]] due to constexpr checks 2024-02-23 00:09:59 +02:00
ζeh Matt fd66cb5e1b
Add missing switch case, fix clang-tidy checks 2024-02-22 23:58:59 +02:00
ζeh Matt b2f14af84d
Apply clang-format 2024-02-22 23:34:40 +02:00
ζeh Matt 646743334c
Remove remaining old logging code 2024-02-22 23:32:50 +02:00
ζeh Matt 0b917408c4
Turn SEARCH_PATH_* into strong enum 2024-02-22 23:29:10 +02:00
ζeh Matt 3f456b7b2b
Only log path finding when PEEP_FLAGS_DEBUG_PATHFINDING is active 2024-02-22 23:09:22 +02:00
ζeh Matt 523bd0ae36
Rename PEEP_FLAGS_2 to PEEP_FLAGS_DEBUG_PATHFINDING 2024-02-22 23:07:15 +02:00
ζeh Matt 336c1b26d3
Remove dead code 2024-02-22 23:04:58 +02:00
ζeh Matt ecc46799d4
Replace the old logging code with constexpr functionality 2024-02-22 22:53:42 +02:00
Matt 9d9f0af0cd
Pathfinding cleanup (#21407)
* Eliminate unnecessary abstraction for path finding

* Pass the goal to ChooseDirection instead of using globals

* Remove gPeepPathFindGoalPosition and pass it by parameter instead

* Remove _peepPathFindIsStaff and make ignoring banners explicit

* Code style and naming fixups

* Apply clang-format

* Add comment specifying to why it does not ignore banners

* Apply review comments
2024-02-22 21:52:01 +02:00
Severin Paul Höfer 3b8de13af9 Update changelog.txt 2024-02-21 17:23:45 +01:00
Severin Paul Höfer e1631afe48 Make small Flyer half loops symmetrical 2024-02-21 17:23:45 +01:00
Severin Paul Höfer 99dfbc2661 Make ClearanceZ on small half loops symmetrical
Values now consistent to those in the small full loops.
2024-02-21 17:23:45 +01:00
Severin Paul Höfer 0ff998a071 Make ClearanceZ on Flying half loops symmetrical 2024-02-21 17:23:45 +01:00
Severin Paul Höfer 133c8a1068 Fix ClearanceZ for large half loops down 2024-02-21 17:23:45 +01:00
Severin Paul Höfer 1ce1d1b04e Add comments to PreviewTrack definitions 2024-02-21 17:23:45 +01:00
Severin Paul Höfer aefc07c9c5 Rename var_07 to ClearanceZ in struct PreviewTrack 2024-02-21 17:23:45 +01:00
Matt fdbdbd405f
Merge pull request #21408 from ZehMatt/clang-tidy
Add clang-tidy CI step
2024-02-21 12:50:44 +02:00
ζeh Matt 3b0ff5dcc8
clang-tidy CI integration 2024-02-21 09:49:15 +02:00
OpenRCT2 git bot 6b134a05c3 Merge Localisation/master into OpenRCT2/develop 2024-02-21 04:01:40 +00:00
Michael Steenbeek 045d610391
Merge pull request #21433 from Gymnasiast/refactor/split-supports.cpp
Split Supports.{cpp,h} into two and refactor the wooden supports
2024-02-20 23:42:37 +01:00
Michael Steenbeek 724ab47a37
Merge pull request #21423 from Gymnasiast/feature/partly-above-ground
Add mechanism to allow building partly underground
2024-02-20 21:44:46 +01:00
Harry Hopkinson b989ccbb20
Remove unused gSavedAge (#21410)
* Remove the unused SavedAge variable.
2024-02-20 16:58:46 -03:00
Gymnasiast 276b599470
Add changelog entry, bump network version 2024-02-20 19:15:37 +01:00
Gymnasiast c2f2058fa0
Allow building heartline rolls partly underground 2024-02-20 19:14:02 +01:00
Gymnasiast 731275613a
Create flag to allow building track segment partly underground 2024-02-20 19:14:01 +01:00
Harry Hopkinson d8864e567c
Close #21379: Move map base z to constant 2024-02-20 11:49:02 +01:00
OpenRCT2 git bot 5fef6d364d Merge Localisation/master into OpenRCT2/develop 2024-02-20 04:01:37 +00:00
Peter Froud 40a7fa70fc
Fix empty error messages (#21351)
* Add `STR_ERR_CANT_CHANGE_PARK_ENTRANCE_FEE`

* Add `STR_ERR_TRACK_ON_THIS_TILE_NEEDS_WATER`

* Return existing `GameAction::Result`

* Add `STR_ERR_ACTION_INVALID_FOR_THAT_STAFF_TYPE`

I am open to suggestions for a different message!
Originally this was going to be STR_ERR_WRONG_STAFF_TYPE
but I thought that was confusing because the game
action arguments do not specify a staff type. We
want it to mean "the staff ID you specified is the
wrong StaffType for this game action".

* Refactor `StaffSetColour()` to return `Result`

* Remove unnecessary arguments when `Status` is `Ok`

* Refactor `SwapTileElements()` to return `Result`

Also add STR_ERR_CANT_SWAP_TILE_ELEMENT_WITH_ITSELF

* Format code

* Use `STR_ERR_CANT_CHANGE_PARK_ENTRANCE_FEE` in title

* Format code using Github web editor

* Format indentation
2024-02-19 20:58:04 -03:00
Gymnasiast 1ed22ff58c
Remove now-obsolete NumVanillaWoodenSupportTypes 2024-02-19 23:26:07 +01:00
Gymnasiast 6e3ed12f13
Refactor other fields of UnkSupportsDescriptor 2024-02-19 23:23:12 +01:00
Gymnasiast 38cfa4045d
Remove UnkSupportsDescriptor::var_7 2024-02-19 23:17:03 +01:00
Gymnasiast b482897cd8
Refactor out old support offsets 2024-02-19 23:14:03 +01:00
Gymnasiast 5e31e73d53
Refactor some usage of old support values 2024-02-19 22:15:31 +01:00
Gymnasiast 32c04305f2
Remove old wooden supports overloads 2024-02-19 22:05:36 +01:00
Gymnasiast 849af8c2d8
Split Supports.{cpp,h} into two 2024-02-19 21:59:59 +01:00
Matt 1042c428e8
Merge pull request #21429 from Martymoose98/refactor
Move gBankLoan and gBankLoanInterestRate to GameState_t
2024-02-19 17:26:37 +02:00
Martin 2f0dea0243
Merge branch 'OpenRCT2:develop' into refactor 2024-02-19 04:50:22 -05:00
Martin Mizzi f5a9846ea2 Move gBankLoan and gBankLoanInterestRate to GameState_t 2024-02-19 04:42:44 -05:00
Romain a3ce64c009
Add launchable to appdata 2024-02-19 07:37:46 +01:00
OpenRCT2 git bot a0933c7020 Merge Localisation/master into OpenRCT2/develop 2024-02-19 04:01:38 +00:00
OpenRCT2 git bot 7f59e20926 Merge Localisation/master into OpenRCT2/develop 2024-02-18 04:01:35 +00:00
Ota e9b214282d
Fix #21039: Text rendering bleeds pixels through windows
Should fix [#21039 ](https://github.com/OpenRCT2/OpenRCT2/issues/21039).

As it is explained in the issue, the outline and inset code would not respect the DPI bounds in the drawing process by accessing e.g. `*(dst + 1)` to draw an outline, in this case to the right.
#### Approach
I approached this issue by creating a function `GetPixel()`  in `TTFSurface` that would return a value if the given x and y coordinates is a part of a TTF text, else 0. 

In the for loop, iterating through the TTF text, the if condition
```
if (surface->GetPixel(xx + srcX_start + 1, yy + srcY_start)
                        || surface->GetPixel(xx + srcX_start - 1, yy + srcY_start)
                        || surface->GetPixel(xx + srcX_start, yy + srcY_start + 1)
                        || surface->GetPixel(xx + srcX_start, yy + srcY_start - 1))
```
checks if the coordinates **(xx, yy)** is an outline of a text. the writing bounds. Adding `srcX_start`, which is 0 or `-skipX` if `skipX < 0`, when calling `GetPixel()`, would shift the pixel access to the correct position, where the text begins on the surface. The same is done for the Y axis. (Not having this would lead to the outlines/insets not moving with the text when the window with the TTF text moves)
2024-02-17 23:31:07 +01:00
Michael Steenbeek ecbc523229
Merge pull request #21412 from Gymnasiast/refactor-even-more-wooden-supports
Refactor even more wooden supports
2024-02-17 22:39:51 +01:00
Gymnasiast accfa1af61
Add WoodenSupportType::Null, replace std::nullopt with it 2024-02-17 22:26:15 +01:00
Gymnasiast b254501b25
Refactor calls to old WoodenASupportsPaintSetupRotated() 2024-02-17 22:26:15 +01:00
Alex Parisi efb6d48c4c
Add plugin API to get registered plugin metadata (#20709)
* Added API for getAllPlugins

Added functionality to the Scripting API to allow Contexts to return a list of all registered plugins.

* Fixed naming conventions, returning list of authors

Changed function names to follow get/set convention. Removed unnecessary copies of shared pointers, now using auto instead. Changed the functionality to return an array of authors instead of a string.

* Added changelog entry

Also added myself to list of contributors

* Moved all functionality to ScPlugin

Created a ScPlugin class and moved the current getPlugins functionality there.

* Changed from method to property

Function names now match the get/set convention for properties. Also did some code cleanup.

* Update copyright

* Bump plugin version

---------

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-02-16 05:53:48 -03:00
OpenRCT2 git bot 04603f5213 Merge Localisation/master into OpenRCT2/develop 2024-02-16 04:01:41 +00:00
Michał Janiszewski f374a833e6 Add java files for SDL 2.30 2024-02-16 00:04:07 +01:00
Michał Janiszewski c654d848fc Update build.gradle to correctly detect changes in source files 2024-02-16 00:03:15 +01:00
Michał Janiszewski 7152ae2c00 Add SDLSurface.java from SDL 2.30 2024-02-15 23:23:38 +01:00
Michał Janiszewski cc56384bb6 Update SDLActivity to SDL 2.30 2024-02-15 23:20:08 +01:00
Michał Janiszewski e2c380edba Update gradle to 8.6 2024-02-15 22:41:55 +01:00
Matt d929e6a540
Allow tooltips to show up when an error window is present 2024-02-15 13:32:58 +01:00
Michael Steenbeek 1613658647
Merge pull request #21401 from Gymnasiast/refactor/track-design-save-cpp
Small cleanup in TrackDesignSave.cpp
2024-02-15 13:32:21 +01:00
Matt d25a2e7b05
Merge pull request #21403 from Harry-Hopkinson/gNewsItems-to-GameState
Move gNewsItems to GameState
2024-02-15 09:04:16 +02:00
OpenRCT2 git bot cb2bca7c7a Merge Localisation/master into OpenRCT2/develop 2024-02-15 04:01:47 +00:00
Harry-Hopkinson 43f13ff36c Format code 2024-02-14 14:13:17 +00:00
Harry-Hopkinson 0a8f1154ad Add OpenRCT2 as namespace. 2024-02-14 14:10:08 +00:00
Harry Hopkinson 691f5f88e5 Move gNewsItems to GameState 2024-02-14 10:54:15 +00:00
OpenRCT2 git bot 2d0a04ada9 Merge Localisation/master into OpenRCT2/develop 2024-02-14 04:01:42 +00:00
Gymnasiast 085a126bbf
Remove unnecessary arguments to TrackDesignSave{Add,Remove}TileElement 2024-02-13 23:31:09 +01:00
Gymnasiast 4b03275cff
Remove snake_case in TrackDesignSave.cpp 2024-02-13 23:26:41 +01:00
David Sungaila 89f83d6c0d
Fix #21288: Overlapping text in the About window 2024-02-13 23:10:39 +01:00
Harry Hopkinson 1c285dbf9f
Move gMaxBankLoan to GameState 2024-02-13 21:36:35 +01:00
Severin Paul Höfer 0c7b94255f
Fix #21318: VirtualFloor not properly invalidated (#21386)
* Fix condition for setting VirtualFloor coordinates

* Update changelog.txt
2024-02-13 16:53:55 -03:00
Michał Janiszewski 8cf393f971
Use libsawyer's gxc to build g2.dat (#21392) 2024-02-13 16:04:54 -03:00
Matt 19be093569
Fix #21208: Error messages disappear too quickly if the game runs for a while (#21394)
* Reset gCurrentRealTimeTicks when the map is initialized

* Use 32 bit for gWindowUpdateTicks

* Update changelog.txt
2024-02-13 16:03:30 -03:00
Matt 5ac347e9f6
Merge pull request #21389 from ZehMatt/error-update-1
Don't close the error window if the new error will not show
2024-02-13 15:54:14 +02:00
Matt 5ed5fece46
Merge pull request #21390 from Harry-Hopkinson/gMapSize-to-GameState_t
Move gMapSize to GameState_t
2024-02-13 14:14:57 +02:00
OpenRCT2 git bot 64787ff91f Merge Localisation/master into OpenRCT2/develop 2024-02-13 04:01:45 +00:00
Michael Steenbeek c3380e29dd
Fix #21286: Cannot build unbanking turns with RCT1 vehicles 2024-02-12 23:23:05 +01:00
Michael Steenbeek 48a8d484cf
en-GB: Remove old music style strings
These are no longer used, as they have been moved to objects.
2024-02-12 23:01:31 +01:00
Harry-Hopkinson ce8afe252a Use OpenRCT2 namespace in Map.cpp 2024-02-12 21:49:57 +00:00
Harry-Hopkinson b755c873e5 Move gMapSize to GameState_t 2024-02-12 21:32:08 +00:00
ζeh Matt c24657a7f7
Don't close the error window if the new error will not show 2024-02-12 23:02:31 +02:00
OpenRCT2 git bot 72ca04633e Merge Localisation/master into OpenRCT2/develop 2024-02-12 04:01:42 +00:00
Harry Hopkinson a55da09e1c
Move gMapBaseZ to GameState_t (#21370)
* Move gMapBaseZ to GameState_t

* Fix fomatting
2024-02-11 21:40:32 +00:00
Michael Steenbeek 1a13cdcc57
Fix #21220: Localised park name not used when loading SC4 2024-02-11 20:51:23 +00:00
Michael Steenbeek 70b9d0ca47
Add button to reload object 2024-02-11 20:45:31 +00:00
Matt 6626208695
Merge pull request #21355 from sungaila/readme-arm64
Windows: Build g2.dat on Arm64 machines and update readme
2024-02-11 22:29:08 +02:00
Michael Steenbeek c4be52644d
Fix #21358: Crash during RCT1 research import 2024-02-11 20:08:48 +00:00
David Sungaila 20eddc4d49
Windows: Build g2.dat on Arm64 machines and update readme 2024-02-11 19:03:55 +01:00
Michael Steenbeek 67a7614140
Merge pull request #21111 from Gymnasiast/refactor/goto-removal
Remove more gotos in Vehicle.cpp
2024-02-11 18:09:23 +01:00
OpenRCT2 git bot 26bdaebe4f Merge Localisation/master into OpenRCT2/develop 2024-02-11 04:01:39 +00:00
Matt c8b28ca457
Fix #21330: Tooltips from dropdown widgets have the wrong position 2024-02-10 18:47:40 +01:00
Matt 0c1991c004
Merge pull request #21361 from karst/opensfx-1.0.4
Update OpenSFX to version 1.0.4
2024-02-10 16:02:01 +02:00
David Sungaila 920e39fb34
Windows: add app manifest to enable PerMonitorV2 2024-02-10 14:08:16 +01:00
Karst da8594cec1 Update OpenSFX to version 1.0.4 2024-02-09 21:36:59 +01:00
Michael Steenbeek 776674af7a
Merge pull request #21130 from Gymnasiast/fix/research-table-size
Fix: Research table in LL parks imported incompletely
2024-02-08 22:05:09 +01:00
Michael Steenbeek 8a5e7d32f6
Update changelog
[ci skip]
2024-02-08 22:04:46 +01:00
Michael Steenbeek 4369709d19
Merge pull request #21349 from Gymnasiast/refactor/21193-gamestate-1
Part of #21193: move three more globals to GameState_t
2024-02-08 21:58:21 +01:00
Gymnasiast 61e8b6d206
Move _suggestedGuestMaximum to GameState_t 2024-02-08 21:47:31 +01:00
Gymnasiast 142d708cee
Move _guestGenerationProbability to GameState_t 2024-02-08 21:46:41 +01:00
Matt a20f2b04e9
Merge pull request #21352 from Harry-Hopkinson/move-gTotalRideValueForMoney-to-GameState_t
Move gTotalRideValueForMoney to GameState_t
2024-02-08 16:37:28 +02:00
Harry Hopkinson 6deac11916 Move gTotalRideValueForMoney to GameState_t 2024-02-08 09:39:28 +00:00
Gymnasiast c40a840f5b
Fix #18963: Too many items available in some RCT1 scenarios 2024-02-08 02:13:31 +01:00
Gymnasiast 8e64eaca94
Fix #18963: Razor Rocks and BPB import too few research items 2024-02-08 02:13:31 +01:00
Michael Steenbeek 6a9f9025ff
Fix: too many options are hidden if the platform has no file picker
Mainly affects Android.

Co-authored-by: Basssiiie <Basssiiie@users.noreply.github.com>
2024-02-07 22:38:45 +00:00
Harry Hopkinson ad5ef31a97
Move gTotalIncomeFromAdmissions to GameState_t (#21348) 2024-02-07 19:13:04 -03:00
ZeeMaji 1849c7de47
Fix mini helicopters & monorail bicycles being swapped in RCT1 2024-02-07 22:51:36 +01:00
Hielke Morsink c9fe19e0d9
Part of #21193: Move gParkRatingHistory to GameState_t 2024-02-07 11:04:10 +01:00
Michał Janiszewski 6e49a25a7b
Merge pull request #21326 from janisozaur/github-actions-update
Update GitHub Actions versions
2024-02-07 00:28:40 +01:00
Michał Janiszewski fd01a9a76a
Update gh-describe to v2 2024-02-06 23:29:23 +01:00
Harry Hopkinson 3eb9cf2264
Move gTotalAdmissions to GameState_t (#21341)
Part of #21193.
2024-02-06 21:42:05 +01:00
Matt 9363a459a2
Merge pull request #21331 from Harry-Hopkinson/move-gNumGuestsInParkLastWeek-to-GameState_t
Move gNumGuestsInParkLastWeek to GameState_t.
2024-02-06 16:46:23 +02:00
Harry Hopkinson fd17842291 Move gNumGuestsInParkLastWeek to GameState_t. 2024-02-05 09:50:58 +00:00
OpenRCT2 git bot 08fbdd1552 Merge Localisation/master into OpenRCT2/develop 2024-02-05 04:02:06 +00:00
Romain 80948c36bb
Fix and improve Linux appdata (#21328)
* Fix appdata screenshot URL

* Add developer name to appdata

* Follow best practices for appdata summary

* Add caption to appdata screenshot
2024-02-04 20:41:24 -03:00
Michael Steenbeek 9efe25c11c
Fix #20907: RCT1/AA scenarios use the 4-across train for the Inverted RC (#21303) 2024-02-04 20:39:52 -03:00
Gymnasiast d413f7dd48
Fix formatting 2024-02-04 22:55:57 +01:00
frutiemax 376d69090b
Remove goto label loc_6DC743 2024-02-04 22:55:35 +01:00
frutiemax c8d836bc09
Remove goto label loc_6DC985 2024-02-04 22:55:35 +01:00
frutiemax 580852351f
Remove goto label loc_6DC99A 2024-02-04 22:55:34 +01:00
frutiemax 535b485d37
Remove goto label loc_6DCD2B 2024-02-04 21:41:00 +01:00
frutiemax 714b2a1ace
Remove goto loc_6DCD4A 2024-02-04 21:41:00 +01:00
frutiemax 1cd1b7ca87
Remove goto label loc_6DC9BC 2024-02-04 21:41:00 +01:00
frutiemax 760a6aa337
Remove goto label loc_6DCC2C 2024-02-04 21:41:00 +01:00
frutiemax 83d840f3a5
Remove goto label loc_6DCD6B 2024-02-04 21:41:00 +01:00
frutiemax 62be6090a8
Remove goto label 6DC476 2024-02-04 21:41:00 +01:00
frutiemax b512914c4b
Remove goto 6DCDE4 2024-02-04 21:41:00 +01:00
Michał Janiszewski 4e23ba3e16 Update GitHub Actions versions
Update of checkout v3->v4 addresses Node 16 deprecation.
Update of upload-artifacts v3->v4 improves performance, makes artifacts
  available as soon as they are completed (as opposed to current way of
  only becoming available once all jobs are done) and addresses Node 16
  deprecation.
Update of download-artifact v3->v4 is required to match upload-artifact.
2024-02-04 17:59:38 +01:00
Michał Janiszewski f89dbf0d15 Start v0.4.9 2024-02-04 16:26:34 +01:00
Michał Janiszewski e97500cbcc Merge branch 'master' into develop 2024-02-04 16:25:47 +01:00
Michał Janiszewski 05efdb2497 Release v0.4.8
- Feature: [#21062] [Plugin] Add API for managing a guest's items.
- Improved: [#18632, #21306] Land ownership and construction rights are now shown on top of the water.
- Improved: [#20951] Activate OpenRCT2 window after using native file dialog on macOS.
- Improved: [#21184] The construction marker for rides, paths and large scenery is now shown on top of the water.
- Improved: [#21192] Tooltips will now follow the cursor.
- Improved: [#21227] Entrance style dropdown is now sorted alphabetically everywhere.
- Change: [#21200] Raise maximum lift speeds of the Reverser Coaster, Side Friction Coaster, and Virginia Reel for RCT1 parity.
- Change: [#21225] Raise maximum allowed misc entities to 1600.
- Fix: [#19494] RCT1 fence gate walls not imported properly if they were placed on slopes.
- Fix: [#20196] New scenarios start with an incorrect temperature.
- Fix: [#20255] Images from the last hovered-over coaster in the object selection are not freed.
- Fix: [#20616] Confirmation button in the track designer’s quit prompt has the wrong text.
- Fix: [#20628] Moving caret using Ctrl+left can move too far when using a multibyte grapheme.
- Fix: [#20631] IME window not positioned correctly.
- Fix: [#20845] Trying to save under a folder with no write permissions causes a crash.
- Fix: [#21054] “No entrance” style is selected by default in the track designer.
- Fix: [#21145] [Plugin] setInterval/setTimeout handle conflict.
- Fix: [#21157] [Plugin] Widgets do not redraw correctly when updating disabled or visibility state.
- Fix: [#21158] [Plugin] Potential crash using setInterval/setTimeout within the callback.
- Fix: [#21171] [Plugin] Crash creating entities with no more entity slots available.
- Fix: [#21178] Inca Lost City’s scenario description incorrectly states there are height restrictions.
- Fix: [#21179] Additional missing land/construction rights tiles in Inca Lost City & Renovation.
- Fix: [#21198] [Plugin] Setting brake or booster speeds on a tile element doesn’t work.
- Fix: [#21290] Sound keeps playing when paused from fast-forward mode.
- Fix: [#21291] Hungry guests heading to any flat ride do not count for warning threshold (original bug).
- Fix: [#21309] Africa - Oasis & Blackpool Pleasure Beach’s monorails are built outside the park’s land rights.
- Fix: [#21316] Isolated land for sale tile on Extreme Hawaiian Island.
2024-02-04 15:29:56 +01:00
Michał Janiszewski 280e3a85a6 Merge branch 'develop' 2024-02-04 15:22:13 +01:00
OpenRCT2 git bot a6e5d5b192 Merge Localisation/master into OpenRCT2/develop 2024-02-04 04:01:46 +00:00
Matt 3514449591
Merge pull request #21192 from ZehMatt/adjust-tooltips
Make tooltips follow the cursor and refactor code
2024-02-03 19:50:01 +02:00
ζeh Matt c5ca671d5f
Update changelog.txt 2024-02-03 19:28:48 +02:00
ζeh Matt 2c12b4921b
Make tooltips follow the cursor and refactor code 2024-02-03 19:26:44 +02:00
AuraSpecs f6ab154176
Add Community Guidelines (#21091)
* Add CoC template

Co-Authored-By: Hielke Morsink <hielke.morsink@gmail.com>
Co-Authored-By: Tulio Leao <tupaschoal@gmail.com>

* Customize CoC template

* Add Community Guidelines

* Update CommunityGuidelines.md

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>

* Update CommunityGuidelines.md

Co-authored-by: Hielke Morsink <hielke.morsink@gmail.com>

* Apply suggestions from code review

---------

Co-authored-by: Hielke Morsink <hielke.morsink@gmail.com>
Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-02-03 13:42:26 +00:00
Michał Janiszewski 1a74a74988
Update backtrace token for upcoming release 2024-02-03 13:42:47 +01:00
Michał Janiszewski d7823d3ad3
Update backtrace token for upcoming release 2024-02-03 13:42:01 +01:00
HtotheTML 43b9ffb2b8
Fix park boundaries for out-of-bounds monorails in Africa - Oasis & Blackpool Pleasure Beach (#21309) 2024-02-02 07:54:27 -03:00
OpenRCT2 git bot 328c397718 Merge Localisation/master into OpenRCT2/develop 2024-02-02 04:02:02 +00:00
Michael Steenbeek 22715852f5
Merge pull request #21279 from Gymnasiast/refactor/hybrid-stuff
Use new WoodenASupportsPaintSetup() overloads for Hybrid Coaster
2024-02-02 00:03:09 +01:00
Michael Steenbeek f2862861ce
Merge pull request #21305 from Gymnasiast/refactor/path-support-drawing
Refactor path support drawing
2024-02-01 12:54:27 +01:00
Michael Steenbeek 40c7e73189
Render selection grid for Map ownership on the water 2024-02-01 10:30:33 +01:00
HtotheTML a377538f0a
Add missing owned land in Extreme Hawaiian Island (#21316)
* Update S6Importer.cpp

* Update changelog.txt
2024-02-01 06:22:31 -03:00
OpenRCT2 git bot 13fc351591 Merge Localisation/master into OpenRCT2/develop 2024-02-01 04:01:39 +00:00
OpenRCT2 git bot 8abda17cb3 Merge Localisation/master into OpenRCT2/develop 2024-01-31 04:01:41 +00:00
wstagg 4a51e7f362
Fix #20631: IME window not positioned correctly 2024-01-30 23:44:58 +01:00
Gymnasiast 0196606851
Apply review requests 2024-01-30 22:00:53 +01:00
Gymnasiast 295671ef8c
Fix formatting 2024-01-30 21:57:03 +01:00
Gymnasiast 702113bb23
Extract PathPaintSlopedFences() 2024-01-30 21:57:03 +01:00
Gymnasiast 77048ffb7c
Split up PathPaintFencesAndQueueBanners() 2024-01-30 21:57:03 +01:00
Gymnasiast 97fb10ceb1
Refactor signatures of Path{Box,Pole}SupportsPaintSetup() 2024-01-30 21:57:03 +01:00
Gymnasiast 17f5f38191
Rename Path{A,B}SupportsPaintSetup() 2024-01-30 21:57:03 +01:00
Gymnasiast c19cfd201c
Extract PathPaintGetBaseImage() 2024-01-30 21:57:03 +01:00
Gymnasiast 706ef61e04
Extract PathPaintGetRotatedEdgesAndCorners() 2024-01-30 21:57:03 +01:00
Gymnasiast 64abf72fa2
Extract PathPaintGetBoundbox() 2024-01-30 21:57:03 +01:00
Gymnasiast d60e205f77
Consolidate PathPaintSegmentSupportHeight() 2024-01-30 21:57:03 +01:00
Michael Steenbeek ceafb68481
Actually pass in a reference to ImportResearchList() (#21308) 2024-01-30 09:20:31 +01:00
Tulio Leao fbe563c836
Merge pull request #21304 from Gymnasiast/refactor/gresearch-to-gamestate
Move gResearch* globals to GameState_t
2024-01-29 20:03:31 -03:00
Gymnasiast 8208afe5f6
Move gResearch* globals to GameState_t 2024-01-29 21:36:04 +01:00
Gymnasiast eb99798f4b
Fix typo in changelog 2024-01-29 21:01:30 +01:00
Matt fc1b580074
Merge pull request #21244 from pfroud/add-error-strings
Add error strings to reduce how many `GameActions::Result`s have `STR_NONE, STR_NONE`
2024-01-29 18:02:37 +02:00
Severin Paul Höfer 89094cad0d
Fix #21290: Sound keeps playing when paused from fast-forward mode (#21301)
* Stop additional calls to UpdateLogic after pausing

* Update changelog.txt
2024-01-29 15:35:28 +01:00
Peter Froud a382e4be8a Use `VALUE_OUF_OF_RANGE` for `spriteId` checks
Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-01-29 02:50:52 -08:00
Peter Froud 21bda5e5e4
Use `TILE_ELEMENT_NOT_FOUND`
Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-01-29 02:17:56 -08:00
Peter Froud 01d9eeb266 `INVALID_PARAMETER` for `GHOST_ELEMENT_NOT_FOUND`
Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-01-29 02:15:53 -08:00
Peter Froud 704c779bf2 Format code which was committed on github.com 2024-01-29 02:15:27 -08:00
Peter Froud 7bb8fd7131
Add `INVALID_PARAMETER` for `GHOST_ELEMENT_NOT_FOUND`
Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-01-28 21:27:35 -08:00
Severin Paul Höfer 704333344e
Fix #21291: Wrong conditions for hungry guests warning
In `PeepProblemWarningsUpdate()`, when determining the number of hungry guests that need help (in order to check whether the threshold for showing the warning about hungry guests is reached), guests that are heading towards any flat ride (checked using the `RIDE_TYPE_FLAG_FLAT_RIDE` on the ride the guest is heading to (if any)) are discarded.  
For thirsty guests (and those needing to go to the toilet) on the other hand, the more specific `RIDE_TYPE_FLAG_SELLS_DRINKS` (or `RIDE_TYPE_FLAG_IS_TOILET`) is used. (So, a guest that becomes thirsty while on its way to the merry-go-round would count for the threshold here.)

This PR makes the function use the more specific `RIDE_TYPE_FLAG_SELLS_FOOD` for hungry guests, so it's consistent with the other cases.
2024-01-28 23:35:17 +00:00
HtotheTML be9970b274
Fix additional missing land/construction rights tiles in WW's Inca Lost City & Renovation 2024-01-28 23:46:50 +01:00
Harry Hopkinson 11ae8247bd
Move gNumGuestsInPark to GameState_t (#21295)
* Move gNumGuestsInPark to GameState_t

* Replace GetGameState() with gameState
2024-01-28 19:17:43 -03:00
Michael Steenbeek 396af1f34c
Fix #19494: RCT1 sloped gates not imported correctly 2024-01-28 14:56:38 +01:00
Michael Steenbeek 8dd5014bc4
Move gStaff* globals to GameState_t (#21285) 2024-01-28 07:58:02 -03:00
Michael Steenbeek 22e73325d9
Remove bionic CI (#21284)
It recently starting failing on every commit. Bionic is also out of support, so not much point in keeping it around anyway.
2024-01-28 07:30:13 -03:00
Harry Hopkinson 01eecbaeba
Move gNumGuestsHeadingForPark to GameState_t (#21277)
* Move gNumGuestsHeadingForPark to GameState_t

* Format code

* Remove change to contributors list

* Revert new line addition
2024-01-28 07:26:22 -03:00
Michael Steenbeek 2059b50f44
Small change to error message 2024-01-28 00:06:54 +01:00
Harry Hopkinson a14d471530
Add RCTC Booster offsets into sprites.json
Co-authored-by: Gymnasiast <m.o.steenbeek@gmail.com>
2024-01-26 09:37:00 +01:00
Michael Steenbeek 73183f6736
Merge pull request #21268 from pfroud/use-STR_OFF_EDGE_OF_MAP
Change error messages to `STR_OFF_EDGE_OF_MAP` when `!LocationValid()`
2024-01-26 09:34:33 +01:00
Michael Steenbeek 32aa3f56b4
Move gScenarioRand to GameState_t 2024-01-26 09:19:45 +01:00
Gymnasiast 83e4fc0d0f
Replace ToUint32() call in HybridCoaster.cpp 2024-01-25 20:53:35 +01:00
Gymnasiast 2d2fd03fc7
Use new WoodenASupportsPaintSetup() overloads for Hybrid 2024-01-25 20:33:42 +01:00
Michael Steenbeek 3f83cad03a
Close #21184: Draw selection square on water 2024-01-25 18:57:46 +00:00
Matt bf4f82da07
Merge pull request #21276 from ZehMatt/fix-21188
Fix using iterators that are deleted by the plugin
2024-01-25 18:46:51 +02:00
Hielke Morsink f9870ece7a
Merge pull request #21271 from Broxzier/refactor/global-park-value
#21193: Move gParkValue and gParkValueHistory to GameState_t
2024-01-25 16:14:23 +01:00
ζeh Matt cc64a17642
Skip intervals that are deleted within callbacks 2024-01-25 17:13:25 +02:00
Matt faccd5f14a
Merge pull request #21272 from Broxzier/refactor/global-park-entrances
#21193: Move ParkEntrances to GameState_t
2024-01-25 17:07:19 +02:00
ζeh Matt 84213efde2
Fix using iterators that are deleted by the plugin 2024-01-25 17:01:00 +02:00
Matt 49ff5a1826
Merge pull request #21275 from ZehMatt/fix-21274
Fix #21274: Collision of PeepId when importing SV4
2024-01-25 16:58:51 +02:00
ζeh Matt e5a10c1514
Fix #21274: Collision of PeepId when importing SV4 2024-01-25 16:34:00 +02:00
Michael Steenbeek 3827d1770b
Move banners to GameState_t 2024-01-25 15:32:16 +01:00
Matt 6e14f6540a
Merge pull request #21269 from Harry-Hopkinson/gNextGuestNumber-to-GameState_t
Move gNextGuestNumber to Gamestate_t
2024-01-25 16:19:05 +02:00
Hielke Morsink 1f8b7950bc Get size of WeeklyProfitHistory in compile time 2024-01-25 15:10:17 +01:00
Hielke Morsink 99e1746eda #21193: Move gParkValueHistory to GameState_t 2024-01-25 14:30:47 +01:00
Hielke Morsink 0c10435b7e #21193: Move gParkValue to GameState_t 2024-01-25 14:30:44 +01:00
Hielke Morsink ad4bc0dd10 Fix formatting 2024-01-25 14:27:40 +01:00
Hielke Morsink 74d61369be #21193: Move ParkEntrances to GameState_t 2024-01-25 12:52:56 +01:00
Peter Froud ce45cb3360
Use descriptive error strings for two `GameAction::Result`s
- Fix error when setting brake speed outside park
- Fix error when pasting but reached tile limit
2024-01-25 11:37:02 +01:00
ZeeMaji ff03844b35
Raise lift speeds for RCT1 parity 2024-01-25 11:24:38 +01:00
Harry Hopkinson 8816aa607c Move gNextGuestNumber to Gamestate_t 2024-01-25 09:34:47 +00:00
Peter Froud 010e43e6ff Format code 2024-01-24 23:51:40 -08:00
Peter Froud 4c18d322c6 Split if statements to return different errors 2024-01-24 23:28:16 -08:00
Peter Froud afe3b02a24 Use `STR_OFF_EDGE_OF_MAP` when !LocationValid() 2024-01-24 23:27:34 -08:00
Harry Hopkinson f8fa43f578
Move gClimateUpdateTimer to GameState_t 2024-01-24 23:58:37 +01:00
Michael Steenbeek 115e7389a9
Move most gScenario* globals to GameState_t 2024-01-24 22:17:32 +01:00
Matt d4b0c2e115
Merge pull request #21236 from zzril/fix-21227-entrance-dropdown-sorting
Close #21227: Sort entrance styles in dropdown
2024-01-24 17:03:17 +02:00
Michael Steenbeek 71c20a04d7
Move gWeekly* globals to GameState_t 2024-01-24 15:03:46 +01:00
Hielke Morsink 422df650b6
#21193: Move gParkSize to GameState_t (#21260) 2024-01-24 14:18:46 +01:00
Hielke Morsink fb420f6516
#21193: Move gParkEntranceFee to GameState_t (#21256) 2024-01-24 13:45:01 +01:00
Michael Steenbeek b200ce02ef
Fix merge error (#21257) 2024-01-24 12:00:41 +01:00
Harry Hopkinson 42336915cd
Move gClimateCurrent to GameState_t 2024-01-24 11:18:54 +01:00
Hielke Morsink ab80a9b007
Merge pull request #21250 from Broxzier/refactor/global-gParkRating
#21193: Move gParkRating to GameState_t
2024-01-24 11:03:10 +01:00
Severin Paul Höfer d0aae46a75 Refactor existing structs to use u8string_view 2024-01-23 22:54:06 +01:00
Severin Paul Höfer 576caaa094 Use u8string_view for LabelString 2024-01-23 22:43:45 +01:00
Severin Paul Höfer fb41a5764c Refactor existing structs to use TitleCase 2024-01-23 21:49:43 +01:00
Severin Paul Höfer 2136706129 Use TitleCase for members of EntranceTypeLabel 2024-01-23 21:46:31 +01:00
Severin Paul Höfer 794ee9be78 Update changelog.txt 2024-01-23 21:42:30 +01:00
Severin Paul Höfer e8b05c4afd Sort entrance styles alphabetically 2024-01-23 21:42:30 +01:00
Severin Paul Höfer e27a20f800 Sort entries in entrance style dropdown 2024-01-23 21:42:30 +01:00
OpenRCT2 git bot db2a8af3cb Merge Localisation/master into OpenRCT2/develop 2024-01-23 04:01:46 +00:00
Hielke Morsink f85cac627d
#21193: Move gParkRating to GameState_t 2024-01-23 00:11:34 +01:00
Michael Steenbeek b5786c2a86
Move gGuestInitial* to GameState 2024-01-22 22:28:16 +00:00
Hielke Morsink ece4b7327e
Merge pull request #21246 from Broxzier/refactor/global-park-vars 2024-01-22 21:05:01 +01:00
Hielke Morsink f6d739624e
Pass gamestate to s4 initialize function 2024-01-22 20:38:12 +01:00
tanzimchowdh cba53fd3ce
Fix #20196: New scenarios start with an incorrect temperature 2024-01-22 20:18:31 +01:00
Aaron van Geffen dcd1f60f4f
Move wall edge definitions from header to compilation unit 2024-01-22 19:45:51 +01:00
Severin Paul Höfer 2c26799ca4
Fix #20845: Outdated message box in case of save failure 2024-01-22 19:44:20 +01:00
Hielke Morsink 13351d996e #21193: Move gParkFlags to GameState_t, refactor uses
Also changed a few instances where GetGameState was called inside the same function.
The change in Peep.cpp is needed because of a function conflict. FormatStringID exists both in the global and in the OpenRCT2 namespace.
2024-01-22 16:31:35 +01:00
Peter Froud f272b57a88 Fix 'break' will never be executed compile error 2024-01-22 02:55:20 -08:00
Peter Froud 7302d718e3 Fix local variable shadowing a previous local 2024-01-22 02:49:19 -08:00
Peter Froud 4145f851da Run clang-format 2024-01-22 02:29:08 -08:00
Peter Froud 648941aa11 Add constants to StringIds.h and en-GB.txt 2024-01-22 01:47:14 -08:00
Peter Froud 7903845eae Add "element" to STR_ERR_GHOST_NOT_FOUND 2024-01-22 01:45:29 -08:00
Peter Froud 32c880ef89 Add strings for value outside pre-defined range 2024-01-22 01:42:11 -08:00
Peter Froud 9299a80a58 Add descriptive error strings for null checks 2024-01-22 01:21:14 -08:00
Matt 8e88f464b3
Merge pull request #21240 from Harry-Hopkinson/move-gClimate-to-GameState_t
Move gClimate to GameState_t
2024-01-22 04:48:47 +02:00
Harry Hopkinson 0f283dc2a9 Move gClimate to GameState_t 2024-01-21 21:05:22 +00:00
Harry Hopkinson 7ca5b1cd65
Move gClimateNext to GameState_t (#21231) 2024-01-21 18:22:57 +01:00
Matt f55eeff2e0
Merge pull request #21230 from ZehMatt/21193-gInitialCash
#21193: Move gInitialCash to GameState_t, refactor uses
2024-01-20 21:49:31 +02:00
ζeh Matt 25c807edbd
Small cleanup 2024-01-20 19:34:27 +02:00
ζeh Matt c493e22b9b
#21193: Move gInitialCash to GameState_t, refactor uses 2024-01-20 17:13:57 +02:00
Matt 7141fb4574
Merge pull request #21225 from ZehMatt/raise-mix-limit
Raise maximum allowed misc entities to 1600
2024-01-20 17:02:42 +02:00
Matt b35eb7ac7f
Merge pull request #21229 from ZehMatt/21193-gCash
#21193: Move gCash to GameState_t, refactor uses
2024-01-20 17:00:58 +02:00
Katherine Norton 0450435377
Add Plugin API for managing a guest's items (#21062)
* Add API for guest items in openrct2.d.ts

* Create GuestItem interfaces

* Set fields to readonly and add documentation

* Implement getting items array

* Implement checking if a guest has an item

* Implement removing items from guests

* Implement giving a guest an item

* Re-merge GuestItemType with FoodDrinkType

* Add more data validation for the EnumMaps

* Update versioning and changelog

* Add some errors to the give_item method

* Bump network version

* Update VoucherType to if/else

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>

* Add static_assert to ScGuest.hpp

---------

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
2024-01-20 11:51:23 -03:00
ζeh Matt 3518a638bb
#21193: Move gCash to GameState_t, refactor uses 2024-01-20 15:46:35 +02:00
OpenRCT2 git bot 2cb4eb950b Merge Localisation/master into OpenRCT2/develop 2024-01-20 04:01:41 +00:00
Matt d08612b708
Merge pull request #21122 from ZehMatt/gamestate
Start centralizing all save related data in GameState_t
2024-01-20 01:12:10 +02:00
Michael Steenbeek 8846760b8b
Fix #21210: Land right signs display beneath paths
Restores the +3 offset that was previously used. Compared rendering to RCT1 as well.
2024-01-19 22:47:01 +00:00
Severin Paul Höfer 39a37f14eb
Fix #21054: `No entrance` style selected by default in track designer 2024-01-19 23:42:44 +01:00
ζeh Matt 80ca8aefaa
Remove stray change 2024-01-19 16:33:50 +02:00
ζeh Matt 8653ad740a
Apply missing game state parameter 2024-01-19 16:32:19 +02:00
ζeh Matt c839a1746d
Resolve some odd type clash, remove using namespace for now 2024-01-19 16:32:19 +02:00
ζeh Matt f708e911e4
Make clang-format happy 2024-01-19 16:32:19 +02:00
ζeh Matt 9b2a79faf1
Adjust the import/export code to have the game state passed 2024-01-19 16:32:19 +02:00
ζeh Matt a5dde0f8dc
Replace gCurrentTicks with the one in GameState_t 2024-01-19 16:32:19 +02:00
ζeh Matt 4c919f74aa
Start of the new GameState structure 2024-01-19 16:32:15 +02:00
Ota 33523c98c2
Fix #20628: Stop caret left moving off the input string 2024-01-19 13:48:51 +01:00
ζeh Matt 8ae4709aac
Update changelog.txt 2024-01-19 14:45:31 +02:00
ζeh Matt dae726009e
Bump up network version 2024-01-19 14:44:21 +02:00
Michael Steenbeek 00b5932557
Merge pull request #21202 from Gymnasiast/refactor/track-data
Refactor static TrackData and naming
2024-01-19 13:43:39 +01:00
ζeh Matt 6b9de0bb2f
Raise maximum allowed misc entities to 1600 2024-01-19 12:50:27 +02:00
OpenRCT2 git bot b50f1c91d9 Merge Localisation/master into OpenRCT2/develop 2024-01-19 04:01:49 +00:00
Gymnasiast 9d03fad8b8
Rename TrackSlope to TrackPitch 2024-01-17 23:34:37 +01:00
Gymnasiast 95c1adc813
Rename TrackBank to TrackRoll 2024-01-17 23:34:36 +01:00
Gymnasiast cffc55e165
Rename fields of TrackDefinition 2024-01-17 23:33:19 +01:00
Gymnasiast 44d547a4bc
Make TrackPitch into an enum class 2024-01-17 23:33:19 +01:00
Gymnasiast b832eb5f72
Make TrackBank into an enum class 2024-01-17 23:33:19 +01:00
Gymnasiast d2f5e739aa
Make TrackCurve into an enum class 2024-01-17 23:33:19 +01:00
OpenRCT2 git bot ece7601532 Merge Localisation/master into OpenRCT2/develop 2024-01-17 04:01:39 +00:00
Matt 4c84215196
Merge pull request #21157 from Basssiiie/fix-plugin-widget-invalidation
[Plugin] Fix widgets not redrawing correctly when updating disabled or visibility state.
2024-01-16 21:05:36 +02:00
Matt 9527e9658b
Merge pull request #21204 from Sadret/patch-1
Plugin documentation: Added missing field to SmallSceneryElement
2024-01-16 20:59:47 +02:00
Basssiiie cc7c528885 Fix widgets not redrawing correctly when updating disabled/visible state 2024-01-16 14:05:21 +00:00
Basssiiie 5221e8ee9f Extract plugin widget validation logic to separate function 2024-01-16 14:04:14 +00:00
OpenRCT2 git bot 717682a21f Merge Localisation/master into OpenRCT2/develop 2024-01-16 04:01:40 +00:00
Severin Paul Höfer 15e0402c63
Fix #20255: Images not freed in Track Designs Manager (#21205)
* Add missing deallocation in track manager

* Update changelog.txt
2024-01-15 21:38:46 -03:00
Matt 04e8a25c44
Merge pull request #21165 from bencsikandrei/refactor/simplify-linux-get-install-path
Refactor GetInstallPath for linux
2024-01-15 22:51:20 +02:00
Stephan Spengler e8a7bc43b3
Plugin documentation: Added missing field to SmallSceneryElement 2024-01-15 12:42:40 +01:00
Max 7a9e8a5e44
Fix: setting brake/booster speeds via plug-in does not work 2024-01-15 08:28:21 +01:00
Severin Paul Höfer 62d0fd76e0
Fix #20616: Confirmation button in track designer's quit prompt has the wrong text
Wrapped the logic for determining the text to be displayed on title
and buttons of the save prompt in an if condition, so it's not run for
the pure quit prompt.
2024-01-15 08:26:58 +01:00
OpenRCT2 git bot 739dd712d5 Merge Localisation/master into OpenRCT2/develop 2024-01-13 04:01:44 +00:00
Matt 35b19cade1
Merge pull request #21188 from ZehMatt/fix-21171
Fix #21171: Crash creating entities with no slots available
2024-01-13 01:17:50 +02:00
ζeh Matt d202f0044d
Update changelog.txt 2024-01-12 17:56:27 +02:00
ζeh Matt 7d3c273594
Fix #21171: Crash creating entities with no slots available 2024-01-12 17:56:23 +02:00
ζeh Matt 3dc2a25121
Fix overflow calculating maximum free slots for misc entities 2024-01-12 17:48:39 +02:00
Michał Janiszewski 7d8f13a97f
Add changelog entry for 20951 (#21186) 2024-01-12 08:48:35 -03:00
MichaelJBerk 15fcaffc91
Activate OpenRCT2 window after using native file dialog on macOS (#20951) 2024-01-12 12:01:57 +01:00
Michael Steenbeek 0e5c82e2d4
Close #18632: Display land ownership on the water (#21150)
Co-authored-by: pfroud <pfroud@users.noreply.github.com>
2024-01-12 07:14:11 +00:00
Michael Steenbeek 3023784bbf
Merge pull request #21164 from Gymnasiast/refactor/td-entrance-elements
Import maze entrances in the same way as regular ones
2024-01-12 08:10:00 +01:00
Matt cde2a43d32
Merge pull request #21181 from ZehMatt/paint-surface-copy
Remove obsolete copy of TileDescriptor, refactor code slightly
2024-01-12 02:52:57 +02:00
Gymnasiast 5593eca03d
Import maze entrances in the same way as regular ones 2024-01-11 22:49:40 +01:00
Gymnasiast a6c0c7dd79
Move TD6 track flags to RCT12.h 2024-01-11 22:26:06 +01:00
HtotheTML 50cf1aed67
Fix Inca Lost City’s scenario description
The scenario Inca Lost City from the Wacky Worlds expansion states that there are height restrictions. Since there aren't, I've removed the corresponding text.
2024-01-11 21:17:58 +00:00
ζeh Matt e12eaa48d4
Remove obsolete copy of TileDescriptor, refactor code slightly 2024-01-11 20:51:58 +02:00
Matt ce0cc9fc84
Merge pull request #21162 from ZehMatt/fix-intervals
Fix #21145, #21158: Keep handles for intervals stable and resolve crash
2024-01-11 20:30:30 +02:00
ζeh Matt 6eea65fac7
Make the compiler happy 2024-01-11 19:45:07 +02:00
ζeh Matt 88a0e4b8d4
Apply review suggestions, remove redundant comment 2024-01-11 17:34:32 +02:00
Michael Steenbeek f4956f5cdb
Merge pull request #21109 from Gymnasiast/feature/wider-construction-window
Allow for building roller coasters with all 4 curve types
2024-01-11 11:14:46 +01:00
OpenRCT2 git bot 872b28c8d8 Merge Localisation/master into OpenRCT2/develop 2024-01-07 04:01:46 +00:00
Andrei BENCSIK 03ddac9c7f Refactor GetInstallPath for linux
simplify the Platform::GetInstallPath (linux) by removing unnecessary
vector, removing unused #ifdef path and using string_views where
appropriate. no vector was actually needed as the prefixes are fixed
(same as the SearchLocations) - using a plain array avoids an
unnecessary allocation (actually a couple as the old code was using
push_back without reserve).

how it was tested?
run the game, check it finds path OK - PASS
run in the debugger, actually loop through OK - PASS
2024-01-07 00:20:05 +02:00
Matt c137d20a0b
Merge pull request #21163 from fidwell/plugin-api-SmallSceneryPlaceArgs
Plugin documentation: Added missing required field to SmallSceneryPlaceArgs
2024-01-06 20:02:45 +02:00
Andrew 2768716238 Added missing required field to SmallSceneryPlaceArgs 2024-01-06 11:28:00 -05:00
Michael Steenbeek adadaafdb0
Check station flags instead of hardcoded legacy IDs
PR #20483 introduced a check for covered stations, but incorrectly checked the RCT2 IDs.
This commit replaces this check with a proper flag check, which will work for any station style, including custom ones.
2024-01-06 14:46:17 +01:00
Michael Steenbeek ba585f4474
Merge pull request #21085 from Gymnasiast/refactor/td-entrance-elements-2
TrackDesign: Refactor entrances and constants
2024-01-06 11:43:26 +01:00
ζeh Matt c7a716e050
Update changelog.txt 2024-01-06 10:42:17 +02:00
ζeh Matt 8bcd409fb0
Fix #21145, #21158: Keep handles for intervals stable and resolve crash 2024-01-06 10:42:17 +02:00
Michał Janiszewski 296e8cdb16
Merge pull request #21140 from ConiKost/musl
* src/openrct2/core/FileStream.cpp: drop ftello64, fseeko64

The static usage definition of ftello64 and friends is not correct.
While this currently works on glibc, this breaks on musl, as musl
already is LFS aware. The solution is to drop this and add instead
'-D_FILE_OFFSET_BITS=64' to the build system.

Signed-off-by: Conrad Kostecki <conikost@gentoo.org>

* CMakeLists.txt: add D_FILE_OFFSET_BITS=64

Signed-off-by: Conrad Kostecki <conikost@gentoo.org>
Signed-off-by: Conrad Kostecki <conrad@kostecki.com>
2024-01-04 22:03:44 +01:00
Conrad Kostecki 7c638c7865 CMakeLists.txt: add D_FILE_OFFSET_BITS=64
Signed-off-by: Conrad Kostecki <conikost@gentoo.org>
Signed-off-by: Conrad Kostecki <conrad@kostecki.com>
2024-01-04 21:45:25 +01:00
Gymnasiast 7df3b22e14
Move conversion of station object to TD4/6 import/export 2024-01-03 21:14:04 +01:00
Gymnasiast cfff3c53f9
Do not use RCT1/2 limits in TrackDesign.h
Some unrelated files seemingly relied on TrackDesign.h to import RCT2.h for them.
2024-01-03 21:12:53 +01:00
Gymnasiast 3df551ffbf
Move RCT2::GetRCTStringBufferLen to RCT12
It’s used in both
2024-01-03 21:12:53 +01:00
Gymnasiast 01fc353cc8
Refactor in-memory track design entrance 2024-01-03 21:12:53 +01:00
mrmbernardi f0a82e9ecd
Remove double load of Title Sequence in TitleScreen.cpp 2024-01-03 21:11:06 +01:00
Conrad Kostecki 010c19ba61
src/openrct2/core/FileStream.cpp: drop ftello64, fseeko64
The static usage definition of ftello64 and friends is not correct.
While this currently works on glibc, this breaks on musl, as musl
already is LFS aware. The solution is to drop this and add instead
'-D_FILE_OFFSET_BITS=64' to the build system.

Signed-off-by: Conrad Kostecki <conikost@gentoo.org>
2024-01-01 20:47:06 +01:00
James103 1d8dc111f1
Replace 2023 with 2024 in copyright headers (#21139)
Replace all instances of the year 2023 with 2024 in all copyright headers
2024-01-01 12:52:28 +01:00
Gymnasiast f6840cb2af
Start v0.4.8 2023-12-31 21:09:27 +01:00
Gymnasiast 6782a42e08
Merge branch 'master' into develop 2023-12-31 21:08:03 +01:00
Gymnasiast 8db5b655bd
Add icons for medium curves 2023-12-23 14:40:59 +01:00
Gymnasiast f06a80cb30
Allow for building roller coasters with all 4 curve types
Requested by @RealSteel89
2023-12-23 13:25:51 +01:00
1282 changed files with 168705 additions and 136078 deletions

14
.clang-tidy Normal file
View File

@ -0,0 +1,14 @@
---
Checks: >
-*,
cppcoreguidelines-macro-usage,
modernize-use-nullptr,
modernize-use-override,
readability-uppercase-literal-suffix
CheckOptions:
- key: cppcoreguidelines-macro-usage.AllowedRegexp
value: 'validate_global_widx|NETWORK_STREAM_VERSION'
- key: readability-uppercase-literal-suffix.NewSuffixes
value: 'u;L;uL;LL;uLL'
WarningsAsErrors: true
FormatStyle: 'file'

View File

@ -23,7 +23,7 @@ env:
OPENRCT2_BUILD_SERVER: GitHub
OPENRCT2_ORG_TOKEN: ${{ secrets.OPENRCT2_ORG_TOKEN }}
BACKTRACE_IO_TOKEN: ${{ secrets.BACKTRACE_IO_TOKEN }}
OPENRCT2_VERSION: 0.4.7
OPENRCT2_VERSION: 0.4.11
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
concurrency:
@ -39,7 +39,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Lint Commit Messages
@ -55,7 +55,7 @@ jobs:
shell: sh
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Run clang-format
run: scripts/check-code-formatting
check-changelog-formatting:
@ -66,9 +66,31 @@ jobs:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Run check-changelog-formatting
run: scripts/check-changelog-formatting
g2dat:
name: g2.dat
runs-on: ubuntu-latest
steps:
- name: Checkout OpenRCT2
uses: actions/checkout@v4
with:
path: OpenRCT2
- name: Download gxc
run: |
curl -Lo tools.tar.gz https://github.com/IntelOrca/libsawyer/releases/download/v1.3.0/libsawyer-tools-linux-x64.tar.gz
mkdir -p "$GITHUB_WORKSPACE/bin"
tar -C "$GITHUB_WORKSPACE/bin" -xf tools.tar.gz
echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
- name: Build g2.dat
run: |
gxc build g2.dat OpenRCT2/resources/g2/sprites.json
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: g2.dat
path: g2.dat
windows:
name: Windows
runs-on: windows-latest
@ -89,10 +111,10 @@ jobs:
echo "CONFIGURATION=Release" >> "$GITHUB_ENV"
fi
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Git describe for shallow checkout
id: ghd
uses: proudust/gh-describe@v1
uses: proudust/gh-describe@v2
- name: Update GA environment
run: echo "OPENRCT2_DESCRIBE=${{ steps.ghd.outputs.describe }}" >> $GITHUB_ENV
- name: Install MSVC problem matcher
@ -106,7 +128,7 @@ jobs:
build-symbols
build-installer -i
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-${{ matrix.platform }}
path: artifacts
@ -134,7 +156,7 @@ jobs:
name: Windows (${{ matrix.platform_name }}) using mingw
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:12-mingw
container: openrct2/openrct2-build:14-mingw
strategy:
fail-fast: false
matrix:
@ -146,9 +168,9 @@ jobs:
build_flags: -DBUILD_SHARED_LIBS=ON -DENABLE_SCRIPTING=ON
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: ${{ matrix.cache_key }}
- name: Install GCC problem matcher
@ -161,14 +183,14 @@ jobs:
ninja -k0
- name: Upload artifacts (CI)
if: matrix.platform == 'NT5.1'
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-Windows-${{ matrix.platform }}
path: bin/openrct2.exe
if-no-files-found: error
macos-cmake:
name: macOS (${{ matrix.arch }}) using CMake
runs-on: macos-latest
runs-on: macos-12
needs: check-code-formatting
strategy:
fail-fast: false
@ -178,7 +200,8 @@ jobs:
- arch: x64
cache_key: macos-x64
# Note: only build/run tests on the native architecture of the CI agent
# GitHub macos-latest agents are currently all Intel
# GitHub macos-12 agents are all Intel, but as of 2024-04-25 new images, e.g. macos-14 (current macos-latest) are arm64
# See https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories
build_flags: -DARCH="x86_64" -DWITH_TESTS=on
run_tests: true
- arch: arm64
@ -187,9 +210,9 @@ jobs:
run_tests: false
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: ${{ matrix.cache_key }}
- name: Configure ccache
@ -211,7 +234,7 @@ jobs:
cd artifacts
zip -rqy openrct2-macos.zip OpenRCT2.app
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-${{ matrix.arch }}-cmake
path: artifacts/openrct2-macos.zip
@ -226,18 +249,18 @@ jobs:
if: ${{matrix.run_tests}}
macos-universal:
name: macOS universal app bundle
runs-on: macos-latest
runs-on: macos-12
needs: macos-cmake
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: download x64 app bundle
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-x64-cmake
path: macos_universal/x64
- name: download arm64 app bundle
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-arm64-cmake
path: macos_universal/arm64
@ -257,7 +280,7 @@ jobs:
cd artifacts
zip -rqy openrct2-macos.zip OpenRCT2.app
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-universal
path: artifacts/openrct2-macos.zip
@ -271,7 +294,7 @@ jobs:
echo 'Not going to push build'
fi
linux-portable:
name: Linux (${{ matrix.platform }}, ${{ matrix.distro }}, portable)
name: ${{ matrix.distro }} Linux (${{ matrix.release }}, ${{ matrix.platform }}, portable)
runs-on: ubuntu-latest
needs: check-code-formatting
container: ${{ matrix.image }}
@ -280,32 +303,26 @@ jobs:
matrix:
include:
# Use `-fno-var-tracking-assignments` to reduce amount of produced debug information. This is necessary due to 100MiB limit of GitHub / openrct2.org API.
# For focal the debug information still takes too much space, so reduce amount of debug info to minimum using `-g1` (`-g` means `-g2`), which is enough for backtraces only.
- platform: x86_64
distro: bionic
image: openrct2/openrct2-build:4-bionic
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" -DWITH_TESTS=off -DDISABLE_FLAC=ON -DDISABLE_VORBIS=ON
- platform: x86_64
distro: focal
image: openrct2/openrct2-build:12-focal
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g1 -gz" -DWITH_TESTS=off
- platform: x86_64
distro: jammy
image: openrct2/openrct2-build:12-jammy
distro: Ubuntu
release: jammy
image: openrct2/openrct2-build:14-jammy
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments"
- platform: x86_64
distro: bullseye
image: openrct2/openrct2-build:12-bullseye
distro: Debian
release: bullseye
image: openrct2/openrct2-build:14-bullseye
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" -DWITH_TESTS=off
- platform: i686
distro: focal
image: openrct2/openrct2-build:12-focal32
build_flags: -DFORCE32=ON -DENABLE_SCRIPTING=OFF -DCMAKE_CXX_FLAGS="-m32 -g1 -gz" -DWITH_TESTS=off
distro: Ubuntu
release: jammy
image: openrct2/openrct2-build:14-jammy32
build_flags: -DFORCE32=ON -DENABLE_SCRIPTING=OFF -DCMAKE_CXX_FLAGS="-m32 -g -gz" -DWITH_TESTS=off
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-${{ matrix.platform }}-${{ matrix.distro }}
- name: Get pre-reqs
@ -317,7 +334,7 @@ jobs:
- name: Build artifacts
run: . scripts/setenv -q && build-portable artifacts/OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}.tar.gz bin/install/usr
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}
path: artifacts
@ -335,15 +352,15 @@ jobs:
echo 'Not going to push build'
fi
linux-appimage:
name: Linux (x86_64, AppImage)
name: Ubuntu Linux (AppImage, x86_64)
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:12-focal
container: openrct2/openrct2-build:14-jammy
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-appimage
- name: Get pre-reqs
@ -353,7 +370,7 @@ jobs:
- name: Build AppImage
run: . scripts/setenv -q && build-appimage
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-AppImage
path: artifacts
@ -368,13 +385,13 @@ jobs:
echo 'Not going to push build'
fi
linux-docker:
name: Linux (docker)
name: Ubuntu Linux (Docker)
needs: check-code-formatting
if: github.repository == 'OpenRCT2/OpenRCT2'
runs-on: ubuntu-latest
steps:
- name: Checkout image
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
repository: OpenRCT2/openrct2-docker
- name: Build image
@ -393,15 +410,15 @@ jobs:
echo 'Image not pushed'
fi
linux-clang:
name: Linux (Debug, [http, network, flac, vorbis OpenGL] disabled) using clang
name: Ubuntu Linux (jammy, debug, [http, network, flac, vorbis OpenGL] disabled) using clang
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:12-jammy
container: openrct2/openrct2-build:14-jammy
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-clang
- name: Install GCC problem matcher
@ -409,15 +426,15 @@ jobs:
- name: Build OpenRCT2
run: . scripts/setenv && build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DDISABLE_NETWORK=ON -DDISABLE_HTTP=ON -DDISABLE_FLAC=ON -DDISABLE_VORBIS=ON -DDISABLE_OPENGL=ON
linux-clang-tests:
name: Linux (Debug) using clang, coverage enabled
name: Ubuntu Linux (debug) using clang, coverage enabled
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:12-jammy
container: openrct2/openrct2-build:14-jammy
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: linux-clang
- name: Install GCC problem matcher
@ -441,7 +458,7 @@ jobs:
xz -1v coverage.json
xz -1v OpenRCT2Tests
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-${{ runner.os }}-coverage
path: |
@ -453,12 +470,12 @@ jobs:
name: Android
runs-on: ubuntu-latest
needs: check-code-formatting
container: openrct2/openrct2-build:12-android
container: openrct2/openrct2-build:14-android
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.11 # https://github.com/hendrikmuhs/ccache-action/issues/181
with:
key: android
- name: Install GCC problem matcher
@ -472,7 +489,7 @@ jobs:
mkdir -p artifacts
mv src/openrct2-android/app/build/outputs/apk/release/app-release.apk artifacts/openrct2-arm.apk
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: OpenRCT2-Android
path: artifacts

21
.github/workflows/clang-tidy.yml vendored Normal file
View File

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

View File

@ -24,7 +24,7 @@
"/Library/Frameworks"
],
"cStandard": "c11",
"cppStandard": "c++17"
"cppStandard": "c++20"
},
{
"name": "Linux",

View File

@ -55,7 +55,7 @@ endif ()
include(CheckCXXCompilerFlag)
include(GNUInstallDirs)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}")
@ -64,21 +64,21 @@ set(TITLE_SEQUENCE_VERSION "0.4.6")
set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip")
set(TITLE_SEQUENCE_SHA1 "80fefc6ebbabc42a6f4703412daa5c62f661420d")
set(OBJECTS_VERSION "1.3.13")
set(OBJECTS_VERSION "1.4.6")
set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip")
set(OBJECTS_SHA1 "15a60424d5f4f0b94ac07763b6967ba0e6ae3a7d")
set(OBJECTS_SHA1 "49852246ba3d3a44f143e0c4de8f4d2e8f950c10")
set(OPENSFX_VERSION "1.0.3")
set(OPENSFX_VERSION "1.0.5")
set(OPENSFX_URL "https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v${OPENSFX_VERSION}/opensound.zip")
set(OPENSFX_SHA1 "ffec5a97bd5035860c4c9a43fe32cf51886478e3")
set(OPENSFX_SHA1 "b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb")
set(OPENMSX_VERSION "1.5")
set(OPENMSX_URL "https://github.com/OpenRCT2/OpenMusic/releases/download/v${OPENMSX_VERSION}/openmusic.zip")
set(OPENMSX_SHA1 "f3c707e576281758637598ce68880416891fe5f9")
set(REPLAYS_VERSION "0.0.78")
set(REPLAYS_VERSION "0.0.79")
set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v${REPLAYS_VERSION}/replays.zip")
set(REPLAYS_SHA1 "31C5D07EED8481D5C6D57F9E4FE9443AAEDE7739")
set(REPLAYS_SHA1 "34457077DBA9448A08FF6AC95E5CB92D65252E0C")
option(FORCE32 "Force 32-bit build. It will add `-m32` to compiler flags.")
option(WITH_TESTS "Build tests")
@ -125,12 +125,13 @@ if (APPIMAGE)
endif ()
if (MACOS_USE_DEPENDENCIES)
message("Using OpenRCT2 dependencies instead of system libraries")
# if we're building on macOS, then we need the dependencies
include(cmake/download.cmake)
set(MACOS_DYLIBS_VERSION "33")
set(MACOS_DYLIBS_VERSION "35")
set(MACOS_DYLIBS_ZIPFILE "openrct2-libs-v${MACOS_DYLIBS_VERSION}-universal-macos-dylibs.zip")
set(MACOS_DYLIBS_SHA1 "8b47f3a3603f3ad3a1ee292033d0daffe9a3e43c")
set(MACOS_DYLIBS_SHA1 "bed4340c32b6dbee9634ceaf19cb6b49a837aead")
set(MACOS_DYLIBS_DIR "${ROOT_DIR}/lib/macos")
set(MACOS_DYLIBS_URL "https://github.com/OpenRCT2/Dependencies/releases/download/v${MACOS_DYLIBS_VERSION}/${MACOS_DYLIBS_ZIPFILE}")
@ -147,6 +148,7 @@ if (MACOS_USE_DEPENDENCIES)
# if we're making the OpenRCT2.app bundle, rpath will be handled by fixup_bundle
# if we're building the CLI executable, we need to do it ourselves
if (NOT MACOS_BUNDLE)
message("Setting rpath for macOS dylibs")
# the RPATH to be used when installing, but only if it's not a system directory
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
@ -277,6 +279,9 @@ if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244") # C4244: 'conversion_type': conversion from 'type1' to 'type2', possible loss of data
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4068") # C4068: unknown pragma
# Enable char8_t<->char conversion
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:char8_t-")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
if (CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
@ -331,6 +336,9 @@ else ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas -Wno-missing-braces -Wno-comment -Wnonnull -Wno-unused-parameter -Wno-attributes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG=${DEBUG_LEVEL}")
# Enable char8_t<->char conversion
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-char8_t -Wno-deprecated-declarations")
if(APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=objc-method-access")
endif()

View File

@ -36,6 +36,8 @@ Examples of unacceptable behavior include:
* Other conduct which could reasonably be considered inappropriate in a
professional setting
For our community guidelines please refer to [CommunityGuidelines.md](CommunityGuidelines.md).
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of

63
CommunityGuidelines.md Normal file
View File

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

View File

@ -12,6 +12,7 @@ Includes all git commit authors. Aliases are GitHub usernames or community nickn
* Karst van Galen Last (AuraSpecs) - Lead OpenSoundEffects & OpenMusic
* Michael Bernardi (mrmbernardi) - Programming
* Michael Steenbeek (Gymnasiast) - Lead Localisation - Programming
* Aaron van Geffen (AaronVanGeffen) - Programming
## Support team
* Kenton Boadway (Krutonium) - Lead OpenScenarios
@ -21,7 +22,6 @@ Includes all git commit authors. Aliases are GitHub usernames or community nickn
* Marijn van der Werf (marijnvdwerf)
* (zsilencer)
* Richard Jenkins (rwjuk)
* Aaron van Geffen (AaronVanGeffen)
* Rik Smeets (rik-smeets)
## Long term contributors
@ -118,8 +118,11 @@ Appreciation for contributors who have provided substantial work, but are no lon
* Wenzhao Qiu (qwzhaox) - Misc.
* Tiago Reul (reul) - Misc.
* Fredrik Tegnell (fredriktegnell) - Misc.
* Alex Parisi (alex-parisi) - Added API for returning metadata from all registered plugins.
* Arnold Zhou (mrmagic2020) - Added plugin API for getting and setting guests' favourite rides, misc.
## Bug fixes & Refactors
* Claudio Tiecher (janclod)
* (KirilAngelov)
* (halfbro)
* (Myrtle)
@ -232,6 +235,12 @@ Appreciation for contributors who have provided substantial work, but are no lon
* Wenzhao Qiu (qwzhaox)
* Michael Bernardi (mrmbernardi)
* Aram Kazorian (aramk-hub)
* Harry Hopkinson (Harry-Hopkinson)
* Jan Kelemen (jan-kelemen)
* Cory Ye (CoryfY)
* Karsten Van Fossan (karstenvanf)
* Kaavya Ramachandhran (ayvaak)
* Mike Harvey (harvito)
## Toolchain
* (Balletie) - macOS
@ -281,6 +290,7 @@ Appreciation for contributors who have provided substantial work, but are no lon
* Russian - (Soosisya)
* Spanish - Josué Acevedo (Wirlie), Diego Mateos (dimateos), (frenchiveruti), (mdtrooper), Daniel Trujillo Viedma (gDanix); small fixes: (teapartycthulu)
* Swedish - (Jinxit), (mharrys), (Slimeyo), Matte Andersson (Nubbie)
* Ukrainian - (CsyeCokTheSolly), (Veydzher), (Saba4ara)
## Graphics
* Yannic Geurts (xzbobzx) - OpenRCT2 Logo
@ -315,4 +325,4 @@ Appreciation for contributors who have provided substantial work, but are no lon
Thanks to: Peter James Adcock, Joe Booth, and John Wardley
Licensed to Infogrames Interactive Inc.
Licensed to Infogrames Interactive Inc.

View File

@ -186,7 +186,7 @@ STR_0768 :رجل مساعد {INT32}
STR_0769 :ميكانيكي {INT32}
STR_0770 :رجل الأمن {INT32}
STR_0771 :المُرفه {INT32}
STR_0777 :خديقة غير مسماة{POP16}{POP16}
STR_0777 :خديقة غير مسماة
STR_0778 :إشارة
STR_0779 :الأول
STR_0780 :الثاني
@ -1740,12 +1740,12 @@ STR_2382 :Land
STR_2383 :Water
STR_2384 :{WINDOW_COLOUR_2}Your objective:
STR_2385 :{BLACK}None
STR_2386 :{BLACK}To have at least {COMMA16} guests in your park at the end of {MONTHYEAR}, with a park rating of at least 600
STR_2386 :{BLACK}To have at least {COMMA32} guests in your park at the end of {MONTHYEAR}, with a park rating of at least 600
STR_2387 :{BLACK}To achieve a park value of at least {POP16}{POP16}{CURRENCY} at the end of {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Have Fun!
STR_2389 :{BLACK}Build the best {STRINGID} you can!
STR_2390 :{BLACK}To have 10 different types of roller coasters operating in your park, each with an excitement value of at least 6.00
STR_2391 :{BLACK}To have at least {COMMA16} guests in your park. You must not let the park rating drop below 700 at any time!
STR_2391 :{BLACK}To have at least {COMMA32} guests in your park. You must not let the park rating drop below 700 at any time!
STR_2392 :{BLACK}To achieve a monthly income from ride tickets of at least {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}To have 10 different types of roller coasters operating in your park, each with a minimum length of {LENGTH}, and an excitement rating of at least 7.00
STR_2394 :{BLACK}To finish building all 5 of the partially built roller coasters in this park, designing them to achieve excitement ratings of at least {POP16}{POP16}{COMMA2DP32} each
@ -2100,39 +2100,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :…غير قادر علي تحميل الملف
STR_3011 :الملف يحتوي علي بيانات خاطئة
STR_3012 :Dodgems beat style
STR_3013 :Fairground organ style
STR_3014 :Roman fanfare style
STR_3015 :Oriental style
STR_3016 :Martian style
STR_3017 :Jungle drums style
STR_3018 :Egyptian style
STR_3019 :Toyland style
STR_3020 :
STR_3021 :Space style
STR_3022 :Horror style
STR_3023 :Techno style
STR_3024 :Gentle style
STR_3025 :Summer style
STR_3026 :Water style
STR_3027 :Wild west style
STR_3028 :Jurassic style
STR_3029 :Rock style
STR_3030 :Ragtime style
STR_3031 :Fantasy style
STR_3032 :Rock style 2
STR_3033 :Ice style
STR_3034 :Snow style
STR_3035 :Custom music 1
STR_3036 :Custom music 2
STR_3037 :Medieval style
STR_3038 :Urban style
STR_3039 :Organ style
STR_3040 :Mechanical style
STR_3041 :Modern style
STR_3042 :Pirates style
STR_3043 :Rock style 3
STR_3044 :Candy style
STR_3045 :Select style of music to play
STR_3047 :Local authority forbids demolition or modifications to this ride
STR_3048 :Marketing campaigns forbidden by local authority
@ -2359,7 +2326,7 @@ STR_3305 :{WINDOW_COLOUR_2}Monthly income:
STR_3306 :{WINDOW_COLOUR_2}Monthly profit:
STR_3307 :{WINDOW_COLOUR_2}Minimum length:
STR_3308 :{WINDOW_COLOUR_2}Excitement rating:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Rides/attractions under a preservation order:
@ -2921,7 +2888,7 @@ STR_5755 :نسخة برنامج خاطئة (السرفر يستخدم الن
STR_5756 :كلمة سر خاطئة
STR_5757 :السرفر ممتلئ
STR_5758 :{OUTLINE}{GREEN}{STRING} قد إنظم للعبة
STR_5759 :يُحمل الخريطة … ({INT32} / {INT32}) كيلو بايت
STR_5759 :يُحمل الخريطة …
STR_5760 :دولار هونج كونج (دهونج)
STR_5761 :دولار تيوان الجديدة (دتيوان)
STR_5762 :الين الصيني (ين)
@ -2997,7 +2964,7 @@ STR_5832 :Show height as generic units instead of measurement format set unde
STR_5833 :Changes what date format is used
STR_5834 :Select which audio device OpenRCT2 will use
STR_5835 :Mute the game if the window loses focus
STR_5836 :حدد الموسيقى المستخدمة في القائمة الرئيسية.{NEWLINE}يتطلب تحديد سمة محاكي الافعوانيات 1 تعيين المسار إلى محاكي الافعوانيات 1 في تبويب الخيارات المتقدمة.
STR_5836 :حدد الموسيقى المستخدمة في القائمة الرئيسية.{NEWLINE}يتطلب تحديد سمة RollerCoaster Tycoon 1 تعيين المسار إلى RollerCoaster Tycoon 1 في تبويب الخيارات المتقدمة.
STR_5837 :Create and manage custom UI themes
STR_5838 :Show a separate button for the finance window in the toolbar
STR_5839 :Show a separate button for the research and development window in the toolbar
@ -3249,12 +3216,12 @@ STR_6089 :{STRING} تم تغيير أسم الحديقة من {STRING}
STR_6090 :{STRING} .فتح الحديقة
STR_6091 :{STRING} .إغلاق الحديقة
STR_6092 :{STRING} تم تغيير رسول دخول الحديقة إلي {STRING}
STR_6093 :{STRING} placed new scenery.
STR_6094 :{STRING} removed scenery.
STR_6095 :{STRING} edited scenery.
STR_6096 :{STRING} set sign name to {STRING}.
STR_6097 :{STRING} placed a track of ride {STRING}.
STR_6098 :{STRING} removed a track of ride.
STR_6093 :{STRING} تم وضع مشهد جديد.
STR_6094 :{STRING} تم حذف المشهد.
STR_6095 :{STRING} تم تعديل المشهد.
STR_6096 :{STRING} غير اسم اللافته الي {STRING}.
STR_6097 :{STRING} تم وضع مسار الرحلة {STRING}.
STR_6098 :{STRING} تم حذف مسار الرحلة.
STR_6099 :.أنت متصل مع السرفر
STR_6100 :.أنت إنفصلت عن السرفر
STR_6101 :Rides dont decrease in value over time
@ -3281,7 +3248,7 @@ STR_6129 :إنسخ
STR_6130 :إنسخ الكل
STR_6131 :مصدر العنصر
STR_6132 :تجاهل حالة التطوير
STR_6133 :Access rides and scenery that have not yet been invented
STR_6133 :قم بالوصول للرحلات والمشاهد التي لم يتم إصدارها بعد
STR_6134 :إخلاء المشهد
STR_6135 :العميل أرسل طلب خاطئ
STR_6136 :السرفر أرسل طلب خاطئ
@ -3289,13 +3256,13 @@ STR_6137 :OpenRCT2, a free and open source clone of Roller Coaster Tycoon 2.
STR_6138 :OpenRCT2 is the work of many authors, a full list can be found in “contributors.md”. For more information, visit http://github.com/OpenRCT2/OpenRCT2
STR_6139 :All product and company names belong to their respective holders. Use of them does not imply any affiliation with or endorsement by them.
STR_6140 :سجل التغيير…
STR_6141 :RCT1 Bottom Toolbar
STR_6141 :السفليRCT1 شريط ادوات
STR_6142 :{WINDOW_COLOUR_2}أسم المسار: {BLACK}{STRING}
STR_6143 :{WINDOW_COLOUR_2}نوع الرحلة: {BLACK}{STRINGID}
STR_6144 :أظهر تأثيرات التراب
STR_6145 :حدد
STR_6146 :Enable all drawable track pieces
STR_6147 :Enables all track pieces the ride type is capable of in the construction window, regardless of whether the vehicle supports them.
STR_6146 :فعل كل قطع المسار الممكن رسمه
STR_6147 :تمكين جميع قطع المسار الخاصة بالمركبة في نافذة البناء، بغض النظر عما إذا كانت المركبة تدعمها أم لا.
STR_6148 :يتصل إلي السرفر الأساسي…
STR_6149 :غير قادر علي الإتصال بالسرفر الأساسي
STR_6150 :رد خاطئ من السرفر الأساسي (لا رقم جسون)
@ -3341,7 +3308,7 @@ STR_6217 :توافرية المسار \الرحلة
STR_6218 :محاكاة الأفعوانيات المفتوحة 2 الرسمية
STR_6219 :تعليم مشاكل المسار
STR_6220 :أجعله مُستخدم
STR_6221 :{BLACK هذا سوف يحدد المدخل والمخرج المعروف للرحلة للمنطقة هذه. فقط مدخل ومخرج واحد يمكن إسخدامة لكل محطة.
STR_6221 :{BLACK} هذا سوف يحدد المدخل والمخرج المعروف للرحلة للمنطقة هذه. فقط مدخل ومخرج واحد يمكن إسخدامة لكل محطة.
STR_6222 :لا يمكن وضع نقطة دخول الزوار هنا…
STR_6223 :يجب أن يكون خارج حدود الحديقة!
STR_6224 :{STRING} تم وضع نقطة دخول الزوار.
@ -3481,7 +3448,7 @@ STR_6374 :C
STR_6375 :رحلة غير معروفة
STR_6376 :{WINDOW_COLOUR_2}عربة الرحلة:{NEWLINE}{BLACK}{STRINGID} لـ {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}النوع: {BLACK}{STRINGID} لـ {STRINGID}
STR_6378 :يستقبل قائمة العناصر: {INT32} / {INT32}
STR_6378 :يستقبل قائمة العناصر:
STR_6379 :أستقبل بيانات خاطئة
STR_6380 :يتوفر تحديث للعبة!
STR_6381 :إنضم لديسكورد الرسمي!
@ -3490,8 +3457,8 @@ STR_6383 :فتح صفحة التحميل
STR_6384 :ثلوج
STR_6385 :ثلوج كثيفة
STR_6386 :عاصفة ثلجية
STR_6387 :لا يمكن خفض العنصر هنا...
STR_6388 :لا يمكن رفع العنصر هنا...
STR_6387 :لا يمكن خفض العنصر هنا
STR_6388 :لا يمكن رفع العنصر هنا
STR_6389 :فسحة غير صالحة
STR_6390 :تحتاج OpenRCT2 إلى ملفات من لعبة RollerCoaster Tycoon 2 الاصلية لكي تعمل. الرجاء تحديد المسار التي تتواجد به RollerCoaster Tycoon 2.
STR_6391 :من فضلك حدد مسار اللعبة الاصلية
@ -3535,7 +3502,7 @@ STR_6428 :Joy Down
STR_6429 :Joy {INT32}
STR_6430 :LMB
STR_6431 :RMB
STR_6432 :Mouse {INT32}
STR_6432 :الماوس {INT32}
STR_6433 :حذف
STR_6434 :حذف كل الإرتباطات من هذا الإختصار.
STR_6435 :{WINDOW_COLOUR_2}أوقف المُخربون: {BLACK}{COMMA16}
@ -3593,9 +3560,9 @@ STR_6487 :تفعيل شاهد من خلال العاملون
STR_6488 :{RED}يشكو الضيوف من طوابير الإنتظار الطويلة بحديقتك.{NEWLINE}قلل الطوابير الطويلة المسببة للمشكلة، أو زد عدد الرحلات.
STR_6489 :خطأ: نسخة حديقة غير مدعومة
STR_6490 :تحذير: نسخة حديقة شبه مدعومة
STR_6491 :حُفظت هذه الحديقة في نسخة أحدث من اللعبة. الحديقة نسخة {INT32} و تتطلب علي الأقل نسخة{INT32}.
STR_6492 :حُفظت هذه الحديقة في نسخة قديمة من اللعبة، ولا يمكن فتحها في النسخة الحالية من اللعبة. نسخة الحديقة هي{INT32}.
STR_6493 :حُفظت هذه الحديقة في نسخة أحدث من اللعبة، ربما فُقدت بعض البيانات. نسخة الحديقة هي{INT32} وتتطلب علي الأقل نسخة{INT32}.
STR_6491 :حُفظت هذه الحديقة في نسخة أحدث من اللعبة. الحديقة نسخة {INT32} و تتطلب علي الأقل نسخة{INT32} أنت حاليا تستخدم النسخة v{INT32}.
STR_6492 :حُفظت هذه الحديقة في نسخة قديمة من اللعبة، ولا يمكن فتحها في النسخة الحالية من اللعبة. نسخة الحديقة هي{INT32} أنت حاليا تستخدم النسخة v{INT32}.
STR_6493 :حُفظت هذه الحديقة في نسخة أحدث من اللعبة، ربما فُقدت بعض البيانات. نسخة الحديقة هي{INT32} وتتطلب علي الأقل نسخة{INT32} أنت حاليا تستخدم النسخة v{INT32}.
STR_6494 :تجميع حسب نوع الرحلة
STR_6495 :مجموعة الرحلات حسب نوع الرحلة بدلاً من عرض كل مركبة على حدة.
STR_6496 :{WINDOW_COLOUR_2}{STRINGID}
@ -3617,6 +3584,11 @@ STR_6511 :لفة انعدامية الوزن (يمين)
STR_6512 :لفة كبيرة انعدامية الوزن (شمال)
STR_6513 :لفة كبيرة انعدامية الوزن (يمين)
STR_6514 :ارتفاع غير صحيح!
STR_6515 :{BLACK}RollerCoaster Tycoon 1 غير مربوطة - سيتم استخدام الصور الاحتياطية.
STR_6516 :واحد او اكثر من عنصر يتطلبون ان تكون RollerCoaster Tycoon 1 مرتبطة لكي يعرضوا بشكل صحيح. سيتم استخدام الصور الاحتياطية.
STR_6517 :واحد او اكثر من عنصر يتطلبون ان تكون RollerCoaster Tycoon 1 مرتبطة لكي يعرضوا بشكل صحيح. سيتم استخدام الصور الاحتياطية.
STR_6518 :{BLACK} قم بالمرور فوق احدي المشاهد لكي ترى تفاصيله والمهمات المطلوبة به. انقر عليه لكي تلعبه.
STR_6519 :الملحقات
STR_6520 :حزمة الملفات
STR_6521 :أولوية منخفضة
STR_6522 :أولوية مرتفعة
@ -3624,12 +3596,16 @@ STR_6523 :تقليل أولوية حزمة الملفات المحددة.
STR_6524 :زيادة أولوية حزمة الملفات المحددة.
STR_6525 :أعد تحميل جميع الملفات في اللعبة بحزم الملفات الممكّنة.
STR_6526 :(الرسوميات القياسية، الموسيقي والمؤثرات الصوتية)
STR_6527 :المسابقات
STR_6528 :معاملات مسار غير صحيحة!
STR_6529 :معلمة نظام الألوان غير صحيح!
STR_6530 :حزمة توسوعية منشئة بالمستخدم
STR_6531 :آلة السفر عبر الزمن
STR_6532 :عالم أحلام كاتي
STR_6533 :{WINDOW_COLOUR_2}عامل الاثارة: {BLACK}-{COMMA16}%
STR_6534 :{WINDOW_COLOUR_2}عامل الشدة: {BLACK}-{COMMA16}%
STR_6535 :{WINDOW_COLOUR_2}عامل الغثيان: {BLACK}-{COMMA16}%
STR_6536 :حٌفظت الحديقة بنسخة احدث من اللعبة. حٌفظت الحديقة بنسخة v{INT32}, أنت حاليا تستخدم النسخة v{INT32}.
#############
# Scenarios #
################
@ -4221,87 +4197,87 @@ STR_DTLS :قم ببناء جولات الأعلام الستة المفقود
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :أفريقيا - منجم الماس الأفريقي
STR_SCNR :مناجم أفريقيا
STR_PARK :مناجم أفريقيا
STR_DTLS :لقد ورثت منجم ألماس مهجور ووجدت ألماسة ثمينة. قررت استثمار هذه الأموال لبناء مدينة ملاهي مشهورة عالميًا.
<Africa - Oasis>
STR_SCNR :أفريقيا - الواحة
STR_SCNR :جنون السراب
STR_PARK :جنون السراب
STR_DTLS :تم اكتشاف واحة صحراوية والتي ستوفر موقعًا جميلًا للحديقة. تم توفير المواصلات من وإلى الواحة.
<Africa - Victoria Falls>
STR_SCNR :أفريقيا - شلالات فيكتوريا
STR_SCNR :على الحافة
STR_PARK :على الحافة
STR_DTLS :تم بناء سد يوفر طاقة كهرومائية وفيرة ورخيصة لتشغيل الحديقة. أنت بحاجة للوصول إلى قيمة عالية للحديقة للمساعدة في سداد قرض السد.
<Antarctic - Ecological Salvage>
STR_SCNR :أنتاركتيكا - الإنقاذ البيئي
STR_SCNR :المغامرات الثلجية
STR_PARK :المغامرات الثلجية
STR_DTLS :لقد لجأت إليك وكالة البيئة لتحويل مصفاة نفط قديمة صديقة للبيئة إلى منطقة جذب سياحي كبرى. الأرض رخيصة لكن الفائدة على القرض مرتفعة. يمكنك بيع المباني القديمة من أجل بعض النقود.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :آسيا - تعزيز السياحة بسور الصين العظيم
STR_SCNR :سور الصين العظيم
STR_PARK :سور الصين العظيم
STR_DTLS :قررت السلطات تعزيز السياحة حول السور العظيم من خلال بناء مدينة ترفيهية على الأرض المجاورة. المال ليس مُعضلة!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :آسيا - استصلاح السواحل اليابانية
STR_SCNR :شاطئ أوكيناوا
STR_PARK :شاطئ أوكيناوا
STR_DTLS :نفدت مساحة الحديقة الموجودة. خيارك الوحيد هو البناء في البحر، وهكذا حصلت على قرض. يتم فرض قيود الارتفاع على المباني الخاصة بك بسبب الأساسات ومخاطر الزلازل.
<Asia - Maharaja Palace>
STR_SCNR :اسيا - قصر المهراجا
STR_SCNR :حديقة المهراجا
STR_PARK :حديقة المهراجا
STR_DTLS :لقد تم تكليفك من قبل المهراجا لإحضار الترفيه لعدد كبير من السكان المحليين. حيث يتعين عليك بناء حديقة مستوحاة من قصر المهراجا.
<Australasia - Ayers Rock>
STR_SCNR :أستراليا - صخور أولورو
STR_SCNR :مغامرات أولورو
STR_PARK :مغامرات أولورو
STR_DTLS :أنت تساعد السكان الأصليين في بناء حديقة كجزء من برنامج التوعية الثقافية. تحتاج إلى الوصول إلى عدد كبير من الزوار لتثقيفهم حول التراث الفريد للسكان الأصليين.
<Australasia - Fun at the Beach>
STR_SCNR :أستراليا - المرح على الشاطئ
STR_SCNR :حفلة شواء على الشاطئ
STR_PARK :حفلة شواء على الشاطئ
STR_DTLS :تعرضت حديقة الفقمة الخاصة برجل أعمال محلي للإفلاس. أنت حاليًا تدير حديقة صغيرة، قُمت بشراء الحديقة الأخرى من شركة البناء. ويتعين عليك الأن تطوير حديقة مشتركة كبيرة.
<Europe - European Cultural Festival>
STR_SCNR :أوروبا - المهرجان الثقافي الأوروبي
STR_SCNR :الروعة الأوروبية
STR_PARK :الروعة الأوروبية
STR_DTLS :لقد تم إحضارك لتولي مركز جذب الزوار الثقافيين الأوروبيين ويجب عليك زيادة عدد الضيوف من أجل سداد دعم الاتحاد الأوروبي بحلول نهاية الدورة الحالية للبرلمان الأوروبي.
<Europe - Renovation>
STR_SCNR :أوروبا - التجديد
STR_SCNR :من الرماد
STR_PARK :من الرماد
STR_DTLS :لقد أصبحت هذه الحديقة القديمة بحالة يرثى لها. حَصلت على منحة من الاتحاد الأوروبي لإعادة هذه المنطقة المحرومة إلى مجدها السابق! تحتاج إلى تجديد الحديقة وسداد المنحة.
<N. America - Extreme Hawaiian Island>
STR_SCNR :أمريكا الشمالية - جزيرة هاواي الأخيرة
STR_SCNR :واكي وايكيكي
STR_PARK :واكي وايكيكي
STR_DTLS :يشعر سكان هاواي بالملل من ركوب الأمواج ويبحثون عن شيء أكثر إثارة. تحتاج إلى بناء حديقة مع وضع ذلك في الاعتبار للحفاظ على التصنيف المرتفع لمناطق الجذب السياحي في المنطقة.
<North America - Grand Canyon>
STR_SCNR :أمريكا الشمالية - الوادي العظيم
STR_SCNR :أحداث الوادي
STR_PARK :أحداث الوادي
STR_DTLS :عليك بناء حديقة على أرض محدودة على جانبي هذا الكنز الطبيعي - لديك الفرصة لشراء الأراضي المجاورة من الهنود الأمريكيين الأصليين. تحتاج إلى إكمال الهدف للحفاظ على سكان المدينة المحلية.
<North America - Rollercoaster Heaven>
STR_SCNR :أمريكا الشمالية - جنة الأفعوانيات
STR_SCNR :جنة الأفعوانيات
STR_PARK :جنة الأفعوانيات
STR_DTLS :أنت رجل أعمال ناجح في إجازة طويلة وترغب في استغلال هذا الوقت في تحويل حديقة المدينة إلى جنة أفعوانيات. المال ليس عائقًا!
<South America - Inca Lost City>
STR_SCNR :أمريكا الجنوبية - مدينة الإنكا المفقودة
STR_SCNR :مؤسس المدينة المفقودة
STR_PARK :مؤسس المدينة المفقودة
STR_DTLS :لتعزيز السياحة المحلية، يجب عليك إنشاء حديقة تتماشى مع محيطها، ولها قيود على الارتفاع.
<South America - Rain Forest Plateau>
STR_SCNR :أمريكا الجنوبية - هضبة الغابات المطيرة
STR_SCNR :العاب الغابات المطيرة
STR_PARK :العاب الغابات المطيرة
STR_DTLS :المساحة محدودة في الغابات المطيرة الثمينة - حيث يجب عليك ضم أكبر قدر ممكن في المساحة المخلية الحالية، من أجل توفير بديل قابل للتطبيق لصناعة الأخشاب المحليةالمساحة محدودة في الغابات المطيرة الثمينة - يجب حشر أكبر قدر ممكن في المساحة المخلية الحالية، من أجل توفير بديل قابل للتطبيق لصناعة الأخشاب المحلية.
<South America - Rio Carnival>
STR_SCNR :أمريكا الجنوبية - كرنفال ريو
STR_SCNR :شواطئ باو دي أسوكار
STR_PARK :شواطئ باو دي أسوكار
STR_DTLS :انت تُدير حديقة صغيرة بالقرب من مدينة ريو لكن البنك طالبك بالقرض. تحتاج إلى زيادة ربحك بسرعة لتسديد هذا الدين غير المتوقع.
@ -4309,72 +4285,72 @@ STR_DTLS :انت تُدير حديقة صغيرة بالقرب من مدين
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :العصور المظلمة - القلعة
STR_SCNR :قلعة كليفسايد
STR_PARK :قلعة كليفسايد
STR_DTLS :الأعضاء المحليون في مجتمع إعادة تمثيل المعركة جادون إلى حد ما بشأن هوايتهم. لقد عهدوا إليك بمهمة بناء مدينة ملاهي بطابع العصور المظلمة على أراضي قلعة كليفسايد.
<Dark Age - Robin Hood>
STR_SCNR :العصور المظلمة - روبن هود
STR_SCNR :غابة شيروود
STR_PARK :غابة شيروود
STR_DTLS :لتحرير الثروة من الأثرياء وتوزيعها على المحتاجين، قررت أنت ورجالك التابعين بناء مدينة ملاهي في غابة شيروود.
<Future - First Encounters>
STR_SCNR :المستقبل - اللقاءات الأولى
STR_SCNR :الروعة خارج الأرض
STR_PARK :الروعة خارج الأرض
STR_DTLS :تم اكتشاف الحياة على كوكب بعيد، قم ببناء متنزه غريب للاستفادة من موجة الاهتمام غير المسبوقة.
<Future - Future World>
STR_SCNR :المستقبل - عالم المستقبل
STR_SCNR :مدينة الجوزاء
STR_PARK :مدينة الجوزاء
STR_DTLS :أظهر رؤيتك المبتكرة والمثالية للمستقبل - ابتكر تصميمًا مستقبليًا للحديقة يتضمن أحدث عوامل الجذب.
<Mythological - Animatronic Film Set>
STR_SCNR :الأساطير - موقع أفلام أنيماترونكس
STR_SCNR :تحفيات أنيماترونكس
STR_PARK :تحفيات أنيماترونكس
STR_DTLS :لقد تم تكليفك بمهمة تشغيل وتحسين مدينة ملاهي موجودة، والتي تم إنشاؤها على مجموعة أفلام قديمة. أنشئ تكريمًا لرسامي تقنية إيقاف الحركة الرائدين الذين قاموا بإحياء الكائنات الأسطورية على الشاشة الفضية لأول مرة.
<Mythological - Cradle of Civilisation>
STR_SCNR :الأساطير - مهد الحضارة
STR_SCNR :جنون الأساطير
STR_PARK :جنون الأساطير
STR_DTLS :أنت تمتلك جزيرة ذات قيمة أثرية معينة. لقد قررت تمويل الحفاظ عليها من خلال بناء مدينة ملاهي على أساس التراث الأسطوري الغني للمنطقة.
<Prehistoric - After the Asteroid>
STR_SCNR :ماقبل التاريخ - بعد النيزك
STR_SCNR :المذبحة الحفرة
STR_PARK :المذبحة الحفرة
STR_DTLS :أنت تمتلك حفرة نيزك قديمة متربة. بروح ريادة الأعمال الحقيقية، قررت إنشاء مدينة ملاهي ذات طابع نايزك وكويكبات وتحويل أرضك التي تبدو بلا قيمة إلى ثروة كبيرة.
<Prehistoric - Jurassic Safari>
STR_SCNR :ماقبل التاريخ - سفاري جوراسي
STR_SCNR :كوسترسورس
STR_PARK :كوسترسورس
STR_DTLS :لقد تم تكليفك بمهمة بناء مدينة ملاهي ذات طابع من العصر الجوراسي. لتحسين وصول الزائرين إلى المعروضات النباتية والحيوانية الغريبة، ستحتاج إلى إنشاء رحلات تجول في الوادي وداخله.
<Prehistoric - Stone Age>
STR_SCNR :ماقبل التاريخ - العصر الحجري
STR_SCNR :الرحلات الحجرية
STR_PARK :الرحلات الحجرية
STR_DTLS :لإحباط مطوري الطرق السريعة والحفاظ على الدوائر الحجرية القديمة الغامضة، ستحتاج إلى إنشاء مدينة ملاهي ذا طابع العصر الحجري وزيادة الأرباح. ومع ذلك، قد يشكل جذب الزوار تحديًا، حيث أن التضاريس غير مضيافة.
<Roaring Twenties - Prison Island>
STR_SCNR :العشرينيات الصاخبة - جزيرة السجن
STR_SCNR :ألكتراز
STR_PARK :ألكتراز
STR_DTLS :جزيرة السجن سيئة السمعة - التي زاد عدد سكانها ذات يوم بالمهربين والمبتزين - معروضة للبيع الآن. لقد قررت تحويلها إلى منطقة جذب سياحي كبرى، والمال ليس مُعضلة
<Roaring Twenties - Schneider Cup>
STR_SCNR :العشرينيات الصاخبة - كأس شنايدر
STR_SCNR :شواطئ شنايدر
STR_PARK :شواطئ شنايدر
STR_DTLS :تقترب الذكرى 75 لفوز جدك بكأس شنايدر في غضون بضع سنوات. سوف تكرم إنجازه من خلال بناء مدينة ملاهي على أساس سباق الطائرات المائية الشهير.
<Roaring Twenties - Skyscrapers>
STR_SCNR :العشرينيات الصاخبة - ناطحات السحب
STR_SCNR :متروبوليس
STR_PARK :متروبوليس
STR_DTLS :أنت تمتلك قطعة أرض فارغة بالقرب من الجزء المنخفض من المدينة. لتحقيق أقصى استفادة من الممتلكات الحضرية الخاصة بك ، قم ببناء مدينة ملاهي مع ناطحات سحاب مستوحاة من العمارة الشاهقة على طراز فن الآرت ديكو في العشرينات.
<Rock 'n' Roll - Flower Power>
STR_SCNR :روك أند رول - قوة الورود
STR_SCNR :وودستوك
STR_PARK :وودستوك
STR_DTLS :يُقام مهرجان موسيقي سنوي كبير على أرضك. أنشئ متنزهًا عصريًا للترفيه عن الجمهور المفعم بالحيوية.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :روك أند رول - روك أند رول
STR_SCNR :إحياء الروك أند رول
STR_PARK :إحياء الروك أند رول
STR_DTLS :شهدت مدينة ملاهي القديمة هذه أيامًا أفضل. ساعد المالك على إضفاء مظهر روك أند رول وحول المكان إلى مكان ناجح.
@ -4487,4 +4463,4 @@ STR_DTLS :يا أطفال! هيا نمرح!{NEWLINE}المؤلفان: Piehead
<Sand Dune>
STR_SCNR :الكثبان الرملية
STR_PARK :الكثبان الرملية
STR_DTLS :باعتبارك مالكًا لمتنزه صغير، فقد اشتريت قطعة أرض كبيرة على طول الشاطئ للتوسع وجذب المزيد من الضيوف لزيارة الكثبان الرملية الجميلة، ولكن احذر: لا يمكنك إزعاج تلك الكثبان الرملية الهشة بيئيًا.{NEWLINE}المؤلف: rbarclay
STR_DTLS :باعتبارك مالكًا لمتنزه صغير، فقد اشتريت قطعة أرض كبيرة على طول الشاطئ للتوسع وجذب المزيد من الضيوف لزيارة الكثبان الرملية الجميلة، ولكن احذر: لا يمكنك إزعاج تلك الكثبان الرملية الهشة بيئيًا.{NEWLINE}المؤلف: rbarclay

View File

@ -186,7 +186,7 @@ STR_0768 :Encarregat de neteja {INT32}
STR_0769 :Mecànic {INT32}
STR_0770 :Guarda de seguretat {INT32}
STR_0771 :Animador {INT32}
STR_0777 :Parc sense nom{POP16}{POP16}
STR_0777 :Parc sense nom
STR_0778 :Senyal
STR_0779 :1
STR_0780 :2
@ -1740,12 +1740,12 @@ STR_2382 :Terra
STR_2383 :Aigua
STR_2384 :{WINDOW_COLOUR_2}El vostre objectiu:
STR_2385 :{BLACK}Cap
STR_2386 :{BLACK}Tenir almenys {COMMA16} visitants al parc al final de {MONTHYEAR}, amb una valoració del parc dalmenys 600.
STR_2386 :{BLACK}Tenir almenys {COMMA32} visitants al parc al final de {MONTHYEAR}, amb una valoració del parc dalmenys 600.
STR_2387 :{BLACK}Aconseguir una valoració del parc dalmenys {POP16}{POP16}{CURRENCY} al final de {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}.
STR_2388 :{BLACK}Divertiu-vos!
STR_2389 :{BLACK}Construïu el millor {STRINGID} que pugueu!
STR_2390 :{BLACK}Tenir 10 tipus diferents de muntanyes russes operant al parc, cadascuna delles amb un valor democió dalmenys 6,00.
STR_2391 :{BLACK}Tenir almenys {COMMA16} visitants al parc. No podeu deixar que la valoració del parc caigui per sota de 700 en cap moment!
STR_2391 :{BLACK}Tenir almenys {COMMA32} visitants al parc. No podeu deixar que la valoració del parc caigui per sota de 700 en cap moment!
STR_2392 :{BLACK}Aconseguir uns ingressos mensuals amb les entrades datraccions dalmenys {POP16}{POP16}{CURRENCY}.
STR_2393 :{BLACK}Tenir 10 tipus diferents de muntanyes russes operant al parc, cadascuna amb una longitud mínima de {LENGTH} i un valor democió dalmenys 7,00.
STR_2394 :{BLACK}Acabar de construir les cinc muntanyes russes que shavien començat a construir al parc, dissenyant-les per a aconseguir un nivell democió dalmenys {POP16}{POP16}{COMMA2DP32} per cada una delles.
@ -2100,39 +2100,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :El fitxer no sha pogut carregar…
STR_3011 :El fitxer conté dades no vàlides.
STR_3012 :Estil cotxes de xoc
STR_3013 :Estil orgue de fira
STR_3014 :Estil fanfàrria romana
STR_3015 :Estil oriental
STR_3016 :Estil marcià
STR_3017 :Estil tambors de la jungla
STR_3018 :Estil egipci
STR_3019 :Estil de joguines
STR_3020 :
STR_3021 :Estil espacial
STR_3022 :Estil de pel·lícula de por
STR_3023 :Estil tecno
STR_3024 :Estil suau
STR_3025 :Estil estival
STR_3026 :Estil aquàtic
STR_3027 :Estil salvatge oest
STR_3028 :Estil juràssic
STR_3029 :Estil rock
STR_3030 :Estil ragtime
STR_3031 :Estil fantàstic
STR_3032 :Estil rock 2
STR_3033 :Estil gèlid
STR_3034 :Estil nevat
STR_3035 :Peça personalitzada 1
STR_3036 :Peça personalitzada 2
STR_3037 :Estil medieval
STR_3038 :Estil urbà
STR_3039 :Estil orgue
STR_3040 :Estil mecànic
STR_3041 :Estil modern
STR_3042 :Estil pirata
STR_3043 :Estil rock 3
STR_3044 :Estil caramel
STR_3045 :Trieu lestil de música que ha de reproduir.
STR_3047 :Les autoritats pertinents no permeten enderrocar o modificar aquesta atracció.
STR_3048 :Les autoritats pertinents no permeten realitzar campanyes de màrqueting.
@ -2359,7 +2326,7 @@ STR_3305 :{WINDOW_COLOUR_2}Ingressos mensuals:
STR_3306 :{WINDOW_COLOUR_2}Beneficis mensuals:
STR_3307 :{WINDOW_COLOUR_2}Longitud mínima:
STR_3308 :{WINDOW_COLOUR_2}Nivell democió:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Atraccions protegides:
@ -2921,7 +2888,7 @@ STR_5755 :Versió de programari incorrecta (el servidor usa {STRING}).
STR_5756 :Contrasenya no vàlida
STR_5757 :Servidor ple
STR_5758 :{OUTLINE}{GREEN}{STRING} sha unit a la partida.
STR_5759 :Es descarrega el mapa… ({INT32}/{INT32} KiB)
STR_5759 :Es descarrega el mapa…
STR_5760 :Dòlars de Hong Kong(HK$)
STR_5761 :Nou dòlar de Taiwan(NT$)
STR_5762 :Iuan xinès (CN¥)
@ -3485,7 +3452,7 @@ STR_6374 :C
STR_6375 :Atracció desconeguda
STR_6376 :{WINDOW_COLOUR_2}Vehicle datracció:{NEWLINE}{BLACK}{STRINGID} per {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Tipus: {BLACK}{STRINGID} per {STRINGID}
STR_6378 :Es va rebent la llista dobjectes: {INT32} / {INT32}
STR_6378 :Es va rebent la llista dobjectes:
STR_6379 :Shan rebut dades no vàlides.
STR_6380 :Actualització disponible!
STR_6381 :Uniu-vos al canal de lOpenRCT2 de Discord!
@ -3698,7 +3665,32 @@ STR_6588 :Gràcies al Herman Riddering per permetrens gravar el 35er Voigt
STR_6589 :Mostra els botons de les finestres a lesquerra
STR_6590 :Mostra els botons de les finestres (com ara el de tancar la finestra) a lesquerra en lloc de mostrar-los a la dreta.
STR_6591 :Lempleat ara mateix arregla una atracció i no sel pot acomiadar.
STR_6592 :Lempleat ara mateix fa una inspecció i no sel pot acomidiar.
STR_6592 :Lempleat ara mateix fa una inspecció i no sel pot acomiadar.
STR_6593 :Trau les tanques del parc
STR_6594 :Inspecció de casella: Commuta la inclinació del mur
STR_6595 :{WINDOW_COLOUR_2}Autor: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Autors: {BLACK}{STRING}
STR_6597 :Paràmetre no vàlid
STR_6598 :Valor fora del rang
STR_6599 :Lelement fantasma no sha trobat
STR_6600 :El globus no sha trobat
STR_6601 :Lempleat no sha trobat
STR_6602 :Latracció no sha trobat
STR_6603 :Lobjecte datracció no sha trobat
STR_6604 :El jugador no sha trobat
STR_6605 :Lelement dentrada no sha trobat
STR_6606 :Lelement de superfície no sha trobat
STR_6607 :Lelement de casella no sha trobat
STR_6608 :Lelement de via no sha trobat
STR_6609 :El bloc de via no sha trobat
STR_6610 :Lelement de camí no sha trobat
STR_6611 :Lelement de mur no sha trobat
STR_6612 :Lelement de text de cartell no sha trobat
STR_6613 :Recarrega lobjecte
STR_6614 :El preu de lentrada al parc no es pot canviar
STR_6615 :La via d'aquesta casella necessita aigua
STR_6616 :Lacció no és vàlida per a aquest tipus dempleat
STR_6617 :No es pot intercanviar lelement de la casella amb si mateix
#############
# Scenarios #
@ -4288,87 +4280,87 @@ STR_DTLS :Construïu les atraccions Six Flags que falten, o creeu els vostres
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Àfrica - Mines de diamants
STR_SCNR :Mines dÀfrica
STR_PARK :Mines dÀfrica
STR_DTLS :Heu heretat una mina de diamants que ja no sexplota, on hi heu trobat un diamant valuós. Voleu invertir els diners del diamant per tal de construir un parc temàtic conegut a tot el món.
<Africa - Oasis>
STR_SCNR :Àfrica - Oasi
STR_SCNR :La follia dels miratges
STR_PARK :La follia dels miratges
STR_DTLS :Sha descobert un oasi que seria una bona localització per a fer-hi un parc. El transport fins loasi ja està preparat.
<Africa - Victoria Falls>
STR_SCNR :Àfrica - Les cascades Victòria
STR_SCNR :A la vora
STR_PARK :A la vora
STR_DTLS :Sha construït una presa que ofereix energia hidroelèctrica barata i abundant per a fer funcionar un parc. Haureu dobtenir una valoració del parc prou alta per a poder retornar el préstec de la presa.
<Antarctic - Ecological Salvage>
STR_SCNR :Antàrtida - Rescat ecològic
STR_SCNR :Aventures gèlides
STR_PARK :Aventures gèlides
STR_DTLS :Lagència mediambiental us ha delegat la tasca de transformar aquesta monstruositat ecològica en forma de refineria de petroli en una atracció turística capdavantera. El terreny és barat però el tipus dinterès del préstec és alt. Podeu vendre els vells edificis per a treuren profit.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Àsia - Millores turístiques a la Gran Muralla
STR_SCNR :La Gran Muralla xinesa
STR_PARK :La Gran Muralla xinesa
STR_DTLS :Les autoritats han decidit millorar les instal·lacions turístiques al voltant de la Gran Muralla construint-hi un parc temàtic. I no us preocupeu pels diners!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Àsia - Recuperació de la costa japonesa
STR_SCNR :Costa dOkinawa
STR_PARK :Costa dOkinawa
STR_DTLS :Un parc sha quedat sense espai. Lúnica opció és construir mar endins, i per això heu demanat un préstec. Les restriccions dalçada dels edificis es deuen al tipus de fonaments i el risc de terratrèmols.
<Asia - Maharaja Palace>
STR_SCNR :Àsia - Palau del maharajà
STR_SCNR :Parc del maharajà
STR_PARK :Parc del maharajà
STR_DTLS :El maharajà us ha destinat aquí per tal que proporcioneu entreteniment a lenorme població local. Construïu un parc inspirat pel palau del maharajà.
<Australasia - Ayers Rock>
STR_SCNR :Austràlia - Uluru
STR_SCNR :Laventura Uluru
STR_PARK :Laventura Uluru
STR_DTLS :Esteu ajudant els aborígens a construir un parc dins del programa de conscienciació cultural. Necessiteu un gran nombre de visitants per a instruir-los en lherència cultural única de la població indígena.
<Australasia - Fun at the Beach>
STR_SCNR :Austràlia - Diversió a la platja
STR_SCNR :Lexplosió de la barbacoa de la platja
STR_PARK :Lexplosió de la barbacoa de la platja
STR_DTLS :El parc marítim dun emprenedor local ha fet fallida. Ja teniu un parc petit que funciona, però ara acabeu de comprar laltre parc. Desenvolupeu un únic parc combinat.
<Europe - European Cultural Festival>
STR_SCNR :Europa - Festival cultural europeu
STR_SCNR :Extravagància europea
STR_PARK :Extravagància europea
STR_DTLS :Us han dut per a dirigir una atracció cultural europea per als turistes i heu daugmentar el nombre de visitants per tal de poder retornar la subvenció de la UE a finals de lactual mandat del parlament europeu.
<Europe - Renovation>
STR_SCNR :Europa - Renovació
STR_SCNR :Des de les cendres
STR_PARK :Des de les cendres
STR_DTLS :Aquest parc vell està en mal estat. Heu guanyat una subvenció per a retornar aquesta àrea desafavorida a la seva antiga glòria! Heu de renovar el parc i retornar la subvenció.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Nord-amèrica - Illa hawaiana llunyana
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :La gent de Hawaii savorreixen només fent surf i busquen alguna cosa més intensa. Heu de construir un parc amb això al cap per tal de mantenir un interès turístic a la zona prou elevat.
<North America - Grand Canyon>
STR_SCNR :Nord-amèrica - El Gran Canyó
STR_SCNR :Calamitats del Canyó
STR_PARK :Calamitats del Canyó
STR_DTLS :Heu de construir un parc en el terreny limitat en les dues bandes daquest tresor natural. Teniu loportunitat de comprar terrenys adjacents dels nadius indis americans. Heu de completar lobjectiu per a alimentar els habitants de la població local.
<North America - Rollercoaster Heaven>
STR_SCNR :Nord-amèrica - Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :Sou un magnat de les finances competent en període sabàtic que desitja usar el seu temps en transformar el parc de la ciutat en el «Rollercoaster Heaven». I els diners no importen!
<South America - Inca Lost City>
STR_SCNR :Sud-amèrica - La ciutat inca perduda
STR_SCNR :La fundació de la ciutat perduda
STR_PARK :La fundació de la ciutat perduda
STR_DTLS :Per a augmentar el turisme local heu de construir un parc que sadigui amb els seus voltants i que compleixi amb les restriccions dalçada.
STR_DTLS :Per a augmentar el turisme local heu de construir un parc que sadigui amb els seus voltants.
<South America - Rain Forest Plateau>
STR_SCNR :Sud-amèrica - Laltiplà de la selva tropical
STR_SCNR :Diversió a la selva
STR_PARK :Diversió a la selva
STR_DTLS :En aquesta preciosa selva tropical, lespai està limitat. Heu damuntegar tot el que pugueu en els llocs sense arbres, per tal de que la indústria local de la fusta continuï sent una alternativa viable al turisme.
<South America - Rio Carnival>
STR_SCNR :Sud-amèrica - Carnaval de Rio
STR_SCNR :Costes del Pão de Açúcar
STR_PARK :Costes del Pão de Açúcar
STR_DTLS :Dirigiu un petit parc prop de Rio, però el banc demana que se li pagui el préstec. Necessiteu augmentar ràpidament la vostra capacitat recaptatòria per a retornar aquest deute inesperat.
@ -4376,72 +4368,72 @@ STR_DTLS :Dirigiu un petit parc prop de Rio, però el banc demana que se li p
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Medieval - Castell
STR_SCNR :Castell del penya-segat
STR_PARK :Castell del penya-segat
STR_DTLS :Els membres locals de la societat de representacions de batalles es prenen la seva afició seriosament. Us han confiat la tasca de construir un parc temàtic de ledat mitjana on hi ha el castell de Cliffside.
<Dark Age - Robin Hood>
STR_SCNR :Medieval - Robin Hood
STR_SCNR :El bosc de Sherwood
STR_PARK :El bosc de Sherwood
STR_DTLS :Amb la intenció de robar als rics i repartir el que aconseguiu entre els pobres, heu decidit que, amb lajuda dels vostres «homes feliços», construireu un parc temàtic al bosc de Sherwood.
<Future - First Encounters>
STR_SCNR :Futurístic - Primers encontres
STR_SCNR :Extravagància Extraterrestre
STR_PARK :Extravagància Extraterrestre
STR_DTLS :Sha descobert vida en un planeta llunyà. Construïu un parc de temàtica alienígena per a recaptar els diners daquesta onada dinterès sense precedent.
<Future - Future World>
STR_SCNR :Futurístic - Món del futur
STR_SCNR :Ciutat Gèmini
STR_PARK :Ciutat Gèmini
STR_DTLS :Mostreu la vostra inventiva visió utòpica del futur. Aixequeu un parc amb dissenys futurístics que incorpori atraccions avantguardistes.
<Mythological - Animatronic Film Set>
STR_SCNR :Mitològic - Plató danimatrònics
STR_SCNR :Relíquies animatròniques
STR_PARK :Relíquies animatròniques
STR_DTLS :Us han encomanat la tasca de fer funcionar i millorar un parc temàtic ja existent que sha construït en un vell plató de cinema. Construïu un tribut als animadors pioners de lstop-motion que van portar per primer cop criatures mítiques a la vida a la gran pantalla.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mitològic - El bressol de la civilització
STR_SCNR :Bogeria mitològica
STR_PARK :Bogeria mitològica
STR_DTLS :Sou el propietari duna illa amb un important valor arqueològic. Heu decidit finançar la seva preservació construint-hi un parc temàtic basat en la rica herència mitològica de làrea.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistòric - Després de lasteroide
STR_SCNR :La matança del cràter
STR_PARK :La matança del cràter
STR_DTLS :Sou el propietari dun vell cràter polsegós causat per un meteorit. Amb el vertader esperit emprenedor, heu decidit construir un parc amb la temàtica de lasteroide i convertir aquestes terres aparentment poc valuoses en una fortuna considerable.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistòric - Safari juràssic
STR_SCNR :Atracciósaurus
STR_PARK :Atracciósaurus
STR_DTLS :Us han assignat la tasca de construir un parc de lera juràssica. Per tal doptimitzar laccés dels visitants a les exhibicions de plantes i animals exòtics, haureu de construir atraccions per tota la vall.
<Prehistoric - Stone Age>
STR_SCNR :Prehistòric - Ledat de pedra
STR_SCNR :Passeig rocós
STR_PARK :Passeig rocós
STR_DTLS :Per a frustrar els plans dels constructors duna autopista i per a ajudar a preservar els misteriosos i antics cercles de pedra, haureu de construir un parc temàtic amb ledat de pedra com a principal motiu i aconseguir treuren beneficis. No obstant, atreure visitants pot suposar un repte, ja que el terreny és un poc inhòspit.
<Roaring Twenties - Prison Island>
STR_SCNR :Roaring Twenties - Lilla presó
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :La infame Illa Presó, la població de la qual fa molt temps creixia gràcies a contrabandistes i estafadors, està en venda. Heu decidit convertir-la en una atracció turística de primer ordre, i no us preocupeu pels diners.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Els «Roaring Twenties» - La Copa Schneider
STR_SCNR :Costa Schneider
STR_PARK :Costa Schneider
STR_DTLS :El 25è aniversari de la victòria del vostre avi a la Copa Schneider serà daquí pocs anys. Lhonorareu construint un parc on la temàtica serà la famosa cursa dhidroavions.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Els «Roaring Twenties» - Gratacels
STR_SCNR :Metròpoli
STR_PARK :Metròpoli
STR_DTLS :Disposeu dun solar buit prop de la zona pobra de la població. Per a treure profit daquests terrenys urbans, construïu un parc en forma de gratacels inspirat en el desorbitat art decó dels anys vint.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Hi ha un gran festival anual de música als teus terrenys. Construïu-hi un parc temàtic a la moda per a mantenir els esperits lliures entretinguts.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Revival del Rock n Roll
STR_PARK :Revival del Rock n Roll
STR_DTLS :Aquest parc temàtic ha vist millors dies. Ajudeu al propietari a donar-li un toc rock n roll retro i convertiu el lloc en un lloc pròsper.

View File

@ -186,7 +186,7 @@ STR_0768 :Údržbář {INT32}
STR_0769 :Mechanik {INT32}
STR_0770 :Hlídač {INT32}
STR_0771 :Maskot {INT32}
STR_0777 :Nepojmenovaný park{POP16}{POP16}
STR_0777 :Nepojmenovaný park
STR_0778 :Nápis
STR_0779 :1.
STR_0780 :2.
@ -1742,12 +1742,12 @@ STR_2382 :Země
STR_2383 :Vodní plochy
STR_2384 :{WINDOW_COLOUR_2}Cíl scénáře:
STR_2385 :{BLACK}žádný
STR_2386 :{BLACK}Mít v parku alespoň {COMMA16} návštěvníků na konci {MONTHYEAR}, s hodnocením parku alespoň 600
STR_2386 :{BLACK}Mít v parku alespoň {COMMA32} návštěvníků na konci {MONTHYEAR}, s hodnocením parku alespoň 600
STR_2387 :{BLACK}Dosáhnout hodnoty parku alespoň {POP16}{POP16}{CURRENCY} na konci {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Příjemnou zábavu!
STR_2389 :{BLACK}Postav ten nejlepší {STRINGID}!
STR_2390 :{BLACK}Mít v parku 10 druhů kolotočů v provozu, každý s hodnotou zábavnosti alespoň 6.00
STR_2391 :{BLACK}Mít v parku alespoň {COMMA16} návštěvníků a zároveň nikdy nenechat hodnocení parku spadnout pod 700!
STR_2391 :{BLACK}Mít v parku alespoň {COMMA32} návštěvníků a zároveň nikdy nenechat hodnocení parku spadnout pod 700!
STR_2392 :{BLACK}Dosáhnout měsíčního příjmu z lístků na atrakce alespoň {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}{BLACK}Mít v parku 10 druhů kolotočů v provozu, každý s hodnotou zábavnosti alespoň 7.00 a délkou alespoň {LENGHT}
STR_2394 :{BLACK}Dokončit všech 5 rozestavěných horských drah tak, aby každá dosahovala hodnocení vzrušení alespoň {POP16}{POP16}{COMMA2DP32}
@ -2102,39 +2102,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Nepodařilo se načíst soubor…
STR_3011 :Soubor obsahuje neplatná data
STR_3012 :Autodrom
STR_3013 :Tržnice
STR_3014 :Římská fanfára
STR_3015 :Orient
STR_3016 :Marťan
STR_3017 :Jungle bubny
STR_3018 :Egypt
STR_3019 :Země hraček
STR_3020 :
STR_3021 :Vesmír
STR_3022 :Horor
STR_3023 :Techno
STR_3024 :Mírná hudba
STR_3025 :Letní hudba
STR_3026 :Vodní
STR_3027 :Divoký západ
STR_3028 :Jurský styl
STR_3029 :Rock
STR_3030 :Ragtime
STR_3031 :Fantasy
STR_3032 :Rock 2
STR_3033 :Led
STR_3034 :Sníh
STR_3035 :Vlastní hudba 1
STR_3036 :Vlastní hudba 2
STR_3037 :Středověk
STR_3038 :Urban
STR_3039 :Varhany
STR_3040 :Mechanika
STR_3041 :Moderní
STR_3042 :Piráti
STR_3043 :Rock 3
STR_3044 :Sladkosti
STR_3045 :Vyberte styl muziky, která bude hrát
STR_3047 :Místní správa zakazuje úpravy a zrušení této atrakce
STR_3048 :Reklamní kampaně zakázány místní správou
@ -2361,7 +2328,7 @@ STR_3305 :{WINDOW_COLOUR_2}Měsíční příjem:
STR_3306 :{WINDOW_COLOUR_2}Měsíční zisk:
STR_3307 :{WINDOW_COLOUR_2}Minimální délka:
STR_3308 :{WINDOW_COLOUR_2}Nadšení:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Atrakce, které je nutno zachovat:
@ -2920,7 +2887,7 @@ STR_5755 :Nesprávná verze hry (Server používá {STRING})
STR_5756 :Špatné heslo
STR_5757 :Server je plný
STR_5758 :{OUTLINE}{GREEN}Hráč {STRING} se připojil do hry
STR_5759 :Stahování mapy … ({INT32} / {INT32}) KiB
STR_5759 :Stahování mapy …
STR_5760 :Hongkongský dolar (HK$)
STR_5761 :Tchajwanský dolar (NT$)
STR_5762 :Čínský jüan (CN¥)
@ -3483,7 +3450,7 @@ STR_6374 :K
STR_6375 :Neznámá atrakce
STR_6376 :{WINDOW_COLOUR_2}Vozy atrakce:{NEWLINE}{BLACK}{STRINGID} pro {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Typ: {BLACK}{STRINGID} pro {STRINGID}
STR_6378 :Stahování seznamu objektů: {INT32} / {INT32}
STR_6378 :Stahování seznamu objektů:
STR_6379 :Stažena neplatná data
STR_6380 :Dostupná aktualizace!
STR_6381 :Připojte se na OpenRCT2 Discord!
@ -3770,87 +3737,87 @@ STR_DTLS :Postavte chybějící Six Flags atrakce, nebo vytvořte své vlastn
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - African Diamond Mine
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :Zdědili jste diamantový důl mimo provoz a nalezli hodnotný diamant. Rozhodli jste se tedy investovat peníze do stavby světoznámého zábavního parku.
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :Byla objevena pouštní oáza, která nabízí nádherné místo pro zábavní park. Přeprava do oázy zajištěna.
<Africa - Victoria Falls>
STR_SCNR :Africa - Victoria Falls
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :Postavená přehrada zajišťuje velké množství levné hydroelektrické energie pro váš zábavní park. Dosáhněte vysokého hodnocení parku, abyste snáze splatili půjčku na přehradu.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctic - Ecological Salvage
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :Obrátili se na vás ochranáři životního prostředí s prosbou, abyste přeměnili neekologickou rafinerii na vysoce navštěvovanou turistickou destinací. Pozemky jsou levné, ale úrok z půjčky vysoký. Zkuste prodat staré budovy.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Great Wall of China Tourism Enhancement
STR_SCNR :Great Wall of China
STR_PARK :Great Wall of China
STR_DTLS :Místní správa se rozhodla podpořit cestovní ruch a vytvořit Velkou zeď stavbou přilehlého zábavního parku. Peníze nehrají roli.
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Japanese Coastal Reclaim
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :Současnému zábavnímu parku došlo místo. Jedinou možností je začít stavět na moři, takže budete potřebovat velkou půjčku. V této oblasti jsou častá zemětřesení, proto nesmíte stavět vysoké budovy.
<Asia - Maharaja Palace>
STR_SCNR :Asia - Maharaja Palace
STR_SCNR :Park Maharaja
STR_PARK :Park Maharaja
STR_DTLS :Mahárádža vás vybral, abyste přinesli zábavu pro místní velkou populaci. Postavte zábavní park inspirovaný Mahárádžovým palácem
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :Pomáháte domorodcům postavit zábavní park pro upozornění na jejich kulturu. Musíte poučit co nejvíce lidí o unikátní kultuře domorodých obyvatel.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia - Fun at the Beach
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :Místní mořský svět bankrotoval a vy jste ho odkoupili. Vám už ale jeden malý park patří - postavte tedy ze dvou malých parků jeden obrovský!
<Europe - European Cultural Festival>
STR_SCNR :Europe - European Cultural Festival
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :Byli jste přizváni, abyste převzali kontrolu nad Evropskou Kulturní Návštěvnickou Atrakcí a musíte zajistit nárůst návštěvnosti, jinak nebudete moci zaplatit za EU dotaci do konce vládního období.
<Europe - Renovation>
STR_SCNR :Europe - Renovation
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :Evropská Unie vám dala grant, abyste zajistil obnovu starého, neudržovaného zábavního parku a přinesl zpět jeho tehdejší slávu. Musíte celý park renovovat a splatit grant.
<N. America - Extreme Hawaiian Island>
STR_SCNR :N. America - Extreme Hawaiian Island
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :Havajané jsou znudění ze surfování a chtějí zažít něco adrenalinovějšího. Postavte zábavní park a nezapomeňte na to - pomůže vám to s dosažením dobrého hodnocení parku.
<North America - Grand Canyon>
STR_SCNR :North America - Grand Canyon
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :Omezený terén vás nutí vybudovat zábavní park po stranách národní památky. Můžete ale od Indiánů nakupovat pozemky. Abyste si udrželi hodnocení místní správy, splňte cíl!
<North America - Rollercoaster Heaven>
STR_SCNR :North America - Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :Jste úspěšný obchodní magnát, který si přeje přetvořit městský park v místo nebeských horských drah. Peníze nehrají žádnou roli!
<South America - Inca Lost City>
STR_SCNR :South America - Inca Lost City
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :Abyste zvýšili počet místních turistů, musíte postavit zábavní park, který zapadá do okolí a nemá žádné výškové budovy.
<South America - Rain Forest Plateau>
STR_SCNR :South America - Rain Forest Plateau
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :Prostor je limitovaný drahocenným deštným pralesem - musíte toho namáčknout co nejvíce do dosavadních pozemků, abyste mohli konkurovat místním dřevorubeckým společnostem.
<South America - Rio Carnival>
STR_SCNR :South America - Rio Carnival
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :Provozujete malý zábavní park poblíž Ria, ale banka chce vrátit půjčku. Musíte rychle zvýšit vaše příjmy, abyste mohli dluh splatit.
@ -3858,72 +3825,72 @@ STR_DTLS :Provozujete malý zábavní park poblíž Ria, ale banka chce vrát
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Dark Age - Castle
STR_SCNR :Cliffside Castle
STR_PARK :Cliffside Castle
STR_DTLS :Členové místní skupiny pro rekonstrukci historických bitev berou své hobby trochu moc vážně. Svěřili vám stavbu starověkého zábavního parku na území Cliffside Castle.
<Dark Age - Robin Hood>
STR_SCNR :Dark Age - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :Abyste mohli brát bohatým a dávat chudým, rozhodli jste se postavit zábavní park v Sherwood Forest.
<Future - First Encounters>
STR_SCNR :Future - First Encounters
STR_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Byl objeven život na vzdálené planetě. Postavte mimozemsky zaměřený zábavní park, abyste se svezli na vlně nového nepředvídaného zájmu.
<Future - Future World>
STR_SCNR :Future - Future World
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Ukažte svou vynalézavou, utopickou vizi budoucnosti - přijďte s futuristickým zábavním parkem, který zahrnuje ty nejnovější atrakce.
<Mythological - Animatronic Film Set>
STR_SCNR :Mythological - Animatronic Film Set
STR_SCNR :Animatronic Antics
STR_PARK :Animatronic Antics
STR_DTLS :Byl vám zadán úkol správy a vylepšování stávajícího zábavního parku, který byl postaven na starém filmařském místě. Vybudujte odkaz průkopníkům-animátorům, kteří poprvé přinesli mýtické postavy k životu na stříbrném plátně.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythological - Cradle of Civilisation
STR_SCNR :Mythological Madness
STR_PARK :Mythological Madness
STR_DTLS :Vlastníte ostrov velké archeologické hodnoty. Rozhodli jste se podpořit jeho zachování vybudováním zábavního parku založeném na mytologii tohoto místa.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistoric - After the Asteroid
STR_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :Vlastníte velký kráter a jakožto opravdový průkopník jste se rozhodl vybudovat zábavní park ve stylu asteroidů a přeměnit tuto zdánlivě bezcennou půdu v profitující a vyhledávanou oblast.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistoric - Jurassic Safari
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :Byli jste zaúkolováni stavbou zábavního parku ve stylu období Jura. Pro zlepšení přístupu návštěvníků k exotickým rostlinám a zvířatům budete muset postavit mosty do a přes údolí.
<Prehistoric - Stone Age>
STR_SCNR :Prehistoric - Stone Age
STR_SCNR :Rocky Rambles
STR_PARK :Rocky Rambles
STR_DTLS :Abyste se vyhnuli stavbě dálnice a zachovali mysteriózní prehistorické kamenné kruhy, budete muset postavit zábavní park ve stylu doby kamenné a začít vydělávat. Nicméně přilákat návštěvníky bude těžké, protože terén je opravdu nehostinný.
<Roaring Twenties - Prison Island>
STR_SCNR :Roaring Twenties - Prison Island
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :Nechvalně proslavená ostrovní věznice - jejíž populace jednou překypovala pašeráky a vyděrači - je nyní na prodej. Rozhodli jste se jí přetvořit na velkou turistickou atrakci - na peníze berte ohled!
<Roaring Twenties - Schneider Cup>
STR_SCNR :Roaring Twenties - Schneider Cup
STR_SCNR :Schneider Shores
STR_PARK :Schneider Shores
STR_DTLS :75. leté výročí výhry Schneider Cup vašeho dědečka se blíží a zbývá už jen pár let. Poctíte jeho úspěch stavbou zábavního parku založeném na proslulém závodu hydroplánů.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Roaring Twenties - Skyscrapers
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :Vlastníte volný pozemek v městské oblasti téměř bez růstu. Abyste vymačkali co nejvíce z vaší nemovitosti, postavíte mrakodrap-zábavní park inspirovaný architekturou dvacátých let.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Obrovský každoroční hudební festival se bude konat na vašem pozemku. Postavte pořádný park, abyste zabavili návštěvníky.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Rock n Roll Revival
STR_PARK :Rock n Roll Revival
STR_DTLS :Tento stárnoucí zábavní park už viděl lepší dny. Pomozte majiteli dát parku retro rock n roll vzhled a udělat z něho vyhledávané místo.

View File

@ -96,6 +96,7 @@ STR_0091 :Ukendt Forlystelse (59)
STR_0092 :LIM Accelereret Rutschebane
STR_0093 :Hybrid Rutschebane
STR_0094 :Enkelt skinde rutchebane
STR_0095 :Alpin rutchebane
STR_0096 :Klassisk træ rutsjebane
STR_0512 :En kompakt rutschebane med en spiral stigning og bløde, snoede fald.
STR_0513 :En loopende rutschebane hvor passagerne er i en stående position
@ -178,13 +179,14 @@ STR_0600 :Selvkørende togvogne kører igennem en sen snoet bane af spor
STR_0602 :Rutsjebanetog accelereres ud af stationen af lineære induktionsmotorer for at suse gennem snoede inversioner
STR_0603 :En rutsjebane i træ stil, med stål spor, Med stejle fald og hurtige sving.
STR_0604 :Gæster sider i en enkelt række, på et smalt monorail spor, imens de suser igennem skarpe sving ,snoninger og hurtige vridninger.
STR_0605 :Ryttere kælker ned ad en bugtende stålbane og bremser for at kontrollere deres hastighed
STR_0606 :En ældre stils trærutsjebane med en hurtig og ujævn tur med masser af luft tid, laterale G'er, og designet til at føles som ude-af-kontrol
STR_0767 :Gæst {INT32}
STR_0768 :Handymand {INT32}
STR_0769 :Mekaniker {INT32}
STR_0770 :Sikkerhedsvagt {INT32}
STR_0771 :Entertainer {INT32}
STR_0777 :Unavngivet park{POP16}{POP16}
STR_0777 :Unavngivet park
STR_0778 :Skilt
STR_0779 :1.
STR_0780 :2.
@ -1735,12 +1737,12 @@ STR_2382 :Land
STR_2383 :Vand
STR_2384 :{WINDOW_COLOUR_2}Dit mål:
STR_2385 :{BLACK}Ingen
STR_2386 :{BLACK}At have mindst {COMMA16} gæster i parken, ved udgangen af {MONTHYEAR}, og med en park vurdering på mindst 600
STR_2386 :{BLACK}At have mindst {COMMA32} gæster i parken, ved udgangen af {MONTHYEAR}, og med en park vurdering på mindst 600
STR_2387 :{BLACK}At opnå en Parkværdi på mindst {POP16}{POP16}{CURRENCY} ved udgangen af {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Hav det sjovt!
STR_2389 :{BLACK}Byg den bedste {STRINGID} du kan!
STR_2390 :{BLACK}At have 10 forskellige typer rutschebaner i gang i parken på samme tid, Hver med en spændings vurdering over 6.00
STR_2391 :{BLACK}At have mindst {COMMA16} gæster i parken. Du må ikke lade park vurderingen flade under 700 på noget tidspunkt!
STR_2391 :{BLACK}At have mindst {COMMA32} gæster i parken. Du må ikke lade park vurderingen flade under 700 på noget tidspunkt!
STR_2392 :{BLACK}At opnå en månedlig indkomst fra forlystelser på mindst {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}At have 10 forskellige typer rutschebaner i gang i parken på samme tid, hver med en minimums længde på {LENGTH}, og en spændings vurdering på mindst 7.00
STR_2394 :{BLACK}At færdiggøre alle 5 af de delvist færdige byggede rutschebaner i denne park, design dem til at have at opnå en spændings vurdering på mindst {POP16}{POP16}{COMMA2DP32} hver
@ -1958,7 +1960,7 @@ STR_2749 :Mit nye scenarie
STR_2750 :Flyt alle enheder til toppen
STR_2751 :Flyt alle enheder til bunden
STR_2752 :Ryd græs
STR_2753 :Slået græs
STR_2753 :Slå græs
STR_2754 :Vand planter
STR_2755 :Reparer hærværk
STR_2756 :Fjern affald
@ -2095,39 +2097,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Kan ikke indlæse fil…
STR_3011 :Filen indeholder ugyldige data
STR_3012 :Radiobil musik stil
STR_3013 :Karnevalsmusik stil
STR_3014 :Romersk fanfare stil
STR_3015 :Orientalsk stil
STR_3016 :Maritim stil
STR_3017 :Jungletrommer stil
STR_3018 :Egyptisk stil
STR_3019 :Legetøjs land stil
STR_3020 :
STR_3021 :Rum stil
STR_3022 :Gyser stil
STR_3023 :Techno stil
STR_3024 :Rolig stil
STR_3025 :Sommer stil
STR_3026 :Vand stil
STR_3027 :Western stil
STR_3028 :Jurassic stil
STR_3029 :Rock stil
STR_3030 :Ragtime stil
STR_3031 :Fantasy stil
STR_3032 :Rock stil 2
STR_3033 :Is stil
STR_3034 :Sne stil
STR_3035 :Valgfrit musik 1
STR_3036 :Valgfrit musik 2
STR_3037 :Middelalder stil
STR_3038 :Undergrunds stil
STR_3039 :Orgel stil
STR_3040 :Mekanisk stil
STR_3041 :Moderne stil
STR_3042 :Pirat stil
STR_3043 :Rock stil 3
STR_3044 :Slik stil
STR_3045 :Vælg musikstilen der skal spilles
STR_3047 :Lokal myndigheder forbyder nedrivning eller ændringer af denne forlystelse
STR_3048 :Marketingkampagner forbydes af de lokale myndigheder
@ -2354,7 +2323,7 @@ STR_3305 :{WINDOW_COLOUR_2}Månedsinkomst:
STR_3306 :{WINDOW_COLOUR_2}Månedsprofit:
STR_3307 :{WINDOW_COLOUR_2}Minimum længde:
STR_3308 :{WINDOW_COLOUR_2}Spændings vurdering:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}forlystelser/attraktioner under bevaringsordre:
@ -2914,7 +2883,7 @@ STR_5755 :Forkert spil version (Serveren kører med {STRING})
STR_5756 :Ugyldig kode
STR_5757 :Serveren er fyldt
STR_5758 :{OUTLINE}{GREEN}{STRING} har sluttet sig til spillet
STR_5759 :Henter kortet … ({INT32} / {INT32}) KB
STR_5759 :Henter kortet …
STR_5760 :Hong Kong Dollars (HK$)
STR_5761 :New Taiwan Dollar (NT$)
STR_5762 :Chinese Yuan (CN¥)
@ -3278,8 +3247,8 @@ STR_6133 :Adgang til forlystelser og sceneri, der endnu ikke er opfundet
STR_6134 :Ryd sceneri
STR_6135 :Klienten sendte en ugyldig anmodning
STR_6136 :Serveren sendte en ugyldig anmodning
STR_6137 :OpenRCT2, en gratis, open source klon af Roller Coaster Tycoon 2.
STR_6138 :OpenRCT2 er et samarbejde imellem mange forfattere, en komplet liste kan findes i “contributors.md”. Du kan finde flere oplysninger på http://github.com/OpenRCT2/OpenRCT2
STR_6137 :OpenRCT2, en gratis, open source genskabelse af Roller Coaster Tycoon 2.
STR_6138 :OpenRCT2 er et samarbejde imellem mange forfattere, en komplet liste kan findes under “bidragudere” knappen. Du kan finde flere oplysninger på http://github.com/OpenRCT2/OpenRCT2
STR_6139 :Alle produkt- og firmanavne tilhører deres respektive indehavere. Brug af dem indebærer ikke nogen tilknytning til eller godkendelse af dem.
STR_6140 :Ændringslog…
STR_6141 :RCT1 bund værktøjslinje
@ -3478,7 +3447,7 @@ STR_6374 :R
STR_6375 :Ukendt forlystelse
STR_6376 :{WINDOW_COLOUR_2}Vogn:{NEWLINE}{BLACK}{STRINGID} til {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Type: {BLACK}{STRINGID} til {STRINGID}
STR_6378 :Henter objektliste: {INT32} / {INT32}
STR_6378 :Henter objektliste:
STR_6379 :Modtog ugyldig data
STR_6380 :Opdatering tilgængelig!
STR_6381 :Deltag i OpenRCT2 Discord gruppe!
@ -3585,14 +3554,17 @@ STR_6482 :Gennemsigtigheds Indstillinger
STR_6483 :Åben gennemsigtigheds indstillinger
STR_6484 :Skift gennemsigtig vegetation
STR_6485 :Skift gennemsigtig køretøjer
STR_6486 :Skift gennemsigtig gæster
STR_6487 :Skift gennemsigtig personale
STR_6486 :Skift skjul gæster
STR_6487 :Skift skjul personale
STR_6488 :{RED}Gæster klager over længden af køerne i din park.{NEWLINE}Overvej at forkorte problematiske køer eller øge forlystelsernes gennemstrømning.
STR_6489 :Fejl: Inkompatibel Park Version
STR_6490 :Advarsel: Semi-kompatibel Park Version
STR_6491 :Denne park blev gemt i en nyere version af OpenRCT2. Parken er v{INT32} og kræver mindst v{INT32}. Du benytter v{INT32}
STR_6492 :Denne park er gemt i en ældre version af OpenRCT2, og kan ikke åbnes med denne version af OpenRCT2. Parken er v{INT32}.
STR_6493 :Denne park blev gemt i en nyere version af OpenRCT2, nogle data kan gå tabt. Parken er gemt i v{INT32}. Du benytter v{INT32}
STR_6494 :Gruppér efter type
STR_6495 :Gruppérer efter forlystelsestyper efter type istedet for at vise hver vogn for seperat.
STR_6496 :{WINDOW_COLOUR_2}{STRINGID}
STR_6497 :Klik på et felt for at vise dets felt elementer.{NEWLINE}Ctrl + Klik et felt element for at vælge det direkte.
STR_6498 :Aktiver for at fastholde kvadratisk kortfacon.
STR_6499 :Køretøjstype understøttes ikke af spor design formatet
@ -3625,7 +3597,7 @@ STR_6525 :Genindlæs alle aktiver i spillet med de aktiverede materiel pakker
STR_6526 :(basis grafik, musik og lydeffekter)
STR_6527 :Konkurrencer
STR_6528 :Ugyldig spor parameter!
STR_6529 :Invalid farve skema parameter!
STR_6529 :Ugyldig farve skema parameter!
STR_6530 :User Created Expansion Set
STR_6531 :The Time Machine
STR_6532 :Katys Dreamworld
@ -3633,6 +3605,93 @@ STR_6533 :{WINDOW_COLOUR_2}Spændings Faktor: {BLACK}-{COMMA16}%
STR_6534 :{WINDOW_COLOUR_2}Intensitets Faktor: {BLACK}-{COMMA16}%
STR_6535 :{WINDOW_COLOUR_2}Kvalme Faktor: {BLACK}-{COMMA16}%
STR_6536 :Denne park var gemt i en senere version af OpenRCT2. Parken var gemt i v{INT32}, du benytter v{INT32}.
STR_6537 :Tillad almindelige stier som køområde
STR_6538 :Viser almindelige gangstier i rullemenuen Køer i sti vinduet.
STR_6539 :Bremser lukket
STR_6540 :{WINDOW_COLOUR_2}Særlig tak til følgende virksomheder for at tillade deres lighed:
STR_6541 :{WINDOW_COLOUR_2}Rocky Mountain Construction Group, Josef Wiegand GmbH & Co. KG
STR_6542 :Bidragydere
STR_6543 :Bidragydere…
STR_6544 :Lån kan ikke være negativ!
STR_6545 :Brug RCT1 renteberegning
STR_6546 :Brug renteberegningsalgoritmen for RollerCoaster Tycoon 1, som brugte en fast procentsats på ca. 1,33%.
STR_6547 :Alt Sceneri
STR_6548 :Vis rækværk ved kryds
STR_6549 :Kompatibilitetsobjekter kan ikke vælges!
STR_6550 :Denne post er inkluderet for bagudkompatibilitet, med gamle eller beskadigede genstande. Det kan ikke vælges, kun fravælges.
STR_6551 :Militærgrøn
STR_6552 :Honningdug
STR_6553 :Solbrun
STR_6554 :Rødbrun
STR_6555 :Koral rosa
STR_6556 :Skov grøn
STR_6557 :Chartreuse
STR_6558 :Jæger grøn
STR_6559 :Celadon
STR_6560 :Limegrøn
STR_6561 :Sepia
STR_6562 :Fersken
STR_6563 :Singrøn
STR_6564 :Blågrøn
STR_6565 :Havskum grøn
STR_6566 :Violet
STR_6567 :Lavendel
STR_6568 :Pastel orange
STR_6569 :Dybt vand
STR_6570 :Pastel pink
STR_6571 :Umber
STR_6572 :Beige
STR_6573 :Usynlig
STR_6574 :Tomrum
STR_6575 :Tillad specielle farveskemaer
STR_6576 :Tilføjer specielle farver til rullemenuen Farver
STR_6577 :Blokbremse hastighed
STR_6578 :Indstil hastighedsgrænse for blokbremser. I bloksektionstilstand er tilstødende bremser med en langsommere hastighed forbundet med blokbremsen.
STR_6579 :Blokbremser indstilles til standardhastighed, når de gemmes som spordesign
STR_6580 :Nulstil
STR_6581 :Er du sikker på, at du vil nulstille alle genvejstaster på denne fane?
STR_6582 :Åbn vinduet med tastaturgenveje
STR_6583 :{WINDOW_COLOUR_2}Baglænskørende tog
STR_6584 :Vælg for at køre tog baglæns
STR_6585 :Kan ikke foretage ændringer…
STR_6586 :OpenRCT2
STR_6587 :OpenRCT2 Titelmelodi er et værk af Allister Brimble,{NEWLINE}licenseret CC BY-SA 4.0.
STR_6588 :Tak til Herman Riddering for at give os mulighed for at optage 35er Voigt.
STR_6589 :Vis vinduesknapperne til venstre
STR_6590 :Vis vinduesknapperne (f.eks. for at lukke vinduet) til venstre for titellinjen i stedet for til højre.
STR_6591 :Medarbejder er i øjeblikket ved at ordne en tur og kan ikke fyres.
STR_6592 :Medarbejder inspicerer i øjeblikket en forlystelse og kan ikke fyres.
STR_6593 :Fjern parkhegn
STR_6594 :Fliseinspektør: Skift væghældning
STR_6595 :{WINDOW_COLOUR_2}Forfatter: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Forfattere: {BLACK}{STRING}
STR_6597 :Ugyldig parameter
STR_6598 :Værdi uden for grænseområde
STR_6599 :Spøgelse element ikke fundet
STR_6600 :Ballon ikke fundet
STR_6601 :Ansat ikke fundet
STR_6602 :Forlystelse ikke fundet
STR_6603 :Forlystes objekt enhed ikke fundet
STR_6604 :Spiller ikke fundet
STR_6605 :Indgangs element ikke fundet
STR_6606 :Overflade element ikke fundet
STR_6607 :Flise element ikke fundet
STR_6608 :Spor element ikke fundet
STR_6609 :Spor blok ikke fundet
STR_6610 :Sti element ikke fundet
STR_6611 :Væg element ikke fundet
STR_6612 :Banner element ikke fundet
STR_6613 :Genindlæs objekt
STR_6614 :Kan ikke ændre parkens entré pris
STR_6615 :Spor på dette felt kræver vand
STR_6616 :Handlingen er ugyldig for denne medarbejdertype
STR_6617 :Kan ikke bytte felt element med sig selv
STR_6618 :Objektet kan ikke begrænses eller afgrænses…
STR_6619 :Objekttype kan ikke begrænses!
STR_6620 :Objektet blev ikke fundet!
STR_6621 :Begræns
STR_6622 :Begræns objekt til scenarieeditoren og sandkassetilstanden.
#############
# Scenarios #
@ -4076,16 +4135,6 @@ STR_SCNR :Fort Anachronism
STR_PARK :Fort Anachronism
STR_DTLS :
###########
# Scenery #
###########
## Start OpenRCT2 Official
[TTPIRF05]
STR_NAME :Tag
## End OpenRCT2 Official
###############################################################################
## RCT2 Scenarios
###############################################################################
@ -4223,87 +4272,87 @@ STR_DTLS :Byg de manglende Six Flags forlystelser, eller opret dine egne desi
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Afrika - Afrikansk Diamant Mine
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :Du arvede en nedlagt diamantmine og fandt en værdifuld diamant. Du beslutter dig for at investere de penge til at bygge en verdensberømt forlystelsespark.
<Africa - Oasis>
STR_SCNR :Afrika - Oase
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :En ørken oase er blevet opdaget og ville være en smuk beliggenhed for en park. Der er sørget for transport til oasen.
<Africa - Victoria Falls>
STR_SCNR :Afrika - Victoria Falls
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :En dæmning er blevet bygget, som tilbyder rigelige, billige vandkraft til at drive en park. Du er nødt til at nå en høj park værdi for at hjælpe med tilbagebetalingen af lånet til dæmningen.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarktis - Økologisk Genanvendelse
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :Miljøagenturet har henvendt sig til dig for at omdanne et gammelt olieraffinaderi økologisk øjebæ til en top turistattraktion. Jord er billigt, men lånerenterne er høje. Du kan sælge de gamle bygninger til genanvendelse.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asien - Den Kinesiske Mur Turistforbedring
STR_SCNR :Great Wall of China
STR_PARK :Great Wall of China
STR_DTLS :Myndighederne har besluttet at forbedre turismen omkring Den Kinesiske Mur ved at bygge en forlystelsespark på den tilstødende jord. Penge er ikke noget problem!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asien - Japansk kystområde
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :En eksisterende park er løbet tør for plads. Din eneste mulighed er at bygge ud i havet, og så har du taget et lån. Højdebegrænsninger på din bygning håndhæves på grund af fundamenter og jordskælvsrisiko.
<Asia - Maharaja Palace>
STR_SCNR :Asien - Maharaja Palads
STR_SCNR :Park Maharaja
STR_PARK :Park Maharaja
STR_DTLS :Du er blevet bestilt af Maharajaen til at bringe underholdning til den store lokale befolkning. Byg en park inspireret af Maharajas palads.
<Australasia - Ayers Rock>
STR_SCNR :Australasien - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :Du hjælper aboriginal folk, til at bygge en park, som en del af en kulturel bevidsthed program. Du skal få et stort antal gæster, til at uddanne dem i den unikke arv af det oprindelige folk.
<Australasia - Fun at the Beach>
STR_SCNR :Australasien - Sjov på Stranden
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :En lokal iværksætters havlivs park er gået fallit. Du driver allerede en lille park og køber den anden park fra byggefirmaet. Udvikl den til en stor kombineret park.
<Europe - European Cultural Festival>
STR_SCNR :Europa - Europæisk kulturfestival
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :De er blevet hentet ind for at overtage, en europæisk kulturel turistattraktion, og skal øge antallet af gæster, for at kunne betale EU-tilskuddet tilbage, inden udgangen af den nuværende valgperiode i Europa-Parlamentet.
<Europe - Renovation>
STR_SCNR :Europa - Renovation
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :En gammel park er gået i forfald. De får et EU-tilskud til at bringe dette ugunstigt stillede område, tilbage til sin tidligere herlighed! Du er nødt til at renovere parken, og tilbagebetale tilskuddet.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Nordamerika - Ekstrem Hawaii-ø
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :Befolkningen i Hawaii er træt af surfing, og er på udkig efter noget mere intenst. Du skal bygge en park, med dette i tankerne for at holde områdets turistattraktion rating i top.
<North America - Grand Canyon>
STR_SCNR :Nordamerika - Grand Canyon
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :Du er nødt til at bygge en park på begrænset jord, på hver side af denne naturlige skat - du har mulighed for at købe nabojord fra indianerne. Du er nødt til at fuldføre målet om at opretholde den lokale bys befolkning.
<North America - Rollercoaster Heaven>
STR_SCNR :Nordamerika - Rutshebane Himmel
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :Du er en succesfuld forretningsmagnat igang med flere sabbatår, der ønsker at bruge denne tid på at omdanne byparken til Rollercoaster Heaven. Penge er ikke noget problem!
<South America - Inca Lost City>
STR_SCNR :Sydamerika - Inka-rigets fortabte by
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :For yderligere at øge den lokale turisme skal du konstruere en park, der er i harmoni med sine omgivelser, og har højdebegrænsninger.
STR_DTLS :For yderligere at øge den lokale turisme skal du konstruere en park, der er i harmoni med sine omgivelser.
<South America - Rain Forest Plateau>
STR_SCNR :Sydamerica - Regnskovs Plateau
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :Pladsen er begrænset i den dyrebare regnskov - du skal proppe så meget som muligt ind i den eksisterende rydning for at give et levedygtigt alternativ til den lokale træindustri.
<South America - Rio Carnival>
STR_SCNR :Sydamerica - Karneval i Rio
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :Du driver en lille park nær Rio, men banken har indkaldt dit lån. Du er nødt til hurtigt at øge din indtjeningsevne, til at tilbagebetale denne uventede gæld.
@ -4311,72 +4360,72 @@ STR_DTLS :Du driver en lille park nær Rio, men banken har indkaldt dit lån.
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Middelalder - Borgen
STR_SCNR :Cliffside Castle
STR_PARK :Cliffside Castle
STR_DTLS :Lokale medlemmer af kamp re-enactment samfundet er temmelig alvorligt om deres hobby. De har betroet dig opgaven med at bygge en mørk tidsalder forlystelsespark på grunden ved Cliffside Castle.
<Dark Age - Robin Hood>
STR_SCNR :Middelalder - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :For at befri rigdom fra de rige og distribuere den til de trængende, har du og dine lystige svende besluttet at bygge en forlystelsespark i Sherwood Skoven.
<Future - First Encounters>
STR_SCNR :Fremtiden - Første Kontakt
STR_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Der er fundet liv på en fjern planet. Byg en Rumalien forlystelsespark til at lave penge på den hidtil usete bølge af interesse.
<Future - Future World>
STR_SCNR :Fremtiden - Fremtidsverden
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Vis din opfindsomme, utopiske vision om fremtiden - kom op med et futuristisk parkdesign, der inkorporerer state-of-the-art attraktioner.
<Mythological - Animatronic Film Set>
STR_SCNR :Mytologisk - Animatronic Film Sæt
STR_SCNR :Animatronic Antics
STR_PARK :Animatronic Antics
STR_DTLS :Du har fået til opgave at drive og forbedre en eksisterende forlystelsespark, som er bygget på et gammelt filmsæt. Byg en hyldest til de banebrydende stop-motion animatorer, der først bragte mytiske væsner til live på biograflærredet.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mytologisk - Civilisationens vugge
STR_SCNR :Mythological Madness
STR_PARK :Mythological Madness
STR_DTLS :Du ejer en ø af særlig arkæologisk værdi. Du har besluttet at finansiere dens bevarelse, ved at bygge en forlystelsespark baseret på områdets rige mytologiske arv.
<Prehistoric - After the Asteroid>
STR_SCNR :Forhistorisk - Efter Asteroiden
STR_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :Du ejer et støvet gammelt meteorkrater. I den sande iværksætterånd har du besluttet at konstruere en asteroide forlystelsespark og konvertere dit tilsyneladende værdiløse land til en betydelig formue.
<Prehistoric - Jurassic Safari>
STR_SCNR :Præhistorisk - Jurassic Safari
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :Du har fået til opgave at bygge en Jurassic æra forlystelsespark. For at optimere dine besøgendes adgang til de eksotiske plante- og dyreudstillinger skal du bygge en bygning, der går over og ind i dalen.
<Prehistoric - Stone Age>
STR_SCNR :Præhistorisk - Stenalderen
STR_SCNR :Rocky Rambles
STR_PARK :Rocky Rambles
STR_DTLS :For at forpurre motorvejsudviklerne og bevare de mystiske gamle stencirkler skal du konstruere en stenalder forlystelsespark og lave en fortjeneste. Det kan dog være en udfordring at tiltrække besøgende, da terrænet er en smule ugæstfrit.
<Roaring Twenties - Prison Island>
STR_SCNR :Brølende Tyvere - Fængselsøen
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :Den berygtede Prison Island - hvis befolkning engang husede organiseret kriminalitet og hjemmebrændere - er nu til salg. Du har besluttet at konvertere det til en top turistattraktion, og penge er ikke noget problem.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Brølende Tyvere - Schneider Cup
STR_SCNR :Schneider Shores
STR_PARK :Schneider Shores
STR_DTLS :T75-årsdagen for din bedstefars Schneider Cup-sejr kommer op om et par år. Du vil ære hans præstation ved at bygge en forlystelsespark baseret på den berømte vandflyver racer.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Brølende Tyvere - Skyskrabere
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :Du ejer en tom grund i nærheden af den lave del af byen. For at presse mest muligt ud af din byejendom skal du bygge en skyskraber forlystelsespark inspireret af den skyhøje art deco arkitektur i tyverne.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :En stor årlig musikfestival finder sted på dit land. Byg en hip forlystelsespark for at holde det frisindede publikum underholdt.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock og Rul
STR_SCNR :Rock n Roll Revival
STR_PARK :Rock n Roll Revival
STR_DTLS :Denne aldrende forlystelsespark har set bedre dage. Hjælp ejeren med at give det en retro rock n roll makeover og gøre stedet til et vellykket sted.
@ -4387,3 +4436,106 @@ STR_DTLS :Denne aldrende forlystelsespark har set bedre dage. Hjælp ejeren m
STR_SCNR :Panda World
STR_PARK :Panda World
STR_DTLS :Tilføj flere forlystelser, og tiltræk flere besøgende til denne panda-tema park
<Tycoon Park>
STR_SCNR :Tycoon Park
STR_PARK :Tycoon Park
STR_DTLS :
###
<UCES Halloween>
STR_SCNR :Cemetery Ridge
STR_PARK :Cemetery Ridge
STR_DTLS :Dette er Halloween, UCES Halloween, græskar skriger i nattens mulm og mørke! Denne kirkegård er i problemer, og det er op til dig at redde den, mens du lader de døde hvile i fred! Kan du holde spøgelserne i deres grave og give de besøgende kuldegysninger?{NEWLINE}Forfatter: Squid
###############################################################################
## UCES: The Time Machine (2003)
###############################################################################
<Lighthouse of Alexandria by Katatude for UCES>
STR_SCNR :The Lighthouse of Alexandria
STR_PARK :The Lighthouse of Alexandria
STR_DTLS :Alexander byggede byen; Grækere, romere, egyptere satte deres præg. Men den største ære var et vidunder i den antikke verden - fyret. Besøg og lav en park!{NEWLINE}Forfatter: Katatude
<Cleveland's Luna Park>
STR_SCNR :Luna Park, Cleveland
STR_PARK :Luna Park
STR_DTLS :Som den var på åbningsdagen - 18. Maj 1905.{NEWLINE}Forfatter: Aetherwave
<Mount Vesuvius 1700 A.D. by Katatude for UCES>
STR_SCNR :Mount Vesuvius
STR_PARK :Mount Vesuvius
STR_DTLS :Pompeji og Herculaneum blev begravet af Mt. Vesuvius i 79 e.Kr. Besøg udgravningerne og byg en park!{NEWLINE}Forfatter: Katatude
<The Sandbox by Katatude for UCES>
STR_SCNR :The Sandbox
STR_PARK :The Sandbox
STR_DTLS :Hvad alle vil have - en sandkasse! Så grib din lille spand og skovl og byg en park!{NEWLINE}Forfatter: Katatude
<Niagara Falls & Gorge by Katatude for UCES>
STR_SCNR :Niagara Falls & Gorge
STR_PARK :Niagara Falls
STR_DTLS :American Falls, Bridal Falls & Canadian Horseshoe Falls på Niagara Frontier, 1850.{NEWLINE}Forfatter: Katatude
<Rocky Mountain Miners>
STR_SCNR :Rocky Mountain Miners
STR_PARK :Rocky Mountain Miners
STR_DTLS :Et stenskred beskadigede din jernbane. Dine arbejdere er gået på guldjagt. Er der guld i rutsjebaner?{NEWLINE}Forfattere: Squid, Buckone, Fossil
<The Time Machine by Katatude for UCES>
STR_SCNR :The Time Machine
STR_PARK :The Time Machine
STR_DTLS :Tidsmaskinen. Byg med på farten når du vil, hvor du vil. Evigheden venter. Alt er relativt.{NEWLINE}Forfatter: Katatude
<Tower of Babel>
STR_SCNR :Tower of Babel
STR_PARK :Tower of Babel
STR_DTLS :Hovsa! Se, hvor tidsmaskinen tog os til nu! Hvor forsvandt alle hen?{NEWLINE}Forfatter: Fossil
<Transformation>
STR_SCNR :Transformation
STR_PARK :Transformation
STR_DTLS :Vi har ventet dig…{NEWLINE}Forfatter: Fossil
<Urbis Incognitus>
STR_SCNR :Urbis Incognitus
STR_PARK :Urbis Incognitus
STR_DTLS :Romerne er trætte af kedelige gladiatorkampe. Giv dem mere spænding, lav en romersk by om til den største forlystelsespark nogensinde!{NEWLINE}Forfatter: Kaffe
###############################################################################
## UCES: Katys Dreamworld (2003)
###############################################################################
<Beneath the Christmas Tree by Katatude for UCES>
STR_SCNR :Beneath the Christmas Tree
STR_PARK :Winter Wonderland
STR_DTLS :Mor byggede denne scene under vores træ. Nu vil hun have lavet en park i den! Kan du hjælpe?{NEWLINE}Forfatter: Katatude
<Bigrock Blast>
STR_SCNR :Bigrock Blast
STR_PARK :Bigrock Blast
STR_DTLS :Efter en eksplosion på Bigrock Mining Co. er befolkningen i Bigrock nødt til at bygge en forlystelsespark for at holde deres by i live.{NEWLINE}Forfattere: rbarclay & buckone
<Camp Mockingbird for UCES by Katatude>
STR_SCNR :Camp Mockingbird
STR_PARK :Camp Mockingbird
STR_DTLS :Kun 500$ om ugen til denne sommerlejr! Bryd din sparegris op, og hav det derefter sjovt og byg en park.{NEWLINE}Forfatter: Katatude
<Choo Choo Town>
STR_SCNR :Choo-Choo Town
STR_PARK :Choo-Choo Town
STR_DTLS :Mor! Far! Jeg vil til Fut-Fut by!{NEWLINE}Forfatter: Fossil
<Dragon Islands>
STR_SCNR :Dragon Islands
STR_PARK :Dragon Islands
STR_DTLS :Drageøen? Jeg er ikke sikker på at jeg vil derhen…{NEWLINE}Forfatter: Fossil
<Kiddy Karnival II>
STR_SCNR :Kiddie Karnival II
STR_PARK :Kiddie Karnival
STR_DTLS :Hej Unger, Lad os have det sjovt!{NEWLINE}Forfattere: Piehead & Fossil
<Sand Dune>
STR_SCNR :Sand Dune
STR_PARK :Sand Dune
STR_DTLS :Som ejer af en lille park, købte du et stort stykke jord langs stranden for at udvide og tiltrække flere gæster til at besøge de smukke klitter, men pas på, du må ikke forstyrre de økologisk skrøbelige klitter.{NEWLINE}Forfatter: rbarclay

View File

@ -98,6 +98,7 @@ STR_0093 :Hybridachterbahn
STR_0094 :Einschienenachterbahn
STR_0095 :Alpenachterbahn
STR_0096 :Klassische Holzachterbahn
STR_0097 :Klassische Stehachterbahn
STR_0512 :Eine kompakte Stahlachterbahn mit einem Spirallifthügel und Wagen mit Sitzen in einer Reihe
STR_0513 :Eine Looping-Achterbahn, bei der sich die Fahrgäste in einer stehenden Position befinden
STR_0514 :Die unterhalb der Schiene aufgehängten Züge schwingen in Kurven seitlich aus.
@ -147,7 +148,7 @@ STR_0560 :
STR_0561 :
STR_0562 :Angetriebene Wagen fahren auf einer mehrstöckigen Strecke mit gruseliger Landschaft und Spezialeffekten
STR_0563 :Die Fahrgäste sitzen in komfortablen Wagen mit einfachen Beckenhalterungen, in denen sie gigantische, gemäßigte Gefälle erleben, aber auch viel Zeit oben „in der Luft“ verbringen
STR_0564 :Diese Holzachterbahn ist schnell, rauh, laut und gibt einem das Gefühl, außer Kontrolle zu sein, wobei man häufig „in der Luft“ ist
STR_0564 :Diese Holzachterbahn ist schnell, rau, laut und gibt einem das Gefühl, außer Kontrolle zu sein, wobei man häufig „in der Luft“ ist
STR_0565 :Eine einfache Holzachterbahn mit nur leichten Gefällen und Kurven, bei der die Wagen nur mit Hilfe von seitlichen Führungsrollen und der Schwerkraft auf der Strecke gehalten werden
STR_0566 :Voneinander unabhängige Achterbahnwagen rasen auf einer engen Zickzack-Strecke mit scharfen Kurven und kurzen, starken Gefällen
STR_0567 :Die Passagiere befinden sich in Sitzen, die an beiden Seiten der Bahn hängen, auf der sie über Kopf steile Gefälle hinunterrasen und verschiedene Inversionsfiguren erleben
@ -177,16 +178,17 @@ STR_0598 :Umgekehrte Achterbahnzüge werden aus der Station beschleunigt und
STR_0599 :Eine kompakte Achterbahn mit unabhängigen Wagen und gemäßigten, sich windenden Gefällen
STR_0600 :Angetriebene Minenzüge fahren auf einer gemäßigten und verwundenen Strecke
STR_0602 :Achterbahnzüge werden aus der Station mit Hilfe von linearen Induktionsmotoren beschleunigt und rasen durch gewundene Überkopfteile
STR_0603 :Eine Achterbahn im Holzstil mit einer Stahlschiene, die steile Abfahrten und Inversionen ermöglicht.
STR_0604 :Die Fahrgäste fahren in einer Einzelreihe auf einer engen Einschienenstrecke, wobei sie durch enge Inversionen und Richtungswechsel rasen.
STR_0605 :Die Fahrgäste rodeln eine sich schlängelnde Stahlbahn hinunter und bremsen, um ihre Geschwindigkeit zu regulieren.
STR_0606 :Eine Holzachterbahn nach älterer Art. Sie ist schnell, rauh, laut und gibt einem das Gefühl, außer Kontrolle zu sein, wobei man gelegentlich seitlichen Gs ausgesetzt und häufig „in der Luft“ ist
STR_0603 :Eine Achterbahn im Holzstil mit einer Stahlschiene, die steile Abfahrten und Inversionen ermöglicht
STR_0604 :Die Fahrgäste fahren in einer Einzelreihe auf einer engen Einschienenstrecke, wobei sie durch enge Inversionen und Richtungswechsel rasen
STR_0605 :Die Fahrgäste rodeln eine sich schlängelnde Stahlbahn hinunter und bremsen, um ihre Geschwindigkeit zu regulieren
STR_0606 :Eine Holzachterbahn nach älterer Art. Sie ist schnell, rau, laut und gibt einem das Gefühl, außer Kontrolle zu sein, wobei man gelegentlich seitlichen Gs ausgesetzt und häufig „in der Luft“ ist
STR_0607 :Eine intensive Stahl-Looping-Achterbahn älterer Art, bei der die Fahrer im Stehen fahren
STR_0767 :Besucher {INT32}
STR_0768 :Parkpfleger {INT32}
STR_0769 :Mechaniker {INT32}
STR_0770 :Aufseher {INT32}
STR_0771 :Animateur {INT32}
STR_0777 :Unbenannter Park{POP16}{POP16}
STR_0777 :Unbenannter Park
STR_0778 :Schild
STR_0779 :1.
STR_0780 :2.
@ -1059,7 +1061,7 @@ STR_1669 :{WINDOW_COLOUR_2}Zufriedenheit: {BLACK}{COMMA16}%
STR_1670 :{WINDOW_COLOUR_2}Besucher gesamt: {BLACK}{COMMA32}
STR_1671 :{WINDOW_COLOUR_2}Gesamtgewinn: {BLACK}{CURRENCY2DP}
STR_1672 :Bremsen
STR_1673 :Drehkontrolle umschalt.
STR_1673 :Drehkontrolle umschalten
STR_1674 :Bremsgeschwindigkeit
STR_1675 :{POP16}{VELOCITY}
STR_1676 :Geschwindigkeitsgrenze{NEWLINE}für Bremsen einstellen
@ -1738,12 +1740,12 @@ STR_2382 :Land
STR_2383 :Wasser
STR_2384 :{WINDOW_COLOUR_2}Ihr Ziel:
STR_2385 :{BLACK}Keins
STR_2386 :{BLACK}Mindestens {COMMA16} Parkbesucher bis {MONTHYEAR} und eine Parkbewertung von mindestens 600 zu haben
STR_2386 :{BLACK}Mindestens {COMMA32} Parkbesucher bis {MONTHYEAR} und eine Parkbewertung von mindestens 600 zu haben
STR_2387 :{BLACK}Einen Verkehrswert von mindestens {POP16}{POP16}{CURRENCY} zu erreichen bis {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Viel Spaß!
STR_2389 :{BLACK}Bauen Sie Ihre(n) beste(n) {STRINGID}!
STR_2390 :{BLACK}Mindestens 10 verschiedene Achterbahntypen in Ihrem Park zu betreiben, wobei jeder einen Nervenkitzelwert von mindestens 6,00 aufweisen muss
STR_2391 :{BLACK}Mindestens {COMMA16} Parkbesucher zu erreichen. Die Parkbewertung darf zu keinem Zeitpunkt unter 700 fallen!
STR_2391 :{BLACK}Mindestens {COMMA32} Parkbesucher zu erreichen. Die Parkbewertung darf zu keinem Zeitpunkt unter 700 fallen!
STR_2392 :{BLACK}Monatliche Einkünfte durch Fahrttickets von mindestens {POP16}{POP16}{CURRENCY} zu erreichen
STR_2393 :{BLACK}Mindestens 10 verschiedene Achterbahntypen in Ihrem Park zu betreiben, wobei jeder eine Mindestlänge von {LENGTH} und einen Nervenkitzelwert von mindestens 7,00 aufweisen muss
STR_2394 :{BLACK}Alle 5 bereits teilweise gebauten Achterbahnen fertigzustellen, damit sie jeweils einen Nervenkitzelwert von {POP16}{POP16}{COMMA2DP32} erzielen
@ -2099,39 +2101,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Datei kann nicht geladen werden …
STR_3011 :Datei enthält ungültige Daten
STR_3012 :Autoscooter-Beat-Stil
STR_3013 :Jahrmarktsorgelstil
STR_3014 :Römischer Fanfarenstil
STR_3015 :Orientstil
STR_3016 :Mars-Stil
STR_3017 :Dschungeltrommelnstil
STR_3018 :Ägyptischer Stil
STR_3019 :Spielzeuglandstil
STR_3020 :
STR_3021 :Weltraumstil
STR_3022 :Horrorstil
STR_3023 :Techno-Stil
STR_3024 :Gemäßigter Stil
STR_3025 :Sommerstil
STR_3026 :Wasserstil
STR_3027 :Wildwest-Stil
STR_3028 :Jurassic-Stil
STR_3029 :Rock-Stil
STR_3030 :Ragtime-Stil
STR_3031 :Fantasy-Stil
STR_3032 :Rock-Stil 2
STR_3033 :Eis-Stil
STR_3034 :Schnee-Stil
STR_3035 :Eigene Musik 1
STR_3036 :Eigene Musik 2
STR_3037 :Mittelalterstil
STR_3038 :Stadtstil
STR_3039 :Orgelstil
STR_3040 :Maschinenstil
STR_3041 :Moderner Stil
STR_3042 :Piratenstil
STR_3043 :Rock-Stil 3
STR_3044 :Candyland-Stil
STR_3045 :Wählen Sie den Musikstil aus
STR_3047 :Die örtlichen Behörden verbieten den Abriss oder Änderungen an dieser Bahn
STR_3048 :Marketingkampagnen von den örtlichen Behörden verboten
@ -2358,7 +2327,7 @@ STR_3305 :{WINDOW_COLOUR_2}Monatliche Einkünfte:
STR_3306 :{WINDOW_COLOUR_2}Monatlicher Gewinn:
STR_3307 :{WINDOW_COLOUR_2}Mindestlänge:
STR_3308 :{WINDOW_COLOUR_2}Nervenkitzelwert:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Attraktionen unter Beibehaltungsauftrag:
@ -2915,7 +2884,7 @@ STR_5755 :Inkompatible Softwareversion (Server benutzt {STRING})
STR_5756 :Falsches Passwort
STR_5757 :Server voll
STR_5758 :{OUTLINE}{GREEN}{STRING} hat das Spiel betreten
STR_5759 :Karte herunterladen … ({INT32} / {INT32}) KiB
STR_5759 :Karte herunterladen …
STR_5760 :Hongkong-Dollar (HK$)
STR_5761 :Taiwan-Dollar (NT$)
STR_5762 :Chines. Yuan (CN¥)
@ -3326,7 +3295,7 @@ STR_6199 :Datum setzen
STR_6200 :Datum zurücksetzen
STR_6201 :{MONTH}
STR_6202 :Stil des virtuellen Bodens:
STR_6203 :Um vertikales Platzieren von Elementen zu vereinfachen, wird ein virtueller Boden eingeblendet, wenn Strg oder Shift gehalten wird
STR_6203 :Um vertikales Platzieren von Elementen zu vereinfachen, wird ein virtueller Boden eingeblendet, wenn die Strg- oder Umschalttaste gehalten wird.
STR_6215 :Konstruktion
STR_6216 :Betrieb
STR_6217 :Bahn- / Streckenverfügbarkeit
@ -3477,7 +3446,7 @@ STR_6374 :A
STR_6375 :Unbekannte Attraktion
STR_6376 :{WINDOW_COLOUR_2}Fahrzeug:{NEWLINE}{BLACK}{STRINGID} für {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Typ: {BLACK}{STRINGID} für {STRINGID}
STR_6378 :Objektliste empfangen: {INT32}/{INT32}
STR_6378 :Objektliste empfangen:
STR_6379 :Ungültige Daten empfangen
STR_6380 :Update verfügbar!
STR_6381 :OpenRCT2-Discord beitreten!
@ -3595,7 +3564,7 @@ STR_6493 :Dieser Park wurde in einer späteren Version von OpenRCT2 gespeiche
STR_6494 :Nach Fahrgeschäftstyp gruppieren
STR_6495 :Fahrgeschäfte nach Fahrgeschäftstyp gruppieren, anstatt jedes Fahrzeug separat anzuzeigen.
STR_6496 :{WINDOW_COLOUR_2}{STRINGID}
STR_6497 :Klicken Sie auf eine Kachel, um ihre Kachelelemente anzuzeigen.{NEWLINE}Strg + Klick auf Kachel, um sie direkt auszuwählen.
STR_6497 :Klicken Sie auf eine Kachel, um ihre Kachelelemente anzuzeigen.{NEWLINE}Strg + Klick auf ein Kachelelement, um es direkt auszuwählen.
STR_6498 :Aktivieren, um quadratische Kartenform beizubehalten.
STR_6499 :Fahrzeugtyp nicht vom Streckendesignformat unterstüzt
STR_6500 :Streckenelemente nicht vom Streckendesignformat unterstüzt
@ -3613,7 +3582,7 @@ STR_6511 :Null-G-Rolle (rechts)
STR_6512 :Große Null-G-Rolle (l.)
STR_6513 :Große Null-G-Rolle (r.)
STR_6514 :Ungültige Höhe!
STR_6515 :{BLACK}RollerCoaster Tycoon 1 nicht verknüpft - Es werden Fallback-Bilder verwendet.
STR_6515 :{BLACK}RollerCoaster Tycoon 1 nicht verknüpft. Es werden Fallback-Bilder verwendet.
STR_6516 :Eines oder mehrere der hinzugefügten Objekte benötigen eine Verknüpfung mit RollerCoaster Tycoon 1 für eine korrekte Anzeige. Es werden Fallback-Bilder verwendet.
STR_6517 :Eines oder mehrere Objekte in diesem Park benötigen eine Verknüpfung mit RollerCoaster Tycoon 1 für eine korrekte Anzeige. Es werden Fallback-Bilder verwendet.
STR_6518 :{BLACK}Zeigen Sie auf ein Szenario, um seine Beschreibung und sein Ziel zu sehen. Klicken Sie, um das Spiel zu beginnen.
@ -3636,7 +3605,7 @@ STR_6534 :{WINDOW_COLOUR_2}Intensitätsfaktor: {BLACK}-{COMMA16}%
STR_6535 :{WINDOW_COLOUR_2}Übelkeitsfaktor: {BLACK}-{COMMA16}%
STR_6536 :Dieser Park wurde in einer späteren Version von OpenRCT2 gespeichert. Der Park wurde in v{INT32} gespeichert. Sie benutzen im Moment v{INT32}.
STR_6537 :Normale Fußwege als Warteschlangen erlauben
STR_6538 :Zeigt reguläre Pfade in der Warteschlangenliste im Fußwegfenster an
STR_6538 :Zeigt normale Fußwege in der Warteschlangenliste im Fußwegfenster an
STR_6539 :Bremse geschlossen
STR_6540 :{WINDOW_COLOUR_2}Besonderen Dank an die folgenden Unternehmen für die Gestattung der Verwendung ihrer Abbilder:
STR_6541 :{WINDOW_COLOUR_2}Rocky Mountain Construction Group, Josef Wiegand GmbH & Co. KG
@ -3650,7 +3619,7 @@ STR_6548 :Geländer an Kreuzung zeigen
STR_6549 :Kompabilitätsobjekte können nicht ausgewählt werden!
STR_6550 :Dieser Eintrag wird für die Abwärtskompabilität mit alten oder beschädigten Objekten bereitgestellt. Er kann nicht ausgewählt werden. Er kann nur abgewählt werden.
STR_6551 :Armeegrün
STR_6552 :Honigtau
STR_6552 :Honigmelone
STR_6553 :Loh
STR_6554 :Kastanienrot
STR_6555 :Koralle
@ -3693,6 +3662,55 @@ STR_6591 :Der Mitarbeiter repariert gerade ein Fahrgeschäft und kann deshalb
STR_6592 :Der Mitarbeiter inspiziert gerade ein Fahrgeschäft und kann deshalb nicht entlassen werden.
STR_6593 :Parkzäune entfernen
STR_6594 :Kachelinspektor: Wandneigung umschalten
STR_6595 :{WINDOW_COLOUR_2}Autor: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Autoren: {BLACK}{STRING}
STR_6597 :Ungültiger Parameter
STR_6598 :Wert liegt außerhalb des zulässigen Bereichs
STR_6599 :Geisterelement konnte nicht gefunden werden
STR_6600 :Ballon konnte nicht gefunden werden
STR_6601 :Mitarbeiter konnte nicht gefunden werden
STR_6602 :Fahrgeschäft/Attraktion konnte nicht gefunden werden
STR_6603 :Attraktionseingang konnte nicht gefunden werden
STR_6604 :Spieler konnte nicht gefunden werden
STR_6605 :Eingangselement konnte nicht gefunden werden
STR_6606 :Oberflächenelement konnte nicht gefunden werden
STR_6607 :Kachelelement konnte nicht gefunden werden
STR_6608 :Streckenelement konnte nicht gefunden werden
STR_6609 :Streckenblock konnte nicht gefunden werden
STR_6610 :Wegelement konnte nicht gefunden werden
STR_6611 :Wandelement konnte nicht gefunden werden
STR_6612 :Bannerelement konnte nicht gefunden werden
STR_6613 :Objekt neu laden
STR_6614 :Parkeintrittsgeld kann nicht geändert werden
STR_6615 :Streckenabschnitt auf dieser Kachel benötigt Wasser
STR_6616 :Aktion ungültig für diesen Personaltyp
STR_6617 :Kachelelement kann nicht mit sich selbst vertauscht werden
STR_6618 :Objekt kann weder eingeschränkt werden noch kann die Einschränkung zurückgenommen werden …
STR_6619 :Objekttyp kann nicht eingeschränkt werden!
STR_6620 :Objekt nicht gefunden!
STR_6621 :Einschränken
STR_6622 :Objekt auf den Szenario-Editor und dem Sandkastenmodus einschränken
STR_6623 :Geben Sie „help“ ein, um eine Liste der verfügbaren Befehle zu erhalten. Geben Sie „hide“ ein, um die Konsole auszublenden.
STR_6624 :Kachelinspektor: Elemente sortieren
STR_6625 :Ungültige Farbe
STR_6626 :Animation ist gespiegelt
STR_6627 :Streckengeschwindigkeit zu hoch!
STR_6628 :Kann nur auf der Kante von Fußwegen platziert werden!
STR_6629 :Symbolleisten-Schaltflächen horizontal zentriert ausrichten
STR_6630 :Mit dieser Einstellung werden die Schaltflächen der Symbolleiste horizontal in der Mitte des Bildschirms ausgerichtet. Normalerweise sind sie in den Ecken angeordnet.
STR_6631 :Laden 
STR_6632 :Überprüfen von Objektdateien 
STR_6633 :Überprüfen von Szenario-Dateien 
STR_6634 :Überprüfen von Streckenentwurfsdateien 
STR_6635 :Überprüfen von Medienpaketen 
STR_6636 :Überprüfen der Titelsequenzen 
STR_6637 :Laden der Titelsequenzen 
STR_6638 :Vergrößerte Benutzeroberfläche
STR_6639 :Verändert die Benutzeroberfläche so, dass sie besser für die Touch-Bedienung geeignet ist
STR_6640 :Medienpakete bearbeiten 
STR_6641 :Lade-/Fortschrittsfenster
STR_6642 :{STRING} ({COMMA32} / {COMMA32})
STR_6643 :{STRING} ({COMMA32} / {COMMA32} KiB)
#############
# Scenarios #
@ -4283,87 +4301,87 @@ STR_DTLS :Bauen Sie die fehlenden Six-Flags-Bahnen, oder erstellen Sie Ihre e
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Afrika - Diamantenmine
STR_SCNR :Die Minen Afrikas
STR_PARK :Die Minen Afrikas
STR_DTLS :Sie haben eine aufgegebene Diamantenmine geerbt und finden einen wertvollen Diamanten. Sie beschließen, das Geld in einen weltberühmten Themenpark zu investieren.
<Africa - Oasis>
STR_SCNR :Afrika - Oase
STR_SCNR :Fata Morgana
STR_PARK :Fata Morgana
STR_DTLS :In der Wüste wurde eine Oase entdeckt, die der ideale Standort für einen Vergnügungspark wäre. Transportmittel zur Oase wurden zur Verfügung gestellt.
<Africa - Victoria Falls>
STR_SCNR :Afrika - Victoria-Wasserfälle
STR_SCNR :Über die Kante
STR_PARK :Über die Kante
STR_DTLS :Ein Damm wurde gebaut und erzeugt große Mengen an billigem Strom, mit dem Sie einen Park betreiben können. Sie müssen allerdings einen hohen Park-Verkehrswert erreichen, um das Darlehen für den Damm zurückzahlen zu können.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarktis - Umweltschutzmaßnahmen
STR_SCNR :Abenteuer im Eis
STR_PARK :Abenteuer im Eis
STR_DTLS :Sie sollen eine alte Ölraffinerie, die den Umweltschützern ein Dorn im Auge ist, in eine erstklassige Touristenattraktion verwandeln. Das Land ist günstig, doch die Darlehenszinsen sind hoch. Sie können aber die alten Gebäude verkaufen.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asien - Große Mauer - Tourismusprojekt
STR_SCNR :Große Mauer von China
STR_PARK :Große Mauer von China
STR_DTLS :Die Behörden haben entschieden, noch mehr Touristen zur Großen Mauer zu locken, und wollen auf einem angrenzenden Gebiet einen Themenpark errichten. Geld spielt keine Rolle
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asien - Japanische Landgewinnung
STR_SCNR :Okinawa-Küste
STR_PARK :Okinawa-Küste
STR_DTLS :In einem vorhandenen Park herrscht Platzmangel, Sie müssen also dem Meer neues Land abringen. Dafür haben Sie ein Darlehen aufgenommen. Die maximale Bauhöhe ist aufgrund des instabilen Untergrunds und der Erdbeben beschränkt.
<Asia - Maharaja Palace>
STR_SCNR :Asien - Maharadschas Palast
STR_SCNR :Maharadscha-Park
STR_PARK :Maharadscha-Park
STR_DTLS :Der Maharadscha hat Sie damit beauftragt, die örtlichen Massen zu unterhalten. Errichten Sie einen Park, der seine Inspiration aus dem Palast des Maharadschas bezieht.
<Australasia - Ayers Rock>
STR_SCNR :Australasien - Ayers Rock
STR_SCNR :Ayers-Abenteuer
STR_PARK :Ayers-Abenteuer
STR_DTLS :Sie helfen den Aborigines, im Rahmen eines Programms zur Kulturförderung einen Vergnügungspark zu bauen. Sie müssen eine große Besucherzahl erreichen, um den Leuten das einzigartige kulturelle Erbe der Aborigines nahe zu bringen.
<Australasia - Fun at the Beach>
STR_SCNR :Australasien - Spaß am Strand
STR_SCNR :Strand-Party
STR_PARK :Strand-Party
STR_DTLS :Der Meerespark eines örtlichen Unternehmers hat Bankrott gemacht. Sie besitzen bereits einen kleinen Park und möchten den anderen dazukaufen. Um die benötigten Gelder aufzutreiben, müssen Sie zunächst Ihren kleinen Park ausbauen.
<Europe - European Cultural Festival>
STR_SCNR :Europa - Europäisches Kulturfestival
STR_SCNR :Europäisches Happening
STR_PARK :Europäisches Happening
STR_DTLS :Sie wurden engagiert, um eine kulturelle Besucherattraktion in Europa zu leiten, und müssen die Anzahl der Gäste steigern, um die EU-Subventionen bis zum Ende der Amtsperiode des aktuellen Europäischen Parlaments zurückzahlen zu können.
<Europe - Renovation>
STR_SCNR :Europa - Renovierung
STR_SCNR :Wie Phönix aus der Asche
STR_PARK :Wie Phönix aus der Asche
STR_DTLS :Ein alter Vergnügungspark befindet sich in desolatem Zustand. Sie erhalten EU-Fördermittel, um dem verwahrlosten Gebiet wieder zu seinem früheren Glanz zu verhelfen. Sie müssen den Park renovieren und die Fördermittel zurückzahlen.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Nordamerika - Hawaii Extrem
STR_SCNR :Verrücktes Waikiki
STR_PARK :Verrücktes Waikiki
STR_DTLS :Die Bevölkerung von Hawaii hat das Surfen satt und sehnt sich nach etwas Abwechslung. Sie müssen einen Park bauen, um sie bei Laune zu halten und gleichzeitig dafür sorgen, dass die Insel für Touristen attraktiv bleibt.
<North America - Grand Canyon>
STR_SCNR :Nordamerika - Grand Canyon
STR_SCNR :Canyon-Katastrophen
STR_PARK :Canyon-Katastrophen
STR_DTLS :Sie müssen neben diesem Naturwunder einen Vergnügungspark errichten. Es herrscht Platzmangel, Sie können aber Land von den Indianern kaufen. Haben Sie Erfolg, sichern Sie damit der örtlichen Bevölkerung den Lebensunterhalt.
<North America - Rollercoaster Heaven>
STR_SCNR :Nordamerika - Achterbahnhimmel
STR_SCNR :Achterbahnhimmel
STR_PARK :Achterbahnhimmel
STR_DTLS :Sie sind ein erfolgreicher Geschäftsmann, der sich eine vierjährige Auszeit genommen hat und nun einen Vergnügungspark errichten möchte, bei dem Geld keine Rolle spielt.
<South America - Inca Lost City>
STR_SCNR :Südamerika - Verlorene Stadt der Inka
STR_SCNR :Gründer der Verlorenen Stadt
STR_PARK :Gründer der Verlorenen Stadt
STR_DTLS :Um der örtlichen Tourismusindustrie den Rücken zu stärken, müssen Sie einen Vergnügungspark konstruieren, der sich harmonisch in die Umgebung einfügt - Höhenbegrenzungen inklusive.
STR_DTLS :Um der örtlichen Tourismusindustrie den Rücken zu stärken, müssen Sie einen Vergnügungspark konstruieren, der sich harmonisch in die Umgebung einfügt.
<South America - Rain Forest Plateau>
STR_SCNR :Südamerika - Regenwaldplateau
STR_SCNR :Rummel im Regenwald
STR_PARK :Rummel im Regenwald
STR_DTLS :Platz ist Mangelware im kostbaren Regenwald - Sie müssen so viele Attraktionen wie möglich auf der existierenden Lichtung unterbringen, um eine rentable Alternative zur örtlichen Holzindustrie zu schaffen.
<South America - Rio Carnival>
STR_SCNR :Südamerika - Karneval in Rio
STR_SCNR :Zauberei am Zuckerhut
STR_PARK :Zauberei am Zuckerhut
STR_DTLS :Sie leiten einen kleinen Vergnügungspark in der Nähe von Rio. Als die Bank plötzlich das Ihnen gewährte Darlehen zurückfordert, müssen Sie einen Weg finden, Ihre Einnahmen rasch zu steigern, um diese unerwarteten Schulden zurückzuzahlen.
@ -4371,72 +4389,72 @@ STR_DTLS :Sie leiten einen kleinen Vergnügungspark in der Nähe von Rio. Als
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Finsteres Mittelalter - Schloss
STR_SCNR :Felsenschloss
STR_PARK :Felsenschloss
STR_DTLS :Einige Mitglieder der Gesellschaft zur Nachstellung von Schlachten nehmen ihr Hobby ziemlich ernst. Sie haben Sie damit beauftragt, einen Freizeitpark Finsteres Mittelalter auf den Gründen des Felsenschlosses zu bauen.
<Dark Age - Robin Hood>
STR_SCNR :Finsteres Mittelalter - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :Um die Reichen finanziell zu erleichtern und das Geld den Bedürftigen zukommen zu lassen, haben Sie und Ihre Gespielen beschlossen, im Sherwood Forest einen Freizeitpark zu bauen.
<Future - First Encounters>
STR_SCNR :Zukunft - Neulinge
STR_SCNR :Außerirdische Extravaganz
STR_PARK :Außerirdische Extravaganz
STR_DTLS :Auf einem fernen Planeten ist Leben entdeckt worden. Bauen Sie einen außerirdischen Freizeitpark, um die unerwartet heftige Hysterie in bare Münze umzuwandeln.
<Future - Future World>
STR_SCNR :Zukunft - Welt der Zukunft
STR_SCNR :Zwillingsstadt
STR_PARK :Zwillingsstadt
STR_DTLS :Beweisen Sie Ihre innovative, utopische Vision der Zukunft - errichten Sie einen futuristischen Freizeitpark mit topmodernen Attraktionen.
<Mythological - Animatronic Film Set>
STR_SCNR :Mythologie - Animatronic-Filmgelände
STR_SCNR :Animatronic-Possen
STR_PARK :Animatronic-Possen
STR_DTLS :Ihre Aufgabe ist, einen bestehenden Freizeitpark zu verbessern, der auf einem alten Filmgelände gebaut wurde. Bauen Sie eine Gedenkstätte für die Pioniere der Stop-Motion, die die Mystikwesen als Erste ins Kino brachten.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythologie - Wiege der Zivilisation
STR_SCNR :Mythologischer Wahnsinn
STR_PARK :Mythologischer Wahnsinn
STR_DTLS :Sie besitzen eine Insel von besonderem architektonischen Wert. Sie haben beschlossen, ihre Erhaltung durch einen Freizeitpark zu finanzieren, der sich mit dem reichen mythologischen Erbe der Gegend befasst.
<Prehistoric - After the Asteroid>
STR_SCNR :Vorgeschichte - Nach dem Asteroiden
STR_SCNR :Kratergemetzel
STR_PARK :Kratergemetzel
STR_DTLS :Sie besitzen einen alten, verstaubten Meteoritenkrater. In Ihrem unternehmerischen Geist haben Sie beschlossen, einen Asteroiden-Freizeitpark zu bauen und Ihr scheinbar wertloses Land in eine Geldanlage umzuwandeln.
<Prehistoric - Jurassic Safari>
STR_SCNR :Vorgeschichte - Jurassic-Safari
STR_SCNR :Achtersaurus
STR_PARK :Achtersaurus
STR_DTLS :Sie haben die Aufgabe, einen Jurassic-Freizeitpark zu bauen. Damit Ihre Besucher optimalen Zugang zu den exotischen Pflanzen und Tieren haben, müssen Sie Attraktionen errichten, die über und in die Täler führen.
<Prehistoric - Stone Age>
STR_SCNR :Vorgeschichte - Steinzeit
STR_SCNR :Felswanderungen
STR_PARK :Felswanderungen
STR_DTLS :Um den Autobahnbauern ein Schnippchen zu schlagen und die alten Steinkreise zu erhalten, müssen Sie einen Steinzeitpark bauen und ihn profitabel machen. Besucher anzulocken wird schwer, weil das Gelände unwirtlich ist.
<Roaring Twenties - Prison Island>
STR_SCNR :Die Wilden Zwanziger - Gefängnisinsel
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :Die berüchtigte Gefängnisinsel - die einst überquoll vor Schwarzhändlern und Gaunern - steht jetzt zum Verkauf. Sie haben beschlossen, sie in eine 1A-Touristenattraktion zu verwandeln. Geld spielt keine Rolle
<Roaring Twenties - Schneider Cup>
STR_SCNR :Die Wilden Zwanziger - Schneider-Cup
STR_SCNR :Schneider-Ufer
STR_PARK :Schneider-Ufer
STR_DTLS :In ein paar Jahren ist das 75. Jubiläum des Sieges Ihres Großvaters im Schneider-Cup. Ihm zu Ehren bauen Sie einen Freizeitpark auf der berühmten Wasserflugzeug-Rennstrecke.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Die Wilden Zwanziger - Wolkenkratzer
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :Sie besitzen ein Gelände in der Nähe des flach gebauten Teils der Stadt. Um aus Ihrem Besitz das Beste zu machen, bauen Sie einen Wolkenkratzer-Freizeitpark im hochragenden Stil der Art Déco-Architektur der Zwanziger Jahre.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Auf Ihrem Land findet jährlich ein großes Musikfestival statt. Bauen Sie einen hippen Freizeitpark, um das freidenkende Publikum bei Laune zu halten.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Rock-n-Roll-Revival
STR_PARK :Rock-n-Roll-Revival
STR_DTLS :Dieser Freizeitpark ist ein wenig in die Jahre gekommen. Helfen Sie dem Besitzer, ihm einen Rock-n-Roll-Anstrich zu geben und ihn zu einem beliebten Ausflugsziel zu machen.

View File

@ -98,6 +98,7 @@ STR_0093 :Hybrid Coaster
STR_0094 :Single Rail Roller Coaster
STR_0095 :Alpine Coaster
STR_0096 :Classic Wooden Roller Coaster
STR_0097 :Classic Stand-up Roller Coaster
STR_0512 :A compact roller coaster with a spiral lift hill and smooth, twisting drops.
STR_0513 :A looping roller coaster where the riders ride in a standing position
STR_0514 :Trains suspended beneath the roller coaster track swing out to the side around corners
@ -181,12 +182,13 @@ STR_0603 :A wooden style roller coaster with a steel track, allowing for stee
STR_0604 :Riders ride single file on a narrow monorail track, as they race through tight inversions and direction changes
STR_0605 :Riders toboggan down a meandering steel track, braking to control their speed
STR_0606 :An older-style wooden roller coaster with a fast and rough ride, with plenty of air-time, some lateral Gs, and designed to feel out-of-control
STR_0607 :An intense, older-style steel looping roller coaster where the riders ride in a standing position
STR_0767 :Guest {INT32}
STR_0768 :Handyman {INT32}
STR_0769 :Mechanic {INT32}
STR_0770 :Security Guard {INT32}
STR_0771 :Entertainer {INT32}
STR_0777 :Unnamed park{POP16}{POP16}
STR_0777 :Unnamed park
STR_0778 :Sign
STR_0779 :1st
STR_0780 :2nd
@ -1737,12 +1739,12 @@ STR_2382 :Land
STR_2383 :Water
STR_2384 :{WINDOW_COLOUR_2}Your objective:
STR_2385 :{BLACK}None
STR_2386 :{BLACK}To have at least {COMMA16} guests in your park at the end of {MONTHYEAR}, with a park rating of at least 600
STR_2386 :{BLACK}To have at least {COMMA32} guests in your park at the end of {MONTHYEAR}, with a park rating of at least 600
STR_2387 :{BLACK}To achieve a park value of at least {POP16}{POP16}{CURRENCY} at the end of {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Have Fun!
STR_2389 :{BLACK}Build the best {STRINGID} you can!
STR_2390 :{BLACK}To have 10 different types of roller coasters operating in your park, each with an excitement value of at least 6.00
STR_2391 :{BLACK}To have at least {COMMA16} guests in your park. You must not let the park rating drop below 700 at any time!
STR_2391 :{BLACK}To have at least {COMMA32} guests in your park. You must not let the park rating drop below 700 at any time!
STR_2392 :{BLACK}To achieve a monthly income from ride tickets of at least {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}To have 10 different types of roller coasters operating in your park, each with a minimum length of {LENGTH}, and an excitement rating of at least 7.00
STR_2394 :{BLACK}To finish building all 5 of the partially built roller coasters in this park, designing them to achieve excitement ratings of at least {POP16}{POP16}{COMMA2DP32} each
@ -2097,39 +2099,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Unable to load file…
STR_3011 :File contains invalid data
STR_3012 :Dodgems beat style
STR_3013 :Fairground organ style
STR_3014 :Roman fanfare style
STR_3015 :Oriental style
STR_3016 :Martian style
STR_3017 :Jungle drums style
STR_3018 :Egyptian style
STR_3019 :Toyland style
STR_3020 :
STR_3021 :Space style
STR_3022 :Horror style
STR_3023 :Techno style
STR_3024 :Gentle style
STR_3025 :Summer style
STR_3026 :Water style
STR_3027 :Wild west style
STR_3028 :Jurassic style
STR_3029 :Rock style
STR_3030 :Ragtime style
STR_3031 :Fantasy style
STR_3032 :Rock style 2
STR_3033 :Ice style
STR_3034 :Snow style
STR_3035 :Custom music 1
STR_3036 :Custom music 2
STR_3037 :Medieval style
STR_3038 :Urban style
STR_3039 :Organ style
STR_3040 :Mechanical style
STR_3041 :Modern style
STR_3042 :Pirates style
STR_3043 :Rock style 3
STR_3044 :Candy style
STR_3045 :Select style of music to play
STR_3047 :Local authority forbids demolition or modifications to this ride
STR_3048 :Marketing campaigns forbidden by local authority
@ -2356,7 +2325,7 @@ STR_3305 :{WINDOW_COLOUR_2}Monthly income:
STR_3306 :{WINDOW_COLOUR_2}Monthly profit:
STR_3307 :{WINDOW_COLOUR_2}Minimum length:
STR_3308 :{WINDOW_COLOUR_2}Excitement rating:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Rides/attractions under a preservation order:
@ -2916,7 +2885,7 @@ STR_5755 :Incorrect Software Version (Server is using {STRING})
STR_5756 :Bad Password
STR_5757 :Server Full
STR_5758 :{OUTLINE}{GREEN}{STRING} has joined the game
STR_5759 :Downloading map … ({INT32} / {INT32}) KiB
STR_5759 :Downloading map …
STR_5760 :Hong Kong Dollars (HK$)
STR_5761 :New Taiwan Dollar (NT$)
STR_5762 :Chinese Yuan (CN¥)
@ -3480,7 +3449,7 @@ STR_6374 :C
STR_6375 :Unknown Ride
STR_6376 :{WINDOW_COLOUR_2}Ride vehicle:{NEWLINE}{BLACK}{STRINGID} for {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Type: {BLACK}{STRINGID} for {STRINGID}
STR_6378 :Receiving objects list: {INT32} / {INT32}
STR_6378 :Receiving objects list
STR_6379 :Received invalid data
STR_6380 :Update available!
STR_6381 :Join OpenRCT2 Discord!
@ -3699,6 +3668,53 @@ STR_6593 :Remove park fences
STR_6594 :Tile Inspector: Toggle wall slope
STR_6595 :{WINDOW_COLOUR_2}Author: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Authors: {BLACK}{STRING}
STR_6597 :Invalid parameter
STR_6598 :Value out of range
STR_6599 :Ghost element not found
STR_6600 :Balloon not found
STR_6601 :Staff not found
STR_6602 :Ride not found
STR_6603 :Ride object entry not found
STR_6604 :Player not found
STR_6605 :Entrance element not found
STR_6606 :Surface element not found
STR_6607 :Tile element not found
STR_6608 :Track element not found
STR_6609 :Track block not found
STR_6610 :Path element not found
STR_6611 :Wall element not found
STR_6612 :Banner element not found
STR_6613 :Reload object
STR_6614 :Cant change park entrance fee
STR_6615 :Track on this tile needs water
STR_6616 :Action invalid for that staff type
STR_6617 :Cant swap tile element with itself
STR_6618 :Cant restrict or derestrict object…
STR_6619 :Object type cannot be restricted!
STR_6620 :Object not found!
STR_6621 :Restrict
STR_6622 :Restrict object to the Scenario Editor and Sandbox mode.
STR_6623 :Type help for a list of available commands. Type hide to hide the console.
STR_6624 :Tile Inspector: Sort elements
STR_6625 :Invalid colour
STR_6626 :Animation is backwards
STR_6627 :Track speed too high!
STR_6628 :Can only be placed on path edges!
STR_6629 :Align toolbar buttons horizontally centred
STR_6630 :This setting will align the toolbar buttons horizontally in the centre of the screen. The traditional way of aligning them is in the left and right corner.
STR_6631 :Loading…
STR_6632 :Checking object files…
STR_6633 :Checking scenario files…
STR_6634 :Checking track design files…
STR_6635 :Checking asset packs…
STR_6636 :Checking title sequences…
STR_6637 :Loading title sequence…
STR_6638 :Enlarged UI
STR_6639 :Modifies the interface to be more suitable for touch usage
STR_6640 :Edit asset packs…
STR_6641 :Loading/progress window
STR_6642 :{STRING} ({COMMA32} / {COMMA32})
STR_6643 :{STRING} ({COMMA32} / {COMMA32} KiB)
#############
# Scenarios #
@ -4279,87 +4295,87 @@ STR_DTLS :Build the missing Six Flags rides, or create your own designs to im
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - African Diamond Mine
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :You inherited a disused diamond mine, and find a valuable diamond. You decide to invest that money to build a world-famous theme park.
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :A desert Oasis has been discovered and would provide a beautiful location for a park. Transport to the oasis has been provided.
<Africa - Victoria Falls>
STR_SCNR :Africa - Victoria Falls
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :A dam has been built offering abundant, cheap hydroelectric power with which to run a park. You need to reach a high park value to help repay the loan for the dam.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctic - Ecological Salvage
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :The environment agency has turned to you to transform an old oil refinery ecological eyesore into a top tourist attraction. Land is cheap but loan interest is high. You can sell the old buildings for salvage.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Great Wall of China Tourism Enhancement
STR_SCNR :Great Wall of China
STR_PARK :Great Wall of China
STR_DTLS :The authorities have decided to enhance tourism around the Great Wall by building a theme park on the adjacent land. Money is no object!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Japanese Coastal Reclaim
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :An existing park has run out of space. Your only option is to build out into the sea, and so you have taken out a loan. Height restrictions on your building are enforced due to foundations and earthquake risk.
<Asia - Maharaja Palace>
STR_SCNR :Asia - Maharaja Palace
STR_SCNR :Park Maharaja
STR_PARK :Park Maharaja
STR_DTLS :You have been commissioned by the Maharaja to bring entertainment to the large local population. Build a park inspired by the Maharajas palace.
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :You are helping Aboriginal people to build a park as part of a cultural awareness program. You need to get a large number of guests to educate them in the unique heritage of the Aboriginal people.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia - Fun at the Beach
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :A local entrepreneurs sealife park has gone bust. You already operate a small park and buy the other park from the construction company. Develop a big combined park.
<Europe - European Cultural Festival>
STR_SCNR :Europe - European Cultural Festival
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :You have been brought in to take over a European Cultural Visitor Attraction and must increase the number of guests in order to pay back the EU subsidy by the end of the current European parliament term.
<Europe - Renovation>
STR_SCNR :Europe - Renovation
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :An old park has fallen into disrepair. You gain a European Union grant to return this deprived area to its former glory! You need to renovate the park and repay the grant.
<N. America - Extreme Hawaiian Island>
STR_SCNR :North America - Extreme Hawaiian Island
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :The people of Hawaii are bored of surfing and are looking for something more intense. You need to build a park with this in mind to keep the areas tourist attraction rating high.
<North America - Grand Canyon>
STR_SCNR :North America - Grand Canyon
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :You have to build a park on limited land either side of this natural treasure - you do have the opportunity to buy neighbouring land from the Native American Indians. You need to complete the objective to sustain the local towns population.
<North America - Rollercoaster Heaven>
STR_SCNR :North America - Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :You are a successful business tycoon on long sabbatical who desires to use this time transforming the city park into Rollercoaster Heaven. Money is no object!
<South America - Inca Lost City>
STR_SCNR :South America - Inca Lost City
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings, and has height restrictions.
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings.
<South America - Rain Forest Plateau>
STR_SCNR :South America - Rain Forest Plateau
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :Space is limited in the precious rainforest - you must cram as much as possible into the existing clearing, in order to provide a viable alternative to the local timber industry.
<South America - Rio Carnival>
STR_SCNR :South America - Rio Carnival
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :You run a small park near Rio but the bank has called in your loan. You need to quickly increase your earning capacity to repay this unexpected debt.
@ -4367,72 +4383,72 @@ STR_DTLS :You run a small park near Rio but the bank has called in your loan.
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Dark Age - Castle
STR_SCNR :Cliffside Castle
STR_PARK :Cliffside Castle
STR_DTLS :Local members of the battle re-enactment society are rather serious about their hobby. Theyve entrusted you with the job of constructing a Dark Age theme park on the grounds of Cliffside Castle.
<Dark Age - Robin Hood>
STR_SCNR :Dark Age - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :To liberate wealth from the rich and distribute it to the needy, you and your Merry Men have decided to build a theme park in Sherwood Forest.
<Future - First Encounters>
STR_SCNR :Future - First Encounters
STR_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Life has been discovered on a distant planet Build an alien theme park to cash in on the unprecedented wave of interest.
<Future - Future World>
STR_SCNR :Future - Future World
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Show off your inventive, utopian vision of the future - come up with a futuristic park design that incorporates state-of-the-art attractions.
<Mythological - Animatronic Film Set>
STR_SCNR :Mythological - Animatronic Film Set
STR_SCNR :Animatronic Antics
STR_PARK :Animatronic Antics
STR_DTLS :You have been given the task of running and improving an existing theme park, which has been built on an old film set. Build a tribute to the pioneering stop-motion animators who first brought mythical creatures to life on the silver screen.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythological - Cradle of Civilisation
STR_SCNR :Mythological Madness
STR_PARK :Mythological Madness
STR_DTLS :You own an island of particular archaeological value. Youve decided to fund its preservation by constructing a theme park based on the areas rich Mythological heritage.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistoric - After the Asteroid
STR_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :You own a dusty old meteor crater. In the true entrepreneurial spirit, youve decided to construct an asteroid theme park and convert your seemingly worthless land into a sizeable fortune.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistoric - Jurassic Safari
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :Youve been given the task of constructing a Jurassic era theme park. To optimize your visitors access to the exotic plant and animal exhibits, you will need to build rides going over and into the valley.
<Prehistoric - Stone Age>
STR_SCNR :Prehistoric - Stone Age
STR_SCNR :Rocky Rambles
STR_PARK :Rocky Rambles
STR_DTLS :To thwart the highway developers and preserve the mysterious ancient stone circles, you will need to construct a Stone Age theme park and turn a profit. However, attracting visitors may pose a challenge, as the terrain is a tad inhospitable.
<Roaring Twenties - Prison Island>
STR_SCNR :Roaring Twenties - Prison Island
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :The infamous Prison Island - whose population once swelled with bootleggers and racketeers - is now up for sale. Youve decided to convert it into a top tourist attraction, and money is no object
<Roaring Twenties - Schneider Cup>
STR_SCNR :Roaring Twenties - Schneider Cup
STR_SCNR :Schneider Shores
STR_PARK :Schneider Shores
STR_DTLS :The 75th anniversary of your grandfathers Schneider Cup victory is coming up in a few years. Youre going to honour his achievement by building a theme park based on the famous seaplane race.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Roaring Twenties - Skyscrapers
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :You own an empty lot near the low-rise part of town. To squeeze the most out of your urban property, build a skyscraper theme park inspired by the soaring art deco architecture of the twenties.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :A large annual music festival takes place on your land. Build a hip theme park to keep the free-spirited audience entertained.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Rock n Roll Revival
STR_PARK :Rock n Roll Revival
STR_DTLS :This aging theme park has seen better days. Help the owner give it a retro rock n roll makeover and turn the place into a successful venue.

View File

@ -7,12 +7,11 @@
# Vanilla strings. Only change strings that differ from UK English!
STR_0007 :Miniature Railroad
STR_0015 :Bobsled Coaster
STR_0027 :Bumper Cars
STR_0035 :Carousel
STR_0038 :Restroom
STR_0041 :3D Theater
STR_0045 :Elevator
STR_0047 :ATM
STR_0052 :Tunnel Of Horror
STR_0517 :Passengers ride in miniature trains along a narrow-gauge railroad track
STR_0529 :Mine train themed roller coaster trains career along steel roller coaster track made to look like old railroad track
STR_0537 :Guests bump into each other in self-driven electric bumper cars
@ -203,7 +202,7 @@ STR_3102 :Re-paint colored scenery on landscape
STR_3122 :{WINDOW_COLOUR_2}Favorite ride of: {BLACK}{COMMA32} guest
STR_3123 :{WINDOW_COLOUR_2}Favorite ride of: {BLACK}{COMMA32} guests
STR_3372 :{BLACK}= A.T.M.
STR_3372 :{BLACK}= ATM
STR_3373 :{BLACK}= Restroom
# Strings added by OpenRCT2. Only add strings that differ from UK English!
@ -232,6 +231,10 @@ STR_6274 :Cant set color scheme…
STR_6307 :Color scheme: {BLACK}{STRINGID}
STR_6328 :With this option enabled, giant screenshots will have a transparent background instead of the default black color.
STR_6501 :Random color
STR_6625 :Invalid color
STR_6629 :Align toolbar buttons horizontally centered
STR_6630 :This setting will align the toolbar buttons horizontally in the center of the screen. The traditional way of aligning them is in the left and right corner.
#############
# Scenarios #
@ -811,87 +814,87 @@ STR_DTLS :Build the missing Six Flags rides, or create your own designs to im
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - African Diamond Mine
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :You inherited a disused diamond mine, and find a valuable diamond. You decide to invest that money to build a world-famous theme park.
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :A desert Oasis has been discovered and would provide a beautiful location for a park. Transport to the oasis has been provided.
<Africa - Victoria Falls>
STR_SCNR :Africa - Victoria Falls
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :A dam has been built offering abundant, cheap hydroelectric power with which to run a park. You need to reach a high park value to help repay the loan for the dam.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctic - Ecological Salvage
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :The environment agency has turned to you to transform an old oil refinery ecological eyesore into a top tourist attraction. Land is cheap but loan interest is high. You can sell the old buildings for salvage.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Great Wall of China Tourism Enhancement
STR_SCNR :Great Wall of China
STR_PARK :Great Wall of China
STR_DTLS :The authorities have decided to enhance tourism around the Great Wall by building a theme park on the adjacent land. Money is no object!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Japanese Coastal Reclaim
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :An existing park has run out of space. Your only option is to build out into the sea, and so you have taken out a loan. Height restrictions on your building are enforced due to foundations and earthquake risk.
<Asia - Maharaja Palace>
STR_SCNR :Asia - Maharaja Palace
STR_SCNR :Park Maharaja
STR_PARK :Park Maharaja
STR_DTLS :You have been commissioned by the Maharaja to bring entertainment to the large local population. Build a park inspired by the Maharajas palace.
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :You are helping Aboriginal people to build a park as part of a cultural awareness program. You need to get a large number of guests to educate them in the unique heritage of the Aboriginal people.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia - Fun at the Beach
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :A local entrepreneurs sealife park has gone bust. You already operate a small park and buy the other park from the construction company. Develop a big combined park.
<Europe - European Cultural Festival>
STR_SCNR :Europe - European Cultural Festival
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :You have been brought in to take over a European Cultural Visitor Attraction and must increase the number of guests in order to pay back the EU subsidy by the end of the current European parliament term.
<Europe - Renovation>
STR_SCNR :Europe - Renovation
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :An old park has fallen into disrepair. You gain a European Union grant to return this deprived area to its former glory! You need to renovate the park and repay the grant.
<N. America - Extreme Hawaiian Island>
STR_SCNR :N. America - Extreme Hawaiian Island
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :The people of Hawaii are bored of surfing and are looking for something more intense. You need to build a park with this in mind to keep the areas tourist attraction rating high.
<North America - Grand Canyon>
STR_SCNR :North America - Grand Canyon
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :You have to build a park on limited land either side of this natural treasure - you do have the opportunity to buy neighboring land from the Native American Indians. You need to complete the objective to sustain the local towns population.
<North America - Rollercoaster Heaven>
STR_SCNR :North America - Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :You are a successful business tycoon on long sabbatical who desires to use this time transforming the city park into Rollercoaster Heaven. Money is no object!
<South America - Inca Lost City>
STR_SCNR :South America - Inca Lost City
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings, and has height restrictions.
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings.
<South America - Rain Forest Plateau>
STR_SCNR :South America - Rain Forest Plateau
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :Space is limited in the precious rainforest - you must cram as much as possible into the existing clearing, in order to provide a viable alternative to the local timber industry.
<South America - Rio Carnival>
STR_SCNR :South America - Rio Carnival
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :You run a small park near Rio but the bank has called in your loan. You need to quickly increase your earning capacity to repay this unexpected debt.
@ -899,71 +902,71 @@ STR_DTLS :You run a small park near Rio but the bank has called in your loan.
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Dark Age - Castle
STR_SCNR :Cliffside Castle
STR_PARK :Cliffside Castle
STR_DTLS :Local members of the battle re-enactment society are rather serious about their hobby. Theyve entrusted you with the job of constructing a Dark Age theme park on the grounds of Cliffside Castle.
<Dark Age - Robin Hood>
STR_SCNR :Dark Age - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :To liberate wealth from the rich and distribute it to the needy, you and your Merry Men have decided to build a theme park in Sherwood Forest.
<Future - First Encounters>
STR_SCNR :Future - First Encounters
STR_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Life has been discovered on a distant planet. Build an alien theme park to cash in on the unprecedented wave of interest.
<Future - Future World>
STR_SCNR :Future - Future World
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Show off your inventive, utopian vision of the future - come up with a futuristic park design that incorporates state-of-the-art attractions.
<Mythological - Animatronic Film Set>
STR_SCNR :Mythological - Animatronic Film Set
STR_SCNR :Animatronic Antics
STR_PARK :Animatronic Antics
STR_DTLS :You have been given the task of running and improving an existing theme park, which has been built on an old film set. Build a tribute to the pioneering stop-motion animators who first brought mythical creatures to life on the silver screen.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythological - Cradle of Civilization
STR_SCNR :Mythological Madness
STR_PARK :Mythological Madness
STR_DTLS :You own an island of particular archaeological value. Youve decided to fund its preservation by constructing a theme park based on the areas rich Mythological heritage.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistoric - After the Asteroid
STR_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :You own a dusty old meteor crater. In the true entrepreneurial spirit, youve decided to construct an asteroid theme park and convert your seemingly worthless land into a sizeable fortune.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistoric - Jurassic Safari
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :Youve been given the task of constructing a Jurassic era theme park. To optimize your visitors access to the exotic plant and animal exhibits, you will need to build rides going over and into the valley.
<Prehistoric - Stone Age>
STR_SCNR :Prehistoric - Stone Age
STR_SCNR :Rocky Rambles
STR_PARK :Rocky Rambles
STR_DTLS :To thwart the highway developers and preserve the mysterious ancient stone circles, you will need to construct a Stone Age theme park and turn a profit. However, attracting visitors may pose a challenge, as the terrain is a tad inhospitable.
<Roaring Twenties - Prison Island>
STR_SCNR :Roaring Twenties - Prison Island
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :The infamous Prison Island - whose population once swelled with bootleggers and racketeers - is now up for sale. Youve decided to convert it into a top tourist attraction, and money is no object.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Roaring Twenties - Schneider Cup
STR_SCNR :Schneider Shores
STR_PARK :Schneider Shores
STR_DTLS :The 75th anniversary of your grandfathers Schneider Cup victory is coming up in a few years. Youre going to honor his achievement by building a theme park based on the famous seaplane race.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Roaring Twenties - Skyscrapers
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :You own an empty lot near the low-rise part of town. To squeeze the most out of your urban property, build a skyscraper theme park inspired by the soaring art deco architecture of the twenties.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :A large annual music festival takes place on your land. Build a hip theme park to keep the free-spirited audience entertained.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Rock n Roll Revival
STR_PARK :Rock n Roll Revival
STR_DTLS :This aging theme park has seen better days. Help the owner give it a retro rock n roll makeover and turn the place into a successful venue.

View File

@ -98,6 +98,7 @@ STR_0093 :Hibrida Onda Fervojo
STR_0094 :Onda Fervojo kun Unuopa Relo
STR_0095 :Alpa Onda Fervojo
STR_0096 :Klasika Ligna Onda Fervojo
STR_0097 :Klasika Staranta Onda Fervojo
STR_0512 :Onda fervojo kompakta kun helikforma lifto kaj glataj kurboplenaj malleviĝoj.
STR_0513 :Onda fervojo kun lopoj, sur kiun la rajdantoj rajdas starante
STR_0514 :Trajnoj penditaj sub la trako de la onda fervojo svingiĝas flanken ĉe anguloj
@ -181,12 +182,13 @@ STR_0603 :Ligna onda fervojo kun ŝtala trako, kiu permesas krutajn malleviĝ
STR_0604 :Rajdantoj rajdas anservice sur mallarĝa monorela trako, dum ili vetkuras tra krutaj inversigoj kaj ŝanĝoj de direkto.
STR_0605 :Rajdantoj toboganas malsupren serpentuman ŝtalan trakon, bremsante por regi ilian rapidecon.
STR_0606 :Maljuna-stila ligna onda fervojo kun rapida kaj malglata rajdo, kun sufiĉe da en-aeraj periodoj, kelka flanka graviteco, kaj desegnita sentiĝi nedirektebla
STR_0607 :Intensa, malnovstila ŝtala onda fervojo kun lopoj, sur kiun la rajdantoj rajdas starante
STR_0767 :Gasto {INT32}
STR_0768 :Faktoto {INT32}
STR_0769 :Mekanikisto {INT32}
STR_0770 :Gardisto {INT32}
STR_0771 :Amuzisto {INT32}
STR_0777 :Parko sennoma{POP16}{POP16}
STR_0777 :Parko sennoma
STR_0778 :Afiŝo
STR_0779 :1a
STR_0780 :2a
@ -1737,12 +1739,12 @@ STR_2382 :Tero
STR_2383 :Akvo
STR_2384 :{WINDOW_COLOUR_2}Via celo:
STR_2385 :{BLACK}Neniu
STR_2386 :{BLACK}Havi almenaŭ {COMMA16} gastojn en via parko al la fino de {MONTHYEAR}, kun pritakso de parko ne malpli ol 600
STR_2386 :{BLACK}Havi almenaŭ {COMMA32} gastojn en via parko al la fino de {MONTHYEAR}, kun pritakso de parko ne malpli ol 600
STR_2387 :{BLACK}Atingi parkvaloron ne malpli ol {POP16}{POP16}{CURRENCY} al la fino de {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Amuzi Vin!
STR_2389 :{BLACK}Konstrui je la plej bona {STRINGID}, kiun vi povas konstrui!
STR_2390 :{BLACK}Havi 10 malsamajn tipojn de ondaj fervojoj funkciantajn en via parko, kiuj havas po pritakson de eksciteco ne malpli ol 6.00
STR_2391 :{BLACK}Havi almenaŭ {COMMA16} gastojn en via parko. Ankaŭ, necesas ke la pritakso de la parko neniam falu sub 700!
STR_2391 :{BLACK}Havi almenaŭ {COMMA32} gastojn en via parko. Ankaŭ, necesas ke la pritakso de la parko neniam falu sub 700!
STR_2392 :{BLACK}Atingi enspezon monatan ne malpli ol {POP16}{POP16}{CURRENCY}, pro la vendado de biletoj de atrakcioj
STR_2393 :{BLACK}Havi 10 malsamajn tipojn de ondaj fervojoj funkciantajn en via parko, kiuj havas po mimimuman longecon de {LENGTH} kaj pritakson de eksciteco ne malpli ol 7.00
STR_2394 :{BLACK}Fini la konstruadon de la tutaj 5 ondaj fervojoj konstruitaj parte. Desegni ilin, por atingi po pritakson de eksciteco ne malpli ol {POP16}{POP16}{COMMA2DP32}
@ -2011,7 +2013,7 @@ STR_2809 :{RED}Gastoj malsatas, kaj ne eblas trovi ie ajn por aĉeti manĝaĵ
STR_2810 :{RED}Gastoj soifas, kaj ne eblas trovi ie ajn por aĉeti trinkaĵon
STR_2811 :{RED}Gastoj plendas, ĉar ili ne eblas trovi la necesejojn en via parko
STR_2812 :{RED}Gastoj perdiĝas{NEWLINE}Kontrolu ĉu la aranĝo de viaj trotuaroj bezonas plibonigon, por helpi la gastojn tiel, kiel ili ne perdiĝas
STR_2813 :{RED}Via kosto de parkeniro estas tro alta!{NEWLINE}Malaltigi ĝin, aŭ plibonigi la parkvaloron por allogi pli da gastoj
STR_2813 :{RED}Via enirpago de parko estas tro alta!{NEWLINE}Malaltigi ĝin, aŭ plibonigi la parkvaloron por allogi pli da gastoj
STR_2814 :{WINDOW_COLOUR_2}Premio por la plej negliĝa parko
STR_2815 :{WINDOW_COLOUR_2}Premio por la plej orda parko
STR_2816 :{WINDOW_COLOUR_2}Premio por la parko kun la plej bonaj ondaj fervojoj
@ -2097,39 +2099,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Ne eblas ŝargi dosieron…
STR_3011 :Doserio enhavas nevalidajn datumojn
STR_3012 :Doĝemotakto-stilo
STR_3013 :Foirejo-orgeno-stilo
STR_3014 :Roma-fanfaro-stilo
STR_3015 :Orienta stilo
STR_3016 :Marsa stilo
STR_3017 :Ĝangalotamburoj-stilo
STR_3018 :Egipta stilo
STR_3019 :Ludilejo-stilo
STR_3020 :
STR_3021 :Spaco-stilo
STR_3022 :Horora stilo
STR_3023 :Tekno-stilo
STR_3024 :Milda stilo
STR_3025 :Somero-stilo
STR_3026 :Akvo-stilo
STR_3027 :Sovaĝa-okcidento-stilo
STR_3028 :Ĵurasa stilo
STR_3029 :Rokmuziko-stilo
STR_3030 :Ragtimo-stilo
STR_3031 :Fantasto-stilo
STR_3032 :Rokmuziko-stilo 2
STR_3033 :Glacio-stilo
STR_3034 :Neĝo-stilo
STR_3035 :Propra muziko 1
STR_3036 :Propra muziko 2
STR_3037 :Mezepoka stilo
STR_3038 :Urba stilo
STR_3039 :Orgeno-stilo
STR_3040 :Mekanika stilo
STR_3041 :Moderna stilo
STR_3042 :Piratoj-stilo
STR_3043 :Rokmuziko-stilo 3
STR_3044 :Dolĉaĵo-stilo
STR_3045 :Elekti stilon de muziko por ludi
STR_3047 :Loka aŭtoritato malpermesas malkonstruon aŭ redaktojn de ĉi tiu atrakcio
STR_3048 :Loka aŭtoritato malpermesas kampanjojn surmerkatigajn
@ -2356,7 +2325,7 @@ STR_3305 :{WINDOW_COLOUR_2}Enspezo monata:
STR_3306 :{WINDOW_COLOUR_2}Profito monata:
STR_3307 :{WINDOW_COLOUR_2}Minimuma longeco:
STR_3308 :{WINDOW_COLOUR_2}Pritakso de eksciteco:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Atrakcioj, kiujn oni ne eblas ŝanĝi dum la scenaro:
@ -2916,7 +2885,7 @@ STR_5755 :Malĝusta Versio de Programo (Servilo uzas je {STRING})
STR_5756 :Malbona Pasvorto
STR_5757 :Servilo Plena
STR_5758 :{OUTLINE}{GREEN}{STRING} aliĝis al la ludo
STR_5759 :Elŝutas mapon … ({INT32} / {INT32}) KiB
STR_5759 :Elŝutas mapon …
STR_5760 :Honkongaj Dolaroj (HK$)
STR_5761 :Nova Tajvana Dolaro (NT$)
STR_5762 :Ĉina Juano (CN¥)
@ -3480,7 +3449,7 @@ STR_6374 :I
STR_6375 :Nekonata Atrakcio
STR_6376 :{WINDOW_COLOUR_2}Atrakcioveturilo:{NEWLINE}{BLACK}{STRINGID} por {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Tipo: {BLACK}{STRINGID} por {STRINGID}
STR_6378 :Ricevas liston de objektoj: {INT32} / {INT32}
STR_6378 :Ricevas liston de objektoj:
STR_6379 :Ricevis nevalidan datumon
STR_6380 :Ĝisdatigo disponeblas!
STR_6381 :Aliĝi al la Diskordo de OpenRCT2!
@ -3579,7 +3548,7 @@ STR_6474 :Nevideblaj Gastoj
STR_6475 :Nevidebla Dungitaro
STR_6476 :Nevideba Vegetaĵaro
STR_6477 :Nevideba Pejzaĝo
STR_6478 :Nevidebaj Trotruaroj
STR_6478 :Nevidebaj Trotuaroj
STR_6479 :Nevidebaj Atrakcioj
STR_6480 :Nevidebaj Veturiloj
STR_6481 :Agordoj de Travidebleco
@ -3698,6 +3667,53 @@ STR_6593 :Forigi parkobarilojn
STR_6594 :Inspektilo de Bloko: Baskuligi deklivecon de muro
STR_6595 :{WINDOW_COLOUR_2}Aŭtoro: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Aŭtoroj: {BLACK}{STRING}
STR_6597 :Nevalida parametro
STR_6598 :Valoro estas ekstervarieja
STR_6599 :Fantomo-elemento ne troviĝis
STR_6600 :Balono ne troviĝis
STR_6601 :Dungitaro ne troviĝis
STR_6602 :Atrakcio ne troviĝis
STR_6603 :Enigo de atrakcio-objekto ne troviĝis
STR_6604 :Ludanto ne troviĝis
STR_6605 :Enirejo-elemento ne troviĝis
STR_6606 :Surfaco-elemento ne troviĝis
STR_6607 :Blokelemento ne troviĝis
STR_6608 :Trakelemento ne troviĝis
STR_6609 :Blokparto de trako ne troviĝis
STR_6610 :Trotuaro-elemento ne troviĝis
STR_6611 :Muro-elemento ne troviĝis
STR_6612 :Rubando-elemento ne troviĝis
STR_6613 :Reŝargi objekton
STR_6614 :Ne povas ŝanĝi enirpagon de parko
STR_6615 :Trako sur ĉi tiu bloko bezonas akvon
STR_6616 :Ago estas nevalida por tiu dungitotipo
STR_6617 :Ne povas permuti blokelementon kun si mem
STR_6618 :Ne povas limigi aŭ mallimigi objekton…
STR_6619 :Objekotipo ne povas esti limigita!
STR_6620 :Objekto ne troviĝis!
STR_6621 :Limigi
STR_6622 :Limigi objekton al la Scenaroredaktilo kaj Provejo-reĝimo.
STR_6623 :Tajpu la komandon help por montri liston de disponeblaj komandoj. Tajpu la komandon hide por kaŝi la konsolon.
STR_6624 :Inspektilo de Bloko: Ordigi elementojn
STR_6625 :Nevalida koloro
STR_6626 :Animacio movas malantaŭen
STR_6627 :Rapideco de trako estas tro alta!
STR_6628 :Nur meteblas sur bordoj de trotuaroj!
STR_6629 :Ĝisrandigi butonojn de ilobreto horizontale centren
STR_6630 :Ĉi tiu agordo ĝisrandigos la butonojn de ilobreto horizontale centren de la ekrano. La tradicia maniero ĝisrandigi ilin estas al la dekstre kaj maldeksre anguloj.
STR_6631 :Ŝargado…
STR_6632 :Kontrolas dosierojn de objektoj…
STR_6633 :Kontrolas dosierojn de scenaroj…
STR_6634 :Kontrolas dosierojn de trakdesegnaĵoj…
STR_6635 :Kontrolas havaĵo-pakojn…
STR_6636 :Kontrolas titolosekvencojn…
STR_6637 :Ŝargas titolosekvencon…
STR_6638 :Pligrandigita fasado
STR_6639 :Modifas la fasadon por esti pli taŭga por tuŝekranoj
STR_6640 :Redakti havaĵo-pakojn…
STR_6641 :Ŝargado/progreso-fenestro
STR_6642 :{STRING} ({COMMA32} / {COMMA32})
STR_6643 :{STRING} ({COMMA32} / {COMMA32} KiB)
#############
# Scenarios #
@ -4287,87 +4303,87 @@ STR_DTLS :Konstruu la mankantajn atrakciojn de Six Flags, aŭ kreu viajn prop
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Afriko - Afrika Diamanto-Mino
STR_SCNR :Minoj de Afriko
STR_PARK :Minoj de Afriko
STR_DTLS :Vi heredis ne plu uzitan diamanto-minejon, kaj trovis valoran diamanton. Vi decidas investi tiun monon por konstrui mondfaman amuzparkon.
<Africa - Oasis>
STR_SCNR :Afriko - Oazo
STR_SCNR :Miraĝo-Frenezo
STR_PARK :Miraĝo-Frenezo
STR_DTLS :Dezerta oazo estis malkovrita kaj provizus belan lokon por parko. Transporto al la oazo estis provizita.
<Africa - Victoria Falls>
STR_SCNR :Afriko - Akvofaloj de Viktoria
STR_SCNR :Super La Rando
STR_PARK :Super La Rando
STR_DTLS :Digo konstruita oferas abundan malmultekostan hidroelektran potencon por administri parkon. Vi devas atingi altan parkvaloron por helpi repagi la prunton de la digo.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarkto - Ekologia Savo
STR_SCNR :Glaciaj Aventuroj
STR_PARK :Glaciaj Aventuroj
STR_DTLS :La biomedia agentejo komisiis vin por transformi malnovan nafto-rafinejon, ekologian malbelaĵon, en supran turismo-vidindaĵon. Tereno estas malmultekosta sed pruntinterezo estas alta. Vi povas vendi la malnovajn konstruaĵojn por savado.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Azio - Plibonigo de Turismo de la Granda Ĉina Muro
STR_SCNR :La Granda Ĉina Muro
STR_PARK :La Granda Ĉina Muro
STR_DTLS :La aŭtoritatoj decidis plibonigi turismon ĉirkaŭ la Granda Muro per konstrui amuzparkon sur la apuda tereno. Mono estas neniu problemo!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Azio - Japana Marborda Reakiro
STR_SCNR :Okinavo-Marbordo
STR_PARK :Okinavo-Marbordo
STR_DTLS :Ekzistanta parko elĉerpiĝis de spaco. Via sola eblo estas konstrui sur la maron, kaj tial vi elprenis prunton. Alteco-limigoj de viaj konstruaĵoj estas observigitaj pro fondaĵoj kaj tertremo-risko.
<Asia - Maharaja Palace>
STR_SCNR :Azio - Maharaĝo-Palaco
STR_SCNR :Parko-Maharaĝo
STR_PARK :Parko-Maharaĝo
STR_DTLS :Vi estis komisiita de la Maharaĝo por alporti amuzadon al la granda loka loĝantaro. Konstruu parkon inspiritan de la palaco de Maharaĝo.
<Australasia - Ayers Rock>
STR_SCNR :Aŭstralazio - Uluruo
STR_SCNR :Uluru-Aventuro
STR_PARK :Uluru-Aventuro
STR_DTLS :Vi helpas aborigenojn per konstrui parkon kiel parto de programo de kultura konscio. Vi bezonas akiri multajn gastojn por eduki ilin pri la unika heredaĵo de la aborigenoj.
<Australasia - Fun at the Beach>
STR_SCNR :Aŭstralazio - Amuzo ĉe la Plaĝo
STR_SCNR :Kradostado-Festo ĉe la Plaĝo
STR_PARK :Kradostado-Festo ĉe la Plaĝo
STR_DTLS :La marvivo-parko de loka entreprenisto eksenmoniĝis. Vi jam funkciigas malgrandan parkon, kaj aĉetas la alian parkon de la konstruo-kompanio. Ellaboru grandan kombinitan parkon.
<Europe - European Cultural Festival>
STR_SCNR :Eŭropo - Eŭropa Kultura Festivalo
STR_SCNR :Eŭropa Ekstravagancaĵo
STR_PARK :Eŭropa Ekstravagancaĵo
STR_DTLS :Vi estis alportita por transpreni Eŭropan Kulturan Vizitanto-Vidindaĵon kaj devas pliigi la nombron de gastoj por repagi la EU-subvencion antaŭ la fino de la aktuala Eŭropa parlamento-oficdaŭro.
<Europe - Renovation>
STR_SCNR :Eŭropo - Renovigo
STR_SCNR :El La Cindroj
STR_PARK :El La Cindroj
STR_DTLS :Malnova parko falis je kadukiĝo. Vi akiras subvencion de Eŭropa Unio por redoni ĉi tiun senigitan areon al sia iama gloro! Vi bezonas renovigi la parkon kaj repagi la subvencion.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Nordameriko - Ekstrema Havaja Insulo
STR_SCNR :Komika Waikiki
STR_PARK :Komika Waikiki
STR_DTLS :La homoj de Havajo estas enuigitaj de surfado kaj serĉas ion pli intensan. Vi devas konstrui parkon ĉi-rilate por subteni la vidindaĵo-valoron de la areo alta.
<North America - Grand Canyon>
STR_SCNR :Nordameriko - Granda Kanjono
STR_SCNR :Kanjono-Katastrofoj
STR_PARK :Kanjono-Katastrofoj
STR_DTLS :Vi devas konstrui parkon sur limigita tereno ambaŭflanke de ĉi tiu natura trezoro - vi havas la oportunecon por aĉeti najbaran terenon de la Indiĝenaj Amerikanoj. Vi devas kompletigi la celon por daŭrigi la loĝantaron de la loka vilaĝo.
<North America - Rollercoaster Heaven>
STR_SCNR :Nordameriko - Paradizo de Ondaj Fervojoj
STR_SCNR :Paradizo de Ondaj Fervojoj
STR_PARK :Paradizo de Ondaj Fervojoj
STR_DTLS :Vi estas sukcesa komerca magnato prenanta longan libertempon, kiu deziras uzi ĉi tiun tempon per transformi la urban parkon en Onda-Fervojo-Paradizon. Mono estas neniu problemo!
<South America - Inca Lost City>
STR_SCNR :Sudameriko - La Perdita Inkaa Urbo
STR_SCNR :Fondinto de la Perdita Urbo
STR_PARK :Fondinto de la Perdita Urbo
STR_DTLS :Por plue akceli lokan turismon, vi devas konstrui parkon, kiu kaj akordas kun sia ĉirkaŭaĵo, kaj observas limigojn de alteco.
STR_DTLS :Por plue akceli lokan turismon, vi devas konstrui parkon, kiu akordas kun sia ĉirkaŭaĵo.
<South America - Rain Forest Plateau>
STR_SCNR :Sudameriko - Pluvarbaro-Altebenaĵo
STR_SCNR :Pluvarbaro-Kapriolo
STR_PARK :Pluvarbaro-Kapriolo
STR_DTLS :Spaco estas limigita en la altvalora pluvarbaro - vi devas plenegigi kiel eble plej multe en la ekzistantan senarbejon, por havigi vivipovan alternativon je la loka ligno-industrio.
<South America - Rio Carnival>
STR_SCNR :Sudameriko - La Karnavalo de Rio
STR_SCNR :Sukerpano-Marbordoj
STR_PARK :Sukerpano-Marbordoj
STR_DTLS :Vi administras malgrandan parkon proksime de Rio-de-Ĵanejro, sed la banko alvokis vian prunton. Vi devas rapide pliigi vian enspezado-kapablon por repagi ĉi tiun neatenditan ŝuldon.
@ -4375,72 +4391,72 @@ STR_DTLS :Vi administras malgrandan parkon proksime de Rio-de-Ĵanejro, sed l
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Malluma Epoko - Kastelo
STR_SCNR :Klifoflanko-Kastelo
STR_PARK :Klifoflanko-Kastelo
STR_DTLS :Lokaj anoj de la socio de batalo-rekonstruoj estas sufiĉe seriozaj pri ilia ŝatokupo. Ili konfidis al vi la laboron de konstrui amuzparkon kun temo de Malluma Epoko sur la tereno de Klifoflanko-Kastelo.
<Dark Age - Robin Hood>
STR_SCNR :Malluma Epoko - Robin Hood
STR_SCNR :Arbaro Sherwood
STR_PARK :Arbaro Sherwood
STR_DTLS :Por liberigi la riĉaĵon de riĉuloj kaj disdoni ĝin al senhavuloj, vi kaj viaj Gajaj Viroj decidis konstrui amuzparkon en Arbaro Sherwood.
<Future - First Encounters>
STR_SCNR :Estonto - Unuaj Renkontoj
STR_SCNR :Ekstertera Ekstravagancaĵo
STR_PARK :Ekstertera Ekstravagancaĵo
STR_DTLS :Vivo estis malkovrita ĉe malproksima planedo. Konstruu eksterteran parkon por profiti de la senprecedenca ondo de intereso.
<Future - Future World>
STR_SCNR :Estonto - Estonta Mondo
STR_SCNR :Ĝemeloj-Urbo
STR_PARK :Ĝemeloj-Urbo
STR_DTLS :Montru vian inventeman, utopian konceptadon de la estonteco - kreu futurisman parko-dezegnaĵon, kiu enkorpigas la plej modernajn atrakciojn.
<Mythological - Animatronic Film Set>
STR_SCNR :Mitologia - Animatronika Filmado-Loko
STR_SCNR :Animatronikaj Burleskaĵoj
STR_PARK :Animatronikaj Burleskaĵoj
STR_DTLS :Vi ricevis la taskon de funkciigi kaj plibonigi ekzistantan amuzparkon, kiu estis konstruita ĉe malnova filmado-loko. Konstruu tributon al la pioniraj haltmovado-animistoj, kiuj unue vivigis mitajn kreitojn sur la film-ekranon.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mitologia - Naskiĝejo de Civilizo
STR_SCNR :Mitologia Frenezo
STR_PARK :Mitologia Frenezo
STR_DTLS :Vi posedas insulon de aparta arkeologia valoro. Vi decidis financi ĝian konservadon per konstrui amuzparkon surbaze de la riĉa Mitologia heredaĵo de la areo.
<Prehistoric - After the Asteroid>
STR_SCNR :Prahistoria - Post la Asteroido
STR_SCNR :Kratero-Buĉado
STR_PARK :Kratero-Buĉado
STR_DTLS :Vi posedas polvan malnovan meteor-krateron. Per vera entreprenema vigleco, vi decidis konstrui asteroidan amuzparkon kaj konverti vian ŝajne senvaloran bienon en konsiderindan riĉaĵon.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prahistoria - Ĵurasa Safario
STR_SCNR :Onda-Fervojo-Dinosaŭro
STR_PARK :Onda-Fervojo-Dinosaŭro
STR_DTLS :Vi ricevis la taskon de konstrui Ĵurasa-epokan amuzparkon. Por optimumigi la aliron de viaj vizitantoj al la ekzotikaj ekspoziciaĵoj da kreskaĵoj kaj bestoj, vi bezonos konstrui atrakciojn irantajn super kaj en la valon.
<Prehistoric - Stone Age>
STR_SCNR :Prahistoria - Ŝtonepoko
STR_SCNR :Rokaj Vagaĵoj
STR_PARK :Rokaj Vagaĵoj
STR_DTLS :Por malhelpi la ŝoseo-ellaborantojn kaj konservi la misterajn antikvajn ŝtono-rondojn, vi bezonos konstrui Ŝtonepokan amuzparkon kaj gajni profiton. Tamen, eble estos defio por allogi vizitantojn, ĉar la tereno estas iom negastema.
<Roaring Twenties - Prison Island>
STR_SCNR :Muĝadaj Dudekaj - Prizono-Insulo
STR_SCNR :Alkatrazo
STR_PARK :Alkatrazo
STR_DTLS :La fifama Mallibereja Insulo - kies loĝantaro iam ŝveliĝis per piratistoj kaj eldevigantoj - nun estas aĉetebla. Vi decidis transformi ĝin en supran turisman vidindaĵon, kaj mono estas neniu problemo.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Muĝadaj Dudekaj - Schneider-Trofeo
STR_SCNR :Schneider-Marbordoj
STR_PARK :Schneider-Marbordoj
STR_DTLS :La 75-a datreveno de la Schneider-Trofeo-venko de via avo venas en kelkaj jaroj. Vi honoros lian atingon per konstrui amuzparkon surbaze de la fama hidroplano-vetkuro.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Muĝadaj Dudekaj - Ĉielskrapantoj
STR_SCNR :Metropolo
STR_PARK :Metropolo
STR_DTLS :Vi posedas malplenan teron proksime de la malaltaĵo-parto de la urbo. Por akiri la plej grandan parton de via urba propraĵo, konstruu ĉielskrapanto-temitan amuzparkon inspiritan de la altegiĝia artodekora arkitekturo de la dudekaj.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rokenrolo - La Potenco de Floroj
STR_SCNR :Woodstock-Festivalo
STR_PARK :Woodstock-Festivalo
STR_DTLS :Granda jara muzikfestivalo okazas sur via tereno. Konstruu mojosan amuzparkon por teni la liberaniman spektantaron amuzita.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rokenrolo - Rokenrolo
STR_SCNR :La Revivigo de Rokenrolo
STR_PARK :La Revivigo de Rokenrolo
STR_DTLS :Ĉi tiu maljuniĝa amuzparko vidis pli bonajn tagojn. Helpu la posedanton doni al ĝi eksmodan rokenrolan renovigon, kaj transformi la lokon en sukcesan ejon.

View File

@ -4,7 +4,7 @@
STR_0000 :
STR_0001 :{STRINGID} {COMMA16}
STR_0002 :Montaña Rusa Espiral
STR_0003 :Montaña Rusa En Pie
STR_0003 :Montaña Rusa de pie
STR_0004 :Montaña Rusa Colgante
STR_0005 :Montaña Rusa Invertida
STR_0006 :Montaña Rusa Infantil
@ -54,7 +54,7 @@ STR_0049 :Casa Encantada
STR_0050 :Sala de primeros auxilios
STR_0051 :Circo
STR_0052 :Tren fantasma
STR_0053 :Montaña Rusa En Pie Tornado
STR_0053 :Montaña Rusa de pie Tornado
STR_0054 :Montaña Rusa de Madera
STR_0055 :Montaña de fricción lateral
STR_0056 :Ratón Loco
@ -98,6 +98,7 @@ STR_0093 :Montaña Rusa Híbrida
STR_0094 :Montaña Rusa de un solo carril
STR_0095 :Montaña Rusa Alpina
STR_0096 :Montaña Rusa de madera clásica
STR_0097 :Montaña Rusa de pie clásica
STR_0512 :Una montaña rusa pequeña de acero con una subida en espiral y vagones con asientos en línea.
STR_0513 :Una montaña rusa en el que los pasajeros permanecen de pie.
STR_0514 :Los vagones suspendidos bajo los raíles se balancean hacia los lados en las curvas.
@ -181,12 +182,13 @@ STR_0603 :Una montaña rusa estilo de madera con vías de acero, lo que le pe
STR_0604 :Los pasajeros viajan en fila india en una pista de monorraíl estrecha, mientras corren a través de inversiones estrechas y cambios de dirección.
STR_0605 :Los pasajeros bajan por una serpenteante vía de acero, frenando para controlar su velocidad.
STR_0606 :Una montaña rusa de madera de estilo antiguo con un recorrido rápido y bruto, con muchas caídas, algunas fuerzas G laterales, y diseñada para ofrecer una experiencia fuera de control.
STR_0607 :Una intensa montaña rusa en espiral de acero y de estilo antiguo en la que los pasajeros viajan de pie.
STR_0767 :Visitante {INT32}
STR_0768 :Manitas {INT32}
STR_0769 :Mecánico {INT32}
STR_0770 :Guardia {INT32}
STR_0771 :Animador {INT32}
STR_0777 :Parque sin nombre{POP16}{POP16}
STR_0777 :Parque sin nombre
STR_0778 :Señal
STR_0779 :1
STR_0780 :2
@ -564,10 +566,10 @@ STR_1172 :{YELLOW}{STRINGID}
STR_1173 :Construir senderos
STR_1174 :Cartel de señal interfiere
STR_1175 :No se puede construir esto sobre una pendiente
STR_1176 :No se puede construir este camino aquí…
STR_1177 :No se puede quitar este camino de aquí…
STR_1176 :No se puede construir un sendero aquí…
STR_1177 :No se puede quitar este sendero de aquí…
STR_1178 :Pendiente del terreno no apto
STR_1179 :Camino interfiere
STR_1179 :Sendero interfiere
STR_1180 :¡No se puede construir bajo el agua!
STR_1181 :Senderos
STR_1182 :Tipo
@ -577,8 +579,8 @@ STR_1185 :Dirección
STR_1186 :Cuesta abajo
STR_1187 :Nivel del suelo
STR_1188 :Cuesta arriba
STR_1189 :Construye el camino seleccionado
STR_1190 :Eliminar la sección de camino previo
STR_1189 :Construye el sendero seleccionado
STR_1190 :Eliminar la sección de sendero previo
STR_1191 :{BLACK}{STRINGID}
STR_1192 :{OUTLINE}{RED}{STRINGID}
STR_1193 :{WINDOW_COLOUR_2}{STRINGID}
@ -1041,7 +1043,7 @@ STR_1649 :“¡Me estoy quedando sin dinero!”
STR_1650 :“¡Wow! ¡Están construyendo una nueva atracción!”
STR_1653 :“… ¡Y aquí estamos en {STRINGID}!”
STR_1654 :{WINDOW_COLOUR_2}Pensamientos recientes:
STR_1655 :Construir camino a nivel del suelo.
STR_1655 :Construir sendero a nivel del suelo.
STR_1656 :Construir puente o túnel.
STR_1657 :{WINDOW_COLOUR_2}Atracción preferida:
STR_1658 :{WINDOW_COLOUR_2}Intensidad: {BLACK}menos de {COMMA16}
@ -1738,12 +1740,12 @@ STR_2382 :Tierra
STR_2383 :Agua
STR_2384 :{WINDOW_COLOUR_2}Tu objetivo:
STR_2385 :{BLACK}Ninguno
STR_2386 :{BLACK}Tener al menos {COMMA16} visitantes en tu parque a finales de {MONTHYEAR}, con una valoración del parque de al menos 600
STR_2386 :{BLACK}Tener al menos {COMMA32} visitantes en tu parque a finales de {MONTHYEAR}, con una valoración del parque de al menos 600
STR_2387 :{BLACK}Conseguir un valor del parque {POP16}{POP16}{CURRENCY} a final de {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}¡Diviértete!
STR_2389 :{BLACK}¡Construye el mejor {STRINGID} que puedas!
STR_2390 :{BLACK}Tener al menos 10 tipos de montañas rusas distintas operando en el parque, cada una con un valor de emoción de al menos 6.00
STR_2391 :{BLACK}Tener al menos {COMMA16} visitantes en tu parque. ¡No dejes que la valoración baje de 700 en ningún momento!
STR_2391 :{BLACK}Tener al menos {COMMA32} visitantes en tu parque. ¡No dejes que la valoración baje de 700 en ningún momento!
STR_2392 :{BLACK}Conseguir unos ingresos mensuales por venta de entradas a atracciones de al menos {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}Tener al menos 10 tipos de montañas rusas distintas operando en el parque, cada una con una longitud mínima de {LENGTH}, y un valor de emoción de al menos 7.00
STR_2394 :{BLACK}Terminar de construir 5 de las montañas rusas no terminadas en este parque, diseñándolas de modo que tengan un valor de emoción de al menos {POP16}{POP16}{COMMA2DP32} cada una
@ -2054,7 +2056,7 @@ STR_2851 :Escenario ya instalado
STR_2852 :Vía ya instalada
STR_2853 :¡Prohibido por las autoridades locales!
STR_2854 :{RED}¡Los visitantes no encuentran la entrada de {STRINGID}!{NEWLINE}Construye un sendero hacia la entrada
STR_2855 :{RED}¡{STRINGID} no tiene un camino de salida!{NEWLINE}Construye un camino desde la salida de la atracción.
STR_2855 :{RED}¡{STRINGID} no tiene un sendero de salida!{NEWLINE}Construye un sendero desde la salida de la atracción.
STR_2858 :No puedes iniciar una campaña publicitaria…
STR_2861 :{WINDOW_COLOUR_2}Bajo licencia a Infogrames Interactive Inc.
STR_2971 :Esquema de color principal
@ -2098,39 +2100,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :No se pudo cargar el archivo…
STR_3011 :El archivo contiene datos no válidos
STR_3012 :Estilo coches de choque
STR_3013 :Estilo Órgano de feria
STR_3014 :Estilo fanfarria romana
STR_3015 :Estilo oriental
STR_3016 :Estilo marciano
STR_3017 :Estilo tambores jungla
STR_3018 :Estilo egipcio
STR_3019 :Estilo juguete
STR_3020 :
STR_3021 :Estilo espacio
STR_3022 :Estilo terror
STR_3023 :Estilo tecno
STR_3024 :Estilo suave
STR_3025 :Estilo verano
STR_3026 :Estilo acuático
STR_3027 :Estilo salvaje oeste
STR_3028 :Estilo jurásico
STR_3029 :Estilo rock
STR_3030 :Estilo ragtime
STR_3031 :Estilo fantasía
STR_3032 :Estilo rock 2
STR_3033 :Estilo hielo
STR_3034 :Estilo nieve
STR_3035 :Música personalizada 1
STR_3036 :Música personalizada 2
STR_3037 :Estilo medieval
STR_3038 :Estilo urbano
STR_3039 :Estilo órgano
STR_3040 :Estilo mecánico
STR_3041 :Estilo moderno
STR_3042 :Estilo pirata
STR_3043 :Estilo rock 3
STR_3044 :Estilo caramelo
STR_3045 :Selecciona el estilo de música a reproducir
STR_3047 :La autoridad local no permite demoler o modificar esta atracción
STR_3048 :Campañas de marketing prohibidas por la autoridad local
@ -2357,7 +2326,7 @@ STR_3305 :{WINDOW_COLOUR_2}Ingreso mensual:
STR_3306 :{WINDOW_COLOUR_2}Ganancia mensual:
STR_3307 :{WINDOW_COLOUR_2}Longitud mínima:
STR_3308 :{WINDOW_COLOUR_2}Rango Satisfacción:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Atracciones/Juegos con orden de preservación:
@ -2377,7 +2346,7 @@ STR_3328 :No se puede avanzar a la siguiente etapa del editor…
STR_3329 :No se ha construido una entrada del parque
STR_3330 :El parque debe poseer un terreno
STR_3331 :El sendero de la entrada del parque al borde del mapa no está completo o es demasiado complejo. Ha de tener un sólo carril con el menor número posible de cruces y curvas.
STR_3332 :La entrada del parque está al revés o no tiene un camino que lleve al borde del mapa
STR_3332 :La entrada del parque está al revés o no tiene un sendero que lleve al borde del mapa
STR_3333 :Exportar complementos al guardar el juego
STR_3334 :Selecciona si los complementos adicionales (datos no distribuidos con el juego principal) utilizados en un escenario deben exportarse al guardar el juego, lo que permite que otros jugadores que no tengan esos complementos puedan abrirlo.
STR_3335 :Diseñador de Vías - Selecciona el tipo de Atracción y Vehículo
@ -2921,7 +2890,7 @@ STR_5755 :Versión de Software Incorrecto (Versión del servidor {STRING})
STR_5756 :Contraseña Incorrecta
STR_5757 :Servidor Lleno
STR_5758 :{OUTLINE}{GREEN}{STRING} se ha unido al juego
STR_5759 :Descargando mapa … ({INT32} / {INT32}) KiB
STR_5759 :Descargando mapa …
STR_5760 :Dólar de Hong Kong (HK$)
STR_5761 :Nuevo dólar de Taiwán (NT$)
STR_5762 :Yuan Chino (CN¥)
@ -3140,7 +3109,7 @@ STR_5980 :Texto de bandera: {BLACK}{STRINGID}
STR_5981 :No es una bandera
STR_5982 :Tipo de escenario grande: {BLACK}{COMMA16}
STR_5983 :ID pieza de escenario grande: {BLACK}{COMMA16}
STR_5984 :Caminos Bloqueados:
STR_5984 :Senderos Bloqueados:
STR_5985 :Nueva Carpeta
STR_5986 :Escribe el nombre de la nueva carpeta
STR_5987 :No se puede crear la carpeta
@ -3377,7 +3346,7 @@ STR_6257 :Translúcido
STR_6258 :Transparente
STR_6259 :Deshabilitado
STR_6260 :Mostrar casillas bloqueadas
STR_6261 :Mostrar caminos anchos
STR_6261 :Mostrar senderos anchos
STR_6262 :Volumen Maestro
STR_6263 :Activar o desactivar todos los sonidos
STR_6264 :Usar siempre explorador de archivos del sistema
@ -3453,7 +3422,7 @@ STR_6343 :Inspector de cuadrícula: Aumentar coordenada Y
STR_6344 :Inspector de cuadrícula: Disminuir coordenada Y
STR_6345 :Inspector de cuadrícula: Aumentar altura del elemento
STR_6346 :Inspector de cuadrícula: Disminuir altura del elemento
STR_6347 :¡Agregados a los caminos no se pueden añadir en cruces de nivel!
STR_6347 :¡Adiciones a los senderos no se pueden colocar en cruces de nivel!
STR_6348 :¡Primero quita el cruce de nivel!
STR_6349 :Secuencia de la pantalla de inicio al azar
STR_6350 :Distribuir
@ -3484,7 +3453,7 @@ STR_6374 :G
STR_6375 :Paseo Desconocido
STR_6376 :{WINDOW_COLOUR_2}Paseo en vehículo:{NEWLINE}{BLACK}{STRINGID} para {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Tipo: {BLACK}{STRINGID} para {STRINGID}
STR_6378 :Recepción de lista de objetos: {INT32} / {INT32}
STR_6378 :Recepción de lista de objetos:
STR_6379 :Se recibieron datos no válidos
STR_6380 :¡Actualización disponible!
STR_6381 :¡Únete al Discord de OpenRCT2!
@ -3555,7 +3524,7 @@ STR_6445 :Pasamanos de sendero.
STR_6446 :{WINDOW_COLOUR_2}Nombre de la superficie: {BLACK}{STRINGID}
STR_6447 :{WINDOW_COLOUR_2}Nombre del pasamanos: {BLACK}{STRINGID}
STR_6448 :Formato de objeto no soportado
STR_6449 :{WINDOW_COLOUR_2}Caminos:
STR_6449 :{WINDOW_COLOUR_2}Senderos:
STR_6450 :{BLACK}“{STRING}”
STR_6451 :{BLACK}“{STRING}” - {STRING}
STR_6452 :{WINDOW_COLOUR_2}Vende: {BLACK}{STRING}
@ -3583,7 +3552,7 @@ STR_6474 :Visitantes invisibles
STR_6475 :Empleados invisibles
STR_6476 :Vegetación invisible
STR_6477 :Escenario invisible
STR_6478 :Caminos invisibles
STR_6478 :Senderos invisibles
STR_6479 :Atracciones invisibles
STR_6480 :Vehículos invisibles
STR_6481 :Opciones de transparencia
@ -3642,8 +3611,8 @@ STR_6533 :{WINDOW_COLOUR_2}Factor de emoción: {BLACK}-{COMMA16}%
STR_6534 :{WINDOW_COLOUR_2}Factor de intensidad: {BLACK}-{COMMA16}%
STR_6535 :{WINDOW_COLOUR_2}Factor de náusea: {BLACK}-{COMMA16}%
STR_6536 :Este parque fue guardado en una versión más reciente de OpenRCT2. Este parque se guardó en la v{INT32}, actualmente estás en la v{INT32}.
STR_6537 :Permitir usar caminos normales como cola
STR_6538 :Muestra caminos normales en el menú desplegable de colas de la ventana Senderos.
STR_6537 :Permitir usar senderos normales como cola
STR_6538 :Muestra senderos normales en el menú desplegable de colas de la ventana Senderos.
STR_6539 :Freno cerrado
STR_6540 :{WINDOW_COLOUR_2}En especial gracias a las siguientes empresas for permitir el uso de su imagen:
STR_6541 :{WINDOW_COLOUR_2}Rocky Mountain Construction Group, Josef Wiegand GmbH & Co. KG
@ -3700,6 +3669,55 @@ STR_6591 :El empleado está reparando una atracción y no puede ser despedido
STR_6592 :El empleado está inspeccionando una atracción y no puede ser despedido.
STR_6593 :Eliminar vallas del parque
STR_6594 :Inspector de cuadricula: Alternar inclinación del muro
STR_6595 :{WINDOW_COLOUR_2}Autor: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Autores: {BLACK}{STRING}
STR_6597 :Parámetro no válido
STR_6598 :Valor fuera de rango
STR_6599 :Elemento fantasma no encontrado
STR_6600 :Globo no encontrado
STR_6601 :Empleado no encontrado
STR_6602 :Atracción no encontrada
STR_6603 :Entrada de objeto de atracción no encontrada
STR_6604 :Jugador no encontrado
STR_6605 :Elemento de entrada no encontrado
STR_6606 :Elemento de superficie no encontrado
STR_6607 :Elemento de casilla no encontrado
STR_6608 :Elemento de vía no encontrado
STR_6609 :Bloque de vía no encontrado
STR_6610 :Elemento de sendero no encontrado
STR_6611 :Elemento de muro no encontrado
STR_6612 :Elemento de banner no encontrado
STR_6613 :Recargar objeto
STR_6614 :No se puede cambiar el precio de la entrada al parque
STR_6615 :La vía en esta casilla necesita agua
STR_6616 :Acción no válida para ese tipo de trabajador
STR_6617 :No se puede intercambiar el elemento de la casilla consigo mismo
STR_6618 :No se puede poner ni quitar restricción al objeto…
STR_6619 :¡Este tipo de objeto no puede ser restringido!
STR_6620 :¡Objeto no encontrado!
STR_6621 :Restringir
STR_6622 :Restringir objeto al Editor de Escenarios y el modo Sandbox.
STR_6623 :Escribe help para ver la lista de comandos disponibles. Escribe hide para ocultar la consola.
STR_6624 :Inspector de cuadrícula: Ordernar elementos
STR_6625 :Color no válido
STR_6626 :La animación está reflejada
STR_6627 :¡Velocidad de vía demasiado alta!
STR_6628 :¡Sólo puede ser colocado en los bordes del sendero!
STR_6629 :Alinear los botones de la barra de herramientas centrados horizontalmente
STR_6630 :Este ajuste alineará los botones de la barra de herramientas horizontalmente en el centro de la pantalla. La forma tradicional de alinearlos es en la esquina izquierda y derecha.
STR_6631 :Cargando…
STR_6632 :Comprobando archivos de objeto…
STR_6633 :Comprobando archivos de escenario…
STR_6634 :Comprobando archivos de diseño de vía…
STR_6635 :Comprobando archivos de recurso…
STR_6636 :Comprobando secuencias de título…
STR_6637 :Cargando secuencia de título…
STR_6638 :Interfaz ampliada
STR_6639 :Modifica la interfaz para que sea más fácil de usar con pantallas táctiles
STR_6640 :Editar paquetes de recursos…
STR_6641 :Ventana de carga/progreso
STR_6642 :{STRING} ({COMMA32} / {COMMA32})
STR_6643 :{STRING} ({COMMA32} / {COMMA32} KiB)
##############
# Escenarios #
@ -4290,89 +4308,89 @@ STR_DTLS :Construye las atracciones Six Flags faltantes, o crea tus propios d
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - Mina de diamantes
STR_SCNR :Minas de África
STR_PARK :Minas de África
STR_DTLS :Has heredado una mina de diamantes en desuso, y has encontrado un valioso diamante. Has decidido invertir ese dinero en construir un parque temático de fama mundial.
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_SCNR :Locura de espejismo
STR_PARK :Locura de espejismo
STR_DTLS :Se ha descubierto un oasis en el desierto, y constituye un hermoso lugar para un parque. También se han proporcionado los medios de transporte hasta el oasis.
<Africa - Victoria Falls>
STR_SCNR :África - Cataratas Victoria
STR_SCNR :Sobre el borde
STR_PARK :Sobre el borde
STR_DTLS :Se ha construido una presa que ofrece abundante y barata energía hidroeléctrica con la que suministrar a un parque. Tendrás que alcanzar un alto valor de parque para poder devolver el dinero del préstamo para la presa.
<Antarctic - Ecological Salvage>
STR_SCNR :Antártico - recuperación ecológica
STR_SCNR :Aventuras heladas
STR_PARK :Aventuras heladas
STR_DTLS :La agencia de medio ambiente recurre a ti para transformar una vieja refinería, en una atracción turística de primera. El terreno es barato, pero los intereses son elevados. Puedes vender los viejos edificios como chatarra.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Mejora turística de la Gran Muralla China
STR_SCNR :Gran Muralla China
STR_PARK :Gran Muralla China
STR_DTLS :Las autoridades han decidido mejorar el turismo en torno a la Gran Muralla construyendo un parque temático en el terreno adyacente. ¡El dinero no es un problema
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Recuperación costera japonesa
STR_SCNR :Costa Okinawa
STR_PARK :Costa Okinawa
STR_DTLS :Un parque ya existente se ha quedado sin espacio. Tu única opción para seguir construyendo es ganarle terreno al mar, así que has pedido un préstamo. Las restricciones de altura de los edificios son obligatorias debido a los cimientos/rie…
<Asia - Maharaja Palace>
STR_SCNR :Asia - Palacio del Maharajá
STR_SCNR :Parque Maharajá
STR_PARK :Parque Maharajá
STR_DTLS :Has sido designado por el Maharajá para traer un poco de entretenimiento a la gran población local. Construye un parque inspirado en el palacio del Maharajá.
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_SCNR :Aventura en Ayers
STR_PARK :Aventura en Ayers
STR_DTLS :Estás ayudando al pueblo aborigen a construir un parque como parte de un programa de concienciación cultural. Necesitas a un gran número de visitantes para instruirles acerca de la herencia única del pueblo aborigen.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia; Diversión en la playa
STR_SCNR :Bárbara barbacoa playera
STR_PARK :Bárbara barbacoa playera
STR_DTLS :El parque marino de un empresario local se ha arruinado. Tú ya tienes un pequeño parque y tienes que ganar suficiente dinero para comprar el otro parque a la compañía de construcción. Tendrás que desarrollar tu propio parque para crea…
<Europe - European Cultural Festival>
STR_SCNR :Europe - Festival cultural europeo
STR_SCNR :Extravagancia europea
STR_PARK :Extravagancia europea
STR_DTLS :Te han traído aquí para que te ocupes de una atracción europea cultural para visitantes, y tienes que aumentar el número de asistentes para poder devolver el subsidio de la UE al final del periodo parlamentario europeo actual.
<Europe - Renovation>
STR_SCNR :Europa - Renovación
STR_SCNR :Desde las cenizas
STR_PARK :Desde las cenizas
STR_DTLS :Un viejo parque se encuentra en mal estado. Has recibido una subvención de la Unión Europea para devolver a esta depauperada área a su antigua gloria. Tendrás que renovar el parque y ganar lo suficiente para pagar la subvención.
<N. America - Extreme Hawaiian Island>
STR_SCNR :N. América - Isla hawaiana extrema
STR_SCNR :Waikiki Guay
STR_PARK :Waikiki Guay
STR_DTLS :Las gentes de Hawai se han aburrido de practicar surf y ahora buscan algo más intenso. Tienes que construir un parque para satisfacerlos, y conservar alto el índice de atractivo turístico del área.
<North America - Grand Canyon>
STR_SCNR :N. América - Gran Cañón
STR_SCNR :Calamidades en el cañon
STR_PARK :Calamidades en el cañon
STR_DTLS :Debes construir un parque en el terreno que hay a ambos lados de este tesoro natural, aunque tienes la oportunidad de comprar las tierras vecinas a los indios nativos americanos. Tendrás que cumplir el objetivo de mantener a la población …
<North America - Rollercoaster Heaven>
STR_SCNR :N. América - Paraíso de montañas rusas
STR_SCNR :Paraíso de montañas rusas
STR_PARK :Paraíso de montañas rusas
STR_DTLS :Eres un exitoso magnate de los negocios que se ha tomado cuatro años sabáticos. Tu deseo es construir un parque sin limitaciones de dinero.
<South America - Inca Lost City>
STR_SCNR :Sudamérica; Ciudad perdida inca
STR_SCNR :Fundador de la ciudad perdida
STR_PARK :Fundador de la ciudad perdida
STR_DTLS :Para impulsar aún más el turismo local, tienes que construir un parque que esté a tono con el entorno que lo rodea, y respetando las restricciones de altura.
STR_DTLS :Para impulsar aún más el turismo local, tienes que construir un parque que esté en sintonía con el entorno que lo rodea.
<South America - Rain Forest Plateau>
STR_SCNR :Sudamérica - Meseta selvática
STR_SCNR :Aventuras en la selva
STR_PARK :Aventuras en la selva
STR_DTLS :En esta valiosa selva el espacio es limitado, tendrás que apretujarte tanto como puedas en el claro existente, con el fin de proporcionar una alternativa viable para la industria maderera local.
<South America - Rio Carnival>
STR_SCNR :Sudamérica - Carnaval de Río
STR_SCNR :Costas de Sugarloaf
STR_PARK :Costas de Sugarloaf
STR_DTLS :Gestionas un pequeño parque cerca de Río, pero el banco te ha retirado su préstamo. Tendrás que aumentar rápidamente tu capacidad de ganancias para pagar esta deuda inesperada.
@ -4381,72 +4399,72 @@ STR_DTLS :Gestionas un pequeño parque cerca de Río, pero el banco te ha ret
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Edad media, castillo
STR_SCNR :El castillo en el risco
STR_PARK :El castillo en el risco
STR_DTLS :Los miembros de una asociación local de recreación de batallas históricas se toman su afición muy en serio. Te han confiado la construcción de un parque temático de la edad media en los terrenos del Castillo del risco.
<Dark Age - Robin Hood>
STR_SCNR :Edad media, Robin Hood
STR_SCNR :El bosque de Sherwood
STR_PARK :El bosque de Sherwood
STR_DTLS :Para quitarles el dinero a los ricos y dárselo a los pobres, tus alegres compañeros y tú habéis decidido construir un parque temático en el bosque de Sherwood.
<Future - First Encounters>
STR_SCNR :Futuro, primer contacto
STR_SCNR :Exceso extraterrestre
STR_PARK :Exceso extraterrestre
STR_DTLS :¡Se ha descubierto vida en un planeta distante Construye un parque temático basado en los extraterrestres para sacar dinero del interés sin precedentes que ha despertado el tema.
<Future - Future World>
STR_SCNR :Futuro, el mundo futuro
STR_SCNR :Ciudad Géminis
STR_PARK :Ciudad Géminis
STR_DTLS :Demuestra tu inventiva y utópica visión del futuro, crea un parque de diseño futurista que incorpore atracciones de última tecnología.
<Mythological - Animatronic Film Set>
STR_SCNR :Mitológica, estudio de cine animatrónico
STR_SCNR :Animatrónica de los antiguos
STR_PARK :Animatrónica de los antiguos
STR_DTLS :Se te ha encargado dirigir y mejorar un parque temático ya existente sobre unos antiguos estudios de cine. Rinde tributo a los pioneros de las animaciones que fueron los primeros en llevar a la gran pantalla las criaturas míticas.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mitológico, cuna de la civilización
STR_SCNR :Locura mitológica
STR_PARK :Locura mitológica
STR_DTLS :Posees una isla de cierto valor arqueológico. Has decidido financiar su conservación construyendo un parque temático basado en la riqueza de la tradición mitológica de la zona.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistórica, después del asteroide
STR_SCNR :Carnicería en el cráter
STR_PARK :Carnicería en el cráter
STR_DTLS :Posees un antiguo cráter de meteorito. Siguiendo una clara vocación industrial, has decidido construir un parque temático de asteroides y convertir tus tierras aparentemente sin valor en una considerable fortuna.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistórica, safari jurásico
STR_SCNR :Montañasauro
STR_PARK :Montañasauro
STR_DTLS :Tu misión es construir un parque de atracciones basado en el jurásico. Para optimizar el acceso de los visitantes a las exóticas exhibiciones de plantas y animales, tendrás que construir atracciones que suban y bajen del valle.
<Prehistoric - Stone Age>
STR_SCNR :Prehistórica, edad de piedra
STR_SCNR :Un paseo por las piedras
STR_PARK :Un paseo por las piedras
STR_DTLS :Para combatir a los promotores de una autopista y preservar los antiguos círculos de piedra, debes construir un parque temático de la edad de piedra y hacerlo rentable. Pero atraer visitantes no es fácil por el terreno poco acogedor.
<Roaring Twenties - Prison Island>
STR_SCNR :Los locos años veinte, la isla prisión
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :La infame isla prisión, antes habitada por contrabandistas y estafadores, ahora está a la venta. Has decidido convertirla en una atracción turística de primer orden ¡y el dinero no es un problema
<Roaring Twenties - Schneider Cup>
STR_SCNR :Los locos años veinte, la copa Schneider
STR_SCNR :Las costas de Schneider
STR_PARK :Las costas de Schneider
STR_DTLS :En pocos años se cumplirá el 75 aniversario de la victoria de tu abuelo en la copa Schneider. Vas a honrar su logro construyendo un parque temático basado en la famosa carrera de hidroaviones.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Los locos años veinte, rascacielos
STR_SCNR :Metrópolis
STR_PARK :Metrópolis
STR_DTLS :Posees una parcela vacía en la parte baja de la ciudad. Para exprimir al máximo tu propiedad, decides construir un parque temático basado en los rascacielos y la arquitectura Art Decó de los años veinte.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock & Roll - Poder florar
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :En tus tierras se desarrolla todos los años un gran festival musical. Construye un parque temático para mantener a la audiencia entretenida.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock & Roll - Rock & Roll
STR_SCNR :La resurrección del Rock & Roll
STR_PARK :La resurrección del Rock & Roll
STR_DTLS :Este antiguo parque temático ha visto tiempos mejores. Ayuda al propietario a darle un aspecto más rockanrolero y convierte el lugar en un negocio próspero.

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@ STR_0013 :Balade en voiture
STR_0014 :Chute libre lancée
STR_0015 :Bobsleigh
STR_0016 :Tour dobservation
STR_0017 :Montagnes russe looping
STR_0017 :Montagnes russes looping
STR_0018 :Canotube
STR_0019 :Train de la mine
STR_0020 :Télésiège
@ -49,7 +49,7 @@ STR_0042 :Vrille
STR_0043 :Anneaux de lespace
STR_0044 :Chute libre renversée
STR_0045 :Ascenseur
STR_0046 :Montagnes russes en chute vert.
STR_0046 :Montagnes russes à chute verticale
STR_0047 :Distributeur de monnaie
STR_0048 :Twist
STR_0049 :Maison hantée
@ -67,7 +67,7 @@ STR_0060 :Manège Inconnu (3A)
STR_0061 :Virginia Reel
STR_0062 :Bateaux éclabousseurs
STR_0063 :Mini hélicoptères
STR_0064 :Mont. russes — posit. couchée
STR_0064 :Montagnes russes en position couchée
STR_0065 :Monorail suspendu
STR_0066 :Manège Inconnu (40)
STR_0067 :Inverseur
@ -80,7 +80,7 @@ STR_0073 :Maison biscornue
STR_0074 :Vélos monorail
STR_0075 :Montagnes compactes inversées
STR_0076 :Montagnes aquatiques
STR_0077 :Voiture propulsée dans les airs
STR_0077 :Montagnes russes verticales à air comprimé
STR_0078 :Epingle à cheveux inversée
STR_0079 :Tapis volant
STR_0080 :Balade sous-marine
@ -100,6 +100,7 @@ STR_0093 :Montagnes russes hybrides
STR_0094 :Montagnes russes à rail unique
STR_0095 :Montagnes russes alpines
STR_0096 :Montagnes russes en bois classiques
STR_0097 :Montagnes russes debout classiques
STR_0512 :Des voitures individuelles descendent des pentes régulières en virage
STR_0513 :Grand huit que les passagers parcourent debout
STR_0514 :Des voitures suspendues sous la voie se balancent dans les virages des montagnes russes
@ -183,12 +184,13 @@ STR_0603 :Train de montagnes russes en bois avec des rails en acier, permetta
STR_0604 :Les passagers parcourent une voie à rail unique dans des voitures mono-places, à travers des inversions et des virages serrés
STR_0605 :Les passagers dévalent une voie en acier sinueuse, freinant pour contrôler leur vitesse
STR_0606 :Une montagne russe en bois au style ancien, rapide et turbulente, avec de nombreux moments en suspension, quelques forces latérales et conçues pour paraître hors de contrôle
STR_0607 :Les passagers parcourent debout une montagne russe en acier intense au style ancien, ponctuée dinversions
STR_0767 :Visiteur {INT32}
STR_0768 :Agent dentretien {INT32}
STR_0769 :Mécanicien {INT32}
STR_0770 :Agent de sécurité {INT32}
STR_0771 :Animateur {INT32}
STR_0777 :Parc sans nom{POP16}{POP16}
STR_0777 :Parc sans nom
STR_0778 :Panneau
STR_0779 :1er
STR_0780 :2
@ -989,7 +991,7 @@ STR_1594 :« Cette soupe aux raviolis de {STRINGID} est vraiment une bonne a
STR_1595 :« Cette soupe aux boulettes de viande de {STRINGID} est vraiment une bonne affaire »
STR_1596 :« Ce jus de fruits de {STRINGID} est vraiment une bonne affaire »
STR_1597 :« Ce lait de soja de {STRINGID} est vraiment une bonne affaire »
STR_1598 :« Ce sujongkwa de {STRINGID} est vraiment une bonne affaire »
STR_1598 :« Ce Sujeonggwa de {STRINGID} est vraiment une bonne affaire »
STR_1599 :« Ce sandwich de {STRINGID} est vraiment une bonne affaire »
STR_1600 :« Ce cookie de {STRINGID} est vraiment une bonne affaire »
STR_1601 :
@ -1021,7 +1023,7 @@ STR_1626 :« Je ne paierai pas si cher pour une soupe aux raviolis de {STRIN
STR_1627 :« Je ne paierai pas si cher pour une soupe aux boulettes de viandes de {STRINGID} »
STR_1628 :« Je ne paierai pas si cher pour un jus de fruits de {STRINGID} »
STR_1629 :« Je ne paierai pas si cher pour du lait de soja de {STRINGID} »
STR_1630 :« Je ne paierai pas si cher pour un sujongkwa de {STRINGID} »
STR_1630 :« Je ne paierai pas si cher pour un Sujeonggwa de {STRINGID} »
STR_1631 :« Je ne paierai pas si cher pour un sandwich de {STRINGID} »
STR_1632 :« Je ne paierai pas si cher pour un cookie de {STRINGID} »
STR_1633 :
@ -1491,7 +1493,7 @@ STR_2110 :{WINDOW_COLOUR_2}Prix de la soupe aux raviolis :
STR_2111 :{WINDOW_COLOUR_2}Prix de la soupe aux boulettes de viande :
STR_2112 :{WINDOW_COLOUR_2}Prix dun jus de fruits :
STR_2113 :{WINDOW_COLOUR_2}Prix dun lait de soja :
STR_2114 :{WINDOW_COLOUR_2}Prix dun sujongkwa :
STR_2114 :{WINDOW_COLOUR_2}Prix dun Sujeonggwa :
STR_2115 :{WINDOW_COLOUR_2}Prix dun sandwich :
STR_2116 :{WINDOW_COLOUR_2}Prix dun cookie :
STR_2117 :{WINDOW_COLOUR_2}
@ -1510,7 +1512,7 @@ STR_2132 :Soupe aux raviolis
STR_2133 :Soupe aux boulettes de viande
STR_2134 :Jus de fruits
STR_2135 :Lait de soja
STR_2136 :Sujongkwa
STR_2136 :Sujeonggwa
STR_2137 :Sandwich
STR_2138 :Cookie
STR_2139 :Bol vide
@ -1529,7 +1531,7 @@ STR_2154 :Soupes aux raviolis
STR_2155 :Soupes aux boulettes de viande
STR_2156 :Jus de fruits
STR_2157 :Laits de soja
STR_2158 :Sujongkwa
STR_2158 :Sujeonggwa
STR_2159 :Sandwichs
STR_2160 :Cookies
STR_2161 :Bols vides
@ -1548,7 +1550,7 @@ STR_2176 :de la soupe aux raviolis
STR_2177 :de la soupe aux boulettes de viande
STR_2178 :un jus de fruits
STR_2179 :du lait de soja
STR_2180 :du Sujongkwa
STR_2180 :du Sujeonggwa
STR_2181 :un sandwich
STR_2182 :un cookie
STR_2183 :un bol vide
@ -1567,7 +1569,7 @@ STR_2198 :Soupe aux raviolis
STR_2199 :Soupe aux boulettes de viande
STR_2200 :Jus de fruits
STR_2201 :Lait de soja
STR_2202 :Sujongkwa
STR_2202 :Sujeonggwa
STR_2203 :Sandwich
STR_2204 :Cookie
STR_2205 :Bol vide
@ -1744,12 +1746,12 @@ STR_2382 :Terrain
STR_2383 :Eau
STR_2384 :{WINDOW_COLOUR_2}Votre objectif :
STR_2385 :{BLACK}Aucun
STR_2386 :{BLACK}Avoir au moins {COMMA16} visiteurs dans votre parc à la fin {MONTHYEAR}, avec une évaluation de parc dau moins 600
STR_2386 :{BLACK}Avoir au moins {COMMA32} visiteurs dans votre parc à la fin {MONTHYEAR}, avec une évaluation de parc dau moins 600
STR_2387 :{BLACK}Atteindre une valeur de parc dau moins {POP16}{POP16}{CURRENCY} à la fin {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Amusez-vous!
STR_2389 :{BLACK}Construisez la meilleure attraction {STRINGID} possible!
STR_2390 :{BLACK}Avoir construit au moins 10 montagnes russes différentes dans votre parc, chacune dentre elles atteignant un indice dengouement dau moins 6.00
STR_2391 :{BLACK}Avoir reçu au moins {COMMA16} visiteurs dans votre parc. Lévaluation du parc ne doit jamais descendre en dessous des 700!
STR_2391 :{BLACK}Avoir reçu au moins {COMMA32} visiteurs dans votre parc. Lévaluation du parc ne doit jamais descendre en dessous des 700!
STR_2392 :{BLACK}Obtenir un revenu mensuel avec les tickets dattraction dau moins {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}Avoir construit au moins 10 montagnes russes différentes dans votre parc, chacune dentre elles atteignant une longueur dau moins {LENGTH}, avec un indice dengouement dau moins 7.00
STR_2394 :{BLACK}Terminer la construction des 5 montagnes russes entamées dans ce parc, avec une conception leur permettant datteindre un indice dengouement dau moins {POP16}{POP16}{COMMA2DP32} chacune
@ -2002,7 +2004,7 @@ STR_2793 :(Réussi par {STRINGID})
STR_2794 :{WINDOW_COLOUR_2}Réussi par : {BLACK}{STRINGID}{NEWLINE}{WINDOW_COLOUR_2} avec une valeur de société de : {BLACK}{CURRENCY}
STR_2795 :Trier
STR_2796 :Trie la liste des attractions dans lordre avec le type dinformations affiché
STR_2797 :Défiler la vue quand le curseur atteint le bord de lécran
STR_2797 :Défiler la vue quand le curseur est au bord de lécran
STR_2798 :Fait défiler la vue quand le curseur atteint le bord de lécran
STR_2799 :Voir ou modifier les touches de raccourci
STR_2800 :{WINDOW_COLOUR_2}Nombre total dentrées : {BLACK}{COMMA32}
@ -2104,39 +2106,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Impossible de charger le fichier…
STR_3011 :Le fichier contient des données non valides
STR_3012 :Auto-tamponneuse
STR_3013 :Orgue champ de foire
STR_3014 :Fanfare romaine
STR_3015 :Oriental
STR_3016 :Alien
STR_3017 :Tambours de la jungle
STR_3018 :Egyptien
STR_3019 :Jouets par milliers
STR_3020 :
STR_3021 :Espace
STR_3022 :Horreur
STR_3023 :Techno
STR_3024 :Tranquille
STR_3025 :Estival
STR_3026 :Aquatique
STR_3027 :Western
STR_3028 :Jurassique
STR_3029 :Rock
STR_3030 :Ragtime
STR_3031 :Imaginaire
STR_3032 :Rock 2
STR_3033 :Glace
STR_3034 :Neige
STR_3035 :Musique perso 1
STR_3036 :Musique perso 2
STR_3037 :Médiéval
STR_3038 :Urbain
STR_3039 :Orgue
STR_3040 :Mécanique
STR_3041 :Moderne
STR_3042 :Pirates
STR_3043 :Rock 3
STR_3044 :Bonbon-ville
STR_3045 :Choisit le style de musique
STR_3047 :Les autorités locales interdisent la démolition ou modification de cette attraction
STR_3048 :Les autorités locales interdisent toute campagne marketing
@ -2363,7 +2332,7 @@ STR_3305 :{WINDOW_COLOUR_2}Revenu mensuel :
STR_3306 :{WINDOW_COLOUR_2}Bénéfice mensuel :
STR_3307 :{WINDOW_COLOUR_2}Longueur minimum :
STR_3308 :{WINDOW_COLOUR_2}Indice dengouement :
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Attractions protégées :
@ -2925,7 +2894,7 @@ STR_5755 :Mauvaise version du programme (le serveur utilise {STRING})
STR_5756 :Mauvais mot de passe
STR_5757 :Serveur plein
STR_5758 :{OUTLINE}{GREEN}{STRING} a rejoint la partie
STR_5759 :Téléchargement de la carte… ({INT32}/{INT32} Kio)
STR_5759 :Téléchargement de la carte…
STR_5760 :Dollars de Hong Kong (HK$)
STR_5761 :Nouveau Dollar Taïwanais (NT$)
STR_5762 :Yuan Chinois (CN¥)
@ -3489,7 +3458,7 @@ STR_6374 :C
STR_6375 :Attraction inconnue
STR_6376 :{WINDOW_COLOUR_2}Véhicule : {NEWLINE}{BLACK}{STRINGID} pour {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Type : {BLACK}{STRINGID} pour {STRINGID}
STR_6378 :Réception de la liste des objets : {INT32} / {INT32}
STR_6378 :Réception de la liste des objets :
STR_6379 :Donnée(s) invalide(s) reçues
STR_6380 :Mise à jour disponible!
STR_6381 :Rejoindre le Discord dOpenRCT2!
@ -3703,6 +3672,56 @@ STR_6589 :Placer les boutons de fenêtre à gauche
STR_6590 :Place les boutons de fenêtre (par exemple pour fermer la fenêtre) sur la gauche de la barre de titre au lieu de la droite
STR_6591 :Lemployé est en train de réparer une attraction et ne peut pas être licencié.
STR_6592 :Lemployé est en train dinspecter une attraction et ne peut pas être licencié.
STR_6593 :Retirer les clôtures du parc
STR_6594 :Inspecteur de cases: Permuter la pente des murs
STR_6595 :{WINDOW_COLOUR_2}Créé par : {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Créé par : {BLACK}{STRING}
STR_6597 :Paramètre invalide
STR_6598 :Valeur hors plage
STR_6599 :Élément fantôme introuvable
STR_6600 :Ballon introuvable
STR_6601 :Employé introuvable
STR_6602 :Attraction introuvable
STR_6603 :Entrée dobjet dattraction introuvable
STR_6604 :Joueur/joueuse introuvable
STR_6605 :Élément dentrée introuvable
STR_6606 :Élément de surface introuvable
STR_6607 :Élément de case introuvable
STR_6608 :Élément de voie introuvable
STR_6609 :Bloc de voie introuvable
STR_6610 :Élément de chemin introuvable
STR_6611 :Élément de mur introuvable
STR_6612 :Élément de bannière introuvable
STR_6613 :Recharger lobjet
STR_6614 :Impossible de changer le prix dentrée du parc
STR_6615 :La voie a besoin deau sur cette case
STR_6616 :Action invalide pour ce type de personnel
STR_6617 :Impossible de permuter un élément de case avec lui-même
STR_6618 :Impossible de restreindre ou dé-restreindre lobjet…
STR_6619 :Ce type dobjet ne peut pas être restreint!
STR_6620 :Objet introuvable!
STR_6621 :Restreindre
STR_6622 :Restreint lobjet à léditeur de scénario et au mode bac à sable
STR_6623 :Tapez « help » pour une liste des commandes disponibles. Tapez « hide » pour cacher la console.
STR_6624 :Inspecteur de cases : Trier les éléments
STR_6625 :Couleur invalide
STR_6626 :Lanimation est retournée
STR_6627 :Vitesse de voie trop élevée!
STR_6628 :Ne peut être placé que sur le bord des allées!
STR_6629 :Centrer les boutons de la barre doutils
STR_6630 :Ce réglage aligne horizontalement les boutons de la barre doutil au centre de lécran, au lieu de les répartir à gauche et à droite
STR_6631 :Chargement…
STR_6632 :Vérification des fichiers dobjet…
STR_6633 :Vérification des fichiers de scénario…
STR_6634 :Vérification des fichiers de conception de voie…
STR_6635 :Vérification des packs de ressources…
STR_6636 :Vérification des séquences titre…
STR_6637 :Chargement de la séquence titre…
STR_6638 :Interface agrandie
STR_6639 :Adapte linterface à un usage tactile
STR_6642 :{STRING} ({COMMA32} / {COMMA32})
STR_6643 :{STRING} ({COMMA32} / {COMMA32} Kio)
#############
# Scenarios #
@ -4283,87 +4302,87 @@ STR_DTLS :Construisez les attractions Six Flags manquantes ou créez vos prop
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Afrique — La mine de diamants
STR_SCNR :Mines dAfrique
STR_PARK :Mines dAfrique
STR_DTLS :Vous héritez dune mine de diamants désaffectée et découvrez un diamant de grande valeur. Vous décidez dinvestir cet argent dans la construction dun parc à thème de renommée mondiale.
<Africa - Oasis>
STR_SCNR :Afrique — Loasis
STR_SCNR :Mirage fou
STR_PARK :Mirage fou
STR_DTLS :Une oasis offrant le cadre idéal pour un parc a été découverte dans le désert. Des moyens de transport ont été fournis.
<Africa - Victoria Falls>
STR_SCNR :Afrique — Chutes Victoria
STR_SCNR :Amortir la chute
STR_PARK :Amortir la chute
STR_DTLS :Un barrage offrant suffisamment de puissance hydroélectrique à faible coût pour la création dun parc a été construit. Votre but est dobtenir une haute rentabilité pour rembourser lemprunt du barrage.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctique — Sauvetage écologique
STR_SCNR :Aventures glacées
STR_PARK :Aventures glacées
STR_DTLS :Lagence pour lenvironnement vous charge de transformer une vieille raffinerie de pétrole en attraction touristique de premier ordre. Le terrain nest pas cher mais lintérêt sur lemprunt est élevé. Vous pouvez vendre les équipements.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asie — Développement de la Grande Muraille
STR_SCNR :Grande Muraille de Chine
STR_PARK :Grande Muraille de Chine
STR_DTLS :Les autorités ont décidé daccroître le tourisme dans les environs de la Grande Muraille en construisant un parc à thème sur les terrains environnants. Aucune restriction financière.
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asie — A la conquête de locéan
STR_SCNR :Côte Okinawa
STR_PARK :Côte Okinawa
STR_DTLS :Lun de vos parcs au Japon ne peut plus sétendre. Une seule possibilité : construire sur la mer. Vous contractez un emprunt et devez respecter des restrictions de hauteur en raison du risque de tremblement de terre.
<Asia - Maharaja Palace>
STR_SCNR :Asia — Le palais du maharajah
STR_SCNR :Parc Maharajah
STR_PARK :Parc Maharajah
STR_DTLS :Le maharajah vous a chargé de divertir la nombreuse population locale. Construisez un parc inspiré du palais du maharajah.
<Australasia - Ayers Rock>
STR_SCNR :Océanie — Ayers Rock
STR_SCNR :Laventure aborigène
STR_PARK :Laventure aborigène
STR_DTLS :Vous aidez les Aborigènes à construire un parc sinscrivant dans un programme de sensibilisation culturelle. Vous devez toucher un large public et lintéresser au patrimoine authentique des Aborigènes.
<Australasia - Fun at the Beach>
STR_SCNR :Océanie — Fun at the Beach
STR_SCNR :Attractions sous les tropiques
STR_PARK :Attractions sous les tropiques
STR_DTLS :Le parc maritime dun entrepreneur local fait faillite. Vous êtes à la tête dun petit parc et devez trouver les fonds nécessaires au rachat de lautre parc. Vous y parviendrez en visant la création dun immense parc combiné.
<Europe - European Cultural Festival>
STR_SCNR :Europe — Le festival culturel européen
STR_SCNR :Lextravagance européenne
STR_PARK :Lextravagance européenne
STR_DTLS :Vous avez été choisi pour reprendre un parc dattractions culturel européen et devez augmenter sa fréquentation pour pouvoir rembourser les subventions européennes à la fin du mandat parlementaire européen.
<Europe - Renovation>
STR_SCNR :Europe — Rénovation
STR_SCNR :La Renaissance
STR_PARK :La Renaissance
STR_DTLS :Un ancien parc est tombé en ruines. Vous recevez une subvention de lUnion Européenne pour rendre à cette zone défavorisée sa gloire passée. Vous devez rénover le parc et rembourser la subvention.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Amérique du Nord — Hawaii extrême
STR_SCNR :Cest parti Waikiki!
STR_PARK :Cest parti Waikiki!
STR_DTLS :Les habitants de Hawaii en ont assez de surfer et cherche des sensations plus fortes. Vous devez construire un parc qui les satisfera et qui garantira lattrait touristique de la zone.
<North America - Grand Canyon>
STR_SCNR :Amérique du Nord — Le Grand Canyon
STR_SCNR :Pas de faille possible
STR_PARK :Pas de faille possible
STR_DTLS :Vous devez construire un parc à étendue limitée de chaque côté de ce cadeau de la nature. Vous pouvez acheter les terres avoisinantes aux Indiens locaux. Vous devez remplir cet objectif pour maintenir le nombre dhabitants dans la ville.
<North America - Rollercoaster Heaven>
STR_SCNR :Amérique du Nord — Le parc de vos rêves
STR_SCNR :Le paradis des montagnes russes
STR_PARK :Le paradis des montagnes russes
STR_DTLS :Vous êtes un businessman accompli en période sabbatique de 4 ans, désirant construire un parc sans la moindre restriction financière.
<South America - Inca Lost City>
STR_SCNR :Amérique du Sud — La cité inca
STR_SCNR :Les aventuriers de la cité perdue
STR_PARK :Les aventuriers de la cité perdue
STR_DTLS :Pour dynamiser encore plus le tourisme local vous devez construire un parc en harmonie avec son environnement, avec des restrictions de hauteur.
STR_DTLS :Pour dynamiser encore plus le tourisme local vous devez construire un parc en harmonie avec son environnement.
<South America - Rain Forest Plateau>
STR_SCNR :Amérique du Sud — La forêt équatoriale
STR_SCNR :La forêt en folie
STR_PARK :La forêt en folie
STR_DTLS :Lespace est limité dans la précieuse forêt équatoriale : vous devez entasser les éléments autant que vous pouvez dans la clairière déjà existante, de manière à fournir une alternative à lindustrie sylvestre locale.
<South America - Rio Carnival>
STR_SCNR :Amérique du Sud — Le carnaval de Rio
STR_SCNR :Au pied du pain de sucre
STR_PARK :Au pied du pain de sucre
STR_DTLS :Vous dirigez un petit parc près de Rio, mais la banque a demandé le remboursement de votre prêt. Vous devez rapidement augmenter votre rentabilité pour rembourser cette dette inattendue.
@ -4371,72 +4390,72 @@ STR_DTLS :Vous dirigez un petit parc près de Rio, mais la banque a demandé
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Moyen Âge — Château
STR_SCNR :Château en bord de falaise
STR_PARK :Château en bord de falaise
STR_DTLS :Les sociétaires dune association de reconstitution de combats médiévaux prennent leur activité très au sérieux. Ils vous ont chargé de construire un parc sur le thème du Moyen Âge sur les terres dun château en bord de falaise.
<Dark Age - Robin Hood>
STR_SCNR :Moyen Âge — Robin des Bois
STR_SCNR :Forêt de Sherwood
STR_PARK :Forêt de Sherwood
STR_DTLS :Pour voler largent des riches et le donner aux pauvres, vos joyeux compères et vous-même avez décidé de construire un parc dans la forêt de Sherwood.
<Future - First Encounters>
STR_SCNR :Futur — Rencontre du 3e type
STR_SCNR :Extravagance extraterrestre
STR_PARK :Extravagance extraterrestre
STR_DTLS :Une forme de vie a été découverte sur une autre planète. Construisez un parc sur le thème des extraterrestres pour engranger un maximum de profits.
<Future - Future World>
STR_SCNR :Futur — Le monde du futur
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Faites preuve de créativité et laissez parler vos talents de visionnaire en construisant un parc futuriste proposant des attractions du dernier cri.
<Mythological - Animatronic Film Set>
STR_SCNR :Mythologique — Automates de films
STR_SCNR :Automates de lAntiquité
STR_PARK :Automates de lAntiquité
STR_DTLS :Vous êtes chargé(e) de rénover et dexploiter un parc déjà existant, construit à partir dun ancien décor de cinéma. Rendez hommage aux pionniers de lanimation dautomates qui ont donné vie à des créatures mythiques dans les salles obscures.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythologique — Berceau de la civilisation
STR_SCNR :Folie mythologique
STR_PARK :Folie mythologique
STR_DTLS :Vous possédez une île contenant des trésors archéologiques. Vous avez décidé den financer la préservation en construisant un parc sur le thème des richesses mythologiques du site.
<Prehistoric - After the Asteroid>
STR_SCNR :Préhistorique — Après lastéroïde
STR_SCNR :Cratère en folie
STR_PARK :Cratère en folie
STR_DTLS :Vous possédez un vieux cratère météoritique poussiéreux. Avec lesprit dentreprise qui vous caractérise, vous avez décidé de construire un parc sur le thème des astéroïdes et de rendre cet endroit rentable.
<Prehistoric - Jurassic Safari>
STR_SCNR :Préhistorique — Safari jurassique
STR_SCNR :Le retour des dinosaures
STR_PARK :Le retour des dinosaures
STR_DTLS :Vous êtes chargé(e) de construire un parc sur le thème du jurassique. Pour optimiser laccès des visiteurs aux plantes exotiques et aux exhibitions danimaux, vous allez devoir construire des montagnes russes parcourant la vallée.
<Prehistoric - Stone Age>
STR_SCNR :Préhistorique — Lâge de pierre
STR_SCNR :Promenade rocailleuse
STR_PARK :Promenade rocailleuse
STR_DTLS :Pour concurrencer les promoteurs dautoroutes et préserver la beauté du site, vous devrez construire un parc sur le thème de lâge de pierre et le rentabiliser. Attirer les visiteurs ne sera pas facile dans un contexte aussi inhospitalier.
<Roaring Twenties - Prison Island>
STR_SCNR :Les années folles — Le Rocher
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :La fameuse prison, autrefois remplie de trafiquants et de racketteurs, est aujourdhui à vendre. Vous avez décidé de la transformer en attraction touristique, sans restriction financière.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Les années folles — La Coupe Schneider
STR_SCNR :Course dhydravions
STR_PARK :Course dhydravions
STR_DTLS :Dans quelques années, ce sera le 75e anniversaire de la victoire de votre grand-père dans la Coupe Schneider. Vous allez lui rendre hommage en construisant un parc sur le thème de cette course légendaire dhydravions.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Les années folles — Gratte-ciel
STR_SCNR :Métropolis
STR_PARK :Métropolis
STR_DTLS :Vous possédez un terrain nu dans les faubourgs de la ville. Pour en tirer un maximum de revenus, construisez un parc sur le thème des gratte-ciel en vous inspirant de larchitecture art déco des années folles.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock & Roll — Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Un grand festival de musique se tient sur votre terrain chaque année. Construisez un parc sur le thème du mouvement hippie qui satisfera les amateurs du genre.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock & Roll — Rock & Roll
STR_SCNR :La renaissance du Rock & Roll
STR_PARK :La renaissance du Rock & Roll
STR_DTLS :Ce parc sur le thème du Rock & Roll a connu son heure de gloire. Aidez son propriétaire à le réaménager et à lui donner un second souffle.

File diff suppressed because it is too large Load Diff

View File

@ -98,6 +98,7 @@ STR_0093 :Ottovolante ibrido
STR_0094 :Ottovolante a binario singolo
STR_0095 :Ottovolante Alpino
STR_0096 :Ottovolante di legno classico
STR_0097 :Ottovolante in piedi classico
STR_0512 :Un ottovolante compatto con una salita a spirale e cadute fluide e tortuose.
STR_0513 :Un ottovolante con giro della morte dove i passeggeri si trovano in una posizione eretta
STR_0514 :I treni, sospesi sotto lottovolante, durante le curve oscillano lateralmente
@ -181,12 +182,13 @@ STR_0603 :Un ottovolante in legno con i binari in acciaio, in grado di avere
STR_0604 :I visitatori viaggiano lungo un sottile tracciato da monorotaia, attraverso strette inversioni e cambi di direzione.
STR_0605 :I visitatori scendono lungo una rotaia piena di curve, frenando per controllare la velocità del loro vagone
STR_0606 :Un ottovolante di legno vecchio stile con un percorso veloce e turbolento, con molto air-time, G laterali, progettato per farti sentire “fuori controllo”
STR_0607 :Un intenso ottovolante dacciaio vecchio stile, nel quale i passeggeri sono in posizione eretta
STR_0767 :Visitatore {INT32}
STR_0768 :Tuttofare {INT32}
STR_0769 :Meccanico {INT32}
STR_0770 :Vigilante {INT32}
STR_0771 :Intrattenitore {INT32}
STR_0777 :Parco senza nome{POP16}{POP16}
STR_0777 :Parco senza nome
STR_0778 :Cartello
STR_0779 :1°
STR_0780 :2
@ -1740,12 +1742,12 @@ STR_2382 :Terreno
STR_2383 :Acqua
STR_2384 :{WINDOW_COLOUR_2}Il tuo obiettivo:
STR_2385 :{BLACK}Nessuno
STR_2386 :{BLACK}Avere almeno {COMMA16} visitatori nel parco entro la fine di {MONTHYEAR}, con una valutazione del parco di almeno 600
STR_2386 :{BLACK}Avere almeno {COMMA32} visitatori nel parco entro la fine di {MONTHYEAR}, con una valutazione del parco di almeno 600
STR_2387 :{BLACK}Far raggiungere al parco un valore di almeno {POP16}{POP16}{CURRENCY} entro la fine di {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Divertirsi!
STR_2389 :{BLACK}Costruire il migliore {STRINGID} si possa!
STR_2390 :{BLACK}Avere 10 tipi diversi di ottovolante nel parco, ognuno con un livello di divertimento di almeno 6.00
STR_2391 :{BLACK}Avere almeno {COMMA16} visitatori nel parco. E non devi mai avere una valutazione del parco inferiore a 700!
STR_2391 :{BLACK}Avere almeno {COMMA32} visitatori nel parco. E non devi mai avere una valutazione del parco inferiore a 700!
STR_2392 :{BLACK}Incassare mensilmente tramite i biglietti delle attrazioni almeno {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}Avere 10 tipi diversi di ottovolante nel parco, ognuno della lunghezza minima di {LENGTH} e un livello di divertimento di almeno 7.00
STR_2394 :{BLACK}Finire di costruire tutti e cinque gli ottovolanti parzialmente costruiti in questo parco, facendo loro raggiungere un livello di divertimento di almeno {POP16}{POP16}{COMMA2DP32} ciascuno
@ -2099,39 +2101,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Impossibile caricare il file…
STR_3011 :Il file contiene dati non validi
STR_3012 :Stile auto da scontro
STR_3013 :Stile organo da fiera
STR_3014 :Stile fanfara romana
STR_3015 :Stile orientale
STR_3016 :Stile marziano
STR_3017 :Stile tamburi nella giungla
STR_3018 :Stile egiziano
STR_3019 :Stile giocattolo
STR_3020 :
STR_3021 :Stile spaziale
STR_3022 :Stile horror
STR_3023 :Stile techno
STR_3024 :Stile tranquillo
STR_3025 :Stile estivo
STR_3026 :Stile acquatico
STR_3027 :Stile far west
STR_3028 :Stile giurassico
STR_3029 :Stile rock
STR_3030 :Stile ragtime
STR_3031 :Stile fantastico
STR_3032 :Stile rock 2
STR_3033 :Stile ghiacciato
STR_3034 :Stile nevoso
STR_3035 :Musica personalizzata 1
STR_3036 :Musica personalizzata 2
STR_3037 :Stile medievale
STR_3038 :Stile urbano
STR_3039 :Stile organo
STR_3040 :Stile meccanico
STR_3041 :Stile moderno
STR_3042 :Stile piratesco
STR_3043 :Stile rock 3
STR_3044 :Stile dolciumi
STR_3045 :Seleziona uno stile musicale da suonare
STR_3047 :Le autorità locali vietano la demolizione o la modifica di questattrazione
STR_3048 :Campagne di marketing vietate dalle autorità locali
@ -2358,7 +2327,7 @@ STR_3305 :{WINDOW_COLOUR_2}Entrate mensili:
STR_3306 :{WINDOW_COLOUR_2}Profitto mensile:
STR_3307 :{WINDOW_COLOUR_2}Lunghezza minima:
STR_3308 :{WINDOW_COLOUR_2}Liv. divertimento:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Attrazioni sotto ordine di protezione:
@ -2922,7 +2891,7 @@ STR_5755 :Versione del software errata (il server usa {STRING})
STR_5756 :Password errata
STR_5757 :Server pieno
STR_5758 :{OUTLINE}{GREEN}{STRING} è entrato in gioco
STR_5759 :Scaricamento mappa … ({INT32} / {INT32}) KiB
STR_5759 :Scaricamento mappa …
STR_5760 :Dollari di Hong Kong (HK$)
STR_5761 :Nuovi dollari taiwanesi (NT$)
STR_5762 :Yuan cinesi (CN¥)
@ -3486,7 +3455,7 @@ STR_6374 :M
STR_6375 :Attrazione sconosciuta
STR_6376 :{WINDOW_COLOUR_2}Veicolo attrazione:{NEWLINE}{BLACK}{STRINGID} per {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Tipo: {BLACK}{STRINGID} per {STRINGID}
STR_6378 :Scaricamento lista oggetti: {INT32} / {INT32}
STR_6378 :Scaricamento lista oggetti:
STR_6379 :Ricevuti dati non validi
STR_6380 :Aggiornamento disponibile!
STR_6381 :Unisciti al Discord di OpenRCT2!
@ -3657,7 +3626,7 @@ STR_6546 :Usa lalgoritmo di calcolo dellinteresse di RollerCoaster Tyco
STR_6547 :Tutto lo scenario
STR_6548 :Mostra le ringhiere agli incroci
STR_6549 :Gli oggetti per la compatibilità non possono essere selezionati!
STR_6550 :Questa voce è inclusa per retrocompatibilità con oggetti vecchi o danneggiati. Non può essere selezionata, solo deselezionata.
STR_6550 :Questa voce è inclusa per retrocompatibilità con oggetti vecchi o danneggiati. Non può essere selezionata, ma solo deselezionata.
STR_6551 :Verde militare
STR_6552 :Verde pallido
@ -3705,6 +3674,36 @@ STR_6593 :Rimuovi recinto del parco
STR_6594 :Analizzatore celle: Attiva/disattiva inclinazione muro
STR_6595 :{WINDOW_COLOUR_2}Autore: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Autori: {BLACK}{STRING}
STR_6597 :Parametro non valido
STR_6598 :Valore fuori scala
STR_6599 :Elemento fantasma non trovato
STR_6600 :Palloncino non trovato
STR_6601 :Membro dello staff non trovato
STR_6602 :Attrazione non trovata
STR_6603 :Elemento oggetto dell'attrazione non trovata
STR_6604 :Giocatore non trovato
STR_6605 :Elemento dingresso non trovato
STR_6606 :Elemento di superficie non trovato
STR_6607 :Elemento cella non trovato
STR_6608 :Elemento percorso non trovato
STR_6609 :Blocco di tracciato non trovato
STR_6610 :Elemento di sentiero non trovato
STR_6611 :Elemento di muro non trovato
STR_6612 :Elemento cartello non trovato
STR_6613 :Ricarica oggetto
STR_6614 :Non è possibile modificare il prezzo di ingresso
STR_6615 :Il tracciato su questa cella necessita acqua
STR_6616 :Azione non valida per quel tipo di staff
STR_6617 :Non è possibile scambiare lelemento della cella con sé stesso
STR_6618 :Impossibile cambiare la limitazione delloggetto…
STR_6619 :Il tipo di oggetto non può essere sottoposto a limitazione!
STR_6620 :Oggetto non trovato!
STR_6621 :Limitato
STR_6622 :Limita loggetto alleditor degli scenari e alla modalità sandbox
STR_6623 :Digita help per una lista dei comandi disponibili. Digita hide per nascondere la console.
STR_6624 :Analizzatore celle: ordina elementi
STR_6625 :Colore non valido
STR_6626 :Lanimazione è invertita
#############
@ -4297,87 +4296,87 @@ STR_DTLS :Costruisci le attrazioni Six Flags mancanti o crea dei progetti tut
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - Miniera di diamanti
STR_SCNR :Miniere africane
STR_PARK :Miniere africane
STR_DTLS :Hai ereditato una miniera di diamanti abbandonata, da cui è stato estratto lultimo prezioso diamante. Decidi di investire il ricavato per creare un parco che diventi famoso in tutto il mondo.
<Africa - Oasis>
STR_SCNR :Africa - Oasi
STR_SCNR :Il miraggio
STR_PARK :Il miraggio
STR_DTLS :Nel deserto è stata scoperta unoasi che costituirebbe una splendida ambientazione per un parco. I mezzi di trasporto per raggiungerla esistono già.
<Africa - Victoria Falls>
STR_SCNR :Africa - Cascate Vittoria
STR_SCNR :Tuffo nel vuoto
STR_PARK :Tuffo nel vuoto
STR_DTLS :È stata costruita una diga che eroga energia idroelettrica a basso prezzo e in quantità, con la quale è possibile alimentare un parco. Per rimborsare il prestito della diga, dovrai creare un parco di grande valore.
<Antarctic - Ecological Salvage>
STR_SCNR :Antartide - Recupero ecologico
STR_SCNR :Avventure fra i ghiacci
STR_PARK :Avventure fra i ghiacci
STR_DTLS :Lagenzia dei servizi ambientali si è rivolta a te per trasformare una vecchia raffineria, vero pugno nellocchio, in rinomata attrazione turistica. La terra costa poco ma linteresse sui prestiti è alto. Puoi vendere i vecchi edifici.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Turismo alla Grande Muraglia
STR_SCNR :La Grande Muraglia Cinese
STR_PARK :La Grande Muraglia Cinese
STR_DTLS :Le autorità hanno deciso di promuovere il turismo presso la Grande Muraglia costruendo un parco a tema nei paraggi. I soldi non sono un problema
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Sfruttamento costiero in Giappone
STR_SCNR :Costa di Okinawa
STR_PARK :Costa di Okinawa
STR_DTLS :Un parco esistente ha esaurito lo spazio a sua disposizione. Lunica possibilità è costruire in mare aperto e per riuscirci hai chiesto un prestito. Le limitazioni di altezza sono piuttosto restrittive, a causa del terreno cedevole.
<Asia - Maharaja Palace>
STR_SCNR :Asia - Palazzo del Maragià
STR_SCNR :Il parco del Maragià
STR_PARK :Il parco del Maragià
STR_DTLS :Il Maragià ti ha incaricato di creare qualcosa che intrattenga la vasta popolazione locale. Costruisci un parco ispirato al palazzo del Maragià.
<Australasia - Ayers Rock>
STR_SCNR :Australia - Ayers Rock
STR_SCNR :Avventura allAyers
STR_PARK :Avventura allAyers
STR_DTLS :Nellambito di un programma di rivalutazione culturale, stai aiutando gli aborigeni a creare un parco. Devi attrarre un numero elevato di visitatori per trasmettergli leredità culturale degli aborigeni.
<Australasia - Fun at the Beach>
STR_SCNR :Australia - Divertimento in spiaggia
STR_SCNR :Barbecue balneare
STR_PARK :Barbecue balneare
STR_DTLS :Il parco marino di un imprenditore locale è fallito. Tu possiedi già un piccolo parco e per comprare laltro devi trovare dei soldi, sviluppando poi entrambi in una grossa struttura combinata.
<Europe - European Cultural Festival>
STR_SCNR :Europa - Festival culturale europeo
STR_SCNR :Festival europeo
STR_PARK :Festival europeo
STR_DTLS :Ti è stato chiesto di gestire una grande attrazione culturale europea. Devi incrementare il numero di visite per ripagare i sussidi UE prima che scada il termine stabilito dal Parlamento Europeo.
<Europe - Renovation>
STR_SCNR :Europa - Rinnovo
STR_SCNR :Rinascita dalle ceneri
STR_PARK :Rinascita dalle ceneri
STR_DTLS :Un vecchio parco è in sfacelo. Ti viene concesso un prestito dallUnione Europea per riportare questa zona desolata alla sua bellezza originaria. Dovrai rinnovare il parco e ripagare il prestito.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Nordamerica - Hawaii estreme
STR_SCNR :Brivido a Waikiki
STR_PARK :Brivido a Waikiki
STR_DTLS :Gli abitanti delle Hawaii sono stufi del surf e cercano qualcosa di più eccitante. Devi costruire un parco che soddisfi le loro aspettative, mantenendo alto il livello di attrazione turistica locale.
<North America - Grand Canyon>
STR_SCNR :Nordamerica - Grand Canyon
STR_SCNR :Calamità nel canyon
STR_PARK :Calamità nel canyon
STR_DTLS :Devi costruire un parco ai due lati di questa meraviglia naturale. Hai dei limiti di spazio da rispettare, ma potrai acquistare terreno dagli indiani locali. Dovrai raggiungere lobiettivo per sostenere la popolazione locale.
<North America - Rollercoaster Heaven>
STR_SCNR :Nordamerica - Paradiso dellottovolante
STR_SCNR :Paradiso dellottovolante
STR_PARK :Paradiso dellottovolante
STR_DTLS :Sei un magnate della finanza di grande successo, che si è preso 4 anni di vacanza dagli affari e desidera costruire un parco senza badare a spese.
<South America - Inca Lost City>
STR_SCNR :Sudamerica - Città perduta Inca
STR_SCNR :Il fondatore della città perduta
STR_PARK :Il fondatore della città perduta
STR_DTLS :Per potenziare il turismo, devi creare un parco intonato allambiente, rispettando dei limiti di altezza.
STR_DTLS :Per potenziare il turismo, devi creare un parco intonato allambiente.
<South America - Rain Forest Plateau>
STR_SCNR :Sudamerica - La foresta pluviale
STR_SCNR :Scorribanda nella foresta
STR_PARK :Scorribanda nella foresta
STR_DTLS :Nella preziosa foresta pluviale, lo spazio è limitato. Devi sfruttare al meglio la radura già esistente per creare una valida alternativa allindustria locale del legno.
<South America - Rio Carnival>
STR_SCNR :Sudamerica - Carnevale di Rio
STR_SCNR :Pan di zucchero
STR_PARK :Pan di zucchero
STR_DTLS :Gestisci un piccolo parco presso Rio e la banca ti ha chiesto di rimborsare un debito. Devi aumentare rapidamente le tue entrate per fronteggiare questa situazione imprevista.
@ -4385,72 +4384,72 @@ STR_DTLS :Gestisci un piccolo parco presso Rio e la banca ti ha chiesto di ri
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Età Oscura - Castello
STR_SCNR :Castello di Cliffside
STR_PARK :Castello di Cliffside
STR_DTLS :I membri locali della società per il ripristino delle leggi sulle battaglie prendono seriamente il loro hobby. Ti hanno affidato lincarico di costruire un parco a tema sullEtà Oscura, da erigere sulle fondamenta del Castello di Cliffside.
<Dark Age - Robin Hood>
STR_SCNR :Età Oscura - Robin Hood
STR_SCNR :Foresta di Sherwood
STR_PARK :Foresta di Sherwood
STR_DTLS :Per sottrarre i beni ai ricchi e donarli ai poveri, tu e i tuoi uomini avete deciso di costruire un parco a tema nella Foresta di Sherwood.
<Future - First Encounters>
STR_SCNR :Futuro - Primi incontri
STR_SCNR :Stravaganza extraterrestre
STR_PARK :Stravaganza extraterrestre
STR_DTLS :Su un lontano pianeta è stata scoperta la vita Costruisci un parco a tema sugli alieni e goditi un successo di visitatori senza precedenti.
<Future - Future World>
STR_SCNR :Futuro - Il mondo del futuro
STR_SCNR :Città di Gemini
STR_PARK :Città di Gemini
STR_DTLS :Metti in gioco la tua fantastica e utopistica visione del futuro e costruisci un parco futuristico composto dalle attrazioni più allavanguardia.
<Mythological - Animatronic Film Set>
STR_SCNR :Mitologico - Set cinematografico animatronico
STR_SCNR :Animatronica antichità
STR_PARK :Animatronica antichità
STR_DTLS :Hai ricevuto lincarico di gestire un parco a tema esistente, costruito sul set di un vecchio film. Rendi omaggio ai pionieri dellanimazione cinematografica che per primi hanno portato sul grande schermo e creature mitologiche.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mitologico - La culla della civiltà
STR_SCNR :Follia mitologica
STR_PARK :Follia mitologica
STR_DTLS :Possiedi unisola di eccezionale valore archeologico. Hai deciso di preservarne le origini costruendo un parco a tema basato sulleredità mitologica della zona.
<Prehistoric - After the Asteroid>
STR_SCNR :Preistoria - Dopo lasteroide
STR_SCNR :Il massacro del cratere
STR_PARK :Il massacro del cratere
STR_DTLS :Possiedi un vecchio cratere meteoritico. Con lo spirito che ti contraddistingue, hai deciso di costruire un parco sugli asteroidi, tramutando così la tua terra in una fonte di ingente guadagno.
<Prehistoric - Jurassic Safari>
STR_SCNR :Preistoria - Safari Giurassico
STR_SCNR :Ottovolantosauro
STR_PARK :Ottovolantosauro
STR_DTLS :Hai ricevuto lincarico di costruire un parco preistorico ispirato al Giurassico. Per ottimizzare laccesso dei visitatori, dovrai costruire tragitti che sovrastano la valle e vi si inoltrano.
<Prehistoric - Stone Age>
STR_SCNR :Preistoria - Età della Pietra
STR_SCNR :Passeggiata tra le rocce
STR_PARK :Passeggiata tra le rocce
STR_DTLS :Per scoraggiare i costruttori di autostrade e conservare i misteriosi e antichi cerchi di pietra, dovrai costruire un parco a tema sullEtà della Pietra e farlo fruttare. Limpresa è una vera e propria sfida, dato il territorio inospitale.
<Roaring Twenties - Prison Island>
STR_SCNR :Ruggenti Anni Venti - Isola carceraria
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :Linfame isola carceraria, la cui popolazione un tempo si dedicava al contrabbando e alle attività illecite, è in vendita. Hai deciso di trasformarla in unimportante attrazione turistica e il denaro non è un problema.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Ruggenti Anni Venti - Coppa Schneider
STR_SCNR :Costa di Schneider
STR_PARK :Costa di Schneider
STR_DTLS :Manca poco aI 75° anniversario della conquista della Coppa Schneider da parte di tuo nonno. Hai deciso di onorare la sua impresa costruendo un parco a tema basato sulla famosa corsa di idrovolanti.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Ruggenti Anni Venti
STR_SCNR :Metropoli
STR_PARK :Metropoli
STR_DTLS :Possiedi un lotto di terra vuoto vicino alla parte meno sviluppata della città. Per sfruttare al meglio la tua proprietà, costruisci un parco caratterizzato da grattacieli ispirandoti allarchitettura art decò degli anni Venti.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock & Roll - Gli anni dei fiori
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Un importante festival musicale si tiene ogni anno sulla tua proprietà. Costruisci un parco a tema di ispirazione hippy per attrarre gli spiriti liberi.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock & Roll - Rock & Roll
STR_SCNR :La rinascita del Rock & Roll
STR_PARK :La rinascita del Rock & Roll
STR_DTLS :Questo vecchio parco a tema ha vissuto tempi migliori. Aiuta il proprietario a ristrutturarlo in stile Rock & Roll e trasformalo in un luogo di successo.

View File

@ -1729,12 +1729,12 @@ STR_2382 :地形
STR_2383 :水
STR_2384 :{WINDOW_COLOUR_2}あなたの目標:
STR_2385 :{BLACK}なし
STR_2386 :{BLACK}{POP16}{MONTHYEAR}の終わりに、 パークの内に{PUSH16}{PUSH16}{COMMA16}以上人の来客し、600以上のパーク評価値を取得する必要があります。
STR_2386 :{BLACK}{POP16}{MONTHYEAR}の終わりに、 パークの内に{PUSH16}{PUSH16}{COMMA32}以上人の来客し、600以上のパーク評価値を取得する必要があります。
STR_2387 :{BLACK}{POP16}{MONTHYEAR}の終わりに、 {CURRENCY}以上のパーク評価額を取得する必要があります。
STR_2388 :{BLACK}楽しんで下さい!
STR_2389 :{BLACK}最高の{STRINGID}を建設してください!
STR_2390 :{BLACK}パークで10タイプのジェットコースターを稼働させるには、それぞれ少なくとも6.00以上の興奮度が必要です。
STR_2391 :{BLACK}パークに少なくとも{COMMA16}ゲストを入れてを取得する必要があります。パークの評価額がいつでも700以下にならないようにしてはいけません
STR_2391 :{BLACK}パークに少なくとも{COMMA32}ゲストを入れてを取得する必要があります。パークの評価額がいつでも700以下にならないようにしてはいけません
STR_2392 :{BLACK}ライドの月次総収入の{POP16}{POP16}{CURRENCY}を取得する必要があります。
STR_2393 :{BLACK}パークで10タイプのジェットコースターを操作しますし、それぞれ所定の長さの{LENGTH}し, 7.00以上の興奮度が必要です。
STR_2394 :{BLACK}パークであるの5ジェットコースターの建設を仕上げますし、 それぞれ{POP16}{POP16}{COMMA2DP32}以上の興奮度が必要です。
@ -2089,39 +2089,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :ファイルをロードすることができません…
STR_3011 :ファイルには無効なデータが含まれています
STR_3012 :ダージャムズ・ビート・スタイル
STR_3013 :フェアグラウンドオルガン・スタイル
STR_3014 :ローマンファンファーレ・スタイル
STR_3015 :オリエンタル・スタイル
STR_3016 :火星スタイル
STR_3017 :ジャングルドラム・スタイル
STR_3018 :エジプト・スタイル
STR_3019 :トイランド・スタイル
STR_3020 :
STR_3021 :スペース・スタイル
STR_3022 :ホラー・スタイル
STR_3023 :テクノ・スタイル
STR_3024 :ジェントル・スタイル
STR_3025 :サマー・スタイル
STR_3026 :ウォーター・スタイル
STR_3027 :ワイルドウエスト・スタイル
STR_3028 :ジュラ紀・スタイル
STR_3029 :ロック・スタイル
STR_3030 :ラグタイム・スタイル
STR_3031 :ファンタジー・スタイル
STR_3032 :ロック・スタイル 2番
STR_3033 :アイス・スタイル
STR_3034 :スノー・スタイル
STR_3035 :カスタム・スタイル 1番
STR_3036 :カスタム・スタイル 2番
STR_3037 :中世・スタイル
STR_3038 :都市・スタイル
STR_3039 :オルガン・スタイル
STR_3040 :メカニカル・スタイル
STR_3041 :モダン・スタイル
STR_3042 :パイレーツ・スタイル
STR_3043 :ロック・スタイル 3番
STR_3044 :キャンディ・スタイル
STR_3045 :音楽のスタイルの選定
STR_3047 :この乗物の除去や改造は、地方自治体により禁止されています
STR_3048 :キャンペーンは地方自治体により禁止されています
@ -2348,7 +2315,7 @@ STR_3305 :{WINDOW_COLOUR_2}月売上:
STR_3306 :{WINDOW_COLOUR_2}月利益:
STR_3307 :{WINDOW_COLOUR_2}最小長:
STR_3308 :{WINDOW_COLOUR_2}興奮度:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}保全命令のライド:
@ -2908,7 +2875,7 @@ STR_5755 :不適切なソフトウェアバージョン(サーバは{STRING
STR_5756 :Bad Password
STR_5757 :サーバがいっぱいです
STR_5758 :{OUTLINE}{GREEN}{STRING}がゲームに参加しました。
STR_5759 :地図をダウンロード中… ({INT32} / {INT32}) KiB
STR_5759 :地図をダウンロード中…
STR_5760 :香港ドル (HK$)
STR_5761 :ニュー台湾ドル (NT$)
STR_5762 :人民元 (CN¥)
@ -4049,87 +4016,87 @@ STR_DTLS : 不足しているシックスフラッグスの乗物を設置す
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :アフリカ ・ ダイヤモンド鉱山
STR_SCNR :アフリカ鉱山
STR_PARK :アフリカの鉱山
STR_DTLS :You inherited a disused diamond mine, and find a valuable diamond. You decide to invest that money to build a world-famous theme park.
<Africa - Oasis>
STR_SCNR :アフリカ ・ オアシ
STR_SCNR :ミラージュ・マッドネ
STR_PARK :ミラージュ・マッドネス
STR_DTLS :A desert Oasis has been discovered and would provide a beautiful location for a park. Transport to the oasis has been provided.
<Africa - Victoria Falls>
STR_SCNR :アフリカ ・ ヴィクトリアの滝
STR_SCNR :オーバー・ザ・エッジ
STR_PARK :オーバー・ザ・エッジ
STR_DTLS :A dam has been built offering abundant, cheap hydroelectric power with which to run a park. You need to reach a high park value to help repay the loan for the dam.
<Antarctic - Ecological Salvage>
STR_SCNR :南極 ・ 生態学的なサルベージ
STR_SCNR :氷の冒険
STR_PARK :氷の冒険
STR_DTLS :The environment agency has turned to you to transform an old oil refinery ecological eyesore into a top tourist attraction. Land is cheap but loan interest is high. You can sell the old buildings for salvage.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :アジア ・ 万里の長城ツーリズムの強化
STR_SCNR :万里の長城
STR_PARK :万里の長城
STR_DTLS :The authorities have decided to enhance tourism around the Great Wall by building a theme park on the adjacent land. Money is no object!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :アジア ・ 日本の沿岸再生
STR_SCNR :沖縄海岸
STR_PARK :沖縄海岸
STR_DTLS :An existing park has run out of space. Your only option is to build out into the sea, and so you have taken out a loan. Height restrictions on your building are enforced due to foundations and earthquake risk.
<Asia - Maharaja Palace>
STR_SCNR :アジア ・ マハラジャのパレス
STR_SCNR :パーク・マハラジャ
STR_PARK :パーク・マハラジャ
STR_DTLS :You have been commissioned by the Maharaja to bring entertainment to the large local population. Build a park inspired by the Maharajas palace.
<Australasia - Ayers Rock>
STR_SCNR :オーストラリア ・ エアーズロック
STR_SCNR :エアーズ・アドベンチャー
STR_PARK :エアーズ・アドベンチャー
STR_DTLS :You are helping Aboriginal people to build a park as part of a cultural awareness program. You need to get a large number of guests to educate them in the unique heritage of the Aboriginal people.
<Australasia - Fun at the Beach>
STR_SCNR :オーストラリア ・ ビーチの楽しみ
STR_SCNR :ビーチ・バーベキュー
STR_PARK :ビーチ・バーベキュー
STR_DTLS :A local entrepreneurs sealife park has gone bust. You already operate a small park and buy the other park from the construction company. Develop a big combined park.
<Europe - European Cultural Festival>
STR_SCNR :ヨーロパ ・ ヨーロッパ文化祭
STR_SCNR :ヨーロッパ文化祭
STR_PARK :ヨーロッパ文化祭
STR_DTLS :You have been brought in to take over a European Cultural Visitor Attraction and must increase the number of guests in order to pay back the EU subsidy by the end of the current European parliament term.
<Europe - Renovation>
STR_SCNR :ヨーロパ ・ レノベーション
STR_SCNR :灰の中から
STR_PARK :灰の中から
STR_DTLS :An old park has fallen into disrepair. You gain a European Union grant to return this deprived area to its former glory! You need to renovate the park and repay the grant.
<N. America - Extreme Hawaiian Island>
STR_SCNR :北アメリカ ・ ハワイ島
STR_SCNR :ワッキー・ワイキキ
STR_PARK :ワッキー・ワイキキ
STR_DTLS :The people of Hawaii are bored of surfing and are looking for something more intense. You need to build a park with this in mind to keep the areas tourist attraction rating high.
<North America - Grand Canyon>
STR_SCNR :北アメリカ ・ グランドキャニオン
STR_SCNR :キャニオン・カラミティー
STR_PARK :キャニオン・カラミティー
STR_DTLS :You have to build a park on limited land either side of this natural treasure - you do have the opportunity to buy neighbouring land from the Native American Indians. You need to complete the objective to sustain the local towns population.
<North America - Rollercoaster Heaven>
STR_SCNR :北アメリカ ・ ジェットコースター天国
STR_SCNR :ジェットコースター天国
STR_PARK :ジェットコースター天国
STR_DTLS :You are a successful business tycoon on long sabbatical who desires to use this time transforming the city park into Rollercoaster Heaven. Money is no object!
<South America - Inca Lost City>
STR_SCNR :南アメリカ ・ インカの失われた都市
STR_SCNR :ロスト・シティ
STR_PARK :ロスト・シティ
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings, and has height restrictions.
<South America - Rain Forest Plateau>
STR_SCNR :南アメリカ ・ 熱帯雨林高原
STR_SCNR :熱帯雨林高原
STR_PARK :熱帯雨林高原
STR_DTLS :Space is limited in the precious rainforest - you must cram as much as possible into the existing clearing, in order to provide a viable alternative to the local timber industry.
<South America - Rio Carnival>
STR_SCNR :南アメリカ ・ リオカーニバル
STR_SCNR :シュガーローフ・ショアーズ
STR_PARK :シュガーローフ・ショアーズ
STR_DTLS :You run a small park near Rio but the bank has called in your loan. You need to quickly increase your earning capacity to repay this unexpected debt.
@ -4137,71 +4104,71 @@ STR_DTLS :You run a small park near Rio but the bank has called in your loan.
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :暗黒時代 ・ 崖側の城
STR_SCNR :崖側の城
STR_PARK :崖側の城
STR_DTLS :Local members of the battle re-enactment society are rather serious about their hobby. Theyve entrusted you with the job of constructing a Dark Age theme park on the grounds of Cliffside Castle.
<Dark Age - Robin Hood>
STR_SCNR :暗黒時代 ・ ロビン・フッド
STR_SCNR :シャーウッドの森
STR_PARK :シャーウッドの森
STR_DTLS :To liberate wealth from the rich and distribute it to the needy, you and your Merry Men have decided to build a theme park in Sherwood Forest.
<Future - First Encounters>
STR_SCNR :未来 ・ 最初の出会い
STR_SCNR :地球外な壮観
STR_PARK :地球外な壮観
STR_DTLS :Life has been discovered on a distant planet Build an alien theme park to cash in on the unprecedented wave of interest.
<Future - Future World>
STR_SCNR :未来 ・ 未来の世界
STR_SCNR :ジェミニ・シティ
STR_PARK :ジェミニ・シティ
STR_DTLS :Show off your inventive, utopian vision of the future - come up with a futuristic park design that incorporates state-of-the-art attractions.
<Mythological - Animatronic Film Set>
STR_SCNR :神話 - アニマトロニクス撮影現場
STR_SCNR :アニマトロ・アンティクス
STR_PARK :アニマトロ・アンティクス
STR_DTLS :You have been given the task of running and improving an existing theme park, which has been built on an old film set. Build a tribute to the pioneering stop-motion animators who first brought mythical creatures to life on the silver screen.
<Mythological - Cradle of Civilisation>
STR_SCNR :神話 - 世界四大文明
STR_SCNR :神話の狂気
STR_PARK :神話の狂気
STR_DTLS :You own an island of particular archaeological value. Youve decided to fund its preservation by constructing a theme park based on the areas rich Mythological heritage.
<Prehistoric - After the Asteroid>
STR_SCNR :前史時代 ・ 小惑星の後
STR_SCNR :クレーターの大虐殺
STR_PARK :クレーターの大虐殺
STR_DTLS :You own a dusty old meteor crater. In the true entrepreneurial spirit, youve decided to construct an asteroid theme park and convert your seemingly worthless land into a sizeable fortune.
<Prehistoric - Jurassic Safari>
STR_SCNR :前史時代 ・ ジュラシックサファリ
STR_SCNR :コースターサウルス
STR_PARK :コースターサウルス
STR_DTLS :Youve been given the task of constructing a Jurassic era theme park. To optimize your visitors access to the exotic plant and animal exhibits, you will need to build rides going over and into the valley.
<Prehistoric - Stone Age>
STR_SCNR :前史時代 ・ 石器文化
STR_SCNR :ロッキー・ランブル
STR_PARK :ロッキー・ランブル
STR_DTLS :To thwart the highway developers and preserve the mysterious ancient stone circles, you will need to construct a Stone Age theme park and turn a profit. However, attracting visitors may pose a challenge, as the terrain is a tad inhospitable.
<Roaring Twenties - Prison Island>
STR_SCNR :1920時代 - アルカトラズ
STR_SCNR :アルカトラズ
STR_PARK :アルカトラズ
STR_DTLS :The infamous Prison Island - whose population once swelled with bootleggers and racketeers - is now up for sale. Youve decided to convert it into a top tourist attraction, and money is no object
<Roaring Twenties - Schneider Cup>
STR_SCNR :1920時代 - シュナイダー・レース
STR_SCNR :シュナイダー・ショーズ
STR_PARK :シュナイダー・ショーズ
STR_DTLS :The 75th anniversary of your grandfathers Schneider Cup victory is coming up in a few years. Youre going to honour his achievement by building a theme park based on the famous seaplane race.
<Roaring Twenties - Skyscrapers>
STR_SCNR :1920時代 - 高層ビル
STR_SCNR :メトロポリス
STR_PARK :メトロポリス
STR_DTLS :You own an empty lot near the low-rise part of town. To squeeze the most out of your urban property, build a skyscraper theme park inspired by the soaring art deco architecture of the twenties.
<Rock 'n' Roll - Flower Power>
STR_SCNR :ロックンロール - フラワーパワー
STR_SCNR :ウッドストック
STR_PARK :ウッドストック
STR_DTLS :A large annual music festival takes place on your land. Build a hip theme park to keep the free-spirited audience entertained.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :ロックンロール - ロックンロー
STR_SCNR :ロックンロール・リバイバ
STR_PARK :ロックンロール・リバイバル
STR_DTLS :This aging theme park has seen better days. Help the owner give it a retro rock n roll makeover and turn the place into a successful venue.

View File

@ -98,6 +98,7 @@ STR_0093 :하이브리드 코스터
STR_0094 :모노레일 롤러코스터
STR_0095 :알파인 코스터
STR_0096 :클래식 우든 롤러코스터
STR_0097 :클래식 스탠드 업 롤러코스터
STR_0512 :나선형 리프트 힐과 부드럽게 꼬인 낙하를 가진 알찬 구성의 롤러코스터입니다.
STR_0513 :일어선 자세로 탑승하는 루핑 롤러코스터입니다.
STR_0514 :코너를 돌 때 롤러코스터 트랙 아래에 매달린 차량이 좌우로 흔들리는 열차입니다.
@ -181,12 +182,13 @@ STR_0603 :철제 트랙이 있는 목재 스타일의 롤러코스터로 급
STR_0604 :탑승객들은 폭이 좁은 모노레일 트랙 위에 한 줄로 탑승한 채로, 급격한 전이와 방향 전환 코스를 달립니다.
STR_0605 :탑승객들이 구불구불한 철제 트랙을 따라 썰매 모양의 차량을 타고 스스로 속력을 조절하며 내려오는 놀이기구입니다.
STR_0606 :빠르고 거친 승차감과 충분한 에어 타임, 약간의 측면 중력이 있으며 '통제되지 않는 느낌'을 느낄 수 있도록 설계된 구식 목재 롤러코스터입니다.
STR_0607 :탑승객들이 일어선 자세로 탑승하는, 격렬한 구식 스타일의 철제 루핑 롤러코스터입니다.
STR_0767 :손님 {INT32}
STR_0768 :미화원 {INT32}
STR_0769 :정비기술자 {INT32}
STR_0770 :경비원 {INT32}
STR_0771 :엔터테이너 {INT32}
STR_0777 :이름 없는 공원{POP16}{POP16}
STR_0777 :이름 없는 공원
STR_0778 :팻말
STR_0779 :1일
STR_0780 :2일
@ -1741,12 +1743,12 @@ STR_2382 :땅
STR_2383 :물
STR_2384 :{WINDOW_COLOUR_2}목표:
STR_2385 :{BLACK}없음
STR_2386 :{BLACK}공원에 최소 {COMMA16}명 이상의 손님을 {MONTHYEAR}까지 유치하고, 공원 등급을 600 이상으로 유지하세요
STR_2386 :{BLACK}공원에 최소 {COMMA32}명 이상의 손님을 {MONTHYEAR}까지 유치하고, 공원 등급을 600 이상으로 유지하세요
STR_2387 :{BLACK}최소 {POP16}{POP16}{CURRENCY} 이상의 공원 가치를 {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}까지 달성하세요
STR_2388 :{BLACK}즐기세요!
STR_2389 :{BLACK}최고의 {STRINGID}(을)를 건설하세요!
STR_2390 :{BLACK}흥미도가 최소 6.00을 넘는 10종의 다른 롤러코스터를 공원에 운용하세요
STR_2391 :{BLACK}공원에 최소 {COMMA16}명 이상의 손님을 유치하세요. 단 한 순간이라도 공원 등급을 700 아래로 떨어뜨려서는 안 됩니다!
STR_2391 :{BLACK}공원에 최소 {COMMA32}명 이상의 손님을 유치하세요. 단 한 순간이라도 공원 등급을 700 아래로 떨어뜨려서는 안 됩니다!
STR_2392 :{BLACK}놀이기구 탑승 수익만으로 월 수익을 최소 {POP16}{POP16}{CURRENCY} 이상 달성하세요
STR_2393 :{BLACK}최소 길이가 {LENGTH} 이상이고 흥미도가 최소 7.00을 넘는 10개의 다른 종류의 롤러코스터를 공원에 운용하세요
STR_2394 :{BLACK}이 공원에 미완성된 5대의 롤러코스터를 각각의 흥미도가 최소 {POP16}{POP16}{COMMA2DP32} 이상이 되도록 완성하세요
@ -2101,39 +2103,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :파일을 불러올 수 없습니다…
STR_3011 :파일이 올바르지 않은 데이터를 포함하고 있습니다
STR_3012 :범퍼카 비트 스타일
STR_3013 :축제 오르간 스타일
STR_3014 :로마 팡파르 스타일
STR_3015 :동양 스타일
STR_3016 :화성 스타일
STR_3017 :정글 북 스타일
STR_3018 :이집트 스타일
STR_3019 :장난감나라 스타일
STR_3020 :
STR_3021 :우주 스타일
STR_3022 :호러 스타일
STR_3023 :테크노 스타일
STR_3024 :젠틀 스타일
STR_3025 :여름 스타일
STR_3026 :수중 스타일
STR_3027 :서부 스타일
STR_3028 :쥐라기 스타일
STR_3029 :록 스타일
STR_3030 :래그타임 스타일
STR_3031 :판타지 스타일
STR_3032 :록 스타일 2
STR_3033 :얼음 스타일
STR_3034 :눈 스타일
STR_3035 :사용자 음악 1
STR_3036 :사용자 음악 2
STR_3037 :중세 스타일
STR_3038 :도시 스타일
STR_3039 :오르간 스타일
STR_3040 :기계적인 스타일
STR_3041 :현대적인 스타일
STR_3042 :해적 스타일
STR_3043 :록 스타일 3
STR_3044 :사탕 스타일
STR_3045 :재생할 음악 스타일을 선택하세요
STR_3047 :지역 당국이 이 놀이기구를 파괴하거나 수정하는 것을 금지했습니다
STR_3048 :지역 당국이 광고 이벤트를 금지했습니다
@ -2360,7 +2329,7 @@ STR_3305 :{WINDOW_COLOUR_2}월 수익:
STR_3306 :{WINDOW_COLOUR_2}월 순이익:
STR_3307 :{WINDOW_COLOUR_2}최소 길이:
STR_3308 :{WINDOW_COLOUR_2}흥미도:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}수정·파괴할 수 없는 놀이기구/시설:
@ -2618,7 +2587,7 @@ STR_5335 :놀이기구 입구
STR_5336 :놀이기구 출구
STR_5337 :공원 입구
STR_5338 :요소 종류
STR_5339 :기본 고도
STR_5339 :기본 높이
STR_5340 :최상단 높이
STR_5343 :직원 자동 배치
STR_5344 :변경기록
@ -2816,9 +2785,9 @@ STR_5612 :유령 플래그
STR_5613 :B
STR_5614 :깨짐 플래그
STR_5615 :L
STR_5616 :타일 플래그의 마지막 요소
STR_5617 :선택한 요소를 위로 이동합니다.
STR_5618 :선택한 요소를 아래로 이동합니다.
STR_5616 :이 칸의 마지막 요소
STR_5617 :선택한 요소를 위로 이동합니다
STR_5618 :선택한 요소를 아래로 이동합니다
STR_5619 :롤러코스터 타이쿤
STR_5620 :애디드 어트랙션
STR_5621 :루피 랜드스케이프
@ -2920,7 +2889,7 @@ STR_5755 :소프트웨어 버전이 맞지 않습니다 (서버는 {STRING}
STR_5756 :비밀번호가 맞지 않습니다
STR_5757 :서버 제한 인원이 꽉 찼습니다
STR_5758 :{OUTLINE}{GREEN}{STRING} 님 입장
STR_5759 :맵 다운로드 중 … ({INT32} / {INT32}) KiB
STR_5759 :맵 다운로드 중 …
STR_5760 :홍콩 달러 (HK$)
STR_5761 :신 대만 달러 (NT$)
STR_5762 :중국 위안 (CN¥)
@ -3483,7 +3452,7 @@ STR_6374 :겹
STR_6375 :알 수 없는 놀이기구
STR_6376 :{WINDOW_COLOUR_2}놀이기구 차량:{NEWLINE}{BLACK}{POP16}{STRINGID}의 {PUSH16}{PUSH16}{STRINGID}
STR_6377 :{WINDOW_COLOUR_2}유형: {BLACK}{POP16}{STRINGID}의 {PUSH16}{PUSH16}{STRINGID}
STR_6378 :오브젝트 목록 수신 중: {INT32} / {INT32}
STR_6378 :오브젝트 목록 수신 중:
STR_6379 :올바르지 않은 데이터 수신
STR_6380 :업데이트 사용 가능!
STR_6381 :OpenRCT2 디스코드에 참여하세요!
@ -3701,6 +3670,53 @@ STR_6593 :공원 경계 울타리 제거
STR_6594 :칸 조사창: 울타리 경사 변경
STR_6595 :{WINDOW_COLOUR_2}제작: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}제작: {BLACK}{STRING}
STR_6597 :유효하지 않은 매개변수입니다
STR_6598 :범위를 벗어난 값입니다
STR_6599 :가상 요소를 찾을 수 없습니다
STR_6600 :풍선을 찾을 수 없습니다
STR_6601 :직원을 찾을 수 없습니다
STR_6602 :놀이기구를 찾을 수 없습니다
STR_6603 :놀이기구 오브젝트 출입구를 찾을 수 없습니다
STR_6604 :플레이어를 찾을 수 없습니다
STR_6605 :출입구를 찾을 수 없습니다
STR_6606 :땅 표면 요소를 찾을 수 없습니다
STR_6607 :칸 요소를 찾을 수 없습니다
STR_6608 :트랙 조각 요소를 찾을 수 없습니다
STR_6609 :트랙 블록을 찾을 수 없습니다
STR_6610 :보도 요소를 찾을 수 없습니다
STR_6611 :벽 요소를 찾을 수 없습니다
STR_6612 :팻말 요소를 찾을 수 없습니다
STR_6613 :오브젝트 다시 불러오기
STR_6614 :공원 입장료를 변경할 수 없습니다
STR_6615 :이 칸에 있는 트랙은 물이 있어야 합니다
STR_6616 :그 직원에 대한 잘못된 행동입니다
STR_6617 :칸 요소를 자기 자신과 바꿀 수는 없습니다
STR_6618 :오브젝트를 제한하거나 제한 해제할 수 없습니다…
STR_6619 :오브젝트 종류를 제한할 수 없습니다!
STR_6620 :오브젝트를 찾을 수 없습니다!
STR_6621 :제한
STR_6622 :시나리오 에디터 및 모래상자 모드에서 선택한 오브젝트를 사용할 수 없도록 제한합니다.
STR_6623 :사용할 수 있는 명령어 목록을 보려면 help를 입력하세요. 콘솔 창을 닫으려면 hide를 입력하세요.
STR_6624 :칸 조사 창: 요소 정렬
STR_6625 :유효하지 않은 색상
STR_6626 :애니메이션 반대
STR_6627 :트랙 속력이 너무 높습니다!
STR_6628 :보도 옆 가장자리에만 설치할 수 있습니다!
STR_6629 :메인 메뉴 버튼을 가운데로 정렬
STR_6630 :이 설정을 켜면 메인 메뉴의 버튼을 화면 가운데에 수평으로 정렬합니다. 기존 방식은 버튼을 좌측과 우측 끝에 두 그룹으로 정렬합니다.
STR_6631 :불러오는 중…
STR_6632 :오브젝트 파일 확인 중…
STR_6633 :시나리오 파일 확인 중…
STR_6634 :트랙 디자인 파일 확인 중…
STR_6635 :에셋 팩 확인 중…
STR_6636 :타이틀 시퀀스 확인 중…
STR_6637 :타이틀 시퀀스 불러오는 중…
STR_6638 :UI 확대
STR_6639 :터치 환경에서 사용하기 적합하도록 인터페이스를 변경합니다
STR_6640 :에셋 팩 편집…
STR_6641 :불러오기/진행 창
STR_6642 :{STRING} ({COMMA32} / {COMMA32})
STR_6643 :{STRING} ({COMMA32} / {COMMA32} KiB)
#############
# Scenarios #
@ -4289,87 +4305,87 @@ STR_DTLS :식스 플래그의 빠진 놀이기구를 건설해보거나, 공
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :아프리카 - 아프리카 다이아몬드 광산
STR_SCNR :아프리카 광산
STR_PARK :아프리카의 광산
STR_DTLS :다이아몬드 폐광을 물려받은 당신은 값비싼 다이아몬드를 발견했고 그 판매 수익으로 세계 일류의 테마파크를 짓기로 결심했습니다.
<Africa - Oasis>
STR_SCNR :아프리카 - 오아시스
STR_SCNR :신기루의 광기
STR_PARK :신기루의 광기
STR_DTLS :사막에서 놀이공원을 짓기에 아주 적당한 오아시스를 발견했습니다. 오아시스로 가는 교통편은 이미 존재합니다.
<Africa - Victoria Falls>
STR_SCNR :아프리카 - 빅토리아 폭포
STR_SCNR :폭포 너머
STR_PARK :폭포 너머
STR_DTLS :공원을 운영하기 충분하고 값싼 전기를 생산하는 수력 발전 댐이 지어졌습니다. 댐을 건설하느라 진 빚을 갚기 위해 높은 가치의 놀이공원을 지어야 합니다.
<Antarctic - Ecological Salvage>
STR_SCNR :남극 - 버려진 환경 복구
STR_SCNR :얼음에 뒤덮인 모험
STR_PARK :얼음에 뒤덮인 모험
STR_DTLS :환경부에서 눈꼴사납고 낡은 정유 시설을 최고의 관광 명소로 만들어달라고 합니다. 땅값은 싸지만 대출 이자는 높습니다. 오래된 건물은 고철로 팔아 버릴 수 있습니다.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :아시아 - 중국 만리장성의 관광 진흥
STR_SCNR :만리장성
STR_PARK :만리장성
STR_DTLS :관광 당국이 만리장성 주변의 땅에 놀이공원을 지어서 관광객 수를 늘리기로 결정했습니다. 돈이 문제가 아니군요!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :아시아 - 일본 연안 간척
STR_SCNR :오키나와 해변
STR_PARK :오키나와 해변
STR_DTLS :기존 공원은 이미 공간이 모자랍니다. 대출을 받아서 바다로 확장해나갈 수밖에 없습니다. 지진 우려와 약한 기반을 이유로 건설 높이가 제한됩니다.
<Asia - Maharaja Palace>
STR_SCNR :아시아 - 마하라자 궁전
STR_SCNR :마하라자 공원
STR_PARK :마하라자 공원
STR_DTLS :인도의 왕에게서 국민들에게 즐길 거리를 만들어달라는 임무를 받았습니다. 마하라자 궁전을 연상시키는 공원을 만들어보세요.
<Australasia - Ayers Rock>
STR_SCNR :오스트레일리아 - 에어즈 록
STR_SCNR :에어즈 어드벤처
STR_PARK :에어즈 어드벤처
STR_DTLS :문화 인식 프로그램의 일환으로, 오스트레일리아 원주민들을 도와서 공원을 개발하려 합니다. 원주민들의 독특한 문화유산을 알리기 위해 많은 관광객을 모아야 합니다.
<Australasia - Fun at the Beach>
STR_SCNR :오스트레일리아 - 해변의 즐거움
STR_SCNR :해변의 바베큐 파티
STR_PARK :해변의 바베큐 파티
STR_DTLS :근처 지역 사업가의 해안 공원이 파산해버렸습니다. 이미 작은 공원을 운영하는 당신은 건설사로부터 그 공원을 구입하였습니다. 두 공원을 합쳐 크게 사업을 확장해보세요.
<Europe - European Cultural Festival>
STR_SCNR :유럽 - 유럽 문화 축제
STR_SCNR :유럽 축제
STR_PARK :유럽의 축제
STR_DTLS :유럽 문화 축제의 경영권을 확보한 당신은 이제 유럽 연합의 보조금을 갚기 위해 현재의 유럽 의회 임기가 끝날 때까지 손님을 늘려야합니다.
<Europe - Renovation>
STR_SCNR :유럽 - 혁신
STR_SCNR :잿더미를 딛고
STR_PARK :잿더미를 딛고
STR_DTLS :방치된 낡은 공원이 있습니다. 이 공원이 과거에 누렸던 영광을 재현하기 위해 유럽 연합의 허가를 받았습니다! 허가를 받은 만큼 공원을 혁신해서 보답하세요.
<N. America - Extreme Hawaiian Island>
STR_SCNR :북아메리카 - 최고의 하와이 섬
STR_SCNR :왁자지껄 와이키키
STR_PARK :왁자지껄 와이키키
STR_DTLS :하와이 주민들이 이제 파도타기가 지겨워져서 좀 더 자극적인 뭔가를 원하고 있습니다. 주민들도 만족시키면서 이 지역의 관광객들이 찾아오고 싶어 하는 공원을 만드세요.
<North America - Grand Canyon>
STR_SCNR :북아메리카 - 그랜드 캐니언
STR_SCNR :불행의 계곡
STR_PARK :불행의 계곡
STR_DTLS :이 아름답지만 제한적인 공간에 공원을 만들어야 합니다. 미국 원주민에게서 반대편 땅을 살 수 있습니다. 줄어들고 있는 마을 인구를 유지하기 위해서라도 목표를 달성해야 합니다.
<North America - Rollercoaster Heaven>
STR_SCNR :북아메리카 - 롤러코스터 천국
STR_SCNR :롤러코스터 천국
STR_PARK :롤러코스터 천국
STR_DTLS :당신은 긴 휴식기를 가지는 동안 이 도시 공원을 롤러코스터 천국으로 바꾸고자 하는 성공한 사업 거물입니다. 돈은 문제가 되지 않는군요!
<South America - Inca Lost City>
STR_SCNR :남 아메리카 - 잉카의 잊혀진 도시
STR_SCNR :잊혀진 도시의 발견자
STR_PARK :잊혀진 도시의 발견자
STR_DTLS :이 지역의 관광산업을 보다 활기차게 만들기 위해서는 주변 환경과 잘 어울리는 공원을 지어야 합니다. 높이 제한이 있습니다.
STR_DTLS :이 지역의 관광산업을 보다 활기차게 만들기 위해서는 주변 환경과 잘 어울리는 공원을 지어야 합니다.
<South America - Rain Forest Plateau>
STR_SCNR :남 아메리카 - 열대우림 고원
STR_SCNR :열대우림 고원
STR_PARK :열대우림 고원
STR_DTLS :소중한 열대우림 속의 제한된 공간만을 받았습니다. 이곳의 벌목 산업을 대신할 수 있는 방법을 제공하기 위해 기존의 빈 공간을 최대한 많이 활용해야 합니다.
<South America - Rio Carnival>
STR_SCNR :남 아메리카 - 리오 축제
STR_SCNR :슈거로프 해안
STR_PARK :슈거로프 해안
STR_DTLS :리오 근처의 작은 공원을 운영하고 있는데 은행이 대출금을 조기 회수하려 합니다. 때 이른 빚 독촉을 갚기 위해서 빨리 돈을 벌어야 합니다.
@ -4377,72 +4393,72 @@ STR_DTLS :리오 근처의 작은 공원을 운영하고 있는데 은행이
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :암흑시대 -
STR_SCNR :클리프사이드
STR_PARK :클리프사이드 성
STR_DTLS :이 지역의 전투 재현 단체는 자신들의 취미를 진지하게 생각하고 있습니다. 그들은 당신에게 클리프사이드 성 부지에 암흑시대 테마파크를 건설해달라고 요청해왔습니다.
<Dark Age - Robin Hood>
STR_SCNR :암흑시대 - 로빈 후드
STR_SCNR :셔우드 숲
STR_PARK :셔우드 숲
STR_DTLS :부자들의 재산을 빼앗아 필요한 사람들에게 나누어주기 위해서 당신과 수하들은 셔우드 숲에 놀이공원을 만들기로 결정했습니다.
<Future - First Encounters>
STR_SCNR :미래 - 첫 만남
STR_SCNR :외계인의 축제
STR_PARK :외계인의 축제
STR_DTLS :먼 행성에서 생명체가 발견되었습니다. 외계인을 주제로 한 놀이공원을 만들어서 전에 없던 관심을 받아 돈을 벌어보세요.
<Future - Future World>
STR_SCNR :미래 - 미래 세계
STR_SCNR :제미니 시티
STR_PARK :제미니 시티
STR_DTLS :당신의 미래에 대한 독창적이고 이상적인 시각을 보여줄 때입니다. 첨단의 매력이 느껴지는 미래의 공원 디자인을 제안해봅시다.
<Mythological - Animatronic Film Set>
STR_SCNR :신화 - 영화 세트장
STR_SCNR :애니매트로닉 앤틱스
STR_PARK :애니매트로닉 앤틱스
STR_DTLS :이번 임무는 옛 영화 세트장에 설립된 기존 테마파크를 운영하고 발전시키는 것입니다. 흑백 스크린에 신화 속 인물을 옮겨놓은 스톱 모션 애니메이션의 선구자들에게 이 공원을 헌정합시다.
<Mythological - Cradle of Civilisation>
STR_SCNR :신화 - 문명의 요람
STR_SCNR :신화의 광기
STR_PARK :신화의 광기
STR_DTLS :특별한 고고학적 가치를 가진 섬을 소유하게 되었습니다. 이 지역의 풍부한 신화적 유산을 기반으로 한 테마파크를 건설해서 유산 보존 기금을 마련하기로 결정했습니다.
<Prehistoric - After the Asteroid>
STR_SCNR :선사시대 - 소행성 충돌 후
STR_SCNR :크레이터 대학살
STR_PARK :크레이터 대학살
STR_DTLS :당신은 오래된 운석공을 소유하고 있습니다. 기업가 정신을 발휘한 당신은 운석 테마 파크를 건설해서 쓸모없어 보이는 이 땅을 엄청난 행운의 땅으로 바꾸기로 결심했습니다.
<Prehistoric - Jurassic Safari>
STR_SCNR :선사시대 - 쥐라기 사파리
STR_SCNR :코스터사우르스
STR_PARK :코스터사우르스
STR_DTLS :당신은 쥐라기 시대 놀이공원을 건설하는 임무를 받았습니다. 색다른 식물과 동물 전시장에 관객이 쉽게 접근할 수 있도록 하려면, 계곡을 가로지르는 놀이기구를 만들어야 할 것입니다.
<Prehistoric - Stone Age>
STR_SCNR :선사시대 - 석기시대
STR_SCNR :돌무더기 산책
STR_PARK :돌무더기 산책
STR_DTLS :고속도로 개발자들을 막고 고대 열석을 보호하기 위해, 석기 시대 테마파크를 건설하여 수익을 내야 합니다. 하지만 사람이 살기 조금 힘든 곳인 만큼 손님을 모으기가 어려울 것입니다.
<Roaring Twenties - Prison Island>
STR_SCNR :광란의 20년대 - 감옥 섬
STR_SCNR :앨커트래즈
STR_PARK :앨커트래즈
STR_DTLS :주류 밀매자와 폭력범으로 득실대던 악명 높은 감옥 섬이 경매에 부쳐졌습니다. 이곳을 최고의 관광지로 바꾸기로 한 당신에게 돈은 신경 쓸 필요가 없네요.
<Roaring Twenties - Schneider Cup>
STR_SCNR :광란의 20년대 - 슈나이더 컵
STR_SCNR :슈나이더 해안
STR_PARK :슈나이더 해안
STR_DTLS :할아버지의 슈나이더 컵 우승 75주년이 얼마 남지 않았습니다. 당신은 할아버지의 업적을 기리기 위해 유명한 수상비행기 경주를 딴 놀이공원을 짓기로 했습니다.
<Roaring Twenties - Skyscrapers>
STR_SCNR :광란의 20년대 - 마천루
STR_SCNR :메트로폴리스
STR_PARK :메트로폴리스
STR_DTLS :당신은 도시 저층부 근처의 빈 공간을 갖게 되었습니다. 최대한 이익을 많이 얻기 위해, 20년대에 유행했던 아르데코식 건축물을 본딴 마천루 테마파크를 지어보세요.
<Rock 'n' Roll - Flower Power>
STR_SCNR :로큰롤 - 사랑과 평화
STR_SCNR :우드스톡
STR_PARK :우드스톡
STR_DTLS :매년 열리는 대형 음악 축제가 당신의 땅에서 열립니다. 최신 유행하는 놀이공원을 지어, 자유로운 영혼을 가진 관객들이 즐거워할 수 있게 만드세요.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :로큰롤 - 로큰롤
STR_SCNR :로큰롤 부흥
STR_PARK :로큰롤 부흥
STR_DTLS :이 오래된 놀이공원은 더 나은 미래를 기대하고 있습니다. 소유자를 도와 이 공원을 복고풍의 로큰롤 공원으로 바꾸어 성공적인 장소로 변모시켜보세요.

File diff suppressed because it is too large Load Diff

View File

@ -95,6 +95,7 @@ STR_0093 :Hybride achtbaan
STR_0094 :Achtbaan met enkele rail
STR_0095 :Rodelachtbaan
STR_0096 :Klassieke houten achtbaan
STR_0097 :Klassieke staande achtbaan
STR_0512 :Een compacte achtbaan met een spiraalvormige kettingheuvel en soepele, kronkelende afdalingen.
STR_0513 :Een achtbaan met loopings waar de passagiers in de karretjes staan.
STR_0514 :Treinen hangen onder de baan en zwaaien naar buiten in de bochten.
@ -112,36 +113,36 @@ STR_0525 :Passagiers rijden over een kronkelende baan, waarbij ze enkel worde
STR_0526 :Bezoekers gaan in een roterende observatiecabine langs een toren omhoog
STR_0527 :Een soepele stalen achtbaan die verticale loopings kan maken.
STR_0528 :Passagiers glijden in opblaasboten door een kronkelende halfopen of compleet gesloten glijbaan.
STR_0529 :Achtbaantreinen in de vorm van een mijntrein razen over stalen achtbaanrails die er uitziet als een oude spoorbaan.
STR_0529 :Achtbaantreinen in de vorm van een mijntrein razen over stalen achtbaanrails die er uitzien als een oude spoorbaan.
STR_0530 :Stoeltjes hangen aan een continu draaiende stalen kabel die van het ene uiteinde van de baan naar het andere loopt, en daarna weer terug.
STR_0531 :Een compacte stalen achtbaan waar de trein door schroeven en loopings gaat.
STR_0532 :
STR_0533 :
STR_0532 :Bezoekers lopen door een doolhof van 1,8m hoge heggen of muren, en kunnen er pas uit wanneer ze de uitgang vinden.
STR_0533 :Houten gebouw met van binnen een trap en van buiten een spiraalglijbaan voor glijmatten.
STR_0534 :Bezoekers racen tegen elkaar in go-karts op een asfaltbaan.
STR_0535 :Bezoekers varen in bootjes door een waterbak, waarbij ze van steile hellingen afdalen en doorweekt raken.
STR_0536 :Ronde boten varen door een brede waterbak, waarbij ze de passagiers opwinden door watervallen en schuimende stroomversnellingen.
STR_0537 :Bezoekers botsen tegen elkaar in elektrisch aangedreven botsautos die ze zelf kunnen besturen.
STR_0538 :
STR_0539 :
STR_0540 :
STR_0542 :
STR_0544 :
STR_0545 :
STR_0547 :
STR_0548 :
STR_0549 :
STR_0550 :
STR_0551 :
STR_0552 :
STR_0553 :
STR_0538 :Groot schommelend piratenschip.
STR_0539 :Schip dat is bevestigd aan een arm met een contragewicht, en 360 graden kan draaien.
STR_0540 :Een kraampje waar de bezoekers eten kunnen kopen.
STR_0542 :Een kraampje waar de bezoekers drinken kunnen kopen.
STR_0544 :Een kraampje dat souvenirs verkoopt.
STR_0545 :Traditionele draaimolen met uit hout gesneden paarden.
STR_0547 :Een kraam waar bezoekers kaarten van het park en paraplus kunnen kopen.
STR_0548 :Een toiletgebouw.
STR_0549 :Groot draaiend rad met open stoeltjes.
STR_0550 :Passagiers bekijken een film in de cabine van een bewegingssimulator die wordt gedraaid en bewogen door een hydraulische arm.
STR_0551 :Bioscoop in een bolvormig gebouw waarin 3D-films worden getoond.
STR_0552 :Passagiers zitten in een gondel die is opgehangen aan grote roterende armen, en worden halsoverkop vooruit en achteruit gedraaid.
STR_0553 :Concentrische draaiende ringen waarmee de passagiers vrij kunnen draaien in alle richtingen.
STR_0554 :Het karretje wordt het station uitgelanceerd over een lange rechte baan door middel van lineaire inductiemotoren, om daarna recht omhoog te gaan en weer terug te vallen richting het station.
STR_0555 :Bezoekers gaan in een lift in een toren omhoog of omlaag om naar een ander hoogteniveau te komen.
STR_0556 :Extra brede karretjes rijden over een compleet verticale baan voor de ultieme vrijevalbeleving.
STR_0557 :
STR_0558 :
STR_0559 :
STR_0560 :
STR_0561 :
STR_0557 :Een geldautomaat die de bezoekers kunnen gebruiken als ze bijna door hun contante geld heen zijn.
STR_0558 :Passagiers zitten per twee in stoelen die ronddraaien aan de uiteinden van drie lange draaiarmen.
STR_0559 :Groot gethematiseerd gebouw met enge gangen en spookachtige kamers.
STR_0560 :Een gebouw waar misselijke bezoekers sneller kunnen opknappen.
STR_0561 :Een dierennummer in een circustent.
STR_0562 :Aangedreven karretjes rijden langs eng decor en special effects over een baan met hoogteverschillen.
STR_0563 :Bezoekers zitten in comfortabele treinen met enkel een schootbeugel en gaan soepel door grote afdalingen en kronkelende stukken baan, met veel airtime in de heuvels.
STR_0564 :Deze over een houten baan lopende achtbaan is snel, ruw, luidruchtig en geeft het gevoel van controleverlies met veel airtime.
@ -156,20 +157,20 @@ STR_0574 :Passagiers worden door middel van een speciale beugel in een liggen
STR_0575 :Aangedreven treinen hangen aan een enkele rail en vervoeren mensen door het park heen.
STR_0577 :Karretjes met draaistellen rijden op een houten baan en kunnen omkeren op speciale stukken baan.
STR_0578 :Karretjes rijden in een baan omgeven door hoepels en gaan door steile afdalingen en heartline-twists.
STR_0579 :
STR_0579 :Een rustig spelletje minigolf.
STR_0580 :Een gigantische stalen achtbaan die in staat is tot soepele afdalingen en heuvels die hoger zijn dan 90 meter.
STR_0581 :Een ring van stoelen wordt naar de bovenkant van een hoge toren getrokken terwijl hij rustig ronddraait, waarna hij losgelaten wordt in een vrije val, waarna hij beneden rustig wordt afgeremd door middel van magnetische remmen.
STR_0582 :Bezoekers botsen tegen elkaar in hovercrafts die ze zelf kunnen besturen.
STR_0583 :
STR_0583 :Gebouw met scheve kamers en gangen die de bezoekers desoriënteren.
STR_0584 :Speciale fietsen rijden over een stalen monorail, voortbewogen door het trappen van de passagiers.
STR_0585 :Passagiers zitten in stoelparen die onder de baan hangen terwijl ze door kronkelende en scherpe omkeringen gaan.
STR_0586 :Bootvormige karretjes rijden over achtbaanrails, waardoor ze hellende bochten en diepe afdalingen kunnen maken, waarna ze in bakken water neerplonzen en rustig een stukje kunnen varen.
STR_0587 :Na een enerverende pneumatische lancering rijdt de trein met hogere snelheid over een verticale baan, over de top, en vervolgens over de andere kant weer naar beneden om terug te keren naar het station.
STR_0588 :Losse karretjes hangen onder een zigzaggende baan met haarspeldbochten en scherpe afdalingen.
STR_0589 :
STR_0589 :Een grote wagen in de vorm van een vliegend tapijt draait rond aan de uiteinden van vier draaiarmen.
STR_0590 :Passagiers rijden over een onderwaterparcours in onderzeeërs.
STR_0591 :Boten in de vorm van een vlot varen rustig door een waterbak.
STR_0593 :
STR_0593 :Draaiend wiel met hangende passagierscabines, dat eerst gaat draaien en vervolgens wordt opgetild door een steunarm.
STR_0598 :Een omgekeerde achtbaantrein wordt het station uit gelanceerd en gaat een verticale kronkelende baan op, waarna deze terugzakt, door het station heengaat en achteruit een ander stuk verticale baan opgaat.
STR_0599 :Een compacte achtbaan met individuele karretjes en steile, kronkelende afdalingen.
STR_0600 :Aangedreven mijntreinen rijden over een soepele en kronkelende baan.
@ -178,12 +179,13 @@ STR_0603 :Een achtbaan met houten ondersteuningen en stalen rails, waardoor s
STR_0604 :Passagiers zitten achter elkaar op een smalle baan met één rail, waar ze met hoge snelheid door krappe bochten en over de kop gaan.
STR_0605 :Passagiers rodelen over een kronkelende stalen baan, waarbij ze zelf kunnen beslissen hoe snel ze gaan.
STR_0606 :Een ouder type houten achtbaan met een snelle en ruwe loop, veel airtime, enige zijwaartse G-krachten en het gevoel van controleverlies.
STR_0607 :Een intens ouder type achtbaan waarin de passagiers staan.
STR_0767 :Bezoeker {INT32}
STR_0768 :Klusjesman {INT32}
STR_0769 :Monteur {INT32}
STR_0770 :Bewaker {INT32}
STR_0771 :Entertainer {INT32}
STR_0777 :Naamloos park{POP16}{POP16}
STR_0777 :Naamloos park
STR_0778 :Bord
STR_0779 :1
STR_0780 :2
@ -1738,12 +1740,12 @@ STR_2382 :Land
STR_2383 :Water
STR_2384 :{WINDOW_COLOUR_2}Je doelstelling:
STR_2385 :{BLACK}Geen
STR_2386 :{BLACK}Om ten minste {COMMA16} bezoekers in je park te hebben aan het einde van {MONTHYEAR}, met een parkwaardering van ten minste 600
STR_2386 :{BLACK}Om ten minste {COMMA32} bezoekers in je park te hebben aan het einde van {MONTHYEAR}, met een parkwaardering van ten minste 600
STR_2387 :{BLACK}Om een parkwaarde van ten minste {POP16}{POP16}{CURRENCY} te hebben aan het einde van {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Om plezier te hebben!
STR_2389 :{BLACK}Om de beste {STRINGID} te bouwen!
STR_2390 :{BLACK}Om 10 verschillende typen achtbanen in je park te hebben, elk met een plezierwaarde van ten minste 6,00
STR_2391 :{BLACK}Om ten minste {COMMA16} bezoekers in je park te hebben. Je parkwaardering mag geen moment onder de 700 komen!
STR_2391 :{BLACK}Om ten minste {COMMA32} bezoekers in je park te hebben. Je parkwaardering mag geen moment onder de 700 komen!
STR_2392 :{BLACK}Om in één maand ten minste {POP16}{POP16}{CURRENCY} aan attractiekaartjes te verdienen
STR_2393 :{BLACK}Om 10 verschillende typen achtbanen in je park te hebben, elk met een lengte van ten minste {LENGTH} en een plezierwaarde van ten minste 7,00
STR_2394 :{BLACK}Om alle 5 deels gebouwde achtbanen in je park af te maken, elk met een plezierwaarde van ten minste {POP16}{POP16}{COMMA2DP32}
@ -2096,39 +2098,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Kan dit bestand niet laden…
STR_3011 :Bestand bevat ongeldige gegevens
STR_3012 :Botsautostijl
STR_3013 :Kermisorgelstijl
STR_3014 :Romeinsefanfarestijl
STR_3015 :Oosterse stijl
STR_3016 :Marsstijl
STR_3017 :Jungledrumsstijl
STR_3018 :Egyptische stijl
STR_3019 :Speelgoedlandstijl
STR_3020 :
STR_3021 :Ruimtestijl
STR_3022 :Horrorstijl
STR_3023 :Technostijl
STR_3024 :Rustige stijl
STR_3025 :Zomerstijl
STR_3026 :Waterstijl
STR_3027 :Wildweststijl
STR_3028 :Jurastijl
STR_3029 :Rockstijl
STR_3030 :Ragtimestijl
STR_3031 :Fantasiestijl
STR_3032 :Rockstijl 2
STR_3033 :IJsstijl
STR_3034 :Sneeuwstijl
STR_3035 :Extra muziek 1
STR_3036 :Extra muziek 2
STR_3037 :Middeleeuwse stijl
STR_3038 :Stadsstijl
STR_3039 :Orgelstijl
STR_3040 :Mechanische stijl
STR_3041 :Moderne stijl
STR_3042 :Piratenstijl
STR_3043 :Rockstijl 3
STR_3044 :Snoepstijl
STR_3045 :Selecteer welke muziekstijl er moet worden gedraaid
STR_3047 :De gemeente staat de sloop van en wijzigingen aan deze attractie niet toe
STR_3048 :Marketingcampagnes worden niet toegestaan door de gemeente
@ -2355,7 +2324,7 @@ STR_3305 :{WINDOW_COLOUR_2}Maandelijkse inkomsten:
STR_3306 :{WINDOW_COLOUR_2}Maandelijkse winst:
STR_3307 :{WINDOW_COLOUR_2}Minimumlengte:
STR_3308 :{WINDOW_COLOUR_2}Plezierwaarde:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Attracties met een monumentenstatus:
@ -2917,7 +2886,7 @@ STR_5755 :Incompatibele softwareversie (server gebruikt {STRING})
STR_5756 :Ongeldig wachtwoord
STR_5757 :Server is vol
STR_5758 :{OUTLINE}{GREEN}Nieuwe speler: {STRING}.
STR_5759 :Bezig met downloaden van de kaart… ({INT32} / {INT32} KiB)
STR_5759 :Bezig met downloaden van de kaart…
STR_5760 :Hong Kong-dollar (HK$)
STR_5761 :Taiwanese dollar (NT$)
STR_5762 :Chinese yuan (CN¥)
@ -3479,7 +3448,7 @@ STR_6374 :H
STR_6375 :Onbekende attractie
STR_6376 :{WINDOW_COLOUR_2}Voertuig:{NEWLINE}{BLACK}{STRINGID} voor {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Type: {BLACK}{STRINGID} voor {STRINGID}
STR_6378 :Objectenlijst ophalen: {INT32} / {INT32}
STR_6378 :Objectenlijst ophalen:
STR_6379 :Ongeldige gegevens ontvangen
STR_6380 :Update beschikbaar!
STR_6381 :Meepraten op de OpenRCT2-Discord
@ -3697,6 +3666,47 @@ STR_6593 :Parkafscheiding verwijderen
STR_6594 :Vakinspecteur: Helling muur instellen
STR_6595 :{WINDOW_COLOUR_2}Auteur: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Auteurs: {BLACK}{STRING}
STR_6597 :Ongeldige parameter.
STR_6598 :Waarde valt buiten bereik.
STR_6599 :Spookelement niet gevonden.
STR_6600 :Ballon niet gevonden.
STR_6601 :Personeelslid niet gevonden.
STR_6602 :Attractie niet gevonden.
STR_6603 :Attractie-object niet gevonden.
STR_6604 :Speler niet gevonden.
STR_6605 :Ingangselement niet gevonden.
STR_6606 :Oppervlakte-element niet gevonden.
STR_6607 :Kaartelement niet gevonden.
STR_6608 :Baanelement niet gevonden.
STR_6609 :Baanblok niet gevonden.
STR_6610 :Padelement niet gevonden.
STR_6611 :Muurelement niet gevonden.
STR_6612 :Lichtkrantelement niet gevonden.
STR_6613 :Object opnieuw laden
STR_6614 :Kan de toegangsprijs niet aanpassen
STR_6615 :Dit baantype vereist water
STR_6616 :Ongeldige actie voor dit type werknemer
STR_6617 :Kan een kaartelement niet met zichzelf verwisselen
STR_6618 :Kan de beperkingen van dit object niet aanpassen…
STR_6619 :Dit objecttype kan niet worden beperkt!
STR_6620 :Object niet gevonden!
STR_6621 :Beperken
STR_6622 :Maakt het object enkel beschikbaar in de scenariobewerker en zandbakmodus.
STR_6623 :Voer help in voor een lijst met beschikbare commandos. Voer hide in om de console te verbergen.
STR_6624 :Vakinspecteur: Elementen sorteren
STR_6625 :Ongeldige kleur
STR_6626 :Animatie is in spiegelbeeld
STR_6627 :Snelheid is te hoog!
STR_6628 :Kan alleen op de rand geplaatst worden!
STR_6629 :Werkbalkknoppen horizontaal centreren
STR_6630 :Hiermee worden de knoppen van de bovenste werkbalk in het midden geplaatst, in plaats van aan weerszijden.
STR_6631 :Bezig met laden…
STR_6632 :Objecten checken…
STR_6633 :Scenarios checken…
STR_6634 :Baanontwerpen checken…
STR_6635 :Assetpacks checken…
STR_6636 :Titelpresentaties checken…
STR_6637 :Titelpresentatie wordt geladen…
#############
# Scenarios #
@ -4273,158 +4283,158 @@ STR_DTLS :Maak je eigen Six Flags-park, door gebruik te maken van attracties
## Wacky Worlds Scenarios
<Africa - African Diamond Mine>
STR_SCNR :Afrika - Diamantmijn
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :Je hebt een 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_SCNR :Mirage Madness
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_SCNR :Over The Edge
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_SCNR :Icy Adventures
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_SCNR :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_SCNR :Okinawa Coast
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_SCNR :Park 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_SCNR :Ayers Adventure
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_SCNR :Beach Barbecue Blast
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_SCNR :European Extravaganza
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_SCNR :From The Ashes
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_SCNR :Wacky Waikiki
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_SCNR :Canyon Calamities
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_SCNR :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_SCNR :Lost City Founder
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.
STR_DTLS :Om nog meer toeristen te trekken moet je een park bouwen dat past bij de omgeving.
<South America - Rain Forest Plateau>
STR_SCNR :Zuid-Amerika - Regenwoudplateau
STR_SCNR :Rainforest Romp
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_SCNR :Sugarloaf Shores
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_SCNR :Cliffside Castle
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 toevertrouwd om van Cliffside Castle een middeleeuws themapark te maken.
<Dark Age - Robin Hood>
STR_SCNR :Middeleeuwen - Robin Hood
STR_SCNR :Sherwood Forest
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_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Er is leven ontdekt 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_SCNR :Gemini City
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_SCNR :Animatronic Antics
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_SCNR :Mythological Madness
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_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :Je bezit een stoffige oude meteorietkrater. Als echte ondernemer heb je besloten om er een themapark van te maken en zo munt te slaan uit je (op het eerste gezicht) waardeloze land.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistorie - Jurasafari
STR_SCNR :Coastersaurus
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_SCNR :Rocky Rambles
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_SCNR :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_SCNR :Schneider Shores
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_SCNR :Metropolis
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_SCNR :Woodstock
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_SCNR :Rock n Roll Revival
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.

View File

@ -184,7 +184,7 @@ STR_0768 :Dozorca {INT32}
STR_0769 :Mechanik {INT32}
STR_0770 :Strażnik {INT32}
STR_0771 :Komik {INT32}
STR_0777 :Park bez nazwy{POP16}{POP16}
STR_0777 :Park bez nazwy
STR_0778 :Znak
STR_0779 :1
STR_0780 :2
@ -1735,12 +1735,12 @@ STR_2382 :Teren
STR_2383 :Woda
STR_2384 :{WINDOW_COLOUR_2}Twój cel:
STR_2385 :{BLACK}Brak
STR_2386 :{BLACK}Miej przynajmniej {COMMA16} gości w parku na koniec roku {MONTHYEAR} przy ocenie parku wynoszącej przynajmniej 600
STR_2386 :{BLACK}Miej przynajmniej {COMMA32} gości w parku na koniec roku {MONTHYEAR} przy ocenie parku wynoszącej przynajmniej 600
STR_2387 :{BLACK}Uzyskaj wartość parku nie mniejszą niż {POP16}{POP16}{CURRENCY} na koniec {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Baw się dobrze!
STR_2389 :{BLACK}Wybuduj tę atrakcję ({STRINGID}) najlepiej jak potrafisz!
STR_2390 :{BLACK}Zbuduj w parku 10 różnych działających kolejek górskich, każda o współczynniku emocji wynoszącym przynajmniej 6.00
STR_2391 :{BLACK}Miej przynajmniej {COMMA16} gości w swoim parku. Nie pozwól aby ocena parku spadła poniżej 700 nawet na chwilę!
STR_2391 :{BLACK}Miej przynajmniej {COMMA32} gości w swoim parku. Nie pozwól aby ocena parku spadła poniżej 700 nawet na chwilę!
STR_2392 :{BLACK}Uzyskaj miesięczny przychód ze sprzedaży biletów na atrakcje w wysokości przynajmniej {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}Zbuduj w parku 10 różnych działających kolejek górskich, każda o współczynniku emocji wynoszącym przynajmniej 7.00 i nie krótsza niż {LENGTH}
STR_2394 :{BLACK}Dokończ budowę 5 częściowo już wybudowanych kolejek górskich, projektując je tak aby współczynnik emocji każdej z nich nie był mniejszy niż {POP16}{POP16}{COMMA2DP32}
@ -2095,39 +2095,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Nie można wczytać pliku…
STR_3011 :Plik zawiera nieprawidłowe dane
STR_3012 :Styl zderzaków (autodromy)
STR_3013 :Styl organów wesołego miasteczka
STR_3014 :Styl rzymskich fanfarów
STR_3015 :Styl orientalny
STR_3016 :Styl marsjański
STR_3017 :Styl bębnów dżungli
STR_3018 :Styl egipski
STR_3019 :Styl krainy zabawek
STR_3020 :
STR_3021 :Styl kosmiczny
STR_3022 :Styl horror
STR_3023 :Styl techno
STR_3024 :Styl delikatny
STR_3025 :Styl letni
STR_3026 :Styl wodny
STR_3027 :Styl dziki zachód
STR_3028 :Styl jurajski
STR_3029 :Styl rockowy
STR_3030 :Styl ragtime
STR_3031 :Styl fantasty
STR_3032 :Styl rockowy 2
STR_3033 :Styl lodowy
STR_3034 :Styl śnieżny
STR_3035 :Muzyka niestandardowa 1
STR_3036 :Muzyka niestandardowa 2
STR_3037 :Styl średniowieczny
STR_3038 :Styl uliczny
STR_3039 :Styl organowy
STR_3040 :Styl mechaniczny
STR_3041 :Styl nowoczesny
STR_3042 :Styl piracki
STR_3043 :Styl rockowy 3
STR_3044 :Styl cukierkowy
STR_3045 :Wybierz styl muzyczny
STR_3047 :Władze lokalne zabraniają rozbiórki lub modyfikacji tej atrakcji
STR_3048 :Kampanie marketingowe zabronione przez władze lokalne
@ -2354,7 +2321,7 @@ STR_3305 :{WINDOW_COLOUR_2}Miesięczny przychód:
STR_3306 :{WINDOW_COLOUR_2}Miesięczny zysk:
STR_3307 :{WINDOW_COLOUR_2}Minimalna długość:
STR_3308 :{WINDOW_COLOUR_2}Wskaźnik emocji:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Przejażdżki/atrakcje według następującej kolejności:
@ -2914,7 +2881,7 @@ STR_5755 :Niewłaściwa wersja gry
STR_5756 :Błędne hasło
STR_5757 :Serwer osiągnął maksymalną liczbę graczy
STR_5758 :{OUTLINE}{GREEN}{STRING} dołączył do gry
STR_5759 :Pobieranie mapy … ({INT32} / {INT32}) KiB
STR_5759 :Pobieranie mapy …
STR_5760 :Dolar hongkoński (HK$)
STR_5761 :Dolar tajwański (NT$)
STR_5762 :Juan chiński (CN¥)
@ -3478,7 +3445,7 @@ STR_6374 :P
STR_6375 :Nieznana atrakcja
STR_6376 :{WINDOW_COLOUR_2}Pojazd:{NEWLINE}{BLACK}{STRINGID} dla {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Typ: {BLACK}{STRINGID} dla {STRINGID}
STR_6378 :Odebrano listę obiektów: {INT32} / {INT32}
STR_6378 :Odebrano listę obiektów:
STR_6379 :Odebrano nieprawidłowe dane
STR_6380 :Dostępna aktualizacja!
STR_6381 :Dołącz do Discorda OpenRCT2!
@ -4204,87 +4171,87 @@ STR_DTLS :Wybuduj brakujące obiekty “Six Flags” lub upiększ lunapark w
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Afryka - Kopalnia diamentów
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :Otrzymujesz w spadku nieużywaną kopalnię diamentów i znajdujesz w niej cenny kamień szlachetny. Postanawiasz zainwestować zdobytą fortunę w budowę parku tematycznego, który zasłynie na całym świecie.
<Africa - Oasis>
STR_SCNR :Afryka - Oaza
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :Odkryto pustynną oazę, która może stać się dobrym miejscem pod budowę lunaparku. Transport został zapewniony.
<Africa - Victoria Falls>
STR_SCNR :Afryka - Wodospad Wiktorii
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :Wybudowano tamę umożliwiającą produkcję taniej energii w hydroelektrowni, która będzie zasilać park. Musisz sprawić, aby osiągnął on dużą wartość, dzięki czemu spłacisz kredyt zaciągnięty na budowę.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarktyka - Ekologiczny odzysk
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :Agencja ochrony środowiska skierowała cię do przekształcenia starej rafinerii, będącej solą w oku ekologów, w czołową atrakcję turystyczną. Ziemia jest tania, lecz odsetki od kredytów wysokie. Możesz sprzedać stare budynki, aby powiększyć swoje fundusze.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Azja - Rozwój turystyki wokół Wielkiego Muru Chińskiego
STR_SCNR :Wielki Mur Chiński
STR_PARK :Wielki Mur Chiński
STR_DTLS :Władze postanowiły przyciągnąć więcej turystów w okolice Wielkiego Muru, budując w pobliżu park tematyczny. Pieniądze nie grają roli!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Azja - Odzysk japońskiego wybrzeża
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :W pewnym parku zabrakło miejsca. Twoją jedyną szansą jest wyjście w morze i w tym celu zaciągasz kredyt. Twoje budowle muszą mieć ograniczoną wysokość z uwagi na obciążenie fundamentów i zagrożenie trzęsieniem ziemi.
<Asia - Maharaja Palace>
STR_SCNR :Azja - Pałac Maharadży
STR_SCNR :Park Maharadży
STR_PARK :Park Maharadży
STR_DTLS :Maharadża zlecił ci zapewnienie rozrywki swoim licznym poddanym. Wybuduj lunapark, wzorując się na pałacu maharadży.
<Australasia - Ayers Rock>
STR_SCNR :Australia - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :Pomagasz Aborygenom w budowie lunaparku w ramach programu świadomości kulturalnej. Musisz przyciągnąć wielu gości i zapoznać ich z unikalnym dziedzictwem ludu Aborygenów.
<Australasia - Fun at the Beach>
STR_SCNR :Australia - Zabawa na plaży
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :Miejscowe oceanarium zbankrutowało. Masz już niewielki własny lunapark i kupujesz drugi park od firmy budowlanej. Przekształć je w duży połączony lunapark.
<Europe - European Cultural Festival>
STR_SCNR :Europa - Europejski Festiwal Kulturalny
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :Zlecono ci objęcie kierownictwa działu Turystycznych Atrakcji Kulturalnych. Musisz zwiększyć liczbę gości, aby spłacić unijne dofinansowanie przed zakończeniem bieżącej kadencji parlamentu europejskiego.
<Europe - Renovation>
STR_SCNR :Europa - Odbudowa
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :Pewien stary lunapark popadł w ruinę. Otrzymujesz fundusze z Unii Europejskiej, aby przywrócić temu żałosnemu miejscu jego dawną chwałę! Musisz odnowić park i zwrócić otrzymany kredyt.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Ameryka Płn. - Ekstremalne Hawaje
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :Mieszkańcy Hawajów znudzili się surfowaniem i szukają bardziej intensywnych przeżyć. Budując swój lunapark, musisz o tym pamiętać, aby utrzymać wysoką ocenę dla turystów.
<North America - Grand Canyon>
STR_SCNR :Ameryka Płn. - Wielki Kanion
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :Twoim celem jest wybudowanie lunaparku na ograniczonym terenie znajdującym się na jednym z brzegów tego przyrodniczego cudu. Będziesz mógł kupować ziemię od Indian. Musisz osiągnąć swój cel, aby zapewnić utrzymanie mieszkańcom pobliskiego miasteczka.
<North America - Rollercoaster Heaven>
STR_SCNR :Ameryka Płn. - Raj kolejek górskich
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :Jesteś znanym biznesmenem na urlopie i pragniesz wykorzystać wolny czas na przekształcenie miejskiego lunaparku w raj dla miłośników kolejek górskich. Pieniądze nie grają roli!
<South America - Inca Lost City>
STR_SCNR :Ameryka Płd. - Zaginione miasto Inków
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :W celu lepszego wypromowania miejscowej turystyki musisz wybudować lunapark pasujący do swego otoczenia. Obowiązuje ograniczenie wysokości budynków.
<South America - Rain Forest Plateau>
STR_SCNR :Ameryka Płd. - Tropikalny płaskowyż
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :W lesie deszczowym miejsce jest bardzo cenne - musisz upchnąć jak najwięcej obiektów na dostępnym wykarczowanym obszarze, aby lunapark stał się dobrą alternatywą dla miejscowego przemysłu drzewnego.
<South America - Rio Carnival>
STR_SCNR :Ameryka Płd. - Karnawał w Rio
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :Prowadzisz mały lunapark pod Rio, a bank wezwał cię do spłacenia kredytu. Musisz szybko zwiększyć swoje przychody, aby zwrócić dług.
@ -4292,72 +4259,72 @@ STR_DTLS :Prowadzisz mały lunapark pod Rio, a bank wezwał cię do spłaceni
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Mroczne Wieki - zamek
STR_SCNR :Cliffside Castle
STR_PARK :Cliffside Castle
STR_DTLS :Miejscowi miłośnicy odtwarzania rycerskich turniejów podchodzą do swego hobby raczej poważnie. Powierzyli ci zadanie budowy lunaparku stylizowanego na średniowiecze, który ma powstać na ziemiach Zamku na urwisku.
<Dark Age - Robin Hood>
STR_SCNR :Mroczne Wieki - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :Aby uwolnić bogatych od bogactwa i rozdać go biednym, wraz ze swą bandą wesołych ludzi z lasu planujesz wybudować park tematyczny w lesie Sherwood.
<Future - First Encounters>
STR_SCNR :Przyszłość - Pierwsze spotkania
STR_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Odkryto życie na odległej planecie! Wybuduj park tematyczny, którego motywem przewodnim będą kosmici, a zgarniesz kasę dzięki bezprecedensowej fali zainteresowania tym zagadnieniem.
<Future - Future World>
STR_SCNR :Przyszłość - Świat przyszłości
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Pokaż ludziom swoją twórczą, utopijną wizję przyszłości - wybuduj futurystyczny lunapark, oferujący atrakcje najwyższej jakości.
<Mythological - Animatronic Film Set>
STR_SCNR :Mitologia - Mechaniczny plan filmowy
STR_SCNR :Animatronic Antics
STR_PARK :Animatronic Antics
STR_DTLS :Otrzymujesz zadanie prowadzenia i rozbudowy istniejącego lunaparku, wybudowanego na dawnym planie filmowym. Stwórz hołd dla pionierów animacji poklatkowej, którzy przywoływali do życia mitologiczne potwory na srebrnym ekranie.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mitologia - Kołyska cywilizacji
STR_SCNR :Mythological Madness
STR_PARK :Mythological Madness
STR_DTLS :Jesteś właścicielem pewnej wyspy o dużej wartości archeologicznej. Postanawiasz sfinansować konserwację tych zabytków, budując lunapark w stylu inspirowanym mitologicznym dziedzictwem regionu.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistoria - Po asteroidzie
STR_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :Otrzymujesz na własność zakurzony krater po meteorycie. Jako przedsiębiorca z krwi i kości, postanawiasz zbudować park tematyczny związany z tym obiektem i przekształcić w ten sposób swój bezwartościowy teren w źródło przyzwoitych dochodów.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistoria - Jurajskie safari
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :Otrzymujesz zadanie wybudowania lunaparku w stylu jurajskim. Aby goście mogli wygodnie podziwiać egzotyczne rośliny i okazy zwierząt, musisz skonstruować kolejki przejeżdżające nad doliną i prowadzące do niej.
<Prehistoric - Stone Age>
STR_SCNR :Prehistoria - Epoka kamienna
STR_SCNR :Rocky Rambles
STR_PARK :Rocky Rambles
STR_DTLS :Aby powstrzymać budowniczych autostrady i zachować dla potomności tajemnicze kamienne kręgi, musisz wybudować lunapark w stylu epoki kamiennej i osiągnąć zyski. Jednak przyciągnięcie gości może okazać się trudne, bo okolica jest wybitnie niegościnna.
<Roaring Twenties - Prison Island>
STR_SCNR :Ryczące Dwudziestki - Wyspa więzienna
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :Niesławna wyspa więzienna, której ludność składała się niegdyś z przemytników i bandytów, jest na sprzedaż. Postanawiasz przekształcić ją w niesamowitą atrakcję turystyczną - pieniądze nie grają roli.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Ryczące Dwudziestki - Puchar Schneidera
STR_SCNR :Schneider Shores
STR_PARK :Schneider Shores
STR_DTLS :Za kilka lat będzie mieć miejsce 75. rocznica zdobycia przez twego dziadka Pucharu Schneidera. Postanawiasz uczcić ten wielki sukces, budując lunapark stylizowany na ów sławny wyścig hydroplanów.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Ryczące Dwudziestki - Drapacze chmur
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :Jesteś właścicielem pustej parceli w pobliżu dzielnicy o niskiej zabudowie. Aby wycisnąć jak największy zysk ze swej nieruchomości, wybuduj lunapark, którego motywem wiodącym będą drapacze chmur w stylu art deco, charakterystycznym dla lat dwudziestych.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Na twoim terenie odbywa się wielki doroczny festiwal muzyczny. Wybuduj lunapark w stylu hipisowskim, by wolnomyślicielska publiczność mogła się w nim zabawić.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Rock n Roll Revival
STR_PARK :Rock n Roll Revival
STR_DTLS :Ten starzejący się lunapark ma najlepsze dni za sobą. Pomóż właścicielom nadać mu stylowy, rockandrollowy wygląd i przekształć to miejsce w dochodowe przedsięwzięcie.

View File

@ -98,6 +98,7 @@ STR_0093 :Montanha-Russa Híbrida
STR_0094 :Montanha-Russa de Trilho Único
STR_0095 :Montanha-Russa Alpina
STR_0096 :Montanha-Russa de Madeira Clássica
STR_0097 :Montanha-Russa em Pé Clássica
STR_0512 :Uma montanha russa compacta com subida de elevação em espiral e quedas suaves e retorcidas
STR_0513 :Uma montanha russa de looping onde passageiros andam em pé
STR_0514 :Trens suspensos abaixo do trilho da montanha-russa balançam para fora nas curvas
@ -181,12 +182,13 @@ STR_0603 :Uma montanha-russa com estilo semelhante à de madeira, mas trilhos
STR_0604 :Passageiros andam numa fila única em uma pista estreita de monotrilho, enquanto correm por inversões apertadas e mudanças de direções.
STR_0605 :Passageiros descem de tobogã por um trilho de aço sinuoso, freando para controlar suas velocidades
STR_0606 :Uma montanha-russa de madeira de estilo mais antigo com um trajeto rápido e duro, com muito tempo no ar, alguma força G lateral e projetada para um sentimento de perda de controle
STR_0607 :Uma montanha-russa de aço intensa e de estilo antigo onde os passageiros andam em pé
STR_0767 :Visitante {INT32}
STR_0768 :Faxineiro {INT32}
STR_0769 :Mecânico {INT32}
STR_0770 :Segurança {INT32}
STR_0771 :Animador {INT32}
STR_0777 :Parque Sem Nome{POP16}{POP16}
STR_0777 :Parque Sem Nome
STR_0778 :Entrar
STR_0779 :1º de
STR_0780 :2 de
@ -1737,12 +1739,12 @@ STR_2382 :Terreno
STR_2383 :Água
STR_2384 :{WINDOW_COLOUR_2}Seu objetivo:
STR_2385 :{BLACK}Nenhum
STR_2386 :{BLACK}Ter pelo menos {COMMA16} visitantes em seu parque até o fim de {MONTHYEAR}, com classificação de parque de pelo menos 600
STR_2386 :{BLACK}Ter pelo menos {COMMA32} visitantes em seu parque até o fim de {MONTHYEAR}, com classificação de parque de pelo menos 600
STR_2387 :{BLACK}Alcançar um valor do parque de pelo menos {POP16}{POP16}{CURRENCY} até o fim de {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Divirta-se!
STR_2389 :{BLACK}Construir o melhor {STRINGID} que puder!
STR_2390 :{BLACK}Ter 10 tipos de montanha-russa diferentes operando em seu parque, cada uma com um valor de emoção de pelo menos 6.00
STR_2391 :{BLACK}Ter pelo menos {COMMA16} visitantes em seu parque. Você não pode deixar a classificação de parque abaixo de 700 em momento algum!
STR_2391 :{BLACK}Ter pelo menos {COMMA32} visitantes em seu parque. Você não pode deixar a classificação de parque abaixo de 700 em momento algum!
STR_2392 :{BLACK}Alcançar uma receita mensal de ingressos de atrações de pelo menos {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}Ter 10 tipos de montanha-russa diferentes operando em seu parque, cada uma com um comprimento mínimo de {LENGTH}, e um valor de emoção de no mínimo 7.00
STR_2394 :{BLACK}Terminar de construir todas as 5 montanhas-russas parcialmente construídas neste parque, projetando-as para alcançar um valor de emoção de pelo menos {POP16}{POP16}{COMMA2DP32} cada
@ -2097,39 +2099,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Incapaz de carregar arquivo…
STR_3011 :Arquivo contém dados inválidos
STR_3012 :Estilo Carrinho de Bate-Bate
STR_3013 :Estilo Órgão de Parque de Diversões
STR_3014 :Estilo Fanfarra Romana
STR_3015 :Estilo Oriental
STR_3016 :Estilo Marciano
STR_3017 :Estilo Bateria da Selva
STR_3018 :Estilo Egípcio
STR_3019 :Estilo Brinquedolândia
STR_3020 :
STR_3021 :Estilo Espaço
STR_3022 :Estilo Horror
STR_3023 :Estilo Techno
STR_3024 :Estilo Suave/Calmo
STR_3025 :Estilo Verão
STR_3026 :Estilo Água
STR_3027 :Estilo Oeste Selvagem
STR_3028 :Estilo Jurássico
STR_3029 :Estilo Rock
STR_3030 :Estilo Ragtime
STR_3031 :Estilo Fantasia
STR_3032 :Estilo Rock 2
STR_3033 :Estilo Gelo
STR_3034 :Estilo Neve
STR_3035 :Música Personalizada 1
STR_3036 :Música Personalizada 2
STR_3037 :Estilo Medieval
STR_3038 :Estilo Urbano
STR_3039 :Estilo Órgão
STR_3040 :Estilo Mecânico
STR_3041 :Estilo Moderno
STR_3042 :Estilo Piratas
STR_3043 :Estilo Rock 3
STR_3044 :Estilo Doce
STR_3045 :Selecione o estilo de música para tocar
STR_3047 :Autoridades locais proíbem a demolição ou modificações nesta atração
STR_3048 :Campanhas de marketing proibidas pelas autoridades locais
@ -2356,7 +2325,7 @@ STR_3305 :{WINDOW_COLOUR_2}Receita Mensal:
STR_3306 :{WINDOW_COLOUR_2}Lucro Mensal:
STR_3307 :{WINDOW_COLOUR_2}Comprimento Mínimo:
STR_3308 :{WINDOW_COLOUR_2}Classificação de emoção:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Atrações em ordem de preservação:
@ -2916,7 +2885,7 @@ STR_5755 :Versão de Software Incorreta (Servidor está usando {STRING})
STR_5756 :Senha Ruim
STR_5757 :Servidor Cheio
STR_5758 :{OUTLINE}{GREEN}{STRING} entrou no jogo
STR_5759 :Baixando mapa … ({INT32} / {INT32}) KiB
STR_5759 :Baixando mapa …
STR_5760 :Dólar de Hong Kong (HK$)
STR_5761 :Dólar de New Taiwan (NT$)
STR_5762 :Yuan Chinês(CN¥)
@ -3480,7 +3449,7 @@ STR_6374 :F
STR_6375 :Atração desconhecida
STR_6376 :{WINDOW_COLOUR_2}Veículo: {NEWLINE}{BLACK}{STRINGID} para {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Tipo: {BLACK}{STRINGID} para {STRINGID}
STR_6378 :Lista de objetos sendo recebidos: {INT32} / {INT32}
STR_6378 :Lista de objetos sendo recebidos:
STR_6379 :Dados inválidos recebidos
STR_6380 :Atualização disponível!
STR_6381 :Faça parte do Discord do OpenRCT2!
@ -3698,6 +3667,53 @@ STR_6593 :Remover cercas do parque
STR_6594 :Inspetor de azulejo: Mudar inclinação da parede
STR_6595 :{WINDOW_COLOUR_2}Autor: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Autores: {BLACK}{STRING}
STR_6597 :Parâmetro inválido
STR_6598 :Valor fora do intervalo
STR_6599 :Elemento fantasma não encontrado
STR_6600 :Balão não encontrado
STR_6601 :Funcionário não encontrado
STR_6602 :Atração não encontrada
STR_6603 :Objeto de entrada de atração não encontrado
STR_6604 :Jogador não encontrado
STR_6605 :Elemento de entrada não encontrado
STR_6606 :Elemento de superfície não encontrado
STR_6607 :Elemento de azulejo não encontrado
STR_6608 :Elemento de pista não encontrado
STR_6609 :Bloco de pista não encontrado
STR_6610 :Elemento de caminho não encontrado
STR_6611 :Elemento de muro não encontrado
STR_6612 :Elemento de banner não encontrado
STR_6613 :Recarregar objeto
STR_6614 :Não é possível mudar o preço de entrada do parque
STR_6615 :A pista nesse azulejo precisa de água
STR_6616 :Ação inválida para esse tipo de funcionário
STR_6617 :Não é possível trocar o elemento do azulejo com ele mesmo
STR_6618 :Não é possível restringir ou liberar o objeto…
STR_6619 :Tipo de objeto não pode ser restringido!
STR_6620 :Objeto não encontrado!
STR_6621 :Restringir
STR_6622 :Restringir objeto ao Editor de Cenário e ao modo sandbox.
STR_6623 :Digite help para uma lista de comandos disponíveis. Digite hide para esconder o console.
STR_6624 :Inspetor de azulejo: Ordenar elementos
STR_6625 :Cor inválida
STR_6626 :Animação invertida
STR_6627 :Velocidade da pista muito alta!
STR_6628 :Só pode ser colocado nas bordas do caminho!
STR_6629 :Alinhar botões da barra ferramentas horizontalmente centralizados
STR_6630 :Essa configuração irá alinhar os botões da barra de ferramentas horizontalmente no centro da tela. A maneira tradicional de alinhá-los é nos cantos esquerdo e direito.
STR_6631 :Carregando…
STR_6632 :Verificando arquivos de objeto…
STR_6633 :Verificando arquivos de cenário…
STR_6634 :Verificando arquivos de projeto de pista…
STR_6635 :Verificando conjuntos de recurso…
STR_6636 :Verificando sequências de título…
STR_6637 :Carregando sequências de título…
STR_6638 :Interface Gráfica Ampliada
STR_6639 :Modifica a interface para ser mais adequada ao uso por toque
STR_6640 :Modificar conjuntos de recurso…
STR_6641 :Janela de carregamento/progresso
STR_6642 :{STRING} ({COMMA32} / {COMMA32})
STR_6643 :{STRING} ({COMMA32} / {COMMA32} KiB)
#############
# Scenarios #
@ -4287,87 +4303,87 @@ STR_DTLS :Construa os brinquedos Six Flags que faltam, ou crie seus próprios
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :África - Minas de Diamantes
STR_SCNR :Minas da África
STR_PARK :Minas da África
STR_DTLS :Você herdou uma mina de diamante fora de uso, e encontra um diamante valioso. Você decide investir este dinheiro para construir um parque temático famoso mundialmente.
<Africa - Oasis>
STR_SCNR :África - Oásis
STR_SCNR :Loucuras da Miragem
STR_PARK :Loucuras da Miragem
STR_DTLS :Um Oásis deserto foi encontrado e proporcionaria uma bela localização para um parque. Transporte para o oasis foi fornecido.
<Africa - Victoria Falls>
STR_SCNR :África - Cataratas da Vitória
STR_SCNR :No limite
STR_PARK :No limite
STR_DTLS :Uma barreira foi construída oferecendo energia hidroelétrica barata e abundante com a qual funcionará um parque. Você precisa atingir um alto valor de parque para ajudar a reembolsar o empréstimo para a barreira.
<Antarctic - Ecological Salvage>
STR_SCNR :Antártica - Resgate Ecológico
STR_SCNR :Aventuras Geladas
STR_PARK :Aventuras Geladas
STR_DTLS :Ajude a agência de ambiente a transformar uma grande e velha refinaria ecológica de petróleo em atração turística de alto nível. Terrenos baratos, mas juros do empréstimo não. Pode-se vender os prédios velhos para melhorar a situação.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Ásia - Melhorias Turísticas na Grande Muralha da China
STR_SCNR :Grande Muralha da China
STR_PARK :Grande Muralha da China
STR_DTLS :As autoridades decidiram melhorar o turismo em volta da Grande Muralha construindo um parque no terreno ao lado. Dinheiro não é o problema!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Ásia - Recuperação da Costa Japonesa
STR_SCNR :Costa de Okinawa
STR_PARK :Costa de Okinawa
STR_DTLS :Um parque já existente ficou sem espaço. Sua única opção é construir em cima do mar, e também você pegou um empréstimo. Restrições de altura nas suas construções são obrigatórias por causa das fundações e riscos de terremotos.
<Asia - Maharaja Palace>
STR_SCNR :Ásia - Palácio do Marajá
STR_SCNR :Parque do Marajá
STR_PARK :Parque do Marajá
STR_DTLS :Você foi contratado pelo Marajá para trazer entretenimento para a grande população local. Construa um parque inspirado no palácio Mahajara.
<Australasia - Ayers Rock>
STR_SCNR :Australásia - Uluru
STR_SCNR :Aventura Uluru
STR_PARK :Aventura Uluru
STR_DTLS :Você está ajudando os aborígenes a construir um parque como parte do programa de conscientização cultural. Você precisa conseguir um grande número de visitantes para educá-los no patrimônio único dos aborígenes.
<Australasia - Fun at the Beach>
STR_SCNR :Australásia - Diversão na Praia
STR_SCNR :Explosão de Churrasco na Praia
STR_PARK :Explosão de Churrasco na Praia
STR_DTLS :Um empreendimento local de parque de vida marinha foi derrubado. Você já opera um pequeno parque e compra o outro parque da companhia de construção. Desenvolva um grande parque combinado.
<Europe - European Cultural Festival>
STR_SCNR :Europa - Festival Cultural Europeu
STR_SCNR :Extravagância Europeia
STR_PARK :Extravagância Europeia
STR_DTLS :Você foi trazido para controlar uma Atração Cultural Europeia do Visitante e deve aumentar o número de visitantes a fim de reembolsar o subsídio da União Europeia no fim do mandato atual do Parlamento Europeu.
<Europe - Renovation>
STR_SCNR :Europa - Renovação
STR_SCNR :Das Cinzas
STR_PARK :Das Cinzas
STR_DTLS :Um velho parque caiu em ruínas. Você ganha uma concessão da União Europeia para retornar essa área privada à sua antiga glória! Você precisa renovar o parque e reembolsar a concessão.
<N. America - Extreme Hawaiian Island>
STR_SCNR :América do Norte - Longínqua Ilha Havaiana
STR_SCNR :Waikiki Maluca
STR_PARK :Waikiki Maluca
STR_DTLS :As pessoas do Havaí estão entediadas de surfar e estão procurando por algo mais intenso. Você precisa construir um parque com isto em mente para manter a atração turística da área com classificação alta.
<North America - Grand Canyon>
STR_SCNR :América do Norte - Grand Canyon
STR_SCNR :Calamidades do Canyon
STR_PARK :Calamidades do Canyon
STR_DTLS :Você tem que construir um parque num terreno limitado nos dois lados desse tesouro natural - tenha a oportunidade de comprar terrenos vizinhos dos Índios Nativos Americanos. Você precisa completar o objetivo para suprir a população da cidade local.
<North America - Rollercoaster Heaven>
STR_SCNR :América do Norte - Paraíso da Montanha-Russa
STR_SCNR :Paraíso da Montanha-Russa
STR_PARK :Paraíso da Montanha-Russa
STR_DTLS :Você é um bem-sucedido magnata dos negócios em longas férias que deseja usar esse tempo transformando o parque da cidade em um Céu de Montanha-Russa. Dinheiro não é o problema!
<South America - Inca Lost City>
STR_SCNR :América do Norte - Cidade Perdida Inca
STR_SCNR :Fundadação da Cidade Perdida
STR_PARK :Fundadação da Cidade Perdida
STR_DTLS :Para dar um impulso adicional ao turismo local você deve construir um parque que está em sintonia com seus arredores, e tem restrições de altura.
STR_DTLS :Para dar um impulso adicional ao turismo local você deve construir um parque que está em sintonia com seus arredores.
<South America - Rain Forest Plateau>
STR_SCNR :América do Sul - Planalto da Floresta Tropical
STR_SCNR :Diversão na Floresta
STR_PARK :Diversão na Floresta
STR_DTLS :Espaço é limitado nessa preciosa floresta tropical - você deve amontoar o máximo possível na clareira existente, a fim de prover uma alternativa viável para a indústria madeireira local.
<South America - Rio Carnival>
STR_SCNR :América do Sul - Carnaval do Rio
STR_SCNR :Praia do Pão de Açúcar
STR_PARK :Praia do Pão de Açúcar
STR_DTLS :Você gere um pequeno parque perto do Rio, mas o banco convocou o seu empréstimo. Você precisa aumentar rapidamente a sua capacidade de ganhos para reembolsar este débito inesperado.
@ -4375,72 +4391,72 @@ STR_DTLS :Você gere um pequeno parque perto do Rio, mas o banco convocou o s
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Idade Média - Castelo
STR_SCNR :Castelo Cliffside
STR_PARK :Castelo Cliffside
STR_DTLS :Membros locais da sociedade de reconstituição da batalha são bastante sérios acerca de seus hobbies. Eles lhe confiaram o trabalho de construir um parque temático da Idade das Trevas nos terrenos do Castelo Cliffside.
<Dark Age - Robin Hood>
STR_SCNR :Idade Média - Robin Hood
STR_SCNR :Floresta de Sherwood
STR_PARK :Floresta de Sherwood
STR_DTLS :Para liberar a riqueza dos ricos e distribuir para os necessitados, você e seus seguidores decidiram construir um parque temático na Floresta de Sherwood.
<Future - First Encounters>
STR_SCNR :Futuro - Primeiro Contado
STR_SCNR :Extravagância Extraterrestre
STR_PARK :Extravagância Extraterrestre
STR_DTLS :Vida foi descoberta em um planeta distante. Construa um parque temático alienígena para ganhar dinheiro com a onda de juros sem precedentes.
<Future - Future World>
STR_SCNR :Futuro - Mundo Futurista
STR_SCNR :Cidade Gemini
STR_PARK :Cidade Gemini
STR_DTLS :Mostre sua inventiva, utópica visão do futuro - mostre um projeto futurista de parque que incorpore atrações de ponta.
<Mythological - Animatronic Film Set>
STR_SCNR :Mitológico - Set de Filmagem Animatrônico
STR_SCNR :Travessuras Animatrônicas
STR_PARK :Travessuras Animatrônicas
STR_DTLS :Você foi designado para gerir e melhorar um parque temático existente, que foi construído num velho set de filme. Faça um tributo aos animadores pioneiros de stop-motion, os primeiros a trazer criaturas míticas à vida na tela prateada.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mitológico - Berço da Civilização
STR_SCNR :Loucura Mitológica
STR_PARK :Loucura Mitológica
STR_DTLS :Você é dono de uma ilha de valor arqueológico particular. Você decidiu financiar sua preservação construindo um parque temático baseado no rico patrimônio Mitológico da área.
<Prehistoric - After the Asteroid>
STR_SCNR :Pré-Histórico - Depois do Asteroide
STR_SCNR :Diversão na Cratera
STR_PARK :Diversão na Cratera
STR_DTLS :Você é dono de uma velha cratera de meteoro empoeirada. No verdadeiro espírito empreendedor, você decidiu construir um parque temático de asteroide e converta seu terreno aparentemente sem valor em uma grande fortuna.
<Prehistoric - Jurassic Safari>
STR_SCNR :Pré-Histórico - Jurassic Safari
STR_SCNR :Parquessauro
STR_PARK :Parquessauro
STR_DTLS :Você recebeu a tarefa de construir um parque temático da Era Jurássica. Para otimizar o acesso de seus visitantes para a exibição de plantas e animais exóticos, você precisará construir brinquedos envolta e dentro do vale.
<Prehistoric - Stone Age>
STR_SCNR :Pré-Histórico - Idade da Pedra
STR_SCNR :Passeio Rochoso
STR_PARK :Passeio Rochoso
STR_DTLS :Frustre os construtores da rodovia e preserve os misteriosos círculos de pedra antigos ao construir um parque temático da Idade da Pedra e lucrar. No entanto, atrair visitantes pode ser desafiador, já que o terreno é um pouco inóspito.
<Roaring Twenties - Prison Island>
STR_SCNR :Anos 20 - Ilha-Prisão
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :A infame Ilha da Prisão - cuja população uma vez inchou com contrabandistas e estragos - agora está à venda. Você decidiu convertê-la em uma atração turística de alto nível, e dinheiro não é o problema.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Anos 20 - Copa Schneider
STR_SCNR :Praia Schneider
STR_PARK :Praia Schneider
STR_DTLS :O 75º aniversário da vitória do seu avô na Copa Schneider está chegando em alguns anos. Você vai honrar a conquista dele construindo um parque temático baseado na famosa corrida de hidroavião.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Anos 20 - Arranha-Céus
STR_SCNR :Metrópole
STR_PARK :Metrópole
STR_DTLS :Você é dono de um lote vazio perto da parte baixa da cidade. Para espremer o máximo de sua propriedade urbana, construa um parque temático arranha-céu inspirado pela arquitetura Art Déco crescente dos anos vinte.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Paz e Amor
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Um grande festival anual de música acontece em seu terreno. Construa um parque temático moderno para manter a audiência de espírito livre entretida.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Renascimento do Rock n Roll
STR_PARK :Renascimento do Rock n Roll
STR_DTLS :Este parque temático envelhecido já viu dias melhores. Ajude o dono dar uma aparência rock n roll retrô e transforme o lugar em um local bem-sucedido.

View File

@ -186,7 +186,7 @@ STR_0768 :Дворник {INT32}
STR_0769 :Механик {INT32}
STR_0770 :Охранник {INT32}
STR_0771 :Артист {INT32}
STR_0777 :Парк без имени{POP16}{POP16}
STR_0777 :Парк без имени
STR_0778 :Знак
STR_0779 :1е
STR_0780 :2е
@ -1737,12 +1737,12 @@ STR_2382 :Земля
STR_2383 :Вода
STR_2384 :{WINDOW_COLOUR_2}Ваша задача:
STR_2385 :{BLACK}Нет
STR_2386 :{BLACK}Иметь не менее {COMMA16} гостей в парке к концу {MONTHYEAR}, и рейтинг парка не менее 600
STR_2386 :{BLACK}Иметь не менее {COMMA32} гостей в парке к концу {MONTHYEAR}, и рейтинг парка не менее 600
STR_2387 :{BLACK}Поднять стоимость парка до {POP16}{POP16}{CURRENCY} к концу {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Удачи!
STR_2389 :{BLACK}Постройте самый лучший {STRINGID} что сможете!
STR_2390 :{BLACK}Завести 10 различных типов американских горок, каждую с рейтингом волнения не менее 6.00
STR_2391 :{BLACK}Иметь не менее {COMMA16} гостей в парке. Нельзя допустить падения рейтинга ниже 700!
STR_2391 :{BLACK}Иметь не менее {COMMA32} гостей в парке. Нельзя допустить падения рейтинга ниже 700!
STR_2392 :{BLACK}Довести ежемесячный доход от продажи билетов на аттракционы до {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}Завести 10 различных типов Американских горок, каждая не короче {LENGTH}, и рейтингом волнения не менее 7.00
STR_2394 :{BLACK}Закончить строительство всех 5 недостроенных горок, разработав тематику и добившись рейтинга волнения не ниже {POP16}{POP16}{COMMA2DP32} на каждой
@ -2097,39 +2097,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Невозможно загрузить…
STR_3011 :Неверные данные
STR_3012 :Электро стиль
STR_3013 :Ярмарочный стиль
STR_3014 :Стиль римских фанфар
STR_3015 :Восточный стиль
STR_3016 :Марсианский стиль
STR_3017 :Африканский стиль
STR_3018 :Египетский стиль
STR_3019 :Игрушечный стиль
STR_3020 :
STR_3021 :Космический стиль
STR_3022 :Страшный стиль
STR_3023 :Техно стиль
STR_3024 :Нежный стиль
STR_3025 :Летний стиль
STR_3026 :Водный стиль
STR_3027 :Стиль Дикого Запада
STR_3028 :Юрский стиль
STR_3029 :Рок
STR_3030 :Стиль Регги
STR_3031 :Фэнтези стиль
STR_3032 :Рок 2
STR_3033 :Ледяной стиль
STR_3034 :Снежный стиль
STR_3035 :Своя музыка 1
STR_3036 :Своя музыка 2
STR_3037 :Средневековье
STR_3038 :Город
STR_3039 :Органный стиль
STR_3040 :Механический стиль
STR_3041 :Современный стиль
STR_3042 :Пиратский стиль
STR_3043 :Рок 3
STR_3044 :Конфетный стиль
STR_3045 :Выберите стиль музыки
STR_3047 :Местные власти запрещают уничтожение и изменение этого аттракциона
STR_3048 :Маркетинговые кампании запрещены местными властями
@ -2356,7 +2323,7 @@ STR_3305 :{WINDOW_COLOUR_2}Месячный доход:
STR_3306 :{WINDOW_COLOUR_2}Месячная прибыль:
STR_3307 :{WINDOW_COLOUR_2}Миним. длина:
STR_3308 :{WINDOW_COLOUR_2}Рейтинг волнения:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Аттракционы в зарезервированном порядке:
@ -2846,87 +2813,87 @@ STR_DTLS :Постройте собственный парк Six Flags. Вы
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR : Африка - Добыча алмазов
STR_SCNR :Шахты Африки
STR_PARK :Шахты Африки
STR_DTLS :Вы унаследовали алмазную шахту и нашли дорогой алмаз. Затем вы решили инвестировать деньги в тематический парк.
<Africa - Oasis>
STR_SCNR : Африка - Оазис
STR_SCNR :Мираж
STR_PARK :Мираж
STR_DTLS :Был открыт пустынный оазис, который может стать прекрасным местом для парка. Транспорт в оазис уже обеспечен.
<Africa - Victoria Falls>
STR_SCNR : Африка - Водопад
STR_SCNR :Водопад
STR_PARK :Водопад
STR_DTLS :Была построена плотина, котор. дала дешёвую электроэнергию. Вам надо увеличить доходы парка, чтобы помочь выплатить заем за плотину.
<Antarctic - Ecological Salvage>
STR_SCNR : Антарктика - Экоспасение
STR_SCNR :Ледовый Мир
STR_PARK :Ледовый Мир
STR_DTLS :Агентство по охране природы обратилось к вам, чтобы попросить помощи в строительстве парка развлечений. Земля недорога, но процент по кредитам высок. Можете продавать старые постройки.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR : Евразия - Великая Cтена
STR_SCNR :Великая стена
STR_PARK :Великая стена
STR_DTLS :Власти решили развивать туризм вокруг ВКС, построив тематический парк. Деньги - не проблема!
<Asia - Japanese Coastal Reclaim>
STR_SCNR : Евразия - Восточные берега
STR_SCNR :Окинава
STR_PARK :Окинава
STR_DTLS :Парку не хватает земли. Единственный шанс - строить в море, и вы берете заем. Высоту сооружений ограничивает фундамент и риск землетрясений.
<Asia - Maharaja Palace>
STR_SCNR : Евразия - Магараджа
STR_SCNR :Парк Магарадж
STR_PARK :Парк Магарадж
STR_DTLS :Вас выбрали развлекать людей вокруг Магараджи. Постройте парк в духе дворца Магараджей.
<Australasia - Ayers Rock>
STR_SCNR : Австралазия - Скала Айа
STR_SCNR :Приключение Айа
STR_PARK :Приключение Айа
STR_DTLS :Вы помогаете аборигенам построить парк, как часть культурной программы. Вам нужно привлечь большое число гостей и передать им уникальное наследие местной культуры.
<Australasia - Fun at the Beach>
STR_SCNR : Австралазия - Побережье
STR_SCNR :Барбекю на Берегу
STR_PARK :Барбекю на Берегу
STR_DTLS :Местный морской парк потерпел банкротство. У вас уже есть небольшой парк и вы можете купить еще один у строительной компании. Создайте один общий парк.
<Europe - European Cultural Festival>
STR_SCNR : Европа - Фестиваль Культуры
STR_SCNR :Европейский Фестиваль
STR_PARK :Европейский Фестиваль
STR_DTLS :Вам передали в управление Европейский Культурный Центр. Вы должны увеличить число гостей и вернуть субсидию Евросоюза до начала парламентских выборов.
<Europe - Renovation>
STR_SCNR : Европа - Обновление
STR_SCNR :Возрождение
STR_PARK :Возрождение
STR_DTLS :Старый парк пришел в запустение. Вы получили грант Евросоюза и должны вернуть эту землю к былой славе! Необходимо обновить парк и выплатить грант.
<N. America - Extreme Hawaiian Island>
STR_SCNR : С. Америка - Гавайский экстрим
STR_SCNR :Ваки Ваикики
STR_PARK :Ваки Ваикики
STR_DTLS :Населению Гаваев надоело заниматься сёрфингом и они желают что-нибудь более экстремальное. Вам надо построить парк, чтобы жители островов снова почувствовали вкус жизни!
<North America - Grand Canyon>
STR_SCNR : Сев. Америка - Гранд Каньон
STR_SCNR :Гранд Каньон
STR_PARK :Гранд Каньон
STR_DTLS :Вы должны построить парк на небольшом участке земли - у вас есть возможность покупать близлежащие территории у местных индейцев. Необходимо поддерживать население местного городка.
<North America - Rollercoaster Heaven>
STR_SCNR : Сев. Америка - Горки в Небесах
STR_SCNR :Горки в Небесах
STR_PARK :Горки в Небесах
STR_DTLS :Вы - успешный предприниматель и желаете сделать из городского парка Горки на Небесах. Деньги для вас - не проблема!
<South America - Inca Lost City>
STR_SCNR : Южн. Америка - Город инков
STR_SCNR :Город Инков
STR_PARK :Город Инков
STR_DTLS :Чтобы развивать местный туризм, вы должны создать парк в духе местных достопримечательностей.
<South America - Rain Forest Plateau>
STR_SCNR : Юж. Америка - Лесное Плато
STR_SCNR :Тропический Лес
STR_PARK :Тропический Лес
STR_DTLS :Место ограничено ценнейшими тропическими лесами - вы должны строить на существующей территории, чтобы не дать вырубать леса.
<South America - Rio Carnival>
STR_SCNR : Юж. Америка - Карнавал в Рио
STR_SCNR :Сахарный Берег
STR_PARK :Сахарный Берег
STR_DTLS :У вас небольшой парк близ Рио, но банк требует вернуть кредит. Вам срочно нужно увеличить прибыли, чтобы вернуть долг.
@ -2934,71 +2901,71 @@ STR_DTLS :У вас небольшой парк близ Рио, но бан
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR : Темные Века-Замок
STR_SCNR :Замок на Скале
STR_PARK :Замок на Скале
STR_DTLS :Члены местного исторического клуба серьезно увлечены своим хобби. Они уговаривают вас построить Парк развлечений на средневековую тематику на территории Старинного Замка.
<Dark Age - Robin Hood>
STR_SCNR : Темные Века-Робин Гуд
STR_SCNR :Шервудский Лес
STR_PARK :Шервудский Лес
STR_DTLS :Чтобы отобрать деньги у богатых и отдать их беднякам, вы и ваши друзья-разбойники решили построить парк развлечений в Шервудском Лесу.
<Future - First Encounters>
STR_SCNR : Будущее - Первый Контакт
STR_SCNR :Фантастическая Феерия
STR_PARK :Фантастическая Феерия
STR_DTLS :На отдаленной планете была открыта жизнь. Постройте инопланетный тематический парк, чтобы заработать на сенсации.
<Future - Future World>
STR_SCNR : Будущее-Мир Будущего
STR_SCNR :Геминеи
STR_PARK :Геминеи
STR_DTLS :Покажите свое видение будущего - постройте тематический парк футуристической направленности с потрясающими аттракционами.
<Mythological - Animatronic Film Set>
STR_SCNR : Мифология - Анимационная киностудия
STR_SCNR :Студия Абсурда
STR_PARK :Студия Абсурда
STR_DTLS :Вам поставили задачу улучшить существующий тематический парк, построенный на месте старой киностудии. Сделайте акцент на мифических существах, которых оживили пионеры анимации.
<Mythological - Cradle of Civilisation>
STR_SCNR : Мифология - Колыбель Цивилизации
STR_SCNR :Мифическое Безумство
STR_PARK :Мифическое Безумство
STR_DTLS :Вы владеете островом, имеющим особое археологическое значение. И решили построить парк развлечений, основанный на богатом мифологическом наследии острова.
<Prehistoric - After the Asteroid>
STR_SCNR : Древние времена - Астероид
STR_SCNR :Кратер
STR_PARK :Кратер
STR_DTLS :Вы владеете старым метеоритным кратером. И решаете превратить дешевую бесполезную землю в процветающее предприятие, построив тематический парк.
<Prehistoric - Jurassic Safari>
STR_SCNR : Прехисторик - Юрское Сафари
STR_SCNR :Брегозавр
STR_PARK :Брегозавр
STR_DTLS :Вам поставили задачу построить парк развлечений Юрского Периода. Для оптимизации доступа посетителей к экзотическим растениям и животным вам придется соорудить аттракционы, катающие людей по территории.
<Prehistoric - Stone Age>
STR_SCNR : Каменный век
STR_SCNR :Деревня
STR_PARK :Деревня
STR_DTLS :Чтобы помешать дорожным строителям и сохранить таинственные каменные круги, вам придётся построить тематический парк каменного века и получить с него прибыль. Однако, местность вам досталась не особо гостеприимная.
<Roaring Twenties - Prison Island>
STR_SCNR : Двадцатые годы - Тюремный остров
STR_SCNR :Алкатрас
STR_PARK :Алкатрас
STR_DTLS :Безымянный тюремный остров, чье население раньше составляли контрабандисты и рэкетиры, сейчас выставлен на продажу. Вы решили превратить его в туристическую достопримечательность.
<Roaring Twenties - Schneider Cup>
STR_SCNR : Двадцатые Годы - Кубок Шнайдера
STR_SCNR :Кубок Шнайдера
STR_PARK :Кубок Шнайдера
STR_DTLS :Через несколько лет наступает 75я годовщина завоевания вашим дедушкой Кубка Шнайдера. Вы собираетесь отметить его достижение, построив тематический парк, посвящённый гонкам на гидросамолетах.
<Roaring Twenties - Skyscrapers>
STR_SCNR : Двадцатые годы - Небоскребы
STR_SCNR :Метрополис
STR_PARK :Метрополис
STR_DTLS :Вы владеете пустырём в одном из районов города. Чтобы выжать из своей земли максимум, постройте парк развлечений в виде небоскрёба в духе двадцатых годов.
<Rock 'n' Roll - Flower Power>
STR_SCNR : Рок-н-Ролл - Сила Цветов
STR_SCNR :Цветник
STR_PARK :Цветник
STR_DTLS :На вашей земле проводится ежегодный музыкальный фестиваль. Постройте людям парк развлечений в духе музыки и свободы.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR : Рок-н-Ролл - Рок-н-Ролл
STR_SCNR :Рок-н-Ролл Жив
STR_PARK :Рок-н-Ролл Жив
STR_DTLS :Этот чудесный парк видел и лучшие дни. Помогите его владельцу улучшить дела и превратить парк в процветающее предприятие.

View File

@ -97,6 +97,8 @@ STR_0091 :Okänd åktur (59)
STR_0092 :Induktionsberg- och dalbana
STR_0093 :Hybridberg- och dalbana
STR_0094 :Enkelspårig berg- och dalbana
STR_0095 :Alpin berg- och dalbana
STR_0096 :Klassisk berg- och dalbana i trä
STR_0512 :En kompakt berg- och dalbana med en spiralvriden kedjelift och mjuka, vridna stup.
STR_0513 :En ringlande berg- och dalbana där passagerarna åker stående
STR_0514 :Tåg hängande under banan som svingar ut åt sidan i kurvorna
@ -161,7 +163,7 @@ STR_0578 :Vagnar åker runt en bana omgiven av ringar utför branta nedförsb
STR_0579 :En stillsam runda minigolf
STR_0580 :En gigantisk berg- och dalbana i stål som kan ge mjuka fall och höjder på över 100 meter
STR_0581 :En ring med säten dras upp till toppen av ett högt torn medan det sakta roterar, för att sedan falla fritt och stoppas mjukt vid botten med hjälp av magnetbromsar
STR_0582 :Gäster styr svävarfarkoster
STR_0582 :Gästerna åker i svävare som de styr fritt
STR_0583 :Byggnad med förvrängda rum och vinklade korridorer för att förvilla människorna som går igenom den
STR_0584 :Speciella cyklar som passagerarna själva trampar fram längs en stålskensbana
STR_0585 :Passagerarna sitter i par med ansiktena antingen bakåt eller framåt då de åker genom loopar och skruvar med snabba omkastningar
@ -177,13 +179,15 @@ STR_0599 :En kompakt berg- och dalbana med individuella vagnar och mjukt vrid
STR_0600 :Motordrivna gruvtåg rusar längs en mjuk och kurvig spårlayout
STR_0602 :Berg- och dalbanetågen accelereras ut från stationen med induktionsmotorer för att fara genom tvinnande inversioner
STR_0603 :En berg- och dalbana i trästil med stålspår, som möjliggör branta stup och inversioner
STR_0604 :Passagerare åker i singelled längs en stålbalk, som tar dem genom tighta inversioner och krökar.
STR_0604 :Passagerare åker i singelled längs en stålbalk, som tar dem genom tighta inversioner och krökar
STR_0605 :Passagerare åker släde nerför ett slingrande stålspår och bromsar för att reglera hastigheten
STR_0606 :Den här berg- och dalbanan i trä är i äldre stil. Den är snabb, tuff, högljudd och ger en känsla av att förlora kontrollen. Dessutom spenderar man mycket tid flygandes över topparna
STR_0767 :Besökare {INT32}
STR_0768 :Vaktmästare {INT32}
STR_0769 :Mekaniker {INT32}
STR_0770 :Säkerhetsvakt {INT32}
STR_0771 :Underhållare {INT32}
STR_0777 :Namnlös park{POP16}{POP16}
STR_0777 :Namnlös park
STR_0778 :Skylt
STR_0779 :1
STR_0780 :2
@ -274,8 +278,8 @@ STR_0883 :Spara spel
STR_0884 :Ladda landskap
STR_0885 :Spara landskap
STR_0887 :Avsluta scenarioredigeraren
STR_0888 :Avsluta åktursdesignern
STR_0889 :Avsluta spårdesignredigeraren
STR_0888 :Avsluta bandesignern
STR_0889 :Avsluta bandesignhanterare
STR_0891 :Skärmdump
STR_0892 :Skärmdumpen sparades som {STRINGID}
STR_0893 :Skärmdumpen misslyckades!
@ -1734,12 +1738,12 @@ STR_2382 :Land
STR_2383 :Vatten
STR_2384 :{WINDOW_COLOUR_2}Ditt uppdrag:
STR_2385 :{BLACK}Inget
STR_2386 :{BLACK}Att ha minst {COMMA16} besökare i parken tills {MONTHYEAR}, med ett parkomdöme över 600
STR_2386 :{BLACK}Att ha minst {COMMA32} besökare i parken tills {MONTHYEAR}, med ett parkomdöme över 600
STR_2387 :{BLACK}Att uppnå ett parkvärde över {POP16}{POP16}{CURRENCY} tills {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Ha kul!
STR_2389 :{BLACK}Bygg den bästa {STRINGID} du kan!
STR_2390 :{BLACK}Att ha tio olika sorters berg- och dalbanor i din park, alla med en glädjenivå över 6.00
STR_2391 :{BLACK}Att ha minst {COMMA16} besökare i din park. Du får aldrig låta parkomdömet gå under 700!
STR_2391 :{BLACK}Att ha minst {COMMA32} besökare i din park. Du får aldrig låta parkomdömet gå under 700!
STR_2392 :{BLACK}Att få en månadsinkomst från åktursbiljetter på minst {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}Att ha tio olika sorters berg- och dalbanor i din park, alla ska vara längre än {LENGTH}, och med en glädjenivå över 7.00
STR_2394 :{BLACK}Att bygga klart alla fem delvis byggda berg- och dalbanor i parken, designade så att de alla får en glädjenivå över {POP16}{POP16}{COMMA2DP32}
@ -2095,39 +2099,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Kan inte ladda fil…
STR_3011 :Filen innehåller ogiltiga data
STR_3012 :Radiobilstema
STR_3013 :Tivolitema
STR_3014 :Romerskt tema
STR_3015 :Pagod-tema
STR_3016 :Marstema
STR_3017 :Djungeltema
STR_3018 :Egyptiskt tema
STR_3019 :Underlandstema
STR_3020 :
STR_3021 :Rymdtema
STR_3022 :Skräcktema
STR_3023 :Technotema
STR_3024 :Stillsamt tema
STR_3025 :Sommartider
STR_3026 :Vattentema
STR_3027 :Vilda västern-tema
STR_3028 :Dinosaurietema
STR_3029 :Rocktema
STR_3030 :Glade Chapplies piano
STR_3031 :Fantasitema
STR_3032 :Rocktema 2
STR_3033 :Istema
STR_3034 :Snötema
STR_3035 :Egen musik 1
STR_3036 :Egen musik 2
STR_3037 :Medeltidstema
STR_3038 :Stadstema
STR_3039 :Orgeltema
STR_3040 :Mekaniktema
STR_3041 :Modernt tema
STR_3042 :Pirattema
STR_3043 :Rocktema 3
STR_3044 :Godislandstema
STR_3045 :Välj musikstil som ska spelas{NEWLINE}Teman på sånger och dekorationer kan blandas utan problem
STR_3047 :Lokala myndigheter har förbjudit rivning och modifikation av denna åktur
STR_3048 :Kampanjer är förbjudna av lokala myndigheter
@ -2355,7 +2326,7 @@ STR_3305 :{WINDOW_COLOUR_2}Månadsinkomst:
STR_3306 :{WINDOW_COLOUR_2}Månadsvinst:
STR_3307 :{WINDOW_COLOUR_2}Minimilängd:
STR_3308 :{WINDOW_COLOUR_2}Glädjenivå:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Åkturer och attraktioner som måste bevaras:
@ -2378,8 +2349,8 @@ STR_3331 :Vägen från parkentrén till kartkanten är antingen inte komplett
STR_3332 :Parkentrén är åt fel håll eller har ingen väg som leder till kartkanten
STR_3333 :Exportera egendefinierade objekt med sparade spel
STR_3334 :Välj om egendefinierade objekt (extra objekt som inte följer med basspelet) ska sparas i sparade spel och scenarion, vilket låter spelare importera dessa data
STR_3335 :Åktursdesigner Välj åkturstyp och fordon
STR_3336 :Bandesign-hanterare Välj åkturstyp
STR_3335 :Bandesigner Välj åkturstyp och fordon
STR_3336 :Bandesignhanterare Välj åkturstyp
STR_3338 :{BLACK}Egendesignad layout
STR_3339 :{BLACK}{COMMA16} design tillgänglig, eller egendesignad layout
STR_3340 :{BLACK}{COMMA16} designer tillgängliga, eller egendesignad layout
@ -2501,9 +2472,9 @@ STR_5196 :Landrättigheter
STR_5197 :Dekorationer
STR_5198 :Gångväg
STR_5199 :Åkturkonstruktion
STR_5200 :Spårdesignplacering
STR_5200 :Bandesignplacering
STR_5201 :Ny åktur
STR_5202 :Spårdesignval
STR_5202 :Bandesignval
STR_5203 :Åkturer
STR_5204 :Åkturslista
STR_5205 :Besökare
@ -2516,8 +2487,8 @@ STR_5211 :Forskningslista
STR_5212 :Dekorationsinställningar
STR_5213 :Målinställningar
STR_5214 :Kartgenerator
STR_5215 :Spårdesignfönstret
STR_5216 :Spårdesignlistan
STR_5215 :Bandesignfönstret
STR_5216 :Bandesignlistan
STR_5217 :Fusk
STR_5218 :Teman
STR_5219 :Inställningar
@ -2918,7 +2889,7 @@ STR_5755 :Fel version av OpenRCT2 (servern använder {STRING})
STR_5756 :Fel lösenord
STR_5757 :Servern är full
STR_5758 :{OUTLINE}{GREEN}{STRING} har anslutit till spelet
STR_5759 :Laddar ner banan… ({INT32} av {INT32}) KiB
STR_5759 :Laddar ner banan…
STR_5760 :Hong Kong-dollar (HK$)
STR_5761 :New Taiwan-dollar (NT$)
STR_5762 :Kinesiska Yuan (CN¥)
@ -3482,7 +3453,7 @@ STR_6374 :F
STR_6375 :Okänd åktur
STR_6376 :{WINDOW_COLOUR_2}Fordon:{NEWLINE}{BLACK}{STRINGID} för {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Typ: {BLACK}{STRINGID} för {STRINGID}
STR_6378 :Mottar objektlista: {INT32} / {INT32}
STR_6378 :Mottar objektlista:
STR_6379 :Mottog ogiltiga data
STR_6380 :Uppdatering tillgänglig!
STR_6381 :Gå med i OpenRCT2 Discord!
@ -3597,6 +3568,109 @@ STR_6490 :Varning: Halvkompatibel parkversion
STR_6491 :Denna park sparades i en nyare version av OpenRCT2. Parken är v{INT32} och kräver åtminstone v{INT32}.
STR_6492 :Denna park sparades i en äldre version av OpenRCT2, och kan inte öppnas med denna version av OpenRCT2. Parken är v{INT32}.
STR_6493 :Denna park sparades i en nyare version av OpenRCT2, viss data kan gå förlorad. Parken är v{INT32} och kräver åtminstone v{INT32}.
STR_6494 :Gruppera efter färdtyp
STR_6495 :Gruppera turer efter färdtyp istället för att visa varje fordon separat.
STR_6496 :{WINDOW_COLOUR_2}{STRINGID}
STR_6497 :Klicka på en ruta för att visa dess rutelement.{NEWLINE}Ctrl + klicka på ett rutelement för att välja det direkt.
STR_6498 :Aktivera för att behålla kvadratisk kartform.
STR_6499 :Fordonstyp stöds inte av spårdesignformatet
STR_6500 :Spårelement stöds inte av spårdesignformatet
STR_6501 :Slumpvis färg
STR_6502 :Ange ett värde mellan {COMMA16} och {COMMA16}
STR_6503 :Minst ett stationsobjekt måste väljas
STR_6504 :Minst en terrängyta måste väljas
STR_6505 :Minst en terrängkant måste väljas
STR_6506 :Stor halvkorkskruv (vänster)
STR_6507 :Stor halvkorkskruv (höger)
STR_6508 :Medium halvloop (vänster)
STR_6509 :Medium halvloop (höger)
STR_6510 :Noll-G roll (vänster)
STR_6511 :Noll-G roll (höger)
STR_6512 :Stor noll-G roll (vänster)
STR_6513 :Stor noll-G roll (höger)
STR_6514 :Ogiltig höjd!
STR_6515 :{BLACK}RollerCoaster Tycoon 1 är inte länkad. Reservbilder används.
STR_6516 :Ett eller flera objekt som läggs till kräver RollerCoaster Tycoon 1 länkad för korrekt visning. Reservbilder används.
STR_6517 :Ett eller flera objekt i den här parken kräver RollerCoaster Tycoon 1 länkad för korrekt visning. Reservbilder används.
STR_6518 :{BLACK}Håll muspekaren över ett scenario för att se dess beskrivning och mål. Klicka för att börja spela.
STR_6519 :Extra
STR_6520 :Resurspaket
STR_6521 :Låg prioritet
STR_6522 :Hög prioritet
STR_6523 :Minska prioriteten för det valda resurspaketet.
STR_6524 :Öka prioriteten för det valda resurspaketet.
STR_6525 :Ladda om alla resurspaket i spelet med resurspaket aktiverade.
STR_6526 :(grundläggande grafik, musik och ljudeffekter)
STR_6527 :Tävlingar
STR_6528 :Ogiltiga spårparametrar!
STR_6529 :Ogiltig färgschemaparameter!
STR_6530 :User Created Expansion Set
STR_6531 :Tidsmaskinen
STR_6532 :Katys drömvärld
STR_6533 :{WINDOW_COLOUR_2}Spänningsfaktor: {BLACK}-{COMMA16}%
STR_6534 :{WINDOW_COLOUR_2}Intensitetsfaktor: {BLACK}-{COMMA16} %
STR_6535 :{WINDOW_COLOUR_2}Illamåendefaktor: {BLACK}-{COMMA16}%
STR_6536 :Denna park sparades i en senare version av OpenRCT2. Parken sparades i v{INT32}, du använder för närvarande v{INT32}.
STR_6537 :Tillåt normala gångvägar som köer
STR_6538 :Visar normala gångvägar i kölistan i gångvägsfönstret
STR_6539 :Bromsen stängd
STR_6540 :{WINDOW_COLOUR_2}Särskilt tack till följande företag för att de tillåter oss att använda deras likhet:
STR_6541 :{WINDOW_COLOUR_2}Rocky Mountain Construction Group, Josef Wiegand GmbH & Co. KG
STR_6542 :Medverkande
STR_6543 :Medverkande …
STR_6544 :Lånet kan inte vara negativt!
STR_6545 :Använd RCT1-ränteberäkning
STR_6546 :Använd RollerCoaster Tycoon 1:s ränteberäkningsalgoritm, som använder en fast procentsats på cirka 1,33 %.
STR_6547 :Allt landskap
STR_6548 :Visa räcken vid korsning
STR_6549 :Kompatibilitetsobjekt kan inte väljas!
STR_6550 :Denna post ingår för bakåtkompatibilitet med gamla eller skadade objekt. Den kan inte väljas, bara avmarkeras.
STR_6551 :Armégrönt
STR_6552 :Honungsmelon
STR_6553 :Gulbrun
STR_6554 :Rödbrun
STR_6555 :Korallrosa
STR_6556 :Skogsgrön
STR_6557 :Chartreusegrön
STR_6558 :Jaktgrön
STR_6559 :Celadongrön
STR_6560 :Limegrön
STR_6561 :Sepia
STR_6562 :Persikorosa
STR_6563 :Ljus lavendel
STR_6564 :Blågrön
STR_6565 :Havsskumsgrön
STR_6566 :Violett
STR_6567 :Lavendel
STR_6568 :Pastellorange
STR_6569 :Djupt vatten
STR_6570 :Pastellrosa
STR_6571 :Umbra
STR_6572 :Beige
STR_6573 :Osynlig
STR_6574 :Tomhet
STR_6575 :Tillåt speciella färgscheman
STR_6576 :Lägger till speciella färger till färgpaletten
STR_6577 :Blockbromshastighet
STR_6578 :Ställ in hastighetsgräns för blockbromsar. I blockområdesläge kopplas intilliggande bromsar med en lägre hastighet till blockbromsen.
STR_6579 :Blockbromsar ställs in på standardhastighet när de sparas som bandesign
STR_6580 :Återställa
STR_6581 :Är du säker på att du vill återställa alla kortkommandon på den här fliken?
STR_6582 :Öppna fönstret för kortkommandon
STR_6583 :{WINDOW_COLOUR_2}Bakvända tåg
STR_6584 :Välj att köra tåg baklänges
STR_6585 :Ändringar kan inte göras…
STR_6586 :OpenRCT2
STR_6587 :OpenRCT2:s omslagstema är ett verk av Allister Brimble,{NEWLINE}licensierat under CC BY-SA 4.0.
STR_6588 :Tack till Herman Riddering för att vi fick spela in 35er Voigt.
STR_6589 :Visa fönsterknappar till vänster
STR_6590 :Visa fönsterknapparna (t.ex. för att stänga fönstret) till vänster om titelraden istället för till höger.
STR_6591 :Den här personen reparerar just nu en åktur och kan därför inte avskedas.
STR_6592 :Den här personen inspekterar just nu en åktur och kan därför inte avskedas.
STR_6593 :Ta bort parkstängsel
STR_6594 :Rutinspekteraren: Växla vägglutning
STR_6595 :{WINDOW_COLOUR_2}Författare: {BLACK}{STRING}
STR_6596 :{WINDOW_COLOUR_2}Författare: {BLACK}{STRING}
#############
# Scenarion #
@ -4189,87 +4263,87 @@ STR_DTLS :Bygg de Six Flags-attraktionerna som saknas eller skapa dina egna f
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Afrika Afrikansk diamantgruva
STR_SCNR :Afrikas gruvor
STR_PARK :Afrikas gruvor
STR_DTLS :Du har hittat en diamant efter att ha ärvt en övergiven diamantgruva. Du beslutar dig för att satsa pengarna på ett storslaget nöjesfält.
<Africa - Oasis>
STR_SCNR :Afrika Oas
STR_SCNR :Hägring och fägring
STR_PARK :Hägring och fägring
STR_DTLS :Man har upptäckt en ökenoas som skulle passa utmärkt till ett nöjesfält. Transportmöjligheter till oasen har ordnats redan.
<Africa - Victoria Falls>
STR_SCNR :Afrika Victoriafallen
STR_SCNR :Över kanten
STR_PARK :Över kanten
STR_DTLS :En nybyggd damm ger tillräckligt med billig vattenkraft för att kunna driva ett nöjesfält. Du måste dock uppnå ett högt parkvärde för att kunna betala tillbaka lånet för dammen.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarktis Miljöräddning
STR_SCNR :Iskallt äventyr
STR_PARK :Iskallt äventyr
STR_DTLS :En miljöorganisation har bett dig att bygga om ett gammalt, miljöfarligt oljeraffinaderi till en toppmodern turistattraktion. Marken är billig, men låneräntan är hög. Du kan dock sälja de gamla byggnaderna.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asien Turistsatsning vid Kinesiska muren
STR_SCNR :Kinesiska muren
STR_PARK :Kinesiska muren
STR_DTLS :Myndigheterna har beslutat att stödja turismen kring Kinesiska muren genom att bygga ett nöjesfält i dess närhet. Pengar är inget hinder!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asien Japansk kustremsa
STR_SCNR :Okinawa-kusten
STR_PARK :Okinawa-kusten
STR_DTLS :Ett nöjesfält behöver mer plats. Din enda möjlighet är att ta ett lån och bygga ut mot havet. Höjdrestriktioner råder på grund av jordbävningsfaran.
<Asia - Maharaja Palace>
STR_SCNR :Asien Maharadjans palats
STR_SCNR :Maharadjaparken
STR_PARK :Maharadjaparken
STR_DTLS :Du har fått i uppdrag av maharadjan att underhålla lokalbefolkningen. Inhämta inspiration från maharadjans palats när du bygger nöjesfältet.
<Australasia - Ayers Rock>
STR_SCNR :Australasien Ayers Rock
STR_SCNR :Ayers äventyr
STR_PARK :Ayers äventyr
STR_DTLS :Du hjälper urbefolkningen att bygga ett nöjesfält som en del av ett kulturprogram. Du måste locka tillräckligt med besökare för att kunna sprida urbefolkningens kultur.
<Australasia - Fun at the Beach>
STR_SCNR :Australasien Fun at the Beach
STR_SCNR :Strandhugg
STR_PARK :Strandhugg
STR_DTLS :En lokal affärsmans vattenpark har gått i konkurs. Du driver redan en liten välfungerande park, och har köpt upp konkursboet. Utveckla det hela till en stor gemensam park.
<Europe - European Cultural Festival>
STR_SCNR :Europa Europeisk kulturfestival
STR_SCNR :Europeisk festival
STR_PARK :Europeisk festival
STR_DTLS :Du har blivit erbjuden att ta över en europeisk turistattraktion, men måste öka besöksfrekvensen för att kunna betala tillbaka ett EU-lån innan det europeiska parlamentet tar sommarlov.
<Europe - Renovation>
STR_SCNR :Europa Renovering
STR_SCNR :Ur askan
STR_PARK :Ur askan
STR_DTLS :Ett gammalt nöjesfält har förfallit. Du har beviljats ett EU-lån för att kunna återställa det nedgångna området till sin forna prakt. Du måste renovera nöjesfältet och betala tillbaka lånet.
<N. America - Extreme Hawaiian Island>
STR_SCNR :Nordamerika Extrem Hawaii-ö
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :Folket på Hawaii har tröttnat på att surfa och vill göra något mer spännande. Du måste bygga ett nöjesfält för att hålla dem på gott humör och bibehålla områdets attraktionskraft.
<North America - Grand Canyon>
STR_SCNR :Nordamerika Grand Canyon
STR_SCNR :Trubbel i Canyon
STR_PARK :Trubbel i Canyon
STR_DTLS :Du måste bygga ett nöjesfält på ett begränsat område på båda sidor om detta naturfenomen. Du har möjlighet att köpa upp angränsande land från urbefolkningen. Målet med bygget är att bibehålla den lokala befolkningssiffran.
<North America - Rollercoaster Heaven>
STR_SCNR :Nordamerika Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :Du är en framgångsrik affärsman som under ett sabbatsår beslutar dig för att förvandla en stadspark till ett ”Rollercoaster Heaven”, oavsett kostnad!
<South America - Inca Lost City>
STR_SCNR :Sydamerika Förlorad inka-stad
STR_SCNR :Grundare av Förlorade Staden
STR_PARK :Grundare av Förlorade Staden
STR_DTLS :Du måste öka de lokala turistintäkterna genom att bygga ett nöjesfält som passar omgivningen och håller sig inom höjdrestriktionerna.
<South America - Rain Forest Plateau>
STR_SCNR :Sydamerika Regnskogsplatå
STR_SCNR :Kul i regnskog
STR_PARK :Kul i regnskog
STR_DTLS :Utrymmet är begränsat i den utrotningshotade regnskogen. Du måste få plats med så mycket som möjligt i gläntan för att kunna erbjuda ett alternativ till den lokala timmerindustrin.
<South America - Rio Carnival>
STR_SCNR :Sydamerika Rio-karneval
STR_SCNR :Sockersöta stränder
STR_PARK :Sockersöta stränder
STR_DTLS :Du driver ett litet nöjesfält nära Rio, men banken kräver plötsligt betalning av ditt lån. Du måste öka dina intäkter snabbt för att kunna klara den uppkomna krisen.
@ -4277,72 +4351,72 @@ STR_DTLS :Du driver ett litet nöjesfält nära Rio, men banken kräver plöt
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Medeltiden Slott
STR_SCNR :Slott på klipporna
STR_PARK :Slott på klipporna
STR_DTLS :Medlemmarna i den lokala medeltidsföreningen tar sin hobby på allvar. De har bett dig konstruera en nöjespark med medeltidstema på det gamla slottets ägor.
<Dark Age - Robin Hood>
STR_SCNR :Medeltiden Robin Hood
STR_SCNR :Sherwoodskogen
STR_PARK :Sherwoodskogen
STR_DTLS :För att kunna stjäla mer från de rika och ge till de fattiga har du och dina män bestämt er för att bygga ett nöjesfält i Sherwoodskogen.
<Future - First Encounters>
STR_SCNR :Framtid Första kontakt
STR_SCNR :Utomjordisk extravagans
STR_PARK :Utomjordisk extravagans
STR_DTLS :Liv har påträffats på en främmande planet. Bygg en park med utomjordiskt tema för att tjäna pengar på folks nyväckta intresse.
<Future - Future World>
STR_SCNR :Framtid Framtidsvärld
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Realisera din innovativa och utopiska vision av framtiden. Bygg en futuristisk park med de allra senaste attraktionerna.
<Mythological - Animatronic Film Set>
STR_SCNR :Mytologisk tid Animatronisk filminspelning
STR_SCNR :Animatroniska äventyr
STR_PARK :Animatroniska äventyr
STR_DTLS :Du har fått i uppgift att driva och förbättra en existerande park som ligger på en gammal filminspelningsplats. Bygg en hyllning till filmhistoriens animationspionjärer som först gav liv åt förhistoriska vidunder på vita duken.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mytologisk tid Civilisationens vagga
STR_SCNR :Mytologiskt arv
STR_PARK :Mytologiskt arv
STR_DTLS :Du äger en ö av högt arkeologiskt värde. Du har bestämt dig för att finansiera dess bevarande genom att konstruera ett nöjesfält med ett tema baserat på områdets rika mytologiska arv.
<Prehistoric - After the Asteroid>
STR_SCNR :Förhistorisk tid Efter asteroiden
STR_SCNR :Kraterkatastrof
STR_PARK :Kraterkatastrof
STR_DTLS :Du äger en dammig gammal meteorkrater. Som den entreprenör du är bestämmer du dig för att bygga ett nöjesfält med asteroidtema och omvandla den till synes värdelösa marken till en förmögenhet.
<Prehistoric - Jurassic Safari>
STR_SCNR :Förhistorisk tid Dinosauriesafari
STR_SCNR :Bergosaurier
STR_PARK :Bergosaurier
STR_DTLS :Du har fått i uppgift att bygga en park med Juratema. För att besökarna ska kunna uppleva den exotiska floran och faunan ordentligt krävs det att du bygger attraktioner som går ovanför och ned i dalen.
<Prehistoric - Stone Age>
STR_SCNR :Förhistorisk tid Stenålder
STR_SCNR :Stenigt värre
STR_PARK :Stenigt värre
STR_DTLS :Stoppa motorvägsbygget och bevara de urtida stencirklarna genom att bygga ett nöjesfält med stenålderstema som går med vinst. Det kan dock bli en smula problematiskt att locka besökare eftersom terrängen är aningen oländig.
<Roaring Twenties - Prison Island>
STR_SCNR :Det glada tjugotalet Fängelseön
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :Den ökända fängelseön, vars befolkning en gång i tiden utgjordes av smugglare och gangsters, är till salu. Du har bestämt dig för att förvandla den till en förstklassig turistattraktion. Pengar är inget hinder.
<Roaring Twenties - Schneider Cup>
STR_SCNR :Det glada tjugotalet Schneidertrofén
STR_SCNR :Schneiders strand
STR_PARK :Schneiders strand
STR_DTLS :75-årsjubiléet av din faders vinst av Schneidertrofén inträffar om några år. Du vill hedra hans prestation genom att bygga en park baserad på den berömda sjöflygplanstävlingen.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Det glada tjugotalet Skyskrapor
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :Du äger en tom tomt i närheten av stadens lågt byggda kvarter. För att få ut så mycket vinst som möjligt av marken bygger du ett nöjesfält i form av en skyskrapa inspirerad av tjugotalets art déco-arkitektur.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rocknroll Flower power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :En stor årlig rockfestival äger rum på din mark. Bygg en hipp nöjespark i den fritänkande publikens smak.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rocknroll Rocknroll
STR_SCNR :Rocknroll-revival
STR_PARK :Rocknroll-revival
STR_DTLS :Denna åldrande park har sett bättre dagar. Hjälp ägaren med att ge den ett retro-rocknroll-tema för att förvandla den till en framgångsrik park.

View File

@ -180,7 +180,7 @@ STR_0768 :Temizlikci {INT32}
STR_0769 :Mühendis {INT32}
STR_0770 :Güvenlik {INT32}
STR_0771 :Animatör {INT32}
STR_0777 :Isimsiz park{POP16}{POP16}
STR_0777 :Isimsiz park
STR_0778 :Bir metin giriniz
STR_0779 :1.
STR_0780 :2.
@ -1731,12 +1731,12 @@ STR_2382 :Arazi/Zemin
STR_2383 :Su
STR_2384 :{WINDOW_COLOUR_2}Hedefiniz:
STR_2385 :{BLACK}Yok
STR_2386 :{BLACK}Parkınızda en az {COMMA16} müşteri {MONTHYEAR} sonuna kadar bulunması ve park değerlendirmesinin en az 600 olması gerekli
STR_2386 :{BLACK}Parkınızda en az {COMMA32} müşteri {MONTHYEAR} sonuna kadar bulunması ve park değerlendirmesinin en az 600 olması gerekli
STR_2387 :{BLACK}Park değeri en az {POP16}{POP16}{CURRENCY} {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR} kadar olmalı
STR_2388 :{BLACK}Iyi eğlenceler!
STR_2389 :{BLACK}Kendinize göre en iyi {STRINGID} inşa ediniz!
STR_2390 :{BLACK}Parkınızda heyecan oranı en az 6.00 olan, 10 çesitli hız treni inşa edilmeli
STR_2391 :{BLACK}Parkınızda en az {COMMA16} müşteri bulunması ve park değerlendirmesinin hiç bir zaman 700den aşağı düşmemesi gerekli
STR_2391 :{BLACK}Parkınızda en az {COMMA32} müşteri bulunması ve park değerlendirmesinin hiç bir zaman 700den aşağı düşmemesi gerekli
STR_2392 :{BLACK}Alet bileti satışlarından aylık en az {POP16}{POP16}{CURRENCY} geliriniz olmalı
STR_2393 :{BLACK}Parkınızda heyecan oranı en az 7.00 ve uzunluğu en az {LENGTH} olan 10 çeşitli hız treni inşa edilmeli
STR_2394 :{BLACK}Parkınızda bulunan 5 kısmen inşa edilmiş hız trenlerinin inşasını en az {POP16}{POP16}{COMMA2DP32} heyecan oranı ile tamamlayınız
@ -2091,39 +2091,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Dosya yüklenemiyor…
STR_3011 :Dosya geçersiz veri içeriyor
STR_3012 :Çarpışan araba tarzı
STR_3013 :Atlıkarınca tarzı
STR_3014 :Roma tarzi
STR_3015 :Oryantal tarzı
STR_3016 :Marslı tarzı
STR_3017 :Cengel tarzı
STR_3018 :Mısırlı tarzı
STR_3019 :Oyuncak dünyası tarzı
STR_3020 :
STR_3021 :Uzay tarzı
STR_3022 :Korku tarzı
STR_3023 :Tekno tarzı
STR_3024 :Sakin tarz
STR_3025 :Yaz tarzı
STR_3026 :Su tarzı
STR_3027 :Vahşi batı tarzı
STR_3028 :Dinozor tarzı
STR_3029 :Rock tarzı
STR_3030 :Ragtime tarzı
STR_3031 :Fantazi tarzı
STR_3032 :Rock tarzı 2
STR_3033 :Buz tarzı
STR_3034 :Kar tarzı
STR_3035 :Özel müzik 1
STR_3036 :Özel müzik 2
STR_3037 :Ortaçağ tarzı
STR_3038 :Şehir tarzı
STR_3039 :Kilise tarzı
STR_3040 :Mekanik tarz
STR_3041 :Modern tarz
STR_3042 :Korsan tarzı
STR_3043 :Rock tarzı 3
STR_3044 :Şeker dünyası tarzı
STR_3045 :Bu aletde çalınacak müzik tarzını seçiniz
STR_3047 :Yerel makam tarafından bu aletin değiştirilmesi yasaklandı
STR_3048 :Yerel makam tarafından pazarlama kampanyaları yasaklandı
@ -2350,7 +2317,7 @@ STR_3305 :{WINDOW_COLOUR_2}Aylık gelir:
STR_3306 :{WINDOW_COLOUR_2}Aylık kâr:
STR_3307 :{WINDOW_COLOUR_2}En az uzunluk:
STR_3308 :{WINDOW_COLOUR_2}Heyecan oranı:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Koruma altına almak istediğiniz aletleri seçiniz
@ -2910,7 +2877,7 @@ STR_5755 :Yanlış yazılım sürümü (Serverda bu kullanılmakda: {STRING})
STR_5756 :Şifre yanlış
STR_5757 :Server dolu
STR_5758 :{OUTLINE}{GREEN}{STRING} servere katıldı
STR_5759 :Harita indiriliyor … ({INT32} / {INT32}) KiB
STR_5759 :Harita indiriliyor …
STR_5760 :Hong Kong Doları (HK$)
STR_5761 :Yeni Taiwan Doları (NT$)
STR_5762 :Çin Yuanı (CN¥)
@ -3983,87 +3950,87 @@ STR_DTLS :Gerçekde ABDnin Texas eyaletinde bulunan bir lunapark
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - African Diamond Mine
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :Kullanılmayan bir elmas madeni satın aldınız. Bu madende değerli bir elmas buldunuz ve onun satışı ile popüler bir lunapark inşa etmeye karar verdiniz
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :Afrikada bir vaha buldunuz ve bu vahanın etrafına güzel bir lunapark inşa etmeye karar verdiniz
<Africa - Victoria Falls>
STR_SCNR :Africa - Victoria Falls
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :Ucuza ve bol miktarda park için ceyeran üretmek amacıyla bir baraj inşa ettirdiniz. Baraj için çektiğiniz krediyi geri ödediniz bile. Şimdi park değerini yükseltmeye çalışınız
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctic - Ecological Salvage
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :Çevre koruma makamı size eski petrol rafinerisini görüntü kirliliği olduğundan dolayı yıkıp yerine güzel bir lunapark inşa etmenizi istedi. Arazi satın alma ucuz fakat kredi faizi çok yüksek
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Great Wall of China Tourism Enhancement
STR_SCNR :Great Wall of China
STR_PARK :Great Wall of China
STR_DTLS :Yetkililer, bitişik arazide bir lunapark inşa ederek Çin Seddi çevresindeki turizmi geliştirmeye karar verdiler. Paranız sınırsız
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Japanese Coastal Reclaim
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :Burada kurulu olan lunaparkın yeri bitmek üzere. Bundan dolayı suyun üstüne inşa etmeniz gerekli. Bu yüzden kredi çekmeniz gerklidi. Deprem riskinden dolayı yüksek inşa yasağı koyulmuştur
<Asia - Maharaja Palace>
STR_SCNR :Asia - Maharaja Palace
STR_SCNR :Park Maharaja
STR_PARK :Park Maharaja
STR_DTLS :Maharaja ailesi sizden yerel halkın eğlenmesi için Maharaja Sarayının etrafına lunapark inşa etmenizi diledi
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :Aborijin halkının kültürünü anma programı için bir lunapark kurmanız rica edildi.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia - Fun at the Beach
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :Yerel bir girişimcinin deniz yaşamı parkı kapandı. Siz henüz küçük bir lunaparka sahipsiniz ve kapalı olan diğer parkıda satın aldınız. Bu parkları birleştiriniz
<Europe - European Cultural Festival>
STR_SCNR :Europe - European Cultural Festival
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :Avrupa kültürel festivalinin yöneticisi olarak seçildiniz. Sizden festivala daha fazla müşteri getirmeniz bekleniyor
<Europe - Renovation>
STR_SCNR :Europe - Renovation
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :Eski bir lunapark harabeye dönüşdü. Avrupa Birliği size bu parkı eski ihtişamına getirmek dileği ile verdi. Parkı yenilemeniz ve krediyi geri ödemeniz gerekiyor.
<N. America - Extreme Hawaiian Island>
STR_SCNR :N. America - Extreme Hawaiian Island
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :Hawaiide yaşıyan insanlar bütün gün sörf yapmakdan sıkılmış ve daha heyecanlı birşey yapmak istiyorlar. Sizden turistlerin ziyaret edeceği ve yerel halkı memnun edecek bir park inşa etmeniz bekleniyor
<North America - Grand Canyon>
STR_SCNR :North America - Grand Canyon
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :Bu doğal hazinenin her iki tarafında sınırlı bir alanda bir park inşa etmelisiniz. - Yerli Kızılderililerden toprak satın alma imkanınız var. Yerel kasabanın nüfusunu sürdürmek için hedefi tamamlamanız gerekiyor.
<North America - Rollercoaster Heaven>
STR_SCNR :North America - Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :Çok başarılı bir iş adamısınız ve uzun bir müddet tatile çıktınız. Bu tatilde şehirin göbeğinde bulunan boş araziye başarılı bir lunapark inşa etmeye karar verdiniz. Paranız sınırsız
<South America - Inca Lost City>
STR_SCNR :South America - Inca Lost City
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :Yerel turizmi güçlendirmek için çevresiyle uyumlu bir park kurmanız gereklidir. Fakat inşa için yükseklik sınırı koyulmuşdur
<South America - Rain Forest Plateau>
STR_SCNR :South America - Rain Forest Plateau
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :Bu yağmur ormanında boş alan kısıtlı - yerel kereste endüstrisine bir alternatif sunmak için bu kısıtlı alanda lunapark inşa ediniz
<South America - Rio Carnival>
STR_SCNR :South America - Rio Carnival
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :Rio yakınlarında küçük bir park işletiyorsun fakat banka kredinizi aradı. Bu beklenmedik borcu geri ödemek için kârınızı hızla artırmanız gerekiyor.
@ -4071,71 +4038,71 @@ STR_DTLS :Rio yakınlarında küçük bir park işletiyorsun fakat banka kred
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Dark Age - Castle
STR_SCNR :Cliffside Castle
STR_PARK :Cliffside Castle
STR_DTLS :Savaşın yeniden canlandırılması toplumunun yerel üyeleri, hobileri hakkında oldukça ciddi. Cliffside Kalesinin arazisinde bir Karanlık Çağ temalı park inşa etmenizi dilediler
<Dark Age - Robin Hood>
STR_SCNR :Dark Age - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :Zenginlerden para kırpıp ve muhtaçlara dağıtmak için, siz ve Mutlu Adamlarınız Sherwood Ormanında bir lunapark kurmaya karar verdiniz
<Future - First Encounters>
STR_SCNR :Future - First Encounters
STR_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Uzak bir gezegende hayat keşfedildi. Bu gezegende bir uzaylı lunaparkı inşa ediniz
<Future - Future World>
STR_SCNR :Future - Future World
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Geleceğin yaratıcı, ütopik vizyonunu sergileyin - son teknoloji konumlarını içeren fütüristik bir park tasarımı ile parkınızı oluşturunuz
<Mythological - Animatronic Film Set>
STR_SCNR :Mythological - Animatronic Film Set
STR_SCNR :Animatronic Antics
STR_PARK :Animatronic Antics
STR_DTLS :Eski bir film setinde kurulmuş olan mevcut bir lunaparkını işletme ve geliştirme görevi size verilmiştir
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythological - Cradle of Civilisation
STR_SCNR :Mythological Madness
STR_PARK :Mythological Madness
STR_DTLS :Arkeolojik eserler bulunduran bir adaya sahipsiniz. Bu eserlerin korunmasını sağlamak için lunapark kurmaya karar verdiniz
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistoric - After the Asteroid
STR_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :Eski bir meteor kraterine sahipsiniz. Gerçek girişimci ruhu içinde, bir asteroid lunaparkı kurmaya ve görünüşte değersiz arazinizi büyük bir servete dönüştürmeye karar verdiniz
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistoric - Jurassic Safari
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :Jura devri tarzı lunapark inşa etme görevini üstlendiniz. Müşterilerin egzotik bitki ve hayvan sergilerine erişimini optimize etmek için, vadiye giden ve gelen aletler inşa etmeniz gerekecektir
<Prehistoric - Stone Age>
STR_SCNR :Prehistoric - Stone Age
STR_SCNR :Rocky Rambles
STR_PARK :Rocky Rambles
STR_DTLS :Karayol kurulmasını engellemek için bu araziyi satın aldınız ve Taş Devri temalı bir lunapark inşa etmeye karar verdiniz
<Roaring Twenties - Prison Island>
STR_SCNR :Roaring Twenties - Prison Island
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :ABDnin meşhur hapishanesini satın aldınız ve burayı güzel bir lunaparka çevirmeye karar verdiniz. Paranız sınırsızdır
<Roaring Twenties - Schneider Cup>
STR_SCNR :Roaring Twenties - Schneider Cup
STR_SCNR :Schneider Shores
STR_PARK :Schneider Shores
STR_DTLS :Dedeniz 75 yıl önce Schneider Kupasını kazanmış ve onun zaferini anmak için buraya bir lunapark inşa etmeye karar verdiniz
<Roaring Twenties - Skyscrapers>
STR_SCNR :Roaring Twenties - Skyscrapers
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :Şehirin içinde boş bir araziye sahipsiniz ve bu boş araziye şehir ve yirmili yıllar teamlı bir lunapark inşa etmeye karar verdiniz
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :Büyük bir müzik festivalının yanına bir lunapark inşa edinizki festival ziyaretcileri daha çok eğlensin
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Rock n Roll Revival
STR_PARK :Rock n Roll Revival
STR_DTLS :Bu lunapark zamanında çok başarılımış. Fakat şimdi git gide bu parkın başarısı ve parlaklığı geriliyor. Park sahibi sizden parkı geri canlandırmanızı ve eski parlaklığına getirmenizi diliyor

4567
data/language/uk-UA.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -182,7 +182,7 @@ STR_0768 :Lao công {INT32}
STR_0769 :Kỹ sư {INT32}
STR_0770 :Bảo vệ {INT32}
STR_0771 :Hoạt náo {INT32}
STR_0777 :Unnamed park{POP16}{POP16}
STR_0777 :Unnamed park
STR_0778 :Sign
STR_0779 :Ngày 1
STR_0780 :Ngày 2
@ -1085,7 +1085,7 @@ STR_1700 :Thuê thêm lao công
STR_1701 :Thuê thêm kỹ sư
STR_1702 :Thuê thêm bảo vệ
STR_1703 :Thuê thêm hoạt náo
STR_1704 :Không thể thuê thêm nhân viên...
STR_1704 :Không thể thuê thêm nhân viên
STR_1705 :Sa thải nhân viên này
STR_1706 :Di chuyển người này
STR_1707 :Có quá nhiều nhân viên
@ -1734,12 +1734,12 @@ STR_2382 :Land
STR_2383 :Water
STR_2384 :{WINDOW_COLOUR_2}Mục tiêu:
STR_2385 :{BLACK}Không
STR_2386 :{BLACK}Có ít nhất {COMMA16} khách vào cuối tháng {MONTHYEAR}, với đánh giá công viên từ 600 trở lên
STR_2386 :{BLACK}Có ít nhất {COMMA32} khách vào cuối tháng {MONTHYEAR}, với đánh giá công viên từ 600 trở lên
STR_2387 :{BLACK}Đạt giá trị công viên ít nhất {POP16}{POP16}{CURRENCY} vào cuối {PUSH16}{PUSH16}{PUSH16}{PUSH16}{PUSH16}{MONTHYEAR}
STR_2388 :{BLACK}Have Fun!
STR_2389 :{BLACK}Build the best {STRINGID} you can!
STR_2390 :{BLACK}Có 10 loại tàu lượn khác nhau trong công viên, mỗi cái có chỉ số phấn khích ít nhất 6.00
STR_2391 :{BLACK}Có ít nhất {COMMA16} khách. Không được để đánh giá công viên thấp hơn 700 ở bất kỳ thời điểm nào!
STR_2391 :{BLACK}Có ít nhất {COMMA32} khách. Không được để đánh giá công viên thấp hơn 700 ở bất kỳ thời điểm nào!
STR_2392 :{BLACK}To achieve a monthly income from ride tickets of at least {POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}To have 10 different types of roller coasters operating in your park, each with a minimum length of {LENGTH}, and an excitement rating of at least 7.00
STR_2394 :{BLACK}To finish building all 5 of the partially built roller coasters in this park, designing them to achieve excitement ratings of at least {POP16}{POP16}{COMMA2DP32} each
@ -2095,39 +2095,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :Unable to load file…
STR_3011 :File contains invalid data
STR_3012 :Dodgems beat style
STR_3013 :Fairground organ style
STR_3014 :Roman fanfare style
STR_3015 :Oriental style
STR_3016 :Martian style
STR_3017 :Jungle drums style
STR_3018 :Egyptian style
STR_3019 :Toyland style
STR_3020 :
STR_3021 :Space style
STR_3022 :Horror style
STR_3023 :Techno style
STR_3024 :Gentle style
STR_3025 :Summer style
STR_3026 :Water style
STR_3027 :Wild west style
STR_3028 :Jurassic style
STR_3029 :Rock style
STR_3030 :Ragtime style
STR_3031 :Fantasy style
STR_3032 :Rock style 2
STR_3033 :Ice style
STR_3034 :Snow style
STR_3035 :Custom music 1
STR_3036 :Custom music 2
STR_3037 :Medieval style
STR_3038 :Urban style
STR_3039 :Organ style
STR_3040 :Mechanical style
STR_3041 :Modern style
STR_3042 :Pirates style
STR_3043 :Rock style 3
STR_3044 :Candy style
STR_3045 :Select style of music to play
STR_3047 :Local authority forbids demolition or modifications to this ride
STR_3048 :Marketing campaigns forbidden by local authority
@ -2354,7 +2321,7 @@ STR_3305 :{WINDOW_COLOUR_2}Monthly income:
STR_3306 :{WINDOW_COLOUR_2}Monthly profit:
STR_3307 :{WINDOW_COLOUR_2}Minimum length:
STR_3308 :{WINDOW_COLOUR_2}Độ phấn khích:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}Rides/attractions under a preservation order:
@ -2914,7 +2881,7 @@ STR_5755 :Incorrect Software Version (Server is using {STRING})
STR_5756 :Bad Password
STR_5757 :Server Full
STR_5758 :{OUTLINE}{GREEN}{STRING} has joined the game
STR_5759 :Downloading map … ({INT32} / {INT32}) KiB
STR_5759 :Downloading map …
STR_5760 :Hong Kong Dollars (HK$)
STR_5761 :New Taiwan Dollar (NT$)
STR_5762 :Chinese Yuan (CN¥)
@ -3478,7 +3445,7 @@ STR_6374 :C
STR_6375 :Unknown Ride
STR_6376 :{WINDOW_COLOUR_2}Ride vehicle:{NEWLINE}{BLACK}{STRINGID} for {STRINGID}
STR_6377 :{WINDOW_COLOUR_2}Type: {BLACK}{STRINGID} for {STRINGID}
STR_6378 :Receiving objects list: {INT32} / {INT32}
STR_6378 :Receiving objects list:
STR_6379 :Received invalid data
STR_6380 :Update available!
STR_6381 :Join OpenRCT2 Discord!
@ -4125,87 +4092,87 @@ STR_DTLS :Build the missing Six Flags rides, or create your own designs to im
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - African Diamond Mine
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :You inherited a disused diamond mine, and find a valuable diamond. You decide to invest that money to build a world-famous theme park.
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :A desert Oasis has been discovered and would provide a beautiful location for a park. Transport to the oasis has been provided.
<Africa - Victoria Falls>
STR_SCNR :Africa - Victoria Falls
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :A dam has been built offering abundant, cheap hydroelectric power with which to run a park. You need to reach a high park value to help repay the loan for the dam.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctic - Ecological Salvage
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :The environment agency has turned to you to transform an old oil refinery ecological eyesore into a top tourist attraction. Land is cheap but loan interest is high. You can sell the old buildings for salvage.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Great Wall of China Tourism Enhancement
STR_SCNR :Great Wall of China
STR_PARK :Great Wall of China
STR_DTLS :The authorities have decided to enhance tourism around the Great Wall by building a theme park on the adjacent land. Money is no object!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Japanese Coastal Reclaim
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :An existing park has run out of space. Your only option is to build out into the sea, and so you have taken out a loan. Height restrictions on your building are enforced due to foundations and earthquake risk.
<Asia - Maharaja Palace>
STR_SCNR :Asia - Maharaja Palace
STR_SCNR :Park Maharaja
STR_PARK :Park Maharaja
STR_DTLS :You have been commissioned by the Maharaja to bring entertainment to the large local population. Build a park inspired by the Maharajas palace.
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :You are helping Aboriginal people to build a park as part of a cultural awareness program. You need to get a large number of guests to educate them in the unique heritage of the Aboriginal people.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia - Fun at the Beach
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :A local entrepreneurs sealife park has gone bust. You already operate a small park and buy the other park from the construction company. Develop a big combined park.
<Europe - European Cultural Festival>
STR_SCNR :Europe - European Cultural Festival
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :You have been brought in to take over a European Cultural Visitor Attraction and must increase the number of guests in order to pay back the EU subsidy by the end of the current European parliament term.
<Europe - Renovation>
STR_SCNR :Europe - Renovation
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :An old park has fallen into disrepair. You gain a European Union grant to return this deprived area to its former glory! You need to renovate the park and repay the grant.
<N. America - Extreme Hawaiian Island>
STR_SCNR :North America - Extreme Hawaiian Island
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :The people of Hawaii are bored of surfing and are looking for something more intense. You need to build a park with this in mind to keep the areas tourist attraction rating high.
<North America - Grand Canyon>
STR_SCNR :North America - Grand Canyon
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :You have to build a park on limited land either side of this natural treasure - you do have the opportunity to buy neighbouring land from the Native American Indians. You need to complete the objective to sustain the local towns population.
<North America - Rollercoaster Heaven>
STR_SCNR :North America - Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :You are a successful business tycoon on long sabbatical who desires to use this time transforming the city park into Rollercoaster Heaven. Money is no object!
<South America - Inca Lost City>
STR_SCNR :South America - Inca Lost City
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings, and has height restrictions.
<South America - Rain Forest Plateau>
STR_SCNR :South America - Rain Forest Plateau
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :Space is limited in the precious rainforest - you must cram as much as possible into the existing clearing, in order to provide a viable alternative to the local timber industry.
<South America - Rio Carnival>
STR_SCNR :South America - Rio Carnival
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :You run a small park near Rio but the bank has called in your loan. You need to quickly increase your earning capacity to repay this unexpected debt.
@ -4213,72 +4180,72 @@ STR_DTLS :You run a small park near Rio but the bank has called in your loan.
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :Dark Age - Castle
STR_SCNR :Cliffside Castle
STR_PARK :Cliffside Castle
STR_DTLS :Local members of the battle re-enactment society are rather serious about their hobby. Theyve entrusted you with the job of constructing a Dark Age theme park on the grounds of Cliffside Castle.
<Dark Age - Robin Hood>
STR_SCNR :Dark Age - Robin Hood
STR_SCNR :Sherwood Forest
STR_PARK :Sherwood Forest
STR_DTLS :To liberate wealth from the rich and distribute it to the needy, you and your Merry Men have decided to build a theme park in Sherwood Forest.
<Future - First Encounters>
STR_SCNR :Future - First Encounters
STR_SCNR :Extraterrestrial Extravaganza
STR_PARK :Extraterrestrial Extravaganza
STR_DTLS :Life has been discovered on a distant planet Build an alien theme park to cash in on the unprecedented wave of interest.
<Future - Future World>
STR_SCNR :Future - Future World
STR_SCNR :Gemini City
STR_PARK :Gemini City
STR_DTLS :Show off your inventive, utopian vision of the future - come up with a futuristic park design that incorporates state-of-the-art attractions.
<Mythological - Animatronic Film Set>
STR_SCNR :Mythological - Animatronic Film Set
STR_SCNR :Animatronic Antics
STR_PARK :Animatronic Antics
STR_DTLS :You have been given the task of running and improving an existing theme park, which has been built on an old film set. Build a tribute to the pioneering stop-motion animators who first brought mythical creatures to life on the silver screen.
<Mythological - Cradle of Civilisation>
STR_SCNR :Mythological - Cradle of Civilisation
STR_SCNR :Mythological Madness
STR_PARK :Mythological Madness
STR_DTLS :You own an island of particular archaeological value. Youve decided to fund its preservation by constructing a theme park based on the areas rich Mythological heritage.
<Prehistoric - After the Asteroid>
STR_SCNR :Prehistoric - After the Asteroid
STR_SCNR :Crater Carnage
STR_PARK :Crater Carnage
STR_DTLS :You own a dusty old meteor crater. In the true entrepreneurial spirit, youve decided to construct an asteroid theme park and convert your seemingly worthless land into a sizeable fortune.
<Prehistoric - Jurassic Safari>
STR_SCNR :Prehistoric - Jurassic Safari
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :Youve been given the task of constructing a Jurassic era theme park. To optimize your visitors access to the exotic plant and animal exhibits, you will need to build rides going over and into the valley.
<Prehistoric - Stone Age>
STR_SCNR :Prehistoric - Stone Age
STR_SCNR :Rocky Rambles
STR_PARK :Rocky Rambles
STR_DTLS :To thwart the highway developers and preserve the mysterious ancient stone circles, you will need to construct a Stone Age theme park and turn a profit. However, attracting visitors may pose a challenge, as the terrain is a tad inhospitable.
<Roaring Twenties - Prison Island>
STR_SCNR :Roaring Twenties - Prison Island
STR_SCNR :Alcatraz
STR_PARK :Alcatraz
STR_DTLS :The infamous Prison Island - whose population once swelled with bootleggers and racketeers - is now up for sale. Youve decided to convert it into a top tourist attraction, and money is no object
<Roaring Twenties - Schneider Cup>
STR_SCNR :Roaring Twenties - Schneider Cup
STR_SCNR :Schneider Shores
STR_PARK :Schneider Shores
STR_DTLS :The 75th anniversary of your grandfathers Schneider Cup victory is coming up in a few years. Youre going to honour his achievement by building a theme park based on the famous seaplane race.
<Roaring Twenties - Skyscrapers>
STR_SCNR :Roaring Twenties - Skyscrapers
STR_SCNR :Metropolis
STR_PARK :Metropolis
STR_DTLS :You own an empty lot near the low-rise part of town. To squeeze the most out of your urban property, build a skyscraper theme park inspired by the soaring art deco architecture of the twenties.
<Rock 'n' Roll - Flower Power>
STR_SCNR :Rock n Roll - Flower Power
STR_SCNR :Woodstock
STR_PARK :Woodstock
STR_DTLS :A large annual music festival takes place on your land. Build a hip theme park to keep the free-spirited audience entertained.
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :Rock n Roll - Rock n Roll
STR_SCNR :Rock n Roll Revival
STR_PARK :Rock n Roll Revival
STR_DTLS :This aging theme park has seen better days. Help the owner give it a retro rock n roll makeover and turn the place into a successful venue.

File diff suppressed because it is too large Load Diff

View File

@ -186,7 +186,7 @@ STR_0768 :清潔工人{INT32}
STR_0769 :維修人員{INT32}
STR_0770 :安全警衛{INT32}
STR_0771 :表演人員{INT32}
STR_0777 :未命名樂園{POP16}{POP16}
STR_0777 :未命名樂園
STR_0778 :招牌
STR_0779 :1日
STR_0780 :2日
@ -1741,12 +1741,12 @@ STR_2382 :土地
STR_2383 :水塘
STR_2384 :{WINDOW_COLOUR_2}你的目標:
STR_2385 :{BLACK}無
STR_2386 :{BLACK}在{POP16}{MONTHYEAR}尾之前, 樂園裡至少有{PUSH16}{PUSH16}{COMMA16}個遊客, 而且樂園評價並不低於600
STR_2386 :{BLACK}在{POP16}{MONTHYEAR}尾之前, 樂園裡至少有{PUSH16}{PUSH16}{COMMA32}個遊客, 而且樂園評價並不低於600
STR_2387 :{BLACK}在{POP16}{MONTHYEAR}尾之前, 樂園價值必需達到{CURRENCY}
STR_2388 :{BLACK}盡情玩吧!
STR_2389 :{BLACK}建造你的最佳{STRINGID}吧!
STR_2390 :{BLACK}樂園必需建造十種不同種類的雲霄飛車, 而且每座的興奮度不低於6.00
STR_2391 :{BLACK}樂園裡至少有{COMMA16}個遊客. 任何時間下, 你並不可以令樂園評價跌至700以下!
STR_2391 :{BLACK}樂園裡至少有{COMMA32}個遊客. 任何時間下, 你並不可以令樂園評價跌至700以下!
STR_2392 :{BLACK}遊樂設施的門票收入至少要達到每月{POP16}{POP16}{CURRENCY}
STR_2393 :{BLACK}樂園必需建造十種不同種類的雲霄飛車, 每座的長度至少需要{LENGTH}, 而且興奮度都不低於7.00
STR_2394 :{BLACK}建造好五座未完成的雲霄飛車, 將他們每座設計成興奮度至少達到{POP16}{POP16}{COMMA2DP32}
@ -2101,39 +2101,6 @@ STR_3008 :{PEARLAQUA}ABC
STR_3009 :{PALESILVER}ABC
STR_3010 :無法載入檔案…
STR_3011 :檔案中含有非法資料
STR_3012 :碰碰車節奏風格
STR_3013 :遊樂場風琴風格
STR_3014 :羅馬號角風格
STR_3015 :東方風格
STR_3016 :火星風格
STR_3017 :叢林敲擊風格
STR_3018 :埃及風格
STR_3019 :童真風格
STR_3020 :
STR_3021 :太空風格
STR_3022 :恐怖風格
STR_3023 :電子風格
STR_3024 :溫和風格
STR_3025 :夏日風格
STR_3026 :水文風格
STR_3027 :美國西部風格
STR_3028 :侏儸紀風格
STR_3029 :搖滾風格
STR_3030 :雷格泰姆音樂風格
STR_3031 :夢幻風格
STR_3032 :搖滾風格2
STR_3033 :冰封風格
STR_3034 :雪地風格
STR_3035 :自訂音樂1
STR_3036 :自訂音樂2
STR_3037 :中世紀風格
STR_3038 :都市風格
STR_3039 :風琴風格
STR_3040 :機械風格
STR_3041 :摩登風格
STR_3042 :海盜風格
STR_3043 :搖滾風格3
STR_3044 :糖果風格
STR_3045 :選擇要播放的音樂風格:
STR_3047 :當地政府禁止拆除或修改此遊樂設施
STR_3048 :當地政府禁止所有推廣計劃進行
@ -2360,7 +2327,7 @@ STR_3305 :{WINDOW_COLOUR_2}每月收入:
STR_3306 :{WINDOW_COLOUR_2}每月利潤:
STR_3307 :{WINDOW_COLOUR_2}最少長度:
STR_3308 :{WINDOW_COLOUR_2}興奮度:
STR_3309 :{WINDOW_COLOUR_2}{COMMA16}
STR_3309 :{WINDOW_COLOUR_2}{COMMA32}
STR_3310 :{WINDOW_COLOUR_2}{LENGTH}
STR_3311 :{WINDOW_COLOUR_2}{COMMA2DP32}
STR_3312 :{WINDOW_COLOUR_2}請選取要保留的遊樂設施/店鋪:
@ -2922,7 +2889,7 @@ STR_5755 :不合適的遊戲版本 (伺服器版本為{STRING})
STR_5756 :密碼錯誤
STR_5757 :伺服器人數已滿
STR_5758 :{OUTLINE}{GREEN}{STRING}已加入遊戲
STR_5759 :下載劇情中… ({INT32} / {INT32}) KiB
STR_5759 :下載劇情中…
STR_5760 :港幣 (HK$)
STR_5761 :新台幣 (NT$)
STR_5762 :人民幣 (CN¥)
@ -3485,7 +3452,7 @@ STR_6374 :阻礙檢查已關閉
STR_6375 :未知遊樂設施
STR_6376 :{WINDOW_COLOUR_2}遊樂設施車輛:{NEWLINE}{BLACK}{STRINGID}於{STRINGID}內
STR_6377 :{WINDOW_COLOUR_2}種類: {BLACK}{STRINGID}於{STRINGID}內
STR_6378 :正在接收物件列表: {INT32} / {INT32}
STR_6378 :正在接收物件列表:
STR_6379 :已接收不正確的資料
STR_6380 :有可用的更新!
STR_6381 :加入OpenRCT2的Discord!
@ -4224,87 +4191,87 @@ STR_DTLS :建造缺少的六旗遊樂設施,或建造你自己設計的以改
## Wacky Worlds Scenarios
###############################################################################
<Africa - African Diamond Mine>
STR_SCNR :Africa - African Diamond Mine
STR_SCNR :Mines of Africa
STR_PARK :Mines of Africa
STR_DTLS :You inherited a disused diamond mine, and find a valuable diamond. You decide to invest that money to build a world-famous theme park.
<Africa - Oasis>
STR_SCNR :Africa - Oasis
STR_SCNR :Mirage Madness
STR_PARK :Mirage Madness
STR_DTLS :A desert Oasis has been discovered and would provide a beautiful location for a park. Transport to the oasis has been provided.
<Africa - Victoria Falls>
STR_SCNR :Africa - Victoria Falls
STR_SCNR :Over The Edge
STR_PARK :Over The Edge
STR_DTLS :A dam has been built offering abundant, cheap hydroelectric power with which to run a park. You need to reach a high park value to help repay the loan for the dam.
<Antarctic - Ecological Salvage>
STR_SCNR :Antarctic - Ecological Salvage
STR_SCNR :Icy Adventures
STR_PARK :Icy Adventures
STR_DTLS :The environment agency has turned to you to transform an old oil refinery ecological eyesore into a top tourist attraction. Land is cheap but loan interest is high. You can sell the old buildings for salvage.
<Asia - Great Wall of China Tourism Enhancement>
STR_SCNR :Asia - Great Wall of China Tourism Enhancement
STR_SCNR :Great Wall of China
STR_PARK :Great Wall of China
STR_DTLS :The authorities have decided to enhance tourism around the Great Wall by building a theme park on the adjacent land. Money is no object!
<Asia - Japanese Coastal Reclaim>
STR_SCNR :Asia - Japanese Coastal Reclaim
STR_SCNR :Okinawa Coast
STR_PARK :Okinawa Coast
STR_DTLS :An existing park has run out of space. Your only option is to build out into the sea, and so you have taken out a loan. Height restrictions on your building are enforced due to foundations and earthquake risk.
<Asia - Maharaja Palace>
STR_SCNR :Asia - Maharaja Palace
STR_SCNR :Park Maharaja
STR_PARK :Park Maharaja
STR_DTLS :You have been commissioned by the Maharaja to bring entertainment to the large local population. Build a park inspired by the Maharajas palace.
<Australasia - Ayers Rock>
STR_SCNR :Australasia - Ayers Rock
STR_SCNR :Ayers Adventure
STR_PARK :Ayers Adventure
STR_DTLS :You are helping Aboriginal people to build a park as part of a cultural awareness program. You need to get a large number of guests to educate them in the unique heritage of the Aboriginal people.
<Australasia - Fun at the Beach>
STR_SCNR :Australasia - Fun at the Beach
STR_SCNR :Beach Barbecue Blast
STR_PARK :Beach Barbecue Blast
STR_DTLS :A local entrepreneurs sealife park has gone bust. You already operate a small park and buy the other park from the construction company. Develop a big combined park.
<Europe - European Cultural Festival>
STR_SCNR :Europe - European Cultural Festival
STR_SCNR :European Extravaganza
STR_PARK :European Extravaganza
STR_DTLS :You have been brought in to take over a European Cultural Visitor Attraction and must increase the number of guests in order to pay back the EU subsidy by the end of the current European parliament term.
<Europe - Renovation>
STR_SCNR :Europe - Renovation
STR_SCNR :From The Ashes
STR_PARK :From The Ashes
STR_DTLS :An old park has fallen into disrepair. You gain a European Union grant to return this deprived area to its former glory! You need to renovate the park and repay the grant.
<N. America - Extreme Hawaiian Island>
STR_SCNR :N. America - Extreme Hawaiian Island
STR_SCNR :Wacky Waikiki
STR_PARK :Wacky Waikiki
STR_DTLS :The people of Hawaii are bored of surfing and are looking for something more intense. You need to build a park with this in mind to keep the areas tourist attraction rating high.
<North America - Grand Canyon>
STR_SCNR :North America - Grand Canyon
STR_SCNR :Canyon Calamities
STR_PARK :Canyon Calamities
STR_DTLS :You have to build a park on limited land either side of this natural treasure - you do have the opportunity to buy neighbouring land from the Native American Indians. You need to complete the objective to sustain the local towns population.
<North America - Rollercoaster Heaven>
STR_SCNR :North America - Rollercoaster Heaven
STR_SCNR :Rollercoaster Heaven
STR_PARK :Rollercoaster Heaven
STR_DTLS :You are a successful business tycoon on long sabbatical who desires to use this time transforming the city park into Rollercoaster Heaven. Money is no object!
<South America - Inca Lost City>
STR_SCNR :South America - Inca Lost City
STR_SCNR :Lost City Founder
STR_PARK :Lost City Founder
STR_DTLS :To further boost local tourism you must construct a park that is in tune with its surroundings, and has height restrictions.
<South America - Rain Forest Plateau>
STR_SCNR :South America - Rain Forest Plateau
STR_SCNR :Rainforest Romp
STR_PARK :Rainforest Romp
STR_DTLS :Space is limited in the precious rainforest - you must cram as much as possible into the existing clearing, in order to provide a viable alternative to the local timber industry.
<South America - Rio Carnival>
STR_SCNR :South America - Rio Carnival
STR_SCNR :Sugarloaf Shores
STR_PARK :Sugarloaf Shores
STR_DTLS :You run a small park near Rio but the bank has called in your loan. You need to quickly increase your earning capacity to repay this unexpected debt.
@ -4312,72 +4279,72 @@ STR_DTLS :You run a small park near Rio but the bank has called in your loan.
## Time Twister Scenarios
###############################################################################
<Dark Age - Castle>
STR_SCNR :黑暗時代-城堡
STR_SCNR :克利弗塞德城堡
STR_PARK :克利弗塞德城堡
STR_DTLS :本地的戰役重現協會成員對他們的這項嗜好相當認真。他們授權您建造一座以克利弗塞德城堡為主題的黑暗時代主題樂園。
<Dark Age - Robin Hood>
STR_SCNR :黑暗時代-羅賓漢
STR_SCNR :舍伍德森林
STR_PARK :舍伍德森林
STR_DTLS :為了劫富濟貧,您與您的伙伴們決定要在舍伍德森林中建造一座主題樂園。
<Future - First Encounters>
STR_SCNR :未來-第一次接觸
STR_SCNR :外星文明博覽會
STR_PARK :外星文明博覽會
STR_DTLS :在遙遠的行星上發現了生命 建築一個外星主題樂園,在這個史無前例的風潮中大撈一票。
<Future - Future World>
STR_SCNR :未來-未來世界
STR_SCNR :雙子星城市
STR_PARK :雙子星城市
STR_DTLS :展現您對於未來的創造力與想像力-設計出以最先進科技為特色的未來主題樂園。
<Mythological - Animatronic Film Set>
STR_SCNR :神話-機械偶影片組
STR_SCNR :機械偶動作
STR_PARK :機械偶動作
STR_DTLS :您被賦予經營並改善現有主題樂園的工作,樂園建築在舊片場上。為首先將神話生物帶到銀幕中的定格動畫家們獻上崇高敬意
<Mythological - Cradle of Civilisation>
STR_SCNR :神話-文明起源
STR_SCNR :神話狂熱
STR_PARK :神話狂熱
STR_DTLS :您擁有一個具有特殊考古價值的小島。您決定透過建造一座以這個區域非常豐富的神話遺產為主題的樂園。
<Prehistoric - After the Asteroid>
STR_SCNR :史前時代-小行星撞擊之後
STR_SCNR :隕石坑大屠殺
STR_PARK :隕石坑大屠殺
STR_DTLS :您擁有滿是灰塵的老舊隕石坑。您的企業家精神讓您決定建立小行星主題樂園,並將看來毫無價值的土地轉變成巨大的財富。
<Prehistoric - Jurassic Safari>
STR_SCNR :史前時代 - 侏羅紀探險
STR_SCNR :Coastersaurus
STR_PARK :Coastersaurus
STR_DTLS :您被賦予建立侏羅紀主題公園的工作。為了讓您的訪客能更容易接近觀賞各種動植物,您必須在河谷中建立交通工具
<Prehistoric - Stone Age>
STR_SCNR :史前時代-石器時代
STR_SCNR :石間漫步
STR_PARK :石間漫步
STR_DTLS :為了阻止高速公路開發者並保存神秘的古代石頭環,您必須建立石器時代主題公園並獲利。但很難吸引到遊客,因為地形荒涼
<Roaring Twenties - Prison Island>
STR_SCNR :喧騰的20年代-監獄
STR_SCNR :惡魔
STR_PARK :惡魔島
STR_DTLS :惡名昭彰的監獄島-島上居名曾以販賣私酒者或騙徒為主-現在正待價而沽中。您決定要將這個小島轉變為觀光勝地,錢不是問題
<Roaring Twenties - Schneider Cup>
STR_SCNR :喧騰的20年代-施耐德盃
STR_SCNR :施耐德海岸
STR_PARK :施耐德海岸
STR_DTLS :令祖父在施耐德盃優勝的75週年紀念再過幾年就要到了。您決定建造以著名的水上飛機競速賽為主題的樂園來紀念他的成就。
<Roaring Twenties - Skyscrapers>
STR_SCNR :喧騰的20年代-摩天大樓
STR_SCNR :大都會
STR_PARK :大都會
STR_DTLS :您在市鎮低層數建築區中擁有空地。為了讓地產發揮最大價值,請建造以喧騰的20年代裝飾藝術為主題的摩天大樓主題樂園
<Rock 'n' Roll - Flower Power>
STR_SCNR :搖滾-花的魅力
STR_SCNR :伍斯托克音樂會
STR_PARK :伍斯托克音樂會
STR_DTLS :您的土地上將舉辦大型的年度音樂嘉年華。請建立一個能讓這些崇尚心靈自由的人們感到愉快的主題樂園。
<Rock 'n' Roll - Rock 'n' Roll>
STR_SCNR :搖滾-搖滾
STR_SCNR :搖滾復興
STR_PARK :搖滾復興
STR_DTLS :這個過時的主題樂園曾經有過輝煌的日子。請協助所有者將讓這個主題樂園再次搖滾起來,讓這個地方成為成功的企業。

134
debian/changelog vendored
View File

@ -1,9 +1,139 @@
openrct2 (0.4.7-develop-1) unstable; urgency=medium
openrct2 (0.4.11-develop-1) unstable; urgency=medium
* Nightly develop build.
* Feature: [#11512] Coloured usernames by group on multiplayer servers.
* Feature: [#21734] Park admittance price can now be set via text input.
* Feature: [#21957] [Plugin] Expose whether the game is paused to the plugin API.
* Improved: [#21728] “Fix all rides” cheat now also works if a mechanic is already fixing the ride.
* Improved: [#21769] Expose “animation is backwards” wall property in Tile Inspector.
* Improved: [#21855] Add a separator between “Load Game” and “Save Game”, to avoid accidental overwriting.
* Change: [#21715] [Plugin] Remove access to the internal `owner` property. Note: `ownership` is still accessible.
* Change: [#21855] Cheats menu dropdown no longer requires dragging.
* Change: [#21866] Hide the FPS Counter when the top toolbar/widgets have been toggled off.
* Change: [#21950] Construction and removal buttons can now be held down for repeated placement.
* Fix: [#866] Boat Hire boats get stuck entering track (original bug).
* Fix: [#10701] No reason specified when placing door over unsuitable track.
* Fix: [#18723, #21870] Attempting to demolish a flat ride in pause mode allows you to place multiple copies.
* Fix: [#19559] Custom rides with long descriptions extend into lower widgets.
* Fix: [#21696] Fullscreen window option not correctly applied on macOS.
* Fix: [#21749] Crash when loading park bigger than current limits.
* Fix: [#21787] Map generator heightmap should respect increased height limits.
* Fix: [#21829] When creating a new scenario, the default name contains formatting codes.
* Fix: [#21937] Build errors with the ORIGINAL_RATINGS flag.
* Fix: [objects#324] Cannot build Colosseum inside a turn or helix.
* Fix: [objects#325] Sloped castle walls are vertically offset by one pixel (original bug).
openrct2 (0.4.10-develop-1) unstable; urgency=medium
* Feature: [#18171] Add port of the RCT1 Stand-Up Roller Coaster.
* Feature: [#21590] [Plugin] Plugins can now read and write banner properties of tile elements.
* Feature: [#21636] Add shortcut key for sorting tile elements.
* Feature: [objects#294] Add scenery versions of wooden truss supports.
* Feature: [objects#295] Flipped version of wooden post.
* Improved: [#21424] Extra viewports can now rotate independently from the main viewport.
* Improved: [#21561, #21631] Enable more features in Android build (plugins, networking, multiplayer, audio formats).
* Improved: [#21599] Currency signs now use non-breaking spaces.
* Improved: [objects#157] Added sloped images for many walls.
* Improved: [objects#288] Better map colours and more sensible prices for RCT1 land surfaces.
* Improved: [objects#292] Vehicle colour cleanups for WW/TT vehicles.
* Improved: [objects#299] More accurate ratings modifiers for RCT1 vehicles.
* Improved: [objects#309] Updated names for dodgems and flying saucers vehicles.
* Improved: [objects#313] buildMenuPriority for dodgems and flying saucers vehicles.
* Change: [#21529] Classify “Southern Sands”, “Tiny Towers”, “Nevermore Park”, “Pacifica” as expert scenarios.
* Change: [#21545] Reorder Wacky Worlds scenarios and adjust their difficulty classification.
* Fix: [#910] Extra viewport does not preserve the location when rotating.
* Fix: [#18413] Crash when mouse over a hacked train.
* Fix: [#20338] Cannot select Scenery Picker or Scatter Tool when the scenery recolouring tool is active.
* Fix: [#21317] Track designer allows proceeding without an object selected.
* Fix: [#21360] If the object selection is missing certain types, the Object Selection window will switch to an incorrect tab.
* Fix: [#21419] Cannot place walls underground beneath sloped tiles with clearance checks disabled.
* Fix: [#21434] Number of guests overflows in objective text.
* Fix: [#21522] Supports for 3×3 turns and 45 degree turns on the Hybrid Coaster and Wooden Roller Coaster not drawn correctly.
* Fix: [#21543] Crash with creating a TrackIterator with invalid arguments.
* Fix: [#21635] Tile inspector hotkey can set wall slope for non-slopeable objects.
* Fix: [#21641] Crash when creating track iterator from an invalid tile element.
* Fix: [#21652] Dialog window to confirm overwriting files does not apply the theme colours correctly.
* Fix: [#21654] No sound effects when using RCT Classic as an asset base.
* Fix: [#21654] Extraneous reports of an object conflict between `rct2.audio.base` and `rct2.audio.base.rctc`.
* Fix: [#21664] Crash when switching between languages that use TTF.
* Fix: [#21668] Crash when on null ride in Guest::UpdateRideLeaveExit.
* Fix: [#21691] Crash when validating rides which can't contain banked track.
* Fix: [objects#290] “Haunted Mansion” cars have a non-functional third remap colour.
* Fix: [objects#296] Incorrect wall placement around large Kremlin/drab pieces.
* Fix: [objects#300] Incorrect Colosseum and volcano corner clearances.
* Fix: [objects#319] Incorrect diagonal slope images used for RCT1 corkscrew.
* Fix: [objects#320] Incorrect Mandarin Duck boats capacity.
openrct2 (0.4.9-develop-1) unstable; urgency=medium
* Feature: [#20376] Add Ukrainian language.
* Feature: [#20709] [Plugin] Plugins can now check metadata from all registered plugins.
* Feature: [#21376] Add option to reload an object (for object developers).
* Feature: [#21413, OpenSFX#19] Add log flume lift sound effect (when “chainlift” is enabled).
* Feature: [#21455] Add option to control hidden scenery.
* Feature: [objects#282] Added RCT1 beta terrains.
* Improved: [#20093] Use new colours for guests clothing when they spawn.
* Improved: [#21356] Resize the title bar when moving between displays with different scaling factors on Windows systems.
* Improved: [#21388] Tooltips will now show even when an error message is present.
* Improved: [#21423] Add mechanism to allow building partly underground.
* Improved: [objects#272, objects#276, objects#277, objects#278, objects#279, objects#280, objects#281] Add most remaining ports of RCT1 ride and vehicle objects (for import only).
* Improved: [objects#275, objects#284, objects#286] Add remaining RCT1 walls (for import only).
* Change: [#21350] Group Dodgems and Flying Saucers vehicles.
* Change: [#21453] Reintroduce lost RCT1 Jet skis colour presets to the boat hire.
* Change: [objects#285] Mark old reversed train objects as compatibility objects.
* Fix: [#17610] Some scenery items are unavailable in RCT1 scenarios.
* Fix: [#18963] Research table in parks from Loopy Landscapes is imported incorrectly.
* Fix: [#20164] Grass and Rock terrain objects cannot be de-selected.
* Fix: [#20907] RCT1/AA scenarios use the 4-across train for the Inverted Roller Coaster.
* Fix: [#21037] Map animations in the title sequence are stuck.
* Fix: [#21208] Error message will stay open only for a brief moment when the game has been running a while.
* Fix: [#21220] When creating a new park from a SC4 file, the localised park name is not applied.
* Fix: [#21286] Cannot build unbanking turns with RCT1 vehicles.
* Fix: [#21288] Text overlaps in the “About OpenRCT2” window for Arabic, Chinese, Japanese, Korean and Vietnamese.
* Fix: [#21310] Some half loop elements require more clearance than their upward/downward counterparts.
* Fix: [#21318] Virtual Floor for building scenery is not properly invalidated.
* Fix: [#21330] Tooltips from dropdown widgets have the wrong position.
* Fix: [#21332] Mini Helicopters and Monorail Cycles ride types are swapped in research within RCT1 scenarios.
* Fix: [#21343] “Pause” and “Build Path” hotkeys do not work if top toolbar is hidden.
* Fix: [#21347] Too many options are hidden if the platform has no file picker.
* Fix: [#21350] Maze and Mini Golf track designs from RCT1 not shown in track designs list.
* Fix: [#21425] Additional missing/misplaced land & construction rights tiles in Japanese Coastal Reclaim.
* Fix: [#21484] Upkeep costs for some rides/facilities/shops are not calculated correctly.
* Fix: [#21498] Crash when the size of text cant be determined.
* Fix: [objects#262, objects#263, objects#265, objects#266, objects#267, objects#268, objects#270, objects#271, objects#283] Various errors in expansion pack objects (original bug).
* Fix: [OpenSFX#18] B&M Roar sound effect not looping correctly.
openrct2 (0.4.8-develop-1) unstable; urgency=medium
* Feature: [#21062] [Plugin] Add API for managing a guest's items.
* Improved: [#18632, #21306] Land ownership and construction rights are now shown on top of the water.
* Improved: [#20951] Activate OpenRCT2 window after using native file dialog on macOS.
* Improved: [#21184] The construction marker for rides, paths and large scenery is now shown on top of the water.
* Improved: [#21192] Tooltips will now follow the cursor.
* Improved: [#21227] Entrance style dropdown is now sorted alphabetically everywhere.
* Change: [#21200] Raise maximum lift speeds of the Reverser Coaster, Side Friction Coaster, and Virginia Reel for RCT1 parity.
* Change: [#21225] Raise maximum allowed misc entities to 1600.
* Fix: [#19494] RCT1 fence gate walls not imported properly if they were placed on slopes.
* Fix: [#20196] New scenarios start with an incorrect temperature.
* Fix: [#20255] Images from the last hovered-over coaster in the object selection are not freed.
* Fix: [#20616] Confirmation button in the track designers quit prompt has the wrong text.
* Fix: [#20628] Moving caret using Ctrl+left can move too far when using a multibyte grapheme.
* Fix: [#20631] IME window not positioned correctly.
* Fix: [#20845] Trying to save under a folder with no write permissions causes a crash.
* Fix: [#21054] “No entrance” style is selected by default in the track designer.
* Fix: [#21145] [Plugin] setInterval/setTimeout handle conflict.
* Fix: [#21157] [Plugin] Widgets do not redraw correctly when updating disabled or visibility state.
* Fix: [#21158] [Plugin] Potential crash using setInterval/setTimeout within the callback.
* Fix: [#21171] [Plugin] Crash creating entities with no more entity slots available.
* Fix: [#21178] Inca Lost Citys scenario description incorrectly states there are height restrictions.
* Fix: [#21179] Additional missing land/construction rights tiles in Inca Lost City & Renovation.
* Fix: [#21198] [Plugin] Setting brake or booster speeds on a tile element doesnt work.
* Fix: [#21290] Sound keeps playing when paused from fast-forward mode.
* Fix: [#21291] Hungry guests heading to any flat ride do not count for warning threshold (original bug).
* Fix: [#21309] Africa - Oasis & Blackpool Pleasure Beachs monorails are built outside the parks land rights.
* Fix: [#21316] Isolated land for sale tile on Extreme Hawaiian Island.
openrct2 (0.4.7-develop-1) unstable; urgency=medium
* Feature: [#12078] Add shortcut key for toggling wall slope.
* Feature: [#19919] Add diagonal brakes and diagonal block brakes to most coaster types.
* Feature: [#20141] Add additional track pieces to the Giga Coaster.

17
debian/control vendored
View File

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

View File

@ -1,3 +1,184 @@
0.4.12 (in development)
------------------------------------------------------------------------
- Feature: [#622] Add option to align the top toolbar buttons horizontally centred (off by default).
- Feature: [#20263] Ability to increase the size of the map in the (0, 0) direction.
- Feature: [#21714] [Plugin] Costume assignment is now tailored to each staff type.
- Feature: [#21853] Enlarged UI mode.
- Feature: [#21893, #22065] On launch, the game now indicates what system is being initialised.
- Feature: [#21913] [Plugin] Allow precise and safe control of peep animations.
- Feature: [#22046] [Plugin] Add interface for crashed vehicle particle.
- Feature: [#22085] [Plugin] The result of actions that create banners now includes the bannerIndex.
- Feature: [#22087] [Plugin] Expose guests favourite rides to the plugin API.
- Improved: [#19870] Allow using new colours in UI themes.
- Improved: [#21853] Dropdowns now automatically use multiple columns if they are too tall for the screen.
- Improved: [#21981] Rendering performance of the map window has been improved considerably.
- Improved: [#21981] The map window now defaults to showing as much of the map as fits the screen.
- Improved: [#21983] Taking a screenshot now shows a message again, closing when taking another.
- Improved: [#22026] The options window now stays centred when window scaling is changed.
- Improved: [#22060] [Plugin] The scroll wheel can now be used to modify spinner widget values in custom/script windows.
- Improved: [#22065] Joining a network game now indicates progress using coaster trains.
- Improved: [#22075] [Plugin] Plugins can now use G1 Icons.
- Improved: [#22084] The game now temporarily pauses while the load/save window is open.
- Improved: [objects#238] Add preview image for invisible queue.
- Improved: [objects#329] Add RCT1AA lay-down coaster trains (for import only).
- Change: [#7248] Small mini-maps are now centred in the map window.
- Change: [#20240] Heavy snow and blizzards now make guests buy and use umbrellas.
- Change: [#21214] Wacky Worlds and Time Twisters scenario names now match their park names.
- Change: [#21991] UI themes JSON now use colour names and a translucency bool, instead of a number (old themes still work).
- Change: [#22057] Reorder Time Twisters scenarios and adjust their difficulty classification.
- Fix: [#13234] Vehicle weight sometimes wrong after using Remove All Guests cheat.
- Fix: [#13294] Map corners are cut off in some directions (original bug).
- Fix: [#14630] Non-ASCII thousands and decimal separators not processed correctly.
- Fix: [#21974] No reason specified when attempting to place benches, lamps, or bins on path with no unconnected edges (original bug).
- Fix: [#21987] [Plugin] API cannot handle negative removal prices.
- Fix: [#22008] Uninverted Lay-down roller coaster uses the wrong support type.
- Fix: [#22012] [Plugin] Images on ImgButton widgets cannot be updated.
- Fix: [#22121] Some news items in the “Recent Messages” window have the wrong text colour.
- Fix: [#22152] [Plugin] Negative signed integers are truncated.
- Fix: [objects#323] Incorrect wall boundaries on large WW/TT scenery objects.
- Fix: [objects#331] Incorrect hover car capacity string.
- Fix: [objects#334] Incorrect school bus capacity string.
- Fix: [objects#337] Swan Boats use an incorrect third remap colour (original bug).
0.4.11 (2024-05-05)
------------------------------------------------------------------------
- Feature: [#11512] Coloured usernames by group on multiplayer servers.
- Feature: [#21734] Park admittance price can now be set via text input.
- Feature: [#21957] [Plugin] Expose whether the game is paused to the plugin API.
- Improved: [#21728] “Fix all rides” cheat now also works if a mechanic is already fixing the ride.
- Improved: [#21769] Expose “animation is backwards” wall property in Tile Inspector.
- Improved: [#21855] Add a separator between “Load Game” and “Save Game”, to avoid accidental overwriting.
- Change: [#21715] [Plugin] Remove access to the internal `owner` property. Note: `ownership` is still accessible.
- Change: [#21855] Cheats menu dropdown no longer requires dragging.
- Change: [#21866] Hide the FPS Counter when the top toolbar/widgets have been toggled off.
- Change: [#21950] Construction and removal buttons can now be held down for repeated placement.
- Fix: [#866] Boat Hire boats get stuck entering track (original bug).
- Fix: [#10701] No reason specified when placing door over unsuitable track.
- Fix: [#18723, #21870] Attempting to demolish a flat ride in pause mode allows you to place multiple copies.
- Fix: [#19559] Custom rides with long descriptions extend into lower widgets.
- Fix: [#21696] Fullscreen window option not correctly applied on macOS.
- Fix: [#21749] Crash when loading park bigger than current limits.
- Fix: [#21787] Map generator heightmap should respect increased height limits.
- Fix: [#21829] When creating a new scenario, the default name contains formatting codes.
- Fix: [#21937] Build errors with the ORIGINAL_RATINGS flag.
- Fix: [objects#324] Cannot build Colosseum inside a turn or helix.
- Fix: [objects#325] Sloped castle walls are vertically offset by one pixel (original bug).
0.4.10 (2024-04-02)
------------------------------------------------------------------------
- Feature: [#18171] Add port of the RCT1 Stand-Up Roller Coaster.
- Feature: [#21590] [Plugin] Plugins can now read and write banner properties of tile elements.
- Feature: [#21636] Add shortcut key for sorting tile elements.
- Feature: [objects#294] Add scenery versions of wooden truss supports.
- Feature: [objects#295] Flipped version of wooden post.
- Improved: [#21424] Extra viewports can now rotate independently from the main viewport.
- Improved: [#21561, #21631] Enable more features in Android build (plugins, networking, multiplayer, audio formats).
- Improved: [#21599] Currency signs now use non-breaking spaces.
- Improved: [objects#157] Added sloped images for many walls.
- Improved: [objects#288] Better map colours and more sensible prices for RCT1 land surfaces.
- Improved: [objects#292] Vehicle colour cleanups for WW/TT vehicles.
- Improved: [objects#299] More accurate ratings modifiers for RCT1 vehicles.
- Improved: [objects#309] Updated names for dodgems and flying saucers vehicles.
- Improved: [objects#313] buildMenuPriority for dodgems and flying saucers vehicles.
- Change: [#21529] Classify “Southern Sands”, “Tiny Towers”, “Nevermore Park”, “Pacifica” as expert scenarios.
- Change: [#21545] Reorder Wacky Worlds scenarios and adjust their difficulty classification.
- Fix: [#910] Extra viewport does not preserve the location when rotating.
- Fix: [#6725] Z fighting issue with cars using animated doors.
- Fix: [#18413] Crash when mouse over a hacked train.
- Fix: [#20338] Cannot select Scenery Picker or Scatter Tool when the scenery recolouring tool is active.
- Fix: [#21317] Track designer allows proceeding without an object selected.
- Fix: [#21360] If the object selection is missing certain types, the Object Selection window will switch to an incorrect tab.
- Fix: [#21419] Cannot place walls underground beneath sloped tiles with clearance checks disabled.
- Fix: [#21434] Number of guests overflows in objective text.
- Fix: [#21522] Supports for 3×3 turns and 45 degree turns on the Hybrid Coaster and Wooden Roller Coaster not drawn correctly.
- Fix: [#21543] Crash with creating a TrackIterator with invalid arguments.
- Fix: [#21627] [Plugin] Banners are properly created or deleted when tile elements are changed by plugins.
- Fix: [#21635] Tile inspector hotkey can set wall slope for non-slopeable objects.
- Fix: [#21641] Crash when creating track iterator from an invalid tile element.
- Fix: [#21652] Dialog window to confirm overwriting files does not apply the theme colours correctly.
- Fix: [#21654] No sound effects when using RCT Classic as an asset base.
- Fix: [#21654] Extraneous reports of an object conflict between `rct2.audio.base` and `rct2.audio.base.rctc`.
- Fix: [#21664] Crash when switching between languages that use TTF.
- Fix: [#21668] Crash when on null ride in Guest::UpdateRideLeaveExit.
- Fix: [#21691] Crash when validating rides which cant contain banked track.
- Fix: [objects#290] “Haunted Mansion” cars have a non-functional third remap colour.
- Fix: [objects#296] Incorrect wall placement around large Kremlin/drab pieces.
- Fix: [objects#300] Incorrect Colosseum and volcano corner clearances.
- Fix: [objects#319] Incorrect diagonal slope images used for RCT1 corkscrew.
- Fix: [objects#320] Incorrect Mandarin Duck boats capacity.
0.4.9 (2024-03-02)
------------------------------------------------------------------------
- Feature: [#20376] Add Ukrainian language.
- Feature: [#20709] [Plugin] Plugins can now check metadata from all registered plugins.
- Feature: [#21376] Add option to reload an object (for object developers).
- Feature: [#21413, OpenSFX#19] Add log flume lift sound effect (when “chainlift” is enabled).
- Feature: [#21455] Add option to control hidden scenery.
- Feature: [objects#282] Added RCT1 beta terrains.
- Improved: [#20093] Use new colours for guests clothing when they spawn.
- Improved: [#21356] Resize the title bar when moving between displays with different scaling factors on Windows systems.
- Improved: [#21388] Tooltips will now show even when an error message is present.
- Improved: [#21423] Add mechanism to allow building partly underground.
- Improved: [objects#272, objects#276, objects#277, objects#278, objects#279, objects#280, objects#281] Add most remaining ports of RCT1 ride and vehicle objects (for import only).
- Improved: [objects#275, objects#284, objects#286] Add remaining RCT1 walls (for import only).
- Change: [#21350] Group Dodgems and Flying Saucers vehicles.
- Change: [#21453] Reintroduce lost RCT1 Jet skis colour presets to the boat hire.
- Change: [objects#285] Mark old reversed train objects as compatibility objects.
- Fix: [#15782] Some error messages from game actions are empty.
- Fix: [#17610] Some scenery items are unavailable in RCT1 scenarios.
- Fix: [#18963] Research table in parks from Loopy Landscapes is imported incorrectly.
- Fix: [#20164] Grass and Rock terrain objects cannot be de-selected.
- Fix: [#20907] RCT1/AA scenarios use the 4-across train for the Inverted Roller Coaster.
- Fix: [#21037] Map animations in the title sequence are stuck.
- Fix: [#21208] Error message will stay open only for a brief moment when the game has been running a while.
- Fix: [#21220] When creating a new park from a SC4 file, the localised park name is not applied.
- Fix: [#21286] Cannot build unbanking turns with RCT1 vehicles.
- Fix: [#21288] Text overlaps in the “About OpenRCT2” window for Arabic, Chinese, Japanese, Korean and Vietnamese.
- Fix: [#21289] Text overlaps and overflows in the map window for some languages.
- Fix: [#21310] Some half loop elements require more clearance than their upward/downward counterparts.
- Fix: [#21318] Virtual Floor for building scenery is not properly invalidated.
- Fix: [#21330] Tooltips from dropdown widgets have the wrong position.
- Fix: [#21332] Mini Helicopters and Monorail Cycles ride types are swapped in research within RCT1 scenarios.
- Fix: [#21343] “Pause” and “Build Path” hotkeys do not work if top toolbar is hidden.
- Fix: [#21347] Too many options are hidden if the platform has no file picker.
- Fix: [#21350] Maze and Mini Golf track designs from RCT1 not shown in track designs list.
- Fix: [#21425] Additional missing/misplaced land & construction rights tiles in Japanese Coastal Reclaim.
- Fix: [#21484] Upkeep costs for some rides/facilities/shops are not calculated correctly.
- Fix: [#21498] Crash when the size of text cant be determined.
- Fix: [objects#262, objects#263, objects#265, objects#266, objects#267, objects#268, objects#270, objects#271, objects#283] Various errors in expansion pack objects (original bug).
- Fix: [OpenSFX#18] B&M Roar sound effect not looping correctly.
0.4.8 (2024-02-04)
------------------------------------------------------------------------
- Feature: [#21062] [Plugin] Add API for managing a guests items.
- Improved: [#18632, #21306] Land ownership and construction rights are now shown on top of the water.
- Improved: [#20951] Activate OpenRCT2 window after using native file dialog on macOS.
- Improved: [#21184] The construction marker for rides, paths and large scenery is now shown on top of the water.
- Improved: [#21192] Tooltips will now follow the cursor.
- Improved: [#21227] Entrance style dropdown is now sorted alphabetically everywhere.
- Change: [#21200] Raise maximum lift speeds of the Reverser Coaster, Side Friction Coaster, and Virginia Reel for RCT1 parity.
- Change: [#21225] Raise maximum allowed misc entities to 1600.
- Fix: [#19494] RCT1 fence gate walls not imported properly if they were placed on slopes.
- Fix: [#20196] New scenarios start with an incorrect temperature.
- Fix: [#20255] Images from the last hovered-over coaster in the object selection are not freed.
- Fix: [#20616] Confirmation button in the track designers quit prompt has the wrong text.
- Fix: [#20628] Moving caret using Ctrl+left can move too far when using a multibyte grapheme.
- Fix: [#20631] IME window not positioned correctly.
- Fix: [#20845] Trying to save under a folder with no write permissions causes a crash.
- Fix: [#21039] Text rendering bleeds pixels through windows.
- Fix: [#21054] “No entrance” style is selected by default in the track designer.
- Fix: [#21145] [Plugin] setInterval/setTimeout handle conflict.
- Fix: [#21157] [Plugin] Widgets do not redraw correctly when updating disabled or visibility state.
- Fix: [#21158] [Plugin] Potential crash using setInterval/setTimeout within the callback.
- Fix: [#21171] [Plugin] Crash creating entities with no more entity slots available.
- Fix: [#21178] Inca Lost Citys scenario description incorrectly states there are height restrictions.
- Fix: [#21179] Additional missing land/construction rights tiles in Inca Lost City & Renovation.
- Fix: [#21198] [Plugin] Setting brake or booster speeds on a tile element doesnt work.
- Fix: [#21290] Sound keeps playing when paused from fast-forward mode.
- Fix: [#21291] Hungry guests heading to any flat ride do not count for warning threshold (original bug).
- Fix: [#21309] Africa - Oasis & Blackpool Pleasure Beachs monorails are built outside the parks land rights.
- Fix: [#21316] Isolated land for sale tile on Extreme Hawaiian Island.
0.4.7 (2023-12-31)
------------------------------------------------------------------------
- Feature: [#12078] Add shortcut key for toggling wall slope.

View File

@ -4,7 +4,9 @@
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0</project_license>
<name>OpenRCT2</name>
<summary>A construction and management simulation video game that simulates amusement park management</summary>
<summary>Amusement park simulation</summary>
<developer_name>The OpenRCT2 Team</developer_name>
<launchable type="desktop-id">openrct2.desktop</launchable>
<description>
<p>
OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2 (RCT2).
@ -35,7 +37,8 @@
</description>
<screenshots>
<screenshot type="default">
<image>https://camo.githubusercontent.com/888d993a9716208446bd0d5a762977d6b7993058/68747470733a2f2f692e696d6775722e636f6d2f6537434b3553632e706e67</image>
<image>https://camo.githubusercontent.com/fdb7e0506eedc4625f2f776f495c1072c520496dba3ee6c07bfdbf907d478afd/68747470733a2f2f692e696d6775722e636f6d2f6537434b3553632e706e67</image>
<caption>Amusement park featuring an inverted roller coaster, a river rapids ride and custom scenery</caption>
</screenshot>
</screenshots>
<url type="homepage">https://openrct2.io/</url>
@ -66,6 +69,18 @@
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
<releases>
<release version="0.4.11" date="2024-05-05">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.11</url>
</release>
<release version="0.4.10" date="2024-04-02">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.10</url>
</release>
<release version="0.4.9" date="2024-03-02">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.9</url>
</release>
<release version="0.4.8" date="2024-02-04">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.8</url>
</release>
<release version="0.4.7" date="2023-12-31">
<url>https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.7</url>
</release>

View File

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

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -56,7 +56,10 @@ declare global {
* Plugin writers should check if ui is available using `typeof ui !== 'undefined'`.
*/
var ui: Ui;
/**
* APIs for managing the installed plugins
*/
var pluginManager: PluginManager;
/**
* Registers the plugin. This may only be called once.
* @param metadata Information about the plugin and the entry point.
@ -213,6 +216,11 @@ declare global {
*/
readonly mode: GameMode;
/**
* Whether the game is currently paused or not.
*/
readonly paused: boolean;
/**
* Render the current state of the map and save to disc.
* Useful for server administration and timelapse creation.
@ -309,7 +317,7 @@ declare global {
queryAction(action: string, args: object, callback?: (result: GameActionResult) => void): void;
queryAction(action: ActionType, args: object, callback?: (result: GameActionResult) => void): void;
queryAction(action: "balloonpress", args: BalloonPressArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void;
queryAction(action: "bannerremove", args: BannerRemoveArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "bannersetcolour", args: BannerSetColourArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "bannersetname", args: BannerSetNameArgs, callback?: (result: GameActionResult) => void): void;
@ -331,7 +339,7 @@ declare global {
queryAction(action: "landsetheight", args: LandSetHeightArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "landsetrights", args: LandSetRightsArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "landsmooth", args: LandSmoothArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void;
queryAction(action: "largesceneryremove", args: LargeSceneryRemoveArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "largescenerysetcolour", args: LargeScenerySetColourArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "loadorquit", args: LoadOrQuitArgs, callback?: (result: GameActionResult) => void): void;
@ -384,7 +392,7 @@ declare global {
queryAction(action: "trackplace", args: TrackPlaceArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "trackremove", args: TrackRemoveArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "tracksetbrakespeed", args: TrackSetBrakeSpeedArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void;
queryAction(action: "wallremove", args: WallRemoveArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "wallsetcolour", args: WallSetColourArgs, callback?: (result: GameActionResult) => void): void;
queryAction(action: "waterlower", args: WaterLowerArgs, callback?: (result: GameActionResult) => void): void;
@ -401,7 +409,7 @@ declare global {
executeAction(action: string, args: object, callback?: (result: GameActionResult) => void): void;
executeAction(action: ActionType, args: object, callback?: (result: GameActionResult) => void): void;
executeAction(action: "balloonpress", args: BalloonPressArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "bannerplace", args: BannerPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void;
executeAction(action: "bannerremove", args: BannerRemoveArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "bannersetcolour", args: BannerSetColourArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "bannersetname", args: BannerSetNameArgs, callback?: (result: GameActionResult) => void): void;
@ -423,7 +431,7 @@ declare global {
executeAction(action: "landsetheight", args: LandSetHeightArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "landsetrights", args: LandSetRightsArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "landsmooth", args: LandSmoothArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "largesceneryplace", args: LargeSceneryPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void;
executeAction(action: "largesceneryremove", args: LargeSceneryRemoveArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "largescenerysetcolour", args: LargeScenerySetColourArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "loadorquit", args: LoadOrQuitArgs, callback?: (result: GameActionResult) => void): void;
@ -476,7 +484,7 @@ declare global {
executeAction(action: "trackplace", args: TrackPlaceArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "trackremove", args: TrackRemoveArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "tracksetbrakespeed", args: TrackSetBrakeSpeedArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "wallplace", args: WallPlaceArgs, callback?: (result: BannerCreateActionResult) => void): void;
executeAction(action: "wallremove", args: WallRemoveArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "wallsetcolour", args: WallSetColourArgs, callback?: (result: GameActionResult) => void): void;
executeAction(action: "waterlower", args: WaterLowerArgs, callback?: (result: GameActionResult) => void): void;
@ -868,7 +876,7 @@ declare global {
x: number;
y: number;
height: number;
style: number; // see TILE_ELEMENT_SLOPE in openrct2/world/Surface.h
style: number; // see openrct2/world/tile_element/Slope.h
}
interface LandSetRightsArgs extends GameActionArgs {
@ -931,6 +939,8 @@ declare global {
interface MapChangeSizeArgs extends GameActionArgs {
targetSizeX: number;
targetSizeY: number;
shiftX: number;
shiftY: number;
}
interface MazePlaceTrackArgs extends GameActionArgs {
@ -1147,6 +1157,7 @@ declare global {
quadrant: number;
primaryColour: number;
secondaryColour: number;
tertiaryColour: number;
}
interface SmallSceneryRemoveArgs extends GameActionArgs {
@ -1332,6 +1343,10 @@ declare global {
expenditureType?: ExpenditureType;
}
interface BannerCreateActionResult extends GameActionResult {
readonly bannerIndex?: number;
}
interface RideCreateActionResult extends GameActionResult {
readonly ride?: number;
}
@ -1472,7 +1487,6 @@ declare global {
occupiedQuadrants: number;
isGhost: boolean;
isHidden: boolean; /** Take caution when changing this field, it may invalidate TileElements you have stored in your script. */
owner: number;
}
interface SurfaceElement extends BaseTileElement {
@ -1499,12 +1513,12 @@ declare global {
edges: number;
corners: number;
slopeDirection: number | null;
slopeDirection: Direction | null;
isBlockedByVehicle: boolean;
isWide: boolean;
isQueue: boolean;
queueBannerDirection: number | null;
queueBannerDirection: Direction | null;
ride: number | null;
station: number | null;
@ -1543,6 +1557,7 @@ declare global {
object: number;
primaryColour: number;
secondaryColour: number;
tertiaryColour: number;
quadrant: number;
age: number;
}
@ -1553,10 +1568,14 @@ declare global {
direction: Direction;
object: number;
primaryColour: number;
/** If the element is a banner, this is the text colour. */
secondaryColour: number;
tertiaryColour: number;
bannerIndex: number | null;
slope: Direction;
/** Writing to bannerIndex is deprecated and may result in uncontrolled behaviour. */
readonly bannerIndex: number | null;
/** If the element is a banner, this is its text. */
bannerText: string | null;
}
interface EntranceElement extends BaseTileElement {
@ -1577,16 +1596,28 @@ declare global {
direction: Direction;
object: number;
primaryColour: number;
/** If the element is a banner, this is the text colour. */
secondaryColour: number;
tertiaryColour: number;
bannerIndex: number | null;
sequence: number;
/** Writing to bannerIndex is deprecated and may result in uncontrolled behaviour. */
readonly bannerIndex: number | null;
/** If the element is a banner, this is its text. */
bannerText: string | null;
}
interface BannerElement extends BaseTileElement {
type: "banner";
direction: Direction;
bannerIndex: number;
object: number;
primaryColour: number;
/** This is the text colour. */
secondaryColour: number;
/** Writing to bannerIndex is deprecated and may result in uncontrolled behaviour. */
readonly bannerIndex: number;
bannerText: string;
isNoEntry: boolean;
}
/**
@ -2096,6 +2127,11 @@ declare global {
supports: number;
}
interface CrashedVehicleColour {
body: number;
trim: number;
}
interface VehicleColour {
body: number;
trim: number;
@ -2581,6 +2617,63 @@ declare global {
"waiting_to_depart" |
"waiting_to_start";
type CrashParticleType = "corner" | "rod" | "wheel" | "panel" | "seat";
/**
* Override properties for launch data. All properties except colour are randomly
* chosen if not overridden, using the same algorithm as regular crashed particles.
*/
interface CrashParticleLaunchData {
colours?: CrashedVehicleColour;
timeToLive?: number;
velocity?: CoordsXYZ;
crashParticleType?: CrashParticleType;
frame?: number;
}
/**
* Represents a vehicle explosion particle. They are emitted during a vehicle
* crash and will bounce until their timer expires and they are automatically
* removed.
*/
interface CrashedVehicleParticle extends Entity {
/**
* The colour of the particle.
*/
colours: CrashedVehicleColour;
/**
* The lifetime of the particle in ticks. Default value 65535. Entity is
* automatically removed at 0.
*/
timeToLive: number;
/**
* The particle velocity.
*/
velocity: CoordsXYZ;
/**
* The acceleration of the particle in the x, y, and z directions.
*/
acceleration: CoordsXYZ;
/**
* The type of crash particle.
*/
crashParticleType: CrashParticleType;
/**
* The current frame of the crash particle.
*/
frame: number;
/**
* Sets the sprite bounds and launches the particle.
*/
launch(launchData?: CrashParticleLaunchData): void;
}
/**
* Represents a guest or staff member.
* @deprecated since version 34, use guest or staff instead.
@ -2657,6 +2750,34 @@ declare global {
*/
type PeepType = "guest" | "staff";
type GuestAnimation =
"walking" |
"checkTime" |
"watchRide" |
"eatFood" |
"shakeHead" |
"emptyPockets" |
"holdMat" |
"sittingIdle" |
"sittingEatFood" |
"sittingLookAroundLeft" |
"sittingLookAroundRight" |
"hanging" |
"wow" |
"throwUp" |
"jump" |
"drowning" |
"joy" |
"readMap" |
"wave" |
"wave2" |
"takePhoto" |
"clap" |
"disgust" |
"drawPicture" |
"beingWatched" |
"withdrawMoney";
/**
* Represents a guest.
*/
@ -2765,6 +2886,65 @@ declare global {
* The list of thoughts this guest has.
*/
readonly thoughts: Thought[];
/**
* The list of items this guest has.
*/
readonly items: GuestItem[];
/**
* Checks whether this guest has a certain item.
* @param item The item to check.
*/
hasItem(item: GuestItem): boolean;
/**
* Gives an item to the guest. Guests can only have one item of a given type.
* If this guest already has an item of the same type, this will override the current item.
* @param item The item to give.
*/
giveItem(item: GuestItem): void;
/**
* Removes an item from the guest's possession.
* @param item The item to remove.
*/
removeItem(item: GuestItem): void;
/**
* Removes all items from the guest's possession.
*/
removeAllItems(): void;
/**
* The animations available to this guest.
*/
readonly availableAnimations: GuestAnimation[];
/**
* Gets an array of sprite ids representing a particular guest animation.
*/
getAnimationSpriteIds(animation: GuestAnimation, rotation: number): number[];
/**
* The animation the guest is currently exhibiting.
*/
animation: GuestAnimation;
/**
* The frame offset in the current animation.
*/
animationOffset: number;
/**
* The total number of frames in the current animation.
*/
readonly animationLength: number;
/**
* The ride ID of the guest's favourite ride.
*/
favouriteRide: number | null;
}
/**
@ -2927,6 +3107,158 @@ declare global {
"excited_deprecated" |
"here_we_are";
type GuestItemType =
"balloon" |
"hat" |
"map" |
"sunglasses" |
"toy" |
"tshirt" |
"umbrella" |
"photo1" |
"photo2" |
"photo3" |
"photo4" |
"voucher" |
"beef_noodles" |
"burger" |
"candyfloss" |
"chicken" |
"chips" |
"chocolate" |
"cookie" |
"doughnut" |
"hot_dog" |
"fried_rice_noodles" |
"funnel_cake" |
"ice_cream" |
"meatball_soup" |
"pizza" |
"popcorn" |
"pretzel" |
"roast_sausage" |
"sub_sandwich" |
"tentacle" |
"toffee_apple" |
"wonton_soup" |
"coffee" |
"drink" |
"fruit_juice" |
"iced_tea" |
"lemonade" |
"soybean_milk" |
"sujeonggwa" |
"empty_bottle" |
"empty_bowl_blue" |
"empty_bowl_red" |
"empty_box" |
"empty_burger_box" |
"empty_can" |
"empty_cup" |
"empty_drink_carton" |
"empty_juice_cup" |
"rubbish";
type VoucherType =
"entry_free" |
"entry_half_price" |
"ride_free" |
"food_drink_free";
/**
* Represents an item in a guest's possession.
* If giving a guest a photo or voucher, use the other interfaces instead.
*/
interface GuestItem {
/**
* The type of item.
*/
readonly type: GuestItemType;
}
/**
* Represents an on-ride photo in a guest's possession.
*/
interface GuestPhoto extends GuestItem {
readonly type: "photo1" | "photo2" | "photo3" | "photo4";
/**
* The id of the ride the on-ride photo is for.
*/
readonly rideId: number;
}
/**
* Represents a voucher in a guest's possession. If giving a guest a voucher for free rides
* or free food/drink, use the other interfaces instead.
*/
interface Voucher extends GuestItem {
readonly type: "voucher";
/**
* The type of voucher.
*/
readonly voucherType: VoucherType;
}
/**
* Represents a voucher for a free ride in a guest's possession.
*/
interface RideVoucher extends Voucher {
readonly voucherType: "ride_free";
/**
* The id of the ride the voucher is for.
*/
readonly rideId: number;
}
/**
* Represents a voucher for free food or drink in a guest's possession.
*/
interface FoodDrinkVoucher extends Voucher {
readonly voucherType: "food_drink_free";
/**
* The type of food or drink the voucher is for.
*/
readonly item: GuestItemType;
}
type StaffCostume =
"none" |
"handyman" |
"mechanic" |
"security1" |
"security2" |
"panda" |
"tiger" |
"elephant" |
"roman" |
"gorilla" |
"snowman" |
"knight" |
"astronaut" |
"bandit" |
"sheriff" |
"pirate";
type StaffAnimation =
"walking" |
"watchRide" |
"wave" |
"hanging" |
"staffMower" |
"staffSweep" |
"drowning" |
"staffAnswerCall" |
"staffAnswerCall2" |
"staffCheckBoard" |
"staffFix" |
"staffFix2" |
"staffFixGround" |
"staffFix3" |
"staffWatering" |
"joy" |
"staffEmptyBin" |
"wave2";
/**
* Represents a staff member.
*/
@ -2937,14 +3269,19 @@ declare global {
staffType: StaffType;
/**
* Colour of the staff member. Not applicable for entertainers.
* Colour of the staff member. Not applicable to entertainers.
*/
colour: number;
/**
* The entertainer's costume, only applicable for entertainers.
* Array of costumes available to this particular staff member.
*/
costume: number;
readonly availableCostumes: StaffCostume[];
/**
* The staff member's costume.
*/
costume: StaffCostume | string | number;
/**
* The enabled jobs the staff can do, e.g. sweep litter, water plants, inspect rides etc.
@ -2955,6 +3292,31 @@ declare global {
* Gets the patrol area for the staff member.
*/
readonly patrolArea: PatrolArea;
/**
* The animations available to this staff member.
*/
readonly availableAnimations: StaffAnimation[];
/**
* Gets an array of sprite ids representing a particular staff animation.
*/
getAnimationSpriteIds(animation: StaffAnimation, rotation: number): number[];
/**
* The animation the staff member is currently exhibiting.
*/
animation: StaffAnimation;
/**
* The frame offset in the current animation.
*/
animationOffset: number;
/**
* The total number of frames in the current animation.
*/
readonly animationLength: number;
}
type StaffType = "handyman" | "mechanic" | "security" | "entertainer";
@ -3464,8 +3826,9 @@ declare global {
/**
* The amount of funding currently spent on research.
* 0: none, 1: minimum, 2: normal, 3: maximum
*/
funding: ResearchFundingLevel;
funding: number;
/**
* The categories of research which should be prioritised.
@ -3515,7 +3878,7 @@ declare global {
* E.g. gentle rides, thrill rides, shops etc.
* Note: Any updates to this field are ignored by OpenRCT2, the category will be derived from the ride type.
*/
readonly category?: ResearchCategory;
readonly category: RideResearchCategory;
/**
* The ride type. Each vehicle can have a seperate invention for each ride type.
@ -3529,7 +3892,7 @@ declare global {
}
interface SceneryResearchItem {
readonly category?: "scenery_group";
readonly category: "scenery";
readonly type: "scenery";
/**
@ -3538,23 +3901,15 @@ declare global {
readonly object: number;
}
type ResearchItemType = "scenery" | "ride";
type ResearchCategory =
type RideResearchCategory =
"transport" |
"gentle" |
"rollercoaster" |
"thrill" |
"water" |
"shop" |
"scenery";
"shop";
enum ResearchFundingLevel {
None,
Minimum,
Normal,
Maximum
}
type ResearchCategory = RideResearchCategory | "scenery";
type ResearchFundingStage =
"initial_research" |
@ -3999,25 +4354,29 @@ declare global {
ButtonWidget | CheckboxWidget | ColourPickerWidget | CustomWidget | DropdownWidget | GroupBoxWidget |
LabelWidget | ListViewWidget | SpinnerWidget | TextBoxWidget | ViewportWidget;
type IconName = "arrow_down" | "arrow_up" | "chat" | "cheats" | "copy" | "empty" | "eyedropper" |
"fast_forward" | "game_speed_indicator" | "game_speed_indicator_double" | "glassy_recolourable" |
"hide_full" | "hide_partial" | "hide_scenery" | "hide_supports" | "hide_vegetation" | "hide_vehicles" |
"large_scenery" | "legacy_paths" | "link_chain" | "logo" | "logo_text" | "map_east" |
"map_east_pressed" | "map_gen_land" | "map_gen_noise" | "map_gen_trees" | "map_north" |
"map_north_pressed" | "map_south" | "map_south_pressed" | "map_west" | "map_west_pressed" |
"mountain_tool_even" | "mountain_tool_odd" | "multiplayer" | "multiplayer_desync" | "multiplayer_sync" |
"multiplayer_toolbar" | "multiplayer_toolbar_pressed" | "mute" | "mute_pressed" | "news_messages" |
"normal_selection_6x6" | "palette_invisible" | "palette_invisible_pressed" | "paste" | "path_railings" | "path_surfaces" | "paths" | "placeholder" |
"rct1_close_off" | "rct1_close_off_pressed" | "rct1_close_on" | "rct1_close_on_pressed" | "rct1_open_off" |
"rct1_open_off_pressed" | "rct1_open_on" | "rct1_open_on_pressed" | "rct1_simulate_off" |
"rct1_simulate_off_pressed" | "rct1_simulate_on" | "rct1_simulate_on_pressed" | "rct1_test_off" |
"rct1_test_off_pressed" | "rct1_test_on" | "rct1_test_on_pressed" | "reload" | "ride_stations" |
"scenery_scatter_high" | "scenery_scatter_low" | "scenery_scatter_medium" | "search" |
"selection_edge_ne" | "selection_edge_nw" | "selection_edge_se" | "selection_edge_sw" |
"server_password" | "sideways_tab" | "sideways_tab_active" | "simulate" | "small_scenery" | "sort" |
"terrain_edges" | "title_play" | "title_restart" | "title_skip" | "title_stop" | "unmute" |
"unmute_pressed" | "view" | "zoom_in" | "zoom_in_background" | "zoom_out" | "zoom_out_background";
type IconName =
"arrow_down" | "arrow_up" | "award" | "awards" | "chain_lift" | "chat" | "cheats" | "closed" | "construction" |
"copy" | "demolish" | "empty" | "eyedropper" | "fast_forward" | "finance" | "floppy_disk" | "game_speed_indicator" |
"game_speed_indicator_double" | "glassy_recolourable" | "graph" | "guest_inventory" | "guests" |
"hearing" | "hide_full" | "hide_partial" | "hide_scenery" | "hide_supports" | "hide_vegetation" | "hide_vehicles" |
"kiosks_and_facilities" | "large_scenery" | "legacy_paths" | "link_chain" | "locate" | "logo" | "logo_text" | "map" |
"map_east" | "map_east_pressed" | "map_gen_land" | "map_gen_noise" | "map_gen_trees" | "map_north" | "map_north_pressed" |
"map_south" | "map_south_pressed" | "map_west" | "map_west_pressed" | "mechanic" | "mirror_arrow" |
"mountain_tool_even" | "mountain_tool_odd" | "multiplayer" | "multiplayer_desync" | "multiplayer_sync" |
"multiplayer_toolbar" | "multiplayer_toolbar_pressed" | "music" | "mute" | "mute_pressed" | "news_messages" |
"new_ride" | "next" | "no_entry" | "open" | "paintbrush" | "palette_invisible" | "palette_invisible_pressed" | "park" |
"paste" | "path_railings" | "path_surfaces" | "paths" | "patrol" | "pause" | "pickup" | "placeholder" | "previous" |
"question" | "rct1_close_off" | "rct1_close_off_pressed" | "rct1_close_on" | "rct1_close_on_pressed" | "rct1_open_off" |
"rct1_open_off_pressed" | "rct1_open_on" | "rct1_open_on_pressed" | "rct1_simulate_off" | "rct1_simulate_off_pressed" |
"rct1_simulate_on" | "rct1_simulate_on_pressed" | "rct1_test_off" | "rct1_test_off_pressed" | "rct1_test_on" |
"rct1_test_on_pressed" | "reload" | "rename" | "research" | "ride" | "ride_stations" | "rides_gentle" |
"rides_rollercoasters" | "rides_shop" | "rides_thrill" | "rides_transport" | "rides_water" | "rotate_arrow" | "scenery" |
"scenery_cluster" | "scenery_paths" | "scenery_paths_items" | "scenery_scatter_high" | "scenery_scatter_low" |
"scenery_scatter_medium" | "scenery_signage" | "scenery_statues" | "scenery_trees" | "scenery_urban" | "scenery_walls" |
"search" | "selection_edge_ne" | "selection_edge_nw" | "selection_edge_se" | "selection_edge_sw" | "server_password" |
"shops_and_stalls" | "sideways_tab" | "sideways_tab_active" | "simulate" | "small_scenery" | "sort" | "stats" | "testing" |
"terrain_edges" | "title_play" | "title_restart" | "title_skip" | "title_stop" | "unmute" | "unmute_pressed" | "view" |
"water" | "zoom_in" | "zoom_in_background" | "zoom_out" | "zoom_out_background";
interface WidgetBase {
readonly window: Window;
@ -4803,4 +5162,11 @@ declare global {
getAllObjects(type: "scenery_group"): SceneryGroupObject[];
getAllObjects(type: "music"): LoadedObject[];
}
/**
* Interface to handle the plugin manager
*/
interface PluginManager {
readonly plugins: PluginMetadata[];
}
}

View File

@ -1,5 +1,5 @@
Last updated: 2023-12-31
Release version: 0.4.7
Last updated: 2024-05-05
Release version: 0.4.11
------------------------------------------------------------------------

View File

@ -65,7 +65,7 @@
<RuntimeLibrary Condition="'$(UseSharedLibs)'=='true'">MultiThreadedDLL</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalOptions>/utf-8 /std:c++17 /permissive- /Zc:externConstexpr</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:c++20 /permissive- /Zc:externConstexpr /Zc:char8_t-</AdditionalOptions>
</ClCompile>
<Link>
<LargeAddressAware Condition="'$(Platform)'=='Win32'">true</LargeAddressAware>
@ -86,7 +86,7 @@
</ClCompile>
<Link>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<AdditionalDependencies>brotlicommon-static.lib;brotlidec-static.lib;brotlienc-static.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>brotlicommon.lib;brotlidec.lib;brotlienc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies Condition="'$(Breakpad)'=='true' and ('$(Platform)'=='Win32' or '$(Platform)'=='x64')">libbreakpadd.lib;libbreakpad_clientd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>bz2d.lib;discord-rpc.lib;flac.lib;freetyped.lib;libpng16d.lib;ogg.lib;speexdsp.lib;SDL2-staticd.lib;vorbis.lib;vorbisfile.lib;zip.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
@ -107,7 +107,7 @@
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>brotlicommon-static.lib;brotlidec-static.lib;brotlienc-static.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>brotlicommon.lib;brotlidec.lib;brotlienc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies Condition="'$(Breakpad)'=='true' and ('$(Platform)'=='Win32' or '$(Platform)'=='x64')">libbreakpad.lib;libbreakpad_client.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>bz2.lib;discord-rpc.lib;flac.lib;freetype.lib;libpng16.lib;ogg.lib;speexdsp.lib;SDL2-static.lib;vorbis.lib;vorbisfile.lib;zip.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>

View File

@ -37,22 +37,22 @@
<!-- 3rd party libraries / dependencies -->
<PropertyGroup>
<DependenciesCheckFile>$(RootDir).dependencies</DependenciesCheckFile>
<LibsUrl Condition="'$(Platform)'=='Win32'">https://github.com/OpenRCT2/Dependencies/releases/download/v34/openrct2-libs-v34-x86-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='Win32'">5173c04611c94da44af0db9e099edca2d6a7b829</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='x64'">https://github.com/OpenRCT2/Dependencies/releases/download/v34/openrct2-libs-v34-x64-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='x64'">930df83ef49d91b1ef886f5dbf0a9cb61d704a50</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='ARM64'">https://github.com/OpenRCT2/Dependencies/releases/download/v34/openrct2-libs-v34-arm64-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='ARM64'">bd338aa3da9a357fb996dcaa6cea02c4f906718c</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='ARM64'">https://github.com/OpenRCT2/Dependencies/releases/download/v35/openrct2-libs-v35-arm64-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='ARM64'">89f119395c4347f25427990eb47ea8f57bba95d8</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='x64'">https://github.com/OpenRCT2/Dependencies/releases/download/v35/openrct2-libs-v35-x64-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='x64'">1303b2423be26f40bdb75fa2c91f1bc7ef1de1ed</LibsSha1>
<LibsUrl Condition="'$(Platform)'=='Win32'">https://github.com/OpenRCT2/Dependencies/releases/download/v35/openrct2-libs-v35-x86-windows-static.zip</LibsUrl>
<LibsSha1 Condition="'$(Platform)'=='Win32'">f3636b530110c7592deab23ca0d0c1916fc7e44c</LibsSha1>
<TitleSequencesUrl>https://github.com/OpenRCT2/title-sequences/releases/download/v0.4.6/title-sequences.zip</TitleSequencesUrl>
<TitleSequencesSha1>80fefc6ebbabc42a6f4703412daa5c62f661420d</TitleSequencesSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.3.13/objects.zip</ObjectsUrl>
<ObjectsSha1>15a60424d5f4f0b94ac07763b6967ba0e6ae3a7d</ObjectsSha1>
<OpenSFXUrl>https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.3/opensound.zip</OpenSFXUrl>
<OpenSFXSha1>ffec5a97bd5035860c4c9a43fe32cf51886478e3</OpenSFXSha1>
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.4.6/objects.zip</ObjectsUrl>
<ObjectsSha1>49852246ba3d3a44f143e0c4de8f4d2e8f950c10</ObjectsSha1>
<OpenSFXUrl>https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.5/opensound.zip</OpenSFXUrl>
<OpenSFXSha1>b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb</OpenSFXSha1>
<OpenMSXUrl>https://github.com/OpenRCT2/OpenMusic/releases/download/v1.5/openmusic.zip</OpenMSXUrl>
<OpenMSXSha1>f3c707e576281758637598ce68880416891fe5f9</OpenMSXSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.78/replays.zip</ReplaysUrl>
<ReplaysSha1>31C5D07EED8481D5C6D57F9E4FE9443AAEDE7739</ReplaysSha1>
<ReplaysUrl>https://github.com/OpenRCT2/replays/releases/download/v0.0.79/replays.zip</ReplaysUrl>
<ReplaysSha1>34457077DBA9448A08FF6AC95E5CB92D65252E0C</ReplaysSha1>
</PropertyGroup>
<ItemGroup>
@ -107,8 +107,10 @@
</Target>
<!-- Target to build g2.dat containing OpenRCT2 sprites -->
<!-- Only Arm64 machines will build g2.dat for Arm64 -->
<!-- Note: Arm64 machines can build for x86, x64 and Arm64 -->
<Target Name="g2" AfterTargets="Build" Inputs="@(g2Inputs)" Outputs="$(g2Output)"
Condition="'$(TestConfig)'!='true' and '$(Platform)'!='ARM64'">
Condition="'$(TestConfig)'!='true' and ('$(Platform)'!='ARM64' or '$(PROCESSOR_ARCHITECTURE)'=='ARM64')">
<Message Text="Building g2.dat..." Importance="high" />
<Exec Command="&quot;$(OutputExe)&quot; sprite build &quot;$(g2Output)&quot; &quot;$(RootDir)resources\g2\sprites.json&quot;"
StandardOutputImportance="normal" />

View File

@ -19,7 +19,7 @@
### Download
| Latest release | Latest development build |
|-----------------------------------------------------------------------------------------------------------------------|--------------------------|
| [![OpenRCT2.org](https://img.shields.io/badge/master-v0.4.7-green.svg)](https://openrct2.org/downloads/master/latest) | [![OpenRCT2.org](https://img.shields.io/github/last-commit/OpenRCT2/OpenRCT2/develop)](https://openrct2.org/downloads/develop/latest) |
| [![OpenRCT2.org](https://img.shields.io/badge/master-v0.4.11-green.svg)](https://openrct2.org/downloads/master/latest) | [![OpenRCT2.org](https://img.shields.io/github/last-commit/OpenRCT2/OpenRCT2/develop)](https://openrct2.org/downloads/develop/latest) |
---
@ -135,7 +135,7 @@ OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bo
<details>
<summary>Linux prerequisites</summary>
- gcc (>= 7.1) or clang (>= 8.0.0) (for C++17 support)
- gcc (>= 8.0) or clang (>= 10.0) (for C++20 support)
- sdl2 (only for UI client)
- freetype (can be disabled)
- fontconfig (can be disabled)
@ -165,12 +165,14 @@ OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bo
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 VS 2022
3. Navigate to the repository (e.g. `cd C:\GitHub\OpenRCT2`)
4. To build the 64-bit version, use `msbuild openrct2.proj /t:build /p:platform=x64`
To build the 32-bit version, use `msbuild openrct2.proj /t:build /p:platform=Win32`
4. To build the x64 version, use `msbuild openrct2.proj /t:build /p:platform=x64`
To build the x86 version, use `msbuild openrct2.proj /t:build /p:platform=Win32`
To build the Arm64 version, use `msbuild openrct2.proj /t:build /p:platform=arm64`
**Note:** The file `g2.dat` may not be generated on cross-compilation (e.g. building for Arm64 on a x64 machine). In this case `g2.dat` must be copied from a x86/x64 build.
5. Run the game, `bin\openrct2`
Once you have ran msbuild once, further development can be done within Visual Studio by opening `openrct2.sln`. Make sure to select the correct target platform for which you ran the build in point #3 (`Win32` for the 32-bit version, `x64` for the 64-bit version), otherwise the build will fail in Visual Studio.
Once you have ran msbuild once, further development can be done within Visual Studio by opening `openrct2.sln`. Make sure to select the correct target platform for which you ran the build in point #3 (`Win32` for the x86 version, `x64` for the x64 version, `arm64` for the Arm64 version), otherwise the build will fail in Visual Studio.
Other examples:
```

View File

@ -45,7 +45,7 @@ BEGIN
VALUE "CompanyName", "OpenRCT2 Team"
VALUE "FileDescription", "Main executable for OpenRCT2"
VALUE "FileVersion", OPENRCT2_PRODUCT_VERSION
VALUE "LegalCopyright", "Copyright (c) 2014-2023 OpenRCT2 developers"
VALUE "LegalCopyright", "Copyright (c) 2014-2024 OpenRCT2 developers"
VALUE "ProductName", "OpenRCT2"
VALUE "ProductVersion", OPENRCT2_PRODUCT_VERSION
END

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ set -e
# It should be dot sourced into your environment
if [[ "$GITHUB_ACTIONS" != "true" ]]; then
export OPENRCT2_BUILD_SERVER=$(hostname)
export OPENRCT2_VERSION=0.4.7
export OPENRCT2_VERSION=0.4.11
GITHUB_REF=$(git rev-parse --symbolic-full-name HEAD)
GITHUB_SHA=$(git rev-parse HEAD)
fi

View File

@ -1,23 +1,23 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 31
compileSdk 34
buildToolsVersion "34.0.0"
ndkVersion "26.1.10909125" // Latest r26b (LTS), to be synced with CI container image
ndkVersion "26.2.11394342" // Latest r26c (LTS), to be synced with CI container image
namespace "io.openrct2"
defaultConfig {
applicationId 'io.openrct2'
minSdkVersion 19
minSdkVersion 21
targetSdkVersion 28
versionCode 2
versionName '0.4.7'
versionName '0.4.11'
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
targets 'openrct2', 'openrct2-ui', 'openrct2-cli'
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
abiFilters 'armeabi-v7a', 'arm64-v8a'
abiFilters 'arm64-v8a', 'x86_64'
}
}
}
@ -29,6 +29,9 @@ android {
sourceSets.main {
jniLibs.srcDir 'libs'
java {
srcDir 'src/main/java'
}
}
externalNativeBuild {
cmake {
@ -42,8 +45,8 @@ android {
}
dependencies {
implementation 'commons-io:commons-io:2.6'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'commons-io:commons-io:2.13.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation fileTree(include: ['*.jar'], dir: 'libs')
}

View File

@ -4,10 +4,6 @@ project(openrct2-android CXX)
set(CMAKE_VERBOSE_MAKEFILE on)
set(lib_src_DIR ${CMAKE_SOURCE_DIR}/../../../libs)
set(lib_build_DIR $ENV{HOME}/tmp)
file(MAKE_DIRECTORY ${lib_build_DIR})
set(DEBUG_LEVEL 0 CACHE STRING "Select debug level for compilation. Use value in range 03.")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG=${DEBUG_LEVEL}")
@ -24,7 +20,7 @@ endif()
include(ExternalProject)
ExternalProject_Add(libs
URL https://github.com/OpenRCT2/openrct2-dependencies-android/releases/download/v0.9/openrct2-libs-android-${ANDROID_ABI}.tar.gz
URL https://github.com/OpenRCT2/openrct2-dependencies-android/releases/download/v11/${ANDROID_ABI}-android-dynamic.tar.zst
SOURCE_DIR "${CMAKE_BINARY_DIR}/libs"
@ -33,16 +29,24 @@ ExternalProject_Add(libs
INSTALL_COMMAND ""
BUILD_BYPRODUCTS
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}crypto${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}vorbis${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}vorbisfile${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}FLAC${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}brotlidec${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}brotlicommon${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}ogg${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}bz2${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}freetype${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}png16${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2-2.0${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2main${CMAKE_STATIC_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}speexdsp${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}icui18n${CMAKE_STATIC_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}icuuc${CMAKE_STATIC_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}icudata${CMAKE_STATIC_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}ssl${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}crypto${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}icudata${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}icui18n${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}icuuc${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}z${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2main${CMAKE_STATIC_LIBRARY_SUFFIX}
LOG_DOWNLOAD 1
LOG_UPDATE 1
@ -58,11 +62,22 @@ add_custom_command(TARGET libs POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
# COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/*.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libcrypto.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libvorbis.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libvorbisfile.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libFLAC.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libbrotlidec.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libbrotlicommon.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libogg.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libbz2.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libicudata.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libicuuc.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libicui18n.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libfreetype.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libpng16.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libSDL2-2.0.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libSDL2.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libspeexdsp.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libssl.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/libs/lib/libz.so" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
)
add_library(freetype SHARED IMPORTED)
@ -77,9 +92,15 @@ set_target_properties(png PROPERTIES IMPORTED_LOCATION
)
add_dependencies(png libs)
add_library(z SHARED IMPORTED)
set_target_properties(z PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}z${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(z libs)
add_library(SDL2 SHARED IMPORTED)
set_target_properties(SDL2 PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2-2.0${CMAKE_SHARED_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(SDL2 libs)
@ -97,19 +118,19 @@ add_dependencies(speexdsp libs)
add_library(icu STATIC IMPORTED)
set_target_properties(icu PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}icui18n${CMAKE_STATIC_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}icui18n${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(icu libs)
add_library(icuuc STATIC IMPORTED)
set_target_properties(icuuc PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}icuuc${CMAKE_STATIC_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}icuuc${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(icuuc libs)
add_library(icudata STATIC IMPORTED)
set_target_properties(icudata PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_STATIC_LIBRARY_PREFIX}icudata${CMAKE_STATIC_LIBRARY_SUFFIX}
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}icudata${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(icudata libs)
@ -125,13 +146,58 @@ set_target_properties(crypto PROPERTIES IMPORTED_LOCATION
)
add_dependencies(crypto libs)
add_library(vorbis SHARED IMPORTED)
set_target_properties(vorbis PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}vorbis${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(vorbis libs)
add_library(vorbisfile SHARED IMPORTED)
set_target_properties(vorbisfile PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}vorbisfile${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(vorbisfile libs)
add_library(FLAC SHARED IMPORTED)
set_target_properties(FLAC PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}FLAC${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(FLAC libs)
add_library(brotlidec SHARED IMPORTED)
set_target_properties(brotlidec PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}brotlidec${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(brotlidec libs)
add_library(brotlicommon SHARED IMPORTED)
set_target_properties(brotlicommon PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}brotlicommon${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(brotlicommon libs)
add_library(ogg SHARED IMPORTED)
set_target_properties(ogg PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}ogg${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(ogg libs)
add_library(bz2 SHARED IMPORTED)
set_target_properties(bz2 PROPERTIES IMPORTED_LOCATION
${CMAKE_BINARY_DIR}/libs/lib/${CMAKE_SHARED_LIBRARY_PREFIX}bz2${CMAKE_SHARED_LIBRARY_SUFFIX}
)
add_dependencies(bz2 libs)
include_directories(SYSTEM "${CMAKE_BINARY_DIR}/libs/include")
include_directories(SYSTEM "${CMAKE_BINARY_DIR}/libs/include/freetype2")
include_directories(SYSTEM "${CMAKE_BINARY_DIR}/libs/include/SDL2")
# now build app's shared lib
add_definitions(-DDISABLE_HTTP -DDISABLE_DISCORD_RPC -DDISABLE_HTTP -DDISABLE_NETWORK -DDISABLE_FLAC -DDISABLE_VORBIS -DDISABLE_OPENGL -DGL_GLEXT_PROTOTYPES -D__STDC_LIMIT_MACROS -DNO_TTF -DSDL_MAIN_HANDLED)
add_definitions(-DDISABLE_DISCORD_RPC -DDISABLE_OPENGL -DGL_GLEXT_PROTOTYPES -D__STDC_LIMIT_MACROS -DNO_TTF -DSDL_MAIN_HANDLED)
# Enable scripting
add_definitions(-DENABLE_SCRIPTING)
# Fix SpeexDSP compilation
add_definitions(-DHAVE_STDINT_H)
@ -143,9 +209,12 @@ set(COMMON_COMPILE_OPTIONS "${COMMON_COMPILE_OPTIONS} -fPIC")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++1z ${COMMON_COMPILE_OPTIONS} -Wnon-virtual-dtor")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++20 ${COMMON_COMPILE_OPTIONS} -Wnon-virtual-dtor")
get_filename_component(ORCT2_ROOT "${CMAKE_SOURCE_DIR}/../../../../../" REALPATH)
# Enable char8_t<->char conversion
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-char8_t -Wno-deprecated-declarations")
list(APPEND CMAKE_MODULE_PATH "${ORCT2_ROOT}/cmake")
find_package(CCache)
@ -160,6 +229,7 @@ if (CCache_FOUND)
endif (CCache_FOUND)
file(GLOB_RECURSE LIBOPENRCT2_SOURCES
"${ORCT2_ROOT}/src/thirdparty/duktape/duktape.cpp"
"${ORCT2_ROOT}/src/openrct2/*.cpp"
"${ORCT2_ROOT}/src/openrct2/*.h"
"${ORCT2_ROOT}/src/openrct2/*.hpp")
@ -180,20 +250,20 @@ file(GLOB_RECURSE OPENRCT2_CLI_SOURCES
"${ORCT2_ROOT}/src/openrct2-cli/*.hpp")
add_library(openrct2 SHARED ${LIBOPENRCT2_SOURCES})
target_link_libraries(openrct2 android stdc++ log dl z SDL2 png icu icuuc icudata)# ssl crypto)
target_link_libraries(openrct2 android stdc++ log dl SDL2 png z icu icuuc icudata crypto ssl)
add_library(openrct2-ui SHARED ${OPENRCT2_GUI_SOURCES})
target_link_libraries(openrct2-ui openrct2 android stdc++ GLESv1_CM GLESv2 SDL2main speexdsp)
target_link_libraries(openrct2-ui openrct2 android stdc++ GLESv1_CM GLESv2 SDL2main speexdsp brotlicommon brotlidec bz2 freetype ogg vorbis vorbisfile FLAC)
add_executable(openrct2-cli ${OPENRCT2_CLI_SOURCES})
target_link_libraries(openrct2-cli openrct2 android stdc++ GLESv1_CM GLESv2)
target_include_directories(openrct2 PRIVATE "${ORCT2_ROOT}/src/thirdparty/duktape/")
target_include_directories(openrct2 SYSTEM PRIVATE "${ORCT2_ROOT}/src/thirdparty")
target_include_directories(openrct2-ui PRIVATE "${ORCT2_ROOT}/src/thirdparty/duktape/")
target_include_directories(openrct2-ui PRIVATE "${ORCT2_ROOT}/src")
target_include_directories(openrct2-ui SYSTEM PRIVATE "${ORCT2_ROOT}/src/thirdparty")
target_include_directories(openrct2-cli PRIVATE "${ORCT2_ROOT}/src")
# Header-only nlohmann library is installed in CI images at /nlohmann.
# To be tiny bit more specific, use '/nlohmann/../' instead of just '/'
target_include_directories(openrct2 PRIVATE "/nlohmann/../")
target_include_directories(openrct2-ui PRIVATE "/nlohmann/../")
target_include_directories(openrct2 PRIVATE "/opt/openrct2/include/nlohmann/../")
target_include_directories(openrct2-ui PRIVATE "/opt/openrct2/include/nlohmann/../")

View File

@ -80,8 +80,14 @@ public class GameActivity extends SDLActivity {
return new String[]{
"c++_shared",
"speexdsp",
"bz2",
"freetype",
"z",
"png16",
"SDL2-2.0",
"SDL2",
"icudata",
"icuuc",
"icui18n",
"openrct2",
"openrct2-ui"

View File

@ -0,0 +1,122 @@
package io.openrct2;
import android.util.Log;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.HttpURLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HttpAndroid {
private static final String TAG = "HttpAndroid";
// Corresponding Java enum for the C++ 'Status' enum
public enum Status {
Invalid(0),
Ok(200),
NotFound(404);
private final int code;
Status(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
// Corresponding Java enum for the C++ 'Method' enum
public enum Method {
GET,
POST,
PUT
}
// Java class equivalent to the C++ 'Response' struct
public static class Response {
Status status;
String contentType;
String body;
Map<String, List<String>> headers;
String error;
}
// Java class equivalent to the C++ 'Request' struct
public static class Request {
String url;
Map<String, String> headers;
Method method;
String body;
boolean forceIPv4;
public Request() {
this.method = Method.GET; // Default method
}
}
public static Response request(Request request) {
Response response = new Response();
response.status = Status.Invalid;
response.error = "Request failed";
try {
InputStream inputStream = null;
try {
URL url = new URL(request.url);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(request.method.toString());
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(true);
if (request.headers != null) {
for (Map.Entry<String, String> entry : request.headers.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
}
connection.connect();
if (request.body!= null) {
OutputStream os = connection.getOutputStream();
os.write(request.body.getBytes());
os.flush();
os.close();
}
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
inputStream = connection.getInputStream();
} else {
inputStream = connection.getErrorStream();
}
// Log
Log.d(TAG, "Request: " + request.url + ", response code: " + responseCode);
response.status = Status.Ok;
response.contentType = connection.getContentType();
response.headers = connection.getHeaderFields();
response.body = IOUtils.toString(inputStream, "UTF-8");
response.error = null;
return response;
} catch (IOException e) {
Log.e(TAG, "Error while requesting " + request.url + ", error: " + e.getMessage(), e);
response.error = e.getMessage();
return response;
} finally {
if (inputStream != null) {
inputStream.close();
}
}
} catch (IOException e) {
Log.e(TAG, "Error while requesting " + request.url, e);
response.error = e.getMessage();
return response;
}
}
}

View File

@ -0,0 +1,22 @@
package org.libsdl.app;
import android.hardware.usb.UsbDevice;
interface HIDDevice
{
public int getId();
public int getVendorId();
public int getProductId();
public String getSerialNumber();
public int getVersion();
public String getManufacturerName();
public String getProductName();
public UsbDevice getDevice();
public boolean open();
public int sendFeatureReport(byte[] report);
public int sendOutputReport(byte[] report);
public boolean getFeatureReport(byte[] report);
public void setFrozen(boolean frozen);
public void close();
public void shutdown();
}

View File

@ -0,0 +1,650 @@
package org.libsdl.app;
import android.content.Context;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothGattService;
import android.hardware.usb.UsbDevice;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.os.*;
//import com.android.internal.util.HexDump;
import java.lang.Runnable;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.UUID;
class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDevice {
private static final String TAG = "hidapi";
private HIDDeviceManager mManager;
private BluetoothDevice mDevice;
private int mDeviceId;
private BluetoothGatt mGatt;
private boolean mIsRegistered = false;
private boolean mIsConnected = false;
private boolean mIsChromebook = false;
private boolean mIsReconnecting = false;
private boolean mFrozen = false;
private LinkedList<GattOperation> mOperations;
GattOperation mCurrentOperation = null;
private Handler mHandler;
private static final int TRANSPORT_AUTO = 0;
private static final int TRANSPORT_BREDR = 1;
private static final int TRANSPORT_LE = 2;
private static final int CHROMEBOOK_CONNECTION_CHECK_INTERVAL = 10000;
static public final UUID steamControllerService = UUID.fromString("100F6C32-1735-4313-B402-38567131E5F3");
static public final UUID inputCharacteristic = UUID.fromString("100F6C33-1735-4313-B402-38567131E5F3");
static public final UUID reportCharacteristic = UUID.fromString("100F6C34-1735-4313-B402-38567131E5F3");
static private final byte[] enterValveMode = new byte[] { (byte)0xC0, (byte)0x87, 0x03, 0x08, 0x07, 0x00 };
static class GattOperation {
private enum Operation {
CHR_READ,
CHR_WRITE,
ENABLE_NOTIFICATION
}
Operation mOp;
UUID mUuid;
byte[] mValue;
BluetoothGatt mGatt;
boolean mResult = true;
private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid) {
mGatt = gatt;
mOp = operation;
mUuid = uuid;
}
private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid, byte[] value) {
mGatt = gatt;
mOp = operation;
mUuid = uuid;
mValue = value;
}
public void run() {
// This is executed in main thread
BluetoothGattCharacteristic chr;
switch (mOp) {
case CHR_READ:
chr = getCharacteristic(mUuid);
//Log.v(TAG, "Reading characteristic " + chr.getUuid());
if (!mGatt.readCharacteristic(chr)) {
Log.e(TAG, "Unable to read characteristic " + mUuid.toString());
mResult = false;
break;
}
mResult = true;
break;
case CHR_WRITE:
chr = getCharacteristic(mUuid);
//Log.v(TAG, "Writing characteristic " + chr.getUuid() + " value=" + HexDump.toHexString(value));
chr.setValue(mValue);
if (!mGatt.writeCharacteristic(chr)) {
Log.e(TAG, "Unable to write characteristic " + mUuid.toString());
mResult = false;
break;
}
mResult = true;
break;
case ENABLE_NOTIFICATION:
chr = getCharacteristic(mUuid);
//Log.v(TAG, "Writing descriptor of " + chr.getUuid());
if (chr != null) {
BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
if (cccd != null) {
int properties = chr.getProperties();
byte[] value;
if ((properties & BluetoothGattCharacteristic.PROPERTY_NOTIFY) == BluetoothGattCharacteristic.PROPERTY_NOTIFY) {
value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE;
} else if ((properties & BluetoothGattCharacteristic.PROPERTY_INDICATE) == BluetoothGattCharacteristic.PROPERTY_INDICATE) {
value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE;
} else {
Log.e(TAG, "Unable to start notifications on input characteristic");
mResult = false;
return;
}
mGatt.setCharacteristicNotification(chr, true);
cccd.setValue(value);
if (!mGatt.writeDescriptor(cccd)) {
Log.e(TAG, "Unable to write descriptor " + mUuid.toString());
mResult = false;
return;
}
mResult = true;
}
}
}
}
public boolean finish() {
return mResult;
}
private BluetoothGattCharacteristic getCharacteristic(UUID uuid) {
BluetoothGattService valveService = mGatt.getService(steamControllerService);
if (valveService == null)
return null;
return valveService.getCharacteristic(uuid);
}
static public GattOperation readCharacteristic(BluetoothGatt gatt, UUID uuid) {
return new GattOperation(gatt, Operation.CHR_READ, uuid);
}
static public GattOperation writeCharacteristic(BluetoothGatt gatt, UUID uuid, byte[] value) {
return new GattOperation(gatt, Operation.CHR_WRITE, uuid, value);
}
static public GattOperation enableNotification(BluetoothGatt gatt, UUID uuid) {
return new GattOperation(gatt, Operation.ENABLE_NOTIFICATION, uuid);
}
}
public HIDDeviceBLESteamController(HIDDeviceManager manager, BluetoothDevice device) {
mManager = manager;
mDevice = device;
mDeviceId = mManager.getDeviceIDForIdentifier(getIdentifier());
mIsRegistered = false;
mIsChromebook = mManager.getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
mOperations = new LinkedList<GattOperation>();
mHandler = new Handler(Looper.getMainLooper());
mGatt = connectGatt();
// final HIDDeviceBLESteamController finalThis = this;
// mHandler.postDelayed(new Runnable() {
// @Override
// public void run() {
// finalThis.checkConnectionForChromebookIssue();
// }
// }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
}
public String getIdentifier() {
return String.format("SteamController.%s", mDevice.getAddress());
}
public BluetoothGatt getGatt() {
return mGatt;
}
// Because on Chromebooks we show up as a dual-mode device, it will attempt to connect TRANSPORT_AUTO, which will use TRANSPORT_BREDR instead
// of TRANSPORT_LE. Let's force ourselves to connect low energy.
private BluetoothGatt connectGatt(boolean managed) {
if (Build.VERSION.SDK_INT >= 23 /* Android 6.0 (M) */) {
try {
return mDevice.connectGatt(mManager.getContext(), managed, this, TRANSPORT_LE);
} catch (Exception e) {
return mDevice.connectGatt(mManager.getContext(), managed, this);
}
} else {
return mDevice.connectGatt(mManager.getContext(), managed, this);
}
}
private BluetoothGatt connectGatt() {
return connectGatt(false);
}
protected int getConnectionState() {
Context context = mManager.getContext();
if (context == null) {
// We are lacking any context to get our Bluetooth information. We'll just assume disconnected.
return BluetoothProfile.STATE_DISCONNECTED;
}
BluetoothManager btManager = (BluetoothManager)context.getSystemService(Context.BLUETOOTH_SERVICE);
if (btManager == null) {
// This device doesn't support Bluetooth. We should never be here, because how did
// we instantiate a device to start with?
return BluetoothProfile.STATE_DISCONNECTED;
}
return btManager.getConnectionState(mDevice, BluetoothProfile.GATT);
}
public void reconnect() {
if (getConnectionState() != BluetoothProfile.STATE_CONNECTED) {
mGatt.disconnect();
mGatt = connectGatt();
}
}
protected void checkConnectionForChromebookIssue() {
if (!mIsChromebook) {
// We only do this on Chromebooks, because otherwise it's really annoying to just attempt
// over and over.
return;
}
int connectionState = getConnectionState();
switch (connectionState) {
case BluetoothProfile.STATE_CONNECTED:
if (!mIsConnected) {
// We are in the Bad Chromebook Place. We can force a disconnect
// to try to recover.
Log.v(TAG, "Chromebook: We are in a very bad state; the controller shows as connected in the underlying Bluetooth layer, but we never received a callback. Forcing a reconnect.");
mIsReconnecting = true;
mGatt.disconnect();
mGatt = connectGatt(false);
break;
}
else if (!isRegistered()) {
if (mGatt.getServices().size() > 0) {
Log.v(TAG, "Chromebook: We are connected to a controller, but never got our registration. Trying to recover.");
probeService(this);
}
else {
Log.v(TAG, "Chromebook: We are connected to a controller, but never discovered services. Trying to recover.");
mIsReconnecting = true;
mGatt.disconnect();
mGatt = connectGatt(false);
break;
}
}
else {
Log.v(TAG, "Chromebook: We are connected, and registered. Everything's good!");
return;
}
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.v(TAG, "Chromebook: We have either been disconnected, or the Chromebook BtGatt.ContextMap bug has bitten us. Attempting a disconnect/reconnect, but we may not be able to recover.");
mIsReconnecting = true;
mGatt.disconnect();
mGatt = connectGatt(false);
break;
case BluetoothProfile.STATE_CONNECTING:
Log.v(TAG, "Chromebook: We're still trying to connect. Waiting a bit longer.");
break;
}
final HIDDeviceBLESteamController finalThis = this;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
finalThis.checkConnectionForChromebookIssue();
}
}, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
}
private boolean isRegistered() {
return mIsRegistered;
}
private void setRegistered() {
mIsRegistered = true;
}
private boolean probeService(HIDDeviceBLESteamController controller) {
if (isRegistered()) {
return true;
}
if (!mIsConnected) {
return false;
}
Log.v(TAG, "probeService controller=" + controller);
for (BluetoothGattService service : mGatt.getServices()) {
if (service.getUuid().equals(steamControllerService)) {
Log.v(TAG, "Found Valve steam controller service " + service.getUuid());
for (BluetoothGattCharacteristic chr : service.getCharacteristics()) {
if (chr.getUuid().equals(inputCharacteristic)) {
Log.v(TAG, "Found input characteristic");
// Start notifications
BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
if (cccd != null) {
enableNotification(chr.getUuid());
}
}
}
return true;
}
}
if ((mGatt.getServices().size() == 0) && mIsChromebook && !mIsReconnecting) {
Log.e(TAG, "Chromebook: Discovered services were empty; this almost certainly means the BtGatt.ContextMap bug has bitten us.");
mIsConnected = false;
mIsReconnecting = true;
mGatt.disconnect();
mGatt = connectGatt(false);
}
return false;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
private void finishCurrentGattOperation() {
GattOperation op = null;
synchronized (mOperations) {
if (mCurrentOperation != null) {
op = mCurrentOperation;
mCurrentOperation = null;
}
}
if (op != null) {
boolean result = op.finish(); // TODO: Maybe in main thread as well?
// Our operation failed, let's add it back to the beginning of our queue.
if (!result) {
mOperations.addFirst(op);
}
}
executeNextGattOperation();
}
private void executeNextGattOperation() {
synchronized (mOperations) {
if (mCurrentOperation != null)
return;
if (mOperations.isEmpty())
return;
mCurrentOperation = mOperations.removeFirst();
}
// Run in main thread
mHandler.post(new Runnable() {
@Override
public void run() {
synchronized (mOperations) {
if (mCurrentOperation == null) {
Log.e(TAG, "Current operation null in executor?");
return;
}
mCurrentOperation.run();
// now wait for the GATT callback and when it comes, finish this operation
}
}
});
}
private void queueGattOperation(GattOperation op) {
synchronized (mOperations) {
mOperations.add(op);
}
executeNextGattOperation();
}
private void enableNotification(UUID chrUuid) {
GattOperation op = HIDDeviceBLESteamController.GattOperation.enableNotification(mGatt, chrUuid);
queueGattOperation(op);
}
public void writeCharacteristic(UUID uuid, byte[] value) {
GattOperation op = HIDDeviceBLESteamController.GattOperation.writeCharacteristic(mGatt, uuid, value);
queueGattOperation(op);
}
public void readCharacteristic(UUID uuid) {
GattOperation op = HIDDeviceBLESteamController.GattOperation.readCharacteristic(mGatt, uuid);
queueGattOperation(op);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
////////////// BluetoothGattCallback overridden methods
//////////////////////////////////////////////////////////////////////////////////////////////////////
public void onConnectionStateChange(BluetoothGatt g, int status, int newState) {
//Log.v(TAG, "onConnectionStateChange status=" + status + " newState=" + newState);
mIsReconnecting = false;
if (newState == 2) {
mIsConnected = true;
// Run directly, without GattOperation
if (!isRegistered()) {
mHandler.post(new Runnable() {
@Override
public void run() {
mGatt.discoverServices();
}
});
}
}
else if (newState == 0) {
mIsConnected = false;
}
// Disconnection is handled in SteamLink using the ACTION_ACL_DISCONNECTED Intent.
}
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
//Log.v(TAG, "onServicesDiscovered status=" + status);
if (status == 0) {
if (gatt.getServices().size() == 0) {
Log.v(TAG, "onServicesDiscovered returned zero services; something has gone horribly wrong down in Android's Bluetooth stack.");
mIsReconnecting = true;
mIsConnected = false;
gatt.disconnect();
mGatt = connectGatt(false);
}
else {
probeService(this);
}
}
}
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
//Log.v(TAG, "onCharacteristicRead status=" + status + " uuid=" + characteristic.getUuid());
if (characteristic.getUuid().equals(reportCharacteristic) && !mFrozen) {
mManager.HIDDeviceFeatureReport(getId(), characteristic.getValue());
}
finishCurrentGattOperation();
}
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
//Log.v(TAG, "onCharacteristicWrite status=" + status + " uuid=" + characteristic.getUuid());
if (characteristic.getUuid().equals(reportCharacteristic)) {
// Only register controller with the native side once it has been fully configured
if (!isRegistered()) {
Log.v(TAG, "Registering Steam Controller with ID: " + getId());
mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0);
setRegistered();
}
}
finishCurrentGattOperation();
}
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
// Enable this for verbose logging of controller input reports
//Log.v(TAG, "onCharacteristicChanged uuid=" + characteristic.getUuid() + " data=" + HexDump.dumpHexString(characteristic.getValue()));
if (characteristic.getUuid().equals(inputCharacteristic) && !mFrozen) {
mManager.HIDDeviceInputReport(getId(), characteristic.getValue());
}
}
public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
//Log.v(TAG, "onDescriptorRead status=" + status);
}
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
BluetoothGattCharacteristic chr = descriptor.getCharacteristic();
//Log.v(TAG, "onDescriptorWrite status=" + status + " uuid=" + chr.getUuid() + " descriptor=" + descriptor.getUuid());
if (chr.getUuid().equals(inputCharacteristic)) {
boolean hasWrittenInputDescriptor = true;
BluetoothGattCharacteristic reportChr = chr.getService().getCharacteristic(reportCharacteristic);
if (reportChr != null) {
Log.v(TAG, "Writing report characteristic to enter valve mode");
reportChr.setValue(enterValveMode);
gatt.writeCharacteristic(reportChr);
}
}
finishCurrentGattOperation();
}
public void onReliableWriteCompleted(BluetoothGatt gatt, int status) {
//Log.v(TAG, "onReliableWriteCompleted status=" + status);
}
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
//Log.v(TAG, "onReadRemoteRssi status=" + status);
}
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
//Log.v(TAG, "onMtuChanged status=" + status);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////// Public API
//////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public int getId() {
return mDeviceId;
}
@Override
public int getVendorId() {
// Valve Corporation
final int VALVE_USB_VID = 0x28DE;
return VALVE_USB_VID;
}
@Override
public int getProductId() {
// We don't have an easy way to query from the Bluetooth device, but we know what it is
final int D0G_BLE2_PID = 0x1106;
return D0G_BLE2_PID;
}
@Override
public String getSerialNumber() {
// This will be read later via feature report by Steam
return "12345";
}
@Override
public int getVersion() {
return 0;
}
@Override
public String getManufacturerName() {
return "Valve Corporation";
}
@Override
public String getProductName() {
return "Steam Controller";
}
@Override
public UsbDevice getDevice() {
return null;
}
@Override
public boolean open() {
return true;
}
@Override
public int sendFeatureReport(byte[] report) {
if (!isRegistered()) {
Log.e(TAG, "Attempted sendFeatureReport before Steam Controller is registered!");
if (mIsConnected) {
probeService(this);
}
return -1;
}
// We need to skip the first byte, as that doesn't go over the air
byte[] actual_report = Arrays.copyOfRange(report, 1, report.length - 1);
//Log.v(TAG, "sendFeatureReport " + HexDump.dumpHexString(actual_report));
writeCharacteristic(reportCharacteristic, actual_report);
return report.length;
}
@Override
public int sendOutputReport(byte[] report) {
if (!isRegistered()) {
Log.e(TAG, "Attempted sendOutputReport before Steam Controller is registered!");
if (mIsConnected) {
probeService(this);
}
return -1;
}
//Log.v(TAG, "sendFeatureReport " + HexDump.dumpHexString(report));
writeCharacteristic(reportCharacteristic, report);
return report.length;
}
@Override
public boolean getFeatureReport(byte[] report) {
if (!isRegistered()) {
Log.e(TAG, "Attempted getFeatureReport before Steam Controller is registered!");
if (mIsConnected) {
probeService(this);
}
return false;
}
//Log.v(TAG, "getFeatureReport");
readCharacteristic(reportCharacteristic);
return true;
}
@Override
public void close() {
}
@Override
public void setFrozen(boolean frozen) {
mFrozen = frozen;
}
@Override
public void shutdown() {
close();
BluetoothGatt g = mGatt;
if (g != null) {
g.disconnect();
g.close();
mGatt = null;
}
mManager = null;
mIsRegistered = false;
mIsConnected = false;
mOperations.clear();
}
}

View File

@ -0,0 +1,691 @@
package org.libsdl.app;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.os.Build;
import android.util.Log;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.hardware.usb.*;
import android.os.Handler;
import android.os.Looper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class HIDDeviceManager {
private static final String TAG = "hidapi";
private static final String ACTION_USB_PERMISSION = "org.libsdl.app.USB_PERMISSION";
private static HIDDeviceManager sManager;
private static int sManagerRefCount = 0;
public static HIDDeviceManager acquire(Context context) {
if (sManagerRefCount == 0) {
sManager = new HIDDeviceManager(context);
}
++sManagerRefCount;
return sManager;
}
public static void release(HIDDeviceManager manager) {
if (manager == sManager) {
--sManagerRefCount;
if (sManagerRefCount == 0) {
sManager.close();
sManager = null;
}
}
}
private Context mContext;
private HashMap<Integer, HIDDevice> mDevicesById = new HashMap<Integer, HIDDevice>();
private HashMap<BluetoothDevice, HIDDeviceBLESteamController> mBluetoothDevices = new HashMap<BluetoothDevice, HIDDeviceBLESteamController>();
private int mNextDeviceId = 0;
private SharedPreferences mSharedPreferences = null;
private boolean mIsChromebook = false;
private UsbManager mUsbManager;
private Handler mHandler;
private BluetoothManager mBluetoothManager;
private List<BluetoothDevice> mLastBluetoothDevices;
private final BroadcastReceiver mUsbBroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
handleUsbDeviceAttached(usbDevice);
} else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
handleUsbDeviceDetached(usbDevice);
} else if (action.equals(HIDDeviceManager.ACTION_USB_PERMISSION)) {
UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
handleUsbDevicePermission(usbDevice, intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false));
}
}
};
private final BroadcastReceiver mBluetoothBroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// Bluetooth device was connected. If it was a Steam Controller, handle it
if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.d(TAG, "Bluetooth device connected: " + device);
if (isSteamController(device)) {
connectBluetoothDevice(device);
}
}
// Bluetooth device was disconnected, remove from controller manager (if any)
if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.d(TAG, "Bluetooth device disconnected: " + device);
disconnectBluetoothDevice(device);
}
}
};
private HIDDeviceManager(final Context context) {
mContext = context;
HIDDeviceRegisterCallback();
mSharedPreferences = mContext.getSharedPreferences("hidapi", Context.MODE_PRIVATE);
mIsChromebook = mContext.getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
// if (shouldClear) {
// SharedPreferences.Editor spedit = mSharedPreferences.edit();
// spedit.clear();
// spedit.commit();
// }
// else
{
mNextDeviceId = mSharedPreferences.getInt("next_device_id", 0);
}
}
public Context getContext() {
return mContext;
}
public int getDeviceIDForIdentifier(String identifier) {
SharedPreferences.Editor spedit = mSharedPreferences.edit();
int result = mSharedPreferences.getInt(identifier, 0);
if (result == 0) {
result = mNextDeviceId++;
spedit.putInt("next_device_id", mNextDeviceId);
}
spedit.putInt(identifier, result);
spedit.commit();
return result;
}
private void initializeUSB() {
mUsbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);
if (mUsbManager == null) {
return;
}
/*
// Logging
for (UsbDevice device : mUsbManager.getDeviceList().values()) {
Log.i(TAG,"Path: " + device.getDeviceName());
Log.i(TAG,"Manufacturer: " + device.getManufacturerName());
Log.i(TAG,"Product: " + device.getProductName());
Log.i(TAG,"ID: " + device.getDeviceId());
Log.i(TAG,"Class: " + device.getDeviceClass());
Log.i(TAG,"Protocol: " + device.getDeviceProtocol());
Log.i(TAG,"Vendor ID " + device.getVendorId());
Log.i(TAG,"Product ID: " + device.getProductId());
Log.i(TAG,"Interface count: " + device.getInterfaceCount());
Log.i(TAG,"---------------------------------------");
// Get interface details
for (int index = 0; index < device.getInterfaceCount(); index++) {
UsbInterface mUsbInterface = device.getInterface(index);
Log.i(TAG," ***** *****");
Log.i(TAG," Interface index: " + index);
Log.i(TAG," Interface ID: " + mUsbInterface.getId());
Log.i(TAG," Interface class: " + mUsbInterface.getInterfaceClass());
Log.i(TAG," Interface subclass: " + mUsbInterface.getInterfaceSubclass());
Log.i(TAG," Interface protocol: " + mUsbInterface.getInterfaceProtocol());
Log.i(TAG," Endpoint count: " + mUsbInterface.getEndpointCount());
// Get endpoint details
for (int epi = 0; epi < mUsbInterface.getEndpointCount(); epi++)
{
UsbEndpoint mEndpoint = mUsbInterface.getEndpoint(epi);
Log.i(TAG," ++++ ++++ ++++");
Log.i(TAG," Endpoint index: " + epi);
Log.i(TAG," Attributes: " + mEndpoint.getAttributes());
Log.i(TAG," Direction: " + mEndpoint.getDirection());
Log.i(TAG," Number: " + mEndpoint.getEndpointNumber());
Log.i(TAG," Interval: " + mEndpoint.getInterval());
Log.i(TAG," Packet size: " + mEndpoint.getMaxPacketSize());
Log.i(TAG," Type: " + mEndpoint.getType());
}
}
}
Log.i(TAG," No more devices connected.");
*/
// Register for USB broadcasts and permission completions
IntentFilter filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
filter.addAction(HIDDeviceManager.ACTION_USB_PERMISSION);
mContext.registerReceiver(mUsbBroadcast, filter);
for (UsbDevice usbDevice : mUsbManager.getDeviceList().values()) {
handleUsbDeviceAttached(usbDevice);
}
}
UsbManager getUSBManager() {
return mUsbManager;
}
private void shutdownUSB() {
try {
mContext.unregisterReceiver(mUsbBroadcast);
} catch (Exception e) {
// We may not have registered, that's okay
}
}
private boolean isHIDDeviceInterface(UsbDevice usbDevice, UsbInterface usbInterface) {
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_HID) {
return true;
}
if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) {
return true;
}
return false;
}
private boolean isXbox360Controller(UsbDevice usbDevice, UsbInterface usbInterface) {
final int XB360_IFACE_SUBCLASS = 93;
final int XB360_IFACE_PROTOCOL = 1; // Wired
final int XB360W_IFACE_PROTOCOL = 129; // Wireless
final int[] SUPPORTED_VENDORS = {
0x0079, // GPD Win 2
0x044f, // Thrustmaster
0x045e, // Microsoft
0x046d, // Logitech
0x056e, // Elecom
0x06a3, // Saitek
0x0738, // Mad Catz
0x07ff, // Mad Catz
0x0e6f, // PDP
0x0f0d, // Hori
0x1038, // SteelSeries
0x11c9, // Nacon
0x12ab, // Unknown
0x1430, // RedOctane
0x146b, // BigBen
0x1532, // Razer Sabertooth
0x15e4, // Numark
0x162e, // Joytech
0x1689, // Razer Onza
0x1949, // Lab126, Inc.
0x1bad, // Harmonix
0x20d6, // PowerA
0x24c6, // PowerA
0x2c22, // Qanba
0x2dc8, // 8BitDo
0x9886, // ASTRO Gaming
};
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
usbInterface.getInterfaceSubclass() == XB360_IFACE_SUBCLASS &&
(usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL ||
usbInterface.getInterfaceProtocol() == XB360W_IFACE_PROTOCOL)) {
int vendor_id = usbDevice.getVendorId();
for (int supportedVid : SUPPORTED_VENDORS) {
if (vendor_id == supportedVid) {
return true;
}
}
}
return false;
}
private boolean isXboxOneController(UsbDevice usbDevice, UsbInterface usbInterface) {
final int XB1_IFACE_SUBCLASS = 71;
final int XB1_IFACE_PROTOCOL = 208;
final int[] SUPPORTED_VENDORS = {
0x03f0, // HP
0x044f, // Thrustmaster
0x045e, // Microsoft
0x0738, // Mad Catz
0x0e6f, // PDP
0x0f0d, // Hori
0x10f5, // Turtle Beach
0x1532, // Razer Wildcat
0x20d6, // PowerA
0x24c6, // PowerA
0x2dc8, // 8BitDo
0x2e24, // Hyperkin
0x3537, // GameSir
};
if (usbInterface.getId() == 0 &&
usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
usbInterface.getInterfaceSubclass() == XB1_IFACE_SUBCLASS &&
usbInterface.getInterfaceProtocol() == XB1_IFACE_PROTOCOL) {
int vendor_id = usbDevice.getVendorId();
for (int supportedVid : SUPPORTED_VENDORS) {
if (vendor_id == supportedVid) {
return true;
}
}
}
return false;
}
private void handleUsbDeviceAttached(UsbDevice usbDevice) {
connectHIDDeviceUSB(usbDevice);
}
private void handleUsbDeviceDetached(UsbDevice usbDevice) {
List<Integer> devices = new ArrayList<Integer>();
for (HIDDevice device : mDevicesById.values()) {
if (usbDevice.equals(device.getDevice())) {
devices.add(device.getId());
}
}
for (int id : devices) {
HIDDevice device = mDevicesById.get(id);
mDevicesById.remove(id);
device.shutdown();
HIDDeviceDisconnected(id);
}
}
private void handleUsbDevicePermission(UsbDevice usbDevice, boolean permission_granted) {
for (HIDDevice device : mDevicesById.values()) {
if (usbDevice.equals(device.getDevice())) {
boolean opened = false;
if (permission_granted) {
opened = device.open();
}
HIDDeviceOpenResult(device.getId(), opened);
}
}
}
private void connectHIDDeviceUSB(UsbDevice usbDevice) {
synchronized (this) {
int interface_mask = 0;
for (int interface_index = 0; interface_index < usbDevice.getInterfaceCount(); interface_index++) {
UsbInterface usbInterface = usbDevice.getInterface(interface_index);
if (isHIDDeviceInterface(usbDevice, usbInterface)) {
// Check to see if we've already added this interface
// This happens with the Xbox Series X controller which has a duplicate interface 0, which is inactive
int interface_id = usbInterface.getId();
if ((interface_mask & (1 << interface_id)) != 0) {
continue;
}
interface_mask |= (1 << interface_id);
HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_index);
int id = device.getId();
mDevicesById.put(id, device);
HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol());
}
}
}
}
private void initializeBluetooth() {
Log.d(TAG, "Initializing Bluetooth");
if (Build.VERSION.SDK_INT >= 31 /* Android 12 */ &&
mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH_CONNECT, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH_CONNECT");
return;
}
if (Build.VERSION.SDK_INT <= 30 /* Android 11.0 (R) */ &&
mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH");
return;
}
if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE) || (Build.VERSION.SDK_INT < 18 /* Android 4.3 (JELLY_BEAN_MR2) */)) {
Log.d(TAG, "Couldn't initialize Bluetooth, this version of Android does not support Bluetooth LE");
return;
}
// Find bonded bluetooth controllers and create SteamControllers for them
mBluetoothManager = (BluetoothManager)mContext.getSystemService(Context.BLUETOOTH_SERVICE);
if (mBluetoothManager == null) {
// This device doesn't support Bluetooth.
return;
}
BluetoothAdapter btAdapter = mBluetoothManager.getAdapter();
if (btAdapter == null) {
// This device has Bluetooth support in the codebase, but has no available adapters.
return;
}
// Get our bonded devices.
for (BluetoothDevice device : btAdapter.getBondedDevices()) {
Log.d(TAG, "Bluetooth device available: " + device);
if (isSteamController(device)) {
connectBluetoothDevice(device);
}
}
// NOTE: These don't work on Chromebooks, to my undying dismay.
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
mContext.registerReceiver(mBluetoothBroadcast, filter);
if (mIsChromebook) {
mHandler = new Handler(Looper.getMainLooper());
mLastBluetoothDevices = new ArrayList<BluetoothDevice>();
// final HIDDeviceManager finalThis = this;
// mHandler.postDelayed(new Runnable() {
// @Override
// public void run() {
// finalThis.chromebookConnectionHandler();
// }
// }, 5000);
}
}
private void shutdownBluetooth() {
try {
mContext.unregisterReceiver(mBluetoothBroadcast);
} catch (Exception e) {
// We may not have registered, that's okay
}
}
// Chromebooks do not pass along ACTION_ACL_CONNECTED / ACTION_ACL_DISCONNECTED properly.
// This function provides a sort of dummy version of that, watching for changes in the
// connected devices and attempting to add controllers as things change.
public void chromebookConnectionHandler() {
if (!mIsChromebook) {
return;
}
ArrayList<BluetoothDevice> disconnected = new ArrayList<BluetoothDevice>();
ArrayList<BluetoothDevice> connected = new ArrayList<BluetoothDevice>();
List<BluetoothDevice> currentConnected = mBluetoothManager.getConnectedDevices(BluetoothProfile.GATT);
for (BluetoothDevice bluetoothDevice : currentConnected) {
if (!mLastBluetoothDevices.contains(bluetoothDevice)) {
connected.add(bluetoothDevice);
}
}
for (BluetoothDevice bluetoothDevice : mLastBluetoothDevices) {
if (!currentConnected.contains(bluetoothDevice)) {
disconnected.add(bluetoothDevice);
}
}
mLastBluetoothDevices = currentConnected;
for (BluetoothDevice bluetoothDevice : disconnected) {
disconnectBluetoothDevice(bluetoothDevice);
}
for (BluetoothDevice bluetoothDevice : connected) {
connectBluetoothDevice(bluetoothDevice);
}
final HIDDeviceManager finalThis = this;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
finalThis.chromebookConnectionHandler();
}
}, 10000);
}
public boolean connectBluetoothDevice(BluetoothDevice bluetoothDevice) {
Log.v(TAG, "connectBluetoothDevice device=" + bluetoothDevice);
synchronized (this) {
if (mBluetoothDevices.containsKey(bluetoothDevice)) {
Log.v(TAG, "Steam controller with address " + bluetoothDevice + " already exists, attempting reconnect");
HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice);
device.reconnect();
return false;
}
HIDDeviceBLESteamController device = new HIDDeviceBLESteamController(this, bluetoothDevice);
int id = device.getId();
mBluetoothDevices.put(bluetoothDevice, device);
mDevicesById.put(id, device);
// The Steam Controller will mark itself connected once initialization is complete
}
return true;
}
public void disconnectBluetoothDevice(BluetoothDevice bluetoothDevice) {
synchronized (this) {
HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice);
if (device == null)
return;
int id = device.getId();
mBluetoothDevices.remove(bluetoothDevice);
mDevicesById.remove(id);
device.shutdown();
HIDDeviceDisconnected(id);
}
}
public boolean isSteamController(BluetoothDevice bluetoothDevice) {
// Sanity check. If you pass in a null device, by definition it is never a Steam Controller.
if (bluetoothDevice == null) {
return false;
}
// If the device has no local name, we really don't want to try an equality check against it.
if (bluetoothDevice.getName() == null) {
return false;
}
return bluetoothDevice.getName().equals("SteamController") && ((bluetoothDevice.getType() & BluetoothDevice.DEVICE_TYPE_LE) != 0);
}
private void close() {
shutdownUSB();
shutdownBluetooth();
synchronized (this) {
for (HIDDevice device : mDevicesById.values()) {
device.shutdown();
}
mDevicesById.clear();
mBluetoothDevices.clear();
HIDDeviceReleaseCallback();
}
}
public void setFrozen(boolean frozen) {
synchronized (this) {
for (HIDDevice device : mDevicesById.values()) {
device.setFrozen(frozen);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
private HIDDevice getDevice(int id) {
synchronized (this) {
HIDDevice result = mDevicesById.get(id);
if (result == null) {
Log.v(TAG, "No device for id: " + id);
Log.v(TAG, "Available devices: " + mDevicesById.keySet());
}
return result;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
////////// JNI interface functions
//////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean initialize(boolean usb, boolean bluetooth) {
Log.v(TAG, "initialize(" + usb + ", " + bluetooth + ")");
if (usb) {
initializeUSB();
}
if (bluetooth) {
initializeBluetooth();
}
return true;
}
public boolean openDevice(int deviceID) {
Log.v(TAG, "openDevice deviceID=" + deviceID);
HIDDevice device = getDevice(deviceID);
if (device == null) {
HIDDeviceDisconnected(deviceID);
return false;
}
// Look to see if this is a USB device and we have permission to access it
UsbDevice usbDevice = device.getDevice();
if (usbDevice != null && !mUsbManager.hasPermission(usbDevice)) {
HIDDeviceOpenPending(deviceID);
try {
final int FLAG_MUTABLE = 0x02000000; // PendingIntent.FLAG_MUTABLE, but don't require SDK 31
int flags;
if (Build.VERSION.SDK_INT >= 31 /* Android 12.0 (S) */) {
flags = FLAG_MUTABLE;
} else {
flags = 0;
}
mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags));
} catch (Exception e) {
Log.v(TAG, "Couldn't request permission for USB device " + usbDevice);
HIDDeviceOpenResult(deviceID, false);
}
return false;
}
try {
return device.open();
} catch (Exception e) {
Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
}
return false;
}
public int sendOutputReport(int deviceID, byte[] report) {
try {
//Log.v(TAG, "sendOutputReport deviceID=" + deviceID + " length=" + report.length);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
HIDDeviceDisconnected(deviceID);
return -1;
}
return device.sendOutputReport(report);
} catch (Exception e) {
Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
}
return -1;
}
public int sendFeatureReport(int deviceID, byte[] report) {
try {
//Log.v(TAG, "sendFeatureReport deviceID=" + deviceID + " length=" + report.length);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
HIDDeviceDisconnected(deviceID);
return -1;
}
return device.sendFeatureReport(report);
} catch (Exception e) {
Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
}
return -1;
}
public boolean getFeatureReport(int deviceID, byte[] report) {
try {
//Log.v(TAG, "getFeatureReport deviceID=" + deviceID);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
HIDDeviceDisconnected(deviceID);
return false;
}
return device.getFeatureReport(report);
} catch (Exception e) {
Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
}
return false;
}
public void closeDevice(int deviceID) {
try {
Log.v(TAG, "closeDevice deviceID=" + deviceID);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
HIDDeviceDisconnected(deviceID);
return;
}
device.close();
} catch (Exception e) {
Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////// Native methods
//////////////////////////////////////////////////////////////////////////////////////////////////////
private native void HIDDeviceRegisterCallback();
private native void HIDDeviceReleaseCallback();
native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol);
native void HIDDeviceOpenPending(int deviceID);
native void HIDDeviceOpenResult(int deviceID, boolean opened);
native void HIDDeviceDisconnected(int deviceID);
native void HIDDeviceInputReport(int deviceID, byte[] report);
native void HIDDeviceFeatureReport(int deviceID, byte[] report);
}

View File

@ -0,0 +1,309 @@
package org.libsdl.app;
import android.hardware.usb.*;
import android.os.Build;
import android.util.Log;
import java.util.Arrays;
class HIDDeviceUSB implements HIDDevice {
private static final String TAG = "hidapi";
protected HIDDeviceManager mManager;
protected UsbDevice mDevice;
protected int mInterfaceIndex;
protected int mInterface;
protected int mDeviceId;
protected UsbDeviceConnection mConnection;
protected UsbEndpoint mInputEndpoint;
protected UsbEndpoint mOutputEndpoint;
protected InputThread mInputThread;
protected boolean mRunning;
protected boolean mFrozen;
public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_index) {
mManager = manager;
mDevice = usbDevice;
mInterfaceIndex = interface_index;
mInterface = mDevice.getInterface(mInterfaceIndex).getId();
mDeviceId = manager.getDeviceIDForIdentifier(getIdentifier());
mRunning = false;
}
public String getIdentifier() {
return String.format("%s/%x/%x/%d", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId(), mInterfaceIndex);
}
@Override
public int getId() {
return mDeviceId;
}
@Override
public int getVendorId() {
return mDevice.getVendorId();
}
@Override
public int getProductId() {
return mDevice.getProductId();
}
@Override
public String getSerialNumber() {
String result = null;
if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) {
try {
result = mDevice.getSerialNumber();
}
catch (SecurityException exception) {
//Log.w(TAG, "App permissions mean we cannot get serial number for device " + getDeviceName() + " message: " + exception.getMessage());
}
}
if (result == null) {
result = "";
}
return result;
}
@Override
public int getVersion() {
return 0;
}
@Override
public String getManufacturerName() {
String result = null;
if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) {
result = mDevice.getManufacturerName();
}
if (result == null) {
result = String.format("%x", getVendorId());
}
return result;
}
@Override
public String getProductName() {
String result = null;
if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) {
result = mDevice.getProductName();
}
if (result == null) {
result = String.format("%x", getProductId());
}
return result;
}
@Override
public UsbDevice getDevice() {
return mDevice;
}
public String getDeviceName() {
return getManufacturerName() + " " + getProductName() + "(0x" + String.format("%x", getVendorId()) + "/0x" + String.format("%x", getProductId()) + ")";
}
@Override
public boolean open() {
mConnection = mManager.getUSBManager().openDevice(mDevice);
if (mConnection == null) {
Log.w(TAG, "Unable to open USB device " + getDeviceName());
return false;
}
// Force claim our interface
UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
if (!mConnection.claimInterface(iface, true)) {
Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName());
close();
return false;
}
// Find the endpoints
for (int j = 0; j < iface.getEndpointCount(); j++) {
UsbEndpoint endpt = iface.getEndpoint(j);
switch (endpt.getDirection()) {
case UsbConstants.USB_DIR_IN:
if (mInputEndpoint == null) {
mInputEndpoint = endpt;
}
break;
case UsbConstants.USB_DIR_OUT:
if (mOutputEndpoint == null) {
mOutputEndpoint = endpt;
}
break;
}
}
// Make sure the required endpoints were present
if (mInputEndpoint == null || mOutputEndpoint == null) {
Log.w(TAG, "Missing required endpoint on USB device " + getDeviceName());
close();
return false;
}
// Start listening for input
mRunning = true;
mInputThread = new InputThread();
mInputThread.start();
return true;
}
@Override
public int sendFeatureReport(byte[] report) {
int res = -1;
int offset = 0;
int length = report.length;
boolean skipped_report_id = false;
byte report_number = report[0];
if (report_number == 0x0) {
++offset;
--length;
skipped_report_id = true;
}
res = mConnection.controlTransfer(
UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_OUT,
0x09/*HID set_report*/,
(3/*HID feature*/ << 8) | report_number,
mInterface,
report, offset, length,
1000/*timeout millis*/);
if (res < 0) {
Log.w(TAG, "sendFeatureReport() returned " + res + " on device " + getDeviceName());
return -1;
}
if (skipped_report_id) {
++length;
}
return length;
}
@Override
public int sendOutputReport(byte[] report) {
int r = mConnection.bulkTransfer(mOutputEndpoint, report, report.length, 1000);
if (r != report.length) {
Log.w(TAG, "sendOutputReport() returned " + r + " on device " + getDeviceName());
}
return r;
}
@Override
public boolean getFeatureReport(byte[] report) {
int res = -1;
int offset = 0;
int length = report.length;
boolean skipped_report_id = false;
byte report_number = report[0];
if (report_number == 0x0) {
/* Offset the return buffer by 1, so that the report ID
will remain in byte 0. */
++offset;
--length;
skipped_report_id = true;
}
res = mConnection.controlTransfer(
UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_IN,
0x01/*HID get_report*/,
(3/*HID feature*/ << 8) | report_number,
mInterface,
report, offset, length,
1000/*timeout millis*/);
if (res < 0) {
Log.w(TAG, "getFeatureReport() returned " + res + " on device " + getDeviceName());
return false;
}
if (skipped_report_id) {
++res;
++length;
}
byte[] data;
if (res == length) {
data = report;
} else {
data = Arrays.copyOfRange(report, 0, res);
}
mManager.HIDDeviceFeatureReport(mDeviceId, data);
return true;
}
@Override
public void close() {
mRunning = false;
if (mInputThread != null) {
while (mInputThread.isAlive()) {
mInputThread.interrupt();
try {
mInputThread.join();
} catch (InterruptedException e) {
// Keep trying until we're done
}
}
mInputThread = null;
}
if (mConnection != null) {
UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
mConnection.releaseInterface(iface);
mConnection.close();
mConnection = null;
}
}
@Override
public void shutdown() {
close();
mManager = null;
}
@Override
public void setFrozen(boolean frozen) {
mFrozen = frozen;
}
protected class InputThread extends Thread {
@Override
public void run() {
int packetSize = mInputEndpoint.getMaxPacketSize();
byte[] packet = new byte[packetSize];
while (mRunning) {
int r;
try
{
r = mConnection.bulkTransfer(mInputEndpoint, packet, packetSize, 1000);
}
catch (Exception e)
{
Log.v(TAG, "Exception in UsbDeviceConnection bulktransfer: " + e);
break;
}
if (r < 0) {
// Could be a timeout or an I/O error
}
if (r > 0) {
byte[] data;
if (r == packetSize) {
data = packet;
} else {
data = Arrays.copyOfRange(packet, 0, r);
}
if (!mFrozen) {
mManager.HIDDeviceInputReport(mDeviceId, data);
}
}
}
}
}
}

View File

@ -0,0 +1,86 @@
package org.libsdl.app;
import android.content.Context;
import java.lang.Class;
import java.lang.reflect.Method;
/**
SDL library initialization
*/
public class SDL {
// This function should be called first and sets up the native code
// so it can call into the Java classes
public static void setupJNI() {
SDLActivity.nativeSetupJNI();
SDLAudioManager.nativeSetupJNI();
SDLControllerManager.nativeSetupJNI();
}
// This function should be called each time the activity is started
public static void initialize() {
setContext(null);
SDLActivity.initialize();
SDLAudioManager.initialize();
SDLControllerManager.initialize();
}
// This function stores the current activity (SDL or not)
public static void setContext(Context context) {
SDLAudioManager.setContext(context);
mContext = context;
}
public static Context getContext() {
return mContext;
}
public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, SecurityException, NullPointerException {
if (libraryName == null) {
throw new NullPointerException("No library name provided.");
}
try {
// Let's see if we have ReLinker available in the project. This is necessary for
// some projects that have huge numbers of local libraries bundled, and thus may
// trip a bug in Android's native library loader which ReLinker works around. (If
// loadLibrary works properly, ReLinker will simply use the normal Android method
// internally.)
//
// To use ReLinker, just add it as a dependency. For more information, see
// https://github.com/KeepSafe/ReLinker for ReLinker's repository.
//
Class<?> relinkClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker");
Class<?> relinkListenerClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener");
Class<?> contextClass = mContext.getClassLoader().loadClass("android.content.Context");
Class<?> stringClass = mContext.getClassLoader().loadClass("java.lang.String");
// Get a 'force' instance of the ReLinker, so we can ensure libraries are reinstalled if
// they've changed during updates.
Method forceMethod = relinkClass.getDeclaredMethod("force");
Object relinkInstance = forceMethod.invoke(null);
Class<?> relinkInstanceClass = relinkInstance.getClass();
// Actually load the library!
Method loadMethod = relinkInstanceClass.getDeclaredMethod("loadLibrary", contextClass, stringClass, stringClass, relinkListenerClass);
loadMethod.invoke(relinkInstance, mContext, libraryName, null, null);
}
catch (final Throwable e) {
// Fall back
try {
System.loadLibrary(libraryName);
}
catch (final UnsatisfiedLinkError ule) {
throw ule;
}
catch (final SecurityException se) {
throw se;
}
}
}
protected static Context mContext;
}

View File

@ -0,0 +1,514 @@
package org.libsdl.app;
import android.content.Context;
import android.media.AudioDeviceCallback;
import android.media.AudioDeviceInfo;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.os.Build;
import android.util.Log;
import java.util.Arrays;
public class SDLAudioManager {
protected static final String TAG = "SDLAudio";
protected static AudioTrack mAudioTrack;
protected static AudioRecord mAudioRecord;
protected static Context mContext;
private static final int[] NO_DEVICES = {};
private static AudioDeviceCallback mAudioDeviceCallback;
public static void initialize() {
mAudioTrack = null;
mAudioRecord = null;
mAudioDeviceCallback = null;
if(Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */)
{
mAudioDeviceCallback = new AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
Arrays.stream(addedDevices).forEach(deviceInfo -> addAudioDevice(deviceInfo.isSink(), deviceInfo.getId()));
}
@Override
public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
Arrays.stream(removedDevices).forEach(deviceInfo -> removeAudioDevice(deviceInfo.isSink(), deviceInfo.getId()));
}
};
}
}
public static void setContext(Context context) {
mContext = context;
if (context != null) {
registerAudioDeviceCallback();
}
}
public static void release(Context context) {
unregisterAudioDeviceCallback(context);
}
// Audio
protected static String getAudioFormatString(int audioFormat) {
switch (audioFormat) {
case AudioFormat.ENCODING_PCM_8BIT:
return "8-bit";
case AudioFormat.ENCODING_PCM_16BIT:
return "16-bit";
case AudioFormat.ENCODING_PCM_FLOAT:
return "float";
default:
return Integer.toString(audioFormat);
}
}
protected static int[] open(boolean isCapture, int sampleRate, int audioFormat, int desiredChannels, int desiredFrames, int deviceId) {
int channelConfig;
int sampleSize;
int frameSize;
Log.v(TAG, "Opening " + (isCapture ? "capture" : "playback") + ", requested " + desiredFrames + " frames of " + desiredChannels + " channel " + getAudioFormatString(audioFormat) + " audio at " + sampleRate + " Hz");
/* On older devices let's use known good settings */
if (Build.VERSION.SDK_INT < 21 /* Android 5.0 (LOLLIPOP) */) {
if (desiredChannels > 2) {
desiredChannels = 2;
}
}
/* AudioTrack has sample rate limitation of 48000 (fixed in 5.0.2) */
if (Build.VERSION.SDK_INT < 22 /* Android 5.1 (LOLLIPOP_MR1) */) {
if (sampleRate < 8000) {
sampleRate = 8000;
} else if (sampleRate > 48000) {
sampleRate = 48000;
}
}
if (audioFormat == AudioFormat.ENCODING_PCM_FLOAT) {
int minSDKVersion = (isCapture ? 23 /* Android 6.0 (M) */ : 21 /* Android 5.0 (LOLLIPOP) */);
if (Build.VERSION.SDK_INT < minSDKVersion) {
audioFormat = AudioFormat.ENCODING_PCM_16BIT;
}
}
switch (audioFormat)
{
case AudioFormat.ENCODING_PCM_8BIT:
sampleSize = 1;
break;
case AudioFormat.ENCODING_PCM_16BIT:
sampleSize = 2;
break;
case AudioFormat.ENCODING_PCM_FLOAT:
sampleSize = 4;
break;
default:
Log.v(TAG, "Requested format " + audioFormat + ", getting ENCODING_PCM_16BIT");
audioFormat = AudioFormat.ENCODING_PCM_16BIT;
sampleSize = 2;
break;
}
if (isCapture) {
switch (desiredChannels) {
case 1:
channelConfig = AudioFormat.CHANNEL_IN_MONO;
break;
case 2:
channelConfig = AudioFormat.CHANNEL_IN_STEREO;
break;
default:
Log.v(TAG, "Requested " + desiredChannels + " channels, getting stereo");
desiredChannels = 2;
channelConfig = AudioFormat.CHANNEL_IN_STEREO;
break;
}
} else {
switch (desiredChannels) {
case 1:
channelConfig = AudioFormat.CHANNEL_OUT_MONO;
break;
case 2:
channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
break;
case 3:
channelConfig = AudioFormat.CHANNEL_OUT_STEREO | AudioFormat.CHANNEL_OUT_FRONT_CENTER;
break;
case 4:
channelConfig = AudioFormat.CHANNEL_OUT_QUAD;
break;
case 5:
channelConfig = AudioFormat.CHANNEL_OUT_QUAD | AudioFormat.CHANNEL_OUT_FRONT_CENTER;
break;
case 6:
channelConfig = AudioFormat.CHANNEL_OUT_5POINT1;
break;
case 7:
channelConfig = AudioFormat.CHANNEL_OUT_5POINT1 | AudioFormat.CHANNEL_OUT_BACK_CENTER;
break;
case 8:
if (Build.VERSION.SDK_INT >= 23 /* Android 6.0 (M) */) {
channelConfig = AudioFormat.CHANNEL_OUT_7POINT1_SURROUND;
} else {
Log.v(TAG, "Requested " + desiredChannels + " channels, getting 5.1 surround");
desiredChannels = 6;
channelConfig = AudioFormat.CHANNEL_OUT_5POINT1;
}
break;
default:
Log.v(TAG, "Requested " + desiredChannels + " channels, getting stereo");
desiredChannels = 2;
channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
break;
}
/*
Log.v(TAG, "Speaker configuration (and order of channels):");
if ((channelConfig & 0x00000004) != 0) {
Log.v(TAG, " CHANNEL_OUT_FRONT_LEFT");
}
if ((channelConfig & 0x00000008) != 0) {
Log.v(TAG, " CHANNEL_OUT_FRONT_RIGHT");
}
if ((channelConfig & 0x00000010) != 0) {
Log.v(TAG, " CHANNEL_OUT_FRONT_CENTER");
}
if ((channelConfig & 0x00000020) != 0) {
Log.v(TAG, " CHANNEL_OUT_LOW_FREQUENCY");
}
if ((channelConfig & 0x00000040) != 0) {
Log.v(TAG, " CHANNEL_OUT_BACK_LEFT");
}
if ((channelConfig & 0x00000080) != 0) {
Log.v(TAG, " CHANNEL_OUT_BACK_RIGHT");
}
if ((channelConfig & 0x00000100) != 0) {
Log.v(TAG, " CHANNEL_OUT_FRONT_LEFT_OF_CENTER");
}
if ((channelConfig & 0x00000200) != 0) {
Log.v(TAG, " CHANNEL_OUT_FRONT_RIGHT_OF_CENTER");
}
if ((channelConfig & 0x00000400) != 0) {
Log.v(TAG, " CHANNEL_OUT_BACK_CENTER");
}
if ((channelConfig & 0x00000800) != 0) {
Log.v(TAG, " CHANNEL_OUT_SIDE_LEFT");
}
if ((channelConfig & 0x00001000) != 0) {
Log.v(TAG, " CHANNEL_OUT_SIDE_RIGHT");
}
*/
}
frameSize = (sampleSize * desiredChannels);
// Let the user pick a larger buffer if they really want -- but ye
// gods they probably shouldn't, the minimums are horrifyingly high
// latency already
int minBufferSize;
if (isCapture) {
minBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
} else {
minBufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat);
}
desiredFrames = Math.max(desiredFrames, (minBufferSize + frameSize - 1) / frameSize);
int[] results = new int[4];
if (isCapture) {
if (mAudioRecord == null) {
mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, sampleRate,
channelConfig, audioFormat, desiredFrames * frameSize);
// see notes about AudioTrack state in audioOpen(), above. Probably also applies here.
if (mAudioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
Log.e(TAG, "Failed during initialization of AudioRecord");
mAudioRecord.release();
mAudioRecord = null;
return null;
}
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */ && deviceId != 0) {
mAudioRecord.setPreferredDevice(getOutputAudioDeviceInfo(deviceId));
}
mAudioRecord.startRecording();
}
results[0] = mAudioRecord.getSampleRate();
results[1] = mAudioRecord.getAudioFormat();
results[2] = mAudioRecord.getChannelCount();
} else {
if (mAudioTrack == null) {
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
// Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid
// Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java
// Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState()
if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) {
/* Try again, with safer values */
Log.e(TAG, "Failed during initialization of Audio Track");
mAudioTrack.release();
mAudioTrack = null;
return null;
}
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */ && deviceId != 0) {
mAudioTrack.setPreferredDevice(getInputAudioDeviceInfo(deviceId));
}
mAudioTrack.play();
}
results[0] = mAudioTrack.getSampleRate();
results[1] = mAudioTrack.getAudioFormat();
results[2] = mAudioTrack.getChannelCount();
}
results[3] = desiredFrames;
Log.v(TAG, "Opening " + (isCapture ? "capture" : "playback") + ", got " + results[3] + " frames of " + results[2] + " channel " + getAudioFormatString(results[1]) + " audio at " + results[0] + " Hz");
return results;
}
private static AudioDeviceInfo getInputAudioDeviceInfo(int deviceId) {
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
return Arrays.stream(audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS))
.filter(deviceInfo -> deviceInfo.getId() == deviceId)
.findFirst()
.orElse(null);
} else {
return null;
}
}
private static AudioDeviceInfo getOutputAudioDeviceInfo(int deviceId) {
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
return Arrays.stream(audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS))
.filter(deviceInfo -> deviceInfo.getId() == deviceId)
.findFirst()
.orElse(null);
} else {
return null;
}
}
private static void registerAudioDeviceCallback() {
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.registerAudioDeviceCallback(mAudioDeviceCallback, null);
}
}
private static void unregisterAudioDeviceCallback(Context context) {
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.unregisterAudioDeviceCallback(mAudioDeviceCallback);
}
}
/**
* This method is called by SDL using JNI.
*/
public static int[] getAudioOutputDevices() {
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
return Arrays.stream(audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)).mapToInt(AudioDeviceInfo::getId).toArray();
} else {
return NO_DEVICES;
}
}
/**
* This method is called by SDL using JNI.
*/
public static int[] getAudioInputDevices() {
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
return Arrays.stream(audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).mapToInt(AudioDeviceInfo::getId).toArray();
} else {
return NO_DEVICES;
}
}
/**
* This method is called by SDL using JNI.
*/
public static int[] audioOpen(int sampleRate, int audioFormat, int desiredChannels, int desiredFrames, int deviceId) {
return open(false, sampleRate, audioFormat, desiredChannels, desiredFrames, deviceId);
}
/**
* This method is called by SDL using JNI.
*/
public static void audioWriteFloatBuffer(float[] buffer) {
if (mAudioTrack == null) {
Log.e(TAG, "Attempted to make audio call with uninitialized audio!");
return;
}
if (android.os.Build.VERSION.SDK_INT < 21 /* Android 5.0 (LOLLIPOP) */) {
Log.e(TAG, "Attempted to make an incompatible audio call with uninitialized audio! (floating-point output is supported since Android 5.0 Lollipop)");
return;
}
for (int i = 0; i < buffer.length;) {
int result = mAudioTrack.write(buffer, i, buffer.length - i, AudioTrack.WRITE_BLOCKING);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w(TAG, "SDL audio: error return from write(float)");
return;
}
}
}
/**
* This method is called by SDL using JNI.
*/
public static void audioWriteShortBuffer(short[] buffer) {
if (mAudioTrack == null) {
Log.e(TAG, "Attempted to make audio call with uninitialized audio!");
return;
}
for (int i = 0; i < buffer.length;) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w(TAG, "SDL audio: error return from write(short)");
return;
}
}
}
/**
* This method is called by SDL using JNI.
*/
public static void audioWriteByteBuffer(byte[] buffer) {
if (mAudioTrack == null) {
Log.e(TAG, "Attempted to make audio call with uninitialized audio!");
return;
}
for (int i = 0; i < buffer.length; ) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w(TAG, "SDL audio: error return from write(byte)");
return;
}
}
}
/**
* This method is called by SDL using JNI.
*/
public static int[] captureOpen(int sampleRate, int audioFormat, int desiredChannels, int desiredFrames, int deviceId) {
return open(true, sampleRate, audioFormat, desiredChannels, desiredFrames, deviceId);
}
/** This method is called by SDL using JNI. */
public static int captureReadFloatBuffer(float[] buffer, boolean blocking) {
if (Build.VERSION.SDK_INT < 23 /* Android 6.0 (M) */) {
return 0;
} else {
return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
}
}
/** This method is called by SDL using JNI. */
public static int captureReadShortBuffer(short[] buffer, boolean blocking) {
if (Build.VERSION.SDK_INT < 23 /* Android 6.0 (M) */) {
return mAudioRecord.read(buffer, 0, buffer.length);
} else {
return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
}
}
/** This method is called by SDL using JNI. */
public static int captureReadByteBuffer(byte[] buffer, boolean blocking) {
if (Build.VERSION.SDK_INT < 23 /* Android 6.0 (M) */) {
return mAudioRecord.read(buffer, 0, buffer.length);
} else {
return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
}
}
/** This method is called by SDL using JNI. */
public static void audioClose() {
if (mAudioTrack != null) {
mAudioTrack.stop();
mAudioTrack.release();
mAudioTrack = null;
}
}
/** This method is called by SDL using JNI. */
public static void captureClose() {
if (mAudioRecord != null) {
mAudioRecord.stop();
mAudioRecord.release();
mAudioRecord = null;
}
}
/** This method is called by SDL using JNI. */
public static void audioSetThreadPriority(boolean iscapture, int device_id) {
try {
/* Set thread name */
if (iscapture) {
Thread.currentThread().setName("SDLAudioC" + device_id);
} else {
Thread.currentThread().setName("SDLAudioP" + device_id);
}
/* Set thread priority */
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO);
} catch (Exception e) {
Log.v(TAG, "modify thread properties failed " + e.toString());
}
}
public static native int nativeSetupJNI();
public static native void removeAudioDevice(boolean isCapture, int deviceId);
public static native void addAudioDevice(boolean isCapture, int deviceId);
}

View File

@ -0,0 +1,854 @@
package org.libsdl.app;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.content.Context;
import android.os.Build;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.util.Log;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
public class SDLControllerManager
{
public static native int nativeSetupJNI();
public static native int nativeAddJoystick(int device_id, String name, String desc,
int vendor_id, int product_id,
boolean is_accelerometer, int button_mask,
int naxes, int axis_mask, int nhats, int nballs);
public static native int nativeRemoveJoystick(int device_id);
public static native int nativeAddHaptic(int device_id, String name);
public static native int nativeRemoveHaptic(int device_id);
public static native int onNativePadDown(int device_id, int keycode);
public static native int onNativePadUp(int device_id, int keycode);
public static native void onNativeJoy(int device_id, int axis,
float value);
public static native void onNativeHat(int device_id, int hat_id,
int x, int y);
protected static SDLJoystickHandler mJoystickHandler;
protected static SDLHapticHandler mHapticHandler;
private static final String TAG = "SDLControllerManager";
public static void initialize() {
if (mJoystickHandler == null) {
if (Build.VERSION.SDK_INT >= 19 /* Android 4.4 (KITKAT) */) {
mJoystickHandler = new SDLJoystickHandler_API19();
} else {
mJoystickHandler = new SDLJoystickHandler_API16();
}
}
if (mHapticHandler == null) {
if (Build.VERSION.SDK_INT >= 26 /* Android 8.0 (O) */) {
mHapticHandler = new SDLHapticHandler_API26();
} else {
mHapticHandler = new SDLHapticHandler();
}
}
}
// Joystick glue code, just a series of stubs that redirect to the SDLJoystickHandler instance
public static boolean handleJoystickMotionEvent(MotionEvent event) {
return mJoystickHandler.handleMotionEvent(event);
}
/**
* This method is called by SDL using JNI.
*/
public static void pollInputDevices() {
mJoystickHandler.pollInputDevices();
}
/**
* This method is called by SDL using JNI.
*/
public static void pollHapticDevices() {
mHapticHandler.pollHapticDevices();
}
/**
* This method is called by SDL using JNI.
*/
public static void hapticRun(int device_id, float intensity, int length) {
mHapticHandler.run(device_id, intensity, length);
}
/**
* This method is called by SDL using JNI.
*/
public static void hapticStop(int device_id)
{
mHapticHandler.stop(device_id);
}
// Check if a given device is considered a possible SDL joystick
public static boolean isDeviceSDLJoystick(int deviceId) {
InputDevice device = InputDevice.getDevice(deviceId);
// We cannot use InputDevice.isVirtual before API 16, so let's accept
// only nonnegative device ids (VIRTUAL_KEYBOARD equals -1)
if ((device == null) || (deviceId < 0)) {
return false;
}
int sources = device.getSources();
/* This is called for every button press, so let's not spam the logs */
/*
if ((sources & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
Log.v(TAG, "Input device " + device.getName() + " has class joystick.");
}
if ((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD) {
Log.v(TAG, "Input device " + device.getName() + " is a dpad.");
}
if ((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) {
Log.v(TAG, "Input device " + device.getName() + " is a gamepad.");
}
*/
return ((sources & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 ||
((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD) ||
((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD)
);
}
}
class SDLJoystickHandler {
/**
* Handles given MotionEvent.
* @param event the event to be handled.
* @return if given event was processed.
*/
public boolean handleMotionEvent(MotionEvent event) {
return false;
}
/**
* Handles adding and removing of input devices.
*/
public void pollInputDevices() {
}
}
/* Actual joystick functionality available for API >= 12 devices */
class SDLJoystickHandler_API16 extends SDLJoystickHandler {
static class SDLJoystick {
public int device_id;
public String name;
public String desc;
public ArrayList<InputDevice.MotionRange> axes;
public ArrayList<InputDevice.MotionRange> hats;
}
static class RangeComparator implements Comparator<InputDevice.MotionRange> {
@Override
public int compare(InputDevice.MotionRange arg0, InputDevice.MotionRange arg1) {
// Some controllers, like the Moga Pro 2, return AXIS_GAS (22) for right trigger and AXIS_BRAKE (23) for left trigger - swap them so they're sorted in the right order for SDL
int arg0Axis = arg0.getAxis();
int arg1Axis = arg1.getAxis();
if (arg0Axis == MotionEvent.AXIS_GAS) {
arg0Axis = MotionEvent.AXIS_BRAKE;
} else if (arg0Axis == MotionEvent.AXIS_BRAKE) {
arg0Axis = MotionEvent.AXIS_GAS;
}
if (arg1Axis == MotionEvent.AXIS_GAS) {
arg1Axis = MotionEvent.AXIS_BRAKE;
} else if (arg1Axis == MotionEvent.AXIS_BRAKE) {
arg1Axis = MotionEvent.AXIS_GAS;
}
// Make sure the AXIS_Z is sorted between AXIS_RY and AXIS_RZ.
// This is because the usual pairing are:
// - AXIS_X + AXIS_Y (left stick).
// - AXIS_RX, AXIS_RY (sometimes the right stick, sometimes triggers).
// - AXIS_Z, AXIS_RZ (sometimes the right stick, sometimes triggers).
// This sorts the axes in the above order, which tends to be correct
// for Xbox-ish game pads that have the right stick on RX/RY and the
// triggers on Z/RZ.
//
// Gamepads that don't have AXIS_Z/AXIS_RZ but use
// AXIS_LTRIGGER/AXIS_RTRIGGER are unaffected by this.
//
// References:
// - https://developer.android.com/develop/ui/views/touch-and-input/game-controllers/controller-input
// - https://www.kernel.org/doc/html/latest/input/gamepad.html
if (arg0Axis == MotionEvent.AXIS_Z) {
arg0Axis = MotionEvent.AXIS_RZ - 1;
} else if (arg0Axis > MotionEvent.AXIS_Z && arg0Axis < MotionEvent.AXIS_RZ) {
--arg0Axis;
}
if (arg1Axis == MotionEvent.AXIS_Z) {
arg1Axis = MotionEvent.AXIS_RZ - 1;
} else if (arg1Axis > MotionEvent.AXIS_Z && arg1Axis < MotionEvent.AXIS_RZ) {
--arg1Axis;
}
return arg0Axis - arg1Axis;
}
}
private final ArrayList<SDLJoystick> mJoysticks;
public SDLJoystickHandler_API16() {
mJoysticks = new ArrayList<SDLJoystick>();
}
@Override
public void pollInputDevices() {
int[] deviceIds = InputDevice.getDeviceIds();
for (int device_id : deviceIds) {
if (SDLControllerManager.isDeviceSDLJoystick(device_id)) {
SDLJoystick joystick = getJoystick(device_id);
if (joystick == null) {
InputDevice joystickDevice = InputDevice.getDevice(device_id);
joystick = new SDLJoystick();
joystick.device_id = device_id;
joystick.name = joystickDevice.getName();
joystick.desc = getJoystickDescriptor(joystickDevice);
joystick.axes = new ArrayList<InputDevice.MotionRange>();
joystick.hats = new ArrayList<InputDevice.MotionRange>();
List<InputDevice.MotionRange> ranges = joystickDevice.getMotionRanges();
Collections.sort(ranges, new RangeComparator());
for (InputDevice.MotionRange range : ranges) {
if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
if (range.getAxis() == MotionEvent.AXIS_HAT_X || range.getAxis() == MotionEvent.AXIS_HAT_Y) {
joystick.hats.add(range);
} else {
joystick.axes.add(range);
}
}
}
mJoysticks.add(joystick);
SDLControllerManager.nativeAddJoystick(joystick.device_id, joystick.name, joystick.desc,
getVendorId(joystickDevice), getProductId(joystickDevice), false,
getButtonMask(joystickDevice), joystick.axes.size(), getAxisMask(joystick.axes), joystick.hats.size()/2, 0);
}
}
}
/* Check removed devices */
ArrayList<Integer> removedDevices = null;
for (SDLJoystick joystick : mJoysticks) {
int device_id = joystick.device_id;
int i;
for (i = 0; i < deviceIds.length; i++) {
if (device_id == deviceIds[i]) break;
}
if (i == deviceIds.length) {
if (removedDevices == null) {
removedDevices = new ArrayList<Integer>();
}
removedDevices.add(device_id);
}
}
if (removedDevices != null) {
for (int device_id : removedDevices) {
SDLControllerManager.nativeRemoveJoystick(device_id);
for (int i = 0; i < mJoysticks.size(); i++) {
if (mJoysticks.get(i).device_id == device_id) {
mJoysticks.remove(i);
break;
}
}
}
}
}
protected SDLJoystick getJoystick(int device_id) {
for (SDLJoystick joystick : mJoysticks) {
if (joystick.device_id == device_id) {
return joystick;
}
}
return null;
}
@Override
public boolean handleMotionEvent(MotionEvent event) {
int actionPointerIndex = event.getActionIndex();
int action = event.getActionMasked();
if (action == MotionEvent.ACTION_MOVE) {
SDLJoystick joystick = getJoystick(event.getDeviceId());
if (joystick != null) {
for (int i = 0; i < joystick.axes.size(); i++) {
InputDevice.MotionRange range = joystick.axes.get(i);
/* Normalize the value to -1...1 */
float value = (event.getAxisValue(range.getAxis(), actionPointerIndex) - range.getMin()) / range.getRange() * 2.0f - 1.0f;
SDLControllerManager.onNativeJoy(joystick.device_id, i, value);
}
for (int i = 0; i < joystick.hats.size() / 2; i++) {
int hatX = Math.round(event.getAxisValue(joystick.hats.get(2 * i).getAxis(), actionPointerIndex));
int hatY = Math.round(event.getAxisValue(joystick.hats.get(2 * i + 1).getAxis(), actionPointerIndex));
SDLControllerManager.onNativeHat(joystick.device_id, i, hatX, hatY);
}
}
}
return true;
}
public String getJoystickDescriptor(InputDevice joystickDevice) {
String desc = joystickDevice.getDescriptor();
if (desc != null && !desc.isEmpty()) {
return desc;
}
return joystickDevice.getName();
}
public int getProductId(InputDevice joystickDevice) {
return 0;
}
public int getVendorId(InputDevice joystickDevice) {
return 0;
}
public int getAxisMask(List<InputDevice.MotionRange> ranges) {
return -1;
}
public int getButtonMask(InputDevice joystickDevice) {
return -1;
}
}
class SDLJoystickHandler_API19 extends SDLJoystickHandler_API16 {
@Override
public int getProductId(InputDevice joystickDevice) {
return joystickDevice.getProductId();
}
@Override
public int getVendorId(InputDevice joystickDevice) {
return joystickDevice.getVendorId();
}
@Override
public int getAxisMask(List<InputDevice.MotionRange> ranges) {
// For compatibility, keep computing the axis mask like before,
// only really distinguishing 2, 4 and 6 axes.
int axis_mask = 0;
if (ranges.size() >= 2) {
// ((1 << SDL_GAMEPAD_AXIS_LEFTX) | (1 << SDL_GAMEPAD_AXIS_LEFTY))
axis_mask |= 0x0003;
}
if (ranges.size() >= 4) {
// ((1 << SDL_GAMEPAD_AXIS_RIGHTX) | (1 << SDL_GAMEPAD_AXIS_RIGHTY))
axis_mask |= 0x000c;
}
if (ranges.size() >= 6) {
// ((1 << SDL_GAMEPAD_AXIS_LEFT_TRIGGER) | (1 << SDL_GAMEPAD_AXIS_RIGHT_TRIGGER))
axis_mask |= 0x0030;
}
// Also add an indicator bit for whether the sorting order has changed.
// This serves to disable outdated gamecontrollerdb.txt mappings.
boolean have_z = false;
boolean have_past_z_before_rz = false;
for (InputDevice.MotionRange range : ranges) {
int axis = range.getAxis();
if (axis == MotionEvent.AXIS_Z) {
have_z = true;
} else if (axis > MotionEvent.AXIS_Z && axis < MotionEvent.AXIS_RZ) {
have_past_z_before_rz = true;
}
}
if (have_z && have_past_z_before_rz) {
// If both these exist, the compare() function changed sorting order.
// Set a bit to indicate this fact.
axis_mask |= 0x8000;
}
return axis_mask;
}
@Override
public int getButtonMask(InputDevice joystickDevice) {
int button_mask = 0;
int[] keys = new int[] {
KeyEvent.KEYCODE_BUTTON_A,
KeyEvent.KEYCODE_BUTTON_B,
KeyEvent.KEYCODE_BUTTON_X,
KeyEvent.KEYCODE_BUTTON_Y,
KeyEvent.KEYCODE_BACK,
KeyEvent.KEYCODE_MENU,
KeyEvent.KEYCODE_BUTTON_MODE,
KeyEvent.KEYCODE_BUTTON_START,
KeyEvent.KEYCODE_BUTTON_THUMBL,
KeyEvent.KEYCODE_BUTTON_THUMBR,
KeyEvent.KEYCODE_BUTTON_L1,
KeyEvent.KEYCODE_BUTTON_R1,
KeyEvent.KEYCODE_DPAD_UP,
KeyEvent.KEYCODE_DPAD_DOWN,
KeyEvent.KEYCODE_DPAD_LEFT,
KeyEvent.KEYCODE_DPAD_RIGHT,
KeyEvent.KEYCODE_BUTTON_SELECT,
KeyEvent.KEYCODE_DPAD_CENTER,
// These don't map into any SDL controller buttons directly
KeyEvent.KEYCODE_BUTTON_L2,
KeyEvent.KEYCODE_BUTTON_R2,
KeyEvent.KEYCODE_BUTTON_C,
KeyEvent.KEYCODE_BUTTON_Z,
KeyEvent.KEYCODE_BUTTON_1,
KeyEvent.KEYCODE_BUTTON_2,
KeyEvent.KEYCODE_BUTTON_3,
KeyEvent.KEYCODE_BUTTON_4,
KeyEvent.KEYCODE_BUTTON_5,
KeyEvent.KEYCODE_BUTTON_6,
KeyEvent.KEYCODE_BUTTON_7,
KeyEvent.KEYCODE_BUTTON_8,
KeyEvent.KEYCODE_BUTTON_9,
KeyEvent.KEYCODE_BUTTON_10,
KeyEvent.KEYCODE_BUTTON_11,
KeyEvent.KEYCODE_BUTTON_12,
KeyEvent.KEYCODE_BUTTON_13,
KeyEvent.KEYCODE_BUTTON_14,
KeyEvent.KEYCODE_BUTTON_15,
KeyEvent.KEYCODE_BUTTON_16,
};
int[] masks = new int[] {
(1 << 0), // A -> A
(1 << 1), // B -> B
(1 << 2), // X -> X
(1 << 3), // Y -> Y
(1 << 4), // BACK -> BACK
(1 << 6), // MENU -> START
(1 << 5), // MODE -> GUIDE
(1 << 6), // START -> START
(1 << 7), // THUMBL -> LEFTSTICK
(1 << 8), // THUMBR -> RIGHTSTICK
(1 << 9), // L1 -> LEFTSHOULDER
(1 << 10), // R1 -> RIGHTSHOULDER
(1 << 11), // DPAD_UP -> DPAD_UP
(1 << 12), // DPAD_DOWN -> DPAD_DOWN
(1 << 13), // DPAD_LEFT -> DPAD_LEFT
(1 << 14), // DPAD_RIGHT -> DPAD_RIGHT
(1 << 4), // SELECT -> BACK
(1 << 0), // DPAD_CENTER -> A
(1 << 15), // L2 -> ??
(1 << 16), // R2 -> ??
(1 << 17), // C -> ??
(1 << 18), // Z -> ??
(1 << 20), // 1 -> ??
(1 << 21), // 2 -> ??
(1 << 22), // 3 -> ??
(1 << 23), // 4 -> ??
(1 << 24), // 5 -> ??
(1 << 25), // 6 -> ??
(1 << 26), // 7 -> ??
(1 << 27), // 8 -> ??
(1 << 28), // 9 -> ??
(1 << 29), // 10 -> ??
(1 << 30), // 11 -> ??
(1 << 31), // 12 -> ??
// We're out of room...
0xFFFFFFFF, // 13 -> ??
0xFFFFFFFF, // 14 -> ??
0xFFFFFFFF, // 15 -> ??
0xFFFFFFFF, // 16 -> ??
};
boolean[] has_keys = joystickDevice.hasKeys(keys);
for (int i = 0; i < keys.length; ++i) {
if (has_keys[i]) {
button_mask |= masks[i];
}
}
return button_mask;
}
}
class SDLHapticHandler_API26 extends SDLHapticHandler {
@Override
public void run(int device_id, float intensity, int length) {
SDLHaptic haptic = getHaptic(device_id);
if (haptic != null) {
Log.d("SDL", "Rtest: Vibe with intensity " + intensity + " for " + length);
if (intensity == 0.0f) {
stop(device_id);
return;
}
int vibeValue = Math.round(intensity * 255);
if (vibeValue > 255) {
vibeValue = 255;
}
if (vibeValue < 1) {
stop(device_id);
return;
}
try {
haptic.vib.vibrate(VibrationEffect.createOneShot(length, vibeValue));
}
catch (Exception e) {
// Fall back to the generic method, which uses DEFAULT_AMPLITUDE, but works even if
// something went horribly wrong with the Android 8.0 APIs.
haptic.vib.vibrate(length);
}
}
}
}
class SDLHapticHandler {
static class SDLHaptic {
public int device_id;
public String name;
public Vibrator vib;
}
private final ArrayList<SDLHaptic> mHaptics;
public SDLHapticHandler() {
mHaptics = new ArrayList<SDLHaptic>();
}
public void run(int device_id, float intensity, int length) {
SDLHaptic haptic = getHaptic(device_id);
if (haptic != null) {
haptic.vib.vibrate(length);
}
}
public void stop(int device_id) {
SDLHaptic haptic = getHaptic(device_id);
if (haptic != null) {
haptic.vib.cancel();
}
}
public void pollHapticDevices() {
final int deviceId_VIBRATOR_SERVICE = 999999;
boolean hasVibratorService = false;
int[] deviceIds = InputDevice.getDeviceIds();
// It helps processing the device ids in reverse order
// For example, in the case of the XBox 360 wireless dongle,
// so the first controller seen by SDL matches what the receiver
// considers to be the first controller
for (int i = deviceIds.length - 1; i > -1; i--) {
SDLHaptic haptic = getHaptic(deviceIds[i]);
if (haptic == null) {
InputDevice device = InputDevice.getDevice(deviceIds[i]);
Vibrator vib = device.getVibrator();
if (vib.hasVibrator()) {
haptic = new SDLHaptic();
haptic.device_id = deviceIds[i];
haptic.name = device.getName();
haptic.vib = vib;
mHaptics.add(haptic);
SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
}
}
}
/* Check VIBRATOR_SERVICE */
Vibrator vib = (Vibrator) SDL.getContext().getSystemService(Context.VIBRATOR_SERVICE);
if (vib != null) {
hasVibratorService = vib.hasVibrator();
if (hasVibratorService) {
SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE);
if (haptic == null) {
haptic = new SDLHaptic();
haptic.device_id = deviceId_VIBRATOR_SERVICE;
haptic.name = "VIBRATOR_SERVICE";
haptic.vib = vib;
mHaptics.add(haptic);
SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
}
}
}
/* Check removed devices */
ArrayList<Integer> removedDevices = null;
for (SDLHaptic haptic : mHaptics) {
int device_id = haptic.device_id;
int i;
for (i = 0; i < deviceIds.length; i++) {
if (device_id == deviceIds[i]) break;
}
if (device_id != deviceId_VIBRATOR_SERVICE || !hasVibratorService) {
if (i == deviceIds.length) {
if (removedDevices == null) {
removedDevices = new ArrayList<Integer>();
}
removedDevices.add(device_id);
}
} // else: don't remove the vibrator if it is still present
}
if (removedDevices != null) {
for (int device_id : removedDevices) {
SDLControllerManager.nativeRemoveHaptic(device_id);
for (int i = 0; i < mHaptics.size(); i++) {
if (mHaptics.get(i).device_id == device_id) {
mHaptics.remove(i);
break;
}
}
}
}
}
protected SDLHaptic getHaptic(int device_id) {
for (SDLHaptic haptic : mHaptics) {
if (haptic.device_id == device_id) {
return haptic;
}
}
return null;
}
}
class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener {
// Generic Motion (mouse hover, joystick...) events go here
@Override
public boolean onGenericMotion(View v, MotionEvent event) {
float x, y;
int action;
switch ( event.getSource() ) {
case InputDevice.SOURCE_JOYSTICK:
return SDLControllerManager.handleJoystickMotionEvent(event);
case InputDevice.SOURCE_MOUSE:
action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_SCROLL:
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
case MotionEvent.ACTION_HOVER_MOVE:
x = event.getX(0);
y = event.getY(0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
default:
break;
}
break;
default:
break;
}
// Event was not managed
return false;
}
public boolean supportsRelativeMouse() {
return false;
}
public boolean inRelativeMode() {
return false;
}
public boolean setRelativeMouseEnabled(boolean enabled) {
return false;
}
public void reclaimRelativeMouseModeIfNeeded()
{
}
public float getEventX(MotionEvent event) {
return event.getX(0);
}
public float getEventY(MotionEvent event) {
return event.getY(0);
}
}
class SDLGenericMotionListener_API24 extends SDLGenericMotionListener_API12 {
// Generic Motion (mouse hover, joystick...) events go here
private boolean mRelativeModeEnabled;
@Override
public boolean onGenericMotion(View v, MotionEvent event) {
// Handle relative mouse mode
if (mRelativeModeEnabled) {
if (event.getSource() == InputDevice.SOURCE_MOUSE) {
int action = event.getActionMasked();
if (action == MotionEvent.ACTION_HOVER_MOVE) {
float x = event.getAxisValue(MotionEvent.AXIS_RELATIVE_X);
float y = event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y);
SDLActivity.onNativeMouse(0, action, x, y, true);
return true;
}
}
}
// Event was not managed, call SDLGenericMotionListener_API12 method
return super.onGenericMotion(v, event);
}
@Override
public boolean supportsRelativeMouse() {
return true;
}
@Override
public boolean inRelativeMode() {
return mRelativeModeEnabled;
}
@Override
public boolean setRelativeMouseEnabled(boolean enabled) {
mRelativeModeEnabled = enabled;
return true;
}
@Override
public float getEventX(MotionEvent event) {
if (mRelativeModeEnabled) {
return event.getAxisValue(MotionEvent.AXIS_RELATIVE_X);
} else {
return event.getX(0);
}
}
@Override
public float getEventY(MotionEvent event) {
if (mRelativeModeEnabled) {
return event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y);
} else {
return event.getY(0);
}
}
}
class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_API24 {
// Generic Motion (mouse hover, joystick...) events go here
private boolean mRelativeModeEnabled;
@Override
public boolean onGenericMotion(View v, MotionEvent event) {
float x, y;
int action;
switch ( event.getSource() ) {
case InputDevice.SOURCE_JOYSTICK:
return SDLControllerManager.handleJoystickMotionEvent(event);
case InputDevice.SOURCE_MOUSE:
// DeX desktop mouse cursor is a separate non-standard input type.
case InputDevice.SOURCE_MOUSE | InputDevice.SOURCE_TOUCHSCREEN:
action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_SCROLL:
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
case MotionEvent.ACTION_HOVER_MOVE:
x = event.getX(0);
y = event.getY(0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
default:
break;
}
break;
case InputDevice.SOURCE_MOUSE_RELATIVE:
action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_SCROLL:
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
case MotionEvent.ACTION_HOVER_MOVE:
x = event.getX(0);
y = event.getY(0);
SDLActivity.onNativeMouse(0, action, x, y, true);
return true;
default:
break;
}
break;
default:
break;
}
// Event was not managed
return false;
}
@Override
public boolean supportsRelativeMouse() {
return (!SDLActivity.isDeXMode() || Build.VERSION.SDK_INT >= 27 /* Android 8.1 (O_MR1) */);
}
@Override
public boolean inRelativeMode() {
return mRelativeModeEnabled;
}
@Override
public boolean setRelativeMouseEnabled(boolean enabled) {
if (!SDLActivity.isDeXMode() || Build.VERSION.SDK_INT >= 27 /* Android 8.1 (O_MR1) */) {
if (enabled) {
SDLActivity.getContentView().requestPointerCapture();
} else {
SDLActivity.getContentView().releasePointerCapture();
}
mRelativeModeEnabled = enabled;
return true;
} else {
return false;
}
}
@Override
public void reclaimRelativeMouseModeIfNeeded()
{
if (mRelativeModeEnabled && !SDLActivity.isDeXMode()) {
SDLActivity.getContentView().requestPointerCapture();
}
}
@Override
public float getEventX(MotionEvent event) {
// Relative mouse in capture mode will only have relative for X/Y
return event.getX(0);
}
@Override
public float getEventY(MotionEvent event) {
// Relative mouse in capture mode will only have relative for X/Y
return event.getY(0);
}
}

View File

@ -0,0 +1,405 @@
package org.libsdl.app;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Build;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
/**
SDLSurface. This is what we draw on, so we need to know when it's created
in order to do anything useful.
Because of this, that's where we set up the SDL thread
*/
public class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
View.OnKeyListener, View.OnTouchListener, SensorEventListener {
// Sensors
protected SensorManager mSensorManager;
protected Display mDisplay;
// Keep track of the surface size to normalize touch events
protected float mWidth, mHeight;
// Is SurfaceView ready for rendering
public boolean mIsSurfaceReady;
// Startup
public SDLSurface(Context context) {
super(context);
getHolder().addCallback(this);
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
setOnKeyListener(this);
setOnTouchListener(this);
mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
setOnGenericMotionListener(SDLActivity.getMotionListener());
// Some arbitrary defaults to avoid a potential division by zero
mWidth = 1.0f;
mHeight = 1.0f;
mIsSurfaceReady = false;
}
public void handlePause() {
enableSensor(Sensor.TYPE_ACCELEROMETER, false);
}
public void handleResume() {
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
setOnKeyListener(this);
setOnTouchListener(this);
enableSensor(Sensor.TYPE_ACCELEROMETER, true);
}
public Surface getNativeSurface() {
return getHolder().getSurface();
}
// Called when we have a valid drawing surface
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.v("SDL", "surfaceCreated()");
SDLActivity.onNativeSurfaceCreated();
}
// Called when we lose the surface
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v("SDL", "surfaceDestroyed()");
// Transition to pause, if needed
SDLActivity.mNextNativeState = SDLActivity.NativeState.PAUSED;
SDLActivity.handleNativeState();
mIsSurfaceReady = false;
SDLActivity.onNativeSurfaceDestroyed();
}
// Called when the surface is resized
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
Log.v("SDL", "surfaceChanged()");
if (SDLActivity.mSingleton == null) {
return;
}
mWidth = width;
mHeight = height;
int nDeviceWidth = width;
int nDeviceHeight = height;
try
{
if (Build.VERSION.SDK_INT >= 17 /* Android 4.2 (JELLY_BEAN_MR1) */) {
DisplayMetrics realMetrics = new DisplayMetrics();
mDisplay.getRealMetrics( realMetrics );
nDeviceWidth = realMetrics.widthPixels;
nDeviceHeight = realMetrics.heightPixels;
}
} catch(Exception ignored) {
}
synchronized(SDLActivity.getContext()) {
// In case we're waiting on a size change after going fullscreen, send a notification.
SDLActivity.getContext().notifyAll();
}
Log.v("SDL", "Window size: " + width + "x" + height);
Log.v("SDL", "Device size: " + nDeviceWidth + "x" + nDeviceHeight);
SDLActivity.nativeSetScreenResolution(width, height, nDeviceWidth, nDeviceHeight, mDisplay.getRefreshRate());
SDLActivity.onNativeResize();
// Prevent a screen distortion glitch,
// for instance when the device is in Landscape and a Portrait App is resumed.
boolean skip = false;
int requestedOrientation = SDLActivity.mSingleton.getRequestedOrientation();
if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT) {
if (mWidth > mHeight) {
skip = true;
}
} else if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) {
if (mWidth < mHeight) {
skip = true;
}
}
// Special Patch for Square Resolution: Black Berry Passport
if (skip) {
double min = Math.min(mWidth, mHeight);
double max = Math.max(mWidth, mHeight);
if (max / min < 1.20) {
Log.v("SDL", "Don't skip on such aspect-ratio. Could be a square resolution.");
skip = false;
}
}
// Don't skip in MultiWindow.
if (skip) {
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
if (SDLActivity.mSingleton.isInMultiWindowMode()) {
Log.v("SDL", "Don't skip in Multi-Window");
skip = false;
}
}
}
if (skip) {
Log.v("SDL", "Skip .. Surface is not ready.");
mIsSurfaceReady = false;
return;
}
/* If the surface has been previously destroyed by onNativeSurfaceDestroyed, recreate it here */
SDLActivity.onNativeSurfaceChanged();
/* Surface is ready */
mIsSurfaceReady = true;
SDLActivity.mNextNativeState = SDLActivity.NativeState.RESUMED;
SDLActivity.handleNativeState();
}
// Key events
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
return SDLActivity.handleKeyEvent(v, keyCode, event, null);
}
// Touch events
@Override
public boolean onTouch(View v, MotionEvent event) {
/* Ref: http://developer.android.com/training/gestures/multi.html */
int touchDevId = event.getDeviceId();
final int pointerCount = event.getPointerCount();
int action = event.getActionMasked();
int pointerFingerId;
int i = -1;
float x,y,p;
/*
* Prevent id to be -1, since it's used in SDL internal for synthetic events
* Appears when using Android emulator, eg:
* adb shell input mouse tap 100 100
* adb shell input touchscreen tap 100 100
*/
if (touchDevId < 0) {
touchDevId -= 1;
}
// 12290 = Samsung DeX mode desktop mouse
// 12290 = 0x3002 = 0x2002 | 0x1002 = SOURCE_MOUSE | SOURCE_TOUCHSCREEN
// 0x2 = SOURCE_CLASS_POINTER
if (event.getSource() == InputDevice.SOURCE_MOUSE || event.getSource() == (InputDevice.SOURCE_MOUSE | InputDevice.SOURCE_TOUCHSCREEN)) {
int mouseButton = 1;
try {
Object object = event.getClass().getMethod("getButtonState").invoke(event);
if (object != null) {
mouseButton = (Integer) object;
}
} catch(Exception ignored) {
}
// We need to check if we're in relative mouse mode and get the axis offset rather than the x/y values
// if we are. We'll leverage our existing mouse motion listener
SDLGenericMotionListener_API12 motionListener = SDLActivity.getMotionListener();
x = motionListener.getEventX(event);
y = motionListener.getEventY(event);
SDLActivity.onNativeMouse(mouseButton, action, x, y, motionListener.inRelativeMode());
} else {
switch(action) {
case MotionEvent.ACTION_MOVE:
for (i = 0; i < pointerCount; i++) {
pointerFingerId = event.getPointerId(i);
x = event.getX(i) / mWidth;
y = event.getY(i) / mHeight;
p = event.getPressure(i);
if (p > 1.0f) {
// may be larger than 1.0f on some devices
// see the documentation of getPressure(i)
p = 1.0f;
}
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_DOWN:
// Primary pointer up/down, the index is always zero
i = 0;
/* fallthrough */
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_POINTER_DOWN:
// Non primary pointer up/down
if (i == -1) {
i = event.getActionIndex();
}
pointerFingerId = event.getPointerId(i);
x = event.getX(i) / mWidth;
y = event.getY(i) / mHeight;
p = event.getPressure(i);
if (p > 1.0f) {
// may be larger than 1.0f on some devices
// see the documentation of getPressure(i)
p = 1.0f;
}
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
break;
case MotionEvent.ACTION_CANCEL:
for (i = 0; i < pointerCount; i++) {
pointerFingerId = event.getPointerId(i);
x = event.getX(i) / mWidth;
y = event.getY(i) / mHeight;
p = event.getPressure(i);
if (p > 1.0f) {
// may be larger than 1.0f on some devices
// see the documentation of getPressure(i)
p = 1.0f;
}
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, MotionEvent.ACTION_UP, x, y, p);
}
break;
default:
break;
}
}
return true;
}
// Sensor events
public void enableSensor(int sensortype, boolean enabled) {
// TODO: This uses getDefaultSensor - what if we have >1 accels?
if (enabled) {
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(sensortype),
SensorManager.SENSOR_DELAY_GAME, null);
} else {
mSensorManager.unregisterListener(this,
mSensorManager.getDefaultSensor(sensortype));
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
// Since we may have an orientation set, we won't receive onConfigurationChanged events.
// We thus should check here.
int newOrientation;
float x, y;
switch (mDisplay.getRotation()) {
case Surface.ROTATION_90:
x = -event.values[1];
y = event.values[0];
newOrientation = SDLActivity.SDL_ORIENTATION_LANDSCAPE;
break;
case Surface.ROTATION_270:
x = event.values[1];
y = -event.values[0];
newOrientation = SDLActivity.SDL_ORIENTATION_LANDSCAPE_FLIPPED;
break;
case Surface.ROTATION_180:
x = -event.values[0];
y = -event.values[1];
newOrientation = SDLActivity.SDL_ORIENTATION_PORTRAIT_FLIPPED;
break;
case Surface.ROTATION_0:
default:
x = event.values[0];
y = event.values[1];
newOrientation = SDLActivity.SDL_ORIENTATION_PORTRAIT;
break;
}
if (newOrientation != SDLActivity.mCurrentOrientation) {
SDLActivity.mCurrentOrientation = newOrientation;
SDLActivity.onNativeOrientationChanged(newOrientation);
}
SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
y / SensorManager.GRAVITY_EARTH,
event.values[2] / SensorManager.GRAVITY_EARTH);
}
}
// Captured pointer events for API 26.
public boolean onCapturedPointerEvent(MotionEvent event)
{
int action = event.getActionMasked();
float x, y;
switch (action) {
case MotionEvent.ACTION_SCROLL:
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
case MotionEvent.ACTION_HOVER_MOVE:
case MotionEvent.ACTION_MOVE:
x = event.getX(0);
y = event.getY(0);
SDLActivity.onNativeMouse(0, action, x, y, true);
return true;
case MotionEvent.ACTION_BUTTON_PRESS:
case MotionEvent.ACTION_BUTTON_RELEASE:
// Change our action value to what SDL's code expects.
if (action == MotionEvent.ACTION_BUTTON_PRESS) {
action = MotionEvent.ACTION_DOWN;
} else { /* MotionEvent.ACTION_BUTTON_RELEASE */
action = MotionEvent.ACTION_UP;
}
x = event.getX(0);
y = event.getY(0);
int button = event.getButtonState();
SDLActivity.onNativeMouse(button, action, x, y, true);
return true;
}
return false;
}
}

View File

@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.3.0-alpha10'
classpath 'com.android.tools.build:gradle:8.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

View File

@ -16,6 +16,7 @@
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.enableJetifier=true
android.enableJetifier=false
android.useAndroidX=true
org.gradle.configuration-cache=true
org.gradle.jvmargs=-Xmx4096m

View File

@ -1,6 +1,7 @@
#Tue Dec 17 14:39:20 EST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip

View File

@ -1,74 +1,127 @@
#!/usr/bin/env bash
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Attempt to set APP_HOME
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
MAX_FD=maximum
warn ( ) {
warn () {
echo "$*"
}
} >&2
die ( ) {
die () {
echo
echo "$*"
echo
exit 1
}
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@ -77,84 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ -n "$GRADLE_CYGPATTERN" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

View File

@ -1,4 +1,20 @@
@if "%DEBUG%" == "" @echo off
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@ -8,20 +24,24 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@ -35,7 +55,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@ -45,44 +65,26 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -27,7 +27,7 @@ CursorRepository::~CursorRepository()
void CursorRepository::LoadCursors()
{
SetCursorScale(static_cast<uint8_t>(round(gConfigGeneral.WindowScale)));
SetCursorScale(static_cast<uint8_t>(round(Config::Get().general.WindowScale)));
SetCurrentCursor(CursorID::Arrow);
}

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -11,6 +11,8 @@
#include <SDL.h>
using namespace OpenRCT2::Ui;
SDLException::SDLException(const std::string& message)
: runtime_error(message.c_str())
{

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -12,19 +12,22 @@
#include <stdexcept>
#include <string>
/**
* An exception which wraps an SDL error.
*/
class SDLException : public std::runtime_error
namespace OpenRCT2::Ui
{
public:
explicit SDLException(const std::string& message);
explicit SDLException(const char* message);
/**
* Throws an SDL exception with a message containing the given call information
* and the message given by SDL_GetError.
* An exception which wraps an SDL error.
*/
static void Throw(const char* call);
};
class SDLException : public std::runtime_error
{
public:
explicit SDLException(const std::string& message);
explicit SDLException(const char* message);
/**
* Throws an SDL exception with a message containing the given call information
* and the message given by SDL_GetError.
*/
static void Throw(const char* call);
};
} // namespace OpenRCT2::Ui

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -10,16 +10,19 @@
#include "TextComposition.h"
#include "UiContext.h"
#include "UiStringIds.h"
#include "interface/InGameConsole.h"
#include <SDL.h>
#include <algorithm>
#include <openrct2-ui/interface/Window.h>
#include <openrct2/common.h>
#include <openrct2/core/Memory.hpp>
#include <openrct2/core/String.hpp>
#include <openrct2/interface/InteractiveConsole.h>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/localisation/Language.h>
// TODO: only because of STR_NONE. We can do better.
#include <openrct2/localisation/StringIds.h>
#ifdef __MACOSX__
// macOS uses COMMAND rather than CTRL for many keyboard shortcuts
@ -38,11 +41,7 @@ bool TextComposition::IsActive()
TextInputSession* TextComposition::Start(u8string& buffer, size_t maxLength)
{
// TODO This doesn't work, and position could be improved to where text entry is
SDL_Rect rect = { 10, 10, 100, 100 };
SDL_SetTextInputRect(&rect);
SDL_StartTextInput();
_session.Buffer = &buffer;
_session.MaxLength = maxLength;
_session.SelectionStart = buffer.size();
@ -88,7 +87,7 @@ void TextComposition::HandleMessage(const SDL_Event* e)
Insert(e->text.text);
console.RefreshCaret(_session.SelectionStart);
WindowUpdateTextbox();
OpenRCT2::Ui::Windows::WindowUpdateTextbox();
}
break;
case SDL_KEYDOWN:
@ -131,7 +130,7 @@ void TextComposition::HandleMessage(const SDL_Event* e)
Delete();
console.RefreshCaret(_session.SelectionStart);
WindowUpdateTextbox();
OpenRCT2::Ui::Windows::WindowUpdateTextbox();
}
break;
case SDLK_HOME:
@ -153,11 +152,11 @@ void TextComposition::HandleMessage(const SDL_Event* e)
_session.SelectionStart = startOffset;
Delete();
console.RefreshCaret(_session.SelectionStart);
WindowUpdateTextbox();
OpenRCT2::Ui::Windows::WindowUpdateTextbox();
break;
}
case SDLK_RETURN:
WindowCancelTextbox();
OpenRCT2::Ui::Windows::WindowCancelTextbox();
break;
case SDLK_LEFT:
if (modifier & KEYBOARD_PRIMARY_MODIFIER)
@ -186,7 +185,7 @@ void TextComposition::HandleMessage(const SDL_Event* e)
utf8* text = SDL_GetClipboardText();
Insert(text);
SDL_free(text);
WindowUpdateTextbox();
OpenRCT2::Ui::Windows::WindowUpdateTextbox();
}
break;
}
@ -276,7 +275,8 @@ void TextComposition::CaretMoveToLeftToken()
lastChar = selectionOffset;
break;
}
if (selectionOffset == 0)
break;
ch--;
selectionOffset--;
}
@ -295,12 +295,13 @@ void TextComposition::CaretMoveToLeftToken()
break;
lastChar = selectionOffset;
if (selectionOffset == 0)
break;
ch--;
selectionOffset--;
}
_session.SelectionSize = std::max<size_t>(0, _session.SelectionSize - (selectionOffset - _session.SelectionStart));
_session.SelectionSize = _session.SelectionSize - (selectionOffset - _session.SelectionStart);
_session.SelectionStart = selectionOffset == 0 ? 0 : lastChar;
}

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -11,13 +11,16 @@
# include "UiContext.h"
# include "UiStringIds.h"
# include <SDL.h>
# include <algorithm>
# include <dlfcn.h>
# include <openrct2/common.h>
# include <openrct2/core/Path.hpp>
# include <openrct2/core/String.hpp>
# include <openrct2/core/StringBuilder.h>
# include <openrct2/localisation/Localisation.h>
# include <openrct2/localisation/Language.h>
# include <openrct2/platform/Platform.h>
# include <openrct2/ui/UiContext.h>
# include <sstream>

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -11,6 +11,9 @@
// Windows.h needs to be included first
// clang-format off
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# include <shellapi.h>
// clang-format on
@ -21,7 +24,6 @@
# include <SDL.h>
# include <SDL_syswm.h>
# include <algorithm>
# include <openrct2/common.h>
# include <openrct2/core/Path.hpp>
# include <openrct2/core/String.hpp>

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -12,6 +12,7 @@
#include "CursorRepository.h"
#include "SDLException.h"
#include "TextComposition.h"
#include "UiStringIds.h"
#include "WindowManager.h"
#include "drawing/engines/DrawingEngineFactory.hpp"
#include "input/ShortcutManager.h"
@ -21,7 +22,6 @@
#include "title/TitleSequencePlayer.h"
#include <SDL.h>
#include <algorithm>
#include <chrono>
#include <cmath>
#include <cstdlib>
@ -39,15 +39,17 @@
#include <openrct2/drawing/IDrawingEngine.h>
#include <openrct2/interface/Chat.h>
#include <openrct2/interface/InteractiveConsole.h>
#include <openrct2/localisation/StringIds.h>
#include <openrct2/platform/Platform.h>
#include <openrct2/scenes/title/TitleSequencePlayer.h>
#include <openrct2/scripting/ScriptEngine.h>
#include <openrct2/title/TitleSequencePlayer.h>
#include <openrct2/ui/UiContext.h>
#include <openrct2/ui/WindowManager.h>
#include <openrct2/world/Location.hpp>
#include <vector>
// TODO: only because of STR_NONE. We can do better.
#include <openrct2/localisation/StringIds.h>
using namespace OpenRCT2;
using namespace OpenRCT2::Drawing;
using namespace OpenRCT2::Scripting;
@ -140,6 +142,10 @@ public:
void Tick() override
{
_inGameConsole.Update();
_windowManager->UpdateMapTooltip();
WindowDispatchUpdateAll();
}
void Draw(DrawPixelInfo& dpi) override
@ -177,7 +183,7 @@ public:
SDL_WINDOW_FULLSCREEN,
SDL_WINDOW_FULLSCREEN_DESKTOP,
};
uint32_t windowFlags = _sdlFullscreenFlags[static_cast<int32_t>(mode)];
uint32_t windowFlags = _sdlFullscreenFlags[EnumValue(mode)];
// HACK Changing window size when in fullscreen usually has no effect
if (mode == FULLSCREEN_MODE::FULLSCREEN)
@ -186,12 +192,13 @@ public:
// Set window size
UpdateFullscreenResolutions();
Resolution resolution = GetClosestResolution(gConfigGeneral.FullscreenWidth, gConfigGeneral.FullscreenHeight);
Resolution resolution = GetClosestResolution(
Config::Get().general.FullscreenWidth, Config::Get().general.FullscreenHeight);
SDL_SetWindowSize(_window, resolution.Width, resolution.Height);
}
else if (mode == FULLSCREEN_MODE::WINDOWED)
{
SDL_SetWindowSize(_window, gConfigGeneral.WindowWidth, gConfigGeneral.WindowHeight);
SDL_SetWindowSize(_window, Config::Get().general.WindowWidth, Config::Get().general.WindowHeight);
}
if (SDL_SetWindowFullscreen(_window, windowFlags))
@ -352,16 +359,16 @@ public:
{
// Update default display index
int32_t displayIndex = SDL_GetWindowDisplayIndex(_window);
if (displayIndex != gConfigGeneral.DefaultDisplay)
if (displayIndex != Config::Get().general.DefaultDisplay)
{
gConfigGeneral.DefaultDisplay = displayIndex;
ConfigSaveDefault();
Config::Get().general.DefaultDisplay = displayIndex;
Config::Save();
}
break;
}
}
if (gConfigSound.audio_focus)
if (Config::Get().sound.audio_focus)
{
if (e.window.event == SDL_WINDOWEVENT_FOCUS_GAINED)
{
@ -374,8 +381,8 @@ public:
}
break;
case SDL_MOUSEMOTION:
_cursorState.position = { static_cast<int32_t>(e.motion.x / gConfigGeneral.WindowScale),
static_cast<int32_t>(e.motion.y / gConfigGeneral.WindowScale) };
_cursorState.position = { static_cast<int32_t>(e.motion.x / Config::Get().general.WindowScale),
static_cast<int32_t>(e.motion.y / Config::Get().general.WindowScale) };
break;
case SDL_MOUSEWHEEL:
if (_inGameConsole.IsOpen())
@ -391,8 +398,8 @@ public:
{
break;
}
ScreenCoordsXY mousePos = { static_cast<int32_t>(e.button.x / gConfigGeneral.WindowScale),
static_cast<int32_t>(e.button.y / gConfigGeneral.WindowScale) };
ScreenCoordsXY mousePos = { static_cast<int32_t>(e.button.x / Config::Get().general.WindowScale),
static_cast<int32_t>(e.button.y / Config::Get().general.WindowScale) };
switch (e.button.button)
{
case SDL_BUTTON_LEFT:
@ -427,8 +434,8 @@ public:
{
break;
}
ScreenCoordsXY mousePos = { static_cast<int32_t>(e.button.x / gConfigGeneral.WindowScale),
static_cast<int32_t>(e.button.y / gConfigGeneral.WindowScale) };
ScreenCoordsXY mousePos = { static_cast<int32_t>(e.button.x / Config::Get().general.WindowScale),
static_cast<int32_t>(e.button.y / Config::Get().general.WindowScale) };
switch (e.button.button)
{
case SDL_BUTTON_LEFT:
@ -582,7 +589,7 @@ public:
{
char scaleQualityBuffer[4];
_scaleQuality = ScaleQuality::SmoothNearestNeighbour;
if (gConfigGeneral.WindowScale == std::floor(gConfigGeneral.WindowScale))
if (Config::Get().general.WindowScale == std::floor(Config::Get().general.WindowScale))
{
_scaleQuality = ScaleQuality::NearestNeighbour;
}
@ -602,10 +609,10 @@ public:
void CreateWindow() override
{
SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, gConfigGeneral.MinimizeFullscreenFocusLoss ? "1" : "0");
SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, Config::Get().general.MinimizeFullscreenFocusLoss ? "1" : "0");
// Set window position to default display
int32_t defaultDisplay = std::clamp(gConfigGeneral.DefaultDisplay, 0, 0xFFFF);
int32_t defaultDisplay = std::clamp(Config::Get().general.DefaultDisplay, 0, 0xFFFF);
auto windowPos = ScreenCoordsXY{ static_cast<int32_t>(SDL_WINDOWPOS_UNDEFINED_DISPLAY(defaultDisplay)),
static_cast<int32_t>(SDL_WINDOWPOS_UNDEFINED_DISPLAY(defaultDisplay)) };
@ -714,9 +721,7 @@ public:
{
if (_titleSequencePlayer == nullptr)
{
auto context = GetContext();
auto gameState = context->GetGameState();
_titleSequencePlayer = OpenRCT2::Title::CreateTitleSequencePlayer(*gameState);
_titleSequencePlayer = OpenRCT2::Title::CreateTitleSequencePlayer();
}
return _titleSequencePlayer.get();
}
@ -732,8 +737,8 @@ private:
void CreateWindow(const ScreenCoordsXY& windowPos)
{
// Get saved window size
int32_t width = gConfigGeneral.WindowWidth;
int32_t height = gConfigGeneral.WindowHeight;
int32_t width = Config::Get().general.WindowWidth;
int32_t height = Config::Get().general.WindowHeight;
if (width <= 0)
width = 640;
if (height <= 0)
@ -741,7 +746,7 @@ private:
// Create window in window first rather than fullscreen so we have the display the window is on first
uint32_t flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
if (gConfigGeneral.DrawingEngine == DrawingEngine::OpenGL)
if (Config::Get().general.DrawingEngine == DrawingEngine::OpenGL)
{
flags |= SDL_WINDOW_OPENGL;
}
@ -755,7 +760,7 @@ private:
ApplyScreenSaverLockSetting();
SDL_SetWindowMinimumSize(_window, 720, 480);
SetCursorTrap(gConfigGeneral.TrapCursor);
SetCursorTrap(Config::Get().general.TrapCursor);
_platformUiContext->SetWindowIcon(_window);
// Initialise the surface, palette and draw buffer
@ -764,20 +769,15 @@ private:
UpdateFullscreenResolutions();
// Fix #4022: Force Mac to windowed to avoid cursor offset on launch issue
#ifdef __MACOSX__
gConfigGeneral.FullscreenMode = static_cast<int32_t>(OpenRCT2::Ui::FULLSCREEN_MODE::WINDOWED);
#else
SetFullscreenMode(static_cast<FULLSCREEN_MODE>(gConfigGeneral.FullscreenMode));
#endif
SetFullscreenMode(static_cast<FULLSCREEN_MODE>(Config::Get().general.FullscreenMode));
TriggerResize();
}
void OnResize(int32_t width, int32_t height)
{
// Scale the native window size to the game's canvas size
_width = static_cast<int32_t>(width / gConfigGeneral.WindowScale);
_height = static_cast<int32_t>(height / gConfigGeneral.WindowScale);
_width = static_cast<int32_t>(width / Config::Get().general.WindowScale);
_height = static_cast<int32_t>(height / Config::Get().general.WindowScale);
DrawingEngineResize();
@ -799,11 +799,11 @@ private:
if (!(flags & nonWindowFlags))
{
if (width != gConfigGeneral.WindowWidth || height != gConfigGeneral.WindowHeight)
if (width != Config::Get().general.WindowWidth || height != Config::Get().general.WindowHeight)
{
gConfigGeneral.WindowWidth = width;
gConfigGeneral.WindowHeight = height;
ConfigSaveDefault();
Config::Get().general.WindowWidth = width;
Config::Get().general.WindowHeight = height;
Config::Save();
}
}
}
@ -848,10 +848,11 @@ private:
resolutions.erase(last, resolutions.end());
// Update config fullscreen resolution if not set
if (!resolutions.empty() && (gConfigGeneral.FullscreenWidth == -1 || gConfigGeneral.FullscreenHeight == -1))
if (!resolutions.empty()
&& (Config::Get().general.FullscreenWidth == -1 || Config::Get().general.FullscreenHeight == -1))
{
gConfigGeneral.FullscreenWidth = resolutions.back().Width;
gConfigGeneral.FullscreenHeight = resolutions.back().Height;
Config::Get().general.FullscreenWidth = resolutions.back().Width;
Config::Get().general.FullscreenHeight = resolutions.back().Height;
}
_fsResolutions = resolutions;

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -20,35 +20,35 @@ namespace OpenRCT2
{
struct IContext;
struct IPlatformEnvironment;
namespace Ui
{
struct FileDialogDesc;
class InGameConsole;
struct IUiContext;
struct IPlatformUiContext
{
virtual ~IPlatformUiContext() = default;
virtual void SetWindowIcon(SDL_Window* window) abstract;
virtual bool IsSteamOverlayAttached() abstract;
virtual void ShowMessageBox(SDL_Window* window, const std::string& message) abstract;
virtual bool HasMenuSupport() abstract;
virtual int32_t ShowMenuDialog(
const std::vector<std::string>& options, const std::string& title, const std::string& text) abstract;
virtual void OpenFolder(const std::string& path) abstract;
virtual void OpenURL(const std::string& url) abstract;
virtual std::string ShowFileDialog(SDL_Window* window, const FileDialogDesc& desc) abstract;
virtual std::string ShowDirectoryDialog(SDL_Window* window, const std::string& title) abstract;
virtual bool HasFilePicker() const abstract;
};
[[nodiscard]] std::unique_ptr<IUiContext> CreateUiContext(const std::shared_ptr<IPlatformEnvironment>& env);
[[nodiscard]] std::unique_ptr<IPlatformUiContext> CreatePlatformUiContext();
[[nodiscard]] InGameConsole& GetInGameConsole();
} // namespace Ui
} // namespace OpenRCT2
namespace OpenRCT2::Ui
{
struct FileDialogDesc;
class InGameConsole;
struct IUiContext;
struct IPlatformUiContext
{
virtual ~IPlatformUiContext() = default;
virtual void SetWindowIcon(SDL_Window* window) abstract;
virtual bool IsSteamOverlayAttached() abstract;
virtual void ShowMessageBox(SDL_Window* window, const std::string& message) abstract;
virtual bool HasMenuSupport() abstract;
virtual int32_t ShowMenuDialog(
const std::vector<std::string>& options, const std::string& title, const std::string& text) abstract;
virtual void OpenFolder(const std::string& path) abstract;
virtual void OpenURL(const std::string& url) abstract;
virtual std::string ShowFileDialog(SDL_Window* window, const FileDialogDesc& desc) abstract;
virtual std::string ShowDirectoryDialog(SDL_Window* window, const std::string& title) abstract;
virtual bool HasFilePicker() const abstract;
};
[[nodiscard]] std::unique_ptr<IUiContext> CreateUiContext(const std::shared_ptr<IPlatformEnvironment>& env);
[[nodiscard]] std::unique_ptr<IPlatformUiContext> CreatePlatformUiContext();
[[nodiscard]] InGameConsole& GetInGameConsole();
} // namespace OpenRCT2::Ui

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -129,6 +129,7 @@ namespace OpenRCT2::Ui
}
else
{
SDL_RaiseWindow(window);
return std::string();
}
@ -137,10 +138,12 @@ namespace OpenRCT2::Ui
panel.directoryURL = [NSURL fileURLWithPath:directory];
if ([panel runModal] == NSModalResponseCancel)
{
SDL_RaiseWindow(window);
return std::string();
}
else
{
SDL_RaiseWindow(window);
return panel.URL.path.UTF8String;
}
}
@ -158,10 +161,12 @@ namespace OpenRCT2::Ui
{
NSString* selectedPath = panel.URL.path;
const char* path = selectedPath.UTF8String;
SDL_RaiseWindow(window);
return path;
}
else
{
SDL_RaiseWindow(window);
return "";
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -10,6 +10,7 @@
#include "WindowManager.h"
#include "interface/Theme.h"
#include "ride/VehicleSounds.h"
#include "windows/Window.h"
#include <openrct2-ui/input/InputManager.h>
@ -27,7 +28,9 @@
#include <openrct2/ride/Vehicle.h>
#include <openrct2/ui/WindowManager.h>
using namespace OpenRCT2;
using namespace OpenRCT2::Ui;
using namespace OpenRCT2::Ui::Windows;
class WindowManager final : public IWindowManager
{
@ -43,101 +46,101 @@ public:
switch (wc)
{
case WindowClass::About:
return WindowAboutOpen();
return AboutOpen();
case WindowClass::BottomToolbar:
return WindowGameBottomToolbarOpen();
return GameBottomToolbarOpen();
case WindowClass::Changelog:
return OpenView(WV_CHANGELOG);
case WindowClass::Cheats:
return WindowCheatsOpen();
return CheatsOpen();
case WindowClass::ClearScenery:
return WindowClearSceneryOpen();
return ClearSceneryOpen();
case WindowClass::CustomCurrencyConfig:
return CustomCurrencyWindowOpen();
return CustomCurrencyOpen();
case WindowClass::DebugPaint:
return WindowDebugPaintOpen();
return DebugPaintOpen();
case WindowClass::EditorInventionList:
return WindowEditorInventionsListOpen();
return EditorInventionsListOpen();
case WindowClass::EditorObjectSelection:
return WindowEditorObjectSelectionOpen();
return EditorObjectSelectionOpen();
case WindowClass::EditorObjectiveOptions:
return WindowEditorObjectiveOptionsOpen();
return EditorObjectiveOptionsOpen();
case WindowClass::EditorScenarioOptions:
return WindowEditorScenarioOptionsOpen();
return EditorScenarioOptionsOpen();
case WindowClass::Finances:
return WindowFinancesOpen();
return FinancesOpen();
case WindowClass::Footpath:
return WindowFootpathOpen();
return FootpathOpen();
case WindowClass::GuestList:
return WindowGuestListOpen();
return GuestListOpen();
case WindowClass::Land:
return WindowLandOpen();
return LandOpen();
case WindowClass::LandRights:
return WindowLandRightsOpen();
return LandRightsOpen();
case WindowClass::MainWindow:
return WindowMainOpen();
return MainOpen();
case WindowClass::Map:
return WindowMapOpen();
return MapOpen();
case WindowClass::Mapgen:
return WindowMapgenOpen();
return MapgenOpen();
case WindowClass::Multiplayer:
return WindowMultiplayerOpen();
return MultiplayerOpen();
case WindowClass::ConstructRide:
return WindowNewRideOpen();
return NewRideOpen();
case WindowClass::ParkInformation:
return WindowParkEntranceOpen();
return ParkEntranceOpen();
case WindowClass::RecentNews:
return WindowNewsOpen();
return NewsOpen();
case WindowClass::RideConstruction:
return WindowRideConstructionOpen();
return RideConstructionOpen();
case WindowClass::Research:
return WindowResearchOpen();
return ResearchOpen();
case WindowClass::RideList:
return WindowRideListOpen();
return RideListOpen();
case WindowClass::NotificationOptions:
return WindowNewsOptionsOpen();
return NewsOptionsOpen();
case WindowClass::Options:
return WindowOptionsOpen();
return OptionsOpen();
case WindowClass::SavePrompt:
return WindowSavePromptOpen();
return SavePromptOpen();
case WindowClass::Scenery:
return WindowSceneryOpen();
return SceneryOpen();
case WindowClass::SceneryScatter:
return WindowSceneryScatterOpen();
return SceneryScatterOpen();
#ifndef DISABLE_NETWORK
case WindowClass::ServerList:
return WindowServerListOpen();
return ServerListOpen();
case WindowClass::ServerStart:
return WindowServerStartOpen();
return ServerStartOpen();
#endif
case WindowClass::KeyboardShortcutList:
return WindowShortcutKeysOpen();
return ShortcutKeysOpen();
case WindowClass::StaffList:
return WindowStaffListOpen();
return StaffListOpen();
case WindowClass::Themes:
return WindowThemesOpen();
return ThemesOpen();
case WindowClass::TileInspector:
return WindowTileInspectorOpen();
return TileInspectorOpen();
case WindowClass::TitleExit:
return WindowTitleExitOpen();
return TitleExitOpen();
case WindowClass::TitleLogo:
return WindowTitleLogoOpen();
return TitleLogoOpen();
case WindowClass::TitleMenu:
return WindowTitleMenuOpen();
return TitleMenuOpen();
case WindowClass::TitleOptions:
return WindowTitleOptionsOpen();
return TitleOptionsOpen();
case WindowClass::TopToolbar:
return WindowTopToolbarOpen();
return TopToolbarOpen();
case WindowClass::ViewClipping:
return WindowViewClippingOpen();
return ViewClippingOpen();
case WindowClass::Viewport:
return WindowViewportOpen();
return ViewportOpen();
case WindowClass::Water:
return WindowWaterOpen();
return WaterOpen();
case WindowClass::Transparency:
return WindowTransparencyOpen();
return TransparencyOpen();
case WindowClass::AssetPacks:
return WindowAssetPacksOpen();
return AssetPacksOpen();
default:
Console::Error::WriteLine("Unhandled window class (%d)", wc);
return nullptr;
@ -149,35 +152,35 @@ public:
switch (view)
{
case WV_PARK_AWARDS:
return WindowParkAwardsOpen();
return ParkAwardsOpen();
case WV_PARK_RATING:
return WindowParkRatingOpen();
return ParkRatingOpen();
case WV_PARK_OBJECTIVE:
return WindowParkObjectiveOpen();
return ParkObjectiveOpen();
case WV_PARK_GUESTS:
return WindowParkGuestsOpen();
return ParkGuestsOpen();
case WV_FINANCES_RESEARCH:
return WindowFinancesResearchOpen();
return FinancesResearchOpen();
case WV_RIDE_RESEARCH:
if (gConfigInterface.ToolbarShowResearch)
if (Config::Get().interface.ToolbarShowResearch)
{
return this->OpenWindow(WindowClass::Research);
}
return WindowNewRideOpenResearch();
return NewRideOpenResearch();
case WV_MAZE_CONSTRUCTION:
return WindowMazeConstructionOpen();
return MazeConstructionOpen();
case WV_NETWORK_PASSWORD:
return WindowNetworkStatusOpenPassword();
return NetworkStatusOpenPassword();
case WV_EDITOR_BOTTOM_TOOLBAR:
return WindowEditorBottomToolbarOpen();
return EditorBottomToolbarOpen();
case WV_CHANGELOG:
return WindowChangelogOpen(WV_CHANGELOG);
return ChangelogOpen(WV_CHANGELOG);
case WV_NEW_VERSION_INFO:
return WindowChangelogOpen(WV_NEW_VERSION_INFO);
return ChangelogOpen(WV_NEW_VERSION_INFO);
case WV_CONTRIBUTORS:
return WindowChangelogOpen(WV_CONTRIBUTORS);
return ChangelogOpen(WV_CONTRIBUTORS);
case WV_FINANCE_MARKETING:
return WindowFinancesMarketingOpen();
return FinancesMarketingOpen();
default:
return nullptr;
}
@ -188,33 +191,33 @@ public:
switch (type)
{
case WD_BANNER:
return WindowBannerOpen(id);
return BannerOpen(id);
case WD_NEW_CAMPAIGN:
return WindowNewCampaignOpen(id);
return NewCampaignOpen(id);
case WD_DEMOLISH_RIDE:
return WindowRideDemolishPromptOpen(*GetRide(RideId::FromUnderlying(id)));
return RideDemolishPromptOpen(*GetRide(RideId::FromUnderlying(id)));
case WD_REFURBISH_RIDE:
return WindowRideRefurbishPromptOpen(*GetRide(RideId::FromUnderlying(id)));
return RideRefurbishPromptOpen(*GetRide(RideId::FromUnderlying(id)));
case WD_SIGN:
return WindowSignOpen(id);
return SignOpen(id);
case WD_SIGN_SMALL:
return WindowSignSmallOpen(id);
return SignSmallOpen(id);
case WD_PLAYER:
return WindowPlayerOpen(id);
return PlayerOpen(id);
default:
return nullptr;
}
}
WindowBase* ShowError(StringId title, StringId message, const Formatter& args) override
WindowBase* ShowError(StringId title, StringId message, const Formatter& args, bool autoClose /* = false */) override
{
return WindowErrorOpen(title, message, args);
return ErrorOpen(title, message, args, autoClose);
}
WindowBase* ShowError(std::string_view title, std::string_view message) override
WindowBase* ShowError(std::string_view title, std::string_view message, bool autoClose /* = false */) override
{
return WindowErrorOpen(title, message);
return ErrorOpen(title, message, autoClose);
}
WindowBase* OpenIntent(Intent* intent) override
@ -222,13 +225,13 @@ public:
switch (intent->GetWindowClass())
{
case WindowClass::Peep:
return WindowGuestOpen(static_cast<Peep*>(intent->GetPointerExtra(INTENT_EXTRA_PEEP)));
return GuestOpen(static_cast<Peep*>(intent->GetPointerExtra(INTENT_EXTRA_PEEP)));
case WindowClass::FirePrompt:
return WindowStaffFirePromptOpen(static_cast<Peep*>(intent->GetPointerExtra(INTENT_EXTRA_PEEP)));
return StaffFirePromptOpen(static_cast<Peep*>(intent->GetPointerExtra(INTENT_EXTRA_PEEP)));
case WindowClass::InstallTrack:
return WindowInstallTrackOpen(intent->GetStringExtra(INTENT_EXTRA_PATH).c_str());
return InstallTrackOpen(intent->GetStringExtra(INTENT_EXTRA_PATH).c_str());
case WindowClass::GuestList:
return WindowGuestListOpenWithFilter(
return GuestListOpenWithFilter(
static_cast<GuestListFilterType>(intent->GetSIntExtra(INTENT_EXTRA_GUEST_LIST_FILTER)),
intent->GetSIntExtra(INTENT_EXTRA_RIDE_ID));
case WindowClass::Loadsave:
@ -238,7 +241,7 @@ public:
loadsave_callback callback = reinterpret_cast<loadsave_callback>(
intent->GetPointerExtra(INTENT_EXTRA_CALLBACK));
TrackDesign* trackDesign = static_cast<TrackDesign*>(intent->GetPointerExtra(INTENT_EXTRA_TRACK_DESIGN));
auto* w = WindowLoadsaveOpen(
auto* w = LoadsaveOpen(
type, defaultName,
[callback](int32_t result, std::string_view path) {
if (callback != nullptr)
@ -250,20 +253,19 @@ public:
return w;
}
case WindowClass::ManageTrackDesign:
return WindowTrackManageOpen(
static_cast<TrackDesignFileRef*>(intent->GetPointerExtra(INTENT_EXTRA_TRACK_DESIGN)));
return TrackManageOpen(static_cast<TrackDesignFileRef*>(intent->GetPointerExtra(INTENT_EXTRA_TRACK_DESIGN)));
case WindowClass::NetworkStatus:
{
std::string message = intent->GetStringExtra(INTENT_EXTRA_MESSAGE);
close_callback callback = intent->GetCloseCallbackExtra(INTENT_EXTRA_CALLBACK);
return WindowNetworkStatusOpen(message, callback);
return NetworkStatusOpen(message, callback);
}
case WindowClass::ObjectLoadError:
{
std::string path = intent->GetStringExtra(INTENT_EXTRA_PATH);
auto objects = static_cast<const ObjectEntryDescriptor*>(intent->GetPointerExtra(INTENT_EXTRA_LIST));
size_t count = intent->GetUIntExtra(INTENT_EXTRA_LIST_COUNT);
WindowObjectLoadErrorOpen(const_cast<utf8*>(path.c_str()), count, objects);
ObjectLoadErrorOpen(const_cast<utf8*>(path.c_str()), count, objects);
return nullptr;
}
@ -271,20 +273,19 @@ public:
{
const auto rideId = RideId::FromUnderlying(intent->GetSIntExtra(INTENT_EXTRA_RIDE_ID));
auto ride = GetRide(rideId);
return ride == nullptr ? nullptr : WindowRideMainOpen(*ride);
return ride == nullptr ? nullptr : RideMainOpen(*ride);
}
case WindowClass::TrackDesignPlace:
return WindowTrackPlaceOpen(
static_cast<TrackDesignFileRef*>(intent->GetPointerExtra(INTENT_EXTRA_TRACK_DESIGN)));
return TrackPlaceOpen(static_cast<TrackDesignFileRef*>(intent->GetPointerExtra(INTENT_EXTRA_TRACK_DESIGN)));
case WindowClass::TrackDesignList:
{
RideSelection rideItem;
rideItem.Type = intent->GetUIntExtra(INTENT_EXTRA_RIDE_TYPE);
rideItem.EntryIndex = intent->GetUIntExtra(INTENT_EXTRA_RIDE_ENTRY_INDEX);
return WindowTrackListOpen(rideItem);
return TrackListOpen(rideItem);
}
case WindowClass::ScenarioSelect:
return WindowScenarioselectOpen(
return ScenarioselectOpen(
reinterpret_cast<scenarioselect_callback>(intent->GetPointerExtra(INTENT_EXTRA_CALLBACK)));
case WindowClass::Null:
@ -301,7 +302,7 @@ public:
case INTENT_ACTION_NEW_RIDE_OF_TYPE:
{
// Open ride list window
auto w = WindowNewRideOpen();
auto w = NewRideOpen();
// Switch to right tab and scroll to ride location
RideSelection rideItem;
@ -324,7 +325,7 @@ public:
if (!ToolSet(*tlbrWindow, WC_TOP_TOOLBAR__WIDX_SCENERY, Tool::Arrow))
{
InputSetFlag(INPUT_FLAG_6, true);
window = WindowSceneryOpen();
window = SceneryOpen();
}
}
}
@ -334,6 +335,28 @@ public:
return window;
}
case INTENT_ACTION_PROGRESS_OPEN:
{
std::string message = intent->GetStringExtra(INTENT_EXTRA_MESSAGE);
close_callback callback = intent->GetCloseCallbackExtra(INTENT_EXTRA_CALLBACK);
return ProgressWindowOpen(message, callback);
}
case INTENT_ACTION_PROGRESS_SET:
{
uint32_t currentProgress = intent->GetUIntExtra(INTENT_EXTRA_PROGRESS_OFFSET);
uint32_t totalCount = intent->GetUIntExtra(INTENT_EXTRA_PROGRESS_TOTAL);
StringId format = intent->GetUIntExtra(INTENT_EXTRA_STRING_ID);
ProgressWindowSet(currentProgress, totalCount, format);
return nullptr;
}
case INTENT_ACTION_PROGRESS_CLOSE:
{
ProgressWindowClose();
return nullptr;
}
case INTENT_ACTION_NULL:
// Intent does not hold an intent action
break;
@ -346,9 +369,9 @@ public:
switch (intent->GetWindowDetail())
{
case WD_VEHICLE:
return WindowRideOpenVehicle(static_cast<Vehicle*>(intent->GetPointerExtra(INTENT_EXTRA_VEHICLE)));
return RideOpenVehicle(static_cast<Vehicle*>(intent->GetPointerExtra(INTENT_EXTRA_VEHICLE)));
case WD_TRACK:
return WindowRideOpenTrack(static_cast<TileElement*>(intent->GetPointerExtra(INTENT_EXTRA_TILE_ELEMENT)));
return RideOpenTrack(static_cast<TileElement*>(intent->GetPointerExtra(INTENT_EXTRA_TILE_ELEMENT)));
case WD_NULL:
// Intent does not hold an window detail
@ -511,6 +534,10 @@ public:
WindowInvalidateByClass(WindowClass::Research);
break;
case INTENT_ACTION_UPDATE_VEHICLE_SOUNDS:
OpenRCT2::Audio::UpdateVehicleSounds();
break;
case INTENT_ACTION_TRACK_DESIGN_REMOVE_PROVISIONAL:
TrackPlaceClearProvisionalTemporarily();
break;
@ -548,6 +575,10 @@ public:
WindowNetworkStatusClose();
break;
case WindowClass::ProgressWindow:
ProgressWindowClose();
break;
default:
break;
}
@ -587,7 +618,7 @@ public:
mainWindow->viewport_target_sprite = EntityId::GetNull();
mainWindow->savedViewPos = viewPos;
viewport->zoom = zoom;
gCurrentRotation = rotation;
viewport->rotation = rotation;
if (zoomDifference != ZoomLevel{ 0 })
{

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -48,7 +48,7 @@ namespace OpenRCT2::Audio
AudioChannelImpl()
{
AudioChannelImpl::SetRate(1);
AudioChannelImpl::SetVolume(MIXER_VOLUME_MAX);
AudioChannelImpl::SetVolume(kMixerVolumeMax);
AudioChannelImpl::SetPan(0.5f);
}
@ -155,7 +155,7 @@ namespace OpenRCT2::Audio
void SetVolume(int32_t volume) override
{
_volume = std::clamp(volume, 0, MIXER_VOLUME_MAX);
_volume = std::clamp(volume, 0, kMixerVolumeMax);
}
[[nodiscard]] float GetPan() const override
@ -265,7 +265,7 @@ namespace OpenRCT2::Audio
{
_done = true;
}
else if (_loop == MIXER_LOOP_INFINITE)
else if (_loop == kMixerLoopInfinite)
{
_offset = 0;
}

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
@ -34,7 +34,7 @@ namespace OpenRCT2::Audio
{
if (SDL_Init(SDL_INIT_AUDIO) < 0)
{
SDLException::Throw("SDL_Init(SDL_INIT_AUDIO)");
Ui::SDLException::Throw("SDL_Init(SDL_INIT_AUDIO)");
}
_audioMixer = std::make_unique<AudioMixer>();
}

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

View File

@ -1,5 +1,5 @@
/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2

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